{"version":3,"sources":["node_modules/process/browser.js","node_modules/base64-js/index.js","node_modules/ieee754/index.js","node_modules/isarray/index.js","node_modules/buffer/index.js","../src/environment.ts","../src/kernel_registry.ts","../src/util.ts","../src/profiler.ts","../src/tensor_format.ts","../src/tensor.ts","../src/types.ts","../src/tensor_util.ts","../src/engine.ts","../src/tape.ts","../src/device_util.ts","../src/flags.ts","../src/backends/webgl/canvas_util.ts","../src/backends/webgl/tex_util.ts","../src/backends/webgl/webgl_util.ts","../src/backends/webgl/flags_webgl.ts","../src/globals.ts","../src/log.ts","../src/tensor_util_env.ts","../src/ops/axis_util.ts","../src/ops/concat_util.ts","../src/ops/operation.ts","../src/ops/complex_ops.ts","../src/ops/tensor_ops.ts","../src/ops/concat_split.ts","../src/ops/array_ops.ts","../src/ops/array_ops_util.ts","../src/kernel_names.ts","../src/ops/add.ts","../src/ops/broadcast_util.ts","../src/ops/unary_ops.ts","../src/ops/binary_ops.ts","../src/ops/div.ts","../src/ops/gather_nd_util.ts","../src/ops/reduce_util.ts","../src/ops/scatter_nd_util.ts","../src/ops/slice_util.ts","../src/gradients.ts","../src/ops/softmax.ts","../src/ops/transpose.ts","../src/backends/backend.ts","../src/ops/conv_util.ts","../src/backends/backend_util.ts","../src/backends/complex_util.ts","../src/backends/array_util.ts","../src/backends/non_max_suppression_impl.ts","../src/backends/split_shared.ts","../src/backends/tile_impl.ts","../src/backends/topk_impl.ts","../src/backends/where_impl.ts","../src/backends/webgl/addn_gpu.ts","../src/backends/webgl/addn_packed_gpu.ts","../src/backends/webgl/argminmax_gpu.ts","../src/backends/packing_util.ts","../src/backends/webgl/glsl_version.ts","../src/backends/webgl/shader_compiler_util.ts","../src/backends/webgl/shader_compiler.ts","../src/backends/webgl/argminmax_packed_gpu.ts","../src/backends/webgl/avg_pool_backprop_gpu.ts","../src/backends/webgl/batchnorm_gpu.ts","../src/backends/webgl/batchnorm_packed_gpu.ts","../src/backends/webgl/binaryop_complex_gpu.ts","../src/backends/webgl/binaryop_gpu.ts","../src/backends/webgl/binaryop_packed_gpu.ts","../src/backends/webgl/clip_gpu.ts","../src/backends/webgl/clip_packed_gpu.ts","../src/backends/webgl/complex_abs_gpu.ts","../src/backends/webgl/concat_gpu.ts","../src/backends/webgl/concat_packed_gpu.ts","../src/backends/webgl/conv_backprop_gpu.ts","../src/backends/webgl/conv_backprop_gpu_depthwise.ts","../src/backends/webgl/conv_gpu.ts","../src/backends/webgl/conv_gpu_depthwise.ts","../src/backends/webgl/conv_packed_gpu_depthwise.ts","../src/backends/webgl/crop_and_resize_gpu.ts","../src/backends/webgl/cumsum_gpu.ts","../src/backends/webgl/decode_matrix_gpu.ts","../src/backends/webgl/decode_matrix_packed_gpu.ts","../src/backends/webgl/depth_to_space_gpu.ts","../src/backends/webgl/diag_gpu.ts","../src/backends/webgl/encode_float_gpu.ts","../src/backends/webgl/encode_float_packed_gpu.ts","../src/backends/webgl/encode_matrix_gpu.ts","../src/backends/webgl/encode_matrix_packed_gpu.ts","../src/backends/webgl/fft_gpu.ts","../src/backends/webgl/fill_gpu.ts","../src/backends/webgl/gather_gpu.ts","../src/backends/webgl/gather_nd_gpu.ts","../src/backends/webgl/gpgpu_util.ts","../src/backends/webgl/gpgpu_context.ts","../src/backends/webgl/gpgpu_math.ts","../src/backends/webgl/im2col_packed_gpu.ts","../src/backends/webgl/lrn_gpu.ts","../src/backends/webgl/lrn_grad_gpu.ts","../src/backends/webgl/lrn_packed_gpu.ts","../src/backends/webgl/max_pool_backprop_gpu.ts","../src/backends/webgl/mulmat_packed_gpu.ts","../src/backends/webgl/multinomial_gpu.ts","../src/backends/webgl/onehot_gpu.ts","../src/backends/webgl/pack_gpu.ts","../src/backends/webgl/pad_gpu.ts","../src/backends/webgl/pad_packed_gpu.ts","../src/backends/webgl/pool_gpu.ts","../src/backends/webgl/reduce_gpu.ts","../src/backends/webgl/reshape_packed_gpu.ts","../src/backends/webgl/resize_bilinear_backprop_gpu.ts","../src/backends/webgl/resize_bilinear_gpu.ts","../src/backends/webgl/resize_bilinear_packed_gpu.ts","../src/backends/webgl/resize_nearest_neighbor_backprop_gpu.ts","../src/backends/webgl/resize_nearest_neighbor_gpu.ts","../src/backends/webgl/reverse_gpu.ts","../src/backends/webgl/reverse_packed_gpu.ts","../src/backends/webgl/scatter_gpu.ts","../src/backends/webgl/segment_gpu.ts","../src/backends/webgl/select_gpu.ts","../src/backends/webgl/slice_gpu.ts","../src/backends/webgl/slice_packed_gpu.ts","../src/backends/webgl/strided_slice_gpu.ts","../src/backends/webgl/texture_manager.ts","../src/backends/webgl/tile_gpu.ts","../src/ops/erf_util.ts","../src/ops/selu_util.ts","../src/backends/webgl/unaryop_gpu.ts","../src/backends/webgl/unaryop_packed_gpu.ts","../src/backends/webgl/unpack_gpu.ts","../src/backends/webgl/backend_webgl.ts","../src/ops/segment_util.ts","../node_modules/seedrandom/lib/alea.js","../node_modules/seedrandom/lib/xor128.js","../node_modules/seedrandom/lib/xorwow.js","../node_modules/seedrandom/lib/xorshift7.js","../node_modules/seedrandom/lib/xor4096.js","../node_modules/seedrandom/lib/tychei.js","../node_modules/seedrandom/seedrandom.js","../node_modules/seedrandom/index.js","../src/ops/add_n.ts","../src/ops/batchnorm_util.ts","../src/ops/batchnorm.ts","../src/ops/batchnorm2d.ts","../src/ops/batchnorm3d.ts","../src/ops/batchnorm4d.ts","../src/ops/broadcast_to.ts","../src/ops/clone.ts","../src/ops/logical_ops.ts","../src/ops/div_no_nan.ts","../src/ops/tile.ts","../src/ops/eye.ts","../src/ops/multinomial.ts","../src/ops/one_hot.ts","../src/ops/pad.ts","../src/ops/pad1d.ts","../src/ops/pad2d.ts","../src/ops/pad3d.ts","../src/ops/pad4d.ts","../src/ops/rand.ts","../src/test_util.ts","../src/ops/rand_util.ts","../src/ops/random_gamma.ts","../src/ops/random_normal.ts","../src/ops/random_uniform.ts","../src/ops/square.ts","../src/ops/squared_difference.ts","../src/ops/truncated_normal.ts","../src/ops/compare.ts","../src/ops/segment_ops.ts","../src/ops/boolean_mask.ts","../src/ops/conv.ts","../src/ops/matmul.ts","../src/ops/reverse.ts","../src/ops/pool.ts","../src/ops/slice.ts","../src/ops/reduction_ops.ts","../src/ops/relu_ops.ts","../src/ops/lrn.ts","../src/ops/norm.ts","../src/ops/lstm.ts","../src/ops/moving_average.ts","../src/ops/strided_slice.ts","../src/ops/topk.ts","../src/ops/scatter_nd.ts","../src/ops/spectral_ops.ts","../src/ops/sparse_to_dense.ts","../src/ops/sparse_to_dense_util.ts","../src/ops/gather_nd.ts","../src/ops/diag.ts","../src/ops/dropout.ts","../src/ops/dropout_util.ts","../src/ops/signal_ops.ts","../src/ops/in_top_k.ts","../src/ops/loss_ops.ts","../src/ops/linalg_ops.ts","../src/ops/image_ops.ts","../src/ops/fused_util.ts","../src/ops/fused_ops.ts","../src/backends/cpu/cpu_util.ts","../src/backends/cpu/pool_utils.ts","../src/backends/cpu/backend_cpu.ts","../src/backends/cpu/utils/kernel_utils.ts","../src/backends/cpu/kernels/Div_impl.ts","../src/backends/cpu/kernels/Div.ts","../src/backends/cpu/kernels/MaxPoolWithArgmax.ts","../src/backends/cpu/kernels/MaxPoolWithArgmax_impl.ts","../src/backends/cpu/kernels/NonMaxSuppressionV5.ts","../src/backends/cpu/kernels/Square.ts","../src/backends/cpu/kernels/SquaredDifference.ts","../src/backends/cpu/kernels/Transpose_impl.ts","../src/backends/cpu/register_all_kernels.ts","../src/backends/cpu/kernels/Transpose.ts","../src/backends/webgl/kernels/Div.ts","../src/backends/webgl/kernels/FromPixels.ts","../src/backends/webgl/kernels/FromPixels_utils/from_pixels_gpu.ts","../src/backends/webgl/kernels/FromPixels_utils/from_pixels_packed_gpu.ts","../src/backends/webgl/kernels/MaxPoolWithArgmax.ts","../src/backends/webgl/transpose_gpu.ts","../src/backends/webgl/transpose_packed_gpu.ts","../src/backends/webgl/register_all_kernels.ts","../src/backends/webgl/kernels/Transpose.ts","../src/backends/webgl/kernels/Div_impl.ts","../src/backends/webgl/kernels/NonMaxSuppressionV5.ts","../src/backends/webgl/kernels/Square.ts","../src/backends/webgl/kernels/SquaredDifference.ts","../src/backends/webgl/kernels/Transpose_impl.ts","../src/backends/webgl/kernels/MaxPoolWithArgmax_impl.ts","../src/register_all_gradients.ts","../src/gradients/Add_grad.ts","../src/gradients/AddN_grad.ts","../src/gradients/BroadcastTo_grad.ts","../src/gradients/Div_grad.ts","../src/gradients/FusedBatchNorm_grad.ts","../src/gradients/Identity_grad.ts","../src/gradients/OneHot_grad.ts","../src/gradients/PadV2_grad.ts","../src/gradients/Square_grad.ts","../src/gradients/SquaredDifference_grad.ts","../src/gradients/Tile_grad.ts","../src/gradients/Transpose_grad.ts","../src/platforms/platform_browser.ts","../src/platforms/platform_node.ts","../src/io/types.ts","../src/io/io_utils.ts","../src/io/router_registry.ts","../src/io/model_management.ts","../src/io/indexed_db.ts","../src/io/local_storage.ts","../src/io/browser_files.ts","../src/io/progress.ts","../src/io/weights_loader.ts","../src/io/http.ts","../src/io/passthrough.ts","../src/ops/confusion_matrix.ts","../src/ops/browser.ts","../src/serialization.ts","../src/version.ts","../src/webgl.ts","../src/optimizers/optimizer.ts","../src/optimizers/adadelta_optimizer.ts","../src/optimizers/adagrad_optimizer.ts","../src/optimizers/adam_optimizer.ts","../src/optimizers/adamax_optimizer.ts","../src/optimizers/sgd_optimizer.ts","../src/optimizers/momentum_optimizer.ts","../src/optimizers/rmsprop_optimizer.ts","../src/optimizers/optimizer_constructors.ts","../src/train.ts","../src/browser_util.ts","../src/public/chained_ops/add.ts","../src/public/chained_ops/broadcast_to.ts","../src/public/chained_ops/div.ts","../src/public/chained_ops/div_no_nan.ts","../src/public/chained_ops/squared_difference.ts","../src/public/chained_ops/tile.ts","../src/public/chained_ops/one_hot.ts","../src/public/chained_ops/transpose.ts","../src/public/chained_ops/pad.ts","../src/public/chained_ops/batchnorm.ts","../src/index.ts","../src/backend/common.ts","../src/errors.ts","../src/utils/generic_utils.ts","../src/constraints.ts","../src/exports_constraints.ts","../src/keras_format/common.ts","../src/common.ts","../src/utils/math_utils.ts","../src/backend/tfjs_backend.ts","../src/keras_format/initializer_config.ts","../src/initializers.ts","../src/exports_initializers.ts","../src/backend/state.ts","../src/utils/types_utils.ts","../src/utils/variable_utils.ts","../src/variables.ts","../src/engine/topology.ts","../src/base_callbacks.ts","../src/engine/input_layer.ts","../src/logs.ts","../src/layers/serialization.ts","../src/losses.ts","../src/metrics.ts","../src/optimizers.ts","../src/user_defined_metadata.ts","../src/utils/layer_utils.ts","../src/utils/serialization_utils.ts","../src/engine/executor.ts","../src/engine/container.ts","../src/engine/training_utils.ts","../src/engine/training_dataset.ts","../src/engine/training_tensors.ts","../src/engine/training.ts","../src/models.ts","../src/exports.ts","../src/activations.ts","../src/regularizers.ts","../src/layers/advanced_activations.ts","../src/utils/conv_utils.ts","../src/layers/convolutional.ts","../src/layers/convolutional_depthwise.ts","../src/layers/core.ts","../src/layers/embeddings.ts","../src/layers/merge.ts","../src/layers/noise.ts","../src/layers/normalization.ts","../src/layers/padding.ts","../src/layers/pooling.ts","../src/layers/recurrent.ts","../src/layers/wrappers.ts","../src/exports_layers.ts","../src/exports_metrics.ts","../src/exports_regularizers.ts","../src/callbacks.ts","../src/data/compiled_api.ts","../src/operations/custom_op/register.ts","../src/operations/executors/utils.ts","../src/operations/op_list/arithmetic.ts","../src/operations/op_list/basic_math.ts","../src/operations/op_list/control.ts","../src/operations/op_list/convolution.ts","../src/operations/op_list/creation.ts","../src/operations/op_list/dynamic.ts","../src/operations/op_list/evaluation.ts","../src/operations/op_list/graph.ts","../src/operations/op_list/image.ts","../src/operations/op_list/logical.ts","../src/operations/op_list/matrices.ts","../src/operations/op_list/normalization.ts","../src/operations/op_list/reduction.ts","../src/operations/op_list/slice_join.ts","../src/operations/op_list/spectral.ts","../src/operations/op_list/transformation.ts","../src/operations/operation_mapper.ts","../src/operations/custom_op/node_value_impl.ts","../src/operations/executors/arithmetic_executor.ts","../src/operations/executors/basic_math_executor.ts","../src/executor/tensor_array.ts","../src/operations/executors/control_executor.ts","../src/operations/executors/convolution_executor.ts","../src/operations/executors/creation_executor.ts","../src/operations/executors/dynamic_executor.ts","../src/operations/executors/evaluation_executor.ts","../src/operations/executors/graph_executor.ts","../src/operations/executors/image_executor.ts","../src/operations/executors/logical_executor.ts","../src/operations/executors/matrices_executor.ts","../src/operations/executors/normalization_executor.ts","../src/operations/executors/reduction_executor.ts","../src/operations/executors/slice_join_executor.ts","../src/operations/executors/spectral_executor.ts","../src/operations/executors/transformation_executor.ts","../src/operations/operation_executor.ts","../src/executor/execution_context.ts","../src/executor/model_analysis.ts","../src/executor/graph_executor.ts","../src/executor/graph_model.ts","../src/util/deep_map.ts","../src/util/deep_clone.ts","../src/util/ring_buffer.ts","../src/util/growing_ring_buffer.ts","../src/iterators/lazy_iterator.ts","../src/dataset.ts","../src/datasets/text_line_dataset.ts","../src/datasets/csv_dataset.ts","../src/iterators/microphone_iterator.ts","../src/iterators/webcam_iterator.ts","../src/datasource.ts","../src/iterators/string_iterator.ts","../src/iterators/byte_chunk_iterator.ts","../src/iterators/file_chunk_iterator.ts","../src/iterators/url_chunk_iterator.ts","../src/util/source_util.ts","../src/sources/file_data_source.ts","../src/sources/url_data_source.ts","../src/readers.ts","node_modules/core-js/library/modules/_to-integer.js","node_modules/core-js/library/modules/_defined.js","node_modules/core-js/library/modules/_string-at.js","node_modules/core-js/library/modules/_library.js","node_modules/core-js/library/modules/_global.js","node_modules/core-js/library/modules/_core.js","node_modules/core-js/library/modules/_a-function.js","node_modules/core-js/library/modules/_ctx.js","node_modules/core-js/library/modules/_is-object.js","node_modules/core-js/library/modules/_an-object.js","node_modules/core-js/library/modules/_fails.js","node_modules/core-js/library/modules/_descriptors.js","node_modules/core-js/library/modules/_dom-create.js","node_modules/core-js/library/modules/_ie8-dom-define.js","node_modules/core-js/library/modules/_to-primitive.js","node_modules/core-js/library/modules/_object-dp.js","node_modules/core-js/library/modules/_property-desc.js","node_modules/core-js/library/modules/_hide.js","node_modules/core-js/library/modules/_has.js","node_modules/core-js/library/modules/_export.js","node_modules/core-js/library/modules/_redefine.js","node_modules/core-js/library/modules/_iterators.js","node_modules/core-js/library/modules/_cof.js","node_modules/core-js/library/modules/_iobject.js","node_modules/core-js/library/modules/_to-iobject.js","node_modules/core-js/library/modules/_to-length.js","node_modules/core-js/library/modules/_to-absolute-index.js","node_modules/core-js/library/modules/_array-includes.js","node_modules/core-js/library/modules/_shared.js","node_modules/core-js/library/modules/_uid.js","node_modules/core-js/library/modules/_shared-key.js","node_modules/core-js/library/modules/_object-keys-internal.js","node_modules/core-js/library/modules/_enum-bug-keys.js","node_modules/core-js/library/modules/_object-keys.js","node_modules/core-js/library/modules/_object-dps.js","node_modules/core-js/library/modules/_html.js","node_modules/core-js/library/modules/_object-create.js","node_modules/core-js/library/modules/_wks.js","node_modules/core-js/library/modules/_set-to-string-tag.js","node_modules/core-js/library/modules/_iter-create.js","node_modules/core-js/library/modules/_to-object.js","node_modules/core-js/library/modules/_object-gpo.js","node_modules/core-js/library/modules/_iter-define.js","node_modules/core-js/library/modules/es6.string.iterator.js","node_modules/core-js/library/modules/_add-to-unscopables.js","node_modules/core-js/library/modules/_iter-step.js","node_modules/core-js/library/modules/es6.array.iterator.js","node_modules/core-js/library/modules/web.dom.iterable.js","node_modules/core-js/library/modules/_classof.js","node_modules/core-js/library/modules/_an-instance.js","node_modules/core-js/library/modules/_iter-call.js","node_modules/core-js/library/modules/_is-array-iter.js","node_modules/core-js/library/modules/core.get-iterator-method.js","node_modules/core-js/library/modules/_for-of.js","node_modules/core-js/library/modules/_species-constructor.js","node_modules/core-js/library/modules/_invoke.js","node_modules/core-js/library/modules/_task.js","node_modules/core-js/library/modules/_microtask.js","node_modules/core-js/library/modules/_new-promise-capability.js","node_modules/core-js/library/modules/_perform.js","node_modules/core-js/library/modules/_user-agent.js","node_modules/core-js/library/modules/_promise-resolve.js","node_modules/core-js/library/modules/_redefine-all.js","node_modules/core-js/library/modules/_set-species.js","node_modules/core-js/library/modules/_iter-detect.js","node_modules/core-js/library/modules/es6.promise.js","node_modules/core-js/library/modules/es7.promise.finally.js","node_modules/core-js/library/modules/es7.promise.try.js","node_modules/core-js/library/fn/promise.js","node_modules/babel-runtime/core-js/promise.js","node_modules/stream-http/lib/capability.js","node_modules/inherits/inherits_browser.js","node_modules/process-nextick-args/index.js","node_modules/events/events.js","node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/readable-stream/node_modules/safe-buffer/index.js","node_modules/core-util-is/lib/util.js","node_modules/readable-stream/lib/internal/streams/BufferList.js","node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/util-deprecate/browser.js","node_modules/readable-stream/lib/_stream_writable.js","node_modules/readable-stream/lib/_stream_duplex.js","node_modules/readable-stream/node_modules/string_decoder/lib/string_decoder.js","node_modules/readable-stream/lib/_stream_readable.js","node_modules/readable-stream/lib/_stream_transform.js","node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/readable-stream/readable-browser.js","node_modules/stream-http/lib/response.js","node_modules/to-arraybuffer/index.js","node_modules/stream-http/lib/request.js","node_modules/xtend/immutable.js","node_modules/builtin-status-codes/browser.js","node_modules/punycode/punycode.js","node_modules/url/util.js","node_modules/querystring-es3/decode.js","node_modules/querystring-es3/encode.js","node_modules/querystring-es3/index.js","node_modules/url/url.js","node_modules/stream-http/index.js","node_modules/https-browserify/index.js","data.js","model.js","node_modules/core-js/library/modules/_object-sap.js","node_modules/core-js/library/modules/es6.object.keys.js","node_modules/core-js/library/fn/object/keys.js","node_modules/babel-runtime/core-js/object/keys.js","node_modules/tslib/tslib.es6.js","node_modules/fast-json-patch/module/helpers.mjs","node_modules/fast-json-patch/module/core.mjs","node_modules/fast-json-patch/module/duplex.mjs","node_modules/fast-json-patch/index.mjs","node_modules/json-stringify-pretty-compact/index.js","node_modules/vega-embed/node_modules/semver/internal/constants.js","node_modules/vega-embed/node_modules/semver/internal/debug.js","node_modules/vega-embed/node_modules/semver/internal/re.js","node_modules/vega-embed/node_modules/semver/internal/identifiers.js","node_modules/vega-embed/node_modules/semver/classes/semver.js","node_modules/vega-embed/node_modules/semver/functions/parse.js","node_modules/vega-embed/node_modules/semver/functions/valid.js","node_modules/vega-embed/node_modules/semver/functions/clean.js","node_modules/vega-embed/node_modules/semver/functions/inc.js","node_modules/vega-embed/node_modules/semver/functions/compare.js","node_modules/vega-embed/node_modules/semver/functions/eq.js","node_modules/vega-embed/node_modules/semver/functions/diff.js","node_modules/vega-embed/node_modules/semver/functions/major.js","node_modules/vega-embed/node_modules/semver/functions/minor.js","node_modules/vega-embed/node_modules/semver/functions/patch.js","node_modules/vega-embed/node_modules/semver/functions/prerelease.js","node_modules/vega-embed/node_modules/semver/functions/rcompare.js","node_modules/vega-embed/node_modules/semver/functions/compare-loose.js","node_modules/vega-embed/node_modules/semver/functions/compare-build.js","node_modules/vega-embed/node_modules/semver/functions/sort.js","node_modules/vega-embed/node_modules/semver/functions/rsort.js","node_modules/vega-embed/node_modules/semver/functions/gt.js","node_modules/vega-embed/node_modules/semver/functions/lt.js","node_modules/vega-embed/node_modules/semver/functions/neq.js","node_modules/vega-embed/node_modules/semver/functions/gte.js","node_modules/vega-embed/node_modules/semver/functions/lte.js","node_modules/vega-embed/node_modules/semver/functions/cmp.js","node_modules/vega-embed/node_modules/semver/functions/coerce.js","node_modules/vega-embed/node_modules/semver/classes/range.js","node_modules/vega-embed/node_modules/semver/classes/comparator.js","node_modules/vega-embed/node_modules/semver/functions/satisfies.js","node_modules/vega-embed/node_modules/semver/ranges/to-comparators.js","node_modules/vega-embed/node_modules/semver/ranges/max-satisfying.js","node_modules/vega-embed/node_modules/semver/ranges/min-satisfying.js","node_modules/vega-embed/node_modules/semver/ranges/min-version.js","node_modules/vega-embed/node_modules/semver/ranges/valid.js","node_modules/vega-embed/node_modules/semver/ranges/outside.js","node_modules/vega-embed/node_modules/semver/ranges/gtr.js","node_modules/vega-embed/node_modules/semver/ranges/ltr.js","node_modules/vega-embed/node_modules/semver/ranges/intersects.js","node_modules/vega-embed/node_modules/semver/ranges/simplify.js","node_modules/vega-embed/node_modules/semver/ranges/subset.js","node_modules/vega-embed/node_modules/semver/index.js","node_modules/vega/node_modules/vega-util/src/accessor.js","node_modules/vega/node_modules/vega-util/src/getter.js","node_modules/vega/node_modules/vega-util/src/error.js","node_modules/vega/node_modules/vega-util/src/splitAccessPath.js","node_modules/vega/node_modules/vega-util/src/field.js","node_modules/vega/node_modules/vega-util/src/accessors.js","node_modules/vega/node_modules/vega-util/src/logger.js","node_modules/vega/node_modules/vega-util/src/isArray.js","node_modules/vega/node_modules/vega-util/src/isObject.js","node_modules/vega/node_modules/vega-util/src/mergeConfig.js","node_modules/vega/node_modules/vega-util/src/peek.js","node_modules/vega/node_modules/vega-util/src/toNumber.js","node_modules/vega/node_modules/vega-util/src/transform.js","node_modules/vega/node_modules/vega-util/src/quarter.js","node_modules/vega/node_modules/vega-util/src/array.js","node_modules/vega/node_modules/vega-util/src/clampRange.js","node_modules/vega/node_modules/vega-util/src/isFunction.js","node_modules/vega/node_modules/vega-util/src/compare.js","node_modules/vega/node_modules/vega-util/src/constant.js","node_modules/vega/node_modules/vega-util/src/debounce.js","node_modules/vega/node_modules/vega-util/src/extend.js","node_modules/vega/node_modules/vega-util/src/extent.js","node_modules/vega/node_modules/vega-util/src/extentIndex.js","node_modules/vega/node_modules/vega-util/src/hasOwnProperty.js","node_modules/vega/node_modules/vega-util/src/fastmap.js","node_modules/vega/node_modules/vega-util/src/flush.js","node_modules/vega/node_modules/vega-util/src/inherits.js","node_modules/vega/node_modules/vega-util/src/inrange.js","node_modules/vega/node_modules/vega-util/src/isBoolean.js","node_modules/vega/node_modules/vega-util/src/isDate.js","node_modules/vega/node_modules/vega-util/src/isNumber.js","node_modules/vega/node_modules/vega-util/src/isRegExp.js","node_modules/vega/node_modules/vega-util/src/isString.js","node_modules/vega/node_modules/vega-util/src/key.js","node_modules/vega/node_modules/vega-util/src/lerp.js","node_modules/vega/node_modules/vega-util/src/lruCache.js","node_modules/vega/node_modules/vega-util/src/merge.js","node_modules/vega/node_modules/vega-util/src/repeat.js","node_modules/vega/node_modules/vega-util/src/pad.js","node_modules/vega/node_modules/vega-util/src/span.js","node_modules/vega/node_modules/vega-util/src/stringValue.js","node_modules/vega/node_modules/vega-util/src/toBoolean.js","node_modules/vega/node_modules/vega-util/src/toDate.js","node_modules/vega/node_modules/vega-util/src/toString.js","node_modules/vega/node_modules/vega-util/src/toSet.js","node_modules/vega/node_modules/vega-util/src/truncate.js","node_modules/vega/node_modules/vega-util/src/visitArray.js","node_modules/vega/node_modules/vega-util/index.js","node_modules/vega-util/build/vega-util.module.js","node_modules/vega-loader/src/loader.js","node_modules/vega-loader/src/type.js","node_modules/d3-dsv/src/dsv.js","node_modules/d3-dsv/src/csv.js","node_modules/d3-dsv/src/tsv.js","node_modules/d3-dsv/src/autoType.js","node_modules/d3-dsv/src/index.js","node_modules/vega-loader/src/formats/dsv.js","node_modules/vega-loader/src/formats/json.js","node_modules/topojson-client/src/identity.js","node_modules/topojson-client/src/transform.js","node_modules/topojson-client/src/bbox.js","node_modules/topojson-client/src/reverse.js","node_modules/topojson-client/src/feature.js","node_modules/topojson-client/src/stitch.js","node_modules/topojson-client/src/mesh.js","node_modules/topojson-client/src/merge.js","node_modules/topojson-client/src/bisect.js","node_modules/topojson-client/src/neighbors.js","node_modules/topojson-client/src/untransform.js","node_modules/topojson-client/src/quantize.js","node_modules/topojson-client/src/index.js","node_modules/vega-loader/src/formats/topojson.js","node_modules/vega-loader/src/formats/index.js","node_modules/d3-array/src/ascending.js","node_modules/d3-array/src/bisector.js","node_modules/d3-array/src/number.js","node_modules/d3-array/src/bisect.js","node_modules/d3-array/src/count.js","node_modules/d3-array/src/cross.js","node_modules/d3-array/src/cumsum.js","node_modules/d3-array/src/descending.js","node_modules/d3-array/src/variance.js","node_modules/d3-array/src/deviation.js","node_modules/d3-array/src/extent.js","node_modules/d3-array/src/fsum.js","node_modules/d3-array/src/identity.js","node_modules/d3-array/src/group.js","node_modules/d3-array/src/array.js","node_modules/d3-array/src/constant.js","node_modules/d3-array/src/ticks.js","node_modules/d3-array/src/nice.js","node_modules/d3-array/src/threshold/sturges.js","node_modules/d3-array/src/bin.js","node_modules/d3-array/src/max.js","node_modules/d3-array/src/min.js","node_modules/d3-array/src/quickselect.js","node_modules/d3-array/src/quantile.js","node_modules/d3-array/src/threshold/freedmanDiaconis.js","node_modules/d3-array/src/threshold/scott.js","node_modules/d3-array/src/maxIndex.js","node_modules/d3-array/src/mean.js","node_modules/d3-array/src/median.js","node_modules/d3-array/src/merge.js","node_modules/d3-array/src/minIndex.js","node_modules/d3-array/src/pairs.js","node_modules/d3-array/src/permute.js","node_modules/d3-array/src/range.js","node_modules/d3-array/src/least.js","node_modules/d3-array/src/leastIndex.js","node_modules/d3-array/src/greatest.js","node_modules/d3-array/src/greatestIndex.js","node_modules/d3-array/src/scan.js","node_modules/d3-array/src/shuffle.js","node_modules/d3-array/src/sum.js","node_modules/d3-array/src/transpose.js","node_modules/d3-array/src/zip.js","node_modules/d3-array/src/every.js","node_modules/d3-array/src/some.js","node_modules/d3-array/src/filter.js","node_modules/d3-array/src/map.js","node_modules/d3-array/src/reduce.js","node_modules/d3-array/src/reverse.js","node_modules/d3-array/src/sort.js","node_modules/d3-array/src/difference.js","node_modules/d3-array/src/disjoint.js","node_modules/d3-array/src/set.js","node_modules/d3-array/src/intersection.js","node_modules/d3-array/src/superset.js","node_modules/d3-array/src/subset.js","node_modules/d3-array/src/union.js","node_modules/d3-array/src/index.js","node_modules/d3-format/src/formatDecimal.js","node_modules/d3-format/src/exponent.js","node_modules/d3-format/src/formatGroup.js","node_modules/d3-format/src/formatNumerals.js","node_modules/d3-format/src/formatSpecifier.js","node_modules/d3-format/src/formatTrim.js","node_modules/d3-format/src/formatPrefixAuto.js","node_modules/d3-format/src/formatRounded.js","node_modules/d3-format/src/formatTypes.js","node_modules/d3-format/src/identity.js","node_modules/d3-format/src/locale.js","node_modules/d3-format/src/defaultLocale.js","node_modules/d3-format/src/precisionFixed.js","node_modules/d3-format/src/precisionPrefix.js","node_modules/d3-format/src/precisionRound.js","node_modules/d3-format/src/index.js","node_modules/d3-time/src/interval.js","node_modules/d3-time/src/millisecond.js","node_modules/d3-time/src/duration.js","node_modules/d3-time/src/second.js","node_modules/d3-time/src/minute.js","node_modules/d3-time/src/hour.js","node_modules/d3-time/src/day.js","node_modules/d3-time/src/week.js","node_modules/d3-time/src/month.js","node_modules/d3-time/src/year.js","node_modules/d3-time/src/utcMinute.js","node_modules/d3-time/src/utcHour.js","node_modules/d3-time/src/utcDay.js","node_modules/d3-time/src/utcWeek.js","node_modules/d3-time/src/utcMonth.js","node_modules/d3-time/src/utcYear.js","node_modules/d3-time/src/index.js","node_modules/vega-time/build/vega-time.module.js","node_modules/d3-time-format/src/locale.js","node_modules/d3-time-format/src/defaultLocale.js","node_modules/d3-time-format/src/isoFormat.js","node_modules/d3-time-format/src/isoParse.js","node_modules/d3-time-format/src/index.js","node_modules/vega-format/build/vega-format.module.js","node_modules/vega-loader/src/read.js","node_modules/vega-loader/index.browser.js","node_modules/vega-dataflow/build/vega-dataflow.module.js","node_modules/vega-statistics/build/vega-statistics.module.js","node_modules/vega-transforms/build/vega-transforms.module.js","node_modules/d3-shape/node_modules/d3-path/src/path.js","node_modules/d3-shape/node_modules/d3-path/src/index.js","node_modules/d3-shape/src/constant.js","node_modules/d3-shape/src/math.js","node_modules/d3-shape/src/arc.js","node_modules/d3-shape/src/array.js","node_modules/d3-shape/src/curve/linear.js","node_modules/d3-shape/src/point.js","node_modules/d3-shape/src/line.js","node_modules/d3-shape/src/area.js","node_modules/d3-shape/src/descending.js","node_modules/d3-shape/src/identity.js","node_modules/d3-shape/src/pie.js","node_modules/d3-shape/src/curve/radial.js","node_modules/d3-shape/src/lineRadial.js","node_modules/d3-shape/src/areaRadial.js","node_modules/d3-shape/src/pointRadial.js","node_modules/d3-shape/src/link/index.js","node_modules/d3-shape/src/symbol/circle.js","node_modules/d3-shape/src/symbol/cross.js","node_modules/d3-shape/src/symbol/diamond.js","node_modules/d3-shape/src/symbol/star.js","node_modules/d3-shape/src/symbol/square.js","node_modules/d3-shape/src/symbol/triangle.js","node_modules/d3-shape/src/symbol/wye.js","node_modules/d3-shape/src/symbol.js","node_modules/d3-shape/src/noop.js","node_modules/d3-shape/src/curve/basis.js","node_modules/d3-shape/src/curve/basisClosed.js","node_modules/d3-shape/src/curve/basisOpen.js","node_modules/d3-shape/src/curve/bundle.js","node_modules/d3-shape/src/curve/cardinal.js","node_modules/d3-shape/src/curve/cardinalClosed.js","node_modules/d3-shape/src/curve/cardinalOpen.js","node_modules/d3-shape/src/curve/catmullRom.js","node_modules/d3-shape/src/curve/catmullRomClosed.js","node_modules/d3-shape/src/curve/catmullRomOpen.js","node_modules/d3-shape/src/curve/linearClosed.js","node_modules/d3-shape/src/curve/monotone.js","node_modules/d3-shape/src/curve/natural.js","node_modules/d3-shape/src/curve/step.js","node_modules/d3-shape/src/offset/none.js","node_modules/d3-shape/src/order/none.js","node_modules/d3-shape/src/stack.js","node_modules/d3-shape/src/offset/expand.js","node_modules/d3-shape/src/offset/diverging.js","node_modules/d3-shape/src/offset/silhouette.js","node_modules/d3-shape/src/offset/wiggle.js","node_modules/d3-shape/src/order/appearance.js","node_modules/d3-shape/src/order/ascending.js","node_modules/d3-shape/src/order/descending.js","node_modules/d3-shape/src/order/insideOut.js","node_modules/d3-shape/src/order/reverse.js","node_modules/d3-shape/src/index.js","node_modules/vega-scenegraph/node_modules/d3-path/src/path.js","node_modules/vega-scenegraph/node_modules/d3-path/src/index.js","node_modules/vega-canvas/src/domCanvas.js","node_modules/vega-canvas/index.browser.js","node_modules/d3-scale/src/init.js","node_modules/d3-scale/src/ordinal.js","node_modules/d3-scale/src/band.js","node_modules/d3-color/src/define.js","node_modules/d3-color/src/color.js","node_modules/d3-color/src/math.js","node_modules/d3-color/src/lab.js","node_modules/d3-color/src/cubehelix.js","node_modules/d3-color/src/index.js","node_modules/d3-interpolate/src/basis.js","node_modules/d3-interpolate/src/basisClosed.js","node_modules/d3-interpolate/src/constant.js","node_modules/d3-interpolate/src/color.js","node_modules/d3-interpolate/src/rgb.js","node_modules/d3-interpolate/src/numberArray.js","node_modules/d3-interpolate/src/array.js","node_modules/d3-interpolate/src/date.js","node_modules/d3-interpolate/src/number.js","node_modules/d3-interpolate/src/object.js","node_modules/d3-interpolate/src/string.js","node_modules/d3-interpolate/src/value.js","node_modules/d3-interpolate/src/discrete.js","node_modules/d3-interpolate/src/hue.js","node_modules/d3-interpolate/src/round.js","node_modules/d3-interpolate/src/transform/decompose.js","node_modules/d3-interpolate/src/transform/parse.js","node_modules/d3-interpolate/src/transform/index.js","node_modules/d3-interpolate/src/zoom.js","node_modules/d3-interpolate/src/hsl.js","node_modules/d3-interpolate/src/lab.js","node_modules/d3-interpolate/src/hcl.js","node_modules/d3-interpolate/src/cubehelix.js","node_modules/d3-interpolate/src/piecewise.js","node_modules/d3-interpolate/src/quantize.js","node_modules/d3-interpolate/src/index.js","node_modules/d3-scale/src/constant.js","node_modules/d3-scale/src/number.js","node_modules/d3-scale/src/continuous.js","node_modules/d3-scale/src/tickFormat.js","node_modules/d3-scale/src/linear.js","node_modules/d3-scale/src/identity.js","node_modules/d3-scale/src/nice.js","node_modules/d3-scale/src/log.js","node_modules/d3-scale/src/symlog.js","node_modules/d3-scale/src/pow.js","node_modules/d3-scale/src/radial.js","node_modules/d3-scale/src/quantile.js","node_modules/d3-scale/src/quantize.js","node_modules/d3-scale/src/threshold.js","node_modules/d3-scale/src/time.js","node_modules/d3-scale/src/utcTime.js","node_modules/d3-scale/src/sequential.js","node_modules/d3-scale/src/sequentialQuantile.js","node_modules/d3-scale/src/diverging.js","node_modules/d3-scale/src/index.js","node_modules/vega-scale/build/vega-scale.module.js","node_modules/vega-scenegraph/build/vega-scenegraph.module.js","node_modules/vega-view-transforms/build/vega-view-transforms.module.js","node_modules/vega-encode/build/vega-encode.module.js","node_modules/d3-geo/src/math.js","node_modules/d3-geo/src/noop.js","node_modules/d3-geo/src/stream.js","node_modules/d3-geo/src/area.js","node_modules/d3-geo/src/cartesian.js","node_modules/d3-geo/src/bounds.js","node_modules/d3-geo/src/centroid.js","node_modules/d3-geo/src/constant.js","node_modules/d3-geo/src/compose.js","node_modules/d3-geo/src/rotation.js","node_modules/d3-geo/src/circle.js","node_modules/d3-geo/src/clip/buffer.js","node_modules/d3-geo/src/pointEqual.js","node_modules/d3-geo/src/clip/rejoin.js","node_modules/d3-geo/src/polygonContains.js","node_modules/d3-geo/src/clip/index.js","node_modules/d3-geo/src/clip/antimeridian.js","node_modules/d3-geo/src/clip/circle.js","node_modules/d3-geo/src/clip/line.js","node_modules/d3-geo/src/clip/rectangle.js","node_modules/d3-geo/src/clip/extent.js","node_modules/d3-geo/src/length.js","node_modules/d3-geo/src/distance.js","node_modules/d3-geo/src/contains.js","node_modules/d3-geo/src/graticule.js","node_modules/d3-geo/src/interpolate.js","node_modules/d3-geo/src/identity.js","node_modules/d3-geo/src/path/area.js","node_modules/d3-geo/src/path/bounds.js","node_modules/d3-geo/src/path/centroid.js","node_modules/d3-geo/src/path/context.js","node_modules/d3-geo/src/path/measure.js","node_modules/d3-geo/src/path/string.js","node_modules/d3-geo/src/path/index.js","node_modules/d3-geo/src/transform.js","node_modules/d3-geo/src/projection/fit.js","node_modules/d3-geo/src/projection/resample.js","node_modules/d3-geo/src/projection/index.js","node_modules/d3-geo/src/projection/conic.js","node_modules/d3-geo/src/projection/cylindricalEqualArea.js","node_modules/d3-geo/src/projection/conicEqualArea.js","node_modules/d3-geo/src/projection/albers.js","node_modules/d3-geo/src/projection/albersUsa.js","node_modules/d3-geo/src/projection/azimuthal.js","node_modules/d3-geo/src/projection/azimuthalEqualArea.js","node_modules/d3-geo/src/projection/azimuthalEquidistant.js","node_modules/d3-geo/src/projection/mercator.js","node_modules/d3-geo/src/projection/conicConformal.js","node_modules/d3-geo/src/projection/equirectangular.js","node_modules/d3-geo/src/projection/conicEquidistant.js","node_modules/d3-geo/src/projection/equalEarth.js","node_modules/d3-geo/src/projection/gnomonic.js","node_modules/d3-geo/src/projection/identity.js","node_modules/d3-geo/src/projection/naturalEarth1.js","node_modules/d3-geo/src/projection/orthographic.js","node_modules/d3-geo/src/projection/stereographic.js","node_modules/d3-geo/src/projection/transverseMercator.js","node_modules/d3-geo/src/index.js","node_modules/d3-geo-projection/src/math.js","node_modules/d3-geo-projection/src/airy.js","node_modules/d3-geo-projection/src/aitoff.js","node_modules/d3-geo-projection/src/armadillo.js","node_modules/d3-geo-projection/src/august.js","node_modules/d3-geo-projection/src/baker.js","node_modules/d3-geo-projection/src/berghaus.js","node_modules/d3-geo-projection/src/hammer.js","node_modules/d3-geo-projection/src/newton.js","node_modules/d3-geo-projection/src/bertin.js","node_modules/d3-geo-projection/src/mollweide.js","node_modules/d3-geo-projection/src/boggs.js","node_modules/d3-geo-projection/src/parallel1.js","node_modules/d3-geo-projection/src/sinusoidal.js","node_modules/d3-geo-projection/src/bonne.js","node_modules/d3-geo-projection/src/bottomley.js","node_modules/d3-geo-projection/src/bromley.js","node_modules/d3-geo-projection/src/chamberlin.js","node_modules/d3-geo-projection/src/collignon.js","node_modules/d3-geo-projection/src/craig.js","node_modules/d3-geo-projection/src/craster.js","node_modules/d3-geo-projection/src/cylindricalEqualArea.js","node_modules/d3-geo-projection/src/cylindricalStereographic.js","node_modules/d3-geo-projection/src/eckert1.js","node_modules/d3-geo-projection/src/eckert2.js","node_modules/d3-geo-projection/src/eckert3.js","node_modules/d3-geo-projection/src/eckert4.js","node_modules/d3-geo-projection/src/eckert5.js","node_modules/d3-geo-projection/src/eckert6.js","node_modules/d3-geo-projection/src/eisenlohr.js","node_modules/d3-geo-projection/src/fahey.js","node_modules/d3-geo-projection/src/foucaut.js","node_modules/d3-geo-projection/src/foucautSinusoidal.js","node_modules/d3-geo-projection/src/gilbert.js","node_modules/d3-geo-projection/src/gingery.js","node_modules/d3-geo-projection/src/ginzburgPolyconic.js","node_modules/d3-geo-projection/src/ginzburg4.js","node_modules/d3-geo-projection/src/ginzburg5.js","node_modules/d3-geo-projection/src/ginzburg6.js","node_modules/d3-geo-projection/src/ginzburg8.js","node_modules/d3-geo-projection/src/ginzburg9.js","node_modules/d3-geo-projection/src/square.js","node_modules/d3-geo-projection/src/gringorten.js","node_modules/d3-geo-projection/src/elliptic.js","node_modules/d3-geo-projection/src/guyou.js","node_modules/d3-geo-projection/src/hammerRetroazimuthal.js","node_modules/d3-geo-projection/src/healpix.js","node_modules/d3-geo-projection/src/hill.js","node_modules/d3-geo-projection/src/sinuMollweide.js","node_modules/d3-geo-projection/src/homolosine.js","node_modules/d3-geo-projection/src/hufnagel.js","node_modules/d3-geo-projection/src/integrate.js","node_modules/d3-geo-projection/src/hyperelliptical.js","node_modules/d3-geo-projection/src/interrupted/index.js","node_modules/d3-geo-projection/src/interrupted/boggs.js","node_modules/d3-geo-projection/src/interrupted/homolosine.js","node_modules/d3-geo-projection/src/interrupted/mollweide.js","node_modules/d3-geo-projection/src/interrupted/mollweideHemispheres.js","node_modules/d3-geo-projection/src/interrupted/sinuMollweide.js","node_modules/d3-geo-projection/src/interrupted/sinusoidal.js","node_modules/d3-geo-projection/src/kavrayskiy7.js","node_modules/d3-geo-projection/src/lagrange.js","node_modules/d3-geo-projection/src/larrivee.js","node_modules/d3-geo-projection/src/laskowski.js","node_modules/d3-geo-projection/src/littrow.js","node_modules/d3-geo-projection/src/loximuthal.js","node_modules/d3-geo-projection/src/miller.js","node_modules/d3-geo-projection/src/modifiedStereographic.js","node_modules/d3-geo-projection/src/mtFlatPolarParabolic.js","node_modules/d3-geo-projection/src/mtFlatPolarQuartic.js","node_modules/d3-geo-projection/src/mtFlatPolarSinusoidal.js","node_modules/d3-geo-projection/src/naturalEarth2.js","node_modules/d3-geo-projection/src/nellHammer.js","node_modules/d3-geo-projection/src/interrupted/quarticAuthalic.js","node_modules/d3-geo-projection/src/nicolosi.js","node_modules/d3-geo-projection/src/patterson.js","node_modules/d3-geo-projection/src/polyconic.js","node_modules/d3-geo-projection/src/polyhedral/matrix.js","node_modules/d3-geo-projection/src/polyhedral/index.js","node_modules/d3-geo-projection/src/polyhedral/octahedron.js","node_modules/d3-geo-projection/src/polyhedral/butterfly.js","node_modules/d3-geo-projection/src/polyhedral/collignon.js","node_modules/d3-geo-projection/src/polyhedral/waterman.js","node_modules/d3-geo-projection/src/noop.js","node_modules/d3-geo-projection/src/project/clockwise.js","node_modules/d3-geo-projection/src/project/contains.js","node_modules/d3-geo-projection/src/project/index.js","node_modules/d3-geo-projection/src/quincuncial/index.js","node_modules/d3-geo-projection/src/quincuncial/gringorten.js","node_modules/d3-geo-projection/src/quincuncial/peirce.js","node_modules/d3-geo-projection/src/quantize.js","node_modules/d3-geo-projection/src/rectangularPolyconic.js","node_modules/d3-geo-projection/src/robinson.js","node_modules/d3-geo-projection/src/satellite.js","node_modules/d3-geo-projection/src/stitch.js","node_modules/d3-geo-projection/src/times.js","node_modules/d3-geo-projection/src/twoPoint.js","node_modules/d3-geo-projection/src/twoPointAzimuthal.js","node_modules/d3-geo-projection/src/twoPointEquidistant.js","node_modules/d3-geo-projection/src/vanDerGrinten.js","node_modules/d3-geo-projection/src/vanDerGrinten2.js","node_modules/d3-geo-projection/src/vanDerGrinten3.js","node_modules/d3-geo-projection/src/vanDerGrinten4.js","node_modules/d3-geo-projection/src/wagner.js","node_modules/d3-geo-projection/src/wagner4.js","node_modules/d3-geo-projection/src/wagner6.js","node_modules/d3-geo-projection/src/wiechel.js","node_modules/d3-geo-projection/src/winkel3.js","node_modules/d3-geo-projection/src/index.js","node_modules/vega-projection/build/vega-projection.module.js","node_modules/vega-geo/build/vega-geo.module.js","node_modules/d3-force/src/center.js","node_modules/d3-quadtree/src/add.js","node_modules/d3-quadtree/src/cover.js","node_modules/d3-quadtree/src/data.js","node_modules/d3-quadtree/src/extent.js","node_modules/d3-quadtree/src/quad.js","node_modules/d3-quadtree/src/find.js","node_modules/d3-quadtree/src/remove.js","node_modules/d3-quadtree/src/root.js","node_modules/d3-quadtree/src/size.js","node_modules/d3-quadtree/src/visit.js","node_modules/d3-quadtree/src/visitAfter.js","node_modules/d3-quadtree/src/x.js","node_modules/d3-quadtree/src/y.js","node_modules/d3-quadtree/src/quadtree.js","node_modules/d3-quadtree/src/index.js","node_modules/d3-force/src/constant.js","node_modules/d3-force/src/jiggle.js","node_modules/d3-force/src/collide.js","node_modules/d3-force/src/link.js","node_modules/d3-dispatch/src/dispatch.js","node_modules/d3-dispatch/src/index.js","node_modules/d3-timer/src/timer.js","node_modules/d3-timer/src/timeout.js","node_modules/d3-timer/src/interval.js","node_modules/d3-timer/src/index.js","node_modules/d3-force/src/lcg.js","node_modules/d3-force/src/simulation.js","node_modules/d3-force/src/manyBody.js","node_modules/d3-force/src/radial.js","node_modules/d3-force/src/x.js","node_modules/d3-force/src/y.js","node_modules/d3-force/src/index.js","node_modules/vega-force/build/vega-force.module.js","node_modules/d3-hierarchy/src/cluster.js","node_modules/d3-hierarchy/src/hierarchy/count.js","node_modules/d3-hierarchy/src/hierarchy/each.js","node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","node_modules/d3-hierarchy/src/hierarchy/find.js","node_modules/d3-hierarchy/src/hierarchy/sum.js","node_modules/d3-hierarchy/src/hierarchy/sort.js","node_modules/d3-hierarchy/src/hierarchy/path.js","node_modules/d3-hierarchy/src/hierarchy/ancestors.js","node_modules/d3-hierarchy/src/hierarchy/descendants.js","node_modules/d3-hierarchy/src/hierarchy/leaves.js","node_modules/d3-hierarchy/src/hierarchy/links.js","node_modules/d3-hierarchy/src/hierarchy/iterator.js","node_modules/d3-hierarchy/src/hierarchy/index.js","node_modules/d3-hierarchy/src/array.js","node_modules/d3-hierarchy/src/pack/enclose.js","node_modules/d3-hierarchy/src/pack/siblings.js","node_modules/d3-hierarchy/src/accessors.js","node_modules/d3-hierarchy/src/constant.js","node_modules/d3-hierarchy/src/pack/index.js","node_modules/d3-hierarchy/src/treemap/round.js","node_modules/d3-hierarchy/src/treemap/dice.js","node_modules/d3-hierarchy/src/partition.js","node_modules/d3-hierarchy/src/stratify.js","node_modules/d3-hierarchy/src/tree.js","node_modules/d3-hierarchy/src/treemap/slice.js","node_modules/d3-hierarchy/src/treemap/squarify.js","node_modules/d3-hierarchy/src/treemap/index.js","node_modules/d3-hierarchy/src/treemap/binary.js","node_modules/d3-hierarchy/src/treemap/sliceDice.js","node_modules/d3-hierarchy/src/treemap/resquarify.js","node_modules/d3-hierarchy/src/index.js","node_modules/vega-hierarchy/build/vega-hierarchy.module.js","node_modules/vega-regression/build/vega-regression.module.js","node_modules/delaunator/index.js","node_modules/d3-delaunay/src/path.js","node_modules/d3-delaunay/src/polygon.js","node_modules/d3-delaunay/src/voronoi.js","node_modules/d3-delaunay/src/delaunay.js","node_modules/d3-delaunay/src/index.js","node_modules/vega-voronoi/build/vega-voronoi.module.js","node_modules/vega-wordcloud/build/vega-wordcloud.module.js","node_modules/vega-crossfilter/build/vega-crossfilter.module.js","node_modules/vega/node_modules/vega-loader/node_modules/vega-util/build/vega-util.module.js","node_modules/vega/node_modules/vega-loader/build/vega-loader.module.js","node_modules/vega/node_modules/vega-scenegraph/src/Gradient.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-util/build/vega-util.module.js","node_modules/d3-path/src/path.js","node_modules/d3-path/src/index.js","node_modules/vega/node_modules/d3-shape/src/constant.js","node_modules/vega/node_modules/d3-shape/src/math.js","node_modules/vega/node_modules/d3-shape/src/arc.js","node_modules/vega/node_modules/d3-shape/src/curve/linear.js","node_modules/vega/node_modules/d3-shape/src/point.js","node_modules/vega/node_modules/d3-shape/src/line.js","node_modules/vega/node_modules/d3-shape/src/area.js","node_modules/vega/node_modules/d3-shape/src/descending.js","node_modules/vega/node_modules/d3-shape/src/identity.js","node_modules/vega/node_modules/d3-shape/src/pie.js","node_modules/vega/node_modules/d3-shape/src/curve/radial.js","node_modules/vega/node_modules/d3-shape/src/lineRadial.js","node_modules/vega/node_modules/d3-shape/src/areaRadial.js","node_modules/vega/node_modules/d3-shape/src/pointRadial.js","node_modules/vega/node_modules/d3-shape/src/array.js","node_modules/vega/node_modules/d3-shape/src/link/index.js","node_modules/vega/node_modules/d3-shape/src/symbol/circle.js","node_modules/vega/node_modules/d3-shape/src/symbol/cross.js","node_modules/vega/node_modules/d3-shape/src/symbol/diamond.js","node_modules/vega/node_modules/d3-shape/src/symbol/star.js","node_modules/vega/node_modules/d3-shape/src/symbol/square.js","node_modules/vega/node_modules/d3-shape/src/symbol/triangle.js","node_modules/vega/node_modules/d3-shape/src/symbol/wye.js","node_modules/vega/node_modules/d3-shape/src/symbol.js","node_modules/vega/node_modules/d3-shape/src/noop.js","node_modules/vega/node_modules/d3-shape/src/curve/basis.js","node_modules/vega/node_modules/d3-shape/src/curve/basisClosed.js","node_modules/vega/node_modules/d3-shape/src/curve/basisOpen.js","node_modules/vega/node_modules/d3-shape/src/curve/bundle.js","node_modules/vega/node_modules/d3-shape/src/curve/cardinal.js","node_modules/vega/node_modules/d3-shape/src/curve/cardinalClosed.js","node_modules/vega/node_modules/d3-shape/src/curve/cardinalOpen.js","node_modules/vega/node_modules/d3-shape/src/curve/catmullRom.js","node_modules/vega/node_modules/d3-shape/src/curve/catmullRomClosed.js","node_modules/vega/node_modules/d3-shape/src/curve/catmullRomOpen.js","node_modules/vega/node_modules/d3-shape/src/curve/linearClosed.js","node_modules/vega/node_modules/d3-shape/src/curve/monotone.js","node_modules/vega/node_modules/d3-shape/src/curve/natural.js","node_modules/vega/node_modules/d3-shape/src/curve/step.js","node_modules/vega/node_modules/d3-shape/src/offset/none.js","node_modules/vega/node_modules/d3-shape/src/order/none.js","node_modules/vega/node_modules/d3-shape/src/stack.js","node_modules/vega/node_modules/d3-shape/src/offset/expand.js","node_modules/vega/node_modules/d3-shape/src/offset/diverging.js","node_modules/vega/node_modules/d3-shape/src/offset/silhouette.js","node_modules/vega/node_modules/d3-shape/src/offset/wiggle.js","node_modules/vega/node_modules/d3-shape/src/order/appearance.js","node_modules/vega/node_modules/d3-shape/src/order/ascending.js","node_modules/vega/node_modules/d3-shape/src/order/descending.js","node_modules/vega/node_modules/d3-shape/src/order/insideOut.js","node_modules/vega/node_modules/d3-shape/src/order/reverse.js","node_modules/vega/node_modules/d3-shape/src/index.js","node_modules/vega/node_modules/vega-scenegraph/src/path/curves.js","node_modules/vega/node_modules/vega-scenegraph/src/path/parse.js","node_modules/vega/node_modules/vega-scenegraph/src/util/constants.js","node_modules/vega/node_modules/vega-scenegraph/src/path/arc.js","node_modules/vega/node_modules/vega-scenegraph/src/path/render.js","node_modules/vega/node_modules/vega-scenegraph/src/path/symbols.js","node_modules/vega/node_modules/vega-scenegraph/src/path/rectangle.js","node_modules/vega/node_modules/vega-scenegraph/src/path/trail.js","node_modules/vega/node_modules/vega-scenegraph/src/path/shapes.js","node_modules/vega/node_modules/vega-scenegraph/src/util/svg/clip.js","node_modules/vega/node_modules/vega-scenegraph/src/Bounds.js","node_modules/vega/node_modules/vega-scenegraph/src/Item.js","node_modules/vega/node_modules/vega-scenegraph/src/GroupItem.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/loader.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/type.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/formats/dsv.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/formats/json.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/formats/topojson.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/formats/index.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/src/read.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-loader/index.browser.js","node_modules/vega/node_modules/vega-scenegraph/src/ResourceLoader.js","node_modules/vega/node_modules/vega-scenegraph/src/bound/boundStroke.js","node_modules/vega/node_modules/vega-scenegraph/src/bound/boundContext.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/context.js","node_modules/vega/node_modules/vega-scenegraph/src/util/intersect.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/blend.js","node_modules/vega/node_modules/vega-scenegraph/src/util/value.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/gradient.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/color.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/fill.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/stroke.js","node_modules/vega/node_modules/vega-scenegraph/src/util/visit.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/draw.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/pick.js","node_modules/vega/node_modules/vega-scenegraph/src/util/svg/transform.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/markItemPath.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/arc.js","node_modules/vega/node_modules/vega-scenegraph/src/util/pickPath.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/markMultiItemPath.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/area.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/clip.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/group.js","node_modules/vega/node_modules/vega-scenegraph/src/util/svg/metadata.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/image.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/line.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/path.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/rect.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/rule.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/shape.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/symbol.js","node_modules/vega/node_modules/vega-scenegraph/src/util/text.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/text.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/trail.js","node_modules/vega/node_modules/vega-scenegraph/src/marks/index.js","node_modules/vega/node_modules/vega-scenegraph/src/bound/boundItem.js","node_modules/vega/node_modules/vega-scenegraph/src/bound/boundMark.js","node_modules/vega/node_modules/vega-scenegraph/src/util/serialize.js","node_modules/vega/node_modules/vega-scenegraph/src/Scenegraph.js","node_modules/vega/node_modules/vega-scenegraph/src/util/dom.js","node_modules/vega/node_modules/vega-scenegraph/src/util/point.js","node_modules/vega/node_modules/vega-scenegraph/src/util/resolveItem.js","node_modules/vega/node_modules/vega-scenegraph/src/Handler.js","node_modules/vega/node_modules/vega-scenegraph/src/Renderer.js","node_modules/vega/node_modules/vega-scenegraph/src/util/events.js","node_modules/vega/node_modules/vega-scenegraph/src/CanvasHandler.js","node_modules/vega/node_modules/vega-scenegraph/src/util/canvas/resize.js","node_modules/vega/node_modules/vega-scenegraph/src/CanvasRenderer.js","node_modules/vega/node_modules/vega-scenegraph/src/SVGHandler.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/basis.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/basisClosed.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/constant.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/color.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/rgb.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/numberArray.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/array.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/date.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/number.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/object.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/string.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/value.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/discrete.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/hue.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/round.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/transform/decompose.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/transform/parse.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/transform/index.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/zoom.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/hsl.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/lab.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/hcl.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/cubehelix.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/piecewise.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/quantize.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/d3-interpolate/src/index.js","node_modules/vega/node_modules/vega-scenegraph/node_modules/vega-scale/build/vega-scale.module.js","node_modules/vega/node_modules/vega-scenegraph/src/util/aria.js","node_modules/vega/node_modules/vega-scenegraph/src/util/tags.js","node_modules/vega/node_modules/vega-scenegraph/src/util/svg/styles.js","node_modules/vega/node_modules/vega-scenegraph/src/SVGRenderer.js","node_modules/vega/node_modules/vega-scenegraph/src/SVGStringRenderer.js","node_modules/vega/node_modules/vega-scenegraph/src/modules.js","node_modules/vega/node_modules/vega-scenegraph/src/intersect.js","node_modules/vega/node_modules/vega-scenegraph/src/bound/boundClip.js","node_modules/vega/node_modules/vega-scenegraph/src/util/equal.js","node_modules/vega/node_modules/vega-scenegraph/index.js","node_modules/vega/node_modules/vega-scale/src/scales/bandSpace.js","node_modules/vega/node_modules/vega-scale/src/scales/types.js","node_modules/vega/node_modules/vega-scale/node_modules/vega-util/build/vega-util.module.js","node_modules/vega/node_modules/vega-scale/src/scales/invertRange.js","node_modules/vega/node_modules/vega-scale/src/scales/invertRangeExtent.js","node_modules/vega/node_modules/vega-scale/src/scales/scaleBand.js","node_modules/vega/node_modules/vega-scale/src/scales/numbers.js","node_modules/vega/node_modules/vega-scale/src/scales/slice.js","node_modules/vega/node_modules/vega-scale/src/scales/scaleBinOrdinal.js","node_modules/vega/node_modules/vega-scale/src/scales.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/define.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/color.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/math.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/lab.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/cubehelix.js","node_modules/vega/node_modules/d3-interpolate/node_modules/d3-color/src/index.js","node_modules/vega/node_modules/d3-interpolate/src/basis.js","node_modules/vega/node_modules/d3-interpolate/src/basisClosed.js","node_modules/vega/node_modules/d3-interpolate/src/constant.js","node_modules/vega/node_modules/d3-interpolate/src/color.js","node_modules/vega/node_modules/d3-interpolate/src/rgb.js","node_modules/vega/node_modules/d3-interpolate/src/numberArray.js","node_modules/vega/node_modules/d3-interpolate/src/array.js","node_modules/vega/node_modules/d3-interpolate/src/date.js","node_modules/vega/node_modules/d3-interpolate/src/number.js","node_modules/vega/node_modules/d3-interpolate/src/object.js","node_modules/vega/node_modules/d3-interpolate/src/string.js","node_modules/vega/node_modules/d3-interpolate/src/value.js","node_modules/vega/node_modules/d3-interpolate/src/discrete.js","node_modules/vega/node_modules/d3-interpolate/src/hue.js","node_modules/vega/node_modules/d3-interpolate/src/round.js","node_modules/vega/node_modules/d3-interpolate/src/transform/decompose.js","node_modules/vega/node_modules/d3-interpolate/src/transform/parse.js","node_modules/vega/node_modules/d3-interpolate/src/transform/index.js","node_modules/vega/node_modules/d3-interpolate/src/zoom.js","node_modules/vega/node_modules/d3-interpolate/src/hsl.js","node_modules/vega/node_modules/d3-interpolate/src/lab.js","node_modules/vega/node_modules/d3-interpolate/src/hcl.js","node_modules/vega/node_modules/d3-interpolate/src/cubehelix.js","node_modules/vega/node_modules/d3-interpolate/src/piecewise.js","node_modules/vega/node_modules/d3-interpolate/src/quantize.js","node_modules/vega/node_modules/d3-interpolate/src/index.js","node_modules/vega/node_modules/vega-scale/src/interpolate.js","node_modules/vega/node_modules/vega-scale/src/palettes.js","node_modules/vega/node_modules/vega-scale/src/schemes.js","node_modules/vega/node_modules/vega-scale/src/legend-types.js","node_modules/vega/node_modules/vega-scale/src/ticks.js","node_modules/vega/node_modules/vega-scale/src/labels.js","node_modules/vega/node_modules/vega-scale/src/caption.js","node_modules/vega/node_modules/vega-scale/index.js","node_modules/vega-view/src/aria.js","node_modules/vega-view/src/background.js","node_modules/vega-view/src/cursor.js","node_modules/vega-view/src/data.js","node_modules/vega-view/src/render-size.js","node_modules/vega-view/src/events-extend.js","node_modules/vega-view/src/events.js","node_modules/vega-view/src/hover.js","node_modules/vega-view/src/finalize.js","node_modules/vega-view/src/element.js","node_modules/vega-view/src/bind.js","node_modules/vega-view/src/initialize-renderer.js","node_modules/vega-view/src/trap.js","node_modules/vega-view/src/initialize-handler.js","node_modules/vega-view/src/initialize.js","node_modules/vega-view/src/padding.js","node_modules/vega-view/src/render-headless.js","node_modules/vega-view/src/render-to-image-url.js","node_modules/vega-view/src/render-to-canvas.js","node_modules/vega-view/src/render-to-svg.js","node_modules/vega-functions/node_modules/vega-expression/build/vega-expression.module.js","node_modules/vega-selections/node_modules/vega-expression/build/vega-expression.module.js","node_modules/vega-selections/build/vega-selection.module.js","node_modules/vega-functions/build/vega-functions.module.js","node_modules/vega-runtime/build/vega-runtime.module.js","node_modules/vega-view/src/runtime.js","node_modules/vega-view/src/scale.js","node_modules/vega-view/src/size.js","node_modules/vega-view/src/state.js","node_modules/vega-view/src/timer.js","node_modules/vega-view/src/tooltip.js","node_modules/vega-view/src/View.js","node_modules/vega-view/index.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-util/build/vega-util.module.js","node_modules/vega/node_modules/vega-functions/src/functions/data.js","node_modules/vega/node_modules/vega-functions/src/functions/encode.js","node_modules/vega/node_modules/vega-functions/src/functions/format.js","node_modules/vega/node_modules/vega-functions/src/constants.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/src/ast.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/src/parser.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/src/constants.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/src/functions.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/src/codegen.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-expression/index.js","node_modules/vega/node_modules/vega-functions/src/visitors.js","node_modules/vega/node_modules/vega-functions/src/scales.js","node_modules/vega/node_modules/vega-functions/src/functions/geo.js","node_modules/vega/node_modules/vega-functions/src/functions/inscope.js","node_modules/vega/node_modules/vega-functions/src/functions/log.js","node_modules/vega/node_modules/vega-functions/src/functions/luminance.js","node_modules/vega/node_modules/vega-functions/src/functions/merge.js","node_modules/vega/node_modules/vega-functions/src/functions/modify.js","node_modules/vega/node_modules/vega-functions/src/functions/pinch.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/basis.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/basisClosed.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/constant.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/color.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/rgb.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/numberArray.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/array.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/date.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/number.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/object.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/string.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/value.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/discrete.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/hue.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/round.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/transform/decompose.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/transform/parse.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/transform/index.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/zoom.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/hsl.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/lab.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/hcl.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/cubehelix.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/piecewise.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/quantize.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-interpolate/src/index.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-scale/build/vega-scale.module.js","node_modules/vega/node_modules/vega-functions/src/functions/scale.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-path/src/path.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-path/src/index.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/constant.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/math.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/arc.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/array.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/linear.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/point.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/line.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/area.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/descending.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/identity.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/pie.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/radial.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/lineRadial.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/areaRadial.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/pointRadial.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/link/index.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/circle.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/cross.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/diamond.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/star.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/square.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/triangle.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol/wye.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/symbol.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/noop.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/basis.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/basisClosed.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/basisOpen.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/bundle.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/cardinal.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/cardinalClosed.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/cardinalOpen.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/catmullRom.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/catmullRomClosed.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/catmullRomOpen.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/linearClosed.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/monotone.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/natural.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/curve/step.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/offset/none.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/none.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/stack.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/offset/expand.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/offset/diverging.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/offset/silhouette.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/offset/wiggle.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/appearance.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/ascending.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/descending.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/insideOut.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/order/reverse.js","node_modules/vega/node_modules/vega-functions/node_modules/d3-shape/src/index.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/loader.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/type.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/formats/dsv.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/formats/json.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/formats/topojson.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/formats/index.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/src/read.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-loader/index.browser.js","node_modules/vega/node_modules/vega-functions/node_modules/vega-scenegraph/build/vega-scenegraph.module.js","node_modules/vega/node_modules/vega-functions/src/functions/scale-gradient.js","node_modules/vega/node_modules/vega-functions/src/functions/shape.js","node_modules/vega/node_modules/vega-functions/src/functions/tree.js","node_modules/vega/node_modules/vega-functions/src/functions/window.js","node_modules/vega/node_modules/vega-functions/src/functions/intersect.js","node_modules/vega/node_modules/vega-functions/src/codegen.js","node_modules/vega/node_modules/vega-functions/src/parser.js","node_modules/vega/node_modules/vega-functions/index.js","node_modules/vega-parser/src/parsers/autosize.js","node_modules/vega-parser/src/parsers/padding.js","node_modules/vega-parser/src/parsers/encode/util.js","node_modules/vega-parser/src/parsers/marks/roles.js","node_modules/vega-parser/src/parsers/encode/defaults.js","node_modules/vega-parser/src/parsers/encode/entry.js","node_modules/vega-parser/src/parsers/encode/rule.js","node_modules/vega-parser/src/parsers/encode.js","node_modules/vega-parser/src/parsers/signal.js","node_modules/vega-parser/src/util.js","node_modules/vega-parser/src/parsers/stream.js","node_modules/vega-event-selector/build/vega-event-selector.module.js","node_modules/vega-parser/src/parsers/update.js","node_modules/vega-parser/src/parsers/signal-updates.js","node_modules/vega-parser/src/transforms.js","node_modules/vega-parser/src/parsers/scale.js","node_modules/vega-parser/src/parsers/projection.js","node_modules/vega-parser/src/parsers/guides/constants.js","node_modules/vega-parser/src/parsers/marks/marktypes.js","node_modules/vega-parser/src/parsers/guides/guide-group.js","node_modules/vega-parser/src/parsers/guides/guide-util.js","node_modules/vega-parser/src/parsers/guides/guide-mark.js","node_modules/vega-parser/src/parsers/guides/legend-gradient.js","node_modules/vega-parser/src/parsers/guides/legend-gradient-discrete.js","node_modules/vega-parser/src/parsers/guides/legend-gradient-labels.js","node_modules/vega-parser/src/parsers/guides/legend-symbol-groups.js","node_modules/vega-parser/src/parsers/guides/legend-title.js","node_modules/vega-parser/src/parsers/marks/clip.js","node_modules/vega-parser/src/parsers/marks/role.js","node_modules/vega-parser/src/parsers/marks/definition.js","node_modules/vega-parser/src/parsers/marks/interactive.js","node_modules/vega-parser/src/parsers/transform.js","node_modules/vega-parser/src/parsers/marks/data.js","node_modules/vega-parser/src/DataScope.js","node_modules/vega-parser/src/parsers/marks/facet.js","node_modules/vega-parser/src/parsers/marks/subflow.js","node_modules/vega-parser/src/parsers/trigger.js","node_modules/vega-parser/src/parsers/mark.js","node_modules/vega-parser/src/parsers/legend.js","node_modules/vega-parser/src/parsers/title.js","node_modules/vega-parser/src/parsers/data.js","node_modules/vega-parser/src/parsers/guides/axis-util.js","node_modules/vega-parser/src/parsers/guides/axis-config.js","node_modules/vega-parser/src/parsers/guides/axis-domain.js","node_modules/vega-parser/src/parsers/guides/axis-grid.js","node_modules/vega-parser/src/parsers/guides/axis-ticks.js","node_modules/vega-parser/src/parsers/guides/axis-labels.js","node_modules/vega-parser/src/parsers/guides/axis-title.js","node_modules/vega-parser/src/parsers/axis.js","node_modules/vega-parser/src/parsers/scope.js","node_modules/vega-parser/src/parsers/view.js","node_modules/vega-parser/src/Scope.js","node_modules/vega-parser/src/config.js","node_modules/vega-parser/src/parse.js","node_modules/vega-parser/index.js","node_modules/vega/index.js","node_modules/vega-lite/node_modules/vega-util/src/accessor.js","node_modules/vega-lite/node_modules/vega-util/src/getter.js","node_modules/vega-lite/node_modules/vega-util/src/error.js","node_modules/vega-lite/node_modules/vega-util/src/splitAccessPath.js","node_modules/vega-lite/node_modules/vega-util/src/field.js","node_modules/vega-lite/node_modules/vega-util/src/accessors.js","node_modules/vega-lite/node_modules/vega-util/src/logger.js","node_modules/vega-lite/node_modules/vega-util/src/isArray.js","node_modules/vega-lite/node_modules/vega-util/src/isObject.js","node_modules/vega-lite/node_modules/vega-util/src/mergeConfig.js","node_modules/vega-lite/node_modules/vega-util/src/peek.js","node_modules/vega-lite/node_modules/vega-util/src/toNumber.js","node_modules/vega-lite/node_modules/vega-util/src/transform.js","node_modules/vega-lite/node_modules/vega-util/src/quarter.js","node_modules/vega-lite/node_modules/vega-util/src/array.js","node_modules/vega-lite/node_modules/vega-util/src/clampRange.js","node_modules/vega-lite/node_modules/vega-util/src/isFunction.js","node_modules/vega-lite/node_modules/vega-util/src/compare.js","node_modules/vega-lite/node_modules/vega-util/src/constant.js","node_modules/vega-lite/node_modules/vega-util/src/debounce.js","node_modules/vega-lite/node_modules/vega-util/src/extend.js","node_modules/vega-lite/node_modules/vega-util/src/extent.js","node_modules/vega-lite/node_modules/vega-util/src/extentIndex.js","node_modules/vega-lite/node_modules/vega-util/src/hasOwnProperty.js","node_modules/vega-lite/node_modules/vega-util/src/fastmap.js","node_modules/vega-lite/node_modules/vega-util/src/flush.js","node_modules/vega-lite/node_modules/vega-util/src/inherits.js","node_modules/vega-lite/node_modules/vega-util/src/inrange.js","node_modules/vega-lite/node_modules/vega-util/src/isBoolean.js","node_modules/vega-lite/node_modules/vega-util/src/isDate.js","node_modules/vega-lite/node_modules/vega-util/src/isNumber.js","node_modules/vega-lite/node_modules/vega-util/src/isRegExp.js","node_modules/vega-lite/node_modules/vega-util/src/isString.js","node_modules/vega-lite/node_modules/vega-util/src/key.js","node_modules/vega-lite/node_modules/vega-util/src/lerp.js","node_modules/vega-lite/node_modules/vega-util/src/lruCache.js","node_modules/vega-lite/node_modules/vega-util/src/merge.js","node_modules/vega-lite/node_modules/vega-util/src/repeat.js","node_modules/vega-lite/node_modules/vega-util/src/pad.js","node_modules/vega-lite/node_modules/vega-util/src/span.js","node_modules/vega-lite/node_modules/vega-util/src/stringValue.js","node_modules/vega-lite/node_modules/vega-util/src/toBoolean.js","node_modules/vega-lite/node_modules/vega-util/src/toDate.js","node_modules/vega-lite/node_modules/vega-util/src/toString.js","node_modules/vega-lite/node_modules/vega-util/src/toSet.js","node_modules/vega-lite/node_modules/vega-util/src/truncate.js","node_modules/vega-lite/node_modules/vega-util/src/visitArray.js","node_modules/vega-lite/node_modules/vega-util/index.js","node_modules/array-flat-polyfill/index.mjs","node_modules/vega-lite/node_modules/clone/clone.js","node_modules/fast-deep-equal/index.js","node_modules/fast-json-stable-stringify/index.js","../../src/logical.ts","../../src/util.ts","../../src/axis.ts","../../src/mark.ts","../../../src/spec/unit.ts","../../../src/compositemark/base.ts","../../src/aggregate.ts","../../src/channel.ts","../../src/bin.ts","../../../src/log/message.ts","../../../src/log/index.ts","../../src/datetime.ts","../../src/timeunit.ts","../../src/vega.schema.ts","../../src/predicate.ts","../../src/type.ts","../../src/scale.ts","../../../../../src/compile/mark/encode/valueref.ts","../../../src/compile/format.ts","../../src/sort.ts","../../../src/spec/facet.ts","../../src/channeldef.ts","../../src/title.ts","../../../src/compile/common.ts","../../src/encoding.ts","../../../src/compositemark/common.ts","../../../src/compositemark/boxplot.ts","../../../src/compositemark/errorbar.ts","../../../src/compositemark/errorband.ts","../../../src/compositemark/index.ts","../../src/guide.ts","../../src/legend.ts","../../src/selection.ts","../../../src/spec/concat.ts","../../../src/spec/base.ts","../../src/config.ts","../../../src/spec/layer.ts","../../../src/spec/repeat.ts","../../../src/spec/index.ts","../../../src/spec/map.ts","../../src/stack.ts","../../../src/normalize/pathoverlay.ts","../../../src/normalize/rangestep.ts","../../../src/normalize/repeater.ts","../../../src/normalize/ruleforrangedline.ts","../../../src/normalize/core.ts","../../../src/normalize/index.ts","../../../src/spec/toplevel.ts","../../../src/compile/split.ts","../../../../src/compile/data/index.ts","../../src/data.ts","../../src/transform.ts","../../../../../src/compile/mark/encode/conditional.ts","../../../../../src/compile/mark/encode/text.ts","../../../../../src/compile/mark/encode/tooltip.ts","../../../../../src/compile/mark/encode/aria.ts","../../../../../src/compile/mark/encode/nonposition.ts","../../../../../src/compile/mark/encode/color.ts","../../../../../src/compile/mark/encode/offset.ts","../../../../../src/compile/mark/encode/position-point.ts","../../../../../src/compile/mark/encode/position-align.ts","../../../../../src/compile/mark/encode/position-range.ts","../../../../../src/compile/mark/encode/position-rect.ts","../../../../../src/compile/mark/encode/base.ts","../../../../../src/compile/mark/encode/defined.ts","../../../../../src/compile/mark/encode/index.ts","../../../../../src/compile/selection/transforms/nearest.ts","../../../../src/compile/data/dataflow.ts","../../../../src/compile/data/timeunit.ts","../../../../../src/compile/selection/transforms/project.ts","../../../../../src/compile/selection/transforms/inputs.ts","../../../../../src/compile/selection/transforms/toggle.ts","../../../../../src/compile/selection/transforms/clear.ts","../../../../../src/compile/selection/transforms/scales.ts","../../../../../src/compile/selection/transforms/legends.ts","../../../../../src/compile/selection/transforms/translate.ts","../../../../../src/compile/selection/transforms/zoom.ts","../../../../../src/compile/selection/transforms/transforms.ts","../../../../src/compile/selection/assemble.ts","../../../../src/compile/selection/interval.ts","../../../../src/compile/selection/multi.ts","../../../../src/compile/selection/single.ts","../../../../src/compile/selection/index.ts","node_modules/vega-expression/src/ast.js","node_modules/vega-expression/src/parser.js","node_modules/vega-expression/src/constants.js","node_modules/vega-expression/src/functions.js","node_modules/vega-expression/src/codegen.js","node_modules/vega-expression/index.js","../../../../src/compile/data/expressions.ts","../../../../src/compile/data/filter.ts","../../../../src/compile/selection/parse.ts","../../../src/compile/predicate.ts","../../../../src/compile/axis/assemble.ts","../../src/header.ts","../../../../src/compile/axis/config.ts","../../../../src/compile/axis/properties.ts","../../../../src/compile/data/calculate.ts","../../../../src/compile/header/common.ts","../../../../src/compile/header/component.ts","../../../../src/compile/header/assemble.ts","../../../../src/compile/layoutsize/assemble.ts","../../../../src/compile/layoutsize/component.ts","../../../src/compile/guide.ts","../../../src/compile/resolve.ts","../../../../src/compile/legend/component.ts","../../../../src/compile/legend/encode.ts","../../../../src/compile/legend/properties.ts","../../../../src/compile/legend/parse.ts","../../../../src/compile/legend/assemble.ts","../../../../src/compile/projection/assemble.ts","../../src/projection.ts","../../../../src/compile/projection/component.ts","../../../../src/compile/projection/parse.ts","../../../../src/compile/data/bin.ts","../../../../src/compile/data/source.ts","../../../../src/compile/data/debug.ts","../../../../src/compile/data/graticule.ts","../../../../src/compile/data/sequence.ts","../../../../src/compile/data/optimizer.ts","../../../../src/compile/data/aggregate.ts","../../../../src/compile/data/facet.ts","../../../../src/compile/data/formatparse.ts","../../../../src/compile/data/identifier.ts","../../../../src/compile/data/joinaggregate.ts","../../../../src/compile/data/stack.ts","../../../../src/compile/data/window.ts","../../../../src/compile/data/optimizers.ts","../../../../src/compile/data/optimize.ts","../../../src/compile/signal.ts","../../../../src/compile/scale/domain.ts","../../../../src/compile/scale/assemble.ts","../../../../src/compile/scale/component.ts","../../../../src/compile/scale/range.ts","../../../../src/compile/scale/properties.ts","../../../../src/compile/scale/type.ts","../../../../src/compile/scale/parse.ts","../../../src/compile/model.ts","../../../../src/compile/data/density.ts","../../../../src/compile/data/filterinvalid.ts","../../../../src/compile/data/flatten.ts","../../../../src/compile/data/fold.ts","../../../../src/compile/data/geojson.ts","../../../../src/compile/data/geopoint.ts","../../../../src/compile/data/impute.ts","../../../../src/compile/data/loess.ts","../../../../src/compile/data/lookup.ts","../../../../src/compile/data/quantile.ts","../../../../src/compile/data/regression.ts","../../../../src/compile/data/pivot.ts","../../../../src/compile/data/sample.ts","../../../../src/compile/data/assemble.ts","../../../../src/compile/header/parse.ts","../../../../src/compile/layoutsize/parse.ts","../../../src/compile/facet.ts","../../../../src/compile/data/joinaggregatefacet.ts","../../../../src/compile/data/parse.ts","../../../src/compile/concat.ts","../../../../src/compile/axis/component.ts","../../../../src/compile/axis/encode.ts","../../../../src/compile/axis/parse.ts","../../../../src/compile/layoutsize/init.ts","../../../../src/compile/mark/init.ts","../../../../src/compile/mark/arc.ts","../../../../src/compile/mark/area.ts","../../../../src/compile/mark/bar.ts","../../../../src/compile/mark/geoshape.ts","../../../../src/compile/mark/image.ts","../../../../src/compile/mark/line.ts","../../../../src/compile/mark/point.ts","../../../../src/compile/mark/rect.ts","../../../../src/compile/mark/rule.ts","../../../../src/compile/mark/text.ts","../../../../src/compile/mark/tick.ts","../../../../src/compile/mark/mark.ts","../../../src/compile/unit.ts","../../../src/compile/layer.ts","../../../src/compile/buildmodel.ts","../../../src/compile/compile.ts","../../src/transformextract.ts","../../src/index.ts","index.ts","node_modules/vega-themes/build/vega-themes.module.js","../../src/style.ts","../../src/defaults.ts","../../src/formatValue.ts","../../src/position.ts","../../src/Handler.ts","../../src/post.ts","../../src/embed.ts","node_modules/object-assign/index.js","node_modules/glamor/lib/sheet.js","node_modules/fbjs/lib/camelize.js","node_modules/fbjs/lib/camelizeStyleName.js","node_modules/glamor/lib/CSSPropertyOperations/CSSProperty.js","node_modules/fbjs/lib/emptyFunction.js","node_modules/fbjs/lib/warning.js","node_modules/glamor/lib/CSSPropertyOperations/dangerousStyleValue.js","node_modules/fbjs/lib/hyphenate.js","node_modules/fbjs/lib/hyphenateStyleName.js","node_modules/fbjs/lib/memoizeStringOnly.js","node_modules/glamor/lib/CSSPropertyOperations/index.js","node_modules/glamor/lib/clean.js","node_modules/inline-style-prefixer/static/staticData.js","node_modules/inline-style-prefixer/utils/capitalizeString.js","node_modules/inline-style-prefixer/utils/prefixProperty.js","node_modules/inline-style-prefixer/utils/prefixValue.js","node_modules/inline-style-prefixer/static/plugins/cursor.js","node_modules/css-in-js-utils/lib/isPrefixedValue.js","node_modules/inline-style-prefixer/static/plugins/crossFade.js","node_modules/inline-style-prefixer/static/plugins/filter.js","node_modules/inline-style-prefixer/static/plugins/flex.js","node_modules/inline-style-prefixer/static/plugins/flexboxOld.js","node_modules/inline-style-prefixer/static/plugins/gradient.js","node_modules/inline-style-prefixer/static/plugins/imageSet.js","node_modules/inline-style-prefixer/static/plugins/position.js","node_modules/inline-style-prefixer/static/plugins/sizing.js","node_modules/hyphenate-style-name/index.js","node_modules/css-in-js-utils/lib/hyphenateProperty.js","node_modules/inline-style-prefixer/static/plugins/transition.js","node_modules/glamor/lib/prefixer.js","node_modules/glamor/lib/plugins.js","node_modules/glamor/lib/hash.js","node_modules/glamor/lib/index.js","../src/vnode.js","../src/options.js","../src/h.js","../src/util.js","../src/clone-element.js","../src/constants.js","../src/render-queue.js","../src/vdom/index.js","../src/dom/index.js","../src/vdom/diff.js","../src/vdom/component-recycler.js","../src/vdom/component.js","../src/component.js","../src/render.js","../src/preact.js","../../src/components/surface.tsx","../../src/components/tabs.tsx","../../src/components/visor.tsx","../src/visor.ts","../../src/render/render_utils.ts","../../src/util/dom.ts","../../src/render/barchart.ts","../../src/render/confusion_matrix.ts","../../src/util/utils.ts","../../src/render/heatmap.ts","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatDecimal.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/exponent.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatGroup.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatNumerals.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatSpecifier.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatTrim.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatPrefixAuto.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatRounded.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/formatTypes.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/identity.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/locale.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/defaultLocale.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/precisionFixed.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/precisionPrefix.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/precisionRound.js","node_modules/@tensorflow/tfjs-vis/node_modules/d3-format/src/index.js","../../src/util/math.ts","node_modules/d3-selection/src/namespaces.js","node_modules/d3-selection/src/namespace.js","node_modules/d3-selection/src/creator.js","node_modules/d3-selection/src/selector.js","node_modules/d3-selection/src/selection/select.js","node_modules/d3-selection/src/selectorAll.js","node_modules/d3-selection/src/selection/selectAll.js","node_modules/d3-selection/src/matcher.js","node_modules/d3-selection/src/selection/filter.js","node_modules/d3-selection/src/selection/sparse.js","node_modules/d3-selection/src/selection/enter.js","node_modules/d3-selection/src/constant.js","node_modules/d3-selection/src/selection/data.js","node_modules/d3-selection/src/selection/exit.js","node_modules/d3-selection/src/selection/merge.js","node_modules/d3-selection/src/selection/order.js","node_modules/d3-selection/src/selection/sort.js","node_modules/d3-selection/src/selection/call.js","node_modules/d3-selection/src/selection/nodes.js","node_modules/d3-selection/src/selection/node.js","node_modules/d3-selection/src/selection/size.js","node_modules/d3-selection/src/selection/empty.js","node_modules/d3-selection/src/selection/each.js","node_modules/d3-selection/src/selection/attr.js","node_modules/d3-selection/src/window.js","node_modules/d3-selection/src/selection/style.js","node_modules/d3-selection/src/selection/property.js","node_modules/d3-selection/src/selection/classed.js","node_modules/d3-selection/src/selection/text.js","node_modules/d3-selection/src/selection/html.js","node_modules/d3-selection/src/selection/raise.js","node_modules/d3-selection/src/selection/lower.js","node_modules/d3-selection/src/selection/append.js","node_modules/d3-selection/src/selection/insert.js","node_modules/d3-selection/src/selection/remove.js","node_modules/d3-selection/src/selection/clone.js","node_modules/d3-selection/src/selection/datum.js","node_modules/d3-selection/src/selection/on.js","node_modules/d3-selection/src/selection/dispatch.js","node_modules/d3-selection/src/selection/index.js","node_modules/d3-selection/src/select.js","node_modules/d3-selection/src/create.js","node_modules/d3-selection/src/local.js","node_modules/d3-selection/src/sourceEvent.js","node_modules/d3-selection/src/point.js","node_modules/d3-selection/src/mouse.js","node_modules/d3-selection/src/selectAll.js","node_modules/d3-selection/src/touch.js","node_modules/d3-selection/src/touches.js","node_modules/d3-selection/src/index.js","../../src/render/table.ts","../../src/render/histogram.ts","../../src/render/linechart.ts","../../src/render/scatterplot.ts","../../src/show/history.ts","../../src/show/model.ts","../../src/show/quality.ts","../../src/show/tensor.ts","ui.js","index.js"],"names":["process","module","exports","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","setTimeout","e","clearTimeout","runTimeout","fun","call","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","nextTick","args","Array","arguments","i","push","Item","array","prototype","apply","title","browser","env","argv","version","versions","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","global","this","populateURLFlags","Environment","platformName","platform","console","warn","flagName","evaluationFn","setHook","flagRegistry","urlFlags","flagValue","set","flags","evaluateFlag","get","Object","value","assign","location","search","queryString","params","urlParams","replace","s","_i","t","decodeParam","join","split","forEach","keyValue","_a","key","_this","toLowerCase","parseValue","decodeURIComponent","ENV","kernelRegistry","Map","gradRegistry","getKernel","kernelName","backendName","makeKey","getGradient","getKernelsForBackend","it","entries","result","done","config","registerKernel","has","registerGradient","unregisterKernel","delete","unregisterGradient","shuffle","counter","temp","index","Math","random","clamp","min","x","max","nearestLargerEven","val","sum","arr","assert","expr","msg","assertShapesMatch","shapeA","shapeB","errorMessagePrefix","arraysEqual","assertNonNull","a","flatten","skipTypedArray","isArray","isTypedArray","sizeFromShape","shape","size","n1","n2","isInt","tanh","Infinity","e2x","exp","sizeToSquarishShape","width","ceil","sqrt","rightPad","repeat","repeatedTry","checkFn","delayFn","maxCounter","Promise","resolve","reject","tryCount","tryFn","nextBackoff","inferFromImplicitShape","shapeProd","implicitIdx","newShape","slice","parseAxisParam","axis","rank","map","every","ax","squeezeShape","keptDims","isEmptyArray","axes","sort","j","getTypedArrayFromDType","dtype","values","Float32Array","Int32Array","Uint8Array","getArrayFromDType","checkConversionForErrors","vals","num","isNaN","isFinite","isValidDtype","hasEncodingLoss","oldType","newType","bytesPerElement","bytesFromStringArray","bytes","isString","String","isBoolean","isNumber","inferDtype","isFunction","f","constructor","nearestDivisor","start","computeStrides","strides","toTypedArray","debugMode","noConversionNeeded","bool","round","toNestedArray","reduce","acc","c","createNestedArray","offset","ret","d","rest","makeOnesTypedArray","makeZerosTypedArray","now","assertNonNegativeIntegerDimensions","dimSize","Number","isInteger","encodeString","encoding","encode","decodeString","decode","locToIndex","locs","indexToLoc","floor","b","r","diff","n","shuffledIndices","Uint32Array","path","requestInits","fetch","backendTimer","logger","Logger","Profiler","inputs","outputs","timer","time","data","then","checkComputationForErrors","timing","extraInfo","getExtraProfileInfo","logKernelProfile","kernelMs","timeMs","util.rightPad","paddedName","toString","inputShapesDescription","name_1","inputShape","inputRank","log","FORMAT_LIMIT_NUM_VALS","FORMAT_NUM_FIRST_LAST_VALS","FORMAT_NUM_SIG_DIGITS","tensorToString","verbose","padPerCol","numCols","fill","valuesOrTuples","createComplexTuples","row","valToString","computeMaxSizePerColumn","valsLines","subTensorToString","isLast","storagePerElement","boolNumToString","firstValsSize","firstVals","from","lastVals","subshape","substrides","stride","lines","end","sep","newLineSep","l","pad","parseFloat","toFixed","v","complexTuples","util.sizeFromShape","n_1","util.assert","util.getArrayFromDType","TensorBuffer","locs_1","loc","i_1","trackerFn","makeTensor","opHandler","deprecationWarningFn","dataId","id","rankType","Tensor","throwIfDisposed","as1D","reshape","rows","columns","depth","depth2","depth3","cast","buffer","dataSync","read","util.decodeString","readSync","isDisposed","disposeTensor","isDisposedInternal","asType","print","expandDims","exclusive","reverse","cumsum","squeeze","clone","indices","gather","transposeA","transposeB","matMul","dot","ord","keepDims","norm","begin","numOrSizeSplits","stack","unstack","mean","variance","varianceEpsilon","scale","batchNorm","all","any","logSumExp","prod","argMin","argMax","addStrict","atan2","sub","subStrict","pow","powStrict","mul","mulStrict","floorDiv","divStrict","minimum","minimumStrict","maximum","maximumStrict","mod","modStrict","squaredDifferenceStrict","notEqual","notEqualStrict","less","lessStrict","equal","equalStrict","lessEqual","lessEqualStrict","greater","greaterStrict","greaterEqual","greaterEqualStrict","logicalAnd","logicalOr","logicalNot","logicalXor","condition","where","neg","sign","isInf","expm1","log1p","rsqrt","square","reciprocal","abs","clipByValue","relu","relu6","elu","selu","alpha","leakyRelu","prelu","sigmoid","logSigmoid","softplus","zerosLike","onesLike","sin","cos","tan","asin","acos","atan","sinh","cosh","asinh","acosh","atanh","erf","step","dim","softmax","logSoftmax","newShape2D","alignCorners","image","resizeBilinear","resizeNearestNeighbor","filter","dataFormat","dilation","dimRoundingMode","conv1d","dilations","conv2d","outputShape","conv2dTranspose","depthwiseConv2d","depthwiseFilter","pointwiseFilter","separableConv2d","filterSize","avgPool","maxPool","radius","bias","beta","localResponseNormalization","windowShape","poolingType","padding","dilationRate","pool","trainable","makeVariable","segmentIds","numSegments","unsortedSegmentSum","blockShape","crops","batchToSpaceND","paddings","spaceToBatchND","k","sorted","topk","beginMask","endMask","ellipsisMask","newAxisMask","shrinkAxisMask","stridedSlice","blockSize","depthToSpace","spectral","fft","ifft","rfft","irfft","defineProperty","Symbol","hasInstance","instance","Rank","UpcastInt32AndMap","UpcastBoolAndMap","UpcastFloat32AndMap","UpcastComplex64AndMap","initialValue","tensorId","_super","tslib_1.__extends","Variable","newValue","util.arraysEqual","incRef","disposeVariable","Function","upcastTypeMap","float32","int32","complex64","upcastType","typeA","typeB","sumOutType","type","makeTypesMatch","assertTypesMatch","getTensorsInContainer","list","walkTensorContainer","container","seen","obj","iterable","add","Set","GLOBAL","tensor","tensorList","some","WeakMap","newBytes","newTensors","peakBytes","kernels","EngineState","variableName","registeredVariables","dispose","state","Engine","pendingBackendInit","backendInstance","sortedBackends","getSortedBackends","initializeBackend","success","setBackend","keys","registryFactory","registry","factory","priority","_b","_c","setupRegisteredKernels","profiler","kernel","setupFunc","disposeFunc","registryFactoryEntry","backend","promiseId_1","pendingBackendInitId","catch","err","message","asyncInit","disposeRegisteredKernels","destBackend","info","tensorInfo","srcBackend","disposeData","move","shouldCheckForMemLeaks","numDataMovesStack","nameOrFn","fn","scopedRun","startScope","endScope","error","res","ex","nextTensorId","nextVariableId","y","makeTensorFromDataId","addTapeNode","activeScope","dy","toFloat","attrs","inputsToSave","outputsToSave","runKernelFunc","getBool","numDataIdsBefore","outInfos","numDataIdsAfter","numDataIds","numOutputDataIds","numMoves","dataIdsLeaked","forwardFunc","backwardsFunc","saved","isTapeOn","kernelFunc","startingBytecount","numBytes","startingNumTensors","numTensors","out","checkKernelForMemLeak","outTensors","tensorsToSave","getTensorsForGradient","outsToSave","_","saveTensorsForBackwardMode","saveFunc_1","tensors","keep","tidy","outs","kernelDepth","profileKernel","profiling","activeProfile","bytesAdded","totalBytesSnapshot","tensorsAdded","totalTensorsSnapshot","inputShapes","outputShapes","item","gradConfig","outputsToSave_1","inputTensorsToSave","saveAllInputs","inputName","outputTensorsToSave","backendVals","util.isString","util.encodeString","write","refCount","numStringTensors","numDataBuffers","util.bytesPerElement","track","varName","memory","unreliable","reasons","query","startBytes","startNumTensors","gradientDepth","gradientsFunc","tapeNode","nextTapeNodeId","gradFunc","gradient","dys","output","util.makeZerosTypedArray","activeTape","kept","scopeInfo","nextScopeId","scopeStack","tensorsToTrackInParent","tensorsToTrackInParentSet","oldScope","pop","scopeId","xs","allowNoGradients","startTape","endTape","filteredTape","tape","tensorsFromX","nodesFromX","nodeInputs","node","input","anyInputFromX","tensorsLeadToY","nodesToY","prunedInputs","nodeInput","prunedNode","getFilteredNodesXToY","accumulatedGradientMap","ENGINE","tensorAccumulatedGradientMap","o","gradTensor","inputGradients","dx","curGradient","backpropagateGradients","grads","util.isFunction","inputMap","save","gradRes","gradMap","grad","timingInfo","wallMs","reset","ns","window","self","getGlobalNamespace","_tfengine","environment","setEnvironmentGlobal","getOrMakeEngine","isBrowser","document","WorkerGlobalScope","registerFlag","debugValue","device_util.isBrowser","navigator","userAgent","test","vendor","PackingScheme","TextureUsage","PhysicalTextureType","contexts","WEBGL_ATTRIBUTES","antialias","premultipliedAlpha","preserveDrawingBuffer","stencil","failIfMajorPerformanceCaveat","setWebGLContext","webGLVersion","gl","getWebGLContext","canvas","OffscreenCanvas","createElement","createCanvas","addEventListener","ev","preventDefault","getContext","getWebGLRenderingContext","isContextLost","disable","DEPTH_TEST","STENCIL_TEST","BLEND","DITHER","POLYGON_OFFSET_FILL","SAMPLE_COVERAGE","enable","SCISSOR_TEST","CULL_FACE","cullFace","BACK","getUnpackedMatrixTextureShapeWidthHeight","getDenseTexShape","util.sizeToSquarishShape","getPackedMatrixTextureShapeWidthHeight","getTextureConfig","textureHalfFloatExtension","internalFormatFloat","internalFormatHalfFloat","internalFormatPackedHalfFloat","internalFormatPackedFloat","textureFormatFloat","downloadUnpackNumChannels","defaultNumChannels","textureTypeHalfFloat","textureTypeFloat","glany","getNumber","R32F","R16F","RGBA16F","RGBA32F","RED","HALF_FLOAT","FLOAT","RGBA","HALF_FLOAT_OES","downloadTextureFormat","callAndCheck","func","returnValue","getError","NO_ERROR","getWebGLErrorMessage","checkWebGLError","MIN_FLOAT16","MAX_FLOAT16","canBeRepresented","status","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","getExtensionOrThrow","debug","extensionName","throwIfNull","getExtension","createVertexShader","vertexShaderSource","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","createFragmentShader","fragmentShaderSource","fragmentShader","FRAGMENT_SHADER","shaderInfoLog","lineNumberRegexResult","lineNumberRegex","exec","lineNumber","shaderLines","linesWithLineNumbers","line","maxLineLength","beforeErrorLines","errorLine","afterErrorLines","logShaderSourceAndInfoLog","MAX_TEXTURE_SIZE","MAX_TEXTURES_IN_SHADER","createProgram","linkProgram","program","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","VALIDATE_STATUS","createStaticVertexBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","createStaticIndexBuffer","ELEMENT_ARRAY_BUFFER","createTexture","validateTextureSize","height","maxTextureSize","requested","createFramebuffer","bindVertexBufferToProgramAttribute","attribute","arrayEntriesPerItem","itemStrideInBytes","itemOffsetInBytes","getAttribLocation","vertexAttribPointer","enableVertexAttribArray","bindTextureUnit","texture","textureUnit","validateTextureUnit","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","getProgramUniformLocationOrThrow","uniformName","getUniformLocation","getProgramUniformLocation","bindTextureToProgramUniformSampler","uniformSamplerLocation","uniform1i","bindColorTextureToFramebuffer","framebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","unbindColorTextureFromFramebuffer","validateFramebuffer","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","getFramebufferErrorMessage","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","returnTOrNull","failureMessage","tOrNull","maxTextureUnit","MAX_COMBINED_TEXTURE_IMAGE_UNITS","glTextureUnit","getBatchDim","dimsToSkip","getRowsCols","getShapeAs3D","shapeAs3D","getTextureShapeFromLogicalShape","logShape","isPacked","maxTexSize","util.nearestLargerEven","squeezeResult","util.squeezeShape","batchDim","cols","isEven","isReshapeFree","shape1","shape2","shape1Cols","shape2Cols","getWebGLMaxTextureSize","getParameter","getMaxTexturesInShader","MAX_TEXTURE_IMAGE_UNITS","getWebGLDisjointQueryTimerVersion","hasExtension","isWebGLVersionEnabled","isCapableOfRenderingToFloatTexture","createFloatTextureAndBindToFramebuffer","isDownloadFloatTextureEnabled","texConfig","texImage2D","frameBuffer","isFrameBufferComplete","deleteTexture","deleteFramebuffer","createHalfFloatTextureAndBindToFramebuffer","isWebGLFenceEnabled","fenceSync","viewport","scissor","enableProdMode","enableDebugMode","disableDeprecationWarnings","deprecationWarn","disposeVariables","engine","profile","ready","getBackend","removeBackend","findBackend","findBackendFactory","registerBackend","setPlatform","inferShape","firstElem","deepAssertShapeConsistency","subShape","assertDtype","expectedDtype","actualDType","argName","functionName","convertToTensor","parseAsDtype","inferredDtype","indexOf","inferredShape","convertToTensorArray","arg","axesAreInnerMostDims","combineLocations","outputLoc","reduceLoc","outIdx","reduceIdx","computeOutAndReduceShapes","aShape","outShape","expandShapeToKeepDim","assertAxesAreInnerMostDims","getAxesPermutation","getUndoAxesPermutation","getInnerMostAxes","numAxes","assertParamsConsistent","shapes","firstShape","computeOutShape","op","opName","endsWith","substring","f2","configurable","webgl_util.isWebGLVersionEnabled","webgl_util.getWebGLMaxTextureSize","webgl_util.getMaxTexturesInShader","webgl_util.getWebGLDisjointQueryTimerVersion","opera","substr","webgl_util.isCapableOfRenderingToFloatTexture","webgl_util.isDownloadFloatTextureEnabled","webgl_util.isWebGLFenceEnabled","complex","complex_","real","imag","$real","$imag","util.assertShapesMatch","real_","$input","imag_","providedSize_1","inferredSize_1","inferred","flatDimsDontMatch","scalar","tensor1d","tensor2d","tensor3d","tensor4d","tensor5d","tensor6d","variable","ones","real_1","imag_1","zeros","real_2","imag_2","linspace","stop","range","onesLike_","$x","zerosLike_","concat_","$tensors","attr","sizeSplits","concat1d","concat1d_","concat2d","concat2d_","concat3d","concat3d_","concat4d","concat4d_","split_","splitSizes","util.assertNonNegativeIntegerDimensions","batchToSpaceND_","cast_","util.isValidDtype","cumsum_","permutation","permutedX","transpose","permutedAxis","depthToSpace_","inputHeight","inputWidth","inputDepth","expandDims_","splice","reshape_","util.inferFromImplicitShape","spaceToBatchND_","squeeze_","stack_","expandedTensors","unstack_","setdiff1dAsync","$y","xVals","yVals","ySet","outputSize","p","toTensor","getReshaped","batchToSpace","reshaped","spatialLength","getPermuted","reshapedRank","blockShapeRank","permuted","permutedBeforeBatch","permutedAfterBatch","getReshapedPermuted","reshapedPermuted","getSliceBeginCoords","sliceBeginCoords","getSliceSize","uncroppedShape","sliceSize","Add","AddN","Div","FusedBatchNorm","SquaredDifference","Square","Transpose","NonMaxSuppressionV5","BroadcastTo","OneHot","Identity","Tile","PadV2","FromPixels","MaxPoolWithArgmax","add_","$a","$b","getBroadcastDims","inShape","inRank","dims","unshift","getReductionAxes","inDim","outAxis","outDim","assertAndGetBroadcastShape","abs_","complexAbs","acos_","acosh_","asin_","asinh_","atan_","div","atanh_","ceil_","clipByValue_","clipValueMin","clipValueMax","clip","cos_","cosh_","erf_","PI","exp_","expm1_","floor_","log_","log1p_","logSigmoid_","neg_","reciprocal_","round_","rsqrt_","sigmoid_","sign_","isNaN_","isInf_","isFinite_","sin_","sinh_","softplus_","sqrt_","step_","tan_","tanh_","addStrict_","atan2_","broadcast_util.assertAndGetBroadcastShape","reduceAxes","broadcast_util.getReductionAxes","divStrict_","floorDiv_","tmp","maximum_","toInt","maximumStrict_","minimum_","minimumStrict_","mod_","modStrict_","mul_","multiply","mulStrict_","pow_","base","$base","$exp","expFloat","logBase","powStrict_","squaredDifferenceStrict_","squaredDifference","sub_","subtract","subStrict_","div_","realDivide","prepareAndValidate","indicesShape","sliceRank","nResult","resultShape","PARALLELIZE_THRESHOLD","computeOptimalWindowSize","inSize","validateUpdateShape","updates","sliceDim","shapeError","validateInput","calculateShapes","indicesRank","totalNd","safeSliceDim","numUpdates","assertParamsValid","maskToAxes","mask","startForAxis","startIndices","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","axisSize","util.clamp","stopForAxis","stopIndices","isSliceContinous","firstNonOneAxis","computeFlatOffset","flatOffset","$dy","checkGrads","$args","valueAndGrad","valueAndGrads","gradients","variableGrads","varList","specifiedVarList","specifiedNonTrainable","originalVarCount","g","namedGrads","customGrad","softmax_","logits","$logits","dyTimesY","logSoftmax_","xMax","shifted","transpose_","perm","dataMover","DataStorage","moveData","dataIdsCount","KernelBackend","notYetImplemented","floatPrecision","convInfo","dY","reps","constantValue","newHeight","newWidth","newHEight","inputImage","outputImage","normalized","numSamples","seed","onValue","offValue","boxes","scores","maxOutputSize","iouThreshold","scoreThreshold","boxIndex","cropSize","method","extrapolationValue","sparseIndices","sparseValues","defaultValue","computePool2DInfo","roundingMode","filterShape","filterHeight","filterWidth","computeConv2DInfo","computePool3DInfo","$dataFormat","filterDepth","computeConv3DInfo","depthwise","batchSize","inHeight","inWidth","inChannels","filterChannels","strideHeight","strideWidth","dilationHeight","dilationWidth","effectiveFilterHeight","getEffectiveFilterSize","effectiveFilterWidth","_d","padInfo","outHeight","outWidth","top","bottom","left","right","fieldSize","zeroPad","computeDefaultPad","inputRows","inputCols","outputRows","conditionalRound","util.isInt","outputCols","computeOutputShape2D","padAlongHeight","padAlongWidth","top_1","outChannels","inDepth","strideDepth","dilationDepth","effectiveFilterDepth","outDepth","front","back","outputDepths","computeOutputShape4D","padAlongDepth","top_2","effectiveFieldSize","parseTupleParam","param","parse3TupleParam","tupleValuesAreOne","dimA","dimB","dimC","eitherStridesOrDilationsAreOne","convertConv2DDataFormat","castTensor","zerosTensor","floatX","int","zero","reshapeTensor","linspaceImpl","mergeRealAndImagArrays","getComplexWithIndex","assignToTypedArray","exponent","inverse","binaryInsert","element","comparator","target","middle","found","compareResult","binarySearch_","defaultComparator","binarySearch","insertionPoint","nonMaxSuppressionV3","nonMaxSuppressionImpl_","selectedIndices","nonMaxSuppressionV5","softNmsSigma","numValidOutputs","selectedScores","returnScoresTensor","padToMaxOutputSize","candidates","score","suppressBeginIndex","ascendingComparator","candidate","originalScore","ignoreCandidate","iou","intersectionOverUnion","suppressWeight","iCoord","subarray","jCoord","yminI","xminI","ymaxI","xmaxI","yminJ","xminJ","ymaxJ","xmaxJ","areaI","areaJ","intersectionYmin","intersectionXmin","intersectionYmax","intersectionXmax","intersectionArea","weight","c1","c2","tile","xBuf","newLoc","originalLoc","originalIndex","topkImpl","xShape","xDtype","lastDim","batch","allTopKVals","allTopKIndices","valAndInd","outOffset","topKVals","topKIndices","whereImpl","condShape","condVals","inBuffer","variableNames","snippets","operation","userCode","reduceInfo","firstPass","windowSize","outSize","compOp","indexSnippet","getVecChannels","getChannels","getGlslDifferences","varyingVs","varyingFs","texture2D","defineOutput","defineSpecialNaN","defineSpecialInf","defineRound","getLogicalCoordinatesFromFlatIndex","coords","util.computeStrides","getFlatIndexFrom3D","ENCODE_FLOAT_SNIPPET","makeShader","inputsInfo","usesPackedTextures","prefixSnippets","shapeInfo","logicalShape","isUniform","outputSamplingSnippet","floatTextureSetOutputSnippet","inputPrefixSnippet","inputSamplingSnippet","inInfo","outShapeInfo","getPackedSamplerFromInInfo","getSamplerFromInInfo","inputInfo","coordsSnippet","texName","texFuncSnippet","charAt","toUpperCase","funcName","outRank","broadcastDims","getCoordsDataType","rankDiff","fields","unpackedCoordsSnippet","isInputScalar","isOutputScalar","getPackedSamplerAtOutputCoords","outTexShape","texShape","inTexShape","getSamplerAtOutputCoords","getInputSamplingSnippet","glsl","floatTextureSampleSnippet","getFloatTextureSampleSnippet","shaderPrefix","SAMPLE_1D_SNIPPET","SAMPLE_2D_SNIPPET","SAMPLE_3D_SNIPPET","getShaderPrefix","packedTexShape","getOutputPacked1DCoords","texelsInLogicalRow","getOutputPacked2DCoords","texelsInBatch","texelsInBatchN","batches","getOutputPackedNDCoords","getPackedOutputSamplingSnippet","getFloatTextureSetRGBASnippet","getOutput1DCoords","getOutput2DCoords","coordsFromIndexSnippet","shader_util.getLogicalCoordinatesFromFlatIndex","getOutput4DCoords","getOutput5DCoords","getOutput6DCoords","getOutputSamplingSnippet","getFloatTextureSetRSnippet","SHADER_PACKED_PREFIX","texNumR","texNumC","tNumR","tNumC","getFlatOffsetUniformName","getSamplerScalar","getUniformSampler","getSampler1D","texNumR_1","texNumC_1","squeezedShape","newInputInfo","squeezeInputInfo","getSqueezedParams","getSampler2D","stride0","stride1","getSampler3D","stride2","getSampler4D","stride3","getSampler5D","stride4","getSampler6D","getPackedSampler1D","valuesPerRow","getPackedSampler2D","getPackedSampler3D","getPackedSamplerND","JSON","parse","stringify","sourceLocSetup","sourceRank","sourceLocDType","channels","inChannel","intChannels","srcRCoords","srcGCoords","srcBCoords","srcACoords","fetchCandidateIdx","fetchValue","getBestIndicesAChannelSnippet","padTop","padLeft","avgMultiplier","padFront","meanShape","varianceShape","offsetShape","scaleShape","offsetSnippet","scaleSnippet","COMPLEX_MULTIPLY","bShape","ADD","SUB","MUL","DIV","PRELU","checkOutOfBounds","checkOutOfBoundsString","ClipProgram","gpgpu","webGLProgram","minLoc","getUniformLocationNoThrow","maxLoc","uniform1f","ClipPackedProgram","concat_util.computeOutShape","offsets","shift","lastIndex","lastShift","channel","lastChannels","allChannels","getValueSnippet","shift_1","shiftedChannels","channelIdx","idx","isChannelsLast","rowDim","colDim","channelDim","channelMul","addBias","activation","hasPreluActivationWeights","inputDepthNearestVec4","inputDepthVec4Remainder","activationSnippet","applyActivationSnippet","addBiasSnippet","hasPreluActivation","xNumRows","xNumCols","texelsAcross","mainLoop","texelC","nextTexelOffset","imageShape","boxShape","imageHeight","imageWidth","numBoxes","cropHeight","cropWidth","methodId","inputHeightFloat","inputWidthFloat","heightRatio","heightScale","inY","widthRatio","widthScale","inX","finalDim","getFinalCoord","getCoords","DENSE","getHeightCoordString","getWidthCoordString","getDepthCoordString","getOutputDepthSize","getInputSamplingString","DepthToSpaceProgram","DOWNLOAD","inputIsUnsignedByte","shader_util.getFlatIndexFrom3D","col","COMPLEX_FFT","innerDim","exponentMultiplierSnippet","resultDenominator","FillProgram","valueLoc","indicesLength","sourceCoords","currentCoords","getSourceCoords","stridesType","strideString","webgl_util.createVertexShader","createVertexBuffer","webgl_util.createStaticVertexBuffer","createIndexBuffer","webgl_util.createStaticIndexBuffer","Uint16Array","createAndConfigureTexture","internalFormat","textureFormat","textureType","webgl_util.validateTextureSize","webgl_util.createTexture","tex2d","webgl_util.callAndCheck","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","createFloat32MatrixTexture","textureConfig","createFloat16MatrixTexture","createUnsignedBytesMatrixTexture","UNSIGNED_BYTE","createPackedMatrixTexture","createFloat16PackedMatrixTexture","bindVertexProgramAttributeStreams","vertexBuffer","webgl_util.bindVertexBufferToProgramAttribute","uploadDenseMatrixToTexture","dataForUpload","texelDataType","uploadPixelDataToTexture","pixels","createBufferFromOutputTexture","gl2","PIXEL_PACK_BUFFER","bufferSizeBytes","bytesPerFloat","STREAM_READ","readPixels","downloadFloat32MatrixFromBuffer","downloadTarget","getBufferSubData","downloadByteEncodedFloatMatrixFromOutputTexture","w","h","downloadPackedMatrixFromBuffer","physicalRows","physicalCols","tex_util.getPackedRGBAArraySizeFromMatrixShape","downloadMatrixFromPackedOutputTexture","packedRGBA","glVersion","COLOR_BUFFER_FLOAT","textureFloatExtension","webgl_util.getExtensionOrThrow","webgl_util.hasExtension","colorBufferFloatExtension","colorBufferHalfFloatExtension","gpgpu_util.createVertexBuffer","indexBuffer","gpgpu_util.createIndexBuffer","webgl_util.createFramebuffer","tex_util.getTextureConfig","GPGPUContext","disposed","outputTexture","finish","deleteBuffer","gpgpu_util.createFloat32MatrixTexture","gpgpu_util.createFloat16MatrixTexture","gpgpu_util.createUnsignedBytesMatrixTexture","gpgpu_util.uploadPixelDataToTexture","gpgpu_util.uploadDenseMatrixToTexture","gpgpu_util.createFloat16PackedMatrixTexture","gpgpu_util.createPackedMatrixTexture","webgl_util.unbindColorTextureFromFramebuffer","downloadMatrixDriver","gpgpu_util.downloadByteEncodedFloatMatrixFromOutputTexture","gpgpu_util.downloadPackedMatrixFromBuffer","gpgpu_util.downloadFloat32MatrixFromBuffer","bindTextureToFrameBuffer","gpgpu_util.createBufferFromOutputTexture","unbindTextureToFrameBuffer","fenceContext","createFence","pollFence","isFencePassed","gl2_1","sync_1","SYNC_GPU_COMMANDS_COMPLETE","flush","clientWaitSync","ALREADY_SIGNALED","CONDITION_SATISFIED","beginQuery","endQuery","isQueryAvailable","gpgpu_util.downloadMatrixFromPackedOutputTexture","webgl_util.createFragmentShader","gpgpu_util.createVertexShader","webgl_util.createProgram","attachShader","webgl_util.linkProgram","webgl_util.validateProgram","vertexAttrsAreBound","setProgram","gpgpu_util.bindVertexProgramAttributeStreams","deleteProgram","useProgram","shouldThrow","webgl_util.getProgramUniformLocationOrThrow","webgl_util.getProgramUniformLocation","inputMatrixTexture","uniformLocation","throwIfNoProgram","webgl_util.bindTextureToProgramUniformSampler","outputMatrixTexture","setOutputMatrixTextureDriver","outputPackedMatrixTexture","startRow","numRows","startColumn","numColumns","setOutputMatrixWriteRegionDriver","webgl_util.validateFramebuffer","debugValidate","drawElements","TRIANGLES","UNSIGNED_SHORT","disjointQueryTimerExtension","getQueryTimerExtension","ext_1","getQueryTimerExtensionWebGL2","query_1","createQuery","TIME_ELAPSED_EXT","ext","getQueryTimerExtensionWebGL1","createQueryEXT","beginQueryEXT","endQueryEXT","ext_2","util.repeatedTry","getQueryTime","queryTimerVersion","getQueryParameter","QUERY_RESULT","getQueryObjectEXT","QUERY_RESULT_EXT","available","QUERY_RESULT_AVAILABLE","disjoint","GPU_DISJOINT_EXT","QUERY_RESULT_AVAILABLE_EXT","addItemToPoll","linearSearchLastTrue","itemsToPoll","isDoneFn","resolveFn","pollItems","webgl_util.bindColorTextureToFramebuffer","downloadAndDecode","outputMatrixTextureMaybePacked","validateBinaryAndProgram","shapeInfos","texShapeA","texShapeB","texData","itemsPerBlockRow","unrolled","powOperator","rad","maxD","basis","depthRadius","sharedDim","sharedDimensionPacked","aSample","bSample","aSwizzle","bSwizzle","numOutcomes","MultinomialProgram","seedLoc","numIndices","outOfBoundsCondition","cond","getOutOfBoundsCondition","setup","innerDims","getSetup","coord","getSourceCoordsArr","getOutput","unpackedCoords","source","cLimit","componentSetup","paddingArea","poolType","computePositions","flattenPositions","includeBatchInIndex","isAvgPool","batchFlattenPositionStr","flattenPositionStr","initializationValue","filterWidthNearestVec4","filterWidthVec4Remainder","updateSnippet","reduceType","compareOp","windowSizeNearestVec4","windowSizeVec4Remainder","vecType","thisRC","xHeight","xWidth","yHeight","yWidth","effectiveXSize","effectiveYSize","invHeightScale","invWidthScale","winHeight","winWidth","oldHeight","oldWidth","effectiveInSize","effectiveOutSize","roundBase","inCoords","getInCoord","nextColumn","nextRow","getChannel","inCoordsArray","channels1","getR","getG","getB","getA","updateSize","updatesRank","summingDupeIndex","indicesString","indicesSnippet","updatesString","updatesSnippet","segOpInfo","segOpType","checkValueOutOfBounds","checkSegmentIdOutOfBounds","cRank","cCoords","abCoords","cCoordVars","abCoordVars","destSize","body","uniformPart","SliceProgram","startLoc","uniform1iv","sourceLoc","upperRow","lowerRow","SlicePackedProgram","inputDtype","newCoords","outputAxis_1","TextureManager","shapeRC","usage","newTexture","physicalTexType","getPhysicalFromLogicalTextureType","shapeKey","getKeyFromTextureShape","freeTextures","usedTextures","numFreeTextures","numUsedTextures","newTexture_1","PACKED_2X2_FLOAT32","PACKED_2X2_FLOAT16","UNPACKED_FLOAT32","UNPACKED_FLOAT16","PACKED_4X1_UNSIGNED_BYTE","logicalTexType","texList","texIndex","logEnabled","total","tex","deleteMatrixTexture","UPLOAD","RENDER","getPhysicalTextureForRendering","PIXELS","shapeRowsCol","SELU_SCALEALPHA","SELU_SCALE","opSnippet","CHECK_NAN_SNIPPET","LINEAR","ABS","RELU","RELU6","ELU","SELU","selu_util.SELU_SCALEALPHA","selu_util.SELU_SCALE","NEG","CEIL","FLOOR","EXP","EXPM1","SIN","COS","ASIN","ACOS","ATAN","ASINH","ACOSH","ATANH","CLONE","binaryCaches","mapActivationToShaderProgram","packed","unary_packed_op.LINEAR","unary_op.LINEAR","unary_packed_op.RELU","unary_op.RELU","unary_packed_op.ELU","unary_op.ELU","unary_packed_op.RELU6","unary_op.RELU6","binaryop_packed_gpu.PRELU","binaryop_gpu.PRELU","BEFORE_PAGING_CONSTANT","WeakSet","binaryCache","gpgpuCreatedLocally","textureManager","numMBBeforeWarning","screen","devicePixelRatio","MathBackendWebGL","cpuBackend","pendingDeletes","checkNumericalProblems","complexTensors","UnaryOpPackedProgram","unary_op.CLONE","UnaryOpProgram","runWebGLProgram","convertAndCacheOnCPU","shouldTimeProgram","activeTimers","util.now","getValuesFromTexture","downloadWaitMs","pendingRead","subscribers_1","tmpDownloadTarget","tmpData","createBufferFromTexture","tex_util.getDenseTexShape","createAndWaitForFence","ps","realValues","imagValues","dTypeVals","subscribers","pendingDisposal","webgl_util.canBeRepresented","tmpTarget","tmpData_1","vals_1","downloadMatrixFromPackedTexture","shouldUsePackedProgram","webgl_util.getShapeAs3D","EncodeFloatPackedProgram","EncodeFloatProgram","oldActiveTimers","newActiveTimers","outerMostTime","programTimersStack","flattenedActiveTimerQueries","util.flatten","flattenedActiveTimerNames","uploadWaitMs","kernelMs_1","util.sum","ms","numBytesInGPU","startMs","endMs","waitForQueryAndGetTime","timerQuery","releaseGPUData","origDataId","dataRefCount","computeBytes","releaseTexture","uploadToGPU","sizeThreshold","getCPUBackend","makeOutput","shouldExecuteOnCPU","isContinous","slice_util.isSliceContinous","customSetup","getCustomSetupFunc","compileAndRun","shallowSlice","xTexData","newTexData","slice_util.computeFlatOffset","slice_util.computeOutShape","StridedSliceProgram","ReversePackedProgram","ReverseProgram","reals","imags","midIndex","leftSide","rightSide","program_1","ConcatPackedProgram","tensors2D","as2D","ConcatProgram","packedUnaryOp","unary_op.NEG","outerShapeA","outerShapeB","a3D","as3D","b3D","MatMulPackedProgram","preluActivationWeights","hasBias","fusedActivation","aData","bData","realProgram","BinaryOpComplexProgram","binaryop_complex_gpu.COMPLEX_MULTIPLY","imagProgram","makeComplexComponentTensorInfo","complex_1","packedBinaryOp","binaryop_gpu.MUL","BinaryOpProgram","batchNormPackedProgram","BatchNormPackedProgram","batchNormProgram","BatchNormProgram","LRNPackedProgram","LRNProgram","LRNGradProgram","decodedData","TileProgram","PadPackedProgram","PadProgram","GatherProgram","array_ops_util.getReshaped","array_ops_util.getPermuted","array_ops_util.getReshapedPermuted","array_ops_util.getSliceBeginCoords","array_ops_util.getSliceSize","completePaddings","paddedX","reshapedPaddedShape","permutedReshapedPaddedPermutation","flattenShape","reduce_util.computeOptimalWindowSize","ReduceProgram","bestIndicesA","ArgMinMaxProgram","argReduce","ArgMinMaxPackedProgram","argReducePacked","axis_util.assertAxesAreInnerMostDims","a2D","outputDType","axis_util.getAxesPermutation","axis_util.getInnerMostAxes","segment_util.computeOutShape","segOpCompute","axis_util.getUndoAxesPermutation","segment_util.segOpComputeOptimalWindowSize","SegmentOpProgram","argMinMaxReduce","CumSumProgram","SelectProgram","BinaryOpPackedProgram","complexSeparableBinaryOp","binaryop_gpu.ADD","complexTensor","complexPart","addN","d1","d2","AddNPackedProgram","AddNProgram","binaryop_gpu.SUB","unary_op.CEIL","unary_op.FLOOR","unary_op.EXP","unary_op.EXPM1","util.parseAxisParam","maxLogit","expandedShape","axis_util.expandShapeToKeepDim","sumExp","unary_op.SELU","unary_op.ABS","xData","ComplexAbsProgram","unary_op.SIN","unary_op.COS","unary_op.ASIN","unary_op.ACOS","unary_op.ATAN","unary_op.ASINH","unary_op.ACOSH","unary_op.ATANH","unary_op.STEP","sharedMatMulDim","outerShapeX","outerShapeFilter","batchMatMulWillBeUnpacked","reshapeWillBeExpensive","targetShape_1","xReshaped_1","filterReshaped_1","fusedBatchMatMul","targetShape","xReshaped","originalXTexDataShape","webgl_util.isReshapeFree","filterReshaped","pointwiseConv","pointwiseConvTexData","x2ColShape","xSqueezed","w2Row","im2ColProgram","Im2ColPackedProgram","im2Col","matmulProgram","product","conv2dByMatMul","conv2dWithIm2Row","Conv2DProgram","Conv2DDerInputProgram","Conv2DDerFilterProgram","shouldPackDepthwiseConv","DepthwiseConvPacked2DProgram","DepthwiseConv2DProgram","DepthwiseConv2DDerInputProgram","DepthwiseConv2DDerFilterProgram","Conv3DProgram","Conv3DDerInputProgram","Conv3DDerFilterProgram","Pool2DProgram","maxPoolPositionsProgram","maxPoolPositions","maxPoolBackPropProgram","MaxPool2DBackpropProgram","avgPoolBackpropProgram","AvgPool2DBackpropProgram","backend_util.castTensor","outIndex","Pool3DProgram","avgPool3dBackpropProgram","AvgPool3DBackpropProgram","maxPool3dPositionsProgram","maxPool3dPositions","maxPool3dBackPropProgram","MaxPool3DBackpropProgram","packedReshape","backend_util.reshapeTensor","ResizeBilinearPackedProgram","ResizeBilinearProgram","ResizeBilinearBackpropProgram","ResizeNearestNeighborProgram","ResizeNearestNeigborBackpropProgram","probs","OneHotProgram","DiagProgram","CropAndResizeProgram","outputHeight","outputWidth","outputDepth","flattenIndices","flattenX","ScatterProgram","fftImpl","FFTProgram","fft_gpu.COMPLEX_FFT","numSlices","GatherNDProgram","backend_util.linspaceImpl","UnpackProgram","PackProgram","afterShape","input3DShape","webgl_util.getBatchDim","webgl_util.getRowsCols","input3D","afterShapeAs3D","ReshapePackedProgram","DecodeMatrixPackedProgram","DecodeMatrixProgram","outputDtype","preventEagerUnpackingOfOutput","makeTensorInfo","outData","packedOutput","outPackingScheme","tex_util.PackingScheme","texelShape","outTexUsage","dataToDispose","inputsData","packedInputs","uniformValues","unpackTensor","packTensor","savedInput","outputData","keyInputs","hasOffset","keyUserCode","gpgpu_math.makeShaderKey","binary","getAndSaveBinary","inputInfos","inShapeInfos","shader_compiler.makeShader","infLoc","nanLoc","uniformLocations","gpgpu_math.compileProgram","startTimer","outTex","setOutputPackedMatrixTexture","setOutputMatrixTexture","NaN","varLoc","varOffsetLoc","uniform1fv","setInputMatrixTexture","executeProgram","gpgpu_math.runProgram","endTimer","unpacked","outInfo","getBinary","HTMLCanvasElement","remove","floatPrecisionValue","debugFlag","underflowCheckValue","webgl_util.getTextureShapeFromLogicalShape","isByteArray","EncodeMatrixPackedProgram","EncodeMatrixProgram","tempDenseInputHandle","getTexture","encodedOutputTarget","outputTexData","acquireTexture","float32Values","float32ToTypedArray","texType","warnedAboutMemory","mb","define","Alea","me","mash","charCodeAt","next","s0","s1","s2","copy","impl","opts","xg","prng","double","quick","amd","alea","XorGen","strseed","z","xor128","xorwow","X","init","Date","xorshift7","limit","xor4096","tychei","math","nodecrypto","chunks","rngname","startdenom","significance","overflow","seedrandom","options","callback","shortseed","mixkey","prop","typ","entropy","tostring","randomBytes","crypto","msCrypto","getRandomValues","plugins","autoseed","arc4","ARC4","S","pass","is_math_call","keylen","count","smear","stringseed","fromCharCode","require","sr","addN_","firstTensor","warnDeprecation","xAs4D","as4D","batchNorm_","$scale","$offset","$mean","$variance","x4D","batchNormalization","as1DOr4D","batchNormalization_","batchNorm2d_","batchNormalization2d","batchNormalization2d_","batchNorm2d","batchNorm3d_","batchNormalization3d","batchNormalization3d_","batchNorm3d","batchNorm4d_","batchNormalization4d","batchNormalization4d_","batchNorm4d","broadcastTo","broadcastTo_","clone_","logicalAnd_","logicalNot_","logicalOr_","logicalXor_","where_","$condition","select","whereAsync","divNoNan","divNoNan_","divResult","bEqualsZero","tile_","eye","eye_","batchShape","buff","multinomial","multinomial_","origRank","logits2D","oneHot","oneHot_","$indices","pad_","pad1d","pad1d_","pad2d","pad2d_","pad3d","pad3d_","pad4d","pad4d_","rand","rand_","randFunction","TEST_EPSILON_FLOAT32","TEST_EPSILON_FLOAT16","testEpsilon","expectArraysPredicate","actual","expected","predicate","checkClassType","aType","bType","actualShape","expectedShape","actualFlat","expectedFlat","areClose","epsilon","fail","low","high","expect","toEqual","stdDeviation","truncated","stdDev","nextVal","upper","lower","seedValue","seedrandom.alea","MPRandGauss","resultX","resultY","isValid","v1","v2","isValidTruncated","convertValue","randu","randn","RandGamma","x2","v0","u","nextValue","canReturnFloat","UniformRandom","randomGamma","randomGamma_","rgamma","randomNormal","randomNormal_","randGauss","randomUniform","randomUniform_","minval","maxval","square_","squaredDifference_","two","truncatedNormal","truncatedNormal_","equal_","equalStrict_","greater_","greaterEqual_","greaterEqualStrict_","greaterStrict_","less_","lessEqual_","lessEqualStrict_","lessStrict_","notEqual_","notEqualStrict_","arrayRange","arrayConcat","arrays","gather_","collectGatherOpShapeInfo","paramsShape","indicesSize","outerShape","outerDims","innerShape","outerAxesIndices","innerAxesIndices","valuesShape","reshapedIndices","transposeDims","valuesTranspose","paramsGrad","invertTransposeDims","unsortedSegmentSum_","$segmentIds","zeroClippedIndices","gathered","isPositive","numIters","zeroSlice","gatherDropNegatives","booleanMaskAsync","$tensor","$mask","axisFrom","maskDim","tensorShape","leadingSize","targetTensorShape","reshapedTensor","reshapedMask","positivePositions","conv2dDerInput_","xShape4D","dy4D","reshapedTo4D","conv_util.convertConv2DDataFormat","conv_util.computeConv2DInfo","conv2dDerInput","ddx","conv2dDerFilter","conv3dDerInput_","xShape5D","dy5D","reshapedTo5D","as5D","conv_util.computeConv3DInfo","conv3dDerInput","conv1d_","$filter","x3D","reshapedTo3D","conv_util.eitherStridesOrDilationsAreOne","filter4D","input4D","conv2d_","conv_util.tupleValuesAreOne","conv3d","conv3d_","x5D","conv3dDerFilter","conv3dDerFilter_","conv2dDerFilter_","depthwiseConv2d_","depthwiseConv2D","depthwiseConv2dDerInput","depthwiseConv2dDerFilter","depthwiseConv2dDerInput_","depthwiseConv2DDerInput","depthwiseConv2dDerFilter_","depthwiseConv2DDerFilter","separableConv2d_","$depthwiseFilter","$pointwiseFilter","channelMultiplier","conv2dTranspose_","conv3dTranspose","conv3dTranspose_","matMul_","innerShapeA","innerShapeB","outerDimsA","outerDimsB","batchDimA","batchDimB","batchMatMul","dot_","t1","t2","$t1","$t2","t1Inner","t2Inner","asScalar","outerProduct","outerProduct_","$v1","$v2","reverse_","reshapeAs","reverse1d","reverse1d_","reverse2d","reverse2d_","reverse3d","reverse3d_","reverse4d","reverse4d_","maxPoolImpl_","conv_util.computePool2DInfo","$output","maxPoolBackprop","avgPoolImpl_","avgPoolBackprop","maxPool_","avgPool_","pool_","basePadding","padExtraShape","padExtraStart","padExtraEnd","withSpaceToBatchBasePaddings","isDilationOne","padStart","origPadEnd","fullInputShape","padEndExtra","padEnd","adjustedPadding","adjustedCrops","convertedPad","convertedX","maxPool3d","maxPool3d_","conv_util.computePool3DInfo","input5D","output5D","maxPool3dBackprop","avgPool3d","avgPool3d_","avgPool3dBackprop","maxPoolWithArgmax","maxPoolWithArgmax_","runKernel","indexes","slice_","begin_","size_","slice_util.assertParamsValid","slice1d","slice1d_","slice2d","slice2d_","slice3d","slice3d_","slice4d","slice4d_","gradForMinAndMax","xOrig","origAxes","permutedAxes","all_","any_","argMax_","argMin_","logSumExp_","max_","mean_","reduceSize","axis_util.computeOutAndReduceShapes","reduceSizeScalar","expandedDyShape","min_","moments","moments_","keepDimsShape","devSquared","sum_","reductionAxes","prod_","elu_","eluDer","leakyRelu_","prelu_","$alpha","relu_","relu6_","selu_","scaleAlpha","greaterThanZeroDer","lessEqualZeroDer","localResponseNormalization_","localResponseNormalization4D","LRNGrad","norm_","normImpl","basicLSTMCell","basicLSTMCell_","forgetBias","lstmKernel","lstmBias","$forgetBias","$lstmKernel","$lstmBias","$data","$c","$h","sliceCols","newC","newH","multiRNNCell","multiRNNCell_","lstmCells","newStates","movingAverage","movingAverage_","decay","zeroDebias","$v","$decay","one","oneMinusDecay","update","$step","stridedSlice_","expandAxes","shrinkAxes","topk_","scatterND","scatterND_","$updates","scatter_nd_util.validateInput","fft_","innerDimensionSize","input2D","ifft_","rfft_","fftLength","adjustedInput","zerosShape","zerosInput","complexInput","half","realComplexConjugate","imagComplexConjugate","irfft_","realInput","imagInput","realConjugate","imagConjugate","sparseToDense","sparseToDense_","$sparseIndices","$sparseValues","$defaultValue","defaultValues","numElems","numDims","numValues","sparse_to_dense.validateInput","gatherND","gatherND_","diag","diag_","dropout","dropout_","rate","noiseShape","$noiseShape","newDimension","getNoiseShape","keepProb","multiplier","cosineWindow","windowLength","even","newValues","cosArg","hannWindow","hannWindow_","hammingWindow","hammingWindow_","frame","frame_","signal","frameLength","frameStep","padValue","padLen","stft","stft_","windowFn","framedSignal","windowedSignal","Reduction","inTopKAsync","predictions","targets","$predictions","$targets","predictionsVals","targetsVals","precision","absoluteDifference","absoluteDifference_","labels","weights","reduction","SUM_BY_NONZERO_WEIGHTS","$labels","$weights","losses","computeWeightedLoss","computeWeightedLoss_","$losses","weightedLoss","NONE","SUM","MEAN","broadcastFactor","numNonZeros","cosineDistance","cosineDistance_","hingeLoss","hingeLoss_","huberLoss","huberLoss_","delta","deltaScalar","quadratic","linear","logLoss","logLoss_","epsilonScalar","meanSquaredError","meanSquaredError_","sigmoidCrossEntropy","sigmoidCrossEntropy_","multiClassLabels","labelSmoothing","$multiClassLabels","labelSmoothingScalar","maxOutput","outputXTarget","sigmoidOutput","sigmoidCrossEntropyWithLogits_","softmaxCrossEntropy","softmaxCrossEntropy_","onehotLabels","$onehotLabels","numClasses","lse","logResult","dyShape","softmaxCrossEntropyWithLogits_","qr2d","fullMatrices","m","q","one2D","iters","rTemp","wTemp","qTemp","bandPart","bandPart_","numLower","numUpper","M","N","ij","inBand","mat","gramSchmidt","gramSchmidt_","inputIsTensor2D","dim_1","ys","xs1d","proj","qr","qr_","outerDimsProd","prev","x2ds","q2ds_1","r2ds_1","x2d","q2d","r2d","nonMaxSuppSanityCheck","NEGATIVE_INFINITY","resizeBilinear_","images","$images","batchImages","resizeBilinearBackprop","resizeNearestNeighbor_","resizeNearestNeighborBackprop","nonMaxSuppression","nonMaxSuppression_","$boxes","$scores","nonMaxSuppressionAsync","boxesAndScores","boxesVals","scoresVals","nonMaxSuppressionWithScore","nonMaxSuppressionWithScore_","nonMaxSuppressionWithScoreAsync","cropAndResize","cropAndResize_","boxInd","$image","$boxInd","shouldFuse","getFusedDyActivation","getFusedBiasGradient","dyActivation","applyActivation","fusedMatMul_","_e","unfusedMatMul","$bias","$preluActivationWeights","biasGradient","fusedConv2d_","unfusedConv2d","fusedConv2d","fusedDepthwiseConv2d_","unfusedDepthwiseConv2d","fusedDepthwiseConv2D","assertNotComplex","xValues","POSITIVE_INFINITY","ops.buffer","outputVals","outputBatchStrides","outputRowStrides","outputColStrides","outputBatchOffset","inputBatchOffset","yR","xRCorner","xRMin","xRMax","outputRowOffset","yC","xCCorner","xCMin","xCMax","minMaxValue","avgValue","xR","xROffset","xC","pixel","maxPositions","maxValue","maxPosition","wR","wC","mapActivation","MathBackendCPU","firstUse","complex_util.mergeRealAndImagArrays","length_1","bufferSync","xLoc","ops.tensor","outLoc","inLoc","innerSize","offset_1","colOffset_1","tVals","tIdx","resIdx","finalOutShape","ops.scalar","broadcastedBinaryComplexOp","aReal","aImag","bReal","bImag","broadcastedBinaryOp","aValue","bValue","resultVals","currVals","leftDim","rightDim","aValues","bValues","aBatch","aOuterStep","aInnerStep","bInnerStep","bOuterStep","bBatch","resVals","b_1","i0","j0","k0","iBlock","jBlock","kBlock","reduceShape","ops.zeros","aVals","segmentId","ops.equal","ops.stack","minIndex","maxIndex","resultDtype","indexAdjuster","prevIdx","aVal","bVal","rem","anyVal","inVals","xValue","resultValues","dyValues","hypot","threshold","tooLarge","tooSmall","expX","util.tanh","xBatchStride","xRowStride","xColStride","xChannelStride","yBatchStride","yRowStride","yColStride","yChannelStride","wVals","xOffset1","yOffset1","yOffset2","wOffset1","xOffset2","yOffset3","xOffset3","wOffset3","xVal","yF","xFCorner","wF","xF","wOffset2","yOffset4","xOffset4","wOffset4","dxValues","fltValues","fltS0","fltS1","fltS2","topPad","leftPad","yRMax","yCMax","dotProd","dyOffset","fltOffset","dxS0","dxS1","dxS2","dxS3","dyS0","dyS1","dyS2","dyS3","fltS3","frontPad","xFMin","yFMax","dW","dyBuf","yRMin","yCMin","dw","dwValues","dwS0","dwS1","dwS2","dwS3","xS0","xS1","xS2","xS3","yFMin","chMul","dm","trunc","xBuffer","outCoords","indicesValues","maxPosBuf","dxR","dxC","dyRCorner","dyCCorner","dyR","dyC","outputDepthStrides","yDepth","xDepthCorner","xDepthMin","xDepthMax","outputDepthOffset","yRow","xRowCorner","xRowMin","xRowMax","yCol","xColCorner","xColMin","xColMax","outputColOffset","xDepth","xDepthOffset","xRow","xRowOffset","xCol","pool3d","dxDepth","dxRow","dxCol","dyDepthCorner","dyRowCorner","dyColCorner","wDepth","dyDepth","wRow","dyRow","wCol","dyCol","numChannels","effectiveInputSize","effectiveOutputSize","outputIdx","effectiveRowSizeRatio","effectiveColSizeRatio","sourceFracRow","sourceRowFloor","rowFrac","sourceRowCeil","topRowOffset","botRowOffset","sourceFracCol","sourceColFloor","colFrac","sourceColCeil","topLeftOffest","botLeftOffset","topRightOffset","botRightOffest","topLeft","bottomLeft","bOffset","topDxRIndex","bottomDxRIndex","topDxROffset","bottomDxROffset","dxRLerp","inverseDxRLerp","leftDxCIndex","rightDxCIndex","dxCLerp","inverseDxCLerp","topLeftRCOffset","topRightRCOffset","bottomLeftRCOffset","bottomRightRCOffset","inverseDxRLerpTimesInverseDxCLerp","inverseDxRLerpTimesDxCLerp","dxRLerpTimesInverseDxCLerp","dxRLerpTimesDxCLerp","dyVal","ops.tensor4d","outputOffset","batchOffset","rowOffset","colOffset","newVal","startRLerp","startDyR","startCLerp","startDyC","accum","dyRIndex","dyROffset","dyCIndex","dyCOffset","mVals","varVals","sVals","offVals","outVals","offValsLength","sValsLength","varValsLength","mValsLength","offi","mi","si","vi","sumAcrossChannels","currentChannel","beginSumOffset","endSumOffset","inputImageValues","outputImageValues","depthBegin","depthEnd","dyi","probabilities","ops.softmax","numEvents","probVals","cdf","event_1","sampleId","event_2","indicesVal","event_3","ops.tensor2d","fftBatch","realResult","imagResult","ops.real","ops.imag","ops.complex","complex_util.getComplexWithIndex","x1D","isExponentOf2","fftRadix2","complex_util.splitRealAndImagArrays","fourierTransformByMatmul","evenComplex","complex_util.complexWithEvenIndex","evenTensor","oddComplex","complex_util.complexWithOddIndex","oddTensor","complex_util.exponents","addPart","subPart","realTensor","imagTensor","complex_util.exponent","term","complex_util.assignToTypedArray","inH","offsetH","inW","offsetD","inputIdx","bVals","aBroadcastDims","broadcast_util.getBroadcastDims","bBroadcastDims","aBuf","bBuf","aLoc","aIndex","bLoc","bIndex","realVals","imagVals","aIdx","bIdx","aRealBuf","bRealBuf","opResult","boxVals","boxIndVals","imageVals","inStride","outStride","startInd","y1","x1","y2","bInd","yInd","ind","topInd","bottomInd","yLerp","xInd","leftInd","rightInd","xLerp","topRight","closestX","closestY","inInd","outInd","scatter","indicesData","flattenIndex","sumDupeIndices","updatesData","createBinaryKernelConfig","resultData","createBinaryKernelImpl","backend_util.assertAndGetBroadcastShape","resultRank","resultStrides","util.getTypedArrayFromDType","aRank","bRank","aStrides","bStrides","backend_util.getBroadcastDims","util.indexToLoc","util.locToIndex","divImpl","divConfig","maxPoolWithArgmaxConfig","maxPools","pooled","pooledDataId","indexesDataId","nonMaxSuppressionV5Config","squareConfig","squaredDifferenceImpl","transposeImpl","xSize","xRank","xStrides","newStrides","kernelConfigs_1","fromPixels2DContext","newDim","switched","originalOrder","switchedCoords","getSwitchedCoords","outputOrder","switchedOrder","getc","isVideo","HTMLVideoElement","isImage","HTMLImageElement","drawImage","tempPixelHandle","FromPixelsPackedProgram","FromPixelsProgram","binaryop_gpu.DIV","binaryop_packed_gpu.DIV","gpuBackend","webglBackend","webGLBackend","outValues","cpuTranspose","TransposePackedProgram","TransposeProgram","poolOutput","gradConfigs_1","ders","broadCastToAttrs","scaleValue","tileShape","xMinusMean","dyTimesScaleValue","oneOverSqrtVariance","minusHalfRCube","meanDer","varianceDer","xMinusMean2TimesRsqrt","scaleDer","offsetDer","xGrad","undoPerm","PlatformBrowser","performance","text","textEncoder","TextEncoder","TextDecoder","systemFetch","getNodeFetch","util","PlatformNode","hrtime","DTYPE_VALUE_SIZE_MAP","uint16","uint8","NUM_BYTES_STRING_LENGTH","decodeWeights","specs","spec","name_2","quantization_1","quantization","quantizationSizeFactor","byteBuffer","quantizedArray","size_1","byteLength","dtypeFactor","specs_1","concatenateTypedArrays","totalByteLength","normalizedXs","useNodeBuffer","Buffer","Blob","atob","btoa","stringByteLength","str","concatenateArrayBuffers","buffers","basename","trim","items","getModelArtifactsInfoForJSON","modelArtifacts","modelTopology","ArrayBuffer","dateSaved","modelTopologyType","modelTopologyBytes","weightSpecsBytes","weightSpecs","weightDataBytes","weightData","saveRouters","loadRouters","IORouterRegistry","saveRouter","getInstance","loadRouter","url","getHandlers","onProgress","handlerType","validHandlers","router","handler","URL_SCHEME_SUFFIX","managers","ModelStoreManagerRegistry","scheme","manager","parseURL","getSchemes","cloneModelInternal","sourceURL","destURL","deleteSource","loadHandlers","getLoadHandlers","loadHandler","saveHandlers","getSaveHandlers","saveHandler","sourceScheme","sourcePath","sameMedium","load","getManager","removeModel","saveResult","modelArtifactsInfo","MODEL_STORE_NAME","INFO_STORE_NAME","getIndexedDBFactory","theWindow","indexedDB","mozIndexedDB","webkitIndexedDB","msIndexedDB","shimIndexedDB","setUpDatabase","openRequest","db","createObjectStore","keyPath","modelPath","BrowserIndexedDB","databaseAction","open","onupgradeneeded","onsuccess","modelTx","transaction","getRequest_1","objectStore","close","onerror","oncomplete","modelTx_1","modelArtifactsInfo_1","infoTx_1","infoStore_1","putInfoRequest_1","put","putModelRequest","deleteInfoRequest","indexedDBRouter","startsWith","URL_SCHEME","registerSaveRouter","registerLoadRouter","BrowserIndexedDBManager","tx","getAllInfoRequest","getAll","infoTx","infoStore","getInfoRequest","deleteModelData_1","deleteModelRequest","registerManager","PATH_SEPARATOR","PATH_PREFIX","INFO_SUFFIX","MODEL_TOPOLOGY_SUFFIX","WEIGHT_SPECS_SUFFIX","WEIGHT_DATA_SUFFIX","MODEL_METADATA_SUFFIX","getModelKeys","topology","modelMetadata","getModelPathFromKey","localStorage","LS","BrowserLocalStorage","setItem","buf","arrayBufferToBase64String","format","generatedBy","convertedBy","userDefinedMetadata","removeItem","getItem","metadataString","metadata","weightDataBase64","byteOffset","base64StringToArrayBuffer","localStorageRouter","BrowserLocalStorageManager","prefix","suffix","DEFAULT_FILE_NAME_PREFIX","DEFAULT_JSON_EXTENSION_NAME","DEFAULT_WEIGHT_DATA_EXTENSION_NAME","defer","fileNamePrefix","BrowserDownloads","modelTopologyFileName","weightDataFileName","weightsURL","URL","createObjectURL","weightsManifest","paths","modelTopologyAndWeightManifest","modelTopologyAndWeightManifestURL","jsonAnchor_1","jsonAnchor","download","href","dispatchEvent","MouseEvent","weightDataAnchor_1","weightDataAnchor","files","BrowserFiles","jsonFile","weightFiles","jsonReader","FileReader","onload","event","modelJSON","pathToFile","checkManifestAndWeightFiles","perFileBuffers","weightsGroup","weightFileReader","readAsArrayBuffer","readAsText","manifest","basenames","fileNames","file","manifest_1","pathBasename","monitorPromisesProgress","promises","startFraction","endFraction","checkPromises","checkFraction","resolvedPromise","promise","fraction","loadWeightsAsArrayBuffer","fetchURLs","loadOptions","fetchFunc","requests","fetchURL","requestInit","isBinary","fetchStartFraction","fetchEndFraction","bufferPromises","response","arrayBuffer","bufferStartFraction","bufferEndFraction","weightsLoaderFactory","fetchWeightsFunction","filePathPrefix","weightNames","groupIndicesToFetchMap","groupWeightsToFetch","weightsFound","allManifestWeightNames","manifestGroupConfig","groupIndex","groupOffset","weightsEntry","rawDtype","weightsBytes","enqueueWeightsForFetchingFn","manifestEntry","sizeBytes","weightName","weightIndex","weightsNotFound","groupIndicesToFetch","accumulator","shouldFetch","fetchUrls","filepath","fetchUrl","weightsTensorMap","bufferIndexOffset","numBuffers","groupBytes","groupBuffer","groupByteBuffer","groupBufferOffset","i_2","nameToTensorMap","browserDownloads","weightPathPrefix","HTTPRequest","DEFAULT_METHOD","FormData","append","ok","responses","modelConfigRequest","json","modelConfig","loadWeights","results","weightPath","lastSlash","lastIndexOf","lastSearchParam","parseUrl","pathPrefix","weightsManifest_1","entry","isHTTPScheme","match","URL_SCHEME_REGEX","httpRouter","urlItem","http","PassthroughLoader","PassthroughSaver","group","dataPromises","names","utf8bytes","totalNumBytes","bytesOfLength","trainingConfig","loudRouter","schemes","schemes_1","listModels","schemeOut","schemeAndPath","confusionMatrix","confusionMatrix_","oneHotLabels","oneHotPredictions","fromPixels","fromPixels_","isPixelData","isImageData","isCanvasLike","ImageData","readyState","getImageData","numPixels","img","$img","minTensor","maxTensor","minVals","maxVals","Uint8ClampedArray","ctx","imageData","putImageData","Serializable","className","cls","classNameMap","SerializationMap","getMap","fromConfig","registerClass","register","Optimizer","returnCost","gradArray","applyGradients","iterations_","iterations","weightValues","getClassName","minimize","computeGradients","learningRate","rho","AdadeltaOptimizer","variableGradients","accumulatedGrads","originalName","accumulatedUpdates","accumulatedGrad","accumulatedUpdate","newAccumulatedGrad","newAccumulatedUpdate","incrementIterations","variables","saveIterations","extractIterations","variableCount","initialAccumulatorValue","AdagradOptimizer","beta1","beta2","accBeta1","accBeta2","AdamOptimizer","varNames","oneMinusAccBeta1","oneMinusAccBeta2","accumulatedFirstMoment","accumulatedSecondMoment","firstMoment","secondMoment","newFirstMoment","newSecondMoment","biasCorrectedFirstMoment","biasCorrectedSecondMoment","iteration","AdamaxOptimizer","lr","accumulatedWeightedInfNorm","weightedInfNorm","ut0","ut1","newWeightedInfNorm","setLearningRate","SGDOptimizer","momentum","useNesterov","MomentumOptimizer","accumulations","accumulation","newAccumulation","centered","RMSPropOptimizer","accumulatedMeanSquares","accumulatedMoments","accumulatedMeanGrads","accumulatedMeanSquare","newAccumulatedMeanSquare","accumulatedMeanGrad","newAccumulatedMeanGrad","newAccumulatedMoments","newAccumulatedMeanSquare_1","OptimizerConstructors","train","sgd","adadelta","adagrad","rmsprop","adamax","adam","delayCallback","requestAnimationFrame","setImmediate","nextFrame","ops","_epsilon","imageDataFormat","setPrototypeOf","AttributeError","RuntimeError","ValueError","NotImplementedError","AssertionError","IndexError","pyListRepeat","newArray","refernce","array_1","singletonOrArray","toList","toSnakeCase","insecure","toCamelCase","identifier","p1","_GLOBAL_CUSTOM_OBJECTS","serializeKerasObject","undefined","dict","getConfig","convertNDArrayScalarsInConfig","configItem","fields_1","field","deserializeKerasObject","moduleObjects","customObjects","printableModuleName","fastWeightInit","customObjectsCombined","_f","backupCustomObjects","_h","_g","returnObj","_k","_j","numberCompare","reverseNumberCompare","unique","xs_1","isObjectEmpty","hasOwnProperty","checkStringTypeUnionValue","label","checkArrayTypeAndLength","expectedType","minLength","maxLength","assertPositiveInteger","formatAsFriendlyString","debounce","waitMs","lastResult","lastTime","mapActivationToFusedKernel","activationName","calcL2Norms","tfc.sqrt","tfc.sum","tfc.mulStrict","Constraint","serialization","defaultMaxValue","defaultAxis","MaxNorm","norms","desired","tfc.clipByValue","tfc.mul","tfc.div","tfc.add","UnitNorm","NonNeg","tfc.relu","minValue","defaultMinValue","defaultRate","MinMaxNorm","CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP","maxNorm","minMaxNorm","nonNeg","unitNorm","serializeConstraint","constraint","deserializeConstraint","getConstraint","VALID_DATA_FORMAT_VALUES","VALID_PADDING_MODE_VALUES","VALID_POOL_MODE_VALUES","VALID_BIDIRECTIONAL_MERGE_MODES","nameMap","checkDataFormat","checkPaddingMode","checkPoolMode","_nameScopeStack","_nameScopeDivider","nameScope","currentNameScopePrefix","getScopedTensorName","tensorName","isValidTensorName","getUniqueTensorName","scopedName","tensorNameRegex","RegExp","parseInt","arrayProd","toArray1D","tfc.min","tfc.max","math_utils.arrayProd","batchFlatten","sliceAlongFirstAxis","tfc.slice1d","tfc.slice2d","tfc.slice3d","tfc.slice4d","tfc.slice","sliceAlongLastAxis","sliceAlongAxis","concatenate","tfc.concat","concatAlongFirstAxis","tfc.concat1d","tfc.concat2d","tfc.concat3d","tfc.concat4d","tfc.tile","stddev","tfc.randomNormal","ySecondLastDim","tfc.fused","reshapeBias","aFirstDims","aLastDim","bLastDim","yOtherDims","reference","tfc.gather","biasShape","biasAdd","tfc.elu","softsign","tfc.abs","level","tfc.dropout","hardSigmoid","inTrainPhase","alt","training","VALID_FAN_MODE_VALUES","VALID_DISTRIBUTION_VALUES","checkFanMode","checkDistribution","Initializer","Zeros","Ones","Constant","DEFAULT_MINVAL","DEFAULT_MAXVAL","RandomUniform","DEFAULT_MEAN","DEFAULT_STDDEV","RandomNormal","K.randomNormal","TruncatedNormal","gain","computeFans","fanIn","fanOut","receptiveFieldSize","mode","distribution","VarianceScaling","fans","GlorotUniform","GlorotNormal","HeNormal","HeUniform","LeCunNormal","LeCunUniform","DEFAULT_GAIN","Orthogonal","linalg","INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP","constant","glorotNormal","glorotUniform","heNormal","heUniform","identity","leCunNormal","leCunUniform","orthogonal","varianceScaling","deserializeInitializer","serializeInitializer","initializer","getInitializer","_nextUniqueTensorId","getNextUniqueTensorId","_uidPrefixes","getUid","isArrayOfShapes","normalizeShapeList","getExactlyOneTensor","getExactlyOneShape","countParamsInWeights","weights_1","DEFAULT_VARIABLE_NAME_PREFIX","trainable_","tfc.variable","LayerVariable","assertNotDisposed","checkShapesMatch","batchGetValue","batchSetValue","variablesAndValues","variableAndValue","ndim","maxNDim","minNDim","sourceLayer","callArgs","outputTensorIndex","_nextNodeID","outboundLayer","inboundLayers","nodeIndices","tensorIndices","inputTensors","outputTensors","inputMasks","outputMasks","layer","outboundNodes","inboundNodes","Node","inboundNames","_nextLayerID","activityRegularizer","inputSpec","supportsMasking","_trainableWeights","_nonTrainableWeights","_losses","_updates","_built","generic_utils.toSnakeCase","batchInputShape","inputDType","initialWeights","_refCount","fastWeightInitDuringBuild","Layer","nodeIndex","attrName","generic_utils.singletonOrArray","getNodeAtIndex","lossFn","built","trainableWeights","nonTrainableWeights","_stateful","stateful","generic_utils.toList","inputIndex","xShapeAtAxis","specDim","kwargs","_callHook","callHook","inputsList","allAreSymbolic","inputsList_1","SymbolicTensor","noneAreSymbolic","inputsList_2","assertInputCompatibility","xElem","build","setWeights","outputListCopy","outputList_1","collectInputShape","computeOutputShape","outputDType_1","guessOutputDType","warnOnIncompatibleInputShape","addInboundNode","dimMismatch_1","dimension","allOutputShapes","shapeString","variable_utils.countParamsInWeights","trainableOnly","weightValueTuples","paramValues","pv","regularizer","_addedWeightNames","initValue","addLoss","TypeError","maskElement","inputTensorList","types_utils.normalizeShapeList","inputTensorList_1","tensorIndex","numDisposedVariables","disposeWeights","refCountAfterDispose","inputTensors_1","getSourceInputs","sourceTensors","previousSources_1","x_1","ModelLoggingVerbosity","sparse","inputTensor","InputLayer","Input","resolveScalarsInLogs","logs","scalarsToDispose","valueScalar","disposeTensorsInLogs","DEFAULT_YIELD_EVERY_MS","BaseCallback","epoch","model","callbacks","queueLength","CallbackList","setParams","setModel","onEpochBegin","onEpochEnd","onBatchBegin","onBatchEnd","onTrainBegin","onTrainEnd","BaseLogger","totals","this_1","oldTotalsToDispose","this_2","History","history","valueArray","yieldEvery","onYield","maybeWait","generic_utils.debounce","bind","trainBegin","trainEnd","epochBegin","epochEnd","batchBegin","batchEnd","yield","CustomCallback","currentEpoch","standardizeCallbacks","callbackConfig","CallbackConstructorRegistry","verbosityLevel","callbackConstructor","checkForDuplicate","constructors","levelName","ctor","configureCallbacks","epochs","initialEpoch","numTrainSamples","stepsPerEpoch","doValidation","callbackMetrics","actualCallbacks","createCallbacks","callbackList","samples","steps","metrics","deserialize","l2Normalize","squareSum","K.square","epsilonTensor","tfc.fill","tfc.maximum","yTrue","yPred","tfc.mean","tfc.sub","meanAbsoluteError","meanAbsolutePercentageError","clippedTrue","MAX_VALUE","absResult","meanSquaredLogarithmicError","clippedPred","firstLog","tfc.log","secondLog","squaredHinge","maxResult","hinge","categoricalHinge","pos","logcosh","log2","predictionDiff","logcoshResult","tfc.softplus","categoricalCrossentropy","fromLogits","tfc.softmax","outputSum","tfc.neg","sparseCategoricalCrossentropy","flatTarget","tfc.floor","K.flatten","tfc.oneHot","sigmoidCrossEntropyWithLogits","reluLogits","negAbsLogits","binaryCrossentropy","kullbackLeiblerDivergence","poisson","logPred","cosineProximity","trueNormalized","predNormalized","trueXPred","lossesMap","identifierOrFn","errMsg","includes","binaryAccuracy","tfc.onesLike","yPredThresholded","K.cast","tfc.greater","tfc.equal","categoricalAccuracy","tfc.argMax","truePositives","tfc.logicalAnd","falseNegatives","falsePositives","tp","fp","denominator","tfc.where","recall","lossBinaryCrossentropy","sparseCategoricalAccuracy","mse","MSE","mae","MAE","mape","MAPE","categoricalCrossentropyLoss","cosine","sparseCategoricalCrossentropyLoss","metricsMap","getLossOrMetricName","fnName","getOptimizer","optimizerMap","Adagrad","Adadelta","Adam","Adamax","RMSProp","SGD","MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH","checkUserDefinedMetadata","modelName","checkSize","getPrototypeOf","plainObjectCheck","keys_1","xType","printSummary","lineLength","positions","printFn","relevantNodes","sequentialLike","isModelSequentialLike","toDisplay","nodesByDepth","printRow","layers","printLayerSummary","printLayerSummaryWithConnections","checkTrainableWeightsConsistency","trainableCount","countTrainableParams","nonTrainableCount","collectedTrainableWeights","nodes","nodesByDepth_1","depthNodes","flag","countParams","connections","inboundLayer","inboundLayerIndex","inboundTensorIndex","firstConnection","isArrayItemInputOrOutputName","convertPythonicToTs","pythonicConfig","generic_utils.toCamelCase","tsArray","arrayLength","tsDict","pythonicKey","pythonicValue","tsKey","convertTsToPythonic","tsConfig","pyArray","pyDict","tsValue","pyKey","assertFeedCompatibility","feeds","FeedDict","id2Value","id2Mask","feeds_1","feed","name2Id","cachedSorted","cachedRecipientCounts","execute","fetches","feedDict","probe","arrayFetches","fetchArray","outputNames","finalOutputs","feedNames","outputNames_1","outputName","getValue","maxNumTensors","minNumTensors","recipientCounts","fetchAndFeedKey","getTopologicalSortAndRecipientCounts","internalFeedDict","symbolic","srcLayer","inputValues","tensorsToDispose","maskExists","getMask","hasKey","outputMask","computeMask","layerOutputs","getNodeOutputs","outputSymbolicTensors","disposeMasks","finalSorted","finalRecipientMap","getTopologicalSortAndRecipientCountsForOneFetch","recipientMap","visited","fetches_1","sorted_1","symbolicTensor","recipient","recipientMap2Counts","marks","topIsMarked","getOutputAt","generic_utils.unique","inputLayers","inputLayersNodeIndices","inputLayersTensorIndices","outputLayers","outputLayersNodeIndices","outputLayersTensorIndices","internalContainerRefs","generic_utils.assert","inputNames","feedInputShapes","feedInputNames","feedOutputNames","internalInputShapes","internalOutputShapes","nodesDepths","nodeIDToNode","layersDepths","layerIDToLayer","layerIndices","nodesInDecreasingDepth","buildMapOfGraph","finishedNodes","nodesInProgress","containerNodes","Container","nodeKey","numInboundLayers","layer_1","nodeIndex_1","tensorIndex_1","reversedNodesInDecreasingDepth_1","previousDepth","inboundNode","previousDepth_1","nodeID","layersByDepth","layerID","depthKeys","generic_utils.reverseNumberCompare","depthKeys_1","layersForDepth","layersForDepth_1","computableTensors","layersWithCompleteInput","depthKeys_2","_l","_o","_m","_q","_p","_s","_r","allNames","numOccurrences","allNames_1","_t","strict","nameToWeight","totalWeightsCount","unsetNames","name_3","theConfig","layersVersion","unused","returnString","updatedConfig","masks","generic_utils.pyListRepeat","runInternalGraph","layersToOutputShapes","inputShape_1","depthKeys_3","nodes_1","inputShapes_1","nodeIndex_2","inputShape_2","outputShapes_1","outputShapeKeys","tensorMap","depthKeys_4","nodes_2","referenceInputTensors","referenceOutputTensors","computedData","referenceInputTensors_1","computedTensors","computedMasks","outputTensors_1","outputMasks_1","computedTensor","computedMask","keptNodes","nodeConversionMap","originalNodeIndex","calculateLosses","buildNodeConversionMap","layerConfigs","layerClassName","layerConfig","filteredInboundNodes","nodeData","newNodeIndex","modelInputs","modelOutputs","createdLayers","unprocessedNodes","addUnprocessedNode","processNode","nodeData_1","inputData","inboundLayerName","inboundNodeIndex","processLayer","layerData","layerName","deserializeLayer","setFastWeightInitDuringBuild","layersFromConfig","layersFromConfig_1","generic_utils.isObjectEmpty","layersFromConfig_2","currentUnprocessedNodesForLayer","currentUnprocessedNodesForLayer_1","inputLayersFromConfig_1","layerOutputTensors","outputLayersFromConfig_1","resetStates","standardizeSampleOrClassWeights","xWeight","weightType","numOutputs","output_1","standardizeClassWeights","classWeight","standardizeWeights","sampleWeight","sampleWeightMode","yClasses","yClassIndices","classSampleWeight_1","classIndex","sampleWeights","DEFAULT_VALIDATION_BATCH_SIZE","standardizeDataIteratorOutput","iteratorOut","iteratorOutObj","tfc.util","flattenedXs","flattenTensorOrArrayOrMap","flattenedYs","xIndex","yIndex","inputOrOutput","tfc.Tensor","names_1","standardizeTensorValidationData","fitDataset","dataset","hasBatchesPerEpoch","batchesPerEpoch","optimizer","isTraining","validationData","valXs","valYs","isDatasetObject","validationBatches","trainFunction","makeTrainFunction","outLabels","getDedupedMetricsNames","getStepsPerEpoch","history_1","stopTraining_","iterator","dataIterator","epochLogs","stepsDone","batchIndex","batchLogs","standardClassWeights","ins","tfc.dispose","tfc.keep","valOuts","evaluateDataset","evaluate","validationBatchSize","metricsNames","syncData","isLazyIteratorObject","hasBatches","testFunction","numExamples","tfc.tidy","xsAndYs_1","batchOuts","batchSize_1","batchOut","oldScalar","checkBatchSize","sliceArrays","sliceArraysByIndices","makeBatches","batchStart","fitLoop","valF","valIns","validationSteps","checkNumSamples","indexArray","epochIndexArray1D_1","batches_1","batchIds","insBatch","testLoop","fitTensors","checkBatchAxis","standardizeUserData","standardizedOuts","inputValX","inputValY","checkBatchAxis_1","valStandardized","valX","valY","validationSplit","splitAt","originalBatchSize","valFunction","makeTestFunction","disposeNewTensors","ensureTensorsRank2OrHigher","refTensors","oldTensorIds","oldTensor","isDataTensor","isDataArray","isDataDict","standardizeInputData","exceptionPrefix","gotUnexpectedData","refDim","checkArrayLengths","setX","setY","checkLossAndTargetCompatibility","lossFns","keyLosses","losses.meanSquaredError","losses.binaryCrossentropy","losses.categoricalCrossentropy","loss","slicedYShape","slicedShape","targetDim","checkInputData","collectMetrics","wrappedMetrics","nestedMetrics","outputMetrics","LAYERS_MODEL_FORMAT_NAME","LayersModel","optimizer_","optimizers.getOptimizer","isOptimizerOwned","lossFunctions","theLosses","losses.get","lossFunction_1","name_4","feedOutputShapes","feedLossFns","name_5","skipTargetIndices","metricsTensors","metricName","accFn","weightedMetricFn","metric","Metrics.binaryAccuracy","Metrics.binaryCrossentropy","losses.sparseCategoricalCrossentropy","Metrics.sparseCategoricalAccuracy","Metrics.sparseCategoricalCrossentropy","Metrics.categoricalAccuracy","Metrics.categoricalCrossentropy","metricFn","Metrics.get","Metrics.getLossOrMetricName","metricResult","outputIndex","metricTensor","appendMetric","metrics_1","handleMetrics","standardizeUserDataXY","stepsName","outputsIsArray","retrieveSymbolicTensors","tensorValue","executeOutputs","symbolicTensorNames","outputsRemaining","layerOutputNames","remainingNames_1","outsBatches","xsRank2OrHigher","predictLoop","standardXs","standardYs","standardSampleWeights","classWeights","K.sliceAlongFirstAxis","dedupedOutLabels","newLabel","lossValues","metricsValues","totalLoss","lossFunction","meanLoss","weightedMetric","regularizerLoss","valOutputs","meanMetric","standardizeOut","losses_1","namedWeights","getWeights","numTensorsBeforeOptmizerDisposal","tfc.memory","lossNames","losses_2","outputNames_2","metricsIdentifiers","getLossIdentifiers","getMetricIdentifiers","optimizer_config","class_name","weighted_metrics","loss_weights","sample_weight_mode","lossEntry","compile","handlerOrURL","handlers","io","encodeWeights","getNamedWeights","weightDataAndSpecs","unusedArg","toJSON","includeOptimizer","getTrainingConfig","optimizerWeightData","optimizerWeightSpecs","modelFromJSON","modelAndWeightsConfig","uniqueWeightValues","loadLayersModelInternal","pathOrIOHandler","browserHTTPRequest","loadLayersModelFromIOHandler","artifacts","loadTrainingConfig","setUserDefinedMetadata","decodeModelAndOptimizerWeights","modelWeights","optimizerWeights","name2Tensor","Sequential","modelLayer","isLayerModelInstance","checkShape","outputTensor","lastLayerIndex","summary","predict","predictOnBatch","fit","trainOnBatch","configArray","extraModelConfig","configArray_1","stopTraining","sequential","loadLayersModel","registerCallbackConstructor","Activation","Elu","K.elu","Selu","tfc.selu","Relu","Relu6","tfc.minimum","Linear","Sigmoid","tfc.sigmoid","HardSigmoid","K.hardSigmoid","Softplus","Softsign","K.softsign","Tanh","tfc.tanh","Softmax","LogSoftmax","tfc.logSoftmax","serializeActivation","deserializeActivation","getActivation","assertObjectArgs","l1","l2","hasL1","hasL2","L1L2","regularization","Regularizer","REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP","l1l2","serializeRegularizer","deserializeRegularizer","getRegularizer","ReLU","baseConfig","DEFAULT_ALPHA","LeakyReLU","alphaInitializer","DEFAULT_ALPHA_INITIALIZER","alphaRegularizer","alphaConstraint","sharedAxes","PReLU","paramShape","addWeight","InputSpec","theta","DEFAULT_THETA","ThresholdedReLU","softmaxActivation","DEFAULT_AXIS","normalizeArray","singleValue","convOutputLength","inputLength","outputLength","deconvLength","strideSize","kernelSize","preprocessConv2DInput","tfc.transpose","preprocessConv3DInput","conv1dWithBias","tfc.conv1d","K.biasAdd","conv2dWithBiasActivation","conv3dWithBias","tfc.conv3d","BaseConv","verifyArgs","generic_utils.assertPositiveInteger","useBias","biasInitializer","DEFAULT_BIAS_INITIALIZER","biasConstraint","biasRegularizer","generic_utils.checkArrayTypeAndLength","Conv","filters","kernelInitializer","DEFAULT_KERNEL_INITIALIZER","kernelConstraint","kernelRegularizer","channelAxis","inputDim","kernelShape","biasValue","fusedActivationName","generic_utils.mapActivationToFusedKernel","newSpace","space","Conv2D","Conv3D","Conv2DTranspose","hAxis","wAxis","kernelH","kernelW","strideH","strideW","tfc.conv2dTranspose","heightAxis","widthAxis","depthMultiplier","depthwiseInitializer","DEFAULT_DEPTHWISE_INITIALIZER","depthwiseRegularizer","depthwiseConstraint","pointwiseInitializer","DEFAULT_POINTWISE_INITIALIZER","pointwiseRegularizer","pointwiseConstraint","SeparableConv","depthwiseKernelShape","pointwiseKernelShape","depthwiseKernel","pointwiseKernel","tfc.separableConv2d","SeparableConv2D","Conv1D","cropping","Cropping2D","K.sliceAlongAxis","DEFAULT_SIZE","UpSampling2D","resized","tfc.depthwiseConv2d","DepthwiseConv2D","outFilters","outRows","outCols","Dropout","invokeCallHook","noiseShape_1","K.inTrainPhase","K.dropout","SpatialDropout1D","units","Dense","inputLastDim","K.dot","Flatten","K.batchFlatten","RepeatVector","K.repeat","isUnknown","Reshape","errorMsg","finalShape","known","unknown","originalSize","anyUnknownDims","fixUnknownDimension","expectedSortedIndices","dimsIncludingBatch","Permute","maskValue","Masking","booleanMask","outputDim","embeddingsInitializer","DEFAULT_EMBEDDINGS_INITIALIZER","embeddingsRegularizer","embeddingsConstraint","maskZero","Embedding","embeddings","inLens","K.gather","Merge","computeElementwiseOpOutputShape","batchSizes","allRanks","reshapeRequired","reshapedInputs","inputDims","mathUtils.max","inputs_1","xNDim","K.expandDims","mergeFunction","transposed","inputs_2","xTransposed","mathUtils.arrayProd","mathUtils.range","yNDim","yShape","tfc.expandDims","Multiply","Average","Maximum","Minimum","Concatenate","allNoneShape","inputShape_3","shapeSet","shapeWithoutConcatAxis","exists","shapeSet_1","K.concatenate","allNullMasks","concatenatedMasks","tfc.all","interpretAxis","batchDot","axesArray","diffShape","adjX","adjY","squeezeAxes","normalize","Dot","interpretAxes","GaussianNoise","GaussianDropout","AlphaDropout","_getNoiseShape","alphaP","keptIdx","gamma","tfc.batchNorm2d","tfc.batchNorm3d","tfc.batchNorm4d","regularNormalizeBatchInTraining","meanAndVariance","tfc.moments","broadcastNormalizeBatchInTraining","math_utils.range","broadcastMean","broadcastVariance","broadcastGamma","broadcastBeta","normalizeBatchInTraining","center","betaInitializer","gammaInitializer","movingMeanInitializer","movingVarianceInitializer","betaConstraint","gammaConstraint","betaRegularizer","gammaRegularizer","BatchNormalization","movingMean","movingVariance","broadcastShape","sortedReductionAxes","needsBroadcasting","broadcastMovingMean","broadcastMovingVariance","normalizeInference","normedTraining","doMovingAverage","origValue","updateDelta","LayerNormalization","nDims","broadcast","momentsTiling","scaleOffsetTiling","spatial2dPadding","pattern","tfc.pad","heightPadding","widthPadding","ZeroPadding2D","pool2d","poolSize","poolMode","paddingString","tfc.maxPool","tfc.avgPool","tfc.maxPool3d","tfc.avgPool3d","Pooling1D","poolingFunction","tfc.squeeze","MaxPooling1D","AveragePooling1D","Pooling2D","MaxPooling2D","AveragePooling2D","Pooling3D","depths","MaxPooling3D","AveragePooling3D","GlobalPooling1D","GlobalAveragePooling1D","GlobalMaxPooling1D","GlobalPooling2D","GlobalAveragePooling2D","GlobalMaxPooling2D","standardizeArgs","initialState","constants","numConstants","toListOrNull","rnn","stepFunction","initialStates","goBackwards","unroll","needPerStepOutputs","tfc.reverse","lastOutput","perStepMasks","perStepOutputs","states","timeSteps","perStepInputs","tfc.unstack","currentInput","stepOutputs","maskedOutputs","stepMask","negStepMask","tfc.stack","cell","StackedRNNCells","cells","stateSize","returnSequences","returnState","stateSpec","states_","keptStates","RNN","stateShape","stateSize_1","stateMask","numStates","stepInputShape","tfc.zeros","standardized","additionalInputs","additionalSpecs","initialState_1","fullInput","fullInputSpec","originalInputSpec","getInitialState","cellCallKwargs","rnnOutputs","K.tile","cellConfig","DEFAULT_ACTIVATION","recurrentInitializer","DEFAULT_RECURRENT_INITIALIZER","recurrentRegularizer","recurrentConstraint","math_utils.min","math_utils.max","recurrentDropout","dropoutMask","recurrentDropoutMask","SimpleRNNCell","recurrentKernel","prevOutput","generateDropoutMask","dpMask","recDpMask","RNNCell","SimpleRNN","recurrentActivation","DEFAULT_RECURRENT_ACTIVATION","implementation","GRUCell","hTMinus1","hh","matrixX","recurrentKernelValue","rk1","rk2","matrixInner","xZ","xH","recurrentZ","recurrentR","recurrentH","GRU","unitForgetBias","LSTMCell","capturedBiasInit_1","capturedUnits_1","CustomInit","bI","bF","bCAndH","K.concatAlongFirstAxis","cTMinus1","z0","z1","z2","z3","LSTM","nestedStates","callInputs","newNestedStates","cellStates","cellConfigs","tuples","numParams","inputWeights","droppedInputs","Wrapper","newConfig","TimeDistributed","childInputShape","childOutputShape","timesteps","checkBidirectionalMergeMode","generic_utils.checkStringTypeUnionValue","DEFAULT_BIDIRECTIONAL_MERGE_MODE","forwDict","forwardLayer","backDict","backwardLayer","mergeMode","_trainable","Bidirectional","numWeights","numeightsOver2","layerShapes","stateSpecs","isSymbolicTensor","additionalInputs_1","yRev","forwardState","backwardState","rnnLayer","inputLayer","reLU","leakyReLU","thresholdedReLU","cropping2D","upSampling2d","dense","spatialDropout1d","repeatVector","permute","embedding","average","layerNormalization","zeroPadding2d","averagePooling1d","avgPool1d","avgPooling1d","averagePooling2d","avgPool2d","avgPooling2d","averagePooling3d","avgPooling3d","globalAveragePooling1d","globalAveragePooling2d","globalMaxPooling1d","globalMaxPooling2d","maxPooling1d","maxPooling2d","maxPooling3d","gru","gruCell","lstm","lstmCell","simpleRNN","simpleRNNCell","stackedRNNCells","bidirectional","timeDistributed","globalMaxPool1d","globalMaxPool2d","maxPool1d","maxPool2d","gaussianNoise","gaussianDropout","alphaDropout","masking","metrics.binaryAccuracy","metrics.binaryCrossentropy","metrics.sparseCategoricalAccuracy","metrics.categoricalAccuracy","metrics.categoricalCrossentropy","metrics.precision","metrics.recall","losses.cosineProximity","losses.meanAbsoluteError","losses.meanAbsolutePercentageError","regularizers.l1","regularizers.l2","Callback","currVal","prevVal","restoreBestWeights","monitor","minDelta","patience","baseline","monitorFunc","EarlyStopping","wait","stoppedEpoch","best","current","getMonitorValue","monitorValue","earlyStopping","DataType","SaverDef","CheckpointFormatVersion","CUSTOM_OPS","registerOp","opFunc","opMapper","tfOpName","category","customExecutor","getRegisteredOp","deregisterOp","getParamValue","paramName","context","inputParam","inputParams","inputIndexStart","inputIndexEnd","getTensor","attrParam","attrParams","tensorsMap","nodeName","contextId","currentContextIds","find","getNodeNameWithContextId","getTensorsForCurrentContenxt","currentContextId","getNodeNameAndIndex","parseNodeName","tfName","notSupported","tfDeprecatedName","arithmetic","basicMath","control","convolution","creation","dynamic","evaluation","logical","graph","matrices","normalization","sliceJoin","transformation","mappersJson","opMappers","mapper","OperationMapper","_instance","signature","placeholders","mapNode","inputNodeNameToKey","outputNodeNameToKey","mapSignatureEntries","allNodes","children","signatureKey","curr","newNode","rawAttrs","getStringParam","getStringArrayParam","getNumberParam","getNumericArrayParam","getBoolParam","getBoolArrayParam","getTensorShapeParam","getTensorShapeArrayParam","getDtypeParam","getDtypeArrayParam","decodeBase64","parseStringParam","keepCase","def","parseDtypeParam","tensorflow.DataType","DT_FLOAT","DT_INT32","DT_INT64","DT_INT8","DT_UINT8","DT_BOOL","DT_DOUBLE","DT_STRING","parseTensorShapeParam","unknownRank","getInput","getAttr","NodeValueImpl","executeOp","tfc.addN","tfc.mod","tfc.divNoNan","tfc.floorDiv","tfc.pow","tfc.squaredDifference","tfc.acos","tfc.acosh","tfc.asin","tfc.asinh","tfc.atan","tfc.atan2","tfc.atanh","tfc.ceil","tfc.complex","tfc.cos","tfc.cosh","tfc.erf","tfc.exp","tfc.expm1","tfc.log1p","tfc.imag","tfc.reciprocal","tfc.real","tfc.round","tfc.sin","tfc.sign","tfc.sinh","tfc.square","tfc.tan","tfc.rsqrt","tfc.prod","tfc.leakyRelu","tfc.prelu","maxSize","elementShape","identicalElementShapes","dynamicSize","clearAfterRead","TensorArray","nextId","closed_","tensorWithState","cleared","assertShapesMatchAllowUndefinedSize","written","readMany","writeMany","totalLength","cumulativeLengths","elementPerRow","indices_1","sizes","shapesEqualAllowUndefinedSize","pred","data_1","frameId","enterFrame","exitFrame","nextIteration","tensorArray","addTensorArray","writeTensor","getTensorArray","readId","readIndex","gatherId","gatherIndices","gatherDtype","scatterId","scatterIndices","scatterTensor","concatId","concatTensorArray","concatDtype","splitId","splitTensor","lengths","sizeId","sizeTensorArray","closeId","clearAndClose","tfc.conv2d","extraOp","activationFunc","isBiasAdd","isPrelu","isBatchNorm","numArgs","biasArg","preluArg","stop_1","tfc.linspace","tfc.multinomial","tfc.ones","tfc.randomUniform","stop_2","tfc.range","tfc.truncatedNormal","tfc.zerosLike","tfc.image","tfc.whereAsync","tfc.setdiff1dAsync","tfc.topk","tfc.tensor1d","tfc.scalar","summarize","tfc.notEqual","tfc.greaterEqual","tfc.less","tfc.lessEqual","tfc.logicalNot","tfc.logicalOr","tfc.matMul","tfc.batchNorm","tfc.localResponseNormalization","tfc.sparseToDense","tfc.any","tfc.argMin","tfc.stridedSlice","mapped","sameShape","tfc.split","tfc.scatterND","tfc.gatherND","tfc.fft","tfc.ifft","tfc.rfft","tfc.irfft","tfc.cast","tfc.reshape","tfc.spaceToBatchND","tfc.batchToSpaceND","tfc.depthToSpace","arithmetic.executeOp","basicMath.executeOp","control.executeOp","convolution.executeOp","creation.executeOp","dynamic.executeOp","evaluation.executeOp","image.executeOp","graph.executeOp","logical.executeOp","matrices.executeOp","normalization.executeOp","reduction.executeOp","sliceJoin.executeOp","spectral.executeOp","transformation.executeOp","weightMap","tensorArrayMap","frameName","iterationId","rootContext","generateCurrentContextIds","ExecutionContext","_currentContextIds","contextIdforContexts","lastId","newFrame","getExecutionSubgraph","usedNodes","missingInputs","dynamicNode","syncInputs","inputNodeNames","frontier","isControlFlow","isDynamicShape","child","getNodesInTopologicalOrder","executionInfo","orderedNodes","CONTROL_FLOW_OPS","DYNAMIC_SHAPE_OPS","_outputs","_inputs","_signature","GraphExecutor","_weightMap","weightIds","sortedInputs","sortedOutputs","SEPERATOR","outNames","inNames","mapInputs","checkInputs","checkInputShapeAndType","mapOutputs","checkOutputs","inputNodes","outputNodes","compilationKey","getCompilationKey","compiledMap","tensorsToKeep","getFrozenTensorIds","intermediateTensorConsumerCount","checkTensorForDisposal","ids","executeWithControlFlow","outputIds","inputIds","currentContext","added","processStack","missingOutputs","alternativeMsg","currentContext_1","processChildNodes","childNode","shape_1","notInGraph","normalizedName","TFHUB_SEARCH_PARAM","DEFAULT_MODEL_NAME","modelUrl","GraphModel","executor","findIOHandler","producer","minConsumer","Instance","transformGraph","convertTensorMapToTensorsMap","normalizeInputs","normalizeOutputs","executeAsync","newMap","loadGraphModel","fromTFHub","deepMap","mapFn","deepMapInternal","containedIn","recurse","isIterable","mappedIterable","childResult","deepZip","zipFn","deepZipInternal","zipToList","deepMapAndAwaitAll","mappedValue","isView","tf.Tensor","canTensorify","isPrimitive","tf.util","deepClone","cloneIfTensor","capacity","RangeError","doubledCapacity","RingBuffer","isFull","wrap","values_1","isEmpty","relativeIndex","GrowingRingBuffer","INITIAL_CAPACITY","expand","newCapacity","newData","iteratorFromItems","ArrayIterator","iteratorFromFunction","FunctionCallIterator","iteratorFromConcatenated","baseIterators","baseErrorHandler","ChainedIterator","iteratorFromZipped","iterators","mismatchMode","ZipMismatchMode","FAIL","ZipIterator","LazyIterator","stream","prefetch","shouldContinue","ErrorHandlingLazyIterator","FilterIterator","transform","MapIterator","AsyncMapIterator","serial","FlatmapIterator","resolveFully","serialMapAsync","resolveWhile","smallLastBatch","RowMajorBatchIterator","rowMajorBatch","TakeIterator","SkipIterator","bufferSize","PrefetchIterator","ShuffleIterator","SerialIterator","trav","nextFn","upstream","lastRead","serialNext","maxCount","skipped","tf.dispose","enableSmallLastBatch","tf.tensor_util","isTensorInList","e_1","inputTensors_2","outputQueue","OneToManyIterator","pump","mappedArray","pushAll","inputTensors_3","moreIterators","upstreamSummaries","readFromChain","iteratorResult","handleErrors","itemResult","afterState","getNext","numIterators","iteratorsDone","SHORTEST","LONGEST","currentPromise","nextState","refill","randomInt","upstreamExhausted","chosenIndex","chooseIndex","shuffleExcise","Dataset","datasetFromIteratorFn","columnMajorBatch","deepBatchConcat","tf.tidy","forEachAsync","tf.deprecationWarn","mapAsync","take","skip","reshuffleEachIteration","seed2","toArray","toArrayForTest","iteratorFn","class_1","zip","datasets","ds","batchConcat","tf.stack","tf.tensor","TextLineDataset","inputIterator","utf8Iterator","decodeUTF8","CODE_QUOTE","STATE_OUT","STATE_FIELD","STATE_QUOTE","STATE_QUOTE_AFTER_QUOTE","STATE_WITHIN_QUOTE_IN_QUOTE","csvConfig","hasHeader","fullColumnNames","columnNames","columnConfigs","configuredColumnsOnly","delimWhitespace","delimiter","CSVDataset","columnNamesValidated","setColumnNames","maybeReadHeaderLine","columnNamesFromFile","counts","countAcc","duplicateNames","firstElement","firstLine","parseRow","makeDataElement","features","parsedValue","default","required","isLabel","valueAsNum","getBoolean","validateElementCount","readOffset","readLength","currentState","microphoneConfig","fftSize","fftSizeLog2","numFrames","numFramesPerSpectrogram","sampleRateHz","columnTruncateLength","audioTrackConstraints","smoothingTimeConstant","includeSpectrogram","includeWaveform","MicrophoneIterator","microphoneIterator","mediaDevices","getUserMedia","audio","video","ctxConstructor","AudioContext","webkitAudioContext","audioContext","sampleRate","streamSource","createMediaStreamSource","analyser","createAnalyser","connect","freqData","timeData","isClosed","getAudioData","audioDataQueue","flattenQueue","freqDataQueue","spectrogramTensor","getTensorFromAudioDataArray","timeDataQueue","waveformTensor","spectrogram","waveform","currentFrames","intervalID","setInterval","getFloatFrequencyData","getFloatTimeDomainData","clearInterval","disconnect","getTracks","frameSize","webcamVideoElement","webcamConfig","needToResize","resize","resizeHeight","resizeWidth","cropBoxInd","centerCrop","widthCroppingRatio","heightCroppingRatio","widthCropStart","heightCropStart","widthCropEnd","heightCropEnd","cropBox","WebcamIterator","webcamIterator","facingMode","deviceId","srcObject","src","play","onloadedmetadata","cropAndResizeFrame","resizedImage","expandedImage","StringIterator","separator","SplitIterator","SplitIteratorImpl","chunkResult","carryover","ByteChunkIterator","Utf8Iterator","Utf8IteratorImpl","decoder","StringDecoder","chunk","File","chunkSize","FileChunkIterator","fileReader_1","onabort","urlChunkIterator","urlString","getRequestInitFromRequest","uint8Array","statusText","request","headers","credentials","cache","redirect","referrer","integrity","isLocalPath","FileDataSource","fs","readFileSync","DataSource","fileOptions","URLDataSource","csv","iter","generator","gen","webcam","create","microphone","version_core","version_data","version_layers","version_converter","version_union","R","Reflect","ReflectApply","receiver","ReflectOwnKeys","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","ProcessEmitWarning","warning","NumberIsNaN","EventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","enumerable","setMaxListeners","_getMaxListeners","that","getMaxListeners","doError","events","er","arrayClone","_addListener","prepend","existing","newListener","warned","emitter","onceWrapper","fired","wrapFn","_onceWrap","wrapped","position","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","rawListeners","listenerCount","eventNames","eventListener","errorListener","extend","qs","eq","regexp","maxKeys","kstr","vstr","stringifyPrimitive","objectKeys","ks","encodeURIComponent","TEXT_DATA_URLS","needle","TextData","dataIdentifier","textString","sampleLen","sampleStep","tf","dataIdentifier_","textString_","textLen_","sampleLen_","sampleStep_","getCharSet_","convertAllTextToIndices_","textLen","charSetSize","charSetSize_","nextDataEpoch","generateExampleBeginIndices_","exampleBeginIndices_","xsBuffer","ysBuffer","beginIndex","examplePosition_","indices_","getFromCharSet","charSet_","textToIndices","getRandomSlice","startIndex","textSlice","endIndex","maybeDownload","destPath","existsSync","lstatSync","localZipFile","createWriteStream","https","pipe","createModel","lstmLayerSizes","lstmLayerSize","compileModel","fitModel","textData","numEpochs","examplesPerEpoch","generateText","sentenceIndices","temperature","onTextGenerationChar","generated","inputBuffer","winnerIndex","sample","winnerChar","isNormalized","extendStatics","__proto__","__extends","__","__assign","__rest","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","__awaiter","thisArg","_arguments","P","adopt","fulfilled","rejected","__generator","sent","trys","verb","__createBinding","k2","__exportStar","__values","__read","ar","__spread","__spreadArrays","il","jl","__await","__asyncGenerator","asyncIterator","resume","settle","fulfill","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","__esModule","__importDefault","__classPrivateFieldGet","privateMap","__classPrivateFieldSet","_hasOwnProperty","_objectKeys","_deepClone","charCode","escapePathComponent","unescapePathComponent","_getPathRecursive","root","getPath","hasUndefined","objKeys","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","tree","_newTarget","JsonPatchError","objOps","newDocument","removed","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","_get","arrOps","removedList","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","validator","existingPathFragment","validateFunction","applyPatch","patch","applyReducer","operationResult","pathLen","existingPathLen","existingValue","validate","sequence","externalValidator","arrA","arrB","beforeDict","Mirror","observers","ObserverInfo","observer","getMirror","getObserverFromMirror","mirror","removeObserverFromMirror","unobserve","observe","patches","observerInfo","dirtyCheck","generate","fastCheck","object","removeEventListener","invertible","_generate","newKeys","oldKeys","changed","deleted","oldVal","compare","tree1","tree2","core","duplex","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","re","createToken","isGlobal","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCE","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","numeric","compareIdentifiers","anum","bnum","rcompareIdentifiers","SemVer","loose","includePrerelease","LOOSE","FULL","major","minor","prerelease","other","compareMain","comparePre","compareBuild","inc","release","valid","clean","version1","version2","hasPre","defaultResult","parsed","rcompare","compareLoose","versionA","versionB","rsort","gt","lt","neq","gte","lte","cmp","coerce","rtl","COERCERTL","Range","Comparator","parseRange","comps","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","TILDETRIM","CARETTRIM","compRe","COMPARATORLOOSE","COMPARATOR","comp","parseComparator","replaceGTE0","intersects","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","comparators","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","pr","replaceCaret","CARETLOOSE","CARET","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fpr","fb","to","tM","tm","tpr","tb","semver","ANY","allowed","operator","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","satisfies","toComparators","maxSatisfying","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","compver","validRange","outside","hilo","gtfn","ltefn","ltfn","ecomp","gtr","ltr","r1","r2","included","ranges","simplified","original","subset","dom","sawNonNull","OUTER","simpleSub","simpleDom","isSub","simpleSubset","eqSet","higherGT","lowerLT","gtltComp","higher","hasDomLT","hasDomGT","internalRe","tokens","simplifyRange","fname","accessorName","accessorFields","get1","getN","opt","getter","empty","truthy","falsy","None","Warn","Info","Debug","isLegalKey","mergeConfig","configs","signals","mergeNamed","layout","writeConfig","symlog","symexp","pan","domain","lift","ground","d0","dd","panLinear","toNumber","panLog","panPow","panSymlog","zoom","anchor","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","getMonth","utcquarter","getUTCMonth","lo","hi","span","DESCENDING","orders","fmap","compare1","compareN","order","delay","tid","evt","hop","property","NULL","clear","parent","proto","r0","flat","frac","DEFAULT_MAX_SIZE","maxsize","array0","array1","n0","merged","i1","padchar","align","$","defaultParser","parser","ellipsis","visitor","accessor","splitAccessPath","Error$1","isObject","peek","log$1","clampRange","ascending","extent","extentIndex","fastmap","has$1","inherits","members","inrange","isDate","isRegExp","lerp","lruCache","merge","toBoolean","toDate","toSet","truncate","visitArray","protocol_re","allowed_re","whitespace_re","fileProtocol","sanitize","fileAccess","fileLoader","httpLoader","uri","localFile","isFile","loadFile","isAllowed","hasProtocol","baseURL","defaultProtocol","rel","crossOrigin","filename","accept","readFile","fileReject","httpReject","typeParsers","boolean","integer","number","string","typeTests","typeList","inferType","inferTypes","types","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","customConverter","inferColumns","columnSet","column","formatYear","year","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCDate","reFormat","DELIMITER","convert","parseRows","I","eof","eol","token","preformatBody","formatValue","formatBody","formatRows","formatRow","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","autoType","fixtz","getHours","delimitedFormat","delim","dsv","responseType","header","stringValue","isBuffer","parseJSON","x0","y0","kx","ky","translate","bboxPoint","bboxGeometry","geometries","coordinates","arcs","arc","objects","feature","bbox","properties","geometry","transformPoint","points","point","ring","polygon","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","ends","fg","gf","p0","dp","meshArcs","extractArcs","geomsByArc","geom","extract0","extract1","extract2","extract3","geoms","planarRingArea","area","mergeArcs","polygonsByArc","polygons","groups","extract","neighbors","ki","mid","indexesByArc","geometryType","LineString","MultiLineString","Polygon","MultiPolygon","ik","box","quantizePoint","quantizeGeometry","quantizeArc","interior","exterior","topojson","mesh","formats","reader","numbers","valueof","ascendingBisect","bisectRight","bisectLeft","bisectCenter","arrayify","reducer","cross","Float64Array","deviation","Adder","_partials","_n","valueOf","adder","nest","rollup","rollups","regroup","keyof","e10","e5","e2","ticks","tickIncrement","power","LN10","tickStep","step0","step1","nice","prestep","LN2","sturges","histogram","xz","tz","bins","bin","thresholds","quickselect","sd","newLeft","newRight","swap","quantile","value0","value1","quantileSorted","pairs","pairof","pair","previous","first","least","defined","leastIndex","greatest","greatestIndex","scan","shuffler","matrix","difference","others","is","intersection","superset","union","toLocaleString","formatDecimalParts","toExponential","coefficient","grouping","thousands","numerals","formatSpecifier","specifier","FormatSpecifier","symbol","comma","prefixExponent","formatDecimal","toPrecision","formatRounded","formatPrefixAuto","prefixes","locale","currencyPrefix","currency","currencySuffix","decimal","percent","minus","nan","newFormat","formatTypes","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatPrefix","defaultLocale","definition","t0","newInterval","floori","offseti","interval","setTime","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","second","getMilliseconds","minute","getSeconds","getMinutes","hour","day","setHours","setDate","getDate","getTimezoneOffset","days","weekday","getDay","sunday","monday","tuesday","wednesday","thursday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","month","setMonth","getFullYear","months","setFullYear","years","utcMinute","setUTCSeconds","utcMinutes","utcHour","setUTCMinutes","utcHours","utcDay","setUTCHours","setUTCDate","utcDays","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","utcMonth","setUTCMonth","utcMonths","utcYear","setUTCFullYear","utcYears","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","unit","numTypes","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","week","localWeekNum","timeDay","timeWeek","localFirst","localDate","H","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","getUnit","phase","firstDay","localGet","localInv","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","timeInterval","utcInterval","ival","timeOffset","utcOffset","timeSequence","utcSequence","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Week","Month","Year","intervals","maxbins","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","pads","newParse","Z","parseSpecifier","Q","V","timeMonday","W","U","utcFormat","utcParse","numberRe","percentRe","requoteRe","requote","timeSunday","dISO","timeThursday","dow","UTCdISO","timeFormat","timeParse","isoSpecifier","formatIsoNative","toISOString","formatIso","parseIsoNative","parseIso","memoize","trimZeroes","numberFormat","decimalChar","dec","rightmostDigit","numberLocale","formatFloat","formatSpan","defaultNumberLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","defaultTimeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","resetDefaultLocale","schema","timeParser","utcParser","datum","parsers","parts","loader","UniqueList","idFunc","asyncCallback","df","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest","derive","rederive","stableCompare","isChangeSet","changeset","remp","modp","reflow","insert","modify","tuple","pulse","cur","modifies","CACHE","Parameters","writable","force","modified","OP_ID","PULSE","NO_PARAMS","SKIP","MODIFIED","Operator","react","stamp","qrank","_update","parameters","bit","_targets","initonly","argval","_argval","argops","_argops","deps","marshall","detach","StopPropagation","rv","touch","sources","targetRank","rerank","STREAM_ID","EventStream","receive","_filter","_apply","consume","_consume","trg","stopPropagation","throttle","pause","dataflow","between","active","send","querySelectorAll","ingest$1","preload","pending","_pending","loadPending","SKIP$1","onOperator","onStream","updater","_rank","REM","MOD","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","Pulse","materialize","visit","addFilter","fork","addAll","reuse","addF","remF","modF","srcF","cleans","runAfter","hash","nomod","MultiPulse","pulses","changes","prerun","postrun","async","_pulse","reentrant","_touched","_clock","_enqueue","_heap","_getPulse","_input","_postrun","cb","runAsync","_running","enqueue","getPulse","singlePulse","NO_OPT","Heap","siftdown","last","siftup","pidx","cidx","ridx","Dataflow","logLevel","_locale","_loader","logMethod","_log","cleanThreshold","Transform","transforms","Definition","quantiles","quartiles","estimateBandwidth","maxb","logb","divide","minstep","eps","setRandom","bootstrapCI","mu","dotbin","smooth","smoothing","thresh","lcg","dist","pdf","icdf","SQRT2PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","kde","support","bandwidth","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","ols","uX","uY","uXY","uX2","slope","intercept","Y","ux","uy","xv","yv","visitPoints","rSquared","SSE","SST","sse","sst","XY","X2","coef","YL","XYL","X2Y","ly","xy","c0","YS","lx","quad","X3","X4","X2X2","poly","lhs","rhs","gaussianElimination","uncenter","maxiters","loess","bw","yhat","residuals","robustWeights","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","pm","angleDelta","a0","a1","multikey","groupkey","measureName","as","base_op","AggregateOps","store","__count__","missing","mean_d","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","median","q2","q1","q3","argmin","argmax","ValidAggregateOps","measure","createMeasure","compareIndex","agg","getreqs","_ops","_out","compileMeasures","ctr","TupleStore","_key","_add","_rem","_ext","quartile","ci","_ci","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","aggr","drop","collect","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","celltuple","adds","mods","EPSILON","Bin","band","_bins","b0","b1","SortedList","resort","Collect","Compare","CountPattern","tokenize","tcase","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Cross","Distributions","randomKDE","randomMixture","normal","randomLogNormal","DISTRIBUTIONS","FUNCTION","FIELD","Density","minsteps","maxsteps","fieldNames","partition","Output","DotBin","autostep","Expression","update$1","Extent","Subflow","detachSubflow","Facet","_keys","activate","flow","subflow","flows","sf","_group","initTargets","rekey","k1","Field","update$2","Filter","isMod","revisit","maxlen","Fold","fnames","Formula","Generate","Methods","Empty","Impute","getField","impute","fName","kName","gNames","partition$1","keyvals","gVals","kVal","_impute","kMap","gMap","gKey","JoinAggregate","KDE","cumulative","density","local","Key","update$3","Load","Lookup","MultiExtent","update$4","extents","MultiValues","update$5","Params","Pivot","_transform","aggregateParams","pivotKeys","PreFacet","Project","project","lut","dt","Proxy","Quantile","EPSILON$1","Relay","Sample","cap","Sequence","Sieve","TimeUnit","OUTPUT","utc","timezone","_floor","u0","u1","tunits","TupleIndex","Values","WindowOp","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","ValidWindowOps","WindowState","windows","countOnly","visitInputs","prototype$1","wind","Window","processPartition","ignorePeers","setWindow","adjustRange","bisect","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","cw","rect","halfPi","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","oc","ay","bx","by","kc","lc","centroid","_context","areaStart","_line","areaEnd","lineStart","_point","lineEnd","curve","curveLinear","pointX","pointY","defined0","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","sortValues","descending","pie","pa","curveRadialLinear","curveRadial","Radial","_curve","radial","lineRadial","angle","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","linkSource","linkTarget","link","curveHorizontal","curveVertical","p2","p3","linkHorizontal","linkVertical","linkRadial","draw","tan30","tan30_2","ka","kr","sqrt3","symbols","circle","diamond","star","triangle","wye","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","_basis","_beta","_x","_y","custom","bundle","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","slope2","MonotoneX","_t0","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","px","controlPoints","py","Step","stepBefore","stepAfter","series","stackValue","stackSeries","orderNone","offsetNone","sz","oz","yp","yn","sij0","sij1","s3","sk","skj0","skj1","peaks","peak","vj","sums","tops","bottoms","domCanvas","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","ordinalRange","paddingInner","paddingOuter","rescale","rangeRound","pointish","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color","displayable","rgb","hex","color_formatHex","formatHex","formatHsl","color_formatHsl","formatRgb","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","rgb_formatRgb","Hsl","hsl","m2","m1","hsl2rgb","radians","degrees","K","Xn","Yn","Zn","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","lch","hcl","A","B","C","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cubehelix","v3","exponential","hue","nogamma","rgbGamma","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","DataView","numberArray","genericArray","nb","na","reA","reB","bi","am","bm","bs","translateX","translateY","rotate","skewX","scaleX","scaleY","svgNode","parseCss","DOMMatrix","WebKitCSSMatrix","isIdentity","parseSvg","createElementNS","setAttribute","baseVal","consolidate","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","interpolateTransformSvg","epsilon2","zoomRho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","duration","_1","_2","_4","hslLong","hclLong","cubehelixGamma","cubehelixLong","piecewise","interpolate","clamper","bimap","polymap","transformer","interpolateValue","untransform","invert","interpolateNumber","interpolateRound","continuous","tickFormat","linearish","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","log10","reflect","loggish","pows","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","unsquare","squared","invertExtent","quantize","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","utcTime","k10","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","k21","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","bandSpace","Log","Pow","Sqrt","Symlog","Time","Diverging","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","invertRange","invertRangeExtent","range$1","scaleBinOrdinal","scales","isValidScaleType","scaleIdentity","scaleLinear","scaleLog","scalePow","scaleSqrt","scaleSymlog","scaleTime","scaleUtc","scaleSequential","scaleSequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","scaleDiverging","scaleDivergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","scaleQuantile","scaleQuantize","scaleThreshold","scaleOrdinal","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isTemporal","isInterpolating","isQuantile","scaleProps","interpolateRange","interpolateColors","quantizeInterpolator","scaleCopy","scaleFraction","scale$1","interp","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","discrete","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","palette","SymbolLegend","DiscreteLegend","GradientLegend","defaultFormatter","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","labelValues","binValues","thresholdValues","thresholdFormat","isDiscreteRange","labelFormat","formatRange","formatDiscrete","formatPoint","dflt","labelFraction","adjust","domainCaption","gradient_id","resetSVGGradientId","patternPrefix","isGradient","gradientRef","defs","Gradient","stops","lookup","curveBasis","curveBasisClosed","curveBasisOpen","curveBundle","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","curveLinearClosed","horizontal","curveMonotoneY","vertical","curveMonotoneX","curveNatural","curveStep","curveStepAfter","curveStepBefore","curves","orientation","cmdlen","pathParse","pathstr","cmd","DegToRad","Epsilon","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","segments","rx","ry","large","sweep","rotateX","th","sin_th","cos_th","pl","sfactor_sq","sfactor","xc","yc","th0","th1","th_arc","segs","th2","th3","bezier","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","sX","sY","pathRender","controlX","controlY","tempX","tempY","tempControlX","tempControlY","beginPath","drawArc","seg","bez","Tan30","builtins","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","vg_trail","w2","ud","trail","xw","yh","sa","ea","ir","or","cr","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","ts","arcShape","areavShape","areahShape","lineShape","rectShape","symbolShape","trailShape","hasCornerRadius","orient","mark","clip_id","resetSVGClipId","renderer","_defs","clipping","Bounds","equals","rotatedPoints","encloses","alignsWith","contains","bounds","GroupItem","ResourceLoader","customLoader","increment","decrement","sanitizeURL","loadImage","cors","complete","poll","boundStroke","miter","stroke","strokeOpacity","sw","strokeWidth","miterAdjustment","strokeJoin","circleThreshold","rot","ma","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","cubic","context$1","intersectPath","brush","isPointInPath","intersectPoint","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","value$1","addStops","addColorStop","createRadialGradient","createLinearGradient","ictx","fillStyle","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","rotateItem","transformItem","markItemPath","isect","bound","tag","nested","arc$1","pickArea","pickLine","pickTrail","markMultiItemPath","tip","area$1","clip$1","clipGroup","strokeOffset","emitRectangle","background","foreground","strokeForeground","content","noBound","rectanglePath","hitBackground","hitForeground","hitCorner","fore","restore","pick$1","dh","ix","interactive","pickMark","marktype","getImage","aspect","imageXOffset","imageYOffset","attr$1","toDataURL","bound$1","draw$1","ar0","ar1","imageSmoothingEnabled","xOffset","yOffset","line$1","attr$2","sx","sy","pathCache","bound$2","path$1","attr$3","bound$3","draw$2","attr$4","bound$4","path$2","draw$3","rule","shape$1","symbol$1","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","lineArray","textLines","lineBreak","multiLineOffset","widthGetter","fontFamily","quote","fontStyle","fontVariant","fontWeight","offset$1","textAlign","tempBounds","anchorPoint","attr$5","bound$5","draw$4","lh","fillText","strokeText","hit$1","intersectText","trail$1","Marks","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","markdef","aria","description","domCreate","doc","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","getBoundingClientRect","clientX","clientLeft","clientY","clientTop","resolveItem","origin","mdef","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","_el","_obj","firstChild","_origin","_scene","_handlerIndex","eventName","handleHref","handleTooltip","show","tooltip","getItemBoundingClientRect","Renderer","_bgcolor","scaleFactor","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","KeyDownEvent","KeyPressEvent","KeyUpEvent","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseUpEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","DoubleClickEvent","WheelEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","Events","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","eventBundle","eventListenerCheck","fire","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","inDOM","HTMLElement","parentNode","ratio","style","setTransform","CanvasRenderer","_options","_redraw","_dirty","_tempb","viewBounds","clipToBounds","externalContext","appendChild","vb","clearRect","SVGHandler","_hrefHandler","_tooltipHandler","__data__","svg","_svg","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","AriaIgnore","AriaGuides","caption","axisCaption","legendCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","extractTitle","props","capitalize","channelCaption","innerText","attrText","markup","outer","inner","serializeXML","_serialize","hasAttributes","attributes","hasChildNodes","nodeType","nodeValue","styles","rootAttributes","RootIndex","xmlns","SVGRenderer","_dirtyID","_root","base$1","_clearDefs","setAttributes","setProperty","viewBox","bg","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","dirtyParents","ownerSVGElement","isGroup","sibling","__values__","extra","mark_extras","updateGradient","updateClipping","pt","preserveAspectRatio","fx","fy","fr","lastChild","previousSibling","cg","siblingCheck","nextSibling","setStyle","textContent","setAttributeNS","removeProperty","removeAttributeNS","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","display","Canvas","PNG","SVG","RenderType","modules","headless","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","clipBounds","boundClip","TOLERANCE","sceneEqual","pathEqual","objectEqual","kb","resetSVGDefIds","Top","Left","Right","Bottom","TopLeft","TopRight","BottomLeft","BottomRight","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Symbols","Fit","FitX","FitY","Pad","All","Each","Flush","Column","Row","Bound","view","markBounds","rebound","COUNTER_NAME","Identifier","getCounter","_signals","Mark","scenegraph","Init","Overlap","methods","parity","greedy","hasOverlap","hasBounds","boundTest","tolerance","separation","boundScale","boundTolerance","boundOrient","Render","isYAxis","axisIndices","grid","axisLayout","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","gridLayoutGroups","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","yExtent","yMax","trellisLayout","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","bf","lookup$1","legends","legendParams","mult","legendLayout","legend","_bounds","legendGroupLayout","legendBounds","legendEntryLayout","ey","tpad","ty","legendTitleOffset","noBar","vgrad","widths","titleLayout","subtitle","ViewLayout","layoutGroup","shouldReflow","xBounds","yBounds","autosize","viewSizeLayout","_autosize","viewWidth","viewHeight","_resizeView","AxisTicks","tally","DataJoin","defaultItemCreate","Encode","fmod","encoders","reenter","enter","LegendEntries","lskip","perc","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","lineR","ta","rr","ra","arcR","iy","curveR","orthoX","orthoY","orthoR","sc","ss","tc","diagonalX","diagonalY","diagonalR","mr","Pie","DEFAULT_COUNT","includeZero","includePad","Scale","scaleKey","configureRange","configureBins","configureDomain","isContinuousColor","rawDomain","domainMid","domainRaw","padDomain","domainMin","domainMax","domainCheck","domainImplicit","scaleImplicit","rangeStep","configureRangeStep","configureScheme","flip","interpolateGamma","interpolate$1","schemeExtent","scheme$1","schemeCount","adjustScheme","SortItems","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","quarterPi","haversin","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","streamLine","streamPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","areaRingSum","areaSum","lambda00","phi00","lambda0","cosPhi0","sinPhi0","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","phi0","lambda1","phi1","lambda2","deltaSum","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","equatorial","inflection","lambdai","phii","antimeridian","rangeCompare","rangeContains","deltaMax","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","forward","circleStream","direction","cosRadius","sinRadius","circleRadius","rejoin","Intersection","compareIntersection","startInside","subject","segment","isSubject","longitude","winding","point0","sinPhi1","cosPhi1","point1","absDelta","phiArc","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","pointLine","ringSegments","validSegment","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","smallRadius","notHemisphere","visible","v00","point2","code","pb","n2n2","n1n2","determinant","n1xn2","uu","polar","meridian","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","clipStream","polygonInside","cleanInside","cacheStream","lengthSum","lengthStream","lengthLineStart","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","sinDelta","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ao","bo","ab","ringRadians","pointRadians","graticuleX","graticuleY","graticule","DX","DY","outline","extentMinor","extentMajor","stepMinor","stepMajor","graticule10","sy0","sy1","kx0","ky0","kx1","ky1","distance","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","PathString","_string","_circle","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","TransformStream","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","delta2","resample","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","scaleTranslateRotate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","preclip","clipAntimeridian","postclip","projectResample","projectTransform","projectRotateTransform","clipAngle","recenter","reflectX","reflectY","conicProjection","parallels","cylindricalEqualAreaRaw","conicEqualAreaRaw","r0y","multiplex","streams","lower48","lower48Point","alaska","alaskaPoint","hawaii","hawaiiPoint","pointStream","albersUsa","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l6","fpy","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt1_2","SQRT1_2","sqrt2","sqrtPi","sinci","arsinh","arcosh","airyRaw","tanBeta_2","cosx","cosy","siny","cosz","z_2","cosz_2","sinz_2","tanz_2","lnsecz_2","sinz","aitoffRaw","sincia","sinx","sinx_2","cosx_2","sin_2y","sin2y","cos2y","sin2x_2","dxdx","dxdy","dydx","dydy","armadilloRaw","sPhi0","tanPhi0","cosLambda","sinLambda","dxdLambda","dxdPhi","dydLambda","dydPhi","dPhi","stream_","parallel","rotateStream","sphereStream","augustRaw","tanPhi","sin3Eta","eta","xi","cosEta","coshXi","sqrt8","bakerRaw","cosPhi_2","tanPhi_2","berghausRaw","lobes","theta0","cotAlpha","delta0","hammerRaw","hammerQuarticAuthalicRaw","solve","f0","f1","solve2d","MAX_ITERATIONS","err2","eb","dxa","dya","dxb","dyb","bertin1953Raw","hammer","fu","mollweideBromleyTheta","cp","cpsinPhi","mollweideBromleyRaw","mollweideRaw","boggsRaw","sinusoidalRaw","bonneRaw","cotPhi0","bottomleyRaw","sinPsi","bromleyRaw","cosdLambda","sindPhi","sindLambda","chamberlinRaw","beta0","chamberlinAfrica","chamberlin","collignonRaw","craigRaw","crasterRaw","cylindricalStereographicRaw","eckert1Raw","eckert2Raw","eckert3Raw","eckert4Raw","eckert5Raw","eckert6Raw","eisenlohrK","eisenlohrRaw","_0","cos1","vm1v","vp1v","deltatDeltaLambda","deltatDeltaPhi","deltacDeltat","deltacDeltaLambda","deltacDeltaPhi","deltavDeltaLambda","deltavDeltaPhi","deltaxDeltaLambda","deltaxDeltaPhi","deltayDeltaLambda","deltayDeltaPhi","faheyK","faheyRaw","foucautRaw","cosk","foucautSinusoidalRaw","cosphi","sinphi","forwardMeridian","gilbertForward","gilbertInvert","projectionType","geoOrthographic","equirectangular","gilbert","gingeryRaw","rhoCosAlpha","k_","s_","gingeryLength","gingeryIntegrate","dTheta","x_halfPi","rhosinAlpha","sinRhoCosAlpha","halfPi_RhoCosAlpha","cRho","sRho","xB","yB","dAlphadLambda","xB2","dxBdPhi","dyBdPhi","dpdPhi","dqdPhi","dmdPhi","mcosAlpha","msinAlpha","dAlphadPhi","ginzburg4Raw","ginzburg5Raw","ginzburg6Raw","ginzburg8Raw","lambda4","ginzburg9Raw","projectSquare","gringortenRaw","sLambda","sPhi","gringortenHexadecant","gringortenHexadecantInvert","a2","secPhi","drdPhi","dvdPhi","dp2dPhi","dhdPhi","dra2dPhi","nu","zeta","g2","zetaMug","ellipticJi","ellipticJ","twon","ellipticFi","psi","sinhPsi","cscPhi","cotPhi2","cotLambda2","ellipticF","guyouRaw","at","guyouComplexAtan","y_1","guyouComplexDivide","tn","hammerRetroazimuthalRaw","hammerRetroazimuthalRotation","rotate_","healpixParallel","healpixLambert","healpixRaw","sphereTop","sphereBottom","sphereNudge","hillRaw","sinBt","Bt","rho0","K2","L2","omega","sinTheta","cosTheta","Bt_Bt1","sinuMollweidePhi","sinuMollweideY","sinuMollweideRaw","homolosineRaw","hufnagelRaw","psiMax","mapping","inversemapping","mutate","adsimp","fa","V0","tol","maxdepth","nanEncountered","sl","V1","V2","maxDepthCount","integrate","hyperellipticalRaw","elliptic","G","approx","rmin","rmax","pointEqual","interpolateLine","resampled","interpolateSphere","lobe","kavrayskiy7Raw","lagrangeRaw","spacing","pi_sqrt2","larriveeRaw","sqrtcosPhi","sinPhi_2","sinLambda_6","cosLambda_6","df0dPhi","df0dLambda","df1dPhi","df1dLambda","laskowskiRaw","lambdaPhi","littrowRaw","y2_1","x2_y2_1","loximuthalRaw","millerRaw","modifiedStereographicRaw","zr","zi","deltar","deltai","sinc","gs48","gs50","miller","lee","modifiedStereographicAlaska","modifiedStereographic","modifiedStereographicGs48","modifiedStereographicGs50","modifiedStereographicMiller","modifiedStereographicLee","coefficients","sqrt6","sqrt7","mtFlatPolarParabolicRaw","mtFlatPolarQuarticRaw","sinTheta_2","mtFlatPolarSinusoidalRaw","naturalEarth2Raw","phi6","nellHammerRaw","nicolosiRaw","b2","b2d2","d2b2","x2y2","pi2","pattersonK1","pattersonK2","pattersonK3","pattersonK4","pattersonC1","pattersonC2","pattersonC3","pattersonC4","pattersonYmax","pattersonRaw","polyconicRaw","face","edges","faceEdges","shared","sharedEdge","hasInverse","faceInvert","faceDegrees","multiPoint","notPoles","inside","octahedron","faceProjection","faces","collignonK","w5","xyz","hexagon","cornerNormals","parents","normals","yi","pj","xj","yj","projectFeature","projectFeatureCollection","projectGeometry","projectGeometryCollection","sinkPoint","sinkLine","sinkPolygon","holes","hole","projectQuincuncial","digits","quantizePoints","quantizePointsNoDuplicates","quantizePolygon","quantizeFeature","rectangularPolyconicRaw","cotPhi","robinsonRaw","di","yy","satelliteVerticalRaw","satelliteRaw","cosOmega","sinOmega","tilt","epsilonInverse","x0e","x1e","y0e","y1e","nonempty","normalizePoint","clampPoint","clamped","clampPoints","extractFragments","rings","pointk","fragmentBefore","stitchFragments","fragment","startFragment","endFragment","stitchFeature","stitchGeometry","timesRaw","twoPointAzimuthalRaw","cosd","twoPointAzimuthalUsa","twoPointAzimuthal","twoPointEquidistantRaw","lambdaa","lambdab","z02","tanLambda0","za","zb","cosza","coszb","twoPointEquidistantUsa","twoPointEquidistant","vanDerGrintenRaw","P2","P2_A2","G_P2","x2_y2","c3","theta1","vanDerGrinten2Raw","vanDerGrinten3Raw","vanDerGrinten4Raw","B2","C2","BC","B_C2","B_3C","D2","F","C_","B_C","F_","sqrtF","f_","wagnerFormula","wagnerRaw","poleline","inflation","vinflation","vratio","wagner","wagner7","wagner4Raw","wagner6Raw","wiechelRaw","sin1_Phi","winkel3Raw","sin_2phi","sin2phi","cos2phi","sinlambda","coslambda_2","sinlambda_2","sin2lambda_2","dxdlambda","dxdphi","dydlambda","dydphi","dlambda","dphi","defaultPath","projectionProperties","projections","getProjectionPath","albers","geoAlbers","albersusa","geoAlbersUsa","azimuthalequalarea","geoAzimuthalEqualArea","azimuthalequidistant","geoAzimuthalEquidistant","conicconformal","geoConicConformal","conicequalarea","geoConicEqualArea","conicequidistant","geoConicEquidistant","equalEarth","geoEqualEarth","geoEquirectangular","gnomonic","geoGnomonic","geoIdentity","mercator","geoMercator","mollweide","geoMollweide","naturalEarth1","geoNaturalEarth1","orthographic","stereographic","geoStereographic","transversemercator","geoTransverseMercator","cases","contours","smoothLinear","contour","isorings","stitch","xt","yt","ringContains","segmentContains","collinear","within","Isocontour","levels","transformPaths","transformPolygon","transformRing","density2D","values0","values1","blurX","blurY","cellSize","KDE2D","PARAMS","Contour","post","GeoJSON","_features","_points","lon","lat","geojson","GeoPath","initPath","GeoPoint","GeoShape","shapeGenerator","Graticule","Heatmap","opacity_","color_","$value","$max","toCanvas","dep","dependency","can","pix","Projection","collectGeoJSON","featurize","strength","cover","leaf","ym","yz","quads","Quad","retainer","removeAll","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","tree_add","tree_addAll","tree_cover","tree_data","tree_extent","tree_find","tree_remove","tree_removeAll","tree_root","tree_size","tree_visit","visitAfter","tree_visitAfter","tree_x","tree_y","vx","vy","radii","ri","ri2","prepare","rj","_nodes","_random","nodeById","nodeId","links","defaultStrength","strengths","distances","initializeStrength","initializeDistance","dispatch","Dispatch","parseTypenames","typenames","typename","T","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_time","_next","restart","sleep","timerFlush","wake","nap","poke","elapsed","_restart","tick","initialRadius","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","initializeNodes","initializeForce","randomSource","closest","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","radiuses","ForceMap","forceCenter","collide","forceCollide","nbody","forceManyBody","forceLink","forceX","forceY","Forces","ForceParams","ForceConfig","ForceOutput","Force","sim","change","rerun","static","stopped","getForce","numForces","setForceParam","defaultSeparation","meanX","meanXReduce","maxY","maxYReduce","leafLeft","leafRight","nodeSize","cluster","previousNode","eachAfter","eachBefore","ancestor","leastCommonAncestor","aNodes","ancestors","bNodes","leaves","each","hierarchy","mapChildren","objectChildren","childs","computeHeight","node_copy","copyData","node_count","node_each","node_eachAfter","node_eachBefore","node_find","node_sum","node_sort","node_path","node_ancestors","descendants","node_descendants","node_leaves","node_links","node_iterator","circles","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r21","r3","a3","b3","d3","place","packEnclose","aa","sj","pack","optional","constantZero","defaultRadius","radiusLeaf","packChildren","translateChild","positionNode","roundNode","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","executeShifts","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","siblings","midpoint","apportion","vip","vop","vom","sip","sop","som","squarifyRatio","sumValue","newRatio","minRatio","dice","squarify","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","valueOffset","valueTarget","valueLeft","valueRight","resquarify","_squarify","Nest","valuesByKey","HierarchyLayout","setFields","Pack","Output$1","Partition","Stratify","parentKey","Layouts","Output$2","Tree","TreeLinks","Tiles","treemapBinary","treemapDice","treemapSlice","slicedice","treemapSliceDice","treemapSquarify","treemapResquarify","Output$3","Treemap","Loess","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","degreesOfFreedom","Regression","dof","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","minDist","i2","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","al","illegal","inCircle","hbl","_link","orientIfSure","qx","qy","bp","cl","tempDist","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","inedges","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygons","cellPolygon","_regioncode","_clipSegment","_step","cj","loop","li","aj","lj","_cell","e0","_clipInfinite","_clipFinite","e1","sx0","sx1","_edgecode","_edge","vx0","vy0","vxn","vyn","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","hullIndex","voronoi","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygons","trianglePolygon","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","contextAndRatio","board","zeroArray","tags","xoff","yoff","hasText","sprite","cloudSprite","cloudBounds","startX","startY","maxDelta","cloudCollide","collideRects","msx","functor","spirals","maxh","w32","wcr","wsr","hcr","hsr","seenRow","rectangularSpiral","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","array16","array32","Bitmaps","lengthen","_index","reindex","Dimension","onAdd","SortedIndex","addi","addv","oldv","oldi","index0","index1","CrossFilter","_indices","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ResolveFilter","ignore","bitmap","loaderFactory","kz","sij","openTag","closeTag","outerHTML","_resetDefs","updateDefs","head","foot","buildDefs","applyStyles","escape_text","markGroup","scaleBand","scalePoint","deg2rad","rad2deg","cssNode","cssRoot","cssView","documentElement","defaultView","getComputedStyle","getPropertyValue","initializeAria","ariaLabel","_background","_resize","Default","cursor","user","setCursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","resizeRenderer","_renderer","_handler","_resizeListeners","vega","extension","itemGroup","VIEW","TIMER","WINDOW","NO_TRAP","trap","initializeEventConfig","defaults","unpack","prevent","_eventConfig","allow","permit","_eventListeners","itemFilter","markTarget","invoke","hoverSet","leaveSet","timers","_timers","BindClass","NameClass","RadioClass","elements","wrapper","form","checkbox","radio","checked","option","valuesEqual","selected","selectedIndex","prevHandler","elBind","_renderType","_elBind","_bind","querySelector","innerHTML","paddingObject","_scenegraph","Type","toBlobURL","mime","blob","RawCode","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","callee","consequent","alternate","argument","TokenName","lookahead","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","TokenRegularExpression","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","isIdentifierPart","keywords","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","getIdentifier","scanIdentifier","scanPunctuator","code2","ch1","ch2","ch3","ch4","scanHexLiteral","scanOctalLiteral","octal","scanNumericLiteral","scanStringLiteral","testRegExp","$1","exception","scanRegExpBody","classMarker","terminated","literal","scanRegExpFlags","scanRegExp","regex","isIdentifierName","advance","lex","finishArrayExpression","finishBinaryExpression","finishCallExpression","finishConditionalExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishObjectExpression","finishProperty","kind","finishUnaryExpression","messageFormat","whole","throwUnexpected","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","parseGroupExpression","parseExpression","legalKeywords","parsePrimaryExpression","parseArguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMember","parseLeftHandSideExpressionAllowCall","parsePostfixExpression","parseUnaryExpression","binaryPrecedence","prec","parseBinaryExpression","markers","Constants","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","indexof","lastindexof","if","stripQuotes","forbidden","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","Intersect","Union","VlMulti","Or","And","TYPE_ENUM","TYPE_RANGE_INC","TYPE_RANGE_EXC","TYPE_RANGE_LE","TYPE_RANGE_RE","UNIT_INDEX","testPoint","dval","selectionTest","unitIdx","miss","selectionResolve","isMulti","resolved","multiRes","resUnit","E_union","E_intersect","R_union","R_intersect","DataPrefix","IndexPrefix","selectionVisitor","scope","indexName","dataName","getData","indataRef","tuplesRef","indata","setdata","retval","dateObj","setYear","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","ScalePrefix","SignalPrefix","dataVisitor","indataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoArea$1","geoBounds","geoBounds$1","geoCentroid","geoCentroid$1","inScope","channel_luminance_value","channelValue","luminance","contrast","color1","color2","lum1","lum2","lumL","lumD","equalArray","equalObject","removePredicate","toggle","_trigger","pinchDistance","touches","pinchAngle","bandspace","scaleGradient","geoShape","pathShape","treeNodes","treePath","treeAncestors","_window","innerWidth","innerHeight","containerSize","clientWidth","clientHeight","markname","functionContext","isDefined","eventFunctions","eventPrefix","thisPrefix","astVisitors","codegenParams","buildFunctions","codeGenerator","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","operators","eventConfig","parseOperator","parseOperatorParameters","parseStream","parseUpdate","Skip","Swap","adjustSpatial","canonicalType","isOperator","isCollect","expression","_compare","expressionCodegen","parameter","operatorExpression","parseParameters","parseParameter","PARSERS","getOperator","getKey","getExpression","getEncode","getCompare","getSubflow","getTupleId","$ref","$name","parameterExpression","$key","$flat","$field","$compare","$order","$tupleid","$encode","enc","encodeExpression","$subflow","subctx","eventExpression","srcid","handlerExpression","getState","subcontext","setState","substate","Context","Subcontext","$ingest","$format","$request","unresolved","Width","Height","initializeResize","resetSize","_resizeWidth","_resizeHeight","resizePadding","resizeView","dataTest","signalTest","proxy","timestamp","formatTooltip","formatArray","formatObject","View","_globalCursor","_preventDefault","bindings","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","_desc","_resetRenderer","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","finalize","toImageURL","renderToImageURL","renderToCanvas","toSVG","renderToSVG","whitelist","blacklist","encoder","addEncode","isEncoder","addEncoders","extendEncode","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","TitleTextRole","TitleSubtitleRole","applyDefault","_color","resolveField","parseBlock","block","OUTER_INVALID","outerError","addSignal","addBinding","Entry","refs","tupleidRef","fieldRef","keyFieldRef","compareRef","keyRef","Ascending","Descending","sortKey","aggrField","Scope","isSignal","isExpr","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","eventSource","streamParameters","addStream","markrole","filterMark","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","isMarkType","endChar","pushChar","popChar","parseBetween","parseThrottle","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","initScale","addScale","parseScale","parseScaleDomain","parseScaleRange","parseScaleInterpolate","parseScaleNice","parseScaleBins","parseLiteral","parseArray","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","coll","addDataPipeline","countsRef","sortRef","multidomain","objectProperty","addProjection","Vertical","Index","Label","Offset","Perc","Perc2","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Size","Shape","Fill","Stroke","StrokeWidth","StrokeDash","Opacity","LegendScales","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","getStyle","anchorExpr","alignExpr","tickBand","extendOffset","extras","userEncode","thickness","dataRef","vv","baselineExpr","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","legendSymbolLayout","isL","isR","isLR","isVG","alignFlip","exprAlign","exprAnchor","exprAngle","exprBaseline","_anchor","pdef","parseIndexParameter","parseSubParameters","projectionRef","parameterValue","isField","isCompare","outerExpr","exprRef","outerField","isData","lookupRef","parseSubParameter","getDataRef","aggregate","DataScope","fromEntries","fieldKey","addSortField","optype","subscope","addData","toRuntime","trigger","layoutRef","boundRef","joinRef","$context","markpath","markRef","generates","encodeRef","pushState","popState","parseOverlap","sieve","legendEncode","entryLayout","legendType","scaleType","entryEncode","entryRef","tickMinStep","sizeExpression","buildLegendEncode","scaleCount","getFontSize","angleExpr","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","ifRight","ifRightExpr","$orient","ifEnc","ifExpr","isSimple","toExpr","ifOrient","fallback","axisConfig","styleProp","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","pos0","pos1","vscale","gridScale","tickPos","gridStart","gridEnd","tickSize","flushExpr","flushOffset","labelAlign","labelBaseline","flushOn","offsetExpr","titlePos","autoLayout","autoY","autoX","axisEncode","ticksRef","buildAxisEncode","preprocessed","parseLambdas","rootEncode","parseView","collectSignals","signalObject","pre","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","vref","annotate","check","sig","hasOwnSignal","propertyLambda","addScaleProj","dataScope","arrayLambda","objectLambda","defaultFont","defaultSymbolSize","defaultStrokeWidth","defaultColor","lightGray","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","heatmap","ramp","vtx","geo","reg","wordcloud","xf","flatMap","_instanceof","nativeMap","nativeSet","nativePromise","circular","includeNonEnumerable","allParents","allChildren","useBuffer","_clone","__isArray","__isRegExp","__getRegExpFlags","__isDate","getTime","allocUnsafe","keyChild","valueChild","entryChild","descriptor","allPropertyNames","propertyName","clonePrototype","__objToStr","ignoreCase","multiline","license","author","contributors","main","unpkg","jsdelivr","repository","scripts","prebuild","prepublishOnly","preversion","serve","eslintbase","lint","devDependencies","concurrently","typescript","peerDependencies","beemo","drivers","pkg","lightColor","medColor","darkTheme","markColor","excelTheme","gridOpacity","tickExtra","labelFontSize","markColor$1","axisColor","guideLabelColor","guideTitleColor","backgroundColor","blackTitle","fiveThirtyEightTheme","labelColor","titleColor","titleFontSize","bar","binSpacing","markColor$2","ggplot2Theme","titleFontWeight","headlineFontSize","headlineFontWeight","labelFont","labelFontWeight","markColor$3","titleFont","colorSchemes","latimesTheme","titleAlign","titleAngle","titleX","titleY","markColor$4","axisColor$1","quartzTheme","markColor$5","voxTheme","gridDash","markColor$6","axisColor$2","backgroundColor$1","labelFont$1","sourceFont","titleFontSize$1","colorSchemes$1","urbanInstituteTheme","markColor$7","gridColor$1","googlechartsTheme","version$1","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","StyleSheet","_objectAssign","_objectAssign2","_interopRequireDefault","_toConsumableArray","arr2","sheetForTag","sheet","styleSheets","ownerNode","isDev","isTest","oldIE","getElementsByTagName","makeStyleTag","createTextNode","_ref","_ref$speedy","speedy","_ref$maxLength","isSpeedy","getSheet","inject","injected","cssRules","insertRule","cssText","_insert","_delete","rules","emptyFunction","printWarning","_len","argIndex","_len2","_key2","_CSSProperty","_CSSProperty2","_warning","_warning2","isUnitlessNumber","styleWarnings","dangerousStyleValue","component","isNonNumeric","owner","_currentElement","_owner","ownerName","getName","warnings","processStyleName","createMarkupForStyles","_camelizeStyleName","_camelizeStyleName2","_dangerousStyleValue","_dangerousStyleValue2","_hyphenateStyleName","_hyphenateStyleName2","_memoizeStringOnly","_memoizeStringOnly2","badVendoredStyleNamePattern","badStyleValueWithSemicolonPattern","warnedStyleNames","warnedStyleValues","warnedForNaNValue","warnHyphenatedStyleName","checkRenderMessage","warnBadVendoredStyleName","warnStyleValueWithSemicolon","warnStyleValueIsNaN","warnValidStyle","serialized","styleName","isCustomProp","styleValue","uppercasePattern","msPattern","toHyphenLower","hyphenateStyleName","hName","_extends","PluginSet","fallbacks","contentWrap","_CSSPropertyOperations","_prefixer","_prefixer2","initial","fns","hasArray","flattened","contentValues","cont","presets","keyframes","fontFace","insertGlobal","styleSheet","simulations","simulate","cssLabels","isLikeRule","idFor","css","rehydrate","media","pseudo","disabled","enabled","_default","firstOfType","fullscreen","focus","indeterminate","inRange","invalid","lastOfType","onlyChild","onlyOfType","outOfRange","readOnly","readWrite","lang","not","nthChild","nthLastChild","nthLastOfType","nthOfType","after","before","firstLetter","selection","backdrop","placeholder","cssFor","attribsFor","_sheet","_clean","_clean2","_plugins","_hash","_hash2","_defineProperty","canSimulate","warned1","warned2","pseudos","simple","hasLabels","char","hashify","toRet","selectorTokenizer","splitSelector","inParen","toCSS","deconstruct","plain","selects","medias","supports","deconstructedStyleToCSS","inserted","deconstructed","cssRule","registered","_getRegistered","ruleCache","toRule","isSelector","possibles","joinSelectors","joinMediaQueries","isMediaQuery","isSupports","joinSupports","inArr","prefixedPseudoSelectors","dest","_ref2","_ref2$selector","_ref2$mq","mq","_ref2$supp","supp","_ref2$src","_src","composes","_dest","_css","nullrule","inputCaches","warnedWeakMapError","multiIndexCache","coi","_ctr","_coi","_console","cachedCss","insertKeyframe","kf","kfs","insertFontFace","mobile","Mobile","phablet","Phablet","tablet","Tablet","desktop","Desktop","hd","Hd","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","htmlAttributes","VNode","EMPTY_CHILDREN","lastSimple","vnode","cloneElement","ASYNC_RENDER","ATTR_KEY","enqueueRender","debounceRendering","hydrating","_componentConstructor","defaultProps","createNode","isSvg","normalizedNodeName","setAccessor","__html","useCapture","eventProxy","mounts","diffLevel","isSvgMode","componentRoot","prevSvgMode","splitText","vnodeName","buildComponentFromVNode","vchildren","originalChildren","keyed","keyedLen","childrenLen","vlen","vchild","_component","components","createComponent","Ctor","Component","setComponentProps","__ref","__key","componentWillReceiveProps","prevContext","prevProps","renderComponent","_disable","previousProps","previousState","nextBase","initialBase","isUpdate","initialChildComponent","rendered","inst","cbase","toUnmount","childComponent","childProps","getNodeProps","SYNC_RENDER","replaceChild","_parentComponent","componentRef","afterUpdate","flushMounts","originalComponent","isDirectOwner","isOwner","mountAll","unmountComponent","componentWillUnmount","_renderCallbacks","xhtml","xlink","xml","namespaces","creatorInherit","namespaceURI","creatorFixed","fullname","none","_groups","subgroups","subgroup","subnode","Selection","_parents","matcher","matches","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","_enter","EnterNode","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","enterGroup","updateGroup","exitGroup","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","getAttributeNS","getAttribute","styleRemove","styleConstant","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","deep","filterEvents","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","capture","customEvent","sourceEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","selection_select","selectAll","selection_selectAll","selection_filter","selection_data","selection_enter","selection_exit","selection_merge","selection_order","selection_sort","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","selection_attr","selection_style","selection_property","classed","selection_classed","selection_text","html","selection_html","selection_raise","selection_lower","selection_append","selection_insert","selection_remove","selection_clone","selection_datum","selection_on","selection_dispatch","Local","createSVGPoint","matrixTransform","getScreenCTM","testText","getElementById","createOrLoadModelButton","deleteModelButton","trainModelButton","generateTextButton","appStatus","textGenerationStatus","loadTextDataButton","textDataSelect","lstmLayersSizesInput","examplesPerEpochInput","batchSizeInput","epochsInput","validationSplitInput","learningRateInput","generateLengthInput","temperatureInput","seedTextInput","generatedTextInput","modelAvailableInfo","textGenerator","logStatus","batchLossValues","epochLossValues","onTrainBatchEnd","progress","examplesPerSec","tfvis","zoomToFit","xLabel","onTrainEpochEnd","onTextGenerationBegin","scrollTop","scrollHeight","charCount","generateLength","setUpUI","refreshLocalModelStatus","modelInfo","checkStoredModelStatus","modelIdentifier","enableModelParameterControls","disableModelParameterControls","disableModelButtons","enableModelButtons","seedSentence","seedSentenceIndices","sentence","updateModelParameterControls","updateTextInputParameters","hashCode","SaveableLSTMTextGenerator","loadModel","confirm","saveModel","LSTMTextGenerator","textData_","batchCount","totalBatches","modelIdentifier_","MODEL_SAVE_PATH_PREFIX_","modelSavePath_","modelsInfo","numLSTMLayers","layerSizes"],"mappings":";;;;;;AigDAA,AnvBAA,A8UAA,AGAA,ACAA,AiQAA,AUAA,AoBAA,AGAA,ACAA,A9KAA,IzHAIknP,AGAAI,ACAA94O,AiQAAsvP,A8BAA5W,AGAAI,ACAA94O,A9KAAsvP,CrHAC,AmSAA,C8HACzkD,AnvBAA0lC,A6lBAAA,E7lBAE,AkVAA,A2QAA,AwBAA,C8HAC,AraAA,AGAA,ACAA,A+RAA,AGAA,ACAA,ErnBAEj3O,A6lBAAA,CsJAChD,AraAAgD,AGAAA,ACAZ,AiQAY,A8BAAA,AGAAA,ACAZ,A9KAY,G8ZAG,AlIAAjG,AnuBAA,A6UAA,AGAA,AmQAA,AUAA,AmBAA,AGAA,A5KAA,CvcACwoC,A8UAA,AGAA,A4QAAA,AoBAA,AGAA,CtSAClgC,AGAAA,AgSAAA,AGAAA,C+HAC,AnvBAlB,A6lBAA,CsJAmBhI,ChBAC,AhJApB,A5IAA,C4RAqBiH,ArZAT,AGAA,AgSAA,AGAA,CtSAU,AGAA,AgSAA,AGAA,CnSAV,AmSAA,CnSAZ,AmSAA,EtSA0B,AmSAA,CnSAd,AmSAA,CkIAA,AraAZ,AmSAA,CkIA6BsvH,cAA7B;AwRAe,ACAA,AMAA,AnqCAA,AyYAA,AlVAA,AgKAA,A+9BAA,AjlCAA,A+4BAR,AECLpkD,A1HDF,AIAe,AjBAA,AkBAA,ACAf,ACAe,ArBAA,AyBAA,ACAf,ACAe,ACAA,AbAA,AcAA,AtBAA,AuBAA,ACAA,AIAA,A1BAA,A2BAA,AIAA,A9BAA,AiCAA,ADAA,AEAA,ACAA,A1wBAf,A4eAe,AKAA,AKAA,AJAA,AgBAA,AVAA,ACAf,A7LAe,AGAf,AkCAA,A9BAe,ACAA,AgBAA,AmBAA,AJAA,ACAA,A3BAA,AICb2yK,ACDF,AECEA,AEDF,AsPAe,AKAA,AJAA,AgBAA,AVAA,ACAf,AaAA,AKAO,AHAQ,AIAf,AiCAA,A7BAe,ACAA,AeAA,AmBAA,AJAA,ACAA,A1BAA,AGCbA,ACDF,AECEA,AEDF,AzLAe,AKAA,AJAA,AgBAA,AVAA,ACAf,EiaCE3yK,AxhBAA2yK,AGAAA,AgSAAA,AGAAA,E1HDE+R,A3KCA7R,AIAA5hP,A8PDAyzP,AkBAO5tP,AeCP+7O,AIAA5hP,AjLDAyzP,CiaCC,AnhBAA,AmSAA,C8ODQ86E,An2BCT90F,A6UAE,AGAA,A6QAFA,AmBAE,AGAA,CkPAO,CxhBAL,AGAA,AEAAl3O,A8RAA,AGAA,AEAAA,CrnBAD,A+TDE4rJ,AkCAAk3F,A4PCF,AKDS,ACAPl3F,AiCAAk3F,E3IAE,A3KCA,AkQDA,AiCCA,A7KDA,CiaAI,Ar2BCL,AkVAE,A2QAF,AKDS/oP,AmBCP,C8ODQ,AjhBCPsI,AmSAAA,C5HDC,A3KCA+8O,AkQDA,AiCCAA,A7KDA,CrIAd,AkBEe,AkPFAh/O,AgCAf,AiBEe,A7LFAA,C4aAQ,An2BCT62O,A+TDEhrE,AkCAhB,AkOAgB,A0BCFgrE,AMDEhrE,AiCAhB,A7MAgB,CtFACA,AfCT,AgRDgB,AkCAPA,AfCT,CsZDgBi3C,ACAAE,AMAAhjN,AnqCAAA,AyYAAA,AlVAAA,AgKAAA,A+9BAAA,AjlCAAe,A2xBAAiwM,AjBAA9zL,AkBAAsD,AEAAxmB,ArBAAkO,AyBAAszK,AEAAh7J,ACAAA,AbAAA,AcAAA,AtBAAA,AuBAAA,ACAAA,AIAAmhL,A1BAA3nM,A2BAA06G,AIAAl0F,A9BAAA,AiCAAA,ADAAA,AEAAk0F,ACAA16G,A1wBAxB,A4eAwBgG,AKAAe,AKAAs6B,AJAAt6B,AgBAA4jP,AVAA5jP,A5LAAf,AOAAe,ACAA2F,AmCAAu8O,AJAAA,ACAAA,A3BAAjjP,AICP6rK,AGAAA,AEAC,AsPDM9qK,AKAAs6B,AJAAt6B,AgBAA4jP,AVAA5jP,AcAxB,AKAyB9G,AHAD+F,AQAAe,ACAA2F,AkCAAu8O,AJAAA,ACAAA,A1BAAjjP,AGCP6rK,AGAAA,AEAC,AzLDM9qK,AKAAs6B,AJAAt6B,AgBAA4jP,AVAA5jP,C+kBAT,AnqCAA,AyYAA,AlVAA,AgKAA,A+9BAA,AjlCAA,A4xBAA,AQAA,ACAA,AbAA,AcAA,AtBAA,AuBAA,ACAA,ASAA,A9BAA,AiCAA,ADAA,A3RAA,AKAA,ACAA,AMAA,A5LAA,AOAA,ACAA,AKAA,AKCI,AIAX,AsPDO,ACAA,AMAA,AgBAA,AQAA,ACAA,AKAA,AICI,AIAX,AzLDO,ACAA,AMAA,CsDAKnB,ArKAM,A+OAN,AaAAA,AuCAM,AhMAN,AaAAA,C8kBAO,AnqCAA,AyYAA,AlVAA,AgKAA,A+9BAA,AjlCAAgI,A4xBAA,AQAA,ACAA,AbAA,AcAA,AtBAA,AuBAA,ACAA,AKAZ,AIAY,A9BAA,AiCAA,ADAA,AEAZ,A7RAY,AKAAA,ACAAA,AMAAA,A5LAA,AOAAA,ACAA,AgBAC,AXAD2W,A+PAA3W,ACAAA,AMAAA,AgBAA,AQAAA,ACAA,AeAC,AVAD2W,AjLAA3W,ACAAA,AMAAA,C/eAZ,AywBAA,A5OAA,ACAA,AMAA,ArLAA,AMAA,AKCO,A0PDP,ACAA,AMAA,AwBAA,AMAA,AICO,ArLDP,ACAA,AMAA,C4SAA,AGAA,AIAA,AhBAA,A2BAc+hC,AQAAxwC,ACAd,ApRAA,AvLAf,AeAA,AICuB,A2PDR,AsBAf,AcAA,AICuB,ApLDR,C7eAe,AywBAA,A5OAA,ACAA,AMAA,ACAN,AxJAxB,A9BA8B,AoCAf,AJAA,ACAA,A3BAe,ASA9B,AsPA8B,ACAA,AMAA,ACAN,AoDAxB,A7BA8B,AmCAf,AJAA,ACAA,A1BAe,AQA9B,AzLA8B,ACAA,AMAA,ACAN,C+ZAjB,ApHAwBo9G,AjBAhB,AoBAgB/wG,AIAA+rM,AUAhB,A1BAgB,AoCAAv8L,ApRAA,AGANmtB,A1LAA,AcCjB,AGAA,A6PDuB,AGANA,AmBAA,AaCjB,AGAA,AlLDuB,AGANA,CukBAV,ACAA,A1RAA,AjZAW,AMAM4uK,AJAAA,ACAA,A+NAN/wM,AiEAA,AMAM+wM,AJAAA,ACAA,AhNAN/wM,CuSAO,AkCAA8xM,ACAlB,AxQAf,A5KC0BxwM,AGAAA,AgQD1B,AkBAmB,AcCOA,AGAAA,A/KD1B,CukBAkCyhN,ACAA,A1RAA,AhJAC7/M,C+JAA,AQApB,CvQAA,AuFAA,A5IAA,CySAA,AmBAsBkvM,ACAtB,AnaAA,AJAA,AtBCP,AGAA,A0TDO,AJAA,AtBCP,AGAA,C4HDO,A7OAuBrqM,AuFAAA,A5IAAA,CySAC,AUAxB,AUAwB0qM,AxQAxB,A3JAwB,AJAA,AtBCP,AGAA,AyQDjB,ASAR,AwCAgC,AJAA,AtBCP,AGAA,AtKDjB,CkSAyB,CiBACV,A9PAA,AuFAA,A5IAA,C4TA1B,CkQAA,ClQA6BS,CkQAC,CjQA9B,CVAA,CUAiC,CVACjvL,GSAlC,EAAuC,CTAvC,EAA0C;A2QCvD,ACAA,AMAA,AnqCAA,AyYAA,AlVAA,AgKAA,A+9BAA,AjlCAA,Ai5BCA4uO,A1HDF,AIAE,AjBAA,AkBAA,ACAF,ACAE,ArBAA,AsBCa,AGDb,ACAF,ACAE,ACAA,AbAA,AcAA,AtBAA,AuBAA,ACAA,A1BDF,A8BCE,A1BAA,AGDK,AwBCL,AIAA,A9BAA,AiCAA,ADAA,AEAA,ACAA,A1wBDF,AoeAe,AMAR,AECL,AKAA,AKAA,AJAA,AHDa,AmBCb,AVAA,ACCK,A7LDL,AGAA,AiCDF,ACCE,A9BAA,ACAA,APDK,A0CCL,AJAA,ACAA,ApCDK,ASCL,AICE,AGAA,ACCFpT,ACHF,A+OAO,AOCL,AKAA,AJAA,AHDa,AmBCb,AVAA,ACCK,AGAP,AUFA,AECE,AIAA,AgCDF,ACCE,A7BAA,ACAA,ARDK,A0CCL,AJAA,ACAA,AnCDK,ASCL,AGCE,AGAA,ACCFA,ACHF,AhMAO,AOCL,AKAA,AJAA,AHDa,AmBCb,AVAA,ACCK,AGAP,E8ZAEoT,AphBCApT,AmSAAA,CiPDC,C5WAQjlH,A5LFAjnH,AqBEPsE,A8PAO2iH,AgBFAjnH,AqBEPsE,AjLAO2iH,CiaAE,AnhBAR,AmSAA,C0HDCm3E,AGAAp3M,AIAA23M,AUAAQ,ACAA30M,AQAA9E,ACAAyB,A1wBCFk9E,AifDExwE,AKAAqB,AYAAg+H,A3JAA,AJAA,ACAAh+H,AnBEA,AuPFArB,AKAAqB,AYAAg+H,AICF7uD,A6CDE,AJAA,ACAAnvE,AnBEA,AxLFArB,AKAAqB,AYAAg+H,CmSAC,AEAA,AeAA,AOAA,ACAA,AxRAA,AKAA,AvLAAo2G,AkCAAA,ApCDO,AuCCP,AoOAA,AKAA,AsBAAA,AiCAAA,ApCDO,AuCCP,A3MAA,AKAA,C6RAC/jP,AkCAA,AzZAA,AJAA,AtBCAyP,AGAAs+C,ACCA,ACDA,AwTDA,AJAA,AtBCAt+C,AGAAs+C,ACCA,ACDA,CsZDC,ACAA,AMAAnmD,AnqCAAA,AyYAA,AlVAAA,AgKAA,A+9BAA,AjlCAA4H,A2xBAP,AlBAOM,A2BAA,ACAAtL,AbAA,AcAA,AtBAA4jB,AuBAA5jB,ACAA,A1BDAiN,AICA7P,AGDOk2M,A4BCP1vL,A9BAAA,AgCAAA,A7RDO6tC,AECP,AMAAttD,AMAAA,A5LAA,AoCDAuR,A7BCA1K,ACAAlB,AmCAAqB,AJAAA,AnCDO/H,ASCP,AICA,AGAA,AiPFOquD,AQCPttD,AMAAA,AICAmT,AYDA,AoCDA5B,A5BCA1K,ACAAlB,AkCAAqB,AJAAA,AlCDO/H,ASCP,AGCA,AGAA,A9LFOquD,AQCPttD,AMAAA,AICAmT,C2kBDP,AnqCAA,AuDAA,A8CAQ,A8xBAA,AdAA,A6BAA,AIAA,A9BAA,AgCAA,AEAAs+L,AxRAA,AKAAn3K,AJAA,AMAA,ArLAA,ACAR,APDez7B,A0CCP,AJAA,ACAAqjP,ApCDH,ASCG,A+PAA,AKAA5nN,AJAA,AMAA,AwBAA,ACAR,ARDez7B,A0CCP,AJAA,ACAAqjP,AnCDH,ASCG,AjLAA,AKAA5nN,AJAA,AMAA,C4SAC61K,ACAAlxM,AEAA,AIAA,AUAA8xM,AQAAz0M,AEAT,A1cDgB8gC,ASCP5f,A2RDO4f,ASCP5f,CmIAJ,AEAL,AhBDF,A+BCE,AOAU,A/QCO,AzLFZ,ASCK,AICA3e,AGAAA,AEAAA,A8PAO,AoBFZ,ASCK,AGCAA,AGAAA,AEAAA,AjLAO,ChfDNmB,Ai5BDE,AvICF,ADAA,AKDA+pC,AwCCA,A1wBCF,AkfDE,AgBAA,AVAA,AxJDb,A7BCa/pC,AoCAAkiP,AJAAA,AsOAA,AgBAA,AVAA,AICb,AUAW,AsCFX,A5BCaliP,AmCAAkiP,AJAAA,AzMAA,AgBAA,AVAA,AICb,CnfDS,A2xBAP,AjBAY/lO,AkBAA/F,AnBAAhe,AyBACqiL,AhBAD,A+BAA,A9BAA,AgCAA,A7RDP,AOCO7rG,ACAA5uE,AMAAA,AxJDAf,A7BCL,ANDY,AGAA,AiQAd,AOCO2vE,ACAA5uE,AMAAA,AICAf,AgDFAA,A5BCL,APDY,AIAA,A/KAd,AOCO2vE,ACAA5uE,AMAAA,AICAf,CySDP,ASAQ,ArBAApD,AuBAA,ArBAA5C,AkCAF,A9RDSwmF,AYCP,AJAN,AMAA,ACCa,A1LDpB,AiCDF,ACCE,ApCDoB3tE,AYCP,AKEA,AmPHO2tE,AYCP,AJAN,AMAA,ACCa,AGAtB,AgBDE,AgCDF,ACCE,ApCDoB3tE,AaCP,AIEA,A5LHO2tE,AYCP,AJAN,AMAA,ACCa,AGAtB,CiTDgBhgE,ACAAvmB,AbAAumB,AcAAA,ACAAvmB,ACAAumB,AnBDT,AzuBEO,AsfDErnB,AYAA,A9JAA,A3BAAolB,AICA,AGAA,AEAA,A2PDAplB,AYAA,AICF,A0CDE,A1BAAolB,AGCA,AGAA,AEAA,ApLDAplB,AYAA,CzfAC,A4xBAAU,AQAR,AZAA,AcAA,AEAA,AIAQ,AvBDOs2M,A+BCjB,A9RDA,AQCUvoM,AMAAA,AxJDA,A7BCA,AiCAAzO,A3BAP,AICO8I,AGAAA,AEAAA,A+OFV,AQCU2F,AMAAA,AICA,AgDFA,A5BCA,AgCAAzO,A1BAP,AGCO8I,AGAAA,AEAAA,AhMFV,AQCU2F,AMAAA,AICA,CnfDC,A4xBAA,AGCMs5L,AaDN/nM,AKAT,A9BAA,AgCAA,AEAS,ArSDMsM,AaCd,ACAQ,AHDM1E,ASCN,A5LAA04H,AGAAoyC,AkCAAA,A9BAA,ANDX,AoBGUA,AuPFP,ACAQ,AHDM9qK,ASCN,AgBAA04H,AIAAoyC,AiCAAA,A7BAA,APDX,AoBGUA,AxLFP,ACAQ,AHDM9qK,ASCN,CwkBAAlE,ACAAA,AxjCAT,AkyBAW,ApBDpB,AsCCiBhD,A9RDS++E,AKAX,A5KCN,AoCAU,AJAA,A8NDOA,AKAX,AiCCN,AmCAU,AJAA,AjNDOA,AKAX,CmSCN,AyBAY3+E,AhBAD,AkCAF,AxwBDlB,AifCE,AiBAkBN,A3JAAR,AJAAA,AqOAlB,AiBAkBQ,AIDpB,A6CCoBR,AJAAA,A1MAlB,AiBAkBQ,CrNAA,AlLAA,A+9BAA,AvUAP,AkBAM,AZAE,AFDAq9H,AICA79H,AGDd,A/PAA,AECa,AMAC,AHDMyO,ASCN,A/KAAhI,AICT,AGAA,AEAA,A+OFL,AQCc,AHDMgI,ASCN,A8BAAhI,AGCT,AGAA,AEAA,AhMFL,AQCc,AHDMgI,ASCN,C/eACA,A0wBApB,AkBAK,AQAe,AZAA,AcAA,AtBAA4Y,AwBAA,ASAAA,A9BAAA,AgCAAA,AEAA,AnRApB,AJAoB5Y,AHDP,ASCOA,ArLAAA,AUCAtG,AGAAA,AEAA,A2PDpB,AJAoBsG,AHDP,ASCOA,AwBAAA,ASCAtG,AGAAA,AEAA,ApLDpB,AJAoBsG,AHDP,ASCOA,C/eAC,AgxBAF,AKDS,A4BCP,A9BAA,AiCAJ,ADAI,A7RDOwwE,AQCrB,AMAA,ArLAc,AiCArB,A6ND4BA,AQCrB,AMAA,AwBAc,AgCArB,AlND4BA,AQCrB,AMAA,CwkBAA,ACAA,A5RAa7+E,AGCP,AfDb,A4BAA,AQAK,AzRDuB,A7JElB,AoPFkB,A+CElB,A3LFkB,CmSCL,A4BAhB,AEAA,AjRDF,AQCkB,AgBAT,AVAS,AzLAvB,AkCAA,AxBAuB,AQEjB,ACHR,A+OAO,AQCkB,AgBAT,AVAS,AoBAvB,AiCAA,AvBAuB,AOEjB,ACHR,AhMAO,AQCkB,AgBAT,AVAS,CwkBAAwI,ACAA,AxjCAChB,AywBAjB,AsBCuBqwM,AMDN5nM,AEAAA,AzBD1B,AsCCsBzB,ACAZ,AvQAgBA,AtMAjB,AOAiBhH,AoCAlB,AJAA,A1BAkB6S,AICA,AGAd,AyQDc7L,AMAjB,AQAiBhH,AmCAlB,AJAA,AzBAkB6S,AGCA,AGAd,AtKDc7L,CzfAJ,A4xBAG,AVAV,AkCAQ,A9RDWswE,AwBClB,A/LAM,AaClB,ACCsB/2E,AgPHQ+2E,AwBClB,AcAM,AYClB,ACCsB/2E,A/LHQ+2E,AwBClB,CqRDYxzD,AmCCA,A9BAA,AgCAA,ArQA1B,AuFAA,A5IAA,CgRA2B+oL,AyBAd,AmBAc4E,ArSDd,AMAR,A9KCsB,AaAR,AICQ,AoPFtB,A8BCsB,AcAR,AGCQ,A3LFtB,CjeCuB,A4xBAJ54M,AUAxB,AEAA,AtBA4B,A+BArB,A9BAA,AiCAe4mB,ADAf,ApcAqB,AoCAA,AJAA,A1BAAxgB,AIClB,A0RDkB,AmCAA,AJAA,AzBAAA,AGClB,C2ZDH,AvjCAa,AoyBApB,AlBAY,AkCAW,ApSDYmc,AMACw2O,AvKChB,AoCAhB,AJAA,A1BAyB,AQEvB,AgPH8BA,AsCChB,AmCAhB,AJAA,AzBAyB,AOEvB,A/LH8BA,CiUCL/1P,AVA/B,ANAA,AkCAwBzD,AjaAxB,AJAA,AuSAA,AJAA,CqYA8B,A9SAC,AKDjC,AmCCiC,A9BAA,AgCAA,A7RD1B,AzJGyB,AgPHzB,AmDGyB,A/LHzB,CjeC2ByO,AywBAAM,AsBCnB,AMDN,AEAA,AxbAyBN,AoCAA,AJAA,AtBCA,A0RDAA,AmCAA,AJAA,AtBCA,C5pBDC,AqyBAAjP,AEAAA,AzBDA,AxPAO,AQCR4E,AMAAA,ArLAC,AMAAqC,AIC/B,AoPFsC,AQCRrC,AMAAA,AwBAC,AMAAqC,AGC/B,A3LFsC,AQCRrC,AMAAA,CgTCQ,AjQDjB,AMAA,AiFAA,AMAA,AlJAA,AMAA,CkUAhB,A9BAA,AgCAA,AEAC,C5CA4B,AyBAC,AkBArC,ApSDa,AcCsB,AMAA,AiFAA,AMAA,AlJAA,AMAA,C/eAEwD,A4xBAJ,AnBAI,AyBAC0wL,AGA/B,AEAA,AxbA8B1wL,AMAA,A8RAAA,AMAA,CzpBAL,A4xBAE5H,AnBAE,A4BAEqnB,AEAAA,AUAA,A9BAA,AiCAN3mB,ADAM2mB,AEAA,ArSDMvmB,AjKCZ,AMAMkoC,A8RAN,AMAMA,CgHAP,A4BAxB,AEAA,AUAgC3hB,A9BAAA,AiCAN,ADAM,C1CAhC,AwCA+B,A9BAtC,A9ZAiC,AoSAA,CzpBAQ,A+WAA,AoSAA,CnpBAT,AozBAEzY,ADAQ,ApcAV,AoSAA,CsHAW8lM,AyBAZ,AkBA/B,A/bA2C,AoSAA,CmIA3C,AMA6C0D,AeAD/wL,AEA5C,A9bAmB,AoSAA,CzpBA0B4rD,AqyBAA,AEAA,AUAA,AGAR,ArcAQA,AMAtC,A8RAsCA,AMAtC,CmIAmCvyE,AyBA1C,CzBA2C,AnBAI,A2CARA,ApSD1B,A3JCkC0kB,AoSAAA,CzpBA/C,AywBAgDrW,A2CAhD,ArcAA,AMAgD,A8RAhD,AMAgD,CzIDO,C4QCX3O,AMAO,AeAD,AGAR8D,ClBAUpD,AkBAT,A/bAQ2F,AoSAAA,CgHAJ,A2CAH4gB,CxBA5C,AnBAA,A2CA6C,CAAC3mB,CxBAG,AwBAJ,A/bAU,AoSAA,C2JAZ,A/bAa8Z,AoSAAA,CmIAL9Z,AqBAb,AGAI,CxBA1C,CvaAmD,AoSAA,CmIAG,AMAvB,AGA/B,AeAoD,A/bAQmG,AoSAAA,CyIA5D,AeA6DwgB,A5bAV,AoSAA,C8IAnD,AUA8D,A5bAvD,AoSAA,CpSAP,AoSAA,C2JA0C,GHAyB,GAA7B,GAAmC,KAAnC,GAA2C,CAAC,CAACA,CAAnF;AsQCE,ACAA,AMAH,AnqCAA,AyYAG,AlVAH,AgKAG,A+9BAA,AjlCAH,A+4BDM,AEEL8/L,AzIHa,AeEf,AbAC,AkBAGtgN,ACAJ,ACDE,ArBCD,AsBCC,AGDAwxM,ACAF,ACAC,ACAA,AbAA,AcAA,AtBAA,AuBAA,ACAA,A1BDC,A8BAA,A1BCD,AGDC,A4BCD,A9BAA,AgCAA,AEDC,ACCE,A1wBFJ,AoeCE/rM,AMAA,AECE,AKAF,AKAA,AJAE,AHDF,ASCE,ACCFyuP,A7LDE,AyBFG,AIAA,A1BEN,AiCDC,ACCD,ACFD,A/BEC,ACAA,AgCDC,ApCAA,ASCD,AICGroF,ACCFkzE,AEFE,ACEA,ACJJ,A+OCE,AOCA,AKAA,AJAE,AHDF,ASCE,ACCFmV,AGAA,AUHF,AEEI,AyBFG,AIAA,AzBEN,AgCDC,ACCD,ACFD,A9BEC,ACAA,A+BDC,AnCAA,ASCD,AGCGroF,ACCFkzE,AEFE,ACEA,ACJJ,AhMCE,AOCA,AKAA,AJAE,AHDF,ASCE,ACCFmV,AGAA,E8ZAA5zC,A/GDA9O,AlRDA/rM,AqBEAyuP,A3KCAnV,AkQDAmV,AiCCAnV,A7KDAmV,E4SDEl0P,AnaCA6rK,AKAA9qK,A8RAA8qK,AKAA9qK,CgPAC,ArHDA,A9ZCA,AmSAA,C8OFQ8qU,AjHCP9jU,AhBDArO,A8BCA6H,ASAAlE,AzwBCF05O,A0eFEt2J,AKAA,A3IAmBj7D,AtBGnB,AmPHAi7D,AKAA,AuBEFs2J,A0CFqBvxN,AtBGnB,A5LHAi7D,AKAA,C2aEO,AnHDN,AIAA,AmBAA,A1RDA74E,A3IAmB,AkOAnBA,AiEAmB,A7MAnBA,CilBCC/N,A3RAAD,AMAA6L,AUAA,AUAAuP,AhSDA,AKAN,AjKGM,AEDAhV,ACCAue,ACDA,A+OFA,AKAN,A2CGM,AEDAve,ACCAue,ACDA,AhMFA,AKAN,CilBCO,AxRCA4yL,AVFA,AxPCApwM,AKAA,AjKFOq6M,AIAAA,AOCPp7M,AEDA8iP,AlCCA3kN,AgBEA,ACCA,ACDAhnB,AsPDApW,AKAA,AMCA,AqCHOq6M,AIAAA,AOCPp7M,AEDA8iP,AjCCA3kN,AeEA,ACCA,ACDAhnB,AzLDApW,AKAA,AMCA,C2SDC/G,AhBDA,AuCCA06G,AxRAA,AFDA9sG,A/IAA,AIAmB,ApCAnB,AkBEA,AsPDA,AFDAA,AaEA,AgDFA,AIAmB,AnCAnB,AiBEA,AzLDA,AFDAA,AaEA,CqkBDC/K,ApxBAAmD,AlLAAA,A+9BAAA,ArSAA+xM,AtRDAvxH,AECAxgF,AMAAe,AHDA,ASCAnB,A5LAAI,AIDA,AaEA,AoPFAwgF,AQCAz/E,AHDA,ASCAnB,AICAI,AYDAA,AKDA,AYEA,A3LFAwgF,AQCAz/E,AHDA,ASCAnB,AICAI,CokBDCnD,AnxBAR,AlLAA,A+9BAA,AlTCQ,AvQDR,AMAQ,AOCA,A7LDR,AIDM,AaEEw6O,AGAA,ACCA,AwPFA,AOCA,AGAA,AYDR,AKDM,AYEEA,AGAA,ACCA,AvLFA,AOCA,AGAA,C4ZFQ,AhHEP1+O,AjBFA,AOAA,AgCCA,ArSDA,AMAA,AOCA,AjJDA,AEDb,AlCCE,AgBEWwtD,ACCAvmD,ACDA,A+OFA,AOCA,A2DDA,AEDb,AjCCE,AeEWumD,ACCAvmD,ACDA,AhMFA,AOCA,CsSDCo3H,AOAA,AiCCV,AtSDU/8H,AaCA8G,AFDA,AUEA,ApKHP,AIAA,AOCE,AEDK8qK,AECmBlyK,ApBErB,AEAH,AsPDKoH,AFDA,AUEA,AwCHP,AIAA,AOCE,AEDK8qK,AECmBlyK,ApBErB,AEAH,AzLDKoH,AFDA,AUEA,C8SDC,AjQAN,AOAM,ACAO,ApKFAsyL,AIAAA,A+OEb,AOAM,ACAO,AGCPzzL,AqCHOyzL,AIAAA,AhMEb,AOAM,ACAO,AGCPzzL,CqkBDC,AzKDO,AjHCPzG,ATDA,AgCCA,ACAA,A1wBCF,A0eFEqnF,AQCA,AHDN,ASCMt6E,AyEDAs6E,AQCA,AHDN,ASCMt6E,AcCF,AxKFEs6E,AQCA,AHDN,ASCMt6E,CwkBAC,ACAA9I,AvKFF,ArHEE,AGCR,AaDQ,A/QAAwK,AjJDA,AhBEA,ACCA,ACDA,AsPDAA,A2DDA,AhBEA,ACCA,ACDA,AzLDAA,C+kBACzO,A/SFM2kB,AoBENjkB,AGCAqnM,AaDA/nM,ASDhB,A/RAA,AOCgB,AjJDA,AnBEd,ACCa0yK,AEFb,ACEc5pK,ACDV,A+OFN,AOCgB,A2DDA,AnBEd,ACCa4pK,AEFb,ACEc5pK,ACDV,AhMFN,AOCgB,CoTAD,AMAf,ApBDW,AluBEI60O,AsfDCv5O,AjKFX,AIAA,AOCE,AIAoB,AvBEV,AgQDDA,AMCC,AUAFu5O,A2BHV,AIAA,AOCE,AIAoB,AvBEV,A/KDDv5O,AMCC,CqRHJ,AoBEX,APDgBoyE,AnPCX,AJAWpyE,A9IDmBwK,AvBEnB,AgQDX,AJAWxK,AUCAsE,AoDFmBkG,AvBEnB,A/KDX,AJAWxK,AUCAsE,C2RFCzI,AjPCA,ACAT,AMAD,AnKFiB4G,AIAAA,ASA5B,AEC6B,AvBEV,A2PDE,ACAT,AMAD,AyCFiBA,AIAAA,ASA5B,AEC6B,AvBEV,ApLDE,ACAT,AMAD,CyRFiB23C,AsBC1B,AICoB6jI,AtvBCF,AifDE5zK,AKAD,AJAV,AMAW7G,AnKFf,AIAA,AOCe,AIApB,AnBGW,ACDS,AsPDA6G,AKAD,AJAV,AMAW7G,AcCF,A2BHb,AIAA,AOCe,AIApB,AnBGW,ACDS,AzLDA6G,AKAD,AJAV,AMAW7G,CiCDpB,AaCO,AOAc,AxJDrB,AEDqBxD,AjBIA+D,ACJvB,AsPES,AOAc,AICR,AgDFb,AEDqB/D,AjBIA+D,ACJvB,AzLES,AOAc,AICR,CokBDX,ACAO,AzRCF,AaFP,AvBAc,ApZDeid,AIAAA,ASA/B,ArBGwB1W,AsQAA7H,AqCHOue,AIAAA,ASA/B,ArBGwB1W,AzKAA7H,CqkBDC,AzKDlB,A1HAkBmwM,AzuBEFj5H,AifDE,ACAAtvE,A7JFlB,AIAA,AZGH,ACCI,A0PFiB,ACAAA,AUCV,AUAQsvE,A2BHhB,AIAA,AZGH,ACCI,ArLFiB,ACAAtvE,AUCV,C4SAWwpM,A/QFAj1L,AcCA,AhJFA,AuOEA,AUChB,AkDHgB,AxMEA,AUChB,C+SDR,ApBDW,A1OCc,AnKFO,AIAA,AZGP,ACCD7a,AGAC,A8PFA,AyCFO,AIAA,AZGP,ACCDA,AGAC,AjLFA,CyRFZ,AMCa,ArZEAuG,AmSAAA,CyHFZ,AvPCatK,ArKCzB,A4PDyBA,AuCCzB,AnLDyBA,C+RFOnC,A1OEhC,AuFAA,AUC0B,AtJD1B,AUC0B,C2RFC8H,AOAAktM,AjPCA7yM,A1KEvB,AGAuB6hP,A8PFA7hP,AkCEvB,AGAuB6hP,AjLFA7hP,CncF/B,AwfEuB,AuFAA,AcFvB,A1JEuB,CykBAZ,AxiBDsB,AoBCX,A1KEU,AiQFV,AkCEU,A9KFV,CyRFP,AuBGN,A/QFyBtD,A+GEA+F,A5IAAA,CqkBDC,AzRCjC,AlQDgCzC,AuFAAA,AWCzB,AvJDyBA,AWCzB,CqRHiC,AMCd,AjPCH,AOAWqK,AvKEA,AuPFX,AOAWA,AqCEA,AxLFX,AOAWA,C+RDCjP,A1OCA,AuFAA,A5IAA,C8CAA,AuFAA,A5IAA,C6SDrB,AxZGuB,AkQDA,AiCCA,A7KDA,CiDDC4E,AvKEb,A8PFaA,AICtC,AiCCyB,AjLFaA,AICtC,C2RF0B,A1OCjB,AvKEE,A8PFF,AqCEE,AjLFF,C+RD+BsnB,A1OCtC,AvKEA,A8PFA,AqCEA,AjLFA,CiCDsB,CqQAkB,CmSCAhrB,AnSD9B,CmSCqB,AnSDjC,ArQA4CI,C8PAlB,C0SCmB,A1SDlC,CAAX,M9PAA;AuiBCE,ACCE,ApxBAH,AlLAA,A+9BAA,AhMCD+lN,AzIHAliM,AeEF,AIAE,AEAF,ACFE,ACGD,AGDC,ACAF,ArBDE9hB,A8BEA,AvBFD,AwBAC,AOAA,ACDA,ACEI,AtSDJ/B,AMDA,AEEC,AKAC,AKAA,AJAD,AHDD,AmBAA,AVCC,ACCDk6P,A7LDC,AyBFD9gE,AIAAA,AOCD,AEDC,ArCAK,A0CCL,AJAA,AnCAD,AaEGxnB,ACCA,AEDAA,ACCAA,AgPJF,AOEE,AKAA,AJAD,AHDD,AmBAA,AVCC,ACCDsoF,AGAD,AeFc,AHCZ,AyBFD9gE,AIAAA,AOCD,AEDC,ArCAK,A0CCL,AJAA,AlCAD,AYEGxnB,ACCA,AEDAA,ACCAA,A/LJF,AOEE,AKAA,AJAD,AHDD,AmBAA,AVCC,ACCDsoF,AGAD,E8ZACn0C,AzIHAliM,AMCA9hB,A9PAA/B,AqBEAk6P,ApKHA9gE,AIAAA,AOGF,AgPAE8gE,AwCHA9gE,AIAAA,AOGF,A/LAE8gE,C5MHA,AlLAA,A+9BAA,AzjBAA,AMAA,AMAA,A5LAA,A6QAA,AMAA,AgBAA,AlKAA,AMAA,CyRAE,A/ZAOhkP,AgBGP07J,AGAAA,ACCAA,A+QJO17J,AgBGP07J,AGAAA,ACCAA,CwGJCl0H,CyIGC,AnHDA52C,AcCA,ASDAgH,A/RFcopP,AKCdppP,A1JDA,AIAA,AwOAcopP,AKCdppP,AkDDA,AIAA,AvMAcopP,AKCdppP,CwTDJ,AcGKxG,ASDA,A1RDA,AmBAA,A7KDA46O,AIAAA,ASAAA,AKCA,AJAA,AmOAA,AmBAA,A+BDAA,AIAAA,ASAAA,AKCA,AJAA,A5MAA,AmBAA,C8jBCC5+O,AtKCK,A3XHS,A5JIdghB,AmPJc,AgDIdA,A5LJc,CslBEb,ArRAAizL,ApBDA,A8BEP,ACFO,AOAAn0M,A3cDO,AiBIP,AkRJO,AiBIP,CiHHCytC,AsCAR,ACCQztC,ACAAxD,A3RDAkH,AuFAAA,A5IAAA,CkSDR,AmBES0vE,AiBCA,ACFA9mC,AQCA,ACAA,AtSDA,AMDc82C,AOEd/5E,AKAA20B,APDA,AmBAAxhC,A3JAAA,AJAAA,AtBEA,AGAA,ACCA,AgPJc4mF,AOEd/5E,AKAA20B,APDA,AmBAAxhC,AiDAAA,AJAAA,AtBEA,AGAA,ACCA,A/LJc4mF,AOEd/5E,AKAA20B,APDA,AmBAAxhC,C8jBCC,AlQAAV,ArSDAsM,AaCA,AiBDA,ATEA,A5LHO7F,A0CCZ,AJAK,AtBEA23O,ACCA33O,AEDA84O,ACCArB,AuPFA,AiBDA,ATEA,AgBHOz3O,A0CCZ,AJAK,AtBEA23O,ACCA33O,AEDA84O,ACCArB,AxLFA,AiBDA,ATEA,CwkBDCr0B,AliBFc,AOEdmC,AgFFc,AOEdA,AnJFc,AOEdA,C+kBDT,A/SDUxtK,A0BEZ,AoBAY,A3RDA/3C,AUEA,AlJFAkE,A+NAAlE,AUEA,A0DFAkE,AhNAAlE,AUEA,C6TFL,ASCH,AxQDS,ATAO,ApKDpB,AIAA,ASAA,AKCa,AJAA,AjBGA,AuQHA,ATAO,AwCDpB,AIAA,ASAA,AKCa,AJAA,AjBGA,AxKHA,ATAO,C8RAb,AxPDqB4gF,AYEd,AYDd,A7KDci3J,AIAAA,A5BAO,AsCChB,ArBGS,AEDZ,AiPH0Bj3J,AYEd,AYDd,A+BDci3J,AIAAA,A5BAO,AsCChB,ArBGS,AEDZ,A9LH0Bj3J,AYEd,AYDd,CqRAA,A5OCe5gF,AzLFOuQ,AiBIPlO,AEDAjC,A6PDAJ,AmBFOuQ,AiBIPlO,AEDAjC,AlLDAJ,CiSDC1F,A8BEA43M,ASHhB,A/RAA,AKCgB,AmBAAj4M,AhKDAgyK,AKCA,AJAA/nK,AtBEd,AGAA,ACCA,AgPJF,AKCgB,AmBAAjK,ASAMmG,AmCDN6rK,AKCA,AJAA/nK,AtBEd,AGAA,ACCA,A/LJF,AKCgB,AmBAAjK,CwZFH,AtHGb,AkBDiB,AlRAAkG,AmBAA,A3JAZ,AJAA,AtBEY,AICA,AqPHAA,AmBAA,ASAJ,AwCAR,AJAA,AtBEY,AICA,A1LHAA,AmBAA,C+QDC,AqCClB,AhRCS,ApKCS8H,AGAA7H,ACChB,AuPFO,AwCCS6H,AGAA7H,ACChB,AxLFO,CglBAU,A3hBAAe,AKAA,A/IDA2F,AJAA8nE,AtBEjB,ACCQ,AEDR,AwPDiBztE,AKAA,AqBDM,AwCAN2F,AJAA8nE,AtBEjB,ACCQ,AEDR,AvLDiBztE,AKAA,C2kBAC,A7RAA,AkBDA1D,AhRCA,AKAA4C,APDR,AmBAQ8H,ArMDf,A0CCA,AzBGezG,AGAAid,AuPFA,AKAAte,APDR,AmBAQ8H,AODf,A0CCA,AzBGezG,AGAAid,AxLFA,AKAAte,APDR,AmBAQ8H,C+jBCClO,A1SDrB,A+BAqB,A7RArB,AWAqB+N,AmBArB,A/JAK,AtBEgB,AGAAu+C,ACCA,AqPHAv+C,AmBArB,A6CAK,AtBEgB,AGAAu+C,ACCA,A1LHAv+C,AmBArB,C+jBCmB,AhTFG,AMCA5L,A8BEb,AjRFa,AxIAA2iB,A1BEA9W,AGApB,AsPFoB,AoEAA8W,A1BEA9W,AGApB,AzLFoB,CklBClB,AthBAW,APDQ1O,AmBAA,AhKDvB,ACCuBs1E,AtBErB,AgQDa,APDQt1E,AmBAA,A4CDvB,ACCuBs1E,AtBErB,A/KDa,APDQt1E,AmBAA,C+QDvB,AxPCwBsM,AaCA,AKAA,A/IDnB,AzBGmB,AEDA0gD,ACCA,AuPFA,AKAA,A6DDnB,AzBGmB,AEDAA,ACCA,AxLFA,AKAA,CgUDCuuD,A3QCV,AYDU76G,A/JAA,AnBEvB,ACCA,A4PFa,AYDUA,A6CAA,AnBEvB,ACCA,AnLFa,AYDUA,CqDAzB,A3JA0B2pP,AkPA1B,AiDA0BA,A7LA1B,CyCC2B5jP,AjKF3B,AIAA,AXI2Bq/O,A+PFAr/O,A2CF3B,AIAA,AXI2Bq/O,AhLFAr/O,CgUDP,AhRCQrC,AiBDAwoI,A7KA1B,AIAAstD,AcAG,AJAuB4vD,AqOCA1lP,AiBDAwoI,A+BA1B,AIAAstD,AcAG,AJAuB4vD,A1MCA1lP,AiBDAwoI,CqRA5B,AjPCoB,AFDR,A1JAT,AmPCiB,AFDR,AkDAT,A5LCiB,AFDR,CuDCO,A1IDW09G,AiOCX,AkEDWA,A9MCX,CsSDY/pP,A5OCA,APDAqH,A8FCA,APDAA,ArICA,APDAA,C4DCChB,APDA,AtJA1B,AcAD,AsOC2BA,APDA,AsDA1B,AcAD,AzMC2BA,APDA,CuDCC6H,AFDAzO,A1JA1Bk6L,AIAA8jD,A+OC0BvvO,AFDAzO,AkDA1Bk6L,AIAA8jD,AhMC0BvvO,AFDAzO,CuDCC,A1IDA4O,AJAA,ArBGxB,A0PFwB,AkEDAA,AJAA,ArBGxB,ArLFwB,CsSDlC,A9PAA,AkBC2B,AYDQ,A3JA9B,AJA8BgpM,ArBGjC,A+PFyB,AYDQ,AiDA9B,AJA8BA,ArBGjC,AhLFyB,AYDQ,CyCCChpM,AYDAlO,AzKAlC,AoPCkCkO,AYDAlO,AmCAlC,A3LCkCkO,AYDAlO,CqRFH,AjPGI0D,AKAA,AYDF,A7KAxB,AkBA0B+zF,AiOCA/zF,AKAA,AYDF,A+BAxB,AkBA0B+zF,A9MCA/zF,AKAA,AYDF,CqRAG,AjPC7B,AiBDmB,A7KAhB05O,AkBA0B,AiOC7B,AiBDmB,A+BAhBA,AkBA0B,A9MC7B,AiBDmB,CkCAhB,AtJAC5jD,A6OAD,AsDACA,AlMAD,C4DC4B,APD/B,A5IA+B,A0OCA,APD/B,AgEA+B,ArMCA,APD/B,CuDCgC3sL,AKAd,AYDci+O,A7KAtC,AkBAsC1B,AJAA,AqOCAv8O,AKAd,AYDci+O,A+BAtC,AkBAsC1B,AJAA,A1MCAv8O,AKAd,AYDci+O,CoCCvC,A9IDsC,AqOCtC,A8DDsC,A1MCtC,C0DAyC/kP,APDA,AtJA1B,AUAiB,A0OCSA,APDA,AsDA1B,AUAiB,ArMCSA,APDA,CqDA3C,A1JAkByzL,AIAApjE,AUAb,AmOAL,AkDAkBojE,AIAApjE,AUAb,A5MAL,EjGAa,AUAiCloH,AyRAjC,AUAiCA,ChJCC,A/IDA,AJA1C,A0OC0C,A6DDA,AJA1C,ArMC0C,CqDACJ,AjKD1B,AkBA0BopM,AsOCAppM,A2CD1B,AkBA0BopM,AzMCAppM,C5GDzBwvO,AcA0B7lJ,AqRA1B6lJ,AcA0B7lJ,C7SAzB+hG,AUA0B,AyRA1BA,AUA0B,EjTAhD,AmSAA,ClICyC,AYDU,A3JAA,AJAA5kH,A0OCV,AYDU,AiDAA,AJAAA,ArMCV,AYDU,CyCCClxE,AYDA1D,AzKA1B,AcA0B,AsOCA0D,AYDA1D,AmCA1B,AcA0B,AzMCA0D,AYDA1D,CyCCC,AYDA,AzKA1BgmP,AcAwB,AJAE,A0OCA,AYDA,AmCA1BA,AcAwB,AJAE,ArMCA,AYDA,CxHAzB,AkBAiB,AJAS1mP,AqRA1B,AkBAiB,AJASA,CjTDxD,AkBCyC,AiRDzC,AkBCyC,CpJCiB4O,A7JDlC,AcAkC5O,AsOCA4O,A+CDlC,AcAkC5O,AzMCA4O,CqDAf,AYDgBA,A7KCzD,AwPAyC,AYDgBA,A+BCzD,AvLAyC,AYDgBA,CyCChC,AYDiC,A7KCzD,AwPAwB,AYDiC,A+BCzD,AvLAwB,AYDiC,CyCC7C,A7JDoBsrL,AoPCpB,A+CDoBA,A3LCpB,CqDAD,AnJDd,A0OCc,AyDDd,ArMCc,CqDAZ,AYD6D,A2EC7D,AYD6D,AxJC7D,AYD6D,CqDAR,A7KChDA,AkBDP,AJAgEx5L,AsPAT,A+BChDw5L,AkBDP,AJAgEx5L,AzLAT,CqDAF,AzKAd,AUA0B,AsPAZ,AmCAd,AUA0B,AzLAZ,CqDAzB,AzKAYo9O,AcA0BnzO,AkPAtC,AmCAYmzO,AcA0BnzO,A7LAtC,CtGAuC,AmSAA,CrTCxD,AcDyDiE,AqRCzD,AcDyDA,CjTCxDmvO,AIDC,AUAb,AqRCYA,AIDC,AUAb,C7SDA,AcCsE5lJ,AqRDtE,AcCsEA,CnSAtE,AJAuE,AuSAvE,AJAuE,CjTCpE,AIAD+hG,A+RAC,AIADA,CrRDuE,AJAAx5L,AuSAA,AJAAA,CnSAzE,AmSAA,CjTCkBw5L,AkBDyDvvL,AiRCzDuvL,AkBDyDvvL,CjTCrE,AcDN,AJA4E,AyRCtE,AcDN,AJA4E,C7SCrEszO,AmSAAA,CrRDuE,AmSAA,CrTCxD,AmSAA,CnSACA,AIArB,A+RAqBA,AIArB,GvSAA,AIAW/jD,A+RAX,AIAWA,IvSAiB,AIAb,A+RAa,AIAb,CvSFjB,AIEkBpjE,A+RFlB,AIEkBA,EvSChB,AIDW,A+RCX,AIDW,CvSCVojE,AmSAAA,G/RDqBA,AmSAAA,CvSCjB,AmSAA,CnSAC4jD,AmSAAA,E/RDoB,AmSAA,CvSCzB,AID0B+I,A+RC1B,AID0BA,GvSCf,AIDU,A+RCV,AIDU,GnSAW3sD,AmSAAA,CvSCjBA,AmSAAA,G/RDqB,AmSAA,CvSCjB,AIDkB6jD,A+RClB,AIDkBA,CvSCjBC,AmSAAA,E/RDV,AmSAA,CvSCX,AIHF,A+RGE,AIHF,EnSGE9jD,AmSAAA,EvSA4B,AmSAA,CnSH9B,AmSAA,C/RGM,AmSAA,CvSCJ,AIDKwsD,A+RCL,AIDKA,CvSCJxsD,AmSAAA,E/RDD,AmSAA,EvSCK,AmSAA,CnSAC6jD,AIDK7jD,A+RCL6jD,AIDK7jD,GvSCV,AmSAA,C/RDc,AmSAA,CnSACpjE,AmSAAA,CvSCJ,AmSAA,C/RDD,AmSAA,GvSCKojE,AmSAAA,C/RDMA,AmSAAA,GvSCF,AmSAA,CnSAC+jD,AIDK,A+RCLA,AIDK,CnSACD,AmSAAA,EvSC3B,AmSAA,C/RDsB,AmSAA,GvSCM,AIDKn3O,A+RCL,AIDKA,CvSHnC,AIGa,A+RHb,AIGa,CnSHb,AmSAA,CvSKE,AmSAA,CnSACqzL,AIDDA,A+RCCA,AIDDA,IvSCK,AIDD,A+RCC,AIDD,CvSCE4jD,AIDD+I,A+RCC/I,AIDD+I,GvSCJ,AIDD,A+RCC,AIDD,GvSCY,AIDD3sD,A+RCC,AIDDA,IvSCKA,AIDD,A+RCCA,AIDD,CnSACpjE,AmSAAA,EnSAL,AmSAA,CvSCS,AmSAA,CnSACknH,AmSAAA,E/RDC9jD,AmSAAA,CvSCrB,AmSAA,GnSA0BrzL,AIDD,A+RCCA,AIDD,CvSC1B,AID2Bo3O,A+RC3B,AID2BA,GnSAL,AmSAA,CvSCU,AmSAA,CnSLlC,AmSAA,C/RImC74N,AmSAAA,CvSEjC,AIFW,A+REX,AIFW,CvSEV80K,AINH,A+RMGA,AINH,EnSKEA,AmSAAA,EvSCK,AmSAA,CnSAC6jD,AmSAAA,C/RDF,AmSAA,CnSAC2I,AmSAAA,CvSCJ,AmSAA,E/RNH,AmSAA,CvSMc,AmSAA,C/RAZxsD,AmSAAA,GvSAgBA,AmSAAA,C/RAZ,AmSAA,CnSAC2sD,AmSAAA,EvSAe,AmSAA,CnSAC5I,AINvB,A+RMuBA,AINvB,GvSMG,AmSAA,GnSA0B74N,AmSAAA,CnSA3B,AmSAA,InSAgC,AmSAA,CnSNlC,AmSAA;AmZCE,ACEC,ApxBAJ,AlLAA,A+9BAA,AlMFM,AEGLy1T,AzIHAl2T,AeEF,AIAIy4F,ACDA,ACCW,ACHb,ArBGF,AyBAC,ACAD,ArBDC,A8BEC,AQFD,ACFC,ACEI,A1wBEN,AiiBLA,A7DGC,AMDC,AEED,AKAE,AKAA,AJAF,AHFC,ASED,ACCC69I,A7LDD,AyBKA,AIAA,A1BLD5oG,AiCCA,ACDAk3F,ACFE,AKCE,AJAAl0K,ACDF,AvBGEq9F,ACAA,AEAD,ACCCA,ACAFkzE,A+OJA,AOEC,AKAA,AJAF,AHFC,ASED,ACCCqV,AaAF,AKFE,AHCD,AyBKA,AIAA,AzBLD5oG,AgCCA,ACDAk3F,ACFE,AKCE,AJAAl0K,ACDF,AvBGEq9F,ACAA,AEAD,ACCCA,ACAFkzE,AhMJA,AOEC,AKAA,AJAF,AHFC,ASED,ACCCqV,EiaAA4/E,AzIHAl2T,AnOGAs2O,AvKCArV,A8PDAqV,AqCCArV,AjLDAqV,C6CHA,AKAA,AkFAA,AKAA,AjJAA,AKAA,C2RAE,AmBEA79I,A5YDA/nC,AtBEAq9F,AICAA,AqTHAr9F,AtBEAq9F,AICAA,CwZJO,AhTAN4hC,CgTAD,AzKASq+H,AjHCJlkU,ArBCHgmM,AmCCA,ASDAjiM,A1RDArF,AhLCA,AoCDA,AjBGA,AoPHAA,A6BCA,AmCDA,AjBGA,A3LHAA,C2aEC,AnHJL,AcIK0rM,ASDA,A1RDA,AhLCA/3M,AkCAA,ACFAk8I,AoOCA,A6BCAl8I,AiCAA,ACFAk8I,A3MCA,CilBCCryI,AlhBCA,AxJDA7J,AnBEA+F,AIAA,A8PDA,AoDDA/F,AnBEA+F,AIAA,AjLDA,CukBDC,AtKCI,ArHFJmX,AgBEP,AhwBAO6/N,A0eHA,AxIAP,AKCOwM,AJAA/0K,ACDA,AtBIA,AmPJA,A4BGAuoK,AKFA,AmCDP,AKCOwM,AJAA/0K,ACDA,AtBIA,A5LJA,CuSAP,AoBCE,AnBCM,A4CAA7uE,ACDOmI,AhSDP,AKCAH,AUEA,AwEHA,AKCAA,AUEA,A3JHA,AKCAA,AUEA,C2SDC,AiBCA,AUFO,AhSDP,AKCA,AUDW,AlJCX,AJAP,ACDOG,AvBGA,AICA,AgPJA,AKCA,AUDW,A0DCX,AJAP,ACDOA,AvBGA,AICA,A/LJA,AKCA,AUDW,CukBEV,A5RAAmpM,AhQDAhuM,A7IDA3F,AEAH,AvBGGg6O,ACCAh5N,AGAAg5N,AqPHAr0O,A+DDA3F,AEAH,AvBGGg6O,ACCAh5N,AGAAg5N,A1LHAr0O,CilBDR,A/SAS9H,ACEAi0H,A7tBCb,AkWHE,ACCW5gD,ArBGA,A+QDb,AwCHE,ACCWA,ArBGA,CkPJQ,AnHCPzuE,AyBCA,ACDOhG,AnaAPypP,AmSAAA,CqGCH,ACDP,AyBCWxjP,A/RFA,AvICA,A8NDA,AqECA,AjNDA,C0TEX,A/uBCY,A+TDhB,AwCDgB,AHDA,AtBIA++O,A+QDA,AKFAh/O,ACChB,AuCDgB,AHDA,AtBIAg/O,CkPJQ,AvIAtB,AoBCe,AjQAP,A9ICV,AGFE,AkOCQ,A4BAD,AkCCT,AGFE,A7MCQ,CuTCchlP,ApBAN,AmCCA+3M,ASDR,AtaDQkxC,AtBEd,AICA,ACAap3E,AoTHCo3E,AtBEd,AICA,ACAap3E,CoJFE,ACDO,AhSDPrrF,AKAjB,AhLEiB,AwCDA,AHDAh7D,AvBGA,AICA,AgPJAg7D,AKAjB,A6BEiB,AuCDA,AHDAh7D,AvBGA,AICA,A/LJAg7D,AKAjB,C+UEQ,ACDiBrnF,AzaCP,AMDX,AHDW,AvBGA0O,AICAu3O,AmTFA,AMDX,AHDW,AvBGAv3O,AICAu3O,CiPNL,A3XEJ,AtIAUr3O,AvBGjB,ACAA,AmPHO,AsEAUA,AvBGjB,ACAA,A5LHO,CwSEW,A4CAA5O,AlaDAU,AHDF,A8PCE,AwCAAA,AHDF,C0GEL,A1YDQ,AHDJ,AvBGI,A6TFA,AHDJ,AvBGI,CgJAZ,AtRHa,AvICA,AtBEA,AoPHA,AqECA,AtBEA,A3LHA,C4TEO2L,A9YDNurM,AtBEF,AICJ,ACAX,AoTHiBA,AtBEF,AICJ,ACAX,C4HFO,AyBDT,AnaAoB,AHDAhpM,AsSCA,AHDAA,C4NAnB,A5fCH,AHDe,AlBIOzG,AwTHtB,AHDe,AlBIOA,C4HFQ,AwBAN,A/RFAm/E,A7JGA54E,AICA0W,AgPJAkiE,A+CGA54E,AICA0W,A/LJAkiE,C9ECC5mF,A1BEzB,AICA,AyTHyBA,A1BEzB,AICA,C1IJO,AnICmB,AJAA,A8NDnB,AiCCF,AwCAqB,AJAA,AjNDnB,CoVEoBtB,AtaDAsB,AlBGA,ACAvB,AoTHuBA,AlBGA,ACAvB,CwGFuBygB,A4CAC,AtaDF,AlBGEiE,AqTHF,AlBGEA,CqJFCplB,A/RFAg4P,AnICAppP,AJAT,AlBGpB,ACA4B,A+OJCopP,AyECAppP,AJAT,AlBGpB,ACA4B,AhMJCopP,C9EC7B,AJAA,A+PA8B,AwCA9B,AJAA,CuFCkB,AnPFZ,AuFAA,A5IAA,C9EC0B,AmSAA,CmFCA,CtXDEt3P,AmSAAA,C+HC5B,A/RF6B++E,AnICnC,A0NDmCA,AyECnC,ArNDmCA,CoVDrC,C/RCQ,AnIC+B,A0ND/B,AyEC+B,ArND/B,GqDCF,AuFAA,A5IAA,CqDAC,AuFAA,A5IAA,C6KAqC54E,CAArC,ExHAI,AuFAA,A5IAA,C6KCPA,CADG,CACD,CxHDSygF,AuFAAA,A5IAAA,EqDAR,AuFAA,A5IAA,GqDAa,AuFAA,A5IAA,IqDAI0wK,AuFAAA,A5IAAA,EqDAlB,AuFAA,A5IAA,IqDAwB/4K,AuFAAA,A5IAAA,EqDDtB,AuFAA,A5IAA,GqDEF,AuFAA,A5IAA,CqDAC,AuFAA,A5IAA,IqDAI,AuFAA,A5IAA,IqDAIoI,AuFAAA,A5IAAA,EqDAR,AuFAA,A5IAA,GqDAa,AuFAA,A5IAA,IqDAIC,AuFAAA,A5IAAA,EqDAjB,AuFAA,A5IAA,GqDAsB,AuFAA,A5IAA,IqDAI0wK,AuFAAA,A5IAAA,EqDA3B,AuFAA,A5IAA,IqDAiC94K,AuFAAA,A5IAAA,EqDF/B,AuFAA,A5IAA,GqDGF84K,AuFAAA,A5IAAA,EqDAE,AuFAA,A5IAA,GqDAGwB,AuFAAA,A5IAAA,EqDHJ,AuFAA,A5IAA,IqDGU,AuFAA,A5IAA,CqDHjB,AuFAA,A5IAA;AslBAE,ACGD,AvKCDshF,AzIHA,AeEF,AIAIhjI,ACFezwL,ACEjB,ACJA,ArBIA,A0BAa,ASEb,AvBHK,AwBDL,AQGA,ACHI,A1wBGJ,A0eAD,AODA,AKAA,APHC,AmBCA,ATGA6zO,A1LDAjY,AiCCF,ACDEA,ACFD,ArCDM,A0CED,AvCAC,AaEHvwE,ACCAA,AEPW,ACOXA,ACAA,A+ODH,AODA,AKAA,APHC,AmBCA,ATGAwoF,AGAF,AUAE,AKHO,ACEPjY,AgCCF,ACDEA,ACFD,ArCDM,A0CED,AtCAC,AYEHvwE,ACCAA,AEPW,ACOXA,ACAA,AhMDH,AODA,AKAA,APHC,AmBCA,ATGAwoF,AGAF,E8ZAE4/E,A5WAA5/E,A1LDAjY,AkCAAA,A+OCAiY,AmBDAjY,AiCAAA,AhMCAiY,CwkBLA,C7RIEpjD,AlbHOr9L,AgBIPi4J,ACCAA,AGAAA,AiRFElyK,AFHKia,AgBIPi4J,ACCAA,AGAAA,E4HJerrJ,ACEb3mB,ACFMyM,AcIN2rM,AjRHAp4M,AuFAAA,A5IAAA,CqTCC,ACFa,ACEb,ACJL,AlvBKKo9O,A+eJL,AUIK,A5LJO,AyQAZ,AUIK,AaAAA,AGJO,AtKAZ,AUIK,CukBDC3uM,AtKCA,ArHHanxB,A9ZIbtP,AmSAAA,CsZFC,A/SFAiW,AoBAW,AnBEXxD,AYDO+1L,AwBDPhzM,AQGA0K,AvQHAg+H,ATGA,AzLFOxnH,AkBGP,AuQJAwnH,ATGA,AGAA9xH,AeDE,AEDKsK,AiBGP,AxKJAwnH,ATGA,AGAA9xH,C8ZAI,AtHDHi9L,ACFS,ACET,AgBFR,AQGQ,ACHyB3zM,A1wBGjC,AyfJoB,A5LALqC,A0CEP,AvCAH,AgRFe,AaIpB,AKDUsL,AFHKtL,A0CEP,AtCAH,AhKFe,CwRCpB,AqBEA,AyBFI,A3cEK,AkCAA,AMDA+e,AvCAOwf,AaEP,ACCA,AGAA,AkRFA,AiCAA,AMDAxf,AtCAOwf,AYEP,ACCA,AGAA,CuZFC2kL,A9SAA,AmCEA,AhcHL,AaEKy0B,ACCAF,AGAAE,ACAA33O,AkRHL,AYEK23O,ACCAF,AGAAE,ACAA33O,C0HFC,ACFaI,AnBEbqvH,A7tBCA,A+TDA,AkCAA,AMDA,A4OEb,AUAa,AMDA,AiCAA,AMDA,AnMEb,CySH2B,AyBGbl2H,A5cJO,AGEA,AmREP6G,AeDR,AFHe,AIEA,A7JEPA,CySHcmX,AgBIboM,AncLO3P,AsRItB,AeDiB5T,AFHK4T,AzJItB,CwSDgB,ACFW,A9OAzB,A3JCc,ArBGA,AuQJd,ASEI,AwCDU,ArBGA,AxKJd,CmSAiB,AzYCFlN,ArBGAzE,AiQDA,AeHf,AwCCeyE,ArBGAzE,A9KDA,CsRDL,A0BAYpF,AvvBCNq6O,A6TJX,A0CEW,A1BEd,ACCA,AGAA,A4QDcA,AKJS,AFApB,A0CEW,A1BEd,ACCA,AGAA,CyGFF,AYDK,A5ZEYrvO,ACCA,AGAAu3O,AiRFE,AcCFv3O,ACCA,AGAAu3O,CuZFC,A5RAhB,ANDuBjvC,AgCElB,A5bAL,ACCA,AkSDA,ACCA,C0ZFiB,A3QEA,AhwBDR,AuWFQ8yC,ArBGT,A2QDC,A6CFQA,ArBGT,CsZFQ,A9rBCE,ACCA,AIAA3hP,A8RDA,ACCA,AIAAA,CsZLlB,AtKFW,A9GKA,AkBCQjE,A5bAA,ACCAkhB,AkSDA,ACCAA,CwHHhB,AgCEE,AzwBAe,A6UAF,ACClB,AGAoB,A4QDA,AmBAF,ACClB,AGAoB,CmIFO8c,ASEN,AjcFD,AkCAA,AkQAA,AiCAA,CqGDS,AvZGP,AmSAA,CoJApB+2K,AlaHqB,A1BEAvqM,AICA0W,AyTHA,A1BEA1W,AICA0W,C7QHCwyL,A1BExB,AICA,AyTHwBA,A1BExB,AICA,C4IAyBe,A9aAA/wM,AmSAAA,CkIFd,AtaEe,ACAlB,AkSAkB,ACAlB,CpSAmBwd,ACA3B,AkSA2BA,ACA3B,CkIFkCyuB,AkBE3B,AxbAP,AmSAA,C7QH6B,AmSAA,CnSACnzC,AmSAAA,CsHGC,AzZHF,AmSAA,C6GClB,ASEqB4L,AzZHT,AmSAA,C+HGX,AlaHK,AmSAA,C6GCuBwnC,AhZDNnpC,AmSAAA,CnSAjB,AmSAA,CnSAL,AmSAA,EnSA0B,AmSAA,C6GC3B,AkBET,AlaHU,AmSAA,E6GCmC,CkBE1BvL,CTAA,ASAC,AlaHqBmO,AmSAAA,CsHGCsrM,AzZHA,AmSAA,CnSAC,AmSAA,CsHGC,ASArB30M,AlaHmB,AmSAA,C+HGlB,AlaHpB,AmSAA,C+HGqB6F,CTAsB3B,EAA5B,AzZH8B,AmSAA,CsHGrD,AzZHI,AmSAA,C+HGuB,CAAQwG,AlaHqB,AmSAA,C+HGpB,GAAG4D,CAAZ,CAAvB,GACAymM,KAAK,KAAK,QAAV,GAAqB/0M,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWtD,IAAI,CAACoC,IAAL,CAAU2J,CAAC,GAAC,CAAZ,CAAX,IAA6BpT,CAA7B,GAAiC8E,CAAC,CAAC6F,KAAF,CAAQ6E,CAAC,GAAG,CAAC,EAAE4D,CAAC,GAAC,CAAJ,CAAb,CAAtD,GACAtO,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWyI,CAAX,IAAgBpT,CAHpB;AkQJE,ACIH,AzKHM,AEIL4pC,AzIHD,AeED,AIAG,ACH8B,ACE/B,ACJA,ArBKD,A0BAC,ArBDK,A8BEL,AvBFA,AwBDD,AQMA,AzwBHC,AiiBLF,A7DGO,AWAL,AmBDD,ATGCmyN,ApKIK,AIAA,A1BLH,AiCCJ,ACDI,AMDI5tP,AJDJ,ACDF,ApCEA,AaEEmlK,ACCAA,AGAAA,ACDA,AoPFF,AmBDD,ATGCyoF,AGAA,AUAA,AKDD,AsBKM,AIAA,AzBLH,AgCCJ,ACDI,AMDI5tP,AJDJ,ACDF,AnCEA,AYEEmlK,ACCAA,AGAAA,ACDA,A3LFF,AmBDD,ATGCyoF,AGAA,CsRHF,CwIGEnyN,A5WAAmyN,AuFAAA,A5IAAA,EiaAE,AnIFOnmD,ArZEPtiC,ACCAA,AGAAA,A+RDAA,ACCAA,AGAAA,E+OLS4+G,AEIA,ApHFA1iR,ACFE8wE,AKGT44H,ASEAl3G,A/NNAqxO,CgNGJ,ACJA,AlvBMKz0F,A6lBAAA,C8aDCh+O,ApRAA,ArBDO,A8BGP,AvQDA,AlJFAuN,ArBGAwzM,A8PDA,A0DFAxzM,ArBGAwzM,AjLDA,CqSFC,ArQAOhlB,AWAP,A1JMOyqD,AIAAgB,A1BLPtE,AkCAAA,AMDA,AJDAv4O,ACDA0hB,ApCEA2Y,AsQAA,AaEA,AqCIOwhN,AIAAgB,AzBLPtE,AiCAAA,AMDA,AJDAv4O,ACDA0hB,AnCEA2Y,A1KAA,AaEA,CvcAP,AyfAQ,AlJFA,AJDA,ACDR,ApCEQ,AkBGA,A8PDA,AGAA,AUAR,A6CFQ,AJDA,ACDR,AnCEQ,AiBGA,AjLDA,AGAA,CgTDC9C,ArBDQ,A8BGR,AvQNW,AlJGb,AvCAE,AaEA,ACCA,AGAA,A+PNW,AGKXr7B,AuDFF,AtCAE,AYEA,ACCA,AGAA,AhLNW,AGKXA,C2RFJ,A8BEL,AzZFM,AvCAE,AaEEu3O,ACCAA,AGAAD,AkQDA,AuDFJ,AtCAE,AYEEC,ACCAA,AGAAD,A7KDA,CkSFC,AzuBEA,AiiBLA,A9LEA,AnCCX,AkBGWzvO,A2QDA,AyCHA,AlCCX,AiBGWA,CsZFC,AlSDA,ApZMP,AtBLH,AkCAA,AEFA,AjBIU,AsSGP,ArBLH,AiCAA,AEFA,AjBIU,CgPRC,AjYKR,A/IMegkK,AkBNP23E,A4OEA5jP,AqCIOisK,AkBNP23E,AnMEA5jP,C4ZJQ,A5GGP,AdDA,AxMHA,A7DGO2xM,AjIDPztM,AmSAAA,CqYEC,ApRAA,A9ZKV,A1BLU,AkCAA,AMDT,AJDS,AjBIA,A0SGV,AzBLU,AiCAA,AMDT,AJDS,AjBIA,CsZNb,ApRIY,AvvBCEszO,AyVIOvrE,A1BLrB,AkCAA,ApBCA,ACCA,AIDA,A2QAcurE,A+BIOvrE,AzBLrB,AiCAA,ApBCA,ACCA,AIDA,C8OJsB,A5GGxB,AxQDgBtuK,AxIACmJ,A1BEAmB,ACCA7H,AwPHDzC,AaEC,AuDFAmJ,A1BEAmB,ACCA7H,AvLHDzC,AaEC,CkSFCoyE,A1PAX,AxIAW,AJDA2hB,AtBGhB,ACCA,AwPHK,AaEWzvF,AuDFA,AJDAyvF,AtBGhB,ACCA,AvLHK,AaEWzvF,CvcAP,AuWFQ,AJDjB,AlBIA,A4QDS,A6CFQ,AJDjB,AlBIA,ChJHG,AWAc,A1JMd,AkBNa,A1BEE,ACCA,AwPHD,AkDMd,AkBNa,A1BEE,ACCA,AvLHD,CnFAF,AJDI,AtBGAgG,ACCnB,AqQDW,AuDFI,AJDI,AtBGAA,ACCnB,A1KDW,CkSFC,AzuBEQ,AoeFOg9M,A/IMA,ARJ3B,AsQAoB7kN,AUAA,A2BIO,ARJ3B,AzKAoBA,CkSFCmwM,AxMHzB,AxMSO,AUPkBrsM,AgPGV,AyCIR,AUPkBA,A/LGV,ChGFW0/O,AJDtB,AgPGM,AuDFgBA,AJDtB,A/LGM,C9GIwB5C,AmSAAA,C5nBLhC,AuWD0B,AJDA,A0PE1B,A6CD0B,AJDA,CmGCZ,AzuBAA,A6lBAA,C7lBEc,AmlBAA,AUAA,AtJAA,C4ZJvB,A1HEwBtwC,ClYAC3xL,AmSAAA,EtKAzB,A3IMA,AcNC,A4OE0B3e,AyCI3B,AcNC,AnME0BA,C4IAzB,A5IAA,C6BFkC,A3IMA,AmSAA,GzCJJ,A5IAA,C4IArC,A5IAA,EkSFc,KAA+B,CAAjC,CAAZ;A4HGAwoS,A1HDa,AKHZ,ACCD,ACJA,AKKA,ASCA,AvBDD,AiCFK,AtSEJ,AMEa,AKFX,AUEFj0C,ApKIA,AIAA,A1BLC,AkCAA,ACFHzR,ArCFO,A0CGA,AJDDr0K,ACDL,ApCEA,AaEGo9F,ACCAA,AGAD,ACFC,A+OCW,AKFX,AUEF0oF,AGAD,AqCIC,AIAA,AzBLC,AiCAA,ACFHzR,ArCFO,A0CGA,AJDDr0K,ACDL,AnCEA,AYEGo9F,ACCAA,AGAD,ACFC,AhMCW,AKFX,AUEF0oF,AGAD,E8ZACi0C,A5WAAj0C,AuFAAA,A5IAAA,CrIJiB,AkCAC,AkQAD,AiCAC,ClSChB,ArCFOt0P,AgBKP4rK,ACCAA,AuTJA,ArCFO5rK,AgBKP4rK,ACCAA,C/QJC5xK,AmSAAA,C4GAW8R,ACFEA,AKGGkgM,ASEPiG,A5RFRj4M,AjIDAw0E,AmSAAA,C2GAJ,ACJA,A7ZWK0tK,AIAAA,A5BTO,A0CCR,AiRQCA,AIAAA,A5BTO,A0CCR,C6GEiB,ASEP,AvQAR,AtJHA,AjBIAhiC,A8PDA,AsDHA,AjBIAA,AjLDA,CiaAC,AtXFAtgN,A5IDAiK,AmOCAjK,AgEDAiK,A5MCAjK,CqDAC,AUEA,A5LLO+F,AsCET,AjBIE,AoPHA,AUEA,AgBLOA,AsCET,AjBIE,A3LHA,AUEA,CiaAG,A9GFay7B,ASEP,A7ZHb,AtBGK,ACCA,AwTJL,AtBGK,ACCA,C+IFT,A7ZFU,AtBGAk8M,ACCAA,AwTJA,AtBGAA,ACCAA,CyJLC19O,A3REA,AxIAA,AJDP,AjBIOgO,AoPHA,AoEAA,AJDP,AjBIOA,A3LHA,CgVFC,A3REV,A7IDJ,ArCFqB,AqBMP,AoPHV,A+DDJ,ArCFqB,AqBMP,A3LHV,C0CAW,A/IMb,AIAA,A5BToB5H,A2TSpB,AIAA,A5BToBA,CuJGS,AxQAfpG,AuFAAA,A5IAAA,C6TAgBwhC,AmBFjBtzB,A3REE,A7IDA,AKCA4W,ArBGAxH,AoPHA,A+DDA,AKCAwH,ArBGAxH,A3LHA,CiTCOkkB,A+BHlB,AtSEYz+B,AMEMqH,ArJIN4nK,AIAAA,A5BTX,AsCEWp9F,AtBGd,ACCA,AIFA,A+OCoBxqE,AuDIN4nK,AIAAA,A5BTX,AsCEWp9F,AtBGd,ACCA,AIFA,AhMCoBxqE,C9EFL,A1BEA,ACCA,A4THA,A1BEA,ACCA,CyJLD,A3REE8D,A5IDA,ArBIhB,AwPHgBA,AgEDA,ArBIhB,AvLHgBA,CqDAhB,A5IDiBjE,AmOCjB,AgEDiBA,A5MCjB,C6TAiC,AmBFjBjK,AnaEE,AJDF,ArBIE0kB,A4THA,AJDF,ArBIEA,C0HFP,AYDuBplB,AmBFhC,A3REiB,AxIAV,AJDK,AtBGK0O,ACCnB,AwPHmB,AoEAV,AJDK,AtBGKA,ACCnB,AvLHmB,C0CAC,AMET,AvIHS,AtBGpB,AoPAW,AqEHS,AtBGpB,A3LAW,CgbRA,A1HOgB9H,A+BHR,AtSEE0xL,AWAA53L,A1JMvB,AIAA,AcNuB,AJDP,AmOCOA,AkDMvB,AIAA,AcNuB,AJDP,A5MCOA,CgDEO,AKF5B,AlKEsB,AoPAM,AKF5B,A0CEsB,A3LAM,AKF5B,C7GEuBgO,AmSAAA,C2HDZ,A5PDavB,AlKExB,AyPFwBA,A0CExB,AtLFwBA,C6TAI,AxQAH,A5IDA7B,AmOCA,AgEDAA,A5MCA,CiTCOxE,A5PDNpG,AuFAAA,A5IAAA,C0CAZ,AWAW,AuFAA,A5IAA,C6TAgB,AnRAb03M,AWAJ,AuFAA,A5IAA,CiTCb,AYDgB,CAA7B,ApZDgC,AmSAA,CqGEO,A5PDNxwM,A5IDAytE,AmOCAztE,AgEDAytE,A5MCAztE,CqDAC,AuFAA,A5IAA,CqDAClH,A5IDA,AmOCAA,AgEDA,A5MCAA,C0CAC,AWAF,A5IDEiK,AmOCF,AgEDEA,A5MCF,C0CAG7J,AWAJ,A5IDE,AmOCF,AgEDE,A5MCF,CvFDA,AmSAA,CnSAM,AmSAA,CnSAN,AmSAA,CvJCQ,A5IDT,AmOCS,AgEDT,A5MCS,CvFDd,AmSAA,GvJCkBsD,A5IDAixE,AmOCAjxE,AgEDAixE,A5MCAjxE,C0CA7B,AWAiB,AuFAA,A5IAA,C0CAjC,AjID+C,AmSAA,CnSACuG,AmSAAA,CnSAD,AmSAA,CvJCG8D,A5IDL,AmOCKA,AgEDL,A5MCKA,CqDAC,A5IDA,AmOCA,AgEDA,A5MCA,CqDAC/N,A5IDP,AmOCOA,AgEDP,A5MCOA,CqDAD,A5IDxB,AmOCwB,AgEDxB,A5MCwB,CqDAD,AuFAA,A5IAA,EvFDM20E,AmSAAA,CvJCCjxE,AuFAAA,A5IAAA,CqDA/B,A5IDgC,AmOChC,AgEDgC,A5MChC,CvFDiCuG,AmSAAA,CnSAD,AmSAA,CnSAF,AmSAA,CnSAM,AmSAA,CnSAN,AmSAA,CnSApD,AmSAA;AqYGF,AxKHG,AEILu/N,AzIHK,AeEL,AIAA,AEHA,ApBGF,A0BFE,ArBAK,A8BCL,AUFM,A1wBGN,AiiBLF,AvDME,AePoB,ApKWrB,AIAC,A1BLAiZ,AkCAAA,ACFAF,AKCM11O,AJDH,AtBGDmlK,ACCAA,AGRW,ACKX,A+OEF,AePoB,AaMpB,A2BKD,AIAC,AzBLAywE,AiCAAA,ACFAF,AKCM11O,AJDH,AtBGDmlK,ACCAA,AGRW,ACKX,AhMEF,AePoB,CqDAf,AuFAA,A5IAA,CiaOLw3D,AtiBDAiZ,AkCAAA,ACFAF,AiQEAE,AiCAAA,ACFAF,E6FAShkP,ArZGPyzK,ACCAA,AkSDAA,ACCAA,EkPLSkgK,AxHGPx7H,AMHaxwM,ApBGb8tM,A0BF2CtwM,ASE3B1D,A/NLhBgyU,AvDMA9jU,AuFAAA,A5IAAA,CgbAC,A9GHL,ASEqB,AhwBAhByY,A0eCA,AjJIAyvG,AwOJA,A4BDAzvG,A+BKAyvG,AvMJA,CsTDC,A3uBAN,AuWDMvpH,ArBGA4lG,A2QFN,A6CDM5lG,ArBGA4lG,CgPDK,AzIHGohG,AmBEP,AEHP,AfCc,AzYOd,A1BLO,AkCAA,AMDA,AqRMP,AzBLO,AiCAA,AMDA,CmFCC,AmCAgB,AtRChBzpM,AnIFA,ArBGA,A+ODAA,AyEFA,ArBGA,AhMDAA,CslBDCpK,AhSAAwhC,AqBDT,AhwBCS,A+TAA,AkCAA,ACFA,AKCF,A1BEE,ACCA,A+QFA,AMAA,AiCAA,ACFA,AKCF,A1BEE,ACCA,C0ZFC,AzSFO,AwCDP99B,AjbQA,AcNJ,A1BEIg6O,ACCAA,A8SGA,AcNJ,A1BEIA,ACCAA,C4GFCrvO,AKFN,AwCDM,A1wBGX,AiiBLW,AxMUA,ASPA,AhBIAgyM,A2QFX,A+BKW,ASPA,AhBIAA,EsZFE,ApqBDAupC,ArBAX,AwTAWA,ArBAX,CsZCO,AhSAK,A+BHAzuO,AzOFA,AvDMA,AuFAA,A5IAA,CsTDC,AdAA,AnPCA7b,AjJIAynP,AcNT,A0NESznP,A2DIAynP,AcNT,ArNESznP,CsTDD,A9ZCZ,ACCA,AkSDA,ACCA,C0HFF,AIAgBZ,AxYDCmO,A1BEA,ACCA,A4THAA,A1BEA,ACCA,C0ZFC4hC,A5RAX,AxYDW,AzBGAtoC,A4THA,AzBGAA,C0ZFC,AxKHO,AELb,AzIMR,ACEc,AtXDA,AzBGjB,A4THiB,AzBGjB,C2GJyB8d,AmBER,A2BHC,AnaEF,AmSAA,CgIFG9jB,AhSIb,A3KDY,AkCAA,AMDH,A1BEI6N,ACCA,AmPDb,AkCDY,AiCAA,AMDH,A1BEIA,ACCA,A5LDb,CslBDc,AxKHO,AvICxB,AnYOK,AZJR,ACCA,A8SGQ,AZJR,ACCA,C0ZFA,A1eLJ,A/LGwB,AmSAA,CuFAS,AlPGP,AnIFA47O,A1BEA57O,AoPAA,AyEFA47O,A1BEA57O,A3LAA,CslBDC,AjiBCzB,A7JAE,AoPAF,A+CAE,A3LAF,CqVJ0B,AjbQA,AcNA,AqRMA,AcNA,CgIFChO,AjbQ3B,AmSAA,C8IR0B,CAAN,CAAd,AnaEwB8kB,AmSAAA,EgIFE8zL,AnaE1B,AmSAA,OyNFD,AzFAkC,CAACl1M,CAAD,EAAI1D,CAAJ,EAAOG,KAAP,CAAP;AiQI5B,AtKCJk6U,AzIHA,AeCA,AICEhjI,ACJF,ACAA,ACAA,ArBIA,A6CHK,A1wBGN,AoeFC,AMGA,AKHE,AtJOH,A1BLG,AiCDJ,ACCI,ACFA,ArCHG,A0CIA,AJDJ,AtBGCrlC,ACCAA,AIJA,A+OGF,AKHE,AaGJ,AUDC,A+BKA,AzBLG,AgCDJ,ACCI,ACFA,ArCHG,A0CIA,AJDJ,AtBGCA,ACCAA,AIJA,AhMGF,AKHE,AaGJ,E8ZAEqoK,EtHDEhjI,AlbLOnxM,AgBMP8rK,ACCAA,AkRPO9rK,AgBMP8rK,ACCAA,E0HFE2kC,AMJkBvwM,ACAlBuF,CHIC,AGJA,A9QEA,AvKHO,A0CED,AyPFC,A0CED,CiGGL,AdAAjM,A3YEA8yG,AmSAAA,CuGJCvuF,AoBFA0C,ACAP,AvQKO,A3KDA67N,AiCDA2F,ACCA3F,ACFAA,A+NGA,AkBAA36O,AgBDA26O,AgCDA2F,ACCA3F,ACFAA,AhNGA,AkBAA36O,CokBDCvI,A5RAAZ,ACJR,AnbDeqH,AqBOP,A8QPOA,AqBOP,CgPDC,AzIHA,AeEAy7B,AIAP,AGJO,ArBIA,AzPFAv9B,AWAAwI,AlKGA,ACCA,AwPJAA,A0CGA,ACCA,AvLJAA,CqDAP,AlKGQixO,ACCAD,AwPJR,A0CGQC,ACCAD,AvLJR,C2aGS,A9fFA,ArBGAzvO,AiQDb,AuDFa,ArBGAA,A9KDb,CsRDcK,AzPFZ,ArKEE,AkCAA,ACFA,ArCHiB,AqBOP,AiQDAlI,AgBDV,AiCAA,ACFA,ArCHiB,AqBOP,A9KDAA,CqRHC,AsBFb,AlZGF,AnCJsBD,AsRMtB,AgDFA,AnCJsBA,AzJMtB,CokBDgB,AhSAA,A3YDAszL,AmSAAA,CwGCC,AOJA,AnbIAjnH,AkCAAA,ACFA,AhBIAj1D,AiQDA,AgBDAi1D,AiCAAA,ACFA,AhBIAj1D,A9KDA,CoSDD,AdAE,AzPFA0tM,AlIAd,ArCHG,AgBMH,AKCS,AmTJT,ArCHG,AgBMH,AKCS,CsZFMv8K,A/SFV,AeCP,AdCiBnvC,AnPCDoE,A7JACsK,AoPADtK,A+CACsK,A3LADtK,CslBDR,AjiBCD,A3KDL,AiCDJ,ACCI,ApBCA,AoPAK,AkCDL,AgCDJ,ACCI,ApBCA,A3LAK,CvGCL,AIAiBsK,A+RAjB,AIAiBA,CuGJC,AlPGD,A1IFC8wE,AnBEA9wE,AKHlB,A+OGiB,AkEFC8wE,AnBEA9wE,AKHlB,AhMGiB,CslBDE,A9rBCnB,AmSAA,C2ZDM,A3qBDV,AmSAA,C0FCE,CDFO,A5XCiB0kG,AmSAAA,CwYCCxqG,CviBFzB,ApICF,AmSAA,CyFD6B+b,CxPAC7jB,ApICA,AmSAA,CkORf,AzIOgB,C+SEzB,A/SF0BwzM,E+SEEnlK,CAAC,E/SFjC,C+SEoC1oC,CviBFC,CAAC9B,EuiBEE,CAACmC,AviBFJ,CAAT,EuiBEQ,CAAS,AviBFA4kN,CuiBET,EAAY9iN,KAAK,EviBFE,CuiBEC5I,AviBFA2E,GAAD,CAA3B,EuiBEQ,CAAJ;AAC5BP,AxKJC,AEKLypI,AzIHD,AeAC,AIEE,ACJH,AEAG,ArBIF,A0BHA,ArBAK,A8BGL,AUHG,AzOHL,AvDOI,AKHD,A1JOH24G,AtBLG,AiCDD,ACCC,ACFA,AKCKj5O,AJDP,AtBGGmlK,ACCD,AILC,A+OIA,AKHD,AaGD,AqCIF8zE,ArBLG,AgCDD,ACCC,ACFA,AKCKj5O,AJDP,AtBGGmlK,ACCD,AILC,AhMIA,AKHD,AaGD,E8ZAA7kC,CtXNA,AhLDiB,AkCAC,ACCH,AoOAf,A6BDiB,AiCAC,ACCH,A3MAf,CwSESonE,ArZIPviC,AmSAAA,C0JTA,ArbaC,AmSAA,CmZLCtuK,AxKJOyuU,AxHIPv7H,AYHAgB,AtNHAq6H,A5MWA7xU,AWNAgoP,AwRMAhoP,AWNAgoP,CwYCC,CAACnoP,A5RAAm3M,AQHA,ArBAO,AxPIPp3M,A1IFA,AOAA6M,ArBGAiyE,A+ODA9+E,AkEFA,AOAA6M,ArBGAiyE,AhMDA9+E,CwSDC,AmCAA0gG,AtRCA,AnIFA,A0NEA,AkBAA,AuDFA,ArNEA,AkBAA,CoSHP,ApYCQ,ArBGA,AiQDA,AuDFA,ArBGA,A9KDA,C8ZAC,AtHDP,AGJO,AKCA0xG,ArBAQ,A8BGR,AUHA,A1aEA5Y,AOAF,A1BEE,AsQAArzL,AgDFAqzL,AOAF,A1BEE,AzKAArzL,CokBDL,AzSHC,AxPIKzC,AnIFJ,A1BEIg6O,AoPAAh6O,AkBAA,AuDFJ,A1BEIg6O,A3LAAh6O,AkBAA,CokBDCV,AtKCA,AtHDArE,AGJAqB,AKCX,A7QIW,AxJCA,A+ODA,AoDCA,AhMDA,C6TLF,AcICm4M,A/NNE,A/MQA1lG,AmSAAA,CkILC,AlaQf,AWNe,AOAA,A4OEA1sG,AqCIf,AWNe,AOAA,AnMEAA,CyTDN,AhaDOu3O,AOAR,ArBFJ,AiTEYA,AOAR,ArBFJ,C6HDapvO,AjNFA,AvDOA,AuFAA,A5IAA,CslBDC,AzRJd,AxQKQ,ArJIM,AkBNArB,A1BEd,AoPAQ,AuDIM,AkBNAA,A1BEd,A3LAQ,CslBDOiyB,A9SADre,A7XDP,AOAQ,A1BEAzS,AsQAA,AgDFR,AOAQ,A1BEAA,AzKAA,C2SLC,AcIFqqM,AzZDE,A1BEhB,AsQAgBrwM,AuDFA,A1BEhB,AzKAgBA,CmCAEtE,AnIFH,A0NEGA,AyEFH,ArNEGA,C8aLO,AtIIpB,AmCAW,AtRCG,A1IFD81L,AOAJ,A1BEI,AoPAC,AkEFDA,AOAJ,A1BEI,A3LAC,C8JAR,A5IAA,CsRDQ,A1ICC,A5IAA,C4ZLQ,ApHIP,AiBAJ9xL,AtRCK,AnIFDod,A0NEC,AyEFDA,ArNEC,C0TDAsyL,ArQCd,A1IFc,AnBEAppM,AoPAd,AkEFc,AnBEAA,A3LAd,C2UDV,A/NNF,AjMK2BovO,AOAnB,A1BEJ,AsTFuBA,AOAnB,A1BEJ,C2ZDS,AxbCej3O,A5IAAA,CokBDCnG,A5RAJ,AiBAA,AtRCM0D,AuFAAA,AkBAhB,A9JAgBA,AkBAhB,CokBDe,A5RAjB,ArQCmB,A1IF9B,AiOE8B,AkBAtB,AgDFR,A9ME8B,AkBAtB,CyTDiB1D,CAAzB,E2QAgCyuC,A3QAJ,AtRCM,AuFAA,AkBAF,A9JAE,AkBAF,CokBDrB,AjiBCkB,AuFAA,AkBAtB,A9JAsB,AkBAtB,EokBD4BzuC,CAAC,CjiBCG0D,AuFAAA,A5IAAA,CqDAC,AuFAA,AkBAFyC,A9JAE,AkBAFA,CokBDCsoC,AxbCA,A5IAA,CokBD5B,CAAP,AxKJC,AzXKsC,AuFAA,A5IAA,CqDAJ,AuFAA,AkBAG,A9JAH,AkBAG,C4IAnC,A5IAA,CmCAuCvgC,AuFAAA,AkBA9C,A9JA8CA,AkBA9C,CmCA+C,AuFAA,A5IAA,GqDAG,AuFAA,A5IAA,CqDArB,AuFAA,A5IAA,IqDA0BnI,AuFAAA,A5IAAA,IqDAI,AuFAA,A5IAA,CqDAC+H,AuFAAA,A5IAAA,KqDAL,AuFAA,A5IAA,CqDAWpK,AuFAAA,A5IAAA,CqDAC,AuFAA,A5IAA,GqDAGwK,AuFAAA,A5IAAA,CqDAf,AuFAA,A5IAA,CqDArD,AuFAA,A5IAA;AslBAE,AtKXS,AtHWXkpM,AEJF,ACAIrpM,ArBIF,A0BHArK,ASGA00M,AUHEj4M,A1wBGN,AoeHE,AMGE,AKFH,AUEc,ApKKboiP,AIAFuE,A1BLEpE,AiCFA,ACEAA,ACFAD,ArCJK,A0CKA,A1BEHzwE,ACTW,AIIX,A+OIA,AKFH,AUEc,AGCd,AUDD,A2BKEuwE,AIAFuE,AzBLEpE,AgCFA,ACEAA,ACFAD,ArCJK,A0CKA,A1BEHzwE,ACTW,AIIX,AhMIA,AKFH,AUEc,AGCd,ElHICuwE,AtBLAG,AkCAAA,ACFAD,AsROAF,ArBLAG,AiCAAA,ACFAD,E0GEErrC,AQHA1zM,ASGA00M,AncNOt+L,AgBOPk4J,AmRPOl4J,AgBOPk4J,CuIJC,CNDC7xK,ACAA4N,AwBCA5N,A1aEAkoP,AmSAAA,C4GCC,AGJA,ArbFO,AmSAA,CuJGNzwC,A7QIAr5H,AjJIA,AONA,AdGAm0B,A+ODAn0B,A2DIA,AONA,AdGAm0B,AhMDAn0B,CwSDC,A7tBAAlwE,AoeHAjO,A3IQAA,ASPA,A2PEAiO,A+BKAjO,ASPA,CsYEC,A5RAA3B,AGJA0B,AKCN,ASGM,AtRCA,A7KPO4F,AqBQP,A+ODA,A+BPOA,AqBQP,AhMDA,CslBDCzG,A1RJA,AeIAU,AUHA,ArbQA,AtBLA,AiCDA8+E,ACCA,ACFA,ArBGA,A2SIA,ArBLA,AgCDAA,ACCA,ACFA,ArBGA,CgJDD,AUHEh7E,A7bIA45O,AmSAAA,C6GDC19O,AmCAT,AhwBAJ,A0eCaoK,ArJIA,AtBLA,AiCDA,ACCA,AfEAooG,A+ODApoG,A4BDb,A2BKa,ArBLA,AgCDA,ACCA,AfEAooG,AhMDApoG,CwSDC,AhaNO,AmSAA,CkJEN,ArbFO0P,AqBElB,A8QFkBA,AqBElB,C4HAY5L,ACAAlO,AcIA8nM,AhwBAA,AgWDAtO,A6PCA,AsCDAA,CwYCC,A1RJA,ACAF,ArBIE,CqBJX,ArBIF,AzPHF,AqBGsBtyL,AhKKxB,A5BXO,AgBOH,AmQDoBA,A4CKxB,A5BXO,AgBOH,A5KDoBA,CsUHlB,AhSIa,AeDJ,A5KCI,AoPAA,AeDJ,AgCCI,A3LAA,AeDJ,C2SAK,AEJA/G,ApBIAH,A6CHA44M,AhSIA54M,A1IFA,AnBEAgO,AoPAAhO,AkEFA,AnBEAgO,A3LAAhO,CslBDCyuC,A5RAAmoC,AlBAA,AnPCF,AeDQ7oE,AhKKN,AONAuvO,AnBEjB,AoPAe,AeDQvvO,A4CKN,AONAuvO,AnBEjB,A3LAe,AeDQvvO,CukBAL,AjiBAlB,AeAW,AwEAX,AeAW,A3JAX,AeAW,C4TAQ,A9ZFD,ArBGC,AwTHD,ArBGC,C6GDCrO,AmCAAu4M,AvQAMxrM,AzJF5B,AgPE4BA,AmDF5B,A/LE4BA,CukBAL,A1RJA,AxPIV,ApKKS,AtBLA,AkCAA,A+OAT,AwCKS,ArBLA,AiCAA,AhMAT,CukBAL,A1RJgBnN,CpBItB,A6CHE,AjRG2BuN,A5KCNmB,AmQDMnB,AgCCNmB,A5KDMnB,CqDAlB,A5KCX,AmQDW,AgCCX,A5KDW,C2SAK,AlBAS,C8SAC3E,A3QAA,AvQAMxJ,AuFAAA,A5IAAA,C2SALy4M,AlBAAn3M,AmCAA0gG,AvQAhB,AuFAA,A5IAA,C6SJJ,ApBIP,CoBJF,AeI4B,AvQAS/0F,AuFAAA,A5IAAA,CyRAL,AmCAX,AvQAR,AuFAA,A5IAA,CukBAT,A1RJ6B,CFIf,AiBAgBusM,AvQAM,AuFAA,A5IAA,CukBAL,A5RAjC,KiBAsC,CAACG,EAAD,CAAnB,CAAP,GAAkC,CAAlC,GACPH,MAAM,CAACG,EAAE,EAAH,CADC,GAEPJ,MAAM,CAACv3G,EAAE,EAAH,CAFX;A2QCEjyD,AxKLC,AvIGA,AeEL,AIAC,AEJC,ApBIEhuB,A0BHFm3L,ArBDG,A8BMJ,AULE,A1wBGH,AiiBPF,A7DIC,AMEG,AeCF,ApKKE,AIAF2qC,A1BLE,AiCHF,ACGE,ACFA,AKCC,A1BEDvwE,AKCAA,A+OHA,AeCF,AaAA,A2BKE,AIAFuwE,AzBLE,AgCHF,ACGE,ACFA,AKCC,A1BEDvwE,AKCAA,AhMHA,AeCF,E3GKAuwE,AmSAAA,CmHTA,CQCE3qC,ArBDOpD,ArZKPxiC,AKCAA,A8RDAA,AKCAA,EsZFEvjI,AxKLO2jS,AxHKPz7H,AdAAl2L,A0BHA,AtNJAmwQ,AxCOAn2B,AzJDA9lL,AgPCA8lL,AmDDA9lL,A/LCA8lL,CukBAC,ChSAC,AMJA9uP,AfAO,AxPKP6yE,A1IFA,AiOEAA,AkEFA,A9MEAA,CuSHQs1H,AqBFP,ApBIA,A0BHA1B,AvvBGA,AqVKAowC,AtBLAG,AkCAA+D,ACFAlE,A2PEA,A2BKAA,ArBLAG,AiCAA+D,ACFAlE,CsYECv5B,AjiBCA,AuFAA,A5IAA,CsTDCvS,AYHP,ArBDe,AzYSR,AONA,ACCP,ApBCO,AKCA,A0SGA,AONA,ACCP,ApBCO,AKCA,CwGFCj2L,AKJL,AzOIL,AzJDU+4K,AnBEAkkD,AKCAF,A8PFV,AmDDUhkD,AnBEAkkD,AKCAF,AjLFV,CuSAA,AMJW,AjvBIAL,A0eCA/yO,AjJIA,AwOJAA,A4BDA+yO,A+BKA,AvMJA/yO,CoEDCswP,ApKKV,AYLU,ACFV,A8OEUA,AwCKV,AYLU,ACFV,AjMEUA,CuSAC,AdAA,A9ZAX,AoSAA,C0HAYrsP,A5LPA,AjMMA,ACCZ,AkSDY,ACCZ,C6GJA,AjvBIK,AqVKQ,AWNAkvO,AEDAhrK,A2PER,A2BKQ,AWNAgrK,AEDAhrK,CsYEC,AtrBKd,AtBLc,AcCd,AKCA,AsSGA,ArBLc,AaCd,AKCA,CsZFetoE,A1RJA,AjvBIjB,AiiBPiB,AvDQA,A3KDf,AcCe,AKCAo2M,A+ODA,A4BDjB,AMAE,AaCe,AKCAA,AhMDA,CslBDC,AxKLO,AtIKP,AnPCArgN,AeDlB,AzJDU,AEDR,ArBGgBgO,AoPAAhO,AeDlB,AmDDU,AEDR,ArBGgBgO,A3LAAhO,AeDlB,CyRAmBA,AnPCA,A7JAjB,AKCA,A+ODiB,A+CAjB,AKCA,AhMDiB,CwSDD,ApOAEw6P,AuFAAA,A5IAAA,CukBAC,AxKLO,AvIGvB,ACEQ,A7XDQhhE,AnBEAxrL,AKCAsyM,AiTHA9mB,AnBEAxrL,AKCAsyM,CsZFCr2M,A/SFOga,ACEzB,AnPCkB,A7JApB,AoPAoB,A+CApB,A3LAoB,CslBDC,AjiBCN,AjJIK,APHpB,A+ODe,A2DIK,APHpB,AhMDe,CuSHZ,AlPCH,AuFAA,A5IAA,CoECF,AzJDyB,AgPCzB,AmDDyB,A/LCzB,CukBA0B,A/SFO,A5XCPo5N,AmSAAA,CwYCL,E1ePvB,AjMMW,AmSAA,EwYCsBp0B,G3qBDGm/B,AmSAAA,EnSAE,AmSAA,CgOJ/B,EwKKkC,CAAC9oP,A3qBDA+oP,AmSAAA,EnSAE,AmSAA,GnSAG,AmSAA,CwYC7B,A3qBDwB,AmSAA,CwYCpC,G3qBD8C,AmSAA,CnSAC,AmSAA,CnSA1C,AmSAA,CnSFT,AmSAA;AwYIG,A/SFH,AeEEzxC,AIAH,AEJK,ACDA,ArBKD,A0BHDxE,AmBAD,A1wBGF,A0eFG,AKAG,AUEL,ApKKC,AIAC,A1BLD,AiCJD,ACIE,ACFD,ArCLI,A0CMJ,A1BECpgC,AKCAA,A+OJA,AKAG,AUEL,AaAD,A2BKE,AIAC,AzBLD,AgCJD,ACIE,ACFD,ArCLI,A0CMJ,A1BECA,AKCAA,AhMJA,AKAG,AUEL,G/GEgB,AtBXC,AmCCF,AsRUC,ArBXC,AkCCF,CsGQb4kC,AYHAxE,A1bJOhqM,AgBQP4pK,AKCAA,A8QTO5pK,AgBQP4pK,AKCAA,EkILE,A9PGAyoF,AzJDA7lL,AgPCA6lL,AmDDA7lL,A/LCA6lL,EuSAE,AjQCA17K,A1IFA,AnCNO,AoQQPA,AkEFA,AnCNO,A3KQPA,CuSHC96D,A2BDAvgB,AxQCO+1P,AtJOPjX,AQLAmE,AqOFO8S,AsDOPjX,AQLAmE,A1MFO8S,CwTHN1rP,AKEN,A7QIM,AuFAA,A5IAA,CuSHC,AeEA4oM,AOLA,AlZIA,ACCP,ApCPc5wM,AgBQP,AKCA,AiTHA,ACCP,ApCPcA,AgBQP,AKCA,C5HFC,AzJDA2sG,AnBEAgrI,AKCAA,A8PFA,AmDDAhrI,AnBEAgrI,AKCAA,AjLFA,CuSAR,AjQCS19O,AuFAAA,A5IAAA,CqDAC,AjJIV,AONU,ACCA,AgOCA,A2DIV,AONU,ACCA,A/MCA,CuSHC,AsBHA,AzPKA+F,A5LPO,AmROPA,AGCC,AaRM,A5JOPA,AGCC,CtGDZ,ApCPmBqC,AuUOnB,ApCPmBA,CtHQN,AjJIA,AONAoxL,AiOEA,A2DIA,AONAA,A9MEA,CqDAJ,AjJIT,AZJA,AKCA,A+ODS,A2DIT,AZJA,AKCA,AhMDS,CuSHJ,AsBHC,AzPKS,A5KCA,AKCA/mF,A8PFA,AgCCA,AKCAA,AjLFA,CqDACrqG,A5LPb,AgBQa,AmQDAA,AgBPb,AgBQa,A5KDAA,CsCCCgC,A1IFA,AnBEF,AKCf,A+ODiBA,AkEFA,AnBEF,AKCf,AhMDiBA,CuSHC,A7OAf,A/ICemzO,AsODf,A6DCeA,AzMDf,CwTHgBxvO,AnQGO5H,A7JIPqsG,AoPJOrsG,A+CIPqsG,A3LJOrsG,CwTHN,AnQGjB,AUEQ,A5KCS6H,AyPHjB,AUEQ,AGCUguP,A6BADhuP,AtLHjB,AUEQ,AGCUguP,CkDDA90P,AzJDd,AnBEP,AKCA,A8PFqBA,AmDDd,AnBEP,AKCA,AjLFqBA,CwRFhB,A7OAwB,AUEP,A6EFO,AUEP,AtJFO,AUEP,CsCCC,A7JAA8G,AoPAA,A+CAAA,A3LAA,C6TNCD,AxQMA/N,A7JAxB,AoPAwBA,A+CAxB,A3LAwBA,CuSHCikB,AsBHvB,AxQMuB,AeDA/c,AwECA,AeDAA,A3JCA,AeDAA,CqDAJ,AzJDKmhP,AgPCL,AmDDKA,A/LCL,CwRFM,AsBHA,A/JMf,A5IAA,CqRHgBvqM,AlPGA,A1IFA,AiOEA,AkBACqxE,AgDFD,A9MEA,AkBACA,CmCAN,AeDMphH,AwECN,AeDMA,A3JCN,AeDMA,CsCCpB,AeDqB,AwECrB,AeDqB,A3JCrB,AeDqB,C+IClB,A5IAA,CvGFoBq6O,AmSAAA,CzJEC,AeDAr6O,AwECA,AeDAA,AGCCkuP,A9JAD,AeDAluP,AGCCkuP,CqRHpC,AnOEa,AzJDuB,AgPCvB,AmDDuB,A/LCvB,CqDAb,AuFAA,A5IAA,EsCCuC19K,AeDAr3E,AzJDA,AiOEAq3E,AeDAr3E,AGCzB,AgDFyB,A9MEAq3E,AeDAr3E,AGCzB,CkDD0B,AzJDN,AgPCM,AmDDN,A/LCM,CsCCL,AuFAA,AkBAOg1P,A9JAP,AkBAOA,GmCAE19K,AeDAi8K,AzJDA,AiOEAj8K,AeDAi8K,AmDDA,A9MEAj8K,AeDAi8K,CpGDC,AmPE/B,AgDF+B,A5LE/B,CmCHZ,A1ICO,AiODP,AkECO,A9MDP,CrFFF,AmPKgD,AgDLhD,A5LKgD,GkDDT,AuFAA,A5IAA,EqDAa1sP,AuFAAA,A5IAAA,CqDAC,AuFAA,A5IAA,IqDAI0sP,AuFAAA,A5IAAA,MqDAlB,AuFAA,A5IAA;A+ZLlC,AvIIN,AeEG9jD,AMJE,ACDEzvM,AKEL,ArBFI,A8BOL,AULD,AzOLD,AvDKI,AKCF,AUEA,ApKKAu7O,AIAC,A1BLDG,AiCLA,ACKC,ACFDF,AKCD,A1BEG1wE,AKCAA,A+OLA,AKCF,AUEA,AGEA,AqCGAywE,AIAC,AzBLDG,AgCLA,ACKC,ACFDF,AKCD,A1BEG1wE,AKCAA,AhMLA,AKCF,AUEA,AGEA,ElHGAywE,AtBLAG,AmCFAF,AsROAD,ArBLAG,AkCFAF,C5SImB,AQZD,A2RYC,AQZD,CuGUhB/rC,ATLOlC,ArZMPziC,AKCAA,A8RDAA,AKCAA,E8ORSqgK,AxHMP,A1MRAH,AxCQA13E,AzJDAl2N,AgPCAk2N,AmDDAl2N,A/LCAk2N,CpGDC,AmSAA,C+GJCtzP,AxQMA4xP,AuFAAA,A5IAAA,CsTDCpiD,AOLA,AhBAO,A8BOPh2G,AjRJA4a,A1JOA,AtBLA,AuQFAA,AkDOA,ArBLA,AzKFAA,CgDGC,A1IFA,AiOEA,AkEFA,A9MEA,CsTDN,AMJOppG,AeMA,AvQFA,ApKKA,AtBLA,AiCDAyiE,AEDA,ArBGA,AKCA,A8PFA,AwCKA,ArBLA,AgCDAA,AEDA,ArBGA,AKCA,AjLFA,C6SJC,ACDAloE,AhBAO,ArZMPgxO,AKCAC,A8RDAD,AKCAC,C6HPC,AhBAN,AxPMM19O,A1IFA,AEDA,A+NGAA,AkEFA,AEDA,AhNGAA,C2UCDm4M,AtRDE,AeDAjxM,AwECA,AeDAA,A3JCA,AeDAA,C6SJC/G,AxPIA,AuFAA,A5IAA,C8SLC4N,AcOd,AhaHcs6O,AmSAAA,C+GJR,AxQMSn6O,AuFAAA,A5IAAA,C2UCD,AtRDE,AeDAzB,AzJDP,AdGP,A+ODc,AeDAA,AmDDP,AdGP,AhMDc,AeDAA,CqDAJ,AvKEKqyE,A8PFL,AqCEKA,AjLFL,C6SJM,AeMF4hB,AjRJE,AuFAA,A5IAA,CuTFC1gG,AhNJA,AvDSA,AKHAwmL,A/ICA5xG,AnBEjB,AKCA,A+ODiB,AKHA4xG,A6DCA5xG,AnBEjB,AKCA,AhMDiB,AKHA4xG,CuTFD,AeMJ,AtRDH,AeDSz4K,AwECT,AeDSA,A3JCT,AeDSA,C6SJhB,AxPIiB,ApKKD,AtBLA,AiCDC,AdGA2kG,A8PFA,AwCKD,ArBLA,AgCDC,AdGAA,AjLFA,C4TED,A/NVE,CgNIC1yG,AvQKAoK,AxIHD,AhBIpB,A+ODqBA,AoEHD,AhBIpB,AhMDqBA,C4TLC,AeMFpK,AvQFE6M,AzJDAu7O,AgPCAv7O,AmDDAu7O,A/LCAv7O,C+ZNQ,AnGQhC,AjRJO,AUEP,A6EFO,AUEP,AtJFO,AUEP,C2CF0B1G,A/IClB,AsODkBA,A6DClB,AzMDkBA,CuTFC+H,AeMF,AjRJlB,AUEoBzB,A6EFpB,AUEoBA,AtJFpB,AUEoBA,C+ZNQ,AlHEZ,AxPIK,AuFAA,A5IAA,CsCCC,AuFAA,A5IAA,CqDACzM,AuFAAA,A5IAAA,CqDAC,A1IFAooP,AiOEA,AkEFAA,A9MEA,C0DHC,AUEAlhP,A6EFA,AUEAA,AtJFA,AUEAA,C6SJCgL,AxPIA,AzJDA,AgPCA,AmDDA,A/LCA,C6SJC,AvQKA,AKHA/L,AkFGA,AKHAA,AjJGA,AKHAA,CgDGL,AKHM,AkFGN,AKHM,AjJGN,AKHM,CgDGxB,AeDyBq0P,AzJDAnS,AiOEzB,AeDyBmS,AmDDAnS,A9MEzB,AeDyBmS,E6SJE,AjZG9B,AmSAA,ClGPV,AvDSyC,A1INvC,AiOMuC,AkENvC,A9MMuC,EoEDZ,AuFAA,A5IAA,C6SJM,CvQKUh8K,AeDA3xE,AwECA2xE,AeDA3xE,A3JCA2xE,AeDA3xE,CqDAC,AuFAA,A5IAA,CsCCL,AuFAA,A5IAA,C4TLOqF,CAAC,AlQEAwnP,AuFAAA,A5IAAA,CgDGCn7K,AeDAxwE,AwECAwwE,AeDAxwE,A3JCAwwE,AeDAxwE,CqDAC,AuFAA,A5IAA,CsCH/C,AuFAA,A5IAA,C8aHG,ClHE+CmE,AxPIAsoP,AuFAAA,A5IAAA,C6SJ7B,CAAnB,ClQE4B,AuFAA,A5IAA,CuTFwBtoP,AlQExD,AuFAA,A5IAA,CuTFyD,AxPI9B,AuFAA,A5IAA,G6SJiC/R,KAAK,CAAC,EAAEH,CAAH,CAA7D,CAAmE;A0RKrE,AhSAA02M,AOLI,ArBIJ,AmCGA0B,AhwBFJ+kC,A0eCI,AKHH,AUEC,ApKKE,AIAFsF,A1BLE,AiCDF,ACCAG,ACFE,ArCLG,AgBQJ,AKCC5wE,A+ODA,AKHH,AUEC,AGEA,AUFFmrE,A2BKI,AIAFsF,AzBLE,AgCDF,ACCAG,ACFE,ArCLG,AgBQJ,AKCC5wE,AhMDA,AKHH,AUEC,AGEA,E9GGAywE,AQLAG,A2RKAH,AQLAG,EuGAElsC,AqBEA0B,AhwBFA,A6TPO/6H,AqBSP20F,A2QFA,AGPO30F,AqBSP20F,CrnBFC5xK,A6lBAAA,C8IAC,AlPAAs6P,AuFAAA,A5IAAA,ErIAE,AoSAA,CwIAC9jD,AtZKA4rC,AIAA,AONA,ACCA,ACFAkE,AsROAlE,AIAA,AONA,ACCA,ACFAkE,C2HIC,AhaHAjuO,AmSAAA,CwYCC/U,A9SDA+c,AmCGAzgB,AtRDAw0D,AjJIA,AQLA,ACFP,ArCLc,AqBSP,A+ODAA,A2DIA,AQLA,ACFP,ArCLc,AqBSP,AhMDAA,CslBDC,A3QEF,AvQFE,AvKEAkpL,A8PFA,AqCEAA,AjLFA,CukBACjpO,AhSAT,AqBEA,AjcFS+tO,AoSAAA,C0HDT,A7tBCJ,AqVKI,AWNU,AEDA,ArCLO,AgSOrB,A2BKI,AWNU,AEDA,ArCLO,CvGONz8O,AzJDA4uE,AgPCA5uE,AmDDA4uE,A/LCA5uE,C4TECkyM,AtRDA,AuFAA,A5IAA,CrbDC5pM,A0eCA,ArJIAkkE,AWNH,AiOEG,A4BDAlkE,A2BKAkkE,AWNH,A9MEG,CqDAC7uE,A3KDV,AiCDE,AdGN,A+ODcA,AkCDV,AgCDE,AdGN,AhMDcA,CqDAC,AeDA,AvJFAijP,ArCLZ,AqBSYl6O,A+ODA,AeDA,AqDFAk6O,ArCLZ,AqBSYl6O,AhMDA,AeDA,CukBAR,AlhBASrE,ApKKhB,AHHgB,A8PFAA,AwCKhB,AHHgB,AjLFAA,CpcAC,AgWDAqQ,AEDP,A2PEO,AsCDAA,AEDP,C2HIQ,AhwBFArY,A0eCAJ,A3KDC,AkQCDA,A4BDAI,AMAC,A9KCDJ,CslBDC4D,A3QEA88F,AtRDA,AjJID,AQLA,AfEC2/G,A+ODA,A2DID,AQLA,AfECA,AhMDA,CoEDR,AvJFS9tI,A8OET,AqDFSA,AjMET,C4TEO,AvQFG9lE,AzJDA,AdGN,A8PFMA,AmDDA,AdGN,AjLFMA,C4TErB,AtRDsByB,AeDA,AzJDA0mE,AiOEA1mE,AeDA,AmDDA0mE,A9MEA1mE,AeDA,CukBAf,AjiBCM,A3KDWs0O,AmCFxB,A+NGa,AkCDWA,AkCFxB,AhNGa,CslBDWt5B,A3qBDH,AdGG1lN,AiTHH,AdGGA,C5HFCiJ,AzJDpB,AdGoB,A8PFAA,AmDDpB,AdGoB,AjLFAA,CqDAJ,AuFAA,A5IAA,CpcAR,A0eCcyB,AuFAAA,A4BDd,AxKCcA,CqDAf,A3KDO,AmBESoyM,A+ODhB,AkCDO,AkBESA,AhMDhB,CoEDiBzzM,AzJDA9G,AgPCA8G,AmDDA9G,A/LCA8G,CpcAC,A0eCAkyE,AeDA,AvKE9B,A+OD8BA,AeDA,AaAA,AwBE9B,AhMD8BA,AeDA,EsCClB,AxJCoBv7E,A+ODpB,AoDCoBA,AhMDpB,CslBDL,AlhBA0BqJ,A1LAC,AiCDD,AdGA,A8PFAA,AmBAC,AgCDD,AdGA,AjLFAA,CukBAjC,AjiBCkC0xE,AeDvB,A1LAQ,AiCDer4E,AiOEAq4E,AeDvB,AmBAQ,AgCDer4E,A9MEAq4E,AeDvB,CqDAb,AuFAA,A5IAA,CsCCc,AxJCwB8hI,A+ODxB,AoDCwBA,AhMDxB,CoEDyB5zM,AzJDR,AgPCQA,AmDDR,A/LCQA,CsCCC+xE,AeDA,A1LAC,AiCDDz4E,AdGN,A+ODMy4E,AeDA,AmBAC,AgCDDz4E,AdGN,AhMDMy4E,AeDA,EsCC1B,AuFAA,A5IAA,CnGC6B/xE,AmSAAA,C3IDCqsP,AeDA4B,AzJDA,AdGA,A+ODA5B,AeDA4B,AmDDA,AdGA,AhMDA5B,AeDA4B,CrIAE/X,AiCDD3pO,AmQCC2pO,AgCDD3pO,CzJE/B,AuFAA,A5IAA,CqDAZ,AxJC6CsnM,A+OD7C,AoDC6CA,AhMD7C,CrFFsC,AmSAA,CnSAS3rI,AdG/C,AiTH+CA,AdG/C,C5HFqC,AuFAA,A5IAA,CrIAE,AiCDD,AmQCC,AgCDD,C1ICY9nE,AzJDrB,AgPCqBA,AmDDrB,A/LCqBA,CqDAC,AuFAA,A5IAA,CpGDC9G,AmSAAA,EpUCG,AoSAA,C1GAA20P,A1LAvD,AiRAuDA,AmBAvD,A/JAuDA,CpGDC,AmSAA,CpUCG,AiCDF1hP,AmQCE,AgCDFA,GnSAL,AmSAA,C1ICf,AzJDwB47D,AgPCxB,AmDDwBA,A/LCxB,CrIA2B0tK,AoSAAA,C1GADkY,AzJDX,AgPCWA,AmDDX,A/LCWA,CpGDlC,AmSAA,EnSAqC,AmSAA,E1ICE,AuFAA,A5IAA,ErIAT,AoSAA,CpSAc/c,AoSAAA,C1GADid,AzJDA30P,AgPCA20P,AmDDA30P,A/LCA20P,IpGDI,AmSAA,CnSAC1hP,AmSAAA,C1ICxC,AuFAA,A5IAA,ErIAsB,AiCDa,AmQCb,AgCDa,CnSASsrB,AmSAAA,CnSAT,AmSAA,CnSA3C,AmSAA,CnSAxB,AmSAA,InSAmF,AmSAA,CnSA1F,AmSAA;AwYEC,AxKPI,AxHOJ,AMLGp+B,ACAC,ArBIJ,A0BHDitC,ASMC,AhwBFDvnC,AiiBTF,AvDUG,AeDD,ApKKC,AIAC,A1BLA,AiCDH,ACCG,ACFA,ArBdW,AKkBXomK,A+ODD,AeDD,AGEA,AUFApmK,A2BKC,AIAC,AzBLA,AgCDH,ACCG,ACFA,ArBdW,AKkBXomK,AhMDD,AeDD,AGEA,EgTNA7+H,AvvBIAvnC,AgWCF,A6PDEA,AsCCF,CwYhBE,A9SSA,AnPAA,ArJKgB,A4OLhB,AuDKgB,AnMLhB,CnGQEomK,AmSAAA,E8OTSsgK,AlHEPpsU,AMCA,AtNLAisU,AxCSAjrU,AuFAAA,A5IAAA,CqDAC,AuFAA,A5IAA,CnGACf,AmSAAA,C6GLC,AMCAgtC,A9ZSAqvM,A1BLAA,AkCAA,ACFAG,A0ROAH,AzBLAA,AiCAA,ACFAG,C5IEC91O,AuFAAA,A5IAAA,CqDAJ,AvKEK,A8PFL,AGEKipM,AkCAA,AjLFL,AGEKA,C0SPC1vM,AhZKA,AfEAs3O,AkTFA,AfEAA,CkINC,AvvBIA,A6lBAA,CpGAC3vO,AhKKV,A1BLA,AiRAUA,A4CKV,AzBLA,A/JAUA,C6SLC,AjvBKAovO,AyfAA,AvJFX,A8OEW,AGEb,AUFaA,AwCFX,AjMEW,AGEb,C4IAcj7B,A5IAAA,C9GGC3vI,A1BLA,AkCAAm0K,A2RKAn0K,AzBLA,AiCAAm0K,C6GLCx0O,AMCAgjH,A9PIAzoH,AvJFA,AhBId,A8PFcA,AGEhB,AkDJgB,AhBId,AjLFcA,AGEhB,C0SPI,AjvBI4B,AyfChC,AxJAE,ACFA,AhBIeA,A8PFjB,AaDgC,AuCC9B,ACFA,AhBIeA,AjLFjB,C6SRiB,AxZaf,APHgB,AiQAAsoH,AyCGhB,APHgB,A9KAAA,C0SLd,AxPGe7tH,A1LAA,AiRAAA,AmBAA,A/JAAA,C6FTC,AxCSA,AuFAA,AGEpB,A/IFoB,AGEpB,C4ZT4B,AjhBSPurG,AmSAAA,ClCAC,A5IAA,C0FXC,AxCSA,AvKEN,A8PFM,AqCEN,AjLFM,C+ZPQ,A1WOPvrG,A1LAAs7O,AiRAAt7O,AmBAAs7O,A/JAAt7O,CmTJjB,A9PIY,AuFAA,A5IAA,ClHEO1D,AmSAAA,C5HFCuK,AvKEA,A8PFAA,AqCEA,AjLFAA,CqDAC,AuFAA,A5IAA,CmTJColC,AxbI3B,AoSAA,CjRE4Bq/D,AmSAAA,C5HFC,AuFAA,A5IAA,CqDACzkG,AvKE9B,A8PF8BA,AqCE9B,AjLF8BA,CmTJhC,A9PImB,AuFAA,A5IAA,ClHEevK,AmSAAA,C5HFCg3P,AvKEA,A8PFAA,AqCEA,AjLFAA,GlHEG/nJ,AmSAAA,E5HFE,AvKEN,A8PFM,AqCEN,AjLFM,C6FT1C,EkUEO,A1WOsC,AvKEAhmG,A8PFA,AqCEAA,AjLFA,CqDAC+tP,AvKEA,A8PFAA,AqCEA,AjLFAA,GlHEGhoJ,AmSAAA,E5HF5B,AvKEjB,A8PFiB,AqCEjB,AjLFiB,EqDAgCioJ,AuFAAA,A5IAAA,MqDAM,AuFAA,A5IAA,GqDAG,AuFAA,A5IAA,CqDACA,AuFAAA,A5IAAA,MqDA1C,AuFAA,A5IAA;AukBCpB,AzRLI,ArBIJ,A0BHCrnN,ArBFa,AluBMboqM,A0eCD,AeDC,ApKKAkF,AIAC,A1BLA,AkCDC,ACDD,ArCNI,AqBUH1wE,A+ODH,AeDC,AGEE,AUFFwrE,A2BKAkF,AIAC,AzBLA,AiCDC,ACDD,ArCNI,AqBUH1wE,AhMDH,AeDC,AGEE,CsRXJ,C0BKE5+H,AvvBIAoqM,AqVKAkF,AwQLAlF,A2BKAkF,C/RNmB,A1BZF,AmCCF,A0RWI,AzBZF,AkCCF,CxUIN1F,AqBUPhrE,A8QVOgrE,AqBUPhrE,ExTVS,AmSAA,CuJIN,CvvBIC,AiWAAttJ,AkPEAy3O,AUFA,AuCAAz3O,A7LEAy3O,CkDFC,AxJAA,ApCROp2P,AmRQP,AoDAA,ApCROA,A5JQP,CmTJCqtC,AvvBIA,A6lBAA,CxQKC,AHHA,AiQAA,AqCGA,AHHA,A9KAA,CtGFC,AfEAsqM,AkTFA,AfEAA,ChSGC,AxBbO,A2TaP,AxBbO,CnSACp1M,AsRUP45K,AaVO55K,AzJUP45K,CgTNC,C1bJR,AsRUS,AaVT,AzJUS,CtGFCykC,AkPEA,AiDFAA,A7LEA,C2RROhgO,AhZQpB,AiQAY,AkCAZ,A9KAY,C2RRD,AjYKX,AfGela,AiQAf,AiDHA,AfGeA,A9KAf,CgTNgByoH,AvvBID/uH,AkVEC,A2QFDA,AwBEC,C6GRO8qC,AluBMjB,A6lBAA,E7lBAYvsB,AkVECo6D,A2QFDp6D,AwBECo6D,CrnBFb,A6lBAA,CxQKc,AHHL,AsSGK,AHHL,CrnBFM,A6lBAA,CqINV,ChZQat7E,AmSAAA,CkINlB,ArBFyB,AhZQN,AmSAA,GnSAGkvG,AmSAAA,CkINCt/D,CraM7B,AmSAA,EnSAgC5vC,AmSAAA,CnSAC,AmSAA,CkINnC,EraMsCs7E,AmSAAA,EnSAJ,AmSAA,GnSASryE,AmSAAA,CnSAC,AmSAA,GnSAGimG,AmSAAA,EnSA7C,AmSAA;A8OTG,AxHOLkkG,AMHI,AMCJ,ArBHA,A8BQA,AhwBFE,AiiBVJ,AxCUIyjD,ApKKA,AIAF3X,A1BLAnhC,AkCFE,ACAFqhC,AhBIE5wE,A8PFAqoF,AGCA,AUDA,A2BKA,AIAF3X,AzBLAnhC,AiCFE,ACAFqhC,AhBIE5wE,AjLFAqoF,AGCA,EoSFFzjD,AlZMA8rC,A1BLAnhC,AmCFAqhC,A0ROAF,AzBLAnhC,AkCFAqhC,E5IEEyX,AvKEAroF,A8PFAqoF,AqCEAroF,AjLFAqoF,E+ZRSk4E,AxHOP,ATLAp1M,AjMJAi1M,ClOUC,AoSAA,ClQAClkU,AkPCakuP,AiDDbluP,A7LCakuP,CoSFZzlD,AYFA,ASKA0B,AhwBFA1xL,AqVKAy2N,AtBLA,AkCAA,ACFA,A2PEAz2N,A2BKAy2N,ArBLA,AiCAA,ACFA,CkHDCjqM,AvvBGN,A6lBAA,C8IDO,ATLA,A8BQA,AvaGA,ASPA,AhBIA,AiQDa,AyCIb,ASPA,AhBIA,A9KDa,ClHIpB,AYLQhtC,AfEAu3O,AsSGR,AYLQv3O,AfEAu3O,C4HNC19O,AxZSA,AQLA,A2RKA,AQLA,CuGDC02M,AMHA,AMCA,ArBHA/vL,A8BQFjf,AhwBFE,AyfAA,AxJAApI,A+OAA,AGCa4iN,AUDb,AuCAA5iN,AhMAA,AGCa4iN,C2RPZ,A7YWA,AmSAA,CmHNb,AqBGA,AvQFcxjN,AuFAAA,AGCa,A/IDbA,AGCa,C0SLdwP,AMCE0pM,A9PER,AuFAA,AGEqB,A/IFrB,AGEqB,C0SLxB,AeMU,A9aAZ,AiQDyB,AkCCzB,A9KDyB,CgTJV,ArBHAtD,AnaMDnuM,AmBECsG,AiQDf,AgBDctG,AkBECsG,A9KDf,C0SLc,AeMA4rM,A/NZE,A5MeAilC,AtBLX,AkCFL,AfIgB,AsSGAA,ArBLX,AiCFL,AfIgB,CrnBFC,A6lBAA,CsQRQ,AlHITt9O,AeMJ,AjcFK0kB,AoSAAA,C8IJf,AMCiB1hB,ArBHrB,AjMJqB,A5MeR,AtBLN,AmCFa,AhBICq9M,AsSGR,ArBLN,AkCFa,AhBICA,C2IAD,CmGVU,AlHIT,AxZSC,A1BLA,AmBEL,A0SGK,AzBLA,AkBEL,C2IAKrgN,AhwBFEo9O,AqVMtB,AwQNsBA,A2BMtB,CwIJF,CTLY,AraKc55O,AmSAAA,C2IAD,AhwBFN,AkVEQ,A2QFR,AwBEQ,EkILEo0M,AlaStBylC,AmSAAA,CxnBNuB,AkVEA/8B,A2QFA,AwBEAA,CkILC,ClaS7B,AHJA,AsSIA,AHJA,EkILgCt9M,AraKAyJ,AmSAAA,CrnBFC6wO,AqVMtB,AHJsB,A2QFAA,A2BMtB,AHJsB,EpFZrC,CjiBUgC,AkVEQh9B,A2QFR,AwBEQA,CkIL/B,ClaSWi9B,AHJgB,AsSIhBA,AHJgB,C8OV7B,An2BQoC,A6lBAA,C7lBACp3O,A6lBAAA,C7lBA9B,AqVMC,AHJ8B3C,A2QF/B,A2BMC,AHJ8BA,CnSAC,AmSAA,CkIJzC4vC,ClaQqBm/B,AmSAAA,CxnBNuB,AkVEA8tI,A2QFA,AwBEAA,EhSG7C,AHHA,AsSGA,AHHA,CkIJM,AvvBEI,A6lBAA,G0JFDr9M,CvvBE2C,A6lBAA,I0JFtC,CvvBE2Cq6O,A6lBAAA,G0JFvCjrC,AvvBEkC,A6lBAA,E0JF9C,CvvBEyD,A6lBAA,E0JFxCpvM,GvvBE6Cu6O,A6lBAAA,E0JFxC,CvvBEmC,A6lBAA,E0JFhCnrC,CvvBE2C,A6lBAA,C0JHrE,AvvBGsE1tL,A6lBAAA,C0JH7E,AvvBGY,A6lBAA,C7lBAV,A6lBAA;A8ICF,AMJMxS,ACFJ,AKIH,ArBJC,A8BQEkmM,AhwBFD,AyfACkiD,ApKMA,AIDA,A1BLAn0P,AiCDJ,AEDI,ArCPG,AqBWH6rK,A8PFAsoF,AGAA,AUAD,A2BMC,AIDA,AzBLAn0P,AgCDJ,AEDI,ArCPG,AqBWH6rK,AjLFAsoF,AGAA,GvcJ8B,A6lBAA,CmKM9BliD,AvQFAkiD,A1LAAn0P,AFTO24O,AqBWP9sE,A8PFAsoF,AmBAAn0P,AHTO24O,AqBWP9sE,AjLFAsoF,CrIAC,AoSAA,G8IJGpoP,ACFAlS,AnbMA,AmCFA,AiPE0Bq8P,AgBA1B,AkCFA,A9LE0BA,CoSAzBzlD,AMJA,ACFA,AhBAA,A7YYA+rC,AIDAvF,A1BLAj3O,AiCDAmiP,AwROA3F,AIDAvF,AzBLAj3O,AgCDAmiP,C6HGC,AjcFN,AFTa,AsRSmB,AgBAhC,AHTa,AzJSmB,CyTEzBtoP,A9aAA,AmSAA,C4HNCG,AeMF,AvaGN,A1BLQukB,AmCFA,AhBIAg5N,A0SGR,AzBLQh5N,AkCFA,AhBIAg5N,CsHFC,AqBET,AjcFS,AFTOV,AsRSmB96B,AgBA1B,AHTO86B,AzJSmB96B,C2SNzBh0M,AzPMA,AuFAA,A5IAA,C8SNV,A7ZYA,AIDW,AONf,AnCRsB,AsRSmB,AqCMrC,AIDW,AONf,AnCRsB,AzJSmB,CyTEzBgqM,AvQFAvsM,A1LAA,AiCDA6tL,AgPCA7tL,AGA0B,AgBA1B,AgCDA6tL,A/LCA7tL,AGA0B,CoSAxBvF,AMJD,ACFA,AzPIR,A1LEQse,AmCFA43H,A8OAR,AGEgC,AgBAxB53H,AkCFA43H,AjMAR,AGEgC,C0SJvBt8I,A5ZUA,AtBNd,AFTqB,AqBWrB,AiQFA,AqCMc,ArBNd,AHTqB,AqBWrB,A9KFA,C0SJa,A5ZUb,AaRI,ArCPD,AqBWYyM,AsSIf,AaRI,ArCPD,AqBWYA,CsHFE,AMJb,AxZSY6wO,AONpB,AdGoB,A0SGAA,AONpB,AdGoB,C4HPG,CAEf,AeKc,AhaHA55O,AmSAAA,CwGCEwC,AqBEDmyM,AvaGR,AONf,AEDuB,AhBIA5lG,A0SGR,AONf,AEDuB,AhBIAA,C6HRC,CAAC,AcQH,AhaHG,AdGN,AiTHM,AdGN,CsHFV,AONiB,AcQtB,AvaGsB,AmSAA,CsHXF,ChZII6pC,AhBIA94I,AmTJA84I,AhBIA94I,CsHDtB,AOPuB,AhaQA,AmSAA,CsHDtB0C,AOPuB,AhZIP,AmSAA,C6GJC,AzZWO8/O,AmSAAA,CsHXd,AhaQexzI,AmSAAA,CsHD1B,AzYH2B,AmSAA,C5SOP,ASPlB,AhBIJ,A0SGsB,ASPlB,AhBIJ,CsHDQpsG,CzZCwBqG,AmSAAA,C5RIhC,APJiC,A0SIjC,APJiC,CsHD/B,AzYHgC,AmSAA,CsGE7B,CzZE+B+lG,AmSAAA,EsHAlC,AlZIG6qI,APJ2B,A0SI3BA,APJ2B,CsHC3B3mC,AzYLkCisC,AmSAAA,EsGKhC,AlZGP,APJyCn/O,A0SIzC,APJyCA,CnSAC,AmSAA,EsHChCuC,AlZGC,AmSAA,C1RRuB,AhBIW0sG,AmTJX,AhBIWA,EnSA7C,AmSAA,CsHCc,CAACvsG,AlZGCq3O,AmSAAA,C1RRkC,AmSAA,CnSAlD,AmSAA,CsGKU,AlZGC,AmSAA,C+GHQx3O,AzYLkC,AmSAA,E5SQ/B,AmSAA,E+GHC,CAACK,AzYLkCk8O,AmSAAA,E5SQ/B6D,AmSAAA,C+GHR,CAASzvC,ClZGN,AmSAA,C+GHH,EAAaxwM,AlZGCqsE,ASRoB,A0RQpBA,ASRoB,CnSAcmrK,AmSAAA,EsGKhD,AlZEnB,AmSAA,C+GFU,EAA4Bt3O,CzYLe,AmSAA,CnSAqB,AmSAA,CsGKjC,GAAGwwM,CzYLmC8vC,AmSAAA,EnSA1B,AmSAA,CsGK3C,CADR,AzYJiF,AmSAA,EsGM/EhwC,EAAE,CzYNkFiwC,AmSAAA,EsGM/E/vC,AzYN4C,AmSAA,IsGInD,CAFJ;AwHRK,AxHcN,AOXG53H,AhBAAm+C,A8BQD,AhwBFDsgH,AiiBXF,AxCWI8c,ApKMD,AIAC,AOPF,ACCE,ACFA,AhBIAvoF,A8PFAuoF,AGDA,AUCF9c,A2BMC,AIAC,AOPF,ACCE,ACFA,AhBIAzrE,AjLFAuoF,AGDA,EvcCF9c,A6lBAAA,CxQLgB,AmSAA,C0HDdz+J,AhBAAm+C,AzOMAo9H,AvKEAvoF,A8PFAuoF,AqCEAvoF,AjLFAuoF,C8SNC,CiHHQi4E,AlUFPH,AjMUA9lR,AmSAAA,CnSAC,AmSAA,C+GLCr6C,AjZMAhE,ACFA,AiPEAouP,AiDAApuP,ACFA,A9LEAouP,C2SNC,AhBAA,AzYYA3Z,AQNL,A2RMKA,AQNL,C3IAM,AzJDAnpD,AgPCA,AmDDAA,A/LCA,C8RNC,AluBMA,AiWAA,AfEA,AiQFA,AUAA,AuCAA,AfEA,A9KFA,C2SNCx5L,AzPMA+F,AvKEA23O,A8PFA33O,AqCEA23O,AjLFA33O,C8SNR,AlvBMS,AkWFAy8O,A2PEA,AwCFAA,CrSCC,AmPCAztH,AgDDA,A5LCAA,C9GMV,AOPWuoH,A4ROX,AOPWA,C1ICC,AuFAA,AGAA,A/IAA,AGAA,CkDAChnO,AuFAAA,AGAA,A/IAAA,AGAA,C9GMC,AOPR,AEDF,AhBIJ,AiQFY,AyCME,AOPR,AEDF,AhBIJ,A9KFY,C9GMZ,APJe7J,AiQHf,AyCOA,APJeA,A9KHf,CrHGgB,AmSAA,C6GRAka,AlYKC6yK,AmSAAA,CgORQ,AjIGlB,AzOMC,AvJFW,A8OEX,AqDFW,AjMEX,CqDAWzrL,AvKEA+wE,A8PFA/wE,AqCEA+wE,AjLFA/wE,C8RNA,AzOMX,AuFAA,A5IAA,C+ZToB,An2BSR,AgWDC,AdGN,A2QFK,AsCDC,AdGN,C5HFO7G,AzJDAk2O,AgPCAl2O,AmDDAk2O,A/LCAl2O,C6FXC,AxCWf,AvJFgBs7O,A8OEhB,AqDFgBA,AjMEhB,ClHEgBh/O,AmSAAA,CrRH1B,AdG2B,AiTH3B,AdG2B,CpFbC,CxCWCyzP,AuFAAA,A5IAAA,ClGFR,AhBISvkJ,AmTJT,AhBISA,EnSA5B,AmSAA,EnSAgCjmG,AmSAAA,CnRJE,AhBID,AmTJC,AhBID,C5HL5B,AvJCc,A8ODd,AqDCc,AjMDd,ElHK+BimG,AmSAAA,EnRJG,AhBIP,AmTJO,AhBIP,C8OX7B,EjhBWsClvG,AmSAAA,CnSAC,AmSAA,CnRJEm/O,AmSAAA,EnTIC7jK,AmSAAA,EnSA7C,AmSAA,EpFbJ,A/LS2C,AmSAA,KnSAgB,AmSAA,CnSAvD,AmSAA,EnSA2D,AmSAA,KnSAKwjK,AmSAAA,QnSAL,AmSAA,CnSAc7E,AmSAAA,SnSAd,AmSAA;A4GDvD,AfFF,AluBMF,AyfAA+c,ApKMF5X,AIAC,A1BPC,AiCAF,ACCI,ACFF,ArCRG,AqBYH5wE,A8PFAwoF,AGFA,AUEA,A2BMF5X,AIAC,AzBPC,AgCAF,ACCI,ACFF,ArCRG,AqBYH5wE,AjLFAwoF,AGFA,ElHQF5X,AmSAAA,C/RXmB,AmSAA,CnIKjB4X,A5LVOvd,AqBYPjrE,A8PFAwoF,AgBVOvd,AqBYPjrE,AjLFAwoF,GvIVU,AmSAA,ChmBUN,AkWFA,AiPCa+B,AUCb,AwCFA,A9LCaA,CkDCZ,ApKMA,AWPAhwM,AgPCA,AwCMA,AWPAA,A/LCA,C8RNCxsD,AlYKA,AnCTO,AsUSP,AnCTO,CvGUNgG,ApKMA,AYNAy8O,AfEA,A8PFAz8O,AGDa,AqCOb,AYNAy8O,AfEA,AjLFAz8O,AGDa,C0SHZmM,AlbGA,AmBGAurO,AiRHA,AkBGAA,C4HNC,AjvBIAH,AgWDA,AEDAkF,A2PEAlF,AsCDA,AEDAkF,CrSCC,AnCTOxF,AsRSMjoH,AgDAb,AnCTOioH,AzJSMjoH,CkDCZ,AuFAA,A5IAA,CpcAP,AyfAQ56G,AxJAV,ApCVC,AmRUSA,AGDa,AUCrB,AuCAF,ApCVC,A5JUSA,AGDa,C0SHZ,AlbGAwoO,AoRAa,AgBAbA,A5JAa,CrGDtB,AiPCqB,AkDDrB,A9LCqB,C2RLV,AlYKAnpD,ACCA,AkPFf,AgDCeA,ACCA,A7LFf,C2RJgBl6L,AzOMT,AuFAA,A5IAA,C6SJH,AjvBIa,AyfAAk7P,AvKEjB,A8PFiBA,AaAA,AwBEjB,AjLFiBA,ClGFC,AmSAA,C4GFC,A5ZUD,AtBPlB,AiCAmB,AEDnB,AsRQkB,ArBPlB,AgCAmB,AEDnB,CrSCoBjd,ACCA+E,AkSDA/E,ACCA+E,CpoBApB,AkWFqB,A2PErB,AwCFqB,C6FJnB,AzOMK,AuFAA,A5IAA,CpcAgB,AgWDR,A6PCQ,AsCDR,C+FLS,EzOME2U,AzJDAz9D,AEDAl9C,A8OEA26G,AmDDAz9D,AEDAl9C,AjMEA26G,EnGAX,ACFM,AkSEN,ACFM,CpSEQvZ,AmSAAA,CpSDC,AmSAA,CnSACL,AEDA,AiSCAA,AEDA,E5IF1B,AuFAA,A5IAA,CpGGK,AmSAA,ClSCK,ACFoB,AkSEpB,ACFoB,CpSECl3O,AmSAAA,CnSAC,AmSAA,CpSDComD,ACCA,AkSDAA,ACCA,CpSD5B,ACC2B,AkSD3B,ACC2B,CnSAtB,ACFyB+vF,AkSEzB,ACFyBA,ErSCE54I,ACCAghB,ACFrB,AiSCqBhhB,ACCAghB,ACFrB,CrSCZ,ACCkC,AkSDlC,ACCkC,CnSAC,ACFA,AkSEA,ACFA,CpSED,AmSAA,CnSA5B,AmSAA,CpSDgC,ACC7C,AkSD6C,ACC7C,CpSDI,AmSAA,CjSD2C89N,AmSAAA,CpSEC,AmSAA,CpSDC9+O,AmSAAA,CnSArD,AmSAA,EjSD8C,AmSAA,CpSEW4+O,AmSAAA,ElSFE,AmSAA,InSAI,AmSAA,EpSEX,AmSAA,CnSAc9E,AmSAAA,ElSFEgF,AmSAAA,IpSEhB,AmSAA,CnSAqBr8O,ACFlD,AkSEkDA,ACFlD,CpSEmD,AmSAA,CnSAC,AmSAA,CnSAD,AmSAA,CnSAtB,AmSAA,EnSA2Bue,AmSAAA,CnSAC,AmSAA,CnSAC,AmSAA,CnSAD,AmSAA,CnSA5B,AmSAA,CnSAhD,AmSAA;A+NTC,AlHMG,ACHN,AhBCIy4G,A8BQN,AhwBFI,AiiBZN,AxCYIs9H,ApKMA,AIAF7X,A1BPI,AiCAL,AEDE,AhBIA,A8PFC6X,AGHA,AUGE,A2BMF,AIAF7X,AzBPI,AgCAL,AEDE,AhBIA,AjLFC6X,AGHA,E9GSF7X,AOLF,A4RKEA,AOLF,CjSlBiB,AmSAA,C5IiBb6X,AuFAAA,A5IAAA,E+ZVSg4E,AlUFPH,EiMMEn1M,A/II0Bq/H,A5IAAA,CyTIzBpkD,AvaIA,AmSAA,CnINC,AuFAA,AGF0B,A/IE1B,AGF0B,C2SLzB,AlvBOAklC,AyVMA,A1BPA,A8RCAA,A+BMA,AzBPA,C1GCCmd,ApKMA,AtBPN,AiRCMA,AwCMA,ArBPN,A/JCMA,C8SPCz6P,AhBCA,A/II0B+0H,A5IAAA,C0SFzB7iH,ACHH,AlvBOL,A6lBAA,CoJJS,AeMb,A7KJuC,A5IAA,C2RJzB,A/II0B,A5IAA,C2SLzBhE,AhBCAyY,AluBMA,AqVMAg8N,A8PRwB,AUExB,A2BMAA,AjLRwB,C0SFvBz8O,ACHd,AhBCI,AzOCC,AuFAA,AGEL,A/IFK,AGEL,E2SJgB,CiHHQ,AlHMlB,CjvBIYk3O,A6lBAAA,CoJJCl3O,AhNRA,A5MkBnB,AIAkB,A+RAlB,AIAkB,CuOhBS,Cn2BUzB,A6lBAA,CoJJoB,AhNRA,CjiBYC,A6lBAA,EoJJEgM,CAAN,EjvBISqrO,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,GsQV/B,En2BUoCF,A6lBAAA,E5DZ3C,CjiBYM,A6lBAA;AoJHI,ACHJtvO,AhBCE,A8BQP,AhwBFK,AyfAF2sP,ApKME,AIAF,A1BRU,AiCGd,ACFM,ACDJn5C,AhBhBa,A8PkBXm5C,AGJA,AUIE,A2BMA,AIAF,AzBRU,AgCGd,ACFM,ACDJn5C,AhBhBa,AjLkBXm5C,AGJA,ErGEFn5C,AmSAAA,E5IEEm5C,AuFAAA,A5IAAA,E8SPE3sP,CAAC,AhZKA,AmSAA,ClDAC+d,A5IAAA,CrGAC,AmSAA,C6GLC3rB,AzPOA,AxJDA+N,A+OCA,AGFA,AiDCAA,AhMCA,AGFA,CvcECyY,AqVMA,AYPA,A4PCAA,A2BMA,AYPA,CpoBCL,AyfAM+zO,ApKMN,AIAM,AuPNAA,AaAN,A2BMA,AIAM,AxLNAA,CrIFO/X,AoRAN2Z,AgBAM3Z,A5JAN2Z,C0SFCpqP,CAAC,ACHA,AhBCA,CgBDClS,AlvBOA,AiWDA,AkPDA,AUEA,AuCDA,A7LDA,C2SLD,AzZaE2iP,AQPX,A2ROWA,AQPX,C6GHYv8O,ACHZ,ChBCE,AluBMF,A+TFQ,AkCCK,ACDDD,AiPACg2P,AUEb,AMFQ,AiCCK,ACDDh2P,A9LACg2P,CrGAV,AmSAA,C4GFC,ClbEkB,AmCAPz3O,AiPFjB,AgBEwB,AkCAPA,A9LFjB,C0SAmBte,AxZUnB,A1BRU,AmCAL,A0RQL,AzBRU,AkCAL,EnSAe,AmSAA,C4GFE,GAAG8L,CAAN;AACd,AfFF,AluBMF,AiiBbL,AxCMS,ApKYKqvM,AICR,A1BTyB,AiCI/B,ACFQ,ACDJp7M,ArCTG,AmRIE,AGEL,AUKC,A2BKSo7M,AICR,AzBTyB,AgCI/B,ACFQ,ACDJp7M,ArCTG,A5JIE,AGEL,GkDFF,AuFAA,A5IAA,ClGKEA,AmSAAA,CnSAC,AmSAA,CpGXCosU,CiMIA,C7YcQhxH,AaPN,AiPAAz8L,AqCOMy8L,AaPN,A9LAAz8L,CrGAC3e,ArCTO+T,AwUSP/T,ArCTO+T,C9PSZ,AiPAM,AkDAN,A9LAM,C9GQC,AmSAA,CnSAL,ASRMwK,A0RQN,ASRMA,C6FJC,A7YWM,AtBRiB89N,AkCEvBF,ACDA,ArCTN,AsRSMia,AqCOM,ArBRiB/Z,AiCEvBF,ACDA,ArCTN,AzJSMia,ClHOO,AxBhBCp2P,A2TgBD,AxBhBCA,CnSAd,AmSAA,C9PSS,AiPAA,AkDAA,A9LAA,CrGACue,ArCTO,AwUSPA,ArCTO,C3QgBL,AtBRY,AmCC3B,AsROe,ArBRY,AkCC3B,ClDAe03O,A5IAAA,ClHOO,AmSAA,CzTRkB,AkCEpC,AkQFoC,AiCEpC,CnGZc,AhMYA1e,AkPJlB,AiDIkBA,A7LJlB,G0FRqB,A5MkBMJ,AmSAAA,CzTRkBgF,AoSAAA,E9QQ9B,AYNX,AuRMW,AYNX,CnSAqBn8O,AmSAAA,C/SMO,AYNN,AuRMM,AYNN,CnSAC,AmSAA,CnSAD,AmSAA,CnSAtB,AmSAA,CrUFoC,AoSAA,C9QQHo3O,AtBRiBG,AkCEvBh5N,AuRMM64N,ArBRiBG,AiCEvBh5N,CnSAC,AmSAA,CnSAC,AmSAA,C/SMlB,AYNiB,AuRMjB,AYNiB,C/SMtB,AYNN,AuRMM,AYNN,ErUFoC,AoSAA,CpSAqBve,AoSAAA,ClEVjE,AlOU4C,AoSAA,EpSAwBue,AoSAAA,CpSAxB,AoSAA,CpSAb,AoSAA,GpSA0C,AoSAA,KpSAK49N,AoSAAA,QpSAL,AoSAA,CpSAc9E,AoSAAA,MpSAd,AoSAA,CpSAqBr3O,AoSAAA,CpSArB,AoSAA,EpSAwBue,AoSAAA,CpSAxB,AoSAA,CpSA1C,AoSAA;AgQPhB,AlHOR,ACJD,AhBEE,AluBML,AyfAF,ApKI8C,AICjC,A1BTuF,AkCG9F,ApCVL,AmRWD,AGNG,AUMD,A2BI4C,AICjC,AzBTuF,AiCG9F,ApCVL,A5JWD,AGNG,GvcJ8B,A6lBAA,I5PO5B,AmSAA,CjDCE0kD,A5IAAA,C4ZTgBspQ,AtiBAfvsU,AmSAAA,CkJGC4H,ArbHA,AsRSA,AaTA,AzJSA,C2SNC,EzZaQu0O,AQNN,ApCVA,AsRSAx2N,AyCOMw2N,AQNN,ApCVA,AzJSAx2N,C1ITJ,AmSAA,CkJGM,AhBEAqxG,A/IIA,A5IAA,C4ZTA,CAAiBl9G,AtiBAf,AmSAA,CnSAR,AsRSS6L,AaTT,AzJSSA,C2SNZ,ChBEE,A/IIK,A5IAA,C4ZTE,AjHGM,AzZaP,A5BhBO3lB,A+TgBP,A5BhBOA,CvQgBOu3O,A5BhBN,A+TgBMA,A5BhBN,CmQAgB,AhRSf54N,A5IAAA,E1ITE,AsRSA,AaTA,AzJSA,C1ITC,AmSAA,CnSAL,AmSAA,CvQgBP,A0PPcA,AyCOd,ArLPcA,C9GOO,AmSAA,C/ThBLk4N,AsRK1B,AaL0BA,AzJK1B,E1ILiB,AmSAA,EvQgBmBgJ,AmSAAA,C/ThBLjgP,AmSAAA,EvQgBrB,AmSAA,EnSA+B,A5BhBN,A+TgBM,A5BhBN,CnSACmU,AmSAAA,IvQgBUisO,A5BhBf,A+TgBeA,A5BhBf,CnSAUhgP,AmSAAA,CnSAV,AmSAA,CvQgBrB,A5BhBZ,A+TgBY,A5BhBZ;AmQCA,AlHOG,ACJG,AhBED,AluBMLu3O,AiiBdF,AhMaQ,ACFJ,ArCRH,AsRIG,AUOFA,AuCDM,ACFJ,ArCRH,AzJIG,EvcOFA,A6lBAAA,GoJlBE,ChNIE80F,CkUGCvyT,Cn2BWC,AmlBFAjgB,AUEA,AtJFAA,C4ILJ,A5IAA,CvcOM,A6lBAA,CsQXR,AlHOS,CCJCkH,AjZOA4hP,ACFA,AkSEAA,ACFA,C6GLC,CiHHC7oO,AlgBUA,AmSAA,E8GPElS,CAAR,AjZOSg7O,ACFApG,AkSEAoG,ACFApG,C8NRf,CjHGiB,ClvBQAx8O,A6lBAAA,C7lBAT,A6lBAA,C5DdY,CjiBcAue,AkWHlB,A2PGkBA,AwCHlB,CroBGM,A6lBAA,C5Dde,CjiBcA,A6lBAA,I5PDK,AmSAA,CnSACve,AmSAAA,CnSAD,AmSAA,CnSAtB,AmSAA,UnGbR;AkUIC,AlHOK,ACJIe,AhBEL,AluBMD,AqVGE,AIAkD,A1BRlD,AiCIN,ACDQ,ACDF,AiPLF,AUQA,A2BGE,AIAkD,AzBRlD,AgCIN,ACDQ,ACDF,A9LLF,K2RNK,G/IYDywE,A5IAAA,CvcEChxD,AgWDA46L,AmPPL,AUQK56L,AsCDA46L,A5LPL,C2SAMr6M,AlvBQN,AmlBToB,AUSpB,AtJToB,C2SCb,A7ZWA,AtBRA,AmCEA,AiPGP,AqCGO,ArBRA,AkCEA,A9LGP,ClHGE,AtBRA,AkCIM8hP,ACFN,AsRMA,ArBRA,AiCIMA,ACFN,E6GLQj7O,AlvBQA,AgWDd,ACAc,A4PCA,AsCDd,ACAc,C8GPJ,AlZOKyrL,AmSAAA,ElSAEuvD,AmSAAA,EpSAjB,AmSAA,EnoBCqB,AgWDA99B,A6PCA,AsCDAA,EnSArB,AmSAA,EnSAyBtkI,AmSAAA,CnoBCC22J,A6lBAAA,C7PD1B,AmSAA,EnoBCqB,AgWDQ,A6PCR,AsCDQ,ClSAC,AmSAA,CnSAC54N,AmSAAA,CpoBCC,AiWDF,A4PCE,AuCDF,CpoBCGve,AiWFzB,A4PEyBA,AuCFzB,CpoBEM,A6lBAA,I7lBAwB,A6lBAA,G7lBAxB,A6lBAA,I7lBA+B,A6lBAA,K7lBAKo3O,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,C7lBAC74N,A6lBAAA,C7lBA3C,A6lBAA,C7lBAV,A6lBAA;AoJHE,ACJIs6D,AhBEN36D,AluBMD,AiiBfH,A5MiBc,AtBRA,AiCKZ,AEHY,ArCPP,AgSWJ,A2BEW,ArBRA,AgCKZ,AEHY,ArCPP,GhmBF2B,A6lBAA,CqIO9BA,EjMTEouT,AjMcApyH,AmSAAA,EnSAE,AmSAA,C+FLC,AraLOpmM,AmSAAA,CkJGN+kE,CDIC9sE,ACJA,AhBEA,AlYKAsnL,AmSAAA,C8GHC,C5ZMO8oD,AtBRAK,AmCEAA,ArCPZ,A2TaYL,ArBRAK,AkCEAA,ArCPZ,CkJGO3iP,ArbHOmG,AmSAAA,CiJONwF,ACJL,AlZOK,AnCVR,AsUUQ,AnCVR,CiJOS,AjZGAyxO,AmSAAA,C8GHCj9O,ApbPO,AmSAA,EjSKV,AiCKZ,AEHY,AiQFA,AgCKZ,AEHY,EpGXO,A5MiBP,AmSAA,CyHNQ,A5ZMMu9O,AtBRA,AmCEA,AsRMAA,ArBRA,AkCEA,C4GAL19O,AfFD,AnaAR,AmCEA,AiQFA,AkCEA,C4GAQ,AhNXE,CgNWR,CAAV,EAAsBA,A5ZMd,AmSAA,CyHNe,A5ZMM,AmSAA,GyHNHkO,CAAJ,C5ZMYovO,AmSAAA,GnSA1B,AmSAA,CyHNwBprO,CAAC,A5ZMM,AmSAA,EvFjB7C,EgNW2C,C5ZMOqrO,AmSAAA,GyHNZ,A5ZMxB,AmSAA,IyHNqCrrO,CAAC,KAAKA,CAA7B,CAAtB,EAAuDA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAAC,EAAEH,CAAH,CAAN,CAA5D,CAAyE;AkHN/E0yU,AjHGS,AhBEH,AluBMJ/0F,AyVEI,A1BTyB,AiCK7B,ACAM,ACHuB,ArCN7B,AsRUE,AUCFA,A+BEI,AzBTyB,AgCK7B,ACAM,ACHuB,ArCN7B,AzJUE,EvcCFA,A6lBAAA,I7PDIr9B,AmSAAA,CgOVC,CAAClgN,AngBUA,AmPAAgpE,AgDAA,A5LAAA,C1IVCjjE,AmSAAA,CkIKCg3H,AraLA,AsRUA,AaVA,AzJUA,C9GGC,AOHAq8D,A4RGA,AOHAA,C1SGL,AmSAA,C3RJO,ACHuBgpD,AiPIvBuZ,AiDDA,ACHuBvZ,A9LIvBuZ,C1IVC,AmSAA,CkIKC,AlYKA,AnCVN,AsUUM,AnCVN,ChQUO1e,AmSAAA,CgOVhB,AlgBSiB38I,AmSAAA,C+NTCskI,An2BWA,AkWLa,ArCNb8Z,AgSWA,AwCLa,ArCNbA,CkIKCvgP,AlYIjB,ACAiB,AkSAjB,ACAiB,CpoBEC,A6lBAA,C3PLwB,AiPIxC,AkDJwC,A9LIxC,CtGDkB,AmSAA,C+NTtB,AlgBSa,AkPCU,AiDDV,A7LCU,C2RLjB,AraLG,AmSAA,C/PSgB85M,AmSAAA,C+NTC,AjIKAroM,AhYCuBsyO,AmSAAA,CpSGtB,ApCTAn8O,AuUSA,ApCTAA,CnSAC,AmSAA,CkIKC,CAAC8qC,AluBMDwhE,AiWFC,A4PEDA,AuCFC,CnSAtB,AmSAA,CpoBEY,A6TXY,AgSWZ,AGXY,C/PSC4lG,ApCTA,AuUSAA,ApCTA,ChmBWA7lG,AkWLW,ArCNjB,AgSWMA,AwCLW,ArCNjB,C/PSQ,ACHuBkrI,AkSGvB,ACHuBA,C8NNvB9kC,AjIKC,AluBMhB,A6lBAA,ChSXiB,AmSAA,ChmBWAzyM,AiWFC+H,ApCTA4wO,AgSWD34O,AuCFC+H,ApCTA4wO,ChmBWlB,AiWFZ,A4PEY,AuCFZ,C8FJgC,CluBMAp6N,AiWFC,ACHG,A2PKJA,AuCFC,ACHG,CroBKxB,AkWL6Cve,A2PK7C,AwCL6CA,C8NNvC,AlgBSiBu6F,ACHC,AkSGDA,ACHC,CroBKD,A6TXhB,AgSWgB,AGXhB,CmQAiB,AlgBSH,ACH2Bh8E,AkSG3B,ACH2BA,CnSAxB,AmSAA,C6FDf,AjYIkB,ACHhB,ArCNgB3e,AuUSA,ACHhB,ArCNgBA,EkIKE,AjYIAsyM,AmSAAA,ClSHwB,AmSAA,CpSGjE,ApCT2C,AuUS3C,ApCT2C,CnSACp+L,AmSAAA,C/PSC,AmSAA,ElSHyBqoO,AmSAAA,C6FDjD,AraLkB,AmSAA,CnSAUn8O,AmSAAA,CkIKCpG,AraLX,AmSAA,CnSA7C,AmSAA,I9PMuE,AmSAA,CnSAcy9O,AmSAAA,G6FD1D,CAAH,EhYC+C,AmSAA,CnSAqBr3O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSA1C,AmSAA;A8NL7B,AlHMIxe,AfDA,AluBMF,AqVAoD,AIC1Cq7M,AOJZ,ACCQ,ACJ2F,ArCLpG,AsRUK5pI,AUCF,A2BAoD,AIC1C4pI,AOJZ,ACCQ,ACJ2F,ArCLpG,AzJUK5pI,M4ZVAlrE,AlHMAvG,AjZIAusG,AmPAA96B,AgDAA86B,A5LAA96B,C4ZVJ,AhRUK,A5IAA,C9GEO4pI,AOFN,A4REMA,AOFN,CgOVCvhN,AlHMA,AjvBKA2mB,A6lBAAA,CsQXP,An2BWE,AmlBDM5gB,AUCN,AtJDMA,CvGACyzL,AmSAAA,CgOVCtrL,AlHMA9H,CkHNV,AjIKW,AzYOM,AmSAA,C5nBDL,AyVCM,A0PFN,AUCA,A+BCM,ArLFN,C0SJC,AjZIA,ACDAk8O,AkPCAtyO,AgDAA,ACDAsyO,A7LCAtyO,CvGACstO,AmSAAA,C+FLV,CeCYprO,AxZMC,A0PFT,AyCES,ArLFT,C0SJJ,AjZEJ,AmPEiBsqP,AgDFjB,A5LEiBA,C0SPR,AjvBQU,AyVCK,AoQDL,A+BCK,CqHJpB,AjvBGgB/pJ,AmlBDD,AUCCA,AtJDD,EvcCP,AiWFJ,A4PEI,AuCFJ,CnSAcmrI,AkPCAye,AiDDAze,A7LCAye,C9GEO/e,AmSAAA,C5nBDH,AmlBDlB,AUCkB,AtJDlB,E9GES,AmSAA,C5nBDL,A6lBAA,CpQCsB,A0PFNnuH,AyCEM,ArLFNA,EvcCK,A6lBAA,C7lBAC3c,AmlBD9B,AUC8BA,AtJD9B,EvcCQ,AyVC2B+qI,AoQD3B,A+BC2BA,E3RH/B,AmSAA,CpoBEgC,AyVCvB,AQHmBuL,A4PEI,A+BCvB,AQHmBA,C3SGxB,AmSAA,C3RH0B,AmSAA,CpoBE1B,AiWF2B,A4PE3B,AuCF2B,CnSAD,AmSAA,CnSAF,AmSAA,CnSAMpoJ,AmSAAA,CpoBEK,A6lBAA,C5PFX,AmSAA,CnSA5B,AmSAA,EnSAuCsoJ,AmSAAA,CpoBEK1L,A6lBAAA,C5PFH,AmSAA,CnSAC,AmSAA,CpoBEH,AiWFE,A4PEF,AuCFE,CnSAF,AmSAA,CnSAM58I,AmSAAA,CpoBEK,A6lBAA,C7lBACv6F,AiWFZ,A4PEYA,AuCFZ,CpoBEnC,AiWFJ,A4PEI,AuCFJ,EnSAkD2iP,AmSAAA,EpoBEM,AiWFJ,A4PEI,AuCFJ,CnSAC,AmSAA,CnSAD,AmSAA,CpoBEhD,AiWF8C,A4PE9C,AuCF8C,CnSAMpoJ,AmSAAA,EnSAN,AmSAA,CpoBEa,AiWF/D,A4PE+D,AuCF/D,EnSA6DsoJ,AmSAAA,EnSAE,AmSAA,CpoBEKzL,AiWFJ,A4PEIA,AuCFJ,CnSAD,AmSAA,CnSAF,AmSAA,CpoBEE,AiWFI78I,A4PEJ,AuCFIA,EnSAN,AmSAA,CpoBEa,AiWF1E,A4PE0E,AuCF1E,CpoBE2Eh8E,A6lBAAA,C7lBAvE,AiWFoEve,A4PEpE,AuCFoEA,CpoBE9E,AiWF+E,A4PE/E,AuCF+E,CnSACkyM,AmSAAA,EnSAD,AmSAA,CnSAzE,AmSAA,EnSA+E3zL,AmSAAA,CnSAC,AmSAA,CnSAC2zL,AmSAAA,EnSAD,AmSAA,CnSAhF,AmSAA;A+NPR,AjHCM,AhBGH,AluBMF,AiiBjBH,A5McI,AIG2C,A1BRzC,AiCIJ,ACEO,A4PEN,A2BHC,AIG2C,AzBRzC,AgCIJ,ACEO,GpoBdyB,A6lBAA,EqIFzB,CiIQHO,AngBSApmG,AmSAAA,EnSAE,AmSAA,ClGhBCkgO,EjMgBEl5I,AmSAAA,C+GRC/sL,CiHDC,AjHCA,CiHDC,CngBSC,AmSAA,C+GRCsB,AjNRhB,AjMgBgBwvO,AmSAAA,C+GRR,AjNRSt9N,CkUOJ,CAAX,AjHCiB,AlZKjB,AmSAA,EgONmB,AlUPrB,EAAuB,KkUOK,CAAP;AlHOf,ACLIxT,AhBGNrK,AluBMFw7O,AiiBjBA,AxMcE,A1BNW,AiCIb,ACGK,ACLD,AiPKA59O,AUEJ49O,A+BHE,AzBNW,AgCIb,ACGK,ACLD,A9LKA59O,EvcEJ49O,A6lBAAA,EqINEx7O,ElYKE0pB,AmPDA9rB,AgDCA8rB,A5LDA9rB,C0FfCigB,AkDeA,A5IAA,C2RJC,AlYKA,AmSAA,E+GRExT,AhBGA,A/IIA,A5IAA,C2SPC,AjNRT,AjMgBS,AENA,AiSMA,AENA,CrSMCgmG,AENN,AiSMMA,AENN,C4GGOzyG,AlbLOsiP,AoSAAA,C8IKN,ACLAv0O,AjNRAkS,AjMgBA,AmSAA,C+GRJ,AlvBSK,A6lBAA,EoJJA/R,AjvBIE,AgWDAmyM,A6PCA,AsCDAA,C8GHX,AhNbJ,CjMgBS,AmSAA,C8GHO,A9JEC38M,A5IAAA,CxIPJ,AoROL,AgBPK,A5JOL,C0SFU1D,AfFC,AnaHQ09O,AoSAAA,C8IKvB,AjZGiB,AmPDD,AgDCC,A5LDD,CvGHpB,AmSAA,C8GCqB,EjvBIGjrI,A6lBAAA,C9RTX,AoSAA,CnmBSE,A+TTmBtsG,A8RSnB,AMTmBA,CpSArB,AoSAA,CnmBSeqsG,A6lBAAA,C9RTS9tF,AoSAAA,CnmBStB,A+TTF,A8RSE,AMTF,EnmBSmBo6D,A6lBAAA,E7lBAjB,A6lBAA,E7lBAqB4zB,A6lBAAA,E7lBArB,A6lBAA,E7lBAyBvsG,A6lBAAA,C7lBAzB,A6lBAA,E7lBA4Bue,A6lBAAA,C7lBA5B,A6lBAA,E7lBA+B,A6lBAA;AsQT9C,AlHMMxS,ACLEA,AhBGJ,AluBMF,AiiBjBH,A5MgBG,AYDC,ACNS,AiPMN,AUEJ,A2BDA,AYDC,ACNS,A9LMN,O4ZRDzF,CAAC,AlHMAyF,A5ZGA,AmSAA,CyHHC,AjvBIAyU,A6lBAAA,CqJTCzU,AhBGAirH,AluBMN,A6lBAA,CsQVK23C,AjHCE,CDKCnpK,CAAC,A5ZGA62O,AaPMG,AsRONH,AaPMG,C4GILxiP,ACLAH,AlvBSA,A6lBAA,CqJTJ,AhBGK,A/IIA,A5IAA,C4ICLm8P,A5IAAA,ElHAF,AmSAA,C2OTS,AlHME,AfFA5nD,AhYFL,AiPOD,AkDPC,A9LOD,C4ZTK,AlHMEv0M,AjvBIC,A6lBAA,CoJJF,AjvBIGyyG,A6lBAAA,CoJJT,A5ZGU,AaPK,AiPOZ/uG,AqCAO,AaPK,A9LOZA,C0SHR,AfFF,AluBMQ,AkWRA,AiPOG,AUCH,AwCRA,A9LOG,C4ZTA,AlHKM,CkHLhB,AlHOC,AfHiBsM,CluBMG,AmlBDR8b,AUCQ,AtJDRA,C4ZTK9rB,A9gBSGwiP,AmSAAA,C2OTF,AjIIE,A/IIb,A5IAA,C2RJcvxM,AluBMf,A6lBAA,CVAJmrN,A5IAAA,C4ZViB,CAApB,An2BU4B,AqVDZ,AwQCY,A2BDZ,CxnBCa5pJ,AmlBAvB,AUAuBA,AtJAvB,C4ZViBtkG,CAAC,AjIII,AluBMrB,A6lBAA,CVAExK,A5IAAA,ClHDsB,A8PCrB,AqCDqB,AjLCrB,C4ZVe+I,An2BUU,AqVDnB,AwQCmB,A2BDnB,C2OTU,AjIIM,CiIJLnN,AhRUdwlB,A5IAAA,CvcAN,A6lBAA,CxQD6B,A8PD5B,AqCC4B,AjLD5B,EvcEkC,AmlBCvCu3O,AUDuC,AtJCvCA,C2RPkB,AluBMsBv9K,A6lBAAA,CsQVhD,AhRWU,A5IAA,C2RPmC,AluBMjC,AqVDkC6jK,AwQClC,A2BDkCA,C2OTN3iP,CAAC,AhRW5B+F,A5IAAA,CvcDyC,A6lBAA,EsQVZmI,CAA1C,AjII0B,AluBMd,AqVD6B,A8PExB,AUDL,A2BD6B,AjLExB,C4IAClG,A5IAAA,C4ZX2B,AjIIQjI,CluBMQ,A6lBAA,CsQVdC,An2BUe0yG,AmlBCjD,AUDiDA,AtJCjD,C4ZXb,A9gBSyD,A8PEnCyc,AqCFmC,AjLEnCA,CvcDV,AqVDV,AwQCU,A2BDV,C2OTgD,C9gBSW,A8PEpC,AqCFoC,AjLEpC,CvcD2C,A6lBAA,EqIN1C,A/IOEzrH,A5IAAA,C2RPL,AluBMX,AmlBCU,AUDV,AtJCU,ClHF4C4+O,AmSAAA,ErCElC3qK,A5IAAA,CvcD2C,AmlBC9D,AUD8D,AtJC9D,C4IHA,A5IAA,C4IAP,A5IAA,GvcE0E2lK,AqVDnB,AwQCmBA,A2BDnB,CnSAcG,AmSAAA,ExnBCA,A6lBAA,G7lBAW,A6lBAA,C7lBACt3O,A6lBAAA,C7lBA3E,A6lBAA,ExQDiD,AmSAA,ExnBC+B,A6lBAA,G7lBAhF,A6lBAA,I7lBAuF,A6lBAA,K7lBAKo3O,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,C7lBAC74N,A6lBAAA,C7lBAnG,A6lBAA,C7lBAV,A6lBAA;AsQTA,AjHCK,AhBGH,AluBMH,AqVDC,AIAA,A1BVuC,AiCSzC80K,AEP6B,AiPWxB,AUFJ,A2BDC,AIAA,AzBVuC,AgCSzCA,AEP6B,A9LWxB,EvGJLA,AmSAAA,CnoBjBgC,A6lBAA,G7PiB5B,AmSAA,CnSAC8oD,AmPFD,AgDECA,A5LFD,C4ZNE71O,A1gBSA,AmSAA,CuOTC,A9gBSA+1O,AmSAAA,C2OTCxiP,CAAD,CAAD,CAAKglO,AjIIA,AzYKAwd,AmSAAA,CvSAT,AmSAA,CxRDF,AmSAA,CnSAc5E,AmSAAA,C+FJV,A7YKW,AmSAA,C2OTT,A1gBSA,AmSAA,CuOTWhlC,E9gBSE,AmSAA,C/RAE,AmSAA,IuOTf,A9gBSkB4pC,AmSAAA,C2OTtB,A1gBSwBA,AmSAAA,EuOTC,AngBQ3B,AmSAA,CnSA4BniC,AmSAAA,C9SC1B,AmSAA,C/RAmB,AODS,A4RCT,AODS,GnSAGv0L,AmSAAA,CgORC,CAAP,A1gBSS,AODpC,A4RCoC,AODpC,C1SCqB,AmSAA,C5RDgBw0L,AmSAAA,EnSAE,AmSAA,C1SCE,AmSAA,E5RDCx0L,AmSAAA,EnSAE,AmSAA,C1SCE62N,AmSAAA,E5RDC13B,AmSAAA,EnSA/C,AmSAA,E1SCyC,AODUx4G,A4RCV,AODUA,EnSAE,AmSAA,G1SCI,AODD3mF,A4RCC,AODDA,C1SCtD,AmSAA,C5RDF,AmSAA,C1SC6D,AmSAA,C5RDD0mF,AmSAAA,EnSAE,AmSAA,E1SCI8vI,AmSAAA,C5RDDx2N,AmSAAA,EnSAE,AmSAA,GnSAG66D,AmSAAA,E1SCT,AOD7D,A4RC6D,AOD7D,C1SC2E82J,AmSAAA,C5RDDhrI,AmSAAA,EnSA1E,AmSAA,EnSA8ED,AmSAAA,EnSA9E,AmSAA,E1SC6D,AmSAA;AuOR5D,AlHMK,ACLD,AhBGF,AluBMHqrI,AiiBjBF60F,A5MgBG,AIAC,A1BdA,AiCaH,ACAG,AkPIC,AUFH70F,A2BDC,AIAC,AzBdA,AgCaH,ACAG,A7LIC,EvcFHA,A6lBAAA,CxQpBgB,AmSAA,E0GFT,A/IeL,A5IAA,C4IWA,A5IAA,CvcJG,AiiBjBA,A4DiBA,C5DjBCz9O,AhMeA,AmSAA,CpoBEC,AyVDAoiP,AoQCA,A+BDAA,GqHHGtwO,CAAC,AhZEAswO,AmSAAA,C3SCT,AmSAA,GqHHa,AhNbjB,AxMgBiB,AmSAA,C3FhBCxd,AhMeV,AmSAA,CpoBEUvyH,A6lBAAA,EoJJV,AjvBIC,AyVDY,AoQCZ,A+BDY,C3RDE,AmSAA,C6GFA,AjvBIDD,AiiBjBtB,A4DiBsBA,E7lBAb,A6lBAA,C5DjBiB,AxMgBAgwI,AmSAAA,C5nBCA1jK,AiWFE0jK,A4PEF1jK,AuCFE0jK,EpoBEnB,A6lBAA,E7lBAqB9vI,AyVD1B,AoQC0BA,A+BD1B,C3RDmB,AmSAA,CpoBEd,A6lBAA,E7lBAyB1kG,A6lBAAA,C7lBAzB,AiiBjB2B4qM,A4DiB3B,C5PF6B,AmSAA,CpoBED,AiWFd,A4PEc,AuCFd,InSAoB1qM,AmSAAA,CnGfjB,AhMekB,AmSAA,EnGfC,GhMeI,AmSAA,CnSA7C,AmSAA,EnSAiD,AmSAA,KnSAKo0O,AmSAAA,QnSAL,AmSAA,CnSAc7E,AmSAAA,SnSAd,AmSAA;A+NPpD,AlHMS,ACLL,AhBGDh6N,AluBMAgvF,AiiBjBF,A5MgBA8uG,AIAC,A1BVA,AkCSC,ACRE,AiPEF,AUQA9uG,A2BDF8uG,AIAC,AzBVA,AiCSC,ACRE,A9LEF,C4ZVJ,C9gBiBEA,AmSAAA,C/RnBmB,AmSAA,CsGcjB99L,AluBMAgvF,A6lBAAA,E7lBAE,AiiBjBAhmG,A4DiBA,C5DjBJ,A5MgBK,AmSAA,C0GLC,CluBMC,AiiBjBAzM,A5MgBA,AYDAwiP,AkPMA,AUJA,A2BDA,AYDAA,A7LMA,C2RVC,AluBMA/vI,AiiBjBR,A4DiBQA,E7lBAN,AiiBjBQvkG,A4DiBR,C5DjBF,CgNaYgE,AjvBIAsgG,AiWFV,A4PEUA,AuCFV,C6GFW,CjvBIC,A6lBAA,C5PFC,AmSAA,C6GFCtsG,CjvBIC,AqVDDC,AwQCC,A2BDDA,CxnBCEqsG,AqVDX,AwQCWA,A2BDX,CyHHC,AhZEW,AmSAA,C8FJA,AluBMjB,AqVDiB9tF,AwQCjB,A2BDiBA,CyHHExe,A5ZGd,AmSAA,CxnBCe44E,A6lBAAA,CxQDA,AmSAA,CyHHE,AjvBIA,AiWFA0jK,A4PEA,AuCFAA,G6GFGtwO,AjvBIA,A6lBAA,CoJJN,AjvBIO4sE,A6lBAAA,C5PF1B,AmSAA,CpoBEA,A6lBAA,E7lBA8B4zB,A6lBAAA,E7lBAE,A6lBAA,G7lBAG,A6lBAA,C7lBACA,A6lBAAA,E7lBApC,A6lBAA,E7lBAwC1kG,A6lBAAA,C7lBAC,A6lBAA,G7lBAG,A6lBAA,C7lBACA,A6lBAAA,C7lBA7C,A6lBAA;AoJHM,ACLP,AhBGG,AluBMF,AiiBjBF,A5MgBE7H,AIAFo7M,A1BhCiB,AiC+BnB,ACAI,ACTW,AiPeT,AUJF,A2BDAp7M,AIAFo7M,AzBhCiB,AgC+BnB,ACAI,ACTW,A9LeT,CxIrCN,AoSAA,C1QgCEA,AmSAAA,CsH/BA,C7Z+BEp7M,AmSAAA,CnSAC,AmSAA,CvFhBCyyM,CxMgBC,AmSAA,C5nBCCyH,AqVDA,AwQCAA,A2BDA,C0HRC,A7ZQAl6M,AIAA,AODAoiP,ACAA7B,AuRCAvgP,AIAA,AODAoiP,ACAA7B,C8FJCvpH,AluBMA,AqVDN,AwQCM,A2BDN,CvRDA,AmSAA,C/SCQz4G,A8PKFykD,AqCLEzkD,AjLKFykD,CvcJG,AiiBjBA,A5MgBA,AwQCA,A2BDA,CyHHCj3D,AhNbA,AhMeA,AkPMF,AiDNE,A7LMF,C0SRG,AfFA,C7YKC,AmSAA,CnSACwS,A8PKF3e,AqCLE2e,AjLKF3e,C0SRGK,AjvBIAk3O,AiiBjBL,A5MgBT,AWDJ,A6PEkBA,A2BDd,AWDJ,C+FJmB9oC,AjMXjB,AxMgBgBruM,AODC6rK,ACAA20E,A2RCDxgP,AODC6rK,ACAA20E,C3SCV,AmSAA,CqHHC,AjvBIN,AiiBjBiB,AhMeP,AkPMK,AUJf,AuCFU,A7LMK,C9GLEjiO,A0PKDtc,AyCLCsc,ArLKDtc,C0SRGhC,AfFjB,AzYKG,AmSAA,C3RDe,AmSAA,C8FJC4J,AzYKD,AmSAA,CqHHE,AjZE1B,AmPMe,AgDNf,A5LMe,C4IAUo5D,A5IAAA,C2RVG,AjMXA,AjMeA,ACAxB,AkSAwB,ACAxB,C6GFyBl3D,AfFA++B,AjMXR,AkDqBN,A5IAA,C0SRQ,A9JQjB,A5IAA,K2RV6B,IAAI,KAAX,EAAkB,MAAlB,EAA0BlxC,SAA1B,CAAH;AiIHzB,AlHMS,ACLL,AhBGE,AluBKF,AyVAAoG,AODF,ACAC,ACTK,AiPcF,AUJF,A+BAAA,AODF,ACAC,ACTK,A9LcF,GtGrCc,AmSAA,C3SiChBA,AmSAAA,CnSAC,AmSAA,E5RDEm8O,AmSAAA,CnoBEChiC,AyVDA,AoQCAA,A+BDA,CuOTCxrC,A1gBSA3uK,AmSAAA,C5nBCC,AyVDN,AoQCM,A+BDN,CsHRO,CzZQCue,A0PKFmvN,AyCLEnvN,ArLKFmvN,C2SbG7zO,AhBGA,AluBMA,AyVDA,AoQCA,A+BDA,CsHRF,AhZFC,AiPeA,AkDfA,A9LeA,CvGNV,AmSAA,C1SCc,AmSAA,CuOThB,AjHCiBkO,AhBGX,AzYKWwW,A0PKF,AyCLEA,ArLKF,C4ZdGqG,AjHCd,AlvBScwyN,AyVDd,AODcvrE,AmPMFwqF,AUJEjf,A+BDd,AODcvrE,A5LMFwqF,CrGfClgH,AmSAAA,C6GEG,A/JaF,A5IAA,CvcLd,AkWVQ,A2PUR,AwCVQ,C8NCZ,ChRcqBkgH,A5IAAA,C4ZdG,CngBQtB,AETqB,AiPeP,AgDNd,AETqB,A9LeP,CrGfR,AmSAA,EnSAkB,AiPeAH,AkDfA,A9LeAA,E4IAE,A5IAA,G4IAGA,A5IAAA,E4IAf,A5IAA,G4IAoBH,A5IAAA,I4IAI,A5IAA,G4IAG9yL,A5IAAA,E4IA5B,A5IAA,K4IAmC,A5IAA,I4IAIizL,A5IAAA,E4IAJ,A5IAA,G4IASJ,A5IAAA,I4IAT,A5IAA,G4IAgB9yL,A5IAAA,E4IAnD,A5IAA,C4IDT,A5IAA;A4ZZJ,AlHMK,ACLDp7D,AhBGD,AluBID,AiiBfF,A5MeE,AtBTW,AiCSd,ACACwzM,ACTQ,AiPaJ,AUJF,A2BAA,ArBTW,AgCSd,ACACA,ACTQ,A9LaJ,EtGJJA,AmSAAA,G8FxBO,CgBiBHxzM,CAAC,AjNRAtB,AhMeA,AmSAA,CpoBECqxO,AiiBjBA,A4DiBAA,C5PFC,AmSAA,C+NRC/yN,AjHCApf,CAAC,AlvBSA,AiiBjBAmpK,A4DiBA,CqJTC30K,A7ZOA,A8PMF2zO,AqCNE,AjLMFA,E4ZdI,An2BUAh1J,AmlBIF,AUJEA,AtJIF,C4ZdG7+D,Cn2BUC,A6lBAA,CqJTC,A7ZOA0iO,AaTFL,AiPeA,AqCNEK,AaTFL,A9LeA,C2SbGtiP,AnbFMgyK,AoReRwqF,AgBfQxqF,A5JeRwqF,C4Zdd,AjHCe,AlvBSE/pJ,AiiBjBA,AhMeDtsG,A4PECssG,AuCFDtsG,C8GPP,AjNRS,AhMeX,AkPMS,AiDNT,A7LMS,CvcNd,A6lBAA,CqJPkBnG,AjZOD0kB,AmSAAA,C8GPV,A7ZOP,AYAK,AkPMY83O,AqCNjB,AYAK,A7LMYA,C0FrBF,CiNQMr8P,AjNRlB,AlOMQ,AkCSS,ACTd,AiPeM,AgBfD,AiCSS,ACTd,A9LeM,CrGfQu9O,AmSAAA,CpGNG19O,AlOMM,AoSAA,ClENL,AkDqBFq8P,A5IAAA,E2Sbf,A/JaiB,A5IAA,C2SbtB,AjNRyB,CAAxB,A/LMG,AmSAA,CnSAqB,AiPeAA,AkDfA,A9LeAA,C0FrBGnuP,CAAC,AkDqBnB,A5IAA,G0FrBsBzB,A/LMFi6O,AiPeAwV,AkDfAxV,A9LeAwV,C0FrBG,CAAC58P,A/LM9B,AmSAA,EnSA8BolB,AiPeA,AkDfAA,A9LeA,CrGf9B,AmSAA,ElDeiC0kD,A5IAAA,C0FrBzC,CkDqBa,A5IAA,C0FrBiCppE,CAAC,GAAGkO,AkDqBF,A5IAA,C0FrBhD,EAAqD,CkDqBDsuP,A5IAAA,C0FrBGx8P,CAAvD,AkDqBgD,A5IAA,E0FrBU,CkDqBDi8P,A5IAAA,I4IAT,A5IAA,G4IAgB9yL,A5IAAA,E4IAnD,A5IAA,C4IFT,A5IAA;A4ZXF,AlHMC,AfFDr2C,AluBGA,AiiBdA,A5MeE,AIAF,A1BTF,AkCSE,AkPGE,AUJF,A2BCE,AIAF,AzBTF,AiCSE,A7LGE,I2RPFA,IluBMIirN,AiiBjBAtxO,A4DiBAsxO,CsQVCm0F,AjIIA,AjMXA,AlOMA,AkCSAxrF,AkQTA,AiCSAA,CnGfC1mP,CiMWC,AluBMA,AiiBjBF,A5MeE,AYAP,A4PEO,A2BFA,AYAP,CnGfI,A5MeF,AIAM,AQAAC,AkPMF23M,AqCNJ,AIAM,AQAA33M,A7LMF23M,C0FrBGotB,AlOMArzE,AoSAAA,CnmBWCj/C,AmlBIF,AUJEA,AtJIF,EvcJI,AiWFZ,A4PEY,AuCFZ,C3SAaiwI,AQAA,AkPMF58O,AyCNE48O,AQAA,A7LMF58O,C0FrBP,AhMeUI,AmSAAA,CpoBECqsG,AiiBjBAomG,AlOMV,AkCSL,A4PEepmG,AMXV,AiCSL,CrUTgBw/D,AoSAAA,CnmBQhB,AmlBOe,AUPf,AtJOe,C4IAChiK,A5IAAA,C2RVE,AzYIlB,AmSAA,CuORA,ChRcW,A5IAA,C0FrBP,AkDqBgBjK,A5IAAA,C0FrBpB,AlOMK,AoSAA,CpSAP,AoSAA,ClEN2B,CkDqBD,A5IAA,C4IACqC,A5IAAA,I4IAL,A5IAA,C0FrBY,AkDqBFyrO,A5IAAA,C0FrBL,CkDqBO,A5IAA,G4IAGA,A5IAAA,E4IAL,A5IAA,G4IAU,A5IAA,C4IApB,A5IAA,I4IAyBA,A5IAAA,E4IAlC,A5IAA,C4IHT,A5IAA;A4ZVA,AlHMH,ACNG,AhBIA,AluBEF,AiiBbD,A5McW,AICR,A1BTL,AiCSD0U,AEVU,AiPYJ,AUJF,A2BCU,AICR,AzBTL,AgCSDA,AEVU,A9LYJ,QvcAEvK,A6lBAAA,C7PFC,AmSAA,C+GRCjwO,AhBIAovH,AlYIA/8H,AmSAAA,C+GRC,AlvBUA,AyVFA,AoQEA,A+BFA,CnSAL,A0PMIgyM,AyCNJ,ArLMIA,C4ZdGrnL,A9gBOM43N,AmSAAA,CxnBGLtiC,AmlBIF,AUJEA,AtJIF,C2SdG,AhBIA,CluBMC,A6lBAA,CsQVC,AjgBFFiiC,AiPgBAv8O,AkDhBAu8O,A9LgBAv8O,C4ZdGyqU,CjHAR,AhBIS/7H,AluBMAhiG,AqVHL,AWCd,A6PEmBA,A2BHL,AWCd,EnoBFI,AmlBQe,AURf,AtJQe,ClHPS,AWCN,AmPMFziG,AqCPQ,AWCN,A5LMFA,C2SdGjC,A7ZOT,AmSAA,C0HPU,AhBIlB,ChYNI,AiPgBK,AkDhBL,A9LgBK,C4ZdT,AjIIoBiC,AhYNF0tO,AiPgBA33O,AkDhBA23O,A9LgBA33O,E2SdIgI,CAAtB,AhBIuB,CAACkjC,A/IUF,A5IAA,C2SdG,A/JcF7oC,A5IAAA,CrGhBnB,AmSAA,CnSAqBjC,AmSAAA,CnSArB,AmSAA,ClDgBc,A5IAA,C2RVY,AhYNFue,AiPgBAovN,AkDhBApvN,A9LgBAovN,CrGhBxB,AmSAA,ClDgB0B,A5IAA,E2RVI,C/IUDA,A5IAAA,E4IAL,A5IAA,E2RVL,C/IUe,A5IAA,C2RVG,A/IUvB,A5IAA,I4IAyBA,A5IAAA,E4IAlC,A5IAA,C2RVc,A/IMvB,A5IAA,E2RNkD/zO,SAA3B,CAAH;AgBHlBmH,AhBIF,AluBCF,AiiBZH,A5Ma8B,AICjB,AOCZq7O,ACDE,ACTK,AiPgBH5qK,AUTF,A2BC2B,AICjB,AOCZ4qK,ACDE,ACTK,A9LgBH5qK,C0F5BN,CjMsBE4qK,AmSAAA,M+GRMr7O,AlvBUA+2O,AmlBIFtmK,AUJEsmK,AtJIFtmK,C2SdG,AjZOAgvK,AkPOF,AiDPEA,A7LOF,EvcJI,AgWFA,ACDP,ACZI,A2PeG,AsCFA,ACDP,ACZI,C6GKIl6O,AjZOAxM,AkPOF,AiDPEA,A7LOF,C2SdG,AhBIA,A7YEuBuiP,AICjBG,AOCN,AmPMFvwC,AqCRyBowC,AICjBG,AOCN,A5LMFvwC,CvcJGkO,A6lBAAA,CVID,A5IAA,C2SdGvyM,AlvBUA,AiWHZ,A4PGY,AuCHZ,C8GPI,AhBIF,AjYGW,ACTF,AkSSE,ACTF,ChTQgB,AYCb2W,AkPOFkzL,AqCRe,AYCblzL,A7LOFkzL,CvcJGplG,AyVHL,AQAV,A4PGeA,A+BHL,AQAV,CjDOM,A5IAA,CvcTN,AqVCwC,AwQDxC,A2BCwC,C/RChB,AmSAA,CnSAd,AmSAA,CzCOQ2c,A5IAAA,CvGNE,AmSAA,C9SFyBmzH,AmSAAA,CrCQ3C,A5IAA,OlHRsC,AmSAA,CnSAc5E,AmSAAA,MnSAd,AmSAA,CnSAqBv3O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSAb,AmSAA,GnSA0C,AmSAA,KnSAK49N,AmSAAA,QnSAL,AmSAA,CnSAc9E,AmSAAA,MnSAd,AmSAA,CnSAqBr3O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSA1C,AmSAA;A2ON3B,AlHOF,ACNM,AhBIH,AluBAD,AqVCiG,AICtE,AOE3B,ACDD,ACTO,A2PMN,A2BCiG,AICtE,AOE3B,ACDD,ACTO,QroBYFw5N,A6lBAAA,CsQXCi0F,AlHOA,AjZEA3vF,AmSAAA,C8GFCt8O,GAAD,AjvBII,AyVJuBs8O,AoQIvB,A+BJuBA,C5REhC,AmSAA,C8GFWp8O,CjvBIC43O,AkWZFvrI,A2PYEurI,AwCZFvrI,CrSUG,AmSAA,C8GFR,AxZAsB,AOE3B,AEVY,A0RQe,AOE3B,AEVY,C4GQd,AjvBIiB,A6lBAA,EpQJyB,ASRzB,A0RQyB,ASRzB,CroBYGurI,A6lBAAA,GsQXlB,An2BWY,A6lBAA,CpQJiCsE,ASRzBoE,A0RQyBpE,ASRzBoE,EroBYIzI,AkWZT,A2PYSA,AwCZT,GroBYY,A6lBAA,C3PZD,AmSAA,EroBYIA,AyVJU,AoQIVA,A+BJU,CnSAcP,AmSAAA,C1RRxB,AmSAA,CroBM9B,A6lBAA,C7lBFiC,A6lBAA,C7lBUjC,A6lBAA,EpQNwC,ASRLphG,A0RQK,ASRLA,C5SQ0Bn2I,AmSAAA,CnSArB,ASRzB,A0RQyB,ASRzB,E5SQiDue,AmSAAA,CnSAxB,AmSAA,CnSAb,ASRcve,A0RQd,ASRcA,CnSAC,AmSAA,E5SQ2B,AmSAA,C1RRxB,AmSAA,I5SQ6Bm8O,AmSAAA,C1RRxBhmG,AmSAAA,EnSA5C,AmSAA,K5SQ+D,AmSAA,CnSAckhG,AmSAAA,MnSAd,AmSAA,CnSAqBr3O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSA1C,AmSAA;AuON3B,AlHOH,ACNM,AhBrBE,AjMcT,AxMYqG,AOGlG,ACtCiB,AkP2Cd1kB,AyCR+F,AOGlG,ACtCiB,A7L2CdA,CtG3CN,AmSAA,E8FSE,AlY0BoB,ACItB,AkSJsB,ACItB,KjDIMA,A5IAAA,C4ZdGsyU,AlUNAx9J,AkDoBF,A5IAA,G4IAG,A5IAA,K0FpBV,CAAkB/pJ,IAAlB,AkDoBmBrnB,A5IAAA,C4IAT,A5IAA,C0FpBc,CkDoBF,A5IAA,C4ZdlB;AACE,AjHCD,AhBIJ,AluBOG,AiiBlBF,A5MWI,AWIJ++O,AEXQ,AiPgBF,AUFJ,A2BPE,AWIJA,AEXQ,A9LgBF,EvGLNA,AmSAAA,MnoBGMz0O,A6lBAAA,C7lBAC,AgWHA,A6PGA,AsCHA,ClGfC+c,C5MWC,AWIA,AwRJA,AWIA,CnoBGC,AqVPN,AwQOM,A2BPN,C2OLO,An2BYT,A6lBAA,CsQZUA,AlUNA,AkDoBFvnB,A5IAAA,CvcFG,AiiBlBAyc,AkDoBF,AUFE,AtJEF,ErGhBEqiO,AmSAAA,C8NEG,AhRcF5+O,A5IAAA,C4ZdGyvC,AlUNjB,AkDoBe,A5IAA,EvcFI,A6lBAA,CVEDwkC,A5IAAA,C4ZdP,AngBSS,AmPKd,AgDLc,A5LKd,E4ZdiB5sD,An2BYAxsB,AkWdf,A2PceA,AwCdf,CnSAcm/O,AmSAAA,G8NEK,CAACtqM,An2BYT,A6lBAA,C7lBAU,A6lBAA,C3PdrB,AmSAA,CnSAqBq/D,AmSAAA,E8NElB,AjgBFH,AmSAA,C8NEJ,CjgBF6B,AmSAA,KnSAKk0I,AmSAAA,EnSA9B,AmSAA,SroBc2C34O,A6lBAAA,C7lBAhC,A6lBAA,C7lBAN,A6lBAA,C7lBXsB,A6lBAA,C7lBajC,A6lBAA;A5DnBA,A5MUU,AICR,AOIF,ACAJ,AkPIQ,AqCTM,AICR,AOIF,ACAJ,A7LIQ,S0FnBCkkU,AjMeA1vF,ACAAuG,AkSAAvG,ACAAuG,E3SJE,AmSAA,CnSAL,AmSAA,CvSDapG,AmSAAA,CxRKf,AmPKQ8Z,AgDLR,A5LKQA,GvGLKlqL,AmSAAA,E9SLH,AmSAA,CxRKV,AmPKc,AgDLd,A5LKc,ElHVU,AYK5B,AuRL4B,AYK5B,C/SLc,AYKSpsE,AkPKFkU,AqCVP,AYKSlU,A7LKFkU,C0FpBjB,AhMeJ,AmSAA,EnSA0B,AmSAA,CjDKD,A5IAA,C4IACu9L,A5IAAA,E4IAD,A5IAA,C4IDjB,A5IAA;A4ZbJ,AjHCA,AlvBaA,AiiBnBE,A5MSyB,AICjB,AOKX,ACAD,ACZQ,AiPeF,AUCJ,A2BV2B,AICjB,AOKX,ACAD,ACZQ,A9LeF,GvGTc,AmSAA,GlSMhB53M,AmSAAA,CnSAJ,AmSAA,C8GTMA,AlvBaA,A6lBAA,CsQdCoyU,AjHCA,IlvBaI90F,AiiBnBAvyN,AxMUM43N,AoQSNrF,A+BTMqF,CsHJLz0O,A/JcF8wE,A5IAAA,C2SdR,A/JcS,A5IAA,CvcDL,A6lBAA,CqJbS,AjNNA,A/LGFsjK,AmSAAA,CpGHGkuF,AkDoBFn0E,A5IAAA,C9GVF,AmSAA,CzCUI,A5IAA,CvcDG,A6lBAA,CpQTO,AmSAA,CuOLxB,A1gBKU,AmSAA,CsHJU,A/JcFJ,A5IAAA,C2SdG,AlvBarB,AkWhBM,A2PgBN,AwChBM,C6GGgB,AjNNpB,A/LGkBve,AmSAAA,C6GGA,AlvBaG,A6lBAA,CVCD,A5IAA,C2SdG,CAAC,CAAN,A/JcKv0K,A5IAAA,C2SdZ,AhZHP,AmSAA,CnSAqBspC,AiPiBb,AkDjBaA,A9LiBb,C4IAF,A5IAA,CrGjBN,AmSAA,EnSAyB/tF,AmSAAA,CnSAzB,AiPiB0B+3O,AkDjB1B,A9LiB0BA,M4IAM,A5IAA,G4IAG50P,A5IAAA,I4IAI,A5IAA,C4IACsnH,A5IAAA,G4IAG,A5IAA,G4IAG3rH,A5IAAA,C4IAN,A5IAA,G4IAUo0M,A5IAAA,E4IAX,A5IAA,C4IAb,A5IAA,G4IA8Bx9L,A5IAAA,I4IAI,A5IAA,C4IACw9L,A5IAAA,E4IAD,A5IAA,C4IAtD,A5IAA,C4IFR,A5IAA;A4ZZF,AjHCF54H,AlvBaE,AyVVyB,AOM7B0jK,ACDA,ACXO,AiPiBD,AUDF,A+BVyB,AOM7BA,ACDA,ACXO,A9LiBD,EvGLNA,AmSAAA,E+GTE1jK,CAAC,CjZSC9wE,AmSAAA,CnSAC,AmSAA,C8GTCgE,CAAC,CjZSC/L,AmSAAA,CpoBICwgB,AgWJA,ACAA,A4PIAA,AsCJA,ACAA,C8GTC3mB,AlvBaN,AiWJMV,A4PIN,AuCJMA,C+NVC,AjHCT,AzZGgCg+O,AOMvB,A4RNuBA,AOMvB,CgOVCvyN,En2BcE,AyVVe,AoQUf,A+BVe,CzCWhB,A5IAA,C4ZfG,AlgBUR,AkPMAoxO,AiDNA,A7LMAA,C4ZhBSw2E,A1gBIuBxsU,AmSAAA,CnSAX,AmSAA,C3RMV,AkPMR,AiDNQ,A7LMR,C9GZgC,AQK3C,A2RL2C,AQK3C,CpoBKqB,A6lBAA,CVEP64E,A5IAAA,C4ZhBH,AngBUW,AmPMP,AgDNO,A5LMP,E4ZhBUz/E,A1gBIuBg+O,AmSAAA,C5nBUtBD,AmlBERxxN,AUFQwxN,AtJERxxN,E9GZyB,A0PW9B,AyCX8B,ArLW9B,CvcDQ,A6lBAA,CVGbswO,A5IAAA,C4ZjBG,A1gBI2C13O,AmSAAA,CuOJtBqG,An2BcA0nF,AyVVH,AoQUGA,A+BVH,CzCalB,A5IAA,CvcHG,A6lBAA,EsQdsB,AhRiBtBzzB,A5IAAA,C4ZjBuBj/E,AhRiBtB,A5IAA,CvcHuB,A6lBAA,EVGpB+kB,A5IAAA,CvcHJ,A6lBAA,CVCD,A5IAA,E4IGLu3O,A5IAAA,CvcJqC,A6lBAA,CsQdlC,AhRkBD,A5IAA,C4ZlBN,EhRkBSI,A5IAAA,CvcJqClf,A6lBAAA,G7lBAL,A6lBAA,EVIrC,A5IAA,CvcJgD/qI,A6lBAAA,E7lBA1C,AmlBIQn4F,AUJR,AtJIQA,CvcJlB,A6lBAA,GVIsB,A5IAA,C4IAC80G,A5IAAA,G4IAG,A5IAA,G4IAG3rH,A5IAAA,C4IAN,A5IAA,G4IAUo0M,A5IAAA,E4IAX,A5IAA,C4IHb,A5IAA,C4IAP,A5IAA;AvcAH,AiiBnBD,A5MQE,AIAqD,AOOvD,ACFF,AkPWK,AULF,A2BXC,AIAqD,AOOvD,ACFF,A7LWK,KvcPH,A6lBAA,C7lBIA,AiWNEngH,A4PMF,AuCNEA,CnSFJ,AmSAA,EnGbO06O,AjMeA/0F,AmPAH,AgDAGA,A5LAH,ElHPK,AmSAA,CnSAL,AWOF,AwRPE,AWOF,GnSAW,AmSAA,KnSAKE,AmSAAA,GnSAL,AmSAA,ElGfX,CjMgBA,AmSAA,KnSAKD,AmSAAA,GnSAL,AmSAA,GnSAW,AmSAA,KnSAKE,AmSAAA,GnSAL,AmSAA,GnSCX,AmSAA,KnSAKiL,AmSAAA,GnSAL,AmSAA,GnSAWj2K,AmSAAA,GnSFX,AmSAA;AgOVA,AjHCA,AlvBWA,AiiBhBA,A5MOU,AWUV,ACLF,ACVM,AiPsBH,AURD,A2BTU,AWUV,ACLF,ACVM,A9LsBH,MtGTCrrE,AmSAAA,CnSAC,AmSAA,E+NXEmrU,An2BiBA,AiiBrBAC,AjMiBA3vF,A6PIA,AsCJAA,ClSFC,AmSAA,C8GVC,EAAE3iP,AlvBgBA,AqVdM2iP,AwQcN,A2BdMA,C0HFR,AjZUG7iP,AmSAAA,CpoBMCo+O,AgWJX,A6PIWA,AsCJX,E+GZahwO,CAAb,AlZYc,AmSAA,C9SVJ,AWUV,ACFM,AuRRI,AWUV,ACFM,C8GVU,AlvBgBA,AiWNAA,A4PMA,AuCNAA,CnSAV,AmSAA,C/SRkB,AYK1B,AuRL0B,AYK1B,CpoBSqBmvE,AqVdT,AwQcSA,A2BdT,GvFPV,IkUIA,An2BiBS,A6lBAA,C7lBAJ,A6lBAA,E7lBAuB,A6lBAA,C7lBAvB,A6lBAA,C7lBEL,A6lBAA;AsQlBE,AjHCAtvE,AlvBkBF,AiiBvBE,AxMOA,AOUH,ACND,ACTK,A2PqBH,A+BhBE,AOUH,ACND,ACTK,GrSGe,AmSAA,G+GAhBA,AjZUAA,AmSAAA,C8GVC,AjZUA,AmSAA,G8GVGpC,AjZUA,AmSAA,C8GVC,AzZEA,AmSAA,CsHFCxL,AzZEN,AmSAA,CuOHO,AlUJA,CkUIC4qB,AlUJAA,AhMeAjrB,AmSAAA,G8GVG,CiHDC,AjHCAE,AjNLA,CkUIC2tB,AjHCF,AjNLEwlB,AhMeT,AmSAA,C8GVC,AjZUSjlC,AmSAAA,CnSAV,AmSAA,C8GVYlO,AjZMpB,AmSAA,C+NPW,AjHCF,AjNLE,EkUIY+qB,AjHCA5qB,AjNLA4qB,IkUII,AlUJA,CkUIC6nT,AjHCnB,AjNLmBx/R,CiNKxB,IjNLO,CAAP,IkUIO,EAA6BroB,IAAI,CAAC8nT,SAAlC,CAAP;An2BoBF,AqVlB2B,AICjB,AOWZjwF,ACPA,ACtBE,AiPoCA5iP,AUDA,A2BlB2B,AICjB,AOWZ4iP,ACPA,ACtBE,A9LoCA5iP,EvGPF4iP,AmSAAA,EhDOE5iP,A5IAAA,C4IAC,A5IAA,CtGTCgO,AkPSA0uP,AiDTA1uP,A7LSA0uP,CtGTC,AmSAA,EpSEE,AmSAA,ClSFC,AmSAA,CpSEC,AmSAA,E9SZyBpa,AICjBK,A+RDiBL,AICjBK,C3RSL7iP,AkPSV,AiDTUA,A7LSV,G4IAa63E,A5IAAA,C4IAC,A5IAA,C9GlBJ,AQSJ,A2RTI,AQSJ,CnSAUzpE,AmSAAA,C/SVW,AYUrB,AkPSW,AqCnBU,AYUrB,A7LSW,ClHnBwBwvO,AICjB,AQI1B,AuRL2CA,AICjB,AQI1B,C3SJY,AOWQ,A4RXR,AOWQ,EhDOL,A5IAA,GlHnBc,A8PmBHvuH,AqCnBG,AjLmBHA,ClHnBwB,AmSAA,CnSAC,AmSAA,CrCmBpC,A5IAA,GlHnBwC,A8PmBvBppH,AqCnBuB,AjLmBvBA,I4IAI,A5IAA,ClHnBwBq3O,A8PmBvB5T,AqCnBuB4T,AjLmBvB5T,GlHnBc,AmSAA,ErCmBjD,A5IAA,ClHnBgE,AmSAA,KnSAK8T,AmSAAA,GnSArB,AmSAA,InSA4B,AmSAA,CnSAjD,AmSAA,EnSAoD,AmSAA,CnSAC,AmSAA,InSAI,AmSAA,KnSAKD,AmSAAA,GnSAT,AmSAA,GnSAe,AmSAA,KnSAKE,AmSAAA,GnSArB,AmSAA,InSA4B,AmSAA,CnSAhF,AmSAA;A2OD3B,AjHCE,AlvBcG,AiiBlBL,AxMK2B,AOY3B,ACFFr2O,AkPUE,AUPK,A+BbsB,AOY3B,ACFFA,A7LUE,EtGVFA,AmSAAA,CnSAC,AmSAA,CnSAC,AmSAA,CnSAD,AmSAA,CnSAD,AmSAA,G+NZOqrU,AlUHAH,AhMeA,AmSAA,C8GXCrkU,AjZWR,AmSAA,C8GXS,AlvBmBF,AmlBEE/N,AUFF,AtJEEA,CvGRC,ACFA+N,AkPUR,AgDRQ,ACFAA,A7LUR,CtGVS,AmSAA,CnSAC,AmSAA,C8GXC,AlvBmBF,AiWRA,A4PQA,AuCRA,CnSAD,AmSAA,CpoBQGhI,AgWNE48O,A6PMF58O,AsCNE48O,E+GbX,AjZWa,AmSAA,CnSAjB,AmSAA,C8GXmB,AlvBmBF,A6lBAA,C7lBAC3pO,AiWREhL,A4PQFgL,AuCREhL,CnGflB,AjMiBA,ACFmB,AkSEnB,ACFmB,CnSAC,AmSAA,C+NZpB,An2BoBW,AiWRQ,A4PQR,AuCRQ,CpoBQCiwO,AiWRF,A4PQEA,AuCRF,GpoBQK,AiWRE93O,A4PQF,AuCREA,CnSAC,AmSAA,CnSAC,AmSAA,CpoBQD23O,AiWRA,A4PQAA,AuCRA,CnSAD,AmSAA,EpoBQL,A6lBAA,C5PRY,AmSAA,EpoBQAC,A6lBAAA,E5PRI53O,AmSAAA,CpoBQD,AiWRE,A4PQF,AuCRE,CnSAC,AmSAA,CnSAD,AmSAA,CpoBQC63O,AiWRxC,A4PQwCA,AuCRxC,GpoBQa,A6lBAA,I7lBAkC3gK,A6lBAAA,O7lBApC,A6lBAA,K7lBAgD,A6lBAA,C7lBACrvE,A6lBAAA,C7lBArD,A6lBAA,E7lBAwD,A6lBAA;AsQnB3D,AjHCE,AlvBmBF,AiiBvBA,A5MG6G,AWc7G,AEhBF,AiPwBD,AUFG,A2BpB6G,AWc7G,AEhBF,A9LwBD,SrGxBM04O,AmSAAA,ErSgBE,AEhBP,AiSgBO,AEhBP,C6GGQx/O,AlZaN,AmSAA,CgOdO,AjHCA,AjNJA,CkUGC6jB,AlUHAA,A/LCA5kB,AmSAAA,CroBsBHwgB,AkWtBP,A2PsBOA,AwCtBP,C6GGY5Y,AlvBmBV,A6lBAA,CqJnBE,AhZHS,AmSAA,C8NEC,AlUHA,CkUGCs5L,AjHCA,AjNJAsrI,CjiBuBH,A6lBAA,E3PtBMhsF,AmSAAA,EnSAL,AmSAA,C8NEJ,AlUHA,EkUGc57N,An2BoBJ,AiiBvBIxrB,A/LCAmlB,A2PsBJ,AwCtBIA,CnSAvB,AmSAA,G8NE2B,CAAC6yL,An2BoBJ+lC,A6lBAAA,C5DvBf,CAAqBvyN,CjiBuBX,A6lBAA,G7lBAW0nF,AiiBvBI,A4DuBJA,C5DvBK1yG,CkUG1B,An2BoBG,A6lBAA,CsQpBV,Gn2BoBkC,A6lBAA,G7lBAxB,A6lBAA,C5DvBH,CAAP,EjiBuByC,A6lBAA,K7lBAKw9O,A6lBAAA,G7lBAL,A6lBAA,G7lBAW/qI,A6lBAAA,E7lBA1C,A6lBAA,C7lBAV,A6lBAA;AqJlBItrG,AlvBmBL,AyVnBC,AOYQ,ACFZ,ACbC,A2PsBE,A+BnBC,AOYQ,ACFZ,ACbC,OpSaIlH,AmSAAA,CnSAC,AmSAA,CpoBOC,A6lBAA,CqJjBCkH,AlvBqBN,A6lBAA,CqJrBO,AjZUA,AmSAA,CnSAT,AmSAA,CpSEiBo7O,AmSAAA,C+GZLv0O,AjZUA/N,AmSAAA,C8GVJ,AjZUK,AmSAA,GnSAGkO,AmSAAA,CnSAC,AmSAA,EpSEL,AmSAA,CnSAcwvO,ACFN,AkSEMA,ACFN,CnSApB,AmSAA,EnSAuB,AmSAA,EnSAE19O,AmSAAA,CpSEb,ACFZ,AkSEY,ACFZ,CpSEiC,AmSAA,ClSFLkH,AmSAAA,CnSAC,AmSAA,CnSAClH,AmSAAA,CnSAD,AmSAA,CpSESs9O,ACFV,AkSEUA,ACFV,GpSEhB,ACFuB,AkSEvB,ACFuB,CnSAP,AmSAA,CpSEe,AmSAA,ClSFLvvO,AmSAAA,CnSAC,AmSAA,CnSAC/N,AmSAAA,CnSAD,AmSAA,CpSESu9O,ACFV,AkSEUA,ACFV,GpSE1B,ACFiC,AkSEjC,ACFiC,CnSAjB,AmSAA,EnSAoBvvO,AmSAAA,CnSAC,AmSAA,CnSAChO,AmSAAA,CnSAD,AmSAA,CnSAD,AmSAA,GnSAO,AmSAA,InSAImG,AmSAAA,CnSAC,AmSAA,CnSACnG,AmSAAA,CnSAD,AmSAA,CnSAL,AmSAA,GnSAW,AmSAA,InSAImG,AmSAAA,CnSAC,AmSAA,CnSACnG,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSAL,AmSAA,CnSA3C,AmSAA;A+NX1B,AjHEMg/E,AlvBgBD,AiiBpBL,A5MEE,AICSuiI,ASrCE,AiP2DfzL,AULO,A2BlBH,AICSyL,ASrCE,AxFLjB,AvPAA,AsKAA,ArBgEEzL,A9IhEF,CyCKA,AmSAA,ClD2DEA,A5IAAA,I4IAI,A5IAA,C4IAC3mF,A5IAAA,C9GtBQoyF,AmSAAA,CuODNixH,AlUFAH,AYvCAx5H,AvPAAA,AsKAAA,AnKAAA,Cyb2CC75H,A/JqBR,A5IAA,C2SrBS,ElvBqBF,AyVtBW,A0PsBP,AUAJ,A+BtBW,ArLsBP,C2SrBCh/E,AzZDO,AmSAA,CsHCX,ErM3CV,AvPAA,AsKAA,AnKAA,CgC0CoB,AmSAA,A/E1CDikB,AvPAAA,AsKAAA,AnKAAA,EgC0CQ9d,AmSAAA,A/E1C3B,AvPAA,AsKAA,AnKAA,CgC0CoB,AmSAA,C/E1CG23C,AvPAAA,AsKAAA,AnKAAA,CgC0COp5B,A0PsBRiC,AyCtBQjC,ArLsBRiC,C9GtBF,A0PsBP,AyCtBO,ArLsBP,C4ZvBT,A1gBCW,AmSAA,CzCsBU,A5IAA,EsGhEzB,AvPAA,AsKAA,AnKAA,EwOuCI,AYvC2BplB,AvPAAA,AsKAAA,AnKAAA,IoPA/B,AvPAA,AsKAA,AnKAA,EoPAqC,AvPAA,AsKAA,AnKAA;A0iB0C/B,AjHEG,AlvBqBH,AiiBzBA,A5MCSggN,AICmB,AOYsB,ACDtDr6M,AkPYE,AUAE,A2BxBSq6M,AICmB,AOYsB,ACDtDr6M,AvFpDA+c,AvPAAA,AsKAAA,ArBgEE,A9IhEFA,EwCoDA/c,AmSAAA,AvFpDA+c,AvPAAA,AsKAAA,AnKAAA,CwCoDC,AmSAA,CnSAC/V,AmSAAA,AvFpDA,AvPAA,AsKAA,AnKAA,CwCoDC,AmSAA,AvFpDA4vC,AvPAAA,AsKAAA,AnKAAA,G4BwCUyjK,AYYP,AkPYAo7C,AqCxBOp7C,AYYP,A7LYAo7C,CtGZL,AmSAA,CnSAD,AkPYQ,AiDZR,A7LYQ,CsGhER,AvPAA,AsKAA,AnKAA,E0iByCW5xO,AlUFA,A5MCO,AYYP,AkPYAhlB,AqCxBO,AYYP,A7LYAA,C0FzBCglB,A5MCO,AYYnB,AuRZmB,AYYnB,AvFpDY+yB,AvPAAA,AsKAAA,AnKAAA,EzTgEJqgM,AiWZMpwO,A4PYNowO,AuCZMpwO,C+NXC,AlgBWA,AkPYA,AiDZA,A7LYA,C4ZvBCozM,AlUFA,A5MCE,AYYFjzM,AkPYA9H,AqCxBE,AYYF8H,A7LYA9H,CvcAL,AiiBzBMunB,AhMaA,A4PYN,AuCZM,C/SZQxnB,AmSAAA,A3ExCP,AvPAA,AsKAA,AnKAA,C4BwCA,A8PwBP,AqCxBO,AjLwBP,CvcAG24E,AiWZM,AkPYA,AUANA,AuCZM,A7LYA,C0FzBT,A5MCiBp6D,AYYb,AuRZaA,AYYb,CpoBYC,AqVxBE,AYYJ,A4PYE,A2BxBE,AYYJ,AvFpDQ,AvPAA,AsKAA,AnKAA,CwOuCCqG,A5MCV,AmSAA,CrCwBF,AtChEX,AvPAA,AsKAA,ArBgEW,A9IhEX,CzTgEmBs1L,AiWZM,A4PYNA,AuCZM,C+NXrB,AlgBWJ,AkPY0B,AiDZ1B,A7LY0B,CvcAtB,AiiBzBuB,AkDyBA15L,AUAvB,AtJAuBA,C0FzBCisT,AhMaA5kU,AkPYjB,AiDZiBA,A7LYjB,CtGZkB,AkPY3B,AiDZ2B,A7LY3B,CtGZ4BE,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSAL,AmSAA,CnSAD,AmSAA,EnGbjB,ChMa4B,AmSAA,CnGbC6c,GhMaG5kB,AmSAAA,CnGbC,AhMaA,AmSAA,CnGbC0sU,AhMaA3kU,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSAL,AmSAA,CnSAL,AmSAA,GnGb5B,AhMa2C/H,AmSAAA,CnGblD,AhMamD,AmSAA,CnSAC+H,AmSAAA,CnSAD,AmSAA,CnSAvD,AmSAA;ApoBYI,AqVxB4B,AIH9B,ASIW,AiPuBX,AUAE,A2BxB4B,AIH9B,ASIW,AxFxCb+V,AvPAAA,AsKAAA,ArB+DE,A9I/DFA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,CoPAC2vL,AvPAAA,AsKAAA,AnKAAA,G0R+D4BgpD,A5IAAA,E4IAE,AtC/DjC,AvPAA,AsKAA,ArB+DiC,A9I/DjC,G0R+DoCD,AtC/DzBp7P,AvPAAA,AsKAAA,ArB+DyBo7P,A9I/DzBp7P,E0R+D2B,A5IAA,CvcC9B68O,A6lBAAA,ChDhER,AvPAA,AsKAA,AnKAA,CyCwCsBpsE,AiPuBmB2qF,AkDvBnB3qF,A9LuBmB2qF,CvcC9B,A6lBAA,CVDT,A5IAA,EvcCYjqJ,A6lBAAA,E7lBAE,A6lBAA,C3PxBH,AmSAA,EroBwBM4tG,AkWxBY,A2PwBZA,AwCxBY,EroBuB3B,A6lBAA;AsQtBF,AjHEI,AlvBoBF,AiiBvBF,A5MLA,AWkBE,ACDJ,ACXA,AiPsBE,AUAE,A2B5BF,AWkBE,ACDJ,ACXA,AxFxCA,AvPAA,AsKAA,ArB8DE,A9I9DF,OwCmDKtgN,AmSAAA,CnSAC,AkPWuC68P,AiDXvC,A7LWuCA,C4ZtBtCo1E,AlUDAM,A/LCA,AmSAA,AxFxCAtuT,AvPAAA,AsKAAA,AnKAAA,C0R8DwC,A5IAA,CvGVtC,ACDA,AkSCA,ACDA,AvFnDT,AvPAA,AsKAA,AnKAA,Cyb0CUxX,AlZUN,ACDJ,AkSCI,ACDJ,C8GTW,AhZFAw8O,AiPsBuC2T,AkDtBvC3T,A9LsBuC2T,CtGXtC58P,AmSAAA,CnSAC,AkPWuC,AiDXvC,A7LWuC,C2SpBtC+N,AlvBsBNswO,A6lBAAA,CsQxBN,AjHEI,AhZFC,AmSAA,CpSWSnwO,ACXA8jK,AiPsBuC4qF,AiDXvC1uP,ACXA8jK,A9LsBuC4qF,C2SpBtC,AjZSjB,AmSAA,CjDWE,A5IAA,CvcEW,AiWbM,A4PaN,AuCbM,EnSAE58P,AmSAAA,CpoBaL89O,AiWbhB,A4PagBA,AuCbhB,CnGZE,A/LCK,AmSAA,CpSWiBrmJ,AmSAAA,CpoBaL,AiWbM,ACXA,A2PwBN,AuCbM,ACXA,GroBwBHqmJ,AiWbM52O,ACXrB,A2PwBe42O,AuCbM52O,ACXrB,CpSWsB,ACX7B,AkSW6B,ACX7B,CpSW8BlH,AmSAAA,CpoBad,AiWba,A4Pab,AuCba,CnSAD,AmSAA,EpoBaA+9O,A6lBAAA,C5PbOhwO,AmSAAA,CnSAC,AmSAA,CpoBaL,AiWbM/N,A4PaN,AuCbMA,CnSAC,AmSAA,EpoBaJ+9O,A6lBAAA,C5PbO,AmSAA,CnSAL,AmSAA,CpoBWhC,AiWXoB,A4PWpB,AuCXoB,EnSAqBhwO,AmSAAA,CnSAC,AmSAA,CnSAC/N,AmSAAA,CnSAD,AmSAA,CnSAD,AmSAA,InSAQy3F,AmSAAA,CnSA7B,AmSAA,EnSAgCzpF,AmSAAA,CnSAC,AmSAA,CnSAChO,AmSAAA,CnSAD,AmSAA,CnSAD,AmSAA,InSAQy3F,AmSAAA,CnSAC,AmSAA,GnSAGzpF,AmSAAA,CnSAC,AmSAA,CnSAChO,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSAL,AmSAA,CnSA7C,AmSAA;A+NVpB,AjHEIyM,AlvBmBJ,AiiBtBA,AxMCF,AOWU80M,AEXb,A2PqBK,A+BrBF,AOWUA,AEXb,AxFxCA,AvPAA,AsKAA,AnKAA,QuCmDaA,AmSAAA,C1SXL67B,AmSAAA,CsHEC3wO,CAAC,CzZFP,AmSAA,CuOAS,AlUDA,AjMYM,AmSAA,CgOXLse,AjHEAhd,AjNHAgd,AjMYM,AmSAA,C+GTV,AzZFK,AmSAA,C5nBwBLuzN,A6lBAAA,EsQxBQ,AlUDA,AjMYC,AmSAA,CgOXAr6O,AlUDAojM,CxMCCi2C,AOWM,A4RXNA,AOWM,CnoBaX,A6lBAA,CsQxBF,C1gBAT,AmSAA,CuOAoBvyN,An2BwBNozN,A6lBAAA,C5DzBL,AxMCY,AOWMqK,A4RXN,AOWMA,EnoBaV,AiiBzBMz9N,A4DyBN,CsQxBO,AngBWT,AmSAA,CgOXU/nB,Cn2BwBLm7O,AyVxBMb,AOWMgL,A6PaZnK,A+BxBMb,AOWMgL,ClGZL,CAAC/wC,CjiByBd,AyVxBO,AoQwBP,A+BxBO,CuOAZ,CAAP,Cn2BwBwB6mC,AyVxBM,AOWM,A6PaZA,A+BxBM,AOWM,CnSAC,AmSAA,EnoBaV,A6lBAA,C5DzBpB,CAAP,AxMCmC4H,AOWC,A4RXDA,AOWC,CnoBaN5H,A6lBAAA,C7Pba,AmSAA,C1SX7C,AmSAA,C5nBqBE,A6lBAA,CpQrBwC,AmSAA,E5RWQoK,AmSAAA,G1SXHxC,AOWT,A4RXSA,AOWT,CnSAvB,AmSAA,CnSAL,AmSAA,C1SXgC,AmSAA,GnSAW7/O,AmSAAA,CnSArD,AmSAA;AsHGM+L,AlvBkBJ,AqVtBF,AIEA,AOUyD,ACA3DhL,AkPWE,AUDE,A2BtBF,AIEA,AOUyD,ACA3DA,A7LWE,EtGXFA,AmSAAA,CnSAC,AmSAA,CnSACgH,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,C/SZCkvO,AIEAC,AQUN,AuRZMD,AIEAC,AQUN,C8GROnrO,AjZQR,AmSAA,C8GRS,A/JmBA8pP,A5IAAA,ClHvBP,AIEA,A+RFA,AIEA,C3RUShuP,AmSAAA,C8GRChO,AjZQA,AmSAA,C8GRJ,A7ZJK,AIEA,AQUAkO,AuRZA,AIEA,AQUAA,CpoBcLqwO,AiWdM,A4PcNA,AuCdM,EjDWE,A5IAA,CvcGL,AiWdM,AkPWAoe,AUGN,AuCdM,A7LWAA,ClHvBCrf,AIEAC,AQUN,AuRZMD,AIEAC,AQUN,CnSAD,AkPWK,AiDXL,A7LWK,CvcGFx3O,A6lBAAA,CxQ1BZ,AIEA,A0PqBmB62P,AqCvBnB,AIEA,ArLqBmBA,CtGXC7uP,AmSAAA,C/SZC,AIEA,AQUA,AkPWP,AqCvBO,AIEA,AQUA,A7LWP,CvcGE,AiWdMG,A4PcN,AuCdMA,CpoBcL9F,AiWdM,AkPWAy0P,AUGNz0P,AuCdM,A7LWAy0P,E4IAT,A5IAA,ClHvBYvf,AIEAC,AQUA,AkPW1B,AqCvB0BD,AIEAC,AQUA,A7LW1B,CvcGY,AiWdS,A4PcT,AuCdS,CpoBcCc,AiWdxB,A4PcwBA,AuCdxB,C/SZuB,AIEA,A+RFA,AIEA,GvSFWl4O,AIEA,A+RFAA,AIEA,C5nBwBpB,AqV1BZ,AwQ0BY,A2B1BZ,CxnBsBE,A6lBAA,GpQpBmCggP,AmSAAA,GnSArC,AmSAA,EnSA0C,AmSAA,KnSAKA,AmSAAA,GnSAL,AmSAA,GnSAWzhO,AmSAAA,CnSArD,AmSAA;AuOAA,AjHGK,AlvBiBH,AiiBpBF,A5MDA,AIED,AOOC,AEPG,AiPqBJ,AUFG,A2BrBF,AIED,AOOC,AEPG,AxFzCP,AvPAA,AsKAA,ArB8DG,A9I9DH,G0R2DE,A5IAA,M4ZnBO+tT,AlUAAD,A5MDAn1F,AaEO6L,AsRFP7L,AaEO6L,AxFzCPr1C,AvPAAA,AsKAAA,AnKAAA,G4BuCL,AmSAA,GnSAW,AmSAA,CxnB0BL2qC,A6lBAAA,G7lBAG,AkWxBN,A2PwBM,AwCxBN,ChTFajB,AaEOvrE,AsRFPurE,AaEOvrE,CxFzC3B,AvPAA,AsKAA,AnKAA,CzTiEgBjsK,A6lBAAA,AhDjEMke,AvPAAA,AsKAAA,AnKAAA,C4BuClB,AmSAA,C2OCA,AtTxCJ,AvPAA,AsKAA,AnKAA,CwOwCI,A5MDqB,AmSAA,CxnB0BL,A6lBAA,AhDjEM,AvPAA,AsKAA,AnKAA,CzTiEL7b,AkWxBd,A2PwBcA,AwCxBd,EnSA6B,AmSAA,ChTFNm1O,AmSAAA,CxnB0Bd,A6lBAA,C7lBAUW,A6lBAAA,CxQ1BD,AmSAA,GnSAWx5N,AmSAAA,CxnB0BpB,AqV1BZ,AwQ0BY,A2B1BZ,CxnBqBE,A6lBAA;AsQnBA,AjHGC,AlvBgBD,AiiBnBA,A5MDH,AI7BkB,AQwCnB,ACTA,A2PkBI,A2BpBH,AI7BkB,AQwCnB,ACTA,AxFzCA,AvPAA,AsKAA,AnKAA,CgCUF,AmSAA,M3RwCO1kB,AmSAAA,CnSAC,AmSAA,ClSTC,AmSAA,AxFzCAikB,AvPAAA,AsKAAA,AnKAAA,EwCkDE/V,AmSAAA,AvFlDA,AvPAA,AsKAA,AnKAA,CwCkDC,AmSAA,C+NVC,AlUAA6c,A/LCAk+N,AmSAAA,C8NDCl+N,ClgBUC,AmSAA,AvFlDA,AvPAA,AsKAA,AnKAA,CzTiELjZ,AiWfR,A4PeQA,AuCfR,CpoBeS,AiiBzBM,A/LCR,A2PwBE,AwCxBF,C8NDS,AlUAAqvM,AhMUAnhN,ACTAgyK,AkSSAhyK,ACTAgyK,C8NDC8gK,AlgBUA,AmSAA,AvFlDV,AvPAA,AsKAA,AnKAA,CzTiEK9kU,A6lBAAA,C7lBAC,A6lBAA,ChDjEO,AvPAA,AsKAA,AnKAA,CwCkDC,AmSAA,CpoBeLjI,AiWfhB,A4PegBA,AuCfhB,ClSTO,AmSAA,CpSSiB,AmSAA,AvFlDjB,AvPAA,AsKAA,AnKAA,C0iBwCI,AjgBCc,AmSAA,C8NDrB,An2ByBgB,AiiBzBhB,AhMUsB/F,ACTnB,A2PwBa,AuCfMA,ACTnB,CroBwBcga,AiWfrB,ACTA,A2PwBqBA,AuCfrB,ACTA,AxFzC2BiK,AvPAAA,AsKAAA,AnKAAA,EwCkDE/c,AmSAAA,AvFlDA,AvPAA,AsKAA,AnKAA,CzTiEb,AiWfc,A4Ped,AuCfc,AvFlDA0sM,AvPAAA,AsKAAA,AnKAAA,CzTiEL,AiWfM5zM,A4PeN,AuCfMA,CpoBeLg9O,AiWfI,A4PeJA,AuCfI,CnSAD,AmSAA,CpoBeD,A6lBAA,ChDjE5B,AvPAA,AsKAA,AnKAA,CwCkDoC,AmSAA,CpoBeLj3O,AiWfMiI,A4PeNjI,AuCfMiI,CnSAC,AmSAA,CnSAChO,AmSAAA,CnSAD,AmSAA,CpoBeH,AiWfE,A4PeF,AuCfE,CpoBeDka,A6lBAAA,E5PfQhT,AmSAAA,CnSAC,AmSAA,CpoBed,AiWfelH,A4Pef,AuCfeA,CpoBeL,AiWfM,A4PeN,AuCfM,CpoBeLq+O,A6lBAAA,E5PfQ,AmSAA,CnSAL,AmSAA,CnSAT,AmSAA,CpoBeW,A6lBAA,G7lBAGH,AiWfMnwO,A4PeNmwO,AuCfMnwO,CnSAC,AmSAA,CnSAC/N,AmSAAA,CnSAD,AmSAA,CnSA5B,AmSAA,CpoBea,A6lBAA,G7lBAgBs+O,A6lBAAA,K7lBAjB,A6lBAA,K7lBA2B,A6lBAA,I7lBAIC,A6lBAAA,G7lBAJ,A6lBAA,G7lBAUC,A6lBAAA,G7lBArC,A6lBAA,C7lBAV,A6lBAA,C7lBAN,A6lBAA,I7lBA8D,A6lBAA,C7lBAvE,A6lBAA,C7lBNZ,A6lBAA;AqJfD,AlvBeC,AqVlDY,AW0Cd,AETH,AiPqBC,AUJI,A2BlDY,AW0Cd,AETH,AxFzCA,AvPAA,AsKAA,ArB8DC,A9I9DD,C4BQD,AmSAA,OxR0CQ,AmSAA,ChDYC1oC,A5IAAA,IvGZI0sC,AmPYX,AgDZWA,A5LYX,GvcGQ/D,A6lBAAA,E7PfF,AmSAA,CnoBeK,A6lBAA,G7lBAG3sO,AgWfO,A6PePA,AsCfO,CnoBeN,A6lBAA,G7lBAG0sO,A6lBAAA,C7PfQgE,AmSAAA,EnoBQtB,A6lBAA,G7PRiB,AmSAA,KnSAe,AmSAA,CnSAf,AmSAA,InSAoB,AmSAA,KnSAKG,AmSAAA,MnSAL,AmSAA,KnSAgB,AmSAA,CnSAvD,AmSAA,EnSA2D,AmSAA,KnSAKL,AmSAAA,QnSAL,AmSAA,CnSAc7E,AmSAAA,SnSAd,AmSAA;AgOV3D,AjHID,AlvBcG,AiiBjBF,AjMUA,ACDF1vO,AkPaD,AULK,AsCPF,ACDFA,A7LaD,C4IxDc,A5IAA,CtG2CbA,AkPaChI,AiDbDgI,A7LaChI,CtGbA,AmSAA,CnSACmI,AmSAAA,CnSAC,AmSAA,CjDaE,A5IAA,C4IACs7N,A5IAAA,CtGbA,AmSAA,C+NVConD,AlUCAqhD,AjMUAzvF,ACDN,AkSCMA,ACDN,CnSAD,AmSAA,EjD3Ca,A5IAA,CtG2CF,AmSAA,CpSCT,ACDUr8O,AkPaC,AgDZX,ACDUA,A7LaC,C9GrBC,AQQD,AkP3CA,AyCmCC,AQQD,A7L3CA,Cvc2DLu4O,AiWhBMxwO,A4PgBNwwO,AuChBMxwO,CnGTZ,AjMUa,ACDF,AkPaG,AgDZD,ACDF,A7LaG,CtGbJ,AkP3CC,AiD2CD,A7L3CC,C4ZiCX,An2B0BS,A6lBAA,E7PfQ,ACDAhH,AkSCA,ACDAA,CpoBgBL4K,AiWhBM,A4PgBNA,AuChBM,CpoBgBL,AiWhBM5D,A4PgBN,AuChBMA,C3SRE04O,AQQD,A2RRCA,AQQD,EpoBgBJrI,AgWfMiE,A6PeNjE,AsCfMiE,ClSDC,AmSAA,CnSAL,AmSAA,CpoBQhB,AiWRO,A4PQP,AuCRO,CpoBOJ,AyVfO,AoQeP,A+BfO,C5nB0BV,AyV1B0BuE,AOS5B,A6PiBE,A+B1B0BA,AOS5B,ElSD6B,AmSAA,CnSA/B,AmSAA,I3SRc,AmSAA,EnSAyB,AmSAA;AuODrC,AlUCE,A5MDS,AIGb,AOQC,AETI,AsRFQ,AIGb,AOQC,AETI,AxF1CP,AvPAA,AsKAA,AnKAA,GuC+BsB,AmSAA,MgOSbirF,AjgBEO7oF,AmSAAA,AxF1CPr1C,AvPAAA,AsKAAA,AnKAAA,EgC2CEkzC,AmSAAA,E3FFE,CAACj8N,EkUDV,ElUCc,A5MDMinJ,AaEjB,AsRFiBA,AaEjB,CpGDY/tK,AxMEjB,ASDwB+tK,A0RCxB,ASDwBA,C5SCNA,AmSAAA,E3FFP,CYzCb,AvPAA,AsKAA,AnKAA,CwOyCwBjnJ,AYzCA9G,AvPAAA,AsKAAA,AnKAAA,C4BwCT,AmSAA,CtRER,AmSAA,AxF1CP,AvPAA,AsKAA,AnKAA,C4BwCiC,AIG/B,A+RH+B,AIG/B,C3FF0B,A/LCO,AmSAA,AxF1CP,AvPAA,AsKAA,AnKAA,CwOyCCjhB,AxMEA,AmSAA,K3FFhB,CAAP;AkUAF,AjHIF,AlvBuBI,AqV3BJ,AIGE,AOQFu+M,ACFA,ACPA,A2PyBI,A2B3BJ,AIGE,AOQFA,ACFA,ACPA,AxF1CA,AvPAA,AsKAA,AnKAA,EuCmDAA,AmSAAA,KnSAK,ACFAvhN,AkSEA,ACFAA,CnSAC,AmSAA,C+NTC+xU,AjHIA,A7ZJA,AWWA,AETA,AsRFA,AWWA,AETA,AxF1CA9tT,AvPAAA,AsKAAA,AnKAAA,Cyb4CC+6D,CAAD,AzZDE,AQMA,A2RNA,AQMA,AvFjDA,AvPAA,AsKAA,AnKAA,CwCiDT,AmSAA,C8GLW9sE,A7ZJA4zO,AaEAmD,AsRFAnD,AaEAmD,C6GEJ,AjZKKjpP,AmSAAA,C8GLZ,AzZDa8mP,AQMA,A2RNAA,AQMA,AvFjDA,AvPAA,AsKAA,AnKAA,C0iBwCX,An2B2BM/gP,A6lBAAA,C3PzBD,AmSAA,ChTFA,AYSSmI,ACPA8jK,AsRFT,AYSS9jK,ACPA8jK,ChTFCA,AWWD7rK,ACFC,AuRTA6rK,AWWD7rK,ACFC,AvFjDV,AvPAA,AsKAA,AnKAA,CzTmEK,AgWhBL,A6PgBK,AsChBL,CnoBgBM6S,A6lBAAA,C7PhBM0L,ACFC,AkSEDA,ACFC,AvFjDA,AvPAA,AsKAA,AnKAA,CgC2CX,AOQF,ACFP,A2RNS,AOQF,ACFP,CpoBkBQ,AyVxBcstJ,AoQwBd,A+BxBcA,C5nBwBLysE,AgWhBK,ACFC,ACPhB,A2PyBUA,AsChBK,ACFC,ACPhB,ChTFA,AmSAA,A3ExCA,AvPAA,AsKAA,AnKAA,C4BwCP,AYSyBz+O,ACPA,AsRFzB,AYSyBA,ACPA,CroByBL,AiWlBpB,ACPO,A2PyBa,AuClBpB,ACPO,CnSAP,AmSAA,AxF1C2BikB,AvPAAA,AsKAAA,AnKAAA,CwCiDClW,AmSAAA,CpoBkBL,AyVxBd,AQMoB,A4PkBN,A+BxBd,AQMoB,AvFjDA,AvPAA,AsKAA,AnKAA,CzTmErB,AiWlBsB/N,A4PkBtB,AuClBsBA,AvFjDA89C,AvPAAA,AsKAAA,AnKAAA,CgC2CCipM,AQMF,A2RNEA,AQMF,CnSAD,AmSAA,EpoBkBA1pK,A6lBAAA,C5PlBO,AmSAA,CvFjDnC,AvPAA,AsKAA,AnKAA,EgC2CS,AmSAA,CnSAP,AQMqCl3E,A2RNrC,AQMqCA,CnSAC,AmSAA,CpoBkBpC,AiWlBqCnG,A4PkBrC,AuClBqCA,CnSAC,AmSAA,CpoBkBL,A6lBAA,E5PlBQ,AmSAA,CnSAL,AmSAA,CnSAL,AmSAA,GnSAekH,AmSAAA,CnSAC,AmSAA,CnSAClH,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSAL,AmSAA,CnSAvB,AmSAA;A+NR1B,AjHIH,AlvBuBO,AiiB1BJ,A5MDH,AIGE,AOQC,AETH,A2PyBO,A2B3BP,AIGE,AOQC,AETH,AxF1CA,AvPAA,AsKAA,AnKAA,QuCmDO2mF,AmSAAA,ClGVC8rP,CjMUC,AmSAA,GnSAGlgQ,AmSAAA,GnSAT,AmSAA,GnoBgBS5rD,A6lBAAA,C7lBAL,A6lBAA,I7lBAU,AiiB1Bd,A4D0Bc,O7lBAO8rF,A6lBAAA,E7lBAE,A6lBAA,G7lBAGgsI,A6lBAAA,G7lBAG,A6lBAA,G7lBAGT,A6lBAAA,G7lBAlB,A6lBAA,I7lBAyB,A6lBAA,G7lBAzB,A6lBAA,I7lBAgCxrI,A6lBAAA,E7lBAE,A6lBAA,G7lBAGisI,A6lBAAA,G7lBAG,A6lBAA,G7lBAGR,A6lBAAA,G7lBA3C,A6lBAA,C7lBAV,A6lBAA;AsQ1BF,An2B2BC,AiiB1BD,AjMWF93O,ACJF,A4PmBK,AsCfHA,ACJF,IpSIEA,AmSAAA,CnSAC,AmSAA,GnSAG,AmSAA,CnSACA,ACJA,AkSIAA,ACJA,CpSIL,ACJMe,AkSIN,ACJMA,CnSAD,AmSAA,CpSIGwd,AmSAAA,CgOZC,AlUCA,AjMWA,ACJA3W,AkSIA,ACJAA,CnGPCgd,AhMOL,AmSAA,C+NRH,AlgBQJ,AmSAA,CpSIc,AmSAA,CnSACrG,AmSAAA,ClGXC,AjMWd,AmSAA,ClGXeouT,QAAN,CAAP;AkUvBJ,A1gB0BA9rF,AOSE,ACJH,A2RLCA,AOSE,ACJH,AvFhDD,AvPAA,AsKAA,AnKAA,EgC2CEA,AmSAAA,M5RSM7gP,AmSAAA,CnSAC,AmSAA,AtFpDA+tM,AvPAAA,AsKAAA,AnKAAA,CgC2CC,AmSAA,CnSAC6yC,AmSAAA,G5RSG,AmSAA,CtFpDd,AvPAA,AsKAA,AnKAA,CoPAiB14O,AvPAAA,AsKAAA,AnKAAA,EgC2Cf,AmSAA,C5RSiBivO,AmSAAA,CtFpDnB,AvPAA,AsKAA,AnKAA,CgC2CqB,AmSAA,C5RSb,AmSAA,AtFpDe,AvPAA,AsKAA,AnKAA,IuCoDG54N,AmSAAA,CnSAC,AmSAA,I1STGqiO,AmSAAA,C5RSE,AmSAA,KnSAKxJ,AmSAAA,C1SThB,AmSAA,EnSAkB,AOSnC,A4RTmC,AOSnC,EnSAsC,AmSAA,OnSJlB,AmSAA,CnSI0B,AmSAA;AgOXjD,An2B2BK,AiiB1BF,AxMEA,AoQwBE,A+BxBF,A/E3CF,AvPAA,AsKAA,AnKAA,SwOyCOqzC,AYzCAviR,AvPAAA,AsKAAA,AnKAAA,EgC2CEu4O,AmSAAA,E/E3CE,AvPAA,AsKAA,AnKAA,CoPACtnP,AvPAAA,AsKAAA,AnKAAA,GzTmEHqnB,AyVxBM,AoQwBNA,A+BxBM,C5nBwBX,AyVxBY,AoQwBZ,A+BxBY,C3FFd,AxMEeogO,AmSAAA,C/E3CV,AvPAA,AsKAA,AnKAA,EzTmEO,A6lBAA,GhDnES,AvPAA,AsKAA,AnKAA,CgC2CR,AmSAA,A/E3CR,AvPAA,AsKAA,AnKAA,CgC2CL,AmSAA,C5nBwBkB/4O,A6lBAAA,C7lBAN,A6lBAA,AhDnEa+lM,AvPAAA,AsKAAA,AnKAAA,GzTmEH,A6lBAA,ChDnEO,AvPAA,AsKAA,AnKAA,CoPAC1lM,AvPAAA,AsKAAA,AnKAAA,CzTmElB,A6lBAA,G7lBAgBL,A6lBAAA,AhDnEM,AvPAA,AsKAA,AnKAA,CzTmEtB,A6lBAA,AhDnEuB,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CzTmEG,A6lBAA,AhDnE3B,AvPAA,AsKAA,AnKAA,GoPAoCgmM,AvPAAA,AsKAAA,AnKAAA,IzTmE7B,A6lBAA,AhDnEiC,AvPAA,AsKAA,AnKAA,CoPAC3lM,AvPAAA,AsKAAA,AnKAAA,EzTmEH,A6lBAA,E7lBAE4vO,A6lBAAA,AhDnEA,AvPAA,AsKAA,AnKAA,CoPA/C,AvPAA,AsKAA,AnKAA,EzTmEkD,A6lBAA,G7lBAGE,A6lBAAA,G7lBAN,A6lBAA,G7lBAYH,A6lBAAA,G7lBAG,A6lBAA,G7lBAGI,A6lBAAA,G7lBApB,A6lBAA,C7lBA/B,A6lBAA,G7lBA2D,A6lBAA,G7lBA3D,A6lBAA,I7lBAkE,A6lBAA,K7lBAKd,A6lBAAA,G7lBAL,A6lBAA,G7lBAW7qI,A6lBAAA,E7lBAE,A6lBAA,G7lBAGisI,A6lBAAA,G7lBAG,A6lBAA,G7lBAGZ,A6lBAAA,G7lBAxF,A6lBAA,I7lBA+F,A6lBAA,G7lBA/F,A6lBAA,I7lBAsG,A6lBAA,K7lBAKP,A6lBAAA,G7lBAL,A6lBAA,G7lBAW/qI,A6lBAAA,E7lBAE,A6lBAA,G7lBAGksI,A6lBAAA,G7lBAG,A6lBAA,G7lBAGX,A6lBAAA,G7lBA5H,A6lBAA,C7lBAV,A6lBAA;A7lBCD,AiiB1BD,AxMED,AOQC,ACHW,A4PmBV,A+BxBF,AOQC,ACHW,AvFhDd,AvPAA,AsKAA,AnKAA,GgCyCC,AmSAA,M3FAOi0F,GjMUG,AmSAA,IlGVR,CjMUarvF,AmSAAA,ClSHO3wE,AmSAAA,KpSGpB,AmSAA,ElSHW,AmSAA,EnSAkB,AmSAA;ApoBoB9B,AiiB1BC,AjMUE,ACHJ,A4PmBC,AsChBG,ACHJ,GpoBhDgC,A6lBAA,M5DyCzB+/J,AhMOA,AmSAA,EpSGE,AmSAA,CnSAL,AmSAA,ClSHOlpF,AmSAAA,GnGPT,IhMOK,AmSAA,CnSAY72E,AmSAAA,OnSAZ,AmSAA,CnSAP,AmSAA;ApoBoBA+uC,AiiB1BE,AxMEF,AOOY,ACFb,A4PmBCA,A+BxBA,AOOY,ACFb,AvFhDD,AvPAA,AsKAA,AnKAA,EzTmEEA,A6lBAAA,G7lBAG,A6lBAA,ChDnEChN,AvPAAA,AsKAAA,AnKAAA,CzTmEC,A6lBAA,EpQxBEizC,AmSAAA,C/E3CC,AvPAA,AsKAA,AnKAA,GuCkDSrE,AmSAAA,AtFlDNntH,AvPAAA,AsKAAA,AnKAAA,IzTmEGrvH,AyVxBd,AoQwBcA,A+BxBd,C5nBwBK,A6lBAA,AhDnEW,AvPAA,AsKAA,AnKAA,CuCkDJ,AmSAA,CnoBiBKue,A6lBAAA,C7lBAZ,A6lBAA,C7PjBqB,AmSAA,AtFlDN,AvPAA,AsKAA,AnKAA,CzTmEA1W,AgWjBR,A6PiBQA,AsCjBR,CnoBiBP,A6lBAA,E7lBAkBihO,A6lBAAA,E7lBAlB,A6lBAA,E7lBAsBC,A6lBAAA,E7lBAtB,A6lBAA,AhDnEyBzuN,AvPAAA,AsKAAA,AnKAAA,EzTmECk+N,A6lBAAA,ChDnEX,AvPAA,AsKAA,AnKAA,EzTmEf,A6lBAA,AhDnE8B,AvPAA,AsKAA,AnKAA,EzTmEC,A6lBAA;A7lBClCx4O,AiiB1BE,AxMEL,AOM8B,A6PkB3BA,A+BxBH,AOM8B,AtFjD7B,AvPAA,AsKAA,AnKAA,CgCgCa,AmSAA,CnSWZ,AmSAA,CnSXY,AmSAA,C5nBmCXA,A6lBAAA,C7lBAC,A6lBAA,G7lBAG,A6lBAA,C7lBACA,A6lBAAA,AhDnEAsa,AvPAAA,AsKAAA,AnKAAA,CzTmEL,A6lBAA,E7lBAQiE,A6lBAAA,AhDnEA,AvPAA,AsKAA,AnKAA,CzTmEC,AiiB1BA,AjMQuB89N,A6PkBvB,AsClBuBA,AtFjDvBhtH,AvPAAA,AsKAAA,AnKAAA,EwOyCP,CjiB0BU,A6lBAA,C7lBAC9wG,A6lBAAA,C7lBAb,AgWlB2B,A6PkB3B,AsClB2B,AtFjDnB,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA,CzTmEkB1W,A6lBAAA,C7lBAC,AgWlBuB,A6PkBvB,AsClBuB,GnoBkBpB,A6lBAA,C7lBACA,A6lBAAA,C7lBArB,AgWlB6Cs0O,A6PkB7C,AsClB6CA,EnoBkBrB3D,A6lBAAA,G7lBAG,A6lBAA,G7lBAG,AgWlBU,A6PkBV,AsClBU,CnoBkBT,AgWlBuBjB,A6PkBvB,AsClBuBA,CnoBkBtBiB,A6lBAAA,G7lBAhC,A6lBAA,E7PlBwC,AmSAA,CnSAqBx4O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSAb,AmSAA,GnSA0C,AmSAA,KnSAK49N,AmSAAA,QnSAL,AmSAA,CnSAc9E,AmSAAA,MnSAd,AmSAA,CnSAqBr3O,AmSAAA,CnSArB,AmSAA,EnSAwBue,AmSAAA,CnSAxB,AmSAA,CnSA1C,AmSAA;AnoBmB3B,AiiBzDF,AjMsCmG,A6PmBjG,AsCnBiG,AtFhDpG,AvPAA,AsKAA,AnKAA,CoPFD,AvPAA,AsKAA,AnKAA,OzTqEQoH,A6lBAAA,E7lBAE,A6lBAA,G7lBAG9d,A6lBAAA,C7lBAC,A6lBAA,G7lBAGjI,A6lBAAA,I7lBAI,A6lBAA,C7lBACgU,A6lBAAA,G7lBAL,A6lBAA,C7lBASk1N,A6lBAAA,E7lBAT,A6lBAA,C7lBAb,A6lBAA;A7lBAA,AiiBzBH,A4DyBG,Q7lBCInqN,A6lBAAA,E7lBAE,A6lBAA,G7lBAG9W,A6lBAAA,C7lBAC,A6lBAA,G7lBAGjI,A6lBAAA,I7lBAI,A6lBAA,C7lBAC+T,A6lBAAA,G7lBAL,A6lBAA,C7lBASm1N,A6lBAAA,E7lBAT,A6lBAA,C7lBDb,A6lBAA;A7lBAA,AiiBvBJ,AjMKM,A6PkBF,AsClBE,AtF/CN,AvPAA,AsKAA,AnKAA,MoPAMj7B,AvPAAA,AsKAAA,AnKAAA,EzTmEEqM,A6lBAAA,E7lBAE,A6lBAA,AhDnEA,AvPAA,AsKAA,AnKAA,CuC+CC,AmSAA,CnSAL,AmSAA,CnoBoBOl6M,A6lBAAA,AhDnEAkI,AvPAAA,AsKAAA,AnKAAA,CzTmEC,A6lBAA,G7lBAGyd,A6lBAAA,AhDnEA,AvPAA,AsKAA,AnKAA,EzTiEb,A6lBAA,EhDjEiB,AvPAA,AsKAA,AnKAA;AzTiEjB,AiiBtBJ,AjMIc,A6PkBV,AsClBU,AtF9CZ,AvPAA,AsKAA,AnKAA,QzTmEMw0L,A6lBAAA,AhDnEA5gN,AvPAAA,AsKAAA,AnKAAA,EzTmEE,A6lBAA,ChDnEC,AvPAA,AsKAA,AnKAA,EzTmEEglB,AgWrBMi+N,A6PqBNj+N,AsCrBMi+N,CnoBqBL,A6lBAA,AhDnEAt0O,AvPAAA,AsKAAA,AnKAAA,GzTmEGyW,A6lBAAA,ChDnEC,AvPAA,AsKAA,AnKAA,CzTgEd,AgWlBU,A6PkBV,AsClBU,AtF9CKxlB,AvPAAA,AsKAAA,AnKAAA,GuC8CS,AmSAA,CnSAd,AmSAA,EtF9CZ,AvPAA,AsKAA,AnKAA;AzTgEE,AiiBrBJ,AjMG+B,A6PkB3B,AsClB2B,AtF7C7B,AvPAA,AsKAA,AnKAA,QzTmEMs/O,A6lBAAA,ChDnEC,AvPAA,AsKAA,AnKAA,CzTmEC,A6lBAA,G7lBAG,A6lBAA,I7lBAID,A6lBAAA,EhDnEEl+N,AvPAAA,AsKAAA,AnKAAA,CzT+Df,A6lBAA,EhD/DK,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;AzT+DpB,AiiBpBJ,A4DoBI,AhD9DA,AvPAA,AsKAA,AnKAA,QzTmEIu1L,A6lBAAA,ChDnEC,AvPAA,AsKAA,AnKAA,CzTmEC,A6lBAA,G7lBAG2oC,A6lBAAA,AhDnEA3+O,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EzTmEE,A6lBAA,ChDnEC,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,CzTmEeivO,A6lBAAA,ChDnECjvO,AvPAAA,AsKAAA,AnKAAA,CzTmEC,A6lBAA,AhDnEA,AvPAA,AsKAA,AnKAA,GzTmEGkvO,A6lBAAA,AhDnEAxvO,AvPAAA,AsKAAA,AnKAAA,EzTmER,A6lBAA,ChDnEZ,AvPAA,AsKAA,AnKAA,EzTmEyBwvO,A6lBAAA,AhDnEA,AvPAA,AsKAA,AnKAA,EzTmEE,A6lBAA,AhDnEAlvO,AvPAAA,AsKAAA,AnKAAA,CoPA3B,AvPAA,AsKAA,AnKAA,EzTmE8BivO,A6lBAAA,AhDnEA,AvPAA,AsKAA,AnKAA,EzT8D9B,A6lBAA,C7lBFkC,A6lBAA,C7lBSlC,A6lBAA;A5D1BJ,AjMEM,AmSAA,AtF5CAxuN,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,EuC4CE,AmSAA,CnSAL,AmSAA,AtF5CMA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACpS,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACrO,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA;AzTqEF,AiiB1BJ,AjMCc,A6PyBV,AsCzBU,AtF3CT,AvPAA,AsKAA,AnKAA,QzToEGgO,A6lBAAA,C7lBAC,A6lBAA,G7lBAG,A6lBAA,C7lBAR,AgWzBe20O,A6PyBf,AsCzBeA,EnoByBJ,A6lBAA,I7PzBD,AmSAA,EnoByBO,A6lBAA,C7PzBO,AmSAA,CnSAd,AmSAA,EnoByBWpkP,A6lBAAA,K7lBAJ,A6lBAA,C7lBAU,A6lBAA,sB7lBAsByP,A6lBAAA,C7lBAhC,A6lBAA,C7lBAN,A6lBAA,C7lBVuB,A6lBAA,C7lBYlC,A6lBAA;A5D3BJ,AjMA+BuzM,AmSAAA,QnSAAA,AmSAAA,KnSAK,AmSAA,CnSAC,AmSAA,InSAD,AmSAA,EnSAO+mC,AmSAAA,MnSAM,AmSAA,CnSAC,AmSAA,InSAD,AmSAA,EnSAO3hK,AmSAAA,EnSAE,AmSAA,GnSAGwhK,AmSAAA,MnSAM,AmSAA,CnSAC,AmSAA,InSAD,AmSAA,EnSAOhiP,AmSAAA,CnSAP,AmSAA,EnSAUue,AmSAAA,CnSAV,AmSAA,CnSAlB,AmSAA,CnSAb,AmSAA,EnSA8CiiE,AmSAAA,EnSA9C,AmSAA,CnSAL,AmSAA;AnoB4B3B,AiiB3BJ,AjMDuF,A6P4BnF,AsC5BmF,AtFzCnF,AvPAA,AsKAA,AnKAA,QzTqEI,A6lBAA,GhDrEGlmE,AvPAAA,AsKAAA,AnKAAA,EzTqEE68N,A6lBAAA,ChDrET,AvPAA,AsKAA,AnKAA,EzTqEI,A6lBAA,K7lBAa,A6lBAA,I7lBAjB,A6lBAA,E7lBAuB,A6lBAA;A7lBCrB,AiiB3BN,A4D2BM,AhDrEH,AvPAA,AsKAA,AnKAA,GoPND,AvPAA,AsKAA,AnKAA,QzT2ES32N,A6lBAAA,C7lBAL,A6lBAA,I7lBAU,A6lBAA,M7lBAM05L,A6lBAAA,E7lBAN,A6lBAA,G7lBAW,A6lBAA,G7lBAX,A6lBAA,G7lBAiBC,A6lBAAA,E7lBA3B,A6lBAA;A7lBCD,AiiB3BL,AjMFM,A6P6BD,AsC7BC,AtFxCL,AvPAA,AsKAA,AnKAA,CoPTD,AvPAA,AsKAA,AnKAA,IzT4EI,A6lBAA,C7lBIA,A6lBAA;A7lBJA,AiiBxBJ,AjMHeiB,A6P2BX,AsC3BWA,QnSAAA,AmSAAA,CnoBgCN,A6lBAA,I7lBAIx7M,AgWhCO,A6PgCPA,AsChCO,CnSAC,AmSAA,GnoBgCJ,A6lBAA,C7lBACiT,AgWhCE,A6PgCFA,AsChCE,EnSAO,AmSAA,CnoBgCd,A6lBAA,C7lBAS,A6lBAA,G7PhCUwvO,AmSAAA,EnoBgCLlL,A6lBAAA,C7PhCP,AmSAA,EnoBgCE,AgWhCe32J,A6PgCf,AsChCeA,EnSAE,AmSAA,CnoBgCN05H,A6lBAAA,E7lBApB,AgWhC6B8nC,A6PgC7B,AsChC6BA,InoBgCH9qK,A6lBAAA,E7PhCS,AmSAA,CnSAC,AmSAA,InoBgCpC,AgWhCmC,A6PgCnC,AsChCmC,EnSAOl3E,AmSAAA,CnSAP,AmSAA,CnoBgCEJ,A6lBAAA,C7PhCQ2e,AmSAAA,CnSAV,AmSAA,CnSA5B,AmSAA,CnoBgCkC,AgWhCvC,A6PgCuC,AsChCvC,CnoBgCwC1L,A6lBAAA,G7lBAL,A6lBAA,C7lBAS,A6lBAA,K7lBAKukO,A6lBAAA,G7lBAL,A6lBAA,G7lBAWj9B,A6lBAAA,E7lBApB,A6lBAA,I7lBA0BjjI,A6lBAAA,O7lBAnE,A6lBAA,E7lBA4E,A6lBAA;A7lBC/E,AiiB7BN,AjMJ+D,A6PiCzD,AsCjCyD,AtFtC/D,AvPAA,AsKAA,AnKAA,SoPASh5D,AvPAAA,AsKAAA,AnKAAA,IzTuEEsC,A6lBAAA,C7lBAL,A6lBAA,AhDvEN,AvPAA,AsKAA,AnKAA,CoPAgBtD,AvPAAA,AsKAAA,AnKAAA,GzTuEA,A6lBAA,IhDvEhB,AvPAA,AsKAA,AnKAA,EzTuEsBg9L,A6lBAAA,AhDvEG,AvPAA,AsKAA,AnKAA,EzTuET,A6lBAA,G7lBAW,A6lBAA,G7lBAX,A6lBAA,G7lBAiBC,A6lBAAA,E7lBA3B,A6lBAA;A7lBCD,AiiB7BL,AjMTI,A6PsCC,AsCtCD,AtFjCF,AvPAA,AsKAA,AnKAA,OzTmDoC,A6lBAA,C7lBsBlC,A6lBAA,AhDzEI/hN,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC8kB,AvPAAA,AsKAAA,AnKAAA,OoPAD,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AwO2CF,AY1CC,AvPAA,AsKAA,AnKAA;AwO2CD,AjMJI,AmSAA,SnSAK+5N,AmSAAA,GnSAL,AmSAA,GnSAW,AmSAA,KnSAKE,AmSAAA,GnSAhB,AmSAA,EnSAqB,AmSAA,KnSAKA,AmSAAA,GnSAL,AmSAA,GnSAWn3O,AmSAAA,CnSAhC,AmSAA;AnoBkCA,AiiB7BJ,AjMJI,A6PiCA,AsCjCA,AtFtCJ,AvPAA,AsKAA,AnKAA,QzTuEQ,A6lBAA,C7lBAC6H,AgWjCAqvO,A6PiCArvO,AsCjCAqvO,AtFtCAvkC,AvPAAA,AsKAAA,AnKAAA,CzTuEL,A6lBAA,E7lBAQ,AgWjCR,A6PiCQ,AsCjCR,GnSAW,AmSAA,InoBUuB,A6lBAA,C7lByBlC,AgWnCgBykC,A6PmChB,AsCnCgBA,GnSAhB,AmSAA,CtFtCJ,AvPAA,AsKAA,AnKAA,CuCsCyB,AmSAA,AtFtCCj5M,AvPAAA,AsKAAA,AnKAAA,CoPA1B,AvPAA,AsKAA,AnKAA,EoPA6B,AvPAA,AsKAA,AnKAA,EuCsCCi5M,AmSAAA,GnSAL,AmSAA,GnSAW74N,AmSAAA,CnSAhC,AmSAA;AlGKJ,AjMJI,AmSAA,AtFtCF,AvPAA,AsKAA,AnKAA,QoPAMrW,AvPAAA,AsKAAA,AnKAAA,CuCsCCm6O,AmSAAA,GnSAL,AmSAA,AtFtCQ,AvPAA,AsKAA,AnKAA,GuCsCG7hK,AmSAAA,AtFtCA,AvPAA,AsKAA,AnKAA,EuCsCX,AmSAA,AtFtCF,AvPAA,AsKAA,AnKAA;AzTyEE,AiiB9BJ,AjMJG,A6PkCC,AsClCD,AtFvCD,AvPAA,AsKAA,AnKAA,QzTyEMqvH,A6lBAAA,AhDxEA9nM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CzTwEC,A6lBAA,EhDxEEo2B,AvPAAA,AsKAAA,AnKAAA,CzTwEC,A6lBAA,AhDxEA,AvPAA,AsKAA,AnKAA,CzTwET,A6lBAA,AhDxEUhlC,AvPAAA,AsKAAA,AnKAAA,EzTwEE02M,A6lBAAA,E7lBAE,A6lBAA,EhDzEhB,AvPAA,AsKAA,AnKAA,CzTyEmBA,A6lBAAA,E7lBAE,A6lBAA,G7lBAGinC,A6lBAAA,G7lBAL,A6lBAA,G7lBAWA,A6lBAAA,G7lBAhB,A6lBAA,C7lB1BsB,A6lBAA,C7lB4BlC,A6lBAA;A5D/BJ,AjMzCsB,AmSAA,AtFDpB,AvPAA,AsKAA,AnKAA,CuCCF,AmSAA,KtFDMvlJ,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAR,AvPAA,AsKAA,AnKAA;AzT0EE,AiiB/BJ,A4D+BI,AhD1EF,AvPAA,AsKAA,AnKAA,MoPCI3pF,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CzTyECioM,A6lBAAA,E7lBAE,A6lBAA,AhDzEA,AvPAA,AsKAA,AnKAA,CoPDR,AvPAA,AsKAA,AnKAA,EzT0EWknC,A6lBAAA,U7lBAT,A6lBAA,E7lBAqB,A6lBAA;A7lBCnB,AiiB/BN,AjMJA,A6PmCM,AsCnCN,AtFxCE,AvPAA,AsKAA,AnKAA,MoPEI15O,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuCsCEilP,AmSAAA,CtFtCC,AvPAA,AsKAA,AnKAA,CzTyEC9hO,A6lBAAA,C7lBAL,A6lBAA,AhD3EJ,AvPAA,AsKAA,AnKAA,IzT2Ec,A6lBAA,E7PnChB,AmSAA,CnSAmBqrJ,AmSAAA,GnoBmCGhkK,A6lBAAA,C7lBAN,A6lBAA,G7lBAU,AgWnC1B,A6PmC0B,AsCnC1B,EnSA4B,AmSAA,CnoBmCZ,A6lBAA,G7lBAgBA,A6lBAAA,C7lBAhB,A6lBAA,G7lBAoB,A6lBAA,O7lBApB,A6lBAA,G7lBA8B4wO,A6lBAAA,E7lBA9B,A6lBAA,G7lBAmC,A6lBAA,G7lBAnC,A6lBAA,I7lBA0Cz4O,A6lBAAA,C7lBAC,A6lBAA,G7lBAG2lB,A6lBAAA,E7lBA9C,A6lBAA,I7lBAoD,A6lBAA,G7lBApD,A6lBAA,I7lBA2DpH,A6lBAAA,C7lBAC,A6lBAA,G7lBAGI,A6lBAAA,E7lBA/D,A6lBAA,I7lBAqE,A6lBAA,G7lBArE,A6lBAA,G7lBA2E9W,A6lBAAA,C7lBA3E,A6lBAA,G7lBA+E,A6lBAA,G7lBA/E,A6lBAA,G7lBAqFA,A6lBAAA,C7lBArF,A6lBAA,G7lBAyF,A6lBAA,O7lBAzF,A6lBAA,G7lBAmG4wO,A6lBAAA,E7lBAnG,A6lBAA,G7lBAwG,A6lBAA,G7lBAxG,A6lBAA,I7lBA+G,A6lBAA,K7lBAKtB,A6lBAAA,G7lBAL,A6lBAA,G7lBAWj9B,A6lBAAA,E7lBA1H,A6lBAA,I7lBAgI,A6lBAA,G7lBAhI,A6lBAA,I7lBAuI,A6lBAA,K7lBAKk9B,A6lBAAA,G7lBAL,A6lBAA,G7lBAWj9B,A6lBAAA,E7lBAlJ,A6lBAA,C7lBAV,A6lBAA;A7lBCD,AiiB/BL,AjMJE,A6PmCG,AsCnCH,AtFzCA,AvPAA,AsKAA,AnKAA,KzT0EE,A6lBAA,C7lBIA,A6lBAA,AhD3EEtgN,AvPAAA,AsKAAA,AnKAAA,CuCsCCsiP,AmSAAA,AtFzCL,AvPAA,AsKAA,AnKAA,QuCyCA,AmSAA,GnSAgB,AmSAA,InSAIoG,AmSAAA,cnSAJ,AmSAA,CnSAmB12E,AmSAAA,OnSAnB,AmSAA,CnSAhB,AmSAA;AnoBiCE,AiiB5BJ,AjMJC,A6PgCG,AsChCH,AtF1CC,AvPAA,AsKAA,AnKAA,MoPII/nK,AvPAAA,AsKAAA,AnKAAA,CoPJJ,AvPAA,AsKAA,AnKAA,EzT+EO,A6lBAA,I7lBAI+rM,A6lBAAA,E7lBAE,A6lBAA,G7lBAG34H,A6lBAAA,O7lBAT,A6lBAA,E7lBAkB,A6lBAA;A7lBCrB,AiiBjCN,A4DiCM,AhDhFJ,AvPAA,AsKAA,AnKAA,MoPKI5wE,AvPAAA,AsKAAA,AnKAAA,CoPLJ,AvPAA,AsKAA,AnKAA,MzTgFSka,A6lBAAA,C7lBAL,A6lBAA,I7lBAU,A6lBAA,M7lBAM3Y,A6lBAAA,C7lBAN,A6lBAA,G7lBAU,A6lBAA,G7lBAV,A6lBAA,G7lBAgBA,A6lBAAA,C7lBAhB,A6lBAA,G7lBAoB,A6lBAA,K7lBApB,A6lBAA,G7lBA6B,A6lBAA,E7lBAEgoM,A6lBAAA,E7lBAE,A6lBAA,I7lBAIgnC,A6lBAAA,E7lBAR,A6lBAA,C7lBA7B,A6lBAA,G7lBA4C,A6lBAA,G7lBA5C,A6lBAA,G7lBAkD4B,A6lBAAA,E7lBAlD,A6lBAA,G7lBAuD,A6lBAA,G7lBAvD,A6lBAA,I7lBA8D,A6lBAA,K7lBAKtB,A6lBAAA,G7lBAL,A6lBAA,G7lBAWn3O,A6lBAAA,C7lBAC,A6lBAA,G7lBAG6H,A6lBAAA,C7lBAC,A6lBAA,G7lBAGjI,A6lBAAA,I7lBAI,A6lBAA,C7lBACgU,A6lBAAA,G7lBAL,A6lBAA,C7lBASm1N,A6lBAAA,E7lBAT,A6lBAA,C7lBAjF,A6lBAA,I7lBAiG,A6lBAA,G7lBAjG,A6lBAA,I7lBAwG,A6lBAA,K7lBAKqO,A6lBAAA,G7lBAL,A6lBAA,G7lBAW74N,A6lBAAA,C7lBAC,A6lBAA,G7lBAG1W,A6lBAAA,C7lBAC,A6lBAA,G7lBAGjI,A6lBAAA,I7lBAI,A6lBAA,C7lBAC+T,A6lBAAA,G7lBAL,A6lBAA,C7lBASo1N,A6lBAAA,E7lBAT,A6lBAA,C7lBA3H,A6lBAA,C7lBAV,A6lBAA;A7lBCD,AiiBjCL,AjMJA,A6PqCK,AsCrCL,AtFtCE5qM,AvPAAA,AsKAAA,AnKAAA,CuCsCDmkN,AmSAAA,CtFtCCnkN,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GuCsCG,AmSAA,AtFtCA,AvPAA,AsKAA,AnKAA,CuCsCClkC,AmSAAA,CtFtCT,AvPAA,AsKAA,AnKAA,QuCsCD,AmSAA,GnSAsB2C,AmSAAA,MnSAM,AmSAA,CnSAC60L,AmSAAA,MnSAP,AmSAA,CnSAc2wD,AmSAAA,SnSAS,AmSAA,CnSACnoP,AmSAAA,SnSAxB,AmSAA,CnSAvB,AmSAA,EnSA2DmhN,AmSAAA,KnSA3D,AmSAA,GnSAmE,AmSAA,UnSASp7M,AmSAAA,CnSAT,AmSAA,EnSAYue,AmSAAA,CnSAZ,AmSAA,EnSAe,AmSAA;Aj5ClFlF,A8wBwHG,AiiBjCH,AjMJE6jO,A6PqCC,AsCrCDA,EnSAAA,AmSAAA,CnoBpEgC,A6lBAA,Q7PoEvB,AmSAA,CnSACnoP,AmSAAA,SnSAV,AmSAA,CnSAoBmhN,AmSAAA,KnSApB,AmSAA,CnSA0BziN,AmSAAA,InSA1B,AmSAA,CnSA+B,AmSAA,InSA/B,AmSAA,EnSAqC4lB,AmSAAA,CnSArC,AmSAA,EnSAwCve,AmSAAA,CnSAxC,AmSAA;Aj5ClFF,A8wBwHE04O,AiiBjCF,AjMJC,A6PqCCA,AsCrCD,AtFtCC,AvPAA,AsKAA,AnKAA,CuCoCF,AmSAA,CnoBuCEA,A6lBAAA,E32CxHE5gP,E8wBwHE,A6lBAA,E7lBAE,A6lBAA,G32CxHG,A2zC6CAgC,AvPAAA,AsKAAA,AnKAAA,GvkC7CG/B,C2zC6CZ,AvPAA,AsKAA,AnKAA,GzT2EeiI,A6lBAAA,AhD3EC,AvPAA,AsKAA,AnKAA,CzT2EV,A6lBAA,C32CxHY,CAAChI,A8wBwHDumB,A6lBAAA,C7lBAZ,A6lBAA,E7lBAe4nC,A6lBAAA,C7lBAf,A6lBAA,E7lBAkBC,A6lBAAA,C32CxHZ,A8wBwHN,A6lBAA,E7lBAqB,A6lBAA,C32CxHE,EAA/B,EAEA;AACA,A8wBsHI,AiiBjCJ,A4DiCI,AhD3EAl+C,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CzT2ECsY,A6lBAAA,AhD3EA1mB,AvPAAA,AsKAAA,AnKAAA,CzT2EL,A6lBAA,GhD3EA,AvPAA,AsKAA,AnKAA,CzT2EU,A6lBAA,AhD3EAuD,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG8gC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACxF,AvPAAA,AsKAAA,AnKAAA,CzT2EC,A6lBAA,K7lBAKs+M,A6lBAAA,G7lBAL,A6lBAA,AhD3EH,AvPAA,AsKAA,AnKAA,CoPAYp9O,AvPAAA,AsKAAA,AnKAAA,CoPAZ,AvPAA,AsKAA,AnKAA,CzT2Ec,A6lBAA,ChD3ECiK,AvPAAA,AsKAAA,AnKAAA,CoPAf,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,EzT2EiCqzO,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,C7lBACn3O,A6lBAAA,C7lBA9B,A6lBAA,I7lBAmC,A6lBAA,G7lBAnC,A6lBAA,I7lBA0C,A6lBAA,K7lBAKk3O,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,K7lBAKE,A6lBAAA,G7lBAL,A6lBAA,G7lBAW,A6lBAA,C7lBAC74N,A6lBAAA,C7lBAjE,A6lBAA,I7lBAsE,A6lBAA,G7lBAtE,A6lBAA,G7lBA6E,A6lBAA,C7lBAC4nC,A6lBAAA,C7lBA9E,A6lBAA,G7lBAmF,A6lBAA,G7lBAnF,A6lBAA,G7lBA0F,A6lBAA,C7lBACC,A6lBAAA,C7lBA3F,A6lBAA,G7lBAgG,A6lBAA,G7lBAhG,A6lBAA,G7lBAuG,A6lBAA,C7lBACD,A6lBAAA,C7lBAxG,A6lBAA,G7lBA6G,A6lBAA,G7lBAvH,A6lBAA;A32CrHJ,A8wBsHG,AiiBjCH,AjMJA,A6PqCG,AsCrCH,AtFtCI9oD,AvPAAA,AsKAAA,AnKAAA,GzTjC8B,A6lBAA,ChDiC9BA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CuCsCCklP,AmSAAA,CtFtCL,AvPAA,AsKAA,AnKAA,auCsCJ,AmSAA,CnSAwB12E,AmSAAA,OnSAxB,AmSAA,EnSAiC,AmSAA;Aj5ChFjC,A8wBsHEriK,AiiBjCF,AjMJE,A6PqCAA,AsCrCA,AtFtCE3P,AvPAAA,AsKAAA,AnKAAA,EzT2EF2P,A6lBAAA,EhD3EE3P,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuCsCEsiP,AmSAAA,CtFtCCr4O,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CzT2EC,A6lBAA,E7lBAE,A6lBAA,AhD3EA,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,EuCsCF,AmSAA,GnSAgB+nK,AmSAAA,MnoBqCK,A6lBAA,C7PrCrB,AmSAA;AnoBsCE,AiiBjCJ,AjMJC,A6PqCG,AsCrCH,AtFtCE,AvPAA,AsKAA,AnKAA,WzT2EQ,A6lBAA,K7lBAKrrJ,A6lBAAA,C7lBAZ,A6lBAA;A32CrHJ,A8wBsHG,AiiBjCH,A4DiCG,I32CtHCvoB,gBAAJ;AACA,A8wBMkC,AiiB+ElC,AjMJAsqP,A6P3EkC,AsC2ElCA,AtFtCE,AvPAA,AsKAA,AnKAA,CzTrCF,A6lBAA,G32CNIrqP,G2zC2CG2B,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGiK,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuCsCE,AmSAA,CnSAC7J,AmSAAA,AtFtCA,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB6J,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GvkC3CnB,A2zC2CsBiE,AvPAAA,AsKAAA,AnKAAA,CoPApB,AvPAA,AsKAA,AnKAA,CuCsCF,AmSAA,CtFtCyB,AvPAA,AsKAA,AnKAA,EuCsCE,AmSAA,AtFtCAjE,AvPAAA,AsKAAA,AnKAAA,CoPAzB,AvPAA,AsKAA,AnKAA,EoPA4B,AvPAA,AsKAA,AnKAA;AwO2C9B,AjMJEuzO,AmSAAA,AtFtCE/wO,AvPAAA,AsKAAA,AnKAAA,EuCsCF+wO,AmSAAA,EtFtCE/wO,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GuCsCG,AmSAA,AtFtCA63B,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CuCsCC,AmSAA,AtFtCAr6B,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,GzT4EWoE,A6lBAAA,K7PtCIlI,AmSAAA,CnSAT,AmSAA,EnSAYue,AmSAAA,CnSAZ,AmSAA,EnSAe,AmSAA;Aj5ChFzB,A+yCqFA,AjML2B,AmSAA,Sj5ChFlBpmB,A8mCgFuBgkP,AmSAAA,QnSAL,AmSAA,CnSAc9E,AmSAAA,MnSAd,AmSAA,Cj5ChF3B,A8mCgFgD94N,AmSAAA,CnSArB,AmSAA,Ej5ChFC,A8mCgFuBve,AmSAAA,CnSAxB,AmSAA;Aj5C/EvB,A8mC+EoD,AmSAA,AtFpCpD,AvPAA,AsKAA,AnKAA,GuCmCuB,AmSAA,Kj5C9EjB,A2zC2CFsG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GvkC3CKlO,E2zC2CA,AvPAA,AsKAA,AnKAA,GvkC3CJ,CAAU,A2zC2ChB,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA,+BvkC3CV,CAAN;AACH,A8mC+ECk/O,AmSAAA,AtFpCIj6O,AvPAAA,AsKAAA,AnKAAA,EuCoCJi6O,AmSAAA,ItFpCIj6O,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IuCoCI,AmSAA,AtFpCA8gC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CuCoCC,AmSAA,AtFpCAxF,AvPAAA,AsKAAA,AnKAAA,SoPAF,AvPAA,AsKAA,AnKAA,CoPAY9+B,AvPAAA,AsKAAA,AnKAAA,CoPAZ,AvPAA,AsKAA,AnKAA,CuCoCa,AmSAA,CtFpCEiK,AvPAAA,AsKAAA,AnKAAA,CoPAf,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AwOyCN,AjML0B,AmSAA,AtFnCpBzG,AvPAAA,AsKAAA,AnKAAA,IwOwCFuvU,EYxCEvvU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuCmCwB8+O,AmSAAA,EtFnCpBh+M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOwCZ,AYxCaxF,AvPAAA,AsKAAA,AnKAAA,EwOwCEg3B,EjMLW,AmSAA,CnSAc2nL,AmSAAA,GlGKxC,CYxCW,AvPAA,AsKAA,AnKAA,CwOwCY33O,AYxCA,AvPAA,AsKAA,AnKAA,EoPAEmE,AvPAAA,AsKAAA,AnKAAA,CoPAd,AvPAA,AsKAA,AnKAA,CuCmCe,AmSAA,ClGK1B,AYxC4B,AvPAA,AsKAA,AnKAA,EwOwCE3K,AYxCA2K,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,IwOwCN,EAAsC+oU,SAAtC;A/yCnFA,A+yCoFA,AjMNsD,AmSAA,AtFlChDhzU,AvPAAA,AsKAAA,AnKAAA,GuCgCqB,AmSAA,ClGQvBizU,EYxCEjzU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EvkC5CExB,C2zC4CCyL,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,YwOwCiB,GAAG,CAA1B,C/yCpFA,GAAgC;AAC5B,A+yCmFJ,AjMLEyzO,AmSAAA,AtFlCG,AvPAA,AsKAA,AnKAA,EuCkCHA,AmSAAA,ElGMEw1F,CY5CA,AvPAA,AsKAA,AnKAA,GvkCxCM,A8mC8EF,AmSAA,EnSAE,AmSAA,CtFlCC,AvPAA,AsKAA,AnKAA,CvkC5CG30U,A+yCoFF,GAAG,AYxCAkO,AvPAAA,AsKAAA,AnKAAA,CwOuCf,AYvCgB,AvPAA,AsKAA,AnKAA,CvkC5CN,CAAU,E8mC8EDtG,AmSAAA,CnSAT,AmSAA,AtFlCWuxF,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,CuCkCWhzE,AmSAAA,CnSAZ,AmSAA,AtFlCc,AvPAA,AsKAA,AnKAA,EuCkCC,AmSAA,2Bj5C9Ef,CAAN;AACH,A+yCkFD,AjML2B,AmSAA,AtFjCrBzkB,AvPAAA,AsKAAA,AnKAAA,IwOwCFkzU,EYxCElzU,AvPAAA,AsKAAA,AnKAAA,GuCiC0BqiP,AmSAAA,CtFjCtB,AvPAA,AsKAA,AnKAA,OuCiCiB,AmSAA,CnSAc5E,AmSAAA,ClGOtB,GAAG,CAFtB,CjML2B,AmSAA,CnSAqBh5N,AmSAAA,CnSArB,AmSAA,EnSAwBve,AmSAAA,CnSAxB,AmSAA;AlGK3B,AjMLwD,AmSAA,AtFhClDuxF,AvPAAA,AsKAAA,AnKAAA,GuC6BqB,AmSAA,ClGWvB07O,EYxCE17O,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAJ,AvPAA,AsKAA,AnKAA,EwOwCU,GAAG,CAHnB;A/yCjFC,A+yCiFD,AjMJEkmJ,AmSAAA,AtFhCI7vO,AvPAAA,AsKAAA,AnKAAA,EuCgCJ6vO,AmSAAA,ElGQEy1F,EYxCEtlU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CvkC7CO,E8mC6EE,AmSAA,EnSAE,AmSAA,GlGQG,GAAG,CAJvB,GjMJ0B0kG,AmSAAA,EnSAT,AmSAA,EnSAaD,AmSAAA,EnSAb,AmSAA,EnSAiB1zB,AmSAAA,EnSAjB,AmSAA,EnSAqB4zB,AmSAAA,EnSArB,AmSAA,EnSAyBvsG,AmSAAA,CnSAzB,AmSAA,EnSA4Bue,AmSAAA,CnSA5B,AmSAA,EnSA+B,AmSAA;Aj5C5E5C,A+yCgFJ,AjMJkD,AmSAA,AtF/B7C,AvPAA,AsKAA,AnKAA,IwOwCD4uT,CY5CO,AvPAA,AsKAA,AnKAA,CvkCzCH,G8mC4E+ChxF,AmSAAA,EtF/B5C,AvPAA,AsKAA,AnKAA,IoPAI5qJ,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CuC+BuC,AmSAA,CnSAckmJ,AmSAAA,AtF/B9C,AvPAA,AsKAA,AnKAA,KwOwCK,GAAG,CAL1B,IjMJkD,AmSAA,CnSA4BprI,AmSAAA,EnSA5B,AmSAA,EnSAgCC,AmSAAA,EnSAhC,AmSAA,EnSAoCC,AmSAAA,EnSApC,AmSAA,EnSAwC5zB,AmSAAA,EnSAxC,AmSAA,EnSA4Cp6D,AmSAAA,CnSA5C,AmSAA,EnSA+Cve,AmSAAA,CnSA/C,AmSAA;Aj5C3E1C,A+yC+ER,AjMJsG,AmSAA,AtF9BhG,AvPAA,AsKAA,AnKAA,IwOwCFotU,I/yCrFQ,OAAO90U,I+yCqFA,GAAG,CANtB,E/yC/EY,KAAsB,UAA1B,EAAsC;AAClCL,A+yC8EZ,AjMR2B,AmSAA,AtFzBtB,AvPAA,AsKAA,AnKAA,CuCyBL,AmSAA,GlGeIo1U,CY1CO,AvPAA,AsKAA,AnKAA,CvkC3CCp1U,K2zC6CD,AvPAA,AsKAA,AnKAA,IoPAI4B,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK+N,AvPAAA,AsKAAA,AnKAAA,CvkC7CO,A+yCqFN,AYxCP,AvPAA,AsKAA,AnKAA,GvkC7CgBtP,A+yCqFN,CAPzB,AYjC0BgO,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,GvkC7CpB,A2zC6CD,AvPAA,AsKAA,AnKAA,EoPA0B,AvPAA,AsKAA,AnKAA;AvkC5C5B,A+yC6ET,AYhCMzM,AvPAAA,AsKAAA,AnKAAA,IwOwCFyzU,C/yCvFI,C2zC+CFzzU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGiK,AvPAAA,AsKAAA,AnKAAA,CvkC7CK,A2zC6CJ,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,WwOwCoB,GAAG,CAR7B;A/yC5EY7L,A+yCqFZ20U,AjMVO,AmSAA,AtF9BDr7O,AvPAAA,AsKAAA,AnKAAA,MvkC7CMt5F,A2zC6CNs5F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOwCE,AjMVOixJ,AmSAAA,CtF9BNl8O,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CwOwCM,EAAZ,IjMVO,AmSAA,CnSAmBulK,AmSAAA,Gj5C3EE,GAAG1zK,C8mC2ExB,AmSAA,EnSA4B,AmSAA,aj5C3EvB;AACH,A+yCqFTy0U,AjMVE,AmSAA,AtF9BG,AvPAA,AsKAA,AnKAA,KoPHM,AvPAA,AsKAA,AnKAA,IwO2CF,AjMVA,AmSAA,ClGUCE,CYxCC,AvPAA,AsKAA,AnKAA,EuC8BE1qF,AmSAAA,EtF9BEvoP,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK+N,AvPAAA,AsKAAA,AnKAAA,CuC8BZ,AmSAA,AtF9BM,AvPAA,AsKAA,AnKAA,CuC8BQikK,AmSAAA,GtF9BGvlK,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOwClB,CAAT,AjMVS,AmSAA,CnSAP,AmSAA,CtF9B8B,AvPAA,AsKAA,AnKAA,CwOwCC,EYxCtB,AvPAA,AsKAA,AnKAA,EoPA0B,AvPAA,AsKAA,AnKAA,KwOwCrC;A/yCpFK,A+yCqFLsmU,AjMVC,AmSAA,AtF9BK/yU,AvPAAA,AsKAAA,AnKAAA,GvkCnDF,CAME,E2zC6CAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOwCE,CAACkzU,AYxCAjpU,AvPAAA,AsKAAA,AnKAAA,CvkC7CGvL,A2zC6CF,AvPAA,AsKAA,AnKAA,CvkC7CL,EAAU,A2zC6CF,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,GwOwCG,CAAT,GAAsB,OAAtB;A/yCpFQN,A+yCqFR20U,AYxCMr7O,AvPAAA,AsKAAA,AnKAAA,IvkC7CEt5F,E2zC6CFs5F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOwCE,CAACy7O,AYxCA1mU,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,SvkC7CkB,GAAGnO,E+yCqFlB,CAAT,GAA6B,U/yCrFrB,E+yCqFR;A/yCpFK,A+yCqFLy0U,AjMVO,AmSAA,AtF9BF,AvPAA,AsKAA,AnKAA,KoPHM,AvPAA,AsKAA,AnKAA,IwO2CF,AjMVOnqF,AmSAAA,ClGUNwqF,CYxCC,AvPAA,AsKAA,AnKAA,IoPAI3mU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuC8BT,AmSAA,CnSAmBulK,AmSAAA,EtF9BL,AvPAA,AsKAA,AnKAA,CwOwCZ,CAAT,CYxCe,AvPAA,AsKAA,AnKAA,EwOwCW,AjMVnB,AmSAA,EnSA4B,AmSAA,AtF9BP,AvPAA,AsKAA,AnKAA,CoPACjkK,AvPAAA,AsKAAA,AnKAAA,CoPAlB,AvPAA,AsKAA,AnKAA,EoPAqB,AvPAA,AsKAA,AnKAA,GwOwChC;AACAglU,AjMVE,AmSAA,AtF9BI,AvPAA,AsKAA,AnKAA,SwOwCG,AjMVA,AmSAA,ClGUCM,AYxCAppU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EuC8BEw+O,AmSAAA,CtF9BCzoP,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA,KuC8BR,AmSAA,CnSAcgyK,AmSAAA,GlGUd,CAAT,GAA8B,AjMVrB,AmSAA,CnSAP,AmSAA,KlGUF;A/yCrFI,A+yCsFJ+gK,AjMVC,AmSAA,AtF9BO9yU,AvPAAA,AsKAAA,AnKAAA,MvkC9CA,E2zC8CAA,AvPAAA,AsKAAA,AnKAAA,CwOwCC,CAACqzU,EYxCE,AvPAA,AsKAA,AnKAA,iBwOwCH,CAAT,GAAiC,SAAjC;A/yCrFQ,A+yCsFRP,AYxCO,AvPAA,AsKAA,AnKAA,OoPFD,AvPAA,AsKAA,AnKAA,CvkC5CM,C+yCsFH,CAACQ,GYxCG,AvPAA,AsKAA,AnKAA,EvkC9CM50U,U+yCsFV,CAAT,C/yCtFY,E+yCsFiB,G/yCtFO,S+yCsFpC,C/yCtFQ,EAAwC;AACpCN,A+yCsFZ00U,AYxCQ/yU,AvPAAA,AsKAAA,AnKAAA,MvkC9CI3B,E2zC8CJ2B,AvPAAA,AsKAAA,AnKAAA,CwOwCC,AYxCA,AvPAA,AsKAA,AnKAA,CwOwCCwzU,EYxCEvpU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,OvkC9CsB,GAAGtL,C+yCsFxB,CAAT,GAAgC,O/yCtFpB,C+yCsFZ;A/yCrFS,A+yCsFTo0U,AYxCO,AvPAA,AsKAA,AnKAA,KvkChDC,I+yCwFC,CAACU,C/yCtFK,qB+yCsFN,CAAT,GAAoC,mBAApC;A/yCrFYp1U,A+yCsFZ,AYxCK,AvPAA,AsKAA,AnKAA,IwOwCDq1U,CY9CO,AvPAA,AsKAA,AnKAA,CvkCxCCr1U,K2zC8CD,AvPAA,AsKAA,AnKAA,IoPAIoO,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,GvkC9CS,A2zC8CnB,AvPAA,AsKAA,AnKAA,CwOwCc,CYxCC,AvPAA,AsKAA,AnKAA,CvkC9COjO,C+yCsFL,iBAA5B,C/yCtFY;AACH,A+yCqFT,AYvCM,AvPAA,AsKAA,AnKAA,IwOwCFm1U,MYxCM1pU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGjK,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAWC,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,KwOwCK,GAAG,kBAD7B;A/yCpFK,A+yCoFL,AYtCM8N,AvPAAA,AsKAAA,AnKAAA,GvkCpDF,CAME,A+yCsFF6lU,EYxCE7lU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/N,AvPAAA,AsKAAA,AnKAAA,CvkC9CGtB,A2zC8CF,AvPAA,AsKAA,AnKAA,CvkC9CL,EAAU,A2zC8CFuL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,KwOwCkB,GAAG,gBAF3B;A/yCnFQ5L,A+yCmFR,AYrCK,AvPAA,AsKAA,AnKAA,IvkC9CGA,A+yCsFJw1U,CY3CO,AvPAA,AsKAA,AnKAA,MoPGA,AvPAA,AsKAA,AnKAA,IoPAIpnU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,CvkC9CK,E2zC8Cf,AvPAA,AsKAA,AnKAA,CvkC9CkBjO,C2zC8CH,AvPAA,AsKAA,AnKAA,KwOwCK,GAAG,U/yCtF1B,a+yCmFR;A/yClFK,A+yCkFL,AYpCM,AvPAA,AsKAA,AnKAA,IwOwCFs1U,MYxCM,AvPAA,AsKAA,AnKAA,CoPAC/lU,AvPAAA,AsKAAA,AnKAAA,CoPAL,AvPAA,AsKAA,AnKAA,EoPAQsW,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CwOwCC,AYxCA,AvPAA,AsKAA,AnKAA,GwOwCG,YAJvB,wBYpC2DigB,AvPAAA,AsKAAA,AnKAAA,CoPAxC,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AvkC7Cb,A+yCiFD,AYnCM,AvPAA,AsKAA,AnKAA,CvkCjEL,GAAD,A+yCyGIyvS,MYxCMhmU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,EwOwCW,AYxCA9N,AvPAAA,AsKAAA,AnKAAA,GwOwCG,CYxCC,AvPAA,AsKAA,AnKAA,QwOmCrB;AAAA,AYlCM8N,AvPAAA,AsKAAA,AnKAAA,IwOwCFimU,EYxCEjmU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,gBwOwCqB,GAAG,mBAN9B;A/yChFA,A+yCgFA,AYjCM/N,AvPAAA,AsKAAA,AnKAAA,IwOwCFi0U,EYxCEj0U,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EvkC/CEpB,C2zC+CCqL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,IvkC/CN,CAAoBpL,GAApB,EAAyB,C+yCuFC,GAAG,kBAP7B;A/yC/EI,A+yC+EJ,AYhCK,AvPAA,AsKAA,AnKAA,IwOwCDq1U,E/yCvFI91U,gBAAgB,I+yCuFE,C/yCvFGK,E+yCuFA,Q/yCvFzB,EAAqC,Q+yC+EzC;A/yC9EQ,A+yC8ER,AY/BG,AvPAA,AsKAA,AnKAA,IwOwCC01U,cAAc,GAAG,UATrB;A/yC7EQ,A+yC6ER,IAUIC,O/yCvFW31U,UAAU,CAACI,GAAD,A+yCuFA,E/yCvFM,CAAN,A+yCuFG,C/yCvFpB,gB+yC6ER,EAU+C;A/yCtF1C,A2zC+CH,AvPAA,AsKAA,AnKAA,GvkCnDuB,CAKrB,E2zC8CEkP,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOsW,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,0CoPA0CigB,AvPAAA,AsKAAA,AnKAAA,CoPA3C,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AwOyCT,AYxCE,AvPAA,AsKAA,AnKAA,IwOwCE+vS,EYxCE38O,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOrzE,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,WwOwCW,GAAG,qBAA7B,KYxCuDigB,AvPAAA,AsKAAA,AnKAAA,CoPAzC,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AwOwCT,IACIgwS,uBAAuB,GAAG,mBAD9B;A/yCtFI,A+yCsFJ,AYtCE,AvPAA,AsKAA,AnKAA,IwOwCEC,E/yCxFI,A2zCgDFtqU,AvPAAA,AsKAAA,AnKAAA,CvkChDG7L,A2zCgDF,AvPAA,AsKAA,AnKAA,GoPAG4B,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA,UvkChDY,I+yCwFE,C/yCxFG1B,E+yCwFA,c/yCxFrB,IAAyC,CAACF,A+yCsFnD,gB/yCtFQ,KAAgEK,UAApE,EAAgF;AAC5EL,A+yCqFR,AYrCI6L,AvPAAA,AsKAAA,AnKAAA,IvkChDI7L,A+yCwFJo2U,AYxCAvqU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,evkChDmB,GAAGxL,Q+yCwFI,E/yCxFvB,C+yCwF0B,uBAHlC;A/yCpFQ,A+yCoFR,AYpCIwB,AvPAAA,AsKAAA,AnKAAA,IwOwCAw0U,AYxCAx0U,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GvkChDOxB,UAAU,CAACI,GAAD,EAAM,CAAN,CAAjB,A+yCwFqB,GAAG,0BAJhC;A/yCnFK,A+yCmFL,AYnCG,AvPAA,AsKAA,AnKAA,IwOwCC61U,oBAAoB,GAAG,yBAL3B;AAAA,IAMIC,oBAAoB,GAAG,4BAN3B;A/yClFI,A+yCkFJ,AYjCE,AvPAA,AsKAA,AnKAA,IwOwCEC,E/yCzFI,G2zCiDCvmU,AvPAAA,AsKAAA,AnKAAA,IoPAP,AvPAA,AsKAA,AnKAA,gBwOwC2B,GAAG,uCAPhC;A/yCjFQ,A+yCiFR,AYhCC,AvPAA,AsKAA,AnKAA,IwOwCGwmU,yBAAyB,GAAG,gDARhC;A/yChFQ,A+yCgFR,IASIC,O/yCzFW12U,gBAAgB,CAACS,GAAD,EAAM,CAAN,A+yCyFG,C/yCzF1B,E+yCyF6B,sEATrC;A/yC/EK,A+yCyFL,AYxCA,AvPAA,AsKAA,AnKAA,GvkCpDI,CAGE,A+yCyFFk2U,KYxCKv/M,AvPAAA,AsKAAA,AnKAAA,EvkCjDG92H,A+yCyFD,C/yCzFL,EAAQ,A+yCyFA,AYxCd,AvPAA,AsKAA,AnKAA,CoPAgB82H,AvPAAA,AsKAAA,AnKAAA,KoPAhB,AvPAA,AsKAA,AnKAA,EoPAuBj0H,AvPAAA,AsKAAA,AnKAAA,CwOwCvB,GYxCA,AvPAA,AsKAA,AnKAA,EoPA6B0yM,AvPAAA,AsKAAA,AnKAAA,GoPA7B,AvPAA,AsKAA,AnKAA,EoPAkC,AvPAA,AsKAA,AnKAA;AvkChD1B,A+yCwFR,AYvCE,AvPAA,AsKAA,AnKAA,IwOwCE+gI,I/yCzFQ,A2zCiDJ3mU,AvPAAA,AsKAAA,AnKAAA,IwOwCI,AYxCA,AvPAA,AsKAA,AnKAA,GwOwCG,AYxCAyqM,AvPAAA,AsKAAA,AnKAAA,WwOuCf,EAC4B,EYxCE,AvPAA,AsKAA,AnKAA,CoPACtjF,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,CoPA5B,AvPAA,AsKAA,AnKAA;AvkChDU,A2zCiDVA,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGnnH,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC/O,AvPAAA,AsKAAA,AnKAAA,MoPAL,AvPAA,AsKAA,AnKAA,KoPAgB,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,GoPAoB+O,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAxB,AvPAA,AsKAA,AnKAA,GoPA8BmnH,AvPAAA,AsKAAA,AnKAAA,KoPAtC,AvPAA,AsKAA,AnKAA;AvkChDU,A+yCyFZ,AYxCE,AvPAA,AsKAA,AnKAA,IwOwCEy/M,KYxCKp8H,AvPAAA,AsKAAA,AnKAAA,IvkCjDUz6M,I2zCiDF,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC61M,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,GvkCjDS,A2zCiDN,AvPAA,AsKAA,AnKAA,CvkCjDOn1M,A2zCiDNgE,AvPAAA,AsKAAA,AnKAAA,EwOwCE,CYxCb,AvPAA,AsKAA,AnKAA,CvkCjDA,CAAsB,A+yCyFN,EYxCEoxM,AvPAAA,AsKAAA,AnKAAA,EvkCjDlB,A+yCyFoBv5E,E/yCzFQ97H,E2zCiD7B,AvPAA,AsKAA,AnKAA,CvkCjDC,C+yCyFgB,AYxCUwP,AvPAAA,AsKAAA,AnKAAA,CvkCjDO,A+yCyFN,C/yCzF3B,CAAP,C2zCiDM,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAmC,AvPAA,AsKAA,AnKAA,CoPACmnH,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,CoPAnC,AvPAA,AsKAA,AnKAA,EoPA4Cj0H,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAIi0H,AvPAAA,AsKAAA,AnKAAA,KoPApD,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,yxJwOwCiC,CAAnC;A/yCxFS,A+yCwFT,AYvCC,AvPAA,AsKAA,AnKAA,IwOwCG,C/yC5FI,CAGE,OAAM92H,CAAN,EAAQ;AACN,A+yCyFZw2U,2BAA2B,GAAG,IAAIv6M,MAAJ,CAAW,muLAAX,CAF9B,EAE+wL;A/yCxFnwL,A+yCyFZ,AYxCA,AvPAA,AsKAA,AnKAA,MoPAM1nH,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGuiH,AvPAAA,AsKAAA,AnKAAA,EvkCjDQp3H,G2zCiDH,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAD,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,OvkCjDmC,CAACU,IAAjB,CAAsB,IAAtB,EAA4BD,GAA5B,EAAiC,CAAjC,CAAP;AACH,A+yCyFT;A/yCxFK,A+yCyFL,AYzCA,AvPAA,AsKAA,AnKAA,MoPAMohI,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,GoPAG44E,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPAClyL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA,EoPAS,AvPAA,AsKAA,AnKAA,EoPAT,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA,UoPAb,AvPAA,AsKAA,AnKAA,CoPAzB,AvPAA,AsKAA,AnKAA;AvkC7CC;A+yCwFD,AY1CA,AvPAA,AsKAA,AnKAA,MoPAMivB,AvPAAA,AsKAAA,AnKAAA,GwO0CGnvC,CY1CC,AvPAA,AsKAA,AnKAA,GoPAGoyM,AvPAAA,AsKAAA,AnKAAA,EwO0Cb,CAAgBvgM,KY1CK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,GwO0CtB,EAA2B+K,CY1CC,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAU,AvPAA,AsKAA,AnKAA,EoPAV,AvPAA,AsKAA,AnKAA,CwO0CrB,CY1CmC,AvPAA,AsKAA,AnKAA,CwO0CC,KY1Cf,AvPAA,AsKAA,AnKAA,CoPArB,AvPAA,AsKAA,AnKAA;AvkC7CA,A+yCwFE,S/yCxFOtkB,eAAT,CAAyBC,MAAzB,EAAiC;AAC7B,A+yCwFF,AY3CF,AvPAA,AsKAA,AnKAA,MvkC7CQX,A+yCwFF,AY3CA2wF,AvPAAA,AsKAAA,AnKAAA,CwO2CC12E,EY3CE,AvPAA,AsKAA,AnKAA,GoPAGugM,AvPAAA,AsKAAA,AnKAAA,IwO2CV,EAAgB,EY3CE,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,GvkC7CK,G2zC6CC,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CvkC7CWl6M,C2zC6CD,AvPAA,AsKAA,AnKAA,EoPAV,AvPAA,AsKAA,AnKAA,EoPAc,AvPAA,AsKAA,AnKAA,KoPAd,AvPAA,AsKAA,AnKAA,CoPApB,AvPAA,AsKAA,AnKAA,CvkC7CI,EAAyC;AACrC,A+yCwFJ,UAAM,IAAIJ,KAAJ,CAAU,aAAa8kB,OAAvB,CAAN;A/yCvFI,A+yCwFL,AY5CH,AvPAA,AsKAA,AnKAA,MoPAM+wL,AvPAAA,AsKAAA,AnKAAA,KvkC5CSz1M,C2zC4CH,AvPAA,AsKAA,AnKAA,GoPAGk6M,AvPAAA,AsKAAA,AnKAAA,QvkC5CY,A2zC4CJ,AvPAA,AsKAA,AnKAA,CvkC5CK75M,A2zC4CJ,AvPAA,AsKAA,AnKAA,MvkC5CG,A2zC4CG,AvPAA,AsKAA,AnKAA,CvkC5CtB,G2zC4Ce,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA,EoPAb,AvPAA,AsKAA,AnKAA,EoPAiB,AvPAA,AsKAA,AnKAA,MoPAjB,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA;AvkC3CK,A+yCwFJ,G/yC5FgC,CAK7B;A2zC2CJ,AvPAA,AsKAA,AnKAA,MoPAMq1M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGwE,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,MoPAM,AvPAA,AsKAA,AnKAA,KoPAP,AvPAA,AsKAA,AnKAA,EoPAc,AvPAA,AsKAA,AnKAA,EoPAd,AvPAA,AsKAA,AnKAA,EoPAkB,AvPAA,AsKAA,AnKAA,OoPAlB,AvPAA,AsKAA,AnKAA,CoPAtB,AvPAA,AsKAA,AnKAA;AwO8CA,SAASs8H,cAAT,CAAwBtN,EAAxB,EAA4B;A/yCxFxB,A+yCyFF,M/yCzFM,CAACxpU,E+yCyFAwpU,EAAE,IAAI,IAAN,IAAcA,E/yCzFI,A+yCyFF,IAAI,C/yCzFGrpU,G+yCyF9B,CAD0B,CACO,c/yCzF1B,IAA8C,CAACH,kBAAhD,KAAuEM,YAA3E,EAAyF;AACrFN,A+yCyFP,AY9CD,AvPAA,AsKAA,AnKAA,IvkC3CQA,K2zC2CC2R,AvPAAA,AsKAAA,AnKAAA,GoPAT,AvPAA,AsKAA,AnKAA,CoPAaihC,AvPAAA,AsKAAA,AnKAAA,MoPAb,AvPAA,AsKAA,AnKAA,EoPAqBksF,AvPAAA,AsKAAA,AnKAAA,CvkC3CK,GAAGx+H,C2zC2C7B,AvPAA,AsKAA,AnKAA,EoPA4BqsB,AvPAAA,AsKAAA,AnKAAA,KoPA5B,AvPAA,AsKAA,AnKAA,EoPAmC,AvPAA,AsKAA,AnKAA,EvkC3C3B;AACA,A2zC2CN,AvPAA,AsKAA,AnKAA,QoPAMnrB,AvPAAA,AsKAAA,AnKAAA,GvkC3COlB,C2zC2CH,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACw+H,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,EvkC3CY,A2zC2CJ59H,AvPAAA,AsKAAA,AnKAAA,CvkC3CKP,K2zC2Cb,AvPAA,AsKAA,AnKAA,CvkC3CY,A2zC2CG,AvPAA,AsKAA,AnKAA,CvkC3CtB,E2zC2CyBqK,AvPAAA,AsKAAA,AnKAAA,KoPAH,AvPAA,AsKAA,AnKAA,CoPASvK,AvPAAA,AsKAAA,AnKAAA,IoPAT,AvPAA,AsKAA,AnKAA,CoPAcksB,AvPAAA,AsKAAA,AnKAAA,KoPAd,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AvkC1CG,A+yCyFL,AY9CE7oB,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,OwO8COizU,AY9CA,AvPAA,AsKAA,AnKAA,CoPACnkS,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAgB5wC,AvPAAA,AsKAAA,AnKAAA,CwO8ClB,CAAoBwnU,EAApB,CY9CE,AvPAA,AsKAA,AnKAA,CwO8CsB,AY9CA1lU,AvPAAA,AsKAAA,AnKAAA,OoPAtB,AvPAA,AsKAA,AnKAA,EoPA+BtC,AvPAAA,AsKAAA,AnKAAA,IoPA/B,AvPAA,AsKAA,AnKAA,EoPFiC,AvPAA,AsKAA,AnKAA,CoPEK,AvPAA,AsKAA,AnKAA;AwO+CtC,AY9CD,AvPAA,AsKAA,AnKAA,SwO8CQ,yBAAyBu9B,OAAzB,CAAiCyqS,EAAjC,KAAwC,CAA/C;A/yCzFE,A+yC0FH,M/yC1FO;AACA,A2zC4CR,AvPAA,AsKAA,AnKAA,MoPAMvzH,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AvkC3CQ,A+yC0FR,SAAS+gI,E/yC1FMh3U,U+yC0Ff,CAAsBwpU,EAAtB,EAA0B,G/yC1FO,CAAC7oU,MAAD,CAAzB;AACH,A+yC0FH,AY/CF,AvPAA,AsKAA,AnKAA,GvkC9CI,CAGE,E2zC2CA+5M,AvPAAA,AsKAAA,AnKAAA,GwO+CG,E/yC1FIr6M,CAAP,C2zC2CO,AvPAA,AsKAA,AnKAA,CvkC3CE,E2zC2CC,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,GwO+CoB0+B,OAAX,CAAmByqS,EAAnB,KAA0B,CAAjC;A/yCzFM,A+yC0FP,EAAC,M/yC1FU;AACA,A2zC0CZ,AvPAA,AsKAA,AnKAA,MoPAMtzH,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AvkCzCY,aAAOl2M,kBAAkB,CAACS,IAAnB,CAAwB,IAAxB,EAA8BE,MAA9B,CAAP;AACH,A+yC0FT,AYjDA,AvPAA,AsKAA,AnKAA,KvkC5CQ,CAGE,A2zCyCJw1M,AvPAAA,AsKAAA,AnKAAA,GwOiDG8gI,CYjDC,AvPAA,AsKAA,AnKAA,GvkCzCO52U,A2zCyCJ,AvPAA,AsKAA,AnKAA,CvkCzCH,A2zCyCV,AvPAA,AsKAA,AnKAA,EvkCzCmB,K+yC0FnB,CAAsBmpU,EAAtB,EAA0B;A/yCzFd,A+yC0FV,SAAOA,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,IAArC,IAA6CA,EAAE,KAAK,IAApD,IAA4DA,EAAE,KAAK,IAAnE,IAA2EA,EAAE,IAAI,MAAN,IAAgB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,MAAzC,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,MAAjE,EAAyE,MAAzE,EAAiF,MAAjF,EAAyF,MAAzF,EAAiG,MAAjG,EAAyG,MAAzG,EAAiH,MAAjH,EAAyH,MAAzH,EAAiI,MAAjI,EAAyIzqS,OAAzI,CAAiJyqS,EAAjJ,KAAwJ,CAA1P;A/yCzFU,A+yC0FX,AYlDD,AvPAA,AsKAA,AnKAA,EwOkDE,IYlDIpzH,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA;AvkCvCY,aAAOp2M,kBAAkB,CAACS,IAAnB,CAAwB,IAAxB,EAA8BE,MAA9B,CAAP;AACH;AACJ,A+yC0FL,AYpDA,AvPAA,AsKAA,AnKAA,SwOoDSu2U,AYpDA9mU,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,CoPAiBkY,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,EoPAoBsqB,AvPAAA,AsKAAA,AnKAAA,MwOoDpB,AYpDA,AvPAA,AsKAA,AnKAA,CwOoD0B42R,CYpDE,AvPAA,AsKAA,AnKAA,CwOoD5B,EAA8B;A/yCtF7B,A+yCuFC,AYpDA,AvPAA,AsKAA,AnKAA,MoPAI1qM,AvPAAA,AsKAAA,AnKAAA,GwOoDG0qM,EAAE,AYpDA,AvPAA,AsKAA,AnKAA,GoPAGlhT,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOoDC,GYpDG2tL,AvPAAA,AsKAAA,AnKAAA,CwOoDV,GYpDP,AvPAA,AsKAA,AnKAA,CwOoDsBuzH,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,MAArC,IAA+CA,EAAE,KAAK,MAA7D;AACD,AYpDC,AvPAA,AsKAA,AnKAA,EwOoDA,OYpDO,AvPAA,AsKAA,AnKAA;AvkCnCT,A2zCoCI1qM,AvPAAA,AsKAAA,AnKAAA,IvkCpCAl+H,A2zCoCAk+H,AvPAAA,AsKAAA,AnKAAA,KvkCpCK,A2zCoCA,AvPAA,AsKAA,AnKAA,CoPACx2G,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CvkCpCG,C2zCoCC,AvPAA,AsKAA,AnKAA,CvkCpCb;AACA,A2zCoCM,AvPAA,AsKAA,AnKAA,IvkCpCFznB,M2zCoCMa,AvPAAA,AsKAAA,AnKAAA,EvkCpCE,GAAG,I2zCoCI,AvPAA,AsKAA,AnKAA,CvkCpCnB,A2zCoCoBT,AvPAAA,AsKAAA,AnKAAA,MoPAd,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AvkCnC5B,A+yCwFA,AYpDQ69H,AvPAAA,AsKAAA,AnKAAA,IvkCpCJh+H,I2zCoCIg+H,AvPAAA,AsKAAA,AnKAAA,CwOoDCq4M,IYpDI,AvPAA,AsKAA,AnKAA,GvkCpCb,A2zCoCgB,AvPAA,AsKAA,AnKAA,CoPAC7uT,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,QwOoDR,CAA2BkhT,EAA3B,EAA+B;A/yCvF/B,A+yCwFE,AYpDM,AvPAA,AsKAA,AnKAA,IvkCpCJzoU,K+yCwFKyoU,EAAE,G/yCxFG,C2zCoCC,AvPAA,AsKAA,AnKAA,CwOoDC,C/yCxFC,CAAC,CAAlB,A2zCoCQ,AvPAA,AsKAA,AnKAA,CwOoDC,IAAeA,EAAE,KAAK,IAAtB,IAA8B;AACrCA,AYpDK,AvPAA,AsKAA,AnKAA,EwOoDLA,EAAE,GYvDE,AvPAA,AsKAA,AnKAA,CwOuDE,IAAN,CYpDW,AvPAA,AsKAA,AnKAA,GwOoDGA,EAAE,IAAI,IADb,IACqB;A/yCvF9B,A+yCwFEA,AYpDM,AvPAA,AsKAA,AnKAA,EwOoDNA,EAAE,IAAI,C/yCxFCxoU,G+yCwFP,GYpDa89H,AvPAAA,AsKAAA,AnKAAA,CwOoDC0qM,EAAE,EYpDV,AvPAA,AsKAA,AnKAA,EwOoDc,E/yCxFtB,E+yCsFS,C/yCtFkB,G+yCwFG;A/yCvF1B,A+yCwFFA,AYpDK,AvPAA,AsKAA,AnKAA,EwOoDLA,EAAE,E/yCxFI,CAAC3oU,E+yCwFA,IAHA,E/yCrFD,E+yCwFS,E/yCxFI,CAACC,YAAlB,EAAgC;AAC5B,A+yCwFN0oU,AYpDG,AvPAA,AsKAA,AnKAA,EwOoDHA,EAAE,CY5DK,AvPAA,AsKAA,AnKAA,GwO4DD,IAAN,IAAcoN,4BAA4B,CAACtnT,IAA7B,CAAkCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAlC,CAJd;A/yCnFG,A+yCwFJ;AYnDGxjT,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA;AvkCpCRnlB,A+yCyFJ,AYpDM,AvPAA,AsKAA,AnKAA,EvkCrCFA,O+yCyFKu2U,C/yCzFG,A2zCqCFt4M,AvPAAA,AsKAAA,AnKAAA,GvkCrCK,E2zCqCA,AvPAA,AsKAA,AnKAA,GvkCrCX,C2zCqCe47E,AvPAAA,AsKAAA,AnKAAA,MwOoDnB,CAA0B8uH,AYpDpB,AvPAA,AsKAA,AnKAA,EwOoDN,AYpD4B73T,AvPAAA,AsKAAA,AnKAAA,EwOoDE,CYpDC,AvPAA,AsKAA,AnKAA,CoPACihC,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,OoPAX,AvPAA,AsKAA,AnKAA,EoPAoB,AvPAA,AsKAA,AnKAA,OoPApB,AvPAA,AsKAA,AnKAA,EoPA6BlxC,AvPAAA,AsKAAA,AnKAAA,SoPA7B,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA;AwOqD1B,AYpDI,AvPAA,AsKAA,AnKAA,SwOoDG8nU,EAAE,EYpDE,AvPAA,AsKAA,AnKAA,GwOoDG,CYpDV,AvPAA,AsKAA,AnKAA,GwOoDG,IAAeA,EAAE,KAAK,IAAtB,IAA8B;A/yCzFnC,A+yC0FFA,AYpDG,AvPAA,AsKAA,AnKAA,EwOoDHA,EAAE,CYjEK,AvPAA,AsKAA,AnKAA,CvkCzBD1oU,E+yC0FA,IAAN,IAAc0oU,E/yC1FI,A+yC0FF,C/yC1FGvoU,G+yC0FC,G/yC1FlB,C+yCyFK,C/yCzFoB,G+yC0FC;A/yCzFtBL,A+yC0FN4oU,EAAAA,E/yC1FM5oU,A+yC0FJ,IAAI,C/yC1FK,GAAGE,A+yC0Fd,IAAc0oU,EAAE,IAAI,E/yC1FM,CAACtoU,C+yCwFpB,IAEqB,C/yC1Fd,CAAoBN,KAApB,CAAR;AACH,A+yC0FH4oU,AYpDEzlU,AvPAAA,AsKAAA,AnKAAA,EwOoDFylU,C/yC5FE,C+yC4FA,AYpDAzlU,AvPAAA,AsKAAA,AnKAAA,IwOoDI,AYpDA,AvPAA,AsKAA,AnKAA,CvkCtCG,E2zCsCA,AvPAA,AsKAA,AnKAA,CwOoDT,IAAcylU,EAAE,IAAI,IAHb,IAGqB;A/yCzFtBzoU,A+yC0FNyoU,AYpDI,AvPAA,AsKAA,AnKAA,EwOoDJA,E/yC1FMzoU,A+yC0FJ,KAAK,CYpDC+9H,AvPAAA,AsKAAA,AnKAAA,GwOgDD,C/yCtFS,C2zCsCH,AvPAA,AsKAA,AnKAA,EvkCtCM,A+yC0FJ,C/yC1FK,CAAd,A2zCsCWo3E,AvPAAA,AsKAAA,AnKAAA,IoPAb,AvPAA,AsKAA,AnKAA,EoPAmBvkM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACihC,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,MoPAX,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA,MoPAnB,AvPAA,AsKAA,AnKAA,EoPA2BlxC,AvPAAA,AsKAAA,AnKAAA,SoPA3B,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA;AvkCrCpB,A+yC0FH8nU,AYpDI,AvPAA,AsKAA,AnKAA,EwOoDJA,EAAE,IAAI,IAAN,CYpDW,AvPAA,AsKAA,AnKAA,GwOoDGqN,CYpDV,AvPAA,AsKAA,AnKAA,0BwOoDqC,CAACvnT,IAA5B,CAAiCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAjC,CALd;AAMD,AYpDI,AvPAA,AsKAA,AnKAA,EwOoDH,GYtEO,AvPAA,AsKAA,AnKAA;AvkCpBL,MAAI5oU,KAAK,CAACK,MAAV,EAAkB;AACdE,A2zCuCJikB,AvPAAA,AsKAAA,AnKAAA,IvkCvCIjkB,A2zCuCJikB,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,GvkCvCO;AACb,A+yC2FL,AYpDM,AvPAA,AsKAA,AnKAA,MwOoDAiyT,IYpDIv4M,AvPAAA,AsKAAA,AnKAAA,IwOoDI,CYpDC,AvPAA,AsKAA,AnKAA,EwOoDE,EYpDEq3E,AvPAAA,AsKAAA,AnKAAA,IoPAb,AvPAA,AsKAA,AnKAA,EoPAmBxkM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACihC,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,KoPAX,AvPAA,AsKAA,AnKAA,EoPAkB,AvPAA,AsKAA,AnKAA,MoPAlB,AvPAA,AsKAA,AnKAA,EoPA0BlxC,AvPAAA,AsKAAA,AnKAAA,SoPA1B,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA;AvkCtCxB,A+yC2FC,AYpDI,AvPAA,AsKAA,AnKAA,QwOoDE,CADS,IYnDJ,AvPAA,AsKAA,AnKAA,IoPAP,AvPAA,AsKAA,AnKAA;AwOqDJ,AYpDG,AvPAA,AsKAA,AnKAA,KoPvBI,AvPAA,AsKAA,AnKAA,GwO2ED,CAFS;A/yCxFjB,A+yC2FE,QAAM,C/yC3FCP,A+yCwFQ,U/yCxFjB,GAAsB;AAClB,A+yC2FF,AYpDEszB,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EvkCvCI5zB,G+yC2FC,AYpDA,AvPAA,AsKAA,AnKAA,CwOgDQ,EYhDL,AvPAA,AsKAA,AnKAA,EvkCvCR,EAAc;AACV,A+yC2FN,AYpDI,AvPAA,AsKAA,AnKAA,SwOoDG,CALQ,AY/CPi+H,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,IoPAIs3E,AvPAAA,AsKAAA,AnKAAA,KoPAb,AvPAA,AsKAA,AnKAA,EoPAoBzkM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACihC,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,KoPAX,AvPAA,AsKAA,AnKAA,EoPAkB,AvPAA,AsKAA,AnKAA,OoPAlB,AvPAA,AsKAA,AnKAA,EoPA2BlxC,AvPAAA,AsKAAA,AnKAAA,SoPA3B,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA;AvkCtCrB,A+yC2FH,AYpDI,AvPAA,AsKAA,AnKAA,SwOoDG,CANQ,GY9CJ,AvPAA,AsKAA,AnKAA,IoPAP,AvPAA,AsKAA,AnKAA;AwOqDJ,AYpDG,AvPAA,AsKAA,AnKAA,SwOoDI,CAPQ;A/yCpFb,A+yC4FF,M/yC5FMN,G+yC4FC,CARQ,G/yCpFF,GAAGb,UAAU,CAACS,eAAD,CAAxB;AACAH,A+yC4FF,AYlFO,AvPAA,AsKAA,AnKAA,EvkCVLA,C2zCUF,AvPAA,AsKAA,AnKAA,OvkCVU,A+yC4FF,CATO,E/yCnFF,IAAX;AAEA,A+yC2FF,AYpDD,AvPAA,AsKAA,AnKAA,MvkCvCOQ,GAAG,C+yC2FD,CAVO,C/yCjFHT,KAAK,CAACK,MAAhB;A+yC4FF,UAAQ,CAXO;A/yChFb,A+yC4FF,AYpDF,AvPAA,AsKAA,AnKAA,IoPAI+H,AvPAAA,AsKAAA,AnKAAA,KvkCxCM3H,C+yC4FA,CAZO,AYxCN,AvPAA,AsKAA,AnKAA,CvkCxCP,EAAW,A2zCwCDI,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACuH,AvPAAA,AsKAAA,AnKAAA,OoPApB,AvPAA,AsKAA,AnKAA;AvkCvCQlI,A+yC4FN,I/yC5FMA,M+yC4FE,CAbO,K/yC/EG,GAAGF,KAAf;AACAA,A+yC4FN,I/yC5FMA,KAAK,C+yC4FH,CAdO,C/yC9ED,EAAR;A+yC6FN,AYrDF,AvPAA,AsKAA,AnKAA,SoPAS+5M,AvPAAA,AsKAAA,AnKAAA,EwOqDE,CAfM,KYtCjB,AvPAA,AsKAA,AnKAA,CoPAmBryL,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AvkCvCd,A+yC6FN,AYrDA,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CvkCxCK,A+yC6FJ,CAhBM,C/yC7EAvnB,E2zCwCF2D,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC4jB,AvPAAA,AsKAAA,AnKAAA,CvkCxCP,A2zCwCM,AvPAA,AsKAA,AnKAA,CoPAnB,AvPAA,AsKAA,AnKAA,EvkCxC4BjnB,GAAtB,EAA2B;AACvB,A+yC6FV,AYrDD,AvPAA,AsKAA,AnKAA,UvkCxCeP,C+yC6FL,CAjBM,U/yC5EL,EAAkB;AACdA,A+yC6Fd,Q/yC7FcA,G+yC6FL,CAlBM,Q/yC3EW,CAACC,UAAD,CAAZ,CAAyBO,GAAzB;AACH,A+yC6FX,AYrDF,AvPAA,AsKAA,AnKAA,MoPAM+0M,AvPAAA,AsKAAA,AnKAAA,KwOqDK,CAnBM,IYlCD,AvPAA,AsKAA,AnKAA,GoPAGzwM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,WoPAlC,AvPAA,AsKAA,AnKAA;AvkCvCS,A+yC6FP,WAAS,CApBM;AAqBf,AYrDF,AvPAA,AsKAA,AnKAA,SoPAS0wM,AvPAAA,AsKAAA,AnKAAA,EwOqDE,CArBM,QYhCjB,AvPAA,AsKAA,AnKAA,CoPAqB,AvPAA,AsKAA,AnKAA,GoPAGC,AvPAAA,AsKAAA,AnKAAA,OoPAxB,AvPAA,AsKAA,AnKAA,EoPAiC,AvPAA,AsKAA,AnKAA;AvkCxCzBx1M,A+yC8FN,AYrDA,AvPAA,AsKAA,AnKAA,IvkCzCMA,K2zCyCCw1M,AvPAAA,AsKAAA,AnKAAA,EwOqDE,CAtBM,E/yCxEC,E2zCyCF,AvPAA,AsKAA,AnKAA,CvkCzCK,A2zCyCJroM,AvPAAA,AsKAAA,AnKAAA,CvkCzCK,CAAd,I2zCyCC,AvPAA,AsKAA,AnKAA,CoPAe,AvPAA,AsKAA,AnKAA,CoPAC8Z,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAMyvC,AvPAAA,AsKAAA,AnKAAA,MoPAN,AvPAA,AsKAA,AnKAA,KoPAiB,AvPAA,AsKAA,AnKAA;AvkCxCjCp2D,A+yC8FN,AYrDE,AvPAA,AsKAA,AnKAA,IvkCzCIA,GAAG,E2zCyCF,AvPAA,AsKAA,AnKAA,CvkCzCKT,E+yC8FF,CAvBK,E/yCvEE,A2zCyCJgF,AvPAAA,AsKAAA,AnKAAA,CvkCzCK3E,E2zCyChB,AvPAA,AsKAA,AnKAA,IvkCzCI,A2zCyCcw2D,AvPAAA,AsKAAA,AnKAAA,MoPAlB,AvPAA,AsKAA,AnKAA,EoPA0B,AvPAA,AsKAA,AnKAA;AvkCxCzB,A+yC8FH,AYrDI,AvPAA,AsKAA,AnKAA,UoPAI7xD,AvPAAA,AsKAAA,AnKAAA,EwOqDE,CAxBK,AY7BJ,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,SoPAZ,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA;AwOsD3B,AYrDM,AvPAA,AsKAA,AnKAA,YwOqDI,CAzBK;A/yCrEb9E,A+yC+FF,AYrDM,AvPAA,AsKAA,AnKAA,EvkC1CJA,U+yC+FQ,CA1BK,C/yCrED,GAAG,IAAf;AACAD,A+yC+FF,AYrDM,AvPAA,AsKAA,AnKAA,EvkC1CJA,QAAQ,E+yC+FA,C/yC/FG,A+yCoEE,K/yCpEb;AACAH,A+yC+FF,AYrDMsnB,AvPAAA,AsKAAA,AnKAAA,EvkC1CJtnB,M2zC0CIsnB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOqDC,AYrDAwuL,AvPAAA,AsKAAA,AnKAAA,CwOyBK,I/yCnEE,CAACp1M,C2zC0CZ,AvPAA,AsKAA,AnKAA,GoPAcq1M,AvPAAA,AsKAAA,AnKAAA,GvkC1CH,CAAf,M2zC0C4B,AvPAA,AsKAA,AnKAA,CoPACzuL,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACwuL,AvPAAA,AsKAAA,AnKAAA,OoPAL,AvPAA,AsKAA,AnKAA,EoPAc/+I,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC++I,AvPAAA,AsKAAA,AnKAAA,OoPArB,AvPAA,AsKAA,AnKAA,CoPAxB,AvPAA,AsKAA,AnKAA;AvkCzCP,A+yC+FC,AYrDK,AvPAA,AsKAA,AnKAA,OoPLD,AvPAA,AsKAA,AnKAA,KwO0DM,CA7BK,AYxBJ,AvPAA,AsKAA,AnKAA;AwOsDX,AYrDM,AvPAA,AsKAA,AnKAA,YwOqDI,CA9BK;A/yChEjB52M,A+yC+FE,AYrDM,AvPAA,AsKAA,AnKAA,OvkC1CD,CAAC2B,K+yC+FK,CA/BI,E/yChEjB,GAAmB,UAAUf,GAAV,EAAe;AAC9B,A+yC+FF,AYrDM,AvPAA,AsKAA,AnKAA,MvkC1CAgB,IAAI,GAAG,A+yC+FF,CAhCI,G/yC/DEC,KAAJ,CAAUC,SAAS,CAACT,MAAV,GAAmB,CAA7B,CAAX;A+yCgGF,AYrDM,AvPAA,AsKAA,AnKAA,awOqDK,CAjCI;A/yC9Db,A+yCgGF,AYrDM,AvPAA,AsKAA,AnKAA,MvkC3CAS,O+yCgGK,CAlCI,AYnBHiO,AvPAAA,AsKAAA,AnKAAA,CvkC3CG,A2zC2CF,AvPAA,AsKAA,AnKAA,CvkC3CG1O,E2zC2CA2E,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CvkC3Cb,GAAmB,CAAvB,A2zC2CsB,AvPAA,AsKAA,AnKAA,EvkC3CI,M2zC2CZ,AvPAA,AsKAA,AnKAA,GoPAmB,AvPAA,AsKAA,AnKAA;AvkC1C7B,A+yCgGN,AYrDQ8wM,AvPAAA,AsKAAA,AnKAAA,SvkC3CG,C2zC2CHA,AvPAAA,AsKAAA,AnKAAA,GvkC3CO/0M,A+yCgGJ,C/yChGK,A+yC6DD,EYlBD,AvPAA,AsKAA,AnKAA,CvkC3CK,CAAb,A2zC2CU,AvPAA,AsKAA,AnKAA,EvkC3CMA,CAAC,GAAGD,SAAS,CAACT,MAA9B,EAAsCU,CAAC,EAAvC,EAA2C;AACvCH,A+yCgGV,AYvDmC,AvPAA,AsKAA,AnKAA,MvkCzCzBA,G2zCyCM,AvPAA,AsKAA,AnKAA,CvkCzCF,CAACG,CAAC,A2zC2CNiE,AvPAAA,AsKAAA,AnKAAA,EwOqDE,C/yChGO,A+yC4DJ,AYjBF,AvPAA,AsKAA,AnKAA,CvkC3CC,CAAJ,GAAclE,A2zC2CN,AvPAA,AsKAA,AnKAA,OoPAR,AvPAA,AsKAA,AnKAA,EvkC3CuB,CAACC,A2zC2CN,AvPAA,AsKAA,AnKAA,CvkC3CK,CAAvB,E2zC2CA,AvPAA,AsKAA,AnKAA,GoPAyB,AvPAA,AsKAA,AnKAA,IoPF7B,AvPAA,AsKAA,AnKAA;AvkCxCC,A+yCgGP,AYrDMg1M,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,MwOqDM,CArCG,IYhBE,AvPAA,AsKAA,AnKAA,CoPAC3uL,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAMpiB,AvPAAA,AsKAAA,AnKAAA,GoPAN,AvPAA,AsKAA,AnKAA,EoPAW6xD,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC7xD,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAjB,AvPAA,AsKAA,AnKAA,EoPAwB+J,AvPAAA,AsKAAA,AnKAAA,CoPAxB,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AvkC1CH,A+yCgGH,AYrDK,AvPAA,AsKAA,AnKAA,cwOqDO,CAtCG;AAuCf,AYrDG,AvPAA,AsKAA,AnKAA,ewOqDU,CAvCE;A/yCzDb/O,A+yCiGF,E/yCjGEA,KAAK,CAACgB,IAAN,CAAW,E+yCiGA,CAxCE,C/yCzDEC,IAAJ,CAASrB,GAAT,EAAcgB,IAAd,CAAX;A+yCkGF,AYrDE,AvPAA,AsKAA,AnKAA,WoPAOwmB,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,EwOqDY,CAzCC;A/yCxDb,A+yCkGF,AYrDC,AvPAA,AsKAA,AnKAA,GoPpBM,AvPAA,AsKAA,AnKAA,EoPoBJ,AvPAA,AsKAA,AnKAA,CvkC7CGpnB,C2zCyBC,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,GvkCzBW,CAACK,I+yCkGE,E/yClGR,KAAiB,CAAjB,IAAsB,CAACJ,QAA3B,EAAqC;AACjCN,A+yCuDS,AYVhB,AvPAA,AsKAA,AnKAA,CwOUD,G/yCvDQA,UAAU,CAACY,UAAD,CAAV;AACH;AACJ,A+yCkGD,AYtDA,AvPAA,AsKAA,AnKAA,CvkCvDA,EAaA,M+yCgGSm2U,AYtDA3gI,AvPAAA,AsKAAA,AnKAAA,WwOsDT,AYtDA,AvPAA,AsKAA,AnKAA,CoPAqBtrL,AvPAAA,AsKAAA,AnKAAA,EwOsDE,IYtDvB,AvPAA,AsKAA,AnKAA,EoPA6BzlB,AvPAAA,AsKAAA,AnKAAA,GoPA7B,AvPAA,AsKAA,AnKAA,EoPAkCjB,AvPAAA,AsKAAA,AnKAAA,KoPAlC,AvPAA,AsKAA,AnKAA,EoPAyC8iL,AvPAAA,AsKAAA,AnKAAA,OoPAzC,AvPAA,AsKAA,AnKAA,EoPAkD,AvPAA,AsKAA,AnKAA;AwOuDhD,AYtDA,AvPAA,AsKAA,AnKAA,MoPAI,AvPAA,AsKAA,AnKAA,CoPAC4uB,AvPAAA,AsKAAA,AnKAAA,EwOsDE5uM,KAAK,GAAGxG,AYtDA,AvPAA,AsKAA,AnKAA,CoPAC2E,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,CwOsDA,CYtDsB,AvPAA,AsKAA,AnKAA,CwOsDC;AACrB,AYtDF,AvPAA,AsKAA,AnKAA,MoPAIqZ,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOqO,AvPAAA,AsKAAA,AnKAAA,CwOsDCk8S,AYtDR,AvPAA,AsKAA,AnKAA,EwOsDU,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAX;A/yCjGJ,SAAS5F,IAAT,CAAcrB,GAAd,EAAmBsB,KAAnB,EAA0B;AACtB,A+yCkGA,AYtDF,AvPAA,AsKAA,AnKAA,MoPAI64M,AvPAAA,AsKAAA,AnKAAA,CvkC5CGn6M,C+yCkGDy2U,E/yClGJ,GAAWz2U,C2zC4CD,AvPAA,AsKAA,AnKAA,CoPACmE,AvPAAA,AsKAAA,AnKAAA,CvkC5CX,I+yCkGgB,AYtDN,AvPAA,AsKAA,AnKAA,CwOsDO6kU,AYtDf,AvPAA,AsKAA,AnKAA,EwOsDc,CAAZ,CYtDiB,AvPAA,AsKAA,AnKAA,CoPACxgU,AvPAAA,AsKAAA,AnKAAA,EwOsDEkuU,KYtDK,AvPAA,AsKAA,AnKAA,CoPACvyU,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,CoPA/B,AvPAA,AsKAA,AnKAA,EoPAwC,AvPAA,AsKAA,AnKAA,EwOsDE,CAAC6kU,EAAD,CAAxC,EAA8C;A/yCjG9C,A+yCkGE,AYtDFl8S,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EvkC5CIxrB,C+yCkGD2F,AYtDAkzM,AvPAAA,AsKAAA,AnKAAA,IvkC5CJ,C+yCkGE,E/yClGW74M,C2zC4CD,AvPAA,AsKAA,AnKAA,CoPACupB,AvPAAA,AsKAAA,AnKAAA,GvkC5Cb,G2zC4CmB,AvPAA,AsKAA,AnKAA,CoPACzlB,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,GoPAwBylB,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACzlB,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPA9B,AvPAA,AsKAA,AnKAA,GoPAsCylB,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACzlB,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAc,AvPAA,AsKAA,AnKAA,EoPAxD,AvPAA,AsKAA,AnKAA;AvkC3CH,A+yCkGI,KAFD,MAEO;AACL,AYtDF,AvPAA,AsKAA,AnKAA,SoPAKqZ,AvPAAA,AsKAAA,AnKAAA,CoPAL,AvPAA,AsKAA,AnKAA,IoPAUta,AvPAAA,AsKAAA,AnKAAA,KoPAV,AvPAA,AsKAA,AnKAA,EoPAiB,AvPAA,AsKAA,AnKAA;AvkC5CrB9C,A+yCmGK,AYtDC,AvPAA,AsKAA,AnKAA,IvkC7CF,CAACE,K2zC6CK0lL,AvPAAA,AsKAAA,AnKAAA,IvkC7CV,CAAenmL,E2zC6CE,AvPAA,AsKAA,AnKAA,CvkC7CjB,GAAqB,C2zC6CCmmL,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,IvkC7CI,C2zC6CC,AvPAA,AsKAA,AnKAA,IoPAZ,AvPAA,AsKAA,AnKAA,IoPAoBA,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,CoPACxoK,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAhC,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA,EoPAiD,AvPAA,AsKAA,AnKAA;AvkC5CnD,A+yCmGD,AYtDK03L,AvPAAA,AsKAAA,AnKAAA,OvkC7CCn2M,C2zC6CDm2M,AvPAAA,AsKAAA,AnKAAA,EvkC7CJ,CAAS30M,KAAT,CAAe,E2zC6CA,AvPAA,AsKAA,AnKAA,CoPACsrB,AvPAAA,AsKAAA,AnKAAA,CvkC7ChB,A2zC6Ce,AvPAA,AsKAA,AnKAA,EvkC7CM,A2zC6CFrO,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOta,AvPAAA,AsKAAA,AnKAAA,EvkC7CI7C,G2zC6CC,AvPAA,AsKAA,AnKAA,CoPACmd,AvPAAA,AsKAAA,AnKAAA,CvkC7C5B,A2zC6C2B,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AvkC5CP,A+yCmGA,AYtDM,AvPAA,AsKAA,AnKAA,CvkC/CP,M2zC6CM,AvPAA,AsKAA,AnKAA,MoPEO,AvPAA,AsKAA,AnKAA,IoPAIo3L,AvPAAA,AsKAAA,AnKAAA,UoPAU,AvPAA,AsKAA,AnKAA,CoPACp3L,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA;AoPCxBqO,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACrO,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,GoPAOta,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACsa,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA;AvkC7CRrf,A+yCoGA,AYtDO,AvPAA,AsKAA,AnKAA,OvkC9CA,CAACqC,C+yCoGCs1U,I/yCpGT,GAAgB,M+yCoGhB,CAAuBxyN,E/yCpGvB,I+yCoGA,EAA+B;A/yCnG/BnlH,A+yCoGE,AYtDG,AvPAA,AsKAA,AnKAA,MwOsDC+B,C/yCpGC,A+yCoGL,C/yCpGMO,OAAR,GAAkB,IAAlB;AACAtC,A+yCmGE,AYrDC,AvPAA,AsKAA,AnKAA,GoPVD,AvPAA,AsKAA,AnKAA,GwOgEIyB,C/yCpGC,CAACc,C+yCmGN,AYrDO,AvPAA,AsKAA,AnKAA,EvkC9CT,GAAc,EAAd;AACAvC,A+yCkGE,AYpDEyrB,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOsDEm+S,C/yCpGC,CAACpnU,A+yCkGN,EYpDQ,AvPAA,AsKAA,AnKAA,CoPACwD,AvPAAA,AsKAAA,AnKAAA,CvkC9CX,E2zC8CU,AvPAA,AsKAA,AnKAA,CvkC9CK,A2zC8CX,AvPAA,AsKAA,AnKAA,EvkC9CJ,C2zC8CkBjB,AvPAAA,AsKAAA,AnKAAA,KoPAd,AvPAA,AsKAA,AnKAA;AvkC7CJ/E,A+yCiGE,AYnDC,AvPAA,AsKAA,AnKAA,MwOsDGomS,C/yCpGC,CAAC3jS,E+yCoGE,GAAG,CAHX,C/yCjGF,GAAkB,EAAlB,EAAsB;A+yCqGpBhB,AYtDD,AvPAA,AsKAA,AnKAA,EwOsDCA,GAAG,GAAG0jH,MAAM,KAAK,GAAX,GAAiB,CAAjB,GAAqB,CAA3B;A/yCpGFnlH,OAAO,CAAC0C,QAAR,GAAmB,EAAnB;A+yCsGE,AYtDF,AvPAA,AsKAA,AnKAA,OwOsDOX,CAAC,CYtDC80M,AvPAAA,AsKAAA,AnKAAA,EwOsDE,CAAT,EAAY90M,CAAC,GAAGN,CYtDlB,AvPAA,AsKAA,AnKAA,CoPAoBwH,AvPAAA,AsKAAA,AnKAAA,CwOsDlB,AYtDF,AvPAA,AsKAA,AnKAA,EwOsDuB,AYtDA6G,AvPAAA,AsKAAA,AnKAAA,CoPAvB,AvPAA,AsKAA,AnKAA,CwOsDyB/N,CAAvB,AYtDwB,AvPAA,AsKAA,AnKAA,EwOsDE;A/yCpG5B,A+yCqGI,AYtDF,AvPAA,AsKAA,AnKAA,MoPAIkH,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOsDCpB,C/yCrGClF,E2zC+CE,AvPAA,AsKAA,AnKAA,EvkC/CX,A+yCqGa,EYtDX,AvPAA,AsKAA,AnKAA,CvkC/Cc,A+yCqGAtB,C/yCrGE,A2zC+CD,AvPAA,AsKAA,AnKAA,KwOsDT,EYtDgByO,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,CwOsDSqnU,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAhC,EAAiD;AAC/C+hU,AYtDJ,AvPAA,AsKAA,AnKAA,MwOsDIA,EAAE,AYtDAp+T,AvPAAA,AsKAAA,AnKAAA,GwOsDGqsD,AYtDA,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAZ,AvPAA,AsKAA,AnKAA,CwOsDe,CAAChwD,KAAK,EAAN,CAAX;A/yCpGN7H,A+yCqGMomS,AYvDJ,AvPAA,AsKAA,AnKAA,MwOuDIA,C/yCrGC,CAACxjS,A2zC+CAwlB,AvPAAA,AsKAAA,AnKAAA,EvkC/CR,A+yCqGU,CYtDC,AvPAA,AsKAA,AnKAA,EvkC/CEzlB,A+yCqGAyjS,CYtDC,AvPAA,AsKAA,AnKAA,EoPDZ,AvPAA,AsKAA,AnKAA,CvkC9CF,A+yCqGiB,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;A/yCpGNlG,A+yCqGK,KAHD,E/yClGG,CAAC6C,G+yCqGG,Q/yCrGX,GAAsBF,IAAtB;AACA3C,A+yCqGM43U,AYtDJ,AvPAA,AsKAA,AnKAA,MwOsDIA,C/yCrGC,CAAC90U,G2zC+CG4f,AvPAAA,AsKAAA,AnKAAA,CvkC/CX,E2zC+CE,AvPAA,AsKAA,AnKAA,CvkC/Ca/f,A2zC+CA+lB,AvPAAA,AsKAAA,AnKAAA,CwOsDC,AYtDd,AvPAA,AsKAA,AnKAA,CwOsDe,CYtDC,AvPAA,AsKAA,AnKAA,CvkC/ClB,A+yCqGgB,EAAK0tT,sBAAL,EAA6BU,OAA7B,CAAV;A/yCpGN92U,A+yCqGK,AYtDD,AvPAA,AsKAA,AnKAA,OvkC/CG,CAAC+C,A2zC+CA,AvPAA,AsKAA,AnKAA,CoPACyI,AvPAAA,AsKAAA,AnKAAA,EvkC/CT,C2zC+CY,AvPAA,AsKAA,AnKAA,CoPACkd,AvPAAA,AsKAAA,AnKAAA,CvkC/CC/lB,A2zC+CA,AvPAA,AsKAA,AnKAA,CoPACW,AvPAAA,AsKAAA,AnKAAA,GvkC/Cf,C2zC+CY,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAkB,AvPAA,AsKAA,AnKAA;AvkC9CtBtD,A+yCqGG,AYtDGwL,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,CvkC/CC,CAACxI,C2zC+CC,AvPAA,AsKAA,AnKAA,CoPAC0lB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACplB,AvPAAA,AsKAAA,AnKAAA,IoPAH,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAc,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,CvkC/CN,GAAyBX,IAAzB;AACA3C,A2zC+CMooB,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,CvkC/CC,CAACnlB,C2zC+CC,AvPAA,AsKAA,AnKAA,CoPACjB,AvPAAA,AsKAAA,AnKAAA,IoPAJ,AvPAA,AsKAA,AnKAA,CoPAS0mB,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,UvkC/CN,GAA6B/lB,IAA7B;AACA3C,A+yCqGE,AYtDG,AvPAA,AsKAA,AnKAA,OvkC/CE,CAACkD,C+yCqGCmK,G/yCrGT,GAAe1K,A+yCqGA,CAACs3E,G/yCrGhB,S+yCqGS,CAAoBmsN,IAApB,CAAP;A/yCpGFpmS,A+yCqGC,AYtDE,AvPAA,AsKAA,AnKAA,OvkC/CI,CAACmD,eAAR,GAA0BR,IAA1B;AACA3C,OAAO,CAACoD,mBAAR,GAA8BT,IAA9B;A+yCsGA,AYtDEmN,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACjK,AvPAAA,AsKAAA,AnKAAA,KwOsDKgyU,EYtDP,AvPAA,AsKAA,AnKAA,CoPAUn1T,AvPAAA,AsKAAA,AnKAAA,GoPAV,AvPAA,AsKAA,AnKAA,oBwOsDF,GAAsC;A/yCpGtC1iB,A+yCqGE,AYtDAiJ,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACpD,AvPAAA,AsKAAA,AnKAAA,EwOsDE+jU,C/yCrGC,CAACvmU,A+yCqGN,EAAQ+iS,CYtDR,AvPAA,AsKAA,AnKAA,CoPAU1jR,AvPAAA,AsKAAA,AnKAAA,EwOsDV,CYtDA,AvPAA,AsKAA,AnKAA,CwOsDco1T,C/yCrGhB,E+yCqGE,C/yCrGkB,C+yCqGCC,GAAnB,M/yCrG4Bz0U,IAAV,EAAgB;AAAE,A+yCsGpCsmU,AYtDA,AvPAA,AsKAA,AnKAA,EwOsDAA,EAAE,GAAG/xQ,E/yCtGsC,A2zCgDpCzvC,AvPAAA,AsKAAA,AnKAAA,EvkChD6B,C2zCgDpC,AvPAA,AsKAA,AnKAA,CwOsDW,CAACvgB,KAAD,CAAX;A/yCtG+C,A+yCuG/Cu+R,AYtDD,AvPAA,AsKAA,AnKAA,CvkCjDD,C+yCuGEA,IAAI,GAAG,CAAP,CAHoC,CAG1B;;A/yCrGZpmS,A+yCuGE,AYtDF,AvPAA,AsKAA,AnKAA,MwOsDM4pU,C/yCvGC,CAACrmU,A+yCuGA,CYtDCy3M,AvPAAA,AsKAAA,AnKAAA,IwOsDI,AYtDb,AvPAA,AsKAA,AnKAA,CoPAe94M,AvPAAA,AsKAAA,AnKAAA,CvkCjDf,C+yCuGE,E/yCvGgB,A+yCuGA,CYtDlB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA,OvkCjDMoB,IAAV,EAAgB;AAC9B,A+yCuGAs0U,AYtDF,AvPAA,AsKAA,AnKAA,IwOsDEA,I/yCvGM,C2zCiDD11U,AvPAAA,AsKAAA,AnKAAA,GvkCjDK5B,E+yCuGA,AYtDA,AvPAA,AsKAA,AnKAA,CwOsDC,AYtDA4B,AvPAAA,AsKAAA,AnKAAA,EvkCjDL,A+yCuGI,C/yCvGM,C+yCuGDk0U,CYtDC,AvPAA,AsKAA,AnKAA,CoPAC/0U,AvPAAA,AsKAAA,AnKAAA,MoPAN,AvPAA,AsKAA,AnKAA,GoPAe,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,SwOsDY,EAA6By1U,OAA7B,CAAV,C/yCvGM,CAAN;AACH,A+yCuGE,AYtDF,AvPAA,AsKAA,AnKAA,CvkCnDD;;AAIA92U,A+yCuGE,AYtDF,AvPAA,AsKAA,AnKAA,OvkCjDO,CAACwD,C+yCuGCqE,AYtDA4vM,AvPAAA,AsKAAA,AnKAAA,EvkCjDT,GAAc,A+yCuGA,GAAGp2M,AYtDjB,AvPAA,AsKAA,AnKAA,CoPAmBqnB,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA,EwOsDpB,EAAuB,C/yCvGC;AAAE,A+yCwGxBkhT,AYtDF,AvPAA,AsKAA,AnKAA,IwOsDEA,EAAE,G/yCxG6B,A+yCwG1B/xQ,AYtDAnvC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EvkClDkB,E2zCkDd,AvPAA,AsKAA,AnKAA,CwOsDC,CAAC7gB,EYtDP,AvPAA,AsKAA,AnKAA,GwOsDY,CYtDC6gB,AvPAAA,AsKAAA,AnKAAA,CwOsDP,AYtDQ,AvPAA,AsKAA,AnKAA,CwOsDnB,IYtDwB,AvPAA,AsKAA,AnKAA,EoPAnB,AvPAA,AsKAA,AnKAA,GoPAwB,AvPAA,AsKAA,AnKAA,IoPAxB,AvPAA,AsKAA,AnKAA,GoPA+B,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,CoPAvC,AvPAA,AsKAA,AnKAA;AvkClDsC,A2zCmDvC,AvPAA,AsKAA,AnKAA,CvkCnDD;A+yC0GI,QAAI,CAACyuT,UAAU,CAACvN,EAAD,CAAf,EAAqB;A/yCzGzB5pU,A+yC0GM,AYtDN,AvPAA,AsKAA,AnKAA,MoPAM+J,AvPAAA,AsKAAA,AnKAAA,CvkCpDC,CAACtG,C2zCoDC,AvPAA,AsKAA,AnKAA,GoPAG+W,AvPAAA,AsKAAA,AnKAAA,CvkCpDZ,GAAgB,A2zCoDA,AvPAA,AsKAA,AnKAA,IoPAItS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIsS,AvPAAA,AsKAAA,AnKAAA,CvkCpDC9W,GAAV,A2zCoDa,AvPAA,AsKAA,AnKAA,EvkCpDE,C2zCoDCoE,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACiC,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAS7B,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,CoPAhC,AvPAA,AsKAA,AnKAA;AvkCnDI,A+yC0GC,Q/yC1GK,IAAI5H,KAAJ,CAAU,gCAAV,CAAN;AACH,A2zCoDD,AvPAA,AsKAA,AnKAA,CvkCtDA,K2zCsDM26M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGzgM,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAItS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIJ,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACiK,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPASyI,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAGtS,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPA3B,AvPAA,AsKAA,AnKAA;AwOuDIk+R,IAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;A/yC1GJlG,A+yC2GG,AYtDH,AvPAA,AsKAA,AnKAA,MoPAMg3M,AvPAAA,AsKAAA,AnKAAA,CvkCrDC,CAACrzM,I2zCqDI,AvPAA,AsKAA,AnKAA,CvkCrDZ,E2zCqDe6K,AvPAAA,AsKAAA,AnKAAA,CvkCrDC,A2zCqDA,AvPAA,AsKAA,AnKAA,IoPAItG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIJ,AvPAAA,AsKAAA,AnKAAA,GvkCrDE,C2zCqDE,AvPAA,AsKAA,AnKAA,CoPAC0S,AvPAAA,AsKAAA,AnKAAA,IoPAL,AvPAA,AsKAA,AnKAA,CoPAUtS,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,IoPAeJ,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC6S,AvPAAA,AsKAAA,AnKAAA,KoPAL,AvPAA,AsKAA,AnKAA,CoPAW7S,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACiT,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAS7S,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsG,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA,CoPAxC,AvPAA,AsKAA,AnKAA;AvkCrD6B,SAAO,CAAP;AAAW,A+yC6GtC,AYtDF,AvPAA,AsKAA,AnKAA,CvkCvDA,K+yC6GM43R,AYtDAnvF,AvPAAA,AsKAAA,AnKAAA,IwOsDI,EYtDE,AvPAA,AsKAA,AnKAA,CwOsDC,EYtDEzoM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAItG,AvPAAA,AsKAAA,AnKAAA,CwOsDd,AYtDe,AvPAA,AsKAA,AnKAA,IwOsDI0hU,AYtDA9hU,AvPAAA,AsKAAA,AnKAAA,EwOsDE,EYtDE,AvPAA,AsKAA,AnKAA,CoPAC0S,AvPAAA,AsKAAA,AnKAAA,EwOsDE,EYtDP,AvPAA,AsKAA,AnKAA,CwOsDvB,AYtDiCtS,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,CwOsDY,GYtDGJ,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC4S,AvPAAA,AsKAAA,AnKAAA,KoPAL,AvPAA,AsKAA,AnKAA,CoPAW5S,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACiT,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAS7S,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,GoPAyCsG,AvPAAA,AsKAAA,AnKAAA,CoPAlE,AvPAA,AsKAA,AnKAA;AwOuDIopU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A9yCrSJ,A8yCsSG,AYtDH,AvPAA,AsKAA,AnKAA,GwOiCsC,CAqBlC,EYtDEt+T,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGy/B,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,IoPAI/vC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,GoPAQ,AvPAA,AsKAA,AnKAA,CoPACJ,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC0Q,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAS,AvPAA,AsKAA,AnKAA,CoPACtQ,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa+vC,AvPAAA,AsKAAA,AnKAAA,QoPAb,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,GoPAkCnwC,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC0Q,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAStQ,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,EoPAY+vC,AvPAAA,AsKAAA,AnKAAA,QoPAZ,AvPAA,AsKAA,AnKAA,CoPA/D,AvPAA,AsKAA,AnKAA;AtkC/OA;AACA,A0zCgPA,AvPAA,AsKAA,AnKAA,SoPASi/J,AvPAAA,AsKAAA,AnKAAA,GoPAT,AvPAA,AsKAA,AnKAA,CoPAaC,AvPAAA,AsKAAA,AnKAAA,MoPAb,AvPAA,AsKAA,AnKAA,EoPAqBz/G,AvPAAA,AsKAAA,AnKAAA,KoPArB,AvPAA,AsKAA,AnKAA,EoPA4B0/G,AvPAAA,AsKAAA,AnKAAA,IoPA5B,AvPAA,AsKAA,AnKAA,EoPAkCC,AvPAAA,AsKAAA,AnKAAA,MoPAlC,AvPAA,AsKAA,AnKAA,EoPA0C,AvPAA,AsKAA,AnKAA;AtkC/O1C,A8yCsSE,AYtDA,AvPAA,AsKAA,AnKAA,MwOsDI+uF,EYtDE9uF,AvPAAA,AsKAAA,AnKAAA,EwOsDE,AYtDA,AvPAA,AsKAA,AnKAA,GoPAGF,AvPAAA,AsKAAA,AnKAAA,CwOsDC,GYtDG,AvPAA,AsKAA,AnKAA,CoPACD,AvPAAA,AsKAAA,AnKAAA,EwOsDhB,EAAoB,EYtDE,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA;AtkC/OF,A8yCsSI,AYvDF,AvPAA,AsKAA,AnKAA,QoPCMjsI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,CwOsDC79D,EYtDE+pM,AvPAAA,AsKAAA,AnKAAA,IwOsDI,AYtDA,AvPAA,AsKAA,AnKAA,CwOsDCn9H,AYtDA+gI,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC7D,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CwOsDX,AYtDM,AvPAA,AsKAA,AnKAA,CwOsDcivF,AYvD7B,AvPAA,AsKAA,AnKAA,IwOuDS,CAAP;A9yCrSJ,A8yCsSG,AYxDD,AvPAA,AsKAA,AnKAA,QoPEM7uF,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACrsI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGosI,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,IoPAY5/G,AvPAAA,AsKAAA,AnKAAA,KoPFvB,AvPAA,AsKAA,AnKAA;AtkC7OF,A0zCgPE,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,CoPAC2/G,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGC,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAkBF,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACnsI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGqsI,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,CoPAxB,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;AtkC/OF,A8yCsSEugI,AYtDD,AvPAA,AsKAA,AnKAA,EwOsDCA,GAAG,GAAG,CAAC1xC,IAAI,GAAG,OAAP,IAAkB,EAAnB,IAAyB,MAA/B;A9yCrSF,A8yCsSE2xC,EAAAA,GAAG,GAAG,CAAC3xC,IAAI,GAAG,OAAP,GAAiB,IAAlB,IAA0B,MAAhC;A9yCrSF,A8yCsSE,AYtDF,AvPAA,AsKAA,AnKAA,SwOsDS/4R,AYtDAmqM,AvPAAA,AsKAAA,AnKAAA,MwOsDM,CAACv9H,EYtDhB,AvPAA,AsKAA,AnKAA,CoPAmBk9H,AvPAAA,AsKAAA,AnKAAA,MoPAnB,AvPAA,AsKAA,AnKAA,EoPA2Bz/G,AvPAAA,AsKAAA,AnKAAA,CwOsDlB,CAAoBogP,GAApB,AYtDT,AvPAA,AsKAA,AnKAA,EwOsDkCC,AYtDA,AvPAA,AsKAA,AnKAA,GwOsDzB,CAAP;A9yCrSF,A8yCsSC,AYtDC,AvPAA,AsKAA,AnKAA,SoPAO7gI,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASz/G,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,EoPAgB+/G,AvPAAA,AsKAAA,AnKAAA,QoPAhB,AvPAA,AsKAA,AnKAA,EoPA0Bz1E,AvPAAA,AsKAAA,AnKAAA,QoPA1B,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA;AtkC/OF,A0zCgPC,AvPAA,AsKAA,AnKAA;AtkC/OD,A8yCsSA,SAASg2M,oBAAT,GAAgC;A9yCrShC,A8yCsSE,AYvDF,AvPAA,AsKAA,AnKAA,MwOuDMpO,EAAJ,CYvDOlyH,AvPAAA,AsKAAA,AnKAAA,CwOuDC1iM,EAAR,GYvDF,AvPAA,AsKAA,AnKAA,CoPAgBmiM,AvPAAA,AsKAAA,AnKAAA,MoPAhB,AvPAA,AsKAA,AnKAA,EoPAwBz/G,AvPAAA,AsKAAA,AnKAAA,KoPAxB,AvPAA,AsKAA,AnKAA,EoPA+B,AvPAA,AsKAA,AnKAA;AtkC9O/B,A8yCsSEkyO,AYvDA,AvPAA,AsKAA,AnKAA,EwOuDAA,EAAE,EYvDEpvT,AvPAAA,AsKAAA,AnKAAA,CwOuDCq9C,GYvDG,AvPAA,AsKAA,AnKAA,GwOuDG,AYvDA/vD,AvPAAA,AsKAAA,AnKAAA,CwOuDC0uE,GYvDG,AvPAA,AsKAA,AnKAA,CoPACh8D,AvPAAA,AsKAAA,AnKAAA,IoPAL,AvPAA,AsKAA,AnKAA,CoPAU28L,AvPAAA,AsKAAA,AnKAAA,CwOuDhB,CAAkBtvM,IYvDI,AvPAA,AsKAA,AnKAA,CwOuDC,AYvDA,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CwOuDtB,AYvDM,AvPAA,AsKAA,AnKAA,CwOuDX,AYvDA,AvPAA,AsKAA,AnKAA;AtkC9OF,A8yCsSEmN,AYvDA,AvPAA,AsKAA,AnKAA,EwOuDAA,EAAE,GAAG3H,EYvDE6pM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOuDC,AYvDAC,AvPAAA,AsKAAA,AnKAAA,CwOuDCl9H,KYvDF,AvPAA,AsKAA,AnKAA,EoPASyd,AvPAAA,AsKAAA,AnKAAA,KwOuDd,AYvDK,AvPAA,AsKAA,AnKAA,CwOuDekyO,CYvDC3uH,AvPAAA,AsKAAA,AnKAAA,CwOuDrB,CAAL,CAH8B,CAGA,CYvDC,AvPAA,AsKAA,AnKAA,CoPACzgM,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,CoPArB,AvPAA,AsKAA,AnKAA,EoPA6BzQ,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACyQ,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,CoPAhC,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA;AtkC9OF,A0zC+OC,AvPAA,AsKAA,AnKAA;AtkC9OD,A8yCsSE,MAAIovT,EAAE,KAAK,IAAX,EAAiB;A9yCrSnB,A8yCsSI,AYxDJ,AvPAA,AsKAA,AnKAA,QwOwDQ/xQ,CYxDC8/I,AvPAAA,AsKAAA,AnKAAA,KwOwDK,CAACnhI,AYxDf,AvPAA,AsKAA,AnKAA,CoPAgB2gI,AvPAAA,AsKAAA,AnKAAA,MoPAhB,AvPAA,AsKAA,AnKAA,EoPAwBz/G,AvPAAA,AsKAAA,AnKAAA,CwOwDhB,CAAkB7vF,GYxD1B,AvPAA,AsKAA,AnKAA,EwOwDQ,AYxDuBowC,AvPAAA,AsKAAA,AnKAAA,MwOwDM,EYxDrC,AvPAA,AsKAA,AnKAA,EwOwDI,AYxDqC,AvPAA,AsKAA,AnKAA,EwOwDE;A9yCrS3C,A8yCsSM2/R,AYxDJ,AvPAA,AsKAA,AnKAA,MwOwDIA,GYxDG1gI,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,GwOwDG,CAAC,EAAD,AYxDJ,AvPAA,AsKAA,AnKAA,EwOwDSi/H,AYxDA1+O,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,EoPAgBl/E,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACy/B,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPAnB,AvPAA,AsKAA,AnKAA,EwOwDI,AYxD2Bz/B,AvPAAA,AsKAAA,AnKAAA,EwOwDEs+T,CYxDC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI7+R,AvPAAA,AsKAAA,AnKAAA,CwOwDnC,CAAV,MYxDwC,AvPAA,AsKAA,AnKAA,CoPAlC,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA;AtkC7OF,A8yCsSK,AYxDJ,AvPAA,AsKAA,AnKAA;AtkC7OD;AACA,A8yCsSI,AYzDJ,AvPAA,AsKAA,AnKAA,MwOyDMpwC,GYzDG+vM,AvPAAA,AsKAAA,AnKAAA,EwOyDL,OYzDJ,AvPAA,AsKAA,AnKAA,CoPAmBT,AvPAAA,AsKAAA,AnKAAA,MoPAnB,AvPAA,AsKAA,AnKAA,EoPA2Bz/G,AvPAAA,AsKAAA,AnKAAA,KoPA3B,AvPAA,AsKAA,AnKAA,EoPAkCiqC,AvPAAA,AsKAAA,AnKAAA,QoPAlC,AvPAA,AsKAA,AnKAA,EoPA4C,AvPAA,AsKAA,AnKAA;AtkC5O5C,A8yCsSIioM,AYzDF,AvPAA,AsKAA,AnKAA,IwOyDEA,EAAE,GAAG+N,AYzDAzgI,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASz/G,AvPAAA,AsKAAA,AnKAAA,CwOyDC,CAAC,GAAD,AYzDV,AvPAA,AsKAA,AnKAA,CwOyDR,CYzDwBs/G,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACr1E,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPAtB,AvPAA,AsKAA,AnKAA,EoPAkCs1E,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACt1E,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPAxC,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA;AtkC5OF,A0zC6OC,AvPAA,AsKAA,AnKAA;AtkC5OD,A8yCsSI,QAAI,CAACioM,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC2N,iBAAiB,CAAC3N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5C,EAAgE;A9yCrSpE,A8yCsSMohQ,AYzDN,AvPAA,AsKAA,AnKAA,MwOyDMA,GYzDG//H,AvPAAA,AsKAAA,AnKAAA,IoPAT,AvPAA,AsKAA,AnKAA,CoPAcV,AvPAAA,AsKAAA,AnKAAA,EwOyDE,CAAC,EAAD,CYzDhB,AvPAA,AsKAA,AnKAA,CwOyDqBi/H,CYzDCt+H,AvPAAA,AsKAAA,AnKAAA,MoPAtB,AvPAA,AsKAA,AnKAA,EoPA8BlgM,AvPAAA,AsKAAA,AnKAAA,KoPA9B,AvPAA,AsKAA,AnKAA,EoPAqCw/L,AvPAAA,AsKAAA,AnKAAA,IoPArC,AvPAA,AsKAA,AnKAA,EwOyDgB,AYzD2BC,AvPAAA,AsKAAA,AnKAAA,EwOyDEy/H,IYzD7C,AvPAA,AsKAA,AnKAA,EoPAmD,AvPAA,AsKAA,AnKAA,CwOyDnC,CAAV;A9yCrSN,A8yCsSK,AYzDH,AvPAA,AsKAA,AnKAA,QoPAMx/H,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGF,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACD,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA;AtkC5OF,A0zC4OE,AvPAA,AsKAA,AnKAA,QoPCMjsI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGksI,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC4D,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC7D,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CoPDf,AvPAA,AsKAA,AnKAA;AtkC3OF,A8yCsSIniM,AY3DF,AvPAA,AsKAA,AnKAA,IwO2DEA,EAAE,EYzDE+iM,AvPAAA,AsKAAA,AnKAAA,CwOyDC6xH,CYzDC,AvPAA,AsKAA,AnKAA,CwOyDN,EYzDS9xH,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAV,AvPAA,AsKAA,AnKAA,GoPAiBV,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACU,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CoPArB,AvPAA,AsKAA,AnKAA,GoPAgC,AvPAA,AsKAA,AnKAA,CoPACR,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGpsI,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,IoPAY,AvPAA,AsKAA,AnKAA,CoPFvD,AvPAA,AsKAA,AnKAA;AtkC1OF,A8yCsSG,AYzDD,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,CoPACmsI,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACU,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACT,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGS,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,IoPAYngM,AvPAAA,AsKAAA,AnKAAA,KoPAlB,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAiCy/L,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACU,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC7sI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG6sI,AvPAAA,AsKAAA,AnKAAA,EoPAN,AvPAA,AsKAA,AnKAA,IoPAYngM,AvPAAA,AsKAAA,AnKAAA,KoPAlB,AvPAA,AsKAA,AnKAA,CoPAvC,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;AtkC5OF,A0zC6OC,AvPAA,AsKAA,AnKAA;AtkC5OD,A8yCsSE,SAAO/P,KAAK,GAAGxG,MAAf,EAAuB;A9yCrSzB,A8yCsSIuoU,AYzDJ,AvPAA,AsKAA,AnKAA,IwOyDIA,EAAE,GAAG/xQ,AYzDAmgJ,AvPAAA,AsKAAA,AnKAAA,MwOyDM,CAACxhI,GYzDhB,AvPAA,AsKAA,AnKAA,CoPAoB2gI,AvPAAA,AsKAAA,AnKAAA,MwOyDX,AYzDT,AvPAA,AsKAA,AnKAA,CwOyD2BtvM,CYzDCiwM,AvPAAA,AsKAAA,AnKAAA,IwOyDnB,CAAL,CYzDJ,AvPAA,AsKAA,AnKAA,EoPAoClgM,AvPAAA,AsKAAA,AnKAAA,KoPApC,AvPAA,AsKAA,AnKAA,EoPA2C,AvPAA,AsKAA,AnKAA;AtkC5O3C,A0zC6OE,AvPAA,AsKAA,AnKAA,SoPAOigM,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACV,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASW,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,EoPAiBlgM,AvPAAA,AsKAAA,AnKAAA,KoPAjB,AvPAA,AsKAA,AnKAA,EoPAwB6/L,AvPAAA,AsKAAA,AnKAAA,QoPAxB,AvPAA,AsKAA,AnKAA,EoPAkCz1E,AvPAAA,AsKAAA,AnKAAA,QoPAlC,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AtkC5OF,A8yCsSI,AYzDH,AvPAA,AsKAA,AnKAA,QwOyDO,CAACw1M,gBAAgB,CAAC5N,EAAD,CAArB,EAA2B;A9yCrS/B,A8yCsSM;A9yCrSN,A8yCsSK,AY1DL,AvPAA,AsKAA,AnKAA,SoPAS3xH,AvPAAA,AsKAAA,AnKAAA,OoPAT,AvPAA,AsKAA,AnKAA,CoPAiBd,AvPAAA,AsKAAA,AnKAAA,MoPAjB,AvPAA,AsKAA,AnKAA,EoPAyBW,AvPAAA,AsKAAA,AnKAAA,MoPAzB,AvPAA,AsKAA,AnKAA,EoPAiClgM,AvPAAA,AsKAAA,AnKAAA,KoPAjC,AvPAA,AsKAA,AnKAA,EoPAwC,AvPAA,AsKAA,AnKAA;AtkC3OxC,A0zC4OE,AvPAA,AsKAA,AnKAA,QoPAM4C,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG1S,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC0S,AvPAAA,AsKAAA,AnKAAA,IoPAL,AvPAA,AsKAA,AnKAA,CoPAU28L,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AtkC3OF,A8yCsSI,AY1DF,AvPAA,AsKAA,AnKAA,MwO0DItvM,GY1DGgwM,AvPAAA,AsKAAA,AnKAAA,EwO0DL,EY1DS,AvPAA,AsKAA,AnKAA,CoPACV,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASW,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,EoPAiBlgM,AvPAAA,AsKAAA,AnKAAA,KoPAjB,AvPAA,AsKAA,AnKAA,EoPAwBqjM,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACzgM,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,CoPA7B,AvPAA,AsKAA,AnKAA,EoPAqCzQ,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACyQ,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,CoPAxC,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AtkC3OF,A8yCsSIxF,AY1DH,AvPAA,AsKAA,AnKAA,IwO0DGA,EAAE,IAAI3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAN,CARqB,CAQU;A9yCrSnC;AACA,A8yCsSI,AY3DJ,AvPAA,AsKAA,AnKAA,QwO2DQA,CY3DC1xH,AvPAAA,AsKAAA,AnKAAA,CwO2DC,KAAK,CY3Df,AvPAA,AsKAA,AnKAA,CoPAiBf,AvPAAA,AsKAAA,AnKAAA,EwO2Db,EAAiB,EY3DrB,AvPAA,AsKAA,AnKAA,EoPAyBW,AvPAAA,AsKAAA,AnKAAA,MoPAzB,AvPAA,AsKAA,AnKAA,EoPAiClgM,AvPAAA,AsKAAA,AnKAAA,KoPAjC,AvPAA,AsKAA,AnKAA,EoPAwCqgC,AvPAAA,AsKAAA,AnKAAA,QoPAxC,AvPAA,AsKAA,AnKAA,EoPAkD,AvPAA,AsKAA,AnKAA;AtkC1OlD,A8yCsSMjjC,AY3DJ,AvPAA,AsKAA,AnKAA,MwO2DIA,EAAE,CY3DC6iM,AvPAAA,AsKAAA,AnKAAA,EwO2DE7iM,EAAE,AY3DA,AvPAA,AsKAA,AnKAA,CwO2DCqsB,AY3DA81K,AvPAAA,AsKAAA,AnKAAA,MwO2DH,AY3DE,AvPAA,AsKAA,AnKAA,CwO2DQ,CAAV,AY3DWW,AvPAAA,AsKAAA,AnKAAA,EwO2DE9iM,EAAE,CAAC3T,CY3Dd,AvPAA,AsKAA,AnKAA,EoPAiBuW,AvPAAA,AsKAAA,AnKAAA,GwO2DN,EY3DX,AvPAA,AsKAA,AnKAA,CwO2DuB,CAAzB,AY3D0BY,AvPAAA,AsKAAA,AnKAAA,CwO2D/B,EY3DkC,AvPAA,AsKAA,AnKAA,CoPACy/B,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPA3B,AvPAA,AsKAA,AnKAA,EoPAuCz/B,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIy/B,AvPAAA,AsKAAA,AnKAAA,QoPAL,AvPAA,AsKAA,AnKAA,CoPA1C,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AtkC1OF,A0zC2OC,AvPAA,AsKAA,AnKAA;AtkC1OD,A8yCsSM,UAAI4f,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;A9yCrS7C,A8yCsSQ+vU,AY5DR,AvPAA,AsKAA,AnKAA,QwO4DQA,CY5DCz/H,AvPAAA,AsKAAA,AnKAAA,SwO4DS,CAAC,AY5DnB,AvPAA,AsKAA,AnKAA,CoPAoBhB,AvPAAA,AsKAAA,AnKAAA,CwO4DF,EAAKi/H,GY5DvB,AvPAA,AsKAA,AnKAA,EoPA4Bt+H,AvPAAA,AsKAAA,AnKAAA,MoPA5B,AvPAA,AsKAA,AnKAA,EoPAoClgM,AvPAAA,AsKAAA,AnKAAA,KoPApC,AvPAA,AsKAA,AnKAA,EoPA2C+pH,AvPAAA,AsKAAA,AnKAAA,EwO4DzB,EAA6Bm1M,IY5D/C,AvPAA,AsKAA,AnKAA,EoPAqD,AvPAA,AsKAA,AnKAA,CwO4DnC,CAAV;A9yCrSR,A8yCsSO,AY5DL,AvPAA,AsKAA,AnKAA,SoPAOj/H,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACV,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASW,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,EoPAiBlgM,AvPAAA,AsKAAA,AnKAAA,KoPAjB,AvPAA,AsKAA,AnKAA,EoPAwBo/L,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACr1E,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPA9B,AvPAA,AsKAA,AnKAA,EoPA0Cs1E,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACt1E,AvPAAA,AsKAAA,AnKAAA,QoPAD,AvPAA,AsKAA,AnKAA,CoPAhD,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AtkCzOF,A0zC0OC,AvPAA,AsKAA,AnKAA;AtkCzOD,A8yCsSM,QAAE95H,KAAF;A9yCrSN,A8yCsSM+hU,AY5DN,AvPAA,AsKAA,AnKAA,MwO4DMA,EAAE,CY5DCxxH,AvPAAA,AsKAAA,AnKAAA,EwO4DEu/H,KY5DX,AvPAA,AsKAA,AnKAA,CoPAiBt/H,AvPAAA,AsKAAA,AnKAAA,IoPAjB,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA,CwO4DC,CAAC,GAAD,CAAlB;A9yCrSN,A0zC0OE,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAE,AvPAA,AsKAA,AnKAA,IoPAIxgI,AvPAAA,AsKAAA,AnKAAA,IoPAJ,AvPAA,AsKAA,AnKAA,CoPASwgI,AvPAAA,AsKAAA,AnKAAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAeC,AvPAAA,AsKAAA,AnKAAA,QoPAf,AvPAA,AsKAA,AnKAA,KoPA4B,AvPAA,AsKAA,AnKAA,CoPA9B,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA;AtkCzOF,A8yCsSM,AY5DL,AvPAA,AsKAA,AnKAA,UwO4DS,CAACsxH,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC4N,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA3C,EAA+D;A9yCrSrE,A8yCsSQohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A9yCrSR,A8yCsSO,AY7DP,AvPAA,AsKAA,AnKAA,SoPASv+H,AvPAAA,AsKAAA,AnKAAA,UoPAT,AvPAA,AsKAA,AnKAA,CoPAoBF,AvPAAA,AsKAAA,AnKAAA,IoPApB,AvPAA,AsKAA,AnKAA,EoPA0B,AvPAA,AsKAA,AnKAA;AtkCxO1B,A0zCyOE,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAE,AvPAA,AsKAA,AnKAA,IoPAIxgI,AvPAAA,AsKAAA,AnKAAA,IoPAJ,AvPAA,AsKAA,AnKAA,CoPASwgI,AvPAAA,AsKAAA,AnKAAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAeG,AvPAAA,AsKAAA,AnKAAA,WoPAf,AvPAA,AsKAA,AnKAA,KoPA+B,AvPAA,AsKAA,AnKAA,CoPAjC,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA;AtkCxOF,A8yCsSMxjM,AY7DL,AvPAA,AsKAA,AnKAA,MwO6DKA,EAAE,IAAI40T,EAAN;A9yCrSN,A8yCsSK;A9yCrSL,A8yCsSG,AY7DH,AvPAA,AsKAA,AnKAA,SoPAS1nU,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,CoPAgBwmB,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA;AtkCxOnB,A0zCyOE,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,GoPAYtf,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,CoPACsf,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,GoPAaA,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,GoPAiB,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPA7B,AvPAA,AsKAA,AnKAA,GoPAmC,AvPAA,AsKAA,AnKAA,EoPA1C,AvPAA,AsKAA,AnKAA;AtkCxOF,A8yCsSE,AY7DD,AvPAA,AsKAA,AnKAA,SwO6DQ1T,EAAP;A9yCrSF,A8yCsSC,AY5DD,AvPAA,AsKAA,AnKAA;AtkCzOA,A0zC0OA,AvPAA,AsKAA,AnKAA;AtkCzOA,A8yCsSA,AY5DA,AvPAA,AsKAA,AnKAA,SwO4DSijU,aAAT,GAAyB;A9yCrSzB,A8yCsSE,AY5DF,AvPAA,AsKAA,AnKAA,MwO4DMpqU,KAAJ,EAAW+7T,EAAX;A9yCrSF,A8yCsSE/7T,AY5DF,AvPAA,AsKAA,AnKAA,EwO4DEA,KAAK,GAAGhG,KAAK,EAAb;A9yCrSF,A0zC0OA,AvPAA,AsKAA,AnKAA;AtkCzOA,A8yCsSE,AY5DF,AvPAA,AsKAA,AnKAA,SwO4DSA,KAAK,GAAGxG,MAAf,EAAuB;A9yCrSzB,A8yCsSIuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;A9yCrSJ;AACA,A8yCsSI,AY9DJ,AvPAA,AsKAA,AnKAA,QwO8DQ+hU,CY9DC1uH,AvPAAA,AsKAAA,AnKAAA,CwO8DC,KAAK,IAAX,AY9DJ,AvPAA,AsKAA,AnKAA,CoPAqB33K,AvPAAA,AsKAAA,AnKAAA,CwO8DA,IY9DrB,AvPAA,AsKAA,AnKAA,EoPA4Bt7B,AvPAAA,AsKAAA,AnKAAA,GoPA5B,AvPAA,AsKAA,AnKAA,EoPAiCE,AvPAAA,AsKAAA,AnKAAA,GoPAjC,AvPAA,AsKAA,AnKAA,EoPAsC,AvPAA,AsKAA,AnKAA;AtkCvOtC,A8yCsSM,AY9DJ,AvPAA,AsKAA,AnKAA,MoPAIswM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGl1K,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA;AtkCvOF,A8yCsSM17B,AY/DJ,AvPAA,AsKAA,AnKAA,MwO+DIA,AY9DA6wM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GwO8DG,AY9DAn1K,AvPAAA,AsKAAA,AnKAAA,GwO8DG11B,EY9DE,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CwO8DV,AY/DJ,AvPAA,AsKAA,AnKAA;AtkCtOF,A8yCsSM,AYhEJ,AvPAA,AsKAA,AnKAA,MoPEI8qM,AvPAAA,AsKAAA,AnKAAA,IoPFJ,AvPAA,AsKAA,AnKAA,GwOgEWq/H,oBAAoB,EAA3B;A9yCrSN,A8yCsSK;A9yCrSL,A0zCwOE,AvPAA,AsKAA,AnKAA,MoPAIt/H,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGD,AvPAAA,AsKAAA,AnKAAA,EoPAT,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA;AtkCvOf,A8yCsSI,AY9DAE,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,IwO8DI6+H,AY9DA,AvPAA,AsKAA,AnKAA,GoPAG9+H,AvPAAA,AsKAAA,AnKAAA,EoPAP,AvPAA,AsKAA,AnKAA,WwO8DoB,CAACkxH,EAAD,CAApB,EAA0B;A9yCrS9B,A8yCsSM,AY9DFlxH,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EwO8DE7wM,CY9DC4wM,AvPAAA,AsKAAA,AnKAAA,EoPAL,AvPAA,AsKAA,AnKAA,EwO8DE;A9yCrSN,A8yCsSK,AY9DDA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CwO4DA,CY5DE,AvPAA,AsKAA,AnKAA,GoPAGE,AvPAAA,AsKAAA,AnKAAA,EwO8DE,EY9DP,AvPAA,AsKAA,AnKAA;AtkCvOJ,A8yCsSM,AY9DH,AvPAA,AsKAA,AnKAA;AtkCvOH,A8yCsSK;A9yCrSL,A8yCsSG,AY9DDA,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAGD,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGD,AvPAAA,AsKAAA,AnKAAA,EoPAZ,AvPAA,AsKAA,AnKAA;AtkCvOF,A0zCwOE,AvPAA,AsKAA,AnKAA,SoPAOE,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAIxwM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGF,AvPAAA,AsKAAA,AnKAAA,GoPAd,AvPAA,AsKAA,AnKAA,GoPAoB,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAME,AvPAAA,AsKAAA,AnKAAA,GoPAN,AvPAA,AsKAA,AnKAA,CoPApB,AvPAA,AsKAA,AnKAA,GoPAiC,AvPAA,AsKAA,AnKAA,CoPACswM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG3wM,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACG,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPASH,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACK,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPASswM,AvPAAA,AsKAAA,AnKAAA,EoPAT,AvPAA,AsKAA,AnKAA,EoPAaxwM,AvPAAA,AsKAAA,AnKAAA,GoPAb,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,EoPA4BE,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGwwM,AvPAAA,AsKAAA,AnKAAA,IoPAlC,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,EoPA+CF,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGE,AvPAAA,AsKAAA,AnKAAA,IoPApD,AvPAA,AsKAA,AnKAA,CoPAxC,AvPAA,AsKAA,AnKAA;AtkCvOF,A8yCsSE,AY9DD,AvPAA,AsKAA,AnKAA,SwO8DQ9gJ,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAAP;A9yCrSF,A8yCsSC;A9yCrSD,A0zCwOA,AvPAA,AsKAA,AnKAA,SoPAS4F,AvPAAA,AsKAAA,AnKAAA,UoPAT,AvPAA,AsKAA,AnKAA,CoPAqBib,AvPAAA,AsKAAA,AnKAAA,CoPArB,AvPAA,AsKAA,AnKAA,EoPAwB,AvPAA,AsKAA,AnKAA;AtkCvOxB,A8yCsSA,AY9DE,AvPAA,AsKAA,AnKAA,SwO8DOwvT,AY9DA,AvPAA,AsKAA,AnKAA,OoPAOxvT,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,KoPAa,AvPAA,AsKAA,AnKAA,CwO8DtB,GAA0B,MY9DxB,AvPAA,AsKAA,AnKAA;AtkCvOF,A8yCsSE,AY9DD,AvPAA,AsKAA,AnKAA,MwO8DK7a,KAAJ,EAAWmH,EAAX,EAAegN,IAAf;A9yCrSF,A8yCsSEnU,EAAAA,KAAK,GAAGhG,KAAR,CAFwB,CAET;A9yCrSjB,A0zCwOA,AvPAA,AsKAA,AnKAA,MoPAM+wM,AvPAAA,AsKAAA,AnKAAA,UoPAU,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,YoPAnB,AvPAA,AsKAA,AnKAA;AtkCvOA,A8yCsSE5jM,EAAAA,EAAE,GAAG6iD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAA7B,GAAoCmwU,oBAAoB,EAAxD,GAA6DC,aAAa,EAA/E,CAJwB,CAI2D;A9yCrSrF,A8yCsSE,AY/DF,AvPAA,AsKAA,AnKAA,SoPASpuI,AvPAAA,AsKAAA,AnKAAA,OoPAT,AvPAA,AsKAA,AnKAA,CoPAkBhqJ,AvPAAA,AsKAAA,AnKAAA,MoPAlB,AvPAA,AsKAA,AnKAA,EoPA0Bg5J,AvPAAA,AsKAAA,AnKAAA,MoPA1B,AvPAA,AsKAA,AnKAA,EoPAkC7C,AvPAAA,AsKAAA,AnKAAA,GoPAlC,AvPAA,AsKAA,AnKAA,EoPAuC,AvPAA,AsKAA,AnKAA;AtkCtOvC,A0zCuOEA,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,EoPAb,AvPAA,AsKAA,AnKAA;AtkCtOF,A8yCsSE,AY/DA6C,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,IwO+DI7jM,EAAE,AY/DA,AvPAA,AsKAA,AnKAA,CwO+DC3T,EY/DEa,AvPAAA,AsKAAA,AnKAAA,IwO+DL,CY/DU,AvPAA,AsKAA,AnKAA,CoPAC22M,AvPAAA,AsKAAA,AnKAAA,GwO+DG,CAAlB,EAAqB,AY/DP,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,IoPAiB,AvPAA,AsKAA,AnKAA,EoPA1B,AvPAA,AsKAA,AnKAA;AtkCtOF,A8yCsSI72L,AY/DF,AvPAA,AsKAA,AnKAA,IwO+DEA,IAAI,AY/DA9K,AvPAAA,AsKAAA,AnKAAA,GwO+DGg+T,AY/DA,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAZ,AvPAA,AsKAA,AnKAA,UwO+DE;A9yCrSJ,A8yCsSG,AYhED,AvPAA,AsKAA,AnKAA,GwO8DA,KY7DMrwU,AvPAAA,AsKAAA,AnKAAA,CwO+DC,EY/DE,AvPAA,AsKAA,AnKAA,EwO+DE4yU,CY/DC,AvPAA,AsKAA,AnKAA,EoPDZ,AvPAA,AsKAA,AnKAA,KwOgEmB,CAAC/+M,cAAT,CAAwB1jH,EAAxB,CAAJ,EAAiC;A9yCrS1C,A8yCsSI,AYjEF,AvPAA,AsKAA,AnKAA,QoPEM8jM,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPFb,AvPAA,AsKAA,AnKAA;AtkCpOF,A8yCsSI92L,AYlEF,AvPAA,AsKAA,AnKAA,IwOkEEA,IAAI,AY/DAy3K,AvPAAA,AsKAAA,AnKAAA,GwO+DG07I,AY/DA,AvPAA,AsKAA,AnKAA,GoPAGn/H,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC39J,AvPAAA,AsKAAA,AnKAAA,KwO+Dd,KY/DU,AvPAA,AsKAA,AnKAA,IoPAkBA,AvPAAA,AsKAAA,AnKAAA,UoPH9B,AvPAA,AsKAA,AnKAA;AtkCnOF,A8yCsSG,AY/DDn2C,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,CwO4DO,IY5DF,AvPAA,AsKAA,AnKAA,CoPAC29C,AvPAAA,AsKAAA,AnKAAA,CwO+DC,IAAI7qC,CY/DN,AvPAA,AsKAA,AnKAA,CwO+DQ,AY/Db,AvPAA,AsKAA,AnKAA,CoPAcnP,AvPAAA,AsKAAA,AnKAAA,IwO+DI,GY/DlB,AvPAA,AsKAA,AnKAA,CoPAsB,AvPAA,AsKAA,AnKAA,CoPAC6H,AvPAAA,AsKAAA,AnKAAA,CwO+DhB,AY/De,AvPAA,AsKAA,AnKAA,EwO+DI,AY/DA3L,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,KoPAU,AvPAA,AsKAA,AnKAA;AtkCtOlC,A8yCsSIigB,AY/DA,AvPAA,AsKAA,AnKAA,IwO+DAA,IAAI,AY/DAtU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwO+DE0nU,EY/DE,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA,QwO+Df;A9yCrSJ,A8yCsSG,AY/DCl+T,AvPAAA,AsKAAA,AnKAAA,GwO6DK,CY7DLA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAClV,AvPAAA,AsKAAA,AnKAAA,CwO+DC,GY/DL,AvPAA,AsKAA,AnKAA,CwO+DSgT,AY/DA6jM,AvPAAA,AsKAAA,AnKAAA,EwO+DE,IY/DI,AvPAA,AsKAA,AnKAA,CwO+DC,AY/DA92M,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,IwO+DA,CY/Dc62M,AvPAAA,AsKAAA,AnKAAA,GwO+DG5jM,EAAE,KAAK,AY/DxB,AvPAA,AsKAA,AnKAA,GoPA2B,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPA5B,AvPAA,AsKAA,AnKAA,EwO+DJ,CY/DoC,AvPAA,AsKAA,AnKAA,CwO+DC,AY/D1C,AvPAA,AsKAA,AnKAA;AtkCtOJ,A8yCsSIgN,AY/DAnd,AvPAAA,AsKAAA,AnKAAA,IwO+DAmd,AY/DAnd,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwO+DC,AY/DA7C,AvPAAA,AsKAAA,AnKAAA,GwO+DGgzU,CY/DP,AvPAA,AsKAA,AnKAA,CoPAStnU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGD,AvPAAA,AsKAAA,AnKAAA,UoPAU,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CwO+DvB,AY/Da,AvPAA,AsKAA,AnKAA,GoPAgBA,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,GoPAoB6pH,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC7pH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI,AvPAA,AsKAA,AnKAA,IoPAJ,AvPAA,AsKAA,AnKAA,EoPAUsoM,AvPAAA,AsKAAA,AnKAAA,GoPAV,AvPAA,AsKAA,AnKAA,CoPAtC,AvPAA,AsKAA,AnKAA;AtkCtOJ,A8yCsSG,AY/DC,AvPAA,AsKAA,AnKAA,GwO6DK,EY7DJH,AvPAAA,AsKAAA,AnKAAA,IwO+DI,UY/DU,AvPAA,AsKAA,AnKAA,CoPACnoM,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,IoPAqB,AvPAA,AsKAA,AnKAA,EoPAtB,AvPAA,AsKAA,AnKAA,EoPA0B7H,AvPAAA,AsKAAA,AnKAAA,OoPA1B,AvPAA,AsKAA,AnKAA,CoPAkC6iB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIowL,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACpwL,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,GoPAU,AvPAA,AsKAA,AnKAA,CoPAjD,AvPAA,AsKAA,AnKAA;AtkCtOJ,A8yCsSI1G,AY/DD,AvPAA,AsKAA,AnKAA,GoPLD,AvPAA,AsKAA,AnKAA,CwOoEEA,IAAI,GAAGkzT,eAAP;A9yCrSJ,A8yCsSG,AY/DD,AvPAA,AsKAA,AnKAA,SoPAOrwU,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxD,AvPAAA,AsKAAA,AnKAAA,MoPAJ,AvPAA,AsKAA,AnKAA,KoPAe,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,GoPAmB,AvPAA,AsKAA,AnKAA,IoPAnB,AvPAA,AsKAA,AnKAA,GoPA0Bu5M,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPACnhB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC50L,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAMqS,AvPAAA,AsKAAA,AnKAAA,GoPAN,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAgBpS,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACof,AvPAAA,AsKAAA,AnKAAA,IoPAP,AvPAA,AsKAA,AnKAA,CoPAY40L,AvPAAA,AsKAAA,AnKAAA,IoPAZ,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPAzC,AvPAA,AsKAA,AnKAA;AtkCtOF,A0zCuOC,AvPAA,AsKAA,AnKAA;AtkCtOD,A8yCsSE,SAAO;A9yCrST,A8yCsSI92L,AYhEJ,AvPAA,AsKAA,AnKAA,IwOgEIA,EYhEEm5L,AvPAAA,AsKAAA,AnKAAA,EwOgEE,EAAEn5L,IADD,CY/DM,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC++D,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI9sE,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,KoPAU,AvPAA,AsKAA,AnKAA,CoPAC8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9sE,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,IoPAS8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAf,AvPAA,AsKAA,AnKAA,KoPAwB9sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPA7B,AvPAA,AsKAA,AnKAA,GoPAoC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPArC,AvPAA,AsKAA,AnKAA,GoPAyC,AvPAA,AsKAA,AnKAA,CoPAC8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9sE,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,IoPASA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAf,AvPAA,AsKAA,AnKAA,KoPAwB8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPA7B,AvPAA,AsKAA,AnKAA,GoPAoC,AvPAA,AsKAA,AnKAA,CoPApC,AvPAA,AsKAA,AnKAA,GoPAwC,AvPAA,AsKAA,AnKAA,CoPAC9sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,YoPAY4jE,AvPAAA,AsKAAA,AnKAAA,IoPAb,AvPAA,AsKAA,AnKAA,GoPAoB,AvPAA,AsKAA,AnKAA,CoPAC5jE,AvPAAA,AsKAAA,AnKAAA,CoPArB,AvPAA,AsKAA,AnKAA,GoPAyBA,AvPAAA,AsKAAA,AnKAAA,CoPA7B,AvPAA,AsKAA,AnKAA,EoPAgC8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,YoPAYlJ,AvPAAA,AsKAAA,AnKAAA,IoPAb,AvPAA,AsKAA,AnKAA,GoPAoB,AvPAA,AsKAA,AnKAA,CoPACkJ,AvPAAA,AsKAAA,AnKAAA,CoPArB,AvPAA,AsKAA,AnKAA,GoPAyBA,AvPAAA,AsKAAA,AnKAAA,CoPA9D,AvPAA,AsKAA,AnKAA,MoPAqEA,AvPAAA,AsKAAA,AnKAAA,CoPArE,AvPAA,AsKAA,AnKAA,IoPA0E9sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKA,AvPAAA,AsKAAA,AnKAAA,CoPAhF,AvPAA,AsKAA,AnKAA,GoPAoF,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPArF,AvPAA,AsKAA,AnKAA,GoPAyFA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKA,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA,IoPAW8sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKA,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,GoPAqB,AvPAA,AsKAA,AnKAA,CoPArB,AvPAA,AsKAA,AnKAA,GoPAyB,AvPAA,AsKAA,AnKAA,CoPA/N,AvPAA,AsKAA,AnKAA;AtkCrOA,A8yCsSIh8E,IAAAA,KAAK,EAAEiQ,EAFF;A9yCnST,A8yCsSInH,IAAAA,KAAK,EAAEA,KAHF;A9yClST,A8yCsSI6F,IAAAA,GAAG,EAAE7L;A9yCrST,A8yCiSS,AY7DT,AvPAA,AsKAA,AnKAA,GwO6DE,GY7DIwwC,AvPAAA,AsKAAA,AnKAAA,UoPAU,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACwH,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASg5J,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,KoPAoBh5J,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACx+C,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA,KoPAkB,AvPAA,AsKAA,AnKAA,CoPAlB,AvPAA,AsKAA,AnKAA,GoPAsB03M,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPACl5J,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAYg5J,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAlB,AvPAA,AsKAA,AnKAA,CoPA9B,AvPAA,AsKAA,AnKAA,GoPAuDG,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPACn5J,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,EoPASg5J,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,EoPAiBh5J,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACx+C,AvPAAA,AsKAAA,AnKAAA,MoPAxB,AvPAA,AsKAA,AnKAA,CoPAtG,AvPAA,AsKAA,AnKAA;AtkCnOA,A8yCsSC,EAAC;A9yCrSF,A0zCoOA,AvPAA,AsKAA,AnKAA,MoPAM03M,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxhF,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,EoPAQ0hF,AvPAAA,AsKAAA,AnKAAA,KoPAR,AvPAA,AsKAA,AnKAA,KoPAkB,AvPAA,AsKAA,AnKAA,UoPAUhwM,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa6G,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA;AtkCnOnD,A0zCoOE,AvPAA,AsKAA,AnKAA,SoPAOqrM,AvPAAA,AsKAAA,AnKAAA,SoPAS,AvPAA,AsKAA,AnKAA,CoPAC5jF,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACtuH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,EoPAWsuH,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACznH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,GoPAgCmpM,AvPAAA,AsKAAA,AnKAAA,KoPAvC,AvPAA,AsKAA,AnKAA;AtkCnOF,A8yCsSA,AYlEC,AvPAA,AsKAA,AnKAA,CoPFD,AvPAA,AsKAA,AnKAA,QwOoESk/H,cAAT,GAA0B;A9yCrS1B,A8yCsSE,MAAItqU,KAAK,GAAGhG,KAAZ;A9yCrSF,A8yCqSE,AYjEF,AvPAA,AsKAA,AnKAA,MwOkEMu+R,AYlEAptF,AvPAAA,AsKAAA,AnKAAA,IwOkEI,GAAGnhJ,CYlEC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAChY,AvPAAA,AsKAAA,AnKAAA,CwOkEC,CAAC22B,IYlEH,AvPAA,AsKAA,AnKAA,EoPASqiI,AvPAAA,AsKAAA,AnKAAA,IwOkEb,CAAkBhxM,CYlEd,AvPAA,AsKAA,AnKAA,EoPAiBoI,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,CwOkEJ,CADX,GYjEsC,AvPAA,AsKAA,AnKAA;AtkCnOxC,A8yCoSE,AYhEA4oM,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,IwOkEIu/H,EYlEE,AvPAA,AsKAA,AnKAA,CoPACp2U,AvPAAA,AsKAAA,AnKAAA,EwOgEP,EYhEA,AvPAA,AsKAA,AnKAA,CoPAY,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,EoPDsC,AvPAA,AsKAA,AnKAA,CoPCtB,AvPAA,AsKAA,AnKAA;AtkCnOlB,A8yCmSE,MAGIq2U,GAAG,GAAGxgR,MAAM,CAAChwD,KAAD,CAHhB;A9yClSF,A8yCkSE,AY9DA,AvPAA,AsKAA,AnKAA,MwOkEIywU,GAJJ,AY9DO,AvPAA,AsKAA,AnKAA,UoPAUrvU,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa6G,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA;AtkCnOzB,A8yCiSE,AY7DE,AvPAA,AsKAA,AnKAA,MwOkEEyoU,EYlEE7qU,AvPAAA,AsKAAA,AnKAAA,CwO6DN,AY7DE,AvPAA,AsKAA,AnKAA;AtkCnOJ,A8yCgSE,AY7DE,AvPAA,AsKAA,AnKAA,MwOmEE8qU,EYlEEhqU,AvPAAA,AsKAAA,AnKAAA,CwO4DN,AY5DO,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPDR,AvPAA,AsKAA,AnKAA;AtkClOJ,A0zCkOI,AvPAA,AsKAA,AnKAA,QoPEIzM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPFT,AvPAA,AsKAA,AnKAA;AtkCjOJ,A8yCsSE,UAAQqkS,IAAR;A9yCrSF,A8yCsSI,AYlEA,AvPAA,AsKAA,AnKAA,WoPAO53R,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,IoPAW,AvPAA,AsKAA,AnKAA,EoPAEzM,AvPAAA,AsKAAA,AnKAAA,CoPAF,AvPAA,AsKAA,AnKAA,GoPAMkO,AvPAAA,AsKAAA,AnKAAA,CoPAxB,AvPAA,AsKAA,AnKAA,EoPA2B,AvPAA,AsKAA,AnKAA;AtkCnO/B,A8yCsSI,AYlEEvC,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOkEE,CYlECmyC,AvPAAA,AsKAAA,AnKAAA,GwOkEN,CAFF,CAEa,CYlEC,AvPAA,AsKAA,AnKAA,CoPAC99C,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA;AtkCnON,A0zCoOMyM,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG2sM,AvPAAA,AsKAAA,AnKAAA,SoPAS,AvPAA,AsKAA,AnKAA,CoPACztM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACzE,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAF,AvPAA,AsKAA,AnKAA,EoPAOyE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACoC,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AtkCnON,A8yCsSI,AYlEC,AvPAA,AsKAA,AnKAA,SwOkEI,IAAL,CAJF,CAIa;A9yCrSf;AACA,A8yCsSI,AYlEA,AvPAA,AsKAA,AnKAA,SwOkEK,EYlEEtB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOkER,CANF,CAMa,AYlEAqqM,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC92M,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAjB,AvPAA,AsKAA,AnKAA;AtkCnOJ,A0zCoOG,AvPAA,AsKAA,AnKAA,GoPXD,AvPAA,AsKAA,AnKAA;AtkCxNF,A8yCsSI,AYlEH,AvPAA,AsKAA,AnKAA,CoPfD,AvPAA,AsKAA,AnKAA,QwOiFS,IAAL,CARF,CAQa;A9yCrSf;AACA,A8yCsSI,AYlEJ,AvPAA,AsKAA,AnKAA,SwOkES,AYlEA4/H,AvPAAA,AsKAAA,AnKAAA,IwOkEL,CAVF,CAUa,EYlEf,AvPAA,AsKAA,AnKAA,CoPAmBj5G,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AtkCnOtB,A0zCoOE,AvPAA,AsKAA,AnKAA,SoPAOjb,AvPAAA,AsKAAA,AnKAAA,UoPAU,AvPAA,AsKAA,AnKAA,CoPACib,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA,GoPAgBA,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,GoPAoB,AvPAA,AsKAA,AnKAA,MoPAMA,AvPAAA,AsKAAA,AnKAAA,CoPAjC,AvPAA,AsKAA,AnKAA;AtkCnOF,A8yCsSI,AYlEH,AvPAA,AsKAA,AnKAA,SwOkEQ,IAAL,CAZF,CAYa;A9yCrSf;AACA,A8yCsSI,AYlEJ,AvPAA,AsKAA,AnKAA,SwOkES,AYlEAywG,AvPAAA,AsKAAA,AnKAAA,IwOkEL,CAdF,CAca,EYlEf,AvPAA,AsKAA,AnKAA,CoPAmB+/E,AvPAAA,AsKAAA,AnKAAA,KoPAnB,AvPAA,AsKAA,AnKAA,EoPA0Bz6F,AvPAAA,AsKAAA,AnKAAA,OoPA1B,AvPAA,AsKAA,AnKAA,EoPAmC,AvPAA,AsKAA,AnKAA;AtkCnOnC,A0zCoOE,AvPAA,AsKAA,AnKAA,MoPAI06F,AvPAAA,AsKAAA,AnKAAA,GoPAJ,AvPAA,AsKAA,AnKAA;AtkCnOF,A8yCsSI,AYlEF,AvPAA,AsKAA,AnKAA,SwOkEO,AYlEA14M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOkEN,CAhBF,AYlDY,AvPAA,AsKAA,AnKAA,CwOkEC;A9yCrSf,A0zCoOI,AvPAA,AsKAA,AnKAA,QoPAI04M,AvPAAA,AsKAAA,AnKAAA,GoPAJ,AvPAA,AsKAA,AnKAA,EoPASz4M,AvPAAA,AsKAAA,AnKAAA,YoPAY,AvPAA,AsKAA,AnKAA,CoPACy4M,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA;AtkCnOb,A8yCsSI,AYlEAA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,EwOkEE,CYlEC34M,AvPAAA,AsKAAA,AnKAAA,GwOkEN,CAlBF,CAkBa,KYlEK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,OoPAOi+G,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,CoPACh+G,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAY04M,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAzB,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAiCD,AvPAAA,AsKAAA,AnKAAA,KoPAjC,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA;AtkCnOJ,A0zCoOG,AvPAA,AsKAA,AnKAA,GoPHD,AvPAA,AsKAA,AnKAA;AtkChOF,A8yCsSI,AYlEH,AvPAA,AsKAA,AnKAA,SwOkEQ,IAAL,CApBF,CAoBa;A9yCrSf;AACA,A8yCsSI,AYlEJ,AvPAA,AsKAA,AnKAA,SwOkES,AYlEA9b,AvPAAA,AsKAAA,AnKAAA,IwOkEL,CAtBF,CAsBa,AYlEf,AvPAA,AsKAA,AnKAA,CoPAiB10K,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,EoPAoB,AvPAA,AsKAA,AnKAA;AtkCnOpB,A0zCoOE,AvPAA,AsKAA,AnKAA,OoPAK,AvPAA,AsKAA,AnKAA,IoPAIxgB,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOmX,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAUtd,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,EoPAiBN,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGK,AvPAAA,AsKAAA,AnKAAA,SoPAS,AvPAA,AsKAA,AnKAA,CoPACT,AvPAAA,AsKAAA,AnKAAA,MoPAtC,AvPAA,AsKAA,AnKAA,EoPA8CU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGN,AvPAAA,AsKAAA,AnKAAA,GoPAlD,AvPAA,AsKAA,AnKAA,EoPAuD,AvPAA,AsKAA,AnKAA,EoPAEM,AvPAAA,AsKAAA,AnKAAA,CoPAzD,AvPAA,AsKAA,AnKAA,EoPA4D,AvPAA,AsKAA,AnKAA;AtkCnO9D,A8yCsSI,AYlEAmG,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGpG,AvPAAA,AsKAAA,AnKAAA,CwOkEC,IAAL,IYlEa,AvPAA,AsKAA,AnKAA,CoPACC,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AtkCnOJ,A8yCsSM;A9yCrSN,A8yCsSM,AYlEF,AvPAA,AsKAA,AnKAA,QwOkEI8F,CYlECwX,AvPAAA,AsKAAA,AnKAAA,CoPAL,AvPAA,AsKAA,AnKAA,GwOkEE,CYlEQnX,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA;AwOmEX,AYlEAwgB,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACrJ,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,GwOkEO,AYlEAnX,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACmX,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA;ArkC3XN,A6yC8bQ2C,AYlEH,AvPAA,AsKAA,AnKAA,QwOkEGA,IAAI,EAAEszT,eADD;A7yC5bb,A6yC8bQvwU,AYlEL,AvPAA,AsKAA,AnKAA,QwOkEKA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAFF;A7yC3bb,A6yC8bQv4R,QAAAA,KAAK,EAAEA,KAHF;A7yC1bb,A6yC8bQ6F,AYlEN,AvPAA,AsKAA,AnKAA,QwOkEMA,CYlECgV,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,CwOkES,EAAE7gB;A7yC7bb,A6yCyba,AY7DZ,AvPAA,AsKAA,AnKAA,OwO6DK;A7yCxbN,AyzC6XA,AvPAA,AsKAA,AnKAA;ArkC5XA,A6yC8bI,AYjEJ,AvPAA,AsKAA,AnKAA;ArkC5XA,A6yC8bMuwU,AYjEN,AvPAA,AsKAA,AnKAA,MwOiEMA,KAAK,GAAGvgR,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAR,CADF,CACwC;A7yC7b5C,AyzC6XA,AvPAA,AsKAA,AnKAA;ArkC5XA,A6yC8bM,UAAIuwU,KAAK,KAAK,IAAd,EAAoB;A7yC7b1B,A6yC8bQ,gBAAQhyC,IAAR;A7yC7bR,A6yC8bU,AYnEV,AvPAA,AsKAA,AnKAA,SoPAShrF,AvPAAA,AsKAAA,AnKAAA,MwOmEM,AYnEf,AvPAA,AsKAA,AnKAA,CoPAiBl5M,AvPAAA,AsKAAA,AnKAAA,GwOmEP,CADF,CACa,AYnErB,AvPAA,AsKAA,AnKAA,EoPAwBwL,AvPAAA,AsKAAA,AnKAAA,CoPAxB,AvPAA,AsKAA,AnKAA,EoPA2B,AvPAA,AsKAA,AnKAA;ArkC1X3B,AyzC2XE,AvPAA,AsKAA,AnKAA,MoPAI3L,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA;ArkC1XF,A6yC8bU,AYpER,AvPAA,AsKAA,AnKAA,MoPCIkO,AvPAAA,AsKAAA,AnKAAA,CoPDJ,AvPAA,AsKAA,AnKAA,QwOoEa,IAAL,CAHF,CAGa;A7yC7brB,AyzCyXE,AvPAA,AsKAA,AnKAA,MoPEIgE,AvPAAA,AsKAAA,AnKAAA,CoPFJ,AvPAA,AsKAA,AnKAA;ArkCxXF,A6yC8bU,AYtER,AvPAA,AsKAA,AnKAA,MoPGIhM,AvPAAA,AsKAAA,AnKAAA,GoPHJ,AvPAA,AsKAA,AnKAA,MwOsEa,IAAL,CALF,CAKa;A7yC7brB,AyzCuXE,AvPAA,AsKAA,AnKAA,MoPIIE,AvPAAA,AsKAAA,AnKAAA,GoPJJ,AvPAA,AsKAA,AnKAA;ArkCtXF,A6yC8bU,eAAK,IAAL,CAPF,CAOa;A7yC7brB,AyzC2XE,AvPAA,AsKAA,AnKAA,MoPAIjG,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAK+N,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/N,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACb,AvPAAA,AsKAAA,AnKAAA,MoPAf,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,EoPAiC,AvPAA,AsKAA,AnKAA;ArkC1XnC,A6yC8bU,AYnEN,AvPAA,AsKAA,AnKAA,QoPAIqM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,EwOmEE,EYnEX,AvPAA,AsKAA,AnKAA,EwOmEM,AYnES,AvPAA,AsKAA,AnKAA,CwO0DX,CASa;A7yC7brB,AyzC2XM,AvPAA,AsKAA,AnKAA;ArkC1XN,A6yC8bU,AYnEJ,AvPAA,AsKAA,AnKAA,WoPAKuG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOmEG,AYnEA/R,AvPAAA,AsKAAA,AnKAAA,IwOmEL,CAXF,AYxDY,AvPAA,AsKAA,AnKAA,CwOmEC,AYnEAH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,EoPAmBA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGkO,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,KoPAUgE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,IoPAaA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKA,AvPAAA,AsKAAA,AnKAAA,CoPA7B,AvPAA,AsKAA,AnKAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAoDA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/R,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAEH,AvPAAA,AsKAAA,AnKAAA,CoPAH,AvPAA,AsKAA,AnKAA,CoPA7D,AvPAA,AsKAA,AnKAA,CoPAmE,AvPAA,AsKAA,AnKAA;ArkC1XzE;AACA,A6yC8bU,AYnEJkG,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGE,AvPAAA,AsKAAA,AnKAAA,GwOmEG,AYnEA,AvPAA,AsKAA,AnKAA,GoPAG8L,AvPAAA,AsKAAA,AnKAAA,CwOmER,AYnEJ,AvPAA,AsKAA,AnKAA,CwOsDE,AY1DW,AvPAA,AsKAA,AnKAA,CwOuEE,AYnEA,AvPAA,AsKAA,AnKAA;ArkC1XrB;AACA,A6yC8bU,AYnEJ,AvPAA,AsKAA,AnKAA,aoPAOlS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOmEC,EYnEEkO,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,CwOmEI,CAfF,AYpDY,AvPAA,AsKAA,AnKAA,CwOmEC,CYnEClO,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA;ArkC1XzB,AyzC2XQkS,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/R,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,CoPDiB,AvPAA,AsKAA,AnKAA,CoPCH,AvPAA,AsKAA,AnKAA;ArkC1XtB,A6yC8bU,eAAK,IAAL,CAjBF,CAiBa;A7yC7brB,AyzC2XQ,AvPAA,AsKAA,AnKAA,YoPAIkS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;ArkC1XvB,A6yC8bU,AYnEA,AvPAA,AsKAA,AnKAA,coPAIA,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,GoPAGhM,AvPAAA,AsKAAA,AnKAAA,CwOmER,EYnEA,AvPAA,AsKAA,AnKAA,EoPAaA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGgM,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA;ArkC1XvB,A6yC8bY,AYnEF,AvPAA,AsKAA,AnKAA,coPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9L,AvPAAA,AsKAAA,AnKAAA,GoPAR,AvPAA,AsKAA,AnKAA,EoPAaA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG8L,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA;ArkC1XvB,A6yC8bYpM,AYnEH,AvPAA,AsKAA,AnKAA,YwOmEGA,KAAK,IAAI,CAAT;A7yC7bZ,A6yC8bY,AYnEL,AvPAA,AsKAA,AnKAA,mBwOmEY;A7yC7bnB,A6yC8bcma,AYnET,AvPAA,AsKAA,AnKAA,KoPdD,AvPAA,AsKAA,AnKAA,MoPcO,AvPAA,AsKAA,AnKAA,GwOmEGA,IAAI,EAAEszT,eADD;A7yC5bnB,A6yC8bcvwU,AYnER,AvPAA,AsKAA,AnKAA,cwOmEQA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,IAA4B/4R,MAAM,CAAC4sE,YAAP,CAAoBm+P,KAApB,CAF9B;A7yC3bnB,A6yC8bcvqU,AYnER,AvPAA,AsKAA,AnKAA,WoPAKoG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEEpG,CYnECH,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACxL,AvPAAA,AsKAAA,AnKAAA,EwOmEE,EAAE2L,CYnEC,AvPAA,AsKAA,AnKAA,CoPAC9L,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CwOgEG,AYhEb,AvPAA,AsKAA,AnKAA,EoPAsBA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGkO,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,KoPAUgE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,IoPAaA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKA,AvPAAA,AsKAAA,AnKAAA,CoPA7B,AvPAA,AsKAA,AnKAA,CoPAtB,AvPAA,AsKAA,AnKAA,EoPAuDA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGvG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACxL,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAEH,AvPAAA,AsKAAA,AnKAAA,CoPAH,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPA5D,AvPAA,AsKAA,AnKAA,CoPAyE,AvPAA,AsKAA,AnKAA;ArkC1X/E,A6yC8bc2R,cAAAA,GAAG,EAAE7L;A7yC7bnB,A6yCybmB,AY9DbI,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGE,AvPAAA,AsKAAA,AnKAAA,CwO8DA,EY9DG,AvPAA,AsKAA,AnKAA,GoPAG8L,AvPAAA,AsKAAA,AnKAAA,CoPAZ,AvPAA,AsKAA,AnKAA,CoPJK,AvPAA,AsKAA,AnKAA,CoPIU,AvPAA,AsKAA,AnKAA;ArkC1XrB;AACA,A6yC8bU,AYnEJ,AvPAA,AsKAA,AnKAA,aoPAOlS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOmEC,EYnEEkO,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,CwOmEI,CA7BF,AYtCY,AvPAA,AsKAA,AnKAA,CwOmEC,CYnEClO,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA;ArkC1XzB,AyzC2XQkS,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGvG,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACxL,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CoPDiB,AvPAA,AsKAA,AnKAA,CoPCA,AvPAA,AsKAA,AnKAA;ArkC1XzB,A6yC8bU,eAAK,IAAL;A7yC7bV,A6yC8bY,AYnEJ,AvPAA,AsKAA,AnKAA,YoPAIkS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;ArkC1XvB,A6yC8bYpM,AYnEF,AvPAA,AsKAA,AnKAA,YwOmEEA,EYnEEoM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEE,CYnEChM,AvPAAA,AsKAAA,AnKAAA,GwOmEG,AYnEX,AvPAA,AsKAA,AnKAA,CwOmEE,CAFF,AYjEaA,AvPAAA,AsKAAA,AnKAAA,CwOmEC,EYnEE,AvPAA,AsKAA,AnKAA,GoPAGgM,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA;ArkC1XvB,AyzC2XU,AvPAA,AsKAA,AnKAA,coPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9L,AvPAAA,AsKAAA,AnKAAA,GoPAR,AvPAA,AsKAA,AnKAA,EoPAaA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG8L,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA;ArkC1XvB,A6yC8bY,AYnEH,AvPAA,AsKAA,AnKAA,gBwOmEO4jD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;A7yC7bnD,A6yC8bc,AYnEP,AvPAA,AsKAA,AnKAA,gBwOmESA,KAAF;A7yC7bd,A6yC8ba,AYnER,AvPAA,AsKAA,AnKAA;ArkC1XL,AyzC2XG,AvPAA,AsKAA,AnKAA;ArkC1XH,A6yC8bY,mBAAO;A7yC7bnB,A6yC8bcma,AYnEZ,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,CoPAC/Z,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CwOmEK+Z,CYnEC7Z,AvPAAA,AsKAAA,AnKAAA,GwOmEG,AYnET,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CwOmEkBmtU,eADD;A7yC5bnB,A6yC8bcvwU,AYnEb,AvPAA,AsKAA,AnKAA,cwOmEaA,KAAK,EAAE8yD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAFF;A7yC3bnB,A6yC8bcgG,cAAAA,KAAK,EAAEA,KAHF;A7yC1bnB,A6yC8bc6F,AYnEd,AvPAA,AsKAA,AnKAA,SoPAS2nM,AvPAAA,AsKAAA,AnKAAA,KwOmEK3nM,GAAG,EAAE7L,CYnEnB,AvPAA,AsKAA,AnKAA,CoPAsB3F,AvPAAA,AsKAAA,AnKAAA,KoPAtB,AvPAA,AsKAA,AnKAA,EoPA6BwL,AvPAAA,AsKAAA,AnKAAA,CoPA7B,AvPAA,AsKAA,AnKAA,EoPAgC,AvPAA,AsKAA,AnKAA;ArkC1XhC,A6yCybmB,AY9DjB,AvPAA,AsKAA,AnKAA,QoPAMuC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/N,AvPAAA,AsKAAA,AnKAAA,CwO8DA,IY9DK,AvPAA,AsKAA,AnKAA,CoPACb,AvPAAA,AsKAAA,AnKAAA,MoPAhB,AvPAA,AsKAA,AnKAA;ArkC1XF,A6yCiZQ,AYtBN,AvPAA,AsKAA,AnKAA,MoPAIU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA;ArkC1XF,A6yC8bO,AYpEL,AvPAA,AsKAA,AnKAA,MoPCIkH,AvPAAA,AsKAAA,AnKAAA,CoPDJ,AvPAA,AsKAA,AnKAA;ArkCzXF,AyzCyXE,AvPAA,AsKAA,AnKAA,MoPEI6G,AvPAAA,AsKAAA,AnKAAA,CoPFJ,AvPAA,AsKAA,AnKAA;ArkCxXF,A6yCwWE,AYgBA,AvPAA,AsKAA,AnKAA,GwOzBwB,CA+FtB,EYnEEtB,AvPAAA,AsKAAA,AnKAAA,CoPHJ,AvPAA,AsKAA,AnKAA;ArkCvXF,AyzCuXE,AvPAA,AsKAA,AnKAA,MoPIIuyE,AvPAAA,AsKAAA,AnKAAA,CoPJJ,AvPAA,AsKAA,AnKAA;ArkCtXF,AyzCsXE,AvPAA,AsKAA,AnKAA,MoPKI9sE,AvPAAA,AsKAAA,AnKAAA,CoPLJ,AvPAA,AsKAA,AnKAA;ArkCrXF,A6yC8bEukU,EAAAA,GAAG,GAAG3gR,MAAM,CAACx2B,MAAP,CAAcx5B,KAAd,EAAqB,CAArB,CAAN;A7yC7bF,AyzC2XE,AvPAA,AsKAA,AnKAA,MoPAI6F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;ArkC1XjB,A6yC8bE,AYnEE,AvPAA,AsKAA,AnKAA,MwOmEE8qU,GAAG,EYnEE,AvPAA,AsKAA,AnKAA,EoPAEz2U,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEH,AvPAA,AsKAA,AnKAA,GoPAMkO,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EwOmEF,AYnEkB,AvPAA,AsKAA,AnKAA,EwOmEE;A7yC7btB,A6yC8bIpI,AYnEEiI,AvPAAA,AsKAAA,AnKAAA,IwOmEFjI,EYnEEiI,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEE,CYnEC5N,AvPAAA,AsKAAA,AnKAAA,GwOmEG,CAAT,CYnEW,AvPAA,AsKAA,AnKAA,CoPACH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA;ArkC1XN,A6yC8bI,WAAO;A7yC7bX,A6yC8bMigB,AYnEA,AvPAA,AsKAA,AnKAA,MwOmEAA,IAAI,AYnEAlS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOmECwlU,GYnEG,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,IoPAaxlU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOkEb,CYlEiBA,AvPAAA,AsKAAA,AnKAAA,CoPAtB,AvPAA,AsKAA,AnKAA,EoPAyB,AvPAA,AsKAA,AnKAA;ArkC1X/B,A6yC8bM/K,AYnEEkE,AvPAAA,AsKAAA,AnKAAA,MwOmEFlE,EYnEEkE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEE,CYnECuF,AvPAAA,AsKAAA,AnKAAA,CwOmECgqU,AYnEA,AvPAA,AsKAA,AnKAA,GwOiEF,AYjEK1oU,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA;ArkC1XR,A6yC8bMjC,AYnEE,AvPAA,AsKAA,AnKAA,MwOmEFA,KAAK,EAAEA,KAHF;A7yC1bX,A6yC8bM6F,AYnEC,AvPAA,AsKAA,AnKAA,MwOmEDA,GAAG,EAAE7L;A7yC7bX,A6yCybW,AY9DN,AvPAA,AsKAA,AnKAA,KwO8DD;A7yCxbJ,A6yC8bG,GA5GuB,CA4GtB;A7yC7bJ,AyzC2XI,AvPAA,AsKAA,AnKAA,QoPAI9F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKkO,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA,OoPAO,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAF,AvPAA,AsKAA,AnKAA,EoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;ArkC1XjB,AyzC2XI8wE,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9sE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGlS,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA;ArkC1XJ,A6yC8bEw2U,EAAAA,GAAG,GAAGC,GAAG,CAACn3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;A7yC7bF,AyzC2XI,AvPAA,AsKAA,AnKAA,WoPAO,AvPAA,AsKAA,AnKAA,EoPAEt/B,AvPAAA,AsKAAA,AnKAAA,CoPAF,AvPAA,AsKAA,AnKAA,GoPAMkO,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA;ArkC1XpB,A6yC8bE,AYnEIH,AvPAAA,AsKAAA,AnKAAA,MwOmEAyoU,AYnEAzoU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEE,CYnEC5N,AvPAAA,AsKAAA,AnKAAA,IwOmEI,CYnEC,AvPAA,AsKAA,AnKAA,CoPACH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,CwOmEA,IAAiBw2U,GAAG,KAAK,KAAzB,IAAkCA,GAAG,KAAK,KAA9C,EAAqD;A7yC7bvD,A6yC8bI1wU,IAAAA,KAAK,IAAI,CAAT;A7yC7bJ,A6yC8bI,AYnEE,AvPAA,AsKAA,AnKAA,UoPAIiI,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;ArkC1XrB,A6yC8bMkS,AYnEE,AvPAA,AsKAA,AnKAA,MwOmEFA,IAAI,EAAEszT,AYnEArsU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG6G,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA,QwOkER;A7yC5bX,A6yC8bM/K,AYnEIkE,AvPAAA,AsKAAA,AnKAAA,MwOmEJlE,IYnEIkE,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,EwOmEEsvU,CYnECzoU,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CwOiEC;A7yC3bX,A6yC8bMjC,AYnEIkzE,AvPAAA,AsKAAA,AnKAAA,MwOmEJlzE,IYnEIkzE,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,EwOmEElzE,CYnEC9L,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,GwOgEC;A7yC1bX,A6yC8bM2R,AYnEG,AvPAA,AsKAA,AnKAA,MwOmEHA,GAAG,EAAE7L;A7yC7bX,A6yCybW,KAAP;A7yCxbJ,A6yC8bG,AYnEK,AvPAA,AsKAA,AnKAA,GwOtDkB,CAyHtB,QYnEQ2G,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsB,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA;ArkC1XnB,AyzC2XUtB,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsB,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AoPCAmE,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGlS,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;ApkCjdV,A4yCqhBEu2U,AYnEO,AvPAA,AsKAA,AnKAA,EwOmEPA,GAAG,GAAGC,GAAG,CAACl3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;A5yCphBF,AwzCkdO,AvPAA,AsKAA,AnKAA;ApkCjdP,A4yCqhBE,AYnEG,AvPAA,AsKAA,AnKAA,MwOmECg3S,GAAG,KAAKC,GAAG,CAAC,CAAD,CAAX,IAAkB,SAASn5S,OAAT,CAAiBk5S,GAAjB,KAAyB,CAA3C,IAAgDC,GAAG,KAAK,IAA5D,EAAkE;A5yCphBpE,A4yCqhBIzwU,AYnED,AvPAA,AsKAA,AnKAA,GoP5BD,AvPAA,AsKAA,AnKAA,CwO+FEA,KAAK,AYnEA,AvPAA,AsKAA,AnKAA,IwOmEI,CAAT;A5yCphBJ,A4yCqhBI,AYnEA,AvPAA,AsKAA,AnKAA,WwOmEO,AYnEA,AvPAA,AsKAA,AnKAA,EoPAE9F,AvPAAA,AsKAAA,AnKAAA,CoPAF,AvPAA,AsKAA,AnKAA,GoPAMkO,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA;ApkCjdpB,A4yCqhBM+R,AYnEAlS,AvPAAA,AsKAAA,AnKAAA,MwOmEAkS,AYnEAlS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOmEG,AYnEApC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOmEC4nU,AYnEApzU,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACH,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,EoPAWA,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,EoPAcG,AvPAAA,AsKAAA,AnKAAA,EwOkEd,GYlEA,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AwOoEA6C,MAAAA,KAAK,EAAEuzU,GAFF;AAGLzqU,AYnEA,AvPAA,AsKAA,AnKAA,MwOmEAA,IYnEIiC,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,EwOmEEjC,EYnEE,AvPAA,AsKAA,AnKAA,GwOgEJ,CYhED,AvPAA,AsKAA,AnKAA,IoPAaiC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAtB,AvPAA,AsKAA,AnKAA,EoPAyB,AvPAA,AsKAA,AnKAA;AwOoEzB4D,AYnEEzK,AvPAAA,AsKAAA,AnKAAA,MwOmEFyK,EYnEEzK,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,EwOmEEpB,CYnEC2G,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsB,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA;AnkC1dR,A2yCyhBW,AY9DH,AvPAA,AsKAA,AnKAA,KwO8DJ;A3yCxhBJ,A2yC8hBG,AYnEI,AvPAA,AsKAA,AnKAA,GwOnEmB,CAsItB;A3yC7hBJ,AuzC2dK,AvPAA,AsKAA,AnKAA;AnkC1dL;AACA,A2yC8hBE,AYnEE,AvPAA,AsKAA,AnKAA,MwOmEE,EYnEE/N,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAKkO,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA,IwOmEIkvB,GYnEG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAF,AvPAA,AsKAA,AnKAA,CwOmElB,CAAuBk5S,AYnEA,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CwOmElB,AYnEW,AvPAA,AsKAA,AnKAA,KwOmEoB,CAAnC,EAAsC;A3yC7hBxC,A2yC8hBI,AYnEAt3P,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOmECl5E,EYnEEoM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOmEL,CYnEQlS,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA;AnkC1dJ,A2yC8hBI,WAAO;A3yC7hBX,A2yC8hBMigB,AYnEF,AvPAA,AsKAA,AnKAA,MwOmEEA,IAAI,CYnEC,AvPAA,AsKAA,AnKAA,CwOmECszT,CYnECvzU,AvPAAA,AsKAAA,AnKAAA,CoPAF,AvPAA,AsKAA,AnKAA,GoPAMkO,AvPAAA,AsKAAA,AnKAAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA,OwOkET;A3yC5hBX,A2yC8hBMlL,AYnEA+K,AvPAAA,AsKAAA,AnKAAA,MwOmEA/K,AYnEA+K,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGpC,AvPAAA,AsKAAA,AnKAAA,CwOmEC,AYnEA,AvPAA,AsKAA,AnKAA,CoPACxL,AvPAAA,AsKAAA,AnKAAA,CwOmECm2U,GAFF,CYjEM,AvPAA,AsKAA,AnKAA,CoPACt2U,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,EoPAWA,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,EoPAcG,AvPAAA,AsKAAA,AnKAAA,KoPAd,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA;AnkC1dN,A2yC8hBM2L,MAAAA,KAAK,EAAEA,KAHF;A3yC1hBX,A2yC8hBM6F,AYnEA,AvPAA,AsKAA,AnKAA,MwOmEAA,GAAG,CYnEC5D,AvPAAA,AsKAAA,AnKAAA,CwOmECjI,AYnEA,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAT,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA;AnkC1drB,A2yCyhBW,AY9DH,AvPAA,AsKAA,AnKAA,KwO8DJ,OY9DQoB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG6G,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA;AnkC1dnB,A2yC8hBG,AYnEO7G,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG6G,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkC1dV,AuzC2dUixE,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGh/E,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkC1dV,A2yC8hBE61U,AYnEO,AvPAA,AsKAA,AnKAA,EwOmEPA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A3yC7hBF,A2yC8hBC,EAAC;A3yC7hBF,AuzC2dQ,AvPAA,AsKAA,AnKAA,YoPAItoU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsB,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA;AnkC1dnB,AuzC2dUtB,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGsB,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkC1dV,A2yC8hBA,AYnEUmE,AvPAAA,AsKAAA,AnKAAA,SwOmEDwkU,CYnECxkU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGlS,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,QwOmEV,CAAwB8L,KAAxB,EAA+B;A3yC7hB/B,A2yC8hBE,AYnEO,AvPAA,AsKAA,AnKAA,MwOmEHkwM,MAAM,GAAG,EAAb;A3yC7hBF,AuzC2dO,AvPAA,AsKAA,AnKAA;AnkC1dP,A2yC8hBE,AYnEG,AvPAA,AsKAA,AnKAA,SwOmEIl2M,KAAK,GAAGxG,MAAf,EAAuB;A3yC7hBzB,A2yC8hBI,AYnED,AvPAA,AsKAA,AnKAA,QwOmEK,CAAC81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAf,EAAgC;A3yC7hBpC,A2yC8hBM;A3yC7hBN,A2yC8hBK,AYnEH,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,CoPACk5E,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI9sE,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkC1dF,AuzC2dC,AvPAA,AsKAA,AnKAA;AnkC1dD,A2yC8hBI8pM,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBJ,A2yC8hBG,AYnEH,AvPAA,AsKAA,AnKAA,MoPAMwxM,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGv0M,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC3C,AvPAAA,AsKAAA,AnKAAA,SoPAP,AvPAA,AsKAA,AnKAA,CoPAiBu2H,AvPAAA,AsKAAA,AnKAAA,coPA7B,AvPAA,AsKAA,AnKAA;AnkC1dA;AACA,A2yC8hBE,AYpEF,AvPAA,AsKAA,AnKAA,MwOoEMqlF,GYpEG12M,AvPAAA,AsKAAA,AnKAAA,GwOoEG,AYpEZ,AvPAA,AsKAA,AnKAA,CwOoEahG,AYpEC+nM,AvPAAA,AsKAAA,AnKAAA,MwOoER,AYpEN,AvPAA,AsKAA,AnKAA,EoPAsBkQ,AvPAAA,AsKAAA,AnKAAA,GwOoEE,CAAtB,EAAyB,EYpE3B,AvPAA,AsKAA,AnKAA,EoPAgC,AvPAA,AsKAA,AnKAA;AnkCzdhC,A2yC8hBIs+H,AYpEF,AvPAA,AsKAA,AnKAA,IwOoEEA,KYpEKv+H,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACx4M,AvPAAA,AsKAAA,AnKAAA,CwOoEC,CAAC,EAAD,AYpEL,AvPAA,AsKAA,AnKAA,CoPASuoM,AvPAAA,AsKAAA,AnKAAA,CwOoECgtI,KYpEV,AvPAA,AsKAA,AnKAA,EoPAiB98H,AvPAAA,AsKAAA,AnKAAA,QoPAjB,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,MwOoEY,EAA6Bw9H,OAA7B,CAAV;A3yC7hBJ,A2yC8hBG,AYpEF,AvPAA,AsKAA,AnKAA;AnkCzdD;AACA,A2yC8hBE,AYpEF,AvPAA,AsKAA,AnKAA,MwOoEMS,AYpEAh+H,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAb,AvPAA,AsKAA,AnKAA,QwOoEuB,CAAC1hJ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;A3yC7hBnD,A2yC8hBI+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A3yC7hBJ,A2yC8hBG,AYrEH,AvPAA,AsKAA,AnKAA,SoPASx7H,AvPAAA,AsKAAA,AnKAAA,OoPAT,AvPAA,AsKAA,AnKAA,CoPAkBvuL,AvPAAA,AsKAAA,AnKAAA,KoPAlB,AvPAA,AsKAA,AnKAA,EoPAyB,AvPAA,AsKAA,AnKAA;AnkCxdzB,AuzCydE,AvPAA,AsKAA,AnKAA,MoPAIvK,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAV,AvPAA,AsKAA,AnKAA;AnkCxdF,A2yC8hBE,AYtEA,AvPAA,AsKAA,AnKAA,MoPCIkN,AvPAAA,AsKAAA,AnKAAA,GwOqEG,CYtEP,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBI1N,IAAAA,IAAI,EAAEqzT,mBADD;A3yC5hBT,A2yC8hBItwU,AYrEF,AvPAA,AsKAA,AnKAA,IwOqEEA,KAAK,EAAE43H,AYrEA4+E,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,CoPAev1M,AvPAAA,AsKAAA,AnKAAA,EwOqEE,CAAC,AYrElB,AvPAA,AsKAA,AnKAA,EoPAoB,AvPAA,AsKAA,AnKAA,KwOqEK+3M,MAAR,EAAgB,EAAhB,CAFV;A3yC3hBT,A2yC8hBIlwM,AYrEA,AvPAA,AsKAA,AnKAA,IwOqEAA,KAAK,EAAEA,AYrEAxG,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACmb,AvPAAA,AsKAAA,AnKAAA,CwOkEN,EYlEK,AvPAA,AsKAA,AnKAA,EoPAMxc,AvPAAA,AsKAAA,AnKAAA,GoPAN,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,IoPAiBwc,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,KoPAauzM,AvPAAA,AsKAAA,AnKAAA,IoPArC,AvPAA,AsKAA,AnKAA;AnkCxdJ,A2yC8hBI7lM,AYrED,AvPAA,AsKAA,AnKAA,IwOqECA,GAAG,EAAE7L;A3yC7hBT,A2yCyhBS,GAAP;A3yCxhBF,A2yC8hBC,AYrEC,AvPAA,AsKAA,AnKAA,QoPAM2D,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA;AnkCxdd,AuzCydIhC,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,EoPAE,AvPAA,AsKAA,AnKAA,CoPDI,AvPAA,AsKAA,AnKAA;AnkCvdd,A2yC8hBA,AYrEI0sM,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,KwOqEKwiI,AYrEA,AvPAA,AsKAA,AnKAA,EoPAE,AvPAA,AsKAA,AnKAA,CoPFG,AvPAA,AsKAA,AnKAA,awOuEd,CAA0B7qU,KAA1B,EAAiC;A3yC7hBjC,A2yC8hBE,AYrEEu7L,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOqEE2U,IYrEI,AvPAA,AsKAA,AnKAA,EwOqEE,AYrEAv7L,AvPAAA,AsKAAA,AnKAAA,GwOqEG,AYxED,AvPAA,AsKAA,AnKAA,MwOwEOq1C,MAAM,CAAChwD,KAAK,EAAN,CAAzB;A3yC7hBF,AuzCydIR,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAEk0M,AvPAAA,AsKAAA,AnKAAA,KoPJK,AvPAA,AsKAA,AnKAA;AnkCpdd,A2yC8hBE,SAAO1zM,KAAK,GAAGxG,MAAf,EAAuB;A3yC7hBzB,A2yC8hBI,AYrEAwD,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEAmB,AvPAAA,AsKAAA,AnKAAA,CwOqECoxU,EYrEF,AvPAA,AsKAA,AnKAA,EoPAM,AvPAA,AsKAA,AnKAA,QwOqEQ,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAjB,EAAkC;A3yC7hBtC,A2yC8hBM,AYrEA,AvPAA,AsKAA,AnKAA,aoPAO0zM,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACv1M,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,GoPAawc,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,GoPAwBixH,AvPAAA,AsKAAA,AnKAAA,SoPA/B,AvPAA,AsKAA,AnKAA;AnkCxdN,A2yC8hBK,AYrEA,AvPAA,AsKAA,AnKAA,KoPRS,AvPAA,AsKAA,AnKAA;AnkChdd;AACA,A2yC8hBI8mF,AYrEAr5M,AvPAAA,AsKAAA,AnKAAA,IwOqEAq5M,AYrEAr5M,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACsB,AvPAAA,AsKAAA,AnKAAA,EwOqEE,CYrEH,AvPAA,AsKAA,AnKAA,EoPAMjB,AvPAAA,AsKAAA,AnKAAA,CwOqEC8yD,IYrEP,AvPAA,AsKAA,AnKAA,EwOqEa,AYrEA,AvPAA,AsKAA,AnKAA,CwOqEChwD,KAAK,EAAN,CAAhB;A3yC7hBJ,A2yC8hBG,AYrEG,AvPAA,AsKAA,AnKAA,UoPAI,AvPAA,AsKAA,AnKAA,CoPAC0zM,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACv1M,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAiB,AvPAA,AsKAA,AnKAA;AnkCxdvB,AuzCydQ,AvPAA,AsKAA,AnKAA,UoPAEwF,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAChC,AvPAAA,AsKAAA,AnKAAA,IoPAN,AvPAA,AsKAA,AnKAA;AnkCxdR,A2yC8hBE,AYrEM,AvPAA,AsKAA,AnKAA,MwOqEF+tU,MYrEM/0T,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GwOqEW,CAAC6xD,CYrEC0hJ,AvPAAA,AsKAAA,AnKAAA,IoPAjB,AvPAA,AsKAA,AnKAA,CwOqEsB,CAAC/iI,AYrEA,AvPAA,AsKAA,AnKAA,EoPAEhrE,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC0qM,AvPAAA,AsKAAA,AnKAAA,IwOqEb,CAAkBruM,AYrEX,AvPAA,AsKAA,AnKAA,KwOqEP,CAAD,CAAjB,IAA+CqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjE,EAA6F;A3yC7hB/F,A2yC8hBI+vU,AYrEG,AvPAA,AsKAA,AnKAA,IwOqEHA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A3yC7hBJ,A2yC8hBG;A3yC7hBH,AuzCydMt0T,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAWjB,AvPAAA,AsKAAA,AnKAAA,KoPAX,AvPAA,AsKAA,AnKAA;AnkCxdN,A2yC8hBE,AYrEI,AvPAA,AsKAA,AnKAA,SwOqEG,IYrEI,AvPAA,AsKAA,AnKAA,IoPAP,AvPAA,AsKAA,AnKAA;AnkCxdN,A2yC8hBIid,AYrEC,AvPAA,AsKAA,AnKAA,IwOqEDA,CYvFU,AvPAA,AsKAA,AnKAA,GwOuFN,EAAEqzT,mBADD;A3yC5hBT,A2yC8hBItwU,IAAAA,KAAK,EAAE43H,QAAQ,CAACohF,MAAD,EAAS,CAAT,CAFV;A3yC3hBT,A2yC8hBI46H,AYrEAnxU,AvPAAA,AsKAAA,AnKAAA,IwOqEAmxU,AYrEAnxU,AvPAAA,AsKAAA,AnKAAA,KwOqEK,CYrEC,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEAxB,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CwOkED,CYlEO,AvPAA,AsKAA,AnKAA;AnkCxdhB,A2yC8hBI6H,AYrEE,AvPAA,AsKAA,AnKAA,IwOqEFA,KAAK,CYrEC0tM,AvPAAA,AsKAAA,AnKAAA,CwOqEC1tM,IYrEI,AvPAA,AsKAA,AnKAA,CwOiEN,AYjEO7H,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA;AnkCxdtB,A2yC8hBI0N,AYrEI,AvPAA,AsKAA,AnKAA,IwOqEJA,GAAG,EAAE7L,CYrEC2D,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAChC,AvPAAA,AsKAAA,AnKAAA,IoPAN,AvPAA,AsKAA,AnKAA;AnkCxdR,A2yCwhBS,AY/DD,AvPAA,AsKAA,AnKAA,GwO+DN,OY/DQgC,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC0qM,AvPAAA,AsKAAA,AnKAAA,KoPAN,AvPAA,AsKAA,AnKAA;AnkCxdR,A2yC8hBC,AYrEO1zL,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAWuzM,AvPAAA,AsKAAA,AnKAAA,IoPAX,AvPAA,AsKAA,AnKAA;AnkCxdR,AuzCydO,AvPAA,AsKAA,AnKAA;AnkCxdP,A2yC8hBA,SAASq/H,kBAAT,GAA8B;A3yC7hB9B,A2yC8hBE,AYrEI,AvPAA,AsKAA,AnKAA,MwOqEA76H,MAAJ,CYrEW,AvPAA,AsKAA,AnKAA,CwOqEClwM,GYrER,AvPAA,AsKAA,AnKAA,EwOqEJ,EAAmB+7T,EAAnB;A3yC7hBF,A2yC8hBEA,AYrEG,AvPAA,AsKAA,AnKAA,EwOqEHA,EAAE,CYjGU,AvPAA,AsKAA,AnKAA,EwOiGP/xQ,MAAM,CAAChwD,KAAD,CAAX;A3yC7hBF,A2yC8hBEW,EAAAA,MAAM,CAAC0uU,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAd,IAAoCozP,EAAE,KAAK,GAA5C,EAAiD,oEAAjD,CAAN;A3yC7hBF,A2yC8hBE/7T,AYrEE2rM,AvPAAA,AsKAAA,AnKAAA,EwOqEF3rM,EYrEE2rM,AvPAAA,AsKAAA,AnKAAA,GwOqEG,EYrEE,AvPAA,AsKAA,AnKAA,CwOqEC3xM,EYrEE,AvPAA,AsKAA,AnKAA,GwOqEV;A3yC7hBF,A2yC8hBEk2M,AYrEIvyM,AvPAAA,AsKAAA,AnKAAA,EwOqEJuyM,IYrEIvyM,AvPAAA,AsKAAA,AnKAAA,EwOqEE,CYrEC,AvPAA,AsKAA,AnKAA,CoPAChC,AvPAAA,AsKAAA,AnKAAA,CwOqEC,EAAT,CYrEI,AvPAA,AsKAA,AnKAA,GoPAWgC,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC0qM,AvPAAA,AsKAAA,AnKAAA,KoPAJ,AvPAA,AsKAA,AnKAA,GoPAY,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA;AnkCxdN,AuzCydM1qM,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC49L,AvPAAA,AsKAAA,AnKAAA,MoPAJ,AvPAA,AsKAA,AnKAA,GoPAa5mL,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAnB,AvPAA,AsKAA,AnKAA;AnkCxdN,A2yC8hBE,AYrEG,AvPAA,AsKAA,AnKAA,KoPjCS,AvPAA,AsKAA,AnKAA,CwOsGRonT,EAAE,KAAK,GAAX,EAAgB;A3yC7hBlB,A2yC8hBI7rH,IAAAA,MAAM,GAAGlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAf;A3yC7hBJ,A2yC8hBI+hU,AYrEAl6S,AvPAAA,AsKAAA,AnKAAA,IwOqEAk6S,AYrEAl6S,AvPAAA,AsKAAA,AnKAAA,EwOqEE,EYrEE,AvPAA,AsKAA,AnKAA,CwOqECmoC,AYrEAnvC,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI,AvPAA,AsKAA,AnKAA,GwOqEG,CAAC7gB,KAAD,CAAX,CAFc,CAEM;A3yC7hBxB,A2yC8hBI,AYrEE,AvPAA,AsKAA,AnKAA,UoPAI/F,AvPAAA,AsKAAA,AnKAAA,SoPAS,AvPAA,AsKAA,AnKAA,CoPACT,AvPAAA,AsKAAA,AnKAAA,MoPAd,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCxd5B,AuzCydQquB,AvPAAA,AsKAAA,AnKAAA,QoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAGhH,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCxdR,A2yC8hBI,AYrEI,AvPAA,AsKAA,AnKAA,QwOqEAq1L,MAAM,CYrECvyM,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CwOqEW,GAAf,EAAoB;A3yC7hBxB,A2yC8hBM,AYrEC,AvPAA,AsKAA,AnKAA,OoPHD,AvPAA,AsKAA,AnKAA,GwOwEIo+T,EAAE,CYrEC,AvPAA,AsKAA,AnKAA,IwOqEI,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;A3yC7hBpC,A2yC8hBQ,AYrEA,AvPAA,AsKAA,AnKAA,UwOqEE/hU,KAAF,AYrEO6nB,AvPAAA,AsKAAA,AnKAAA,IoPAP,AvPAA,AsKAA,AnKAA;AnkCxdR,A2yC8hBQ,AYrED,AvPAA,AsKAA,AnKAA,ewOqEQ+oT,cAAc,CAAC5qU,KAAD,CAArB;A3yC7hBR,A2yC8hBO,AYrEF,AvPAA,AsKAA,AnKAA,KoP1CS,AvPAA,AsKAA,AnKAA;AnkC9ad;AACA,A2yC8hBM,AYrEFu/L,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CwOqECgqI,EYrEE,AvPAA,AsKAA,AnKAA,UwOqEU,CAACxN,EAAD,CAAhB,EAAsB;A3yC7hB5B,A2yC8hBQ,AYrEF,AvPAA,AsKAA,AnKAA,YoPAMnzP,AvPAAA,AsKAAA,AnKAAA,GwOqEGiiQ,CYrEC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAb,AvPAA,AsKAA,AnKAA,UwOqEyB,CAAC7qU,KAAD,CAAvB;A3yC7hBR,A2yC8hBO,AYrED,AvPAA,AsKAA,AnKAA,OwO6DkB,CAQhB,EYrEErE,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA;AnkCxdN;AACA,AuzCydM,AvPAA,AsKAA,AnKAA,WoPAK,AvPAA,AsKAA,AnKAA,MoPAMxD,AvPAAA,AsKAAA,AnKAAA,GoPAX,AvPAA,AsKAA,AnKAA,IoPAkBwc,AvPAAA,AsKAAA,AnKAAA,GoPAlB,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA;AnkCxd7B,A2yC8hBM,AYrEE,AvPAA,AsKAA,AnKAA,UwOqEEonT,EAAE,EYrEE7kU,AvPAAA,AsKAAA,AnKAAA,EwOqEEmyU,GYrEG,AvPAA,AsKAA,AnKAA,GoPAG10T,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACxc,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CwOqEK,AYrEtB,AvPAA,AsKAA,AnKAA,CwOqEuB4jU,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAxB,EAA4C;A3yC7hBlD,A2yC8hBQohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;A3yC7hBR,A2yC8hBO,AYrEC,AvPAA,AsKAA,AnKAA,YoPAI/xU,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAKw0M,AvPAAA,AsKAAA,AnKAAA,IoPAV,AvPAA,AsKAA,AnKAA,KoPAmB,AvPAA,AsKAA,AnKAA,CoPAC7pL,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,IoPAS,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC3qB,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,CoPAjC,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPA+C,AvPAA,AsKAA,AnKAA;AnkCxdvD,A2yC8hBK,AYrEK0xE,AvPAAA,AsKAAA,AnKAAA,UoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACzwE,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,GoPAYjB,AvPAAA,AsKAAA,AnKAAA,KoPAZ,AvPAA,AsKAA,AnKAA;AnkCxdV,AuzCydU,AvPAA,AsKAA,AnKAA,YoPAEyE,AvPAAA,AsKAAA,AnKAAA,IoPAF,AvPAA,AsKAA,AnKAA;AnkCxdV,A2yC8hBI,AYrEK,AvPAA,AsKAA,AnKAA,WwOqEE0tU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;A3yC7hBrD,A2yC8hBMk2M,AYrEC,AvPAA,AsKAA,AnKAA,MwOqEDA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBN,A2yC8hBK;A3yC7hBL,AuzCydM2D,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAChC,AvPAAA,AsKAAA,AnKAAA,IoPAJ,AvPAA,AsKAA,AnKAA,GoPAWA,AvPAAA,AsKAAA,AnKAAA,IoPAX,AvPAA,AsKAA,AnKAA;AnkCxdN,A2yC8hBIogU,AYrEEp+T,AvPAAA,AsKAAA,AnKAAA,IwOqEFo+T,EAAE,AYrEAp+T,AvPAAA,AsKAAA,AnKAAA,GwOqEGqsD,AYrEA,AvPAA,AsKAA,AnKAA,CoPACq+I,AvPAAA,AsKAAA,AnKAAA,KwOqEK,AYrET,AvPAA,AsKAA,AnKAA,CwOqEUruM,EYrEE,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,EwOqES,CAAX;A3yC7hBJ,A2yC8hBG,AYrEG2D,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC49L,AvPAAA,AsKAAA,AnKAAA,MoPAJ,AvPAA,AsKAA,AnKAA,GoPAa5mL,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGi0D,AvPAAA,AsKAAA,AnKAAA,IoPAnB,AvPAA,AsKAA,AnKAA;AnkCxdN,AuzCydK,AvPAA,AsKAA,AnKAA;AnkCxdL,A2yC8hBE,MAAImzP,EAAE,KAAK,GAAX,EAAgB;A3yC7hBlB,A2yC8hBI7rH,AYnIU,AvPAA,AsKAA,AnKAA,GoPAZ,AvPAA,AsKAA,AnKAA,CwOmIEA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBJ,AuzCydE,AvPAA,AsKAA,AnKAA,MoPAIklB,AvPAAA,AsKAAA,AnKAAA,KoPAJ,AvPAA,AsKAA,AnKAA,EoPAWjoB,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACof,AvPAAA,AsKAAA,AnKAAA,IoPAP,AvPAA,AsKAA,AnKAA,CoPAY6I,AvPAAA,AsKAAA,AnKAAA,KoPAZ,AvPAA,AsKAA,AnKAA,EoPAmBlnB,AvPAAA,AsKAAA,AnKAAA,OoPAnB,AvPAA,AsKAA,AnKAA,CoPA2BG,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA;AnkCxd/C,A2yC8hBI,AYrEAwF,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC9G,AvPAAA,AsKAAA,AnKAAA,GwOqEGwyU,AYrEP,AvPAA,AsKAA,AnKAA,CoPAQlxU,AvPAAA,AsKAAA,AnKAAA,GoPAR,AvPAA,AsKAA,AnKAA,EoPAa+mB,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC/mB,AvPAAA,AsKAAA,AnKAAA,EwOqEE,CAAC6xD,AYrEJ,AvPAA,AsKAA,AnKAA,CoPAlB,AvPAA,AsKAA,AnKAA,KwOqE4B,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;A3yC7hBrD,A2yC8hBMk2M,AYrEH,AvPAA,AsKAA,AnKAA,GoPFU,AvPAA,AsKAA,AnKAA,GwOuEPA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBN,A2yC8hBK,AYrEH,AvPAA,AsKAA,AnKAA,SoPAO2D,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA;AnkCxdF,AuzCydC,AvPAA,AsKAA,AnKAA;AnkCxdD,A2yC8hBIo+T,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;A3yC7hBJ,A2yC8hBG,AYrEH,AvPAA,AsKAA,AnKAA,SoPASupD,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,CoPAgB7tB,AvPAAA,AsKAAA,AnKAAA,KoPAhB,AvPAA,AsKAA,AnKAA,EoPAuBx+B,AvPAAA,AsKAAA,AnKAAA,KoPAvB,AvPAA,AsKAA,AnKAA,EoPA8Bo/F,AvPAAA,AsKAAA,AnKAAA,SoPA9B,AvPAA,AsKAA,AnKAA,EoPAyCjvD,AvPAAA,AsKAAA,AnKAAA,IoPAzC,AvPAA,AsKAA,AnKAA,EoPA+CC,AvPAAA,AsKAAA,AnKAAA,KoPA/C,AvPAA,AsKAA,AnKAA,EoPAsD8sH,AvPAAA,AsKAAA,AnKAAA,MoPAtD,AvPAA,AsKAA,AnKAA,EoPA8D,AvPAA,AsKAA,AnKAA;AnkCxd9D,AuzCydE,AvPAA,AsKAA,AnKAA,MoPAI,AvPAA,AsKAA,AnKAA,CoPAC99D,AvPAAA,AsKAAA,AnKAAA,SoPAD,AvPAA,AsKAA,AnKAA,IoPAcA,AvPAAA,AsKAAA,AnKAAA,SoPAS,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAhC,AvPAA,AsKAA,AnKAA,EoPAmC,AvPAA,AsKAA,AnKAA,OoPAO89D,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA;AnkCxdrC,A2yC8hBE,AYrEA,AvPAA,AsKAA,AnKAA,MwOqEI2nK,EAAE,AYrEAnkU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEA0+F,AvPAAA,AsKAAA,AnKAAA,GwOqEP,IAAcylO,EAAE,AYrEpB,AvPAA,AsKAA,AnKAA,KwOqEyB,GAAzB,EAA8B;A3yC7hBhC,A2yC8hBI7rH,AYrEF,AvPAA,AsKAA,AnKAA,IwOqEEA,EYrEE90M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOqEG,AYrEAs6B,AvPAAA,AsKAAA,AnKAAA,IwOqEIs0B,CYrEC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,EwOqEkB,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBJ,A2yC8hBI+hU,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,EAAE,AYrEA95T,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOqEE+nD,CYrECmjJ,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEAz3K,AvPAAA,AsKAAA,AnKAAA,CwOqEC17B,IYrEF,AvPAA,AsKAA,AnKAA,CwOqEC,AYtEb,AvPAA,AsKAA,AnKAA,CwOsEE;A3yC7hBJ,AuzCudE,AvPAA,AsKAA,AnKAA,MoPEIgM,AvPAAA,AsKAAA,AnKAAA,CoPFJ,AvPAA,AsKAA,AnKAA,CoPH4D,AvPAA,AsKAA,AnKAA,CoPKrD,AvPAA,AsKAA,AnKAA;AnkCxdT,A2yC8hBI,QAAI+1T,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;A3yC7hBlC,A2yC8hBM7rH,AYrEJ,AvPAA,AsKAA,AnKAA,MwOqEIA,AYrEAjuM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG7G,AvPAAA,AsKAAA,AnKAAA,CoPAR,AvPAA,AsKAA,AnKAA,CwOqEU,CYrEC,AvPAA,AsKAA,AnKAA,GwOqEG4uD,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBN,A2yC8hBK,AYrEDgM,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG5K,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkCxdJ,AuzCydIA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG6G,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkCxdJ,A2yC8hBI,AYrEAA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOqEGonU,AYrEArjU,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,awOqEkB,CAACgkD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAlB,EAA8C;A3yC7hBlD,A2yC8hBM,AYrEH,AvPAA,AsKAA,AnKAA,GoPX2D,AvPAA,AsKAA,AnKAA,CoPW1D,AvPAA,AsKAA,AnKAA,SwOqESqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;A3yC7hBvD,A2yC8hBQk2M,QAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;A3yC7hBR,A2yC8hBO;A3yC7hBP,A2yC8hBK,AYrEHgM,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOiEC,CYjEE/L,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEAiT,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAShW,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGkE,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA;AnkCxdF,A2yC8hBM2uU,AYrEJ,AvPAA,AsKAA,AnKAA,MwOqEIA,EYrEE7nU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGjI,AvPAAA,AsKAAA,AnKAAA,IwOqEI,AYrEA,AvPAA,AsKAA,AnKAA,CwOqEC,AYrEAiT,AvPAAA,AsKAAA,AnKAAA,EwOqED,CYrEJ,AvPAA,AsKAA,AnKAA,CwOqESq7T,AYrEAtmU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/K,AvPAAA,AsKAAA,AnKAAA,KoPAb,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA,CoPf4D,AvPAA,AsKAA,AnKAA,CoPe7B,AvPAA,AsKAA,AnKAA,UwOqEjB,EAA6B+xU,OAA7B,CAAV;A3yC7hBN,A2yC8hBK;A3yC7hBL,A2yC8hBG,AYrED,AvPAA,AsKAA,AnKAA,SoPAOjjU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG9D,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,IoPAS8D,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIpO,AvPAAA,AsKAAA,AnKAAA,CoPAd,AvPAA,AsKAA,AnKAA,GoPAkByvC,AvPAAA,AsKAAA,AnKAAA,IoPAlB,AvPAA,AsKAA,AnKAA,GoPAyBnlC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAItK,AvPAAA,AsKAAA,AnKAAA,CoPAL,AvPAA,AsKAA,AnKAA,GoPAS0vC,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,GoPAiB8sH,AvPAAA,AsKAAA,AnKAAA,MoPAjD,AvPAA,AsKAA,AnKAA;AnkCxdF,AuzCydC,AvPAA,AsKAA,AnKAA;AnkCxdD,A2yC8hBE,MAAIs1K,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;A3yC7hBnD,A2yC8hBI+vU,AYrEJ,AvPAA,AsKAA,AnKAA,IwOqEIA,KYrEKp8H,AvPAAA,AsKAAA,AnKAAA,KwOqEK,CAAC,EAAD,AYrEd,AvPAA,AsKAA,AnKAA,CoPAmB93B,AvPAAA,AsKAAA,AnKAAA,CwOqEA0yJ,IYrEnB,AvPAA,AsKAA,AnKAA,EoPA0B38H,AvPAAA,AsKAAA,AnKAAA,MoPA1B,AvPAA,AsKAA,AnKAA,EoPAkCgC,AvPAAA,AsKAAA,AnKAAA,OoPAlC,AvPAA,AsKAA,AnKAA,CwOqEc,CYrE6B,AvPAA,AsKAA,AnKAA,CwOqEAq7H,OAA7B,CAAV;A3yC7hBJ,A2yC8hBG,AYrED,AvPAA,AsKAA,AnKAA,QoPAMp9H,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGh2B,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACvhL,AvPAAA,AsKAAA,AnKAAA,SoPAN,AvPAA,AsKAA,AnKAA,GoPAkB2C,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC60L,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA,CoPAc8f,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACt3M,AvPAAA,AsKAAA,AnKAAA,SoPArB,AvPAA,AsKAA,AnKAA,CoPAhC,AvPAA,AsKAA,AnKAA;AnkCxdF,AuzCydEu3M,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC/rM,AvPAAA,AsKAAA,AnKAAA,WoPAN,AvPAA,AsKAA,AnKAA,GoPAoB+1K,AvPAAA,AsKAAA,AnKAAA,KoPApB,AvPAA,AsKAA,AnKAA;AnkCxdF,A2yC8hBE,AYrEA,AvPAA,AsKAA,AnKAA,SwOqEO,AYrEA0Z,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACsc,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,EoPAQ+B,AvPAAA,AsKAAA,AnKAAA,OoPAR,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AnkCxdF,A2yC8hBIz5L,AYrEH,AvPAA,AsKAA,AnKAA,IwOqEGA,IAAI,EAAEqzT,mBADD;A3yC5hBT,A2yC8hBItwU,AYpEJ,AvPAA,AsKAA,AnKAA,IwOoEIA,KAAK,EAAEgP,UAAU,CAACgqM,MAAD,CAFZ;A3yC3hBT,A2yC8hBIlwM,AYpEJ,AvPAA,AsKAA,AnKAA,IwOoEIA,KAAK,EAAEA,KAHF;A3yC1hBT,A2yC8hBI6F,AYpEJ,AvPAA,AsKAA,AnKAA,IwOoEIA,GAAG,EAAE7L;A3yC7hBT,A2yCyhBS,AY/DT,AvPAA,AsKAA,AnKAA,GwO+DE;A3yCxhBF,A2yC8hBC,AYpED,AvPAA,AsKAA,AnKAA,EwOoEE;A3yC7hBF;AACA;AACA,A2yC8hBA,AYtEA,AvPAA,AsKAA,AnKAA,SwOsESgxU,AYtEAn9H,AvPAAA,AsKAAA,AnKAAA,OoPAT,AvPAA,AsKAA,AnKAA,CoPAkB32M,AvPAAA,AsKAAA,AnKAAA,KoPAlB,AvPAA,AsKAA,AnKAA,EoPAyBw+B,AvPAAA,AsKAAA,AnKAAA,EwOsEzB,GAA6B,AYtE7B,AvPAA,AsKAA,AnKAA,EoPAgC2R,AvPAAA,AsKAAA,AnKAAA,IoPAhC,AvPAA,AsKAA,AnKAA,EoPAsCC,AvPAAA,AsKAAA,AnKAAA,KoPAtC,AvPAA,AsKAA,AnKAA,EoPA6C,AvPAA,AsKAA,AnKAA;AnkCvd7C,A2yC8hBE,AYtEA,AvPAA,AsKAA,AnKAA,MwOsEIynE,AYtEA+8F,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,CwOsEC,EYtEEp2K,AvPAAA,AsKAAA,AnKAAA,CwOsEC,EAAV,EYtEc,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC6hBE,AYtEA,AvPAA,AsKAA,AnKAA,MwOuEIw8O,AYtEA5rE,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GwOqEN,AYrES5wK,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACliC,AvPAAA,AsKAAA,AnKAAA,MoPAN,AvPAA,AsKAA,AnKAA,GoPAe,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,CoPDd,AvPAA,AsKAA,AnKAA;AnkCtdF,A2yC4hBE,AYtEA,AvPAA,AsKAA,AnKAA,MwOwEIwM,AYtEApI,AvPAAA,AsKAAA,AnKAAA,CoPFJ,AvPAA,AsKAA,AnKAA,IwOsEA;A3yC3hBF,A2yC2hBE,MAGImkU,EAHJ;A3yC1hBF,A2yC0hBE,AYlEA,AvPAA,AsKAA,AnKAA,MwOsEIxjC,AYtEAzsF,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EwOkEN,CYlESxF,AvPAAA,AsKAAA,AnKAAA,EoPAT,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA;AnkCvdf,A2yCyhBE,AYjEE1uM,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOsECkzU,EYtEEh/H,AvPAAA,AsKAAA,AnKAAA,EoPAJ,AvPAA,AsKAA,AnKAA,CwOsEO,GAAG,KALZ;A3yCxhBF,A2yC8hBEomE,AYtEEpmE,AvPAAA,AsKAAA,AnKAAA,EwOsEFomE,EYtEEpmE,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,CwOsEC,EYtEExF,AvPAAA,AsKAAA,AnKAAA,CwOsECt8I,CYtEN,AvPAA,AsKAA,AnKAA,KwOsEY,CAAChwD,KAAD,CAAd;A3yC7hBF,A2yC8hBEW,AYtEE2rM,AvPAAA,AsKAAA,AnKAAA,EwOsEF3rM,EYtEE2rM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EwOsEE,CAAC4rE,AYtEAt6Q,AvPAAA,AsKAAA,AnKAAA,CoPAL,AvPAA,AsKAA,AnKAA,IwOsEU,KAAK,IAAV,IAAkBs6Q,KAAK,KAAK,GAA7B,EAAkC,yCAAlC,CAAN;A3yC7hBF,A2yC8hBElyQ,AYtEC,AvPAA,AsKAA,AnKAA,EwOsEDA,KAAK,GAAGhG,KAAR;A3yC7hBF,A2yC8hBE,IAAEA,KAAF;A3yC7hBF,AuzCwdEqtC,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAGA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,KoPAK+hF,AvPAAA,AsKAAA,AnKAAA,SoPAT,AvPAA,AsKAA,AnKAA,IoPAsB/hF,AvPAAA,AsKAAA,AnKAAA,IoPA7B,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBE,AYtEAC,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,EwOsEEttC,CYtECstC,AvPAAA,AsKAAA,AnKAAA,IwOsEI,CYtEC,AvPAA,AsKAA,AnKAA,EwOsEE9zC,GYtEG41H,AvPAAA,AsKAAA,AnKAAA,GwOsElB,EAAuB,IYtEf,AvPAA,AsKAA,AnKAA,IoPAuB9hF,AvPAAA,AsKAAA,AnKAAA,KoPA/B,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBIy0R,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,EAAE,GAAG/xQ,AYtEA,AvPAA,AsKAA,AnKAA,CoPAC3iB,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CwOsEC,CAACrtC,CYtEC8xM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EwOsEE,EAAN,AYtEQ50M,AvPAAA,AsKAAA,AnKAAA,CwOsEnB,IYtEU,AvPAA,AsKAA,AnKAA,GoPAiB40M,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG50M,AvPAAA,AsKAAA,AnKAAA,KoPA3B,AvPAA,AsKAA,AnKAA,MoPAsCowC,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGpwC,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,IoPAIovM,AvPAAA,AsKAAA,AnKAAA,EoPAZ,AvPAA,AsKAA,AnKAA,GoPAiBpvM,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPAGovM,AvPAAA,AsKAAA,AnKAAA,EoPApE,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCvdF,AuzCwdC,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBI,QAAIy1H,EAAE,KAAK7pD,KAAX,EAAkB;A3yC7hBtB,A2yC8hBMA,AYtEN,AvPAA,AsKAA,AnKAA,MwOsEMA,GYtEGzyQ,AvPAAA,AsKAAA,AnKAAA,EwOsEE,GAAG,EAAR,EYtEN,AvPAA,AsKAA,AnKAA,CoPAoBob,AvPAAA,AsKAAA,AnKAAA,CoPApB,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA;AnkCvdvB,A2yC8hBM,AYtEJ,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,OoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,KoPAa,AvPAA,AsKAA,AnKAA,SoPApB,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBK,AYtEJ,AvPAA,AsKAA,AnKAA,KwOmEG,MAGO,IAAIkhT,EAAE,KAAK,IAAX,EAAiB;A3yC7hB5B,A2yC8hBMA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;A3yC7hBN,AuzCwdA,AvPAA,AsKAA,AnKAA,SoPAS8zM,AvPAAA,AsKAAA,AnKAAA,MoPAT,AvPAA,AsKAA,AnKAA,CoPAiBjzL,AvPAAA,AsKAAA,AnKAAA,CoPAjB,AvPAA,AsKAA,AnKAA,EoPAoB,AvPAA,AsKAA,AnKAA;AnkCvdpB,A2yC8hBM,AYtEJ,AvPAA,AsKAA,AnKAA,SoPAO5jB,AvPAAA,AsKAAA,AnKAAA,CwOsEC,CAAC8kU,EAAD,EYtEK,AvPAA,AsKAA,AnKAA,CoPACznU,AvPAAA,AsKAAA,AnKAAA,CwOsEC,CAACm1U,OYtET,AvPAA,AsKAA,AnKAA,CoPAiB5lU,AvPAAA,AsKAAA,AnKAAA,QwOsEQ,AYtEzB,AvPAA,AsKAA,AnKAA,CwOsE0Bk4T,AYtEA/oU,AvPAAA,AsKAAA,AnKAAA,EwOsEE,CAAC21E,CYtE7B,AvPAA,AsKAA,AnKAA,CoPA+B9tD,AvPAAA,AsKAAA,AnKAAA,CoPA/B,AvPAA,AsKAA,AnKAA,MoPAsC,AvPAA,AsKAA,AnKAA,CwOsEZ,CAAc,CAAd,CAAD,CAA5B,EAAgD,QYtEpD,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBQ,AYtEP,AvPAA,AsKAA,AnKAA,gBwOsEekhT,EAAR;A3yC7hBR,A2yC8hBU,eAAK,GAAL;A3yC7hBV,A2yC8hBU,AYtEV,AvPAA,AsKAA,AnKAA,SoPAS9hJ,AvPAAA,AsKAAA,AnKAAA,MwOsEM,GAAL,CYtEV,AvPAA,AsKAA,AnKAA,CoPAqBp/J,AvPAAA,AsKAAA,AnKAAA,CoPArB,AvPAA,AsKAA,AnKAA,EoPAwB,AvPAA,AsKAA,AnKAA;AnkCvdxB,A2yC8hBY,AYtEV,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIjb,AvPAAA,AsKAAA,AnKAAA,EwOsEEoqD,MAAM,CAAChwD,CYtEC,AvPAA,AsKAA,AnKAA,CoPAC6gB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACpI,AvPAAA,AsKAAA,AnKAAA,CwOsEL,CAAN,IYtEiB,AvPAA,AsKAA,AnKAA,CwOsEC,AYtEAslI,AvPAAA,AsKAAA,AnKAAA,GwOsEtB,EAA2B,GYtEb,AvPAA,AsKAA,AnKAA,CoPAF,AvPAA,AsKAA,AnKAA,CoPAtB,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBc,AYtEb,AvPAA,AsKAA,AnKAA,gBwOsEe/9I,KAAF;A3yC7hBd,A2yC8hBc+0G,cAAAA,GAAG,IAAIi7N,0BAA0B,EAAjC;A3yC7hBd,A2yC8hBa,AYtEb,AvPAA,AsKAA,AnKAA,SoPAStqU,AvPAAA,AsKAAA,AnKAAA,IwOmEG,IYnEZ,AvPAA,AsKAA,AnKAA,CoPAmBmb,AvPAAA,AsKAAA,AnKAAA,CwOsEA,AYtEnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBck0F,AYtEZ,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,KwOsEKA,EYtEEl0F,AvPAAA,AsKAAA,AnKAAA,CwOsEC,AYtER,AvPAA,AsKAA,AnKAA,IwOsEYivT,CYtEC,AvPAA,AsKAA,AnKAA,QoPApB,AvPAA,AsKAA,AnKAA,IwOsEgC,CAAC/N,EAAD,CAApB;A3yC7hBd,A2yC8hBa,AYtEZ,AvPAA,AsKAA,AnKAA;AnkCvdD;AACA,A2yC8hBY,AYtEZ,AvPAA,AsKAA,AnKAA,SoPAShuH,AvPAAA,AsKAAA,AnKAAA,QoPAT,AvPAA,AsKAA,AnKAA,CoPAmBlzL,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvdtB,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAO5jB,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC3C,AvPAAA,AsKAAA,AnKAAA,SoPAP,AvPAA,AsKAA,AnKAA,CoPAiBuP,AvPAAA,AsKAAA,AnKAAA,QoPAjB,AvPAA,AsKAA,AnKAA,CoPA0B7Q,AvPAAA,AsKAAA,AnKAAA,IoPA1B,AvPAA,AsKAA,AnKAA,CoPA+B6nB,AvPAAA,AsKAAA,AnKAAA,CoPA/B,AvPAA,AsKAA,AnKAA,MoPAsC,AvPAA,AsKAA,AnKAA,iBoPA7C,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBU,AYtET,AvPAA,AsKAA,AnKAA,ewOsEc,GAAL;A3yC7hBV,A2yC8hBYk0F,YAAAA,GAAG,IAAI,IAAP;A3yC7hBZ,A2yC8hBY,AYtEZ,AvPAA,AsKAA,AnKAA,SoPASxvG,AvPAAA,AsKAAA,AnKAAA,QoPAT,AvPAA,AsKAA,AnKAA,CoPAmBsb,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvdtB,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,OoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,KoPAa,AvPAA,AsKAA,AnKAA,QoPApB,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBU,AYtET,AvPAA,AsKAA,AnKAA,ewOsEc,GAAL;A3yC7hBV,A2yC8hBYk0F,YAAAA,GAAG,IAAI,IAAP;A3yC7hBZ,A2yC8hBY,AYtEZ,AvPAA,AsKAA,AnKAA,SoPAS52G,AvPAAA,AsKAAA,AnKAAA,GoPAT,AvPAA,AsKAA,AnKAA,CoPAc65C,AvPAAA,AsKAAA,AnKAAA,MoPAd,AvPAA,AsKAA,AnKAA,EoPAsB+5J,AvPAAA,AsKAAA,AnKAAA,IoPAtB,AvPAA,AsKAA,AnKAA,EoPA4B5D,AvPAAA,AsKAAA,AnKAAA,GoPA5B,AvPAA,AsKAA,AnKAA,EoPAiC,AvPAA,AsKAA,AnKAA;AnkCvdjC,AuzCwdE,AvPAA,AsKAA,AnKAA,MoPAIn2J,AvPAAA,AsKAAA,AnKAAA,MoPAJ,AvPAA,AsKAA,AnKAA,EoPAY,AvPAA,AsKAA,AnKAA;AnkCvdd,A2yC8hBU,AYtENA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,GoPAG+5J,AvPAAA,AsKAAA,AnKAAA,EwOsEE,EYtEE,AvPAA,AsKAA,AnKAA,CwOsEP,EYtEU13M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC29C,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CoPAcr0C,AvPAAA,AsKAAA,AnKAAA,GoPAd,AvPAA,AsKAA,AnKAA,CoPAkBkC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACpI,AvPAAA,AsKAAA,AnKAAA,OoPAF,AvPAA,AsKAA,AnKAA,CoPAU,AvPAA,AsKAA,AnKAA,QoPAV,AvPAA,AsKAA,AnKAA,EoPAoB,AvPAA,AsKAA,AnKAA,IoPApB,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAuDpD,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC29C,AvPAAA,AsKAAA,AnKAAA,MoPAD,AvPAA,AsKAA,AnKAA,CoPAzE,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBY+8D,AYtET,AvPAA,AsKAA,AnKAA,YwOsESA,GAAG,IAAI,IAAP;A3yC7hBZ,A2yC8hBY;A3yC7hBZ,AuzCwdE,AvPAA,AsKAA,AnKAA,QoPAMn7G,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGo+C,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,IoPAIA,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACx+C,AvPAAA,AsKAAA,AnKAAA,MoPA7B,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBU,AYvER,AvPAA,AsKAA,AnKAA,QoPCMo4L,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGuc,AvPAAA,AsKAAA,AnKAAA,CwOsEC,EYtEE,AvPAA,AsKAA,AnKAA,CwOsEP,GYtEWA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACnxM,AvPAAA,AsKAAA,AnKAAA,GoPAX,AvPAA,AsKAA,AnKAA,IoPAkBoxM,AvPAAA,AsKAAA,AnKAAA,MoPD9B,AvPAA,AsKAA,AnKAA;AnkCtdF,A2yC8hBYr5F,AYxEV,AvPAA,AsKAA,AnKAA,QoPEMpxG,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOsECoxG,EYtEElvG,AvPAAA,AsKAAA,AnKAAA,CwOsEC,AYtEA,AvPAA,AsKAA,AnKAA,IwOsEI,AYtEA+rL,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOsEV,AYtEWmgB,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAClsM,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPASmtM,AvPAAA,AsKAAA,AnKAAA,eoPAe,AvPAA,AsKAA,AnKAA,CoPACntM,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPA7B,AvPAA,AsKAA,AnKAA,CoPFpB,AvPAA,AsKAA,AnKAA;AnkCrdF,A2yC8hBY;A3yC7hBZ,AuzCwdE,AvPAA,AsKAA,AnKAA,MoPAIsY,AvPAAA,AsKAAA,AnKAAA,EoPAJ,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBU,eAAK,GAAL;A3yC7hBV,A2yC8hBY42F,AYtEV,AvPAA,AsKAA,AnKAA,MoPAI,AvPAA,AsKAA,AnKAA,CoPACn7G,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,EwOsEUm7G,AYtEA,AvPAA,AsKAA,AnKAA,GwOsEG,IAAI,IAAP;A3yC7hBZ,A2yC8hBY,AYtER52F,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,YoPAY,AvPAA,AsKAA,AnKAA;AnkCvdrB,AuzCwdM,AvPAA,AsKAA,AnKAA,aoPAO,AvPAA,AsKAA,AnKAA,EoPAP,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBU,AYtEL,AvPAA,AsKAA,AnKAA,KoPFD,AvPAA,AsKAA,AnKAA,UwOwEW,GAAL;A3yC7hBV,A2yC8hBY42F,AYtET,AvPAA,AsKAA,AnKAA,GoPJD,AvPAA,AsKAA,AnKAA,MoPIO,AvPAA,AsKAA,AnKAA,GwOsEGA,CYtECn7G,AvPAAA,AsKAAA,AnKAAA,EwOsEE,CYtEC,AvPAA,AsKAA,AnKAA,GwOsEG,EYtEE,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA,EoPAe,AvPAA,AsKAA,AnKAA,CwOsEZ;A3yC7hBZ,A2yC8hBY,AYtER,AvPAA,AsKAA,AnKAA,UoPAMoD,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG2G,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACq0C,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA;AnkCvdJ;AACA,A2yC8hBU,AYtEN75B,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,UoPAU0C,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBY,AYtEN,AvPAA,AsKAA,AnKAA,aoPAO,AvPAA,AsKAA,AnKAA,GwOsEG0uT,EYtEEvyU,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC6jB,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA,IwOsEsB,CAACkhT,EAAD,CAAhB,EAAsB;A3yC7hBlC,A2yC8hBcxjC,AYtET,AvPAA,AsKAA,AnKAA,KoPFD,AvPAA,AsKAA,AnKAA,SwOwEUA,IAAI,GAAG,WAAWjnQ,OAAX,CAAmByqS,EAAnB,CAAP,CADoB,CACW;A3yC7hB7C,AuzCwdG,AvPAA,AsKAA,AnKAA,GoPNM,AvPAA,AsKAA,AnKAA,MoPMA,AvPAA,AsKAA,AnKAA;AnkCvdT,A2yC8hBc,AYtEV,AvPAA,AsKAA,AnKAA,UoPAM/kU,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAGg7C,AvPAAA,AsKAAA,AnKAAA,EwOsEEumP,IAAI,AYtEA,AvPAA,AsKAA,AnKAA,CoPAC56R,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CwOsEW,AYtEAA,AvPAAA,AsKAAA,AnKAAA,CwOsEb,EAAgB,AYtEd,AvPAA,AsKAA,AnKAA,CoPAZ,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBgBmtU,gBAAAA,KAAK,GAAG,IAAR;A3yC7hBhB,A2yC8hBe,AYtEX3yT,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,UoPAU0C,AvPAAA,AsKAAA,AnKAAA,CoPAV,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA;AnkCvdtB,AuzCwdM,AvPAA,AsKAA,AnKAA,UoPAInjB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,KoPAKV,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,CoPAO6jB,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBc,AYvER,AvPAA,AsKAA,AnKAA,UoPCI3mB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPDR,AvPAA,AsKAA,AnKAA,GwOuEY8F,KAAK,GAAGxG,MAAR,IAAkB+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAlC,EAAmD;A3yC7hBjE,A2yC8hBgB8wU,gBAAAA,KAAK,GAAG,IAAR;A3yC7hBhB,A2yC8hBgBvyC,AYtEV,AvPAA,AsKAA,AnKAA,aoPAO,AvPAA,AsKAA,AnKAA,EoPAErkS,AvPAAA,AsKAAA,AnKAAA,CwOsECqkS,AYtEH,AvPAA,AsKAA,AnKAA,GoPAM3kS,AvPAAA,AsKAAA,AnKAAA,CwOsEC,EYtEd,AvPAA,AsKAA,AnKAA,CwOsEiB2kS,CYtEC7gS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOsEE,EYtEE,AvPAA,AsKAA,AnKAA,CwOsEC,CAAP,GAAW,CYtECV,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC9C,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,CoPAO2mB,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA,CwOsEqByW,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB,CAFiD,CAEM;A3yC7hBvE,A2yC8hBgB;A3yC7hBhB,AuzCwdM,AvPAA,AsKAA,AnKAA,aoPAOtC,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBgB,AYtEX,AvPAA,AsKAA,AnKAA,KoPPD,AvPAA,AsKAA,AnKAA,ewO6EgB,OAAO45B,OAAP,CAAeyqS,EAAf,KAAsB,CAAtB,IAA2B/hU,KAAK,GAAGxG,MAAnC,IAA6C+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAA7D,EAA8E;A3yC7hB9F,A2yC8hBkBu+R,AYtEf,AvPAA,AsKAA,AnKAA,kBwOsEeA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB;A3yC7hBlB,A2yC8hBiB;A3yC7hBjB,A2yC8hBe,AYtEb,AvPAA,AsKAA,AnKAA,SoPAO+yM,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPAC50L,AvPAAA,AsKAAA,AnKAAA,EoPAD,AvPAA,AsKAA,AnKAA,EoPAK65B,AvPAAA,AsKAAA,AnKAAA,MoPAL,AvPAA,AsKAA,AnKAA,EoPAa,AvPAA,AsKAA,AnKAA,KoPAb,AvPAA,AsKAA,AnKAA,CoPAf,AvPAA,AsKAA,AnKAA;AnkCvdF,AuzCwdC,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBc+8D,cAAAA,GAAG,IAAIvvG,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;A3yC7hBd,A2yC8hBa,AYtEb,AvPAA,AsKAA,AnKAA,SoPASvqF,AvPAAA,AsKAAA,AnKAAA,IwOoDG,AYpDZ,AvPAA,AsKAA,AnKAA,CoPAe35M,AvPAAA,AsKAAA,AnKAAA,KwOsEI,AYtEnB,AvPAA,AsKAA,AnKAA,EoPAsB23M,AvPAAA,AsKAAA,AnKAAA,IoPAtB,AvPAA,AsKAA,AnKAA,EoPA4B,AvPAA,AsKAA,AnKAA;AnkCvd5B,A2yC8hBcj9F,AYtEZ,AvPAA,AsKAA,AnKAA,QoPAM67F,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGv2M,AvPAAA,AsKAAA,AnKAAA,CwOsEC06G,GAAG,CYtEC,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CwOsEGgtN,AYtEnB,AvPAA,AsKAA,AnKAA,EwOsEY;A3yC7hBd,A2yC8hBa,AYvEX,AvPAA,AsKAA,AnKAA,QoPCMlxH,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGsC,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC94M,AvPAAA,AsKAAA,AnKAAA,KoPAD,AvPAA,AsKAA,AnKAA,CoPDf,AvPAA,AsKAA,AnKAA;AnkCtdF,AuzCsdE,AvPAA,AsKAA,AnKAA,QoPEMwL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACmsM,AvPAAA,AsKAAA,AnKAAA,IoPFX,AvPAA,AsKAA,AnKAA;AnkCrdF,A2yC8hBY,AYtEV,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,CoPACnsM,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,GoPAK+qM,AvPAAA,AsKAAA,AnKAAA,EoPAL,AvPAA,AsKAA,AnKAA,GoPAU/qM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAUgrM,AvPAAA,AsKAAA,AnKAAA,EoPAV,AvPAA,AsKAA,AnKAA,GoPAeD,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG/qM,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIgrM,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGD,AvPAAA,AsKAAA,AnKAAA,EoPAT,AvPAA,AsKAA,AnKAA,CoPAtC,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yCkeQ,AYVP,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBO,OA9DD,MA8DO;A3yC7hBb,A2yC8hBQ,AYtER,AvPAA,AsKAA,AnKAA,MoPAMqB,AvPAAA,AsKAAA,AnKAAA,MwOsEM8vH,EAAE,KAAK,GYtEG,AvPAA,AsKAA,AnKAA,CwOsEV,EYtEa,AvPAA,AsKAA,AnKAA,EwOsEE/xQ,GYtE3B,AvPAA,AsKAA,AnKAA,EoPAgC,AvPAA,AsKAA,AnKAA,CwOsEC,CAAChwD,KAAD,CAAN,KAAkB,IAArC,EAA2C;A3yC7hBnD,A2yC8hBU,YAAEA,KAAF;A3yC7hBV,A2yC8hBS,AYtET,AvPAA,AsKAA,AnKAA,SoPASi0M,AvPAAA,AsKAAA,AnKAAA,QoPAT,AvPAA,AsKAA,AnKAA,CoPAmB/B,AvPAAA,AsKAAA,AnKAAA,OoPAnB,AvPAA,AsKAA,AnKAA,EoPA4B,AvPAA,AsKAA,AnKAA;AnkCvd5B,A2yC8hBO,AYtELA,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,OoPAD,AvPAA,AsKAA,AnKAA,IoPAYD,AvPAAA,AsKAAA,AnKAAA,gBoPAtB,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBK,AYtEH,AvPAA,AsKAA,AnKAA,KwOAS,CYAL/iC,AvPAAA,AsKAAA,AnKAAA,IoPAJ,AvPAA,AsKAA,AnKAA,CwOsES,CYtEC77E,AvPAAA,AsKAAA,AnKAAA,GwOsEGo8O,CYtEb,AvPAA,AsKAA,AnKAA,EoPAgB9tU,AvPAAA,AsKAAA,AnKAAA,IoPAhB,AvPAA,AsKAA,AnKAA,SwOsE6B,CAACogU,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;A3yC7hBnD,A2yC8hBM;A3yC7hBN,A2yC8hBK,AYtEH,AvPAA,AsKAA,AnKAA,KwOoES,GYpEHgjI,AvPAAA,AsKAAA,AnKAAA,GwOsEG,EYtEE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,MoPAM,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBM58F,AYtEFm6D,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOsEEn6D,EYtEE,AvPAA,AsKAA,AnKAA,CwOsEC,EYtEE,AvPAA,AsKAA,AnKAA,EwOsEEgtN,AYtET,AvPAA,AsKAA,AnKAA,EwOsEE;A3yC7hBN,A2yC8hBK,AYtED1uO,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAP,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBG,AYtEC1xF,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCvdJ,AuzCwdG,AvPAA,AsKAA,AnKAA,GoPJD,AvPAA,AsKAA,AnKAA;AnkCndF,A2yC8hBE,MAAIu2Q,KAAK,KAAK,EAAd,EAAkB;A3yC7hBpB,A2yC8hBI63D,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,IYtEI3mP,AvPAAA,AsKAAA,AnKAAA,MwOsEM,AYtEA,AvPAA,AsKAA,AnKAA,CwOsEC,EAAD,AYtEG,AvPAA,AsKAA,AnKAA,CoPACjrF,AvPAAA,AsKAAA,AnKAAA,CwOsECowU,EYtEF,AvPAA,AsKAA,AnKAA,EoPAMrxU,AvPAAA,AsKAAA,AnKAAA,KoPAN,AvPAA,AsKAA,AnKAA,KoPAgB,AvPAA,AsKAA,AnKAA,QwOsEnB,EAA6B+xU,OAA7B,CAAV;A3yC7hBJ,A2yC8hBG,AYtEC,AvPAA,AsKAA,AnKAA,QoPAI,AvPAA,AsKAA,AnKAA,EoPAEttU,AvPAAA,AsKAAA,AnKAAA,IoPAF,AvPAA,AsKAA,AnKAA,GoPASuwM,AvPAAA,AsKAAA,AnKAAA,OoPAb,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvd1B,AuzCwdM7+G,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,GoPAG67E,AvPAAA,AsKAAA,AnKAAA,IoPAP,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBE,AYtEIA,AvPAAA,AsKAAA,AnKAAA,MoPAAA,AvPAAA,AsKAAA,AnKAAA,GwOsEG,CYtEC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAP,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBI/0J,AYtEExY,AvPAAA,AsKAAA,AnKAAA,IwOsEFwY,EYtEExY,AvPAAA,AsKAAA,AnKAAA,EwOsEE,EAAE+rU,AYtEA,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,cwOqEG;A3yC5hBT,A2yC8hBIxwU,AYtEC,AvPAA,AsKAA,AnKAA,IwOsEDA,KAAK,EAAE63G,GAFF;A3yC3hBT,A2yC8hBI+7N,IAAAA,KAAK,EAAEA,KAHF;A3yC1hBT,A2yC8hBI9qU,AYtEA,AvPAA,AsKAA,AnKAA,IwOsEAA,KAAK,EAAEA,AYtEAkpK,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CwOkEN,AYlEO/wK,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,GoPAYjB,AvPAAA,AsKAAA,AnKAAA,KoPAnB,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBI2O,AYtED,AvPAA,AsKAA,AnKAA,GoPRD,AvPAA,AsKAA,AnKAA,CwO8EEA,GAAG,EAAE7L;A3yC7hBT,A2yCwhBS,GAAP;A3yCvhBF,A2yC8hBC,AYtEC2xM,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA;AnkCvdP,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA;AnkCvdT,A2yC8hBA,AYtEIA,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,KwOsEKs/H,AYvEA,AvPAA,AsKAA,AnKAA,UwOuET,CAAoBj1K,OAApB,EAA6Bl/J,KAA7B,EAAoC;A3yC7hBpC,A2yC8hBE,AYtEE0C,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOsEE8kC,CYtEC,AvPAA,AsKAA,AnKAA,EwOsEE,AYtEAnmC,AvPAAA,AsKAAA,AnKAAA,GwOsEG69J,AYtEA,AvPAA,AsKAA,AnKAA,IoPAIx8J,AvPAAA,AsKAAA,AnKAAA,GwOsEd,AYtEiB,AvPAA,AsKAA,AnKAA,CoPAC0vK,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,EoPAO/wK,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,IoPAkBqB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC6zF,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,EoPAOl1F,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CoPF5B,AvPAA,AsKAA,AnKAA;AnkCrdT,AuzCwdInB,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAEmB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,IoPAIqB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC0vK,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,EoPAO/wK,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAiB+wK,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC/wK,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPArB,AvPAA,AsKAA,AnKAA,GoPA6BqB,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC6zF,AvPAAA,AsKAAA,AnKAAA,IoPAD,AvPAA,AsKAA,AnKAA,EoPAOl1F,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAiBirF,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACjrF,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAMk1F,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACl1F,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAV,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA,GoPA0CixH,AvPAAA,AsKAAA,AnKAAA,SoPH9E,AvPAA,AsKAA,AnKAA;AnkCpdT,A2yC8hBE,AYtEEvyH,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOsEEC,CYtEC,AvPAA,AsKAA,AnKAA,EoPAE,AvPAA,AsKAA,AnKAA,CoPACqB,AvPAAA,AsKAAA,AnKAAA,CwOsEC,CAACm5B,CYtEH,AvPAA,AsKAA,AnKAA,EoPAMp6B,AvPAAA,AsKAAA,AnKAAA,IwOsET,CAAc,AYtEX,AvPAA,AsKAA,AnKAA,GwOsEH,EYtEmBsC,AvPAAA,AsKAAA,AnKAAA,GwOsEG,AYtEA,AvPAA,AsKAA,AnKAA,CwOsE1B,AYtE2B0vK,AvPAAA,AsKAAA,AnKAAA,EwOsEE,EYtEH,AvPAA,AsKAA,AnKAA,EoPAO/wK,AvPAAA,AsKAAA,AnKAAA,GoPAP,AvPAA,AsKAA,AnKAA,CoPAH,AvPAA,AsKAA,AnKAA,GoPAiB+wK,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC/wK,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,GoPAYjB,AvPAAA,AsKAAA,AnKAAA,KoPA7B,AvPAA,AsKAA,AnKAA,GoPAqCksF,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACjrF,AvPAAA,AsKAAA,AnKAAA,GoPAD,AvPAA,AsKAA,AnKAA,EoPAMjB,AvPAAA,AsKAAA,AnKAAA,KoPAN,AvPAA,AsKAA,AnKAA;AnkCvdpE,A2yC8hBI,AY3EK,AvPAA,AsKAA,AnKAA,GoPAP,AvPAA,AsKAA,AnKAA;AnkCldF,A2yC8hBI,AYtEH,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBI;A3yC7hBJ,A2yC8hBI,AYtEJ,AvPAA,AsKAA,AnKAA,SoPASg3M,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,CoPAgBlS,AvPAAA,AsKAAA,AnKAAA,OoPAhB,AvPAA,AsKAA,AnKAA,EoPAyBmQ,AvPAAA,AsKAAA,AnKAAA,MoPAzB,AvPAA,AsKAA,AnKAA,EoPAiCC,AvPAAA,AsKAAA,AnKAAA,MoPAjC,AvPAA,AsKAA,AnKAA,EoPAyCxuL,AvPAAA,AsKAAA,AnKAAA,MoPAzC,AvPAA,AsKAA,AnKAA,EoPAiD,AvPAA,AsKAA,AnKAA;AnkCvdjD,A2yC8hBI,AYtEF,AvPAA,AsKAA,AnKAA,QoPAMyuL,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGF,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC34M,AvPAAA,AsKAAA,AnKAAA,MoPAlB,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBI,AYvEF,AvPAA,AsKAA,AnKAA,QoPCMoI,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGwwM,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC54M,AvPAAA,AsKAAA,AnKAAA,MoPDlB,AvPAA,AsKAA,AnKAA;AnkCtdF,A2yC8hBI,AYtEF,AvPAA,AsKAA,AnKAA,MoPAI,AvPAA,AsKAA,AnKAA,CoPACoI,AvPAAA,AsKAAA,AnKAAA,EoPAL,AvPAA,AsKAA,AnKAA,EoPAS,AvPAA,AsKAA,AnKAA,OoPAOuwM,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA;AnkCvdX,A2yC8hBI,AYtEF,AvPAA,AsKAA,AnKAA,MoPAI,AvPAA,AsKAA,AnKAA,CoPACE,AvPAAA,AsKAAA,AnKAAA,EoPAL,AvPAA,AsKAA,AnKAA,EoPAS,AvPAA,AsKAA,AnKAA,OoPAOD,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA;AnkCvdX,A2yC8hBI9tK,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,GAAG,CYtECguK,AvPAAA,AsKAAA,AnKAAA,EwOsEEhuK,GAAG,CAAC7mC,AYtEA,AvPAA,AsKAA,AnKAA,GoPAGmmB,AvPAAA,AsKAAA,AnKAAA,IwOsEP,CAAY,CYtEC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAIuuL,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACrsM,AvPAAA,AsKAAA,AnKAAA,QwOsE5B,EAAsC,CAACikM,AYtEtB,AvPAA,AsKAA,AnKAA,CoPAuBsI,AvPAAA,AsKAAA,AnKAAA,CwOsEF,CYtEI,AvPAA,AsKAA,AnKAA,CwOsEC6+H,EAAL,AYtEOtvU,AvPAAA,AsKAAA,AnKAAA,EoPA5B,AvPAA,AsKAA,AnKAA,CoPAzB,AvPAA,AsKAA,AnKAA,EwOsE0D;A3yC7hB5D,A2yC8hBM,AYtEJ,AvPAA,AsKAA,AnKAA,MoPAIg5F,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EwOsEEk6B,CYtEC,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,MwOsEgB,CAACo8M,EAAD,EAAK,EAAL,CAAR,IAAoB,QAAxB,EAAkC;A3yC7hBxC,A2yC8hBQ,AYvEN,AvPAA,AsKAA,AnKAA,MoPCI3+H,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPDT,AvPAA,AsKAA,AnKAA,GwOuEa,GAAP;A3yC7hBR,A2yC8hBO,AYxEL,AvPAA,AsKAA,AnKAA,MoPEIr4M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPFR,AvPAA,AsKAA,AnKAA;AnkCrdF;AACA,A2yC8hBM61U,AYtEJ,AvPAA,AsKAA,AnKAA,MwOsEIA,GYtEGn1O,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGy3G,AvPAAA,AsKAAA,AnKAAA,EwOsEE,AYtEP,AvPAA,AsKAA,AnKAA,CwOsEQ,EAAD,CYtEIE,AvPAAA,AsKAAA,AnKAAA,CwOsECs8H,CYtEC,AvPAA,AsKAA,AnKAA,GoPAGjtU,AvPAAA,AsKAAA,AnKAAA,EoPAvB,AvPAA,AsKAA,AnKAA,EoPA2B,AvPAA,AsKAA,AnKAA,EoPAE1H,AvPAAA,AsKAAA,AnKAAA,CoPA7B,AvPAA,AsKAA,AnKAA,EoPAgC,AvPAA,AsKAA,AnKAA,OwOsElB,CAAV;A3yC7hBN,A2yC8hBK,AYtEDo4M,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,CwOgEM,EAMH70M,GYtEG,AvPAA,AsKAA,AnKAA,CoPACvD,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CwOgEM,CAMK,CYtEC8nM,AvPAAA,AsKAAA,AnKAAA,OoPAO,AvPAA,AsKAA,AnKAA,CoPACmQ,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACv3G,AvPAAA,AsKAAA,AnKAAA,EoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,EoPAaw3G,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACG,AvPAAA,AsKAAA,AnKAAA,EoPAD,AvPAA,AsKAA,AnKAA,CoPAnB,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,CwOgEN,EAMwC,AYtEA,AvPAA,AsKAA,AnKAA,CoPAlC,AvPAA,AsKAA,AnKAA,EwOgEN,CAAN,AYhEkDH,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACG,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EoPAH,AvPAA,AsKAA,AnKAA,CoPA5C,AvPAA,AsKAA,AnKAA,GoPAqDJ,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACv3G,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,EoPAH,AvPAA,AsKAA,AnKAA,CoPAvE,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBG,AYtEA,AvPAA,AsKAA,AnKAA,GwOmDiC,CAmBhC;A3yC7hBJ;AACA,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GoPAGy3G,AvPAAA,AsKAAA,AnKAAA,EoPAZ,AvPAA,AsKAA,AnKAA,EoPAgB,AvPAA,AsKAA,AnKAA,EoPAEz3G,AvPAAA,AsKAAA,AnKAAA,EoPAF,AvPAA,AsKAA,AnKAA,EoPAM,AvPAA,AsKAA,AnKAA,EoPAE1gG,AvPAAA,AsKAAA,AnKAAA,CoPAxB,AvPAA,AsKAA,AnKAA,EoPA2B,AvPAA,AsKAA,AnKAA;AnkCvd7B,A2yC8hBE,AYtEEo4M,AvPAAA,AsKAAA,AnKAAA,IoPAAA,AvPAAA,AsKAAA,AnKAAA,EwOsEE,IYtEI,AvPAA,AsKAA,AnKAA,CoPACp4M,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAYi4M,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACv3G,AvPAAA,AsKAAA,AnKAAA,EoPAD,AvPAA,AsKAA,AnKAA,CoPAlB,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBI,AYtED,AvPAA,AsKAA,AnKAA,QwOsEKi6B,MAAJ,CAAWvwF,GAAX;A3yC7hBJ,A2yC8hBG,GAFD,CAEE,OAAO1rC,CAAP,EAAU;A3yC7hBd,A2yC8hBIm3U,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,KYtEKx9H,AvPAAA,AsKAAA,AnKAAA,EoPAE,AvPAA,AsKAA,AnKAA,GwOsEG,AYtEA3wM,AvPAAA,AsKAAA,AnKAAA,CwOsEC,CYtEb,AvPAA,AsKAA,AnKAA,CwOsEY,CYtEI,AvPAA,AsKAA,AnKAA,CwOsECitU,CYtECt8H,AvPAAA,AsKAAA,AnKAAA,EoPAF,AvPAA,AsKAA,AnKAA,EoPAM,AvPAA,AsKAA,AnKAA,EoPAEr4M,AvPAAA,AsKAAA,AnKAAA,CoPAxB,AvPAA,AsKAA,AnKAA,EoPA2B,AvPAA,AsKAA,AnKAA,UwOsEf,CAAV;A3yC7hBJ,A2yC8hBG,AYtECo4M,AvPAAA,AsKAAA,AnKAAA,GwO4CgC,CA0BhC,AYtEAA,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACp4M,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAYk4M,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACG,AvPAAA,AsKAAA,AnKAAA,EoPAD,AvPAA,AsKAA,AnKAA,CoPAlB,AvPAA,AsKAA,AnKAA;AnkCvdJ,A2yC8hBE,AYtEC,AvPAA,AsKAA,AnKAA;AnkCvdH,A2yC8hBE;A3yC7hBF,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAOD,AvPAAA,AsKAAA,AnKAAA,MoPAP,AvPAA,AsKAA,AnKAA;AnkCvdF,AuzCwdC,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBE,MAAI;A3yC7hBN,A2yC8hBI,AYtEJ,AvPAA,AsKAA,AnKAA,SoPAS9vM,AvPAAA,AsKAAA,AnKAAA,EwOsEE,IAAIqyH,AYtEf,AvPAA,AsKAA,AnKAA,CoPAiB9f,AvPAAA,AsKAAA,AnKAAA,GoPAjB,AvPAA,AsKAA,AnKAA,EwOsEW,AYtEW/qE,AvPAAA,AsKAAA,AnKAAA,CwOsEAgyH,GYtEtB,AvPAA,AsKAA,AnKAA,EoPA4B,AvPAA,AsKAA,AnKAA,EwOsEjB,EAAoBl/J,KAApB,CAAP;A3yC7hBJ,A2yC8hBG,AYtED,AvPAA,AsKAA,AnKAA,GwOoEA,CAEE,EYtEEY,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CwOsECyzU,CYtET,AvPAA,AsKAA,AnKAA,QwOsEE,EAAkB;A3yC7hBtB,A2yC8hBI,WAAO,IAAP;A3yC7hBJ,A2yC8hBG,AYtED,AvPAA,AsKAA,AnKAA,SoPAO,AvPAA,AsKAA,AnKAA,EoPAEnnS,AvPAAA,AsKAAA,AnKAAA,IoPAF,AvPAA,AsKAA,AnKAA,IoPAU,AvPAA,AsKAA,AnKAA,CoPAjB,AvPAA,AsKAA,AnKAA,EoPAoBtsC,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAIq3G,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBC;A3yC7hBD,AuzCwdE,AvPAA,AsKAA,AnKAA,SoPAOr3G,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBA,AYtEC,AvPAA,AsKAA,AnKAA,SwOsEQ0zU,cAAT,GAA0B;A3yC7hB1B,A2yC8hBE,MAAIrP,EAAJ,EAAQhtN,GAAR,EAAas8N,WAAb,EAA0BC,UAA1B,EAAsCt9Q,IAAtC;A3yC7hBF,A2yC8hBE+tQ,AYtEF,AvPAA,AsKAA,AnKAA,EwOsEEA,EAAE,GAAG/xQ,EYtEE/jD,AvPAAA,AsKAAA,AnKAAA,GoPAT,AvPAA,AsKAA,AnKAA,CwOsEa,AYtEC8oG,AvPAAA,AsKAAA,AnKAAA,CwOsEA/0G,EYtEd,AvPAA,AsKAA,AnKAA,EoPAmBxG,AvPAAA,AsKAAA,AnKAAA,CwOsEN,CAAX,IYtEF,AvPAA,AsKAA,AnKAA,EoPA2Bg5M,AvPAAA,AsKAAA,AnKAAA,OoPA3B,AvPAA,AsKAA,AnKAA,EoPAoCC,AvPAAA,AsKAAA,AnKAAA,KoPApC,AvPAA,AsKAA,AnKAA,EoPA2C,AvPAA,AsKAA,AnKAA;AnkCvd3C,A2yC8hBE9xM,AYtEA,AvPAA,AsKAA,AnKAA,EwOsEAA,MAAM,AYtEAgG,AvPAAA,AsKAAA,AnKAAA,CwOsECo7T,AYtEA,AvPAA,AsKAA,AnKAA,EwOsEE,CYtECvvH,AvPAAA,AsKAAA,AnKAAA,IwOsEI,GAAR,AYtEW,AvPAA,AsKAA,AnKAA,EwOsEE,EYtEE,AvPAA,AsKAA,AnKAA,GoPArB,AvPAA,AsKAA,AnKAA,+CwOsEM,CAAN;A3yC7hBF,A2yC8hBEz9F,AYvEA,AvPAA,AsKAA,AnKAA,EwOuEAA,GAAG,GAAG/kD,AYtEAtyD,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGq3G,AvPAAA,AsKAAA,AnKAAA,EwOsEE,CAAC/0G,AYtEA,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EwOsEE,AYvElB,AvPAA,AsKAA,AnKAA,EwOuEY,CAAZ;A3yC7hBF,A2yC8hBEqxU,AYxEA,AvPAA,AsKAA,AnKAA,EwOwEAA,MYtEMjpU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG5O,AvPAAA,AsKAAA,AnKAAA,CwOsEC,GAAG,EYtEE,AvPAA,AsKAA,AnKAA,GwOsEhB,AYtEmBkE,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAClE,AvPAAA,AsKAAA,AnKAAA,MoPFrB,AvPAA,AsKAA,AnKAA;AnkCrdF,A2yC8hBE83U,AYtEA,AvPAA,AsKAA,AnKAA,EwOsEAA,OYtEOlpU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOsEE,EYtEE,AvPAA,AsKAA,AnKAA,CwOsEC,AYtEN,AvPAA,AsKAA,AnKAA,GoPAS1K,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,CwOsEP,EYtEoB+0M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,MoPAV,AvPAA,AsKAA,AnKAA,GoPAmBjwM,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACmE,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAIyB,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAe1K,AvPAAA,AsKAAA,AnKAAA,CoPAlC,AvPAA,AsKAA,AnKAA,GoPAsC+0M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,QoPAV,AvPAA,AsKAA,AnKAA,GoPAqBjwM,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACmE,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAEyB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAL,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAuB1K,AvPAAA,AsKAAA,AnKAAA,CoPAvB,AvPAA,AsKAA,AnKAA,GoPA2B8E,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACmE,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI1G,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACoC,AvPAAA,AsKAAA,AnKAAA,IoPAL,AvPAA,AsKAA,AnKAA,CoPAU+F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,CoPAJ,AvPAA,AsKAA,AnKAA,CoPAtD,AvPAA,AsKAA,AnKAA,GoPA8E1K,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG8E,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACmE,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAIyB,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,CoPAlJ,AvPAA,AsKAA,AnKAA;AnkCvdF,AuzCwdC,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBE,AYrEF,AvPAA,AsKAA,AnKAA,SwOqESpI,KAAK,GAAGxG,MAAf,EAAuB;A3yC7hBzB,A2yC8hBIuoU,AYrEJ,AvPAA,AsKAA,AnKAA,IwOqEIA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;A3yC7hBJ,A2yC8hBI+0G,AYrEJ,AvPAA,AsKAA,AnKAA,IwOqEIA,GAAG,IAAIgtN,EAAP;A3yC7hBJ,AuzCydA,AvPAA,AsKAA,AnKAA;AnkCxdA,A2yC8hBI,QAAIA,EAAE,KAAK,IAAX,EAAiB;A3yC7hBrB,A2yC8hBMA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX,CADe,CACO;A3yC7hB5B,AuzCwdA,AvPAA,AsKAA,AnKAA,SoPAS8wM,AvPAAA,AsKAAA,AnKAAA,IoPAT,AvPAA,AsKAA,AnKAA,CoPAez2M,AvPAAA,AsKAAA,AnKAAA,KoPAf,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBM,AYtEJ,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,CwOsECo1U,IYtEI,AvPAA,AsKAA,AnKAA,IoPAIt8H,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC94M,AvPAAA,AsKAAA,AnKAAA,GwOsEG,CAAC0nU,CYtEL,AvPAA,AsKAA,AnKAA,CwOsEO,AYtEX,AvPAA,AsKAA,AnKAA,CwOsEYpzP,EYtEEt0E,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,CwOsEV,AYtElB,AvPAA,AsKAA,AnKAA,CwOsEgC,CAAd,CAAD,CAApB,AYtEsC,AvPAA,AsKAA,AnKAA,CoPA1C,AvPAA,AsKAA,AnKAA,CwOsE4C;A3yC7hB9C,A2yC8hBQ01U,AYtEP,AvPAA,AsKAA,AnKAA,QwOsEOA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;A3yC7hBR,A2yC8hBO;A3yC7hBP,AuzCwdA,AvPAA,AsKAA,AnKAA,SoPASp8H,AvPAAA,AsKAAA,AnKAAA,CoPAT,AvPAA,AsKAA,AnKAA,CoPAWryM,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,EoPAc,AvPAA,AsKAA,AnKAA;AnkCvdd,A2yC8hBM00G,AYtEJ,AvPAA,AsKAA,AnKAA,MwOsEIA,GAAG,AYtEAxzG,AvPAAA,AsKAAA,AnKAAA,IwOsEIwgU,EAAP,CYtEU,AvPAA,AsKAA,AnKAA,CoPAC1hU,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,GoPAa,AvPAA,AsKAA,AnKAA,MoPAMA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACsD,AvPAAA,AsKAAA,AnKAAA,GoPAF,AvPAA,AsKAA,AnKAA,CoPAM+uM,AvPAAA,AsKAAA,AnKAAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAiB,AvPAA,AsKAA,AnKAA,GoPA9B,AvPAA,AsKAA,AnKAA,GoPAoCQ,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPAC7yM,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,IoPAekF,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPAClF,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA,GoPA6B,AvPAA,AsKAA,AnKAA;AnkCvd1E,A2yC8hBK,AYtEH,AvPAA,AsKAA,AnKAA,KwO8DE,MAQO,IAAIovU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;A3yC7hBnD,A2yC8hBMohQ,AYtEJ5zR,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,IwOsEI4zR,AYtEA,AvPAA,AsKAA,AnKAA,CoPAC1zR,AvPAAA,AsKAAA,AnKAAA,SwOsES,AYtEd,AvPAA,AsKAA,AnKAA,CwOsEe,AYtEAh8C,AvPAAA,AsKAAA,AnKAAA,CoPAf,AvPAA,AsKAA,AnKAA,CwOsEc,CYtEI5C,AvPAAA,AsKAAA,AnKAAA,CwOsECqxU,MYtEnB,AvPAA,AsKAA,AnKAA,CoPA0B,AvPAA,AsKAA,AnKAA,QoPA1B,AvPAA,AsKAA,AnKAA,EoPAoC,AvPAA,AsKAA,AnKAA,QwOsEtB,CAAV,AYtEJ,AvPAA,AsKAA,AnKAA,EoPA+CrxU,AvPAAA,AsKAAA,AnKAAA,OoPA/C,AvPAA,AsKAA,AnKAA,CoPAuD,AvPAA,AsKAA,AnKAA,QoPAvD,AvPAA,AsKAA,AnKAA,EoPAiE,AvPAA,AsKAA,AnKAA,SoPAjE,AvPAA,AsKAA,AnKAA,CoPF2C,AvPAA,AsKAA,AnKAA,GoPEmC4C,AvPAAA,AsKAAA,AnKAAA,CoPF9E,AvPAA,AsKAA,AnKAA;AnkCrdF,A2yC8hBK,AYtEJ,AvPAA,AsKAA,AnKAA,KwOoEU,MAEA,IAAIgxU,WAAJ,EAAiB;A3yC7hB5B,A2yC8hBM,UAAItP,EAAE,KAAK,GAAX,EAAgB;A3yC7hBtB,A2yC8hBQsP,AYtER,AvPAA,AsKAA,AnKAA,QwOsEQA,CYtECl9H,AvPAAA,AsKAAA,AnKAAA,SoPAT,AvPAA,AsKAA,AnKAA,CwOsEmB,AYtECtzL,AvPAAA,AsKAAA,AnKAAA,CoPApB,AvPAA,AsKAA,AnKAA,EwOsEsB,AYtEC,AvPAA,AsKAA,AnKAA,KwOsEf;A3yC7hBR,A2yC8hBO,AYtEL,AvPAA,AsKAA,AnKAA,SoPAOA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,IoPAaA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,EoPAnB,AvPAA,AsKAA,AnKAA,GoPAwB,AvPAA,AsKAA,AnKAA,IoPAxB,AvPAA,AsKAA,AnKAA,GoPA+B,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,IoPAMA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,OoPAZ,AvPAA,AsKAA,AnKAA,IoPAuBA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,GoPA7B,AvPAA,AsKAA,AnKAA,GoPAmC,AvPAA,AsKAA,AnKAA,KoPAnC,AvPAA,AsKAA,AnKAA,GoPA2C,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACA,AvPAAA,AsKAAA,AnKAAA,CoPAnF,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBK,AYtEJ,AvPAA,AsKAA,AnKAA,KwOkEU,MAIA;A3yC7hBX,A2yC8hBM,UAAIkhT,EAAE,KAAK,GAAX,EAAgB;A3yC7hBtB,A2yC8hBQuP,AYtER,AvPAA,AsKAA,AnKAA,MoPAM3+H,AvPAAA,AsKAAA,AnKAAA,EwOsEE2+H,UAAU,CYtEC,AvPAA,AsKAA,AnKAA,EwOsEE,CYtECzwT,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,EwOsEf,EYtEmBnb,AvPAAA,AsKAAA,AnKAAA,QoPAQ,AvPAA,AsKAA,AnKAA,CoPACmb,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,GoPAcA,AvPAAA,AsKAAA,AnKAAA,CoPAd,AvPAA,AsKAA,AnKAA,GoPAkBizL,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPACjzL,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,GoPAYA,AvPAAA,AsKAAA,AnKAAA,CoPAZ,AvPAA,AsKAA,AnKAA,GoPAgBmvD,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPAC5zB,AvPAAA,AsKAAA,AnKAAA,KoPAL,AvPAA,AsKAA,AnKAA,CoPAWv7B,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,CoPA7D,AvPAA,AsKAA,AnKAA;AnkCvdA,A2yC8hBQ;A3yC7hBR,A2yC8hBO,AYtEP,AvPAA,AsKAA,AnKAA,OwOmEM,EYnEGuzL,AvPAAA,AsKAAA,AnKAAA,IwOsEI,EYtEb,AvPAA,AsKAA,AnKAA,CoPAiBvzL,AvPAAA,AsKAAA,AnKAAA,CwOsEAkhT,AYtEjB,AvPAA,AsKAA,AnKAA,EwOsEmB,AYtECnvH,AvPAAA,AsKAAA,AnKAAA,KwOsEI,CYtExB,AvPAA,AsKAA,AnKAA,EwOsEa,AYtEe,AvPAA,AsKAA,AnKAA,EwOsEC;A3yC7hB7B,A2yC8hBQy+H,AYtENz+H,AvPAAA,AsKAAA,AnKAAA,EoPAAA,AvPAAA,AsKAAA,AnKAAA,MwOsEMy+H,AYtEA,AvPAA,AsKAA,AnKAA,GoPAGz+H,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,EwOsEE,EYtEED,AvPAAA,AsKAAA,AnKAAA,CwOsEC,IAAd,QYtEN,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBO,AYtEL,AvPAA,AsKAA,AnKAA,SoPAO9xL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAL,AvPAA,AsKAA,AnKAA,IoPAaA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,EoPAnB,AvPAA,AsKAA,AnKAA,GoPAwB,AvPAA,AsKAA,AnKAA,IoPAxB,AvPAA,AsKAA,AnKAA,GoPA+B+xL,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,CoPAC/xL,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPA5C,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBK,AYtEJ,AvPAA,AsKAA,AnKAA;AnkCvdD,A2yC8hBG;A3yC7hBH,AuzCwdA,AvPAA,AsKAA,AnKAA,SoPAShX,AvPAAA,AsKAAA,AnKAAA,QoPAT,AvPAA,AsKAA,AnKAA,CoPAmBgX,AvPAAA,AsKAAA,AnKAAA,CoPAnB,AvPAA,AsKAA,AnKAA,EoPAsB,AvPAA,AsKAA,AnKAA;AnkCvdtB,A2yC8hBE,AYtEA,AvPAA,AsKAA,AnKAA,MwOsEI,CAACywT,EYtEEzwT,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,GwOsEZ,CYtEO,AvPAA,AsKAA,AnKAA,CwOsEU,GYtEGA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,EoPAnB,AvPAA,AsKAA,AnKAA,GoPAwB,AvPAA,AsKAA,AnKAA,IoPAxB,AvPAA,AsKAA,AnKAA,GoPA+BA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPA1C,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBIkvT,AYtEH,AvPAA,AsKAA,AnKAA,IwOsEGA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;A3yC7hBJ,A2yC8hBG,GAtCuB,CAsCtB;A3yC7hBJ,AuzCwdA,AvPAA,AsKAA,AnKAA,SoPASz6H,AvPAAA,AsKAAA,AnKAAA,KoPAT,AvPAA,AsKAA,AnKAA,CoPAgBxzL,AvPAAA,AsKAAA,AnKAAA,CoPAhB,AvPAA,AsKAA,AnKAA,EoPAmB,AvPAA,AsKAA,AnKAA;AnkCvdnB,AuzCwdE,AvPAA,AsKAA,AnKAA,QoPAMnjB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPAV,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBEs2D,AYvEA,AvPAA,AsKAA,AnKAA,EwOuEAA,IAAI,EYtEE5rD,AvPAAA,AsKAAA,AnKAAA,CwOsEC2sG,AYtEA,AvPAA,AsKAA,AnKAA,GwOsEG,AYtEAl0F,AvPAAA,AsKAAA,AnKAAA,CwOsEC2Y,AYtEA,AvPAA,AsKAA,AnKAA,CoPAChgC,AvPAAA,AsKAAA,AnKAAA,KwOsEL,CAAW,AYvElB,AvPAA,AsKAA,AnKAA,CwOuEO,EAAcu7G,GAAG,CAACv7G,MAAJ,GAAa,CAA3B,CAAP;A3yC7hBF,A2yC8hBE,SAAO;A3yC7hBT,A2yC8hBI0D,AYtEF,AvPAA,AsKAA,AnKAA,IwOsEEA,GYtEG,AvPAA,AsKAA,AnKAA,EwOsEE,EAAE82D,AYtEA95D,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GwOqEH,AYrEM,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgBA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGkO,AvPAAA,AsKAAA,AnKAAA,CoPApB,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA,EoPAElO,AvPAAA,AsKAAA,AnKAAA,CoPAzB,AvPAA,AsKAA,AnKAA,EoPA4BwD,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACmjB,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC3mB,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAF,AvPAA,AsKAA,AnKAA,CoPAD,AvPAA,AsKAA,AnKAA,GoPAU,AvPAA,AsKAA,AnKAA,IoPAV,AvPAA,AsKAA,AnKAA;AnkCvd9B,A2yC8hBIq3U,IAAAA,OAAO,EAAEx8N;A3yC7hBb,A2yC2hBS,AYnEP,AvPAA,AsKAA,AnKAA,GwOmEA,MYnEOr3G,AvPAAA,AsKAAA,AnKAAA,CoPAP,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBC,AYtEA,AvPAA,AsKAA,AnKAA;AnkCvdD;AACA,A2yC8hBA,AYtEA,AvPAA,AsKAA,AnKAA,SwOsES8zU,AYtEAl9H,AvPAAA,AsKAAA,AnKAAA,QoPAT,AvPAA,AsKAA,AnKAA,CoPAmBv/F,AvPAAA,AsKAAA,AnKAAA,GoPAnB,AvPAA,AsKAA,AnKAA,EoPAwBv7G,AvPAAA,AsKAAA,AnKAAA,CwOsExB,GAA2B,EYtE3B,AvPAA,AsKAA,AnKAA,EoPAgCi5M,AvPAAA,AsKAAA,AnKAAA,KoPAhC,AvPAA,AsKAA,AnKAA,EoPAuCI,AvPAAA,AsKAAA,AnKAAA,QoPAvC,AvPAA,AsKAA,AnKAA,EoPAiD,AvPAA,AsKAA,AnKAA;AnkCvdjD,A2yC8hBE,AYtEA,AvPAA,AsKAA,AnKAA,MwOsEIkvH,EAAJ,AYtEMnpU,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOsECm8G,EYtEE89F,AvPAAA,AsKAAA,AnKAAA,CwOsEV,EAAa/1M,KAAb,AYtEkB,AvPAA,AsKAA,AnKAA,IoPAI,AvPAA,AsKAA,AnKAA,IoPAZ,AvPAA,AsKAA,AnKAA,GoPAmB+1M,AvPAAA,AsKAAA,AnKAAA,QoPAnB,AvPAA,AsKAA,AnKAA,GoPA8B,AvPAA,AsKAA,AnKAA,QoPAxC,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBE99F,AYvEA,AvPAA,AsKAA,AnKAA,EwOuEAA,GAAG,GAAG,AYtEAr3G,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOsEP,EYtEUq3G,AvPAAA,AsKAAA,AnKAAA,GoPAG,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,EoPDhB,AvPAA,AsKAA,AnKAA;AnkCtdF,A2yC8hBEj4G,AYxEA,AvPAA,AsKAA,AnKAA,EwOwEAA,KAAK,CYtECsL,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CwOsEC,EAAR,AYtEU1K,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAClE,AvPAAA,AsKAAA,AnKAAA,MoPFZ,AvPAA,AsKAA,AnKAA;AnkCrdF,AuzCqdE,AvPAA,AsKAA,AnKAA,QoPGMwS,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/L,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACK,AvPAAA,AsKAAA,AnKAAA,GoPAL,AvPAA,AsKAA,AnKAA,CoPAS,AvPAA,AsKAA,AnKAA,CoPAT,AvPAA,AsKAA,AnKAA,EoPAY9G,AvPAAA,AsKAAA,AnKAAA,MoPAM,AvPAA,AsKAA,AnKAA,GoPAGZ,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPACY,AvPAAA,AsKAAA,AnKAAA,MoPAvB,AvPAA,AsKAA,AnKAA,CoPHV,AvPAA,AsKAA,AnKAA;AnkCpdF,A2yC8hBE,AYtEA,AvPAA,AsKAA,AnKAA,SwOsEOwG,AYtEAoI,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,IwOsEI,AYtEA5O,AvPAAA,AsKAAA,AnKAAA,GwOsEGA,GYtER,AvPAA,AsKAA,AnKAA,GwOsEP,AYtEqBkE,AvPAAA,AsKAAA,AnKAAA,CoPAd,AvPAA,AsKAA,AnKAA,CwOsEgB,EYtEE+0M,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,MoPAV,AvPAA,AsKAA,AnKAA,GoPAmB75M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG8E,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC6F,AvPAAA,AsKAAA,AnKAAA,KoPAF,AvPAA,AsKAA,AnKAA,CoPAQ6E,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG4D,AvPAAA,AsKAAA,AnKAAA,CoPAZ,AvPAA,AsKAA,AnKAA,CoPAvB,AvPAA,AsKAA,AnKAA,GoPAwCymM,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,KoPAK,AvPAA,AsKAA,AnKAA,QoPAV,AvPAA,AsKAA,AnKAA,GoPAqB/0M,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC6F,AvPAAA,AsKAAA,AnKAAA,KoPAF,AvPAA,AsKAA,AnKAA,CoPAQ,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAWtD,AvPAAA,AsKAAA,AnKAAA,IoPAI,AvPAA,AsKAA,AnKAA,CoPACoC,AvPAAA,AsKAAA,AnKAAA,IoPAL,AvPAA,AsKAA,AnKAA,CoPAU2J,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAd,AvPAA,AsKAA,AnKAA,CoPAX,AvPAA,AsKAA,AnKAA,IoPA+BpT,AvPAAA,AsKAAA,AnKAAA,CoPA/B,AvPAA,AsKAA,AnKAA,GoPAmC8E,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC6F,AvPAAA,AsKAAA,AnKAAA,KoPAF,AvPAA,AsKAA,AnKAA,CoPAQ6E,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAC,AvPAA,AsKAA,AnKAA,EoPAE4D,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,CoPAxD,AvPAA,AsKAA,AnKAA,GoPAiFtO,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,CoPAC6F,AvPAAA,AsKAAA,AnKAAA,KoPAF,AvPAA,AsKAA,AnKAA,CoPAQ,AvPAA,AsKAA,AnKAA,CoPAR,AvPAA,AsKAA,AnKAA,EoPAWyI,AvPAAA,AsKAAA,AnKAAA,CoPAX,AvPAA,AsKAA,AnKAA,IoPAgBpT,AvPAAA,AsKAAA,AnKAAA,CoPAlK,AvPAA,AsKAA,AnKAA;AnkCvdF,A2yC8hBImpU,AYtEH,AvPAA,AsKAA,AnKAA,IwOsEGA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;A3yC7hBJ;AACA,A2yC8hBI,AYtEJ,AvPAA,AsKAA,AnKAA,QwOsEQ,CAAC2vU,AYtEAp7H,AvPAAA,AsKAAA,AnKAAA,UoPAT,AvPAA,AsKAA,AnKAA,CoPAqBl6M,AvPAAA,AsKAAA,AnKAAA,KwOsEI,AYtEzB,AvPAA,AsKAA,AnKAA,CwOsE0B0nU,CYtEE1sT,AvPAAA,AsKAAA,AnKAAA,CwOsEA,CAACs5D,IYtE7B,AvPAA,AsKAA,AnKAA,EoPAoCmkI,AvPAAA,AsKAAA,AnKAAA,IwOsEV,CAAc,CAAd,CAAD,AYtEzB,AvPAA,AsKAA,AnKAA,CwOsEI,CYtEyC,AvPAA,AsKAA,AnKAA,CwOsEA;A3yC7hB7C,A2yC8hBM,AYtEJ,AvPAA,AsKAA,AnKAA,MoPAIz4M,AvPAAA,AsKAAA,AnKAAA,KoPAJ,AvPAA,AsKAA,AnKAA,EoPAW,AvPAA,AsKAA,AnKAA;AnkCvdb,A2yC8hBK,AYtED,AvPAA,AsKAA,AnKAA,QoPAIgb,AvPAAA,AsKAAA,AnKAAA,MoPAJ,AvPAA,AsKAA,AnKAA,EoPAY,AvPAA,AsKAA,AnKAA;AnkCvdhB,AuzCwdM,AvPAA,AsKAA,AnKAA,YoPAMjN,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG/N,AvPAAA,AsKAAA,AnKAAA,KoPAK,AvPAA,AsKAA,AnKAA,CoPACb,AvPAAA,AsKAAA,AnKAAA,MoPAhB,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBI,MAAEwG,KAAF;A3yC7hBJ,AuzCwdM,AvPAA,AsKAA,AnKAA,WoPAK,AvPAA,AsKAA,AnKAA,IoPAI9F,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAG,AvPAA,AsKAA,AnKAA,CoPAb,AvPAA,AsKAA,AnKAA,EoPAgBA,AvPAAA,AsKAAA,AnKAAA,CoPAC,AvPAA,AsKAA,AnKAA,GoPAGkO,AvPAAA,AsKAAA,AnKAAA,CoPApB,AvPAA,AsKAA,AnKAA,EoPAuB,AvPAA,AsKAA,AnKAA,EoPAElO,AvPAAA,AsKAAA,AnKAAA,CoPAzB,AvPAA,AsKAA,AnKAA,EoPA4B,AvPAA,AsKAA,AnKAA;AnkCvdlC,A2yC8hBI,AYtEI,AvPAA,AsKAA,AnKAA,QwOsEA6nU,EAAE,IYtEInkU,AvPAAA,AsKAAA,AnKAAA,CwOsEC,AYtEA,AvPAA,AsKAA,AnKAA,GoPAGyX,AvPAAA,AsKAAA,AnKAAA,CwOsEV,IAAerV,CYtEC,AvPAA,AsKAA,AnKAA,CoPAC3F,AvPAAA,AsKAAA,AnKAAA,GwOsEG,EYtEE,AvPAA,AsKAA,AnKAA,CwOsECb,AYtEAU,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,CoPAN,AvPAA,AsKAA,AnKAA,CoPAhB,AvPAA,AsKAA,AnKAA,GwOsEJ,EAAmC;A3yC7hBvC,A2yC8hBM61U,AYtEE,AvPAA,AsKAA,AnKAA,MwOsEFA,MYtEMnyU,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOk1M,AvPAAA,AsKAAA,AnKAAA,CwOsEC,CAAC,EAAD,EAAKy7H,CYtEC,AvPAA,AsKAA,AnKAA,CoPAC3wU,AvPAAA,AsKAAA,AnKAAA,CoPAD,AvPAA,AsKAA,AnKAA,EoPAI1D,AvPAAA,AsKAAA,AnKAAA,CoPAJ,AvPAA,AsKAA,AnKAA,EoPAOG,AvPAAA,AsKAAA,AnKAAA,KoPAP,AvPAA,AsKAA,AnKAA,CoPAP,AvPAA,AsKAA,AnKAA,QwOsEC,EAA6B40U,OAA7B,CAAV;A3yC7hBN,A2yC8hBK,AYtEE,AvPAA,AsKAA,AnKAA,KwOoEH,MAEO;A3yC7hBX,A2yC8hBMnyU,AYtED,AvPAA,AsKAA,AnKAA,KoPPD,AvPAA,AsKAA,AnKAA,CwO6EEA,KAAK,AYtEA,AvPAA,AsKAA,AnKAA,IwOsEIilU,EAAT;A3yC7hBN,A2yC8hBMhtN,AYtEA16G,AvPAAA,AsKAAA,AnKAAA,MwOsEA06G,AYtEA16G,AvPAAA,AsKAAA,AnKAAA,GwOsEG,EYtEE,AvPAA,AsKAA,AnKAA,CoPAC2D,AvPAAA,AsKAAA,AnKAAA,CwOsEC+jU,EAAP,IYtEA,AvPAA,AsKAA,AnKAA,CoPAcjvH,AvPAAA,AsKAAA,AnKAAA,OoPAd,AvPAA,AsKAA,AnKAA;AnkCvdN,A2yC8hBK,AYtEA,AvPAA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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A;AACA;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;;ACDA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC9RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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CA;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9qBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUAj9L,MAAM,CAACC,OAAP,GAAiBk9L,MAAjB;AAEA,IAAI1kE,cAAc,GAAG5zH,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAtC;;AAEA,SAAS0kE,MAAT,GAAkB;AACd,MAAI9kJ,MAAM,GAAG,EAAb;;AAEA,OAAK,IAAIv2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,SAAS,CAACT,MAA9B,EAAsCU,CAAC,EAAvC,EAA2C;AACvC,QAAI81D,MAAM,GAAG/1D,SAAS,CAACC,CAAD,CAAtB;;AAEA,SAAK,IAAIiE,GAAT,IAAgB6xD,MAAhB,EAAwB;AACpB,UAAI6gE,cAAc,CAAC73H,IAAf,CAAoBg3D,MAApB,EAA4B7xD,GAA5B,CAAJ,EAAsC;AAClCsyC,QAAAA,MAAM,CAACtyC,GAAD,CAAN,GAAc6xD,MAAM,CAAC7xD,GAAD,CAApB;AACH;AACJ;AACJ;;AAED,SAAOsyC,MAAP;AACH;;AClBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,cAEA;AACA;AACA;;AACA,SAASogF,cAAT,CAAwBl2G,GAAxB,EAA6Bs2D,IAA7B,EAAmC;AACjC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;;AACA;;;;;;;;AAGO,MAAM6jH,cAAc,GAAG;AAC5B,eAAa;AACX5/E,IAAAA,GAAG,EACC,sFAFO;AAGX6/E,IAAAA,MAAM,EAAE;AAHG,GADe;AAM5B,gBAAc;AACZ7/E,IAAAA,GAAG,EACC,qFAFQ;AAGZ6/E,IAAAA,MAAM,EAAE;AAHI,GANc;AAW5B,iBAAe;AACb7/E,IAAAA,GAAG,EACC,2FAFS;AAGb6/E,IAAAA,MAAM,EAAE;AAHK,GAXa;AAgB5B,eAAa;AACX7/E,IAAAA,GAAG,EAAE,iEADM;AAEX6/E,IAAAA,MAAM,EAAE;AAFG;AAMf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA9B8B,CAAvB;;;AA+BA,MAAMC,QAAN,CAAe;AACpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEtwL,EAAAA,WAAW,CAACuwL,cAAD,EAAiBC,UAAjB,EAA6BC,SAA7B,EAAwCC,UAAxC,EAAoD;AAC7DC,IAAAA,EAAE,CAACvjF,IAAH,CAAQvyG,MAAR,CACI41L,SAAS,GAAG,CADhB,EAEK,wDAAuDA,SAAU,EAFtE;AAGAE,IAAAA,EAAE,CAACvjF,IAAH,CAAQvyG,MAAR,CACI61L,UAAU,GAAG,CADjB,EAEK,yDAAwDA,UAAW,EAFxE;;AAIA,QAAI,CAACH,cAAL,EAAqB;AACnB,YAAM,IAAI59L,KAAJ,CAAU,mCAAV,CAAN;AACD;;AAED,SAAKi+L,eAAL,GAAuBL,cAAvB;AAEA,SAAKM,WAAL,GAAmBL,UAAnB;AACA,SAAKM,QAAL,GAAgBN,UAAU,CAAC98L,MAA3B;AACA,SAAKq9L,UAAL,GAAkBN,SAAlB;AACA,SAAKO,WAAL,GAAmBN,UAAnB;AAEA,SAAKO,WAAL;AACA,SAAKC,wBAAL;AACD;AAED;AACF;AACA;AACA;AACA;;;AACEX,EAAAA,cAAc,GAAG;AACf,WAAO,KAAKK,eAAZ;AACD;AAED;AACF;AACA;AACA;AACA;;;AACEO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKL,QAAZ;AACD;AAED;AACF;AACA;;;AACEL,EAAAA,SAAS,GAAG;AACV,WAAO,KAAKM,UAAZ;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEK,EAAAA,WAAW,GAAG;AACZ,WAAO,KAAKC,YAAZ;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEC,EAAAA,aAAa,CAACl4C,WAAD,EAAc;AACzB,SAAKm4C,4BAAL;;AAEA,QAAIn4C,WAAW,IAAI,IAAnB,EAAyB;AACvBA,MAAAA,WAAW,GAAG,KAAKo4C,oBAAL,CAA0B99L,MAAxC;AACD;;AAED,UAAM+9L,QAAQ,GAAG,IAAId,EAAE,CAAC/pL,YAAP,CAAoB,CACjCwyI,WADiC,EACpB,KAAK23C,UADe,EACH,KAAKM,YADF,CAApB,CAAjB;AAEA,UAAMK,QAAQ,GAAI,IAAIf,EAAE,CAAC/pL,YAAP,CAAoB,CAACwyI,WAAD,EAAc,KAAKi4C,YAAnB,CAApB,CAAlB;;AACA,SAAK,IAAIj9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGglJ,WAApB,EAAiC,EAAEhlJ,CAAnC,EAAsC;AACpC,YAAMu9L,UAAU,GAAG,KAAKH,oBAAL,CACf,KAAKI,gBAAL,GAAwB,KAAKJ,oBAAL,CAA0B99L,MADnC,CAAnB;;AAEA,WAAK,IAAI2K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0yL,UAAzB,EAAqC,EAAE1yL,CAAvC,EAA0C;AACxCozL,QAAAA,QAAQ,CAAC16L,GAAT,CAAa,CAAb,EAAgB3C,CAAhB,EAAmBiK,CAAnB,EAAsB,KAAKwzL,QAAL,CAAcF,UAAU,GAAGtzL,CAA3B,CAAtB;AACD;;AACDqzL,MAAAA,QAAQ,CAAC36L,GAAT,CAAa,CAAb,EAAgB3C,CAAhB,EAAmB,KAAKy9L,QAAL,CAAcF,UAAU,GAAG,KAAKZ,UAAhC,CAAnB;AACA,WAAKa,gBAAL;AACD;;AACD,WAAO,CAACH,QAAQ,CAAC94J,QAAT,EAAD,EAAsB+4J,QAAQ,CAAC/4J,QAAT,EAAtB,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEm5J,EAAAA,cAAc,CAAC53L,KAAD,EAAQ;AACpB,WAAO,KAAK63L,QAAL,CAAc73L,KAAd,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACE83L,EAAAA,aAAa,CAACllF,IAAD,EAAO;AAClB,UAAM7jG,OAAO,GAAG,EAAhB;;AACA,SAAK,IAAI7U,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG04G,IAAI,CAACp5G,MAAzB,EAAiC,EAAEU,CAAnC,EAAsC;AACpC6U,MAAAA,OAAO,CAAC5U,IAAR,CAAa,KAAK09L,QAAL,CAAcvgK,OAAd,CAAsBs7E,IAAI,CAAC14G,CAAD,CAA1B,CAAb;AACD;;AACD,WAAO6U,OAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEgpL,EAAAA,cAAc,GAAG;AACf,UAAMC,UAAU,GACZ/3L,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACC,MAAL,MAAiB,KAAK02L,QAAL,GAAgB,KAAKC,UAArB,GAAkC,CAAnD,CAAX,CADJ;AAEA,UAAMoB,SAAS,GAAG,KAAK1zG,MAAL,CAAYyzG,UAAZ,EAAwBA,UAAU,GAAG,KAAKnB,UAA1C,CAAlB;AACA,WAAO,CAACoB,SAAD,EAAY,KAAKH,aAAL,CAAmBG,SAAnB,CAAZ,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE1zG,EAAAA,MAAM,CAACyzG,UAAD,EAAaE,QAAb,EAAuB;AAC3B,WAAO,KAAKvB,WAAL,CAAiBpzL,KAAjB,CAAuBy0L,UAAvB,EAAmCE,QAAnC,CAAP;AACD;AAED;AACF;AACA;;;AACEnB,EAAAA,WAAW,GAAG;AACZ,SAAKc,QAAL,GAAgB,EAAhB;;AACA,SAAK,IAAI39L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK08L,QAAzB,EAAmC,EAAE18L,CAArC,EAAwC;AACtC,UAAI,KAAK29L,QAAL,CAAcvgK,OAAd,CAAsB,KAAKq/J,WAAL,CAAiBz8L,CAAjB,CAAtB,MAA+C,CAAC,CAApD,EAAuD;AACrD,aAAK29L,QAAL,CAAc19L,IAAd,CAAmB,KAAKw8L,WAAL,CAAiBz8L,CAAjB,CAAnB;AACD;AACF;;AACD,SAAKi9L,YAAL,GAAoB,KAAKU,QAAL,CAAcr+L,MAAlC;AACD;AAED;AACF;AACA;;;AACEw9L,EAAAA,wBAAwB,GAAG;AACzB,SAAKW,QAAL,GAAgB,IAAI7zI,WAAJ,CAAgB,KAAKg0I,aAAL,CAAmB,KAAKnB,WAAxB,CAAhB,CAAhB;AACD;AAED;AACF;AACA;;;AACEU,EAAAA,4BAA4B,GAAG;AAC7B;AACA,SAAKC,oBAAL,GAA4B,EAA5B;;AACA,SAAK,IAAIp9L,CAAC,GAAG,CAAb,EACIA,CAAC,GAAG,KAAK08L,QAAL,GAAgB,KAAKC,UAArB,GAAkC,CAD1C,EAEI38L,CAAC,IAAI,KAAK48L,WAFd,EAE2B;AACzB,WAAKQ,oBAAL,CAA0Bn9L,IAA1B,CAA+BD,CAA/B;AACD,KAP4B,CAS7B;;;AACAu8L,IAAAA,EAAE,CAACvjF,IAAH,CAAQrzG,OAAR,CAAgB,KAAKy3L,oBAArB;AACA,SAAKI,gBAAL,GAAwB,CAAxB;AACD;;AAvLmB;AA0LtB;AACA;AACA;AACA;AACA;AACA;;;;;AACO,eAAeS,aAAf,CAA6B9gF,SAA7B,EAAwC+gF,QAAxC,EAAkD;AACvD,QAAMhH,EAAE,GAAG/+G,OAAO,CAAC,IAAD,CAAlB;;AACA,SAAO,qBAAY,OAAOvvE,OAAP,EAAgBC,MAAhB,KAA2B;AAC5C,QAAI,CAACquL,EAAE,CAACiH,UAAH,CAAcD,QAAd,CAAD,IAA4BhH,EAAE,CAACkH,SAAH,CAAaF,QAAb,EAAuBz2L,IAAvB,KAAgC,CAAhE,EAAmE;AACjE,YAAM42L,YAAY,GAAGnH,EAAE,CAACoH,iBAAH,CAAqBJ,QAArB,CAArB;AACA/7L,MAAAA,OAAO,CAAC6N,GAAR,CAAa,yBAAwBmtG,SAAU,OAAM+gF,QAAS,KAA9D;AACAK,MAAAA,KAAK,CAACz7L,GAAN,CAAUq6G,SAAV,EAAqBoK,QAAQ,IAAI;AAC/BA,QAAAA,QAAQ,CAACi3E,IAAT,CAAcH,YAAd;AACAA,QAAAA,YAAY,CAACx9L,EAAb,CAAgB,QAAhB,EAA0B,MAAM;AAC9Bw9L,UAAAA,YAAY,CAACz+E,KAAb,CAAmB,MAAMh3G,OAAO,EAAhC;AACD,SAFD;AAGAy1L,QAAAA,YAAY,CAACx9L,EAAb,CAAgB,OAAhB,EAAyBuiB,GAAG,IAAIva,MAAM,CAACua,GAAD,CAAtC;AACD,OAND;AAOD,KAVD,MAUO;AACL,aAAOxa,OAAO,EAAd;AACD;AACF,GAdM,CAAP;AAeD;;;;;;;;;;;;;ACnPD;;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS61L,WAAT,CAAqBpC,SAArB,EAAgCW,WAAhC,EAA6C0B,cAA7C,EAA6D;AAClE,MAAI,CAAC5+L,KAAK,CAACuH,OAAN,CAAcq3L,cAAd,CAAL,EAAoC;AAClCA,IAAAA,cAAc,GAAG,CAACA,cAAD,CAAjB;AACD;;AAED,QAAM71D,KAAK,GAAG0zD,EAAE,CAACvrC,UAAH,EAAd;;AACA,OAAK,IAAIhxJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0+L,cAAc,CAACp/L,MAAnC,EAA2C,EAAEU,CAA7C,EAAgD;AAC9C,UAAM2+L,aAAa,GAAGD,cAAc,CAAC1+L,CAAD,CAApC;AACA6oI,IAAAA,KAAK,CAACloH,GAAN,CAAU47K,EAAE,CAACjpD,MAAH,CAAUg7B,IAAV,CAAe;AACvBtU,MAAAA,KAAK,EAAE2kC,aADgB;AAEvBj5B,MAAAA,eAAe,EAAE1lK,CAAC,GAAG0+L,cAAc,CAACp/L,MAAf,GAAwB,CAFtB;AAGvBwQ,MAAAA,UAAU,EAAE9P,CAAC,KAAK,CAAN,GAAU,CAACq8L,SAAD,EAAYW,WAAZ,CAAV,GAAqC9nE;AAH1B,KAAf,CAAV;AAKD;;AACD2T,EAAAA,KAAK,CAACloH,GAAN,CACI47K,EAAE,CAACjpD,MAAH,CAAUu5B,KAAV,CAAgB;AAAC7S,IAAAA,KAAK,EAAEgjC,WAAR;AAAqBj3I,IAAAA,UAAU,EAAE;AAAjC,GAAhB,CADJ;AAGA,SAAO8iF,KAAP;AACD;;AAEM,SAAS+1D,YAAT,CAAsB/1D,KAAtB,EAA6B3Z,YAA7B,EAA2C;AAChD,QAAM6zB,SAAS,GAAGw5C,EAAE,CAACvpE,KAAH,CAASI,OAAT,CAAiBlE,YAAjB,CAAlB;AACA2Z,EAAAA,KAAK,CAACylB,OAAN,CAAc;AAACvL,IAAAA,SAAS,EAAEA,SAAZ;AAAuB4F,IAAAA,IAAI,EAAE;AAA7B,GAAd;AACAxmJ,EAAAA,OAAO,CAAC6N,GAAR,CAAa,qCAAoCk/G,YAAa,EAA9D;AACA2Z,EAAAA,KAAK,CAAC0nB,OAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,eAAesuC,QAAf,CACHh2D,KADG,EACIi2D,QADJ,EACcC,SADd,EACyBC,gBADzB,EAC2C/sJ,SAD3C,EACsDg1G,eADtD,EAEHne,SAFG,EAEQ;AACb,OAAK,IAAI9oI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG++L,SAApB,EAA+B,EAAE/+L,CAAjC,EAAoC;AAClC,UAAM,CAACsqB,EAAD,EAAKuuE,EAAL,IAAWimG,QAAQ,CAAC5B,aAAT,CAAuB8B,gBAAvB,CAAjB;AACA,UAAMn2D,KAAK,CAAC6nB,GAAN,CAAUpmI,EAAV,EAAcuuE,EAAd,EAAkB;AACtB4yC,MAAAA,MAAM,EAAE,CADc;AAEtBx5F,MAAAA,SAAS,EAAEA,SAFW;AAGtBg1G,MAAAA,eAHsB;AAItBne,MAAAA;AAJsB,KAAlB,CAAN;AAMAx+G,IAAAA,EAAE,CAAC7I,OAAH;AACAo3E,IAAAA,EAAE,CAACp3E,OAAH;AACD;AACF;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,eAAew9K,YAAf,CACHp2D,KADG,EACIi2D,QADJ,EACcI,eADd,EAC+B5/L,MAD/B,EACuC6/L,WADvC,EAEHC,oBAFG,EAEmB;AACxB,QAAM/C,SAAS,GAAGxzD,KAAK,CAACj6H,MAAN,CAAa,CAAb,EAAgBpH,KAAhB,CAAsB,CAAtB,CAAlB;AACA,QAAMw1L,WAAW,GAAGn0D,KAAK,CAACj6H,MAAN,CAAa,CAAb,EAAgBpH,KAAhB,CAAsB,CAAtB,CAApB,CAFwB,CAIxB;;AACA03L,EAAAA,eAAe,GAAGA,eAAe,CAAC71L,KAAhB,EAAlB;AAEA,MAAIg2L,SAAS,GAAG,EAAhB;;AACA,SAAOA,SAAS,CAAC//L,MAAV,GAAmBA,MAA1B,EAAkC;AAChC;AACA,UAAMggM,WAAW,GACb,IAAI/C,EAAE,CAAC/pL,YAAP,CAAoB,CAAC,CAAD,EAAI6pL,SAAJ,EAAeW,WAAf,CAApB,CADJ,CAFgC,CAKhC;;AACA,SAAK,IAAIh9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq8L,SAApB,EAA+B,EAAEr8L,CAAjC,EAAoC;AAClCs/L,MAAAA,WAAW,CAAC38L,GAAZ,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB3C,CAAtB,EAAyBk/L,eAAe,CAACl/L,CAAD,CAAxC;AACD;;AACD,UAAMgrB,KAAK,GAAGs0K,WAAW,CAAC/6J,QAAZ,EAAd,CATgC,CAWhC;AACA;;AACA,UAAM7a,MAAM,GAAGm/G,KAAK,CAAC2nB,OAAN,CAAcxlI,KAAd,CAAf,CAbgC,CAehC;;AACA,UAAMu0K,WAAW,GAAGC,MAAM,CAACjD,EAAE,CAAC5nL,OAAH,CAAW+U,MAAX,CAAD,EAAqBy1K,WAArB,CAA1B;AACA,UAAMM,UAAU,GAAGX,QAAQ,CAACpB,cAAT,CAAwB6B,WAAxB,CAAnB;;AACA,QAAIH,oBAAoB,IAAI,IAA5B,EAAkC;AAChC,YAAMA,oBAAoB,CAACK,UAAD,CAA1B;AACD;;AAEDJ,IAAAA,SAAS,IAAII,UAAb;AACAP,IAAAA,eAAe,GAAGA,eAAe,CAAC71L,KAAhB,CAAsB,CAAtB,CAAlB;AACA61L,IAAAA,eAAe,CAACj/L,IAAhB,CAAqBs/L,WAArB,EAxBgC,CA0BhC;;AACAv0K,IAAAA,KAAK,CAACvJ,OAAN;AACAiI,IAAAA,MAAM,CAACjI,OAAP;AACD;;AACD,SAAO49K,SAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,MAAT,CAAgB9wH,KAAhB,EAAuBywH,WAAvB,EAAoC;AACzC,SAAO5C,EAAE,CAACv1K,IAAH,CAAQ,MAAM;AACnB,UAAM6nB,MAAM,GAAG0tJ,EAAE,CAAC30J,GAAH,CAAO20J,EAAE,CAACvsL,GAAH,CAAO0+D,KAAP,CAAP,EAAsB3oE,IAAI,CAACK,GAAL,CAAS+4L,WAAT,EAAsB,IAAtB,CAAtB,CAAf;AACA,UAAMO,YAAY,GAAG,KAArB,CAFmB,CAGnB;AACA;;AACA,WAAOnD,EAAE,CAACphH,WAAH,CAAetsC,MAAf,EAAuB,CAAvB,EAA0B,IAA1B,EAAgC6wJ,YAAhC,EAA8C5rL,QAA9C,GAAyD,CAAzD,CAAP;AACD,GANM,CAAP;AAOD;;ACpJD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;;ACFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA,IAAI6rL,aAAa,GAAG,UAAS9yL,CAAT,EAAYkB,CAAZ,EAAe;AAC/B4xL,EAAAA,aAAa,GAAG58L,MAAM,CAAC+wH,cAAP,IACX;AAAE8rE,IAAAA,SAAS,EAAE;AAAb,eAA6B9/L,KAA7B,IAAsC,UAAU+M,CAAV,EAAakB,CAAb,EAAgB;AAAElB,IAAAA,CAAC,CAAC+yL,SAAF,GAAc7xL,CAAd;AAAkB,GAD/D,IAEZ,UAAUlB,CAAV,EAAakB,CAAb,EAAgB;AAAE,SAAK,IAAIu2B,CAAT,IAAcv2B,CAAd,EAAiB,IAAIhL,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqCiP,CAArC,EAAwCu2B,CAAxC,CAAJ,EAAgDz3B,CAAC,CAACy3B,CAAD,CAAD,GAAOv2B,CAAC,CAACu2B,CAAD,CAAR;AAAc,GAFrG;;AAGA,SAAOq7J,aAAa,CAAC9yL,CAAD,EAAIkB,CAAJ,CAApB;AACH,CALD;;AAOO,SAAS8xL,SAAT,CAAmBhzL,CAAnB,EAAsBkB,CAAtB,EAAyB;AAC5B4xL,EAAAA,aAAa,CAAC9yL,CAAD,EAAIkB,CAAJ,CAAb;;AACA,WAAS+xL,EAAT,GAAc;AAAE,SAAKl0L,WAAL,GAAmBiB,CAAnB;AAAuB;;AACvCA,EAAAA,CAAC,CAACzM,SAAF,GAAc2N,CAAC,KAAK,IAAN,GAAahL,MAAM,CAAC60L,MAAP,CAAc7pL,CAAd,CAAb,IAAiC+xL,EAAE,CAAC1/L,SAAH,GAAe2N,CAAC,CAAC3N,SAAjB,EAA4B,IAAI0/L,EAAJ,EAA7D,CAAd;AACH;;AAEM,IAAIC,QAAQ,GAAG,YAAW;AAC7B,qBAAAA,QAAQ,GAAGh9L,MAAM,CAACE,MAAP,IAAiB,SAAS88L,QAAT,CAAkBr8L,CAAlB,EAAqB;AAC7C,SAAK,IAAIF,CAAJ,EAAOxD,CAAC,GAAG,CAAX,EAAckO,CAAC,GAAGnO,SAAS,CAACT,MAAjC,EAAyCU,CAAC,GAAGkO,CAA7C,EAAgDlO,CAAC,EAAjD,EAAqD;AACjDwD,MAAAA,CAAC,GAAGzD,SAAS,CAACC,CAAD,CAAb;;AACA,WAAK,IAAIskC,CAAT,IAAc9gC,CAAd,EAAiB,IAAIT,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC0E,CAArC,EAAwC8gC,CAAxC,CAAJ,EAAgD5gC,CAAC,CAAC4gC,CAAD,CAAD,GAAO9gC,CAAC,CAAC8gC,CAAD,CAAR;AACpE;;AACD,WAAO5gC,CAAP;AACH,GAND;;AAOA,SAAOq8L,QAAQ,CAAC1/L,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAAP;AACH,CATM;;;;AAWA,SAASigM,MAAT,CAAgBx8L,CAAhB,EAAmB9E,CAAnB,EAAsB;AACzB,MAAIgF,CAAC,GAAG,EAAR;;AACA,OAAK,IAAI4gC,CAAT,IAAc9gC,CAAd,EAAiB,IAAIT,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC0E,CAArC,EAAwC8gC,CAAxC,KAA8C5lC,CAAC,CAAC0+B,OAAF,CAAUkH,CAAV,IAAe,CAAjE,EACb5gC,CAAC,CAAC4gC,CAAD,CAAD,GAAO9gC,CAAC,CAAC8gC,CAAD,CAAR;;AACJ,MAAI9gC,CAAC,IAAI,IAAL,IAAa,OAAOT,MAAM,CAAC01L,qBAAd,KAAwC,UAAzD,EACI,KAAK,IAAIz4L,CAAC,GAAG,CAAR,EAAWskC,CAAC,GAAGvhC,MAAM,CAAC01L,qBAAP,CAA6Bj1L,CAA7B,CAApB,EAAqDxD,CAAC,GAAGskC,CAAC,CAAChlC,MAA3D,EAAmEU,CAAC,EAApE,EAAwE;AACpE,QAAItB,CAAC,CAAC0+B,OAAF,CAAUkH,CAAC,CAACtkC,CAAD,CAAX,IAAkB,CAAlB,IAAuB+C,MAAM,CAAC3C,SAAP,CAAiB6/L,oBAAjB,CAAsCnhM,IAAtC,CAA2C0E,CAA3C,EAA8C8gC,CAAC,CAACtkC,CAAD,CAA/C,CAA3B,EACI0D,CAAC,CAAC4gC,CAAC,CAACtkC,CAAD,CAAF,CAAD,GAAUwD,CAAC,CAAC8gC,CAAC,CAACtkC,CAAD,CAAF,CAAX;AACP;AACL,SAAO0D,CAAP;AACH;;AAEM,SAASw8L,UAAT,CAAoBC,UAApB,EAAgC5pJ,MAAhC,EAAwCtyC,GAAxC,EAA6Cm8L,IAA7C,EAAmD;AACtD,MAAI3zL,CAAC,GAAG1M,SAAS,CAACT,MAAlB;AAAA,MAA0B0O,CAAC,GAAGvB,CAAC,GAAG,CAAJ,GAAQ8pC,MAAR,GAAiB6pJ,IAAI,KAAK,IAAT,GAAgBA,IAAI,GAAGr9L,MAAM,CAACs9L,wBAAP,CAAgC9pJ,MAAhC,EAAwCtyC,GAAxC,CAAvB,GAAsEm8L,IAArH;AAAA,MAA2HvzL,CAA3H;AACA,MAAI,OAAOurL,OAAP,KAAmB,QAAnB,IAA+B,OAAOA,OAAO,CAACkI,QAAf,KAA4B,UAA/D,EAA2EtyL,CAAC,GAAGoqL,OAAO,CAACkI,QAAR,CAAiBH,UAAjB,EAA6B5pJ,MAA7B,EAAqCtyC,GAArC,EAA0Cm8L,IAA1C,CAAJ,CAA3E,KACK,KAAK,IAAIpgM,CAAC,GAAGmgM,UAAU,CAAC7gM,MAAX,GAAoB,CAAjC,EAAoCU,CAAC,IAAI,CAAzC,EAA4CA,CAAC,EAA7C,EAAiD,IAAI6M,CAAC,GAAGszL,UAAU,CAACngM,CAAD,CAAlB,EAAuBgO,CAAC,GAAG,CAACvB,CAAC,GAAG,CAAJ,GAAQI,CAAC,CAACmB,CAAD,CAAT,GAAevB,CAAC,GAAG,CAAJ,GAAQI,CAAC,CAAC0pC,MAAD,EAAStyC,GAAT,EAAc+J,CAAd,CAAT,GAA4BnB,CAAC,CAAC0pC,MAAD,EAAStyC,GAAT,CAA7C,KAA+D+J,CAAnE;AAC7E,SAAOvB,CAAC,GAAG,CAAJ,IAASuB,CAAT,IAAcjL,MAAM,CAACub,cAAP,CAAsBi4B,MAAtB,EAA8BtyC,GAA9B,EAAmC+J,CAAnC,CAAd,EAAqDA,CAA5D;AACH;;AAEM,SAASuyL,OAAT,CAAiBC,UAAjB,EAA6BC,SAA7B,EAAwC;AAC3C,SAAO,UAAUlqJ,MAAV,EAAkBtyC,GAAlB,EAAuB;AAAEw8L,IAAAA,SAAS,CAAClqJ,MAAD,EAAStyC,GAAT,EAAcu8L,UAAd,CAAT;AAAqC,GAArE;AACH;;AAEM,SAASE,UAAT,CAAoBC,WAApB,EAAiCC,aAAjC,EAAgD;AACnD,MAAI,OAAOxI,OAAP,KAAmB,QAAnB,IAA+B,OAAOA,OAAO,CAACt1E,QAAf,KAA4B,UAA/D,EAA2E,OAAOs1E,OAAO,CAACt1E,QAAR,CAAiB69E,WAAjB,EAA8BC,aAA9B,CAAP;AAC9E;;AAEM,SAASC,SAAT,CAAmBC,OAAnB,EAA4BC,UAA5B,EAAwCC,CAAxC,EAA2CvJ,SAA3C,EAAsD;AACzD,WAASwJ,KAAT,CAAej+L,KAAf,EAAsB;AAAE,WAAOA,KAAK,YAAYg+L,CAAjB,GAAqBh+L,KAArB,GAA6B,IAAIg+L,CAAJ,CAAM,UAAUp4L,OAAV,EAAmB;AAAEA,MAAAA,OAAO,CAAC5F,KAAD,CAAP;AAAiB,KAA5C,CAApC;AAAoF;;AAC5G,SAAO,KAAKg+L,CAAC,KAAKA,CAAC,GAAGr4L,OAAT,CAAN,EAAyB,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AACvD,aAASq4L,SAAT,CAAmBl+L,KAAnB,EAA0B;AAAE,UAAI;AAAE0X,QAAAA,IAAI,CAAC+8K,SAAS,CAAC/iH,IAAV,CAAe1xE,KAAf,CAAD,CAAJ;AAA8B,OAApC,CAAqC,OAAOtE,CAAP,EAAU;AAAEmK,QAAAA,MAAM,CAACnK,CAAD,CAAN;AAAY;AAAE;;AAC3F,aAASyiM,QAAT,CAAkBn+L,KAAlB,EAAyB;AAAE,UAAI;AAAE0X,QAAAA,IAAI,CAAC+8K,SAAS,CAAC,OAAD,CAAT,CAAmBz0L,KAAnB,CAAD,CAAJ;AAAkC,OAAxC,CAAyC,OAAOtE,CAAP,EAAU;AAAEmK,QAAAA,MAAM,CAACnK,CAAD,CAAN;AAAY;AAAE;;AAC9F,aAASgc,IAAT,CAAcxV,MAAd,EAAsB;AAAEA,MAAAA,MAAM,CAACC,IAAP,GAAcyD,OAAO,CAAC1D,MAAM,CAAClC,KAAR,CAArB,GAAsCi+L,KAAK,CAAC/7L,MAAM,CAAClC,KAAR,CAAL,CAAoBiM,IAApB,CAAyBiyL,SAAzB,EAAoCC,QAApC,CAAtC;AAAsF;;AAC9GzmL,IAAAA,IAAI,CAAC,CAAC+8K,SAAS,GAAGA,SAAS,CAACp3L,KAAV,CAAgBygM,OAAhB,EAAyBC,UAAU,IAAI,EAAvC,CAAb,EAAyDrsH,IAAzD,EAAD,CAAJ;AACH,GALM,CAAP;AAMH;;AAEM,SAAS0sH,WAAT,CAAqBN,OAArB,EAA8BhnI,IAA9B,EAAoC;AACvC,MAAInzC,CAAC,GAAG;AAAEkwG,IAAAA,KAAK,EAAE,CAAT;AAAYwqE,IAAAA,IAAI,EAAE,YAAW;AAAE,UAAI39L,CAAC,CAAC,CAAD,CAAD,GAAO,CAAX,EAAc,MAAMA,CAAC,CAAC,CAAD,CAAP;AAAY,aAAOA,CAAC,CAAC,CAAD,CAAR;AAAc,KAAvE;AAAyE49L,IAAAA,IAAI,EAAE,EAA/E;AAAmF3tE,IAAAA,GAAG,EAAE;AAAxF,GAAR;AAAA,MAAsGhoH,CAAtG;AAAA,MAAyG+Y,CAAzG;AAAA,MAA4GhhB,CAA5G;AAAA,MAA+G+qC,CAA/G;AACA,SAAOA,CAAC,GAAG;AAAEimC,IAAAA,IAAI,EAAE6sH,IAAI,CAAC,CAAD,CAAZ;AAAiB,aAASA,IAAI,CAAC,CAAD,CAA9B;AAAmC,cAAUA,IAAI,CAAC,CAAD;AAAjD,GAAJ,EAA4D,OAAOhjL,MAAP,KAAkB,UAAlB,KAAiCkwB,CAAC,CAAClwB,MAAM,CAACslI,QAAR,CAAD,GAAqB,YAAW;AAAE,WAAO,IAAP;AAAc,GAAjF,CAA5D,EAAgJp1G,CAAvJ;;AACA,WAAS8yJ,IAAT,CAAcrzL,CAAd,EAAiB;AAAE,WAAO,UAAUgE,CAAV,EAAa;AAAE,aAAOwI,IAAI,CAAC,CAACxM,CAAD,EAAIgE,CAAJ,CAAD,CAAX;AAAsB,KAA5C;AAA+C;;AAClE,WAASwI,IAAT,CAAcikB,EAAd,EAAkB;AACd,QAAIhzB,CAAJ,EAAO,MAAM,IAAIu7H,SAAJ,CAAc,iCAAd,CAAN;;AACP,WAAOvgH,CAAP,EAAU,IAAI;AACV,UAAIhb,CAAC,GAAG,CAAJ,EAAO+Y,CAAC,KAAKhhB,CAAC,GAAGi7B,EAAE,CAAC,CAAD,CAAF,GAAQ,CAAR,GAAYja,CAAC,CAAC,QAAD,CAAb,GAA0Bia,EAAE,CAAC,CAAD,CAAF,GAAQja,CAAC,CAAC,OAAD,CAAD,KAAe,CAAChhB,CAAC,GAAGghB,CAAC,CAAC,QAAD,CAAN,KAAqBhhB,CAAC,CAAC5E,IAAF,CAAO4lB,CAAP,CAArB,EAAgC,CAA/C,CAAR,GAA4DA,CAAC,CAACgwD,IAAjG,CAAD,IAA2G,CAAC,CAAChxE,CAAC,GAAGA,CAAC,CAAC5E,IAAF,CAAO4lB,CAAP,EAAUia,EAAE,CAAC,CAAD,CAAZ,CAAL,EAAuBx5B,IAA9I,EAAoJ,OAAOzB,CAAP;AACpJ,UAAIghB,CAAC,GAAG,CAAJ,EAAOhhB,CAAX,EAAci7B,EAAE,GAAG,CAACA,EAAE,CAAC,CAAD,CAAF,GAAQ,CAAT,EAAYj7B,CAAC,CAACV,KAAd,CAAL;;AACd,cAAQ27B,EAAE,CAAC,CAAD,CAAV;AACI,aAAK,CAAL;AAAQ,aAAK,CAAL;AAAQj7B,UAAAA,CAAC,GAAGi7B,EAAJ;AAAQ;;AACxB,aAAK,CAAL;AAAQhY,UAAAA,CAAC,CAACkwG,KAAF;AAAW,iBAAO;AAAE7zH,YAAAA,KAAK,EAAE27B,EAAE,CAAC,CAAD,CAAX;AAAgBx5B,YAAAA,IAAI,EAAE;AAAtB,WAAP;;AACnB,aAAK,CAAL;AAAQwhB,UAAAA,CAAC,CAACkwG,KAAF;AAAWnyG,UAAAA,CAAC,GAAGia,EAAE,CAAC,CAAD,CAAN;AAAWA,UAAAA,EAAE,GAAG,CAAC,CAAD,CAAL;AAAU;;AACxC,aAAK,CAAL;AAAQA,UAAAA,EAAE,GAAGhY,CAAC,CAACgtG,GAAF,CAAMvpG,GAAN,EAAL;;AAAkBzD,UAAAA,CAAC,CAAC26K,IAAF,CAAOl3K,GAAP;;AAAc;;AACxC;AACI,cAAI,EAAE1mB,CAAC,GAAGijB,CAAC,CAAC26K,IAAN,EAAY59L,CAAC,GAAGA,CAAC,CAACpE,MAAF,GAAW,CAAX,IAAgBoE,CAAC,CAACA,CAAC,CAACpE,MAAF,GAAW,CAAZ,CAAnC,MAAuDq/B,EAAE,CAAC,CAAD,CAAF,KAAU,CAAV,IAAeA,EAAE,CAAC,CAAD,CAAF,KAAU,CAAhF,CAAJ,EAAwF;AAAEhY,YAAAA,CAAC,GAAG,CAAJ;AAAO;AAAW;;AAC5G,cAAIgY,EAAE,CAAC,CAAD,CAAF,KAAU,CAAV,KAAgB,CAACj7B,CAAD,IAAOi7B,EAAE,CAAC,CAAD,CAAF,GAAQj7B,CAAC,CAAC,CAAD,CAAT,IAAgBi7B,EAAE,CAAC,CAAD,CAAF,GAAQj7B,CAAC,CAAC,CAAD,CAAhD,CAAJ,EAA2D;AAAEijB,YAAAA,CAAC,CAACkwG,KAAF,GAAUl4F,EAAE,CAAC,CAAD,CAAZ;AAAiB;AAAQ;;AACtF,cAAIA,EAAE,CAAC,CAAD,CAAF,KAAU,CAAV,IAAehY,CAAC,CAACkwG,KAAF,GAAUnzH,CAAC,CAAC,CAAD,CAA9B,EAAmC;AAAEijB,YAAAA,CAAC,CAACkwG,KAAF,GAAUnzH,CAAC,CAAC,CAAD,CAAX;AAAgBA,YAAAA,CAAC,GAAGi7B,EAAJ;AAAQ;AAAQ;;AACrE,cAAIj7B,CAAC,IAAIijB,CAAC,CAACkwG,KAAF,GAAUnzH,CAAC,CAAC,CAAD,CAApB,EAAyB;AAAEijB,YAAAA,CAAC,CAACkwG,KAAF,GAAUnzH,CAAC,CAAC,CAAD,CAAX;;AAAgBijB,YAAAA,CAAC,CAACgtG,GAAF,CAAM1zH,IAAN,CAAW0+B,EAAX;;AAAgB;AAAQ;;AACnE,cAAIj7B,CAAC,CAAC,CAAD,CAAL,EAAUijB,CAAC,CAACgtG,GAAF,CAAMvpG,GAAN;;AACVzD,UAAAA,CAAC,CAAC26K,IAAF,CAAOl3K,GAAP;;AAAc;AAXtB;;AAaAuU,MAAAA,EAAE,GAAGm7B,IAAI,CAACh7D,IAAL,CAAUgiM,OAAV,EAAmBn6K,CAAnB,CAAL;AACH,KAjBS,CAiBR,OAAOjoB,CAAP,EAAU;AAAEigC,MAAAA,EAAE,GAAG,CAAC,CAAD,EAAIjgC,CAAJ,CAAL;AAAagmB,MAAAA,CAAC,GAAG,CAAJ;AAAQ,KAjBzB,SAiBkC;AAAE/Y,MAAAA,CAAC,GAAGjI,CAAC,GAAG,CAAR;AAAY;;AAC1D,QAAIi7B,EAAE,CAAC,CAAD,CAAF,GAAQ,CAAZ,EAAe,MAAMA,EAAE,CAAC,CAAD,CAAR;AAAa,WAAO;AAAE37B,MAAAA,KAAK,EAAE27B,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAAV,GAAgB,KAAK,CAA9B;AAAiCx5B,MAAAA,IAAI,EAAE;AAAvC,KAAP;AAC/B;AACJ;;AAEM,IAAIq8L,eAAe,GAAGz+L,MAAM,CAAC60L,MAAP,GAAiB,UAASjsK,CAAT,EAAY8rE,CAAZ,EAAen6E,CAAf,EAAkBmkL,EAAlB,EAAsB;AAChE,MAAIA,EAAE,KAAKvsE,SAAX,EAAsBusE,EAAE,GAAGnkL,CAAL;AACtBva,EAAAA,MAAM,CAACub,cAAP,CAAsBqN,CAAtB,EAAyB81K,EAAzB,EAA6B;AAAEpI,IAAAA,UAAU,EAAE,IAAd;AAAoBv2L,IAAAA,GAAG,EAAE,YAAW;AAAE,aAAO20F,CAAC,CAACn6E,CAAD,CAAR;AAAc;AAApD,GAA7B;AACH,CAH4B,GAGvB,UAASqO,CAAT,EAAY8rE,CAAZ,EAAen6E,CAAf,EAAkBmkL,EAAlB,EAAsB;AACxB,MAAIA,EAAE,KAAKvsE,SAAX,EAAsBusE,EAAE,GAAGnkL,CAAL;AACtBqO,EAAAA,CAAC,CAAC81K,EAAD,CAAD,GAAQhqG,CAAC,CAACn6E,CAAD,CAAT;AACH,CANM;;;;AAQA,SAASokL,YAAT,CAAsBjqG,CAAtB,EAAyB9rE,CAAzB,EAA4B;AAC/B,OAAK,IAAI2Y,CAAT,IAAcmzD,CAAd,EAAiB,IAAInzD,CAAC,KAAK,SAAN,IAAmB,CAACvhC,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC6sB,CAArC,EAAwC2Y,CAAxC,CAAxB,EAAoEk9J,eAAe,CAAC71K,CAAD,EAAI8rE,CAAJ,EAAOnzD,CAAP,CAAf;AACxF;;AAEM,SAASq9J,QAAT,CAAkBh2K,CAAlB,EAAqB;AACxB,MAAInoB,CAAC,GAAG,OAAO+a,MAAP,KAAkB,UAAlB,IAAgCA,MAAM,CAACslI,QAA/C;AAAA,MAAyDpsD,CAAC,GAAGj0F,CAAC,IAAImoB,CAAC,CAACnoB,CAAD,CAAnE;AAAA,MAAwExD,CAAC,GAAG,CAA5E;AACA,MAAIy3F,CAAJ,EAAO,OAAOA,CAAC,CAAC34F,IAAF,CAAO6sB,CAAP,CAAP;AACP,MAAIA,CAAC,IAAI,OAAOA,CAAC,CAACrsB,MAAT,KAAoB,QAA7B,EAAuC,OAAO;AAC1Co1E,IAAAA,IAAI,EAAE,YAAY;AACd,UAAI/oD,CAAC,IAAI3rB,CAAC,IAAI2rB,CAAC,CAACrsB,MAAhB,EAAwBqsB,CAAC,GAAG,KAAK,CAAT;AACxB,aAAO;AAAE3oB,QAAAA,KAAK,EAAE2oB,CAAC,IAAIA,CAAC,CAAC3rB,CAAC,EAAF,CAAf;AAAsBmF,QAAAA,IAAI,EAAE,CAACwmB;AAA7B,OAAP;AACH;AAJyC,GAAP;AAMvC,QAAM,IAAIu7G,SAAJ,CAAc1jI,CAAC,GAAG,yBAAH,GAA+B,iCAA9C,CAAN;AACH;;AAEM,SAASo+L,MAAT,CAAgBj2K,CAAhB,EAAmBzd,CAAnB,EAAsB;AACzB,MAAIupF,CAAC,GAAG,OAAOl5E,MAAP,KAAkB,UAAlB,IAAgCoN,CAAC,CAACpN,MAAM,CAACslI,QAAR,CAAzC;AACA,MAAI,CAACpsD,CAAL,EAAQ,OAAO9rE,CAAP;AACR,MAAI3rB,CAAC,GAAGy3F,CAAC,CAAC34F,IAAF,CAAO6sB,CAAP,CAAR;AAAA,MAAmB3d,CAAnB;AAAA,MAAsB6zL,EAAE,GAAG,EAA3B;AAAA,MAA+BnjM,CAA/B;;AACA,MAAI;AACA,WAAO,CAACwP,CAAC,KAAK,KAAK,CAAX,IAAgBA,CAAC,KAAK,CAAvB,KAA6B,CAAC,CAACF,CAAC,GAAGhO,CAAC,CAAC00E,IAAF,EAAL,EAAevvE,IAApD,EAA0D08L,EAAE,CAAC5hM,IAAH,CAAQ+N,CAAC,CAAChL,KAAV;AAC7D,GAFD,CAGA,OAAOqhB,KAAP,EAAc;AAAE3lB,IAAAA,CAAC,GAAG;AAAE2lB,MAAAA,KAAK,EAAEA;AAAT,KAAJ;AAAuB,GAHvC,SAIQ;AACJ,QAAI;AACA,UAAIrW,CAAC,IAAI,CAACA,CAAC,CAAC7I,IAAR,KAAiBsyF,CAAC,GAAGz3F,CAAC,CAAC,QAAD,CAAtB,CAAJ,EAAuCy3F,CAAC,CAAC34F,IAAF,CAAOkB,CAAP;AAC1C,KAFD,SAGQ;AAAE,UAAItB,CAAJ,EAAO,MAAMA,CAAC,CAAC2lB,KAAR;AAAgB;AACpC;;AACD,SAAOw9K,EAAP;AACH;;AAEM,SAASC,QAAT,GAAoB;AACvB,OAAK,IAAID,EAAE,GAAG,EAAT,EAAa7hM,CAAC,GAAG,CAAtB,EAAyBA,CAAC,GAAGD,SAAS,CAACT,MAAvC,EAA+CU,CAAC,EAAhD,EACI6hM,EAAE,GAAGA,EAAE,CAACtiM,MAAH,CAAUqiM,MAAM,CAAC7hM,SAAS,CAACC,CAAD,CAAV,CAAhB,CAAL;;AACJ,SAAO6hM,EAAP;AACH;;AAEM,SAASE,cAAT,GAA0B;AAC7B,OAAK,IAAIv+L,CAAC,GAAG,CAAR,EAAWxD,CAAC,GAAG,CAAf,EAAkBgiM,EAAE,GAAGjiM,SAAS,CAACT,MAAtC,EAA8CU,CAAC,GAAGgiM,EAAlD,EAAsDhiM,CAAC,EAAvD,EAA2DwD,CAAC,IAAIzD,SAAS,CAACC,CAAD,CAAT,CAAaV,MAAlB;;AAC3D,OAAK,IAAI0O,CAAC,GAAGlO,KAAK,CAAC0D,CAAD,CAAb,EAAkB8Z,CAAC,GAAG,CAAtB,EAAyBtd,CAAC,GAAG,CAAlC,EAAqCA,CAAC,GAAGgiM,EAAzC,EAA6ChiM,CAAC,EAA9C,EACI,KAAK,IAAIkH,CAAC,GAAGnH,SAAS,CAACC,CAAD,CAAjB,EAAsBiK,CAAC,GAAG,CAA1B,EAA6Bg4L,EAAE,GAAG/6L,CAAC,CAAC5H,MAAzC,EAAiD2K,CAAC,GAAGg4L,EAArD,EAAyDh4L,CAAC,IAAIqT,CAAC,EAA/D,EACItP,CAAC,CAACsP,CAAD,CAAD,GAAOpW,CAAC,CAAC+C,CAAD,CAAR;;AACR,SAAO+D,CAAP;AACH;;AAAA;;AAEM,SAASk0L,OAAT,CAAiBhwL,CAAjB,EAAoB;AACvB,SAAO,gBAAgBgwL,OAAhB,IAA2B,KAAKhwL,CAAL,GAASA,CAAT,EAAY,IAAvC,IAA+C,IAAIgwL,OAAJ,CAAYhwL,CAAZ,CAAtD;AACH;;AAEM,SAASiwL,gBAAT,CAA0BrB,OAA1B,EAAmCC,UAAnC,EAA+CtJ,SAA/C,EAA0D;AAC7D,MAAI,CAACl5K,MAAM,CAAC6jL,aAAZ,EAA2B,MAAM,IAAIl7D,SAAJ,CAAc,sCAAd,CAAN;AAC3B,MAAIz4F,CAAC,GAAGgpJ,SAAS,CAACp3L,KAAV,CAAgBygM,OAAhB,EAAyBC,UAAU,IAAI,EAAvC,CAAR;AAAA,MAAoD/gM,CAApD;AAAA,MAAuD03F,CAAC,GAAG,EAA3D;AACA,SAAO13F,CAAC,GAAG,EAAJ,EAAQuhM,IAAI,CAAC,MAAD,CAAZ,EAAsBA,IAAI,CAAC,OAAD,CAA1B,EAAqCA,IAAI,CAAC,QAAD,CAAzC,EAAqDvhM,CAAC,CAACue,MAAM,CAAC6jL,aAAR,CAAD,GAA0B,YAAY;AAAE,WAAO,IAAP;AAAc,GAA3G,EAA6GpiM,CAApH;;AACA,WAASuhM,IAAT,CAAcrzL,CAAd,EAAiB;AAAE,QAAIugC,CAAC,CAACvgC,CAAD,CAAL,EAAUlO,CAAC,CAACkO,CAAD,CAAD,GAAO,UAAUgE,CAAV,EAAa;AAAE,aAAO,IAAIvJ,OAAJ,CAAY,UAAUzB,CAAV,EAAa6G,CAAb,EAAgB;AAAE2pF,QAAAA,CAAC,CAACz3F,IAAF,CAAO,CAACiO,CAAD,EAAIgE,CAAJ,EAAOhL,CAAP,EAAU6G,CAAV,CAAP,IAAuB,CAAvB,IAA4Bs0L,MAAM,CAACn0L,CAAD,EAAIgE,CAAJ,CAAlC;AAA2C,OAAzE,CAAP;AAAoF,KAA1G;AAA6G;;AAC1I,WAASmwL,MAAT,CAAgBn0L,CAAhB,EAAmBgE,CAAnB,EAAsB;AAAE,QAAI;AAAEwI,MAAAA,IAAI,CAAC+zB,CAAC,CAACvgC,CAAD,CAAD,CAAKgE,CAAL,CAAD,CAAJ;AAAgB,KAAtB,CAAuB,OAAOxT,CAAP,EAAU;AAAE4jM,MAAAA,MAAM,CAAC5qG,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUh5F,CAAV,CAAN;AAAqB;AAAE;;AAClF,WAASgc,IAAT,CAAc1M,CAAd,EAAiB;AAAEA,IAAAA,CAAC,CAAChL,KAAF,YAAmBk/L,OAAnB,GAA6Bv5L,OAAO,CAACC,OAAR,CAAgBoF,CAAC,CAAChL,KAAF,CAAQkP,CAAxB,EAA2BjD,IAA3B,CAAgCszL,OAAhC,EAAyC15L,MAAzC,CAA7B,GAAgFy5L,MAAM,CAAC5qG,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAU1pF,CAAV,CAAtF;AAAqG;;AACxH,WAASu0L,OAAT,CAAiBv/L,KAAjB,EAAwB;AAAEq/L,IAAAA,MAAM,CAAC,MAAD,EAASr/L,KAAT,CAAN;AAAwB;;AAClD,WAAS6F,MAAT,CAAgB7F,KAAhB,EAAuB;AAAEq/L,IAAAA,MAAM,CAAC,OAAD,EAAUr/L,KAAV,CAAN;AAAyB;;AAClD,WAASs/L,MAAT,CAAgB32L,CAAhB,EAAmBuG,CAAnB,EAAsB;AAAE,QAAIvG,CAAC,CAACuG,CAAD,CAAD,EAAMwlF,CAAC,CAAC5yC,KAAF,EAAN,EAAiB4yC,CAAC,CAACp4F,MAAvB,EAA+B+iM,MAAM,CAAC3qG,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,CAAN;AAA2B;AACrF;;AAEM,SAAS8qG,gBAAT,CAA0B72K,CAA1B,EAA6B;AAChC,MAAI3rB,CAAJ,EAAOskC,CAAP;AACA,SAAOtkC,CAAC,GAAG,EAAJ,EAAQuhM,IAAI,CAAC,MAAD,CAAZ,EAAsBA,IAAI,CAAC,OAAD,EAAU,UAAU7iM,CAAV,EAAa;AAAE,UAAMA,CAAN;AAAU,GAAnC,CAA1B,EAAgE6iM,IAAI,CAAC,QAAD,CAApE,EAAgFvhM,CAAC,CAACue,MAAM,CAACslI,QAAR,CAAD,GAAqB,YAAY;AAAE,WAAO,IAAP;AAAc,GAAjI,EAAmI7jJ,CAA1I;;AACA,WAASuhM,IAAT,CAAcrzL,CAAd,EAAiBvC,CAAjB,EAAoB;AAAE3L,IAAAA,CAAC,CAACkO,CAAD,CAAD,GAAOyd,CAAC,CAACzd,CAAD,CAAD,GAAO,UAAUgE,CAAV,EAAa;AAAE,aAAO,CAACoyB,CAAC,GAAG,CAACA,CAAN,IAAW;AAAEthC,QAAAA,KAAK,EAAEk/L,OAAO,CAACv2K,CAAC,CAACzd,CAAD,CAAD,CAAKgE,CAAL,CAAD,CAAhB;AAA2B/M,QAAAA,IAAI,EAAE+I,CAAC,KAAK;AAAvC,OAAX,GAA+DvC,CAAC,GAAGA,CAAC,CAACuG,CAAD,CAAJ,GAAUA,CAAjF;AAAqF,KAA3G,GAA8GvG,CAArH;AAAyH;AAClJ;;AAEM,SAAS82L,aAAT,CAAuB92K,CAAvB,EAA0B;AAC7B,MAAI,CAACpN,MAAM,CAAC6jL,aAAZ,EAA2B,MAAM,IAAIl7D,SAAJ,CAAc,sCAAd,CAAN;AAC3B,MAAIzvC,CAAC,GAAG9rE,CAAC,CAACpN,MAAM,CAAC6jL,aAAR,CAAT;AAAA,MAAiCpiM,CAAjC;AACA,SAAOy3F,CAAC,GAAGA,CAAC,CAAC34F,IAAF,CAAO6sB,CAAP,CAAH,IAAgBA,CAAC,GAAG,OAAOg2K,QAAP,KAAoB,UAApB,GAAiCA,QAAQ,CAACh2K,CAAD,CAAzC,GAA+CA,CAAC,CAACpN,MAAM,CAACslI,QAAR,CAAD,EAAnD,EAAyE7jJ,CAAC,GAAG,EAA7E,EAAiFuhM,IAAI,CAAC,MAAD,CAArF,EAA+FA,IAAI,CAAC,OAAD,CAAnG,EAA8GA,IAAI,CAAC,QAAD,CAAlH,EAA8HvhM,CAAC,CAACue,MAAM,CAAC6jL,aAAR,CAAD,GAA0B,YAAY;AAAE,WAAO,IAAP;AAAc,GAApL,EAAsLpiM,CAAtM,CAAR;;AACA,WAASuhM,IAAT,CAAcrzL,CAAd,EAAiB;AAAElO,IAAAA,CAAC,CAACkO,CAAD,CAAD,GAAOyd,CAAC,CAACzd,CAAD,CAAD,IAAQ,UAAUgE,CAAV,EAAa;AAAE,aAAO,IAAIvJ,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAAEqJ,QAAAA,CAAC,GAAGyZ,CAAC,CAACzd,CAAD,CAAD,CAAKgE,CAAL,CAAJ,EAAaowL,MAAM,CAAC15L,OAAD,EAAUC,MAAV,EAAkBqJ,CAAC,CAAC/M,IAApB,EAA0B+M,CAAC,CAAClP,KAA5B,CAAnB;AAAwD,OAAjG,CAAP;AAA4G,KAA1I;AAA6I;;AAChK,WAASs/L,MAAT,CAAgB15L,OAAhB,EAAyBC,MAAzB,EAAiCgE,CAAjC,EAAoCqF,CAApC,EAAuC;AAAEvJ,IAAAA,OAAO,CAACC,OAAR,CAAgBsJ,CAAhB,EAAmBjD,IAAnB,CAAwB,UAASiD,CAAT,EAAY;AAAEtJ,MAAAA,OAAO,CAAC;AAAE5F,QAAAA,KAAK,EAAEkP,CAAT;AAAY/M,QAAAA,IAAI,EAAE0H;AAAlB,OAAD,CAAP;AAAiC,KAAvE,EAAyEhE,MAAzE;AAAmF;AAC/H;;AAEM,SAAS65L,oBAAT,CAA8BC,MAA9B,EAAsCC,GAAtC,EAA2C;AAC9C,MAAI7/L,MAAM,CAACub,cAAX,EAA2B;AAAEvb,IAAAA,MAAM,CAACub,cAAP,CAAsBqkL,MAAtB,EAA8B,KAA9B,EAAqC;AAAE3/L,MAAAA,KAAK,EAAE4/L;AAAT,KAArC;AAAuD,GAApF,MAA0F;AAAED,IAAAA,MAAM,CAACC,GAAP,GAAaA,GAAb;AAAmB;;AAC/G,SAAOD,MAAP;AACH;;AAAA;;AAED,IAAIE,kBAAkB,GAAG9/L,MAAM,CAAC60L,MAAP,GAAiB,UAASjsK,CAAT,EAAYzZ,CAAZ,EAAe;AACrDnP,EAAAA,MAAM,CAACub,cAAP,CAAsBqN,CAAtB,EAAyB,SAAzB,EAAoC;AAAE0tK,IAAAA,UAAU,EAAE,IAAd;AAAoBr2L,IAAAA,KAAK,EAAEkP;AAA3B,GAApC;AACH,CAFwB,GAEpB,UAASyZ,CAAT,EAAYzZ,CAAZ,EAAe;AAChByZ,EAAAA,CAAC,CAAC,SAAD,CAAD,GAAezZ,CAAf;AACH,CAJD;;AAMO,SAAS4wL,YAAT,CAAsB3rL,GAAtB,EAA2B;AAC9B,MAAIA,GAAG,IAAIA,GAAG,CAAC4rL,UAAf,EAA2B,OAAO5rL,GAAP;AAC3B,MAAIjS,MAAM,GAAG,EAAb;AACA,MAAIiS,GAAG,IAAI,IAAX,EAAiB,KAAK,IAAImG,CAAT,IAAcnG,GAAd,EAAmB,IAAImG,CAAC,KAAK,SAAN,IAAmBva,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqCqY,GAArC,EAA0CmG,CAA1C,CAAvB,EAAqEkkL,eAAe,CAACt8L,MAAD,EAASiS,GAAT,EAAcmG,CAAd,CAAf;;AACzGulL,EAAAA,kBAAkB,CAAC39L,MAAD,EAASiS,GAAT,CAAlB;;AACA,SAAOjS,MAAP;AACH;;AAEM,SAAS89L,eAAT,CAAyB7rL,GAAzB,EAA8B;AACjC,SAAQA,GAAG,IAAIA,GAAG,CAAC4rL,UAAZ,GAA0B5rL,GAA1B,GAAgC;AAAE44K,IAAAA,OAAO,EAAE54K;AAAX,GAAvC;AACH;;AAEM,SAAS8rL,sBAAT,CAAgC3K,QAAhC,EAA0C4K,UAA1C,EAAsD;AACzD,MAAI,CAACA,UAAU,CAAC59L,GAAX,CAAegzL,QAAf,CAAL,EAA+B;AAC3B,UAAM,IAAIpxD,SAAJ,CAAc,gDAAd,CAAN;AACH;;AACD,SAAOg8D,UAAU,CAACpgM,GAAX,CAAew1L,QAAf,CAAP;AACH;;AAEM,SAAS6K,sBAAT,CAAgC7K,QAAhC,EAA0C4K,UAA1C,EAAsDlgM,KAAtD,EAA6D;AAChE,MAAI,CAACkgM,UAAU,CAAC59L,GAAX,CAAegzL,QAAf,CAAL,EAA+B;AAC3B,UAAM,IAAIpxD,SAAJ,CAAc,gDAAd,CAAN;AACH;;AACDg8D,EAAAA,UAAU,CAACvgM,GAAX,CAAe21L,QAAf,EAAyBt1L,KAAzB;AACA,SAAOA,KAAP;AACH;;;;;;;;;;;;;;;;;;AClOD;AACA;AACA;AACA;AACA;AACA,IAAI68L,SAAS,GAAI,UAAQ,SAAKA,SAAd,IAA6B,YAAY;AACrD,MAAIF,aAAa,GAAG,UAAU9yL,CAAV,EAAakB,CAAb,EAAgB;AAChC4xL,IAAAA,aAAa,GAAG58L,MAAM,CAAC+wH,cAAP,IACX;AAAE8rE,MAAAA,SAAS,EAAE;AAAb,iBAA6B9/L,KAA7B,IAAsC,UAAU+M,CAAV,EAAakB,CAAb,EAAgB;AAAElB,MAAAA,CAAC,CAAC+yL,SAAF,GAAc7xL,CAAd;AAAkB,KAD/D,IAEZ,UAAUlB,CAAV,EAAakB,CAAb,EAAgB;AAAE,WAAK,IAAIu2B,CAAT,IAAcv2B,CAAd,EAAiB,IAAIA,CAAC,CAAC4oH,cAAF,CAAiBryF,CAAjB,CAAJ,EAAyBz3B,CAAC,CAACy3B,CAAD,CAAD,GAAOv2B,CAAC,CAACu2B,CAAD,CAAR;AAAc,KAF9E;;AAGA,WAAOq7J,aAAa,CAAC9yL,CAAD,EAAIkB,CAAJ,CAApB;AACH,GALD;;AAMA,SAAO,UAAUlB,CAAV,EAAakB,CAAb,EAAgB;AACnB4xL,IAAAA,aAAa,CAAC9yL,CAAD,EAAIkB,CAAJ,CAAb;;AACA,aAAS+xL,EAAT,GAAc;AAAE,WAAKl0L,WAAL,GAAmBiB,CAAnB;AAAuB;;AACvCA,IAAAA,CAAC,CAACzM,SAAF,GAAc2N,CAAC,KAAK,IAAN,GAAahL,MAAM,CAAC60L,MAAP,CAAc7pL,CAAd,CAAb,IAAiC+xL,EAAE,CAAC1/L,SAAH,GAAe2N,CAAC,CAAC3N,SAAjB,EAA4B,IAAI0/L,EAAJ,EAA7D,CAAd;AACH,GAJD;AAKH,CAZ2C,EAA5C;;AAaA,IAAIsD,eAAe,GAAGrgM,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAvC;;AACO,SAASA,cAAT,CAAwBl2G,GAAxB,EAA6Bxc,GAA7B,EAAkC;AACrC,SAAOm/L,eAAe,CAACtkM,IAAhB,CAAqB2hB,GAArB,EAA0Bxc,GAA1B,CAAP;AACH;;AACM,SAASo/L,WAAT,CAAqB5iL,GAArB,EAA0B;AAC7B,MAAI3gB,KAAK,CAACuH,OAAN,CAAcoZ,GAAd,CAAJ,EAAwB;AACpB,QAAI0B,IAAI,GAAG,IAAIriB,KAAJ,CAAU2gB,GAAG,CAACnhB,MAAd,CAAX;;AACA,SAAK,IAAIge,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6E,IAAI,CAAC7iB,MAAzB,EAAiCge,CAAC,EAAlC,EAAsC;AAClC6E,MAAAA,IAAI,CAAC7E,CAAD,CAAJ,GAAU,KAAKA,CAAf;AACH;;AACD,WAAO6E,IAAP;AACH;;AACD,MAAIpf,MAAM,CAACof,IAAX,EAAiB;AACb,WAAOpf,MAAM,CAACof,IAAP,CAAY1B,GAAZ,CAAP;AACH;;AACD,MAAI0B,IAAI,GAAG,EAAX;;AACA,OAAK,IAAIniB,CAAT,IAAcygB,GAAd,EAAmB;AACf,QAAIk2G,cAAc,CAACl2G,GAAD,EAAMzgB,CAAN,CAAlB,EAA4B;AACxBmiB,MAAAA,IAAI,CAACliB,IAAL,CAAUD,CAAV;AACH;AACJ;;AACD,SAAOmiB,IAAP;AACH;;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASmhL,UAAT,CAAoB7iL,GAApB,EAAyB;AAC5B,UAAQ,OAAOA,GAAf;AACI,SAAK,QAAL;AACI,aAAOwhC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAe1hC,GAAf,CAAX,CAAP;AAAwC;;AAC5C,SAAK,WAAL;AACI,aAAO,IAAP;AAAa;;AACjB;AACI,aAAOA,GAAP;AAAY;AANpB;AAQH,EACD;;;AACO,SAASpT,SAAT,CAAmBwtG,GAAnB,EAAwB;AAC3B,MAAI76G,CAAC,GAAG,CAAR;AACA,MAAIN,GAAG,GAAGm7G,GAAG,CAACv7G,MAAd;AACA,MAAIikM,QAAJ;;AACA,SAAOvjM,CAAC,GAAGN,GAAX,EAAgB;AACZ6jM,IAAAA,QAAQ,GAAG1oF,GAAG,CAACpmC,UAAJ,CAAez0E,CAAf,CAAX;;AACA,QAAIujM,QAAQ,IAAI,EAAZ,IAAkBA,QAAQ,IAAI,EAAlC,EAAsC;AAClCvjM,MAAAA,CAAC;AACD;AACH;;AACD,WAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACH;AACD;AACA;AACA;AACA;AACA;;;AACO,SAASwjM,mBAAT,CAA6Bn1L,IAA7B,EAAmC;AACtC,MAAIA,IAAI,CAAC+uB,OAAL,CAAa,GAAb,MAAsB,CAAC,CAAvB,IAA4B/uB,IAAI,CAAC+uB,OAAL,CAAa,GAAb,MAAsB,CAAC,CAAvD,EACI,OAAO/uB,IAAP;AACJ,SAAOA,IAAI,CAAC9K,OAAL,CAAa,IAAb,EAAmB,IAAnB,EAAyBA,OAAzB,CAAiC,KAAjC,EAAwC,IAAxC,CAAP;AACH;AACD;AACA;AACA;AACA;AACA;;;AACO,SAASkgM,qBAAT,CAA+Bp1L,IAA/B,EAAqC;AACxC,SAAOA,IAAI,CAAC9K,OAAL,CAAa,KAAb,EAAoB,GAApB,EAAyBA,OAAzB,CAAiC,KAAjC,EAAwC,GAAxC,CAAP;AACH;;AACM,SAASmgM,iBAAT,CAA2BC,IAA3B,EAAiCljL,GAAjC,EAAsC;AACzC,MAAIg2B,KAAJ;;AACA,OAAK,IAAIxyC,GAAT,IAAgB0/L,IAAhB,EAAsB;AAClB,QAAIhtE,cAAc,CAACgtE,IAAD,EAAO1/L,GAAP,CAAlB,EAA+B;AAC3B,UAAI0/L,IAAI,CAAC1/L,GAAD,CAAJ,KAAcwc,GAAlB,EAAuB;AACnB,eAAO+iL,mBAAmB,CAACv/L,GAAD,CAAnB,GAA2B,GAAlC;AACH,OAFD,MAGK,IAAI,OAAO0/L,IAAI,CAAC1/L,GAAD,CAAX,KAAqB,QAAzB,EAAmC;AACpCwyC,QAAAA,KAAK,GAAGitJ,iBAAiB,CAACC,IAAI,CAAC1/L,GAAD,CAAL,EAAYwc,GAAZ,CAAzB;;AACA,YAAIg2B,KAAK,IAAI,EAAb,EAAiB;AACb,iBAAO+sJ,mBAAmB,CAACv/L,GAAD,CAAnB,GAA2B,GAA3B,GAAiCwyC,KAAxC;AACH;AACJ;AACJ;AACJ;;AACD,SAAO,EAAP;AACH;;AACM,SAASmtJ,OAAT,CAAiBD,IAAjB,EAAuBljL,GAAvB,EAA4B;AAC/B,MAAIkjL,IAAI,KAAKljL,GAAb,EAAkB;AACd,WAAO,GAAP;AACH;;AACD,MAAIpS,IAAI,GAAGq1L,iBAAiB,CAACC,IAAD,EAAOljL,GAAP,CAA5B;;AACA,MAAIpS,IAAI,KAAK,EAAb,EAAiB;AACb,UAAM,IAAI9P,KAAJ,CAAU,0BAAV,CAAN;AACH;;AACD,SAAO,MAAM8P,IAAb;AACH;AACD;AACA;AACA;;;AACO,SAASw1L,YAAT,CAAsBpjL,GAAtB,EAA2B;AAC9B,MAAIA,GAAG,KAAKy0G,SAAZ,EAAuB;AACnB,WAAO,IAAP;AACH;;AACD,MAAIz0G,GAAJ,EAAS;AACL,QAAI3gB,KAAK,CAACuH,OAAN,CAAcoZ,GAAd,CAAJ,EAAwB;AACpB,WAAK,IAAIzgB,CAAC,GAAG,CAAR,EAAWN,GAAG,GAAG+gB,GAAG,CAACnhB,MAA1B,EAAkCU,CAAC,GAAGN,GAAtC,EAA2CM,CAAC,EAA5C,EAAgD;AAC5C,YAAI6jM,YAAY,CAACpjL,GAAG,CAACzgB,CAAD,CAAJ,CAAhB,EAA0B;AACtB,iBAAO,IAAP;AACH;AACJ;AACJ,KAND,MAOK,IAAI,OAAOygB,GAAP,KAAe,QAAnB,EAA6B;AAC9B,UAAIqjL,OAAO,GAAGT,WAAW,CAAC5iL,GAAD,CAAzB;;AACA,UAAIsjL,aAAa,GAAGD,OAAO,CAACxkM,MAA5B;;AACA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+jM,aAApB,EAAmC/jM,CAAC,EAApC,EAAwC;AACpC,YAAI6jM,YAAY,CAACpjL,GAAG,CAACqjL,OAAO,CAAC9jM,CAAD,CAAR,CAAJ,CAAhB,EAAmC;AAC/B,iBAAO,IAAP;AACH;AACJ;AACJ;AACJ;;AACD,SAAO,KAAP;AACH;;AACD,SAASgkM,0BAAT,CAAoC3gL,OAApC,EAA6CxjB,IAA7C,EAAmD;AAC/C,MAAIokM,YAAY,GAAG,CAAC5gL,OAAD,CAAnB;;AACA,OAAK,IAAIpf,GAAT,IAAgBpE,IAAhB,EAAsB;AAClB,QAAImD,KAAK,GAAG,OAAOnD,IAAI,CAACoE,GAAD,CAAX,KAAqB,QAArB,GAAgCg+C,IAAI,CAACE,SAAL,CAAetiD,IAAI,CAACoE,GAAD,CAAnB,EAA0B,IAA1B,EAAgC,CAAhC,CAAhC,GAAqEpE,IAAI,CAACoE,GAAD,CAArF,CADkB,CAC0E;;AAC5F,QAAI,OAAOjB,KAAP,KAAiB,WAArB,EAAkC;AAC9BihM,MAAAA,YAAY,CAAChkM,IAAb,CAAkBgE,GAAG,GAAG,IAAN,GAAajB,KAA/B;AACH;AACJ;;AACD,SAAOihM,YAAY,CAACrgM,IAAb,CAAkB,IAAlB,CAAP;AACH;;AACD,IAAIsgM,UAAU;AAAG;AAAe,UAAUjlL,MAAV,EAAkB;AAC9C4gL,EAAAA,SAAS,CAACqE,UAAD,EAAajlL,MAAb,CAAT;;AACA,WAASilL,UAAT,CAAoB7gL,OAApB,EAA6B9hB,IAA7B,EAAmCuE,KAAnC,EAA0C+0C,SAA1C,EAAqDspJ,IAArD,EAA2D;AACvD,QAAIC,UAAU,GAAG,KAAKx4L,WAAtB;;AACA,QAAI1H,KAAK,GAAG+a,MAAM,CAACngB,IAAP,CAAY,IAAZ,EAAkBklM,0BAA0B,CAAC3gL,OAAD,EAAU;AAAE9hB,MAAAA,IAAI,EAAEA,IAAR;AAAcuE,MAAAA,KAAK,EAAEA,KAArB;AAA4B+0C,MAAAA,SAAS,EAAEA,SAAvC;AAAkDspJ,MAAAA,IAAI,EAAEA;AAAxD,KAAV,CAA5C,KAA0H,IAAtI;;AACAjgM,IAAAA,KAAK,CAAC3C,IAAN,GAAaA,IAAb;AACA2C,IAAAA,KAAK,CAAC4B,KAAN,GAAcA,KAAd;AACA5B,IAAAA,KAAK,CAAC22C,SAAN,GAAkBA,SAAlB;AACA32C,IAAAA,KAAK,CAACigM,IAAN,GAAaA,IAAb;AACAphM,IAAAA,MAAM,CAAC+wH,cAAP,CAAsB5vH,KAAtB,EAA6BkgM,UAAU,CAAChkM,SAAxC,EAPuD,CAOH;;AACpD8D,IAAAA,KAAK,CAACmf,OAAN,GAAgB2gL,0BAA0B,CAAC3gL,OAAD,EAAU;AAAE9hB,MAAAA,IAAI,EAAEA,IAAR;AAAcuE,MAAAA,KAAK,EAAEA,KAArB;AAA4B+0C,MAAAA,SAAS,EAAEA,SAAvC;AAAkDspJ,MAAAA,IAAI,EAAEA;AAAxD,KAAV,CAA1C;AACA,WAAOjgM,KAAP;AACH;;AACD,SAAOggM,UAAP;AACH,CAd+B,CAc9B3lM,KAd8B,CAAhC;;;;;;;;;;;;;;;;;;AC3JA;;AACO,IAAI8lM,cAAc,GAAGH,mBAArB;;AACA,IAAIrd,SAAS,GAAGyc,mBAAhB;AACP;AACA;AACA;AACA;AACA;AACA;;AACA;;;AACA,IAAIgB,MAAM,GAAG;AACT3jL,EAAAA,GAAG,EAAE,UAAUF,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAC/B3M,IAAAA,GAAG,CAACxc,GAAD,CAAH,GAAW,KAAKjB,KAAhB;AACA,WAAO;AAAEuhM,MAAAA,WAAW,EAAEn3K;AAAf,KAAP;AACH,GAJQ;AAKT+lD,EAAAA,MAAM,EAAE,UAAU1yD,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAClC,QAAIo3K,OAAO,GAAG/jL,GAAG,CAACxc,GAAD,CAAjB;AACA,WAAOwc,GAAG,CAACxc,GAAD,CAAV;AACA,WAAO;AAAEsgM,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBo3K,MAAAA,OAAO,EAAEA;AAAlC,KAAP;AACH,GATQ;AAUTjhM,EAAAA,OAAO,EAAE,UAAUkd,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AACnC,QAAIo3K,OAAO,GAAG/jL,GAAG,CAACxc,GAAD,CAAjB;AACAwc,IAAAA,GAAG,CAACxc,GAAD,CAAH,GAAW,KAAKjB,KAAhB;AACA,WAAO;AAAEuhM,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBo3K,MAAAA,OAAO,EAAEA;AAAlC,KAAP;AACH,GAdQ;AAeT3gL,EAAAA,IAAI,EAAE,UAAUpD,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAChC;AACR;AACA;AACQ,QAAIo3K,OAAO,GAAGC,iBAAiB,CAACr3K,QAAD,EAAW,KAAK/e,IAAhB,CAA/B;;AACA,QAAIm2L,OAAJ,EAAa;AACTA,MAAAA,OAAO,GAAG,yBAAWA,OAAX,CAAV;AACH;;AACD,QAAIE,aAAa,GAAGC,cAAc,CAACv3K,QAAD,EAAW;AAAEuR,MAAAA,EAAE,EAAE,QAAN;AAAgBtwB,MAAAA,IAAI,EAAE,KAAKgD;AAA3B,KAAX,CAAd,CAA4DmzL,OAAhF;AACAG,IAAAA,cAAc,CAACv3K,QAAD,EAAW;AAAEuR,MAAAA,EAAE,EAAE,KAAN;AAAatwB,MAAAA,IAAI,EAAE,KAAKA,IAAxB;AAA8BrL,MAAAA,KAAK,EAAE0hM;AAArC,KAAX,CAAd;AACA,WAAO;AAAEH,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBo3K,MAAAA,OAAO,EAAEA;AAAlC,KAAP;AACH,GA1BQ;AA2BT1vH,EAAAA,IAAI,EAAE,UAAUr0D,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAChC,QAAIw3K,WAAW,GAAGH,iBAAiB,CAACr3K,QAAD,EAAW,KAAK/b,IAAhB,CAAnC,CADgC,CAEhC;;AACAszL,IAAAA,cAAc,CAACv3K,QAAD,EAAW;AAAEuR,MAAAA,EAAE,EAAE,KAAN;AAAatwB,MAAAA,IAAI,EAAE,KAAKA,IAAxB;AAA8BrL,MAAAA,KAAK,EAAE,yBAAW4hM,WAAX;AAArC,KAAX,CAAd;AACA,WAAO;AAAEL,MAAAA,WAAW,EAAEn3K;AAAf,KAAP;AACH,GAhCQ;AAiCTO,EAAAA,IAAI,EAAE,UAAUlN,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAChC,WAAO;AAAEm3K,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBO,MAAAA,IAAI,EAAEk3K,UAAU,CAACpkL,GAAG,CAACxc,GAAD,CAAJ,EAAW,KAAKjB,KAAhB;AAAzC,KAAP;AACH,GAnCQ;AAoCT8hM,EAAAA,IAAI,EAAE,UAAUrkL,GAAV,EAAexc,GAAf,EAAoBmpB,QAApB,EAA8B;AAChC,SAAKpqB,KAAL,GAAayd,GAAG,CAACxc,GAAD,CAAhB;AACA,WAAO;AAAEsgM,MAAAA,WAAW,EAAEn3K;AAAf,KAAP;AACH;AAvCQ,CAAb;AAyCA;;AACA,IAAI23K,MAAM,GAAG;AACTpkL,EAAAA,GAAG,EAAE,UAAUna,GAAV,EAAexG,CAAf,EAAkBotB,QAAlB,EAA4B;AAC7B,QAAI,wBAAUptB,CAAV,CAAJ,EAAkB;AACdwG,MAAAA,GAAG,CAACg9B,MAAJ,CAAWxjC,CAAX,EAAc,CAAd,EAAiB,KAAKgD,KAAtB;AACH,KAFD,MAGK;AAAE;AACHwD,MAAAA,GAAG,CAACxG,CAAD,CAAH,GAAS,KAAKgD,KAAd;AACH,KAN4B,CAO7B;;;AACA,WAAO;AAAEuhM,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBtnB,MAAAA,KAAK,EAAE9F;AAAhC,KAAP;AACH,GAVQ;AAWTmzE,EAAAA,MAAM,EAAE,UAAU3sE,GAAV,EAAexG,CAAf,EAAkBotB,QAAlB,EAA4B;AAChC,QAAI43K,WAAW,GAAGx+L,GAAG,CAACg9B,MAAJ,CAAWxjC,CAAX,EAAc,CAAd,CAAlB;AACA,WAAO;AAAEukM,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBo3K,MAAAA,OAAO,EAAEQ,WAAW,CAAC,CAAD;AAA7C,KAAP;AACH,GAdQ;AAeTzhM,EAAAA,OAAO,EAAE,UAAUiD,GAAV,EAAexG,CAAf,EAAkBotB,QAAlB,EAA4B;AACjC,QAAIo3K,OAAO,GAAGh+L,GAAG,CAACxG,CAAD,CAAjB;AACAwG,IAAAA,GAAG,CAACxG,CAAD,CAAH,GAAS,KAAKgD,KAAd;AACA,WAAO;AAAEuhM,MAAAA,WAAW,EAAEn3K,QAAf;AAAyBo3K,MAAAA,OAAO,EAAEA;AAAlC,KAAP;AACH,GAnBQ;AAoBT3gL,EAAAA,IAAI,EAAEygL,MAAM,CAACzgL,IApBJ;AAqBTixD,EAAAA,IAAI,EAAEwvH,MAAM,CAACxvH,IArBJ;AAsBTnnD,EAAAA,IAAI,EAAE22K,MAAM,CAAC32K,IAtBJ;AAuBTm3K,EAAAA,IAAI,EAAER,MAAM,CAACQ;AAvBJ,CAAb;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASL,iBAAT,CAA2Br3K,QAA3B,EAAqC63K,OAArC,EAA8C;AACjD,MAAIA,OAAO,IAAI,EAAf,EAAmB;AACf,WAAO73K,QAAP;AACH;;AACD,MAAI83K,sBAAsB,GAAG;AAAEvmK,IAAAA,EAAE,EAAE,MAAN;AAActwB,IAAAA,IAAI,EAAE42L;AAApB,GAA7B;AACAN,EAAAA,cAAc,CAACv3K,QAAD,EAAW83K,sBAAX,CAAd;AACA,SAAOA,sBAAsB,CAACliM,KAA9B;AACH;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS2hM,cAAT,CAAwBv3K,QAAxB,EAAkCytB,SAAlC,EAA6CsqJ,iBAA7C,EAAgEC,cAAhE,EAAgFC,yBAAhF,EAA2Gv/L,KAA3G,EAAkH;AACrH,MAAIq/L,iBAAiB,KAAK,KAAK,CAA/B,EAAkC;AAAEA,IAAAA,iBAAiB,GAAG,KAApB;AAA4B;;AAChE,MAAIC,cAAc,KAAK,KAAK,CAA5B,EAA+B;AAAEA,IAAAA,cAAc,GAAG,IAAjB;AAAwB;;AACzD,MAAIC,yBAAyB,KAAK,KAAK,CAAvC,EAA0C;AAAEA,IAAAA,yBAAyB,GAAG,IAA5B;AAAmC;;AAC/E,MAAIv/L,KAAK,KAAK,KAAK,CAAnB,EAAsB;AAAEA,IAAAA,KAAK,GAAG,CAAR;AAAY;;AACpC,MAAIq/L,iBAAJ,EAAuB;AACnB,QAAI,OAAOA,iBAAP,IAA4B,UAAhC,EAA4C;AACxCA,MAAAA,iBAAiB,CAACtqJ,SAAD,EAAY,CAAZ,EAAeztB,QAAf,EAAyBytB,SAAS,CAACxsC,IAAnC,CAAjB;AACH,KAFD,MAGK;AACDi3L,MAAAA,SAAS,CAACzqJ,SAAD,EAAY,CAAZ,CAAT;AACH;AACJ;AACD;;;AACA,MAAIA,SAAS,CAACxsC,IAAV,KAAmB,EAAvB,EAA2B;AACvB,QAAIyjB,WAAW,GAAG;AAAEyyK,MAAAA,WAAW,EAAEn3K;AAAf,KAAlB;;AACA,QAAIytB,SAAS,CAAClc,EAAV,KAAiB,KAArB,EAA4B;AACxB7M,MAAAA,WAAW,CAACyyK,WAAZ,GAA0B1pJ,SAAS,CAAC73C,KAApC;AACA,aAAO8uB,WAAP;AACH,KAHD,MAIK,IAAI+oB,SAAS,CAAClc,EAAV,KAAiB,SAArB,EAAgC;AACjC7M,MAAAA,WAAW,CAACyyK,WAAZ,GAA0B1pJ,SAAS,CAAC73C,KAApC;AACA8uB,MAAAA,WAAW,CAAC0yK,OAAZ,GAAsBp3K,QAAtB,CAFiC,CAED;;AAChC,aAAO0E,WAAP;AACH,KAJI,MAKA,IAAI+oB,SAAS,CAAClc,EAAV,KAAiB,MAAjB,IAA2Bkc,SAAS,CAAClc,EAAV,KAAiB,MAAhD,EAAwD;AAAE;AAC3D7M,MAAAA,WAAW,CAACyyK,WAAZ,GAA0BE,iBAAiB,CAACr3K,QAAD,EAAWytB,SAAS,CAACxpC,IAArB,CAA3C,CADyD,CACc;;AACvE,UAAIwpC,SAAS,CAAClc,EAAV,KAAiB,MAArB,EAA6B;AAAE;AAC3B7M,QAAAA,WAAW,CAAC0yK,OAAZ,GAAsBp3K,QAAtB;AACH;;AACD,aAAO0E,WAAP;AACH,KANI,MAOA,IAAI+oB,SAAS,CAAClc,EAAV,KAAiB,MAArB,EAA6B;AAC9B7M,MAAAA,WAAW,CAACnE,IAAZ,GAAmBk3K,UAAU,CAACz3K,QAAD,EAAWytB,SAAS,CAAC73C,KAArB,CAA7B;;AACA,UAAI8uB,WAAW,CAACnE,IAAZ,KAAqB,KAAzB,EAAgC;AAC5B,cAAM,IAAI02K,cAAJ,CAAmB,uBAAnB,EAA4C,uBAA5C,EAAqEv+L,KAArE,EAA4E+0C,SAA5E,EAAuFztB,QAAvF,CAAN;AACH;;AACD0E,MAAAA,WAAW,CAACyyK,WAAZ,GAA0Bn3K,QAA1B;AACA,aAAO0E,WAAP;AACH,KAPI,MAQA,IAAI+oB,SAAS,CAAClc,EAAV,KAAiB,QAArB,EAA+B;AAAE;AAClC7M,MAAAA,WAAW,CAAC0yK,OAAZ,GAAsBp3K,QAAtB;AACA0E,MAAAA,WAAW,CAACyyK,WAAZ,GAA0B,IAA1B;AACA,aAAOzyK,WAAP;AACH,KAJI,MAKA,IAAI+oB,SAAS,CAAClc,EAAV,KAAiB,MAArB,EAA6B;AAC9Bkc,MAAAA,SAAS,CAAC73C,KAAV,GAAkBoqB,QAAlB;AACA,aAAO0E,WAAP;AACH,KAHI,MAIA;AAAE;AACH,UAAIqzK,iBAAJ,EAAuB;AACnB,cAAM,IAAId,cAAJ,CAAmB,sEAAnB,EAA2F,sBAA3F,EAAmHv+L,KAAnH,EAA0H+0C,SAA1H,EAAqIztB,QAArI,CAAN;AACH,OAFD,MAGK;AACD,eAAO0E,WAAP;AACH;AACJ;AACJ;AAAC;AA3CF,OA4CK;AACD,UAAI,CAACszK,cAAL,EAAqB;AACjBh4K,QAAAA,QAAQ,GAAG,yBAAWA,QAAX,CAAX;AACH;;AACD,UAAI/e,IAAI,GAAGwsC,SAAS,CAACxsC,IAAV,IAAkB,EAA7B;AACA,UAAI8T,IAAI,GAAG9T,IAAI,CAACxK,KAAL,CAAW,GAAX,CAAX;AACA,UAAI4c,GAAG,GAAG2M,QAAV;AACA,UAAI1pB,CAAC,GAAG,CAAR,CAPC,CAOU;;AACX,UAAIhE,GAAG,GAAGyiB,IAAI,CAAC7iB,MAAf;AACA,UAAIimM,oBAAoB,GAAGrwE,SAA3B;AACA,UAAIjxH,GAAG,GAAG,KAAK,CAAf;AACA,UAAIuhM,gBAAgB,GAAG,KAAK,CAA5B;;AACA,UAAI,OAAOL,iBAAP,IAA4B,UAAhC,EAA4C;AACxCK,QAAAA,gBAAgB,GAAGL,iBAAnB;AACH,OAFD,MAGK;AACDK,QAAAA,gBAAgB,GAAGF,SAAnB;AACH;;AACD,aAAO,IAAP,EAAa;AACTrhM,QAAAA,GAAG,GAAGke,IAAI,CAACze,CAAD,CAAV;;AACA,YAAI2hM,yBAAyB,IAAIphM,GAAG,IAAI,WAAxC,EAAqD;AACjD,gBAAM,IAAIijI,SAAJ,CAAc,oNAAd,CAAN;AACH;;AACD,YAAIi+D,iBAAJ,EAAuB;AACnB,cAAII,oBAAoB,KAAKrwE,SAA7B,EAAwC;AACpC,gBAAIz0G,GAAG,CAACxc,GAAD,CAAH,KAAaixH,SAAjB,EAA4B;AACxBqwE,cAAAA,oBAAoB,GAAGpjL,IAAI,CAAC9Y,KAAL,CAAW,CAAX,EAAc3F,CAAd,EAAiBE,IAAjB,CAAsB,GAAtB,CAAvB;AACH,aAFD,MAGK,IAAIF,CAAC,IAAIhE,GAAG,GAAG,CAAf,EAAkB;AACnB6lM,cAAAA,oBAAoB,GAAG1qJ,SAAS,CAACxsC,IAAjC;AACH;;AACD,gBAAIk3L,oBAAoB,KAAKrwE,SAA7B,EAAwC;AACpCswE,cAAAA,gBAAgB,CAAC3qJ,SAAD,EAAY,CAAZ,EAAeztB,QAAf,EAAyBm4K,oBAAzB,CAAhB;AACH;AACJ;AACJ;;AACD7hM,QAAAA,CAAC;;AACD,YAAI5D,KAAK,CAACuH,OAAN,CAAcoZ,GAAd,CAAJ,EAAwB;AACpB,cAAIxc,GAAG,KAAK,GAAZ,EAAiB;AACbA,YAAAA,GAAG,GAAGwc,GAAG,CAACnhB,MAAV;AACH,WAFD,MAGK;AACD,gBAAI6lM,iBAAiB,IAAI,CAAC,wBAAUlhM,GAAV,CAA1B,EAA0C;AACtC,oBAAM,IAAIogM,cAAJ,CAAmB,yHAAnB,EAA8I,oCAA9I,EAAoLv+L,KAApL,EAA2L+0C,SAA3L,EAAsMztB,QAAtM,CAAN;AACH,aAFD,CAEE;AAFF,iBAGK,IAAI,wBAAUnpB,GAAV,CAAJ,EAAoB;AACrBA,gBAAAA,GAAG,GAAG,CAAC,CAACA,GAAR;AACH;AACJ;;AACD,cAAIP,CAAC,IAAIhE,GAAT,EAAc;AACV,gBAAIylM,iBAAiB,IAAItqJ,SAAS,CAAClc,EAAV,KAAiB,KAAtC,IAA+C16B,GAAG,GAAGwc,GAAG,CAACnhB,MAA7D,EAAqE;AACjE,oBAAM,IAAI+kM,cAAJ,CAAmB,kFAAnB,EAAuG,+BAAvG,EAAwIv+L,KAAxI,EAA+I+0C,SAA/I,EAA0JztB,QAA1J,CAAN;AACH;;AACD,gBAAI0E,WAAW,GAAGizK,MAAM,CAAClqJ,SAAS,CAAClc,EAAX,CAAN,CAAqB7/B,IAArB,CAA0B+7C,SAA1B,EAAqCp6B,GAArC,EAA0Cxc,GAA1C,EAA+CmpB,QAA/C,CAAlB,CAJU,CAIkE;;AAC5E,gBAAI0E,WAAW,CAACnE,IAAZ,KAAqB,KAAzB,EAAgC;AAC5B,oBAAM,IAAI02K,cAAJ,CAAmB,uBAAnB,EAA4C,uBAA5C,EAAqEv+L,KAArE,EAA4E+0C,SAA5E,EAAuFztB,QAAvF,CAAN;AACH;;AACD,mBAAO0E,WAAP;AACH;AACJ,SAtBD,MAuBK;AACD,cAAI7tB,GAAG,IAAIA,GAAG,CAACm5B,OAAJ,CAAY,GAAZ,KAAoB,CAAC,CAAhC,EAAmC;AAC/Bn5B,YAAAA,GAAG,GAAG,oCAAsBA,GAAtB,CAAN;AACH;;AACD,cAAIP,CAAC,IAAIhE,GAAT,EAAc;AACV,gBAAIoyB,WAAW,GAAGwyK,MAAM,CAACzpJ,SAAS,CAAClc,EAAX,CAAN,CAAqB7/B,IAArB,CAA0B+7C,SAA1B,EAAqCp6B,GAArC,EAA0Cxc,GAA1C,EAA+CmpB,QAA/C,CAAlB,CADU,CACkE;;AAC5E,gBAAI0E,WAAW,CAACnE,IAAZ,KAAqB,KAAzB,EAAgC;AAC5B,oBAAM,IAAI02K,cAAJ,CAAmB,uBAAnB,EAA4C,uBAA5C,EAAqEv+L,KAArE,EAA4E+0C,SAA5E,EAAuFztB,QAAvF,CAAN;AACH;;AACD,mBAAO0E,WAAP;AACH;AACJ;;AACDrR,QAAAA,GAAG,GAAGA,GAAG,CAACxc,GAAD,CAAT;AACH;AACJ;AACJ;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASwhM,UAAT,CAAoBr4K,QAApB,EAA8Bs4K,KAA9B,EAAqCP,iBAArC,EAAwDC,cAAxD,EAAwEC,yBAAxE,EAAmG;AACtG,MAAID,cAAc,KAAK,KAAK,CAA5B,EAA+B;AAAEA,IAAAA,cAAc,GAAG,IAAjB;AAAwB;;AACzD,MAAIC,yBAAyB,KAAK,KAAK,CAAvC,EAA0C;AAAEA,IAAAA,yBAAyB,GAAG,IAA5B;AAAmC;;AAC/E,MAAIF,iBAAJ,EAAuB;AACnB,QAAI,CAACrlM,KAAK,CAACuH,OAAN,CAAcq+L,KAAd,CAAL,EAA2B;AACvB,YAAM,IAAIrB,cAAJ,CAAmB,iCAAnB,EAAsD,uBAAtD,CAAN;AACH;AACJ;;AACD,MAAI,CAACe,cAAL,EAAqB;AACjBh4K,IAAAA,QAAQ,GAAG,yBAAWA,QAAX,CAAX;AACH;;AACD,MAAIs9F,OAAO,GAAG,IAAI5qH,KAAJ,CAAU4lM,KAAK,CAACpmM,MAAhB,CAAd;;AACA,OAAK,IAAIU,CAAC,GAAG,CAAR,EAAWs+F,QAAQ,GAAGonG,KAAK,CAACpmM,MAAjC,EAAyCU,CAAC,GAAGs+F,QAA7C,EAAuDt+F,CAAC,EAAxD,EAA4D;AACxD;AACA0qH,IAAAA,OAAO,CAAC1qH,CAAD,CAAP,GAAa2kM,cAAc,CAACv3K,QAAD,EAAWs4K,KAAK,CAAC1lM,CAAD,CAAhB,EAAqBmlM,iBAArB,EAAwC,IAAxC,EAA8CE,yBAA9C,EAAyErlM,CAAzE,CAA3B;AACAotB,IAAAA,QAAQ,GAAGs9F,OAAO,CAAC1qH,CAAD,CAAP,CAAWukM,WAAtB,CAHwD,CAGrB;AACtC;;AACD75E,EAAAA,OAAO,CAAC65E,WAAR,GAAsBn3K,QAAtB;AACA,SAAOs9F,OAAP;AACH;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASi7E,YAAT,CAAsBv4K,QAAtB,EAAgCytB,SAAhC,EAA2C/0C,KAA3C,EAAkD;AACrD,MAAI8/L,eAAe,GAAGjB,cAAc,CAACv3K,QAAD,EAAWytB,SAAX,CAApC;;AACA,MAAI+qJ,eAAe,CAACj4K,IAAhB,KAAyB,KAA7B,EAAoC;AAAE;AAClC,UAAM,IAAI02K,cAAJ,CAAmB,uBAAnB,EAA4C,uBAA5C,EAAqEv+L,KAArE,EAA4E+0C,SAA5E,EAAuFztB,QAAvF,CAAN;AACH;;AACD,SAAOw4K,eAAe,CAACrB,WAAvB;AACH;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASe,SAAT,CAAmBzqJ,SAAnB,EAA8B/0C,KAA9B,EAAqCsnB,QAArC,EAA+Cm4K,oBAA/C,EAAqE;AACxE,MAAI,OAAO1qJ,SAAP,KAAqB,QAArB,IAAiCA,SAAS,KAAK,IAA/C,IAAuD/6C,KAAK,CAACuH,OAAN,CAAcwzC,SAAd,CAA3D,EAAqF;AACjF,UAAM,IAAIwpJ,cAAJ,CAAmB,4BAAnB,EAAiD,yBAAjD,EAA4Ev+L,KAA5E,EAAmF+0C,SAAnF,EAA8FztB,QAA9F,CAAN;AACH,GAFD,MAGK,IAAI,CAACk3K,MAAM,CAACzpJ,SAAS,CAAClc,EAAX,CAAX,EAA2B;AAC5B,UAAM,IAAI0lK,cAAJ,CAAmB,sEAAnB,EAA2F,sBAA3F,EAAmHv+L,KAAnH,EAA0H+0C,SAA1H,EAAqIztB,QAArI,CAAN;AACH,GAFI,MAGA,IAAI,OAAOytB,SAAS,CAACxsC,IAAjB,KAA0B,QAA9B,EAAwC;AACzC,UAAM,IAAIg2L,cAAJ,CAAmB,2CAAnB,EAAgE,wBAAhE,EAA0Fv+L,KAA1F,EAAiG+0C,SAAjG,EAA4GztB,QAA5G,CAAN;AACH,GAFI,MAGA,IAAIytB,SAAS,CAACxsC,IAAV,CAAe+uB,OAAf,CAAuB,GAAvB,MAAgC,CAAhC,IAAqCyd,SAAS,CAACxsC,IAAV,CAAe/O,MAAf,GAAwB,CAAjE,EAAoE;AACrE;AACA,UAAM,IAAI+kM,cAAJ,CAAmB,+CAAnB,EAAoE,wBAApE,EAA8Fv+L,KAA9F,EAAqG+0C,SAArG,EAAgHztB,QAAhH,CAAN;AACH,GAHI,MAIA,IAAI,CAACytB,SAAS,CAAClc,EAAV,KAAiB,MAAjB,IAA2Bkc,SAAS,CAAClc,EAAV,KAAiB,MAA7C,KAAwD,OAAOkc,SAAS,CAACxpC,IAAjB,KAA0B,QAAtF,EAAgG;AACjG,UAAM,IAAIgzL,cAAJ,CAAmB,uFAAnB,EAA4G,yBAA5G,EAAuIv+L,KAAvI,EAA8I+0C,SAA9I,EAAyJztB,QAAzJ,CAAN;AACH,GAFI,MAGA,IAAI,CAACytB,SAAS,CAAClc,EAAV,KAAiB,KAAjB,IAA0Bkc,SAAS,CAAClc,EAAV,KAAiB,SAA3C,IAAwDkc,SAAS,CAAClc,EAAV,KAAiB,MAA1E,KAAqFkc,SAAS,CAAC73C,KAAV,KAAoBkyH,SAA7G,EAAwH;AACzH,UAAM,IAAImvE,cAAJ,CAAmB,kGAAnB,EAAuH,0BAAvH,EAAmJv+L,KAAnJ,EAA0J+0C,SAA1J,EAAqKztB,QAArK,CAAN;AACH,GAFI,MAGA,IAAI,CAACytB,SAAS,CAAClc,EAAV,KAAiB,KAAjB,IAA0Bkc,SAAS,CAAClc,EAAV,KAAiB,SAA3C,IAAwDkc,SAAS,CAAClc,EAAV,KAAiB,MAA1E,KAAqF,2BAAakc,SAAS,CAAC73C,KAAvB,CAAzF,EAAwH;AACzH,UAAM,IAAIqhM,cAAJ,CAAmB,kGAAnB,EAAuH,0CAAvH,EAAmKv+L,KAAnK,EAA0K+0C,SAA1K,EAAqLztB,QAArL,CAAN;AACH,GAFI,MAGA,IAAIA,QAAJ,EAAc;AACf,QAAIytB,SAAS,CAAClc,EAAV,IAAgB,KAApB,EAA2B;AACvB,UAAIknK,OAAO,GAAGhrJ,SAAS,CAACxsC,IAAV,CAAexK,KAAf,CAAqB,GAArB,EAA0BvE,MAAxC;AACA,UAAIwmM,eAAe,GAAGP,oBAAoB,CAAC1hM,KAArB,CAA2B,GAA3B,EAAgCvE,MAAtD;;AACA,UAAIumM,OAAO,KAAKC,eAAe,GAAG,CAA9B,IAAmCD,OAAO,KAAKC,eAAnD,EAAoE;AAChE,cAAM,IAAIzB,cAAJ,CAAmB,uDAAnB,EAA4E,2BAA5E,EAAyGv+L,KAAzG,EAAgH+0C,SAAhH,EAA2HztB,QAA3H,CAAN;AACH;AACJ,KAND,MAOK,IAAIytB,SAAS,CAAClc,EAAV,KAAiB,SAAjB,IAA8Bkc,SAAS,CAAClc,EAAV,KAAiB,QAA/C,IAA2Dkc,SAAS,CAAClc,EAAV,KAAiB,MAAhF,EAAwF;AACzF,UAAIkc,SAAS,CAACxsC,IAAV,KAAmBk3L,oBAAvB,EAA6C;AACzC,cAAM,IAAIlB,cAAJ,CAAmB,4DAAnB,EAAiF,6BAAjF,EAAgHv+L,KAAhH,EAAuH+0C,SAAvH,EAAkIztB,QAAlI,CAAN;AACH;AACJ,KAJI,MAKA,IAAIytB,SAAS,CAAClc,EAAV,KAAiB,MAAjB,IAA2Bkc,SAAS,CAAClc,EAAV,KAAiB,MAAhD,EAAwD;AACzD,UAAIonK,aAAa,GAAG;AAAEpnK,QAAAA,EAAE,EAAE,MAAN;AAActwB,QAAAA,IAAI,EAAEwsC,SAAS,CAACxpC,IAA9B;AAAoCrO,QAAAA,KAAK,EAAEkyH;AAA3C,OAApB;AACA,UAAI7wG,KAAK,GAAG2hL,QAAQ,CAAC,CAACD,aAAD,CAAD,EAAkB34K,QAAlB,CAApB;;AACA,UAAI/I,KAAK,IAAIA,KAAK,CAAC9iB,IAAN,KAAe,6BAA5B,EAA2D;AACvD,cAAM,IAAI8iM,cAAJ,CAAmB,8DAAnB,EAAmF,6BAAnF,EAAkHv+L,KAAlH,EAAyH+0C,SAAzH,EAAoIztB,QAApI,CAAN;AACH;AACJ;AACJ;AACJ;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS44K,QAAT,CAAkBC,QAAlB,EAA4B74K,QAA5B,EAAsC84K,iBAAtC,EAAyD;AAC5D,MAAI;AACA,QAAI,CAACpmM,KAAK,CAACuH,OAAN,CAAc4+L,QAAd,CAAL,EAA8B;AAC1B,YAAM,IAAI5B,cAAJ,CAAmB,iCAAnB,EAAsD,uBAAtD,CAAN;AACH;;AACD,QAAIj3K,QAAJ,EAAc;AACV;AACAq4K,MAAAA,UAAU,CAAC,yBAAWr4K,QAAX,CAAD,EAAuB,yBAAW64K,QAAX,CAAvB,EAA6CC,iBAAiB,IAAI,IAAlE,CAAV;AACH,KAHD,MAIK;AACDA,MAAAA,iBAAiB,GAAGA,iBAAiB,IAAIZ,SAAzC;;AACA,WAAK,IAAItlM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGimM,QAAQ,CAAC3mM,MAA7B,EAAqCU,CAAC,EAAtC,EAA0C;AACtCkmM,QAAAA,iBAAiB,CAACD,QAAQ,CAACjmM,CAAD,CAAT,EAAcA,CAAd,EAAiBotB,QAAjB,EAA2B8nG,SAA3B,CAAjB;AACH;AACJ;AACJ,GAdD,CAeA,OAAOx2H,CAAP,EAAU;AACN,QAAIA,CAAC,YAAY2lM,cAAjB,EAAiC;AAC7B,aAAO3lM,CAAP;AACH,KAFD,MAGK;AACD,YAAMA,CAAN;AACH;AACJ;AACJ,EACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASmmM,UAAT,CAAoB39L,CAApB,EAAuB6G,CAAvB,EAA0B;AAC7B,MAAI7G,CAAC,KAAK6G,CAAV,EACI,OAAO,IAAP;;AACJ,MAAI7G,CAAC,IAAI6G,CAAL,IAAU,OAAO7G,CAAP,IAAY,QAAtB,IAAkC,OAAO6G,CAAP,IAAY,QAAlD,EAA4D;AACxD,QAAIo4L,IAAI,GAAGrmM,KAAK,CAACuH,OAAN,CAAcH,CAAd,CAAX;AAAA,QAA6Bk/L,IAAI,GAAGtmM,KAAK,CAACuH,OAAN,CAAc0G,CAAd,CAApC;AAAA,QAAsD/N,CAAtD;AAAA,QAAyDV,MAAzD;AAAA,QAAiE2E,GAAjE;;AACA,QAAIkiM,IAAI,IAAIC,IAAZ,EAAkB;AACd9mM,MAAAA,MAAM,GAAG4H,CAAC,CAAC5H,MAAX;AACA,UAAIA,MAAM,IAAIyO,CAAC,CAACzO,MAAhB,EACI,OAAO,KAAP;;AACJ,WAAKU,CAAC,GAAGV,MAAT,EAAiBU,CAAC,OAAO,CAAzB,GACI,IAAI,CAAC6kM,UAAU,CAAC39L,CAAC,CAAClH,CAAD,CAAF,EAAO+N,CAAC,CAAC/N,CAAD,CAAR,CAAf,EACI,OAAO,KAAP;;AACR,aAAO,IAAP;AACH;;AACD,QAAImmM,IAAI,IAAIC,IAAZ,EACI,OAAO,KAAP;AACJ,QAAIjkL,IAAI,GAAGpf,MAAM,CAACof,IAAP,CAAYjb,CAAZ,CAAX;AACA5H,IAAAA,MAAM,GAAG6iB,IAAI,CAAC7iB,MAAd;AACA,QAAIA,MAAM,KAAKyD,MAAM,CAACof,IAAP,CAAYpU,CAAZ,EAAezO,MAA9B,EACI,OAAO,KAAP;;AACJ,SAAKU,CAAC,GAAGV,MAAT,EAAiBU,CAAC,OAAO,CAAzB,GACI,IAAI,CAAC+N,CAAC,CAAC4oH,cAAF,CAAiBx0G,IAAI,CAACniB,CAAD,CAArB,CAAL,EACI,OAAO,KAAP;;AACR,SAAKA,CAAC,GAAGV,MAAT,EAAiBU,CAAC,OAAO,CAAzB,GAA6B;AACzBiE,MAAAA,GAAG,GAAGke,IAAI,CAACniB,CAAD,CAAV;AACA,UAAI,CAAC6kM,UAAU,CAAC39L,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,CAAf,EACI,OAAO,KAAP;AACP;;AACD,WAAO,IAAP;AACH;;AACD,SAAOiD,CAAC,KAAKA,CAAN,IAAW6G,CAAC,KAAKA,CAAxB;AACH;;AACD;;;;;;;;;;;;ACpaA;;AACA;;AANA;AACA;AACA;AACA;AACA;AAGA,IAAIs4L,UAAU,GAAG,IAAIplL,OAAJ,EAAjB;;AACA,IAAIqlL,MAAM;AAAG;AAAe,YAAY;AACpC,WAASA,MAAT,CAAgB7lL,GAAhB,EAAqB;AACjB,SAAK8lL,SAAL,GAAiB,IAAI/hM,GAAJ,EAAjB;AACA,SAAKic,GAAL,GAAWA,GAAX;AACH;;AACD,SAAO6lL,MAAP;AACH,CAN2B,EAA5B;;AAOA,IAAIE,YAAY;AAAG;AAAe,YAAY;AAC1C,WAASA,YAAT,CAAsB5vH,QAAtB,EAAgC6vH,QAAhC,EAA0C;AACtC,SAAK7vH,QAAL,GAAgBA,QAAhB;AACA,SAAK6vH,QAAL,GAAgBA,QAAhB;AACH;;AACD,SAAOD,YAAP;AACH,CANiC,EAAlC;;AAOA,SAASE,SAAT,CAAmBjmL,GAAnB,EAAwB;AACpB,SAAO4lL,UAAU,CAACvjM,GAAX,CAAe2d,GAAf,CAAP;AACH;;AACD,SAASkmL,qBAAT,CAA+BC,MAA/B,EAAuChwH,QAAvC,EAAiD;AAC7C,SAAOgwH,MAAM,CAACL,SAAP,CAAiBzjM,GAAjB,CAAqB8zE,QAArB,CAAP;AACH;;AACD,SAASiwH,wBAAT,CAAkCD,MAAlC,EAA0CH,QAA1C,EAAoD;AAChDG,EAAAA,MAAM,CAACL,SAAP,CAAiB9gM,MAAjB,CAAwBghM,QAAQ,CAAC7vH,QAAjC;AACH;AACD;AACA;AACA;;;AACO,SAASkwH,SAAT,CAAmBnD,IAAnB,EAAyB8C,QAAzB,EAAmC;AACtCA,EAAAA,QAAQ,CAACK,SAAT;AACH;AACD;AACA;AACA;;;AACO,SAASC,OAAT,CAAiBtmL,GAAjB,EAAsBm2D,QAAtB,EAAgC;AACnC,MAAIowH,OAAO,GAAG,EAAd;AACA,MAAIP,QAAJ;AACA,MAAIG,MAAM,GAAGF,SAAS,CAACjmL,GAAD,CAAtB;;AACA,MAAI,CAACmmL,MAAL,EAAa;AACTA,IAAAA,MAAM,GAAG,IAAIN,MAAJ,CAAW7lL,GAAX,CAAT;AACA4lL,IAAAA,UAAU,CAAC1jM,GAAX,CAAe8d,GAAf,EAAoBmmL,MAApB;AACH,GAHD,MAIK;AACD,QAAIK,YAAY,GAAGN,qBAAqB,CAACC,MAAD,EAAShwH,QAAT,CAAxC;AACA6vH,IAAAA,QAAQ,GAAGQ,YAAY,IAAIA,YAAY,CAACR,QAAxC;AACH;;AACD,MAAIA,QAAJ,EAAc;AACV,WAAOA,QAAP;AACH;;AACDA,EAAAA,QAAQ,GAAG,EAAX;AACAG,EAAAA,MAAM,CAAC5jM,KAAP,GAAe,yBAAWyd,GAAX,CAAf;;AACA,MAAIm2D,QAAJ,EAAc;AACV6vH,IAAAA,QAAQ,CAAC7vH,QAAT,GAAoBA,QAApB;AACA6vH,IAAAA,QAAQ,CAAC/xH,IAAT,GAAgB,IAAhB;;AACA,QAAIwyH,UAAU,GAAG,YAAY;AACzBC,MAAAA,QAAQ,CAACV,QAAD,CAAR;AACH,KAFD;;AAGA,QAAIW,SAAS,GAAG,YAAY;AACxBzoM,MAAAA,YAAY,CAAC8nM,QAAQ,CAAC/xH,IAAV,CAAZ;AACA+xH,MAAAA,QAAQ,CAAC/xH,IAAT,GAAgBj2E,UAAU,CAACyoM,UAAD,CAA1B;AACH,KAHD;;AAIA,QAAI,OAAOt6K,MAAP,KAAkB,WAAtB,EAAmC;AAAE;AACjCA,MAAAA,MAAM,CAACmC,gBAAP,CAAwB,SAAxB,EAAmCq4K,SAAnC;AACAx6K,MAAAA,MAAM,CAACmC,gBAAP,CAAwB,OAAxB,EAAiCq4K,SAAjC;AACAx6K,MAAAA,MAAM,CAACmC,gBAAP,CAAwB,WAAxB,EAAqCq4K,SAArC;AACAx6K,MAAAA,MAAM,CAACmC,gBAAP,CAAwB,SAAxB,EAAmCq4K,SAAnC;AACAx6K,MAAAA,MAAM,CAACmC,gBAAP,CAAwB,QAAxB,EAAkCq4K,SAAlC;AACH;AACJ;;AACDX,EAAAA,QAAQ,CAACO,OAAT,GAAmBA,OAAnB;AACAP,EAAAA,QAAQ,CAACY,MAAT,GAAkB5mL,GAAlB;;AACAgmL,EAAAA,QAAQ,CAACK,SAAT,GAAqB,YAAY;AAC7BK,IAAAA,QAAQ,CAACV,QAAD,CAAR;AACA9nM,IAAAA,YAAY,CAAC8nM,QAAQ,CAAC/xH,IAAV,CAAZ;AACAmyH,IAAAA,wBAAwB,CAACD,MAAD,EAASH,QAAT,CAAxB;;AACA,QAAI,OAAO75K,MAAP,KAAkB,WAAtB,EAAmC;AAC/BA,MAAAA,MAAM,CAAC06K,mBAAP,CAA2B,SAA3B,EAAsCF,SAAtC;AACAx6K,MAAAA,MAAM,CAAC06K,mBAAP,CAA2B,OAA3B,EAAoCF,SAApC;AACAx6K,MAAAA,MAAM,CAAC06K,mBAAP,CAA2B,WAA3B,EAAwCF,SAAxC;AACAx6K,MAAAA,MAAM,CAAC06K,mBAAP,CAA2B,SAA3B,EAAsCF,SAAtC;AACAx6K,MAAAA,MAAM,CAAC06K,mBAAP,CAA2B,QAA3B,EAAqCF,SAArC;AACH;AACJ,GAXD;;AAYAR,EAAAA,MAAM,CAACL,SAAP,CAAiB5jM,GAAjB,CAAqBi0E,QAArB,EAA+B,IAAI4vH,YAAJ,CAAiB5vH,QAAjB,EAA2B6vH,QAA3B,CAA/B;AACA,SAAOA,QAAP;AACH;AACD;AACA;AACA;;;AACO,SAASU,QAAT,CAAkBV,QAAlB,EAA4Bc,UAA5B,EAAwC;AAC3C,MAAIA,UAAU,KAAK,KAAK,CAAxB,EAA2B;AAAEA,IAAAA,UAAU,GAAG,KAAb;AAAqB;;AAClD,MAAIX,MAAM,GAAGP,UAAU,CAACvjM,GAAX,CAAe2jM,QAAQ,CAACY,MAAxB,CAAb;;AACAG,EAAAA,SAAS,CAACZ,MAAM,CAAC5jM,KAAR,EAAeyjM,QAAQ,CAACY,MAAxB,EAAgCZ,QAAQ,CAACO,OAAzC,EAAkD,EAAlD,EAAsDO,UAAtD,CAAT;;AACA,MAAId,QAAQ,CAACO,OAAT,CAAiB1nM,MAArB,EAA6B;AACzB,0BAAWsnM,MAAM,CAAC5jM,KAAlB,EAAyByjM,QAAQ,CAACO,OAAlC;AACH;;AACD,MAAInhM,IAAI,GAAG4gM,QAAQ,CAACO,OAApB;;AACA,MAAInhM,IAAI,CAACvG,MAAL,GAAc,CAAlB,EAAqB;AACjBmnM,IAAAA,QAAQ,CAACO,OAAT,GAAmB,EAAnB;;AACA,QAAIP,QAAQ,CAAC7vH,QAAb,EAAuB;AACnB6vH,MAAAA,QAAQ,CAAC7vH,QAAT,CAAkB/wE,IAAlB;AACH;AACJ;;AACD,SAAOA,IAAP;AACH,EACD;;;AACA,SAAS2hM,SAAT,CAAmBZ,MAAnB,EAA2BnmL,GAA3B,EAAgCumL,OAAhC,EAAyC34L,IAAzC,EAA+Ck5L,UAA/C,EAA2D;AACvD,MAAI9mL,GAAG,KAAKmmL,MAAZ,EAAoB;AAChB;AACH;;AACD,MAAI,OAAOnmL,GAAG,CAACquI,MAAX,KAAsB,UAA1B,EAAsC;AAClCruI,IAAAA,GAAG,GAAGA,GAAG,CAACquI,MAAJ,EAAN;AACH;;AACD,MAAI24C,OAAO,GAAG,0BAAYhnL,GAAZ,CAAd;AACA,MAAIinL,OAAO,GAAG,0BAAYd,MAAZ,CAAd;AACA,MAAIe,OAAO,GAAG,KAAd;AACA,MAAIC,OAAO,GAAG,KAAd,CAVuD,CAWvD;;AACA,OAAK,IAAIlkM,CAAC,GAAGgkM,OAAO,CAACpoM,MAAR,GAAiB,CAA9B,EAAiCoE,CAAC,IAAI,CAAtC,EAAyCA,CAAC,EAA1C,EAA8C;AAC1C,QAAIO,GAAG,GAAGyjM,OAAO,CAAChkM,CAAD,CAAjB;AACA,QAAImkM,MAAM,GAAGjB,MAAM,CAAC3iM,GAAD,CAAnB;;AACA,QAAI,6BAAewc,GAAf,EAAoBxc,GAApB,KAA4B,EAAEwc,GAAG,CAACxc,GAAD,CAAH,KAAaixH,SAAb,IAA0B2yE,MAAM,KAAK3yE,SAArC,IAAkDp1H,KAAK,CAACuH,OAAN,CAAcoZ,GAAd,MAAuB,KAA3E,CAAhC,EAAmH;AAC/G,UAAI8rF,MAAM,GAAG9rF,GAAG,CAACxc,GAAD,CAAhB;;AACA,UAAI,OAAO4jM,MAAP,IAAiB,QAAjB,IAA6BA,MAAM,IAAI,IAAvC,IAA+C,OAAOt7F,MAAP,IAAiB,QAAhE,IAA4EA,MAAM,IAAI,IAA1F,EAAgG;AAC5Fi7F,QAAAA,SAAS,CAACK,MAAD,EAASt7F,MAAT,EAAiBy6F,OAAjB,EAA0B34L,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB,CAAvC,EAAiEsjM,UAAjE,CAAT;AACH,OAFD,MAGK;AACD,YAAIM,MAAM,KAAKt7F,MAAf,EAAuB;AACnBo7F,UAAAA,OAAO,GAAG,IAAV;;AACA,cAAIJ,UAAJ,EAAgB;AACZP,YAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,cAAAA,EAAE,EAAE,MAAN;AAActwB,cAAAA,IAAI,EAAEA,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB,CAAjC;AAA2DjB,cAAAA,KAAK,EAAE,yBAAW6kM,MAAX;AAAlE,aAAb;AACH;;AACDb,UAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,YAAAA,EAAE,EAAE,SAAN;AAAiBtwB,YAAAA,IAAI,EAAEA,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB,CAApC;AAA8DjB,YAAAA,KAAK,EAAE,yBAAWupG,MAAX;AAArE,WAAb;AACH;AACJ;AACJ,KAdD,MAeK,IAAIzsG,KAAK,CAACuH,OAAN,CAAcu/L,MAAd,MAA0B9mM,KAAK,CAACuH,OAAN,CAAcoZ,GAAd,CAA9B,EAAkD;AACnD,UAAI8mL,UAAJ,EAAgB;AACZP,QAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,UAAAA,EAAE,EAAE,MAAN;AAActwB,UAAAA,IAAI,EAAEA,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB,CAAjC;AAA2DjB,UAAAA,KAAK,EAAE,yBAAW6kM,MAAX;AAAlE,SAAb;AACH;;AACDb,MAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,QAAAA,EAAE,EAAE,QAAN;AAAgBtwB,QAAAA,IAAI,EAAEA,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB;AAAnC,OAAb;AACA2jM,MAAAA,OAAO,GAAG,IAAV,CALmD,CAKnC;AACnB,KANI,MAOA;AACD,UAAIL,UAAJ,EAAgB;AACZP,QAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,UAAAA,EAAE,EAAE,MAAN;AAActwB,UAAAA,IAAI,EAAEA,IAApB;AAA0BrL,UAAAA,KAAK,EAAE4jM;AAAjC,SAAb;AACH;;AACDI,MAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,QAAAA,EAAE,EAAE,SAAN;AAAiBtwB,QAAAA,IAAI,EAAEA,IAAvB;AAA6BrL,QAAAA,KAAK,EAAEyd;AAApC,OAAb;AACAknL,MAAAA,OAAO,GAAG,IAAV;AACH;AACJ;;AACD,MAAI,CAACC,OAAD,IAAYH,OAAO,CAACnoM,MAAR,IAAkBooM,OAAO,CAACpoM,MAA1C,EAAkD;AAC9C;AACH;;AACD,OAAK,IAAIoE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+jM,OAAO,CAACnoM,MAA5B,EAAoCoE,CAAC,EAArC,EAAyC;AACrC,QAAIO,GAAG,GAAGwjM,OAAO,CAAC/jM,CAAD,CAAjB;;AACA,QAAI,CAAC,6BAAekjM,MAAf,EAAuB3iM,GAAvB,CAAD,IAAgCwc,GAAG,CAACxc,GAAD,CAAH,KAAaixH,SAAjD,EAA4D;AACxD8xE,MAAAA,OAAO,CAAC/mM,IAAR,CAAa;AAAE0+B,QAAAA,EAAE,EAAE,KAAN;AAAatwB,QAAAA,IAAI,EAAEA,IAAI,GAAG,GAAP,GAAa,kCAAoBpK,GAApB,CAAhC;AAA0DjB,QAAAA,KAAK,EAAE,yBAAWyd,GAAG,CAACxc,GAAD,CAAd;AAAjE,OAAb;AACH;AACJ;AACJ;AACD;AACA;AACA;;;AACO,SAAS6jM,OAAT,CAAiBC,KAAjB,EAAwBC,KAAxB,EAA+BT,UAA/B,EAA2C;AAC9C,MAAIA,UAAU,KAAK,KAAK,CAAxB,EAA2B;AAAEA,IAAAA,UAAU,GAAG,KAAb;AAAqB;;AAClD,MAAIP,OAAO,GAAG,EAAd;;AACAQ,EAAAA,SAAS,CAACO,KAAD,EAAQC,KAAR,EAAehB,OAAf,EAAwB,EAAxB,EAA4BO,UAA5B,CAAT;;AACA,SAAOP,OAAP;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/KD;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;;;AAQA;AACA;AACA;eAWejkM,MAAM,CAACE,MAAP,CAAc,EAAd,EAAkBglM,IAAlB,EAAwBC,MAAxB,EAAgC;AAC3C7D,EAAAA,cAAc,EAAdA,mBAD2C;AAE3Cxd,EAAAA,SAAS,EAATA,mBAF2C;AAG3C2c,EAAAA,mBAAmB,EAAnBA,4BAH2C;AAI3CC,EAAAA,qBAAqB,EAArBA;AAJ2C,CAAhC;;;;ACvBf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA,MAAM0E,mBAAmB,GAAG,OAA5B;AAEA,MAAMC,UAAU,GAAG,GAAnB;AACA,MAAM/6J,gBAAgB,GAAGjgC,MAAM,CAACigC,gBAAP;AACvB;AAA2B,gBAD7B,EAGA;;AACA,MAAMg7J,yBAAyB,GAAG,EAAlC;AAEAnqM,MAAM,CAACC,OAAP,GAAiB;AACfgqM,EAAAA,mBADe;AAEfC,EAAAA,UAFe;AAGf/6J,EAAAA,gBAHe;AAIfg7J,EAAAA;AAJe,CAAjB;;;ACXA,MAAMv1K,KAAK,GACT,OAAO70B,OAAP,KAAmB,QAAnB,IACAA,OAAO,CAACuC,GADR,iBAGA,cAAcmtB,IAAd,WAJY,GAKV,CAAC,GAAG9tB,IAAJ,KAAasC,OAAO,CAACkiB,KAAR,CAAc,QAAd,EAAwB,GAAGxkB,IAA3B,CALH,GAMV,MAAM,CAAE,CANZ;AAQA3B,MAAM,CAACC,OAAP,GAAiB20B,KAAjB;;ACRA,MAAM;AAAEu1K,EAAAA;AAAF,IAAgClwH,OAAO,CAAC,aAAD,CAA7C;;AACA,MAAMrlD,KAAK,GAAGqlD,OAAO,CAAC,SAAD,CAArB;;AACAh6E,OAAO,GAAGD,MAAM,CAACC,OAAP,GAAiB,EAA3B,EAEA;;AACA,MAAMmqM,EAAE,GAAGnqM,OAAO,CAACmqM,EAAR,GAAa,EAAxB;AACA,MAAMzT,GAAG,GAAG12L,OAAO,CAAC02L,GAAR,GAAc,EAA1B;AACA,MAAMnxL,CAAC,GAAGvF,OAAO,CAACuF,CAAR,GAAY,EAAtB;AACA,IAAIy0L,CAAC,GAAG,CAAR;;AAEA,MAAMoQ,WAAW,GAAG,CAAChnM,IAAD,EAAOyB,KAAP,EAAcwlM,QAAd,KAA2B;AAC7C,QAAM1iM,KAAK,GAAGqyL,CAAC,EAAf;AACArlK,EAAAA,KAAK,CAAChtB,KAAD,EAAQ9C,KAAR,CAAL;AACAU,EAAAA,CAAC,CAACnC,IAAD,CAAD,GAAUuE,KAAV;AACA+uL,EAAAA,GAAG,CAAC/uL,KAAD,CAAH,GAAa9C,KAAb;AACAslM,EAAAA,EAAE,CAACxiM,KAAD,CAAF,GAAY,IAAI60H,MAAJ,CAAW33H,KAAX,EAAkBwlM,QAAQ,GAAG,GAAH,GAAStzE,SAAnC,CAAZ;AACD,CAND,EAQA;AACA;AAEA;AACA;;;AAEAqzE,WAAW,CAAC,mBAAD,EAAsB,aAAtB,CAAX;AACAA,WAAW,CAAC,wBAAD,EAA2B,QAA3B,CAAX,EAEA;AACA;AACA;;AAEAA,WAAW,CAAC,sBAAD,EAAyB,4BAAzB,CAAX,EAEA;AACA;;AAEAA,WAAW,CAAC,aAAD,EAAiB,IAAG1T,GAAG,CAACnxL,CAAC,CAAC+kM,iBAAH,CAAsB,MAA7B,GACP,IAAG5T,GAAG,CAACnxL,CAAC,CAAC+kM,iBAAH,CAAsB,MADrB,GAEP,IAAG5T,GAAG,CAACnxL,CAAC,CAAC+kM,iBAAH,CAAsB,GAFrC,CAAX;AAIAF,WAAW,CAAC,kBAAD,EAAsB,IAAG1T,GAAG,CAACnxL,CAAC,CAACglM,sBAAH,CAA2B,MAAlC,GACP,IAAG7T,GAAG,CAACnxL,CAAC,CAACglM,sBAAH,CAA2B,MAD1B,GAEP,IAAG7T,GAAG,CAACnxL,CAAC,CAACglM,sBAAH,CAA2B,GAF/C,CAAX,EAIA;AACA;;AAEAH,WAAW,CAAC,sBAAD,EAA0B,MAAK1T,GAAG,CAACnxL,CAAC,CAAC+kM,iBAAH,CAC5C,IAAG5T,GAAG,CAACnxL,CAAC,CAACilM,oBAAH,CAAyB,GADrB,CAAX;AAGAJ,WAAW,CAAC,2BAAD,EAA+B,MAAK1T,GAAG,CAACnxL,CAAC,CAACglM,sBAAH,CACjD,IAAG7T,GAAG,CAACnxL,CAAC,CAACilM,oBAAH,CAAyB,GADrB,CAAX,EAGA;AACA;AACA;;AAEAJ,WAAW,CAAC,YAAD,EAAgB,QAAO1T,GAAG,CAACnxL,CAAC,CAACklM,oBAAH,CACpC,SAAQ/T,GAAG,CAACnxL,CAAC,CAACklM,oBAAH,CAAyB,MAD1B,CAAX;AAGAL,WAAW,CAAC,iBAAD,EAAqB,SAAQ1T,GAAG,CAACnxL,CAAC,CAACmlM,yBAAH,CAC1C,SAAQhU,GAAG,CAACnxL,CAAC,CAACmlM,yBAAH,CAA8B,MAD/B,CAAX,EAGA;AACA;;AAEAN,WAAW,CAAC,iBAAD,EAAoB,eAApB,CAAX,EAEA;AACA;AACA;;AAEAA,WAAW,CAAC,OAAD,EAAW,UAAS1T,GAAG,CAACnxL,CAAC,CAAColM,eAAH,CACjC,SAAQjU,GAAG,CAACnxL,CAAC,CAAColM,eAAH,CAAoB,MADrB,CAAX,EAGA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEAP,WAAW,CAAC,WAAD,EAAe,KAAI1T,GAAG,CAACnxL,CAAC,CAACqlM,WAAH,CAChC,GAAElU,GAAG,CAACnxL,CAAC,CAACslM,UAAH,CAAe,IACnBnU,GAAG,CAACnxL,CAAC,CAACulM,KAAH,CAAU,GAFJ,CAAX;AAIAV,WAAW,CAAC,MAAD,EAAU,IAAG1T,GAAG,CAACnxL,CAAC,CAACwlM,SAAH,CAAc,GAA9B,CAAX,EAEA;AACA;AACA;;AACAX,WAAW,CAAC,YAAD,EAAgB,WAAU1T,GAAG,CAACnxL,CAAC,CAACylM,gBAAH,CACvC,GAAEtU,GAAG,CAACnxL,CAAC,CAAC0lM,eAAH,CAAoB,IACxBvU,GAAG,CAACnxL,CAAC,CAACulM,KAAH,CAAU,GAFJ,CAAX;AAIAV,WAAW,CAAC,OAAD,EAAW,IAAG1T,GAAG,CAACnxL,CAAC,CAAC2lM,UAAH,CAAe,GAAhC,CAAX;AAEAd,WAAW,CAAC,MAAD,EAAS,cAAT,CAAX,EAEA;AACA;AACA;;AACAA,WAAW,CAAC,uBAAD,EAA2B,GAAE1T,GAAG,CAACnxL,CAAC,CAACglM,sBAAH,CAA2B,UAA3D,CAAX;AACAH,WAAW,CAAC,kBAAD,EAAsB,GAAE1T,GAAG,CAACnxL,CAAC,CAAC+kM,iBAAH,CAAsB,UAAjD,CAAX;AAEAF,WAAW,CAAC,aAAD,EAAiB,YAAW1T,GAAG,CAACnxL,CAAC,CAAC4lM,gBAAH,CAAqB,GAApC,GACP,UAASzU,GAAG,CAACnxL,CAAC,CAAC4lM,gBAAH,CAAqB,GAD1B,GAEP,UAASzU,GAAG,CAACnxL,CAAC,CAAC4lM,gBAAH,CAAqB,GAF1B,GAGP,MAAKzU,GAAG,CAACnxL,CAAC,CAACslM,UAAH,CAAe,KACtBnU,GAAG,CAACnxL,CAAC,CAACulM,KAAH,CAAU,GAJP,GAKP,MALT,CAAX;AAOAV,WAAW,CAAC,kBAAD,EAAsB,YAAW1T,GAAG,CAACnxL,CAAC,CAAC6lM,qBAAH,CAA0B,GAAzC,GACP,UAAS1U,GAAG,CAACnxL,CAAC,CAAC6lM,qBAAH,CAA0B,GAD/B,GAEP,UAAS1U,GAAG,CAACnxL,CAAC,CAAC6lM,qBAAH,CAA0B,GAF/B,GAGP,MAAK1U,GAAG,CAACnxL,CAAC,CAAC0lM,eAAH,CAAoB,KAC3BvU,GAAG,CAACnxL,CAAC,CAACulM,KAAH,CAAU,GAJP,GAKP,MALd,CAAX;AAOAV,WAAW,CAAC,QAAD,EAAY,IAAG1T,GAAG,CAACnxL,CAAC,CAAC8lM,IAAH,CAAS,OAAM3U,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GAApD,CAAX;AACAlB,WAAW,CAAC,aAAD,EAAiB,IAAG1T,GAAG,CAACnxL,CAAC,CAAC8lM,IAAH,CAAS,OAAM3U,GAAG,CAACnxL,CAAC,CAACgmM,gBAAH,CAAqB,GAA9D,CAAX,EAEA;AACA;;AACAnB,WAAW,CAAC,QAAD,EAAY,GAAE,eACX,SAAU,GAAEF,yBAA0B,IAD9B,GAEP,gBAAeA,yBAA0B,MAFlC,GAGP,gBAAeA,yBAA0B,MAHlC,GAIP,cAJJ,CAAX;AAKAE,WAAW,CAAC,WAAD,EAAc1T,GAAG,CAACnxL,CAAC,CAACimM,MAAH,CAAjB,EAA6B,IAA7B,CAAX,EAEA;AACA;;AACApB,WAAW,CAAC,WAAD,EAAc,SAAd,CAAX;AAEAA,WAAW,CAAC,WAAD,EAAe,SAAQ1T,GAAG,CAACnxL,CAAC,CAACkmM,SAAH,CAAc,MAAxC,EAA+C,IAA/C,CAAX;AACAzrM,OAAO,CAAC0rM,gBAAR,GAA2B,KAA3B;AAEAtB,WAAW,CAAC,OAAD,EAAW,IAAG1T,GAAG,CAACnxL,CAAC,CAACkmM,SAAH,CAAc,GAAE/U,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GAApD,CAAX;AACAlB,WAAW,CAAC,YAAD,EAAgB,IAAG1T,GAAG,CAACnxL,CAAC,CAACkmM,SAAH,CAAc,GAAE/U,GAAG,CAACnxL,CAAC,CAACgmM,gBAAH,CAAqB,GAA9D,CAAX,EAEA;AACA;;AACAnB,WAAW,CAAC,WAAD,EAAc,SAAd,CAAX;AAEAA,WAAW,CAAC,WAAD,EAAe,SAAQ1T,GAAG,CAACnxL,CAAC,CAAComM,SAAH,CAAc,MAAxC,EAA+C,IAA/C,CAAX;AACA3rM,OAAO,CAAC4rM,gBAAR,GAA2B,KAA3B;AAEAxB,WAAW,CAAC,OAAD,EAAW,IAAG1T,GAAG,CAACnxL,CAAC,CAAComM,SAAH,CAAc,GAAEjV,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GAApD,CAAX;AACAlB,WAAW,CAAC,YAAD,EAAgB,IAAG1T,GAAG,CAACnxL,CAAC,CAAComM,SAAH,CAAc,GAAEjV,GAAG,CAACnxL,CAAC,CAACgmM,gBAAH,CAAqB,GAA9D,CAAX,EAEA;;AACAnB,WAAW,CAAC,iBAAD,EAAqB,IAAG1T,GAAG,CAACnxL,CAAC,CAAC8lM,IAAH,CAAS,QAAO3U,GAAG,CAACnxL,CAAC,CAAC2lM,UAAH,CAAe,OAA7D,CAAX;AACAd,WAAW,CAAC,YAAD,EAAgB,IAAG1T,GAAG,CAACnxL,CAAC,CAAC8lM,IAAH,CAAS,QAAO3U,GAAG,CAACnxL,CAAC,CAACwlM,SAAH,CAAc,OAAvD,CAAX,EAEA;AACA;;AACAX,WAAW,CAAC,gBAAD,EAAoB,SAAQ1T,GAAG,CAACnxL,CAAC,CAAC8lM,IAAH,CACzC,QAAO3U,GAAG,CAACnxL,CAAC,CAAC2lM,UAAH,CAAe,IAAGxU,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GADrC,EACyC,IADzC,CAAX;AAEAtrM,OAAO,CAAC6rM,qBAAR,GAAgC,QAAhC,EAEA;AACA;AACA;AACA;;AACAzB,WAAW,CAAC,aAAD,EAAiB,SAAQ1T,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GAA5B,GACP,WADO,GAEP,IAAG5U,GAAG,CAACnxL,CAAC,CAAC+lM,WAAH,CAAgB,GAFf,GAGP,OAHT,CAAX;AAKAlB,WAAW,CAAC,kBAAD,EAAsB,SAAQ1T,GAAG,CAACnxL,CAAC,CAACgmM,gBAAH,CAAqB,GAAjC,GACP,WADO,GAEP,IAAG7U,GAAG,CAACnxL,CAAC,CAACgmM,gBAAH,CAAqB,GAFpB,GAGP,OAHd,CAAX,EAKA;;AACAnB,WAAW,CAAC,MAAD,EAAS,iBAAT,CAAX,EACA;;AACAA,WAAW,CAAC,MAAD,EAAS,yBAAT,CAAX;AACAA,WAAW,CAAC,SAAD,EAAY,2BAAZ,CAAX;;ACrLA,MAAM0B,OAAO,GAAG,UAAhB;;AACA,MAAMC,kBAAkB,GAAG,CAAChjM,CAAD,EAAI6G,CAAJ,KAAU;AACnC,QAAMo8L,IAAI,GAAGF,OAAO,CAACt8K,IAAR,CAAazmB,CAAb,CAAb;AACA,QAAMkjM,IAAI,GAAGH,OAAO,CAACt8K,IAAR,CAAa5f,CAAb,CAAb;;AAEA,MAAIo8L,IAAI,IAAIC,IAAZ,EAAkB;AAChBljM,IAAAA,CAAC,GAAG,CAACA,CAAL;AACA6G,IAAAA,CAAC,GAAG,CAACA,CAAL;AACD;;AAED,SAAO7G,CAAC,KAAK6G,CAAN,GAAU,CAAV,GACFo8L,IAAI,IAAI,CAACC,IAAV,GAAkB,CAAC,CAAnB,GACCA,IAAI,IAAI,CAACD,IAAV,GAAkB,CAAlB,GACAjjM,CAAC,GAAG6G,CAAJ,GAAQ,CAAC,CAAT,GACA,CAJJ;AAKD,CAdD;;AAgBA,MAAMs8L,mBAAmB,GAAG,CAACnjM,CAAD,EAAI6G,CAAJ,KAAUm8L,kBAAkB,CAACn8L,CAAD,EAAI7G,CAAJ,CAAxD;;AAEAhJ,MAAM,CAACC,OAAP,GAAiB;AACf+rM,EAAAA,kBADe;AAEfG,EAAAA;AAFe,CAAjB;;ACnBA,MAAMv3K,KAAK,GAAGqlD,OAAO,CAAC,mBAAD,CAArB;;AACA,MAAM;AAAEiwH,EAAAA,UAAF;AAAc/6J,EAAAA;AAAd,IAAmC8qC,OAAO,CAAC,uBAAD,CAAhD;;AACA,MAAM;AAAEmwH,EAAAA,EAAF;AAAM5kM,EAAAA;AAAN,IAAYy0E,OAAO,CAAC,gBAAD,CAAzB;;AAEA,MAAM;AAAE+xH,EAAAA;AAAF,IAAyB/xH,OAAO,CAAC,yBAAD,CAAtC;;AACA,MAAMmyH,MAAN,CAAa;AACX1+L,EAAAA,WAAW,CAAElL,OAAF,EAAWi2E,OAAX,EAAoB;AAC7B,QAAI,CAACA,OAAD,IAAY,OAAOA,OAAP,KAAmB,QAAnC,EAA6C;AAC3CA,MAAAA,OAAO,GAAG;AACR4zH,QAAAA,KAAK,EAAE,CAAC,CAAC5zH,OADD;AAER6zH,QAAAA,iBAAiB,EAAE;AAFX,OAAV;AAID;;AACD,QAAI9pM,OAAO,YAAY4pM,MAAvB,EAA+B;AAC7B,UAAI5pM,OAAO,CAAC6pM,KAAR,KAAkB,CAAC,CAAC5zH,OAAO,CAAC4zH,KAA5B,IACA7pM,OAAO,CAAC8pM,iBAAR,KAA8B,CAAC,CAAC7zH,OAAO,CAAC6zH,iBAD5C,EAC+D;AAC7D,eAAO9pM,OAAP;AACD,OAHD,MAGO;AACLA,QAAAA,OAAO,GAAGA,OAAO,CAACA,OAAlB;AACD;AACF,KAPD,MAOO,IAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AACtC,YAAM,IAAIwmI,SAAJ,CAAe,oBAAmBxmI,OAAQ,EAA1C,CAAN;AACD;;AAED,QAAIA,OAAO,CAACpB,MAAR,GAAiB8oM,UAArB,EAAiC;AAC/B,YAAM,IAAIlhE,SAAJ,CACH,0BAAyBkhE,UAAW,aADjC,CAAN;AAGD;;AAEDt1K,IAAAA,KAAK,CAAC,QAAD,EAAWpyB,OAAX,EAAoBi2E,OAApB,CAAL;AACA,SAAKA,OAAL,GAAeA,OAAf;AACA,SAAK4zH,KAAL,GAAa,CAAC,CAAC5zH,OAAO,CAAC4zH,KAAvB,CA1B6B,CA2B7B;AACA;;AACA,SAAKC,iBAAL,GAAyB,CAAC,CAAC7zH,OAAO,CAAC6zH,iBAAnC;AAEA,UAAM/yG,CAAC,GAAG/2F,OAAO,CAACu6G,IAAR,GAAemQ,KAAf,CAAqBz0C,OAAO,CAAC4zH,KAAR,GAAgBjC,EAAE,CAAC5kM,CAAC,CAAC+mM,KAAH,CAAlB,GAA8BnC,EAAE,CAAC5kM,CAAC,CAACgnM,IAAH,CAArD,CAAV;;AAEA,QAAI,CAACjzG,CAAL,EAAQ;AACN,YAAM,IAAIyvC,SAAJ,CAAe,oBAAmBxmI,OAAQ,EAA1C,CAAN;AACD;;AAED,SAAKkiM,GAAL,GAAWliM,OAAX,CArC6B,CAuC7B;;AACA,SAAKiqM,KAAL,GAAa,CAAClzG,CAAC,CAAC,CAAD,CAAf;AACA,SAAKmzG,KAAL,GAAa,CAACnzG,CAAC,CAAC,CAAD,CAAf;AACA,SAAKiuG,KAAL,GAAa,CAACjuG,CAAC,CAAC,CAAD,CAAf;;AAEA,QAAI,KAAKkzG,KAAL,GAAat9J,gBAAb,IAAiC,KAAKs9J,KAAL,GAAa,CAAlD,EAAqD;AACnD,YAAM,IAAIzjE,SAAJ,CAAc,uBAAd,CAAN;AACD;;AAED,QAAI,KAAK0jE,KAAL,GAAav9J,gBAAb,IAAiC,KAAKu9J,KAAL,GAAa,CAAlD,EAAqD;AACnD,YAAM,IAAI1jE,SAAJ,CAAc,uBAAd,CAAN;AACD;;AAED,QAAI,KAAKw+D,KAAL,GAAar4J,gBAAb,IAAiC,KAAKq4J,KAAL,GAAa,CAAlD,EAAqD;AACnD,YAAM,IAAIx+D,SAAJ,CAAc,uBAAd,CAAN;AACD,KAtD4B,CAwD7B;;;AACA,QAAI,CAACzvC,CAAC,CAAC,CAAD,CAAN,EAAW;AACT,WAAKozG,UAAL,GAAkB,EAAlB;AACD,KAFD,MAEO;AACL,WAAKA,UAAL,GAAkBpzG,CAAC,CAAC,CAAD,CAAD,CAAK5zF,KAAL,CAAW,GAAX,EAAgB4F,GAAhB,CAAqBwJ,EAAD,IAAQ;AAC5C,YAAI,WAAW0a,IAAX,CAAgB1a,EAAhB,CAAJ,EAAyB;AACvB,gBAAMtI,GAAG,GAAG,CAACsI,EAAb;;AACA,cAAItI,GAAG,IAAI,CAAP,IAAYA,GAAG,GAAG0iC,gBAAtB,EAAwC;AACtC,mBAAO1iC,GAAP;AACD;AACF;;AACD,eAAOsI,EAAP;AACD,OARiB,CAAlB;AASD;;AAED,SAAK0yH,KAAL,GAAaluC,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAD,CAAK5zF,KAAL,CAAW,GAAX,CAAP,GAAyB,EAAtC;AACA,SAAK0+G,MAAL;AACD;;AAEDA,EAAAA,MAAM,GAAI;AACR,SAAK7hH,OAAL,GAAgB,GAAE,KAAKiqM,KAAM,IAAG,KAAKC,KAAM,IAAG,KAAKlF,KAAM,EAAzD;;AACA,QAAI,KAAKmF,UAAL,CAAgBvrM,MAApB,EAA4B;AAC1B,WAAKoB,OAAL,IAAiB,IAAG,KAAKmqM,UAAL,CAAgBjnM,IAAhB,CAAqB,GAArB,CAA0B,EAA9C;AACD;;AACD,WAAO,KAAKlD,OAAZ;AACD;;AAEDiP,EAAAA,QAAQ,GAAI;AACV,WAAO,KAAKjP,OAAZ;AACD;;AAEDonM,EAAAA,OAAO,CAAEgD,KAAF,EAAS;AACdh4K,IAAAA,KAAK,CAAC,gBAAD,EAAmB,KAAKpyB,OAAxB,EAAiC,KAAKi2E,OAAtC,EAA+Cm0H,KAA/C,CAAL;;AACA,QAAI,EAAEA,KAAK,YAAYR,MAAnB,CAAJ,EAAgC;AAC9B,UAAI,OAAOQ,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,KAAKpqM,OAAhD,EAAyD;AACvD,eAAO,CAAP;AACD;;AACDoqM,MAAAA,KAAK,GAAG,IAAIR,MAAJ,CAAWQ,KAAX,EAAkB,KAAKn0H,OAAvB,CAAR;AACD;;AAED,QAAIm0H,KAAK,CAACpqM,OAAN,KAAkB,KAAKA,OAA3B,EAAoC;AAClC,aAAO,CAAP;AACD;;AAED,WAAO,KAAKqqM,WAAL,CAAiBD,KAAjB,KAA2B,KAAKE,UAAL,CAAgBF,KAAhB,CAAlC;AACD;;AAEDC,EAAAA,WAAW,CAAED,KAAF,EAAS;AAClB,QAAI,EAAEA,KAAK,YAAYR,MAAnB,CAAJ,EAAgC;AAC9BQ,MAAAA,KAAK,GAAG,IAAIR,MAAJ,CAAWQ,KAAX,EAAkB,KAAKn0H,OAAvB,CAAR;AACD;;AAED,WACEuzH,kBAAkB,CAAC,KAAKS,KAAN,EAAaG,KAAK,CAACH,KAAnB,CAAlB,IACAT,kBAAkB,CAAC,KAAKU,KAAN,EAAaE,KAAK,CAACF,KAAnB,CADlB,IAEAV,kBAAkB,CAAC,KAAKxE,KAAN,EAAaoF,KAAK,CAACpF,KAAnB,CAHpB;AAKD;;AAEDsF,EAAAA,UAAU,CAAEF,KAAF,EAAS;AACjB,QAAI,EAAEA,KAAK,YAAYR,MAAnB,CAAJ,EAAgC;AAC9BQ,MAAAA,KAAK,GAAG,IAAIR,MAAJ,CAAWQ,KAAX,EAAkB,KAAKn0H,OAAvB,CAAR;AACD,KAHgB,CAKjB;;;AACA,QAAI,KAAKk0H,UAAL,CAAgBvrM,MAAhB,IAA0B,CAACwrM,KAAK,CAACD,UAAN,CAAiBvrM,MAAhD,EAAwD;AACtD,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAI,CAAC,KAAKurM,UAAL,CAAgBvrM,MAAjB,IAA2BwrM,KAAK,CAACD,UAAN,CAAiBvrM,MAAhD,EAAwD;AAC7D,aAAO,CAAP;AACD,KAFM,MAEA,IAAI,CAAC,KAAKurM,UAAL,CAAgBvrM,MAAjB,IAA2B,CAACwrM,KAAK,CAACD,UAAN,CAAiBvrM,MAAjD,EAAyD;AAC9D,aAAO,CAAP;AACD;;AAED,QAAIU,CAAC,GAAG,CAAR;;AACA,OAAG;AACD,YAAMkH,CAAC,GAAG,KAAK2jM,UAAL,CAAgB7qM,CAAhB,CAAV;AACA,YAAM+N,CAAC,GAAG+8L,KAAK,CAACD,UAAN,CAAiB7qM,CAAjB,CAAV;AACA8yB,MAAAA,KAAK,CAAC,oBAAD,EAAuB9yB,CAAvB,EAA0BkH,CAA1B,EAA6B6G,CAA7B,CAAL;;AACA,UAAI7G,CAAC,KAAKguH,SAAN,IAAmBnnH,CAAC,KAAKmnH,SAA7B,EAAwC;AACtC,eAAO,CAAP;AACD,OAFD,MAEO,IAAInnH,CAAC,KAAKmnH,SAAV,EAAqB;AAC1B,eAAO,CAAP;AACD,OAFM,MAEA,IAAIhuH,CAAC,KAAKguH,SAAV,EAAqB;AAC1B,eAAO,CAAC,CAAR;AACD,OAFM,MAEA,IAAIhuH,CAAC,KAAK6G,CAAV,EAAa;AAClB;AACD,OAFM,MAEA;AACL,eAAOm8L,kBAAkB,CAAChjM,CAAD,EAAI6G,CAAJ,CAAzB;AACD;AACF,KAfD,QAeS,EAAE/N,CAfX;AAgBD;;AAEDirM,EAAAA,YAAY,CAAEH,KAAF,EAAS;AACnB,QAAI,EAAEA,KAAK,YAAYR,MAAnB,CAAJ,EAAgC;AAC9BQ,MAAAA,KAAK,GAAG,IAAIR,MAAJ,CAAWQ,KAAX,EAAkB,KAAKn0H,OAAvB,CAAR;AACD;;AAED,QAAI32E,CAAC,GAAG,CAAR;;AACA,OAAG;AACD,YAAMkH,CAAC,GAAG,KAAKy+H,KAAL,CAAW3lI,CAAX,CAAV;AACA,YAAM+N,CAAC,GAAG+8L,KAAK,CAACnlE,KAAN,CAAY3lI,CAAZ,CAAV;AACA8yB,MAAAA,KAAK,CAAC,oBAAD,EAAuB9yB,CAAvB,EAA0BkH,CAA1B,EAA6B6G,CAA7B,CAAL;;AACA,UAAI7G,CAAC,KAAKguH,SAAN,IAAmBnnH,CAAC,KAAKmnH,SAA7B,EAAwC;AACtC,eAAO,CAAP;AACD,OAFD,MAEO,IAAInnH,CAAC,KAAKmnH,SAAV,EAAqB;AAC1B,eAAO,CAAP;AACD,OAFM,MAEA,IAAIhuH,CAAC,KAAKguH,SAAV,EAAqB;AAC1B,eAAO,CAAC,CAAR;AACD,OAFM,MAEA,IAAIhuH,CAAC,KAAK6G,CAAV,EAAa;AAClB;AACD,OAFM,MAEA;AACL,eAAOm8L,kBAAkB,CAAChjM,CAAD,EAAI6G,CAAJ,CAAzB;AACD;AACF,KAfD,QAeS,EAAE/N,CAfX;AAgBD,GA3KU,CA6KX;AACA;;;AACAkrM,EAAAA,GAAG,CAAEC,OAAF,EAAWr2E,UAAX,EAAuB;AACxB,YAAQq2E,OAAR;AACE,WAAK,UAAL;AACE,aAAKN,UAAL,CAAgBvrM,MAAhB,GAAyB,CAAzB;AACA,aAAKomM,KAAL,GAAa,CAAb;AACA,aAAKkF,KAAL,GAAa,CAAb;AACA,aAAKD,KAAL;AACA,aAAKO,GAAL,CAAS,KAAT,EAAgBp2E,UAAhB;AACA;;AACF,WAAK,UAAL;AACE,aAAK+1E,UAAL,CAAgBvrM,MAAhB,GAAyB,CAAzB;AACA,aAAKomM,KAAL,GAAa,CAAb;AACA,aAAKkF,KAAL;AACA,aAAKM,GAAL,CAAS,KAAT,EAAgBp2E,UAAhB;AACA;;AACF,WAAK,UAAL;AACE;AACA;AACA;AACA,aAAK+1E,UAAL,CAAgBvrM,MAAhB,GAAyB,CAAzB;AACA,aAAK4rM,GAAL,CAAS,OAAT,EAAkBp2E,UAAlB;AACA,aAAKo2E,GAAL,CAAS,KAAT,EAAgBp2E,UAAhB;AACA;AACF;AACA;;AACA,WAAK,YAAL;AACE,YAAI,KAAK+1E,UAAL,CAAgBvrM,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,eAAK4rM,GAAL,CAAS,OAAT,EAAkBp2E,UAAlB;AACD;;AACD,aAAKo2E,GAAL,CAAS,KAAT,EAAgBp2E,UAAhB;AACA;;AAEF,WAAK,OAAL;AACE;AACA;AACA;AACA;AACA,YACE,KAAK81E,KAAL,KAAe,CAAf,IACA,KAAKlF,KAAL,KAAe,CADf,IAEA,KAAKmF,UAAL,CAAgBvrM,MAAhB,KAA2B,CAH7B,EAIE;AACA,eAAKqrM,KAAL;AACD;;AACD,aAAKC,KAAL,GAAa,CAAb;AACA,aAAKlF,KAAL,GAAa,CAAb;AACA,aAAKmF,UAAL,GAAkB,EAAlB;AACA;;AACF,WAAK,OAAL;AACE;AACA;AACA;AACA;AACA,YAAI,KAAKnF,KAAL,KAAe,CAAf,IAAoB,KAAKmF,UAAL,CAAgBvrM,MAAhB,KAA2B,CAAnD,EAAsD;AACpD,eAAKsrM,KAAL;AACD;;AACD,aAAKlF,KAAL,GAAa,CAAb;AACA,aAAKmF,UAAL,GAAkB,EAAlB;AACA;;AACF,WAAK,OAAL;AACE;AACA;AACA;AACA;AACA,YAAI,KAAKA,UAAL,CAAgBvrM,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,eAAKomM,KAAL;AACD;;AACD,aAAKmF,UAAL,GAAkB,EAAlB;AACA;AACF;AACA;;AACA,WAAK,KAAL;AACE,YAAI,KAAKA,UAAL,CAAgBvrM,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,eAAKurM,UAAL,GAAkB,CAAC,CAAD,CAAlB;AACD,SAFD,MAEO;AACL,cAAI7qM,CAAC,GAAG,KAAK6qM,UAAL,CAAgBvrM,MAAxB;;AACA,iBAAO,EAAEU,CAAF,IAAO,CAAd,EAAiB;AACf,gBAAI,OAAO,KAAK6qM,UAAL,CAAgB7qM,CAAhB,CAAP,KAA8B,QAAlC,EAA4C;AAC1C,mBAAK6qM,UAAL,CAAgB7qM,CAAhB;AACAA,cAAAA,CAAC,GAAG,CAAC,CAAL;AACD;AACF;;AACD,cAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;AACZ;AACA,iBAAK6qM,UAAL,CAAgB5qM,IAAhB,CAAqB,CAArB;AACD;AACF;;AACD,YAAI60H,UAAJ,EAAgB;AACd;AACA;AACA,cAAI,KAAK+1E,UAAL,CAAgB,CAAhB,MAAuB/1E,UAA3B,EAAuC;AACrC,gBAAIlqH,KAAK,CAAC,KAAKigM,UAAL,CAAgB,CAAhB,CAAD,CAAT,EAA+B;AAC7B,mBAAKA,UAAL,GAAkB,CAAC/1E,UAAD,EAAa,CAAb,CAAlB;AACD;AACF,WAJD,MAIO;AACL,iBAAK+1E,UAAL,GAAkB,CAAC/1E,UAAD,EAAa,CAAb,CAAlB;AACD;AACF;;AACD;;AAEF;AACE,cAAM,IAAIv2H,KAAJ,CAAW,+BAA8B4sM,OAAQ,EAAjD,CAAN;AApGJ;;AAsGA,SAAK5oF,MAAL;AACA,SAAKqgF,GAAL,GAAW,KAAKliM,OAAhB;AACA,WAAO,IAAP;AACD;;AAzRU;;AA4RbxC,MAAM,CAACC,OAAP,GAAiBmsM,MAAjB;;ACjSA,MAAM;AAAClC,EAAAA;AAAD,IAAejwH,OAAO,CAAC,uBAAD,CAA5B;;AACA,MAAM;AAAEmwH,EAAAA,EAAF;AAAM5kM,EAAAA;AAAN,IAAYy0E,OAAO,CAAC,gBAAD,CAAzB;;AACA,MAAMmyH,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AAEA,MAAMj2B,KAAK,GAAG,CAACxhD,OAAD,EAAUi2E,OAAV,KAAsB;AAClC,MAAI,CAACA,OAAD,IAAY,OAAOA,OAAP,KAAmB,QAAnC,EAA6C;AAC3CA,IAAAA,OAAO,GAAG;AACR4zH,MAAAA,KAAK,EAAE,CAAC,CAAC5zH,OADD;AAER6zH,MAAAA,iBAAiB,EAAE;AAFX,KAAV;AAID;;AAED,MAAI9pM,OAAO,YAAY4pM,MAAvB,EAA+B;AAC7B,WAAO5pM,OAAP;AACD;;AAED,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAED,MAAIA,OAAO,CAACpB,MAAR,GAAiB8oM,UAArB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAED,QAAMp6L,CAAC,GAAG2oE,OAAO,CAAC4zH,KAAR,GAAgBjC,EAAE,CAAC5kM,CAAC,CAAC+mM,KAAH,CAAlB,GAA8BnC,EAAE,CAAC5kM,CAAC,CAACgnM,IAAH,CAA1C;;AACA,MAAI,CAAC18L,CAAC,CAAC2f,IAAF,CAAOjtB,OAAP,CAAL,EAAsB;AACpB,WAAO,IAAP;AACD;;AAED,MAAI;AACF,WAAO,IAAI4pM,MAAJ,CAAW5pM,OAAX,EAAoBi2E,OAApB,CAAP;AACD,GAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,WAAO,IAAP;AACD;AACF,CA9BD;;AAgCA17L,MAAM,CAACC,OAAP,GAAiB+jD,KAAjB;;ACpCA,MAAMA,KAAK,GAAGi2B,OAAO,CAAC,SAAD,CAArB;;AACA,MAAMizH,KAAK,GAAG,CAAC1qM,OAAD,EAAUi2E,OAAV,KAAsB;AAClC,QAAMzkE,CAAC,GAAGgwC,KAAK,CAACxhD,OAAD,EAAUi2E,OAAV,CAAf;AACA,SAAOzkE,CAAC,GAAGA,CAAC,CAACxR,OAAL,GAAe,IAAvB;AACD,CAHD;;AAIAxC,MAAM,CAACC,OAAP,GAAiBitM,KAAjB;;ACLA,MAAMlpJ,KAAK,GAAGi2B,OAAO,CAAC,SAAD,CAArB;;AACA,MAAMkzH,KAAK,GAAG,CAAC3qM,OAAD,EAAUi2E,OAAV,KAAsB;AAClC,QAAMnzE,CAAC,GAAG0+C,KAAK,CAACxhD,OAAO,CAACu6G,IAAR,GAAe13G,OAAf,CAAuB,QAAvB,EAAiC,EAAjC,CAAD,EAAuCozE,OAAvC,CAAf;AACA,SAAOnzE,CAAC,GAAGA,CAAC,CAAC9C,OAAL,GAAe,IAAvB;AACD,CAHD;;AAIAxC,MAAM,CAACC,OAAP,GAAiBktM,KAAjB;;ACLA,MAAMf,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AAEA,MAAM+yH,GAAG,GAAG,CAACxqM,OAAD,EAAUyqM,OAAV,EAAmBx0H,OAAnB,EAA4Bm+C,UAA5B,KAA2C;AACrD,MAAI,OAAQn+C,OAAR,KAAqB,QAAzB,EAAmC;AACjCm+C,IAAAA,UAAU,GAAGn+C,OAAb;AACAA,IAAAA,OAAO,GAAGu+C,SAAV;AACD;;AAED,MAAI;AACF,WAAO,IAAIo1E,MAAJ,CAAW5pM,OAAX,EAAoBi2E,OAApB,EAA6Bu0H,GAA7B,CAAiCC,OAAjC,EAA0Cr2E,UAA1C,EAAsDp0H,OAA7D;AACD,GAFD,CAEE,OAAOk5L,EAAP,EAAW;AACX,WAAO,IAAP;AACD;AACF,CAXD;;AAYA17L,MAAM,CAACC,OAAP,GAAiB+sM,GAAjB;;ACdA,MAAMZ,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAM2vH,OAAO,GAAG,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KACd,IAAID,MAAJ,CAAWpjM,CAAX,EAAcqjM,KAAd,EAAqBzC,OAArB,CAA6B,IAAIwC,MAAJ,CAAWv8L,CAAX,EAAcw8L,KAAd,CAA7B,CADF;;AAGArsM,MAAM,CAACC,OAAP,GAAiB2pM,OAAjB;;ACJA,MAAMA,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAMojH,EAAE,GAAG,CAACr0L,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,KAAyB,CAArD;;AACArsM,MAAM,CAACC,OAAP,GAAiBo9L,EAAjB;;ACFA,MAAMr5I,KAAK,GAAGi2B,OAAO,CAAC,SAAD,CAArB;;AACA,MAAMojH,EAAE,GAAGpjH,OAAO,CAAC,MAAD,CAAlB;;AAEA,MAAMlqE,IAAI,GAAG,CAACq9L,QAAD,EAAWC,QAAX,KAAwB;AACnC,MAAIhQ,EAAE,CAAC+P,QAAD,EAAWC,QAAX,CAAN,EAA4B;AAC1B,WAAO,IAAP;AACD,GAFD,MAEO;AACL,UAAMhtH,EAAE,GAAGr8B,KAAK,CAACopJ,QAAD,CAAhB;AACA,UAAM9sH,EAAE,GAAGt8B,KAAK,CAACqpJ,QAAD,CAAhB;AACA,UAAMC,MAAM,GAAGjtH,EAAE,CAACssH,UAAH,CAAcvrM,MAAd,IAAwBk/E,EAAE,CAACqsH,UAAH,CAAcvrM,MAArD;AACA,UAAM8jH,MAAM,GAAGooF,MAAM,GAAG,KAAH,GAAW,EAAhC;AACA,UAAMC,aAAa,GAAGD,MAAM,GAAG,YAAH,GAAkB,EAA9C;;AACA,SAAK,MAAMvnM,GAAX,IAAkBs6E,EAAlB,EAAsB;AACpB,UAAIt6E,GAAG,KAAK,OAAR,IAAmBA,GAAG,KAAK,OAA3B,IAAsCA,GAAG,KAAK,OAAlD,EAA2D;AACzD,YAAIs6E,EAAE,CAACt6E,GAAD,CAAF,KAAYu6E,EAAE,CAACv6E,GAAD,CAAlB,EAAyB;AACvB,iBAAOm/G,MAAM,GAAGn/G,GAAhB;AACD;AACF;AACF;;AACD,WAAOwnM,aAAP,CAbK,CAagB;AACtB;AACF,CAlBD;;AAmBAvtM,MAAM,CAACC,OAAP,GAAiB8P,IAAjB;;ACtBA,MAAMq8L,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMwyH,KAAK,GAAG,CAACzjM,CAAD,EAAIqjM,KAAJ,KAAc,IAAID,MAAJ,CAAWpjM,CAAX,EAAcqjM,KAAd,EAAqBI,KAAjD;;AACAzsM,MAAM,CAACC,OAAP,GAAiBwsM,KAAjB;;ACFA,MAAML,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMyyH,KAAK,GAAG,CAAC1jM,CAAD,EAAIqjM,KAAJ,KAAc,IAAID,MAAJ,CAAWpjM,CAAX,EAAcqjM,KAAd,EAAqBK,KAAjD;;AACA1sM,MAAM,CAACC,OAAP,GAAiBysM,KAAjB;;ACFA,MAAMN,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMutH,KAAK,GAAG,CAACx+L,CAAD,EAAIqjM,KAAJ,KAAc,IAAID,MAAJ,CAAWpjM,CAAX,EAAcqjM,KAAd,EAAqB7E,KAAjD;;AACAxnM,MAAM,CAACC,OAAP,GAAiBunM,KAAjB;;ACFA,MAAMxjJ,KAAK,GAAGi2B,OAAO,CAAC,SAAD,CAArB;;AACA,MAAM0yH,UAAU,GAAG,CAACnqM,OAAD,EAAUi2E,OAAV,KAAsB;AACvC,QAAM+0H,MAAM,GAAGxpJ,KAAK,CAACxhD,OAAD,EAAUi2E,OAAV,CAApB;AACA,SAAQ+0H,MAAM,IAAIA,MAAM,CAACb,UAAP,CAAkBvrM,MAA7B,GAAuCosM,MAAM,CAACb,UAA9C,GAA2D,IAAlE;AACD,CAHD;;AAIA3sM,MAAM,CAACC,OAAP,GAAiB0sM,UAAjB;;ACLA,MAAM/C,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAMwzH,QAAQ,GAAG,CAACzkM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC/5L,CAAD,EAAI7G,CAAJ,EAAOqjM,KAAP,CAAzC;;AACArsM,MAAM,CAACC,OAAP,GAAiBwtM,QAAjB;;ACFA,MAAM7D,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAMyzH,YAAY,GAAG,CAAC1kM,CAAD,EAAI6G,CAAJ,KAAU+5L,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAO,IAAP,CAAtC;;AACA7P,MAAM,CAACC,OAAP,GAAiBytM,YAAjB;;ACFA,MAAMtB,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAM8yH,YAAY,GAAG,CAAC/jM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiB;AACpC,QAAMsB,QAAQ,GAAG,IAAIvB,MAAJ,CAAWpjM,CAAX,EAAcqjM,KAAd,CAAjB;AACA,QAAMuB,QAAQ,GAAG,IAAIxB,MAAJ,CAAWv8L,CAAX,EAAcw8L,KAAd,CAAjB;AACA,SAAOsB,QAAQ,CAAC/D,OAAT,CAAiBgE,QAAjB,KAA8BD,QAAQ,CAACZ,YAAT,CAAsBa,QAAtB,CAArC;AACD,CAJD;;AAKA5tM,MAAM,CAACC,OAAP,GAAiB8sM,YAAjB;;ACNA,MAAMA,YAAY,GAAG9yH,OAAO,CAAC,iBAAD,CAA5B;;AACA,MAAMnuE,IAAI,GAAG,CAACqW,IAAD,EAAOkqL,KAAP,KAAiBlqL,IAAI,CAACrW,IAAL,CAAU,CAAC9C,CAAD,EAAI6G,CAAJ,KAAUk9L,YAAY,CAAC/jM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAhC,CAA9B;;AACArsM,MAAM,CAACC,OAAP,GAAiB6L,IAAjB;;ACFA,MAAMihM,YAAY,GAAG9yH,OAAO,CAAC,iBAAD,CAA5B;;AACA,MAAM4zH,KAAK,GAAG,CAAC1rL,IAAD,EAAOkqL,KAAP,KAAiBlqL,IAAI,CAACrW,IAAL,CAAU,CAAC9C,CAAD,EAAI6G,CAAJ,KAAUk9L,YAAY,CAACl9L,CAAD,EAAI7G,CAAJ,EAAOqjM,KAAP,CAAhC,CAA/B;;AACArsM,MAAM,CAACC,OAAP,GAAiB4tM,KAAjB;;ACFA,MAAMjE,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAM6zH,EAAE,GAAG,CAAC9kM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,GAAuB,CAAnD;;AACArsM,MAAM,CAACC,OAAP,GAAiB6tM,EAAjB;;ACFA,MAAMlE,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAM8zH,EAAE,GAAG,CAAC/kM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,GAAuB,CAAnD;;AACArsM,MAAM,CAACC,OAAP,GAAiB8tM,EAAjB;;ACFA,MAAMnE,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAM+zH,GAAG,GAAG,CAAChlM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,KAAyB,CAAtD;;AACArsM,MAAM,CAACC,OAAP,GAAiB+tM,GAAjB;;ACFA,MAAMpE,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAMg0H,GAAG,GAAG,CAACjlM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,IAAwB,CAArD;;AACArsM,MAAM,CAACC,OAAP,GAAiBguM,GAAjB;;ACFA,MAAMrE,OAAO,GAAG3vH,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAMi0H,GAAG,GAAG,CAACllM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,KAAiBzC,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAP,IAAwB,CAArD;;AACArsM,MAAM,CAACC,OAAP,GAAiBiuM,GAAjB;;ACFA,MAAM7Q,EAAE,GAAGpjH,OAAO,CAAC,MAAD,CAAlB;;AACA,MAAM+zH,GAAG,GAAG/zH,OAAO,CAAC,OAAD,CAAnB;;AACA,MAAM6zH,EAAE,GAAG7zH,OAAO,CAAC,MAAD,CAAlB;;AACA,MAAMg0H,GAAG,GAAGh0H,OAAO,CAAC,OAAD,CAAnB;;AACA,MAAM8zH,EAAE,GAAG9zH,OAAO,CAAC,MAAD,CAAlB;;AACA,MAAMi0H,GAAG,GAAGj0H,OAAO,CAAC,OAAD,CAAnB;;AAEA,MAAMk0H,GAAG,GAAG,CAACnlM,CAAD,EAAIy3B,EAAJ,EAAQ5wB,CAAR,EAAWw8L,KAAX,KAAqB;AAC/B,UAAQ5rK,EAAR;AACE,SAAK,KAAL;AACE,UAAI,OAAOz3B,CAAP,KAAa,QAAjB,EACEA,CAAC,GAAGA,CAAC,CAACxG,OAAN;AACF,UAAI,OAAOqN,CAAP,KAAa,QAAjB,EACEA,CAAC,GAAGA,CAAC,CAACrN,OAAN;AACF,aAAOwG,CAAC,KAAK6G,CAAb;;AAEF,SAAK,KAAL;AACE,UAAI,OAAO7G,CAAP,KAAa,QAAjB,EACEA,CAAC,GAAGA,CAAC,CAACxG,OAAN;AACF,UAAI,OAAOqN,CAAP,KAAa,QAAjB,EACEA,CAAC,GAAGA,CAAC,CAACrN,OAAN;AACF,aAAOwG,CAAC,KAAK6G,CAAb;;AAEF,SAAK,EAAL;AACA,SAAK,GAAL;AACA,SAAK,IAAL;AACE,aAAOwtL,EAAE,CAACr0L,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAT;;AAEF,SAAK,IAAL;AACE,aAAO2B,GAAG,CAAChlM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAV;;AAEF,SAAK,GAAL;AACE,aAAOyB,EAAE,CAAC9kM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAT;;AAEF,SAAK,IAAL;AACE,aAAO4B,GAAG,CAACjlM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAV;;AAEF,SAAK,GAAL;AACE,aAAO0B,EAAE,CAAC/kM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAT;;AAEF,SAAK,IAAL;AACE,aAAO6B,GAAG,CAACllM,CAAD,EAAI6G,CAAJ,EAAOw8L,KAAP,CAAV;;AAEF;AACE,YAAM,IAAIrjE,SAAJ,CAAe,qBAAoBvoG,EAAG,EAAtC,CAAN;AApCJ;AAsCD,CAvCD;;AAwCAzgC,MAAM,CAACC,OAAP,GAAiBkuM,GAAjB;;AC/CA,MAAM/B,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMj2B,KAAK,GAAGi2B,OAAO,CAAC,SAAD,CAArB;;AACA,MAAM;AAACmwH,EAAAA,EAAD;AAAK5kM,EAAAA;AAAL,IAAUy0E,OAAO,CAAC,gBAAD,CAAvB;;AAEA,MAAMm0H,MAAM,GAAG,CAAC5rM,OAAD,EAAUi2E,OAAV,KAAsB;AACnC,MAAIj2E,OAAO,YAAY4pM,MAAvB,EAA+B;AAC7B,WAAO5pM,OAAP;AACD;;AAED,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/BA,IAAAA,OAAO,GAAG4K,MAAM,CAAC5K,OAAD,CAAhB;AACD;;AAED,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAEDi2E,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;AAEA,MAAIy0C,KAAK,GAAG,IAAZ;;AACA,MAAI,CAACz0C,OAAO,CAAC41H,GAAb,EAAkB;AAChBnhF,IAAAA,KAAK,GAAG1qH,OAAO,CAAC0qH,KAAR,CAAck9E,EAAE,CAAC5kM,CAAC,CAACimM,MAAH,CAAhB,CAAR;AACD,GAFD,MAEO;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAIj1H,IAAJ;;AACA,WAAO,CAACA,IAAI,GAAG4zH,EAAE,CAAC5kM,CAAC,CAAC8oM,SAAH,CAAF,CAAgBr4K,IAAhB,CAAqBzzB,OAArB,CAAR,MACF,CAAC0qH,KAAD,IAAUA,KAAK,CAACtlH,KAAN,GAAcslH,KAAK,CAAC,CAAD,CAAL,CAAS9rH,MAAvB,KAAkCoB,OAAO,CAACpB,MADlD,CAAP,EAEE;AACA,UAAI,CAAC8rH,KAAD,IACE12C,IAAI,CAAC5uE,KAAL,GAAa4uE,IAAI,CAAC,CAAD,CAAJ,CAAQp1E,MAArB,KAAgC8rH,KAAK,CAACtlH,KAAN,GAAcslH,KAAK,CAAC,CAAD,CAAL,CAAS9rH,MAD7D,EACqE;AACnE8rH,QAAAA,KAAK,GAAG12C,IAAR;AACD;;AACD4zH,MAAAA,EAAE,CAAC5kM,CAAC,CAAC8oM,SAAH,CAAF,CAAgBznJ,SAAhB,GAA4B2vB,IAAI,CAAC5uE,KAAL,GAAa4uE,IAAI,CAAC,CAAD,CAAJ,CAAQp1E,MAArB,GAA8Bo1E,IAAI,CAAC,CAAD,CAAJ,CAAQp1E,MAAlE;AACD,KAlBI,CAmBL;;;AACAgpM,IAAAA,EAAE,CAAC5kM,CAAC,CAAC8oM,SAAH,CAAF,CAAgBznJ,SAAhB,GAA4B,CAAC,CAA7B;AACD;;AAED,MAAIqmE,KAAK,KAAK,IAAd,EACE,OAAO,IAAP;AAEF,SAAOlpE,KAAK,CAAE,GAAEkpE,KAAK,CAAC,CAAD,CAAI,IAAGA,KAAK,CAAC,CAAD,CAAL,IAAY,GAAI,IAAGA,KAAK,CAAC,CAAD,CAAL,IAAY,GAAI,EAAnD,EAAsDz0C,OAAtD,CAAZ;AACD,CA7CD;;AA8CAz4E,MAAM,CAACC,OAAP,GAAiBmuM,MAAjB;;AClDA;AACA,MAAMG,KAAN,CAAY;AACV7gM,EAAAA,WAAW,CAAE41B,KAAF,EAASm1C,OAAT,EAAkB;AAC3B,QAAI,CAACA,OAAD,IAAY,OAAOA,OAAP,KAAmB,QAAnC,EAA6C;AAC3CA,MAAAA,OAAO,GAAG;AACR4zH,QAAAA,KAAK,EAAE,CAAC,CAAC5zH,OADD;AAER6zH,QAAAA,iBAAiB,EAAE;AAFX,OAAV;AAID;;AAED,QAAIhpK,KAAK,YAAYirK,KAArB,EAA4B;AAC1B,UACEjrK,KAAK,CAAC+oK,KAAN,KAAgB,CAAC,CAAC5zH,OAAO,CAAC4zH,KAA1B,IACA/oK,KAAK,CAACgpK,iBAAN,KAA4B,CAAC,CAAC7zH,OAAO,CAAC6zH,iBAFxC,EAGE;AACA,eAAOhpK,KAAP;AACD,OALD,MAKO;AACL,eAAO,IAAIirK,KAAJ,CAAUjrK,KAAK,CAACohK,GAAhB,EAAqBjsH,OAArB,CAAP;AACD;AACF;;AAED,QAAIn1C,KAAK,YAAYkrK,UAArB,EAAiC;AAC/B;AACA,WAAK9J,GAAL,GAAWphK,KAAK,CAACx+B,KAAjB;AACA,WAAKL,GAAL,GAAW,CAAC,CAAC6+B,KAAD,CAAD,CAAX;AACA,WAAK+gF,MAAL;AACA,aAAO,IAAP;AACD;;AAED,SAAK5rC,OAAL,GAAeA,OAAf;AACA,SAAK4zH,KAAL,GAAa,CAAC,CAAC5zH,OAAO,CAAC4zH,KAAvB;AACA,SAAKC,iBAAL,GAAyB,CAAC,CAAC7zH,OAAO,CAAC6zH,iBAAnC,CA7B2B,CA+B3B;;AACA,SAAK5H,GAAL,GAAWphK,KAAX;AACA,SAAK7+B,GAAL,GAAW6+B,KAAK,CACb39B,KADQ,CACF,YADE,EAET;AAFS,KAGR4F,GAHQ,CAGJ+3B,KAAK,IAAI,KAAKmrK,UAAL,CAAgBnrK,KAAK,CAACy5E,IAAN,EAAhB,CAHL,EAIT;AACA;AACA;AANS,KAOR9/F,MAPQ,CAOD1O,CAAC,IAAIA,CAAC,CAACnN,MAPN,CAAX;;AASA,QAAI,CAAC,KAAKqD,GAAL,CAASrD,MAAd,EAAsB;AACpB,YAAM,IAAI4nI,SAAJ,CAAe,yBAAwB1lG,KAAM,EAA7C,CAAN;AACD;;AAED,SAAK+gF,MAAL;AACD;;AAEDA,EAAAA,MAAM,GAAI;AACR,SAAK/gF,KAAL,GAAa,KAAK7+B,GAAL,CACV8G,GADU,CACLmjM,KAAD,IAAW;AACd,aAAOA,KAAK,CAAChpM,IAAN,CAAW,GAAX,EAAgBq3G,IAAhB,EAAP;AACD,KAHU,EAIVr3G,IAJU,CAIL,IAJK,EAKVq3G,IALU,EAAb;AAMA,WAAO,KAAKz5E,KAAZ;AACD;;AAED7xB,EAAAA,QAAQ,GAAI;AACV,WAAO,KAAK6xB,KAAZ;AACD;;AAEDmrK,EAAAA,UAAU,CAAEnrK,KAAF,EAAS;AACjB,UAAM+oK,KAAK,GAAG,KAAK5zH,OAAL,CAAa4zH,KAA3B;AACA/oK,IAAAA,KAAK,GAAGA,KAAK,CAACy5E,IAAN,EAAR,CAFiB,CAGjB;;AACA,UAAM4xF,EAAE,GAAGtC,KAAK,GAAGjC,EAAE,CAAC5kM,CAAC,CAACopM,gBAAH,CAAL,GAA4BxE,EAAE,CAAC5kM,CAAC,CAACqpM,WAAH,CAA9C;AACAvrK,IAAAA,KAAK,GAAGA,KAAK,CAACj+B,OAAN,CAAcspM,EAAd,EAAkBG,aAAa,CAAC,KAAKr2H,OAAL,CAAa6zH,iBAAd,CAA/B,CAAR;AACA13K,IAAAA,KAAK,CAAC,gBAAD,EAAmB0O,KAAnB,CAAL,CANiB,CAOjB;;AACAA,IAAAA,KAAK,GAAGA,KAAK,CAACj+B,OAAN,CAAc+kM,EAAE,CAAC5kM,CAAC,CAACupM,cAAH,CAAhB,EAAoCjD,qBAApC,CAAR;AACAl3K,IAAAA,KAAK,CAAC,iBAAD,EAAoB0O,KAApB,EAA2B8mK,EAAE,CAAC5kM,CAAC,CAACupM,cAAH,CAA7B,CAAL,CATiB,CAWjB;;AACAzrK,IAAAA,KAAK,GAAGA,KAAK,CAACj+B,OAAN,CAAc+kM,EAAE,CAAC5kM,CAAC,CAACwpM,SAAH,CAAhB,EAA+BrD,gBAA/B,CAAR,CAZiB,CAcjB;;AACAroK,IAAAA,KAAK,GAAGA,KAAK,CAACj+B,OAAN,CAAc+kM,EAAE,CAAC5kM,CAAC,CAACypM,SAAH,CAAhB,EAA+BpD,gBAA/B,CAAR,CAfiB,CAiBjB;;AACAvoK,IAAAA,KAAK,GAAGA,KAAK,CAAC39B,KAAN,CAAY,KAAZ,EAAmBD,IAAnB,CAAwB,GAAxB,CAAR,CAlBiB,CAoBjB;AACA;;AAEA,UAAMwpM,MAAM,GAAG7C,KAAK,GAAGjC,EAAE,CAAC5kM,CAAC,CAAC2pM,eAAH,CAAL,GAA2B/E,EAAE,CAAC5kM,CAAC,CAAC4pM,UAAH,CAAjD;AACA,WAAO9rK,KAAK,CACT39B,KADI,CACE,GADF,EAEJ4F,GAFI,CAEA8jM,IAAI,IAAIC,eAAe,CAACD,IAAD,EAAO,KAAK52H,OAAZ,CAFvB,EAGJ/yE,IAHI,CAGC,GAHD,EAIJC,KAJI,CAIE,KAJF,EAKJ4F,GALI,CAKA8jM,IAAI,IAAIE,WAAW,CAACF,IAAD,EAAO,KAAK52H,OAAZ,CALnB,EAML;AANK,KAOJx7D,MAPI,CAOG,KAAKw7D,OAAL,CAAa4zH,KAAb,GAAqBgD,IAAI,IAAI,CAAC,CAACA,IAAI,CAACniF,KAAL,CAAWgiF,MAAX,CAA/B,GAAoD,MAAM,IAP7D,EAQJ3jM,GARI,CAQA8jM,IAAI,IAAI,IAAIb,UAAJ,CAAea,IAAf,EAAqB,KAAK52H,OAA1B,CARR,CAAP;AASD;;AAED+2H,EAAAA,UAAU,CAAElsK,KAAF,EAASm1C,OAAT,EAAkB;AAC1B,QAAI,EAAEn1C,KAAK,YAAYirK,KAAnB,CAAJ,EAA+B;AAC7B,YAAM,IAAIvlE,SAAJ,CAAc,qBAAd,CAAN;AACD;;AAED,WAAO,KAAKvkI,GAAL,CAASqe,IAAT,CAAe2sL,eAAD,IAAqB;AACxC,aACEC,aAAa,CAACD,eAAD,EAAkBh3H,OAAlB,CAAb,IACAn1C,KAAK,CAAC7+B,GAAN,CAAUqe,IAAV,CAAgB6sL,gBAAD,IAAsB;AACnC,eACED,aAAa,CAACC,gBAAD,EAAmBl3H,OAAnB,CAAb,IACAg3H,eAAe,CAACjkM,KAAhB,CAAuBokM,cAAD,IAAoB;AACxC,iBAAOD,gBAAgB,CAACnkM,KAAjB,CAAwBqkM,eAAD,IAAqB;AACjD,mBAAOD,cAAc,CAACJ,UAAf,CAA0BK,eAA1B,EAA2Cp3H,OAA3C,CAAP;AACD,WAFM,CAAP;AAGD,SAJD,CAFF;AAQD,OATD,CAFF;AAaD,KAdM,CAAP;AAeD,GAvHS,CAyHV;;;AACAhpD,EAAAA,IAAI,CAAEjtB,OAAF,EAAW;AACb,QAAI,CAACA,OAAL,EAAc;AACZ,aAAO,KAAP;AACD;;AAED,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,UAAI;AACFA,QAAAA,OAAO,GAAG,IAAI4pM,MAAJ,CAAW5pM,OAAX,EAAoB,KAAKi2E,OAAzB,CAAV;AACD,OAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,eAAO,KAAP;AACD;AACF;;AAED,SAAK,IAAI55L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK2C,GAAL,CAASrD,MAA7B,EAAqCU,CAAC,EAAtC,EAA0C;AACxC,UAAIguM,OAAO,CAAC,KAAKrrM,GAAL,CAAS3C,CAAT,CAAD,EAAcU,OAAd,EAAuB,KAAKi2E,OAA5B,CAAX,EAAiD;AAC/C,eAAO,IAAP;AACD;AACF;;AACD,WAAO,KAAP;AACD;;AA7IS;;AA+IZz4E,MAAM,CAACC,OAAP,GAAiBsuM,KAAjB;;AAEA,MAAMC,UAAU,GAAGv0H,OAAO,CAAC,cAAD,CAA1B;;AACA,MAAMrlD,KAAK,GAAGqlD,OAAO,CAAC,mBAAD,CAArB;;AACA,MAAMmyH,MAAM,GAAGnyH,OAAO,CAAC,UAAD,CAAtB;;AACA,MAAM;AACJmwH,EAAAA,EADI;AAEJ5kM,EAAAA,CAFI;AAGJsmM,EAAAA,qBAHI;AAIJH,EAAAA,gBAJI;AAKJE,EAAAA;AALI,IAMF5xH,OAAO,CAAC,gBAAD,CANX,EAQA;AACA;;;AACA,MAAMy1H,aAAa,GAAG,CAACK,WAAD,EAAct3H,OAAd,KAA0B;AAC9C,MAAIzxE,MAAM,GAAG,IAAb;AACA,QAAMgpM,oBAAoB,GAAGD,WAAW,CAAC5kM,KAAZ,EAA7B;AACA,MAAI8kM,cAAc,GAAGD,oBAAoB,CAAC9jL,GAArB,EAArB;;AAEA,SAAOllB,MAAM,IAAIgpM,oBAAoB,CAAC5uM,MAAtC,EAA8C;AAC5C4F,IAAAA,MAAM,GAAGgpM,oBAAoB,CAACxkM,KAArB,CAA4B0kM,eAAD,IAAqB;AACvD,aAAOD,cAAc,CAACT,UAAf,CAA0BU,eAA1B,EAA2Cz3H,OAA3C,CAAP;AACD,KAFQ,CAAT;AAIAw3H,IAAAA,cAAc,GAAGD,oBAAoB,CAAC9jL,GAArB,EAAjB;AACD;;AAED,SAAOllB,MAAP;AACD,CAdD,EAgBA;AACA;AACA;;;AACA,MAAMsoM,eAAe,GAAG,CAACD,IAAD,EAAO52H,OAAP,KAAmB;AACzC7jD,EAAAA,KAAK,CAAC,MAAD,EAASy6K,IAAT,EAAe52H,OAAf,CAAL;AACA42H,EAAAA,IAAI,GAAGc,aAAa,CAACd,IAAD,EAAO52H,OAAP,CAApB;AACA7jD,EAAAA,KAAK,CAAC,OAAD,EAAUy6K,IAAV,CAAL;AACAA,EAAAA,IAAI,GAAGe,aAAa,CAACf,IAAD,EAAO52H,OAAP,CAApB;AACA7jD,EAAAA,KAAK,CAAC,QAAD,EAAWy6K,IAAX,CAAL;AACAA,EAAAA,IAAI,GAAGgB,cAAc,CAAChB,IAAD,EAAO52H,OAAP,CAArB;AACA7jD,EAAAA,KAAK,CAAC,QAAD,EAAWy6K,IAAX,CAAL;AACAA,EAAAA,IAAI,GAAGiB,YAAY,CAACjB,IAAD,EAAO52H,OAAP,CAAnB;AACA7jD,EAAAA,KAAK,CAAC,OAAD,EAAUy6K,IAAV,CAAL;AACA,SAAOA,IAAP;AACD,CAXD;;AAaA,MAAMkB,GAAG,GAAGx7L,EAAE,IAAI,CAACA,EAAD,IAAOA,EAAE,CAAC9O,WAAH,OAAqB,GAA5B,IAAmC8O,EAAE,KAAK,GAA5D,EAEA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMq7L,aAAa,GAAG,CAACf,IAAD,EAAO52H,OAAP,KACpB42H,IAAI,CAACtyF,IAAL,GAAYp3G,KAAZ,CAAkB,KAAlB,EAAyB4F,GAAzB,CAA8B8jM,IAAD,IAAU;AACrC,SAAOmB,YAAY,CAACnB,IAAD,EAAO52H,OAAP,CAAnB;AACD,CAFD,EAEG/yE,IAFH,CAEQ,GAFR,CADF;;AAKA,MAAM8qM,YAAY,GAAG,CAACnB,IAAD,EAAO52H,OAAP,KAAmB;AACtC,QAAM3oE,CAAC,GAAG2oE,OAAO,CAAC4zH,KAAR,GAAgBjC,EAAE,CAAC5kM,CAAC,CAACirM,UAAH,CAAlB,GAAmCrG,EAAE,CAAC5kM,CAAC,CAACkrM,KAAH,CAA/C;AACA,SAAOrB,IAAI,CAAChqM,OAAL,CAAayK,CAAb,EAAgB,CAAC2Y,CAAD,EAAIyxE,CAAJ,EAAOX,CAAP,EAAUnzD,CAAV,EAAauqK,EAAb,KAAoB;AACzC/7K,IAAAA,KAAK,CAAC,OAAD,EAAUy6K,IAAV,EAAgB5mL,CAAhB,EAAmByxE,CAAnB,EAAsBX,CAAtB,EAAyBnzD,CAAzB,EAA4BuqK,EAA5B,CAAL;AACA,QAAIjiM,GAAJ;;AAEA,QAAI6hM,GAAG,CAACr2G,CAAD,CAAP,EAAY;AACVxrF,MAAAA,GAAG,GAAG,EAAN;AACD,KAFD,MAEO,IAAI6hM,GAAG,CAACh3G,CAAD,CAAP,EAAY;AACjB7qF,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,SAAQ,CAACA,CAAD,GAAK,CAAE,QAA5B;AACD,KAFM,MAEA,IAAIq2G,GAAG,CAACnqK,CAAD,CAAP,EAAY;AACjB;AACA13B,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,OAAMW,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MAApC;AACD,KAHM,MAGA,IAAIo3G,EAAJ,EAAQ;AACb/7K,MAAAA,KAAK,CAAC,iBAAD,EAAoB+7K,EAApB,CAAL;AACAjiM,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CAAE,IAAGuqK,EACzB,KAAIz2G,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MADjB;AAED,KAJM,MAIA;AACL;AACA7qF,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CACpB,KAAI8zD,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MADjB;AAED;;AAED3kE,IAAAA,KAAK,CAAC,cAAD,EAAiBlmB,GAAjB,CAAL;AACA,WAAOA,GAAP;AACD,GAvBM,CAAP;AAwBD,CA1BD,EA4BA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMyhM,aAAa,GAAG,CAACd,IAAD,EAAO52H,OAAP,KACpB42H,IAAI,CAACtyF,IAAL,GAAYp3G,KAAZ,CAAkB,KAAlB,EAAyB4F,GAAzB,CAA8B8jM,IAAD,IAAU;AACrC,SAAOuB,YAAY,CAACvB,IAAD,EAAO52H,OAAP,CAAnB;AACD,CAFD,EAEG/yE,IAFH,CAEQ,GAFR,CADF;;AAKA,MAAMkrM,YAAY,GAAG,CAACvB,IAAD,EAAO52H,OAAP,KAAmB;AACtC7jD,EAAAA,KAAK,CAAC,OAAD,EAAUy6K,IAAV,EAAgB52H,OAAhB,CAAL;AACA,QAAM3oE,CAAC,GAAG2oE,OAAO,CAAC4zH,KAAR,GAAgBjC,EAAE,CAAC5kM,CAAC,CAACqrM,UAAH,CAAlB,GAAmCzG,EAAE,CAAC5kM,CAAC,CAACsrM,KAAH,CAA/C;AACA,QAAMv5H,CAAC,GAAGkB,OAAO,CAAC6zH,iBAAR,GAA4B,IAA5B,GAAmC,EAA7C;AACA,SAAO+C,IAAI,CAAChqM,OAAL,CAAayK,CAAb,EAAgB,CAAC2Y,CAAD,EAAIyxE,CAAJ,EAAOX,CAAP,EAAUnzD,CAAV,EAAauqK,EAAb,KAAoB;AACzC/7K,IAAAA,KAAK,CAAC,OAAD,EAAUy6K,IAAV,EAAgB5mL,CAAhB,EAAmByxE,CAAnB,EAAsBX,CAAtB,EAAyBnzD,CAAzB,EAA4BuqK,EAA5B,CAAL;AACA,QAAIjiM,GAAJ;;AAEA,QAAI6hM,GAAG,CAACr2G,CAAD,CAAP,EAAY;AACVxrF,MAAAA,GAAG,GAAG,EAAN;AACD,KAFD,MAEO,IAAI6hM,GAAG,CAACh3G,CAAD,CAAP,EAAY;AACjB7qF,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,OAAM3iB,CAAE,KAAI,CAAC2iB,CAAD,GAAK,CAAE,QAAhC;AACD,KAFM,MAEA,IAAIq2G,GAAG,CAACnqK,CAAD,CAAP,EAAY;AACjB,UAAI8zD,CAAC,KAAK,GAAV,EAAe;AACbxrF,QAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,KAAIhiB,CAAE,KAAI2iB,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MAAxC;AACD,OAFD,MAEO;AACL7qF,QAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,KAAIhiB,CAAE,KAAI,CAAC2iB,CAAD,GAAK,CAAE,QAAnC;AACD;AACF,KANM,MAMA,IAAIy2G,EAAJ,EAAQ;AACb/7K,MAAAA,KAAK,CAAC,iBAAD,EAAoB+7K,EAApB,CAAL;;AACA,UAAIz2G,CAAC,KAAK,GAAV,EAAe;AACb,YAAIX,CAAC,KAAK,GAAV,EAAe;AACb7qF,UAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CAAE,IAAGuqK,EACzB,KAAIz2G,CAAE,IAAGX,CAAE,IAAG,CAACnzD,CAAD,GAAK,CAAE,IADtB;AAED,SAHD,MAGO;AACL13B,UAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CAAE,IAAGuqK,EACzB,KAAIz2G,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MADjB;AAED;AACF,OARD,MAQO;AACL7qF,QAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CAAE,IAAGuqK,EACzB,KAAI,CAACz2G,CAAD,GAAK,CAAE,QADZ;AAED;AACF,KAdM,MAcA;AACLtlE,MAAAA,KAAK,CAAC,OAAD,CAAL;;AACA,UAAIslE,CAAC,KAAK,GAAV,EAAe;AACb,YAAIX,CAAC,KAAK,GAAV,EAAe;AACb7qF,UAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CACpB,GAAEmxC,CAAE,KAAI2iB,CAAE,IAAGX,CAAE,IAAG,CAACnzD,CAAD,GAAK,CAAE,IAD1B;AAED,SAHD,MAGO;AACL13B,UAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CACpB,GAAEmxC,CAAE,KAAI2iB,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MADrB;AAED;AACF,OARD,MAQO;AACL7qF,QAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,IAAGnzD,CACpB,KAAI,CAAC8zD,CAAD,GAAK,CAAE,QADZ;AAED;AACF;;AAEDtlE,IAAAA,KAAK,CAAC,cAAD,EAAiBlmB,GAAjB,CAAL;AACA,WAAOA,GAAP;AACD,GA9CM,CAAP;AA+CD,CAnDD;;AAqDA,MAAM2hM,cAAc,GAAG,CAAChB,IAAD,EAAO52H,OAAP,KAAmB;AACxC7jD,EAAAA,KAAK,CAAC,gBAAD,EAAmBy6K,IAAnB,EAAyB52H,OAAzB,CAAL;AACA,SAAO42H,IAAI,CAAC1pM,KAAL,CAAW,KAAX,EAAkB4F,GAAlB,CAAuB8jM,IAAD,IAAU;AACrC,WAAO0B,aAAa,CAAC1B,IAAD,EAAO52H,OAAP,CAApB;AACD,GAFM,EAEJ/yE,IAFI,CAEC,GAFD,CAAP;AAGD,CALD;;AAOA,MAAMqrM,aAAa,GAAG,CAAC1B,IAAD,EAAO52H,OAAP,KAAmB;AACvC42H,EAAAA,IAAI,GAAGA,IAAI,CAACtyF,IAAL,EAAP;AACA,QAAMjtG,CAAC,GAAG2oE,OAAO,CAAC4zH,KAAR,GAAgBjC,EAAE,CAAC5kM,CAAC,CAACwrM,WAAH,CAAlB,GAAoC5G,EAAE,CAAC5kM,CAAC,CAACyrM,MAAH,CAAhD;AACA,SAAO5B,IAAI,CAAChqM,OAAL,CAAayK,CAAb,EAAgB,CAACpB,GAAD,EAAMwiM,IAAN,EAAYh3G,CAAZ,EAAeX,CAAf,EAAkBnzD,CAAlB,EAAqBuqK,EAArB,KAA4B;AACjD/7K,IAAAA,KAAK,CAAC,QAAD,EAAWy6K,IAAX,EAAiB3gM,GAAjB,EAAsBwiM,IAAtB,EAA4Bh3G,CAA5B,EAA+BX,CAA/B,EAAkCnzD,CAAlC,EAAqCuqK,EAArC,CAAL;AACA,UAAMQ,EAAE,GAAGZ,GAAG,CAACr2G,CAAD,CAAd;AACA,UAAMk3G,EAAE,GAAGD,EAAE,IAAIZ,GAAG,CAACh3G,CAAD,CAApB;AACA,UAAM83G,EAAE,GAAGD,EAAE,IAAIb,GAAG,CAACnqK,CAAD,CAApB;AACA,UAAMkrK,IAAI,GAAGD,EAAb;;AAEA,QAAIH,IAAI,KAAK,GAAT,IAAgBI,IAApB,EAA0B;AACxBJ,MAAAA,IAAI,GAAG,EAAP;AACD,KATgD,CAWjD;AACA;;;AACAP,IAAAA,EAAE,GAAGl4H,OAAO,CAAC6zH,iBAAR,GAA4B,IAA5B,GAAmC,EAAxC;;AAEA,QAAI6E,EAAJ,EAAQ;AACN,UAAID,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC;AAChC;AACAxiM,QAAAA,GAAG,GAAG,UAAN;AACD,OAHD,MAGO;AACL;AACAA,QAAAA,GAAG,GAAG,GAAN;AACD;AACF,KARD,MAQO,IAAIwiM,IAAI,IAAII,IAAZ,EAAkB;AACvB;AACA;AACA,UAAIF,EAAJ,EAAQ;AACN73G,QAAAA,CAAC,GAAG,CAAJ;AACD;;AACDnzD,MAAAA,CAAC,GAAG,CAAJ;;AAEA,UAAI8qK,IAAI,KAAK,GAAb,EAAkB;AAChB;AACA;AACAA,QAAAA,IAAI,GAAG,IAAP;;AACA,YAAIE,EAAJ,EAAQ;AACNl3G,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAK,CAAT;AACAX,UAAAA,CAAC,GAAG,CAAJ;AACAnzD,UAAAA,CAAC,GAAG,CAAJ;AACD,SAJD,MAIO;AACLmzD,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAK,CAAT;AACAnzD,UAAAA,CAAC,GAAG,CAAJ;AACD;AACF,OAZD,MAYO,IAAI8qK,IAAI,KAAK,IAAb,EAAmB;AACxB;AACA;AACAA,QAAAA,IAAI,GAAG,GAAP;;AACA,YAAIE,EAAJ,EAAQ;AACNl3G,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAK,CAAT;AACD,SAFD,MAEO;AACLX,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAK,CAAT;AACD;AACF;;AAED,UAAI23G,IAAI,KAAK,GAAb,EACEP,EAAE,GAAG,IAAL;AAEFjiM,MAAAA,GAAG,GAAI,GAAEwiM,IAAI,GAAGh3G,CAAE,IAAGX,CAAE,IAAGnzD,CAAE,GAAEuqK,EAAG,EAAjC;AACD,KAnCM,MAmCA,IAAIS,EAAJ,EAAQ;AACb1iM,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,OAAMy2G,EAAG,KAAI,CAACz2G,CAAD,GAAK,CAAE,QAAjC;AACD,KAFM,MAEA,IAAIm3G,EAAJ,EAAQ;AACb3iM,MAAAA,GAAG,GAAI,KAAIwrF,CAAE,IAAGX,CAAE,KAAIo3G,EACrB,KAAIz2G,CAAE,IAAG,CAACX,CAAD,GAAK,CAAE,MADjB;AAED;;AAED3kE,IAAAA,KAAK,CAAC,eAAD,EAAkBlmB,GAAlB,CAAL;AAEA,WAAOA,GAAP;AACD,GApEM,CAAP;AAqED,CAxED,EA0EA;AACA;;;AACA,MAAM4hM,YAAY,GAAG,CAACjB,IAAD,EAAO52H,OAAP,KAAmB;AACtC7jD,EAAAA,KAAK,CAAC,cAAD,EAAiBy6K,IAAjB,EAAuB52H,OAAvB,CAAL,CADsC,CAEtC;;AACA,SAAO42H,IAAI,CAACtyF,IAAL,GAAY13G,OAAZ,CAAoB+kM,EAAE,CAAC5kM,CAAC,CAAC+rM,IAAH,CAAtB,EAAgC,EAAhC,CAAP;AACD,CAJD;;AAMA,MAAMhC,WAAW,GAAG,CAACF,IAAD,EAAO52H,OAAP,KAAmB;AACrC7jD,EAAAA,KAAK,CAAC,aAAD,EAAgBy6K,IAAhB,EAAsB52H,OAAtB,CAAL;AACA,SAAO42H,IAAI,CAACtyF,IAAL,GACJ13G,OADI,CACI+kM,EAAE,CAAC3xH,OAAO,CAAC6zH,iBAAR,GAA4B9mM,CAAC,CAACgsM,OAA9B,GAAwChsM,CAAC,CAACisM,IAA3C,CADN,EACwD,EADxD,CAAP;AAED,CAJD,EAMA;AACA;AACA;AACA;AACA;;;AACA,MAAM3C,aAAa,GAAG4C,KAAK,IAAI,CAACC,EAAD,EAC7Bx+L,IAD6B,EACvBy+L,EADuB,EACnBC,EADmB,EACfr/D,EADe,EACXs/D,GADW,EACNC,EADM,EAE7BC,EAF6B,EAEzBC,EAFyB,EAErBC,EAFqB,EAEjB3/D,EAFiB,EAEb4/D,GAFa,EAERC,EAFQ,KAED;AAC5B,MAAI7B,GAAG,CAACqB,EAAD,CAAP,EAAa;AACXz+L,IAAAA,IAAI,GAAG,EAAP;AACD,GAFD,MAEO,IAAIo9L,GAAG,CAACsB,EAAD,CAAP,EAAa;AAClB1+L,IAAAA,IAAI,GAAI,KAAIy+L,EAAG,OAAMF,KAAK,GAAG,IAAH,GAAU,EAAG,EAAvC;AACD,GAFM,MAEA,IAAInB,GAAG,CAAC/9D,EAAD,CAAP,EAAa;AAClBr/H,IAAAA,IAAI,GAAI,KAAIy+L,EAAG,IAAGC,EAAG,KAAIH,KAAK,GAAG,IAAH,GAAU,EAAG,EAA3C;AACD,GAFM,MAEA,IAAII,GAAJ,EAAS;AACd3+L,IAAAA,IAAI,GAAI,KAAIA,IAAK,EAAjB;AACD,GAFM,MAEA;AACLA,IAAAA,IAAI,GAAI,KAAIA,IAAK,GAAEu+L,KAAK,GAAG,IAAH,GAAU,EAAG,EAArC;AACD;;AAED,MAAInB,GAAG,CAAC0B,EAAD,CAAP,EAAa;AACXD,IAAAA,EAAE,GAAG,EAAL;AACD,GAFD,MAEO,IAAIzB,GAAG,CAAC2B,EAAD,CAAP,EAAa;AAClBF,IAAAA,EAAE,GAAI,IAAG,CAACC,EAAD,GAAM,CAAE,QAAjB;AACD,GAFM,MAEA,IAAI1B,GAAG,CAACh+D,EAAD,CAAP,EAAa;AAClBy/D,IAAAA,EAAE,GAAI,IAAGC,EAAG,IAAG,CAACC,EAAD,GAAM,CAAE,MAAvB;AACD,GAFM,MAEA,IAAIC,GAAJ,EAAS;AACdH,IAAAA,EAAE,GAAI,KAAIC,EAAG,IAAGC,EAAG,IAAG3/D,EAAG,IAAG4/D,GAAI,EAAhC;AACD,GAFM,MAEA,IAAIT,KAAJ,EAAW;AAChBM,IAAAA,EAAE,GAAI,IAAGC,EAAG,IAAGC,EAAG,IAAG,CAAC3/D,EAAD,GAAM,CAAE,IAA7B;AACD,GAFM,MAEA;AACLy/D,IAAAA,EAAE,GAAI,KAAIA,EAAG,EAAb;AACD;;AAED,SAAS,GAAE7+L,IAAK,IAAG6+L,EAAG,EAAf,CAAkBj1F,IAAlB,EAAP;AACD,CA9BD;;AAgCA,MAAM+yF,OAAO,GAAG,CAACrrM,GAAD,EAAMjC,OAAN,EAAei2E,OAAf,KAA2B;AACzC,OAAK,IAAI32E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2C,GAAG,CAACrD,MAAxB,EAAgCU,CAAC,EAAjC,EAAqC;AACnC,QAAI,CAAC2C,GAAG,CAAC3C,CAAD,CAAH,CAAO2tB,IAAP,CAAYjtB,OAAZ,CAAL,EAA2B;AACzB,aAAO,KAAP;AACD;AACF;;AAED,MAAIA,OAAO,CAACmqM,UAAR,CAAmBvrM,MAAnB,IAA6B,CAACq3E,OAAO,CAAC6zH,iBAA1C,EAA6D;AAC3D;AACA;AACA;AACA;AACA;AACA,SAAK,IAAIxqM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2C,GAAG,CAACrD,MAAxB,EAAgCU,CAAC,EAAjC,EAAqC;AACnC8yB,MAAAA,KAAK,CAACnwB,GAAG,CAAC3C,CAAD,CAAH,CAAOuwM,MAAR,CAAL;;AACA,UAAI5tM,GAAG,CAAC3C,CAAD,CAAH,CAAOuwM,MAAP,KAAkB7D,UAAU,CAAC8D,GAAjC,EAAsC;AACpC;AACD;;AAED,UAAI7tM,GAAG,CAAC3C,CAAD,CAAH,CAAOuwM,MAAP,CAAc1F,UAAd,CAAyBvrM,MAAzB,GAAkC,CAAtC,EAAyC;AACvC,cAAMmxM,OAAO,GAAG9tM,GAAG,CAAC3C,CAAD,CAAH,CAAOuwM,MAAvB;;AACA,YAAIE,OAAO,CAAC9F,KAAR,KAAkBjqM,OAAO,CAACiqM,KAA1B,IACA8F,OAAO,CAAC7F,KAAR,KAAkBlqM,OAAO,CAACkqM,KAD1B,IAEA6F,OAAO,CAAC/K,KAAR,KAAkBhlM,OAAO,CAACglM,KAF9B,EAEqC;AACnC,iBAAO,IAAP;AACD;AACF;AACF,KApB0D,CAsB3D;;;AACA,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD,CAlCD;;AC5aA,MAAM8K,GAAG,GAAGjyL,MAAM,CAAC,YAAD,CAAlB,EACA;;AACA,MAAMmuL,UAAN,CAAiB;AACf,aAAW8D,GAAX,GAAkB;AAChB,WAAOA,GAAP;AACD;;AACD5kM,EAAAA,WAAW,CAAE2hM,IAAF,EAAQ52H,OAAR,EAAiB;AAC1B,QAAI,CAACA,OAAD,IAAY,OAAOA,OAAP,KAAmB,QAAnC,EAA6C;AAC3CA,MAAAA,OAAO,GAAG;AACR4zH,QAAAA,KAAK,EAAE,CAAC,CAAC5zH,OADD;AAER6zH,QAAAA,iBAAiB,EAAE;AAFX,OAAV;AAID;;AAED,QAAI+C,IAAI,YAAYb,UAApB,EAAgC;AAC9B,UAAIa,IAAI,CAAChD,KAAL,KAAe,CAAC,CAAC5zH,OAAO,CAAC4zH,KAA7B,EAAoC;AAClC,eAAOgD,IAAP;AACD,OAFD,MAEO;AACLA,QAAAA,IAAI,GAAGA,IAAI,CAACvqM,KAAZ;AACD;AACF;;AAED8vB,IAAAA,KAAK,CAAC,YAAD,EAAey6K,IAAf,EAAqB52H,OAArB,CAAL;AACA,SAAKA,OAAL,GAAeA,OAAf;AACA,SAAK4zH,KAAL,GAAa,CAAC,CAAC5zH,OAAO,CAAC4zH,KAAvB;AACA,SAAKroJ,KAAL,CAAWqrJ,IAAX;;AAEA,QAAI,KAAKgD,MAAL,KAAgBC,GAApB,EAAyB;AACvB,WAAKxtM,KAAL,GAAa,EAAb;AACD,KAFD,MAEO;AACL,WAAKA,KAAL,GAAa,KAAK0tM,QAAL,GAAgB,KAAKH,MAAL,CAAY7vM,OAAzC;AACD;;AAEDoyB,IAAAA,KAAK,CAAC,MAAD,EAAS,IAAT,CAAL;AACD;;AAEDovB,EAAAA,KAAK,CAAEqrJ,IAAF,EAAQ;AACX,UAAMv/L,CAAC,GAAG,KAAK2oE,OAAL,CAAa4zH,KAAb,GAAqBjC,EAAE,CAAC5kM,CAAC,CAAC2pM,eAAH,CAAvB,GAA6C/E,EAAE,CAAC5kM,CAAC,CAAC4pM,UAAH,CAAzD;AACA,UAAM71G,CAAC,GAAG81G,IAAI,CAACniF,KAAL,CAAWp9G,CAAX,CAAV;;AAEA,QAAI,CAACypF,CAAL,EAAQ;AACN,YAAM,IAAIyvC,SAAJ,CAAe,uBAAsBqmE,IAAK,EAA1C,CAAN;AACD;;AAED,SAAKmD,QAAL,GAAgBj5G,CAAC,CAAC,CAAD,CAAD,KAASy9B,SAAT,GAAqBz9B,CAAC,CAAC,CAAD,CAAtB,GAA4B,EAA5C;;AACA,QAAI,KAAKi5G,QAAL,KAAkB,GAAtB,EAA2B;AACzB,WAAKA,QAAL,GAAgB,EAAhB;AACD,KAXU,CAaX;;;AACA,QAAI,CAACj5G,CAAC,CAAC,CAAD,CAAN,EAAW;AACT,WAAK84G,MAAL,GAAcC,GAAd;AACD,KAFD,MAEO;AACL,WAAKD,MAAL,GAAc,IAAIjG,MAAJ,CAAW7yG,CAAC,CAAC,CAAD,CAAZ,EAAiB,KAAK9gB,OAAL,CAAa4zH,KAA9B,CAAd;AACD;AACF;;AAED56L,EAAAA,QAAQ,GAAI;AACV,WAAO,KAAK3M,KAAZ;AACD;;AAED2qB,EAAAA,IAAI,CAAEjtB,OAAF,EAAW;AACboyB,IAAAA,KAAK,CAAC,iBAAD,EAAoBpyB,OAApB,EAA6B,KAAKi2E,OAAL,CAAa4zH,KAA1C,CAAL;;AAEA,QAAI,KAAKgG,MAAL,KAAgBC,GAAhB,IAAuB9vM,OAAO,KAAK8vM,GAAvC,EAA4C;AAC1C,aAAO,IAAP;AACD;;AAED,QAAI,OAAO9vM,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,UAAI;AACFA,QAAAA,OAAO,GAAG,IAAI4pM,MAAJ,CAAW5pM,OAAX,EAAoB,KAAKi2E,OAAzB,CAAV;AACD,OAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,eAAO,KAAP;AACD;AACF;;AAED,WAAOyS,GAAG,CAAC3rM,OAAD,EAAU,KAAKgwM,QAAf,EAAyB,KAAKH,MAA9B,EAAsC,KAAK55H,OAA3C,CAAV;AACD;;AAED+2H,EAAAA,UAAU,CAAEH,IAAF,EAAQ52H,OAAR,EAAiB;AACzB,QAAI,EAAE42H,IAAI,YAAYb,UAAlB,CAAJ,EAAmC;AACjC,YAAM,IAAIxlE,SAAJ,CAAc,0BAAd,CAAN;AACD;;AAED,QAAI,CAACvwD,OAAD,IAAY,OAAOA,OAAP,KAAmB,QAAnC,EAA6C;AAC3CA,MAAAA,OAAO,GAAG;AACR4zH,QAAAA,KAAK,EAAE,CAAC,CAAC5zH,OADD;AAER6zH,QAAAA,iBAAiB,EAAE;AAFX,OAAV;AAID;;AAED,QAAI,KAAKkG,QAAL,KAAkB,EAAtB,EAA0B;AACxB,UAAI,KAAK1tM,KAAL,KAAe,EAAnB,EAAuB;AACrB,eAAO,IAAP;AACD;;AACD,aAAO,IAAIypM,KAAJ,CAAUc,IAAI,CAACvqM,KAAf,EAAsB2zE,OAAtB,EAA+BhpD,IAA/B,CAAoC,KAAK3qB,KAAzC,CAAP;AACD,KALD,MAKO,IAAIuqM,IAAI,CAACmD,QAAL,KAAkB,EAAtB,EAA0B;AAC/B,UAAInD,IAAI,CAACvqM,KAAL,KAAe,EAAnB,EAAuB;AACrB,eAAO,IAAP;AACD;;AACD,aAAO,IAAIypM,KAAJ,CAAU,KAAKzpM,KAAf,EAAsB2zE,OAAtB,EAA+BhpD,IAA/B,CAAoC4/K,IAAI,CAACgD,MAAzC,CAAP;AACD;;AAED,UAAMI,uBAAuB,GAC3B,CAAC,KAAKD,QAAL,KAAkB,IAAlB,IAA0B,KAAKA,QAAL,KAAkB,GAA7C,MACCnD,IAAI,CAACmD,QAAL,KAAkB,IAAlB,IAA0BnD,IAAI,CAACmD,QAAL,KAAkB,GAD7C,CADF;AAGA,UAAME,uBAAuB,GAC3B,CAAC,KAAKF,QAAL,KAAkB,IAAlB,IAA0B,KAAKA,QAAL,KAAkB,GAA7C,MACCnD,IAAI,CAACmD,QAAL,KAAkB,IAAlB,IAA0BnD,IAAI,CAACmD,QAAL,KAAkB,GAD7C,CADF;AAGA,UAAMG,UAAU,GAAG,KAAKN,MAAL,CAAY7vM,OAAZ,KAAwB6sM,IAAI,CAACgD,MAAL,CAAY7vM,OAAvD;AACA,UAAMowM,4BAA4B,GAChC,CAAC,KAAKJ,QAAL,KAAkB,IAAlB,IAA0B,KAAKA,QAAL,KAAkB,IAA7C,MACCnD,IAAI,CAACmD,QAAL,KAAkB,IAAlB,IAA0BnD,IAAI,CAACmD,QAAL,KAAkB,IAD7C,CADF;AAGA,UAAMK,0BAA0B,GAC9B1E,GAAG,CAAC,KAAKkE,MAAN,EAAc,GAAd,EAAmBhD,IAAI,CAACgD,MAAxB,EAAgC55H,OAAhC,CAAH,KACC,KAAK+5H,QAAL,KAAkB,IAAlB,IAA0B,KAAKA,QAAL,KAAkB,GAD7C,MAEGnD,IAAI,CAACmD,QAAL,KAAkB,IAAlB,IAA0BnD,IAAI,CAACmD,QAAL,KAAkB,GAF/C,CADF;AAIA,UAAMM,6BAA6B,GACjC3E,GAAG,CAAC,KAAKkE,MAAN,EAAc,GAAd,EAAmBhD,IAAI,CAACgD,MAAxB,EAAgC55H,OAAhC,CAAH,KACC,KAAK+5H,QAAL,KAAkB,IAAlB,IAA0B,KAAKA,QAAL,KAAkB,GAD7C,MAEGnD,IAAI,CAACmD,QAAL,KAAkB,IAAlB,IAA0BnD,IAAI,CAACmD,QAAL,KAAkB,GAF/C,CADF;AAKA,WACEC,uBAAuB,IACvBC,uBADA,IAECC,UAAU,IAAIC,4BAFf,IAGAC,0BAHA,IAIAC,6BALF;AAOD;;AA/Hc;;AAkIjB9yM,MAAM,CAACC,OAAP,GAAiBuuM,UAAjB;;AAEA,MAAM;AAACpE,EAAAA,EAAD;AAAK5kM,EAAAA;AAAL,IAAUy0E,OAAO,CAAC,gBAAD,CAAvB;;AACA,MAAMk0H,GAAG,GAAGl0H,OAAO,CAAC,kBAAD,CAAnB;;AACA,MAAMrlD,KAAK,GAAGqlD,OAAO,CAAC,mBAAD,CAArB;;AACA,MAAMmyH,MAAM,GAAGnyH,OAAO,CAAC,UAAD,CAAtB;;AACA,MAAMs0H,KAAK,GAAGt0H,OAAO,CAAC,SAAD,CAArB;;AC1IA,MAAMs0H,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAM84H,SAAS,GAAG,CAACvwM,OAAD,EAAU8gC,KAAV,EAAiBm1C,OAAjB,KAA6B;AAC7C,MAAI;AACFn1C,IAAAA,KAAK,GAAG,IAAIirK,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,CAAR;AACD,GAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,WAAO,KAAP;AACD;;AACD,SAAOp4J,KAAK,CAAC7T,IAAN,CAAWjtB,OAAX,CAAP;AACD,CAPD;;AAQAxC,MAAM,CAACC,OAAP,GAAiB8yM,SAAjB;;ACTA,MAAMxE,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB,EAEA;;;AACA,MAAM+4H,aAAa,GAAG,CAAC1vK,KAAD,EAAQm1C,OAAR,KACpB,IAAI81H,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,EAA0Bh0E,GAA1B,CACG8G,GADH,CACO8jM,IAAI,IAAIA,IAAI,CAAC9jM,GAAL,CAASgD,CAAC,IAAIA,CAAC,CAACzJ,KAAhB,EAAuBY,IAAvB,CAA4B,GAA5B,EAAiCq3G,IAAjC,GAAwCp3G,KAAxC,CAA8C,GAA9C,CADf,CADF;;AAIA3F,MAAM,CAACC,OAAP,GAAiB+yM,aAAjB;;ACPA,MAAM5G,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMs0H,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AAEA,MAAMg5H,aAAa,GAAG,CAACxwM,QAAD,EAAW6gC,KAAX,EAAkBm1C,OAAlB,KAA8B;AAClD,MAAIvwE,GAAG,GAAG,IAAV;AACA,MAAIgrM,KAAK,GAAG,IAAZ;AACA,MAAIC,QAAQ,GAAG,IAAf;;AACA,MAAI;AACFA,IAAAA,QAAQ,GAAG,IAAI5E,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,CAAX;AACD,GAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,WAAO,IAAP;AACD;;AACDj5L,EAAAA,QAAQ,CAACmD,OAAT,CAAkBoO,CAAD,IAAO;AACtB,QAAIm/L,QAAQ,CAAC1jL,IAAT,CAAczb,CAAd,CAAJ,EAAsB;AACpB;AACA,UAAI,CAAC9L,GAAD,IAAQgrM,KAAK,CAACtJ,OAAN,CAAc51L,CAAd,MAAqB,CAAC,CAAlC,EAAqC;AACnC;AACA9L,QAAAA,GAAG,GAAG8L,CAAN;AACAk/L,QAAAA,KAAK,GAAG,IAAI9G,MAAJ,CAAWlkM,GAAX,EAAgBuwE,OAAhB,CAAR;AACD;AACF;AACF,GATD;AAUA,SAAOvwE,GAAP;AACD,CApBD;;AAqBAlI,MAAM,CAACC,OAAP,GAAiBgzM,aAAjB;;ACxBA,MAAM7G,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMs0H,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAMm5H,aAAa,GAAG,CAAC3wM,QAAD,EAAW6gC,KAAX,EAAkBm1C,OAAlB,KAA8B;AAClD,MAAIzwE,GAAG,GAAG,IAAV;AACA,MAAIqrM,KAAK,GAAG,IAAZ;AACA,MAAIF,QAAQ,GAAG,IAAf;;AACA,MAAI;AACFA,IAAAA,QAAQ,GAAG,IAAI5E,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,CAAX;AACD,GAFD,CAEE,OAAOijH,EAAP,EAAW;AACX,WAAO,IAAP;AACD;;AACDj5L,EAAAA,QAAQ,CAACmD,OAAT,CAAkBoO,CAAD,IAAO;AACtB,QAAIm/L,QAAQ,CAAC1jL,IAAT,CAAczb,CAAd,CAAJ,EAAsB;AACpB;AACA,UAAI,CAAChM,GAAD,IAAQqrM,KAAK,CAACzJ,OAAN,CAAc51L,CAAd,MAAqB,CAAjC,EAAoC;AAClC;AACAhM,QAAAA,GAAG,GAAGgM,CAAN;AACAq/L,QAAAA,KAAK,GAAG,IAAIjH,MAAJ,CAAWpkM,GAAX,EAAgBywE,OAAhB,CAAR;AACD;AACF;AACF,GATD;AAUA,SAAOzwE,GAAP;AACD,CApBD;;AAqBAhI,MAAM,CAACC,OAAP,GAAiBmzM,aAAjB;;ACvBA,MAAMhH,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMs0H,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAM6zH,EAAE,GAAG7zH,OAAO,CAAC,iBAAD,CAAlB;;AAEA,MAAMq5H,UAAU,GAAG,CAAChwK,KAAD,EAAQ+oK,KAAR,KAAkB;AACnC/oK,EAAAA,KAAK,GAAG,IAAIirK,KAAJ,CAAUjrK,KAAV,EAAiB+oK,KAAjB,CAAR;AAEA,MAAIkH,MAAM,GAAG,IAAInH,MAAJ,CAAW,OAAX,CAAb;;AACA,MAAI9oK,KAAK,CAAC7T,IAAN,CAAW8jL,MAAX,CAAJ,EAAwB;AACtB,WAAOA,MAAP;AACD;;AAEDA,EAAAA,MAAM,GAAG,IAAInH,MAAJ,CAAW,SAAX,CAAT;;AACA,MAAI9oK,KAAK,CAAC7T,IAAN,CAAW8jL,MAAX,CAAJ,EAAwB;AACtB,WAAOA,MAAP;AACD;;AAEDA,EAAAA,MAAM,GAAG,IAAT;;AACA,OAAK,IAAIzxM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwhC,KAAK,CAAC7+B,GAAN,CAAUrD,MAA9B,EAAsC,EAAEU,CAAxC,EAA2C;AACzC,UAAMiuM,WAAW,GAAGzsK,KAAK,CAAC7+B,GAAN,CAAU3C,CAAV,CAApB;AAEAiuM,IAAAA,WAAW,CAACnqM,OAAZ,CAAqBwyC,UAAD,IAAgB;AAClC;AACA,YAAMo7J,OAAO,GAAG,IAAIpH,MAAJ,CAAWh0J,UAAU,CAACi6J,MAAX,CAAkB7vM,OAA7B,CAAhB;;AACA,cAAQ41C,UAAU,CAACo6J,QAAnB;AACE,aAAK,GAAL;AACE,cAAIgB,OAAO,CAAC7G,UAAR,CAAmBvrM,MAAnB,KAA8B,CAAlC,EAAqC;AACnCoyM,YAAAA,OAAO,CAAChM,KAAR;AACD,WAFD,MAEO;AACLgM,YAAAA,OAAO,CAAC7G,UAAR,CAAmB5qM,IAAnB,CAAwB,CAAxB;AACD;;AACDyxM,UAAAA,OAAO,CAAC9O,GAAR,GAAc8O,OAAO,CAACnvF,MAAR,EAAd;;AACA;;AACF,aAAK,EAAL;AACA,aAAK,IAAL;AACE,cAAI,CAACkvF,MAAD,IAAWzF,EAAE,CAACyF,MAAD,EAASC,OAAT,CAAjB,EAAoC;AAClCD,YAAAA,MAAM,GAAGC,OAAT;AACD;;AACD;;AACF,aAAK,GAAL;AACA,aAAK,IAAL;AACE;AACA;;AACF;;AACA;AACE,gBAAM,IAAInzM,KAAJ,CAAW,yBAAwB+3C,UAAU,CAACo6J,QAAS,EAAvD,CAAN;AArBJ;AAuBD,KA1BD;AA2BD;;AAED,MAAIe,MAAM,IAAIjwK,KAAK,CAAC7T,IAAN,CAAW8jL,MAAX,CAAd,EAAkC;AAChC,WAAOA,MAAP;AACD;;AAED,SAAO,IAAP;AACD,CAnDD;;AAoDAvzM,MAAM,CAACC,OAAP,GAAiBqzM,UAAjB;;ACxDA,MAAM/E,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAMw5H,UAAU,GAAG,CAACnwK,KAAD,EAAQm1C,OAAR,KAAoB;AACrC,MAAI;AACF;AACA;AACA,WAAO,IAAI81H,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,EAA0Bn1C,KAA1B,IAAmC,GAA1C;AACD,GAJD,CAIE,OAAOo4J,EAAP,EAAW;AACX,WAAO,IAAP;AACD;AACF,CARD;;AASA17L,MAAM,CAACC,OAAP,GAAiBwzM,UAAjB;;ACVA,MAAMrH,MAAM,GAAGnyH,OAAO,CAAC,mBAAD,CAAtB;;AACA,MAAMu0H,UAAU,GAAGv0H,OAAO,CAAC,uBAAD,CAA1B;;AACA,MAAM;AAACq4H,EAAAA;AAAD,IAAQ9D,UAAd;;AACA,MAAMD,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAM84H,SAAS,GAAG94H,OAAO,CAAC,wBAAD,CAAzB;;AACA,MAAM6zH,EAAE,GAAG7zH,OAAO,CAAC,iBAAD,CAAlB;;AACA,MAAM8zH,EAAE,GAAG9zH,OAAO,CAAC,iBAAD,CAAlB;;AACA,MAAMi0H,GAAG,GAAGj0H,OAAO,CAAC,kBAAD,CAAnB;;AACA,MAAMg0H,GAAG,GAAGh0H,OAAO,CAAC,kBAAD,CAAnB;;AAEA,MAAMy5H,OAAO,GAAG,CAAClxM,OAAD,EAAU8gC,KAAV,EAAiBqwK,IAAjB,EAAuBl7H,OAAvB,KAAmC;AACjDj2E,EAAAA,OAAO,GAAG,IAAI4pM,MAAJ,CAAW5pM,OAAX,EAAoBi2E,OAApB,CAAV;AACAn1C,EAAAA,KAAK,GAAG,IAAIirK,KAAJ,CAAUjrK,KAAV,EAAiBm1C,OAAjB,CAAR;AAEA,MAAIm7H,IAAJ,EAAUC,KAAV,EAAiBC,IAAjB,EAAuBzE,IAAvB,EAA6B0E,KAA7B;;AACA,UAAQJ,IAAR;AACE,SAAK,GAAL;AACEC,MAAAA,IAAI,GAAG9F,EAAP;AACA+F,MAAAA,KAAK,GAAG3F,GAAR;AACA4F,MAAAA,IAAI,GAAG/F,EAAP;AACAsB,MAAAA,IAAI,GAAG,GAAP;AACA0E,MAAAA,KAAK,GAAG,IAAR;AACA;;AACF,SAAK,GAAL;AACEH,MAAAA,IAAI,GAAG7F,EAAP;AACA8F,MAAAA,KAAK,GAAG5F,GAAR;AACA6F,MAAAA,IAAI,GAAGhG,EAAP;AACAuB,MAAAA,IAAI,GAAG,GAAP;AACA0E,MAAAA,KAAK,GAAG,IAAR;AACA;;AACF;AACE,YAAM,IAAI/qE,SAAJ,CAAc,uCAAd,CAAN;AAhBJ,GALiD,CAwBjD;;;AACA,MAAI+pE,SAAS,CAACvwM,OAAD,EAAU8gC,KAAV,EAAiBm1C,OAAjB,CAAb,EAAwC;AACtC,WAAO,KAAP;AACD,GA3BgD,CA6BjD;AACA;;;AAEA,OAAK,IAAI32E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwhC,KAAK,CAAC7+B,GAAN,CAAUrD,MAA9B,EAAsC,EAAEU,CAAxC,EAA2C;AACzC,UAAMiuM,WAAW,GAAGzsK,KAAK,CAAC7+B,GAAN,CAAU3C,CAAV,CAApB;AAEA,QAAIw9E,IAAI,GAAG,IAAX;AACA,QAAID,GAAG,GAAG,IAAV;AAEA0wH,IAAAA,WAAW,CAACnqM,OAAZ,CAAqBwyC,UAAD,IAAgB;AAClC,UAAIA,UAAU,CAACi6J,MAAX,KAAsBC,GAA1B,EAA+B;AAC7Bl6J,QAAAA,UAAU,GAAG,IAAIo2J,UAAJ,CAAe,SAAf,CAAb;AACD;;AACDlvH,MAAAA,IAAI,GAAGA,IAAI,IAAIlnC,UAAf;AACAinC,MAAAA,GAAG,GAAGA,GAAG,IAAIjnC,UAAb;;AACA,UAAIw7J,IAAI,CAACx7J,UAAU,CAACi6J,MAAZ,EAAoB/yH,IAAI,CAAC+yH,MAAzB,EAAiC55H,OAAjC,CAAR,EAAmD;AACjD6G,QAAAA,IAAI,GAAGlnC,UAAP;AACD,OAFD,MAEO,IAAI07J,IAAI,CAAC17J,UAAU,CAACi6J,MAAZ,EAAoBhzH,GAAG,CAACgzH,MAAxB,EAAgC55H,OAAhC,CAAR,EAAkD;AACvD4G,QAAAA,GAAG,GAAGjnC,UAAN;AACD;AACF,KAXD,EANyC,CAmBzC;AACA;;AACA,QAAIknC,IAAI,CAACkzH,QAAL,KAAkBnD,IAAlB,IAA0B/vH,IAAI,CAACkzH,QAAL,KAAkBuB,KAAhD,EAAuD;AACrD,aAAO,KAAP;AACD,KAvBwC,CAyBzC;AACA;;;AACA,QAAI,CAAC,CAAC10H,GAAG,CAACmzH,QAAL,IAAiBnzH,GAAG,CAACmzH,QAAJ,KAAiBnD,IAAnC,KACAwE,KAAK,CAACrxM,OAAD,EAAU68E,GAAG,CAACgzH,MAAd,CADT,EACgC;AAC9B,aAAO,KAAP;AACD,KAHD,MAGO,IAAIhzH,GAAG,CAACmzH,QAAJ,KAAiBuB,KAAjB,IAA0BD,IAAI,CAACtxM,OAAD,EAAU68E,GAAG,CAACgzH,MAAd,CAAlC,EAAyD;AAC9D,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD,CAnED;;AAqEAryM,MAAM,CAACC,OAAP,GAAiByzM,OAAjB;;AC/EA;AACA,MAAMA,OAAO,GAAGz5H,OAAO,CAAC,WAAD,CAAvB;;AACA,MAAM+5H,GAAG,GAAG,CAACxxM,OAAD,EAAU8gC,KAAV,EAAiBm1C,OAAjB,KAA6Bi7H,OAAO,CAAClxM,OAAD,EAAU8gC,KAAV,EAAiB,GAAjB,EAAsBm1C,OAAtB,CAAhD;;AACAz4E,MAAM,CAACC,OAAP,GAAiB+zM,GAAjB;;ACHA,MAAMN,OAAO,GAAGz5H,OAAO,CAAC,WAAD,CAAvB,EACA;;;AACA,MAAMg6H,GAAG,GAAG,CAACzxM,OAAD,EAAU8gC,KAAV,EAAiBm1C,OAAjB,KAA6Bi7H,OAAO,CAAClxM,OAAD,EAAU8gC,KAAV,EAAiB,GAAjB,EAAsBm1C,OAAtB,CAAhD;;AACAz4E,MAAM,CAACC,OAAP,GAAiBg0M,GAAjB;;ACHA,MAAM1F,KAAK,GAAGt0H,OAAO,CAAC,kBAAD,CAArB;;AACA,MAAMu1H,UAAU,GAAG,CAAC0E,EAAD,EAAKC,EAAL,EAAS17H,OAAT,KAAqB;AACtCy7H,EAAAA,EAAE,GAAG,IAAI3F,KAAJ,CAAU2F,EAAV,EAAcz7H,OAAd,CAAL;AACA07H,EAAAA,EAAE,GAAG,IAAI5F,KAAJ,CAAU4F,EAAV,EAAc17H,OAAd,CAAL;AACA,SAAOy7H,EAAE,CAAC1E,UAAH,CAAc2E,EAAd,CAAP;AACD,CAJD;;AAKAn0M,MAAM,CAACC,OAAP,GAAiBuvM,UAAjB;;ACNA;AACA;AACA;AACA,MAAMuD,SAAS,GAAG94H,OAAO,CAAC,2BAAD,CAAzB;;AACA,MAAM2vH,OAAO,GAAG3vH,OAAO,CAAC,yBAAD,CAAvB;;AACAj6E,MAAM,CAACC,OAAP,GAAiB,CAACwC,QAAD,EAAW6gC,KAAX,EAAkBm1C,OAAlB,KAA8B;AAC7C,QAAMh0E,GAAG,GAAG,EAAZ;AACA,MAAIuD,GAAG,GAAG,IAAV;AACA,MAAIizF,IAAI,GAAG,IAAX;AACA,QAAMjnF,CAAC,GAAGvR,QAAQ,CAACqJ,IAAT,CAAc,CAAC9C,CAAD,EAAI6G,CAAJ,KAAU+5L,OAAO,CAAC5gM,CAAD,EAAI6G,CAAJ,EAAO4oE,OAAP,CAA/B,CAAV;;AACA,OAAK,MAAMj2E,OAAX,IAAsBwR,CAAtB,EAAyB;AACvB,UAAMogM,QAAQ,GAAGrB,SAAS,CAACvwM,OAAD,EAAU8gC,KAAV,EAAiBm1C,OAAjB,CAA1B;;AACA,QAAI27H,QAAJ,EAAc;AACZn5G,MAAAA,IAAI,GAAGz4F,OAAP;AACA,UAAI,CAACwF,GAAL,EACEA,GAAG,GAAGxF,OAAN;AACH,KAJD,MAIO;AACL,UAAIy4F,IAAJ,EAAU;AACRx2F,QAAAA,GAAG,CAAC1C,IAAJ,CAAS,CAACiG,GAAD,EAAMizF,IAAN,CAAT;AACD;;AACDA,MAAAA,IAAI,GAAG,IAAP;AACAjzF,MAAAA,GAAG,GAAG,IAAN;AACD;AACF;;AACD,MAAIA,GAAJ,EACEvD,GAAG,CAAC1C,IAAJ,CAAS,CAACiG,GAAD,EAAM,IAAN,CAAT;AAEF,QAAMqsM,MAAM,GAAG,EAAf;;AACA,OAAK,MAAM,CAACrsM,GAAD,EAAME,GAAN,CAAX,IAAyBzD,GAAzB,EAA8B;AAC5B,QAAIuD,GAAG,KAAKE,GAAZ,EACEmsM,MAAM,CAACtyM,IAAP,CAAYiG,GAAZ,EADF,KAEK,IAAI,CAACE,GAAD,IAAQF,GAAG,KAAKgM,CAAC,CAAC,CAAD,CAArB,EACHqgM,MAAM,CAACtyM,IAAP,CAAY,GAAZ,EADG,KAEA,IAAI,CAACmG,GAAL,EACHmsM,MAAM,CAACtyM,IAAP,CAAa,KAAIiG,GAAI,EAArB,EADG,KAEA,IAAIA,GAAG,KAAKgM,CAAC,CAAC,CAAD,CAAb,EACHqgM,MAAM,CAACtyM,IAAP,CAAa,KAAImG,GAAI,EAArB,EADG,KAGHmsM,MAAM,CAACtyM,IAAP,CAAa,GAAEiG,GAAI,MAAKE,GAAI,EAA5B;AACH;;AACD,QAAMosM,UAAU,GAAGD,MAAM,CAAC3uM,IAAP,CAAY,MAAZ,CAAnB;AACA,QAAM6uM,QAAQ,GAAG,OAAOjxK,KAAK,CAACohK,GAAb,KAAqB,QAArB,GAAgCphK,KAAK,CAACohK,GAAtC,GAA4Ct3L,MAAM,CAACk2B,KAAD,CAAnE;AACA,SAAOgxK,UAAU,CAAClzM,MAAX,GAAoBmzM,QAAQ,CAACnzM,MAA7B,GAAsCkzM,UAAtC,GAAmDhxK,KAA1D;AACD,CAtCD;;ACLA,MAAMirK,KAAK,GAAGt0H,OAAO,CAAC,qBAAD,CAArB;;AACA,MAAM;AAAEq4H,EAAAA;AAAF,IAAUr4H,OAAO,CAAC,0BAAD,CAAvB;;AACA,MAAM84H,SAAS,GAAG94H,OAAO,CAAC,2BAAD,CAAzB;;AACA,MAAM2vH,OAAO,GAAG3vH,OAAO,CAAC,yBAAD,CAAvB,EAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,MAAMu6H,MAAM,GAAG,CAACn8L,GAAD,EAAMo8L,GAAN,EAAWh8H,OAAX,KAAuB;AACpCpgE,EAAAA,GAAG,GAAG,IAAIk2L,KAAJ,CAAUl2L,GAAV,EAAeogE,OAAf,CAAN;AACAg8H,EAAAA,GAAG,GAAG,IAAIlG,KAAJ,CAAUkG,GAAV,EAAeh8H,OAAf,CAAN;AACA,MAAIi8H,UAAU,GAAG,KAAjB;;AAEAC,EAAAA,KAAK,EAAE,KAAK,MAAMC,SAAX,IAAwBv8L,GAAG,CAAC5T,GAA5B,EAAiC;AACtC,SAAK,MAAMowM,SAAX,IAAwBJ,GAAG,CAAChwM,GAA5B,EAAiC;AAC/B,YAAMqwM,KAAK,GAAGC,YAAY,CAACH,SAAD,EAAYC,SAAZ,EAAuBp8H,OAAvB,CAA1B;AACAi8H,MAAAA,UAAU,GAAGA,UAAU,IAAII,KAAK,KAAK,IAArC;AACA,UAAIA,KAAJ,EACE,SAASH,KAAT;AACH,KANqC,CAOtC;AACA;AACA;AACA;;;AACA,QAAID,UAAJ,EACE,OAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACD,CApBD;;AAsBA,MAAMK,YAAY,GAAG,CAAC18L,GAAD,EAAMo8L,GAAN,EAAWh8H,OAAX,KAAuB;AAC1C,MAAIpgE,GAAG,CAACjX,MAAJ,KAAe,CAAf,IAAoBiX,GAAG,CAAC,CAAD,CAAH,CAAOg6L,MAAP,KAAkBC,GAA1C,EACE,OAAOmC,GAAG,CAACrzM,MAAJ,KAAe,CAAf,IAAoBqzM,GAAG,CAAC,CAAD,CAAH,CAAOpC,MAAP,KAAkBC,GAA7C;AAEF,QAAM0C,KAAK,GAAG,IAAItyL,GAAJ,EAAd;AACA,MAAIorL,EAAJ,EAAQC,EAAR;;AACA,OAAK,MAAMx/L,CAAX,IAAgB8J,GAAhB,EAAqB;AACnB,QAAI9J,CAAC,CAACikM,QAAF,KAAe,GAAf,IAAsBjkM,CAAC,CAACikM,QAAF,KAAe,IAAzC,EACE1E,EAAE,GAAGmH,QAAQ,CAACnH,EAAD,EAAKv/L,CAAL,EAAQkqE,OAAR,CAAb,CADF,KAEK,IAAIlqE,CAAC,CAACikM,QAAF,KAAe,GAAf,IAAsBjkM,CAAC,CAACikM,QAAF,KAAe,IAAzC,EACHzE,EAAE,GAAGmH,OAAO,CAACnH,EAAD,EAAKx/L,CAAL,EAAQkqE,OAAR,CAAZ,CADG,KAGHu8H,KAAK,CAACvyL,GAAN,CAAUlU,CAAC,CAAC8jM,MAAZ;AACH;;AAED,MAAI2C,KAAK,CAACzrM,IAAN,GAAa,CAAjB,EACE,OAAO,IAAP;AAEF,MAAI4rM,QAAJ;;AACA,MAAIrH,EAAE,IAAIC,EAAV,EAAc;AACZoH,IAAAA,QAAQ,GAAGvL,OAAO,CAACkE,EAAE,CAACuE,MAAJ,EAAYtE,EAAE,CAACsE,MAAf,EAAuB55H,OAAvB,CAAlB;AACA,QAAI08H,QAAQ,GAAG,CAAf,EACE,OAAO,IAAP,CADF,KAEK,IAAIA,QAAQ,KAAK,CAAb,KAAmBrH,EAAE,CAAC0E,QAAH,KAAgB,IAAhB,IAAwBzE,EAAE,CAACyE,QAAH,KAAgB,IAA3D,CAAJ,EACH,OAAO,IAAP;AACH,GAzByC,CA2B1C;;;AACA,OAAK,MAAMnV,EAAX,IAAiB2X,KAAjB,EAAwB;AACtB,QAAIlH,EAAE,IAAI,CAACiF,SAAS,CAAC1V,EAAD,EAAKjwL,MAAM,CAAC0gM,EAAD,CAAX,EAAiBr1H,OAAjB,CAApB,EACE,OAAO,IAAP;AAEF,QAAIs1H,EAAE,IAAI,CAACgF,SAAS,CAAC1V,EAAD,EAAKjwL,MAAM,CAAC2gM,EAAD,CAAX,EAAiBt1H,OAAjB,CAApB,EACE,OAAO,IAAP;;AAEF,SAAK,MAAMlqE,CAAX,IAAgBkmM,GAAhB,EAAqB;AACnB,UAAI,CAAC1B,SAAS,CAAC1V,EAAD,EAAKjwL,MAAM,CAACmB,CAAD,CAAX,EAAgBkqE,OAAhB,CAAd,EACE,OAAO,KAAP;AACH;;AACD,WAAO,IAAP;AACD;;AAED,MAAI28H,MAAJ,EAAYt1H,KAAZ;AACA,MAAIu1H,QAAJ,EAAcC,QAAd;;AACA,OAAK,MAAM/mM,CAAX,IAAgBkmM,GAAhB,EAAqB;AACnBa,IAAAA,QAAQ,GAAGA,QAAQ,IAAI/mM,CAAC,CAACikM,QAAF,KAAe,GAA3B,IAAkCjkM,CAAC,CAACikM,QAAF,KAAe,IAA5D;AACA6C,IAAAA,QAAQ,GAAGA,QAAQ,IAAI9mM,CAAC,CAACikM,QAAF,KAAe,GAA3B,IAAkCjkM,CAAC,CAACikM,QAAF,KAAe,IAA5D;;AACA,QAAI1E,EAAJ,EAAQ;AACN,UAAIv/L,CAAC,CAACikM,QAAF,KAAe,GAAf,IAAsBjkM,CAAC,CAACikM,QAAF,KAAe,IAAzC,EAA+C;AAC7C4C,QAAAA,MAAM,GAAGH,QAAQ,CAACnH,EAAD,EAAKv/L,CAAL,EAAQkqE,OAAR,CAAjB;AACA,YAAI28H,MAAM,KAAK7mM,CAAf,EACE,OAAO,KAAP;AACH,OAJD,MAIO,IAAIu/L,EAAE,CAAC0E,QAAH,KAAgB,IAAhB,IAAwB,CAACO,SAAS,CAACjF,EAAE,CAACuE,MAAJ,EAAYjlM,MAAM,CAACmB,CAAD,CAAlB,EAAuBkqE,OAAvB,CAAtC,EACL,OAAO,KAAP;AACH;;AACD,QAAIs1H,EAAJ,EAAQ;AACN,UAAIx/L,CAAC,CAACikM,QAAF,KAAe,GAAf,IAAsBjkM,CAAC,CAACikM,QAAF,KAAe,IAAzC,EAA+C;AAC7C1yH,QAAAA,KAAK,GAAGo1H,OAAO,CAACnH,EAAD,EAAKx/L,CAAL,EAAQkqE,OAAR,CAAf;AACA,YAAIqH,KAAK,KAAKvxE,CAAd,EACE,OAAO,KAAP;AACH,OAJD,MAIO,IAAIw/L,EAAE,CAACyE,QAAH,KAAgB,IAAhB,IAAwB,CAACO,SAAS,CAAChF,EAAE,CAACsE,MAAJ,EAAYjlM,MAAM,CAACmB,CAAD,CAAlB,EAAuBkqE,OAAvB,CAAtC,EACL,OAAO,KAAP;AACH;;AACD,QAAI,CAAClqE,CAAC,CAACikM,QAAH,KAAgBzE,EAAE,IAAID,EAAtB,KAA6BqH,QAAQ,KAAK,CAA9C,EACE,OAAO,KAAP;AACH,GAjEyC,CAmE1C;AACA;AACA;;;AACA,MAAIrH,EAAE,IAAIuH,QAAN,IAAkB,CAACtH,EAAnB,IAAyBoH,QAAQ,KAAK,CAA1C,EACE,OAAO,KAAP;AAEF,MAAIpH,EAAE,IAAIuH,QAAN,IAAkB,CAACxH,EAAnB,IAAyBqH,QAAQ,KAAK,CAA1C,EACE,OAAO,KAAP;AAEF,SAAO,IAAP;AACD,CA7ED,EA+EA;;;AACA,MAAMF,QAAQ,GAAG,CAACjsM,CAAD,EAAI6G,CAAJ,EAAO4oE,OAAP,KAAmB;AAClC,MAAI,CAACzvE,CAAL,EACE,OAAO6G,CAAP;AACF,QAAMw/L,IAAI,GAAGzF,OAAO,CAAC5gM,CAAC,CAACqpM,MAAH,EAAWxiM,CAAC,CAACwiM,MAAb,EAAqB55H,OAArB,CAApB;AACA,SAAO42H,IAAI,GAAG,CAAP,GAAWrmM,CAAX,GACHqmM,IAAI,GAAG,CAAP,GAAWx/L,CAAX,GACAA,CAAC,CAAC2iM,QAAF,KAAe,GAAf,IAAsBxpM,CAAC,CAACwpM,QAAF,KAAe,IAArC,GAA4C3iM,CAA5C,GACA7G,CAHJ;AAID,CARD,EAUA;;;AACA,MAAMksM,OAAO,GAAG,CAAClsM,CAAD,EAAI6G,CAAJ,EAAO4oE,OAAP,KAAmB;AACjC,MAAI,CAACzvE,CAAL,EACE,OAAO6G,CAAP;AACF,QAAMw/L,IAAI,GAAGzF,OAAO,CAAC5gM,CAAC,CAACqpM,MAAH,EAAWxiM,CAAC,CAACwiM,MAAb,EAAqB55H,OAArB,CAApB;AACA,SAAO42H,IAAI,GAAG,CAAP,GAAWrmM,CAAX,GACHqmM,IAAI,GAAG,CAAP,GAAWx/L,CAAX,GACAA,CAAC,CAAC2iM,QAAF,KAAe,GAAf,IAAsBxpM,CAAC,CAACwpM,QAAF,KAAe,IAArC,GAA4C3iM,CAA5C,GACA7G,CAHJ;AAID,CARD;;AAUAhJ,MAAM,CAACC,OAAP,GAAiBu0M,MAAjB;;AC1JA;AACA,MAAMe,UAAU,GAAGt7H,OAAO,CAAC,eAAD,CAA1B;;AACAj6E,MAAM,CAACC,OAAP,GAAiB;AACfmqM,EAAAA,EAAE,EAAEmL,UAAU,CAACnL,EADA;AAEfzT,EAAAA,GAAG,EAAE4e,UAAU,CAAC5e,GAFD;AAGf6e,EAAAA,MAAM,EAAED,UAAU,CAAC/vM,CAHJ;AAIfykM,EAAAA,mBAAmB,EAAEhwH,OAAO,CAAC,sBAAD,CAAP,CAAgCgwH,mBAJtC;AAKfmC,EAAAA,MAAM,EAAEnyH,OAAO,CAAC,kBAAD,CALA;AAMf+xH,EAAAA,kBAAkB,EAAE/xH,OAAO,CAAC,wBAAD,CAAP,CAAkC+xH,kBANvC;AAOfG,EAAAA,mBAAmB,EAAElyH,OAAO,CAAC,wBAAD,CAAP,CAAkCkyH,mBAPxC;AAQfnoJ,EAAAA,KAAK,EAAEi2B,OAAO,CAAC,mBAAD,CARC;AASfizH,EAAAA,KAAK,EAAEjzH,OAAO,CAAC,mBAAD,CATC;AAUfkzH,EAAAA,KAAK,EAAElzH,OAAO,CAAC,mBAAD,CAVC;AAWf+yH,EAAAA,GAAG,EAAE/yH,OAAO,CAAC,iBAAD,CAXG;AAYflqE,EAAAA,IAAI,EAAEkqE,OAAO,CAAC,kBAAD,CAZE;AAafwyH,EAAAA,KAAK,EAAExyH,OAAO,CAAC,mBAAD,CAbC;AAcfyyH,EAAAA,KAAK,EAAEzyH,OAAO,CAAC,mBAAD,CAdC;AAefutH,EAAAA,KAAK,EAAEvtH,OAAO,CAAC,mBAAD,CAfC;AAgBf0yH,EAAAA,UAAU,EAAE1yH,OAAO,CAAC,wBAAD,CAhBJ;AAiBf2vH,EAAAA,OAAO,EAAE3vH,OAAO,CAAC,qBAAD,CAjBD;AAkBfwzH,EAAAA,QAAQ,EAAExzH,OAAO,CAAC,sBAAD,CAlBF;AAmBfyzH,EAAAA,YAAY,EAAEzzH,OAAO,CAAC,2BAAD,CAnBN;AAoBf8yH,EAAAA,YAAY,EAAE9yH,OAAO,CAAC,2BAAD,CApBN;AAqBfnuE,EAAAA,IAAI,EAAEmuE,OAAO,CAAC,kBAAD,CArBE;AAsBf4zH,EAAAA,KAAK,EAAE5zH,OAAO,CAAC,mBAAD,CAtBC;AAuBf6zH,EAAAA,EAAE,EAAE7zH,OAAO,CAAC,gBAAD,CAvBI;AAwBf8zH,EAAAA,EAAE,EAAE9zH,OAAO,CAAC,gBAAD,CAxBI;AAyBfojH,EAAAA,EAAE,EAAEpjH,OAAO,CAAC,gBAAD,CAzBI;AA0Bf+zH,EAAAA,GAAG,EAAE/zH,OAAO,CAAC,iBAAD,CA1BG;AA2Bfg0H,EAAAA,GAAG,EAAEh0H,OAAO,CAAC,iBAAD,CA3BG;AA4Bfi0H,EAAAA,GAAG,EAAEj0H,OAAO,CAAC,iBAAD,CA5BG;AA6Bfk0H,EAAAA,GAAG,EAAEl0H,OAAO,CAAC,iBAAD,CA7BG;AA8Bfm0H,EAAAA,MAAM,EAAEn0H,OAAO,CAAC,oBAAD,CA9BA;AA+Bfu0H,EAAAA,UAAU,EAAEv0H,OAAO,CAAC,sBAAD,CA/BJ;AAgCfs0H,EAAAA,KAAK,EAAEt0H,OAAO,CAAC,iBAAD,CAhCC;AAiCf84H,EAAAA,SAAS,EAAE94H,OAAO,CAAC,uBAAD,CAjCH;AAkCf+4H,EAAAA,aAAa,EAAE/4H,OAAO,CAAC,yBAAD,CAlCP;AAmCfg5H,EAAAA,aAAa,EAAEh5H,OAAO,CAAC,yBAAD,CAnCP;AAoCfm5H,EAAAA,aAAa,EAAEn5H,OAAO,CAAC,yBAAD,CApCP;AAqCfq5H,EAAAA,UAAU,EAAEr5H,OAAO,CAAC,sBAAD,CArCJ;AAsCfw5H,EAAAA,UAAU,EAAEx5H,OAAO,CAAC,gBAAD,CAtCJ;AAuCfy5H,EAAAA,OAAO,EAAEz5H,OAAO,CAAC,kBAAD,CAvCD;AAwCf+5H,EAAAA,GAAG,EAAE/5H,OAAO,CAAC,cAAD,CAxCG;AAyCfg6H,EAAAA,GAAG,EAAEh6H,OAAO,CAAC,cAAD,CAzCG;AA0Cfu1H,EAAAA,UAAU,EAAEv1H,OAAO,CAAC,qBAAD,CA1CJ;AA2Cfw7H,EAAAA,aAAa,EAAEx7H,OAAO,CAAC,mBAAD,CA3CP;AA4Cfu6H,EAAAA,MAAM,EAAEv6H,OAAO,CAAC,iBAAD;AA5CA,CAAjB;;;;;;;;;;;ACFe,kBAASl0D,EAAT,EAAa65B,MAAb,EAAqBv8C,IAArB,EAA2B;AACxC0iB,EAAAA,EAAE,CAAC65B,MAAH,GAAYA,MAAM,IAAI,EAAtB;AACA75B,EAAAA,EAAE,CAAC2vL,KAAH,GAAWryM,IAAX;AACA,SAAO0iB,EAAP;AACD;;AAEM,SAAS4vL,YAAT,CAAsB5vL,EAAtB,EAA0B;AAC/B,SAAOA,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoBA,EAAE,CAAC2vL,KAA9B;AACD;;AAEM,SAASE,cAAT,CAAwB7vL,EAAxB,EAA4B;AACjC,SAAOA,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoBA,EAAE,CAAC65B,MAA9B;AACD;;;;;;;;;ACZc,kBAASzvC,IAAT,EAAe;AAC5B,SAAOA,IAAI,CAAC/O,MAAL,KAAgB,CAAhB,GAAoBy0M,IAAI,CAAC1lM,IAAI,CAAC,CAAD,CAAL,CAAxB,GAAoC2lM,IAAI,CAAC3lM,IAAD,CAA/C;AACD;;AAED,MAAM0lM,IAAI,GAAGv+E,KAAK,IAAI,UAAS/0G,GAAT,EAAc;AAClC,SAAOA,GAAG,CAAC+0G,KAAD,CAAV;AACD,CAFD;;AAIA,MAAMw+E,IAAI,GAAG3lM,IAAI,IAAI;AACnB,QAAM3O,GAAG,GAAG2O,IAAI,CAAC/O,MAAjB;AACA,SAAO,UAASmhB,GAAT,EAAc;AACnB,SAAK,IAAIzgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,GAApB,EAAyB,EAAEM,CAA3B,EAA8B;AAC5BygB,MAAAA,GAAG,GAAGA,GAAG,CAACpS,IAAI,CAACrO,CAAD,CAAL,CAAT;AACD;;AACD,WAAOygB,GAAP;AACD,GALD;AAMD,CARD;;;;;;;;;ACRe,kBAAS4C,OAAT,EAAkB;AAC/B,QAAM9kB,KAAK,CAAC8kB,OAAD,CAAX;AACD;;;;;;;;;ACFD;;;;AAEe,kBAASihB,CAAT,EAAY;AACzB,MAAIj2B,IAAI,GAAG,EAAX;AAAA,MACIqpF,CAAC,GAAG,IADR;AAAA,MAEI3pF,CAAC,GAAG,CAFR;AAAA,MAGIG,CAAC,GAAGo2B,CAAC,CAAChlC,MAHV;AAAA,MAIIkE,CAAC,GAAG,EAJR;AAAA,MAKIxD,CALJ;AAAA,MAKOiK,CALP;AAAA,MAKUwC,CALV;AAOA63B,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR;;AAEA,WAASrkC,IAAT,GAAgB;AACdoO,IAAAA,IAAI,CAACpO,IAAL,CAAUuD,CAAC,GAAG8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAd;AACAzG,IAAAA,CAAC,GAAG,EAAJ;AACAxD,IAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;;AAED,OAAKjK,CAAC,GAACiK,CAAC,GAAC,CAAT,EAAYA,CAAC,GAACiE,CAAd,EAAiB,EAAEjE,CAAnB,EAAsB;AACpBwC,IAAAA,CAAC,GAAG63B,CAAC,CAACr6B,CAAD,CAAL;;AACA,QAAIwC,CAAC,KAAK,IAAV,EAAgB;AACdjJ,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAL;AACAzG,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY,EAAE70B,CAAd,EAAiB,EAAEA,CAAnB,CAAL;AACAjK,MAAAA,CAAC,GAAGiK,CAAJ;AACD,KAJD,MAIO,IAAIwC,CAAC,KAAKirF,CAAV,EAAa;AAClBz3F,MAAAA,IAAI;AACJy3F,MAAAA,CAAC,GAAG,IAAJ;AACA3pF,MAAAA,CAAC,GAAG,CAAC,CAAL;AACD,KAJM,MAIA,IAAI2pF,CAAJ,EAAO;AACZ;AACD,KAFM,MAEA,IAAI13F,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIzM,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIA,CAAC,KAAK,GAAN,IAAa,CAACsB,CAAlB,EAAqB;AAC1B,UAAI9D,CAAC,GAAGjK,CAAR,EAAW;AACTC,QAAAA,IAAI;AACL,OAFD,MAEO;AACLD,QAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF,KANM,MAMA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAIxC,CAAC,GAAGjK,CAAR,EAAWC,IAAI;AACf8N,MAAAA,CAAC,GAAG/N,CAAC,GAAGiK,CAAC,GAAG,CAAZ;AACD,KAHM,MAGA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAI,CAACsB,CAAL,EAAQ,oBAAM,uCAAuCu2B,CAA7C;AACR,UAAIv2B,CAAC,GAAG,CAAR,EAAW9N,IAAI;AACf8N,MAAAA,CAAC,GAAG,CAAJ;AACA/N,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF;;AAED,MAAI8D,CAAJ,EAAO,oBAAM,0CAA0Cu2B,CAAhD;AACP,MAAIozD,CAAJ,EAAO,oBAAM,wCAAwCpzD,CAA9C;;AAEP,MAAIr6B,CAAC,GAAGjK,CAAR,EAAW;AACTiK,IAAAA,CAAC;AACDhK,IAAAA,IAAI;AACL;;AAED,SAAOoO,IAAP;AACD;;;;;;;;;AC9DD;;AACA;;AACA;;;;AAEe,kBAASmnH,KAAT,EAAgBj0H,IAAhB,EAAsB0yM,GAAtB,EAA2B;AACxC,QAAM5lM,IAAI,GAAG,8BAAgBmnH,KAAhB,CAAb;AACAA,EAAAA,KAAK,GAAGnnH,IAAI,CAAC/O,MAAL,KAAgB,CAAhB,GAAoB+O,IAAI,CAAC,CAAD,CAAxB,GAA8BmnH,KAAtC;AACA,SAAO,uBACL,CAACy+E,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,eAAnB,EAA2B7lM,IAA3B,CADK,EAEL,CAACmnH,KAAD,CAFK,EAGLj0H,IAAI,IAAIi0H,KAHH,CAAP;AAKD;;;;;;;;;ACZD;;AACA;;;;AAEA,IAAI2+E,KAAK,GAAG,EAAZ;AAEO,IAAIlhM,EAAE,GAAG,oBAAM,IAAN,CAAT;;AAEA,IAAIgtH,QAAQ,GAAG,uBAAS,UAASt5G,CAAT,EAAY;AAAE,SAAOA,CAAP;AAAW,CAAlC,EAAoCwtL,KAApC,EAA2C,UAA3C,CAAf;;AAEA,IAAIv+J,IAAI,GAAG,uBAAS,YAAW;AAAE,SAAO,CAAP;AAAW,CAAjC,EAAmCu+J,KAAnC,EAA0C,MAA1C,CAAX;;AAEA,IAAInlH,GAAG,GAAG,uBAAS,YAAW;AAAE,SAAO,CAAP;AAAW,CAAjC,EAAmCmlH,KAAnC,EAA0C,KAA1C,CAAV;;AAEA,IAAIC,MAAM,GAAG,uBAAS,YAAW;AAAE,SAAO,IAAP;AAAc,CAApC,EAAsCD,KAAtC,EAA6C,MAA7C,CAAb;;AAEA,IAAIE,KAAK,GAAG,uBAAS,YAAW;AAAE,SAAO,KAAP;AAAe,CAArC,EAAuCF,KAAvC,EAA8C,OAA9C,CAAZ;;;;;;;;;;;ACfP,SAASnkM,GAAT,CAAaihC,MAAb,EAAqBksF,KAArB,EAA4BnyG,KAA5B,EAAmC;AACjC,MAAInrB,IAAI,GAAG,CAACs9H,KAAD,EAAQ59H,MAAR,CAAe,GAAG8J,KAAH,CAASvK,IAAT,CAAcksB,KAAd,CAAf,CAAX;AACA7oB,EAAAA,OAAO,CAAC8uC,MAAD,CAAP,CAAgB5wC,KAAhB,CAAsB8B,OAAtB,EAA+BtC,IAA/B,EAFiC,CAEK;AACvC;;AAEM,IAAIy0M,IAAI,GAAI,CAAZ;;AACA,IAAI/1M,KAAK,GAAG,CAAZ;;AACA,IAAIg2M,IAAI,GAAI,CAAZ;;AACA,IAAIC,IAAI,GAAI,CAAZ;;AACA,IAAIC,KAAK,GAAG,CAAZ;;;AAEQ,kBAAS9tL,CAAT,EAAYsqB,MAAZ,EAAoB;AACjC,MAAIksF,KAAK,GAAGx2G,CAAC,IAAI2tL,IAAjB;AACA,SAAO;AACLn3E,IAAAA,KAAK,EAAE,UAASx2G,CAAT,EAAY;AACjB,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB69H,QAAAA,KAAK,GAAG,CAACx2G,CAAT;AACA,eAAO,IAAP;AACD,OAHD,MAGO;AACL,eAAOw2G,KAAP;AACD;AACF,KARI;AASL94G,IAAAA,KAAK,EAAE,YAAW;AAChB,UAAI84G,KAAK,IAAI5+H,KAAb,EAAoByR,GAAG,CAACihC,MAAM,IAAI,OAAX,EAAoB,OAApB,EAA6BlxC,SAA7B,CAAH;AACpB,aAAO,IAAP;AACD,KAZI;AAaLqC,IAAAA,IAAI,EAAE,YAAW;AACf,UAAI+6H,KAAK,IAAIo3E,IAAb,EAAmBvkM,GAAG,CAACihC,MAAM,IAAI,MAAX,EAAmB,MAAnB,EAA2BlxC,SAA3B,CAAH;AACnB,aAAO,IAAP;AACD,KAhBI;AAiBL0jB,IAAAA,IAAI,EAAE,YAAW;AACf,UAAI05G,KAAK,IAAIq3E,IAAb,EAAmBxkM,GAAG,CAACihC,MAAM,IAAI,KAAX,EAAkB,MAAlB,EAA0BlxC,SAA1B,CAAH;AACnB,aAAO,IAAP;AACD,KApBI;AAqBL+yB,IAAAA,KAAK,EAAE,YAAW;AAChB,UAAIqqG,KAAK,IAAIs3E,KAAb,EAAoBzkM,GAAG,CAACihC,MAAM,IAAI,KAAX,EAAkB,OAAlB,EAA2BlxC,SAA3B,CAAH;AACpB,aAAO,IAAP;AACD;AAxBI,GAAP;AA0BD;;;;;;;;eCvCcD,KAAK,CAACuH;;;;;;;;;;ACAN,kBAASsf,CAAT,EAAY;AACzB,SAAOA,CAAC,KAAK5jB,MAAM,CAAC4jB,CAAD,CAAnB;AACD;;;;;;;;;;ACFD;;AACA;;;;AAEA,MAAM+tL,UAAU,GAAGzwM,GAAG,IAAIA,GAAG,KAAK,WAAlC;;AAEO,SAAS0wM,WAAT,CAAqB,GAAGC,OAAxB,EAAiC;AACtC,SAAOA,OAAO,CAACroM,MAAR,CAAe,CAAC8Z,GAAD,EAAMyvC,MAAN,KAAiB;AACrC,SAAK,IAAI7xD,GAAT,IAAgB6xD,MAAhB,EAAwB;AACtB,UAAI7xD,GAAG,KAAK,SAAZ,EAAuB;AACrB;AACA;AACA;AACAoiB,QAAAA,GAAG,CAACwuL,OAAJ,GAAcC,UAAU,CAACzuL,GAAG,CAACwuL,OAAL,EAAc/+I,MAAM,CAAC++I,OAArB,CAAxB;AACD,OALD,MAKO;AACL;AACA;AACA;AACA;AACA,YAAI7mM,CAAC,GAAG/J,GAAG,KAAK,QAAR,GAAmB;AAAC8wM,UAAAA,MAAM,EAAE;AAAT,SAAnB,GACJ9wM,GAAG,KAAK,OAAR,GAAkB,IAAlB,GACA,IAFJ;AAGA+wM,QAAAA,WAAW,CAAC3uL,GAAD,EAAMpiB,GAAN,EAAW6xD,MAAM,CAAC7xD,GAAD,CAAjB,EAAwB+J,CAAxB,CAAX;AACD;AACF;;AACD,WAAOqY,GAAP;AACD,GAnBM,EAmBJ,EAnBI,CAAP;AAoBD;;AAEM,SAAS2uL,WAAT,CAAqBtrL,MAArB,EAA6BzlB,GAA7B,EAAkCjB,KAAlC,EAAyC8iL,OAAzC,EAAkD;AACvD,MAAI,CAAC4uB,UAAU,CAACzwM,GAAD,CAAf,EAAsB;AAEtB,MAAIqZ,CAAJ,EAAOqO,CAAP;;AACA,MAAI,uBAAS3oB,KAAT,KAAmB,CAAC,sBAAQA,KAAR,CAAxB,EAAwC;AACtC2oB,IAAAA,CAAC,GAAG,uBAASjC,MAAM,CAACzlB,GAAD,CAAf,IAAwBylB,MAAM,CAACzlB,GAAD,CAA9B,GAAuCylB,MAAM,CAACzlB,GAAD,CAAN,GAAc,EAAzD;;AACA,SAAKqZ,CAAL,IAAUta,KAAV,EAAiB;AACf,UAAI8iL,OAAO,KAAKA,OAAO,KAAK,IAAZ,IAAoBA,OAAO,CAACxoK,CAAD,CAAhC,CAAX,EAAiD;AAC/C03L,QAAAA,WAAW,CAACrpL,CAAD,EAAIrO,CAAJ,EAAOta,KAAK,CAACsa,CAAD,CAAZ,CAAX;AACD,OAFD,MAEO,IAAIo3L,UAAU,CAACp3L,CAAD,CAAd,EAAmB;AACxBqO,QAAAA,CAAC,CAACrO,CAAD,CAAD,GAAOta,KAAK,CAACsa,CAAD,CAAZ;AACD;AACF;AACF,GATD,MASO;AACLoM,IAAAA,MAAM,CAACzlB,GAAD,CAAN,GAAcjB,KAAd;AACD;AACF;;AAED,SAAS8xM,UAAT,CAAoB5tM,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAI7G,CAAC,IAAI,IAAT,EAAe,OAAO6G,CAAP;AAEf,QAAMtE,GAAG,GAAG,EAAZ;AAAA,QAAgB4c,GAAG,GAAG,EAAtB;;AAEA,WAAS1F,GAAT,CAAagG,CAAb,EAAgB;AACd,QAAI,CAACld,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAR,EAAkB;AAChBkI,MAAAA,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAH,GAAc,CAAd;AACA8kB,MAAAA,GAAG,CAACpmB,IAAJ,CAAS0mB,CAAT;AACD;AACF;;AAED5Y,EAAAA,CAAC,CAACjK,OAAF,CAAU6c,GAAV;AACAzZ,EAAAA,CAAC,CAACpD,OAAF,CAAU6c,GAAV;AACA,SAAO0F,GAAP;AACD;;;;;;;;;AC7Dc,kBAASlmB,KAAT,EAAgB;AAC7B,SAAOA,KAAK,CAACA,KAAK,CAACb,MAAN,GAAe,CAAhB,CAAZ;AACD;;;;;;;;;ACFc,kBAASqnB,CAAT,EAAY;AACzB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B,CAACA,CAAvC;AACD;;;;;;;;;;;;;;;;ACFD;;AACA;;AACA;;;;AAEA,SAAS3e,GAAT,CAAayQ,IAAb,EAAmB;AACjB,SAAO,UAAStS,CAAT,EAAY;AAAE,WAAOsS,IAAI,GAAG1S,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAd;AAA4B,GAAjD;AACD;;AAED,SAAS6J,GAAT,CAAayI,IAAb,EAAmB;AACjB,SAAO,UAAStS,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAACiK,GAAL,CAASyI,IAAI,GAAGtS,CAAhB,CAAP;AAA4B,GAAjD;AACD;;AAED,SAAS8uM,MAAT,CAAgBxoM,CAAhB,EAAmB;AACjB,SAAO,UAAStG,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGsG,CAAb,CAAX,CAAtB;AAAoD,GAAzE;AACD;;AAED,SAASyoM,MAAT,CAAgBzoM,CAAhB,EAAmB;AACjB,SAAO,UAAStG,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC4S,KAAL,CAAW5S,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAX,CAAf,GAAyCsG,CAAhD;AAAoD,GAAzE;AACD;;AAED,SAASgK,GAAT,CAAay/B,QAAb,EAAuB;AACrB,SAAO,UAAS/vC,CAAT,EAAY;AACjB,WAAOA,CAAC,GAAG,CAAJ,GAAQ,CAACJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAV,EAAa+vC,QAAb,CAAT,GAAkCnwC,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY+vC,QAAZ,CAAzC;AACD,GAFD;AAGD;;AAED,SAASi/J,GAAT,CAAaC,MAAb,EAAqBz/G,KAArB,EAA4B0/G,IAA5B,EAAkCC,MAAlC,EAA0C;AACxC,MAAIC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAb;AAAA,MACIjsI,EAAE,GAAGksI,IAAI,CAAC,mBAAKD,MAAL,CAAD,CADb;AAAA,MAEII,EAAE,GAAG,CAACrsI,EAAE,GAAGosI,EAAN,IAAY5/G,KAFrB;AAIA,SAAO,CACL2/G,MAAM,CAACC,EAAE,GAAGC,EAAN,CADD,EAELF,MAAM,CAACnsI,EAAE,GAAGqsI,EAAN,CAFD,CAAP;AAID;;AAEM,SAASC,SAAT,CAAmBL,MAAnB,EAA2Bz/G,KAA3B,EAAkC;AACvC,SAAOw/G,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgB+/G,iBAAhB,EAA0Bz1E,mBAA1B,CAAV;AACD;;AAEM,SAAS01E,MAAT,CAAgBP,MAAhB,EAAwBz/G,KAAxB,EAA+B;AACpC,MAAIl9E,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAX;AACA,SAAOD,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgB3lF,GAAG,CAACyI,IAAD,CAAnB,EAA2BzQ,GAAG,CAACyQ,IAAD,CAA9B,CAAV;AACD;;AAEM,SAASm9L,MAAT,CAAgBR,MAAhB,EAAwBz/G,KAAxB,EAA+Bz/C,QAA/B,EAAyC;AAC9C,SAAOi/J,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBl/E,GAAG,CAACy/B,QAAD,CAAnB,EAA+Bz/B,GAAG,CAAC,IAAEy/B,QAAH,CAAlC,CAAV;AACD;;AAEM,SAAS2/J,SAAT,CAAmBT,MAAnB,EAA2Bz/G,KAA3B,EAAkCiqC,QAAlC,EAA4C;AACjD,SAAOu1E,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBs/G,MAAM,CAACr1E,QAAD,CAAtB,EAAkCs1E,MAAM,CAACt1E,QAAD,CAAxC,CAAV;AACD;;AAED,SAASk2E,IAAT,CAAcV,MAAd,EAAsBW,MAAtB,EAA8BlgM,KAA9B,EAAqCw/L,IAArC,EAA2CC,MAA3C,EAAmD;AACjD,MAAIC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAb;AAAA,MACIjsI,EAAE,GAAGksI,IAAI,CAAC,mBAAKD,MAAL,CAAD,CADb;AAAA,MAEIY,EAAE,GAAGD,MAAM,IAAI,IAAV,GAAiBV,IAAI,CAACU,MAAD,CAArB,GAAgC,CAACR,EAAE,GAAGpsI,EAAN,IAAY,CAFrD;AAIA,SAAO,CACLmsI,MAAM,CAACU,EAAE,GAAG,CAACT,EAAE,GAAGS,EAAN,IAAYngM,KAAlB,CADD,EAELy/L,MAAM,CAACU,EAAE,GAAG,CAAC7sI,EAAE,GAAG6sI,EAAN,IAAYngM,KAAlB,CAFD,CAAP;AAID;;AAEM,SAASogM,UAAT,CAAoBb,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C;AAChD,SAAOigM,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwB6/L,iBAAxB,EAAkCz1E,mBAAlC,CAAX;AACD;;AAEM,SAASi2E,OAAT,CAAiBd,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwC;AAC7C,MAAI4C,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAX;AACA,SAAOU,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwB7F,GAAG,CAACyI,IAAD,CAA3B,EAAmCzQ,GAAG,CAACyQ,IAAD,CAAtC,CAAX;AACD;;AAEM,SAAS09L,OAAT,CAAiBf,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwCqgC,QAAxC,EAAkD;AACvD,SAAO4/J,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBY,GAAG,CAACy/B,QAAD,CAA3B,EAAuCz/B,GAAG,CAAC,IAAEy/B,QAAH,CAA1C,CAAX;AACD;;AAEM,SAASkgK,UAAT,CAAoBhB,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C+pH,QAA3C,EAAqD;AAC1D,SAAOk2E,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBo/L,MAAM,CAACr1E,QAAD,CAA9B,EAA0Cs1E,MAAM,CAACt1E,QAAD,CAAhD,CAAX;AACD;;;;;;;;;;AChFM,SAASy2E,OAAT,CAAiBC,IAAjB,EAAuB;AAC5B,SAAO,IAAI,CAAC,EAAE,IAAIxgI,IAAJ,CAASwgI,IAAT,EAAeC,QAAf,KAA4B,CAA9B,CAAZ;AACD;;AAEM,SAASC,UAAT,CAAoBF,IAApB,EAA0B;AAC/B,SAAO,IAAI,CAAC,EAAE,IAAIxgI,IAAJ,CAASwgI,IAAT,EAAeG,WAAf,KAA+B,CAAjC,CAAZ;AACD;;;;;;;;;ACND;;;;AAEe,kBAAS9vL,CAAT,EAAY;AACzB,SAAOA,CAAC,IAAI,IAAL,GAAa,sBAAQA,CAAR,IAAaA,CAAb,GAAiB,CAACA,CAAD,CAA9B,GAAqC,EAA5C;AACD;;;;;;;;;ACJD;AACA;AACA;AACA;AACA;AACA;AACA;AACe,kBAAS6a,KAAT,EAAgBt7B,GAAhB,EAAqBE,GAArB,EAA0B;AACvC,MAAIswM,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CAAd;AAAA,MACIm1K,EAAE,GAAGn1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIo1K,IAFJ;;AAIA,MAAID,EAAE,GAAGD,EAAT,EAAa;AACXE,IAAAA,IAAI,GAAGD,EAAP;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGE,IAAL;AACD;;AACDA,EAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AAEA,SAAOE,IAAI,IAAKxwM,GAAG,GAAGF,GAAf,GACH,CAACA,GAAD,EAAME,GAAN,CADG,GAEH,CACGswM,EAAE,GAAG3wM,IAAI,CAACG,GAAL,CAASH,IAAI,CAACK,GAAL,CAASswM,EAAT,EAAaxwM,GAAb,CAAT,EAA4BE,GAAG,GAAGwwM,IAAlC,CADR,EAEEF,EAAE,GAAGE,IAFP,CAFJ;AAMD;;;;;;;;;ACzBc,kBAASjwL,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,UAApB;AACD;;;;;;;;;ACFD;;AACA;;AACA;;AACA;;;;;;;;AAEA,MAAMkwL,UAAU,GAAG,YAAnB;;AAEe,kBAAS/4J,MAAT,EAAiBg5J,MAAjB,EAAyB7C,GAAzB,EAA8B;AAC3CA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA6C,EAAAA,MAAM,GAAG,oBAAMA,MAAN,KAAiB,EAA1B;AAEA,QAAM3hM,GAAG,GAAG,EAAZ;AAAA,QAAgBrS,GAAG,GAAG,EAAtB;AAAA,QAA0Bi0M,IAAI,GAAG,EAAjC;AAAA,QACMrf,GAAG,GAAGuc,GAAG,CAAC39J,UAAJ,IAAkBA,UAD9B;AAGA,sBAAMwH,MAAN,EAAch6C,OAAd,CAAsB,CAAC6H,CAAD,EAAI3L,CAAJ,KAAU;AAC9B,QAAI2L,CAAC,IAAI,IAAT,EAAe;AACfwJ,IAAAA,GAAG,CAAClV,IAAJ,CAAS62M,MAAM,CAAC92M,CAAD,CAAN,KAAc62M,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAAzC;AACA/zM,IAAAA,GAAG,CAAC7C,IAAJ,CAAS0L,CAAC,GAAG,yBAAWA,CAAX,IAAgBA,CAAhB,GAAoB,oBAAMA,CAAN,EAAS,IAAT,EAAesoM,GAAf,CAAjC;AACA,KAAC,8BAAetoM,CAAf,KAAqB,EAAtB,EAA0B7H,OAA1B,CAAkC6iB,CAAC,IAAIowL,IAAI,CAACpwL,CAAD,CAAJ,GAAU,CAAjD;AACD,GALD;AAOA,SAAO7jB,GAAG,CAACxD,MAAJ,KAAe,CAAf,GACH,IADG,GAEH,uBAASo4L,GAAG,CAAC50L,GAAD,EAAMqS,GAAN,CAAZ,EAAwBpS,MAAM,CAACof,IAAP,CAAY40L,IAAZ,CAAxB,CAFJ;AAGD;;AAED,MAAMjP,OAAO,GAAG,CAAC9oH,CAAD,EAAI9sE,CAAJ,KAAU,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAAS8sE,CAAC,IAAI,IAAf,KAAwB9sE,CAAC,IAAI,IAA7B,GAAoC,CAAC,CAArC,GACtB,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAASA,CAAC,IAAI,IAAf,KAAwB8sE,CAAC,IAAI,IAA7B,GAAoC,CAApC,GACA,CAAE9sE,CAAC,GAAGA,CAAC,YAAY4jE,IAAb,GAAoB,CAAC5jE,CAArB,GAAyBA,CAA9B,EAAmC8sE,CAAC,GAAGA,CAAC,YAAYlJ,IAAb,GAAoB,CAACkJ,CAArB,GAAyBA,CAAjE,MAAyEA,CAAzE,IAA8E9sE,CAAC,KAAKA,CAApF,GAAwF,CAAC,CAAzF,GACAA,CAAC,KAAKA,CAAN,IAAW8sE,CAAC,KAAKA,CAAjB,GAAqB,CAArB,GACA,CAJJ;;AAMA,MAAM1oC,UAAU,GAAG,CAACwH,MAAD,EAASg5J,MAAT,KAAoBh5J,MAAM,CAACx+C,MAAP,KAAkB,CAAlB,GACnC03M,QAAQ,CAACl5J,MAAM,CAAC,CAAD,CAAP,EAAYg5J,MAAM,CAAC,CAAD,CAAlB,CAD2B,GAEnCG,QAAQ,CAACn5J,MAAD,EAASg5J,MAAT,EAAiBh5J,MAAM,CAACx+C,MAAxB,CAFZ;;AAIA,MAAM03M,QAAQ,GAAG,CAACxhF,KAAD,EAAQ0hF,KAAR,KAAkB,UAAShwM,CAAT,EAAY6G,CAAZ,EAAe;AAChD,SAAO+5L,OAAO,CAACtyE,KAAK,CAACtuH,CAAD,CAAN,EAAWsuH,KAAK,CAACznH,CAAD,CAAhB,CAAP,GAA8BmpM,KAArC;AACD,CAFD;;AAIA,MAAMD,QAAQ,GAAG,CAACn5J,MAAD,EAASg5J,MAAT,EAAiB5oM,CAAjB,KAAuB;AACtC4oM,EAAAA,MAAM,CAAC72M,IAAP,CAAY,CAAZ,EADsC,CACtB;;AAChB,SAAO,UAASiH,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIpC,CAAJ;AAAA,QAAOc,CAAC,GAAG,CAAX;AAAA,QAAczM,CAAC,GAAG,CAAC,CAAnB;;AACA,WAAOyM,CAAC,KAAK,CAAN,IAAW,EAAEzM,CAAF,GAAMkO,CAAxB,EAA2B;AACzBvC,MAAAA,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAV;AACAyM,MAAAA,CAAC,GAAGq7L,OAAO,CAACn8L,CAAC,CAACzE,CAAD,CAAF,EAAOyE,CAAC,CAACoC,CAAD,CAAR,CAAX;AACD;;AACD,WAAOtB,CAAC,GAAGqqM,MAAM,CAAC92M,CAAD,CAAjB;AACD,GAPD;AAQD,CAVD;;;;;;;;;ACxCA;;;;AAEe,kBAAS2mB,CAAT,EAAY;AACzB,SAAO,yBAAWA,CAAX,IAAgBA,CAAhB,GAAoB,YAAW;AAAE,WAAOA,CAAP;AAAW,GAAnD;AACD;;;;;;;;;ACJc,kBAASwwL,KAAT,EAAgBz6F,OAAhB,EAAyB;AACtC,MAAI06F,GAAJ,EAASC,GAAT;;AAEA,WAASzgI,QAAT,GAAoB;AAClB8lC,IAAAA,OAAO,CAAC26F,GAAD,CAAP;AACAD,IAAAA,GAAG,GAAGC,GAAG,GAAG,IAAZ;AACD;;AAED,SAAO,UAAS34M,CAAT,EAAY;AACjB24M,IAAAA,GAAG,GAAG34M,CAAN;AACA,QAAI04M,GAAJ,EAASz4M,YAAY,CAACy4M,GAAD,CAAZ;AACTA,IAAAA,GAAG,GAAG34M,UAAU,CAACm4E,QAAD,EAAWugI,KAAX,CAAhB;AACD,GAJD;AAKD;;;;;;;;;ACbc,kBAASxwL,CAAT,EAAY;AACzB,OAAK,IAAIxgB,CAAJ,EAAOmX,CAAP,EAAUtd,CAAC,GAAC,CAAZ,EAAeN,GAAG,GAACK,SAAS,CAACT,MAAlC,EAA0CU,CAAC,GAACN,GAA5C,EAAiD,EAAEM,CAAnD,EAAsD;AACpDmG,IAAAA,CAAC,GAAGpG,SAAS,CAACC,CAAD,CAAb;;AACA,SAAKsd,CAAL,IAAUnX,CAAV,EAAa;AAAEwgB,MAAAA,CAAC,CAACrJ,CAAD,CAAD,GAAOnX,CAAC,CAACmX,CAAD,CAAR;AAAc;AAC9B;;AACD,SAAOqJ,CAAP;AACD;;;;;;;;;ACND;AACA;AACA;AACA;AACe,kBAASxmB,KAAT,EAAgBwL,CAAhB,EAAmB;AAChC,MAAI3L,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAX;AAAA,MAAcgE,CAAd;AAAA,MAAiBhM,GAAjB;AAAA,MAAsBE,GAAtB;;AAEA,MAAIjG,KAAK,KAAK+N,CAAC,GAAG/N,KAAK,CAACb,MAAf,CAAT,EAAiC;AAC/B,QAAIqM,CAAC,IAAI,IAAT,EAAe;AACb;AACA,WAAKuG,CAAC,GAAG/R,KAAK,CAACH,CAAD,CAAd,EAAmBA,CAAC,GAAGkO,CAAJ,KAAUgE,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA7B,CAAnB,EAAoDA,CAAC,GAAG/R,KAAK,CAAC,EAAEH,CAAH,CAA7D,CAAmE;;AACnEkG,MAAAA,GAAG,GAAGE,GAAG,GAAG8L,CAAZ,CAHa,CAKb;;AACA,aAAOlS,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB;AACfkS,QAAAA,CAAC,GAAG/R,KAAK,CAACH,CAAD,CAAT,CADe,CAEf;;AACA,YAAIkS,CAAC,IAAI,IAAT,EAAe;AACb,cAAIA,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,cAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACd;AACF;AACF,KAdD,MAcO;AACL;AACA,WAAKA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,CAAV,EAAsBA,CAAC,GAAGkO,CAAJ,KAAUgE,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA7B,CAAtB,EAAuDA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAAC,EAAEH,CAAH,CAAN,CAA5D,CAAyE;;AACzEkG,MAAAA,GAAG,GAAGE,GAAG,GAAG8L,CAAZ,CAHK,CAKL;;AACA,aAAOlS,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB;AACfkS,QAAAA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,CAAL,CADe,CAEf;;AACA,YAAIkS,CAAC,IAAI,IAAT,EAAe;AACb,cAAIA,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,cAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACd;AACF;AACF;AACF;;AAED,SAAO,CAAChM,GAAD,EAAME,GAAN,CAAP;AACD;;;;;;;;;ACxCc,kBAASjG,KAAT,EAAgBwL,CAAhB,EAAmB;AAChC,MAAI3L,CAAC,GAAG,CAAC,CAAT;AAAA,MACIkO,CAAC,GAAG/N,KAAK,CAACb,MADd;AAAA,MAEI4H,CAFJ;AAAA,MAEO6G,CAFP;AAAA,MAEUtB,CAFV;AAAA,MAEauyE,CAFb;AAAA,MAEgB9sE,CAFhB;;AAIA,MAAIvG,CAAC,IAAI,IAAT,EAAe;AACb,WAAO,EAAE3L,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAG5N,KAAK,CAACH,CAAD,CAAT;;AACA,UAAI+N,CAAC,IAAI,IAAL,IAAaA,CAAC,IAAIA,CAAtB,EAAyB;AACvB7G,QAAAA,CAAC,GAAGuF,CAAC,GAAGsB,CAAR;AACA;AACD;AACF;;AACD,QAAI/N,CAAC,KAAKkO,CAAV,EAAa,OAAO,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,CAAP;AACb8wE,IAAAA,CAAC,GAAG9sE,CAAC,GAAGlS,CAAR;;AACA,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAG5N,KAAK,CAACH,CAAD,CAAT;;AACA,UAAI+N,CAAC,IAAI,IAAT,EAAe;AACb,YAAI7G,CAAC,GAAG6G,CAAR,EAAW;AACT7G,UAAAA,CAAC,GAAG6G,CAAJ;AACAixE,UAAAA,CAAC,GAAGh/E,CAAJ;AACD;;AACD,YAAIyM,CAAC,GAAGsB,CAAR,EAAW;AACTtB,UAAAA,CAAC,GAAGsB,CAAJ;AACAmE,UAAAA,CAAC,GAAGlS,CAAJ;AACD;AACF;AACF;AACF,GAvBD,MAuBO;AACL,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAGpC,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,EAAWA,CAAX,EAAcG,KAAd,CAAL;;AACA,UAAI4N,CAAC,IAAI,IAAL,IAAaA,CAAC,IAAIA,CAAtB,EAAyB;AACvB7G,QAAAA,CAAC,GAAGuF,CAAC,GAAGsB,CAAR;AACA;AACD;AACF;;AACD,QAAI/N,CAAC,KAAKkO,CAAV,EAAa,OAAO,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,CAAP;AACb8wE,IAAAA,CAAC,GAAG9sE,CAAC,GAAGlS,CAAR;;AACA,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAGpC,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,EAAWA,CAAX,EAAcG,KAAd,CAAL;;AACA,UAAI4N,CAAC,IAAI,IAAT,EAAe;AACb,YAAI7G,CAAC,GAAG6G,CAAR,EAAW;AACT7G,UAAAA,CAAC,GAAG6G,CAAJ;AACAixE,UAAAA,CAAC,GAAGh/E,CAAJ;AACD;;AACD,YAAIyM,CAAC,GAAGsB,CAAR,EAAW;AACTtB,UAAAA,CAAC,GAAGsB,CAAJ;AACAmE,UAAAA,CAAC,GAAGlS,CAAJ;AACD;AACF;AACF;AACF;;AAED,SAAO,CAACg/E,CAAD,EAAI9sE,CAAJ,CAAP;AACD;;;;;;;;ACtDD,MAAMolM,GAAG,GAAGv0M,MAAM,CAAC3C,SAAP,CAAiBu2H,cAA7B;;AAEe,kBAAS0wE,MAAT,EAAiBkQ,QAAjB,EAA2B;AACxC,SAAOD,GAAG,CAACx4M,IAAJ,CAASuoM,MAAT,EAAiBkQ,QAAjB,CAAP;AACD;;;;;;;;;ACJD;;;;AAEA,IAAIC,IAAI,GAAG,EAAX;;AAEe,kBAASxsL,KAAT,EAAgB;AAC7B,MAAIvK,GAAG,GAAG,EAAV;AAAA,MACIhX,GADJ;AAAA,MAEIkkB,IAFJ;;AAIA,WAASroB,GAAT,CAAarB,GAAb,EAAkB;AAChB,WAAO,6BAAewc,GAAf,EAAoBxc,GAApB,KAA4Bwc,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAAhD;AACD;;AAED/tM,EAAAA,GAAG,GAAG;AACJhC,IAAAA,IAAI,EAAE,CADF;AAEJ0sM,IAAAA,KAAK,EAAE,CAFH;AAGJ9M,IAAAA,MAAM,EAAE5mL,GAHJ;AAIJnb,IAAAA,GAAG,EAAEA,GAJD;;AAKJxC,IAAAA,GAAG,CAACmB,GAAD,EAAM;AACP,aAAOqB,GAAG,CAACrB,GAAD,CAAH,GAAWwc,GAAG,CAACxc,GAAD,CAAd,GAAsBixH,SAA7B;AACD,KAPG;;AAQJvyH,IAAAA,GAAG,CAACsB,GAAD,EAAMjB,KAAN,EAAa;AACd,UAAI,CAACsC,GAAG,CAACrB,GAAD,CAAR,EAAe;AACb,UAAEwF,GAAG,CAAChC,IAAN;AACA,YAAIgZ,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAAjB,EAAuB,EAAE/tM,GAAG,CAAC0qM,KAAN;AACxB;;AACD1zL,MAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWjB,KAAX;AACA,aAAO,IAAP;AACD,KAfG;;AAgBJyC,IAAAA,MAAM,CAACxB,GAAD,EAAM;AACV,UAAIqB,GAAG,CAACrB,GAAD,CAAP,EAAc;AACZ,UAAEwF,GAAG,CAAChC,IAAN;AACA,UAAEgC,GAAG,CAAC0qM,KAAN;AACA1zL,QAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWuzM,IAAX;AACD;;AACD,aAAO,IAAP;AACD,KAvBG;;AAwBJC,IAAAA,KAAK,GAAG;AACNhuM,MAAAA,GAAG,CAAChC,IAAJ,GAAWgC,GAAG,CAAC0qM,KAAJ,GAAY,CAAvB;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAa5mL,GAAG,GAAG,EAAnB;AACD,KA3BG;;AA4BJkN,IAAAA,IAAI,CAAChH,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBquB,QAAAA,IAAI,GAAGhH,CAAP;AACA,eAAOld,GAAP;AACD,OAHD,MAGO;AACL,eAAOkkB,IAAP;AACD;AACF,KAnCG;;AAoCJ09K,IAAAA,KAAK,GAAG;AACN,UAAI32H,IAAI,GAAG,EAAX;AAAA,UACIjtE,IAAI,GAAG,CADX;AAAA,UAEIxD,GAFJ;AAAA,UAESjB,KAFT;;AAGA,WAAKiB,GAAL,IAAYwc,GAAZ,EAAiB;AACfzd,QAAAA,KAAK,GAAGyd,GAAG,CAACxc,GAAD,CAAX;;AACA,YAAIjB,KAAK,KAAKw0M,IAAV,KAAmB,CAAC7pL,IAAD,IAAS,CAACA,IAAI,CAAC3qB,KAAD,CAAjC,CAAJ,EAA+C;AAC7C0xE,UAAAA,IAAI,CAACzwE,GAAD,CAAJ,GAAYjB,KAAZ;AACA,YAAEyE,IAAF;AACD;AACF;;AACDgC,MAAAA,GAAG,CAAChC,IAAJ,GAAWA,IAAX;AACAgC,MAAAA,GAAG,CAAC0qM,KAAJ,GAAY,CAAZ;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAc5mL,GAAG,GAAGi0D,IAApB;AACD;;AAlDG,GAAN;AAqDA,MAAI1pD,KAAJ,EAAWjoB,MAAM,CAACof,IAAP,CAAY6I,KAAZ,EAAmBlnB,OAAnB,CAA2B,UAASG,GAAT,EAAc;AAClDwF,IAAAA,GAAG,CAAC9G,GAAJ,CAAQsB,GAAR,EAAa+mB,KAAK,CAAC/mB,GAAD,CAAlB;AACD,GAFU;AAIX,SAAOwF,GAAP;AACD;;;;;;;;;ACvED;;;;AAEe,kBAAS+3B,KAAT,EAAgBx+B,KAAhB,EAAuBo/F,SAAvB,EAAkCjvD,IAAlC,EAAwCC,KAAxC,EAA+C8sH,MAA/C,EAAuD;AACpE,MAAI,CAAC99D,SAAD,IAAcA,SAAS,KAAK,CAAhC,EAAmC,OAAO89D,MAAP;AAEnC,MAAIh5J,CAAC,GAAGs6B,KAAK,CAAC,CAAD,CAAb;AAAA,MACIzzB,CAAC,GAAG,mBAAKyzB,KAAL,CADR;AAAA,MAEI99B,CAAC,GAAG,CAAC0+F,SAFT;AAAA,MAGItwF,CAHJ;AAAA,MAGO9D,CAHP,CAHoE,CAQpE;;AACA,MAAID,CAAC,GAAG7G,CAAR,EAAW;AACT4K,IAAAA,CAAC,GAAG5K,CAAJ;AAAOA,IAAAA,CAAC,GAAG6G,CAAJ;AAAOA,IAAAA,CAAC,GAAG+D,CAAJ;AACf,GAXmE,CAapE;;;AACAA,EAAAA,CAAC,GAAG/L,IAAI,CAACiT,GAAL,CAAShW,KAAK,GAAGkE,CAAjB,CAAJ;AACA8G,EAAAA,CAAC,GAAGjI,IAAI,CAACiT,GAAL,CAASjL,CAAC,GAAG/K,KAAb,CAAJ,CAfoE,CAiBpE;;AACA,SAAO8O,CAAC,GAAG9D,CAAJ,IAAS8D,CAAC,IAAIpO,CAAd,GAAkByvC,IAAlB,GAAyBnlC,CAAC,IAAItK,CAAL,GAAS0vC,KAAT,GAAiB8sH,MAAjD;AACD;;;;;;;;;ACrBc,kBAASyhB,KAAT,EAAgB+1B,MAAhB,EAAwB;AACrC,MAAIC,KAAK,GAAIh2B,KAAK,CAACvhL,SAAN,GAAkB2C,MAAM,CAAC60L,MAAP,CAAc8f,MAAM,CAACt3M,SAArB,CAA/B;AACAu3M,EAAAA,KAAK,CAAC/rM,WAAN,GAAoB+1K,KAApB;AACA,SAAOg2B,KAAP;AACD;;;;;;;;;ACJD;AACA;AACA;AACA;AACA;AACe,kBAAS30M,KAAT,EAAgBw+B,KAAhB,EAAuB2R,IAAvB,EAA6BC,KAA7B,EAAoC;AACjD,MAAIwkK,EAAE,GAAGp2K,KAAK,CAAC,CAAD,CAAd;AAAA,MAAmB4wK,EAAE,GAAG5wK,KAAK,CAACA,KAAK,CAACliC,MAAN,GAAa,CAAd,CAA7B;AAAA,MAA+CoE,CAA/C;;AACA,MAAIk0M,EAAE,GAAGxF,EAAT,EAAa;AACX1uM,IAAAA,CAAC,GAAGk0M,EAAJ;AACAA,IAAAA,EAAE,GAAGxF,EAAL;AACAA,IAAAA,EAAE,GAAG1uM,CAAL;AACD;;AACDyvC,EAAAA,IAAI,GAAGA,IAAI,KAAK+hF,SAAT,IAAsB/hF,IAA7B;AACAC,EAAAA,KAAK,GAAGA,KAAK,KAAK8hF,SAAV,IAAuB9hF,KAA/B;AAEA,SAAO,CAACD,IAAI,GAAGykK,EAAE,IAAI50M,KAAT,GAAiB40M,EAAE,GAAG50M,KAA3B,MACJowC,KAAK,GAAGpwC,KAAK,IAAIovM,EAAZ,GAAiBpvM,KAAK,GAAGovM,EAD1B,CAAP;AAED;;;;;;;;;ACjBc,kBAASzrL,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,SAApB;AACD;;;;;;;;;ACFc,kBAASA,CAAT,EAAY;AACzB,SAAO5jB,MAAM,CAAC3C,SAAP,CAAiBuP,QAAjB,CAA0B7Q,IAA1B,CAA+B6nB,CAA/B,MAAsC,eAA7C;AACD;;;;;;;;;ACFc,kBAASA,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,QAApB;AACD;;;;;;;;;ACFc,kBAASA,CAAT,EAAY;AACzB,SAAO5jB,MAAM,CAAC3C,SAAP,CAAiBuP,QAAjB,CAA0B7Q,IAA1B,CAA+B6nB,CAA/B,MAAsC,iBAA7C;AACD;;;;;;;;;ACFc,kBAASA,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,QAApB;AACD;;;;;;;;;ACFD;;AACA;;AACA;;AACA;;;;AAEe,kBAASm3B,MAAT,EAAiB+5J,IAAjB,EAAuB5D,GAAvB,EAA4B;AACzC,MAAIn2J,MAAJ,EAAY;AACVA,IAAAA,MAAM,GAAG+5J,IAAI,GACT,oBAAM/5J,MAAN,EAAcr0C,GAAd,CAAkBkC,CAAC,IAAIA,CAAC,CAACpI,OAAF,CAAU,QAAV,EAAoB,IAApB,CAAvB,CADS,GAET,oBAAMu6C,MAAN,CAFJ;AAGD;;AAED,QAAMp+C,GAAG,GAAGo+C,MAAM,IAAIA,MAAM,CAACx+C,MAA7B;AAAA,QACMo4L,GAAG,GAAGuc,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,eAD9B;AAAA,QAEMzqM,GAAG,GAAGkC,CAAC,IAAI+rL,GAAG,CAACmgB,IAAI,GAAG,CAAClsM,CAAD,CAAH,GAAS,8BAAgBA,CAAhB,CAAd,CAFpB;;AAGA,MAAIsY,EAAJ;;AAEA,MAAI,CAACvkB,GAAL,EAAU;AACRukB,IAAAA,EAAE,GAAG,YAAW;AAAE,aAAO,EAAP;AAAY,KAA9B;AACD,GAFD,MAEO,IAAIvkB,GAAG,KAAK,CAAZ,EAAe;AACpB,UAAMoD,GAAG,GAAG2G,GAAG,CAACq0C,MAAM,CAAC,CAAD,CAAP,CAAf;;AACA75B,IAAAA,EAAE,GAAG,UAAS0C,CAAT,EAAY;AAAE,aAAO,KAAK7jB,GAAG,CAAC6jB,CAAD,CAAf;AAAqB,KAAxC;AACD,GAHM,MAGA;AACL,UAAM7jB,GAAG,GAAGg7C,MAAM,CAACr0C,GAAP,CAAWA,GAAX,CAAZ;;AACAwa,IAAAA,EAAE,GAAG,UAAS0C,CAAT,EAAY;AACf,UAAInjB,CAAC,GAAG,KAAKV,GAAG,CAAC,CAAD,CAAH,CAAO6jB,CAAP,CAAb;AAAA,UAAwB3mB,CAAC,GAAG,CAA5B;;AACA,aAAO,EAAEA,CAAF,GAAMN,GAAb,EAAkB8D,CAAC,IAAI,MAAMV,GAAG,CAAC9C,CAAD,CAAH,CAAO2mB,CAAP,CAAX;;AAClB,aAAOnjB,CAAP;AACD,KAJD;AAKD;;AAED,SAAO,uBAASygB,EAAT,EAAa65B,MAAb,EAAqB,KAArB,CAAP;AACD;;;;;;;;;AChCD;;;;AAEe,kBAAS39C,KAAT,EAAgB23M,IAAhB,EAAsB;AACnC,QAAMpB,EAAE,GAAGv2M,KAAK,CAAC,CAAD,CAAhB;AAAA,QACMw2M,EAAE,GAAG,mBAAKx2M,KAAL,CADX;AAAA,QAEMwL,CAAC,GAAG,CAACmsM,IAFX;AAGA,SAAO,CAACnsM,CAAD,GAAK+qM,EAAL,GAAU/qM,CAAC,KAAK,CAAN,GAAUgrM,EAAV,GAAeD,EAAE,GAAG/qM,CAAC,IAAIgrM,EAAE,GAAGD,EAAT,CAAtC;AACD;;;;;;;;;ACPD;;;;AAEA,MAAMqB,gBAAgB,GAAG,KAAzB,EAEA;;AACe,kBAASC,OAAT,EAAkB;AAC/BA,EAAAA,OAAO,GAAG,CAACA,OAAD,IAAYD,gBAAtB;AAEA,MAAI/iC,IAAJ,EAAU77E,IAAV,EAAgB1xF,IAAhB;;AAEA,QAAMgwM,KAAK,GAAG,MAAM;AAClBziC,IAAAA,IAAI,GAAG,EAAP;AACA77E,IAAAA,IAAI,GAAG,EAAP;AACA1xF,IAAAA,IAAI,GAAG,CAAP;AACD,GAJD;;AAMA,QAAMynF,MAAM,GAAG,CAACjrF,GAAD,EAAMjB,KAAN,KAAgB;AAC7B,QAAI,EAAEyE,IAAF,GAASuwM,OAAb,EAAsB;AACpB7+G,MAAAA,IAAI,GAAG67E,IAAP;AACAA,MAAAA,IAAI,GAAG,EAAP;AACAvtK,MAAAA,IAAI,GAAG,CAAP;AACD;;AACD,WAAQutK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KAApB;AACD,GAPD;;AASAy0M,EAAAA,KAAK;AAEL,SAAO;AACLA,IAAAA,KADK;AAELnyM,IAAAA,GAAG,EAAErB,GAAG,IAAI,6BAAI+wK,IAAJ,EAAU/wK,GAAV,KAAkB,6BAAIk1F,IAAJ,EAAUl1F,GAAV,CAFzB;AAGLnB,IAAAA,GAAG,EAAEmB,GAAG,IAAI,6BAAI+wK,IAAJ,EAAU/wK,GAAV,IAAiB+wK,IAAI,CAAC/wK,GAAD,CAArB,GACN,6BAAIk1F,IAAJ,EAAUl1F,GAAV,IAAiBirF,MAAM,CAACjrF,GAAD,EAAMk1F,IAAI,CAACl1F,GAAD,CAAV,CAAvB,GACAixH,SALD;AAMLvyH,IAAAA,GAAG,EAAE,CAACsB,GAAD,EAAMjB,KAAN,KAAgB,6BAAIgyK,IAAJ,EAAU/wK,GAAV,IACd+wK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KADE,GAEfksF,MAAM,CAACjrF,GAAD,EAAMjB,KAAN;AARP,GAAP;AAUD;;;;;;;;;ACrCc,kBAAS8kM,OAAT,EAAkBmQ,MAAlB,EAA0BC,MAA1B,EAAkCxuL,MAAlC,EAA0C;AACvD,MAAIyuL,EAAE,GAAGF,MAAM,CAAC34M,MAAhB;AAAA,MACIoI,EAAE,GAAGwwM,MAAM,CAAC54M,MADhB;AAGA,MAAI,CAACoI,EAAL,EAAS,OAAOuwM,MAAP;AACT,MAAI,CAACE,EAAL,EAAS,OAAOD,MAAP;AAET,MAAIE,MAAM,GAAG1uL,MAAM,IAAI,IAAIuuL,MAAM,CAACrsM,WAAX,CAAuBusM,EAAE,GAAGzwM,EAA5B,CAAvB;AAAA,MACIg5F,EAAE,GAAG,CADT;AAAA,MACY23G,EAAE,GAAG,CADjB;AAAA,MACoBr4M,CAAC,GAAG,CADxB;;AAGA,SAAO0gG,EAAE,GAACy3G,EAAH,IAASE,EAAE,GAAC3wM,EAAnB,EAAuB,EAAE1H,CAAzB,EAA4B;AAC1Bo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAY8nM,OAAO,CAACmQ,MAAM,CAACv3G,EAAD,CAAP,EAAaw3G,MAAM,CAACG,EAAD,CAAnB,CAAP,GAAkC,CAAlC,GACPH,MAAM,CAACG,EAAE,EAAH,CADC,GAEPJ,MAAM,CAACv3G,EAAE,EAAH,CAFX;AAGD;;AAED,SAAOA,EAAE,GAACy3G,EAAV,EAAc,EAAEz3G,EAAF,EAAM,EAAE1gG,CAAtB,EAAyB;AACvBo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAYi4M,MAAM,CAACv3G,EAAD,CAAlB;AACD;;AAED,SAAO23G,EAAE,GAAC3wM,EAAV,EAAc,EAAE2wM,EAAF,EAAM,EAAEr4M,CAAtB,EAAyB;AACvBo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAYk4M,MAAM,CAACG,EAAD,CAAlB;AACD;;AAED,SAAOD,MAAP;AACD;;;;;;;;;ACzBc,kBAASv9F,GAAT,EAAc/qE,IAAd,EAAoB;AACjC,MAAItsC,CAAC,GAAG,EAAR;;AACA,SAAO,EAAEssC,IAAF,IAAU,CAAjB,EAAoBtsC,CAAC,IAAIq3G,GAAL;;AACpB,SAAOr3G,CAAP;AACD;;;;;;;;;ACJD;;;;AAEe,kBAASq3G,GAAT,EAAcv7G,MAAd,EAAsBg5M,OAAtB,EAA+BC,KAA/B,EAAsC;AACnD,MAAI9rM,CAAC,GAAG6rM,OAAO,IAAI,GAAnB;AAAA,MACI90M,CAAC,GAAGq3G,GAAG,GAAG,EADd;AAAA,MAEI3sG,CAAC,GAAG5O,MAAM,GAAGkE,CAAC,CAAClE,MAFnB;AAIA,SAAO4O,CAAC,IAAI,CAAL,GAAS1K,CAAT,GACH+0M,KAAK,KAAK,MAAV,GAAmB,qBAAO9rM,CAAP,EAAUyB,CAAV,IAAe1K,CAAlC,GACA+0M,KAAK,KAAK,QAAV,GAAqB,qBAAO9rM,CAAP,EAAU,CAAC,EAAEyB,CAAC,GAAC,CAAJ,CAAX,IAAqB1K,CAArB,GAAyB,qBAAOiJ,CAAP,EAAU1G,IAAI,CAACoC,IAAL,CAAU+F,CAAC,GAAC,CAAZ,CAAV,CAA9C,GACA1K,CAAC,GAAG,qBAAOiJ,CAAP,EAAUyB,CAAV,CAHR;AAID;;;;;;;;;ACXD;;;;AAEA;AACA;AACA;AACA;AACe,kBAAS/N,KAAT,EAAgB;AAC7B,SAAOA,KAAK,IAAK,mBAAKA,KAAL,IAAcA,KAAK,CAAC,CAAD,CAA7B,IAAqC,CAA5C;AACD;;;;;;;;;ACRD;;AACA;;AACA;;;;AAEe,SAASq4M,CAAT,CAAWryM,CAAX,EAAc;AAC3B,SAAO,sBAAQA,CAAR,IAAa,MAAMA,CAAC,CAACsD,GAAF,CAAM+uM,CAAN,CAAN,GAAiB,GAA9B,GACH,uBAASryM,CAAT,KAAe,uBAASA,CAAT,CAAf,GACA;AACA;AACA87C,EAAAA,IAAI,CAACE,SAAL,CAAeh8C,CAAf,EAAkB5C,OAAlB,CAA0B,QAA1B,EAAmC,SAAnC,EAA8CA,OAA9C,CAAsD,QAAtD,EAAgE,SAAhE,CAHA,GAIA4C,CALJ;AAMD;;;;;;;;;ACXc,kBAASwgB,CAAT,EAAY;AACzB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B,CAACA,CAAD,IAAMA,CAAC,KAAK,OAAZ,IAAuBA,CAAC,KAAK,GAA7B,GAAmC,KAAnC,GAA2C,CAAC,CAACA,CAAnF;AACD;;;;;;;;;ACFD;;AACA;;;;AAEA,SAAS8xL,aAAT,CAAuB9xL,CAAvB,EAA0B;AACxB,SAAO,uBAASA,CAAT,IAAcA,CAAd,GAAkB,qBAAOA,CAAP,IAAYA,CAAZ,GAAgBmvD,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAzC;AACD;;AAEc,kBAASA,CAAT,EAAY+xL,MAAZ,EAAoB;AACjCA,EAAAA,MAAM,GAAGA,MAAM,IAAID,aAAnB;AACA,SAAO9xL,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B+xL,MAAM,CAAC/xL,CAAD,CAA5C;AACD;;;;;;;;;ACVc,kBAASA,CAAT,EAAY;AACzB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+BA,CAAC,GAAG,EAA1C;AACD;;;;;;;;;ACFc,kBAASA,CAAT,EAAY;AACzB,OAAK,IAAInjB,CAAC,GAAC,EAAN,EAAUxD,CAAC,GAAC,CAAZ,EAAekO,CAAC,GAACyY,CAAC,CAACrnB,MAAxB,EAAgCU,CAAC,GAACkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0CwD,CAAC,CAACmjB,CAAC,CAAC3mB,CAAD,CAAF,CAAD,GAAU,IAAV;;AAC1C,SAAOwD,CAAP;AACD;;;;;;;;;ACHc,kBAASq3G,GAAT,EAAcv7G,MAAd,EAAsBi5M,KAAtB,EAA6BI,QAA7B,EAAuC;AACpD,MAAIj6M,CAAC,GAAGi6M,QAAQ,IAAI,IAAZ,GAAmBA,QAAnB,GAA8B,QAAtC;AAAA,MACIn1M,CAAC,GAAGq3G,GAAG,GAAG,EADd;AAAA,MAEI3sG,CAAC,GAAG1K,CAAC,CAAClE,MAFV;AAAA,MAGIwS,CAAC,GAAG/L,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY9G,MAAM,GAAGZ,CAAC,CAACY,MAAvB,CAHR;AAKA,SAAO4O,CAAC,IAAI5O,MAAL,GAAckE,CAAd,GACH+0M,KAAK,KAAK,MAAV,GAAmB75M,CAAC,GAAG8E,CAAC,CAAC6F,KAAF,CAAQ6E,CAAC,GAAG4D,CAAZ,CAAvB,GACAymM,KAAK,KAAK,QAAV,GAAqB/0M,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWtD,IAAI,CAACoC,IAAL,CAAU2J,CAAC,GAAC,CAAZ,CAAX,IAA6BpT,CAA7B,GAAiC8E,CAAC,CAAC6F,KAAF,CAAQ6E,CAAC,GAAG,CAAC,EAAE4D,CAAC,GAAC,CAAJ,CAAb,CAAtD,GACAtO,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWyI,CAAX,IAAgBpT,CAHpB;AAID;;;;;;;;;ACVc,kBAASyB,KAAT,EAAgBgb,MAAhB,EAAwBy9L,OAAxB,EAAiC;AAC9C,MAAIz4M,KAAJ,EAAW;AACT,QAAIgb,MAAJ,EAAY;AACV,UAAInb,CAAC,GAAG,CAAR;AAAA,UAAWkO,CAAC,GAAG/N,KAAK,CAACb,MAArB;AAAA,UAA6BoE,CAA7B;;AACA,aAAO1D,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB;AACf,YAAI0D,CAAC,GAAGyX,MAAM,CAAChb,KAAK,CAACH,CAAD,CAAN,CAAd,EAA0B44M,OAAO,CAACl1M,CAAD,EAAI1D,CAAJ,EAAOG,KAAP,CAAP;AAC3B;AACF,KALD,MAKO;AACLA,MAAAA,KAAK,CAAC2D,OAAN,CAAc80M,OAAd;AACD;AACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXD;;AAMA;;AASA;;AASA;;AAKA;;AAWA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA,SAASC,QAAT,CAAmB50L,EAAnB,EAAuB65B,MAAvB,EAA+Bv8C,IAA/B,EAAqC;AACnC0iB,EAAAA,EAAE,CAAC65B,MAAH,GAAYA,MAAM,IAAI,EAAtB;AACA75B,EAAAA,EAAE,CAAC2vL,KAAH,GAAWryM,IAAX;AACA,SAAO0iB,EAAP;AACD;;AACD,SAAS4vL,YAAT,CAAsB5vL,EAAtB,EAA0B;AACxB,SAAOA,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoBA,EAAE,CAAC2vL,KAA9B;AACD;;AACD,SAASE,cAAT,CAAwB7vL,EAAxB,EAA4B;AAC1B,SAAOA,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoBA,EAAE,CAAC65B,MAA9B;AACD;;AAED,SAASo2J,MAAT,CAAiB7lM,IAAjB,EAAuB;AACrB,SAAOA,IAAI,CAAC/O,MAAL,KAAgB,CAAhB,GAAoBy0M,IAAI,CAAC1lM,IAAI,CAAC,CAAD,CAAL,CAAxB,GAAoC2lM,IAAI,CAAC3lM,IAAD,CAA/C;AACD;;AAED,MAAM0lM,IAAI,GAAGv+E,KAAK,IAAI,UAAU/0G,GAAV,EAAe;AACnC,SAAOA,GAAG,CAAC+0G,KAAD,CAAV;AACD,CAFD;;AAIA,MAAMw+E,IAAI,GAAG3lM,IAAI,IAAI;AACnB,QAAM3O,GAAG,GAAG2O,IAAI,CAAC/O,MAAjB;AACA,SAAO,UAAUmhB,GAAV,EAAe;AACpB,SAAK,IAAIzgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,GAApB,EAAyB,EAAEM,CAA3B,EAA8B;AAC5BygB,MAAAA,GAAG,GAAGA,GAAG,CAACpS,IAAI,CAACrO,CAAD,CAAL,CAAT;AACD;;AAED,WAAOygB,GAAP;AACD,GAND;AAOD,CATD;;AAWA,SAAS4D,KAAT,CAAgBhB,OAAhB,EAAyB;AACvB,QAAM9kB,KAAK,CAAC8kB,OAAD,CAAX;AACD;;AAED,SAASy1L,eAAT,CAA0Bx0K,CAA1B,EAA6B;AAC3B,QAAMj2B,IAAI,GAAG,EAAb;AAAA,QACMH,CAAC,GAAGo2B,CAAC,CAAChlC,MADZ;AAEA,MAAIo4F,CAAC,GAAG,IAAR;AAAA,MACI3pF,CAAC,GAAG,CADR;AAAA,MAEIvK,CAAC,GAAG,EAFR;AAAA,MAGIxD,CAHJ;AAAA,MAIIiK,CAJJ;AAAA,MAKIwC,CALJ;AAMA63B,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR;;AAEA,WAASrkC,IAAT,GAAgB;AACdoO,IAAAA,IAAI,CAACpO,IAAL,CAAUuD,CAAC,GAAG8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAd;AACAzG,IAAAA,CAAC,GAAG,EAAJ;AACAxD,IAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;;AAED,OAAKjK,CAAC,GAAGiK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiE,CAApB,EAAuB,EAAEjE,CAAzB,EAA4B;AAC1BwC,IAAAA,CAAC,GAAG63B,CAAC,CAACr6B,CAAD,CAAL;;AAEA,QAAIwC,CAAC,KAAK,IAAV,EAAgB;AACdjJ,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAL;AACAzG,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY,EAAE70B,CAAd,EAAiB,EAAEA,CAAnB,CAAL;AACAjK,MAAAA,CAAC,GAAGiK,CAAJ;AACD,KAJD,MAIO,IAAIwC,CAAC,KAAKirF,CAAV,EAAa;AAClBz3F,MAAAA,IAAI;AACJy3F,MAAAA,CAAC,GAAG,IAAJ;AACA3pF,MAAAA,CAAC,GAAG,CAAC,CAAL;AACD,KAJM,MAIA,IAAI2pF,CAAJ,EAAO;AACZ;AACD,KAFM,MAEA,IAAI13F,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIzM,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIA,CAAC,KAAK,GAAN,IAAa,CAACsB,CAAlB,EAAqB;AAC1B,UAAI9D,CAAC,GAAGjK,CAAR,EAAW;AACTC,QAAAA,IAAI;AACL,OAFD,MAEO;AACLD,QAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF,KANM,MAMA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAIxC,CAAC,GAAGjK,CAAR,EAAWC,IAAI;AACf8N,MAAAA,CAAC,GAAG/N,CAAC,GAAGiK,CAAC,GAAG,CAAZ;AACD,KAHM,MAGA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAI,CAACsB,CAAL,EAAQsW,KAAK,CAAC,uCAAuCigB,CAAxC,CAAL;AACR,UAAIv2B,CAAC,GAAG,CAAR,EAAW9N,IAAI;AACf8N,MAAAA,CAAC,GAAG,CAAJ;AACA/N,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF;;AAED,MAAI8D,CAAJ,EAAOsW,KAAK,CAAC,0CAA0CigB,CAA3C,CAAL;AACP,MAAIozD,CAAJ,EAAOrzE,KAAK,CAAC,wCAAwCigB,CAAzC,CAAL;;AAEP,MAAIr6B,CAAC,GAAGjK,CAAR,EAAW;AACTiK,IAAAA,CAAC;AACDhK,IAAAA,IAAI;AACL;;AAED,SAAOoO,IAAP;AACD;;AAED,SAASmnH,KAAT,CAAgBA,KAAhB,EAAuBj0H,IAAvB,EAA6B0yM,GAA7B,EAAkC;AAChC,QAAM5lM,IAAI,GAAGyqM,eAAe,CAACtjF,KAAD,CAA5B;AACAA,EAAAA,KAAK,GAAGnnH,IAAI,CAAC/O,MAAL,KAAgB,CAAhB,GAAoB+O,IAAI,CAAC,CAAD,CAAxB,GAA8BmnH,KAAtC;AACA,SAAOqjF,QAAQ,CAAC,CAAC5E,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,MAAnB,EAA2B7lM,IAA3B,CAAD,EAAmC,CAACmnH,KAAD,CAAnC,EAA4Cj0H,IAAI,IAAIi0H,KAApD,CAAf;AACD;;AAED,MAAMviH,EAAE,GAAGuiH,KAAK,CAAC,IAAD,CAAhB;;AACA,MAAMyK,QAAQ,GAAG44E,QAAQ,CAAClyL,CAAC,IAAIA,CAAN,EAAS,EAAT,EAAa,UAAb,CAAzB;;AACA,MAAMivB,IAAI,GAAGijK,QAAQ,CAAC,MAAM,CAAP,EAAU,EAAV,EAAc,MAAd,CAArB;;AACA,MAAM7pH,GAAG,GAAG6pH,QAAQ,CAAC,MAAM,CAAP,EAAU,EAAV,EAAc,KAAd,CAApB;;AACA,MAAMzE,MAAM,GAAGyE,QAAQ,CAAC,MAAM,IAAP,EAAa,EAAb,EAAiB,MAAjB,CAAvB;;AACA,MAAMxE,KAAK,GAAGwE,QAAQ,CAAC,MAAM,KAAP,EAAc,EAAd,EAAkB,OAAlB,CAAtB;;;AAEA,SAAS7oM,GAAT,CAAaihC,MAAb,EAAqBksF,KAArB,EAA4BnyG,KAA5B,EAAmC;AACjC,QAAMnrB,IAAI,GAAG,CAACs9H,KAAD,EAAQ59H,MAAR,CAAe,GAAG8J,KAAH,CAASvK,IAAT,CAAcksB,KAAd,CAAf,CAAb;AACA7oB,EAAAA,OAAO,CAAC8uC,MAAD,CAAP,CAAgB5wC,KAAhB,CAAsB8B,OAAtB,EAA+BtC,IAA/B,EAFiC,CAEK;AACvC;;AAED,MAAMy0M,IAAI,GAAG,CAAb;;AACA,MAAMyE,OAAO,GAAG,CAAhB;;AACA,MAAMxE,IAAI,GAAG,CAAb;;AACA,MAAMC,IAAI,GAAG,CAAb;;AACA,MAAMC,KAAK,GAAG,CAAd;;;AACA,SAAShmM,MAAT,CAAiBkY,CAAjB,EAAoBsqB,MAApB,EAA4B;AAC1B,MAAIksF,KAAK,GAAGx2G,CAAC,IAAI2tL,IAAjB;AACA,SAAO;AACLn3E,IAAAA,KAAK,CAACx2G,CAAD,EAAI;AACP,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB69H,QAAAA,KAAK,GAAG,CAACx2G,CAAT;AACA,eAAO,IAAP;AACD,OAHD,MAGO;AACL,eAAOw2G,KAAP;AACD;AACF,KARI;;AAUL94G,IAAAA,KAAK,GAAG;AACN,UAAI84G,KAAK,IAAI47E,OAAb,EAAsB/oM,GAAG,CAACihC,MAAM,IAAI,OAAX,EAAoB,OAApB,EAA6BlxC,SAA7B,CAAH;AACtB,aAAO,IAAP;AACD,KAbI;;AAeLqC,IAAAA,IAAI,GAAG;AACL,UAAI+6H,KAAK,IAAIo3E,IAAb,EAAmBvkM,GAAG,CAACihC,MAAM,IAAI,MAAX,EAAmB,MAAnB,EAA2BlxC,SAA3B,CAAH;AACnB,aAAO,IAAP;AACD,KAlBI;;AAoBL0jB,IAAAA,IAAI,GAAG;AACL,UAAI05G,KAAK,IAAIq3E,IAAb,EAAmBxkM,GAAG,CAACihC,MAAM,IAAI,KAAX,EAAkB,MAAlB,EAA0BlxC,SAA1B,CAAH;AACnB,aAAO,IAAP;AACD,KAvBI;;AAyBL+yB,IAAAA,KAAK,GAAG;AACN,UAAIqqG,KAAK,IAAIs3E,KAAb,EAAoBzkM,GAAG,CAACihC,MAAM,IAAI,KAAX,EAAkB,OAAlB,EAA2BlxC,SAA3B,CAAH;AACpB,aAAO,IAAP;AACD;;AA5BI,GAAP;AA+BD;;AAED,IAAIsH,OAAO,GAAGvH,KAAK,CAACuH,OAApB;;;AAEA,SAAS2xM,QAAT,CAAmBryL,CAAnB,EAAsB;AACpB,SAAOA,CAAC,KAAK5jB,MAAM,CAAC4jB,CAAD,CAAnB;AACD;;AAED,MAAM+tL,UAAU,GAAGzwM,GAAG,IAAIA,GAAG,KAAK,WAAlC;;AAEA,SAAS0wM,WAAT,CAAqB,GAAGC,OAAxB,EAAiC;AAC/B,SAAOA,OAAO,CAACroM,MAAR,CAAe,CAAC8Z,GAAD,EAAMyvC,MAAN,KAAiB;AACrC,SAAK,MAAM7xD,GAAX,IAAkB6xD,MAAlB,EAA0B;AACxB,UAAI7xD,GAAG,KAAK,SAAZ,EAAuB;AACrB;AACA;AACA;AACAoiB,QAAAA,GAAG,CAACwuL,OAAJ,GAAcC,UAAU,CAACzuL,GAAG,CAACwuL,OAAL,EAAc/+I,MAAM,CAAC++I,OAArB,CAAxB;AACD,OALD,MAKO;AACL;AACA;AACA;AACA;AACA,cAAM7mM,CAAC,GAAG/J,GAAG,KAAK,QAAR,GAAmB;AAC3B8wM,UAAAA,MAAM,EAAE;AADmB,SAAnB,GAEN9wM,GAAG,KAAK,OAAR,GAAkB,IAAlB,GAAyB,IAF7B;AAGA+wM,QAAAA,WAAW,CAAC3uL,GAAD,EAAMpiB,GAAN,EAAW6xD,MAAM,CAAC7xD,GAAD,CAAjB,EAAwB+J,CAAxB,CAAX;AACD;AACF;;AAED,WAAOqY,GAAP;AACD,GApBM,EAoBJ,EApBI,CAAP;AAqBD;;AACD,SAAS2uL,WAAT,CAAqBtrL,MAArB,EAA6BzlB,GAA7B,EAAkCjB,KAAlC,EAAyC8iL,OAAzC,EAAkD;AAChD,MAAI,CAAC4uB,UAAU,CAACzwM,GAAD,CAAf,EAAsB;AACtB,MAAIqZ,CAAJ,EAAOqO,CAAP;;AAEA,MAAIqtL,QAAQ,CAACh2M,KAAD,CAAR,IAAmB,CAACqE,OAAO,CAACrE,KAAD,CAA/B,EAAwC;AACtC2oB,IAAAA,CAAC,GAAGqtL,QAAQ,CAACtvL,MAAM,CAACzlB,GAAD,CAAP,CAAR,GAAwBylB,MAAM,CAACzlB,GAAD,CAA9B,GAAsCylB,MAAM,CAACzlB,GAAD,CAAN,GAAc,EAAxD;;AAEA,SAAKqZ,CAAL,IAAUta,KAAV,EAAiB;AACf,UAAI8iL,OAAO,KAAKA,OAAO,KAAK,IAAZ,IAAoBA,OAAO,CAACxoK,CAAD,CAAhC,CAAX,EAAiD;AAC/C03L,QAAAA,WAAW,CAACrpL,CAAD,EAAIrO,CAAJ,EAAOta,KAAK,CAACsa,CAAD,CAAZ,CAAX;AACD,OAFD,MAEO,IAAIo3L,UAAU,CAACp3L,CAAD,CAAd,EAAmB;AACxBqO,QAAAA,CAAC,CAACrO,CAAD,CAAD,GAAOta,KAAK,CAACsa,CAAD,CAAZ;AACD;AACF;AACF,GAVD,MAUO;AACLoM,IAAAA,MAAM,CAACzlB,GAAD,CAAN,GAAcjB,KAAd;AACD;AACF;;AAED,SAAS8xM,UAAT,CAAoB5tM,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAI7G,CAAC,IAAI,IAAT,EAAe,OAAO6G,CAAP;AACf,QAAMtE,GAAG,GAAG,EAAZ;AAAA,QACM4c,GAAG,GAAG,EADZ;;AAGA,WAAS1F,GAAT,CAAagG,CAAb,EAAgB;AACd,QAAI,CAACld,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAR,EAAkB;AAChBkI,MAAAA,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAH,GAAc,CAAd;AACA8kB,MAAAA,GAAG,CAACpmB,IAAJ,CAAS0mB,CAAT;AACD;AACF;;AAED5Y,EAAAA,CAAC,CAACjK,OAAF,CAAU6c,GAAV;AACAzZ,EAAAA,CAAC,CAACpD,OAAF,CAAU6c,GAAV;AACA,SAAO0F,GAAP;AACD;;AAED,SAAS4yL,IAAT,CAAe94M,KAAf,EAAsB;AACpB,SAAOA,KAAK,CAACA,KAAK,CAACb,MAAN,GAAe,CAAhB,CAAZ;AACD;;AAED,SAASo2M,QAAT,CAAmB/uL,CAAnB,EAAsB;AACpB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B,CAACA,CAAvC;AACD;;AAED,MAAM3e,GAAG,GAAGyQ,IAAI,IAAItS,CAAC,IAAIsS,IAAI,GAAG1S,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAhC;;AAEA,MAAM+yM,KAAK,GAAGzgM,IAAI,IAAItS,CAAC,IAAIJ,IAAI,CAACiK,GAAL,CAASyI,IAAI,GAAGtS,CAAhB,CAA3B;;AAEA,MAAM8uM,MAAM,GAAGxoM,CAAC,IAAItG,CAAC,IAAIJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGsG,CAAb,CAAX,CAAxC;;AAEA,MAAMyoM,MAAM,GAAGzoM,CAAC,IAAItG,CAAC,IAAIJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC4S,KAAL,CAAW5S,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAX,CAAf,GAAyCsG,CAAlE;;AAEA,MAAMgK,GAAG,GAAGy/B,QAAQ,IAAI/vC,CAAC,IAAIA,CAAC,GAAG,CAAJ,GAAQ,CAACJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAV,EAAa+vC,QAAb,CAAT,GAAkCnwC,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY+vC,QAAZ,CAA/D;;AAEA,SAASi/J,GAAT,CAAaC,MAAb,EAAqBz/G,KAArB,EAA4B0/G,IAA5B,EAAkCC,MAAlC,EAA0C;AACxC,QAAMC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAf;AAAA,QACMjsI,EAAE,GAAGksI,IAAI,CAAC4D,IAAI,CAAC7D,MAAD,CAAL,CADf;AAAA,QAEMI,EAAE,GAAG,CAACrsI,EAAE,GAAGosI,EAAN,IAAY5/G,KAFvB;AAGA,SAAO,CAAC2/G,MAAM,CAACC,EAAE,GAAGC,EAAN,CAAP,EAAkBF,MAAM,CAACnsI,EAAE,GAAGqsI,EAAN,CAAxB,CAAP;AACD;;AAED,SAASC,SAAT,CAAmBL,MAAnB,EAA2Bz/G,KAA3B,EAAkC;AAChC,SAAOw/G,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgB+/G,QAAhB,EAA0Bz1E,QAA1B,CAAV;AACD;;AACD,SAAS01E,MAAT,CAAgBP,MAAhB,EAAwBz/G,KAAxB,EAA+B;AAC7B,MAAIl9E,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAX;AACA,SAAOD,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBujH,KAAK,CAACzgM,IAAD,CAArB,EAA6BzQ,GAAG,CAACyQ,IAAD,CAAhC,CAAV;AACD;;AACD,SAASm9L,MAAT,CAAgBR,MAAhB,EAAwBz/G,KAAxB,EAA+Bz/C,QAA/B,EAAyC;AACvC,SAAOi/J,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBl/E,GAAG,CAACy/B,QAAD,CAAnB,EAA+Bz/B,GAAG,CAAC,IAAIy/B,QAAL,CAAlC,CAAV;AACD;;AACD,SAAS2/J,SAAT,CAAmBT,MAAnB,EAA2Bz/G,KAA3B,EAAkCiqC,QAAlC,EAA4C;AAC1C,SAAOu1E,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBs/G,MAAM,CAACr1E,QAAD,CAAtB,EAAkCs1E,MAAM,CAACt1E,QAAD,CAAxC,CAAV;AACD;;AAED,SAASk2E,IAAT,CAAcV,MAAd,EAAsBW,MAAtB,EAA8BlgM,KAA9B,EAAqCw/L,IAArC,EAA2CC,MAA3C,EAAmD;AACjD,QAAMC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAf;AAAA,QACMjsI,EAAE,GAAGksI,IAAI,CAAC4D,IAAI,CAAC7D,MAAD,CAAL,CADf;AAAA,QAEMY,EAAE,GAAGD,MAAM,IAAI,IAAV,GAAiBV,IAAI,CAACU,MAAD,CAArB,GAAgC,CAACR,EAAE,GAAGpsI,EAAN,IAAY,CAFvD;AAGA,SAAO,CAACmsI,MAAM,CAACU,EAAE,GAAG,CAACT,EAAE,GAAGS,EAAN,IAAYngM,KAAlB,CAAP,EAAiCy/L,MAAM,CAACU,EAAE,GAAG,CAAC7sI,EAAE,GAAG6sI,EAAN,IAAYngM,KAAlB,CAAvC,CAAP;AACD;;AAED,SAASogM,UAAT,CAAoBb,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C;AACzC,SAAOigM,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwB6/L,QAAxB,EAAkCz1E,QAAlC,CAAX;AACD;;AACD,SAASi2E,OAAT,CAAiBd,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwC;AACtC,QAAM4C,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAb;AACA,SAAOU,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBqjM,KAAK,CAACzgM,IAAD,CAA7B,EAAqCzQ,GAAG,CAACyQ,IAAD,CAAxC,CAAX;AACD;;AACD,SAAS09L,OAAT,CAAiBf,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwCqgC,QAAxC,EAAkD;AAChD,SAAO4/J,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBY,GAAG,CAACy/B,QAAD,CAA3B,EAAuCz/B,GAAG,CAAC,IAAIy/B,QAAL,CAA1C,CAAX;AACD;;AACD,SAASkgK,UAAT,CAAoBhB,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C+pH,QAA3C,EAAqD;AACnD,SAAOk2E,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBo/L,MAAM,CAACr1E,QAAD,CAA9B,EAA0Cs1E,MAAM,CAACt1E,QAAD,CAAhD,CAAX;AACD;;AAED,SAASy2E,OAAT,CAAiBC,IAAjB,EAAuB;AACrB,SAAO,IAAI,CAAC,EAAE,IAAIxgI,IAAJ,CAASwgI,IAAT,EAAeC,QAAf,KAA4B,CAA9B,CAAZ;AACD;;AACD,SAASC,UAAT,CAAoBF,IAApB,EAA0B;AACxB,SAAO,IAAI,CAAC,EAAE,IAAIxgI,IAAJ,CAASwgI,IAAT,EAAeG,WAAf,KAA+B,CAAjC,CAAZ;AACD;;AAED,SAASt2M,KAAT,CAAgBwmB,CAAhB,EAAmB;AACjB,SAAOA,CAAC,IAAI,IAAL,GAAYtf,OAAO,CAACsf,CAAD,CAAP,GAAaA,CAAb,GAAiB,CAACA,CAAD,CAA7B,GAAmC,EAA1C;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwyL,UAAT,CAAqB33K,KAArB,EAA4Bt7B,GAA5B,EAAiCE,GAAjC,EAAsC;AACpC,MAAIswM,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CAAd;AAAA,MACIm1K,EAAE,GAAGn1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIo1K,IAFJ;;AAIA,MAAID,EAAE,GAAGD,EAAT,EAAa;AACXE,IAAAA,IAAI,GAAGD,EAAP;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGE,IAAL;AACD;;AAEDA,EAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AACA,SAAOE,IAAI,IAAIxwM,GAAG,GAAGF,GAAd,GAAoB,CAACA,GAAD,EAAME,GAAN,CAApB,GAAiC,CAACswM,EAAE,GAAG3wM,IAAI,CAACG,GAAL,CAASH,IAAI,CAACK,GAAL,CAASswM,EAAT,EAAaxwM,GAAb,CAAT,EAA4BE,GAAG,GAAGwwM,IAAlC,CAAN,EAA+CF,EAAE,GAAGE,IAApD,CAAxC;AACD;;AAED,SAASlrM,UAAT,CAAqBib,CAArB,EAAwB;AACtB,SAAO,OAAOA,CAAP,KAAa,UAApB;AACD;;AAED,MAAMkwL,UAAU,GAAG,YAAnB;;AACA,SAAS/O,OAAT,CAAkBhqJ,MAAlB,EAA0Bg5J,MAA1B,EAAkC7C,GAAlC,EAAuC;AACrCA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA6C,EAAAA,MAAM,GAAG32M,KAAK,CAAC22M,MAAD,CAAL,IAAiB,EAA1B;AACA,QAAM3hM,GAAG,GAAG,EAAZ;AAAA,QACMrS,GAAG,GAAG,EADZ;AAAA,QAEMi0M,IAAI,GAAG,EAFb;AAAA,QAGMrf,GAAG,GAAGuc,GAAG,CAAC39J,UAAJ,IAAkBA,UAH9B;AAIAn2C,EAAAA,KAAK,CAAC29C,MAAD,CAAL,CAAch6C,OAAd,CAAsB,CAAC6H,CAAD,EAAI3L,CAAJ,KAAU;AAC9B,QAAI2L,CAAC,IAAI,IAAT,EAAe;AACfwJ,IAAAA,GAAG,CAAClV,IAAJ,CAAS62M,MAAM,CAAC92M,CAAD,CAAN,KAAc62M,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAAzC;AACA/zM,IAAAA,GAAG,CAAC7C,IAAJ,CAAS0L,CAAC,GAAGD,UAAU,CAACC,CAAD,CAAV,GAAgBA,CAAhB,GAAoB6pH,KAAK,CAAC7pH,CAAD,EAAI,IAAJ,EAAUsoM,GAAV,CAAtC;AACA,KAACH,cAAc,CAACnoM,CAAD,CAAd,IAAqB,EAAtB,EAA0B7H,OAA1B,CAAkC6iB,CAAC,IAAIowL,IAAI,CAACpwL,CAAD,CAAJ,GAAU,CAAjD;AACD,GALD;AAMA,SAAO7jB,GAAG,CAACxD,MAAJ,KAAe,CAAf,GAAmB,IAAnB,GAA0Bu5M,QAAQ,CAACnhB,GAAG,CAAC50L,GAAD,EAAMqS,GAAN,CAAJ,EAAgBpS,MAAM,CAACof,IAAP,CAAY40L,IAAZ,CAAhB,CAAzC;AACD;;AACD,MAAMqC,SAAS,GAAG,CAACp6H,CAAD,EAAI9sE,CAAJ,KAAU,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAAS8sE,CAAC,IAAI,IAAf,KAAwB9sE,CAAC,IAAI,IAA7B,GAAoC,CAAC,CAArC,GAAyC,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAASA,CAAC,IAAI,IAAf,KAAwB8sE,CAAC,IAAI,IAA7B,GAAoC,CAApC,GAAwC,CAAC9sE,CAAC,GAAGA,CAAC,YAAY4jE,IAAb,GAAoB,CAAC5jE,CAArB,GAAyBA,CAA7B,EAAgC8sE,CAAC,GAAGA,CAAC,YAAYlJ,IAAb,GAAoB,CAACkJ,CAArB,GAAyBA,CAA9D,MAAqEA,CAArE,IAA0E9sE,CAAC,KAAKA,CAAhF,GAAoF,CAAC,CAArF,GAAyFA,CAAC,KAAKA,CAAN,IAAW8sE,CAAC,KAAKA,CAAjB,GAAqB,CAArB,GAAyB,CAA/N;;;;AAEA,MAAM1oC,UAAU,GAAG,CAACwH,MAAD,EAASg5J,MAAT,KAAoBh5J,MAAM,CAACx+C,MAAP,KAAkB,CAAlB,GAAsB03M,QAAQ,CAACl5J,MAAM,CAAC,CAAD,CAAP,EAAYg5J,MAAM,CAAC,CAAD,CAAlB,CAA9B,GAAuDG,QAAQ,CAACn5J,MAAD,EAASg5J,MAAT,EAAiBh5J,MAAM,CAACx+C,MAAxB,CAAtG;;AAEA,MAAM03M,QAAQ,GAAG,CAACxhF,KAAD,EAAQ0hF,KAAR,KAAkB,UAAUhwM,CAAV,EAAa6G,CAAb,EAAgB;AACjD,SAAOqrM,SAAS,CAAC5jF,KAAK,CAACtuH,CAAD,CAAN,EAAWsuH,KAAK,CAACznH,CAAD,CAAhB,CAAT,GAAgCmpM,KAAvC;AACD,CAFD;;AAIA,MAAMD,QAAQ,GAAG,CAACn5J,MAAD,EAASg5J,MAAT,EAAiB5oM,CAAjB,KAAuB;AACtC4oM,EAAAA,MAAM,CAAC72M,IAAP,CAAY,CAAZ,EADsC,CACtB;;AAEhB,SAAO,UAAUiH,CAAV,EAAa6G,CAAb,EAAgB;AACrB,QAAIpC,CAAJ;AAAA,QACIc,CAAC,GAAG,CADR;AAAA,QAEIzM,CAAC,GAAG,CAAC,CAFT;;AAIA,WAAOyM,CAAC,KAAK,CAAN,IAAW,EAAEzM,CAAF,GAAMkO,CAAxB,EAA2B;AACzBvC,MAAAA,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAV;AACAyM,MAAAA,CAAC,GAAG2sM,SAAS,CAACztM,CAAC,CAACzE,CAAD,CAAF,EAAOyE,CAAC,CAACoC,CAAD,CAAR,CAAb;AACD;;AAED,WAAOtB,CAAC,GAAGqqM,MAAM,CAAC92M,CAAD,CAAjB;AACD,GAXD;AAYD,CAfD;;AAiBA,SAAS4/H,QAAT,CAAmBj5G,CAAnB,EAAsB;AACpB,SAAOjb,UAAU,CAACib,CAAD,CAAV,GAAgBA,CAAhB,GAAoB,MAAMA,CAAjC;AACD;;AAED,SAASywG,QAAT,CAAmB+/E,KAAnB,EAA0Bz6F,OAA1B,EAAmC;AACjC,MAAI06F,GAAJ;AACA,SAAO14M,CAAC,IAAI;AACV,QAAI04M,GAAJ,EAASz4M,YAAY,CAACy4M,GAAD,CAAZ;AACTA,IAAAA,GAAG,GAAG34M,UAAU,CAAC,OAAOi+G,OAAO,CAACh+G,CAAD,CAAP,EAAY04M,GAAG,GAAG,IAAzB,CAAD,EAAiCD,KAAjC,CAAhB;AACD,GAHD;AAID;;AAED,SAAS9b,MAAT,CAAiB10K,CAAjB,EAAoB;AAClB,OAAK,IAAIxgB,CAAJ,EAAOmX,CAAP,EAAUtd,CAAC,GAAG,CAAd,EAAiBN,GAAG,GAAGK,SAAS,CAACT,MAAtC,EAA8CU,CAAC,GAAGN,GAAlD,EAAuD,EAAEM,CAAzD,EAA4D;AAC1DmG,IAAAA,CAAC,GAAGpG,SAAS,CAACC,CAAD,CAAb;;AAEA,SAAKsd,CAAL,IAAUnX,CAAV,EAAa;AACXwgB,MAAAA,CAAC,CAACrJ,CAAD,CAAD,GAAOnX,CAAC,CAACmX,CAAD,CAAR;AACD;AACF;;AAED,SAAOqJ,CAAP;AACD;AAED;AACA;AACA;AACA;;;AACA,SAAS0yL,MAAT,CAAiBl5M,KAAjB,EAAwBwL,CAAxB,EAA2B;AACzB,MAAI3L,CAAC,GAAG,CAAR;AAAA,MACIkO,CADJ;AAAA,MAEIgE,CAFJ;AAAA,MAGIhM,GAHJ;AAAA,MAIIE,GAJJ;;AAMA,MAAIjG,KAAK,KAAK+N,CAAC,GAAG/N,KAAK,CAACb,MAAf,CAAT,EAAiC;AAC/B,QAAIqM,CAAC,IAAI,IAAT,EAAe;AACb;AACA,WAAKuG,CAAC,GAAG/R,KAAK,CAACH,CAAD,CAAd,EAAmBA,CAAC,GAAGkO,CAAJ,KAAUgE,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA7B,CAAnB,EAAoDA,CAAC,GAAG/R,KAAK,CAAC,EAAEH,CAAH,CAA7D,CAAmE;;AAEnEkG,MAAAA,GAAG,GAAGE,GAAG,GAAG8L,CAAZ,CAJa,CAIE;;AAEf,aAAOlS,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkS,QAAAA,CAAC,GAAG/R,KAAK,CAACH,CAAD,CAAT,CADiB,CACH;;AAEd,YAAIkS,CAAC,IAAI,IAAT,EAAe;AACb,cAAIA,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,cAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACd;AACF;AACF,KAdD,MAcO;AACL;AACA,WAAKA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,CAAV,EAAsBA,CAAC,GAAGkO,CAAJ,KAAUgE,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA7B,CAAtB,EAAuDA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAAC,EAAEH,CAAH,CAAN,CAA5D,CAAyE;;AAEzEkG,MAAAA,GAAG,GAAGE,GAAG,GAAG8L,CAAZ,CAJK,CAIU;;AAEf,aAAOlS,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkS,QAAAA,CAAC,GAAGvG,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,CAAL,CADiB,CACA;;AAEjB,YAAIkS,CAAC,IAAI,IAAT,EAAe;AACb,cAAIA,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,cAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACd;AACF;AACF;AACF;;AAED,SAAO,CAAChM,GAAD,EAAME,GAAN,CAAP;AACD;;AAED,SAASkzM,WAAT,CAAsBn5M,KAAtB,EAA6BwL,CAA7B,EAAgC;AAC9B,QAAMuC,CAAC,GAAG/N,KAAK,CAACb,MAAhB;AACA,MAAIU,CAAC,GAAG,CAAC,CAAT;AAAA,MACIkH,CADJ;AAAA,MAEI6G,CAFJ;AAAA,MAGItB,CAHJ;AAAA,MAIIuyE,CAJJ;AAAA,MAKI9sE,CALJ;;AAOA,MAAIvG,CAAC,IAAI,IAAT,EAAe;AACb,WAAO,EAAE3L,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAG5N,KAAK,CAACH,CAAD,CAAT;;AAEA,UAAI+N,CAAC,IAAI,IAAL,IAAaA,CAAC,IAAIA,CAAtB,EAAyB;AACvB7G,QAAAA,CAAC,GAAGuF,CAAC,GAAGsB,CAAR;AACA;AACD;AACF;;AAED,QAAI/N,CAAC,KAAKkO,CAAV,EAAa,OAAO,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,CAAP;AACb8wE,IAAAA,CAAC,GAAG9sE,CAAC,GAAGlS,CAAR;;AAEA,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAG5N,KAAK,CAACH,CAAD,CAAT;;AAEA,UAAI+N,CAAC,IAAI,IAAT,EAAe;AACb,YAAI7G,CAAC,GAAG6G,CAAR,EAAW;AACT7G,UAAAA,CAAC,GAAG6G,CAAJ;AACAixE,UAAAA,CAAC,GAAGh/E,CAAJ;AACD;;AAED,YAAIyM,CAAC,GAAGsB,CAAR,EAAW;AACTtB,UAAAA,CAAC,GAAGsB,CAAJ;AACAmE,UAAAA,CAAC,GAAGlS,CAAJ;AACD;AACF;AACF;AACF,GA5BD,MA4BO;AACL,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAGpC,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,EAAWA,CAAX,EAAcG,KAAd,CAAL;;AAEA,UAAI4N,CAAC,IAAI,IAAL,IAAaA,CAAC,IAAIA,CAAtB,EAAyB;AACvB7G,QAAAA,CAAC,GAAGuF,CAAC,GAAGsB,CAAR;AACA;AACD;AACF;;AAED,QAAI/N,CAAC,KAAKkO,CAAV,EAAa,OAAO,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,CAAP;AACb8wE,IAAAA,CAAC,GAAG9sE,CAAC,GAAGlS,CAAR;;AAEA,WAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgB;AACdH,MAAAA,CAAC,GAAGpC,CAAC,CAACxL,KAAK,CAACH,CAAD,CAAN,EAAWA,CAAX,EAAcG,KAAd,CAAL;;AAEA,UAAI4N,CAAC,IAAI,IAAT,EAAe;AACb,YAAI7G,CAAC,GAAG6G,CAAR,EAAW;AACT7G,UAAAA,CAAC,GAAG6G,CAAJ;AACAixE,UAAAA,CAAC,GAAGh/E,CAAJ;AACD;;AAED,YAAIyM,CAAC,GAAGsB,CAAR,EAAW;AACTtB,UAAAA,CAAC,GAAGsB,CAAJ;AACAmE,UAAAA,CAAC,GAAGlS,CAAJ;AACD;AACF;AACF;AACF;;AAED,SAAO,CAACg/E,CAAD,EAAI9sE,CAAJ,CAAP;AACD;;AAED,MAAMolM,GAAG,GAAGv0M,MAAM,CAAC3C,SAAP,CAAiBu2H,cAA7B;;AACA,SAASrxH,GAAT,CAAc+hM,MAAd,EAAsBkQ,QAAtB,EAAgC;AAC9B,SAAOD,GAAG,CAACx4M,IAAJ,CAASuoM,MAAT,EAAiBkQ,QAAjB,CAAP;AACD;;AAED,MAAMC,IAAI,GAAG,EAAb;;AACA,SAAS+B,OAAT,CAAkBvuL,KAAlB,EAAyB;AACvB,MAAIvK,GAAG,GAAG,EAAV;AAAA,MACIkN,IADJ;;AAGA,WAAS6rL,KAAT,CAAev1M,GAAf,EAAoB;AAClB,WAAOqB,GAAG,CAACmb,GAAD,EAAMxc,GAAN,CAAH,IAAiBwc,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAArC;AACD;;AAED,QAAM/tM,GAAG,GAAG;AACVhC,IAAAA,IAAI,EAAE,CADI;AAEV0sM,IAAAA,KAAK,EAAE,CAFG;AAGV9M,IAAAA,MAAM,EAAE5mL,GAHE;AAIVnb,IAAAA,GAAG,EAAEk0M,KAJK;;AAMV12M,IAAAA,GAAG,CAACmB,GAAD,EAAM;AACP,aAAOu1M,KAAK,CAACv1M,GAAD,CAAL,GAAawc,GAAG,CAACxc,GAAD,CAAhB,GAAwBixH,SAA/B;AACD,KARS;;AAUVvyH,IAAAA,GAAG,CAACsB,GAAD,EAAMjB,KAAN,EAAa;AACd,UAAI,CAACw2M,KAAK,CAACv1M,GAAD,CAAV,EAAiB;AACf,UAAEwF,GAAG,CAAChC,IAAN;AACA,YAAIgZ,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAAjB,EAAuB,EAAE/tM,GAAG,CAAC0qM,KAAN;AACxB;;AAED1zL,MAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWjB,KAAX;AACA,aAAO,IAAP;AACD,KAlBS;;AAoBVyC,IAAAA,MAAM,CAACxB,GAAD,EAAM;AACV,UAAIu1M,KAAK,CAACv1M,GAAD,CAAT,EAAgB;AACd,UAAEwF,GAAG,CAAChC,IAAN;AACA,UAAEgC,GAAG,CAAC0qM,KAAN;AACA1zL,QAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWuzM,IAAX;AACD;;AAED,aAAO,IAAP;AACD,KA5BS;;AA8BVC,IAAAA,KAAK,GAAG;AACNhuM,MAAAA,GAAG,CAAChC,IAAJ,GAAWgC,GAAG,CAAC0qM,KAAJ,GAAY,CAAvB;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAa5mL,GAAG,GAAG,EAAnB;AACD,KAjCS;;AAmCVkN,IAAAA,IAAI,CAAChH,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBquB,QAAAA,IAAI,GAAGhH,CAAP;AACA,eAAOld,GAAP;AACD,OAHD,MAGO;AACL,eAAOkkB,IAAP;AACD;AACF,KA1CS;;AA4CV09K,IAAAA,KAAK,GAAG;AACN,YAAM32H,IAAI,GAAG,EAAb;AACA,UAAIjtE,IAAI,GAAG,CAAX;;AAEA,WAAK,MAAMxD,GAAX,IAAkBwc,GAAlB,EAAuB;AACrB,cAAMzd,KAAK,GAAGyd,GAAG,CAACxc,GAAD,CAAjB;;AAEA,YAAIjB,KAAK,KAAKw0M,IAAV,KAAmB,CAAC7pL,IAAD,IAAS,CAACA,IAAI,CAAC3qB,KAAD,CAAjC,CAAJ,EAA+C;AAC7C0xE,UAAAA,IAAI,CAACzwE,GAAD,CAAJ,GAAYjB,KAAZ;AACA,YAAEyE,IAAF;AACD;AACF;;AAEDgC,MAAAA,GAAG,CAAChC,IAAJ,GAAWA,IAAX;AACAgC,MAAAA,GAAG,CAAC0qM,KAAJ,GAAY,CAAZ;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAa5mL,GAAG,GAAGi0D,IAAnB;AACD;;AA5DS,GAAZ;AA+DA,MAAI1pD,KAAJ,EAAWjoB,MAAM,CAACof,IAAP,CAAY6I,KAAZ,EAAmBlnB,OAAnB,CAA2BG,GAAG,IAAI;AAC3CwF,IAAAA,GAAG,CAAC9G,GAAJ,CAAQsB,GAAR,EAAa+mB,KAAK,CAAC/mB,GAAD,CAAlB;AACD,GAFU;AAGX,SAAOwF,GAAP;AACD;;AAED,SAAS4lD,KAAT,CAAgB7tB,KAAhB,EAAuBx+B,KAAvB,EAA8Bo/F,SAA9B,EAAyCjvD,IAAzC,EAA+CC,KAA/C,EAAsD8sH,MAAtD,EAA8D;AAC5D,MAAI,CAAC99D,SAAD,IAAcA,SAAS,KAAK,CAAhC,EAAmC,OAAO89D,MAAP;AACnC,QAAMx8J,CAAC,GAAG,CAAC0+F,SAAX;AACA,MAAIl7F,CAAC,GAAGs6B,KAAK,CAAC,CAAD,CAAb;AAAA,MACIzzB,CAAC,GAAGkrM,IAAI,CAACz3K,KAAD,CADZ;AAAA,MAEI1vB,CAFJ,CAH4D,CAKrD;;AAEP,MAAI/D,CAAC,GAAG7G,CAAR,EAAW;AACT4K,IAAAA,CAAC,GAAG5K,CAAJ;AACAA,IAAAA,CAAC,GAAG6G,CAAJ;AACAA,IAAAA,CAAC,GAAG+D,CAAJ;AACD,GAX2D,CAW1D;;;AAGFA,EAAAA,CAAC,GAAG/L,IAAI,CAACiT,GAAL,CAAShW,KAAK,GAAGkE,CAAjB,CAAJ;AACA,QAAM8G,CAAC,GAAGjI,IAAI,CAACiT,GAAL,CAASjL,CAAC,GAAG/K,KAAb,CAAV,CAf4D,CAe7B;;AAE/B,SAAO8O,CAAC,GAAG9D,CAAJ,IAAS8D,CAAC,IAAIpO,CAAd,GAAkByvC,IAAlB,GAAyBnlC,CAAC,IAAItK,CAAL,GAAS0vC,KAAT,GAAiB8sH,MAAjD;AACD;;AAED,SAASu5C,QAAT,CAAmB93B,KAAnB,EAA0B+1B,MAA1B,EAAkCgC,OAAlC,EAA2C;AACzC,QAAM/B,KAAK,GAAGh2B,KAAK,CAACvhL,SAAN,GAAkB2C,MAAM,CAAC60L,MAAP,CAAc8f,MAAM,CAACt3M,SAArB,CAAhC;AACAu3M,EAAAA,KAAK,CAAC/rM,WAAN,GAAoB+1K,KAApB;AACA,SAAO0Z,MAAM,CAACsc,KAAD,EAAQ+B,OAAR,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;;;AACA,SAASC,OAAT,CAAkB32M,KAAlB,EAAyBw+B,KAAzB,EAAgC2R,IAAhC,EAAsCC,KAAtC,EAA6C;AAC3C,MAAIwkK,EAAE,GAAGp2K,KAAK,CAAC,CAAD,CAAd;AAAA,MACI4wK,EAAE,GAAG5wK,KAAK,CAACA,KAAK,CAACliC,MAAN,GAAe,CAAhB,CADd;AAAA,MAEIoE,CAFJ;;AAIA,MAAIk0M,EAAE,GAAGxF,EAAT,EAAa;AACX1uM,IAAAA,CAAC,GAAGk0M,EAAJ;AACAA,IAAAA,EAAE,GAAGxF,EAAL;AACAA,IAAAA,EAAE,GAAG1uM,CAAL;AACD;;AAEDyvC,EAAAA,IAAI,GAAGA,IAAI,KAAK+hF,SAAT,IAAsB/hF,IAA7B;AACAC,EAAAA,KAAK,GAAGA,KAAK,KAAK8hF,SAAV,IAAuB9hF,KAA/B;AACA,SAAO,CAACD,IAAI,GAAGykK,EAAE,IAAI50M,KAAT,GAAiB40M,EAAE,GAAG50M,KAA3B,MAAsCowC,KAAK,GAAGpwC,KAAK,IAAIovM,EAAZ,GAAiBpvM,KAAK,GAAGovM,EAApE,CAAP;AACD;;AAED,SAAS7mM,SAAT,CAAoBob,CAApB,EAAuB;AACrB,SAAO,OAAOA,CAAP,KAAa,SAApB;AACD;;AAED,SAASizL,MAAT,CAAiBjzL,CAAjB,EAAoB;AAClB,SAAO5jB,MAAM,CAAC3C,SAAP,CAAiBuP,QAAjB,CAA0B7Q,IAA1B,CAA+B6nB,CAA/B,MAAsC,eAA7C;AACD;;AAED,SAASo/J,UAAT,CAAqBp/J,CAArB,EAAwB;AACtB,SAAOA,CAAC,IAAIjb,UAAU,CAACib,CAAC,CAACpI,MAAM,CAACslI,QAAR,CAAF,CAAtB;AACD;;AAED,SAASr4I,QAAT,CAAmBmb,CAAnB,EAAsB;AACpB,SAAO,OAAOA,CAAP,KAAa,QAApB;AACD;;AAED,SAASkzL,QAAT,CAAmBlzL,CAAnB,EAAsB;AACpB,SAAO5jB,MAAM,CAAC3C,SAAP,CAAiBuP,QAAjB,CAA0B7Q,IAA1B,CAA+B6nB,CAA/B,MAAsC,iBAA7C;AACD;;AAED,SAAStb,QAAT,CAAmBsb,CAAnB,EAAsB;AACpB,SAAO,OAAOA,CAAP,KAAa,QAApB;AACD;;AAED,SAAS1iB,GAAT,CAAc65C,MAAd,EAAsB+5J,IAAtB,EAA4B5D,GAA5B,EAAiC;AAC/B,MAAIn2J,MAAJ,EAAY;AACVA,IAAAA,MAAM,GAAG+5J,IAAI,GAAG13M,KAAK,CAAC29C,MAAD,CAAL,CAAcr0C,GAAd,CAAkBkC,CAAC,IAAIA,CAAC,CAACpI,OAAF,CAAU,QAAV,EAAoB,IAApB,CAAvB,CAAH,GAAuDpD,KAAK,CAAC29C,MAAD,CAAzE;AACD;;AAED,QAAMp+C,GAAG,GAAGo+C,MAAM,IAAIA,MAAM,CAACx+C,MAA7B;AAAA,QACMo4L,GAAG,GAAGuc,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,MAD9B;AAAA,QAEMzqM,GAAG,GAAGkC,CAAC,IAAI+rL,GAAG,CAACmgB,IAAI,GAAG,CAAClsM,CAAD,CAAH,GAASmtM,eAAe,CAACntM,CAAD,CAA7B,CAFpB;;AAIA,MAAIsY,EAAJ;;AAEA,MAAI,CAACvkB,GAAL,EAAU;AACRukB,IAAAA,EAAE,GAAG,YAAY;AACf,aAAO,EAAP;AACD,KAFD;AAGD,GAJD,MAIO,IAAIvkB,GAAG,KAAK,CAAZ,EAAe;AACpB,UAAMoD,GAAG,GAAG2G,GAAG,CAACq0C,MAAM,CAAC,CAAD,CAAP,CAAf;;AAEA75B,IAAAA,EAAE,GAAG,UAAU0C,CAAV,EAAa;AAChB,aAAO,KAAK7jB,GAAG,CAAC6jB,CAAD,CAAf;AACD,KAFD;AAGD,GANM,MAMA;AACL,UAAM7jB,GAAG,GAAGg7C,MAAM,CAACr0C,GAAP,CAAWA,GAAX,CAAZ;;AAEAwa,IAAAA,EAAE,GAAG,UAAU0C,CAAV,EAAa;AAChB,UAAInjB,CAAC,GAAG,KAAKV,GAAG,CAAC,CAAD,CAAH,CAAO6jB,CAAP,CAAb;AAAA,UACI3mB,CAAC,GAAG,CADR;;AAGA,aAAO,EAAEA,CAAF,GAAMN,GAAb,EAAkB8D,CAAC,IAAI,MAAMV,GAAG,CAAC9C,CAAD,CAAH,CAAO2mB,CAAP,CAAX;;AAElB,aAAOnjB,CAAP;AACD,KAPD;AAQD;;AAED,SAAOq1M,QAAQ,CAAC50L,EAAD,EAAK65B,MAAL,EAAa,KAAb,CAAf;AACD;;AAED,SAASg8J,IAAT,CAAe35M,KAAf,EAAsB23M,IAAtB,EAA4B;AAC1B,QAAMpB,EAAE,GAAGv2M,KAAK,CAAC,CAAD,CAAhB;AAAA,QACMw2M,EAAE,GAAGsC,IAAI,CAAC94M,KAAD,CADf;AAAA,QAEMwL,CAAC,GAAG,CAACmsM,IAFX;AAGA,SAAO,CAACnsM,CAAD,GAAK+qM,EAAL,GAAU/qM,CAAC,KAAK,CAAN,GAAUgrM,EAAV,GAAeD,EAAE,GAAG/qM,CAAC,IAAIgrM,EAAE,GAAGD,EAAT,CAAtC;AACD;;AAED,MAAMqB,gBAAgB,GAAG,KAAzB,EAAgC;;AAEhC,SAASgC,QAAT,CAAmB/B,OAAnB,EAA4B;AAC1BA,EAAAA,OAAO,GAAG,CAACA,OAAD,IAAYD,gBAAtB;AACA,MAAI/iC,IAAJ,EAAU77E,IAAV,EAAgB1xF,IAAhB;;AAEA,QAAMgwM,KAAK,GAAG,MAAM;AAClBziC,IAAAA,IAAI,GAAG,EAAP;AACA77E,IAAAA,IAAI,GAAG,EAAP;AACA1xF,IAAAA,IAAI,GAAG,CAAP;AACD,GAJD;;AAMA,QAAMynF,MAAM,GAAG,CAACjrF,GAAD,EAAMjB,KAAN,KAAgB;AAC7B,QAAI,EAAEyE,IAAF,GAASuwM,OAAb,EAAsB;AACpB7+G,MAAAA,IAAI,GAAG67E,IAAP;AACAA,MAAAA,IAAI,GAAG,EAAP;AACAvtK,MAAAA,IAAI,GAAG,CAAP;AACD;;AAED,WAAOutK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KAAnB;AACD,GARD;;AAUAy0M,EAAAA,KAAK;AACL,SAAO;AACLA,IAAAA,KADK;AAELnyM,IAAAA,GAAG,EAAErB,GAAG,IAAIqB,GAAG,CAAC0vK,IAAD,EAAO/wK,GAAP,CAAH,IAAkBqB,GAAG,CAAC6zF,IAAD,EAAOl1F,GAAP,CAF5B;AAGLnB,IAAAA,GAAG,EAAEmB,GAAG,IAAIqB,GAAG,CAAC0vK,IAAD,EAAO/wK,GAAP,CAAH,GAAiB+wK,IAAI,CAAC/wK,GAAD,CAArB,GAA6BqB,GAAG,CAAC6zF,IAAD,EAAOl1F,GAAP,CAAH,GAAiBirF,MAAM,CAACjrF,GAAD,EAAMk1F,IAAI,CAACl1F,GAAD,CAAV,CAAvB,GAA0CixH,SAH9E;AAILvyH,IAAAA,GAAG,EAAE,CAACsB,GAAD,EAAMjB,KAAN,KAAgBsC,GAAG,CAAC0vK,IAAD,EAAO/wK,GAAP,CAAH,GAAiB+wK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KAA7B,GAAqCksF,MAAM,CAACjrF,GAAD,EAAMjB,KAAN;AAJ3D,GAAP;AAMD;;AAED,SAASg3M,KAAT,CAAgBlS,OAAhB,EAAyBmQ,MAAzB,EAAiCC,MAAjC,EAAyCxuL,MAAzC,EAAiD;AAC/C,QAAMyuL,EAAE,GAAGF,MAAM,CAAC34M,MAAlB;AAAA,QACMoI,EAAE,GAAGwwM,MAAM,CAAC54M,MADlB;AAEA,MAAI,CAACoI,EAAL,EAAS,OAAOuwM,MAAP;AACT,MAAI,CAACE,EAAL,EAAS,OAAOD,MAAP;AACT,QAAME,MAAM,GAAG1uL,MAAM,IAAI,IAAIuuL,MAAM,CAACrsM,WAAX,CAAuBusM,EAAE,GAAGzwM,EAA5B,CAAzB;AACA,MAAIg5F,EAAE,GAAG,CAAT;AAAA,MACI23G,EAAE,GAAG,CADT;AAAA,MAEIr4M,CAAC,GAAG,CAFR;;AAIA,SAAO0gG,EAAE,GAAGy3G,EAAL,IAAWE,EAAE,GAAG3wM,EAAvB,EAA2B,EAAE1H,CAA7B,EAAgC;AAC9Bo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAY8nM,OAAO,CAACmQ,MAAM,CAACv3G,EAAD,CAAP,EAAaw3G,MAAM,CAACG,EAAD,CAAnB,CAAP,GAAkC,CAAlC,GAAsCH,MAAM,CAACG,EAAE,EAAH,CAA5C,GAAqDJ,MAAM,CAACv3G,EAAE,EAAH,CAAvE;AACD;;AAED,SAAOA,EAAE,GAAGy3G,EAAZ,EAAgB,EAAEz3G,EAAF,EAAM,EAAE1gG,CAAxB,EAA2B;AACzBo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAYi4M,MAAM,CAACv3G,EAAD,CAAlB;AACD;;AAED,SAAO23G,EAAE,GAAG3wM,EAAZ,EAAgB,EAAE2wM,EAAF,EAAM,EAAEr4M,CAAxB,EAA2B;AACzBo4M,IAAAA,MAAM,CAACp4M,CAAD,CAAN,GAAYk4M,MAAM,CAACG,EAAD,CAAlB;AACD;;AAED,SAAOD,MAAP;AACD;;AAED,SAAS9vM,MAAT,CAAiBuyG,GAAjB,EAAsB/qE,IAAtB,EAA4B;AAC1B,MAAItsC,CAAC,GAAG,EAAR;;AAEA,SAAO,EAAEssC,IAAF,IAAU,CAAjB,EAAoBtsC,CAAC,IAAIq3G,GAAL;;AAEpB,SAAOr3G,CAAP;AACD;;AAED,SAASuO,GAAT,CAAc8oG,GAAd,EAAmBv7G,MAAnB,EAA2Bg5M,OAA3B,EAAoCC,KAApC,EAA2C;AACzC,QAAM9rM,CAAC,GAAG6rM,OAAO,IAAI,GAArB;AAAA,QACM90M,CAAC,GAAGq3G,GAAG,GAAG,EADhB;AAAA,QAEM3sG,CAAC,GAAG5O,MAAM,GAAGkE,CAAC,CAAClE,MAFrB;AAGA,SAAO4O,CAAC,IAAI,CAAL,GAAS1K,CAAT,GAAa+0M,KAAK,KAAK,MAAV,GAAmBjwM,MAAM,CAACmE,CAAD,EAAIyB,CAAJ,CAAN,GAAe1K,CAAlC,GAAsC+0M,KAAK,KAAK,QAAV,GAAqBjwM,MAAM,CAACmE,CAAD,EAAI,CAAC,EAAEyB,CAAC,GAAG,CAAN,CAAL,CAAN,GAAuB1K,CAAvB,GAA2B8E,MAAM,CAACmE,CAAD,EAAI1G,IAAI,CAACoC,IAAL,CAAU+F,CAAC,GAAG,CAAd,CAAJ,CAAtD,GAA8E1K,CAAC,GAAG8E,MAAM,CAACmE,CAAD,EAAIyB,CAAJ,CAAlJ;AACD;AAED;AACA;AACA;AACA;;;AAEA,SAAS0oM,IAAT,CAAez2M,KAAf,EAAsB;AACpB,SAAOA,KAAK,IAAI84M,IAAI,CAAC94M,KAAD,CAAJ,GAAcA,KAAK,CAAC,CAAD,CAA5B,IAAmC,CAA1C;AACD;;AAED,SAASq4M,CAAT,CAAWryM,CAAX,EAAc;AACZ,SAAOkB,OAAO,CAAClB,CAAD,CAAP,GAAa,MAAMA,CAAC,CAACsD,GAAF,CAAM+uM,CAAN,CAAN,GAAiB,GAA9B,GAAoCQ,QAAQ,CAAC7yM,CAAD,CAAR,IAAekF,QAAQ,CAAClF,CAAD,CAAvB,GAA6B;AACxE;AACA87C,EAAAA,IAAI,CAACE,SAAL,CAAeh8C,CAAf,EAAkB5C,OAAlB,CAA0B,QAA1B,EAAoC,SAApC,EAA+CA,OAA/C,CAAuD,QAAvD,EAAiE,SAAjE,CAF2C,GAEmC4C,CAF9E;AAGD;;AAED,SAAS8zM,SAAT,CAAoBtzL,CAApB,EAAuB;AACrB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B,CAACA,CAAD,IAAMA,CAAC,KAAK,OAAZ,IAAuBA,CAAC,KAAK,GAA7B,GAAmC,KAAnC,GAA2C,CAAC,CAACA,CAAnF;AACD;;AAED,MAAM8xL,aAAa,GAAG9xL,CAAC,IAAInb,QAAQ,CAACmb,CAAD,CAAR,GAAcA,CAAd,GAAkBizL,MAAM,CAACjzL,CAAD,CAAN,GAAYA,CAAZ,GAAgBmvD,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAA7D;;AAEA,SAASuzL,MAAT,CAAiBvzL,CAAjB,EAAoB+xL,MAApB,EAA4B;AAC1BA,EAAAA,MAAM,GAAGA,MAAM,IAAID,aAAnB;AACA,SAAO9xL,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B+xL,MAAM,CAAC/xL,CAAD,CAA5C;AACD;;AAED,SAAShX,QAAT,CAAmBgX,CAAnB,EAAsB;AACpB,SAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+BA,CAAC,GAAG,EAA1C;AACD;;AAED,SAASwzL,KAAT,CAAgBxzL,CAAhB,EAAmB;AACjB,QAAMnjB,CAAC,GAAG,EAAV;AAAA,QACM0K,CAAC,GAAGyY,CAAC,CAACrnB,MADZ;;AAGA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4BwD,CAAC,CAACmjB,CAAC,CAAC3mB,CAAD,CAAF,CAAD,GAAU,IAAV;;AAE5B,SAAOwD,CAAP;AACD;;AAED,SAAS42M,QAAT,CAAmBv/F,GAAnB,EAAwBv7G,MAAxB,EAAgCi5M,KAAhC,EAAuCI,QAAvC,EAAiD;AAC/C,QAAMj6M,CAAC,GAAGi6M,QAAQ,IAAI,IAAZ,GAAmBA,QAAnB,GAA8B,QAAxC;AAAA,QACMn1M,CAAC,GAAGq3G,GAAG,GAAG,EADhB;AAAA,QAEM3sG,CAAC,GAAG1K,CAAC,CAAClE,MAFZ;AAAA,QAGMwS,CAAC,GAAG/L,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY9G,MAAM,GAAGZ,CAAC,CAACY,MAAvB,CAHV;AAIA,SAAO4O,CAAC,IAAI5O,MAAL,GAAckE,CAAd,GAAkB+0M,KAAK,KAAK,MAAV,GAAmB75M,CAAC,GAAG8E,CAAC,CAAC6F,KAAF,CAAQ6E,CAAC,GAAG4D,CAAZ,CAAvB,GAAwCymM,KAAK,KAAK,QAAV,GAAqB/0M,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWtD,IAAI,CAACoC,IAAL,CAAU2J,CAAC,GAAG,CAAd,CAAX,IAA+BpT,CAA/B,GAAmC8E,CAAC,CAAC6F,KAAF,CAAQ6E,CAAC,GAAG,CAAC,EAAE4D,CAAC,GAAG,CAAN,CAAb,CAAxD,GAAiFtO,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWyI,CAAX,IAAgBpT,CAAlK;AACD;;AAED,SAAS27M,UAAT,CAAqBl6M,KAArB,EAA4Bgb,MAA5B,EAAoCy9L,OAApC,EAA6C;AAC3C,MAAIz4M,KAAJ,EAAW;AACT,QAAIgb,MAAJ,EAAY;AACV,YAAMjN,CAAC,GAAG/N,KAAK,CAACb,MAAhB;;AAEA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,cAAM0D,CAAC,GAAGyX,MAAM,CAAChb,KAAK,CAACH,CAAD,CAAN,CAAhB;AACA,YAAI0D,CAAJ,EAAOk1M,OAAO,CAACl1M,CAAD,EAAI1D,CAAJ,EAAOG,KAAP,CAAP;AACR;AACF,KAPD,MAOO;AACLA,MAAAA,KAAK,CAAC2D,OAAN,CAAc80M,OAAd;AACD;AACF;AACF;;;;;;;;;AC/zBD;;AAEA;AACA;AACA,MAAM0B,WAAW,GAAG,oBAApB,EAEA;;AACA,MAAMC,UAAU,GAAG,iGAAnB,EAAsH;;AACtH,MAAMC,aAAa,GAAG,6DAAtB,EAAqF;AAGrF;;AACA,MAAMC,YAAY,GAAG,SAArB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,kBAASlsM,KAAT,EAAgB2oL,EAAhB,EAAoB;AACjC,SAAOvgH,OAAO,KAAK;AACjBA,IAAAA,OAAO,EAAEA,OAAO,IAAI,EADH;AAEjB+jI,IAAAA,QAAQ,EAAEA,QAFO;AAGjB38F,IAAAA,IAAI,EAAEA,IAHW;AAIjB48F,IAAAA,UAAU,EAAE,CAAC,CAACzjB,EAJG;AAKjBlxE,IAAAA,IAAI,EAAE40F,UAAU,CAAC1jB,EAAD,CALC;AAMjB1rE,IAAAA,IAAI,EAAEqvF,UAAU,CAACtsM,KAAD;AANC,GAAL,CAAd;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAewvG,IAAf,CAAoB+8F,GAApB,EAAyBnkI,OAAzB,EAAkC;AAChC,QAAMs9H,GAAG,GAAG,MAAM,KAAKyG,QAAL,CAAcI,GAAd,EAAmBnkI,OAAnB,CAAlB;AAAA,QACMylC,GAAG,GAAG63F,GAAG,CAACzvF,IADhB;AAGA,SAAOyvF,GAAG,CAAC8G,SAAJ,GACH,KAAK/0F,IAAL,CAAU5J,GAAV,CADG,GAEH,KAAKoP,IAAL,CAAUpP,GAAV,EAAezlC,OAAf,CAFJ;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe+jI,QAAf,CAAwBI,GAAxB,EAA6BnkI,OAA7B,EAAsC;AACpCA,EAAAA,OAAO,GAAG,sBAAO,EAAP,EAAW,KAAKA,OAAhB,EAAyBA,OAAzB,CAAV;AAEA,QAAMgkI,UAAU,GAAG,KAAKA,UAAxB;AAAA,QACMz1M,MAAM,GAAG;AAACs/G,IAAAA,IAAI,EAAE;AAAP,GADf;AAGA,MAAIw2F,MAAJ,EAAYC,QAAZ,EAAsBjwK,IAAtB;AAEA,QAAMkwK,SAAS,GAAGX,UAAU,CAAC5sL,IAAX,CAAgBmtL,GAAG,CAACv3M,OAAJ,CAAYi3M,aAAZ,EAA2B,EAA3B,CAAhB,CAAlB;;AAEA,MAAIM,GAAG,IAAI,IAAP,IAAe,OAAOA,GAAP,KAAe,QAA9B,IAA0C,CAACI,SAA/C,EAA0D;AACxD,yBAAM,oCAAoC,2BAAYJ,GAAZ,CAA1C;AACD;;AAED,QAAMK,WAAW,GAAGb,WAAW,CAAC3sL,IAAZ,CAAiBmtL,GAAjB,CAApB,CAdoC,CAgBpC;;AACA,MAAI,CAAC9vK,IAAI,GAAG2rC,OAAO,CAACykI,OAAhB,KAA4B,CAACD,WAAjC,EAA8C;AAC5C;AACA,QAAI,CAACL,GAAG,CAACt6F,UAAJ,CAAe,GAAf,CAAD,IAAwBx1E,IAAI,CAACA,IAAI,CAAC1rC,MAAL,GAAY,CAAb,CAAJ,KAAwB,GAApD,EAAyD;AACvDw7M,MAAAA,GAAG,GAAG,MAAMA,GAAZ;AACD;;AACDA,IAAAA,GAAG,GAAG9vK,IAAI,GAAG8vK,GAAb;AACD,GAvBmC,CAyBpC;;;AACAG,EAAAA,QAAQ,GAAG,CAACD,MAAM,GAAGF,GAAG,CAACt6F,UAAJ,CAAei6F,YAAf,CAAV,KACN9jI,OAAO,CAACmoD,IAAR,KAAiB,MADX,IAENnoD,OAAO,CAACmoD,IAAR,KAAiB,MAAjB,IAA2B,CAACq8E,WAA5B,IAA2CR,UAFhD;;AAIA,MAAIK,MAAJ,EAAY;AACV;AACAF,IAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAUoxM,YAAY,CAACn7M,MAAvB,CAAN;AACD,GAHD,MAGO,IAAIw7M,GAAG,CAACt6F,UAAJ,CAAe,IAAf,CAAJ,EAA0B;AAC/B,QAAI7pC,OAAO,CAAC0kI,eAAR,KAA4B,MAAhC,EAAwC;AACtC;AACAP,MAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAU,CAAV,CAAN;AACA4xM,MAAAA,QAAQ,GAAG,IAAX;AACD,KAJD,MAIO;AACL;AACAH,MAAAA,GAAG,GAAG,CAACnkI,OAAO,CAAC0kI,eAAR,IAA2B,MAA5B,IAAsC,GAAtC,GAA4CP,GAAlD;AACD;AACF,GA1CmC,CA4CpC;;;AACA/3M,EAAAA,MAAM,CAACub,cAAP,CAAsBpZ,MAAtB,EAA8B,WAA9B,EAA2C;AAAClC,IAAAA,KAAK,EAAE,CAAC,CAACi4M;AAAV,GAA3C,EA7CoC,CA+CpC;;AACA/1M,EAAAA,MAAM,CAACs/G,IAAP,GAAcs2F,GAAd,CAhDoC,CAkDpC;;AACA,MAAInkI,OAAO,CAACpgC,MAAZ,EAAoB;AAClBrxC,IAAAA,MAAM,CAACqxC,MAAP,GAAgBogC,OAAO,CAACpgC,MAAR,GAAiB,EAAjC;AACD,GArDmC,CAuDpC;;;AACA,MAAIogC,OAAO,CAAC2kI,GAAZ,EAAiB;AACfp2M,IAAAA,MAAM,CAACo2M,GAAP,GAAa3kI,OAAO,CAAC2kI,GAAR,GAAc,EAA3B;AACD,GA1DmC,CA4DpC;AACA;;;AACA,MAAI3kI,OAAO,CAACq7F,OAAR,KAAoB,OAApB,IAA+Br7F,OAAO,CAAC4kI,WAA3C,EAAwD;AACtDr2M,IAAAA,MAAM,CAACq2M,WAAP,GAAqB5kI,OAAO,CAAC4kI,WAAR,GAAsB,EAA3C;AACD,GAhEmC,CAkEpC;;;AACA,SAAOr2M,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS01M,UAAT,CAAoB1jB,EAApB,EAAwB;AACtB,SAAOA,EAAE,GACLskB,QAAQ,IAAI,IAAI7yM,OAAJ,CAAY,CAAC8yM,MAAD,EAAS5yM,MAAT,KAAoB;AAC1CquL,IAAAA,EAAE,CAACwkB,QAAH,CAAYF,QAAZ,EAAsB,CAACn3L,KAAD,EAAQrV,IAAR,KAAiB;AACrC,UAAIqV,KAAJ,EAAWxb,MAAM,CAACwb,KAAD,CAAN,CAAX,KACKo3L,MAAM,CAACzsM,IAAD,CAAN;AACN,KAHD;AAID,GALW,CADP,GAOL2sM,UAPJ;AAQD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,wBAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASd,UAAT,CAAoBtsM,KAApB,EAA2B;AACzB,SAAOA,KAAK,GACR,gBAAe6tG,GAAf,EAAoBzlC,OAApB,EAA6B;AAC3B,UAAMs9H,GAAG,GAAG,sBAAO,EAAP,EAAW,KAAKt9H,OAAL,CAAa60C,IAAxB,EAA8B70C,OAA9B,CAAZ;AAAA,UACM12D,IAAI,GAAG02D,OAAO,IAAIA,OAAO,CAAC4wC,QADhC;AAAA,UAEMA,QAAQ,GAAG,MAAMh5G,KAAK,CAAC6tG,GAAD,EAAM63F,GAAN,CAF5B;AAIA,WAAO,CAAC1sF,QAAQ,CAAC6C,EAAV,GACH,qBAAM7C,QAAQ,CAACj1F,MAAT,GAAkB,EAAlB,GAAuBi1F,QAAQ,CAACivE,UAAtC,CADG,GAEH,0BAAWjvE,QAAQ,CAACtnG,IAAD,CAAnB,IAA6BsnG,QAAQ,CAACtnG,IAAD,CAAR,EAA7B,GACAsnG,QAAQ,CAAC7O,IAAT,EAHJ;AAID,GAVO,GAWRkjG,UAXJ;AAYD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,iCAAN;AACD;;;;;;;;;;;AC7LD;;AAEA,MAAMt9H,OAAO,GAAG33D,CAAC,IAAIA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAxC;;AAEA,MAAMpb,SAAS,GAAGob,CAAC,IAAIA,CAAC,KAAK,MAAN,IAClBA,CAAC,KAAK,OADY,IAElBA,CAAC,KAAK,IAFY,IAGlBA,CAAC,KAAK,KAHX;;AAKA,MAAMizL,MAAM,GAAGjzL,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAakrE,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAb,CAArB;;AAEA,MAAMnb,QAAQ,GAAGmb,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAa,CAAC+b,CAAd,CAAD,IAAqB,EAAEA,CAAC,YAAYmvD,IAAf,CAA3C;;AAEA,MAAMzoE,SAAS,GAAGsZ,CAAC,IAAInb,QAAQ,CAACmb,CAAD,CAAR,IAAevZ,MAAM,CAACC,SAAP,CAAiB,CAACsZ,CAAlB,CAAtC;;AAEO,MAAMk1L,WAAW,GAAG;AACzBC,EAAAA,OAAO,EAAE7B,mBADgB;AAEzB8B,EAAAA,OAAO,EAAErG,kBAFgB;AAGzBsG,EAAAA,MAAM,EAAGtG,kBAHgB;AAIzBY,EAAAA,IAAI,EAAK4D,gBAJgB;AAKzB+B,EAAAA,MAAM,EAAGtsM,kBALgB;AAMzBkrJ,EAAAA,OAAO,EAAE56B;AANgB,CAApB;;AASP,MAAMi8E,SAAS,GAAG,CAChB3wM,SADgB,EAEhB8B,SAFgB,EAGhB7B,QAHgB,EAIhBouM,MAJgB,CAAlB;AAOA,MAAMuC,QAAQ,GAAG,CACf,SADe,EAEf,SAFe,EAGf,QAHe,EAIf,MAJe,CAAjB;;AAOO,SAASC,SAAT,CAAmBhyM,MAAnB,EAA2BorH,KAA3B,EAAkC;AACvC,MAAI,CAACprH,MAAD,IAAW,CAACA,MAAM,CAAC9K,MAAvB,EAA+B,OAAO,SAAP;AAE/B,QAAM4O,CAAC,GAAG9D,MAAM,CAAC9K,MAAjB;AAAA,QACMm4F,CAAC,GAAGykH,SAAS,CAAC58M,MADpB;AAAA,QAEM4H,CAAC,GAAGg1M,SAAS,CAACzyM,GAAV,CAAc,CAACkd,CAAD,EAAI3mB,CAAJ,KAAUA,CAAC,GAAG,CAA5B,CAFV;;AAIA,OAAK,IAAIA,CAAC,GAAG,CAAR,EAAW0D,CAAC,GAAG,CAAf,EAAkBuG,CAAlB,EAAqBjH,KAA1B,EAAiChD,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CgD,IAAAA,KAAK,GAAGwyH,KAAK,GAAGprH,MAAM,CAACpK,CAAD,CAAN,CAAUw1H,KAAV,CAAH,GAAsBprH,MAAM,CAACpK,CAAD,CAAzC;;AACA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB,UAAI/C,CAAC,CAAC+C,CAAD,CAAD,IAAQq0E,OAAO,CAACt7E,KAAD,CAAf,IAA0B,CAACk5M,SAAS,CAACjyM,CAAD,CAAT,CAAajH,KAAb,CAA/B,EAAoD;AAClDkE,QAAAA,CAAC,CAAC+C,CAAD,CAAD,GAAO,CAAP;AACA,UAAEvG,CAAF;AACA,YAAIA,CAAC,KAAKw4M,SAAS,CAAC58M,MAApB,EAA4B,OAAO,QAAP;AAC7B;AACF;AACF;;AAED,SAAO68M,QAAQ,CACbj1M,CAAC,CAACqF,MAAF,CAAS,CAACyyE,CAAD,EAAI9sE,CAAJ,KAAU8sE,CAAC,KAAK,CAAN,GAAU9sE,CAAV,GAAc8sE,CAAjC,EAAoC,CAApC,IAAyC,CAD5B,CAAf;AAGD;;AAEM,SAASq9H,UAAT,CAAoBrtM,IAApB,EAA0B8uC,MAA1B,EAAkC;AACvC,SAAOA,MAAM,CAACvxC,MAAP,CAAc,CAAC+vM,KAAD,EAAQ9mF,KAAR,KAAkB;AACrC8mF,IAAAA,KAAK,CAAC9mF,KAAD,CAAL,GAAe4mF,SAAS,CAACptM,IAAD,EAAOwmH,KAAP,CAAxB;AACA,WAAO8mF,KAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;;;;;;;AClED,IAAIC,GAAG,GAAG,EAAV;AAAA,IACIC,GAAG,GAAG,EADV;AAAA,IAEIC,KAAK,GAAG,EAFZ;AAAA,IAGIC,OAAO,GAAG,EAHd;AAAA,IAIIC,MAAM,GAAG,EAJb;;AAMA,SAASC,eAAT,CAAyBppM,OAAzB,EAAkC;AAChC,SAAO,IAAIgM,QAAJ,CAAa,GAAb,EAAkB,aAAahM,OAAO,CAAC/J,GAAR,CAAY,UAASlI,IAAT,EAAevB,CAAf,EAAkB;AAClE,WAAOiiD,IAAI,CAACE,SAAL,CAAe5gD,IAAf,IAAuB,MAAvB,GAAgCvB,CAAhC,GAAoC,WAA3C;AACD,GAFqC,EAEnC4D,IAFmC,CAE9B,GAF8B,CAAb,GAEV,GAFR,CAAP;AAGD;;AAED,SAASi5M,eAAT,CAAyBrpM,OAAzB,EAAkC7H,CAAlC,EAAqC;AACnC,MAAI07L,MAAM,GAAGuV,eAAe,CAACppM,OAAD,CAA5B;AACA,SAAO,UAAS7C,GAAT,EAAc3Q,CAAd,EAAiB;AACtB,WAAO2L,CAAC,CAAC07L,MAAM,CAAC12L,GAAD,CAAP,EAAc3Q,CAAd,EAAiBwT,OAAjB,CAAR;AACD,GAFD;AAGD,EAED;;;AACA,SAASspM,YAAT,CAAsBvpM,IAAtB,EAA4B;AAC1B,MAAIwpM,SAAS,GAAGh6M,MAAM,CAAC60L,MAAP,CAAc,IAAd,CAAhB;AAAA,MACIpkL,OAAO,GAAG,EADd;AAGAD,EAAAA,IAAI,CAACzP,OAAL,CAAa,UAAS6M,GAAT,EAAc;AACzB,SAAK,IAAIqsM,MAAT,IAAmBrsM,GAAnB,EAAwB;AACtB,UAAI,EAAEqsM,MAAM,IAAID,SAAZ,CAAJ,EAA4B;AAC1BvpM,QAAAA,OAAO,CAACvT,IAAR,CAAa88M,SAAS,CAACC,MAAD,CAAT,GAAoBA,MAAjC;AACD;AACF;AACF,GAND;AAQA,SAAOxpM,OAAP;AACD;;AAED,SAASzB,GAAT,CAAa/O,KAAb,EAAoBkF,KAApB,EAA2B;AACzB,MAAI1E,CAAC,GAAGR,KAAK,GAAG,EAAhB;AAAA,MAAoB1D,MAAM,GAAGkE,CAAC,CAAClE,MAA/B;AACA,SAAOA,MAAM,GAAG4I,KAAT,GAAiB,IAAIpI,KAAJ,CAAUoI,KAAK,GAAG5I,MAAR,GAAiB,CAA3B,EAA8BsE,IAA9B,CAAmC,CAAnC,IAAwCJ,CAAzD,GAA6DA,CAApE;AACD;;AAED,SAASy5M,UAAT,CAAoBC,IAApB,EAA0B;AACxB,SAAOA,IAAI,GAAG,CAAP,GAAW,MAAMnrM,GAAG,CAAC,CAACmrM,IAAF,EAAQ,CAAR,CAApB,GACHA,IAAI,GAAG,IAAP,GAAc,MAAMnrM,GAAG,CAACmrM,IAAD,EAAO,CAAP,CAAvB,GACAnrM,GAAG,CAACmrM,IAAD,EAAO,CAAP,CAFP;AAGD;;AAED,SAASC,UAAT,CAAoB7G,IAApB,EAA0B;AACxB,MAAI8G,KAAK,GAAG9G,IAAI,CAAC+G,WAAL,EAAZ;AAAA,MACIC,OAAO,GAAGhH,IAAI,CAACiH,aAAL,EADd;AAAA,MAEIC,OAAO,GAAGlH,IAAI,CAACmH,aAAL,EAFd;AAAA,MAGIC,YAAY,GAAGpH,IAAI,CAACqH,kBAAL,EAHnB;AAIA,SAAO/yM,KAAK,CAAC0rM,IAAD,CAAL,GAAc,cAAd,GACD2G,UAAU,CAAC3G,IAAI,CAACsH,cAAL,EAAD,EAAwB,CAAxB,CAAV,GAAuC,GAAvC,GAA6C7rM,GAAG,CAACukM,IAAI,CAACG,WAAL,KAAqB,CAAtB,EAAyB,CAAzB,CAAhD,GAA8E,GAA9E,GAAoF1kM,GAAG,CAACukM,IAAI,CAACuH,UAAL,EAAD,EAAoB,CAApB,CAAvF,IACCH,YAAY,GAAG,MAAM3rM,GAAG,CAACqrM,KAAD,EAAQ,CAAR,CAAT,GAAsB,GAAtB,GAA4BrrM,GAAG,CAACurM,OAAD,EAAU,CAAV,CAA/B,GAA8C,GAA9C,GAAoDvrM,GAAG,CAACyrM,OAAD,EAAU,CAAV,CAAvD,GAAsE,GAAtE,GAA4EzrM,GAAG,CAAC2rM,YAAD,EAAe,CAAf,CAA/E,GAAmG,GAAtG,GACbF,OAAO,GAAG,MAAMzrM,GAAG,CAACqrM,KAAD,EAAQ,CAAR,CAAT,GAAsB,GAAtB,GAA4BrrM,GAAG,CAACurM,OAAD,EAAU,CAAV,CAA/B,GAA8C,GAA9C,GAAoDvrM,GAAG,CAACyrM,OAAD,EAAU,CAAV,CAAvD,GAAsE,GAAzE,GACPF,OAAO,IAAIF,KAAX,GAAmB,MAAMrrM,GAAG,CAACqrM,KAAD,EAAQ,CAAR,CAAT,GAAsB,GAAtB,GAA4BrrM,GAAG,CAACurM,OAAD,EAAU,CAAV,CAA/B,GAA8C,GAAjE,GACA,EAJA,CADN;AAMD;;AAEc,kBAAStuB,SAAT,EAAoB;AACjC,MAAI8uB,QAAQ,GAAG,IAAInjF,MAAJ,CAAW,QAAQq0D,SAAR,GAAoB,OAA/B,CAAf;AAAA,MACI+uB,SAAS,GAAG/uB,SAAS,CAACv6G,UAAV,CAAqB,CAArB,CADhB;;AAGA,WAASvyB,KAAT,CAAew2D,IAAf,EAAqB/sG,CAArB,EAAwB;AACtB,QAAIqyM,OAAJ;AAAA,QAAaxqM,OAAb;AAAA,QAAsBD,IAAI,GAAG0qM,SAAS,CAACvlG,IAAD,EAAO,UAAS/nG,GAAT,EAAc3Q,CAAd,EAAiB;AAC5D,UAAIg+M,OAAJ,EAAa,OAAOA,OAAO,CAACrtM,GAAD,EAAM3Q,CAAC,GAAG,CAAV,CAAd;AACbwT,MAAAA,OAAO,GAAG7C,GAAV,EAAeqtM,OAAO,GAAGryM,CAAC,GAAGkxM,eAAe,CAAClsM,GAAD,EAAMhF,CAAN,CAAlB,GAA6BixM,eAAe,CAACjsM,GAAD,CAAtE;AACD,KAHqC,CAAtC;AAIA4C,IAAAA,IAAI,CAACC,OAAL,GAAeA,OAAO,IAAI,EAA1B;AACA,WAAOD,IAAP;AACD;;AAED,WAAS0qM,SAAT,CAAmBvlG,IAAnB,EAAyB/sG,CAAzB,EAA4B;AAC1B,QAAI4H,IAAI,GAAG,EAAX;AAAA,QAAe;AACX8kF,IAAAA,CAAC,GAAGqgB,IAAI,CAACp5G,MADb;AAAA,QAEI4+M,CAAC,GAAG,CAFR;AAAA,QAEW;AACPhwM,IAAAA,CAAC,GAAG,CAHR;AAAA,QAGW;AACPxK,IAAAA,CAJJ;AAAA,QAIO;AACHy6M,IAAAA,GAAG,GAAG9lH,CAAC,IAAI,CALf;AAAA,QAKkB;AACd+lH,IAAAA,GAAG,GAAG,KANV,CAD0B,CAOT;AAEjB;;AACA,QAAI1lG,IAAI,CAACjkC,UAAL,CAAgB4jB,CAAC,GAAG,CAApB,MAA2BqkH,OAA/B,EAAwC,EAAErkH,CAAF;AACxC,QAAIqgB,IAAI,CAACjkC,UAAL,CAAgB4jB,CAAC,GAAG,CAApB,MAA2BskH,MAA/B,EAAuC,EAAEtkH,CAAF;;AAEvC,aAASgmH,KAAT,GAAiB;AACf,UAAIF,GAAJ,EAAS,OAAO3B,GAAP;AACT,UAAI4B,GAAJ,EAAS,OAAOA,GAAG,GAAG,KAAN,EAAa7B,GAApB,CAFM,CAIf;;AACA,UAAIv8M,CAAJ;AAAA,UAAOiK,CAAC,GAAGi0M,CAAX;AAAA,UAAczxM,CAAd;;AACA,UAAIisG,IAAI,CAACjkC,UAAL,CAAgBxqE,CAAhB,MAAuBwyM,KAA3B,EAAkC;AAChC,eAAOyB,CAAC,KAAK7lH,CAAN,IAAWqgB,IAAI,CAACjkC,UAAL,CAAgBypI,CAAhB,MAAuBzB,KAAlC,IAA2C/jG,IAAI,CAACjkC,UAAL,CAAgB,EAAEypI,CAAlB,MAAyBzB,KAA3E,CAAiF;;AACjF,YAAI,CAACz8M,CAAC,GAAGk+M,CAAL,KAAW7lH,CAAf,EAAkB8lH,GAAG,GAAG,IAAN,CAAlB,KACK,IAAI,CAAC1xM,CAAC,GAAGisG,IAAI,CAACjkC,UAAL,CAAgBypI,CAAC,EAAjB,CAAL,MAA+BxB,OAAnC,EAA4C0B,GAAG,GAAG,IAAN,CAA5C,KACA,IAAI3xM,CAAC,KAAKkwM,MAAV,EAAkB;AAAEyB,UAAAA,GAAG,GAAG,IAAN;AAAY,cAAI1lG,IAAI,CAACjkC,UAAL,CAAgBypI,CAAhB,MAAuBxB,OAA3B,EAAoC,EAAEwB,CAAF;AAAM;AAC/E,eAAOxlG,IAAI,CAACrvG,KAAL,CAAWY,CAAC,GAAG,CAAf,EAAkBjK,CAAC,GAAG,CAAtB,EAAyBuD,OAAzB,CAAiC,KAAjC,EAAwC,IAAxC,CAAP;AACD,OAZc,CAcf;;;AACA,aAAO26M,CAAC,GAAG7lH,CAAX,EAAc;AACZ,YAAI,CAAC5rF,CAAC,GAAGisG,IAAI,CAACjkC,UAAL,CAAgBz0E,CAAC,GAAGk+M,CAAC,EAArB,CAAL,MAAmCxB,OAAvC,EAAgD0B,GAAG,GAAG,IAAN,CAAhD,KACK,IAAI3xM,CAAC,KAAKkwM,MAAV,EAAkB;AAAEyB,UAAAA,GAAG,GAAG,IAAN;AAAY,cAAI1lG,IAAI,CAACjkC,UAAL,CAAgBypI,CAAhB,MAAuBxB,OAA3B,EAAoC,EAAEwB,CAAF;AAAM,SAA1E,MACA,IAAIzxM,CAAC,KAAKsxM,SAAV,EAAqB;AAC1B,eAAOrlG,IAAI,CAACrvG,KAAL,CAAWY,CAAX,EAAcjK,CAAd,CAAP;AACD,OApBc,CAsBf;;;AACA,aAAOm+M,GAAG,GAAG,IAAN,EAAYzlG,IAAI,CAACrvG,KAAL,CAAWY,CAAX,EAAcouF,CAAd,CAAnB;AACD;;AAED,WAAO,CAAC30F,CAAC,GAAG26M,KAAK,EAAV,MAAkB7B,GAAzB,EAA8B;AAC5B,UAAI7rM,GAAG,GAAG,EAAV;;AACA,aAAOjN,CAAC,KAAK64M,GAAN,IAAa74M,CAAC,KAAK84M,GAA1B,EAA+B7rM,GAAG,CAAC1Q,IAAJ,CAASyD,CAAT,GAAaA,CAAC,GAAG26M,KAAK,EAAtB;;AAC/B,UAAI1yM,CAAC,IAAI,CAACgF,GAAG,GAAGhF,CAAC,CAACgF,GAAD,EAAMzC,CAAC,EAAP,CAAR,KAAuB,IAAhC,EAAsC;AACtCqF,MAAAA,IAAI,CAACtT,IAAL,CAAU0Q,GAAV;AACD;;AAED,WAAO4C,IAAP;AACD;;AAED,WAAS+qM,aAAT,CAAuB/qM,IAAvB,EAA6BC,OAA7B,EAAsC;AACpC,WAAOD,IAAI,CAAC9J,GAAL,CAAS,UAASkH,GAAT,EAAc;AAC5B,aAAO6C,OAAO,CAAC/J,GAAR,CAAY,UAASuzM,MAAT,EAAiB;AAClC,eAAOuB,WAAW,CAAC5tM,GAAG,CAACqsM,MAAD,CAAJ,CAAlB;AACD,OAFM,EAEJp5M,IAFI,CAECorL,SAFD,CAAP;AAGD,KAJM,CAAP;AAKD;;AAED,WAASzsE,MAAT,CAAgBhvG,IAAhB,EAAsBC,OAAtB,EAA+B;AAC7B,QAAIA,OAAO,IAAI,IAAf,EAAqBA,OAAO,GAAGspM,YAAY,CAACvpM,IAAD,CAAtB;AACrB,WAAO,CAACC,OAAO,CAAC/J,GAAR,CAAY80M,WAAZ,EAAyB36M,IAAzB,CAA8BorL,SAA9B,CAAD,EAA2CzvL,MAA3C,CAAkD++M,aAAa,CAAC/qM,IAAD,EAAOC,OAAP,CAA/D,EAAgF5P,IAAhF,CAAqF,IAArF,CAAP;AACD;;AAED,WAAS46M,UAAT,CAAoBjrM,IAApB,EAA0BC,OAA1B,EAAmC;AACjC,QAAIA,OAAO,IAAI,IAAf,EAAqBA,OAAO,GAAGspM,YAAY,CAACvpM,IAAD,CAAtB;AACrB,WAAO+qM,aAAa,CAAC/qM,IAAD,EAAOC,OAAP,CAAb,CAA6B5P,IAA7B,CAAkC,IAAlC,CAAP;AACD;;AAED,WAAS66M,UAAT,CAAoBlrM,IAApB,EAA0B;AACxB,WAAOA,IAAI,CAAC9J,GAAL,CAASi1M,SAAT,EAAoB96M,IAApB,CAAyB,IAAzB,CAAP;AACD;;AAED,WAAS86M,SAAT,CAAmB/tM,GAAnB,EAAwB;AACtB,WAAOA,GAAG,CAAClH,GAAJ,CAAQ80M,WAAR,EAAqB36M,IAArB,CAA0BorL,SAA1B,CAAP;AACD;;AAED,WAASuvB,WAAT,CAAqBv7M,KAArB,EAA4B;AAC1B,WAAOA,KAAK,IAAI,IAAT,GAAgB,EAAhB,GACDA,KAAK,YAAY8yE,IAAjB,GAAwBqnI,UAAU,CAACn6M,KAAD,CAAlC,GACA86M,QAAQ,CAACnwL,IAAT,CAAc3qB,KAAK,IAAI,EAAvB,IAA6B,OAAOA,KAAK,CAACO,OAAN,CAAc,IAAd,EAAoB,MAApB,CAAP,GAAqC,IAAlE,GACAP,KAHN;AAID;;AAED,SAAO;AACLk/C,IAAAA,KAAK,EAAEA,KADF;AAEL+7J,IAAAA,SAAS,EAAEA,SAFN;AAGL17F,IAAAA,MAAM,EAAEA,MAHH;AAILi8F,IAAAA,UAAU,EAAEA,UAJP;AAKLC,IAAAA,UAAU,EAAEA,UALP;AAMLC,IAAAA,SAAS,EAAEA,SANN;AAOLH,IAAAA,WAAW,EAAEA;AAPR,GAAP;AASD;;;;;;;;;ACnKD;;;;AAEA,IAAIhnB,GAAG,GAAG,kBAAI,GAAJ,CAAV;AAEO,IAAIonB,QAAQ,GAAGpnB,GAAG,CAACr1I,KAAnB;;AACA,IAAI08J,YAAY,GAAGrnB,GAAG,CAAC0mB,SAAvB;;AACA,IAAIY,SAAS,GAAGtnB,GAAG,CAACh1E,MAApB;;AACA,IAAIu8F,aAAa,GAAGvnB,GAAG,CAACinB,UAAxB;;AACA,IAAIO,aAAa,GAAGxnB,GAAG,CAACknB,UAAxB;;AACA,IAAIO,YAAY,GAAGznB,GAAG,CAACmnB,SAAvB;;AACA,IAAIO,cAAc,GAAG1nB,GAAG,CAACgnB,WAAzB;;;;;;;;;;ACVP;;;;AAEA,IAAIW,GAAG,GAAG,kBAAI,IAAJ,CAAV;AAEO,IAAIC,QAAQ,GAAGD,GAAG,CAACh9J,KAAnB;;AACA,IAAIk9J,YAAY,GAAGF,GAAG,CAACjB,SAAvB;;AACA,IAAIoB,SAAS,GAAGH,GAAG,CAAC38F,MAApB;;AACA,IAAI+8F,aAAa,GAAGJ,GAAG,CAACV,UAAxB;;AACA,IAAIe,aAAa,GAAGL,GAAG,CAACT,UAAxB;;AACA,IAAIe,YAAY,GAAGN,GAAG,CAACR,SAAvB;;AACA,IAAIe,cAAc,GAAGP,GAAG,CAACX,WAAzB;;;;;;;;;;ACVQ,SAASmB,QAAT,CAAkBrY,MAAlB,EAA0B;AACvC,OAAK,IAAIpjM,GAAT,IAAgBojM,MAAhB,EAAwB;AACtB,QAAIrkM,KAAK,GAAGqkM,MAAM,CAACpjM,GAAD,CAAN,CAAYg3G,IAAZ,EAAZ;AAAA,QAAgC+gG,MAAhC;AAAA,QAAwCvkH,CAAxC;AACA,QAAI,CAACz0F,KAAL,EAAYA,KAAK,GAAG,IAAR,CAAZ,KACK,IAAIA,KAAK,KAAK,MAAd,EAAsBA,KAAK,GAAG,IAAR,CAAtB,KACA,IAAIA,KAAK,KAAK,OAAd,EAAuBA,KAAK,GAAG,KAAR,CAAvB,KACA,IAAIA,KAAK,KAAK,KAAd,EAAqBA,KAAK,GAAGuvE,GAAR,CAArB,KACA,IAAI,CAAC3nE,KAAK,CAACoxM,MAAM,GAAG,CAACh5M,KAAX,CAAV,EAA6BA,KAAK,GAAGg5M,MAAR,CAA7B,KACA,IAAIvkH,CAAC,GAAGz0F,KAAK,CAACooH,KAAN,CAAY,6FAAZ,CAAR,EAAoH;AACvH,UAAIu0F,KAAK,IAAI,CAAC,CAACloH,CAAC,CAAC,CAAD,CAAZ,IAAmB,CAACA,CAAC,CAAC,CAAD,CAAzB,EAA8Bz0F,KAAK,GAAGA,KAAK,CAACO,OAAN,CAAc,IAAd,EAAoB,GAApB,EAAyBA,OAAzB,CAAiC,GAAjC,EAAsC,GAAtC,CAAR;AAC9BP,MAAAA,KAAK,GAAG,IAAI8yE,IAAJ,CAAS9yE,KAAT,CAAR;AACD,KAHI,MAIA;AACLqkM,IAAAA,MAAM,CAACpjM,GAAD,CAAN,GAAcjB,KAAd;AACD;;AACD,SAAOqkM,MAAP;AACD,EAED;;;AACA,MAAMsY,KAAK,GAAG,IAAI7pI,IAAJ,CAAS,kBAAT,EAA6B8pI,QAA7B,MAA2C,IAAI9pI,IAAJ,CAAS,kBAAT,EAA6B8pI,QAA7B,EAAzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;;AACA;;AACA;;AACA;;;;;;;;;;;;ACHA;;AACA;;AAEO,SAASC,eAAT,CAAyB7wB,SAAzB,EAAoC;AACzC,QAAM9sI,KAAK,GAAG,UAASlzC,IAAT,EAAeuzG,MAAf,EAAuB;AACnC,UAAMu9F,KAAK,GAAG;AAAC9wB,MAAAA,SAAS,EAAEA;AAAZ,KAAd;AACA,WAAO+wB,GAAG,CAAC/wM,IAAD,EAAOuzG,MAAM,GAAG,sBAAOA,MAAP,EAAeu9F,KAAf,CAAH,GAA2BA,KAAxC,CAAV;AACD,GAHD;;AAKA59J,EAAAA,KAAK,CAAC89J,YAAN,GAAqB,MAArB;AAEA,SAAO99J,KAAP;AACD;;AAEc,SAAS69J,GAAT,CAAa/wM,IAAb,EAAmBuzG,MAAnB,EAA2B;AACxC,MAAIA,MAAM,CAAC09F,MAAX,EAAmB;AACjBjxM,IAAAA,IAAI,GAAGuzG,MAAM,CAAC09F,MAAP,CACJx2M,GADI,CACAy2M,qBADA,EAEJt8M,IAFI,CAEC2+G,MAAM,CAACysE,SAFR,IAEqB,IAFrB,GAE4BhgL,IAFnC;AAGD;;AACD,SAAO,sBAAUuzG,MAAM,CAACysE,SAAjB,EAA4B9sI,KAA5B,CAAkClzC,IAAI,GAAG,EAAzC,CAAP;AACD;;AAED+wM,GAAG,CAACC,YAAJ,GAAmB,MAAnB;;;;;;;;;;ACvBA;;AAIA,SAASG,QAAT,CAAkBx5L,CAAlB,EAAqB;AACnB,SAAQ,OAAO6zF,MAAP,KAAkB,UAAlB,IAAgC,0BAAWA,MAAM,CAAC2lG,QAAlB,CAAjC,GACH3lG,MAAM,CAAC2lG,QAAP,CAAgBx5L,CAAhB,CADG,GACkB,KADzB;AAED;;AAEc,SAAS4jG,IAAT,CAAcv7G,IAAd,EAAoBuzG,MAApB,EAA4B;AACzC,QAAMxrC,IAAI,GAAIwrC,MAAM,IAAIA,MAAM,CAACg1F,QAAlB,GAA8B,qBAAMh1F,MAAM,CAACg1F,QAAb,CAA9B,GAAuDt3E,kBAApE;AACA,SAAO,wBAASjxH,IAAT,KAAkB,CAACmxM,QAAQ,CAACnxM,IAAD,CAA3B,GACHoxM,SAAS,CAACrpI,IAAI,CAAC/nE,IAAD,CAAL,EAAauzG,MAAb,CADN,GAEHxrC,IAAI,CAAC90B,IAAI,CAACC,KAAL,CAAWlzC,IAAX,CAAD,CAFR;AAGD;;AAEDu7G,IAAI,CAACy1F,YAAL,GAAoB,MAApB;;AAEA,SAASI,SAAT,CAAmBpxM,IAAnB,EAAyBuzG,MAAzB,EAAiC;AAC/B,MAAI,CAAC,uBAAQvzG,IAAR,CAAD,IAAkB,0BAAWA,IAAX,CAAtB,EAAwC;AACtCA,IAAAA,IAAI,GAAG,CAAC,GAAGA,IAAJ,CAAP;AACD;;AACD,SAAQuzG,MAAM,IAAIA,MAAM,CAACztC,IAAlB,GACH7yB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAenzC,IAAf,CAAX,CADG,GAEHA,IAFJ;AAGD;;;;;;;;;ACzBc,kBAAS7I,CAAT,EAAY;AACzB,SAAOA,CAAP;AACD;;;;;;;;;ACFD;;;;AAEe,kBAAS8iL,SAAT,EAAoB;AACjC,MAAIA,SAAS,IAAI,IAAjB,EAAuB,OAAOhpD,iBAAP;AACvB,MAAIogF,EAAJ;AAAA,MACIC,EADJ;AAAA,MAEIC,EAAE,GAAGt3B,SAAS,CAACpzK,KAAV,CAAgB,CAAhB,CAFT;AAAA,MAGI2qM,EAAE,GAAGv3B,SAAS,CAACpzK,KAAV,CAAgB,CAAhB,CAHT;AAAA,MAIIiW,EAAE,GAAGm9J,SAAS,CAACw3B,SAAV,CAAoB,CAApB,CAJT;AAAA,MAKI37L,EAAE,GAAGmkK,SAAS,CAACw3B,SAAV,CAAoB,CAApB,CALT;AAMA,SAAO,UAASz1L,KAAT,EAAgBhrB,CAAhB,EAAmB;AACxB,QAAI,CAACA,CAAL,EAAQqgN,EAAE,GAAGC,EAAE,GAAG,CAAV;AACR,QAAIr2M,CAAC,GAAG,CAAR;AAAA,QAAWiE,CAAC,GAAG8c,KAAK,CAAC1rB,MAArB;AAAA,QAA6BoqB,MAAM,GAAG,IAAI5pB,KAAJ,CAAUoO,CAAV,CAAtC;AACAwb,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAC22L,EAAE,IAAIr1L,KAAK,CAAC,CAAD,CAAZ,IAAmBu1L,EAAnB,GAAwBz0L,EAApC;AACApC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAC42L,EAAE,IAAIt1L,KAAK,CAAC,CAAD,CAAZ,IAAmBw1L,EAAnB,GAAwB17L,EAApC;;AACA,WAAO7a,CAAC,GAAGiE,CAAX,EAAcwb,MAAM,CAACzf,CAAD,CAAN,GAAY+gB,KAAK,CAAC/gB,CAAD,CAAjB,EAAsB,EAAEA,CAAxB;;AACd,WAAOyf,MAAP;AACD,GAPD;AAQD;;;;;;;;;AClBD;;;;AAEe,kBAASo4F,QAAT,EAAmB;AAChC,MAAIp+G,CAAC,GAAG,wBAAUo+G,QAAQ,CAACmnE,SAAnB,CAAR;AAAA,MAAuChlL,GAAvC;AAAA,MACIo8M,EAAE,GAAGv4M,QADT;AAAA,MACmBw4M,EAAE,GAAGD,EADxB;AAAA,MAC4B5tG,EAAE,GAAG,CAAC4tG,EADlC;AAAA,MACsC7tG,EAAE,GAAG,CAAC6tG,EAD5C;;AAGA,WAASK,SAAT,CAAmBp8K,CAAnB,EAAsB;AACpBA,IAAAA,CAAC,GAAG5gC,CAAC,CAAC4gC,CAAD,CAAL;AACA,QAAIA,CAAC,CAAC,CAAD,CAAD,GAAO+7K,EAAX,EAAeA,EAAE,GAAG/7K,CAAC,CAAC,CAAD,CAAN;AACf,QAAIA,CAAC,CAAC,CAAD,CAAD,GAAOmuE,EAAX,EAAeA,EAAE,GAAGnuE,CAAC,CAAC,CAAD,CAAN;AACf,QAAIA,CAAC,CAAC,CAAD,CAAD,GAAOg8K,EAAX,EAAeA,EAAE,GAAGh8K,CAAC,CAAC,CAAD,CAAN;AACf,QAAIA,CAAC,CAAC,CAAD,CAAD,GAAOkuE,EAAX,EAAeA,EAAE,GAAGluE,CAAC,CAAC,CAAD,CAAN;AAChB;;AAED,WAASq8K,YAAT,CAAsBh1L,CAAtB,EAAyB;AACvB,YAAQA,CAAC,CAAC1L,IAAV;AACE,WAAK,oBAAL;AAA2B0L,QAAAA,CAAC,CAACi1L,UAAF,CAAa98M,OAAb,CAAqB68M,YAArB;AAAoC;;AAC/D,WAAK,OAAL;AAAcD,QAAAA,SAAS,CAAC/0L,CAAC,CAACk1L,WAAH,CAAT;AAA0B;;AACxC,WAAK,YAAL;AAAmBl1L,QAAAA,CAAC,CAACk1L,WAAF,CAAc/8M,OAAd,CAAsB48M,SAAtB;AAAkC;AAHvD;AAKD;;AAED5+F,EAAAA,QAAQ,CAACg/F,IAAT,CAAch9M,OAAd,CAAsB,UAASi9M,GAAT,EAAc;AAClC,QAAI/gN,CAAC,GAAG,CAAC,CAAT;AAAA,QAAYkO,CAAC,GAAG6yM,GAAG,CAACzhN,MAApB;AAAA,QAA4BglC,CAA5B;;AACA,WAAO,EAAEtkC,CAAF,GAAMkO,CAAb,EAAgB;AACdo2B,MAAAA,CAAC,GAAG5gC,CAAC,CAACq9M,GAAG,CAAC/gN,CAAD,CAAJ,EAASA,CAAT,CAAL;AACA,UAAIskC,CAAC,CAAC,CAAD,CAAD,GAAO+7K,EAAX,EAAeA,EAAE,GAAG/7K,CAAC,CAAC,CAAD,CAAN;AACf,UAAIA,CAAC,CAAC,CAAD,CAAD,GAAOmuE,EAAX,EAAeA,EAAE,GAAGnuE,CAAC,CAAC,CAAD,CAAN;AACf,UAAIA,CAAC,CAAC,CAAD,CAAD,GAAOg8K,EAAX,EAAeA,EAAE,GAAGh8K,CAAC,CAAC,CAAD,CAAN;AACf,UAAIA,CAAC,CAAC,CAAD,CAAD,GAAOkuE,EAAX,EAAeA,EAAE,GAAGluE,CAAC,CAAC,CAAD,CAAN;AAChB;AACF,GATD;;AAWA,OAAKrgC,GAAL,IAAY69G,QAAQ,CAACk/F,OAArB,EAA8B;AAC5BL,IAAAA,YAAY,CAAC7+F,QAAQ,CAACk/F,OAAT,CAAiB/8M,GAAjB,CAAD,CAAZ;AACD;;AAED,SAAO,CAACo8M,EAAD,EAAKC,EAAL,EAAS7tG,EAAT,EAAaD,EAAb,CAAP;AACD;;;;;;;;;ACtCc,kBAASryG,KAAT,EAAgB+N,CAAhB,EAAmB;AAChC,MAAIxK,CAAJ;AAAA,MAAOuG,CAAC,GAAG9J,KAAK,CAACb,MAAjB;AAAA,MAAyBU,CAAC,GAAGiK,CAAC,GAAGiE,CAAjC;;AACA,SAAOlO,CAAC,GAAG,EAAEiK,CAAb,EAAgBvG,CAAC,GAAGvD,KAAK,CAACH,CAAD,CAAT,EAAcG,KAAK,CAACH,CAAC,EAAF,CAAL,GAAaG,KAAK,CAAC8J,CAAD,CAAhC,EAAqC9J,KAAK,CAAC8J,CAAD,CAAL,GAAWvG,CAAhD;AACjB;;;;;;;;;;ACHD;;AACA;;;;AAEe,kBAASo+G,QAAT,EAAmBn2F,CAAnB,EAAsB;AACnC,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2BA,CAAC,GAAGm2F,QAAQ,CAACk/F,OAAT,CAAiBr1L,CAAjB,CAAJ;AAC3B,SAAOA,CAAC,CAAC1L,IAAF,KAAW,oBAAX,GACD;AAACA,IAAAA,IAAI,EAAE,mBAAP;AAA4B4vK,IAAAA,QAAQ,EAAElkK,CAAC,CAACi1L,UAAF,CAAan3M,GAAb,CAAiB,UAASkiB,CAAT,EAAY;AAAE,aAAOs1L,OAAO,CAACn/F,QAAD,EAAWn2F,CAAX,CAAd;AAA8B,KAA7D;AAAtC,GADC,GAEDs1L,OAAO,CAACn/F,QAAD,EAAWn2F,CAAX,CAFb;AAGD;;AAED,SAASs1L,OAAT,CAAiBn/F,QAAjB,EAA2Bn2F,CAA3B,EAA8B;AAC5B,MAAI1Y,EAAE,GAAG0Y,CAAC,CAAC1Y,EAAX;AAAA,MACIiuM,IAAI,GAAGv1L,CAAC,CAACu1L,IADb;AAAA,MAEIC,UAAU,GAAGx1L,CAAC,CAACw1L,UAAF,IAAgB,IAAhB,GAAuB,EAAvB,GAA4Bx1L,CAAC,CAACw1L,UAF/C;AAAA,MAGIC,QAAQ,GAAG/Z,MAAM,CAACvlF,QAAD,EAAWn2F,CAAX,CAHrB;AAIA,SAAO1Y,EAAE,IAAI,IAAN,IAAciuM,IAAI,IAAI,IAAtB,GAA6B;AAACjhM,IAAAA,IAAI,EAAE,SAAP;AAAkBkhM,IAAAA,UAAU,EAAEA,UAA9B;AAA0CC,IAAAA,QAAQ,EAAEA;AAApD,GAA7B,GACDF,IAAI,IAAI,IAAR,GAAe;AAACjhM,IAAAA,IAAI,EAAE,SAAP;AAAkBhN,IAAAA,EAAE,EAAEA,EAAtB;AAA0BkuM,IAAAA,UAAU,EAAEA,UAAtC;AAAkDC,IAAAA,QAAQ,EAAEA;AAA5D,GAAf,GACA;AAACnhM,IAAAA,IAAI,EAAE,SAAP;AAAkBhN,IAAAA,EAAE,EAAEA,EAAtB;AAA0BiuM,IAAAA,IAAI,EAAEA,IAAhC;AAAsCC,IAAAA,UAAU,EAAEA,UAAlD;AAA8DC,IAAAA,QAAQ,EAAEA;AAAxE,GAFN;AAGD;;AAEM,SAAS/Z,MAAT,CAAgBvlF,QAAhB,EAA0Bn2F,CAA1B,EAA6B;AAClC,MAAI01L,cAAc,GAAG,wBAAUv/F,QAAQ,CAACmnE,SAAnB,CAArB;AAAA,MACI63B,IAAI,GAAGh/F,QAAQ,CAACg/F,IADpB;;AAGA,WAASC,GAAT,CAAa/gN,CAAb,EAAgBshN,MAAhB,EAAwB;AACtB,QAAIA,MAAM,CAAChiN,MAAX,EAAmBgiN,MAAM,CAACl3L,GAAP;;AACnB,SAAK,IAAIljB,CAAC,GAAG45M,IAAI,CAAC9gN,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAAd,CAAZ,EAA8Bsd,CAAC,GAAG,CAAlC,EAAqCpP,CAAC,GAAGhH,CAAC,CAAC5H,MAAhD,EAAwDge,CAAC,GAAGpP,CAA5D,EAA+D,EAAEoP,CAAjE,EAAoE;AAClEgkM,MAAAA,MAAM,CAACrhN,IAAP,CAAYohN,cAAc,CAACn6M,CAAC,CAACoW,CAAD,CAAF,EAAOA,CAAP,CAA1B;AACD;;AACD,QAAItd,CAAC,GAAG,CAAR,EAAW,sBAAQshN,MAAR,EAAgBpzM,CAAhB;AACZ;;AAED,WAASqzM,KAAT,CAAej9K,CAAf,EAAkB;AAChB,WAAO+8K,cAAc,CAAC/8K,CAAD,CAArB;AACD;;AAED,WAAS/P,IAAT,CAAcusL,IAAd,EAAoB;AAClB,QAAIQ,MAAM,GAAG,EAAb;;AACA,SAAK,IAAIthN,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4yM,IAAI,CAACxhN,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C+gN,GAAG,CAACD,IAAI,CAAC9gN,CAAD,CAAL,EAAUshN,MAAV,CAAH;;AAC7C,QAAIA,MAAM,CAAChiN,MAAP,GAAgB,CAApB,EAAuBgiN,MAAM,CAACrhN,IAAP,CAAYqhN,MAAM,CAAC,CAAD,CAAlB,EAHL,CAG6B;;AAC/C,WAAOA,MAAP;AACD;;AAED,WAASE,IAAT,CAAcV,IAAd,EAAoB;AAClB,QAAIQ,MAAM,GAAG/sL,IAAI,CAACusL,IAAD,CAAjB;;AACA,WAAOQ,MAAM,CAAChiN,MAAP,GAAgB,CAAvB,EAA0BgiN,MAAM,CAACrhN,IAAP,CAAYqhN,MAAM,CAAC,CAAD,CAAlB,EAFR,CAEgC;;;AAClD,WAAOA,MAAP;AACD;;AAED,WAASG,OAAT,CAAiBX,IAAjB,EAAuB;AACrB,WAAOA,IAAI,CAACr3M,GAAL,CAAS+3M,IAAT,CAAP;AACD;;AAED,WAASJ,QAAT,CAAkBz1L,CAAlB,EAAqB;AACnB,QAAI1L,IAAI,GAAG0L,CAAC,CAAC1L,IAAb;AAAA,QAAmB4gM,WAAnB;;AACA,YAAQ5gM,IAAR;AACE,WAAK,oBAAL;AAA2B,eAAO;AAACA,UAAAA,IAAI,EAAEA,IAAP;AAAa2gM,UAAAA,UAAU,EAAEj1L,CAAC,CAACi1L,UAAF,CAAan3M,GAAb,CAAiB23M,QAAjB;AAAzB,SAAP;;AAC3B,WAAK,OAAL;AAAcP,QAAAA,WAAW,GAAGU,KAAK,CAAC51L,CAAC,CAACk1L,WAAH,CAAnB;AAAoC;;AAClD,WAAK,YAAL;AAAmBA,QAAAA,WAAW,GAAGl1L,CAAC,CAACk1L,WAAF,CAAcp3M,GAAd,CAAkB83M,KAAlB,CAAd;AAAwC;;AAC3D,WAAK,YAAL;AAAmBV,QAAAA,WAAW,GAAGtsL,IAAI,CAAC5I,CAAC,CAACm1L,IAAH,CAAlB;AAA4B;;AAC/C,WAAK,iBAAL;AAAwBD,QAAAA,WAAW,GAAGl1L,CAAC,CAACm1L,IAAF,CAAOr3M,GAAP,CAAW8qB,IAAX,CAAd;AAAgC;;AACxD,WAAK,SAAL;AAAgBssL,QAAAA,WAAW,GAAGY,OAAO,CAAC91L,CAAC,CAACm1L,IAAH,CAArB;AAA+B;;AAC/C,WAAK,cAAL;AAAqBD,QAAAA,WAAW,GAAGl1L,CAAC,CAACm1L,IAAF,CAAOr3M,GAAP,CAAWg4M,OAAX,CAAd;AAAmC;;AACxD;AAAS,eAAO,IAAP;AARX;;AAUA,WAAO;AAACxhM,MAAAA,IAAI,EAAEA,IAAP;AAAa4gM,MAAAA,WAAW,EAAEA;AAA1B,KAAP;AACD;;AAED,SAAOO,QAAQ,CAACz1L,CAAD,CAAf;AACD;;;;;;;;;ACrEc,kBAASm2F,QAAT,EAAmBg/F,IAAnB,EAAyB;AACtC,MAAIY,YAAY,GAAG,EAAnB;AAAA,MACIC,eAAe,GAAG,EADtB;AAAA,MAEIC,aAAa,GAAG,EAFpB;AAAA,MAGIC,SAAS,GAAG,EAHhB;AAAA,MAIIC,UAAU,GAAG,CAAC,CAJlB,CADsC,CAOtC;;AACAhB,EAAAA,IAAI,CAACh9M,OAAL,CAAa,UAAS9D,CAAT,EAAYiK,CAAZ,EAAe;AAC1B,QAAI82M,GAAG,GAAGj/F,QAAQ,CAACg/F,IAAT,CAAc9gN,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAA3B,CAAV;AAAA,QAAyC0D,CAAzC;;AACA,QAAIq9M,GAAG,CAACzhN,MAAJ,GAAa,CAAb,IAAkB,CAACyhN,GAAG,CAAC,CAAD,CAAH,CAAO,CAAP,CAAnB,IAAgC,CAACA,GAAG,CAAC,CAAD,CAAH,CAAO,CAAP,CAArC,EAAgD;AAC9Cr9M,MAAAA,CAAC,GAAGo9M,IAAI,CAAC,EAAEgB,UAAH,CAAR,EAAwBhB,IAAI,CAACgB,UAAD,CAAJ,GAAmB9hN,CAA3C,EAA8C8gN,IAAI,CAAC72M,CAAD,CAAJ,GAAUvG,CAAxD;AACD;AACF,GALD;AAOAo9M,EAAAA,IAAI,CAACh9M,OAAL,CAAa,UAAS9D,CAAT,EAAY;AACvB,QAAItB,CAAC,GAAGqjN,IAAI,CAAC/hN,CAAD,CAAZ;AAAA,QACI8L,KAAK,GAAGpN,CAAC,CAAC,CAAD,CADb;AAAA,QAEIiT,GAAG,GAAGjT,CAAC,CAAC,CAAD,CAFX;AAAA,QAGIiN,CAHJ;AAAA,QAGO8iC,CAHP;;AAKA,QAAI9iC,CAAC,GAAGi2M,aAAa,CAAC91M,KAAD,CAArB,EAA8B;AAC5B,aAAO81M,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAApB;AACAhG,MAAAA,CAAC,CAAC1L,IAAF,CAAOD,CAAP;AACA2L,MAAAA,CAAC,CAACgG,GAAF,GAAQA,GAAR;;AACA,UAAI88B,CAAC,GAAGkzK,eAAe,CAAChwM,GAAD,CAAvB,EAA8B;AAC5B,eAAOgwM,eAAe,CAAClzK,CAAC,CAAC3iC,KAAH,CAAtB;AACA,YAAIk2M,EAAE,GAAGvzK,CAAC,KAAK9iC,CAAN,GAAUA,CAAV,GAAcA,CAAC,CAACpM,MAAF,CAASkvC,CAAT,CAAvB;AACAkzK,QAAAA,eAAe,CAACK,EAAE,CAACl2M,KAAH,GAAWH,CAAC,CAACG,KAAd,CAAf,GAAsC81M,aAAa,CAACI,EAAE,CAACrwM,GAAH,GAAS88B,CAAC,CAAC98B,GAAZ,CAAb,GAAgCqwM,EAAtE;AACD,OAJD,MAIO;AACLL,QAAAA,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAf,GAA2B81M,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAAb,GAAuBhG,CAAlD;AACD;AACF,KAXD,MAWO,IAAIA,CAAC,GAAGg2M,eAAe,CAAChwM,GAAD,CAAvB,EAA8B;AACnC,aAAOgwM,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAtB;AACAH,MAAAA,CAAC,CAACo7B,OAAF,CAAU/mC,CAAV;AACA2L,MAAAA,CAAC,CAACG,KAAF,GAAUA,KAAV;;AACA,UAAI2iC,CAAC,GAAGmzK,aAAa,CAAC91M,KAAD,CAArB,EAA8B;AAC5B,eAAO81M,aAAa,CAACnzK,CAAC,CAAC98B,GAAH,CAApB;AACA,YAAIswM,EAAE,GAAGxzK,CAAC,KAAK9iC,CAAN,GAAUA,CAAV,GAAc8iC,CAAC,CAAClvC,MAAF,CAASoM,CAAT,CAAvB;AACAg2M,QAAAA,eAAe,CAACM,EAAE,CAACn2M,KAAH,GAAW2iC,CAAC,CAAC3iC,KAAd,CAAf,GAAsC81M,aAAa,CAACK,EAAE,CAACtwM,GAAH,GAAShG,CAAC,CAACgG,GAAZ,CAAb,GAAgCswM,EAAtE;AACD,OAJD,MAIO;AACLN,QAAAA,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAf,GAA2B81M,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAAb,GAAuBhG,CAAlD;AACD;AACF,KAXM,MAWA;AACLA,MAAAA,CAAC,GAAG,CAAC3L,CAAD,CAAJ;AACA2hN,MAAAA,eAAe,CAACh2M,CAAC,CAACG,KAAF,GAAUA,KAAX,CAAf,GAAmC81M,aAAa,CAACj2M,CAAC,CAACgG,GAAF,GAAQA,GAAT,CAAb,GAA6BhG,CAAhE;AACD;AACF,GAhCD;;AAkCA,WAASo2M,IAAT,CAAc/hN,CAAd,EAAiB;AACf,QAAI+gN,GAAG,GAAGj/F,QAAQ,CAACg/F,IAAT,CAAc9gN,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAA3B,CAAV;AAAA,QAAyCkiN,EAAE,GAAGnB,GAAG,CAAC,CAAD,CAAjD;AAAA,QAAsDhsF,EAAtD;AACA,QAAIjT,QAAQ,CAACmnE,SAAb,EAAwBl0D,EAAE,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAL,EAAagsF,GAAG,CAACj9M,OAAJ,CAAY,UAASq+M,EAAT,EAAa;AAAEptF,MAAAA,EAAE,CAAC,CAAD,CAAF,IAASotF,EAAE,CAAC,CAAD,CAAX,EAAgBptF,EAAE,CAAC,CAAD,CAAF,IAASotF,EAAE,CAAC,CAAD,CAA3B;AAAiC,KAA5D,CAAb,CAAxB,KACKptF,EAAE,GAAGgsF,GAAG,CAACA,GAAG,CAACzhN,MAAJ,GAAa,CAAd,CAAR;AACL,WAAOU,CAAC,GAAG,CAAJ,GAAQ,CAAC+0H,EAAD,EAAKmtF,EAAL,CAAR,GAAmB,CAACA,EAAD,EAAKntF,EAAL,CAA1B;AACD;;AAED,WAAS1lE,KAAT,CAAeuyJ,aAAf,EAA8BD,eAA9B,EAA+C;AAC7C,SAAK,IAAIrkM,CAAT,IAAcskM,aAAd,EAA6B;AAC3B,UAAIj2M,CAAC,GAAGi2M,aAAa,CAACtkM,CAAD,CAArB;AACA,aAAOqkM,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAtB;AACA,aAAOH,CAAC,CAACG,KAAT;AACA,aAAOH,CAAC,CAACgG,GAAT;AACAhG,MAAAA,CAAC,CAAC7H,OAAF,CAAU,UAAS9D,CAAT,EAAY;AAAE0hN,QAAAA,YAAY,CAAC1hN,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAAd,CAAZ,GAA+B,CAA/B;AAAmC,OAA3D;AACA6hN,MAAAA,SAAS,CAAC5hN,IAAV,CAAe0L,CAAf;AACD;AACF;;AAED0jD,EAAAA,KAAK,CAACuyJ,aAAD,EAAgBD,eAAhB,CAAL;AACAtyJ,EAAAA,KAAK,CAACsyJ,eAAD,EAAkBC,aAAlB,CAAL;AACAd,EAAAA,IAAI,CAACh9M,OAAL,CAAa,UAAS9D,CAAT,EAAY;AAAE,QAAI,CAAC0hN,YAAY,CAAC1hN,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAAd,CAAjB,EAAmC6hN,SAAS,CAAC5hN,IAAV,CAAe,CAACD,CAAD,CAAf;AAAsB,GAApF;AAEA,SAAO6hN,SAAP;AACD;;;;;;;;;;ACxED;;AACA;;;;AAEe,kBAAS//F,QAAT,EAAmB;AAChC,SAAO,qBAAOA,QAAP,EAAiBsgG,QAAQ,CAAC/hN,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAAjB,CAAP;AACD;;AAEM,SAASqiN,QAAT,CAAkBtgG,QAAlB,EAA4BulF,MAA5B,EAAoClsL,MAApC,EAA4C;AACjD,MAAI2lM,IAAJ,EAAU9gN,CAAV,EAAakO,CAAb;AACA,MAAInO,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0BwhN,IAAI,GAAGuB,WAAW,CAACvgG,QAAD,EAAWulF,MAAX,EAAmBlsL,MAAnB,CAAlB,CAA1B,KACK,KAAKnb,CAAC,GAAG,CAAJ,EAAO8gN,IAAI,GAAG,IAAIhhN,KAAJ,CAAUoO,CAAC,GAAG4zG,QAAQ,CAACg/F,IAAT,CAAcxhN,MAA5B,CAAnB,EAAwDU,CAAC,GAAGkO,CAA5D,EAA+D,EAAElO,CAAjE,EAAoE8gN,IAAI,CAAC9gN,CAAD,CAAJ,GAAUA,CAAV;AACzE,SAAO;AAACigB,IAAAA,IAAI,EAAE,iBAAP;AAA0B6gM,IAAAA,IAAI,EAAE,qBAAOh/F,QAAP,EAAiBg/F,IAAjB;AAAhC,GAAP;AACD;;AAED,SAASuB,WAAT,CAAqBvgG,QAArB,EAA+BulF,MAA/B,EAAuClsL,MAAvC,EAA+C;AAC7C,MAAI2lM,IAAI,GAAG,EAAX;AAAA,MACIwB,UAAU,GAAG,EADjB;AAAA,MAEIC,IAFJ;;AAIA,WAASC,QAAT,CAAkBxiN,CAAlB,EAAqB;AACnB,QAAIiK,CAAC,GAAGjK,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAT,GAAaA,CAArB;AACA,KAACsiN,UAAU,CAACr4M,CAAD,CAAV,KAAkBq4M,UAAU,CAACr4M,CAAD,CAAV,GAAgB,EAAlC,CAAD,EAAwChK,IAAxC,CAA6C;AAACD,MAAAA,CAAC,EAAEA,CAAJ;AAAOyuC,MAAAA,CAAC,EAAE8zK;AAAV,KAA7C;AACD;;AAED,WAASE,QAAT,CAAkB3B,IAAlB,EAAwB;AACtBA,IAAAA,IAAI,CAACh9M,OAAL,CAAa0+M,QAAb;AACD;;AAED,WAASE,QAAT,CAAkB5B,IAAlB,EAAwB;AACtBA,IAAAA,IAAI,CAACh9M,OAAL,CAAa2+M,QAAb;AACD;;AAED,WAASE,QAAT,CAAkB7B,IAAlB,EAAwB;AACtBA,IAAAA,IAAI,CAACh9M,OAAL,CAAa4+M,QAAb;AACD;;AAED,WAAStB,QAAT,CAAkBz1L,CAAlB,EAAqB;AACnB,YAAQ42L,IAAI,GAAG52L,CAAP,EAAUA,CAAC,CAAC1L,IAApB;AACE,WAAK,oBAAL;AAA2B0L,QAAAA,CAAC,CAACi1L,UAAF,CAAa98M,OAAb,CAAqBs9M,QAArB;AAAgC;;AAC3D,WAAK,YAAL;AAAmBqB,QAAAA,QAAQ,CAAC92L,CAAC,CAACm1L,IAAH,CAAR;AAAkB;;AACrC,WAAK,iBAAL;AAAwB,WAAK,SAAL;AAAgB4B,QAAAA,QAAQ,CAAC/2L,CAAC,CAACm1L,IAAH,CAAR;AAAkB;;AAC1D,WAAK,cAAL;AAAqB6B,QAAAA,QAAQ,CAACh3L,CAAC,CAACm1L,IAAH,CAAR;AAAkB;AAJzC;AAMD;;AAEDM,EAAAA,QAAQ,CAAC/Z,MAAD,CAAR;AAEAib,EAAAA,UAAU,CAACx+M,OAAX,CAAmBqX,MAAM,IAAI,IAAV,GACb,UAASynM,KAAT,EAAgB;AAAE9B,IAAAA,IAAI,CAAC7gN,IAAL,CAAU2iN,KAAK,CAAC,CAAD,CAAL,CAAS5iN,CAAnB;AAAwB,GAD7B,GAEb,UAAS4iN,KAAT,EAAgB;AAAE,QAAIznM,MAAM,CAACynM,KAAK,CAAC,CAAD,CAAL,CAASn0K,CAAV,EAAam0K,KAAK,CAACA,KAAK,CAACtjN,MAAN,GAAe,CAAhB,CAAL,CAAwBmvC,CAArC,CAAV,EAAmDqyK,IAAI,CAAC7gN,IAAL,CAAU2iN,KAAK,CAAC,CAAD,CAAL,CAAS5iN,CAAnB;AAAwB,GAFnG;AAIA,SAAO8gN,IAAP;AACD;;;;;;;;;;ACpDD;;AACA;;;;AAEA,SAAS+B,cAAT,CAAwBrB,IAAxB,EAA8B;AAC5B,MAAIxhN,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYkO,CAAC,GAAGszM,IAAI,CAACliN,MAArB;AAAA,MAA6B4H,CAA7B;AAAA,MAAgC6G,CAAC,GAAGyzM,IAAI,CAACtzM,CAAC,GAAG,CAAL,CAAxC;AAAA,MAAiD40M,IAAI,GAAG,CAAxD;;AACA,SAAO,EAAE9iN,CAAF,GAAMkO,CAAb,EAAgBhH,CAAC,GAAG6G,CAAJ,EAAOA,CAAC,GAAGyzM,IAAI,CAACxhN,CAAD,CAAf,EAAoB8iN,IAAI,IAAI57M,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAlD;;AAChB,SAAOhI,IAAI,CAACiT,GAAL,CAAS8pM,IAAT,CAAP,CAH4B,CAGL;AACxB;;AAEc,kBAAShhG,QAAT,EAAmB;AAChC,SAAO,qBAAOA,QAAP,EAAiBihG,SAAS,CAAC1iN,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,CAAjB,CAAP;AACD;;AAEM,SAASgjN,SAAT,CAAmBjhG,QAAnB,EAA6Bk/F,OAA7B,EAAsC;AAC3C,MAAIgC,aAAa,GAAG,EAApB;AAAA,MACIC,QAAQ,GAAG,EADf;AAAA,MAEIC,MAAM,GAAG,EAFb;AAIAlC,EAAAA,OAAO,CAACl9M,OAAR,CAAgBs9M,QAAhB;;AAEA,WAASA,QAAT,CAAkBz1L,CAAlB,EAAqB;AACnB,YAAQA,CAAC,CAAC1L,IAAV;AACE,WAAK,oBAAL;AAA2B0L,QAAAA,CAAC,CAACi1L,UAAF,CAAa98M,OAAb,CAAqBs9M,QAArB;AAAgC;;AAC3D,WAAK,SAAL;AAAgB+B,QAAAA,OAAO,CAACx3L,CAAC,CAACm1L,IAAH,CAAP;AAAiB;;AACjC,WAAK,cAAL;AAAqBn1L,QAAAA,CAAC,CAACm1L,IAAF,CAAOh9M,OAAP,CAAeq/M,OAAf;AAAyB;AAHhD;AAKD;;AAED,WAASA,OAAT,CAAiB1B,OAAjB,EAA0B;AACxBA,IAAAA,OAAO,CAAC39M,OAAR,CAAgB,UAAS09M,IAAT,EAAe;AAC7BA,MAAAA,IAAI,CAAC19M,OAAL,CAAa,UAASi9M,GAAT,EAAc;AACzB,SAACiC,aAAa,CAACjC,GAAG,GAAGA,GAAG,GAAG,CAAN,GAAU,CAACA,GAAX,GAAiBA,GAAxB,CAAb,KAA8CiC,aAAa,CAACjC,GAAD,CAAb,GAAqB,EAAnE,CAAD,EAAyE9gN,IAAzE,CAA8EwhN,OAA9E;AACD,OAFD;AAGD,KAJD;AAKAwB,IAAAA,QAAQ,CAAChjN,IAAT,CAAcwhN,OAAd;AACD;;AAED,WAASqB,IAAT,CAActB,IAAd,EAAoB;AAClB,WAAOqB,cAAc,CAAC,qBAAO/gG,QAAP,EAAiB;AAAC7hG,MAAAA,IAAI,EAAE,SAAP;AAAkB6gM,MAAAA,IAAI,EAAE,CAACU,IAAD;AAAxB,KAAjB,EAAkDX,WAAlD,CAA8D,CAA9D,CAAD,CAArB;AACD;;AAEDoC,EAAAA,QAAQ,CAACn/M,OAAT,CAAiB,UAAS29M,OAAT,EAAkB;AACjC,QAAI,CAACA,OAAO,CAAC96L,CAAb,EAAgB;AACd,UAAIglG,KAAK,GAAG,EAAZ;AAAA,UACIy3F,SAAS,GAAG,CAAC3B,OAAD,CADhB;AAEAA,MAAAA,OAAO,CAAC96L,CAAR,GAAY,CAAZ;AACAu8L,MAAAA,MAAM,CAACjjN,IAAP,CAAY0rH,KAAZ;;AACA,aAAO81F,OAAO,GAAG2B,SAAS,CAACh5L,GAAV,EAAjB,EAAkC;AAChCuhG,QAAAA,KAAK,CAAC1rH,IAAN,CAAWwhN,OAAX;AACAA,QAAAA,OAAO,CAAC39M,OAAR,CAAgB,UAAS09M,IAAT,EAAe;AAC7BA,UAAAA,IAAI,CAAC19M,OAAL,CAAa,UAASi9M,GAAT,EAAc;AACzBiC,YAAAA,aAAa,CAACjC,GAAG,GAAG,CAAN,GAAU,CAACA,GAAX,GAAiBA,GAAlB,CAAb,CAAoCj9M,OAApC,CAA4C,UAAS29M,OAAT,EAAkB;AAC5D,kBAAI,CAACA,OAAO,CAAC96L,CAAb,EAAgB;AACd86L,gBAAAA,OAAO,CAAC96L,CAAR,GAAY,CAAZ;AACAy8L,gBAAAA,SAAS,CAACnjN,IAAV,CAAewhN,OAAf;AACD;AACF,aALD;AAMD,WAPD;AAQD,SATD;AAUD;AACF;AACF,GApBD;AAsBAwB,EAAAA,QAAQ,CAACn/M,OAAT,CAAiB,UAAS29M,OAAT,EAAkB;AACjC,WAAOA,OAAO,CAAC96L,CAAf;AACD,GAFD;AAIA,SAAO;AACL1G,IAAAA,IAAI,EAAE,cADD;AAEL6gM,IAAAA,IAAI,EAAEoC,MAAM,CAACz5M,GAAP,CAAW,UAASw5M,QAAT,EAAmB;AAClC,UAAInC,IAAI,GAAG,EAAX;AAAA,UAAe5yM,CAAf,CADkC,CAGlC;;AACA+0M,MAAAA,QAAQ,CAACn/M,OAAT,CAAiB,UAAS29M,OAAT,EAAkB;AACjCA,QAAAA,OAAO,CAAC39M,OAAR,CAAgB,UAAS09M,IAAT,EAAe;AAC7BA,UAAAA,IAAI,CAAC19M,OAAL,CAAa,UAASi9M,GAAT,EAAc;AACzB,gBAAIiC,aAAa,CAACjC,GAAG,GAAG,CAAN,GAAU,CAACA,GAAX,GAAiBA,GAAlB,CAAb,CAAoCzhN,MAApC,GAA6C,CAAjD,EAAoD;AAClDwhN,cAAAA,IAAI,CAAC7gN,IAAL,CAAU8gN,GAAV;AACD;AACF,WAJD;AAKD,SAND;AAOD,OARD,EAJkC,CAclC;;AACAD,MAAAA,IAAI,GAAG,qBAAOh/F,QAAP,EAAiBg/F,IAAjB,CAAP,CAfkC,CAiBlC;AACA;AACA;;AACA,UAAI,CAAC5yM,CAAC,GAAG4yM,IAAI,CAACxhN,MAAV,IAAoB,CAAxB,EAA2B;AACzB,aAAK,IAAIU,CAAC,GAAG,CAAR,EAAWsd,CAAC,GAAGwlM,IAAI,CAAChC,IAAI,CAAC,CAAD,CAAL,CAAnB,EAA8BuC,EAA9B,EAAkC3/M,CAAvC,EAA0C1D,CAAC,GAAGkO,CAA9C,EAAiD,EAAElO,CAAnD,EAAsD;AACpD,cAAI,CAACqjN,EAAE,GAAGP,IAAI,CAAChC,IAAI,CAAC9gN,CAAD,CAAL,CAAV,IAAuBsd,CAA3B,EAA8B;AAC5B5Z,YAAAA,CAAC,GAAGo9M,IAAI,CAAC,CAAD,CAAR,EAAaA,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC9gN,CAAD,CAA3B,EAAgC8gN,IAAI,CAAC9gN,CAAD,CAAJ,GAAU0D,CAA1C,EAA6C4Z,CAAC,GAAG+lM,EAAjD;AACD;AACF;AACF;;AAED,aAAOvC,IAAP;AACD,KA7BK,EA6BH3lM,MA7BG,CA6BI,UAAS2lM,IAAT,EAAe;AACvB,aAAOA,IAAI,CAACxhN,MAAL,GAAc,CAArB;AACD,KA/BK;AAFD,GAAP;AAmCD;;;;;;;;;ACtGc,kBAAS4H,CAAT,EAAYf,CAAZ,EAAe;AAC5B,MAAIuwM,EAAE,GAAG,CAAT;AAAA,MAAYC,EAAE,GAAGzvM,CAAC,CAAC5H,MAAnB;;AACA,SAAOo3M,EAAE,GAAGC,EAAZ,EAAgB;AACd,QAAI2M,GAAG,GAAG5M,EAAE,GAAGC,EAAL,KAAY,CAAtB;AACA,QAAIzvM,CAAC,CAACo8M,GAAD,CAAD,GAASn9M,CAAb,EAAgBuwM,EAAE,GAAG4M,GAAG,GAAG,CAAX,CAAhB,KACK3M,EAAE,GAAG2M,GAAL;AACN;;AACD,SAAO5M,EAAP;AACD;;;;;;;;;ACRD;;;;AAEe,kBAASsK,OAAT,EAAkB;AAC/B,MAAIuC,YAAY,GAAG,EAAnB;AAAA,MAAuB;AACnBH,EAAAA,SAAS,GAAGpC,OAAO,CAACv3M,GAAR,CAAY,YAAW;AAAE,WAAO,EAAP;AAAY,GAArC,CADhB;;AAGA,WAAS8qB,IAAT,CAAcusL,IAAd,EAAoB9gN,CAApB,EAAuB;AACrB8gN,IAAAA,IAAI,CAACh9M,OAAL,CAAa,UAASoD,CAAT,EAAY;AACvB,UAAIA,CAAC,GAAG,CAAR,EAAWA,CAAC,GAAG,CAACA,CAAL;AACX,UAAIykB,CAAC,GAAG43L,YAAY,CAACr8M,CAAD,CAApB;AACA,UAAIykB,CAAJ,EAAOA,CAAC,CAAC1rB,IAAF,CAAOD,CAAP,EAAP,KACKujN,YAAY,CAACr8M,CAAD,CAAZ,GAAkB,CAAClH,CAAD,CAAlB;AACN,KALD;AAMD;;AAED,WAASyhN,OAAT,CAAiBX,IAAjB,EAAuB9gN,CAAvB,EAA0B;AACxB8gN,IAAAA,IAAI,CAACh9M,OAAL,CAAa,UAASi9M,GAAT,EAAc;AAAExsL,MAAAA,IAAI,CAACwsL,GAAD,EAAM/gN,CAAN,CAAJ;AAAe,KAA5C;AACD;;AAED,WAASohN,QAAT,CAAkBz1L,CAAlB,EAAqB3rB,CAArB,EAAwB;AACtB,QAAI2rB,CAAC,CAAC1L,IAAF,KAAW,oBAAf,EAAqC0L,CAAC,CAACi1L,UAAF,CAAa98M,OAAb,CAAqB,UAAS6nB,CAAT,EAAY;AAAEy1L,MAAAA,QAAQ,CAACz1L,CAAD,EAAI3rB,CAAJ,CAAR;AAAiB,KAApD,EAArC,KACK,IAAI2rB,CAAC,CAAC1L,IAAF,IAAUujM,YAAd,EAA4BA,YAAY,CAAC73L,CAAC,CAAC1L,IAAH,CAAZ,CAAqB0L,CAAC,CAACm1L,IAAvB,EAA6B9gN,CAA7B;AAClC;;AAED,MAAIwjN,YAAY,GAAG;AACjBC,IAAAA,UAAU,EAAElvL,IADK;AAEjBmvL,IAAAA,eAAe,EAAEjC,OAFA;AAGjBkC,IAAAA,OAAO,EAAElC,OAHQ;AAIjBmC,IAAAA,YAAY,EAAE,UAAS9C,IAAT,EAAe9gN,CAAf,EAAkB;AAAE8gN,MAAAA,IAAI,CAACh9M,OAAL,CAAa,UAASi9M,GAAT,EAAc;AAAEU,QAAAA,OAAO,CAACV,GAAD,EAAM/gN,CAAN,CAAP;AAAkB,OAA/C;AAAmD;AAJpE,GAAnB;AAOAghN,EAAAA,OAAO,CAACl9M,OAAR,CAAgBs9M,QAAhB;;AAEA,OAAK,IAAIphN,CAAT,IAAcujN,YAAd,EAA4B;AAC1B,SAAK,IAAIn5H,OAAO,GAAGm5H,YAAY,CAACvjN,CAAD,CAA1B,EAA+By3F,CAAC,GAAGrN,OAAO,CAAC9qF,MAA3C,EAAmD2K,CAAC,GAAG,CAA5D,EAA+DA,CAAC,GAAGwtF,CAAnE,EAAsE,EAAExtF,CAAxE,EAA2E;AACzE,WAAK,IAAIqT,CAAC,GAAGrT,CAAC,GAAG,CAAjB,EAAoBqT,CAAC,GAAGm6E,CAAxB,EAA2B,EAAEn6E,CAA7B,EAAgC;AAC9B,YAAIg7E,EAAE,GAAGlO,OAAO,CAACngF,CAAD,CAAhB;AAAA,YAAqB45M,EAAE,GAAGz5H,OAAO,CAAC9sE,CAAD,CAAjC;AAAA,YAAsCpP,CAAtC;AACA,YAAI,CAACA,CAAC,GAAGk1M,SAAS,CAAC9qH,EAAD,CAAd,EAAoBt4F,CAAC,GAAG,qBAAOkO,CAAP,EAAU21M,EAAV,CAAxB,MAA2CA,EAA/C,EAAmD31M,CAAC,CAACs1B,MAAF,CAASxjC,CAAT,EAAY,CAAZ,EAAe6jN,EAAf;AACnD,YAAI,CAAC31M,CAAC,GAAGk1M,SAAS,CAACS,EAAD,CAAd,EAAoB7jN,CAAC,GAAG,qBAAOkO,CAAP,EAAUoqF,EAAV,CAAxB,MAA2CA,EAA/C,EAAmDpqF,CAAC,CAACs1B,MAAF,CAASxjC,CAAT,EAAY,CAAZ,EAAes4F,EAAf;AACpD;AACF;AACF;;AAED,SAAO8qH,SAAP;AACD;;;;;;;;;AC5CD;;;;AAEe,kBAASn6B,SAAT,EAAoB;AACjC,MAAIA,SAAS,IAAI,IAAjB,EAAuB,OAAOhpD,iBAAP;AACvB,MAAIogF,EAAJ;AAAA,MACIC,EADJ;AAAA,MAEIC,EAAE,GAAGt3B,SAAS,CAACpzK,KAAV,CAAgB,CAAhB,CAFT;AAAA,MAGI2qM,EAAE,GAAGv3B,SAAS,CAACpzK,KAAV,CAAgB,CAAhB,CAHT;AAAA,MAIIiW,EAAE,GAAGm9J,SAAS,CAACw3B,SAAV,CAAoB,CAApB,CAJT;AAAA,MAKI37L,EAAE,GAAGmkK,SAAS,CAACw3B,SAAV,CAAoB,CAApB,CALT;AAMA,SAAO,UAASz1L,KAAT,EAAgBhrB,CAAhB,EAAmB;AACxB,QAAI,CAACA,CAAL,EAAQqgN,EAAE,GAAGC,EAAE,GAAG,CAAV;AACR,QAAIr2M,CAAC,GAAG,CAAR;AAAA,QACIiE,CAAC,GAAG8c,KAAK,CAAC1rB,MADd;AAAA,QAEIoqB,MAAM,GAAG,IAAI5pB,KAAJ,CAAUoO,CAAV,CAFb;AAAA,QAGIukG,EAAE,GAAG1sG,IAAI,CAACsG,KAAL,CAAW,CAAC2e,KAAK,CAAC,CAAD,CAAL,GAAWc,EAAZ,IAAkBy0L,EAA7B,CAHT;AAAA,QAII/tG,EAAE,GAAGzsG,IAAI,CAACsG,KAAL,CAAW,CAAC2e,KAAK,CAAC,CAAD,CAAL,GAAWlG,EAAZ,IAAkB07L,EAA7B,CAJT;AAKA92L,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY+oF,EAAE,GAAG4tG,EAAjB,EAAqBA,EAAE,GAAG5tG,EAA1B;AACA/oF,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY8oF,EAAE,GAAG8tG,EAAjB,EAAqBA,EAAE,GAAG9tG,EAA1B;;AACA,WAAOvoG,CAAC,GAAGiE,CAAX,EAAcwb,MAAM,CAACzf,CAAD,CAAN,GAAY+gB,KAAK,CAAC/gB,CAAD,CAAjB,EAAsB,EAAEA,CAAxB;;AACd,WAAOyf,MAAP;AACD,GAXD;AAYD;;;;;;;;;ACtBD;;AACA;;;;AAEe,kBAASo4F,QAAT,EAAmBmnE,SAAnB,EAA8B;AAC3C,MAAInnE,QAAQ,CAACmnE,SAAb,EAAwB,MAAM,IAAI1qL,KAAJ,CAAU,mBAAV,CAAN;;AAExB,MAAI,CAAC0qL,SAAD,IAAc,CAACA,SAAS,CAACpzK,KAA7B,EAAoC;AAClC,QAAI,EAAE,CAAC3H,CAAC,GAAGnI,IAAI,CAAC+H,KAAL,CAAWm7K,SAAX,CAAL,KAA+B,CAAjC,CAAJ,EAAyC,MAAM,IAAI1qL,KAAJ,CAAU,cAAV,CAAN;AACzCulN,IAAAA,GAAG,GAAGhiG,QAAQ,CAACo/F,IAAT,IAAiB,mBAAKp/F,QAAL,CAAvB;AACA,QAAIu+F,EAAE,GAAGyD,GAAG,CAAC,CAAD,CAAZ;AAAA,QAAiBxD,EAAE,GAAGwD,GAAG,CAAC,CAAD,CAAzB;AAAA,QAA8BrxG,EAAE,GAAGqxG,GAAG,CAAC,CAAD,CAAtC;AAAA,QAA2CtxG,EAAE,GAAGsxG,GAAG,CAAC,CAAD,CAAnD;AAAA,QAAwD51M,CAAxD;AACA+6K,IAAAA,SAAS,GAAG;AAACpzK,MAAAA,KAAK,EAAE,CAAC48F,EAAE,GAAG4tG,EAAL,GAAU,CAAC5tG,EAAE,GAAG4tG,EAAN,KAAanyM,CAAC,GAAG,CAAjB,CAAV,GAAgC,CAAjC,EAAoCskG,EAAE,GAAG8tG,EAAL,GAAU,CAAC9tG,EAAE,GAAG8tG,EAAN,KAAapyM,CAAC,GAAG,CAAjB,CAAV,GAAgC,CAApE,CAAR;AAAgFuyM,MAAAA,SAAS,EAAE,CAACJ,EAAD,EAAKC,EAAL;AAA3F,KAAZ;AACD,GALD,MAKO;AACLwD,IAAAA,GAAG,GAAGhiG,QAAQ,CAACo/F,IAAf;AACD;;AAED,MAAIx9M,CAAC,GAAG,0BAAYulL,SAAZ,CAAR;AAAA,MAAgC66B,GAAhC;AAAA,MAAqC7/M,GAArC;AAAA,MAA0C2K,MAAM,GAAGkzG,QAAQ,CAACk/F,OAA5D;AAAA,MAAqEnyM,OAAO,GAAG,EAA/E;;AAEA,WAASk1M,aAAT,CAAuBxC,KAAvB,EAA8B;AAC5B,WAAO79M,CAAC,CAAC69M,KAAD,CAAR;AACD;;AAED,WAASyC,gBAAT,CAA0Bh5L,KAA1B,EAAiC;AAC/B,QAAItB,MAAJ;;AACA,YAAQsB,KAAK,CAAC/K,IAAd;AACE,WAAK,oBAAL;AAA2ByJ,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,oBAAP;AAA6B2gM,UAAAA,UAAU,EAAE51L,KAAK,CAAC41L,UAAN,CAAiBn3M,GAAjB,CAAqBu6M,gBAArB;AAAzC,SAAT;AAA2F;;AACtH,WAAK,OAAL;AAAct6L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,OAAP;AAAgB4gM,UAAAA,WAAW,EAAEkD,aAAa,CAAC/4L,KAAK,CAAC61L,WAAP;AAA1C,SAAT;AAAyE;;AACvF,WAAK,YAAL;AAAmBn3L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,YAAP;AAAqB4gM,UAAAA,WAAW,EAAE71L,KAAK,CAAC61L,WAAN,CAAkBp3M,GAAlB,CAAsBs6M,aAAtB;AAAlC,SAAT;AAAkF;;AACrG;AAAS,eAAO/4L,KAAP;AAJX;;AAMA,QAAIA,KAAK,CAAC/X,EAAN,IAAY,IAAhB,EAAsByW,MAAM,CAACzW,EAAP,GAAY+X,KAAK,CAAC/X,EAAlB;AACtB,QAAI+X,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,QAAIl2L,KAAK,CAACm2L,UAAN,IAAoB,IAAxB,EAA8Bz3L,MAAM,CAACy3L,UAAP,GAAoBn2L,KAAK,CAACm2L,UAA1B;AAC9B,WAAOz3L,MAAP;AACD;;AAED,WAASu6L,WAAT,CAAqBj5L,KAArB,EAA4B;AAC1B,QAAIhrB,CAAC,GAAG,CAAR;AAAA,QAAWiK,CAAC,GAAG,CAAf;AAAA,QAAkBiE,CAAC,GAAG8c,KAAK,CAAC1rB,MAA5B;AAAA,QAAoCglC,CAApC;AAAA,QAAuC5a,MAAM,GAAG,IAAI5pB,KAAJ,CAAUoO,CAAV,CAAhD,CAD0B,CACoC;;AAC9Dwb,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYhmB,CAAC,CAACsnB,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;;AACA,WAAO,EAAEhrB,CAAF,GAAMkO,CAAb,EAAgB,IAAI,CAACo2B,CAAC,GAAG5gC,CAAC,CAACsnB,KAAK,CAAChrB,CAAD,CAAN,EAAWA,CAAX,CAAN,EAAqB,CAArB,KAA2BskC,CAAC,CAAC,CAAD,CAAhC,EAAqC5a,MAAM,CAACzf,CAAC,EAAF,CAAN,GAAcq6B,CAAd,CAH3B,CAG4C;;;AACtE,QAAIr6B,CAAC,KAAK,CAAV,EAAayf,MAAM,CAACzf,CAAC,EAAF,CAAN,GAAc,CAAC,CAAD,EAAI,CAAJ,CAAd,CAJa,CAIS;;AACnCyf,IAAAA,MAAM,CAACpqB,MAAP,GAAgB2K,CAAhB;AACA,WAAOyf,MAAP;AACD;;AAED,OAAKzlB,GAAL,IAAY2K,MAAZ,EAAoBC,OAAO,CAAC5K,GAAD,CAAP,GAAe+/M,gBAAgB,CAACp1M,MAAM,CAAC3K,GAAD,CAAP,CAA/B;;AAEpB,SAAO;AACLgc,IAAAA,IAAI,EAAE,UADD;AAELihM,IAAAA,IAAI,EAAE4C,GAFD;AAGL76B,IAAAA,SAAS,EAAEA,SAHN;AAIL+3B,IAAAA,OAAO,EAAEnyM,OAJJ;AAKLiyM,IAAAA,IAAI,EAAEh/F,QAAQ,CAACg/F,IAAT,CAAcr3M,GAAd,CAAkBw6M,WAAlB;AALD,GAAP;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;ACPA;;AACA;;AACA;;;;AAEA,MAAM5tD,OAAO,GAAG;AACd6tD,EAAAA,QAAQ,EAAE,CAACh9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G,CADZ;AAEdo2M,EAAAA,QAAQ,EAAE,CAACj9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G;AAFZ,CAAhB;;AAKe,SAASq2M,QAAT,CAAkBp1M,IAAlB,EAAwBuzG,MAAxB,EAAgC;AAC7C,MAAItxE,MAAJ,EAAYo2J,MAAZ,EAAoBkQ,QAApB,EAA8Bp8L,MAA9B;AACAnM,EAAAA,IAAI,GAAG,mBAAKA,IAAL,EAAWuzG,MAAX,CAAP;;AAEA,MAAIA,MAAM,IAAIA,MAAM,CAAC0+F,OAArB,EAA8B;AAC5BhwK,IAAAA,MAAM,GAAGgwK,uBAAT;AACA1J,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC0+F,OAAlB;AACD,GAHD,MAGO,IAAI1+F,MAAM,IAAIA,MAAM,CAAC8hG,IAArB,EAA2B;AAChCpzK,IAAAA,MAAM,GAAGozK,oBAAT;AACA9M,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC8hG,IAAlB;AACAlpM,IAAAA,MAAM,GAAGk7I,OAAO,CAAC9zC,MAAM,CAACpnG,MAAR,CAAhB;AACD,GAJM,MAIA;AACL,yBAAM,6CAAN;AACD;;AAEDksL,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAGr4L,IAAI,CAACgyM,OAAL,CAAazJ,QAAb,CAAV,IACLtmK,MAAM,CAACjiC,IAAD,EAAOq4L,MAAP,EAAelsL,MAAf,CADD,GAEL,qBAAM,8BAA8Bo8L,QAApC,CAFJ;AAIA,SAAOlQ,MAAM,IAAIA,MAAM,CAACxX,QAAjB,IAA6B,CAACwX,MAAD,CAApC;AACD;;AAED+c,QAAQ,CAACpE,YAAT,GAAwB,MAAxB;;;;;;;;;;;AC/BA;;AACA;;AACA;;AACA;;;;;;;;AAEO,MAAMz9F,MAAM,GAAG;AACpBw9F,EAAAA,GAAG,EAAEA,YADe;AAEpBxoB,EAAAA,GAAG,EAAE,0BAAgB,GAAhB,CAFe;AAGpB2nB,EAAAA,GAAG,EAAE,0BAAgB,IAAhB,CAHe;AAIpB30F,EAAAA,IAAI,EAAEA,aAJc;AAKpB65F,EAAAA,QAAQ,EAAEA;AALU,CAAf;;;AAQA,SAASE,OAAT,CAAiB/iN,IAAjB,EAAuBgjN,MAAvB,EAA+B;AACpC,MAAIxkN,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxBijH,IAAAA,MAAM,CAAChhH,IAAD,CAAN,GAAegjN,MAAf;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO,8BAAehiG,MAAf,EAAuBhhH,IAAvB,IAA+BghH,MAAM,CAAChhH,IAAD,CAArC,GAA8C,IAArD;AACD;AACF;;AAEM,SAASy+M,YAAT,CAAsB//L,IAAtB,EAA4B;AACjC,QAAMtU,CAAC,GAAG24M,OAAO,CAACrkM,IAAD,CAAjB;AACA,SAAOtU,CAAC,IAAIA,CAAC,CAACq0M,YAAP,IAAuB,MAA9B;AACD;;;;;;;;;ACzBc,kBAAS94M,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO7G,CAAC,GAAG6G,CAAJ,GAAQ,CAAC,CAAT,GAAa7G,CAAC,GAAG6G,CAAJ,GAAQ,CAAR,GAAY7G,CAAC,IAAI6G,CAAL,GAAS,CAAT,GAAawkE,GAA7C;AACD;;;;;;;;;ACFD;;;;AAEe,kBAAS5mE,CAAT,EAAY;AACzB,MAAIgqF,KAAK,GAAGhqF,CAAZ;AACA,MAAIm8L,OAAO,GAAGn8L,CAAd;;AAEA,MAAIA,CAAC,CAACrM,MAAF,KAAa,CAAjB,EAAoB;AAClBq2F,IAAAA,KAAK,GAAG,CAAC9oF,CAAD,EAAI1G,CAAJ,KAAUwF,CAAC,CAACkB,CAAD,CAAD,GAAO1G,CAAzB;;AACA2hM,IAAAA,OAAO,GAAGnwJ,mBAAmB,CAAChsC,CAAD,CAA7B;AACD;;AAED,WAASwnC,IAAT,CAAcjsC,CAAd,EAAiBf,CAAjB,EAAoBuwM,EAApB,EAAwBC,EAAxB,EAA4B;AAC1B,QAAID,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,QAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGzvM,CAAC,CAAC5H,MAAP;;AAChB,WAAOo3M,EAAE,GAAGC,EAAZ,EAAgB;AACd,YAAM2M,GAAG,GAAI5M,EAAE,GAAGC,EAAN,KAAc,CAA1B;AACA,UAAI7O,OAAO,CAAC5gM,CAAC,CAACo8M,GAAD,CAAF,EAASn9M,CAAT,CAAP,GAAqB,CAAzB,EAA4BuwM,EAAE,GAAG4M,GAAG,GAAG,CAAX,CAA5B,KACK3M,EAAE,GAAG2M,GAAL;AACN;;AACD,WAAO5M,EAAP;AACD;;AAED,WAAStjK,KAAT,CAAelsC,CAAf,EAAkBf,CAAlB,EAAqBuwM,EAArB,EAAyBC,EAAzB,EAA6B;AAC3B,QAAID,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,QAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGzvM,CAAC,CAAC5H,MAAP;;AAChB,WAAOo3M,EAAE,GAAGC,EAAZ,EAAgB;AACd,YAAM2M,GAAG,GAAI5M,EAAE,GAAGC,EAAN,KAAc,CAA1B;AACA,UAAI7O,OAAO,CAAC5gM,CAAC,CAACo8M,GAAD,CAAF,EAASn9M,CAAT,CAAP,GAAqB,CAAzB,EAA4BwwM,EAAE,GAAG2M,GAAL,CAA5B,KACK5M,EAAE,GAAG4M,GAAG,GAAG,CAAX;AACN;;AACD,WAAO5M,EAAP;AACD;;AAED,WAASx2C,MAAT,CAAgBh5J,CAAhB,EAAmBf,CAAnB,EAAsBuwM,EAAtB,EAA0BC,EAA1B,EAA8B;AAC5B,QAAID,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,QAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGzvM,CAAC,CAAC5H,MAAP;AAChB,UAAMU,CAAC,GAAGmzC,IAAI,CAACjsC,CAAD,EAAIf,CAAJ,EAAOuwM,EAAP,EAAWC,EAAE,GAAG,CAAhB,CAAd;AACA,WAAO32M,CAAC,GAAG02M,EAAJ,IAAU/gH,KAAK,CAACzuF,CAAC,CAAClH,CAAC,GAAG,CAAL,CAAF,EAAWmG,CAAX,CAAL,GAAqB,CAACwvF,KAAK,CAACzuF,CAAC,CAAClH,CAAD,CAAF,EAAOmG,CAAP,CAArC,GAAiDnG,CAAC,GAAG,CAArD,GAAyDA,CAAhE;AACD;;AAED,SAAO;AAACmzC,IAAAA,IAAD;AAAO+sH,IAAAA,MAAP;AAAe9sH,IAAAA;AAAf,GAAP;AACD;;AAED,SAASuE,mBAAT,CAA6BhsC,CAA7B,EAAgC;AAC9B,SAAO,CAACkB,CAAD,EAAI1G,CAAJ,KAAU,wBAAUwF,CAAC,CAACkB,CAAD,CAAX,EAAgB1G,CAAhB,CAAjB;AACD;;;;;;;;;;AC7Cc,kBAASA,CAAT,EAAY;AACzB,SAAOA,CAAC,KAAK,IAAN,GAAaosE,GAAb,GAAmB,CAACpsE,CAA3B;AACD;;AAEM,UAAUq+M,OAAV,CAAkBp6M,MAAlB,EAA0Bq6M,OAA1B,EAAmC;AACxC,MAAIA,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,IAAI,IAAT,IAAiB,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzC,EAAgD;AAC9C,cAAMA,KAAN;AACD;AACF;AACF,GAND,MAMO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,IAAqD,CAACpH,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAA7E,EAAoF;AAClF,cAAMA,KAAN;AACD;AACF;AACF;AACF;;;;;;;;;ACnBD;;AACA;;AACA;;;;AAEA,MAAM0hN,eAAe,GAAG,uBAAStL,kBAAT,CAAxB;AACO,MAAMuL,WAAW,GAAGD,eAAe,CAACtxK,KAApC;;AACA,MAAMwxK,UAAU,GAAGF,eAAe,CAACvxK,IAAnC;;AACA,MAAM0xK,YAAY,GAAG,uBAAS7I,eAAT,EAAiB97C,MAAtC;;eACQykD;;;;;;;;;;ACRA,SAAS5sI,KAAT,CAAe3tE,MAAf,EAAuBq6M,OAAvB,EAAgC;AAC7C,MAAI1sI,KAAK,GAAG,CAAZ;;AACA,MAAI0sI,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,IAAI,IAAT,IAAiB,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzC,EAAgD;AAC9C,UAAE+0E,KAAF;AACD;AACF;AACF,GAND,MAMO;AACL,QAAIjyE,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,IAAqD,CAACpH,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAA7E,EAAoF;AAClF,UAAE+0E,KAAF;AACD;AACF;AACF;;AACD,SAAOA,KAAP;AACD;;;;;;;;;ACjBD,SAASz4E,MAAT,CAAgBa,KAAhB,EAAuB;AACrB,SAAOA,KAAK,CAACb,MAAN,GAAe,CAAtB;AACD;;AAED,SAAS60M,KAAT,CAAe70M,MAAf,EAAuB;AACrB,SAAO,EAAEA,MAAM,GAAG,CAAX,CAAP;AACD;;AAED,SAASwlN,QAAT,CAAkB16M,MAAlB,EAA0B;AACxB,SAAO,OAAOA,MAAP,KAAkB,QAAlB,IAA8B,YAAYA,MAA1C,GAAmDA,MAAnD,GAA4DtK,KAAK,CAACuR,IAAN,CAAWjH,MAAX,CAAnE;AACD;;AAED,SAAS26M,OAAT,CAAiBx4M,MAAjB,EAAyB;AACvB,SAAOnC,MAAM,IAAImC,MAAM,CAAC,GAAGnC,MAAJ,CAAvB;AACD;;AAEc,SAAS46M,KAAT,CAAe,GAAG56M,MAAlB,EAA0B;AACvC,QAAMmC,MAAM,GAAG,OAAOnC,MAAM,CAACA,MAAM,CAAC9K,MAAP,GAAgB,CAAjB,CAAb,KAAqC,UAArC,IAAmDylN,OAAO,CAAC36M,MAAM,CAACggB,GAAP,EAAD,CAAzE;AACAhgB,EAAAA,MAAM,GAAGA,MAAM,CAACX,GAAP,CAAWq7M,QAAX,CAAT;AACA,QAAMhpC,OAAO,GAAG1xK,MAAM,CAACX,GAAP,CAAWnK,MAAX,CAAhB;AACA,QAAM2K,CAAC,GAAGG,MAAM,CAAC9K,MAAP,GAAgB,CAA1B;AACA,QAAMwG,KAAK,GAAG,IAAIhG,KAAJ,CAAUmK,CAAC,GAAG,CAAd,EAAiBuG,IAAjB,CAAsB,CAAtB,CAAd;AACA,QAAM67D,OAAO,GAAG,EAAhB;AACA,MAAIpiE,CAAC,GAAG,CAAJ,IAAS6xK,OAAO,CAAC96J,IAAR,CAAamzL,KAAb,CAAb,EAAkC,OAAO9nI,OAAP;;AAClC,SAAO,IAAP,EAAa;AACXA,IAAAA,OAAO,CAACpsE,IAAR,CAAa6F,KAAK,CAAC2D,GAAN,CAAU,CAACQ,CAAD,EAAIjK,CAAJ,KAAUoK,MAAM,CAACpK,CAAD,CAAN,CAAUiK,CAAV,CAApB,CAAb;AACA,QAAIjK,CAAC,GAAGiK,CAAR;;AACA,WAAO,EAAEnE,KAAK,CAAC9F,CAAD,CAAP,KAAe87K,OAAO,CAAC97K,CAAD,CAA7B,EAAkC;AAChC,UAAIA,CAAC,KAAK,CAAV,EAAa,OAAOuM,MAAM,GAAG8/D,OAAO,CAAC5iE,GAAR,CAAY8C,MAAZ,CAAH,GAAyB8/D,OAAtC;AACbvmE,MAAAA,KAAK,CAAC9F,CAAC,EAAF,CAAL,GAAa,CAAb;AACD;AACF;AACF;;;;;;;;;AChCc,SAAS0U,MAAT,CAAgBtK,MAAhB,EAAwBq6M,OAAxB,EAAiC;AAC9C,MAAIl+M,GAAG,GAAG,CAAV;AAAA,MAAaT,KAAK,GAAG,CAArB;AACA,SAAOm/M,YAAY,CAAC5zM,IAAb,CAAkBjH,MAAlB,EAA0Bq6M,OAAO,KAAKvvF,SAAZ,GAC7BhjH,CAAC,IAAK3L,GAAG,IAAI,CAAC2L,CAAD,IAAM,CADU,GAE7BA,CAAC,IAAK3L,GAAG,IAAI,CAACk+M,OAAO,CAACvyM,CAAD,EAAIpM,KAAK,EAAT,EAAasE,MAAb,CAAR,IAAgC,CAF1C,CAAP;AAGD;;;;;;;;;ACLc,kBAASlD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAOA,CAAC,GAAG7G,CAAJ,GAAQ,CAAC,CAAT,GAAa6G,CAAC,GAAG7G,CAAJ,GAAQ,CAAR,GAAY6G,CAAC,IAAI7G,CAAL,GAAS,CAAT,GAAaqrE,GAA7C;AACD;;;;;;;;;ACFc,SAAS58D,QAAT,CAAkBvL,MAAlB,EAA0Bq6M,OAA1B,EAAmC;AAChD,MAAI1sI,KAAK,GAAG,CAAZ;AACA,MAAI4d,KAAJ;AACA,MAAIjgF,IAAI,GAAG,CAAX;AACA,MAAInP,GAAG,GAAG,CAAV;;AACA,MAAIk+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,IAAI,IAAT,IAAiB,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzC,EAAgD;AAC9C2yF,QAAAA,KAAK,GAAG3yF,KAAK,GAAG0S,IAAhB;AACAA,QAAAA,IAAI,IAAIigF,KAAK,GAAG,EAAE5d,KAAlB;AACAxxE,QAAAA,GAAG,IAAIovF,KAAK,IAAI3yF,KAAK,GAAG0S,IAAZ,CAAZ;AACD;AACF;AACF,GARD,MAQO;AACL,QAAI5P,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,IAAqD,CAACpH,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAA7E,EAAoF;AAClF2yF,QAAAA,KAAK,GAAG3yF,KAAK,GAAG0S,IAAhB;AACAA,QAAAA,IAAI,IAAIigF,KAAK,GAAG,EAAE5d,KAAlB;AACAxxE,QAAAA,GAAG,IAAIovF,KAAK,IAAI3yF,KAAK,GAAG0S,IAAZ,CAAZ;AACD;AACF;AACF;;AACD,MAAIqiE,KAAK,GAAG,CAAZ,EAAe,OAAOxxE,GAAG,IAAIwxE,KAAK,GAAG,CAAZ,CAAV;AAChB;;;;;;;;;ACxBD;;;;AAEe,SAASmtI,SAAT,CAAmB96M,MAAnB,EAA2Bq6M,OAA3B,EAAoC;AACjD,QAAMvyM,CAAC,GAAG,uBAAS9H,MAAT,EAAiBq6M,OAAjB,CAAV;AACA,SAAOvyM,CAAC,GAAGnM,IAAI,CAACqC,IAAL,CAAU8J,CAAV,CAAH,GAAkBA,CAA1B;AACD;;;;;;;;;ACLc,kBAAS9H,MAAT,EAAiBq6M,OAAjB,EAA0B;AACvC,MAAIv+M,GAAJ;AACA,MAAIE,GAAJ;;AACA,MAAIq+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,MAAMlyH,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,UAAIpH,KAAK,IAAI,IAAb,EAAmB;AACjB,YAAIkD,GAAG,KAAKgvH,SAAZ,EAAuB;AACrB,cAAIlyH,KAAK,IAAIA,KAAb,EAAoBkD,GAAG,GAAGE,GAAG,GAAGpD,KAAZ;AACrB,SAFD,MAEO;AACL,cAAIkD,GAAG,GAAGlD,KAAV,EAAiBkD,GAAG,GAAGlD,KAAN;AACjB,cAAIoD,GAAG,GAAGpD,KAAV,EAAiBoD,GAAG,GAAGpD,KAAN;AAClB;AACF;AACF;AACF,GAXD,MAWO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAAjD,EAAuD;AACrD,YAAIlE,GAAG,KAAKgvH,SAAZ,EAAuB;AACrB,cAAIlyH,KAAK,IAAIA,KAAb,EAAoBkD,GAAG,GAAGE,GAAG,GAAGpD,KAAZ;AACrB,SAFD,MAEO;AACL,cAAIkD,GAAG,GAAGlD,KAAV,EAAiBkD,GAAG,GAAGlD,KAAN;AACjB,cAAIoD,GAAG,GAAGpD,KAAV,EAAiBoD,GAAG,GAAGpD,KAAN;AAClB;AACF;AACF;AACF;;AACD,SAAO,CAACkD,GAAD,EAAME,GAAN,CAAP;AACD;;;;;;;;;;AC5BD;AACO,MAAM++M,KAAN,CAAY;AACjBv5M,EAAAA,WAAW,GAAG;AACZ,SAAKw5M,SAAL,GAAiB,IAAIH,YAAJ,CAAiB,EAAjB,CAAjB;AACA,SAAKI,EAAL,GAAU,CAAV;AACD;;AACD1kM,EAAAA,GAAG,CAACxa,CAAD,EAAI;AACL,UAAMm+B,CAAC,GAAG,KAAK8gL,SAAf;AACA,QAAIplN,CAAC,GAAG,CAAR;;AACA,SAAK,IAAIiK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKo7M,EAAT,IAAep7M,CAAC,GAAG,EAAnC,EAAuCA,CAAC,EAAxC,EAA4C;AAC1C,YAAMya,CAAC,GAAG4f,CAAC,CAACr6B,CAAD,CAAX;AAAA,YACE0sM,EAAE,GAAGxwM,CAAC,GAAGue,CADX;AAAA,YAEEgyL,EAAE,GAAG3wM,IAAI,CAACiT,GAAL,CAAS7S,CAAT,IAAcJ,IAAI,CAACiT,GAAL,CAAS0L,CAAT,CAAd,GAA4Bve,CAAC,IAAIwwM,EAAE,GAAGjyL,CAAT,CAA7B,GAA2CA,CAAC,IAAIiyL,EAAE,GAAGxwM,CAAT,CAFnD;AAGA,UAAIuwM,EAAJ,EAAQpyK,CAAC,CAACtkC,CAAC,EAAF,CAAD,GAAS02M,EAAT;AACRvwM,MAAAA,CAAC,GAAGwwM,EAAJ;AACD;;AACDryK,IAAAA,CAAC,CAACtkC,CAAD,CAAD,GAAOmG,CAAP;AACA,SAAKk/M,EAAL,GAAUrlN,CAAC,GAAG,CAAd;AACA,WAAO,IAAP;AACD;;AACDslN,EAAAA,OAAO,GAAG;AACR,UAAMhhL,CAAC,GAAG,KAAK8gL,SAAf;AACA,QAAIl3M,CAAC,GAAG,KAAKm3M,EAAb;AAAA,QAAiBl/M,CAAjB;AAAA,QAAoBue,CAApB;AAAA,QAAuBgyL,EAAvB;AAAA,QAA2BC,EAAE,GAAG,CAAhC;;AACA,QAAIzoM,CAAC,GAAG,CAAR,EAAW;AACTyoM,MAAAA,EAAE,GAAGryK,CAAC,CAAC,EAAEp2B,CAAH,CAAN;;AACA,aAAOA,CAAC,GAAG,CAAX,EAAc;AACZ/H,QAAAA,CAAC,GAAGwwM,EAAJ;AACAjyL,QAAAA,CAAC,GAAG4f,CAAC,CAAC,EAAEp2B,CAAH,CAAL;AACAyoM,QAAAA,EAAE,GAAGxwM,CAAC,GAAGue,CAAT;AACAgyL,QAAAA,EAAE,GAAGhyL,CAAC,IAAIiyL,EAAE,GAAGxwM,CAAT,CAAN;AACA,YAAIuwM,EAAJ,EAAQ;AACT;;AACD,UAAIxoM,CAAC,GAAG,CAAJ,KAAWwoM,EAAE,GAAG,CAAL,IAAUpyK,CAAC,CAACp2B,CAAC,GAAG,CAAL,CAAD,GAAW,CAAtB,IAA6BwoM,EAAE,GAAG,CAAL,IAAUpyK,CAAC,CAACp2B,CAAC,GAAG,CAAL,CAAD,GAAW,CAA5D,CAAJ,EAAqE;AACnEwW,QAAAA,CAAC,GAAGgyL,EAAE,GAAG,CAAT;AACAvwM,QAAAA,CAAC,GAAGwwM,EAAE,GAAGjyL,CAAT;AACA,YAAIA,CAAC,IAAIve,CAAC,GAAGwwM,EAAb,EAAiBA,EAAE,GAAGxwM,CAAL;AAClB;AACF;;AACD,WAAOwwM,EAAP;AACD;;AAtCgB;;;;AAyCJ,kBAASvsM,MAAT,EAAiBq6M,OAAjB,EAA0B;AACvC,QAAMc,KAAK,GAAG,IAAIJ,KAAJ,EAAd;;AACA,MAAIV,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,GAAG,CAACA,KAAb,EAAoB;AAClBuiN,QAAAA,KAAK,CAAC5kM,GAAN,CAAU3d,KAAV;AACD;AACF;AACF,GAND,MAMO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,GAAG,CAACyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAApB,EAA8C;AAC5Cm7M,QAAAA,KAAK,CAAC5kM,GAAN,CAAU3d,KAAV;AACD;AACF;AACF;;AACD,SAAO,CAACuiN,KAAR;AACD;;;;;;;;;;;;;;AE3DD;;;;AAEe,SAAS55F,KAAT,CAAevhH,MAAf,EAAuB,GAAG+X,IAA1B,EAAgC;AAC7C,SAAOqjM,IAAI,CAACp7M,MAAD,EAAS61H,iBAAT,EAAmBA,iBAAnB,EAA6B99G,IAA7B,CAAX;AACD;;AAEM,SAAS+gM,MAAT,CAAgB94M,MAAhB,EAAwB,GAAG+X,IAA3B,EAAiC;AACtC,SAAOqjM,IAAI,CAACp7M,MAAD,EAAStK,KAAK,CAACuR,IAAf,EAAqB4uH,iBAArB,EAA+B99G,IAA/B,CAAX;AACD;;AAEM,SAASsjM,MAAT,CAAgBr7M,MAAhB,EAAwBmC,MAAxB,EAAgC,GAAG4V,IAAnC,EAAyC;AAC9C,SAAOqjM,IAAI,CAACp7M,MAAD,EAAS61H,iBAAT,EAAmB1zH,MAAnB,EAA2B4V,IAA3B,CAAX;AACD;;AAEM,SAASujM,OAAT,CAAiBt7M,MAAjB,EAAyBmC,MAAzB,EAAiC,GAAG4V,IAApC,EAA0C;AAC/C,SAAOqjM,IAAI,CAACp7M,MAAD,EAAStK,KAAK,CAACuR,IAAf,EAAqB9E,MAArB,EAA6B4V,IAA7B,CAAX;AACD;;AAEM,SAASrc,KAAT,CAAesE,MAAf,EAAuB,GAAG+X,IAA1B,EAAgC;AACrC,SAAOqjM,IAAI,CAACp7M,MAAD,EAAS61H,iBAAT,EAAmBzJ,MAAnB,EAA2Br0G,IAA3B,CAAX;AACD;;AAEM,SAASioE,OAAT,CAAiBhgF,MAAjB,EAAyB,GAAG+X,IAA5B,EAAkC;AACvC,SAAOqjM,IAAI,CAACp7M,MAAD,EAAStK,KAAK,CAACuR,IAAf,EAAqBmlH,MAArB,EAA6Br0G,IAA7B,CAAX;AACD;;AAED,SAASq0G,MAAT,CAAgBpsH,MAAhB,EAAwB;AACtB,MAAIA,MAAM,CAAC9K,MAAP,KAAkB,CAAtB,EAAyB,MAAM,IAAIf,KAAJ,CAAU,eAAV,CAAN;AACzB,SAAO6L,MAAM,CAAC,CAAD,CAAb;AACD;;AAED,SAASo7M,IAAT,CAAcp7M,MAAd,EAAsBX,GAAtB,EAA2B8C,MAA3B,EAAmC4V,IAAnC,EAAyC;AACvC,SAAQ,SAASwjM,OAAT,CAAiBv7M,MAAjB,EAAyBpK,CAAzB,EAA4B;AAClC,QAAIA,CAAC,IAAImiB,IAAI,CAAC7iB,MAAd,EAAsB,OAAOiN,MAAM,CAACnC,MAAD,CAAb;AACtB,UAAM84M,MAAM,GAAG,IAAI1+M,GAAJ,EAAf;AACA,UAAMohN,KAAK,GAAGzjM,IAAI,CAACniB,CAAC,EAAF,CAAlB;AACA,QAAI8F,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,YAAMnG,GAAG,GAAG2hN,KAAK,CAAC5iN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAjB;AACA,YAAMuhH,KAAK,GAAGu3F,MAAM,CAACpgN,GAAP,CAAWmB,GAAX,CAAd;AACA,UAAI0nH,KAAJ,EAAWA,KAAK,CAAC1rH,IAAN,CAAW+C,KAAX,EAAX,KACKkgN,MAAM,CAACvgN,GAAP,CAAWsB,GAAX,EAAgB,CAACjB,KAAD,CAAhB;AACN;;AACD,SAAK,MAAM,CAACiB,GAAD,EAAMmG,MAAN,CAAX,IAA4B84M,MAA5B,EAAoC;AAClCA,MAAAA,MAAM,CAACvgN,GAAP,CAAWsB,GAAX,EAAgB0hN,OAAO,CAACv7M,MAAD,EAASpK,CAAT,CAAvB;AACD;;AACD,WAAOyJ,GAAG,CAACy5M,MAAD,CAAV;AACD,GAfM,CAeJ94M,MAfI,EAeI,CAfJ,CAAP;AAgBD;;;;;;;;AChDD,IAAIjK,KAAK,GAAGL,KAAK,CAACM,SAAlB;AAEO,IAAIiJ,KAAK,GAAGlJ,KAAK,CAACkJ,KAAlB;;AACA,IAAII,GAAG,GAAGtJ,KAAK,CAACsJ,GAAhB;;;;;;;;;;ACHQ,kBAAStD,CAAT,EAAY;AACzB,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;;;;;;;;;ACJD,IAAI0/M,GAAG,GAAG9/M,IAAI,CAACqC,IAAL,CAAU,EAAV,CAAV;AAAA,IACI09M,EAAE,GAAG//M,IAAI,CAACqC,IAAL,CAAU,EAAV,CADT;AAAA,IAEI29M,EAAE,GAAGhgN,IAAI,CAACqC,IAAL,CAAU,CAAV,CAFT;;AAIe,kBAAS0D,KAAT,EAAgBy1B,IAAhB,EAAsBw2C,KAAtB,EAA6B;AAC1C,MAAItjE,OAAJ;AAAA,MACIzU,CAAC,GAAG,CAAC,CADT;AAAA,MAEIkO,CAFJ;AAAA,MAGI83M,KAHJ;AAAA,MAIItrM,IAJJ;AAMA6mB,EAAAA,IAAI,GAAG,CAACA,IAAR,EAAcz1B,KAAK,GAAG,CAACA,KAAvB,EAA8BisE,KAAK,GAAG,CAACA,KAAvC;AACA,MAAIjsE,KAAK,KAAKy1B,IAAV,IAAkBw2C,KAAK,GAAG,CAA9B,EAAiC,OAAO,CAACjsE,KAAD,CAAP;AACjC,MAAI2I,OAAO,GAAG8sB,IAAI,GAAGz1B,KAArB,EAA4BoC,CAAC,GAAGpC,KAAJ,EAAWA,KAAK,GAAGy1B,IAAnB,EAAyBA,IAAI,GAAGrzB,CAAhC;AAC5B,MAAI,CAACwM,IAAI,GAAGurM,aAAa,CAACn6M,KAAD,EAAQy1B,IAAR,EAAcw2C,KAAd,CAArB,MAA+C,CAA/C,IAAoD,CAACltE,QAAQ,CAAC6P,IAAD,CAAjE,EAAyE,OAAO,EAAP;;AAEzE,MAAIA,IAAI,GAAG,CAAX,EAAc;AACZ5O,IAAAA,KAAK,GAAG/F,IAAI,CAACoC,IAAL,CAAU2D,KAAK,GAAG4O,IAAlB,CAAR;AACA6mB,IAAAA,IAAI,GAAGx7B,IAAI,CAAC+H,KAAL,CAAWyzB,IAAI,GAAG7mB,IAAlB,CAAP;AACAsrM,IAAAA,KAAK,GAAG,IAAIlmN,KAAJ,CAAUoO,CAAC,GAAGnI,IAAI,CAACoC,IAAL,CAAUo5B,IAAI,GAAGz1B,KAAP,GAAe,CAAzB,CAAd,CAAR;;AACA,WAAO,EAAE9L,CAAF,GAAMkO,CAAb,EAAgB83M,KAAK,CAAChmN,CAAD,CAAL,GAAW,CAAC8L,KAAK,GAAG9L,CAAT,IAAc0a,IAAzB;AACjB,GALD,MAKO;AACLA,IAAAA,IAAI,GAAG,CAACA,IAAR;AACA5O,IAAAA,KAAK,GAAG/F,IAAI,CAACoC,IAAL,CAAU2D,KAAK,GAAG4O,IAAlB,CAAR;AACA6mB,IAAAA,IAAI,GAAGx7B,IAAI,CAAC+H,KAAL,CAAWyzB,IAAI,GAAG7mB,IAAlB,CAAP;AACAsrM,IAAAA,KAAK,GAAG,IAAIlmN,KAAJ,CAAUoO,CAAC,GAAGnI,IAAI,CAACoC,IAAL,CAAUo5B,IAAI,GAAGz1B,KAAP,GAAe,CAAzB,CAAd,CAAR;;AACA,WAAO,EAAE9L,CAAF,GAAMkO,CAAb,EAAgB83M,KAAK,CAAChmN,CAAD,CAAL,GAAW,CAAC8L,KAAK,GAAG9L,CAAT,IAAc0a,IAAzB;AACjB;;AAED,MAAIjG,OAAJ,EAAauxM,KAAK,CAACvxM,OAAN;AAEb,SAAOuxM,KAAP;AACD;;AAEM,SAASC,aAAT,CAAuBn6M,KAAvB,EAA8By1B,IAA9B,EAAoCw2C,KAApC,EAA2C;AAChD,MAAIr9D,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,IAAiB/F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY2xE,KAAZ,CAA5B;AAAA,MACImuI,KAAK,GAAGngN,IAAI,CAAC+H,KAAL,CAAW/H,IAAI,CAACiK,GAAL,CAAS0K,IAAT,IAAiB3U,IAAI,CAACogN,IAAjC,CADZ;AAAA,MAEI9hM,KAAK,GAAG3J,IAAI,GAAG3U,IAAI,CAAC0Q,GAAL,CAAS,EAAT,EAAayvM,KAAb,CAFnB;AAGA,SAAOA,KAAK,IAAI,CAAT,GACD,CAAC7hM,KAAK,IAAIwhM,GAAT,GAAe,EAAf,GAAoBxhM,KAAK,IAAIyhM,EAAT,GAAc,CAAd,GAAkBzhM,KAAK,IAAI0hM,EAAT,GAAc,CAAd,GAAkB,CAAzD,IAA8DhgN,IAAI,CAAC0Q,GAAL,CAAS,EAAT,EAAayvM,KAAb,CAD7D,GAED,CAACngN,IAAI,CAAC0Q,GAAL,CAAS,EAAT,EAAa,CAACyvM,KAAd,CAAD,IAAyB7hM,KAAK,IAAIwhM,GAAT,GAAe,EAAf,GAAoBxhM,KAAK,IAAIyhM,EAAT,GAAc,CAAd,GAAkBzhM,KAAK,IAAI0hM,EAAT,GAAc,CAAd,GAAkB,CAAjF,CAFN;AAGD;;AAEM,SAASK,QAAT,CAAkBt6M,KAAlB,EAAyBy1B,IAAzB,EAA+Bw2C,KAA/B,EAAsC;AAC3C,MAAIsuI,KAAK,GAAGtgN,IAAI,CAACiT,GAAL,CAASuoB,IAAI,GAAGz1B,KAAhB,IAAyB/F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY2xE,KAAZ,CAArC;AAAA,MACIuuI,KAAK,GAAGvgN,IAAI,CAAC0Q,GAAL,CAAS,EAAT,EAAa1Q,IAAI,CAAC+H,KAAL,CAAW/H,IAAI,CAACiK,GAAL,CAASq2M,KAAT,IAAkBtgN,IAAI,CAACogN,IAAlC,CAAb,CADZ;AAAA,MAEI9hM,KAAK,GAAGgiM,KAAK,GAAGC,KAFpB;AAGA,MAAIjiM,KAAK,IAAIwhM,GAAb,EAAkBS,KAAK,IAAI,EAAT,CAAlB,KACK,IAAIjiM,KAAK,IAAIyhM,EAAb,EAAiBQ,KAAK,IAAI,CAAT,CAAjB,KACA,IAAIjiM,KAAK,IAAI0hM,EAAb,EAAiBO,KAAK,IAAI,CAAT;AACtB,SAAO/kL,IAAI,GAAGz1B,KAAP,GAAe,CAACw6M,KAAhB,GAAwBA,KAA/B;AACD;;;;;;;;;ACnDD;;AAEe,SAASC,IAAT,CAAcz6M,KAAd,EAAqBy1B,IAArB,EAA2Bw2C,KAA3B,EAAkC;AAC/C,MAAIyuI,OAAJ;;AACA,SAAO,IAAP,EAAa;AACX,UAAM9rM,IAAI,GAAG,0BAAc5O,KAAd,EAAqBy1B,IAArB,EAA2Bw2C,KAA3B,CAAb;;AACA,QAAIr9D,IAAI,KAAK8rM,OAAT,IAAoB9rM,IAAI,KAAK,CAA7B,IAAkC,CAAC7P,QAAQ,CAAC6P,IAAD,CAA/C,EAAuD;AACrD,aAAO,CAAC5O,KAAD,EAAQy1B,IAAR,CAAP;AACD,KAFD,MAEO,IAAI7mB,IAAI,GAAG,CAAX,EAAc;AACnB5O,MAAAA,KAAK,GAAG/F,IAAI,CAAC+H,KAAL,CAAWhC,KAAK,GAAG4O,IAAnB,IAA2BA,IAAnC;AACA6mB,MAAAA,IAAI,GAAGx7B,IAAI,CAACoC,IAAL,CAAUo5B,IAAI,GAAG7mB,IAAjB,IAAyBA,IAAhC;AACD,KAHM,MAGA,IAAIA,IAAI,GAAG,CAAX,EAAc;AACnB5O,MAAAA,KAAK,GAAG/F,IAAI,CAACoC,IAAL,CAAU2D,KAAK,GAAG4O,IAAlB,IAA0BA,IAAlC;AACA6mB,MAAAA,IAAI,GAAGx7B,IAAI,CAAC+H,KAAL,CAAWyzB,IAAI,GAAG7mB,IAAlB,IAA0BA,IAAjC;AACD;;AACD8rM,IAAAA,OAAO,GAAG9rM,IAAV;AACD;AACF;;;;;;;;;ACjBD;;;;AAEe,kBAAStQ,MAAT,EAAiB;AAC9B,SAAOrE,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACiK,GAAL,CAAS,oBAAM5F,MAAN,CAAT,IAA0BrE,IAAI,CAAC0gN,GAAzC,IAAgD,CAAvD;AACD;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAIzjN,KAAK,GAAGi9H,iBAAZ;AAAA,MACIm1E,MAAM,GAAGiE,eADb;AAAA,MAEIj3G,SAAS,GAAGskH,gBAFhB;;AAIA,WAASC,SAAT,CAAmB33M,IAAnB,EAAyB;AACvB,QAAI,CAAClP,KAAK,CAACuH,OAAN,CAAc2H,IAAd,CAAL,EAA0BA,IAAI,GAAGlP,KAAK,CAACuR,IAAN,CAAWrC,IAAX,CAAP;AAE1B,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEI6G,CAFJ;AAAA,QAGIiE,MAAM,GAAG,IAAItK,KAAJ,CAAUoO,CAAV,CAHb;;AAKA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBoK,MAAAA,MAAM,CAACpK,CAAD,CAAN,GAAYgD,KAAK,CAACgM,IAAI,CAAChP,CAAD,CAAL,EAAUA,CAAV,EAAagP,IAAb,CAAjB;AACD;;AAED,QAAI43M,EAAE,GAAGxR,MAAM,CAAChrM,MAAD,CAAf;AAAA,QACIi2M,EAAE,GAAGuG,EAAE,CAAC,CAAD,CADX;AAAA,QAEIn0G,EAAE,GAAGm0G,EAAE,CAAC,CAAD,CAFX;AAAA,QAGIC,EAAE,GAAGzkH,SAAS,CAACh4F,MAAD,EAASi2M,EAAT,EAAa5tG,EAAb,CAHlB,CAZuB,CAiBvB;AACA;;AACA,QAAI,CAAC3yG,KAAK,CAACuH,OAAN,CAAcw/M,EAAd,CAAL,EAAwB;AACtBA,MAAAA,EAAE,GAAG,CAACA,EAAN;AACA,UAAIzR,MAAM,KAAKiE,eAAf,EAAuB,CAACgH,EAAD,EAAK5tG,EAAL,IAAW,mBAAK4tG,EAAL,EAAS5tG,EAAT,EAAao0G,EAAb,CAAX;AACvBA,MAAAA,EAAE,GAAG,oBAAMxG,EAAN,EAAU5tG,EAAV,EAAco0G,EAAd,CAAL;AACA,UAAIA,EAAE,CAACA,EAAE,CAACvnN,MAAH,GAAY,CAAb,CAAF,KAAsBmzG,EAA1B,EAA8Bo0G,EAAE,CAACz8L,GAAH,GAJR,CAIkB;AACzC,KAxBsB,CA0BvB;;;AACA,QAAIqtE,CAAC,GAAGovH,EAAE,CAACvnN,MAAX;;AACA,WAAOunN,EAAE,CAAC,CAAD,CAAF,IAASxG,EAAhB,EAAoBwG,EAAE,CAAC/hK,KAAH,IAAY,EAAE2yC,CAAd;;AACpB,WAAOovH,EAAE,CAACpvH,CAAC,GAAG,CAAL,CAAF,GAAYgb,EAAnB,EAAuBo0G,EAAE,CAACz8L,GAAH,IAAU,EAAEqtE,CAAZ;;AAEvB,QAAIqvH,IAAI,GAAG,IAAIhnN,KAAJ,CAAU23F,CAAC,GAAG,CAAd,CAAX;AAAA,QACIsvH,GADJ,CA/BuB,CAkCvB;;AACA,SAAK/mN,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIy3F,CAAjB,EAAoB,EAAEz3F,CAAtB,EAAyB;AACvB+mN,MAAAA,GAAG,GAAGD,IAAI,CAAC9mN,CAAD,CAAJ,GAAU,EAAhB;AACA+mN,MAAAA,GAAG,CAAC1G,EAAJ,GAASrgN,CAAC,GAAG,CAAJ,GAAQ6mN,EAAE,CAAC7mN,CAAC,GAAG,CAAL,CAAV,GAAoBqgN,EAA7B;AACA0G,MAAAA,GAAG,CAACt0G,EAAJ,GAASzyG,CAAC,GAAGy3F,CAAJ,GAAQovH,EAAE,CAAC7mN,CAAD,CAAV,GAAgByyG,EAAzB;AACD,KAvCsB,CAyCvB;;;AACA,SAAKzyG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBmG,MAAAA,CAAC,GAAGiE,MAAM,CAACpK,CAAD,CAAV;;AACA,UAAIqgN,EAAE,IAAIl6M,CAAN,IAAWA,CAAC,IAAIssG,EAApB,EAAwB;AACtBq0G,QAAAA,IAAI,CAAC,qBAAOD,EAAP,EAAW1gN,CAAX,EAAc,CAAd,EAAiBsxF,CAAjB,CAAD,CAAJ,CAA0Bx3F,IAA1B,CAA+B+O,IAAI,CAAChP,CAAD,CAAnC;AACD;AACF;;AAED,WAAO8mN,IAAP;AACD;;AAEDH,EAAAA,SAAS,CAAC3jN,KAAV,GAAkB,UAAS2jB,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAASA,CAAT,CAAtC,EAAmDggM,SAAvE,IAAoF3jN,KAA3F;AACD,GAFD;;AAIA2jN,EAAAA,SAAS,CAACvR,MAAV,GAAmB,UAASzuL,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,GAAG,OAAOzuL,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAT,CAAvC,EAA+DggM,SAAnF,IAAgGvR,MAAvG;AACD,GAFD;;AAIAuR,EAAAA,SAAS,CAACK,UAAV,GAAuB,UAASrgM,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8iG,SAAS,GAAG,OAAOz7E,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B7mB,KAAK,CAACuH,OAAN,CAAcsf,CAAd,IAAmB,uBAAStd,aAAMvK,IAAN,CAAW6nB,CAAX,CAAT,CAAnB,GAA6C,uBAASA,CAAT,CAAvF,EAAoGggM,SAAxH,IAAqIvkH,SAA5I;AACD,GAFD;;AAIA,SAAOukH,SAAP;AACD;;;;;;;;;AC/Ec,SAASvgN,GAAT,CAAagE,MAAb,EAAqBq6M,OAArB,EAA8B;AAC3C,MAAIr+M,GAAJ;;AACA,MAAIq+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,MAAMlyH,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,UAAIpH,KAAK,IAAI,IAAT,KACIoD,GAAG,GAAGpD,KAAN,IAAgBoD,GAAG,KAAK8uH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DoD,QAAAA,GAAG,GAAGpD,KAAN;AACD;AACF;AACF,GAPD,MAOO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,KACIhE,GAAG,GAAGpD,KAAN,IAAgBoD,GAAG,KAAK8uH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DoD,QAAAA,GAAG,GAAGpD,KAAN;AACD;AACF;AACF;;AACD,SAAOoD,GAAP;AACD;;;;;;;;;ACnBc,SAASF,GAAT,CAAakE,MAAb,EAAqBq6M,OAArB,EAA8B;AAC3C,MAAIv+M,GAAJ;;AACA,MAAIu+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,MAAMlyH,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,UAAIpH,KAAK,IAAI,IAAT,KACIkD,GAAG,GAAGlD,KAAN,IAAgBkD,GAAG,KAAKgvH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DkD,QAAAA,GAAG,GAAGlD,KAAN;AACD;AACF;AACF,GAPD,MAOO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,KACIlE,GAAG,GAAGlD,KAAN,IAAgBkD,GAAG,KAAKgvH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DkD,QAAAA,GAAG,GAAGlD,KAAN;AACD;AACF;AACF;;AACD,SAAOkD,GAAP;AACD;;;;;;;;;ACnBD;;;;AAEA;AACA;AACe,SAAS+gN,WAAT,CAAqB9mN,KAArB,EAA4Bmd,CAA5B,EAA+B61B,IAAI,GAAG,CAAtC,EAAyCC,KAAK,GAAGjzC,KAAK,CAACb,MAAN,GAAe,CAAhE,EAAmEwoM,OAAO,GAAGsR,kBAA7E,EAAwF;AACrG,SAAOhmK,KAAK,GAAGD,IAAf,EAAqB;AACnB,QAAIC,KAAK,GAAGD,IAAR,GAAe,GAAnB,EAAwB;AACtB,YAAMjlC,CAAC,GAAGklC,KAAK,GAAGD,IAAR,GAAe,CAAzB;AACA,YAAMskD,CAAC,GAAGn6E,CAAC,GAAG61B,IAAJ,GAAW,CAArB;AACA,YAAMsiC,CAAC,GAAG1vE,IAAI,CAACiK,GAAL,CAAS9B,CAAT,CAAV;AACA,YAAM1K,CAAC,GAAG,MAAMuC,IAAI,CAACiC,GAAL,CAAS,IAAIytE,CAAJ,GAAQ,CAAjB,CAAhB;AACA,YAAMyxI,EAAE,GAAG,MAAMnhN,IAAI,CAACqC,IAAL,CAAUqtE,CAAC,GAAGjyE,CAAJ,IAAS0K,CAAC,GAAG1K,CAAb,IAAkB0K,CAA5B,CAAN,IAAwCupF,CAAC,GAAGvpF,CAAC,GAAG,CAAR,GAAY,CAAZ,GAAgB,CAAC,CAAjB,GAAqB,CAA7D,CAAX;AACA,YAAMi5M,OAAO,GAAGphN,IAAI,CAACK,GAAL,CAAS+sC,IAAT,EAAeptC,IAAI,CAAC+H,KAAL,CAAWwP,CAAC,GAAGm6E,CAAC,GAAGj0F,CAAJ,GAAQ0K,CAAZ,GAAgBg5M,EAA3B,CAAf,CAAhB;AACA,YAAME,QAAQ,GAAGrhN,IAAI,CAACG,GAAL,CAASktC,KAAT,EAAgBrtC,IAAI,CAAC+H,KAAL,CAAWwP,CAAC,GAAG,CAACpP,CAAC,GAAGupF,CAAL,IAAUj0F,CAAV,GAAc0K,CAAlB,GAAsBg5M,EAAjC,CAAhB,CAAjB;AACAD,MAAAA,WAAW,CAAC9mN,KAAD,EAAQmd,CAAR,EAAW6pM,OAAX,EAAoBC,QAApB,EAA8Btf,OAA9B,CAAX;AACD;;AAED,UAAMpkM,CAAC,GAAGvD,KAAK,CAACmd,CAAD,CAAf;AACA,QAAItd,CAAC,GAAGmzC,IAAR;AACA,QAAIlpC,CAAC,GAAGmpC,KAAR;AAEAi0K,IAAAA,IAAI,CAAClnN,KAAD,EAAQgzC,IAAR,EAAc71B,CAAd,CAAJ;AACA,QAAIwqL,OAAO,CAAC3nM,KAAK,CAACizC,KAAD,CAAN,EAAe1vC,CAAf,CAAP,GAA2B,CAA/B,EAAkC2jN,IAAI,CAAClnN,KAAD,EAAQgzC,IAAR,EAAcC,KAAd,CAAJ;;AAElC,WAAOpzC,CAAC,GAAGiK,CAAX,EAAc;AACZo9M,MAAAA,IAAI,CAAClnN,KAAD,EAAQH,CAAR,EAAWiK,CAAX,CAAJ,EAAmB,EAAEjK,CAArB,EAAwB,EAAEiK,CAA1B;;AACA,aAAO69L,OAAO,CAAC3nM,KAAK,CAACH,CAAD,CAAN,EAAW0D,CAAX,CAAP,GAAuB,CAA9B,EAAiC,EAAE1D,CAAF;;AACjC,aAAO8nM,OAAO,CAAC3nM,KAAK,CAAC8J,CAAD,CAAN,EAAWvG,CAAX,CAAP,GAAuB,CAA9B,EAAiC,EAAEuG,CAAF;AAClC;;AAED,QAAI69L,OAAO,CAAC3nM,KAAK,CAACgzC,IAAD,CAAN,EAAczvC,CAAd,CAAP,KAA4B,CAAhC,EAAmC2jN,IAAI,CAAClnN,KAAD,EAAQgzC,IAAR,EAAclpC,CAAd,CAAJ,CAAnC,KACK,EAAEA,CAAF,EAAKo9M,IAAI,CAAClnN,KAAD,EAAQ8J,CAAR,EAAWmpC,KAAX,CAAT;AAEL,QAAInpC,CAAC,IAAIqT,CAAT,EAAY61B,IAAI,GAAGlpC,CAAC,GAAG,CAAX;AACZ,QAAIqT,CAAC,IAAIrT,CAAT,EAAYmpC,KAAK,GAAGnpC,CAAC,GAAG,CAAZ;AACb;;AACD,SAAO9J,KAAP;AACD;;AAED,SAASknN,IAAT,CAAclnN,KAAd,EAAqBH,CAArB,EAAwBiK,CAAxB,EAA2B;AACzB,QAAMvG,CAAC,GAAGvD,KAAK,CAACH,CAAD,CAAf;AACAG,EAAAA,KAAK,CAACH,CAAD,CAAL,GAAWG,KAAK,CAAC8J,CAAD,CAAhB;AACA9J,EAAAA,KAAK,CAAC8J,CAAD,CAAL,GAAWvG,CAAX;AACD;;;;;;;;;;AC3CD;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAAS4jN,QAAT,CAAkBl9M,MAAlB,EAA0Bk6B,CAA1B,EAA6BmgL,OAA7B,EAAsC;AACnDr6M,EAAAA,MAAM,GAAG66M,YAAY,CAAC5zM,IAAb,CAAkB,qBAAQjH,MAAR,EAAgBq6M,OAAhB,CAAlB,CAAT;AACA,MAAI,EAAEv2M,CAAC,GAAG9D,MAAM,CAAC9K,MAAb,CAAJ,EAA0B;AAC1B,MAAI,CAACglC,CAAC,GAAG,CAACA,CAAN,KAAY,CAAZ,IAAiBp2B,CAAC,GAAG,CAAzB,EAA4B,OAAO,kBAAI9D,MAAJ,CAAP;AAC5B,MAAIk6B,CAAC,IAAI,CAAT,EAAY,OAAO,kBAAIl6B,MAAJ,CAAP;AACZ,MAAI8D,CAAJ;AAAA,MACIlO,CAAC,GAAG,CAACkO,CAAC,GAAG,CAAL,IAAUo2B,CADlB;AAAA,MAEIo8D,EAAE,GAAG36F,IAAI,CAAC+H,KAAL,CAAW9N,CAAX,CAFT;AAAA,MAGIunN,MAAM,GAAG,kBAAI,0BAAYn9M,MAAZ,EAAoBs2F,EAApB,EAAwBvoD,QAAxB,CAAiC,CAAjC,EAAoCuoD,EAAE,GAAG,CAAzC,CAAJ,CAHb;AAAA,MAII8mH,MAAM,GAAG,kBAAIp9M,MAAM,CAAC+tC,QAAP,CAAgBuoD,EAAE,GAAG,CAArB,CAAJ,CAJb;AAKA,SAAO6mH,MAAM,GAAG,CAACC,MAAM,GAAGD,MAAV,KAAqBvnN,CAAC,GAAG0gG,EAAzB,CAAhB;AACD;;AAEM,SAAS+mH,cAAT,CAAwBr9M,MAAxB,EAAgCk6B,CAAhC,EAAmCmgL,OAAO,GAAGzI,eAA7C,EAAqD;AAC1D,MAAI,EAAE9tM,CAAC,GAAG9D,MAAM,CAAC9K,MAAb,CAAJ,EAA0B;AAC1B,MAAI,CAACglC,CAAC,GAAG,CAACA,CAAN,KAAY,CAAZ,IAAiBp2B,CAAC,GAAG,CAAzB,EAA4B,OAAO,CAACu2M,OAAO,CAACr6M,MAAM,CAAC,CAAD,CAAP,EAAY,CAAZ,EAAeA,MAAf,CAAf;AAC5B,MAAIk6B,CAAC,IAAI,CAAT,EAAY,OAAO,CAACmgL,OAAO,CAACr6M,MAAM,CAAC8D,CAAC,GAAG,CAAL,CAAP,EAAgBA,CAAC,GAAG,CAApB,EAAuB9D,MAAvB,CAAf;AACZ,MAAI8D,CAAJ;AAAA,MACIlO,CAAC,GAAG,CAACkO,CAAC,GAAG,CAAL,IAAUo2B,CADlB;AAAA,MAEIo8D,EAAE,GAAG36F,IAAI,CAAC+H,KAAL,CAAW9N,CAAX,CAFT;AAAA,MAGIunN,MAAM,GAAG,CAAC9C,OAAO,CAACr6M,MAAM,CAACs2F,EAAD,CAAP,EAAaA,EAAb,EAAiBt2F,MAAjB,CAHrB;AAAA,MAIIo9M,MAAM,GAAG,CAAC/C,OAAO,CAACr6M,MAAM,CAACs2F,EAAE,GAAG,CAAN,CAAP,EAAiBA,EAAE,GAAG,CAAtB,EAAyBt2F,MAAzB,CAJrB;AAKA,SAAOm9M,MAAM,GAAG,CAACC,MAAM,GAAGD,MAAV,KAAqBvnN,CAAC,GAAG0gG,EAAzB,CAAhB;AACD;;;;;;;;;AC5BD;;AACA;;;;AAEe,kBAASt2F,MAAT,EAAiBlE,GAAjB,EAAsBE,GAAtB,EAA2B;AACxC,SAAOL,IAAI,CAACoC,IAAL,CAAU,CAAC/B,GAAG,GAAGF,GAAP,KAAe,KAAK,uBAASkE,MAAT,EAAiB,IAAjB,IAAyB,uBAASA,MAAT,EAAiB,IAAjB,CAA9B,IAAwDrE,IAAI,CAAC0Q,GAAL,CAAS,oBAAMrM,MAAN,CAAT,EAAwB,CAAC,CAAD,GAAK,CAA7B,CAAvE,CAAV,CAAP;AACD;;;;;;;;;ACLD;;AACA;;;;AAEe,kBAASA,MAAT,EAAiBlE,GAAjB,EAAsBE,GAAtB,EAA2B;AACxC,SAAOL,IAAI,CAACoC,IAAL,CAAU,CAAC/B,GAAG,GAAGF,GAAP,KAAe,MAAM,wBAAUkE,MAAV,CAAN,GAA0BrE,IAAI,CAAC0Q,GAAL,CAAS,oBAAMrM,MAAN,CAAT,EAAwB,CAAC,CAAD,GAAK,CAA7B,CAAzC,CAAV,CAAP;AACD;;;;;;;;;ACLc,SAASm3F,QAAT,CAAkBn3F,MAAlB,EAA0Bq6M,OAA1B,EAAmC;AAChD,MAAIr+M,GAAJ;AACA,MAAIm7F,QAAQ,GAAG,CAAC,CAAhB;AACA,MAAIz7F,KAAK,GAAG,CAAC,CAAb;;AACA,MAAI2+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,MAAMlyH,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAEtE,KAAF;;AACA,UAAI9C,KAAK,IAAI,IAAT,KACIoD,GAAG,GAAGpD,KAAN,IAAgBoD,GAAG,KAAK8uH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DoD,QAAAA,GAAG,GAAGpD,KAAN,EAAau+F,QAAQ,GAAGz7F,KAAxB;AACD;AACF;AACF,GARD,MAQO;AACL,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,KACIhE,GAAG,GAAGpD,KAAN,IAAgBoD,GAAG,KAAK8uH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DoD,QAAAA,GAAG,GAAGpD,KAAN,EAAau+F,QAAQ,GAAGz7F,KAAxB;AACD;AACF;AACF;;AACD,SAAOy7F,QAAP;AACD;;;;;;;;;ACrBc,SAAS7rF,IAAT,CAActL,MAAd,EAAsBq6M,OAAtB,EAA+B;AAC5C,MAAI1sI,KAAK,GAAG,CAAZ;AACA,MAAIxxE,GAAG,GAAG,CAAV;;AACA,MAAIk+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,IAAI,IAAT,IAAiB,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzC,EAAgD;AAC9C,UAAE+0E,KAAF,EAASxxE,GAAG,IAAIvD,KAAhB;AACD;AACF;AACF,GAND,MAMO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,IAAqD,CAACpH,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAA7E,EAAoF;AAClF,UAAE+0E,KAAF,EAASxxE,GAAG,IAAIvD,KAAhB;AACD;AACF;AACF;;AACD,MAAI+0E,KAAJ,EAAW,OAAOxxE,GAAG,GAAGwxE,KAAb;AACZ;;;;;;;;;AClBD;;;;AAEe,kBAAS3tE,MAAT,EAAiBq6M,OAAjB,EAA0B;AACvC,SAAO,uBAASr6M,MAAT,EAAiB,GAAjB,EAAsBq6M,OAAtB,CAAP;AACD;;;;;;;;;ACJD,UAAUt9M,OAAV,CAAkB85E,MAAlB,EAA0B;AACxB,OAAK,MAAM9gF,KAAX,IAAoB8gF,MAApB,EAA4B;AAC1B,WAAO9gF,KAAP;AACD;AACF;;AAEc,SAAS65M,KAAT,CAAe/4H,MAAf,EAAuB;AACpC,SAAOnhF,KAAK,CAACuR,IAAN,CAAWlK,OAAO,CAAC85E,MAAD,CAAlB,CAAP;AACD;;;;;;;;;ACRc,SAASqgB,QAAT,CAAkBl3F,MAAlB,EAA0Bq6M,OAA1B,EAAmC;AAChD,MAAIv+M,GAAJ;AACA,MAAIo7F,QAAQ,GAAG,CAAC,CAAhB;AACA,MAAIx7F,KAAK,GAAG,CAAC,CAAb;;AACA,MAAI2+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,MAAMlyH,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAEtE,KAAF;;AACA,UAAI9C,KAAK,IAAI,IAAT,KACIkD,GAAG,GAAGlD,KAAN,IAAgBkD,GAAG,KAAKgvH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DkD,QAAAA,GAAG,GAAGlD,KAAN,EAAas+F,QAAQ,GAAGx7F,KAAxB;AACD;AACF;AACF,GARD,MAQO;AACL,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAI,CAACpH,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAhB,KAA6C,IAA7C,KACIlE,GAAG,GAAGlD,KAAN,IAAgBkD,GAAG,KAAKgvH,SAAR,IAAqBlyH,KAAK,IAAIA,KADlD,CAAJ,EAC+D;AAC7DkD,QAAAA,GAAG,GAAGlD,KAAN,EAAas+F,QAAQ,GAAGx7F,KAAxB;AACD;AACF;AACF;;AACD,SAAOw7F,QAAP;AACD;;;;;;;;;;ACrBc,SAASomH,KAAT,CAAet9M,MAAf,EAAuBu9M,MAAM,GAAGC,IAAhC,EAAsC;AACnD,QAAMF,KAAK,GAAG,EAAd;AACA,MAAIG,QAAJ;AACA,MAAIC,KAAK,GAAG,KAAZ;;AACA,OAAK,MAAM9kN,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAI09M,KAAJ,EAAWJ,KAAK,CAACznN,IAAN,CAAW0nN,MAAM,CAACE,QAAD,EAAW7kN,KAAX,CAAjB;AACX6kN,IAAAA,QAAQ,GAAG7kN,KAAX;AACA8kN,IAAAA,KAAK,GAAG,IAAR;AACD;;AACD,SAAOJ,KAAP;AACD;;AAEM,SAASE,IAAT,CAAc1gN,CAAd,EAAiB6G,CAAjB,EAAoB;AACzB,SAAO,CAAC7G,CAAD,EAAI6G,CAAJ,CAAP;AACD;;;;;;;;;ACdc,kBAAS+nD,MAAT,EAAiB3zC,IAAjB,EAAuB;AACpC,SAAOriB,KAAK,CAACuR,IAAN,CAAW8Q,IAAX,EAAiBle,GAAG,IAAI6xD,MAAM,CAAC7xD,GAAD,CAA9B,CAAP;AACD;;;;;;;;;ACFc,kBAAS6H,KAAT,EAAgBy1B,IAAhB,EAAsB7mB,IAAtB,EAA4B;AACzC5O,EAAAA,KAAK,GAAG,CAACA,KAAT,EAAgBy1B,IAAI,GAAG,CAACA,IAAxB,EAA8B7mB,IAAI,GAAG,CAACxM,CAAC,GAAGnO,SAAS,CAACT,MAAf,IAAyB,CAAzB,IAA8BiiC,IAAI,GAAGz1B,KAAP,EAAcA,KAAK,GAAG,CAAtB,EAAyB,CAAvD,IAA4DoC,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAACwM,IAA9G;AAEA,MAAI1a,CAAC,GAAG,CAAC,CAAT;AAAA,MACIkO,CAAC,GAAGnI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACoC,IAAL,CAAU,CAACo5B,IAAI,GAAGz1B,KAAR,IAAiB4O,IAA3B,CAAZ,IAAgD,CADxD;AAAA,MAEI8mB,KAAK,GAAG,IAAI1hC,KAAJ,CAAUoO,CAAV,CAFZ;;AAIA,SAAO,EAAElO,CAAF,GAAMkO,CAAb,EAAgB;AACdszB,IAAAA,KAAK,CAACxhC,CAAD,CAAL,GAAW8L,KAAK,GAAG9L,CAAC,GAAG0a,IAAvB;AACD;;AAED,SAAO8mB,KAAP;AACD;;;;;;;;;ACZD;;;;AAEe,SAASumL,KAAT,CAAe39M,MAAf,EAAuB09L,OAAO,GAAGsR,kBAAjC,EAA4C;AACzD,MAAIlzM,GAAJ;AACA,MAAI8hN,OAAO,GAAG,KAAd;;AACA,MAAIlgB,OAAO,CAACxoM,MAAR,KAAmB,CAAvB,EAA0B;AACxB,QAAIs5H,QAAJ;;AACA,SAAK,MAAMviF,OAAX,IAAsBjsC,MAAtB,EAA8B;AAC5B,YAAMpH,KAAK,GAAG8kM,OAAO,CAACzxJ,OAAD,CAArB;;AACA,UAAI2xK,OAAO,GACL,wBAAUhlN,KAAV,EAAiB41H,QAAjB,IAA6B,CADxB,GAEL,wBAAU51H,KAAV,EAAiBA,KAAjB,MAA4B,CAFlC,EAEqC;AACnCkD,QAAAA,GAAG,GAAGmwC,OAAN;AACAuiF,QAAAA,QAAQ,GAAG51H,KAAX;AACAglN,QAAAA,OAAO,GAAG,IAAV;AACD;AACF;AACF,GAZD,MAYO;AACL,SAAK,MAAMhlN,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,UAAI49M,OAAO,GACLlgB,OAAO,CAAC9kM,KAAD,EAAQkD,GAAR,CAAP,GAAsB,CADjB,GAEL4hM,OAAO,CAAC9kM,KAAD,EAAQA,KAAR,CAAP,KAA0B,CAFhC,EAEmC;AACjCkD,QAAAA,GAAG,GAAGlD,KAAN;AACAglN,QAAAA,OAAO,GAAG,IAAV;AACD;AACF;AACF;;AACD,SAAO9hN,GAAP;AACD;;;;;;;;;AC5BD;;AACA;;;;AAEe,SAAS+hN,UAAT,CAAoB79M,MAApB,EAA4B09L,OAAO,GAAGsR,kBAAtC,EAAiD;AAC9D,MAAItR,OAAO,CAACxoM,MAAR,KAAmB,CAAvB,EAA0B,OAAO,uBAAS8K,MAAT,EAAiB09L,OAAjB,CAAP;AAC1B,MAAIlvE,QAAJ;AACA,MAAI1yH,GAAG,GAAG,CAAC,CAAX;AACA,MAAIJ,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,MAAEtE,KAAF;;AACA,QAAII,GAAG,GAAG,CAAN,GACE4hM,OAAO,CAAC9kM,KAAD,EAAQA,KAAR,CAAP,KAA0B,CAD5B,GAEE8kM,OAAO,CAAC9kM,KAAD,EAAQ41H,QAAR,CAAP,GAA2B,CAFjC,EAEoC;AAClCA,MAAAA,QAAQ,GAAG51H,KAAX;AACAkD,MAAAA,GAAG,GAAGJ,KAAN;AACD;AACF;;AACD,SAAOI,GAAP;AACD;;;;;;;;;AClBD;;;;AAEe,SAASgiN,QAAT,CAAkB99M,MAAlB,EAA0B09L,OAAO,GAAGsR,kBAApC,EAA+C;AAC5D,MAAIhzM,GAAJ;AACA,MAAI4hN,OAAO,GAAG,KAAd;;AACA,MAAIlgB,OAAO,CAACxoM,MAAR,KAAmB,CAAvB,EAA0B;AACxB,QAAIw+F,QAAJ;;AACA,SAAK,MAAMznD,OAAX,IAAsBjsC,MAAtB,EAA8B;AAC5B,YAAMpH,KAAK,GAAG8kM,OAAO,CAACzxJ,OAAD,CAArB;;AACA,UAAI2xK,OAAO,GACL,wBAAUhlN,KAAV,EAAiB86F,QAAjB,IAA6B,CADxB,GAEL,wBAAU96F,KAAV,EAAiBA,KAAjB,MAA4B,CAFlC,EAEqC;AACnCoD,QAAAA,GAAG,GAAGiwC,OAAN;AACAynD,QAAAA,QAAQ,GAAG96F,KAAX;AACAglN,QAAAA,OAAO,GAAG,IAAV;AACD;AACF;AACF,GAZD,MAYO;AACL,SAAK,MAAMhlN,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,UAAI49M,OAAO,GACLlgB,OAAO,CAAC9kM,KAAD,EAAQoD,GAAR,CAAP,GAAsB,CADjB,GAEL0hM,OAAO,CAAC9kM,KAAD,EAAQA,KAAR,CAAP,KAA0B,CAFhC,EAEmC;AACjCoD,QAAAA,GAAG,GAAGpD,KAAN;AACAglN,QAAAA,OAAO,GAAG,IAAV;AACD;AACF;AACF;;AACD,SAAO5hN,GAAP;AACD;;;;;;;;;AC5BD;;AACA;;;;AAEe,SAAS+hN,aAAT,CAAuB/9M,MAAvB,EAA+B09L,OAAO,GAAGsR,kBAAzC,EAAoD;AACjE,MAAItR,OAAO,CAACxoM,MAAR,KAAmB,CAAvB,EAA0B,OAAO,uBAAS8K,MAAT,EAAiB09L,OAAjB,CAAP;AAC1B,MAAIhqG,QAAJ;AACA,MAAI13F,GAAG,GAAG,CAAC,CAAX;AACA,MAAIN,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,MAAEtE,KAAF;;AACA,QAAIM,GAAG,GAAG,CAAN,GACE0hM,OAAO,CAAC9kM,KAAD,EAAQA,KAAR,CAAP,KAA0B,CAD5B,GAEE8kM,OAAO,CAAC9kM,KAAD,EAAQ86F,QAAR,CAAP,GAA2B,CAFjC,EAEoC;AAClCA,MAAAA,QAAQ,GAAG96F,KAAX;AACAoD,MAAAA,GAAG,GAAGN,KAAN;AACD;AACF;;AACD,SAAOM,GAAP;AACD;;;;;;;;;AClBD;;;;AAEe,SAASgiN,IAAT,CAAch+M,MAAd,EAAsB09L,OAAtB,EAA+B;AAC5C,QAAMhiM,KAAK,GAAG,yBAAWsE,MAAX,EAAmB09L,OAAnB,CAAd;AACA,SAAOhiM,KAAK,GAAG,CAAR,GAAYovH,SAAZ,GAAwBpvH,KAA/B;AACD;;;;;;;;;;eCLcuiN,QAAQ,CAACtiN,IAAI,CAACC,MAAN;;;;AAEhB,SAASqiN,QAAT,CAAkBriN,MAAlB,EAA0B;AAC/B,SAAO,SAASL,OAAT,CAAiBxF,KAAjB,EAAwBugG,EAAE,GAAG,CAA7B,EAAgC23G,EAAE,GAAGl4M,KAAK,CAACb,MAA3C,EAAmD;AACxD,QAAIm4F,CAAC,GAAG4gH,EAAE,IAAI33G,EAAE,GAAG,CAACA,EAAV,CAAV;;AACA,WAAOjJ,CAAP,EAAU;AACR,YAAMz3F,CAAC,GAAGgG,MAAM,KAAKyxF,CAAC,EAAZ,GAAiB,CAA3B;AAAA,YAA8B/zF,CAAC,GAAGvD,KAAK,CAACs3F,CAAC,GAAGiJ,EAAL,CAAvC;AACAvgG,MAAAA,KAAK,CAACs3F,CAAC,GAAGiJ,EAAL,CAAL,GAAgBvgG,KAAK,CAACH,CAAC,GAAG0gG,EAAL,CAArB;AACAvgG,MAAAA,KAAK,CAACH,CAAC,GAAG0gG,EAAL,CAAL,GAAgBh9F,CAAhB;AACD;;AACD,WAAOvD,KAAP;AACD,GARD;AASD;;;;;;;;;ACZc,SAASoG,GAAT,CAAa6D,MAAb,EAAqBq6M,OAArB,EAA8B;AAC3C,MAAIl+M,GAAG,GAAG,CAAV;;AACA,MAAIk+M,OAAO,KAAKvvF,SAAhB,EAA2B;AACzB,SAAK,IAAIlyH,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,GAAG,CAACA,KAAb,EAAoB;AAClBuD,QAAAA,GAAG,IAAIvD,KAAP;AACD;AACF;AACF,GAND,MAMO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AACA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,GAAG,CAACyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAApB,EAA8C;AAC5C7D,QAAAA,GAAG,IAAIvD,KAAP;AACD;AACF;AACF;;AACD,SAAOuD,GAAP;AACD;;;;;;;;;ACjBD;;;;AAEe,kBAAS+hN,MAAT,EAAiB;AAC9B,MAAI,EAAEp6M,CAAC,GAAGo6M,MAAM,CAAChpN,MAAb,CAAJ,EAA0B,OAAO,EAAP;;AAC1B,OAAK,IAAIU,CAAC,GAAG,CAAC,CAAT,EAAYy3F,CAAC,GAAG,kBAAI6wH,MAAJ,EAAYhpN,MAAZ,CAAhB,EAAqC2jC,SAAS,GAAG,IAAInjC,KAAJ,CAAU23F,CAAV,CAAtD,EAAoE,EAAEz3F,CAAF,GAAMy3F,CAA1E,GAA8E;AAC5E,SAAK,IAAIxtF,CAAC,GAAG,CAAC,CAAT,EAAYiE,CAAZ,EAAeyC,GAAG,GAAGsyB,SAAS,CAACjjC,CAAD,CAAT,GAAe,IAAIF,KAAJ,CAAUoO,CAAV,CAAzC,EAAuD,EAAEjE,CAAF,GAAMiE,CAA7D,GAAiE;AAC/DyC,MAAAA,GAAG,CAAC1G,CAAD,CAAH,GAASq+M,MAAM,CAACr+M,CAAD,CAAN,CAAUjK,CAAV,CAAT;AACD;AACF;;AACD,SAAOijC,SAAP;AACD;;AAED,SAAS3jC,MAAT,CAAgBuN,CAAhB,EAAmB;AACjB,SAAOA,CAAC,CAACvN,MAAT;AACD;;;;;;;;;ACdD;;;;AAEe,oBAAW;AACxB,SAAO,wBAAUS,SAAV,CAAP;AACD;;;;;;;;;ACJc,SAAS2J,KAAT,CAAeU,MAAf,EAAuBujB,IAAvB,EAA6B;AAC1C,MAAI,OAAOA,IAAP,KAAgB,UAApB,EAAgC,MAAM,IAAIu5G,SAAJ,CAAc,wBAAd,CAAN;AAChC,MAAIphI,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAI,CAACujB,IAAI,CAAC3qB,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAT,EAAmC;AACjC,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACTc,SAAS4W,IAAT,CAAc5W,MAAd,EAAsBujB,IAAtB,EAA4B;AACzC,MAAI,OAAOA,IAAP,KAAgB,UAApB,EAAgC,MAAM,IAAIu5G,SAAJ,CAAc,wBAAd,CAAN;AAChC,MAAIphI,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAIujB,IAAI,CAAC3qB,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAR,EAAkC;AAChC,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;;;;;;;;ACTc,SAAS+Q,MAAT,CAAgB/Q,MAAhB,EAAwBujB,IAAxB,EAA8B;AAC3C,MAAI,OAAOA,IAAP,KAAgB,UAApB,EAAgC,MAAM,IAAIu5G,SAAJ,CAAc,wBAAd,CAAN;AAChC,QAAM/mI,KAAK,GAAG,EAAd;AACA,MAAI2F,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAM9C,KAAX,IAAoBoH,MAApB,EAA4B;AAC1B,QAAIujB,IAAI,CAAC3qB,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAR,EAAkC;AAChCjK,MAAAA,KAAK,CAACF,IAAN,CAAW+C,KAAX;AACD;AACF;;AACD,SAAO7C,KAAP;AACD;;;;;;;;;ACVc,SAASsJ,GAAT,CAAaW,MAAb,EAAqBgqK,MAArB,EAA6B;AAC1C,MAAI,OAAOhqK,MAAM,CAACmU,MAAM,CAACslI,QAAR,CAAb,KAAmC,UAAvC,EAAmD,MAAM,IAAI3c,SAAJ,CAAc,wBAAd,CAAN;AACnD,MAAI,OAAOktC,MAAP,KAAkB,UAAtB,EAAkC,MAAM,IAAIltC,SAAJ,CAAc,0BAAd,CAAN;AAClC,SAAOpnI,KAAK,CAACuR,IAAN,CAAWjH,MAAX,EAAmB,CAACpH,KAAD,EAAQ8C,KAAR,KAAkBsuK,MAAM,CAACpxK,KAAD,EAAQ8C,KAAR,EAAesE,MAAf,CAA3C,CAAP;AACD;;;;;;;;;ACJc,SAASmC,MAAT,CAAgBnC,MAAhB,EAAwB26M,OAAxB,EAAiC/hN,KAAjC,EAAwC;AACrD,MAAI,OAAO+hN,OAAP,KAAmB,UAAvB,EAAmC,MAAM,IAAI79E,SAAJ,CAAc,2BAAd,CAAN;AACnC,QAAM2c,QAAQ,GAAGz5I,MAAM,CAACmU,MAAM,CAACslI,QAAR,CAAN,EAAjB;AACA,MAAI1+I,IAAJ;AAAA,MAAUuvE,IAAV;AAAA,MAAgB5uE,KAAK,GAAG,CAAC,CAAzB;;AACA,MAAI/F,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB,KAAC;AAAC6F,MAAAA,IAAD;AAAOnC,MAAAA;AAAP,QAAgB6gJ,QAAQ,CAACnvE,IAAT,EAAjB;AACA,QAAIvvE,IAAJ,EAAU;AACV,MAAEW,KAAF;AACD;;AACD,SAAO,CAAC;AAACX,IAAAA,IAAD;AAAOnC,IAAAA,KAAK,EAAE0xE;AAAd,MAAsBmvE,QAAQ,CAACnvE,IAAT,EAAvB,GAAyC,CAACvvE,IAAjD,EAAuD;AACrDnC,IAAAA,KAAK,GAAG+hN,OAAO,CAAC/hN,KAAD,EAAQ0xE,IAAR,EAAc,EAAE5uE,KAAhB,EAAuBsE,MAAvB,CAAf;AACD;;AACD,SAAOpH,KAAP;AACD;;;;;;;;;ACbc,SAASyR,OAAT,CAAiBrK,MAAjB,EAAyB;AACtC,MAAI,OAAOA,MAAM,CAACmU,MAAM,CAACslI,QAAR,CAAb,KAAmC,UAAvC,EAAmD,MAAM,IAAI3c,SAAJ,CAAc,wBAAd,CAAN;AACnD,SAAOpnI,KAAK,CAACuR,IAAN,CAAWjH,MAAX,EAAmBqK,OAAnB,EAAP;AACD;;;;;;;;;ACHD;;;;AAEe,SAASzK,IAAT,CAAcI,MAAd,EAAsBksC,UAAU,GAAG8iK,kBAAnC,EAA8C;AAC3D,MAAI,OAAOhvM,MAAM,CAACmU,MAAM,CAACslI,QAAR,CAAb,KAAmC,UAAvC,EAAmD,MAAM,IAAI3c,SAAJ,CAAc,wBAAd,CAAN;AACnD,SAAOpnI,KAAK,CAACuR,IAAN,CAAWjH,MAAX,EAAmBJ,IAAnB,CAAwBssC,UAAxB,CAAP;AACD;;;;;;;;;ACLc,SAASiyK,UAAT,CAAoBn+M,MAApB,EAA4B,GAAGo+M,MAA/B,EAAuC;AACpDp+M,EAAAA,MAAM,GAAG,IAAIwW,GAAJ,CAAQxW,MAAR,CAAT;;AACA,OAAK,MAAM0gM,KAAX,IAAoB0d,MAApB,EAA4B;AAC1B,SAAK,MAAMxlN,KAAX,IAAoB8nM,KAApB,EAA2B;AACzB1gM,MAAAA,MAAM,CAAC3E,MAAP,CAAczC,KAAd;AACD;AACF;;AACD,SAAOoH,MAAP;AACD;;;;;;;;;ACRc,SAAS8oD,QAAT,CAAkB9oD,MAAlB,EAA0B0gM,KAA1B,EAAiC;AAC9C,QAAMjnD,QAAQ,GAAGinD,KAAK,CAACvsL,MAAM,CAACslI,QAAR,CAAL,EAAjB;AAAA,QAA2ClhJ,GAAG,GAAG,IAAIie,GAAJ,EAAjD;;AACA,OAAK,MAAM1O,CAAX,IAAgB9H,MAAhB,EAAwB;AACtB,QAAIzH,GAAG,CAAC2C,GAAJ,CAAQ4M,CAAR,CAAJ,EAAgB,OAAO,KAAP;AAChB,QAAIlP,KAAJ,EAAWmC,IAAX;;AACA,YAAQ;AAACnC,MAAAA,KAAD;AAAQmC,MAAAA;AAAR,QAAgB0+I,QAAQ,CAACnvE,IAAT,EAAxB,GAA0C;AACxC,UAAIvvE,IAAJ,EAAU;AACV,UAAIpC,MAAM,CAAC0lN,EAAP,CAAUv2M,CAAV,EAAalP,KAAb,CAAJ,EAAyB,OAAO,KAAP;AACzBL,MAAAA,GAAG,CAACge,GAAJ,CAAQ3d,KAAR;AACD;AACF;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACZc,SAASL,GAAT,CAAayH,MAAb,EAAqB;AAClC,SAAOA,MAAM,YAAYwW,GAAlB,GAAwBxW,MAAxB,GAAiC,IAAIwW,GAAJ,CAAQxW,MAAR,CAAxC;AACD;;;;;;;;;ACFD;;;;AAEe,SAASs+M,YAAT,CAAsBt+M,MAAtB,EAA8B,GAAGo+M,MAAjC,EAAyC;AACtDp+M,EAAAA,MAAM,GAAG,IAAIwW,GAAJ,CAAQxW,MAAR,CAAT;AACAo+M,EAAAA,MAAM,GAAGA,MAAM,CAAC/+M,GAAP,CAAW9G,YAAX,CAAT;;AACA0jB,EAAAA,GAAG,EAAE,KAAK,MAAMrjB,KAAX,IAAoBoH,MAApB,EAA4B;AAC/B,SAAK,MAAM0gM,KAAX,IAAoB0d,MAApB,EAA4B;AAC1B,UAAI,CAAC1d,KAAK,CAACxlM,GAAN,CAAUtC,KAAV,CAAL,EAAuB;AACrBoH,QAAAA,MAAM,CAAC3E,MAAP,CAAczC,KAAd;AACA,iBAASqjB,GAAT;AACD;AACF;AACF;;AACD,SAAOjc,MAAP;AACD;;;;;;;;;ACdc,SAASu+M,QAAT,CAAkBv+M,MAAlB,EAA0B0gM,KAA1B,EAAiC;AAC9C,QAAMjnD,QAAQ,GAAGz5I,MAAM,CAACmU,MAAM,CAACslI,QAAR,CAAN,EAAjB;AAAA,QAA4ClhJ,GAAG,GAAG,IAAIie,GAAJ,EAAlD;;AACA,OAAK,MAAM+K,CAAX,IAAgBm/K,KAAhB,EAAuB;AACrB,QAAInoM,GAAG,CAAC2C,GAAJ,CAAQqmB,CAAR,CAAJ,EAAgB;AAChB,QAAI3oB,KAAJ,EAAWmC,IAAX;;AACA,YAAQ;AAACnC,MAAAA,KAAD;AAAQmC,MAAAA;AAAR,QAAgB0+I,QAAQ,CAACnvE,IAAT,EAAxB,GAA0C;AACxC,UAAIvvE,IAAJ,EAAU,OAAO,KAAP;AACVxC,MAAAA,GAAG,CAACge,GAAJ,CAAQ3d,KAAR;AACA,UAAID,MAAM,CAAC0lN,EAAP,CAAU98L,CAAV,EAAa3oB,KAAb,CAAJ,EAAyB;AAC1B;AACF;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACZD;;;;AAEe,SAAS0vM,MAAT,CAAgBtoM,MAAhB,EAAwB0gM,KAAxB,EAA+B;AAC5C,SAAO,uBAASA,KAAT,EAAgB1gM,MAAhB,CAAP;AACD;;;;;;;;;ACJc,SAASw+M,KAAT,CAAe,GAAGJ,MAAlB,EAA0B;AACvC,QAAM7lN,GAAG,GAAG,IAAIie,GAAJ,EAAZ;;AACA,OAAK,MAAMkqL,KAAX,IAAoB0d,MAApB,EAA4B;AAC1B,SAAK,MAAM78L,CAAX,IAAgBm/K,KAAhB,EAAuB;AACrBnoM,MAAAA,GAAG,CAACge,GAAJ,CAAQgL,CAAR;AACD;AACF;;AACD,SAAOhpB,GAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;ACnDe,kBAASwD,CAAT,EAAY;AACzB,SAAOJ,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,CAAb,KAA+B,IAA/B,GACDA,CAAC,CAAC0iN,cAAF,CAAiB,IAAjB,EAAuBtlN,OAAvB,CAA+B,IAA/B,EAAqC,EAArC,CADC,GAED4C,CAAC,CAACwJ,QAAF,CAAW,EAAX,CAFN;AAGD,EAED;AACA;AACA;;;AACO,SAASm5M,kBAAT,CAA4B3iN,CAA5B,EAA+Bm+B,CAA/B,EAAkC;AACvC,MAAI,CAACtkC,CAAC,GAAG,CAACmG,CAAC,GAAGm+B,CAAC,GAAGn+B,CAAC,CAAC4iN,aAAF,CAAgBzkL,CAAC,GAAG,CAApB,CAAH,GAA4Bn+B,CAAC,CAAC4iN,aAAF,EAAlC,EAAqD3rL,OAArD,CAA6D,GAA7D,CAAL,IAA0E,CAA9E,EAAiF,OAAO,IAAP,CAD1C,CACuD;;AAC9F,MAAIp9B,CAAJ;AAAA,MAAOgpN,WAAW,GAAG7iN,CAAC,CAACkD,KAAF,CAAQ,CAAR,EAAWrJ,CAAX,CAArB,CAFuC,CAIvC;AACA;;AACA,SAAO,CACLgpN,WAAW,CAAC1pN,MAAZ,GAAqB,CAArB,GAAyB0pN,WAAW,CAAC,CAAD,CAAX,GAAiBA,WAAW,CAAC3/M,KAAZ,CAAkB,CAAlB,CAA1C,GAAiE2/M,WAD5D,EAEL,CAAC7iN,CAAC,CAACkD,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAFI,CAAP;AAID;;;;;;;;;ACnBD;;AAEe,kBAASmG,CAAT,EAAY;AACzB,SAAOA,CAAC,GAAG,uCAAmBJ,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAnB,CAAJ,EAAqCA,CAAC,GAAGA,CAAC,CAAC,CAAD,CAAJ,GAAUosE,GAAvD;AACD;;;;;;;;;ACJc,kBAAS02I,QAAT,EAAmBC,SAAnB,EAA8B;AAC3C,SAAO,UAASlmN,KAAT,EAAgBkF,KAAhB,EAAuB;AAC5B,QAAIlI,CAAC,GAAGgD,KAAK,CAAC1D,MAAd;AAAA,QACIoE,CAAC,GAAG,EADR;AAAA,QAEIuG,CAAC,GAAG,CAFR;AAAA,QAGIwkC,CAAC,GAAGw6K,QAAQ,CAAC,CAAD,CAHhB;AAAA,QAII3pN,MAAM,GAAG,CAJb;;AAMA,WAAOU,CAAC,GAAG,CAAJ,IAASyuC,CAAC,GAAG,CAApB,EAAuB;AACrB,UAAInvC,MAAM,GAAGmvC,CAAT,GAAa,CAAb,GAAiBvmC,KAArB,EAA4BumC,CAAC,GAAG1oC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY8B,KAAK,GAAG5I,MAApB,CAAJ;AAC5BoE,MAAAA,CAAC,CAACzD,IAAF,CAAO+C,KAAK,CAAC87B,SAAN,CAAgB9+B,CAAC,IAAIyuC,CAArB,EAAwBzuC,CAAC,GAAGyuC,CAA5B,CAAP;AACA,UAAI,CAACnvC,MAAM,IAAImvC,CAAC,GAAG,CAAf,IAAoBvmC,KAAxB,EAA+B;AAC/BumC,MAAAA,CAAC,GAAGw6K,QAAQ,CAACh/M,CAAC,GAAG,CAACA,CAAC,GAAG,CAAL,IAAUg/M,QAAQ,CAAC3pN,MAAxB,CAAZ;AACD;;AAED,WAAOoE,CAAC,CAAC+Q,OAAF,GAAY7Q,IAAZ,CAAiBslN,SAAjB,CAAP;AACD,GAfD;AAgBD;;;;;;;;;ACjBc,kBAASC,QAAT,EAAmB;AAChC,SAAO,UAASnmN,KAAT,EAAgB;AACrB,WAAOA,KAAK,CAACO,OAAN,CAAc,QAAd,EAAwB,UAASvD,CAAT,EAAY;AACzC,aAAOmpN,QAAQ,CAAC,CAACnpN,CAAF,CAAf;AACD,KAFM,CAAP;AAGD,GAJD;AAKD;;;;;;;;;ACND;AACA,IAAIsoM,EAAE,GAAG,0EAAT;;AAEe,SAAS8gB,eAAT,CAAyBC,SAAzB,EAAoC;AACjD,MAAI,EAAEj+F,KAAK,GAAGk9E,EAAE,CAACn0K,IAAH,CAAQk1L,SAAR,CAAV,CAAJ,EAAmC,MAAM,IAAI9qN,KAAJ,CAAU,qBAAqB8qN,SAA/B,CAAN;AACnC,MAAIj+F,KAAJ;AACA,SAAO,IAAIk+F,eAAJ,CAAoB;AACzB94M,IAAAA,IAAI,EAAE46G,KAAK,CAAC,CAAD,CADc;AAEzBmtF,IAAAA,KAAK,EAAEntF,KAAK,CAAC,CAAD,CAFa;AAGzB3yG,IAAAA,IAAI,EAAE2yG,KAAK,CAAC,CAAD,CAHc;AAIzBm+F,IAAAA,MAAM,EAAEn+F,KAAK,CAAC,CAAD,CAJY;AAKzBx1E,IAAAA,IAAI,EAAEw1E,KAAK,CAAC,CAAD,CALc;AAMzBljH,IAAAA,KAAK,EAAEkjH,KAAK,CAAC,CAAD,CANa;AAOzBo+F,IAAAA,KAAK,EAAEp+F,KAAK,CAAC,CAAD,CAPa;AAQzBl3B,IAAAA,SAAS,EAAEk3B,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAL,CAAS/hH,KAAT,CAAe,CAAf,CARE;AASzB4xG,IAAAA,IAAI,EAAEmQ,KAAK,CAAC,CAAD,CATc;AAUzBnrG,IAAAA,IAAI,EAAEmrG,KAAK,CAAC,EAAD;AAVc,GAApB,CAAP;AAYD;;AAEDg+F,eAAe,CAAChpN,SAAhB,GAA4BkpN,eAAe,CAAClpN,SAA5C,EAAuD;;AAEhD,SAASkpN,eAAT,CAAyBD,SAAzB,EAAoC;AACzC,OAAK74M,IAAL,GAAY64M,SAAS,CAAC74M,IAAV,KAAmB0kH,SAAnB,GAA+B,GAA/B,GAAqCm0F,SAAS,CAAC74M,IAAV,GAAiB,EAAlE;AACA,OAAK+nM,KAAL,GAAa8Q,SAAS,CAAC9Q,KAAV,KAAoBrjF,SAApB,GAAgC,GAAhC,GAAsCm0F,SAAS,CAAC9Q,KAAV,GAAkB,EAArE;AACA,OAAK9/L,IAAL,GAAY4wM,SAAS,CAAC5wM,IAAV,KAAmBy8G,SAAnB,GAA+B,GAA/B,GAAqCm0F,SAAS,CAAC5wM,IAAV,GAAiB,EAAlE;AACA,OAAK8wM,MAAL,GAAcF,SAAS,CAACE,MAAV,KAAqBr0F,SAArB,GAAiC,EAAjC,GAAsCm0F,SAAS,CAACE,MAAV,GAAmB,EAAvE;AACA,OAAK3zK,IAAL,GAAY,CAAC,CAACyzK,SAAS,CAACzzK,IAAxB;AACA,OAAK1tC,KAAL,GAAamhN,SAAS,CAACnhN,KAAV,KAAoBgtH,SAApB,GAAgCA,SAAhC,GAA4C,CAACm0F,SAAS,CAACnhN,KAApE;AACA,OAAKshN,KAAL,GAAa,CAAC,CAACH,SAAS,CAACG,KAAzB;AACA,OAAKt1H,SAAL,GAAiBm1H,SAAS,CAACn1H,SAAV,KAAwBghC,SAAxB,GAAoCA,SAApC,GAAgD,CAACm0F,SAAS,CAACn1H,SAA5E;AACA,OAAK+mB,IAAL,GAAY,CAAC,CAACouG,SAAS,CAACpuG,IAAxB;AACA,OAAKh7F,IAAL,GAAYopM,SAAS,CAACppM,IAAV,KAAmBi1G,SAAnB,GAA+B,EAA/B,GAAoCm0F,SAAS,CAACppM,IAAV,GAAiB,EAAjE;AACD;;AAEDqpM,eAAe,CAAClpN,SAAhB,CAA0BuP,QAA1B,GAAqC,YAAW;AAC9C,SAAO,KAAKa,IAAL,GACD,KAAK+nM,KADJ,GAED,KAAK9/L,IAFJ,GAGD,KAAK8wM,MAHJ,IAIA,KAAK3zK,IAAL,GAAY,GAAZ,GAAkB,EAJlB,KAKA,KAAK1tC,KAAL,KAAegtH,SAAf,GAA2B,EAA3B,GAAgCnvH,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,KAAK8B,KAAL,GAAa,CAAzB,CALhC,KAMA,KAAKshN,KAAL,GAAa,GAAb,GAAmB,EANnB,KAOA,KAAKt1H,SAAL,KAAmBghC,SAAnB,GAA+B,EAA/B,GAAoC,MAAMnvH,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,KAAK8tF,SAAL,GAAiB,CAA7B,CAP1C,KAQA,KAAK+mB,IAAL,GAAY,GAAZ,GAAkB,EARlB,IASD,KAAKh7F,IATX;AAUD,CAXD;;;;;;;;;ACnCA;AACe,kBAASzc,CAAT,EAAY;AACzB6iB,EAAAA,GAAG,EAAE,KAAK,IAAInY,CAAC,GAAG1K,CAAC,CAAClE,MAAV,EAAkBU,CAAC,GAAG,CAAtB,EAAyB0gG,EAAE,GAAG,CAAC,CAA/B,EAAkC23G,EAAvC,EAA2Cr4M,CAAC,GAAGkO,CAA/C,EAAkD,EAAElO,CAApD,EAAuD;AAC1D,YAAQwD,CAAC,CAACxD,CAAD,CAAT;AACE,WAAK,GAAL;AAAU0gG,QAAAA,EAAE,GAAG23G,EAAE,GAAGr4M,CAAV;AAAa;;AACvB,WAAK,GAAL;AAAU,YAAI0gG,EAAE,KAAK,CAAX,EAAcA,EAAE,GAAG1gG,CAAL;AAAQq4M,QAAAA,EAAE,GAAGr4M,CAAL;AAAQ;;AACxC;AAAS,YAAI,CAAC,CAACwD,CAAC,CAACxD,CAAD,CAAP,EAAY,MAAMqmB,GAAN;AAAW,YAAIq6E,EAAE,GAAG,CAAT,EAAYA,EAAE,GAAG,CAAL;AAAQ;AAHtD;AAKD;;AACD,SAAOA,EAAE,GAAG,CAAL,GAASl9F,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWq3F,EAAX,IAAiBl9F,CAAC,CAAC6F,KAAF,CAAQgvM,EAAE,GAAG,CAAb,CAA1B,GAA4C70M,CAAnD;AACD;;;;;;;;;;ACVD;;AAEO,IAAIimN,cAAJ;;;AAEQ,kBAAStjN,CAAT,EAAYm+B,CAAZ,EAAe;AAC5B,MAAIz3B,CAAC,GAAG,uCAAmB1G,CAAnB,EAAsBm+B,CAAtB,CAAR;AACA,MAAI,CAACz3B,CAAL,EAAQ,OAAO1G,CAAC,GAAG,EAAX;AACR,MAAI6iN,WAAW,GAAGn8M,CAAC,CAAC,CAAD,CAAnB;AAAA,MACIqpC,QAAQ,GAAGrpC,CAAC,CAAC,CAAD,CADhB;AAAA,MAEI7M,CAAC,GAAGk2C,QAAQ,6BAAIuzK,cAAc,GAAG1jN,IAAI,CAACK,GAAL,CAAS,CAAC,CAAV,EAAaL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYH,IAAI,CAAC+H,KAAL,CAAWooC,QAAQ,GAAG,CAAtB,CAAZ,CAAb,IAAsD,CAA3E,CAAR,GAAwF,CAFhG;AAAA,MAGIhoC,CAAC,GAAG86M,WAAW,CAAC1pN,MAHpB;AAIA,SAAOU,CAAC,KAAKkO,CAAN,GAAU86M,WAAV,GACDhpN,CAAC,GAAGkO,CAAJ,GAAQ86M,WAAW,GAAG,IAAIlpN,KAAJ,CAAUE,CAAC,GAAGkO,CAAJ,GAAQ,CAAlB,EAAqBtK,IAArB,CAA0B,GAA1B,CAAtB,GACA5D,CAAC,GAAG,CAAJ,GAAQgpN,WAAW,CAAC3/M,KAAZ,CAAkB,CAAlB,EAAqBrJ,CAArB,IAA0B,GAA1B,GAAgCgpN,WAAW,CAAC3/M,KAAZ,CAAkBrJ,CAAlB,CAAxC,GACA,OAAO,IAAIF,KAAJ,CAAU,IAAIE,CAAd,EAAiB4D,IAAjB,CAAsB,GAAtB,CAAP,GAAoC,uCAAmBuC,CAAnB,EAAsBJ,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYk+B,CAAC,GAAGtkC,CAAJ,GAAQ,CAApB,CAAtB,EAA8C,CAA9C,CAH1C,CAP4B,CAUgE;AAC7F;;;;;;;;;ACfD;;AAEe,kBAASmG,CAAT,EAAYm+B,CAAZ,EAAe;AAC5B,MAAIz3B,CAAC,GAAG,uCAAmB1G,CAAnB,EAAsBm+B,CAAtB,CAAR;AACA,MAAI,CAACz3B,CAAL,EAAQ,OAAO1G,CAAC,GAAG,EAAX;AACR,MAAI6iN,WAAW,GAAGn8M,CAAC,CAAC,CAAD,CAAnB;AAAA,MACIqpC,QAAQ,GAAGrpC,CAAC,CAAC,CAAD,CADhB;AAEA,SAAOqpC,QAAQ,GAAG,CAAX,GAAe,OAAO,IAAIp2C,KAAJ,CAAU,CAACo2C,QAAX,EAAqBtyC,IAArB,CAA0B,GAA1B,CAAP,GAAwColN,WAAvD,GACDA,WAAW,CAAC1pN,MAAZ,GAAqB42C,QAAQ,GAAG,CAAhC,GAAoC8yK,WAAW,CAAC3/M,KAAZ,CAAkB,CAAlB,EAAqB6sC,QAAQ,GAAG,CAAhC,IAAqC,GAArC,GAA2C8yK,WAAW,CAAC3/M,KAAZ,CAAkB6sC,QAAQ,GAAG,CAA7B,CAA/E,GACA8yK,WAAW,GAAG,IAAIlpN,KAAJ,CAAUo2C,QAAQ,GAAG8yK,WAAW,CAAC1pN,MAAvB,GAAgC,CAA1C,EAA6CsE,IAA7C,CAAkD,GAAlD,CAFpB;AAGD;;;;;;;;;ACVD;;AACA;;AACA;;;;eAEe;AACb,OAAK,CAACuC,CAAD,EAAIm+B,CAAJ,KAAU,CAACn+B,CAAC,GAAG,GAAL,EAAU8L,OAAV,CAAkBqyB,CAAlB,CADF;AAEb,OAAMn+B,CAAD,IAAOJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,EAAcwJ,QAAd,CAAuB,CAAvB,CAFC;AAGb,OAAMxJ,CAAD,IAAOA,CAAC,GAAG,EAHH;AAIb,OAAKujN,sBAJQ;AAKb,OAAK,CAACvjN,CAAD,EAAIm+B,CAAJ,KAAUn+B,CAAC,CAAC4iN,aAAF,CAAgBzkL,CAAhB,CALF;AAMb,OAAK,CAACn+B,CAAD,EAAIm+B,CAAJ,KAAUn+B,CAAC,CAAC8L,OAAF,CAAUqyB,CAAV,CANF;AAOb,OAAK,CAACn+B,CAAD,EAAIm+B,CAAJ,KAAUn+B,CAAC,CAACwjN,WAAF,CAAcrlL,CAAd,CAPF;AAQb,OAAMn+B,CAAD,IAAOJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,EAAcwJ,QAAd,CAAuB,CAAvB,CARC;AASb,OAAK,CAACxJ,CAAD,EAAIm+B,CAAJ,KAAU,4BAAcn+B,CAAC,GAAG,GAAlB,EAAuBm+B,CAAvB,CATF;AAUb,OAAKslL,sBAVQ;AAWb,OAAKC,yBAXQ;AAYb,OAAM1jN,CAAD,IAAOJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,EAAcwJ,QAAd,CAAuB,EAAvB,EAA2B6tC,WAA3B,EAZC;AAab,OAAMr3C,CAAD,IAAOJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,EAAcwJ,QAAd,CAAuB,EAAvB;AAbC;;;;;;;;;;AEJf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIlG,GAAG,GAAG3J,KAAK,CAACM,SAAN,CAAgBqJ,GAA1B;AAAA,IACIqgN,QAAQ,GAAG,CAAC,GAAD,EAAK,GAAL,EAAS,GAAT,EAAa,GAAb,EAAiB,GAAjB,EAAqB,GAArB,EAAyB,GAAzB,EAA6B,GAA7B,EAAiC,EAAjC,EAAoC,GAApC,EAAwC,GAAxC,EAA4C,GAA5C,EAAgD,GAAhD,EAAoD,GAApD,EAAwD,GAAxD,EAA4D,GAA5D,EAAgE,GAAhE,CADf;;AAGe,kBAASC,MAAT,EAAiB;AAC9B,MAAIp+F,KAAK,GAAGo+F,MAAM,CAACd,QAAP,KAAoB/zF,SAApB,IAAiC60F,MAAM,CAACb,SAAP,KAAqBh0F,SAAtD,GAAkE+K,iBAAlE,GAA6E,0BAAYx2H,GAAG,CAAC3K,IAAJ,CAASirN,MAAM,CAACd,QAAhB,EAA0B77M,MAA1B,CAAZ,EAA+C28M,MAAM,CAACb,SAAP,GAAmB,EAAlE,CAAzF;AAAA,MACIc,cAAc,GAAGD,MAAM,CAACE,QAAP,KAAoB/0F,SAApB,GAAgC,EAAhC,GAAqC60F,MAAM,CAACE,QAAP,CAAgB,CAAhB,IAAqB,EAD/E;AAAA,MAEIC,cAAc,GAAGH,MAAM,CAACE,QAAP,KAAoB/0F,SAApB,GAAgC,EAAhC,GAAqC60F,MAAM,CAACE,QAAP,CAAgB,CAAhB,IAAqB,EAF/E;AAAA,MAGIE,OAAO,GAAGJ,MAAM,CAACI,OAAP,KAAmBj1F,SAAnB,GAA+B,GAA/B,GAAqC60F,MAAM,CAACI,OAAP,GAAiB,EAHpE;AAAA,MAIIhB,QAAQ,GAAGY,MAAM,CAACZ,QAAP,KAAoBj0F,SAApB,GAAgC+K,iBAAhC,GAA2C,6BAAex2H,GAAG,CAAC3K,IAAJ,CAASirN,MAAM,CAACZ,QAAhB,EAA0B79M,MAA1B,CAAf,CAJ1D;AAAA,MAKI8+M,OAAO,GAAGL,MAAM,CAACK,OAAP,KAAmBl1F,SAAnB,GAA+B,GAA/B,GAAqC60F,MAAM,CAACK,OAAP,GAAiB,EALpE;AAAA,MAMIC,KAAK,GAAGN,MAAM,CAACM,KAAP,KAAiBn1F,SAAjB,GAA6B,GAA7B,GAAmC60F,MAAM,CAACM,KAAP,GAAe,EAN9D;AAAA,MAOIC,GAAG,GAAGP,MAAM,CAACO,GAAP,KAAep1F,SAAf,GAA2B,KAA3B,GAAmC60F,MAAM,CAACO,GAAP,GAAa,EAP1D;;AASA,WAASC,SAAT,CAAmBlB,SAAnB,EAA8B;AAC5BA,IAAAA,SAAS,GAAG,8BAAgBA,SAAhB,CAAZ;AAEA,QAAI74M,IAAI,GAAG64M,SAAS,CAAC74M,IAArB;AAAA,QACI+nM,KAAK,GAAG8Q,SAAS,CAAC9Q,KADtB;AAAA,QAEI9/L,IAAI,GAAG4wM,SAAS,CAAC5wM,IAFrB;AAAA,QAGI8wM,MAAM,GAAGF,SAAS,CAACE,MAHvB;AAAA,QAII3zK,IAAI,GAAGyzK,SAAS,CAACzzK,IAJrB;AAAA,QAKI1tC,KAAK,GAAGmhN,SAAS,CAACnhN,KALtB;AAAA,QAMIshN,KAAK,GAAGH,SAAS,CAACG,KANtB;AAAA,QAOIt1H,SAAS,GAAGm1H,SAAS,CAACn1H,SAP1B;AAAA,QAQI+mB,IAAI,GAAGouG,SAAS,CAACpuG,IARrB;AAAA,QASIh7F,IAAI,GAAGopM,SAAS,CAACppM,IATrB,CAH4B,CAc5B;;AACA,QAAIA,IAAI,KAAK,GAAb,EAAkBupM,KAAK,GAAG,IAAR,EAAcvpM,IAAI,GAAG,GAArB,CAAlB,CAEA;AAFA,SAGK,IAAI,CAACuqM,qBAAYvqM,IAAZ,CAAL,EAAwBi0E,SAAS,KAAKghC,SAAd,KAA4BhhC,SAAS,GAAG,EAAxC,GAA6C+mB,IAAI,GAAG,IAApD,EAA0Dh7F,IAAI,GAAG,GAAjE,CAlBD,CAoB5B;;AACA,QAAI21B,IAAI,IAAKplC,IAAI,KAAK,GAAT,IAAgB+nM,KAAK,KAAK,GAAvC,EAA6C3iK,IAAI,GAAG,IAAP,EAAaplC,IAAI,GAAG,GAApB,EAAyB+nM,KAAK,GAAG,GAAjC,CArBjB,CAuB5B;AACA;;AACA,QAAIn1F,MAAM,GAAGmmG,MAAM,KAAK,GAAX,GAAiBS,cAAjB,GAAkCT,MAAM,KAAK,GAAX,IAAkB,SAAS57L,IAAT,CAAc1N,IAAd,CAAlB,GAAwC,MAAMA,IAAI,CAAC9b,WAAL,EAA9C,GAAmE,EAAlH;AAAA,QACIk/G,MAAM,GAAGkmG,MAAM,KAAK,GAAX,GAAiBW,cAAjB,GAAkC,OAAOv8L,IAAP,CAAY1N,IAAZ,IAAoBmqM,OAApB,GAA8B,EAD7E,CAzB4B,CA4B5B;AACA;AACA;;AACA,QAAIK,UAAU,GAAGD,qBAAYvqM,IAAZ,CAAjB;AAAA,QACIyqM,WAAW,GAAG,aAAa/8L,IAAb,CAAkB1N,IAAlB,CADlB,CA/B4B,CAkC5B;AACA;AACA;AACA;;AACAi0E,IAAAA,SAAS,GAAGA,SAAS,KAAKghC,SAAd,GAA0B,CAA1B,GACN,SAASvnG,IAAT,CAAc1N,IAAd,IAAsBla,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,EAAT,EAAaguF,SAAb,CAAZ,CAAtB,GACAnuF,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,EAAT,EAAaguF,SAAb,CAAZ,CAFN;;AAIA,aAASquB,MAAT,CAAgBv/G,KAAhB,EAAuB;AACrB,UAAI2nN,WAAW,GAAGvnG,MAAlB;AAAA,UACIwnG,WAAW,GAAGvnG,MADlB;AAAA,UAEIrjH,CAFJ;AAAA,UAEOkO,CAFP;AAAA,UAEUzB,CAFV;;AAIA,UAAIwT,IAAI,KAAK,GAAb,EAAkB;AAChB2qM,QAAAA,WAAW,GAAGH,UAAU,CAACznN,KAAD,CAAV,GAAoB4nN,WAAlC;AACA5nN,QAAAA,KAAK,GAAG,EAAR;AACD,OAHD,MAGO;AACLA,QAAAA,KAAK,GAAG,CAACA,KAAT,CADK,CAGL;;AACA,YAAI6nN,aAAa,GAAG7nN,KAAK,GAAG,CAAR,IAAa,IAAIA,KAAJ,GAAY,CAA7C,CAJK,CAML;;AACAA,QAAAA,KAAK,GAAG4H,KAAK,CAAC5H,KAAD,CAAL,GAAesnN,GAAf,GAAqBG,UAAU,CAAC1kN,IAAI,CAACiT,GAAL,CAAShW,KAAT,CAAD,EAAkBkxF,SAAlB,CAAvC,CAPK,CASL;;AACA,YAAI+mB,IAAJ,EAAUj4G,KAAK,GAAG,yBAAWA,KAAX,CAAR,CAVL,CAYL;;AACA,YAAI6nN,aAAa,IAAI,CAAC7nN,KAAD,KAAW,CAA5B,IAAiCyV,IAAI,KAAK,GAA9C,EAAmDoyM,aAAa,GAAG,KAAhB,CAb9C,CAeL;;AACAF,QAAAA,WAAW,GAAG,CAACE,aAAa,GAAIpyM,IAAI,KAAK,GAAT,GAAeA,IAAf,GAAsB4xM,KAA1B,GAAmC5xM,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAAzB,GAA+B,EAA/B,GAAoCA,IAArF,IAA6FkyM,WAA3G;AACAC,QAAAA,WAAW,GAAG,CAAC3qM,IAAI,KAAK,GAAT,GAAe6pM,QAAQ,CAAC,IAAIL,mCAAiB,CAAtB,CAAvB,GAAkD,EAAnD,IAAyDmB,WAAzD,IAAwEC,aAAa,IAAIpyM,IAAI,KAAK,GAA1B,GAAgC,GAAhC,GAAsC,EAA9G,CAAd,CAjBK,CAmBL;AACA;;AACA,YAAIiyM,WAAJ,EAAiB;AACf1qN,UAAAA,CAAC,GAAG,CAAC,CAAL,EAAQkO,CAAC,GAAGlL,KAAK,CAAC1D,MAAlB;;AACA,iBAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB;AACd,gBAAIzB,CAAC,GAAGzJ,KAAK,CAACyxE,UAAN,CAAiBz0E,CAAjB,CAAJ,EAAyB,KAAKyM,CAAL,IAAUA,CAAC,GAAG,EAA3C,EAA+C;AAC7Cm+M,cAAAA,WAAW,GAAG,CAACn+M,CAAC,KAAK,EAAN,GAAW09M,OAAO,GAAGnnN,KAAK,CAACqG,KAAN,CAAYrJ,CAAC,GAAG,CAAhB,CAArB,GAA0CgD,KAAK,CAACqG,KAAN,CAAYrJ,CAAZ,CAA3C,IAA6D4qN,WAA3E;AACA5nN,cAAAA,KAAK,GAAGA,KAAK,CAACqG,KAAN,CAAY,CAAZ,EAAerJ,CAAf,CAAR;AACA;AACD;AACF;AACF;AACF,OAvCoB,CAyCrB;;;AACA,UAAIwpN,KAAK,IAAI,CAAC5zK,IAAd,EAAoB5yC,KAAK,GAAG2oH,KAAK,CAAC3oH,KAAD,EAAQ8E,QAAR,CAAb,CA1CC,CA4CrB;;AACA,UAAIxI,MAAM,GAAGqrN,WAAW,CAACrrN,MAAZ,GAAqB0D,KAAK,CAAC1D,MAA3B,GAAoCsrN,WAAW,CAACtrN,MAA7D;AAAA,UACImd,OAAO,GAAGnd,MAAM,GAAG4I,KAAT,GAAiB,IAAIpI,KAAJ,CAAUoI,KAAK,GAAG5I,MAAR,GAAiB,CAA3B,EAA8BsE,IAA9B,CAAmC4M,IAAnC,CAAjB,GAA4D,EAD1E,CA7CqB,CAgDrB;;AACA,UAAIg5M,KAAK,IAAI5zK,IAAb,EAAmB5yC,KAAK,GAAG2oH,KAAK,CAAClvG,OAAO,GAAGzZ,KAAX,EAAkByZ,OAAO,CAACnd,MAAR,GAAiB4I,KAAK,GAAG0iN,WAAW,CAACtrN,MAArC,GAA8CwI,QAAhE,CAAb,EAAwF2U,OAAO,GAAG,EAAlG,CAjDE,CAmDrB;;AACA,cAAQ87L,KAAR;AACE,aAAK,GAAL;AAAUv1M,UAAAA,KAAK,GAAG2nN,WAAW,GAAG3nN,KAAd,GAAsB4nN,WAAtB,GAAoCnuM,OAA5C;AAAqD;;AAC/D,aAAK,GAAL;AAAUzZ,UAAAA,KAAK,GAAG2nN,WAAW,GAAGluM,OAAd,GAAwBzZ,KAAxB,GAAgC4nN,WAAxC;AAAqD;;AAC/D,aAAK,GAAL;AAAU5nN,UAAAA,KAAK,GAAGyZ,OAAO,CAACpT,KAAR,CAAc,CAAd,EAAiB/J,MAAM,GAAGmd,OAAO,CAACnd,MAAR,IAAkB,CAA5C,IAAiDqrN,WAAjD,GAA+D3nN,KAA/D,GAAuE4nN,WAAvE,GAAqFnuM,OAAO,CAACpT,KAAR,CAAc/J,MAAd,CAA7F;AAAoH;;AAC9H;AAAS0D,UAAAA,KAAK,GAAGyZ,OAAO,GAAGkuM,WAAV,GAAwB3nN,KAAxB,GAAgC4nN,WAAxC;AAAqD;AAJhE;;AAOA,aAAOzB,QAAQ,CAACnmN,KAAD,CAAf;AACD;;AAEDu/G,IAAAA,MAAM,CAAC5yG,QAAP,GAAkB,YAAW;AAC3B,aAAO05M,SAAS,GAAG,EAAnB;AACD,KAFD;;AAIA,WAAO9mG,MAAP;AACD;;AAED,WAASuoG,YAAT,CAAsBzB,SAAtB,EAAiCrmN,KAAjC,EAAwC;AACtC,QAAI2I,CAAC,GAAG4+M,SAAS,EAAElB,SAAS,GAAG,8BAAgBA,SAAhB,CAAZ,EAAwCA,SAAS,CAACppM,IAAV,GAAiB,GAAzD,EAA8DopM,SAAhE,EAAjB;AAAA,QACI3qN,CAAC,GAAGqH,IAAI,CAACK,GAAL,CAAS,CAAC,CAAV,EAAaL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYH,IAAI,CAAC+H,KAAL,CAAW,uBAAS9K,KAAT,IAAkB,CAA7B,CAAZ,CAAb,IAA6D,CADrE;AAAA,QAEIsa,CAAC,GAAGvX,IAAI,CAAC0Q,GAAL,CAAS,EAAT,EAAa,CAAC/X,CAAd,CAFR;AAAA,QAGI0kH,MAAM,GAAG0mG,QAAQ,CAAC,IAAIprN,CAAC,GAAG,CAAT,CAHrB;AAIA,WAAO,UAASsE,KAAT,EAAgB;AACrB,aAAO2I,CAAC,CAAC2R,CAAC,GAAGta,KAAL,CAAD,GAAeogH,MAAtB;AACD,KAFD;AAGD;;AAED,SAAO;AACLb,IAAAA,MAAM,EAAEgoG,SADH;AAELO,IAAAA,YAAY,EAAEA;AAFT,GAAP;AAID;;;;;;;;;;ACnJD;;;;AAEA,IAAIf,MAAJ;AACO,IAAIxnG,MAAJ;;AACA,IAAIuoG,YAAJ;;AAEPC,aAAa,CAAC;AACZ7B,EAAAA,SAAS,EAAE,GADC;AAEZD,EAAAA,QAAQ,EAAE,CAAC,CAAD,CAFE;AAGZgB,EAAAA,QAAQ,EAAE,CAAC,GAAD,EAAM,EAAN;AAHE,CAAD,CAAb;;AAMe,SAASc,aAAT,CAAuBC,UAAvB,EAAmC;AAChDjB,EAAAA,MAAM,GAAG,qBAAaiB,UAAb,CAAT;AACA,mBAAAzoG,MAAM,GAAGwnG,MAAM,CAACxnG,MAAhB;AACA,yBAAAuoG,YAAY,GAAGf,MAAM,CAACe,YAAtB;AACA,SAAOf,MAAP;AACD;;;;;;;;;ACjBD;;;;AAEe,kBAASrvM,IAAT,EAAe;AAC5B,SAAO3U,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,CAAC,uBAASL,IAAI,CAACiT,GAAL,CAAS0B,IAAT,CAAT,CAAb,CAAP;AACD;;;;;;;;;ACJD;;;;AAEe,kBAASA,IAAT,EAAe1X,KAAf,EAAsB;AACnC,SAAO+C,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACK,GAAL,CAAS,CAAC,CAAV,EAAaL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYH,IAAI,CAAC+H,KAAL,CAAW,uBAAS9K,KAAT,IAAkB,CAA7B,CAAZ,CAAb,IAA6D,CAA7D,GAAiE,uBAAS+C,IAAI,CAACiT,GAAL,CAAS0B,IAAT,CAAT,CAA7E,CAAP;AACD;;;;;;;;;ACJD;;;;AAEe,kBAASA,IAAT,EAAetU,GAAf,EAAoB;AACjCsU,EAAAA,IAAI,GAAG3U,IAAI,CAACiT,GAAL,CAAS0B,IAAT,CAAP,EAAuBtU,GAAG,GAAGL,IAAI,CAACiT,GAAL,CAAS5S,GAAT,IAAgBsU,IAA7C;AACA,SAAO3U,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,uBAASA,GAAT,IAAgB,uBAASsU,IAAT,CAA5B,IAA8C,CAArD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;ACLA,IAAIuwM,EAAE,GAAG,IAAIn1I,IAAJ,EAAT;AAAA,IACI6Q,EAAE,GAAG,IAAI7Q,IAAJ,EADT;;AAGe,SAASo1I,WAAT,CAAqBC,MAArB,EAA6BC,OAA7B,EAAsCrzI,KAAtC,EAA6Cy9C,KAA7C,EAAoD;AAEjE,WAAS61F,QAAT,CAAkB/U,IAAlB,EAAwB;AACtB,WAAO6U,MAAM,CAAC7U,IAAI,GAAGv2M,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB,IAAIw2E,IAAJ,EAAzB,GAAoC,IAAIA,IAAJ,CAAS,CAACwgI,IAAV,CAA5C,CAAN,EAAoEA,IAA3E;AACD;;AAED+U,EAAAA,QAAQ,CAACv9M,KAAT,GAAiB,UAASwoM,IAAT,EAAe;AAC9B,WAAO6U,MAAM,CAAC7U,IAAI,GAAG,IAAIxgI,IAAJ,CAAS,CAACwgI,IAAV,CAAR,CAAN,EAAgCA,IAAvC;AACD,GAFD;;AAIA+U,EAAAA,QAAQ,CAACljN,IAAT,GAAgB,UAASmuM,IAAT,EAAe;AAC7B,WAAO6U,MAAM,CAAC7U,IAAI,GAAG,IAAIxgI,IAAJ,CAASwgI,IAAI,GAAG,CAAhB,CAAR,CAAN,EAAmC8U,OAAO,CAAC9U,IAAD,EAAO,CAAP,CAA1C,EAAqD6U,MAAM,CAAC7U,IAAD,CAA3D,EAAmEA,IAA1E;AACD,GAFD;;AAIA+U,EAAAA,QAAQ,CAACh/M,KAAT,GAAiB,UAASiqM,IAAT,EAAe;AAC9B,QAAIf,EAAE,GAAG8V,QAAQ,CAAC/U,IAAD,CAAjB;AAAA,QACIntI,EAAE,GAAGkiJ,QAAQ,CAACljN,IAAT,CAAcmuM,IAAd,CADT;AAEA,WAAOA,IAAI,GAAGf,EAAP,GAAYpsI,EAAE,GAAGmtI,IAAjB,GAAwBf,EAAxB,GAA6BpsI,EAApC;AACD,GAJD;;AAMAkiJ,EAAAA,QAAQ,CAAC1+M,MAAT,GAAkB,UAAS2pM,IAAT,EAAe57L,IAAf,EAAqB;AACrC,WAAO0wM,OAAO,CAAC9U,IAAI,GAAG,IAAIxgI,IAAJ,CAAS,CAACwgI,IAAV,CAAR,EAAyB57L,IAAI,IAAI,IAAR,GAAe,CAAf,GAAmB3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAA5C,CAAP,EAAsE47L,IAA7E;AACD,GAFD;;AAIA+U,EAAAA,QAAQ,CAAC7pL,KAAT,GAAiB,UAAS11B,KAAT,EAAgBy1B,IAAhB,EAAsB7mB,IAAtB,EAA4B;AAC3C,QAAI8mB,KAAK,GAAG,EAAZ;AAAA,QAAgBqmL,QAAhB;AACA/7M,IAAAA,KAAK,GAAGu/M,QAAQ,CAACljN,IAAT,CAAc2D,KAAd,CAAR;AACA4O,IAAAA,IAAI,GAAGA,IAAI,IAAI,IAAR,GAAe,CAAf,GAAmB3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAA1B;AACA,QAAI,EAAE5O,KAAK,GAAGy1B,IAAV,KAAmB,EAAE7mB,IAAI,GAAG,CAAT,CAAvB,EAAoC,OAAO8mB,KAAP,CAJO,CAIO;;AAClD,OAAGA,KAAK,CAACvhC,IAAN,CAAW4nN,QAAQ,GAAG,IAAI/xI,IAAJ,CAAS,CAAChqE,KAAV,CAAtB,GAAyCs/M,OAAO,CAACt/M,KAAD,EAAQ4O,IAAR,CAAhD,EAA+DywM,MAAM,CAACr/M,KAAD,CAArE,CAAH,QACO+7M,QAAQ,GAAG/7M,KAAX,IAAoBA,KAAK,GAAGy1B,IADnC;;AAEA,WAAOC,KAAP;AACD,GARD;;AAUA6pL,EAAAA,QAAQ,CAAClwM,MAAT,GAAkB,UAASwS,IAAT,EAAe;AAC/B,WAAOu9L,WAAW,CAAC,UAAS5U,IAAT,EAAe;AAChC,UAAIA,IAAI,IAAIA,IAAZ,EAAkB,OAAO6U,MAAM,CAAC7U,IAAD,CAAN,EAAc,CAAC3oL,IAAI,CAAC2oL,IAAD,CAA1B,EAAkCA,IAAI,CAACgV,OAAL,CAAahV,IAAI,GAAG,CAApB;AACrD,KAFiB,EAEf,UAASA,IAAT,EAAe57L,IAAf,EAAqB;AACtB,UAAI47L,IAAI,IAAIA,IAAZ,EAAkB;AAChB,YAAI57L,IAAI,GAAG,CAAX,EAAc,OAAO,EAAEA,IAAF,IAAU,CAAjB,EAAoB;AAChC,iBAAO0wM,OAAO,CAAC9U,IAAD,EAAO,CAAC,CAAR,CAAP,EAAmB,CAAC3oL,IAAI,CAAC2oL,IAAD,CAA/B,EAAuC,CAAE,CADT,CACU;;AAC3C,SAFD,MAEO,OAAO,EAAE57L,IAAF,IAAU,CAAjB,EAAoB;AACzB,iBAAO0wM,OAAO,CAAC9U,IAAD,EAAO,CAAC,CAAR,CAAP,EAAmB,CAAC3oL,IAAI,CAAC2oL,IAAD,CAA/B,EAAuC,CAAE,CADhB,CACiB;;AAC3C;AACF;AACF,KAViB,CAAlB;AAWD,GAZD;;AAcA,MAAIv+H,KAAJ,EAAW;AACTszI,IAAAA,QAAQ,CAACtzI,KAAT,GAAiB,UAASjsE,KAAT,EAAgB6F,GAAhB,EAAqB;AACpCs5M,MAAAA,EAAE,CAACK,OAAH,CAAW,CAACx/M,KAAZ,GAAoB66E,EAAE,CAAC2kI,OAAH,CAAW,CAAC35M,GAAZ,CAApB;AACAw5M,MAAAA,MAAM,CAACF,EAAD,CAAN,EAAYE,MAAM,CAACxkI,EAAD,CAAlB;AACA,aAAO5gF,IAAI,CAAC+H,KAAL,CAAWiqE,KAAK,CAACkzI,EAAD,EAAKtkI,EAAL,CAAhB,CAAP;AACD,KAJD;;AAMA0kI,IAAAA,QAAQ,CAAC3hN,KAAT,GAAiB,UAASgR,IAAT,EAAe;AAC9BA,MAAAA,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACA,aAAO,CAAC7P,QAAQ,CAAC6P,IAAD,CAAT,IAAmB,EAAEA,IAAI,GAAG,CAAT,CAAnB,GAAiC,IAAjC,GACD,EAAEA,IAAI,GAAG,CAAT,IAAc2wM,QAAd,GACAA,QAAQ,CAAClwM,MAAT,CAAgBq6G,KAAK,GACjB,UAAS3oH,CAAT,EAAY;AAAE,eAAO2oH,KAAK,CAAC3oH,CAAD,CAAL,GAAW6N,IAAX,KAAoB,CAA3B;AAA+B,OAD5B,GAEjB,UAAS7N,CAAT,EAAY;AAAE,eAAOw+M,QAAQ,CAACtzI,KAAT,CAAe,CAAf,EAAkBlrE,CAAlB,IAAuB6N,IAAvB,KAAgC,CAAvC;AAA2C,OAF7D,CAFN;AAKD,KAPD;AAQD;;AAED,SAAO2wM,QAAP;AACD;;;;;;;;;ACrED;;;;AAEA,IAAIE,WAAW,GAAG,uBAAS,YAAW,CACpC;AACD,CAFiB,EAEf,UAASjV,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAArB;AACD,CAJiB,EAIf,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAOA,GAAG,GAAG7F,KAAb;AACD,CANiB,CAAlB,EAQA;;AACAy/M,WAAW,CAAC7hN,KAAZ,GAAoB,UAAS4T,CAAT,EAAY;AAC9BA,EAAAA,CAAC,GAAGvX,IAAI,CAAC+H,KAAL,CAAWwP,CAAX,CAAJ;AACA,MAAI,CAACzS,QAAQ,CAACyS,CAAD,CAAT,IAAgB,EAAEA,CAAC,GAAG,CAAN,CAApB,EAA8B,OAAO,IAAP;AAC9B,MAAI,EAAEA,CAAC,GAAG,CAAN,CAAJ,EAAc,OAAOiuM,WAAP;AACd,SAAO,uBAAS,UAASjV,IAAT,EAAe;AAC7BA,IAAAA,IAAI,CAACgV,OAAL,CAAavlN,IAAI,CAAC+H,KAAL,CAAWwoM,IAAI,GAAGh5L,CAAlB,IAAuBA,CAApC;AACD,GAFM,EAEJ,UAASg5L,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,IAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAG4C,CAA5B;AACD,GAJM,EAIJ,UAASxR,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,WAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgBwR,CAAvB;AACD,GANM,CAAP;AAOD,CAXD;;eAaeiuM;;AACR,IAAI7N,YAAY,GAAG6N,WAAW,CAAC/pL,KAA/B;;;;;;;;;ACzBA,IAAIgqL,cAAc,GAAG,GAArB;;AACA,IAAIC,cAAc,GAAG,GAArB;;AACA,IAAIC,YAAY,GAAG,IAAnB;;AACA,IAAIC,WAAW,GAAG,KAAlB;;AACA,IAAIC,YAAY,GAAG,MAAnB;;;;;;;;;;ACJP;;AACA;;;;AAEA,IAAIC,MAAM,GAAG,uBAAS,UAASvV,IAAT,EAAe;AACnCA,EAAAA,IAAI,CAACgV,OAAL,CAAahV,IAAI,GAAGA,IAAI,CAACwV,eAAL,EAApB;AACD,CAFY,EAEV,UAASxV,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAG8wM,wBAA5B;AACD,CAJY,EAIV,UAAS1/M,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB0/M,wBAAvB;AACD,CANY,EAMV,UAASlV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACmH,aAAL,EAAP;AACD,CARY,CAAb;eAUeoO;;AACR,IAAIrO,OAAO,GAAGqO,MAAM,CAACrqL,KAArB;;;;;;;;;;ACdP;;AACA;;;;AAEA,IAAIuqL,MAAM,GAAG,uBAAS,UAASzV,IAAT,EAAe;AACnCA,EAAAA,IAAI,CAACgV,OAAL,CAAahV,IAAI,GAAGA,IAAI,CAACwV,eAAL,EAAP,GAAgCxV,IAAI,CAAC0V,UAAL,KAAoBR,wBAAjE;AACD,CAFY,EAEV,UAASlV,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAG+wM,wBAA5B;AACD,CAJY,EAIV,UAAS3/M,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB2/M,wBAAvB;AACD,CANY,EAMV,UAASnV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAAC2V,UAAL,EAAP;AACD,CARY,CAAb;eAUeF;;AACR,IAAIzO,OAAO,GAAGyO,MAAM,CAACvqL,KAArB;;;;;;;;;;ACdP;;AACA;;;;AAEA,IAAI0qL,IAAI,GAAG,uBAAS,UAAS5V,IAAT,EAAe;AACjCA,EAAAA,IAAI,CAACgV,OAAL,CAAahV,IAAI,GAAGA,IAAI,CAACwV,eAAL,EAAP,GAAgCxV,IAAI,CAAC0V,UAAL,KAAoBR,wBAApD,GAAqElV,IAAI,CAAC2V,UAAL,KAAoBR,wBAAtG;AACD,CAFU,EAER,UAASnV,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAGgxM,sBAA5B;AACD,CAJU,EAIR,UAAS5/M,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB4/M,sBAAvB;AACD,CANU,EAMR,UAASpV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACsJ,QAAL,EAAP;AACD,CARU,CAAX;eAUesM;;AACR,IAAI9O,KAAK,GAAG8O,IAAI,CAAC1qL,KAAjB;;;;;;;;;;ACdP;;AACA;;;;AAEA,IAAI2qL,GAAG,GAAG,uBACR7V,IAAI,IAAIA,IAAI,CAAC8V,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,CADA,EAER,CAAC9V,IAAD,EAAO57L,IAAP,KAAgB47L,IAAI,CAAC+V,OAAL,CAAa/V,IAAI,CAACgW,OAAL,KAAiB5xM,IAA9B,CAFR,EAGR,CAAC5O,KAAD,EAAQ6F,GAAR,KAAgB,CAACA,GAAG,GAAG7F,KAAN,GAAc,CAAC6F,GAAG,CAAC46M,iBAAJ,KAA0BzgN,KAAK,CAACygN,iBAAN,EAA3B,IAAwDd,wBAAvE,IAAyFE,qBAHjG,EAIRrV,IAAI,IAAIA,IAAI,CAACgW,OAAL,KAAiB,CAJjB,CAAV;eAOeH;;AACR,IAAIK,IAAI,GAAGL,GAAG,CAAC3qL,KAAf;;;;;;;;;;ACXP;;AACA;;;;AAEA,SAASirL,OAAT,CAAiBzsN,CAAjB,EAAoB;AAClB,SAAO,uBAAS,UAASs2M,IAAT,EAAe;AAC7BA,IAAAA,IAAI,CAAC+V,OAAL,CAAa/V,IAAI,CAACgW,OAAL,KAAiB,CAAChW,IAAI,CAACoW,MAAL,KAAgB,CAAhB,GAAoB1sN,CAArB,IAA0B,CAAxD;AACAs2M,IAAAA,IAAI,CAAC8V,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACD,GAHM,EAGJ,UAAS9V,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,IAAAA,IAAI,CAAC+V,OAAL,CAAa/V,IAAI,CAACgW,OAAL,KAAiB5xM,IAAI,GAAG,CAArC;AACD,GALM,EAKJ,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,WAAO,CAACA,GAAG,GAAG7F,KAAN,GAAc,CAAC6F,GAAG,CAAC46M,iBAAJ,KAA0BzgN,KAAK,CAACygN,iBAAN,EAA3B,IAAwDd,wBAAvE,IAAyFG,sBAAhG;AACD,GAPM,CAAP;AAQD;;AAEM,IAAIe,MAAM,GAAGF,OAAO,CAAC,CAAD,CAApB;;AACA,IAAIG,MAAM,GAAGH,OAAO,CAAC,CAAD,CAApB;;AACA,IAAII,OAAO,GAAGJ,OAAO,CAAC,CAAD,CAArB;;AACA,IAAIK,SAAS,GAAGL,OAAO,CAAC,CAAD,CAAvB;;AACA,IAAIM,QAAQ,GAAGN,OAAO,CAAC,CAAD,CAAtB;;AACA,IAAIO,MAAM,GAAGP,OAAO,CAAC,CAAD,CAApB;;AACA,IAAIQ,QAAQ,GAAGR,OAAO,CAAC,CAAD,CAAtB;;AAEA,IAAIS,OAAO,GAAGP,MAAM,CAACnrL,KAArB;;AACA,IAAI2rL,OAAO,GAAGP,MAAM,CAACprL,KAArB;;AACA,IAAI4rL,QAAQ,GAAGP,OAAO,CAACrrL,KAAvB;;AACA,IAAI6rL,UAAU,GAAGP,SAAS,CAACtrL,KAA3B;;AACA,IAAI8rL,SAAS,GAAGP,QAAQ,CAACvrL,KAAzB;;AACA,IAAI+rL,OAAO,GAAGP,MAAM,CAACxrL,KAArB;;AACA,IAAIgsL,SAAS,GAAGP,QAAQ,CAACzrL,KAAzB;;;;;;;;;;AC5BP;;;;AAEA,IAAIisL,KAAK,GAAG,uBAAS,UAASnX,IAAT,EAAe;AAClCA,EAAAA,IAAI,CAAC+V,OAAL,CAAa,CAAb;AACA/V,EAAAA,IAAI,CAAC8V,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACD,CAHW,EAGT,UAAS9V,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACoX,QAAL,CAAcpX,IAAI,CAACC,QAAL,KAAkB77L,IAAhC;AACD,CALW,EAKT,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAOA,GAAG,CAAC4kM,QAAJ,KAAiBzqM,KAAK,CAACyqM,QAAN,EAAjB,GAAoC,CAAC5kM,GAAG,CAACg8M,WAAJ,KAAoB7hN,KAAK,CAAC6hN,WAAN,EAArB,IAA4C,EAAvF;AACD,CAPW,EAOT,UAASrX,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACC,QAAL,EAAP;AACD,CATW,CAAZ;eAWekX;;AACR,IAAIG,MAAM,GAAGH,KAAK,CAACjsL,KAAnB;;;;;;;;;;ACdP;;;;AAEA,IAAI07K,IAAI,GAAG,uBAAS,UAAS5G,IAAT,EAAe;AACjCA,EAAAA,IAAI,CAACoX,QAAL,CAAc,CAAd,EAAiB,CAAjB;AACApX,EAAAA,IAAI,CAAC8V,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACD,CAHU,EAGR,UAAS9V,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACuX,WAAL,CAAiBvX,IAAI,CAACqX,WAAL,KAAqBjzM,IAAtC;AACD,CALU,EAKR,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAOA,GAAG,CAACg8M,WAAJ,KAAoB7hN,KAAK,CAAC6hN,WAAN,EAA3B;AACD,CAPU,EAOR,UAASrX,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACqX,WAAL,EAAP;AACD,CATU,CAAX,EAWA;;AACAzQ,IAAI,CAACxzM,KAAL,GAAa,UAAS4T,CAAT,EAAY;AACvB,SAAO,CAACzS,QAAQ,CAACyS,CAAC,GAAGvX,IAAI,CAAC+H,KAAL,CAAWwP,CAAX,CAAL,CAAT,IAAgC,EAAEA,CAAC,GAAG,CAAN,CAAhC,GAA2C,IAA3C,GAAkD,uBAAS,UAASg5L,IAAT,EAAe;AAC/EA,IAAAA,IAAI,CAACuX,WAAL,CAAiB9nN,IAAI,CAAC+H,KAAL,CAAWwoM,IAAI,CAACqX,WAAL,KAAqBrwM,CAAhC,IAAqCA,CAAtD;AACAg5L,IAAAA,IAAI,CAACoX,QAAL,CAAc,CAAd,EAAiB,CAAjB;AACApX,IAAAA,IAAI,CAAC8V,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACD,GAJwD,EAItD,UAAS9V,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,IAAAA,IAAI,CAACuX,WAAL,CAAiBvX,IAAI,CAACqX,WAAL,KAAqBjzM,IAAI,GAAG4C,CAA7C;AACD,GANwD,CAAzD;AAOD,CARD;;eAUe4/L;;AACR,IAAI4Q,KAAK,GAAG5Q,IAAI,CAAC17K,KAAjB;;;;;;;;;;ACzBP;;AACA;;;;AAEA,IAAIusL,SAAS,GAAG,uBAAS,UAASzX,IAAT,EAAe;AACtCA,EAAAA,IAAI,CAAC0X,aAAL,CAAmB,CAAnB,EAAsB,CAAtB;AACD,CAFe,EAEb,UAAS1X,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAG+wM,wBAA5B;AACD,CAJe,EAIb,UAAS3/M,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB2/M,wBAAvB;AACD,CANe,EAMb,UAASnV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACiH,aAAL,EAAP;AACD,CARe,CAAhB;eAUewQ;;AACR,IAAIE,UAAU,GAAGF,SAAS,CAACvsL,KAA3B;;;;;;;;;;ACdP;;AACA;;;;AAEA,IAAI0sL,OAAO,GAAG,uBAAS,UAAS5X,IAAT,EAAe;AACpCA,EAAAA,IAAI,CAAC6X,aAAL,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;AACD,CAFa,EAEX,UAAS7X,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACgV,OAAL,CAAa,CAAChV,IAAD,GAAQ57L,IAAI,GAAGgxM,sBAA5B;AACD,CAJa,EAIX,UAAS5/M,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB4/M,sBAAvB;AACD,CANa,EAMX,UAASpV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAAC+G,WAAL,EAAP;AACD,CARa,CAAd;eAUe6Q;;AACR,IAAIE,QAAQ,GAAGF,OAAO,CAAC1sL,KAAvB;;;;;;;;;;ACdP;;AACA;;;;AAEA,IAAI6sL,MAAM,GAAG,uBAAS,UAAS/X,IAAT,EAAe;AACnCA,EAAAA,IAAI,CAACgY,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACD,CAFY,EAEV,UAAShY,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACiY,UAAL,CAAgBjY,IAAI,CAACuH,UAAL,KAAoBnjM,IAApC;AACD,CAJY,EAIV,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB6/M,qBAAvB;AACD,CANY,EAMV,UAASrV,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACuH,UAAL,KAAoB,CAA3B;AACD,CARY,CAAb;eAUewQ;;AACR,IAAIG,OAAO,GAAGH,MAAM,CAAC7sL,KAArB;;;;;;;;;;ACdP;;AACA;;;;AAEA,SAASitL,UAAT,CAAoBzuN,CAApB,EAAuB;AACrB,SAAO,uBAAS,UAASs2M,IAAT,EAAe;AAC7BA,IAAAA,IAAI,CAACiY,UAAL,CAAgBjY,IAAI,CAACuH,UAAL,KAAoB,CAACvH,IAAI,CAACoY,SAAL,KAAmB,CAAnB,GAAuB1uN,CAAxB,IAA6B,CAAjE;AACAs2M,IAAAA,IAAI,CAACgY,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACD,GAHM,EAGJ,UAAShY,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,IAAAA,IAAI,CAACiY,UAAL,CAAgBjY,IAAI,CAACuH,UAAL,KAAoBnjM,IAAI,GAAG,CAA3C;AACD,GALM,EAKJ,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,WAAO,CAACA,GAAG,GAAG7F,KAAP,IAAgB8/M,sBAAvB;AACD,GAPM,CAAP;AAQD;;AAEM,IAAI+C,SAAS,GAAGF,UAAU,CAAC,CAAD,CAA1B;;AACA,IAAIG,SAAS,GAAGH,UAAU,CAAC,CAAD,CAA1B;;AACA,IAAII,UAAU,GAAGJ,UAAU,CAAC,CAAD,CAA3B;;AACA,IAAIK,YAAY,GAAGL,UAAU,CAAC,CAAD,CAA7B;;AACA,IAAIM,WAAW,GAAGN,UAAU,CAAC,CAAD,CAA5B;;AACA,IAAIO,SAAS,GAAGP,UAAU,CAAC,CAAD,CAA1B;;AACA,IAAIQ,WAAW,GAAGR,UAAU,CAAC,CAAD,CAA5B;;AAEA,IAAIS,UAAU,GAAGP,SAAS,CAACntL,KAA3B;;AACA,IAAI2tL,UAAU,GAAGP,SAAS,CAACptL,KAA3B;;AACA,IAAI4tL,WAAW,GAAGP,UAAU,CAACrtL,KAA7B;;AACA,IAAI6tL,aAAa,GAAGP,YAAY,CAACttL,KAAjC;;AACA,IAAI8tL,YAAY,GAAGP,WAAW,CAACvtL,KAA/B;;AACA,IAAI+tL,UAAU,GAAGP,SAAS,CAACxtL,KAA3B;;AACA,IAAIguL,YAAY,GAAGP,WAAW,CAACztL,KAA/B;;;;;;;;;;AC5BP;;;;AAEA,IAAIiuL,QAAQ,GAAG,uBAAS,UAASnZ,IAAT,EAAe;AACrCA,EAAAA,IAAI,CAACiY,UAAL,CAAgB,CAAhB;AACAjY,EAAAA,IAAI,CAACgY,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACD,CAHc,EAGZ,UAAShY,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACoZ,WAAL,CAAiBpZ,IAAI,CAACG,WAAL,KAAqB/7L,IAAtC;AACD,CALc,EAKZ,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAOA,GAAG,CAAC8kM,WAAJ,KAAoB3qM,KAAK,CAAC2qM,WAAN,EAApB,GAA0C,CAAC9kM,GAAG,CAACisM,cAAJ,KAAuB9xM,KAAK,CAAC8xM,cAAN,EAAxB,IAAkD,EAAnG;AACD,CAPc,EAOZ,UAAStH,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACG,WAAL,EAAP;AACD,CATc,CAAf;eAWegZ;;AACR,IAAIE,SAAS,GAAGF,QAAQ,CAACjuL,KAAzB;;;;;;;;;;ACdP;;;;AAEA,IAAIouL,OAAO,GAAG,uBAAS,UAAStZ,IAAT,EAAe;AACpCA,EAAAA,IAAI,CAACoZ,WAAL,CAAiB,CAAjB,EAAoB,CAApB;AACApZ,EAAAA,IAAI,CAACgY,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACD,CAHa,EAGX,UAAShY,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,EAAAA,IAAI,CAACuZ,cAAL,CAAoBvZ,IAAI,CAACsH,cAAL,KAAwBljM,IAA5C;AACD,CALa,EAKX,UAAS5O,KAAT,EAAgB6F,GAAhB,EAAqB;AACtB,SAAOA,GAAG,CAACisM,cAAJ,KAAuB9xM,KAAK,CAAC8xM,cAAN,EAA9B;AACD,CAPa,EAOX,UAAStH,IAAT,EAAe;AAChB,SAAOA,IAAI,CAACsH,cAAL,EAAP;AACD,CATa,CAAd,EAWA;;AACAgS,OAAO,CAAClmN,KAAR,GAAgB,UAAS4T,CAAT,EAAY;AAC1B,SAAO,CAACzS,QAAQ,CAACyS,CAAC,GAAGvX,IAAI,CAAC+H,KAAL,CAAWwP,CAAX,CAAL,CAAT,IAAgC,EAAEA,CAAC,GAAG,CAAN,CAAhC,GAA2C,IAA3C,GAAkD,uBAAS,UAASg5L,IAAT,EAAe;AAC/EA,IAAAA,IAAI,CAACuZ,cAAL,CAAoB9pN,IAAI,CAAC+H,KAAL,CAAWwoM,IAAI,CAACsH,cAAL,KAAwBtgM,CAAnC,IAAwCA,CAA5D;AACAg5L,IAAAA,IAAI,CAACoZ,WAAL,CAAiB,CAAjB,EAAoB,CAApB;AACApZ,IAAAA,IAAI,CAACgY,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACD,GAJwD,EAItD,UAAShY,IAAT,EAAe57L,IAAf,EAAqB;AACtB47L,IAAAA,IAAI,CAACuZ,cAAL,CAAoBvZ,IAAI,CAACsH,cAAL,KAAwBljM,IAAI,GAAG4C,CAAnD;AACD,GANwD,CAAzD;AAOD,CARD;;eAUesyM;;AACR,IAAIE,QAAQ,GAAGF,OAAO,CAACpuL,KAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBP;;AAIA;;AAOA;;AAOA;;AAKA;;AAKA;;AAKA;;AAmBA;;AAKA;;AAKA;;AAKA;;AAKA;;AAKA;;AAmBA;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrGA;;AACA;;AACA;;AAEA,MAAMuuL,IAAI,GAAG,MAAb;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AACA,MAAMC,SAAS,GAAG,WAAlB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,YAAY,GAAG,cAArB;;AACA,MAAMC,UAAU,GAAG,CAACX,IAAD,EAAOC,OAAP,EAAgBC,KAAhB,EAAuBC,IAAvB,EAA6BC,IAA7B,EAAmCC,GAAnC,EAAwCC,SAAxC,EAAmDC,KAAnD,EAA0DC,OAA1D,EAAmEC,OAAnE,EAA4EC,YAA5E,CAAnB;;AACA,MAAME,KAAK,GAAGD,UAAU,CAACnkN,MAAX,CAAkB,CAACof,CAAD,EAAIqzD,CAAJ,EAAOh/E,CAAP,MAAc2rB,CAAC,CAACqzD,CAAD,CAAD,GAAO,IAAIh/E,CAAX,EAAc2rB,CAA5B,CAAlB,EAAkD,EAAlD,CAAd;;AACA,SAASilM,SAAT,CAAmB52D,KAAnB,EAA0B;AACxB,QAAMh7E,CAAC,GAAG,qBAAMg7E,KAAN,EAAa3wJ,KAAb,EAAV;AAAA,QACMouF,CAAC,GAAG,EADV,CADwB,CAEV;;AAEd,MAAI,CAACzY,CAAC,CAAC1/E,MAAP,EAAe,qBAAM,oBAAN;AACf0/E,EAAAA,CAAC,CAACl7E,OAAF,CAAU+sN,IAAI,IAAI;AAChB,QAAI,8BAAeF,KAAf,EAAsBE,IAAtB,CAAJ,EAAiC;AAC/Bp5H,MAAAA,CAAC,CAACo5H,IAAD,CAAD,GAAU,CAAV;AACD,KAFD,MAEO;AACL,2BAAM,sBAAsBtxN,MAAtB,CAA6BsxN,IAA7B,EAAmC,GAAnC,CAAN;AACD;AACF,GAND;AAOA,QAAMC,QAAQ,GAAG,CAACr5H,CAAC,CAACy4H,IAAD,CAAD,IAAWz4H,CAAC,CAAC24H,GAAD,CAAZ,GAAoB,CAApB,GAAwB,CAAzB,KAA+B34H,CAAC,CAACu4H,OAAD,CAAD,IAAcv4H,CAAC,CAACw4H,KAAD,CAAf,IAA0Bx4H,CAAC,CAAC04H,IAAD,CAA3B,GAAoC,CAApC,GAAwC,CAAvE,KAA6E14H,CAAC,CAAC44H,SAAD,CAAD,GAAe,CAAf,GAAmB,CAAhG,CAAjB;;AAEA,MAAIS,QAAQ,GAAG,CAAf,EAAkB;AAChB,yBAAM,4BAA4BvxN,MAA5B,CAAmCy6J,KAAnC,CAAN;AACD,GAhBuB,CAgBtB;;;AAGFh7E,EAAAA,CAAC,CAACh1E,IAAF,CAAO,CAAC9C,CAAD,EAAI6G,CAAJ,KAAU4iN,KAAK,CAACzpN,CAAD,CAAL,GAAWypN,KAAK,CAAC5iN,CAAD,CAAjC;AACA,SAAOixE,CAAP;AACD;;AACD,MAAM+xI,iBAAiB,GAAG;AACxB,GAAChB,IAAD,GAAQ,KADgB;AAExB,GAACC,OAAD,GAAW,MAFa;AAGxB,GAACC,KAAD,GAAS,KAHe;AAIxB,GAACE,IAAD,GAAQ,KAJgB;AAKxB,GAACD,IAAD,GAAQ,MALgB;AAMxB,GAACE,GAAD,GAAO,KANiB;AAOxB,GAACC,SAAD,GAAa,KAPW;AAQxB,GAACC,KAAD,GAAS,OARe;AASxB,GAACC,OAAD,GAAW,OATa;AAUxB,GAACC,OAAD,GAAW,KAVa;AAWxB,GAACC,YAAD,GAAgB,KAXQ;AAYxB,GAAC,GAAGlxN,MAAH,CAAUwwN,IAAV,EAAgB,GAAhB,EAAqBxwN,MAArB,CAA4B0wN,KAA5B,CAAD,GAAsC,QAZd;AAaxB,GAAC,GAAG1wN,MAAH,CAAUwwN,IAAV,EAAgB,GAAhB,EAAqBxwN,MAArB,CAA4B0wN,KAA5B,EAAmC,GAAnC,EAAwC1wN,MAAxC,CAA+C4wN,IAA/C,CAAD,GAAwD,WAbhC;AAcxB,GAAC,GAAG5wN,MAAH,CAAU+wN,KAAV,EAAiB,GAAjB,EAAsB/wN,MAAtB,CAA6BgxN,OAA7B,CAAD,GAAyC;AAdjB,CAA1B;;AAgBA,SAASS,iBAAT,CAA2Bh3D,KAA3B,EAAkCi3D,UAAlC,EAA8C;AAC5C,QAAMztN,CAAC,GAAG,sBAAO,EAAP,EAAWutN,iBAAX,EAA8BE,UAA9B,CAAV;AAAA,QACMjyI,CAAC,GAAG4xI,SAAS,CAAC52D,KAAD,CADnB;AAAA,QAEM9rJ,CAAC,GAAG8wE,CAAC,CAAC1/E,MAFZ;AAGA,MAAI4xN,GAAG,GAAG,EAAV;AAAA,MACIplN,KAAK,GAAG,CADZ;AAAA,MAEI6F,GAFJ;AAAA,MAGI1N,GAHJ;;AAKA,OAAK6H,KAAK,GAAG,CAAb,EAAgBA,KAAK,GAAGoC,CAAxB,GAA4B;AAC1B,SAAKyD,GAAG,GAAGqtE,CAAC,CAAC1/E,MAAb,EAAqBqS,GAAG,GAAG7F,KAA3B,EAAkC,EAAE6F,GAApC,EAAyC;AACvC1N,MAAAA,GAAG,GAAG+6E,CAAC,CAAC31E,KAAF,CAAQyC,KAAR,EAAe6F,GAAf,EAAoB/N,IAApB,CAAyB,GAAzB,CAAN;;AAEA,UAAIJ,CAAC,CAACS,GAAD,CAAD,IAAU,IAAd,EAAoB;AAClBitN,QAAAA,GAAG,IAAI1tN,CAAC,CAACS,GAAD,CAAR;AACA6H,QAAAA,KAAK,GAAG6F,GAAR;AACA;AACD;AACF;AACF;;AAED,SAAOu/M,GAAG,CAACj2G,IAAJ,EAAP;AACD;;AAED,MAAMgwG,EAAE,GAAG,IAAIn1I,IAAJ,EAAX;;AAEA,SAASq7I,SAAT,CAAmBzsM,CAAnB,EAAsB;AACpBumM,EAAAA,EAAE,CAAC4C,WAAH,CAAenpM,CAAf;AACAumM,EAAAA,EAAE,CAACyC,QAAH,CAAY,CAAZ;AACAzC,EAAAA,EAAE,CAACoB,OAAH,CAAW,CAAX;AACApB,EAAAA,EAAE,CAACmB,QAAH,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACA,SAAOnB,EAAP;AACD;;AAED,SAASmG,SAAT,CAAmBvkN,CAAnB,EAAsB;AACpB,SAAOwkN,cAAc,CAAC,IAAIv7I,IAAJ,CAASjpE,CAAT,CAAD,CAArB;AACD;;AACD,SAASykN,IAAT,CAAczkN,CAAd,EAAiB;AACf,SAAO0kN,YAAY,CAAC,IAAIz7I,IAAJ,CAASjpE,CAAT,CAAD,CAAnB;AACD;;AACD,SAASwkN,cAAT,CAAwBxkN,CAAxB,EAA2B;AACzB,SAAO2kN,gBAAQz5I,KAAR,CAAco5I,SAAS,CAACtkN,CAAC,CAAC8gN,WAAF,EAAD,CAAT,GAA6B,CAA3C,EAA8C9gN,CAA9C,CAAP;AACD;;AACD,SAAS0kN,YAAT,CAAsB1kN,CAAtB,EAAyB;AACvB,SAAO4kN,iBAAS15I,KAAT,CAAeo5I,SAAS,CAACtkN,CAAC,CAAC8gN,WAAF,EAAD,CAAT,GAA6B,CAA5C,EAA+C9gN,CAA/C,CAAP;AACD;;AACD,SAAS6kN,UAAT,CAAoBhtM,CAApB,EAAuB;AACrB,SAAOysM,SAAS,CAACzsM,CAAD,CAAT,CAAagoM,MAAb,EAAP;AACD;;AACD,SAASiF,SAAT,CAAmBjtM,CAAnB,EAAsB+yE,CAAtB,EAAyB5qF,CAAzB,EAA4B+kN,CAA5B,EAA+Bx5H,CAA/B,EAAkCzgB,CAAlC,EAAqCk6I,CAArC,EAAwC;AACtC,MAAI,KAAKntM,CAAL,IAAUA,CAAC,GAAG,GAAlB,EAAuB;AACrB,UAAM4xL,IAAI,GAAG,IAAIxgI,IAAJ,CAAS,CAAC,CAAV,EAAa2hB,CAAb,EAAgB5qF,CAAhB,EAAmB+kN,CAAnB,EAAsBx5H,CAAtB,EAAyBzgB,CAAzB,EAA4Bk6I,CAA5B,CAAb;AACAvb,IAAAA,IAAI,CAACuX,WAAL,CAAiBnpM,CAAjB;AACA,WAAO4xL,IAAP;AACD;;AAED,SAAO,IAAIxgI,IAAJ,CAASpxD,CAAT,EAAY+yE,CAAZ,EAAe5qF,CAAf,EAAkB+kN,CAAlB,EAAqBx5H,CAArB,EAAwBzgB,CAAxB,EAA2Bk6I,CAA3B,CAAP;AACD;;AACD,SAASC,YAAT,CAAsBjlN,CAAtB,EAAyB;AACvB,SAAOklN,YAAY,CAAC,IAAIj8I,IAAJ,CAASjpE,CAAT,CAAD,CAAnB;AACD;;AACD,SAASmlN,OAAT,CAAiBnlN,CAAjB,EAAoB;AAClB,SAAOolN,UAAU,CAAC,IAAIn8I,IAAJ,CAASjpE,CAAT,CAAD,CAAjB;AACD;;AACD,SAASklN,YAAT,CAAsBllN,CAAtB,EAAyB;AACvB,QAAM6X,CAAC,GAAGoxD,IAAI,CAACo8I,GAAL,CAASrlN,CAAC,CAAC+wM,cAAF,EAAT,EAA6B,CAA7B,EAAgC,CAAhC,CAAV;AACA,SAAOyQ,eAAOt2I,KAAP,CAAarzD,CAAC,GAAG,CAAjB,EAAoB7X,CAApB,CAAP;AACD;;AACD,SAASolN,UAAT,CAAoBplN,CAApB,EAAuB;AACrB,QAAM6X,CAAC,GAAGoxD,IAAI,CAACo8I,GAAL,CAASrlN,CAAC,CAAC+wM,cAAF,EAAT,EAA6B,CAA7B,EAAgC,CAAhC,CAAV;AACA,SAAOuU,gBAAQp6I,KAAR,CAAcrzD,CAAC,GAAG,CAAlB,EAAqB7X,CAArB,CAAP;AACD;;AACD,SAASulN,QAAT,CAAkB1tM,CAAlB,EAAqB;AACnBumM,EAAAA,EAAE,CAACK,OAAH,CAAWx1I,IAAI,CAACo8I,GAAL,CAASxtM,CAAT,EAAY,CAAZ,EAAe,CAAf,CAAX;AACA,SAAOumM,EAAE,CAACyD,SAAH,EAAP;AACD;;AACD,SAAS2D,OAAT,CAAiB3tM,CAAjB,EAAoB+yE,CAApB,EAAuB5qF,CAAvB,EAA0B+kN,CAA1B,EAA6Bx5H,CAA7B,EAAgCzgB,CAAhC,EAAmCk6I,CAAnC,EAAsC;AACpC,MAAI,KAAKntM,CAAL,IAAUA,CAAC,GAAG,GAAlB,EAAuB;AACrB,UAAM4xL,IAAI,GAAG,IAAIxgI,IAAJ,CAASA,IAAI,CAACo8I,GAAL,CAAS,CAAC,CAAV,EAAaz6H,CAAb,EAAgB5qF,CAAhB,EAAmB+kN,CAAnB,EAAsBx5H,CAAtB,EAAyBzgB,CAAzB,EAA4Bk6I,CAA5B,CAAT,CAAb;AACAvb,IAAAA,IAAI,CAACuZ,cAAL,CAAoBhjN,CAAC,CAAC6X,CAAtB;AACA,WAAO4xL,IAAP;AACD;;AAED,SAAO,IAAIxgI,IAAJ,CAASA,IAAI,CAACo8I,GAAL,CAASxtM,CAAT,EAAY+yE,CAAZ,EAAe5qF,CAAf,EAAkB+kN,CAAlB,EAAqBx5H,CAArB,EAAwBzgB,CAAxB,EAA2Bk6I,CAA3B,CAAT,CAAP;AACD;;AAED,SAAS/jN,KAAT,CAAeksJ,KAAf,EAAsBt/I,IAAtB,EAA4B5X,GAA5B,EAAiCwvN,GAAjC,EAAsCC,OAAtC,EAA+C;AAC7C,QAAM/uN,CAAC,GAAGkX,IAAI,IAAI,CAAlB;AAAA,QACM3M,CAAC,GAAG,oBAAKisJ,KAAL,CADV;AAAA,QAEMrzI,CAAC,GAAG,CAACkqM,IAAD,EAAOvsL,CAAP,EAAUrgC,GAAV,KAAkB;AAC1BA,IAAAA,GAAG,GAAGA,GAAG,IAAI4sN,IAAb;AACA,WAAO2B,OAAO,CAAC1vN,GAAG,CAACmB,GAAD,CAAJ,EAAWquN,GAAG,CAACruN,GAAD,CAAd,EAAqB4sN,IAAI,KAAK9iN,CAAT,IAAcvK,CAAnC,EAAsC8gC,CAAtC,CAAd;AACD,GALD;;AAOA,QAAM5gC,CAAC,GAAG,IAAIoyE,IAAJ,EAAV;AAAA,QACMkJ,CAAC,GAAG,qBAAMg7E,KAAN,CADV;AAAA,QAEMt1I,CAAC,GAAGs6D,CAAC,CAAC+wI,IAAD,CAAD,GAAUppM,CAAC,CAACopM,IAAD,CAAX,GAAoB,wBAAS,IAAT,CAF9B;AAAA,QAGMt4H,CAAC,GAAGzY,CAAC,CAACixI,KAAD,CAAD,GAAWtpM,CAAC,CAACspM,KAAD,CAAZ,GAAsBjxI,CAAC,CAACgxI,OAAD,CAAD,GAAarpM,CAAC,CAACqpM,OAAD,CAAd,GAA0Bp6K,cAH1D;AAAA,QAIM/oC,CAAC,GAAGmyE,CAAC,CAACkxI,IAAD,CAAD,IAAWlxI,CAAC,CAACoxI,GAAD,CAAZ,GAAoBzpM,CAAC,CAACypM,GAAD,EAAM,CAAN,EAASF,IAAI,GAAGE,GAAhB,CAArB,GAA4CpxI,CAAC,CAACkxI,IAAD,CAAD,GAAUvpM,CAAC,CAACupM,IAAD,EAAO,CAAP,CAAX,GAAuBlxI,CAAC,CAACoxI,GAAD,CAAD,GAASzpM,CAAC,CAACypM,GAAD,EAAM,CAAN,CAAV,GAAqBpxI,CAAC,CAACmxI,IAAD,CAAD,GAAUxpM,CAAC,CAACwpM,IAAD,EAAO,CAAP,CAAX,GAAuBnxI,CAAC,CAACqxI,SAAD,CAAD,GAAe1pM,CAAC,CAAC0pM,SAAD,EAAY,CAAZ,CAAhB,GAAiCrhI,aAJ1J;AAAA,QAKM4iI,CAAC,GAAG5yI,CAAC,CAACsxI,KAAD,CAAD,GAAW3pM,CAAC,CAAC2pM,KAAD,CAAZ,GAAsB16K,cALhC;AAAA,QAMMwiD,CAAC,GAAGpZ,CAAC,CAACuxI,OAAD,CAAD,GAAa5pM,CAAC,CAAC4pM,OAAD,CAAd,GAA0B36K,cANpC;AAAA,QAOM+hC,CAAC,GAAGqH,CAAC,CAACwxI,OAAD,CAAD,GAAa7pM,CAAC,CAAC6pM,OAAD,CAAd,GAA0B56K,cAPpC;AAAA,QAQMi8K,CAAC,GAAG7yI,CAAC,CAACyxI,YAAD,CAAD,GAAkB9pM,CAAC,CAAC8pM,YAAD,CAAnB,GAAoC76K,cAR9C;AASA,SAAO,UAAU1jC,CAAV,EAAa;AAClBxO,IAAAA,CAAC,CAAC4nN,OAAF,CAAU,CAACp5M,CAAX;AACA,UAAMgrM,IAAI,GAAGx4L,CAAC,CAAChhB,CAAD,CAAd;AACA,WAAO6uN,OAAO,CAACrV,IAAD,EAAOzlH,CAAC,CAAC/zF,CAAD,CAAR,EAAamJ,CAAC,CAACnJ,CAAD,EAAIw5M,IAAJ,CAAd,EAAyB0U,CAAC,CAACluN,CAAD,CAA1B,EAA+B00F,CAAC,CAAC10F,CAAD,CAAhC,EAAqCi0E,CAAC,CAACj0E,CAAD,CAAtC,EAA2CmuN,CAAC,CAACnuN,CAAD,CAA5C,CAAd;AACD,GAJD;AAKD;;AAED,SAAS8uN,OAAT,CAAiB7mN,CAAjB,EAAoB2mN,GAApB,EAAyB53M,IAAzB,EAA+B+3M,KAA/B,EAAsC;AACpC,QAAMzzI,CAAC,GAAGtkE,IAAI,IAAI,CAAR,GAAY/O,CAAZ,GAAgB8mN,KAAK,GAAG,CAAC5lN,CAAD,EAAI6X,CAAJ,KAAU+tM,KAAK,GAAG/3M,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW,CAACnC,CAAC,CAACkB,CAAD,EAAI6X,CAAJ,CAAD,GAAU+tM,KAAX,IAAoB/3M,IAA/B,CAA5B,GAAmE,CAAC7N,CAAD,EAAI6X,CAAJ,KAAUhK,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAWnC,CAAC,CAACkB,CAAD,EAAI6X,CAAJ,CAAD,GAAUhK,IAArB,CAAnH;AACA,SAAO43M,GAAG,GAAG,CAACzlN,CAAD,EAAI6X,CAAJ,KAAU4tM,GAAG,CAACtzI,CAAC,CAACnyE,CAAD,EAAI6X,CAAJ,CAAF,EAAUA,CAAV,CAAhB,GAA+Bs6D,CAAzC;AACD,EAAC;AACF;;;AAGA,SAASytI,OAAT,CAAiB6E,IAAjB,EAAuBnF,GAAvB,EAA4BuG,QAA5B,EAAsC;AACpC,SAAOvG,GAAG,GAAGmF,IAAI,GAAG,CAAb,GAAiB,CAACoB,QAAQ,GAAG,CAAZ,IAAiB,CAAzC;AACD,EAAC;;;AAGF,MAAMC,QAAQ,GAAG;AACf,GAAC5C,IAAD,GAAQljN,CAAC,IAAIA,CAAC,CAAC8gN,WAAF,EADE;AAEf,GAACqC,OAAD,GAAWnjN,CAAC,IAAI9G,IAAI,CAAC+H,KAAL,CAAWjB,CAAC,CAAC0pM,QAAF,KAAe,CAA1B,CAFD;AAGf,GAAC0Z,KAAD,GAASpjN,CAAC,IAAIA,CAAC,CAAC0pM,QAAF,EAHC;AAIf,GAAC4Z,IAAD,GAAQtjN,CAAC,IAAIA,CAAC,CAACy/M,OAAF,EAJE;AAKf,GAACgE,KAAD,GAASzjN,CAAC,IAAIA,CAAC,CAAC+yM,QAAF,EALC;AAMf,GAAC2Q,OAAD,GAAW1jN,CAAC,IAAIA,CAAC,CAACo/M,UAAF,EAND;AAOf,GAACuE,OAAD,GAAW3jN,CAAC,IAAIA,CAAC,CAACm/M,UAAF,EAPD;AAQf,GAACyE,YAAD,GAAgB5jN,CAAC,IAAIA,CAAC,CAACi/M,eAAF,EARN;AASf,GAACuE,SAAD,GAAaxjN,CAAC,IAAIwkN,cAAc,CAACxkN,CAAD,CATjB;AAUf,GAACqjN,IAAD,GAAQrjN,CAAC,IAAI0kN,YAAY,CAAC1kN,CAAD,CAVV;AAWf,GAACqjN,IAAI,GAAGE,GAAR,GAAc,CAACvjN,CAAD,EAAI6X,CAAJ,KAAU+nM,OAAO,CAAC8E,YAAY,CAAC1kN,CAAD,CAAb,EAAkBA,CAAC,CAAC6/M,MAAF,EAAlB,EAA8BgF,UAAU,CAAChtM,CAAD,CAAxC,CAXhB;AAYf,GAAC0rM,GAAD,GAAO,CAACvjN,CAAD,EAAI6X,CAAJ,KAAU+nM,OAAO,CAAC,CAAD,EAAI5/M,CAAC,CAAC6/M,MAAF,EAAJ,EAAgBgF,UAAU,CAAChtM,CAAD,CAA1B;AAZT,CAAjB;AAcA,MAAMkuM,QAAQ,GAAG;AACf,GAAC5C,OAAD,GAAWt4H,CAAC,IAAI,IAAIA,CADL;AAEf,GAACw4H,IAAD,GAAQ,CAAC5jK,CAAD,EAAI5nC,CAAJ,KAAU+nM,OAAO,CAACngK,CAAD,EAAI,CAAJ,EAAOolK,UAAU,CAAChtM,CAAD,CAAjB;AAFV,CAAjB;;AAIA,SAASmuM,SAAT,CAAmB74D,KAAnB,EAA0Bt/I,IAA1B,EAAgC;AAC9B,SAAO5M,KAAK,CAACksJ,KAAD,EAAQt/I,IAAI,IAAI,CAAhB,EAAmBi4M,QAAnB,EAA6BC,QAA7B,EAAuCjB,SAAvC,CAAZ;AACD,EAAC;;;AAEF,MAAMmB,MAAM,GAAG;AACb,GAAC/C,IAAD,GAAQljN,CAAC,IAAIA,CAAC,CAAC+wM,cAAF,EADA;AAEb,GAACoS,OAAD,GAAWnjN,CAAC,IAAI9G,IAAI,CAAC+H,KAAL,CAAWjB,CAAC,CAAC4pM,WAAF,KAAkB,CAA7B,CAFH;AAGb,GAACwZ,KAAD,GAASpjN,CAAC,IAAIA,CAAC,CAAC4pM,WAAF,EAHD;AAIb,GAAC0Z,IAAD,GAAQtjN,CAAC,IAAIA,CAAC,CAACgxM,UAAF,EAJA;AAKb,GAACyS,KAAD,GAASzjN,CAAC,IAAIA,CAAC,CAACwwM,WAAF,EALD;AAMb,GAACkT,OAAD,GAAW1jN,CAAC,IAAIA,CAAC,CAAC0wM,aAAF,EANH;AAOb,GAACiT,OAAD,GAAW3jN,CAAC,IAAIA,CAAC,CAAC4wM,aAAF,EAPH;AAQb,GAACgT,YAAD,GAAgB5jN,CAAC,IAAIA,CAAC,CAAC8wM,kBAAF,EARR;AASb,GAAC0S,SAAD,GAAaxjN,CAAC,IAAIklN,YAAY,CAACllN,CAAD,CATjB;AAUb,GAACqjN,IAAD,GAAQrjN,CAAC,IAAIolN,UAAU,CAACplN,CAAD,CAVV;AAWb,GAACujN,GAAD,GAAO,CAACvjN,CAAD,EAAI6X,CAAJ,KAAU+nM,OAAO,CAAC,CAAD,EAAI5/M,CAAC,CAAC6hN,SAAF,EAAJ,EAAmB0D,QAAQ,CAAC1tM,CAAD,CAA3B,CAXX;AAYb,GAACwrM,IAAI,GAAGE,GAAR,GAAc,CAACvjN,CAAD,EAAI6X,CAAJ,KAAU+nM,OAAO,CAACwF,UAAU,CAACplN,CAAD,CAAX,EAAgBA,CAAC,CAAC6hN,SAAF,EAAhB,EAA+B0D,QAAQ,CAAC1tM,CAAD,CAAvC;AAZlB,CAAf;AAcA,MAAMquM,MAAM,GAAG;AACb,GAAC/C,OAAD,GAAWt4H,CAAC,IAAI,IAAIA,CADP;AAEb,GAACw4H,IAAD,GAAQ,CAAC5jK,CAAD,EAAI5nC,CAAJ,KAAU+nM,OAAO,CAACngK,CAAD,EAAI,CAAJ,EAAO8lK,QAAQ,CAAC1tM,CAAD,CAAf;AAFZ,CAAf;;AAIA,SAASsuM,QAAT,CAAkBh5D,KAAlB,EAAyBt/I,IAAzB,EAA+B;AAC7B,SAAO5M,KAAK,CAACksJ,KAAD,EAAQt/I,IAAI,IAAI,CAAhB,EAAmBo4M,MAAnB,EAA2BC,MAA3B,EAAmCV,OAAnC,CAAZ;AACD;;AAED,MAAMY,aAAa,GAAG;AACpB,GAAClD,IAAD,GAAQmD,gBADY;AAEpB,GAAClD,OAAD,GAAWmD,kBAAUzpN,KAAV,CAAgB,CAAhB,CAFS;AAGpB,GAACumN,KAAD,GAASkD,iBAHW;AAIpB,GAACjD,IAAD,GAAQuB,gBAJY;AAKpB,GAACtB,IAAD,GAAQqB,eALY;AAMpB,GAACpB,GAAD,GAAOoB,eANa;AAOpB,GAACnB,SAAD,GAAamB,eAPO;AAQpB,GAAClB,KAAD,GAAS8C,gBARW;AASpB,GAAC7C,OAAD,GAAW8C,kBATS;AAUpB,GAAC7C,OAAD,GAAW8C,kBAVS;AAWpB,GAAC7C,YAAD,GAAgB8C;AAXI,CAAtB;AAaA,MAAMC,YAAY,GAAG;AACnB,GAACzD,IAAD,GAAQH,eADW;AAEnB,GAACI,OAAD,GAAWP,iBAAS/lN,KAAT,CAAe,CAAf,CAFQ;AAGnB,GAACumN,KAAD,GAASR,gBAHU;AAInB,GAACS,IAAD,GAAQiC,eAJW;AAKnB,GAAChC,IAAD,GAAQ9B,cALW;AAMnB,GAAC+B,GAAD,GAAO/B,cANY;AAOnB,GAACgC,SAAD,GAAahC,cAPM;AAQnB,GAACiC,KAAD,GAASpC,eARU;AASnB,GAACqC,OAAD,GAAWxC,iBATQ;AAUnB,GAACyC,OAAD,GAAWiD,iBAVQ;AAWnB,GAAChD,YAAD,GAAgBiD;AAXG,CAArB;;AAaA,SAASC,YAAT,CAAsB9C,IAAtB,EAA4B;AAC1B,SAAOoC,aAAa,CAACpC,IAAD,CAApB;AACD;;AACD,SAAS+C,WAAT,CAAqB/C,IAArB,EAA2B;AACzB,SAAO2C,YAAY,CAAC3C,IAAD,CAAnB;AACD;;AAED,SAASlkN,MAAT,CAAgBknN,IAAhB,EAAsBvd,IAAtB,EAA4B57L,IAA5B,EAAkC;AAChC,SAAOm5M,IAAI,GAAGA,IAAI,CAAClnN,MAAL,CAAY2pM,IAAZ,EAAkB57L,IAAlB,CAAH,GAA6Bw6G,SAAxC;AACD;;AAED,SAAS4+F,UAAT,CAAoBjD,IAApB,EAA0Bva,IAA1B,EAAgC57L,IAAhC,EAAsC;AACpC,SAAO/N,MAAM,CAACgnN,YAAY,CAAC9C,IAAD,CAAb,EAAqBva,IAArB,EAA2B57L,IAA3B,CAAb;AACD;;AACD,SAASq5M,SAAT,CAAmBlD,IAAnB,EAAyBva,IAAzB,EAA+B57L,IAA/B,EAAqC;AACnC,SAAO/N,MAAM,CAACinN,WAAW,CAAC/C,IAAD,CAAZ,EAAoBva,IAApB,EAA0B57L,IAA1B,CAAb;AACD;;AAED,SAASurL,QAAT,CAAkB4tB,IAAlB,EAAwB/nN,KAAxB,EAA+By1B,IAA/B,EAAqC7mB,IAArC,EAA2C;AACzC,SAAOm5M,IAAI,GAAGA,IAAI,CAACryL,KAAL,CAAW11B,KAAX,EAAkBy1B,IAAlB,EAAwB7mB,IAAxB,CAAH,GAAmCw6G,SAA9C;AACD;;AAED,SAAS8+F,YAAT,CAAsBnD,IAAtB,EAA4B/kN,KAA5B,EAAmCy1B,IAAnC,EAAyC7mB,IAAzC,EAA+C;AAC7C,SAAOurL,QAAQ,CAAC0tB,YAAY,CAAC9C,IAAD,CAAb,EAAqB/kN,KAArB,EAA4By1B,IAA5B,EAAkC7mB,IAAlC,CAAf;AACD;;AACD,SAASu5M,WAAT,CAAqBpD,IAArB,EAA2B/kN,KAA3B,EAAkCy1B,IAAlC,EAAwC7mB,IAAxC,EAA8C;AAC5C,SAAOurL,QAAQ,CAAC2tB,WAAW,CAAC/C,IAAD,CAAZ,EAAoB/kN,KAApB,EAA2By1B,IAA3B,EAAiC7mB,IAAjC,CAAf;AACD;;AAED,MAAM8wM,cAAc,GAAG,IAAvB;AAAA,MACMC,cAAc,GAAGD,cAAc,GAAG,EADxC;AAAA,MAEME,YAAY,GAAGD,cAAc,GAAG,EAFtC;AAAA,MAGME,WAAW,GAAGD,YAAY,GAAG,EAHnC;AAAA,MAIME,YAAY,GAAGD,WAAW,GAAG,CAJnC;AAAA,MAKMuI,aAAa,GAAGvI,WAAW,GAAG,EALpC;AAAA,MAMMwI,YAAY,GAAGxI,WAAW,GAAG,GANnC;AAOA,MAAMyI,KAAK,GAAG,CAACrE,IAAD,EAAOE,KAAP,EAAcE,IAAd,EAAoBG,KAApB,EAA2BC,OAA3B,EAAoCC,OAApC,EAA6CC,YAA7C,CAAd;AAAA,MACM4D,OAAO,GAAGD,KAAK,CAAC/qN,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,CADhB;AAAA,MAEMirN,OAAO,GAAGD,OAAO,CAAChrN,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAFhB;AAAA,MAGMkrN,KAAK,GAAGD,OAAO,CAACjrN,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAHd;AAAA,MAIMmrN,GAAG,GAAGD,KAAK,CAAClrN,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,CAJZ;AAAA,MAKMorN,IAAI,GAAG,CAAC1E,IAAD,EAAOG,IAAP,CALb;AAAA,MAMMwE,KAAK,GAAG,CAAC3E,IAAD,EAAOE,KAAP,CANd;AAAA,MAOM0E,IAAI,GAAG,CAAC5E,IAAD,CAPb;AAQA,MAAM6E,SAAS,GAAG,CAAC,CAACP,OAAD,EAAU,CAAV,EAAa7I,cAAb,CAAD,EAA+B,CAAC6I,OAAD,EAAU,CAAV,EAAa,IAAI7I,cAAjB,CAA/B,EAAiE,CAAC6I,OAAD,EAAU,EAAV,EAAc,KAAK7I,cAAnB,CAAjE,EAAqG,CAAC6I,OAAD,EAAU,EAAV,EAAc,KAAK7I,cAAnB,CAArG,EAAyI,CAAC8I,OAAD,EAAU,CAAV,EAAa7I,cAAb,CAAzI,EAAuK,CAAC6I,OAAD,EAAU,CAAV,EAAa,IAAI7I,cAAjB,CAAvK,EAAyM,CAAC6I,OAAD,EAAU,EAAV,EAAc,KAAK7I,cAAnB,CAAzM,EAA6O,CAAC6I,OAAD,EAAU,EAAV,EAAc,KAAK7I,cAAnB,CAA7O,EAAiR,CAAC8I,KAAD,EAAQ,CAAR,EAAW7I,YAAX,CAAjR,EAA2S,CAAC6I,KAAD,EAAQ,CAAR,EAAW,IAAI7I,YAAf,CAA3S,EAAyU,CAAC6I,KAAD,EAAQ,CAAR,EAAW,IAAI7I,YAAf,CAAzU,EAAuW,CAAC6I,KAAD,EAAQ,EAAR,EAAY,KAAK7I,YAAjB,CAAvW,EAAuY,CAAC8I,GAAD,EAAM,CAAN,EAAS7I,WAAT,CAAvY,EAA8Z,CAAC8I,IAAD,EAAO,CAAP,EAAU7I,YAAV,CAA9Z,EAAub,CAAC8I,KAAD,EAAQ,CAAR,EAAWR,aAAX,CAAvb,EAAkd,CAACQ,KAAD,EAAQ,CAAR,EAAW,IAAIR,aAAf,CAAld,EAAif,CAACS,IAAD,EAAO,CAAP,EAAUR,YAAV,CAAjf,CAAlB;;AACA,SAASpN,GAAT,CAAc9S,GAAd,EAAmB;AACjB,QAAM9hJ,GAAG,GAAG8hJ,GAAG,CAACoF,MAAhB;AAAA,QACMjzM,GAAG,GAAG6tM,GAAG,CAAC4gB,OAAJ,IAAe,EAD3B;AAAA,QAEMt+K,MAAM,GAAGxwC,IAAI,CAACiT,GAAL,CAAS,oBAAKm5C,GAAL,CAAT,IAAsB/rD,GAFrC;AAGA,MAAIpG,CAAC,GAAG,uBAASA,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAf,EAAoBozC,KAApB,CAA0BwhL,SAA1B,EAAqCr+K,MAArC,CAAR;AAAA,MACIyjH,KADJ;AAAA,MAEIt/I,IAFJ;;AAIA,MAAI1a,CAAC,KAAK40N,SAAS,CAACt1N,MAApB,EAA4B;AAC1B06J,IAAAA,KAAK,GAAG26D,IAAR,EAAcj6M,IAAI,GAAG,uBAASy3C,GAAG,CAAC,CAAD,CAAH,GAASgiK,YAAlB,EAAgChiK,GAAG,CAAC,CAAD,CAAH,GAASgiK,YAAzC,EAAuD/tN,GAAvD,CAArB;AACD,GAFD,MAEO,IAAIpG,CAAJ,EAAO;AACZA,IAAAA,CAAC,GAAG40N,SAAS,CAACr+K,MAAM,GAAGq+K,SAAS,CAAC50N,CAAC,GAAG,CAAL,CAAT,CAAiB,CAAjB,CAAT,GAA+B40N,SAAS,CAAC50N,CAAD,CAAT,CAAa,CAAb,IAAkBu2C,MAAjD,GAA0Dv2C,CAAC,GAAG,CAA9D,GAAkEA,CAAnE,CAAb;AACAg6J,IAAAA,KAAK,GAAGh6J,CAAC,CAAC,CAAD,CAAT;AACA0a,IAAAA,IAAI,GAAG1a,CAAC,CAAC,CAAD,CAAR;AACD,GAJM,MAIA;AACLg6J,IAAAA,KAAK,GAAGo6D,KAAR;AACA15M,IAAAA,IAAI,GAAG3U,IAAI,CAACK,GAAL,CAAS,uBAAS+rD,GAAG,CAAC,CAAD,CAAZ,EAAiBA,GAAG,CAAC,CAAD,CAApB,EAAyB/rD,GAAzB,CAAT,EAAwC,CAAxC,CAAP;AACD;;AAED,SAAO;AACL4zJ,IAAAA,KADK;AAELt/I,IAAAA;AAFK,GAAP;AAID;;;;;;;;;AC3TD;;AAaA,SAASi3M,SAAT,CAAmB9kN,CAAnB,EAAsB;AACpB,MAAI,KAAKA,CAAC,CAAC6X,CAAP,IAAY7X,CAAC,CAAC6X,CAAF,GAAM,GAAtB,EAA2B;AACzB,QAAI4xL,IAAI,GAAG,IAAIxgI,IAAJ,CAAS,CAAC,CAAV,EAAajpE,CAAC,CAAC4qF,CAAf,EAAkB5qF,CAAC,CAACA,CAApB,EAAuBA,CAAC,CAAC+kN,CAAzB,EAA4B/kN,CAAC,CAACurF,CAA9B,EAAiCvrF,CAAC,CAAC8qE,CAAnC,EAAsC9qE,CAAC,CAACglN,CAAxC,CAAX;AACAvb,IAAAA,IAAI,CAACuX,WAAL,CAAiBhhN,CAAC,CAAC6X,CAAnB;AACA,WAAO4xL,IAAP;AACD;;AACD,SAAO,IAAIxgI,IAAJ,CAASjpE,CAAC,CAAC6X,CAAX,EAAc7X,CAAC,CAAC4qF,CAAhB,EAAmB5qF,CAAC,CAACA,CAArB,EAAwBA,CAAC,CAAC+kN,CAA1B,EAA6B/kN,CAAC,CAACurF,CAA/B,EAAkCvrF,CAAC,CAAC8qE,CAApC,EAAuC9qE,CAAC,CAACglN,CAAzC,CAAP;AACD;;AAED,SAASQ,OAAT,CAAiBxlN,CAAjB,EAAoB;AAClB,MAAI,KAAKA,CAAC,CAAC6X,CAAP,IAAY7X,CAAC,CAAC6X,CAAF,GAAM,GAAtB,EAA2B;AACzB,QAAI4xL,IAAI,GAAG,IAAIxgI,IAAJ,CAASA,IAAI,CAACo8I,GAAL,CAAS,CAAC,CAAV,EAAarlN,CAAC,CAAC4qF,CAAf,EAAkB5qF,CAAC,CAACA,CAApB,EAAuBA,CAAC,CAAC+kN,CAAzB,EAA4B/kN,CAAC,CAACurF,CAA9B,EAAiCvrF,CAAC,CAAC8qE,CAAnC,EAAsC9qE,CAAC,CAACglN,CAAxC,CAAT,CAAX;AACAvb,IAAAA,IAAI,CAACuZ,cAAL,CAAoBhjN,CAAC,CAAC6X,CAAtB;AACA,WAAO4xL,IAAP;AACD;;AACD,SAAO,IAAIxgI,IAAJ,CAASA,IAAI,CAACo8I,GAAL,CAASrlN,CAAC,CAAC6X,CAAX,EAAc7X,CAAC,CAAC4qF,CAAhB,EAAmB5qF,CAAC,CAACA,CAArB,EAAwBA,CAAC,CAAC+kN,CAA1B,EAA6B/kN,CAAC,CAACurF,CAA/B,EAAkCvrF,CAAC,CAAC8qE,CAApC,EAAuC9qE,CAAC,CAACglN,CAAzC,CAAT,CAAP;AACD;;AAED,SAASU,OAAT,CAAiB7tM,CAAjB,EAAoB+yE,CAApB,EAAuB5qF,CAAvB,EAA0B;AACxB,SAAO;AAAC6X,IAAAA,CAAC,EAAEA,CAAJ;AAAO+yE,IAAAA,CAAC,EAAEA,CAAV;AAAa5qF,IAAAA,CAAC,EAAEA,CAAhB;AAAmB+kN,IAAAA,CAAC,EAAE,CAAtB;AAAyBx5H,IAAAA,CAAC,EAAE,CAA5B;AAA+BzgB,IAAAA,CAAC,EAAE,CAAlC;AAAqCk6I,IAAAA,CAAC,EAAE;AAAxC,GAAP;AACD;;AAEc,SAASiD,YAAT,CAAsB/K,MAAtB,EAA8B;AAC3C,MAAIgL,eAAe,GAAGhL,MAAM,CAACiL,QAA7B;AAAA,MACIC,WAAW,GAAGlL,MAAM,CAACzT,IADzB;AAAA,MAEI4e,WAAW,GAAGnL,MAAM,CAACh7M,IAFzB;AAAA,MAGIomN,cAAc,GAAGpL,MAAM,CAACqL,OAH5B;AAAA,MAIIC,eAAe,GAAGtL,MAAM,CAACyC,IAJ7B;AAAA,MAKI8I,oBAAoB,GAAGvL,MAAM,CAACwL,SALlC;AAAA,MAMIC,aAAa,GAAGzL,MAAM,CAAC6D,MAN3B;AAAA,MAOI6H,kBAAkB,GAAG1L,MAAM,CAAC2L,WAPhC;AASA,MAAIC,QAAQ,GAAGC,QAAQ,CAACT,cAAD,CAAvB;AAAA,MACIU,YAAY,GAAGC,YAAY,CAACX,cAAD,CAD/B;AAAA,MAEIY,SAAS,GAAGH,QAAQ,CAACP,eAAD,CAFxB;AAAA,MAGIW,aAAa,GAAGF,YAAY,CAACT,eAAD,CAHhC;AAAA,MAIIY,cAAc,GAAGL,QAAQ,CAACN,oBAAD,CAJ7B;AAAA,MAKIY,kBAAkB,GAAGJ,YAAY,CAACR,oBAAD,CALrC;AAAA,MAMIa,OAAO,GAAGP,QAAQ,CAACJ,aAAD,CANtB;AAAA,MAOIY,WAAW,GAAGN,YAAY,CAACN,aAAD,CAP9B;AAAA,MAQIa,YAAY,GAAGT,QAAQ,CAACH,kBAAD,CAR3B;AAAA,MASIa,gBAAgB,GAAGR,YAAY,CAACL,kBAAD,CATnC;AAWA,MAAInR,OAAO,GAAG;AACZ,SAAKiS,kBADO;AAEZ,SAAKC,aAFO;AAGZ,SAAKC,gBAHO;AAIZ,SAAKC,WAJO;AAKZ,SAAK,IALO;AAMZ,SAAKC,gBANO;AAOZ,SAAKA,gBAPO;AAQZ,SAAKC,kBARO;AASZ,SAAKC,aATO;AAUZ,SAAKC,iBAVO;AAWZ,SAAKC,YAXO;AAYZ,SAAKC,YAZO;AAaZ,SAAKC,eAbO;AAcZ,SAAKC,kBAdO;AAeZ,SAAKC,iBAfO;AAgBZ,SAAKC,aAhBO;AAiBZ,SAAKC,YAjBO;AAkBZ,SAAKC,aAlBO;AAmBZ,SAAKC,mBAnBO;AAoBZ,SAAKC,0BApBO;AAqBZ,SAAKC,aArBO;AAsBZ,SAAKC,yBAtBO;AAuBZ,SAAKC,sBAvBO;AAwBZ,SAAKC,mBAxBO;AAyBZ,SAAKC,yBAzBO;AA0BZ,SAAKC,sBA1BO;AA2BZ,SAAK,IA3BO;AA4BZ,SAAK,IA5BO;AA6BZ,SAAK7a,UA7BO;AA8BZ,SAAK8a,cA9BO;AA+BZ,SAAKC,UA/BO;AAgCZ,SAAKC;AAhCO,GAAd;AAmCA,MAAIC,UAAU,GAAG;AACf,SAAKC,qBADU;AAEf,SAAKC,gBAFU;AAGf,SAAKC,mBAHU;AAIf,SAAKC,cAJU;AAKf,SAAK,IALU;AAMf,SAAKC,mBANU;AAOf,SAAKA,mBAPU;AAQf,SAAKC,qBARU;AASf,SAAKC,gBATU;AAUf,SAAKC,oBAVU;AAWf,SAAKC,eAXU;AAYf,SAAKC,eAZU;AAaf,SAAKC,kBAbU;AAcf,SAAKC,qBAdU;AAef,SAAKC,oBAfU;AAgBf,SAAKC,gBAhBU;AAiBf,SAAKC,eAjBU;AAkBf,SAAKC,gBAlBU;AAmBf,SAAK3B,mBAnBU;AAoBf,SAAKC,0BApBU;AAqBf,SAAK2B,gBArBU;AAsBf,SAAKC,4BAtBU;AAuBf,SAAKC,yBAvBU;AAwBf,SAAKC,sBAxBU;AAyBf,SAAKC,4BAzBU;AA0Bf,SAAKC,yBA1BU;AA2Bf,SAAK,IA3BU;AA4Bf,SAAK,IA5BU;AA6Bf,SAAKC,aA7BU;AA8Bf,SAAKC,iBA9BU;AA+Bf,SAAKC,aA/BU;AAgCf,SAAK1B;AAhCU,GAAjB;AAmCA,MAAI2B,MAAM,GAAG;AACX,SAAKC,iBADM;AAEX,SAAKC,YAFM;AAGX,SAAKC,eAHM;AAIX,SAAKC,UAJM;AAKX,SAAKC,mBALM;AAMX,SAAKC,eANM;AAOX,SAAKA,eAPM;AAQX,SAAKC,iBARM;AASX,SAAKC,SATM;AAUX,SAAKC,aAVM;AAWX,SAAKC,WAXM;AAYX,SAAKA,WAZM;AAaX,SAAKC,cAbM;AAcX,SAAKC,iBAdM;AAeX,SAAKC,gBAfM;AAgBX,SAAKC,YAhBM;AAiBX,SAAKC,WAjBM;AAkBX,SAAKC,YAlBM;AAmBX,SAAKC,kBAnBM;AAoBX,SAAKC,yBApBM;AAqBX,SAAKC,YArBM;AAsBX,SAAKC,wBAtBM;AAuBX,SAAKC,qBAvBM;AAwBX,SAAKC,kBAxBM;AAyBX,SAAKC,wBAzBM;AA0BX,SAAKC,qBA1BM;AA2BX,SAAKC,eA3BM;AA4BX,SAAKC,eA5BM;AA6BX,SAAKlB,SA7BM;AA8BX,SAAKC,aA9BM;AA+BX,SAAKkB,SA/BM;AAgCX,SAAKC;AAhCM,GAAb,CA3F2C,CA8H3C;;AACAlX,EAAAA,OAAO,CAACn+M,CAAR,GAAYokN,SAAS,CAAC0K,WAAD,EAAc3Q,OAAd,CAArB;AACAA,EAAAA,OAAO,CAAC1uI,CAAR,GAAY20I,SAAS,CAAC2K,WAAD,EAAc5Q,OAAd,CAArB;AACAA,EAAAA,OAAO,CAAC73M,CAAR,GAAY89M,SAAS,CAACwK,eAAD,EAAkBzQ,OAAlB,CAArB;AACA4T,EAAAA,UAAU,CAAC/xN,CAAX,GAAeokN,SAAS,CAAC0K,WAAD,EAAciD,UAAd,CAAxB;AACAA,EAAAA,UAAU,CAACtiJ,CAAX,GAAe20I,SAAS,CAAC2K,WAAD,EAAcgD,UAAd,CAAxB;AACAA,EAAAA,UAAU,CAACzrN,CAAX,GAAe89M,SAAS,CAACwK,eAAD,EAAkBmD,UAAlB,CAAxB;;AAEA,WAAS3N,SAAT,CAAmBlB,SAAnB,EAA8B/E,OAA9B,EAAuC;AACrC,WAAO,UAAShO,IAAT,EAAe;AACpB,UAAI2F,MAAM,GAAG,EAAb;AAAA,UACIj8M,CAAC,GAAG,CAAC,CADT;AAAA,UAEIiK,CAAC,GAAG,CAFR;AAAA,UAGIiE,CAAC,GAAGm7M,SAAS,CAAC/pN,MAHlB;AAAA,UAIImN,CAJJ;AAAA,UAKIsF,GALJ;AAAA,UAMIwwG,MANJ;AAQA,UAAI,EAAE+zF,IAAI,YAAYxgI,IAAlB,CAAJ,EAA6BwgI,IAAI,GAAG,IAAIxgI,IAAJ,CAAS,CAACwgI,IAAV,CAAP;;AAE7B,aAAO,EAAEt2M,CAAF,GAAMkO,CAAb,EAAgB;AACd,YAAIm7M,SAAS,CAAC50I,UAAV,CAAqBz0E,CAArB,MAA4B,EAAhC,EAAoC;AAClCi8M,UAAAA,MAAM,CAACh8M,IAAP,CAAYopN,SAAS,CAAChgN,KAAV,CAAgBY,CAAhB,EAAmBjK,CAAnB,CAAZ;AACA,cAAI,CAAC+R,GAAG,GAAG0pN,IAAI,CAAChvN,CAAC,GAAG48M,SAAS,CAAC9rK,MAAV,CAAiB,EAAEv9C,CAAnB,CAAL,CAAX,KAA2C,IAA/C,EAAqDyM,CAAC,GAAG48M,SAAS,CAAC9rK,MAAV,CAAiB,EAAEv9C,CAAnB,CAAJ,CAArD,KACK+R,GAAG,GAAGtF,CAAC,KAAK,GAAN,GAAY,GAAZ,GAAkB,GAAxB;AACL,cAAI81G,MAAM,GAAG+hG,OAAO,CAAC73M,CAAD,CAApB,EAAyBA,CAAC,GAAG81G,MAAM,CAAC+zF,IAAD,EAAOvkM,GAAP,CAAV;AACzBkqM,UAAAA,MAAM,CAACh8M,IAAP,CAAYwM,CAAZ;AACAxC,UAAAA,CAAC,GAAGjK,CAAC,GAAG,CAAR;AACD;AACF;;AAEDi8M,MAAAA,MAAM,CAACh8M,IAAP,CAAYopN,SAAS,CAAChgN,KAAV,CAAgBY,CAAhB,EAAmBjK,CAAnB,CAAZ;AACA,aAAOi8M,MAAM,CAACr4M,IAAP,CAAY,EAAZ,CAAP;AACD,KAxBD;AAyBD;;AAED,WAAS83N,QAAT,CAAkBrS,SAAlB,EAA6BsS,CAA7B,EAAgC;AAC9B,WAAO,UAAS1f,MAAT,EAAiB;AACtB,UAAIpvM,CAAC,GAAG0lN,OAAO,CAAC,IAAD,EAAOr9F,SAAP,EAAkB,CAAlB,CAAf;AAAA,UACIl1H,CAAC,GAAG47N,cAAc,CAAC/uN,CAAD,EAAIw8M,SAAJ,EAAepN,MAAM,IAAI,EAAzB,EAA6B,CAA7B,CADtB;AAAA,UAEIqV,IAFJ;AAAA,UAEUnF,GAFV;AAGA,UAAInsN,CAAC,IAAIi8M,MAAM,CAAC38M,MAAhB,EAAwB,OAAO,IAAP,CAJF,CAMtB;;AACA,UAAI,OAAOuN,CAAX,EAAc,OAAO,IAAIipE,IAAJ,CAASjpE,CAAC,CAACgvN,CAAX,CAAP;AACd,UAAI,OAAOhvN,CAAX,EAAc,OAAO,IAAIipE,IAAJ,CAASjpE,CAAC,CAACrJ,CAAF,GAAM,IAAN,IAAc,OAAOqJ,CAAP,GAAWA,CAAC,CAACglN,CAAb,GAAiB,CAA/B,CAAT,CAAP,CARQ,CAUtB;;AACA,UAAI8J,CAAC,IAAI,EAAE,OAAO9uN,CAAT,CAAT,EAAsBA,CAAC,CAAC8uN,CAAF,GAAM,CAAN,CAXA,CAatB;;AACA,UAAI,OAAO9uN,CAAX,EAAcA,CAAC,CAAC+kN,CAAF,GAAM/kN,CAAC,CAAC+kN,CAAF,GAAM,EAAN,GAAW/kN,CAAC,CAACy3B,CAAF,GAAM,EAAvB,CAdQ,CAgBtB;;AACA,UAAIz3B,CAAC,CAAC4qF,CAAF,KAAQy9B,SAAZ,EAAuBroH,CAAC,CAAC4qF,CAAF,GAAM,OAAO5qF,CAAP,GAAWA,CAAC,CAAC6qF,CAAb,GAAiB,CAAvB,CAjBD,CAmBtB;;AACA,UAAI,OAAO7qF,CAAX,EAAc;AACZ,YAAIA,CAAC,CAACivN,CAAF,GAAM,CAAN,IAAWjvN,CAAC,CAACivN,CAAF,GAAM,EAArB,EAAyB,OAAO,IAAP;AACzB,YAAI,EAAE,OAAOjvN,CAAT,CAAJ,EAAiBA,CAAC,CAACy/C,CAAF,GAAM,CAAN;;AACjB,YAAI,OAAOz/C,CAAX,EAAc;AACZykN,UAAAA,IAAI,GAAGe,OAAO,CAACE,OAAO,CAAC1lN,CAAC,CAAC6X,CAAH,EAAM,CAAN,EAAS,CAAT,CAAR,CAAd,EAAoCynM,GAAG,GAAGmF,IAAI,CAAC5C,SAAL,EAA1C;AACA4C,UAAAA,IAAI,GAAGnF,GAAG,GAAG,CAAN,IAAWA,GAAG,KAAK,CAAnB,GAAuByC,kBAAUzmN,IAAV,CAAempN,IAAf,CAAvB,GAA8C,uBAAUA,IAAV,CAArD;AACAA,UAAAA,IAAI,GAAGjD,eAAO1hN,MAAP,CAAc2kN,IAAd,EAAoB,CAACzkN,CAAC,CAACivN,CAAF,GAAM,CAAP,IAAY,CAAhC,CAAP;AACAjvN,UAAAA,CAAC,CAAC6X,CAAF,GAAM4sM,IAAI,CAAC1T,cAAL,EAAN;AACA/wM,UAAAA,CAAC,CAAC4qF,CAAF,GAAM65H,IAAI,CAAC7a,WAAL,EAAN;AACA5pM,UAAAA,CAAC,CAACA,CAAF,GAAMykN,IAAI,CAACzT,UAAL,KAAoB,CAAChxM,CAAC,CAACy/C,CAAF,GAAM,CAAP,IAAY,CAAtC;AACD,SAPD,MAOO;AACLglK,UAAAA,IAAI,GAAGK,SAAS,CAACY,OAAO,CAAC1lN,CAAC,CAAC6X,CAAH,EAAM,CAAN,EAAS,CAAT,CAAR,CAAhB,EAAsCynM,GAAG,GAAGmF,IAAI,CAAC5E,MAAL,EAA5C;AACA4E,UAAAA,IAAI,GAAGnF,GAAG,GAAG,CAAN,IAAWA,GAAG,KAAK,CAAnB,GAAuB4P,mBAAW5zN,IAAX,CAAgBmpN,IAAhB,CAAvB,GAA+C,wBAAWA,IAAX,CAAtD;AACAA,UAAAA,IAAI,GAAGE,gBAAQ7kN,MAAR,CAAe2kN,IAAf,EAAqB,CAACzkN,CAAC,CAACivN,CAAF,GAAM,CAAP,IAAY,CAAjC,CAAP;AACAjvN,UAAAA,CAAC,CAAC6X,CAAF,GAAM4sM,IAAI,CAAC3D,WAAL,EAAN;AACA9gN,UAAAA,CAAC,CAAC4qF,CAAF,GAAM65H,IAAI,CAAC/a,QAAL,EAAN;AACA1pM,UAAAA,CAAC,CAACA,CAAF,GAAMykN,IAAI,CAAChF,OAAL,KAAiB,CAACz/M,CAAC,CAACy/C,CAAF,GAAM,CAAP,IAAY,CAAnC;AACD;AACF,OAlBD,MAkBO,IAAI,OAAOz/C,CAAP,IAAY,OAAOA,CAAvB,EAA0B;AAC/B,YAAI,EAAE,OAAOA,CAAT,CAAJ,EAAiBA,CAAC,CAACy/C,CAAF,GAAM,OAAOz/C,CAAP,GAAWA,CAAC,CAACmyE,CAAF,GAAM,CAAjB,GAAqB,OAAOnyE,CAAP,GAAW,CAAX,GAAe,CAA1C;AACjBs/M,QAAAA,GAAG,GAAG,OAAOt/M,CAAP,GAAWwlN,OAAO,CAACE,OAAO,CAAC1lN,CAAC,CAAC6X,CAAH,EAAM,CAAN,EAAS,CAAT,CAAR,CAAP,CAA4BgqM,SAA5B,EAAX,GAAqDiD,SAAS,CAACY,OAAO,CAAC1lN,CAAC,CAAC6X,CAAH,EAAM,CAAN,EAAS,CAAT,CAAR,CAAT,CAA8BgoM,MAA9B,EAA3D;AACA7/M,QAAAA,CAAC,CAAC4qF,CAAF,GAAM,CAAN;AACA5qF,QAAAA,CAAC,CAACA,CAAF,GAAM,OAAOA,CAAP,GAAW,CAACA,CAAC,CAACy/C,CAAF,GAAM,CAAP,IAAY,CAAZ,GAAgBz/C,CAAC,CAACmvN,CAAF,GAAM,CAAtB,GAA0B,CAAC7P,GAAG,GAAG,CAAP,IAAY,CAAjD,GAAqDt/M,CAAC,CAACy/C,CAAF,GAAMz/C,CAAC,CAACovN,CAAF,GAAM,CAAZ,GAAgB,CAAC9P,GAAG,GAAG,CAAP,IAAY,CAAvF;AACD,OA3CqB,CA6CtB;AACA;;;AACA,UAAI,OAAOt/M,CAAX,EAAc;AACZA,QAAAA,CAAC,CAAC+kN,CAAF,IAAO/kN,CAAC,CAAC8uN,CAAF,GAAM,GAAN,GAAY,CAAnB;AACA9uN,QAAAA,CAAC,CAACurF,CAAF,IAAOvrF,CAAC,CAAC8uN,CAAF,GAAM,GAAb;AACA,eAAOtJ,OAAO,CAACxlN,CAAD,CAAd;AACD,OAnDqB,CAqDtB;;;AACA,aAAO8kN,SAAS,CAAC9kN,CAAD,CAAhB;AACD,KAvDD;AAwDD;;AAED,WAAS+uN,cAAT,CAAwB/uN,CAAxB,EAA2Bw8M,SAA3B,EAAsCpN,MAAtC,EAA8ChyM,CAA9C,EAAiD;AAC/C,QAAIjK,CAAC,GAAG,CAAR;AAAA,QACIkO,CAAC,GAAGm7M,SAAS,CAAC/pN,MADlB;AAAA,QAEIm4F,CAAC,GAAGwkH,MAAM,CAAC38M,MAFf;AAAA,QAGImN,CAHJ;AAAA,QAIIy1C,KAJJ;;AAMA,WAAOliD,CAAC,GAAGkO,CAAX,EAAc;AACZ,UAAIjE,CAAC,IAAIwtF,CAAT,EAAY,OAAO,CAAC,CAAR;AACZhrF,MAAAA,CAAC,GAAG48M,SAAS,CAAC50I,UAAV,CAAqBz0E,CAAC,EAAtB,CAAJ;;AACA,UAAIyM,CAAC,KAAK,EAAV,EAAc;AACZA,QAAAA,CAAC,GAAG48M,SAAS,CAAC9rK,MAAV,CAAiBv9C,CAAC,EAAlB,CAAJ;AACAkiD,QAAAA,KAAK,GAAG03K,MAAM,CAACntN,CAAC,IAAIgvN,IAAL,GAAYpS,SAAS,CAAC9rK,MAAV,CAAiBv9C,CAAC,EAAlB,CAAZ,GAAoCyM,CAArC,CAAd;AACA,YAAI,CAACy1C,KAAD,IAAW,CAACj4C,CAAC,GAAGi4C,KAAK,CAACr1C,CAAD,EAAIovM,MAAJ,EAAYhyM,CAAZ,CAAV,IAA4B,CAA3C,EAA+C,OAAO,CAAC,CAAR;AAChD,OAJD,MAIO,IAAIwC,CAAC,IAAIwvM,MAAM,CAACxnI,UAAP,CAAkBxqE,CAAC,EAAnB,CAAT,EAAiC;AACtC,eAAO,CAAC,CAAR;AACD;AACF;;AAED,WAAOA,CAAP;AACD;;AAED,WAAS0wN,WAAT,CAAqB9tN,CAArB,EAAwBovM,MAAxB,EAAgCj8M,CAAhC,EAAmC;AACjC,QAAIkO,CAAC,GAAGynN,QAAQ,CAACxhM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAd,CAAR;AACA,WAAOkO,CAAC,IAAIrB,CAAC,CAACy3B,CAAF,GAAMuxL,YAAY,CAAC/yN,GAAb,CAAiBoL,CAAC,CAAC,CAAD,CAAD,CAAK/J,WAAL,EAAjB,CAAN,EAA4CnE,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAzD,IAAmE,CAAC,CAA5E;AACD;;AAED,WAASu6N,iBAAT,CAA2BhtN,CAA3B,EAA8BovM,MAA9B,EAAsCj8M,CAAtC,EAAyC;AACvC,QAAIkO,CAAC,GAAG+nN,cAAc,CAAC9hM,IAAf,CAAoB8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAApB,CAAR;AACA,WAAOkO,CAAC,IAAIrB,CAAC,CAACy/C,CAAF,GAAM4pK,kBAAkB,CAACpzN,GAAnB,CAAuBoL,CAAC,CAAC,CAAD,CAAD,CAAK/J,WAAL,EAAvB,CAAN,EAAkDnE,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA/D,IAAyE,CAAC,CAAlF;AACD;;AAED,WAASw6N,YAAT,CAAsBjtN,CAAtB,EAAyBovM,MAAzB,EAAiCj8M,CAAjC,EAAoC;AAClC,QAAIkO,CAAC,GAAG6nN,SAAS,CAAC5hM,IAAV,CAAe8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAf,CAAR;AACA,WAAOkO,CAAC,IAAIrB,CAAC,CAACy/C,CAAF,GAAM0pK,aAAa,CAAClzN,GAAd,CAAkBoL,CAAC,CAAC,CAAD,CAAD,CAAK/J,WAAL,EAAlB,CAAN,EAA6CnE,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1D,IAAoE,CAAC,CAA7E;AACD;;AAED,WAASy6N,eAAT,CAAyBltN,CAAzB,EAA4BovM,MAA5B,EAAoCj8M,CAApC,EAAuC;AACrC,QAAIkO,CAAC,GAAGmoN,YAAY,CAACliM,IAAb,CAAkB8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAlB,CAAR;AACA,WAAOkO,CAAC,IAAIrB,CAAC,CAAC4qF,CAAF,GAAM6+H,gBAAgB,CAACxzN,GAAjB,CAAqBoL,CAAC,CAAC,CAAD,CAAD,CAAK/J,WAAL,EAArB,CAAN,EAAgDnE,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA7D,IAAuE,CAAC,CAAhF;AACD;;AAED,WAAS06N,UAAT,CAAoBntN,CAApB,EAAuBovM,MAAvB,EAA+Bj8M,CAA/B,EAAkC;AAChC,QAAIkO,CAAC,GAAGioN,OAAO,CAAChiM,IAAR,CAAa8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAb,CAAR;AACA,WAAOkO,CAAC,IAAIrB,CAAC,CAAC4qF,CAAF,GAAM2+H,WAAW,CAACtzN,GAAZ,CAAgBoL,CAAC,CAAC,CAAD,CAAD,CAAK/J,WAAL,EAAhB,CAAN,EAA2CnE,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAxD,IAAkE,CAAC,CAA3E;AACD;;AAED,WAAS26N,mBAAT,CAA6BptN,CAA7B,EAAgCovM,MAAhC,EAAwCj8M,CAAxC,EAA2C;AACzC,WAAO47N,cAAc,CAAC/uN,CAAD,EAAIkoN,eAAJ,EAAqB9Y,MAArB,EAA6Bj8M,CAA7B,CAArB;AACD;;AAED,WAASq7N,eAAT,CAAyBxuN,CAAzB,EAA4BovM,MAA5B,EAAoCj8M,CAApC,EAAuC;AACrC,WAAO47N,cAAc,CAAC/uN,CAAD,EAAIooN,WAAJ,EAAiBhZ,MAAjB,EAAyBj8M,CAAzB,CAArB;AACD;;AAED,WAASs7N,eAAT,CAAyBzuN,CAAzB,EAA4BovM,MAA5B,EAAoCj8M,CAApC,EAAuC;AACrC,WAAO47N,cAAc,CAAC/uN,CAAD,EAAIqoN,WAAJ,EAAiBjZ,MAAjB,EAAyBj8M,CAAzB,CAArB;AACD;;AAED,WAASu2N,kBAAT,CAA4B1pN,CAA5B,EAA+B;AAC7B,WAAOyoN,oBAAoB,CAACzoN,CAAC,CAAC6/M,MAAF,EAAD,CAA3B;AACD;;AAED,WAAS8J,aAAT,CAAuB3pN,CAAvB,EAA0B;AACxB,WAAOwoN,eAAe,CAACxoN,CAAC,CAAC6/M,MAAF,EAAD,CAAtB;AACD;;AAED,WAAS+J,gBAAT,CAA0B5pN,CAA1B,EAA6B;AAC3B,WAAO4oN,kBAAkB,CAAC5oN,CAAC,CAAC0pM,QAAF,EAAD,CAAzB;AACD;;AAED,WAASmgB,WAAT,CAAqB7pN,CAArB,EAAwB;AACtB,WAAO2oN,aAAa,CAAC3oN,CAAC,CAAC0pM,QAAF,EAAD,CAApB;AACD;;AAED,WAAS8gB,YAAT,CAAsBxqN,CAAtB,EAAyB;AACvB,WAAOsoN,cAAc,CAAC,EAAEtoN,CAAC,CAAC+yM,QAAF,MAAgB,EAAlB,CAAD,CAArB;AACD;;AAED,WAAS0X,aAAT,CAAuBzqN,CAAvB,EAA0B;AACxB,WAAO,IAAI,CAAC,EAAEA,CAAC,CAAC0pM,QAAF,KAAe,CAAjB,CAAZ;AACD;;AAED,WAAS4hB,qBAAT,CAA+BtrN,CAA/B,EAAkC;AAChC,WAAOyoN,oBAAoB,CAACzoN,CAAC,CAAC6hN,SAAF,EAAD,CAA3B;AACD;;AAED,WAAS0J,gBAAT,CAA0BvrN,CAA1B,EAA6B;AAC3B,WAAOwoN,eAAe,CAACxoN,CAAC,CAAC6hN,SAAF,EAAD,CAAtB;AACD;;AAED,WAAS2J,mBAAT,CAA6BxrN,CAA7B,EAAgC;AAC9B,WAAO4oN,kBAAkB,CAAC5oN,CAAC,CAAC4pM,WAAF,EAAD,CAAzB;AACD;;AAED,WAAS6hB,cAAT,CAAwBzrN,CAAxB,EAA2B;AACzB,WAAO2oN,aAAa,CAAC3oN,CAAC,CAAC4pM,WAAF,EAAD,CAApB;AACD;;AAED,WAASwiB,eAAT,CAAyBpsN,CAAzB,EAA4B;AAC1B,WAAOsoN,cAAc,CAAC,EAAEtoN,CAAC,CAACwwM,WAAF,MAAmB,EAArB,CAAD,CAArB;AACD;;AAED,WAAS6b,gBAAT,CAA0BrsN,CAA1B,EAA6B;AAC3B,WAAO,IAAI,CAAC,EAAEA,CAAC,CAAC4pM,WAAF,KAAkB,CAApB,CAAZ;AACD;;AAED,SAAO;AACLl0F,IAAAA,MAAM,EAAE,UAAS8mG,SAAT,EAAoB;AAC1B,UAAI19M,CAAC,GAAG4+M,SAAS,CAAClB,SAAS,IAAI,EAAd,EAAkB/E,OAAlB,CAAjB;;AACA34M,MAAAA,CAAC,CAACgE,QAAF,GAAa,YAAW;AAAE,eAAO05M,SAAP;AAAmB,OAA7C;;AACA,aAAO19M,CAAP;AACD,KALI;AAMLu2C,IAAAA,KAAK,EAAE,UAASmnK,SAAT,EAAoB;AACzB,UAAI/kL,CAAC,GAAGo3L,QAAQ,CAACrS,SAAS,IAAI,EAAd,EAAkB,KAAlB,CAAhB;;AACA/kL,MAAAA,CAAC,CAAC30B,QAAF,GAAa,YAAW;AAAE,eAAO05M,SAAP;AAAmB,OAA7C;;AACA,aAAO/kL,CAAP;AACD,KAVI;AAWL43L,IAAAA,SAAS,EAAE,UAAS7S,SAAT,EAAoB;AAC7B,UAAI19M,CAAC,GAAG4+M,SAAS,CAAClB,SAAS,IAAI,EAAd,EAAkB6O,UAAlB,CAAjB;;AACAvsN,MAAAA,CAAC,CAACgE,QAAF,GAAa,YAAW;AAAE,eAAO05M,SAAP;AAAmB,OAA7C;;AACA,aAAO19M,CAAP;AACD,KAfI;AAgBLwwN,IAAAA,QAAQ,EAAE,UAAS9S,SAAT,EAAoB;AAC5B,UAAI/kL,CAAC,GAAGo3L,QAAQ,CAACrS,SAAS,IAAI,EAAd,EAAkB,IAAlB,CAAhB;;AACA/kL,MAAAA,CAAC,CAAC30B,QAAF,GAAa,YAAW;AAAE,eAAO05M,SAAP;AAAmB,OAA7C;;AACA,aAAO/kL,CAAP;AACD;AApBI,GAAP;AAsBD;;AAED,IAAIm3L,IAAI,GAAG;AAAC,OAAK,EAAN;AAAU,OAAK,GAAf;AAAoB,OAAK;AAAzB,CAAX;AAAA,IACIW,QAAQ,GAAG,SADf;AAAA,IAC0B;AACtBC,SAAS,GAAG,IAFhB;AAAA,IAGIC,SAAS,GAAG,qBAHhB;;AAKA,SAASvqN,GAAT,CAAa/O,KAAb,EAAoBwN,IAApB,EAA0BtI,KAA1B,EAAiC;AAC/B,MAAIuQ,IAAI,GAAGzV,KAAK,GAAG,CAAR,GAAY,GAAZ,GAAkB,EAA7B;AAAA,MACIi5M,MAAM,GAAG,CAACxjM,IAAI,GAAG,CAACzV,KAAJ,GAAYA,KAAjB,IAA0B,EADvC;AAAA,MAEI1D,MAAM,GAAG28M,MAAM,CAAC38M,MAFpB;AAGA,SAAOmZ,IAAI,IAAInZ,MAAM,GAAG4I,KAAT,GAAiB,IAAIpI,KAAJ,CAAUoI,KAAK,GAAG5I,MAAR,GAAiB,CAA3B,EAA8BsE,IAA9B,CAAmC4M,IAAnC,IAA2CyrM,MAA5D,GAAqEA,MAAzE,CAAX;AACD;;AAED,SAASsgB,OAAT,CAAiB/4N,CAAjB,EAAoB;AAClB,SAAOA,CAAC,CAACD,OAAF,CAAU+4N,SAAV,EAAqB,MAArB,CAAP;AACD;;AAED,SAAS1G,QAAT,CAAkB/pG,KAAlB,EAAyB;AACvB,SAAO,IAAI8O,MAAJ,CAAW,SAAS9O,KAAK,CAACpiH,GAAN,CAAU8yN,OAAV,EAAmB34N,IAAnB,CAAwB,GAAxB,CAAT,GAAwC,GAAnD,EAAwD,GAAxD,CAAP;AACD;;AAED,SAASkyN,YAAT,CAAsBjqG,KAAtB,EAA6B;AAC3B,SAAO,IAAIrnH,GAAJ,CAAQqnH,KAAK,CAACpiH,GAAN,CAAU,CAAClI,IAAD,EAAOvB,CAAP,KAAa,CAACuB,IAAI,CAAC4C,WAAL,EAAD,EAAqBnE,CAArB,CAAvB,CAAR,CAAP;AACD;;AAED,SAASm7N,wBAAT,CAAkCtuN,CAAlC,EAAqCovM,MAArC,EAA6Cj8M,CAA7C,EAAgD;AAC9C,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACy/C,CAAF,GAAM,CAACp+C,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS07N,wBAAT,CAAkCnuN,CAAlC,EAAqCovM,MAArC,EAA6Cj8M,CAA7C,EAAgD;AAC9C,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACmyE,CAAF,GAAM,CAAC9wE,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS27N,qBAAT,CAA+BpuN,CAA/B,EAAkCovM,MAAlC,EAA0Cj8M,CAA1C,EAA6C;AAC3C,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACovN,CAAF,GAAM,CAAC/tN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS47N,kBAAT,CAA4BruN,CAA5B,EAA+BovM,MAA/B,EAAuCj8M,CAAvC,EAA0C;AACxC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACivN,CAAF,GAAM,CAAC5tN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS87N,qBAAT,CAA+BvuN,CAA/B,EAAkCovM,MAAlC,EAA0Cj8M,CAA1C,EAA6C;AAC3C,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACmvN,CAAF,GAAM,CAAC9tN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS+6N,aAAT,CAAuBxtN,CAAvB,EAA0BovM,MAA1B,EAAkCj8M,CAAlC,EAAqC;AACnC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC6X,CAAF,GAAM,CAACxW,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS86N,SAAT,CAAmBvtN,CAAnB,EAAsBovM,MAAtB,EAA8Bj8M,CAA9B,EAAiC;AAC/B,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC6X,CAAF,GAAM,CAACxW,CAAC,CAAC,CAAD,CAAF,IAAS,CAACA,CAAC,CAAC,CAAD,CAAF,GAAQ,EAAR,GAAa,IAAb,GAAoB,IAA7B,CAAN,EAA0ClO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAvD,IAAiE,CAAC,CAA1E;AACD;;AAED,SAASi8N,SAAT,CAAmB1uN,CAAnB,EAAsBovM,MAAtB,EAA8Bj8M,CAA9B,EAAiC;AAC/B,MAAIkO,CAAC,GAAG,+BAA+BimB,IAA/B,CAAoC8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAApC,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC8uN,CAAF,GAAMztN,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,GAAW,EAAEA,CAAC,CAAC,CAAD,CAAD,IAAQA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAhB,CAAF,CAAjB,EAA2ClO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAxD,IAAkE,CAAC,CAA3E;AACD;;AAED,SAASs7N,YAAT,CAAsB/tN,CAAtB,EAAyBovM,MAAzB,EAAiCj8M,CAAjC,EAAoC;AAClC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC6qF,CAAF,GAAMxpF,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,GAAW,CAAjB,EAAoBlO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAjC,IAA2C,CAAC,CAApD;AACD;;AAED,SAASm7N,gBAAT,CAA0B5tN,CAA1B,EAA6BovM,MAA7B,EAAqCj8M,CAArC,EAAwC;AACtC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC4qF,CAAF,GAAMvpF,CAAC,CAAC,CAAD,CAAD,GAAO,CAAb,EAAgBlO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA7B,IAAuC,CAAC,CAAhD;AACD;;AAED,SAAS46N,eAAT,CAAyBrtN,CAAzB,EAA4BovM,MAA5B,EAAoCj8M,CAApC,EAAuC;AACrC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACA,CAAF,GAAM,CAACqB,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASi7N,cAAT,CAAwB1tN,CAAxB,EAA2BovM,MAA3B,EAAmCj8M,CAAnC,EAAsC;AACpC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC4qF,CAAF,GAAM,CAAN,EAAS5qF,CAAC,CAACA,CAAF,GAAM,CAACqB,CAAC,CAAC,CAAD,CAAjB,EAAsBlO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAnC,IAA6C,CAAC,CAAtD;AACD;;AAED,SAASg7N,WAAT,CAAqBztN,CAArB,EAAwBovM,MAAxB,EAAgCj8M,CAAhC,EAAmC;AACjC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC+kN,CAAF,GAAM,CAAC1jN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASo7N,YAAT,CAAsB7tN,CAAtB,EAAyBovM,MAAzB,EAAiCj8M,CAAjC,EAAoC;AAClC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACurF,CAAF,GAAM,CAAClqF,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASy7N,YAAT,CAAsBluN,CAAtB,EAAyBovM,MAAzB,EAAiCj8M,CAAjC,EAAoC;AAClC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAAC8qE,CAAF,GAAM,CAACzpE,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASk7N,iBAAT,CAA2B3tN,CAA3B,EAA8BovM,MAA9B,EAAsCj8M,CAAtC,EAAyC;AACvC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACglN,CAAF,GAAM,CAAC3jN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAAS66N,iBAAT,CAA2BttN,CAA3B,EAA8BovM,MAA9B,EAAsCj8M,CAAtC,EAAyC;AACvC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACglN,CAAF,GAAM9rN,IAAI,CAAC+H,KAAL,CAAWI,CAAC,CAAC,CAAD,CAAD,GAAO,IAAlB,CAAN,EAA+BlO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA5C,IAAsD,CAAC,CAA/D;AACD;;AAED,SAASk8N,mBAAT,CAA6B3uN,CAA7B,EAAgCovM,MAAhC,EAAwCj8M,CAAxC,EAA2C;AACzC,MAAIkO,CAAC,GAAGmuN,SAAS,CAACloM,IAAV,CAAe8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,EAAgBA,CAAC,GAAG,CAApB,CAAf,CAAR;AACA,SAAOkO,CAAC,GAAGlO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAAZ,GAAqB,CAAC,CAA9B;AACD;;AAED,SAASu7N,kBAAT,CAA4BhuN,CAA5B,EAA+BovM,MAA/B,EAAuCj8M,CAAvC,EAA0C;AACxC,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACgvN,CAAF,GAAM,CAAC3tN,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASw7N,yBAAT,CAAmCjuN,CAAnC,EAAsCovM,MAAtC,EAA8Cj8M,CAA9C,EAAiD;AAC/C,MAAIkO,CAAC,GAAGkuN,QAAQ,CAACjoM,IAAT,CAAc8nL,MAAM,CAAC5yM,KAAP,CAAarJ,CAAb,CAAd,CAAR;AACA,SAAOkO,CAAC,IAAIrB,CAAC,CAACrJ,CAAF,GAAM,CAAC0K,CAAC,CAAC,CAAD,CAAR,EAAalO,CAAC,GAAGkO,CAAC,CAAC,CAAD,CAAD,CAAK5O,MAA1B,IAAoC,CAAC,CAA7C;AACD;;AAED,SAASq3N,gBAAT,CAA0B9pN,CAA1B,EAA6By3B,CAA7B,EAAgC;AAC9B,SAAOvyB,GAAG,CAAClF,CAAC,CAACy/M,OAAF,EAAD,EAAchoL,CAAd,EAAiB,CAAjB,CAAV;AACD;;AAED,SAASyyL,YAAT,CAAsBlqN,CAAtB,EAAyBy3B,CAAzB,EAA4B;AAC1B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC+yM,QAAF,EAAD,EAAet7K,CAAf,EAAkB,CAAlB,CAAV;AACD;;AAED,SAAS0yL,YAAT,CAAsBnqN,CAAtB,EAAyBy3B,CAAzB,EAA4B;AAC1B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC+yM,QAAF,KAAe,EAAf,IAAqB,EAAtB,EAA0Bt7K,CAA1B,EAA6B,CAA7B,CAAV;AACD;;AAED,SAAS2yL,eAAT,CAAyBpqN,CAAzB,EAA4By3B,CAA5B,EAA+B;AAC7B,SAAOvyB,GAAG,CAAC,IAAIy/M,gBAAQz5I,KAAR,CAAc,sBAASlrE,CAAT,CAAd,EAA2BA,CAA3B,CAAL,EAAoCy3B,CAApC,EAAuC,CAAvC,CAAV;AACD;;AAED,SAAS4yL,kBAAT,CAA4BrqN,CAA5B,EAA+By3B,CAA/B,EAAkC;AAChC,SAAOvyB,GAAG,CAAClF,CAAC,CAACi/M,eAAF,EAAD,EAAsBxnL,CAAtB,EAAyB,CAAzB,CAAV;AACD;;AAED,SAASsyL,kBAAT,CAA4B/pN,CAA5B,EAA+By3B,CAA/B,EAAkC;AAChC,SAAO4yL,kBAAkB,CAACrqN,CAAD,EAAIy3B,CAAJ,CAAlB,GAA2B,KAAlC;AACD;;AAED,SAAS6yL,iBAAT,CAA2BtqN,CAA3B,EAA8By3B,CAA9B,EAAiC;AAC/B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC0pM,QAAF,KAAe,CAAhB,EAAmBjyK,CAAnB,EAAsB,CAAtB,CAAV;AACD;;AAED,SAAS8yL,aAAT,CAAuBvqN,CAAvB,EAA0By3B,CAA1B,EAA6B;AAC3B,SAAOvyB,GAAG,CAAClF,CAAC,CAACo/M,UAAF,EAAD,EAAiB3nL,CAAjB,EAAoB,CAApB,CAAV;AACD;;AAED,SAASmzL,aAAT,CAAuB5qN,CAAvB,EAA0By3B,CAA1B,EAA6B;AAC3B,SAAOvyB,GAAG,CAAClF,CAAC,CAACm/M,UAAF,EAAD,EAAiB1nL,CAAjB,EAAoB,CAApB,CAAV;AACD;;AAED,SAASozL,yBAAT,CAAmC7qN,CAAnC,EAAsC;AACpC,MAAIs/M,GAAG,GAAGt/M,CAAC,CAAC6/M,MAAF,EAAV;AACA,SAAOP,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBA,GAAvB;AACD;;AAED,SAASwL,sBAAT,CAAgC9qN,CAAhC,EAAmCy3B,CAAnC,EAAsC;AACpC,SAAOvyB,GAAG,CAACyqN,mBAAWzkJ,KAAX,CAAiB,sBAASlrE,CAAT,IAAc,CAA/B,EAAkCA,CAAlC,CAAD,EAAuCy3B,CAAvC,EAA0C,CAA1C,CAAV;AACD;;AAED,SAASm4L,IAAT,CAAc5vN,CAAd,EAAiB;AACf,MAAIs/M,GAAG,GAAGt/M,CAAC,CAAC6/M,MAAF,EAAV;AACA,SAAQP,GAAG,IAAI,CAAP,IAAYA,GAAG,KAAK,CAArB,GAA0B,0BAAat/M,CAAb,CAA1B,GAA4C6vN,qBAAav0N,IAAb,CAAkB0E,CAAlB,CAAnD;AACD;;AAED,SAAS+qN,mBAAT,CAA6B/qN,CAA7B,EAAgCy3B,CAAhC,EAAmC;AACjCz3B,EAAAA,CAAC,GAAG4vN,IAAI,CAAC5vN,CAAD,CAAR;AACA,SAAOkF,GAAG,CAAC2qN,qBAAa3kJ,KAAb,CAAmB,sBAASlrE,CAAT,CAAnB,EAAgCA,CAAhC,KAAsC,sBAASA,CAAT,EAAY6/M,MAAZ,OAAyB,CAA/D,CAAD,EAAoEpoL,CAApE,EAAuE,CAAvE,CAAV;AACD;;AAED,SAASuzL,yBAAT,CAAmChrN,CAAnC,EAAsC;AACpC,SAAOA,CAAC,CAAC6/M,MAAF,EAAP;AACD;;AAED,SAASoL,sBAAT,CAAgCjrN,CAAhC,EAAmCy3B,CAAnC,EAAsC;AACpC,SAAOvyB,GAAG,CAACgqN,mBAAWhkJ,KAAX,CAAiB,sBAASlrE,CAAT,IAAc,CAA/B,EAAkCA,CAAlC,CAAD,EAAuCy3B,CAAvC,EAA0C,CAA1C,CAAV;AACD;;AAED,SAAS24K,UAAT,CAAoBpwM,CAApB,EAAuBy3B,CAAvB,EAA0B;AACxB,SAAOvyB,GAAG,CAAClF,CAAC,CAAC8gN,WAAF,KAAkB,GAAnB,EAAwBrpL,CAAxB,EAA2B,CAA3B,CAAV;AACD;;AAED,SAASuyL,aAAT,CAAuBhqN,CAAvB,EAA0By3B,CAA1B,EAA6B;AAC3Bz3B,EAAAA,CAAC,GAAG4vN,IAAI,CAAC5vN,CAAD,CAAR;AACA,SAAOkF,GAAG,CAAClF,CAAC,CAAC8gN,WAAF,KAAkB,GAAnB,EAAwBrpL,CAAxB,EAA2B,CAA3B,CAAV;AACD;;AAED,SAASyzL,cAAT,CAAwBlrN,CAAxB,EAA2By3B,CAA3B,EAA8B;AAC5B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC8gN,WAAF,KAAkB,KAAnB,EAA0BrpL,CAA1B,EAA6B,CAA7B,CAAV;AACD;;AAED,SAASwyL,iBAAT,CAA2BjqN,CAA3B,EAA8By3B,CAA9B,EAAiC;AAC/B,MAAI6nL,GAAG,GAAGt/M,CAAC,CAAC6/M,MAAF,EAAV;AACA7/M,EAAAA,CAAC,GAAIs/M,GAAG,IAAI,CAAP,IAAYA,GAAG,KAAK,CAArB,GAA0B,0BAAat/M,CAAb,CAA1B,GAA4C6vN,qBAAav0N,IAAb,CAAkB0E,CAAlB,CAAhD;AACA,SAAOkF,GAAG,CAAClF,CAAC,CAAC8gN,WAAF,KAAkB,KAAnB,EAA0BrpL,CAA1B,EAA6B,CAA7B,CAAV;AACD;;AAED,SAAS0zL,UAAT,CAAoBnrN,CAApB,EAAuB;AACrB,MAAI4oE,CAAC,GAAG5oE,CAAC,CAAC0/M,iBAAF,EAAR;AACA,SAAO,CAAC92I,CAAC,GAAG,CAAJ,GAAQ,GAAR,IAAeA,CAAC,IAAI,CAAC,CAAN,EAAS,GAAxB,CAAD,IACD1jE,GAAG,CAAC0jE,CAAC,GAAG,EAAJ,GAAS,CAAV,EAAa,GAAb,EAAkB,CAAlB,CADF,GAED1jE,GAAG,CAAC0jE,CAAC,GAAG,EAAL,EAAS,GAAT,EAAc,CAAd,CAFT;AAGD;;AAED,SAAS8iJ,mBAAT,CAA6B1rN,CAA7B,EAAgCy3B,CAAhC,EAAmC;AACjC,SAAOvyB,GAAG,CAAClF,CAAC,CAACgxM,UAAF,EAAD,EAAiBv5K,CAAjB,EAAoB,CAApB,CAAV;AACD;;AAED,SAASq0L,eAAT,CAAyB9rN,CAAzB,EAA4By3B,CAA5B,EAA+B;AAC7B,SAAOvyB,GAAG,CAAClF,CAAC,CAACwwM,WAAF,EAAD,EAAkB/4K,CAAlB,EAAqB,CAArB,CAAV;AACD;;AAED,SAASs0L,eAAT,CAAyB/rN,CAAzB,EAA4By3B,CAA5B,EAA+B;AAC7B,SAAOvyB,GAAG,CAAClF,CAAC,CAACwwM,WAAF,KAAkB,EAAlB,IAAwB,EAAzB,EAA6B/4K,CAA7B,EAAgC,CAAhC,CAAV;AACD;;AAED,SAASu0L,kBAAT,CAA4BhsN,CAA5B,EAA+By3B,CAA/B,EAAkC;AAChC,SAAOvyB,GAAG,CAAC,IAAIs8M,eAAOt2I,KAAP,CAAa,qBAAQlrE,CAAR,CAAb,EAAyBA,CAAzB,CAAL,EAAkCy3B,CAAlC,EAAqC,CAArC,CAAV;AACD;;AAED,SAASw0L,qBAAT,CAA+BjsN,CAA/B,EAAkCy3B,CAAlC,EAAqC;AACnC,SAAOvyB,GAAG,CAAClF,CAAC,CAAC8wM,kBAAF,EAAD,EAAyBr5K,CAAzB,EAA4B,CAA5B,CAAV;AACD;;AAED,SAASk0L,qBAAT,CAA+B3rN,CAA/B,EAAkCy3B,CAAlC,EAAqC;AACnC,SAAOw0L,qBAAqB,CAACjsN,CAAD,EAAIy3B,CAAJ,CAArB,GAA8B,KAArC;AACD;;AAED,SAASy0L,oBAAT,CAA8BlsN,CAA9B,EAAiCy3B,CAAjC,EAAoC;AAClC,SAAOvyB,GAAG,CAAClF,CAAC,CAAC4pM,WAAF,KAAkB,CAAnB,EAAsBnyK,CAAtB,EAAyB,CAAzB,CAAV;AACD;;AAED,SAAS00L,gBAAT,CAA0BnsN,CAA1B,EAA6By3B,CAA7B,EAAgC;AAC9B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC0wM,aAAF,EAAD,EAAoBj5K,CAApB,EAAuB,CAAvB,CAAV;AACD;;AAED,SAAS60L,gBAAT,CAA0BtsN,CAA1B,EAA6By3B,CAA7B,EAAgC;AAC9B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC4wM,aAAF,EAAD,EAAoBn5K,CAApB,EAAuB,CAAvB,CAAV;AACD;;AAED,SAAS80L,4BAAT,CAAsCvsN,CAAtC,EAAyC;AACvC,MAAI8vN,GAAG,GAAG9vN,CAAC,CAAC6hN,SAAF,EAAV;AACA,SAAOiO,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBA,GAAvB;AACD;;AAED,SAAStD,yBAAT,CAAmCxsN,CAAnC,EAAsCy3B,CAAtC,EAAyC;AACvC,SAAOvyB,GAAG,CAAC48M,kBAAU52I,KAAV,CAAgB,qBAAQlrE,CAAR,IAAa,CAA7B,EAAgCA,CAAhC,CAAD,EAAqCy3B,CAArC,EAAwC,CAAxC,CAAV;AACD;;AAED,SAASs4L,OAAT,CAAiB/vN,CAAjB,EAAoB;AAClB,MAAIs/M,GAAG,GAAGt/M,CAAC,CAAC6hN,SAAF,EAAV;AACA,SAAQvC,GAAG,IAAI,CAAP,IAAYA,GAAG,KAAK,CAArB,GAA0B,yBAAYt/M,CAAZ,CAA1B,GAA2CkiN,oBAAY5mN,IAAZ,CAAiB0E,CAAjB,CAAlD;AACD;;AAED,SAASysN,sBAAT,CAAgCzsN,CAAhC,EAAmCy3B,CAAnC,EAAsC;AACpCz3B,EAAAA,CAAC,GAAG+vN,OAAO,CAAC/vN,CAAD,CAAX;AACA,SAAOkF,GAAG,CAACg9M,oBAAYh3I,KAAZ,CAAkB,qBAAQlrE,CAAR,CAAlB,EAA8BA,CAA9B,KAAoC,qBAAQA,CAAR,EAAW6hN,SAAX,OAA2B,CAA/D,CAAD,EAAoEpqL,CAApE,EAAuE,CAAvE,CAAV;AACD;;AAED,SAASi1L,4BAAT,CAAsC1sN,CAAtC,EAAyC;AACvC,SAAOA,CAAC,CAAC6hN,SAAF,EAAP;AACD;;AAED,SAAS8K,yBAAT,CAAmC3sN,CAAnC,EAAsCy3B,CAAtC,EAAyC;AACvC,SAAOvyB,GAAG,CAAC68M,kBAAU72I,KAAV,CAAgB,qBAAQlrE,CAAR,IAAa,CAA7B,EAAgCA,CAAhC,CAAD,EAAqCy3B,CAArC,EAAwC,CAAxC,CAAV;AACD;;AAED,SAASm1L,aAAT,CAAuB5sN,CAAvB,EAA0By3B,CAA1B,EAA6B;AAC3B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC+wM,cAAF,KAAqB,GAAtB,EAA2Bt5K,CAA3B,EAA8B,CAA9B,CAAV;AACD;;AAED,SAASm0L,gBAAT,CAA0B5rN,CAA1B,EAA6By3B,CAA7B,EAAgC;AAC9Bz3B,EAAAA,CAAC,GAAG+vN,OAAO,CAAC/vN,CAAD,CAAX;AACA,SAAOkF,GAAG,CAAClF,CAAC,CAAC+wM,cAAF,KAAqB,GAAtB,EAA2Bt5K,CAA3B,EAA8B,CAA9B,CAAV;AACD;;AAED,SAASo1L,iBAAT,CAA2B7sN,CAA3B,EAA8By3B,CAA9B,EAAiC;AAC/B,SAAOvyB,GAAG,CAAClF,CAAC,CAAC+wM,cAAF,KAAqB,KAAtB,EAA6Bt5K,CAA7B,EAAgC,CAAhC,CAAV;AACD;;AAED,SAASo0L,oBAAT,CAA8B7rN,CAA9B,EAAiCy3B,CAAjC,EAAoC;AAClC,MAAI6nL,GAAG,GAAGt/M,CAAC,CAAC6hN,SAAF,EAAV;AACA7hN,EAAAA,CAAC,GAAIs/M,GAAG,IAAI,CAAP,IAAYA,GAAG,KAAK,CAArB,GAA0B,yBAAYt/M,CAAZ,CAA1B,GAA2CkiN,oBAAY5mN,IAAZ,CAAiB0E,CAAjB,CAA/C;AACA,SAAOkF,GAAG,CAAClF,CAAC,CAAC+wM,cAAF,KAAqB,KAAtB,EAA6Bt5K,CAA7B,EAAgC,CAAhC,CAAV;AACD;;AAED,SAASq1L,aAAT,GAAyB;AACvB,SAAO,OAAP;AACD;;AAED,SAAS1B,oBAAT,GAAgC;AAC9B,SAAO,GAAP;AACD;;AAED,SAASV,mBAAT,CAA6B1qN,CAA7B,EAAgC;AAC9B,SAAO,CAACA,CAAR;AACD;;AAED,SAAS2qN,0BAAT,CAAoC3qN,CAApC,EAAuC;AACrC,SAAO9G,IAAI,CAAC+H,KAAL,CAAW,CAACjB,CAAD,GAAK,IAAhB,CAAP;AACD;;;;;;;;;;ACxrBD;;;;AAEA,IAAIk9M,MAAJ;AACO,IAAI8S,UAAJ;;AACA,IAAIC,SAAJ;;AACA,IAAIZ,SAAJ;;AACA,IAAIC,QAAJ;;AAEPpR,aAAa,CAAC;AACZiK,EAAAA,QAAQ,EAAE,QADE;AAEZ1e,EAAAA,IAAI,EAAE,YAFM;AAGZvnM,EAAAA,IAAI,EAAE,cAHM;AAIZqmN,EAAAA,OAAO,EAAE,CAAC,IAAD,EAAO,IAAP,CAJG;AAKZ5I,EAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,QAAX,EAAqB,SAArB,EAAgC,WAAhC,EAA6C,UAA7C,EAAyD,QAAzD,EAAmE,UAAnE,CALM;AAMZ+I,EAAAA,SAAS,EAAE,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,EAA6B,KAA7B,EAAoC,KAApC,EAA2C,KAA3C,CANC;AAOZ3H,EAAAA,MAAM,EAAE,CAAC,SAAD,EAAY,UAAZ,EAAwB,OAAxB,EAAiC,OAAjC,EAA0C,KAA1C,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,QAAjE,EAA2E,WAA3E,EAAwF,SAAxF,EAAmG,UAAnG,EAA+G,UAA/G,CAPI;AAQZ8H,EAAAA,WAAW,EAAE,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,EAA6B,KAA7B,EAAoC,KAApC,EAA2C,KAA3C,EAAkD,KAAlD,EAAyD,KAAzD,EAAgE,KAAhE,EAAuE,KAAvE,EAA8E,KAA9E;AARD,CAAD,CAAb;;AAWe,SAAS3K,aAAT,CAAuBC,UAAvB,EAAmC;AAChDjB,EAAAA,MAAM,GAAG,qBAAaiB,UAAb,CAAT;AACA,uBAAA6R,UAAU,GAAG9S,MAAM,CAACxnG,MAApB;AACA,sBAAAu6G,SAAS,GAAG/S,MAAM,CAAC7nK,KAAnB;AACA,sBAAAg6K,SAAS,GAAGnS,MAAM,CAACmS,SAAnB;AACA,qBAAAC,QAAQ,GAAGpS,MAAM,CAACoS,QAAlB;AACA,SAAOpS,MAAP;AACD;;;;;;;;;AC1BD;;AAEO,IAAIgT,YAAY,GAAG,uBAAnB;;;AAEP,SAASC,eAAT,CAAyB1mB,IAAzB,EAA+B;AAC7B,SAAOA,IAAI,CAAC2mB,WAAL,EAAP;AACD;;AAED,IAAIC,SAAS,GAAGpnJ,IAAI,CAAC11E,SAAL,CAAe68N,WAAf,GACVD,eADU,GAEV,8BAAUD,YAAV,CAFN;eAIeG;;;;;;;;;;ACZf;;AACA;;AAEA,SAASC,cAAT,CAAwBlhB,MAAxB,EAAgC;AAC9B,MAAI3F,IAAI,GAAG,IAAIxgI,IAAJ,CAASmmI,MAAT,CAAX;AACA,SAAOrxM,KAAK,CAAC0rM,IAAD,CAAL,GAAc,IAAd,GAAqBA,IAA5B;AACD;;AAED,IAAI8mB,QAAQ,GAAG,CAAC,IAAItnJ,IAAJ,CAAS,0BAAT,CAAD,GACTqnJ,cADS,GAET,6BAASJ,uBAAT,CAFN;eAIeK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZf;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;ACHA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASC,OAAT,CAAkBpsL,MAAlB,EAA0B;AACxB,QAAM2lJ,KAAK,GAAG,EAAd;AACA,SAAOn9E,IAAI,IAAIm9E,KAAK,CAACn9E,IAAD,CAAL,KAAgBm9E,KAAK,CAACn9E,IAAD,CAAL,GAAcxoE,MAAM,CAACwoE,IAAD,CAApC,CAAf;AACD;;AAED,SAAS6jH,UAAT,CAAoBC,YAApB,EAAkCC,WAAlC,EAA+C;AAC7C,SAAOr3N,CAAC,IAAI;AACV,UAAM00G,GAAG,GAAG0iH,YAAY,CAACp3N,CAAD,CAAxB;AAAA,UACMs3N,GAAG,GAAG5iH,GAAG,CAACz9E,OAAJ,CAAYogM,WAAZ,CADZ;AAEA,QAAIC,GAAG,GAAG,CAAV,EAAa,OAAO5iH,GAAP;AACb,QAAIr1D,GAAG,GAAGk4K,cAAc,CAAC7iH,GAAD,EAAM4iH,GAAN,CAAxB;AACA,UAAM9rN,GAAG,GAAG6zC,GAAG,GAAGq1D,GAAG,CAACv7G,MAAV,GAAmBu7G,GAAG,CAACxxG,KAAJ,CAAUm8C,GAAV,CAAnB,GAAoC,EAAhD;;AAEA,WAAO,EAAEA,GAAF,GAAQi4K,GAAf,EAAoB,IAAI5iH,GAAG,CAACr1D,GAAD,CAAH,KAAa,GAAjB,EAAsB;AACxC,QAAEA,GAAF;AACA;AACD;;AAED,WAAOq1D,GAAG,CAACxxG,KAAJ,CAAU,CAAV,EAAam8C,GAAb,IAAoB7zC,GAA3B;AACD,GAbD;AAcD;;AAED,SAAS+rN,cAAT,CAAwB7iH,GAAxB,EAA6B4iH,GAA7B,EAAkC;AAChC,MAAIz9N,CAAC,GAAG66G,GAAG,CAACgQ,WAAJ,CAAgB,GAAhB,CAAR;AAAA,MACIp+G,CADJ;AAEA,MAAIzM,CAAC,GAAG,CAAR,EAAW,OAAOA,CAAP;;AAEX,OAAKA,CAAC,GAAG66G,GAAG,CAACv7G,MAAb,EAAqB,EAAEU,CAAF,GAAMy9N,GAA3B,GAAiC;AAC/BhxN,IAAAA,CAAC,GAAGouG,GAAG,CAACpmC,UAAJ,CAAez0E,CAAf,CAAJ;AACA,QAAIyM,CAAC,IAAI,EAAL,IAAWA,CAAC,IAAI,EAApB,EAAwB,OAAOzM,CAAC,GAAG,CAAX,CAFO,CAEO;AACvC;AACF;;AAED,SAAS29N,YAAT,CAAsB5T,MAAtB,EAA8B;AAC5B,QAAMxnG,MAAM,GAAG86G,OAAO,CAACtT,MAAM,CAACxnG,MAAR,CAAtB;AAAA,QACMuoG,YAAY,GAAGf,MAAM,CAACe,YAD5B;AAEA,SAAO;AACLvoG,IAAAA,MADK;AAELuoG,IAAAA,YAFK;;AAIL8S,IAAAA,WAAW,CAACnkH,IAAD,EAAO;AAChB,YAAMj2G,CAAC,GAAG,+BAAgBi2G,IAAI,IAAI,GAAxB,CAAV;;AAEA,UAAIj2G,CAAC,CAAC0wF,SAAF,IAAe,IAAnB,EAAyB;AACvB1wF,QAAAA,CAAC,CAAC0wF,SAAF,GAAc,EAAd;;AAEA,gBAAQ1wF,CAAC,CAACyc,IAAV;AACE,eAAK,GAAL;AACEzc,YAAAA,CAAC,CAAC0wF,SAAF,IAAe,CAAf;AACA;;AAEF,eAAK,GAAL;AACE1wF,YAAAA,CAAC,CAAC0wF,SAAF,IAAe,CAAf;AACA;AAPJ;;AAUA,eAAOopI,UAAU,CAAC/6G,MAAM,CAAC/+G,CAAD,CAAP,EAAY;AAC7B++G,QAAAA,MAAM,CAAC,KAAD,CAAN,CAAc,CAAd,EAAiB,CAAjB,CADiB,CACG;AADH,SAAjB;AAGD,OAhBD,MAgBO;AACL,eAAOA,MAAM,CAAC/+G,CAAD,CAAb;AACD;AACF,KA1BI;;AA4BLq6N,IAAAA,UAAU,CAAC/xN,KAAD,EAAQy1B,IAAR,EAAcw2C,KAAd,EAAqBsxI,SAArB,EAAgC;AACxCA,MAAAA,SAAS,GAAG,+BAAgBA,SAAS,IAAI,IAAb,GAAoB,IAApB,GAA2BA,SAA3C,CAAZ;AACA,YAAM3uM,IAAI,GAAG,uBAAS5O,KAAT,EAAgBy1B,IAAhB,EAAsBw2C,KAAtB,CAAb;AAAA,YACM/0E,KAAK,GAAG+C,IAAI,CAACK,GAAL,CAASL,IAAI,CAACiT,GAAL,CAASlN,KAAT,CAAT,EAA0B/F,IAAI,CAACiT,GAAL,CAASuoB,IAAT,CAA1B,CADd;AAEA,UAAI2yD,SAAJ;;AAEA,UAAIm1H,SAAS,CAACn1H,SAAV,IAAuB,IAA3B,EAAiC;AAC/B,gBAAQm1H,SAAS,CAACppM,IAAlB;AACE,eAAK,GAAL;AACE;AACE,kBAAI,CAACrV,KAAK,CAACspF,SAAS,GAAG,+BAAgBx5E,IAAhB,EAAsB1X,KAAtB,CAAb,CAAV,EAAsD;AACpDqmN,gBAAAA,SAAS,CAACn1H,SAAV,GAAsBA,SAAtB;AACD;;AAED,qBAAO42H,YAAY,CAACzB,SAAD,EAAYrmN,KAAZ,CAAnB;AACD;;AAEH,eAAK,EAAL;AACA,eAAK,GAAL;AACA,eAAK,GAAL;AACA,eAAK,GAAL;AACA,eAAK,GAAL;AACE;AACE,kBAAI,CAAC4H,KAAK,CAACspF,SAAS,GAAG,8BAAex5E,IAAf,EAAqB1X,KAArB,CAAb,CAAV,EAAqD;AACnDqmN,gBAAAA,SAAS,CAACn1H,SAAV,GAAsBA,SAAS,IAAIm1H,SAAS,CAACppM,IAAV,KAAmB,GAAvB,CAA/B;AACD;;AAED;AACD;;AAEH,eAAK,GAAL;AACA,eAAK,GAAL;AACE;AACE,kBAAI,CAACrV,KAAK,CAACspF,SAAS,GAAG,8BAAex5E,IAAf,CAAb,CAAV,EAA8C;AAC5C2uM,gBAAAA,SAAS,CAACn1H,SAAV,GAAsBA,SAAS,GAAG,CAACm1H,SAAS,CAACppM,IAAV,KAAmB,GAApB,IAA2B,CAA7D;AACD;;AAED;AACD;AA/BL;AAiCD;;AAED,aAAOsiG,MAAM,CAAC8mG,SAAD,CAAb;AACD;;AAvEI,GAAP;AA0ED;;AAED,IAAIyU,mBAAJ;AACAC,8BAA8B;;AAC9B,SAASA,8BAAT,GAA0C;AACxC,SAAOD,mBAAmB,GAAGH,YAAY,CAAC;AACxCp7G,IAAAA,MAAM,EAAEA,gBADgC;AAExCuoG,IAAAA,YAAY,EAAEA;AAF0B,GAAD,CAAzC;AAID;;AACD,SAASkT,kBAAT,CAA4BhT,UAA5B,EAAwC;AACtC,SAAO2S,YAAY,CAAC,4BAAa3S,UAAb,CAAD,CAAnB;AACD;;AACD,SAASiT,yBAAT,CAAmCjT,UAAnC,EAA+C;AAC7C,SAAOjrN,SAAS,CAACT,MAAV,GAAmBw+N,mBAAmB,GAAGE,kBAAkB,CAAChT,UAAD,CAA3D,GAA0E8S,mBAAjF;AACD;;AAED,SAASI,eAAT,CAAyB37G,MAAzB,EAAiC8oG,QAAjC,EAA2C5xG,IAA3C,EAAiD;AAC/CA,EAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;;AAEA,MAAI,CAAC,wBAASA,IAAT,CAAL,EAAqB;AACnB,yBAAM,wCAAwCl6G,MAAxC,CAA+Ck6G,IAA/C,CAAN;AACD;;AAED,QAAMoyG,MAAM,GAAGR,QAAQ,CAACmF,iBAAD,CAAvB;AAAA,QACMzE,MAAM,GAAGV,QAAQ,CAACkF,iBAAD,CADvB;AAAA,QAEMrE,IAAI,GAAGb,QAAQ,CAACiF,eAAD,CAFrB;AAAA,QAGMnE,GAAG,GAAGd,QAAQ,CAAC8E,cAAD,CAHpB;AAAA,QAIMmB,IAAI,GAAGjG,QAAQ,CAAC6E,cAAD,CAJrB;AAAA,QAKMzC,KAAK,GAAGpC,QAAQ,CAAC4E,eAAD,CALtB;AAAA,QAMM5Z,OAAO,GAAGgV,QAAQ,CAAC2E,iBAAD,CANxB;AAAA,QAOM9S,IAAI,GAAGmO,QAAQ,CAAC0E,cAAD,CAPrB;AAAA,QAQM8B,CAAC,GAAGtvG,MAAM,CAAC9I,IAAI,CAACg3G,sBAAD,CAAJ,IAAsB,KAAvB,CARhB;AAAA,QASM94I,CAAC,GAAG4qC,MAAM,CAAC9I,IAAI,CAAC+2G,iBAAD,CAAJ,IAAiB,KAAlB,CAThB;AAAA,QAUMp4H,CAAC,GAAGmqB,MAAM,CAAC9I,IAAI,CAAC82G,iBAAD,CAAJ,IAAiB,OAAlB,CAVhB;AAAA,QAWMqB,CAAC,GAAGrvG,MAAM,CAAC9I,IAAI,CAAC62G,eAAD,CAAJ,IAAe,OAAhB,CAXhB;AAAA,QAYMzjN,CAAC,GAAG01G,MAAM,CAAC9I,IAAI,CAAC02G,cAAD,CAAJ,IAAc12G,IAAI,CAAC22G,aAAD,CAAlB,IAA2B,OAA5B,CAZhB;AAAA,QAaM9jK,CAAC,GAAGi2D,MAAM,CAAC9I,IAAI,CAACy2G,cAAD,CAAJ,IAAc,OAAf,CAbhB;AAAA,QAcMz4H,CAAC,GAAG8qB,MAAM,CAAC9I,IAAI,CAACw2G,eAAD,CAAJ,IAAe,IAAhB,CAdhB;AAAA,QAeMv4H,CAAC,GAAG6qB,MAAM,CAAC9I,IAAI,CAACu2G,iBAAD,CAAJ,IAAiB,IAAlB,CAfhB;AAAA,QAgBMtrM,CAAC,GAAG69F,MAAM,CAAC9I,IAAI,CAACs2G,cAAD,CAAJ,IAAc,IAAf,CAhBhB;AAiBA,SAAOzZ,IAAI,IAAI,CAACuV,MAAM,CAACvV,IAAD,CAAN,GAAeA,IAAf,GAAsBub,CAAtB,GAA0B9F,MAAM,CAACzV,IAAD,CAAN,GAAeA,IAAf,GAAsB3+H,CAAtB,GAA0Bu0I,IAAI,CAAC5V,IAAD,CAAJ,GAAaA,IAAb,GAAoBl+G,CAApB,GAAwB+zH,GAAG,CAAC7V,IAAD,CAAH,GAAYA,IAAZ,GAAmBsb,CAAnB,GAAuBnE,KAAK,CAACnX,IAAD,CAAL,GAAcA,IAAd,GAAqBgb,IAAI,CAAChb,IAAD,CAAJ,GAAaA,IAAb,GAAoBzpM,CAApB,GAAwBy/C,CAA7C,GAAiD4wJ,IAAI,CAAC5G,IAAD,CAAJ,GAAaA,IAAb,GAAoBD,OAAO,CAACC,IAAD,CAAP,GAAgBA,IAAhB,GAAuB7+G,CAAvB,GAA2BC,CAA/C,GAAmDhzE,CAAxM,EAA2M4xL,IAA3M,CAAf;AACD;;AAED,SAAS6nB,UAAT,CAAoBpU,MAApB,EAA4B;AAC1B,QAAM8S,UAAU,GAAGQ,OAAO,CAACtT,MAAM,CAACxnG,MAAR,CAA1B;AAAA,QACM25G,SAAS,GAAGmB,OAAO,CAACtT,MAAM,CAACmS,SAAR,CADzB;AAEA,SAAO;AACLW,IAAAA,UAAU,EAAEpjH,IAAI,IAAI,wBAASA,IAAT,IAAiBojH,UAAU,CAACpjH,IAAD,CAA3B,GAAoCykH,eAAe,CAACrB,UAAD,EAAalJ,sBAAb,EAA2Bl6G,IAA3B,CADlE;AAELyiH,IAAAA,SAAS,EAAEziH,IAAI,IAAI,wBAASA,IAAT,IAAiByiH,SAAS,CAACziH,IAAD,CAA1B,GAAmCykH,eAAe,CAAChC,SAAD,EAAYtI,qBAAZ,EAAyBn6G,IAAzB,CAFhE;AAGLqjH,IAAAA,SAAS,EAAEO,OAAO,CAACtT,MAAM,CAAC7nK,KAAR,CAHb;AAILi6K,IAAAA,QAAQ,EAAEkB,OAAO,CAACtT,MAAM,CAACoS,QAAR;AAJZ,GAAP;AAMD;;AAED,IAAIiC,iBAAJ;AACAC,4BAA4B;;AAC5B,SAASA,4BAAT,GAAwC;AACtC,SAAOD,iBAAiB,GAAGD,UAAU,CAAC;AACpC57G,IAAAA,MAAM,EAAEs6G,wBAD4B;AAEpC36K,IAAAA,KAAK,EAAE46K,uBAF6B;AAGpCZ,IAAAA,SAAS,EAAEA,uBAHyB;AAIpCC,IAAAA,QAAQ,EAAEA;AAJ0B,GAAD,CAArC;AAMD;;AACD,SAASmC,gBAAT,CAA0BtT,UAA1B,EAAsC;AACpC,SAAOmT,UAAU,CAAC,oCAAmBnT,UAAnB,CAAD,CAAjB;AACD;;AACD,SAASuT,uBAAT,CAAiCvT,UAAjC,EAA6C;AAC3C,SAAOjrN,SAAS,CAACT,MAAV,GAAmB8+N,iBAAiB,GAAGE,gBAAgB,CAACtT,UAAD,CAAvD,GAAsEoT,iBAA7E;AACD;;AAED,MAAMI,YAAY,GAAG,CAACxiB,MAAD,EAASjtM,IAAT,KAAkB,sBAAO,EAAP,EAAWitM,MAAX,EAAmBjtM,IAAnB,CAAvC;;AAEA,SAASg7M,MAAT,CAAgB0U,UAAhB,EAA4BC,QAA5B,EAAsC;AACpC,QAAM1iB,MAAM,GAAGyiB,UAAU,GAAGT,kBAAkB,CAACS,UAAD,CAArB,GAAoCR,yBAAyB,EAAtF;AACA,QAAMlvN,IAAI,GAAG2vN,QAAQ,GAAGJ,gBAAgB,CAACI,QAAD,CAAnB,GAAgCH,uBAAuB,EAA5E;AACA,SAAOC,YAAY,CAACxiB,MAAD,EAASjtM,IAAT,CAAnB;AACD;;AACD,SAASg8M,aAAT,CAAuB0T,UAAvB,EAAmCC,QAAnC,EAA6C;AAC3C,QAAM7+N,IAAI,GAAGE,SAAS,CAACT,MAAvB;;AAEA,MAAIO,IAAI,IAAIA,IAAI,KAAK,CAArB,EAAwB;AACtB,yBAAM,qDAAN;AACD;;AAED,SAAOA,IAAI,GAAG2+N,YAAY,CAACP,yBAAyB,CAACQ,UAAD,CAA1B,EAAwCF,uBAAuB,CAACG,QAAD,CAA/D,CAAf,GAA4FF,YAAY,CAACP,yBAAyB,EAA1B,EAA8BM,uBAAuB,EAArD,CAAnH;AACD;;AACD,SAASI,kBAAT,GAA8B;AAC5BZ,EAAAA,8BAA8B;AAC9BM,EAAAA,4BAA4B;AAC5B,SAAOtT,aAAa,EAApB;AACD;;;;;;;;;AChND;;AACA;;AACA;;AACA;;AAEe,kBAAS/7M,IAAT,EAAe4vN,MAAf,EAAuBC,UAAvB,EAAmCC,SAAnC,EAA8C;AAC3DF,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AAEA,QAAMra,MAAM,GAAG,oBAAQqa,MAAM,CAAC3+M,IAAP,IAAe,MAAvB,CAAf;AACA,MAAI,CAACskM,MAAL,EAAa,qBAAM,+BAA+Bqa,MAAM,CAAC3+M,IAA5C;AAEbjR,EAAAA,IAAI,GAAGu1M,MAAM,CAACv1M,IAAD,EAAO4vN,MAAP,CAAb;AACA,MAAIA,MAAM,CAAC18K,KAAX,EAAkBA,KAAK,CAAClzC,IAAD,EAAO4vN,MAAM,CAAC18K,KAAd,EAAqB28K,UAArB,EAAiCC,SAAjC,CAAL;AAElB,MAAI,8BAAe9vN,IAAf,EAAqB,SAArB,CAAJ,EAAqC,OAAOA,IAAI,CAACwE,OAAZ;AACrC,SAAOxE,IAAP;AACD;;AAED,SAASkzC,KAAT,CAAelzC,IAAf,EAAqBstM,KAArB,EAA4BuiB,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,MAAI,CAAC9vN,IAAI,CAAC1P,MAAV,EAAkB,OAD+B,CACvB;;AAE1B,QAAMyqN,MAAM,GAAG,0CAAf;AACA8U,EAAAA,UAAU,GAAGA,UAAU,IAAI9U,MAAM,CAAC+S,SAAlC;AACAgC,EAAAA,SAAS,GAAGA,SAAS,IAAI/U,MAAM,CAACoS,QAAhC;AAEA,MAAIr+K,MAAM,GAAG9uC,IAAI,CAACwE,OAAL,IAAgBzQ,MAAM,CAACof,IAAP,CAAYnT,IAAI,CAAC,CAAD,CAAhB,CAA7B;AAAA,MACI+vN,KADJ;AAAA,MACWvpG,KADX;AAAA,MACkBx1H,CADlB;AAAA,MACqBiK,CADrB;AAAA,MACwBiE,CADxB;AAAA,MAC2BupF,CAD3B;AAGA,MAAI6kH,KAAK,KAAK,MAAd,EAAsBA,KAAK,GAAG,sBAAWttM,IAAX,EAAiB8uC,MAAjB,CAAR;AAEtBA,EAAAA,MAAM,GAAG/6C,MAAM,CAACof,IAAP,CAAYm6L,KAAZ,CAAT;AACA,QAAM0iB,OAAO,GAAGlhL,MAAM,CAACr0C,GAAP,CAAW+rH,KAAK,IAAI;AAClC,UAAMv1G,IAAI,GAAGq8L,KAAK,CAAC9mF,KAAD,CAAlB;AACA,QAAIypG,KAAJ,EAAWn9D,OAAX;;AAEA,QAAI7hJ,IAAI,KAAKA,IAAI,CAACugG,UAAL,CAAgB,OAAhB,KAA4BvgG,IAAI,CAACugG,UAAL,CAAgB,MAAhB,CAAjC,CAAR,EAAmE;AACjEy+G,MAAAA,KAAK,GAAGh/M,IAAI,CAACpc,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAR,CADiE,CAC/B;;AAClCi+J,MAAAA,OAAO,GAAGm9D,KAAK,CAAC,CAAD,CAAf;;AAEA,UAAKn9D,OAAO,CAAC,CAAD,CAAP,KAAe,IAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,IAAtD,IACCwiK,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,GAD1D,EACgE;AAC9DwiK,QAAAA,OAAO,GAAGA,OAAO,CAACz4J,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;AACD;;AAED,YAAM64C,KAAK,GAAG+8K,KAAK,CAAC,CAAD,CAAL,KAAa,KAAb,GAAqBH,SAArB,GAAiCD,UAA/C;AACA,aAAO38K,KAAK,CAAC4/G,OAAD,CAAZ;AACD;;AAED,QAAI,CAAC+5C,kBAAY57L,IAAZ,CAAL,EAAwB;AACtB,YAAM1hB,KAAK,CAAC,6BAA6Bi3H,KAA7B,GAAqC,GAArC,GAA2Cv1G,IAA5C,CAAX;AACD;;AAED,WAAO47L,kBAAY57L,IAAZ,CAAP;AACD,GAtBe,CAAhB;;AAwBA,OAAKjgB,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACc,IAAI,CAAC1P,MAAZ,EAAoBm4F,CAAC,GAAC35C,MAAM,CAACx+C,MAAlC,EAA0CU,CAAC,GAACkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD++N,IAAAA,KAAK,GAAG/vN,IAAI,CAAChP,CAAD,CAAZ;;AACA,SAAKiK,CAAC,GAAC,CAAP,EAAUA,CAAC,GAACwtF,CAAZ,EAAe,EAAExtF,CAAjB,EAAoB;AAClBurH,MAAAA,KAAK,GAAG13E,MAAM,CAAC7zC,CAAD,CAAd;AACA80N,MAAAA,KAAK,CAACvpG,KAAD,CAAL,GAAewpG,OAAO,CAAC/0N,CAAD,CAAP,CAAW80N,KAAK,CAACvpG,KAAD,CAAhB,CAAf;AACD;AACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DD;;AAOA;;AAIA;;AAMA;;;;AAfO,MAAM0pG,MAAM,GAAG,qBACpB,OAAO3wN,KAAP,KAAiB,WAAjB,IAAgCA,KADZ,EACmB;AACvC,IAFoB,CAEf;AAFe,CAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFP;;AACA;;AACA;;AAEA,SAAS4wN,UAAT,CAAoBC,MAApB,EAA4B;AAC1B,QAAM5mB,CAAC,GAAG4mB,MAAM,IAAIn/F,kBAApB;AAAA,QACM5/G,IAAI,GAAG,EADb;AAAA,QAEMqjK,GAAG,GAAG,EAFZ;;AAIArjK,EAAAA,IAAI,CAACM,GAAL,GAAWgG,CAAC,IAAI;AACd,UAAM1T,EAAE,GAAGulM,CAAC,CAAC7xL,CAAD,CAAZ;;AAEA,QAAI,CAAC+8J,GAAG,CAACzwK,EAAD,CAAR,EAAc;AACZywK,MAAAA,GAAG,CAACzwK,EAAD,CAAH,GAAU,CAAV;AACAoN,MAAAA,IAAI,CAACpgB,IAAL,CAAU0mB,CAAV;AACD;;AAED,WAAOtG,IAAP;AACD,GATD;;AAWAA,EAAAA,IAAI,CAAC8yD,MAAL,GAAcxsD,CAAC,IAAI;AACjB,UAAM1T,EAAE,GAAGulM,CAAC,CAAC7xL,CAAD,CAAZ;;AAEA,QAAI+8J,GAAG,CAACzwK,EAAD,CAAP,EAAa;AACXywK,MAAAA,GAAG,CAACzwK,EAAD,CAAH,GAAU,CAAV;AACA,YAAMuyC,GAAG,GAAGnlC,IAAI,CAAC+c,OAAL,CAAazW,CAAb,CAAZ;AACA,UAAI6+B,GAAG,IAAI,CAAX,EAAcnlC,IAAI,CAACmjB,MAAL,CAAYgiB,GAAZ,EAAiB,CAAjB;AACf;;AAED,WAAOnlC,IAAP;AACD,GAVD;;AAYA,SAAOA,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAeg/M,aAAf,CAA8BC,EAA9B,EAAkC1oJ,QAAlC,EAA4C;AAC1C,MAAI;AACF,UAAMA,QAAQ,CAAC0oJ,EAAD,CAAd;AACD,GAFD,CAEE,OAAOl8M,GAAP,EAAY;AACZk8M,IAAAA,EAAE,CAACj7M,KAAH,CAASjB,GAAT;AACD;AACF;;AAED,MAAMm8M,YAAY,GAAGhhN,MAAM,CAAC,SAAD,CAA3B;AACA,IAAIihN,QAAQ,GAAG,CAAf;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,OAAT,CAAiB/7N,CAAjB,EAAoB;AAClB,SAAO,CAAC,EAAEA,CAAC,IAAIg8N,OAAO,CAACh8N,CAAD,CAAd,CAAR;AACD;AACD;AACA;AACA;AACA;AACA;;;AAEA,SAASg8N,OAAT,CAAiBh8N,CAAjB,EAAoB;AAClB,SAAOA,CAAC,CAAC67N,YAAD,CAAR;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASI,KAAT,CAAej8N,CAAf,EAAkBuP,EAAlB,EAAsB;AACpBvP,EAAAA,CAAC,CAAC67N,YAAD,CAAD,GAAkBtsN,EAAlB;AACA,SAAOvP,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASk8N,MAAT,CAAgBb,KAAhB,EAAuB;AACrB,QAAMr7N,CAAC,GAAGq7N,KAAK,KAAKh8N,MAAM,CAACg8N,KAAD,CAAhB,GAA0BA,KAA1B,GAAkC;AAC1C/vN,IAAAA,IAAI,EAAE+vN;AADoC,GAA5C;AAGA,SAAOW,OAAO,CAACh8N,CAAD,CAAP,GAAaA,CAAb,GAAiBi8N,KAAK,CAACj8N,CAAD,EAAI87N,QAAQ,EAAZ,CAA7B;AACD;AACD;AACA;AACA;AACA;AACA;;;AAEA,SAASK,MAAT,CAAgBn8N,CAAhB,EAAmB;AACjB,SAAOo8N,QAAQ,CAACp8N,CAAD,EAAIk8N,MAAM,CAAC,EAAD,CAAV,CAAf;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASE,QAAT,CAAkBp8N,CAAlB,EAAqBmJ,CAArB,EAAwB;AACtB,OAAK,MAAMyQ,CAAX,IAAgB5Z,CAAhB,EAAmBmJ,CAAC,CAACyQ,CAAD,CAAD,GAAO5Z,CAAC,CAAC4Z,CAAD,CAAR;;AAEnB,SAAOzQ,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAStJ,OAAT,CAAiBG,CAAjB,EAAoBmJ,CAApB,EAAuB;AACrB,SAAO8yN,KAAK,CAAC9yN,CAAD,EAAI6yN,OAAO,CAACh8N,CAAD,CAAX,CAAZ;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASq8N,aAAT,CAAuB1zB,GAAvB,EAA4B1gM,CAA5B,EAA+B;AAC7B,SAAO,CAAC0gM,GAAD,GAAO,IAAP,GAAc1gM,CAAC,GAAG,CAACzE,CAAD,EAAI6G,CAAJ,KAAUs+L,GAAG,CAACnlM,CAAD,EAAI6G,CAAJ,CAAH,IAAa2xN,OAAO,CAAC/zN,CAAC,CAACzE,CAAD,CAAF,CAAP,GAAgBw4N,OAAO,CAAC/zN,CAAC,CAACoC,CAAD,CAAF,CAAjD,GAA0D,CAAC7G,CAAD,EAAI6G,CAAJ,KAAUs+L,GAAG,CAACnlM,CAAD,EAAI6G,CAAJ,CAAH,IAAa2xN,OAAO,CAACx4N,CAAD,CAAP,GAAaw4N,OAAO,CAAC3xN,CAAD,CAA3H;AACD;;AAED,SAASiyN,WAAT,CAAqB9tN,CAArB,EAAwB;AACtB,SAAOA,CAAC,IAAIA,CAAC,CAACtG,WAAF,KAAkBq0N,SAA9B;AACD;;AACD,SAASA,SAAT,GAAqB;AACnB,QAAMt/M,GAAG,GAAG,EAAZ;AAAA,QACM;AACNkhF,EAAAA,GAAG,GAAG,EAFN;AAAA,QAGM;AACN1qF,EAAAA,GAAG,GAAG,EAJN;AAAA,QAKM;AACN+oN,EAAAA,IAAI,GAAG,EANP;AAAA,QAOM;AACNC,EAAAA,IAAI,GAAG,EARP,CADmB,CASR;;AAEX,MAAI90B,KAAK,GAAG,IAAZ;AAAA,MACI+0B,MAAM,GAAG,KADb;AAEA,SAAO;AACLx0N,IAAAA,WAAW,EAAEq0N,SADR;;AAGLI,IAAAA,MAAM,CAAC38N,CAAD,EAAI;AACR,YAAMmJ,CAAC,GAAG,qBAAMnJ,CAAN,CAAV;AAAA,YACMwK,CAAC,GAAGrB,CAAC,CAACvN,MADZ;;AAGA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B2gB,GAAG,CAAC1gB,IAAJ,CAAS4M,CAAC,CAAC7M,CAAD,CAAV;;AAE5B,aAAO,IAAP;AACD,KAVI;;AAYLmzE,IAAAA,MAAM,CAACzvE,CAAD,EAAI;AACR,YAAMwD,CAAC,GAAG,0BAAWxD,CAAX,IAAgBw8N,IAAhB,GAAuBr+H,GAAjC;AAAA,YACMh1F,CAAC,GAAG,qBAAMnJ,CAAN,CADV;AAAA,YAEMwK,CAAC,GAAGrB,CAAC,CAACvN,MAFZ;;AAIA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4BkH,CAAC,CAACjH,IAAF,CAAO4M,CAAC,CAAC7M,CAAD,CAAR;;AAE5B,aAAO,IAAP;AACD,KApBI;;AAsBLsgO,IAAAA,MAAM,CAAC58N,CAAD,EAAI8xH,KAAJ,EAAWxyH,KAAX,EAAkB;AACtB,YAAMy0F,CAAC,GAAG;AACR+9B,QAAAA,KAAK,EAAEA,KADC;AAERxyH,QAAAA,KAAK,EAAE,wBAASA,KAAT;AAFC,OAAV;;AAKA,UAAI,0BAAWU,CAAX,CAAJ,EAAmB;AACjB+zF,QAAAA,CAAC,CAACt8E,MAAF,GAAWzX,CAAX;AACAy8N,QAAAA,IAAI,CAAClgO,IAAL,CAAUw3F,CAAV;AACD,OAHD,MAGO;AACLA,QAAAA,CAAC,CAAC8oI,KAAF,GAAU78N,CAAV;AACAyT,QAAAA,GAAG,CAAClX,IAAJ,CAASw3F,CAAT;AACD;;AAED,aAAO,IAAP;AACD,KArCI;;AAuCLjqF,IAAAA,MAAM,CAAC9J,CAAD,EAAIf,GAAJ,EAAS;AACb,UAAI,0BAAWe,CAAX,CAAJ,EAAmBy8N,IAAI,CAAClgO,IAAL,CAAU;AAC3Bkb,QAAAA,MAAM,EAAEzX,CADmB;AAE3B8xH,QAAAA,KAAK,EAAE7yH;AAFoB,OAAV,EAAnB,KAGQwU,GAAG,CAAClX,IAAJ,CAAS;AACfsgO,QAAAA,KAAK,EAAE78N,CADQ;AAEf8xH,QAAAA,KAAK,EAAE7yH;AAFQ,OAAT;AAIR,aAAO,IAAP;AACD,KAhDI;;AAkDL0oM,IAAAA,KAAK,CAACroM,KAAD,EAAQ;AACXqoM,MAAAA,KAAK,GAAGroM,KAAR;AACA,aAAO,IAAP;AACD,KArDI;;AAuDLo9N,IAAAA,MAAM,GAAG;AACPA,MAAAA,MAAM,GAAG,IAAT;AACA,aAAO,IAAP;AACD,KA1DI;;AA4DLI,IAAAA,KAAK,CAACA,KAAD,EAAQ/1D,MAAR,EAAgB;AACnB,YAAMg2D,GAAG,GAAG,EAAZ;AAAA,YACMp6M,GAAG,GAAG,EADZ;AAEA,UAAIrmB,CAAJ,EAAOkO,CAAP,EAAUupF,CAAV,EAAa9rF,CAAb,EAAgBjI,CAAhB,EAAmBuP,EAAnB,CAHmB,CAGI;;AAEvB,WAAKjT,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGu8J,MAAM,CAACnrK,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C;AACzCygO,QAAAA,GAAG,CAACf,OAAO,CAACj1D,MAAM,CAACzqK,CAAD,CAAP,CAAR,CAAH,GAA0B,CAA1B;AACD,OAPkB,CAOjB;;;AAGF,WAAKA,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG2zF,GAAG,CAACviG,MAApB,EAA4BU,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC0D,QAAAA,CAAC,GAAGm+F,GAAG,CAAC7hG,CAAD,CAAP;AACAygO,QAAAA,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAAC,CAAnB;AACD,OAbkB,CAajB;;;AAGF,WAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgyN,IAAI,CAAC5gO,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvC2L,QAAAA,CAAC,GAAGu0N,IAAI,CAAClgO,CAAD,CAAR;AACAyqK,QAAAA,MAAM,CAAC3mK,OAAP,CAAeJ,CAAC,IAAI;AAClB,cAAIiI,CAAC,CAACjI,CAAD,CAAL,EAAU+8N,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAAC,CAAnB;AACX,SAFD;AAGD,OArBkB,CAqBjB;;;AAGF,WAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGyS,GAAG,CAACrhB,MAApB,EAA4BU,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC0D,QAAAA,CAAC,GAAGid,GAAG,CAAC3gB,CAAD,CAAP;AACAiT,QAAAA,EAAE,GAAGysN,OAAO,CAACh8N,CAAD,CAAZ;;AAEA,YAAI+8N,GAAG,CAACxtN,EAAD,CAAP,EAAa;AACX;AACA;AACAwtN,UAAAA,GAAG,CAACxtN,EAAD,CAAH,GAAU,CAAV;AACD,SAJD,MAIO;AACL;AACAutN,UAAAA,KAAK,CAAC7/M,GAAN,CAAU1gB,IAAV,CAAe2/N,MAAM,CAACj/M,GAAG,CAAC3gB,CAAD,CAAJ,CAArB;AACD;AACF,OApCkB,CAoCjB;;;AAGF,WAAKA,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGu8J,MAAM,CAACnrK,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C;AACzC0D,QAAAA,CAAC,GAAG+mK,MAAM,CAACzqK,CAAD,CAAV;AACA,YAAIygO,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAAtB,EAAyB88N,KAAK,CAAC3+H,GAAN,CAAU5hG,IAAV,CAAeyD,CAAf;AAC1B,OA1CkB,CA0CjB;;;AAGF,eAAS48N,MAAT,CAAgB58N,CAAhB,EAAmBiI,CAAnB,EAAsBuG,CAAtB,EAAyB;AACvB,YAAIA,CAAJ,EAAO;AACLxO,UAAAA,CAAC,CAACiI,CAAD,CAAD,GAAOuG,CAAC,CAACxO,CAAD,CAAR;AACD,SAFD,MAEO;AACL88N,UAAAA,KAAK,CAAChzN,MAAN,GAAe7B,CAAf;AACD;;AAED,YAAI,CAACy0N,MAAL,EAAa/5M,GAAG,CAACq5M,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkBA,CAAlB;AACd,OArDkB,CAqDjB;;;AAGF,WAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGiJ,GAAG,CAAC7X,MAApB,EAA4BU,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtCy3F,QAAAA,CAAC,GAAGtgF,GAAG,CAACnX,CAAD,CAAP;AACA0D,QAAAA,CAAC,GAAG+zF,CAAC,CAAC8oI,KAAN;AACA50N,QAAAA,CAAC,GAAG8rF,CAAC,CAAC+9B,KAAN;AACAviH,QAAAA,EAAE,GAAGwtN,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAR;;AAEA,YAAIuP,EAAE,GAAG,CAAT,EAAY;AACVqtN,UAAAA,MAAM,CAAC58N,CAAD,EAAIiI,CAAJ,EAAO8rF,CAAC,CAACz0F,KAAT,CAAN;AACAw9N,UAAAA,KAAK,CAACE,QAAN,CAAe/0N,CAAf;AACD;AACF,OAlEkB,CAkEjB;;;AAGF,WAAK3L,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGiyN,IAAI,CAAC7gO,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCy3F,QAAAA,CAAC,GAAG0oI,IAAI,CAACngO,CAAD,CAAR;AACA2L,QAAAA,CAAC,GAAG8rF,CAAC,CAACt8E,MAAN;AACAsvJ,QAAAA,MAAM,CAAC3mK,OAAP,CAAeJ,CAAC,IAAI;AAClB,cAAIiI,CAAC,CAACjI,CAAD,CAAD,IAAQ+8N,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAA9B,EAAiC;AAC/B48N,YAAAA,MAAM,CAAC58N,CAAD,EAAI+zF,CAAC,CAAC+9B,KAAN,EAAa/9B,CAAC,CAACz0F,KAAf,CAAN;AACD;AACF,SAJD;AAKAw9N,QAAAA,KAAK,CAACE,QAAN,CAAejpI,CAAC,CAAC+9B,KAAjB;AACD,OA9EkB,CA8EjB;AACF;;;AAGA,UAAI4qG,MAAJ,EAAY;AACVI,QAAAA,KAAK,CAACrpN,GAAN,GAAY0qF,GAAG,CAACviG,MAAJ,IAAc4gO,IAAI,CAAC5gO,MAAnB,GAA4BmrK,MAAM,CAACtvJ,MAAP,CAAczX,CAAC,IAAI+8N,GAAG,CAACf,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAArC,CAA5B,GAAsE+mK,MAAM,CAACphK,KAAP,EAAlF;AACD,OAFD,MAEO;AACL,aAAK4J,EAAL,IAAWoT,GAAX,EAAgBm6M,KAAK,CAACrpN,GAAN,CAAUlX,IAAV,CAAeomB,GAAG,CAACpT,EAAD,CAAlB;AACjB,OAtFkB,CAsFjB;;;AAGF,UAAIo4L,KAAK,IAAIA,KAAK,IAAI,IAAT,KAAkBxpG,GAAG,CAACviG,MAAJ,IAAc4gO,IAAI,CAAC5gO,MAArC,CAAb,EAA2D;AACzDkhO,QAAAA,KAAK,CAACn1B,KAAN,CAAY,IAAZ;AACD;;AAED,aAAOm1B,KAAP;AACD;;AA1JI,GAAP;AA6JD;;AAED,MAAMG,KAAK,GAAG,SAAd;AACA;AACA;AACA;AACA;;AAEA,SAASC,UAAT,GAAsB;AACpB79N,EAAAA,MAAM,CAACub,cAAP,CAAsB,IAAtB,EAA4BqiN,KAA5B,EAAmC;AACjCE,IAAAA,QAAQ,EAAE,IADuB;AAEjC79N,IAAAA,KAAK,EAAE;AAF0B,GAAnC;AAID;;AACD49N,UAAU,CAACxgO,SAAX,GAAuB;AACrB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEuC,EAAAA,GAAG,CAACpB,IAAD,EAAOuE,KAAP,EAAc9C,KAAd,EAAqB89N,KAArB,EAA4B;AAC7B,UAAMn1M,CAAC,GAAG,IAAV;AAAA,UACMzZ,CAAC,GAAGyZ,CAAC,CAACpqB,IAAD,CADX;AAAA,UAEM4V,GAAG,GAAGwU,CAAC,CAACg1M,KAAD,CAFb;;AAIA,QAAI76N,KAAK,IAAI,IAAT,IAAiBA,KAAK,IAAI,CAA9B,EAAiC;AAC/B,UAAIoM,CAAC,CAACpM,KAAD,CAAD,KAAa9C,KAAb,IAAsB89N,KAA1B,EAAiC;AAC/B5uN,QAAAA,CAAC,CAACpM,KAAD,CAAD,GAAW9C,KAAX;AACAmU,QAAAA,GAAG,CAACrR,KAAK,GAAG,GAAR,GAAcvE,IAAf,CAAH,GAA0B,CAAC,CAA3B;AACA4V,QAAAA,GAAG,CAAC5V,IAAD,CAAH,GAAY,CAAC,CAAb;AACD;AACF,KAND,MAMO,IAAI2Q,CAAC,KAAKlP,KAAN,IAAe89N,KAAnB,EAA0B;AAC/Bn1M,MAAAA,CAAC,CAACpqB,IAAD,CAAD,GAAUyB,KAAV;AACAmU,MAAAA,GAAG,CAAC5V,IAAD,CAAH,GAAY,uBAAQyB,KAAR,IAAiB,IAAIA,KAAK,CAAC1D,MAA3B,GAAoC,CAAC,CAAjD;AACD;;AAED,WAAOqsB,CAAP;AACD,GA7BoB;;AA+BrB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEo1M,EAAAA,QAAQ,CAACx/N,IAAD,EAAOuE,KAAP,EAAc;AACpB,UAAMqR,GAAG,GAAG,KAAKwpN,KAAL,CAAZ;;AAEA,QAAI,CAAC5gO,SAAS,CAACT,MAAf,EAAuB;AACrB,WAAK,MAAMge,CAAX,IAAgBnG,GAAhB,EAAqB;AACnB,YAAIA,GAAG,CAACmG,CAAD,CAAP,EAAY,OAAO,IAAP;AACb;;AAED,aAAO,KAAP;AACD,KAND,MAMO,IAAI,uBAAQ/b,IAAR,CAAJ,EAAmB;AACxB,WAAK,IAAI+b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/b,IAAI,CAACjC,MAAzB,EAAiC,EAAEge,CAAnC,EAAsC;AACpC,YAAInG,GAAG,CAAC5V,IAAI,CAAC+b,CAAD,CAAL,CAAP,EAAkB,OAAO,IAAP;AACnB;;AAED,aAAO,KAAP;AACD;;AAED,WAAOxX,KAAK,IAAI,IAAT,IAAiBA,KAAK,IAAI,CAA1B,GAA8BA,KAAK,GAAG,CAAR,GAAYqR,GAAG,CAAC5V,IAAD,CAAf,IAAyB,CAAC,CAAC4V,GAAG,CAACrR,KAAK,GAAG,GAAR,GAAcvE,IAAf,CAA5D,GAAmF,CAAC,CAAC4V,GAAG,CAAC5V,IAAD,CAA/F;AACD,GA3DoB;;AA6DrB;AACF;AACA;AACA;AACEk2M,EAAAA,KAAK,GAAG;AACN,SAAKkpB,KAAL,IAAc,EAAd;AACA,WAAO,IAAP;AACD;;AApEoB,CAAvB;AAwEA,IAAIK,KAAK,GAAG,CAAZ;AACA,MAAMC,KAAK,GAAG,OAAd;AAAA,MACMC,SAAS,GAAG,IAAIN,UAAJ,EADlB,EACoC;;AAEpC,MAAMO,IAAI,GAAG,CAAb;AAAA,MACMC,QAAQ,GAAG,CADjB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,QAAT,CAAkBxrJ,IAAlB,EAAwBqZ,MAAxB,EAAgC7rF,MAAhC,EAAwCi+N,KAAxC,EAA+C;AAC7C,OAAKruN,EAAL,GAAU,EAAE+tN,KAAZ;AACA,OAAKh+N,KAAL,GAAa6yE,IAAb;AACA,OAAK0rJ,KAAL,GAAa,CAAC,CAAd;AACA,OAAK/3N,IAAL,GAAY,CAAC,CAAb;AACA,OAAKg4N,KAAL,GAAa,CAAC,CAAd;AACA,OAAK5+N,KAAL,GAAa,CAAb;;AAEA,MAAIssF,MAAJ,EAAY;AACV,SAAKuyI,OAAL,GAAevyI,MAAf;AACD;;AAED,MAAI7rF,MAAJ,EAAY,KAAKq+N,UAAL,CAAgBr+N,MAAhB,EAAwBi+N,KAAxB;AACb;;AAED,SAASrtF,IAAT,CAAc0tF,GAAd,EAAmB;AACjB,SAAO,UAAUjgN,KAAV,EAAiB;AACtB,UAAM/V,CAAC,GAAG,KAAK/I,KAAf;AACA,QAAI7C,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B,OAAO,CAAC,EAAEqM,CAAC,GAAGg2N,GAAN,CAAR;AAC5B,SAAK/+N,KAAL,GAAa8e,KAAK,GAAG/V,CAAC,GAAGg2N,GAAP,GAAah2N,CAAC,GAAG,CAACg2N,GAApC;AACA,WAAO,IAAP;AACD,GALD;AAMD;;AAEDN,QAAQ,CAACjhO,SAAT,GAAqB;AACnB;AACF;AACA;AACA;AACA;AACEyzF,EAAAA,OAAO,GAAG;AACR,WAAO,KAAK+tI,QAAL,KAAkB,KAAKA,QAAL,GAAgBzC,UAAU,CAAClsN,YAAD,CAA5C,CAAP;AACD,GARkB;;AAUnB;AACF;AACA;AACA;AACA;AACA;AACEtQ,EAAAA,GAAG,CAACK,KAAD,EAAQ;AACT,QAAI,KAAKA,KAAL,KAAeA,KAAnB,EAA0B;AACxB,WAAKA,KAAL,GAAaA,KAAb;AACA,aAAO,CAAP;AACD,KAHD,MAGO;AACL,aAAO,CAAP;AACD;AACF,GAvBkB;;AAyBnB;AACF;AACA;AACA;AACA;AACA;AACEkqL,EAAAA,IAAI,EAAEj5C,IAAI,CAACktF,IAAD,CA/BS;;AAiCnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEJ,EAAAA,QAAQ,EAAE9sF,IAAI,CAACmtF,QAAD,CAzCK;;AA2CnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEM,EAAAA,UAAU,CAACr+N,MAAD,EAASi+N,KAAT,EAAgBO,QAAhB,EAA0B;AAClCP,IAAAA,KAAK,GAAGA,KAAK,KAAK,KAAlB;AACA,UAAMQ,MAAM,GAAG,KAAKC,OAAL,GAAe,KAAKA,OAAL,IAAgB,IAAInB,UAAJ,EAA9C;AAAA,UACMoB,MAAM,GAAG,KAAKC,OAAL,GAAe,KAAKA,OAAL,IAAgB,EAD9C;AAAA,UAEMC,IAAI,GAAG,EAFb;AAGA,QAAI3gO,IAAJ,EAAUyB,KAAV,EAAiBkL,CAAjB,EAAoBlO,CAApB;;AAEA,UAAM2gB,GAAG,GAAG,CAACpf,IAAD,EAAOuE,KAAP,EAAc9C,KAAd,KAAwB;AAClC,UAAIA,KAAK,YAAYq+N,QAArB,EAA+B;AAC7B,YAAIr+N,KAAK,KAAK,IAAd,EAAoB;AAClB,cAAIs+N,KAAJ,EAAWt+N,KAAK,CAAC6wF,OAAN,GAAgBlzE,GAAhB,CAAoB,IAApB;AACXuhN,UAAAA,IAAI,CAACjiO,IAAL,CAAU+C,KAAV;AACD;;AAEDg/N,QAAAA,MAAM,CAAC/hO,IAAP,CAAY;AACV0+B,UAAAA,EAAE,EAAE37B,KADM;AAEVzB,UAAAA,IAAI,EAAEA,IAFI;AAGVuE,UAAAA,KAAK,EAAEA;AAHG,SAAZ;AAKD,OAXD,MAWO;AACLg8N,QAAAA,MAAM,CAACn/N,GAAP,CAAWpB,IAAX,EAAiBuE,KAAjB,EAAwB9C,KAAxB;AACD;AACF,KAfD;;AAiBA,SAAKzB,IAAL,IAAa8B,MAAb,EAAqB;AACnBL,MAAAA,KAAK,GAAGK,MAAM,CAAC9B,IAAD,CAAd;;AAEA,UAAIA,IAAI,KAAK0/N,KAAb,EAAoB;AAClB,6BAAMj+N,KAAN,EAAac,OAAb,CAAqB66B,EAAE,IAAI;AACzB,cAAI,EAAEA,EAAE,YAAY0iM,QAAhB,CAAJ,EAA+B;AAC7B,iCAAM,8CAAN;AACD,WAFD,MAEO,IAAI1iM,EAAE,KAAK,IAAX,EAAiB;AACtBA,YAAAA,EAAE,CAACk1D,OAAH,GAAalzE,GAAb,CAAiB,IAAjB;AACAuhN,YAAAA,IAAI,CAACjiO,IAAL,CAAU0+B,EAAV;AACD;AACF,SAPD;AAQA,aAAKm3B,MAAL,GAAc9yD,KAAd;AACD,OAVD,MAUO,IAAI,uBAAQA,KAAR,CAAJ,EAAoB;AACzB8+N,QAAAA,MAAM,CAACn/N,GAAP,CAAWpB,IAAX,EAAiB,CAAC,CAAlB,EAAqBzB,KAAK,CAACoO,CAAC,GAAGlL,KAAK,CAAC1D,MAAX,CAA1B;;AAEA,aAAKU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB2gB,GAAG,CAACpf,IAAD,EAAOvB,CAAP,EAAUgD,KAAK,CAAChD,CAAD,CAAf,CAAH;AACzB,OAJM,MAIA;AACL2gB,QAAAA,GAAG,CAACpf,IAAD,EAAO,CAAC,CAAR,EAAWyB,KAAX,CAAH;AACD;AACF;;AAED,SAAKm/N,QAAL,GAAgB1qB,KAAhB,GA9CkC,CA8CT;;AAEzB,QAAIoqB,QAAJ,EAAcG,MAAM,CAACH,QAAP,GAAkB,IAAlB;AACd,WAAOK,IAAP;AACD,GA9GkB;;AAgHnB;AACF;AACA;AACA;AACA;AACEC,EAAAA,QAAQ,CAACZ,KAAD,EAAQ;AACd,UAAMO,MAAM,GAAG,KAAKC,OAAL,IAAgBb,SAA/B;AAAA,UACMc,MAAM,GAAG,KAAKC,OADpB;AAEA,QAAIr6M,IAAJ,EAAU5nB,CAAV,EAAa2+B,EAAb,EAAiBxnB,GAAjB;;AAEA,QAAI6qN,MAAJ,EAAY;AACV,YAAM9zN,CAAC,GAAG8zN,MAAM,CAAC1iO,MAAjB;;AAEA,WAAKU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB4nB,QAAAA,IAAI,GAAGo6M,MAAM,CAAChiO,CAAD,CAAb;AACA2+B,QAAAA,EAAE,GAAG/W,IAAI,CAAC+W,EAAV;AACAxnB,QAAAA,GAAG,GAAGwnB,EAAE,CAACoiM,QAAH,MAAiBpiM,EAAE,CAAC4iM,KAAH,KAAaA,KAApC;AACAO,QAAAA,MAAM,CAACn/N,GAAP,CAAWilB,IAAI,CAACrmB,IAAhB,EAAsBqmB,IAAI,CAAC9hB,KAA3B,EAAkC64B,EAAE,CAAC37B,KAArC,EAA4CmU,GAA5C;AACD;;AAED,UAAI6qN,MAAM,CAACH,QAAX,EAAqB;AACnB,aAAK7hO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB4nB,UAAAA,IAAI,GAAGo6M,MAAM,CAAChiO,CAAD,CAAb;AACA4nB,UAAAA,IAAI,CAAC+W,EAAL,CAAQk1D,OAAR,GAAkB1gB,MAAlB,CAAyB,IAAzB;AACD;;AAED,aAAK8uJ,OAAL,GAAe,IAAf;AACA,aAAKR,OAAL,GAAe,IAAf;AACD;AACF;;AAED,WAAOK,MAAP;AACD,GAhJkB;;AAkJnB;AACF;AACA;AACA;AACEM,EAAAA,MAAM,GAAG;AACP,UAAMJ,MAAM,GAAG,KAAKC,OAApB;AACA,QAAIjiO,CAAJ,EAAOkO,CAAP,EAAU0Z,IAAV,EAAgB+W,EAAhB;;AAEA,QAAIqjM,MAAJ,EAAY;AACV,WAAKhiO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG8zN,MAAM,CAAC1iO,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C;AACzC4nB,QAAAA,IAAI,GAAGo6M,MAAM,CAAChiO,CAAD,CAAb;AACA2+B,QAAAA,EAAE,GAAG/W,IAAI,CAAC+W,EAAV;;AAEA,YAAIA,EAAE,CAACijM,QAAP,EAAiB;AACfjjM,UAAAA,EAAE,CAACijM,QAAH,CAAYzuJ,MAAZ,CAAmB,IAAnB;AACD;AACF;AACF;AACF,GApKkB;;AAsKnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEsxE,EAAAA,QAAQ,CAAC+7E,KAAD,EAAQ;AACd,UAAMtxI,MAAM,GAAG,KAAKuyI,OAApB;;AAEA,QAAIvyI,MAAJ,EAAY;AACV,YAAM7rF,MAAM,GAAG,KAAK8+N,QAAL,CAAc3B,KAAK,CAACe,KAApB,CAAf;AAAA,YACMrvN,CAAC,GAAGg9E,MAAM,CAACpwF,IAAP,CAAY,IAAZ,EAAkBuE,MAAlB,EAA0Bm9N,KAA1B,CADV;AAEAn9N,MAAAA,MAAM,CAACo0M,KAAP;;AAEA,UAAIvlM,CAAC,KAAK,KAAKlP,KAAf,EAAsB;AACpB,aAAKA,KAAL,GAAakP,CAAb;AACD,OAFD,MAEO,IAAI,CAAC,KAAK6uN,QAAL,EAAL,EAAsB;AAC3B,eAAOP,KAAK,CAAC6B,eAAb;AACD;AACF;AACF,GA/LkB;;AAiMnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE1iO,EAAAA,GAAG,CAAC6gO,KAAD,EAAQ;AACT,QAAIA,KAAK,CAACe,KAAN,GAAc,KAAKA,KAAvB,EAA8B,OAAOf,KAAK,CAAC6B,eAAb;AAC9B,QAAIC,EAAJ;;AAEA,QAAI,KAAKp1C,IAAL,EAAJ,EAAiB;AACf,WAAKA,IAAL,CAAU,KAAV;AACAo1C,MAAAA,EAAE,GAAG,CAAL;AACD,KAHD,MAGO;AACLA,MAAAA,EAAE,GAAG,KAAK79E,QAAL,CAAc+7E,KAAd,CAAL;AACD;;AAED,WAAO,KAAKA,KAAL,GAAa8B,EAAE,IAAI9B,KAA1B;AACD;;AAtNkB,CAArB;AA0NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS7/M,GAAT,CAAck1D,IAAd,EAAoBqZ,MAApB,EAA4B7rF,MAA5B,EAAoCi+N,KAApC,EAA2C;AACzC,MAAIx8K,KAAK,GAAG,CAAZ;AAAA,MACInmB,EADJ;;AAGA,MAAIk3C,IAAI,YAAYwrJ,QAApB,EAA8B;AAC5B1iM,IAAAA,EAAE,GAAGk3C,IAAL;AACD,GAFD,MAEO,IAAIA,IAAI,IAAIA,IAAI,CAACz1E,SAAL,YAA0BihO,QAAtC,EAAgD;AACrD1iM,IAAAA,EAAE,GAAG,IAAIk3C,IAAJ,EAAL;AACD,GAFM,MAEA,IAAI,0BAAWA,IAAX,CAAJ,EAAsB;AAC3Bl3C,IAAAA,EAAE,GAAG,IAAI0iM,QAAJ,CAAa,IAAb,EAAmBxrJ,IAAnB,CAAL;AACD,GAFM,MAEA;AACL/wB,IAAAA,KAAK,GAAG,CAAR;AACAnmB,IAAAA,EAAE,GAAG,IAAI0iM,QAAJ,CAAaxrJ,IAAb,EAAmBqZ,MAAnB,CAAL;AACD;;AAED,OAAK1lF,IAAL,CAAUm1B,EAAV;;AAEA,MAAImmB,KAAJ,EAAW;AACTw8K,IAAAA,KAAK,GAAGj+N,MAAR;AACAA,IAAAA,MAAM,GAAG6rF,MAAT;AACD;;AAED,MAAI7rF,MAAJ,EAAY,KAAK6uL,OAAL,CAAavzJ,EAAb,EAAiBA,EAAE,CAAC+iM,UAAH,CAAcr+N,MAAd,EAAsBi+N,KAAtB,CAAjB;AACZ,OAAKiB,KAAL,CAAW5jM,EAAX;AACA,SAAOA,EAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuzJ,OAAT,CAAkB37I,MAAlB,EAA0BisL,OAA1B,EAAmC;AACjC,QAAMC,UAAU,GAAGlsL,MAAM,CAAC/sC,IAA1B;AAAA,QACM0E,CAAC,GAAGs0N,OAAO,CAACljO,MADlB;;AAGA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,QAAIyiO,UAAU,GAAGD,OAAO,CAACxiO,CAAD,CAAP,CAAWwJ,IAA5B,EAAkC;AAChC,WAAKk5N,MAAL,CAAYnsL,MAAZ;AACA;AACD;AACF;AACF;;AAED,IAAIosL,SAAS,GAAG,CAAhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,WAAT,CAAqBznN,MAArB,EAA6B9a,KAA7B,EAAoCwiO,OAApC,EAA6C;AAC3C,OAAK5vN,EAAL,GAAU,EAAE0vN,SAAZ;AACA,OAAK3/N,KAAL,GAAa,IAAb;AACA,MAAI6/N,OAAJ,EAAa,KAAKA,OAAL,GAAeA,OAAf;AACb,MAAI1nN,MAAJ,EAAY,KAAK2nN,OAAL,GAAe3nN,MAAf;AACZ,MAAI9a,KAAJ,EAAW,KAAK0iO,MAAL,GAAc1iO,KAAd;AACZ;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASuoL,MAAT,CAAgBztK,MAAhB,EAAwB9a,KAAxB,EAA+BwiO,OAA/B,EAAwC;AACtC,SAAO,IAAID,WAAJ,CAAgBznN,MAAhB,EAAwB9a,KAAxB,EAA+BwiO,OAA/B,CAAP;AACD;;AACDD,WAAW,CAACxiO,SAAZ,GAAwB;AACtB0iO,EAAAA,OAAO,EAAE1uB,gBADa;AAEtB2uB,EAAAA,MAAM,EAAE9iG,kBAFc;;AAItBpsC,EAAAA,OAAO,GAAG;AACR,WAAO,KAAK+tI,QAAL,KAAkB,KAAKA,QAAL,GAAgBzC,UAAU,CAAClsN,YAAD,CAA5C,CAAP;AACD,GANqB;;AAQtB+vN,EAAAA,OAAO,CAACr8M,CAAD,EAAI;AACT,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAAC,CAAC,KAAK2jO,QAAd;AACvB,SAAKA,QAAL,GAAgB,CAAC,CAACt8M,CAAlB;AACA,WAAO,IAAP;AACD,GAZqB;;AActBk8M,EAAAA,OAAO,CAACxrB,GAAD,EAAM;AACX,QAAI,KAAKyrB,OAAL,CAAazrB,GAAb,CAAJ,EAAuB;AACrB,YAAM/wM,GAAG,GAAG,KAAKtD,KAAL,GAAa,KAAK+/N,MAAL,CAAY1rB,GAAZ,CAAzB;AAAA,YACM6rB,GAAG,GAAG,KAAKtB,QADjB;AAAA,YAEM1zN,CAAC,GAAGg1N,GAAG,GAAGA,GAAG,CAAC5jO,MAAP,GAAgB,CAF7B;;AAIA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4BkjO,GAAG,CAACljO,CAAD,CAAH,CAAO6iO,OAAP,CAAev8N,GAAf;;AAE5B,UAAI,KAAK28N,QAAT,EAAmB;AACjB5rB,QAAAA,GAAG,CAACpoL,cAAJ;AACAooL,QAAAA,GAAG,CAAC8rB,eAAJ;AACD;AACF;AACF,GA3BqB;;AA6BtBhoN,EAAAA,MAAM,CAACA,MAAD,EAAS;AACb,UAAM3X,CAAC,GAAGolL,MAAM,CAACztK,MAAD,CAAhB;AACA,SAAK04E,OAAL,GAAelzE,GAAf,CAAmBnd,CAAnB;AACA,WAAOA,CAAP;AACD,GAjCqB;;AAmCtBnD,EAAAA,KAAK,CAACA,KAAD,EAAQ;AACX,UAAMmD,CAAC,GAAGolL,MAAM,CAAC,IAAD,EAAOvoL,KAAP,CAAhB;AACA,SAAKwzF,OAAL,GAAelzE,GAAf,CAAmBnd,CAAnB;AACA,WAAOA,CAAP;AACD,GAvCqB;;AAyCtBw2M,EAAAA,KAAK,GAAG;AACN,UAAMx2M,CAAC,GAAGolL,MAAM,EAAhB;AACA,SAAK/0F,OAAL,GAAelzE,GAAf,CAAmBnd,CAAnB;;AAEA,SAAK,IAAIxD,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGnO,SAAS,CAACT,MAA9B,EAAsCU,CAAC,GAAGkO,CAA1C,EAA6C,EAAElO,CAA/C,EAAkD;AAChDD,MAAAA,SAAS,CAACC,CAAD,CAAT,CAAa6zF,OAAb,GAAuBlzE,GAAvB,CAA2Bnd,CAA3B;AACD;;AAED,WAAOA,CAAP;AACD,GAlDqB;;AAoDtB4/N,EAAAA,QAAQ,CAACC,KAAD,EAAQ;AACd,QAAI3/N,CAAC,GAAG,CAAC,CAAT;AACA,WAAO,KAAKyX,MAAL,CAAY,MAAM;AACvB,YAAMlO,GAAG,GAAG6oE,IAAI,CAAC7oE,GAAL,EAAZ;;AAEA,UAAIA,GAAG,GAAGvJ,CAAN,GAAU2/N,KAAd,EAAqB;AACnB3/N,QAAAA,CAAC,GAAGuJ,GAAJ;AACA,eAAO,CAAP;AACD,OAHD,MAGO;AACL,eAAO,CAAP;AACD;AACF,KATM,CAAP;AAUD,GAhEqB;;AAkEtBmqH,EAAAA,QAAQ,CAAC+/E,KAAD,EAAQ;AACd,UAAM3zM,CAAC,GAAGolL,MAAM,EAAhB;AACA,SAAK/0F,OAAL,GAAelzE,GAAf,CAAmBioK,MAAM,CAAC,IAAD,EAAO,IAAP,EAAa,wBAASuuB,KAAT,EAAgBz4M,CAAC,IAAI;AACzD,YAAM4gO,EAAE,GAAG5gO,CAAC,CAAC4kO,QAAb;AACA9/N,MAAAA,CAAC,CAACq/N,OAAF,CAAUnkO,CAAV;AACA,UAAI4gO,EAAE,IAAIA,EAAE,CAAC3/N,GAAb,EAAkB2/N,EAAE,CAAC3/N,GAAH;AACnB,KAJqC,CAAb,CAAzB;AAKA,WAAO6D,CAAP;AACD,GA1EqB;;AA4EtB+/N,EAAAA,OAAO,CAACr8N,CAAD,EAAI6G,CAAJ,EAAO;AACZ,QAAIy1N,MAAM,GAAG,KAAb;AACAt8N,IAAAA,CAAC,CAAC2sF,OAAF,GAAYlzE,GAAZ,CAAgBioK,MAAM,CAAC,IAAD,EAAO,IAAP,EAAa,MAAM46C,MAAM,GAAG,IAA5B,CAAtB;AACAz1N,IAAAA,CAAC,CAAC8lF,OAAF,GAAYlzE,GAAZ,CAAgBioK,MAAM,CAAC,IAAD,EAAO,IAAP,EAAa,MAAM46C,MAAM,GAAG,KAA5B,CAAtB;AACA,WAAO,KAAKroN,MAAL,CAAY,MAAMqoN,MAAlB,CAAP;AACD,GAjFqB;;AAmFtBpB,EAAAA,MAAM,GAAG,CAAC;AACR;AACD;;AArFqB,CAAxB;AAyFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASzoC,MAAT,CAAiB7jI,MAAjB,EAAyB71C,IAAzB,EAA+B9E,MAA/B,EAAuC9a,KAAvC,EAA8C;AAC5C,QAAMi/N,EAAE,GAAG,IAAX;AAAA,QACM97N,CAAC,GAAGolL,MAAM,CAACztK,MAAD,EAAS9a,KAAT,CADhB;AAAA,QAEMojO,IAAI,GAAG,UAAU/kO,CAAV,EAAa;AACxBA,IAAAA,CAAC,CAAC4kO,QAAF,GAAahE,EAAb;;AAEA,QAAI;AACF97N,MAAAA,CAAC,CAACq/N,OAAF,CAAUnkO,CAAV;AACD,KAFD,CAEE,OAAO2lB,KAAP,EAAc;AACdi7M,MAAAA,EAAE,CAACj7M,KAAH,CAASA,KAAT;AACD,KAJD,SAIU;AACRi7M,MAAAA,EAAE,CAAC3/N,GAAH;AACD;AACF,GAZD;;AAcA,MAAI6iO,OAAJ;;AAEA,MAAI,OAAO1sK,MAAP,KAAkB,QAAlB,IAA8B,OAAO1oC,QAAP,KAAoB,WAAtD,EAAmE;AACjEo1M,IAAAA,OAAO,GAAGp1M,QAAQ,CAACs2M,gBAAT,CAA0B5tK,MAA1B,CAAV;AACD,GAFD,MAEO;AACL0sK,IAAAA,OAAO,GAAG,qBAAM1sK,MAAN,CAAV;AACD;;AAED,QAAM5nD,CAAC,GAAGs0N,OAAO,CAACljO,MAAlB;;AAEA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BwiO,IAAAA,OAAO,CAACxiO,CAAD,CAAP,CAAW+uB,gBAAX,CAA4B9O,IAA5B,EAAkCwjN,IAAlC;AACD;;AAED,SAAOjgO,CAAP;AACD;;AAED,SAAS0+C,KAAT,CAAelzC,IAAf,EAAqBuzG,MAArB,EAA6B;AAC3B,QAAMwnG,MAAM,GAAG,KAAKA,MAAL,EAAf;AACA,SAAO,sBAAK/6M,IAAL,EAAWuzG,MAAX,EAAmBwnG,MAAM,CAAC+S,SAA1B,EAAqC/S,MAAM,CAACoS,QAA5C,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASwH,QAAT,CAAkBptL,MAAlB,EAA0BvnC,IAA1B,EAAgCuzG,MAAhC,EAAwC;AACtCvzG,EAAAA,IAAI,GAAG,KAAKkzC,KAAL,CAAWlzC,IAAX,EAAiBuzG,MAAjB,CAAP;AACA,SAAO,KAAKi+G,KAAL,CAAWjqL,MAAX,EAAmB,KAAK0pL,SAAL,GAAiBI,MAAjB,CAAwBrxN,IAAxB,CAAnB,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,eAAeynL,OAAf,CAAuBr6E,GAAvB,EAA4BmG,MAA5B,EAAoC;AAClC,QAAM+8G,EAAE,GAAG,IAAX;AACA,MAAIhtM,MAAM,GAAG,CAAb;AAAA,MACItjB,IADJ;;AAGA,MAAI;AACFA,IAAAA,IAAI,GAAG,MAAMswN,EAAE,CAACJ,MAAH,GAAYnhH,IAAZ,CAAiB3B,GAAjB,EAAsB;AACjC41D,MAAAA,OAAO,EAAE,UADwB;AAEjCzqD,MAAAA,QAAQ,EAAE,8BAAahF,MAAM,IAAIA,MAAM,CAACtiG,IAA9B;AAFuB,KAAtB,CAAb;;AAKA,QAAI;AACFjR,MAAAA,IAAI,GAAGswN,EAAE,CAACp9K,KAAH,CAASlzC,IAAT,EAAeuzG,MAAf,CAAP;AACD,KAFD,CAEE,OAAOn/F,GAAP,EAAY;AACZkP,MAAAA,MAAM,GAAG,CAAC,CAAV;AACAgtM,MAAAA,EAAE,CAACl9N,IAAH,CAAQ,uBAAR,EAAiCg6G,GAAjC,EAAsCh5F,GAAtC;AACD;AACF,GAZD,CAYE,OAAOA,GAAP,EAAY;AACZkP,IAAAA,MAAM,GAAG,CAAC,CAAV;AACAgtM,IAAAA,EAAE,CAACl9N,IAAH,CAAQ,gBAAR,EAA0Bg6G,GAA1B,EAA+Bh5F,GAA/B;AACD;;AAED,SAAO;AACLpU,IAAAA,IADK;AAELsjB,IAAAA;AAFK,GAAP;AAID;;AACD,eAAesxM,OAAf,CAAuBrtL,MAAvB,EAA+B6lE,GAA/B,EAAoCmG,MAApC,EAA4C;AAC1C,QAAM+8G,EAAE,GAAG,IAAX;AAAA,QACMuE,OAAO,GAAGvE,EAAE,CAACwE,QAAH,IAAeC,WAAW,CAACzE,EAAD,CAD1C;AAEAuE,EAAAA,OAAO,CAAC78G,QAAR,IAAoB,CAApB;AACA,QAAM1iG,GAAG,GAAG,MAAMg7M,EAAE,CAAC7oC,OAAH,CAAWr6E,GAAX,EAAgBmG,MAAhB,CAAlB;AACA+8G,EAAAA,EAAE,CAACkB,KAAH,CAASjqL,MAAT,EAAiB+oL,EAAE,CAACW,SAAH,GAAe9sJ,MAAf,CAAsBihI,gBAAtB,EAA8BisB,MAA9B,CAAqC/7M,GAAG,CAACtV,IAAJ,IAAY,EAAjD,CAAjB;AACA60N,EAAAA,OAAO,CAAC1+N,IAAR;AACA,SAAOmf,GAAP;AACD;;AAED,SAASy/M,WAAT,CAAqBzE,EAArB,EAAyB;AACvB,MAAI7jB,MAAJ;AACA,QAAMooB,OAAO,GAAG,IAAIl7N,OAAJ,CAAYzB,CAAC,IAAIu0M,MAAM,GAAGv0M,CAA1B,CAAhB;AACA28N,EAAAA,OAAO,CAAC78G,QAAR,GAAmB,CAAnB;;AAEA68G,EAAAA,OAAO,CAAC1+N,IAAR,GAAe,MAAM;AACnB,QAAI,EAAE0+N,OAAO,CAAC78G,QAAV,KAAuB,CAA3B,EAA8B;AAC5Bs4G,MAAAA,EAAE,CAACwE,QAAH,GAAc,IAAd;AACAroB,MAAAA,MAAM,CAAC6jB,EAAD,CAAN;AACD;AACF,GALD;;AAOA,SAAOA,EAAE,CAACwE,QAAH,GAAcD,OAArB;AACD;;AAED,MAAMG,MAAM,GAAG;AACb92C,EAAAA,IAAI,EAAE;AADO,CAAf;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASrsL,EAAT,CAAai1D,MAAb,EAAqBvf,MAArB,EAA6B24C,MAA7B,EAAqC7rF,MAArC,EAA6CszE,OAA7C,EAAsD;AACpD,QAAM1yD,EAAE,GAAG6xC,MAAM,YAAYurK,QAAlB,GAA6B4C,UAA7B,GAA0CC,QAArD;AACAjgN,EAAAA,EAAE,CAAC,IAAD,EAAO6xC,MAAP,EAAevf,MAAf,EAAuB24C,MAAvB,EAA+B7rF,MAA/B,EAAuCszE,OAAvC,CAAF;AACA,SAAO,IAAP;AACD;;AAED,SAASutJ,QAAT,CAAkB5E,EAAlB,EAAsB12C,MAAtB,EAA8BryI,MAA9B,EAAsC24C,MAAtC,EAA8C7rF,MAA9C,EAAsDszE,OAAtD,EAA+D;AAC7D,QAAMs9H,GAAG,GAAG,sBAAO,EAAP,EAAWt9H,OAAX,EAAoBqtJ,MAApB,CAAZ;AACA,MAAInyM,IAAJ,EAAU8M,EAAV;AACA,MAAI,CAAC,0BAAW4X,MAAX,CAAL,EAAyBA,MAAM,GAAG,wBAASA,MAAT,CAAT;;AAEzB,MAAI24C,MAAM,KAAKgmC,SAAf,EAA0B;AACxBrjG,IAAAA,IAAI,GAAGnzB,CAAC,IAAI4gO,EAAE,CAACiD,KAAH,CAAShsL,MAAM,CAAC73C,CAAD,CAAf,CAAZ;AACD,GAFD,MAEO,IAAI,0BAAWwwF,MAAX,CAAJ,EAAwB;AAC7BvwD,IAAAA,EAAE,GAAG,IAAI0iM,QAAJ,CAAa,IAAb,EAAmBnyI,MAAnB,EAA2B7rF,MAA3B,EAAmC,KAAnC,CAAL;;AAEAwuB,IAAAA,IAAI,GAAGnzB,CAAC,IAAI;AACVigC,MAAAA,EAAE,CAAC8lH,QAAH,CAAY/lJ,CAAZ;AACA,YAAMgF,CAAC,GAAG6yC,MAAM,CAAC73C,CAAD,CAAhB;AAAA,YACMwT,CAAC,GAAGysB,EAAE,CAAC37B,KADb;AAEAg9N,MAAAA,WAAW,CAAC9tN,CAAD,CAAX,GAAiBotN,EAAE,CAACkB,KAAH,CAAS98N,CAAT,EAAYwO,CAAZ,EAAeykE,OAAf,CAAjB,GAA2C2oJ,EAAE,CAACpwI,MAAH,CAAUxrF,CAAV,EAAawO,CAAb,EAAgB+hM,GAAhB,CAA3C;AACD,KALD;AAMD,GATM,MASA;AACLpiL,IAAAA,IAAI,GAAGnzB,CAAC,IAAI4gO,EAAE,CAACpwI,MAAH,CAAU34C,MAAM,CAAC73C,CAAD,CAAhB,EAAqBwwF,MAArB,EAA6B+kH,GAA7B,CAAZ;AACD;;AAEDrrB,EAAAA,MAAM,CAACvoL,KAAP,CAAawxB,IAAb;AACD;;AAED,SAASoyM,UAAT,CAAoB3E,EAApB,EAAwBxpK,MAAxB,EAAgCvf,MAAhC,EAAwC24C,MAAxC,EAAgD7rF,MAAhD,EAAwDszE,OAAxD,EAAiE;AAC/D,MAAIuY,MAAM,KAAKgmC,SAAf,EAA0B;AACxBp/D,IAAAA,MAAM,CAAC+9B,OAAP,GAAiBlzE,GAAjB,CAAqB41B,MAArB;AACD,GAFD,MAEO;AACL,UAAM09J,GAAG,GAAGt9H,OAAO,IAAI,EAAvB;AAAA,UACMh4C,EAAE,GAAG,IAAI0iM,QAAJ,CAAa,IAAb,EAAmB8C,OAAO,CAAC5tL,MAAD,EAAS24C,MAAT,CAA1B,EAA4C7rF,MAA5C,EAAoD,KAApD,CADX;AAEAs7B,IAAAA,EAAE,CAACoiM,QAAH,CAAY9sB,GAAG,CAAC6sB,KAAhB;AACAniM,IAAAA,EAAE,CAACn1B,IAAH,GAAUssD,MAAM,CAACtsD,IAAjB,CAJK,CAIkB;;AAEvBssD,IAAAA,MAAM,CAAC+9B,OAAP,GAAiBlzE,GAAjB,CAAqBge,EAArB,EANK,CAMqB;;AAE1B,QAAI4X,MAAJ,EAAY;AACV5X,MAAAA,EAAE,CAACuuJ,IAAH,CAAQ,IAAR,EADU,CACK;;AAEfvuJ,MAAAA,EAAE,CAAC37B,KAAH,GAAWuzC,MAAM,CAACvzC,KAAlB,CAHU,CAGe;;AAEzB27B,MAAAA,EAAE,CAACk1D,OAAH,GAAalzE,GAAb,CAAiB41B,MAAjB,EALU,CAKgB;;AAE1B+oL,MAAAA,EAAE,CAACptC,OAAH,CAAW37I,MAAX,EAAmB,CAAC5X,EAAD,CAAnB,EAPU,CAOgB;AAC3B;AACF;AACF;;AAED,SAASwlM,OAAT,CAAiB5tL,MAAjB,EAAyB24C,MAAzB,EAAiC;AAC/BA,EAAAA,MAAM,GAAG,0BAAWA,MAAX,IAAqBA,MAArB,GAA8B,wBAASA,MAAT,CAAvC;AACA,SAAO34C,MAAM,GAAG,UAAU5vB,CAAV,EAAa65M,KAAb,EAAoB;AAClC,UAAMx9N,KAAK,GAAGksF,MAAM,CAACvoE,CAAD,EAAI65M,KAAJ,CAApB;;AAEA,QAAI,CAACjqL,MAAM,CAAC22I,IAAP,EAAL,EAAoB;AAClB32I,MAAAA,MAAM,CAAC22I,IAAP,CAAYlqL,KAAK,KAAK,KAAKA,KAA3B,EAAkCA,KAAlC,GAA0CA,KAA1C;AACD;;AAED,WAAOA,KAAP;AACD,GARY,GAQTksF,MARJ;AASD;AAED;AACA;AACA;AACA;AACA;;;AAEA,SAAS1lF,IAAT,CAAcm1B,EAAd,EAAkB;AAChBA,EAAAA,EAAE,CAACn1B,IAAH,GAAU,EAAE,KAAK46N,KAAjB;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS1B,MAAT,CAAgB/jM,EAAhB,EAAoB;AAClB,QAAM1/B,KAAK,GAAG,CAAC0/B,EAAD,CAAd;AACA,MAAI8hM,GAAJ,EAASpgN,IAAT,EAAergB,CAAf;;AAEA,SAAOf,KAAK,CAACK,MAAb,EAAqB;AACnB,SAAKkK,IAAL,CAAUi3N,GAAG,GAAGxhO,KAAK,CAACmrB,GAAN,EAAhB;;AAEA,QAAI/J,IAAI,GAAGogN,GAAG,CAACmB,QAAf,EAAyB;AACvB,WAAK5hO,CAAC,GAAGqgB,IAAI,CAAC/gB,MAAd,EAAsB,EAAEU,CAAF,IAAO,CAA7B,GAAiC;AAC/Bf,QAAAA,KAAK,CAACgB,IAAN,CAAWwgO,GAAG,GAAGpgN,IAAI,CAACrgB,CAAD,CAArB;AACA,YAAIygO,GAAG,KAAK9hM,EAAZ,EAAgB,qBAAM,mCAAN;AACjB;AACF;AACF;AACF;AAED;AACA;AACA;;;AAEA,MAAM0jM,eAAe,GAAG,EAAxB,EAA4B;;AAE5B,MAAMx+K,GAAG,GAAG,KAAK,CAAjB;AAAA,MACMwgL,GAAG,GAAG,KAAK,CADjB;AAAA,MAEMC,GAAG,GAAG,KAAK,CAFjB;AAAA,MAGMC,OAAO,GAAG1gL,GAAG,GAAGwgL,GAHtB;AAAA,MAIMG,OAAO,GAAG3gL,GAAG,GAAGygL,GAJtB;AAAA,MAKMG,GAAG,GAAG5gL,GAAG,GAAGwgL,GAAN,GAAYC,GALxB;AAAA,MAMMI,MAAM,GAAG,KAAK,CANpB;AAAA,MAOMC,MAAM,GAAG,KAAK,CAPpB;AAAA,MAQMC,SAAS,GAAG,KAAK,CARvB;AAAA,MASMC,SAAS,GAAG,KAAK,CATvB;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,KAAT,CAAexB,QAAf,EAAyB/B,KAAzB,EAAgC/zN,MAAhC,EAAwC;AACtC,OAAK81N,QAAL,GAAgBA,QAAhB;AACA,OAAK/B,KAAL,GAAaA,KAAK,IAAI,IAAT,GAAgB,CAAC,CAAjB,GAAqBA,KAAlC;AACA,OAAK5gN,GAAL,GAAW,EAAX;AACA,OAAKkhF,GAAL,GAAW,EAAX;AACA,OAAK1qF,GAAL,GAAW,EAAX;AACA,OAAK2mC,MAAL,GAAc,IAAd;AACA,OAAKtwC,MAAL,GAAcA,MAAM,IAAI,IAAxB;AACD;;AAED,SAASu3N,WAAT,CAAqB/1N,IAArB,EAA2BmM,MAA3B,EAAmC;AACjC,QAAMkL,GAAG,GAAG,EAAZ;AACA,4BAAWrX,IAAX,EAAiBmM,MAAjB,EAAyBwL,CAAC,IAAIN,GAAG,CAACpmB,IAAJ,CAAS0mB,CAAT,CAA9B;AACA,SAAON,GAAP;AACD;;AAED,SAASlL,MAAT,CAAgBqlN,KAAhB,EAAuB59N,KAAvB,EAA8B;AAC5B,QAAM6G,GAAG,GAAG,EAAZ;AACA+2N,EAAAA,KAAK,CAACwE,KAAN,CAAYpiO,KAAZ,EAAmBc,CAAC,IAAI;AACtB+F,IAAAA,GAAG,CAACi2N,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,CAAlB;AACD,GAFD;AAGA,SAAOA,CAAC,IAAI+F,GAAG,CAACi2N,OAAO,CAACh8N,CAAD,CAAR,CAAH,GAAkB,IAAlB,GAAyBA,CAArC;AACD;;AAED,SAASuhO,SAAT,CAAmB/9N,CAAnB,EAAsB6G,CAAtB,EAAyB;AACvB,SAAO7G,CAAC,GAAG,CAACxD,CAAD,EAAI1D,CAAJ,KAAUkH,CAAC,CAACxD,CAAD,EAAI1D,CAAJ,CAAD,IAAW+N,CAAC,CAACrK,CAAD,EAAI1D,CAAJ,CAAzB,GAAkC+N,CAA1C;AACD;;AAED+2N,KAAK,CAAC1kO,SAAN,GAAkB;AAChB;AACF;AACA;AACEiiO,EAAAA,eAJgB;;AAMhB;AACF;AACA;AACEx+K,EAAAA,GATgB;;AAWhB;AACF;AACA;AACEwgL,EAAAA,GAdgB;;AAgBhB;AACF;AACA;AACEC,EAAAA,GAnBgB;;AAqBhB;AACF;AACA;AACEC,EAAAA,OAxBgB;;AA0BhB;AACF;AACA;AACEC,EAAAA,OA7BgB;;AA+BhB;AACF;AACA;AACEC,EAAAA,GAlCgB;;AAoChB;AACF;AACA;AACA;AACEC,EAAAA,MAxCgB;;AA0ChB;AACF;AACA;AACA;AACEC,EAAAA,MA9CgB;;AAgDhB;AACF;AACA;AACA;AACEC,EAAAA,SApDgB;;AAsDhB;AACF;AACA;AACA;AACEC,EAAAA,SA1DgB;;AA4DhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEK,EAAAA,IAAI,CAACtiO,KAAD,EAAQ;AACV,WAAO,IAAIkiO,KAAJ,CAAU,KAAKxB,QAAf,EAAyBztJ,IAAzB,CAA8B,IAA9B,EAAoCjzE,KAApC,CAAP;AACD,GAzEe;;AA2EhB;AACF;AACA;AACA;AACA;AACA;AACA;AACEgS,EAAAA,KAAK,GAAG;AACN,UAAM0vB,CAAC,GAAG,KAAK4gM,IAAL,CAAUT,GAAV,CAAV;AACAngM,IAAAA,CAAC,CAAC3jB,GAAF,GAAQ2jB,CAAC,CAAC3jB,GAAF,CAAMtX,KAAN,EAAR;AACAi7B,IAAAA,CAAC,CAACu9D,GAAF,GAAQv9D,CAAC,CAACu9D,GAAF,CAAMx4F,KAAN,EAAR;AACAi7B,IAAAA,CAAC,CAACntB,GAAF,GAAQmtB,CAAC,CAACntB,GAAF,CAAM9N,KAAN,EAAR;AACA,QAAIi7B,CAAC,CAACwxB,MAAN,EAAcxxB,CAAC,CAACwxB,MAAF,GAAWxxB,CAAC,CAACwxB,MAAF,CAASzsD,KAAT,EAAX;AACd,WAAOi7B,CAAC,CAACygM,WAAF,CAAcN,GAAG,GAAGE,MAApB,CAAP;AACD,GAzFe;;AA2FhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEQ,EAAAA,MAAM,GAAG;AACP,QAAI7gM,CAAC,GAAG,IAAR;AACA,UAAM8gM,KAAK,GAAG,CAAC9gM,CAAC,CAACwxB,MAAH,IAAaxxB,CAAC,CAAC3jB,GAAF,KAAU2jB,CAAC,CAACu9D,GAAzB,CAA6B;AAA7B,OACX,CAACv9D,CAAC,CAACu9D,GAAF,CAAMviG,MAAP,IAAiBglC,CAAC,CAACwxB,MAAF,CAASx2D,MAAT,KAAoBglC,CAAC,CAAC3jB,GAAF,CAAMrhB,MAD9C;;AAGA,QAAI8lO,KAAJ,EAAW;AACT,aAAO9gM,CAAP;AACD,KAFD,MAEO;AACLA,MAAAA,CAAC,GAAG,IAAIwgM,KAAJ,CAAU,KAAKxB,QAAf,EAAyBztJ,IAAzB,CAA8B,IAA9B,CAAJ;AACAvxC,MAAAA,CAAC,CAAC3jB,GAAF,GAAQ2jB,CAAC,CAACwxB,MAAV;AACAxxB,MAAAA,CAAC,CAACu9D,GAAF,GAAQ,EAAR,CAHK,CAGO;;AAEZ,aAAOv9D,CAAP;AACD;AACF,GAnHe;;AAqHhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEuxC,EAAAA,IAAI,CAACg/G,GAAD,EAAMjyL,KAAN,EAAa;AACf,UAAM0hC,CAAC,GAAG,IAAV;AACAA,IAAAA,CAAC,CAACi9L,KAAF,GAAU1sC,GAAG,CAAC0sC,KAAd;AACAj9L,IAAAA,CAAC,CAAC92B,MAAF,GAAWqnL,GAAG,CAACrnL,MAAf;;AAEA,QAAIqnL,GAAG,CAAC/2I,MAAJ,IAAc,EAAEl7C,KAAK,GAAGiiO,SAAV,CAAlB,EAAwC;AACtCvgM,MAAAA,CAAC,CAACwZ,MAAF,GAAW+2I,GAAG,CAAC/2I,MAAf;AACD;;AAED,QAAIl7C,KAAK,GAAGihD,GAAZ,EAAiB;AACfvf,MAAAA,CAAC,CAAC+gM,IAAF,GAASxwC,GAAG,CAACwwC,IAAb;AACA/gM,MAAAA,CAAC,CAAC3jB,GAAF,GAAQk0K,GAAG,CAACl0K,GAAZ;AACD,KAHD,MAGO;AACL2jB,MAAAA,CAAC,CAAC+gM,IAAF,GAAS,IAAT;AACA/gM,MAAAA,CAAC,CAAC3jB,GAAF,GAAQ,EAAR;AACD;;AAED,QAAI/d,KAAK,GAAGyhO,GAAZ,EAAiB;AACf//L,MAAAA,CAAC,CAACghM,IAAF,GAASzwC,GAAG,CAACywC,IAAb;AACAhhM,MAAAA,CAAC,CAACu9D,GAAF,GAAQgzF,GAAG,CAAChzF,GAAZ;AACD,KAHD,MAGO;AACLv9D,MAAAA,CAAC,CAACghM,IAAF,GAAS,IAAT;AACAhhM,MAAAA,CAAC,CAACu9D,GAAF,GAAQ,EAAR;AACD;;AAED,QAAIj/F,KAAK,GAAG0hO,GAAZ,EAAiB;AACfhgM,MAAAA,CAAC,CAACihM,IAAF,GAAS1wC,GAAG,CAAC0wC,IAAb;AACAjhM,MAAAA,CAAC,CAACntB,GAAF,GAAQ09K,GAAG,CAAC19K,GAAZ;AACD,KAHD,MAGO;AACLmtB,MAAAA,CAAC,CAACihM,IAAF,GAAS,IAAT;AACAjhM,MAAAA,CAAC,CAACntB,GAAF,GAAQ,EAAR;AACD;;AAED,QAAIvU,KAAK,GAAGgiO,SAAZ,EAAuB;AACrBtgM,MAAAA,CAAC,CAACkhM,IAAF,GAAS,IAAT;AACAlhM,MAAAA,CAAC,CAACwxB,MAAF,GAAW,IAAX;AACD,KAHD,MAGO;AACLxxB,MAAAA,CAAC,CAACkhM,IAAF,GAAS3wC,GAAG,CAAC2wC,IAAb;AACAlhM,MAAAA,CAAC,CAACwxB,MAAF,GAAW++H,GAAG,CAAC/+H,MAAf;AACA,UAAI++H,GAAG,CAAC4wC,MAAR,EAAgBnhM,CAAC,CAACmhM,MAAF,GAAW5wC,GAAG,CAAC4wC,MAAf;AACjB;;AAED,WAAOnhM,CAAP;AACD,GA7Ke;;AA+KhB;AACF;AACA;AACA;AACEohM,EAAAA,QAAQ,CAAC7zM,IAAD,EAAO;AACb,SAAKyxM,QAAL,CAAcoC,QAAd,CAAuB7zM,IAAvB;AACD,GArLe;;AAuLhB;AACF;AACA;AACA;AACA;AACA;AACA;AACE81K,EAAAA,OAAO,CAAC/kM,KAAD,EAAQ;AACb,UAAM+I,CAAC,GAAG/I,KAAK,IAAI6hO,GAAnB;AACA,WAAO94N,CAAC,GAAGk4C,GAAJ,IAAW,KAAKljC,GAAL,CAASrhB,MAApB,IAA8BqM,CAAC,GAAG04N,GAAJ,IAAW,KAAKxiI,GAAL,CAASviG,MAAlD,IAA4DqM,CAAC,GAAG24N,GAAJ,IAAW,KAAKntN,GAAL,CAAS7X,MAAvF;AACD,GAjMe;;AAmMhB;AACF;AACA;AACA;AACA;AACA;AACA;AACE8gO,EAAAA,MAAM,CAAC8E,IAAD,EAAO;AACX,QAAIA,IAAJ,EAAU,OAAO,KAAKA,IAAL,CAAUT,GAAV,EAAerE,MAAf,EAAP;AACV,UAAM1gO,GAAG,GAAG,KAAKihB,GAAL,CAASrhB,MAArB;AAAA,UACMu1L,GAAG,GAAG,KAAK/+H,MAAL,IAAe,KAAKA,MAAL,CAAYx2D,MADvC;;AAGA,QAAIu1L,GAAG,IAAIA,GAAG,KAAKn1L,GAAnB,EAAwB;AACtB,WAAKyX,GAAL,GAAW,KAAK2+C,MAAhB;AACA,UAAIp2D,GAAJ,EAAS,KAAKyb,MAAL,CAAYmpN,GAAZ,EAAiBnpN,MAAM,CAAC,IAAD,EAAO0oC,GAAP,CAAvB;AACV;;AAED,WAAO,IAAP;AACD,GArNe;;AAuNhB;AACF;AACA;AACA;AACEwnJ,EAAAA,KAAK,CAACroM,KAAD,EAAQ;AACX,QAAIjD,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKmmO,MAAL,GAAc,CAAC,CAACziO,KAAhB;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKyiO,MAAZ;AACD;AACF,GAlOe;;AAoOhB;AACF;AACA;AACA;AACA;AACA;AACE/E,EAAAA,QAAQ,CAAC/5M,CAAD,EAAI;AACV,UAAMg/M,IAAI,GAAG,KAAK7nL,MAAL,KAAgB,KAAKA,MAAL,GAAc,EAA9B,CAAb;;AAEA,QAAI,uBAAQn3B,CAAR,CAAJ,EAAgB;AACdA,MAAAA,CAAC,CAAC7iB,OAAF,CAAU6H,CAAC,IAAIg6N,IAAI,CAACh6N,CAAD,CAAJ,GAAU,IAAzB;AACD,KAFD,MAEO;AACLg6N,MAAAA,IAAI,CAACh/M,CAAD,CAAJ,GAAU,IAAV;AACD;;AAED,WAAO,IAAP;AACD,GApPe;;AAsPhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEo6M,EAAAA,QAAQ,CAACp6M,CAAD,EAAIi/M,KAAJ,EAAW;AACjB,UAAM9nL,MAAM,GAAG,KAAKA,MAApB;AACA,WAAO,EAAE,CAAC8nL,KAAK,IAAI,KAAKzuN,GAAL,CAAS7X,MAAnB,KAA8Bw+C,MAAhC,IAA0C,KAA1C,GAAkD,CAAC/9C,SAAS,CAACT,MAAX,GAAoB,CAAC,CAACw+C,MAAtB,GAA+B,uBAAQn3B,CAAR,IAAaA,CAAC,CAAC3F,IAAF,CAAOrV,CAAC,IAAImyC,MAAM,CAACnyC,CAAD,CAAlB,CAAb,GAAsCmyC,MAAM,CAACn3B,CAAD,CAApI;AACD,GAlQe;;AAoQhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACExL,EAAAA,MAAM,CAACvY,KAAD,EAAQuY,MAAR,EAAgB;AACpB,UAAMmpB,CAAC,GAAG,IAAV;AACA,QAAI1hC,KAAK,GAAGihD,GAAZ,EAAiBvf,CAAC,CAAC+gM,IAAF,GAASJ,SAAS,CAAC3gM,CAAC,CAAC+gM,IAAH,EAASlqN,MAAT,CAAlB;AACjB,QAAIvY,KAAK,GAAGyhO,GAAZ,EAAiB//L,CAAC,CAACghM,IAAF,GAASL,SAAS,CAAC3gM,CAAC,CAACghM,IAAH,EAASnqN,MAAT,CAAlB;AACjB,QAAIvY,KAAK,GAAG0hO,GAAZ,EAAiBhgM,CAAC,CAACihM,IAAF,GAASN,SAAS,CAAC3gM,CAAC,CAACihM,IAAH,EAASpqN,MAAT,CAAlB;AACjB,QAAIvY,KAAK,GAAG+hO,MAAZ,EAAoBrgM,CAAC,CAACkhM,IAAF,GAASP,SAAS,CAAC3gM,CAAC,CAACkhM,IAAH,EAASrqN,MAAT,CAAlB;AACpB,WAAOmpB,CAAP;AACD,GA1Re;;AA4RhB;AACF;AACA;AACA;AACA;AACA;AACA;AACEygM,EAAAA,WAAW,CAACniO,KAAD,EAAQ;AACjBA,IAAAA,KAAK,GAAGA,KAAK,IAAI6hO,GAAjB;AACA,UAAMngM,CAAC,GAAG,IAAV;;AAEA,QAAI1hC,KAAK,GAAGihD,GAAR,IAAevf,CAAC,CAAC+gM,IAArB,EAA2B;AACzB/gM,MAAAA,CAAC,CAAC3jB,GAAF,GAAQokN,WAAW,CAACzgM,CAAC,CAAC3jB,GAAH,EAAQ2jB,CAAC,CAAC+gM,IAAV,CAAnB;AACA/gM,MAAAA,CAAC,CAAC+gM,IAAF,GAAS,IAAT;AACD;;AAED,QAAIziO,KAAK,GAAGyhO,GAAR,IAAe//L,CAAC,CAACghM,IAArB,EAA2B;AACzBhhM,MAAAA,CAAC,CAACu9D,GAAF,GAAQkjI,WAAW,CAACzgM,CAAC,CAACu9D,GAAH,EAAQv9D,CAAC,CAACghM,IAAV,CAAnB;AACAhhM,MAAAA,CAAC,CAACghM,IAAF,GAAS,IAAT;AACD;;AAED,QAAI1iO,KAAK,GAAG0hO,GAAR,IAAehgM,CAAC,CAACihM,IAArB,EAA2B;AACzBjhM,MAAAA,CAAC,CAACntB,GAAF,GAAQ4tN,WAAW,CAACzgM,CAAC,CAACntB,GAAH,EAAQmtB,CAAC,CAACihM,IAAV,CAAnB;AACAjhM,MAAAA,CAAC,CAACihM,IAAF,GAAS,IAAT;AACD;;AAED,QAAI3iO,KAAK,GAAG+hO,MAAR,IAAkBrgM,CAAC,CAACkhM,IAAxB,EAA8B;AAC5BlhM,MAAAA,CAAC,CAACwxB,MAAF,GAAWxxB,CAAC,CAACwxB,MAAF,CAAS36C,MAAT,CAAgBmpB,CAAC,CAACkhM,IAAlB,CAAX;AACAlhM,MAAAA,CAAC,CAACkhM,IAAF,GAAS,IAAT;AACD;;AAED,WAAOlhM,CAAP;AACD,GA5Te;;AA8ThB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE0gM,EAAAA,KAAK,CAACpiO,KAAD,EAAQg2M,OAAR,EAAiB;AACpB,UAAMt0K,CAAC,GAAG,IAAV;AAAA,UACMpyB,CAAC,GAAG0mM,OADV;;AAGA,QAAIh2M,KAAK,GAAG+hO,MAAZ,EAAoB;AAClB,gCAAWrgM,CAAC,CAACwxB,MAAb,EAAqBxxB,CAAC,CAACkhM,IAAvB,EAA6BtzN,CAA7B;AACA,aAAOoyB,CAAP;AACD;;AAED,QAAI1hC,KAAK,GAAGihD,GAAZ,EAAiB,0BAAWvf,CAAC,CAAC3jB,GAAb,EAAkB2jB,CAAC,CAAC+gM,IAApB,EAA0BnzN,CAA1B;AACjB,QAAItP,KAAK,GAAGyhO,GAAZ,EAAiB,0BAAW//L,CAAC,CAACu9D,GAAb,EAAkBv9D,CAAC,CAACghM,IAApB,EAA0BpzN,CAA1B;AACjB,QAAItP,KAAK,GAAG0hO,GAAZ,EAAiB,0BAAWhgM,CAAC,CAACntB,GAAb,EAAkBmtB,CAAC,CAACihM,IAApB,EAA0BrzN,CAA1B;AACjB,UAAM2iL,GAAG,GAAGvwJ,CAAC,CAACwxB,MAAd;;AAEA,QAAIlzD,KAAK,GAAG8hO,MAAR,IAAkB7vC,GAAtB,EAA2B;AACzB,YAAMtuL,GAAG,GAAG+9B,CAAC,CAAC3jB,GAAF,CAAMrhB,MAAN,GAAeglC,CAAC,CAACntB,GAAF,CAAM7X,MAAjC;AAEA,UAAIiH,GAAG,KAAKsuL,GAAG,CAACv1L,MAAhB,EAAwB,CAAxB,KAA+B,IAAIiH,GAAJ,EAAS;AACtC,kCAAWsuL,GAAX,EAAgB15K,MAAM,CAACmpB,CAAD,EAAIkgM,OAAJ,CAAtB,EAAoCtyN,CAApC;AACD,OAF8B,MAExB;AACL;AACA,kCAAW2iL,GAAX,EAAgBvwJ,CAAC,CAACkhM,IAAlB,EAAwBtzN,CAAxB;AACD;AACF;;AAED,WAAOoyB,CAAP;AACD;;AAhWe,CAAlB;AAoWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASuhM,UAAT,CAAoBvC,QAApB,EAA8B/B,KAA9B,EAAqCuE,MAArC,EAA6Ct4N,MAA7C,EAAqD;AACnD,QAAM82B,CAAC,GAAG,IAAV;AAAA,QACMp2B,CAAC,GAAG43N,MAAM,CAACxmO,MADjB;AAEA,MAAImN,CAAC,GAAG,CAAR;AACA,OAAK62N,QAAL,GAAgBA,QAAhB;AACA,OAAK/B,KAAL,GAAaA,KAAb;AACA,OAAKzjL,MAAL,GAAc,IAAd;AACA,OAAKtwC,MAAL,GAAcA,MAAM,IAAI,IAAxB;AACA,OAAKs4N,MAAL,GAAcA,MAAd;;AAEA,OAAK,IAAI9lO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,UAAMwgO,KAAK,GAAGsF,MAAM,CAAC9lO,CAAD,CAApB;AACA,QAAIwgO,KAAK,CAACe,KAAN,KAAgBA,KAApB,EAA2B;;AAE3B,QAAIf,KAAK,CAAC1iL,MAAV,EAAkB;AAChB,YAAM6nL,IAAI,GAAGrhM,CAAC,CAACwZ,MAAF,KAAaxZ,CAAC,CAACwZ,MAAF,GAAW,EAAxB,CAAb;;AAEA,WAAK,MAAMnyC,CAAX,IAAgB60N,KAAK,CAAC1iL,MAAtB,EAA8B;AAC5B6nL,QAAAA,IAAI,CAACh6N,CAAD,CAAJ,GAAU,CAAV;AACD;AACF;;AAED,QAAI60N,KAAK,CAAC74B,OAAN,CAAcrjK,CAAC,CAACuf,GAAhB,CAAJ,EAA0Bp3C,CAAC,IAAI63B,CAAC,CAACuf,GAAP;AAC1B,QAAI28K,KAAK,CAAC74B,OAAN,CAAcrjK,CAAC,CAAC+/L,GAAhB,CAAJ,EAA0B53N,CAAC,IAAI63B,CAAC,CAAC+/L,GAAP;AAC1B,QAAI7D,KAAK,CAAC74B,OAAN,CAAcrjK,CAAC,CAACggM,GAAhB,CAAJ,EAA0B73N,CAAC,IAAI63B,CAAC,CAACggM,GAAP;AAC3B;;AAED,OAAKyB,OAAL,GAAet5N,CAAf;AACD;;AACD,wBAASo5N,UAAT,EAAqBf,KAArB,EAA4B;AAC1B;AACF;AACA;AACA;AACA;AACEI,EAAAA,IAAI,CAACtiO,KAAD,EAAQ;AACV,UAAM0hC,CAAC,GAAG,IAAIwgM,KAAJ,CAAU,KAAKxB,QAAf,EAAyBztJ,IAAzB,CAA8B,IAA9B,EAAoCjzE,KAAK,GAAG,KAAKiiO,SAAjD,CAAV;;AAEA,QAAIjiO,KAAK,KAAKsyH,SAAd,EAAyB;AACvB,UAAItyH,KAAK,GAAG0hC,CAAC,CAACuf,GAAd,EAAmB,KAAKmhL,KAAL,CAAW1gM,CAAC,CAACuf,GAAb,EAAkBngD,CAAC,IAAI4gC,CAAC,CAAC3jB,GAAF,CAAM1gB,IAAN,CAAWyD,CAAX,CAAvB;AACnB,UAAId,KAAK,GAAG0hC,CAAC,CAAC+/L,GAAd,EAAmB,KAAKW,KAAL,CAAW1gM,CAAC,CAAC+/L,GAAb,EAAkB3gO,CAAC,IAAI4gC,CAAC,CAACu9D,GAAF,CAAM5hG,IAAN,CAAWyD,CAAX,CAAvB;AACnB,UAAId,KAAK,GAAG0hC,CAAC,CAACggM,GAAd,EAAmB,KAAKU,KAAL,CAAW1gM,CAAC,CAACggM,GAAb,EAAkB5gO,CAAC,IAAI4gC,CAAC,CAACntB,GAAF,CAAMlX,IAAN,CAAWyD,CAAX,CAAvB;AACpB;;AAED,WAAO4gC,CAAP;AACD,GAhByB;;AAkB1BqjK,EAAAA,OAAO,CAAC/kM,KAAD,EAAQ;AACb,WAAO,KAAKmjO,OAAL,GAAenjO,KAAtB;AACD,GApByB;;AAsB1Bm+N,EAAAA,QAAQ,CAACp6M,CAAD,EAAI;AACV,UAAM2d,CAAC,GAAG,IAAV;AAAA,UACMwZ,MAAM,GAAGxZ,CAAC,CAACwZ,MADjB;AAEA,WAAO,EAAEA,MAAM,IAAIxZ,CAAC,CAACyhM,OAAF,GAAYzhM,CAAC,CAACggM,GAA1B,IAAiC,CAAjC,GAAqC,uBAAQ39M,CAAR,IAAaA,CAAC,CAAC3F,IAAF,CAAOrV,CAAC,IAAImyC,MAAM,CAACnyC,CAAD,CAAlB,CAAb,GAAsCmyC,MAAM,CAACn3B,CAAD,CAAxF;AACD,GA1ByB;;AA4B1BxL,EAAAA,MAAM,GAAG;AACP,yBAAM,wCAAN;AACD,GA9ByB;;AAgC1B4pN,EAAAA,WAAW,GAAG;AACZ,yBAAM,8CAAN;AACD,GAlCyB;;AAoC1BC,EAAAA,KAAK,CAACpiO,KAAD,EAAQg2M,OAAR,EAAiB;AACpB,UAAMt0K,CAAC,GAAG,IAAV;AAAA,UACMwhM,MAAM,GAAGxhM,CAAC,CAACwhM,MADjB;AAAA,UAEM53N,CAAC,GAAG43N,MAAM,CAACxmO,MAFjB;AAGA,QAAIU,CAAC,GAAG,CAAR;;AAEA,QAAI4C,KAAK,GAAG0hC,CAAC,CAACqgM,MAAd,EAAsB;AACpB,aAAO3kO,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB8lO,QAAAA,MAAM,CAAC9lO,CAAD,CAAN,CAAUglO,KAAV,CAAgBpiO,KAAhB,EAAuBg2M,OAAvB;AACD;AACF,KAJD,MAIO;AACL,aAAO54M,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB,YAAI8lO,MAAM,CAAC9lO,CAAD,CAAN,CAAUuhO,KAAV,KAAoBj9L,CAAC,CAACi9L,KAA1B,EAAiC;AAC/BuE,UAAAA,MAAM,CAAC9lO,CAAD,CAAN,CAAUglO,KAAV,CAAgBpiO,KAAhB,EAAuBg2M,OAAvB;AACD;AACF;AACF;;AAED,WAAOt0K,CAAP;AACD;;AAvDyB,CAA5B;AA2DA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAemgH,QAAf,CAAwBj3I,MAAxB,EAAgCw4N,MAAhC,EAAwCC,OAAxC,EAAiD;AAC/C,QAAM3G,EAAE,GAAG,IAAX;AAAA,QACM4G,KAAK,GAAG,EADd,CAD+C,CAE7B;;AAElB,MAAI5G,EAAE,CAAC6G,MAAP,EAAe,OAAOC,SAAS,CAAC9G,EAAD,CAAhB,CAJgC,CAIV;;AAErC,MAAIA,EAAE,CAACwE,QAAP,EAAiB,MAAMxE,EAAE,CAACwE,QAAT,CAN8B,CAMX;;AAEpC,MAAIkC,MAAJ,EAAY,MAAM3G,aAAa,CAACC,EAAD,EAAK0G,MAAL,CAAnB,CARmC,CAQF;;AAE7C,MAAI,CAAC1G,EAAE,CAAC+G,QAAH,CAAY/mO,MAAjB,EAAyB;AACvBggO,IAAAA,EAAE,CAACxsM,KAAH,CAAS,sCAAT;AACA,WAAOwsM,EAAP;AACD,GAb8C,CAa7C;;;AAGF,QAAMiC,KAAK,GAAG,EAAEjC,EAAE,CAACgH,MAAnB,CAhB+C,CAgBpB;;AAE3BhH,EAAAA,EAAE,CAAC6G,MAAH,GAAY,IAAIrB,KAAJ,CAAUxF,EAAV,EAAciC,KAAd,EAAqB/zN,MAArB,CAAZ,CAlB+C,CAkBL;;AAE1C8xN,EAAAA,EAAE,CAAC+G,QAAH,CAAYviO,OAAZ,CAAoB66B,EAAE,IAAI2gM,EAAE,CAACiH,QAAH,CAAY5nM,EAAZ,EAAgB,IAAhB,CAA1B;;AAEA2gM,EAAAA,EAAE,CAAC+G,QAAH,GAAclH,UAAU,CAAClsN,YAAD,CAAxB;AACA,MAAI8kE,KAAK,GAAG,CAAZ;AAAA,MACIp5C,EADJ;AAAA,MAEI+1C,IAFJ;AAAA,MAGIrwD,KAHJ;;AAKA,MAAI;AACF,WAAOi7M,EAAE,CAACkH,KAAH,CAAS/+N,IAAT,KAAkB,CAAzB,EAA4B;AAC1B;AACAk3B,MAAAA,EAAE,GAAG2gM,EAAE,CAACkH,KAAH,CAASp8M,GAAT,EAAL,CAF0B,CAEL;;AAErB,UAAIuU,EAAE,CAACn1B,IAAH,KAAYm1B,EAAE,CAAC6iM,KAAnB,EAA0B;AACxBlC,QAAAA,EAAE,CAACiH,QAAH,CAAY5nM,EAAZ,EAAgB,IAAhB;;AAEA;AACD,OARyB,CAQxB;;;AAGF+1C,MAAAA,IAAI,GAAG/1C,EAAE,CAACh/B,GAAH,CAAO2/N,EAAE,CAACmH,SAAH,CAAa9nM,EAAb,EAAiBnxB,MAAjB,CAAP,CAAP;;AAEA,UAAIknE,IAAI,CAACzlE,IAAT,EAAe;AACb;AACAylE,QAAAA,IAAI,GAAG,MAAMA,IAAb;AACD,OAHD,MAGO,IAAIA,IAAI,CAACwxJ,KAAT,EAAgB;AACrB;AACAA,QAAAA,KAAK,CAACjmO,IAAN,CAAWy0E,IAAI,CAACwxJ,KAAhB;AACAxxJ,QAAAA,IAAI,GAAG2tJ,eAAP;AACD,OApByB,CAoBxB;;;AAGF,UAAI3tJ,IAAI,KAAK2tJ,eAAb,EAA8B;AAC5B,YAAI1jM,EAAE,CAACijM,QAAP,EAAiBjjM,EAAE,CAACijM,QAAH,CAAY99N,OAAZ,CAAoB66B,EAAE,IAAI2gM,EAAE,CAACiH,QAAH,CAAY5nM,EAAZ,CAA1B;AAClB,OAzByB,CAyBxB;;;AAGF,QAAEo5C,KAAF;AACD;AACF,GA/BD,CA+BE,OAAO30D,GAAP,EAAY;AACZk8M,IAAAA,EAAE,CAACkH,KAAH,CAAS/uB,KAAT;;AAEApzL,IAAAA,KAAK,GAAGjB,GAAR;AACD,GA/D8C,CA+D7C;;;AAGFk8M,EAAAA,EAAE,CAACoH,MAAH,GAAY,EAAZ;AACApH,EAAAA,EAAE,CAAC6G,MAAH,GAAY,IAAZ;AACA7G,EAAAA,EAAE,CAACxsM,KAAH,CAAS,SAASvzB,MAAT,CAAgBgiO,KAAhB,EAAuB,IAAvB,EAA6BhiO,MAA7B,CAAoCw4E,KAApC,EAA2C,YAA3C,CAAT;;AAEA,MAAI1zD,KAAJ,EAAW;AACTi7M,IAAAA,EAAE,CAACqH,QAAH,GAAc,EAAd;AACArH,IAAAA,EAAE,CAACj7M,KAAH,CAASA,KAAT;AACD,GAzE8C,CAyE7C;;;AAGF,MAAIi7M,EAAE,CAACqH,QAAH,CAAYrnO,MAAhB,EAAwB;AACtB,UAAMuvM,EAAE,GAAGywB,EAAE,CAACqH,QAAH,CAAY38N,IAAZ,CAAiB,CAAC9C,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAACwU,QAAF,GAAarb,CAAC,CAACqb,QAA1C,CAAX;;AAEA+8M,IAAAA,EAAE,CAACqH,QAAH,GAAc,EAAd;;AAEA,SAAK,IAAI3mO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6uM,EAAE,CAACvvM,MAAvB,EAA+B,EAAEU,CAAjC,EAAoC;AAClC,YAAMq/N,aAAa,CAACC,EAAD,EAAKzwB,EAAE,CAAC7uM,CAAD,CAAF,CAAM42E,QAAX,CAAnB;AACD;AACF,GApF8C,CAoF7C;;;AAGF,MAAIqvJ,OAAJ,EAAa,MAAM5G,aAAa,CAACC,EAAD,EAAK2G,OAAL,CAAnB,CAvFkC,CAuFA;;AAE/C,MAAIC,KAAK,CAAC5mO,MAAV,EAAkB;AAChBqJ,IAAAA,OAAO,CAACoN,GAAR,CAAYmwN,KAAZ,EAAmBj3N,IAAnB,CAAwB23N,EAAE,IAAItH,EAAE,CAACuH,QAAH,CAAY,IAAZ,EAAkB,MAAM;AACpDD,MAAAA,EAAE,CAAC9iO,OAAH,CAAW6H,CAAC,IAAI;AACd,YAAI;AACFA,UAAAA,CAAC,CAAC2zN,EAAD,CAAD;AACD,SAFD,CAEE,OAAOl8M,GAAP,EAAY;AACZk8M,UAAAA,EAAE,CAACj7M,KAAH,CAASjB,GAAT;AACD;AACF,OAND;AAOD,KAR6B,CAA9B;AASD;;AAED,SAAOk8M,EAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,eAAeuH,QAAf,CAAwBr5N,MAAxB,EAAgCw4N,MAAhC,EAAwCC,OAAxC,EAAiD;AAC/C;AACA,SAAO,KAAKa,QAAZ,EAAsB,MAAM,KAAKA,QAAX,CAFyB,CAEJ;;;AAG3C,QAAMrvB,KAAK,GAAG,MAAM,KAAKqvB,QAAL,GAAgB,IAApC;;AAEA,GAAC,KAAKA,QAAL,GAAgB,KAAKriF,QAAL,CAAcj3I,MAAd,EAAsBw4N,MAAtB,EAA8BC,OAA9B,CAAjB,EAAyDh3N,IAAzD,CAA8DwoM,KAA9D,EAAqEA,KAArE;AACA,SAAO,KAAKqvB,QAAZ;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASnnO,GAAT,CAAa6N,MAAb,EAAqBw4N,MAArB,EAA6BC,OAA7B,EAAsC;AACpC,SAAO,KAAKE,MAAL,GAAcC,SAAS,CAAC,IAAD,CAAvB,IAAiC,KAAK3hF,QAAL,CAAcj3I,MAAd,EAAsBw4N,MAAtB,EAA8BC,OAA9B,GAAwC,IAAzE,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASP,QAAT,CAAkB9uJ,QAAlB,EAA4BmwJ,OAA5B,EAAqCxkN,QAArC,EAA+C;AAC7C,MAAI,KAAK4jN,MAAL,IAAeY,OAAnB,EAA4B;AAC1B;AACA,SAAKJ,QAAL,CAAc1mO,IAAd,CAAmB;AACjBsiB,MAAAA,QAAQ,EAAEA,QAAQ,IAAI,CADL;AAEjBq0D,MAAAA,QAAQ,EAAEA;AAFO,KAAnB;AAID,GAND,MAMO;AACL;AACA,QAAI;AACFA,MAAAA,QAAQ,CAAC,IAAD,CAAR;AACD,KAFD,CAEE,OAAOxzD,GAAP,EAAY;AACZ,WAAKiB,KAAL,CAAWjB,GAAX;AACD;AACF;AACF;AACD;AACA;AACA;;;AAEA,SAASgjN,SAAT,CAAmB9G,EAAnB,EAAuB;AACrBA,EAAAA,EAAE,CAACj7M,KAAH,CAAS,gEAAT;AACA,SAAOi7M,EAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASyH,OAAT,CAAiBpoM,EAAjB,EAAqBmiM,KAArB,EAA4B;AAC1B,QAAMppI,CAAC,GAAG/4D,EAAE,CAAC4iM,KAAH,GAAW,KAAK+E,MAA1B;AACA,MAAI5uI,CAAJ,EAAO/4D,EAAE,CAAC4iM,KAAH,GAAW,KAAK+E,MAAhB;;AAEP,MAAI5uI,CAAC,IAAIopI,KAAT,EAAgB;AACdniM,IAAAA,EAAE,CAAC6iM,KAAH,GAAW7iM,EAAE,CAACn1B,IAAd;;AAEA,SAAKg9N,KAAL,CAAWvmO,IAAX,CAAgB0+B,EAAhB;AACD;AACF;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASqoM,QAAT,CAAkBroM,EAAlB,EAAsBnxB,MAAtB,EAA8B;AAC5B,QAAMhK,CAAC,GAAGm7B,EAAE,CAACm3B,MAAb;AAAA,QACMyrK,KAAK,GAAG,KAAK+E,MADnB;AAEA,SAAO9iO,CAAC,IAAI,uBAAQA,CAAR,CAAL,GAAkB,IAAIqiO,UAAJ,CAAe,IAAf,EAAqBtE,KAArB,EAA4B/9N,CAAC,CAACiG,GAAF,CAAMkd,CAAC,IAAIA,CAAC,CAAC65M,KAAb,CAA5B,EAAiDhzN,MAAjD,CAAlB,GAA6E,KAAKk5N,MAAL,CAAY/nM,EAAE,CAAC1rB,EAAf,KAAsBg0N,WAAW,CAAC,KAAKd,MAAN,EAAc3iO,CAAC,IAAIA,CAAC,CAACg9N,KAArB,CAArH;AACD;;AAED,SAASyG,WAAT,CAAqB3iM,CAArB,EAAwB9gC,CAAxB,EAA2B;AACzB,MAAIA,CAAC,IAAIA,CAAC,CAAC+9N,KAAF,KAAYj9L,CAAC,CAACi9L,KAAvB,EAA8B;AAC5B,WAAO/9N,CAAP;AACD;;AAED8gC,EAAAA,CAAC,GAAGA,CAAC,CAAC4gM,IAAF,EAAJ;;AAEA,MAAI1hO,CAAC,IAAIA,CAAC,KAAK6+N,eAAf,EAAgC;AAC9B/9L,IAAAA,CAAC,CAACwxB,MAAF,GAAWtyD,CAAC,CAACsyD,MAAb;AACD;;AAED,SAAOxxB,CAAP;AACD;;AAED,MAAM4iM,MAAM,GAAG;AACbh6C,EAAAA,IAAI,EAAE,KADO;AAEb4zC,EAAAA,KAAK,EAAE;AAFM,CAAf;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASyB,KAAT,CAAe5jM,EAAf,EAAmBg4C,OAAnB,EAA4B;AAC1B,QAAMs9H,GAAG,GAAGt9H,OAAO,IAAIuwJ,MAAvB;;AAEA,MAAI,KAAKf,MAAT,EAAiB;AACf;AACA,SAAKI,QAAL,CAAc5nM,EAAd;AACD,GAHD,MAGO;AACL;AACA,SAAK0nM,QAAL,CAAc1lN,GAAd,CAAkBge,EAAlB;AACD;;AAED,MAAIs1K,GAAG,CAAC/mB,IAAR,EAAcvuJ,EAAE,CAACuuJ,IAAH,CAAQ,IAAR;AACd,SAAO,IAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASh+F,MAAT,CAAgBvwD,EAAhB,EAAoB37B,KAApB,EAA2B2zE,OAA3B,EAAoC;AAClC,QAAMs9H,GAAG,GAAGt9H,OAAO,IAAIuwJ,MAAvB;;AAEA,MAAIvoM,EAAE,CAACh8B,GAAH,CAAOK,KAAP,KAAiBixM,GAAG,CAAC6sB,KAAzB,EAAgC;AAC9B,SAAKyB,KAAL,CAAW5jM,EAAX,EAAes1K,GAAf;AACD;;AAED,SAAO,IAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASusB,KAAT,CAAe7hM,EAAf,EAAmBshM,SAAnB,EAA8BtpJ,OAA9B,EAAuC;AACrC,OAAK4rJ,KAAL,CAAW5jM,EAAX,EAAeg4C,OAAO,IAAIuwJ,MAA1B;AACA,QAAM5iM,CAAC,GAAG,IAAIwgM,KAAJ,CAAU,IAAV,EAAgB,KAAKwB,MAAL,IAAe,KAAKH,MAAL,GAAc,CAAd,GAAkB,CAAjC,CAAhB,CAAV;AAAA,QACMziO,CAAC,GAAGi7B,EAAE,CAAC6hM,KAAH,IAAY7hM,EAAE,CAAC6hM,KAAH,CAAS1qK,MAArB,IAA+B,EADzC;AAEAxxB,EAAAA,CAAC,CAACiS,MAAF,GAAW5X,EAAX;AACA,OAAK+nM,MAAL,CAAY/nM,EAAE,CAAC1rB,EAAf,IAAqBgtN,SAAS,CAACO,KAAV,CAAgBl8L,CAAhB,EAAmB5gC,CAAnB,CAArB;AACA,SAAO,IAAP;AACD;;AAED,SAASyjO,IAAT,CAAc96B,GAAd,EAAmB;AACjB,MAAIv4D,KAAK,GAAG,EAAZ;AACA,SAAO;AACL2jE,IAAAA,KAAK,EAAE,MAAM3jE,KAAK,GAAG,EADhB;AAELrsI,IAAAA,IAAI,EAAE,MAAMqsI,KAAK,CAACx0I,MAFb;AAGL25M,IAAAA,IAAI,EAAE,MAAMnlE,KAAK,CAAC,CAAD,CAHZ;AAIL7zI,IAAAA,IAAI,EAAEkG,CAAC,IAAI;AACT2tI,MAAAA,KAAK,CAAC7zI,IAAN,CAAWkG,CAAX;AACA,aAAOihO,QAAQ,CAACtzF,KAAD,EAAQ,CAAR,EAAWA,KAAK,CAACx0I,MAAN,GAAe,CAA1B,EAA6B+sM,GAA7B,CAAf;AACD,KAPI;AAQLjiL,IAAAA,GAAG,EAAE,MAAM;AACT,YAAMi9M,IAAI,GAAGvzF,KAAK,CAAC1pH,GAAN,EAAb;AACA,UAAIxC,IAAJ;;AAEA,UAAIksH,KAAK,CAACx0I,MAAV,EAAkB;AAChBsoB,QAAAA,IAAI,GAAGksH,KAAK,CAAC,CAAD,CAAZ;AACAA,QAAAA,KAAK,CAAC,CAAD,CAAL,GAAWuzF,IAAX;AACAC,QAAAA,MAAM,CAACxzF,KAAD,EAAQ,CAAR,EAAWu4D,GAAX,CAAN;AACD,OAJD,MAIO;AACLzkL,QAAAA,IAAI,GAAGy/M,IAAP;AACD;;AAED,aAAOz/M,IAAP;AACD;AArBI,GAAP;AAuBD;;AAED,SAASw/M,QAAT,CAAkBjnO,KAAlB,EAAyB2L,KAAzB,EAAgC05C,GAAhC,EAAqC6mJ,GAArC,EAA0C;AACxC,MAAIqL,MAAJ,EAAY6vB,IAAZ;AACA,QAAM3/M,IAAI,GAAGznB,KAAK,CAACqlD,GAAD,CAAlB;;AAEA,SAAOA,GAAG,GAAG15C,KAAb,EAAoB;AAClBy7N,IAAAA,IAAI,GAAG/hL,GAAG,GAAG,CAAN,IAAW,CAAlB;AACAkyJ,IAAAA,MAAM,GAAGv3M,KAAK,CAAConO,IAAD,CAAd;;AAEA,QAAIl7B,GAAG,CAACzkL,IAAD,EAAO8vL,MAAP,CAAH,GAAoB,CAAxB,EAA2B;AACzBv3M,MAAAA,KAAK,CAACqlD,GAAD,CAAL,GAAakyJ,MAAb;AACAlyJ,MAAAA,GAAG,GAAG+hL,IAAN;AACA;AACD;;AAED;AACD;;AAED,SAAOpnO,KAAK,CAACqlD,GAAD,CAAL,GAAa59B,IAApB;AACD;;AAED,SAAS0/M,MAAT,CAAgBnnO,KAAhB,EAAuBqlD,GAAvB,EAA4B6mJ,GAA5B,EAAiC;AAC/B,QAAMvgM,KAAK,GAAG05C,GAAd;AAAA,QACM7zC,GAAG,GAAGxR,KAAK,CAACb,MADlB;AAAA,QAEMsoB,IAAI,GAAGznB,KAAK,CAACqlD,GAAD,CAFlB;AAGA,MAAIgiL,IAAI,GAAG,CAAChiL,GAAG,IAAI,CAAR,IAAa,CAAxB;AAAA,MACIiiL,IADJ;;AAGA,SAAOD,IAAI,GAAG71N,GAAd,EAAmB;AACjB81N,IAAAA,IAAI,GAAGD,IAAI,GAAG,CAAd;;AAEA,QAAIC,IAAI,GAAG91N,GAAP,IAAc06L,GAAG,CAAClsM,KAAK,CAACqnO,IAAD,CAAN,EAAcrnO,KAAK,CAACsnO,IAAD,CAAnB,CAAH,IAAiC,CAAnD,EAAsD;AACpDD,MAAAA,IAAI,GAAGC,IAAP;AACD;;AAEDtnO,IAAAA,KAAK,CAACqlD,GAAD,CAAL,GAAarlD,KAAK,CAACqnO,IAAD,CAAlB;AACAhiL,IAAAA,GAAG,GAAGgiL,IAAN;AACAA,IAAAA,IAAI,GAAG,CAAChiL,GAAG,IAAI,CAAR,IAAa,CAApB;AACD;;AAEDrlD,EAAAA,KAAK,CAACqlD,GAAD,CAAL,GAAa59B,IAAb;AACA,SAAOw/M,QAAQ,CAACjnO,KAAD,EAAQ2L,KAAR,EAAe05C,GAAf,EAAoB6mJ,GAApB,CAAf;AACD;AAED;AACA;AACA;AACA;;;AAEA,SAASq7B,QAAT,GAAoB;AAClB,OAAKj5N,MAAL,CAAY,uBAAZ;AACA,OAAKk5N,QAAL,CAAcppO,eAAd;AACA,OAAK+nO,MAAL,GAAc,CAAd;AACA,OAAKlC,KAAL,GAAa,CAAb;AACA,OAAKwD,OAAL,GAAe,gCAAf;;AAEA,MAAI;AACF,SAAKC,OAAL,GAAe,yBAAf;AACD,GAFD,CAEE,OAAOnpO,CAAP,EAAU,CAAC;AACZ;;AAED,OAAK2nO,QAAL,GAAgBlH,UAAU,CAAClsN,YAAD,CAA1B;AACA,OAAKyzN,MAAL,GAAc,EAAd;AACA,OAAKP,MAAL,GAAc,IAAd;AACA,OAAKK,KAAL,GAAaW,IAAI,CAAC,CAACjgO,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAACs6N,KAAF,GAAUzzN,CAAC,CAACyzN,KAAvB,CAAjB;AACA,OAAKmF,QAAL,GAAgB,EAAhB;AACD;;AAED,SAASmB,SAAT,CAAmB72L,MAAnB,EAA2B;AACzB,SAAO,YAAY;AACjB,WAAO,KAAK82L,IAAL,CAAU92L,MAAV,EAAkB5wC,KAAlB,CAAwB,IAAxB,EAA8BN,SAA9B,CAAP;AACD,GAFD;AAGD;;AAED2nO,QAAQ,CAACtnO,SAAT,GAAqB;AACnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEmhO,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK+E,MAAZ;AACD,GAXkB;;AAanB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEpH,EAAAA,MAAM,CAACv4M,CAAD,EAAI;AACR,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKuoO,OAAL,GAAelhN,CAAf;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKkhN,OAAZ;AACD;AACF,GAhCkB;;AAkCnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE9d,EAAAA,MAAM,CAACpjM,CAAD,EAAI;AACR,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKsoO,OAAL,GAAejhN,CAAf;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKihN,OAAZ;AACD;AACF,GAlDkB;;AAoDnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEn5N,EAAAA,MAAM,CAACA,MAAD,EAAS;AACb,QAAI1O,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKyoO,IAAL,GAAYt5N,MAAZ;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKs5N,IAAZ;AACD;AACF,GAnEkB;;AAqEnB;AACF;AACA;AACA;AACA;AACE1jN,EAAAA,KAAK,EAAEyjN,SAAS,CAAC,OAAD,CA1EG;;AA4EnB;AACF;AACA;AACA;AACA;AACE1lO,EAAAA,IAAI,EAAE0lO,SAAS,CAAC,MAAD,CAjFI;;AAmFnB;AACF;AACA;AACA;AACA;AACErkN,EAAAA,IAAI,EAAEqkN,SAAS,CAAC,MAAD,CAxFI;;AA0FnB;AACF;AACA;AACA;AACA;AACEh1M,EAAAA,KAAK,EAAEg1M,SAAS,CAAC,OAAD,CA/FG;;AAiGnB;AACF;AACA;AACA;AACA;AACA;AACEH,EAAAA,QAAQ,EAAEG,SAAS,CAAC,OAAD,CAvGA;;AAyGnB;AACF;AACA;AACA;AACEE,EAAAA,cAAc,EAAE,GA7GG;AA8GnB;AACArnN,EAAAA,GA/GmB;AAgHnBuxK,EAAAA,OAhHmB;AAiHnB1oL,EAAAA,IAjHmB;AAkHnBk5N,EAAAA,MAlHmB;AAmHnB;AACAlC,EAAAA,KApHmB;AAqHnB+B,EAAAA,KArHmB;AAsHnBrzI,EAAAA,MAtHmB;AAuHnB+wI,EAAAA,SAvHmB;AAwHnB;AACAL,EAAAA,MAAM,EAAE+D,QAzHW;AA0HnBzhL,EAAAA,KA1HmB;AA2HnB0hL,EAAAA,OA3HmB;AA4HnBntC,EAAAA,OA5HmB;AA6HnB;AACAkD,EAAAA,MA9HmB;AA+HnB94L,EAAAA,EA/HmB;AAgInB;AACA4jJ,EAAAA,QAjImB;AAkInB9kJ,EAAAA,GAlImB;AAmInBknO,EAAAA,QAnImB;AAoInBnB,EAAAA,QApImB;AAqInBa,EAAAA,QAAQ,EAAEQ,OArIS;AAsInBN,EAAAA,SAAS,EAAEO;AAtIQ,CAArB;AAyIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASiB,SAAT,CAAmBpyJ,IAAnB,EAAyBxyE,MAAzB,EAAiC;AAC/Bg+N,EAAAA,QAAQ,CAACviO,IAAT,CAAc,IAAd,EAAoB+2E,IAApB,EAA0B,IAA1B,EAAgCxyE,MAAhC;AACD;;AACD,wBAAS4kO,SAAT,EAAoB5G,QAApB,EAA8B;AAC5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE1hO,EAAAA,GAAG,CAAC6gO,KAAD,EAAQ;AACT,QAAIA,KAAK,CAACe,KAAN,GAAc,KAAKA,KAAvB,EAA8B,OAAOf,KAAK,CAAC6B,eAAb;AAC9B,QAAIC,EAAJ;;AAEA,QAAI,KAAKp1C,IAAL,EAAJ,EAAiB;AACf,WAAKA,IAAL,CAAU,KAAV;AACD,KAFD,MAEO;AACLo1C,MAAAA,EAAE,GAAG,KAAK79E,QAAL,CAAc+7E,KAAd,CAAL;AACD;;AAED8B,IAAAA,EAAE,GAAGA,EAAE,IAAI9B,KAAX;;AAEA,QAAI8B,EAAE,CAACrzN,IAAP,EAAa;AACXqzN,MAAAA,EAAE,GAAGA,EAAE,CAACrzN,IAAH,CAAQ0X,CAAC,IAAI,KAAK65M,KAAL,GAAa75M,CAA1B,CAAL;AACD,KAFD,MAEO,IAAI27M,EAAE,KAAK9B,KAAK,CAAC6B,eAAjB,EAAkC;AACvC,WAAK7B,KAAL,GAAa8B,EAAb;AACD;;AAED,WAAOA,EAAP;AACD,GA5B2B;;AA8B5B;AACF;AACA;AACA;AACA;AACA;AACA;AACE79E,EAAAA,QAAQ,CAAC+7E,KAAD,EAAQ;AACd,UAAMn9N,MAAM,GAAG,KAAK8+N,QAAL,CAAc3B,KAAK,CAACe,KAApB,CAAf;AAAA,UACMl7M,GAAG,GAAG,KAAK4iK,SAAL,CAAe5lL,MAAf,EAAuBm9N,KAAvB,CADZ;AAEAn9N,IAAAA,MAAM,CAACo0M,KAAP;AACA,WAAOpxL,GAAP;AACD,GA1C2B;;AA4C5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE4iK,EAAAA,SAAS,GAAG,CAAE;;AApDc,CAA9B;AAwDA,MAAMi/C,UAAU,GAAG,EAAnB;;;AACA,SAASld,UAAT,CAAoB/qM,IAApB,EAA0B;AACxB,QAAMvc,CAAC,GAAGulL,SAAS,CAAChpK,IAAD,CAAnB;AACA,SAAOvc,CAAC,IAAIA,CAAC,CAACykO,UAAP,IAAqB,IAA5B;AACD;;AACD,SAASl/C,SAAT,CAAmBhpK,IAAnB,EAAyB;AACvBA,EAAAA,IAAI,GAAGA,IAAI,IAAIA,IAAI,CAAC9b,WAAL,EAAf;AACA,SAAO,8BAAe+jO,UAAf,EAA2BjoN,IAA3B,IAAmCioN,UAAU,CAACjoN,IAAD,CAA7C,GAAsD,IAA7D;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5vED;;AAEA,UAAUukM,OAAV,CAAmBp6M,MAAnB,EAA2Bq6M,OAA3B,EAAoC;AAClC,MAAIA,OAAO,IAAI,IAAf,EAAqB;AACnB,SAAK,IAAIzhN,KAAT,IAAkBoH,MAAlB,EAA0B;AACxB,UAAIpH,KAAK,IAAI,IAAT,IAAiBA,KAAK,KAAK,EAA3B,IAAiC,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzD,EAAgE;AAC9D,cAAMA,KAAN;AACD;AACF;AACF,GAND,MAMO;AACL,QAAI8C,KAAK,GAAG,CAAC,CAAb;;AAEA,SAAK,IAAI9C,KAAT,IAAkBoH,MAAlB,EAA0B;AACxBpH,MAAAA,KAAK,GAAGyhN,OAAO,CAACzhN,KAAD,EAAQ,EAAE8C,KAAV,EAAiBsE,MAAjB,CAAf;;AAEA,UAAIpH,KAAK,IAAI,IAAT,IAAiBA,KAAK,KAAK,EAA3B,IAAiC,CAACA,KAAK,GAAG,CAACA,KAAV,KAAoBA,KAAzD,EAAgE;AAC9D,cAAMA,KAAN;AACD;AACF;AACF;AACF;;AAED,SAASolO,SAAT,CAAoBjoO,KAApB,EAA2BmkC,CAA3B,EAA8B34B,CAA9B,EAAiC;AAC/B,QAAMvB,MAAM,GAAG66M,YAAY,CAAC5zM,IAAb,CAAkBmzM,OAAO,CAACrkN,KAAD,EAAQwL,CAAR,CAAzB,CAAf,CAD+B,CACsB;AACrD;;AAEAvB,EAAAA,MAAM,CAACJ,IAAP,CAAYovM,kBAAZ;AACA,SAAO90K,CAAC,CAAC76B,GAAF,CAAMkd,CAAC,IAAI,6BAAevc,MAAf,EAAuBuc,CAAvB,CAAX,CAAP;AACD;;AAED,SAAS0hN,SAAT,CAAoBloO,KAApB,EAA2BwL,CAA3B,EAA8B;AAC5B,SAAOy8N,SAAS,CAACjoO,KAAD,EAAQ,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,CAAR,EAA4BwL,CAA5B,CAAhB;AACD,EAED;;;AAEA,SAAS28N,iBAAT,CAA4BnoO,KAA5B,EAAmCwL,CAAnC,EAAsC;AACpC,QAAMuC,CAAC,GAAG/N,KAAK,CAACb,MAAhB;AAAA,QACMuN,CAAC,GAAG,wBAAU1M,KAAV,EAAiBwL,CAAjB,CADV;AAAA,QAEM+rF,CAAC,GAAG2wI,SAAS,CAACloO,KAAD,EAAQwL,CAAR,CAFnB;AAAA,QAGM4gD,CAAC,GAAG,CAACmrC,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAT,IAAgB,IAH1B;AAAA,QAIMxlF,CAAC,GAAGnM,IAAI,CAACG,GAAL,CAAS2G,CAAT,EAAY0/C,CAAZ,KAAkB1/C,CAAlB,IAAuB9G,IAAI,CAACiT,GAAL,CAAS0+E,CAAC,CAAC,CAAD,CAAV,CAAvB,IAAyC,CAJnD;AAKA,SAAO,OAAOxlF,CAAP,GAAWnM,IAAI,CAAC0Q,GAAL,CAASvI,CAAT,EAAY,CAAC,GAAb,CAAlB;AACD;;AAED,SAAS64M,GAAT,CAAcpgM,CAAd,EAAiB;AACf;AACA,QAAM4hN,IAAI,GAAG5hN,CAAC,CAACkuM,OAAF,IAAa,EAA1B;AAAA,QACM7pL,IAAI,GAAGrkB,CAAC,CAACqkB,IAAF,IAAU,EADvB;AAAA,QAEMw9L,IAAI,GAAGziO,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAFb;AAAA,QAGMpD,GAAG,GAAGjhB,CAAC,CAAC8hN,MAAF,IAAY,CAAC,CAAD,EAAI,CAAJ,CAHxB;AAIA,MAAIviO,GAAG,GAAGygB,CAAC,CAAC0yL,MAAF,CAAS,CAAT,CAAV;AAAA,MACIjzM,GAAG,GAAGugB,CAAC,CAAC0yL,MAAF,CAAS,CAAT,CADV;AAAA,MAEI3+L,IAFJ;AAAA,MAGIyiH,KAHJ;AAAA,MAIIurG,OAJJ;AAAA,MAKIx2N,CALJ;AAAA,MAMIlS,CANJ;AAAA,MAOIkO,CAPJ;AAQA,QAAM0oM,IAAI,GAAGjwL,CAAC,CAACiwL,IAAF,IAAUxwM,GAAG,GAAGF,GAAhB,IAAuBH,IAAI,CAACiT,GAAL,CAAS9S,GAAT,CAAvB,IAAwC,CAArD;;AAEA,MAAIygB,CAAC,CAACjM,IAAN,EAAY;AACV;AACAA,IAAAA,IAAI,GAAGiM,CAAC,CAACjM,IAAT;AACD,GAHD,MAGO,IAAIiM,CAAC,CAACwlH,KAAN,EAAa;AAClB;AACAj6H,IAAAA,CAAC,GAAG0kM,IAAI,GAAG2xB,IAAX;;AAEA,SAAKvoO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGyY,CAAC,CAACwlH,KAAF,CAAQ7sI,MAAxB,EAAgCU,CAAC,GAAGkO,CAAJ,IAASyY,CAAC,CAACwlH,KAAF,CAAQnsI,CAAR,IAAakS,CAAtD,EAAyD,EAAElS,CAA3D,CAA6D;;AAE7D0a,IAAAA,IAAI,GAAGiM,CAAC,CAACwlH,KAAF,CAAQpmI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYpG,CAAC,GAAG,CAAhB,CAAR,CAAP;AACD,GAPM,MAOA;AACL;AACAm9H,IAAAA,KAAK,GAAGp3H,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACiK,GAAL,CAASu4N,IAAT,IAAiBC,IAA3B,CAAR;AACAE,IAAAA,OAAO,GAAG/hN,CAAC,CAAC+hN,OAAF,IAAa,CAAvB;AACAhuN,IAAAA,IAAI,GAAG3U,IAAI,CAACK,GAAL,CAASsiO,OAAT,EAAkB3iO,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAejlC,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACiK,GAAL,CAAS4mM,IAAT,IAAiB4xB,IAA5B,IAAoCrrG,KAAnD,CAAlB,CAAP,CAJK,CAIgF;;AAErF,WAAOp3H,IAAI,CAACoC,IAAL,CAAUyuM,IAAI,GAAGl8L,IAAjB,IAAyB6tN,IAAhC,EAAsC;AACpC7tN,MAAAA,IAAI,IAAIswB,IAAR;AACD,KARI,CAQH;;;AAGF,SAAKhrC,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG05B,GAAG,CAACtoC,MAApB,EAA4BU,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtCkS,MAAAA,CAAC,GAAGwI,IAAI,GAAGktB,GAAG,CAAC5nC,CAAD,CAAd;AACA,UAAIkS,CAAC,IAAIw2N,OAAL,IAAgB9xB,IAAI,GAAG1kM,CAAP,IAAYq2N,IAAhC,EAAsC7tN,IAAI,GAAGxI,CAAP;AACvC;AACF,GAzCc,CAyCb;;;AAGFA,EAAAA,CAAC,GAAGnM,IAAI,CAACiK,GAAL,CAAS0K,IAAT,CAAJ;AACA,QAAMw5E,SAAS,GAAGhiF,CAAC,IAAI,CAAL,GAAS,CAAT,GAAa,CAAC,EAAE,CAACA,CAAD,GAAKs2N,IAAP,CAAD,GAAgB,CAA/C;AAAA,QACMG,GAAG,GAAG5iO,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAe,CAACkpD,SAAD,GAAa,CAA5B,CADZ;;AAGA,MAAIvtE,CAAC,CAAC4/L,IAAF,IAAU5/L,CAAC,CAAC4/L,IAAF,KAAWrxF,SAAzB,EAAoC;AAClChjH,IAAAA,CAAC,GAAGnM,IAAI,CAAC+H,KAAL,CAAW5H,GAAG,GAAGwU,IAAN,GAAaiuN,GAAxB,IAA+BjuN,IAAnC;AACAxU,IAAAA,GAAG,GAAGA,GAAG,GAAGgM,CAAN,GAAUA,CAAC,GAAGwI,IAAd,GAAqBxI,CAA3B;AACA9L,IAAAA,GAAG,GAAGL,IAAI,CAACoC,IAAL,CAAU/B,GAAG,GAAGsU,IAAhB,IAAwBA,IAA9B;AACD;;AAED,SAAO;AACL5O,IAAAA,KAAK,EAAE5F,GADF;AAELq7B,IAAAA,IAAI,EAAEn7B,GAAG,KAAKF,GAAR,GAAcA,GAAG,GAAGwU,IAApB,GAA2BtU,GAF5B;AAGLsU,IAAAA,IAAI,EAAEA;AAHD,GAAP;AAKD;;AAED,IAAI1U,MAAM,GAAGD,IAAI,CAACC,MAAlB;;;AACA,SAAS4iO,SAAT,CAAmB56N,CAAnB,EAAsB;AACpB,mBAAAhI,MAAM,GAAGgI,CAAT;AACD;;AAED,SAAS66N,WAAT,CAAsB1oO,KAAtB,EAA6B+rI,OAA7B,EAAsC5yH,KAAtC,EAA6C3N,CAA7C,EAAgD;AAC9C,MAAI,CAACxL,KAAK,CAACb,MAAX,EAAmB,OAAO,CAAC41H,SAAD,EAAYA,SAAZ,CAAP;AACnB,QAAM9qH,MAAM,GAAG66M,YAAY,CAAC5zM,IAAb,CAAkBmzM,OAAO,CAACrkN,KAAD,EAAQwL,CAAR,CAAzB,CAAf;AAAA,QACMuC,CAAC,GAAG9D,MAAM,CAAC9K,MADjB;AAAA,QAEMm4F,CAAC,GAAGy0C,OAFV;AAGA,MAAIhlI,CAAJ,EAAOlH,CAAP,EAAUiK,CAAV,EAAa6+N,EAAb;;AAEA,OAAK7+N,CAAC,GAAG,CAAJ,EAAO6+N,EAAE,GAAGhpO,KAAK,CAAC23F,CAAD,CAAtB,EAA2BxtF,CAAC,GAAGwtF,CAA/B,EAAkC,EAAExtF,CAApC,EAAuC;AACrC,SAAK/C,CAAC,GAAG,CAAJ,EAAOlH,CAAC,GAAG,CAAhB,EAAmBA,CAAC,GAAGkO,CAAvB,EAA0B,EAAElO,CAA5B,EAA+B;AAC7BkH,MAAAA,CAAC,IAAIkD,MAAM,CAAC,CAAC,EAAEpE,MAAM,KAAKkI,CAAb,CAAF,CAAX;AACD;;AAED46N,IAAAA,EAAE,CAAC7+N,CAAD,CAAF,GAAQ/C,CAAC,GAAGgH,CAAZ;AACD;;AAED46N,EAAAA,EAAE,CAAC9+N,IAAH,CAAQovM,kBAAR;AACA,SAAO,CAAC,uBAAS0vB,EAAT,EAAaxvN,KAAK,GAAG,CAArB,CAAD,EAA0B,uBAASwvN,EAAT,EAAa,IAAIxvN,KAAK,GAAG,CAAzB,CAA1B,CAAP;AACD,EAED;AACA;AACA;;;AACA,SAASyvN,MAAT,CAAiB5oO,KAAjB,EAAwBua,IAAxB,EAA8BsuN,MAA9B,EAAsCr9N,CAAtC,EAAyC;AACvCA,EAAAA,CAAC,GAAGA,CAAC,KAAKgb,CAAC,IAAIA,CAAV,CAAL;;AAEA,QAAMzY,CAAC,GAAG/N,KAAK,CAACb,MAAhB;AAAA,QACM4S,CAAC,GAAG,IAAI+yM,YAAJ,CAAiB/2M,CAAjB,CADV;AAEA,MAAIlO,CAAC,GAAG,CAAR;AAAA,MACIiK,CAAC,GAAG,CADR;AAAA,MAEI/C,CAAC,GAAGyE,CAAC,CAACxL,KAAK,CAAC,CAAD,CAAN,CAFT;AAAA,MAGI4N,CAAC,GAAG7G,CAHR;AAAA,MAIIolD,CAAC,GAAGplD,CAAC,GAAGwT,IAJZ;AAAA,MAKIvU,CALJ;;AAOA,SAAO8D,CAAC,GAAGiE,CAAX,EAAc,EAAEjE,CAAhB,EAAmB;AACjB9D,IAAAA,CAAC,GAAGwF,CAAC,CAACxL,KAAK,CAAC8J,CAAD,CAAN,CAAL;;AAEA,QAAI9D,CAAC,IAAImmD,CAAT,EAAY;AACVv+C,MAAAA,CAAC,GAAG,CAAC7G,CAAC,GAAG6G,CAAL,IAAU,CAAd;;AAEA,aAAO/N,CAAC,GAAGiK,CAAX,EAAc,EAAEjK,CAAhB,EAAmBkS,CAAC,CAAClS,CAAD,CAAD,GAAO+N,CAAP;;AAEnBu+C,MAAAA,CAAC,GAAGnmD,CAAC,GAAGuU,IAAR;AACAxT,MAAAA,CAAC,GAAGf,CAAJ;AACD;;AAED4H,IAAAA,CAAC,GAAG5H,CAAJ;AACD;;AAED4H,EAAAA,CAAC,GAAG,CAAC7G,CAAC,GAAG6G,CAAL,IAAU,CAAd;;AAEA,SAAO/N,CAAC,GAAGiK,CAAX,EAAc,EAAEjK,CAAhB,EAAmBkS,CAAC,CAAClS,CAAD,CAAD,GAAO+N,CAAP;;AAEnB,SAAOi7N,MAAM,GAAGC,SAAS,CAAC/2N,CAAD,EAAIwI,IAAI,GAAGA,IAAI,GAAG,CAAlB,CAAZ,GAAmCxI,CAAhD;AACD,EAAC;AACF;AACA;;;AAEA,SAAS+2N,SAAT,CAAmB/2N,CAAnB,EAAsBg3N,MAAtB,EAA8B;AAC5B,QAAMh7N,CAAC,GAAGgE,CAAC,CAAC5S,MAAZ;AACA,MAAI4H,CAAC,GAAG,CAAR;AAAA,MACI6G,CAAC,GAAG,CADR;AAAA,MAEItB,CAFJ;AAAA,MAGII,CAHJ,CAF4B,CAKrB;;AAEP,SAAOqF,CAAC,CAAChL,CAAD,CAAD,KAASgL,CAAC,CAACnE,CAAD,CAAjB,EAAsB,EAAEA,CAAF;;AAEtB,SAAOA,CAAC,GAAGG,CAAX,EAAc;AACZ;AACAzB,IAAAA,CAAC,GAAGsB,CAAC,GAAG,CAAR;;AAEA,WAAOmE,CAAC,CAACnE,CAAD,CAAD,KAASmE,CAAC,CAACzF,CAAD,CAAjB,EAAsB,EAAEA,CAAF,CAJV,CAIe;AAC3B;;;AAGA,QAAIyF,CAAC,CAACnE,CAAD,CAAD,GAAOmE,CAAC,CAACnE,CAAC,GAAG,CAAL,CAAR,GAAkBm7N,MAAtB,EAA8B;AAC5Br8N,MAAAA,CAAC,GAAGkB,CAAC,IAAI7G,CAAC,GAAGuF,CAAJ,GAAQsB,CAAR,GAAYA,CAAZ,IAAiB,CAArB,CAAL;;AAEA,aAAOlB,CAAC,GAAGkB,CAAX,EAAcmE,CAAC,CAACrF,CAAC,EAAF,CAAD,GAASqF,CAAC,CAACnE,CAAD,CAAV;;AAEd,aAAOlB,CAAC,GAAGkB,CAAX,EAAcmE,CAAC,CAACrF,CAAC,EAAF,CAAD,GAASqF,CAAC,CAAChL,CAAD,CAAV;AACf,KAdW,CAcV;;;AAGFA,IAAAA,CAAC,GAAG6G,CAAJ;AACAA,IAAAA,CAAC,GAAGtB,CAAJ;AACD;;AAED,SAAOyF,CAAP;AACD;;AAED,SAASi3N,GAAT,CAAc54L,IAAd,EAAoB;AAClB;AACA;AACA,SAAO,YAAY;AACjBA,IAAAA,IAAI,GAAG,CAAC,aAAaA,IAAb,GAAoB,KAArB,IAA8B,UAArC;AACA,WAAOA,IAAI,GAAG,UAAd;AACD,GAHD;AAID;;AAED,SAASwrK,OAAT,CAAkB71M,GAAlB,EAAuBE,GAAvB,EAA4B;AAC1B,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAN;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,MAAIgB,CAAJ,EAAO6G,CAAP,EAAUlB,CAAV;AACA,QAAMu8N,IAAI,GAAG;AACXljO,IAAAA,GAAG,CAACygB,CAAD,EAAI;AACL,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4H,QAAAA,CAAC,GAAGyf,CAAC,IAAI,CAAT;AACA9Z,QAAAA,CAAC,GAAGkB,CAAC,GAAG7G,CAAR;AACA,eAAOkiO,IAAP;AACD,OAJD,MAIO;AACL,eAAOliO,CAAP;AACD;AACF,KATU;;AAWXd,IAAAA,GAAG,CAACugB,CAAD,EAAI;AACL,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpByO,QAAAA,CAAC,GAAG4Y,CAAC,IAAI,CAAT;AACA9Z,QAAAA,CAAC,GAAGkB,CAAC,GAAG7G,CAAR;AACA,eAAOkiO,IAAP;AACD,OAJD,MAIO;AACL,eAAOr7N,CAAP;AACD;AACF,KAnBU;;AAqBXyxL,IAAAA,MAAM,GAAG;AACP,aAAOt4L,CAAC,GAAGnB,IAAI,CAAC+H,KAAL,CAAWjB,CAAC,GAAG7G,MAAM,EAArB,CAAX;AACD,KAvBU;;AAyBXqjO,IAAAA,GAAG,CAACljO,CAAD,EAAI;AACL,aAAOA,CAAC,KAAKJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAX,CAAN,IAAuBA,CAAC,IAAIe,CAA5B,IAAiCf,CAAC,GAAG4H,CAArC,GAAyC,IAAIlB,CAA7C,GAAiD,CAAxD;AACD,KA3BU;;AA6BX8hG,IAAAA,GAAG,CAACxoG,CAAD,EAAI;AACL,YAAM+L,CAAC,GAAGnM,IAAI,CAAC+H,KAAL,CAAW3H,CAAX,CAAV;AACA,aAAO+L,CAAC,GAAGhL,CAAJ,GAAQ,CAAR,GAAYgL,CAAC,IAAInE,CAAL,GAAS,CAAT,GAAa,CAACmE,CAAC,GAAGhL,CAAJ,GAAQ,CAAT,IAAc2F,CAA9C;AACD,KAhCU;;AAkCXy8N,IAAAA,IAAI,CAAChlM,CAAD,EAAI;AACN,aAAOA,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAI,CAAf,GAAmBp9B,CAAC,GAAG,CAAJ,GAAQnB,IAAI,CAAC+H,KAAL,CAAWw2B,CAAC,GAAGz3B,CAAf,CAA3B,GAA+C0lE,GAAtD;AACD;;AApCU,GAAb;AAuCA,SAAO62J,IAAI,CAACljO,GAAL,CAASA,GAAT,EAAcE,GAAd,CAAkBA,GAAlB,CAAP;AACD;;AAED,MAAMmjO,OAAO,GAAGxjO,IAAI,CAACqC,IAAL,CAAU,IAAIrC,IAAI,CAACuiC,EAAnB,CAAhB;AACA,MAAMkhM,KAAK,GAAGzjO,IAAI,CAACyjO,KAAnB;AAEA,IAAIC,UAAU,GAAGl3J,GAAjB;;AACA,SAASm3J,YAAT,CAAsBh0N,IAAtB,EAA4Bi0N,KAA5B,EAAmC;AACjCj0N,EAAAA,IAAI,GAAGA,IAAI,IAAI,CAAf;AACAi0N,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAA5B;AACA,MAAIxjO,CAAC,GAAG,CAAR;AAAA,MACIue,CAAC,GAAG,CADR;AAAA,MAEIklN,GAFJ;AAAA,MAGIn9N,CAHJ;;AAKA,MAAIg9N,UAAU,KAAKA,UAAnB,EAA+B;AAC7BtjO,IAAAA,CAAC,GAAGsjO,UAAJ;AACAA,IAAAA,UAAU,GAAGl3J,GAAb;AACD,GAHD,MAGO;AACL,OAAG;AACDpsE,MAAAA,CAAC,GAAGH,MAAM,KAAK,CAAX,GAAe,CAAnB;AACA0e,MAAAA,CAAC,GAAG1e,MAAM,KAAK,CAAX,GAAe,CAAnB;AACA4jO,MAAAA,GAAG,GAAGzjO,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAlB;AACD,KAJD,QAISklN,GAAG,KAAK,CAAR,IAAaA,GAAG,GAAG,CAJ5B;;AAMAn9N,IAAAA,CAAC,GAAG1G,IAAI,CAACqC,IAAL,CAAU,CAAC,CAAD,GAAKrC,IAAI,CAACiK,GAAL,CAAS45N,GAAT,CAAL,GAAqBA,GAA/B,CAAJ,CAPK,CAOoC;;AAEzCzjO,IAAAA,CAAC,IAAIsG,CAAL;AACAg9N,IAAAA,UAAU,GAAG/kN,CAAC,GAAGjY,CAAjB;AACD;;AAED,SAAOiJ,IAAI,GAAGvP,CAAC,GAAGwjO,KAAlB;AACD;;AACD,SAASE,aAAT,CAAuB7mO,KAAvB,EAA8B0S,IAA9B,EAAoCi0N,KAApC,EAA2C;AACzCA,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAA5B;AACA,QAAMl0J,CAAC,GAAG,CAACzyE,KAAK,IAAI0S,IAAI,IAAI,CAAZ,CAAN,IAAwBi0N,KAAlC;AACA,SAAO5jO,IAAI,CAACiC,GAAL,CAAS,CAAC,GAAD,GAAOytE,CAAP,GAAWA,CAApB,KAA0Bk0J,KAAK,GAAGJ,OAAlC,CAAP;AACD,EAAC;AACF;;;AAEA,SAASO,gBAAT,CAA0B9mO,KAA1B,EAAiC0S,IAAjC,EAAuCi0N,KAAvC,EAA8C;AAC5Cj0N,EAAAA,IAAI,GAAGA,IAAI,IAAI,CAAf;AACAi0N,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAA5B;AACA,QAAMl0J,CAAC,GAAG,CAACzyE,KAAK,GAAG0S,IAAT,IAAiBi0N,KAA3B;AAAA,QACMhO,CAAC,GAAG51N,IAAI,CAACiT,GAAL,CAASy8D,CAAT,CADV;AAEA,MAAIs0J,EAAJ;;AAEA,MAAIpO,CAAC,GAAG,EAAR,EAAY;AACVoO,IAAAA,EAAE,GAAG,CAAL;AACD,GAFD,MAEO;AACL,UAAM/hO,GAAG,GAAGjC,IAAI,CAACiC,GAAL,CAAS,CAAC2zN,CAAD,GAAKA,CAAL,GAAS,CAAlB,CAAZ;AACA,QAAIp1N,GAAJ;;AAEA,QAAIo1N,CAAC,GAAG,gBAAR,EAA0B;AACxBp1N,MAAAA,GAAG,GAAG,uBAAuBo1N,CAAvB,GAA2B,iBAAjC;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,eAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAoO,MAAAA,EAAE,GAAG/hO,GAAG,GAAGzB,GAAX;AACAA,MAAAA,GAAG,GAAG,uBAAuBo1N,CAAvB,GAA2B,gBAAjC;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,eAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAp1N,MAAAA,GAAG,GAAGA,GAAG,GAAGo1N,CAAN,GAAU,gBAAhB;AACAoO,MAAAA,EAAE,GAAGA,EAAE,GAAGxjO,GAAV;AACD,KAhBD,MAgBO;AACLA,MAAAA,GAAG,GAAGo1N,CAAC,GAAG,IAAV;AACAp1N,MAAAA,GAAG,GAAGo1N,CAAC,GAAG,IAAIp1N,GAAd;AACAA,MAAAA,GAAG,GAAGo1N,CAAC,GAAG,IAAIp1N,GAAd;AACAA,MAAAA,GAAG,GAAGo1N,CAAC,GAAG,IAAIp1N,GAAd;AACAA,MAAAA,GAAG,GAAGo1N,CAAC,GAAG,IAAIp1N,GAAd;AACAwjO,MAAAA,EAAE,GAAG/hO,GAAG,GAAGzB,GAAN,GAAY,cAAjB;AACD;AACF;;AAED,SAAOkvE,CAAC,GAAG,CAAJ,GAAQ,IAAIs0J,EAAZ,GAAiBA,EAAxB;AACD,EAAC;;;AAEF,SAASC,cAAT,CAAwB1lM,CAAxB,EAA2B5uB,IAA3B,EAAiCi0N,KAAjC,EAAwC;AACtC,MAAIrlM,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG,CAAjB,EAAoB,OAAOiuC,GAAP;AACpB,SAAO,CAAC78D,IAAI,IAAI,CAAT,IAAc,CAACi0N,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAArB,IAA8BH,KAA9B,GAAsCS,MAAM,CAAC,IAAI3lM,CAAJ,GAAQ,CAAT,CAAjE;AACD,EAAC;AACF;AACA;;;AAEA,SAAS2lM,MAAT,CAAgB9jO,CAAhB,EAAmB;AACjB;AACA;AACA;AACA;AACA,MAAImmD,CAAC,GAAG,CAACvmD,IAAI,CAACiK,GAAL,CAAS,CAAC,IAAI7J,CAAL,KAAW,IAAIA,CAAf,CAAT,CAAT;AAAA,MACIm+B,CADJ;;AAGA,MAAIgoB,CAAC,GAAG,IAAR,EAAc;AACZA,IAAAA,CAAC,IAAI,KAAL;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAL;AACAA,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,2BAA2BA,CAAC,GAAGgoB,CAAnC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,2BAA2BA,CAAC,GAAGgoB,CAAnC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,2BAA2BA,CAAC,GAAGgoB,CAAnC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,yBAAyBA,CAAC,GAAGgoB,CAAjC;AACAhoB,IAAAA,CAAC,GAAG,wBAAwBA,CAAC,GAAGgoB,CAAhC;AACD,GAzBD,MAyBO,IAAIA,CAAC,GAAG,IAAR,EAAc;AACnBA,IAAAA,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUkkD,CAAV,IAAe,IAAnB;AACAhoB,IAAAA,CAAC,GAAG,yBAAJ;AACAA,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,2BAA2BA,CAAC,GAAGgoB,CAAnC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,wBAAD,GAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,0BAA0BA,CAAC,GAAGgoB,CAAlC;AACAhoB,IAAAA,CAAC,GAAG,wBAAwBA,CAAC,GAAGgoB,CAAhC;AACAhoB,IAAAA,CAAC,GAAG,wBAAwBA,CAAC,GAAGgoB,CAAhC;AACD,GArBM,MAqBA,IAAIl/C,MAAM,CAACvC,QAAP,CAAgByhD,CAAhB,CAAJ,EAAwB;AAC7BA,IAAAA,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUkkD,CAAV,IAAe,GAAnB;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAL;AACAA,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,4BAA4BA,CAAC,GAAGgoB,CAApC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,CAAC,yBAAD,GAA6BA,CAAC,GAAGgoB,CAArC;AACAhoB,IAAAA,CAAC,GAAG,wBAAwBA,CAAC,GAAGgoB,CAAhC;AACAhoB,IAAAA,CAAC,GAAG,wBAAwBA,CAAC,GAAGgoB,CAAhC;AACD,GAnBM,MAmBA;AACLhoB,IAAAA,CAAC,GAAGx8B,QAAJ;AACD;;AAED,SAAOw8B,CAAC,GAAGn+B,CAAX;AACD;;AAED,SAAS+jO,QAAT,CAAmBx0N,IAAnB,EAAyBi0N,KAAzB,EAAgC;AAC9B,MAAIb,EAAJ,EAAQqB,KAAR;AACA,QAAMf,IAAI,GAAG;AACX1zN,IAAAA,IAAI,CAACiR,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBwpO,QAAAA,EAAE,GAAGniN,CAAC,IAAI,CAAV;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAON,EAAP;AACD;AACF,KARU;;AAUXa,IAAAA,KAAK,CAAChjN,CAAD,EAAI;AACP,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6qO,QAAAA,KAAK,GAAGxjN,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAAxB;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAOe,KAAP;AACD;AACF,KAjBU;;AAmBX3qC,IAAAA,MAAM,EAAE,MAAMkqC,YAAY,CAACZ,EAAD,EAAKqB,KAAL,CAnBf;AAoBXd,IAAAA,GAAG,EAAErmO,KAAK,IAAI6mO,aAAa,CAAC7mO,KAAD,EAAQ8lO,EAAR,EAAYqB,KAAZ,CApBhB;AAqBXx7H,IAAAA,GAAG,EAAE3rG,KAAK,IAAI8mO,gBAAgB,CAAC9mO,KAAD,EAAQ8lO,EAAR,EAAYqB,KAAZ,CArBnB;AAsBXb,IAAAA,IAAI,EAAEhlM,CAAC,IAAI0lM,cAAc,CAAC1lM,CAAD,EAAIwkM,EAAJ,EAAQqB,KAAR;AAtBd,GAAb;AAwBA,SAAOf,IAAI,CAAC1zN,IAAL,CAAUA,IAAV,EAAgBi0N,KAAhB,CAAsBA,KAAtB,CAAP;AACD;;AAED,SAASS,GAAT,CAAcC,OAAd,EAAuBC,SAAvB,EAAkC;AAChC,QAAM1nN,MAAM,GAAGsnN,QAAQ,EAAvB;AACA,MAAIh8N,CAAC,GAAG,CAAR;AACA,QAAMk7N,IAAI,GAAG;AACXp6N,IAAAA,IAAI,CAAC2X,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB+qO,QAAAA,OAAO,GAAG1jN,CAAV;AACAzY,QAAAA,CAAC,GAAGyY,CAAC,GAAGA,CAAC,CAACrnB,MAAL,GAAc,CAAnB;AACA,eAAO8pO,IAAI,CAACkB,SAAL,CAAeA,SAAf,CAAP;AACD,OAJD,MAIO;AACL,eAAOD,OAAP;AACD;AACF,KATU;;AAWXC,IAAAA,SAAS,CAAC3jN,CAAD,EAAI;AACX,UAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOgrO,SAAP;AACvBA,MAAAA,SAAS,GAAG3jN,CAAZ;AACA,UAAI,CAAC2jN,SAAD,IAAcD,OAAlB,EAA2BC,SAAS,GAAGhC,iBAAiB,CAAC+B,OAAD,CAA7B;AAC3B,aAAOjB,IAAP;AACD,KAhBU;;AAkBX5pC,IAAAA,MAAM,GAAG;AACP,aAAO6qC,OAAO,CAAC,CAAC,EAAErkO,MAAM,KAAKkI,CAAb,CAAF,CAAP,GAA4Bo8N,SAAS,GAAG1nN,MAAM,CAAC48K,MAAP,EAA/C;AACD,KApBU;;AAsBX6pC,IAAAA,GAAG,CAACljO,CAAD,EAAI;AACL,UAAIue,CAAC,GAAG,CAAR;AAAA,UACI1kB,CAAC,GAAG,CADR;;AAGA,aAAOA,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB0kB,QAAAA,CAAC,IAAI9B,MAAM,CAACymN,GAAP,CAAW,CAACljO,CAAC,GAAGkkO,OAAO,CAACrqO,CAAD,CAAZ,IAAmBsqO,SAA9B,CAAL;AACD;;AAED,aAAO5lN,CAAC,GAAG4lN,SAAJ,GAAgBp8N,CAAvB;AACD,KA/BU;;AAiCXygG,IAAAA,GAAG,CAACxoG,CAAD,EAAI;AACL,UAAIue,CAAC,GAAG,CAAR;AAAA,UACI1kB,CAAC,GAAG,CADR;;AAGA,aAAOA,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB0kB,QAAAA,CAAC,IAAI9B,MAAM,CAAC+rF,GAAP,CAAW,CAACxoG,CAAC,GAAGkkO,OAAO,CAACrqO,CAAD,CAAZ,IAAmBsqO,SAA9B,CAAL;AACD;;AAED,aAAO5lN,CAAC,GAAGxW,CAAX;AACD,KA1CU;;AA4CXo7N,IAAAA,IAAI,GAAG;AACL,YAAM/qO,KAAK,CAAC,yBAAD,CAAX;AACD;;AA9CU,GAAb;AAiDA,SAAO6qO,IAAI,CAACp6N,IAAL,CAAUq7N,OAAV,CAAP;AACD;;AAED,SAASE,eAAT,CAAyB70N,IAAzB,EAA+Bi0N,KAA/B,EAAsC;AACpCj0N,EAAAA,IAAI,GAAGA,IAAI,IAAI,CAAf;AACAi0N,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAA5B;AACA,SAAO5jO,IAAI,CAACiC,GAAL,CAAS0N,IAAI,GAAGg0N,YAAY,KAAKC,KAAjC,CAAP;AACD;;AACD,SAASa,gBAAT,CAA0BxnO,KAA1B,EAAiC0S,IAAjC,EAAuCi0N,KAAvC,EAA8C;AAC5C,MAAI3mO,KAAK,IAAI,CAAb,EAAgB,OAAO,CAAP;AAChB0S,EAAAA,IAAI,GAAGA,IAAI,IAAI,CAAf;AACAi0N,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoBA,KAA5B;AACA,QAAMl0J,CAAC,GAAG,CAAC1vE,IAAI,CAACiK,GAAL,CAAShN,KAAT,IAAkB0S,IAAnB,IAA2Bi0N,KAArC;AACA,SAAO5jO,IAAI,CAACiC,GAAL,CAAS,CAAC,GAAD,GAAOytE,CAAP,GAAWA,CAApB,KAA0Bk0J,KAAK,GAAGJ,OAAR,GAAkBvmO,KAA5C,CAAP;AACD;;AACD,SAASynO,mBAAT,CAA6BznO,KAA7B,EAAoC0S,IAApC,EAA0Ci0N,KAA1C,EAAiD;AAC/C,SAAOG,gBAAgB,CAAC/jO,IAAI,CAACiK,GAAL,CAAShN,KAAT,CAAD,EAAkB0S,IAAlB,EAAwBi0N,KAAxB,CAAvB;AACD;;AACD,SAASe,iBAAT,CAA2BpmM,CAA3B,EAA8B5uB,IAA9B,EAAoCi0N,KAApC,EAA2C;AACzC,SAAO5jO,IAAI,CAACiC,GAAL,CAASgiO,cAAc,CAAC1lM,CAAD,EAAI5uB,IAAJ,EAAUi0N,KAAV,CAAvB,CAAP;AACD;;AACD,SAASgB,SAAT,CAAoBj1N,IAApB,EAA0Bi0N,KAA1B,EAAiC;AAC/B,MAAIb,EAAJ,EAAQqB,KAAR;AACA,QAAMf,IAAI,GAAG;AACX1zN,IAAAA,IAAI,CAACiR,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBwpO,QAAAA,EAAE,GAAGniN,CAAC,IAAI,CAAV;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAON,EAAP;AACD;AACF,KARU;;AAUXa,IAAAA,KAAK,CAAChjN,CAAD,EAAI;AACP,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6qO,QAAAA,KAAK,GAAGxjN,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAAxB;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAOe,KAAP;AACD;AACF,KAjBU;;AAmBX3qC,IAAAA,MAAM,EAAE,MAAM+qC,eAAe,CAACzB,EAAD,EAAKqB,KAAL,CAnBlB;AAoBXd,IAAAA,GAAG,EAAErmO,KAAK,IAAIwnO,gBAAgB,CAACxnO,KAAD,EAAQ8lO,EAAR,EAAYqB,KAAZ,CApBnB;AAqBXx7H,IAAAA,GAAG,EAAE3rG,KAAK,IAAIynO,mBAAmB,CAACznO,KAAD,EAAQ8lO,EAAR,EAAYqB,KAAZ,CArBtB;AAsBXb,IAAAA,IAAI,EAAEhlM,CAAC,IAAIomM,iBAAiB,CAACpmM,CAAD,EAAIwkM,EAAJ,EAAQqB,KAAR;AAtBjB,GAAb;AAwBA,SAAOf,IAAI,CAAC1zN,IAAL,CAAUA,IAAV,EAAgBi0N,KAAhB,CAAsBA,KAAtB,CAAP;AACD;;AAED,SAASiB,OAAT,CAAkBC,KAAlB,EAAyBv2I,OAAzB,EAAkC;AAChC,MAAImD,CAAC,GAAG,CAAR;AAAA,MACInrC,CADJ;;AAGA,WAASqyG,SAAT,CAAmBx4J,CAAnB,EAAsB;AACpB,UAAMmmD,CAAC,GAAG,EAAV;AACA,QAAI/lD,GAAG,GAAG,CAAV;AAAA,QACIvG,CADJ;;AAGA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGy3F,CAAhB,EAAmB,EAAEz3F,CAArB,EAAwB;AACtBuG,MAAAA,GAAG,IAAI+lD,CAAC,CAACtsD,CAAD,CAAD,GAAOmG,CAAC,CAACnG,CAAD,CAAD,IAAQ,IAAR,GAAe,CAAf,GAAmB,CAACmG,CAAC,CAACnG,CAAD,CAAnC;AACD;;AAED,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGy3F,CAAhB,EAAmB,EAAEz3F,CAArB,EAAwB;AACtBssD,MAAAA,CAAC,CAACtsD,CAAD,CAAD,IAAQuG,GAAR;AACD;;AAED,WAAO+lD,CAAP;AACD;;AAED,QAAM88K,IAAI,GAAG;AACX90I,IAAAA,OAAO,CAAC3tE,CAAD,EAAI;AACT,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBgtD,QAAAA,CAAC,GAAGqyG,SAAS,CAACrqE,OAAO,GAAG3tE,CAAC,IAAI,EAAhB,CAAb;AACA,eAAOyiN,IAAP;AACD;;AAED,aAAO90I,OAAP;AACD,KARU;;AAUXw2I,IAAAA,aAAa,CAACnkN,CAAD,EAAI;AACf,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,YAAIqnB,CAAJ,EAAO;AACL8wE,UAAAA,CAAC,GAAG9wE,CAAC,CAACrnB,MAAN;AACAurO,UAAAA,KAAK,GAAGlkN,CAAR;AACD,SAHD,MAGO;AACL8wE,UAAAA,CAAC,GAAG,CAAJ;AACAozI,UAAAA,KAAK,GAAG,EAAR;AACD;;AAED,eAAOzB,IAAI,CAAC90I,OAAL,CAAaA,OAAb,CAAP;AACD;;AAED,aAAOu2I,KAAP;AACD,KAxBU;;AA0BXrrC,IAAAA,MAAM,GAAG;AACP,YAAMxxL,CAAC,GAAGhI,MAAM,EAAhB;AACA,UAAI6G,CAAC,GAAGg+N,KAAK,CAACpzI,CAAC,GAAG,CAAL,CAAb;AAAA,UACIvlF,CAAC,GAAGo6C,CAAC,CAAC,CAAD,CADT;AAAA,UAEItsD,CAAC,GAAG,CAFR,CAFO,CAII;;AAEX,aAAOA,CAAC,GAAGy3F,CAAC,GAAG,CAAf,EAAkBvlF,CAAC,IAAIo6C,CAAC,CAAC,EAAEtsD,CAAH,CAAxB,EAA+B;AAC7B,YAAIgO,CAAC,GAAGkE,CAAR,EAAW;AACTrF,UAAAA,CAAC,GAAGg+N,KAAK,CAAC7qO,CAAD,CAAT;AACA;AACD;AACF,OAXM,CAWL;;;AAGF,aAAO6M,CAAC,CAAC2yL,MAAF,EAAP;AACD,KAzCU;;AA2CX6pC,IAAAA,GAAG,CAACljO,CAAD,EAAI;AACL,UAAIm+B,CAAC,GAAG,CAAR;AAAA,UACItkC,CAAC,GAAG,CADR;;AAGA,aAAOA,CAAC,GAAGy3F,CAAX,EAAc,EAAEz3F,CAAhB,EAAmB;AACjBskC,QAAAA,CAAC,IAAIgoB,CAAC,CAACtsD,CAAD,CAAD,GAAO6qO,KAAK,CAAC7qO,CAAD,CAAL,CAASqpO,GAAT,CAAaljO,CAAb,CAAZ;AACD;;AAED,aAAOm+B,CAAP;AACD,KApDU;;AAsDXqqE,IAAAA,GAAG,CAACxoG,CAAD,EAAI;AACL,UAAIm+B,CAAC,GAAG,CAAR;AAAA,UACItkC,CAAC,GAAG,CADR;;AAGA,aAAOA,CAAC,GAAGy3F,CAAX,EAAc,EAAEz3F,CAAhB,EAAmB;AACjBskC,QAAAA,CAAC,IAAIgoB,CAAC,CAACtsD,CAAD,CAAD,GAAO6qO,KAAK,CAAC7qO,CAAD,CAAL,CAAS2uG,GAAT,CAAaxoG,CAAb,CAAZ;AACD;;AAED,aAAOm+B,CAAP;AACD,KA/DU;;AAiEXglM,IAAAA,IAAI,GAAG;AACL,YAAM/qO,KAAK,CAAC,6BAAD,CAAX;AACD;;AAnEU,GAAb;AAsEA,SAAO6qO,IAAI,CAAC0B,aAAL,CAAmBD,KAAnB,EAA0Bv2I,OAA1B,CAAkCA,OAAlC,CAAP;AACD;;AAED,SAASy2I,aAAT,CAAuB7kO,GAAvB,EAA4BE,GAA5B,EAAiC;AAC/B,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkBA,GAAxB;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,SAAOA,GAAG,GAAG,CAACE,GAAG,GAAGF,GAAP,IAAcF,MAAM,EAAjC;AACD;;AACD,SAASglO,cAAT,CAAwBhoO,KAAxB,EAA+BkD,GAA/B,EAAoCE,GAApC,EAAyC;AACvC,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkBA,GAAxB;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,SAAOlD,KAAK,IAAIkD,GAAT,IAAgBlD,KAAK,IAAIoD,GAAzB,GAA+B,KAAKA,GAAG,GAAGF,GAAX,CAA/B,GAAiD,CAAxD;AACD;;AACD,SAAS+kO,iBAAT,CAA2BjoO,KAA3B,EAAkCkD,GAAlC,EAAuCE,GAAvC,EAA4C;AAC1C,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkBA,GAAxB;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,SAAOlD,KAAK,GAAGkD,GAAR,GAAc,CAAd,GAAkBlD,KAAK,GAAGoD,GAAR,GAAc,CAAd,GAAkB,CAACpD,KAAK,GAAGkD,GAAT,KAAiBE,GAAG,GAAGF,GAAvB,CAA3C;AACD;;AACD,SAASglO,eAAT,CAAyB5mM,CAAzB,EAA4Bp+B,GAA5B,EAAiCE,GAAjC,EAAsC;AACpC,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkBA,GAAxB;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,SAAOo+B,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAI,CAAf,GAAmBp+B,GAAG,GAAGo+B,CAAC,IAAIl+B,GAAG,GAAGF,GAAV,CAA1B,GAA2CqsE,GAAlD;AACD;;AACD,SAAS44J,OAAT,CAAkBjlO,GAAlB,EAAuBE,GAAvB,EAA4B;AAC1B,MAAIc,CAAJ,EAAO6G,CAAP;AACA,QAAMq7N,IAAI,GAAG;AACXljO,IAAAA,GAAG,CAACygB,CAAD,EAAI;AACL,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4H,QAAAA,CAAC,GAAGyf,CAAC,IAAI,CAAT;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAOliO,CAAP;AACD;AACF,KARU;;AAUXd,IAAAA,GAAG,CAACugB,CAAD,EAAI;AACL,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpByO,QAAAA,CAAC,GAAG4Y,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB;AACA,eAAOyiN,IAAP;AACD,OAHD,MAGO;AACL,eAAOr7N,CAAP;AACD;AACF,KAjBU;;AAmBXyxL,IAAAA,MAAM,EAAE,MAAMurC,aAAa,CAAC7jO,CAAD,EAAI6G,CAAJ,CAnBhB;AAoBXs7N,IAAAA,GAAG,EAAErmO,KAAK,IAAIgoO,cAAc,CAAChoO,KAAD,EAAQkE,CAAR,EAAW6G,CAAX,CApBjB;AAqBX4gG,IAAAA,GAAG,EAAE3rG,KAAK,IAAIioO,iBAAiB,CAACjoO,KAAD,EAAQkE,CAAR,EAAW6G,CAAX,CArBpB;AAsBXu7N,IAAAA,IAAI,EAAEhlM,CAAC,IAAI4mM,eAAe,CAAC5mM,CAAD,EAAIp9B,CAAJ,EAAO6G,CAAP;AAtBf,GAAb;;AAyBA,MAAI3H,GAAG,IAAI,IAAX,EAAiB;AACfA,IAAAA,GAAG,GAAGF,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkBA,GAAxB;AACAA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,SAAOkjO,IAAI,CAACljO,GAAL,CAASA,GAAT,EAAcE,GAAd,CAAkBA,GAAlB,CAAP;AACD,EAED;;;AACA,SAASglO,GAAT,CAAcC,EAAd,EAAkBC,EAAlB,EAAsBC,GAAtB,EAA2BC,GAA3B,EAAgC;AAC9B,QAAM71I,KAAK,GAAG61I,GAAG,GAAGH,EAAE,GAAGA,EAAzB;AAAA,QACMI,KAAK,GAAG1lO,IAAI,CAACiT,GAAL,CAAS28E,KAAT,IAAkB,KAAlB,GAA0B,CAA1B,GAA8B,CAAC41I,GAAG,GAAGF,EAAE,GAAGC,EAAZ,IAAkB31I,KAD9D;AAAA,QAEM+1I,SAAS,GAAGJ,EAAE,GAAGG,KAAK,GAAGJ,EAF/B;AAGA,SAAO,CAACK,SAAD,EAAYD,KAAZ,CAAP;AACD;;AAED,SAASnqB,MAAT,CAAgBtyM,IAAhB,EAAsB7I,CAAtB,EAAyBue,CAAzB,EAA4B1a,IAA5B,EAAkC;AAChCgF,EAAAA,IAAI,GAAGA,IAAI,CAACmM,MAAL,CAAYtO,CAAC,IAAI;AACtB,QAAImyE,CAAC,GAAG74E,CAAC,CAAC0G,CAAD,CAAT;AAAA,QACIqF,CAAC,GAAGwS,CAAC,CAAC7X,CAAD,CADT;AAEA,WAAOmyE,CAAC,IAAI,IAAL,IAAa,CAACA,CAAC,GAAG,CAACA,CAAN,KAAYA,CAAzB,IAA8B9sE,CAAC,IAAI,IAAnC,IAA2C,CAACA,CAAC,GAAG,CAACA,CAAN,KAAYA,CAA9D;AACD,GAJM,CAAP;;AAMA,MAAIlI,IAAJ,EAAU;AACRgF,IAAAA,IAAI,CAAChF,IAAL,CAAU,CAAC9C,CAAD,EAAI6G,CAAJ,KAAU5H,CAAC,CAACe,CAAD,CAAD,GAAOf,CAAC,CAAC4H,CAAD,CAA5B;AACD;;AAED,QAAMG,CAAC,GAAGc,IAAI,CAAC1P,MAAf;AAAA,QACMs2E,CAAC,GAAG,IAAIqvI,YAAJ,CAAiB/2M,CAAjB,CADV;AAAA,QAEMy9N,CAAC,GAAG,IAAI1mB,YAAJ,CAAiB/2M,CAAjB,CAFV,CAXgC,CAaD;;AAE/B,MAAIlO,CAAC,GAAG,CAAR;AAAA,MACI4rO,EAAE,GAAG,CADT;AAAA,MAEIC,EAAE,GAAG,CAFT;AAAA,MAGIC,EAHJ;AAAA,MAIIC,EAJJ;AAAA,MAKIl/N,CALJ;;AAOA,OAAKA,CAAL,IAAUmC,IAAV,EAAgB;AACd4mE,IAAAA,CAAC,CAAC51E,CAAD,CAAD,GAAO8rO,EAAE,GAAG,CAAC3lO,CAAC,CAAC0G,CAAD,CAAd;AACA8+N,IAAAA,CAAC,CAAC3rO,CAAD,CAAD,GAAO+rO,EAAE,GAAG,CAACrnN,CAAC,CAAC7X,CAAD,CAAd;AACA,MAAE7M,CAAF;AACA4rO,IAAAA,EAAE,IAAI,CAACE,EAAE,GAAGF,EAAN,IAAY5rO,CAAlB;AACA6rO,IAAAA,EAAE,IAAI,CAACE,EAAE,GAAGF,EAAN,IAAY7rO,CAAlB;AACD,GA5B+B,CA4B9B;;;AAGF,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB41E,IAAAA,CAAC,CAAC51E,CAAD,CAAD,IAAQ4rO,EAAR;AACAD,IAAAA,CAAC,CAAC3rO,CAAD,CAAD,IAAQ6rO,EAAR;AACD;;AAED,SAAO,CAACj2J,CAAD,EAAI+1J,CAAJ,EAAOC,EAAP,EAAWC,EAAX,CAAP;AACD;;AACD,SAASG,WAAT,CAAqBh9N,IAArB,EAA2B7I,CAA3B,EAA8Bue,CAA9B,EAAiCkyD,QAAjC,EAA2C;AACzC,MAAI52E,CAAC,GAAG,CAAC,CAAT;AAAA,MACIg/E,CADJ;AAAA,MAEI9sE,CAFJ;;AAIA,OAAK,MAAMrF,CAAX,IAAgBmC,IAAhB,EAAsB;AACpBgwE,IAAAA,CAAC,GAAG74E,CAAC,CAAC0G,CAAD,CAAL;AACAqF,IAAAA,CAAC,GAAGwS,CAAC,CAAC7X,CAAD,CAAL;;AAEA,QAAImyE,CAAC,IAAI,IAAL,IAAa,CAACA,CAAC,GAAG,CAACA,CAAN,KAAYA,CAAzB,IAA8B9sE,CAAC,IAAI,IAAnC,IAA2C,CAACA,CAAC,GAAG,CAACA,CAAN,KAAYA,CAA3D,EAA8D;AAC5D0kE,MAAAA,QAAQ,CAACoI,CAAD,EAAI9sE,CAAJ,EAAO,EAAElS,CAAT,CAAR;AACD;AACF;AACF,EAED;;;AAEA,SAASisO,QAAT,CAAmBj9N,IAAnB,EAAyB7I,CAAzB,EAA4Bue,CAA5B,EAA+B4mN,EAA/B,EAAmC96E,OAAnC,EAA4C;AAC1C,MAAI07E,GAAG,GAAG,CAAV;AAAA,MACIC,GAAG,GAAG,CADV;AAEAH,EAAAA,WAAW,CAACh9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,CAACoH,EAAD,EAAKhH,EAAL,KAAY;AAClC,UAAMsnN,GAAG,GAAGtnN,EAAE,GAAG0rI,OAAO,CAAC1kI,EAAD,CAAxB;AAAA,UACMugN,GAAG,GAAGvnN,EAAE,GAAGwmN,EADjB;AAEAY,IAAAA,GAAG,IAAIE,GAAG,GAAGA,GAAb;AACAD,IAAAA,GAAG,IAAIE,GAAG,GAAGA,GAAb;AACD,GALU,CAAX;AAMA,SAAO,IAAIH,GAAG,GAAGC,GAAjB;AACD,EAED;;;AAEA,SAASr2I,MAAT,CAAiB9mF,IAAjB,EAAuB7I,CAAvB,EAA0Bue,CAA1B,EAA6B;AAC3B,MAAIkxD,CAAC,GAAG,CAAR;AAAA,MACI+1J,CAAC,GAAG,CADR;AAAA,MAEIW,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAG,CAHT;AAAA,MAIIr+N,CAAC,GAAG,CAJR;AAKA89N,EAAAA,WAAW,CAACh9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,CAACoH,EAAD,EAAKhH,EAAL,KAAY;AAClC,MAAE5W,CAAF;AACA0nE,IAAAA,CAAC,IAAI,CAAC9pD,EAAE,GAAG8pD,CAAN,IAAW1nE,CAAhB;AACAy9N,IAAAA,CAAC,IAAI,CAAC7mN,EAAE,GAAG6mN,CAAN,IAAWz9N,CAAhB;AACAo+N,IAAAA,EAAE,IAAI,CAACxgN,EAAE,GAAGhH,EAAL,GAAUwnN,EAAX,IAAiBp+N,CAAvB;AACAq+N,IAAAA,EAAE,IAAI,CAACzgN,EAAE,GAAGA,EAAL,GAAUygN,EAAX,IAAiBr+N,CAAvB;AACD,GANU,CAAX;;AAQA,QAAMs+N,IAAI,GAAGpB,GAAG,CAACx1J,CAAD,EAAI+1J,CAAJ,EAAOW,EAAP,EAAWC,EAAX,CAAhB;AAAA,QACM/7E,OAAO,GAAGrqJ,CAAC,IAAIqmO,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC,CAAD,CAAJ,GAAUrmO,CADzC;;AAGA,SAAO;AACLqmO,IAAAA,IAAI,EAAEA,IADD;AAELh8E,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAainN,CAAb,EAAgBn7E,OAAhB;AAHb,GAAP;AAKD,EAED;;;AAEA,SAASxgJ,GAAT,CAAchB,IAAd,EAAoB7I,CAApB,EAAuBue,CAAvB,EAA0B;AACxB,MAAIkxD,CAAC,GAAG,CAAR;AAAA,MACI+1J,CAAC,GAAG,CADR;AAAA,MAEIW,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAG,CAHT;AAAA,MAIIr+N,CAAC,GAAG,CAJR;AAKA89N,EAAAA,WAAW,CAACh9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,CAACoH,EAAD,EAAKhH,EAAL,KAAY;AAClC,MAAE5W,CAAF;AACA4d,IAAAA,EAAE,GAAG/lB,IAAI,CAACiK,GAAL,CAAS8b,EAAT,CAAL;AACA8pD,IAAAA,CAAC,IAAI,CAAC9pD,EAAE,GAAG8pD,CAAN,IAAW1nE,CAAhB;AACAy9N,IAAAA,CAAC,IAAI,CAAC7mN,EAAE,GAAG6mN,CAAN,IAAWz9N,CAAhB;AACAo+N,IAAAA,EAAE,IAAI,CAACxgN,EAAE,GAAGhH,EAAL,GAAUwnN,EAAX,IAAiBp+N,CAAvB;AACAq+N,IAAAA,EAAE,IAAI,CAACzgN,EAAE,GAAGA,EAAL,GAAUygN,EAAX,IAAiBr+N,CAAvB;AACD,GAPU,CAAX;;AASA,QAAMs+N,IAAI,GAAGpB,GAAG,CAACx1J,CAAD,EAAI+1J,CAAJ,EAAOW,EAAP,EAAWC,EAAX,CAAhB;AAAA,QACM/7E,OAAO,GAAGrqJ,CAAC,IAAIqmO,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC,CAAD,CAAJ,GAAUzmO,IAAI,CAACiK,GAAL,CAAS7J,CAAT,CADzC;;AAGA,SAAO;AACLqmO,IAAAA,IAAI,EAAEA,IADD;AAELh8E,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAainN,CAAb,EAAgBn7E,OAAhB;AAHb,GAAP;AAKD;;AAED,SAASxoJ,GAAT,CAAcgH,IAAd,EAAoB7I,CAApB,EAAuBue,CAAvB,EAA0B;AACxB;AACA,QAAM,CAAConN,EAAD,EAAKC,EAAL,EAASH,EAAT,EAAaC,EAAb,IAAmBvqB,MAAM,CAACtyM,IAAD,EAAO7I,CAAP,EAAUue,CAAV,CAA/B;AACA,MAAI+nN,EAAE,GAAG,CAAT;AAAA,MACIH,EAAE,GAAG,CADT;AAAA,MAEII,GAAG,GAAG,CAFV;AAAA,MAGIC,GAAG,GAAG,CAHV;AAAA,MAIIz+N,CAAC,GAAG,CAJR;AAAA,MAKI4d,EALJ;AAAA,MAMI8gN,EANJ;AAAA,MAOIC,EAPJ;AAQAb,EAAAA,WAAW,CAACh9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,CAACiC,CAAD,EAAI7B,EAAJ,KAAW;AACjCgH,IAAAA,EAAE,GAAGggN,EAAE,CAAC59N,CAAC,EAAF,CAAP;AACA0+N,IAAAA,EAAE,GAAG7mO,IAAI,CAACiK,GAAL,CAAS8U,EAAT,CAAL;AACA+nN,IAAAA,EAAE,GAAG/gN,EAAE,GAAGhH,EAAV;AACA2nN,IAAAA,EAAE,IAAI,CAAC3nN,EAAE,GAAG8nN,EAAL,GAAUH,EAAX,IAAiBv+N,CAAvB;AACAo+N,IAAAA,EAAE,IAAI,CAACO,EAAE,GAAGP,EAAN,IAAYp+N,CAAlB;AACAw+N,IAAAA,GAAG,IAAI,CAACG,EAAE,GAAGD,EAAL,GAAUF,GAAX,IAAkBx+N,CAAzB;AACAy+N,IAAAA,GAAG,IAAI,CAAC7gN,EAAE,GAAG+gN,EAAL,GAAUF,GAAX,IAAkBz+N,CAAzB;AACD,GARU,CAAX;;AAUA,QAAM,CAAC4+N,EAAD,EAAKzzL,EAAL,IAAW+xL,GAAG,CAACkB,EAAE,GAAGT,EAAN,EAAUY,EAAE,GAAGZ,EAAf,EAAmBa,GAAG,GAAGb,EAAzB,EAA6Bc,GAAG,GAAGd,EAAnC,CAApB;AAAA,QACMr7E,OAAO,GAAGrqJ,CAAC,IAAIJ,IAAI,CAACiC,GAAL,CAAS8kO,EAAE,GAAGzzL,EAAE,IAAIlzC,CAAC,GAAGylO,EAAR,CAAhB,CADrB;;AAGA,SAAO;AACLY,IAAAA,IAAI,EAAE,CAACzmO,IAAI,CAACiC,GAAL,CAAS8kO,EAAE,GAAGzzL,EAAE,GAAGuyL,EAAnB,CAAD,EAAyBvyL,EAAzB,CADD;AAELm3G,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAamnN,EAAb,EAAiBr7E,OAAjB;AAHb,GAAP;AAKD,EAED;;;AAEA,SAAS/5I,GAAT,CAAczH,IAAd,EAAoB7I,CAApB,EAAuBue,CAAvB,EAA0B;AACxB,MAAIkxD,CAAC,GAAG,CAAR;AAAA,MACI+1J,CAAC,GAAG,CADR;AAAA,MAEIW,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAG,CAHT;AAAA,MAIIQ,EAAE,GAAG,CAJT;AAAA,MAKI7+N,CAAC,GAAG,CALR;AAMA89N,EAAAA,WAAW,CAACh9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,CAACoH,EAAD,EAAKhH,EAAL,KAAY;AAClC,UAAMkoN,EAAE,GAAGjnO,IAAI,CAACiK,GAAL,CAAS8b,EAAT,CAAX;AAAA,UACM8gN,EAAE,GAAG7mO,IAAI,CAACiK,GAAL,CAAS8U,EAAT,CADX;AAEA,MAAE5W,CAAF;AACA0nE,IAAAA,CAAC,IAAI,CAACo3J,EAAE,GAAGp3J,CAAN,IAAW1nE,CAAhB;AACAy9N,IAAAA,CAAC,IAAI,CAACiB,EAAE,GAAGjB,CAAN,IAAWz9N,CAAhB;AACAo+N,IAAAA,EAAE,IAAI,CAACU,EAAE,GAAGJ,EAAL,GAAUN,EAAX,IAAiBp+N,CAAvB;AACAq+N,IAAAA,EAAE,IAAI,CAACS,EAAE,GAAGA,EAAL,GAAUT,EAAX,IAAiBr+N,CAAvB;AACA6+N,IAAAA,EAAE,IAAI,CAACjoN,EAAE,GAAGioN,EAAN,IAAY7+N,CAAlB;AACD,GATU,CAAX;;AAWA,QAAMs+N,IAAI,GAAGpB,GAAG,CAACx1J,CAAD,EAAI+1J,CAAJ,EAAOW,EAAP,EAAWC,EAAX,CAAhB;AAAA,QACM/7E,OAAO,GAAGrqJ,CAAC,IAAIqmO,IAAI,CAAC,CAAD,CAAJ,GAAUzmO,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAYqmO,IAAI,CAAC,CAAD,CAAhB,CAD/B;;AAGAA,EAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUzmO,IAAI,CAACiC,GAAL,CAASwkO,IAAI,CAAC,CAAD,CAAb,CAAV;AACA,SAAO;AACLA,IAAAA,IAAI,EAAEA,IADD;AAELh8E,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAaqoN,EAAb,EAAiBv8E,OAAjB;AAHb,GAAP;AAKD;;AAED,SAASy8E,IAAT,CAAej+N,IAAf,EAAqB7I,CAArB,EAAwBue,CAAxB,EAA2B;AACzB,QAAM,CAAConN,EAAD,EAAKC,EAAL,EAASH,EAAT,EAAaC,EAAb,IAAmBvqB,MAAM,CAACtyM,IAAD,EAAO7I,CAAP,EAAUue,CAAV,CAA/B;AAAA,QACMxW,CAAC,GAAG49N,EAAE,CAACxsO,MADb;AAEA,MAAIitO,EAAE,GAAG,CAAT;AAAA,MACIW,EAAE,GAAG,CADT;AAAA,MAEIC,EAAE,GAAG,CAFT;AAAA,MAGIb,EAAE,GAAG,CAHT;AAAA,MAIIK,GAAG,GAAG,CAJV;AAAA,MAKI3sO,CALJ;AAAA,MAMI8rB,EANJ;AAAA,MAOIhH,EAPJ;AAAA,MAQIg6D,EARJ;;AAUA,OAAK9+E,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,GAAoB;AAClB4d,IAAAA,EAAE,GAAGggN,EAAE,CAAC9rO,CAAD,CAAP;AACA8kB,IAAAA,EAAE,GAAGinN,EAAE,CAAC/rO,CAAC,EAAF,CAAP;AACA8+E,IAAAA,EAAE,GAAGhzD,EAAE,GAAGA,EAAV;AACAygN,IAAAA,EAAE,IAAI,CAACztJ,EAAE,GAAGytJ,EAAN,IAAYvsO,CAAlB;AACAktO,IAAAA,EAAE,IAAI,CAACpuJ,EAAE,GAAGhzD,EAAL,GAAUohN,EAAX,IAAiBltO,CAAvB;AACAmtO,IAAAA,EAAE,IAAI,CAACruJ,EAAE,GAAGA,EAAL,GAAUquJ,EAAX,IAAiBntO,CAAvB;AACAssO,IAAAA,EAAE,IAAI,CAACxgN,EAAE,GAAGhH,EAAL,GAAUwnN,EAAX,IAAiBtsO,CAAvB;AACA2sO,IAAAA,GAAG,IAAI,CAAC7tJ,EAAE,GAAGh6D,EAAL,GAAU6nN,GAAX,IAAkB3sO,CAAzB;AACD;;AAED,QAAMotO,IAAI,GAAGD,EAAE,GAAGZ,EAAE,GAAGA,EAAvB;AAAA,QACM1/N,CAAC,GAAG0/N,EAAE,GAAGa,IAAL,GAAYF,EAAE,GAAGA,EAD3B;AAAA,QAEMhmO,CAAC,GAAG,CAACylO,GAAG,GAAGJ,EAAN,GAAWD,EAAE,GAAGY,EAAjB,IAAuBrgO,CAFjC;AAAA,QAGMkB,CAAC,GAAG,CAACu+N,EAAE,GAAGc,IAAL,GAAYT,GAAG,GAAGO,EAAnB,IAAyBrgO,CAHnC;AAAA,QAIMJ,CAAC,GAAG,CAACvF,CAAD,GAAKqlO,EAJf;AAAA,QAKM/7E,OAAO,GAAGrqJ,CAAC,IAAI;AACnBA,IAAAA,CAAC,GAAGA,CAAC,GAAGylO,EAAR;AACA,WAAO1kO,CAAC,GAAGf,CAAJ,GAAQA,CAAR,GAAY4H,CAAC,GAAG5H,CAAhB,GAAoBsG,CAApB,GAAwBo/N,EAA/B;AACD,GARD,CAxByB,CAgCtB;;;AAGH,SAAO;AACLW,IAAAA,IAAI,EAAE,CAAC//N,CAAC,GAAGsB,CAAC,GAAG69N,EAAR,GAAa1kO,CAAC,GAAG0kO,EAAJ,GAASA,EAAtB,GAA2BC,EAA5B,EAAgC99N,CAAC,GAAG,IAAI7G,CAAJ,GAAQ0kO,EAA5C,EAAgD1kO,CAAhD,CADD;AAELspJ,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAamnN,EAAb,EAAiBr7E,OAAjB;AAHb,GAAP;AAKD,EAED;AACA;AACA;AACA;;;AAEA,SAAS68E,IAAT,CAAer+N,IAAf,EAAqB7I,CAArB,EAAwBue,CAAxB,EAA2BwyL,KAA3B,EAAkC;AAChC;AACA,MAAIA,KAAK,KAAK,CAAd,EAAiB,OAAOphH,MAAM,CAAC9mF,IAAD,EAAO7I,CAAP,EAAUue,CAAV,CAAb;AACjB,MAAIwyL,KAAK,KAAK,CAAd,EAAiB,OAAO+1B,IAAI,CAACj+N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,CAAX;AACjB,QAAM,CAAConN,EAAD,EAAKC,EAAL,EAASH,EAAT,EAAaC,EAAb,IAAmBvqB,MAAM,CAACtyM,IAAD,EAAO7I,CAAP,EAAUue,CAAV,CAA/B;AAAA,QACMxW,CAAC,GAAG49N,EAAE,CAACxsO,MADb;AAAA,QAEMguO,GAAG,GAAG,EAFZ;AAAA,QAGMC,GAAG,GAAG,EAHZ;AAAA,QAIMjwN,CAAC,GAAG45L,KAAK,GAAG,CAJlB;AAKA,MAAIl3M,CAAJ,EAAOiK,CAAP,EAAU6H,CAAV,EAAaI,CAAb,EAAgBzF,CAAhB;;AAEA,OAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsd,CAAhB,EAAmB,EAAEtd,CAArB,EAAwB;AACtB,SAAK8R,CAAC,GAAG,CAAJ,EAAOI,CAAC,GAAG,CAAhB,EAAmBJ,CAAC,GAAG5D,CAAvB,EAA0B,EAAE4D,CAA5B,EAA+B;AAC7BI,MAAAA,CAAC,IAAInM,IAAI,CAAC0Q,GAAL,CAASq1N,EAAE,CAACh6N,CAAD,CAAX,EAAgB9R,CAAhB,IAAqB+rO,EAAE,CAACj6N,CAAD,CAA5B;AACD;;AAEDw7N,IAAAA,GAAG,CAACrtO,IAAJ,CAASiS,CAAT;AACAzF,IAAAA,CAAC,GAAG,IAAIw4M,YAAJ,CAAiB3nM,CAAjB,CAAJ;;AAEA,SAAKrT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqT,CAAhB,EAAmB,EAAErT,CAArB,EAAwB;AACtB,WAAK6H,CAAC,GAAG,CAAJ,EAAOI,CAAC,GAAG,CAAhB,EAAmBJ,CAAC,GAAG5D,CAAvB,EAA0B,EAAE4D,CAA5B,EAA+B;AAC7BI,QAAAA,CAAC,IAAInM,IAAI,CAAC0Q,GAAL,CAASq1N,EAAE,CAACh6N,CAAD,CAAX,EAAgB9R,CAAC,GAAGiK,CAApB,CAAL;AACD;;AAEDwC,MAAAA,CAAC,CAACxC,CAAD,CAAD,GAAOiI,CAAP;AACD;;AAEDq7N,IAAAA,GAAG,CAACttO,IAAJ,CAASwM,CAAT;AACD;;AAED8gO,EAAAA,GAAG,CAACttO,IAAJ,CAASqtO,GAAT;;AAEA,QAAMd,IAAI,GAAGgB,mBAAmB,CAACD,GAAD,CAAhC;AAAA,QACM/8E,OAAO,GAAGrqJ,CAAC,IAAI;AACnBA,IAAAA,CAAC,IAAIylO,EAAL;AACA,QAAIlnN,CAAC,GAAGmnN,EAAE,GAAGW,IAAI,CAAC,CAAD,CAAT,GAAeA,IAAI,CAAC,CAAD,CAAJ,GAAUrmO,CAAzB,GAA6BqmO,IAAI,CAAC,CAAD,CAAJ,GAAUrmO,CAAV,GAAcA,CAAnD;;AAEA,SAAKnG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsd,CAAhB,EAAmB,EAAEtd,CAArB,EAAwB0kB,CAAC,IAAI8nN,IAAI,CAACxsO,CAAD,CAAJ,GAAU+F,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAYnG,CAAZ,CAAf;;AAExB,WAAO0kB,CAAP;AACD,GARD;;AAUA,SAAO;AACL8nN,IAAAA,IAAI,EAAEiB,QAAQ,CAACnwN,CAAD,EAAIkvN,IAAJ,EAAU,CAACZ,EAAX,EAAeC,EAAf,CADT;AAELr7E,IAAAA,OAAO,EAAEA,OAFJ;AAGLy7E,IAAAA,QAAQ,EAAEA,QAAQ,CAACj9N,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAamnN,EAAb,EAAiBr7E,OAAjB;AAHb,GAAP;AAKD;;AAED,SAASi9E,QAAT,CAAkBnwN,CAAlB,EAAqBpW,CAArB,EAAwBf,CAAxB,EAA2Bue,CAA3B,EAA8B;AAC5B,QAAM+wD,CAAC,GAAG31E,KAAK,CAACwd,CAAD,CAAf;AACA,MAAItd,CAAJ,EAAOiK,CAAP,EAAUiI,CAAV,EAAazF,CAAb,CAF4B,CAEZ;;AAEhB,OAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsd,CAAhB,EAAmB,EAAEtd,CAArB,EAAwBy1E,CAAC,CAACz1E,CAAD,CAAD,GAAO,CAAP,CAJI,CAIM;;;AAGlC,OAAKA,CAAC,GAAGsd,CAAC,GAAG,CAAb,EAAgBtd,CAAC,IAAI,CAArB,EAAwB,EAAEA,CAA1B,EAA6B;AAC3BkS,IAAAA,CAAC,GAAGhL,CAAC,CAAClH,CAAD,CAAL;AACAyM,IAAAA,CAAC,GAAG,CAAJ;AACAgpE,IAAAA,CAAC,CAACz1E,CAAD,CAAD,IAAQkS,CAAR;;AAEA,SAAKjI,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIjK,CAAjB,EAAoB,EAAEiK,CAAtB,EAAyB;AACvBwC,MAAAA,CAAC,IAAI,CAACzM,CAAC,GAAG,CAAJ,GAAQiK,CAAT,IAAcA,CAAnB,CADuB,CACD;;AAEtBwrE,MAAAA,CAAC,CAACz1E,CAAC,GAAGiK,CAAL,CAAD,IAAYiI,CAAC,GAAGnM,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY8D,CAAZ,CAAJ,GAAqBwC,CAAjC;AACD;AACF,GAjB2B,CAiB1B;;;AAGFgpE,EAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ/wD,CAAR;AACA,SAAO+wD,CAAP;AACD,EAAC;AACF;;;AAGA,SAAS+3J,mBAAT,CAA6BllB,MAA7B,EAAqC;AACnC,QAAMp6M,CAAC,GAAGo6M,MAAM,CAAChpN,MAAP,GAAgB,CAA1B;AAAA,QACMktO,IAAI,GAAG,EADb;AAEA,MAAIxsO,CAAJ,EAAOiK,CAAP,EAAUqT,CAAV,EAAatP,CAAb,EAAgBtK,CAAhB;;AAEA,OAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBgO,IAAAA,CAAC,GAAGhO,CAAJ,CADsB,CACf;;AAEP,SAAKiK,CAAC,GAAGjK,CAAC,GAAG,CAAb,EAAgBiK,CAAC,GAAGiE,CAApB,EAAuB,EAAEjE,CAAzB,EAA4B;AAC1B,UAAIlE,IAAI,CAACiT,GAAL,CAASsvM,MAAM,CAACtoN,CAAD,CAAN,CAAUiK,CAAV,CAAT,IAAyBlE,IAAI,CAACiT,GAAL,CAASsvM,MAAM,CAACtoN,CAAD,CAAN,CAAUgO,CAAV,CAAT,CAA7B,EAAqD;AACnDA,QAAAA,CAAC,GAAG/D,CAAJ;AACD;AACF;;AAED,SAAKqT,CAAC,GAAGtd,CAAT,EAAYsd,CAAC,GAAGpP,CAAC,GAAG,CAApB,EAAuB,EAAEoP,CAAzB,EAA4B;AAC1B5Z,MAAAA,CAAC,GAAG4kN,MAAM,CAAChrM,CAAD,CAAN,CAAUtd,CAAV,CAAJ;AACAsoN,MAAAA,MAAM,CAAChrM,CAAD,CAAN,CAAUtd,CAAV,IAAesoN,MAAM,CAAChrM,CAAD,CAAN,CAAUtP,CAAV,CAAf;AACAs6M,MAAAA,MAAM,CAAChrM,CAAD,CAAN,CAAUtP,CAAV,IAAetK,CAAf;AACD;;AAED,SAAKuG,CAAC,GAAGjK,CAAC,GAAG,CAAb,EAAgBiK,CAAC,GAAGiE,CAApB,EAAuB,EAAEjE,CAAzB,EAA4B;AAC1B,WAAKqT,CAAC,GAAGpP,CAAT,EAAYoP,CAAC,IAAItd,CAAjB,EAAoBsd,CAAC,EAArB,EAAyB;AACvBgrM,QAAAA,MAAM,CAAChrM,CAAD,CAAN,CAAUrT,CAAV,KAAgBq+M,MAAM,CAAChrM,CAAD,CAAN,CAAUtd,CAAV,IAAesoN,MAAM,CAACtoN,CAAD,CAAN,CAAUiK,CAAV,CAAf,GAA8Bq+M,MAAM,CAACtoN,CAAD,CAAN,CAAUA,CAAV,CAA9C;AACD;AACF;AACF;;AAED,OAAKiK,CAAC,GAAGiE,CAAC,GAAG,CAAb,EAAgBjE,CAAC,IAAI,CAArB,EAAwB,EAAEA,CAA1B,EAA6B;AAC3BvG,IAAAA,CAAC,GAAG,CAAJ;;AAEA,SAAK4Z,CAAC,GAAGrT,CAAC,GAAG,CAAb,EAAgBqT,CAAC,GAAGpP,CAApB,EAAuB,EAAEoP,CAAzB,EAA4B;AAC1B5Z,MAAAA,CAAC,IAAI4kN,MAAM,CAAChrM,CAAD,CAAN,CAAUrT,CAAV,IAAeuiO,IAAI,CAAClvN,CAAD,CAAxB;AACD;;AAEDkvN,IAAAA,IAAI,CAACviO,CAAD,CAAJ,GAAU,CAACq+M,MAAM,CAACp6M,CAAD,CAAN,CAAUjE,CAAV,IAAevG,CAAhB,IAAqB4kN,MAAM,CAACr+M,CAAD,CAAN,CAAUA,CAAV,CAA/B;AACD;;AAED,SAAOuiO,IAAP;AACD;;AAED,MAAMkB,QAAQ,GAAG,CAAjB;AAAA,MACMrwJ,OAAO,GAAG,KADhB,EACuB;AACvB;AACA;;AAEA,SAASswJ,KAAT,CAAgB3+N,IAAhB,EAAsB7I,CAAtB,EAAyBue,CAAzB,EAA4B4lN,SAA5B,EAAuC;AACrC,QAAM,CAACwB,EAAD,EAAKC,EAAL,EAASH,EAAT,EAAaC,EAAb,IAAmBvqB,MAAM,CAACtyM,IAAD,EAAO7I,CAAP,EAAUue,CAAV,EAAa,IAAb,CAA/B;AAAA,QACMxW,CAAC,GAAG49N,EAAE,CAACxsO,MADb;AAAA,QAEMsuO,EAAE,GAAG7nO,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,CAAC,EAAEkkO,SAAS,GAAGp8N,CAAd,CAAb,CAFX;AAAA,QAGM;AACN2/N,EAAAA,IAAI,GAAG,IAAI5oB,YAAJ,CAAiB/2M,CAAjB,CAJP;AAAA,QAKM4/N,SAAS,GAAG,IAAI7oB,YAAJ,CAAiB/2M,CAAjB,CALlB;AAAA,QAMM6/N,aAAa,GAAG,IAAI9oB,YAAJ,CAAiB/2M,CAAjB,EAAoBsC,IAApB,CAAyB,CAAzB,CANtB;;AAQA,OAAK,IAAIgnL,IAAI,GAAG,CAAC,CAAjB,EAAoB,EAAEA,IAAF,IAAUk2C,QAA9B,GAAyC;AACvC,UAAMriB,QAAQ,GAAG,CAAC,CAAD,EAAIuiB,EAAE,GAAG,CAAT,CAAjB;;AAEA,SAAK,IAAI5tO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,YAAM8rB,EAAE,GAAGggN,EAAE,CAAC9rO,CAAD,CAAb;AAAA,YACM0gG,EAAE,GAAG2qH,QAAQ,CAAC,CAAD,CADnB;AAAA,YAEMhT,EAAE,GAAGgT,QAAQ,CAAC,CAAD,CAFnB;AAAA,YAGM2iB,IAAI,GAAGliN,EAAE,GAAGggN,EAAE,CAACprI,EAAD,CAAP,GAAcorI,EAAE,CAACzzB,EAAD,CAAF,GAASvsL,EAAvB,GAA4B40E,EAA5B,GAAiC23G,EAH9C;AAIA,UAAI2jB,CAAC,GAAG,CAAR;AAAA,UACIpmJ,CAAC,GAAG,CADR;AAAA,UAEI+1J,CAAC,GAAG,CAFR;AAAA,UAGIW,EAAE,GAAG,CAHT;AAAA,UAIIC,EAAE,GAAG,CAJT;AAKA,YAAM0B,KAAK,GAAG,IAAIloO,IAAI,CAACiT,GAAL,CAAS8yN,EAAE,CAACkC,IAAD,CAAF,GAAWliN,EAAX,IAAiB,CAA1B,CAAlB,CAV0B,CAUsB;;AAEhD,WAAK,IAAIxO,CAAC,GAAGojF,EAAb,EAAiBpjF,CAAC,IAAI+6L,EAAtB,EAA0B,EAAE/6L,CAA5B,EAA+B;AAC7B,cAAM4wN,EAAE,GAAGpC,EAAE,CAACxuN,CAAD,CAAb;AAAA,cACM6wN,EAAE,GAAGpC,EAAE,CAACzuN,CAAD,CADb;AAAA,cAEMgvC,CAAC,GAAG8hL,OAAO,CAACroO,IAAI,CAACiT,GAAL,CAAS8S,EAAE,GAAGoiN,EAAd,IAAoBD,KAArB,CAAP,GAAqCF,aAAa,CAACzwN,CAAD,CAF5D;AAAA,cAGM+wN,GAAG,GAAGH,EAAE,GAAG5hL,CAHjB;AAIA0vK,QAAAA,CAAC,IAAI1vK,CAAL;AACAspB,QAAAA,CAAC,IAAIy4J,GAAL;AACA1C,QAAAA,CAAC,IAAIwC,EAAE,GAAG7hL,CAAV;AACAggL,QAAAA,EAAE,IAAI6B,EAAE,GAAGE,GAAX;AACA9B,QAAAA,EAAE,IAAI2B,EAAE,GAAGG,GAAX;AACD,OAtByB,CAsBxB;;;AAGF,YAAM,CAACnnO,CAAD,EAAI6G,CAAJ,IAASq9N,GAAG,CAACx1J,CAAC,GAAGomJ,CAAL,EAAQ2P,CAAC,GAAG3P,CAAZ,EAAesQ,EAAE,GAAGtQ,CAApB,EAAuBuQ,EAAE,GAAGvQ,CAA5B,CAAlB;AACA6R,MAAAA,IAAI,CAAC7tO,CAAD,CAAJ,GAAUkH,CAAC,GAAG6G,CAAC,GAAG+d,EAAlB;AACAgiN,MAAAA,SAAS,CAAC9tO,CAAD,CAAT,GAAe+F,IAAI,CAACiT,GAAL,CAAS+yN,EAAE,CAAC/rO,CAAD,CAAF,GAAQ6tO,IAAI,CAAC7tO,CAAD,CAArB,CAAf;AACAsuO,MAAAA,cAAc,CAACxC,EAAD,EAAK9rO,CAAC,GAAG,CAAT,EAAYqrN,QAAZ,CAAd;AACD;;AAED,QAAI7zB,IAAI,KAAKk2C,QAAb,EAAuB;AACrB;AACD;;AAED,UAAMa,cAAc,GAAG,qBAAOT,SAAP,CAAvB;AACA,QAAI/nO,IAAI,CAACiT,GAAL,CAASu1N,cAAT,IAA2BlxJ,OAA/B,EAAwC;;AAExC,SAAK,IAAIr9E,CAAC,GAAG,CAAR,EAAWu9B,GAAX,EAAgB+uB,CAArB,EAAwBtsD,CAAC,GAAGkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClCu9B,MAAAA,GAAG,GAAGuwM,SAAS,CAAC9tO,CAAD,CAAT,IAAgB,IAAIuuO,cAApB,CAAN,CADkC,CACS;AAC3C;;AAEAR,MAAAA,aAAa,CAAC/tO,CAAD,CAAb,GAAmBu9B,GAAG,IAAI,CAAP,GAAW8/C,OAAX,GAAqB,CAAC/wB,CAAC,GAAG,IAAI/uB,GAAG,GAAGA,GAAf,IAAsB+uB,CAA9D;AACD;AACF;;AAED,SAAO5iC,MAAM,CAACoiN,EAAD,EAAK+B,IAAL,EAAWjC,EAAX,EAAeC,EAAf,CAAb;AACD,EAAC;;;AAEF,SAASuC,OAAT,CAAiBjoO,CAAjB,EAAoB;AAClB,SAAO,CAACA,CAAC,GAAG,IAAIA,CAAC,GAAGA,CAAJ,GAAQA,CAAjB,IAAsBA,CAAtB,GAA0BA,CAAjC;AACD,EAAC;;;AAGF,SAASmoO,cAAT,CAAwBxC,EAAxB,EAA4B9rO,CAA5B,EAA+BqrN,QAA/B,EAAyC;AACvC,QAAM/kN,GAAG,GAAGwlO,EAAE,CAAC9rO,CAAD,CAAd;AACA,MAAImzC,IAAI,GAAGk4K,QAAQ,CAAC,CAAD,CAAnB;AAAA,MACIj4K,KAAK,GAAGi4K,QAAQ,CAAC,CAAD,CAAR,GAAc,CAD1B;AAEA,MAAIj4K,KAAK,IAAI04L,EAAE,CAACxsO,MAAhB,EAAwB,OAJe,CAIP;AAChC;;AAEA,SAAOU,CAAC,GAAGmzC,IAAJ,IAAY24L,EAAE,CAAC14L,KAAD,CAAF,GAAY9sC,GAAZ,IAAmBA,GAAG,GAAGwlO,EAAE,CAAC34L,IAAD,CAA9C,EAAsD;AACpDk4K,IAAAA,QAAQ,CAAC,CAAD,CAAR,GAAc,EAAEl4K,IAAhB;AACAk4K,IAAAA,QAAQ,CAAC,CAAD,CAAR,GAAcj4K,KAAd;AACA,MAAEA,KAAF;AACD;AACF,EAAC;AACF;;;AAGA,SAAS1pB,MAAT,CAAgBoiN,EAAhB,EAAoB+B,IAApB,EAA0BjC,EAA1B,EAA8BC,EAA9B,EAAkC;AAChC,QAAM39N,CAAC,GAAG49N,EAAE,CAACxsO,MAAb;AAAA,QACM+mB,GAAG,GAAG,EADZ;AAEA,MAAIrmB,CAAC,GAAG,CAAR;AAAA,MACIwuO,GAAG,GAAG,CADV;AAAA,MAEIr1I,IAAI,GAAG,EAFX;AAAA,MAGIjnF,CAHJ;;AAKA,SAAOlS,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkS,IAAAA,CAAC,GAAG45N,EAAE,CAAC9rO,CAAD,CAAF,GAAQ4rO,EAAZ;;AAEA,QAAIzyI,IAAI,CAAC,CAAD,CAAJ,KAAYjnF,CAAhB,EAAmB;AACjB;AACAinF,MAAAA,IAAI,CAAC,CAAD,CAAJ,IAAW,CAAC00I,IAAI,CAAC7tO,CAAD,CAAJ,GAAUm5F,IAAI,CAAC,CAAD,CAAf,IAAsB,EAAEq1I,GAAnC;AACD,KAHD,MAGO;AACL;AACAA,MAAAA,GAAG,GAAG,CAAN;AACAr1I,MAAAA,IAAI,CAAC,CAAD,CAAJ,IAAW0yI,EAAX;AACA1yI,MAAAA,IAAI,GAAG,CAACjnF,CAAD,EAAI27N,IAAI,CAAC7tO,CAAD,CAAR,CAAP;AACAqmB,MAAAA,GAAG,CAACpmB,IAAJ,CAASk5F,IAAT;AACD;AACF;;AAEDA,EAAAA,IAAI,CAAC,CAAD,CAAJ,IAAW0yI,EAAX;AACA,SAAOxlN,GAAP;AACD,EAED;;;AACA,MAAMooN,WAAW,GAAG,MAAM1oO,IAAI,CAACuiC,EAAX,GAAgB,GAApC,EAAyC;;AAEzC,SAASomM,WAAT,CAAsB/iO,CAAtB,EAAyB0tM,MAAzB,EAAiCs1B,QAAjC,EAA2CC,QAA3C,EAAqD;AACnDD,EAAAA,QAAQ,GAAGA,QAAQ,IAAI,EAAvB;AACAC,EAAAA,QAAQ,GAAG7oO,IAAI,CAACK,GAAL,CAASuoO,QAAT,EAAmBC,QAAQ,IAAI,GAA/B,CAAX;;AAEA,QAAMrtB,KAAK,GAAGp7M,CAAC,IAAI,CAACA,CAAD,EAAIwF,CAAC,CAACxF,CAAD,CAAL,CAAnB;AAAA,QACM0oO,IAAI,GAAGx1B,MAAM,CAAC,CAAD,CADnB;AAAA,QAEMy1B,IAAI,GAAGz1B,MAAM,CAAC,CAAD,CAFnB;AAAA,QAGMzC,IAAI,GAAGk4B,IAAI,GAAGD,IAHpB;AAAA,QAIMttM,IAAI,GAAGq1K,IAAI,GAAGg4B,QAJpB;AAAA,QAKMz1I,IAAI,GAAG,CAACooH,KAAK,CAACstB,IAAD,CAAN,CALb;AAAA,QAMMn6J,IAAI,GAAG,EANb;;AAQA,MAAIi6J,QAAQ,KAAKC,QAAjB,EAA2B;AACzB;AACA,SAAK,IAAI5uO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4uO,QAApB,EAA8B,EAAE5uO,CAAhC,EAAmC;AACjCm5F,MAAAA,IAAI,CAACl5F,IAAL,CAAUshN,KAAK,CAACstB,IAAI,GAAG7uO,CAAC,GAAG2uO,QAAJ,GAAe/3B,IAAvB,CAAf;AACD;;AAEDz9G,IAAAA,IAAI,CAACl5F,IAAL,CAAUshN,KAAK,CAACutB,IAAD,CAAf;AACA,WAAO31I,IAAP;AACD,GARD,MAQO;AACL;AACA;AACAzkB,IAAAA,IAAI,CAACz0E,IAAL,CAAUshN,KAAK,CAACutB,IAAD,CAAf;;AAEA,SAAK,IAAI9uO,CAAC,GAAG2uO,QAAb,EAAuB,EAAE3uO,CAAF,GAAM,CAA7B,GAAiC;AAC/B00E,MAAAA,IAAI,CAACz0E,IAAL,CAAUshN,KAAK,CAACstB,IAAI,GAAG7uO,CAAC,GAAG2uO,QAAJ,GAAe/3B,IAAvB,CAAf;AACD;AACF;;AAED,MAAIsL,EAAE,GAAG/oH,IAAI,CAAC,CAAD,CAAb;AAAA,MACI47B,EAAE,GAAGrgD,IAAI,CAACA,IAAI,CAACp1E,MAAL,GAAc,CAAf,CADb;;AAGA,SAAOy1H,EAAP,EAAW;AACT;AACA,UAAMg6G,EAAE,GAAGxtB,KAAK,CAAC,CAACW,EAAE,CAAC,CAAD,CAAF,GAAQntF,EAAE,CAAC,CAAD,CAAX,IAAkB,CAAnB,CAAhB;;AAEA,QAAIg6G,EAAE,CAAC,CAAD,CAAF,GAAQ7sB,EAAE,CAAC,CAAD,CAAV,IAAiB3gL,IAAjB,IAAyBytM,UAAU,CAAC9sB,EAAD,EAAK6sB,EAAL,EAASh6G,EAAT,CAAV,GAAyB05G,WAAtD,EAAmE;AACjE;AACA;AACA;AACA/5J,MAAAA,IAAI,CAACz0E,IAAL,CAAU8uO,EAAV;AACD,KALD,MAKO;AACL;AACA;AACA7sB,MAAAA,EAAE,GAAGntF,EAAL;AACA57B,MAAAA,IAAI,CAACl5F,IAAL,CAAU80H,EAAV;AACArgD,MAAAA,IAAI,CAACtqD,GAAL;AACD;;AAED2qG,IAAAA,EAAE,GAAGrgD,IAAI,CAACA,IAAI,CAACp1E,MAAL,GAAc,CAAf,CAAT;AACD;;AAED,SAAO65F,IAAP;AACD;;AAED,SAAS61I,UAAT,CAAoB1qM,CAApB,EAAuBozD,CAAvB,EAA0B1pF,CAA1B,EAA6B;AAC3B,QAAMihO,EAAE,GAAGlpO,IAAI,CAACuQ,KAAL,CAAWtI,CAAC,CAAC,CAAD,CAAD,GAAOs2B,CAAC,CAAC,CAAD,CAAnB,EAAwBt2B,CAAC,CAAC,CAAD,CAAD,GAAOs2B,CAAC,CAAC,CAAD,CAAhC,CAAX;AAAA,QACM4qM,EAAE,GAAGnpO,IAAI,CAACuQ,KAAL,CAAWohF,CAAC,CAAC,CAAD,CAAD,GAAOpzD,CAAC,CAAC,CAAD,CAAnB,EAAwBozD,CAAC,CAAC,CAAD,CAAD,GAAOpzD,CAAC,CAAC,CAAD,CAAhC,CADX;AAEA,SAAOv+B,IAAI,CAACiT,GAAL,CAASi2N,EAAE,GAAGC,EAAd,CAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9tCD;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASC,QAAT,CAAkBxjO,CAAlB,EAAqB;AACnB,SAAOxF,CAAC,IAAI;AACV,UAAM+H,CAAC,GAAGvC,CAAC,CAACrM,MAAZ;AACA,QAAIU,CAAC,GAAG,CAAR;AAAA,QACIsd,CAAC,GAAGhS,MAAM,CAACK,CAAC,CAAC,CAAD,CAAD,CAAKxF,CAAL,CAAD,CADd;;AAGA,WAAOnG,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBsd,MAAAA,CAAC,IAAI,MAAM3R,CAAC,CAAC3L,CAAD,CAAD,CAAKmG,CAAL,CAAX;AACD;;AAED,WAAOmX,CAAP;AACD,GAVD;AAWD;;AACD,SAAS8xN,QAAT,CAAkBtxL,MAAlB,EAA0B;AACxB,SAAO,CAACA,MAAD,IAAW,CAACA,MAAM,CAACx+C,MAAnB,GAA4B,YAAY;AAC7C,WAAO,EAAP;AACD,GAFM,GAEHw+C,MAAM,CAACx+C,MAAP,KAAkB,CAAlB,GAAsBw+C,MAAM,CAAC,CAAD,CAA5B,GAAkCqxL,QAAQ,CAACrxL,MAAD,CAF9C;AAGD;;AAED,SAASuxL,WAAT,CAAqB1wM,EAArB,EAAyB62F,KAAzB,EAAgC85G,EAAhC,EAAoC;AAClC,SAAOA,EAAE,IAAI3wM,EAAE,IAAI,CAAC62F,KAAD,GAAS,EAAT,GAAc,MAAMA,KAAxB,CAAf;AACD;;AAED,MAAM50H,IAAI,GAAG,MAAM,CAAE,CAArB;;AAEA,MAAM2uO,OAAO,GAAG;AACd15J,EAAAA,IAAI,EAAEj1E,IADQ;AAEd+f,EAAAA,GAAG,EAAE/f,IAFS;AAGdihG,EAAAA,GAAG,EAAEjhG,IAHS;AAId4kD,EAAAA,GAAG,EAAE;AAJS,CAAhB;AAMA,MAAMgqL,YAAY,GAAG;AACnBplO,EAAAA,MAAM,EAAE;AACNyrE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOmqE,KAAP,GAAe,IADpB;AAENzsO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAY5E,MAAZ,EAFN;AAGNo7C,IAAAA,GAAG,EAAE,CAAC;AAHA,GADW;AAMnBuyB,EAAAA,KAAK,EAAE;AACL/0E,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAO36J;AADd,GANY;AASnB+kO,EAAAA,SAAS,EAAE;AACT1sO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACk4I,OAAF,GAAYl4I,CAAC,CAAC2zG;AADjB,GATQ;AAYnBukC,EAAAA,OAAO,EAAE;AACP3sO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACk4I;AADP,GAZU;AAenBvkC,EAAAA,KAAK,EAAE;AACLpoM,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG;AADT,GAfY;AAkBnB7kM,EAAAA,GAAG,EAAE;AACHsvE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAAClxF,GAAF,GAAQ,CADhB;AAEHvD,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAClxF,GAFX;AAGHoa,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAAClxF,GAAF,IAAS,CAAC2L,CAHtB;AAIH2vF,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAAClxF,GAAF,IAAS2L;AAJrB,GAlBc;AAwBnBm6D,EAAAA,OAAO,EAAE;AACPwJ,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACprB,OAAF,GAAY,CADhB;AAEPrpE,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU3zG,CAAC,CAACprB,OAAZ,GAAsB6oD,SAF3B;AAGPv0G,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAACprB,OAAF,IAAan6D,CAHrB;AAIP2vF,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAACprB,OAAF,IAAan6D;AAJrB,GAxBU;AA8BnBwD,EAAAA,IAAI,EAAE;AACJmgE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAAC/hF,IAAF,GAAS,CADhB;AAEJ1S,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU3zG,CAAC,CAAC/hF,IAAZ,GAAmBw/G,SAF3B;AAGJv0G,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,MAAWulF,CAAC,CAACm4I,MAAF,GAAW19N,CAAC,GAAGulF,CAAC,CAAC/hF,IAAjB,EAAuB+hF,CAAC,CAAC/hF,IAAF,IAAU+hF,CAAC,CAACm4I,MAAF,GAAWn4I,CAAC,CAAC2zG,KAAzD,CAHD;AAIJvpG,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,MAAWulF,CAAC,CAACm4I,MAAF,GAAW19N,CAAC,GAAGulF,CAAC,CAAC/hF,IAAjB,EAAuB+hF,CAAC,CAAC/hF,IAAF,IAAU+hF,CAAC,CAAC2zG,KAAF,GAAU3zG,CAAC,CAACm4I,MAAF,GAAWn4I,CAAC,CAAC2zG,KAAvB,GAA+B3zG,CAAC,CAAC/hF,IAA7E;AAJD,GA9Ba;AAoCnBw3J,EAAAA,OAAO,EAAE;AACPlqK,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU3zG,CAAC,CAAC/hF,IAAZ,GAAmBw/G,SADxB;AAEP26G,IAAAA,GAAG,EAAE,CAAC,MAAD,CAFE;AAGPrqL,IAAAA,GAAG,EAAE;AAHE,GApCU;AAyCnB7vC,EAAAA,QAAQ,EAAE;AACRkgE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACq4I,GAAF,GAAQ,CADX;AAER9sO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU,CAAV,GAAc3zG,CAAC,CAACq4I,GAAF,IAASr4I,CAAC,CAAC2zG,KAAF,GAAU,CAAnB,CAAd,GAAsCl2E,SAF1C;AAGRv0G,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAACq4I,GAAF,IAASr4I,CAAC,CAACm4I,MAAF,IAAY19N,CAAC,GAAGulF,CAAC,CAAC/hF,IAAlB,CAHhB;AAIRmsF,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAUulF,CAAC,CAACq4I,GAAF,IAASr4I,CAAC,CAACm4I,MAAF,IAAY19N,CAAC,GAAGulF,CAAC,CAAC/hF,IAAlB,CAJhB;AAKRm6N,IAAAA,GAAG,EAAE,CAAC,MAAD,CALG;AAMRrqL,IAAAA,GAAG,EAAE;AANG,GAzCS;AAiDnBuqL,EAAAA,SAAS,EAAE;AACT/sO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU,CAAV,GAAc3zG,CAAC,CAACq4I,GAAF,GAAQr4I,CAAC,CAAC2zG,KAAxB,GAAgCl2E,SADnC;AAET26G,IAAAA,GAAG,EAAE,CAAC,UAAD,CAFI;AAGTrqL,IAAAA,GAAG,EAAE;AAHI,GAjDQ;AAsDnBmkL,EAAAA,KAAK,EAAE;AACL3mO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU,CAAV,GAAcrlM,IAAI,CAACqC,IAAL,CAAUqvF,CAAC,CAACq4I,GAAF,IAASr4I,CAAC,CAAC2zG,KAAF,GAAU,CAAnB,CAAV,CAAd,GAAiDl2E,SADxD;AAEL26G,IAAAA,GAAG,EAAE,CAAC,UAAD,CAFA;AAGLrqL,IAAAA,GAAG,EAAE;AAHA,GAtDY;AA2DnBwqL,EAAAA,MAAM,EAAE;AACNhtO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU,CAAV,GAAcrlM,IAAI,CAACqC,IAAL,CAAUqvF,CAAC,CAACq4I,GAAF,GAAQr4I,CAAC,CAAC2zG,KAApB,CAAd,GAA2Cl2E,SADjD;AAEN26G,IAAAA,GAAG,EAAE,CAAC,UAAD,CAFC;AAGNrqL,IAAAA,GAAG,EAAE;AAHC,GA3DW;AAgEnByqL,EAAAA,MAAM,EAAE;AACNjtO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC2zG,KAAF,GAAU,CAAV,GAAcrlM,IAAI,CAACqC,IAAL,CAAUqvF,CAAC,CAACq4I,GAAF,IAASr4I,CAAC,CAAC2zG,KAAF,IAAW3zG,CAAC,CAAC2zG,KAAF,GAAU,CAArB,CAAT,CAAV,CAAd,GAA6Dl2E,SADnE;AAEN26G,IAAAA,GAAG,EAAE,CAAC,UAAD,CAFC;AAGNrqL,IAAAA,GAAG,EAAE;AAHC,GAhEW;AAqEnB0qL,EAAAA,QAAQ,EAAE;AACRltO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYkhO,QAAZ,CAAqBz4I,CAAC,CAAC30F,GAAvB,CADJ;AAER+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFG;AAGRrqL,IAAAA,GAAG,EAAE;AAHG,GArES;AA0EnB2qL,EAAAA,GAAG,EAAE;AACHntO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYmhO,GAAZ,CAAgB14I,CAAC,CAAC30F,GAAlB,CADT;AAEH+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFF;AAGHrqL,IAAAA,GAAG,EAAE;AAHF,GA1Ec;AA+EnB4qL,EAAAA,GAAG,EAAE;AACHptO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYohO,GAAZ,CAAgB34I,CAAC,CAAC30F,GAAlB,CADT;AAEH+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFF;AAGHrqL,IAAAA,GAAG,EAAE;AAHF,GA/Ec;AAoFnB6qL,EAAAA,MAAM,EAAE;AACNrtO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYshO,EAAZ,CAAe74I,CAAC,CAAC30F,GAAjB,CADN;AAEN+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFC;AAGNrqL,IAAAA,GAAG,EAAE;AAHC,GApFW;AAyFnB+qL,EAAAA,EAAE,EAAE;AACFvtO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYuhO,EAAZ,CAAe94I,CAAC,CAAC30F,GAAjB,CADV;AAEF+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFH;AAGFrqL,IAAAA,GAAG,EAAE;AAHH,GAzFe;AA8FnBgrL,EAAAA,EAAE,EAAE;AACFxtO,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYwhO,EAAZ,CAAe/4I,CAAC,CAAC30F,GAAjB,CADV;AAEF+sO,IAAAA,GAAG,EAAE,CAAC,QAAD,CAFH;AAGFrqL,IAAAA,GAAG,EAAE;AAHH,GA9Fe;AAmGnBt/C,EAAAA,GAAG,EAAE;AACH2vE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACvxF,GAAF,GAAQgvH,SADhB;AAEHlyH,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACvxF,GAAF,GAAQkH,MAAM,CAACxC,KAAP,CAAa6sF,CAAC,CAACvxF,GAAf,IAAsBuxF,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAY9I,GAAZ,CAAgBuxF,CAAC,CAAC30F,GAAlB,CAAtB,GAA+C20F,CAAC,CAACvxF,GAFlE;AAGHya,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,GAAGulF,CAAC,CAACvxF,GAAN,IAAauxF,CAAC,CAACvxF,GAAF,KAAUgvH,SAA3B,EAAsCz9B,CAAC,CAACvxF,GAAF,GAAQgM,CAAR;AACvC,KALE;AAMH2vF,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,IAAIulF,CAAC,CAACvxF,GAAX,EAAgBuxF,CAAC,CAACvxF,GAAF,GAAQqsE,GAAR;AACjB,KARE;AASHs9J,IAAAA,GAAG,EAAE,CAAC,QAAD,CATF;AAUHrqL,IAAAA,GAAG,EAAE;AAVF,GAnGc;AA+GnBp/C,EAAAA,GAAG,EAAE;AACHyvE,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACrxF,GAAF,GAAQ8uH,SADhB;AAEHlyH,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACrxF,GAAF,GAAQgH,MAAM,CAACxC,KAAP,CAAa6sF,CAAC,CAACrxF,GAAf,IAAsBqxF,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAY5I,GAAZ,CAAgBqxF,CAAC,CAAC30F,GAAlB,CAAtB,GAA+C20F,CAAC,CAACrxF,GAFlE;AAGHua,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,GAAGulF,CAAC,CAACrxF,GAAN,IAAaqxF,CAAC,CAACrxF,GAAF,KAAU8uH,SAA3B,EAAsCz9B,CAAC,CAACrxF,GAAF,GAAQ8L,CAAR;AACvC,KALE;AAMH2vF,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,IAAIulF,CAAC,CAACrxF,GAAX,EAAgBqxF,CAAC,CAACrxF,GAAF,GAAQmsE,GAAR;AACjB,KARE;AASHs9J,IAAAA,GAAG,EAAE,CAAC,QAAD,CATF;AAUHrqL,IAAAA,GAAG,EAAE;AAVF,GA/Gc;AA2HnBirL,EAAAA,MAAM,EAAE;AACN56J,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACg5I,MAAF,GAAWv7G,SADhB;AAENlyH,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACg5I,MAAF,IAAYh5I,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAYyhO,MAAZ,CAAmBh5I,CAAC,CAAC30F,GAArB,CAFlB;AAGN6d,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,EAAOxO,CAAP,KAAa;AAChB,UAAIwO,CAAC,GAAGulF,CAAC,CAACvxF,GAAV,EAAeuxF,CAAC,CAACg5I,MAAF,GAAW/sO,CAAX;AAChB,KALK;AAMNm+F,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,IAAIulF,CAAC,CAACvxF,GAAX,EAAgBuxF,CAAC,CAACg5I,MAAF,GAAWv7G,SAAX;AACjB,KARK;AASN26G,IAAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,QAAR,CATC;AAUNrqL,IAAAA,GAAG,EAAE;AAVC,GA3HW;AAuInBkrL,EAAAA,MAAM,EAAE;AACN76J,IAAAA,IAAI,EAAE4hB,CAAC,IAAIA,CAAC,CAACi5I,MAAF,GAAWx7G,SADhB;AAENlyH,IAAAA,KAAK,EAAEy0F,CAAC,IAAIA,CAAC,CAACi5I,MAAF,IAAYj5I,CAAC,CAAC6tE,IAAF,CAAOt2J,IAAP,CAAY0hO,MAAZ,CAAmBj5I,CAAC,CAAC30F,GAArB,CAFlB;AAGN6d,IAAAA,GAAG,EAAE,CAAC82E,CAAD,EAAIvlF,CAAJ,EAAOxO,CAAP,KAAa;AAChB,UAAIwO,CAAC,GAAGulF,CAAC,CAACrxF,GAAV,EAAeqxF,CAAC,CAACi5I,MAAF,GAAWhtO,CAAX;AAChB,KALK;AAMNm+F,IAAAA,GAAG,EAAE,CAACpK,CAAD,EAAIvlF,CAAJ,KAAU;AACb,UAAIA,CAAC,IAAIulF,CAAC,CAACrxF,GAAX,EAAgBqxF,CAAC,CAACi5I,MAAF,GAAWx7G,SAAX;AACjB,KARK;AASN26G,IAAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,QAAR,CATC;AAUNrqL,IAAAA,GAAG,EAAE;AAVC;AAvIW,CAArB;AAoJA,MAAMmrL,iBAAiB,GAAG5tO,MAAM,CAACof,IAAP,CAAYqtN,YAAZ,CAA1B;;AAEA,SAASoB,OAAT,CAAiB3sO,GAAjB,EAAsBjB,KAAtB,EAA6B;AAC3B,SAAOqjB,GAAG,IAAI,sBAAO;AACnB9kB,IAAAA,IAAI,EAAE0C,GADa;AAEnBoiB,IAAAA,GAAG,EAAEA,GAAG,IAAIpiB;AAFO,GAAP,EAGXsrO,OAHW,EAGFvsO,KAHE,CAAd;AAID;;AAED2tO,iBAAiB,CAAC7sO,OAAlB,CAA0BG,GAAG,IAAI;AAC/BurO,EAAAA,YAAY,CAACvrO,GAAD,CAAZ,GAAoB2sO,OAAO,CAAC3sO,GAAD,EAAMurO,YAAY,CAACvrO,GAAD,CAAlB,CAA3B;AACD,CAFD;;AAGA,SAAS4sO,aAAT,CAAuBlyM,EAAvB,EAA2Bp9B,IAA3B,EAAiC;AAC/B,SAAOiuO,YAAY,CAAC7wM,EAAD,CAAZ,CAAiBp9B,IAAjB,CAAP;AACD;;AAED,SAASuvO,YAAT,CAAsB5pO,CAAtB,EAAyB6G,CAAzB,EAA4B;AAC1B,SAAO7G,CAAC,CAACs+C,GAAF,GAAQz3C,CAAC,CAACy3C,GAAjB;AACD;;AAED,SAAS58C,OAAT,CAAiBmoO,GAAjB,EAAsB;AACpB,QAAMtnO,GAAG,GAAG,EAAZ;AACAsnO,EAAAA,GAAG,CAACjtO,OAAJ,CAAYoD,CAAC,IAAIuC,GAAG,CAACvC,CAAC,CAAC3F,IAAH,CAAH,GAAc2F,CAA/B;;AAEA,QAAM8pO,OAAO,GAAG9pO,CAAC,IAAI;AACnB,QAAI,CAACA,CAAC,CAAC2oO,GAAP,EAAY;AACZ3oO,IAAAA,CAAC,CAAC2oO,GAAF,CAAM/rO,OAAN,CAAcG,GAAG,IAAI;AACnB,UAAI,CAACwF,GAAG,CAACxF,GAAD,CAAR,EAAe+sO,OAAO,CAACvnO,GAAG,CAACxF,GAAD,CAAH,GAAWurO,YAAY,CAACvrO,GAAD,CAAZ,EAAZ,CAAP;AAChB,KAFD;AAGD,GALD;;AAOA8sO,EAAAA,GAAG,CAACjtO,OAAJ,CAAYktO,OAAZ;AACA,SAAOjuO,MAAM,CAACqH,MAAP,CAAcX,GAAd,EAAmBO,IAAnB,CAAwB8mO,YAAxB,CAAP;AACD;;AAED,SAASj7J,IAAT,GAAgB;AACd,OAAKu1H,KAAL,GAAa,CAAb;AACA,OAAKukC,OAAL,GAAe,CAAf;;AAEA,OAAKsB,IAAL,CAAUntO,OAAV,CAAkB66B,EAAE,IAAIA,EAAE,CAACk3C,IAAH,CAAQ,IAAR,CAAxB;AACD;;AAED,SAASl1D,GAAT,CAAazO,CAAb,EAAgBxO,CAAhB,EAAmB;AACjB,MAAIwO,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAvB,EAA2B;AACzB,MAAE,KAAKy9N,OAAP;AACA;AACD;;AAED,MAAIz9N,CAAC,KAAKA,CAAV,EAAa;AACb,IAAE,KAAKk5L,KAAP;;AAEA,OAAK6lC,IAAL,CAAUntO,OAAV,CAAkB66B,EAAE,IAAIA,EAAE,CAAChe,GAAH,CAAO,IAAP,EAAazO,CAAb,EAAgBxO,CAAhB,CAAxB;AACD;;AAED,SAASm+F,GAAT,CAAa3vF,CAAb,EAAgBxO,CAAhB,EAAmB;AACjB,MAAIwO,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAvB,EAA2B;AACzB,MAAE,KAAKy9N,OAAP;AACA;AACD;;AAED,MAAIz9N,CAAC,KAAKA,CAAV,EAAa;AACb,IAAE,KAAKk5L,KAAP;;AAEA,OAAK6lC,IAAL,CAAUntO,OAAV,CAAkB66B,EAAE,IAAIA,EAAE,CAACkjE,GAAH,CAAO,IAAP,EAAa3vF,CAAb,EAAgBxO,CAAhB,CAAxB;AACD;;AAED,SAASf,GAAT,CAAae,CAAb,EAAgB;AACd,OAAKwtO,IAAL,CAAUptO,OAAV,CAAkB66B,EAAE,IAAIj7B,CAAC,CAACi7B,EAAE,CAACtY,GAAJ,CAAD,GAAYsY,EAAE,CAAC37B,KAAH,CAAS,IAAT,CAApC;;AAEA,SAAOU,CAAP;AACD;;AAED,SAASytO,eAAT,CAAyBJ,GAAzB,EAA8Bv7G,KAA9B,EAAqC;AACnC,QAAM1yH,GAAG,GAAG0yH,KAAK,IAAIyK,kBAArB;AAAA,QACMtM,GAAG,GAAG/qH,OAAO,CAACmoO,GAAD,CADnB;AAAA,QAEM1qN,GAAG,GAAG0qN,GAAG,CAAC1nO,KAAJ,GAAYW,IAAZ,CAAiB8mO,YAAjB,CAFZ;;AAIA,WAASM,GAAT,CAAa9rE,IAAb,EAAmB;AACjB,SAAK2rE,IAAL,GAAYt9G,GAAZ;AACA,SAAKu9G,IAAL,GAAY7qN,GAAZ;AACA,SAAKi/I,IAAL,GAAYA,IAAZ;AACA,SAAKzvF,IAAL;AACD;;AAEDu7J,EAAAA,GAAG,CAAChxO,SAAJ,CAAcy1E,IAAd,GAAqBA,IAArB;AACAu7J,EAAAA,GAAG,CAAChxO,SAAJ,CAAcugB,GAAd,GAAoBA,GAApB;AACAywN,EAAAA,GAAG,CAAChxO,SAAJ,CAAcyhG,GAAd,GAAoBA,GAApB;AACAuvI,EAAAA,GAAG,CAAChxO,SAAJ,CAAcuC,GAAd,GAAoBA,GAApB;AACAyuO,EAAAA,GAAG,CAAChxO,SAAJ,CAAc0C,GAAd,GAAoBA,GAApB;AACAsuO,EAAAA,GAAG,CAACtzL,MAAJ,GAAaizL,GAAG,CAACtnO,GAAJ,CAAQk1B,EAAE,IAAIA,EAAE,CAACtY,GAAjB,CAAb;AACA,SAAO+qN,GAAP;AACD;;AAED,SAASC,UAAT,CAAoBptO,GAApB,EAAyB;AACvB,OAAKqtO,IAAL,GAAYrtO,GAAG,GAAG,qBAAMA,GAAN,CAAH,GAAgBy7N,qBAA/B;AACA,OAAKhzM,KAAL;AACD;;AACD,MAAMtsB,SAAS,GAAGixO,UAAU,CAACjxO,SAA7B;;AAEAA,SAAS,CAACssB,KAAV,GAAkB,YAAY;AAC5B,OAAK6kN,IAAL,GAAY,EAAZ;AACA,OAAKC,IAAL,GAAY,EAAZ;AACA,OAAKC,IAAL,GAAY,IAAZ;AACA,OAAK3sC,IAAL,GAAY,IAAZ;AACA,OAAK/oD,EAAL,GAAU,IAAV;AACD,CAND;;AAQA37I,SAAS,CAACugB,GAAV,GAAgB,UAAUzO,CAAV,EAAa;AAC3B,OAAKq/N,IAAL,CAAUtxO,IAAV,CAAeiS,CAAf;AACD,CAFD;;AAIA9R,SAAS,CAACyhG,GAAV,GAAgB,UAAU3vF,CAAV,EAAa;AAC3B,OAAKs/N,IAAL,CAAUvxO,IAAV,CAAeiS,CAAf;AACD,CAFD;;AAIA9R,SAAS,CAACgK,MAAV,GAAmB,YAAY;AAC7B,OAAK06L,IAAL,GAAY,IAAZ;AACA,MAAI,KAAK0sC,IAAL,CAAUlyO,MAAV,KAAqB,CAAzB,EAA4B,OAAO,KAAKiyO,IAAZ;AAC5B,QAAMrqO,CAAC,GAAG,KAAKqqO,IAAf;AAAA,QACMvjO,CAAC,GAAG,KAAKwjO,IADf;AAAA,QAEMl0N,CAAC,GAAG,KAAKg0N,IAFf;AAAA,QAGMpjO,CAAC,GAAGhH,CAAC,CAAC5H,MAHZ;AAAA,QAIMm4F,CAAC,GAAGzpF,CAAC,CAAC1O,MAJZ;AAAA,QAKM6G,CAAC,GAAGrG,KAAK,CAACoO,CAAC,GAAGupF,CAAL,CALf;AAAA,QAMMhuF,GAAG,GAAG,EANZ;AAOA,MAAIzJ,CAAJ,EAAOiK,CAAP,EAAUiI,CAAV,CAV6B,CAUhB;;AAEb,OAAKlS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGy3F,CAAhB,EAAmB,EAAEz3F,CAArB,EAAwB;AACtByJ,IAAAA,GAAG,CAAC6T,CAAC,CAACtP,CAAC,CAAChO,CAAD,CAAF,CAAF,CAAH,GAAe,CAAf;AACD;;AAED,OAAKA,CAAC,GAAG,CAAJ,EAAOiK,CAAC,GAAG,CAAhB,EAAmBjK,CAAC,GAAGkO,CAAvB,EAA0B,EAAElO,CAA5B,EAA+B;AAC7B,QAAIyJ,GAAG,CAAC6T,CAAC,CAACpL,CAAC,GAAGhL,CAAC,CAAClH,CAAD,CAAN,CAAF,CAAP,EAAsB;AACpByJ,MAAAA,GAAG,CAAC6T,CAAC,CAACpL,CAAD,CAAF,CAAH,GAAY,CAAZ;AACD,KAFD,MAEO;AACL/L,MAAAA,CAAC,CAAC8D,CAAC,EAAF,CAAD,GAASiI,CAAT;AACD;AACF;;AAED,OAAKs/N,IAAL,GAAY,EAAZ;AACA,SAAO,KAAKD,IAAL,GAAYprO,CAAnB;AACD,CA1BD,EA0BG;;;AAGH/F,SAAS,CAAC8vO,QAAV,GAAqB,UAAUptO,GAAV,EAAe;AAClC,QAAMoP,CAAC,GAAG,KAAK9H,MAAL,EAAV;AAAA,QACMX,GAAG,GAAG,EADZ;AAEA,MAAIyE,CAAC,GAAGgE,CAAC,CAAC5S,MAAV;AAAA,MACIy4E,KAAK,GAAG,CADZ;AAAA,MAEIv0E,CAFJ;;AAIA,SAAO,EAAE0K,CAAF,IAAO,CAAd,EAAiB;AACf1K,IAAAA,CAAC,GAAGV,GAAG,CAACoP,CAAC,CAAChE,CAAD,CAAF,CAAH,GAAY,EAAhB;;AAEA,QAAI,CAAC,8BAAezE,GAAf,EAAoBjG,CAApB,CAAL,EAA6B;AAC3BiG,MAAAA,GAAG,CAACjG,CAAD,CAAH,GAAS,CAAT;AACA,QAAEu0E,KAAF;AACD;AACF;;AAED,SAAOA,KAAP;AACD,CAjBD;;AAmBA33E,SAAS,CAACi5M,MAAV,GAAmB,UAAUv2M,GAAV,EAAe;AAChC,MAAI,KAAKgiM,IAAL,KAAchiM,GAAd,IAAqB,CAAC,KAAK2uO,IAA/B,EAAqC;AACnC,UAAMv/N,CAAC,GAAG,KAAK9H,MAAL,EAAV;AAAA,UACMpK,CAAC,GAAG,2BAAYkS,CAAZ,EAAepP,GAAf,CADV;AAEA,SAAK2uO,IAAL,GAAY,CAACv/N,CAAC,CAAClS,CAAC,CAAC,CAAD,CAAF,CAAF,EAAUkS,CAAC,CAAClS,CAAC,CAAC,CAAD,CAAF,CAAX,CAAZ;AACA,SAAK8kM,IAAL,GAAYhiM,GAAZ;AACD;;AAED,SAAO,KAAK2uO,IAAZ;AACD,CATD;;AAWArxO,SAAS,CAACqwO,MAAV,GAAmB,UAAU3tO,GAAV,EAAe;AAChC,SAAO,KAAKu2M,MAAL,CAAYv2M,GAAZ,EAAiB,CAAjB,KAAuB,EAA9B;AACD,CAFD;;AAIA1C,SAAS,CAACswO,MAAV,GAAmB,UAAU5tO,GAAV,EAAe;AAChC,SAAO,KAAKu2M,MAAL,CAAYv2M,GAAZ,EAAiB,CAAjB,KAAuB,EAA9B;AACD,CAFD;;AAIA1C,SAAS,CAAC8F,GAAV,GAAgB,UAAUpD,GAAV,EAAe;AAC7B,QAAM20F,CAAC,GAAG,KAAK4hH,MAAL,CAAYv2M,GAAZ,EAAiB,CAAjB,CAAV;AACA,SAAO20F,CAAC,IAAI,IAAL,GAAY30F,GAAG,CAAC20F,CAAD,CAAf,GAAqBy9B,SAA5B;AACD,CAHD;;AAKA90H,SAAS,CAACgG,GAAV,GAAgB,UAAUtD,GAAV,EAAe;AAC7B,QAAM20F,CAAC,GAAG,KAAK4hH,MAAL,CAAYv2M,GAAZ,EAAiB,CAAjB,CAAV;AACA,SAAO20F,CAAC,IAAI,IAAL,GAAY30F,GAAG,CAAC20F,CAAD,CAAf,GAAqBy9B,SAA5B;AACD,CAHD;;AAKA90H,SAAS,CAACsxO,QAAV,GAAqB,UAAU5uO,GAAV,EAAe;AAClC,MAAI,KAAKgiM,IAAL,KAAchiM,GAAd,IAAqB,CAAC,KAAKi5I,EAA/B,EAAmC;AACjC,SAAKA,EAAL,GAAU,+BAAU,KAAK3xI,MAAL,EAAV,EAAyBtH,GAAzB,CAAV;AACA,SAAKgiM,IAAL,GAAYhiM,GAAZ;AACD;;AAED,SAAO,KAAKi5I,EAAZ;AACD,CAPD;;AASA37I,SAAS,CAACmwO,EAAV,GAAe,UAAUztO,GAAV,EAAe;AAC5B,SAAO,KAAK4uO,QAAL,CAAc5uO,GAAd,EAAmB,CAAnB,CAAP;AACD,CAFD;;AAIA1C,SAAS,CAACkwO,EAAV,GAAe,UAAUxtO,GAAV,EAAe;AAC5B,SAAO,KAAK4uO,QAAL,CAAc5uO,GAAd,EAAmB,CAAnB,CAAP;AACD,CAFD;;AAIA1C,SAAS,CAACowO,EAAV,GAAe,UAAU1tO,GAAV,EAAe;AAC5B,SAAO,KAAK4uO,QAAL,CAAc5uO,GAAd,EAAmB,CAAnB,CAAP;AACD,CAFD;;AAIA1C,SAAS,CAACuxO,EAAV,GAAe,UAAU7uO,GAAV,EAAe;AAC5B,MAAI,KAAKgiM,IAAL,KAAchiM,GAAd,IAAqB,CAAC,KAAK8uO,GAA/B,EAAoC;AAClC,SAAKA,GAAL,GAAW,iCAAY,KAAKxnO,MAAL,EAAZ,EAA2B,IAA3B,EAAiC,IAAjC,EAAuCtH,GAAvC,CAAX;AACA,SAAKgiM,IAAL,GAAYhiM,GAAZ;AACD;;AAED,SAAO,KAAK8uO,GAAZ;AACD,CAPD;;AASAxxO,SAAS,CAAC+vO,GAAV,GAAgB,UAAUrtO,GAAV,EAAe;AAC7B,SAAO,KAAK6uO,EAAL,CAAQ7uO,GAAR,EAAa,CAAb,CAAP;AACD,CAFD;;AAIA1C,SAAS,CAACgwO,GAAV,GAAgB,UAAUttO,GAAV,EAAe;AAC7B,SAAO,KAAK6uO,EAAL,CAAQ7uO,GAAR,EAAa,CAAb,CAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS+uO,SAAT,CAAmBxuO,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;;AACA,OAAKyuO,KAAL,GAAa,EAAb,CAFyB,CAER;;AAEjB,OAAKC,KAAL,GAAa,EAAb,CAJyB,CAIR;;AAEjB,OAAKC,KAAL,GAAa,CAAb,CANyB,CAMT;;AAEhB,OAAKC,KAAL,GAAa,CAAb,CARyB,CAQT;;AAEhB,OAAKC,KAAL,GAAa,IAAb,CAVyB,CAUN;;AAEnB,OAAKC,MAAL,GAAc,KAAd,CAZyB,CAYJ;;AAErB,OAAKC,KAAL,GAAa,EAAb,CAdyB,CAcR;;AAEjB,OAAKC,OAAL,GAAe,EAAf,CAhByB,CAgBN;;AAEnB,OAAKC,SAAL,GAAiB,EAAjB,CAlByB,CAkBJ;;AAErB,OAAKC,UAAL,GAAkB,KAAlB,CApByB,CAoBA;;AAEzB,OAAKC,OAAL,GAAe,IAAf,CAtByB,CAsBJ;;AAErB,OAAKC,KAAL,GAAa,IAAb,CAxByB,CAwBN;;AAEnB,OAAKvwD,OAAL,GAAe,IAAf,CA1ByB,CA0BJ;;AAErB,OAAKD,QAAL,GAAgB,IAAhB,CA5ByB,CA4BH;AACvB;;AACD4vD,SAAS,CAAC1J,UAAV,GAAuB;AACrB,UAAQ,WADa;AAErB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFS;AAMrB,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,KADP;AAED,YAAQ,MAFP;AAGD,aAAS,IAHR;AAID,cAAUwI;AAJT,GAJO,EASP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GATO,EAcP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAdO,EAmBP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAnBO,EAuBP;AACD,YAAQ,OADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAvBO,EA2BP;AACD,YAAQ,KADP;AAED,YAAQ;AAFP,GA3BO;AANW,CAAvB;AAsCA,wBAASkB,SAAT,EAAoB5J,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMkS,IAAI,GAAG,IAAb;AAAA,UACMrsN,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CADZ;AAAA,UAEM1tN,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EAFZ;;AAIA2R,IAAAA,IAAI,CAACnR,KAAL,GAAal7M,GAAG,CAACk7M,KAAjB;;AAEA,QAAImR,IAAI,CAAC1vO,KAAL,KAAemU,GAAG,IAAIqpN,KAAK,CAACO,QAAN,CAAe2R,IAAI,CAACxwD,OAApB,EAA6B,IAA7B,CAAtB,CAAJ,EAA+D;AAC7DwwD,MAAAA,IAAI,CAACD,KAAL,GAAaC,IAAI,CAAC1vO,KAAlB;AACA0vO,MAAAA,IAAI,CAAC1vO,KAAL,GAAamU,GAAG,GAAGu7N,IAAI,CAAC78J,IAAL,CAAUlvD,CAAV,CAAH,GAAkB,EAAlC;AACA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAIgvO,IAAI,CAAC/xN,GAAL,CAASjd,CAAT,CAA/B;AACD,KAJD,MAIO;AACLgvO,MAAAA,IAAI,CAAC1vO,KAAL,GAAa0vO,IAAI,CAAC1vO,KAAL,IAAc0vO,IAAI,CAAC78J,IAAL,CAAUlvD,CAAV,CAA3B;AACA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAIgvO,IAAI,CAAC7wI,GAAL,CAASn+F,CAAT,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAIgvO,IAAI,CAAC/xN,GAAL,CAASjd,CAAT,CAA5B;AACD,KAfiB,CAehB;;;AAGF2iB,IAAAA,GAAG,CAACq6M,QAAJ,CAAagS,IAAI,CAACzwD,QAAlB,EAlBkB,CAkBW;;AAE7BywD,IAAAA,IAAI,CAACR,KAAL,GAAavrN,CAAC,CAACgsN,IAAF,KAAW,KAAxB,CApBkB,CAoBa;AAC/B;;AAEA,QAAIhsN,CAAC,CAACq+L,KAAF,IAAW0tB,IAAI,CAACN,KAAL,CAAW9yO,MAAX,GAAoB,CAAnC,EAAsC;AACpCozO,MAAAA,IAAI,CAACR,KAAL,GAAa,KAAb;AACAQ,MAAAA,IAAI,CAAC1tB,KAAL;AACD;;AAED,QAAIwb,KAAK,CAACn1B,KAAN,MAAiBqnC,IAAI,CAACR,KAA1B,EAAiC;AAC/B7rN,MAAAA,GAAG,CAACglL,KAAJ,CAAU,IAAV,EAAgBq6B,QAAhB,CAAyB,MAAM,KAAKr6B,KAAL,EAA/B;AACD;;AAED,WAAOqnC,IAAI,CAAC3M,OAAL,CAAa1/M,GAAb,CAAP;AACD,GAlC4B;;AAoC7B2+L,EAAAA,KAAK,GAAG;AACN,UAAM0tB,IAAI,GAAG,IAAb;AAAA,UACM19D,IAAI,GAAG09D,IAAI,CAAC1vO,KADlB;AAAA,UAEM8jC,IAAI,GAAG4rM,IAAI,CAACL,OAFlB;AAAA,UAGM3nO,IAAI,GAAGo8B,IAAI,CAACr9B,GAAL,CAAS,OAAO,EAAP,CAAT,CAHb;AAAA,UAIMyE,CAAC,GAAG44B,IAAI,CAACxnC,MAJf,CADM,CAKiB;;AAEvB,aAASszO,OAAT,CAAiBptE,KAAjB,EAAwB;AACtB,UAAIvhK,GAAJ,EAASjE,CAAT,EAAY0D,CAAZ,EAAewO,CAAf;;AAEA,WAAKjO,GAAL,IAAYuhK,KAAZ,EAAmB;AACjB9hK,QAAAA,CAAC,GAAG8hK,KAAK,CAACvhK,GAAD,CAAL,CAAWs8N,KAAf;;AAEA,aAAKvgO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB0K,UAAAA,IAAI,CAAC1K,CAAD,CAAJ,CAAQkS,CAAC,GAAGxO,CAAC,CAACojC,IAAI,CAAC9mC,CAAD,CAAL,CAAb,IAA0BkS,CAA1B;AACD;AACF;AACF;;AAED0gO,IAAAA,OAAO,CAACF,IAAI,CAACD,KAAN,CAAP;AACAG,IAAAA,OAAO,CAAC59D,IAAD,CAAP,CApBM,CAoBS;;AAEf,aAASmyB,QAAT,CAAkBn8J,IAAlB,EAAwBu1L,KAAxB,EAA+Bz6N,KAA/B,EAAsC;AACpC,YAAMvE,IAAI,GAAGulC,IAAI,CAAChhC,KAAD,CAAjB;AAAA,YACMoM,CAAC,GAAGxH,IAAI,CAAC5E,KAAK,EAAN,CADd;;AAGA,WAAK,MAAMwX,CAAX,IAAgBpL,CAAhB,EAAmB;AACjB,cAAMjO,GAAG,GAAG+mC,IAAI,GAAGA,IAAI,GAAG,GAAP,GAAa1tB,CAAhB,GAAoBA,CAApC;AACAijN,QAAAA,KAAK,CAACh/N,IAAD,CAAL,GAAc2Q,CAAC,CAACoL,CAAD,CAAf;AACA,YAAIxX,KAAK,GAAGoI,CAAZ,EAAei5L,QAAQ,CAACljM,GAAD,EAAMs8N,KAAN,EAAaz6N,KAAb,CAAR,CAAf,KAAgD,IAAI,CAACkvK,IAAI,CAAC/wK,GAAD,CAAT,EAAgByuO,IAAI,CAACptE,IAAL,CAAUrhK,GAAV,EAAes8N,KAAf;AACjE;AACF;;AAEDp5B,IAAAA,QAAQ,CAAC,EAAD,EAAK,EAAL,EAAS,CAAT,CAAR;AACD,GAtE4B;;AAwE7BtxH,EAAAA,IAAI,CAAClvD,CAAD,EAAI;AACN;AACA,UAAM/X,MAAM,GAAG,KAAKszK,OAAL,GAAe,EAA9B;AAAA,UACMrzK,OAAO,GAAG,KAAKozK,QAAL,GAAgB,EADhC;AAAA,UAEM91J,QAAQ,GAAG,EAFjB;;AAIA,aAAS0mN,UAAT,CAAoB/vO,GAApB,EAAyB;AACvB,YAAMg7C,MAAM,GAAG,qBAAM,8BAAeh7C,GAAf,CAAN,CAAf;AAAA,YACMoL,CAAC,GAAG4vC,MAAM,CAACx+C,MADjB;AAEA,UAAIU,CAAC,GAAG,CAAR;AAAA,UACI2L,CADJ;;AAGA,aAAO3L,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB,YAAI,CAACmsB,QAAQ,CAACxgB,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAX,CAAb,EAA8B;AAC5BmsB,UAAAA,QAAQ,CAACxgB,CAAD,CAAR,GAAc,CAAd;AACAiD,UAAAA,MAAM,CAAC3O,IAAP,CAAY0L,CAAZ;AACD;AACF;AACF,KAlBK,CAkBJ;;;AAGF,SAAKymO,KAAL,GAAa,qBAAMzrN,CAAC,CAACmsN,OAAR,CAAb;AACA,SAAKT,OAAL,GAAe,KAAKD,KAAL,CAAW3oO,GAAX,CAAeoD,CAAC,IAAI;AACjC,YAAMkmO,KAAK,GAAG,4BAAalmO,CAAb,CAAd;AACAgmO,MAAAA,UAAU,CAAChmO,CAAD,CAAV;AACAgC,MAAAA,OAAO,CAAC5O,IAAR,CAAa8yO,KAAb;AACA,aAAOA,KAAP;AACD,KALc,CAAf;AAMA,SAAKC,OAAL,GAAersN,CAAC,CAAC1iB,GAAF,GAAQ0iB,CAAC,CAAC1iB,GAAV,GAAgBmrO,QAAQ,CAAC,KAAKgD,KAAN,CAAvC,CA5BM,CA4B+C;;AAErD,SAAKG,UAAL,GAAkB,IAAlB;AACA,SAAKC,OAAL,GAAe,EAAf;AACA,SAAKF,SAAL,GAAiB,EAAjB;AACA,UAAMx0L,MAAM,GAAGn3B,CAAC,CAACm3B,MAAF,IAAY,CAAC,IAAD,CAA3B;AAAA,UACM61E,GAAG,GAAGhtG,CAAC,CAACgtG,GAAF,IAAS,CAAC,OAAD,CADrB;AAAA,UAEM27G,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,EAFnB;AAAA,UAGMphO,CAAC,GAAG4vC,MAAM,CAACx+C,MAHjB;AAAA,UAIMmK,GAAG,GAAG,EAJZ;AAKA,QAAI+rH,KAAJ,EAAW72F,EAAX,EAAe84D,CAAf,EAAkBw7I,KAAlB,EAAyBC,OAAzB,EAAkClzO,CAAlC;;AAEA,QAAIkO,CAAC,KAAKylH,GAAG,CAACr0H,MAAd,EAAsB;AACpB,2BAAM,+CAAN;AACD;;AAED,SAAKU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBw1H,MAAAA,KAAK,GAAG13E,MAAM,CAAC99C,CAAD,CAAd;AACA2+B,MAAAA,EAAE,GAAGg1F,GAAG,CAAC3zH,CAAD,CAAR;;AAEA,UAAIw1H,KAAK,IAAI,IAAT,IAAiB72F,EAAE,KAAK,OAA5B,EAAqC;AACnC,6BAAM,iCAAN;AACD;;AAEDs0M,MAAAA,KAAK,GAAG,4BAAaz9G,KAAb,CAAR;AACA09G,MAAAA,OAAO,GAAG7D,WAAW,CAAC1wM,EAAD,EAAKs0M,KAAL,EAAY3D,EAAE,CAACtvO,CAAD,CAAd,CAArB;AACA6O,MAAAA,OAAO,CAAC5O,IAAR,CAAaizO,OAAb;;AAEA,UAAIv0M,EAAE,KAAK,OAAX,EAAoB;AAClB,aAAK6zM,OAAL,CAAavyO,IAAb,CAAkBizO,OAAlB;;AAEA;AACD;;AAEDz7I,MAAAA,CAAC,GAAGhuF,GAAG,CAACwpO,KAAD,CAAP;;AAEA,UAAI,CAACx7I,CAAL,EAAQ;AACNo7I,QAAAA,UAAU,CAACr9G,KAAD,CAAV;AACA/9B,QAAAA,CAAC,GAAGhuF,GAAG,CAACwpO,KAAD,CAAH,GAAa,EAAjB;AACAx7I,QAAAA,CAAC,CAAC+9B,KAAF,GAAUA,KAAV;;AAEA,aAAK88G,SAAL,CAAeryO,IAAf,CAAoBw3F,CAApB;AACD;;AAED,UAAI94D,EAAE,KAAK,OAAX,EAAoB,KAAK4zM,UAAL,GAAkB,KAAlB;AACpB96I,MAAAA,CAAC,CAACx3F,IAAF,CAAO4wO,aAAa,CAAClyM,EAAD,EAAKu0M,OAAL,CAApB;AACD;;AAED,SAAKZ,SAAL,GAAiB,KAAKA,SAAL,CAAe7oO,GAAf,CAAmBguF,CAAC,IAAI05I,eAAe,CAAC15I,CAAD,EAAIA,CAAC,CAAC+9B,KAAN,CAAvC,CAAjB;AACA,WAAO,EAAP,CA7EM,CA6EK;AACZ,GAtJ4B;;AAwJ7B;AACAw9G,EAAAA,OAAO,EAAE5D,QAAQ,EAzJY;;AA2J7B9pE,EAAAA,IAAI,CAACrhK,GAAD,EAAMP,CAAN,EAAS;AACX,QAAI4hK,IAAI,GAAG,KAAKtiK,KAAL,CAAWiB,GAAX,CAAX;;AAEA,QAAI,CAACqhK,IAAL,EAAW;AACTA,MAAAA,IAAI,GAAG,KAAKtiK,KAAL,CAAWiB,GAAX,IAAkB,KAAKkvO,OAAL,CAAalvO,GAAb,EAAkBP,CAAlB,CAAzB;AACA,WAAKouO,KAAL,CAAW,KAAKE,KAAL,EAAX,IAA2B1sE,IAA3B;AACD,KAHD,MAGO,IAAIA,IAAI,CAAC36J,GAAL,KAAa,CAAb,IAAkB,KAAKunO,KAAvB,IAAgC5sE,IAAI,CAACi8D,KAAL,GAAa,KAAKA,KAAtD,EAA6D;AAClEj8D,MAAAA,IAAI,CAACi8D,KAAL,GAAa,KAAKA,KAAlB;AACA,WAAKuQ,KAAL,CAAW,KAAKE,KAAL,EAAX,IAA2B1sE,IAA3B;AACD,KAHM,MAGA,IAAIA,IAAI,CAACi8D,KAAL,GAAa,KAAKA,KAAtB,EAA6B;AAClCj8D,MAAAA,IAAI,CAACi8D,KAAL,GAAa,KAAKA,KAAlB;AACA,WAAKwQ,KAAL,CAAW,KAAKE,KAAL,EAAX,IAA2B3sE,IAA3B;AACD;;AAED,WAAOA,IAAP;AACD,GA1K4B;;AA4K7B6tE,EAAAA,OAAO,CAAClvO,GAAD,EAAMP,CAAN,EAAS;AACd,UAAM4hK,IAAI,GAAG;AACXrhK,MAAAA,GAAG,EAAEA,GADM;AAEX0G,MAAAA,GAAG,EAAE,CAFM;AAGXomO,MAAAA,GAAG,EAAE,IAHM;AAIXxQ,MAAAA,KAAK,EAAE,KAAK6S,QAAL,CAAc1vO,CAAd,EAAiB,KAAK+uO,KAAL,IAAc,KAAKA,KAAL,CAAWxuO,GAAX,CAA/B,CAJI;AAKXs9N,MAAAA,KAAK,EAAE,KAAKA,KALD;AAMXkO,MAAAA,KAAK,EAAE;AANI,KAAb;;AASA,QAAI,CAAC,KAAK8C,UAAV,EAAsB;AACpB,YAAMc,QAAQ,GAAG,KAAKf,SAAtB;AAAA,YACMpkO,CAAC,GAAGmlO,QAAQ,CAAC/zO,MADnB;AAEAgmK,MAAAA,IAAI,CAACyrE,GAAL,GAAWjxO,KAAK,CAACoO,CAAD,CAAhB;;AAEA,WAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BslK,QAAAA,IAAI,CAACyrE,GAAL,CAAS/wO,CAAT,IAAc,IAAIqzO,QAAQ,CAACrzO,CAAD,CAAZ,CAAgBslK,IAAhB,CAAd;AACD;AACF;;AAED,QAAIA,IAAI,CAACmqE,KAAT,EAAgB;AACdnqE,MAAAA,IAAI,CAACt2J,IAAL,GAAY,IAAIqiO,UAAJ,EAAZ;AACD;;AAED,WAAO/rE,IAAP;AACD,GArM4B;;AAuM7B8tE,EAAAA,QAAQ,CAAC1vO,CAAD,EAAI4gC,CAAJ,EAAO;AACb,UAAMunF,KAAK,GAAG,KAAKwmH,OAAnB;AAAA,UACMvrM,IAAI,GAAG,KAAKsrM,KADlB;AAAA,UAEMlkO,CAAC,GAAG44B,IAAI,CAACxnC,MAFf;AAAA,UAGM6G,CAAC,GAAG,EAHV;;AAKA,SAAK,IAAInG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BmG,MAAAA,CAAC,CAAC0lH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAc8mC,IAAI,CAAC9mC,CAAD,CAAJ,CAAQ0D,CAAR,CAAd;AACD;;AAED,WAAO4gC,CAAC,GAAG,2BAAQA,CAAC,CAACi8L,KAAV,EAAiBp6N,CAAjB,CAAH,GAAyB,0BAAOA,CAAP,CAAjC;AACD,GAlN4B;;AAoN7BklM,EAAAA,KAAK,GAAG;AACN,UAAM7lC,KAAK,GAAG,KAAKxiK,KAAnB;;AAEA,SAAK,MAAMiB,GAAX,IAAkBuhK,KAAlB,EAAyB;AACvB,UAAIA,KAAK,CAACvhK,GAAD,CAAL,CAAW0G,GAAX,KAAmB,CAAvB,EAA0B;AACxB,eAAO66J,KAAK,CAACvhK,GAAD,CAAZ;AACD;AACF;AACF,GA5N4B;;AA8N7B;AACA0c,EAAAA,GAAG,CAACjd,CAAD,EAAI;AACL,UAAMO,GAAG,GAAG,KAAK+uO,OAAL,CAAatvO,CAAb,CAAZ;AAAA,UACM4hK,IAAI,GAAG,KAAKA,IAAL,CAAUrhK,GAAV,EAAeP,CAAf,CADb;AAEA4hK,IAAAA,IAAI,CAAC36J,GAAL,IAAY,CAAZ;AACA,QAAI,KAAK4nO,UAAT,EAAqB;AACrB,QAAIjtE,IAAI,CAACmqE,KAAT,EAAgBnqE,IAAI,CAACt2J,IAAL,CAAU2R,GAAV,CAAcjd,CAAd;AAChB,UAAMqtO,GAAG,GAAGzrE,IAAI,CAACyrE,GAAjB;;AAEA,SAAK,IAAI/wO,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG6iO,GAAG,CAACzxO,MAAxB,EAAgCU,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C+wO,MAAAA,GAAG,CAAC/wO,CAAD,CAAH,CAAO2gB,GAAP,CAAWowN,GAAG,CAAC/wO,CAAD,CAAH,CAAO8C,GAAP,CAAWY,CAAX,CAAX,EAA0BA,CAA1B;AACD;AACF,GA1O4B;;AA4O7Bm+F,EAAAA,GAAG,CAACn+F,CAAD,EAAI;AACL,UAAMO,GAAG,GAAG,KAAK+uO,OAAL,CAAatvO,CAAb,CAAZ;AAAA,UACM4hK,IAAI,GAAG,KAAKA,IAAL,CAAUrhK,GAAV,EAAeP,CAAf,CADb;AAEA4hK,IAAAA,IAAI,CAAC36J,GAAL,IAAY,CAAZ;AACA,QAAI,KAAK4nO,UAAT,EAAqB;AACrB,QAAIjtE,IAAI,CAACmqE,KAAT,EAAgBnqE,IAAI,CAACt2J,IAAL,CAAU6yF,GAAV,CAAcn+F,CAAd;AAChB,UAAMqtO,GAAG,GAAGzrE,IAAI,CAACyrE,GAAjB;;AAEA,SAAK,IAAI/wO,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG6iO,GAAG,CAACzxO,MAAxB,EAAgCU,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C+wO,MAAAA,GAAG,CAAC/wO,CAAD,CAAH,CAAO6hG,GAAP,CAAWkvI,GAAG,CAAC/wO,CAAD,CAAH,CAAO8C,GAAP,CAAWY,CAAX,CAAX,EAA0BA,CAA1B;AACD;AACF,GAvP4B;;AAyP7B4vO,EAAAA,SAAS,CAAChuE,IAAD,EAAO;AACd,UAAMi7D,KAAK,GAAGj7D,IAAI,CAACi7D,KAAnB;AAAA,UACMjxC,MAAM,GAAG,KAAKkjD,OADpB,CADc,CAEe;;AAE7B,QAAIltE,IAAI,CAACmqE,KAAT,EAAgB;AACdnqE,MAAAA,IAAI,CAACt2J,IAAL,CAAU5E,MAAV;AACD,KANa,CAMZ;;;AAGF,SAAK,IAAIpK,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGohL,MAAM,CAAChwL,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7CugO,MAAAA,KAAK,CAACjxC,MAAM,CAACtvL,CAAD,CAAP,CAAL,GAAmBslK,IAAI,CAAC36J,GAAxB;AACD;;AAED,QAAI,CAAC,KAAK4nO,UAAV,EAAsB;AACpB,YAAMxB,GAAG,GAAGzrE,IAAI,CAACyrE,GAAjB;;AAEA,WAAK,IAAI/wO,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG6iO,GAAG,CAACzxO,MAAxB,EAAgCU,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C+wO,QAAAA,GAAG,CAAC/wO,CAAD,CAAH,CAAO2C,GAAP,CAAW49N,KAAX;AACD;AACF;;AAED,WAAOA,KAAP;AACD,GA/Q4B;;AAiR7BwF,EAAAA,OAAO,CAAC1/M,GAAD,EAAM;AACX,UAAMktN,IAAI,GAAG,KAAKzB,KAAlB;AAAA,UACM0B,IAAI,GAAG,KAAKzB,KADlB;AAAA,UAEM54I,IAAI,GAAG,KAAKs5I,KAFlB;AAAA,UAGME,IAAI,GAAG,KAAKT,KAHlB;AAAA,UAIMvxN,GAAG,GAAG0F,GAAG,CAAC1F,GAJhB;AAAA,UAKMkhF,GAAG,GAAGx7E,GAAG,CAACw7E,GALhB;AAAA,UAMM1qF,GAAG,GAAGkP,GAAG,CAAClP,GANhB;AAOA,QAAImuJ,IAAJ,EAAUrhK,GAAV,EAAejE,CAAf,EAAkBkO,CAAlB;AACA,QAAIirF,IAAJ,EAAU,KAAKl1F,GAAL,IAAYk1F,IAAZ,EAAkB;AAC1BmsE,MAAAA,IAAI,GAAGnsE,IAAI,CAACl1F,GAAD,CAAX;AACA,UAAI,CAAC0uO,IAAD,IAASrtE,IAAI,CAAC36J,GAAlB,EAAuBk3F,GAAG,CAAC5hG,IAAJ,CAASqlK,IAAI,CAACi7D,KAAd;AACxB;;AAED,SAAKvgO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG,KAAK8jO,KAArB,EAA4BhyO,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC2gB,MAAAA,GAAG,CAAC1gB,IAAJ,CAAS,KAAKqzO,SAAL,CAAeC,IAAI,CAACvzO,CAAD,CAAnB,CAAT;AACAuzO,MAAAA,IAAI,CAACvzO,CAAD,CAAJ,GAAU,IAAV,CAFsC,CAEtB;AACjB;;AAED,SAAKA,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG,KAAK+jO,KAArB,EAA4BjyO,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtCslK,MAAAA,IAAI,GAAGkuE,IAAI,CAACxzO,CAAD,CAAX;AACA,OAACslK,IAAI,CAAC36J,GAAL,KAAa,CAAb,IAAkBgoO,IAAlB,GAAyB9wI,GAAzB,GAA+B1qF,GAAhC,EAAqClX,IAArC,CAA0C,KAAKqzO,SAAL,CAAehuE,IAAf,CAA1C;AACAkuE,MAAAA,IAAI,CAACxzO,CAAD,CAAJ,GAAU,IAAV,CAHsC,CAGtB;AACjB;;AAED,SAAKgyO,KAAL,GAAa,KAAKC,KAAL,GAAa,CAA1B,CAzBW,CAyBkB;;AAE7B,SAAKQ,KAAL,GAAa,IAAb;AACA,WAAOpsN,GAAP;AACD;;AA9S4B,CAA/B;AAkTA,MAAMotN,OAAO,GAAG,KAAhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,GAAT,CAAarwO,MAAb,EAAqB;AACnB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDqwO,GAAG,CAACvL,UAAJ,GAAiB;AACf,UAAQ,KADO;AAEf,cAAY;AACV,gBAAY;AADF,GAFG;AAKf,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,UADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAJO,EAQP;AACD,YAAQ,QADP;AAED,YAAQ;AAFP,GARO,EAWP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAXO,EAeP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAfO,EAmBP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,eAAW,CAAC,CAAD,EAAI,CAAJ;AAJV,GAnBO,EAwBP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,gBAAY;AALX,GAxBO,EA8BP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GA9BO,EAiCP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAjCO,EAoCP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GApCO,EAwCP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAxCO,EA4CP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GA5CO,EAgDP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAhDO,EAmDP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,MAAD,EAAS,MAAT;AALV,GAnDO;AALK,CAAjB;AAgEA,wBAASuL,GAAT,EAAczL,uBAAd,EAAyB;AACvBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMmT,IAAI,GAAGhtN,CAAC,CAAC0kM,QAAF,KAAe,KAA5B;AAAA,UACMvE,IAAI,GAAG,KAAK8sB,KAAL,CAAWjtN,CAAX,CADb;AAAA,UAEM7a,KAAK,GAAGg7M,IAAI,CAACh7M,KAFnB;AAAA,UAGM4O,IAAI,GAAGosM,IAAI,CAACpsM,IAHlB;AAAA,UAIM40N,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,MAAD,EAAS,MAAT,CAJnB;AAAA,UAKMuE,EAAE,GAAGvE,EAAE,CAAC,CAAD,CALb;AAAA,UAMMwE,EAAE,GAAGxE,EAAE,CAAC,CAAD,CANb;;AAQA,QAAIr7F,IAAJ;;AAEA,QAAIttH,CAAC,CAACo6M,QAAF,EAAJ,EAAkB;AAChBP,MAAAA,KAAK,GAAGA,KAAK,CAACJ,MAAN,CAAa,IAAb,CAAR;AACAnsF,MAAAA,IAAI,GAAGusF,KAAK,CAACmE,MAAb;AACD,KAHD,MAGO;AACL1wF,MAAAA,IAAI,GAAGusF,KAAK,CAACO,QAAN,CAAe,8BAAep6M,CAAC,CAAC6uG,KAAjB,CAAf,IAA0CgrG,KAAK,CAACgE,OAAhD,GAA0DhE,KAAK,CAAC38K,GAAvE;AACD;;AAED28K,IAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkB0/F,IAAI,GAAGjwO,CAAC,IAAI;AAC5B,YAAMwO,CAAC,GAAG40M,IAAI,CAACpjN,CAAD,CAAd,CAD4B,CACT;;AAEnBA,MAAAA,CAAC,CAACmwO,EAAD,CAAD,GAAQ3hO,CAAR,CAH4B,CAGjB;AACX;AACA;AACA;;AAEAxO,MAAAA,CAAC,CAACowO,EAAD,CAAD,GAAQ5hO,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBpG,KAAK,GAAG4O,IAAI,IAAI,IAAI,CAACxI,CAAC,GAAGpG,KAAL,IAAc4O,IAAtB,CAAvC;AACD,KATqB,GASlBhX,CAAC,IAAIA,CAAC,CAACmwO,EAAD,CAAD,GAAQ/sB,IAAI,CAACpjN,CAAD,CATrB;AAUA,WAAO88N,KAAK,CAACE,QAAN,CAAeiT,IAAI,GAAGrE,EAAH,GAAQuE,EAA3B,CAAP;AACD,GA9BsB;;AAgCvBD,EAAAA,KAAK,CAACjtN,CAAD,EAAI;AACP,QAAI,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAnB,EAAiC;AAC/B,aAAO,KAAK/9N,KAAZ;AACD;;AAED,UAAMwyH,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAhB;AAAA,UACMsxF,IAAI,GAAG,yBAAIngM,CAAJ,CADb;AAAA,UAEMjM,IAAI,GAAGosM,IAAI,CAACpsM,IAFlB;AAGA,QAAI5O,KAAK,GAAGg7M,IAAI,CAACh7M,KAAjB;AAAA,QACIy1B,IAAI,GAAGz1B,KAAK,GAAG/F,IAAI,CAACoC,IAAL,CAAU,CAAC2+M,IAAI,CAACvlL,IAAL,GAAYz1B,KAAb,IAAsB4O,IAAhC,IAAwCA,IAD3D;AAAA,QAEIxT,CAFJ;AAAA,QAGI2F,CAHJ;;AAKA,QAAI,CAAC3F,CAAC,GAAGyf,CAAC,CAACovL,MAAP,KAAkB,IAAtB,EAA4B;AAC1BlpM,MAAAA,CAAC,GAAG3F,CAAC,IAAI4E,KAAK,GAAG4O,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW,CAAC5G,CAAC,GAAG4E,KAAL,IAAc4O,IAAzB,CAAnB,CAAL;AACA5O,MAAAA,KAAK,IAAIe,CAAT;AACA00B,MAAAA,IAAI,IAAI10B,CAAR;AACD;;AAED,UAAMlB,CAAC,GAAG,UAAUjI,CAAV,EAAa;AACrB,UAAIwO,CAAC,GAAG,wBAASsjH,KAAK,CAAC9xH,CAAD,CAAd,CAAR;AACA,aAAOwO,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAAC,GAAGpG,KAAJ,GAAY,CAAChE,QAAb,GAAwBoK,CAAC,GAAGqvB,IAAJ,GAAW,CAACz5B,QAAZ,IAAwBoK,CAAC,GAAGnM,IAAI,CAACK,GAAL,CAAS0F,KAAT,EAAgB/F,IAAI,CAACG,GAAL,CAASgM,CAAT,EAAYqvB,IAAI,GAAG7mB,IAAnB,CAAhB,CAAJ,EAA+C5O,KAAK,GAAG4O,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW2lO,OAAO,GAAG,CAACvhO,CAAC,GAAGpG,KAAL,IAAc4O,IAAnC,CAAtF,CAAlD;AACD,KAHD;;AAKA/O,IAAAA,CAAC,CAACG,KAAF,GAAUA,KAAV;AACAH,IAAAA,CAAC,CAAC41B,IAAF,GAASulL,IAAI,CAACvlL,IAAd;AACA51B,IAAAA,CAAC,CAAC+O,IAAF,GAASA,IAAT;AACA,WAAO,KAAK1X,KAAL,GAAa,wBAAS2I,CAAT,EAAY,8BAAe6pH,KAAf,CAAZ,EAAmC7uG,CAAC,CAACplB,IAAF,IAAU,SAAS,4BAAai0H,KAAb,CAAtD,CAApB;AACD;;AA5DsB,CAAzB;;AAgEA,SAASu+G,UAAT,CAAqB3U,MAArB,EAA6BtpK,MAA7B,EAAqC9qC,KAArC,EAA4C;AAC1C,QAAMwtL,CAAC,GAAG4mB,MAAV;AACA,MAAIpwN,IAAI,GAAG8mD,MAAM,IAAI,EAArB;AAAA,MACIn1C,GAAG,GAAGqK,KAAK,IAAI,EADnB;AAAA,MAEI62E,GAAG,GAAG,EAFV;AAAA,MAGI2sI,GAAG,GAAG,CAHV;AAIA,SAAO;AACL7tN,IAAAA,GAAG,EAAEjd,CAAC,IAAIid,GAAG,CAAC1gB,IAAJ,CAASyD,CAAT,CADL;AAELyvE,IAAAA,MAAM,EAAEzvE,CAAC,IAAIm+F,GAAG,CAAC22G,CAAC,CAAC90M,CAAD,CAAF,CAAH,GAAY,EAAE8qO,GAFtB;AAGL/mO,IAAAA,IAAI,EAAE,MAAMuH,IAAI,CAAC1P,MAHZ;AAIL0P,IAAAA,IAAI,EAAE,CAAC84L,OAAD,EAAUksC,MAAV,KAAqB;AACzB,UAAIxF,GAAJ,EAAS;AACPx/N,QAAAA,IAAI,GAAGA,IAAI,CAACmM,MAAL,CAAYzX,CAAC,IAAI,CAACm+F,GAAG,CAAC22G,CAAC,CAAC90M,CAAD,CAAF,CAArB,CAAP;AACAm+F,QAAAA,GAAG,GAAG,EAAN;AACA2sI,QAAAA,GAAG,GAAG,CAAN;AACD;;AAED,UAAIwF,MAAM,IAAIlsC,OAAd,EAAuB;AACrB94L,QAAAA,IAAI,CAAChF,IAAL,CAAU89L,OAAV;AACD;;AAED,UAAInnL,GAAG,CAACrhB,MAAR,EAAgB;AACd0P,QAAAA,IAAI,GAAG84L,OAAO,GAAG,qBAAMA,OAAN,EAAe94L,IAAf,EAAqB2R,GAAG,CAAC3W,IAAJ,CAAS89L,OAAT,CAArB,CAAH,GAA6C94L,IAAI,CAACzP,MAAL,CAAYohB,GAAZ,CAA3D;AACAA,QAAAA,GAAG,GAAG,EAAN;AACD;;AAED,aAAO3R,IAAP;AACD;AArBI,GAAP;AAuBD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASilO,OAAT,CAAiB5wO,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD4wO,OAAO,CAAC9L,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,cAAU;AADA,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ;AAFC,GAAD;AALS,CAArB;AAUA,wBAAS8L,OAAT,EAAkBhM,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAZ;AAAA,UACMpkN,IAAI,GAAG0zN,UAAU,CAACrU,qBAAD,EAAU,KAAK18N,KAAf,EAAsBqjB,GAAG,CAAC0+M,WAAJ,CAAgB1+M,GAAG,CAACw9B,GAApB,EAAyBljC,GAA/C,CADvB;AAAA,UAEM3W,IAAI,GAAG2c,CAAC,CAAC3c,IAFf;AAAA,UAGMmN,GAAG,GAAGqpN,KAAK,CAAC74B,OAAN,MAAmB39L,IAAI,KAAK2c,CAAC,CAACo6M,QAAF,CAAW,MAAX,KAAsBP,KAAK,CAACO,QAAN,CAAe/2N,IAAI,CAAC8zC,MAApB,CAA3B,CAHnC;AAIAz3B,IAAAA,GAAG,CAAC2+M,KAAJ,CAAU3+M,GAAG,CAACg+M,GAAd,EAAmBhkN,IAAI,CAAC8yD,MAAxB;AACA,SAAK4tJ,QAAL,CAAc5pN,GAAd;AACA,SAAKnU,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAaz1C,IAAI,CAACrR,IAAL,CAAU,iCAAchF,IAAd,CAAV,EAA+BmN,GAA/B,CAA1B,CAPkB,CAO6C;;AAE/D,QAAIqpN,KAAK,CAAC1qK,MAAN,IAAgB0qK,KAAK,CAAC1qK,MAAN,CAAa6tI,IAAjC,EAAuC;AACrC,WAAK3gM,KAAL,CAAW2gM,IAAX,GAAkB68B,KAAK,CAAC1qK,MAAN,CAAa6tI,IAA/B;AACD;;AAED,WAAOt9K,GAAP;AACD;;AAf0B,CAA7B;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS6tN,OAAT,CAAiB7wO,MAAjB,EAAyB;AACvBg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0BowF,MAA1B,EAAkC7rF,MAAlC;AACD;;AACD,wBAAS6wO,OAAT,EAAkB7S,sBAAlB;;AAEA,SAASnyI,MAAT,CAAgBvoE,CAAhB,EAAmB;AACjB,SAAO,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAf,GAA8B,KAAK/9N,KAAnC,GAA2C,uBAAQ2jB,CAAC,CAACm3B,MAAV,EAAkBn3B,CAAC,CAACmwL,MAApB,CAAlD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASq9B,YAAT,CAAsB9wO,MAAtB,EAA8B;AAC5B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD8wO,YAAY,CAAChM,UAAb,GAA0B;AACxB,UAAQ,cADgB;AAExB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFY;AAMxB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,MADP;AAED,YAAQ,MAFP;AAGD,cAAU,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,CAHT;AAID,eAAW;AAJV,GAJO,EASP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GATO,EAaP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAbO,EAiBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,MAAD,EAAS,OAAT;AALV,GAjBO;AANc,CAA1B;;AAgCA,SAASiM,QAAT,CAAkB17H,IAAlB,EAAwB27H,KAAxB,EAA+BjpH,KAA/B,EAAsC;AACpC,UAAQipH,KAAR;AACE,SAAK,OAAL;AACE37H,MAAAA,IAAI,GAAGA,IAAI,CAACl7D,WAAL,EAAP;AACA;;AAEF,SAAK,OAAL;AACEk7D,MAAAA,IAAI,GAAGA,IAAI,CAACv0G,WAAL,EAAP;AACA;AAPJ;;AAUA,SAAOu0G,IAAI,CAAC0S,KAAL,CAAWA,KAAX,CAAP;AACD;;AAED,wBAAS+oH,YAAT,EAAuBlM,uBAAvB,EAAkC;AAChCh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMviO,OAAO,GAAGixF,MAAM,IAAIqxI,KAAK,IAAI;AACjC,UAAI7sB,MAAM,GAAG0gC,QAAQ,CAACtxO,GAAG,CAACy9N,KAAD,CAAJ,EAAa55M,CAAC,CAAC2tN,IAAf,EAAqBlpH,KAArB,CAAR,IAAuC,EAApD;AAAA,UACI1nH,CADJ;;AAGA,WAAK,IAAI1D,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGwlM,MAAM,CAACp0M,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7C,YAAI,CAACuhC,IAAI,CAAC5T,IAAL,CAAUjqB,CAAC,GAAGgwM,MAAM,CAAC1zM,CAAD,CAApB,CAAL,EAA+BkvF,MAAM,CAACxrF,CAAD,CAAN;AAChC;AACF,KAPD;;AASA,UAAMmyE,IAAI,GAAG,KAAK0+J,eAAL,CAAqB5tN,CAArB,EAAwB65M,KAAxB,CAAb;AAAA,UACMlxC,MAAM,GAAG,KAAKkjD,OADpB;AAAA,UAEMpnH,KAAK,GAAG,KAAKopH,MAFnB;AAAA,UAGMjzM,IAAI,GAAG,KAAKkzM,KAHlB;AAAA,UAIM3xO,GAAG,GAAG6jB,CAAC,CAAC6uG,KAJd;AAAA,UAKM85G,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,MAAD,EAAS,OAAT,CALnB;AAAA,UAMM3uN,GAAG,GAAG1iB,OAAO,CAACyF,CAAC,IAAI4rL,MAAM,CAAC5rL,CAAD,CAAN,GAAY,KAAK4rL,MAAM,CAAC5rL,CAAD,CAAN,IAAa,CAAlB,CAAlB,CANnB;AAAA,UAOMm+F,GAAG,GAAG5jG,OAAO,CAACyF,CAAC,IAAI4rL,MAAM,CAAC5rL,CAAD,CAAN,IAAa,CAAnB,CAPnB;;AASA,QAAImyE,IAAJ,EAAU;AACR2qJ,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BhkN,GAA1B;AACD,KAFD,MAEO;AACL6/M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBljC,GAAvB;AACA6/M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuBxiI,GAAvB;AACD;;AAED,WAAO,KAAK6yI,OAAL,CAAalU,KAAb,EAAoB8O,EAApB,CAAP,CA1BkB,CA0Bc;AACjC,GA5B+B;;AA8BhCiF,EAAAA,eAAe,CAAC5tN,CAAD,EAAI65M,KAAJ,EAAW;AACxB,QAAI3qJ,IAAI,GAAG,KAAX;;AAEA,QAAIlvD,CAAC,CAACo6M,QAAF,CAAW,WAAX,KAA2B,CAAC,KAAK0T,KAArC,EAA4C;AAC1C,WAAKA,KAAL,GAAa,IAAI95G,MAAJ,CAAW,OAAOh0G,CAAC,CAACguN,SAAF,IAAe,EAAtB,IAA4B,GAAvC,EAA4C,GAA5C,CAAb;AACA9+J,MAAAA,IAAI,GAAG,IAAP;AACD;;AAED,QAAIlvD,CAAC,CAACo6M,QAAF,CAAW,SAAX,KAAyB,CAAC,KAAKyT,MAAnC,EAA2C;AACzC,WAAKA,MAAL,GAAc,IAAI75G,MAAJ,CAAWh0G,CAAC,CAACm7I,OAAF,IAAa,UAAxB,EAAoC,GAApC,CAAd;AACAjsF,MAAAA,IAAI,GAAG,IAAP;AACD;;AAED,QAAIlvD,CAAC,CAACo6M,QAAF,CAAW,OAAX,KAAuBP,KAAK,CAACO,QAAN,CAAep6M,CAAC,CAAC6uG,KAAF,CAAQ13E,MAAvB,CAA3B,EAA2D;AACzD+3B,MAAAA,IAAI,GAAG,IAAP;AACD;;AAED,QAAIA,IAAJ,EAAU,KAAK28J,OAAL,GAAe,EAAf;AACV,WAAO38J,IAAP;AACD,GAjD+B;;AAmDhC6+J,EAAAA,OAAO,CAAClU,KAAD,EAAQ8O,EAAR,EAAY;AACjB,UAAMhgD,MAAM,GAAG,KAAKkjD,OAApB;AAAA,UACM/nE,MAAM,GAAG,KAAKmqE,OAAL,KAAiB,KAAKA,OAAL,GAAe,EAAhC,CADf;AAAA,UAEMl8H,IAAI,GAAG42H,EAAE,CAAC,CAAD,CAFf;AAAA,UAGMv3J,KAAK,GAAGu3J,EAAE,CAAC,CAAD,CAHhB;AAAA,UAIMjpN,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAJZ;AAKA,QAAIv4K,CAAJ,EAAO5oD,CAAP,EAAU+I,CAAV;;AAEA,SAAK6/C,CAAL,IAAUgjI,MAAV,EAAkB;AAChB5rL,MAAAA,CAAC,GAAG+mK,MAAM,CAACn+G,CAAD,CAAV;AACA7/C,MAAAA,CAAC,GAAG6iL,MAAM,CAAChjI,CAAD,CAAN,IAAa,CAAjB;;AAEA,UAAI,CAAC5oD,CAAD,IAAM+I,CAAV,EAAa;AACXg+J,QAAAA,MAAM,CAACn+G,CAAD,CAAN,GAAY5oD,CAAC,GAAG,0BAAO,EAAP,CAAhB;AACAA,QAAAA,CAAC,CAACg1G,IAAD,CAAD,GAAUpsD,CAAV;AACA5oD,QAAAA,CAAC,CAACq0E,KAAD,CAAD,GAAWtrE,CAAX;AACA4Z,QAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAayD,CAAb;AACD,OALD,MAKO,IAAI+I,CAAC,KAAK,CAAV,EAAa;AAClB,YAAI/I,CAAJ,EAAO2iB,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAayD,CAAb;AACP4rL,QAAAA,MAAM,CAAChjI,CAAD,CAAN,GAAY,IAAZ;AACAm+G,QAAAA,MAAM,CAACn+G,CAAD,CAAN,GAAY,IAAZ;AACD,OAJM,MAIA,IAAI5oD,CAAC,CAACq0E,KAAD,CAAD,KAAatrE,CAAjB,EAAoB;AACzB/I,QAAAA,CAAC,CAACq0E,KAAD,CAAD,GAAWtrE,CAAX;AACA4Z,QAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAayD,CAAb;AACD;AACF;;AAED,WAAO2iB,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AA/E+B,CAAlC;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASuF,KAAT,CAAexxO,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDwxO,KAAK,CAAC1M,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,iBAAa;AADH,GAFK;AAKjB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,GAAD,EAAM,GAAN;AALV,GAHO;AALO,CAAnB;AAgBA,wBAAS0M,KAAT,EAAgB5M,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ;AAAA,UACM0K,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,GAAD,EAAM,GAAN,CADnB;AAAA,UAEMpoO,CAAC,GAAGooO,EAAE,CAAC,CAAD,CAFZ;AAAA,UAGMvhO,CAAC,GAAGuhO,EAAE,CAAC,CAAD,CAHZ;AAAA,UAIM5iN,KAAK,GAAG,CAAC,KAAK1pB,KAAN,IAAew9N,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC+D,OAApB,CAAf,IAA+C59M,CAAC,CAACo6M,QAAF,CAAW,IAAX,CAA/C,IAAmEp6M,CAAC,CAACo6M,QAAF,CAAW,QAAX,CAJjF;;AAMA,QAAI/xN,IAAI,GAAG,KAAKhM,KAAhB;;AAEA,QAAI0pB,KAAJ,EAAW;AACT,UAAI1d,IAAJ,EAAUqX,GAAG,CAACw7E,GAAJ,GAAU7yF,IAAV;AACVA,MAAAA,IAAI,GAAGwxN,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAAvC;AACAzvC,MAAAA,GAAG,CAAC1F,GAAJ,GAAU,KAAK3d,KAAL,GAAagiN,KAAK,CAACh2M,IAAD,EAAO9H,CAAP,EAAU6G,CAAV,EAAa4Y,CAAC,CAACxL,MAAF,IAAYi5L,gBAAzB,CAA5B;AACD,KAJD,MAIO;AACL/tL,MAAAA,GAAG,CAAClP,GAAJ,GAAUnI,IAAV;AACD;;AAEDqX,IAAAA,GAAG,CAACyvC,MAAJ,GAAa,KAAK9yD,KAAlB;AACA,WAAOqjB,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AApBwB,CAA3B;;AAwBA,SAAStqB,KAAT,CAAeh6L,KAAf,EAAsB9jB,CAAtB,EAAyB6G,CAAzB,EAA4BoN,MAA5B,EAAoC;AAClC,MAAInM,IAAI,GAAG,EAAX;AAAA,MACItL,CAAC,GAAG,EADR;AAAA,MAEIwK,CAAC,GAAG8c,KAAK,CAAC1rB,MAFd;AAAA,MAGIU,CAAC,GAAG,CAHR;AAAA,MAIIiK,CAJJ;AAAA,MAKIkpC,IALJ;;AAOA,SAAOnzC,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB0D,IAAAA,CAAC,CAACwD,CAAD,CAAD,GAAOisC,IAAI,GAAGnoB,KAAK,CAAChrB,CAAD,CAAnB;;AAEA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiE,CAAhB,EAAmB,EAAEjE,CAArB,EAAwB;AACtBvG,MAAAA,CAAC,CAACqK,CAAD,CAAD,GAAOid,KAAK,CAAC/gB,CAAD,CAAZ;;AAEA,UAAIkR,MAAM,CAACzX,CAAD,CAAV,EAAe;AACbsL,QAAAA,IAAI,CAAC/O,IAAL,CAAU,0BAAOyD,CAAP,CAAV;AACAA,QAAAA,CAAC,GAAG,EAAJ;AACAA,QAAAA,CAAC,CAACwD,CAAD,CAAD,GAAOisC,IAAP;AACD;AACF;AACF;;AAED,SAAOnkC,IAAP;AACD;;AAED,MAAM8lO,aAAa,GAAG;AACpB1K,EAAAA,GAAG,EAAE2K,yBADe;AAEpBnK,EAAAA,OAAO,EAAEoK,6BAFW;AAGpBC,EAAAA,MAAM,EAAE11J,4BAHY;AAIpBorJ,EAAAA,SAAS,EAAEuK,+BAJS;AAKpB/J,EAAAA,OAAO,EAAEzrJ;AALW,CAAtB;AAOA,MAAMy1J,aAAa,GAAG,eAAtB;AAAA,MACMC,QAAQ,GAAG,UADjB;AAAA,MAEMC,KAAK,GAAG,OAFd;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASnzL,KAAT,CAAe8zH,GAAf,EAAoBhnK,IAApB,EAA0B;AACxB,QAAM6iB,IAAI,GAAGmkJ,GAAG,CAACo/D,QAAD,CAAhB;;AAEA,MAAI,CAAC,8BAAeN,aAAf,EAA8BjjN,IAA9B,CAAL,EAA0C;AACxC,yBAAM,oCAAoCA,IAA1C;AACD;;AAED,QAAMhlB,CAAC,GAAGioO,aAAa,CAACjjN,IAAD,CAAb,EAAV;;AAEA,OAAK,MAAMtwB,IAAX,IAAmBy0K,GAAnB,EAAwB;AACtB;AACA,QAAIz0K,IAAI,KAAK8zO,KAAb,EAAoB;AAClBxoO,MAAAA,CAAC,CAACmC,IAAF,CAAO,CAACgnK,GAAG,CAAC3kK,IAAJ,IAAYrC,IAAI,EAAjB,EAAqBvF,GAArB,CAAyBusK,GAAG,CAACz0K,IAAD,CAA5B,CAAP;AACD,KAFD,CAEE;AAFF,SAGK,IAAIA,IAAI,KAAK4zO,aAAb,EAA4B;AAC7BtoO,QAAAA,CAAC,CAACtL,IAAD,CAAD,CAAQy0K,GAAG,CAACz0K,IAAD,CAAH,CAAUkI,GAAV,CAAckd,CAAC,IAAIu7B,KAAK,CAACv7B,CAAD,EAAI3X,IAAJ,CAAxB,CAAR;AACD,OAFE,CAED;AAFC,WAGE,IAAI,OAAOnC,CAAC,CAACtL,IAAD,CAAR,KAAmB6zO,QAAvB,EAAiC;AAClCvoO,UAAAA,CAAC,CAACtL,IAAD,CAAD,CAAQy0K,GAAG,CAACz0K,IAAD,CAAX;AACD;AACN;;AAED,SAAOsL,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASyoO,OAAT,CAAiBjyO,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,MAAMynO,aAAa,GAAG,CAAC;AACrB,SAAO;AACL,gBAAY;AADP,GADc;AAIrB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,eAAW;AAHF,GAAD,EAIP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAJO;AAJW,CAAD,EAanB;AACD,SAAO;AACL,gBAAY;AADP,GADN;AAID,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,eAAW;AAHF,GAAD,EAIP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAJO;AAJT,CAbmB,EA0BnB;AACD,SAAO;AACL,gBAAY;AADP,GADN;AAID,YAAU,CAAC;AACT,YAAQ,KADC;AAET,YAAQ,QAFC;AAGT,eAAW;AAHF,GAAD,EAIP;AACD,YAAQ,KADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAJO;AAJT,CA1BmB,EAuCnB;AACD,SAAO;AACL,gBAAY;AADP,GADN;AAID,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAJO,EAOP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAPO;AAJT,CAvCmB,CAAtB;AAwDA,MAAMF,OAAO,GAAG;AACd,SAAO;AACL,gBAAY;AADP,GADO;AAId,YAAU,CAAC;AACT,YAAQ,eADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,cAAUE;AAJD,GAAD,EAKP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GALO;AAJI,CAAhB;AAeAwK,OAAO,CAACnN,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,iBAAa;AADH,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,QAFC;AAGT,aAAS,IAHA;AAIT,cAAU;AAJD,GAAD,EAKP;AACD,YAAQ,OADP;AAED,YAAQ;AAFP,GALO,EAQP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GARO,EAYP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,eAAW,KAHV;AAID,cAAU,CAAC,KAAD,EAAQ,KAAR;AAJT,GAhBO,EAqBP;AACD,YAAQ,cADP;AAED,YAAQ,OAFP;AAGD,cAAU2C,aAAa,CAACvrO,MAAd,CAAqBqrO,OAArB;AAHT,GArBO,EAyBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,eAAW,CAAC,OAAD,EAAU,SAAV;AAJV,GAzBO;AALS,CAArB;AAqCA,wBAAS0K,OAAT,EAAkBrN,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAZ;;AAEA,QAAI,CAAC,KAAK7hO,KAAN,IAAew9N,KAAK,CAAC74B,OAAN,EAAf,IAAkChhL,CAAC,CAACo6M,QAAF,EAAtC,EAAoD;AAClD,YAAMqI,IAAI,GAAGlnL,KAAK,CAACv7B,CAAC,CAACo4G,YAAH,EAAiBjpE,MAAM,CAAC0qK,KAAD,CAAvB,CAAlB;AAAA,YACM+U,QAAQ,GAAG5uN,CAAC,CAACwlH,KAAF,IAAWxlH,CAAC,CAAC4uN,QAAb,IAAyB,EAD1C;AAAA,YAEMC,QAAQ,GAAG7uN,CAAC,CAACwlH,KAAF,IAAWxlH,CAAC,CAAC6uN,QAAb,IAAyB,GAF1C;AAGA,UAAIvkM,MAAM,GAAGtqB,CAAC,CAACsqB,MAAF,IAAY,KAAzB;;AAEA,UAAIA,MAAM,KAAK,KAAX,IAAoBA,MAAM,KAAK,KAAnC,EAA0C;AACxC,6BAAM,6BAA6BA,MAAnC;AACD;;AAED,UAAI,CAACtqB,CAAC,CAAC0yL,MAAH,IAAa,CAAC+vB,IAAI,CAACp6N,IAAvB,EAA6B;AAC3B,6BAAM,mCAAN;AACD;;AAEDiiC,MAAAA,MAAM,GAAGm4L,IAAI,CAACn4L,MAAD,CAAb;AACA,YAAMq+L,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,OAAD,EAAU,SAAV,CAAnB;AAAA,YACMl6B,MAAM,GAAGzuL,CAAC,CAAC0yL,MAAF,IAAY,sBAAO+vB,IAAI,CAACp6N,IAAL,EAAP,CAD3B;AAAA,YAEM5E,MAAM,GAAG,iCAAY6mC,MAAZ,EAAoBmkK,MAApB,EAA4BmgC,QAA5B,EAAsCC,QAAtC,EAAgD/rO,GAAhD,CAAoDyI,CAAC,IAAI;AACtE,cAAMquN,KAAK,GAAG,EAAd;AACAA,QAAAA,KAAK,CAAC+O,EAAE,CAAC,CAAD,CAAH,CAAL,GAAep9N,CAAC,CAAC,CAAD,CAAhB;AACAquN,QAAAA,KAAK,CAAC+O,EAAE,CAAC,CAAD,CAAH,CAAL,GAAep9N,CAAC,CAAC,CAAD,CAAhB;AACA,eAAO,0BAAOquN,KAAP,CAAP;AACD,OALc,CAFf;AAQA,UAAI,KAAKv9N,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,WAAKA,KAAL,GAAaqjB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAACyvC,MAAJ,GAAa1rD,MAApC;AACD;;AAED,WAAOic,GAAP;AACD;;AAhC0B,CAA7B;;AAoCA,SAASyvC,MAAT,CAAgB0qK,KAAhB,EAAuB;AACrB,SAAO,MAAMA,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA7C;AACD;;AAED,SAAS2/K,UAAT,CAAoB33L,MAApB,EAA4BwxL,EAA5B,EAAgC;AAC9B,MAAI,CAACxxL,MAAL,EAAa,OAAO,IAAP;AACb,SAAOA,MAAM,CAACr0C,GAAP,CAAW,CAACkC,CAAD,EAAI3L,CAAJ,KAAUsvO,EAAE,CAACtvO,CAAD,CAAF,IAAS,4BAAa2L,CAAb,CAA9B,CAAP;AACD;;AACD,SAAS+pO,SAAT,CAAmB1mO,IAAnB,EAAyB8jO,OAAzB,EAAkCt9G,KAAlC,EAAyC;AACvC,QAAM0tF,MAAM,GAAG,EAAf;AAAA,QACMpgN,GAAG,GAAG6I,CAAC,IAAIA,CAAC,CAACjI,CAAD,CADlB;;AAGA,MAAI+F,GAAJ,EAASzJ,CAAT,EAAYkO,CAAZ,EAAexK,CAAf,EAAkB4Z,CAAlB,EAAqBmxB,CAArB,CAJuC,CAIf;;AAExB,MAAIqkM,OAAO,IAAI,IAAf,EAAqB;AACnB5vB,IAAAA,MAAM,CAACjjN,IAAP,CAAY+O,IAAI,CAACvF,GAAL,CAAS+rH,KAAT,CAAZ;AACD,GAFD,MAEO;AACL,SAAK/rH,GAAG,GAAG,EAAN,EAAUzJ,CAAC,GAAG,CAAd,EAAiBkO,CAAC,GAAGc,IAAI,CAAC1P,MAA/B,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD0D,MAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;AACAsd,MAAAA,CAAC,GAAGw1N,OAAO,CAACrpO,GAAR,CAAY3G,GAAZ,CAAJ;AACA2rC,MAAAA,CAAC,GAAGhlC,GAAG,CAAC6T,CAAD,CAAP;;AAEA,UAAI,CAACmxB,CAAL,EAAQ;AACNhlC,QAAAA,GAAG,CAAC6T,CAAD,CAAH,GAASmxB,CAAC,GAAG,EAAb;AACAA,QAAAA,CAAC,CAAC3H,IAAF,GAASxpB,CAAT;AACA4lM,QAAAA,MAAM,CAACjjN,IAAP,CAAYwuC,CAAZ;AACD;;AAEDA,MAAAA,CAAC,CAACxuC,IAAF,CAAOu1H,KAAK,CAAC9xH,CAAD,CAAZ;AACD;AACF;;AAED,SAAOw/M,MAAP;AACD;;AAED,MAAMyyB,MAAM,GAAG,KAAf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,MAAT,CAAgBvyO,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDuyO,MAAM,CAACzN,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY;AACV,gBAAY;AADF,GAFM;AAKlB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAJO,EAQP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GARO,EAWP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAXO,EAeP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAWwN;AAHV,GAfO;AALQ,CAApB;;AA2BA,MAAME,QAAQ,GAAG,CAAC7mO,IAAD,EAAOwmH,KAAP,KAAiB,oBAAK,sBAAOxmH,IAAP,EAAawmH,KAAb,CAAL,IAA4B,EAA9D;;AAEA,wBAASogH,MAAT,EAAiB3N,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,EAAE2jB,CAAC,CAACo6M,QAAF,MAAgBP,KAAK,CAAC74B,OAAN,EAAlB,CAAlB,EAAsD;AACpD,aAAO64B,KAAP,CADoD,CACtC;AACf;;AAED,UAAM1qK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA/C;AAAA,UACMotJ,MAAM,GAAGwyB,SAAS,CAAClV,KAAK,CAAC1qK,MAAP,EAAenvC,CAAC,CAACmsN,OAAjB,EAA0B7yG,kBAA1B,CADxB;AAAA,UAEM+oG,MAAM,GAAGriN,CAAC,CAACqiN,MAAF,IAAY,KAF3B;AAAA,UAGMxzG,KAAK,GAAG7uG,CAAC,CAAC6uG,KAHhB;AAAA,UAIM96G,IAAI,GAAGiM,CAAC,CAACjM,IAAF,IAAUm7N,QAAQ,CAAC//K,MAAD,EAAS0/D,KAAT,CAJ/B;AAAA,UAKMxrH,IAAI,GAAG,iCAAc,CAAC9C,CAAD,EAAI6G,CAAJ,KAAUynH,KAAK,CAACtuH,CAAD,CAAL,GAAWsuH,KAAK,CAACznH,CAAD,CAAxC,CALb;AAAA,UAMMuhO,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQqG,MANnB;AAAA,UAOMznO,CAAC,GAAGg1M,MAAM,CAAC5jN,MAPjB,CALkB,CAYO;;AAEzB,QAAI4G,GAAG,GAAG4B,QAAV;AAAA,QACI1B,GAAG,GAAG,CAAC0B,QADX;AAAA,QAEI9H,CAAC,GAAG,CAFR;AAAA,QAGIiK,CAHJ;;AAKA,WAAOjK,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB,YAAMyuC,CAAC,GAAGy0K,MAAM,CAACljN,CAAD,CAAN,CAAUgK,IAAV,CAAeA,IAAf,CAAV;AACAC,MAAAA,CAAC,GAAG,CAAC,CAAL;;AAEA,WAAK,MAAMiI,CAAX,IAAgB,4BAAOu8B,CAAP,EAAU/zB,IAAV,EAAgBsuN,MAAhB,EAAwBxzG,KAAxB,CAAhB,EAAgD;AAC9C,YAAItjH,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,YAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACbu8B,QAAAA,CAAC,CAAC,EAAExkC,CAAH,CAAD,CAAOqlO,EAAP,IAAap9N,CAAb;AACD;AACF;;AAED,SAAKlP,KAAL,GAAa;AACX8I,MAAAA,KAAK,EAAE5F,GADI;AAEXq7B,MAAAA,IAAI,EAAEn7B,GAFK;AAGXsU,MAAAA,IAAI,EAAEA;AAHK,KAAb;AAKA,WAAO8lN,KAAK,CAACJ,MAAN,CAAa,IAAb,EAAmBM,QAAnB,CAA4B4O,EAA5B,CAAP;AACD;;AArCyB,CAA5B;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASwG,UAAT,CAAoBzyO,MAApB,EAA4B;AAC1Bg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0Bi3O,QAA1B,EAAoC1yO,MAApC;;AACA,OAAK09N,QAAL,CAAc,IAAd;AACD;;AACD,wBAAS+U,UAAT,EAAqBzU,sBAArB;;AAEA,SAAS0U,QAAT,CAAkBpvN,CAAlB,EAAqB;AACnB,QAAMjgB,IAAI,GAAGigB,CAAC,CAACjgB,IAAf;AACA,SAAO,KAAK1D,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,CAAW,MAAX,CAAf,GAAoC,KAAK/9N,KAAzC,GAAiD,wBAAS+7N,KAAK,IAAIr4N,IAAI,CAACq4N,KAAD,EAAQp4M,CAAR,CAAtB,EAAkC,8BAAejgB,IAAf,CAAlC,EAAwD,4BAAaA,IAAb,CAAxD,CAAxD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASsvO,MAAT,CAAgB3yO,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,CAACo2H,SAAD,EAAYA,SAAZ,CAArB,EAA6C7xH,MAA7C;AACD;;AACD2yO,MAAM,CAAC7N,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY,EAFM;AAGlB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD;AAHQ,CAApB;AASA,wBAAS6N,MAAT,EAAiB/N,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMnnB,MAAM,GAAG,KAAKr2M,KAApB;AAAA,UACMwyH,KAAK,GAAG7uG,CAAC,CAAC6uG,KADhB;AAAA,UAEMr+G,GAAG,GAAGqpN,KAAK,CAAC74B,OAAN,MAAmB64B,KAAK,CAACO,QAAN,CAAevrG,KAAK,CAAC13E,MAArB,CAAnB,IAAmDn3B,CAAC,CAACo6M,QAAF,CAAW,OAAX,CAF/D;;AAIA,QAAI76N,GAAG,GAAGmzM,MAAM,CAAC,CAAD,CAAhB;AAAA,QACIjzM,GAAG,GAAGizM,MAAM,CAAC,CAAD,CADhB;;AAGA,QAAIliM,GAAG,IAAIjR,GAAG,IAAI,IAAlB,EAAwB;AACtBA,MAAAA,GAAG,GAAG,CAAC4B,QAAP;AACA1B,MAAAA,GAAG,GAAG,CAAC0B,QAAP;AACD;;AAED04N,IAAAA,KAAK,CAACwE,KAAN,CAAY7tN,GAAG,GAAGqpN,KAAK,CAACmE,MAAT,GAAkBnE,KAAK,CAAC38K,GAAvC,EAA4CngD,CAAC,IAAI;AAC/C,YAAMwO,CAAC,GAAG,wBAASsjH,KAAK,CAAC9xH,CAAD,CAAd,CAAV;;AAEA,UAAIwO,CAAC,IAAI,IAAT,EAAe;AACb;AACA,YAAIA,CAAC,GAAGhM,GAAR,EAAaA,GAAG,GAAGgM,CAAN;AACb,YAAIA,CAAC,GAAG9L,GAAR,EAAaA,GAAG,GAAG8L,CAAN;AACd;AACF,KARD;;AAUA,QAAI,CAAC9E,MAAM,CAACvC,QAAP,CAAgB3E,GAAhB,CAAD,IAAyB,CAACkH,MAAM,CAACvC,QAAP,CAAgBzE,GAAhB,CAA9B,EAAoD;AAClD,UAAI7E,IAAI,GAAG,4BAAai0H,KAAb,CAAX;AACA,UAAIj0H,IAAJ,EAAUA,IAAI,GAAG,gBAAgBhC,MAAhB,CAAuBgC,IAAvB,EAA6B,IAA7B,CAAP;AACVi/N,MAAAA,KAAK,CAAC8C,QAAN,CAAelhO,IAAf,CAAoB,kBAAkB7C,MAAlB,CAAyBgC,IAAzB,EAA+B,KAA/B,EAAsChC,MAAtC,CAA6C2G,GAA7C,EAAkD,IAAlD,EAAwD3G,MAAxD,CAA+D6G,GAA/D,EAAoE,GAApE,CAApB;AACAF,MAAAA,GAAG,GAAGE,GAAG,GAAG8uH,SAAZ;AACD;;AAED,SAAKlyH,KAAL,GAAa,CAACkD,GAAD,EAAME,GAAN,CAAb;AACD;;AAhCyB,CAA5B;AAoCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS6vO,OAAT,CAAiBzV,KAAjB,EAAwB9oB,MAAxB,EAAgC;AAC9B2pB,yBAASviO,IAAT,CAAc,IAAd,EAAoB0hO,KAApB;;AACA,OAAK9oB,MAAL,GAAcA,MAAd;AACA,OAAK3/H,KAAL,GAAa,CAAb;AACD;;AACD,wBAASk+J,OAAT,EAAkB5U,sBAAlB,EAA4B;AAC1B;AACF;AACA;AACA;AACEnvC,EAAAA,OAAO,CAAC37I,MAAD,EAAS;AACd,SAAK2/L,aAAL,GAAqB3/L,MAAM,CAAC2/L,aAA5B;AACA,SAAKriJ,OAAL,GAAelzE,GAAf,CAAmB41B,MAAnB;AACA,WAAOA,MAAM,CAACuf,MAAP,GAAgB,IAAvB;AACD,GATyB;;AAW1B;AACF;AACA;AACA;AACEn1C,EAAAA,GAAG,CAACjd,CAAD,EAAI;AACL,SAAKq0E,KAAL,IAAc,CAAd;AACA,SAAK/0E,KAAL,CAAW2d,GAAX,CAAe1gB,IAAf,CAAoByD,CAApB;AACD,GAlByB;;AAoB1B;AACF;AACA;AACA;AACEm+F,EAAAA,GAAG,CAACn+F,CAAD,EAAI;AACL,SAAKq0E,KAAL,IAAc,CAAd;AACA,SAAK/0E,KAAL,CAAW6+F,GAAX,CAAe5hG,IAAf,CAAoByD,CAApB;AACD,GA3ByB;;AA6B1B;AACF;AACA;AACA;AACEyT,EAAAA,GAAG,CAACzT,CAAD,EAAI;AACL,SAAKV,KAAL,CAAWmU,GAAX,CAAelX,IAAf,CAAoByD,CAApB;AACD,GAnCyB;;AAqC1B;AACF;AACA;AACA;AACA;AACEmyE,EAAAA,IAAI,CAAC2qJ,KAAD,EAAQ;AACV,SAAKx9N,KAAL,CAAW6yE,IAAX,CAAgB2qJ,KAAhB,EAAuBA,KAAK,CAACoE,SAA7B;AACD,GA5CyB;;AA8C1B;AACF;AACA;AACA;AACA;AACEngF,EAAAA,QAAQ,GAAG;AACT;AACA,WAAO,KAAKzhJ,KAAZ;AACD;;AAtDyB,CAA5B;AA0DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASmzO,KAAT,CAAe9yO,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;;AACA,OAAK+yO,KAAL,GAAa,wBAAb,CAFqB,CAEG;AACxB;AACA;;AAEA,QAAMlvO,CAAC,GAAG,KAAK06N,QAAL,GAAgB,EAA1B;AACA16N,EAAAA,CAAC,CAACs8N,MAAF,GAAW,CAAX;;AAEAt8N,EAAAA,CAAC,CAACpD,OAAF,GAAY6H,CAAC,IAAI;AACf,SAAK,IAAI3L,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGhH,CAAC,CAACs8N,MAAtB,EAA8BxjO,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC2L,MAAAA,CAAC,CAACzE,CAAC,CAAClH,CAAD,CAAF,EAAOA,CAAP,EAAUkH,CAAV,CAAD;AACD;AACF,GAJD;AAKD;;AACD,wBAASivO,KAAT,EAAgBlO,uBAAhB,EAA2B;AACzBoO,EAAAA,QAAQ,CAACC,IAAD,EAAO;AACb,SAAK1U,QAAL,CAAc,KAAKA,QAAL,CAAc4B,MAAd,EAAd,IAAwC8S,IAAxC;AACD,GAHwB;;AAKzB;AACAC,EAAAA,OAAO,CAACtyO,GAAD,EAAMqyO,IAAN,EAAY9V,KAAZ,EAAmB9oB,MAAnB,EAA2B;AAChC,UAAM8+B,KAAK,GAAG,KAAKxzO,KAAnB;AACA,QAAIyzO,EAAE,GAAG,8BAAeD,KAAf,EAAsBvyO,GAAtB,KAA8BuyO,KAAK,CAACvyO,GAAD,CAA5C;AAAA,QACIq7N,EADJ;AAAA,QAEIh7L,CAFJ;;AAIA,QAAI,CAACmyM,EAAL,EAAS;AACPnyM,MAAAA,CAAC,GAAGozK,MAAM,IAAI,CAACpzK,CAAC,GAAG,KAAKoyM,MAAL,CAAYzyO,GAAZ,CAAL,KAA0BqgC,CAAC,CAACi8L,KAA1C;AACAjB,MAAAA,EAAE,GAAGkB,KAAK,CAAC8C,QAAX;AACAmT,MAAAA,EAAE,GAAG,IAAIR,OAAJ,CAAYzV,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ,EAAyC,IAAzC,CAAL;AACAtF,MAAAA,EAAE,CAAC3+M,GAAH,CAAO81N,EAAP,EAAWvkD,OAAX,CAAmBokD,IAAI,CAAChX,EAAD,EAAKr7N,GAAL,EAAUqgC,CAAV,CAAvB;AACAkyM,MAAAA,KAAK,CAACvyO,GAAD,CAAL,GAAawyO,EAAb;AACA,WAAKJ,QAAL,CAAcI,EAAd;AACD,KAPD,MAOO,IAAIA,EAAE,CAACzzO,KAAH,CAASu+N,KAAT,GAAiBf,KAAK,CAACe,KAA3B,EAAkC;AACvCkV,MAAAA,EAAE,CAAC5gK,IAAH,CAAQ2qJ,KAAR;AACA,WAAK6V,QAAL,CAAcI,EAAd;AACD;;AAED,WAAOA,EAAP;AACD,GAzBwB;;AA2BzBprC,EAAAA,KAAK,GAAG;AACN,UAAMmrC,KAAK,GAAG,KAAKxzO,KAAnB;;AAEA,SAAK,MAAMiB,GAAX,IAAkBuyO,KAAlB,EAAyB;AACvB,UAAIA,KAAK,CAACvyO,GAAD,CAAL,CAAW8zE,KAAX,KAAqB,CAAzB,EAA4B;AAC1B,cAAMqqJ,MAAM,GAAGoU,KAAK,CAACvyO,GAAD,CAAL,CAAWiyO,aAA1B;AACA,YAAI9T,MAAJ,EAAYA,MAAM;AAClB,eAAOoU,KAAK,CAACvyO,GAAD,CAAZ;AACD;AACF;AACF,GArCwB;;AAuCzB0yO,EAAAA,WAAW,GAAG;AACZ,UAAMzvO,CAAC,GAAG,KAAK06N,QAAf;AAAA,UACM1zN,CAAC,GAAGhH,CAAC,CAAC5H,MADZ;;AAGA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAAJ,IAAShH,CAAC,CAAClH,CAAD,CAAD,IAAQ,IAAjC,EAAuC,EAAEA,CAAzC,EAA4C;AAC1CkH,MAAAA,CAAC,CAAClH,CAAD,CAAD,GAAO,IAAP,CAD0C,CAC7B;AACd;;AAEDkH,IAAAA,CAAC,CAACs8N,MAAF,GAAW,CAAX;AACD,GAhDwB;;AAkDzBv6C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAjB;AAAA,UACMr/N,GAAG,GAAG0iB,CAAC,CAAC1iB,GADd;AAAA,UAEMqyO,IAAI,GAAG3vN,CAAC,CAAC4vN,OAFf;AAAA,UAGM3/C,KAAK,GAAG,KAAKw/C,KAHnB;AAAA,UAIMQ,KAAK,GAAGjwN,CAAC,CAACo6M,QAAF,CAAW,KAAX,CAJd;AAAA,UAKMwV,OAAO,GAAGtyO,GAAG,IAAI,KAAKsyO,OAAL,CAAatyO,GAAb,EAAkBqyO,IAAlB,EAAwB9V,KAAxB,CALvB;;AAOA,SAAKkW,MAAL,GAAc/vN,CAAC,CAACglG,KAAF,IAAW,EAAzB;AACA,SAAKgrH,WAAL,GATkB,CASE;;AAEpBnW,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,YAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AAAA,YACM4Z,CAAC,GAAGs5K,KAAK,CAAC9zL,GAAN,CAAUmQ,EAAV,CADV;;AAGA,UAAIqK,CAAC,KAAK43G,SAAV,EAAqB;AACnB0hE,QAAAA,KAAK,CAACnxL,MAAN,CAAawN,EAAb;AACAsjO,QAAAA,OAAO,CAACj5N,CAAD,CAAP,CAAWukF,GAAX,CAAen+F,CAAf;AACD;AACF,KARD;AASA88N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,YAAM4Z,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAb;AACAkzL,MAAAA,KAAK,CAACj0L,GAAN,CAAU,2BAAQe,CAAR,CAAV,EAAsB4Z,CAAtB;AACAi5N,MAAAA,OAAO,CAACj5N,CAAD,CAAP,CAAWqD,GAAX,CAAejd,CAAf;AACD,KAJD;;AAMA,QAAIkzO,KAAK,IAAIpW,KAAK,CAACO,QAAN,CAAe98N,GAAG,CAAC65C,MAAnB,CAAb,EAAyC;AACvC0iL,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B,cAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AAAA,cACMk9F,EAAE,GAAGg2F,KAAK,CAAC9zL,GAAN,CAAUmQ,EAAV,CADX;AAAA,cAEM4jO,EAAE,GAAG5yO,GAAG,CAACP,CAAD,CAFd;;AAIA,YAAIk9F,EAAE,KAAKi2I,EAAX,EAAe;AACbN,UAAAA,OAAO,CAACM,EAAD,CAAP,CAAY1/N,GAAZ,CAAgBzT,CAAhB;AACD,SAFD,MAEO;AACLkzL,UAAAA,KAAK,CAACj0L,GAAN,CAAUsQ,EAAV,EAAc4jO,EAAd;AACAN,UAAAA,OAAO,CAAC31I,EAAD,CAAP,CAAYiB,GAAZ,CAAgBn+F,CAAhB;AACA6yO,UAAAA,OAAO,CAACM,EAAD,CAAP,CAAYl2N,GAAZ,CAAgBjd,CAAhB;AACD;AACF,OAZD;AAaD,KAdD,MAcO,IAAI88N,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC8D,GAApB,CAAJ,EAA8B;AACnC9D,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B6yO,QAAAA,OAAO,CAAC3/C,KAAK,CAAC9zL,GAAN,CAAU,2BAAQY,CAAR,CAAV,CAAD,CAAP,CAA+ByT,GAA/B,CAAmCzT,CAAnC;AACD,OAFD;AAGD;;AAED,QAAIkzO,KAAJ,EAAW;AACTpW,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACkE,MAAlB,EAA0BhhO,CAAC,IAAI;AAC7B,cAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AAAA,cACMk9F,EAAE,GAAGg2F,KAAK,CAAC9zL,GAAN,CAAUmQ,EAAV,CADX;AAAA,cAEM4jO,EAAE,GAAG5yO,GAAG,CAACP,CAAD,CAFd;;AAIA,YAAIk9F,EAAE,KAAKi2I,EAAX,EAAe;AACbjgD,UAAAA,KAAK,CAACj0L,GAAN,CAAUsQ,EAAV,EAAc4jO,EAAd;AACAN,UAAAA,OAAO,CAAC31I,EAAD,CAAP,CAAYiB,GAAZ,CAAgBn+F,CAAhB;AACA6yO,UAAAA,OAAO,CAACM,EAAD,CAAP,CAAYl2N,GAAZ,CAAgBjd,CAAhB;AACD;AACF,OAVD;AAWD;;AAED,QAAI88N,KAAK,CAACn1B,KAAN,EAAJ,EAAmB;AACjBi0B,MAAAA,EAAE,CAACoG,QAAH,CAAY,MAAM;AAChB,aAAKr6B,KAAL;AACAzU,QAAAA,KAAK,CAACyU,KAAN;AACD,OAHD;AAID,KALD,MAKO,IAAIzU,KAAK,CAACud,KAAN,GAAcmrB,EAAE,CAAC0I,cAArB,EAAqC;AAC1C1I,MAAAA,EAAE,CAACoG,QAAH,CAAY9uC,KAAK,CAACyU,KAAlB;AACD;;AAED,WAAOm1B,KAAP;AACD;;AAxHwB,CAA3B;AA4HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASsW,KAAT,CAAezzO,MAAf,EAAuB;AACrBg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0Bi4O,QAA1B,EAAoC1zO,MAApC;AACD;;AACD,wBAASyzO,KAAT,EAAgBzV,sBAAhB;;AAEA,SAAS0V,QAAT,CAAkBpwN,CAAlB,EAAqB;AACnB,SAAO,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAf,GAA8B,KAAK/9N,KAAnC,GAA2C,uBAAQ2jB,CAAC,CAACplB,IAAV,IAAkB,qBAAMolB,CAAC,CAACplB,IAAR,EAAckI,GAAd,CAAkBkC,CAAC,IAAI,qBAAMA,CAAN,CAAvB,CAAlB,GAAqD,qBAAMgb,CAAC,CAACplB,IAAR,EAAcolB,CAAC,CAAC2oN,EAAhB,CAAvG;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS0H,MAAT,CAAgB3zO,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,wBAArB,EAAgCuE,MAAhC;AACD;;AACD2zO,MAAM,CAAC7O,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY;AACV,eAAW;AADD,GAFM;AAKlB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,MAFC;AAGT,gBAAY;AAHH,GAAD;AALQ,CAApB;AAWA,wBAAS6O,MAAT,EAAiB/O,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAjB;AAAA,UACM1sC,KAAK,GAAG,KAAK5zL,KADnB;AAAA,UAEM;AACN0mB,IAAAA,MAAM,GAAG82M,KAAK,CAAC0E,IAAN,EAHT;AAAA,UAIMvkN,GAAG,GAAG+I,MAAM,CAAC/I,GAJnB;AAAA,UAKMkhF,GAAG,GAAGn4E,MAAM,CAACm4E,GALnB;AAAA,UAMM1qF,GAAG,GAAGuS,MAAM,CAACvS,GANnB;AAAA,UAOMwW,IAAI,GAAGhH,CAAC,CAACjgB,IAPf;AAQA,QAAIuwO,KAAK,GAAG,IAAZ;AACAzW,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,YAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AACA,UAAI,CAACkzL,KAAK,CAACtxL,GAAN,CAAU2N,EAAV,CAAL,EAAoB4uF,GAAG,CAAC5hG,IAAJ,CAASyD,CAAT,EAApB,KAAqCkzL,KAAK,CAACnxL,MAAN,CAAawN,EAAb;AACtC,KAHD;AAIAutN,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,UAAIiqB,IAAI,CAACjqB,CAAD,EAAIijB,CAAJ,CAAR,EAAgBhG,GAAG,CAAC1gB,IAAJ,CAASyD,CAAT,EAAhB,KAAiCkzL,KAAK,CAACj0L,GAAN,CAAU,2BAAQe,CAAR,CAAV,EAAsB,CAAtB;AAClC,KAFD;;AAIA,aAASwzO,OAAT,CAAiBxzO,CAAjB,EAAoB;AAClB,YAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AAAA,YACMqK,CAAC,GAAG4f,IAAI,CAACjqB,CAAD,EAAIijB,CAAJ,CADd;AAAA,YAEMnjB,CAAC,GAAGozL,KAAK,CAAC9zL,GAAN,CAAUmQ,EAAV,CAFV;;AAIA,UAAIlF,CAAC,IAAIvK,CAAT,EAAY;AACVozL,QAAAA,KAAK,CAACnxL,MAAN,CAAawN,EAAb;AACA0N,QAAAA,GAAG,CAAC1gB,IAAJ,CAASyD,CAAT;AACD,OAHD,MAGO,IAAI,CAACqK,CAAD,IAAM,CAACvK,CAAX,EAAc;AACnBozL,QAAAA,KAAK,CAACj0L,GAAN,CAAUsQ,EAAV,EAAc,CAAd;AACA4uF,QAAAA,GAAG,CAAC5hG,IAAJ,CAASyD,CAAT;AACD,OAHM,MAGA,IAAIuzO,KAAK,IAAIlpO,CAAT,IAAc,CAACvK,CAAnB,EAAsB;AAC3B2T,QAAAA,GAAG,CAAClX,IAAJ,CAASyD,CAAT;AACD;AACF;;AAED88N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB4S,OAAvB;;AAEA,QAAIvwN,CAAC,CAACo6M,QAAF,EAAJ,EAAkB;AAChBkW,MAAAA,KAAK,GAAG,KAAR;AACAzW,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACkE,MAAlB,EAA0BwS,OAA1B;AACD;;AAED,QAAItgD,KAAK,CAACud,KAAN,GAAcmrB,EAAE,CAAC0I,cAArB,EAAqC1I,EAAE,CAACoG,QAAH,CAAY9uC,KAAK,CAACyU,KAAlB;AACrC,WAAO3hL,MAAP;AACD;;AA5CyB,CAA5B;AAgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS0wI,OAAT,CAAiB/2J,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD+2J,OAAO,CAAC+tE,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,iBAAa;AADH,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,gBAAY;AAJH,GAAD,EAKP;AACD,YAAQ,OADP;AAED,YAAQ;AAFP,GALO,EAQP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GARO;AALS,CAArB;AAmBA,wBAAS/tE,OAAT,EAAkB6tE,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ;AAAA,UACM9mL,MAAM,GAAGn3B,CAAC,CAACm3B,MADjB;AAAA,UAEMwxL,EAAE,GAAGmG,UAAU,CAAC33L,MAAD,EAASn3B,CAAC,CAAC2oN,EAAF,IAAQ,EAAjB,CAFrB;AAAA,UAGMxpO,KAAK,GAAG6gB,CAAC,CAAC7gB,KAAF,IAAW,IAHzB;AAAA,UAIM2xF,CAAC,GAAG63I,EAAE,CAAChwO,MAJb,CADkB,CAKG;;AAErB+mB,IAAAA,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf,CAPkB,CAOI;;AAEtBw9N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7B,YAAMu9E,MAAM,GAAGnjC,MAAM,CAACr0C,GAAP,CAAWkC,CAAC,IAAIA,CAAC,CAACjI,CAAD,CAAjB,CAAf;AAAA,YACMyzO,MAAM,GAAGl2J,MAAM,CAAC10E,MAAP,CAAc,CAACuF,CAAD,EAAI5K,CAAJ,KAAUnB,IAAI,CAACK,GAAL,CAAS0L,CAAT,EAAY5K,CAAC,CAAC5H,MAAd,CAAxB,EAA+C,CAA/C,CADf;AAEA,UAAIU,CAAC,GAAG,CAAR;AAAA,UACIiK,CADJ;AAAA,UAEI4C,CAFJ;AAAA,UAGIqF,CAHJ;;AAKA,aAAOlS,CAAC,GAAGm3O,MAAX,EAAmB,EAAEn3O,CAArB,EAAwB;AACtB6M,QAAAA,CAAC,GAAG,0BAAOnJ,CAAP,CAAJ;;AAEA,aAAKuG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB4C,UAAAA,CAAC,CAACyiO,EAAE,CAACrlO,CAAD,CAAH,CAAD,GAAW,CAACiI,CAAC,GAAG+uE,MAAM,CAACh3E,CAAD,CAAN,CAAUjK,CAAV,CAAL,KAAsB,IAAtB,GAA6B,IAA7B,GAAoCkS,CAA/C;AACD;;AAED,YAAIpM,KAAJ,EAAW;AACT+G,UAAAA,CAAC,CAAC/G,KAAD,CAAD,GAAW9F,CAAX;AACD;;AAEDqmB,QAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa4M,CAAb;AACD;AACF,KArBD;AAsBA,SAAK7J,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAA9B;AACA,QAAI7a,KAAJ,EAAWugB,GAAG,CAACq6M,QAAJ,CAAa56N,KAAb;AACX,WAAOugB,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AAnC0B,CAA7B;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS8H,IAAT,CAAc/zO,MAAd,EAAsB;AACpB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD+zO,IAAI,CAACjP,UAAL,GAAkB;AAChB,UAAQ,MADQ;AAEhB,cAAY;AACV,iBAAa;AADH,GAFI;AAKhB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,gBAAY;AAJH,GAAD,EAKP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,KAAD,EAAQ,OAAR;AALV,GALO;AALM,CAAlB;AAkBA,wBAASiP,IAAT,EAAenP,uBAAf,EAA0B;AACxBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ;AAAA,UACM9mL,MAAM,GAAGn3B,CAAC,CAACm3B,MADjB;AAAA,UAEMu5L,MAAM,GAAGv5L,MAAM,CAACr0C,GAAP,CAAWoqM,sBAAX,CAFf;AAAA,UAGMy7B,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,KAAD,EAAQ,OAAR,CAHnB;AAAA,UAIMhyN,CAAC,GAAGgyN,EAAE,CAAC,CAAD,CAJZ;AAAA,UAKMp9N,CAAC,GAAGo9N,EAAE,CAAC,CAAD,CALZ;AAAA,UAMMphO,CAAC,GAAG4vC,MAAM,CAACx+C,MANjB;AAOA+mB,IAAAA,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AACAw9N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7B,WAAK,IAAI1D,CAAC,GAAG,CAAR,EAAW6M,CAAhB,EAAmB7M,CAAC,GAAGkO,CAAvB,EAA0B,EAAElO,CAA5B,EAA+B;AAC7B6M,QAAAA,CAAC,GAAG,0BAAOnJ,CAAP,CAAJ;AACAmJ,QAAAA,CAAC,CAACyQ,CAAD,CAAD,GAAO+5N,MAAM,CAACr3O,CAAD,CAAb;AACA6M,QAAAA,CAAC,CAACqF,CAAD,CAAD,GAAO4rC,MAAM,CAAC99C,CAAD,CAAN,CAAU0D,CAAV,CAAP;AACA2iB,QAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa4M,CAAb;AACD;AACF,KAPD;AAQA,SAAK7J,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAA9B;AACA,WAAO0F,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AApBuB,CAA1B;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASgI,OAAT,CAAiBj0O,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDi0O,OAAO,CAACnP,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,gBAAY;AADF,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,MAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,UADP;AAED,YAAQ;AAFP,GARO;AALS,CAArB;AAkBA,wBAASmP,OAAT,EAAkBrP,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM3uM,IAAI,GAAGlL,CAAC,CAACjgB,IAAf;AAAA,UACM4oO,EAAE,GAAG3oN,CAAC,CAAC2oN,EADb;AAAA,UAEMn4N,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EAFZ;AAAA,UAGM9sF,IAAI,GAAGttH,CAAC,CAACk7M,QAAF,GAAarB,KAAK,CAAC38K,GAAnB,GAAyB1sC,GAAG,GAAGqpN,KAAK,CAACmE,MAAT,GAAkBnE,KAAK,CAACO,QAAN,CAAelvM,IAAI,CAACisB,MAApB,KAA+B0iL,KAAK,CAACO,QAAN,CAAeuO,EAAf,CAA/B,GAAoD9O,KAAK,CAACgE,OAA1D,GAAoEhE,KAAK,CAAC38K,GAHrI;;AAKA,QAAI1sC,GAAJ,EAAS;AACP;AACAqpN,MAAAA,KAAK,GAAGA,KAAK,CAACuE,WAAN,GAAoB3E,MAApB,CAA2B,IAA3B,CAAR;AACD;;AAED,QAAI,CAACz5M,CAAC,CAACk7M,QAAP,EAAiB;AACfrB,MAAAA,KAAK,CAACE,QAAN,CAAe4O,EAAf;AACD;;AAED,WAAO9O,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAIA,CAAC,CAAC4rO,EAAD,CAAD,GAAQz9M,IAAI,CAACnuB,CAAD,EAAIijB,CAAJ,CAAnC,CAAP;AACD;;AAjB0B,CAA7B;AAqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS4wN,QAAT,CAAkBl0O,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD,wBAASk0O,QAAT,EAAmBtP,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAZ;AAAA,UACM/sC,GAAG,GAAG/wK,CAAC,CAAC8wK,SADd;AAEA,QAAIzoL,IAAI,GAAG,KAAKhM,KAAhB;AAAA,QACI2H,GAAG,GAAGgc,CAAC,CAAClf,IAAF,GAASuH,IAAI,CAAC1P,MADxB;AAAA,QAEIqhB,GAFJ;AAAA,QAGIkhF,GAHJ;AAAA,QAIIn+F,CAJJ;;AAMA,QAAIiH,GAAG,GAAG,CAAV,EAAa;AACX;AACA,WAAKgW,GAAG,GAAG,EAAX,EAAe,EAAEhW,GAAF,IAAS,CAAxB,GAA4B;AAC1BgW,QAAAA,GAAG,CAAC1gB,IAAJ,CAASyD,CAAC,GAAG,0BAAOg0L,GAAG,CAAC/wK,CAAD,CAAV,CAAb;AACA3X,QAAAA,IAAI,CAAC/O,IAAL,CAAUyD,CAAV;AACD;;AAED2iB,MAAAA,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAAC1F,GAAJ,CAAQrhB,MAAR,GAAiB+mB,GAAG,CAAC0+M,WAAJ,CAAgB1+M,GAAG,CAACw9B,GAApB,EAAyBljC,GAAzB,CAA6BphB,MAA7B,CAAoCohB,GAApC,CAAjB,GAA4DA,GAAtE;AACD,KARD,MAQO;AACL;AACAkhF,MAAAA,GAAG,GAAG7yF,IAAI,CAAC3F,KAAL,CAAW,CAAX,EAAc,CAACsB,GAAf,CAAN;AACA0b,MAAAA,GAAG,CAACw7E,GAAJ,GAAUx7E,GAAG,CAACw7E,GAAJ,CAAQviG,MAAR,GAAiB+mB,GAAG,CAAC0+M,WAAJ,CAAgB1+M,GAAG,CAACg+M,GAApB,EAAyBxiI,GAAzB,CAA6BtiG,MAA7B,CAAoCsiG,GAApC,CAAjB,GAA4DA,GAAtE;AACA7yF,MAAAA,IAAI,GAAGA,IAAI,CAAC3F,KAAL,CAAW,CAACsB,GAAZ,CAAP;AACD;;AAED0b,IAAAA,GAAG,CAACyvC,MAAJ,GAAa,KAAK9yD,KAAL,GAAagM,IAA1B;AACA,WAAOqX,GAAP;AACD;;AA3B2B,CAA9B;AA+BA,MAAMmxN,OAAO,GAAG;AACdx0O,EAAAA,KAAK,EAAE,OADO;AAEdqtO,EAAAA,MAAM,EAAEA,eAFM;AAGd36N,EAAAA,IAAI,EAAEA,aAHQ;AAIdxP,EAAAA,GAAG,EAAEA,YAJS;AAKdE,EAAAA,GAAG,EAAEA;AALS,CAAhB;AAOA,MAAMqxO,KAAK,GAAG,EAAd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,MAAT,CAAgBr0O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACDq0O,MAAM,CAACvP,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY;AACV,eAAW;AADD,GAFM;AAKlB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,KADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,SADP;AAED,aAAS;AAFR,GARO,EAWP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAXO,EAeP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,eAAW,OAHV;AAID,cAAU,CAAC,OAAD,EAAU,MAAV,EAAkB,QAAlB,EAA4B,KAA5B,EAAmC,KAAnC;AAJT,GAfO,EAoBP;AACD,YAAQ,OADP;AAED,eAAW;AAFV,GApBO;AALQ,CAApB;;AA+BA,SAAStxF,QAAT,CAAkBlwH,CAAlB,EAAqB;AACnB,MAAI8wE,CAAC,GAAG9wE,CAAC,CAACsqB,MAAF,IAAYumM,OAAO,CAACx0O,KAA5B;AAAA,MACIkP,CADJ;;AAGA,MAAIslO,OAAO,CAAC//I,CAAD,CAAP,IAAc,IAAlB,EAAwB;AACtB,yBAAM,qCAAqCA,CAA3C;AACD,GAFD,MAEO,IAAIA,CAAC,KAAK+/I,OAAO,CAACx0O,KAAlB,EAAyB;AAC9BkP,IAAAA,CAAC,GAAGyU,CAAC,CAAC3jB,KAAF,KAAYkyH,SAAZ,GAAwBvuG,CAAC,CAAC3jB,KAA1B,GAAkC,CAAtC;AACA,WAAO,MAAMkP,CAAb;AACD,GAHM,MAGA;AACL,WAAOslO,OAAO,CAAC//I,CAAD,CAAd;AACD;AACF;;AAED,SAASkgJ,QAAT,CAAkBhxN,CAAlB,EAAqB;AACnB,QAAMhb,CAAC,GAAGgb,CAAC,CAAC6uG,KAAZ;AACA,SAAO9xH,CAAC,IAAIA,CAAC,GAAGiI,CAAC,CAACjI,CAAD,CAAJ,GAAU6uE,GAAvB;AACD;;AAED,wBAASmlK,MAAT,EAAiBzP,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAV;AAAA,QACImT,MAAM,GAAG/gG,QAAQ,CAAClwH,CAAD,CADrB;AAAA,QAEI6uG,KAAK,GAAGmiH,QAAQ,CAAChxN,CAAD,CAFpB;AAAA,QAGIkxN,KAAK,GAAG,4BAAalxN,CAAC,CAAC6uG,KAAf,CAHZ;AAAA,QAIIsiH,KAAK,GAAG,4BAAanxN,CAAC,CAAC1iB,GAAf,CAJZ;AAAA,QAKI8zO,MAAM,GAAG,CAACpxN,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CALb;AAAA,QAMIqP,MAAM,GAAG80B,WAAW,CAACxX,KAAK,CAAC1qK,MAAP,EAAenvC,CAAC,CAACmsN,OAAjB,EAA0BnsN,CAAC,CAAC1iB,GAA5B,EAAiC0iB,CAAC,CAACsxN,OAAnC,CANxB;AAAA,QAOIjjE,IAAI,GAAG,EAPX;AAAA,QAQI77E,IAAI,GAAG,KAAKn2F,KARhB;AAAA,QASIy0F,CAAC,GAAGyrH,MAAM,CAAC9N,MAAP,CAAc91M,MATtB;AAAA,QAUIqsH,KAVJ;AAAA,QAWI3oH,KAXJ;AAAA,QAYIk1O,KAZJ;AAAA,QAaIC,IAbJ;AAAA,QAcI1pM,CAdJ;AAAA,QAeIzuC,CAfJ;AAAA,QAgBIiK,CAhBJ;AAAA,QAiBI6H,CAjBJ;AAAA,QAkBI5D,CAlBJ;AAAA,QAmBIxK,CAnBJ;;AAqBA,SAAK+qC,CAAC,GAAG,CAAJ,EAAO38B,CAAC,GAAGoxM,MAAM,CAAC5jN,MAAvB,EAA+BmvC,CAAC,GAAG38B,CAAnC,EAAsC,EAAE28B,CAAxC,EAA2C;AACzCk9E,MAAAA,KAAK,GAAGu3F,MAAM,CAACz0K,CAAD,CAAd;AACAypM,MAAAA,KAAK,GAAGvsH,KAAK,CAACvhH,MAAd;AACApH,MAAAA,KAAK,GAAGuvE,GAAR,CAHyC,CAG5B;;AAEb,WAAKtoE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB,YAAI0hH,KAAK,CAAC1hH,CAAD,CAAL,IAAY,IAAhB,EAAsB;AACtBkuO,QAAAA,IAAI,GAAGj1B,MAAM,CAAC9N,MAAP,CAAcnrM,CAAd,CAAP;AACAvG,QAAAA,CAAC,GAAG;AACF00O,UAAAA,OAAO,EAAE;AADP,SAAJ;;AAIA,aAAKp4O,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgqO,KAAK,CAAC54O,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C0D,CAAC,CAACq0O,MAAM,CAAC/3O,CAAD,CAAP,CAAD,GAAek4O,KAAK,CAACl4O,CAAD,CAApB;;AAE1C0D,QAAAA,CAAC,CAACo0O,KAAD,CAAD,GAAWK,IAAX;AACAz0O,QAAAA,CAAC,CAACm0O,KAAD,CAAD,GAAWzqO,MAAM,CAACxC,KAAP,CAAa5H,KAAb,IAAsBA,KAAK,GAAG40O,MAAM,CAACjsH,KAAD,EAAQ6J,KAAR,CAApC,GAAqDxyH,KAAhE;AACAgyK,QAAAA,IAAI,CAAC/0K,IAAL,CAAU,0BAAOyD,CAAP,CAAV;AACD;AACF,KAxCiB,CAwChB;;;AAGF,QAAIsxK,IAAI,CAAC11K,MAAT,EAAiB+mB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAAC0+M,WAAJ,CAAgB1+M,GAAG,CAACw9B,GAApB,EAAyBljC,GAAzB,CAA6BphB,MAA7B,CAAoCy1K,IAApC,CAAV;AACjB,QAAI77E,IAAI,CAAC75F,MAAT,EAAiB+mB,GAAG,CAACw7E,GAAJ,GAAUx7E,GAAG,CAAC0+M,WAAJ,CAAgB1+M,GAAG,CAACg+M,GAApB,EAAyBxiI,GAAzB,CAA6BtiG,MAA7B,CAAoC45F,IAApC,CAAV;AACjB,SAAKn2F,KAAL,GAAagyK,IAAb;AACA,WAAO3uJ,GAAP;AACD;;AAhDyB,CAA5B;;AAoDA,SAAS2xN,WAAT,CAAqBhpO,IAArB,EAA2B8jO,OAA3B,EAAoC7uO,GAApC,EAAyCg0O,OAAzC,EAAkD;AAChD,MAAIn1O,GAAG,GAAG6I,CAAC,IAAIA,CAAC,CAACjI,CAAD,CAAhB;AAAA,MACIw/M,MAAM,GAAG,EADb;AAAA,MAEI9N,MAAM,GAAG6iC,OAAO,GAAGA,OAAO,CAAC5uO,KAAR,EAAH,GAAqB,EAFzC;AAAA,MAGIgvO,IAAI,GAAG,EAHX;AAAA,MAIIC,IAAI,GAAG,EAJX;AAAA,MAKIJ,KALJ;AAAA,MAMIK,IANJ;AAAA,MAOI5sH,KAPJ;AAAA,MAQI3rH,CARJ;AAAA,MASIiK,CATJ;AAAA,MAUIqT,CAVJ;AAAA,MAWIpP,CAXJ;AAAA,MAYIxK,CAZJ;;AAcA0xM,EAAAA,MAAM,CAACtxM,OAAP,CAAe,CAACwZ,CAAD,EAAItd,CAAJ,KAAUq4O,IAAI,CAAC/6N,CAAD,CAAJ,GAAUtd,CAAC,GAAG,CAAvC;;AAEA,OAAKA,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGc,IAAI,CAAC1P,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvC0D,IAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;AACAsd,IAAAA,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAP;AACAuG,IAAAA,CAAC,GAAGouO,IAAI,CAAC/6N,CAAD,CAAJ,KAAY+6N,IAAI,CAAC/6N,CAAD,CAAJ,GAAU83L,MAAM,CAACn1M,IAAP,CAAYqd,CAAZ,CAAtB,CAAJ;AACAi7N,IAAAA,IAAI,GAAG,CAACL,KAAK,GAAGpF,OAAO,GAAGA,OAAO,CAACrpO,GAAR,CAAY3G,GAAZ,CAAH,GAAsB20O,KAAtC,IAA+C,EAAtD;;AAEA,QAAI,EAAE9rH,KAAK,GAAG2sH,IAAI,CAACC,IAAD,CAAd,CAAJ,EAA2B;AACzB5sH,MAAAA,KAAK,GAAG2sH,IAAI,CAACC,IAAD,CAAJ,GAAa,EAArB;AACAr1B,MAAAA,MAAM,CAACjjN,IAAP,CAAY0rH,KAAZ;AACAA,MAAAA,KAAK,CAACvhH,MAAN,GAAe8tO,KAAf;AACD;;AAEDvsH,IAAAA,KAAK,CAAC1hH,CAAC,GAAG,CAAL,CAAL,GAAevG,CAAf;AACD;;AAEDw/M,EAAAA,MAAM,CAAC9N,MAAP,GAAgBA,MAAhB;AACA,SAAO8N,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AAEA,SAASs1B,aAAT,CAAuBn1O,MAAvB,EAA+B;AAC7BwuO,EAAAA,SAAS,CAAC/yO,IAAV,CAAe,IAAf,EAAqBuE,MAArB;AACD;;AACDm1O,aAAa,CAACrQ,UAAd,GAA2B;AACzB,UAAQ,eADiB;AAEzB,cAAY;AACV,gBAAY;AADF,GAFa;AAKzB,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAJO,EASP;AACD,YAAQ,KADP;AAED,YAAQ,MAFP;AAGD,aAAS,IAHR;AAID,cAAUwI;AAJT,GATO,EAcP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAdO,EAmBP;AACD,YAAQ,KADP;AAED,YAAQ;AAFP,GAnBO;AALe,CAA3B;AA6BA,wBAAS6H,aAAT,EAAwB3G,SAAxB,EAAmC;AACjC5oD,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMkS,IAAI,GAAG,IAAb;AAAA,UACMv7N,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EADZ;;AAGA,QAAIv7D,KAAJ,CAJkB,CAIP;;AAEX,QAAIktE,IAAI,CAAC1vO,KAAL,KAAemU,GAAG,IAAIqpN,KAAK,CAACO,QAAN,CAAe2R,IAAI,CAACxwD,OAApB,EAA6B,IAA7B,CAAtB,CAAJ,EAA+D;AAC7D1c,MAAAA,KAAK,GAAGktE,IAAI,CAAC1vO,KAAL,GAAamU,GAAG,GAAGu7N,IAAI,CAAC78J,IAAL,CAAUlvD,CAAV,CAAH,GAAkB,EAA1C;AACA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAIgvO,IAAI,CAAC/xN,GAAL,CAASjd,CAAT,CAA/B;AACD,KAHD,MAGO;AACL8hK,MAAAA,KAAK,GAAGktE,IAAI,CAAC1vO,KAAL,GAAa0vO,IAAI,CAAC1vO,KAAL,IAAc,KAAK6yE,IAAL,CAAUlvD,CAAV,CAAnC;AACA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAIgvO,IAAI,CAAC7wI,GAAL,CAASn+F,CAAT,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAIgvO,IAAI,CAAC/xN,GAAL,CAASjd,CAAT,CAA5B;AACD,KAbiB,CAahB;;;AAGFgvO,IAAAA,IAAI,CAAC3M,OAAL,GAhBkB,CAgBF;;AAEhBvF,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7B,4BAAOA,CAAP,EAAU8hK,KAAK,CAACktE,IAAI,CAACM,OAAL,CAAatvO,CAAb,CAAD,CAAL,CAAuB68N,KAAjC;AACD,KAFD;AAGA,WAAOC,KAAK,CAACJ,MAAN,CAAajpN,GAAb,EAAkBupN,QAAlB,CAA2B,KAAKz+C,QAAhC,CAAP;AACD,GAvBgC;;AAyBjC8jD,EAAAA,OAAO,GAAG;AACR,UAAMwN,IAAI,GAAG,KAAKzB,KAAlB;AAAA,UACM0B,IAAI,GAAG,KAAKzB,KADlB;AAEA,QAAI/xO,CAAJ,EAAOkO,CAAP;;AAEA,SAAKlO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG,KAAK8jO,KAArB,EAA4BhyO,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC,WAAKszO,SAAL,CAAeC,IAAI,CAACvzO,CAAD,CAAnB;AACAuzO,MAAAA,IAAI,CAACvzO,CAAD,CAAJ,GAAU,IAAV,CAFsC,CAEtB;AACjB;;AAED,SAAKA,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG,KAAK+jO,KAArB,EAA4BjyO,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC,WAAKszO,SAAL,CAAeE,IAAI,CAACxzO,CAAD,CAAnB;AACAwzO,MAAAA,IAAI,CAACxzO,CAAD,CAAJ,GAAU,IAAV,CAFsC,CAEtB;AACjB;;AAED,SAAKgyO,KAAL,GAAa,KAAKC,KAAL,GAAa,CAA1B,CAfQ,CAeqB;AAC9B;;AAzCgC,CAAnC;AA6CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASwG,GAAT,CAAap1O,MAAb,EAAqB;AACnB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDo1O,GAAG,CAACtQ,UAAJ,GAAiB;AACf,UAAQ,KADO;AAEf,cAAY;AACV,iBAAa;AADH,GAFG;AAKf,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,YADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GARO,EAYP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAhBO,EAoBP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GApBO,EAyBP;AACD,YAAQ,SADP;AAED,YAAQ,MAFP;AAGD,cAAU,CAAC,QAAD,EAAW,aAAX,CAHT;AAID,eAAW;AAJV,GAzBO,EA8BP;AACD,YAAQ,OADP;AAED,YAAQ;AAFP,GA9BO,EAiCP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAjCO,EAqCP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GArCO,EAyCP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,eAAW,CAAC,OAAD,EAAU,SAAV;AAJV,GAzCO;AALK,CAAjB;AAqDA,wBAASsQ,GAAT,EAAcxQ,uBAAd,EAAyB;AACvBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAZ;;AAEA,QAAI,CAAC,KAAK7hO,KAAN,IAAew9N,KAAK,CAAC74B,OAAN,EAAf,IAAkChhL,CAAC,CAACo6M,QAAF,EAAtC,EAAoD;AAClD,YAAMjrK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA/C;AAAA,YACMotJ,MAAM,GAAGwyB,SAAS,CAAC5/K,MAAD,EAASnvC,CAAC,CAACmsN,OAAX,EAAoBnsN,CAAC,CAAC6uG,KAAtB,CADxB;AAAA,YAEM3J,KAAK,GAAG,CAACllG,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CAFd;AAAA,YAGMy2B,SAAS,GAAG3jN,CAAC,CAAC2jN,SAHpB;AAAA,YAIMr5L,MAAM,GAAGtqB,CAAC,CAAC+xN,UAAF,GAAe,KAAf,GAAuB,KAJtC;AAAA,YAKMpJ,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,OAAD,EAAU,SAAV,CALnB;AAAA,YAMMllO,MAAM,GAAG,EANf;AAOA,UAAIgrM,MAAM,GAAGzuL,CAAC,CAAC0yL,MAAf;AAAA,UACIk8B,QAAQ,GAAG5uN,CAAC,CAACwlH,KAAF,IAAWxlH,CAAC,CAAC4uN,QAAb,IAAyB,EADxC;AAAA,UAEIC,QAAQ,GAAG7uN,CAAC,CAACwlH,KAAF,IAAWxlH,CAAC,CAAC6uN,QAAb,IAAyB,GAFxC;;AAIA,UAAIvkM,MAAM,KAAK,KAAX,IAAoBA,MAAM,KAAK,KAAnC,EAA0C;AACxC,6BAAM,6BAA6BA,MAAnC;AACD;;AAED,UAAItqB,CAAC,CAAC/d,OAAF,KAAc,QAAlB,EAA4B;AAC1B,YAAI,CAACwsM,MAAL,EAAaA,MAAM,GAAG,sBAAOt/I,MAAP,EAAenvC,CAAC,CAAC6uG,KAAjB,CAAT;AACb+/G,QAAAA,QAAQ,GAAGC,QAAQ,GAAG7uN,CAAC,CAACwlH,KAAF,IAAWqpG,QAAjC;AACD;;AAEDtyB,MAAAA,MAAM,CAACp/M,OAAP,CAAe2qC,CAAC,IAAI;AAClB,cAAMkqM,OAAO,GAAG,+BAAUlqM,CAAV,EAAa67L,SAAb,EAAwBr5L,MAAxB,CAAhB;AAAA,cACMp7B,KAAK,GAAG8Q,CAAC,CAAC2oK,MAAF,GAAW7gJ,CAAC,CAACnvC,MAAb,GAAsB,CADpC;AAAA,cAEMs5O,KAAK,GAAGxjC,MAAM,IAAI,sBAAO3mK,CAAP,CAFxB;AAGA,yCAAYkqM,OAAZ,EAAqBC,KAArB,EAA4BrD,QAA5B,EAAsCC,QAAtC,EAAgD1xO,OAAhD,CAAwDoO,CAAC,IAAI;AAC3D,gBAAMxO,CAAC,GAAG,EAAV;;AAEA,eAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6rH,KAAK,CAACvsH,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrC0D,YAAAA,CAAC,CAACmoH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAcyuC,CAAC,CAAC3H,IAAF,CAAO9mC,CAAP,CAAd;AACD;;AAED0D,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWp9N,CAAC,CAAC,CAAD,CAAZ;AACAxO,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWp9N,CAAC,CAAC,CAAD,CAAD,GAAO2D,KAAlB;AACAzL,UAAAA,MAAM,CAACnK,IAAP,CAAY,0BAAOyD,CAAP,CAAZ;AACD,SAVD;AAWD,OAfD;AAgBA,UAAI,KAAKV,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,WAAKA,KAAL,GAAaqjB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAACyvC,MAAJ,GAAa1rD,MAApC;AACD;;AAED,WAAOic,GAAP;AACD;;AA9CsB,CAAzB;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASwyN,GAAT,CAAax1O,MAAb,EAAqB;AACnBg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0Bg6O,QAA1B,EAAoCz1O,MAApC;AACD;;AACD,wBAASw1O,GAAT,EAAcxX,sBAAd;;AAEA,SAASyX,QAAT,CAAkBnyN,CAAlB,EAAqB;AACnB,SAAO,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAf,GAA8B,KAAK/9N,KAAnC,GAA2C,mBAAI2jB,CAAC,CAACm3B,MAAN,EAAcn3B,CAAC,CAACkxL,IAAhB,CAAlD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASkhC,IAAT,CAAc11O,MAAd,EAAsB;AACpB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;;AACA,OAAKygO,QAAL,GAAgB,IAAhB;AACD;;AACD,wBAASiV,IAAT,EAAe9Q,uBAAf,EAA0B;AACxBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAjB;;AAEA,QAAI,KAAKQ,QAAT,EAAmB;AACjB;AACA,aAAOp6M,MAAM,CAAC,IAAD,EAAO82M,KAAP,EAAc,KAAKsD,QAAnB,CAAb;AACD;;AAED,QAAIviM,IAAI,CAAC5a,CAAD,CAAR,EAAa,OAAO65M,KAAK,CAAC6B,eAAb;;AAEb,QAAI17M,CAAC,CAACvc,MAAN,EAAc;AACZ;AACA,aAAOsf,MAAM,CAAC,IAAD,EAAO82M,KAAP,EAAclB,EAAE,CAACp9K,KAAH,CAASv7B,CAAC,CAACvc,MAAX,EAAmBuc,CAAC,CAAC47F,MAArB,CAAd,CAAb;AACD,KAHD,MAGO,IAAI57F,CAAC,CAACu/M,KAAN,EAAa;AAClB;AACA,YAAM5hM,CAAC,GAAGg7L,EAAE,CAAC7oC,OAAH,CAAW9vK,CAAC,CAACy1F,GAAb,EAAkBz1F,CAAC,CAAC47F,MAApB,EAA4BtzG,IAA5B,CAAiCqV,GAAG,IAAI;AAChD,aAAKw/M,QAAL,GAAgB,qBAAMx/M,GAAG,CAACtV,IAAV,CAAhB;AACA,eAAOswN,EAAE,IAAIA,EAAE,CAACiD,KAAH,CAAS,IAAT,CAAb;AACD,OAHS,CAAV;AAIA,aAAO;AACL2D,QAAAA,KAAK,EAAE5hM;AADF,OAAP;AAGD,KATM,MASA;AACL;AACA,aAAOg7L,EAAE,CAAC7oC,OAAH,CAAW9vK,CAAC,CAACy1F,GAAb,EAAkBz1F,CAAC,CAAC47F,MAApB,EAA4BtzG,IAA5B,CAAiCqV,GAAG,IAAIoF,MAAM,CAAC,IAAD,EAAO82M,KAAP,EAAc,qBAAMl8M,GAAG,CAACtV,IAAV,CAAd,CAA9C,CAAP;AACD;AACF;;AA3BuB,CAA1B;;AA+BA,SAASuyB,IAAT,CAAc5a,CAAd,EAAiB;AACf,SAAOA,CAAC,CAACo6M,QAAF,CAAW,OAAX,KAAuB,EAAEp6M,CAAC,CAACo6M,QAAF,CAAW,QAAX,KAAwBp6M,CAAC,CAACo6M,QAAF,CAAW,KAAX,CAAxB,IAA6Cp6M,CAAC,CAACo6M,QAAF,CAAW,QAAX,CAA/C,CAA9B;AACD;;AAED,SAASr3M,MAAT,CAAgBiV,EAAhB,EAAoB6hM,KAApB,EAA2BxxN,IAA3B,EAAiC;AAC/BA,EAAAA,IAAI,CAAClL,OAAL,CAAa87N,oBAAb;AACA,QAAMv5M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACqE,SAAN,GAAkBrE,KAAK,CAACoE,SAAnC,CAAZ;AACAv+M,EAAAA,GAAG,CAACw7E,GAAJ,GAAUljE,EAAE,CAAC37B,KAAb;AACA27B,EAAAA,EAAE,CAAC37B,KAAH,GAAWqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAAJ,GAAU3R,IAAlC;AACA2vB,EAAAA,EAAE,CAACmlM,QAAH,GAAc,IAAd;AACA,MAAIz9M,GAAG,CAACw7E,GAAJ,CAAQviG,MAAZ,EAAoB+mB,GAAG,CAACglL,KAAJ,CAAU,IAAV;AACpB,SAAOhlL,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS2yN,MAAT,CAAgB31O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD21O,MAAM,CAAC7Q,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY;AACV,gBAAY;AADF,GAFM;AAKlB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,cAAU,CAAC;AACT,cAAQ,MADC;AAET,cAAQ,MAFC;AAGT,kBAAY;AAHH,KAAD,EAIP;AACD,cAAQ,KADP;AAED,cAAQ,OAFP;AAGD,kBAAY;AAHX,KAJO;AAHD,GAAD,EAYP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAZO,EAgBP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,gBAAY;AAJX,GAhBO,EAqBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GArBO,EAyBP;AACD,YAAQ,SADP;AAED,eAAW;AAFV,GAzBO;AALQ,CAApB;AAmCA,wBAAS6Q,MAAT,EAAiB/Q,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMr+M,IAAI,GAAGwE,CAAC,CAACm3B,MAAf;AAAA,UACMh4C,KAAK,GAAG6gB,CAAC,CAAC7gB,KADhB;AAAA,UAEMsE,MAAM,GAAGuc,CAAC,CAACvc,MAFjB;AAAA,UAGMinC,YAAY,GAAG1qB,CAAC,CAACopK,OAAF,IAAa,IAAb,GAAoB,IAApB,GAA2BppK,CAAC,CAACopK,OAHlD;AAAA,UAIMrjK,KAAK,GAAG/F,CAAC,CAACo6M,QAAF,EAJd;AAAA,UAKM7yN,CAAC,GAAGiU,IAAI,CAAC7iB,MALf;;AAOA,QAAI20I,IAAI,GAAGvnH,KAAK,GAAG8zM,KAAK,CAACmE,MAAT,GAAkBnE,KAAK,CAAC38K,GAAxC;AAAA,QACIx9B,GAAG,GAAGm6M,KADV;AAAA,QAEI8O,EAAE,GAAG3oN,CAAC,CAAC2oN,EAFX;AAAA,QAGI3sO,GAHJ;AAAA,QAII80F,CAJJ;AAAA,QAKI+7I,IALJ;;AAOA,QAAIppO,MAAJ,EAAY;AACVqtF,MAAAA,CAAC,GAAGrtF,MAAM,CAAC9K,MAAX;;AAEA,UAAI4O,CAAC,GAAG,CAAJ,IAAS,CAACohO,EAAd,EAAkB;AAChB,6BAAM,sDAAN;AACD;;AAED,UAAIA,EAAE,IAAIA,EAAE,CAAChwO,MAAH,KAAc4O,CAAC,GAAGupF,CAA5B,EAA+B;AAC7B,6BAAM,oDAAN;AACD;;AAED63I,MAAAA,EAAE,GAAGA,EAAE,IAAIllO,MAAM,CAACX,GAAP,CAAWoqM,sBAAX,CAAX;;AAEAlxM,MAAAA,GAAG,GAAG,UAAUe,CAAV,EAAa;AACjB,aAAK,IAAI1D,CAAC,GAAG,CAAR,EAAWsd,CAAC,GAAG,CAAf,EAAkBrT,CAAlB,EAAqBiI,CAA1B,EAA6BlS,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCkS,UAAAA,CAAC,GAAGpM,KAAK,CAAChD,GAAN,CAAUqf,IAAI,CAACniB,CAAD,CAAJ,CAAQ0D,CAAR,CAAV,CAAJ;AACA,cAAIwO,CAAC,IAAI,IAAT,EAAe,KAAKjI,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAAF,EAAK,EAAEqT,CAA1B,EAA6B5Z,CAAC,CAAC4rO,EAAE,CAAChyN,CAAD,CAAH,CAAD,GAAW+zB,YAAX,CAA5C,KAAyE,KAAKpnC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAAF,EAAK,EAAEqT,CAA1B,EAA6B5Z,CAAC,CAAC4rO,EAAE,CAAChyN,CAAD,CAAH,CAAD,GAAWlT,MAAM,CAACH,CAAD,CAAN,CAAUiI,CAAV,CAAX;AACvG;AACF,OALD;AAMD,KAnBD,MAmBO;AACL,UAAI,CAACo9N,EAAL,EAAS;AACP,6BAAM,6BAAN;AACD;;AAED3sO,MAAAA,GAAG,GAAG,UAAUe,CAAV,EAAa;AACjB,aAAK,IAAI1D,CAAC,GAAG,CAAR,EAAWkS,CAAhB,EAAmBlS,CAAC,GAAGkO,CAAvB,EAA0B,EAAElO,CAA5B,EAA+B;AAC7BkS,UAAAA,CAAC,GAAGpM,KAAK,CAAChD,GAAN,CAAUqf,IAAI,CAACniB,CAAD,CAAJ,CAAQ0D,CAAR,CAAV,CAAJ;AACAA,UAAAA,CAAC,CAAC4rO,EAAE,CAACtvO,CAAD,CAAH,CAAD,GAAWkS,CAAC,IAAI,IAAL,GAAYm/B,YAAZ,GAA2Bn/B,CAAtC;AACD;AACF,OALD;AAMD;;AAED,QAAIwa,KAAJ,EAAW;AACTrG,MAAAA,GAAG,GAAGm6M,KAAK,CAACJ,MAAN,CAAa,IAAb,CAAN;AACD,KAFD,MAEO;AACLoT,MAAAA,IAAI,GAAGrxN,IAAI,CAACnB,IAAL,CAAU1D,CAAC,IAAIkjN,KAAK,CAACO,QAAN,CAAezjN,CAAC,CAACwgC,MAAjB,CAAf,CAAP;AACAm2F,MAAAA,IAAI,IAAIu/F,IAAI,GAAGhT,KAAK,CAAC8D,GAAT,GAAe,CAA3B;AACD;;AAED9D,IAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBtxI,GAAlB;AACA,WAAO0jB,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AAzDyB,CAA5B;AA6DA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS2J,WAAT,CAAqB51O,MAArB,EAA6B;AAC3Bg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0Bo6O,QAA1B,EAAoC71O,MAApC;AACD;;AACD,wBAAS41O,WAAT,EAAsB5X,sBAAtB;;AAEA,SAAS6X,QAAT,CAAkBvyN,CAAlB,EAAqB;AACnB,MAAI,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAnB,EAAiC;AAC/B,WAAO,KAAK/9N,KAAZ;AACD;;AAED,QAAMmvD,GAAG,GAAGxrC,CAAC,CAACwyN,OAAd;AAAA,QACMjrO,CAAC,GAAGikD,GAAG,CAAC7yD,MADd;AAEA,MAAI4G,GAAG,GAAG,CAAC4B,QAAX;AAAA,MACI1B,GAAG,GAAG,CAAC0B,QADX;AAAA,MAEI9H,CAFJ;AAAA,MAGItB,CAHJ;;AAKA,OAAKsB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBtB,IAAAA,CAAC,GAAGyzD,GAAG,CAACnyD,CAAD,CAAP;AACA,QAAItB,CAAC,CAAC,CAAD,CAAD,GAAOwH,GAAX,EAAgBA,GAAG,GAAGxH,CAAC,CAAC,CAAD,CAAP;AAChB,QAAIA,CAAC,CAAC,CAAD,CAAD,GAAO0H,GAAX,EAAgBA,GAAG,GAAG1H,CAAC,CAAC,CAAD,CAAP;AACjB;;AAED,SAAO,CAACwH,GAAD,EAAME,GAAN,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASgzO,WAAT,CAAqB/1O,MAArB,EAA6B;AAC3Bg+N,yBAASviO,IAAT,CAAc,IAAd,EAAoB,IAApB,EAA0Bu6O,QAA1B,EAAoCh2O,MAApC;AACD;;AACD,wBAAS+1O,WAAT,EAAsB/X,sBAAtB;;AAEA,SAASgY,QAAT,CAAkB1yN,CAAlB,EAAqB;AACnB,SAAO,KAAK3jB,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAf,GAA8B,KAAK/9N,KAAnC,GAA2C2jB,CAAC,CAACvc,MAAF,CAASmC,MAAT,CAAgB,CAACyC,IAAD,EAAO2X,CAAP,KAAa3X,IAAI,CAACzP,MAAL,CAAYonB,CAAZ,CAA7B,EAA6C,EAA7C,CAAlD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS2yN,MAAT,CAAgBj2O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASi2O,MAAT,EAAiBrR,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,SAAKO,QAAL,CAAcp6M,CAAC,CAACo6M,QAAF,EAAd;AACA,SAAK/9N,KAAL,GAAa2jB,CAAb;AACA,WAAO65M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAP,CAHkB,CAGoC;AACvD;;AALyB,CAA5B;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS0U,KAAT,CAAel2O,MAAf,EAAuB;AACrBwuO,EAAAA,SAAS,CAAC/yO,IAAV,CAAe,IAAf,EAAqBuE,MAArB;AACD;;AACDk2O,KAAK,CAACpR,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFK;AAMjB,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GARO,EAYP;AACD,YAAQ,IADP;AAED,YAAQ,MAFP;AAGD,cAAUwI,iBAHT;AAID,eAAW;AAJV,GAZO,EAiBP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAjBO,EAqBP;AACD,YAAQ,KADP;AAED,YAAQ;AAFP,GArBO;AANO,CAAnB;AAgCA,wBAAS4I,KAAT,EAAgB1H,SAAhB,EAA2B;AACzB2H,EAAAA,UAAU,EAAE3H,SAAS,CAACzxO,SAAV,CAAoB6oL,SADP;;AAGzBA,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,WAAO,KAAKgZ,UAAL,CAAgBC,eAAe,CAAC9yN,CAAD,EAAI65M,KAAJ,CAA/B,EAA2CA,KAA3C,CAAP;AACD;;AALwB,CAA3B,GAOI;AACJ;AACA;;AAEA,SAASiZ,eAAT,CAAyB9yN,CAAzB,EAA4B65M,KAA5B,EAAmC;AACjC,QAAMv8N,GAAG,GAAG0iB,CAAC,CAAC6uG,KAAd;AAAA,QACMxyH,KAAK,GAAG2jB,CAAC,CAAC3jB,KADhB;AAAA,QAEM27B,EAAE,GAAG,CAAChY,CAAC,CAACgY,EAAF,KAAS,OAAT,GAAmB,WAAnB,GAAiChY,CAAC,CAACgY,EAApC,KAA2C,KAFtD;AAAA,QAGMmf,MAAM,GAAG,8BAAe75C,GAAf,EAAoB1E,MAApB,CAA2B,8BAAeyD,KAAf,CAA3B,CAHf;AAAA,QAIMmf,IAAI,GAAGu3N,SAAS,CAACz1O,GAAD,EAAM0iB,CAAC,CAACqvD,KAAF,IAAW,CAAjB,EAAoBwqJ,KAApB,CAJtB,CADiC,CAKiB;AAClD;;AAEA,MAAIA,KAAK,CAAC74B,OAAN,EAAJ,EAAqBhhL,CAAC,CAAChkB,GAAF,CAAM,WAAN,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B;AACrB,SAAO;AACLsB,IAAAA,GAAG,EAAE0iB,CAAC,CAAC1iB,GADF;AAEL6uO,IAAAA,OAAO,EAAEnsN,CAAC,CAACmsN,OAFN;AAGLn/G,IAAAA,GAAG,EAAExxG,IAAI,CAAC1Y,GAAL,CAAS,MAAMk1B,EAAf,CAHA;AAILmf,IAAAA,MAAM,EAAE37B,IAAI,CAAC1Y,GAAL,CAAS6T,CAAC,IAAIxa,GAAG,CAACwa,CAAD,EAAIrZ,GAAJ,EAASjB,KAAT,EAAgB86C,MAAhB,CAAjB,CAJH;AAKLwxL,IAAAA,EAAE,EAAEntN,IAAI,CAAC1Y,GAAL,CAAS6T,CAAC,IAAIA,CAAC,GAAG,EAAlB,CALC;AAMLyjN,IAAAA,QAAQ,EAAEp6M,CAAC,CAACo6M,QAAF,CAAW12F,IAAX,CAAgB1jH,CAAhB;AANL,GAAP;AAQD,EAAC;AACF;;;AAGA,SAAS7jB,GAAT,CAAawa,CAAb,EAAgBrZ,GAAhB,EAAqBjB,KAArB,EAA4B86C,MAA5B,EAAoC;AAClC,SAAO,wBAASjxC,CAAC,IAAI5I,GAAG,CAAC4I,CAAD,CAAH,KAAWyQ,CAAX,GAAeta,KAAK,CAAC6J,CAAD,CAApB,GAA0B0lE,GAAxC,EAA6Cz0B,MAA7C,EAAqDxgC,CAAC,GAAG,EAAzD,CAAP;AACD,EAAC;;;AAGF,SAASo8N,SAAT,CAAmBz1O,GAAnB,EAAwB+xE,KAAxB,EAA+BwqJ,KAA/B,EAAsC;AACpC,QAAM/2N,GAAG,GAAG,EAAZ;AAAA,QACM4W,IAAI,GAAG,EADb;AAEAmgN,EAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7B,UAAM4Z,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAb;;AAEA,QAAI,CAAC+F,GAAG,CAAC6T,CAAD,CAAR,EAAa;AACX7T,MAAAA,GAAG,CAAC6T,CAAD,CAAH,GAAS,CAAT;AACA+C,MAAAA,IAAI,CAACpgB,IAAL,CAAUqd,CAAV;AACD;AACF,GAPD;AAQA+C,EAAAA,IAAI,CAACrW,IAAL,CAAUovM,mBAAV;AACA,SAAOpjI,KAAK,GAAG31D,IAAI,CAAChX,KAAL,CAAW,CAAX,EAAc2sE,KAAd,CAAH,GAA0B31D,IAAtC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASs5N,QAAT,CAAkBt2O,MAAlB,EAA0B;AACxB8yO,EAAAA,KAAK,CAACr3O,IAAN,CAAW,IAAX,EAAiBuE,MAAjB;AACD;;AACD,wBAASs2O,QAAT,EAAmBxD,KAAnB,EAA0B;AACxBltD,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM8V,IAAI,GAAG3vN,CAAC,CAAC4vN,OAAf;AAAA,UACM/gH,KAAK,GAAG7uG,CAAC,CAAC6uG,KADhB;AAAA,UAEM+gH,OAAO,GAAG7yO,CAAC,IAAI,KAAK6yO,OAAL,CAAa,2BAAQ7yO,CAAR,CAAb,EAAyB4yO,IAAzB,EAA+B9V,KAA/B,EAAsC98N,CAAtC,CAFrB;;AAIA,QAAIijB,CAAC,CAACo6M,QAAF,CAAW,OAAX,KAAuBvrG,KAAK,IAAIgrG,KAAK,CAACO,QAAN,CAAe,8BAAevrG,KAAf,CAAf,CAApC,EAA2E;AACzE,2BAAM,+CAAN;AACD;;AAED,SAAKmhH,WAAL,GATkB,CASE;;AAEpB,QAAInhH,KAAJ,EAAW;AACTgrG,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B,cAAM+yO,EAAE,GAAGF,OAAO,CAAC7yO,CAAD,CAAlB;AACA8xH,QAAAA,KAAK,CAAC9xH,CAAD,CAAL,CAASI,OAAT,CAAiB6iB,CAAC,IAAI8vN,EAAE,CAACt/N,GAAH,CAAOwP,CAAP,CAAtB;AACD,OAHD;AAIA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,cAAM+yO,EAAE,GAAGF,OAAO,CAAC7yO,CAAD,CAAlB;AACA8xH,QAAAA,KAAK,CAAC9xH,CAAD,CAAL,CAASI,OAAT,CAAiB6iB,CAAC,IAAI8vN,EAAE,CAAC91N,GAAH,CAAO,0BAAOgG,CAAP,CAAP,CAAtB;AACD,OAHD;AAIA65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,cAAM+yO,EAAE,GAAGF,OAAO,CAAC7yO,CAAD,CAAlB;AACA8xH,QAAAA,KAAK,CAAC9xH,CAAD,CAAL,CAASI,OAAT,CAAiB6iB,CAAC,IAAI8vN,EAAE,CAAC50I,GAAH,CAAOl7E,CAAP,CAAtB;AACD,OAHD;AAID,KAbD,MAaO;AACL65M,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI6yO,OAAO,CAAC7yO,CAAD,CAAP,CAAWyT,GAAX,CAAezT,CAAf,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI6yO,OAAO,CAAC7yO,CAAD,CAAP,CAAWid,GAAX,CAAejd,CAAf,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI6yO,OAAO,CAAC7yO,CAAD,CAAP,CAAWm+F,GAAX,CAAen+F,CAAf,CAA5B;AACD;;AAED,QAAI88N,KAAK,CAACn1B,KAAN,EAAJ,EAAmB;AACjBm1B,MAAAA,KAAK,CAACkF,QAAN,CAAe,MAAM,KAAKr6B,KAAL,EAArB;AACD;;AAED,WAAOm1B,KAAP;AACD;;AApCuB,CAA1B;AAwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASoZ,OAAT,CAAiBv2O,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDu2O,OAAO,CAACzR,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFO;AAMnB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAJO;AANS,CAArB;AAiBA,wBAASyR,OAAT,EAAkB3R,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ;AAAA,UACM9mL,MAAM,GAAGn3B,CAAC,CAACm3B,MADjB;AAAA,UAEMwxL,EAAE,GAAGmG,UAAU,CAAC9uN,CAAC,CAACm3B,MAAH,EAAWn3B,CAAC,CAAC2oN,EAAF,IAAQ,EAAnB,CAFrB;AAAA,UAGMzP,MAAM,GAAG/hL,MAAM,GAAG,CAACt6C,CAAD,EAAIE,CAAJ,KAAUm2O,OAAO,CAACr2O,CAAD,EAAIE,CAAJ,EAAOo6C,MAAP,EAAewxL,EAAf,CAApB,GAAyCxP,sBAH9D;AAIA,QAAIga,GAAJ;;AAEA,QAAI,KAAK92O,KAAT,EAAgB;AACd82O,MAAAA,GAAG,GAAG,KAAK92O,KAAX;AACD,KAFD,MAEO;AACLw9N,MAAAA,KAAK,GAAGA,KAAK,CAAC2E,MAAN,EAAR;AACA2U,MAAAA,GAAG,GAAG,KAAK92O,KAAL,GAAa,EAAnB;AACD;;AAEDw9N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,YAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AACA2iB,MAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAa65O,GAAG,CAAC7mO,EAAD,CAAhB;AACA6mO,MAAAA,GAAG,CAAC7mO,EAAD,CAAH,GAAU,IAAV;AACD,KAJD;AAKAutN,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,YAAMq2O,EAAE,GAAGla,MAAM,CAACn8N,CAAD,EAAI,0BAAO,EAAP,CAAJ,CAAjB;AACAo2O,MAAAA,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAH,GAAkBq2O,EAAlB;AACA1zN,MAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa85O,EAAb;AACD,KAJD;AAKAvZ,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B2iB,MAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAa4/N,MAAM,CAACn8N,CAAD,EAAIo2O,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAP,CAAnB;AACD,KAFD;AAGA,WAAO2iB,GAAP;AACD;;AA7B0B,CAA7B;;AAiCA,SAASwzN,OAAT,CAAiBr2O,CAAjB,EAAoBE,CAApB,EAAuBo6C,MAAvB,EAA+BwxL,EAA/B,EAAmC;AACjC,OAAK,IAAItvO,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4vC,MAAM,CAACx+C,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7C0D,IAAAA,CAAC,CAAC4rO,EAAE,CAACtvO,CAAD,CAAH,CAAD,GAAW89C,MAAM,CAAC99C,CAAD,CAAN,CAAUwD,CAAV,CAAX;AACD;;AAED,SAAOE,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASs2O,KAAT,CAAe32O,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAAS22O,KAAT,EAAgB/R,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,SAAKx9N,KAAL,GAAa2jB,CAAC,CAAC3jB,KAAf;AACA,WAAO2jB,CAAC,CAACo6M,QAAF,CAAW,OAAX,IAAsBP,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAtB,GAAsErE,KAAK,CAAC6B,eAAnF;AACD;;AAJwB,CAA3B;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS4X,QAAT,CAAkB52O,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD42O,QAAQ,CAAC9R,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFQ;AAMpB,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GARO,EAYP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,eAAW,CAAC,MAAD,EAAS,OAAT;AAJV,GAhBO;AANU,CAAtB;AA6BA,MAAM+R,SAAS,GAAG,KAAlB;AACA,wBAASD,QAAT,EAAmBhS,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAZ;AAAA,UACMyK,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,MAAD,EAAS,OAAT,CADnB;;AAGA,QAAI,KAAKtsO,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAf,IAA+B,CAACP,KAAK,CAAC74B,OAAN,EAApC,EAAqD;AACnDthL,MAAAA,GAAG,CAACyvC,MAAJ,GAAa,KAAK9yD,KAAlB;AACA,aAAOqjB,GAAP;AACD;;AAED,UAAMyvC,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA/C;AAAA,UACMotJ,MAAM,GAAGwyB,SAAS,CAAC5/K,MAAD,EAASnvC,CAAC,CAACmsN,OAAX,EAAoBnsN,CAAC,CAAC6uG,KAAtB,CADxB;AAAA,UAEM3J,KAAK,GAAG,CAACllG,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CAFd;AAAA,UAGMzpM,MAAM,GAAG,EAHf;AAAA,UAIMsQ,IAAI,GAAGiM,CAAC,CAACjM,IAAF,IAAU,IAJvB;AAAA,UAKM4pB,CAAC,GAAG3d,CAAC,CAAC+nD,KAAF,IAAW,oBAAMh0D,IAAI,GAAG,CAAb,EAAgB,IAAIw/N,SAApB,EAA+Bx/N,IAA/B,CALrB;AAAA,UAMMxM,CAAC,GAAGo2B,CAAC,CAAChlC,MANZ;AAOA4jN,IAAAA,MAAM,CAACp/M,OAAP,CAAe2qC,CAAC,IAAI;AAClB,YAAMipD,CAAC,GAAG,+BAAUjpD,CAAV,EAAanK,CAAb,CAAV;;AAEA,WAAK,IAAItkC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,cAAM0D,CAAC,GAAG,EAAV;;AAEA,aAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6rH,KAAK,CAACvsH,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrC0D,UAAAA,CAAC,CAACmoH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAcyuC,CAAC,CAAC3H,IAAF,CAAO9mC,CAAP,CAAd;AACD;;AAED0D,QAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhrM,CAAC,CAACtkC,CAAD,CAAZ;AACA0D,QAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAW53I,CAAC,CAAC13F,CAAD,CAAZ;AACAoK,QAAAA,MAAM,CAACnK,IAAP,CAAY,0BAAOyD,CAAP,CAAZ;AACD;AACF,KAdD;AAeA,QAAI,KAAKV,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,SAAKA,KAAL,GAAaqjB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAACyvC,MAAJ,GAAa1rD,MAApC;AACA,WAAOic,GAAP;AACD;;AAnC2B,CAA9B;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS8zN,KAAT,CAAe92O,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAAS82O,KAAT,EAAgBlS,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIn6M,GAAJ,EAASyzN,GAAT;;AAEA,QAAI,KAAK92O,KAAT,EAAgB;AACd82O,MAAAA,GAAG,GAAG,KAAK92O,KAAX;AACD,KAFD,MAEO;AACLqjB,MAAAA,GAAG,GAAGm6M,KAAK,GAAGA,KAAK,CAAC2E,MAAN,EAAd;AACA2U,MAAAA,GAAG,GAAG,KAAK92O,KAAL,GAAa,EAAnB;AACD;;AAED,QAAI2jB,CAAC,CAACk5M,MAAN,EAAc;AACZx5M,MAAAA,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAN;AACApE,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,cAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;AACA2iB,QAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAa65O,GAAG,CAAC7mO,EAAD,CAAhB;AACA6mO,QAAAA,GAAG,CAAC7mO,EAAD,CAAH,GAAU,IAAV;AACD,OAJD;AAKAutN,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,cAAMq2O,EAAE,GAAG,0BAAOr2O,CAAP,CAAX;AACAo2O,QAAAA,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAH,GAAkBq2O,EAAlB;AACA1zN,QAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa85O,EAAb;AACD,OAJD;AAKAvZ,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B,cAAMq2O,EAAE,GAAGD,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAd;;AAEA,aAAK,MAAM4Z,CAAX,IAAgB5Z,CAAhB,EAAmB;AACjBq2O,UAAAA,EAAE,CAACz8N,CAAD,CAAF,GAAQ5Z,CAAC,CAAC4Z,CAAD,CAAT,CADiB,CACH;AACd;;AAEA+I,UAAAA,GAAG,CAACq6M,QAAJ,CAAapjN,CAAb;AACD;;AAED+I,QAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAa85O,EAAb;AACD,OAXD;AAYD;;AAED,WAAO1zN,GAAP;AACD;;AAtCwB,CAA3B;AA0CA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS+zN,MAAT,CAAgB/2O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;;AACA,OAAK00E,KAAL,GAAa,CAAb;AACD;;AACDqiK,MAAM,CAACjS,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY,EAFM;AAGlB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,eAAW;AAHF,GAAD;AAHQ,CAApB;AASA,wBAASiS,MAAT,EAAiBnS,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAAZ;AAAA,UACMztN,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,CAAW,MAAX,CADZ;AAAA,UAEMp2N,GAAG,GAAGgc,CAAC,CAAClf,IAFd;AAAA,UAGMgC,GAAG,GAAG,KAAKzG,KAAL,CAAWuJ,MAAX,CAAkB,CAACkrF,CAAD,EAAI/zF,CAAJ,MAAW+zF,CAAC,CAAC,2BAAQ/zF,CAAR,CAAD,CAAD,GAAgB,CAAhB,EAAmB+zF,CAA9B,CAAlB,EAAoD,EAApD,CAHZ;;AAKA,QAAInzE,GAAG,GAAG,KAAKthB,KAAf;AAAA,QACIwrO,GAAG,GAAG,KAAKz2J,KADf;AAAA,QAEIsiK,GAAG,GAAG,CAFV,CANkB,CAQL;;AAEb,aAASnrJ,MAAT,CAAgBxrF,CAAhB,EAAmB;AACjB,UAAI4gC,CAAJ,EAAOkhB,GAAP;;AAEA,UAAIlhC,GAAG,CAAChlB,MAAJ,GAAaqL,GAAjB,EAAsB;AACpB2Z,QAAAA,GAAG,CAACrkB,IAAJ,CAASyD,CAAT;AACD,OAFD,MAEO;AACL8hD,QAAAA,GAAG,GAAG,CAAC,EAAE,CAACgpL,GAAG,GAAG,CAAP,IAAY,6BAAd,CAAP;;AAEA,YAAIhpL,GAAG,GAAGlhC,GAAG,CAAChlB,MAAV,IAAoBkmD,GAAG,IAAI60L,GAA/B,EAAoC;AAClC/1M,UAAAA,CAAC,GAAGhgB,GAAG,CAACkhC,GAAD,CAAP;AACA,cAAI/7C,GAAG,CAAC,2BAAQ66B,CAAR,CAAD,CAAP,EAAqBje,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAaqkC,CAAb,EAFa,CAEI;;AAEtChgB,UAAAA,GAAG,CAACkhC,GAAD,CAAH,GAAW9hD,CAAX;AACD;AACF;;AAED,QAAE8qO,GAAF;AACD;;AAED,QAAIhO,KAAK,CAAC3+H,GAAN,CAAUviG,MAAd,EAAsB;AACpB;AACAkhO,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,cAAMuP,EAAE,GAAG,2BAAQvP,CAAR,CAAX;;AAEA,YAAI+F,GAAG,CAACwJ,EAAD,CAAP,EAAa;AACXxJ,UAAAA,GAAG,CAACwJ,EAAD,CAAH,GAAU,CAAC,CAAX;AACAoT,UAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAayD,CAAb;AACD;;AAED,UAAE8qO,GAAF;AACD,OATD,EAFoB,CAWhB;;AAEJlqN,MAAAA,GAAG,GAAGA,GAAG,CAACnJ,MAAJ,CAAWzX,CAAC,IAAI+F,GAAG,CAAC,2BAAQ/F,CAAR,CAAD,CAAH,KAAoB,CAAC,CAArC,CAAN;AACD;;AAED,QAAI,CAAC88N,KAAK,CAAC3+H,GAAN,CAAUviG,MAAV,IAAoB6X,GAArB,KAA6BmN,GAAG,CAAChlB,MAAJ,GAAaqL,GAA1C,IAAiD61N,KAAK,CAAC1qK,MAA3D,EAAmE;AACjE;AACAukL,MAAAA,GAAG,GAAG7L,GAAG,GAAGlqN,GAAG,CAAChlB,MAAhB;AACAkhO,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7B;AACA,YAAI,CAAC+F,GAAG,CAAC,2BAAQ/F,CAAR,CAAD,CAAR,EAAsBwrF,MAAM,CAACxrF,CAAD,CAAN;AACvB,OAHD;AAIA22O,MAAAA,GAAG,GAAG,CAAC,CAAP;AACD;;AAED,QAAIljO,GAAG,IAAImN,GAAG,CAAChlB,MAAJ,GAAaqL,GAAxB,EAA6B;AAC3B,YAAMuD,CAAC,GAAGoW,GAAG,CAAChlB,MAAJ,GAAaqL,GAAvB;;AAEA,WAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1ByJ,QAAAA,GAAG,CAAC,2BAAQ6a,GAAG,CAACtkB,CAAD,CAAX,CAAD,CAAH,GAAuB,CAAC,CAAxB;AACAqmB,QAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAaqkB,GAAG,CAACtkB,CAAD,CAAhB;AACD;;AAEDskB,MAAAA,GAAG,GAAGA,GAAG,CAACjb,KAAJ,CAAU6E,CAAV,CAAN;AACD;;AAED,QAAIsyN,KAAK,CAACrpN,GAAN,CAAU7X,MAAd,EAAsB;AACpB;AACAkhO,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B,YAAI+F,GAAG,CAAC,2BAAQ/F,CAAR,CAAD,CAAP,EAAqB2iB,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAayD,CAAb;AACtB,OAFD;AAGD;;AAED,QAAI88N,KAAK,CAAC7/M,GAAN,CAAUrhB,MAAd,EAAsB;AACpB;AACAkhO,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBqrC,MAAvB;AACD;;AAED,QAAIsxI,KAAK,CAAC7/M,GAAN,CAAUrhB,MAAV,IAAoB+6O,GAAG,GAAG,CAA9B,EAAiC;AAC/B;AACAh0N,MAAAA,GAAG,CAAC1F,GAAJ,GAAU2D,GAAG,CAACnJ,MAAJ,CAAWzX,CAAC,IAAI,CAAC+F,GAAG,CAAC,2BAAQ/F,CAAR,CAAD,CAApB,CAAV;AACD;;AAED,SAAKq0E,KAAL,GAAay2J,GAAb;AACA,SAAKxrO,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAaxxC,GAA1B;AACA,WAAO+B,GAAP;AACD;;AAvFyB,CAA5B;AA2FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASi0N,QAAT,CAAkBj3O,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDi3O,QAAQ,CAACnS,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,iBAAa,IADH;AAEV,eAAW;AAFD,GAFQ;AAMpB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,QAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GARO,EAYP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAZO;AANU,CAAtB;AAwBA,wBAASmS,QAAT,EAAmBrS,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAnB,EAAiC;AACjC,UAAM16M,GAAG,GAAGm6M,KAAK,CAACuE,WAAN,GAAoBG,IAApB,CAAyB1E,KAAK,CAAC8D,GAA/B,CAAZ;AAAA,UACMgL,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,MADnB;AAEAjpN,IAAAA,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAL,GAAaw9N,KAAK,CAAC3+H,GAAN,CAAUtiG,MAAV,CAAiB,KAAKyD,KAAtB,CAAb,GAA4Cw9N,KAAK,CAAC3+H,GAA5D;AACA,SAAK7+F,KAAL,GAAa,oBAAM2jB,CAAC,CAAC7a,KAAR,EAAe6a,CAAC,CAAC4a,IAAjB,EAAuB5a,CAAC,CAACjM,IAAF,IAAU,CAAjC,EAAoCjR,GAApC,CAAwCyI,CAAC,IAAI;AACxD,YAAMxO,CAAC,GAAG,EAAV;AACAA,MAAAA,CAAC,CAAC4rO,EAAD,CAAD,GAAQp9N,CAAR;AACA,aAAO,0BAAOxO,CAAP,CAAP;AACD,KAJY,CAAb;AAKA2iB,IAAAA,GAAG,CAAC1F,GAAJ,GAAU6/M,KAAK,CAAC7/M,GAAN,CAAUphB,MAAV,CAAiB,KAAKyD,KAAtB,CAAV;AACA,WAAOqjB,GAAP;AACD;;AAb2B,CAA9B;AAiBA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASk0N,KAAT,CAAel3O,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;;AACA,OAAK09N,QAAL,CAAc,IAAd,EAFqB,CAEA;AACtB;;AACD,wBAASwZ,KAAT,EAAgBtS,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,SAAKx9N,KAAL,GAAaw9N,KAAK,CAAC1qK,MAAnB;AACA,WAAO0qK,KAAK,CAAC74B,OAAN,KAAkB64B,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAlB,GAAkErE,KAAK,CAAC6B,eAA/E;AACD;;AAJwB,CAA3B;AAQA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASmY,QAAT,CAAkBn3O,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,MAAMo3O,MAAM,GAAG,CAAC,OAAD,EAAU,OAAV,CAAf;AACAD,QAAQ,CAACrS,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,gBAAY;AADF,GAFQ;AAKpB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,UADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAJO,EAQP;AACD,YAAQ,OADP;AAED,YAAQ,MAFP;AAGD,cAAUzX,oBAHT;AAID,aAAS;AAJR,GARO,EAaP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAbO,EAiBP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAjBO,EAqBP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,aAAS;AAHR,GArBO,EAyBP;AACD,YAAQ,UADP;AAED,YAAQ,MAFP;AAGD,eAAW,OAHV;AAID,cAAU,CAAC,OAAD,EAAU,KAAV;AAJT,GAzBO,EA8BP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW+pB;AALV,GA9BO;AALU,CAAtB;AA2CA,wBAASD,QAAT,EAAmBvS,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMhrG,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAhB;AAAA,UACMm+G,IAAI,GAAGhtN,CAAC,CAAC0kM,QAAF,KAAe,KAD5B;AAAA,UAEMqvB,GAAG,GAAG/zN,CAAC,CAACg0N,QAAF,KAAe,KAF3B;AAAA,UAGM7sO,KAAK,GAAG,KAAK8sO,MAAL,CAAYj0N,CAAZ,EAAe65M,KAAf,CAHd;AAAA,UAIM7zN,MAAM,GAAG,CAAC+tO,GAAG,GAAG9mB,qBAAH,GAAiBD,sBAArB,EAAmC7lN,KAAK,CAAC+iN,IAAzC,EAA+ClkN,MAJ9D;AAAA,UAKM2iO,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQmL,MALnB;AAAA,UAMMI,EAAE,GAAGvL,EAAE,CAAC,CAAD,CANb;AAAA,UAOMwL,EAAE,GAAGxL,EAAE,CAAC,CAAD,CAPb;AAAA,UAQM50N,IAAI,GAAG5M,KAAK,CAAC4M,IARnB;;AAUA,QAAIxU,GAAG,GAAG4H,KAAK,CAAChC,KAAN,IAAehE,QAAzB;AAAA,QACI1B,GAAG,GAAG0H,KAAK,CAACyzB,IAAN,IAAc,CAACz5B,QADzB;AAAA,QAEImsI,IAAI,GAAGusF,KAAK,CAAC38K,GAFjB;;AAIA,QAAIl9B,CAAC,CAACo6M,QAAF,MAAgBP,KAAK,CAACO,QAAN,CAAe,8BAAevrG,KAAf,CAAf,CAApB,EAA2D;AACzDgrG,MAAAA,KAAK,GAAGA,KAAK,CAACJ,MAAN,CAAa,IAAb,CAAR;AACAnsF,MAAAA,IAAI,GAAGusF,KAAK,CAACmE,MAAb;AACAz+N,MAAAA,GAAG,GAAG4B,QAAN;AACA1B,MAAAA,GAAG,GAAG,CAAC0B,QAAP;AACD;;AAED04N,IAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAI;AACrB,YAAMwO,CAAC,GAAGsjH,KAAK,CAAC9xH,CAAD,CAAf;AACA,UAAIwD,CAAJ,EAAO6G,CAAP;;AAEA,UAAImE,CAAC,IAAI,IAAT,EAAe;AACbxO,QAAAA,CAAC,CAACm3O,EAAD,CAAD,GAAQ,IAAR;AACA,YAAIlH,IAAJ,EAAUjwO,CAAC,CAACo3O,EAAD,CAAD,GAAQ,IAAR;AACX,OAHD,MAGO;AACLp3O,QAAAA,CAAC,CAACm3O,EAAD,CAAD,GAAQ3zO,CAAC,GAAG6G,CAAC,GAAGD,KAAK,CAACoE,CAAD,CAArB;AACA,YAAIyhO,IAAJ,EAAUjwO,CAAC,CAACo3O,EAAD,CAAD,GAAQ/sO,CAAC,GAAGpB,MAAM,CAACzF,CAAD,EAAIwT,IAAJ,CAAlB;AACV,YAAIxT,CAAC,GAAGhB,GAAR,EAAaA,GAAG,GAAGgB,CAAN;AACb,YAAI6G,CAAC,GAAG3H,GAAR,EAAaA,GAAG,GAAG2H,CAAN;AACd;AACF,KAbD;AAcAD,IAAAA,KAAK,CAAChC,KAAN,GAAc5F,GAAd;AACA4H,IAAAA,KAAK,CAACyzB,IAAN,GAAan7B,GAAb;AACA,WAAOo6N,KAAK,CAACE,QAAN,CAAeiT,IAAI,GAAGrE,EAAH,GAAQuL,EAA3B,CAAP;AACD,GAxC2B;;AA0C5BD,EAAAA,MAAM,CAACj0N,CAAD,EAAI65M,KAAJ,EAAW;AACf,UAAMka,GAAG,GAAG/zN,CAAC,CAACg0N,QAAF,KAAe,KAA3B,CADe,CACmB;;AAElC,UAAM;AACJ3gF,MAAAA,KADI;AAEJt/I,MAAAA;AAFI,QAGFiM,CAAC,CAACqzI,KAAF,GAAU;AACZA,MAAAA,KAAK,EAAErzI,CAAC,CAACqzI,KADG;AAEZt/I,MAAAA,IAAI,EAAEiM,CAAC,CAACjM,IAAF,IAAU;AAFJ,KAAV,GAGA,uBAAQ;AACV2+L,MAAAA,MAAM,EAAE1yL,CAAC,CAAC0yL,MAAF,IAAY,sBAAOmnB,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAAvC,EAA+CnvC,CAAC,CAAC6uG,KAAjD,CADV;AAEVq/F,MAAAA,OAAO,EAAEluM,CAAC,CAACkuM;AAFD,KAAR,CANJ,CAHe,CAYX;;AAEJ,UAAMkmB,MAAM,GAAG,yBAAU/gF,KAAV,CAAf;AAAA,UACM7gE,IAAI,GAAG,KAAKn2F,KAAL,IAAc,EAD3B;AAAA,UAEM8K,KAAK,GAAG,CAAC4sO,GAAG,GAAG1nB,kBAAH,GAAcH,mBAAlB,EAA6BkoB,MAA7B,EAAqCrgO,IAArC,CAFd;AAGA5M,IAAAA,KAAK,CAAC+iN,IAAN,GAAa,oBAAKkqB,MAAL,CAAb;AACAjtO,IAAAA,KAAK,CAACksJ,KAAN,GAAc+gF,MAAd;AACAjtO,IAAAA,KAAK,CAAC4M,IAAN,GAAaA,IAAb;AACA5M,IAAAA,KAAK,CAAChC,KAAN,GAAcqtF,IAAI,CAACrtF,KAAnB;AACAgC,IAAAA,KAAK,CAACyzB,IAAN,GAAa43D,IAAI,CAAC53D,IAAlB;AACA,WAAO,KAAKv+B,KAAL,GAAa8K,KAApB;AACD;;AAjE2B,CAA9B;AAqEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASktO,UAAT,CAAoB33O,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,wBAArB,EAAgCuE,MAAhC;AACD;;AACD,wBAAS23O,UAAT,EAAqB/S,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAjB;AAAA,UACM9tG,KAAK,GAAG7uG,CAAC,CAAC6uG,KADhB;AAAA,UAEM1vH,KAAK,GAAG,KAAK9C,KAFnB;AAAA,UAGML,GAAG,GAAGe,CAAC,IAAIoC,KAAK,CAACnD,GAAN,CAAU6yH,KAAK,CAAC9xH,CAAD,CAAf,EAAoBA,CAApB,CAHjB;;AAKA,QAAIyT,GAAG,GAAG,IAAV;;AAEA,QAAIwP,CAAC,CAACo6M,QAAF,CAAW,OAAX,KAAuBP,KAAK,CAACO,QAAN,CAAevrG,KAAK,CAAC13E,MAArB,CAA3B,EAAyD;AACvDh4C,MAAAA,KAAK,CAAC2xM,KAAN;AACA+oB,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BhiO,GAA1B;AACD,KAHD,MAGO,IAAI69N,KAAK,CAAC74B,OAAN,EAAJ,EAAqB;AAC1B64B,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAIoC,KAAK,CAACL,MAAN,CAAa+vH,KAAK,CAAC9xH,CAAD,CAAlB,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBlhD,GAAvB;AACD,KAHM,MAGA;AACLwU,MAAAA,GAAG,GAAG,KAAN;AACD;;AAED,SAAK4pN,QAAL,CAAc5pN,GAAd;AACA,QAAIrR,KAAK,CAACquM,KAAN,GAAcmrB,EAAE,CAAC0I,cAArB,EAAqC1I,EAAE,CAACoG,QAAH,CAAY5/N,KAAK,CAACulM,KAAlB;AACrC,WAAOm1B,KAAK,CAAC0E,IAAN,EAAP;AACD;;AAtB6B,CAAhC;AA0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS+V,MAAT,CAAgB53O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAAS43O,MAAT,EAAiBhT,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM7gO,GAAG,GAAG,CAAC,KAAKqD,KAAN,IAAe2jB,CAAC,CAACo6M,QAAF,CAAW,OAAX,CAAf,IAAsCp6M,CAAC,CAACo6M,QAAF,CAAW,MAAX,CAAtC,IAA4DP,KAAK,CAAC74B,OAAN,EAA5D,IAA+EhhL,CAAC,CAAC3c,IAAF,IAAUw2N,KAAK,CAACO,QAAN,CAAep6M,CAAC,CAAC3c,IAAF,CAAO8zC,MAAtB,CAArG;;AAEA,QAAIn+C,GAAJ,EAAS;AACP,WAAKqD,KAAL,GAAa,CAAC2jB,CAAC,CAAC3c,IAAF,GAASw2N,KAAK,CAAC1qK,MAAN,CAAazsD,KAAb,GAAqBW,IAArB,CAA0B,iCAAc2c,CAAC,CAAC3c,IAAhB,CAA1B,CAAT,GAA4Dw2N,KAAK,CAAC1qK,MAAnE,EAA2ErsD,GAA3E,CAA+Ekd,CAAC,CAAC6uG,KAAjF,CAAb;AACD;AACF;;AAPyB,CAA5B;;AAWA,SAAS0lH,QAAT,CAAkBv8M,EAAlB,EAAsB62F,KAAtB,EAA6BxgF,KAA7B,EAAoCs6L,EAApC,EAAwC;AACtC,QAAMrrN,EAAE,GAAGk3N,SAAS,CAACx8M,EAAD,CAAT,CAAc62F,KAAd,EAAqBxgF,KAArB,CAAX;AACA,SAAO;AACL6gC,IAAAA,IAAI,EAAE5xD,EAAE,CAAC4xD,IAAH,IAAWjgC,cADZ;AAELs5C,IAAAA,MAAM,EAAE,UAAU5iC,CAAV,EAAa5oD,CAAb,EAAgB;AACtBA,MAAAA,CAAC,CAAC4rO,EAAD,CAAD,GAAQrrN,EAAE,CAACywD,IAAH,CAAQpoB,CAAR,CAAR;AACD;AAJI,GAAP;AAMD;;AACD,MAAM6uL,SAAS,GAAG;AAChBC,EAAAA,UAAU,EAAE,YAAY;AACtB,WAAO;AACL1mK,MAAAA,IAAI,EAAEpoB,CAAC,IAAIA,CAAC,CAACxmD,KAAF,GAAU;AADhB,KAAP;AAGD,GALe;AAMhB0D,EAAAA,IAAI,EAAE,YAAY;AAChB,QAAIA,IAAJ;AACA,WAAO;AACLqsE,MAAAA,IAAI,EAAE,MAAMrsE,IAAI,GAAG,CADd;AAELkrE,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMtsD,CAAC,GAAGssD,CAAC,CAACxmD,KAAZ;AAAA,cACMkJ,IAAI,GAAGs9C,CAAC,CAACt9C,IADf;AAEA,eAAOhP,CAAC,IAAIssD,CAAC,CAACw7I,OAAF,CAAU94L,IAAI,CAAChP,CAAC,GAAG,CAAL,CAAd,EAAuBgP,IAAI,CAAChP,CAAD,CAA3B,CAAL,GAAuCwJ,IAAI,GAAGxJ,CAAC,GAAG,CAAlD,GAAsDwJ,IAA7D;AACD;AANI,KAAP;AAQD,GAhBe;AAiBhB6xO,EAAAA,UAAU,EAAE,YAAY;AACtB,QAAIC,KAAJ;AACA,WAAO;AACLzlK,MAAAA,IAAI,EAAE,MAAMylK,KAAK,GAAG,CADf;AAEL5mK,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMtsD,CAAC,GAAGssD,CAAC,CAACxmD,KAAZ;AAAA,cACM+G,CAAC,GAAGy/C,CAAC,CAACt9C,IADZ;AAEA,eAAOhP,CAAC,IAAIssD,CAAC,CAACw7I,OAAF,CAAUj7L,CAAC,CAAC7M,CAAC,GAAG,CAAL,CAAX,EAAoB6M,CAAC,CAAC7M,CAAD,CAArB,CAAL,GAAiC,EAAEs7O,KAAnC,GAA2CA,KAAlD;AACD;AANI,KAAP;AAQD,GA3Be;AA4BhBC,EAAAA,YAAY,EAAE,YAAY;AACxB,UAAM/xO,IAAI,GAAG2xO,SAAS,CAAC3xO,IAAV,EAAb;AAAA,UACMkrE,IAAI,GAAGlrE,IAAI,CAACkrE,IADlB;AAEA,WAAO;AACLmB,MAAAA,IAAI,EAAErsE,IAAI,CAACqsE,IADN;AAELnB,MAAAA,IAAI,EAAEpoB,CAAC,IAAI,CAACooB,IAAI,CAACpoB,CAAD,CAAJ,GAAU,CAAX,KAAiBA,CAAC,CAACt9C,IAAF,CAAO1P,MAAP,GAAgB,CAAjC;AAFN,KAAP;AAID,GAnCe;AAoChBk8O,EAAAA,SAAS,EAAE,YAAY;AACrB,QAAIC,IAAJ;AACA,WAAO;AACL5lK,MAAAA,IAAI,EAAE,MAAM4lK,IAAI,GAAG,CADd;AAEL/mK,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMz/C,CAAC,GAAGy/C,CAAC,CAACt9C,IAAZ;AAAA,cACMvC,CAAC,GAAG6/C,CAAC,CAACw7I,OADZ;AAEA,YAAI9nM,CAAC,GAAGssD,CAAC,CAACxmD,KAAV;;AAEA,YAAI21O,IAAI,GAAGz7O,CAAX,EAAc;AACZ,iBAAOA,CAAC,GAAG,CAAJ,GAAQ6M,CAAC,CAACvN,MAAV,IAAoB,CAACmN,CAAC,CAACI,CAAC,CAAC7M,CAAD,CAAF,EAAO6M,CAAC,CAAC7M,CAAC,GAAG,CAAL,CAAR,CAA7B,EAA+C,EAAEA,CAAF;;AAE/Cy7O,UAAAA,IAAI,GAAGz7O,CAAP;AACD;;AAED,eAAO,CAAC,IAAIy7O,IAAL,IAAa5uO,CAAC,CAACvN,MAAtB;AACD;AAdI,KAAP;AAgBD,GAtDe;AAuDhBo8O,EAAAA,KAAK,EAAE,UAAUlmH,KAAV,EAAiB7qH,GAAjB,EAAsB;AAC3BA,IAAAA,GAAG,GAAG,CAACA,GAAP;AACA,QAAI,EAAEA,GAAG,GAAG,CAAR,CAAJ,EAAgB,qBAAM,sCAAN;AAChB,UAAM8wO,IAAI,GAAGN,SAAS,CAACK,SAAV,EAAb;AAAA,UACM9mK,IAAI,GAAG+mK,IAAI,CAAC/mK,IADlB;AAEA,WAAO;AACLmB,MAAAA,IAAI,EAAE4lK,IAAI,CAAC5lK,IADN;AAELnB,MAAAA,IAAI,EAAEpoB,CAAC,IAAIvmD,IAAI,CAACoC,IAAL,CAAUwC,GAAG,GAAG+pE,IAAI,CAACpoB,CAAD,CAApB;AAFN,KAAP;AAID,GAhEe;AAiEhBqvL,EAAAA,GAAG,EAAE,UAAUnmH,KAAV,EAAiB7oH,MAAjB,EAAyB;AAC5BA,IAAAA,MAAM,GAAG,CAACA,MAAD,IAAW,CAApB;AACA,WAAO;AACL+nE,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMtsD,CAAC,GAAGssD,CAAC,CAACxmD,KAAF,GAAU6G,MAApB;AACA,eAAO3M,CAAC,IAAI,CAAL,GAASw1H,KAAK,CAAClpE,CAAC,CAACt9C,IAAF,CAAOhP,CAAP,CAAD,CAAd,GAA4B,IAAnC;AACD;AAJI,KAAP;AAMD,GAzEe;AA0EhB47O,EAAAA,IAAI,EAAE,UAAUpmH,KAAV,EAAiB7oH,MAAjB,EAAyB;AAC7BA,IAAAA,MAAM,GAAG,CAACA,MAAD,IAAW,CAApB;AACA,WAAO;AACL+nE,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMtsD,CAAC,GAAGssD,CAAC,CAACxmD,KAAF,GAAU6G,MAApB;AAAA,cACME,CAAC,GAAGy/C,CAAC,CAACt9C,IADZ;AAEA,eAAOhP,CAAC,GAAG6M,CAAC,CAACvN,MAAN,GAAek2H,KAAK,CAAC3oH,CAAC,CAAC7M,CAAD,CAAF,CAApB,GAA6B,IAApC;AACD;AALI,KAAP;AAOD,GAnFe;AAoFhB67O,EAAAA,WAAW,EAAE,UAAUrmH,KAAV,EAAiB;AAC5B,WAAO;AACL9gD,MAAAA,IAAI,EAAEpoB,CAAC,IAAIkpE,KAAK,CAAClpE,CAAC,CAACt9C,IAAF,CAAOs9C,CAAC,CAACo0C,EAAT,CAAD;AADX,KAAP;AAGD,GAxFe;AAyFhBo7I,EAAAA,UAAU,EAAE,UAAUtmH,KAAV,EAAiB;AAC3B,WAAO;AACL9gD,MAAAA,IAAI,EAAEpoB,CAAC,IAAIkpE,KAAK,CAAClpE,CAAC,CAACt9C,IAAF,CAAOs9C,CAAC,CAAC+rJ,EAAF,GAAO,CAAd,CAAD;AADX,KAAP;AAGD,GA7Fe;AA8FhB0jC,EAAAA,SAAS,EAAE,UAAUvmH,KAAV,EAAiBwmH,GAAjB,EAAsB;AAC/BA,IAAAA,GAAG,GAAG,CAACA,GAAP;AACA,QAAI,EAAEA,GAAG,GAAG,CAAR,CAAJ,EAAgB,qBAAM,0CAAN;AAChB,WAAO;AACLtnK,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMtsD,CAAC,GAAGssD,CAAC,CAACo0C,EAAF,IAAQs7I,GAAG,GAAG,CAAd,CAAV;AACA,eAAOh8O,CAAC,GAAGssD,CAAC,CAAC+rJ,EAAN,GAAW7iF,KAAK,CAAClpE,CAAC,CAACt9C,IAAF,CAAOhP,CAAP,CAAD,CAAhB,GAA8B,IAArC;AACD;AAJI,KAAP;AAMD,GAvGe;AAwGhBi8O,EAAAA,UAAU,EAAE,UAAUzmH,KAAV,EAAiB;AAC3B,QAAIr8B,IAAJ;AACA,WAAO;AACLtjB,MAAAA,IAAI,EAAE,MAAMsjB,IAAI,GAAG,IADd;AAELzkB,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMp6C,CAAC,GAAGsjH,KAAK,CAAClpE,CAAC,CAACt9C,IAAF,CAAOs9C,CAAC,CAACxmD,KAAT,CAAD,CAAf;AACA,eAAOoM,CAAC,IAAI,IAAL,GAAYinF,IAAI,GAAGjnF,CAAnB,GAAuBinF,IAA9B;AACD;AALI,KAAP;AAOD,GAjHe;AAkHhB+iJ,EAAAA,UAAU,EAAE,UAAU1mH,KAAV,EAAiB;AAC3B,QAAItjH,CAAJ,EAAOlS,CAAP;AACA,WAAO;AACL61E,MAAAA,IAAI,EAAE,OAAO3jE,CAAC,GAAG,IAAJ,EAAUlS,CAAC,GAAG,CAAC,CAAtB,CADD;AAEL00E,MAAAA,IAAI,EAAEpoB,CAAC,IAAI;AACT,cAAMz/C,CAAC,GAAGy/C,CAAC,CAACt9C,IAAZ;AACA,eAAOs9C,CAAC,CAACxmD,KAAF,IAAW9F,CAAX,GAAekS,CAAf,GAAmB,CAAClS,CAAC,GAAG4yK,IAAI,CAACp9C,KAAD,EAAQ3oH,CAAR,EAAWy/C,CAAC,CAACxmD,KAAb,CAAT,IAAgC,CAAhC,IAAqC9F,CAAC,GAAG6M,CAAC,CAACvN,MAAN,EAAc4S,CAAC,GAAG,IAAvD,IAA+DA,CAAC,GAAGsjH,KAAK,CAAC3oH,CAAC,CAAC7M,CAAD,CAAF,CAAlG;AACD;AALI,KAAP;AAOD;AA3He,CAAlB;;AA8HA,SAAS4yK,IAAT,CAAcp9C,KAAd,EAAqBxmH,IAArB,EAA2BlJ,KAA3B,EAAkC;AAChC,OAAK,IAAIoI,CAAC,GAAGc,IAAI,CAAC1P,MAAlB,EAA0BwG,KAAK,GAAGoI,CAAlC,EAAqC,EAAEpI,KAAvC,EAA8C;AAC5C,UAAMoM,CAAC,GAAGsjH,KAAK,CAACxmH,IAAI,CAAClJ,KAAD,CAAL,CAAf;AACA,QAAIoM,CAAC,IAAI,IAAT,EAAe,OAAOpM,KAAP;AAChB;;AAED,SAAO,CAAC,CAAR;AACD;;AAED,MAAMq2O,cAAc,GAAGp5O,MAAM,CAACof,IAAP,CAAYg5N,SAAZ,CAAvB;;AAEA,SAASiB,WAAT,CAAqBz1N,CAArB,EAAwB;AACtB,QAAMgtG,GAAG,GAAG,qBAAMhtG,CAAC,CAACgtG,GAAR,CAAZ;AAAA,QACM71E,MAAM,GAAG,qBAAMn3B,CAAC,CAACm3B,MAAR,CADf;AAAA,QAEMz6C,MAAM,GAAG,qBAAMsjB,CAAC,CAACtjB,MAAR,CAFf;AAAA,QAGMisO,EAAE,GAAG,qBAAM3oN,CAAC,CAAC2oN,EAAR,CAHX;AAAA,QAIMzgO,OAAO,GAAG,KAAKA,OAAL,GAAe,EAJ/B;AAAA,QAKMwtO,OAAO,GAAG,KAAKA,OAAL,GAAe,EAL/B;AAAA,QAMMztO,MAAM,GAAG,EANf;AAAA,QAOMnF,GAAG,GAAG,EAPZ;AAAA,QAQM6lL,MAAM,GAAG,EARf;AAAA,QASM+jD,QAAQ,GAAG,EATjB;AAUA,MAAIiJ,SAAS,GAAG,IAAhB;;AAEA,WAASC,WAAT,CAAqB5wO,CAArB,EAAwB;AACtB,yBAAM,8BAAeA,CAAf,CAAN,EAAyB7H,OAAzB,CAAiC6iB,CAAC,IAAI/X,MAAM,CAAC+X,CAAD,CAAN,GAAY,CAAlD;AACD;;AAED41N,EAAAA,WAAW,CAAC51N,CAAC,CAAC3c,IAAH,CAAX;AACA2pH,EAAAA,GAAG,CAAC7vH,OAAJ,CAAY,CAAC66B,EAAD,EAAK3+B,CAAL,KAAW;AACrB,UAAMw1H,KAAK,GAAG13E,MAAM,CAAC99C,CAAD,CAApB;AAAA,UACMizO,KAAK,GAAG,4BAAaz9G,KAAb,CADd;AAAA,UAEMj0H,IAAI,GAAG8tO,WAAW,CAAC1wM,EAAD,EAAKs0M,KAAL,EAAY3D,EAAE,CAACtvO,CAAD,CAAd,CAFxB;AAGAu8O,IAAAA,WAAW,CAAC/mH,KAAD,CAAX;AACA3mH,IAAAA,OAAO,CAAC5O,IAAR,CAAasB,IAAb,EALqB,CAKD;;AAEpB,QAAI,8BAAe45O,SAAf,EAA0Bx8M,EAA1B,CAAJ,EAAmC;AACjC09M,MAAAA,OAAO,CAACp8O,IAAR,CAAai7O,QAAQ,CAACv8M,EAAD,EAAKmf,MAAM,CAAC99C,CAAD,CAAX,EAAgBqD,MAAM,CAACrD,CAAD,CAAtB,EAA2BuB,IAA3B,CAArB;AACD,KAFD,CAEE;AAFF,SAGK;AACD,YAAIi0H,KAAK,IAAI,IAAT,IAAiB72F,EAAE,KAAK,OAA5B,EAAqC;AACnC,+BAAM,iCAAN;AACD;;AAED,YAAIA,EAAE,KAAK,OAAX,EAAoB;AAClB2wJ,UAAAA,MAAM,CAACrvL,IAAP,CAAYsB,IAAZ;AACA;AACD;;AAED+6O,QAAAA,SAAS,GAAG,KAAZ;AACA,YAAI7kJ,CAAC,GAAGhuF,GAAG,CAACwpO,KAAD,CAAX;;AAEA,YAAI,CAACx7I,CAAL,EAAQ;AACNA,UAAAA,CAAC,GAAGhuF,GAAG,CAACwpO,KAAD,CAAH,GAAa,EAAjB;AACAx7I,UAAAA,CAAC,CAAC+9B,KAAF,GAAUA,KAAV;AACA69G,UAAAA,QAAQ,CAACpzO,IAAT,CAAcw3F,CAAd;AACD;;AAEDA,QAAAA,CAAC,CAACx3F,IAAF,CAAO4wO,aAAa,CAAClyM,EAAD,EAAKp9B,IAAL,CAApB;AACD;AACJ,GA/BD;;AAiCA,MAAI+tL,MAAM,CAAChwL,MAAP,IAAiB+zO,QAAQ,CAAC/zO,MAA9B,EAAsC;AACpC,SAAKgmK,IAAL,GAAYA,IAAI,CAAC+tE,QAAD,EAAW/jD,MAAX,EAAmBgtD,SAAnB,CAAhB;AACD;;AAED,OAAK1tO,MAAL,GAAc7L,MAAM,CAACof,IAAP,CAAYvT,MAAZ,CAAd;AACD;;AACD,MAAM4tO,WAAW,GAAGJ,WAAW,CAACh8O,SAAhC;;AAEAo8O,WAAW,CAAC3mK,IAAZ,GAAmB,YAAY;AAC7B,OAAKwmK,OAAL,CAAav4O,OAAb,CAAqB6iB,CAAC,IAAIA,CAAC,CAACkvD,IAAF,EAA1B;AACA,MAAI,KAAKyvF,IAAT,EAAe,KAAKA,IAAL,CAAUzvF,IAAV;AAChB,CAHD;;AAKA2mK,WAAW,CAACttJ,MAAZ,GAAqB,UAAU5iC,CAAV,EAAa5oD,CAAb,EAAgB;AACnC,QAAM4hK,IAAI,GAAG,KAAKA,IAAlB;AAAA,QACMm3E,IAAI,GAAG,KAAKJ,OADlB;AAAA,QAEMrtO,IAAI,GAAGs9C,CAAC,CAACt9C,IAFf;AAAA,QAGMyoF,CAAC,GAAGglJ,IAAI,IAAIA,IAAI,CAACn9O,MAHvB;AAIA,MAAI2K,CAAJ;;AAEA,MAAIq7J,IAAJ,EAAU;AACR,SAAKr7J,CAAC,GAAGqiD,CAAC,CAAC41J,EAAX,EAAej4M,CAAC,GAAGqiD,CAAC,CAACo0C,EAArB,EAAyB,EAAEz2F,CAA3B,EAA8Bq7J,IAAI,CAACzjE,GAAL,CAAS7yF,IAAI,CAAC/E,CAAD,CAAb;;AAE9B,SAAKA,CAAC,GAAGqiD,CAAC,CAACyoE,EAAX,EAAe9qH,CAAC,GAAGqiD,CAAC,CAAC+rJ,EAArB,EAAyB,EAAEpuM,CAA3B,EAA8Bq7J,IAAI,CAAC3kJ,GAAL,CAAS3R,IAAI,CAAC/E,CAAD,CAAb;;AAE9Bq7J,IAAAA,IAAI,CAAC3iK,GAAL,CAASe,CAAT;AACD;;AAED,OAAKuG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwBwyO,IAAI,CAACxyO,CAAD,CAAJ,CAAQilF,MAAR,CAAe5iC,CAAf,EAAkB5oD,CAAlB;AACzB,CAhBD;;AAkBA,SAAS4hK,IAAT,CAAc+tE,QAAd,EAAwB/jD,MAAxB,EAAgCgtD,SAAhC,EAA2C;AACzCjJ,EAAAA,QAAQ,GAAGA,QAAQ,CAAC5pO,GAAT,CAAaguF,CAAC,IAAI05I,eAAe,CAAC15I,CAAD,EAAIA,CAAC,CAAC+9B,KAAN,CAAjC,CAAX;AACA,QAAM8vC,IAAI,GAAG;AACX36J,IAAAA,GAAG,EAAE,CADM;AAEXomO,IAAAA,GAAG,EAAE,IAFM;AAGXtB,IAAAA,KAAK,EAAE,KAHI;AAIX13J,IAAAA,KAAK,EAAEu3G;AAJI,GAAb;;AAOA,MAAI,CAACgtD,SAAL,EAAgB;AACd,QAAIpuO,CAAC,GAAGmlO,QAAQ,CAAC/zO,MAAjB;AAAA,QACI4H,CAAC,GAAGo+J,IAAI,CAACyrE,GAAL,GAAWjxO,KAAK,CAACoO,CAAD,CADxB;AAAA,QAEIlO,CAAC,GAAG,CAFR;;AAIA,WAAOA,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmBkH,CAAC,CAAClH,CAAD,CAAD,GAAO,IAAIqzO,QAAQ,CAACrzO,CAAD,CAAZ,CAAgBslK,IAAhB,CAAP;AACpB;;AAED,MAAIA,IAAI,CAACmqE,KAAT,EAAgB;AACd,QAAIA,KAAK,GAAGnqE,IAAI,CAACt2J,IAAL,GAAY,IAAIqiO,UAAJ,EAAxB;AACD;;AAED/rE,EAAAA,IAAI,CAAC3kJ,GAAL,GAAW,UAAUjd,CAAV,EAAa;AACtB4hK,IAAAA,IAAI,CAAC36J,GAAL,IAAY,CAAZ;AACA,QAAI2xO,SAAJ,EAAe;AACf,QAAI7M,KAAJ,EAAWA,KAAK,CAAC9uN,GAAN,CAAUjd,CAAV;;AAEX,SAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BkH,MAAAA,CAAC,CAAClH,CAAD,CAAD,CAAK2gB,GAAL,CAASzZ,CAAC,CAAClH,CAAD,CAAD,CAAK8C,GAAL,CAASY,CAAT,CAAT,EAAsBA,CAAtB;AACD;AACF,GARD;;AAUA4hK,EAAAA,IAAI,CAACzjE,GAAL,GAAW,UAAUn+F,CAAV,EAAa;AACtB4hK,IAAAA,IAAI,CAAC36J,GAAL,IAAY,CAAZ;AACA,QAAI2xO,SAAJ,EAAe;AACf,QAAI7M,KAAJ,EAAWA,KAAK,CAAC5tI,GAAN,CAAUn+F,CAAV;;AAEX,SAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BkH,MAAAA,CAAC,CAAClH,CAAD,CAAD,CAAK6hG,GAAL,CAAS36F,CAAC,CAAClH,CAAD,CAAD,CAAK8C,GAAL,CAASY,CAAT,CAAT,EAAsBA,CAAtB;AACD;AACF,GARD;;AAUA4hK,EAAAA,IAAI,CAAC3iK,GAAL,GAAW,UAAUe,CAAV,EAAa;AACtB,QAAI1D,CAAJ,EAAOkO,CAAP,CADsB,CACZ;;AAEV,QAAIuhO,KAAJ,EAAWA,KAAK,CAACrlO,MAAN,GAHW,CAGK;;AAE3B,SAAKpK,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGohL,MAAM,CAAChwL,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C0D,CAAC,CAAC4rL,MAAM,CAACtvL,CAAD,CAAP,CAAD,GAAeslK,IAAI,CAAC36J,GAApB;;AAE3C,QAAI,CAAC2xO,SAAL,EAAgB,KAAKt8O,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGhH,CAAC,CAAC5H,MAAlB,EAA0BU,CAAC,GAAGkO,CAA9B,EAAiC,EAAElO,CAAnC,EAAsCkH,CAAC,CAAClH,CAAD,CAAD,CAAK2C,GAAL,CAASe,CAAT;AACvD,GARD;;AAUA4hK,EAAAA,IAAI,CAACzvF,IAAL,GAAY,YAAY;AACtByvF,IAAAA,IAAI,CAAC36J,GAAL,GAAW,CAAX;AACA,QAAI8kO,KAAJ,EAAWA,KAAK,CAAC/iN,KAAN;;AAEX,SAAK,IAAI1sB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4BkH,CAAC,CAAClH,CAAD,CAAD,CAAK61E,IAAL;AAC7B,GALD;;AAOA,SAAOyvF,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASo3E,MAAT,CAAgBr5O,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;;AACA,OAAK4uO,KAAL,GAAa,CAAb;AACA,OAAKF,KAAL,GAAa,EAAb;AACD;;AACD2K,MAAM,CAACvU,UAAP,GAAoB;AAClB,UAAQ,QADU;AAElB,cAAY;AACV,gBAAY;AADF,GAFM;AAKlB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAHO,EAOP;AACD,YAAQ,KADP;AAED,YAAQ,MAFP;AAGD,aAAS,IAHR;AAID,cAAUgU,cAAc,CAAC58O,MAAf,CAAsBoxO,iBAAtB;AAJT,GAPO,EAYP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAZO,EAiBP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAjBO,EAsBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS;AAJR,GAtBO,EA2BP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,aAAS,IAJR;AAKD,cAAU,CALT;AAMD,eAAW,CAAC,IAAD,EAAO,CAAP;AANV,GA3BO,EAkCP;AACD,YAAQ,aADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAlCO;AALQ,CAApB;AA6CA,wBAAS+L,MAAT,EAAiBzU,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,SAAKe,KAAL,GAAaf,KAAK,CAACe,KAAnB;;AAEA,UAAMpqN,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EAAZ;AAAA,UACM10B,GAAG,GAAG,iCAAc1lL,CAAC,CAAC3c,IAAhB,CADZ;AAAA,UAEM/F,GAAG,GAAGmrO,QAAQ,CAACzoN,CAAC,CAACmsN,OAAH,CAFpB;AAAA,UAGMnnH,KAAK,GAAGjoH,CAAC,IAAI,KAAKioH,KAAL,CAAW1nH,GAAG,CAACP,CAAD,CAAd,CAHnB,CAHkB,CAMqB;;;AAGvC,QAAIge,KAAK,GAAG,KAAKA,KAAjB;;AAEA,QAAI,CAACA,KAAD,IAAUvK,GAAd,EAAmB;AACjBuK,MAAAA,KAAK,GAAG,KAAKA,KAAL,GAAa,IAAI06N,WAAJ,CAAgBz1N,CAAhB,CAArB;AACD,KAbiB,CAahB;;;AAGF,QAAIxP,GAAG,IAAIqpN,KAAK,CAACO,QAAN,CAAer/M,KAAK,CAAC9S,MAArB,CAAX,EAAyC;AACvC,WAAK5L,KAAL,GAAa,EAAb;AACAw9N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAIioH,KAAK,CAACjoH,CAAD,CAAL,CAASid,GAAT,CAAajd,CAAb,CAA/B;AACD,KAHD,MAGO;AACL88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAIioH,KAAK,CAACjoH,CAAD,CAAL,CAASyvE,MAAT,CAAgBzvE,CAAhB,CAA5B;AACA88N,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAIioH,KAAK,CAACjoH,CAAD,CAAL,CAASid,GAAT,CAAajd,CAAb,CAA5B;AACD,KAtBiB,CAsBhB;;;AAGF,SAAK,IAAI1D,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG,KAAK+jO,KAAzB,EAAgCjyO,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C28O,MAAAA,gBAAgB,CAAC,KAAK5K,KAAL,CAAW/xO,CAAX,CAAD,EAAgB0hB,KAAhB,EAAuB2qL,GAAvB,EAA4B1lL,CAA5B,CAAhB;AACD;;AAED,SAAKsrN,KAAL,GAAa,CAAb;AACA,SAAKF,KAAL,GAAa,EAAb,CA9BkB,CA8BD;;AAEjB,WAAOvR,KAAK,CAACJ,MAAN,CAAajpN,GAAb,EAAkBupN,QAAlB,CAA2Bh/M,KAAK,CAAC7S,OAAjC,CAAP;AACD,GAlCyB;;AAoC1B88G,EAAAA,KAAK,CAAC1nH,GAAD,EAAM;AACT,QAAI0nH,KAAK,GAAG,KAAK3oH,KAAL,CAAWiB,GAAX,CAAZ;;AAEA,QAAI,CAAC0nH,KAAL,EAAY;AACVA,MAAAA,KAAK,GAAG,KAAK3oH,KAAL,CAAWiB,GAAX,IAAkB8vO,UAAU,CAACrU,qBAAD,CAApC;AACA/zG,MAAAA,KAAK,CAAC41G,KAAN,GAAc,CAAC,CAAf;AACD;;AAED,QAAI51G,KAAK,CAAC41G,KAAN,GAAc,KAAKA,KAAvB,EAA8B;AAC5B51G,MAAAA,KAAK,CAAC41G,KAAN,GAAc,KAAKA,KAAnB;AACA,WAAKwQ,KAAL,CAAW,KAAKE,KAAL,EAAX,IAA2BtmH,KAA3B;AACD;;AAED,WAAOA,KAAP;AACD;;AAlDyB,CAA5B;;AAsDA,SAASgxH,gBAAT,CAA0Bt8N,IAA1B,EAAgCqB,KAAhC,EAAuC2qL,GAAvC,EAA4C1lL,CAA5C,EAA+C;AAC7C,QAAM3c,IAAI,GAAG2c,CAAC,CAAC3c,IAAf;AAAA,QACMw3B,KAAK,GAAGx3B,IAAI,IAAI,CAAC2c,CAAC,CAACi2N,WADzB;AAAA,QAEM9pJ,KAAK,GAAGnsE,CAAC,CAACmsE,KAAF,IAAW,CAAC,IAAD,EAAO,CAAP,CAFzB;AAAA,QAGM9jF,IAAI,GAAGqR,IAAI,CAACrR,IAAL,CAAUq9L,GAAV,CAHb;AAAA,QAIM;AACNn+L,EAAAA,CAAC,GAAGc,IAAI,CAAC1P,MALT;AAAA,QAMMyO,CAAC,GAAGyzB,KAAK,GAAG,uBAASx3B,IAAT,CAAH,GAAoB,IANnC;AAAA,QAOMsiD,CAAC,GAAG;AACRo0C,IAAAA,EAAE,EAAE,CADI;AAER23G,IAAAA,EAAE,EAAE,CAFI;AAGR6J,IAAAA,EAAE,EAAE,CAHI;AAIRntF,IAAAA,EAAE,EAAE,CAJI;AAKRjvH,IAAAA,KAAK,EAAE,CALC;AAMRkJ,IAAAA,IAAI,EAAEA,IANE;AAOR84L,IAAAA,OAAO,EAAE99L,IAAI,IAAI,wBAAS,CAAC,CAAV;AAPT,GAPV;AAgBA0X,EAAAA,KAAK,CAACm0D,IAAN;;AAEA,OAAK,IAAI71E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B68O,IAAAA,SAAS,CAACvwL,CAAD,EAAIwmC,KAAJ,EAAW9yF,CAAX,EAAckO,CAAd,CAAT;AACA,QAAIszB,KAAJ,EAAWs7M,WAAW,CAACxwL,CAAD,EAAIv+C,CAAJ,CAAX;AACX2T,IAAAA,KAAK,CAACwtE,MAAN,CAAa5iC,CAAb,EAAgBt9C,IAAI,CAAChP,CAAD,CAApB;AACD;AACF;;AAED,SAAS68O,SAAT,CAAmBvwL,CAAnB,EAAsB3gD,CAAtB,EAAyB3L,CAAzB,EAA4BkO,CAA5B,EAA+B;AAC7Bo+C,EAAAA,CAAC,CAAC41J,EAAF,GAAO51J,CAAC,CAACo0C,EAAT;AACAp0C,EAAAA,CAAC,CAACyoE,EAAF,GAAOzoE,CAAC,CAAC+rJ,EAAT;AACA/rJ,EAAAA,CAAC,CAACo0C,EAAF,GAAO/0F,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,GAAe,CAAf,GAAmB5F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYpG,CAAC,GAAG+F,IAAI,CAACiT,GAAL,CAASrN,CAAC,CAAC,CAAD,CAAV,CAAhB,CAA1B;AACA2gD,EAAAA,CAAC,CAAC+rJ,EAAF,GAAO1sM,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,GAAeuC,CAAf,GAAmBnI,IAAI,CAACG,GAAL,CAASgI,CAAT,EAAYlO,CAAC,GAAG+F,IAAI,CAACiT,GAAL,CAASrN,CAAC,CAAC,CAAD,CAAV,CAAJ,GAAqB,CAAjC,CAA1B;AACA2gD,EAAAA,CAAC,CAACxmD,KAAF,GAAU9F,CAAV;AACD,EAAC;;;AAGF,SAAS88O,WAAT,CAAqBxwL,CAArB,EAAwBywL,MAAxB,EAAgC;AAC9B,QAAMnlC,EAAE,GAAGtrJ,CAAC,CAACo0C,EAAb;AAAA,QACM0xG,EAAE,GAAG9lJ,CAAC,CAAC+rJ,EAAF,GAAO,CADlB;AAAA,QAEM5rM,CAAC,GAAG6/C,CAAC,CAACw7I,OAFZ;AAAA,QAGMj7L,CAAC,GAAGy/C,CAAC,CAACt9C,IAHZ;AAAA,QAIMd,CAAC,GAAGrB,CAAC,CAACvN,MAAF,GAAW,CAJrB;AAKA,MAAIs4M,EAAE,GAAG,CAAL,IAAU,CAACnrM,CAAC,CAACI,CAAC,CAAC+qM,EAAD,CAAF,EAAQ/qM,CAAC,CAAC+qM,EAAE,GAAG,CAAN,CAAT,CAAhB,EAAoCtrJ,CAAC,CAACo0C,EAAF,GAAOq8I,MAAM,CAAC5pM,IAAP,CAAYtmC,CAAZ,EAAeA,CAAC,CAAC+qM,EAAD,CAAhB,CAAP;AACpC,MAAIxF,EAAE,GAAGlkM,CAAL,IAAU,CAACzB,CAAC,CAACI,CAAC,CAACulM,EAAD,CAAF,EAAQvlM,CAAC,CAACulM,EAAE,GAAG,CAAN,CAAT,CAAhB,EAAoC9lJ,CAAC,CAAC+rJ,EAAF,GAAO0kC,MAAM,CAAC3pM,KAAP,CAAavmC,CAAb,EAAgBA,CAAC,CAACulM,EAAD,CAAjB,CAAP;AACrC;;;;;;;;ACn+HD,MAAM4qC,EAAE,GAAGj3O,IAAI,CAACuiC,EAAhB;AAAA,MACI20M,GAAG,GAAG,IAAID,EADd;AAAA,MAEI3/J,OAAO,GAAG,IAFd;AAAA,MAGI6/J,UAAU,GAAGD,GAAG,GAAG5/J,OAHvB;;AAKA,SAAS8/J,IAAT,GAAgB;AACd,OAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW;AACtB,OAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,IADtB,CADc,CAEc;;AAC5B,OAAK52N,CAAL,GAAS,EAAT;AACD;;AAED,SAAStY,IAAT,GAAgB;AACd,SAAO,IAAI8uO,IAAJ,EAAP;AACD;;AAEDA,IAAI,CAAC/8O,SAAL,GAAiBiO,IAAI,CAACjO,SAAL,GAAiB;AAChCwL,EAAAA,WAAW,EAAEuxO,IADmB;AAEhCK,EAAAA,MAAM,EAAE,UAASr3O,CAAT,EAAYue,CAAZ,EAAe;AACrB,SAAKiC,CAAL,IAAU,OAAO,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAA9B,IAAmC,GAAnC,IAA0C,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAjE,CAAV;AACD,GAJ+B;AAKhC+4N,EAAAA,SAAS,EAAE,YAAW;AACpB,QAAI,KAAKH,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAKA,GAAL,GAAW,KAAKF,GAAhB,EAAqB,KAAKG,GAAL,GAAW,KAAKF,GAArC;AACA,WAAK12N,CAAL,IAAU,GAAV;AACD;AACF,GAV+B;AAWhC+2N,EAAAA,MAAM,EAAE,UAASv3O,CAAT,EAAYue,CAAZ,EAAe;AACrB,SAAKiC,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW,CAACn3O,CAAnB,IAAwB,GAAxB,IAA+B,KAAKo3O,GAAL,GAAW,CAAC74N,CAA3C,CAAV;AACD,GAb+B;AAchCi5N,EAAAA,gBAAgB,EAAE,UAASlrI,EAAT,EAAaD,EAAb,EAAiBrsG,CAAjB,EAAoBue,CAApB,EAAuB;AACvC,SAAKiC,CAAL,IAAU,MAAO,CAAC8rF,EAAR,GAAc,GAAd,GAAqB,CAACD,EAAtB,GAA4B,GAA5B,IAAmC,KAAK8qI,GAAL,GAAW,CAACn3O,CAA/C,IAAoD,GAApD,IAA2D,KAAKo3O,GAAL,GAAW,CAAC74N,CAAvE,CAAV;AACD,GAhB+B;AAiBhCk5N,EAAAA,aAAa,EAAE,UAASnrI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyBvsG,CAAzB,EAA4Bue,CAA5B,EAA+B;AAC5C,SAAKiC,CAAL,IAAU,MAAO,CAAC8rF,EAAR,GAAc,GAAd,GAAqB,CAACD,EAAtB,GAA4B,GAA5B,GAAmC,CAAC1zB,EAApC,GAA0C,GAA1C,GAAiD,CAAC4zB,EAAlD,GAAwD,GAAxD,IAA+D,KAAK4qI,GAAL,GAAW,CAACn3O,CAA3E,IAAgF,GAAhF,IAAuF,KAAKo3O,GAAL,GAAW,CAAC74N,CAAnG,CAAV;AACD,GAnB+B;AAoBhCm5N,EAAAA,KAAK,EAAE,UAASprI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyB1kG,CAAzB,EAA4B;AACjCykG,IAAAA,EAAE,GAAG,CAACA,EAAN,EAAUD,EAAE,GAAG,CAACA,EAAhB,EAAoB1zB,EAAE,GAAG,CAACA,EAA1B,EAA8B4zB,EAAE,GAAG,CAACA,EAApC,EAAwC1kG,CAAC,GAAG,CAACA,CAA7C;AACA,QAAIqyM,EAAE,GAAG,KAAKi9B,GAAd;AAAA,QACIh9B,EAAE,GAAG,KAAKi9B,GADd;AAAA,QAEIO,GAAG,GAAGh/J,EAAE,GAAG2zB,EAFf;AAAA,QAGIsrI,GAAG,GAAGrrI,EAAE,GAAGF,EAHf;AAAA,QAIIwrI,GAAG,GAAG39B,EAAE,GAAG5tG,EAJf;AAAA,QAKIwrI,GAAG,GAAG39B,EAAE,GAAG9tG,EALf;AAAA,QAMI0rI,KAAK,GAAGF,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAN9B,CAFiC,CAUjC;;AACA,QAAIjwO,CAAC,GAAG,CAAR,EAAW,MAAM,IAAIzP,KAAJ,CAAU,sBAAsByP,CAAhC,CAAN,CAXsB,CAajC;;AACA,QAAI,KAAKsvO,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAK32N,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW7qI,EAAlB,IAAwB,GAAxB,IAA+B,KAAK8qI,GAAL,GAAW/qI,EAA1C,CAAV;AACD,KAFD,CAIA;AAJA,SAKK,IAAI,EAAE0rI,KAAK,GAAG7gK,OAAV,CAAJ,EAAuB,CAAvB,CAEL;AACA;AACA;AAJK,WAKA,IAAI,EAAEt3E,IAAI,CAACiT,GAAL,CAASilO,GAAG,GAAGH,GAAN,GAAYC,GAAG,GAAGC,GAA3B,IAAkC3gK,OAApC,KAAgD,CAACrvE,CAArD,EAAwD;AAC3D,eAAK2Y,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW7qI,EAAlB,IAAwB,GAAxB,IAA+B,KAAK8qI,GAAL,GAAW/qI,EAA1C,CAAV;AACD,SAFI,CAIL;AAJK,aAKA;AACH,gBAAI2rI,GAAG,GAAGr/J,EAAE,GAAGuhI,EAAf;AAAA,gBACI+9B,GAAG,GAAG1rI,EAAE,GAAG4tG,EADf;AAAA,gBAEI+9B,KAAK,GAAGP,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAF9B;AAAA,gBAGIO,KAAK,GAAGH,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAH9B;AAAA,gBAIIG,GAAG,GAAGx4O,IAAI,CAACqC,IAAL,CAAUi2O,KAAV,CAJV;AAAA,gBAKIG,GAAG,GAAGz4O,IAAI,CAACqC,IAAL,CAAU81O,KAAV,CALV;AAAA,gBAMIpsO,CAAC,GAAG9D,CAAC,GAAGjI,IAAI,CAACiU,GAAL,CAAS,CAACgjO,EAAE,GAAGj3O,IAAI,CAACmU,IAAL,CAAU,CAACmkO,KAAK,GAAGH,KAAR,GAAgBI,KAAjB,KAA2B,IAAIC,GAAJ,GAAUC,GAArC,CAAV,CAAN,IAA8D,CAAvE,CANZ;AAAA,gBAOIC,GAAG,GAAG3sO,CAAC,GAAG0sO,GAPd;AAAA,gBAQIE,GAAG,GAAG5sO,CAAC,GAAGysO,GARd,CADG,CAWH;;AACA,gBAAIx4O,IAAI,CAACiT,GAAL,CAASylO,GAAG,GAAG,CAAf,IAAoBphK,OAAxB,EAAiC;AAC/B,mBAAK12D,CAAL,IAAU,OAAO8rF,EAAE,GAAGgsI,GAAG,GAAGT,GAAlB,IAAyB,GAAzB,IAAgCxrI,EAAE,GAAGisI,GAAG,GAAGR,GAA3C,CAAV;AACD;;AAED,iBAAKt3N,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,OAApB,GAA+B,EAAEiwO,GAAG,GAAGE,GAAN,GAAYH,GAAG,GAAGI,GAApB,CAA/B,GAA2D,GAA3D,IAAkE,KAAKd,GAAL,GAAW7qI,EAAE,GAAGisI,GAAG,GAAGZ,GAAxF,IAA+F,GAA/F,IAAsG,KAAKP,GAAL,GAAW/qI,EAAE,GAAGksI,GAAG,GAAGX,GAA5H,CAAV;AACD;AACF,GAnE+B;AAoEhCh9B,EAAAA,GAAG,EAAE,UAAS56M,CAAT,EAAYue,CAAZ,EAAe1W,CAAf,EAAkBihO,EAAlB,EAAsBC,EAAtB,EAA0ByP,GAA1B,EAA+B;AAClCx4O,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb,EAAgB1W,CAAC,GAAG,CAACA,CAArB,EAAwB2wO,GAAG,GAAG,CAAC,CAACA,GAAhC;AACA,QAAI7yN,EAAE,GAAG9d,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASk1N,EAAT,CAAb;AAAA,QACInqN,EAAE,GAAG9W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASm1N,EAAT,CADb;AAAA,QAEI5uB,EAAE,GAAGl6M,CAAC,GAAG2lB,EAFb;AAAA,QAGIw0L,EAAE,GAAG57L,CAAC,GAAGI,EAHb;AAAA,QAII85N,EAAE,GAAG,IAAID,GAJb;AAAA,QAKI3oC,EAAE,GAAG2oC,GAAG,GAAG1P,EAAE,GAAGC,EAAR,GAAaA,EAAE,GAAGD,EAL9B,CAFkC,CASlC;;AACA,QAAIjhO,CAAC,GAAG,CAAR,EAAW,MAAM,IAAIzP,KAAJ,CAAU,sBAAsByP,CAAhC,CAAN,CAVuB,CAYlC;;AACA,QAAI,KAAKsvO,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAK32N,CAAL,IAAU,MAAM05L,EAAN,GAAW,GAAX,GAAiBC,EAA3B;AACD,KAFD,CAIA;AAJA,SAKK,IAAIv6M,IAAI,CAACiT,GAAL,CAAS,KAAKskO,GAAL,GAAWj9B,EAApB,IAA0BhjI,OAA1B,IAAqCt3E,IAAI,CAACiT,GAAL,CAAS,KAAKukO,GAAL,GAAWj9B,EAApB,IAA0BjjI,OAAnE,EAA4E;AAC/E,aAAK12D,CAAL,IAAU,MAAM05L,EAAN,GAAW,GAAX,GAAiBC,EAA3B;AACD,OApBiC,CAsBlC;;;AACA,QAAI,CAACtyM,CAAL,EAAQ,OAvB0B,CAyBlC;;AACA,QAAIgoM,EAAE,GAAG,CAAT,EAAYA,EAAE,GAAGA,EAAE,GAAGinC,GAAL,GAAWA,GAAhB,CA1BsB,CA4BlC;;AACA,QAAIjnC,EAAE,GAAGknC,UAAT,EAAqB;AACnB,WAAKv2N,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,OAApB,GAA8B4wO,EAA9B,GAAmC,GAAnC,IAA0Cz4O,CAAC,GAAG2lB,EAA9C,IAAoD,GAApD,IAA2DpH,CAAC,GAAGI,EAA/D,IAAqE,GAArE,GAA2E9W,CAA3E,GAA+E,GAA/E,GAAqFA,CAArF,GAAyF,OAAzF,GAAmG4wO,EAAnG,GAAwG,GAAxG,IAA+G,KAAKtB,GAAL,GAAWj9B,EAA1H,IAAgI,GAAhI,IAAuI,KAAKk9B,GAAL,GAAWj9B,EAAlJ,CAAV;AACD,KAFD,CAIA;AAJA,SAKK,IAAItK,EAAE,GAAG34H,OAAT,EAAkB;AACrB,aAAK12D,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,KAApB,GAA6B,EAAEgoM,EAAE,IAAIgnC,EAAR,CAA7B,GAA4C,GAA5C,GAAkD4B,EAAlD,GAAuD,GAAvD,IAA8D,KAAKtB,GAAL,GAAWn3O,CAAC,GAAG6H,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASm1N,EAAT,CAAjF,IAAiG,GAAjG,IAAwG,KAAKqO,GAAL,GAAW74N,CAAC,GAAG1W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASo1N,EAAT,CAA3H,CAAV;AACD;AACF,GAzG+B;AA0GhC2P,EAAAA,IAAI,EAAE,UAAS14O,CAAT,EAAYue,CAAZ,EAAe4nC,CAAf,EAAkBC,CAAlB,EAAqB;AACzB,SAAK5lC,CAAL,IAAU,OAAO,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAA9B,IAAmC,GAAnC,IAA0C,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAjE,IAAsE,GAAtE,GAA6E,CAAC4nC,CAA9E,GAAmF,GAAnF,GAA0F,CAACC,CAA3F,GAAgG,GAAhG,GAAuG,CAACD,CAAxG,GAA6G,GAAvH;AACD,GA5G+B;AA6GhC38C,EAAAA,QAAQ,EAAE,YAAW;AACnB,WAAO,KAAKgX,CAAZ;AACD;AA/G+B,CAAlC;eAkHetY;;;;;;;;;;;;;;;ACjIf;;;;;;;;;;;ACAe,kBAASlI,CAAT,EAAY;AACzB,SAAO,SAASy5H,QAAT,GAAoB;AACzB,WAAOz5H,CAAP;AACD,GAFD;AAGD;;;;;;;;;;ACJM,IAAI6S,GAAG,GAAGjT,IAAI,CAACiT,GAAf;;AACA,IAAI1C,KAAK,GAAGvQ,IAAI,CAACuQ,KAAjB;;AACA,IAAIyD,GAAG,GAAGhU,IAAI,CAACgU,GAAf;;AACA,IAAI3T,GAAG,GAAGL,IAAI,CAACK,GAAf;;AACA,IAAIF,GAAG,GAAGH,IAAI,CAACG,GAAf;;AACA,IAAI4T,GAAG,GAAG/T,IAAI,CAAC+T,GAAf;;AACA,IAAI1R,IAAI,GAAGrC,IAAI,CAACqC,IAAhB;;AAEA,IAAIi1E,OAAO,GAAG,KAAd;;AACA,IAAI2/J,EAAE,GAAGj3O,IAAI,CAACuiC,EAAd;;AACA,IAAIw2M,MAAM,GAAG9B,EAAE,GAAG,CAAlB;;AACA,IAAIC,GAAG,GAAG,IAAID,EAAd;;;AAEA,SAAS9iO,IAAT,CAAc/T,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAC,GAAG,CAAC,CAAL,GAAS62O,EAAT,GAAcj3O,IAAI,CAACmU,IAAL,CAAU/T,CAAV,CAAjC;AACD;;AAEM,SAAS8T,IAAT,CAAc9T,CAAd,EAAiB;AACtB,SAAOA,CAAC,IAAI,CAAL,GAAS24O,MAAT,GAAkB34O,CAAC,IAAI,CAAC,CAAN,GAAU,CAAC24O,MAAX,GAAoB/4O,IAAI,CAACkU,IAAL,CAAU9T,CAAV,CAA7C;AACD;;;;;;;;;ACnBD;;AACA;;AACA;;;;AAEA,SAAS44O,cAAT,CAAwBlyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACmyO,WAAT;AACD;;AAED,SAASC,cAAT,CAAwBpyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACqyO,WAAT;AACD;;AAED,SAASC,aAAT,CAAuBtyO,CAAvB,EAA0B;AACxB,SAAOA,CAAC,CAACuyO,UAAT;AACD;;AAED,SAASC,WAAT,CAAqBxyO,CAArB,EAAwB;AACtB,SAAOA,CAAC,CAACyyO,QAAT;AACD;;AAED,SAASC,WAAT,CAAqB1yO,CAArB,EAAwB;AACtB,SAAOA,CAAC,IAAIA,CAAC,CAAC2yO,QAAd,CADsB,CACE;AACzB;;AAED,SAASC,SAAT,CAAmBp/B,EAAnB,EAAuBC,EAAvB,EAA2B7tG,EAA3B,EAA+BD,EAA/B,EAAmC1zB,EAAnC,EAAuC4zB,EAAvC,EAA2CgtI,EAA3C,EAA+CC,EAA/C,EAAmD;AACjD,MAAIC,GAAG,GAAGntI,EAAE,GAAG4tG,EAAf;AAAA,MAAmBw/B,GAAG,GAAGrtI,EAAE,GAAG8tG,EAA9B;AAAA,MACIw/B,GAAG,GAAGJ,EAAE,GAAG5gK,EADf;AAAA,MACmBihK,GAAG,GAAGJ,EAAE,GAAGjtI,EAD9B;AAAA,MAEIhvG,CAAC,GAAGq8O,GAAG,GAAGH,GAAN,GAAYE,GAAG,GAAGD,GAF1B;AAGA,MAAIn8O,CAAC,GAAGA,CAAJ,GAAQ25E,aAAZ,EAAqB;AACrB35E,EAAAA,CAAC,GAAG,CAACo8O,GAAG,IAAIx/B,EAAE,GAAG5tG,EAAT,CAAH,GAAkBqtI,GAAG,IAAI1/B,EAAE,GAAGvhI,EAAT,CAAtB,IAAsCp7E,CAA1C;AACA,SAAO,CAAC28M,EAAE,GAAG38M,CAAC,GAAGk8O,GAAV,EAAet/B,EAAE,GAAG58M,CAAC,GAAGm8O,GAAxB,CAAP;AACD,EAED;AACA;;;AACA,SAASG,cAAT,CAAwB3/B,EAAxB,EAA4BC,EAA5B,EAAgC7tG,EAAhC,EAAoCD,EAApC,EAAwC4/F,EAAxC,EAA4C6tC,EAA5C,EAAgDrB,EAAhD,EAAoD;AAClD,MAAIZ,GAAG,GAAG39B,EAAE,GAAG5tG,EAAf;AAAA,MACIwrI,GAAG,GAAG39B,EAAE,GAAG9tG,EADf;AAAA,MAEIkkG,EAAE,GAAG,CAACkoC,EAAE,GAAGqB,EAAH,GAAQ,CAACA,EAAZ,IAAkB,gBAAKjC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAvB,CAF3B;AAAA,MAGIiC,EAAE,GAAGxpC,EAAE,GAAGunC,GAHd;AAAA,MAIIkC,EAAE,GAAG,CAACzpC,EAAD,GAAMsnC,GAJf;AAAA,MAKIoC,GAAG,GAAG//B,EAAE,GAAG6/B,EALf;AAAA,MAMIG,GAAG,GAAG//B,EAAE,GAAG6/B,EANf;AAAA,MAOIP,GAAG,GAAGntI,EAAE,GAAGytI,EAPf;AAAA,MAQIL,GAAG,GAAGrtI,EAAE,GAAG2tI,EARf;AAAA,MASIG,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CATxB;AAAA,MAUIW,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CAVxB;AAAA,MAWI/zN,EAAE,GAAG8zN,GAAG,GAAGQ,GAXf;AAAA,MAYIt7N,EAAE,GAAG+6N,GAAG,GAAGQ,GAZf;AAAA,MAaIj3K,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAbxB;AAAA,MAcI9W,CAAC,GAAGokM,EAAE,GAAG6tC,EAdb;AAAA,MAeIO,CAAC,GAAGJ,GAAG,GAAGP,GAAN,GAAYD,GAAG,GAAGS,GAf1B;AAAA,MAgBIxzO,CAAC,GAAG,CAACiY,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAf,IAAoB,gBAAK,eAAI,CAAJ,EAAO9W,CAAC,GAAGA,CAAJ,GAAQo7D,EAAR,GAAao3K,CAAC,GAAGA,CAAxB,CAAL,CAhB5B;AAAA,MAiBIC,GAAG,GAAG,CAACD,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAjB9B;AAAA,MAkBIs3K,GAAG,GAAG,CAAC,CAACF,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EAlB/B;AAAA,MAmBIu3K,GAAG,GAAG,CAACH,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAnB9B;AAAA,MAoBIw3K,GAAG,GAAG,CAAC,CAACJ,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EApB/B;AAAA,MAqBIy3K,GAAG,GAAGJ,GAAG,GAAGH,GArBhB;AAAA,MAsBIQ,GAAG,GAAGJ,GAAG,GAAGH,GAtBhB;AAAA,MAuBIQ,GAAG,GAAGJ,GAAG,GAAGL,GAvBhB;AAAA,MAwBIU,GAAG,GAAGJ,GAAG,GAAGL,GAxBhB,CADkD,CA2BlD;AACA;;AACA,MAAIM,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAlB,GAAwBC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA9C,EAAmDP,GAAG,GAAGE,GAAN,EAAWD,GAAG,GAAGE,GAAjB;AAEnD,SAAO;AACLK,IAAAA,EAAE,EAAER,GADC;AAELS,IAAAA,EAAE,EAAER,GAFC;AAGL1C,IAAAA,GAAG,EAAE,CAACkC,EAHD;AAILjC,IAAAA,GAAG,EAAE,CAACkC,EAJD;AAKLC,IAAAA,GAAG,EAAEK,GAAG,IAAIruC,EAAE,GAAGpkM,CAAL,GAAS,CAAb,CALH;AAMLqyO,IAAAA,GAAG,EAAEK,GAAG,IAAItuC,EAAE,GAAGpkM,CAAL,GAAS,CAAb;AANH,GAAP;AAQD;;AAEc,oBAAW;AACxB,MAAIgxO,WAAW,GAAGD,cAAlB;AAAA,MACIG,WAAW,GAAGD,cADlB;AAAA,MAEIkC,YAAY,GAAG,uBAAS,CAAT,CAFnB;AAAA,MAGIC,SAAS,GAAG,IAHhB;AAAA,MAIIhC,UAAU,GAAGD,aAJjB;AAAA,MAKIG,QAAQ,GAAGD,WALf;AAAA,MAMIG,QAAQ,GAAGD,WANf;AAAA,MAOIvtE,OAAO,GAAG,IAPd;;AASA,WAAS+uC,GAAT,GAAe;AACb,QAAIltM,MAAJ;AAAA,QACI7F,CADJ;AAAA,QAEI4pM,EAAE,GAAG,CAAConC,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAFV;AAAA,QAGIqyM,EAAE,GAAG,CAAC8sC,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAHV;AAAA,QAIIkvO,EAAE,GAAGmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,IAAoC++O,YAJ7C;AAAA,QAKI5P,EAAE,GAAGoQ,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC++O,YAL3C;AAAA,QAMI9oC,EAAE,GAAG,eAAIk5B,EAAE,GAAGD,EAAT,CANT;AAAA,QAOI2P,EAAE,GAAG1P,EAAE,GAAGD,EAPd;;AASA,QAAI,CAACj9D,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB,CAVD,CAYb;;AACA,QAAIu+L,EAAE,GAAGwF,EAAT,EAAa5pM,CAAC,GAAGokM,EAAJ,EAAQA,EAAE,GAAGwF,EAAb,EAAiBA,EAAE,GAAG5pM,CAAtB,CAbA,CAeb;;AACA,QAAI,EAAEokM,EAAE,GAAG/0H,aAAP,CAAJ,EAAqB20F,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAAlB,EAArB,CAEA;AAFA,SAGK,IAAIxnC,EAAE,GAAGinC,YAAM5/J,aAAf,EAAwB;AAC3B20F,QAAAA,OAAO,CAACwrE,MAAR,CAAeprC,EAAE,GAAG,eAAI68B,EAAJ,CAApB,EAA6B78B,EAAE,GAAG,eAAI68B,EAAJ,CAAlC;AACAj9D,QAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB68B,EAAtB,EAA0BC,EAA1B,EAA8B,CAAC0P,EAA/B;;AACA,YAAIhnC,EAAE,GAAGv6H,aAAT,EAAkB;AAChB20F,UAAAA,OAAO,CAACwrE,MAAR,CAAe5lC,EAAE,GAAG,eAAIs3B,EAAJ,CAApB,EAA6Bt3B,EAAE,GAAG,eAAIs3B,EAAJ,CAAlC;AACAl9D,UAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsBs3B,EAAtB,EAA0BD,EAA1B,EAA8B2P,EAA9B;AACD;AACF,OAPI,CASL;AATK,WAUA;AACH,cAAIyC,GAAG,GAAGpS,EAAV;AAAA,cACIqS,GAAG,GAAGpS,EADV;AAAA,cAEIqS,GAAG,GAAGtS,EAFV;AAAA,cAGIuS,GAAG,GAAGtS,EAHV;AAAA,cAIIuS,GAAG,GAAGzrC,EAJV;AAAA,cAKI0rC,GAAG,GAAG1rC,EALV;AAAA,cAMI2rC,EAAE,GAAGnC,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC,CAN3C;AAAA,cAOI6hP,EAAE,GAAID,EAAE,GAAGtkK,aAAN,KAAmB+jK,SAAS,GAAG,CAACA,SAAS,CAAC/gP,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,CAAJ,GAAuC,gBAAK63M,EAAE,GAAGA,EAAL,GAAUxF,EAAE,GAAGA,EAApB,CAAnE,CAPT;AAAA,cAQI6tC,EAAE,GAAG,eAAI,eAAI7tC,EAAE,GAAGwF,EAAT,IAAe,CAAnB,EAAsB,CAACupC,YAAY,CAAC9gP,KAAb,CAAmB,IAAnB,EAAyBN,SAAzB,CAAvB,CART;AAAA,cASI8hP,GAAG,GAAG5B,EATV;AAAA,cAUI6B,GAAG,GAAG7B,EAVV;AAAA,cAWIh1B,EAXJ;AAAA,cAYItkI,EAZJ,CADG,CAeH;;AACA,cAAIi7J,EAAE,GAAGvkK,aAAT,EAAkB;AAChB,gBAAI6kI,EAAE,GAAG,gBAAK0/B,EAAE,GAAGhqC,EAAL,GAAU,eAAI+pC,EAAJ,CAAf,CAAT;AAAA,gBACI5sH,EAAE,GAAG,gBAAK6sH,EAAE,GAAGxvC,EAAL,GAAU,eAAIuvC,EAAJ,CAAf,CADT;AAEA,gBAAI,CAACF,GAAG,IAAIv/B,EAAE,GAAG,CAAb,IAAkB7kI,aAAtB,EAA+B6kI,EAAE,IAAK08B,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqB2C,GAAG,IAAIr/B,EAA5B,EAAgCs/B,GAAG,IAAIt/B,EAAvC,CAA/B,KACKu/B,GAAG,GAAG,CAAN,EAASF,GAAG,GAAGC,GAAG,GAAG,CAACvS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACL,gBAAI,CAACwS,GAAG,IAAI3sH,EAAE,GAAG,CAAb,IAAkB13C,aAAtB,EAA+B03C,EAAE,IAAK6pH,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqByC,GAAG,IAAItsH,EAA5B,EAAgCusH,GAAG,IAAIvsH,EAAvC,CAA/B,KACK2sH,GAAG,GAAG,CAAN,EAASL,GAAG,GAAGC,GAAG,GAAG,CAACrS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACN;;AAED,cAAI8O,GAAG,GAAG5rC,EAAE,GAAG,eAAIivC,GAAJ,CAAf;AAAA,cACIpD,GAAG,GAAG7rC,EAAE,GAAG,eAAIivC,GAAJ,CADf;AAAA,cAEIzB,GAAG,GAAGhoC,EAAE,GAAG,eAAI4pC,GAAJ,CAFf;AAAA,cAGI3B,GAAG,GAAGjoC,EAAE,GAAG,eAAI4pC,GAAJ,CAHf,CAzBG,CA8BH;;AACA,cAAIvB,EAAE,GAAG5iK,aAAT,EAAkB;AAChB,gBAAI+iK,GAAG,GAAGhuC,EAAE,GAAG,eAAIkvC,GAAJ,CAAf;AAAA,gBACIjB,GAAG,GAAGjuC,EAAE,GAAG,eAAIkvC,GAAJ,CADf;AAAA,gBAEIhB,GAAG,GAAG1oC,EAAE,GAAG,eAAI2pC,GAAJ,CAFf;AAAA,gBAGIhB,GAAG,GAAG3oC,EAAE,GAAG,eAAI2pC,GAAJ,CAHf;AAAA,gBAIIQ,EAJJ,CADgB,CAOhB;;AACA,gBAAI/rC,EAAE,GAAGgnC,QAAL,KAAY+E,EAAE,GAAGtC,SAAS,CAACzB,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqBH,GAArB,EAA0BC,GAA1B,EAA+BT,GAA/B,EAAoCC,GAApC,CAA1B,CAAJ,EAAyE;AACvE,kBAAIl2O,EAAE,GAAGq0O,GAAG,GAAG+D,EAAE,CAAC,CAAD,CAAjB;AAAA,kBACIC,EAAE,GAAG/D,GAAG,GAAG8D,EAAE,CAAC,CAAD,CADjB;AAAA,kBAEIE,EAAE,GAAG7B,GAAG,GAAG2B,EAAE,CAAC,CAAD,CAFjB;AAAA,kBAGIG,EAAE,GAAG7B,GAAG,GAAG0B,EAAE,CAAC,CAAD,CAHjB;AAAA,kBAIII,EAAE,GAAG,IAAI,eAAI,gBAAK,CAACx4O,EAAE,GAAGs4O,EAAL,GAAUD,EAAE,GAAGE,EAAhB,KAAuB,gBAAKv4O,EAAE,GAAGA,EAAL,GAAUq4O,EAAE,GAAGA,EAApB,IAA0B,gBAAKC,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAAjD,CAAL,IAAkF,CAAtF,CAJb;AAAA,kBAKIE,EAAE,GAAG,gBAAKL,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAAV,GAAgBA,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAA/B,CALT;AAMAF,cAAAA,GAAG,GAAG,eAAI5B,EAAJ,EAAQ,CAACroC,EAAE,GAAGwqC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACAL,cAAAA,GAAG,GAAG,eAAI7B,EAAJ,EAAQ,CAAC7tC,EAAE,GAAGgwC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACD;AACF,WAjDE,CAmDH;;;AACA,cAAI,EAAET,GAAG,GAAGrkK,aAAR,CAAJ,EAAsB20F,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,EAAtB,CAEA;AAFA,eAGK,IAAI6D,GAAG,GAAGzkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACM,GAAD,EAAMC,GAAN,EAAWvC,GAAX,EAAgBC,GAAhB,EAAqB7rC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAACI,GAAD,EAAMC,GAAN,EAAWT,GAAX,EAAgBC,GAAhB,EAAqBztC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AAEA5sE,cAAAA,OAAO,CAACwrE,MAAR,CAAevyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI6D,GAAG,GAAG7B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB,iBAAM6Y,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoG,CAACxB,EAArG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAMn7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,GAA0BjsE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsBivC,GAAtB,EAA2BC,GAA3B,EAAgC,CAAC1C,EAAjC,CAA1B,CAzEF,CA2EH;AACA;;AACA,cAAI,EAAEhnC,EAAE,GAAGv6H,aAAP,KAAmB,EAAEokK,GAAG,GAAGpkK,aAAR,CAAvB,EAAyC20F,OAAO,CAAC0rE,MAAR,CAAekC,GAAf,EAAoBC,GAApB,EAAzC,CAEA;AAFA,eAGK,IAAIgC,GAAG,GAAGxkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACJ,GAAD,EAAMC,GAAN,EAAWO,GAAX,EAAgBC,GAAhB,EAAqBzoC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAAChC,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqB3oC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AAEA5sE,cAAAA,OAAO,CAAC0rE,MAAR,CAAezyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI4D,GAAG,GAAG5B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB,iBAAMqT,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoGxB,EAApG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAMl7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB4pC,GAAtB,EAA2BD,GAA3B,EAAgC3C,EAAhC;AACN;AAED5sE,IAAAA,OAAO,CAACyrE,SAAR;AAEA,QAAI5pO,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAEDktM,EAAAA,GAAG,CAACshC,QAAJ,GAAe,YAAW;AACxB,QAAIr0O,CAAC,GAAG,CAAC,CAACgxO,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAD,GAAsC,CAACm/O,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAxC,IAA8E,CAAtF;AAAA,QACImH,CAAC,GAAG,CAAC,CAACk4O,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAAD,GAAqC,CAACu/O,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAAvC,IAA0E,CAA1E,GAA8Ei9O,WAAK,CAD3F;AAEA,WAAO,CAAC,eAAI91O,CAAJ,IAAS8G,CAAV,EAAa,eAAI9G,CAAJ,IAAS8G,CAAtB,CAAP;AACD,GAJD;;AAMA+yM,EAAAA,GAAG,CAACi+B,WAAJ,GAAkB,UAASr4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0/O,WAAW,GAAG,OAAOr4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFi+B,WAA5F;AACD,GAFD;;AAIAj+B,EAAAA,GAAG,CAACm+B,WAAJ,GAAkB,UAASv4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4/O,WAAW,GAAG,OAAOv4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFm+B,WAA5F;AACD,GAFD;;AAIAn+B,EAAAA,GAAG,CAACogC,YAAJ,GAAmB,UAASx6N,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6hP,YAAY,GAAG,OAAOx6N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7C,EAA2Do6L,GAA/E,IAAsFogC,YAA7F;AACD,GAFD;;AAIApgC,EAAAA,GAAG,CAACqgC,SAAJ,GAAgB,UAASz6N,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8hP,SAAS,GAAGz6N,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7D,EAA2Eo6L,GAA/F,IAAsGqgC,SAA7G;AACD,GAFD;;AAIArgC,EAAAA,GAAG,CAACq+B,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDo6L,GAA7E,IAAoFq+B,UAA3F;AACD,GAFD;;AAIAr+B,EAAAA,GAAG,CAACu+B,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFu+B,QAAzF;AACD,GAFD;;AAIAv+B,EAAAA,GAAG,CAACy+B,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFy+B,QAAzF;AACD,GAFD;;AAIAz+B,EAAAA,GAAG,CAAC/uC,OAAJ,GAAc,UAASrrJ,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkCo6L,GAAtD,IAA6D/uC,OAApE;AACD,GAFD;;AAIA,SAAO+uC,GAAP;AACD;;;;;;;;;ACpQM,IAAI13M,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA5B;;;AAEQ,kBAASlD,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,QAAb,IAAyB,YAAYA,CAArC,GACHA,CADG,CACD;AADC,IAEHrG,KAAK,CAACuR,IAAN,CAAWlL,CAAX,CAFJ,CADyB,CAGN;AACpB;;;;;;;;;ACND,SAASwrJ,MAAT,CAAgBqgB,OAAhB,EAAyB;AACvB,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDrgB,MAAM,CAACvxJ,SAAP,GAAmB;AACjBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHgB;AAIjBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANgB;AAOjBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GATgB;AAUjBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAbgB;AAcjBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,aAAKL,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB;;AAA4B;AAHvC;AAKD;AArBgB,CAAnB;;AAwBe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIrgB,MAAJ,CAAWqgB,OAAX,CAAP;AACD;;;;;;;;;;AC9BM,SAAS7rK,CAAT,CAAWm+B,CAAX,EAAc;AACnB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;AAEM,SAAS5f,CAAT,CAAW4f,CAAX,EAAc;AACnB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;;;;;;;;ACND;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASn+B,CAAT,EAAYue,CAAZ,EAAe;AAC5B,MAAIsjM,OAAO,GAAG,uBAAS,IAAT,CAAd;AAAA,MACIh2C,OAAO,GAAG,IADd;AAAA,MAEI6wE,KAAK,GAAGC,eAFZ;AAAA,MAGIp5N,MAAM,GAAG,IAHb;AAKAvjB,EAAAA,CAAC,GAAG,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA+BA,CAAC,KAAK+uH,SAAP,GAAoB6tH,QAApB,GAA6B,uBAAS58O,CAAT,CAA/D;AACAue,EAAAA,CAAC,GAAG,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA+BA,CAAC,KAAKwwG,SAAP,GAAoB8tH,QAApB,GAA6B,uBAASt+N,CAAT,CAA/D;;AAEA,WAAS6P,IAAT,CAAcvlB,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAD7B;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAMA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0Bv5N,MAAM,CAACg5N,SAAP,GAA1B,KACKh5N,MAAM,CAACk5N,OAAP;AACN;;AACD,UAAIK,QAAJ,EAAcv5N,MAAM,CAAC63L,KAAP,CAAa,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAf,EAA6B,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAA/B;AACf;;AAED,QAAI6E,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED0gB,EAAAA,IAAI,CAACpuB,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4EpuB,CAAnF;AACD,GAFD;;AAIAouB,EAAAA,IAAI,CAAC7P,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4E7P,CAAnF;AACD,GAFD;;AAIA6P,EAAAA,IAAI,CAACyzL,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuD4N,IAA3E,IAAmFyzL,OAA1F;AACD,GAFD;;AAIAzzL,EAAAA,IAAI,CAACsuN,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyDz9I,IAA7E,IAAqFsuN,KAA5F;AACD,GAFD;;AAIAtuN,EAAAA,IAAI,CAACy9I,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmE4N,IAAvF,IAA+Fy9I,OAAtG;AACD,GAFD;;AAIA,SAAOz9I,IAAP;AACD;;;;;;;;;ACxDD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS8rL,EAAT,EAAaC,EAAb,EAAiB9tG,EAAjB,EAAqB;AAClC,MAAIC,EAAE,GAAG,IAAT;AAAA,MACIu1G,OAAO,GAAG,uBAAS,IAAT,CADd;AAAA,MAEIh2C,OAAO,GAAG,IAFd;AAAA,MAGI6wE,KAAK,GAAGC,eAHZ;AAAA,MAIIp5N,MAAM,GAAG,IAJb;AAMA22L,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAKnrF,SAAR,GAAqB6tH,QAArB,GAA8B,uBAAS,CAAC1iC,EAAV,CAAnE;AACAC,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAKprF,SAAR,GAAqB,uBAAS,CAAT,CAArB,GAAmC,uBAAS,CAACorF,EAAV,CAAxE;AACA9tG,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAK0iB,SAAR,GAAqB8tH,QAArB,GAA8B,uBAAS,CAACxwI,EAAV,CAAnE;;AAEA,WAASswG,IAAT,CAAc9zM,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIiK,CADJ;AAAA,QAEIqT,CAFJ;AAAA,QAGIpP,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAH7B;AAAA,QAIIuN,CAJJ;AAAA,QAKIo2O,QAAQ,GAAG,KALf;AAAA,QAMIpvO,MANJ;AAAA,QAOIqvO,GAAG,GAAG,IAAIpjP,KAAJ,CAAUoO,CAAV,CAPV;AAAA,QAQIi1O,GAAG,GAAG,IAAIrjP,KAAJ,CAAUoO,CAAV,CARV;AAUA,QAAI8jK,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0B;AACxBh5O,UAAAA,CAAC,GAAGjK,CAAJ;AACA0pB,UAAAA,MAAM,CAAC64N,SAAP;AACA74N,UAAAA,MAAM,CAACg5N,SAAP;AACD,SAJD,MAIO;AACLh5N,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAACg5N,SAAP;;AACA,eAAKplO,CAAC,GAAGtd,CAAC,GAAG,CAAb,EAAgBsd,CAAC,IAAIrT,CAArB,EAAwB,EAAEqT,CAA1B,EAA6B;AAC3BoM,YAAAA,MAAM,CAAC63L,KAAP,CAAa2hC,GAAG,CAAC5lO,CAAD,CAAhB,EAAqB6lO,GAAG,CAAC7lO,CAAD,CAAxB;AACD;;AACDoM,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAAC+4N,OAAP;AACD;AACF;;AACD,UAAIQ,QAAJ,EAAc;AACZC,QAAAA,GAAG,CAACljP,CAAD,CAAH,GAAS,CAACqgN,EAAE,CAACxzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAZ,EAA0Bm0O,GAAG,CAACnjP,CAAD,CAAH,GAAS,CAACsgN,EAAE,CAACzzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC;AACA0a,QAAAA,MAAM,CAAC63L,KAAP,CAAa9uG,EAAE,GAAG,CAACA,EAAE,CAAC5lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBk0O,GAAG,CAACljP,CAAD,CAAvC,EAA4CwyG,EAAE,GAAG,CAACA,EAAE,CAAC3lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBm0O,GAAG,CAACnjP,CAAD,CAAtE;AACD;AACF;;AAED,QAAI6T,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED,WAASuvO,QAAT,GAAoB;AAClB,WAAO,qBAAOp7B,OAAP,CAAeA,OAAf,EAAwB66B,KAAxB,CAA8BA,KAA9B,EAAqC7wE,OAArC,CAA6CA,OAA7C,CAAP;AACD;;AAED8wC,EAAAA,IAAI,CAAC38M,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD8rF,EAAE,GAAG,IAAtD,EAA4DqwG,IAAhF,IAAwFzC,EAA/F;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACzC,EAAL,GAAU,UAAS15L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6EzC,EAApF;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACrwG,EAAL,GAAU,UAAS9rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmzG,EAAE,GAAG9rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGrwG,EAAvG;AACD,GAFD;;AAIAqwG,EAAAA,IAAI,CAACp+L,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD6rF,EAAE,GAAG,IAAtD,EAA4DswG,IAAhF,IAAwFxC,EAA/F;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACxC,EAAL,GAAU,UAAS35L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6ExC,EAApF;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACtwG,EAAL,GAAU,UAAS7rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkzG,EAAE,GAAG7rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGtwG,EAAvG;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAACugC,MAAL,GACAvgC,IAAI,CAACwgC,MAAL,GAAc,YAAW;AACvB,WAAOF,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAHD;;AAKAwC,EAAAA,IAAI,CAACygC,MAAL,GAAc,YAAW;AACvB,WAAOH,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB8tF,EAAnB,CAAP;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAAC0gC,MAAL,GAAc,YAAW;AACvB,WAAOJ,QAAQ,GAAGj9O,CAAX,CAAassG,EAAb,EAAiB/tF,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACkF,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuDm8L,IAA3E,IAAmFkF,OAA1F;AACD,GAFD;;AAIAlF,EAAAA,IAAI,CAAC+/B,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyD8wC,IAA7E,IAAqF+/B,KAA5F;AACD,GAFD;;AAIA//B,EAAAA,IAAI,CAAC9wC,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmEm8L,IAAvF,IAA+F9wC,OAAtG;AACD,GAFD;;AAIA,SAAO8wC,IAAP;AACD;;;;;;;;;AE9Gc,kBAASj2M,CAAT,EAAY;AACzB,SAAOA,CAAP;AACD;;;;;;;;;ACFD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAI7J,KAAK,GAAGi9H,iBAAZ;AAAA,MACIwjH,UAAU,GAAGC,mBADjB;AAAA,MAEI15O,IAAI,GAAG,IAFX;AAAA,MAGIo1O,UAAU,GAAG,uBAAS,CAAT,CAHjB;AAAA,MAIIE,QAAQ,GAAG,uBAASrC,SAAT,CAJf;AAAA,MAKIuC,QAAQ,GAAG,uBAAS,CAAT,CALf;;AAOA,WAASmE,GAAT,CAAa30O,IAAb,EAAmB;AACjB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAD7B;AAAA,QAEI2K,CAFJ;AAAA,QAGIqT,CAHJ;AAAA,QAII/W,GAAG,GAAG,CAJV;AAAA,QAKIT,KAAK,GAAG,IAAIhG,KAAJ,CAAUoO,CAAV,CALZ;AAAA,QAMI4yM,IAAI,GAAG,IAAIhhN,KAAJ,CAAUoO,CAAV,CANX;AAAA,QAOI+gO,EAAE,GAAG,CAACmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAPV;AAAA,QAQIi2M,EAAE,GAAGjwM,IAAI,CAACG,GAAL,CAAS+2O,SAAT,EAAcl3O,IAAI,CAACK,GAAL,CAAS,CAAC62O,SAAV,EAAeqC,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkCkvO,EAAjD,CAAd,CART;AAAA,QASIC,EATJ;AAAA,QAUI5qM,CAAC,GAAGv+B,IAAI,CAACG,GAAL,CAASH,IAAI,CAACiT,GAAL,CAASg9L,EAAT,IAAe9nM,CAAxB,EAA2BsxO,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAA3B,CAVR;AAAA,QAWI6jP,EAAE,GAAGt/M,CAAC,IAAI0xK,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAlB,CAXV;AAAA,QAYI9jM,CAZJ;;AAcA,SAAKlS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,UAAI,CAACkS,CAAC,GAAG4uM,IAAI,CAACh7M,KAAK,CAAC9F,CAAD,CAAL,GAAWA,CAAZ,CAAJ,GAAqB,CAACgD,KAAK,CAACgM,IAAI,CAAChP,CAAD,CAAL,EAAUA,CAAV,EAAagP,IAAb,CAAhC,IAAsD,CAA1D,EAA6D;AAC3DzI,QAAAA,GAAG,IAAI2L,CAAP;AACD;AACF,KAnBgB,CAqBjB;;;AACA,QAAIuxO,UAAU,IAAI,IAAlB,EAAwB39O,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOw5O,UAAU,CAAC3iC,IAAI,CAAC9gN,CAAD,CAAL,EAAU8gN,IAAI,CAAC72M,CAAD,CAAd,CAAjB;AAAsC,KAAlE,EAAxB,KACK,IAAID,IAAI,IAAI,IAAZ,EAAkBlE,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOD,IAAI,CAACgF,IAAI,CAAChP,CAAD,CAAL,EAAUgP,IAAI,CAAC/E,CAAD,CAAd,CAAX;AAAgC,KAA5D,EAvBN,CAyBjB;;AACA,SAAKjK,CAAC,GAAG,CAAJ,EAAOsd,CAAC,GAAG/W,GAAG,GAAG,CAACyvM,EAAE,GAAG9nM,CAAC,GAAG01O,EAAV,IAAgBr9O,GAAnB,GAAyB,CAA5C,EAA+CvG,CAAC,GAAGkO,CAAnD,EAAsD,EAAElO,CAAF,EAAKivO,EAAE,GAAGC,EAAhE,EAAoE;AAClEjlO,MAAAA,CAAC,GAAGnE,KAAK,CAAC9F,CAAD,CAAT,EAAckS,CAAC,GAAG4uM,IAAI,CAAC72M,CAAD,CAAtB,EAA2BilO,EAAE,GAAGD,EAAE,IAAI/8N,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAGoL,CAAZ,GAAgB,CAApB,CAAF,GAA2BsmO,EAA3D,EAA+D9iC,IAAI,CAAC72M,CAAD,CAAJ,GAAU;AACvE+E,QAAAA,IAAI,EAAEA,IAAI,CAAC/E,CAAD,CAD6D;AAEvEnE,QAAAA,KAAK,EAAE9F,CAFgE;AAGvEgD,QAAAA,KAAK,EAAEkP,CAHgE;AAIvEktO,QAAAA,UAAU,EAAEnQ,EAJ2D;AAKvEqQ,QAAAA,QAAQ,EAAEpQ,EAL6D;AAMvEsQ,QAAAA,QAAQ,EAAEl7M;AAN6D,OAAzE;AAQD;;AAED,WAAOw8K,IAAP;AACD;;AAED6iC,EAAAA,GAAG,CAAC3gP,KAAJ,GAAY,UAAS2jB,CAAT,EAAY;AACtB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDg9N,GAAxE,IAA+E3gP,KAAtF;AACD,GAFD;;AAIA2gP,EAAAA,GAAG,CAACF,UAAJ,GAAiB,UAAS98N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmkP,UAAU,GAAG98N,CAAb,EAAgB3c,IAAI,GAAG,IAAvB,EAA6B25O,GAAjD,IAAwDF,UAA/D;AACD,GAFD;;AAIAE,EAAAA,GAAG,CAAC35O,IAAJ,GAAW,UAAS2c,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0K,IAAI,GAAG2c,CAAP,EAAU88N,UAAU,GAAG,IAAvB,EAA6BE,GAAjD,IAAwD35O,IAA/D;AACD,GAFD;;AAIA25O,EAAAA,GAAG,CAACvE,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDg9N,GAA7E,IAAoFvE,UAA3F;AACD,GAFD;;AAIAuE,EAAAA,GAAG,CAACrE,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFrE,QAAzF;AACD,GAFD;;AAIAqE,EAAAA,GAAG,CAACnE,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFnE,QAAzF;AACD,GAFD;;AAIA,SAAOmE,GAAP;AACD;;;;;;;;;;AC/ED;;;;AAEO,IAAIE,iBAAiB,GAAGC,WAAW,CAAChB,eAAD,CAAnC;;;AAEP,SAASiB,MAAT,CAAgBlB,KAAhB,EAAuB;AACrB,OAAKmB,MAAL,GAAcnB,KAAd;AACD;;AAEDkB,MAAM,CAAC3jP,SAAP,GAAmB;AACjBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKyB,MAAL,CAAYzB,SAAZ;AACD,GAHgB;AAIjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKuB,MAAL,CAAYvB,OAAZ;AACD,GANgB;AAOjBC,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKsB,MAAL,CAAYtB,SAAZ;AACD,GATgB;AAUjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKoB,MAAL,CAAYpB,OAAZ;AACD,GAZgB;AAajBrhC,EAAAA,KAAK,EAAE,UAASr6M,CAAT,EAAY8G,CAAZ,EAAe;AACpB,SAAKg2O,MAAL,CAAYziC,KAAZ,CAAkBvzM,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAtB,EAAmC8G,CAAC,GAAG,CAACjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAxC;AACD;AAfgB,CAAnB;;AAkBe,SAAS48O,WAAT,CAAqBjB,KAArB,EAA4B;AAEzC,WAASoB,MAAT,CAAgBjyE,OAAhB,EAAyB;AACvB,WAAO,IAAI+xE,MAAJ,CAAWlB,KAAK,CAAC7wE,OAAD,CAAhB,CAAP;AACD;;AAEDiyE,EAAAA,MAAM,CAACD,MAAP,GAAgBnB,KAAhB;AAEA,SAAOoB,MAAP;AACD;;;;;;;;;;ACnCD;;AACA;;;;;;;;AAEO,SAASC,UAAT,CAAoBpyO,CAApB,EAAuB;AAC5B,MAAIrF,CAAC,GAAGqF,CAAC,CAAC+wO,KAAV;AAEA/wO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;;AAEA5S,EAAAA,CAAC,CAAC+wO,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAOlyO,CAAP;AACD;;AAEc,oBAAW;AACxB,SAAOoyO,UAAU,CAAC,qBAAOrB,KAAP,CAAagB,yBAAb,CAAD,CAAjB;AACD;;;;;;;;;AClBD;;AACA;;AACA;;;;;;;;AAEe,oBAAW;AACxB,MAAI38O,CAAC,GAAG,qBAAO27O,KAAP,CAAagB,yBAAb,CAAR;AAAA,MACIp3O,CAAC,GAAGvF,CAAC,CAAC27O,KADV;AAAA,MAEIxiC,EAAE,GAAGn5M,CAAC,CAACm8O,MAFX;AAAA,MAGI5wI,EAAE,GAAGvrG,CAAC,CAACs8O,MAHX;AAAA,MAIIljC,EAAE,GAAGp5M,CAAC,CAACo8O,MAJX;AAAA,MAKI9wI,EAAE,GAAGtrG,CAAC,CAACq8O,MALX;AAOAr8O,EAAAA,CAAC,CAACi9O,KAAF,GAAUj9O,CAAC,CAACf,CAAZ,EAAe,OAAOe,CAAC,CAACf,CAAxB;AACAe,EAAAA,CAAC,CAACk4O,UAAF,GAAel4O,CAAC,CAACm5M,EAAjB,EAAqB,OAAOn5M,CAAC,CAACm5M,EAA9B;AACAn5M,EAAAA,CAAC,CAACo4O,QAAF,GAAap4O,CAAC,CAACurG,EAAf,EAAmB,OAAOvrG,CAAC,CAACurG,EAA5B;AACAvrG,EAAAA,CAAC,CAACiV,MAAF,GAAWjV,CAAC,CAACwd,CAAb,EAAgB,OAAOxd,CAAC,CAACwd,CAAzB;AACAxd,EAAAA,CAAC,CAAC83O,WAAF,GAAgB93O,CAAC,CAACo5M,EAAlB,EAAsB,OAAOp5M,CAAC,CAACo5M,EAA/B;AACAp5M,EAAAA,CAAC,CAACg4O,WAAF,GAAgBh4O,CAAC,CAACsrG,EAAlB,EAAsB,OAAOtrG,CAAC,CAACsrG,EAA/B;AACAtrG,EAAAA,CAAC,CAACk9O,cAAF,GAAmB,YAAW;AAAE,WAAO,4BAAW/jC,EAAE,EAAb,CAAP;AAA0B,GAA1D,EAA4D,OAAOn5M,CAAC,CAACm8O,MAArE;AACAn8O,EAAAA,CAAC,CAACm9O,YAAF,GAAiB,YAAW;AAAE,WAAO,4BAAW5xI,EAAE,EAAb,CAAP;AAA0B,GAAxD,EAA0D,OAAOvrG,CAAC,CAACs8O,MAAnE;AACAt8O,EAAAA,CAAC,CAACo9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAWhkC,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOp5M,CAAC,CAACo8O,MAAtE;AACAp8O,EAAAA,CAAC,CAACq9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAW/xI,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOtrG,CAAC,CAACq8O,MAAtE;;AAEAr8O,EAAAA,CAAC,CAAC27O,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAO98O,CAAP;AACD;;;;;;;;;AC5Bc,kBAASf,CAAT,EAAYue,CAAZ,EAAe;AAC5B,SAAO,CAAC,CAACA,CAAC,GAAG,CAACA,CAAN,IAAW3e,IAAI,CAACgU,GAAL,CAAS5T,CAAC,IAAIJ,IAAI,CAACuiC,EAAL,GAAU,CAAxB,CAAZ,EAAwC5jB,CAAC,GAAG3e,IAAI,CAAC+T,GAAL,CAAS3T,CAAT,CAA5C,CAAP;AACD;;;;;;;;;;;ACFD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASq+O,UAAT,CAAoB33O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAACipD,MAAT;AACD;;AAED,SAAS2uL,UAAT,CAAoB53O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC0pC,MAAT;AACD;;AAED,SAASmuM,IAAT,CAAc7B,KAAd,EAAqB;AACnB,MAAI/sL,MAAM,GAAG0uL,UAAb;AAAA,MACIjuM,MAAM,GAAGkuM,UADb;AAAA,MAEIt+O,CAAC,GAAG48O,QAFR;AAAA,MAGIr+N,CAAC,GAAGs+N,QAHR;AAAA,MAIIhxE,OAAO,GAAG,IAJd;;AAMA,WAAS0yE,IAAT,GAAgB;AACd,QAAI7wO,MAAJ;AAAA,QAAYpT,IAAI,GAAG4I,aAAMvK,IAAN,CAAWiB,SAAX,CAAnB;AAAA,QAA0CyD,CAAC,GAAGsyD,MAAM,CAACz1D,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA9C;AAAA,QAAwEiD,CAAC,GAAG6yC,MAAM,CAACl2C,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA5E;;AACA,QAAI,CAACuxK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdgvO,IAAAA,KAAK,CAAC7wE,OAAD,EAAU,CAAC7rK,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAU+C,CAAV,EAAa/C,IAA5B,EAAX,EAA+C,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAAhD,EAAqE,CAAC0F,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAUiD,CAAV,EAAajD,IAA5B,EAAtE,EAA0G,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAA3G,CAAL;AACA,QAAIoT,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED6wO,EAAAA,IAAI,CAAC5uL,MAAL,GAAc,UAASnvC,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBw2D,MAAM,GAAGnvC,CAAT,EAAY+9N,IAAhC,IAAwC5uL,MAA/C;AACD,GAFD;;AAIA4uL,EAAAA,IAAI,CAACnuM,MAAL,GAAc,UAAS5vB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBi3C,MAAM,GAAG5vB,CAAT,EAAY+9N,IAAhC,IAAwCnuM,MAA/C;AACD,GAFD;;AAIAmuM,EAAAA,IAAI,CAACv+O,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4Ev+O,CAAnF;AACD,GAFD;;AAIAu+O,EAAAA,IAAI,CAAChgO,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4EhgO,CAAnF;AACD,GAFD;;AAIAggO,EAAAA,IAAI,CAAC1yE,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkC+9N,IAAtD,IAA8D1yE,OAArE;AACD,GAFD;;AAIA,SAAO0yE,IAAP;AACD;;AAED,SAASC,eAAT,CAAyB3yE,OAAzB,EAAkCquC,EAAlC,EAAsCC,EAAtC,EAA0C7tG,EAA1C,EAA8CD,EAA9C,EAAkD;AAChDw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAE,GAAG,CAACA,EAAE,GAAG5tG,EAAN,IAAY,CAAvC,EAA0C6tG,EAA1C,EAA8CD,EAA9C,EAAkD7tG,EAAlD,EAAsDC,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASoyI,aAAT,CAAuB5yE,OAAvB,EAAgCquC,EAAhC,EAAoCC,EAApC,EAAwC7tG,EAAxC,EAA4CD,EAA5C,EAAgD;AAC9Cw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAtB,EAA0BC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAA3C,EAA8CC,EAA9C,EAAkD6tG,EAAlD,EAAsD7tG,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASsxI,WAAT,CAAqB9xE,OAArB,EAA8BquC,EAA9B,EAAkCC,EAAlC,EAAsC7tG,EAAtC,EAA0CD,EAA1C,EAA8C;AAC5C,MAAI0vG,EAAE,GAAG,0BAAY7B,EAAZ,EAAgBC,EAAhB,CAAT;AAAA,MACIvrF,EAAE,GAAG,0BAAYsrF,EAAZ,EAAgBC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAAjC,CADT;AAAA,MAEIqyI,EAAE,GAAG,0BAAYpyI,EAAZ,EAAgB6tG,EAAhB,CAFT;AAAA,MAGIwkC,EAAE,GAAG,0BAAYryI,EAAZ,EAAgBD,EAAhB,CAHT;AAIAw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAet7B,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB;AACAlwC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsB7oH,EAAE,CAAC,CAAD,CAAxB,EAA6BA,EAAE,CAAC,CAAD,CAA/B,EAAoC8vH,EAAE,CAAC,CAAD,CAAtC,EAA2CA,EAAE,CAAC,CAAD,CAA7C,EAAkDC,EAAE,CAAC,CAAD,CAApD,EAAyDA,EAAE,CAAC,CAAD,CAA3D;AACD;;AAEM,SAASC,cAAT,GAA0B;AAC/B,SAAOL,IAAI,CAACC,eAAD,CAAX;AACD;;AAEM,SAASK,YAAT,GAAwB;AAC7B,SAAON,IAAI,CAACE,aAAD,CAAX;AACD;;AAEM,SAASK,UAAT,GAAsB;AAC3B,MAAInzO,CAAC,GAAG4yO,IAAI,CAACZ,WAAD,CAAZ;AACAhyO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;AACA,SAAO5S,CAAP;AACD;;;;;;;;;ACnFD;;eAEe;AACbozO,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAGu1O,QAAjB,CAAR;AACAhrE,IAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,IAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwBivO,SAAxB;AACD;AALY;;;;;;;;;eCFA;AACbiI,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAG,CAAjB,IAAsB,CAA9B;AACAuqK,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAC,CAAD,GAAKxvO,CAApB,EAAuB,CAACA,CAAxB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,CAACA,CAApB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,CAAC,CAAD,GAAKA,CAAxB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAC,CAAD,GAAKA,CAAvB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACA,CAAnB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,IAAI1vO,CAAnB,EAAsB,CAACA,CAAvB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,IAAI1vO,CAAnB,EAAsBA,CAAtB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBA,CAAlB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,IAAIA,CAAtB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,IAAIA,CAAvB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBA,CAAnB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC,CAAD,GAAK1vO,CAApB,EAAuBA,CAAvB;AACAgkK,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAhBY;;;;;;;;;ACAf,IAAI0H,KAAK,GAAGp/O,IAAI,CAACqC,IAAL,CAAU,IAAI,CAAd,CAAZ;AAAA,IACIg9O,OAAO,GAAGD,KAAK,GAAG,CADtB;eAGe;AACbD,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIid,CAAC,GAAG3e,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAG29O,OAAjB,CAAR;AAAA,QACIj/O,CAAC,GAAGue,CAAC,GAAGygO,KADZ;AAEAnzE,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAAC94N,CAAnB;AACAstJ,IAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAf,EAAkB,CAAlB;AACA6rK,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkBh5N,CAAlB;AACAstJ,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACv3O,CAAhB,EAAmB,CAAnB;AACA6rK,IAAAA,OAAO,CAACyrE,SAAR;AACD;AATY;;;;;;;;;;ACHf;;AAEA,IAAI4H,EAAE,GAAG,sBAAT;AAAA,IACIC,EAAE,GAAGv/O,IAAI,CAAC+T,GAAL,CAASkjO,WAAK,EAAd,IAAoBj3O,IAAI,CAAC+T,GAAL,CAAS,IAAIkjO,QAAJ,GAAS,EAAlB,CAD7B;AAAA,IAEIz8B,EAAE,GAAGx6M,IAAI,CAAC+T,GAAL,CAASmjO,YAAM,EAAf,IAAqBqI,EAF9B;AAAA,IAGI9kC,EAAE,GAAG,CAACz6M,IAAI,CAACgU,GAAL,CAASkjO,YAAM,EAAf,CAAD,GAAsBqI,EAH/B;eAKe;AACbJ,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAG49O,EAAjB,CAAR;AAAA,QACIl/O,CAAC,GAAGo6M,EAAE,GAAGvyM,CADb;AAAA,QAEI0W,CAAC,GAAG87L,EAAE,GAAGxyM,CAFb;AAGAgkK,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACxvO,CAAnB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAf,EAAkBue,CAAlB;;AACA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;AAC1B,UAAIkH,CAAC,GAAG+1O,YAAMj9O,CAAN,GAAU,CAAlB;AAAA,UACIyM,CAAC,GAAG1G,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CADR;AAAA,UAEI1D,CAAC,GAAGuC,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAFR;AAGA8qK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAC,GAAGwK,CAAnB,EAAsB,CAACvB,CAAD,GAAKuB,CAA3B;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGtG,CAAJ,GAAQ3C,CAAC,GAAGkhB,CAA3B,EAA8BlhB,CAAC,GAAG2C,CAAJ,GAAQsG,CAAC,GAAGiY,CAA1C;AACD;;AACDstJ,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAfY;;;;;;;;;eCPA;AACbyH,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAI6kD,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUX,IAAV,CAAR;AAAA,QACItB,CAAC,GAAG,CAACmmD,CAAD,GAAK,CADb;AAEA0lH,IAAAA,OAAO,CAAC6sE,IAAR,CAAa14O,CAAb,EAAgBA,CAAhB,EAAmBmmD,CAAnB,EAAsBA,CAAtB;AACD;AALY;;;;;;;;;ACAf,IAAIi5L,KAAK,GAAGx/O,IAAI,CAACqC,IAAL,CAAU,CAAV,CAAZ;eAEe;AACb88O,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIid,CAAC,GAAG,CAAC3e,IAAI,CAACqC,IAAL,CAAUX,IAAI,IAAI89O,KAAK,GAAG,CAAZ,CAAd,CAAT;AACAvzE,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB94N,CAAC,GAAG,CAAtB;AACAstJ,IAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC6H,KAAD,GAAS7gO,CAAxB,EAA2B,CAACA,CAA5B;AACAstJ,IAAAA,OAAO,CAAC0rE,MAAR,CAAe6H,KAAK,GAAG7gO,CAAvB,EAA0B,CAACA,CAA3B;AACAstJ,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAPY;;;;;;;;;ACFf,IAAIhxO,CAAC,GAAG,CAAC,GAAT;AAAA,IACIjJ,CAAC,GAAGuC,IAAI,CAACqC,IAAL,CAAU,CAAV,IAAe,CADvB;AAAA,IAEIkV,CAAC,GAAG,IAAIvX,IAAI,CAACqC,IAAL,CAAU,EAAV,CAFZ;AAAA,IAGIlB,CAAC,GAAG,CAACoW,CAAC,GAAG,CAAJ,GAAQ,CAAT,IAAc,CAHtB;eAKe;AACb4nO,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAGP,CAAjB,CAAR;AAAA,QACIm5M,EAAE,GAAGryM,CAAC,GAAG,CADb;AAAA,QAEIsyM,EAAE,GAAGtyM,CAAC,GAAGsP,CAFb;AAAA,QAGIm1F,EAAE,GAAG4tG,EAHT;AAAA,QAII7tG,EAAE,GAAGxkG,CAAC,GAAGsP,CAAJ,GAAQtP,CAJjB;AAAA,QAKI8wE,EAAE,GAAG,CAAC2zB,EALV;AAAA,QAMIC,EAAE,GAAGF,EANT;AAOAw/D,IAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,IAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAf,EAAmBD,EAAnB;AACAw/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAnB;AACAs/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAG4zM,EAAJ,GAAS78M,CAAC,GAAG88M,EAA5B,EAAgC98M,CAAC,GAAG68M,EAAJ,GAAS5zM,CAAC,GAAG6zM,EAA7C;AACAtuC,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGgmG,EAAJ,GAASjvG,CAAC,GAAGgvG,EAA5B,EAAgChvG,CAAC,GAAGivG,EAAJ,GAAShmG,CAAC,GAAG+lG,EAA7C;AACAw/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGqyE,EAAJ,GAASt7E,CAAC,GAAGkvG,EAA5B,EAAgClvG,CAAC,GAAGs7E,EAAJ,GAASryE,CAAC,GAAGimG,EAA7C;AACAs/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAG4zM,EAAJ,GAAS78M,CAAC,GAAG88M,EAA5B,EAAgC7zM,CAAC,GAAG6zM,EAAJ,GAAS98M,CAAC,GAAG68M,EAA7C;AACAruC,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGgmG,EAAJ,GAASjvG,CAAC,GAAGgvG,EAA5B,EAAgC/lG,CAAC,GAAG+lG,EAAJ,GAAShvG,CAAC,GAAGivG,EAA7C;AACAu/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGqyE,EAAJ,GAASt7E,CAAC,GAAGkvG,EAA5B,EAAgCjmG,CAAC,GAAGimG,EAAJ,GAASlvG,CAAC,GAAGs7E,EAA7C;AACAkzF,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAnBY;;;;;;;;;;;ACLf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,IAAI+H,OAAO,GAAG,CACnBC,eADmB,EAEnBzgC,cAFmB,EAGnB0gC,gBAHmB,EAInB5sO,eAJmB,EAKnB6sO,aALmB,EAMnBC,iBANmB,EAOnBC,YAPmB,CAAd;;;AAUQ,kBAAS5lO,IAAT,EAAexY,IAAf,EAAqB;AAClC,MAAIuqK,OAAO,GAAG,IAAd;AACA/xJ,EAAAA,IAAI,GAAG,OAAOA,IAAP,KAAgB,UAAhB,GAA6BA,IAA7B,GAAoC,uBAASA,IAAI,IAAIwlO,eAAjB,CAA3C;AACAh+O,EAAAA,IAAI,GAAG,OAAOA,IAAP,KAAgB,UAAhB,GAA6BA,IAA7B,GAAoC,uBAASA,IAAI,KAAKytH,SAAT,GAAqB,EAArB,GAA0B,CAACztH,IAApC,CAA3C;;AAEA,WAAS8hN,MAAT,GAAkB;AAChB,QAAI11M,MAAJ;AACA,QAAI,CAACm+J,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdoM,IAAAA,IAAI,CAAC5f,KAAL,CAAW,IAAX,EAAiBN,SAAjB,EAA4BmlP,IAA5B,CAAiClzE,OAAjC,EAA0C,CAACvqK,IAAI,CAACpH,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAA3C;AACA,QAAI8T,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED01M,EAAAA,MAAM,CAACtpM,IAAP,GAAc,UAAS0G,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2gB,IAAI,GAAG,OAAO0G,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAASA,CAAT,CAArC,EAAkD4iM,MAAtE,IAAgFtpM,IAAvF;AACD,GAFD;;AAIAspM,EAAAA,MAAM,CAAC9hN,IAAP,GAAc,UAASkf,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmI,IAAI,GAAG,OAAOkf,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAArC,EAAmD4iM,MAAvE,IAAiF9hN,IAAxF;AACD,GAFD;;AAIA8hN,EAAAA,MAAM,CAACv3C,OAAP,GAAiB,UAASrrJ,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B,EAAgC4iM,MAApD,IAA8Dv3C,OAArE;AACD,GAFD;;AAIA,SAAOu3C,MAAP;AACD;;;;;;;;;AC7Cc,oBAAW,CAAE;;;;;;;;;;;ACArB,SAAShI,KAAT,CAAe/nB,IAAf,EAAqBrzL,CAArB,EAAwBue,CAAxB,EAA2B;AAChC80K,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CACE,CAAC,IAAIpkD,IAAI,CAAC4jD,GAAT,GAAe5jD,IAAI,CAAC8jD,GAArB,IAA4B,CAD9B,EAEE,CAAC,IAAI9jD,IAAI,CAAC6jD,GAAT,GAAe7jD,IAAI,CAAC+jD,GAArB,IAA4B,CAF9B,EAGE,CAAC/jD,IAAI,CAAC4jD,GAAL,GAAW,IAAI5jD,IAAI,CAAC8jD,GAArB,IAA4B,CAH9B,EAIE,CAAC9jD,IAAI,CAAC6jD,GAAL,GAAW,IAAI7jD,IAAI,CAAC+jD,GAArB,IAA4B,CAJ9B,EAKE,CAAC/jD,IAAI,CAAC4jD,GAAL,GAAW,IAAI5jD,IAAI,CAAC8jD,GAApB,GAA0Bn3O,CAA3B,IAAgC,CALlC,EAME,CAACqzL,IAAI,CAAC6jD,GAAL,GAAW,IAAI7jD,IAAI,CAAC+jD,GAApB,GAA0B74N,CAA3B,IAAgC,CANlC;AAQD;;AAEM,SAASohO,KAAT,CAAe9zE,OAAf,EAAwB;AAC7B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED8zE,KAAK,CAAC1lP,SAAN,GAAkB;AAChBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHe;AAIhBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANe;AAOhBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKD,GAAL,GAAW,KAAKE,GAAL,GAAWhrK,GADtB;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXe;AAYhBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQphC,QAAAA,KAAK,CAAC,IAAD,EAAO,KAAK+7B,GAAZ,EAAiB,KAAKC,GAAtB,CAAL;AAAiC;;AACzC,WAAK,CAAL;AAAQ,aAAK+E,QAAL,CAAc5E,MAAd,CAAqB,KAAKJ,GAA1B,EAA+B,KAAKC,GAApC;;AAA0C;AAFpD;;AAIA,QAAI,KAAKiF,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAnBe;AAoBhBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,CAAC,IAAI,KAAKN,GAAT,GAAe,KAAKE,GAArB,IAA4B,CAAjD,EAAoD,CAAC,IAAI,KAAKD,GAAT,GAAe,KAAKE,GAArB,IAA4B,CAAhF;;AAAoF;;AAC7G;AAASh8B,QAAAA,KAAK,CAAC,IAAD,EAAOp7M,CAAP,EAAUue,CAAV,CAAL;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AA9Be,CAAlB;;AAiCe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAI8zE,KAAJ,CAAU9zE,OAAV,CAAP;AACD;;;;;;;;;AClDD;;AACA;;;;AAEA,SAAS+zE,WAAT,CAAqB/zE,OAArB,EAA8B;AAC5B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED+zE,WAAW,CAAC3lP,SAAZ,GAAwB;AACtBmiP,EAAAA,SAAS,EAAE3hP,aADW;AAEtB6hP,EAAAA,OAAO,EAAE7hP,aAFa;AAGtB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAC5C,KAAK7I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW9zK,GADvD;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPqB;AAQtBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKwI,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKE,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAhF;;AACA,eAAK9D,QAAL,CAAc5E,MAAd,CAAqB,CAAC,KAAKuI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAhF;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK5kC,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA;AACD;AAjBH;AAmBD,GA5BqB;AA6BtB9kC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKqD,GAAL,GAAW7/O,CAAX,EAAc,KAAKggP,GAAL,GAAWzhO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuD,GAAL,GAAW//O,CAAX,EAAc,KAAKkgP,GAAL,GAAW3hO,CAAzB;;AAA4B,aAAK49N,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKJ,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAArD,EAAwD,CAAC,KAAKk3O,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAxF;;AAA4F;;AACjJ;AAAS,0BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AAvCqB,CAAxB;;AA0Ce,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAI+zE,WAAJ,CAAgB/zE,OAAhB,CAAP;AACD;;;;;;;;;ACnDD;;AAEA,SAASs0E,SAAT,CAAmBt0E,OAAnB,EAA4B;AAC1B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDs0E,SAAS,CAAClmP,SAAV,GAAsB;AACpBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHmB;AAIpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANmB;AAOpBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKD,GAAL,GAAW,KAAKE,GAAL,GAAWhrK,GADtB;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXmB;AAYpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfmB;AAgBpBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,YAAItiC,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAAzC;AAAA,YAA4Cm6M,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAjF;AAAoF,aAAK89N,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBr9B,EAArB,EAAyBC,EAAzB,CAAb,GAA4C,KAAKgiC,QAAL,CAAc9E,MAAd,CAAqBn9B,EAArB,EAAyBC,EAAzB,CAA5C;AAA0E;;AACvL,WAAK,CAAL;AAAQ,aAAKqiC,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,0BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AA3BmB,CAAtB;;AA8Be,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIs0E,SAAJ,CAAct0E,OAAd,CAAP;AACD;;;;;;;;;ACtCD;;AAEA,SAASu0E,MAAT,CAAgBv0E,OAAhB,EAAyB31J,IAAzB,EAA+B;AAC7B,OAAKmqO,MAAL,GAAc,IAAIV,YAAJ,CAAU9zE,OAAV,CAAd;AACA,OAAKy0E,KAAL,GAAapqO,IAAb;AACD;;AAEDkqO,MAAM,CAACnmP,SAAP,GAAmB;AACjBsiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKgE,EAAL,GAAU,EAAV;AACA,SAAKC,EAAL,GAAU,EAAV;;AACA,SAAKH,MAAL,CAAY9D,SAAZ;AACD,GALgB;AAMjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIz8O,CAAC,GAAG,KAAKugP,EAAb;AAAA,QACIhiO,CAAC,GAAG,KAAKiiO,EADb;AAAA,QAEI18O,CAAC,GAAG9D,CAAC,CAAC7G,MAAF,GAAW,CAFnB;;AAIA,QAAI2K,CAAC,GAAG,CAAR,EAAW;AACT,UAAIo2M,EAAE,GAAGl6M,CAAC,CAAC,CAAD,CAAV;AAAA,UACIm6M,EAAE,GAAG57L,CAAC,CAAC,CAAD,CADV;AAAA,UAEIoH,EAAE,GAAG3lB,CAAC,CAAC8D,CAAD,CAAD,GAAOo2M,EAFhB;AAAA,UAGIv7L,EAAE,GAAGJ,CAAC,CAACza,CAAD,CAAD,GAAOq2M,EAHhB;AAAA,UAIItgN,CAAC,GAAG,CAAC,CAJT;AAAA,UAKI0D,CALJ;;AAOA,aAAO,EAAE1D,CAAF,IAAOiK,CAAd,EAAiB;AACfvG,QAAAA,CAAC,GAAG1D,CAAC,GAAGiK,CAAR;;AACA,aAAKu8O,MAAL,CAAYjlC,KAAZ,CACE,KAAKklC,KAAL,GAAatgP,CAAC,CAACnG,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBpmC,EAAE,GAAG38M,CAAC,GAAGooB,EAA7B,CADtB,EAEE,KAAK26N,KAAL,GAAa/hO,CAAC,CAAC1kB,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBnmC,EAAE,GAAG58M,CAAC,GAAGohB,EAA7B,CAFtB;AAID;AACF;;AAED,SAAK4hO,EAAL,GAAU,KAAKC,EAAL,GAAU,IAApB;;AACA,SAAKH,MAAL,CAAY5D,OAAZ;AACD,GA9BgB;AA+BjBrhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,SAAKgiO,EAAL,CAAQzmP,IAAR,CAAa,CAACkG,CAAd;;AACA,SAAKwgP,EAAL,CAAQ1mP,IAAR,CAAa,CAACykB,CAAd;AACD;AAlCgB,CAAnB;;eAqCgB,SAASkiO,MAAT,CAAgBvqO,IAAhB,EAAsB;AAEpC,WAASwqO,MAAT,CAAgB70E,OAAhB,EAAyB;AACvB,WAAO31J,IAAI,KAAK,CAAT,GAAa,IAAIypO,YAAJ,CAAU9zE,OAAV,CAAb,GAAkC,IAAIu0E,MAAJ,CAAWv0E,OAAX,EAAoB31J,IAApB,CAAzC;AACD;;AAEDwqO,EAAAA,MAAM,CAACxqO,IAAP,GAAc,UAASA,IAAT,EAAe;AAC3B,WAAOuqO,MAAM,CAAC,CAACvqO,IAAF,CAAb;AACD,GAFD;;AAIA,SAAOwqO,MAAP;AACD,CAXc,CAWZ,IAXY;;;;;;;;;;;;;AC5CR,SAAStlC,KAAT,CAAe/nB,IAAf,EAAqBrzL,CAArB,EAAwBue,CAAxB,EAA2B;AAChC80K,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CACEpkD,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAACpjE,EAAL,IAAWojE,IAAI,CAACwsD,GAAL,GAAWxsD,IAAI,CAAC4jD,GAA3B,CADb,EAEE5jD,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAACpjE,EAAL,IAAWojE,IAAI,CAAC2sD,GAAL,GAAW3sD,IAAI,CAAC6jD,GAA3B,CAFb,EAGE7jD,IAAI,CAACwsD,GAAL,GAAWxsD,IAAI,CAACpjE,EAAL,IAAWojE,IAAI,CAAC8jD,GAAL,GAAWn3O,CAAtB,CAHb,EAIEqzL,IAAI,CAAC2sD,GAAL,GAAW3sD,IAAI,CAACpjE,EAAL,IAAWojE,IAAI,CAAC+jD,GAAL,GAAW74N,CAAtB,CAJb,EAKE80K,IAAI,CAACwsD,GALP,EAMExsD,IAAI,CAAC2sD,GANP;AAQD;;AAEM,SAASW,QAAT,CAAkB90E,OAAlB,EAA2B+0E,OAA3B,EAAoC;AACzC,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDD,QAAQ,CAAC1mP,SAAT,GAAqB;AACnBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHkB;AAInBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANkB;AAOnBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXkB;AAYnBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC;;AAA0C;;AAClD,WAAK,CAAL;AAAQ5kC,QAAAA,KAAK,CAAC,IAAD,EAAO,KAAK+7B,GAAZ,EAAiB,KAAKC,GAAtB,CAAL;AAAiC;AAF3C;;AAIA,QAAI,KAAKiF,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAnBkB;AAoBnBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKrF,GAAL,GAAWn3O,CAAX,EAAc,KAAKo3O,GAAL,GAAW74N,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAASphC,QAAAA,KAAK,CAAC,IAAD,EAAOp7M,CAAP,EAAUue,CAAV,CAAL;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA9BkB,CAArB;;eAiCgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAI80E,QAAJ,CAAa90E,OAAb,EAAsB+0E,OAAtB,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACjDf;;AACA;;;;AAEO,SAASC,cAAT,CAAwBj1E,OAAxB,EAAiC+0E,OAAjC,EAA0C;AAC/C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDE,cAAc,CAAC7mP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE3hP,aADc;AAEzB6hP,EAAAA,OAAO,EAAE7hP,aAFgB;AAGzB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPwB;AAQzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA3BwB;AA4BzB5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,6BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAtCwB,CAA3B;;eAyCgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIi1E,cAAJ,CAAmBj1E,OAAnB,EAA4B+0E,OAA5B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACjDf;;AAEO,SAASI,YAAT,CAAsBp1E,OAAtB,EAA+B+0E,OAA/B,EAAwC;AAC7C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDK,YAAY,CAAChnP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHsB;AAIvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANsB;AAOvBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXsB;AAYvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfsB;AAgBvBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,6BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA3BsB,CAAzB;;eA8BgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIo1E,YAAJ,CAAiBp1E,OAAjB,EAA0B+0E,OAA1B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACrCf;;AACA;;AAEO,SAASzlC,KAAT,CAAe/nB,IAAf,EAAqBrzL,CAArB,EAAwBue,CAAxB,EAA2B;AAChC,MAAI+tF,EAAE,GAAG+mF,IAAI,CAAC8jD,GAAd;AAAA,MACI9qI,EAAE,GAAGgnF,IAAI,CAAC+jD,GADd;AAAA,MAEIz+J,EAAE,GAAG06G,IAAI,CAACwsD,GAFd;AAAA,MAGItzI,EAAE,GAAG8mF,IAAI,CAAC2sD,GAHd;;AAKA,MAAI3sD,IAAI,CAAC6tD,MAAL,GAAchqK,aAAlB,EAA2B;AACzB,QAAIn2E,CAAC,GAAG,IAAIsyL,IAAI,CAAC8tD,OAAT,GAAmB,IAAI9tD,IAAI,CAAC6tD,MAAT,GAAkB7tD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACIt5O,CAAC,GAAG,IAAIsrL,IAAI,CAAC6tD,MAAT,IAAmB7tD,IAAI,CAAC6tD,MAAL,GAAc7tD,IAAI,CAAC+tD,MAAtC,CADR;AAEA90I,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGvrG,CAAL,GAASsyL,IAAI,CAAC4jD,GAAL,GAAW5jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAACwsD,GAAL,GAAWxsD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACAskG,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGtrG,CAAL,GAASsyL,IAAI,CAAC6jD,GAAL,GAAW7jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAAC2sD,GAAL,GAAW3sD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACD;;AAED,MAAIsrL,IAAI,CAACiuD,MAAL,GAAcpqK,aAAlB,EAA2B;AACzB,QAAItvE,CAAC,GAAG,IAAIyrL,IAAI,CAACkuD,OAAT,GAAmB,IAAIluD,IAAI,CAACiuD,MAAT,GAAkBjuD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACI/vJ,CAAC,GAAG,IAAI+hG,IAAI,CAACiuD,MAAT,IAAmBjuD,IAAI,CAACiuD,MAAL,GAAcjuD,IAAI,CAAC+tD,MAAtC,CADR;AAEAzoK,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG/wE,CAAL,GAASyrL,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAACkuD,OAAzB,GAAmCvhP,CAAC,GAAGqzL,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACAib,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG3kG,CAAL,GAASyrL,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAACkuD,OAAzB,GAAmChjO,CAAC,GAAG80K,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACD;;AAED+hG,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CAA4BnrI,EAA5B,EAAgCD,EAAhC,EAAoC1zB,EAApC,EAAwC4zB,EAAxC,EAA4C8mF,IAAI,CAACwsD,GAAjD,EAAsDxsD,IAAI,CAAC2sD,GAA3D;AACD;;AAED,SAASwB,UAAT,CAAoB31E,OAApB,EAA6B14J,KAA7B,EAAoC;AAClC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAEDquO,UAAU,CAACvnP,SAAX,GAAuB;AACrBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHoB;AAIrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANoB;AAOrBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAboB;AAcrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC;;AAA0C;;AAClD,WAAK,CAAL;AAAQ,aAAK5kC,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AAAgC;AAF1C;;AAIA,QAAI,KAAK3D,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GArBoB;AAsBrBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAASphC,QAAAA,KAAK,CAAC,IAAD,EAAOp7M,CAAP,EAAUue,CAAV,CAAL;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA1CoB,CAAvB;;eA6CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAIquO,UAAJ,CAAe31E,OAAf,EAAwB14J,KAAxB,CAAH,GAAoC,IAAIwtO,kBAAJ,CAAa90E,OAAb,EAAsB,CAAtB,CAAhD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC5Ef;;AACA;;AACA;;;;AAEA,SAASC,gBAAT,CAA0Bh2E,OAA1B,EAAmC14J,KAAnC,EAA0C;AACxC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED0uO,gBAAgB,CAAC5nP,SAAjB,GAA6B;AAC3BmiP,EAAAA,SAAS,EAAE3hP,aADgB;AAE3B6hP,EAAAA,OAAO,EAAE7hP,aAFkB;AAG3B8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAT0B;AAU3BC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA7B0B;AA8B3B5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,+BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAlD0B,CAA7B;;eAqDgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI0uO,gBAAJ,CAAqBh2E,OAArB,EAA8B14J,KAA9B,CAAH,GAA0C,IAAI2tO,8BAAJ,CAAmBj1E,OAAnB,EAA4B,CAA5B,CAAtD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC9Df;;AACA;;AAEA,SAASE,cAAT,CAAwBj2E,OAAxB,EAAiC14J,KAAjC,EAAwC;AACtC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED2uO,cAAc,CAAC7nP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHwB;AAIzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANwB;AAOzBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAbwB;AAczBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAjBwB;AAkBzBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,+BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAQA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAvCwB,CAA3B;;eA0CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI2uO,cAAJ,CAAmBj2E,OAAnB,EAA4B14J,KAA5B,CAAH,GAAwC,IAAI8tO,0BAAJ,CAAiBp1E,OAAjB,EAA0B,CAA1B,CAApD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AClDf;;;;AAEA,SAASG,YAAT,CAAsBl2E,OAAtB,EAA+B;AAC7B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDk2E,YAAY,CAAC9nP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE3hP,aADY;AAEvB6hP,EAAAA,OAAO,EAAE7hP,aAFc;AAGvB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GALsB;AAMvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKD,MAAT,EAAiB,KAAKL,QAAL,CAAc7E,SAAd;AAClB,GARsB;AASvBl8B,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;AACA,QAAI,KAAKi+N,MAAT,EAAiB,KAAKL,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,EAAjB,KACK,KAAKi+N,MAAL,GAAc,CAAd,EAAiB,KAAKL,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAAjB;AACN;AAbsB,CAAzB;;AAgBe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIk2E,YAAJ,CAAiBl2E,OAAjB,CAAP;AACD;;;;;;;;;;ACxBD,SAASv5J,IAAT,CAActS,CAAd,EAAiB;AACf,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAApB;AACD,EAED;AACA;AACA;AACA;;;AACA,SAASgiP,MAAT,CAAgB3uD,IAAhB,EAAsB16G,EAAtB,EAA0B4zB,EAA1B,EAA8B;AAC5B,MAAI01I,EAAE,GAAG5uD,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAAC4jD,GAAzB;AAAA,MACIiL,EAAE,GAAGvpK,EAAE,GAAG06G,IAAI,CAAC8jD,GADnB;AAAA,MAEI3oK,EAAE,GAAG,CAAC6kH,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAAC6jD,GAAjB,KAAyB+K,EAAE,IAAIC,EAAE,GAAG,CAAL,IAAU,CAAC,CAA1C,CAFT;AAAA,MAGIzzK,EAAE,GAAG,CAAC89B,EAAE,GAAG8mF,IAAI,CAAC+jD,GAAX,KAAmB8K,EAAE,IAAID,EAAE,GAAG,CAAL,IAAU,CAAC,CAApC,CAHT;AAAA,MAII9jN,CAAC,GAAG,CAACqwC,EAAE,GAAG0zK,EAAL,GAAUzzK,EAAE,GAAGwzK,EAAhB,KAAuBA,EAAE,GAAGC,EAA5B,CAJR;AAKA,SAAO,CAAC5vO,IAAI,CAACk8D,EAAD,CAAJ,GAAWl8D,IAAI,CAACm8D,EAAD,CAAhB,IAAwB7uE,IAAI,CAACG,GAAL,CAASH,IAAI,CAACiT,GAAL,CAAS27D,EAAT,CAAT,EAAuB5uE,IAAI,CAACiT,GAAL,CAAS47D,EAAT,CAAvB,EAAqC,MAAM7uE,IAAI,CAACiT,GAAL,CAASsrB,CAAT,CAA3C,CAAxB,IAAmF,CAA1F;AACD,EAED;;;AACA,SAASgkN,MAAT,CAAgB9uD,IAAhB,EAAsB91L,CAAtB,EAAyB;AACvB,MAAI6oD,CAAC,GAAGitI,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAAC4jD,GAAxB;AACA,SAAO7wL,CAAC,GAAG,CAAC,KAAKitI,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAAC6jD,GAArB,IAA4B9wL,CAA5B,GAAgC7oD,CAAjC,IAAsC,CAAzC,GAA6CA,CAArD;AACD,EAED;AACA;AACA;;;AACA,SAAS69M,KAAT,CAAe/nB,IAAf,EAAqByxB,EAArB,EAAyBtkI,EAAzB,EAA6B;AAC3B,MAAI05H,EAAE,GAAG7mB,IAAI,CAAC4jD,GAAd;AAAA,MACI98B,EAAE,GAAG9mB,IAAI,CAAC6jD,GADd;AAAA,MAEI5qI,EAAE,GAAG+mF,IAAI,CAAC8jD,GAFd;AAAA,MAGI9qI,EAAE,GAAGgnF,IAAI,CAAC+jD,GAHd;AAAA,MAIIzxN,EAAE,GAAG,CAAC2mF,EAAE,GAAG4tG,EAAN,IAAY,CAJrB;;AAKA7mB,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CAA4Bv9B,EAAE,GAAGv0L,EAAjC,EAAqCw0L,EAAE,GAAGx0L,EAAE,GAAGm/L,EAA/C,EAAmDx4G,EAAE,GAAG3mF,EAAxD,EAA4D0mF,EAAE,GAAG1mF,EAAE,GAAG66D,EAAtE,EAA0E8rB,EAA1E,EAA8ED,EAA9E;AACD;;AAED,SAAS+1I,SAAT,CAAmBv2E,OAAnB,EAA4B;AAC1B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDu2E,SAAS,CAACnoP,SAAV,GAAsB;AACpBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHmB;AAIpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANmB;AAOpBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKD,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKiL,GAAL,GAAWj2K,GAFX;AAGA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAZmB;AAapBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKJ,GAA1B,EAA+B,KAAKC,GAApC;;AAA0C;;AAClD,WAAK,CAAL;AAAQh8B,QAAAA,KAAK,CAAC,IAAD,EAAO,KAAKinC,GAAZ,EAAiBF,MAAM,CAAC,IAAD,EAAO,KAAKE,GAAZ,CAAvB,CAAL;AAA+C;AAFzD;;AAIA,QAAI,KAAKhG,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GApBmB;AAqBpBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,QAAIiiE,EAAE,GAAGpU,GAAT;AAEApsE,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;AACA,QAAIve,CAAC,KAAK,KAAKm3O,GAAX,IAAkB54N,CAAC,KAAK,KAAK64N,GAAjC,EAAsC,OAJlB,CAI0B;;AAC9C,YAAQ,KAAKoF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiBphC,QAAAA,KAAK,CAAC,IAAD,EAAO+mC,MAAM,CAAC,IAAD,EAAO3hK,EAAE,GAAGwhK,MAAM,CAAC,IAAD,EAAOhiP,CAAP,EAAUue,CAAV,CAAlB,CAAb,EAA8CiiE,EAA9C,CAAL;AAAwD;;AACjF;AAAS46H,QAAAA,KAAK,CAAC,IAAD,EAAO,KAAKinC,GAAZ,EAAiB7hK,EAAE,GAAGwhK,MAAM,CAAC,IAAD,EAAOhiP,CAAP,EAAUue,CAAV,CAA5B,CAAL;AAAgD;AAJ3D;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACA,SAAK8jO,GAAL,GAAW7hK,EAAX;AACD;AApCmB,CAAtB;;AAuCA,SAAS8hK,SAAT,CAAmBz2E,OAAnB,EAA4B;AAC1B,OAAKswE,QAAL,GAAgB,IAAIoG,cAAJ,CAAmB12E,OAAnB,CAAhB;AACD;;AAED,CAACy2E,SAAS,CAACroP,SAAV,GAAsB2C,MAAM,CAAC60L,MAAP,CAAc2wD,SAAS,CAACnoP,SAAxB,CAAvB,EAA2DmhN,KAA3D,GAAmE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AAChF6jO,EAAAA,SAAS,CAACnoP,SAAV,CAAoBmhN,KAApB,CAA0BziN,IAA1B,CAA+B,IAA/B,EAAqC4lB,CAArC,EAAwCve,CAAxC;AACD,CAFD;;AAIA,SAASuiP,cAAT,CAAwB12E,OAAxB,EAAiC;AAC/B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED02E,cAAc,CAACtoP,SAAf,GAA2B;AACzBo9O,EAAAA,MAAM,EAAE,UAASr3O,CAAT,EAAYue,CAAZ,EAAe;AAAE,SAAK49N,QAAL,CAAc9E,MAAd,CAAqB94N,CAArB,EAAwBve,CAAxB;AAA6B,GAD7B;AAEzBs3O,EAAAA,SAAS,EAAE,YAAW;AAAE,SAAK6E,QAAL,CAAc7E,SAAd;AAA4B,GAF3B;AAGzBC,EAAAA,MAAM,EAAE,UAASv3O,CAAT,EAAYue,CAAZ,EAAe;AAAE,SAAK49N,QAAL,CAAc5E,MAAd,CAAqBh5N,CAArB,EAAwBve,CAAxB;AAA6B,GAH7B;AAIzBy3O,EAAAA,aAAa,EAAE,UAASnrI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyBvsG,CAAzB,EAA4Bue,CAA5B,EAA+B;AAAE,SAAK49N,QAAL,CAAc1E,aAAd,CAA4BprI,EAA5B,EAAgCC,EAAhC,EAAoCC,EAApC,EAAwC5zB,EAAxC,EAA4Cp6D,CAA5C,EAA+Cve,CAA/C;AAAoD;AAJ3E,CAA3B;;AAOO,SAASwiP,SAAT,CAAmB32E,OAAnB,EAA4B;AACjC,SAAO,IAAIu2E,SAAJ,CAAcv2E,OAAd,CAAP;AACD;;AAEM,SAAS42E,SAAT,CAAmB52E,OAAnB,EAA4B;AACjC,SAAO,IAAIy2E,SAAJ,CAAcz2E,OAAd,CAAP;AACD;;;;;;;;;ACvGD,SAAS62E,OAAT,CAAiB72E,OAAjB,EAA0B;AACxB,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED62E,OAAO,CAACzoP,SAAR,GAAoB;AAClBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHiB;AAIlBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANiB;AAOlBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKgE,EAAL,GAAU,EAAV;AACA,SAAKC,EAAL,GAAU,EAAV;AACD,GAViB;AAWlB/D,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIz8O,CAAC,GAAG,KAAKugP,EAAb;AAAA,QACIhiO,CAAC,GAAG,KAAKiiO,EADb;AAAA,QAEIz4O,CAAC,GAAG/H,CAAC,CAAC7G,MAFV;;AAIA,QAAI4O,CAAJ,EAAO;AACL,WAAKs0O,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAAC,CAAC,CAAD,CAAtB,EAA2Bue,CAAC,CAAC,CAAD,CAA5B,CAAb,GAAgD,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAAC,CAAC,CAAD,CAAtB,EAA2Bue,CAAC,CAAC,CAAD,CAA5B,CAAhD;;AACA,UAAIxW,CAAC,KAAK,CAAV,EAAa;AACX,aAAKo0O,QAAL,CAAc5E,MAAd,CAAqBv3O,CAAC,CAAC,CAAD,CAAtB,EAA2Bue,CAAC,CAAC,CAAD,CAA5B;AACD,OAFD,MAEO;AACL,YAAIokO,EAAE,GAAGC,aAAa,CAAC5iP,CAAD,CAAtB;AAAA,YACI6iP,EAAE,GAAGD,aAAa,CAACrkO,CAAD,CADtB;;AAEA,aAAK,IAAIg8E,EAAE,GAAG,CAAT,EAAY23G,EAAE,GAAG,CAAtB,EAAyBA,EAAE,GAAGnqM,CAA9B,EAAiC,EAAEwyF,EAAF,EAAM,EAAE23G,EAAzC,EAA6C;AAC3C,eAAKiqC,QAAL,CAAc1E,aAAd,CAA4BkL,EAAE,CAAC,CAAD,CAAF,CAAMpoJ,EAAN,CAA5B,EAAuCsoJ,EAAE,CAAC,CAAD,CAAF,CAAMtoJ,EAAN,CAAvC,EAAkDooJ,EAAE,CAAC,CAAD,CAAF,CAAMpoJ,EAAN,CAAlD,EAA6DsoJ,EAAE,CAAC,CAAD,CAAF,CAAMtoJ,EAAN,CAA7D,EAAwEv6F,CAAC,CAACkyM,EAAD,CAAzE,EAA+E3zL,CAAC,CAAC2zL,EAAD,CAAhF;AACD;AACF;AACF;;AAED,QAAI,KAAKmqC,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoBt0O,CAAC,KAAK,CAA7C,EAAiD,KAAKo0O,QAAL,CAAc7E,SAAd;AACjD,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACA,SAAKkE,EAAL,GAAU,KAAKC,EAAL,GAAU,IAApB;AACD,GAhCiB;AAiClBplC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,SAAKgiO,EAAL,CAAQzmP,IAAR,CAAa,CAACkG,CAAd;;AACA,SAAKwgP,EAAL,CAAQ1mP,IAAR,CAAa,CAACykB,CAAd;AACD;AApCiB,CAApB,EAuCA;;AACA,SAASqkO,aAAT,CAAuB5iP,CAAvB,EAA0B;AACxB,MAAInG,CAAJ;AAAA,MACIkO,CAAC,GAAG/H,CAAC,CAAC7G,MAAF,GAAW,CADnB;AAAA,MAEIm4F,CAFJ;AAAA,MAGIvwF,CAAC,GAAG,IAAIpH,KAAJ,CAAUoO,CAAV,CAHR;AAAA,MAIIH,CAAC,GAAG,IAAIjO,KAAJ,CAAUoO,CAAV,CAJR;AAAA,MAKIF,CAAC,GAAG,IAAIlO,KAAJ,CAAUoO,CAAV,CALR;AAMAhH,EAAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,EAAU6G,CAAC,CAAC,CAAD,CAAD,GAAO,CAAjB,EAAoBC,CAAC,CAAC,CAAD,CAAD,GAAO7H,CAAC,CAAC,CAAD,CAAD,GAAO,IAAIA,CAAC,CAAC,CAAD,CAAvC;;AACA,OAAKnG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAC,GAAG,CAApB,EAAuB,EAAElO,CAAzB,EAA4BkH,CAAC,CAAClH,CAAD,CAAD,GAAO,CAAP,EAAU+N,CAAC,CAAC/N,CAAD,CAAD,GAAO,CAAjB,EAAoBgO,CAAC,CAAChO,CAAD,CAAD,GAAO,IAAImG,CAAC,CAACnG,CAAD,CAAL,GAAW,IAAImG,CAAC,CAACnG,CAAC,GAAG,CAAL,CAA3C;;AAC5BkH,EAAAA,CAAC,CAACgH,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX,EAAcH,CAAC,CAACG,CAAC,GAAG,CAAL,CAAD,GAAW,CAAzB,EAA4BF,CAAC,CAACE,CAAC,GAAG,CAAL,CAAD,GAAW,IAAI/H,CAAC,CAAC+H,CAAC,GAAG,CAAL,CAAL,GAAe/H,CAAC,CAAC+H,CAAD,CAAvD;;AACA,OAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwBy3F,CAAC,GAAGvwF,CAAC,CAAClH,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAC,GAAG,CAAL,CAAZ,EAAqB+N,CAAC,CAAC/N,CAAD,CAAD,IAAQy3F,CAA7B,EAAgCzpF,CAAC,CAAChO,CAAD,CAAD,IAAQy3F,CAAC,GAAGzpF,CAAC,CAAChO,CAAC,GAAG,CAAL,CAA7C;;AACxBkH,EAAAA,CAAC,CAACgH,CAAC,GAAG,CAAL,CAAD,GAAWF,CAAC,CAACE,CAAC,GAAG,CAAL,CAAD,GAAWH,CAAC,CAACG,CAAC,GAAG,CAAL,CAAvB;;AACA,OAAKlO,CAAC,GAAGkO,CAAC,GAAG,CAAb,EAAgBlO,CAAC,IAAI,CAArB,EAAwB,EAAEA,CAA1B,EAA6BkH,CAAC,CAAClH,CAAD,CAAD,GAAO,CAACgO,CAAC,CAAChO,CAAD,CAAD,GAAOkH,CAAC,CAAClH,CAAC,GAAG,CAAL,CAAT,IAAoB+N,CAAC,CAAC/N,CAAD,CAA5B;;AAC7B+N,EAAAA,CAAC,CAACG,CAAC,GAAG,CAAL,CAAD,GAAW,CAAC/H,CAAC,CAAC+H,CAAD,CAAD,GAAOhH,CAAC,CAACgH,CAAC,GAAG,CAAL,CAAT,IAAoB,CAA/B;;AACA,OAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAC,GAAG,CAApB,EAAuB,EAAElO,CAAzB,EAA4B+N,CAAC,CAAC/N,CAAD,CAAD,GAAO,IAAImG,CAAC,CAACnG,CAAC,GAAG,CAAL,CAAL,GAAekH,CAAC,CAAClH,CAAC,GAAG,CAAL,CAAvB;;AAC5B,SAAO,CAACkH,CAAD,EAAI6G,CAAJ,CAAP;AACD;;AAEc,kBAASikK,OAAT,EAAkB;AAC/B,SAAO,IAAI62E,OAAJ,CAAY72E,OAAZ,CAAP;AACD;;;;;;;;;;;AChED,SAASi3E,IAAT,CAAcj3E,OAAd,EAAuBtuK,CAAvB,EAA0B;AACxB,OAAK4+O,QAAL,GAAgBtwE,OAAhB;AACA,OAAK11B,EAAL,GAAU54I,CAAV;AACD;;AAEDulP,IAAI,CAAC7oP,SAAL,GAAiB;AACfmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHc;AAIfC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANc;AAOfmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKgE,EAAL,GAAU,KAAKC,EAAL,GAAUp0K,GAApB;AACA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAVc;AAWfC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,IAAI,KAAKtmG,EAAT,IAAe,KAAKA,EAAL,GAAU,CAAzB,IAA8B,KAAKqmG,MAAL,KAAgB,CAAlD,EAAqD,KAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKgJ,EAA1B,EAA8B,KAAKC,EAAnC;AACrD,QAAI,KAAKnE,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,QAAI,KAAK+E,KAAL,IAAc,CAAlB,EAAqB,KAAKlmG,EAAL,GAAU,IAAI,KAAKA,EAAnB,EAAuB,KAAKkmG,KAAL,GAAa,IAAI,KAAKA,KAA7C;AACtB,GAfc;AAgBfjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS;AACP,cAAI,KAAKrmG,EAAL,IAAW,CAAf,EAAkB;AAChB,iBAAKgmG,QAAL,CAAc5E,MAAd,CAAqB,KAAKgJ,EAA1B,EAA8BhiO,CAA9B;;AACA,iBAAK49N,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB;AACD,WAHD,MAGO;AACL,gBAAI+tF,EAAE,GAAG,KAAKi0I,EAAL,IAAW,IAAI,KAAKpqG,EAApB,IAA0Bn2I,CAAC,GAAG,KAAKm2I,EAA5C;;AACA,iBAAKgmG,QAAL,CAAc5E,MAAd,CAAqBjrI,EAArB,EAAyB,KAAKk0I,EAA9B;;AACA,iBAAKrE,QAAL,CAAc5E,MAAd,CAAqBjrI,EAArB,EAAyB/tF,CAAzB;AACD;;AACD;AACD;AAbH;;AAeA,SAAKgiO,EAAL,GAAUvgP,CAAV,EAAa,KAAKwgP,EAAL,GAAUjiO,CAAvB;AACD;AAlCc,CAAjB;;AAqCe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIi3E,IAAJ,CAASj3E,OAAT,EAAkB,GAAlB,CAAP;AACD;;AAEM,SAASk3E,UAAT,CAAoBl3E,OAApB,EAA6B;AAClC,SAAO,IAAIi3E,IAAJ,CAASj3E,OAAT,EAAkB,CAAlB,CAAP;AACD;;AAEM,SAASm3E,SAAT,CAAmBn3E,OAAnB,EAA4B;AACjC,SAAO,IAAIi3E,IAAJ,CAASj3E,OAAT,EAAkB,CAAlB,CAAP;AACD;;;;;;;;;ACpDc,kBAASo3E,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAIU,CAAC,GAAG,CAAR,EAAWiK,CAAX,EAAc0qE,EAAd,EAAkBC,EAAE,GAAGw0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAA7B,EAAyChpM,CAAzC,EAA4CupF,CAAC,GAAG7iB,EAAE,CAACt1E,MAAxD,EAAgEU,CAAC,GAAGkO,CAApE,EAAuE,EAAElO,CAAzE,EAA4E;AAC1E20E,IAAAA,EAAE,GAAGC,EAAL,EAASA,EAAE,GAAGw0K,MAAM,CAAClyC,KAAK,CAACl3M,CAAD,CAAN,CAApB;;AACA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB2qE,MAAAA,EAAE,CAAC3qE,CAAD,CAAF,CAAM,CAAN,KAAY2qE,EAAE,CAAC3qE,CAAD,CAAF,CAAM,CAAN,IAAWW,KAAK,CAAC+pE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,CAAD,CAAL,GAAkB0qE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,CAAlB,GAA6B0qE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,CAApD;AACD;AACF;AACF;;;;;;;;;ACRc,kBAASm/O,MAAT,EAAiB;AAC9B,MAAIl7O,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAf;AAAA,MAAuBqsB,CAAC,GAAG,IAAI7rB,KAAJ,CAAUoO,CAAV,CAA3B;;AACA,SAAO,EAAEA,CAAF,IAAO,CAAd,EAAiByd,CAAC,CAACzd,CAAD,CAAD,GAAOA,CAAP;;AACjB,SAAOyd,CAAP;AACD;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;;;AAEA,SAAS09N,UAAT,CAAoBx8O,CAApB,EAAuB5I,GAAvB,EAA4B;AAC1B,SAAO4I,CAAC,CAAC5I,GAAD,CAAR;AACD;;AAED,SAASqlP,WAAT,CAAqBrlP,GAArB,EAA0B;AACxB,QAAMmlP,MAAM,GAAG,EAAf;AACAA,EAAAA,MAAM,CAACnlP,GAAP,GAAaA,GAAb;AACA,SAAOmlP,MAAP;AACD;;AAEc,oBAAW;AACxB,MAAIjnO,IAAI,GAAG,uBAAS,EAAT,CAAX;AAAA,MACI+0L,KAAK,GAAGqyC,cADZ;AAAA,MAEI58O,MAAM,GAAG68O,aAFb;AAAA,MAGIxmP,KAAK,GAAGqmP,UAHZ;;AAKA,WAAS7zO,KAAT,CAAexG,IAAf,EAAqB;AACnB,QAAIy6O,EAAE,GAAG3pP,KAAK,CAACuR,IAAN,CAAW8Q,IAAI,CAAC9hB,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAAX,EAAwCupP,WAAxC,CAAT;AAAA,QACItpP,CADJ;AAAA,QACOkO,CAAC,GAAGu7O,EAAE,CAACnqP,MADd;AAAA,QACsB2K,CAAC,GAAG,CAAC,CAD3B;AAAA,QAEIy/O,EAFJ;;AAIA,SAAK,MAAM78O,CAAX,IAAgBmC,IAAhB,EAAsB;AACpB,WAAKhP,CAAC,GAAG,CAAJ,EAAO,EAAEiK,CAAd,EAAiBjK,CAAC,GAAGkO,CAArB,EAAwB,EAAElO,CAA1B,EAA6B;AAC3B,SAACypP,EAAE,CAACzpP,CAAD,CAAF,CAAMiK,CAAN,IAAW,CAAC,CAAD,EAAI,CAACjH,KAAK,CAAC6J,CAAD,EAAI48O,EAAE,CAACzpP,CAAD,CAAF,CAAMiE,GAAV,EAAegG,CAAf,EAAkB+E,IAAlB,CAAV,CAAZ,EAAgDA,IAAhD,GAAuDnC,CAAvD;AACD;AACF;;AAED,SAAK7M,CAAC,GAAG,CAAJ,EAAO0pP,EAAE,GAAG,oBAAMxyC,KAAK,CAACuyC,EAAD,CAAX,CAAjB,EAAmCzpP,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7CypP,MAAAA,EAAE,CAACC,EAAE,CAAC1pP,CAAD,CAAH,CAAF,CAAU8F,KAAV,GAAkB9F,CAAlB;AACD;;AAED2M,IAAAA,MAAM,CAAC88O,EAAD,EAAKC,EAAL,CAAN;AACA,WAAOD,EAAP;AACD;;AAEDj0O,EAAAA,KAAK,CAAC2M,IAAN,GAAa,UAASwE,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6iB,IAAI,GAAG,OAAOwE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS7mB,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,CAArC,EAA8DnR,KAAlF,IAA2F2M,IAAlG;AACD,GAFD;;AAIA3M,EAAAA,KAAK,CAACxS,KAAN,GAAc,UAAS2jB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDnR,KAAxE,IAAiFxS,KAAxF;AACD,GAFD;;AAIAwS,EAAAA,KAAK,CAAC0hM,KAAN,GAAc,UAASvwL,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB43M,KAAK,GAAGvwL,CAAC,IAAI,IAAL,GAAY4iO,cAAZ,GAAwB,OAAO5iO,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS7mB,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,CAA9D,EAAuFnR,KAA3G,IAAoH0hM,KAA3H;AACD,GAFD;;AAIA1hM,EAAAA,KAAK,CAAC7I,MAAN,GAAe,UAASga,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqN,MAAM,GAAGga,CAAC,IAAI,IAAL,GAAY6iO,aAAZ,GAAyB7iO,CAAlC,EAAqCnR,KAAzD,IAAkE7I,MAAzE;AACD,GAFD;;AAIA,SAAO6I,KAAP;AACD;;;;;;;;;ACzDD;;;;AAEe,kBAAS4zO,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAIU,CAAJ,EAAOkO,CAAP,EAAUjE,CAAC,GAAG,CAAd,EAAiBwtF,CAAC,GAAG2xJ,MAAM,CAAC,CAAD,CAAN,CAAU9pP,MAA/B,EAAuColB,CAA5C,EAA+Cza,CAAC,GAAGwtF,CAAnD,EAAsD,EAAExtF,CAAxD,EAA2D;AACzD,SAAKya,CAAC,GAAG1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AAC5B,QAAIya,CAAJ,EAAO,KAAK1kB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwBopP,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmBya,CAAnB;AAChC;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACTc,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAIU,CAAJ,EAAOiK,CAAC,GAAG,CAAX,EAAc4C,CAAd,EAAiBiY,EAAjB,EAAqB6kO,EAArB,EAAyBC,EAAzB,EAA6B17O,CAA7B,EAAgCupF,CAAC,GAAG2xJ,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAN,CAAiB53M,MAA1D,EAAkE2K,CAAC,GAAGwtF,CAAtE,EAAyE,EAAExtF,CAA3E,EAA8E;AAC5E,SAAK0/O,EAAE,GAAGC,EAAE,GAAG,CAAV,EAAa5pP,CAAC,GAAG,CAAtB,EAAyBA,CAAC,GAAGkO,CAA7B,EAAgC,EAAElO,CAAlC,EAAqC;AACnC,UAAI,CAAC8kB,EAAE,GAAG,CAACjY,CAAC,GAAGu8O,MAAM,CAAClyC,KAAK,CAACl3M,CAAD,CAAN,CAAN,CAAiBiK,CAAjB,CAAL,EAA0B,CAA1B,IAA+B4C,CAAC,CAAC,CAAD,CAAtC,IAA6C,CAAjD,EAAoD;AAClDA,QAAAA,CAAC,CAAC,CAAD,CAAD,GAAO88O,EAAP,EAAW98O,CAAC,CAAC,CAAD,CAAD,GAAO88O,EAAE,IAAI7kO,EAAxB;AACD,OAFD,MAEO,IAAIA,EAAE,GAAG,CAAT,EAAY;AACjBjY,QAAAA,CAAC,CAAC,CAAD,CAAD,GAAO+8O,EAAP,EAAW/8O,CAAC,CAAC,CAAD,CAAD,GAAO+8O,EAAE,IAAI9kO,EAAxB;AACD,OAFM,MAEA;AACLjY,QAAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,EAAUA,CAAC,CAAC,CAAD,CAAD,GAAOiY,EAAjB;AACD;AACF;AACF;AACF;;;;;;;;;ACbD;;;;AAEe,kBAASskO,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAI2K,CAAC,GAAG,CAAR,EAAW0qE,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAtB,EAAkChpM,CAAlC,EAAqCupF,CAAC,GAAG9iB,EAAE,CAACr1E,MAAjD,EAAyD2K,CAAC,GAAGwtF,CAA7D,EAAgE,EAAExtF,CAAlE,EAAqE;AACnE,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW0kB,CAAC,GAAG,CAApB,EAAuB1kB,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AACnC0qE,IAAAA,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,KAAY0qE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,IAAW,CAACya,CAAD,GAAK,CAA5B;AACD;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACTD;;;;AAEe,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,KAA8B,EAAE,CAACm4F,CAAC,GAAG,CAAC9iB,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAZ,EAAwB53M,MAA7B,IAAuC,CAAzC,CAAlC,EAA+E;;AAC/E,OAAK,IAAIolB,CAAC,GAAG,CAAR,EAAWza,CAAC,GAAG,CAAf,EAAkB0qE,EAAlB,EAAsB8iB,CAAtB,EAAyBvpF,CAA9B,EAAiCjE,CAAC,GAAGwtF,CAArC,EAAwC,EAAExtF,CAA1C,EAA6C;AAC3C,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW40E,EAAE,GAAG,CAAhB,EAAmBC,EAAE,GAAG,CAA7B,EAAgC70E,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C,UAAI4tG,EAAE,GAAGw7I,MAAM,CAAClyC,KAAK,CAACl3M,CAAD,CAAN,CAAf;AAAA,UACI6pP,IAAI,GAAGj8I,EAAE,CAAC3jG,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,UAEI6/O,IAAI,GAAGl8I,EAAE,CAAC3jG,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAAA,UAGI8/O,EAAE,GAAG,CAACF,IAAI,GAAGC,IAAR,IAAgB,CAHzB;;AAIA,WAAK,IAAIxsO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtd,CAApB,EAAuB,EAAEsd,CAAzB,EAA4B;AAC1B,YAAI0sO,EAAE,GAAGZ,MAAM,CAAClyC,KAAK,CAAC55L,CAAD,CAAN,CAAf;AAAA,YACI2sO,IAAI,GAAGD,EAAE,CAAC//O,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,YAEIigP,IAAI,GAAGF,EAAE,CAAC//O,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAGA8/O,QAAAA,EAAE,IAAIE,IAAI,GAAGC,IAAb;AACD;;AACDt1K,MAAAA,EAAE,IAAIi1K,IAAN,EAAYh1K,EAAE,IAAIk1K,EAAE,GAAGF,IAAvB;AACD;;AACDl1K,IAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,QAAIkwD,EAAJ,EAAQlwD,CAAC,IAAImwD,EAAE,GAAGD,EAAV;AACT;;AACDD,EAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACvBD;;;;AAEe,kBAASkyC,MAAT,EAAiB;AAC9B,MAAIe,KAAK,GAAGf,MAAM,CAAC3/O,GAAP,CAAW2gP,IAAX,CAAZ;AACA,SAAO,mBAAKhB,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOo8O,KAAK,CAACjjP,CAAD,CAAL,GAAWijP,KAAK,CAACp8O,CAAD,CAAvB;AAA6B,GAAhE,CAAP;AACD;;AAED,SAASq8O,IAAT,CAAchB,MAAd,EAAsB;AACpB,MAAIppP,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYiK,CAAC,GAAG,CAAhB;AAAA,MAAmBiE,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsCuuG,EAAtC;AAAA,MAA0Cw8I,EAAE,GAAG,CAACviP,QAAhD;;AACA,SAAO,EAAE9H,CAAF,GAAMkO,CAAb,EAAgB,IAAI,CAAC2/F,EAAE,GAAG,CAACu7I,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAP,IAAuBqqP,EAA3B,EAA+BA,EAAE,GAAGx8I,EAAL,EAAS5jG,CAAC,GAAGjK,CAAb;;AAC/C,SAAOiK,CAAP;AACD;;;;;;;;;;ACXD;;;;AAEe,kBAASm/O,MAAT,EAAiB;AAC9B,MAAIkB,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,GAAX,CAAX;AACA,SAAO,mBAAK6iP,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOu8O,IAAI,CAACpjP,CAAD,CAAJ,GAAUojP,IAAI,CAACv8O,CAAD,CAArB;AAA2B,GAA9D,CAAP;AACD;;AAEM,SAASxH,GAAT,CAAa6iP,MAAb,EAAqB;AAC1B,MAAI5lP,CAAC,GAAG,CAAR;AAAA,MAAWxD,CAAC,GAAG,CAAC,CAAhB;AAAA,MAAmBkO,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsC4S,CAAtC;;AACA,SAAO,EAAElS,CAAF,GAAMkO,CAAb,EAAgB,IAAIgE,CAAC,GAAG,CAACk3O,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAT,EAAuBwD,CAAC,IAAI0O,CAAL;;AACvC,SAAO1O,CAAP;AACD;;;;;;;;;ACXD;;;;AAEe,kBAAS4lP,MAAT,EAAiB;AAC9B,SAAO,wBAAUA,MAAV,EAAkB30O,OAAlB,EAAP;AACD;;;;;;;;;ACJD;;AACA;;;;AAEe,kBAAS20O,MAAT,EAAiB;AAC9B,MAAIl7O,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAf;AAAA,MACIU,CADJ;AAAA,MAEIiK,CAFJ;AAAA,MAGIqgP,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,cAAX,CAHX;AAAA,MAII2wM,KAAK,GAAG,yBAAWkyC,MAAX,CAJZ;AAAA,MAKIn2M,GAAG,GAAG,CALV;AAAA,MAMIC,MAAM,GAAG,CANb;AAAA,MAOIq3M,IAAI,GAAG,EAPX;AAAA,MAQIC,OAAO,GAAG,EARd;;AAUA,OAAKxqP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBiK,IAAAA,CAAC,GAAGitM,KAAK,CAACl3M,CAAD,CAAT;;AACA,QAAIizC,GAAG,GAAGC,MAAV,EAAkB;AAChBD,MAAAA,GAAG,IAAIq3M,IAAI,CAACrgP,CAAD,CAAX;AACAsgP,MAAAA,IAAI,CAACtqP,IAAL,CAAUgK,CAAV;AACD,KAHD,MAGO;AACLipC,MAAAA,MAAM,IAAIo3M,IAAI,CAACrgP,CAAD,CAAd;AACAugP,MAAAA,OAAO,CAACvqP,IAAR,CAAagK,CAAb;AACD;AACF;;AAED,SAAOugP,OAAO,CAAC/1O,OAAR,GAAkBlV,MAAlB,CAAyBgrP,IAAzB,CAAP;AACD;;;;;;;;;AC1BD;;;;AAEe,kBAASnB,MAAT,EAAiB;AAC9B,SAAO,mBAAKA,MAAL,EAAa30O,OAAb,EAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;AE7CA;;;;;;;;;;;;ACAO,SAASg2O,SAAT,CAAmBn+L,CAAnB,EAAsBC,CAAtB,EAAyB;AAC9B,MAAI,OAAOn/B,QAAP,KAAoB,WAApB,IAAmCA,QAAQ,CAACyB,aAAhD,EAA+D;AAC7D,UAAMpiB,CAAC,GAAG2gB,QAAQ,CAACyB,aAAT,CAAuB,QAAvB,CAAV;;AACA,QAAIpiB,CAAC,IAAIA,CAAC,CAACyiB,UAAX,EAAuB;AACrBziB,MAAAA,CAAC,CAACvE,KAAF,GAAUokD,CAAV;AACA7/C,MAAAA,CAAC,CAACwpB,MAAF,GAAWs2B,CAAX;AACA,aAAO9/C,CAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAEM,MAAMi+O,QAAQ,GAAG,MACtB,OAAOC,KAAP,KAAiB,WAAjB,GAA+BA,KAA/B,GAAuC,IADlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZP;;;;;;;;;;ACAO,SAASC,SAAT,CAAmBx1C,MAAnB,EAA2B5zK,KAA3B,EAAkC;AACvC,UAAQzhC,SAAS,CAACT,MAAlB;AACE,SAAK,CAAL;AAAQ;;AACR,SAAK,CAAL;AAAQ,WAAKkiC,KAAL,CAAW4zK,MAAX;AAAoB;;AAC5B;AAAS,WAAK5zK,KAAL,CAAWA,KAAX,EAAkB4zK,MAAlB,CAAyBA,MAAzB;AAAkC;AAH7C;;AAKA,SAAO,IAAP;AACD;;AAEM,SAASy1C,gBAAT,CAA0Bz1C,MAA1B,EAAkC01C,YAAlC,EAAgD;AACrD,UAAQ/qP,SAAS,CAACT,MAAlB;AACE,SAAK,CAAL;AAAQ;;AACR,SAAK,CAAL;AAAQ;AACN,YAAI,OAAO81M,MAAP,KAAkB,UAAtB,EAAkC,KAAK01C,YAAL,CAAkB11C,MAAlB,EAAlC,KACK,KAAK5zK,KAAL,CAAW4zK,MAAX;AACL;AACD;;AACD;AAAS;AACP,aAAKA,MAAL,CAAYA,MAAZ;AACA,YAAI,OAAO01C,YAAP,KAAwB,UAA5B,EAAwC,KAAKA,YAAL,CAAkBA,YAAlB,EAAxC,KACK,KAAKtpN,KAAL,CAAWspN,YAAX;AACL;AACD;AAZH;;AAcA,SAAO,IAAP;AACD;;;;;;;;;;ACzBD;;AAEO,MAAMC,QAAQ,GAAGxsO,MAAM,CAAC,UAAD,CAAvB;;;AAEQ,SAASysO,OAAT,GAAmB;AAChC,MAAIllP,KAAK,GAAG,IAAItB,GAAJ,EAAZ;AAAA,MACI4wM,MAAM,GAAG,EADb;AAAA,MAEI5zK,KAAK,GAAG,EAFZ;AAAA,MAGIq5H,OAAO,GAAGkwF,QAHd;;AAKA,WAASl1O,KAAT,CAAehJ,CAAf,EAAkB;AAChB,QAAI5I,GAAG,GAAG4I,CAAC,GAAG,EAAd;AAAA,QAAkB7M,CAAC,GAAG8F,KAAK,CAAChD,GAAN,CAAUmB,GAAV,CAAtB;;AACA,QAAI,CAACjE,CAAL,EAAQ;AACN,UAAI66J,OAAO,KAAKkwF,QAAhB,EAA0B,OAAOlwF,OAAP;AAC1B/0J,MAAAA,KAAK,CAACnD,GAAN,CAAUsB,GAAV,EAAejE,CAAC,GAAGo1M,MAAM,CAACn1M,IAAP,CAAY4M,CAAZ,CAAnB;AACD;;AACD,WAAO20B,KAAK,CAAC,CAACxhC,CAAC,GAAG,CAAL,IAAUwhC,KAAK,CAACliC,MAAjB,CAAZ;AACD;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO81M,MAAM,CAAC/rM,KAAP,EAAP;AACvB+rM,IAAAA,MAAM,GAAG,EAAT,EAAatvM,KAAK,GAAG,IAAItB,GAAJ,EAArB;;AACA,SAAK,MAAMxB,KAAX,IAAoB2jB,CAApB,EAAuB;AACrB,YAAM1iB,GAAG,GAAGjB,KAAK,GAAG,EAApB;AACA,UAAI8C,KAAK,CAACR,GAAN,CAAUrB,GAAV,CAAJ,EAAoB;AACpB6B,MAAAA,KAAK,CAACnD,GAAN,CAAUsB,GAAV,EAAemxM,MAAM,CAACn1M,IAAP,CAAY+C,KAAZ,CAAf;AACD;;AACD,WAAO6S,KAAP;AACD,GATD;;AAWAA,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkiC,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAR,EAAuB9Q,KAA3C,IAAoD2rB,KAAK,CAACn4B,KAAN,EAA3D;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIAhlJ,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOk2K,OAAO,CAAC51C,MAAD,EAAS5zK,KAAT,CAAP,CAAuBq5H,OAAvB,CAA+BA,OAA/B,CAAP;AACD,GAFD;;AAIA+vF,kBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB;;AAEA,SAAO8V,KAAP;AACD;;;;;;;;;;AC7CD;;AACA;;AACA;;;;AAEe,SAAS89N,IAAT,GAAgB;AAC7B,MAAI99N,KAAK,GAAG,wBAAUglJ,OAAV,CAAkB3lC,SAAlB,CAAZ;AAAA,MACIkgF,MAAM,GAAGv/L,KAAK,CAACu/L,MADnB;AAAA,MAEI61C,YAAY,GAAGp1O,KAAK,CAAC2rB,KAFzB;AAAA,MAGIo2K,EAAE,GAAG,CAHT;AAAA,MAIIxF,EAAE,GAAG,CAJT;AAAA,MAKI13L,IALJ;AAAA,MAMI4vN,SANJ;AAAA,MAOIj+N,KAAK,GAAG,KAPZ;AAAA,MAQI6+O,YAAY,GAAG,CARnB;AAAA,MASIC,YAAY,GAAG,CATnB;AAAA,MAUI5yC,KAAK,GAAG,GAVZ;AAYA,SAAO1iM,KAAK,CAACglJ,OAAb;;AAEA,WAASuwF,OAAT,GAAmB;AACjB,QAAIl9O,CAAC,GAAGknM,MAAM,GAAG91M,MAAjB;AAAA,QACImV,OAAO,GAAG29L,EAAE,GAAGwF,EADnB;AAAA,QAEI9rM,KAAK,GAAG2I,OAAO,GAAG29L,EAAH,GAAQwF,EAF3B;AAAA,QAGIr2K,IAAI,GAAG9sB,OAAO,GAAGmjM,EAAH,GAAQxF,EAH1B;AAIA13L,IAAAA,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,IAAiB/F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY8H,CAAC,GAAGg9O,YAAJ,GAAmBC,YAAY,GAAG,CAA9C,CAAxB;AACA,QAAI9+O,KAAJ,EAAWqO,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACX5O,IAAAA,KAAK,IAAI,CAACy1B,IAAI,GAAGz1B,KAAP,GAAe4O,IAAI,IAAIxM,CAAC,GAAGg9O,YAAR,CAApB,IAA6C3yC,KAAtD;AACA+xB,IAAAA,SAAS,GAAG5vN,IAAI,IAAI,IAAIwwO,YAAR,CAAhB;AACA,QAAI7+O,KAAJ,EAAWP,KAAK,GAAG/F,IAAI,CAACsG,KAAL,CAAWP,KAAX,CAAR,EAA2Bw+N,SAAS,GAAGvkO,IAAI,CAACsG,KAAL,CAAWi+N,SAAX,CAAvC;AACX,QAAIlgO,MAAM,GAAG,oBAAS8D,CAAT,EAAYzE,GAAZ,CAAgB,UAASzJ,CAAT,EAAY;AAAE,aAAO8L,KAAK,GAAG4O,IAAI,GAAG1a,CAAtB;AAA0B,KAAxD,CAAb;AACA,WAAOirP,YAAY,CAACx2O,OAAO,GAAGrK,MAAM,CAACqK,OAAP,EAAH,GAAsBrK,MAA9B,CAAnB;AACD;;AAEDyL,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,CAACzuL,CAAD,CAAN,EAAWykO,OAAO,EAAtC,IAA4Ch2C,MAAM,EAAzD;AACD,GAFD;;AAIAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB,CAACs4M,EAAD,EAAKxF,EAAL,IAAWzrL,CAAX,EAAcixL,EAAE,GAAG,CAACA,EAApB,EAAwBxF,EAAE,GAAG,CAACA,EAA9B,EAAkCg5C,OAAO,EAA7D,IAAmE,CAACxzC,EAAD,EAAKxF,EAAL,CAA1E;AACD,GAFD;;AAIAv8L,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAS1kO,CAAT,EAAY;AAC7B,WAAO,CAACixL,EAAD,EAAKxF,EAAL,IAAWzrL,CAAX,EAAcixL,EAAE,GAAG,CAACA,EAApB,EAAwBxF,EAAE,GAAG,CAACA,EAA9B,EAAkC/lM,KAAK,GAAG,IAA1C,EAAgD++O,OAAO,EAA9D;AACD,GAFD;;AAIAv1O,EAAAA,KAAK,CAACy0N,SAAN,GAAkB,YAAW;AAC3B,WAAOA,SAAP;AACD,GAFD;;AAIAz0N,EAAAA,KAAK,CAAC6E,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAP;AACD,GAFD;;AAIA7E,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAASsa,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+M,KAAK,GAAG,CAAC,CAACsa,CAAV,EAAaykO,OAAO,EAAxC,IAA8C/+O,KAArD;AACD,GAFD;;AAIAwJ,EAAAA,KAAK,CAAC4G,OAAN,GAAgB,UAASkK,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4rP,YAAY,GAAGnlP,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYilP,YAAY,GAAG,CAACxkO,CAA5B,CAAf,EAA+CykO,OAAO,EAA1E,IAAgFF,YAAvF;AACD,GAFD;;AAIAr1O,EAAAA,KAAK,CAACq1O,YAAN,GAAqB,UAASvkO,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4rP,YAAY,GAAGnlP,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAf,EAA+BykO,OAAO,EAA1D,IAAgEF,YAAvE;AACD,GAFD;;AAIAr1O,EAAAA,KAAK,CAACs1O,YAAN,GAAqB,UAASxkO,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6rP,YAAY,GAAG,CAACxkO,CAAhB,EAAmBykO,OAAO,EAA9C,IAAoDD,YAA3D;AACD,GAFD;;AAIAt1O,EAAAA,KAAK,CAAC0iM,KAAN,GAAc,UAAS5xL,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBi5M,KAAK,GAAGxyM,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAR,EAAqCykO,OAAO,EAAhE,IAAsE7yC,KAA7E;AACD,GAFD;;AAIA1iM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO6+J,IAAI,CAACv+B,MAAM,EAAP,EAAW,CAACwC,EAAD,EAAKxF,EAAL,CAAX,CAAJ,CACF/lM,KADE,CACIA,KADJ,EAEF6+O,YAFE,CAEWA,YAFX,EAGFC,YAHE,CAGWA,YAHX,EAIF5yC,KAJE,CAIIA,KAJJ,CAAP;AAKD,GAND;;AAQA,SAAOqyC,gBAAUvqP,KAAV,CAAgB+qP,OAAO,EAAvB,EAA2BrrP,SAA3B,CAAP;AACD;;AAED,SAASurP,QAAT,CAAkBz1O,KAAlB,EAAyB;AACvB,MAAIi/D,IAAI,GAAGj/D,KAAK,CAACi/D,IAAjB;AAEAj/D,EAAAA,KAAK,CAAC4G,OAAN,GAAgB5G,KAAK,CAACs1O,YAAtB;AACA,SAAOt1O,KAAK,CAACq1O,YAAb;AACA,SAAOr1O,KAAK,CAACs1O,YAAb;;AAEAt1O,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOw2K,QAAQ,CAACx2K,IAAI,EAAL,CAAf;AACD,GAFD;;AAIA,SAAOj/D,KAAP;AACD;;AAEM,SAAS0rM,KAAT,GAAiB;AACtB,SAAO+pC,QAAQ,CAAC3X,IAAI,CAACtzO,KAAL,CAAW,IAAX,EAAiBN,SAAjB,EAA4BmrP,YAA5B,CAAyC,CAAzC,CAAD,CAAf;AACD;;;;;;;;;;ACpGc,kBAASt/O,WAAT,EAAsB0W,OAAtB,EAA+BliB,SAA/B,EAA0C;AACvDwL,EAAAA,WAAW,CAACxL,SAAZ,GAAwBkiB,OAAO,CAACliB,SAAR,GAAoBA,SAA5C;AACAA,EAAAA,SAAS,CAACwL,WAAV,GAAwBA,WAAxB;AACD;;AAEM,SAASyvL,MAAT,CAAgBqc,MAAhB,EAAwBsT,UAAxB,EAAoC;AACzC,MAAI5qN,SAAS,GAAG2C,MAAM,CAAC60L,MAAP,CAAc8f,MAAM,CAACt3M,SAArB,CAAhB;;AACA,OAAK,IAAI6D,GAAT,IAAgB+mN,UAAhB,EAA4B5qN,SAAS,CAAC6D,GAAD,CAAT,GAAiB+mN,UAAU,CAAC/mN,GAAD,CAA3B;;AAC5B,SAAO7D,SAAP;AACD;;;;;;;;;;;;;;;;;ACTD;;;;;;AAEO,SAASmrP,KAAT,GAAiB,CAAE;;AAEnB,IAAIC,MAAM,GAAG,GAAb;;AACA,IAAIC,QAAQ,GAAG,IAAID,MAAnB;;AAEP,IAAIE,GAAG,GAAG,qBAAV;AAAA,IACIC,GAAG,GAAG,+CADV;AAAA,IAEIC,GAAG,GAAG,gDAFV;AAAA,IAGIC,KAAK,GAAG,oBAHZ;AAAA,IAIIC,YAAY,GAAG,IAAInxH,MAAJ,CAAW,YAAY,CAAC+wH,GAAD,EAAMA,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CAJnB;AAAA,IAKIK,YAAY,GAAG,IAAIpxH,MAAJ,CAAW,YAAY,CAACixH,GAAD,EAAMA,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CALnB;AAAA,IAMII,aAAa,GAAG,IAAIrxH,MAAJ,CAAW,aAAa,CAAC+wH,GAAD,EAAMA,GAAN,EAAWA,GAAX,EAAgBC,GAAhB,CAAb,GAAoC,MAA/C,CANpB;AAAA,IAOIM,aAAa,GAAG,IAAItxH,MAAJ,CAAW,aAAa,CAACixH,GAAD,EAAMA,GAAN,EAAWA,GAAX,EAAgBD,GAAhB,CAAb,GAAoC,MAA/C,CAPpB;AAAA,IAQIO,YAAY,GAAG,IAAIvxH,MAAJ,CAAW,YAAY,CAACgxH,GAAD,EAAMC,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CARnB;AAAA,IASIO,aAAa,GAAG,IAAIxxH,MAAJ,CAAW,aAAa,CAACgxH,GAAD,EAAMC,GAAN,EAAWA,GAAX,EAAgBD,GAAhB,CAAb,GAAoC,MAA/C,CATpB;AAWA,IAAIS,KAAK,GAAG;AACVC,EAAAA,SAAS,EAAE,QADD;AAEVC,EAAAA,YAAY,EAAE,QAFJ;AAGVC,EAAAA,IAAI,EAAE,QAHI;AAIVC,EAAAA,UAAU,EAAE,QAJF;AAKVC,EAAAA,KAAK,EAAE,QALG;AAMVC,EAAAA,KAAK,EAAE,QANG;AAOVC,EAAAA,MAAM,EAAE,QAPE;AAQVC,EAAAA,KAAK,EAAE,QARG;AASVC,EAAAA,cAAc,EAAE,QATN;AAUVC,EAAAA,IAAI,EAAE,QAVI;AAWVC,EAAAA,UAAU,EAAE,QAXF;AAYVC,EAAAA,KAAK,EAAE,QAZG;AAaVC,EAAAA,SAAS,EAAE,QAbD;AAcVC,EAAAA,SAAS,EAAE,QAdD;AAeVC,EAAAA,UAAU,EAAE,QAfF;AAgBVC,EAAAA,SAAS,EAAE,QAhBD;AAiBVC,EAAAA,KAAK,EAAE,QAjBG;AAkBVC,EAAAA,cAAc,EAAE,QAlBN;AAmBVC,EAAAA,QAAQ,EAAE,QAnBA;AAoBVC,EAAAA,OAAO,EAAE,QApBC;AAqBVC,EAAAA,IAAI,EAAE,QArBI;AAsBVC,EAAAA,QAAQ,EAAE,QAtBA;AAuBVC,EAAAA,QAAQ,EAAE,QAvBA;AAwBVC,EAAAA,aAAa,EAAE,QAxBL;AAyBVC,EAAAA,QAAQ,EAAE,QAzBA;AA0BVC,EAAAA,SAAS,EAAE,QA1BD;AA2BVC,EAAAA,QAAQ,EAAE,QA3BA;AA4BVC,EAAAA,SAAS,EAAE,QA5BD;AA6BVC,EAAAA,WAAW,EAAE,QA7BH;AA8BVC,EAAAA,cAAc,EAAE,QA9BN;AA+BVC,EAAAA,UAAU,EAAE,QA/BF;AAgCVC,EAAAA,UAAU,EAAE,QAhCF;AAiCVC,EAAAA,OAAO,EAAE,QAjCC;AAkCVC,EAAAA,UAAU,EAAE,QAlCF;AAmCVC,EAAAA,YAAY,EAAE,QAnCJ;AAoCVC,EAAAA,aAAa,EAAE,QApCL;AAqCVC,EAAAA,aAAa,EAAE,QArCL;AAsCVC,EAAAA,aAAa,EAAE,QAtCL;AAuCVC,EAAAA,aAAa,EAAE,QAvCL;AAwCVC,EAAAA,UAAU,EAAE,QAxCF;AAyCVC,EAAAA,QAAQ,EAAE,QAzCA;AA0CVC,EAAAA,WAAW,EAAE,QA1CH;AA2CVC,EAAAA,OAAO,EAAE,QA3CC;AA4CVC,EAAAA,OAAO,EAAE,QA5CC;AA6CVC,EAAAA,UAAU,EAAE,QA7CF;AA8CVC,EAAAA,SAAS,EAAE,QA9CD;AA+CVC,EAAAA,WAAW,EAAE,QA/CH;AAgDVC,EAAAA,WAAW,EAAE,QAhDH;AAiDVC,EAAAA,OAAO,EAAE,QAjDC;AAkDVC,EAAAA,SAAS,EAAE,QAlDD;AAmDVC,EAAAA,UAAU,EAAE,QAnDF;AAoDVC,EAAAA,IAAI,EAAE,QApDI;AAqDVC,EAAAA,SAAS,EAAE,QArDD;AAsDVC,EAAAA,IAAI,EAAE,QAtDI;AAuDVC,EAAAA,KAAK,EAAE,QAvDG;AAwDVC,EAAAA,WAAW,EAAE,QAxDH;AAyDVC,EAAAA,IAAI,EAAE,QAzDI;AA0DVC,EAAAA,QAAQ,EAAE,QA1DA;AA2DVC,EAAAA,OAAO,EAAE,QA3DC;AA4DVC,EAAAA,SAAS,EAAE,QA5DD;AA6DVC,EAAAA,MAAM,EAAE,QA7DE;AA8DVC,EAAAA,KAAK,EAAE,QA9DG;AA+DVC,EAAAA,KAAK,EAAE,QA/DG;AAgEVC,EAAAA,QAAQ,EAAE,QAhEA;AAiEVC,EAAAA,aAAa,EAAE,QAjEL;AAkEVC,EAAAA,SAAS,EAAE,QAlED;AAmEVC,EAAAA,YAAY,EAAE,QAnEJ;AAoEVC,EAAAA,SAAS,EAAE,QApED;AAqEVC,EAAAA,UAAU,EAAE,QArEF;AAsEVC,EAAAA,SAAS,EAAE,QAtED;AAuEVC,EAAAA,oBAAoB,EAAE,QAvEZ;AAwEVC,EAAAA,SAAS,EAAE,QAxED;AAyEVC,EAAAA,UAAU,EAAE,QAzEF;AA0EVC,EAAAA,SAAS,EAAE,QA1ED;AA2EVC,EAAAA,SAAS,EAAE,QA3ED;AA4EVC,EAAAA,WAAW,EAAE,QA5EH;AA6EVC,EAAAA,aAAa,EAAE,QA7EL;AA8EVC,EAAAA,YAAY,EAAE,QA9EJ;AA+EVC,EAAAA,cAAc,EAAE,QA/EN;AAgFVC,EAAAA,cAAc,EAAE,QAhFN;AAiFVC,EAAAA,cAAc,EAAE,QAjFN;AAkFVC,EAAAA,WAAW,EAAE,QAlFH;AAmFVC,EAAAA,IAAI,EAAE,QAnFI;AAoFVC,EAAAA,SAAS,EAAE,QApFD;AAqFVC,EAAAA,KAAK,EAAE,QArFG;AAsFVC,EAAAA,OAAO,EAAE,QAtFC;AAuFVC,EAAAA,MAAM,EAAE,QAvFE;AAwFVC,EAAAA,gBAAgB,EAAE,QAxFR;AAyFVC,EAAAA,UAAU,EAAE,QAzFF;AA0FVC,EAAAA,YAAY,EAAE,QA1FJ;AA2FVC,EAAAA,YAAY,EAAE,QA3FJ;AA4FVC,EAAAA,cAAc,EAAE,QA5FN;AA6FVC,EAAAA,eAAe,EAAE,QA7FP;AA8FVC,EAAAA,iBAAiB,EAAE,QA9FT;AA+FVC,EAAAA,eAAe,EAAE,QA/FP;AAgGVC,EAAAA,eAAe,EAAE,QAhGP;AAiGVC,EAAAA,YAAY,EAAE,QAjGJ;AAkGVC,EAAAA,SAAS,EAAE,QAlGD;AAmGVC,EAAAA,SAAS,EAAE,QAnGD;AAoGVC,EAAAA,QAAQ,EAAE,QApGA;AAqGVC,EAAAA,WAAW,EAAE,QArGH;AAsGVC,EAAAA,IAAI,EAAE,QAtGI;AAuGVC,EAAAA,OAAO,EAAE,QAvGC;AAwGVC,EAAAA,KAAK,EAAE,QAxGG;AAyGVC,EAAAA,SAAS,EAAE,QAzGD;AA0GVC,EAAAA,MAAM,EAAE,QA1GE;AA2GVC,EAAAA,SAAS,EAAE,QA3GD;AA4GVC,EAAAA,MAAM,EAAE,QA5GE;AA6GVC,EAAAA,aAAa,EAAE,QA7GL;AA8GVC,EAAAA,SAAS,EAAE,QA9GD;AA+GVC,EAAAA,aAAa,EAAE,QA/GL;AAgHVC,EAAAA,aAAa,EAAE,QAhHL;AAiHVC,EAAAA,UAAU,EAAE,QAjHF;AAkHVC,EAAAA,SAAS,EAAE,QAlHD;AAmHVC,EAAAA,IAAI,EAAE,QAnHI;AAoHVC,EAAAA,IAAI,EAAE,QApHI;AAqHVC,EAAAA,IAAI,EAAE,QArHI;AAsHVC,EAAAA,UAAU,EAAE,QAtHF;AAuHVC,EAAAA,MAAM,EAAE,QAvHE;AAwHVC,EAAAA,aAAa,EAAE,QAxHL;AAyHVC,EAAAA,GAAG,EAAE,QAzHK;AA0HVC,EAAAA,SAAS,EAAE,QA1HD;AA2HVC,EAAAA,SAAS,EAAE,QA3HD;AA4HVC,EAAAA,WAAW,EAAE,QA5HH;AA6HVC,EAAAA,MAAM,EAAE,QA7HE;AA8HVC,EAAAA,UAAU,EAAE,QA9HF;AA+HVC,EAAAA,QAAQ,EAAE,QA/HA;AAgIVC,EAAAA,QAAQ,EAAE,QAhIA;AAiIVC,EAAAA,MAAM,EAAE,QAjIE;AAkIVC,EAAAA,MAAM,EAAE,QAlIE;AAmIVC,EAAAA,OAAO,EAAE,QAnIC;AAoIVC,EAAAA,SAAS,EAAE,QApID;AAqIVC,EAAAA,SAAS,EAAE,QArID;AAsIVC,EAAAA,SAAS,EAAE,QAtID;AAuIVC,EAAAA,IAAI,EAAE,QAvII;AAwIVC,EAAAA,WAAW,EAAE,QAxIH;AAyIVC,EAAAA,SAAS,EAAE,QAzID;AA0IV76O,EAAAA,GAAG,EAAE,QA1IK;AA2IV86O,EAAAA,IAAI,EAAE,QA3II;AA4IVC,EAAAA,OAAO,EAAE,QA5IC;AA6IVC,EAAAA,MAAM,EAAE,QA7IE;AA8IVC,EAAAA,SAAS,EAAE,QA9ID;AA+IVC,EAAAA,MAAM,EAAE,QA/IE;AAgJVC,EAAAA,KAAK,EAAE,QAhJG;AAiJVC,EAAAA,KAAK,EAAE,QAjJG;AAkJVC,EAAAA,UAAU,EAAE,QAlJF;AAmJVC,EAAAA,MAAM,EAAE,QAnJE;AAoJVC,EAAAA,WAAW,EAAE;AApJH,CAAZ;AAuJA,qBAAOhK,KAAP,EAAciK,KAAd,EAAqB;AACnB1gL,EAAAA,IAAI,EAAE,UAASvyB,QAAT,EAAmB;AACvB,WAAOx/C,MAAM,CAACE,MAAP,CAAc,IAAI,KAAK2I,WAAT,EAAd,EAAoC,IAApC,EAA0C22C,QAA1C,CAAP;AACD,GAHkB;AAInBkzM,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAO,KAAKC,GAAL,GAAWD,WAAX,EAAP;AACD,GANkB;AAOnBE,EAAAA,GAAG,EAAEC,eAPc;AAOG;AACtBC,EAAAA,SAAS,EAAED,eARQ;AASnBE,EAAAA,SAAS,EAAEC,eATQ;AAUnBC,EAAAA,SAAS,EAAEC,eAVQ;AAWnBtmP,EAAAA,QAAQ,EAAEsmP;AAXS,CAArB;;AAcA,SAASL,eAAT,GAA2B;AACzB,SAAO,KAAKF,GAAL,GAAWG,SAAX,EAAP;AACD;;AAED,SAASE,eAAT,GAA2B;AACzB,SAAOG,UAAU,CAAC,IAAD,CAAV,CAAiBJ,SAAjB,EAAP;AACD;;AAED,SAASG,eAAT,GAA2B;AACzB,SAAO,KAAKP,GAAL,GAAWM,SAAX,EAAP;AACD;;AAEc,SAASR,KAAT,CAAejzI,MAAf,EAAuB;AACpC,MAAI9qB,CAAJ,EAAO3lF,CAAP;AACAywG,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAG,EAAV,EAActH,IAAd,GAAqB92G,WAArB,EAAT;AACA,SAAO,CAACszF,CAAC,GAAGo0J,KAAK,CAAC13N,IAAN,CAAWouF,MAAX,CAAL,KAA4BzwG,CAAC,GAAG2lF,CAAC,CAAC,CAAD,CAAD,CAAKn4F,MAAT,EAAiBm4F,CAAC,GAAGmjC,QAAQ,CAACnjC,CAAC,CAAC,CAAD,CAAF,EAAO,EAAP,CAA7B,EAAyC3lF,CAAC,KAAK,CAAN,GAAUqkP,IAAI,CAAC1+J,CAAD,CAAd,CAAkB;AAAlB,IACtE3lF,CAAC,KAAK,CAAN,GAAU,IAAIskP,GAAJ,CAAS3+J,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,IAAI,CAAL,GAAS,IAAnC,EAA2CA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,GAAG,IAAhE,EAAwE,CAACA,CAAC,GAAG,GAAL,KAAa,CAAd,GAAoBA,CAAC,GAAG,GAA/F,EAAqG,CAArG,CAAV,CAAkH;AAAlH,IACA3lF,CAAC,KAAK,CAAN,GAAUukP,IAAI,CAAC5+J,CAAC,IAAI,EAAL,GAAU,IAAX,EAAiBA,CAAC,IAAI,EAAL,GAAU,IAA3B,EAAiCA,CAAC,IAAI,CAAL,GAAS,IAA1C,EAAgD,CAACA,CAAC,GAAG,IAAL,IAAa,IAA7D,CAAd,CAAiF;AAAjF,IACA3lF,CAAC,KAAK,CAAN,GAAUukP,IAAI,CAAE5+J,CAAC,IAAI,EAAL,GAAU,GAAX,GAAmBA,CAAC,IAAI,CAAL,GAAS,IAA7B,EAAqCA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,IAAI,CAAL,GAAS,IAA/D,EAAuEA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,GAAG,IAA5F,EAAmG,CAAE,CAACA,CAAC,GAAG,GAAL,KAAa,CAAd,GAAoBA,CAAC,GAAG,GAAzB,IAAiC,IAApI,CAAd,CAAwJ;AAAxJ,IACA,IAJC,CAIK;AAJL,MAKD,CAACA,CAAC,GAAGq0J,YAAY,CAAC33N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC,IAAI6zI,GAAJ,CAAQ3+J,CAAC,CAAC,CAAD,CAAT,EAAcA,CAAC,CAAC,CAAD,CAAf,EAAoBA,CAAC,CAAC,CAAD,CAArB,EAA0B,CAA1B,CAAlC,CAA+D;AAA/D,IACA,CAACA,CAAC,GAAGs0J,YAAY,CAAC53N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC,IAAI6zI,GAAJ,CAAQ3+J,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAArB,EAA0BA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAvC,EAA4CA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAzD,EAA8D,CAA9D,CAAlC,CAAmG;AAAnG,IACA,CAACA,CAAC,GAAGu0J,aAAa,CAAC73N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC8zI,IAAI,CAAC5+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd,EAAmBA,CAAC,CAAC,CAAD,CAApB,CAAvC,CAAgE;AAAhE,IACA,CAACA,CAAC,GAAGw0J,aAAa,CAAC93N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC8zI,IAAI,CAAC5+J,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAhC,EAAqCA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAlD,EAAuDA,CAAC,CAAC,CAAD,CAAxD,CAAvC,CAAoG;AAApG,IACA,CAACA,CAAC,GAAGy0J,YAAY,CAAC/3N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC+zI,IAAI,CAAC7+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAA1B,EAA+B,CAA/B,CAAtC,CAAwE;AAAxE,IACA,CAACA,CAAC,GAAG00J,aAAa,CAACh4N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC+zI,IAAI,CAAC7+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAA1B,EAA+BA,CAAC,CAAC,CAAD,CAAhC,CAAvC,CAA4E;AAA5E,IACA20J,KAAK,CAACz1H,cAAN,CAAqBpU,MAArB,IAA+B4zI,IAAI,CAAC/J,KAAK,CAAC7pI,MAAD,CAAN,CAAnC,CAAmD;AAAnD,IACAA,MAAM,KAAK,aAAX,GAA2B,IAAI6zI,GAAJ,CAAQ7jL,GAAR,EAAaA,GAAb,EAAkBA,GAAlB,EAAuB,CAAvB,CAA3B,GACA,IAbN;AAcD;;AAED,SAAS4jL,IAAT,CAAcjoP,CAAd,EAAiB;AACf,SAAO,IAAIkoP,GAAJ,CAAQloP,CAAC,IAAI,EAAL,GAAU,IAAlB,EAAwBA,CAAC,IAAI,CAAL,GAAS,IAAjC,EAAuCA,CAAC,GAAG,IAA3C,EAAiD,CAAjD,CAAP;AACD;;AAED,SAASmoP,IAAT,CAAcroP,CAAd,EAAiBygC,CAAjB,EAAoB1gC,CAApB,EAAuB7G,CAAvB,EAA0B;AACxB,MAAIA,CAAC,IAAI,CAAT,EAAY8G,CAAC,GAAGygC,CAAC,GAAG1gC,CAAC,GAAGwkE,GAAZ;AACZ,SAAO,IAAI6jL,GAAJ,CAAQpoP,CAAR,EAAWygC,CAAX,EAAc1gC,CAAd,EAAiB7G,CAAjB,CAAP;AACD;;AAEM,SAASqvP,UAAT,CAAoB5qO,CAApB,EAAuB;AAC5B,MAAI,EAAEA,CAAC,YAAY4/N,KAAf,CAAJ,EAA2B5/N,CAAC,GAAG6pO,KAAK,CAAC7pO,CAAD,CAAT;AAC3B,MAAI,CAACA,CAAL,EAAQ,OAAO,IAAIyqO,GAAJ,EAAP;AACRzqO,EAAAA,CAAC,GAAGA,CAAC,CAAC+pO,GAAF,EAAJ;AACA,SAAO,IAAIU,GAAJ,CAAQzqO,CAAC,CAAC3d,CAAV,EAAa2d,CAAC,CAAC8iB,CAAf,EAAkB9iB,CAAC,CAAC5d,CAApB,EAAuB4d,CAAC,CAAC6qO,OAAzB,CAAP;AACD;;AAEM,SAASd,GAAT,CAAa1nP,CAAb,EAAgBygC,CAAhB,EAAmB1gC,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBi3P,UAAU,CAACvoP,CAAD,CAAnC,GAAyC,IAAIooP,GAAJ,CAAQpoP,CAAR,EAAWygC,CAAX,EAAc1gC,CAAd,EAAiByoP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASJ,GAAT,CAAapoP,CAAb,EAAgBygC,CAAhB,EAAmB1gC,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,OAAKxoP,CAAL,GAAS,CAACA,CAAV;AACA,OAAKygC,CAAL,GAAS,CAACA,CAAV;AACA,OAAK1gC,CAAL,GAAS,CAACA,CAAV;AACA,OAAKyoP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOJ,GAAP,EAAYV,GAAZ,EAAiB,oBAAOnK,KAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,QAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,QAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAI84O,GAAJ,CAAQ,KAAKpoP,CAAL,GAASsP,CAAjB,EAAoB,KAAKmxB,CAAL,GAASnxB,CAA7B,EAAgC,KAAKvP,CAAL,GAASuP,CAAzC,EAA4C,KAAKk5O,OAAjD,CAAP;AACD,GAJ4B;AAK7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,MAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,MAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAI84O,GAAJ,CAAQ,KAAKpoP,CAAL,GAASsP,CAAjB,EAAoB,KAAKmxB,CAAL,GAASnxB,CAA7B,EAAgC,KAAKvP,CAAL,GAASuP,CAAzC,EAA4C,KAAKk5O,OAAjD,CAAP;AACD,GAR4B;AAS7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,WAAO,IAAP;AACD,GAX4B;AAY7BD,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAQ,CAAC,GAAD,IAAQ,KAAKznP,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAA5B,IACC,CAAC,GAAD,IAAQ,KAAKygC,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAD5B,IAEC,CAAC,GAAD,IAAQ,KAAK1gC,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAF5B,IAGC,KAAK,KAAKyoP,OAAV,IAAqB,KAAKA,OAAL,IAAgB,CAH7C;AAID,GAjB4B;AAkB7Bb,EAAAA,GAAG,EAAEc,aAlBwB;AAkBT;AACpBZ,EAAAA,SAAS,EAAEY,aAnBkB;AAoB7BT,EAAAA,SAAS,EAAEU,aApBkB;AAqB7B/mP,EAAAA,QAAQ,EAAE+mP;AArBmB,CAAd,CAAjB;;AAwBA,SAASD,aAAT,GAAyB;AACvB,SAAO,MAAMd,GAAG,CAAC,KAAK3nP,CAAN,CAAT,GAAoB2nP,GAAG,CAAC,KAAKlnN,CAAN,CAAvB,GAAkCknN,GAAG,CAAC,KAAK5nP,CAAN,CAA5C;AACD;;AAED,SAAS2oP,aAAT,GAAyB;AACvB,MAAIxvP,CAAC,GAAG,KAAKsvP,OAAb;AAAsBtvP,EAAAA,CAAC,GAAG0D,KAAK,CAAC1D,CAAD,CAAL,GAAW,CAAX,GAAenB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYgB,CAAZ,CAAZ,CAAnB;AACtB,SAAO,CAACA,CAAC,KAAK,CAAN,GAAU,MAAV,GAAmB,OAApB,IACDnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAK2B,CAAhB,KAAsB,CAApC,CAAZ,CADC,GACqD,IADrD,GAEDjI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAKoiC,CAAhB,KAAsB,CAApC,CAAZ,CAFC,GAEqD,IAFrD,GAGD1oC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAK0B,CAAhB,KAAsB,CAApC,CAAZ,CAHC,IAIA7G,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,OAAOA,CAAP,GAAW,GAJ3B,CAAP;AAKD;;AAED,SAASyuP,GAAT,CAAa3yP,KAAb,EAAoB;AAClBA,EAAAA,KAAK,GAAG+C,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAWrJ,KAAX,KAAqB,CAAnC,CAAZ,CAAR;AACA,SAAO,CAACA,KAAK,GAAG,EAAR,GAAa,GAAb,GAAmB,EAApB,IAA0BA,KAAK,CAAC2M,QAAN,CAAe,EAAf,CAAjC;AACD;;AAED,SAAS2mP,IAAT,CAAc/pM,CAAd,EAAiB/oD,CAAjB,EAAoBsO,CAApB,EAAuB5K,CAAvB,EAA0B;AACxB,MAAIA,CAAC,IAAI,CAAT,EAAYqlD,CAAC,GAAG/oD,CAAC,GAAGsO,CAAC,GAAGygE,GAAZ,CAAZ,KACK,IAAIzgE,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAI,CAAnB,EAAsBy6C,CAAC,GAAG/oD,CAAC,GAAG+uE,GAAR,CAAtB,KACA,IAAI/uE,CAAC,IAAI,CAAT,EAAY+oD,CAAC,GAAGgmB,GAAJ;AACjB,SAAO,IAAIokL,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB5K,CAAjB,CAAP;AACD;;AAEM,SAASgvP,UAAT,CAAoBvqO,CAApB,EAAuB;AAC5B,MAAIA,CAAC,YAAYgrO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQhrO,CAAC,CAAC4gC,CAAV,EAAa5gC,CAAC,CAACnoB,CAAf,EAAkBmoB,CAAC,CAAC7Z,CAApB,EAAuB6Z,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI,EAAE7qO,CAAC,YAAY4/N,KAAf,CAAJ,EAA2B5/N,CAAC,GAAG6pO,KAAK,CAAC7pO,CAAD,CAAT;AAC3B,MAAI,CAACA,CAAL,EAAQ,OAAO,IAAIgrO,GAAJ,EAAP;AACR,MAAIhrO,CAAC,YAAYgrO,GAAjB,EAAsB,OAAOhrO,CAAP;AACtBA,EAAAA,CAAC,GAAGA,CAAC,CAAC+pO,GAAF,EAAJ;AACA,MAAI1nP,CAAC,GAAG2d,CAAC,CAAC3d,CAAF,GAAM,GAAd;AAAA,MACIygC,CAAC,GAAG9iB,CAAC,CAAC8iB,CAAF,GAAM,GADd;AAAA,MAEI1gC,CAAC,GAAG4d,CAAC,CAAC5d,CAAF,GAAM,GAFd;AAAA,MAGI7H,GAAG,GAAGH,IAAI,CAACG,GAAL,CAAS8H,CAAT,EAAYygC,CAAZ,EAAe1gC,CAAf,CAHV;AAAA,MAII3H,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS4H,CAAT,EAAYygC,CAAZ,EAAe1gC,CAAf,CAJV;AAAA,MAKIw+C,CAAC,GAAGgmB,GALR;AAAA,MAMI/uE,CAAC,GAAG4C,GAAG,GAAGF,GANd;AAAA,MAOI4L,CAAC,GAAG,CAAC1L,GAAG,GAAGF,GAAP,IAAc,CAPtB;;AAQA,MAAI1C,CAAJ,EAAO;AACL,QAAIwK,CAAC,KAAK5H,GAAV,EAAemmD,CAAC,GAAG,CAAC9d,CAAC,GAAG1gC,CAAL,IAAUvK,CAAV,GAAc,CAACirC,CAAC,GAAG1gC,CAAL,IAAU,CAA5B,CAAf,KACK,IAAI0gC,CAAC,KAAKroC,GAAV,EAAemmD,CAAC,GAAG,CAACx+C,CAAC,GAAGC,CAAL,IAAUxK,CAAV,GAAc,CAAlB,CAAf,KACA+oD,CAAC,GAAG,CAACv+C,CAAC,GAAGygC,CAAL,IAAUjrC,CAAV,GAAc,CAAlB;AACLA,IAAAA,CAAC,IAAIsO,CAAC,GAAG,GAAJ,GAAU1L,GAAG,GAAGF,GAAhB,GAAsB,IAAIE,GAAJ,GAAUF,GAArC;AACAqmD,IAAAA,CAAC,IAAI,EAAL;AACD,GAND,MAMO;AACL/oD,IAAAA,CAAC,GAAGsO,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG,CAAb,GAAiB,CAAjB,GAAqBy6C,CAAzB;AACD;;AACD,SAAO,IAAIoqM,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB6Z,CAAC,CAAC6qO,OAAnB,CAAP;AACD;;AAEM,SAASI,GAAT,CAAarqM,CAAb,EAAgB/oD,CAAhB,EAAmBsO,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB42P,UAAU,CAAC3pM,CAAD,CAAnC,GAAyC,IAAIoqM,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAED,SAASG,GAAT,CAAapqM,CAAb,EAAgB/oD,CAAhB,EAAmBsO,CAAnB,EAAsB0kP,OAAtB,EAA+B;AAC7B,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK/oD,CAAL,GAAS,CAACA,CAAV;AACA,OAAKsO,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOG,GAAP,EAAYC,GAAZ,EAAiB,oBAAOrL,KAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,QAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,QAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAIq5O,GAAJ,CAAQ,KAAKpqM,CAAb,EAAgB,KAAK/oD,CAArB,EAAwB,KAAKsO,CAAL,GAASwL,CAAjC,EAAoC,KAAKk5O,OAAzC,CAAP;AACD,GAJ4B;AAK7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,MAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,MAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAIq5O,GAAJ,CAAQ,KAAKpqM,CAAb,EAAgB,KAAK/oD,CAArB,EAAwB,KAAKsO,CAAL,GAASwL,CAAjC,EAAoC,KAAKk5O,OAAzC,CAAP;AACD,GAR4B;AAS7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAInpM,CAAC,GAAG,KAAKA,CAAL,GAAS,GAAT,GAAe,CAAC,KAAKA,CAAL,GAAS,CAAV,IAAe,GAAtC;AAAA,QACI/oD,CAAC,GAAGoH,KAAK,CAAC2hD,CAAD,CAAL,IAAY3hD,KAAK,CAAC,KAAKpH,CAAN,CAAjB,GAA4B,CAA5B,GAAgC,KAAKA,CAD7C;AAAA,QAEIsO,CAAC,GAAG,KAAKA,CAFb;AAAA,QAGI+kP,EAAE,GAAG/kP,CAAC,GAAG,CAACA,CAAC,GAAG,GAAJ,GAAUA,CAAV,GAAc,IAAIA,CAAnB,IAAwBtO,CAHrC;AAAA,QAIIszP,EAAE,GAAG,IAAIhlP,CAAJ,GAAQ+kP,EAJjB;AAKA,WAAO,IAAIT,GAAJ,CACLW,OAAO,CAACxqM,CAAC,IAAI,GAAL,GAAWA,CAAC,GAAG,GAAf,GAAqBA,CAAC,GAAG,GAA1B,EAA+BuqM,EAA/B,EAAmCD,EAAnC,CADF,EAELE,OAAO,CAACxqM,CAAD,EAAIuqM,EAAJ,EAAQD,EAAR,CAFF,EAGLE,OAAO,CAACxqM,CAAC,GAAG,GAAJ,GAAUA,CAAC,GAAG,GAAd,GAAoBA,CAAC,GAAG,GAAzB,EAA8BuqM,EAA9B,EAAkCD,EAAlC,CAHF,EAIL,KAAKL,OAJA,CAAP;AAMD,GArB4B;AAsB7Bf,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAO,CAAC,KAAK,KAAKjyP,CAAV,IAAe,KAAKA,CAAL,IAAU,CAAzB,IAA8BoH,KAAK,CAAC,KAAKpH,CAAN,CAApC,KACC,KAAK,KAAKsO,CAAV,IAAe,KAAKA,CAAL,IAAU,CAD1B,IAEC,KAAK,KAAK0kP,OAAV,IAAqB,KAAKA,OAAL,IAAgB,CAF7C;AAGD,GA1B4B;AA2B7BV,EAAAA,SAAS,EAAE,YAAW;AACpB,QAAI5uP,CAAC,GAAG,KAAKsvP,OAAb;AAAsBtvP,IAAAA,CAAC,GAAG0D,KAAK,CAAC1D,CAAD,CAAL,GAAW,CAAX,GAAenB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYgB,CAAZ,CAAZ,CAAnB;AACtB,WAAO,CAACA,CAAC,KAAK,CAAN,GAAU,MAAV,GAAmB,OAApB,KACA,KAAKqlD,CAAL,IAAU,CADV,IACe,IADf,GAED,CAAC,KAAK/oD,CAAL,IAAU,CAAX,IAAgB,GAFf,GAEqB,KAFrB,GAGD,CAAC,KAAKsO,CAAL,IAAU,CAAX,IAAgB,GAHf,GAGqB,GAHrB,IAIA5K,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,OAAOA,CAAP,GAAW,GAJ3B,CAAP;AAKD;AAlC4B,CAAd,CAAjB;AAqCA;;AACA,SAAS6vP,OAAT,CAAiBxqM,CAAjB,EAAoBuqM,EAApB,EAAwBD,EAAxB,EAA4B;AAC1B,SAAO,CAACtqM,CAAC,GAAG,EAAJ,GAASuqM,EAAE,GAAG,CAACD,EAAE,GAAGC,EAAN,IAAYvqM,CAAZ,GAAgB,EAA9B,GACFA,CAAC,GAAG,GAAJ,GAAUsqM,EAAV,GACAtqM,CAAC,GAAG,GAAJ,GAAUuqM,EAAE,GAAG,CAACD,EAAE,GAAGC,EAAN,KAAa,MAAMvqM,CAAnB,IAAwB,EAAvC,GACAuqM,EAHC,IAGK,GAHZ;AAID;;;;;;;;AClXM,MAAME,OAAO,GAAGjxP,IAAI,CAACuiC,EAAL,GAAU,GAA1B;;AACA,MAAM2uN,OAAO,GAAG,MAAMlxP,IAAI,CAACuiC,EAA3B;;;;;;;;;;;;;;;;ACDP;;AACA;;AACA;;;;;;AAEA;AACA,MAAM4uN,CAAC,GAAG,EAAV;AAAA,MACIC,EAAE,GAAG,OADT;AAAA,MAEIC,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAG,OAHT;AAAA,MAIIpsC,EAAE,GAAG,IAAI,EAJb;AAAA,MAKItkI,EAAE,GAAG,IAAI,EALb;AAAA,MAMIC,EAAE,GAAG,IAAID,EAAJ,GAASA,EANlB;AAAA,MAOI2wK,EAAE,GAAG3wK,EAAE,GAAGA,EAAL,GAAUA,EAPnB;;AASA,SAAS4wK,UAAT,CAAoB5rO,CAApB,EAAuB;AACrB,MAAIA,CAAC,YAAY6rO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa6Z,CAAC,CAACzkB,CAAf,EAAkBykB,CAAC,CAAC5d,CAApB,EAAuB4d,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI7qO,CAAC,YAAY8rO,GAAjB,EAAsB,OAAOC,OAAO,CAAC/rO,CAAD,CAAd;AACtB,MAAI,EAAEA,CAAC,YAAYyqO,UAAf,CAAJ,EAAyBzqO,CAAC,GAAG,uBAAWA,CAAX,CAAJ;AACzB,MAAI3d,CAAC,GAAG2pP,QAAQ,CAAChsO,CAAC,CAAC3d,CAAH,CAAhB;AAAA,MACIygC,CAAC,GAAGkpN,QAAQ,CAAChsO,CAAC,CAAC8iB,CAAH,CADhB;AAAA,MAEI1gC,CAAC,GAAG4pP,QAAQ,CAAChsO,CAAC,CAAC5d,CAAH,CAFhB;AAAA,MAGI2W,CAAC,GAAGkzO,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDqpP,EAAnD,CAHf;AAAA,MAGuEjxP,CAHvE;AAAA,MAG0EsvE,CAH1E;AAIA,MAAIznE,CAAC,KAAKygC,CAAN,IAAWA,CAAC,KAAK1gC,CAArB,EAAwB5H,CAAC,GAAGsvE,CAAC,GAAG/wD,CAAR,CAAxB,KAAwC;AACtCve,IAAAA,CAAC,GAAGyxP,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDopP,EAAnD,CAAX;AACA1hL,IAAAA,CAAC,GAAGmiL,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDspP,EAAnD,CAAX;AACD;AACD,SAAO,IAAIG,GAAJ,CAAQ,MAAM9yO,CAAN,GAAU,EAAlB,EAAsB,OAAOve,CAAC,GAAGue,CAAX,CAAtB,EAAqC,OAAOA,CAAC,GAAG+wD,CAAX,CAArC,EAAoD9pD,CAAC,CAAC6qO,OAAtD,CAAP;AACD;;AAEM,SAAS9G,IAAT,CAAc59O,CAAd,EAAiB0kP,OAAjB,EAA0B;AAC/B,SAAO,IAAIgB,GAAJ,CAAQ1lP,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAP;AACD;;AAEc,SAASqB,GAAT,CAAa/lP,CAAb,EAAgB5K,CAAhB,EAAmB6G,CAAnB,EAAsByoP,OAAtB,EAA+B;AAC5C,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBi4P,UAAU,CAACzlP,CAAD,CAAnC,GAAyC,IAAI0lP,GAAJ,CAAQ1lP,CAAR,EAAW5K,CAAX,EAAc6G,CAAd,EAAiByoP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASgB,GAAT,CAAa1lP,CAAb,EAAgB5K,CAAhB,EAAmB6G,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,OAAK1kP,CAAL,GAAS,CAACA,CAAV;AACA,OAAK5K,CAAL,GAAS,CAACA,CAAV;AACA,OAAK6G,CAAL,GAAS,CAACA,CAAV;AACA,OAAKyoP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOgB,GAAP,EAAYK,GAAZ,EAAiB,oBAAOtM,YAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpB,WAAO,IAAIk6O,GAAJ,CAAQ,KAAK1lP,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlB,EAA0C,KAAKpW,CAA/C,EAAkD,KAAK6G,CAAvD,EAA0D,KAAKyoP,OAA/D,CAAP;AACD,GAH4B;AAI7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClB,WAAO,IAAIk6O,GAAJ,CAAQ,KAAK1lP,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlB,EAA0C,KAAKpW,CAA/C,EAAkD,KAAK6G,CAAvD,EAA0D,KAAKyoP,OAA/D,CAAP;AACD,GAN4B;AAO7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAIhxO,CAAC,GAAG,CAAC,KAAK5S,CAAL,GAAS,EAAV,IAAgB,GAAxB;AAAA,QACI3L,CAAC,GAAGyE,KAAK,CAAC,KAAK1D,CAAN,CAAL,GAAgBwd,CAAhB,GAAoBA,CAAC,GAAG,KAAKxd,CAAL,GAAS,GADzC;AAAA,QAEIuuE,CAAC,GAAG7qE,KAAK,CAAC,KAAKmD,CAAN,CAAL,GAAgB2W,CAAhB,GAAoBA,CAAC,GAAG,KAAK3W,CAAL,GAAS,GAFzC;AAGA5H,IAAAA,CAAC,GAAGgxP,EAAE,GAAGW,OAAO,CAAC3xP,CAAD,CAAhB;AACAue,IAAAA,CAAC,GAAG0yO,EAAE,GAAGU,OAAO,CAACpzO,CAAD,CAAhB;AACA+wD,IAAAA,CAAC,GAAG4hL,EAAE,GAAGS,OAAO,CAACriL,CAAD,CAAhB;AACA,WAAO,IAAI2gL,UAAJ,CACL2B,QAAQ,CAAE,YAAY5xP,CAAZ,GAAgB,YAAYue,CAA5B,GAAgC,YAAY+wD,CAA9C,CADH,EAELsiL,QAAQ,CAAC,CAAC,SAAD,GAAa5xP,CAAb,GAAiB,YAAYue,CAA7B,GAAiC,YAAY+wD,CAA9C,CAFH,EAGLsiL,QAAQ,CAAE,YAAY5xP,CAAZ,GAAgB,YAAYue,CAA5B,GAAgC,YAAY+wD,CAA9C,CAHH,EAIL,KAAK+gL,OAJA,CAAP;AAMD;AApB4B,CAAd,CAAjB;;AAuBA,SAASoB,OAAT,CAAiBl0P,CAAjB,EAAoB;AAClB,SAAOA,CAAC,GAAG4zP,EAAJ,GAASvxP,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAY,IAAI,CAAhB,CAAT,GAA8BA,CAAC,GAAGkjF,EAAJ,GAASqkI,EAA9C;AACD;;AAED,SAAS6sC,OAAT,CAAiBp0P,CAAjB,EAAoB;AAClB,SAAOA,CAAC,GAAGijF,EAAJ,GAASjjF,CAAC,GAAGA,CAAJ,GAAQA,CAAjB,GAAqBkjF,EAAE,IAAIljF,CAAC,GAAGunN,EAAR,CAA9B;AACD;;AAED,SAAS8sC,QAAT,CAAkB5xP,CAAlB,EAAqB;AACnB,SAAO,OAAOA,CAAC,IAAI,SAAL,GAAiB,QAAQA,CAAzB,GAA6B,QAAQJ,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY,IAAI,GAAhB,CAAR,GAA+B,KAAnE,CAAP;AACD;;AAED,SAASwxP,QAAT,CAAkBxxP,CAAlB,EAAqB;AACnB,SAAO,CAACA,CAAC,IAAI,GAAN,KAAc,OAAd,GAAwBA,CAAC,GAAG,KAA5B,GAAoCJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAC,GAAG,KAAL,IAAc,KAAvB,EAA8B,GAA9B,CAA3C;AACD;;AAED,SAAS6xP,UAAT,CAAoBrsO,CAApB,EAAuB;AACrB,MAAIA,CAAC,YAAY8rO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQ9rO,CAAC,CAAC4gC,CAAV,EAAa5gC,CAAC,CAAClf,CAAf,EAAkBkf,CAAC,CAAC7Z,CAApB,EAAuB6Z,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI,EAAE7qO,CAAC,YAAY6rO,GAAf,CAAJ,EAAyB7rO,CAAC,GAAG4rO,UAAU,CAAC5rO,CAAD,CAAd;AACzB,MAAIA,CAAC,CAACzkB,CAAF,KAAQ,CAAR,IAAaykB,CAAC,CAAC5d,CAAF,KAAQ,CAAzB,EAA4B,OAAO,IAAI0pP,GAAJ,CAAQllL,GAAR,EAAa,IAAI5mD,CAAC,CAAC7Z,CAAN,IAAW6Z,CAAC,CAAC7Z,CAAF,GAAM,GAAjB,GAAuB,CAAvB,GAA2BygE,GAAxC,EAA6C5mD,CAAC,CAAC7Z,CAA/C,EAAkD6Z,CAAC,CAAC6qO,OAApD,CAAP;;AAC5B,MAAIjqM,CAAC,GAAGxmD,IAAI,CAACuQ,KAAL,CAAWqV,CAAC,CAAC5d,CAAb,EAAgB4d,CAAC,CAACzkB,CAAlB,IAAuB+vP,aAA/B;;AACA,SAAO,IAAIQ,GAAJ,CAAQlrM,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAG,GAAZ,GAAkBA,CAA1B,EAA6BxmD,IAAI,CAACqC,IAAL,CAAUujB,CAAC,CAACzkB,CAAF,GAAMykB,CAAC,CAACzkB,CAAR,GAAYykB,CAAC,CAAC5d,CAAF,GAAM4d,CAAC,CAAC5d,CAA9B,CAA7B,EAA+D4d,CAAC,CAAC7Z,CAAjE,EAAoE6Z,CAAC,CAAC6qO,OAAtE,CAAP;AACD;;AAEM,SAASyB,GAAT,CAAanmP,CAAb,EAAgBrF,CAAhB,EAAmB8/C,CAAnB,EAAsBiqM,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB04P,UAAU,CAAClmP,CAAD,CAAnC,GAAyC,IAAI2lP,GAAJ,CAAQlrM,CAAR,EAAW9/C,CAAX,EAAcqF,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAAS0B,GAAT,CAAa3rM,CAAb,EAAgB9/C,CAAhB,EAAmBqF,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB04P,UAAU,CAACzrM,CAAD,CAAnC,GAAyC,IAAIkrM,GAAJ,CAAQlrM,CAAR,EAAW9/C,CAAX,EAAcqF,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASiB,GAAT,CAAalrM,CAAb,EAAgB9/C,CAAhB,EAAmBqF,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK9/C,CAAL,GAAS,CAACA,CAAV;AACA,OAAKqF,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,SAASkB,OAAT,CAAiB/rO,CAAjB,EAAoB;AAClB,MAAI/gB,KAAK,CAAC+gB,CAAC,CAAC4gC,CAAH,CAAT,EAAgB,OAAO,IAAIirM,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB6Z,CAAC,CAAC6qO,OAArB,CAAP;AAChB,MAAIjqM,CAAC,GAAG5gC,CAAC,CAAC4gC,CAAF,GAAMyqM,aAAd;AACA,SAAO,IAAIQ,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa/L,IAAI,CAACgU,GAAL,CAASwyC,CAAT,IAAc5gC,CAAC,CAAClf,CAA7B,EAAgC1G,IAAI,CAAC+T,GAAL,CAASyyC,CAAT,IAAc5gC,CAAC,CAAClf,CAAhD,EAAmDkf,CAAC,CAAC6qO,OAArD,CAAP;AACD;;AAED,qBAAOiB,GAAP,EAAYS,GAAZ,EAAiB,oBAAO3M,YAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpB,WAAO,IAAIm6O,GAAJ,CAAQ,KAAKlrM,CAAb,EAAgB,KAAK9/C,CAArB,EAAwB,KAAKqF,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlC,EAA0D,KAAKk5O,OAA/D,CAAP;AACD,GAH4B;AAI7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClB,WAAO,IAAIm6O,GAAJ,CAAQ,KAAKlrM,CAAb,EAAgB,KAAK9/C,CAArB,EAAwB,KAAKqF,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlC,EAA0D,KAAKk5O,OAA/D,CAAP;AACD,GAN4B;AAO7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,WAAOgC,OAAO,CAAC,IAAD,CAAP,CAAchC,GAAd,EAAP;AACD;AAT4B,CAAd,CAAjB;;;;;;;;;;;AChHA;;AACA;;AACA;;;;;;AAEA,IAAIyC,CAAC,GAAG,CAAC,OAAT;AAAA,IACIC,CAAC,GAAG,CAAC,OADT;AAAA,IAEIC,CAAC,GAAG,CAAC,OAFT;AAAA,IAGI7X,CAAC,GAAG,CAAC,OAHT;AAAA,IAII8X,CAAC,GAAG,CAAC,OAJT;AAAA,IAKIC,EAAE,GAAGD,CAAC,GAAG9X,CALb;AAAA,IAMIgY,EAAE,GAAGF,CAAC,GAAGF,CANb;AAAA,IAOIK,KAAK,GAAGL,CAAC,GAAGC,CAAJ,GAAQ7X,CAAC,GAAG2X,CAPxB;;AASA,SAASO,gBAAT,CAA0B/sO,CAA1B,EAA6B;AAC3B,MAAIA,CAAC,YAAYgtO,SAAjB,EAA4B,OAAO,IAAIA,SAAJ,CAAchtO,CAAC,CAAC4gC,CAAhB,EAAmB5gC,CAAC,CAACnoB,CAArB,EAAwBmoB,CAAC,CAAC7Z,CAA1B,EAA6B6Z,CAAC,CAAC6qO,OAA/B,CAAP;AAC5B,MAAI,EAAE7qO,CAAC,YAAYyqO,UAAf,CAAJ,EAAyBzqO,CAAC,GAAG,uBAAWA,CAAX,CAAJ;AACzB,MAAI3d,CAAC,GAAG2d,CAAC,CAAC3d,CAAF,GAAM,GAAd;AAAA,MACIygC,CAAC,GAAG9iB,CAAC,CAAC8iB,CAAF,GAAM,GADd;AAAA,MAEI1gC,CAAC,GAAG4d,CAAC,CAAC5d,CAAF,GAAM,GAFd;AAAA,MAGI+D,CAAC,GAAG,CAAC2mP,KAAK,GAAG1qP,CAAR,GAAYwqP,EAAE,GAAGvqP,CAAjB,GAAqBwqP,EAAE,GAAG/pN,CAA3B,KAAiCgqN,KAAK,GAAGF,EAAR,GAAaC,EAA9C,CAHR;AAAA,MAIII,EAAE,GAAG7qP,CAAC,GAAG+D,CAJb;AAAA,MAKIwL,CAAC,GAAG,CAACg7O,CAAC,IAAI7pN,CAAC,GAAG38B,CAAR,CAAD,GAAcumP,CAAC,GAAGO,EAAnB,IAAyBpY,CALjC;AAAA,MAMIh9O,CAAC,GAAGuC,IAAI,CAACqC,IAAL,CAAUkV,CAAC,GAAGA,CAAJ,GAAQs7O,EAAE,GAAGA,EAAvB,KAA8BN,CAAC,GAAGxmP,CAAJ,IAAS,IAAIA,CAAb,CAA9B,CANR;AAAA,MAMwD;AACpDy6C,EAAAA,CAAC,GAAG/oD,CAAC,GAAGuC,IAAI,CAACuQ,KAAL,CAAWgH,CAAX,EAAcs7O,EAAd,IAAoB3B,aAApB,GAA8B,GAAjC,GAAuC1kL,GAPhD;AAQA,SAAO,IAAIomL,SAAJ,CAAcpsM,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAG,GAAZ,GAAkBA,CAAhC,EAAmC/oD,CAAnC,EAAsCsO,CAAtC,EAAyC6Z,CAAC,CAAC6qO,OAA3C,CAAP;AACD;;AAEc,SAASqC,SAAT,CAAmBtsM,CAAnB,EAAsB/oD,CAAtB,EAAyBsO,CAAzB,EAA4B0kP,OAA5B,EAAqC;AAClD,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBo5P,gBAAgB,CAACnsM,CAAD,CAAzC,GAA+C,IAAIosM,SAAJ,CAAcpsM,CAAd,EAAiB/oD,CAAjB,EAAoBsO,CAApB,EAAuB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAA7C,CAAtD;AACD;;AAEM,SAASmC,SAAT,CAAmBpsM,CAAnB,EAAsB/oD,CAAtB,EAAyBsO,CAAzB,EAA4B0kP,OAA5B,EAAqC;AAC1C,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK/oD,CAAL,GAAS,CAACA,CAAV;AACA,OAAKsO,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOmC,SAAP,EAAkBE,SAAlB,EAA6B,oBAAOtN,YAAP,EAAc;AACzCE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,eAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,eAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAIq7O,SAAJ,CAAc,KAAKpsM,CAAnB,EAAsB,KAAK/oD,CAA3B,EAA8B,KAAKsO,CAAL,GAASwL,CAAvC,EAA0C,KAAKk5O,OAA/C,CAAP;AACD,GAJwC;AAKzChL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,aAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,aAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAIq7O,SAAJ,CAAc,KAAKpsM,CAAnB,EAAsB,KAAK/oD,CAA3B,EAA8B,KAAKsO,CAAL,GAASwL,CAAvC,EAA0C,KAAKk5O,OAA/C,CAAP;AACD,GARwC;AASzCd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAInpM,CAAC,GAAG3hD,KAAK,CAAC,KAAK2hD,CAAN,CAAL,GAAgB,CAAhB,GAAoB,CAAC,KAAKA,CAAL,GAAS,GAAV,IAAiByqM,aAA7C;AAAA,QACIllP,CAAC,GAAG,CAAC,KAAKA,CADd;AAAA,QAEI5K,CAAC,GAAG0D,KAAK,CAAC,KAAKpH,CAAN,CAAL,GAAgB,CAAhB,GAAoB,KAAKA,CAAL,GAASsO,CAAT,IAAc,IAAIA,CAAlB,CAF5B;AAAA,QAGIuI,IAAI,GAAGtU,IAAI,CAACgU,GAAL,CAASwyC,CAAT,CAHX;AAAA,QAIInyC,IAAI,GAAGrU,IAAI,CAAC+T,GAAL,CAASyyC,CAAT,CAJX;AAKA,WAAO,IAAI6pM,UAAJ,CACL,OAAOtkP,CAAC,GAAG5K,CAAC,IAAIixP,CAAC,GAAG99O,IAAJ,GAAW+9O,CAAC,GAAGh+O,IAAnB,CAAZ,CADK,EAEL,OAAOtI,CAAC,GAAG5K,CAAC,IAAImxP,CAAC,GAAGh+O,IAAJ,GAAWmmO,CAAC,GAAGpmO,IAAnB,CAAZ,CAFK,EAGL,OAAOtI,CAAC,GAAG5K,CAAC,IAAIoxP,CAAC,GAAGj+O,IAAR,CAAZ,CAHK,EAIL,KAAKm8O,OAJA,CAAP;AAMD;AArBwC,CAAd,CAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;;AACA;;AACA;;;;;;;;;;;;;;;;ACFO,SAAShiM,KAAT,CAAemyB,EAAf,EAAmB5H,EAAnB,EAAuBR,EAAvB,EAA2BC,EAA3B,EAA+Bs6K,EAA/B,EAAmC;AACxC,MAAIlyK,EAAE,GAAGD,EAAE,GAAGA,EAAd;AAAA,MAAkB2wK,EAAE,GAAG1wK,EAAE,GAAGD,EAA5B;AACA,SAAO,CAAC,CAAC,IAAI,IAAIA,EAAR,GAAa,IAAIC,EAAjB,GAAsB0wK,EAAvB,IAA6Bv4K,EAA7B,GACF,CAAC,IAAI,IAAI6H,EAAR,GAAa,IAAI0wK,EAAlB,IAAwB/4K,EADtB,GAEF,CAAC,IAAI,IAAIoI,EAAR,GAAa,IAAIC,EAAjB,GAAsB,IAAI0wK,EAA3B,IAAiC94K,EAF/B,GAGF84K,EAAE,GAAGwB,EAHJ,IAGU,CAHjB;AAID;;AAEc,kBAAS1uP,MAAT,EAAiB;AAC9B,MAAI8D,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAAxB;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG0D,CAAC,IAAI,CAAL,GAAUA,CAAC,GAAG,CAAd,GAAmBA,CAAC,IAAI,CAAL,IAAUA,CAAC,GAAG,CAAJ,EAAOwK,CAAC,GAAG,CAArB,IAA0BnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,GAAGwK,CAAf,CAArD;AAAA,QACIqwE,EAAE,GAAGn0E,MAAM,CAACpK,CAAD,CADf;AAAA,QAEIw+E,EAAE,GAAGp0E,MAAM,CAACpK,CAAC,GAAG,CAAL,CAFf;AAAA,QAGI++E,EAAE,GAAG/+E,CAAC,GAAG,CAAJ,GAAQoK,MAAM,CAACpK,CAAC,GAAG,CAAL,CAAd,GAAwB,IAAIu+E,EAAJ,GAASC,EAH1C;AAAA,QAIIs6K,EAAE,GAAG94P,CAAC,GAAGkO,CAAC,GAAG,CAAR,GAAY9D,MAAM,CAACpK,CAAC,GAAG,CAAL,CAAlB,GAA4B,IAAIw+E,EAAJ,GAASD,EAJ9C;AAKA,WAAO/pB,KAAK,CAAC,CAAC9wD,CAAC,GAAG1D,CAAC,GAAGkO,CAAT,IAAcA,CAAf,EAAkB6wE,EAAlB,EAAsBR,EAAtB,EAA0BC,EAA1B,EAA8Bs6K,EAA9B,CAAZ;AACD,GAPD;AAQD;;;;;;;;;AClBD;;AAEe,kBAAS1uP,MAAT,EAAiB;AAC9B,MAAI8D,CAAC,GAAG9D,MAAM,CAAC9K,MAAf;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAAC+H,KAAL,CAAW,CAAC,CAACpK,CAAC,IAAI,CAAN,IAAW,CAAX,GAAe,EAAEA,CAAjB,GAAqBA,CAAtB,IAA2BwK,CAAtC,CAAR;AAAA,QACI6wE,EAAE,GAAG30E,MAAM,CAAC,CAACpK,CAAC,GAAGkO,CAAJ,GAAQ,CAAT,IAAcA,CAAf,CADf;AAAA,QAEIqwE,EAAE,GAAGn0E,MAAM,CAACpK,CAAC,GAAGkO,CAAL,CAFf;AAAA,QAGIswE,EAAE,GAAGp0E,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAHf;AAAA,QAII4qP,EAAE,GAAG1uP,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAJf;AAKA,WAAO,kBAAM,CAACxK,CAAC,GAAG1D,CAAC,GAAGkO,CAAT,IAAcA,CAApB,EAAuB6wE,EAAvB,EAA2BR,EAA3B,EAA+BC,EAA/B,EAAmCs6K,EAAnC,CAAP;AACD,GAPD;AAQD;;;;;;;;;eCZc3yP,CAAC,IAAI,MAAMA;;;;;;;;;;;;;ACA1B;;;;AAEA,SAAS2vF,MAAT,CAAgB5uF,CAAhB,EAAmB2F,CAAnB,EAAsB;AACpB,SAAO,UAASnJ,CAAT,EAAY;AACjB,WAAOwD,CAAC,GAAGxD,CAAC,GAAGmJ,CAAf;AACD,GAFD;AAGD;;AAED,SAASksP,WAAT,CAAqB7xP,CAArB,EAAwB6G,CAAxB,EAA2B2W,CAA3B,EAA8B;AAC5B,SAAOxd,CAAC,GAAGnB,IAAI,CAAC0Q,GAAL,CAASvP,CAAT,EAAYwd,CAAZ,CAAJ,EAAoB3W,CAAC,GAAGhI,IAAI,CAAC0Q,GAAL,CAAS1I,CAAT,EAAY2W,CAAZ,IAAiBxd,CAAzC,EAA4Cwd,CAAC,GAAG,IAAIA,CAApD,EAAuD,UAAShhB,CAAT,EAAY;AACxE,WAAOqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,GAAGxD,CAAC,GAAGqK,CAAjB,EAAoB2W,CAApB,CAAP;AACD,GAFD;AAGD;;AAEM,SAASs0O,GAAT,CAAa9xP,CAAb,EAAgB6G,CAAhB,EAAmB;AACxB,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAC,GAAG,GAAJ,IAAWA,CAAC,GAAG,CAAC,GAAhB,GAAsBA,CAAC,GAAG,MAAM9G,IAAI,CAACsG,KAAL,CAAWQ,CAAC,GAAG,GAAf,CAAhC,GAAsDA,CAA1D,CAAT,GAAwE,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAhF;AACD;;AAEM,SAASk4J,KAAT,CAAe16I,CAAf,EAAkB;AACvB,SAAO,CAACA,CAAC,GAAG,CAACA,CAAN,MAAa,CAAb,GAAiBu0O,OAAjB,GAA2B,UAAS/xP,CAAT,EAAY6G,CAAZ,EAAe;AAC/C,WAAOA,CAAC,GAAG7G,CAAJ,GAAQ6xP,WAAW,CAAC7xP,CAAD,EAAI6G,CAAJ,EAAO2W,CAAP,CAAnB,GAA+B,uBAAS9Z,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAtC;AACD,GAFD;AAGD;;AAEc,SAAS+xP,OAAT,CAAiB/xP,CAAjB,EAAoB6G,CAApB,EAAuB;AACpC,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAJ,CAAT,GAAkB,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAA1B;AACD;;;;;;;;;AC5BD;;AACA;;AACA;;AACA;;;;;;;;eAEgB,SAASgyP,QAAT,CAAkBx0O,CAAlB,EAAqB;AACnC,MAAI8wO,KAAK,GAAG,kBAAM9wO,CAAN,CAAZ;;AAEA,WAASgxO,GAAT,CAAa5pP,KAAb,EAAoB6F,GAApB,EAAyB;AACvB,QAAI3D,CAAC,GAAGwnP,KAAK,CAAC,CAAC1pP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BkC,CAA3B,EAA8B,CAAC2D,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB3D,CAApD,CAAb;AAAA,QACIygC,CAAC,GAAG+mN,KAAK,CAAC1pP,KAAK,CAAC2iC,CAAP,EAAU98B,GAAG,CAAC88B,CAAd,CADb;AAAA,QAEI1gC,CAAC,GAAGynP,KAAK,CAAC1pP,KAAK,CAACiC,CAAP,EAAU4D,GAAG,CAAC5D,CAAd,CAFb;AAAA,QAGIyoP,OAAO,GAAG,oBAAQ1qP,KAAK,CAAC0qP,OAAd,EAAuB7kP,GAAG,CAAC6kP,OAA3B,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACkC,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC2iC,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD;;AAED4pP,EAAAA,GAAG,CAACt2F,KAAJ,GAAY85F,QAAZ;AAEA,SAAOxD,GAAP;AACD,CApBc,CAoBZ,CApBY;;;;AAsBf,SAASyD,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,SAAO,UAASC,MAAT,EAAiB;AACtB,QAAInrP,CAAC,GAAGmrP,MAAM,CAAC/5P,MAAf;AAAA,QACI0O,CAAC,GAAG,IAAIlO,KAAJ,CAAUoO,CAAV,CADR;AAAA,QAEIugC,CAAC,GAAG,IAAI3uC,KAAJ,CAAUoO,CAAV,CAFR;AAAA,QAGIH,CAAC,GAAG,IAAIjO,KAAJ,CAAUoO,CAAV,CAHR;AAAA,QAIIlO,CAJJ;AAAA,QAIOw1P,KAJP;;AAKA,SAAKx1P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBw1P,MAAAA,KAAK,GAAG,kBAAS6D,MAAM,CAACr5P,CAAD,CAAf,CAAR;AACAgO,MAAAA,CAAC,CAAChO,CAAD,CAAD,GAAOw1P,KAAK,CAACxnP,CAAN,IAAW,CAAlB;AACAygC,MAAAA,CAAC,CAACzuC,CAAD,CAAD,GAAOw1P,KAAK,CAAC/mN,CAAN,IAAW,CAAlB;AACA1gC,MAAAA,CAAC,CAAC/N,CAAD,CAAD,GAAOw1P,KAAK,CAACznP,CAAN,IAAW,CAAlB;AACD;;AACDC,IAAAA,CAAC,GAAGorP,MAAM,CAACprP,CAAD,CAAV;AACAygC,IAAAA,CAAC,GAAG2qN,MAAM,CAAC3qN,CAAD,CAAV;AACA1gC,IAAAA,CAAC,GAAGqrP,MAAM,CAACrrP,CAAD,CAAV;AACAynP,IAAAA,KAAK,CAACgB,OAAN,GAAgB,CAAhB;AACA,WAAO,UAAS9yP,CAAT,EAAY;AACjB8xP,MAAAA,KAAK,CAACxnP,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAAC/mN,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAACznP,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACA,aAAO8xP,KAAK,GAAG,EAAf;AACD,KALD;AAMD,GAtBD;AAuBD;;AAEM,IAAI8D,QAAQ,GAAGH,SAAS,CAAC3kM,cAAD,CAAxB;;AACA,IAAI+kM,cAAc,GAAGJ,SAAS,CAACK,oBAAD,CAA9B;;;;;;;;;;;ACtDQ,kBAAStyP,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI,CAACA,CAAL,EAAQA,CAAC,GAAG,EAAJ;AACR,MAAIG,CAAC,GAAGhH,CAAC,GAAGnB,IAAI,CAACG,GAAL,CAAS6H,CAAC,CAACzO,MAAX,EAAmB4H,CAAC,CAAC5H,MAArB,CAAH,GAAkC,CAA3C;AAAA,MACImN,CAAC,GAAGsB,CAAC,CAAC1E,KAAF,EADR;AAAA,MAEIrJ,CAFJ;AAGA,SAAO,UAAS0D,CAAT,EAAY;AACjB,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwByM,CAAC,CAACzM,CAAD,CAAD,GAAOkH,CAAC,CAAClH,CAAD,CAAD,IAAQ,IAAI0D,CAAZ,IAAiBqK,CAAC,CAAC/N,CAAD,CAAD,GAAO0D,CAA/B;;AACxB,WAAO+I,CAAP;AACD,GAHD;AAID;;AAEM,SAASgtP,aAAT,CAAuBtzP,CAAvB,EAA0B;AAC/B,SAAOm1G,WAAW,CAACkrE,MAAZ,CAAmBrgL,CAAnB,KAAyB,EAAEA,CAAC,YAAYuzP,QAAf,CAAhC;AACD;;;;;;;;;;ACbD;;AACA;;;;;;;;AAEe,kBAASxyP,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO,CAAC,gCAAcA,CAAd,IAAmB4rP,oBAAnB,GAAiCC,YAAlC,EAAgD1yP,CAAhD,EAAmD6G,CAAnD,CAAP;AACD;;AAEM,SAAS6rP,YAAT,CAAsB1yP,CAAtB,EAAyB6G,CAAzB,EAA4B;AACjC,MAAI8rP,EAAE,GAAG9rP,CAAC,GAAGA,CAAC,CAACzO,MAAL,GAAc,CAAxB;AAAA,MACIw6P,EAAE,GAAG5yP,CAAC,GAAGnB,IAAI,CAACG,GAAL,CAAS2zP,EAAT,EAAa3yP,CAAC,CAAC5H,MAAf,CAAH,GAA4B,CADtC;AAAA,MAEI6G,CAAC,GAAG,IAAIrG,KAAJ,CAAUg6P,EAAV,CAFR;AAAA,MAGIrtP,CAAC,GAAG,IAAI3M,KAAJ,CAAU+5P,EAAV,CAHR;AAAA,MAII75P,CAJJ;;AAMA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyBmG,CAAC,CAACnG,CAAD,CAAD,GAAO,oBAAMkH,CAAC,CAAClH,CAAD,CAAP,EAAY+N,CAAC,CAAC/N,CAAD,CAAb,CAAP;;AACzB,SAAOA,CAAC,GAAG65P,EAAX,EAAe,EAAE75P,CAAjB,EAAoByM,CAAC,CAACzM,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAD,CAAR;;AAEpB,SAAO,UAAS0D,CAAT,EAAY;AACjB,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyByM,CAAC,CAACzM,CAAD,CAAD,GAAOmG,CAAC,CAACnG,CAAD,CAAD,CAAK0D,CAAL,CAAP;;AACzB,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;ACrBc,kBAASvF,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIlB,CAAC,GAAG,IAAIipE,IAAJ,EAAR;AACA,SAAO5uE,CAAC,GAAG,CAACA,CAAL,EAAQ6G,CAAC,GAAG,CAACA,CAAb,EAAgB,UAASrK,CAAT,EAAY;AACjC,WAAOmJ,CAAC,CAACy+M,OAAF,CAAUpkN,CAAC,IAAI,IAAIxD,CAAR,CAAD,GAAcqK,CAAC,GAAGrK,CAA5B,GAAgCmJ,CAAvC;AACD,GAFD;AAGD;;;;;;;;;ACLc,kBAAS3F,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO7G,CAAC,GAAG,CAACA,CAAL,EAAQ6G,CAAC,GAAG,CAACA,CAAb,EAAgB,UAASrK,CAAT,EAAY;AACjC,WAAOwD,CAAC,IAAI,IAAIxD,CAAR,CAAD,GAAcqK,CAAC,GAAGrK,CAAzB;AACD,GAFD;AAGD;;;;;;;;;ACJD;;;;AAEe,kBAASwD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,EAAR;AAAA,MACIyM,CAAC,GAAG,EADR;AAAA,MAEI6Q,CAFJ;AAIA,MAAIpW,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;AACzC,MAAI6G,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;;AAEzC,OAAKuP,CAAL,IAAUvP,CAAV,EAAa;AACX,QAAIuP,CAAC,IAAIpW,CAAT,EAAY;AACVlH,MAAAA,CAAC,CAACsd,CAAD,CAAD,GAAO,oBAAMpW,CAAC,CAACoW,CAAD,CAAP,EAAYvP,CAAC,CAACuP,CAAD,CAAb,CAAP;AACD,KAFD,MAEO;AACL7Q,MAAAA,CAAC,CAAC6Q,CAAD,CAAD,GAAOvP,CAAC,CAACuP,CAAD,CAAR;AACD;AACF;;AAED,SAAO,UAAS5Z,CAAT,EAAY;AACjB,SAAK4Z,CAAL,IAAUtd,CAAV,EAAayM,CAAC,CAAC6Q,CAAD,CAAD,GAAOtd,CAAC,CAACsd,CAAD,CAAD,CAAK5Z,CAAL,CAAP;;AACb,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;ACtBD;;;;AAEA,IAAIstP,GAAG,GAAG,6CAAV;AAAA,IACIC,GAAG,GAAG,IAAIr/H,MAAJ,CAAWo/H,GAAG,CAACjkM,MAAf,EAAuB,GAAvB,CADV;;AAGA,SAASlgB,IAAT,CAAc7nC,CAAd,EAAiB;AACf,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;AAED,SAASihF,GAAT,CAAajhF,CAAb,EAAgB;AACd,SAAO,UAASrK,CAAT,EAAY;AACjB,WAAOqK,CAAC,CAACrK,CAAD,CAAD,GAAO,EAAd;AACD,GAFD;AAGD;;AAEc,kBAASwD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIksP,EAAE,GAAGF,GAAG,CAACh1M,SAAJ,GAAgBi1M,GAAG,CAACj1M,SAAJ,GAAgB,CAAzC;AAAA,MAA4C;AACxCm1M,EAAAA,EADJ;AAAA,MACQ;AACJC,EAAAA,EAFJ;AAAA,MAEQ;AACJC,EAAAA,EAHJ;AAAA,MAGQ;AACJp6P,EAAAA,CAAC,GAAG,CAAC,CAJT;AAAA,MAIY;AACRwD,EAAAA,CAAC,GAAG,EALR;AAAA,MAKY;AACRk0F,EAAAA,CAAC,GAAG,EANR,CAD4B,CAOhB;AAEZ;;AACAxwF,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR,EAAY6G,CAAC,GAAGA,CAAC,GAAG,EAApB,CAV4B,CAY5B;;AACA,SAAO,CAACmsP,EAAE,GAAGH,GAAG,CAAC5lO,IAAJ,CAASjtB,CAAT,CAAN,MACCizP,EAAE,GAAGH,GAAG,CAAC7lO,IAAJ,CAASpmB,CAAT,CADN,CAAP,EAC2B;AACzB,QAAI,CAACqsP,EAAE,GAAGD,EAAE,CAACr0P,KAAT,IAAkBm0P,EAAtB,EAA0B;AAAE;AAC1BG,MAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,EAAYG,EAAZ,CAAL;AACA,UAAI52P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,WACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN;;AACD,QAAI,CAACF,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAR,OAAkBC,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAzB,CAAJ,EAAmC;AAAE;AACnC,UAAI32P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQm6P,EAAR,CAAV,CAAsB;AAAtB,WACK32P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASm6P,EAAT;AACN,KAHD,MAGO;AAAE;AACP32P,MAAAA,CAAC,CAAC,EAAExD,CAAH,CAAD,GAAS,IAAT;AACA03F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAJ;AAAOmG,QAAAA,CAAC,EAAE,qBAAO+zP,EAAP,EAAWC,EAAX;AAAV,OAAP;AACD;;AACDF,IAAAA,EAAE,GAAGD,GAAG,CAACj1M,SAAT;AACD,GA5B2B,CA8B5B;;;AACA,MAAIk1M,EAAE,GAAGlsP,CAAC,CAACzO,MAAX,EAAmB;AACjB86P,IAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,CAAL;AACA,QAAIz2P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,SACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN,GAnC2B,CAqC5B;AACA;;;AACA,SAAO52P,CAAC,CAAClE,MAAF,GAAW,CAAX,GAAgBo4F,CAAC,CAAC,CAAD,CAAD,GACjB1I,GAAG,CAAC0I,CAAC,CAAC,CAAD,CAAD,CAAKvxF,CAAN,CADc,GAEjByvC,IAAI,CAAC7nC,CAAD,CAFH,IAGAA,CAAC,GAAG2pF,CAAC,CAACp4F,MAAN,EAAc,UAASoE,CAAT,EAAY;AACzB,SAAK,IAAI1D,CAAC,GAAG,CAAR,EAAW2rB,CAAhB,EAAmB3rB,CAAC,GAAG+N,CAAvB,EAA0B,EAAE/N,CAA5B,EAA+BwD,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAC/B,WAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,GANA,CAAP;AAOD;;;;;;;;;AC/DD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,kBAASsD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIrK,CAAC,GAAG,OAAOqK,CAAf;AAAA,MAAkBtB,CAAlB;AACA,SAAOsB,CAAC,IAAI,IAAL,IAAarK,CAAC,KAAK,SAAnB,GAA+B,uBAASqK,CAAT,CAA/B,GACD,CAACrK,CAAC,KAAK,QAAN,GAAiBs4M,eAAjB,GACDt4M,CAAC,KAAK,QAAN,GAAkB,CAAC+I,CAAC,GAAG,oBAAMsB,CAAN,CAAL,KAAkBA,CAAC,GAAGtB,CAAJ,EAAOipP,YAAzB,IAAgCz5C,eAAlD,GACAluM,CAAC,YAAYynP,cAAb,GAAqBE,YAArB,GACA3nP,CAAC,YAAY+nE,IAAb,GAAoBwgI,aAApB,GACA,gCAAcvoM,CAAd,IAAmB4rP,oBAAnB,GACA75P,KAAK,CAACuH,OAAN,CAAc0G,CAAd,IAAmB6rP,mBAAnB,GACA,OAAO7rP,CAAC,CAACu3M,OAAT,KAAqB,UAArB,IAAmC,OAAOv3M,CAAC,CAAC4B,QAAT,KAAsB,UAAzD,IAAuE/E,KAAK,CAACmD,CAAD,CAA5E,GAAkFs5L,eAAlF,GACA2U,eAPA,EAOQ90M,CAPR,EAOW6G,CAPX,CADN;AASD;;;;;;;;;ACrBc,kBAASyzB,KAAT,EAAgB;AAC7B,MAAItzB,CAAC,GAAGszB,KAAK,CAACliC,MAAd;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,WAAO89B,KAAK,CAACz7B,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAASgI,CAAC,GAAG,CAAb,EAAgBnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,GAAGwK,CAAf,CAAhB,CAAZ,CAAD,CAAZ;AACD,GAFD;AAGD;;;;;;;;;ACLD;;AAEe,kBAAShH,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,gBAAI,CAACkH,CAAL,EAAQ,CAAC6G,CAAT,CAAR;AACA,SAAO,UAASrK,CAAT,EAAY;AACjB,QAAIyC,CAAC,GAAGnG,CAAC,CAAC0D,CAAD,CAAT;AACA,WAAOyC,CAAC,GAAG,MAAMJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAC,GAAG,GAAf,CAAjB;AACD,GAHD;AAID;;;;;;;;;ACRc,kBAASe,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO7G,CAAC,GAAG,CAACA,CAAL,EAAQ6G,CAAC,GAAG,CAACA,CAAb,EAAgB,UAASrK,CAAT,EAAY;AACjC,WAAOqC,IAAI,CAACsG,KAAL,CAAWnF,CAAC,IAAI,IAAIxD,CAAR,CAAD,GAAcqK,CAAC,GAAGrK,CAA7B,CAAP;AACD,GAFD;AAGD;;;;;;;;;ACJD,IAAIuzP,OAAO,GAAG,MAAMlxP,IAAI,CAACuiC,EAAzB;AAEO,IAAI23F,QAAQ,GAAG;AACpBo6H,EAAAA,UAAU,EAAE,CADQ;AAEpBC,EAAAA,UAAU,EAAE,CAFQ;AAGpBC,EAAAA,MAAM,EAAE,CAHY;AAIpBC,EAAAA,KAAK,EAAE,CAJa;AAKpBC,EAAAA,MAAM,EAAE,CALY;AAMpBC,EAAAA,MAAM,EAAE;AANY,CAAf;;;AASQ,kBAASxzP,CAAT,EAAY6G,CAAZ,EAAetB,CAAf,EAAkBI,CAAlB,EAAqBnO,CAArB,EAAwBiN,CAAxB,EAA2B;AACxC,MAAI8uP,MAAJ,EAAYC,MAAZ,EAAoBF,KAApB;AACA,MAAIC,MAAM,GAAG10P,IAAI,CAACqC,IAAL,CAAUlB,CAAC,GAAGA,CAAJ,GAAQ6G,CAAC,GAAGA,CAAtB,CAAb,EAAuC7G,CAAC,IAAIuzP,MAAL,EAAa1sP,CAAC,IAAI0sP,MAAlB;AACvC,MAAID,KAAK,GAAGtzP,CAAC,GAAGuF,CAAJ,GAAQsB,CAAC,GAAGlB,CAAxB,EAA2BJ,CAAC,IAAIvF,CAAC,GAAGszP,KAAT,EAAgB3tP,CAAC,IAAIkB,CAAC,GAAGysP,KAAzB;AAC3B,MAAIE,MAAM,GAAG30P,IAAI,CAACqC,IAAL,CAAUqE,CAAC,GAAGA,CAAJ,GAAQI,CAAC,GAAGA,CAAtB,CAAb,EAAuCJ,CAAC,IAAIiuP,MAAL,EAAa7tP,CAAC,IAAI6tP,MAAlB,EAA0BF,KAAK,IAAIE,MAAnC;AACvC,MAAIxzP,CAAC,GAAG2F,CAAJ,GAAQkB,CAAC,GAAGtB,CAAhB,EAAmBvF,CAAC,GAAG,CAACA,CAAL,EAAQ6G,CAAC,GAAG,CAACA,CAAb,EAAgBysP,KAAK,GAAG,CAACA,KAAzB,EAAgCC,MAAM,GAAG,CAACA,MAA1C;AACnB,SAAO;AACLJ,IAAAA,UAAU,EAAE37P,CADP;AAEL47P,IAAAA,UAAU,EAAE3uP,CAFP;AAGL4uP,IAAAA,MAAM,EAAEx0P,IAAI,CAACuQ,KAAL,CAAWvI,CAAX,EAAc7G,CAAd,IAAmB+vP,OAHtB;AAILuD,IAAAA,KAAK,EAAEz0P,IAAI,CAACoU,IAAL,CAAUqgP,KAAV,IAAmBvD,OAJrB;AAKLwD,IAAAA,MAAM,EAAEA,MALH;AAMLC,IAAAA,MAAM,EAAEA;AANH,GAAP;AAQD;;;;;;;;;;ACzBD;;;;;;AAEA,IAAIC,OAAJ;AAEA;;AACO,SAASC,QAAT,CAAkB53P,KAAlB,EAAyB;AAC9B,QAAMy0F,CAAC,GAAG,KAAK,OAAOojK,SAAP,KAAqB,UAArB,GAAkCA,SAAlC,GAA8CC,eAAnD,EAAoE93P,KAAK,GAAG,EAA5E,CAAV;AACA,SAAOy0F,CAAC,CAACsjK,UAAF,GAAe96H,mBAAf,GAA0B,wBAAUxoC,CAAC,CAACvwF,CAAZ,EAAeuwF,CAAC,CAAC1pF,CAAjB,EAAoB0pF,CAAC,CAAChrF,CAAtB,EAAyBgrF,CAAC,CAAC5qF,CAA3B,EAA8B4qF,CAAC,CAAC/4F,CAAhC,EAAmC+4F,CAAC,CAAC9rF,CAArC,CAAjC;AACD;;AAEM,SAASqvP,QAAT,CAAkBh4P,KAAlB,EAAyB;AAC9B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOi9H,mBAAP;AACnB,MAAI,CAAC06H,OAAL,EAAcA,OAAO,GAAGvtO,QAAQ,CAAC6tO,eAAT,CAAyB,4BAAzB,EAAuD,GAAvD,CAAV;AACdN,EAAAA,OAAO,CAACO,YAAR,CAAqB,WAArB,EAAkCl4P,KAAlC;AACA,MAAI,EAAEA,KAAK,GAAG23P,OAAO,CAAC1xE,SAAR,CAAkBkyE,OAAlB,CAA0BC,WAA1B,EAAV,CAAJ,EAAwD,OAAOn7H,mBAAP;AACxDj9H,EAAAA,KAAK,GAAGA,KAAK,CAACslN,MAAd;AACA,SAAO,wBAAUtlN,KAAK,CAACkE,CAAhB,EAAmBlE,KAAK,CAAC+K,CAAzB,EAA4B/K,KAAK,CAACyJ,CAAlC,EAAqCzJ,KAAK,CAAC6J,CAA3C,EAA8C7J,KAAK,CAACtE,CAApD,EAAuDsE,KAAK,CAAC2I,CAA7D,CAAP;AACD;;;;;;;;;ACjBD;;AACA;;;;AAEA,SAAS0vP,oBAAT,CAA8Bn5M,KAA9B,EAAqCo5M,OAArC,EAA8CC,OAA9C,EAAuDC,QAAvD,EAAiE;AAE/D,WAASpxO,GAAT,CAAa5mB,CAAb,EAAgB;AACd,WAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC4mB,GAAF,KAAU,GAArB,GAA2B,EAAlC;AACD;;AAED,WAASq2L,SAAT,CAAmBg7C,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAmCp4P,CAAnC,EAAsCk0F,CAAtC,EAAyC;AACvC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAO,YAAP,EAAqB,IAArB,EAA2Bq7P,OAA3B,EAAoC,IAApC,EAA0CC,OAA1C,CAAR;AACA7jK,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,IAAIC,EAAV,EAAc;AACnBp4P,MAAAA,CAAC,CAACvD,IAAF,CAAO,eAAe07P,EAAf,GAAoBL,OAApB,GAA8BM,EAA9B,GAAmCL,OAA1C;AACD;AACF;;AAED,WAAShB,MAAT,CAAgBrzP,CAAhB,EAAmB6G,CAAnB,EAAsBvK,CAAtB,EAAyBk0F,CAAzB,EAA4B;AAC1B,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX,UAAI7G,CAAC,GAAG6G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CAAjB,KAAgC,IAAIA,CAAC,GAAG7G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CADtC,CACgD;;AAC3DwwF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAhB,EAA2B,IAA3B,EAAiCg4P,QAAjC,IAA6C,CAAjD;AAAoDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAvD,OAAP;AACD,KAHD,MAGO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAT,GAAqBuK,CAArB,GAAyBytP,QAAhC;AACD;AACF;;AAED,WAAShB,KAAT,CAAetzP,CAAf,EAAkB6G,CAAlB,EAAqBvK,CAArB,EAAwBk0F,CAAxB,EAA2B;AACzB,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX2pF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgCg4P,QAAhC,IAA4C,CAAhD;AAAmDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAtD,OAAP;AACD,KAFD,MAEO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBuK,CAApB,GAAwBytP,QAA/B;AACD;AACF;;AAED,WAAS3lP,KAAT,CAAe4lP,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+Bp4P,CAA/B,EAAkCk0F,CAAlC,EAAqC;AACnC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,IAArC,EAA2C,GAA3C,CAAR;AACAk0F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AAC/Bp4P,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBm4P,EAApB,GAAyB,GAAzB,GAA+BC,EAA/B,GAAoC,GAA3C;AACD;AACF;;AAED,SAAO,UAAS10P,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIvK,CAAC,GAAG,EAAR;AAAA,QAAY;AACRk0F,IAAAA,CAAC,GAAG,EADR,CADoB,CAER;;AACZxwF,IAAAA,CAAC,GAAGg7C,KAAK,CAACh7C,CAAD,CAAT,EAAc6G,CAAC,GAAGm0C,KAAK,CAACn0C,CAAD,CAAvB;AACA0yM,IAAAA,SAAS,CAACv5M,CAAC,CAACmzP,UAAH,EAAenzP,CAAC,CAACozP,UAAjB,EAA6BvsP,CAAC,CAACssP,UAA/B,EAA2CtsP,CAAC,CAACusP,UAA7C,EAAyD92P,CAAzD,EAA4Dk0F,CAA5D,CAAT;AACA6iK,IAAAA,MAAM,CAACrzP,CAAC,CAACqzP,MAAH,EAAWxsP,CAAC,CAACwsP,MAAb,EAAqB/2P,CAArB,EAAwBk0F,CAAxB,CAAN;AACA8iK,IAAAA,KAAK,CAACtzP,CAAC,CAACszP,KAAH,EAAUzsP,CAAC,CAACysP,KAAZ,EAAmBh3P,CAAnB,EAAsBk0F,CAAtB,CAAL;AACA7hF,IAAAA,KAAK,CAAC3O,CAAC,CAACuzP,MAAH,EAAWvzP,CAAC,CAACwzP,MAAb,EAAqB3sP,CAAC,CAAC0sP,MAAvB,EAA+B1sP,CAAC,CAAC2sP,MAAjC,EAAyCl3P,CAAzC,EAA4Ck0F,CAA5C,CAAL;AACAxwF,IAAAA,CAAC,GAAG6G,CAAC,GAAG,IAAR,CARoB,CAQN;;AACd,WAAO,UAASrK,CAAT,EAAY;AACjB,UAAI1D,CAAC,GAAG,CAAC,CAAT;AAAA,UAAYkO,CAAC,GAAGwpF,CAAC,CAACp4F,MAAlB;AAAA,UAA0BqsB,CAA1B;;AACA,aAAO,EAAE3rB,CAAF,GAAMkO,CAAb,EAAgB1K,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAChB,aAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,KAJD;AAKD,GAdD;AAeD;;AAEM,IAAIi4P,uBAAuB,GAAGR,oBAAoB,CAACT,eAAD,EAAW,MAAX,EAAmB,KAAnB,EAA0B,MAA1B,CAAlD;;AACA,IAAIkB,uBAAuB,GAAGT,oBAAoB,CAACL,eAAD,EAAW,IAAX,EAAiB,GAAjB,EAAsB,GAAtB,CAAlD;;;;;;;;;AC9DP,IAAIe,QAAQ,GAAG,KAAf;;AAEA,SAAS1hP,IAAT,CAAclU,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAL,IAAoB,IAAIA,CAAzB,IAA8B,CAArC;AACD;;AAED,SAASiU,IAAT,CAAcjU,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAL,IAAoB,IAAIA,CAAzB,IAA8B,CAArC;AACD;;AAED,SAAS0B,IAAT,CAAc1B,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS,IAAI7B,CAAb,CAAL,IAAwB,CAAzB,KAA+BA,CAAC,GAAG,CAAnC,CAAP;AACD;;eAEe,SAAS61P,OAAT,CAAiB7sI,GAAjB,EAAsB8sI,IAAtB,EAA4BC,IAA5B,EAAkC;AAEhD;AACA;AACA,WAASpmD,IAAT,CAAcoM,EAAd,EAAkBntF,EAAlB,EAAsB;AACpB,QAAIonI,GAAG,GAAGj6C,EAAE,CAAC,CAAD,CAAZ;AAAA,QAAiBk6C,GAAG,GAAGl6C,EAAE,CAAC,CAAD,CAAzB;AAAA,QAA8Bm6C,EAAE,GAAGn6C,EAAE,CAAC,CAAD,CAArC;AAAA,QACIo6C,GAAG,GAAGvnI,EAAE,CAAC,CAAD,CADZ;AAAA,QACiBwnI,GAAG,GAAGxnI,EAAE,CAAC,CAAD,CADzB;AAAA,QAC8BynI,EAAE,GAAGznI,EAAE,CAAC,CAAD,CADrC;AAAA,QAEIjpG,EAAE,GAAGwwO,GAAG,GAAGH,GAFf;AAAA,QAGIr3O,EAAE,GAAGy3O,GAAG,GAAGH,GAHf;AAAA,QAIIhzL,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAJxB;AAAA,QAKI9kB,CALJ;AAAA,QAMI23E,CANJ,CADoB,CASpB;;AACA,QAAIvO,EAAE,GAAG2yL,QAAT,EAAmB;AACjBpkL,MAAAA,CAAC,GAAG5xE,IAAI,CAACiK,GAAL,CAASwsP,EAAE,GAAGH,EAAd,IAAoBltI,GAAxB;;AACAnvH,MAAAA,CAAC,GAAG,UAAS0D,CAAT,EAAY;AACd,eAAO,CACLy4P,GAAG,GAAGz4P,CAAC,GAAGooB,EADL,EAELswO,GAAG,GAAG14P,CAAC,GAAGohB,EAFL,EAGLu3O,EAAE,GAAGt2P,IAAI,CAACiC,GAAL,CAASmnH,GAAG,GAAGzrH,CAAN,GAAUi0E,CAAnB,CAHA,CAAP;AAKD,OAND;AAOD,KATD,CAWA;AAXA,SAYK;AACH,YAAIxO,EAAE,GAAGpjE,IAAI,CAACqC,IAAL,CAAUghE,EAAV,CAAT;AAAA,YACIyqK,EAAE,GAAG,CAAC2oB,EAAE,GAAGA,EAAL,GAAUH,EAAE,GAAGA,EAAf,GAAoBH,IAAI,GAAG9yL,EAA5B,KAAmC,IAAIizL,EAAJ,GAASJ,IAAT,GAAgB9yL,EAAnD,CADT;AAAA,YAEI2qK,EAAE,GAAG,CAAC0oB,EAAE,GAAGA,EAAL,GAAUH,EAAE,GAAGA,EAAf,GAAoBH,IAAI,GAAG9yL,EAA5B,KAAmC,IAAIozL,EAAJ,GAASP,IAAT,GAAgB9yL,EAAnD,CAFT;AAAA,YAGIyuI,EAAE,GAAG7xM,IAAI,CAACiK,GAAL,CAASjK,IAAI,CAACqC,IAAL,CAAUyrO,EAAE,GAAGA,EAAL,GAAU,CAApB,IAAyBA,EAAlC,CAHT;AAAA,YAIIzhC,EAAE,GAAGrsM,IAAI,CAACiK,GAAL,CAASjK,IAAI,CAACqC,IAAL,CAAU0rO,EAAE,GAAGA,EAAL,GAAU,CAApB,IAAyBA,EAAlC,CAJT;AAKAn8J,QAAAA,CAAC,GAAG,CAACy6H,EAAE,GAAGwF,EAAN,IAAYzoF,GAAhB;;AACAnvH,QAAAA,CAAC,GAAG,UAAS0D,CAAT,EAAY;AACd,cAAIF,CAAC,GAAGE,CAAC,GAAGi0E,CAAZ;AAAA,cACI8kL,MAAM,GAAGpiP,IAAI,CAACu9L,EAAD,CADjB;AAAA,cAEI54H,CAAC,GAAGq9K,EAAE,IAAIJ,IAAI,GAAG9yL,EAAX,CAAF,IAAoBszL,MAAM,GAAG50P,IAAI,CAACsnH,GAAG,GAAG3rH,CAAN,GAAUo0M,EAAX,CAAb,GAA8Bx9L,IAAI,CAACw9L,EAAD,CAAtD,CAFR;AAGA,iBAAO,CACLukD,GAAG,GAAGn9K,CAAC,GAAGlzD,EADL,EAELswO,GAAG,GAAGp9K,CAAC,GAAGl6D,EAFL,EAGLu3O,EAAE,GAAGI,MAAL,GAAcpiP,IAAI,CAAC80G,GAAG,GAAG3rH,CAAN,GAAUo0M,EAAX,CAHb,CAAP;AAKD,SATD;AAUD;;AAED53M,IAAAA,CAAC,CAAC08P,QAAF,GAAa/kL,CAAC,GAAG,IAAJ,GAAWw3C,GAAX,GAAiBppH,IAAI,CAACyjO,KAAnC;AAEA,WAAOxpO,CAAP;AACD;;AAED81M,EAAAA,IAAI,CAAC3mF,GAAL,GAAW,UAASxoG,CAAT,EAAY;AACrB,QAAIg2O,EAAE,GAAG52P,IAAI,CAACK,GAAL,CAAS,IAAT,EAAe,CAACugB,CAAhB,CAAT;AAAA,QAA6Bi2O,EAAE,GAAGD,EAAE,GAAGA,EAAvC;AAAA,QAA2CE,EAAE,GAAGD,EAAE,GAAGA,EAArD;;AACA,WAAOZ,OAAO,CAACW,EAAD,EAAKC,EAAL,EAASC,EAAT,CAAd;AACD,GAHD;;AAKA,SAAO/mD,IAAP;AACD,CAxDc,CAwDZ/vM,IAAI,CAACyjO,KAxDO,EAwDA,CAxDA,EAwDG,CAxDH;;;;;;;;;;;ACdf;;AACA;;;;;;AAEA,SAASotB,GAAT,CAAaoC,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,QAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEc8qP,GAAG,CAACoC,UAAD;;;AACX,IAAI8D,OAAO,GAAGlG,GAAG,CAACpB,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;AAEe,SAASqC,GAAT,CAAa/rP,KAAb,EAAoB6F,GAApB,EAAyB;AACtC,MAAIG,CAAC,GAAG,oBAAM,CAAChG,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BgG,CAAhC,EAAmC,CAACH,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsBG,CAAzD,CAAR;AAAA,MACI5K,CAAC,GAAG,oBAAM4E,KAAK,CAAC5E,CAAZ,EAAeyK,GAAG,CAACzK,CAAnB,CADR;AAAA,MAEI6G,CAAC,GAAG,oBAAMjC,KAAK,CAACiC,CAAZ,EAAe4D,GAAG,CAAC5D,CAAnB,CAFR;AAAA,MAGIyoP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,SAAO,UAAS9yP,CAAT,EAAY;AACjBoI,IAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC5E,CAAN,GAAUA,CAAC,CAACxD,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,WAAOoI,KAAK,GAAG,EAAf;AACD,GAND;AAOD;;;;;;;;;ACfD;;AACA;;;;;;AAEA,SAASosP,GAAT,CAAac,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI9/C,CAAC,GAAG,oBAAMX,KAAK,CAACW,CAAZ,EAAekF,GAAG,CAAClF,CAAnB,CADR;AAAA,QAEIqF,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACW,CAAN,GAAUA,CAAC,CAAC/I,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEcosP,GAAG,CAACc,UAAD;;;AACX,IAAI+D,OAAO,GAAG7E,GAAG,CAAC1C,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;;;AAEA,SAASqD,SAAT,CAAmBG,GAAnB,EAAwB;AACtB,SAAQ,SAASgE,cAAT,CAAwBt4O,CAAxB,EAA2B;AACjCA,IAAAA,CAAC,GAAG,CAACA,CAAL;;AAEA,aAASm0O,SAAT,CAAmB/sP,KAAnB,EAA0B6F,GAA1B,EAA+B;AAC7B,UAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,wBAAeA,KAAf,CAAT,EAAgCygD,CAAjC,EAAoC,CAAC56C,GAAG,GAAG,wBAAeA,GAAf,CAAP,EAA4B46C,CAAhE,CAAX;AAAA,UACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,UAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,UAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,aAAO,UAAS9yP,CAAT,EAAY;AACjBoI,QAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAAC/L,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAYghB,CAAZ,CAAD,CAAX;AACA5Y,QAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,eAAOoI,KAAK,GAAG,EAAf;AACD,OAND;AAOD;;AAED+sP,IAAAA,SAAS,CAACz5F,KAAV,GAAkB49F,cAAlB;AAEA,WAAOnE,SAAP;AACD,GApBM,CAoBJ,CApBI,CAAP;AAqBD;;eAEcA,SAAS,CAACG,UAAD;;;AACjB,IAAIiE,aAAa,GAAGpE,SAAS,CAACrD,cAAD,CAA7B;;;;;;;;;;AC5BP;;;;AAEe,SAAS0H,SAAT,CAAmBC,WAAnB,EAAgC/yP,MAAhC,EAAwC;AACrD,MAAIA,MAAM,KAAK8qH,SAAf,EAA0B9qH,MAAM,GAAG+yP,WAAT,EAAsBA,WAAW,GAAGn6P,cAApC;AAC1B,MAAIhD,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAA/B;AAAA,MAAkC4S,CAAC,GAAG9H,MAAM,CAAC,CAAD,CAA5C;AAAA,MAAiD8zM,CAAC,GAAG,IAAIp+M,KAAJ,CAAUoO,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAtB,CAArD;;AACA,SAAOlO,CAAC,GAAGkO,CAAX,EAAcgwM,CAAC,CAACl+M,CAAD,CAAD,GAAOm9P,WAAW,CAACjrP,CAAD,EAAIA,CAAC,GAAG9H,MAAM,CAAC,EAAEpK,CAAH,CAAd,CAAlB;;AACd,SAAO,UAAS0D,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAASgI,CAAC,GAAG,CAAb,EAAgBnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,IAAIwK,CAAhB,CAAhB,CAAZ,CAAR;AACA,WAAOgwM,CAAC,CAACl+M,CAAD,CAAD,CAAK0D,CAAC,GAAG1D,CAAT,CAAP;AACD,GAHD;AAID;;;;;;;;;ACVc,kBAAS8qP,YAAT,EAAuB58O,CAAvB,EAA0B;AACvC,MAAIg+H,OAAO,GAAG,IAAIpsI,KAAJ,CAAUoO,CAAV,CAAd;;AACA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4BksI,OAAO,CAAClsI,CAAD,CAAP,GAAa8qP,YAAY,CAAC9qP,CAAC,IAAIkO,CAAC,GAAG,CAAR,CAAF,CAAzB;;AAC5B,SAAOg+H,OAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;ACpBe,SAAS63B,SAAT,CAAmB59J,CAAnB,EAAsB;AACnC,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;;;;;;;;ACJc,SAAS61M,MAAT,CAAgB71M,CAAhB,EAAmB;AAChC,SAAO,CAACA,CAAR;AACD;;;;;;;;;;;;ACFD;;AACA;;AACA;;AACA;;;;AAEA,IAAI0qN,IAAI,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAX;;AAEO,SAAS5wF,QAAT,CAAkB95H,CAAlB,EAAqB;AAC1B,SAAOA,CAAP;AACD;;AAED,SAASw4J,SAAT,CAAmBz3J,CAAnB,EAAsB6G,CAAtB,EAAyB;AACvB,SAAO,CAACA,CAAC,IAAK7G,CAAC,GAAG,CAACA,CAAZ,IACD,UAASf,CAAT,EAAY;AAAE,WAAO,CAACA,CAAC,GAAGe,CAAL,IAAU6G,CAAjB;AAAqB,GADlC,GAED,uBAASnD,KAAK,CAACmD,CAAD,CAAL,GAAWwkE,GAAX,GAAiB,GAA1B,CAFN;AAGD;;AAED,SAAS6qL,OAAT,CAAiBl2P,CAAjB,EAAoB6G,CAApB,EAAuB;AACrB,MAAIrK,CAAJ;AACA,MAAIwD,CAAC,GAAG6G,CAAR,EAAWrK,CAAC,GAAGwD,CAAJ,EAAOA,CAAC,GAAG6G,CAAX,EAAcA,CAAC,GAAGrK,CAAlB;AACX,SAAO,UAASyC,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAACK,GAAL,CAASc,CAAT,EAAYnB,IAAI,CAACG,GAAL,CAAS6H,CAAT,EAAY5H,CAAZ,CAAZ,CAAP;AAAqC,GAA1D;AACD,EAED;AACA;;;AACA,SAASk3P,KAAT,CAAejoD,MAAf,EAAuB5zK,KAAvB,EAA8B27N,WAA9B,EAA2C;AACzC,MAAI5nD,EAAE,GAAGH,MAAM,CAAC,CAAD,CAAf;AAAA,MAAoBjsI,EAAE,GAAGisI,MAAM,CAAC,CAAD,CAA/B;AAAA,MAAoCwC,EAAE,GAAGp2K,KAAK,CAAC,CAAD,CAA9C;AAAA,MAAmD4wK,EAAE,GAAG5wK,KAAK,CAAC,CAAD,CAA7D;AACA,MAAI2nC,EAAE,GAAGosI,EAAT,EAAaA,EAAE,GAAG52C,SAAS,CAACx1F,EAAD,EAAKosI,EAAL,CAAd,EAAwBqC,EAAE,GAAGulD,WAAW,CAAC/qD,EAAD,EAAKwF,EAAL,CAAxC,CAAb,KACKrC,EAAE,GAAG52C,SAAS,CAAC42C,EAAD,EAAKpsI,EAAL,CAAd,EAAwByuI,EAAE,GAAGulD,WAAW,CAACvlD,EAAD,EAAKxF,EAAL,CAAxC;AACL,SAAO,UAASjsM,CAAT,EAAY;AAAE,WAAOyxM,EAAE,CAACrC,EAAE,CAACpvM,CAAD,CAAH,CAAT;AAAmB,GAAxC;AACD;;AAED,SAASm3P,OAAT,CAAiBloD,MAAjB,EAAyB5zK,KAAzB,EAAgC27N,WAAhC,EAA6C;AAC3C,MAAIlzP,CAAC,GAAGlE,IAAI,CAACG,GAAL,CAASkvM,MAAM,CAAC91M,MAAhB,EAAwBkiC,KAAK,CAACliC,MAA9B,IAAwC,CAAhD;AAAA,MACIuN,CAAC,GAAG,IAAI/M,KAAJ,CAAUmK,CAAV,CADR;AAAA,MAEI+D,CAAC,GAAG,IAAIlO,KAAJ,CAAUmK,CAAV,CAFR;AAAA,MAGIjK,CAAC,GAAG,CAAC,CAHT,CAD2C,CAM3C;;AACA,MAAIo1M,MAAM,CAACnrM,CAAD,CAAN,GAAYmrM,MAAM,CAAC,CAAD,CAAtB,EAA2B;AACzBA,IAAAA,MAAM,GAAGA,MAAM,CAAC/rM,KAAP,GAAeoL,OAAf,EAAT;AACA+sB,IAAAA,KAAK,GAAGA,KAAK,CAACn4B,KAAN,GAAcoL,OAAd,EAAR;AACD;;AAED,SAAO,EAAEzU,CAAF,GAAMiK,CAAb,EAAgB;AACd4C,IAAAA,CAAC,CAAC7M,CAAD,CAAD,GAAO2+J,SAAS,CAACy2C,MAAM,CAACp1M,CAAD,CAAP,EAAYo1M,MAAM,CAACp1M,CAAC,GAAG,CAAL,CAAlB,CAAhB;AACAgO,IAAAA,CAAC,CAAChO,CAAD,CAAD,GAAOm9P,WAAW,CAAC37N,KAAK,CAACxhC,CAAD,CAAN,EAAWwhC,KAAK,CAACxhC,CAAC,GAAG,CAAL,CAAhB,CAAlB;AACD;;AAED,SAAO,UAASmG,CAAT,EAAY;AACjB,QAAInG,CAAC,GAAG,qBAAOo1M,MAAP,EAAejvM,CAAf,EAAkB,CAAlB,EAAqB8D,CAArB,IAA0B,CAAlC;AACA,WAAO+D,CAAC,CAAChO,CAAD,CAAD,CAAK6M,CAAC,CAAC7M,CAAD,CAAD,CAAKmG,CAAL,CAAL,CAAP;AACD,GAHD;AAID;;AAEM,SAAS2uE,IAAT,CAAchf,MAAd,EAAsBvf,MAAtB,EAA8B;AACnC,SAAOA,MAAM,CACR6+J,MADE,CACKt/I,MAAM,CAACs/I,MAAP,EADL,EAEF5zK,KAFE,CAEIs0B,MAAM,CAACt0B,KAAP,EAFJ,EAGF27N,WAHE,CAGUrnM,MAAM,CAACqnM,WAAP,EAHV,EAIFl3P,KAJE,CAII6vD,MAAM,CAAC7vD,KAAP,EAJJ,EAKF40J,OALE,CAKM/kG,MAAM,CAAC+kG,OAAP,EALN,CAAP;AAMD;;AAEM,SAAS0iG,WAAT,GAAuB;AAC5B,MAAInoD,MAAM,GAAGyb,IAAb;AAAA,MACIrvL,KAAK,GAAGqvL,IADZ;AAAA,MAEIssC,WAAW,GAAGK,0BAFlB;AAAA,MAGIv0E,SAHJ;AAAA,MAIIw0E,WAJJ;AAAA,MAKI5iG,OALJ;AAAA,MAMI50J,KAAK,GAAGg6H,QANZ;AAAA,MAOIi9H,SAPJ;AAAA,MAQIxzO,MARJ;AAAA,MASIsB,KATJ;;AAWA,WAASogO,OAAT,GAAmB;AACjB,QAAIl9O,CAAC,GAAGnI,IAAI,CAACG,GAAL,CAASkvM,MAAM,CAAC91M,MAAhB,EAAwBkiC,KAAK,CAACliC,MAA9B,CAAR;AACA,QAAI2G,KAAK,KAAKg6H,QAAd,EAAwBh6H,KAAK,GAAGm3P,OAAO,CAAChoD,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAClnM,CAAC,GAAG,CAAL,CAAlB,CAAf;AACxBgvP,IAAAA,SAAS,GAAGhvP,CAAC,GAAG,CAAJ,GAAQovP,OAAR,GAAkBD,KAA9B;AACA3zO,IAAAA,MAAM,GAAGsB,KAAK,GAAG,IAAjB;AACA,WAAOnV,KAAP;AACD;;AAED,WAASA,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,GAAgB00J,OAAhB,GAA0B,CAACnxI,MAAM,KAAKA,MAAM,GAAGwzO,SAAS,CAAC9nD,MAAM,CAAC3rM,GAAP,CAAWw/K,SAAX,CAAD,EAAwBznJ,KAAxB,EAA+B27N,WAA/B,CAAvB,CAAP,EAA4El0E,SAAS,CAAChjL,KAAK,CAACE,CAAD,CAAN,CAArF,CAAjC;AACD;;AAED0P,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAASh5O,CAAT,EAAY;AACzB,WAAOze,KAAK,CAACw3P,WAAW,CAAC,CAACzyO,KAAK,KAAKA,KAAK,GAAGkyO,SAAS,CAAC17N,KAAD,EAAQ4zK,MAAM,CAAC3rM,GAAP,CAAWw/K,SAAX,CAAR,EAA+B00E,gCAA/B,CAAtB,CAAN,EAAgFj5O,CAAhF,CAAD,CAAZ,CAAZ;AACD,GAFD;;AAIA7O,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,GAAGt1M,KAAK,CAACuR,IAAN,CAAWsV,CAAX,EAAcq1L,eAAd,CAAT,EAAgCovC,OAAO,EAA3D,IAAiEh2C,MAAM,CAAC/rM,KAAP,EAAxE;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkiC,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAR,EAAuBykO,OAAO,EAAlD,IAAwD5pN,KAAK,CAACn4B,KAAN,EAA/D;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAS1kO,CAAT,EAAY;AAC7B,WAAO6a,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAR,EAAuBw2O,WAAW,GAAGS,+BAArC,EAAuDxS,OAAO,EAArE;AACD,GAFD;;AAIAv1O,EAAAA,KAAK,CAAC5P,KAAN,GAAc,UAAS0gB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2G,KAAK,GAAG0gB,CAAC,GAAG,IAAH,GAAUs5G,QAAnB,EAA6BmrH,OAAO,EAAxD,IAA8DnlP,KAAK,KAAKg6H,QAA/E;AACD,GAFD;;AAIApqH,EAAAA,KAAK,CAACsnP,WAAN,GAAoB,UAASx2O,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB69P,WAAW,GAAGx2O,CAAd,EAAiBykO,OAAO,EAA5C,IAAkD+R,WAAzD;AACD,GAFD;;AAIAtnP,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIA,SAAO,UAASn3J,CAAT,EAAYs7E,CAAZ,EAAe;AACpBiqG,IAAAA,SAAS,GAAGvlL,CAAZ,EAAe+5P,WAAW,GAAGz+K,CAA7B;AACA,WAAOosK,OAAO,EAAd;AACD,GAHD;AAID;;AAEc,SAASyS,UAAT,GAAsB;AACnC,SAAON,WAAW,GAAGt9H,QAAH,EAAaA,QAAb,CAAlB;AACD;;;;;;;;;AC5HD;;AACA;;AAEe,SAAS69H,UAAT,CAAoBhyP,KAApB,EAA2By1B,IAA3B,EAAiCw2C,KAAjC,EAAwCsxI,SAAxC,EAAmD;AAChE,MAAI3uM,IAAI,GAAG,uBAAS5O,KAAT,EAAgBy1B,IAAhB,EAAsBw2C,KAAtB,CAAX;AAAA,MACImc,SADJ;AAEAm1H,EAAAA,SAAS,GAAG,+BAAgBA,SAAS,IAAI,IAAb,GAAoB,IAApB,GAA2BA,SAA3C,CAAZ;;AACA,UAAQA,SAAS,CAACppM,IAAlB;AACE,SAAK,GAAL;AAAU;AACR,YAAIjd,KAAK,GAAG+C,IAAI,CAACK,GAAL,CAASL,IAAI,CAACiT,GAAL,CAASlN,KAAT,CAAT,EAA0B/F,IAAI,CAACiT,GAAL,CAASuoB,IAAT,CAA1B,CAAZ;AACA,YAAI8nL,SAAS,CAACn1H,SAAV,IAAuB,IAAvB,IAA+B,CAACtpF,KAAK,CAACspF,SAAS,GAAG,+BAAgBx5E,IAAhB,EAAsB1X,KAAtB,CAAb,CAAzC,EAAqFqmN,SAAS,CAACn1H,SAAV,GAAsBA,SAAtB;AACrF,eAAO,4BAAam1H,SAAb,EAAwBrmN,KAAxB,CAAP;AACD;;AACD,SAAK,EAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AAAU;AACR,YAAIqmN,SAAS,CAACn1H,SAAV,IAAuB,IAAvB,IAA+B,CAACtpF,KAAK,CAACspF,SAAS,GAAG,8BAAex5E,IAAf,EAAqB3U,IAAI,CAACK,GAAL,CAASL,IAAI,CAACiT,GAAL,CAASlN,KAAT,CAAT,EAA0B/F,IAAI,CAACiT,GAAL,CAASuoB,IAAT,CAA1B,CAArB,CAAb,CAAzC,EAAwH8nL,SAAS,CAACn1H,SAAV,GAAsBA,SAAS,IAAIm1H,SAAS,CAACppM,IAAV,KAAmB,GAAvB,CAA/B;AACxH;AACD;;AACD,SAAK,GAAL;AACA,SAAK,GAAL;AAAU;AACR,YAAIopM,SAAS,CAACn1H,SAAV,IAAuB,IAAvB,IAA+B,CAACtpF,KAAK,CAACspF,SAAS,GAAG,8BAAex5E,IAAf,CAAb,CAAzC,EAA6E2uM,SAAS,CAACn1H,SAAV,GAAsBA,SAAS,GAAG,CAACm1H,SAAS,CAACppM,IAAV,KAAmB,GAApB,IAA2B,CAA7D;AAC7E;AACD;AAlBH;;AAoBA,SAAO,sBAAOopM,SAAP,CAAP;AACD;;;;;;;;;;AC5BD;;AACA;;AACA;;AACA;;;;;;;;AAEO,SAAS00C,SAAT,CAAmBloP,KAAnB,EAA0B;AAC/B,MAAIu/L,MAAM,GAAGv/L,KAAK,CAACu/L,MAAnB;;AAEAv/L,EAAAA,KAAK,CAACmwM,KAAN,GAAc,UAASjuI,KAAT,EAAgB;AAC5B,QAAIlrE,CAAC,GAAGuoM,MAAM,EAAd;AACA,WAAO,oBAAMvoM,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAb,EAA6By4E,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAAlD,CAAP;AACD,GAHD;;AAKAliE,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAS/lL,KAAT,EAAgBsxI,SAAhB,EAA2B;AAC5C,QAAIx8M,CAAC,GAAGuoM,MAAM,EAAd;AACA,WAAO,yBAAWvoM,CAAC,CAAC,CAAD,CAAZ,EAAiBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAlB,EAAkCy4E,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAAvD,EAA8DsxI,SAA9D,CAAP;AACD,GAHD;;AAKAxzM,EAAAA,KAAK,CAAC0wM,IAAN,GAAa,UAASxuI,KAAT,EAAgB;AAC3B,QAAIA,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;AAEnB,QAAIlrE,CAAC,GAAGuoM,MAAM,EAAd;AACA,QAAI10G,EAAE,GAAG,CAAT;AACA,QAAI23G,EAAE,GAAGxrM,CAAC,CAACvN,MAAF,GAAW,CAApB;AACA,QAAIwM,KAAK,GAAGe,CAAC,CAAC6zF,EAAD,CAAb;AACA,QAAIn/D,IAAI,GAAG10B,CAAC,CAACwrM,EAAD,CAAZ;AACA,QAAImO,OAAJ;AACA,QAAI9rM,IAAJ;AACA,QAAIsjP,OAAO,GAAG,EAAd;;AAEA,QAAIz8N,IAAI,GAAGz1B,KAAX,EAAkB;AAChB4O,MAAAA,IAAI,GAAG5O,KAAP,EAAcA,KAAK,GAAGy1B,IAAtB,EAA4BA,IAAI,GAAG7mB,IAAnC;AACAA,MAAAA,IAAI,GAAGgmF,EAAP,EAAWA,EAAE,GAAG23G,EAAhB,EAAoBA,EAAE,GAAG39L,IAAzB;AACD;;AAED,WAAOsjP,OAAO,KAAK,CAAnB,EAAsB;AACpBtjP,MAAAA,IAAI,GAAG,4BAAc5O,KAAd,EAAqBy1B,IAArB,EAA2Bw2C,KAA3B,CAAP;;AACA,UAAIr9D,IAAI,KAAK8rM,OAAb,EAAsB;AACpB35M,QAAAA,CAAC,CAAC6zF,EAAD,CAAD,GAAQ50F,KAAR;AACAe,QAAAA,CAAC,CAACwrM,EAAD,CAAD,GAAQ92K,IAAR;AACA,eAAO6zK,MAAM,CAACvoM,CAAD,CAAb;AACD,OAJD,MAIO,IAAI6N,IAAI,GAAG,CAAX,EAAc;AACnB5O,QAAAA,KAAK,GAAG/F,IAAI,CAAC+H,KAAL,CAAWhC,KAAK,GAAG4O,IAAnB,IAA2BA,IAAnC;AACA6mB,QAAAA,IAAI,GAAGx7B,IAAI,CAACoC,IAAL,CAAUo5B,IAAI,GAAG7mB,IAAjB,IAAyBA,IAAhC;AACD,OAHM,MAGA,IAAIA,IAAI,GAAG,CAAX,EAAc;AACnB5O,QAAAA,KAAK,GAAG/F,IAAI,CAACoC,IAAL,CAAU2D,KAAK,GAAG4O,IAAlB,IAA0BA,IAAlC;AACA6mB,QAAAA,IAAI,GAAGx7B,IAAI,CAAC+H,KAAL,CAAWyzB,IAAI,GAAG7mB,IAAlB,IAA0BA,IAAjC;AACD,OAHM,MAGA;AACL;AACD;;AACD8rM,MAAAA,OAAO,GAAG9rM,IAAV;AACD;;AAED,WAAO7E,KAAP;AACD,GApCD;;AAsCA,SAAOA,KAAP;AACD;;AAEc,SAASigF,MAAT,GAAkB;AAC/B,MAAIjgF,KAAK,GAAG,0BAAZ;;AAEAA,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAYigF,MAAM,EAAlB,CAAP;AACD,GAFD;;AAIA80J,kBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB;;AAEA,SAAOg+P,SAAS,CAACloP,KAAD,CAAhB;AACD;;;;;;;;;ACrED;;AACA;;;;AAEe,SAASoqH,QAAT,CAAkBm1E,MAAlB,EAA0B;AACvC,MAAIv6C,OAAJ;;AAEA,WAAShlJ,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,GAAgB00J,OAAhB,GAA0B10J,CAAjC;AACD;;AAED0P,EAAAA,KAAK,CAAC6nP,MAAN,GAAe7nP,KAAf;;AAEAA,EAAAA,KAAK,CAACu/L,MAAN,GAAev/L,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACvC,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,GAAGt1M,KAAK,CAACuR,IAAN,CAAWsV,CAAX,EAAcq1L,eAAd,CAAT,EAAgCnmM,KAApD,IAA6Du/L,MAAM,CAAC/rM,KAAP,EAApE;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIAhlJ,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOmrD,QAAQ,CAACm1E,MAAD,CAAR,CAAiBv6C,OAAjB,CAAyBA,OAAzB,CAAP;AACD,GAFD;;AAIAu6C,EAAAA,MAAM,GAAGr1M,SAAS,CAACT,MAAV,GAAmBQ,KAAK,CAACuR,IAAN,CAAW+jM,MAAX,EAAmB4G,eAAnB,CAAnB,GAAgD,CAAC,CAAD,EAAI,CAAJ,CAAzD;AAEA,SAAO,uBAAUnmM,KAAV,CAAP;AACD;;;;;;;;;AC3Bc,SAAS0wM,IAAT,CAAcnR,MAAd,EAAsBiW,QAAtB,EAAgC;AAC7CjW,EAAAA,MAAM,GAAGA,MAAM,CAAC/rM,KAAP,EAAT;AAEA,MAAIq3F,EAAE,GAAG,CAAT;AAAA,MACI23G,EAAE,GAAGjD,MAAM,CAAC91M,MAAP,GAAgB,CADzB;AAAA,MAEI+gN,EAAE,GAAGjL,MAAM,CAAC10G,EAAD,CAFf;AAAA,MAGI+R,EAAE,GAAG2iG,MAAM,CAACiD,EAAD,CAHf;AAAA,MAII30M,CAJJ;;AAMA,MAAI+uG,EAAE,GAAG4tG,EAAT,EAAa;AACX38M,IAAAA,CAAC,GAAGg9F,EAAJ,EAAQA,EAAE,GAAG23G,EAAb,EAAiBA,EAAE,GAAG30M,CAAtB;AACAA,IAAAA,CAAC,GAAG28M,EAAJ,EAAQA,EAAE,GAAG5tG,EAAb,EAAiBA,EAAE,GAAG/uG,CAAtB;AACD;;AAED0xM,EAAAA,MAAM,CAAC10G,EAAD,CAAN,GAAa2qH,QAAQ,CAACv9M,KAAT,CAAeuyM,EAAf,CAAb;AACAjL,EAAAA,MAAM,CAACiD,EAAD,CAAN,GAAagT,QAAQ,CAACljN,IAAT,CAAcsqG,EAAd,CAAb;AACA,SAAO2iG,MAAP;AACD;;;;;;;;;;ACjBD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAAS6oD,YAAT,CAAsB93P,CAAtB,EAAyB;AACvB,SAAOJ,IAAI,CAACiK,GAAL,CAAS7J,CAAT,CAAP;AACD;;AAED,SAAS+3P,YAAT,CAAsB/3P,CAAtB,EAAyB;AACvB,SAAOJ,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAP;AACD;;AAED,SAASg4P,aAAT,CAAuBh4P,CAAvB,EAA0B;AACxB,SAAO,CAACJ,IAAI,CAACiK,GAAL,CAAS,CAAC7J,CAAV,CAAR;AACD;;AAED,SAASi4P,aAAT,CAAuBj4P,CAAvB,EAA0B;AACxB,SAAO,CAACJ,IAAI,CAACiC,GAAL,CAAS,CAAC7B,CAAV,CAAR;AACD;;AAED,SAASk4P,KAAT,CAAel4P,CAAf,EAAkB;AAChB,SAAO0E,QAAQ,CAAC1E,CAAD,CAAR,GAAc,EAAE,OAAOA,CAAT,CAAd,GAA4BA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAA/C;AACD;;AAED,SAASm4P,IAAT,CAActzN,IAAd,EAAoB;AAClB,SAAOA,IAAI,KAAK,EAAT,GAAcqzN,KAAd,GACDrzN,IAAI,KAAKjlC,IAAI,CAACuyP,CAAd,GAAkBvyP,IAAI,CAACiC,GAAvB,GACA,UAAS7B,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAe7kC,CAAf,CAAP;AAA2B,GAF/C;AAGD;;AAED,SAASo4P,IAAT,CAAcvzN,IAAd,EAAoB;AAClB,SAAOA,IAAI,KAAKjlC,IAAI,CAACuyP,CAAd,GAAkBvyP,IAAI,CAACiK,GAAvB,GACDg7B,IAAI,KAAK,EAAT,IAAejlC,IAAI,CAACy4P,KAApB,IACCxzN,IAAI,KAAK,CAAT,IAAcjlC,IAAI,CAACioI,IADpB,KAEEhjG,IAAI,GAAGjlC,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAAP,EAAuB,UAAS7kC,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAACiK,GAAL,CAAS7J,CAAT,IAAc6kC,IAArB;AAA4B,GAFnE,CADN;AAID;;AAED,SAASyzN,OAAT,CAAiB9yP,CAAjB,EAAoB;AAClB,SAAO,UAASxF,CAAT,EAAY;AACjB,WAAO,CAACwF,CAAC,CAAC,CAACxF,CAAF,CAAT;AACD,GAFD;AAGD;;AAEM,SAASu4P,OAAT,CAAiBz1E,SAAjB,EAA4B;AACjC,MAAIpzK,KAAK,GAAGozK,SAAS,CAACg1E,YAAD,EAAeC,YAAf,CAArB;AAAA,MACI9oD,MAAM,GAAGv/L,KAAK,CAACu/L,MADnB;AAAA,MAEIpqK,IAAI,GAAG,EAFX;AAAA,MAGIs9F,IAHJ;AAAA,MAIIq2H,IAJJ;;AAMA,WAASvT,OAAT,GAAmB;AACjB9iH,IAAAA,IAAI,GAAGi2H,IAAI,CAACvzN,IAAD,CAAX,EAAmB2zN,IAAI,GAAGL,IAAI,CAACtzN,IAAD,CAA9B;;AACA,QAAIoqK,MAAM,GAAG,CAAH,CAAN,GAAc,CAAlB,EAAqB;AACnB9sE,MAAAA,IAAI,GAAGm2H,OAAO,CAACn2H,IAAD,CAAd,EAAsBq2H,IAAI,GAAGF,OAAO,CAACE,IAAD,CAApC;AACA11E,MAAAA,SAAS,CAACk1E,aAAD,EAAgBC,aAAhB,CAAT;AACD,KAHD,MAGO;AACLn1E,MAAAA,SAAS,CAACg1E,YAAD,EAAeC,YAAf,CAAT;AACD;;AACD,WAAOroP,KAAP;AACD;;AAEDA,EAAAA,KAAK,CAACm1B,IAAN,GAAa,UAASrkB,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0rC,IAAI,GAAG,CAACrkB,CAAR,EAAWykO,OAAO,EAAtC,IAA4CpgN,IAAnD;AACD,GAFD;;AAIAn1B,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,CAACzuL,CAAD,CAAN,EAAWykO,OAAO,EAAtC,IAA4Ch2C,MAAM,EAAzD;AACD,GAFD;;AAIAv/L,EAAAA,KAAK,CAACmwM,KAAN,GAAc,UAASjuI,KAAT,EAAgB;AAC5B,QAAIlrE,CAAC,GAAGuoM,MAAM,EAAd;AAAA,QACIp2H,CAAC,GAAGnyE,CAAC,CAAC,CAAD,CADT;AAAA,QAEIqF,CAAC,GAAGrF,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAFT;AAAA,QAGI0O,CAHJ;AAKA,QAAIA,CAAC,GAAGkE,CAAC,GAAG8sE,CAAZ,EAAeh/E,CAAC,GAAGg/E,CAAJ,EAAOA,CAAC,GAAG9sE,CAAX,EAAcA,CAAC,GAAGlS,CAAlB;AAEf,QAAIA,CAAC,GAAGsoI,IAAI,CAACtpD,CAAD,CAAZ;AAAA,QACI/0E,CAAC,GAAGq+H,IAAI,CAACp2H,CAAD,CADZ;AAAA,QAEIoyB,CAFJ;AAAA,QAGIhnB,CAHJ;AAAA,QAII5Z,CAJJ;AAAA,QAKIwK,CAAC,GAAG6pE,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqB,CAACA,KAL9B;AAAA,QAMItC,CAAC,GAAG,EANR;;AAQA,QAAI,EAAEzqC,IAAI,GAAG,CAAT,KAAe/gC,CAAC,GAAGjK,CAAJ,GAAQkO,CAA3B,EAA8B;AAC5BlO,MAAAA,CAAC,GAAG+F,IAAI,CAAC+H,KAAL,CAAW9N,CAAX,CAAJ,EAAmBiK,CAAC,GAAGlE,IAAI,CAACoC,IAAL,CAAU8B,CAAV,CAAvB;AACA,UAAI+0E,CAAC,GAAG,CAAR,EAAW,OAAOh/E,CAAC,IAAIiK,CAAZ,EAAe,EAAEjK,CAAjB,EAAoB;AAC7B,aAAKsd,CAAC,GAAG,CAAJ,EAAOgnB,CAAC,GAAGq6N,IAAI,CAAC3+P,CAAD,CAApB,EAAyBsd,CAAC,GAAG0tB,IAA7B,EAAmC,EAAE1tB,CAArC,EAAwC;AACtC5Z,UAAAA,CAAC,GAAG4gC,CAAC,GAAGhnB,CAAR;AACA,cAAI5Z,CAAC,GAAGs7E,CAAR,EAAW;AACX,cAAIt7E,CAAC,GAAGwO,CAAR,EAAW;AACXujE,UAAAA,CAAC,CAACx1E,IAAF,CAAOyD,CAAP;AACD;AACF,OAPD,MAOO,OAAO1D,CAAC,IAAIiK,CAAZ,EAAe,EAAEjK,CAAjB,EAAoB;AACzB,aAAKsd,CAAC,GAAG0tB,IAAI,GAAG,CAAX,EAAc1G,CAAC,GAAGq6N,IAAI,CAAC3+P,CAAD,CAA3B,EAAgCsd,CAAC,IAAI,CAArC,EAAwC,EAAEA,CAA1C,EAA6C;AAC3C5Z,UAAAA,CAAC,GAAG4gC,CAAC,GAAGhnB,CAAR;AACA,cAAI5Z,CAAC,GAAGs7E,CAAR,EAAW;AACX,cAAIt7E,CAAC,GAAGwO,CAAR,EAAW;AACXujE,UAAAA,CAAC,CAACx1E,IAAF,CAAOyD,CAAP;AACD;AACF;AACD,UAAI+xE,CAAC,CAACn2E,MAAF,GAAW,CAAX,GAAe4O,CAAnB,EAAsBunE,CAAC,GAAG,oBAAMuJ,CAAN,EAAS9sE,CAAT,EAAYhE,CAAZ,CAAJ;AACvB,KAlBD,MAkBO;AACLunE,MAAAA,CAAC,GAAG,oBAAMz1E,CAAN,EAASiK,CAAT,EAAYlE,IAAI,CAACG,GAAL,CAAS+D,CAAC,GAAGjK,CAAb,EAAgBkO,CAAhB,CAAZ,EAAgCzE,GAAhC,CAAoCk1P,IAApC,CAAJ;AACD;;AAED,WAAO3wP,CAAC,GAAGynE,CAAC,CAAChhE,OAAF,EAAH,GAAiBghE,CAAzB;AACD,GAvCD;;AAyCA5/D,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAS/lL,KAAT,EAAgBsxI,SAAhB,EAA2B;AAC5C,QAAIA,SAAS,IAAI,IAAjB,EAAuBA,SAAS,GAAGr+K,IAAI,KAAK,EAAT,GAAc,KAAd,GAAsB,GAAlC;AACvB,QAAI,OAAOq+K,SAAP,KAAqB,UAAzB,EAAqCA,SAAS,GAAG,sBAAOA,SAAP,CAAZ;AACrC,QAAItxI,KAAK,KAAKjwE,QAAd,EAAwB,OAAOuhN,SAAP;AACxB,QAAItxI,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;AACnB,QAAIz6D,CAAC,GAAGvX,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY4kC,IAAI,GAAG+sC,KAAP,GAAeliE,KAAK,CAACmwM,KAAN,GAAc1mN,MAAzC,CAAR,CAL4C,CAKc;;AAC1D,WAAO,UAASuN,CAAT,EAAY;AACjB,UAAI7M,CAAC,GAAG6M,CAAC,GAAG8xP,IAAI,CAAC54P,IAAI,CAACsG,KAAL,CAAWi8H,IAAI,CAACz7H,CAAD,CAAf,CAAD,CAAhB;AACA,UAAI7M,CAAC,GAAGgrC,IAAJ,GAAWA,IAAI,GAAG,GAAtB,EAA2BhrC,CAAC,IAAIgrC,IAAL;AAC3B,aAAOhrC,CAAC,IAAIsd,CAAL,GAAS+rM,SAAS,CAACx8M,CAAD,CAAlB,GAAwB,EAA/B;AACD,KAJD;AAKD,GAXD;;AAaAgJ,EAAAA,KAAK,CAAC0wM,IAAN,GAAa,YAAW;AACtB,WAAOnR,MAAM,CAAC,mBAAKA,MAAM,EAAX,EAAe;AAC3BtnM,MAAAA,KAAK,EAAE,UAAS3H,CAAT,EAAY;AAAE,eAAOw4P,IAAI,CAAC54P,IAAI,CAAC+H,KAAL,CAAWw6H,IAAI,CAACniI,CAAD,CAAf,CAAD,CAAX;AAAmC,OAD7B;AAE3BgC,MAAAA,IAAI,EAAE,UAAShC,CAAT,EAAY;AAAE,eAAOw4P,IAAI,CAAC54P,IAAI,CAACoC,IAAL,CAAUmgI,IAAI,CAACniI,CAAD,CAAd,CAAD,CAAX;AAAkC;AAF3B,KAAf,CAAD,CAAb;AAID,GALD;;AAOA,SAAO0P,KAAP;AACD;;AAEc,SAAS7F,GAAT,GAAe;AAC5B,MAAI6F,KAAK,GAAG6oP,OAAO,CAAC,8BAAD,CAAP,CAAuBtpD,MAAvB,CAA8B,CAAC,CAAD,EAAI,EAAJ,CAA9B,CAAZ;;AAEAv/L,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY7F,GAAG,EAAf,EAAmBg7B,IAAnB,CAAwBn1B,KAAK,CAACm1B,IAAN,EAAxB,CAAP;AACD,GAFD;;AAIA4/M,kBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB;;AAEA,SAAO8V,KAAP;AACD;;;;;;;;;;ACjJD;;AACA;;AACA;;AAEA,SAAS+oP,eAAT,CAAyBnyP,CAAzB,EAA4B;AAC1B,SAAO,UAAStG,CAAT,EAAY;AACjB,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGsG,CAAb,CAAX,CAAtB;AACD,GAFD;AAGD;;AAED,SAASoyP,eAAT,CAAyBpyP,CAAzB,EAA4B;AAC1B,SAAO,UAAStG,CAAT,EAAY;AACjB,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC4S,KAAL,CAAW5S,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAX,CAAf,GAAyCsG,CAAhD;AACD,GAFD;AAGD;;AAEM,SAASqyP,SAAT,CAAmB71E,SAAnB,EAA8B;AACnC,MAAIx8K,CAAC,GAAG,CAAR;AAAA,MAAWoJ,KAAK,GAAGozK,SAAS,CAAC21E,eAAe,CAACnyP,CAAD,CAAhB,EAAqBoyP,eAAe,CAACpyP,CAAD,CAApC,CAA5B;;AAEAoJ,EAAAA,KAAK,CAAC+pH,QAAN,GAAiB,UAASj5G,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,GAAmB2pL,SAAS,CAAC21E,eAAe,CAACnyP,CAAC,GAAG,CAACka,CAAN,CAAhB,EAA0Bk4O,eAAe,CAACpyP,CAAD,CAAzC,CAA5B,GAA4EA,CAAnF;AACD,GAFD;;AAIA,SAAO,uBAAUoJ,KAAV,CAAP;AACD;;AAEc,SAASo/L,MAAT,GAAkB;AAC/B,MAAIp/L,KAAK,GAAGipP,SAAS,CAAC,8BAAD,CAArB;;AAEAjpP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAYo/L,MAAM,EAAlB,EAAsBr1E,QAAtB,CAA+B/pH,KAAK,CAAC+pH,QAAN,EAA/B,CAAP;AACD,GAFD;;AAIA,SAAOgrH,gBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB,CAAP;AACD;;;;;;;;;;;AClCD;;AACA;;AACA;;AAEA,SAASg/P,YAAT,CAAsB7oN,QAAtB,EAAgC;AAC9B,SAAO,UAAS/vC,CAAT,EAAY;AACjB,WAAOA,CAAC,GAAG,CAAJ,GAAQ,CAACJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAV,EAAa+vC,QAAb,CAAT,GAAkCnwC,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY+vC,QAAZ,CAAzC;AACD,GAFD;AAGD;;AAED,SAAS8oN,aAAT,CAAuB74P,CAAvB,EAA0B;AACxB,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAACJ,IAAI,CAACqC,IAAL,CAAU,CAACjC,CAAX,CAAT,GAAyBJ,IAAI,CAACqC,IAAL,CAAUjC,CAAV,CAAhC;AACD;;AAED,SAAS84P,eAAT,CAAyB94P,CAAzB,EAA4B;AAC1B,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAACA,CAAD,GAAKA,CAAb,GAAiBA,CAAC,GAAGA,CAA5B;AACD;;AAEM,SAAS+4P,MAAT,CAAgBj2E,SAAhB,EAA2B;AAChC,MAAIpzK,KAAK,GAAGozK,SAAS,CAAChpD,oBAAD,EAAWA,oBAAX,CAArB;AAAA,MACI/pF,QAAQ,GAAG,CADf;;AAGA,WAASk1M,OAAT,GAAmB;AACjB,WAAOl1M,QAAQ,KAAK,CAAb,GAAiB+yI,SAAS,CAAChpD,oBAAD,EAAWA,oBAAX,CAA1B,GACD/pF,QAAQ,KAAK,GAAb,GAAmB+yI,SAAS,CAAC+1E,aAAD,EAAgBC,eAAhB,CAA5B,GACAh2E,SAAS,CAAC81E,YAAY,CAAC7oN,QAAD,CAAb,EAAyB6oN,YAAY,CAAC,IAAI7oN,QAAL,CAArC,CAFf;AAGD;;AAEDrgC,EAAAA,KAAK,CAACqgC,QAAN,GAAiB,UAASvvB,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB42C,QAAQ,GAAG,CAACvvB,CAAZ,EAAeykO,OAAO,EAA1C,IAAgDl1M,QAAvD;AACD,GAFD;;AAIA,SAAO,uBAAUrgC,KAAV,CAAP;AACD;;AAEc,SAASY,GAAT,GAAe;AAC5B,MAAIZ,KAAK,GAAGqpP,MAAM,CAAC,8BAAD,CAAlB;;AAEArpP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAYY,GAAG,EAAf,EAAmBy/B,QAAnB,CAA4BrgC,KAAK,CAACqgC,QAAN,EAA5B,CAAP;AACD,GAFD;;AAIA00M,kBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB;;AAEA,SAAO8V,KAAP;AACD;;AAEM,SAASzN,IAAT,GAAgB;AACrB,SAAOqO,GAAG,CAACpW,KAAJ,CAAU,IAAV,EAAgBN,SAAhB,EAA2Bm2C,QAA3B,CAAoC,GAApC,CAAP;AACD;;;;;;;;;ACjDD;;AACA;;AACA;;AACA;;;;AAEA,SAASp9B,MAAT,CAAgB3S,CAAhB,EAAmB;AACjB,SAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeA,CAAf,GAAmBA,CAA1B;AACD;;AAED,SAASg5P,QAAT,CAAkBh5P,CAAlB,EAAqB;AACnB,SAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAACqC,IAAL,CAAUrC,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAV,CAAtB;AACD;;AAEc,SAAS89O,MAAT,GAAkB;AAC/B,MAAImb,OAAO,GAAG,0BAAd;AAAA,MACI59N,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CADZ;AAAA,MAEIn1B,KAAK,GAAG,KAFZ;AAAA,MAGIwuJ,OAHJ;;AAKA,WAAShlJ,KAAT,CAAe1P,CAAf,EAAkB;AAChB,QAAIue,CAAC,GAAGy6O,QAAQ,CAACC,OAAO,CAACj5P,CAAD,CAAR,CAAhB;AACA,WAAOyE,KAAK,CAAC8Z,CAAD,CAAL,GAAWm2I,OAAX,GAAqBxuJ,KAAK,GAAGtG,IAAI,CAACsG,KAAL,CAAWqY,CAAX,CAAH,GAAmBA,CAApD;AACD;;AAED7O,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAASh5O,CAAT,EAAY;AACzB,WAAO06O,OAAO,CAAC1B,MAAR,CAAe5kP,MAAM,CAAC4L,CAAD,CAArB,CAAP;AACD,GAFD;;AAIA7O,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/P,OAAO,CAAChqD,MAAR,CAAezuL,CAAf,GAAmB9Q,KAAvC,IAAgDupP,OAAO,CAAChqD,MAAR,EAAvD;AACD,GAFD;;AAIAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/P,OAAO,CAAC59N,KAAR,CAAc,CAACA,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,EAAcq1L,eAAd,CAAT,EAAgCvyM,GAAhC,CAAoCqP,MAApC,CAAd,GAA4DjD,KAAhF,IAAyF2rB,KAAK,CAACn4B,KAAN,EAAhG;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAS1kO,CAAT,EAAY;AAC7B,WAAO9Q,KAAK,CAAC2rB,KAAN,CAAY7a,CAAZ,EAAeta,KAAf,CAAqB,IAArB,CAAP;AACD,GAFD;;AAIAwJ,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAASsa,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+M,KAAK,GAAG,CAAC,CAACsa,CAAV,EAAa9Q,KAAjC,IAA0CxJ,KAAjD;AACD,GAFD;;AAIAwJ,EAAAA,KAAK,CAAC5P,KAAN,GAAc,UAAS0gB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/P,OAAO,CAACn5P,KAAR,CAAc0gB,CAAd,GAAkB9Q,KAAtC,IAA+CupP,OAAO,CAACn5P,KAAR,EAAtD;AACD,GAFD;;AAIA4P,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIAhlJ,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOmvK,MAAM,CAACmb,OAAO,CAAChqD,MAAR,EAAD,EAAmB5zK,KAAnB,CAAN,CACFn1B,KADE,CACIA,KADJ,EAEFpG,KAFE,CAEIm5P,OAAO,CAACn5P,KAAR,EAFJ,EAGF40J,OAHE,CAGMA,OAHN,CAAP;AAID,GALD;;AAOA+vF,kBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB;;AAEA,SAAO,uBAAU8V,KAAV,CAAP;AACD;;;;;;;;;AC9DD;;AACA;;AAEe,SAASyxM,QAAT,GAAoB;AACjC,MAAIlS,MAAM,GAAG,EAAb;AAAA,MACI5zK,KAAK,GAAG,EADZ;AAAA,MAEIwlL,UAAU,GAAG,EAFjB;AAAA,MAGInsD,OAHJ;;AAKA,WAASuwF,OAAT,GAAmB;AACjB,QAAIprP,CAAC,GAAG,CAAR;AAAA,QAAWkO,CAAC,GAAGnI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYo7B,KAAK,CAACliC,MAAlB,CAAf;AACA0nN,IAAAA,UAAU,GAAG,IAAIlnN,KAAJ,CAAUoO,CAAC,GAAG,CAAd,CAAb;;AACA,WAAO,EAAElO,CAAF,GAAMkO,CAAb,EAAgB84M,UAAU,CAAChnN,CAAC,GAAG,CAAL,CAAV,GAAoB,6BAAUo1M,MAAV,EAAkBp1M,CAAC,GAAGkO,CAAtB,CAApB;;AAChB,WAAO2H,KAAP;AACD;;AAED,WAASA,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,GAAgB00J,OAAhB,GAA0Br5H,KAAK,CAAC,qBAAOwlL,UAAP,EAAmB7gN,CAAnB,CAAD,CAAtC;AACD;;AAED0P,EAAAA,KAAK,CAACwpP,YAAN,GAAqB,UAAS36O,CAAT,EAAY;AAC/B,QAAI1kB,CAAC,GAAGwhC,KAAK,CAACpE,OAAN,CAAc1Y,CAAd,CAAR;AACA,WAAO1kB,CAAC,GAAG,CAAJ,GAAQ,CAACuyE,GAAD,EAAMA,GAAN,CAAR,GAAqB,CAC1BvyE,CAAC,GAAG,CAAJ,GAAQgnN,UAAU,CAAChnN,CAAC,GAAG,CAAL,CAAlB,GAA4Bo1M,MAAM,CAAC,CAAD,CADR,EAE1Bp1M,CAAC,GAAGgnN,UAAU,CAAC1nN,MAAf,GAAwB0nN,UAAU,CAAChnN,CAAD,CAAlC,GAAwCo1M,MAAM,CAACA,MAAM,CAAC91M,MAAP,GAAgB,CAAjB,CAFpB,CAA5B;AAID,GAND;;AAQAuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO81M,MAAM,CAAC/rM,KAAP,EAAP;AACvB+rM,IAAAA,MAAM,GAAG,EAAT;;AACA,SAAK,IAAIvoM,CAAT,IAAc8Z,CAAd,EAAiB,IAAI9Z,CAAC,IAAI,IAAL,IAAa,CAACjC,KAAK,CAACiC,CAAC,GAAG,CAACA,CAAN,CAAvB,EAAiCuoM,MAAM,CAACn1M,IAAP,CAAY4M,CAAZ;;AAClDuoM,IAAAA,MAAM,CAACprM,IAAP,CAAYovM,kBAAZ;AACA,WAAOgyC,OAAO,EAAd;AACD,GAND;;AAQAv1O,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkiC,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAR,EAAuBykO,OAAO,EAAlD,IAAwD5pN,KAAK,CAACn4B,KAAN,EAA/D;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIAhlJ,EAAAA,KAAK,CAACuyN,SAAN,GAAkB,YAAW;AAC3B,WAAOphB,UAAU,CAAC39M,KAAX,EAAP;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOwyI,QAAQ,GACVlS,MADE,CACKA,MADL,EAEF5zK,KAFE,CAEIA,KAFJ,EAGFq5H,OAHE,CAGMA,OAHN,CAAP;AAID,GALD;;AAOA,SAAO+vF,gBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB,CAAP;AACD;;;;;;;;;ACxDD;;AACA;;AACA;;AAEe,SAASu/P,QAAT,GAAoB;AACjC,MAAIj/C,EAAE,GAAG,CAAT;AAAA,MACI5tG,EAAE,GAAG,CADT;AAAA,MAEIvkG,CAAC,GAAG,CAFR;AAAA,MAGIknM,MAAM,GAAG,CAAC,GAAD,CAHb;AAAA,MAII5zK,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CAJZ;AAAA,MAKIq5H,OALJ;;AAOA,WAAShlJ,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAIA,CAAL,GAASq7B,KAAK,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,EAAkB,CAAlB,EAAqB+H,CAArB,CAAD,CAAd,GAA0C2sJ,OAAjD;AACD;;AAED,WAASuwF,OAAT,GAAmB;AACjB,QAAIprP,CAAC,GAAG,CAAC,CAAT;AACAo1M,IAAAA,MAAM,GAAG,IAAIt1M,KAAJ,CAAUoO,CAAV,CAAT;;AACA,WAAO,EAAElO,CAAF,GAAMkO,CAAb,EAAgBknM,MAAM,CAACp1M,CAAD,CAAN,GAAY,CAAC,CAACA,CAAC,GAAG,CAAL,IAAUyyG,EAAV,GAAe,CAACzyG,CAAC,GAAGkO,CAAL,IAAUmyM,EAA1B,KAAiCnyM,CAAC,GAAG,CAArC,CAAZ;;AAChB,WAAO2H,KAAP;AACD;;AAEDA,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB,CAAC+gN,EAAD,EAAK5tG,EAAL,IAAW9rF,CAAX,EAAc05L,EAAE,GAAG,CAACA,EAApB,EAAwB5tG,EAAE,GAAG,CAACA,EAA9B,EAAkC24I,OAAO,EAA7D,IAAmE,CAAC/qC,EAAD,EAAK5tG,EAAL,CAA1E;AACD,GAFD;;AAIA58F,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4O,CAAC,GAAG,CAACszB,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,EAAwBrnB,MAAxB,GAAiC,CAArC,EAAwC8rP,OAAO,EAAnE,IAAyE5pN,KAAK,CAACn4B,KAAN,EAAhF;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACwpP,YAAN,GAAqB,UAAS36O,CAAT,EAAY;AAC/B,QAAI1kB,CAAC,GAAGwhC,KAAK,CAACpE,OAAN,CAAc1Y,CAAd,CAAR;AACA,WAAO1kB,CAAC,GAAG,CAAJ,GAAQ,CAACuyE,GAAD,EAAMA,GAAN,CAAR,GACDvyE,CAAC,GAAG,CAAJ,GAAQ,CAACqgN,EAAD,EAAKjL,MAAM,CAAC,CAAD,CAAX,CAAR,GACAp1M,CAAC,IAAIkO,CAAL,GAAS,CAACknM,MAAM,CAAClnM,CAAC,GAAG,CAAL,CAAP,EAAgBukG,EAAhB,CAAT,GACA,CAAC2iG,MAAM,CAACp1M,CAAC,GAAG,CAAL,CAAP,EAAgBo1M,MAAM,CAACp1M,CAAD,CAAtB,CAHN;AAID,GAND;;AAQA6V,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CA,KAAjD;AACD,GAFD;;AAIAA,EAAAA,KAAK,CAACmxM,UAAN,GAAmB,YAAW;AAC5B,WAAO5R,MAAM,CAAC/rM,KAAP,EAAP;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOwqL,QAAQ,GACVlqD,MADE,CACK,CAACiL,EAAD,EAAK5tG,EAAL,CADL,EAEFjxE,KAFE,CAEIA,KAFJ,EAGFq5H,OAHE,CAGMA,OAHN,CAAP;AAID,GALD;;AAOA,SAAO+vF,gBAAUvqP,KAAV,CAAgB,uBAAUwV,KAAV,CAAhB,EAAkC9V,SAAlC,CAAP;AACD;;;;;;;;;ACvDD;;AACA;;AAEe,SAASqiG,SAAT,GAAqB;AAClC,MAAIgzG,MAAM,GAAG,CAAC,GAAD,CAAb;AAAA,MACI5zK,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CADZ;AAAA,MAEIq5H,OAFJ;AAAA,MAGI3sJ,CAAC,GAAG,CAHR;;AAKA,WAAS2H,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAIA,CAAL,GAASq7B,KAAK,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,EAAkB,CAAlB,EAAqB+H,CAArB,CAAD,CAAd,GAA0C2sJ,OAAjD;AACD;;AAEDhlJ,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB81M,MAAM,GAAGt1M,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,EAAwBzY,CAAC,GAAGnI,IAAI,CAACG,GAAL,CAASkvM,MAAM,CAAC91M,MAAhB,EAAwBkiC,KAAK,CAACliC,MAAN,GAAe,CAAvC,CAA5B,EAAuEuW,KAA3F,IAAoGu/L,MAAM,CAAC/rM,KAAP,EAA3G;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkiC,KAAK,GAAG1hC,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAR,EAAuBzY,CAAC,GAAGnI,IAAI,CAACG,GAAL,CAASkvM,MAAM,CAAC91M,MAAhB,EAAwBkiC,KAAK,CAACliC,MAAN,GAAe,CAAvC,CAA3B,EAAsEuW,KAA1F,IAAmG2rB,KAAK,CAACn4B,KAAN,EAA1G;AACD,GAFD;;AAIAwM,EAAAA,KAAK,CAACwpP,YAAN,GAAqB,UAAS36O,CAAT,EAAY;AAC/B,QAAI1kB,CAAC,GAAGwhC,KAAK,CAACpE,OAAN,CAAc1Y,CAAd,CAAR;AACA,WAAO,CAAC0wL,MAAM,CAACp1M,CAAC,GAAG,CAAL,CAAP,EAAgBo1M,MAAM,CAACp1M,CAAD,CAAtB,CAAP;AACD,GAHD;;AAKA6V,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIAhlJ,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOstB,SAAS,GACXgzG,MADE,CACKA,MADL,EAEF5zK,KAFE,CAEIA,KAFJ,EAGFq5H,OAHE,CAGMA,OAHN,CAAP;AAID,GALD;;AAOA,SAAO+vF,gBAAUvqP,KAAV,CAAgBwV,KAAhB,EAAuB9V,SAAvB,CAAP;AACD;;;;;;;;;;ACtCD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAIyrN,cAAc,GAAG,IAArB;AAAA,IACIC,cAAc,GAAGD,cAAc,GAAG,EADtC;AAAA,IAEIE,YAAY,GAAGD,cAAc,GAAG,EAFpC;AAAA,IAGIE,WAAW,GAAGD,YAAY,GAAG,EAHjC;AAAA,IAIIE,YAAY,GAAGD,WAAW,GAAG,CAJjC;AAAA,IAKIuI,aAAa,GAAGvI,WAAW,GAAG,EALlC;AAAA,IAMIwI,YAAY,GAAGxI,WAAW,GAAG,GANjC;;AAQA,SAASrV,IAAT,CAAc5yM,CAAd,EAAiB;AACf,SAAO,IAAIoyE,IAAJ,CAASpyE,CAAT,CAAP;AACD;;AAED,SAASs4M,MAAT,CAAgBt4M,CAAhB,EAAmB;AACjB,SAAOA,CAAC,YAAYoyE,IAAb,GAAoB,CAACpyE,CAArB,GAAyB,CAAC,IAAIoyE,IAAJ,CAAS,CAACpyE,CAAV,CAAjC;AACD;;AAEM,SAAS67P,QAAT,CAAkBriD,IAAlB,EAAwBuQ,KAAxB,EAA+B6D,IAA/B,EAAqCnF,GAArC,EAA0CD,IAA1C,EAAgDH,MAAhD,EAAwDF,MAAxD,EAAgEN,WAAhE,EAA6EhpG,MAA7E,EAAqF;AAC1F,MAAI1sG,KAAK,GAAG,0BAAZ;AAAA,MACI6nP,MAAM,GAAG7nP,KAAK,CAAC6nP,MADnB;AAAA,MAEItoD,MAAM,GAAGv/L,KAAK,CAACu/L,MAFnB;AAIA,MAAIoqD,iBAAiB,GAAGj9I,MAAM,CAAC,KAAD,CAA9B;AAAA,MACIk9I,YAAY,GAAGl9I,MAAM,CAAC,KAAD,CADzB;AAAA,MAEIm9I,YAAY,GAAGn9I,MAAM,CAAC,OAAD,CAFzB;AAAA,MAGIo9I,UAAU,GAAGp9I,MAAM,CAAC,OAAD,CAHvB;AAAA,MAIIq9I,SAAS,GAAGr9I,MAAM,CAAC,OAAD,CAJtB;AAAA,MAKIs9I,UAAU,GAAGt9I,MAAM,CAAC,OAAD,CALvB;AAAA,MAMIm0G,WAAW,GAAGn0G,MAAM,CAAC,IAAD,CANxB;AAAA,MAOI06F,UAAU,GAAG16F,MAAM,CAAC,IAAD,CAPvB;AASA,MAAIu9I,aAAa,GAAG,CAClB,CAACj0C,MAAD,EAAU,CAAV,EAAkBL,cAAlB,CADkB,EAElB,CAACK,MAAD,EAAU,CAAV,EAAc,IAAIL,cAAlB,CAFkB,EAGlB,CAACK,MAAD,EAAS,EAAT,EAAa,KAAKL,cAAlB,CAHkB,EAIlB,CAACK,MAAD,EAAS,EAAT,EAAa,KAAKL,cAAlB,CAJkB,EAKlB,CAACO,MAAD,EAAU,CAAV,EAAkBN,cAAlB,CALkB,EAMlB,CAACM,MAAD,EAAU,CAAV,EAAc,IAAIN,cAAlB,CANkB,EAOlB,CAACM,MAAD,EAAS,EAAT,EAAa,KAAKN,cAAlB,CAPkB,EAQlB,CAACM,MAAD,EAAS,EAAT,EAAa,KAAKN,cAAlB,CARkB,EASlB,CAAGS,IAAH,EAAU,CAAV,EAAkBR,YAAlB,CATkB,EAUlB,CAAGQ,IAAH,EAAU,CAAV,EAAc,IAAIR,YAAlB,CAVkB,EAWlB,CAAGQ,IAAH,EAAU,CAAV,EAAc,IAAIR,YAAlB,CAXkB,EAYlB,CAAGQ,IAAH,EAAS,EAAT,EAAa,KAAKR,YAAlB,CAZkB,EAalB,CAAIS,GAAJ,EAAU,CAAV,EAAkBR,WAAlB,CAbkB,EAclB,CAAIQ,GAAJ,EAAU,CAAV,EAAc,IAAIR,WAAlB,CAdkB,EAelB,CAAG2F,IAAH,EAAU,CAAV,EAAkB1F,YAAlB,CAfkB,EAgBlB,CAAE6B,KAAF,EAAU,CAAV,EAAkByG,aAAlB,CAhBkB,EAiBlB,CAAEzG,KAAF,EAAU,CAAV,EAAc,IAAIyG,aAAlB,CAjBkB,EAkBlB,CAAGhX,IAAH,EAAU,CAAV,EAAkBiX,YAAlB,CAlBkB,CAApB;;AAqBA,WAAS2pC,UAAT,CAAoBxnD,IAApB,EAA0B;AACxB,WAAO,CAACuV,MAAM,CAACvV,IAAD,CAAN,GAAeA,IAAf,GAAsBkpD,iBAAtB,GACFzzC,MAAM,CAACzV,IAAD,CAAN,GAAeA,IAAf,GAAsBmpD,YAAtB,GACAvzC,IAAI,CAAC5V,IAAD,CAAJ,GAAaA,IAAb,GAAoBopD,YAApB,GACAvzC,GAAG,CAAC7V,IAAD,CAAH,GAAYA,IAAZ,GAAmBqpD,UAAnB,GACAlyC,KAAK,CAACnX,IAAD,CAAL,GAAcA,IAAd,GAAsBgb,IAAI,CAAChb,IAAD,CAAJ,GAAaA,IAAb,GAAoBspD,SAApB,GAAgCC,UAAtD,GACA3iD,IAAI,CAAC5G,IAAD,CAAJ,GAAaA,IAAb,GAAoBogB,WAApB,GACAzZ,UANC,EAMW3G,IANX,CAAP;AAOD;;AAED,WAASypD,YAAT,CAAsB10C,QAAtB,EAAgCv/M,KAAhC,EAAuCy1B,IAAvC,EAA6C;AAC3C,QAAI8pL,QAAQ,IAAI,IAAhB,EAAsBA,QAAQ,GAAG,EAAX,CADqB,CAG3C;AACA;AACA;;AACA,QAAI,OAAOA,QAAP,KAAoB,QAAxB,EAAkC;AAChC,UAAI90K,MAAM,GAAGxwC,IAAI,CAACiT,GAAL,CAASuoB,IAAI,GAAGz1B,KAAhB,IAAyBu/M,QAAtC;AAAA,UACIrrN,CAAC,GAAG,uBAAS,UAASA,CAAT,EAAY;AAAE,eAAOA,CAAC,CAAC,CAAD,CAAR;AAAc,OAArC,EAAuCozC,KAAvC,CAA6C0sN,aAA7C,EAA4DvpN,MAA5D,CADR;AAAA,UAEI77B,IAFJ;;AAGA,UAAI1a,CAAC,KAAK8/P,aAAa,CAACxgQ,MAAxB,EAAgC;AAC9Bob,QAAAA,IAAI,GAAG,uBAAS5O,KAAK,GAAGqoN,YAAjB,EAA+B5yL,IAAI,GAAG4yL,YAAtC,EAAoD9I,QAApD,CAAP;AACAA,QAAAA,QAAQ,GAAGnO,IAAX;AACD,OAHD,MAGO,IAAIl9M,CAAJ,EAAO;AACZA,QAAAA,CAAC,GAAG8/P,aAAa,CAACvpN,MAAM,GAAGupN,aAAa,CAAC9/P,CAAC,GAAG,CAAL,CAAb,CAAqB,CAArB,CAAT,GAAmC8/P,aAAa,CAAC9/P,CAAD,CAAb,CAAiB,CAAjB,IAAsBu2C,MAAzD,GAAkEv2C,CAAC,GAAG,CAAtE,GAA0EA,CAA3E,CAAjB;AACA0a,QAAAA,IAAI,GAAG1a,CAAC,CAAC,CAAD,CAAR;AACAqrN,QAAAA,QAAQ,GAAGrrN,CAAC,CAAC,CAAD,CAAZ;AACD,OAJM,MAIA;AACL0a,QAAAA,IAAI,GAAG3U,IAAI,CAACK,GAAL,CAAS,uBAAS0F,KAAT,EAAgBy1B,IAAhB,EAAsB8pL,QAAtB,CAAT,EAA0C,CAA1C,CAAP;AACAA,QAAAA,QAAQ,GAAGE,WAAX;AACD;;AACD,aAAOF,QAAQ,CAAC3hN,KAAT,CAAegR,IAAf,CAAP;AACD;;AAED,WAAO2wM,QAAP;AACD;;AAEDx1M,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAASh5O,CAAT,EAAY;AACzB,WAAO,IAAIoxD,IAAJ,CAAS4nL,MAAM,CAACh5O,CAAD,CAAf,CAAP;AACD,GAFD;;AAIA7O,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,GAAmB81M,MAAM,CAACt1M,KAAK,CAACuR,IAAN,CAAWsV,CAAX,EAAcq1L,MAAd,CAAD,CAAzB,GAAmD5G,MAAM,GAAG3rM,GAAT,CAAa6sM,IAAb,CAA1D;AACD,GAFD;;AAIAzgM,EAAAA,KAAK,CAACmwM,KAAN,GAAc,UAASqF,QAAT,EAAmB;AAC/B,QAAIx+M,CAAC,GAAGuoM,MAAM,EAAd;AAAA,QACI6V,EAAE,GAAGp+M,CAAC,CAAC,CAAD,CADV;AAAA,QAEI85E,EAAE,GAAG95E,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAFV;AAAA,QAGI0O,CAAC,GAAG24E,EAAE,GAAGskI,EAHb;AAAA,QAIIvnN,CAJJ;AAKA,QAAIsK,CAAJ,EAAOtK,CAAC,GAAGunN,EAAJ,EAAQA,EAAE,GAAGtkI,EAAb,EAAiBA,EAAE,GAAGjjF,CAAtB;AACPA,IAAAA,CAAC,GAAGq8P,YAAY,CAAC10C,QAAD,EAAWJ,EAAX,EAAetkI,EAAf,CAAhB;AACAjjF,IAAAA,CAAC,GAAGA,CAAC,GAAGA,CAAC,CAAC89B,KAAF,CAAQypL,EAAR,EAAYtkI,EAAE,GAAG,CAAjB,CAAH,GAAyB,EAA9B,CAR+B,CAQG;;AAClC,WAAO34E,CAAC,GAAGtK,CAAC,CAAC+Q,OAAF,EAAH,GAAiB/Q,CAAzB;AACD,GAVD;;AAYAmS,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAS/lL,KAAT,EAAgBsxI,SAAhB,EAA2B;AAC5C,WAAOA,SAAS,IAAI,IAAb,GAAoBy0C,UAApB,GAAiCv7I,MAAM,CAAC8mG,SAAD,CAA9C;AACD,GAFD;;AAIAxzM,EAAAA,KAAK,CAAC0wM,IAAN,GAAa,UAAS8E,QAAT,EAAmB;AAC9B,QAAIx+M,CAAC,GAAGuoM,MAAM,EAAd;AACA,WAAO,CAACiW,QAAQ,GAAG00C,YAAY,CAAC10C,QAAD,EAAWx+M,CAAC,CAAC,CAAD,CAAZ,EAAiBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAlB,CAAxB,IACD81M,MAAM,CAAC,mBAAKvoM,CAAL,EAAQw+M,QAAR,CAAD,CADL,GAEDx1M,KAFN;AAGD,GALD;;AAOAA,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY0pP,QAAQ,CAACriD,IAAD,EAAOuQ,KAAP,EAAc6D,IAAd,EAAoBnF,GAApB,EAAyBD,IAAzB,EAA+BH,MAA/B,EAAuCF,MAAvC,EAA+CN,WAA/C,EAA4DhpG,MAA5D,CAApB,CAAP;AACD,GAFD;;AAIA,SAAO1sG,KAAP;AACD;;AAEc,SAAS9G,IAAT,GAAgB;AAC7B,SAAO67O,gBAAUvqP,KAAV,CAAgBk/P,QAAQ,CAACrsC,gBAAD,EAAWC,iBAAX,EAAsB1B,gBAAtB,EAAgCD,eAAhC,EAAyC4B,gBAAzC,EAAmDC,kBAAnD,EAA+DC,kBAA/D,EAA2EC,uBAA3E,EAA4FsJ,wBAA5F,CAAR,CAAgHznB,MAAhH,CAAuH,CAAC,IAAIt/H,IAAJ,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAD,EAAuB,IAAIA,IAAJ,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAvB,CAAvH,CAAhB,EAAsL/1E,SAAtL,CAAP;AACD;;;;;;;;;ACvID;;AACA;;AACA;;AACA;;AAEe,SAASigQ,OAAT,GAAmB;AAChC,SAAOpV,gBAAUvqP,KAAV,CAAgB,oBAASuvN,eAAT,EAAkBH,gBAAlB,EAA4B0C,eAA5B,EAAqC9D,cAArC,EAA6CH,eAA7C,EAAsDH,iBAAtD,EAAiE0F,iBAAjE,EAA4EC,sBAA5E,EAA4FwI,uBAA5F,EAAuG9mB,MAAvG,CAA8G,CAACt/H,IAAI,CAACo8I,GAAL,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAD,EAAuBp8I,IAAI,CAACo8I,GAAL,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAvB,CAA9G,CAAhB,EAA6KnyN,SAA7K,CAAP;AACD;;;;;;;;;;;;;;ACPD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASw9P,WAAT,GAAuB;AACrB,MAAIl9C,EAAE,GAAG,CAAT;AAAA,MACI5tG,EAAE,GAAG,CADT;AAAA,MAEIw4G,EAFJ;AAAA,MAGItkI,EAHJ;AAAA,MAIIs5K,GAJJ;AAAA,MAKIh3E,SALJ;AAAA,MAMI6hE,YAAY,GAAG7qH,oBANnB;AAAA,MAOIh6H,KAAK,GAAG,KAPZ;AAAA,MAQI40J,OARJ;;AAUA,WAAShlJ,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,GAAgB00J,OAAhB,GAA0BiwF,YAAY,CAACmV,GAAG,KAAK,CAAR,GAAY,GAAZ,IAAmB95P,CAAC,GAAG,CAAC8iL,SAAS,CAAC9iL,CAAD,CAAT,GAAe8kN,EAAhB,IAAsBg1C,GAA1B,EAA+Bh6P,KAAK,GAAGF,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYC,CAAZ,CAAZ,CAAH,GAAiCA,CAAxF,CAAD,CAA7C;AACD;;AAED0P,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB,CAAC+gN,EAAD,EAAK5tG,EAAL,IAAW9rF,CAAX,EAAcskM,EAAE,GAAGhiC,SAAS,CAACo3B,EAAE,GAAG,CAACA,EAAP,CAA5B,EAAwC15H,EAAE,GAAGsiG,SAAS,CAACx2E,EAAE,GAAG,CAACA,EAAP,CAAtD,EAAkEwtJ,GAAG,GAAGh1C,EAAE,KAAKtkI,EAAP,GAAY,CAAZ,GAAgB,KAAKA,EAAE,GAAGskI,EAAV,CAAxF,EAAuGp1M,KAA3H,IAAoI,CAACwqM,EAAD,EAAK5tG,EAAL,CAA3I;AACD,GAFD;;AAIA58F,EAAAA,KAAK,CAAC5P,KAAN,GAAc,UAAS0gB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2G,KAAK,GAAG,CAAC,CAAC0gB,CAAV,EAAa9Q,KAAjC,IAA0C5P,KAAjD;AACD,GAFD;;AAIA4P,EAAAA,KAAK,CAACi1O,YAAN,GAAqB,UAASnkO,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBwrP,YAAY,GAAGnkO,CAAf,EAAkB9Q,KAAtC,IAA+Ci1O,YAAtD;AACD,GAFD;;AAIA,WAAStpN,KAAT,CAAe27N,WAAf,EAA4B;AAC1B,WAAO,UAASx2O,CAAT,EAAY;AACjB,UAAIixL,EAAJ,EAAQxF,EAAR;AACA,aAAOryM,SAAS,CAACT,MAAV,IAAoB,CAACs4M,EAAD,EAAKxF,EAAL,IAAWzrL,CAAX,EAAcmkO,YAAY,GAAGqS,WAAW,CAACvlD,EAAD,EAAKxF,EAAL,CAAxC,EAAkDv8L,KAAtE,IAA+E,CAACi1O,YAAY,CAAC,CAAD,CAAb,EAAkBA,YAAY,CAAC,CAAD,CAA9B,CAAtF;AACD,KAHD;AAID;;AAEDj1O,EAAAA,KAAK,CAAC2rB,KAAN,GAAcA,KAAK,CAAC27N,0BAAD,CAAnB;AAEAtnP,EAAAA,KAAK,CAACw1O,UAAN,GAAmB7pN,KAAK,CAACo8N,+BAAD,CAAxB;;AAEA/nP,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIA,SAAO,UAASn3J,CAAT,EAAY;AACjBulL,IAAAA,SAAS,GAAGvlL,CAAZ,EAAeunN,EAAE,GAAGvnN,CAAC,CAAC28M,EAAD,CAArB,EAA2B15H,EAAE,GAAGjjF,CAAC,CAAC+uG,EAAD,CAAjC,EAAuCwtJ,GAAG,GAAGh1C,EAAE,KAAKtkI,EAAP,GAAY,CAAZ,GAAgB,KAAKA,EAAE,GAAGskI,EAAV,CAA7D;AACA,WAAOp1M,KAAP;AACD,GAHD;AAID;;AAEM,SAASi/D,IAAT,CAAchf,MAAd,EAAsBvf,MAAtB,EAA8B;AACnC,SAAOA,MAAM,CACR6+J,MADE,CACKt/I,MAAM,CAACs/I,MAAP,EADL,EAEF01C,YAFE,CAEWh1L,MAAM,CAACg1L,YAAP,EAFX,EAGF7kP,KAHE,CAGI6vD,MAAM,CAAC7vD,KAAP,EAHJ,EAIF40J,OAJE,CAIM/kG,MAAM,CAAC+kG,OAAP,EAJN,CAAP;AAKD;;AAEc,SAAS7J,UAAT,GAAsB;AACnC,MAAIn7I,KAAK,GAAG,uBAAU0nP,WAAW,GAAGt9H,oBAAH,CAArB,CAAZ;;AAEApqH,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAI,CAACj/D,KAAD,EAAQm7I,UAAU,EAAlB,CAAX;AACD,GAFD;;AAIA,SAAO65F,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAASmgQ,aAAT,GAAyB;AAC9B,MAAIrqP,KAAK,GAAG,kBAAQ0nP,WAAW,EAAnB,EAAuBnoD,MAAvB,CAA8B,CAAC,CAAD,EAAI,EAAJ,CAA9B,CAAZ;;AAEAv/L,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAI,CAACj/D,KAAD,EAAQqqP,aAAa,EAArB,CAAJ,CAA6Bl1N,IAA7B,CAAkCn1B,KAAK,CAACm1B,IAAN,EAAlC,CAAP;AACD,GAFD;;AAIA,SAAO6/M,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAASogQ,gBAAT,GAA4B;AACjC,MAAItqP,KAAK,GAAG,uBAAU0nP,WAAW,EAArB,CAAZ;;AAEA1nP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAI,CAACj/D,KAAD,EAAQsqP,gBAAgB,EAAxB,CAAJ,CAAgCvgI,QAAhC,CAAyC/pH,KAAK,CAAC+pH,QAAN,EAAzC,CAAP;AACD,GAFD;;AAIA,SAAOirH,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAASqgQ,aAAT,GAAyB;AAC9B,MAAIvqP,KAAK,GAAG,iBAAO0nP,WAAW,EAAlB,CAAZ;;AAEA1nP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAI,CAACj/D,KAAD,EAAQuqP,aAAa,EAArB,CAAJ,CAA6BlqN,QAA7B,CAAsCrgC,KAAK,CAACqgC,QAAN,EAAtC,CAAP;AACD,GAFD;;AAIA,SAAO20M,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAASsgQ,cAAT,GAA0B;AAC/B,SAAOD,aAAa,CAAC//P,KAAd,CAAoB,IAApB,EAA0BN,SAA1B,EAAqCm2C,QAArC,CAA8C,GAA9C,CAAP;AACD;;;;;;;;;AC1GD;;AACA;;AACA;;AAEe,SAASoqN,kBAAT,GAA8B;AAC3C,MAAIlrD,MAAM,GAAG,EAAb;AAAA,MACI01C,YAAY,GAAG7qH,oBADnB;;AAGA,WAASpqH,KAAT,CAAe1P,CAAf,EAAkB;AAChB,QAAI,CAACyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAV,EAAoB,OAAO2kP,YAAY,CAAC,CAAC,qBAAO11C,MAAP,EAAejvM,CAAf,EAAkB,CAAlB,IAAuB,CAAxB,KAA8BivM,MAAM,CAAC91M,MAAP,GAAgB,CAA9C,CAAD,CAAnB;AACrB;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO81M,MAAM,CAAC/rM,KAAP,EAAP;AACvB+rM,IAAAA,MAAM,GAAG,EAAT;;AACA,SAAK,IAAIvoM,CAAT,IAAc8Z,CAAd,EAAiB,IAAI9Z,CAAC,IAAI,IAAL,IAAa,CAACjC,KAAK,CAACiC,CAAC,GAAG,CAACA,CAAN,CAAvB,EAAiCuoM,MAAM,CAACn1M,IAAP,CAAY4M,CAAZ;;AAClDuoM,IAAAA,MAAM,CAACprM,IAAP,CAAYovM,kBAAZ;AACA,WAAOvjM,KAAP;AACD,GAND;;AAQAA,EAAAA,KAAK,CAACi1O,YAAN,GAAqB,UAASnkO,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBwrP,YAAY,GAAGnkO,CAAf,EAAkB9Q,KAAtC,IAA+Ci1O,YAAtD;AACD,GAFD;;AAIAj1O,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,YAAW;AACvB,WAAO4zK,MAAM,CAAC3rM,GAAP,CAAW,CAACoD,CAAD,EAAI7M,CAAJ,KAAU8qP,YAAY,CAAC9qP,CAAC,IAAIo1M,MAAM,CAAC91M,MAAP,GAAgB,CAApB,CAAF,CAAjC,CAAP;AACD,GAFD;;AAIAuW,EAAAA,KAAK,CAACuyN,SAAN,GAAkB,UAASl6N,CAAT,EAAY;AAC5B,WAAOpO,KAAK,CAACuR,IAAN,CAAW;AAAC/R,MAAAA,MAAM,EAAE4O,CAAC,GAAG;AAAb,KAAX,EAA4B,CAACyY,CAAD,EAAI3mB,CAAJ,KAAU,uBAASo1M,MAAT,EAAiBp1M,CAAC,GAAGkO,CAArB,CAAtC,CAAP;AACD,GAFD;;AAIA2H,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOwrL,kBAAkB,CAACxV,YAAD,CAAlB,CAAiC11C,MAAjC,CAAwCA,MAAxC,CAAP;AACD,GAFD;;AAIA,SAAOy1C,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;;;;;;;;;;;;ACrCD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASw9P,WAAT,GAAuB;AACrB,MAAIl9C,EAAE,GAAG,CAAT;AAAA,MACI5tG,EAAE,GAAG,GADT;AAAA,MAEI3zB,EAAE,GAAG,CAFT;AAAA,MAGIt7E,CAAC,GAAG,CAHR;AAAA,MAIIynN,EAJJ;AAAA,MAKItkI,EALJ;AAAA,MAMIC,EANJ;AAAA,MAOIq5K,GAPJ;AAAA,MAQIM,GARJ;AAAA,MASIzV,YAAY,GAAG7qH,oBATnB;AAAA,MAUIgpD,SAVJ;AAAA,MAWIhjL,KAAK,GAAG,KAXZ;AAAA,MAYI40J,OAZJ;;AAcA,WAAShlJ,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOyE,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,GAAgB00J,OAAhB,IAA2B10J,CAAC,GAAG,MAAM,CAAC,CAACA,CAAC,GAAG,CAAC8iL,SAAS,CAAC9iL,CAAD,CAAf,IAAsBwgF,EAAvB,KAA8BnjF,CAAC,GAAG2C,CAAJ,GAAQ3C,CAAC,GAAGmjF,EAAZ,GAAiBs5K,GAAjB,GAAuBM,GAArD,CAAV,EAAqEzV,YAAY,CAAC7kP,KAAK,GAAGF,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYC,CAAZ,CAAZ,CAAH,GAAiCA,CAAvC,CAA5G,CAAP;AACD;;AAED0P,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB,CAAC+gN,EAAD,EAAK5tG,EAAL,EAAS3zB,EAAT,IAAen4D,CAAf,EAAkBskM,EAAE,GAAGhiC,SAAS,CAACo3B,EAAE,GAAG,CAACA,EAAP,CAAhC,EAA4C15H,EAAE,GAAGsiG,SAAS,CAACx2E,EAAE,GAAG,CAACA,EAAP,CAA1D,EAAsE7rB,EAAE,GAAGqiG,SAAS,CAACnqG,EAAE,GAAG,CAACA,EAAP,CAApF,EAAgGmhL,GAAG,GAAGh1C,EAAE,KAAKtkI,EAAP,GAAY,CAAZ,GAAgB,OAAOA,EAAE,GAAGskI,EAAZ,CAAtH,EAAuIs1C,GAAG,GAAG55K,EAAE,KAAKC,EAAP,GAAY,CAAZ,GAAgB,OAAOA,EAAE,GAAGD,EAAZ,CAA7J,EAA8KnjF,CAAC,GAAGmjF,EAAE,GAAGskI,EAAL,GAAU,CAAC,CAAX,GAAe,CAAjM,EAAoMp1M,KAAxN,IAAiO,CAACwqM,EAAD,EAAK5tG,EAAL,EAAS3zB,EAAT,CAAxO;AACD,GAFD;;AAIAjpE,EAAAA,KAAK,CAAC5P,KAAN,GAAc,UAAS0gB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2G,KAAK,GAAG,CAAC,CAAC0gB,CAAV,EAAa9Q,KAAjC,IAA0C5P,KAAjD;AACD,GAFD;;AAIA4P,EAAAA,KAAK,CAACi1O,YAAN,GAAqB,UAASnkO,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBwrP,YAAY,GAAGnkO,CAAf,EAAkB9Q,KAAtC,IAA+Ci1O,YAAtD;AACD,GAFD;;AAIA,WAAStpN,KAAT,CAAe27N,WAAf,EAA4B;AAC1B,WAAO,UAASx2O,CAAT,EAAY;AACjB,UAAIixL,EAAJ,EAAQxF,EAAR,EAAYC,EAAZ;AACA,aAAOtyM,SAAS,CAACT,MAAV,IAAoB,CAACs4M,EAAD,EAAKxF,EAAL,EAASC,EAAT,IAAe1rL,CAAf,EAAkBmkO,YAAY,GAAG,8BAAUqS,WAAV,EAAuB,CAACvlD,EAAD,EAAKxF,EAAL,EAASC,EAAT,CAAvB,CAAjC,EAAuEx8L,KAA3F,IAAoG,CAACi1O,YAAY,CAAC,CAAD,CAAb,EAAkBA,YAAY,CAAC,GAAD,CAA9B,EAAqCA,YAAY,CAAC,CAAD,CAAjD,CAA3G;AACD,KAHD;AAID;;AAEDj1O,EAAAA,KAAK,CAAC2rB,KAAN,GAAcA,KAAK,CAAC27N,0BAAD,CAAnB;AAEAtnP,EAAAA,KAAK,CAACw1O,UAAN,GAAmB7pN,KAAK,CAACo8N,+BAAD,CAAxB;;AAEA/nP,EAAAA,KAAK,CAACglJ,OAAN,GAAgB,UAASl0I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu7J,OAAO,GAAGl0I,CAAV,EAAa9Q,KAAjC,IAA0CglJ,OAAjD;AACD,GAFD;;AAIA,SAAO,UAASn3J,CAAT,EAAY;AACjBulL,IAAAA,SAAS,GAAGvlL,CAAZ,EAAeunN,EAAE,GAAGvnN,CAAC,CAAC28M,EAAD,CAArB,EAA2B15H,EAAE,GAAGjjF,CAAC,CAAC+uG,EAAD,CAAjC,EAAuC7rB,EAAE,GAAGljF,CAAC,CAACo7E,EAAD,CAA7C,EAAmDmhL,GAAG,GAAGh1C,EAAE,KAAKtkI,EAAP,GAAY,CAAZ,GAAgB,OAAOA,EAAE,GAAGskI,EAAZ,CAAzE,EAA0Fs1C,GAAG,GAAG55K,EAAE,KAAKC,EAAP,GAAY,CAAZ,GAAgB,OAAOA,EAAE,GAAGD,EAAZ,CAAhH,EAAiInjF,CAAC,GAAGmjF,EAAE,GAAGskI,EAAL,GAAU,CAAC,CAAX,GAAe,CAApJ;AACA,WAAOp1M,KAAP;AACD,GAHD;AAID;;AAEc,SAAS2qP,SAAT,GAAqB;AAClC,MAAI3qP,KAAK,GAAG,uBAAU0nP,WAAW,GAAGt9H,oBAAH,CAArB,CAAZ;;AAEApqH,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY2qP,SAAS,EAArB,CAAP;AACD,GAFD;;AAIA,SAAO3V,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAAS0gQ,YAAT,GAAwB;AAC7B,MAAI5qP,KAAK,GAAG,kBAAQ0nP,WAAW,EAAnB,EAAuBnoD,MAAvB,CAA8B,CAAC,GAAD,EAAM,CAAN,EAAS,EAAT,CAA9B,CAAZ;;AAEAv/L,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY4qP,YAAY,EAAxB,EAA4Bz1N,IAA5B,CAAiCn1B,KAAK,CAACm1B,IAAN,EAAjC,CAAP;AACD,GAFD;;AAIA,SAAO6/M,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAAS2gQ,eAAT,GAA2B;AAChC,MAAI7qP,KAAK,GAAG,uBAAU0nP,WAAW,EAArB,CAAZ;;AAEA1nP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY6qP,eAAe,EAA3B,EAA+B9gI,QAA/B,CAAwC/pH,KAAK,CAAC+pH,QAAN,EAAxC,CAAP;AACD,GAFD;;AAIA,SAAOirH,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAAS4gQ,YAAT,GAAwB;AAC7B,MAAI9qP,KAAK,GAAG,iBAAO0nP,WAAW,EAAlB,CAAZ;;AAEA1nP,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO,sBAAKj/D,KAAL,EAAY8qP,YAAY,EAAxB,EAA4BzqN,QAA5B,CAAqCrgC,KAAK,CAACqgC,QAAN,EAArC,CAAP;AACD,GAFD;;AAIA,SAAO20M,uBAAiBxqP,KAAjB,CAAuBwV,KAAvB,EAA8B9V,SAA9B,CAAP;AACD;;AAEM,SAAS6gQ,aAAT,GAAyB;AAC9B,SAAOD,YAAY,CAACtgQ,KAAb,CAAmB,IAAnB,EAAyBN,SAAzB,EAAoCm2C,QAApC,CAA6C,GAA7C,CAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvGD;;AAKA;;AAIA;;AAIA;;AAIA;;AAIA;;AAKA;;AAKA;;AAIA;;AAIA;;AAIA;;AAIA;;AAIA;;AAIA;;AAQA;;AAIA;;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3EA;;AACA;;AACA;;AAEA;;AAEA;;;;;;AAEA,SAAS2qN,SAAT,CAAoB9oL,KAApB,EAA2BmzK,YAA3B,EAAyCC,YAAzC,EAAuD;AACrD,QAAMl0F,KAAK,GAAGl/E,KAAK,GAAGmzK,YAAR,GAAuBC,YAAY,GAAG,CAApD;AACA,SAAOpzK,KAAK,GAAGk/E,KAAK,GAAG,CAAR,GAAYA,KAAZ,GAAoB,CAAvB,GAA2B,CAAvC;AACD;;AAED,MAAM9wH,QAAQ,GAAG,UAAjB;;AACA,MAAMwrH,MAAM,GAAG,QAAf;;AACA,MAAMmvG,GAAG,GAAG,KAAZ;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMhvC,GAAG,GAAG,KAAZ;;AACA,MAAMjiE,UAAU,GAAG,YAAnB;;AACA,MAAMkxG,SAAS,GAAG,WAAlB;;AACA,MAAMlnB,QAAQ,GAAG,UAAjB;;AACA,MAAMmnB,QAAQ,GAAG,UAAjB;;AACA,MAAMC,SAAS,GAAG,WAAlB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,UAAU,GAAG,aAAnB,EAAkC;;;AAElC,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,QAAQ,GAAG,UAAjB;AACA,MAAMC,YAAY,GAAG,cAArB;AACA,MAAMC,aAAa,GAAG,eAAtB;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AAEA,SAASC,WAAT,CAAsBlsP,KAAtB,EAA6B;AAC3B,SAAO,UAAU8Q,CAAV,EAAa;AAClB,QAAI+vL,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIjjB,CAFJ;;AAIA,QAAIizM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,WAAO,CAACmS,KAAK,CAAC6nP,MAAN,CAAahnD,EAAb,CAAD,EAAmB7gM,KAAK,CAAC6nP,MAAN,CAAa/mD,EAAb,CAAnB,CAAP;AACD,GAZD;AAaD;;AAED,SAASqrD,iBAAT,CAA4BnsP,KAA5B,EAAmC;AACjC,SAAO,UAAU8Q,CAAV,EAAa;AAClB,UAAM6a,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAd;AACA,QAAIk1K,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIzgB,GAAG,GAAG,CAAC,CAFX;AAAA,QAGIE,GAHJ;AAAA,QAII1C,CAJJ;AAAA,QAKI1D,CALJ;AAAA,QAMIkO,CANJ;;AAQA,QAAIyoM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,SAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGszB,KAAK,CAACliC,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,UAAIwhC,KAAK,CAACxhC,CAAD,CAAL,IAAY02M,EAAZ,IAAkBl1K,KAAK,CAACxhC,CAAD,CAAL,IAAY22M,EAAlC,EAAsC;AACpC,YAAIzwM,GAAG,GAAG,CAAV,EAAaA,GAAG,GAAGlG,CAAN;AACboG,QAAAA,GAAG,GAAGpG,CAAN;AACD;AACF;;AAED,QAAIkG,GAAG,GAAG,CAAV,EAAa,OAAOgvH,SAAP;AACbwhF,IAAAA,EAAE,GAAG7gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACt7B,GAAD,CAAxB,CAAL;AACAywM,IAAAA,EAAE,GAAG9gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACp7B,GAAD,CAAxB,CAAL;AACA,WAAO,CAACswM,EAAE,CAAC,CAAD,CAAF,KAAUxhF,SAAV,GAAsBwhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAjC,EAAsCC,EAAE,CAAC,CAAD,CAAF,KAAUzhF,SAAV,GAAsByhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAtE,CAAP;AACD,GA3BD;AA4BD;;AAED,SAASg9B,IAAT,GAAgB;AACd,QAAM99N,KAAK,GAAG,6BAAeglJ,OAAf,CAAuB3lC,SAAvB,CAAd;AAAA,QACMkgF,MAAM,GAAGv/L,KAAK,CAACu/L,MADrB;AAAA,QAEM61C,YAAY,GAAGp1O,KAAK,CAAC2rB,KAF3B;AAGA,MAAIygO,OAAO,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAd;AAAA,MACIvnP,IADJ;AAAA,MAEI4vN,SAFJ;AAAA,MAGIj+N,KAAK,GAAG,KAHZ;AAAA,MAII6+O,YAAY,GAAG,CAJnB;AAAA,MAKIC,YAAY,GAAG,CALnB;AAAA,MAMI5yC,KAAK,GAAG,GANZ;AAOA,SAAO1iM,KAAK,CAACglJ,OAAb;;AAEA,WAASuwF,OAAT,GAAmB;AACjB,UAAMl9O,CAAC,GAAGknM,MAAM,GAAG91M,MAAnB;AAAA,UACMmV,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CADpC;AAAA,UAEM1gO,IAAI,GAAG0gO,OAAO,CAAC,IAAIxtP,OAAL,CAFpB;AAAA,UAGMwiJ,KAAK,GAAG4pG,SAAS,CAAC3yP,CAAD,EAAIg9O,YAAJ,EAAkBC,YAAlB,CAHvB;AAIA,QAAIr/O,KAAK,GAAGm2P,OAAO,CAACxtP,OAAO,GAAG,CAAX,CAAnB;AACAiG,IAAAA,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,KAAkBmrJ,KAAK,IAAI,CAA3B,CAAP;;AAEA,QAAI5qJ,KAAJ,EAAW;AACTqO,MAAAA,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACD;;AAED5O,IAAAA,KAAK,IAAI,CAACy1B,IAAI,GAAGz1B,KAAP,GAAe4O,IAAI,IAAIxM,CAAC,GAAGg9O,YAAR,CAApB,IAA6C3yC,KAAtD;AACA+xB,IAAAA,SAAS,GAAG5vN,IAAI,IAAI,IAAIwwO,YAAR,CAAhB;;AAEA,QAAI7+O,KAAJ,EAAW;AACTP,MAAAA,KAAK,GAAG/F,IAAI,CAACsG,KAAL,CAAWP,KAAX,CAAR;AACAw+N,MAAAA,SAAS,GAAGvkO,IAAI,CAACsG,KAAL,CAAWi+N,SAAX,CAAZ;AACD;;AAED,UAAMlgO,MAAM,GAAG,oBAAM8D,CAAN,EAASzE,GAAT,CAAazJ,CAAC,IAAI8L,KAAK,GAAG4O,IAAI,GAAG1a,CAAjC,CAAf;AACA,WAAOirP,YAAY,CAACx2O,OAAO,GAAGrK,MAAM,CAACqK,OAAP,EAAH,GAAsBrK,MAA9B,CAAnB;AACD;;AAEDyL,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,CAACzuL,CAAD,CAAN;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOh2C,MAAM,EAAb;AACD;AACF,GAPD;;AASAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB2iQ,MAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO6W,OAAO,CAAC54P,KAAR,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAU1kO,CAAV,EAAa;AAC9Bs7O,IAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACAta,IAAAA,KAAK,GAAG,IAAR;AACA,WAAO++O,OAAO,EAAd;AACD,GAJD;;AAMAv1O,EAAAA,KAAK,CAACy0N,SAAN,GAAkB,YAAY;AAC5B,WAAOA,SAAP;AACD,GAFD;;AAIAz0N,EAAAA,KAAK,CAAC6E,IAAN,GAAa,YAAY;AACvB,WAAOA,IAAP;AACD,GAFD;;AAIA7E,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAAUsa,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB+M,MAAAA,KAAK,GAAG,CAAC,CAACsa,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO/+O,KAAP;AACD;AACF,GAPD;;AASAwJ,EAAAA,KAAK,CAAC4G,OAAN,GAAgB,UAAUkK,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACAukO,MAAAA,YAAY,GAAGC,YAAf;AACA,aAAOC,OAAO,EAAd;AACD,KAJD,MAIO;AACL,aAAOF,YAAP;AACD;AACF,GARD;;AAUAr1O,EAAAA,KAAK,CAACq1O,YAAN,GAAqB,UAAUvkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4rP,MAAAA,YAAY,GAAGnlP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOF,YAAP;AACD;AACF,GAPD;;AASAr1O,EAAAA,KAAK,CAACs1O,YAAN,GAAqB,UAAUxkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOD,YAAP;AACD;AACF,GAPD;;AASAt1O,EAAAA,KAAK,CAAC0iM,KAAN,GAAc,UAAU5xL,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBi5M,MAAAA,KAAK,GAAGxyM,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAR;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO7yC,KAAP;AACD;AACF,GAPD;;AASA1iM,EAAAA,KAAK,CAACksP,WAAN,GAAoB,UAAUp7O,CAAV,EAAa;AAC/B;AACA,QAAIA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAA5B,EAAkC;AAClC,UAAMlS,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CAApC;AAAA,UACM73P,MAAM,GAAGqK,OAAO,GAAGw2O,YAAY,GAAGx2O,OAAf,EAAH,GAA8Bw2O,YAAY,EADhE;AAAA,UAEM/8O,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAF1B;AAGA,QAAIo3M,EAAE,GAAG,CAAC/vL,CAAC,CAAC,CAAD,CAAX;AAAA,QACIgwL,EAAE,GAAG,CAAChwL,CAAC,CAAC,CAAD,CADX;AAAA,QAEIzf,CAFJ;AAAA,QAGI6G,CAHJ;AAAA,QAIIrK,CAJJ,CAN+B,CAUxB;;AAEP,QAAIgzM,EAAE,KAAKA,EAAP,IAAaC,EAAE,KAAKA,EAAxB,EAA4B,OAZG,CAYK;;AAEpC,QAAIA,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,QAAIizM,EAAE,GAAGvsM,MAAM,CAAC,CAAD,CAAX,IAAkBssM,EAAE,GAAGurD,OAAO,CAAC,IAAIxtP,OAAL,CAAlC,EAAiD,OApBlB,CAoB0B;;AAEzDvN,IAAAA,CAAC,GAAGnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,0BAAYgE,MAAZ,EAAoBssM,EAApB,IAA0B,CAAtC,CAAJ;AACA3oM,IAAAA,CAAC,GAAG2oM,EAAE,KAAKC,EAAP,GAAYzvM,CAAZ,GAAgB,0BAAYkD,MAAZ,EAAoBusM,EAApB,IAA0B,CAA9C,CAvB+B,CAuBkB;;AAEjD,QAAID,EAAE,GAAGtsM,MAAM,CAAClD,CAAD,CAAX,GAAiBojO,SAAS,GAAG,KAAjC,EAAwC,EAAEpjO,CAAF;;AAExC,QAAIuN,OAAJ,EAAa;AACX;AACA/Q,MAAAA,CAAC,GAAGwD,CAAJ;AACAA,MAAAA,CAAC,GAAGgH,CAAC,GAAGH,CAAR;AACAA,MAAAA,CAAC,GAAGG,CAAC,GAAGxK,CAAR;AACD;;AAED,WAAOwD,CAAC,GAAG6G,CAAJ,GAAQmnH,SAAR,GAAoBkgF,MAAM,GAAG/rM,KAAT,CAAenC,CAAf,EAAkB6G,CAAC,GAAG,CAAtB,CAA3B;AACD,GAnCD;;AAqCA8H,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAAU/2O,CAAV,EAAa;AAC1B,UAAM3jB,KAAK,GAAG6S,KAAK,CAACksP,WAAN,CAAkB,CAACp7O,CAAD,EAAIA,CAAJ,CAAlB,CAAd;AACA,WAAO3jB,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcA,KAA1B;AACD,GAHD;;AAKA6S,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAO6+J,IAAI,GAAGv+B,MAAP,CAAcA,MAAM,EAApB,EAAwB5zK,KAAxB,CAA8BygO,OAA9B,EAAuC51P,KAAvC,CAA6CA,KAA7C,EAAoD6+O,YAApD,CAAiEA,YAAjE,EAA+EC,YAA/E,CAA4FA,YAA5F,EAA0G5yC,KAA1G,CAAgHA,KAAhH,CAAP;AACD,GAFD;;AAIA,SAAO6yC,OAAO,EAAd;AACD;;AAED,SAASE,QAAT,CAAkBz1O,KAAlB,EAAyB;AACvB,QAAMi/D,IAAI,GAAGj/D,KAAK,CAACi/D,IAAnB;AACAj/D,EAAAA,KAAK,CAAC4G,OAAN,GAAgB5G,KAAK,CAACs1O,YAAtB;AACA,SAAOt1O,KAAK,CAACq1O,YAAb;;AAEAr1O,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOw2K,QAAQ,CAACx2K,IAAI,EAAL,CAAf;AACD,GAFD;;AAIA,SAAOj/D,KAAP;AACD;;AAED,SAAS0rM,KAAT,GAAiB;AACf,SAAO+pC,QAAQ,CAAC3X,IAAI,GAAGuX,YAAP,CAAoB,CAApB,CAAD,CAAf;AACD;;AAED,IAAIzhP,GAAG,GAAG3J,KAAK,CAACM,SAAN,CAAgBqJ,GAA1B;;AACA,SAAS+6M,OAAT,CAAiB79L,CAAjB,EAAoB;AAClB,SAAOld,GAAG,CAAC3K,IAAJ,CAAS6nB,CAAT,EAAY+uL,kBAAZ,CAAP;AACD;;AAED,MAAMrsM,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA9B;;AAEA,SAAS64P,eAAT,GAA2B;AACzB,MAAI9sD,MAAM,GAAG,EAAb;AAAA,MACI5zK,KAAK,GAAG,EADZ;;AAGA,WAAS3rB,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAnB,GAAuB+uH,SAAvB,GAAmC1zF,KAAK,CAAC,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,IAAoB,CAArB,IAA0Bq7B,KAAK,CAACliC,MAAjC,CAA/C;AACD;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,GAAGoP,OAAO,CAAC79L,CAAD,CAAhB;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAOu/L,MAAM,CAAC/rM,KAAP,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBkiC,MAAAA,KAAK,GAAGn4B,KAAK,CAACvK,IAAN,CAAW6nB,CAAX,CAAR;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAO2rB,KAAK,CAACn4B,KAAN,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAU/lL,KAAV,EAAiBsxI,SAAjB,EAA4B;AAC7C,WAAO,yBAAajU,MAAM,CAAC,CAAD,CAAnB,EAAwB,oBAAKA,MAAL,CAAxB,EAAsCr9H,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAA3D,EAAkEsxI,SAAlE,CAAP;AACD,GAFD;;AAIAxzM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOotL,eAAe,GAAG9sD,MAAlB,CAAyBv/L,KAAK,CAACu/L,MAAN,EAAzB,EAAyC5zK,KAAzC,CAA+C3rB,KAAK,CAAC2rB,KAAN,EAA/C,CAAP;AACD,GAFD;;AAIA,SAAO3rB,KAAP;AACD;;AAED,MAAMssP,MAAM,GAAG,EAAf;AACA;AACA;AACA;;AAEA,SAASvqE,MAAT,CAAgB33K,IAAhB,EAAsBrU,WAAtB,EAAmCk3G,QAAnC,EAA6C;AAC3C,QAAMsuH,GAAG,GAAG,SAASv7N,KAAT,GAAiB;AAC3B,UAAMrS,CAAC,GAAGoI,WAAW,EAArB;;AAEA,QAAI,CAACpI,CAAC,CAACu+P,WAAP,EAAoB;AAClBv+P,MAAAA,CAAC,CAACu+P,WAAF,GAAgBv+P,CAAC,CAACk6P,MAAF,GAAWqE,WAAW,CAACv+P,CAAD,CAAtB,GAA4BA,CAAC,CAAC67P,YAAF,GAAiB2C,iBAAiB,CAACx+P,CAAD,CAAlC,GAAwC0xH,SAApF;AACD;;AAED1xH,IAAAA,CAAC,CAACyc,IAAF,GAASA,IAAT;AACA,WAAOzc,CAAP;AACD,GATD;;AAWA4tO,EAAAA,GAAG,CAACtuH,QAAJ,GAAe,qBAAM,qBAAMA,QAAN,CAAN,CAAf;AACA,SAAOsuH,GAAP;AACD;;AAED,SAASv7N,KAAT,CAAeoK,IAAf,EAAqBpK,KAArB,EAA4BitG,QAA5B,EAAsC;AACpC,MAAI/iH,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6iQ,IAAAA,MAAM,CAACliP,IAAD,CAAN,GAAe23K,MAAM,CAAC33K,IAAD,EAAOpK,KAAP,EAAcitG,QAAd,CAArB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOs/I,gBAAgB,CAACniP,IAAD,CAAhB,GAAyBkiP,MAAM,CAACliP,IAAD,CAA/B,GAAwCi1G,SAA/C;AACD;AACF,EAAC;;;AAEFr/G,KAAK,CAACswB,QAAD,EAAWk8N,sBAAX,CAAL,EAAgC;;AAEhCxsP,KAAK,CAAC87I,MAAD,EAAS2wG,oBAAT,EAAsBZ,UAAtB,CAAL;AACA7rP,KAAK,CAACirP,GAAD,EAAMyB,iBAAN,EAAgB,CAACb,UAAD,EAAaZ,GAAb,CAAhB,CAAL;AACAjrP,KAAK,CAACkrP,GAAD,EAAMyB,iBAAN,EAAgBd,UAAhB,CAAL;AACA7rP,KAAK,CAACmrP,IAAD,EAAOyB,kBAAP,EAAkBf,UAAlB,CAAL;AACA7rP,KAAK,CAACorP,MAAD,EAASyB,oBAAT,EAAsBhB,UAAtB,CAAL;AACA7rP,KAAK,CAACqrP,IAAD,EAAOyB,kBAAP,EAAkB,CAACjB,UAAD,EAAaI,QAAb,CAAlB,CAAL;AACAjsP,KAAK,CAACq8M,GAAD,EAAM0wC,iBAAN,EAAgB,CAAClB,UAAD,EAAaI,QAAb,CAAhB,CAAL,EAA8C;;AAE9CjsP,KAAK,CAACo6I,UAAD,EAAa4yG,wBAAb,EAA8B,CAACnB,UAAD,EAAaG,aAAb,CAA9B,CAAL,EAAiE;;AAEjEhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCoyJ,MAAlC,CAAD,EAA4CkxG,wBAA5C,EAA6D,CAACnB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCuhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACpB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA7D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCwhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACrB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCyhQ,IAAlC,CAAD,EAA0CgC,4BAA1C,EAA+D,CAACtB,UAAD,EAAaG,aAAb,CAA/D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkC0hQ,MAAlC,CAAD,EAA4CgC,8BAA5C,EAAmE,CAACvB,UAAD,EAAaG,aAAb,CAAnE,CAAL,EAAsG;;AAEtGhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCoyJ,MAAjC,CAAD,EAA2CuxG,uBAA3C,EAA2D,CAACxB,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCuhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAACzB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA3D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCwhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAAC1B,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCyhQ,IAAjC,CAAD,EAAyCqC,2BAAzC,EAA6D,CAAC3B,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiC0hQ,MAAjC,CAAD,EAA2CqC,6BAA3C,EAAiE,CAAC5B,UAAD,EAAaG,aAAb,CAAjE,CAAL,EAAoG;;AAEpGhsP,KAAK,CAACokO,QAAD,EAAWspB,sBAAX,EAA0B,CAAC3B,YAAD,EAAe3nB,QAAf,CAA1B,CAAL;AACApkO,KAAK,CAACurP,QAAD,EAAWoC,sBAAX,EAA0B5B,YAA1B,CAAL;AACA/rP,KAAK,CAACwrP,SAAD,EAAYoC,uBAAZ,EAA4B7B,YAA5B,CAAL,EAAgD;;AAEhD/rP,KAAK,CAAC4rP,UAAD,EAAaS,eAAb,EAA8B,CAACP,QAAD,EAAWC,YAAX,CAA9B,CAAL;AACA/rP,KAAK,CAACyrP,OAAD,EAAUoC,qBAAV,EAAwB/B,QAAxB,CAAL;AACA9rP,KAAK,CAAC2rP,IAAD,EAAO7tB,IAAP,EAAaguB,QAAb,CAAL;AACA9rP,KAAK,CAAC0rP,KAAD,EAAQhgD,KAAR,EAAeogD,QAAf,CAAL;;AACA,SAASS,gBAAT,CAA0BniP,IAA1B,EAAgC;AAC9B,SAAO,8BAAekiP,MAAf,EAAuBliP,IAAvB,CAAP;AACD;;AAED,SAAS0jP,OAAT,CAAiB1/P,GAAjB,EAAsBgc,IAAtB,EAA4B;AAC1B,QAAMzc,CAAC,GAAG2+P,MAAM,CAACl+P,GAAD,CAAhB;AACA,SAAOT,CAAC,IAAIA,CAAC,CAACs/G,QAAF,CAAW7iG,IAAX,CAAZ;AACD;;AAED,SAAS2jP,YAAT,CAAsB3/P,GAAtB,EAA2B;AACzB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMy9P,UAAN,CAAd;AACD;;AACD,SAASmC,UAAT,CAAoB5/P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM09P,QAAN,CAAd;AACD;;AACD,SAASmC,cAAT,CAAwB7/P,GAAxB,EAA6B;AAC3B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM29P,YAAN,CAAd;AACD;;AACD,SAASmC,aAAT,CAAuB9/P,GAAvB,EAA4B;AAC1B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM68P,GAAN,CAAd;AACD;;AACD,SAASkD,UAAT,CAAoB//P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM69P,QAAN,CAAd;AACD;;AACD,SAASmC,eAAT,CAAyBhgQ,GAAzB,EAA8B;AAC5B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM49P,aAAN,CAAd;AACD;;AACD,SAASqC,UAAT,CAAoBjgQ,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMg2O,QAAN,CAAd;AACD;;AAED,MAAMkqB,UAAU,GAAG,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,EAA8B,UAA9B,CAAnB;;AACA,SAASC,gBAAT,CAA0BtZ,YAA1B,EAAwCtpN,KAAxC,EAA+C;AAC7C,QAAM11B,KAAK,GAAG01B,KAAK,CAAC,CAAD,CAAnB;AAAA,QACMo1K,IAAI,GAAG,oBAAKp1K,KAAL,IAAc11B,KAD3B;AAEA,SAAO,UAAU9L,CAAV,EAAa;AAClB,WAAO8qP,YAAY,CAACh/O,KAAK,GAAG9L,CAAC,GAAG42M,IAAb,CAAnB;AACD,GAFD;AAGD;;AACD,SAASytD,iBAAT,CAA2BhL,MAA3B,EAAmCp5O,IAAnC,EAAyCm/I,KAAzC,EAAgD;AAC9C,SAAO,iBAAU+9F,WAAW,CAACl9O,IAAI,IAAI,KAAT,EAAgBm/I,KAAhB,CAArB,EAA6Ci6F,MAA7C,CAAP;AACD;;AACD,SAASiL,oBAAT,CAA8BxZ,YAA9B,EAA4C/yK,KAA5C,EAAmD;AACjD,QAAMm0D,OAAO,GAAG,IAAIpsI,KAAJ,CAAUi4E,KAAV,CAAhB;AAAA,QACM7pE,CAAC,GAAG6pE,KAAK,GAAG,CADlB;;AAGA,OAAK,IAAI/3E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,KAApB,GAA4Bm0D,OAAO,CAAClsI,CAAD,CAAP,GAAa8qP,YAAY,CAAC,EAAE9qP,CAAF,GAAMkO,CAAP,CAAzB;;AAE5B,SAAOg+H,OAAP;AACD;;AACD,SAASq4H,SAAT,CAAmB1uP,KAAnB,EAA0B;AACxB,QAAMnS,CAAC,GAAGmS,KAAK,CAACoK,IAAhB;AAAA,QACMzc,CAAC,GAAGqS,KAAK,CAACi/D,IAAN,EADV;AAEAtxE,EAAAA,CAAC,CAACyc,IAAF,GAASvc,CAAT;AACA,SAAOF,CAAP;AACD;;AACD,SAASghQ,aAAT,CAAuBC,OAAvB,EAAgCv+P,GAAhC,EAAqCE,GAArC,EAA0C;AACxC,QAAMuvF,KAAK,GAAGvvF,GAAG,GAAGF,GAApB;AACA,MAAIlG,CAAJ,EAAO0D,CAAP,EAAUF,CAAV;;AAEA,MAAI,CAACmyF,KAAD,IAAU,CAACvoF,MAAM,CAACvC,QAAP,CAAgB8qF,KAAhB,CAAf,EAAuC;AACrC,WAAO,wBAAS,GAAT,CAAP;AACD,GAFD,MAEO;AACL31F,IAAAA,CAAC,GAAG,CAAC0D,CAAC,GAAG+gQ,OAAO,CAACxkP,IAAb,EAAmBmd,OAAnB,CAA2B,GAA3B,CAAJ;AACA15B,IAAAA,CAAC,GAAG1D,CAAC,GAAG,CAAJ,GAAQ0D,CAAR,GAAYA,CAAC,CAAC2F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAAhB;AACAwD,IAAAA,CAAC,GAAGqS,KAAK,CAACnS,CAAD,CAAL,GAAW0xM,MAAX,CAAkB,CAAClvM,GAAD,EAAME,GAAN,CAAlB,EAA8Bo7B,KAA9B,CAAoC,CAAC,CAAD,EAAI,CAAJ,CAApC,CAAJ;AACA2iO,IAAAA,UAAU,CAACrgQ,OAAX,CAAmB2zF,CAAC,IAAIgtK,OAAO,CAAChtK,CAAD,CAAP,GAAaj0F,CAAC,CAACi0F,CAAD,CAAD,CAAKgtK,OAAO,CAAChtK,CAAD,CAAP,EAAL,CAAb,GAAkC,CAA1D;AACA,WAAOj0F,CAAP;AACD;AACF;;AACD,SAAS25P,WAAT,CAAqBl9O,IAArB,EAA2Bm/I,KAA3B,EAAkC;AAChC,QAAMslG,MAAM,GAAGlsD,CAAC,CAACvnK,MAAM,CAAChxB,IAAD,CAAP,CAAhB;AACA,SAAOm/I,KAAK,IAAI,IAAT,IAAiBslG,MAAjB,IAA2BA,MAAM,CAACtlG,KAAlC,GAA0CslG,MAAM,CAACtlG,KAAP,CAAaA,KAAb,CAA1C,GAAgEslG,MAAvE;AACD;;AAED,SAASzzN,MAAT,CAAgBhxB,IAAhB,EAAsB;AACpB,SAAO,gBAAgBA,IAAI,CAAC9b,WAAL,GAAmBN,KAAnB,CAAyB,GAAzB,EAA8B4F,GAA9B,CAAkCjG,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAA5D,EAAwEzF,IAAxE,CAA6E,EAA7E,CAAvB;AACD;;AAED,MAAMi6P,UAAU,GAAG;AACjB8G,EAAAA,KAAK,EAAE,oEADU;AAEjBC,EAAAA,MAAM,EAAE,oEAFS;AAGjBC,EAAAA,KAAK,EAAE,oEAHU;AAIjBC,EAAAA,OAAO,EAAE,oEAJQ;AAKjBC,EAAAA,OAAO,EAAE,oEALQ;AAMjBC,EAAAA,IAAI,EAAE,oEANW;AAOjBC,EAAAA,SAAS,EAAE,oEAPM;AAQjBC,EAAAA,UAAU,EAAE,oEARK;AASjBC,EAAAA,SAAS,EAAE,oEATM;AAUjBC,EAAAA,SAAS,EAAE,oEAVM;AAWjBC,EAAAA,UAAU,EAAE,oEAXK;AAYjBC,EAAAA,eAAe,EAAE,oEAZA;AAajBC,EAAAA,SAAS,EAAE,oEAbM;AAcjBC,EAAAA,SAAS,EAAE,oEAdM;AAejBC,EAAAA,WAAW,EAAE,oEAfI;AAgBjBC,EAAAA,iBAAiB,EAAE,oEAhBF;AAiBjBC,EAAAA,eAAe,EAAE,oEAjBA;AAkBjBC,EAAAA,UAAU,EAAE,oEAlBK;AAmBjBC,EAAAA,cAAc,EAAE,oEAnBC;AAoBjBC,EAAAA,WAAW,EAAE,oEApBI;AAqBjBC,EAAAA,YAAY,EAAE,oEArBG;AAsBjBC,EAAAA,OAAO,EAAE,oEAtBQ;AAuBjBC,EAAAA,OAAO,EAAE,oEAvBQ;AAwBjBC,EAAAA,eAAe,EAAE,oEAxBA;AAyBjBC,EAAAA,aAAa,EAAE,oEAzBE;AA0BjBC,EAAAA,cAAc,EAAE,oEA1BC;AA2BjBC,EAAAA,eAAe,EAAE,oEA3BA;AA4BjBpoP,EAAAA,QAAQ,EAAE,oEA5BO;AA6BjBqoP,EAAAA,OAAO,EAAE,4LA7BQ;AA8BjBC,EAAAA,KAAK,EAAE,4LA9BU;AA+BjBC,EAAAA,OAAO,EAAE,4LA/BQ;AAgCjBC,EAAAA,MAAM,EAAE,4LAhCS;AAiCjBC,EAAAA,OAAO,EAAE,kYAjCQ;AAkCjBC,EAAAA,OAAO,EAAE,4LAlCQ;AAmCjBC,EAAAA,OAAO,EAAE,4LAnCQ;AAoCjBC,EAAAA,KAAK,EAAE,kYApCU;AAqCjBC,EAAAA,MAAM,EAAE,oEArCS;AAsCjBC,EAAAA,SAAS,EAAE,wDAtCM;AAuCjBC,EAAAA,KAAK,EAAE,oEAvCU;AAwCjBC,EAAAA,SAAS,EAAE,oEAxCM;AAyCjBC,EAAAA,SAAS,EAAE,oEAzCM;AA0CjBC,EAAAA,UAAU,EAAE,oEA1CK;AA2CjBC,EAAAA,OAAO,EAAE,oEA3CQ;AA4CjBC,EAAAA,YAAY,EAAE,8DA5CG;AA6CjBC,EAAAA,aAAa,EAAE,8DA7CE;AA8CjBC,EAAAA,UAAU,EAAE,wDA9CK;AA+CjBC,EAAAA,WAAW,EAAE,8DA/CI;AAgDjBC,EAAAA,aAAa,EAAE,8DAhDE;AAiDjBC,EAAAA,QAAQ,EAAE,8DAjDO;AAkDjBC,EAAAA,QAAQ,EAAE,8DAlDO;AAmDjBC,EAAAA,SAAS,EAAE,8DAnDM;AAoDjBC,EAAAA,SAAS,EAAE,4CApDM;AAqDjBC,EAAAA,OAAO,EAAE;AArDQ,CAAnB;AAuDA,MAAMC,QAAQ,GAAG;AACfC,EAAAA,UAAU,EAAE,8DADG;AAEfC,EAAAA,UAAU,EAAE,0HAFG;AAGfC,EAAAA,WAAW,EAAE,0HAHE;AAIfC,EAAAA,WAAW,EAAE,0HAJE;AAKfC,EAAAA,SAAS,EAAE,8DALI;AAMfC,EAAAA,SAAS,EAAE,0HANI;AAOfC,EAAAA,MAAM,EAAE,kDAPO;AAQfC,EAAAA,KAAK,EAAE,kDARQ;AASfC,EAAAA,MAAM,EAAE,0EATO;AAUfC,EAAAA,OAAO,EAAE,wDAVM;AAWfC,EAAAA,OAAO,EAAE,kDAXM;AAYfC,EAAAA,IAAI,EAAE,wDAZS;AAafC,EAAAA,IAAI,EAAE,kDAbS;AAcfC,EAAAA,IAAI,EAAE;AAdS,CAAjB;;AAiBA,SAASxP,MAAT,CAAgByP,OAAhB,EAAyB;AACvB,QAAM56P,CAAC,GAAG46P,OAAO,CAACxpQ,MAAR,GAAiB,CAAjB,GAAqB,CAA/B;AAAA,QACMmN,CAAC,GAAG,IAAI3M,KAAJ,CAAUoO,CAAV,CADV;;AAGA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,GAAwB;AACtBzB,IAAAA,CAAC,CAACzM,CAAD,CAAD,GAAO,MAAM8oQ,OAAO,CAACz/P,KAAR,CAAcrJ,CAAC,GAAG,CAAlB,EAAqB,EAAEA,CAAF,GAAM,CAA3B,CAAb;AACD;;AAED,SAAOyM,CAAP;AACD;;AAED,SAASpM,KAAT,CAAesmB,CAAf,EAAkBhb,CAAlB,EAAqB;AACnB,OAAK,MAAM2R,CAAX,IAAgBqJ,CAAhB,EAAmBm2F,MAAM,CAACx/F,CAAD,EAAI3R,CAAC,CAACgb,CAAC,CAACrJ,CAAD,CAAF,CAAL,CAAN;AACpB;;AAED,MAAM6uG,OAAO,GAAG,EAAhB;AACA9rH,KAAK,CAAC0nQ,QAAD,EAAW1O,MAAX,CAAL;AACAh5P,KAAK,CAACw9P,UAAD,EAAal3O,CAAC,IAAI09O,iBAAiB,CAAChL,MAAM,CAAC1yO,CAAD,CAAP,CAAnC,CAAL;;AACA,SAASm2F,MAAT,CAAgBv7G,IAAhB,EAAsBu7G,MAAtB,EAA8B;AAC5Bv7G,EAAAA,IAAI,GAAGA,IAAI,IAAIA,IAAI,CAAC4C,WAAL,EAAf;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6sH,IAAAA,OAAO,CAAC5qH,IAAD,CAAP,GAAgBu7G,MAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOqP,OAAO,CAAC5qH,IAAD,CAAd;AACD;AACF;;AAED,MAAMwnQ,YAAY,GAAG,QAArB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;;AAEA,MAAMC,gBAAgB,GAAGlmQ,KAAK,IAAI,uBAAQA,KAAR,IAAiBA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAI5G,MAAM,CAAC4G,CAAD,CAArB,CAAjB,GAA6C5G,MAAM,CAACtI,KAAD,CAArF;;AAEA,MAAMo2M,SAAS,GAAG,CAAClyM,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAApC;;AAEA,MAAM21O,UAAU,GAAG,CAACx8O,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAArC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASiiQ,SAAT,CAAmBtzP,KAAnB,EAA0BkiE,KAA1B,EAAiCqxL,OAAjC,EAA0C;AACxC,MAAI1uP,IAAJ;;AAEA,MAAI,wBAASq9D,KAAT,CAAJ,EAAqB;AACnB,QAAIliE,KAAK,CAACixM,IAAV,EAAgB;AACd/uI,MAAAA,KAAK,GAAGhyE,IAAI,CAACK,GAAL,CAAS2xE,KAAT,EAAgBliE,KAAK,CAACixM,IAAN,CAAWxnN,MAA3B,CAAR;AACD;;AAED,QAAI8pQ,OAAO,IAAI,IAAf,EAAqB;AACnBrxL,MAAAA,KAAK,GAAGhyE,IAAI,CAACG,GAAL,CAAS6xE,KAAT,EAAgBhyE,IAAI,CAAC+H,KAAL,CAAW,oBAAK+H,KAAK,CAACu/L,MAAN,EAAL,IAAuBg0D,OAAvB,IAAkC,CAA7C,CAAhB,CAAR;AACD;AACF;;AAED,MAAI,wBAASrxL,KAAT,CAAJ,EAAqB;AACnBr9D,IAAAA,IAAI,GAAGq9D,KAAK,CAACr9D,IAAb;AACAq9D,IAAAA,KAAK,GAAGA,KAAK,CAACszI,QAAd;AACD;;AAED,MAAI,wBAAStzI,KAAT,CAAJ,EAAqB;AACnBA,IAAAA,KAAK,GAAGliE,KAAK,CAACoK,IAAN,KAAeihP,IAAf,GAAsB,4BAAanpL,KAAb,CAAtB,GAA4CliE,KAAK,CAACoK,IAAN,IAAciyM,GAAd,GAAoB,2BAAYn6I,KAAZ,CAApB,GAAyC,qBAAM,mDAAN,CAA7F;AACA,QAAIr9D,IAAJ,EAAUq9D,KAAK,GAAGA,KAAK,CAACruE,KAAN,CAAYgR,IAAZ,CAAR;AACX;;AAED,SAAOq9D,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASsxL,UAAT,CAAoBxzP,KAApB,EAA2BmwM,KAA3B,EAAkCjuI,KAAlC,EAAyC;AACvC,MAAIv2C,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,MACIk1K,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIm1K,EAAE,GAAG,oBAAKn1K,KAAL,CAFT;AAAA,MAGI6qK,GAAG,GAAG+M,SAHV;;AAKA,MAAI1C,EAAE,GAAGC,EAAT,EAAa;AACXn1K,IAAAA,KAAK,GAAGm1K,EAAR;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGl1K,KAAL;AACA6qK,IAAAA,GAAG,GAAGq3C,UAAN;AACD;;AAEDhtC,EAAAA,EAAE,GAAG3wM,IAAI,CAAC+H,KAAL,CAAW4oM,EAAX,CAAL;AACAC,EAAAA,EAAE,GAAG5wM,IAAI,CAACoC,IAAL,CAAUwuM,EAAV,CAAL,CAduC,CAcnB;AACpB;;AAEAqP,EAAAA,KAAK,GAAGA,KAAK,CAACv8M,GAAN,CAAUyI,CAAC,IAAI,CAACA,CAAD,EAAI2D,KAAK,CAAC3D,CAAD,CAAT,CAAf,EAA8BiJ,MAA9B,CAAqCwL,CAAC,IAAI+vL,EAAE,IAAI/vL,CAAC,CAAC,CAAD,CAAP,IAAcA,CAAC,CAAC,CAAD,CAAD,IAAQgwL,EAAhE,EAAoE3sM,IAApE,CAAyEqiM,GAAzE,EAA8E5iM,GAA9E,CAAkFkd,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAxF,CAAR;;AAEA,MAAIoxD,KAAK,GAAG,CAAR,IAAaiuI,KAAK,CAAC1mN,MAAN,GAAe,CAAhC,EAAmC;AACjC,UAAMgqQ,SAAS,GAAG,CAACtjD,KAAK,CAAC,CAAD,CAAN,EAAW,oBAAKA,KAAL,CAAX,CAAlB;;AAEA,WAAOA,KAAK,CAAC1mN,MAAN,GAAey4E,KAAf,IAAwBiuI,KAAK,CAAC1mN,MAAN,IAAgB,CAA/C,EAAkD;AAChD0mN,MAAAA,KAAK,GAAGA,KAAK,CAAC7qM,MAAN,CAAa,CAACwL,CAAD,EAAI3mB,CAAJ,KAAU,EAAEA,CAAC,GAAG,CAAN,CAAvB,CAAR;AACD;;AAED,QAAIgmN,KAAK,CAAC1mN,MAAN,GAAe,CAAnB,EAAsB;AACpB0mN,MAAAA,KAAK,GAAGsjD,SAAR;AACD;AACF;;AAED,SAAOtjD,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASujD,UAAT,CAAoB1zP,KAApB,EAA2BkiE,KAA3B,EAAkC;AAChC,SAAOliE,KAAK,CAACixM,IAAN,GAAauiD,UAAU,CAACxzP,KAAD,EAAQA,KAAK,CAACixM,IAAd,CAAvB,GAA6CjxM,KAAK,CAACmwM,KAAN,GAAcnwM,KAAK,CAACmwM,KAAN,CAAYjuI,KAAZ,CAAd,GAAmCliE,KAAK,CAACu/L,MAAN,EAAvF;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS0oD,UAAT,CAAoB/zC,MAApB,EAA4Bl0M,KAA5B,EAAmCkiE,KAAnC,EAA0CsxI,SAA1C,EAAqDoB,UAArD,EAAiE++C,MAAjE,EAAyE;AACvE,QAAMvpP,IAAI,GAAGpK,KAAK,CAACoK,IAAnB;AACA,MAAIsiG,MAAM,GAAG2mJ,gBAAb;;AAEA,MAAIjpP,IAAI,KAAKihP,IAAT,IAAiBz2C,UAAU,KAAKy2C,IAApC,EAA0C;AACxC3+I,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8S,UAAP,CAAkBxT,SAAlB,CAAT;AACD,GAFD,MAEO,IAAIppM,IAAI,KAAKiyM,GAAT,IAAgBzH,UAAU,KAAKyH,GAAnC,EAAwC;AAC7C3vG,IAAAA,MAAM,GAAGwnG,MAAM,CAACmS,SAAP,CAAiB7S,SAAjB,CAAT;AACD,GAFM,MAEA,IAAI06C,aAAa,CAAC9jP,IAAD,CAAjB,EAAyB;AAC9B,UAAMwpP,MAAM,GAAG1/C,MAAM,CAAC6T,WAAP,CAAmBvU,SAAnB,CAAf;;AAEA,QAAImgD,MAAM,IAAI3zP,KAAK,CAACixM,IAApB,EAA0B;AACxBvkG,MAAAA,MAAM,GAAGknJ,MAAT;AACD,KAFD,MAEO;AACL,YAAM97O,IAAI,GAAG+7O,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,KAAf,CAApB;;AAEAwqC,MAAAA,MAAM,GAAG57F,CAAC,IAAIgH,IAAI,CAAChH,CAAD,CAAJ,GAAU8iP,MAAM,CAAC9iP,CAAD,CAAhB,GAAsB,EAApC;AACD;AACF,GAVM,MAUA,IAAI9Q,KAAK,CAACioP,UAAV,EAAsB;AAC3B;AACA,UAAMjxP,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA7yF,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8T,UAAP,CAAkBhxN,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAzB,EAAyCy4E,KAAzC,EAAgDsxI,SAAhD,CAAT;AACD,GAJM,MAIA,IAAIA,SAAJ,EAAe;AACpB9mG,IAAAA,MAAM,GAAGwnG,MAAM,CAACxnG,MAAP,CAAc8mG,SAAd,CAAT;AACD;;AAED,SAAO9mG,MAAP;AACD;;AACD,SAASmnJ,OAAT,CAAiB7zP,KAAjB,EAAwBkiE,KAAxB,EAA+B3tE,MAA/B,EAAuC;AACrC,QAAM47M,KAAK,GAAGujD,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAAxB;AAAA,QACM/sC,IAAI,GAAGn1B,KAAK,CAACm1B,IAAN,EADb;AAAA,QAEMw9L,IAAI,GAAGziO,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAFb;AAAA,QAGM1tB,CAAC,GAAGvX,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY4kC,IAAI,GAAG+sC,KAAP,GAAeiuI,KAAK,CAAC1mN,MAAjC,CAHV,CADqC,CAIe;;AAEpD,QAAMquB,IAAI,GAAG9gB,CAAC,IAAI;AAChB,QAAI7M,CAAC,GAAG6M,CAAC,GAAG9G,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAejlC,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACiK,GAAL,CAASnD,CAAT,IAAc27N,IAAzB,CAAf,CAAZ;AACA,QAAIxoO,CAAC,GAAGgrC,IAAJ,GAAWA,IAAI,GAAG,GAAtB,EAA2BhrC,CAAC,IAAIgrC,IAAL;AAC3B,WAAOhrC,CAAC,IAAIsd,CAAZ;AACD,GAJD;;AAMA,SAAOlT,MAAM,GAAG47M,KAAK,CAAC7qM,MAAN,CAAawS,IAAb,CAAH,GAAwBA,IAArC;AACD;;AAED,MAAM63N,OAAO,GAAG;AACd,GAACvL,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY,YAFE;AAGd,GAACC,SAAD,GAAa;AAHC,CAAhB;AAKA,MAAM/8C,OAAO,GAAG;AACd,GAAC21B,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY;AAFE,CAAhB;;AAIA,SAASuI,WAAT,CAAqB9zP,KAArB,EAA4BkiE,KAA5B,EAAmC;AACjC,SAAOliE,KAAK,CAACixM,IAAN,GAAa8iD,SAAS,CAAC/zP,KAAK,CAACixM,IAAP,CAAtB,GAAqCjxM,KAAK,CAACoK,IAAN,KAAe6gP,GAAf,GAAqB4I,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,IAAf,CAA5B,GAAmDytK,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,GAAsB4pP,eAAe,CAACh0P,KAAK,CAAC2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAD,CAArC,GAAsEspP,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAA/K;AACD;;AACD,SAAS+xL,eAAT,CAAyB//C,MAAzB,EAAiCl0M,KAAjC,EAAwCwzM,SAAxC,EAAmD;AACjD,QAAM1iM,CAAC,GAAG9Q,KAAK,CAACyuM,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAV;AAAA,QACM/R,CAAC,GAAGyY,CAAC,CAACrnB,MADZ;;AAGA,MAAIuN,CAAC,GAAGqB,CAAC,GAAG,CAAJ,GAAQyY,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAhB,GAAsBA,CAAC,CAAC,CAAD,CAA/B;AAAA,MACI3mB,CADJ;;AAGA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6M,IAAAA,CAAC,GAAG9G,IAAI,CAACG,GAAL,CAAS2G,CAAT,EAAY8Z,CAAC,CAAC3mB,CAAD,CAAD,GAAO2mB,CAAC,CAAC3mB,CAAC,GAAG,CAAL,CAApB,CAAJ;AACD,GATgD,CAS/C;;;AAGF,SAAO+pN,MAAM,CAAC8T,UAAP,CAAkB,CAAlB,EAAqBhxN,CAArB,EAAwB,IAAI,EAA5B,EAAgCw8M,SAAhC,CAAP;AACD;;AAED,SAASwgD,eAAT,CAAyB7iD,UAAzB,EAAqC;AACnC,QAAM58M,MAAM,GAAG,CAAC,CAACtC,QAAF,EAAYvI,MAAZ,CAAmBynN,UAAnB,CAAf;AACA58M,EAAAA,MAAM,CAAChE,GAAP,GAAa,CAAC0B,QAAd;AACA,SAAOsC,MAAP;AACD;;AAED,SAASw/P,SAAT,CAAmB9iD,IAAnB,EAAyB;AACvB,QAAM18M,MAAM,GAAG08M,IAAI,CAACz9M,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf,CAAf;AACAe,EAAAA,MAAM,CAAChE,GAAP,GAAa,oBAAK0gN,IAAL,CAAb;AACA,SAAO18M,MAAP;AACD;;AAED,MAAM2/P,eAAe,GAAGl0P,KAAK,IAAI2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,IAAuBpK,KAAK,CAACixM,IAA9D;;AAEA,SAASkjD,WAAT,CAAqBjgD,MAArB,EAA6Bl0M,KAA7B,EAAoCkiE,KAApC,EAA2C93D,IAA3C,EAAiDopM,SAAjD,EAA4DoB,UAA5D,EAAwE++C,MAAxE,EAAgF;AAC9E,QAAMjnJ,MAAM,GAAG+hG,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAP,IAAuBwqM,UAAU,KAAKy2C,IAAtC,IAA8Cz2C,UAAU,KAAKyH,GAA7D,GAAmE43C,eAAe,CAAC//C,MAAD,EAASl0M,KAAT,EAAgBwzM,SAAhB,CAAlF,GAA+Gy0C,UAAU,CAAC/zC,MAAD,EAASl0M,KAAT,EAAgBkiE,KAAhB,EAAuBsxI,SAAvB,EAAkCoB,UAAlC,EAA8C++C,MAA9C,CAAxI;AACA,SAAOvpP,IAAI,KAAK8oP,YAAT,IAAyBgB,eAAe,CAACl0P,KAAD,CAAxC,GAAkDo0P,WAAW,CAAC1nJ,MAAD,CAA7D,GAAwEtiG,IAAI,KAAK+oP,cAAT,GAA0BkB,cAAc,CAAC3nJ,MAAD,CAAxC,GAAmD4nJ,WAAW,CAAC5nJ,MAAD,CAA7I;AACD;;AAED,MAAM0nJ,WAAW,GAAG1nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,EAAe3F,KAAf,KAAyB;AACrD,QAAM61E,KAAK,GAAGlzE,GAAG,CAAC3C,KAAK,CAAC2F,KAAK,GAAG,CAAT,CAAN,EAAmBhD,GAAG,CAAC3C,KAAK,CAACiG,GAAP,EAAY,CAAC0B,QAAb,CAAtB,CAAjB;AAAA,QACM4uM,EAAE,GAAG6H,WAAW,CAACv7M,KAAD,EAAQu/G,MAAR,CADtB;AAAA,QAEMo0F,EAAE,GAAG4H,WAAW,CAACvoI,KAAD,EAAQusC,MAAR,CAFtB;AAGA,SAAOm0F,EAAE,IAAIC,EAAN,GAAWD,EAAE,GAAG,UAAL,GAAkBC,EAA7B,GAAkCA,EAAE,GAAG,OAAOA,EAAV,GAAe,YAAYD,EAAtE;AACD,CALD;;AAOA,MAAM5zM,GAAG,GAAG,CAACE,KAAD,EAAQonQ,IAAR,KAAiBpnQ,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBonQ,IAArD;;AAEA,MAAMF,cAAc,GAAG3nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,KAAkBA,KAAK,GAAGy8G,MAAM,CAACv/G,KAAD,CAAT,GAAmB,IAA3E;;AAEA,MAAMmnQ,WAAW,GAAG5nJ,MAAM,IAAIv/G,KAAK,IAAIu/G,MAAM,CAACv/G,KAAD,CAA7C;;AAEA,MAAMu7M,WAAW,GAAG,CAACv7M,KAAD,EAAQu/G,MAAR,KAAmBn1G,MAAM,CAACvC,QAAP,CAAgB7H,KAAhB,IAAyBu/G,MAAM,CAACv/G,KAAD,CAA/B,GAAyC,IAAhF;;AAEA,SAASqnQ,aAAT,CAAuBx0P,KAAvB,EAA8B;AAC5B,QAAMu/L,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAf;AAAA,QACMr9H,KAAK,GAAGq9H,MAAM,CAAC91M,MAAP,GAAgB,CAD9B;AAEA,MAAIo3M,EAAE,GAAG,CAACtB,MAAM,CAAC,CAAD,CAAhB;AAAA,MACIuB,EAAE,GAAG,CAAC,oBAAKvB,MAAL,CADV;AAAA,MAEIwB,IAAI,GAAGD,EAAE,GAAGD,EAFhB;;AAIA,MAAI7gM,KAAK,CAACoK,IAAN,KAAeohP,SAAnB,EAA8B;AAC5B,UAAMiJ,MAAM,GAAGvyL,KAAK,GAAG6+H,IAAI,GAAG7+H,KAAV,GAAkB,GAAtC;AACA2+H,IAAAA,EAAE,IAAI4zD,MAAN;AACA3zD,IAAAA,EAAE,IAAI2zD,MAAN;AACA1zD,IAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AACD;;AAED,SAAO1zM,KAAK,IAAI,CAACA,KAAK,GAAG0zM,EAAT,IAAeE,IAA/B;AACD;;AAED,SAASr0F,MAAT,CAAgBwnG,MAAhB,EAAwBl0M,KAAxB,EAA+BwzM,SAA/B,EAA0CoB,UAA1C,EAAsD;AACpD,QAAMxqM,IAAI,GAAGwqM,UAAU,IAAI50M,KAAK,CAACoK,IAAjC,CADoD,CACb;;AAEvC,MAAI,wBAASopM,SAAT,KAAuB26C,UAAU,CAAC/jP,IAAD,CAArC,EAA6C;AAC3CopM,IAAAA,SAAS,GAAGA,SAAS,CAAC9lN,OAAV,CAAkB,KAAlB,EAAyB,IAAzB,EAA+BA,OAA/B,CAAuC,KAAvC,EAA8C,IAA9C,CAAZ;AACD;;AAED,SAAO,CAAC8lN,SAAD,IAAcppM,IAAI,KAAKihP,IAAvB,GAA8Bn3C,MAAM,CAAC8S,UAAP,CAAkB,kBAAlB,CAA9B,GAAsE,CAACxT,SAAD,IAAcppM,IAAI,KAAKiyM,GAAvB,GAA6BnI,MAAM,CAACmS,SAAP,CAAiB,sBAAjB,CAA7B,GAAwE8tC,WAAW,CAACjgD,MAAD,EAASl0M,KAAT,EAAgB,CAAhB,EAAmB,IAAnB,EAAyBwzM,SAAzB,EAAoCoB,UAApC,EAAgD,IAAhD,CAAhK;AACD;;AAED,SAAS8/C,aAAT,CAAuBxgD,MAAvB,EAA+Bl0M,KAA/B,EAAsCo+L,GAAtC,EAA2C;AACzCA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA,QAAM7tM,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY6tM,GAAG,CAACkjC,MAAJ,IAAc,CAA1B,CAAZ;AAAA,QACMjmB,GAAG,GAAG3uG,MAAM,CAACwnG,MAAD,EAASl0M,KAAT,EAAgBo+L,GAAG,CAAC1xF,MAApB,EAA4B0xF,GAAG,CAACwW,UAAhC,CADlB,CAFyC,CAGsB;;AAE/D,MAAIq5C,cAAc,CAACjuP,KAAK,CAACoK,IAAP,CAAlB,EAAgC;AAC9B,UAAM/N,CAAC,GAAGy3P,WAAW,CAAC9zP,KAAD,CAAX,CAAmBxM,KAAnB,CAAyB,CAAzB,EAA4BI,GAA5B,CAAgCynN,GAAhC,CAAV;AAAA,UACMhjN,CAAC,GAAGgE,CAAC,CAAC5S,MADZ;AAEA,WAAO,GAAGC,MAAH,CAAU2O,CAAV,EAAa,UAAb,EAAyB3O,MAAzB,CAAgC2O,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,KAAhD,EAAuD,IAAvD,EAA6D3O,MAA7D,CAAoE2S,CAAC,CAACtO,IAAF,CAAO,IAAP,CAApE,CAAP;AACD,GAJD,CAIE;AAJF,OAKK,IAAIigQ,UAAU,CAAChuP,KAAK,CAACoK,IAAP,CAAd,EAA4B;AAC7B,YAAMpT,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AAAA,YACMlnM,CAAC,GAAGrB,CAAC,CAACvN,MADZ;AAAA,YAEM4S,CAAC,GAAGhE,CAAC,GAAG9H,GAAJ,GAAUyG,CAAC,CAACxD,KAAF,CAAQ,CAAR,EAAWjD,GAAG,GAAG,CAAjB,EAAoBqD,GAApB,CAAwBynN,GAAxB,EAA6BttN,IAA7B,CAAkC,IAAlC,IAA0C,gBAA1C,GAA6DiJ,CAAC,CAACxD,KAAF,CAAQ,CAAC,CAAT,EAAYI,GAAZ,CAAgBynN,GAAhB,CAAvE,GAA8FrkN,CAAC,CAACpD,GAAF,CAAMynN,GAAN,EAAWttN,IAAX,CAAgB,IAAhB,CAFxG;AAGA,aAAO,GAAGrE,MAAH,CAAU2O,CAAV,EAAa,QAAb,EAAuB3O,MAAvB,CAA8B2O,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA7C,EAAkD,IAAlD,EAAwD3O,MAAxD,CAA+D2S,CAA/D,CAAP;AACD,KALE,CAKD;AALC,SAME;AACD,cAAMrF,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA,eAAO,eAAe71M,MAAf,CAAsB2xN,GAAG,CAACrkN,CAAC,CAAC,CAAD,CAAF,CAAzB,EAAiC,MAAjC,EAAyCtN,MAAzC,CAAgD2xN,GAAG,CAAC,oBAAKrkN,CAAL,CAAD,CAAnD,CAAP;AACD;AACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/yBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAI29P,WAAW,GAAG,CAAlB;;AACA,SAASC,kBAAT,GAA8B;AAC5BD,EAAAA,WAAW,GAAG,CAAd;AACD;;AACD,MAAME,aAAa,GAAG,IAAtB;;AACA,SAASC,UAAT,CAAoB3nQ,KAApB,EAA2B;AACzB,SAAOA,KAAK,IAAIA,KAAK,CAACwmB,QAAtB;AACD;;AACD,SAASohP,WAAT,CAAqBn8N,CAArB,EAAwBo8N,IAAxB,EAA8B7/N,IAA9B,EAAoC;AAClC,QAAM/qB,IAAI,GAAGwuB,CAAC,CAACjlB,QAAf;AACA,MAAIvW,EAAE,GAAGw7B,CAAC,CAACx7B,EAAX;AAAA,MACImwG,MAAM,GAAGnjG,IAAI,KAAK,QAAT,GAAoByqP,aAApB,GAAoC,EADjD,CAFkC,CAGmB;;AAErD,MAAI,CAACz3P,EAAL,EAAS;AACPA,IAAAA,EAAE,GAAGw7B,CAAC,CAACx7B,EAAF,GAAO,cAAcu3P,WAAW,EAArC;;AAEA,QAAIvqP,IAAI,KAAK,QAAb,EAAuB;AACrBwuB,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,GAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,GAAP,CAAV;AACA/jE,MAAAA,CAAC,CAAC2jK,EAAF,GAAOtvM,GAAG,CAAC2rC,CAAC,CAAC2jK,EAAH,EAAO,CAAP,CAAV;AACA3jK,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,GAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,GAAP,CAAV;AACAjkE,MAAAA,CAAC,CAAC4jK,EAAF,GAAOvvM,GAAG,CAAC2rC,CAAC,CAAC4jK,EAAH,EAAO,GAAP,CAAV;AACAjvF,MAAAA,MAAM,GAAGsnJ,aAAT;AACD,KARD,MAQO;AACLj8N,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,CAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,CAAP,CAAV;AACA/jE,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,CAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,CAAP,CAAV;AACD;AACF,GAtBiC,CAsBhC;;;AAGFm4J,EAAAA,IAAI,CAAC53P,EAAD,CAAJ,GAAWw7B,CAAX,CAzBkC,CAyBpB;;AAEd,SAAO,UAAUzD,IAAI,IAAI,EAAlB,IAAwB,GAAxB,GAA8Bo4E,MAA9B,GAAuCnwG,EAAvC,GAA4C,GAAnD;AACD;;AAED,SAASnQ,GAAT,CAAawD,GAAb,EAAkB0vK,GAAlB,EAAuB;AACrB,SAAO1vK,GAAG,IAAI,IAAP,GAAcA,GAAd,GAAoB0vK,GAA3B;AACD;;AAED,SAAS80F,QAAT,CAAmB5oD,EAAnB,EAAuBntF,EAAvB,EAA2B;AACzB,MAAIg2I,KAAK,GAAG,EAAZ;AAAA,MACIvhP,QADJ;AAEA,SAAOA,QAAQ,GAAG;AAChBA,IAAAA,QAAQ,EAAE,QADM;AAEhBipF,IAAAA,EAAE,EAAEyvG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAFD;AAGhB1vG,IAAAA,EAAE,EAAE0vG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAHD;AAIhBpjI,IAAAA,EAAE,EAAEi2C,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAJD;AAKhBriB,IAAAA,EAAE,EAAEqiB,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CALD;AAMhBg2I,IAAAA,KAAK,EAAEA,KANS;AAOhBxpO,IAAAA,IAAI,EAAE,UAAU50B,MAAV,EAAkB6oP,KAAlB,EAAyB;AAC7BuV,MAAAA,KAAK,CAAC9qQ,IAAN,CAAW;AACT0M,QAAAA,MAAM,EAAEA,MADC;AAET6oP,QAAAA,KAAK,EAAEA;AAFE,OAAX;AAIA,aAAOhsO,QAAP;AACD;AAbe,GAAlB;AAeD;;AAED,MAAMwhP,MAAM,GAAG;AACb,WAAS;AACPnoB,IAAAA,KAAK,EAAEooB;AADA,GADI;AAIb,kBAAgB;AACdpoB,IAAAA,KAAK,EAAEqoB;AADO,GAJH;AAOb,gBAAc;AACZroB,IAAAA,KAAK,EAAEsoB;AADK,GAPD;AAUb,YAAU;AACRtoB,IAAAA,KAAK,EAAEuoB,oBADC;AAERrkB,IAAAA,OAAO,EAAE,MAFD;AAGR/jP,IAAAA,KAAK,EAAE;AAHC,GAVG;AAeb,cAAY;AACV6/O,IAAAA,KAAK,EAAEwoB,sBADG;AAEVtkB,IAAAA,OAAO,EAAE,SAFC;AAGV/jP,IAAAA,KAAK,EAAE;AAHG,GAfC;AAoBb,mBAAiB;AACf6/O,IAAAA,KAAK,EAAEyoB,0BADQ;AAEfvkB,IAAAA,OAAO,EAAE,SAFM;AAGf/jP,IAAAA,KAAK,EAAE;AAHQ,GApBJ;AAyBb,qBAAmB;AACjB6/O,IAAAA,KAAK,EAAE0oB,4BADU;AAEjBxkB,IAAAA,OAAO,EAAE,SAFQ;AAGjB/jP,IAAAA,KAAK,EAAE;AAHU,GAzBN;AA8Bb,iBAAe;AACb6/O,IAAAA,KAAK,EAAE2oB,wBADM;AAEbzkB,IAAAA,OAAO,EAAE,OAFI;AAGb/jP,IAAAA,KAAK,EAAE;AAHM,GA9BF;AAmCb,wBAAsB;AACpB6/O,IAAAA,KAAK,EAAE4oB,8BADa;AAEpB1kB,IAAAA,OAAO,EAAE,OAFW;AAGpB/jP,IAAAA,KAAK,EAAE;AAHa,GAnCT;AAwCb,sBAAoB;AAClB6/O,IAAAA,KAAK,EAAE6oB,4BADW;AAElB3kB,IAAAA,OAAO,EAAE,OAFS;AAGlB/jP,IAAAA,KAAK,EAAE;AAHW,GAxCP;AA6Cb,YAAU;AACR6/O,IAAAA,KAAK,EAAEC;AADC,GA7CG;AAgDb,mBAAiB;AACfD,IAAAA,KAAK,EAAE8oB;AADQ,GAhDJ;AAmDb,cAAY;AACVC,IAAAA,UAAU,EAAEC,uBADF;AAEVC,IAAAA,QAAQ,EAAEC;AAFA,GAnDC;AAuDb,aAAW;AACTlpB,IAAAA,KAAK,EAAEmpB;AADE,GAvDE;AA0Db,UAAQ;AACNnpB,IAAAA,KAAK,EAAEopB;AADD,GA1DK;AA6Db,gBAAc;AACZppB,IAAAA,KAAK,EAAEqpB;AADK,GA7DD;AAgEb,iBAAe;AACbrpB,IAAAA,KAAK,EAAEspB;AADM;AAhEF,CAAf;;AAoEA,SAASC,MAAT,CAAgBnsP,IAAhB,EAAsBosP,WAAtB,EAAmCtlB,OAAnC,EAA4C;AAC1C,MAAI77H,KAAK,GAAG,8BAAe8/I,MAAf,EAAuB/qP,IAAvB,KAAgC+qP,MAAM,CAAC/qP,IAAD,CAAlD;AAAA,MACI4iO,KAAK,GAAG,IADZ;;AAGA,MAAI33H,KAAJ,EAAW;AACT23H,IAAAA,KAAK,GAAG33H,KAAK,CAAC23H,KAAN,IAAe33H,KAAK,CAACmhJ,WAAW,IAAI,UAAhB,CAA5B;;AAEA,QAAInhJ,KAAK,CAAC67H,OAAN,IAAiBA,OAAO,IAAI,IAAhC,EAAsC;AACpClE,MAAAA,KAAK,GAAGA,KAAK,CAAC33H,KAAK,CAAC67H,OAAP,CAAL,CAAqBA,OAArB,CAAR;AACD;AACF;;AAED,SAAOlE,KAAP;AACD,EAED;;;AACA,MAAMypB,MAAM,GAAG;AACb70K,EAAAA,CAAC,EAAE,CADU;AAEb3lF,EAAAA,CAAC,EAAE,CAFU;AAGby6C,EAAAA,CAAC,EAAE,CAHU;AAIbr6C,EAAAA,CAAC,EAAE,CAJU;AAKbzF,EAAAA,CAAC,EAAE,CALU;AAMbjJ,EAAAA,CAAC,EAAE,CANU;AAObk0F,EAAAA,CAAC,EAAE,CAPU;AAQbh0F,EAAAA,CAAC,EAAE,CARU;AASbwD,EAAAA,CAAC,EAAE;AATU,CAAf;AAAA,MAWMs0L,MAAM,GAAG,CAAC,2BAAD,EAA8B,KAA9B,EAAqC,gBAArC,EAAuD,aAAvD,EAAsE,UAAtE,CAXf;;AAYA,SAAS+wE,SAAT,CAAoBC,OAApB,EAA6B;AAC3B,QAAMtnQ,MAAM,GAAG,EAAf;AACA,MAAI8vK,IAAJ,EAAU3+F,MAAV,EAAkBq1H,MAAlB,EAA0B12J,KAA1B,EAAiCy3N,GAAjC,EAAsC/sQ,GAAtC,EAA2CM,CAA3C,EAA8CiK,CAA9C,EAAiDiE,CAAjD,EAAoDupF,CAApD,CAF2B,CAE4B;;AAEvD,QAAMppF,IAAI,GAAGm+P,OAAO,CAACnjQ,KAAR,GAAgB9F,OAAhB,CAAwBi4L,MAAM,CAAC,CAAD,CAA9B,EAAmC,OAAnC,EAA4C33L,KAA5C,CAAkD23L,MAAM,CAAC,CAAD,CAAxD,EAA6DnyL,KAA7D,CAAmE,CAAnE,CAAb,CAJ2B,CAIyD;;AAEpF,OAAKrJ,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGG,IAAI,CAAC/O,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCg1K,IAAAA,IAAI,GAAG3mK,IAAI,CAACrO,CAAD,CAAX;AACAq2E,IAAAA,MAAM,GAAG2+F,IAAI,CAAC3rK,KAAL,CAAW,CAAX,EAAc4xG,IAAd,GAAqB13G,OAArB,CAA6Bi4L,MAAM,CAAC,CAAD,CAAnC,EAAwC,SAAxC,EAAmDj4L,OAAnD,CAA2Di4L,MAAM,CAAC,CAAD,CAAjE,EAAsE,SAAtE,EAAiF33L,KAAjF,CAAuF23L,MAAM,CAAC,CAAD,CAA7F,CAAT;AACAixE,IAAAA,GAAG,GAAGz3F,IAAI,CAACz3H,MAAL,CAAY,CAAZ,CAAN;AACAmuJ,IAAAA,MAAM,GAAG,CAAC+gE,GAAD,CAAT;;AAEA,SAAKxiQ,CAAC,GAAG,CAAJ,EAAOwtF,CAAC,GAAGphB,MAAM,CAAC/2E,MAAvB,EAA+B2K,CAAC,GAAGwtF,CAAnC,EAAsC,EAAExtF,CAAxC,EAA2C;AACzC,UAAI,CAAC+qC,KAAK,GAAG,CAACqhC,MAAM,CAACpsE,CAAD,CAAhB,MAAyB+qC,KAA7B,EAAoC;AAClC;AACA02J,QAAAA,MAAM,CAACzrM,IAAP,CAAY+0C,KAAZ;AACD;AACF;;AAEDt1C,IAAAA,GAAG,GAAG4sQ,MAAM,CAACG,GAAG,CAACtoQ,WAAJ,EAAD,CAAZ;;AAEA,QAAIunM,MAAM,CAACpsM,MAAP,GAAgB,CAAhB,GAAoBI,GAAxB,EAA6B;AAC3B,YAAM+3F,CAAC,GAAGi0G,MAAM,CAACpsM,MAAjB;AACA2K,MAAAA,CAAC,GAAG,CAAJ;AACA/E,MAAAA,MAAM,CAACjF,IAAP,CAAY,CAACwsQ,GAAD,EAAMltQ,MAAN,CAAamsM,MAAM,CAACriM,KAAP,CAAaY,CAAb,EAAgBA,CAAC,IAAIvK,GAArB,CAAb,CAAZ,EAH2B,CAG2B;;AAEtD+sQ,MAAAA,GAAG,GAAGA,GAAG,KAAK,GAAR,GAAc,GAAd,GAAoBA,GAAG,KAAK,GAAR,GAAc,GAAd,GAAoBA,GAA9C;;AAEA,aAAOxiQ,CAAC,GAAGwtF,CAAX,EAAcxtF,CAAC,IAAIvK,GAAnB,EAAwB;AACtBwF,QAAAA,MAAM,CAACjF,IAAP,CAAY,CAACwsQ,GAAD,EAAMltQ,MAAN,CAAamsM,MAAM,CAACriM,KAAP,CAAaY,CAAb,EAAgBA,CAAC,GAAGvK,GAApB,CAAb,CAAZ;AACD;AACF,KAVD,MAUO;AACLwF,MAAAA,MAAM,CAACjF,IAAP,CAAYyrM,MAAZ;AACD;AACF;;AAED,SAAOxmM,MAAP;AACD;;AAED,MAAMwnQ,QAAQ,GAAG3mQ,IAAI,CAACuiC,EAAL,GAAU,GAA3B;AACA,MAAMqkO,OAAO,GAAG,KAAhB;AACA,MAAMC,MAAM,GAAG7mQ,IAAI,CAACuiC,EAAL,GAAU,CAAzB;AACA,MAAMukO,GAAG,GAAG9mQ,IAAI,CAACuiC,EAAL,GAAU,CAAtB;AACA,MAAMwkO,SAAS,GAAG/mQ,IAAI,CAACqC,IAAL,CAAU,CAAV,IAAe,CAAjC;AAEA,IAAI2kQ,YAAY,GAAG,EAAnB;AACA,IAAIC,WAAW,GAAG,EAAlB;AACA,IAAIppQ,IAAI,GAAG,GAAGA,IAAd,EAAoB;;AAEpB,SAASqpQ,QAAT,CAAkB9mQ,CAAlB,EAAqBue,CAArB,EAAwBwoP,EAAxB,EAA4BC,EAA5B,EAAgCC,KAAhC,EAAuCC,KAAvC,EAA8CC,OAA9C,EAAuDptB,EAAvD,EAA2DC,EAA3D,EAA+D;AAC7D,QAAMl8O,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUiB,SAAV,CAAZ;;AAEA,MAAIgtQ,YAAY,CAAC9oQ,GAAD,CAAhB,EAAuB;AACrB,WAAO8oQ,YAAY,CAAC9oQ,GAAD,CAAnB;AACD;;AAED,QAAMspQ,EAAE,GAAGD,OAAO,GAAGZ,QAArB;AACA,QAAMc,MAAM,GAAGznQ,IAAI,CAAC+T,GAAL,CAASyzP,EAAT,CAAf;AACA,QAAME,MAAM,GAAG1nQ,IAAI,CAACgU,GAAL,CAASwzP,EAAT,CAAf;AACAL,EAAAA,EAAE,GAAGnnQ,IAAI,CAACiT,GAAL,CAASk0P,EAAT,CAAL;AACAC,EAAAA,EAAE,GAAGpnQ,IAAI,CAACiT,GAAL,CAASm0P,EAAT,CAAL;AACA,QAAMrkB,EAAE,GAAG2kB,MAAM,IAAIvtB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAApB,GAA0BqnQ,MAAM,IAAIrtB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAAzD;AACA,QAAMskO,EAAE,GAAGykB,MAAM,IAAIttB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAApB,GAA0B8oP,MAAM,IAAIttB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAAzD;AACA,MAAIunQ,EAAE,GAAG5kB,EAAE,GAAGA,EAAL,IAAWokB,EAAE,GAAGA,EAAhB,IAAsBlkB,EAAE,GAAGA,EAAL,IAAWmkB,EAAE,GAAGA,EAAhB,CAA/B;;AAEA,MAAIO,EAAE,GAAG,CAAT,EAAY;AACVA,IAAAA,EAAE,GAAG3nQ,IAAI,CAACqC,IAAL,CAAUslQ,EAAV,CAAL;AACAR,IAAAA,EAAE,IAAIQ,EAAN;AACAP,IAAAA,EAAE,IAAIO,EAAN;AACD;;AAED,QAAMnsB,GAAG,GAAGksB,MAAM,GAAGP,EAArB;AACA,QAAM7rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAM1rB,GAAG,GAAG,CAACgsB,MAAD,GAAUL,EAAtB;AACA,QAAM7rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAM9sD,EAAE,GAAGkhC,GAAG,GAAGrB,EAAN,GAAWmB,GAAG,GAAGlB,EAA5B;AACA,QAAM7/B,EAAE,GAAGkhC,GAAG,GAAGtB,EAAN,GAAWoB,GAAG,GAAGnB,EAA5B;AACA,QAAM1tI,EAAE,GAAG8uI,GAAG,GAAGp7O,CAAN,GAAUk7O,GAAG,GAAG38N,CAA3B;AACA,QAAM8tF,EAAE,GAAGgvI,GAAG,GAAGr7O,CAAN,GAAUm7O,GAAG,GAAG58N,CAA3B;AACA,QAAM7X,CAAC,GAAG,CAAC4lG,EAAE,GAAG4tG,EAAN,KAAa5tG,EAAE,GAAG4tG,EAAlB,IAAwB,CAAC7tG,EAAE,GAAG8tG,EAAN,KAAa9tG,EAAE,GAAG8tG,EAAlB,CAAlC;AACA,MAAIqtD,UAAU,GAAG,IAAI9gQ,CAAJ,GAAQ,IAAzB;AACA,MAAI8gQ,UAAU,GAAG,CAAjB,EAAoBA,UAAU,GAAG,CAAb;AACpB,MAAIC,OAAO,GAAG7nQ,IAAI,CAACqC,IAAL,CAAUulQ,UAAV,CAAd;AACA,MAAIN,KAAK,IAAID,KAAb,EAAoBQ,OAAO,GAAG,CAACA,OAAX;AACpB,QAAMC,EAAE,GAAG,OAAOxtD,EAAE,GAAG5tG,EAAZ,IAAkBm7J,OAAO,IAAIp7J,EAAE,GAAG8tG,EAAT,CAApC;AACA,QAAMwtD,EAAE,GAAG,OAAOxtD,EAAE,GAAG9tG,EAAZ,IAAkBo7J,OAAO,IAAIn7J,EAAE,GAAG4tG,EAAT,CAApC;AACA,QAAM0tD,GAAG,GAAGhoQ,IAAI,CAACuQ,KAAL,CAAWgqM,EAAE,GAAGwtD,EAAhB,EAAoBztD,EAAE,GAAGwtD,EAAzB,CAAZ;AACA,QAAMG,GAAG,GAAGjoQ,IAAI,CAACuQ,KAAL,CAAWk8F,EAAE,GAAGs7J,EAAhB,EAAoBr7J,EAAE,GAAGo7J,EAAzB,CAAZ;AACA,MAAII,MAAM,GAAGD,GAAG,GAAGD,GAAnB;;AAEA,MAAIE,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AAC7BY,IAAAA,MAAM,IAAIpB,GAAV;AACD,GAFD,MAEO,IAAIoB,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AACpCY,IAAAA,MAAM,IAAIpB,GAAV;AACD;;AAED,QAAMqB,IAAI,GAAGnoQ,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACiT,GAAL,CAASi1P,MAAM,IAAIrB,MAAM,GAAG,KAAb,CAAf,CAAV,CAAb;AACA,QAAM1nQ,MAAM,GAAG,EAAf;;AAEA,OAAK,IAAIlF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuQ,IAApB,EAA0B,EAAEluQ,CAA5B,EAA+B;AAC7B,UAAMmuQ,GAAG,GAAGJ,GAAG,GAAG/tQ,CAAC,GAAGiuQ,MAAJ,GAAaC,IAA/B;AACA,UAAME,GAAG,GAAGL,GAAG,GAAG,CAAC/tQ,CAAC,GAAG,CAAL,IAAUiuQ,MAAV,GAAmBC,IAArC;AACAhpQ,IAAAA,MAAM,CAAClF,CAAD,CAAN,GAAY,CAAC6tQ,EAAD,EAAKC,EAAL,EAASK,GAAT,EAAcC,GAAd,EAAmBlB,EAAnB,EAAuBC,EAAvB,EAA2BK,MAA3B,EAAmCC,MAAnC,CAAZ;AACD;;AAED,SAAOV,YAAY,CAAC9oQ,GAAD,CAAZ,GAAoBiB,MAA3B;AACD;;AACD,SAASmpQ,MAAT,CAAgBhrQ,MAAhB,EAAwB;AACtB,QAAMY,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUuE,MAAV,CAAZ;;AAEA,MAAI2pQ,WAAW,CAAC/oQ,GAAD,CAAf,EAAsB;AACpB,WAAO+oQ,WAAW,CAAC/oQ,GAAD,CAAlB;AACD;;AAED,MAAIg9O,EAAE,GAAG59O,MAAM,CAAC,CAAD,CAAf;AAAA,MACI69O,EAAE,GAAG79O,MAAM,CAAC,CAAD,CADf;AAAA,MAEI0qQ,GAAG,GAAG1qQ,MAAM,CAAC,CAAD,CAFhB;AAAA,MAGI2qQ,GAAG,GAAG3qQ,MAAM,CAAC,CAAD,CAHhB;AAAA,MAII6pQ,EAAE,GAAG7pQ,MAAM,CAAC,CAAD,CAJf;AAAA,MAKI8pQ,EAAE,GAAG9pQ,MAAM,CAAC,CAAD,CALf;AAAA,MAMImqQ,MAAM,GAAGnqQ,MAAM,CAAC,CAAD,CANnB;AAAA,MAOIoqQ,MAAM,GAAGpqQ,MAAM,CAAC,CAAD,CAPnB;AAQA,QAAMk+O,GAAG,GAAGksB,MAAM,GAAGP,EAArB;AACA,QAAM7rB,GAAG,GAAG,CAACmsB,MAAD,GAAUL,EAAtB;AACA,QAAM3rB,GAAG,GAAGgsB,MAAM,GAAGN,EAArB;AACA,QAAM5rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAMmB,OAAO,GAAGvoQ,IAAI,CAACgU,GAAL,CAASg0P,GAAT,CAAhB;AACA,QAAMQ,OAAO,GAAGxoQ,IAAI,CAAC+T,GAAL,CAASi0P,GAAT,CAAhB;AACA,QAAMS,OAAO,GAAGzoQ,IAAI,CAACgU,GAAL,CAASi0P,GAAT,CAAhB;AACA,QAAMS,OAAO,GAAG1oQ,IAAI,CAAC+T,GAAL,CAASk0P,GAAT,CAAhB;AACA,QAAMU,OAAO,GAAG,OAAOV,GAAG,GAAGD,GAAb,CAAhB;AACA,QAAMY,SAAS,GAAG5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAO,GAAG,GAAnB,CAAlB;AACA,QAAMhrQ,CAAC,GAAG,IAAI,CAAJ,GAAQirQ,SAAR,GAAoBA,SAApB,GAAgC5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAT,CAA1C;AACA,QAAMj8J,EAAE,GAAGwuI,EAAE,GAAGqtB,OAAL,GAAe5qQ,CAAC,GAAG6qQ,OAA9B;AACA,QAAM/7J,EAAE,GAAG0uI,EAAE,GAAGqtB,OAAL,GAAe7qQ,CAAC,GAAG4qQ,OAA9B;AACA,QAAM5uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAhB;AACA,QAAM7uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAhB;AACA,QAAM3vL,EAAE,GAAG4gK,EAAE,GAAGh8O,CAAC,GAAG+qQ,OAApB;AACA,QAAM/7J,EAAE,GAAGitI,EAAE,GAAGj8O,CAAC,GAAG8qQ,OAApB;AACA,SAAOxB,WAAW,CAAC/oQ,GAAD,CAAX,GAAmB,CAACs9O,GAAG,GAAG9uI,EAAN,GAAW4uI,GAAG,GAAG7uI,EAAlB,EAAsBgvI,GAAG,GAAG/uI,EAAN,GAAW6uI,GAAG,GAAG9uI,EAAvC,EAA2C+uI,GAAG,GAAGziK,EAAN,GAAWuiK,GAAG,GAAG3uI,EAA5D,EAAgE8uI,GAAG,GAAG1iK,EAAN,GAAWwiK,GAAG,GAAG5uI,EAAjF,EAAqF6uI,GAAG,GAAG7B,EAAN,GAAW2B,GAAG,GAAG1B,EAAtG,EAA0G6B,GAAG,GAAG9B,EAAN,GAAW4B,GAAG,GAAG3B,EAA3H,CAA1B;AACD;;AAED,MAAM95O,IAAI,GAAG,CAAC,GAAD,EAAM,CAAN,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,CAAb;;AAEA,SAASgQ,KAAT,CAAei7J,OAAf,EAAwB89F,EAAxB,EAA4BC,EAA5B,EAAgC;AAC9B,QAAMpiQ,CAAC,GAAG5G,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAA3B;;AAEA,MAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AAC1B5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GARD,MAQO,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA;AACL,SAAK,IAAI9wK,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4iK,OAAO,CAACxxK,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C6F,MAAAA,IAAI,CAAC7F,CAAD,CAAJ,GAAU,CAACA,CAAC,GAAG,CAAJ,IAAS,CAAT,GAAa4uQ,EAAb,GAAkBC,EAAnB,IAAyB/9F,OAAO,CAAC9wK,CAAD,CAA1C;AACD;AACF;;AAED,SAAO6F,IAAP;AACD;;AAED,SAASipQ,UAAT,CAAqB98F,OAArB,EAA8B3jK,IAA9B,EAAoCyD,CAApC,EAAuCpO,CAAvC,EAA0CkrQ,EAA1C,EAA8CC,EAA9C,EAAkD;AAChD,MAAI/9F,OAAJ;AAAA,MACI;AACJ+2C,EAAAA,QAAQ,GAAG,IAFX;AAAA,MAGI1hN,CAAC,GAAG,CAHR;AAAA,MAII;AACJue,EAAAA,CAAC,GAAG,CALJ;AAAA,MAMI;AACJqqP,EAAAA,QAAQ,GAAG,CAPX;AAAA,MAQI;AACJC,EAAAA,QAAQ,GAAG,CATX;AAAA,MAUI;AACJC,EAAAA,KAXA;AAAA,MAYIC,KAZJ;AAAA,MAaIC,YAbJ;AAAA,MAcIC,YAdJ;AAeA,MAAIt9P,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIpO,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIkrQ,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,MAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGD,EAAL;AAChB,MAAI58F,OAAO,CAACq9F,SAAZ,EAAuBr9F,OAAO,CAACq9F,SAAR;;AAEvB,OAAK,IAAIrvQ,CAAC,GAAG,CAAR,EAAWN,GAAG,GAAG2O,IAAI,CAAC/O,MAA3B,EAAmCU,CAAC,GAAGN,GAAvC,EAA4C,EAAEM,CAA9C,EAAiD;AAC/C8wK,IAAAA,OAAO,GAAGziK,IAAI,CAACrO,CAAD,CAAd;;AAEA,QAAI4uQ,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB/9F,MAAAA,OAAO,GAAGj7J,KAAK,CAACi7J,OAAD,EAAU89F,EAAV,EAAcC,EAAd,CAAf;AACD;;AAED,YAAQ/9F,OAAO,CAAC,CAAD,CAAf;AACE;AACA,WAAK,GAAL;AACE;AACA3qK,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAghB,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAghB,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AACAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBz3O,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CAAvC,EAA0C;AAC1C4S,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CADjB,EACoB;AACpBqrQ,QAAAA,QAAQ,GAAGj9P,CAFX,EAEc;AACdk9P,QAAAA,QAAQ,GAAGtrQ,CAHX,EAGc;AACdurQ,QAAAA,KAAK,GAAGn9P,CAJR,EAIWo9P,KAAK,GAAGxrQ,CAJnB;AAKAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACA/oQ,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAi+F,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CAAsB9sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAAnC,EAAsCg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAAnD,EAAsDqrQ,QAAQ,GAAGj9P,CAAjE,EAAoEk9P,QAAQ,GAAGtrQ,CAA/E,EAAkFyC,CAAC,GAAG2L,CAAtF,EAAyF4S,CAAC,GAAGhhB,CAA7F;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB,CAJF,CAI0B;;AAExBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBmxB,QAAQ,GAAGj9P,CAAjC,EAAoCk9P,QAAQ,GAAGtrQ,CAA/C,EAAkDyC,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CAAnE,EAAsE4S,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CAAvF,EAA0FurQ,KAAK,GAAGn9P,CAAlG,EAAqGo9P,KAAK,GAAGxrQ,CAA7G,EARF,CAQmH;AACjH;AACA;AACA;;AAEAqrQ,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACA3qK,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACAD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAHF,CAGsB;;AAEpBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBmxB,QAAQ,GAAGj9P,CAAjC,EAAoCk9P,QAAQ,GAAGtrQ,CAA/C,EAAkDotK,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAA/D,EAAkEg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAA/E,EAAkFurQ,KAAK,GAAGn9P,CAA1F,EAA6Fo9P,KAAK,GAAGxrQ,CAArG;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ,CATF,CASa;AACX;AACA;AACA;;AAEAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AACAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACAD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf;AACAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyB7sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAAtC,EAAyCg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAAtD,EAAyDurQ,KAAK,GAAGn9P,CAAjE,EAAoEo9P,KAAK,GAAGxrQ,CAA5E;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;;AAEA,YAAI+2C,QAAQ,CAAC,CAAD,CAAR,CAAYz8F,KAAZ,CAAkB,QAAlB,MAAgC,IAApC,EAA0C;AACxC;AACA;AACA2jJ,UAAAA,QAAQ,GAAG5oQ,CAAX;AACA6oQ,UAAAA,QAAQ,GAAGtqP,CAAX;AACD,SALD,MAKO,IAAImjM,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC9B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQgpQ,YAAnB;AACAH,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQ0qP,YAAnB;AACD,SAJM,MAIA,IAAIvnD,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC9B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACD;;AAEDG,QAAAA,YAAY,GAAGJ,QAAf;AACAK,QAAAA,YAAY,GAAGJ,QAAf;AACAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACA;;AAEF,WAAK,GAAL;AACEm+F,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAFF,CAEsB;;AAEpBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACEI,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAACotK,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,EAAiDA,OAAO,CAAC,CAAD,CAAxD,EAA6DA,OAAO,CAAC,CAAD,CAAP,GAAa3qK,CAAb,GAAiB2L,CAA9E,EAAiFg/J,OAAO,CAAC,CAAD,CAAP,GAAapsJ,CAAb,GAAiBhhB,CAAlG,CAAxB,CAAP;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACA;;AAEF,WAAK,GAAL;AACEw+F,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAACotK,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,EAAiDA,OAAO,CAAC,CAAD,CAAxD,EAA6DA,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAA1E,EAA6Eg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAA1F,CAAxB,CAAP;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACA;;AAEF,WAAK,GAAL;AACA,WAAK,GAAL;AACEkB,QAAAA,OAAO,CAACyrE,SAAR;AACA;AAlMJ;;AAqMA51B,IAAAA,QAAQ,GAAG/2C,OAAX;AACD;AACF;;AAED,SAASw+F,OAAT,CAAiBt9F,OAAjB,EAA0B7rK,CAA1B,EAA6Bue,CAA7B,EAAgCs3B,MAAhC,EAAwC;AACtC,QAAMuzN,GAAG,GAAGtC,QAAQ,CAACjxN,MAAM,CAAC,CAAD,CAAP,EAAY;AAChCA,EAAAA,MAAM,CAAC,CAAD,CADc,EACT;AACXA,EAAAA,MAAM,CAAC,CAAD,CAFc,EAET;AACXA,EAAAA,MAAM,CAAC,CAAD,CAHc,EAGT;AACXA,EAAAA,MAAM,CAAC,CAAD,CAJc,EAIT;AACXA,EAAAA,MAAM,CAAC,CAAD,CALc,EAKT;AACXA,EAAAA,MAAM,CAAC,CAAD,CANc,EAMT;AACX71C,EAAAA,CAPoB,EAOjBue,CAPiB,CAApB;;AASA,OAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuvQ,GAAG,CAACjwQ,MAAxB,EAAgC,EAAEU,CAAlC,EAAqC;AACnC,UAAMwvQ,GAAG,GAAGnB,MAAM,CAACkB,GAAG,CAACvvQ,CAAD,CAAJ,CAAlB;AACAgyK,IAAAA,OAAO,CAAC4rE,aAAR,CAAsB4xB,GAAG,CAAC,CAAD,CAAzB,EAA8BA,GAAG,CAAC,CAAD,CAAjC,EAAsCA,GAAG,CAAC,CAAD,CAAzC,EAA8CA,GAAG,CAAC,CAAD,CAAjD,EAAsDA,GAAG,CAAC,CAAD,CAAzD,EAA8DA,GAAG,CAAC,CAAD,CAAjE;AACD;AACF;;AAED,MAAMC,KAAK,GAAG,kBAAd;AACA,MAAMC,QAAQ,GAAG;AACf,YAAU;AACRxqB,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwB6+P,GAAxB;AACD;AALO,GADK;AAQf,WAAS;AACP3nB,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,GADZ;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAACxK,CAApB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBA,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBxK,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACwK,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACA,CAApB;AACAwuK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAjBM,GARM;AA2Bf,aAAW;AACTyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB1vO,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARQ,GA3BI;AAqCf,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAI6kD,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUX,IAAV,CAAR;AAAA,UACItB,CAAC,GAAG,CAACmmD,CAAD,GAAK,CADb;AAEA0lH,MAAAA,OAAO,CAAC6sE,IAAR,CAAa14O,CAAb,EAAgBA,CAAhB,EAAmBmmD,CAAnB,EAAsBA,CAAtB;AACD;AALO,GArCK;AA4Cf,WAAS;AACP44L,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,CADZ;AAAA,UAEItK,CAAC,GAAGsK,CAAC,GAAG,GAFZ;AAAA,UAGIkE,CAAC,GAAGlE,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACh6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAAC0O,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAeh6O,CAAf,EAAkB,CAACwO,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACh6O,CAAhB,EAAmB,CAACwO,CAApB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAAC0O,CAApB;AACA8/J,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAdM,GA5CM;AA4Df,WAAS;AACPyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAAA,UAEI2d,CAAC,GAAG4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFhB;AAAA,UAGI1hQ,CAAC,GAAGC,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC3vO,CAAhB,EAAmBw+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe3vO,CAAf,EAAkBw+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAVM,GA5DM;AAwEf,cAAY;AACVyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAAA,UAEI2d,CAAC,GAAG4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFhB;AAGAz9F,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AATS,GAxEG;AAmFf,iBAAe;AACbyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAlB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARY,GAnFA;AA6Ff,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkBjxL,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,CAACu+C,CAApB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACu+C,CAAnB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GA7FF;AAuGf,oBAAkB;AAChByH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAejxL,CAAf,EAAkB,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmB,CAACv+C,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmBv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARe,GAvGH;AAiHf,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACjxL,CAAhB,EAAmB,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkB,CAACv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkBv+C,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GAjHF;AA2Hf,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACD;AALO;AA3HK,CAAjB;;AAmIA,SAASw3O,OAAT,CAAiB7+N,CAAjB,EAAoB;AAClB,SAAO,8BAAe+oP,QAAf,EAAyB/oP,CAAzB,IAA8B+oP,QAAQ,CAAC/oP,CAAD,CAAtC,GAA4CgpP,YAAY,CAAChpP,CAAD,CAA/D;AACD;;AACD,IAAIigO,MAAM,GAAG,EAAb;;AAEA,SAAS+oB,YAAT,CAAsBthQ,IAAtB,EAA4B;AAC1B,MAAI,CAAC,8BAAeu4O,MAAf,EAAuBv4O,IAAvB,CAAL,EAAmC;AACjC,UAAMq9L,MAAM,GAAG6gE,SAAS,CAACl+P,IAAD,CAAxB;AACAu4O,IAAAA,MAAM,CAACv4O,IAAD,CAAN,GAAe;AACb62O,MAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7BqnQ,QAAAA,UAAU,CAAC98F,OAAD,EAAU05B,MAAV,EAAkB,CAAlB,EAAqB,CAArB,EAAwB3lM,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1C,CAAV;AACD;AAHY,KAAf;AAKD;;AAED,SAAOm/O,MAAM,CAACv4O,IAAD,CAAb;AACD;;AAED,MAAMgqP,CAAC,GAAG,cAAV,EAA0B;;AAE1B,SAASuX,UAAT,CAAoB/iQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC1G,CAAT;AACD;;AAED,SAAS0pQ,UAAT,CAAoBhjQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC6X,CAAT;AACD;;AAED,SAASorP,cAAT,CAAwBjjQ,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAAC3E,KAAT;AACD;;AAED,SAAS6nQ,eAAT,CAAyBljQ,CAAzB,EAA4B;AAC1B,SAAOA,CAAC,CAACopB,MAAT;AACD;;AAED,SAAS+lL,MAAT,CAAgBr1L,CAAhB,EAAmB;AACjB,SAAO,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,MAAM,CAACA,CAA5C;AACD;;AAED,SAAS1gB,KAAT,CAAejD,KAAf,EAAsBkD,GAAtB,EAA2BE,GAA3B,EAAgC;AAC9B,SAAOL,IAAI,CAACK,GAAL,CAASF,GAAT,EAAcH,IAAI,CAACG,GAAL,CAASlD,KAAT,EAAgBoD,GAAhB,CAAd,CAAP;AACD;;AAED,SAAS4pQ,OAAT,GAAoB;AAClB,MAAI7pQ,CAAC,GAAGypQ,UAAR;AAAA,MACIlrP,CAAC,GAAGmrP,UADR;AAAA,MAEI3nQ,KAAK,GAAG4nQ,cAFZ;AAAA,MAGI75O,MAAM,GAAG85O,eAHb;AAAA,MAIIE,IAAI,GAAGj0D,MAAM,CAAC,CAAD,CAJjB;AAAA,MAKIk0D,IAAI,GAAGD,IALX;AAAA,MAMIE,IAAI,GAAGF,IANX;AAAA,MAOIG,IAAI,GAAGH,IAPX;AAAA,MAQIj+F,OAAO,GAAG,IARd;;AAUA,WAASq+F,SAAT,CAAmB1pP,CAAnB,EAAsB05L,EAAtB,EAA0BC,EAA1B,EAA8B;AAC5B,QAAIzsM,MAAJ;AAAA,QACI4+F,EAAE,GAAG4tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAACl6M,CAAC,CAACrH,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAD5B;AAAA,QAEI6rF,EAAE,GAAG8tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAC57L,CAAC,CAAC5lB,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAF5B;AAAA,QAGI2lC,CAAC,GAAG,CAACpkD,KAAK,CAACpJ,IAAN,CAAW,IAAX,EAAiB6nB,CAAjB,CAHT;AAAA,QAII4lC,CAAC,GAAG,CAACt2B,MAAM,CAACn3B,IAAP,CAAY,IAAZ,EAAkB6nB,CAAlB,CAJT;AAAA,QAKInjB,CAAC,GAAGuC,IAAI,CAACG,GAAL,CAASomD,CAAT,EAAYC,CAAZ,IAAiB,CALzB;AAAA,QAMI+jN,EAAE,GAAGrqQ,KAAK,CAAC,CAACgqQ,IAAI,CAACnxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CANd;AAAA,QAOI+sQ,EAAE,GAAGtqQ,KAAK,CAAC,CAACiqQ,IAAI,CAACpxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CAPd;AAAA,QAQIo1P,EAAE,GAAG3yP,KAAK,CAAC,CAACkqQ,IAAI,CAACrxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CARd;AAAA,QASIgtQ,EAAE,GAAGvqQ,KAAK,CAAC,CAACmqQ,IAAI,CAACtxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CATd;AAUA,QAAI,CAACwuK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAEd,QAAIy8P,EAAE,IAAI,CAAN,IAAWC,EAAE,IAAI,CAAjB,IAAsB3X,EAAE,IAAI,CAA5B,IAAiC4X,EAAE,IAAI,CAA3C,EAA8C;AAC5Cx+F,MAAAA,OAAO,CAAC6sE,IAAR,CAAapsI,EAAb,EAAiBD,EAAjB,EAAqBlmD,CAArB,EAAwBC,CAAxB;AACD,KAFD,MAEO;AACL,UAAIuyB,EAAE,GAAG2zB,EAAE,GAAGnmD,CAAd;AAAA,UACIomD,EAAE,GAAGF,EAAE,GAAGjmD,CADd;AAEAylH,MAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAG69J,EAApB,EAAwB99J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAGyxL,EAApB,EAAwB/9J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAE,GAAGu5K,CAAC,GAAGkY,EAA/B,EAAmC/9J,EAAnC,EAAuC1zB,EAAvC,EAA2C0zB,EAAE,GAAG6lJ,CAAC,GAAGkY,EAApD,EAAwDzxL,EAAxD,EAA4D0zB,EAAE,GAAG+9J,EAAjE;AACAv+F,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAE,GAAG89J,EAAxB;AACAx+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAtB,EAA0B4zB,EAAE,GAAG2lJ,CAAC,GAAGmY,EAAnC,EAAuC1xL,EAAE,GAAGu5K,CAAC,GAAGmY,EAAhD,EAAoD99J,EAApD,EAAwD5zB,EAAE,GAAG0xL,EAA7D,EAAiE99J,EAAjE;AACAs/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGmmJ,EAApB,EAAwBlmJ,EAAxB;AACAs/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAE,GAAG4lJ,CAAC,GAAGO,EAA/B,EAAmClmJ,EAAnC,EAAuCD,EAAvC,EAA2CC,EAAE,GAAG2lJ,CAAC,GAAGO,EAApD,EAAwDnmJ,EAAxD,EAA4DC,EAAE,GAAGkmJ,EAAjE;AACA5mF,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAf,EAAmBD,EAAE,GAAG89J,EAAxB;AACAt+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAtB,EAA0BD,EAAE,GAAG6lJ,CAAC,GAAGiY,EAAnC,EAAuC79J,EAAE,GAAG4lJ,CAAC,GAAGiY,EAAhD,EAAoD99J,EAApD,EAAwDC,EAAE,GAAG69J,EAA7D,EAAiE99J,EAAjE;AACAw/D,MAAAA,OAAO,CAACyrE,SAAR;AACD;;AAED,QAAI5pO,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAEDw8P,EAAAA,SAAS,CAAClqQ,CAAV,GAAc,UAAUwgB,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAG61M,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOlqQ,CAAP;AACD;AACF,GAPD;;AASAkqQ,EAAAA,SAAS,CAAC3rP,CAAV,GAAc,UAAUiC,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGs3L,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAO3rP,CAAP;AACD;AACF,GAPD;;AASA2rP,EAAAA,SAAS,CAACnoQ,KAAV,GAAkB,UAAUye,CAAV,EAAa;AAC7B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4I,MAAAA,KAAK,GAAG8zM,MAAM,CAACr1L,CAAD,CAAd;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOnoQ,KAAP;AACD;AACF,GAPD;;AASAmoQ,EAAAA,SAAS,CAACp6O,MAAV,GAAmB,UAAUtP,CAAV,EAAa;AAC9B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB22B,MAAAA,MAAM,GAAG+lL,MAAM,CAACr1L,CAAD,CAAf;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOp6O,MAAP;AACD;AACF,GAPD;;AASAo6O,EAAAA,SAAS,CAAClvB,YAAV,GAAyB,UAAUmvB,EAAV,EAAcC,EAAd,EAAkBC,EAAlB,EAAsB5X,EAAtB,EAA0B;AACjD,QAAI74P,SAAS,CAACT,MAAd,EAAsB;AACpB2wQ,MAAAA,IAAI,GAAGj0D,MAAM,CAACs0D,EAAD,CAAb;AACAJ,MAAAA,IAAI,GAAGK,EAAE,IAAI,IAAN,GAAav0D,MAAM,CAACu0D,EAAD,CAAnB,GAA0BN,IAAjC;AACAG,MAAAA,IAAI,GAAGI,EAAE,IAAI,IAAN,GAAax0D,MAAM,CAACw0D,EAAD,CAAnB,GAA0BP,IAAjC;AACAE,MAAAA,IAAI,GAAGvX,EAAE,IAAI,IAAN,GAAa58C,MAAM,CAAC48C,EAAD,CAAnB,GAA0BsX,IAAjC;AACA,aAAOG,SAAP;AACD,KAND,MAMO;AACL,aAAOJ,IAAP;AACD;AACF,GAVD;;AAYAI,EAAAA,SAAS,CAACr+F,OAAV,GAAoB,UAAUrrJ,CAAV,EAAa;AAC/B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0yK,MAAAA,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOr+F,OAAP;AACD;AACF,GAPD;;AASA,SAAOq+F,SAAP;AACD;;AAED,SAASI,QAAT,GAAqB;AACnB,MAAItqQ,CAAJ;AAAA,MACIue,CADJ;AAAA,MAEIjd,IAFJ;AAAA,MAGIugN,OAHJ;AAAA,MAIIh2C,OAAO,GAAG,IAJd;AAAA,MAKI/1I,KALJ;AAAA,MAMIw2E,EANJ;AAAA,MAOID,EAPJ;AAAA,MAQI4/F,EARJ;;AAUA,WAASmP,KAAT,CAAeziI,EAAf,EAAmB4zB,EAAnB,EAAuBg+J,EAAvB,EAA2B;AACzB,UAAMr+D,EAAE,GAAGq+D,EAAE,GAAG,CAAhB;;AAEA,QAAIz0O,KAAJ,EAAW;AACT,UAAI2vM,EAAE,GAAGp5H,EAAE,GAAGE,EAAd;AAAA,UACIm5H,EAAE,GAAG/sJ,EAAE,GAAG2zB,EADd;;AAGA,UAAIm5H,EAAE,IAAIC,EAAV,EAAc;AACZ;AACA,YAAI8kC,EAAE,GAAG5qQ,IAAI,CAACqC,IAAL,CAAUwjO,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAT;AAAA,YACIqhC,EAAE,GAAG,CAACthC,EAAE,IAAI+kC,EAAP,IAAav+D,EADtB;AAAA,YAEI+6D,EAAE,GAAG,CAACthC,EAAE,IAAI8kC,EAAP,IAAav+D,EAFtB;AAAA,YAGI1uM,CAAC,GAAGqC,IAAI,CAACuQ,KAAL,CAAWu1N,EAAX,EAAeD,EAAf,CAHR,CAFY,CAKgB;;AAE5B55D,QAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAG8sJ,EAAE,GAAGv5B,EAAzB,EAA6B3/F,EAAE,GAAGm5H,EAAE,GAAGx5B,EAAvC;AACArgC,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB3uM,CAAC,GAAGqC,IAAI,CAACuiC,EAAjC,EAAqC5kC,CAArC;AACAsuK,QAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC+uC,GAAR,CAAYtuG,EAAZ,EAAgBD,EAAhB,EAAoB4/F,EAApB,EAAwB1uM,CAAxB,EAA2BA,CAAC,GAAGqC,IAAI,CAACuiC,EAApC;AACD,OAZD,MAYO;AACL0pI,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB,CAAxB,EAA2Bw6D,GAA3B;AACD;;AAED76F,MAAAA,OAAO,CAACyrE,SAAR;AACD,KArBD,MAqBO;AACLxhN,MAAAA,KAAK,GAAG,CAAR;AACD;;AAEDw2E,IAAAA,EAAE,GAAG3zB,EAAL;AACA0zB,IAAAA,EAAE,GAAGE,EAAL;AACA0/F,IAAAA,EAAE,GAAGC,EAAL;AACD;;AAED,WAASu+D,KAAT,CAAe5hQ,IAAf,EAAqB;AACnB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAKA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0BhnN,KAAK,GAAG,CAAR;AAC3B;;AAED,UAAIgnN,QAAJ,EAAc1hC,KAAK,CAAC,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAH,EAAiB,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAnB,EAAiC,CAACvH,IAAI,CAACoF,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC,CAAL;AACf;;AAED,QAAI6E,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAED+8P,EAAAA,KAAK,CAACzqQ,CAAN,GAAU,UAAUwgB,CAAV,EAAa;AACrB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAGwgB,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOzqQ,CAAP;AACD;AACF,GAPD;;AASAyqQ,EAAAA,KAAK,CAAClsP,CAAN,GAAU,UAAUiC,CAAV,EAAa;AACrB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGiC,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOlsP,CAAP;AACD;AACF,GAPD;;AASAksP,EAAAA,KAAK,CAACnpQ,IAAN,GAAa,UAAUkf,CAAV,EAAa;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBmI,MAAAA,IAAI,GAAGkf,CAAP;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOnpQ,IAAP;AACD;AACF,GAPD;;AASAmpQ,EAAAA,KAAK,CAAC5oD,OAAN,GAAgB,UAAUrhM,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0oN,MAAAA,OAAO,GAAGrhM,CAAV;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAO5oD,OAAP;AACD;AACF,GAPD;;AASA4oD,EAAAA,KAAK,CAAC5+F,OAAN,GAAgB,UAAUrrJ,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,UAAIqnB,CAAC,IAAI,IAAT,EAAe;AACbqrJ,QAAAA,OAAO,GAAG,IAAV;AACD,OAFD,MAEO;AACLA,QAAAA,OAAO,GAAGrrJ,CAAV;AACD;;AAED,aAAOiqP,KAAP;AACD,KARD,MAQO;AACL,aAAO5+F,OAAP;AACD;AACF,GAZD;;AAcA,SAAO4+F,KAAP;AACD;;AAED,SAAS5tQ,KAAT,CAAekE,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO7G,CAAC,IAAI,IAAL,GAAYA,CAAZ,GAAgB6G,CAAvB;AACD;;AAED,MAAM5H,CAAC,GAAGyhB,IAAI,IAAIA,IAAI,CAACzhB,CAAL,IAAU,CAA5B;AAAA,MACMue,CAAC,GAAGkD,IAAI,IAAIA,IAAI,CAAClD,CAAL,IAAU,CAD5B;AAAA,MAEM4nC,CAAC,GAAG1kC,IAAI,IAAIA,IAAI,CAAC1f,KAAL,IAAc,CAFhC;AAAA,MAGMqkD,CAAC,GAAG3kC,IAAI,IAAIA,IAAI,CAACqO,MAAL,IAAe,CAHjC;AAAA,MAIM46O,EAAE,GAAGjpP,IAAI,IAAI,CAACA,IAAI,CAACzhB,CAAL,IAAU,CAAX,KAAiByhB,IAAI,CAAC1f,KAAL,IAAc,CAA/B,CAJnB;AAAA,MAKM4oQ,EAAE,GAAGlpP,IAAI,IAAI,CAACA,IAAI,CAAClD,CAAL,IAAU,CAAX,KAAiBkD,IAAI,CAACqO,MAAL,IAAe,CAAhC,CALnB;AAAA,MAMM86O,EAAE,GAAGnpP,IAAI,IAAIA,IAAI,CAACw3N,UAAL,IAAmB,CANtC;AAAA,MAOM4xB,EAAE,GAAGppP,IAAI,IAAIA,IAAI,CAAC03N,QAAL,IAAiB,CAPpC;AAAA,MAQMsE,EAAE,GAAGh8N,IAAI,IAAIA,IAAI,CAAC43N,QAAL,IAAiB,CARpC;AAAA,MASMyxB,EAAE,GAAGrpP,IAAI,IAAIA,IAAI,CAACo3N,WAAL,IAAoB,CATvC;AAAA,MAUMkyB,EAAE,GAAGtpP,IAAI,IAAIA,IAAI,CAACs3N,WAAL,IAAoB,CAVvC;AAAA,MAWMiyB,EAAE,GAAGvpP,IAAI,IAAIA,IAAI,CAACu5N,YAAL,IAAqB,CAXxC;AAAA,MAYMmvB,EAAE,GAAG1oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACwpP,mBAAN,EAA2BxpP,IAAI,CAACu5N,YAAhC,CAAL,IAAsD,CAZzE;AAAA,MAaMovB,EAAE,GAAG3oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACypP,oBAAN,EAA4BzpP,IAAI,CAACu5N,YAAjC,CAAL,IAAuD,CAb1E;AAAA,MAcMqvB,EAAE,GAAG5oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC0pP,uBAAN,EAA+B1pP,IAAI,CAACu5N,YAApC,CAAL,IAA0D,CAd7E;AAAA,MAeMyX,EAAE,GAAGhxO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC2pP,sBAAN,EAA8B3pP,IAAI,CAACu5N,YAAnC,CAAL,IAAyD,CAf5E;AAAA,MAgBMsI,EAAE,GAAG7hO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACngB,IAAN,EAAY,EAAZ,CAhBxB;AAAA,MAiBM+pQ,EAAE,GAAG5pP,IAAI,IAAIA,IAAI,CAACngB,IAAL,IAAa,CAjBhC;AAAA,MAkBMuuK,GAAG,GAAGpuJ,IAAI,IAAI,EAAEA,IAAI,CAACogM,OAAL,KAAiB,KAAnB,CAlBpB;AAAA,MAmBM/nM,IAAI,GAAG2H,IAAI,IAAI49N,OAAO,CAAC59N,IAAI,CAACpgB,KAAL,IAAc,QAAf,CAnB5B;;AAqBA,MAAMiqQ,QAAQ,GAAG,oBAAQryB,UAAR,CAAmB2xB,EAAnB,EAAuBzxB,QAAvB,CAAgC0xB,EAAhC,EAAoCxxB,QAApC,CAA6CoE,EAA7C,EAAiD5E,WAAjD,CAA6DiyB,EAA7D,EAAiE/xB,WAAjE,CAA6EgyB,EAA7E,EAAiF/vB,YAAjF,CAA8FgwB,EAA9F,CAAjB;AAAA,MACMO,UAAU,GAAG,qBAASvrQ,CAAT,CAAWA,CAAX,EAAcqsG,EAAd,CAAiB9tF,CAAjB,EAAoB47L,EAApB,CAAuBwwD,EAAvB,EAA2B9oD,OAA3B,CAAmChyC,GAAnC,CADnB;AAAA,MAEM27F,UAAU,GAAG,qBAASjtP,CAAT,CAAWA,CAAX,EAAc+tF,EAAd,CAAiBtsG,CAAjB,EAAoBk6M,EAApB,CAAuBwwD,EAAvB,EAA2B7oD,OAA3B,CAAmChyC,GAAnC,CAFnB;AAAA,MAGM47F,SAAS,GAAG,qBAASzrQ,CAAT,CAAWA,CAAX,EAAcue,CAAd,CAAgBA,CAAhB,EAAmBsjM,OAAnB,CAA2BhyC,GAA3B,CAHlB;AAAA,MAIM67F,SAAS,GAAG7B,OAAO,GAAG7pQ,CAAV,CAAYA,CAAZ,EAAeue,CAAf,CAAiBA,CAAjB,EAAoBxc,KAApB,CAA0BokD,CAA1B,EAA6Br2B,MAA7B,CAAoCs2B,CAApC,EAAuC40L,YAAvC,CAAoDmvB,EAApD,EAAwDC,EAAxD,EAA4DC,EAA5D,EAAgE5X,EAAhE,CAJlB;AAAA,MAKMkZ,WAAW,GAAG,uBAAW7xP,IAAX,CAAgBA,IAAhB,EAAsBxY,IAAtB,CAA2BgiP,EAA3B,CALpB;AAAA,MAMMsoB,UAAU,GAAGtB,QAAQ,GAAGtqQ,CAAX,CAAaA,CAAb,EAAgBue,CAAhB,CAAkBA,CAAlB,EAAqBsjM,OAArB,CAA6BhyC,GAA7B,EAAkCvuK,IAAlC,CAAuC+pQ,EAAvC,CANnB;;AAOA,SAASQ,eAAT,CAAyBpqP,IAAzB,EAA+B;AAC7B,SAAOA,IAAI,CAACu5N,YAAL,IAAqBv5N,IAAI,CAACwpP,mBAA1B,IAAiDxpP,IAAI,CAACypP,oBAAtD,IAA8EzpP,IAAI,CAAC0pP,uBAAnF,IAA8G1pP,IAAI,CAAC2pP,sBAA1H;AACD;;AACD,SAASxwD,GAAT,CAAa/uC,OAAb,EAAsBpqJ,IAAtB,EAA4B;AAC1B,SAAO6pP,QAAQ,CAACz/F,OAAT,CAAiBA,OAAjB,EAA0BpqJ,IAA1B,CAAP;AACD;;AACD,SAASk7L,IAAT,CAAc9wC,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B,QAAMtzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAlB;AAAA,QACMwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADnC;AAEA,SAAO,CAACv1O,IAAI,CAACqqP,MAAL,KAAgB,YAAhB,GAA+BN,UAA/B,GAA4CD,UAA7C,EAAyD7uB,KAAzD,CAA+DupB,MAAM,CAAC1H,MAAD,EAAS98O,IAAI,CAACqqP,MAAd,EAAsBrqP,IAAI,CAACm/N,OAA3B,CAArE,EAA0G/0E,OAA1G,CAAkHA,OAAlH,EAA2H92D,KAA3H,CAAP;AACD;;AACD,SAAS3mF,IAAT,CAAcy9I,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B,QAAMtzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAlB;AAAA,QACMwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADnC;AAEA,SAAOyU,SAAS,CAAC/uB,KAAV,CAAgBupB,MAAM,CAAC1H,MAAD,EAAS98O,IAAI,CAACqqP,MAAd,EAAsBrqP,IAAI,CAACm/N,OAA3B,CAAtB,EAA2D/0E,OAA3D,CAAmEA,OAAnE,EAA4E92D,KAA5E,CAAP;AACD;;AACD,SAASm1J,SAAT,CAAmBr+F,OAAnB,EAA4BpqJ,IAA5B,EAAkCzhB,CAAlC,EAAqCue,CAArC,EAAwC;AACtC,SAAOmtP,SAAS,CAAC7/F,OAAV,CAAkBA,OAAlB,EAA2BpqJ,IAA3B,EAAiCzhB,CAAjC,EAAoCue,CAApC,CAAP;AACD;;AACD,SAASld,KAAT,CAAewqK,OAAf,EAAwBpqJ,IAAxB,EAA8B;AAC5B,SAAO,CAACA,IAAI,CAACsqP,IAAL,CAAU1qQ,KAAV,IAAmBogB,IAAI,CAACpgB,KAAzB,EAAgCwqK,OAAhC,CAAwCA,OAAxC,EAAiDpqJ,IAAjD,CAAP;AACD;;AACD,SAAS2hM,MAAT,CAAgBv3C,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7B,SAAOkqP,WAAW,CAAC9/F,OAAZ,CAAoBA,OAApB,EAA6BpqJ,IAA7B,CAAP;AACD;;AACD,SAASgpP,KAAT,CAAe5+F,OAAf,EAAwB92D,KAAxB,EAA+B;AAC7B,SAAO62J,UAAU,CAAC//F,OAAX,CAAmBA,OAAnB,EAA4B92D,KAA5B,CAAP;AACD;;AAED,IAAIi3J,OAAO,GAAG,CAAd;;AACA,SAASC,cAAT,GAA0B;AACxBD,EAAAA,OAAO,GAAG,CAAV;AACD;;AACD,SAASjqO,IAAT,CAAemqO,QAAf,EAAyBzqP,IAAzB,EAA+BngB,IAA/B,EAAqC;AACnC,MAAIygC,IAAI,GAAGtgB,IAAI,CAACsgB,IAAhB;AAAA,MACI2iO,IAAI,GAAGwH,QAAQ,CAACC,KADpB;AAAA,MAEIr/P,EAAE,GAAG2U,IAAI,CAACuqP,OAAL,KAAiBvqP,IAAI,CAACuqP,OAAL,GAAe,SAASA,OAAO,EAAhD,CAFT;AAAA,MAGI1lQ,CAAC,GAAGo+P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,MAAsB43P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,IAAoB;AAChDA,IAAAA,EAAE,EAAEA;AAD4C,GAA1C,CAHR;;AAOA,MAAI,0BAAWi1B,IAAX,CAAJ,EAAsB;AACpBz7B,IAAAA,CAAC,CAAC4B,IAAF,GAAS65B,IAAI,CAAC,IAAD,CAAb;AACD,GAFD,MAEO,IAAI8pO,eAAe,CAACvqQ,IAAD,CAAnB,EAA2B;AAChCgF,IAAAA,CAAC,CAAC4B,IAAF,GAASgiQ,SAAS,CAAC,IAAD,EAAO5oQ,IAAP,EAAa,CAAb,EAAgB,CAAhB,CAAlB;AACD,GAFM,MAEA;AACLgF,IAAAA,CAAC,CAACvE,KAAF,GAAUT,IAAI,CAACS,KAAL,IAAc,CAAxB;AACAuE,IAAAA,CAAC,CAACwpB,MAAF,GAAWxuB,IAAI,CAACwuB,MAAL,IAAe,CAA1B;AACD;;AAED,SAAO,UAAUhjB,EAAV,GAAe,GAAtB;AACD;;AAED,SAASu/P,MAAT,CAAgBzkQ,CAAhB,EAAmB;AACjB,OAAK0pM,KAAL;AACA,MAAI1pM,CAAJ,EAAO,KAAK66M,KAAL,CAAW76M,CAAX;AACR;;AACDykQ,MAAM,CAACpyQ,SAAP,GAAmB;AACjBwU,EAAAA,KAAK,GAAG;AACN,WAAO,IAAI49P,MAAJ,CAAW,IAAX,CAAP;AACD,GAHgB;;AAKjB/6D,EAAAA,KAAK,GAAG;AACN,SAAKhlG,EAAL,GAAU,CAACrlG,MAAM,CAAC+/H,SAAlB;AACA,SAAK36B,EAAL,GAAU,CAACplG,MAAM,CAAC+/H,SAAlB;AACA,SAAKruD,EAAL,GAAU,CAAC1xE,MAAM,CAAC+/H,SAAlB;AACA,SAAKz6B,EAAL,GAAU,CAACtlG,MAAM,CAAC+/H,SAAlB;AACA,WAAO,IAAP;AACD,GAXgB;;AAajBgnE,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK1hG,EAAL,KAAY,CAACrlG,MAAM,CAAC+/H,SAApB,IAAiC,KAAK36B,EAAL,KAAY,CAACplG,MAAM,CAAC+/H,SAArD,IAAkE,KAAKruD,EAAL,KAAY,CAAC1xE,MAAM,CAAC+/H,SAAtF,IAAmG,KAAKz6B,EAAL,KAAY,CAACtlG,MAAM,CAAC+/H,SAA9H;AACD,GAfgB;;AAiBjBslI,EAAAA,MAAM,CAAC1kQ,CAAD,EAAI;AACR,WAAO,KAAK0kG,EAAL,KAAY1kG,CAAC,CAAC0kG,EAAd,IAAoB,KAAKD,EAAL,KAAYzkG,CAAC,CAACykG,EAAlC,IAAwC,KAAK1zB,EAAL,KAAY/wE,CAAC,CAAC+wE,EAAtD,IAA4D,KAAK4zB,EAAL,KAAY3kG,CAAC,CAAC2kG,EAAjF;AACD,GAnBgB;;AAqBjB/vG,EAAAA,GAAG,CAAC8vG,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiB;AAClB,QAAI5zB,EAAE,GAAG2zB,EAAT,EAAa;AACX,WAAK3zB,EAAL,GAAU2zB,EAAV;AACA,WAAKA,EAAL,GAAU3zB,EAAV;AACD,KAHD,MAGO;AACL,WAAK2zB,EAAL,GAAUA,EAAV;AACA,WAAK3zB,EAAL,GAAUA,EAAV;AACD;;AAED,QAAI4zB,EAAE,GAAGF,EAAT,EAAa;AACX,WAAKE,EAAL,GAAUF,EAAV;AACA,WAAKA,EAAL,GAAUE,EAAV;AACD,KAHD,MAGO;AACL,WAAKF,EAAL,GAAUA,EAAV;AACA,WAAKE,EAAL,GAAUA,EAAV;AACD;;AAED,WAAO,IAAP;AACD,GAvCgB;;AAyCjB/xF,EAAAA,GAAG,CAACxa,CAAD,EAAIue,CAAJ,EAAO;AACR,QAAIve,CAAC,GAAG,KAAKssG,EAAb,EAAiB,KAAKA,EAAL,GAAUtsG,CAAV;AACjB,QAAIue,CAAC,GAAG,KAAK8tF,EAAb,EAAiB,KAAKA,EAAL,GAAU9tF,CAAV;AACjB,QAAIve,CAAC,GAAG,KAAK24E,EAAb,EAAiB,KAAKA,EAAL,GAAU34E,CAAV;AACjB,QAAIue,CAAC,GAAG,KAAKguF,EAAb,EAAiB,KAAKA,EAAL,GAAUhuF,CAAV;AACjB,WAAO,IAAP;AACD,GA/CgB;;AAiDjBgjK,EAAAA,MAAM,CAAC76K,CAAD,EAAI;AACR,SAAK4lG,EAAL,IAAW5lG,CAAX;AACA,SAAK2lG,EAAL,IAAW3lG,CAAX;AACA,SAAKiyE,EAAL,IAAWjyE,CAAX;AACA,SAAK6lG,EAAL,IAAW7lG,CAAX;AACA,WAAO,IAAP;AACD,GAvDgB;;AAyDjBR,EAAAA,KAAK,GAAG;AACN,SAAKomG,EAAL,GAAU1sG,IAAI,CAAC+H,KAAL,CAAW,KAAK2kG,EAAhB,CAAV;AACA,SAAKD,EAAL,GAAUzsG,IAAI,CAAC+H,KAAL,CAAW,KAAK0kG,EAAhB,CAAV;AACA,SAAK1zB,EAAL,GAAU/4E,IAAI,CAACoC,IAAL,CAAU,KAAK22E,EAAf,CAAV;AACA,SAAK4zB,EAAL,GAAU3sG,IAAI,CAACoC,IAAL,CAAU,KAAKuqG,EAAf,CAAV;AACA,WAAO,IAAP;AACD,GA/DgB;;AAiEjB78F,EAAAA,KAAK,CAACrS,CAAD,EAAI;AACP,SAAKivG,EAAL,IAAWjvG,CAAX;AACA,SAAKgvG,EAAL,IAAWhvG,CAAX;AACA,SAAKs7E,EAAL,IAAWt7E,CAAX;AACA,SAAKkvG,EAAL,IAAWlvG,CAAX;AACA,WAAO,IAAP;AACD,GAvEgB;;AAyEjBi9M,EAAAA,SAAS,CAAC30L,EAAD,EAAKhH,EAAL,EAAS;AAChB,SAAK2tF,EAAL,IAAW3mF,EAAX;AACA,SAAKgzD,EAAL,IAAWhzD,EAAX;AACA,SAAK0mF,EAAL,IAAW1tF,EAAX;AACA,SAAK4tF,EAAL,IAAW5tF,EAAX;AACA,WAAO,IAAP;AACD,GA/EgB;;AAiFjBy1O,EAAAA,MAAM,CAACpW,KAAD,EAAQh+O,CAAR,EAAWue,CAAX,EAAc;AAClB,UAAM4f,CAAC,GAAG,KAAKouO,aAAL,CAAmBvuB,KAAnB,EAA0Bh+O,CAA1B,EAA6Bue,CAA7B,CAAV;AACA,WAAO,KAAK+yL,KAAL,GAAa92L,GAAb,CAAiB2jB,CAAC,CAAC,CAAD,CAAlB,EAAuBA,CAAC,CAAC,CAAD,CAAxB,EAA6B3jB,GAA7B,CAAiC2jB,CAAC,CAAC,CAAD,CAAlC,EAAuCA,CAAC,CAAC,CAAD,CAAxC,EAA6C3jB,GAA7C,CAAiD2jB,CAAC,CAAC,CAAD,CAAlD,EAAuDA,CAAC,CAAC,CAAD,CAAxD,EAA6D3jB,GAA7D,CAAiE2jB,CAAC,CAAC,CAAD,CAAlE,EAAuEA,CAAC,CAAC,CAAD,CAAxE,CAAP;AACD,GApFgB;;AAsFjBouO,EAAAA,aAAa,CAACvuB,KAAD,EAAQh+O,CAAR,EAAWue,CAAX,EAAc;AACzB,QAAI;AACF+tF,MAAAA,EADE;AAEFD,MAAAA,EAFE;AAGF1zB,MAAAA,EAHE;AAIF4zB,MAAAA;AAJE,QAKA,IALJ;AAAA,QAMI34F,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAASoqO,KAAT,CANV;AAAA,QAOIrqO,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAASqqO,KAAT,CAPV;AAAA,QAQIlD,EAAE,GAAG96O,CAAC,GAAGA,CAAC,GAAG4T,GAAR,GAAc2K,CAAC,GAAG5K,GAR3B;AAAA,QASIonO,EAAE,GAAGx8N,CAAC,GAAGve,CAAC,GAAG2T,GAAR,GAAc4K,CAAC,GAAG3K,GAT3B;AAUA,WAAO,CAACA,GAAG,GAAG04F,EAAN,GAAW34F,GAAG,GAAG04F,EAAjB,GAAsByuI,EAAvB,EAA2BnnO,GAAG,GAAG24F,EAAN,GAAW14F,GAAG,GAAGy4F,EAAjB,GAAsB0uI,EAAjD,EAAqDnnO,GAAG,GAAG04F,EAAN,GAAW34F,GAAG,GAAG44F,EAAjB,GAAsBuuI,EAA3E,EAA+EnnO,GAAG,GAAG24F,EAAN,GAAW14F,GAAG,GAAG24F,EAAjB,GAAsBwuI,EAArG,EAAyGnnO,GAAG,GAAG+kE,EAAN,GAAWhlE,GAAG,GAAG04F,EAAjB,GAAsByuI,EAA/H,EAAmInnO,GAAG,GAAGglE,EAAN,GAAW/kE,GAAG,GAAGy4F,EAAjB,GAAsB0uI,EAAzJ,EAA6JnnO,GAAG,GAAG+kE,EAAN,GAAWhlE,GAAG,GAAG44F,EAAjB,GAAsBuuI,EAAnL,EAAuLnnO,GAAG,GAAGglE,EAAN,GAAW/kE,GAAG,GAAG24F,EAAjB,GAAsBwuI,EAA7M,CAAP;AACD,GAlGgB;;AAoGjBt4B,EAAAA,KAAK,CAAC76M,CAAD,EAAI;AACP,QAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,QAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,QAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,QAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,WAAO,IAAP;AACD,GA1GgB;;AA4GjB+sI,EAAAA,SAAS,CAAC1xO,CAAD,EAAI;AACX,QAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,QAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,QAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,QAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,WAAO,IAAP;AACD,GAlHgB;;AAoHjBigK,EAAAA,QAAQ,CAAC5kQ,CAAD,EAAI;AACV,WAAOA,CAAC,IAAI,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAlB,IAAwB,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EAArC,IAA2C,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAAxD,IAA8D,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAAlF;AACD,GAtHgB;;AAwHjBkgK,EAAAA,UAAU,CAAC7kQ,CAAD,EAAI;AACZ,WAAOA,CAAC,KAAK,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAb,IAAmB,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EAAhC,IAAsC,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAAnD,IAAyD,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAA3E,CAAR;AACD,GA1HgB;;AA4HjBg7F,EAAAA,UAAU,CAAC3/L,CAAD,EAAI;AACZ,WAAOA,CAAC,IAAI,EAAE,KAAK+wE,EAAL,GAAU/wE,CAAC,CAAC0kG,EAAZ,IAAkB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC+wE,EAA9B,IAAoC,KAAK4zB,EAAL,GAAU3kG,CAAC,CAACykG,EAAhD,IAAsD,KAAKA,EAAL,GAAUzkG,CAAC,CAAC2kG,EAApE,CAAZ;AACD,GA9HgB;;AAgIjBmgK,EAAAA,QAAQ,CAAC1sQ,CAAD,EAAIue,CAAJ,EAAO;AACb,WAAO,EAAEve,CAAC,GAAG,KAAKssG,EAAT,IAAetsG,CAAC,GAAG,KAAK24E,EAAxB,IAA8Bp6D,CAAC,GAAG,KAAK8tF,EAAvC,IAA6C9tF,CAAC,GAAG,KAAKguF,EAAxD,CAAP;AACD,GAlIgB;;AAoIjBxqG,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK42E,EAAL,GAAU,KAAK2zB,EAAtB;AACD,GAtIgB;;AAwIjBx8E,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKy8E,EAAL,GAAU,KAAKF,EAAtB;AACD;;AA1IgB,CAAnB;;AA8IA,SAAStyG,IAAT,CAAcgyQ,IAAd,EAAoB;AAClB,OAAKA,IAAL,GAAYA,IAAZ;AACA,OAAKY,MAAL,GAAc,KAAKA,MAAL,IAAe,IAAIN,MAAJ,EAA7B;AACD;;AAED,SAASO,SAAT,CAAmBb,IAAnB,EAAyB;AACvBhyQ,EAAAA,IAAI,CAACpB,IAAL,CAAU,IAAV,EAAgBozQ,IAAhB;AACA,OAAKh3J,KAAL,GAAa,KAAKA,KAAL,IAAc,EAA3B;AACD;;AACD,wBAAS63J,SAAT,EAAoB7yQ,IAApB;;AAEA,SAAS8yQ,cAAT,CAAwBC,YAAxB,EAAsC;AACpC,OAAKnvC,QAAL,GAAgB,CAAhB;AACA,OAAK+D,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACD;;AAED,SAASC,SAAT,CAAmBh0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAED,SAASqvC,SAAT,CAAmBj0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAEDkvC,cAAc,CAAC5yQ,SAAf,GAA2B;AACzByjO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKC,QAAZ;AACD,GAHwB;;AAKzBsvC,EAAAA,WAAW,CAACt4D,GAAD,EAAM;AACf,UAAMokB,MAAM,GAAG,IAAf;AACAg0C,IAAAA,SAAS,CAACh0C,MAAD,CAAT;AACA,WAAOA,MAAM,CAAC2I,OAAP,CAAentB,QAAf,CAAwBI,GAAxB,EAA6B;AAClC9oC,MAAAA,OAAO,EAAE;AADyB,KAA7B,EAEJ/iK,IAFI,CAECglM,GAAG,IAAI;AACbk/D,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAOjrB,GAAP;AACD,KALM,EAKJ9wL,KALI,CAKE,MAAM;AACbgwP,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAO,IAAP;AACD,KARM,CAAP;AASD,GAjBwB;;AAmBzBm0C,EAAAA,SAAS,CAACv4D,GAAD,EAAM;AACb,UAAMokB,MAAM,GAAG,IAAf;AAAA,UACMyrB,KAAK,GAAG,wBADd;AAEAuoB,IAAAA,SAAS,CAACh0C,MAAD,CAAT;AACA,WAAOA,MAAM,CAAC2I,OAAP,CAAentB,QAAf,CAAwBI,GAAxB,EAA6B;AAClC9oC,MAAAA,OAAO,EAAE;AADyB,KAA7B,EAEJ/iK,IAFI,CAECglM,GAAG,IAAI;AACb,YAAM73F,GAAG,GAAG63F,GAAG,CAACzvF,IAAhB;AACA,UAAI,CAACpI,GAAD,IAAQ,CAACuuI,KAAb,EAAoB,MAAM;AACxBvuI,QAAAA,GAAG,EAAEA;AADmB,OAAN;AAGpB,YAAMiR,GAAG,GAAG,IAAIs9H,KAAJ,EAAZ,CALa,CAKY;AACzB;;AAEA,YAAM2oB,IAAI,GAAG,8BAAer/D,GAAf,EAAoB,aAApB,IAAqCA,GAAG,CAACsH,WAAzC,GAAuD,WAApE;AACA,UAAI+3D,IAAI,IAAI,IAAZ,EAAkBjmJ,GAAG,CAACkuF,WAAJ,GAAkB+3D,IAAlB,CATL,CAS6B;;AAE1CjmJ,MAAAA,GAAG,CAAClI,MAAJ,GAAa,MAAMguJ,SAAS,CAACj0C,MAAD,CAA5B;;AAEA7xG,MAAAA,GAAG,CAACxN,OAAJ,GAAc,MAAMszJ,SAAS,CAACj0C,MAAD,CAA7B;;AAEA7xG,MAAAA,GAAG,CAACwnE,GAAJ,GAAUz4E,GAAV;AACA,aAAOiR,GAAP;AACD,KAnBM,EAmBJlqG,KAnBI,CAmBEzkB,CAAC,IAAI;AACZy0Q,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAO;AACLq0C,QAAAA,QAAQ,EAAE,KADL;AAELrrQ,QAAAA,KAAK,EAAE,CAFF;AAGL+tB,QAAAA,MAAM,EAAE,CAHH;AAIL4+J,QAAAA,GAAG,EAAEn2L,CAAC,IAAIA,CAAC,CAAC09G,GAAP,IAAc;AAJd,OAAP;AAMD,KA3BM,CAAP;AA4BD,GAnDwB;;AAqDzBngF,EAAAA,KAAK,GAAG;AACN,UAAMijM,MAAM,GAAG,IAAf;AACA,WAAO,IAAIv2N,OAAJ,CAAY8yM,MAAM,IAAI;AAC3B,eAAS+3D,IAAT,CAAcxwQ,KAAd,EAAqB;AACnB,YAAI,CAACk8N,MAAM,CAAC2E,OAAP,EAAL,EAAuBpoB,MAAM,CAACz4M,KAAD,CAAN,CAAvB,KAA0CvE,UAAU,CAAC,MAAM;AACzD+0Q,UAAAA,IAAI,CAAC,IAAD,CAAJ;AACD,SAFmD,EAEjD,EAFiD,CAAV;AAG3C;;AAEDA,MAAAA,IAAI,CAAC,KAAD,CAAJ;AACD,KARM,CAAP;AASD;;AAhEwB,CAA3B;;AAoEA,SAASC,WAAT,CAAsBX,MAAtB,EAA8BlrP,IAA9B,EAAoC8rP,KAApC,EAA2C;AACzC,MAAI9rP,IAAI,CAAC+rP,MAAL,IAAe/rP,IAAI,CAAC4uO,OAAL,KAAiB,CAAhC,IAAqC5uO,IAAI,CAACgsP,aAAL,KAAuB,CAAhE,EAAmE;AACjE,UAAMC,EAAE,GAAGjsP,IAAI,CAACksP,WAAL,IAAoB,IAApB,GAA2B,CAAClsP,IAAI,CAACksP,WAAjC,GAA+C,CAA1D;AACAhB,IAAAA,MAAM,CAACprF,MAAP,CAAcmsF,EAAE,IAAIH,KAAK,GAAGK,eAAe,CAACnsP,IAAD,EAAOisP,EAAP,CAAlB,GAA+B,CAAxC,CAAhB;AACD;;AAED,SAAOf,MAAP;AACD;;AAED,SAASiB,eAAT,CAAyBnsP,IAAzB,EAA+BksP,WAA/B,EAA4C;AAC1C;AACA,SAAOlsP,IAAI,CAACosP,UAAL,IAAmBpsP,IAAI,CAACosP,UAAL,KAAoB,OAAvC,GAAiD,CAAjD,GAAqDF,WAA5D;AACD;;AAED,MAAMG,eAAe,GAAGpH,GAAG,GAAG,IAA9B;AACA,IAAIiG,MAAJ,EAAY9lC,EAAZ,EAAgBJ,EAAhB,EAAoBsnC,GAApB,EAAyBC,EAAzB,EAA6B//L,EAA7B,EAAiCggM,EAAjC,EAAqCC,EAArC;;AAEA,MAAM1zP,GAAG,GAAG,CAACxa,CAAD,EAAIue,CAAJ,KAAUouP,MAAM,CAACnyP,GAAP,CAAWxa,CAAX,EAAcue,CAAd,CAAtB;;AAEA,MAAM4vP,IAAI,GAAG,CAACnuQ,CAAD,EAAIue,CAAJ,KAAU/D,GAAG,CAACqsN,EAAE,GAAG7mO,CAAN,EAASymO,EAAE,GAAGloN,CAAd,CAA1B;;AAEA,MAAM6vP,IAAI,GAAGpuQ,CAAC,IAAIwa,GAAG,CAACxa,CAAD,EAAI2sQ,MAAM,CAACtgK,EAAX,CAArB;;AAEA,MAAMgiK,IAAI,GAAG9vP,CAAC,IAAI/D,GAAG,CAACmyP,MAAM,CAACrgK,EAAR,EAAY/tF,CAAZ,CAArB;;AAEA,MAAMokO,EAAE,GAAG,CAAC3iP,CAAD,EAAIue,CAAJ,KAAUyvP,EAAE,GAAGhuQ,CAAL,GAASiuQ,EAAE,GAAG1vP,CAAnC;;AAEA,MAAMskO,EAAE,GAAG,CAAC7iP,CAAD,EAAIue,CAAJ,KAAU0vD,EAAE,GAAGjuE,CAAL,GAASkuQ,EAAE,GAAG3vP,CAAnC;;AAEA,MAAM+vP,IAAI,GAAG,CAACtuQ,CAAD,EAAIue,CAAJ,KAAU/D,GAAG,CAACmoO,EAAE,CAAC3iP,CAAD,EAAIue,CAAJ,CAAH,EAAWskO,EAAE,CAAC7iP,CAAD,EAAIue,CAAJ,CAAb,CAA1B;;AAEA,MAAMgwP,KAAK,GAAG,CAACvuQ,CAAD,EAAIue,CAAJ,KAAU4vP,IAAI,CAACxrB,EAAE,CAAC3iP,CAAD,EAAIue,CAAJ,CAAH,EAAWskO,EAAE,CAAC7iP,CAAD,EAAIue,CAAJ,CAAb,CAA5B;;AAEA,SAASiwP,YAAT,CAAuBhuP,CAAvB,EAA0BiuP,GAA1B,EAA+B;AAC7B9B,EAAAA,MAAM,GAAGnsP,CAAT;;AAEA,MAAIiuP,GAAJ,EAAS;AACPV,IAAAA,GAAG,GAAGU,GAAG,GAAGlI,QAAZ;AACAyH,IAAAA,EAAE,GAAGE,EAAE,GAAGtuQ,IAAI,CAACgU,GAAL,CAASm6P,GAAT,CAAV;AACA9/L,IAAAA,EAAE,GAAGruE,IAAI,CAAC+T,GAAL,CAASo6P,GAAT,CAAL;AACAE,IAAAA,EAAE,GAAG,CAAChgM,EAAN;AACD,GALD,MAKO;AACL+/L,IAAAA,EAAE,GAAGE,EAAE,GAAG,CAAV;AACAH,IAAAA,GAAG,GAAG9/L,EAAE,GAAGggM,EAAE,GAAG,CAAhB;AACD;;AAED,SAAOpiG,OAAP;AACD;;AACD,MAAMA,OAAO,GAAG;AACdq9F,EAAAA,SAAS,GAAG,CAAE,CADA;;AAGd5xB,EAAAA,SAAS,GAAG,CAAE,CAHA;;AAKdD,EAAAA,MAAM,EAAEk3B,KALM;AAMdh3B,EAAAA,MAAM,EAAEg3B,KANM;;AAQd71B,EAAAA,IAAI,CAAC14O,CAAD,EAAIue,CAAJ,EAAO4nC,CAAP,EAAUC,CAAV,EAAa;AACf,QAAI2nN,GAAJ,EAAS;AACPO,MAAAA,IAAI,CAACtuQ,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAR,CAAJ;AACA+vP,MAAAA,IAAI,CAACtuQ,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAC,GAAG6nC,CAAZ,CAAJ;AACAkoN,MAAAA,IAAI,CAACtuQ,CAAD,EAAIue,CAAC,GAAG6nC,CAAR,CAAJ;AACAmoN,MAAAA,KAAK,CAACvuQ,CAAD,EAAIue,CAAJ,CAAL;AACD,KALD,MAKO;AACL/D,MAAAA,GAAG,CAACxa,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAC,GAAG6nC,CAAZ,CAAH;AACA+nN,MAAAA,IAAI,CAACnuQ,CAAD,EAAIue,CAAJ,CAAJ;AACD;AACF,GAlBa;;AAoBdi5N,EAAAA,gBAAgB,CAAClrI,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiB;AAC/B,UAAMmiK,GAAG,GAAG/rB,EAAE,CAACr2I,EAAD,EAAKD,EAAL,CAAd;AAAA,UACMsiK,GAAG,GAAG9rB,EAAE,CAACv2I,EAAD,EAAKD,EAAL,CADd;AAAA,UAEMuiK,GAAG,GAAGjsB,EAAE,CAAChqK,EAAD,EAAK4zB,EAAL,CAFd;AAAA,UAGMsiK,GAAG,GAAGhsB,EAAE,CAAClqK,EAAD,EAAK4zB,EAAL,CAHd;AAIAuiK,IAAAA,WAAW,CAACjoC,EAAD,EAAK6nC,GAAL,EAAUE,GAAV,EAAeR,IAAf,CAAX;AACAU,IAAAA,WAAW,CAACroC,EAAD,EAAKkoC,GAAL,EAAUE,GAAV,EAAeR,IAAf,CAAX;AACAF,IAAAA,IAAI,CAACS,GAAD,EAAMC,GAAN,CAAJ;AACD,GA5Ba;;AA8Bdp3B,EAAAA,aAAa,CAACnrI,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiBgtI,EAAjB,EAAqBC,EAArB,EAAyB;AACpC,UAAMk1B,GAAG,GAAG/rB,EAAE,CAACr2I,EAAD,EAAKD,EAAL,CAAd;AAAA,UACMsiK,GAAG,GAAG9rB,EAAE,CAACv2I,EAAD,EAAKD,EAAL,CADd;AAAA,UAEMuiK,GAAG,GAAGjsB,EAAE,CAAChqK,EAAD,EAAK4zB,EAAL,CAFd;AAAA,UAGMsiK,GAAG,GAAGhsB,EAAE,CAAClqK,EAAD,EAAK4zB,EAAL,CAHd;AAAA,UAIMwiK,GAAG,GAAGpsB,EAAE,CAACpJ,EAAD,EAAKC,EAAL,CAJd;AAAA,UAKMw1B,GAAG,GAAGnsB,EAAE,CAACtJ,EAAD,EAAKC,EAAL,CALd;AAMAy1B,IAAAA,YAAY,CAACpoC,EAAD,EAAK6nC,GAAL,EAAUE,GAAV,EAAeG,GAAf,EAAoBX,IAApB,CAAZ;AACAa,IAAAA,YAAY,CAACxoC,EAAD,EAAKkoC,GAAL,EAAUE,GAAV,EAAeG,GAAf,EAAoBX,IAApB,CAAZ;AACAF,IAAAA,IAAI,CAACY,GAAD,EAAMC,GAAN,CAAJ;AACD,GAxCa;;AA0Cdp0D,EAAAA,GAAG,CAACkgC,EAAD,EAAKC,EAAL,EAASlzO,CAAT,EAAY+iQ,EAAZ,EAAgBC,EAAhB,EAAoBryB,GAApB,EAAyB;AAC1BoyB,IAAAA,EAAE,IAAImD,GAAN;AACAlD,IAAAA,EAAE,IAAIkD,GAAN,CAF0B,CAEf;;AAEXlnC,IAAAA,EAAE,GAAGh/N,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASi3P,EAAT,CAAJ,GAAmB/vB,EAAxB;AACArU,IAAAA,EAAE,GAAG5+N,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASk3P,EAAT,CAAJ,GAAmB9vB,EAAxB;;AAEA,QAAIn7O,IAAI,CAACiT,GAAL,CAASg4P,EAAE,GAAGD,EAAd,IAAoBkD,eAAxB,EAAyC;AACvC;AACAtzP,MAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACA2S,MAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACD,KAJD,MAIO;AACL,YAAMkhF,MAAM,GAAGhoF,CAAC,IAAIyZ,GAAG,CAAC3S,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAJ,GAAkB+5O,EAAnB,EAAuBjzO,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAJ,GAAkBg6O,EAAzC,CAAvB;;AAEA,UAAI19O,CAAJ,EAAOxD,CAAP,CAHK,CAGK;;AAEVkvF,MAAAA,MAAM,CAAC6hL,EAAD,CAAN;AACA7hL,MAAAA,MAAM,CAAC8hL,EAAD,CAAN,CANK,CAMO;;AAEZ,UAAIA,EAAE,KAAKD,EAAX,EAAe;AACbA,QAAAA,EAAE,GAAGA,EAAE,GAAGlE,GAAV;AACA,YAAIkE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAIlE,GAAN;AACZmE,QAAAA,EAAE,GAAGA,EAAE,GAAGnE,GAAV;AACA,YAAImE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAInE,GAAN;;AAEZ,YAAImE,EAAE,GAAGD,EAAT,EAAa;AACXpyB,UAAAA,GAAG,GAAG,CAACA,GAAP,CADW,CACC;;AAEZn7O,UAAAA,CAAC,GAAGutQ,EAAJ;AACAA,UAAAA,EAAE,GAAGC,EAAL;AACAA,UAAAA,EAAE,GAAGxtQ,CAAL,CALW,CAKH;AACT;;AAED,YAAIm7O,GAAJ,EAAS;AACPqyB,UAAAA,EAAE,IAAInE,GAAN;AACArpQ,UAAAA,CAAC,GAAGutQ,EAAE,GAAGA,EAAE,GAAGnE,MAAd;;AAEA,eAAK5sQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAJ,IAASwD,CAAC,GAAGwtQ,EAAzB,EAA6B,EAAEhxQ,CAAF,EAAKwD,CAAC,IAAIopQ,MAAvC,EAA+C19K,MAAM,CAAC1rF,CAAD,CAAN;AAChD,SALD,MAKO;AACLA,UAAAA,CAAC,GAAGutQ,EAAE,GAAGA,EAAE,GAAGnE,MAAV,GAAmBA,MAAvB;;AAEA,eAAK5sQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAJ,IAASwD,CAAC,GAAGwtQ,EAAzB,EAA6B,EAAEhxQ,CAAF,EAAKwD,CAAC,GAAGA,CAAC,GAAGopQ,MAA1C,EAAkD19K,MAAM,CAAC1rF,CAAD,CAAN;AACnD;AACF;AACF;AACF;;AAvFa,CAAhB;;AA2FA,SAASyxQ,WAAT,CAAqB50D,EAArB,EAAyB5tG,EAAzB,EAA6B3zB,EAA7B,EAAiC8nJ,EAAjC,EAAqC;AACnC,QAAMljO,CAAC,GAAG,CAAC28M,EAAE,GAAG5tG,EAAN,KAAa4tG,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EAA3B,CAAV;AACA,MAAI,IAAI/uG,CAAJ,IAASA,CAAC,GAAG,CAAjB,EAAoBkjO,EAAE,CAACvmB,EAAE,GAAG,CAAC5tG,EAAE,GAAG4tG,EAAN,IAAY38M,CAAlB,CAAF;AACrB;;AAED,SAAS0xQ,YAAT,CAAsB/0D,EAAtB,EAA0B5tG,EAA1B,EAA8B3zB,EAA9B,EAAkC4gK,EAAlC,EAAsC9Y,EAAtC,EAA0C;AACxC,QAAM1/N,CAAC,GAAGw4O,EAAE,GAAGr/B,EAAL,GAAU,IAAI5tG,EAAd,GAAmB,IAAI3zB,EAAjC;AAAA,QACM/wE,CAAC,GAAGsyM,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EADxB;AAAA,QAEMhmG,CAAC,GAAG4zM,EAAE,GAAG5tG,EAFf;AAGA,MAAIw4G,EAAE,GAAG,CAAT;AAAA,MACItkI,EAAE,GAAG,CADT;AAAA,MAEI34E,CAFJ,CAJwC,CAMjC;;AAEP,MAAIjI,IAAI,CAACiT,GAAL,CAAS9R,CAAT,IAAcylQ,OAAlB,EAA2B;AACzB;AACA3+P,IAAAA,CAAC,GAAGD,CAAC,GAAGA,CAAJ,GAAQtB,CAAC,GAAGvF,CAAhB;;AAEA,QAAI8G,CAAC,IAAI,CAAT,EAAY;AACVA,MAAAA,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAU4F,CAAV,CAAJ;AACAi9M,MAAAA,EAAE,GAAG,CAAC,CAACl9M,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACAy/E,MAAAA,EAAE,GAAG,CAAC,CAAC54E,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACD;AACF,GATD,MASO;AACL;AACA+jN,IAAAA,EAAE,GAAG,MAAMx+M,CAAN,GAAUsB,CAAf;AACD,GApBuC,CAoBtC;;;AAGF,MAAI,IAAIk9M,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsB2b,EAAE,CAACyuC,KAAK,CAACpqD,EAAD,EAAK5K,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACtB,MAAI,IAAI/4J,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsBigJ,EAAE,CAACyuC,KAAK,CAAC1uL,EAAD,EAAK05H,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACvB;;AAED,SAAS21B,KAAT,CAAe3xQ,CAAf,EAAkB28M,EAAlB,EAAsB5tG,EAAtB,EAA0B3zB,EAA1B,EAA8B4gK,EAA9B,EAAkC;AAChC,QAAMl8O,CAAC,GAAG,IAAIE,CAAd;AAAA,QACMmxE,EAAE,GAAGrxE,CAAC,GAAGA,CADf;AAAA,QAEMojF,EAAE,GAAGljF,CAAC,GAAGA,CAFf;AAGA,SAAOmxE,EAAE,GAAGrxE,CAAL,GAAS68M,EAAT,GAAc,IAAIxrI,EAAJ,GAASnxE,CAAT,GAAa+uG,EAA3B,GAAgC,IAAIjvG,CAAJ,GAAQojF,EAAR,GAAa9H,EAA7C,GAAkD8H,EAAE,GAAGljF,CAAL,GAASg8O,EAAlE;AACD;;AAED,IAAI41B,SAAS,GAAG,CAACA,SAAS,GAAG,wBAAO,CAAP,EAAU,CAAV,CAAb,IAA6BA,SAAS,CAACpmP,UAAV,CAAqB,IAArB,CAA7B,GAA0D,IAA1E;AAEA,MAAMnhB,CAAC,GAAG,IAAIykQ,MAAJ,EAAV;;AACA,SAAS+C,aAAT,CAAuBrwB,IAAvB,EAA6B;AAC3B,SAAO,UAAUt9N,IAAV,EAAgB4tP,KAAhB,EAAuB;AAC5B;AACA,QAAI,CAACF,SAAL,EAAgB,OAAO,IAAP,CAFY,CAEC;;AAE7BpwB,IAAAA,IAAI,CAACowB,SAAD,EAAY1tP,IAAZ,CAAJ,CAJ4B,CAIL;;AAEvB7Z,IAAAA,CAAC,CAAC0pM,KAAF,GAAUmR,KAAV,CAAgBhhM,IAAI,CAACkrP,MAArB,EAA6BrzB,SAA7B,CAAuC+1B,KAAvC,EAA8CnpQ,KAA9C;AACA,UAAM;AACJomG,MAAAA,EADI;AAEJD,MAAAA,EAFI;AAGJ1zB,MAAAA,EAHI;AAIJ4zB,MAAAA;AAJI,QAKF3kG,CALJ,CAP4B,CAYrB;AACP;;AAEA,SAAK,IAAI2W,CAAC,GAAG8tF,EAAb,EAAiB9tF,CAAC,IAAIguF,EAAtB,EAA0B,EAAEhuF,CAA5B,EAA+B;AAC7B,WAAK,IAAIve,CAAC,GAAGssG,EAAb,EAAiBtsG,CAAC,IAAI24E,EAAtB,EAA0B,EAAE34E,CAA5B,EAA+B;AAC7B,YAAImvQ,SAAS,CAACG,aAAV,CAAwBtvQ,CAAxB,EAA2Bue,CAA3B,CAAJ,EAAmC;AACjC,iBAAO,IAAP;AACD;AACF;AACF,KArB2B,CAqB1B;;;AAGF,WAAO,KAAP;AACD,GAzBD;AA0BD;;AACD,SAASgxP,cAAT,CAAwB9tP,IAAxB,EAA8Bk8L,GAA9B,EAAmC;AACjC,SAAOA,GAAG,CAAC+uD,QAAJ,CAAajrP,IAAI,CAACzhB,CAAL,IAAU,CAAvB,EAA0ByhB,IAAI,CAAClD,CAAL,IAAU,CAApC,CAAP;AACD;;AACD,SAASixP,aAAT,CAAuB/tP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEM4nC,CAAC,GAAG1kC,IAAI,CAAC1f,KAAL,IAAc,CAFxB;AAAA,QAGMqkD,CAAC,GAAG3kC,IAAI,CAACqO,MAAL,IAAe,CAHzB;AAIA,SAAO6tL,GAAG,CAACpW,UAAJ,CAAe3/L,CAAC,CAACpL,GAAF,CAAMwD,CAAN,EAASue,CAAT,EAAYve,CAAC,GAAGmmD,CAAhB,EAAmB5nC,CAAC,GAAG6nC,CAAvB,CAAf,CAAP;AACD;;AACD,SAASqpN,aAAT,CAAuBhuP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEMo6D,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B34E,CAFvC;AAAA,QAGMusG,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BhuF,CAHvC;AAIA,SAAOmxP,gBAAgB,CAAC/xD,GAAD,EAAM39M,CAAN,EAASue,CAAT,EAAYo6D,EAAZ,EAAgB4zB,EAAhB,CAAvB;AACD;;AACD,SAASmjK,gBAAT,CAA0B/xD,GAA1B,EAA+B39M,CAA/B,EAAkCue,CAAlC,EAAqCs6D,CAArC,EAAwC9sE,CAAxC,EAA2C;AACzC,QAAM;AACJugG,IAAAA,EADI;AAEJD,IAAAA,EAFI;AAGJ1zB,IAAAA,EAHI;AAIJ4zB,IAAAA;AAJI,MAKFoxG,GALJ;AAAA,QAMMh4L,EAAE,GAAGkzD,CAAC,GAAG74E,CANf;AAAA,QAOM2e,EAAE,GAAG5S,CAAC,GAAGwS,CAPf;AAQA,MAAIumM,EAAE,GAAG,CAAT;AAAA,MACItkI,EAAE,GAAG,CADT;AAAA,MAEIriD,CAFJ;AAAA,MAGIozD,CAHJ;AAAA,MAII1pF,CAJJ;AAAA,MAKItP,CALJ;;AAOA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAhB,EAAmB,EAAEA,CAArB,EAAwB;AACtB,QAAIA,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAG,CAACxY,EAAL;AACA4rE,MAAAA,CAAC,GAAG,EAAE+a,EAAE,GAAGtsG,CAAP,CAAJ;AACD;;AAED,QAAIzH,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAGxY,EAAJ;AACA4rE,MAAAA,CAAC,GAAG5Y,EAAE,GAAG34E,CAAT;AACD;;AAED,QAAIzH,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAG,CAACxf,EAAL;AACA4yE,MAAAA,CAAC,GAAG,EAAE8a,EAAE,GAAG9tF,CAAP,CAAJ;AACD;;AAED,QAAIhmB,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAGxf,EAAJ;AACA4yE,MAAAA,CAAC,GAAGgb,EAAE,GAAGhuF,CAAT;AACD;;AAED,QAAI3e,IAAI,CAACiT,GAAL,CAASsrB,CAAT,IAAc,KAAd,IAAuBozD,CAAC,GAAG,CAA/B,EAAkC,OAAO,KAAP;AAClC1pF,IAAAA,CAAC,GAAG0pF,CAAC,GAAGpzD,CAAR;;AAEA,QAAIA,CAAC,GAAG,CAAR,EAAW;AACT,UAAIt2B,CAAC,GAAG24E,EAAR,EAAY,OAAO,KAAP,CAAZ,KAA8B,IAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AAC3C,KAFD,MAEO,IAAIs2B,CAAC,GAAG,CAAR,EAAW;AAChB,UAAIt2B,CAAC,GAAGi9M,EAAR,EAAY,OAAO,KAAP,CAAZ,KAA8B,IAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AAC3C;AACF;;AAED,SAAO,IAAP;AACD;;AAED,SAAS8nQ,KAAT,CAAgB9jG,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7BoqJ,EAAAA,OAAO,CAAC+jG,wBAAR,GAAmCnuP,IAAI,CAACkuP,KAAL,IAAc,aAAjD;AACD;;AAED,SAASE,OAAT,CAAkBhzQ,KAAlB,EAAyBonQ,IAAzB,EAA+B;AAC7B,SAAOpnQ,KAAK,IAAI,IAAT,GAAgBonQ,IAAhB,GAAuBpnQ,KAA9B;AACD;;AAED,SAASizQ,QAAT,CAAkBzsP,QAAlB,EAA4BuhP,KAA5B,EAAmC;AACjC,QAAM78P,CAAC,GAAG68P,KAAK,CAACzrQ,MAAhB;;AAEA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BwpB,IAAAA,QAAQ,CAAC0sP,YAAT,CAAsBnL,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MAA/B,EAAuCo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P,KAAhD;AACD;;AAED,SAAOhsO,QAAP;AACD;;AAED,SAASA,QAAT,CAAmBwoJ,OAAnB,EAA4Bv4D,IAA5B,EAAkCq5J,MAAlC,EAA0C;AACxC,QAAMxmN,CAAC,GAAGwmN,MAAM,CAAC5qQ,KAAP,EAAV;AAAA,QACMqkD,CAAC,GAAGumN,MAAM,CAAC78O,MAAP,EADV;AAEA,MAAIzM,QAAJ;;AAEA,MAAIiwF,IAAI,CAACjwF,QAAL,KAAkB,QAAtB,EAAgC;AAC9BA,IAAAA,QAAQ,GAAGwoJ,OAAO,CAACmkG,oBAAR,CAA6BrD,MAAM,CAACrgK,EAAP,GAAYujK,OAAO,CAACv8J,IAAI,CAAChH,EAAN,EAAU,GAAV,CAAP,GAAwBnmD,CAAjE,EAAoEwmN,MAAM,CAACtgK,EAAP,GAAYwjK,OAAO,CAACv8J,IAAI,CAACjH,EAAN,EAAU,GAAV,CAAP,GAAwBjmD,CAAxG,EAA2GxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiBypN,OAAO,CAACv8J,IAAI,CAAC24F,EAAN,EAAU,CAAV,CAAnI,EAAiJ0gE,MAAM,CAACrgK,EAAP,GAAYujK,OAAO,CAACv8J,IAAI,CAAC36B,EAAN,EAAU,GAAV,CAAP,GAAwBxyB,CAArL,EAAwLwmN,MAAM,CAACtgK,EAAP,GAAYwjK,OAAO,CAACv8J,IAAI,CAAC/G,EAAN,EAAU,GAAV,CAAP,GAAwBnmD,CAA5N,EAA+NxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiBypN,OAAO,CAACv8J,IAAI,CAAC44F,EAAN,EAAU,GAAV,CAAvP,CAAX;AACD,GAFD,MAEO;AACL;AACA,UAAM5/F,EAAE,GAAGujK,OAAO,CAACv8J,IAAI,CAAChH,EAAN,EAAU,CAAV,CAAlB;AAAA,UACMD,EAAE,GAAGwjK,OAAO,CAACv8J,IAAI,CAACjH,EAAN,EAAU,CAAV,CADlB;AAAA,UAEM1zB,EAAE,GAAGk3L,OAAO,CAACv8J,IAAI,CAAC36B,EAAN,EAAU,CAAV,CAFlB;AAAA,UAGM4zB,EAAE,GAAGsjK,OAAO,CAACv8J,IAAI,CAAC/G,EAAN,EAAU,CAAV,CAHlB;;AAKA,QAAID,EAAE,KAAK3zB,EAAP,IAAa0zB,EAAE,KAAKE,EAApB,IAA0BpmD,CAAC,KAAKC,CAApC,EAAuC;AACrC;AACA/iC,MAAAA,QAAQ,GAAGwoJ,OAAO,CAACokG,oBAAR,CAA6BtD,MAAM,CAACrgK,EAAP,GAAYA,EAAE,GAAGnmD,CAA9C,EAAiDwmN,MAAM,CAACtgK,EAAP,GAAYA,EAAE,GAAGjmD,CAAlE,EAAqEumN,MAAM,CAACrgK,EAAP,GAAY3zB,EAAE,GAAGxyB,CAAtF,EAAyFwmN,MAAM,CAACtgK,EAAP,GAAYE,EAAE,GAAGnmD,CAA1G,CAAX;AACD,KAHD,MAGO;AACL;AACA;AACA,YAAMvxC,KAAK,GAAG,wBAAOjV,IAAI,CAACoC,IAAL,CAAUmkD,CAAV,CAAP,EAAqBvmD,IAAI,CAACoC,IAAL,CAAUokD,CAAV,CAArB,CAAd;AAAA,YACM8pN,IAAI,GAAGr7P,KAAK,CAACkU,UAAN,CAAiB,IAAjB,CADb;AAEAmnP,MAAAA,IAAI,CAACxgQ,KAAL,CAAWy2C,CAAX,EAAcC,CAAd;AACA8pN,MAAAA,IAAI,CAACC,SAAL,GAAiBL,QAAQ,CAACI,IAAI,CAACD,oBAAL,CAA0B3jK,EAA1B,EAA8BD,EAA9B,EAAkC1zB,EAAlC,EAAsC4zB,EAAtC,CAAD,EAA4C+G,IAAI,CAACsxJ,KAAjD,CAAzB;AACAsL,MAAAA,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoBjqN,CAApB,EAAuBC,CAAvB;AACA,aAAOylH,OAAO,CAACwkG,aAAR,CAAsBx7P,KAAtB,EAA6B,WAA7B,CAAP;AACD;AACF;;AAED,SAAOi7P,QAAQ,CAACzsP,QAAD,EAAWiwF,IAAI,CAACsxJ,KAAhB,CAAf;AACD;;AAED,SAASvV,KAAT,CAAgBxjF,OAAhB,EAAyBpqJ,IAAzB,EAA+B5kB,KAA/B,EAAsC;AACpC,SAAO2nQ,UAAU,CAAC3nQ,KAAD,CAAV,GAAoBwmB,QAAQ,CAACwoJ,OAAD,EAAUhvK,KAAV,EAAiB4kB,IAAI,CAACkrP,MAAtB,CAA5B,GAA4D9vQ,KAAnE;AACD;;AAED,SAASwN,IAAT,CAAewhK,OAAf,EAAwBpqJ,IAAxB,EAA8B4uO,OAA9B,EAAuC;AACrCA,EAAAA,OAAO,IAAI5uO,IAAI,CAAC6uP,WAAL,IAAoB,IAApB,GAA2B,CAA3B,GAA+B7uP,IAAI,CAAC6uP,WAA/C;;AAEA,MAAIjgB,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAACskG,SAAR,GAAoB9gB,KAAK,CAACxjF,OAAD,EAAUpqJ,IAAV,EAAgBA,IAAI,CAACpX,IAArB,CAAzB;AACA,WAAO,IAAP;AACD,GAJD,MAIO;AACL,WAAO,KAAP;AACD;AACF;;AAED,IAAIinO,KAAK,GAAG,EAAZ;;AACA,SAASk8B,MAAT,CAAiB3hG,OAAjB,EAA0BpqJ,IAA1B,EAAgC4uO,OAAhC,EAAyC;AACvC,MAAImgB,EAAE,GAAG,CAACA,EAAE,GAAG/uP,IAAI,CAACksP,WAAX,KAA2B,IAA3B,GAAkC6C,EAAlC,GAAuC,CAAhD;AACA,MAAIA,EAAE,IAAI,CAAV,EAAa,OAAO,KAAP;AACbngB,EAAAA,OAAO,IAAI5uO,IAAI,CAACgsP,aAAL,IAAsB,IAAtB,GAA6B,CAA7B,GAAiChsP,IAAI,CAACgsP,aAAjD;;AAEA,MAAIpd,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAAC4kG,WAAR,GAAsBphB,KAAK,CAACxjF,OAAD,EAAUpqJ,IAAV,EAAgBA,IAAI,CAAC+rP,MAArB,CAA3B;AACA3hG,IAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAApB;AACA3kG,IAAAA,OAAO,CAAC8kG,OAAR,GAAkBlvP,IAAI,CAACmvP,SAAL,IAAkB,MAApC;AACA/kG,IAAAA,OAAO,CAACglG,QAAR,GAAmBpvP,IAAI,CAACosP,UAAL,IAAmB,OAAtC;AACAhiG,IAAAA,OAAO,CAACilG,UAAR,GAAqBrvP,IAAI,CAACsvP,gBAAL,IAAyB,EAA9C;;AAEA,QAAIllG,OAAO,CAACmlG,WAAZ,EAAyB;AACvBnlG,MAAAA,OAAO,CAACmlG,WAAR,CAAoBvvP,IAAI,CAACwvP,UAAL,IAAmB3/B,KAAvC;AACAzlE,MAAAA,OAAO,CAACqlG,cAAR,GAAyBzvP,IAAI,CAAC0vP,gBAAL,IAAyB,CAAlD;AACD;;AAED,WAAO,IAAP;AACD,GAdD,MAcO;AACL,WAAO,KAAP;AACD;AACF;;AAED,SAASxvE,OAAT,CAAiB5gM,CAAjB,EAAoB6G,CAApB,EAAuB;AACrB,SAAO7G,CAAC,CAACqwQ,MAAF,GAAWxpQ,CAAC,CAACwpQ,MAAb,IAAuBrwQ,CAAC,CAACpB,KAAF,GAAUiI,CAAC,CAACjI,KAA1C;AACD;;AAED,SAAS0xQ,MAAT,CAAgBC,KAAhB,EAAuB;AACrB,MAAI,CAACA,KAAK,CAACC,MAAX,EAAmB,OAAOD,KAAK,CAACE,MAAb;AACnB,MAAIz8J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACIxxF,MAAM,GAAG,EADb;AAAA,MAEI9B,IAFJ;AAAA,MAGI5nB,CAHJ;AAAA,MAIIkO,CAJJ;;AAMA,OAAKlO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC4nB,IAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACA4nB,IAAAA,IAAI,CAAC9hB,KAAL,GAAa9F,CAAb;AACA,QAAI4nB,IAAI,CAAC2vP,MAAT,EAAiB7tP,MAAM,CAACzpB,IAAP,CAAY2nB,IAAZ;AAClB;;AAED6vP,EAAAA,KAAK,CAACC,MAAN,GAAe,KAAf;AACA,SAAOD,KAAK,CAACE,MAAN,GAAejuP,MAAM,CAAC1f,IAAP,CAAY89L,OAAZ,CAAtB;AACD;;AACD,SAASk9B,KAAT,CAAeyyC,KAAf,EAAsB7+D,OAAtB,EAA+B;AAC7B,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACIl7G,CADJ;AAAA,MAEIkO,CAFJ;AAGA,MAAI,CAACgtG,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B;AAC7B,QAAMq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAArB;;AAEA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B;AAC3B,SAAKU,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB3+D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACvB;;AAEDk7G,IAAAA,KAAK,GAAGy8J,MAAR;AACD;;AAED,OAAK33Q,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC44M,IAAAA,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACD;AACF;;AACD,SAAS43Q,SAAT,CAAmBH,KAAnB,EAA0B7+D,OAA1B,EAAmC;AACjC,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACI28J,GADJ;AAAA,MAEI73Q,CAFJ;AAGA,MAAI,CAACk7G,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B,OAAO,IAAP;AAC7B,QAAMq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAArB;AACA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B47G,KAAK,GAAGy8J,MAAR;;AAE7B,OAAK33Q,CAAC,GAAGk7G,KAAK,CAAC57G,MAAf,EAAuB,EAAEU,CAAF,IAAO,CAA9B,GAAkC;AAChC,QAAI63Q,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;;AAED,MAAI38J,KAAK,KAAKy8J,MAAd,EAAsB;AACpB,SAAKz8J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAd,EAAqBl7G,CAAC,GAAGk7G,KAAK,CAAC57G,MAApC,EAA4C,EAAEU,CAAF,IAAO,CAAnD,GAAuD;AACrD,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB;AACpB,YAAIM,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;AACF;AACF;;AAED,SAAO,IAAP;AACD;;AAED,SAASC,OAAT,CAAiBzpQ,IAAjB,EAAuB;AACrB,SAAO,UAAU2jK,OAAV,EAAmBylG,KAAnB,EAA0B3E,MAA1B,EAAkC;AACvC9tC,IAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,UAAI,CAACkrP,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C;AAC7CiF,QAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBpqJ,IAAhB,EAAsBA,IAAtB,CAAR;AACD;AACF,KAJI,CAAL;AAKD,GAND;AAOD;;AACD,SAASowP,OAAT,CAAiB3pQ,IAAjB,EAAuB;AACrB,SAAO,UAAU2jK,OAAV,EAAmBylG,KAAnB,EAA0B3E,MAA1B,EAAkC;AACvC,QAAI2E,KAAK,CAACv8J,KAAN,CAAY57G,MAAZ,KAAuB,CAACwzQ,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB+pE,KAAK,CAAC3E,MAAxB,CAAlC,CAAJ,EAAwE;AACtEiF,MAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBylG,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAhB,EAAgCu8J,KAAK,CAACv8J,KAAtC,CAAR;AACD;AACF,GAJD;AAKD;;AAED,SAAS68J,QAAT,CAAkB1pQ,IAAlB,EAAwB2jK,OAAxB,EAAiCpqJ,IAAjC,EAAuCszF,KAAvC,EAA8C;AAC5C,MAAIs7I,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AACA,MAAIA,OAAO,KAAK,CAAhB,EAAmB;AACnB,MAAInoP,IAAI,CAAC2jK,OAAD,EAAU92D,KAAV,CAAR,EAA0B;AAC1B46J,EAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;;AAEA,MAAIA,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,IAAAA,OAAO,CAACxhK,IAAR;AACD;;AAED,MAAIoX,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,IAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;;AAED,SAASsE,IAAT,CAActqP,IAAd,EAAoB;AAClBA,EAAAA,IAAI,GAAGA,IAAI,IAAIymL,gBAAf;AACA,SAAO,UAAUpiC,OAAV,EAAmBylG,KAAnB,EAA0BtxQ,CAA1B,EAA6Bue,CAA7B,EAAgCwzP,EAAhC,EAAoCC,EAApC,EAAwC;AAC7ChyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AACA,WAAOR,SAAS,CAACH,KAAD,EAAQ7vP,IAAI,IAAI;AAC9B,YAAM7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAf,CAD8B,CACP;;AAEvB,UAAI/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAN,IAA4B,CAACpqQ,CAAjC,EAAoC,OAHN,CAGc;;AAE5C,UAAI4f,IAAI,CAACqkJ,OAAD,EAAUpqJ,IAAV,EAAgBzhB,CAAhB,EAAmBue,CAAnB,EAAsBwzP,EAAtB,EAA0BC,EAA1B,CAAR,EAAuC,OAAOvwP,IAAP;AACxC,KANe,CAAhB;AAOD,GAVD;AAWD;;AACD,SAASywP,OAAT,CAAiBhqQ,IAAjB,EAAuBiqQ,MAAvB,EAA+B;AAC7B,SAAO,UAAUtmG,OAAV,EAAmBrmJ,CAAnB,EAAsBxlB,CAAtB,EAAyBue,CAAzB,EAA4B;AACjC,QAAIkD,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcskB,CAAd,IAAmBA,CAAC,CAAC,CAAD,CAApB,GAA0BA,CAArC;AAAA,QACInb,IAAI,GAAG8nQ,MAAM,IAAI,IAAV,GAAiB1wP,IAAI,CAACpX,IAAtB,GAA6B8nQ,MADxC;AAAA,QAEI3E,MAAM,GAAG/rP,IAAI,CAAC+rP,MAAL,IAAe3hG,OAAO,CAACumG,eAFpC;AAAA,QAGI5B,EAHJ;AAAA,QAIIv0B,EAJJ;;AAMA,QAAIuxB,MAAJ,EAAY;AACVgD,MAAAA,EAAE,GAAG/uP,IAAI,CAACksP,WAAV;AACA1xB,MAAAA,EAAE,GAAGx6N,IAAI,CAACmvP,SAAV;AACA/kG,MAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAtC;AACA3kG,MAAAA,OAAO,CAAC8kG,OAAR,GAAkB10B,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,MAApC;AACD;;AAED,WAAO/zO,IAAI,CAAC2jK,OAAD,EAAUrmJ,CAAV,CAAJ,GAAmB,KAAnB,GAA2Bnb,IAAI,IAAIwhK,OAAO,CAACyjG,aAAR,CAAsBtvQ,CAAtB,EAAyBue,CAAzB,CAAR,IAAuCivP,MAAM,IAAI3hG,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAAnF;AACD,GAfD;AAgBD;;AACD,SAAS8zP,QAAT,CAAkBnqQ,IAAlB,EAAwB;AACtB,SAAO4pQ,IAAI,CAACI,OAAO,CAAChqQ,IAAD,CAAR,CAAX;AACD;;AAED,SAASoyM,SAAT,CAAmBt6M,CAAnB,EAAsBue,CAAtB,EAAyB;AACvB,SAAO,eAAeve,CAAf,GAAmB,GAAnB,GAAyBue,CAAzB,GAA6B,GAApC;AACD;;AACD,SAAS61O,MAAT,CAAgBrzP,CAAhB,EAAmB;AACjB,SAAO,YAAYA,CAAZ,GAAgB,GAAvB;AACD;;AACD,SAASu9P,OAAT,CAAiBhK,MAAjB,EAAyBC,MAAzB,EAAiC;AAC/B,SAAO,WAAWD,MAAX,GAAoB,GAApB,GAA0BC,MAA1B,GAAmC,GAA1C;AACD;;AACD,SAAS+d,aAAT,CAAuB7wP,IAAvB,EAA6B;AAC3B,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAhB;AACD;;AACD,SAASg0P,UAAT,CAAoB9wP,IAApB,EAA0B;AACxB,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAT,IAAuCkD,IAAI,CAACu8N,KAAL,GAAa,MAAMoW,MAAM,CAAC3yO,IAAI,CAACu8N,KAAN,CAAzB,GAAwC,EAA/E,CAAP;AACD;;AACD,SAASw0B,aAAT,CAAuB/wP,IAAvB,EAA6B;AAC3B,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAT,IAAuCkD,IAAI,CAACu8N,KAAL,GAAa,MAAMoW,MAAM,CAAC3yO,IAAI,CAACu8N,KAAN,CAAzB,GAAwC,EAA/E,KAAsFv8N,IAAI,CAAC6yO,MAAL,IAAe7yO,IAAI,CAAC8yO,MAApB,GAA6B,MAAM+J,OAAO,CAAC78O,IAAI,CAAC6yO,MAAL,IAAe,CAAhB,EAAmB7yO,IAAI,CAAC8yO,MAAL,IAAe,CAAlC,CAA1C,GAAiF,EAAvK,CAAP;AACD;;AAED,SAASke,YAAT,CAAuB34P,IAAvB,EAA6BzY,KAA7B,EAAoCqxQ,KAApC,EAA2C;AACzC,WAAS/2O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,IAAAA,IAAI,CAAC,WAAD,EAAcu3Q,UAAU,CAAC9wP,IAAD,CAAxB,CAAJ;AACAzmB,IAAAA,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAOogB,IAAP,CAAX,CAAJ;AACD;;AAED,WAASkxP,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3BpgB,IAAAA,KAAK,CAACmtQ,YAAY,CAAC7B,MAAD,EAASlrP,IAAI,CAACu8N,KAAd,CAAb,EAAmCv8N,IAAnC,CAAL;AACA,WAAO6rP,WAAW,CAACX,MAAD,EAASlrP,IAAT,CAAX,CAA0B64L,SAA1B,CAAoC74L,IAAI,CAACzhB,CAAL,IAAU,CAA9C,EAAiDyhB,IAAI,CAAClD,CAAL,IAAU,CAA3D,CAAP;AACD;;AAED,WAASwgO,IAAT,CAAclzE,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,QAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,QACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,QAEIxd,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CAFtB;AAGAnyE,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACA,QAAIxd,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAerzP,CAAC,IAAIwlQ,QAApB;AACP16F,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAUpqJ,IAAV,CAAL;AACA,QAAI1gB,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACP8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD;;AAED,SAAO;AACLzE,IAAAA,IAAI,EAAEA,IADD;AAEL84P,IAAAA,GAAG,EAAE,MAFA;AAGLC,IAAAA,MAAM,EAAE,KAHH;AAILl3O,IAAAA,IAAI,EAAEA,IAJD;AAKLg3O,IAAAA,KAAK,EAAEA,KALF;AAML5zB,IAAAA,IAAI,EAAE4yB,OAAO,CAAC5yB,IAAD,CANR;AAOL+yB,IAAAA,IAAI,EAAEO,QAAQ,CAACtzB,IAAD,CAPT;AAQL2zB,IAAAA,KAAK,EAAEA,KAAK,IAAItD,aAAa,CAACrwB,IAAD;AARxB,GAAP;AAUD;;AAED,IAAI+zB,KAAK,GAAGL,YAAY,CAAC,KAAD,EAAQ73D,GAAR,CAAxB;;AAEA,SAASm4D,QAAT,CAAkBhyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AACtB,MAAIpyB,CAAC,GAAGhL,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B3tO,CAAC,CAAC,CAAD,CAAhC,GAAsCA,CAAC,CAAC,CAAD,CAA/C;AAAA,MACImxC,CAAC,GAAGvuE,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B,GAA/B,GAAqC,GAD7C;AAAA,MAEIjyQ,CAAC,GAAGkH,CAAC,CAAC5H,MAFV;AAAA,MAGI4G,GAAG,GAAG,CAAC4B,QAHX;AAAA,MAII+vQ,GAJJ;AAAA,MAKIhrQ,CALJ;;AAOA,SAAO,EAAE7M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bn7M,IAAAA,CAAC,GAAG9G,IAAI,CAACiT,GAAL,CAAS9R,CAAC,CAAClH,CAAD,CAAD,CAAKy1E,CAAL,IAAUvjE,CAAnB,CAAJ;;AAEA,QAAIrF,CAAC,GAAG3G,GAAR,EAAa;AACXA,MAAAA,GAAG,GAAG2G,CAAN;AACAgrQ,MAAAA,GAAG,GAAG3wQ,CAAC,CAAClH,CAAD,CAAP;AACD;AACF;;AAED,SAAO63Q,GAAP;AACD;;AACD,SAASsB,QAAT,CAAkBjyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AACtB,MAAI5gC,CAAC,GAAGqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,CAAC,CAAD,CAAD,CAAK4sQ,WAAL,IAAoB,CAA7B,EAAgC,CAAhC,CAAR;AAAA,MACI9zQ,CAAC,GAAGkH,CAAC,CAAC5H,MADV;AAAA,MAEIwsB,EAFJ;AAAA,MAGIhH,EAHJ;AAAA,MAII0wL,EAJJ;;AAMA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACA,QAAI0wL,EAAE,GAAG9xM,CAAT,EAAY,OAAOwD,CAAC,CAAClH,CAAD,CAAR;AACb;;AAED,SAAO,IAAP;AACD;;AACD,SAASo5Q,SAAT,CAAmBlyQ,CAAnB,EAAsBo9B,CAAtB,EAAyB;AACvB,MAAItkC,CAAC,GAAGkH,CAAC,CAAC5H,MAAV;AAAA,MACIwsB,EADJ;AAAA,MAEIhH,EAFJ;AAAA,MAGI0wL,EAHJ;;AAKA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACAgH,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKyH,IAAL,IAAa,CAAlB;AACA,QAAI+tM,EAAE,GAAG1pL,EAAE,GAAGA,EAAd,EAAkB,OAAO5kB,CAAC,CAAClH,CAAD,CAAR;AACnB;;AAED,SAAO,IAAP;AACD;;AAED,SAASq5Q,iBAAT,CAA4Bp5P,IAA5B,EAAkCzY,KAAlC,EAAyC8xQ,GAAzC,EAA8C;AAC5C,WAASx3O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxB,QAAIszF,KAAK,GAAGtzF,IAAI,CAACsqP,IAAL,CAAUh3J,KAAtB;AACA,QAAIA,KAAK,CAAC57G,MAAV,EAAkB6B,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAO0zG,KAAP,CAAX,CAAJ;AACnB;;AAED,WAAS49J,KAAT,CAAehG,MAAf,EAAuBZ,IAAvB,EAA6B;AAC3B,QAAIh3J,KAAK,GAAGg3J,IAAI,CAACh3J,KAAjB;;AAEA,QAAIA,KAAK,CAAC57G,MAAN,KAAiB,CAArB,EAAwB;AACtB,aAAOwzQ,MAAP;AACD,KAFD,MAEO;AACLtrQ,MAAAA,KAAK,CAACmtQ,YAAY,CAAC7B,MAAD,CAAb,EAAuB53J,KAAvB,CAAL;AACA,aAAOu4J,WAAW,CAACX,MAAD,EAAS53J,KAAK,CAAC,CAAD,CAAd,CAAlB;AACD;AACF;;AAED,WAASgqI,IAAT,CAAclzE,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B82D,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAU92D,KAAV,CAAL;AACD;;AAED,QAAM28J,GAAG,GAAGQ,OAAO,CAACnzB,IAAD,CAAnB;;AAEA,WAAS+yB,IAAT,CAAcjmG,OAAd,EAAuBylG,KAAvB,EAA8BtxQ,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,QAAIj9J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,QACIntG,CAAC,GAAG0pQ,KAAK,CAAC3E,MADd;;AAGA,QAAI,CAAC53J,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAAjB,IAA2ByO,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAArC,EAAyD;AACvD,aAAO,IAAP;AACD;;AAEDhyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AACA,WAAOP,GAAG,CAAC7lG,OAAD,EAAU92D,KAAV,EAAiB/0G,CAAjB,EAAoBue,CAApB,CAAH,GAA4Bw2F,KAAK,CAAC,CAAD,CAAjC,GAAuC,IAA9C;AACD;;AAED,SAAO;AACLj7F,IAAAA,IAAI,EAAEA,IADD;AAEL84P,IAAAA,GAAG,EAAE,MAFA;AAGLC,IAAAA,MAAM,EAAE,IAHH;AAILl3O,IAAAA,IAAI,EAAEA,IAJD;AAKLg3O,IAAAA,KAAK,EAAEA,KALF;AAML5zB,IAAAA,IAAI,EAAE8yB,OAAO,CAAC9yB,IAAD,CANR;AAOL+yB,IAAAA,IAAI,EAAEA,IAPD;AAQLY,IAAAA,KAAK,EAAEnD,cARF;AASL4D,IAAAA,GAAG,EAAEA;AATA,GAAP;AAWD;;AAED,IAAIC,MAAM,GAAGF,iBAAiB,CAAC,MAAD,EAASv2D,IAAT,EAAeo2D,QAAf,CAA9B;;AAEA,SAASM,MAAT,CAAiBxnG,OAAjB,EAA0BylG,KAA1B,EAAiC;AAC/B,MAAIvvO,IAAI,GAAGuvO,KAAK,CAACvvO,IAAjB;AACA8pI,EAAAA,OAAO,CAAC5lJ,IAAR;;AAEA,MAAI,0BAAW8b,IAAX,CAAJ,EAAsB;AACpB8pI,IAAAA,OAAO,CAACq9F,SAAR;AACAnnO,IAAAA,IAAI,CAAC8pI,OAAD,CAAJ;AACAA,IAAAA,OAAO,CAAC9pI,IAAR;AACD,GAJD,MAIO;AACLuxO,IAAAA,SAAS,CAACznG,OAAD,EAAUylG,KAAK,CAAC9rJ,KAAhB,CAAT;AACD;AACF;;AACD,SAAS8tJ,SAAT,CAAmBznG,OAAnB,EAA4BrmD,KAA5B,EAAmC;AACjCqmD,EAAAA,OAAO,CAACq9F,SAAR;AACA2C,EAAAA,eAAe,CAACrmJ,KAAD,CAAf,GAAyB0kJ,SAAS,CAACr+F,OAAD,EAAUrmD,KAAV,EAAiB,CAAjB,EAAoB,CAApB,CAAlC,GAA2DqmD,OAAO,CAAC6sE,IAAR,CAAa,CAAb,EAAgB,CAAhB,EAAmBlzH,KAAK,CAACzjH,KAAN,IAAe,CAAlC,EAAqCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAArD,CAA3D;AACA+7I,EAAAA,OAAO,CAAC9pI,IAAR;AACD;;AAED,SAASv7B,MAAT,CAAgBib,IAAhB,EAAsB;AACpB,QAAMisP,EAAE,GAAGmC,OAAO,CAACpuP,IAAI,CAACksP,WAAN,EAAmB,CAAnB,CAAlB;AACA,SAAOlsP,IAAI,CAAC8xP,YAAL,IAAqB,IAArB,GAA4B9xP,IAAI,CAAC8xP,YAAjC,GAAgD9xP,IAAI,CAAC+rP,MAAL,IAAeE,EAAE,GAAG,GAApB,IAA2BA,EAAE,GAAG,GAAhC,GAAsC,MAAM9tQ,IAAI,CAACiT,GAAL,CAAS66P,EAAE,GAAG,CAAd,CAA5C,GAA+D,CAAtH;AACD;;AAED,SAAS/xO,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,EAAAA,IAAI,CAAC,WAAD,EAAcs3Q,aAAa,CAAC7wP,IAAD,CAA3B,CAAJ;AACD;;AAED,SAAS+xP,aAAT,CAAuBx4Q,IAAvB,EAA6BymB,IAA7B,EAAmC;AACjC,QAAM5mB,GAAG,GAAG2L,MAAM,CAACib,IAAD,CAAlB;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAMkvQ,SAAS,CAAC,IAAD,EAAOzoP,IAAP,EAAa5mB,GAAb,EAAkBA,GAAlB,CAAf,CAAJ;AACD;;AAED,SAAS44Q,UAAT,CAAoBz4Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;AACAw4Q,EAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD;;AAED,SAASiyP,UAAT,CAAoB14Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;;AAEA,MAAIymB,IAAI,CAACkyP,gBAAT,EAA2B;AACzBH,IAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD,GAFD,MAEO;AACLzmB,IAAAA,IAAI,CAAC,GAAD,EAAM,EAAN,CAAJ;AACD;AACF;;AAED,SAAS44Q,OAAT,CAAiB54Q,IAAjB,EAAuBymB,IAAvB,EAA6ByqP,QAA7B,EAAuC;AACrC,QAAMj2J,GAAG,GAAGx0F,IAAI,CAACsgB,IAAL,GAAYA,IAAI,CAACmqO,QAAD,EAAWzqP,IAAX,EAAiBA,IAAjB,CAAhB,GAAyC,IAArD;AACAzmB,EAAAA,IAAI,CAAC,WAAD,EAAci7G,GAAd,CAAJ;AACD;;AAED,SAAS08J,KAAT,CAAehG,MAAf,EAAuBnnJ,KAAvB,EAA8B;AAC5B,MAAI,CAACA,KAAK,CAACzjF,IAAP,IAAeyjF,KAAK,CAACzQ,KAAzB,EAAgC;AAC9B,UAAMA,KAAK,GAAGyQ,KAAK,CAACzQ,KAApB;AAAA,UACMzjB,CAAC,GAAGyjB,KAAK,CAAC57G,MADhB;;AAGA,SAAK,IAAI2K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtF,CAApB,EAAuB,EAAExtF,CAAzB,EAA4B;AAC1B6oQ,MAAAA,MAAM,CAAClqD,KAAP,CAAa1tG,KAAK,CAACjxG,CAAD,CAAL,CAAS6oQ,MAAtB;AACD;AACF;;AAED,MAAI,CAACnnJ,KAAK,CAACzjF,IAAN,IAAcyjF,KAAK,CAACzjH,KAApB,IAA6ByjH,KAAK,CAAC11F,MAApC,KAA+C,CAAC01F,KAAK,CAACquJ,OAA1D,EAAmE;AACjElH,IAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBA,GAAjB,CAAqBgrG,KAAK,CAACzjH,KAAN,IAAe,CAApC,EAAuCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAAvD;AACD;;AAEDw9O,EAAAA,WAAW,CAACX,MAAD,EAASnnJ,KAAT,CAAX;AACA,SAAOmnJ,MAAM,CAACryD,SAAP,CAAiB90F,KAAK,CAACxlH,CAAN,IAAW,CAA5B,EAA+BwlH,KAAK,CAACjnG,CAAN,IAAW,CAA1C,CAAP;AACD;;AAED,SAASu1P,aAAT,CAAuBjoG,OAAvB,EAAgCrmD,KAAhC,EAAuCxlH,CAAvC,EAA0Cue,CAA1C,EAA6C;AAC3C,QAAM1jB,GAAG,GAAG2L,MAAM,CAACg/G,KAAD,CAAlB;AACAqmD,EAAAA,OAAO,CAACq9F,SAAR;AACAgB,EAAAA,SAAS,CAACr+F,OAAD,EAAUrmD,KAAV,EAAiB,CAACxlH,CAAC,IAAI,CAAN,IAAWnF,GAA5B,EAAiC,CAAC0jB,CAAC,IAAI,CAAN,IAAW1jB,GAA5C,CAAT;AACD;;AAED,MAAMk5Q,aAAa,GAAG7B,OAAO,CAAC4B,aAAD,CAA7B;AACA,MAAME,aAAa,GAAG9B,OAAO,CAAC4B,aAAD,EAAgB,KAAhB,CAA7B;AACA,MAAMG,SAAS,GAAG/B,OAAO,CAAC4B,aAAD,EAAgB,IAAhB,CAAzB;;AAEA,SAAS/0B,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ9rJ,KAAK,IAAI;AACpB,UAAMusJ,EAAE,GAAGvsJ,KAAK,CAACxlH,CAAN,IAAW,CAAtB;AAAA,UACMgyQ,EAAE,GAAGxsJ,KAAK,CAACjnG,CAAN,IAAW,CADtB;AAAA,UAEM21P,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAFnB;AAAA,UAGMtjB,OAAO,GAAG7qI,KAAK,CAAC6qI,OAAN,IAAiB,IAAjB,GAAwB,CAAxB,GAA4B7qI,KAAK,CAAC6qI,OAHlD,CADoB,CAIuC;;AAE3D,QAAI,CAAC7qI,KAAK,CAACgoJ,MAAN,IAAgBhoJ,KAAK,CAACn7G,IAAvB,KAAgCgmP,OAApC,EAA6C;AAC3CyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACArC,MAAAA,KAAK,CAAC9jG,OAAD,EAAUrmD,KAAV,CAAL;;AAEA,UAAIA,KAAK,CAACn7G,IAAN,IAAcA,IAAI,CAACwhK,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAtB,EAAiD;AAC/CxkF,QAAAA,OAAO,CAACxhK,IAAR;AACD;;AAED,UAAIm7G,KAAK,CAACgoJ,MAAN,IAAgB,CAAC0G,IAAjB,IAAyB1G,MAAM,CAAC3hG,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAnC,EAA8D;AAC5DxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,KAjBmB,CAiBlB;;;AAGF3hG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkBy3D,EAAlB,EAAsBC,EAAtB;AACA,QAAIxsJ,KAAK,CAACzjF,IAAV,EAAgBuxO,SAAS,CAACznG,OAAD,EAAUrmD,KAAV,CAAT;AAChB,QAAImnJ,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiB,CAACy3D,EAAlB,EAAsB,CAACC,EAAvB,EAvBQ,CAuBoB;;AAExCnzC,IAAAA,KAAK,CAACr5G,KAAD,EAAQ/jG,IAAI,IAAI;AACnB,WAAKs9N,IAAL,CAAUlzE,OAAV,EAAmBpqJ,IAAnB,EAAyBkrP,MAAzB;AACD,KAFI,CAAL,CAzBoB,CA2BhB;;AAEJ,QAAIA,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiBy3D,EAAjB,EAAqBC,EAArB;AACZnmG,IAAAA,OAAO,CAACsoG,OAAR,GA9BoB,CA8BD;;AAEnB,QAAID,IAAI,IAAI1uJ,KAAK,CAACgoJ,MAAd,IAAwBnd,OAA5B,EAAqC;AACnCyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACArC,MAAAA,KAAK,CAAC9jG,OAAD,EAAUrmD,KAAV,CAAL;;AAEA,UAAIgoJ,MAAM,CAAC3hG,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAV,EAAqC;AACnCxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;AACF,GAxCI,CAAL;AAyCD;;AAED,SAAS4G,MAAT,CAAgBvoG,OAAhB,EAAyBylG,KAAzB,EAAgCtxQ,CAAhC,EAAmCue,CAAnC,EAAsCwzP,EAAtC,EAA0CC,EAA1C,EAA8C;AAC5C,MAAIV,KAAK,CAAC3E,MAAN,IAAgB,CAAC2E,KAAK,CAAC3E,MAAN,CAAaD,QAAb,CAAsBqF,EAAtB,EAA0BC,EAA1B,CAAjB,IAAkD,CAACV,KAAK,CAACv8J,KAA7D,EAAoE;AAClE,WAAO,IAAP;AACD;;AAED,QAAM+lI,EAAE,GAAG96O,CAAC,GAAG6rK,OAAO,CAAComG,UAAvB;AAAA,QACMl3B,EAAE,GAAGx8N,CAAC,GAAGstJ,OAAO,CAAComG,UADvB;AAEA,SAAOR,SAAS,CAACH,KAAD,EAAQ9rJ,KAAK,IAAI;AAC/B,QAAIksJ,GAAJ,EAAS/rP,EAAT,EAAahH,EAAb,CAD+B,CACd;;AAEjB,UAAM/W,CAAC,GAAG49G,KAAK,CAACmnJ,MAAhB;AACA,QAAI/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAV,EAA8B,OAJC,CAIO;;AAEtCrsP,IAAAA,EAAE,GAAG6/F,KAAK,CAACxlH,CAAN,IAAW,CAAhB;AACA2e,IAAAA,EAAE,GAAG6mG,KAAK,CAACjnG,CAAN,IAAW,CAAhB;AACA,UAAMqhF,EAAE,GAAGj6E,EAAE,IAAI6/F,KAAK,CAACzjH,KAAN,IAAe,CAAnB,CAAb;AAAA,UACMsyQ,EAAE,GAAG11P,EAAE,IAAI6mG,KAAK,CAAC11F,MAAN,IAAgB,CAApB,CADb;AAAA,UAEMxpB,CAAC,GAAGk/G,KAAK,CAACzjF,IAFhB;AAGA,QAAIz7B,CAAC,KAAKyrQ,EAAE,GAAGpsP,EAAL,IAAWosP,EAAE,GAAGnyK,EAAhB,IAAsBoyK,EAAE,GAAGrzP,EAA3B,IAAiCqzP,EAAE,GAAGqC,EAA3C,CAAL,EAAqD,OAXtB,CAW8B;;AAE7DxoG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkB30L,EAAlB,EAAsBhH,EAAtB;AACAgH,IAAAA,EAAE,GAAGosP,EAAE,GAAGpsP,EAAV;AACAhH,IAAAA,EAAE,GAAGqzP,EAAE,GAAGrzP,EAAV,CAhB+B,CAgBjB;;AAEd,QAAIrY,CAAC,IAAIulQ,eAAe,CAACrmJ,KAAD,CAApB,IAA+B,CAACyuJ,SAAS,CAACpoG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAA7C,EAAuE;AACrElvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO,IAAP;AACD;;AAED,UAAMD,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAAnB;AAAA,UACMW,EAAE,GAAGhD,KAAK,CAACiD,WAAN,KAAsB,KADjC,CAvB+B,CAwBS;;AAExC,QAAID,EAAE,IAAIJ,IAAN,IAAc1uJ,KAAK,CAACgoJ,MAApB,IAA8BwG,aAAa,CAACnoG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAA/C,EAAyE;AACvElvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO3uJ,KAAP;AACD,KA7B8B,CA6B7B;;;AAGFksJ,IAAAA,GAAG,GAAGD,SAAS,CAACjsJ,KAAD,EAAQumJ,IAAI,IAAIyI,QAAQ,CAACzI,IAAD,EAAOpmP,EAAP,EAAWhH,EAAX,CAAR,GAAyB,KAAKmzP,IAAL,CAAU/F,IAAV,EAAgB/rQ,CAAhB,EAAmBue,CAAnB,EAAsBoH,EAAtB,EAA0BhH,EAA1B,CAAzB,GAAyD,IAAzE,CAAf,CAhC+B,CAgCgE;;AAE/F,QAAI,CAAC+yP,GAAD,IAAQ4C,EAAR,KAAe9uJ,KAAK,CAACn7G,IAAN,IAAc,CAAC6pQ,IAAD,IAAS1uJ,KAAK,CAACgoJ,MAA5C,KAAuDuG,aAAa,CAACloG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAAxE,EAAkG;AAChG22B,MAAAA,GAAG,GAAGlsJ,KAAN;AACD,KApC8B,CAoC7B;;;AAGFqmD,IAAAA,OAAO,CAACsoG,OAAR;AACA,WAAOzC,GAAG,IAAI,IAAd;AACD,GAzCe,CAAhB;AA0CD;;AAED,SAAS8C,QAAT,CAAkBzI,IAAlB,EAAwB/rQ,CAAxB,EAA2Bue,CAA3B,EAA8B;AAC5B,SAAO,CAACwtP,IAAI,CAACwI,WAAL,KAAqB,KAArB,IAA8BxI,IAAI,CAAC0I,QAAL,KAAkB,OAAjD,KAA6D1I,IAAI,CAACY,MAAlE,IAA4EZ,IAAI,CAACY,MAAL,CAAYD,QAAZ,CAAqB1sQ,CAArB,EAAwBue,CAAxB,CAAnF;AACD;;AAED,IAAIinG,KAAK,GAAG;AACV1rG,EAAAA,IAAI,EAAE,OADI;AAEV84P,EAAAA,GAAG,EAAE,GAFK;AAGVC,EAAAA,MAAM,EAAE,KAHE;AAIVl3O,EAAAA,IAAI,EAAEA,IAJI;AAKVg3O,EAAAA,KAAK,EAAEA,KALG;AAMV5zB,EAAAA,IAAI,EAAEA,IANI;AAOV+yB,EAAAA,IAAI,EAAEsC,MAPI;AAQV1B,EAAAA,KAAK,EAAElD,aARG;AASVoE,EAAAA,OAAO,EAAEA,OATC;AAUVH,EAAAA,UAAU,EAAEA,UAVF;AAWVC,EAAAA,UAAU,EAAEA;AAXF,CAAZ;AAcA,IAAI/2J,QAAQ,GAAG;AACb,WAAS,4BADI;AAEb,iBAAe,8BAFF;AAGb,aAAW;AAHE,CAAf;;AAMA,SAAS+3J,QAAT,CAAkBjzP,IAAlB,EAAwByqP,QAAxB,EAAkC;AAChC,MAAIr3P,KAAK,GAAG4M,IAAI,CAAC5M,KAAjB;;AAEA,MAAI,CAACA,KAAD,IAAU4M,IAAI,CAACw0F,GAAL,IAAYx0F,IAAI,CAACw0F,GAAL,KAAaphG,KAAK,CAACohG,GAA7C,EAAkD;AAChDphG,IAAAA,KAAK,GAAG;AACNu4P,MAAAA,QAAQ,EAAE,KADJ;AAENrrQ,MAAAA,KAAK,EAAE,CAFD;AAGN+tB,MAAAA,MAAM,EAAE;AAHF,KAAR;AAKAo8O,IAAAA,QAAQ,CAACgB,SAAT,CAAmBzrP,IAAI,CAACw0F,GAAxB,EAA6BntG,IAA7B,CAAkC+L,KAAK,IAAI;AACzC4M,MAAAA,IAAI,CAAC5M,KAAL,GAAaA,KAAb;AACA4M,MAAAA,IAAI,CAAC5M,KAAL,CAAWohG,GAAX,GAAiBx0F,IAAI,CAACw0F,GAAtB;AACD,KAHD;AAID;;AAED,SAAOphG,KAAP;AACD;;AAED,SAASgsC,UAAT,CAAoBp/B,IAApB,EAA0B5M,KAA1B,EAAiC;AAC/B,SAAO4M,IAAI,CAAC1f,KAAL,IAAc,IAAd,GAAqB0f,IAAI,CAAC1f,KAA1B,GAAkC,CAAC8S,KAAD,IAAU,CAACA,KAAK,CAAC9S,KAAjB,GAAyB,CAAzB,GAA6B0f,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAACqO,MAA9B,GAAuCrO,IAAI,CAACqO,MAAL,GAAcjb,KAAK,CAAC9S,KAApB,GAA4B8S,KAAK,CAACib,MAAzE,GAAkFjb,KAAK,CAAC9S,KAA9J;AACD;;AAED,SAAS6+C,WAAT,CAAqBn/B,IAArB,EAA2B5M,KAA3B,EAAkC;AAChC,SAAO4M,IAAI,CAACqO,MAAL,IAAe,IAAf,GAAsBrO,IAAI,CAACqO,MAA3B,GAAoC,CAACjb,KAAD,IAAU,CAACA,KAAK,CAACib,MAAjB,GAA0B,CAA1B,GAA8BrO,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAAC1f,KAA9B,GAAsC0f,IAAI,CAAC1f,KAAL,GAAa8S,KAAK,CAACib,MAAnB,GAA4Bjb,KAAK,CAAC9S,KAAxE,GAAgF8S,KAAK,CAACib,MAA/J;AACD;;AAED,SAAS8kP,YAAT,CAAsBxiE,KAAtB,EAA6BjsJ,CAA7B,EAAgC;AAC9B,SAAOisJ,KAAK,KAAK,QAAV,GAAqBjsJ,CAAC,GAAG,CAAzB,GAA6BisJ,KAAK,KAAK,OAAV,GAAoBjsJ,CAApB,GAAwB,CAA5D;AACD;;AAED,SAAS0uN,YAAT,CAAsBxqG,QAAtB,EAAgCjkH,CAAhC,EAAmC;AACjC,SAAOikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAC,GAAG,CAA5B,GAAgCikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAxB,GAA4B,CAAnE;AACD;;AAED,SAAS0uN,MAAT,CAAgB95Q,IAAhB,EAAsBymB,IAAtB,EAA4ByqP,QAA5B,EAAsC;AACpC,QAAMhlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAOyqP,QAAP,CAApB;AAAA,QACM/lN,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAAA,QAKMvsD,CAAC,GAAG,CAACqtH,GAAG,CAACwnE,GAAL,IAAYxnE,GAAG,CAAC6tJ,SAAhB,GAA4B7tJ,GAAG,CAAC6tJ,SAAJ,EAA5B,GAA8C7tJ,GAAG,CAACwnE,GAAJ,IAAW,EALnE;AAMA1zL,EAAAA,IAAI,CAAC,MAAD,EAASnB,CAAT,EAAY8iH,QAAQ,CAAC,aAAD,CAApB,EAAqC,YAArC,CAAJ;AACA3hH,EAAAA,IAAI,CAAC,WAAD,EAAcs/M,SAAS,CAACt6M,CAAD,EAAIue,CAAJ,CAAvB,CAAJ;AACAvjB,EAAAA,IAAI,CAAC,OAAD,EAAUmrD,CAAV,CAAJ;AACAnrD,EAAAA,IAAI,CAAC,QAAD,EAAWorD,CAAX,CAAJ;AACAprD,EAAAA,IAAI,CAAC,qBAAD,EAAwBymB,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,GAAwB,MAAxB,GAAiC,UAAzD,CAAJ;AACD;;AAED,SAASK,OAAT,CAAiBrI,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,QAAMylG,GAAG,GAAGzlG,IAAI,CAAC5M,KAAjB;AAAA,QACMsxC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAKA,SAAOumN,MAAM,CAACnwQ,GAAP,CAAWwD,CAAX,EAAcue,CAAd,EAAiBve,CAAC,GAAGmmD,CAArB,EAAwB5nC,CAAC,GAAG6nC,CAA5B,CAAP;AACD;;AAED,SAAS6uN,MAAT,CAAgBppG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OAD5B,CACoC;;AAEvD,UAAMzlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAO,IAAP,CAApB;AACA,QAAI0kC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CAAlB;AAAA,QACI9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CADnB;AAAA,QAEIlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAFpC;AAAA,QAGI5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAHpC;AAAA,QAIIiqM,OAJJ;AAAA,QAKI6kB,GALJ;AAAA,QAMIC,GANJ;AAAA,QAOI53Q,CAPJ;;AASA,QAAIkkB,IAAI,CAACkzP,MAAL,KAAgB,KAApB,EAA2B;AACzBO,MAAAA,GAAG,GAAGhuJ,GAAG,CAACnlH,KAAJ,GAAYmlH,GAAG,CAACp3F,MAAtB;AACAqlP,MAAAA,GAAG,GAAG1zP,IAAI,CAAC1f,KAAL,GAAa0f,IAAI,CAACqO,MAAxB;;AAEA,UAAIolP,GAAG,KAAKA,GAAR,IAAeC,GAAG,KAAKA,GAAvB,IAA8BD,GAAG,KAAKC,GAA1C,EAA+C;AAC7C,YAAIA,GAAG,GAAGD,GAAV,EAAe;AACb33Q,UAAAA,CAAC,GAAG4oD,CAAC,GAAG+uN,GAAR;AACA32P,UAAAA,CAAC,IAAI,CAAC6nC,CAAC,GAAG7oD,CAAL,IAAU,CAAf;AACA6oD,UAAAA,CAAC,GAAG7oD,CAAJ;AACD,SAJD,MAIO;AACLA,UAAAA,CAAC,GAAG6oD,CAAC,GAAG8uN,GAAR;AACAl1Q,UAAAA,CAAC,IAAI,CAACmmD,CAAC,GAAG5oD,CAAL,IAAU,CAAf;AACA4oD,UAAAA,CAAC,GAAG5oD,CAAJ;AACD;AACF;AACF;;AAED,QAAI2pH,GAAG,CAACkmJ,QAAJ,IAAgBlmJ,GAAG,CAAC6tJ,SAAxB,EAAmC;AACjCpF,MAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;AACAoqJ,MAAAA,OAAO,CAAC0kG,WAAR,GAAsB,CAAClgB,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAhB,KAA4B,IAA5B,GAAmCA,OAAnC,GAA6C,CAAnE;AACAxkF,MAAAA,OAAO,CAACupG,qBAAR,GAAgC3zP,IAAI,CAACohN,MAAL,KAAgB,KAAhD;AACAh3D,MAAAA,OAAO,CAACt7D,SAAR,CAAkB2W,GAAlB,EAAuBlnH,CAAvB,EAA0Bue,CAA1B,EAA6B4nC,CAA7B,EAAgCC,CAAhC;AACD;AACF,GApCI,CAAL;AAqCD;;AAED,IAAIvxC,KAAK,GAAG;AACViF,EAAAA,IAAI,EAAE,OADI;AAEV84P,EAAAA,GAAG,EAAE,OAFK;AAGVC,EAAAA,MAAM,EAAE,KAHE;AAIVl3O,EAAAA,IAAI,EAAEm5O,MAJI;AAKVnC,EAAAA,KAAK,EAAEqC,OALG;AAMVj2B,EAAAA,IAAI,EAAEk2B,MANI;AAOVnD,EAAAA,IAAI,EAAEA,IAAI,EAPA;AAQVY,EAAAA,KAAK,EAAEzkE,gBARG;AASV;AACAtxM,EAAAA,GAAG,EAAE+3Q,QAVK;AAWVW,EAAAA,OAAO,EAAET,YAXC;AAYVU,EAAAA,OAAO,EAAET;AAZC,CAAZ;AAeA,IAAIU,MAAM,GAAGrC,iBAAiB,CAAC,MAAD,EAAS9kP,IAAT,EAAe4kP,QAAf,CAA9B;;AAEA,SAASwC,MAAT,CAAgBx6Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1B,MAAIg0P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAAxB;AAAA,MACIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CADxB;;AAGA,MAAIkhB,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB16Q,IAAAA,IAAI,CAAC,eAAD,EAAkB,oBAAlB,CAAJ;AACD;;AAEDA,EAAAA,IAAI,CAAC,WAAD,EAAcw3Q,aAAa,CAAC/wP,IAAD,CAA3B,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAMymB,IAAI,CAACvZ,IAAX,CAAJ;AACD;;AAED,SAASA,IAAT,CAAc2jK,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,MAAIvZ,IAAI,GAAGuZ,IAAI,CAACvZ,IAAhB;AACA,MAAIA,IAAI,IAAI,IAAZ,EAAkB,OAAO,IAAP;AAClB,MAAIlI,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEIk3P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAFxB;AAAA,MAGIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CAHxB;AAAA,MAIIxzP,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAL,IAAc,CAAf,IAAoBuoB,QAJ5B;AAAA,MAKI91E,KAAK,GAAGhvK,IAAI,CAACk0P,SALjB;;AAOA,MAAI,CAACllF,KAAD,IAAUA,KAAK,CAACvoL,IAAN,KAAeA,IAA7B,EAAmC;AACjC,KAACuZ,IAAI,CAACk0P,SAAL,GAAiBllF,KAAK,GAAG21E,SAAS,CAACl+P,IAAD,CAAnC,EAA2CA,IAA3C,GAAkDA,IAAlD;AACD;;AAED,MAAInH,CAAC,IAAI8qK,OAAO,CAACuoF,MAAb,IAAuBvoF,OAAO,CAACyuC,SAAnC,EAA8C;AAC5CzuC,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,IAAAA,OAAO,CAACuoF,MAAR,CAAerzP,CAAf;AACA4nQ,IAAAA,UAAU,CAAC98F,OAAD,EAAU4kB,KAAV,EAAiB,CAAjB,EAAoB,CAApB,EAAuBglF,EAAvB,EAA2BC,EAA3B,CAAV;AACA7pG,IAAAA,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACA8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD,GAND,MAMO;AACLoqP,IAAAA,UAAU,CAAC98F,OAAD,EAAU4kB,KAAV,EAAiBzwL,CAAjB,EAAoBue,CAApB,EAAuBk3P,EAAvB,EAA2BC,EAA3B,CAAV;AACD;AACF;;AAED,SAASE,OAAT,CAAiBjJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,SAAOvZ,IAAI,CAACsmQ,YAAY,CAAC7B,MAAD,EAASlrP,IAAI,CAACu8N,KAAd,CAAb,EAAmCv8N,IAAnC,CAAJ,GAA+CkrP,MAAM,CAACnwQ,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,CAA/C,GAAwE8wQ,WAAW,CAACX,MAAD,EAASlrP,IAAT,EAAe,IAAf,CAA1F;AACD;;AAED,IAAIo0P,MAAM,GAAG;AACX/7P,EAAAA,IAAI,EAAE,MADK;AAEX84P,EAAAA,GAAG,EAAE,MAFM;AAGXC,EAAAA,MAAM,EAAE,KAHG;AAIXl3O,EAAAA,IAAI,EAAE65O,MAJK;AAKX7C,EAAAA,KAAK,EAAEiD,OALI;AAMX72B,EAAAA,IAAI,EAAE4yB,OAAO,CAACzpQ,IAAD,CANF;AAOX4pQ,EAAAA,IAAI,EAAEO,QAAQ,CAACnqQ,IAAD,CAPH;AAQXwqQ,EAAAA,KAAK,EAAEtD,aAAa,CAAClnQ,IAAD;AART,CAAb;;AAWA,SAAS4tQ,MAAT,CAAgB96Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1BzmB,EAAAA,IAAI,CAAC,GAAD,EAAMkvQ,SAAS,CAAC,IAAD,EAAOzoP,IAAP,CAAf,CAAJ;AACD;;AAED,SAASs0P,OAAT,CAAiBpJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,MAAIzhB,CAAJ,EAAOue,CAAP;AACA,SAAO+uP,WAAW,CAACX,MAAM,CAACnwQ,GAAP,CAAWwD,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAzB,EAA4Bue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CAA1C,EAA6Cve,CAAC,GAAGyhB,IAAI,CAAC1f,KAAT,IAAkB,CAA/D,EAAkEwc,CAAC,GAAGkD,IAAI,CAACqO,MAAT,IAAmB,CAArF,CAAD,EAA0FrO,IAA1F,CAAlB;AACD;;AAED,SAASu0P,MAAT,CAAgBnqG,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7BoqJ,EAAAA,OAAO,CAACq9F,SAAR;AACAgB,EAAAA,SAAS,CAACr+F,OAAD,EAAUpqJ,IAAV,CAAT;AACD;;AAED,IAAIi3N,IAAI,GAAG;AACT5+N,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAEm6O,MAJG;AAKTnD,EAAAA,KAAK,EAAEoD,OALE;AAMTh3B,EAAAA,IAAI,EAAE4yB,OAAO,CAACqE,MAAD,CANJ;AAOTlE,EAAAA,IAAI,EAAEO,QAAQ,CAAC2D,MAAD,CAPL;AAQTtD,EAAAA,KAAK,EAAElD;AARE,CAAX;;AAWA,SAASyG,MAAT,CAAgBj7Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1BzmB,EAAAA,IAAI,CAAC,WAAD,EAAcs3Q,aAAa,CAAC7wP,IAAD,CAA3B,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAL,IAAWl3D,IAAI,CAACzhB,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACAhF,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAL,IAAW9qF,IAAI,CAAClD,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACD;;AAED,SAAS23P,OAAT,CAAiBvJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,MAAI6qF,EAAJ,EAAQD,EAAR;AACA,SAAOihK,WAAW,CAACX,MAAM,CAACnwQ,GAAP,CAAW8vG,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CAA1B,EAA6BqsG,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAA5C,EAA+CkD,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAA3E,EAA+E7qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAA3G,CAAD,EAAiH5qF,IAAjH,CAAlB;AACD;;AAED,SAAS00P,MAAT,CAAgBtqG,OAAhB,EAAyBpqJ,IAAzB,EAA+B4uO,OAA/B,EAAwC;AACtC,MAAI/jJ,EAAJ,EAAQD,EAAR,EAAY1zB,EAAZ,EAAgB4zB,EAAhB;;AAEA,MAAI9qF,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjD/jJ,IAAAA,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAqsG,IAAAA,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAAf;AACAo6D,IAAAA,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAAjC;AACAC,IAAAA,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAAjC;AACAw/D,IAAAA,OAAO,CAACq9F,SAAR;AACAr9F,IAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAf,EAAmBD,EAAnB;AACAw/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAnB;AACA,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD;;AAED,SAAS6pK,MAAT,CAAgBvqG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OAD5B,CACoC;;AAEvD,QAAItc,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;;AAEA,QAAIA,OAAO,IAAI8lB,MAAM,CAACtqG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7Csf,MAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;AACAoqJ,MAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,GATI,CAAL;AAUD;;AAED,SAASkE,GAAT,CAAa7lG,OAAb,EAAsBpqJ,IAAtB,EAA4BzhB,CAA5B,EAA+Bue,CAA/B,EAAkC;AAChC,MAAI,CAACstJ,OAAO,CAACumG,eAAb,EAA8B,OAAO,KAAP;AAC9B,SAAO+D,MAAM,CAACtqG,OAAD,EAAUpqJ,IAAV,EAAgB,CAAhB,CAAN,IAA4BoqJ,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAAnC;AACD;;AAED,IAAI83P,IAAI,GAAG;AACTv8P,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAEs6O,MAJG;AAKTtD,EAAAA,KAAK,EAAEuD,OALE;AAMTn3B,EAAAA,IAAI,EAAEq3B,MANG;AAOTtE,EAAAA,IAAI,EAAEA,IAAI,CAACJ,GAAD,CAPD;AAQTgB,EAAAA,KAAK,EAAEjD;AARE,CAAX;AAWA,IAAI6G,OAAO,GAAG7D,YAAY,CAAC,OAAD,EAAUpxQ,KAAV,CAA1B;AAEA,IAAIk1Q,QAAQ,GAAG9D,YAAY,CAAC,QAAD,EAAWrvD,MAAX,EAAmBmsD,cAAnB,CAA3B;AAEA,MAAMiH,UAAU,GAAG,yBAAnB;AACA,IAAIC,WAAW,GAAG;AAChB3mP,EAAAA,MAAM,EAAE4mP,QADQ;AAEhBC,EAAAA,YAAY,EAAEA,YAFE;AAGhBC,EAAAA,aAAa,EAAEA,aAHC;AAIhB70Q,EAAAA,KAAK,EAAE60Q,aAJS;AAKhBpuP,EAAAA,MAAM,EAAEquP;AALQ,CAAlB;;AAOAA,SAAS,CAAC,IAAD,CAAT;;AAEA,SAASA,SAAT,CAAmBC,GAAnB,EAAwB;AACtBL,EAAAA,WAAW,CAAC10Q,KAAZ,GAAoB+0Q,GAAG,IAAI3H,SAAP,GAAmBwH,YAAnB,GAAkCC,aAAtD;AACD,EAAC;;;AAGF,SAASA,aAAT,CAAuBn1P,IAAvB,EAA6B8wF,IAA7B,EAAmC;AACjC,SAAOwkK,cAAc,CAACC,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAV,EAAwBmkK,QAAQ,CAACj1P,IAAD,CAAhC,CAArB;AACD;;AAED,SAASs1P,cAAT,CAAwBxkK,IAAxB,EAA8B0kK,iBAA9B,EAAiD;AAC/C,SAAO,CAAC,EAAE,MAAM1kK,IAAI,CAACp5G,MAAX,GAAoB89Q,iBAAtB,CAAR;AACD,EAAC;;;AAGF,SAASN,YAAT,CAAsBl1P,IAAtB,EAA4B8wF,IAA5B,EAAkC;AAChC,SAAOmkK,QAAQ,CAACj1P,IAAD,CAAR,IAAkB,CAAlB,IAAuB,EAAE8wF,IAAI,GAAGykK,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAlB,CAAvB,GAAyD,CAAzD,GAA6D2kK,aAAa,CAAC3kK,IAAD,EAAO4kK,IAAI,CAAC11P,IAAD,CAAX,CAAjF;AACD;;AAED,SAASy1P,aAAT,CAAuB3kK,IAAvB,EAA6B6kK,WAA7B,EAA0C;AACxC,QAAMt5Q,GAAG,GAAG,IAAI1E,MAAJ,CAAWg+Q,WAAX,EAAwB,IAAxB,EAA8Bh+Q,MAA9B,CAAqCm5G,IAArC,CAAZ;AACA,MAAIxwG,KAAK,GAAGy0Q,UAAU,CAAC75Q,GAAX,CAAemB,GAAf,CAAZ;;AAEA,MAAIiE,KAAK,KAAKgtH,SAAd,EAAyB;AACvBogJ,IAAAA,SAAS,CAACgI,IAAV,GAAiBC,WAAjB;AACAr1Q,IAAAA,KAAK,GAAGotQ,SAAS,CAACkI,WAAV,CAAsB9kK,IAAtB,EAA4BxwG,KAApC;AACAy0Q,IAAAA,UAAU,CAACh6Q,GAAX,CAAesB,GAAf,EAAoBiE,KAApB;AACD;;AAED,SAAOA,KAAP;AACD;;AAED,SAAS20Q,QAAT,CAAkBj1P,IAAlB,EAAwB;AACtB,SAAOA,IAAI,CAACi1P,QAAL,IAAiB,IAAjB,GAAwB,CAACj1P,IAAI,CAACi1P,QAAN,IAAkB,CAA1C,GAA8C,EAArD;AACD;;AACD,SAASY,UAAT,CAAoB71P,IAApB,EAA0B;AACxB,SAAOA,IAAI,CAAC61P,UAAL,IAAmB,IAAnB,GAA0B71P,IAAI,CAAC61P,UAA/B,GAA4CZ,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,CAApE;AACD;;AAED,SAAS81P,SAAT,CAAmB/2P,CAAnB,EAAsB;AACpB,SAAO,uBAAQA,CAAR,IAAaA,CAAC,CAACrnB,MAAF,GAAW,CAAX,GAAeqnB,CAAf,GAAmBA,CAAC,CAAC,CAAD,CAAjC,GAAuCA,CAA9C;AACD;;AAED,SAASg3P,SAAT,CAAmB/1P,IAAnB,EAAyB;AACvB,SAAO81P,SAAS,CAAC91P,IAAI,CAACg2P,SAAL,IAAkBh2P,IAAI,CAAC8wF,IAAvB,IAA+B,CAAC,uBAAQ9wF,IAAI,CAAC8wF,IAAb,CAAhC,GAAqD9wF,IAAI,CAAC8wF,IAAL,CAAU70G,KAAV,CAAgB+jB,IAAI,CAACg2P,SAArB,CAArD,GAAuFh2P,IAAI,CAAC8wF,IAA7F,CAAhB;AACD;;AACD,SAASmlK,eAAT,CAAyBj2P,IAAzB,EAA+B;AAC7B,QAAM0oP,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;AACA,SAAO,CAAC,uBAAQ0oP,EAAR,IAAcA,EAAE,CAAChxQ,MAAH,GAAY,CAA1B,GAA8B,CAA/B,IAAoCm+Q,UAAU,CAAC71P,IAAD,CAArD;AACD;;AACD,SAASu1P,SAAT,CAAmBv1P,IAAnB,EAAyB2M,IAAzB,EAA+B;AAC7B,QAAMmkF,IAAI,GAAGnkF,IAAI,IAAI,IAAR,GAAe,EAAf,GAAoB,CAACA,IAAI,GAAG,EAAR,EAAY0mF,IAAZ,EAAjC;AACA,SAAOrzF,IAAI,CAACouD,KAAL,GAAa,CAAb,IAAkB0iC,IAAI,CAACp5G,MAAvB,GAAgC86M,QAAQ,CAACxyL,IAAD,EAAO8wF,IAAP,CAAxC,GAAuDA,IAA9D;AACD;;AAED,SAASolK,WAAT,CAAqBl2P,IAArB,EAA2B;AACzB,MAAIg1P,WAAW,CAAC10Q,KAAZ,KAAsB40Q,YAA1B,EAAwC;AACtC;AACA,UAAMS,WAAW,GAAGD,IAAI,CAAC11P,IAAD,CAAxB;AACA,WAAO8wF,IAAI,IAAI2kK,aAAa,CAAC3kK,IAAD,EAAO6kK,WAAP,CAA5B;AACD,GAJD,MAIO;AACL;AACA,UAAMH,iBAAiB,GAAGP,QAAQ,CAACj1P,IAAD,CAAlC;AACA,WAAO8wF,IAAI,IAAIwkK,cAAc,CAACxkK,IAAD,EAAO0kK,iBAAP,CAA7B;AACD;AACF;;AAED,SAAShjE,QAAT,CAAkBxyL,IAAlB,EAAwB8wF,IAAxB,EAA8B;AAC5B,MAAI1iC,KAAK,GAAG,CAACpuD,IAAI,CAACouD,KAAlB;AAAA,MACI9tE,KAAK,GAAG41Q,WAAW,CAACl2P,IAAD,CADvB;AAEA,MAAI1f,KAAK,CAACwwG,IAAD,CAAL,GAAc1iC,KAAlB,EAAyB,OAAO0iC,IAAP;AACzB,MAAIigG,QAAQ,GAAG/wL,IAAI,CAAC+wL,QAAL,IAAiB,QAAhC;AAAA,MACIpM,GAAG,GAAG3kL,IAAI,CAACjmB,GAAL,KAAa,KADvB;AAAA,MAEI+0M,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAGj+F,IAAI,CAACp5G,MAHd;AAAA,MAIIgkN,GAJJ;AAKAttI,EAAAA,KAAK,IAAI9tE,KAAK,CAACywM,QAAD,CAAd;;AAEA,MAAIpM,GAAJ,EAAS;AACP,WAAOmK,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAG5M,EAAE,GAAGC,EAAL,KAAY,CAAlB;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAWi6M,GAAX,CAAD,CAAL,GAAyBttI,KAA7B,EAAoC0gI,EAAE,GAAG4M,GAAG,GAAG,CAAX,CAApC,KAAsD3M,EAAE,GAAG2M,GAAL;AACvD;;AAED,WAAO3K,QAAQ,GAAGjgG,IAAI,CAACrvG,KAAL,CAAWqtM,EAAX,CAAlB;AACD,GAPD,MAOO;AACL,WAAOA,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAG,KAAK5M,EAAE,GAAGC,EAAL,KAAY,CAAjB,CAAN;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAci6M,GAAd,CAAD,CAAL,GAA4BttI,KAAhC,EAAuC0gI,EAAE,GAAG4M,GAAL,CAAvC,KAAqD3M,EAAE,GAAG2M,GAAG,GAAG,CAAX;AACtD;;AAED,WAAO5qG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAcqtM,EAAd,IAAoBiC,QAA3B;AACD;AACF;;AAED,SAASolE,UAAT,CAAoBn2P,IAApB,EAA0Bo2P,KAA1B,EAAiC;AAC/B,MAAIV,IAAI,GAAG11P,IAAI,CAAC01P,IAAhB;AACA,SAAO,CAACU,KAAK,IAAIV,IAAT,GAAgBhyQ,MAAM,CAACgyQ,IAAD,CAAN,CAAa/5Q,OAAb,CAAqB,IAArB,EAA2B,IAA3B,CAAhB,GAAmD+5Q,IAApD,KAA6D,YAApE;AACD;;AACD,SAASA,IAAT,CAAc11P,IAAd,EAAoBo2P,KAApB,EAA2B;AACzB,SAAO,MAAMp2P,IAAI,CAACq2P,SAAL,GAAiBr2P,IAAI,CAACq2P,SAAL,GAAiB,GAAlC,GAAwC,EAA9C,KAAqDr2P,IAAI,CAACs2P,WAAL,GAAmBt2P,IAAI,CAACs2P,WAAL,GAAmB,GAAtC,GAA4C,EAAjG,KAAwGt2P,IAAI,CAACu2P,UAAL,GAAkBv2P,IAAI,CAACu2P,UAAL,GAAkB,GAApC,GAA0C,EAAlJ,IAAwJtB,QAAQ,CAACj1P,IAAD,CAAhK,GAAyK,KAAzK,GAAiLm2P,UAAU,CAACn2P,IAAD,EAAOo2P,KAAP,CAAlM;AACD;;AACD,SAASI,QAAT,CAAkBx2P,IAAlB,EAAwB;AACtB;AACA;AACA;AACA,MAAI4oJ,QAAQ,GAAG5oJ,IAAI,CAAC4oJ,QAApB;AAAA,MACIjkH,CAAC,GAAGswN,QAAQ,CAACj1P,IAAD,CADhB;AAEA,SAAO7hB,IAAI,CAACsG,KAAL,CAAWmkK,QAAQ,KAAK,KAAb,GAAqB,OAAOjkH,CAA5B,GAAgCikH,QAAQ,KAAK,QAAb,GAAwB,OAAOjkH,CAA/B,GAAmCikH,QAAQ,KAAK,QAAb,GAAwB,CAAC,IAAD,GAAQjkH,CAAhC,GAAoCikH,QAAQ,KAAK,UAAb,GAA0B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAArD,GAA8D4oJ,QAAQ,KAAK,aAAb,GAA6B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAAxD,GAAiE,CAAjP,CAAP;AACD;;AAED,MAAMy2P,SAAS,GAAG;AAChB,UAAQ,OADQ;AAEhB,YAAU,QAFM;AAGhB,WAAS;AAHO,CAAlB;AAKA,MAAMC,UAAU,GAAG,IAAI9L,MAAJ,EAAnB;;AAEA,SAAS+L,WAAT,CAAqB32P,IAArB,EAA2B;AACzB,MAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEI1W,CAAC,GAAG4Z,IAAI,CAACzL,MAAL,IAAe,CAFvB;AAAA,MAGIzY,CAHJ;;AAKA,MAAIsK,CAAJ,EAAO;AACLtK,IAAAA,CAAC,GAAG,CAACkkB,IAAI,CAACysI,KAAL,IAAc,CAAf,IAAoBu4G,MAAxB;AACAzmQ,IAAAA,CAAC,IAAI6H,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASrW,CAAT,CAAT;AACAghB,IAAAA,CAAC,IAAI1W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASpW,CAAT,CAAT;AACD;;AAED46Q,EAAAA,UAAU,CAAC7rK,EAAX,GAAgBtsG,CAAhB;AACAm4Q,EAAAA,UAAU,CAAC9rK,EAAX,GAAgB9tF,CAAhB;AACA,SAAO45P,UAAP;AACD;;AAED,SAASE,MAAT,CAAgBr9Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1B,MAAIkE,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CAApB;AAAA,MACIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CADlC;AAAA,MAEI0c,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKItrG,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CALtB;AAAA,MAMIzgP,CANJ;AAOAvC,EAAAA,IAAI,CAAC,aAAD,EAAgBk9Q,SAAS,CAACz2P,IAAI,CAAC2wL,KAAN,CAAT,IAAyB,OAAzC,CAAJ;;AAEA,MAAIrxM,CAAJ,EAAO;AACLxD,IAAAA,CAAC,GAAG+8M,SAAS,CAACt6M,CAAD,EAAIue,CAAJ,CAAT,GAAkB,GAAlB,GAAwB61O,MAAM,CAACrzP,CAAD,CAAlC;AACA,QAAI4kB,EAAE,IAAIhH,EAAV,EAAcphB,CAAC,IAAI,MAAM+8M,SAAS,CAAC30L,EAAD,EAAKhH,EAAL,CAApB;AACf,GAHD,MAGO;AACLphB,IAAAA,CAAC,GAAG+8M,SAAS,CAACt6M,CAAC,GAAG2lB,EAAL,EAASpH,CAAC,GAAGI,EAAb,CAAb;AACD;;AAED3jB,EAAAA,IAAI,CAAC,WAAD,EAAcuC,CAAd,CAAJ;AACD;;AAED,SAAS+6Q,OAAT,CAAiB3L,MAAjB,EAAyBlrP,IAAzB,EAA+Bk3G,IAA/B,EAAqC;AACnC,MAAIvyE,CAAC,GAAGqwN,WAAW,CAAC3mP,MAAZ,CAAmBrO,IAAnB,CAAR;AAAA,MACI1gB,CAAC,GAAG0gB,IAAI,CAAC2wL,KADb;AAAA,MAEIj0K,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKI1mF,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CALpB;AAAA,MAMIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CAAzB,GAAkC7hB,IAAI,CAACsG,KAAL,CAAW,MAAMkgD,CAAjB,CAN3C;AAAA,MAOI;AACJ+jN,EAAAA,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CARd;AAAA,MASI0kC,CATJ,CADmC,CAU5B;;AAEP,MAAI,uBAAQgkN,EAAR,CAAJ,EAAiB;AACf;AACA/jN,IAAAA,CAAC,IAAIkxN,UAAU,CAAC71P,IAAD,CAAV,IAAoB0oP,EAAE,CAAChxQ,MAAH,GAAY,CAAhC,CAAL;AACAgtD,IAAAA,CAAC,GAAGgkN,EAAE,CAAC/jQ,MAAH,CAAU,CAAC+/C,CAAD,EAAI5oD,CAAJ,KAAUqC,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYswN,WAAW,CAAC10Q,KAAZ,CAAkB0f,IAAlB,EAAwBlkB,CAAxB,CAAZ,CAApB,EAA6D,CAA7D,CAAJ;AACD,GAJD,MAIO;AACL;AACA4oD,IAAAA,CAAC,GAAGswN,WAAW,CAAC10Q,KAAZ,CAAkB0f,IAAlB,EAAwB0oP,EAAxB,CAAJ;AACD,GAnBkC,CAmBjC;;;AAGF,MAAIppQ,CAAC,KAAK,QAAV,EAAoB;AAClB4kB,IAAAA,EAAE,IAAIwgC,CAAC,GAAG,CAAV;AACD,GAFD,MAEO,IAAIplD,CAAC,KAAK,OAAV,EAAmB;AACxB4kB,IAAAA,EAAE,IAAIwgC,CAAN;AACD,GAFM,MAEA;;AAEPwmN,EAAAA,MAAM,CAACnwQ,GAAP,CAAWmpB,EAAE,IAAI3lB,CAAjB,EAAoB2e,EAAE,IAAIJ,CAA1B,EAA6BoH,EAAE,GAAGwgC,CAAlC,EAAqCxnC,EAAE,GAAGynC,CAA1C;;AAEA,MAAI3kC,IAAI,CAACu8N,KAAL,IAAc,CAACrlH,IAAnB,EAAyB;AACvBg0I,IAAAA,MAAM,CAACvY,MAAP,CAAc3yO,IAAI,CAACu8N,KAAL,GAAauoB,QAA3B,EAAqCvmQ,CAArC,EAAwCue,CAAxC;AACD,GAFD,MAEO,IAAIo6G,IAAI,KAAK,CAAb,EAAgB;AACrB,WAAOg0I,MAAM,CAACJ,aAAP,CAAqB9qP,IAAI,CAACu8N,KAAL,GAAauoB,QAAlC,EAA4CvmQ,CAA5C,EAA+Cue,CAA/C,CAAP;AACD;;AAED,SAAOouP,MAAP;AACD;;AAED,SAAS4L,MAAT,CAAgB1sG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAI4uO,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AAAA,QACIlyN,CADJ;AAAA,QAEIn+B,CAFJ;AAAA,QAGIue,CAHJ;AAAA,QAII1kB,CAJJ;AAAA,QAKI2+Q,EALJ;AAAA,QAMIrO,EANJ;AAAA,QAOIz1J,GAPJ;AAQA,QAAIi4J,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAX,IAA6C;AACjDtc,IAAAA,OAAO,KAAK,CADR,IACa5uO,IAAI,CAACi1P,QAAL,IAAiB,CAD9B,IACmCj1P,IAAI,CAAC8wF,IAAL,IAAa,IADhD,IACwD9wF,IAAI,CAAC8wF,IAAL,CAAUp5G,MAAV,KAAqB,CADjF,EACoF;AACpF0yK,IAAAA,OAAO,CAACsrG,IAAR,GAAeA,IAAI,CAAC11P,IAAD,CAAnB;AACAoqJ,IAAAA,OAAO,CAACqsG,SAAR,GAAoBz2P,IAAI,CAAC2wL,KAAL,IAAc,MAAlC;AACAj0K,IAAAA,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAf;AACAzhB,IAAAA,CAAC,GAAGm+B,CAAC,CAACmuE,EAAN,EAAU/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAAhB;;AAEA,QAAI5qF,IAAI,CAACu8N,KAAT,EAAgB;AACdnyE,MAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,MAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,MAAAA,OAAO,CAACuoF,MAAR,CAAe3yO,IAAI,CAACu8N,KAAL,GAAauoB,QAA5B;AACAvmQ,MAAAA,CAAC,GAAGue,CAAC,GAAG,CAAR,CAJc,CAIH;AACZ;;AAEDve,IAAAA,CAAC,IAAIyhB,IAAI,CAACkE,EAAL,IAAW,CAAhB;AACApH,IAAAA,CAAC,IAAI,CAACkD,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CAA9B;AACA0oP,IAAAA,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAAd;AACAkuP,IAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;;AAEA,QAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACfqO,MAAAA,EAAE,GAAGlB,UAAU,CAAC71P,IAAD,CAAf;;AAEA,WAAK5nB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGswQ,EAAE,CAAChxQ,MAAnB,EAA2B,EAAEU,CAA7B,EAAgC;AAC9B66G,QAAAA,GAAG,GAAGsiK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAE,CAACtwQ,CAAD,CAAT,CAAf;;AAEA,YAAI4nB,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,UAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AAED,YAAIkD,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,UAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;;AAEDA,QAAAA,CAAC,IAAIi6P,EAAL;AACD;AACF,KAhBD,MAgBO;AACL9jK,MAAAA,GAAG,GAAGsiK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAf;;AAEA,UAAI1oP,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,QAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AAED,UAAIkD,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,QAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;AACF;;AAED,QAAIkD,IAAI,CAACu8N,KAAT,EAAgBnyE,OAAO,CAACsoG,OAAR;AACjB,GAzDI,CAAL;AA0DD;;AAED,SAASwE,KAAT,CAAe9sG,OAAf,EAAwBpqJ,IAAxB,EAA8BzhB,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,MAAIvwP,IAAI,CAACi1P,QAAL,IAAiB,CAArB,EAAwB,OAAO,KAAP;AACxB,MAAI,CAACj1P,IAAI,CAACu8N,KAAV,EAAiB,OAAO,IAAP,CAFyB,CAEZ;AAC9B;;AAEA,MAAI7/M,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAnB;AAAA,MACIje,EAAE,GAAG26B,CAAC,CAACmuE,EADX;AAAA,MAEIuvI,EAAE,GAAG19M,CAAC,CAACkuE,EAFX;AAAA,MAGIzkG,CAAC,GAAG0wQ,OAAO,CAACH,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAHf;AAAA,MAII1gB,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAN,GAAcuoB,QAJtB;AAAA,MAKI3yP,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CALV;AAAA,MAMI4S,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CANV;AAAA,MAOI4hP,EAAE,GAAG/uO,GAAG,GAAGm+P,EAAN,GAAWp+P,GAAG,GAAGq+P,EAAjB,IAAuBxuQ,EAAE,GAAGoQ,GAAG,GAAGpQ,EAAX,GAAgBmQ,GAAG,GAAGkoO,EAA7C,CAPT;AAAA,MAQIgH,EAAE,GAAGlvO,GAAG,GAAGo+P,EAAN,GAAWn+P,GAAG,GAAGo+P,EAAjB,IAAuBn2B,EAAE,GAAGloO,GAAG,GAAGnQ,EAAX,GAAgBoQ,GAAG,GAAGioO,EAA7C,CART;AASA,SAAOj0O,CAAC,CAAC8kQ,QAAF,CAAW/pB,EAAX,EAAeE,EAAf,CAAP;AACD;;AAED,SAAS+1B,aAAT,CAAuBn3P,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAMx/K,CAAC,GAAGm6O,OAAO,CAACH,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAAjB;AACA,SAAOiuP,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAhB,IAAiDuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAjE,IAAkGuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAlH,IAAmJuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAA1K;AACD;;AAED,IAAIo0E,IAAI,GAAG;AACTz4F,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAE08O,MAJG;AAKT1F,EAAAA,KAAK,EAAE2F,OALE;AAMTv5B,EAAAA,IAAI,EAAEw5B,MANG;AAOTzG,EAAAA,IAAI,EAAEA,IAAI,CAAC6G,KAAD,CAPD;AAQTjG,EAAAA,KAAK,EAAEkG;AARE,CAAX;AAWA,IAAIC,OAAO,GAAG3F,iBAAiB,CAAC,OAAD,EAAUzI,KAAV,EAAiBwI,SAAjB,CAA/B;AAEA,IAAI6F,KAAK,GAAG;AACVl+D,EAAAA,GAAG,EAAEk4D,KADK;AAEVn2D,EAAAA,IAAI,EAAEy2D,MAFI;AAGV5tJ,EAAAA,KAAK,EAAEA,KAHG;AAIV3wG,EAAAA,KAAK,EAAEA,KAJG;AAKVuZ,EAAAA,IAAI,EAAEmnP,MALI;AAMVrtQ,EAAAA,IAAI,EAAE2tQ,MANI;AAOVn9B,EAAAA,IAAI,EAAEA,IAPI;AAQV29B,EAAAA,IAAI,EAAEA,IARI;AASVh1Q,EAAAA,KAAK,EAAEi1Q,OATG;AAUVlzD,EAAAA,MAAM,EAAEmzD,QAVE;AAWVhkK,EAAAA,IAAI,EAAEA,IAXI;AAYVk4J,EAAAA,KAAK,EAAEoO;AAZG,CAAZ;;;AAeA,SAASE,SAAT,CAAoBt3P,IAApB,EAA0BiK,IAA1B,EAAgCoiL,GAAhC,EAAqC;AACnC,MAAIh0L,IAAI,GAAGg/P,KAAK,CAACr3P,IAAI,CAACsqP,IAAL,CAAU0I,QAAX,CAAhB;AAAA,MACI9B,KAAK,GAAGjnP,IAAI,IAAI5R,IAAI,CAAC64P,KADzB;AAEA,MAAI74P,IAAI,CAAC+4P,MAAT,EAAiBpxP,IAAI,GAAGA,IAAI,CAACsqP,IAAZ;AACjB,SAAO4G,KAAK,CAAClxP,IAAI,CAACkrP,MAAL,KAAgBlrP,IAAI,CAACkrP,MAAL,GAAc,IAAIN,MAAJ,EAA9B,CAAD,EAA8C5qP,IAA9C,EAAoDqsL,GAApD,CAAZ;AACD;;AAED,IAAIkrE,KAAK,GAAG;AACVjN,EAAAA,IAAI,EAAE;AADI,CAAZ;;AAGA,SAASkN,SAAT,CAAoBlN,IAApB,EAA0BY,MAA1B,EAAkC7+D,GAAlC,EAAuC;AACrC,MAAIh0L,IAAI,GAAGg/P,KAAK,CAAC/M,IAAI,CAAC0I,QAAN,CAAhB;AAAA,MACI9B,KAAK,GAAG74P,IAAI,CAAC64P,KADjB;AAAA,MAEI59J,KAAK,GAAGg3J,IAAI,CAACh3J,KAFjB;AAAA,MAGImkK,QAAQ,GAAGnkK,KAAK,IAAIA,KAAK,CAAC57G,MAH9B;AAAA,MAIIU,CAJJ;AAAA,MAKIkO,CALJ;AAAA,MAMI0Z,IANJ;AAAA,MAOI7Z,CAPJ;;AASA,MAAIkS,IAAI,CAAC+4P,MAAT,EAAiB;AACf,QAAIqG,QAAJ,EAAc;AACZz3P,MAAAA,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAZ;AACD,KAFD,MAEO;AACL;AACAikK,MAAAA,KAAK,CAACjN,IAAN,GAAaA,IAAb;AACAtqP,MAAAA,IAAI,GAAGu3P,KAAP;AACD;;AAEDpxQ,IAAAA,CAAC,GAAGmxQ,SAAS,CAACt3P,IAAD,EAAOkxP,KAAP,EAAc7kE,GAAd,CAAb;AACA6+D,IAAAA,MAAM,GAAGA,MAAM,IAAIA,MAAM,CAAClqD,KAAP,CAAa76M,CAAb,CAAV,IAA6BA,CAAtC;AACA,WAAO+kQ,MAAP;AACD;;AAEDA,EAAAA,MAAM,GAAGA,MAAM,IAAIZ,IAAI,CAACY,MAAL,IAAeZ,IAAI,CAACY,MAAL,CAAYr7D,KAAZ,EAAzB,IAAgD,IAAI+6D,MAAJ,EAAzD;;AAEA,MAAI6M,QAAJ,EAAc;AACZ,SAAKr/Q,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC8yQ,MAAAA,MAAM,CAAClqD,KAAP,CAAas2D,SAAS,CAAChkK,KAAK,CAACl7G,CAAD,CAAN,EAAW84Q,KAAX,EAAkB7kE,GAAlB,CAAtB;AACD;AACF;;AAED,SAAOi+D,IAAI,CAACY,MAAL,GAAcA,MAArB;AACD;;AAED,MAAM3wP,IAAI,GAAG,CAAC,UAAD,EAAa,MAAb,EAAqB,MAArB,EAA6B,aAA7B,EAA4C,MAA5C,EAAoD,OAApD,EAA6D,QAA7D,EAAuE,GAAvE,EAA4E,GAA5E,EAAiF,OAAjF,EAA0F,QAA1F,EAAoG,OAApG,EAA6G,UAA7G,EAAyH;AACtI,MADa,EACL,aADK,EACU,SADV,EACqB,OADrB,EAC8B;AAC3C,QAFa,EAEH,eAFG,EAEc,aAFd,EAE6B,WAF7B,EAE0C;AACvD,YAHa,EAGC,kBAHD,EAGqB;AAClC,kBAJa,EAIO,cAJP,EAIuB;AACpC,YALa,EAKC,UALD,EAKa,aALb,EAK4B,aAL5B,EAK2C;AACxD,cANa,EAMG,UANH,EAMe;AAC5B,qBAPa,EAOU,sBAPV,EAOkC;AAC/C,wBARa,EAQa,yBARb,EAQwC,aARxC,EAQuD,SARvD,EAQkE,QARlE,EAQ4E,SAR5E,EAQuF;AACpG,KATa,EASN,QATM,EASI,QATJ,EASc;AAC3B,MAVa,EAUL,QAVK,EAUK,QAVL,EAUe;AAC5B,IAXa,EAWP,IAXO,EAWD;AACZ,MAZa,EAYL,OAZK,EAYI;AACjB,MAba,EAaL,OAbK,EAaI,OAbJ,EAaa,QAbb,EAauB,KAbvB,EAa8B,IAb9B,EAaoC,IAbpC,EAa0C;AACvD,UAda,EAcD,OAdC,EAcQ,WAdR,EAcqB,YAdrB,EAcmC,MAdnC,EAc2C,UAd3C,EAcuD,YAdvD,EAcqE,WAdrE,EAckF,aAdlF,EAciG;AAC9G,aAfa,EAeE,MAfF,EAeU,UAfV,EAesB,qBAftB,CAe4C;AAf5C,CAAb;;AAiBA,SAASm9P,WAAT,CAAqB7H,KAArB,EAA4B8H,MAA5B,EAAoC;AAClC,SAAOt9N,IAAI,CAACE,SAAL,CAAes1N,KAAf,EAAsBt1P,IAAtB,EAA4Bo9P,MAA5B,CAAP;AACD;;AACD,SAASC,aAAT,CAAuBj1J,IAAvB,EAA6B;AAC3B,QAAMktJ,KAAK,GAAG,OAAOltJ,IAAP,KAAgB,QAAhB,GAA2BtoE,IAAI,CAACC,KAAL,CAAWqoE,IAAX,CAA3B,GAA8CA,IAA5D;AACA,SAAOk1J,UAAU,CAAChI,KAAD,CAAjB;AACD;;AAED,SAASgI,UAAT,CAAoBhI,KAApB,EAA2B;AACzB,MAAIx3P,IAAI,GAAGw3P,KAAK,CAACmD,QAAjB;AAAA,MACI1/J,KAAK,GAAGu8J,KAAK,CAACv8J,KADlB;AAAA,MAEIw8F,MAFJ;AAAA,MAGI13M,CAHJ;AAAA,MAIIkO,CAJJ;;AAMA,MAAIgtG,KAAJ,EAAW;AACT,SAAKl7G,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC03M,MAAAA,MAAM,GAAGz3L,IAAI,GAAG,MAAH,GAAY,OAAzB;AACAi7F,MAAAA,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,IAAmB+/D,KAAnB;AACA,UAAIv8J,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAb,EAAqBr8J,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,EAAiBggE,MAAjB,GAA0B,IAA1B;AACrB,UAAI,aAAaz3P,IAAI,IAAIy3L,MAArB,CAAJ,EAAkC+nE,UAAU,CAACvkK,KAAK,CAACl7G,CAAD,CAAN,CAAV;AACnC;AACF;;AAED,MAAIigB,IAAJ,EAAUm/P,SAAS,CAAC3H,KAAD,CAAT;AACV,SAAOA,KAAP;AACD;;AAED,SAASiI,UAAT,CAAoBjI,KAApB,EAA2B;AACzB,MAAI13Q,SAAS,CAACT,MAAd,EAAsB;AACpB,SAAKqkM,IAAL,GAAY67E,aAAa,CAAC/H,KAAD,CAAzB;AACD,GAFD,MAEO;AACL,SAAK9zE,IAAL,GAAYg8E,UAAU,CAAC;AACrB/E,MAAAA,QAAQ,EAAE,OADW;AAErBr5Q,MAAAA,IAAI,EAAE,MAFe;AAGrBq+Q,MAAAA,IAAI,EAAE;AAHe,KAAD,CAAtB;AAKA,SAAKj8E,IAAL,CAAUzoF,KAAV,GAAkB,CAAC,IAAI63J,SAAJ,CAAc,KAAKpvE,IAAnB,CAAD,CAAlB;AACD;AACF;;AACD+7E,UAAU,CAACt/Q,SAAX,GAAuB;AACrB0uJ,EAAAA,MAAM,CAACywH,MAAD,EAAS;AACb,WAAOD,WAAW,CAAC,KAAK37E,IAAN,EAAY47E,MAAM,IAAI,CAAtB,CAAlB;AACD,GAHoB;;AAKrBrN,EAAAA,IAAI,CAAC2N,OAAD,EAAUl0J,KAAV,EAAiB7lH,KAAjB,EAAwB;AAC1B6lH,IAAAA,KAAK,GAAGA,KAAK,IAAI,KAAKg4E,IAAL,CAAUzoF,KAAV,CAAgB,CAAhB,CAAjB;AACA,UAAMg3J,IAAI,GAAGyN,UAAU,CAACE,OAAD,EAAUl0J,KAAV,CAAvB;AACAA,IAAAA,KAAK,CAACzQ,KAAN,CAAYp1G,KAAZ,IAAqBosQ,IAArB;AACA,QAAIA,IAAI,CAACqF,MAAT,EAAiBrF,IAAI,CAACvmJ,KAAL,CAAW+rJ,MAAX,GAAoB,IAApB;AACjB,WAAOxF,IAAP;AACD;;AAXoB,CAAvB;;AAeA,SAASyN,UAAT,CAAoB3pG,GAApB,EAAyBrqD,KAAzB,EAAgC;AAC9B,QAAMumJ,IAAI,GAAG;AACXY,IAAAA,MAAM,EAAE,IAAIN,MAAJ,EADG;AAEXtqO,IAAAA,IAAI,EAAE,CAAC,CAAC8tI,GAAG,CAAC9tI,IAFD;AAGXyjF,IAAAA,KAAK,EAAEA,KAHI;AAIX+uJ,IAAAA,WAAW,EAAE1kG,GAAG,CAAC0kG,WAAJ,KAAoB,KAApB,GAA4B,KAA5B,GAAoC,IAJtC;AAKXx/J,IAAAA,KAAK,EAAE,EALI;AAMX0/J,IAAAA,QAAQ,EAAE5kG,GAAG,CAAC4kG,QANH;AAOXr5Q,IAAAA,IAAI,EAAEy0K,GAAG,CAACz0K,IAAJ,IAAY2zH,SAPP;AAQX0qJ,IAAAA,IAAI,EAAE5pG,GAAG,CAAC4pG,IAAJ,IAAY1qJ,SARP;AASXqiJ,IAAAA,MAAM,EAAEvhG,GAAG,CAACuhG,MAAJ,IAAc;AATX,GAAb,CAD8B,CAW3B;;AAEH,MAAIvhG,GAAG,CAAC8pG,IAAJ,IAAY,IAAhB,EAAsB;AACpB5N,IAAAA,IAAI,CAAC4N,IAAL,GAAY9pG,GAAG,CAAC8pG,IAAhB;AACD;;AAED,MAAI9pG,GAAG,CAAC+pG,WAAR,EAAqB;AACnB7N,IAAAA,IAAI,CAAC6N,WAAL,GAAmB/pG,GAAG,CAAC+pG,WAAvB;AACD;;AAED,SAAO7N,IAAP;AACD,EAED;;;AACA,SAAS8N,SAAT,CAAmBC,GAAnB,EAAwBlH,GAAxB,EAA6BpsP,EAA7B,EAAiC;AAC/B,MAAI,CAACszP,GAAD,IAAQ,OAAO7yP,QAAP,KAAoB,WAA5B,IAA2CA,QAAQ,CAACyB,aAAxD,EAAuE;AACrEoxP,IAAAA,GAAG,GAAG7yP,QAAN;AACD;;AAED,SAAO6yP,GAAG,GAAGtzP,EAAE,GAAGszP,GAAG,CAAChlB,eAAJ,CAAoBtuO,EAApB,EAAwBosP,GAAxB,CAAH,GAAkCkH,GAAG,CAACpxP,aAAJ,CAAkBkqP,GAAlB,CAAvC,GAAgE,IAA1E;AACD,EAAC;;;AAEF,SAASmH,OAAT,CAAiBC,EAAjB,EAAqBpH,GAArB,EAA0B;AACxBA,EAAAA,GAAG,GAAGA,GAAG,CAAC50Q,WAAJ,EAAN;AACA,MAAI2vI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MACIpgR,CAAC,GAAG,CADR;AAAA,MAEIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAFd;;AAIA,SAAOU,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB,IAAI8zI,KAAK,CAAC9zI,CAAD,CAAL,CAASqgR,OAAT,CAAiBl8Q,WAAjB,OAAmC40Q,GAAvC,EAA4C;AAC7D,WAAOjlI,KAAK,CAAC9zI,CAAD,CAAZ;AACD;AACF,EAAC;AACF;;;AAEA,SAASsgR,QAAT,CAAkBH,EAAlB,EAAsBr6Q,KAAtB,EAA6BizQ,GAA7B,EAAkCpsP,EAAlC,EAAsC;AACpC,MAAIzlB,CAAC,GAAGi5Q,EAAE,CAACC,UAAH,CAAct6Q,KAAd,CAAR;AAAA,MACIiI,CADJ;;AAGA,MAAI,CAAC7G,CAAD,IAAMA,CAAC,CAACm5Q,OAAF,CAAUl8Q,WAAV,OAA4B40Q,GAAG,CAAC50Q,WAAJ,EAAtC,EAAyD;AACvD4J,IAAAA,CAAC,GAAG7G,CAAC,IAAI,IAAT;AACAA,IAAAA,CAAC,GAAG84Q,SAAS,CAACG,EAAE,CAACI,aAAJ,EAAmBxH,GAAnB,EAAwBpsP,EAAxB,CAAb;AACAwzP,IAAAA,EAAE,CAACK,YAAH,CAAgBt5Q,CAAhB,EAAmB6G,CAAnB;AACD;;AAED,SAAO7G,CAAP;AACD,EAAC;;;AAEF,SAASu5Q,QAAT,CAAkBN,EAAlB,EAAsBr6Q,KAAtB,EAA6B;AAC3B,MAAIguI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MACIprG,IAAI,GAAGlhC,KAAK,CAACx0I,MADjB;;AAGA,SAAO01K,IAAI,GAAGlvK,KAAd,EAAqBq6Q,EAAE,CAACO,WAAH,CAAe5sI,KAAK,CAAC,EAAEkhC,IAAH,CAApB;;AAErB,SAAOmrG,EAAP;AACD,EAAC;;;AAEF,SAASQ,QAAT,CAAkBzO,IAAlB,EAAwB;AACtB,SAAO,UAAUA,IAAI,CAAC0I,QAAf,IAA2B1I,IAAI,CAAC0N,IAAL,GAAY,WAAW1N,IAAI,CAAC0N,IAA5B,GAAmC,EAA9D,KAAqE1N,IAAI,CAAC3wQ,IAAL,GAAY,MAAM2wQ,IAAI,CAAC3wQ,IAAvB,GAA8B,EAAnG,CAAP;AACD;;AAED,SAASggN,KAAT,CAAgBn8F,KAAhB,EAAuB+6J,EAAvB,EAA2B;AACzB,QAAMthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAb;AACA,SAAO,CAACx7J,KAAK,CAACy7J,OAAN,GAAgBhiC,IAAI,CAAC1rM,IAArB,IAA6BgtO,EAAE,CAACW,UAAH,IAAiB,CAA9C,CAAD,EAAmD17J,KAAK,CAAC27J,OAAN,GAAgBliC,IAAI,CAAC5rM,GAArB,IAA4BktO,EAAE,CAACa,SAAH,IAAgB,CAA5C,CAAnD,CAAP;AACD;;AAED,SAASC,WAAT,CAAsBr5P,IAAtB,EAA4Bw9F,KAA5B,EAAmC+6J,EAAnC,EAAuCe,MAAvC,EAA+C;AAC7C,MAAIhP,IAAI,GAAGtqP,IAAI,IAAIA,IAAI,CAACsqP,IAAxB;AAAA,MACIiP,IADJ;AAAA,MAEI78O,CAFJ;;AAIA,MAAI4tO,IAAI,IAAI,CAACiP,IAAI,GAAGlC,KAAK,CAAC/M,IAAI,CAAC0I,QAAN,CAAb,EAA8BtB,GAA1C,EAA+C;AAC7Ch1O,IAAAA,CAAC,GAAGi9K,KAAK,CAACn8F,KAAD,EAAQ+6J,EAAR,CAAT;AACA77O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;AACA58O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;;AAEA,WAAOt5P,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAxB,EAA+B;AAC7BrnF,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AACAm+B,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAAClD,CAAL,IAAU,CAAlB;AACD;;AAEDkD,IAAAA,IAAI,GAAGu5P,IAAI,CAAC7H,GAAL,CAASpH,IAAI,CAACh3J,KAAd,EAAqB52E,CAArB,CAAP;AACD;;AAED,SAAO1c,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASw5P,OAAT,CAAiBnO,YAAjB,EAA+BoO,aAA/B,EAA8C;AAC5C,OAAKC,OAAL,GAAe,IAAf;AACA,OAAKC,SAAL,GAAiB,EAAjB;AACA,OAAK15C,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACA,OAAKuO,QAAL,GAAgBH,aAAa,IAAII,cAAjC;AACD,EAAC;AACF;;;AAEA,SAASA,cAAT,CAAwB/kK,OAAxB,EAAiC0I,KAAjC,EAAwCx9F,IAAxC,EAA8C5kB,KAA9C,EAAqD;AACnD05G,EAAAA,OAAO,CAACrmE,OAAR,GAAkB6kN,YAAlB,CAA+B,OAA/B,EAAwCl4P,KAAK,IAAI,EAAjD;AACD;;AAEDo+Q,OAAO,CAAChhR,SAAR,GAAoB;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,SAAKihQ,GAAL,GAAWvB,EAAX;AACA,SAAKwB,IAAL,GAAYlhQ,GAAG,IAAI,IAAnB;AACA,WAAO,KAAKygQ,MAAL,CAAYA,MAAZ,CAAP;AACD,GAdiB;;AAgBlB;AACF;AACA;AACA;AACE7qO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKqrO,GAAZ;AACD,GAtBiB;;AAwBlB;AACF;AACA;AACA;AACA;AACE/yP,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,GA/BiB;;AAiClB;AACF;AACA;AACEV,EAAAA,MAAM,CAACA,MAAD,EAAS;AACb,QAAInhR,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKuiR,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKW,OAAL,CAAax4Q,KAAb,EAAP;AACD;AACF,GA3CiB;;AA6ClB;AACF;AACA;AACEouQ,EAAAA,KAAK,CAACA,KAAD,EAAQ;AACX,QAAI,CAAC13Q,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKwiR,MAAZ;AACvB,SAAKA,MAAL,GAAcrK,KAAd;AACA,WAAO,IAAP;AACD,GApDiB;;AAsDlB;AACF;AACA;AACE52Q,EAAAA,EAAE;AACF;AACA,GAAE,CA3DgB;;AA6DlB;AACF;AACA;AACEG,EAAAA,GAAG;AACH;AACA,GAAE,CAlEgB;;AAoElB;AACF;AACA;AACA;AACA;AACA;AACA;AACE+gR,EAAAA,aAAa,CAACx1N,CAAD,EAAItsC,IAAJ,EAAUy8F,OAAV,EAAmB;AAC9B,SAAK,IAAI18G,CAAC,GAAGusD,CAAC,GAAGA,CAAC,CAACjtD,MAAL,GAAc,CAA5B,EAA+B,EAAEU,CAAF,IAAO,CAAtC,GAA0C;AACxC,UAAIusD,CAAC,CAACvsD,CAAD,CAAD,CAAKigB,IAAL,KAAcA,IAAd,KAAuB,CAACy8F,OAAD,IAAYnwD,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,KAAiBA,OAApD,CAAJ,EAAkE;AAChE,eAAO18G,CAAP;AACD;AACF;;AAED,WAAO,CAAC,CAAR;AACD,GAnFiB;;AAqFlB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEwuJ,EAAAA,QAAQ,CAACvuI,IAAD,EAAO;AACb,UAAMssC,CAAC,GAAG,KAAKg1N,SAAf;AAAA,UACMr6Q,CAAC,GAAG,EADV;;AAGA,QAAI+Y,IAAJ,EAAU;AACR/Y,MAAAA,CAAC,CAACjH,IAAF,CAAO,GAAGssD,CAAC,CAAC,KAAKy1N,SAAL,CAAe/hQ,IAAf,CAAD,CAAX;AACD,KAFD,MAEO;AACL,WAAK,MAAM3C,CAAX,IAAgBivC,CAAhB,EAAmB;AACjBrlD,QAAAA,CAAC,CAACjH,IAAF,CAAO,GAAGssD,CAAC,CAACjvC,CAAD,CAAX;AACD;AACF;;AAED,WAAOpW,CAAP;AACD,GA1GiB;;AA4GlB;AACF;AACA;AACA;AACA;AACA;AACE86Q,EAAAA,SAAS,CAACzgR,IAAD,EAAO;AACd,UAAMvB,CAAC,GAAGuB,IAAI,CAAC67B,OAAL,CAAa,GAAb,CAAV;AACA,WAAOp9B,CAAC,GAAG,CAAJ,GAAQuB,IAAR,GAAeA,IAAI,CAAC8H,KAAL,CAAW,CAAX,EAAcrJ,CAAd,CAAtB;AACD,GArHiB;;AAuHlB;AACF;AACA;AACA;AACA;AACA;AACEiiR,EAAAA,UAAU,CAAC78J,KAAD,EAAQx9F,IAAR,EAAc48F,IAAd,EAAoB;AAC5B,SAAKqjH,OAAL,CAAantB,QAAb,CAAsBl2F,IAAtB,EAA4B;AAC1BwtD,MAAAA,OAAO,EAAE;AADiB,KAA5B,EAEG/iK,IAFH,CAEQglM,GAAG,IAAI;AACb,YAAMv1M,CAAC,GAAG,IAAIgmH,UAAJ,CAAeU,KAAK,CAACnlG,IAArB,EAA2BmlG,KAA3B,CAAV;AAAA,YACMl+G,CAAC,GAAG84Q,SAAS,CAAC,IAAD,EAAO,GAAP,CADnB;;AAGA,WAAK,MAAMz+Q,IAAX,IAAmB0yM,GAAnB,EAAwB/sM,CAAC,CAACg0P,YAAF,CAAe35P,IAAf,EAAqB0yM,GAAG,CAAC1yM,IAAD,CAAxB;;AAExB2F,MAAAA,CAAC,CAACu9G,aAAF,CAAgB/lH,CAAhB;AACD,KATD,EASGykB,KATH,CASS,MAAM;AACb;AACD,KAXD;AAYD,GA1IiB;;AA4IlB;AACF;AACA;AACA;AACA;AACA;AACA;AACE++P,EAAAA,aAAa,CAAC98J,KAAD,EAAQx9F,IAAR,EAAcu6P,IAAd,EAAoB;AAC/B,QAAIv6P,IAAI,IAAIA,IAAI,CAACw6P,OAAL,IAAgB,IAA5B,EAAkC;AAChCx6P,MAAAA,IAAI,GAAGq5P,WAAW,CAACr5P,IAAD,EAAOw9F,KAAP,EAAc,KAAKz2F,MAAL,EAAd,EAA6B,KAAKkzP,OAAlC,CAAlB;AACA,YAAM7+Q,KAAK,GAAGm/Q,IAAI,IAAIv6P,IAAR,IAAgBA,IAAI,CAACw6P,OAArB,IAAgC,IAA9C;;AAEA,WAAKZ,QAAL,CAAc1iR,IAAd,CAAmB,KAAK6iR,IAAxB,EAA8B,IAA9B,EAAoCv8J,KAApC,EAA2Cx9F,IAA3C,EAAiD5kB,KAAjD;AACD;AACF,GA1JiB;;AA4JlB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,yBAAyB,CAACz6P,IAAD,EAAO;AAC9B,UAAMu4P,EAAE,GAAG,KAAKxxP,MAAL,EAAX;AACA,QAAI,CAACwxP,EAAL,EAAS;AACT,UAAMthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAb;AAAA,UACMM,MAAM,GAAG,KAAKW,OADpB;AAAA,UAEM/O,MAAM,GAAGlrP,IAAI,CAACkrP,MAFpB;AAAA,UAGM5qQ,KAAK,GAAG4qQ,MAAM,CAAC5qQ,KAAP,EAHd;AAAA,UAIM+tB,MAAM,GAAG68O,MAAM,CAAC78O,MAAP,EAJf;AAKA,QAAI9vB,CAAC,GAAG2sQ,MAAM,CAACrgK,EAAP,GAAYyuK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC1rM,IAArC;AAAA,QACIzuB,CAAC,GAAGouP,MAAM,CAACtgK,EAAP,GAAY0uK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC5rM,GADrC,CAR8B,CASY;;AAE1C,WAAOrrB,IAAI,CAACsqP,IAAL,KAActqP,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAA/B,CAAP,EAA8C;AAC5CxlH,MAAAA,CAAC,IAAIyhB,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAue,MAAAA,CAAC,IAAIkD,IAAI,CAAClD,CAAL,IAAU,CAAf;AACD,KAd6B,CAc5B;;;AAGF,WAAO;AACLve,MAAAA,CADK;AAELue,MAAAA,CAFK;AAGLxc,MAAAA,KAHK;AAIL+tB,MAAAA,MAJK;AAKLkd,MAAAA,IAAI,EAAEhtC,CALD;AAML8sC,MAAAA,GAAG,EAAEvuB,CANA;AAOL0uB,MAAAA,KAAK,EAAEjtC,CAAC,GAAG+B,KAPN;AAQLgrC,MAAAA,MAAM,EAAExuB,CAAC,GAAGuR;AARP,KAAP;AAUD;;AA/LiB,CAApB;AAmMA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASqsP,QAAT,CAAkBpjD,MAAlB,EAA0B;AACxB,OAAKwiD,GAAL,GAAW,IAAX;AACA,OAAKa,QAAL,GAAgB,IAAhB;AACA,OAAK16C,OAAL,GAAe,IAAImrC,cAAJ,CAAmB9zC,MAAnB,CAAf;AACD;;AACDojD,QAAQ,CAACliR,SAAT,GAAqB;AACnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC;AACjD,SAAKd,GAAL,GAAWvB,EAAX;AACA,WAAO,KAAKvsF,MAAL,CAAY1rL,KAAZ,EAAmB+tB,MAAnB,EAA2BirP,MAA3B,EAAmCsB,WAAnC,CAAP;AACD,GAfkB;;AAiBnB;AACF;AACA;AACA;AACEnsO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKqrO,GAAZ;AACD,GAvBkB;;AAyBnB;AACF;AACA;AACA;AACA;AACE/yP,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,GAhCkB;;AAkCnB;AACF;AACA;AACEhI,EAAAA,UAAU,CAAC6I,OAAD,EAAU;AAClB,QAAI1iR,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B,OAAO,KAAKijR,QAAZ;AAC5B,SAAKA,QAAL,GAAgBE,OAAhB;AACA,WAAO,IAAP;AACD,GAzCkB;;AA2CnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE7uF,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzC,SAAKE,MAAL,GAAcx6Q,KAAd;AACA,SAAKy6Q,OAAL,GAAe1sP,MAAf;AACA,SAAK4rP,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,SAAK0B,MAAL,GAAcJ,WAAW,IAAI,CAA7B;AACA,WAAO,IAAP;AACD,GA3DkB;;AA6DnB;AACF;AACA;AACA;AACA;AACA;AACEK,EAAAA,KAAK;AACL;AACA,GAAE,CArEiB;;AAuEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,MAAM,CAACrL,KAAD,EAAQ;AACZ,UAAMzpQ,CAAC,GAAG,IAAV,CADY,CACI;AAChB;;AAEAA,IAAAA,CAAC,CAAC+0Q,KAAF,GAAU,YAAY;AACpB/0Q,MAAAA,CAAC,CAACg1Q,OAAF,CAAUvL,KAAV;AACD,KAFD,CAJY,CAMT;;;AAGHzpQ,IAAAA,CAAC,CAAC+0Q,KAAF,GATY,CASD;AACX;;;AAGA/0Q,IAAAA,CAAC,CAAC+0Q,KAAF,GAAU,IAAV;AACA,WAAO/0Q,CAAP;AACD,GAhGkB;;AAkGnB;AACF;AACA;AACA;AACA;AACEg1Q,EAAAA,OAAO;AACP;AACA,GAAC;AACA,GA1GkB;;AA4GnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAW,CAACxL,KAAD,EAAQ;AACjB,UAAMzpQ,CAAC,GAAG,KAAK80Q,MAAL,CAAYrL,KAAZ,CAAV;AACA,WAAO,KAAKyL,MAAL,GAAc,KAAKA,MAAL,CAAYj0Q,IAAZ,CAAiB,MAAMjB,CAAvB,CAAd,GAA0CrF,OAAO,CAACC,OAAR,CAAgBoF,CAAhB,CAAjD;AACD,GAvHkB;;AAyHnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEm1Q,EAAAA,KAAK,CAAClyO,MAAD,EAAS6pK,GAAT,EAAc;AACjB,QAAI9sM,CAAC,GAAG,IAAR;AAAA,QACIs2B,CAAC,GAAGt2B,CAAC,CAAC65N,OAAF,CAAU52L,MAAV,EAAkB6pK,GAAlB,CADR;;AAGA,QAAI,CAAC9sM,CAAC,CAACk1Q,MAAP,EAAe;AACb;AACA,YAAMpkR,IAAI,GAAGkP,CAAC,CAAC+0Q,KAAf;AACA/0Q,MAAAA,CAAC,CAACk1Q,MAAF,GAAWl1Q,CAAC,CAAC65N,OAAF,CAAU5rM,KAAV,GAAkBhtB,IAAlB,CAAuBm0Q,MAAM,IAAI;AAC1C,YAAIA,MAAJ,EAAYtkR,IAAI;AAChBkP,QAAAA,CAAC,CAACk1Q,MAAF,GAAW,IAAX;AACD,OAHU,CAAX;AAID;;AAED,WAAO5+O,CAAP;AACD,GA/IkB;;AAiJnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE8uO,EAAAA,WAAW,CAACt4D,GAAD,EAAM;AACf,WAAO,KAAKqoE,KAAL,CAAW,aAAX,EAA0BroE,GAA1B,CAAP;AACD,GA1JkB;;AA4JnB;AACF;AACA;AACA;AACA;AACA;AACA;AACEu4D,EAAAA,SAAS,CAACv4D,GAAD,EAAM;AACb,WAAO,KAAKqoE,KAAL,CAAW,WAAX,EAAwBroE,GAAxB,CAAP;AACD;;AArKkB,CAArB;AAyKA,MAAMuoE,YAAY,GAAG,SAArB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,YAAY,GAAG,SAArB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,gBAAgB,GAAG,UAAzB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,eAAe,GAAG,YAAxB;AACA,MAAMC,eAAe,GAAG,YAAxB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,MAAM,GAAG,CAAClB,YAAD,EAAeC,aAAf,EAA8BC,UAA9B,EAA0CC,cAA1C,EAA0DC,cAA1D,EAA0EC,aAA1E,EAAyFC,cAAzF,EAAyGC,YAAzG,EAAuHC,cAAvH,EAAuIC,aAAvI,EAAsJC,cAAtJ,EAAsKC,UAAtK,EAAkLC,gBAAlL,EAAoMC,UAApM,EAAgNC,eAAhN,EAAiOC,eAAjO,EAAkPC,cAAlP,EAAkQC,aAAlQ,CAAf;AACA,MAAME,gBAAgB,GAAGX,cAAzB;AACA,MAAMY,gBAAgB,GAAGX,aAAzB;AACA,MAAMY,SAAS,GAAGV,UAAlB;;AAEA,SAASW,aAAT,CAAuBzlD,MAAvB,EAA+BkjD,OAA/B,EAAwC;AACtChB,EAAAA,OAAO,CAACtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;AACA,OAAKwC,KAAL,GAAa,IAAb;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAK/rF,OAAL,GAAe,EAAf;AACD;;AAED,MAAMgsF,WAAW,GAAG9kQ,IAAI,IAAIA,IAAI,KAAKmkQ,eAAT,IAA4BnkQ,IAAI,KAAKokQ,cAArC,IAAuDpkQ,IAAI,KAAKqkQ,aAAhE,GAAgF,CAACF,eAAD,EAAkBC,cAAlB,EAAkCC,aAAlC,CAAhF,GAAmI,CAACrkQ,IAAD,CAA/J,EAAuK;;;AAGvK,SAAS+kQ,kBAAT,CAA4BtoK,OAA5B,EAAqCz8F,IAArC,EAA2C;AACzC8kQ,EAAAA,WAAW,CAAC9kQ,IAAD,CAAX,CAAkBnc,OAAlB,CAA0B6iB,CAAC,IAAIoI,gBAAgB,CAAC2tF,OAAD,EAAU/1F,CAAV,CAA/C;AACD;;AAED,SAASoI,gBAAT,CAA0B2tF,OAA1B,EAAmCz8F,IAAnC,EAAyC;AACvC,QAAM0O,MAAM,GAAG+tF,OAAO,CAAC/tF,MAAR,EAAf;;AAEA,MAAIA,MAAM,IAAI,CAAC+tF,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,CAAf,EAAsC;AACpCy8F,IAAAA,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,IAAwB,CAAxB;AACA0O,IAAAA,MAAM,CAACI,gBAAP,CAAwB9O,IAAxB,EAA8By8F,OAAO,CAACz8F,IAAD,CAAP,GAAgBo3L,GAAG,IAAI36F,OAAO,CAACz8F,IAAD,CAAP,CAAco3L,GAAd,CAAvB,GAA4CA,GAAG,IAAI36F,OAAO,CAACuoK,IAAR,CAAahlQ,IAAb,EAAmBo3L,GAAnB,CAAjF;AACD;AACF;;AAED,SAASxzL,IAAT,CAAcqhQ,SAAd,EAAyBC,SAAzB,EAAoCC,QAApC,EAA8C;AAC5C,SAAO,UAAU/tE,GAAV,EAAe;AACpB,UAAMnwM,CAAC,GAAG,KAAKo6Q,OAAf;AAAA,UACMh9O,CAAC,GAAG,KAAK+gP,SAAL,CAAehuE,GAAf,CADV;;AAGA,QAAI/yK,CAAC,KAAKp9B,CAAV,EAAa;AACX;AACA,WAAK+9Q,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EAFW,CAEgB;AAC5B,KAHD,MAGO;AACL;AACA,UAAI,CAACnwM,CAAD,IAAM,CAACA,CAAC,CAACo+Q,IAAb,EAAmB;AACjB;AACA;AACA,aAAKL,IAAL,CAAUG,QAAV,EAAoB/tE,GAApB;AACD;;AAED,WAAKiqE,OAAL,GAAeh9O,CAAf,CARK,CAQa;;AAElB,WAAK2gP,IAAL,CAAUE,SAAV,EAAqB9tE,GAArB,EAVK,CAUsB;;AAE3B,WAAK4tE,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EAZK,CAYsB;AAC5B;AACF,GArBD;AAsBD;;AAED,SAASkuE,QAAT,CAAkBtlQ,IAAlB,EAAwB;AACtB,SAAO,UAAUo3L,GAAV,EAAe;AACpB,SAAK4tE,IAAL,CAAUhlQ,IAAV,EAAgBo3L,GAAhB;AACA,SAAKiqE,OAAL,GAAe,IAAf;AACD,GAHD;AAID;;AAED,wBAASqD,aAAT,EAAwBvD,OAAxB,EAAiC;AAC/B3B,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,SAAK+kQ,OAAL,GAAerF,EAAE,IAAID,OAAO,CAACC,EAAD,EAAK,QAAL,CAA5B,CAD0B,CACkB;;AAE5C,KAAC6D,UAAD,EAAaL,cAAb,EAA6BE,cAA7B,EAA6CC,aAA7C,EAA4DL,cAA5D,EAA4E3/Q,OAA5E,CAAoFmc,IAAI,IAAI+kQ,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CAA9G;AACA,WAAOmhQ,OAAO,CAAChhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,GAN8B;;AAQ/B;AACAkO,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK62P,OAAZ;AACD,GAX8B;;AAa/B;AACAxzG,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKwzG,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAP;AACD,GAhB8B;;AAkB/B;AACAyqK,EAAAA,MAAM,EAAE4qF,MAnBuB;;AAqB/B;AACAkB,EAAAA,cAAc,CAACpuE,GAAD,EAAM;AAClB,SAAK4tE,IAAL,CAAUd,eAAV,EAA2B9sE,GAA3B;AACD,GAxB8B;;AA0B/BquE,EAAAA,SAAS,EAAE7hQ,IAAI,CAACggQ,cAAD,EAAiBE,cAAjB,EAAiCD,aAAjC,CA1BgB;AA2B/B6B,EAAAA,QAAQ,EAAE9hQ,IAAI,CAAC6/P,aAAD,EAAgBF,cAAhB,EAAgCC,cAAhC,CA3BiB;AA4B/BmC,EAAAA,QAAQ,EAAEL,QAAQ,CAACzB,aAAD,CA5Ba;AA6B/B+B,EAAAA,SAAS,EAAEN,QAAQ,CAAC9B,cAAD,CA7BY;;AA+B/BqC,EAAAA,SAAS,CAACzuE,GAAD,EAAM;AACb,SAAKutE,KAAL,GAAa,KAAKtD,OAAlB;AACA,SAAK2D,IAAL,CAAUtB,cAAV,EAA0BtsE,GAA1B;AACD,GAlC8B;;AAoC/B0uE,EAAAA,KAAK,CAAC1uE,GAAD,EAAM;AACT,QAAI,KAAKutE,KAAL,KAAe,KAAKtD,OAAxB,EAAiC;AAC/B,WAAK2D,IAAL,CAAUjB,UAAV,EAAsB3sE,GAAtB;AACA,WAAKutE,KAAL,GAAa,IAAb;AACD;AACF,GAzC8B;;AA2C/BoB,EAAAA,UAAU,CAAC3uE,GAAD,EAAM;AACd,SAAKwtE,MAAL,GAAc,KAAKQ,SAAL,CAAehuE,GAAG,CAAC4uE,cAAJ,CAAmB,CAAnB,CAAf,CAAd;;AAEA,QAAI,KAAKnB,MAAT,EAAiB;AACf,WAAKxD,OAAL,GAAe,KAAKuD,MAApB;AACA,WAAKC,MAAL,GAAc,KAAd;AACD;;AAED,SAAKG,IAAL,CAAUb,eAAV,EAA2B/sE,GAA3B,EAAgC,IAAhC;AACD,GApD8B;;AAsD/B6uE,EAAAA,SAAS,CAAC7uE,GAAD,EAAM;AACb,SAAK4tE,IAAL,CAAUZ,cAAV,EAA0BhtE,GAA1B,EAA+B,IAA/B;AACD,GAxD8B;;AA0D/B8uE,EAAAA,QAAQ,CAAC9uE,GAAD,EAAM;AACZ,SAAK4tE,IAAL,CAAUX,aAAV,EAAyBjtE,GAAzB,EAA8B,IAA9B;AACA,SAAKwtE,MAAL,GAAc,IAAd;AACD,GA7D8B;;AA+D/B;AACAI,EAAAA,IAAI,CAAChlQ,IAAD,EAAOo3L,GAAP,EAAYkrB,KAAZ,EAAmB;AACrB,UAAMr7N,CAAC,GAAGq7N,KAAK,GAAG,KAAKsiD,MAAR,GAAiB,KAAKvD,OAArC;AAAA,UACM/0N,CAAC,GAAG,KAAKg1N,SAAL,CAAethQ,IAAf,CADV,CADqB,CAEW;;AAEhCo3L,IAAAA,GAAG,CAAC+uE,QAAJ,GAAenmQ,IAAf,CAJqB,CAIA;;AAErB,QAAIA,IAAI,KAAKykQ,SAAT,IAAsBx9Q,CAAtB,IAA2BA,CAAC,CAACs9G,IAAjC,EAAuC;AACrC,WAAKy9J,UAAL,CAAgB5qE,GAAhB,EAAqBnwM,CAArB,EAAwBA,CAAC,CAACs9G,IAA1B;AACD,KAFD,MAEO,IAAIvkG,IAAI,KAAKukQ,gBAAT,IAA6BvkQ,IAAI,KAAKwkQ,gBAA1C,EAA4D;AACjE,WAAKvC,aAAL,CAAmB7qE,GAAnB,EAAwBnwM,CAAxB,EAA2B+Y,IAAI,KAAKwkQ,gBAApC;AACD,KAVoB,CAUnB;;;AAGF,QAAIl4N,CAAJ,EAAO;AACL,WAAK,IAAIvsD,CAAC,GAAG,CAAR,EAAWN,GAAG,GAAG6sD,CAAC,CAACjtD,MAAxB,EAAgCU,CAAC,GAAGN,GAApC,EAAyC,EAAEM,CAA3C,EAA8C;AAC5CusD,QAAAA,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,CAAa59G,IAAb,CAAkB,KAAK6iR,IAAvB,EAA6BtqE,GAA7B,EAAkCnwM,CAAlC;AACD;AACF;AACF,GAlF8B;;AAoF/B;AACArG,EAAAA,EAAE,CAACof,IAAD,EAAOy8F,OAAP,EAAgB;AAChB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,UAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,QAAI18G,CAAC,GAAG,CAAR,EAAW;AACTglR,MAAAA,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CAAlB;AACA,OAACssC,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiC;AAC/BggB,QAAAA,IAAI,EAAEA,IADyB;AAE/By8F,QAAAA,OAAO,EAAEA;AAFsB,OAAjC;AAID;;AAED,WAAO,IAAP;AACD,GAnG8B;;AAqG/B;AACA17G,EAAAA,GAAG,CAACif,IAAD,EAAOy8F,OAAP,EAAgB;AACjB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,UAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,QAAI18G,CAAC,IAAI,CAAT,EAAY;AACVusD,MAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,WAAO,IAAP;AACD,GAhH8B;;AAkH/BqlR,EAAAA,SAAS,CAAChuE,GAAD,EAAM;AACb,UAAM/yK,CAAC,GAAGi9K,KAAK,CAAClK,GAAD,EAAM,KAAKmuE,OAAX,CAAf;AAAA,UACM75P,CAAC,GAAG,KAAKk2P,OADf;AAEA,WAAO,KAAK5J,IAAL,CAAU,KAAK6J,MAAf,EAAuBx9O,CAAC,CAAC,CAAD,CAAxB,EAA6BA,CAAC,CAAC,CAAD,CAA9B,EAAmCA,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAA3C,EAAgD2Y,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAAxD,CAAP;AACD,GAtH8B;;AAwH/B;AACA;AACA;AACAssP,EAAAA,IAAI,CAACR,KAAD,EAAQtxQ,CAAR,EAAWue,CAAX,EAAcwzP,EAAd,EAAkBC,EAAlB,EAAsB;AACxB,UAAM1pO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,UACMkgG,IAAI,GAAG+M,KAAK,CAACxH,KAAK,CAACmD,QAAP,CADlB;AAEA,WAAO1I,IAAI,CAAC+F,IAAL,CAAUn5Q,IAAV,CAAe,IAAf,EAAqB2vC,CAArB,EAAwBgpO,KAAxB,EAA+BtxQ,CAA/B,EAAkCue,CAAlC,EAAqCwzP,EAArC,EAAyCC,EAAzC,CAAP;AACD;;AA/H8B,CAAjC;;AAmIA,SAAS74M,gBAAT,GAA4B;AAC1B,SAAO,OAAO1yC,MAAP,KAAkB,WAAlB,GAAgCA,MAAM,CAAC0yC,gBAAP,IAA2B,CAA3D,GAA+D,CAAtE;AACD;;AAED,IAAI84M,UAAU,GAAG94M,gBAAgB,EAAjC;;AACA,SAASs0H,MAAT,CAAiBjlK,MAAjB,EAAyBzmB,KAAzB,EAAgC+tB,MAAhC,EAAwCirP,MAAxC,EAAgDsB,WAAhD,EAA6DvuE,GAA7D,EAAkE;AAChE,QAAMoyE,KAAK,GAAG,OAAOC,WAAP,KAAuB,WAAvB,IAAsC33P,MAAM,YAAY23P,WAAxD,IAAuE33P,MAAM,CAAC43P,UAAP,IAAqB,IAA1G;AAAA,QACMv0G,OAAO,GAAGrjJ,MAAM,CAACO,UAAP,CAAkB,IAAlB,CADhB;AAAA,QAEMs3P,KAAK,GAAGH,KAAK,GAAGjO,UAAH,GAAgBoK,WAFnC;AAGA7zP,EAAAA,MAAM,CAACzmB,KAAP,GAAeA,KAAK,GAAGs+Q,KAAvB;AACA73P,EAAAA,MAAM,CAACsH,MAAP,GAAgBA,MAAM,GAAGuwP,KAAzB;;AAEA,OAAK,MAAMviR,GAAX,IAAkBgwM,GAAlB,EAAuB;AACrBjiC,IAAAA,OAAO,CAAC/tK,GAAD,CAAP,GAAegwM,GAAG,CAAChwM,GAAD,CAAlB;AACD;;AAED,MAAIoiR,KAAK,IAAIG,KAAK,KAAK,CAAvB,EAA0B;AACxB73P,IAAAA,MAAM,CAAC83P,KAAP,CAAav+Q,KAAb,GAAqBA,KAAK,GAAG,IAA7B;AACAymB,IAAAA,MAAM,CAAC83P,KAAP,CAAaxwP,MAAb,GAAsBA,MAAM,GAAG,IAA/B;AACD;;AAED+7I,EAAAA,OAAO,CAAComG,UAAR,GAAqBoO,KAArB;AACAx0G,EAAAA,OAAO,CAAC00G,YAAR,CAAqBF,KAArB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkCA,KAAlC,EAAyCA,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAAvD,EAA4DsF,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAA1E;AACA,SAAOvyP,MAAP;AACD;;AAED,SAASg4P,cAAT,CAAwBznD,MAAxB,EAAgC;AAC9BojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAK0nD,QAAL,GAAgB,EAAhB;AACA,OAAKC,OAAL,GAAe,KAAf;AACA,OAAKC,MAAL,GAAc,IAAItU,MAAJ,EAAd;AACA,OAAKuU,MAAL,GAAc,IAAIvU,MAAJ,EAAd;AACD;;AACD,MAAMxnO,IAAI,GAAGs3O,QAAQ,CAACliR,SAAtB;;AAEA,MAAM4mR,UAAU,GAAG,CAAC9F,MAAD,EAASh5Q,KAAT,EAAgB+tB,MAAhB,KAA2B,IAAIu8O,MAAJ,GAAa7vQ,GAAb,CAAiB,CAAjB,EAAoB,CAApB,EAAuBuF,KAAvB,EAA8B+tB,MAA9B,EAAsCwqL,SAAtC,CAAgD,CAACygE,MAAM,CAAC,CAAD,CAAvD,EAA4D,CAACA,MAAM,CAAC,CAAD,CAAnE,CAA9C;;AAEA,SAAS+F,YAAT,CAAsBx4O,CAAtB,EAAyB1gC,CAAzB,EAA4BmzQ,MAA5B,EAAoC;AAClC;AACAnzQ,EAAAA,CAAC,CAAC25K,MAAF,CAAS,CAAT,EAAYr7K,KAAZ,GAFkC,CAEb;;AAErB,MAAIoiC,CAAC,CAAC2pO,UAAF,GAAe,CAAnB,EAAsB;AACpBrqQ,IAAAA,CAAC,CAAC8H,KAAF,CAAQ44B,CAAC,CAAC2pO,UAAV,EAAsB/rQ,KAAtB,GAA8BwJ,KAA9B,CAAoC,IAAI44B,CAAC,CAAC2pO,UAA1C;AACD,GANiC,CAMhC;;;AAGFrqQ,EAAAA,CAAC,CAAC0yM,SAAF,CAAY,EAAEygE,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAAZ,EAA8B,EAAEA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAA9B,EATkC,CASe;;AAEjDzyO,EAAAA,CAAC,CAAC4gO,SAAF;AACA5gO,EAAAA,CAAC,CAACowM,IAAF,CAAO9wO,CAAC,CAAC0kG,EAAT,EAAa1kG,CAAC,CAACykG,EAAf,EAAmBzkG,CAAC,CAAC7F,KAAF,EAAnB,EAA8B6F,CAAC,CAACkoB,MAAF,EAA9B;AACAwY,EAAAA,CAAC,CAACvG,IAAF;AACA,SAAOn6B,CAAP;AACD;;AAED,wBAAS44Q,cAAT,EAAyBrE,QAAzB,EAAmC;AACjC7C,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC7rM,OAAzC,EAAkD;AAC1D,SAAKiwM,QAAL,GAAgBjwM,OAAO,IAAI,EAA3B;AACA,SAAK6uM,OAAL,GAAe,KAAKoB,QAAL,CAAcM,eAAd,GAAgC,IAAhC,GAAuC,wBAAO,CAAP,EAAU,CAAV,EAAa,KAAKN,QAAL,CAAc3mQ,IAA3B,CAAtD,CAF0D,CAE8B;;AAExF,QAAIkgQ,EAAE,IAAI,KAAKqF,OAAf,EAAwB;AACtB/E,MAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR,CAAgBgH,WAAhB,CAA4B,KAAK3B,OAAjC;;AAEA,WAAKA,OAAL,CAAatqB,YAAb,CAA0B,OAA1B,EAAmC,OAAnC;AACD,KARyD,CAQxD;;;AAGF,WAAOlwN,IAAI,CAACy0O,UAAL,CAAgB3gR,IAAhB,CAAqB,IAArB,EAA2BqhR,EAA3B,EAA+Bj4Q,KAA/B,EAAsC+tB,MAAtC,EAA8CirP,MAA9C,EAAsDsB,WAAtD,CAAP;AACD,GAbgC;;AAejC5uF,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzCx3O,IAAAA,IAAI,CAAC4oJ,MAAL,CAAY90L,IAAZ,CAAiB,IAAjB,EAAuBoJ,KAAvB,EAA8B+tB,MAA9B,EAAsCirP,MAAtC,EAA8CsB,WAA9C;;AAEA,QAAI,KAAKgD,OAAT,EAAkB;AAChB;AACA5xF,MAAAA,MAAM,CAAC,KAAK4xF,OAAN,EAAe,KAAK9C,MAApB,EAA4B,KAAKC,OAAjC,EAA0C,KAAKd,OAA/C,EAAwD,KAAKe,MAA7D,EAAqE,KAAKgE,QAAL,CAAc50G,OAAnF,CAAN;AACD,KAHD,MAGO;AACL;AACA,YAAMpkD,GAAG,GAAG,KAAKg5J,QAAL,CAAcM,eAA1B;AACA,UAAI,CAACt5J,GAAL,EAAU,qBAAM,qDAAN;AACVA,MAAAA,GAAG,CAAC/3G,KAAJ,CAAU,KAAK+sQ,MAAf,EAAuB,KAAKA,MAA5B;AACAh1J,MAAAA,GAAG,CAAC6yF,SAAJ,CAAc,KAAKohE,OAAL,CAAa,CAAb,CAAd,EAA+B,KAAKA,OAAL,CAAa,CAAb,CAA/B;AACD;;AAED,SAAKgF,OAAL,GAAe,IAAf;AACA,WAAO,IAAP;AACD,GA/BgC;;AAiCjCl4P,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK62P,OAAZ;AACD,GAnCgC;;AAqCjCxzG,EAAAA,OAAO,GAAG;AACR,WAAO,KAAK40G,QAAL,CAAcM,eAAd,KAAkC,KAAK1B,OAAL,GAAe,KAAKA,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAf,GAA+C,IAAjF,CAAP;AACD,GAvCgC;;AAyCjC2zP,EAAAA,KAAK,CAACj7P,IAAD,EAAO;AACV,UAAM7Z,CAAC,GAAG,KAAKg5Q,MAAL,CAAYtvE,KAAZ,GAAoBmR,KAApB,CAA0BhhM,IAAI,CAACkrP,MAA/B,CAAV;;AAEA,QAAIrkO,CAAC,GAAG7mB,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAlB;;AAEA,WAAOl9E,CAAP,EAAU;AACR1gC,MAAAA,CAAC,CAAC0yM,SAAF,CAAYhyK,CAAC,CAACtoC,CAAF,IAAO,CAAnB,EAAsBsoC,CAAC,CAAC/pB,CAAF,IAAO,CAA7B;AACA+pB,MAAAA,CAAC,GAAGA,CAAC,CAACyjO,IAAF,CAAOvmJ,KAAX;AACD;;AAED,SAAKm7J,MAAL,CAAYl+D,KAAZ,CAAkB76M,CAAlB;AACD,GApDgC;;AAsDjCi1Q,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb,UAAMhpO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,UACMrmJ,CAAC,GAAG,KAAKk2P,OADf;AAAA,UAEMv1N,CAAC,GAAG,KAAKo2N,MAFf;AAAA,UAGMn2N,CAAC,GAAG,KAAKo2N,OAHf;AAAA,UAIM5jK,EAAE,GAAG,KAAK+nK,MAJhB;AAAA,UAKMM,EAAE,GAAGJ,UAAU,CAACr7P,CAAD,EAAI2gC,CAAJ,EAAOC,CAAP,CALrB,CADa,CAMmB;;AAEhC9d,IAAAA,CAAC,CAACriB,IAAF;AACA,UAAMre,CAAC,GAAG,KAAK84Q,OAAL,IAAgB9nK,EAAE,CAACo1F,KAAH,EAAhB,IAA8B,KAAK0yE,OAAL,GAAe,KAAf,EAAsBO,EAAE,CAAC1/F,MAAH,CAAU,CAAV,CAApD,IAAoEu/F,YAAY,CAACx4O,CAAD,EAAI24O,EAAE,CAAC3nC,SAAH,CAAa1gI,EAAb,CAAJ,EAAsBpzF,CAAtB,CAA1F;AACA,SAAK8rL,KAAL,CAAW,CAAC9rL,CAAC,CAAC,CAAD,CAAb,EAAkB,CAACA,CAAC,CAAC,CAAD,CAApB,EAAyB2gC,CAAzB,EAA4BC,CAA5B,EAVa,CAUmB;;AAEhC,SAAK24L,IAAL,CAAUz2M,CAAV,EAAagpO,KAAb,EAAoB1pQ,CAApB,EAZa,CAYW;;AAExB0gC,IAAAA,CAAC,CAAC6rO,OAAF;AACAv7J,IAAAA,EAAE,CAAC04F,KAAH;AACA,WAAO,IAAP;AACD,GAvEgC;;AAyEjCytC,EAAAA,IAAI,CAACt3H,GAAD,EAAM6pJ,KAAN,EAAa3E,MAAb,EAAqB;AACvB,UAAMZ,IAAI,GAAG+M,KAAK,CAACxH,KAAK,CAACmD,QAAP,CAAlB;AACA,QAAInD,KAAK,CAACvvO,IAAV,EAAgBsxO,MAAM,CAAC5rJ,GAAD,EAAM6pJ,KAAN,CAAN;AAChBvF,IAAAA,IAAI,CAAChtB,IAAL,CAAUpmP,IAAV,CAAe,IAAf,EAAqB8uH,GAArB,EAA0B6pJ,KAA1B,EAAiC3E,MAAjC;AACA,QAAI2E,KAAK,CAACvvO,IAAV,EAAgB0lF,GAAG,CAAC0sJ,OAAJ;AACjB,GA9EgC;;AAgFjC7iE,EAAAA,KAAK,CAACtxM,CAAD,EAAIue,CAAJ,EAAO4nC,CAAP,EAAUC,CAAV,EAAa;AAChB,UAAM0nJ,GAAG,GAAG,KAAK2yE,QAAjB;AAAA,UACMn4O,CAAC,GAAG,KAAKujI,OAAL,EADV;;AAGA,QAAIiiC,GAAG,CAACh0L,IAAJ,KAAa,KAAb,IAAsB,CAACg0L,GAAG,CAACizE,eAA/B,EAAgD;AAC9C;AACA;AACAz4O,MAAAA,CAAC,CAAC44O,SAAF,CAAYlhR,CAAZ,EAAeue,CAAf,EAAkB4nC,CAAlB,EAAqBC,CAArB;AACD;;AAED,QAAI,KAAKg2N,QAAL,IAAiB,IAArB,EAA2B;AACzB9zO,MAAAA,CAAC,CAAC6nO,SAAF,GAAc,KAAKiM,QAAnB;AACA9zO,MAAAA,CAAC,CAAC8nO,QAAF,CAAWpwQ,CAAX,EAAcue,CAAd,EAAiB4nC,CAAjB,EAAoBC,CAApB;AACD;AACF;;AA9FgC,CAAnC;;AAkGA,SAAS+6N,UAAT,CAAoBpoD,MAApB,EAA4BkjD,OAA5B,EAAqC;AACnChB,EAAAA,OAAO,CAACtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;AACA,QAAM71N,CAAC,GAAG,IAAV;AACAA,EAAAA,CAAC,CAACg7N,YAAF,GAAiBnuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC1C,QAAIA,IAAI,IAAIA,IAAI,CAAC48F,IAAjB,EAAuBj4D,CAAC,CAAC01N,UAAF,CAAa5qE,GAAb,EAAkBzvL,IAAlB,EAAwBA,IAAI,CAAC48F,IAA7B;AACxB,GAFwB,CAAzB;AAGAj4D,EAAAA,CAAC,CAACi7N,eAAF,GAAoBpuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC7C2kC,IAAAA,CAAC,CAAC21N,aAAF,CAAgB7qE,GAAhB,EAAqBzvL,IAArB,EAA2ByvL,GAAG,CAACp3L,IAAJ,KAAawkQ,gBAAxC;AACD,GAF2B,CAA5B;AAGD,EAAC;;;AAEF,MAAMrrF,QAAQ,GAAG,CAACpnB,OAAD,EAAUt1D,OAAV,KAAsB26F,GAAG,IAAI;AAC5C,MAAIzvL,IAAI,GAAGyvL,GAAG,CAAC9gK,MAAJ,CAAWkxO,QAAtB;AACA7/P,EAAAA,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcugB,IAAd,IAAsBA,IAAI,CAAC,CAAD,CAA1B,GAAgCA,IAAvC;AACAyvL,EAAAA,GAAG,CAAC+uE,QAAJ,GAAe/uE,GAAG,CAACp3L,IAAnB;AACAy8F,EAAAA,OAAO,CAAC59G,IAAR,CAAakzK,OAAO,CAAC2vG,IAArB,EAA2BtqE,GAA3B,EAAgCzvL,IAAhC;AACD,CALD;;AAOA,wBAAS0/P,UAAT,EAAqBlG,OAArB,EAA8B;AAC5B3B,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,QAAIinQ,GAAG,GAAG,KAAKC,IAAf;;AAEA,QAAID,GAAJ,EAAS;AACPA,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBo9E,SAAxB,EAAmC,KAAK6C,YAAxC;AACAG,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBk9E,gBAAxB,EAA0C,KAAKgD,eAA/C;AACAE,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBm9E,gBAAxB,EAA0C,KAAK+C,eAA/C;AACD;;AAED,SAAKG,IAAL,GAAYD,GAAG,GAAGvH,EAAE,IAAID,OAAO,CAACC,EAAD,EAAK,KAAL,CAA/B;;AAEA,QAAIuH,GAAJ,EAAS;AACPA,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqB21P,SAArB,EAAgC,KAAK6C,YAArC;AACAG,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqBy1P,gBAArB,EAAuC,KAAKgD,eAA5C;AACAE,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqB01P,gBAArB,EAAuC,KAAK+C,eAA5C;AACD;;AAED,WAAOpG,OAAO,CAAChhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,GAnB2B;;AAqB5BkO,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKg5P,IAAZ;AACD,GAvB2B;;AAyB5B;AACA9mR,EAAAA,EAAE,CAACof,IAAD,EAAOy8F,OAAP,EAAgB;AAChB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,UAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,QAAI18G,CAAC,GAAG,CAAR,EAAW;AACT,YAAMmG,CAAC,GAAG;AACR8Z,QAAAA,IADQ;AAERy8F,QAAAA,OAFQ;AAGR08E,QAAAA,QAAQ,EAAEA,QAAQ,CAAC,IAAD,EAAO18E,OAAP;AAHV,OAAV;AAKA,OAACnwD,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiCkG,CAAjC;;AAEA,UAAI,KAAKwhR,IAAT,EAAe;AACb,aAAKA,IAAL,CAAU54P,gBAAV,CAA2BxtB,IAA3B,EAAiC4E,CAAC,CAACizL,QAAnC;AACD;AACF;;AAED,WAAO,IAAP;AACD,GA7C2B;;AA+C5B;AACAp4L,EAAAA,GAAG,CAACif,IAAD,EAAOy8F,OAAP,EAAgB;AACjB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,UAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,QAAI18G,CAAC,IAAI,CAAT,EAAY;AACV,UAAI,KAAK2nR,IAAT,EAAe;AACb,aAAKA,IAAL,CAAUrgF,mBAAV,CAA8B/lM,IAA9B,EAAoCgrD,CAAC,CAACvsD,CAAD,CAAD,CAAKo5L,QAAzC;AACD;;AAED7sI,MAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,WAAO,IAAP;AACD;;AA9D2B,CAA9B;AAkEA,MAAM4nR,WAAW,GAAG,aAApB;AACA,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,SAAS,GAAG,MAAlB;AACA,MAAMC,oBAAoB,GAAG,sBAA7B;AACA,MAAMC,eAAe,GAAG,iBAAxB;AACA,MAAMC,eAAe,GAAG,iBAAxB;;AAEA,MAAMphC,MAAM,GAAG,CAAC+4B,IAAD,EAAOsI,QAAP,EAAiBrxJ,KAAjB,MAA4B;AACzC,GAACixJ,SAAD,GAAalI,IAD4B;AAEzC,GAACmI,oBAAD,GAAwBG,QAFiB;AAGzC,GAACL,UAAD,GAAchxJ,KAAK,IAAI3B;AAHkB,CAA5B,CAAf,EAII;AACJ;;;AAGA,MAAMizJ,UAAU,GAAG,qBAAM,CAAC,aAAD,EAAgB,WAAhB,EAA6B,YAA7B,EAA2C,WAA3C,EAAwD,YAAxD,EAAsE,aAAtE,EAAqF,cAArF,EAAqG,iBAArG,EAAwH,cAAxH,EAAwI,cAAxI,EAAwJ,eAAxJ,EAAyK,OAAzK,CAAN,CAAnB,EAA6M;;AAE7M,MAAMC,UAAU,GAAG;AACjB,UAAQ;AACNhoF,IAAAA,IAAI,EAAE,MADA;AAENioF,IAAAA,OAAO,EAAEC;AAFH,GADS;AAKjB,YAAU;AACRloF,IAAAA,IAAI,EAAE,QADE;AAERioF,IAAAA,OAAO,EAAEE;AAFD,GALO;AASjB,gBAAc;AACZnoF,IAAAA,IAAI,EAAE,OADM;AAEZioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAI,eAAeroB,MAAf,CAAsBipR,YAAY,CAAC5gQ,IAAD,CAAlC,EAA0C,GAA1C;AAFL,GATG;AAajB,oBAAkB;AAChBw4K,IAAAA,IAAI,EAAE,UADU;AAEhBioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAI,kBAAkBroB,MAAlB,CAAyBipR,YAAY,CAAC5gQ,IAAD,CAArC,EAA6C,GAA7C;AAFD;AAbD,CAAnB,EAiBG;;AAEH,MAAM6gQ,UAAU,GAAG;AACjBC,EAAAA,QAAQ,EAAEZ,SADO;AAEjBa,EAAAA,mBAAmB,EAAEZ,oBAFJ;AAGjBhI,EAAAA,WAAW,EAAE8H;AAHI,CAAnB;;AAKA,SAASe,kBAAT,CAA4BznR,IAA5B,EAAkCymB,IAAlC,EAAwC;AACtC,QAAMihQ,IAAI,GAAGjhQ,IAAI,CAACk4P,IAAL,KAAc,KAA3B;AACA3+Q,EAAAA,IAAI,CAACymR,WAAD,EAAciB,IAAI,IAAI3zJ,SAAtB,CAAJ;;AAEA,MAAI2zJ,IAAI,IAAIjhQ,IAAI,CAACm4P,WAAL,IAAoB,IAAhC,EAAsC;AACpC,SAAK,MAAMhpM,IAAX,IAAmB0xM,UAAnB,EAA+B;AAC7BtnR,MAAAA,IAAI,CAACsnR,UAAU,CAAC1xM,IAAD,CAAX,EAAmBm+C,SAAnB,CAAJ;AACD;AACF,GAJD,MAIO;AACL,UAAMj1G,IAAI,GAAG2H,IAAI,CAACsqP,IAAL,CAAU0I,QAAvB;AACAz5Q,IAAAA,IAAI,CAAC0mR,UAAD,EAAajgQ,IAAI,CAACm4P,WAAlB,CAAJ;AACA5+Q,IAAAA,IAAI,CAAC2mR,SAAD,EAAYlgQ,IAAI,CAAC8gQ,QAAL,KAAkBzoQ,IAAI,KAAK,OAAT,GAAmB+nQ,eAAnB,GAAqCC,eAAvD,CAAZ,CAAJ;AACA9mR,IAAAA,IAAI,CAAC4mR,oBAAD,EAAuBngQ,IAAI,CAAC+gQ,mBAAL,IAA4B,GAAGppR,MAAH,CAAU0gB,IAAV,EAAgB,OAAhB,CAAnD,CAAJ;AACD;AACF;;AACD,SAAS6oQ,kBAAT,CAA4B5W,IAA5B,EAAkC;AAChC,SAAOA,IAAI,CAAC4N,IAAL,KAAc,KAAd,GAAsB;AAC3B,KAAC8H,WAAD,GAAe;AADY,GAAtB,GAEHO,UAAU,CAACjW,IAAI,CAAC0N,IAAN,CAAV,GAAwB,IAAxB,GAA+BwI,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAV,GAAwBmJ,SAAS,CAAC7W,IAAD,EAAOkW,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAjB,CAAjC,GAAiEoJ,QAAQ,CAAC9W,IAAD,CAF5G;AAGD;;AAED,SAAS8W,QAAT,CAAkB9W,IAAlB,EAAwB;AACtB,QAAMjyP,IAAI,GAAGiyP,IAAI,CAAC0I,QAAlB;AACA,QAAM90F,OAAO,GAAG7lK,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,MAA7B,IAAuCiyP,IAAI,CAACh3J,KAAL,CAAWl6F,IAAX,CAAgB2F,CAAC,IAAIA,CAAC,CAACo5P,WAAF,IAAiB,IAAjB,IAAyBp5P,CAAC,CAACm5P,IAAF,KAAW,KAAzD,CAAvD;AACA,SAAOj5B,MAAM,CAAC/gE,OAAO,GAAGkiG,eAAH,GAAqBC,eAA7B,EAA8C,GAAG1oR,MAAH,CAAU0gB,IAAV,EAAgB,iBAAhB,CAA9C,EAAkFiyP,IAAI,CAAC6N,WAAvF,CAAb;AACD;;AAED,SAASgJ,SAAT,CAAmB7W,IAAnB,EAAyBj+D,GAAzB,EAA8B;AAC5B,MAAI;AACF,UAAMrsL,IAAI,GAAGsqP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAb;AAAA,UACMmtK,OAAO,GAAGp0E,GAAG,CAACo0E,OAAJ,KAAgB,MAAM,EAAtB,CADhB;;AAGA,WAAOxhC,MAAM,CAAC5yC,GAAG,CAAC2rE,IAAJ,IAAYqI,eAAb,EAA8Bh0E,GAAG,CAAC7T,IAAlC,EAAwCx4K,IAAI,CAACm4P,WAAL,IAAoBsI,OAAO,CAACzgQ,IAAD,CAAnE,CAAb;AACD,GALD,CAKE,OAAOxE,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASolQ,YAAT,CAAsB5gQ,IAAtB,EAA4B;AAC1B,SAAO,qBAAMA,IAAI,CAAC8wF,IAAX,EAAiB90G,IAAjB,CAAsB,GAAtB,CAAP;AACD;;AAED,SAAS0kR,WAAT,CAAqB1gQ,IAArB,EAA2B;AACzB,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMkzC,MAAM,GAAGrqP,IAAI,CAACqqP,MADpB;AAAA,QAEM3xQ,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IAFjD;AAAA,QAGMgmG,GAAG,GAAGhmG,IAAI,CAACoqJ,OAHjB;AAAA,QAIMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWpjC,KAAK,CAAClpN,KAAjB,EAAwB7S,KAJtC;AAAA,QAKM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EALf;AAAA,QAMM9pM,IAAI,GAAGpK,KAAK,CAACoK,IANnB;AAAA,QAOM4sN,EAAE,GAAGolC,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,OAAhC,GAA0C,GAA1C,GAAgD,GAP3D;AAQA,SAAO,GAAG1yQ,MAAH,CAAUstO,EAAV,EAAc,OAAd,KAA0BvsO,KAAK,GAAG,YAAYf,MAAZ,CAAmBe,KAAnB,EAA0B,GAA1B,CAAH,GAAoC,EAAnE,IAAyE,UAAUf,MAAV,CAAiB,2BAAW0gB,IAAX,IAAmB,UAAnB,GAAgCA,IAAjD,EAAuD,QAAvD,CAAzE,GAA4I,SAAS1gB,MAAT,CAAgB,8BAAcwqN,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAhB,CAAnJ;AACD;;AAED,SAAS2gQ,aAAT,CAAuB3gQ,IAAvB,EAA6B;AAC3B,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMz+N,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IADjD;AAAA,QAEM3H,IAAI,GAAG,GAAG1gB,MAAH,CAAUw/N,KAAK,CAAC9+M,IAAN,IAAc,EAAxB,EAA4B,SAA5B,EAAuCg7F,IAAvC,EAFb;AAAA,QAGMknJ,MAAM,GAAGpjC,KAAK,CAACojC,MAHrB;AAAA,QAIM+mB,KAAK,GAAGnmR,MAAM,CAACof,IAAP,CAAYggP,MAAZ,CAJd;AAAA,QAKMv0I,GAAG,GAAGhmG,IAAI,CAACoqJ,OALjB;AAAA,QAMMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWA,MAAM,CAAC+mB,KAAK,CAAC,CAAD,CAAN,CAAjB,EAA6BlmR,KAN3C;AAAA,QAOM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EAPf;AAQA,SAAOo/D,UAAU,CAAClpQ,IAAD,CAAV,IAAoB3f,KAAK,GAAG,YAAYf,MAAZ,CAAmBe,KAAnB,EAA0B,GAA1B,CAAH,GAAoC,EAA7D,IAAmE,QAAQf,MAAR,CAAe6pR,cAAc,CAACF,KAAD,CAA7B,CAAnE,GAA2G,SAAS3pR,MAAT,CAAgB,8BAAcwqN,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAhB,CAAlH;AACD;;AAED,SAASqhQ,YAAT,CAAsBrhQ,IAAtB,EAA4B;AAC1B,MAAI;AACF,WAAO,qBAAM,oBAAKA,IAAI,CAACszF,KAAV,EAAiBA,KAAjB,CAAuB,CAAvB,EAA0BxC,IAAhC,EAAsC90G,IAAtC,CAA2C,GAA3C,CAAP;AACD,GAFD,CAEE,OAAOwf,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASgmQ,cAAT,CAAwBF,KAAxB,EAA+B;AAC7BA,EAAAA,KAAK,GAAGA,KAAK,CAACz/Q,GAAN,CAAU66B,CAAC,IAAIA,CAAC,IAAIA,CAAC,KAAK,MAAN,IAAgBA,CAAC,KAAK,QAAtB,GAAiC,QAAjC,GAA4C,EAAhD,CAAhB,CAAR;AACA,SAAO4kP,KAAK,CAAC5pR,MAAN,GAAe,CAAf,GAAmB4pR,KAAK,CAAC,CAAD,CAAxB,GAA8BA,KAAK,CAAC7/Q,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,EAAmBzF,IAAnB,CAAwB,IAAxB,IAAgC,OAAhC,GAA0C,oBAAKslR,KAAL,CAA/E;AACD;;AAED,SAASC,UAAT,CAAoB3lR,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAAhC,GAA6C7F,CAApD;AACD;;AAED,MAAM6lR,SAAS,GAAG/iR,GAAG,IAAI,CAACA,GAAG,GAAG,EAAP,EAAW/C,OAAX,CAAmB,IAAnB,EAAyB,OAAzB,EAAkCA,OAAlC,CAA0C,IAA1C,EAAgD,MAAhD,EAAwDA,OAAxD,CAAgE,IAAhE,EAAsE,MAAtE,CAAzB;;AAEA,MAAM+lR,QAAQ,GAAGhjR,GAAG,IAAI+iR,SAAS,CAAC/iR,GAAD,CAAT,CAAe/C,OAAf,CAAuB,IAAvB,EAA6B,QAA7B,EAAuCA,OAAvC,CAA+C,KAA/C,EAAsD,OAAtD,EAA+DA,OAA/D,CAAuE,KAAvE,EAA8E,OAA9E,EAAuFA,OAAvF,CAA+F,KAA/F,EAAsG,OAAtG,CAAxB;;AAEA,SAASgmR,MAAT,GAAkB;AAChB,MAAIlnK,GAAG,GAAG,EAAV;AAAA,MACImnK,KAAK,GAAG,EADZ;AAAA,MAEIC,KAAK,GAAG,EAFZ;;AAIA,QAAMj0Q,KAAK,GAAG,EAAd;AAAA,QACMiiM,KAAK,GAAG,MAAM+xE,KAAK,GAAGC,KAAK,GAAG,EADpC;AAAA,QAEMxpR,IAAI,GAAG84Q,GAAG,IAAI;AAClB,QAAIyQ,KAAJ,EAAW;AACTnnK,MAAAA,GAAG,IAAI,GAAG9iH,MAAH,CAAUiqR,KAAV,EAAiB,GAAjB,EAAsBjqR,MAAtB,CAA6BkqR,KAA7B,CAAP;AACAhyE,MAAAA,KAAK;AACN;;AAEDjiM,IAAAA,KAAK,CAACvV,IAAN,CAAW84Q,GAAX;AACD,GATD;AAAA,QAUMj3O,IAAI,GAAG,CAACvgC,IAAD,EAAOyB,KAAP,KAAiB;AAC5B,QAAIA,KAAK,IAAI,IAAb,EAAmBwmR,KAAK,IAAI,IAAIjqR,MAAJ,CAAWgC,IAAX,EAAiB,KAAjB,EAAwBhC,MAAxB,CAA+B+pR,QAAQ,CAACtmR,KAAD,CAAvC,EAAgD,IAAhD,CAAT;AACnB,WAAOy0F,CAAP;AACD,GAbD;AAAA,QAcMA,CAAC,GAAG;AACR4nB,IAAAA,IAAI,CAAC05J,GAAD,EAAM,GAAG/zP,KAAT,EAAgB;AAClB/kB,MAAAA,IAAI,CAAC84Q,GAAD,CAAJ;AACAyQ,MAAAA,KAAK,GAAG,MAAMzQ,GAAd;;AAEA,WAAK,MAAMp2Q,GAAX,IAAkBqiB,KAAlB,EAAyB;AACvB,aAAK,MAAM/gB,GAAX,IAAkBtB,GAAlB,EAAuBm/B,IAAI,CAAC79B,GAAD,EAAMtB,GAAG,CAACsB,GAAD,CAAT,CAAJ;AACxB;;AAED,aAAOwzF,CAAP;AACD,KAVO;;AAYRmoB,IAAAA,KAAK,GAAG;AACN,YAAMm5J,GAAG,GAAGvjQ,KAAK,CAAC4U,GAAN,EAAZ;;AAEA,UAAIo/P,KAAJ,EAAW;AACTnnK,QAAAA,GAAG,IAAImnK,KAAK,IAAIC,KAAK,GAAG,IAAIlqR,MAAJ,CAAWkqR,KAAX,EAAkB,IAAlB,EAAwBlqR,MAAxB,CAA+Bw5Q,GAA/B,EAAoC,GAApC,CAAH,GAA8C,IAAvD,CAAZ;AACD,OAFD,MAEO;AACL12J,QAAAA,GAAG,IAAI,KAAK9iH,MAAL,CAAYw5Q,GAAZ,EAAiB,GAAjB,CAAP;AACD;;AAEDthE,MAAAA,KAAK;AACL,aAAOhgH,CAAP;AACD,KAvBO;;AAyBR31D,IAAAA,IAzBQ;AA0BR42E,IAAAA,IAAI,EAAEh1G,CAAC,KAAK+lR,KAAK,IAAIJ,SAAS,CAAC3lR,CAAD,CAAlB,EAAuB+zF,CAA5B,CA1BC;AA2BR9nF,IAAAA,QAAQ,EAAE,MAAM0yG;AA3BR,GAdV;;AA4CA,SAAO5qB,CAAP;AACD;;AACD,MAAMiyL,YAAY,GAAG3+P,IAAI,IAAI4+P,UAAU,CAACJ,MAAM,EAAP,EAAWx+P,IAAX,CAAV,GAA6B,EAA1D;;;;AAEA,SAAS4+P,UAAT,CAAoBlyL,CAApB,EAAuB1sE,IAAvB,EAA6B;AAC3B0sE,EAAAA,CAAC,CAAC4nB,IAAF,CAAOt0F,IAAI,CAACs1P,OAAZ;;AAEA,MAAIt1P,IAAI,CAAC6+P,aAAL,EAAJ,EAA0B;AACxB,UAAM5kQ,KAAK,GAAG+F,IAAI,CAAC8+P,UAAnB;AAAA,UACM37Q,CAAC,GAAG8W,KAAK,CAAC1lB,MADhB;;AAGA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1By3F,MAAAA,CAAC,CAAC31D,IAAF,CAAO9c,KAAK,CAAChlB,CAAD,CAAL,CAASuB,IAAhB,EAAsByjB,KAAK,CAAChlB,CAAD,CAAL,CAASgD,KAA/B;AACD;AACF;;AAED,MAAI+nB,IAAI,CAAC++P,aAAL,EAAJ,EAA0B;AACxB,UAAMh1G,QAAQ,GAAG/pJ,IAAI,CAACq1P,UAAtB;AAAA,UACMlyQ,CAAC,GAAG4mK,QAAQ,CAACx1K,MADnB;;AAGA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AAC1B,YAAM2hL,KAAK,GAAG7M,QAAQ,CAAC90K,CAAD,CAAtB;AACA2hL,MAAAA,KAAK,CAACooG,QAAN,KAAmB,CAAnB,CAAqB;AAArB,QACEtyL,CAAC,CAACihB,IAAF,CAAOipE,KAAK,CAACqoG,SAAb,CADF,GAC4BL,UAAU,CAAClyL,CAAD,EAAIkqF,KAAJ,CADtC;AAED;AACF;;AAED,SAAOlqF,CAAC,CAACmoB,KAAF,EAAP;AACD;;AAED,MAAMqqK,MAAM,GAAG;AACbz5Q,EAAAA,IAAI,EAAE,MADO;AAEbimQ,EAAAA,WAAW,EAAE,cAFA;AAGb9C,EAAAA,MAAM,EAAE,QAHK;AAIbC,EAAAA,aAAa,EAAE,gBAJF;AAKbE,EAAAA,WAAW,EAAE,cALA;AAMbiD,EAAAA,SAAS,EAAE,gBANE;AAOb/C,EAAAA,UAAU,EAAE,iBAPC;AAQboD,EAAAA,UAAU,EAAE,kBARC;AASbE,EAAAA,gBAAgB,EAAE,mBATL;AAUbJ,EAAAA,gBAAgB,EAAE,mBAVL;AAWb1gB,EAAAA,OAAO,EAAE,SAXI;AAYbsf,EAAAA,KAAK,EAAE;AAZM,CAAf,EAaG;;AAEH,MAAMoU,cAAc,GAAG;AACrB,UAAQ,MADa;AAErB,uBAAqB;AAFA,CAAvB;AAKA,MAAMC,SAAS,GAAG,CAAlB;AAAA,MACMx9P,EAAE,GAAGm2F,QAAQ,CAACsnK,KADpB;;AAEA,SAASC,WAAT,CAAqBnrD,MAArB,EAA6B;AAC3BojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAKorD,QAAL,GAAgB,CAAhB;AACA,OAAKxD,MAAL,GAAc,EAAd;AACA,OAAKa,IAAL,GAAY,IAAZ;AACA,OAAK4C,KAAL,GAAa,IAAb;AACA,OAAKjY,KAAL,GAAa,IAAb;AACD;;AACD,MAAMkY,MAAM,GAAGlI,QAAQ,CAACliR,SAAxB;AACA,wBAASiqR,WAAT,EAAsB/H,QAAtB,EAAgC;AAC9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE7C,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC;AACjD;AACA,SAAKlQ,KAAL,GAAa,EAAb;;AAEA,SAAKmY,UAAL;;AAEA,QAAItK,EAAJ,EAAQ;AACN,WAAKwH,IAAL,GAAYrH,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,KAAR,EAAexzP,EAAf,CAApB;AACA+9P,MAAAA,aAAa,CAAC,KAAK/C,IAAN,EAAY7kK,QAAZ,CAAb;;AAEA,WAAK6kK,IAAL,CAAUzsB,YAAV,CAAuB,OAAvB,EAAgC,OAAhC;;AAEAulB,MAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR,CANM,CAMW;;AAEjB,WAAKoK,KAAL,GAAajK,QAAQ,CAAC,KAAKqH,IAAN,EAAYwC,SAAZ,EAAuB,GAAvB,EAA4Bx9P,EAA5B,CAArB;AACA+9P,MAAAA,aAAa,CAAC,KAAKH,KAAN,EAAaL,cAAb,CAAb,CATM,CASqC;;AAE3CzJ,MAAAA,QAAQ,CAAC,KAAKkH,IAAN,EAAYwC,SAAS,GAAG,CAAxB,CAAR;AACD,KAlBgD,CAkB/C;;;AAGF,SAAKvQ,UAAL,CAAgB,KAAK2I,QAArB;AACA,WAAOiI,MAAM,CAAC/K,UAAP,CAAkB3gR,IAAlB,CAAuB,IAAvB,EAA6BqhR,EAA7B,EAAiCj4Q,KAAjC,EAAwC+tB,MAAxC,EAAgDirP,MAAhD,EAAwDsB,WAAxD,CAAP;AACD,GAnC6B;;AAqC9B;AACF;AACA;AACE5I,EAAAA,UAAU,CAAC6I,OAAD,EAAU;AAClB,QAAI1iR,SAAS,CAACT,MAAV,IAAoB,KAAKqoR,IAA7B,EAAmC;AACjC,WAAKA,IAAL,CAAUlB,KAAV,CAAgBkE,WAAhB,CAA4B,kBAA5B,EAAgDlI,OAAhD;AACD;;AAED,WAAO+H,MAAM,CAAC5Q,UAAP,CAAkBv5Q,KAAlB,CAAwB,IAAxB,EAA8BN,SAA9B,CAAP;AACD,GA9C6B;;AAgD9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE6zL,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzCgI,IAAAA,MAAM,CAAC52F,MAAP,CAAc90L,IAAd,CAAmB,IAAnB,EAAyBoJ,KAAzB,EAAgC+tB,MAAhC,EAAwCirP,MAAxC,EAAgDsB,WAAhD;;AAEA,QAAI,KAAKmF,IAAT,EAAe;AACb+C,MAAAA,aAAa,CAAC,KAAK/C,IAAN,EAAY;AACvBz/Q,QAAAA,KAAK,EAAE,KAAKw6Q,MAAL,GAAc,KAAKE,MADH;AAEvB3sP,QAAAA,MAAM,EAAE,KAAK0sP,OAAL,GAAe,KAAKC,MAFL;AAGvBgI,QAAAA,OAAO,EAAE,OAAOrrR,MAAP,CAAc,KAAKmjR,MAAnB,EAA2B,GAA3B,EAAgCnjR,MAAhC,CAAuC,KAAKojR,OAA5C;AAHc,OAAZ,CAAb;;AAMA,WAAK4H,KAAL,CAAWrvB,YAAX,CAAwB,WAAxB,EAAqC,aAAa37P,MAAb,CAAoB,KAAKsiR,OAAzB,EAAkC,GAAlC,CAArC;AACD;;AAED,SAAKiF,MAAL,GAAc,EAAd;AACA,WAAO,IAAP;AACD,GAzE6B;;AA2E9B;AACF;AACA;AACA;AACEn4P,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKg5P,IAAZ;AACD,GAjF6B;;AAmF9B;AACF;AACA;AACA;AACED,EAAAA,GAAG,GAAG;AACJ,UAAMA,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACMkD,EAAE,GAAG,KAAKtI,QADhB;AAEA,QAAI,CAACmF,GAAL,EAAU,OAAO,IAAP;AACV,QAAI38P,IAAJ;;AAEA,QAAI8/P,EAAJ,EAAQ;AACNnD,MAAAA,GAAG,CAACoD,eAAJ,CAAoB,OAApB;AACA//P,MAAAA,IAAI,GAAGu1P,QAAQ,CAACoH,GAAD,EAAMyC,SAAN,EAAiB,MAAjB,EAAyBx9P,EAAzB,CAAf;AACA+9P,MAAAA,aAAa,CAAC3/P,IAAD,EAAO;AAClB7iB,QAAAA,KAAK,EAAE,KAAKw6Q,MADM;AAElBzsP,QAAAA,MAAM,EAAE,KAAK0sP,OAFK;AAGlBnyQ,QAAAA,IAAI,EAAEq6Q;AAHY,OAAP,CAAb;AAKD;;AAED,UAAMnyK,IAAI,GAAGgxK,YAAY,CAAChC,GAAD,CAAzB;;AAEA,QAAImD,EAAJ,EAAQ;AACNnD,MAAAA,GAAG,CAAChH,WAAJ,CAAgB31P,IAAhB;;AAEA,WAAK48P,IAAL,CAAUlB,KAAV,CAAgBkE,WAAhB,CAA4B,kBAA5B,EAAgDE,EAAhD;AACD;;AAED,WAAOnyK,IAAP;AACD,GAhH6B;;AAkH9B;AACF;AACA;AACA;AACEsqK,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb;AACA,QAAI,KAAKsT,WAAL,EAAJ,EAAwB;AACtB,UAAI,KAAKC,SAAT,EAAoB,KAAKP,UAAL;AACpB,WAAKvY,IAAL,CAAU,KAAKqY,KAAf,EAAsB9S,KAAtB;AACAgJ,MAAAA,QAAQ,CAAC,KAAK8J,KAAN,EAAa,CAAb,CAAR;AACD;;AAED,SAAK1f,IAAL;AACA,SAAKic,MAAL,GAAc,EAAd;AACA,MAAE,KAAKwD,QAAP;AACA,WAAO,IAAP;AACD,GAlI6B;;AAoI9B;;AAEA;AACF;AACA;AACA;AACEzH,EAAAA,KAAK,CAACj7P,IAAD,EAAO;AACV,QAAIA,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAAxB,EAAkC;AAChC1iQ,MAAAA,IAAI,CAACi7P,KAAL,GAAa,KAAKyH,QAAlB;;AAEA,WAAKxD,MAAL,CAAY7mR,IAAZ,CAAiB2nB,IAAjB;AACD;AACF,GAhJ6B;;AAkJ9B;AACF;AACA;AACA;AACEqjQ,EAAAA,OAAO,CAACrjQ,IAAD,EAAO;AACZ,WAAO,KAAKojQ,SAAL,IAAkB,CAACpjQ,IAAI,CAAC+/P,IAAxB,IAAgC//P,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAA3D;AACD,GAxJ6B;;AA0J9B;AACF;AACA;AACA;AACES,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAjB;AACA,UAAM9vK,KAAK,GAAG,KAAK4rK,MAAnB;AACA,QAAI,CAAC5rK,KAAK,CAAC57G,MAAP,IAAiB,CAAC,KAAKgrR,QAA3B,EAAqC,OAAO,IAAP;AACrC,UAAMr3Q,EAAE,GAAG,EAAE,KAAKq3Q,QAAlB;AACA,QAAI1iQ,IAAJ,EAAUsqP,IAAV,EAAgBjyP,IAAhB,EAAsBkhQ,IAAtB,EAA4BnhR,CAA5B,EAA+BkO,CAA/B,EAAkCyd,CAAlC;;AAEA,SAAK3rB,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC4nB,MAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACAkyQ,MAAAA,IAAI,GAAGtqP,IAAI,CAACsqP,IAAZ;;AAEA,UAAIA,IAAI,CAAC0I,QAAL,KAAkB36P,IAAtB,EAA4B;AAC1B;AACAA,QAAAA,IAAI,GAAGiyP,IAAI,CAAC0I,QAAZ;AACAuG,QAAAA,IAAI,GAAGlC,KAAK,CAACh/P,IAAD,CAAZ;AACD;;AAED,UAAIiyP,IAAI,CAACwF,MAAL,IAAexF,IAAI,CAAC2Q,KAAL,KAAe5vQ,EAAlC,EAAsC;AACpC,aAAK+3Q,SAAL,GAAiB,KAAjB;AACAE,QAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACAi/P,QAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB9D,CAAC,IAAI;AACtBA,UAAAA,CAAC,CAAC6iR,KAAF,GAAU5vQ,EAAV;AACD,SAFD;AAGD;;AAED,UAAIi/P,IAAI,CAACwF,MAAT,EAAiB,SAlBuB,CAkBb;;AAE3B,UAAI9vP,IAAI,CAAC09P,IAAT,EAAe;AACb;AACA,YAAInE,IAAI,CAACnI,MAAL,IAAe9G,IAAI,CAACh3J,KAAL,CAAW57G,MAA9B,EAAsC;AACpC;AACAqsB,UAAAA,CAAC,GAAGumP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAJ;AACA,cAAIvvF,CAAC,CAACg8P,IAAN,EAAY,KAAKlmD,OAAL,CAAa0/C,IAAb,EAAmBx1P,CAAC,CAACg8P,IAArB,EAA2Bh8P,CAA3B;AACb,SAJD,MAIO,IAAI/D,IAAI,CAAC+/P,IAAT,EAAe;AACpB;AACAh8P,UAAAA,CAAC,GAAG/D,IAAI,CAAC+/P,IAAL,CAAUpB,UAAd;AACA,cAAI56P,CAAJ,EAAOA,CAAC,CAAC+0P,WAAF,CAAc94P,IAAI,CAAC+/P,IAAnB;AACR;;AAED//P,QAAAA,IAAI,CAAC+/P,IAAL,GAAY,IAAZ;AACA;AACD;;AAED//P,MAAAA,IAAI,GAAGu5P,IAAI,CAACnI,MAAL,GAAc9G,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAd,GAA8BtzF,IAArC;AACA,UAAIA,IAAI,CAAC65M,OAAL,KAAiBxuN,EAArB,EAAyB,SArCe,CAqCL;;AAEnC,UAAI,CAAC2U,IAAI,CAAC+/P,IAAN,IAAc,CAAC//P,IAAI,CAAC+/P,IAAL,CAAUwD,eAA7B,EAA8C;AAC5C;AACA,aAAKH,SAAL,GAAiB,KAAjB;AACAE,QAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACD,OAJD,MAIO;AACL;AACA,aAAKwuN,OAAL,CAAa0/C,IAAb,EAAmBv5P,IAAI,CAAC+/P,IAAxB,EAA8B//P,IAA9B;AACD;;AAEDA,MAAAA,IAAI,CAAC65M,OAAL,GAAexuN,EAAf;AACD;;AAED,WAAO,CAAC,KAAK+3Q,SAAb;AACD,GAzN6B;;AA2N9B;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE9Y,EAAAA,IAAI,CAACiO,EAAD,EAAK1I,KAAL,EAAYt+K,IAAZ,EAAkB;AACpB,QAAI,CAAC,KAAK8xL,OAAL,CAAaxT,KAAb,CAAL,EAA0B,OAAOA,KAAK,CAACkQ,IAAb;AAC1B,UAAMD,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACMxG,IAAI,GAAGlC,KAAK,CAACxH,KAAK,CAACmD,QAAP,CADlB;AAAA,UAEMjhF,MAAM,GAAG89E,KAAK,CAACiD,WAAN,KAAsB,KAAtB,GAA8B,MAA9B,GAAuC,IAFtD;AAAA,UAGM0Q,OAAO,GAAGjK,IAAI,CAACpI,GAAL,KAAa,GAH7B;AAIA,QAAIsS,OAAO,GAAG,IAAd;AAAA,QACIrrR,CAAC,GAAG,CADR;AAEA,UAAM03M,MAAM,GAAGrtE,IAAI,CAACotI,KAAD,EAAQ0I,EAAR,EAAYhnL,IAAZ,EAAkB,GAAlB,EAAuBuuL,GAAvB,CAAnB;AACAhwE,IAAAA,MAAM,CAACwjD,YAAP,CAAoB,OAApB,EAA6BylB,QAAQ,CAAClJ,KAAD,CAArC,EAToB,CAS2B;;AAE/C,UAAMqI,IAAI,GAAGgJ,kBAAkB,CAACrR,KAAD,CAA/B;;AAEA,SAAK,MAAMxzQ,GAAX,IAAkB67Q,IAAlB,EAAwB5kB,YAAY,CAACxjD,MAAD,EAASzzM,GAAT,EAAc67Q,IAAI,CAAC77Q,GAAD,CAAlB,CAAZ;;AAExB,QAAI,CAACmnR,OAAL,EAAc;AACZlwB,MAAAA,YAAY,CAACxjD,MAAD,EAAS,gBAAT,EAA2B/d,MAA3B,CAAZ;AACD;;AAEDuhE,IAAAA,YAAY,CAACxjD,MAAD,EAAS,WAAT,EAAsB+/D,KAAK,CAACvvO,IAAN,GAAaA,IAAI,CAAC,IAAD,EAAOuvO,KAAP,EAAcA,KAAK,CAAC9rJ,KAApB,CAAjB,GAA8C,IAApE,CAAZ;;AAEA,UAAM1tH,OAAO,GAAG2pB,IAAI,IAAI;AACtB,YAAMi7P,KAAK,GAAG,KAAKoI,OAAL,CAAarjQ,IAAb,CAAd;AAAA,YACMmD,IAAI,GAAGs/G,IAAI,CAACziH,IAAD,EAAO8vL,MAAP,EAAe2zE,OAAf,EAAwBlK,IAAI,CAACpI,GAA7B,EAAkC2O,GAAlC,CADjB;;AAGA,UAAI7E,KAAJ,EAAW;AACT,aAAKphD,OAAL,CAAa0/C,IAAb,EAAmBp2P,IAAnB,EAAyBnD,IAAzB;;AAEA,YAAIwjQ,OAAJ,EAAatlG,OAAO,CAAC,IAAD,EAAO/6J,IAAP,EAAanD,IAAb,CAAP;AACd;;AAEDyjQ,MAAAA,OAAO,GAAGtgQ,IAAV;AACA,QAAE/qB,CAAF;AACD,KAZD;;AAcA,QAAImhR,IAAI,CAACnI,MAAT,EAAiB;AACf,UAAIvB,KAAK,CAACv8J,KAAN,CAAY57G,MAAhB,EAAwBrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACzB,KAFD,MAEO;AACL8pH,MAAAA,KAAK,CAACyyC,KAAD,EAAQx5Q,OAAR,CAAL;AACD;;AAEDwiR,IAAAA,QAAQ,CAAC/oE,MAAD,EAAS13M,CAAT,CAAR;AACA,WAAO03M,MAAP;AACD,GA9Q6B;;AAgR9B;AACF;AACA;AACA;AACA;AACA;AACE+pB,EAAAA,OAAO,CAAC0/C,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACtB;AACA;AACAyuB,IAAAA,OAAO,GAAG8pO,EAAV;AACA/1Q,IAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAJsB,CAIE;;AAExB1C,IAAAA,kBAAkB,CAACznR,IAAD,EAAOymB,IAAP,CAAlB,CANsB,CAMU;;AAEhCu5P,IAAAA,IAAI,CAACr/O,IAAL,CAAU3gC,IAAV,EAAgBymB,IAAhB,EAAsB,IAAtB,EARsB,CAQO;;AAE7B,UAAM2jQ,KAAK,GAAGC,WAAW,CAACrK,IAAI,CAAClhQ,IAAN,CAAzB;AACA,QAAIsrQ,KAAJ,EAAWA,KAAK,CAACzsR,IAAN,CAAW,IAAX,EAAiBqiR,IAAjB,EAAuBhB,EAAvB,EAA2Bv4P,IAA3B,EAXW,CAWuB;AAC7C;;AAEA,QAAIyuB,OAAJ,EAAa,KAAKowO,KAAL,CAAWpwO,OAAX,EAAoBzuB,IAApB;AACd,GArS6B;;AAuS9B;AACF;AACA;AACA;AACA;AACE6+P,EAAAA,KAAK,CAACtG,EAAD,EAAKv4P,IAAL,EAAW;AACd,QAAIA,IAAI,IAAI,IAAZ,EAAkB;;AAElB,SAAK,MAAMmvD,IAAX,IAAmBkzM,MAAnB,EAA2B;AACzB,UAAIjnR,KAAK,GAAG+zE,IAAI,KAAK,MAAT,GAAkBgnM,UAAU,CAACn2P,IAAD,CAA5B,GAAqCA,IAAI,CAACmvD,IAAD,CAArD;AACA,UAAI/zE,KAAK,KAAKoH,MAAM,CAAC2sE,IAAD,CAApB,EAA4B;AAC5B,YAAMx1E,IAAI,GAAG0oR,MAAM,CAAClzM,IAAD,CAAnB;;AAEA,UAAI/zE,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,QAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD,OAFD,MAEO;AACL,YAAIopQ,UAAU,CAAC3nQ,KAAD,CAAd,EAAuB;AACrBA,UAAAA,KAAK,GAAG4nQ,WAAW,CAAC5nQ,KAAD,EAAQ,KAAKsvQ,KAAL,CAAW9oP,QAAnB,EAA6Bg7F,IAAI,EAAjC,CAAnB;AACD;;AAED27J,QAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAK,GAAG,EAA9B;AACD;;AAEDoH,MAAAA,MAAM,CAAC2sE,IAAD,CAAN,GAAe/zE,KAAf;AACD;AACF,GAhU6B;;AAkU9B;AACF;AACA;AACA;AACA;AACE6nQ,EAAAA,IAAI,GAAG;AACL,UAAM6c,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACM9c,IAAI,GAAG,KAAKyH,KADlB;AAEA,QAAI6N,EAAE,GAAGtV,IAAI,CAACsV,EAAd;AAAA,QACIr6Q,KAAK,GAAG,CADZ;;AAGA,SAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAACrhP,QAAtB,EAAgC;AAC9B,UAAI,CAAC22P,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAUA,EAAE,GAAGG,QAAQ,CAACoH,GAAD,EAAMyC,SAAS,GAAG,CAAlB,EAAqB,MAArB,EAA6Bx9P,EAA7B,CAAvB;AACT7mB,MAAAA,KAAK,GAAG2lR,cAAc,CAACtL,EAAD,EAAKtV,IAAI,CAACrhP,QAAL,CAAcvW,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD;;AAED,SAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAAC0H,QAAtB,EAAgC;AAC9B,UAAI,CAAC4N,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAUA,EAAE,GAAGG,QAAQ,CAACoH,GAAD,EAAMyC,SAAS,GAAG,CAAlB,EAAqB,MAArB,EAA6Bx9P,EAA7B,CAAvB;AACT7mB,MAAAA,KAAK,GAAG4lR,cAAc,CAACvL,EAAD,EAAKtV,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD,KAdI,CAcH;;;AAGF,QAAIq6Q,EAAJ,EAAQ;AACNr6Q,MAAAA,KAAK,KAAK,CAAV,IAAe4hR,GAAG,CAAChH,WAAJ,CAAgBP,EAAhB,GAAqBtV,IAAI,CAACsV,EAAL,GAAU,IAA9C,IAAsDM,QAAQ,CAACN,EAAD,EAAKr6Q,KAAL,CAA9D;AACD;AACF,GA3V6B;;AA6V9B;AACF;AACA;AACE2kR,EAAAA,UAAU,GAAG;AACX,UAAMz0G,GAAG,GAAG,KAAKs8F,KAAjB;AACAt8F,IAAAA,GAAG,CAACxsJ,QAAJ,GAAe,EAAf;AACAwsJ,IAAAA,GAAG,CAACu8F,QAAJ,GAAe,EAAf;AACD;;AApW6B,CAAhC,GAsWI;;AAEJ,SAAS2Y,YAAT,CAAsBtjQ,IAAtB,EAA4B3U,EAA5B,EAAgC;AAC9B,SAAO2U,IAAI,IAAIA,IAAI,CAACi7P,KAAL,KAAe5vQ,EAA9B,EAAkC2U,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAnD,EAA0D;AACxD/jG,IAAAA,IAAI,CAACi7P,KAAL,GAAa5vQ,EAAb;;AAEA,QAAI2U,IAAI,CAACsqP,IAAL,IAAatqP,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,KAAoB5vQ,EAArC,EAAyC;AACvC2U,MAAAA,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,GAAkB5vQ,EAAlB;AACD,KAFD,MAEO;AACR;AACF,EAAC;;;AAGF,SAASw4Q,cAAT,CAAwBtL,EAAxB,EAA4B5zP,IAA5B,EAAkCzmB,KAAlC,EAAyC;AACvC,MAAI9F,CAAJ,EAAOkO,CAAP,EAAUqzB,IAAV;;AAEA,MAAIhV,IAAI,CAAC/C,QAAL,KAAkB,QAAtB,EAAgC;AAC9B;AACA;AACA;AACA;AACA,QAAImiQ,EAAE,GAAGrL,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,SAAd,EAAyB6mB,EAAzB,CAAjB;AACA+9P,IAAAA,aAAa,CAACiB,EAAD,EAAK;AAChB14Q,MAAAA,EAAE,EAAEy3P,aAAa,GAAGn+O,IAAI,CAACtZ,EADT;AAEhB23Q,MAAAA,OAAO,EAAE,SAFO;AAGhB1iR,MAAAA,KAAK,EAAE,MAHS;AAIhB+tB,MAAAA,MAAM,EAAE,MAJQ;AAKhB21P,MAAAA,mBAAmB,EAAE;AALL,KAAL,CAAb;AAOAD,IAAAA,EAAE,GAAGrL,QAAQ,CAACqL,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBh/P,EAAhB,CAAb;AACA+9P,IAAAA,aAAa,CAACiB,EAAD,EAAK;AAChBzjR,MAAAA,KAAK,EAAE,CADS;AAEhB+tB,MAAAA,MAAM,EAAE,CAFQ;AAGhBzlB,MAAAA,IAAI,EAAE,OAAOjR,MAAP,CAAcilH,IAAI,EAAlB,EAAsB,GAAtB,EAA2BjlH,MAA3B,CAAkCgtB,IAAI,CAACtZ,EAAvC,EAA2C,GAA3C;AAHU,KAAL,CAAb;AAKAktQ,IAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,gBAAd,EAAgC6mB,EAAhC,CAAb;AACA+9P,IAAAA,aAAa,CAACvK,EAAD,EAAK;AAChBltQ,MAAAA,EAAE,EAAEsZ,IAAI,CAACtZ,EADO;AAEhB44Q,MAAAA,EAAE,EAAEt/P,IAAI,CAACkmF,EAFO;AAGhBq5K,MAAAA,EAAE,EAAEv/P,IAAI,CAACimF,EAHO;AAIhBu5K,MAAAA,EAAE,EAAEx/P,IAAI,CAAC6lL,EAJO;AAKhB6uC,MAAAA,EAAE,EAAE10N,IAAI,CAACuyD,EALO;AAMhBoiK,MAAAA,EAAE,EAAE30N,IAAI,CAACmmF,EANO;AAOhB1kG,MAAAA,CAAC,EAAEue,IAAI,CAAC8lL;AAPQ,KAAL,CAAb;AASD,GA7BD,MA6BO;AACL8tE,IAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,gBAAd,EAAgC6mB,EAAhC,CAAb;AACA+9P,IAAAA,aAAa,CAACvK,EAAD,EAAK;AAChBltQ,MAAAA,EAAE,EAAEsZ,IAAI,CAACtZ,EADO;AAEhBw/F,MAAAA,EAAE,EAAElmF,IAAI,CAACkmF,EAFO;AAGhB3zB,MAAAA,EAAE,EAAEvyD,IAAI,CAACuyD,EAHO;AAIhB0zB,MAAAA,EAAE,EAAEjmF,IAAI,CAACimF,EAJO;AAKhBE,MAAAA,EAAE,EAAEnmF,IAAI,CAACmmF;AALO,KAAL,CAAb;AAOD;;AAED,OAAK1yG,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGqe,IAAI,CAACw+O,KAAL,CAAWzrQ,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7CuhC,IAAAA,IAAI,GAAG++O,QAAQ,CAACH,EAAD,EAAKngR,CAAL,EAAQ,MAAR,EAAgB2sB,EAAhB,CAAf;AACA4U,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,QAAlB,EAA4B3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAc2M,MAA1C;AACA40B,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,YAAlB,EAAgC3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAcw1P,KAA9C;AACD;;AAEDirB,EAAAA,QAAQ,CAACN,EAAD,EAAKngR,CAAL,CAAR;AACA,SAAO8F,KAAP;AACD,EAAC;;;AAGF,SAAS4lR,cAAT,CAAwBvL,EAAxB,EAA4Bj4O,IAA5B,EAAkCpiC,KAAlC,EAAyC;AACvC,MAAImnC,IAAJ;AACAkzO,EAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAL,EAAY,UAAZ,EAAwB6mB,EAAxB,CAAb;AACAwzP,EAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsBhzN,IAAI,CAACj1B,EAA3B;;AAEA,MAAIi1B,IAAI,CAAC75B,IAAT,EAAe;AACb4+B,IAAAA,IAAI,GAAGqzO,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBxzP,EAAhB,CAAf;AACAsgB,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,GAAlB,EAAuBhzN,IAAI,CAAC75B,IAA5B;AACD,GAHD,MAGO;AACL4+B,IAAAA,IAAI,GAAGqzO,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBxzP,EAAhB,CAAf;AACA+9P,IAAAA,aAAa,CAACz9O,IAAD,EAAO;AAClB9mC,MAAAA,CAAC,EAAE,CADe;AAElBue,MAAAA,CAAC,EAAE,CAFe;AAGlBxc,MAAAA,KAAK,EAAEggC,IAAI,CAAChgC,KAHM;AAIlB+tB,MAAAA,MAAM,EAAEiS,IAAI,CAACjS;AAJK,KAAP,CAAb;AAMD;;AAEDwqP,EAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR;AACA,SAAOr6Q,KAAK,GAAG,CAAf;AACD,EAAC;;;AAGF,SAASggL,OAAT,CAAiBusF,QAAjB,EAA2B8N,EAA3B,EAA+Bx0J,KAA/B,EAAsC;AACpCw0J,EAAAA,EAAE,GAAGA,EAAE,CAAC6L,SAAH,CAAaC,eAAlB;AACA,MAAI9yL,IAAJ;AAAA,MACI3zC,GAAG,GAAG,CADV;AAEAw/K,EAAAA,KAAK,CAACr5G,KAAD,EAAQ/jG,IAAI,IAAI;AACnBuxE,IAAAA,IAAI,GAAGk5K,QAAQ,CAACH,IAAT,CAAciO,EAAd,EAAkBv4P,IAAlB,EAAwBuxE,IAAxB,CAAP;AACA,MAAE3zC,GAAF;AACD,GAHI,CAAL,CAJoC,CAOhC;;AAEJi7N,EAAAA,QAAQ,CAACN,EAAD,EAAK,IAAI36N,GAAT,CAAR;AACD,EAAC;AACF;;;AAGA,SAAS6kF,IAAT,CAAcziH,IAAd,EAAoBu4P,EAApB,EAAwBkL,OAAxB,EAAiCtS,GAAjC,EAAsC2O,GAAtC,EAA2C;AACzC,MAAI38P,IAAI,GAAGnD,IAAI,CAAC+/P,IAAhB;AAAA,MACI1H,GADJ,CADyC,CAEhC;;AAET,MAAI,CAACl1P,IAAL,EAAW;AACTk1P,IAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACAx1P,IAAAA,IAAI,GAAGi1P,SAAS,CAACC,GAAD,EAAMlH,GAAN,EAAWpsP,EAAX,CAAhB;AACA/E,IAAAA,IAAI,CAAC+/P,IAAL,GAAY58P,IAAZ;;AAEA,QAAInD,IAAI,CAACsqP,IAAT,EAAe;AACbnnP,MAAAA,IAAI,CAAC08P,QAAL,GAAgB7/P,IAAhB;AACAmD,MAAAA,IAAI,CAACugQ,UAAL,GAAkB;AAChB96Q,QAAAA,IAAI,EAAE;AADU,OAAlB,CAFa,CAIV;;AAEH,UAAIuoQ,GAAG,KAAK,GAAZ,EAAiB;AACf,cAAM8R,EAAE,GAAG7K,SAAS,CAACC,GAAD,EAAM,MAAN,EAActzP,EAAd,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB0D,EAAjB;AACAA,QAAAA,EAAE,CAACpD,QAAH,GAAc7/P,IAAd;AACA,cAAMskQ,EAAE,GAAGlM,SAAS,CAACC,GAAD,EAAM,GAAN,EAAWtzP,EAAX,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB+E,EAAjB;AACAA,QAAAA,EAAE,CAACzE,QAAH,GAAc7/P,IAAd;AACA,cAAMo6L,EAAE,GAAGg+D,SAAS,CAACC,GAAD,EAAM,MAAN,EAActzP,EAAd,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiBnlE,EAAjB;AACAA,QAAAA,EAAE,CAACylE,QAAH,GAAc7/P,IAAd;AACAo6L,QAAAA,EAAE,CAACspE,UAAH,GAAgB;AACd96Q,UAAAA,IAAI,EAAE;AADQ,SAAhB;AAGD;AACF;AACF,GA9BwC,CA8BvC;;;AAGF,MAAIua,IAAI,CAACogQ,eAAL,KAAyBzD,GAAzB,IAAgCyE,YAAY,CAACphQ,IAAD,EAAOsgQ,OAAP,CAAhD,EAAiE;AAC/DlL,IAAAA,EAAE,CAACK,YAAH,CAAgBz1P,IAAhB,EAAsBsgQ,OAAO,GAAGA,OAAO,CAACe,WAAX,GAAyBjM,EAAE,CAACyB,UAAzD;AACD;;AAED,SAAO72P,IAAP;AACD,EAAC;;;AAGF,SAASohQ,YAAT,CAAsBphQ,IAAtB,EAA4BsgQ,OAA5B,EAAqC;AACnC,SAAOtgQ,IAAI,CAACw7P,UAAL,IAAmBx7P,IAAI,CAACw7P,UAAL,CAAgBnG,UAAhB,CAA2B9gR,MAA3B,GAAoC,CAAvD,IAA4DyrB,IAAI,CAACkhQ,eAAL,IAAwBZ,OAA3F,CADmC,CACiE;AACrG,EAAC;;;AAGF,IAAIh1O,OAAO,GAAG,IAAd;AAAA,IACI;AACJjsC,MAAM,GAAG,IAFT,EAEe;AACf;;AAEA,MAAMohR,WAAW,GAAG;AAClB7/J,EAAAA,KAAK,CAACw1J,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACpB,UAAMo6L,EAAE,GAAG3rK,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAh2Q,IAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACAnK,IAAAA,IAAI,CAACtH,UAAL,CAAgB14Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AACAxd,IAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAJoB,CAII;;AAExBj1O,IAAAA,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAAV;AACAe,IAAAA,IAAI,CAACpH,OAAL,CAAa54Q,IAAb,EAAmBymB,IAAnB,EAAyB,IAAzB;AACA,UAAMijQ,EAAE,GAAGx0O,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAe,IAAAA,IAAI,CAACvH,UAAL,CAAgBz4Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AACA,UAAM5kB,KAAK,GAAG4kB,IAAI,CAACsqP,IAAL,CAAUwI,WAAV,KAA0B,KAA1B,GAAkC,MAAlC,GAA2C,IAAzD;;AAEA,QAAI13Q,KAAK,KAAKoH,MAAM,CAACuvL,MAArB,EAA6B;AAC3BuhE,MAAAA,YAAY,CAACl5C,EAAD,EAAK,gBAAL,EAAuBh/M,KAAvB,CAAZ;AACAk4P,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,gBAAL,EAAuB7nR,KAAvB,CAAZ;AACAoH,MAAAA,MAAM,CAACuvL,MAAP,GAAgB32L,KAAhB;AACD;;AAED,QAAI4kB,IAAI,CAACkyP,gBAAL,IAAyBlyP,IAAI,CAAC+rP,MAAlC,EAA0C;AACxC,YAAMnjQ,IAAI,GAAGoX,IAAI,CAACpX,IAAlB;AACA0qP,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,IAAhB,CAAZ,CAFwC,CAEL;;AAEnC,WAAKykE,KAAL,CAAWoE,EAAX,EAAejjQ,IAAf;AACAszO,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,QAAL,EAAe,IAAf,CAAZ,CALwC,CAKN;;AAElC,UAAIr6Q,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVpG,MAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACA,WAAK7E,KAAL,CAAWzkE,EAAX,EAAep6L,IAAf;AACA,UAAIpX,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ,CAV8B,CAUZ;;AAE5B6lC,MAAAA,OAAO,GAAG,IAAV;AACD,KAbD,MAaO;AACL;AACA6kN,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,MAAhB,CAAZ;AACD;AACF,GApCiB;;AAsClBhnM,EAAAA,KAAK,CAACmmQ,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACpB,QAAIA,IAAI,CAACohN,MAAL,KAAgB,KAApB,EAA2B;AACzBqjD,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,eAAxB,CAAR;AACAkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,WAAxB,CAAR;AACD,KAHD,MAGO;AACLkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,IAAxB,CAAR;AACD;AACF,GA7CiB;;AA+ClBznK,EAAAA,IAAI,CAACyoK,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACnB,UAAM0oP,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;AACA,QAAI3jB,GAAJ,EAASjB,KAAT,EAAgBi9Q,GAAhB,EAAqBtB,EAArB;;AAEA,QAAI,uBAAQrO,EAAR,CAAJ,EAAiB;AACf;AACAttQ,MAAAA,KAAK,GAAGstQ,EAAE,CAAC7mQ,GAAH,CAAOkd,CAAC,IAAIw2P,SAAS,CAACv1P,IAAD,EAAOjB,CAAP,CAArB,CAAR;AACA1iB,MAAAA,GAAG,GAAGjB,KAAK,CAACY,IAAN,CAAW,IAAX,CAAN,CAHe,CAGS;;AAExB,UAAIK,GAAG,KAAKmG,MAAM,CAACsuG,IAAnB,EAAyB;AACvB+nK,QAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR;AACAF,QAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACA5B,QAAAA,EAAE,GAAGlB,UAAU,CAAC71P,IAAD,CAAf;AACA5kB,QAAAA,KAAK,CAACc,OAAN,CAAc,CAACJ,CAAD,EAAI1D,CAAJ,KAAU;AACtB,gBAAMwxQ,EAAE,GAAGwO,SAAS,CAACC,GAAD,EAAM,OAAN,EAAetzP,EAAf,CAApB;AACA6kP,UAAAA,EAAE,CAACiW,QAAH,GAAc7/P,IAAd,CAFsB,CAEF;;AAEpB4pP,UAAAA,EAAE,CAAC8a,WAAH,GAAiB5oR,CAAjB;;AAEA,cAAI1D,CAAJ,EAAO;AACLwxQ,YAAAA,EAAE,CAACtW,YAAH,CAAgB,GAAhB,EAAqB,CAArB;AACAsW,YAAAA,EAAE,CAACtW,YAAH,CAAgB,IAAhB,EAAsByjB,EAAtB;AACD;;AAEDwB,UAAAA,EAAE,CAACgH,WAAH,CAAe3V,EAAf;AACD,SAZD;AAaApnQ,QAAAA,MAAM,CAACsuG,IAAP,GAAcz0G,GAAd;AACD;AACF,KAxBD,MAwBO;AACL;AACAjB,MAAAA,KAAK,GAAGm6Q,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAjB;;AAEA,UAAIttQ,KAAK,KAAKoH,MAAM,CAACsuG,IAArB,EAA2B;AACzBynK,QAAAA,EAAE,CAACmM,WAAH,GAAiBtpR,KAAjB;AACAoH,QAAAA,MAAM,CAACsuG,IAAP,GAAc11G,KAAd;AACD;AACF;;AAEDk4P,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoBpC,UAAU,CAACn2P,IAAD,CAA9B,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,WAAL,EAAkBtD,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,IAAnC,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,YAAL,EAAmBv4P,IAAI,CAACq2P,SAAxB,CAAZ;AACA/iB,IAAAA,YAAY,CAACilB,EAAD,EAAK,cAAL,EAAqBv4P,IAAI,CAACs2P,WAA1B,CAAZ;AACAhjB,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoBv4P,IAAI,CAACu2P,UAAzB,CAAZ;AACD;;AA1FiB,CAApB;;AA8FA,SAASh9Q,IAAT,CAAcI,IAAd,EAAoByB,KAApB,EAA2B2pB,EAA3B,EAA+B;AAC7B;AACA,MAAI3pB,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B,OAFC,CAEO;;AAEpC,MAAIorB,EAAJ,EAAQ;AACN4/P,IAAAA,cAAc,CAACl2O,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,EAAuB2pB,EAAvB,CAAd;AACD,GAFD,MAEO;AACLuuO,IAAAA,YAAY,CAAC7kN,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,CAAZ;AACD,GAR4B,CAQ3B;;;AAGFoH,EAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;;AAED,SAASqpR,QAAT,CAAkBlM,EAAlB,EAAsB5+Q,IAAtB,EAA4ByB,KAA5B,EAAmC;AACjC,MAAIA,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B;AAC1B,QAAIyB,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,MAAAA,EAAE,CAACsG,KAAH,CAAS+F,cAAT,CAAwBjrR,IAAxB;AACD,KAFD,MAEO;AACL4+Q,MAAAA,EAAE,CAACsG,KAAH,CAASkE,WAAT,CAAqBppR,IAArB,EAA2ByB,KAAK,GAAG,EAAnC;AACD;;AAEDoH,IAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;AACF;;AAED,SAAS0nR,aAAT,CAAuBvK,EAAvB,EAA2Bn7P,KAA3B,EAAkC;AAChC,OAAK,MAAM/gB,GAAX,IAAkB+gB,KAAlB,EAAyB;AACvBk2O,IAAAA,YAAY,CAACilB,EAAD,EAAKl8Q,GAAL,EAAU+gB,KAAK,CAAC/gB,GAAD,CAAf,CAAZ;AACD;AACF;;AAED,SAASi3P,YAAT,CAAsBilB,EAAtB,EAA0B5+Q,IAA1B,EAAgCyB,KAAhC,EAAuC;AACrC,MAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAtB;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD;AACF;;AAED,SAASgrR,cAAT,CAAwBpM,EAAxB,EAA4B5+Q,IAA5B,EAAkCyB,KAAlC,EAAyC2pB,EAAzC,EAA6C;AAC3C,MAAI3pB,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACoM,cAAH,CAAkB5/P,EAAlB,EAAsBprB,IAAtB,EAA4ByB,KAA5B;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAACsM,iBAAH,CAAqB9/P,EAArB,EAAyBprB,IAAzB;AACD;AACF;;AAED,SAASijH,IAAT,GAAgB;AACd,MAAI9xG,GAAJ;AACA,SAAO,OAAOka,MAAP,KAAkB,WAAlB,GAAgC,EAAhC,GAAqC,CAACla,GAAG,GAAGka,MAAM,CAAC1pB,QAAd,EAAwByiO,IAAxB,GAA+BjzN,GAAG,CAAC8xG,IAAJ,CAASn7G,KAAT,CAAe,CAAf,EAAkB,CAACqJ,GAAG,CAACizN,IAAJ,CAASrmO,MAA5B,CAA/B,GAAqEoT,GAAG,CAAC8xG,IAArH;AACD;;AAED,SAASkoK,iBAAT,CAA2BxtD,MAA3B,EAAmC;AACjCojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAKytD,KAAL,GAAa,IAAb;AACA,OAAKra,KAAL,GAAa;AACX9oP,IAAAA,QAAQ,EAAE,EADC;AAEX+oP,IAAAA,QAAQ,EAAE;AAFC,GAAb;AAID;;AACD,wBAASma,iBAAT,EAA4BpK,QAA5B,EAAsC;AACpC;AACF;AACA;AACA;AACEoF,EAAAA,GAAG,GAAG;AACJ,WAAO,KAAKiF,KAAZ;AACD,GAPmC;;AASpC;AACF;AACA;AACA;AACE3J,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb,UAAMhgL,CAAC,GAAG8xL,MAAM,EAAhB,CADa,CACO;;AAEpB9xL,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,KAAP,EAAc,sBAAO,EAAP,EAAWyD,QAAX,EAAqB;AACjC8pK,MAAAA,KAAK,EAAE,OAD0B;AAEjC1kR,MAAAA,KAAK,EAAE,KAAKw6Q,MAAL,GAAc,KAAKE,MAFO;AAGjC3sP,MAAAA,MAAM,EAAE,KAAK0sP,OAAL,GAAe,KAAKC,MAHK;AAIjCgI,MAAAA,OAAO,EAAE,OAAOrrR,MAAP,CAAc,KAAKmjR,MAAnB,EAA2B,GAA3B,EAAgCnjR,MAAhC,CAAuC,KAAKojR,OAA5C;AAJwB,KAArB,CAAd,EAHa,CAQR;;AAEL,UAAMkI,EAAE,GAAG,KAAKtI,QAAhB;;AAEA,QAAIsI,EAAE,IAAIA,EAAE,KAAK,aAAb,IAA8BA,EAAE,KAAK,MAAzC,EAAiD;AAC/CpzL,MAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbn3G,QAAAA,KAAK,EAAE,KAAKw6Q,MADC;AAEbzsP,QAAAA,MAAM,EAAE,KAAK0sP,OAFA;AAGbnyQ,QAAAA,IAAI,EAAEq6Q;AAHO,OAAf,EAIGjrK,KAJH;AAKD,KAlBY,CAkBX;;;AAGFnoB,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY6qK,cAAZ,EAA4B;AAC1BjhG,MAAAA,SAAS,EAAE,eAAe,KAAK44F,OAApB,GAA8B;AADf,KAA5B;AAGA,SAAK3P,IAAL,CAAUz6K,CAAV,EAAaggL,KAAb;AACAhgL,IAAAA,CAAC,CAACmoB,KAAF,GAzBa,CAyBF;AACX;;AAEA,SAAKirJ,IAAL,CAAUpzK,CAAV,EA5Ba,CA4BC;;AAEd,SAAKk1L,KAAL,GAAal1L,CAAC,CAACmoB,KAAF,KAAY,EAAzB;AACA,WAAO,IAAP;AACD,GA7CmC;;AA+CpC;AACF;AACA;AACA;AACA;AACEsyJ,EAAAA,IAAI,CAACz6K,CAAD,EAAIggL,KAAJ,EAAW;AACb,UAAM0J,IAAI,GAAGlC,KAAK,CAACxH,KAAK,CAACmD,QAAP,CAAlB;AAAA,UACM7B,GAAG,GAAGoI,IAAI,CAACpI,GADjB;AAAA,UAEM8T,QAAQ,GAAG,CAACjE,kBAAD,EAAqBzH,IAAI,CAACr/O,IAA1B,CAFjB,CADa,CAGqC;;AAElD21D,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY;AACV,eAASshK,QAAQ,CAAClJ,KAAD,CADP;AAEV,mBAAaA,KAAK,CAACvvO,IAAN,GAAaA,IAAI,CAAC,IAAD,EAAOuvO,KAAP,EAAcA,KAAK,CAAC9rJ,KAApB,CAAjB,GAA8C;AAFjD,KAAZ,EAGGm9J,kBAAkB,CAACrR,KAAD,CAHrB,EAG8B;AAC5B,wBAAkBsB,GAAG,KAAK,GAAR,IAAetB,KAAK,CAACiD,WAAN,KAAsB,KAArC,GAA6C,MAA7C,GAAsD;AAD5C,KAH9B,EALa,CAUT;;AAEJ,UAAMz8Q,OAAO,GAAG2pB,IAAI,IAAI;AACtB,YAAM48F,IAAI,GAAG,KAAKA,IAAL,CAAU58F,IAAV,CAAb;AACA,UAAI48F,IAAJ,EAAU/sB,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAYmF,IAAZ;AACV/sB,MAAAA,CAAC,CAAC4nB,IAAF,CAAO05J,GAAP,EAAY,KAAKj3O,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBilQ,QAAvB,EAAiC9T,GAAG,KAAK,GAAR,GAAcA,GAAd,GAAoB,IAArD,CAAZ;;AAEA,UAAIA,GAAG,KAAK,MAAZ,EAAoB;AAClB,cAAMzI,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;;AAEA,YAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACf;AACA,gBAAMtrP,KAAK,GAAG;AACZ7e,YAAAA,CAAC,EAAE,CADS;AAEZ2e,YAAAA,EAAE,EAAE24P,UAAU,CAAC71P,IAAD;AAFF,WAAd;;AAKA,eAAK,IAAI5nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGswQ,EAAE,CAAChxQ,MAAvB,EAA+B,EAAEU,CAAjC,EAAoC;AAClCy3F,YAAAA,CAAC,CAAC4nB,IAAF,CAAO,OAAP,EAAgBr/G,CAAC,GAAGglB,KAAH,GAAW,IAA5B,EAAkC0zF,IAAlC,CAAuCykK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAE,CAACtwQ,CAAD,CAAT,CAAhD,EAA+D4/G,KAA/D;AACD;AACF,SAVD,MAUO;AACL;AACAnoB,UAAAA,CAAC,CAACihB,IAAF,CAAOykK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAhB;AACD;AACF,OAjBD,MAiBO,IAAIyI,GAAG,KAAK,GAAZ,EAAiB;AACtB,cAAMsB,IAAI,GAAGzyP,IAAI,CAACkyP,gBAAlB;AAAA,cACMtpQ,IAAI,GAAGoX,IAAI,CAACpX,IADlB;AAAA,cAEMmjQ,MAAM,GAAG/rP,IAAI,CAAC+rP,MAFpB;;AAIA,YAAI0G,IAAI,IAAI1G,MAAZ,EAAoB;AAClB/rP,UAAAA,IAAI,CAAC+rP,MAAL,GAAc,IAAd;AACD;;AAEDl8K,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACvH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEh6J,KAAlE,GATsB,CASqD;;AAE3EnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACpH,OAA5B,CAAZ;AACA/0C,QAAAA,KAAK,CAACp9M,IAAD,EAAO6vP,KAAK,IAAI,KAAKvF,IAAL,CAAUz6K,CAAV,EAAaggL,KAAb,CAAhB,CAAL;AACAhgL,QAAAA,CAAC,CAACmoB,KAAF;;AAEA,YAAIy6J,IAAI,IAAI1G,MAAZ,EAAoB;AAClB,cAAInjQ,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVoX,UAAAA,IAAI,CAAC+rP,MAAL,GAAcA,MAAd;AACAl8K,UAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEj6J,KAAlE;AACA,cAAIpvG,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ;AACX,SALD,MAKO;AACLinF,UAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEj6J,KAAlE;AACD;AACF;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF,GA/CsB,CA+CX;;AAEX,UAAI4E,IAAJ,EAAU/sB,CAAC,CAACmoB,KAAF,GAjDY,CAiDD;AACtB,KAlDD;;AAoDA,QAAIuhK,IAAI,CAACnI,MAAT,EAAiB;AACf,UAAIvB,KAAK,CAACv8J,KAAN,IAAeu8J,KAAK,CAACv8J,KAAN,CAAY57G,MAA/B,EAAuCrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACxC,KAFD,MAEO;AACL8pH,MAAAA,KAAK,CAACyyC,KAAD,EAAQx5Q,OAAR,CAAL;AACD,KApEY,CAoEX;;;AAGF,WAAOw5F,CAAC,CAACmoB,KAAF,EAAP,CAvEa,CAuEK;AACnB,GA5HmC;;AA8HpC;AACF;AACA;AACA;AACE4E,EAAAA,IAAI,CAAC58F,IAAD,EAAO;AACT,UAAM48F,IAAI,GAAG58F,IAAI,CAAC48F,IAAlB;AACA,QAAI1iF,IAAJ;;AAEA,QAAI0iF,IAAJ,EAAU;AACR,UAAI1iF,IAAI,GAAG,KAAKgrP,MAAL,IAAe,KAAKA,MAAL,CAAYtoK,IAAZ,CAA1B,EAA6C;AAC3C,eAAO1iF,IAAP;AACD,OAFD,MAEO;AACL,aAAKsxO,WAAL,CAAiB5uJ,IAAjB,EAAuBv1G,IAAvB,CAA4B6yB,IAAI,IAAI;AAClC;AACAA,UAAAA,IAAI,CAAC,YAAD,CAAJ,GAAqBA,IAAI,CAAC0iF,IAA1B;AACA1iF,UAAAA,IAAI,CAAC0iF,IAAL,GAAY,IAAZ;AACA,WAAC,KAAKsoK,MAAL,KAAgB,KAAKA,MAAL,GAAc,EAA9B,CAAD,EAAoCtoK,IAApC,IAA4C1iF,IAA5C;AACD,SALD;AAMD;AACF;;AAED,WAAO,IAAP;AACD,GApJmC;;AAsJpC;AACF;AACA;AACA;AACA;AACA;AACA;AACEA,EAAAA,IAAI,CAAC21O,KAAD,EAAQ7vP,IAAR,EAAc5C,KAAd,EAAqB+zP,GAArB,EAA0B;AAC5B,UAAM1xE,MAAM,GAAG,EAAf;AAAA,UACMlmM,IAAI,GAAG,CAACI,IAAD,EAAOyB,KAAP,EAAc2pB,EAAd,EAAkBogQ,QAAlB,KAA+B;AAC1C1lF,MAAAA,MAAM,CAAC0lF,QAAQ,IAAIxrR,IAAb,CAAN,GAA2ByB,KAA3B;AACD,KAHD,CAD4B,CAIzB;;;AAGH,QAAIlD,KAAK,CAACuH,OAAN,CAAc2d,KAAd,CAAJ,EAA0B;AACxBA,MAAAA,KAAK,CAAClhB,OAAN,CAAcmgB,EAAE,IAAIA,EAAE,CAAC9iB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAtB;AACD,KAFD,MAEO;AACL5C,MAAAA,KAAK,CAAC7jB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAL;AACD,KAX2B,CAW1B;;;AAGF,QAAImxP,GAAJ,EAAS;AACP0N,MAAAA,KAAK,CAACp/E,MAAD,EAASz/K,IAAT,EAAe6vP,KAAf,EAAsBsB,GAAtB,EAA2B,KAAKzG,KAAhC,CAAL;AACD;;AAED,WAAOjrE,MAAP;AACD,GAhLmC;;AAkLpC;AACF;AACA;AACA;AACA;AACA;AACEwjE,EAAAA,IAAI,CAACpzK,CAAD,EAAI;AACN,UAAMjuE,QAAQ,GAAG,KAAK8oP,KAAL,CAAW9oP,QAA5B;AAAA,UACM+oP,QAAQ,GAAG,KAAKD,KAAL,CAAWC,QAD5B;AAAA,UAEMx6L,KAAK,GAAGh1E,MAAM,CAACof,IAAP,CAAYqH,QAAZ,EAAsBlqB,MAAtB,GAA+ByD,MAAM,CAACof,IAAP,CAAYowP,QAAZ,EAAsBjzQ,MAFnE;AAGA,QAAIy4E,KAAK,KAAK,CAAd,EAAiB,OAJX,CAImB;;AAEzB0f,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP;;AAEA,SAAK,MAAMpsG,EAAX,IAAiBuW,QAAjB,EAA2B;AACzB,YAAMwsJ,GAAG,GAAGxsJ,QAAQ,CAACvW,EAAD,CAApB;AAAA,YACM83P,KAAK,GAAG/0F,GAAG,CAAC+0F,KADlB;;AAGA,UAAI/0F,GAAG,CAACxsJ,QAAJ,KAAiB,QAArB,EAA+B;AAC7B;AACA;AACA;AACA;AACAiuE,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,SAAP,EAAkB;AAChBpsG,UAAAA,EAAE,EAAEy3P,aAAa,GAAGz3P,EADJ;AAEhB23Q,UAAAA,OAAO,EAAE,SAFO;AAGhB1iR,UAAAA,KAAK,EAAE,MAHS;AAIhB+tB,UAAAA,MAAM,EAAE,MAJQ;AAKhB21P,UAAAA,mBAAmB,EAAE;AALL,SAAlB;AAOAn0L,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbn3G,UAAAA,KAAK,EAAE,GADM;AAEb+tB,UAAAA,MAAM,EAAE,GAFK;AAGbzlB,UAAAA,IAAI,EAAE,UAAUyC,EAAV,GAAe;AAHR,SAAf,EAIG2sG,KAJH;AAKAnoB,QAAAA,CAAC,CAACmoB,KAAF,GAjB6B,CAiBlB;;AAEXnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,gBAAP,EAAyB;AACvBpsG,UAAAA,EAAE,EAAEA,EADmB;AAEvB44Q,UAAAA,EAAE,EAAE71G,GAAG,CAACvjE,EAFe;AAGvBq5K,UAAAA,EAAE,EAAE91G,GAAG,CAACxjE,EAHe;AAIvBu5K,UAAAA,EAAE,EAAE/1G,GAAG,CAACo8B,EAJe;AAKvB6uC,UAAAA,EAAE,EAAEjrE,GAAG,CAACl3F,EALe;AAMvBoiK,UAAAA,EAAE,EAAElrE,GAAG,CAACtjE,EANe;AAOvB1kG,UAAAA,CAAC,EAAEgoK,GAAG,CAACq8B;AAPgB,SAAzB;AASD,OA5BD,MA4BO;AACL56G,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,gBAAP,EAAyB;AACvBpsG,UAAAA,EAAE,EAAEA,EADmB;AAEvBw/F,UAAAA,EAAE,EAAEujE,GAAG,CAACvjE,EAFe;AAGvB3zB,UAAAA,EAAE,EAAEk3F,GAAG,CAACl3F,EAHe;AAIvB0zB,UAAAA,EAAE,EAAEwjE,GAAG,CAACxjE,EAJe;AAKvBE,UAAAA,EAAE,EAAEsjE,GAAG,CAACtjE;AALe,SAAzB;AAOD;;AAED,WAAK,IAAI1yG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+qQ,KAAK,CAACzrQ,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrCy3F,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACb1yG,UAAAA,MAAM,EAAEo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MADJ;AAEb,wBAAco+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P;AAFV,SAAf,EAGG51I,KAHH;AAID;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF;AACD;;AAED,SAAK,MAAM3sG,EAAX,IAAiBs/P,QAAjB,EAA2B;AACzB,YAAMv8F,GAAG,GAAGu8F,QAAQ,CAACt/P,EAAD,CAApB;AACAwkF,MAAAA,CAAC,CAAC4nB,IAAF,CAAO,UAAP,EAAmB;AACjBpsG,QAAAA,EAAE,EAAEA;AADa,OAAnB;;AAIA,UAAI+iK,GAAG,CAAC3nK,IAAR,EAAc;AACZopF,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbxyG,UAAAA,CAAC,EAAEmpK,GAAG,CAAC3nK;AADM,SAAf,EAEGuxG,KAFH;AAGD,OAJD,MAIO;AACLnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbl5G,UAAAA,CAAC,EAAE,CADU;AAEbue,UAAAA,CAAC,EAAE,CAFU;AAGbxc,UAAAA,KAAK,EAAE8tK,GAAG,CAAC9tK,KAHE;AAIb+tB,UAAAA,MAAM,EAAE+/I,GAAG,CAAC//I;AAJC,SAAf,EAKG2pF,KALH;AAMD;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF;AACD;;AAEDnoB,IAAAA,CAAC,CAACmoB,KAAF;AACD;;AA3QmC,CAAtC,GA6QI;;AAEJ,SAAS6mK,KAAT,CAAejjR,CAAf,EAAkBokB,IAAlB,EAAwB6vP,KAAxB,EAA+BsB,GAA/B,EAAoClO,IAApC,EAA0C;AACxC,MAAIjjP,IAAI,IAAI,IAAZ,EAAkB,OAAOpkB,CAAP;;AAElB,MAAIu1Q,GAAG,KAAK,QAAR,IAAoBtB,KAAK,CAACiD,WAAN,KAAsB,KAA9C,EAAqD;AACnDl3Q,IAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AAED,MAAIu1Q,GAAG,KAAK,QAAZ,EAAsB;AACpB,QAAItB,KAAK,CAACiD,WAAN,KAAsB,KAA1B,EAAiC;AAC/Bl3Q,MAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AAEDA,IAAAA,CAAC,CAACwpR,OAAF,GAAY,MAAZ;AACA,QAAIplQ,IAAI,CAACpX,IAAL,KAAc,IAAlB,EAAwB,OAAOhN,CAAP;AACzB;;AAED,MAAIu1Q,GAAG,KAAK,OAAR,IAAmBnxP,IAAI,CAACohN,MAAL,KAAgB,KAAvC,EAA8C;AAC5CxlO,IAAAA,CAAC,CAACijR,KAAF,GAAU,6DAAV;AACD;;AAED,MAAI1N,GAAG,KAAK,MAAZ,EAAoB;AAClBv1Q,IAAAA,CAAC,CAAC,aAAD,CAAD,GAAmBu6Q,UAAU,CAACn2P,IAAD,CAA7B;AACApkB,IAAAA,CAAC,CAAC,WAAD,CAAD,GAAiBq5Q,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,IAAlC;AACApkB,IAAAA,CAAC,CAAC,YAAD,CAAD,GAAkBokB,IAAI,CAACq2P,SAAvB;AACAz6Q,IAAAA,CAAC,CAAC,cAAD,CAAD,GAAoBokB,IAAI,CAACs2P,WAAzB;AACA16Q,IAAAA,CAAC,CAAC,aAAD,CAAD,GAAmBokB,IAAI,CAACu2P,UAAxB;AACD;;AAED,OAAK,MAAMpnM,IAAX,IAAmBkzM,MAAnB,EAA2B;AACzB,QAAIjnR,KAAK,GAAG4kB,IAAI,CAACmvD,IAAD,CAAhB;AACA,UAAMx1E,IAAI,GAAG0oR,MAAM,CAAClzM,IAAD,CAAnB;AAEA,QAAI/zE,KAAK,KAAK,aAAV,KAA4BzB,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,QAAxD,CAAJ,EAAuE,CAAvE,KAA8E,IAAIyB,KAAK,IAAI,IAAb,EAAmB;AAC/F,UAAI2nQ,UAAU,CAAC3nQ,KAAD,CAAd,EAAuB;AACrBA,QAAAA,KAAK,GAAG4nQ,WAAW,CAAC5nQ,KAAD,EAAQ6nQ,IAAI,CAACrhP,QAAb,EAAuB,EAAvB,CAAnB;AACD;;AAEDhmB,MAAAA,CAAC,CAACjC,IAAD,CAAD,GAAUyB,KAAV;AACD;AACF;;AAED,SAAOQ,CAAP;AACD;;AAED,MAAMypR,MAAM,GAAG,QAAf;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAM74E,IAAI,GAAG,MAAb;AACA,MAAM84E,UAAU,GAAG;AACjBH,EAAAA,MAAM,EAAEA,MADS;AAEjBC,EAAAA,GAAG,EAAEA,GAFY;AAGjBC,EAAAA,GAAG,EAAEA,GAHY;AAIjB74E,EAAAA,IAAI,EAAEA;AAJW,CAAnB;;AAMA,MAAM+4E,OAAO,GAAG,EAAhB;AACAA,OAAO,CAACJ,MAAD,CAAP,GAAkBI,OAAO,CAACH,GAAD,CAAP,GAAe;AAC/B7a,EAAAA,QAAQ,EAAEsU,cADqB;AAE/B2G,EAAAA,QAAQ,EAAE3G,cAFqB;AAG/BjqK,EAAAA,OAAO,EAAEioK;AAHsB,CAAjC;AAKA0I,OAAO,CAACF,GAAD,CAAP,GAAe;AACb9a,EAAAA,QAAQ,EAAEgY,WADG;AAEbiD,EAAAA,QAAQ,EAAEZ,iBAFG;AAGbhwK,EAAAA,OAAO,EAAE4qK;AAHI,CAAf;AAKA+F,OAAO,CAAC/4E,IAAD,CAAP,GAAgB,EAAhB;;AACA,SAASi5E,YAAT,CAAsBhsR,IAAtB,EAA4BolB,CAA5B,EAA+B;AAC7BplB,EAAAA,IAAI,GAAG+J,MAAM,CAAC/J,IAAI,IAAI,EAAT,CAAN,CAAmB4C,WAAnB,EAAP;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB+tR,IAAAA,OAAO,CAAC9rR,IAAD,CAAP,GAAgBolB,CAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO0mQ,OAAO,CAAC9rR,IAAD,CAAd;AACD;AACF;;AAED,SAASk+O,SAAT,CAAmBg4B,KAAnB,EAA0B3E,MAA1B,EAAkC33P,MAAlC,EAA0C;AACxC,QAAMqyQ,IAAI,GAAG,EAAb;AAAA,QACM;AACN1pE,EAAAA,GAAG,GAAG,IAAI0uD,MAAJ,GAAa5pD,KAAb,CAAmBkqD,MAAnB,CAFN;AAAA,QAGM;AACN7yP,EAAAA,IAAI,GAAGw3P,KAAK,CAACmD,QAJb;AAKA,SAAO36P,IAAI,GAAGwtQ,aAAa,CAAChW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAhB,GAA6CvtQ,IAAI,KAAK,OAAT,GAAmBytQ,cAAc,CAACjW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAjC,GAA8D,qBAAM,kDAAN,CAAtH;AACD;;AAED,SAASC,aAAT,CAAuBvb,IAAvB,EAA6BpuD,GAA7B,EAAkC3oM,MAAlC,EAA0CqyQ,IAA1C,EAAgD;AAC9C,MAAIG,SAAS,CAACzb,IAAD,EAAOpuD,GAAP,EAAY3oM,MAAZ,CAAb,EAAkC;AAChC,UAAM+/F,KAAK,GAAGg3J,IAAI,CAACh3J,KAAnB;AAAA,UACMj7F,IAAI,GAAGiyP,IAAI,CAAC0I,QADlB;AAAA,UAEM1sQ,CAAC,GAAGgtG,KAAK,CAAC57G,MAFhB;AAGA,QAAIU,CAAC,GAAG,CAAR;;AAEA,QAAIigB,IAAI,KAAK,OAAb,EAAsB;AACpB,aAAOjgB,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB0tR,QAAAA,cAAc,CAACxyK,KAAK,CAACl7G,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAd;AACD;AACF,KAJD,MAIO;AACL,WAAK,MAAM7/P,IAAI,GAAGsxP,KAAK,CAACh/P,IAAD,CAAL,CAAY44P,KAA9B,EAAqC74Q,CAAC,GAAGkO,CAAzC,EAA4C,EAAElO,CAA9C,EAAiD;AAC/C,cAAM4nB,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAlB;AACA,YAAI4tR,aAAa,CAAChmQ,IAAD,EAAOk8L,GAAP,EAAYn2L,IAAZ,CAAjB,EAAoC6/P,IAAI,CAACvtR,IAAL,CAAU2nB,IAAV;AACrC;AACF;AACF;;AAED,SAAO4lQ,IAAP;AACD;;AAED,SAASG,SAAT,CAAmBzb,IAAnB,EAAyBpuD,GAAzB,EAA8B3oM,MAA9B,EAAsC;AACpC;AACA;AACA;AACA,SAAO+2P,IAAI,CAACY,MAAL,IAAehvD,GAAG,CAACpW,UAAJ,CAAewkE,IAAI,CAACY,MAApB,CAAf,KAA+CZ,IAAI,CAAC0I,QAAL,KAAkB,OAAlB,IAA6B1I,IAAI,CAACwI,WAAL,KAAqB,KAArB,KAA+B,CAACv/P,MAAD,IAAWA,MAAM,CAAC+2P,IAAD,CAAhD,CAA5E,CAAP;AACD;;AAED,SAASwb,cAAT,CAAwB/hK,KAAxB,EAA+Bm4F,GAA/B,EAAoC3oM,MAApC,EAA4CqyQ,IAA5C,EAAkD;AAChD;AACA;AACA,MAAIryQ,MAAM,IAAIA,MAAM,CAACwwG,KAAK,CAACumJ,IAAP,CAAhB,IAAgC0b,aAAa,CAACjiK,KAAD,EAAQm4F,GAAR,EAAam7D,KAAK,CAACtzJ,KAAN,CAAYktJ,KAAzB,CAAjD,EAAkF;AAChF2U,IAAAA,IAAI,CAACvtR,IAAL,CAAU0rH,KAAV;AACD,GAL+C,CAK9C;AACF;;;AAGA,QAAMgtB,KAAK,GAAGhtB,KAAK,CAACzQ,KAApB;AAAA,QACMhtG,CAAC,GAAGyqI,KAAK,IAAIA,KAAK,CAACr5I,MADzB;;AAGA,MAAI4O,CAAJ,EAAO;AACL,UAAM/H,CAAC,GAAGwlH,KAAK,CAACxlH,CAAN,IAAW,CAArB;AAAA,UACMue,CAAC,GAAGinG,KAAK,CAACjnG,CAAN,IAAW,CADrB;AAEAo/L,IAAAA,GAAG,CAACrD,SAAJ,CAAc,CAACt6M,CAAf,EAAkB,CAACue,CAAnB;;AAEA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BytR,MAAAA,aAAa,CAAC90I,KAAK,CAAC34I,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAb;AACD;;AAED1pE,IAAAA,GAAG,CAACrD,SAAJ,CAAct6M,CAAd,EAAiBue,CAAjB;AACD;;AAED,SAAO8oQ,IAAP;AACD;;AAED,SAASI,aAAT,CAAuBhmQ,IAAvB,EAA6Bk8L,GAA7B,EAAkCn2L,IAAlC,EAAwC;AACtC;AACA,QAAMmlP,MAAM,GAAGlrP,IAAI,CAACkrP,MAApB;AACA,SAAOhvD,GAAG,CAAC6uD,QAAJ,CAAaG,MAAb,KAAwBhvD,GAAG,CAACpW,UAAJ,CAAeolE,MAAf,KAA0BnlP,IAAI,CAAC/F,IAAD,EAAOk8L,GAAP,CAA7D;AACD;;AAED,MAAM+pE,UAAU,GAAG,IAAIrb,MAAJ,EAAnB;;AACA,SAASsb,SAAT,CAAoB5b,IAApB,EAA0B;AACxB,QAAMhqO,IAAI,GAAGgqO,IAAI,CAAChqO,IAAlB;;AAEA,MAAI,0BAAWA,IAAX,CAAJ,EAAsB;AACpBA,IAAAA,IAAI,CAACysO,YAAY,CAACkZ,UAAU,CAACp2E,KAAX,EAAD,CAAb,CAAJ;AACD,GAFD,MAEO,IAAIvvK,IAAJ,EAAU;AACf2lP,IAAAA,UAAU,CAAClrR,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqBuvQ,IAAI,CAACvmJ,KAAL,CAAWzjH,KAAhC,EAAuCgqQ,IAAI,CAACvmJ,KAAL,CAAW11F,MAAlD;AACD,GAFM,MAEA;;AAEPi8O,EAAAA,IAAI,CAACY,MAAL,CAAYrzB,SAAZ,CAAsBouC,UAAtB;AACD;;AAED,MAAME,SAAS,GAAG,IAAlB;;AACA,SAASC,UAAT,CAAoB9mR,CAApB,EAAuB6G,CAAvB,EAA0B9J,GAA1B,EAA+B;AAC7B,SAAOiD,CAAC,KAAK6G,CAAN,GAAU,IAAV,GAAiB9J,GAAG,KAAK,MAAR,GAAiBgqR,SAAS,CAAC/mR,CAAD,EAAI6G,CAAJ,CAA1B,GAAmC7G,CAAC,YAAY4uE,IAAb,IAAqB/nE,CAAC,YAAY+nE,IAAlC,GAAyC,CAAC5uE,CAAD,KAAO,CAAC6G,CAAjD,GAAqD,wBAAS7G,CAAT,KAAe,wBAAS6G,CAAT,CAAf,GAA6BhI,IAAI,CAACiT,GAAL,CAAS9R,CAAC,GAAG6G,CAAb,KAAmBggR,SAAhD,GAA4D,CAAC7mR,CAAD,IAAM,CAAC6G,CAAP,IAAY,CAAC,wBAAS7G,CAAT,CAAD,IAAgB,CAAC,wBAAS6G,CAAT,CAA7B,GAA2C7G,CAAC,IAAI6G,CAAhD,GAAoDmgR,WAAW,CAAChnR,CAAD,EAAI6G,CAAJ,CAA3O;AACD;;AACD,SAASkgR,SAAT,CAAmB/mR,CAAnB,EAAsB6G,CAAtB,EAAyB;AACvB,SAAOigR,UAAU,CAACzhB,SAAS,CAACrlQ,CAAD,CAAV,EAAeqlQ,SAAS,CAACx+P,CAAD,CAAxB,CAAjB;AACD;;AAED,SAASmgR,WAAT,CAAqBhnR,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,MAAIs3O,EAAE,GAAGtiP,MAAM,CAACof,IAAP,CAAYjb,CAAZ,CAAT;AAAA,MACIinR,EAAE,GAAGprR,MAAM,CAACof,IAAP,CAAYpU,CAAZ,CADT;AAAA,MAEI9J,GAFJ;AAAA,MAGIjE,CAHJ;AAIA,MAAIqlP,EAAE,CAAC/lP,MAAH,KAAc6uR,EAAE,CAAC7uR,MAArB,EAA6B,OAAO,KAAP;AAC7B+lP,EAAAA,EAAE,CAACr7O,IAAH;AACAmkR,EAAAA,EAAE,CAACnkR,IAAH;;AAEA,OAAKhK,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnC,QAAIqlP,EAAE,CAACrlP,CAAD,CAAF,IAASmuR,EAAE,CAACnuR,CAAD,CAAf,EAAoB,OAAO,KAAP;AACrB;;AAED,OAAKA,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnCiE,IAAAA,GAAG,GAAGohP,EAAE,CAACrlP,CAAD,CAAR;AACA,QAAI,CAACguR,UAAU,CAAC9mR,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,EAAiBA,GAAjB,CAAf,EAAsC,OAAO,KAAP;AACvC;;AAED,SAAO,OAAOiD,CAAP,KAAa,OAAO6G,CAA3B;AACD;;AAED,SAASqgR,cAAT,GAA0B;AACxBhc,EAAAA,cAAc;AACd3H,EAAAA,kBAAkB;AACnB;;;;;;;;;;;;;;AC7iKD;;AACA;;AACA;;AAEA,MAAM4jB,GAAG,GAAG,KAAZ;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,OAAO,GAAG,UAAhB;AACA,MAAMC,QAAQ,GAAG,WAAjB;AACA,MAAMC,UAAU,GAAG,aAAnB;AACA,MAAMC,WAAW,GAAG,cAApB;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAMn5M,CAAC,GAAG,GAAV;AACA,MAAM+1J,CAAC,GAAG,GAAV;AACA,MAAMqjD,KAAK,GAAG,OAAd;AACA,MAAMC,QAAQ,GAAG,MAAjB;AACA,MAAMC,SAAS,GAAG,OAAlB;AACA,MAAMC,SAAS,GAAG,OAAlB;AACA,MAAMC,SAAS,GAAG,OAAlB;AACA,MAAMC,UAAU,GAAG,QAAnB;AACA,MAAMC,SAAS,GAAG,YAAlB;AACA,MAAMC,SAAS,GAAG,YAAlB;AACA,MAAMC,QAAQ,GAAG,WAAjB;AACA,MAAMC,SAAS,GAAG,eAAlB;AACA,MAAMC,SAAS,GAAG,eAAlB;AACA,MAAMC,QAAQ,GAAG,cAAjB;AACA,MAAMC,OAAO,GAAG,SAAhB;AACA,MAAMC,OAAO,GAAG,QAAhB;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAMC,IAAI,GAAG,OAAb;AACA,MAAMC,IAAI,GAAG,OAAb;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAM37E,IAAI,GAAG,MAAb;AACA,MAAM47E,GAAG,GAAG,KAAZ;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,GAAG,GAAG,KAAZ;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,KAAT,CAAeltR,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASktR,KAAT,EAAgBtoD,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMgwD,IAAI,GAAGhwD,KAAK,CAAC8C,QAAnB;AAAA,UACM4uC,IAAI,GAAGvrP,CAAC,CAACurP,IADf;AAAA,UAEMjyP,IAAI,GAAGiyP,IAAI,CAAC0I,QAFlB;AAAA,UAGM1vJ,KAAK,GAAG+zJ,sBAAMh/P,IAAN,CAHd;AAAA,UAIM64P,KAAK,GAAG5tJ,KAAK,CAAC4tJ,KAJpB;AAKA,QAAI2X,UAAU,GAAGve,IAAI,CAACY,MAAtB;AAAA,QACI4d,OADJ;;AAGA,QAAIxlK,KAAK,CAAC8tJ,MAAV,EAAkB;AAChB;AACA,UAAI9G,IAAI,CAACh3J,KAAL,CAAW57G,MAAf,EAAuBkxR,IAAI,CAAC3N,KAAL,CAAW3Q,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAX;AACvBu1K,MAAAA,UAAU,GAAGvR,SAAS,CAAChN,IAAD,EAAO4G,KAAP,CAAtB;AACA5G,MAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB8jB,IAAI,IAAI;AACzBA,QAAAA,IAAI,CAACkrP,MAAL,CAAYr7D,KAAZ,GAAoBmR,KAApB,CAA0B6nE,UAA1B;AACD,OAFD;AAGD,KAPD,MAOO,IAAIxwQ,IAAI,KAAK+uQ,KAAT,IAAkBroQ,CAAC,CAACo6M,QAAF,EAAtB,EAAoC;AACzC;AACA;AACAP,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB18M,IAAI,IAAI4oQ,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX,CAA/B;AACA6oQ,MAAAA,UAAU,CAACh5E,KAAX;AACAy6D,MAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB8jB,IAAI,IAAI6oQ,UAAU,CAAC7nE,KAAX,CAAiBs2D,SAAS,CAACt3P,IAAD,EAAOkxP,KAAP,CAA1B,CAA3B,EALyC,CAK6B;;AAEtE,cAAQ5G,IAAI,CAAC0N,IAAb;AACE,aAAKqP,QAAL;AACA,aAAKI,UAAL;AACA,aAAKH,SAAL;AACE1uD,UAAAA,KAAK,CAACJ,MAAN;AAJJ;AAMD,KAbM,MAaA;AACL;AACAswD,MAAAA,OAAO,GAAGlwD,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC6D,GAApB,CAAV;AACA7D,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBj8B,IAAI,IAAI;AAC7B6oQ,QAAAA,UAAU,CAAC7nE,KAAX,CAAiBs2D,SAAS,CAACt3P,IAAD,EAAOkxP,KAAP,CAA1B;AACD,OAFD;AAGAt4C,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB18M,IAAI,IAAI;AAC7B8oQ,QAAAA,OAAO,GAAGA,OAAO,IAAID,UAAU,CAAC7d,UAAX,CAAsBhrP,IAAI,CAACkrP,MAA3B,CAArB;AACA0d,QAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX;AACA6oQ,QAAAA,UAAU,CAAC7nE,KAAX,CAAiBs2D,SAAS,CAACt3P,IAAD,EAAOkxP,KAAP,CAA1B;AACD,OAJD;;AAMA,UAAI4X,OAAJ,EAAa;AACXD,QAAAA,UAAU,CAACh5E,KAAX;AACAy6D,QAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB8jB,IAAI,IAAI6oQ,UAAU,CAAC7nE,KAAX,CAAiBhhM,IAAI,CAACkrP,MAAtB,CAA3B;AACD;AACF,KA7CiB,CA6ChB;;;AAGF,mCAAUZ,IAAV;AACA,WAAO1xC,KAAK,CAACE,QAAN,CAAe,QAAf,CAAP;AACD;;AAnDwB,CAA3B;;AAuDA,SAASw+C,SAAT,CAAmBt3P,IAAnB,EAAyBkxP,KAAzB,EAAgC7kE,GAAhC,EAAqC;AACnC,SAAO6kE,KAAK,CAAClxP,IAAI,CAACkrP,MAAL,CAAYr7D,KAAZ,EAAD,EAAsB7vL,IAAtB,EAA4BqsL,GAA5B,CAAZ;AACD;;AAED,MAAM08E,YAAY,GAAG,mBAArB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,UAAT,CAAoBvtR,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,CAArB,EAAwBuE,MAAxB;AACD;;AACDutR,UAAU,CAACzoD,UAAX,GAAwB;AACtB,UAAQ,YADc;AAEtB,cAAY;AACV,gBAAY;AADF,GAFU;AAKtB,YAAU,CAAC;AACT,YAAQ,IADC;AAET,YAAQ,QAFC;AAGT,gBAAY;AAHH,GAAD;AALY,CAAxB;AAWA,wBAASyoD,UAAT,EAAqB3oD,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM56N,OAAO,GAAGirR,UAAU,CAACrwD,KAAK,CAAC8C,QAAP,CAA1B;AAAA,UACMgM,EAAE,GAAG3oN,CAAC,CAAC2oN,EADb;AAEA,QAAIr8N,EAAE,GAAGrN,OAAO,CAAC5C,KAAjB;AACAw9N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAIA,CAAC,CAAC4rO,EAAD,CAAD,GAAQ5rO,CAAC,CAAC4rO,EAAD,CAAD,IAAS,EAAEr8N,EAA/C;AACArN,IAAAA,OAAO,CAACjD,GAAR,CAAY,KAAKK,KAAL,GAAaiQ,EAAzB;AACA,WAAOutN,KAAP;AACD;;AAR6B,CAAhC;;AAYA,SAASqwD,UAAT,CAAoBL,IAApB,EAA0B;AACxB,SAAOA,IAAI,CAACM,QAAL,CAAcH,YAAd,MAAgCH,IAAI,CAACM,QAAL,CAAcH,YAAd,IAA8BH,IAAI,CAAC7vQ,GAAL,CAAS,CAAT,CAA9D,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASowQ,IAAT,CAAc1tR,MAAd,EAAsB;AACpB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAAS0tR,IAAT,EAAe9oD,uBAAf,EAA0B;AACxBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI0xC,IAAI,GAAG,KAAKlvQ,KAAhB,CADkB,CACK;;AAEvB,QAAI,CAACkvQ,IAAL,EAAW;AACTA,MAAAA,IAAI,GAAG1xC,KAAK,CAAC8C,QAAN,CAAe0tD,UAAf,GAA4B9e,IAA5B,CAAiCvrP,CAAC,CAACk5P,OAAnC,EAA4C7U,MAAM,CAACrkP,CAAD,CAAlD,EAAuDA,CAAC,CAAC7gB,KAAzD,CAAP;AACAosQ,MAAAA,IAAI,CAACvmJ,KAAL,CAAWqmD,OAAX,GAAqBrrJ,CAAC,CAACqrJ,OAAvB;AACA,UAAI,CAACrrJ,CAAC,CAACqrJ,OAAF,CAAUrmD,KAAf,EAAsBhlG,CAAC,CAACqrJ,OAAF,CAAUrmD,KAAV,GAAkBumJ,IAAI,CAACvmJ,KAAvB;AACtBumJ,MAAAA,IAAI,CAACp8M,MAAL,GAAc,KAAKA,MAAnB,CAJS,CAIkB;;AAE3Bo8M,MAAAA,IAAI,CAAChqO,IAAL,GAAYvhB,CAAC,CAACuhB,IAAd;AACAgqO,MAAAA,IAAI,CAACwI,WAAL,GAAmB/zP,CAAC,CAAC+zP,WAArB;AACA,WAAK13Q,KAAL,GAAakvQ,IAAb;AACD,KAZiB,CAYhB;;;AAGF,UAAM+e,IAAI,GAAG/e,IAAI,CAAC0I,QAAL,KAAkBoU,KAAlB,GAA0Bjc,yBAA1B,GAAsC7yQ,oBAAnD;AACAsgO,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBj8B,IAAI,IAAIqpQ,IAAI,CAACnyR,IAAL,CAAU8oB,IAAV,EAAgBsqP,IAAhB,CAA/B,EAhBkB,CAgBqC;;AAEvD,QAAIvrP,CAAC,CAACo6M,QAAF,CAAW,MAAX,KAAsBp6M,CAAC,CAACo6M,QAAF,CAAW,aAAX,CAA1B,EAAqD;AACnDmxC,MAAAA,IAAI,CAAChqO,IAAL,GAAYvhB,CAAC,CAACuhB,IAAd;AACAgqO,MAAAA,IAAI,CAACwI,WAAL,GAAmB,CAAC,CAAC/zP,CAAC,CAAC+zP,WAAvB;AACAxI,MAAAA,IAAI,CAACwF,MAAL,GAAc,IAAd,CAHmD,CAG/B;;AAEpBl3C,MAAAA,KAAK,CAACJ,MAAN;AACD,KAxBiB,CAwBhB;;;AAGF8xC,IAAAA,IAAI,CAACh3J,KAAL,GAAaslH,KAAK,CAAC1qK,MAAnB;AACA,WAAO0qK,KAAP;AACD;;AA9BuB,CAA1B;;AAkCA,SAASwqC,MAAT,CAAgBrkP,CAAhB,EAAmB;AACjB,QAAM8nB,CAAC,GAAG9nB,CAAC,CAACu8L,MAAZ;AAAA,QACM5+K,CAAC,GAAG3d,CAAC,CAAC+wL,MADZ;AAEA,SAAOjpK,CAAC,IAAIA,CAAC,CAAChnC,IAAF,KAAW,CAAhB,GAAoBgnC,CAAC,CAAC3rC,GAAF,CAAMC,MAAM,CAACof,IAAP,CAAYssB,CAAC,CAAC44J,MAAd,EAAsB,CAAtB,CAAN,CAApB,GAAsD54J,CAAC,IAAInK,CAAL,GAASmK,CAAC,CAACu8N,MAAF,CAAS1mO,CAAT,CAAT,GAAuB,IAApF;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS4sP,OAAT,CAAiB7tR,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,MAAM8tR,OAAO,GAAG;AACdC,EAAAA,MAAM,EAAEl2K,KAAK,IAAIA,KAAK,CAAC//F,MAAN,CAAa,CAACyM,IAAD,EAAO5nB,CAAP,KAAaA,CAAC,GAAG,CAAJ,GAAQ4nB,IAAI,CAAC4uO,OAAL,GAAe,CAAvB,GAA2B,CAArD,CADH;AAEd66B,EAAAA,MAAM,EAAE,CAACn2K,KAAD,EAAQtpG,GAAR,KAAgB;AACtB,QAAI1K,CAAJ;AACA,WAAOg0G,KAAK,CAAC//F,MAAN,CAAa,CAACpN,CAAD,EAAI/N,CAAJ,KAAU,CAACA,CAAD,IAAM,CAACy/O,SAAS,CAACv4O,CAAC,CAAC4rQ,MAAH,EAAW/kQ,CAAC,CAAC+kQ,MAAb,EAAqBlhQ,GAArB,CAAhB,IAA6C1K,CAAC,GAAG6G,CAAJ,EAAO,CAApD,IAAyDA,CAAC,CAACyoP,OAAF,GAAY,CAA5F,CAAP;AACD;AALa,CAAhB,EAMG;AACH;;AAEA,MAAM/W,SAAS,GAAG,CAACv4O,CAAD,EAAI6G,CAAJ,EAAO6D,GAAP,KAAeA,GAAG,GAAG7L,IAAI,CAACK,GAAL,CAAS2H,CAAC,CAAC0kG,EAAF,GAAOvrG,CAAC,CAAC43E,EAAlB,EAAsB53E,CAAC,CAACurG,EAAF,GAAO1kG,CAAC,CAAC+wE,EAA/B,EAAmC/wE,CAAC,CAACykG,EAAF,GAAOtrG,CAAC,CAACwrG,EAA5C,EAAgDxrG,CAAC,CAACsrG,EAAF,GAAOzkG,CAAC,CAAC2kG,EAAzD,CAAvC;;AAEA,MAAM4+K,UAAU,GAAG,CAACp2K,KAAD,EAAQnpG,GAAR,KAAgB;AACjC,OAAK,IAAI/R,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAArB,EAA6B4H,CAAC,GAAGg0G,KAAK,CAAC,CAAD,CAAL,CAAS43J,MAA1C,EAAkD/kQ,CAAvD,EAA0D/N,CAAC,GAAGkO,CAA9D,EAAiEhH,CAAC,GAAG6G,CAAJ,EAAO,EAAE/N,CAA1E,EAA6E;AAC3E,QAAIy/O,SAAS,CAACv4O,CAAD,EAAI6G,CAAC,GAAGmtG,KAAK,CAACl7G,CAAD,CAAL,CAAS8yQ,MAAjB,EAAyB/gQ,GAAzB,CAAb,EAA4C,OAAO,IAAP;AAC7C;AACF,CAJD;;AAMA,MAAMw/Q,SAAS,GAAG3pQ,IAAI,IAAI;AACxB,QAAM7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAf;AACA,SAAO/kQ,CAAC,CAAC7F,KAAF,KAAY,CAAZ,IAAiB6F,CAAC,CAACkoB,MAAF,KAAa,CAArC;AACD,CAHD;;AAKA,MAAMu7P,SAAS,GAAG,CAAC37Q,KAAD,EAAQo8P,MAAR,EAAgBwf,SAAhB,KAA8B;AAC9C,MAAIjwP,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,MACIzzB,CAAC,GAAG,IAAIykQ,sBAAJ,EADR;;AAGA,MAAIP,MAAM,KAAKoc,GAAX,IAAkBpc,MAAM,KAAKuc,MAAjC,EAAyC;AACvCzgR,IAAAA,CAAC,CAACpL,GAAF,CAAM6+B,KAAK,CAAC,CAAD,CAAX,EAAgB,CAAC15B,QAAjB,EAA2B05B,KAAK,CAAC,CAAD,CAAhC,EAAqC,CAAC15B,QAAtC;AACD,GAFD,MAEO;AACLiG,IAAAA,CAAC,CAACpL,GAAF,CAAM,CAACmF,QAAP,EAAiB05B,KAAK,CAAC,CAAD,CAAtB,EAA2B,CAAC15B,QAA5B,EAAsC05B,KAAK,CAAC,CAAD,CAA3C;AACD;;AAEDzzB,EAAAA,CAAC,CAAC25K,MAAF,CAAS+pG,SAAS,IAAI,CAAtB;AACA,SAAO7pQ,IAAI,IAAI7Z,CAAC,CAAC4kQ,QAAF,CAAW/qP,IAAI,CAACkrP,MAAhB,CAAf;AACD,CAZD,EAYG;;;AAGH,MAAMpmP,KAAK,GAAGopC,MAAM,IAAI;AACtBA,EAAAA,MAAM,CAAChyD,OAAP,CAAe8jB,IAAI,IAAIA,IAAI,CAAC4uO,OAAL,GAAe,CAAtC;AACA,SAAO1gM,MAAP;AACD,CAHD,EAGG;AACH;;;AAGA,MAAMsqK,MAAM,GAAG,CAACI,KAAD,EAAQ75M,CAAR,KAAc65M,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC,SAApC,CAA7B;;AAEA,wBAASwwD,OAAT,EAAkBjpD,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMj0N,MAAM,GAAG4kR,OAAO,CAACxqQ,CAAC,CAACsqB,MAAH,CAAP,IAAqBkgP,OAAO,CAACC,MAA5C;AAAA,UACMx/Q,GAAG,GAAG+U,CAAC,CAAC+qQ,UAAF,IAAgB,CAD5B;AAEA,QAAI57N,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA7C;AAAA,QACIolD,KADJ;AAAA,QAEIvtF,IAFJ;AAGA,QAAI,CAACmoC,MAAD,IAAW,CAACA,MAAM,CAACx2D,MAAvB,EAA+B;;AAE/B,QAAI,CAACqnB,CAAC,CAACsqB,MAAP,EAAe;AACb;AACA,UAAItqB,CAAC,CAACo6M,QAAF,CAAW,QAAX,CAAJ,EAA0B;AACxBr0M,QAAAA,KAAK,CAACopC,MAAD,CAAL;AACA0qK,QAAAA,KAAK,GAAGJ,MAAM,CAACI,KAAD,EAAQ75M,CAAR,CAAd;AACD;;AAED,aAAO65M,KAAP;AACD,KAhBiB,CAgBhB;;;AAGF1qK,IAAAA,MAAM,GAAGA,MAAM,CAAC36C,MAAP,CAAco2Q,SAAd,CAAT,CAnBkB,CAmBiB;;AAEnC,QAAI,CAACz7N,MAAM,CAACx2D,MAAZ,EAAoB;;AAEpB,QAAIqnB,CAAC,CAAC3c,IAAN,EAAY;AACV8rD,MAAAA,MAAM,GAAGA,MAAM,CAACzsD,KAAP,GAAeW,IAAf,CAAoB2c,CAAC,CAAC3c,IAAtB,CAAT;AACD;;AAEDkxG,IAAAA,KAAK,GAAGxuF,KAAK,CAACopC,MAAD,CAAb;AACA0qK,IAAAA,KAAK,GAAGJ,MAAM,CAACI,KAAD,EAAQ75M,CAAR,CAAd;;AAEA,QAAIu0F,KAAK,CAAC57G,MAAN,IAAgB,CAAhB,IAAqBgyR,UAAU,CAACp2K,KAAD,EAAQtpG,GAAR,CAAnC,EAAiD;AAC/C,SAAG;AACDspG,QAAAA,KAAK,GAAG3uG,MAAM,CAAC2uG,KAAD,EAAQtpG,GAAR,CAAd;AACD,OAFD,QAESspG,KAAK,CAAC57G,MAAN,IAAgB,CAAhB,IAAqBgyR,UAAU,CAACp2K,KAAD,EAAQtpG,GAAR,CAFxC;;AAIA,UAAIspG,KAAK,CAAC57G,MAAN,GAAe,CAAf,IAAoB,CAAC,oBAAKw2D,MAAL,EAAa0gM,OAAtC,EAA+C;AAC7C,YAAIt7I,KAAK,CAAC57G,MAAN,GAAe,CAAnB,EAAsB,oBAAK47G,KAAL,EAAYs7I,OAAZ,GAAsB,CAAtB;AACtB,4BAAK1gM,MAAL,EAAa0gM,OAAb,GAAuB,CAAvB;AACD;AACF;;AAED,QAAI7vO,CAAC,CAACgrQ,UAAF,IAAgBhrQ,CAAC,CAACirQ,cAAF,IAAoB,CAAxC,EAA2C;AACzCjkQ,MAAAA,IAAI,GAAG6jQ,SAAS,CAAC7qQ,CAAC,CAACgrQ,UAAH,EAAehrQ,CAAC,CAACkrQ,WAAjB,EAA8B,CAAClrQ,CAAC,CAACirQ,cAAjC,CAAhB;AACA97N,MAAAA,MAAM,CAAChyD,OAAP,CAAe8jB,IAAI,IAAI;AACrB,YAAI,CAAC+F,IAAI,CAAC/F,IAAD,CAAT,EAAiBA,IAAI,CAAC4uO,OAAL,GAAe,CAAf;AAClB,OAFD;AAGD,KA9CiB,CA8ChB;;;AAGF,UAAMsc,MAAM,GAAG53J,KAAK,CAAC,CAAD,CAAL,CAASg3J,IAAT,CAAcY,MAAd,CAAqBr7D,KAArB,EAAf;AACA3hJ,IAAAA,MAAM,CAAChyD,OAAP,CAAe8jB,IAAI,IAAI;AACrB,UAAIA,IAAI,CAAC4uO,OAAT,EAAkBsc,MAAM,CAAClqD,KAAP,CAAahhM,IAAI,CAACkrP,MAAlB;AACnB,KAFD;AAGA,WAAOtyC,KAAP;AACD;;AAvD0B,CAA7B;AA2DA;AACA;AACA;AACA;;AAEA,SAASsxD,MAAT,CAAgBzuR,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASyuR,MAAT,EAAiB7pD,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMgwD,IAAI,GAAGhwD,KAAK,CAAC8C,QAAnB;AACA9C,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACiE,GAAlB,EAAuB78M,IAAI,IAAI4oQ,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX,CAA/B,EAFkB,CAEgC;;AAElD,QAAI44M,KAAK,CAAC1iL,MAAN,IAAgB0iL,KAAK,CAAC1iL,MAAN,CAAa,QAAb,CAApB,EAA4C;AAC1C,YAAMl2B,IAAI,GAAG44M,KAAK,CAAC1qK,MAAN,IAAgB0qK,KAAK,CAAC1qK,MAAN,CAAa,CAAb,CAA7B;AACA,UAAIluC,IAAJ,EAAUA,IAAI,CAACsqP,IAAL,CAAUwF,MAAV,GAAmB,IAAnB;AACX;AACF;;AATyB,CAA5B;AAaA,MAAM4G,UAAU,GAAG,IAAI9L,sBAAJ,EAAnB;;AACA,SAAS7vQ,GAAT,CAAailB,IAAb,EAAmB2vL,QAAnB,EAA6Bv0M,KAA7B,EAAoC;AAClC,SAAO4kB,IAAI,CAAC2vL,QAAD,CAAJ,KAAmBv0M,KAAnB,GAA2B,CAA3B,IAAgC4kB,IAAI,CAAC2vL,QAAD,CAAJ,GAAiBv0M,KAAjB,EAAwB,CAAxD,CAAP;AACD;;AAED,SAAS+uR,OAAT,CAAiB7f,IAAjB,EAAuB;AACrB,MAAID,MAAM,GAAGC,IAAI,CAACh3J,KAAL,CAAW,CAAX,EAAc+2J,MAA3B;AACA,SAAOA,MAAM,KAAKqc,IAAX,IAAmBrc,MAAM,KAAKsc,KAArC;AACD;;AAED,SAASyD,WAAT,CAAqBjzD,KAArB,EAA4B;AAC1B,MAAIj5N,KAAK,GAAG,CAACi5N,KAAK,CAACkzD,IAAnB;AACA,SAAO,CAAClzD,KAAK,CAAC/Y,KAAN,GAAclgN,KAAK,EAAnB,GAAwB,CAAC,CAA1B,EAA6B;AACpCi5N,EAAAA,KAAK,CAAC1qI,MAAN,GAAevuF,KAAK,EAApB,GAAyB,CAAC,CADnB,EACsB;AAC7BA,EAAAA,KAAK,GAAG,CAACi5N,KAAK,CAAC3pB,MAFR,CAEe;AAFf,GAAP;AAID;;AAED,SAAS88E,UAAT,CAAoB1B,IAApB,EAA0BjnR,IAA1B,EAAgCrB,KAAhC,EAAuC+tB,MAAvC,EAA+C;AAC7C,MAAIrO,IAAI,GAAGre,IAAI,CAAC2xG,KAAL,CAAW,CAAX,CAAX;AAAA,MACI6jH,KAAK,GAAGn3M,IAAI,CAACm3M,KADjB;AAAA,MAEIppI,KAAK,GAAG/tE,IAAI,CAAC64L,SAAL,IAAkB,IAAlB,GAAyB74L,IAAI,CAAC64L,SAA9B,GAA0C,GAFtD;AAAA,MAGIwxD,MAAM,GAAGrqP,IAAI,CAACqqP,MAHlB;AAAA,MAIIp9P,OAAO,GAAGm9Q,WAAW,CAACjzD,KAAD,CAJzB;AAAA,MAKIv9L,KAAK,GAAG5Z,IAAI,CAAC4Z,KALjB;AAAA,MAMI70B,MAAM,GAAGib,IAAI,CAACjb,MANlB;AAAA,MAOI8tL,QAAQ,GAAG7yK,IAAI,CAAC6yK,QAPpB;AAAA,MAQI03F,SAAS,GAAGvqQ,IAAI,CAACuqQ,SARrB;AAAA,MASIC,SAAS,GAAGxqQ,IAAI,CAACwqQ,SATrB;AAAA,MAUI9xR,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,IAAesnB,IAAI,CAACszF,KAAL,CAAWrmG,OAAO,CAAC,CAAD,CAAlB,EAAuBqmG,KAAvB,CAA6B,CAA7B,CAV3B;AAAA,MAWIm3K,YAAY,GAAGzqQ,IAAI,CAACyqQ,YAXxB;AAAA,MAYIvf,MAAM,GAAGlrP,IAAI,CAACkrP,MAZlB;AAAA,MAaIwf,EAAE,GAAGhyR,KAAK,IAAI,qCAAgBA,KAAhB,CAblB;AAAA,MAcI6F,CAAC,GAAG,CAdR;AAAA,MAeIue,CAAC,GAAG,CAfR;AAAA,MAgBI1kB,CAhBJ;AAAA,MAiBIwD,CAjBJ;AAkBA86Q,EAAAA,UAAU,CAAC7mE,KAAX,GAAmBmR,KAAnB,CAAyBkqD,MAAzB;AACAA,EAAAA,MAAM,CAACr7D,KAAP;AACA,MAAI,CAACz3M,CAAC,GAAG6U,OAAO,CAAC,CAAD,CAAZ,IAAmB,CAAC,CAAxB,EAA2Bi+P,MAAM,CAAClqD,KAAP,CAAahhM,IAAI,CAACszF,KAAL,CAAWl7G,CAAX,EAAc8yQ,MAA3B;AAC3B,MAAI,CAAC9yQ,CAAC,GAAG6U,OAAO,CAAC,CAAD,CAAZ,IAAmB,CAAC,CAAxB,EAA2Bi+P,MAAM,CAAClqD,KAAP,CAAahhM,IAAI,CAACszF,KAAL,CAAWl7G,CAAX,EAAc8yQ,MAA3B,EAtBkB,CAsBkB;;AAE/D,UAAQb,MAAR;AACE,SAAKoc,GAAL;AACEloR,MAAAA,CAAC,GAAGs0L,QAAQ,IAAI,CAAhB;AACA/1K,MAAAA,CAAC,GAAG,CAAC/X,MAAL;AACAnJ,MAAAA,CAAC,GAAGuC,IAAI,CAACK,GAAL,CAAS+rR,SAAT,EAAoBpsR,IAAI,CAACG,GAAL,CAASksR,SAAT,EAAoB,CAACtf,MAAM,CAACtgK,EAA5B,CAApB,CAAJ;AACAsgK,MAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAACnd,CAAf,EAAkBmd,GAAlB,CAAsB6gB,KAAtB,EAA6B,CAA7B;AACA,UAAIlhC,KAAJ,EAAWiyR,eAAe,CAAC/B,IAAD,EAAOlwR,KAAP,EAAckD,CAAd,EAAiB6uR,YAAjB,EAA+BC,EAA/B,EAAmC,CAAnC,EAAsC,CAAC,CAAvC,EAA0Cxf,MAA1C,CAAf;AACX;;AAEF,SAAKwb,IAAL;AACEnoR,MAAAA,CAAC,GAAG,CAACwG,MAAL;AACA+X,MAAAA,CAAC,GAAG+1K,QAAQ,IAAI,CAAhB;AACAj3L,MAAAA,CAAC,GAAGuC,IAAI,CAACK,GAAL,CAAS+rR,SAAT,EAAoBpsR,IAAI,CAACG,GAAL,CAASksR,SAAT,EAAoB,CAACtf,MAAM,CAACrgK,EAA5B,CAApB,CAAJ;AACAqgK,MAAAA,MAAM,CAACnyP,GAAP,CAAW,CAACnd,CAAZ,EAAe,CAAf,EAAkBmd,GAAlB,CAAsB,CAAtB,EAAyB6gB,KAAzB;AACA,UAAIlhC,KAAJ,EAAWiyR,eAAe,CAAC/B,IAAD,EAAOlwR,KAAP,EAAckD,CAAd,EAAiB6uR,YAAjB,EAA+BC,EAA/B,EAAmC,CAAnC,EAAsC,CAAC,CAAvC,EAA0Cxf,MAA1C,CAAf;AACX;;AAEF,SAAKyb,KAAL;AACEpoR,MAAAA,CAAC,GAAG+B,KAAK,GAAGyE,MAAZ;AACA+X,MAAAA,CAAC,GAAG+1K,QAAQ,IAAI,CAAhB;AACAj3L,MAAAA,CAAC,GAAGuC,IAAI,CAACK,GAAL,CAAS+rR,SAAT,EAAoBpsR,IAAI,CAACG,GAAL,CAASksR,SAAT,EAAoBtf,MAAM,CAACh0L,EAA3B,CAApB,CAAJ;AACAg0L,MAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBA,GAAjB,CAAqBnd,CAArB,EAAwBg+B,KAAxB;AACA,UAAIlhC,KAAJ,EAAWiyR,eAAe,CAAC/B,IAAD,EAAOlwR,KAAP,EAAckD,CAAd,EAAiB6uR,YAAjB,EAA+BC,EAA/B,EAAmC,CAAnC,EAAsC,CAAtC,EAAyCxf,MAAzC,CAAf;AACX;;AAEF,SAAK0b,MAAL;AACEroR,MAAAA,CAAC,GAAGs0L,QAAQ,IAAI,CAAhB;AACA/1K,MAAAA,CAAC,GAAGuR,MAAM,GAAGtpB,MAAb;AACAnJ,MAAAA,CAAC,GAAGuC,IAAI,CAACK,GAAL,CAAS+rR,SAAT,EAAoBpsR,IAAI,CAACG,GAAL,CAASksR,SAAT,EAAoBtf,MAAM,CAACpgK,EAA3B,CAApB,CAAJ;AACAogK,MAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBA,GAAjB,CAAqB6gB,KAArB,EAA4Bh+B,CAA5B;AACA,UAAIlD,KAAJ,EAAWiyR,eAAe,CAAC/B,IAAD,EAAOlwR,KAAP,EAAckD,CAAd,EAAiB6uR,YAAjB,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwCvf,MAAxC,CAAf;AACX;;AAEF;AACE3sQ,MAAAA,CAAC,GAAGyhB,IAAI,CAACzhB,CAAT;AACAue,MAAAA,CAAC,GAAGkD,IAAI,CAAClD,CAAT;AAnCJ,GAxB6C,CA4D3C;;;AAGF,mCAAYouP,MAAM,CAACryD,SAAP,CAAiBt6M,CAAjB,EAAoBue,CAApB,CAAZ,EAAoCkD,IAApC;;AAEA,MAAIjlB,GAAG,CAACilB,IAAD,EAAO,GAAP,EAAYzhB,CAAC,GAAGwvF,KAAhB,CAAH,GAA4BhzF,GAAG,CAACilB,IAAD,EAAO,GAAP,EAAYlD,CAAC,GAAGixE,KAAhB,CAAnC,EAA2D;AACzD/tE,IAAAA,IAAI,CAACkrP,MAAL,GAAcwL,UAAd;AACAkS,IAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX;AACAA,IAAAA,IAAI,CAACkrP,MAAL,GAAcA,MAAd;AACA0d,IAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX;AACD;;AAED,SAAOA,IAAI,CAACsqP,IAAL,CAAUY,MAAV,CAAiBr7D,KAAjB,GAAyBmR,KAAzB,CAA+BkqD,MAA/B,CAAP;AACD;;AAED,SAASyf,eAAT,CAAyB/B,IAAzB,EAA+BlwR,KAA/B,EAAsCqM,MAAtC,EAA8CoF,GAA9C,EAAmDugR,EAAnD,EAAuDP,OAAvD,EAAgEt5Q,IAAhE,EAAsEq6P,MAAtE,EAA8E;AAC5E,QAAM/kQ,CAAC,GAAGzN,KAAK,CAACwyQ,MAAhB;;AAEA,MAAIxyQ,KAAK,CAACkyR,IAAV,EAAgB;AACd,UAAMtgR,CAAC,GAAGuG,IAAI,IAAI9L,MAAM,GAAG2lR,EAAT,GAAcvgR,GAAlB,CAAd;AACA,QAAI+Z,EAAE,GAAG,CAAT;AAAA,QACIhH,EAAE,GAAG,CADT;AAEA0rQ,IAAAA,IAAI,CAAC3N,KAAL,CAAWviR,KAAX;AACAyxR,IAAAA,OAAO,GAAGjmQ,EAAE,GAAG,CAACxrB,KAAK,CAAC6F,CAAN,IAAW,CAAZ,KAAkB7F,KAAK,CAAC6F,CAAN,GAAU+L,CAA5B,CAAR,GAAyC4S,EAAE,GAAG,CAACxkB,KAAK,CAACokB,CAAN,IAAW,CAAZ,KAAkBpkB,KAAK,CAACokB,CAAN,GAAUxS,CAA5B,CAArD;AACA5R,IAAAA,KAAK,CAAC4xQ,IAAN,CAAWY,MAAX,CAAkBr7D,KAAlB,GAA0BmR,KAA1B,CAAgC76M,CAAC,CAAC0yM,SAAF,CAAY,CAAC30L,EAAb,EAAiB,CAAChH,EAAlB,CAAhC;AACA0rQ,IAAAA,IAAI,CAAC3N,KAAL,CAAWviR,KAAX;AACD;;AAEDwyQ,EAAAA,MAAM,CAAClqD,KAAP,CAAa76M,CAAb;AACD;;AAED,MAAM7H,GAAG,GAAG,CAACgB,CAAD,EAAI6G,CAAJ,KAAUhI,IAAI,CAAC+H,KAAL,CAAW/H,IAAI,CAACG,GAAL,CAASgB,CAAT,EAAY6G,CAAZ,CAAX,CAAtB;;AAEA,MAAM3H,GAAG,GAAG,CAACc,CAAD,EAAI6G,CAAJ,KAAUhI,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACK,GAAL,CAASc,CAAT,EAAY6G,CAAZ,CAAV,CAAtB;;AAEA,SAAS0kR,gBAAT,CAA0B9mK,KAA1B,EAAiC;AAC/B,MAAIu3F,MAAM,GAAGv3F,KAAK,CAACzQ,KAAnB;AAAA,MACIhtG,CAAC,GAAGg1M,MAAM,CAAC5jN,MADf;AAAA,MAEIU,CAAC,GAAG,CAFR;AAAA,MAGIkyQ,IAHJ;AAAA,MAIIh3J,KAJJ;AAKA,QAAMw3K,KAAK,GAAG;AACZ/5I,IAAAA,KAAK,EAAE,EADK;AAEZg6I,IAAAA,UAAU,EAAE,EAFA;AAGZC,IAAAA,UAAU,EAAE,EAHA;AAIZC,IAAAA,UAAU,EAAE,EAJA;AAKZC,IAAAA,UAAU,EAAE,EALA;AAMZC,IAAAA,QAAQ,EAAE,IANE;AAOZC,IAAAA,QAAQ,EAAE;AAPE,GAAd,CAN+B,CAc5B;;AAEH,SAAOhzR,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkyQ,IAAAA,IAAI,GAAGhvD,MAAM,CAACljN,CAAD,CAAb;AACAk7G,IAAAA,KAAK,GAAGg3J,IAAI,CAACh3J,KAAb;;AAEA,QAAIg3J,IAAI,CAAC0I,QAAL,KAAkBoU,KAAtB,EAA6B;AAC3B,cAAQ9c,IAAI,CAAC0N,IAAb;AACE,aAAKqP,QAAL;AACA,aAAKI,UAAL;AACA,aAAKH,SAAL;AACE;;AAEF,aAAKI,SAAL;AACEoD,UAAAA,KAAK,CAACC,UAAN,CAAiB1yR,IAAjB,CAAsB,GAAGi7G,KAAzB;AACA;;AAEF,aAAKq0K,SAAL;AACEmD,UAAAA,KAAK,CAACE,UAAN,CAAiB3yR,IAAjB,CAAsB,GAAGi7G,KAAzB;AACA;;AAEF,aAAKu0K,SAAL;AACEiD,UAAAA,KAAK,CAACG,UAAN,CAAiB5yR,IAAjB,CAAsB,GAAGi7G,KAAzB;AACA;;AAEF,aAAKw0K,SAAL;AACEgD,UAAAA,KAAK,CAACI,UAAN,CAAiB7yR,IAAjB,CAAsB,GAAGi7G,KAAzB;AACA;;AAEF,aAAKs0K,QAAL;AACEkD,UAAAA,KAAK,CAACK,QAAN,GAAiB73K,KAAK,CAAC,CAAD,CAAtB;AACA;;AAEF,aAAKy0K,QAAL;AACE+C,UAAAA,KAAK,CAACM,QAAN,GAAiB93K,KAAK,CAAC,CAAD,CAAtB;AACA;;AAEF;AACEw3K,UAAAA,KAAK,CAAC/5I,KAAN,CAAY14I,IAAZ,CAAiB,GAAGi7G,KAApB;AA/BJ;AAiCD;AACF;;AAED,SAAOw3K,KAAP;AACD;;AAED,SAASO,SAAT,CAAmBrrQ,IAAnB,EAAyB;AACvB,SAAO,IAAI4qP,sBAAJ,GAAa7vQ,GAAb,CAAiB,CAAjB,EAAoB,CAApB,EAAuBilB,IAAI,CAAC1f,KAAL,IAAc,CAArC,EAAwC0f,IAAI,CAACqO,MAAL,IAAe,CAAvD,CAAP;AACD;;AAED,SAASi9P,QAAT,CAAkBtrQ,IAAlB,EAAwB;AACtB,QAAM7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAL,CAAYl+P,KAAZ,EAAV;AACA,SAAO7G,CAAC,CAAComM,KAAF,KAAYpmM,CAAC,CAACpL,GAAF,CAAM,CAAN,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,CAAZ,GAAgCoL,CAAC,CAAC0yM,SAAF,CAAY,EAAE74L,IAAI,CAACzhB,CAAL,IAAU,CAAZ,CAAZ,EAA4B,EAAEyhB,IAAI,CAAClD,CAAL,IAAU,CAAZ,CAA5B,CAAvC;AACD;;AAED,SAAS5hB,GAAT,CAAamxM,GAAb,EAAkBhwM,GAAlB,EAAuB4I,CAAvB,EAA0B;AACxB,QAAMqF,CAAC,GAAG,wBAAS+hM,GAAT,IAAgBA,GAAG,CAAChwM,GAAD,CAAnB,GAA2BgwM,GAArC;AACA,SAAO/hM,CAAC,IAAI,IAAL,GAAYA,CAAZ,GAAgBrF,CAAC,KAAKqoH,SAAN,GAAkBroH,CAAlB,GAAsB,CAA7C;AACD;;AAED,SAASsmR,WAAT,CAAqBjhR,CAArB,EAAwB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQnM,IAAI,CAACoC,IAAL,CAAU,CAAC+J,CAAX,CAAR,GAAwB,CAA/B;AACD;;AAED,SAASkhR,UAAT,CAAoB5C,IAApB,EAA0BttE,MAA1B,EAAkCjP,GAAlC,EAAuC;AACrC,MAAI4uE,KAAK,GAAG,CAAC5uE,GAAG,CAACo/E,OAAjB;AAAA,MACInyE,IAAI,GAAGjN,GAAG,CAAC6+D,MAAJ,KAAesd,KAAf,GAAuB6C,SAAvB,GAAmCC,QAD9C;AAAA,MAEIpgB,MAAM,GAAGwL,UAAU,CAAC37Q,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,CAFb;AAAA,MAGI2wR,QAAQ,GAAGxwR,GAAG,CAACmxM,GAAG,CAACsE,KAAL,EAAY83E,MAAZ,CAHlB;AAAA,MAIIkD,QAAQ,GAAGzwR,GAAG,CAACmxM,GAAG,CAACsE,KAAL,EAAY+3E,GAAZ,CAJlB;AAAA,MAKIkD,MAAM,GAAG1wR,GAAG,CAACmxM,GAAG,CAACx3L,OAAL,EAAc4zQ,MAAd,CALhB;AAAA,MAMIoD,MAAM,GAAG3wR,GAAG,CAACmxM,GAAG,CAACx3L,OAAL,EAAc6zQ,GAAd,CANhB;AAAA,MAOIoD,KAAK,GAAGz/E,GAAG,CAACzgM,OAAJ,IAAe0vM,MAAM,CAAC5jN,MAPlC;AAAA,MAQIq0R,KAAK,GAAGD,KAAK,IAAI,CAAT,GAAa,CAAb,GAAiB3tR,IAAI,CAACoC,IAAL,CAAU+6M,MAAM,CAAC5jN,MAAP,GAAgBo0R,KAA1B,CAR7B;AAAA,MASIxlR,CAAC,GAAGg1M,MAAM,CAAC5jN,MATf;AAAA,MAUIk8Q,OAAO,GAAG17Q,KAAK,CAACoO,CAAD,CAVnB;AAAA,MAWI0lR,OAAO,GAAG9zR,KAAK,CAAC4zR,KAAD,CAXnB;AAAA,MAYIzkP,IAAI,GAAG,CAZX;AAAA,MAaIwsO,OAAO,GAAG37Q,KAAK,CAACoO,CAAD,CAbnB;AAAA,MAcI2lR,OAAO,GAAG/zR,KAAK,CAAC6zR,KAAD,CAdnB;AAAA,MAeIG,IAAI,GAAG,CAfX;AAAA,MAgBIhoQ,EAAE,GAAGhsB,KAAK,CAACoO,CAAD,CAhBd;AAAA,MAiBI4W,EAAE,GAAGhlB,KAAK,CAACoO,CAAD,CAjBd;AAAA,MAkBIwiC,KAAK,GAAG5wC,KAAK,CAACoO,CAAD,CAlBjB;AAAA,MAmBIupF,CAnBJ;AAAA,MAoBIz3F,CApBJ;AAAA,MAqBIyM,CArBJ;AAAA,MAsBIuB,CAtBJ;AAAA,MAuBID,CAvBJ;AAAA,MAwBI0gC,CAxBJ;AAAA,MAyBIq6M,EAzBJ;AAAA,MA0BIE,EA1BJ;AAAA,MA2BI7iP,CA3BJ;AAAA,MA4BIue,CA5BJ;AAAA,MA6BI/X,MA7BJ;;AA+BA,OAAK3M,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG0zR,KAAhB,EAAuB,EAAE1zR,CAAzB,EAA4B4zR,OAAO,CAAC5zR,CAAD,CAAP,GAAa,CAAb;;AAE5B,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2zR,KAAhB,EAAuB,EAAE3zR,CAAzB,EAA4B6zR,OAAO,CAAC7zR,CAAD,CAAP,GAAa,CAAb,CAlCS,CAkCO;;;AAG5C,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtByuC,IAAAA,CAAC,GAAGy0K,MAAM,CAACljN,CAAD,CAAV;AACA+N,IAAAA,CAAC,GAAG2iC,KAAK,CAAC1wC,CAAD,CAAL,GAAWkhN,IAAI,CAACzyK,CAAD,CAAnB;AACAA,IAAAA,CAAC,CAACtoC,CAAF,GAAMsoC,CAAC,CAACtoC,CAAF,IAAO,CAAb;AACA2lB,IAAAA,EAAE,CAAC9rB,CAAD,CAAF,GAAQ,CAAR;AACAyuC,IAAAA,CAAC,CAAC/pB,CAAF,GAAM+pB,CAAC,CAAC/pB,CAAF,IAAO,CAAb;AACAI,IAAAA,EAAE,CAAC9kB,CAAD,CAAF,GAAQ,CAAR;AACAyM,IAAAA,CAAC,GAAGzM,CAAC,GAAG0zR,KAAR;AACA1lR,IAAAA,CAAC,GAAG,CAAC,EAAEhO,CAAC,GAAG0zR,KAAN,CAAL;AACAzkP,IAAAA,IAAI,GAAGlpC,IAAI,CAACK,GAAL,CAAS6oC,IAAT,EAAe65M,EAAE,GAAG/iP,IAAI,CAACoC,IAAL,CAAU4F,CAAC,CAAC+wE,EAAZ,CAApB,CAAP;AACAg1M,IAAAA,IAAI,GAAG/tR,IAAI,CAACK,GAAL,CAAS0tR,IAAT,EAAe9qC,EAAE,GAAGjjP,IAAI,CAACoC,IAAL,CAAU4F,CAAC,CAAC2kG,EAAZ,CAApB,CAAP;AACAkhL,IAAAA,OAAO,CAACnnR,CAAD,CAAP,GAAa1G,IAAI,CAACK,GAAL,CAASwtR,OAAO,CAACnnR,CAAD,CAAhB,EAAqBq8O,EAArB,CAAb;AACA+qC,IAAAA,OAAO,CAAC7lR,CAAD,CAAP,GAAajI,IAAI,CAACK,GAAL,CAASytR,OAAO,CAAC7lR,CAAD,CAAhB,EAAqBg7O,EAArB,CAAb;AACAwyB,IAAAA,OAAO,CAACx7Q,CAAD,CAAP,GAAawzR,MAAM,GAAGL,WAAW,CAACplR,CAAC,CAAC0kG,EAAH,CAAjC;AACAgpK,IAAAA,OAAO,CAACz7Q,CAAD,CAAP,GAAayzR,MAAM,GAAGN,WAAW,CAACplR,CAAC,CAACykG,EAAH,CAAjC;AACA,QAAIqwK,KAAJ,EAAW2N,IAAI,CAAC3N,KAAL,CAAW3/D,MAAM,CAACljN,CAAD,CAAjB;AACZ,GArDoC,CAqDnC;;;AAGF,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,QAAIA,CAAC,GAAG0zR,KAAJ,KAAc,CAAlB,EAAqBlY,OAAO,CAACx7Q,CAAD,CAAP,GAAa,CAAb;AACrB,QAAIA,CAAC,GAAG0zR,KAAR,EAAejY,OAAO,CAACz7Q,CAAD,CAAP,GAAa,CAAb;AAChB,GA3DoC,CA2DnC;;;AAGF,MAAIszR,QAAQ,KAAKnD,IAAjB,EAAuB;AACrB,SAAK1jR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGinR,KAAhB,EAAuB,EAAEjnR,CAAzB,EAA4B;AAC1B,WAAKE,MAAM,GAAG,CAAT,EAAY3M,CAAC,GAAGyM,CAArB,EAAwBzM,CAAC,GAAGkO,CAA5B,EAA+BlO,CAAC,IAAI0zR,KAApC,EAA2C;AACzC,YAAI/mR,MAAM,GAAG6uQ,OAAO,CAACx7Q,CAAD,CAApB,EAAyB2M,MAAM,GAAG6uQ,OAAO,CAACx7Q,CAAD,CAAhB;AAC1B;;AAED,WAAKA,CAAC,GAAGyM,CAAT,EAAYzM,CAAC,GAAGkO,CAAhB,EAAmBlO,CAAC,IAAI0zR,KAAxB,EAA+B;AAC7BlY,QAAAA,OAAO,CAACx7Q,CAAD,CAAP,GAAa2M,MAAM,GAAGinR,OAAO,CAACnnR,CAAC,GAAG,CAAL,CAA7B;AACD;AACF;AACF,GAVD,MAUO,IAAI6mR,QAAQ,KAAKpD,GAAjB,EAAsB;AAC3B,SAAKvjR,MAAM,GAAG,CAAT,EAAY3M,CAAC,GAAG,CAArB,EAAwBA,CAAC,GAAGkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC,UAAIA,CAAC,GAAG0zR,KAAJ,IAAa/mR,MAAM,GAAG6uQ,OAAO,CAACx7Q,CAAD,CAAjC,EAAsC2M,MAAM,GAAG6uQ,OAAO,CAACx7Q,CAAD,CAAhB;AACvC;;AAED,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,UAAIA,CAAC,GAAG0zR,KAAR,EAAelY,OAAO,CAACx7Q,CAAD,CAAP,GAAa2M,MAAM,GAAGsiC,IAAtB;AAChB;AACF,GARM,MAQA;AACL,SAAKqkP,QAAQ,GAAG,KAAX,EAAkB7mR,CAAC,GAAG,CAA3B,EAA8BA,CAAC,GAAGinR,KAAlC,EAAyC,EAAEjnR,CAA3C,EAA8C;AAC5C,WAAKzM,CAAC,GAAGyM,CAAT,EAAYzM,CAAC,GAAGkO,CAAhB,EAAmBlO,CAAC,IAAI0zR,KAAxB,EAA+B;AAC7BlY,QAAAA,OAAO,CAACx7Q,CAAD,CAAP,IAAc4zR,OAAO,CAACnnR,CAAC,GAAG,CAAL,CAArB;AACD;AACF;AACF,GAtFoC,CAsFnC;;;AAGF,MAAI8mR,QAAQ,KAAKpD,IAAjB,EAAuB;AACrB,SAAKniR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2lR,KAAhB,EAAuB,EAAE3lR,CAAzB,EAA4B;AAC1B,WAAKrB,MAAM,GAAG,CAAT,EAAY3M,CAAC,GAAGgO,CAAC,GAAG0lR,KAApB,EAA2Bj8L,CAAC,GAAGz3F,CAAC,GAAG0zR,KAAxC,EAA+C1zR,CAAC,GAAGy3F,CAAnD,EAAsD,EAAEz3F,CAAxD,EAA2D;AACzD,YAAI2M,MAAM,GAAG8uQ,OAAO,CAACz7Q,CAAD,CAApB,EAAyB2M,MAAM,GAAG8uQ,OAAO,CAACz7Q,CAAD,CAAhB;AAC1B;;AAED,WAAKA,CAAC,GAAGgO,CAAC,GAAG0lR,KAAb,EAAoB1zR,CAAC,GAAGy3F,CAAxB,EAA2B,EAAEz3F,CAA7B,EAAgC;AAC9By7Q,QAAAA,OAAO,CAACz7Q,CAAD,CAAP,GAAa2M,MAAM,GAAGknR,OAAO,CAAC7lR,CAAC,GAAG,CAAL,CAA7B;AACD;AACF;AACF,GAVD,MAUO,IAAIulR,QAAQ,KAAKrD,GAAjB,EAAsB;AAC3B,SAAKvjR,MAAM,GAAG,CAAT,EAAY3M,CAAC,GAAG0zR,KAArB,EAA4B1zR,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtC,UAAI2M,MAAM,GAAG8uQ,OAAO,CAACz7Q,CAAD,CAApB,EAAyB2M,MAAM,GAAG8uQ,OAAO,CAACz7Q,CAAD,CAAhB;AAC1B;;AAED,SAAKA,CAAC,GAAG0zR,KAAT,EAAgB1zR,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1By7Q,MAAAA,OAAO,CAACz7Q,CAAD,CAAP,GAAa2M,MAAM,GAAGmnR,IAAtB;AACD;AACF,GARM,MAQA;AACL,SAAKP,QAAQ,GAAG,KAAX,EAAkBvlR,CAAC,GAAG,CAA3B,EAA8BA,CAAC,GAAG2lR,KAAlC,EAAyC,EAAE3lR,CAA3C,EAA8C;AAC5C,WAAKhO,CAAC,GAAGgO,CAAC,GAAG0lR,KAAR,EAAej8L,CAAC,GAAGz3F,CAAC,GAAG0zR,KAA5B,EAAmC1zR,CAAC,GAAGy3F,CAAvC,EAA0C,EAAEz3F,CAA5C,EAA+C;AAC7Cy7Q,QAAAA,OAAO,CAACz7Q,CAAD,CAAP,IAAc6zR,OAAO,CAAC7lR,CAAC,GAAG,CAAL,CAArB;AACD;AACF;AACF,GAjHoC,CAiHnC;;;AAGF,OAAK7H,CAAC,GAAG,CAAJ,EAAOnG,CAAC,GAAG,CAAhB,EAAmBA,CAAC,GAAGkO,CAAvB,EAA0B,EAAElO,CAA5B,EAA+B;AAC7BmG,IAAAA,CAAC,GAAGq1Q,OAAO,CAACx7Q,CAAD,CAAP,IAAcA,CAAC,GAAG0zR,KAAJ,GAAYvtR,CAAZ,GAAgB,CAA9B,CAAJ;AACA2lB,IAAAA,EAAE,CAAC9rB,CAAD,CAAF,IAASmG,CAAC,GAAG+8M,MAAM,CAACljN,CAAD,CAAN,CAAUmG,CAAvB;AACD,GAvHoC,CAuHnC;;;AAGF,OAAKsG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGinR,KAAhB,EAAuB,EAAEjnR,CAAzB,EAA4B;AAC1B,SAAKiY,CAAC,GAAG,CAAJ,EAAO1kB,CAAC,GAAGyM,CAAhB,EAAmBzM,CAAC,GAAGkO,CAAvB,EAA0BlO,CAAC,IAAI0zR,KAA/B,EAAsC;AACpChvQ,MAAAA,CAAC,IAAI+2P,OAAO,CAACz7Q,CAAD,CAAZ;AACA8kB,MAAAA,EAAE,CAAC9kB,CAAD,CAAF,IAAS0kB,CAAC,GAAGw+L,MAAM,CAACljN,CAAD,CAAN,CAAU0kB,CAAvB;AACD;AACF,GA/HoC,CA+HnC;;;AAGF,MAAI4uQ,QAAQ,IAAIxwR,GAAG,CAACmxM,GAAG,CAAC/zC,MAAL,EAAamwH,MAAb,CAAf,IAAuCsD,KAAK,GAAG,CAAnD,EAAsD;AACpD,SAAK3zR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+N,MAAAA,CAAC,GAAGulR,QAAQ,KAAKpD,GAAb,GAAmBjhP,IAAnB,GAA0B2kP,OAAO,CAAC5zR,CAAC,GAAG0zR,KAAL,CAArC;AACAvtR,MAAAA,CAAC,GAAG4H,CAAC,GAAG2iC,KAAK,CAAC1wC,CAAD,CAAL,CAAS8+E,EAAb,GAAkBokI,MAAM,CAACljN,CAAD,CAAN,CAAUmG,CAA5B,GAAgC2lB,EAAE,CAAC9rB,CAAD,CAAtC;AACA,UAAImG,CAAC,GAAG,CAAR,EAAW2lB,EAAE,CAAC9rB,CAAD,CAAF,IAASmG,CAAC,GAAG,CAAb;AACZ;AACF,GAxIoC,CAwInC;;;AAGF,MAAIotR,QAAQ,IAAIzwR,GAAG,CAACmxM,GAAG,CAAC/zC,MAAL,EAAaowH,GAAb,CAAf,IAAoCoD,KAAK,KAAK,CAAlD,EAAqD;AACnD,SAAK1zR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+N,MAAAA,CAAC,GAAGwlR,QAAQ,KAAKrD,GAAb,GAAmB4D,IAAnB,GAA0BD,OAAO,CAAC,CAAC,EAAE7zR,CAAC,GAAG0zR,KAAN,CAAF,CAArC;AACAhvQ,MAAAA,CAAC,GAAG3W,CAAC,GAAG2iC,KAAK,CAAC1wC,CAAD,CAAL,CAAS0yG,EAAb,GAAkBwwG,MAAM,CAACljN,CAAD,CAAN,CAAU0kB,CAA5B,GAAgCI,EAAE,CAAC9kB,CAAD,CAAtC;AACA,UAAI0kB,CAAC,GAAG,CAAR,EAAWI,EAAE,CAAC9kB,CAAD,CAAF,IAAS0kB,CAAC,GAAG,CAAb;AACZ;AACF,GAjJoC,CAiJnC;;;AAGF,OAAK1kB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB8yQ,IAAAA,MAAM,CAAClqD,KAAP,CAAal4K,KAAK,CAAC1wC,CAAD,CAAL,CAASygN,SAAT,CAAmB30L,EAAE,CAAC9rB,CAAD,CAArB,EAA0B8kB,EAAE,CAAC9kB,CAAD,CAA5B,CAAb;AACD;;AAEDmG,EAAAA,CAAC,GAAGrD,GAAG,CAACmxM,GAAG,CAAC8B,MAAL,EAAangI,CAAb,CAAP;AACAlxD,EAAAA,CAAC,GAAG5hB,GAAG,CAACmxM,GAAG,CAAC8B,MAAL,EAAa41B,CAAb,CAAP;;AAEA,UAAQ7oO,GAAG,CAACmxM,GAAG,CAAC8B,MAAL,EAAas6E,MAAb,CAAX;AACE,SAAKtB,GAAL;AACE5oR,MAAAA,CAAC,IAAI2sQ,MAAM,CAAC5qQ,KAAP,EAAL;AACA;;AAEF,SAAK4mR,MAAL;AACE3oR,MAAAA,CAAC,IAAI2sQ,MAAM,CAAC5qQ,KAAP,KAAiB,CAAtB;AANJ;;AASA,UAAQpF,GAAG,CAACmxM,GAAG,CAAC8B,MAAL,EAAau6E,GAAb,CAAX;AACE,SAAKvB,GAAL;AACErqQ,MAAAA,CAAC,IAAIouP,MAAM,CAAC78O,MAAP,EAAL;AACA;;AAEF,SAAK64P,MAAL;AACEpqQ,MAAAA,CAAC,IAAIouP,MAAM,CAAC78O,MAAP,KAAkB,CAAvB;AANJ;;AASA9vB,EAAAA,CAAC,GAAGJ,IAAI,CAACsG,KAAL,CAAWlG,CAAX,CAAJ;AACAue,EAAAA,CAAC,GAAG3e,IAAI,CAACsG,KAAL,CAAWqY,CAAX,CAAJ,CA9KqC,CA8KlB;;AAEnBouP,EAAAA,MAAM,CAACr7D,KAAP;;AAEA,OAAKz3M,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBkjN,IAAAA,MAAM,CAACljN,CAAD,CAAN,CAAUkyQ,IAAV,CAAeY,MAAf,CAAsBr7D,KAAtB;AACD;;AAED,OAAKz3M,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtByuC,IAAAA,CAAC,GAAGy0K,MAAM,CAACljN,CAAD,CAAV;AACAyuC,IAAAA,CAAC,CAACtoC,CAAF,IAAO2lB,EAAE,CAAC9rB,CAAD,CAAF,IAASmG,CAAhB;AACAsoC,IAAAA,CAAC,CAAC/pB,CAAF,IAAOI,EAAE,CAAC9kB,CAAD,CAAF,IAAS0kB,CAAhB;AACAouP,IAAAA,MAAM,CAAClqD,KAAP,CAAan6K,CAAC,CAACyjO,IAAF,CAAOY,MAAP,CAAclqD,KAAd,CAAoBn6K,CAAC,CAACqkO,MAAF,CAASryD,SAAT,CAAmB30L,EAAE,CAAC9rB,CAAD,CAArB,EAA0B8kB,EAAE,CAAC9kB,CAAD,CAA5B,CAApB,CAAb;AACA,QAAI6iR,KAAJ,EAAW2N,IAAI,CAAC3N,KAAL,CAAWp0O,CAAX;AACZ;;AAED,SAAOqkO,MAAP;AACD;;AACD,SAASihB,aAAT,CAAuBvD,IAAvB,EAA6B7kK,KAA7B,EAAoCsoF,GAApC,EAAyC;AACvC,MAAIy+E,KAAK,GAAGD,gBAAgB,CAAC9mK,KAAD,CAA5B;AAAA,MACIu3F,MAAM,GAAGwvE,KAAK,CAAC/5I,KADnB;AAAA,MAEIuoE,IAAI,GAAGjN,GAAG,CAAC6+D,MAAJ,KAAesd,KAAf,GAAuB4D,UAAvB,GAAoCC,SAF/C;AAAA,MAGIjzR,GAAG,GAAGizM,GAAG,CAACtnM,MAHd;AAAA,MAII+mR,KAAK,GAAGz/E,GAAG,CAACzgM,OAAJ,IAAe0vM,MAAM,CAAC5jN,MAJlC;AAAA,MAKIq0R,KAAK,GAAGD,KAAK,IAAI,CAAT,GAAa,CAAb,GAAiB3tR,IAAI,CAACoC,IAAL,CAAU+6M,MAAM,CAAC5jN,MAAP,GAAgBo0R,KAA1B,CAL7B;AAAA,MAMIluH,KAAK,GAAGmuH,KAAK,GAAGD,KANpB;AAAA,MAOIvtR,CAPJ;AAAA,MAQIue,CARJ;AAAA,MASIo6D,EATJ;AAAA,MAUI4zB,EAVJ;AAAA,MAWIqjG,MAXJ;AAAA,MAYI49B,IAZJ;AAAA,MAaIhnO,MAbJ,CADuC,CAc3B;;AAEZ,QAAMmmQ,MAAM,GAAGsgB,UAAU,CAAC5C,IAAD,EAAOttE,MAAP,EAAejP,GAAf,CAAzB;AACA,MAAI6+D,MAAM,CAAC3+D,KAAP,EAAJ,EAAoB2+D,MAAM,CAACnwQ,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAjBmB,CAiBK;AAC5C;AACA;;AAEA,MAAI+vR,KAAK,CAACC,UAAV,EAAsB;AACpBh/C,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACigF,UAAL,EAAiB5D,GAAjB,EAAsB,IAAtB,CAAV;AACAnqR,IAAAA,CAAC,GAAGguR,aAAa,CAAC3D,IAAD,EAAOkC,KAAK,CAACC,UAAb,EAAyBzvE,MAAzB,EAAiCwwE,KAAjC,EAAwCC,KAAxC,EAA+C,CAAC7wR,GAAG,CAAC9B,GAAD,EAAM,WAAN,CAAnD,EAAuEkF,GAAvE,EAA4E,CAA5E,EAA+Eg7M,IAA/E,EAAqF,IAArF,EAA2F,CAA3F,EAA8FwyE,KAA9F,EAAqG,CAArG,EAAwG//C,IAAxG,CAAjB;AACD,GAxBsC,CAwBrC;;;AAGF,MAAI++C,KAAK,CAACG,UAAV,EAAsB;AACpBl/C,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACigF,UAAL,EAAiB7D,MAAjB,EAAyB,IAAzB,CAAV;AACA3rQ,IAAAA,CAAC,GAAGyvQ,aAAa,CAAC3D,IAAD,EAAOkC,KAAK,CAACG,UAAb,EAAyB3vE,MAAzB,EAAiCwwE,KAAjC,EAAwCA,KAAxC,EAA+C,CAAC5wR,GAAG,CAAC9B,GAAD,EAAM,cAAN,CAAnD,EAA0EkF,GAA1E,EAA+E,CAA/E,EAAkFg7M,IAAlF,EAAwF,IAAxF,EAA8F,CAA9F,EAAiG,CAAjG,EAAoGwyE,KAApG,EAA2G//C,IAA3G,CAAjB;AACD,GA9BsC,CA8BrC;;;AAGF,MAAI++C,KAAK,CAACE,UAAV,EAAsB;AACpBj/C,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACmgF,UAAL,EAAiB9D,GAAjB,EAAsB,IAAtB,CAAV;AACAxxM,IAAAA,EAAE,GAAGq1M,aAAa,CAAC3D,IAAD,EAAOkC,KAAK,CAACE,UAAb,EAAyB1vE,MAAzB,EAAiCwwE,KAAjC,EAAwCC,KAAxC,EAA+C7wR,GAAG,CAAC9B,GAAD,EAAM,WAAN,CAAlD,EAAsEoF,GAAtE,EAA2E,CAA3E,EAA8E86M,IAA9E,EAAoF,IAApF,EAA0FwyE,KAAK,GAAG,CAAlG,EAAqGA,KAArG,EAA4G,CAA5G,EAA+G//C,IAA/G,CAAlB;AACD,GApCsC,CAoCrC;;;AAGF,MAAI++C,KAAK,CAACI,UAAV,EAAsB;AACpBn/C,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACmgF,UAAL,EAAiB/D,MAAjB,EAAyB,IAAzB,CAAV;AACA39K,IAAAA,EAAE,GAAGyhL,aAAa,CAAC3D,IAAD,EAAOkC,KAAK,CAACI,UAAb,EAAyB5vE,MAAzB,EAAiCwwE,KAAjC,EAAwCA,KAAxC,EAA+C5wR,GAAG,CAAC9B,GAAD,EAAM,cAAN,CAAlD,EAAyEoF,GAAzE,EAA8E,CAA9E,EAAiF86M,IAAjF,EAAuF,IAAvF,EAA6F17C,KAAK,GAAGkuH,KAArG,EAA4G,CAA5G,EAA+GA,KAA/G,EAAsH//C,IAAtH,CAAlB;AACD,GA1CsC,CA0CrC;;;AAGF,MAAI++C,KAAK,CAACK,QAAV,EAAoB;AAClBh9E,IAAAA,MAAM,GAAGjzM,GAAG,CAACmxM,GAAG,CAACogF,WAAL,EAAkB/D,GAAlB,CAAZ;AACA3jR,IAAAA,MAAM,GAAG7J,GAAG,CAAC9B,GAAD,EAAM,UAAN,CAAZ;AACA2L,IAAAA,MAAM,GAAGopM,MAAM,KAAKg5E,GAAX,GAAiBjwM,EAAE,GAAGnyE,MAAtB,GAA+BxG,CAAC,GAAGwG,MAA5C;AACAgnO,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACqgF,SAAL,EAAgBhE,GAAhB,EAAqB,GAArB,CAAV;AACAiE,IAAAA,WAAW,CAAC/D,IAAD,EAAOkC,KAAK,CAACK,QAAb,EAAuBpmR,MAAvB,EAA+B,CAA/B,EAAkCmmQ,MAAlC,EAA0Cn/B,IAA1C,CAAX;AACD,GAnDsC,CAmDrC;;;AAGF,MAAI++C,KAAK,CAACM,QAAV,EAAoB;AAClBj9E,IAAAA,MAAM,GAAGjzM,GAAG,CAACmxM,GAAG,CAACogF,WAAL,EAAkBhE,MAAlB,CAAZ;AACA1jR,IAAAA,MAAM,GAAG7J,GAAG,CAAC9B,GAAD,EAAM,aAAN,CAAZ;AACA2L,IAAAA,MAAM,GAAGopM,MAAM,KAAKg5E,GAAX,GAAiBr8K,EAAE,GAAG/lG,MAAtB,GAA+B+X,CAAC,GAAG/X,MAA5C;AACAgnO,IAAAA,IAAI,GAAG7wO,GAAG,CAACmxM,GAAG,CAACqgF,SAAL,EAAgBjE,MAAhB,EAAwB,GAAxB,CAAV;AACAkE,IAAAA,WAAW,CAAC/D,IAAD,EAAOkC,KAAK,CAACM,QAAb,EAAuBrmR,MAAvB,EAA+B,CAA/B,EAAkCmmQ,MAAlC,EAA0Cn/B,IAA1C,CAAX;AACD;AACF;;AAED,SAASqgD,UAAT,CAAoBpsQ,IAApB,EAA0B4tG,KAA1B,EAAiC;AAC/B,SAAOA,KAAK,KAAK,IAAV,GAAiB5tG,IAAI,CAACzhB,CAAL,IAAU,CAA3B,GAA+BqvH,KAAK,KAAK,IAAV,GAAiB5tG,IAAI,CAAClD,CAAL,IAAU,CAA3B,GAA+B8wG,KAAK,KAAK,IAAV,GAAiB,CAAC5tG,IAAI,CAACzhB,CAAL,IAAU,CAAX,KAAiByhB,IAAI,CAAC1f,KAAL,IAAc,CAA/B,CAAjB,GAAqDstH,KAAK,KAAK,IAAV,GAAiB,CAAC5tG,IAAI,CAAClD,CAAL,IAAU,CAAX,KAAiBkD,IAAI,CAACqO,MAAL,IAAe,CAAhC,CAAjB,GAAsDi/F,SAAhL;AACD;;AAED,SAAS++J,SAAT,CAAmBrsQ,IAAnB,EAAyB4tG,KAAzB,EAAgC;AAC9B,SAAO5tG,IAAI,CAACkrP,MAAL,CAAYt9I,KAAZ,CAAP;AACD;;AAED,SAAS2+J,aAAT,CAAuB3D,IAAvB,EAA6B95F,OAA7B,EAAsCwsB,MAAtC,EAA8CwwE,KAA9C,EAAqD19M,KAArD,EAA4DrpE,MAA5D,EAAoEokO,GAApE,EAAyEtiC,GAAzE,EAA8EqqE,KAA9E,EAAqF0b,EAArF,EAAyF1oR,KAAzF,EAAgG2F,MAAhG,EAAwGgjC,IAAxG,EAA8Gk/L,IAA9G,EAAoH;AAClH,MAAIzlO,CAAC,GAAGg1M,MAAM,CAAC5jN,MAAf;AAAA,MACIu2E,IAAI,GAAG,CADX;AAAA,MAEIm4J,IAAI,GAAG,CAFX;AAAA,MAGIhuO,CAHJ;AAAA,MAIIiK,CAJJ;AAAA,MAKIqT,CALJ;AAAA,MAMIm6E,CANJ;AAAA,MAOI1pF,CAPJ;AAAA,MAQIw+C,CARJ;AAAA,MASI9d,CATJ;AAAA,MAUItoC,CAVJ;AAAA,MAWIue,CAXJ,CADkH,CAY3G;;AAEP,MAAI,CAACxW,CAAL,EAAQ,OAAO2nE,IAAP,CAd0G,CAc7F;;AAErB,OAAK71E,CAAC,GAAG8L,KAAT,EAAgB9L,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,IAAIyR,MAA5B,EAAoC;AAClC,QAAIyxM,MAAM,CAACljN,CAAD,CAAV,EAAe61E,IAAI,GAAGk7J,GAAG,CAACl7J,IAAD,EAAOijM,KAAK,CAAC51D,MAAM,CAACljN,CAAD,CAAP,EAAYw0R,EAAZ,CAAZ,CAAV;AAChB,GAlBiH,CAkBhH;;;AAGF,MAAI,CAAC99F,OAAO,CAACp3L,MAAb,EAAqB,OAAOu2E,IAAP,CArB6F,CAqBhF;;AAElC,MAAI6gH,OAAO,CAACp3L,MAAR,GAAiB02E,KAArB,EAA4B;AAC1Bw6M,IAAAA,IAAI,CAACpuR,IAAL,CAAU,gCAAgC4zE,KAA1C;AACA0gH,IAAAA,OAAO,GAAGA,OAAO,CAACrtL,KAAR,CAAc,CAAd,EAAiB2sE,KAAjB,CAAV;AACD,GA1BiH,CA0BhH;;;AAGFH,EAAAA,IAAI,IAAIlpE,MAAR,CA7BkH,CA6BlG;;AAEhB,OAAK1C,CAAC,GAAG,CAAJ,EAAOwtF,CAAC,GAAGi/F,OAAO,CAACp3L,MAAxB,EAAgC2K,CAAC,GAAGwtF,CAApC,EAAuC,EAAExtF,CAAzC,EAA4C;AAC1CumR,IAAAA,IAAI,CAAC3N,KAAL,CAAWnsF,OAAO,CAACzsL,CAAD,CAAlB;AACAysL,IAAAA,OAAO,CAACzsL,CAAD,CAAP,CAAWioQ,IAAX,CAAgBY,MAAhB,CAAuBr7D,KAAvB;AACD,GAlCiH,CAkChH;;;AAGF,OAAKz3M,CAAC,GAAG8L,KAAJ,EAAW7B,CAAC,GAAG,CAAf,EAAkBwtF,CAAC,GAAGi/F,OAAO,CAACp3L,MAAnC,EAA2C2K,CAAC,GAAGwtF,CAA/C,EAAkD,EAAExtF,CAAF,EAAKjK,CAAC,IAAIyR,MAA5D,EAAoE;AAClE86C,IAAAA,CAAC,GAAGmqI,OAAO,CAACzsL,CAAD,CAAX;AACA8D,IAAAA,CAAC,GAAGw+C,CAAC,CAAC2lN,IAAF,CAAOY,MAAX,CAFkE,CAE/C;AACnB;;AAEA,SAAKx1P,CAAC,GAAGtd,CAAT,EAAYsd,CAAC,IAAI,CAAL,IAAU,CAACmxB,CAAC,GAAGy0K,MAAM,CAAC5lM,CAAD,CAAX,KAAmB,IAAzC,EAA+CA,CAAC,IAAIm3B,IAApD,CAAyD,CALS,CAKP;;;AAG3D,QAAIg6J,GAAJ,EAAS;AACPtoM,MAAAA,CAAC,GAAGwtO,IAAI,IAAI,IAAR,GAAellM,CAAC,CAACtoC,CAAjB,GAAqBJ,IAAI,CAACsG,KAAL,CAAWoiC,CAAC,CAACqkO,MAAF,CAASrgK,EAAT,GAAckhI,IAAI,GAAGllM,CAAC,CAACqkO,MAAF,CAAS5qQ,KAAT,EAAhC,CAAzB;AACAwc,MAAAA,CAAC,GAAGmxD,IAAJ;AACD,KAHD,MAGO;AACL1vE,MAAAA,CAAC,GAAG0vE,IAAJ;AACAnxD,MAAAA,CAAC,GAAGivN,IAAI,IAAI,IAAR,GAAellM,CAAC,CAAC/pB,CAAjB,GAAqB3e,IAAI,CAACsG,KAAL,CAAWoiC,CAAC,CAACqkO,MAAF,CAAStgK,EAAT,GAAcmhI,IAAI,GAAGllM,CAAC,CAACqkO,MAAF,CAAS78O,MAAT,EAAhC,CAAzB;AACD;;AAEDloB,IAAAA,CAAC,CAAC66M,KAAF,CAAQr8J,CAAC,CAACumN,MAAF,CAASryD,SAAT,CAAmBt6M,CAAC,IAAIomD,CAAC,CAACpmD,CAAF,IAAO,CAAX,CAApB,EAAmCue,CAAC,IAAI6nC,CAAC,CAAC7nC,CAAF,IAAO,CAAX,CAApC,CAAR;AACA6nC,IAAAA,CAAC,CAACpmD,CAAF,GAAMA,CAAN;AACAomD,IAAAA,CAAC,CAAC7nC,CAAF,GAAMA,CAAN;AACA8rQ,IAAAA,IAAI,CAAC3N,KAAL,CAAWt2N,CAAX,EAnBkE,CAmBnD;;AAEfyhL,IAAAA,IAAI,GAAG+C,GAAG,CAAC/C,IAAD,EAAOjgO,CAAC,CAACymR,EAAD,CAAR,CAAV;AACD;;AAED,SAAOxmD,IAAP;AACD;;AAED,SAASumD,WAAT,CAAqB/D,IAArB,EAA2B/hP,CAA3B,EAA8B9hC,MAA9B,EAAsC8hM,GAAtC,EAA2CqkE,MAA3C,EAAmDn/B,IAAnD,EAAyD;AACvD,MAAI,CAACllM,CAAL,EAAQ;AACR+hP,EAAAA,IAAI,CAAC3N,KAAL,CAAWp0O,CAAX,EAFuD,CAExC;;AAEf,MAAItoC,CAAC,GAAGwG,MAAR;AAAA,MACI+X,CAAC,GAAG/X,MADR;AAEA8hM,EAAAA,GAAG,GAAGtoM,CAAC,GAAGJ,IAAI,CAACsG,KAAL,CAAWymQ,MAAM,CAACrgK,EAAP,GAAYkhI,IAAI,GAAGm/B,MAAM,CAAC5qQ,KAAP,EAA9B,CAAP,GAAuDwc,CAAC,GAAG3e,IAAI,CAACsG,KAAL,CAAWymQ,MAAM,CAACtgK,EAAP,GAAYmhI,IAAI,GAAGm/B,MAAM,CAAC78O,MAAP,EAA9B,CAA9D,CANuD,CAMuD;;AAE9GwY,EAAAA,CAAC,CAACqkO,MAAF,CAASryD,SAAT,CAAmBt6M,CAAC,IAAIsoC,CAAC,CAACtoC,CAAF,IAAO,CAAX,CAApB,EAAmCue,CAAC,IAAI+pB,CAAC,CAAC/pB,CAAF,IAAO,CAAX,CAApC;AACA+pB,EAAAA,CAAC,CAACyjO,IAAF,CAAOY,MAAP,CAAcr7D,KAAd,GAAsBmR,KAAtB,CAA4Bn6K,CAAC,CAACqkO,MAA9B;AACArkO,EAAAA,CAAC,CAACtoC,CAAF,GAAMA,CAAN;AACAsoC,EAAAA,CAAC,CAAC/pB,CAAF,GAAMA,CAAN,CAXuD,CAW9C;;AAET8rQ,EAAAA,IAAI,CAAC3N,KAAL,CAAWp0O,CAAX;AACD;;AAED,SAASgmP,QAAT,CAAkBrvR,MAAlB,EAA0B6sQ,MAA1B,EAAkC;AAChC,QAAMh+D,GAAG,GAAG7uM,MAAM,CAAC6sQ,MAAD,CAAN,IAAkB,EAA9B;AACA,SAAO,CAAChuQ,GAAD,EAAM4I,CAAN,KAAYonM,GAAG,CAAChwM,GAAD,CAAH,IAAY,IAAZ,GAAmBgwM,GAAG,CAAChwM,GAAD,CAAtB,GAA8BmB,MAAM,CAACnB,GAAD,CAAN,IAAe,IAAf,GAAsBmB,MAAM,CAACnB,GAAD,CAA5B,GAAoC4I,CAArF;AACD,EAAC;;;AAGF,SAASg4C,OAAT,CAAiB6vO,OAAjB,EAA0B1xR,KAA1B,EAAiC;AAC/B,MAAIoD,GAAG,GAAG,CAAC0B,QAAX;AACA4sR,EAAAA,OAAO,CAAC5wR,OAAR,CAAgB8jB,IAAI,IAAI;AACtB,QAAIA,IAAI,CAACjb,MAAL,IAAe,IAAnB,EAAyBvG,GAAG,GAAGL,IAAI,CAACK,GAAL,CAASA,GAAT,EAAcwhB,IAAI,CAACjb,MAAnB,CAAN;AAC1B,GAFD;AAGA,SAAOvG,GAAG,GAAG,CAAC0B,QAAP,GAAkB1B,GAAlB,GAAwBpD,KAA/B;AACD;;AAED,SAAS2xR,YAAT,CAAsBlmP,CAAtB,EAAyBwjO,MAAzB,EAAiC7sQ,MAAjC,EAAyCu2P,EAAzC,EAA6CC,EAA7C,EAAiDtvM,CAAjD,EAAoDC,CAApD,EAAuD;AACrD,QAAM5lC,CAAC,GAAG8tQ,QAAQ,CAACrvR,MAAD,EAAS6sQ,MAAT,CAAlB;AAAA,QACMtlQ,MAAM,GAAGk4C,OAAO,CAACpW,CAAD,EAAI9nB,CAAC,CAAC,QAAD,EAAW,CAAX,CAAL,CADtB;AAAA,QAEMovL,MAAM,GAAGpvL,CAAC,CAAC,QAAD,EAAWkoQ,KAAX,CAFhB;AAAA,QAGM+F,IAAI,GAAG7+E,MAAM,KAAKg5E,GAAX,GAAiB,CAAjB,GAAqBh5E,MAAM,KAAK+4E,MAAX,GAAoB,GAApB,GAA0B,CAH5D;;AAKA,QAAMxqP,CAAC,GAAG;AACRi0K,IAAAA,KAAK,EAAE43E,IADC;AAERrd,IAAAA,MAAM,EAAEnsP,CAAC,CAAC,QAAD,EAAWypQ,KAAX,CAFD;AAGR58Q,IAAAA,OAAO,EAAEmT,CAAC,CAAC,WAAD,CAAD,KAAmB,UAAnB,GAAgC,CAAhC,GAAoC8nB,CAAC,CAACnvC,MAHvC;AAIRmd,IAAAA,OAAO,EAAEkK,CAAC,CAAC,QAAD,EAAW,CAAX,CAJF;AAKRu5I,IAAAA,MAAM,EAAEv5I,CAAC,CAAC,QAAD,CALD;AAMR0sQ,IAAAA,OAAO,EAAE;AAND,GAAV;;AASA,UAAQphB,MAAR;AACE,SAAKqc,IAAL;AACEhqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEJ,IAAI,CAAC+H,KAAL,CAAW6tP,EAAE,CAAClpJ,EAAd,IAAoB9lG,MADd;AAETqwM,QAAAA,MAAM,EAAE+xE,GAFC;AAGTrqQ,QAAAA,CAAC,EAAEkwQ,IAAI,IAAIroO,CAAC,IAAIovM,EAAE,CAAC1lO,MAAH,KAAc,IAAI0lO,EAAE,CAACnpJ,EAA9B,CAHE;AAIT7hG,QAAAA,GAAG,EAAEolM;AAJI,OAAX;AAMA;;AAEF,SAAKw4E,KAAL;AACEjqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEJ,IAAI,CAACoC,IAAL,CAAUwzP,EAAE,CAAC78K,EAAb,IAAmBnyE,MADb;AAET+X,QAAAA,CAAC,EAAEkwQ,IAAI,IAAIroO,CAAC,IAAIovM,EAAE,CAAC1lO,MAAH,KAAc,IAAI0lO,EAAE,CAACnpJ,EAA9B,CAFE;AAGT7hG,QAAAA,GAAG,EAAEolM;AAHI,OAAX;AAKA;;AAEF,SAAKs4E,GAAL;AACE/pP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACTrxL,QAAAA,CAAC,EAAE3e,IAAI,CAAC+H,KAAL,CAAW8tP,EAAE,CAACppJ,EAAd,IAAoB7lG,MADd;AAETgE,QAAAA,GAAG,EAAEo+Q,GAFI;AAGT5oR,QAAAA,CAAC,EAAEyuR,IAAI,IAAItoO,CAAC,IAAIsvM,EAAE,CAAC1zP,KAAH,KAAa,IAAI0zP,EAAE,CAACnpJ,EAA7B,CAHE;AAITuqG,QAAAA,MAAM,EAAEjH;AAJC,OAAX;AAMA;;AAEF,SAAKy4E,MAAL;AACElqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACTrxL,QAAAA,CAAC,EAAE3e,IAAI,CAACoC,IAAL,CAAUyzP,EAAE,CAAClpJ,EAAb,IAAmB/lG,MADb;AAETxG,QAAAA,CAAC,EAAEyuR,IAAI,IAAItoO,CAAC,IAAIsvM,EAAE,CAAC1zP,KAAH,KAAa,IAAI0zP,EAAE,CAACnpJ,EAA7B,CAFE;AAGTuqG,QAAAA,MAAM,EAAEjH;AAHC,OAAX;AAKA;;AAEF,SAAK04E,OAAL;AACEnqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEwG,MADM;AAET+X,QAAAA,CAAC,EAAE/X;AAFM,OAAX;AAIA;;AAEF,SAAK+hR,QAAL;AACEpqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEmmD,CAAC,GAAG3/C,MADE;AAET+X,QAAAA,CAAC,EAAE/X,MAFM;AAGTqwM,QAAAA,MAAM,EAAE+xE;AAHC,OAAX;AAKA;;AAEF,SAAKJ,UAAL;AACErqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEwG,MADM;AAET+X,QAAAA,CAAC,EAAE6nC,CAAC,GAAG5/C,MAFE;AAGTgE,QAAAA,GAAG,EAAEo+Q;AAHI,OAAX;AAKA;;AAEF,SAAKH,WAAL;AACEtqP,MAAAA,CAAC,CAACyxK,MAAF,GAAW;AACT5vM,QAAAA,CAAC,EAAEmmD,CAAC,GAAG3/C,MADE;AAET+X,QAAAA,CAAC,EAAE6nC,CAAC,GAAG5/C,MAFE;AAGTqwM,QAAAA,MAAM,EAAE+xE,GAHC;AAITp+Q,QAAAA,GAAG,EAAEo+Q;AAJI,OAAX;AAMA;AAjEJ;;AAoEA,SAAOzqP,CAAP;AACD;;AACD,SAASuwP,YAAT,CAAsBrE,IAAtB,EAA4BsE,MAA5B,EAAoC;AAClC,MAAIltQ,IAAI,GAAGktQ,MAAM,CAAC55K,KAAP,CAAa,CAAb,CAAX;AAAA,MACI6jH,KAAK,GAAGn3M,IAAI,CAACm3M,KADjB;AAAA,MAEIkzC,MAAM,GAAGrqP,IAAI,CAACqqP,MAFlB;AAAA,MAGIa,MAAM,GAAGlrP,IAAI,CAACkrP,MAHlB;AAAA,MAII3sQ,CAAC,GAAGyhB,IAAI,CAACzhB,CAJb;AAAA,MAKIue,CAAC,GAAGkD,IAAI,CAAClD,CALb;AAAA,MAMI4nC,CANJ;AAAA,MAOIC,CAPJ,CADkC,CAQ3B;;AAEP3kC,EAAAA,IAAI,CAACmtQ,OAAL,GAAentQ,IAAI,CAACmtQ,OAAL,CAAat9E,KAAb,GAAqBmR,KAArB,CAA2BkqD,MAA3B,CAAf,GAAoDlrP,IAAI,CAACmtQ,OAAL,GAAejiB,MAAM,CAACl+P,KAAP,EAAnE;AACAk+P,EAAAA,MAAM,CAACr7D,KAAP,GAXkC,CAWlB;;AAEhBu9E,EAAAA,iBAAiB,CAACxE,IAAD,EAAO5oQ,IAAP,EAAaA,IAAI,CAACszF,KAAL,CAAW,CAAX,EAAcA,KAAd,CAAoB,CAApB,CAAb,CAAjB,CAbkC,CAaqB;;AAEvD43J,EAAAA,MAAM,GAAGmiB,YAAY,CAACrtQ,IAAD,EAAOkrP,MAAP,CAArB;AACAxmN,EAAAA,CAAC,GAAG,IAAI1kC,IAAI,CAACnL,OAAb;AACA8vC,EAAAA,CAAC,GAAG,IAAI3kC,IAAI,CAACnL,OAAb;;AAEA,MAAI,CAACq2P,MAAM,CAAC3+D,KAAP,EAAL,EAAqB;AACnB7nJ,IAAAA,CAAC,GAAGvmD,IAAI,CAACoC,IAAL,CAAU2qQ,MAAM,CAAC5qQ,KAAP,KAAiBokD,CAA3B,CAAJ;AACAC,IAAAA,CAAC,GAAGxmD,IAAI,CAACoC,IAAL,CAAU2qQ,MAAM,CAAC78O,MAAP,KAAkBs2B,CAA5B,CAAJ;AACD;;AAED,MAAIwyK,KAAK,CAAC9+M,IAAN,KAAe4vQ,OAAnB,EAA4B;AAC1BqF,IAAAA,iBAAiB,CAACttQ,IAAI,CAACszF,KAAL,CAAW,CAAX,EAAcA,KAAd,CAAoB,CAApB,EAAuBA,KAAvB,CAA6B,CAA7B,EAAgCA,KAAjC,CAAjB;AACD;;AAED,MAAI+2J,MAAM,KAAK39D,IAAf,EAAqB;AACnB1sL,IAAAA,IAAI,CAACzhB,CAAL,GAASA,CAAC,GAAG,CAAb;AACAyhB,IAAAA,IAAI,CAAClD,CAAL,GAASA,CAAC,GAAG,CAAb;AACD;;AAEDkD,EAAAA,IAAI,CAAC1f,KAAL,GAAaokD,CAAb;AACA1kC,EAAAA,IAAI,CAACqO,MAAL,GAAcs2B,CAAd;AACA,mCAAYumN,MAAM,CAACnwQ,GAAP,CAAWwD,CAAX,EAAcue,CAAd,EAAiBve,CAAC,GAAGmmD,CAArB,EAAwB5nC,CAAC,GAAG6nC,CAA5B,CAAZ,EAA4C3kC,IAA5C;AACAA,EAAAA,IAAI,CAACsqP,IAAL,CAAUY,MAAV,CAAiBr7D,KAAjB,GAAyBmR,KAAzB,CAA+BkqD,MAA/B;AACA,SAAOlrP,IAAP;AACD;;AAED,SAASqtQ,YAAT,CAAsBrtQ,IAAtB,EAA4B7Z,CAA5B,EAA+B;AAC7B;AACA6Z,EAAAA,IAAI,CAACszF,KAAL,CAAWp3G,OAAX,CAAmB6iB,CAAC,IAAI5Y,CAAC,CAAC66M,KAAF,CAAQjiM,CAAC,CAACmsP,MAAV,CAAxB,EAF6B,CAEe;;AAE5C/kQ,EAAAA,CAAC,CAAC0kG,EAAF,GAAO7qF,IAAI,CAACnL,OAAZ;AACA1O,EAAAA,CAAC,CAACykG,EAAF,GAAO5qF,IAAI,CAACnL,OAAZ;AACA,SAAO1O,CAAP;AACD;;AAED,SAASinR,iBAAT,CAA2BxE,IAA3B,EAAiC5oQ,IAAjC,EAAuCsjG,KAAvC,EAA8C;AAC5C,MAAIn5G,GAAG,GAAG6V,IAAI,CAACnL,OAAf;AAAA,MACI8H,EAAE,GAAGxS,GAAG,GAAGm5G,KAAK,CAAC/kH,CADrB;AAAA,MAEIgvR,EAAE,GAAGpjR,GAAG,GAAGm5G,KAAK,CAACxmG,CAFrB;;AAIA,MAAI,CAACkD,IAAI,CAACm3M,KAAL,CAAWz+N,KAAhB,EAAuB;AACrB,QAAIikB,EAAE,IAAI4wQ,EAAV,EAAc10E,SAAS,CAAC+vE,IAAD,EAAOtlK,KAAP,EAAc3mG,EAAd,EAAkB4wQ,EAAlB,CAAT;AACf,GAFD,MAEO;AACL,QAAI70R,KAAK,GAAGsnB,IAAI,CAACszF,KAAL,CAAW,CAAX,EAAcA,KAAd,CAAoB,CAApB,CAAZ;AAAA,QACI66F,MAAM,GAAGz1M,KAAK,CAACy1M,MADnB;AAAA,QAEIq/E,IAAI,GAAGxtQ,IAAI,CAACyqQ,YAAL,IAAqB,CAFhC;AAAA,QAGIxxK,EAAE,GAAG9uG,GAAG,GAAGzR,KAAK,CAAC6F,CAHrB;AAAA,QAIIkvR,EAAE,GAAGtjR,GAAG,GAAGzR,KAAK,CAACokB,CAJrB;;AAMA,YAAQpkB,KAAK,CAAC2xQ,MAAd;AACE,WAAKqc,IAAL;AACE/pQ,QAAAA,EAAE,IAAIxe,IAAI,CAACoC,IAAL,CAAU7H,KAAK,CAACwyQ,MAAN,CAAa5qQ,KAAb,EAAV,IAAkCktR,IAAxC;AACA;;AAEF,WAAK7G,KAAL;AACA,WAAKC,MAAL;AACE;;AAEF;AACE2G,QAAAA,EAAE,IAAI70R,KAAK,CAACwyQ,MAAN,CAAa78O,MAAb,KAAwBm/P,IAA9B;AAVJ;;AAaA,QAAI7wQ,EAAE,IAAI4wQ,EAAV,EAAc10E,SAAS,CAAC+vE,IAAD,EAAOtlK,KAAP,EAAc3mG,EAAd,EAAkB4wQ,EAAlB,CAAT;;AAEd,YAAQ70R,KAAK,CAAC2xQ,MAAd;AACE,WAAKqc,IAAL;AACE+G,QAAAA,EAAE,IAAIC,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqBy1M,MAArB,EAA6B,CAA7B,EAAgC,CAAhC,CAAvB;AACA;;AAEF,WAAKw4E,KAAL;AACE1tK,QAAAA,EAAE,IAAIy0K,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqByuR,GAArB,EAA0B,CAA1B,EAA6B,CAA7B,CAAjB,GAAmDqG,IAAzD;AACAC,QAAAA,EAAE,IAAIC,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqBy1M,MAArB,EAA6B,CAA7B,EAAgC,CAAhC,CAAvB;AACA;;AAEF,WAAKy4E,MAAL;AACE3tK,QAAAA,EAAE,IAAIy0K,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqBy1M,MAArB,EAA6B,CAA7B,EAAgC,CAAhC,CAAvB;AACAs/E,QAAAA,EAAE,IAAIC,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqByuR,GAArB,EAA0B,CAAC,CAA3B,EAA8B,CAA9B,EAAiC,CAAjC,CAAjB,GAAuDqG,IAA7D;AACA;;AAEF;AACEv0K,QAAAA,EAAE,IAAIy0K,iBAAiB,CAAC1tQ,IAAD,EAAOsjG,KAAP,EAAc5qH,KAAd,EAAqBy1M,MAArB,EAA6B,CAA7B,EAAgC,CAAhC,CAAvB;AAhBJ;;AAmBA,QAAIl1F,EAAE,IAAIw0K,EAAV,EAAc50E,SAAS,CAAC+vE,IAAD,EAAOlwR,KAAP,EAAcugH,EAAd,EAAkBw0K,EAAlB,CAAT,CAzCT,CAyCyC;;AAE9C,QAAI,CAACx0K,EAAE,GAAG96G,IAAI,CAACsG,KAAL,CAAW/L,KAAK,CAACwyQ,MAAN,CAAargK,EAAb,GAAkB1gG,GAA7B,CAAN,IAA2C,CAA/C,EAAkD;AAChD0uM,MAAAA,SAAS,CAAC+vE,IAAD,EAAOtlK,KAAP,EAAc,CAACrK,EAAf,EAAmB,CAAnB,CAAT;AACA4/F,MAAAA,SAAS,CAAC+vE,IAAD,EAAOlwR,KAAP,EAAc,CAACugH,EAAf,EAAmB,CAAnB,CAAT;AACD;AACF;AACF;;AAED,SAASy0K,iBAAT,CAA2B1tQ,IAA3B,EAAiCsjG,KAAjC,EAAwC5qH,KAAxC,EAA+Cy1M,MAA/C,EAAuDrxL,CAAvD,EAA0D4sG,EAA1D,EAA8DikK,KAA9D,EAAqE;AACnE,QAAMhpQ,IAAI,GAAG3E,IAAI,CAACm3M,KAAL,CAAW9+M,IAAX,KAAoB,QAAjC;AAAA,QACMu1Q,KAAK,GAAGl1R,KAAK,CAACy+N,KAAN,CAAYy2D,KAD1B;AAAA,QAEM92R,CAAC,GAAG6tB,IAAI,KAAK+kG,EAAE,IAAI,CAACkkK,KAAZ,CAAJ,IAA0B,CAACD,KAA3B,GAAmCrqK,KAAK,CAAChQ,KAAN,CAAY,CAAZ,CAAnC,GAAoDgQ,KAF9D;AAAA,QAGM1nH,CAAC,GAAG9E,CAAC,CAACo0Q,MAAF,CAASpuP,CAAC,GAAG,IAAH,GAAU,IAApB,IAA4BkD,IAAI,CAACnL,OAH3C;AAAA,QAIMuiE,CAAC,GAAGw2M,KAAK,IAAIlkK,EAAT,GAAc9tH,CAAd,GAAkB,CAJ5B;AAAA,QAKM0O,CAAC,GAAGsjR,KAAK,IAAIlkK,EAAT,GAAc,CAAd,GAAkB9tH,CAL5B;AAAA,QAMMmoB,CAAC,GAAGjH,CAAC,IAAI,CAAL,GAAS,CAAT,GAAa,qCAAgBpkB,KAAhB,CANvB;AAOA,SAAOyF,IAAI,CAACsG,KAAL,CAAW0pM,MAAM,KAAK84E,KAAX,GAAmB7vM,CAAnB,GAAuB+2H,MAAM,KAAKg5E,GAAX,GAAiB78Q,CAAC,GAAGyZ,CAArB,GAAyB,OAAOnoB,CAAC,GAAGmoB,CAAX,CAA3D,CAAP;AACD;;AAED,SAAS80L,SAAT,CAAmB+vE,IAAnB,EAAyB5oQ,IAAzB,EAA+BkE,EAA/B,EAAmChH,EAAnC,EAAuC;AACrC8C,EAAAA,IAAI,CAACzhB,CAAL,IAAU2lB,EAAV;AACAlE,EAAAA,IAAI,CAAClD,CAAL,IAAUI,EAAV;AACA8C,EAAAA,IAAI,CAACkrP,MAAL,CAAYryD,SAAZ,CAAsB30L,EAAtB,EAA0BhH,EAA1B;AACA8C,EAAAA,IAAI,CAACsqP,IAAL,CAAUY,MAAV,CAAiBryD,SAAjB,CAA2B30L,EAA3B,EAA+BhH,EAA/B;AACA0rQ,EAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX;AACD;;AAED,SAASstQ,iBAAT,CAA2BjwR,OAA3B,EAAoC;AAClC;AACA,QAAMwwR,MAAM,GAAGxwR,OAAO,CAACsH,MAAR,CAAe,CAAC+/C,CAAD,EAAI7d,CAAJ,KAAU;AACtC6d,IAAAA,CAAC,CAAC7d,CAAC,CAACuuK,MAAH,CAAD,GAAcj3M,IAAI,CAACK,GAAL,CAASqoC,CAAC,CAACqkO,MAAF,CAASh0L,EAAT,GAAcrwC,CAAC,CAACtoC,CAAzB,EAA4BmmD,CAAC,CAAC7d,CAAC,CAACuuK,MAAH,CAAD,IAAe,CAA3C,CAAd;AACA,WAAO1wJ,CAAP;AACD,GAHc,EAGZ,EAHY,CAAf,CAFkC,CAK1B;;AAERrnD,EAAAA,OAAO,CAACnB,OAAR,CAAgB2qC,CAAC,IAAI;AACnBA,IAAAA,CAAC,CAACvmC,KAAF,GAAUutR,MAAM,CAAChnP,CAAC,CAACuuK,MAAH,CAAhB;AACAvuK,IAAAA,CAAC,CAACxY,MAAF,GAAWwY,CAAC,CAACqkO,MAAF,CAASpgK,EAAT,GAAcjkE,CAAC,CAAC/pB,CAA3B;AACD,GAHD;AAID;;AAED,SAASgxQ,WAAT,CAAqBlF,IAArB,EAA2Bte,IAA3B,EAAiChqQ,KAAjC,EAAwC+tB,MAAxC,EAAgD+wP,UAAhD,EAA4D;AAC1D,MAAIr7J,KAAK,GAAGumJ,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAZ;AAAA,MACIpoB,KAAK,GAAG64B,KAAK,CAAC74B,KADlB;AAAA,MAEIm/K,MAAM,GAAGtmJ,KAAK,CAACsmJ,MAFnB;AAAA,MAGIl8D,MAAM,GAAGpqF,KAAK,CAACoqF,MAHnB;AAAA,MAIIppM,MAAM,GAAGg/G,KAAK,CAACh/G,MAJnB;AAAA,MAKI8P,OAAO,GAAGkvG,KAAK,CAAClvG,OALpB;AAAA,MAMInc,KAAK,GAAGqrH,KAAK,CAACzQ,KAAN,CAAY,CAAZ,EAAeA,KAAf,CAAqB,CAArB,CANZ;AAAA,MAOIy6K,QAAQ,GAAGhqK,KAAK,CAACzQ,KAAN,CAAY,CAAZ,KAAkByQ,KAAK,CAACzQ,KAAN,CAAY,CAAZ,EAAeA,KAAf,CAAqB,CAArB,CAPjC;AAAA,MAQIvpG,GAAG,GAAGsgQ,MAAM,KAAKqc,IAAX,IAAmBrc,MAAM,KAAKsc,KAA9B,GAAsCt4P,MAAtC,GAA+C/tB,KARzD;AAAA,MASI4D,KAAK,GAAG,CATZ;AAAA,MAUI3F,CAAC,GAAG,CAVR;AAAA,MAWIue,CAAC,GAAG,CAXR;AAAA,MAYIk3P,EAAE,GAAG,CAZT;AAAA,MAaIC,EAAE,GAAG,CAbT;AAAA,MAcI/tI,GAdJ;;AAgBA,MAAIh7C,KAAK,KAAKk8L,KAAd,EAAqB;AACnB/c,IAAAA,MAAM,KAAKqc,IAAX,IAAmBxiR,KAAK,GAAGk7Q,UAAU,CAACt0K,EAAnB,EAAuB/gG,GAAG,GAAGq1Q,UAAU,CAACx0K,EAA3D,IAAiEy/J,MAAM,KAAKsc,KAAX,IAAoBziR,KAAK,GAAGk7Q,UAAU,CAACx0K,EAAnB,EAAuB7gG,GAAG,GAAGq1Q,UAAU,CAACt0K,EAA5D,KAAmE5mG,KAAK,GAAGk7Q,UAAU,CAACv0K,EAAnB,EAAuB9gG,GAAG,GAAGq1Q,UAAU,CAACloM,EAA3G,CAAjE;AACD,GAFD,MAEO,IAAImzL,MAAM,KAAKqc,IAAf,EAAqB;AAC1BxiR,IAAAA,KAAK,GAAGmqB,MAAR,EAAgBtkB,GAAG,GAAG,CAAtB;AACD;;AAEDm8H,EAAAA,GAAG,GAAGioE,MAAM,KAAK84E,KAAX,GAAmB/iR,KAAnB,GAA2BiqM,MAAM,KAAKg5E,GAAX,GAAiBp9Q,GAAjB,GAAuB,CAAC7F,KAAK,GAAG6F,GAAT,IAAgB,CAAxE;;AAEA,MAAIgkR,QAAQ,IAAIA,QAAQ,CAACj9K,IAAzB,EAA+B;AAC7B;AACA,YAAQu5J,MAAR;AACE,WAAKoc,GAAL;AACA,WAAKG,MAAL;AACE3S,QAAAA,EAAE,GAAGv7Q,KAAK,CAACwyQ,MAAN,CAAa78O,MAAb,KAAwBxZ,OAA7B;AACA;;AAEF,WAAK6xQ,IAAL;AACE1S,QAAAA,EAAE,GAAGt7Q,KAAK,CAACwyQ,MAAN,CAAa5qQ,KAAb,KAAuBuU,OAA5B;AACA;;AAEF,WAAK8xQ,KAAL;AACE3S,QAAAA,EAAE,GAAG,CAACt7Q,KAAK,CAACwyQ,MAAN,CAAa5qQ,KAAb,EAAD,GAAwBuU,OAA7B;AACA;AAZJ;;AAeA6hQ,IAAAA,UAAU,CAAC7mE,KAAX,GAAmBmR,KAAnB,CAAyB+sE,QAAQ,CAAC7iB,MAAlC;AACAwL,IAAAA,UAAU,CAAC79D,SAAX,CAAqBm7D,EAAE,IAAI+Z,QAAQ,CAACxvR,CAAT,IAAc,CAAlB,CAAvB,EAA6C01Q,EAAE,IAAI8Z,QAAQ,CAACjxQ,CAAT,IAAc,CAAlB,CAA/C;;AAEA,QAAI/hB,GAAG,CAACgzR,QAAD,EAAW,GAAX,EAAgB/Z,EAAhB,CAAH,GAAyBj5Q,GAAG,CAACgzR,QAAD,EAAW,GAAX,EAAgB9Z,EAAhB,CAAhC,EAAqD;AACnD2U,MAAAA,IAAI,CAAC3N,KAAL,CAAW8S,QAAX;AACAA,MAAAA,QAAQ,CAAC7iB,MAAT,CAAgBr7D,KAAhB,GAAwBmR,KAAxB,CAA8B01D,UAA9B;AACAqX,MAAAA,QAAQ,CAACzjB,IAAT,CAAcY,MAAd,CAAqBr7D,KAArB,GAA6BmR,KAA7B,CAAmC01D,UAAnC;AACAkS,MAAAA,IAAI,CAAC3N,KAAL,CAAW8S,QAAX;AACD;;AAEDrX,IAAAA,UAAU,CAAC7mE,KAAX,GAAmBmR,KAAnB,CAAyB+sE,QAAQ,CAAC7iB,MAAlC;AACD,GA5BD,MA4BO;AACLwL,IAAAA,UAAU,CAAC7mE,KAAX;AACD;;AAED6mE,EAAAA,UAAU,CAAC11D,KAAX,CAAiBtoN,KAAK,CAACwyQ,MAAvB,EAzD0D,CAyD1B;;AAEhC,UAAQb,MAAR;AACE,SAAKoc,GAAL;AACEloR,MAAAA,CAAC,GAAG2nI,GAAJ;AACAppH,MAAAA,CAAC,GAAGsiQ,UAAU,CAACx0K,EAAX,GAAgB8rK,UAAU,CAACroP,MAAX,EAAhB,GAAsCtpB,MAA1C;AACA;;AAEF,SAAK2hR,IAAL;AACEnoR,MAAAA,CAAC,GAAG6gR,UAAU,CAACv0K,EAAX,GAAgB6rK,UAAU,CAACp2Q,KAAX,EAAhB,GAAqCyE,MAAzC;AACA+X,MAAAA,CAAC,GAAGopH,GAAJ;AACA;;AAEF,SAAKygJ,KAAL;AACEpoR,MAAAA,CAAC,GAAG6gR,UAAU,CAACloM,EAAX,GAAgBw/L,UAAU,CAACp2Q,KAAX,EAAhB,GAAqCyE,MAAzC;AACA+X,MAAAA,CAAC,GAAGopH,GAAJ;AACA;;AAEF,SAAK0gJ,MAAL;AACEroR,MAAAA,CAAC,GAAG2nI,GAAJ;AACAppH,MAAAA,CAAC,GAAGsiQ,UAAU,CAACt0K,EAAX,GAAgB/lG,MAApB;AACA;;AAEF;AACExG,MAAAA,CAAC,GAAGwlH,KAAK,CAACxlH,CAAV;AACAue,MAAAA,CAAC,GAAGinG,KAAK,CAACjnG,CAAV;AAvBJ;;AA0BA,MAAI/hB,GAAG,CAACgpH,KAAD,EAAQ,GAAR,EAAaxlH,CAAb,CAAH,GAAqBxD,GAAG,CAACgpH,KAAD,EAAQ,GAAR,EAAajnG,CAAb,CAA5B,EAA6C;AAC3C45P,IAAAA,UAAU,CAAC79D,SAAX,CAAqBt6M,CAArB,EAAwBue,CAAxB;AACA8rQ,IAAAA,IAAI,CAAC3N,KAAL,CAAWl3J,KAAX;AACAA,IAAAA,KAAK,CAACmnJ,MAAN,CAAar7D,KAAb,GAAqBmR,KAArB,CAA2B01D,UAA3B;AACApM,IAAAA,IAAI,CAACY,MAAL,CAAYr7D,KAAZ,GAAoBmR,KAApB,CAA0B01D,UAA1B;AACAkS,IAAAA,IAAI,CAAC3N,KAAL,CAAWl3J,KAAX;AACD;;AAED,SAAOA,KAAK,CAACmnJ,MAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS8iB,UAAT,CAAoBvyR,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASuyR,UAAT,EAAqB3tD,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMgwD,IAAI,GAAGhwD,KAAK,CAAC8C,QAAnB;;AAEA38M,IAAAA,CAAC,CAACurP,IAAF,CAAOh3J,KAAP,CAAap3G,OAAb,CAAqB6nH,KAAK,IAAI;AAC5B,UAAIhlG,CAAC,CAACouL,MAAN,EAAcg/E,aAAa,CAACvD,IAAD,EAAO7kK,KAAP,EAAchlG,CAAC,CAACouL,MAAhB,CAAb;AACd8gF,MAAAA,WAAW,CAACrF,IAAD,EAAO7kK,KAAP,EAAchlG,CAAd,CAAX;AACD,KAHD;;AAKA,WAAOmvQ,YAAY,CAACnvQ,CAAC,CAACurP,IAAF,CAAOvmJ,KAAR,CAAZ,GAA6B60G,KAAK,CAACJ,MAAN,EAA7B,GAA8CI,KAArD;AACD;;AAV6B,CAAhC;;AAcA,SAASs1D,YAAT,CAAsBnqK,KAAtB,EAA6B;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAOA,KAAK,IAAIA,KAAK,CAACumJ,IAAN,CAAW0N,IAAX,KAAoB,cAApC;AACD;;AAED,SAASiW,WAAT,CAAqBrF,IAArB,EAA2B7kK,KAA3B,EAAkChlG,CAAlC,EAAqC;AACnC,MAAIu0F,KAAK,GAAGyQ,KAAK,CAACzQ,KAAlB;AAAA,MACIhzG,KAAK,GAAGnC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYulH,KAAK,CAACzjH,KAAN,IAAe,CAA3B,CADZ;AAAA,MAEI+tB,MAAM,GAAGlwB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYulH,KAAK,CAAC11F,MAAN,IAAgB,CAA5B,CAFb;AAAA,MAGI+wP,UAAU,GAAG,IAAIxU,sBAAJ,GAAa7vQ,GAAb,CAAiB,CAAjB,EAAoB,CAApB,EAAuBuF,KAAvB,EAA8B+tB,MAA9B,CAHjB;AAAA,MAII8/P,OAAO,GAAG/O,UAAU,CAACpyQ,KAAX,EAJd;AAAA,MAKIohR,OAAO,GAAGhP,UAAU,CAACpyQ,KAAX,EALd;AAAA,MAMI8/Q,OAAO,GAAG,EANd;AAAA,MAOIp0R,KAPJ;AAAA,MAQI4xQ,IARJ;AAAA,MASID,MATJ;AAAA,MAUIlkQ,CAVJ;AAAA,MAWI/N,CAXJ;AAAA,MAYIkO,CAZJ,CADmC,CAa5B;;AAEP,OAAKlO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxCkyQ,IAAAA,IAAI,GAAGh3J,KAAK,CAACl7G,CAAD,CAAZ;;AAEA,YAAQkyQ,IAAI,CAAC0N,IAAb;AACE,WAAKqP,QAAL;AACElhR,QAAAA,CAAC,GAAGgkR,OAAO,CAAC7f,IAAD,CAAP,GAAgB6jB,OAAhB,GAA0BC,OAA9B;AACAjoR,QAAAA,CAAC,CAAC66M,KAAF,CAAQspE,UAAU,CAAC1B,IAAD,EAAOte,IAAP,EAAahqQ,KAAb,EAAoB+tB,MAApB,CAAlB;AACA;;AAEF,WAAKi5P,SAAL;AACE5uR,QAAAA,KAAK,GAAG4xQ,IAAR;AACA;;AAEF,WAAKmd,UAAL;AACEqF,QAAAA,OAAO,CAACz0R,IAAR,CAAa40R,YAAY,CAACrE,IAAD,EAAOte,IAAP,CAAzB;AACA;;AAEF,WAAKid,SAAL;AACA,WAAKC,SAAL;AACA,WAAKE,SAAL;AACA,WAAKC,SAAL;AACA,WAAKC,QAAL;AACA,WAAKC,SAAL;AACA,WAAKC,SAAL;AACA,WAAKC,QAAL;AACEoG,QAAAA,OAAO,CAACntE,KAAR,CAAcspD,IAAI,CAACY,MAAnB;AACAkjB,QAAAA,OAAO,CAACptE,KAAR,CAAcspD,IAAI,CAACY,MAAnB;AACA;;AAEF;AACEkU,QAAAA,UAAU,CAACp+D,KAAX,CAAiBspD,IAAI,CAACY,MAAtB;AA3BJ;AA6BD,GA/CkC,CA+CjC;;;AAGF,MAAI4hB,OAAO,CAACp1R,MAAZ,EAAoB;AAClB;AACA,UAAMwS,CAAC,GAAG,EAAV;AACA4iR,IAAAA,OAAO,CAAC5wR,OAAR,CAAgB8jB,IAAI,IAAI;AACtBqqP,MAAAA,MAAM,GAAGrqP,IAAI,CAACqqP,MAAL,IAAesc,KAAxB;AACA,UAAItc,MAAM,KAAK39D,IAAf,EAAqB,CAACxiM,CAAC,CAACmgQ,MAAD,CAAD,KAAcngQ,CAAC,CAACmgQ,MAAD,CAAD,GAAY,EAA1B,CAAD,EAAgChyQ,IAAhC,CAAqC2nB,IAArC;AACtB,KAHD,EAHkB,CAMd;;AAEJ,SAAK,MAAMqqP,MAAX,IAAqBngQ,CAArB,EAAwB;AACtB,YAAM28B,CAAC,GAAG38B,CAAC,CAACmgQ,MAAD,CAAX;AACAmhB,MAAAA,UAAU,CAAC5C,IAAD,EAAO/hP,CAAP,EAAUkmP,YAAY,CAAClmP,CAAD,EAAIwjO,MAAJ,EAAYtrP,CAAC,CAAC+tQ,OAAd,EAAuBqB,OAAvB,EAAgCC,OAAhC,EAAyC9tR,KAAzC,EAAgD+tB,MAAhD,CAAtB,CAAV;AACD,KAXiB,CAWhB;;;AAGFy+P,IAAAA,OAAO,CAAC5wR,OAAR,CAAgB8jB,IAAI,IAAI;AACtB,YAAM7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAf;;AAEA,UAAI,CAAC/kQ,CAAC,CAAC0kQ,MAAF,CAAS7qP,IAAI,CAACmtQ,OAAd,CAAL,EAA6B;AAC3BntQ,QAAAA,IAAI,CAACkrP,MAAL,GAAclrP,IAAI,CAACmtQ,OAAnB;AACAvE,QAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX,EAF2B,CAET;;AAElBA,QAAAA,IAAI,CAACkrP,MAAL,GAAc/kQ,CAAd;AACAyiR,QAAAA,IAAI,CAAC3N,KAAL,CAAWj7P,IAAX;AACD;;AAED,UAAIjB,CAAC,CAACsvQ,QAAF,IAActvQ,CAAC,CAACsvQ,QAAF,CAAWh2Q,IAAX,KAAoB6vQ,GAAtC,EAA2C;AACzC;AACA;AACA;AACA,gBAAQloQ,IAAI,CAACqqP,MAAb;AACE,eAAKqc,IAAL;AACA,eAAKC,KAAL;AACEvH,YAAAA,UAAU,CAACrmQ,GAAX,CAAe5S,CAAC,CAAC0kG,EAAjB,EAAqB,CAArB,EAAwB9xF,GAAxB,CAA4B5S,CAAC,CAAC+wE,EAA9B,EAAkC,CAAlC;AACA;;AAEF,eAAKuvM,GAAL;AACA,eAAKG,MAAL;AACExH,YAAAA,UAAU,CAACrmQ,GAAX,CAAe,CAAf,EAAkB5S,CAAC,CAACykG,EAApB,EAAwB7xF,GAAxB,CAA4B,CAA5B,EAA+B5S,CAAC,CAAC2kG,EAAjC;AARJ;AAUD,OAdD,MAcO;AACLs0K,QAAAA,UAAU,CAACp+D,KAAX,CAAiB76M,CAAjB;AACD;AACF,KA5BD;AA6BD,GA7FkC,CA6FjC;;;AAGFi5Q,EAAAA,UAAU,CAACp+D,KAAX,CAAiBmtE,OAAjB,EAA0BntE,KAA1B,CAAgCotE,OAAhC,EAhGmC,CAgGO;;AAE1C,MAAI11R,KAAJ,EAAW;AACT0mR,IAAAA,UAAU,CAACp+D,KAAX,CAAiB8sE,WAAW,CAAClF,IAAD,EAAOlwR,KAAP,EAAc4H,KAAd,EAAqB+tB,MAArB,EAA6B+wP,UAA7B,CAA5B;AACD,GApGkC,CAoGjC;;;AAGF,MAAIr7J,KAAK,CAACzjF,IAAV,EAAgB;AACd8+O,IAAAA,UAAU,CAACrkR,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqBgpH,KAAK,CAACzjH,KAAN,IAAe,CAApC,EAAuCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAAvD;AACD,GAzGkC,CAyGjC;;;AAGFigQ,EAAAA,cAAc,CAAC1F,IAAD,EAAO7kK,KAAP,EAAcq7J,UAAd,EAA0BrgQ,CAA1B,CAAd;AACD;;AAED,SAASuvQ,cAAT,CAAwB1F,IAAxB,EAA8B7kK,KAA9B,EAAqCq7J,UAArC,EAAiDrgQ,CAAjD,EAAoD;AAClD,QAAM6rQ,IAAI,GAAG7rQ,CAAC,CAACsvQ,QAAF,IAAc,EAA3B;AAAA,QACMh2Q,IAAI,GAAGuyQ,IAAI,CAACvyQ,IADlB;AAEA,MAAIuwQ,IAAI,CAAC2F,SAAL,GAAiB,CAAjB,IAAsB,CAACl2Q,IAA3B,EAAiC;AACjC,MAAIm2Q,SAAS,GAAG5F,IAAI,CAAC9N,MAArB;AAAA,MACI2T,UAAU,GAAG7F,IAAI,CAAC7N,OADtB;AAAA,MAEIz6Q,KAAK,GAAGnC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYulH,KAAK,CAACzjH,KAAN,IAAe,CAA3B,CAFZ;AAAA,MAGIirC,IAAI,GAAGptC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACoC,IAAL,CAAU,CAAC6+Q,UAAU,CAACv0K,EAAtB,CAAZ,CAHX;AAAA,MAIIx8E,MAAM,GAAGlwB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYulH,KAAK,CAAC11F,MAAN,IAAgB,CAA5B,CAJb;AAAA,MAKIgd,GAAG,GAAGltC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACoC,IAAL,CAAU,CAAC6+Q,UAAU,CAACx0K,EAAtB,CAAZ,CALV;AAMA,QAAMp/D,KAAK,GAAGrtC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACoC,IAAL,CAAU6+Q,UAAU,CAACloM,EAAX,GAAgB52E,KAA1B,CAAZ,CAAd;AAAA,QACMgrC,MAAM,GAAGntC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACoC,IAAL,CAAU6+Q,UAAU,CAACt0K,EAAX,GAAgBz8E,MAA1B,CAAZ,CADf;;AAGA,MAAIu8P,IAAI,CAAC3f,QAAL,KAAkB+c,OAAtB,EAA+B;AAC7B,UAAMnzQ,OAAO,GAAG+zQ,IAAI,CAAC/zQ,OAAL,EAAhB;AACA25Q,IAAAA,SAAS,IAAI35Q,OAAO,CAAC02B,IAAR,GAAe12B,OAAO,CAAC22B,KAApC;AACAijP,IAAAA,UAAU,IAAI55Q,OAAO,CAACw2B,GAAR,GAAcx2B,OAAO,CAACy2B,MAApC;AACD;;AAED,MAAIjzB,IAAI,KAAKq0L,IAAb,EAAmB;AACjBnhK,IAAAA,IAAI,GAAG,CAAP;AACAF,IAAAA,GAAG,GAAG,CAAN;AACA/qC,IAAAA,KAAK,GAAGkuR,SAAR;AACAngQ,IAAAA,MAAM,GAAGogQ,UAAT;AACD,GALD,MAKO,IAAIp2Q,IAAI,KAAK6vQ,GAAb,EAAkB;AACvB5nR,IAAAA,KAAK,GAAGnC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYgwR,SAAS,GAAGjjP,IAAZ,GAAmBC,KAA/B,CAAR;AACAnd,IAAAA,MAAM,GAAGlwB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYiwR,UAAU,GAAGpjP,GAAb,GAAmBC,MAA/B,CAAT;AACD,GAHM,MAGA,IAAIjzB,IAAI,KAAK8vQ,IAAb,EAAmB;AACxB7nR,IAAAA,KAAK,GAAGnC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYgwR,SAAS,GAAGjjP,IAAZ,GAAmBC,KAA/B,CAAR;AACAijP,IAAAA,UAAU,GAAGpgQ,MAAM,GAAGgd,GAAT,GAAeC,MAA5B;AACD,GAHM,MAGA,IAAIjzB,IAAI,KAAK+vQ,IAAb,EAAmB;AACxBoG,IAAAA,SAAS,GAAGluR,KAAK,GAAGirC,IAAR,GAAeC,KAA3B;AACAnd,IAAAA,MAAM,GAAGlwB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYiwR,UAAU,GAAGpjP,GAAb,GAAmBC,MAA/B,CAAT;AACD,GAHM,MAGA,IAAIjzB,IAAI,KAAKgwQ,GAAb,EAAkB;AACvBmG,IAAAA,SAAS,GAAGluR,KAAK,GAAGirC,IAAR,GAAeC,KAA3B;AACAijP,IAAAA,UAAU,GAAGpgQ,MAAM,GAAGgd,GAAT,GAAeC,MAA5B;AACD;;AAEDs9O,EAAAA,IAAI,CAAC8F,WAAL,CAAiBF,SAAjB,EAA4BC,UAA5B,EAAwCnuR,KAAxC,EAA+C+tB,MAA/C,EAAuD,CAACkd,IAAD,EAAOF,GAAP,CAAvD,EAAoEu/O,IAAI,CAAC5+F,MAAzE;AACD;;;;;;;;;;;;;;;;;ACl4CD;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAAS2iG,SAAT,CAAmBlzR,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASkzR,SAAT,EAAoBtuD,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,CAAC2jB,CAAC,CAACo6M,QAAF,EAAnB,EAAiC;AAC/B,aAAOP,KAAK,CAAC6B,eAAb;AACD;;AAED,QAAItY,MAAM,GAAGyW,KAAK,CAAC8C,QAAN,CAAevZ,MAAf,EAAb;AAAA,QACI1jM,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CADV;AAAA,QAEI7e,KAAK,GAAG,KAAKhjN,KAFjB;AAAA,QAGI6S,KAAK,GAAG8Q,CAAC,CAAC9Q,KAHd;AAAA,QAII2gR,KAAK,GAAG7vQ,CAAC,CAACoxD,KAAF,IAAW,IAAX,GAAkBpxD,CAAC,CAACvc,MAAF,GAAWuc,CAAC,CAACvc,MAAF,CAAS9K,MAApB,GAA6B,EAA/C,GAAoDqnB,CAAC,CAACoxD,KAJlE;AAAA,QAKIA,KAAK,GAAG,0BAAUliE,KAAV,EAAiB2gR,KAAjB,EAAwB7vQ,CAAC,CAAC+hN,OAA1B,CALZ;AAAA,QAMInmH,MAAM,GAAG57F,CAAC,CAAC47F,MAAF,IAAY,2BAAWwnG,MAAX,EAAmBl0M,KAAnB,EAA0BkiE,KAA1B,EAAiCpxD,CAAC,CAACyiM,eAAnC,EAAoDziM,CAAC,CAAC8jM,UAAtD,EAAkE,CAAC,CAAC9jM,CAAC,CAACvc,MAAtE,CANzB;AAAA,QAOIA,MAAM,GAAGuc,CAAC,CAACvc,MAAF,GAAW,2BAAWyL,KAAX,EAAkB8Q,CAAC,CAACvc,MAApB,EAA4B2tE,KAA5B,CAAX,GAAgD,2BAAWliE,KAAX,EAAkBkiE,KAAlB,CAP7D;AAQA,QAAIiuI,KAAJ,EAAW3/L,GAAG,CAACw7E,GAAJ,GAAUmkH,KAAV;AACXA,IAAAA,KAAK,GAAG57M,MAAM,CAACX,GAAP,CAAW,CAACzG,KAAD,EAAQhD,CAAR,KAAc,0BAAO;AACtC8F,MAAAA,KAAK,EAAE9F,CAAC,IAAIoK,MAAM,CAAC9K,MAAP,GAAgB,CAAhB,IAAqB,CAAzB,CAD8B;AAEtC0D,MAAAA,KAAK,EAAEA,KAF+B;AAGtC6zH,MAAAA,KAAK,EAAEtU,MAAM,CAACv/G,KAAD;AAHyB,KAAP,CAAzB,CAAR;;AAMA,QAAI2jB,CAAC,CAAC4kQ,KAAF,IAAWvlE,KAAK,CAAC1mN,MAArB,EAA6B;AAC3B;AACA;AACA0mN,MAAAA,KAAK,CAAC/lN,IAAN,CAAW,0BAAO;AAChB6F,QAAAA,KAAK,EAAE,CAAC,CADQ;AAEhBylR,QAAAA,KAAK,EAAE;AACLvoR,UAAAA,KAAK,EAAEgjN,KAAK,CAAC,CAAD,CAAL,CAAShjN;AADX,SAFS;AAKhB6zH,QAAAA,KAAK,EAAE;AALS,OAAP,CAAX;AAOD;;AAEDxwG,IAAAA,GAAG,CAACyvC,MAAJ,GAAakwJ,KAAb;AACA3/L,IAAAA,GAAG,CAAC1F,GAAJ,GAAUqlM,KAAV;AACA,SAAKhjN,KAAL,GAAagjN,KAAb;AACA,WAAO3/L,GAAP;AACD;;AArC4B,CAA/B;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASowQ,QAAT,CAAkBpzR,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AAED,SAASqzR,iBAAT,GAA6B;AAC3B,SAAO,0BAAO,EAAP,CAAP;AACD;;AAED,SAASnxG,MAAT,CAAgBthL,GAAhB,EAAqB;AACnB,QAAMwF,GAAG,GAAG,yBAAUkkB,IAAV,CAAejqB,CAAC,IAAIA,CAAC,CAAC4hR,IAAtB,CAAZ;;AAEA77Q,EAAAA,GAAG,CAACuhQ,MAAJ,GAAatnQ,CAAC,IAAI+F,GAAG,CAAC3G,GAAJ,CAAQmB,GAAG,CAACP,CAAD,CAAX,CAAlB;;AAEA,SAAO+F,GAAP;AACD;;AAED,wBAASgtR,QAAT,EAAmBxuD,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAf;AAAA,QACIj9M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CADV;AAAA,QAEIj9M,IAAI,GAAGjB,CAAC,CAACiB,IAAF,IAAU8uQ,iBAFrB;AAAA,QAGIzyR,GAAG,GAAG0iB,CAAC,CAAC1iB,GAAF,IAASy7N,qBAHnB;AAAA,QAIIj2N,GAAG,GAAG,KAAKzG,KAJf,CADkB,CAKI;AACtB;;AAEA,QAAI,uBAAQqjB,GAAG,CAAC7Y,MAAZ,CAAJ,EAAyB;AACvB6Y,MAAAA,GAAG,CAAC7Y,MAAJ,GAAa,IAAb;AACD;;AAED,QAAI/D,GAAG,KAAKkd,CAAC,CAACo6M,QAAF,CAAW,KAAX,KAAqBP,KAAK,CAACO,QAAN,CAAe98N,GAAf,CAA1B,CAAP,EAAuD;AACrD,2BAAM,4DAAN;AACD;;AAED,QAAI,CAACwF,GAAL,EAAU;AACR+2N,MAAAA,KAAK,GAAGA,KAAK,CAAC2E,MAAN,EAAR;AACA,WAAKniO,KAAL,GAAayG,GAAG,GAAG87K,MAAM,CAACthL,GAAD,CAAzB;AACD;;AAEDu8N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1B,YAAM4Z,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAb;AACA,UAAIyC,CAAC,GAAGsD,GAAG,CAAC3G,GAAJ,CAAQwa,CAAR,CAAR;;AAEA,UAAInX,CAAJ,EAAO;AACL,YAAIA,CAAC,CAACm/Q,IAAN,EAAY;AACV77Q,UAAAA,GAAG,CAAC0qM,KAAJ;AACA9tL,UAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAakG,CAAb;AACD,SAHD,MAGO;AACLkgB,UAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAakG,CAAb;AACD;AACF,OAPD,MAOO;AACLA,QAAAA,CAAC,GAAGyhB,IAAI,CAAClkB,CAAD,CAAR;AACA+F,QAAAA,GAAG,CAAC9G,GAAJ,CAAQ2a,CAAR,EAAWnX,CAAX;AACAkgB,QAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAakG,CAAb;AACD;;AAEDA,MAAAA,CAAC,CAAC44N,KAAF,GAAUr7N,CAAV;AACAyC,MAAAA,CAAC,CAACm/Q,IAAF,GAAS,KAAT;AACD,KAnBD;AAoBA9kD,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAI;AAC1B,YAAM4Z,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAb;AAAA,YACMyC,CAAC,GAAGsD,GAAG,CAAC3G,GAAJ,CAAQwa,CAAR,CADV;;AAGA,UAAInX,CAAJ,EAAO;AACLA,QAAAA,CAAC,CAAC44N,KAAF,GAAUr7N,CAAV;AACA2iB,QAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAakG,CAAb;AACD;AACF,KARD;AASAq6N,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B,YAAM4Z,CAAC,GAAGrZ,GAAG,CAACP,CAAD,CAAb;AAAA,YACMyC,CAAC,GAAGsD,GAAG,CAAC3G,GAAJ,CAAQwa,CAAR,CADV;;AAGA,UAAI5Z,CAAC,KAAKyC,CAAC,CAAC44N,KAAR,IAAiB,CAAC54N,CAAC,CAACm/Q,IAAxB,EAA8B;AAC5Bj/P,QAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAakG,CAAb;AACAA,QAAAA,CAAC,CAACm/Q,IAAF,GAAS,IAAT;AACA,UAAE77Q,GAAG,CAAC0qM,KAAN;AACD;AACF,KATD;AAUA,QAAIqsB,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAACgE,OAApB,CAAJ,EAAkCn+M,GAAG,CAACq6M,QAAJ,CAAa,OAAb;;AAElC,QAAIF,KAAK,CAACn1B,KAAN,MAAiB1kL,CAAC,CAAC0kL,KAAF,IAAW5hM,GAAG,CAAC0qM,KAAJ,GAAYmrB,EAAE,CAAC0I,cAA/C,EAA+D;AAC7D1I,MAAAA,EAAE,CAACoG,QAAH,CAAYj8N,GAAG,CAAC4hM,KAAhB;AACD;;AAED,WAAOhlL,GAAP;AACD;;AApE2B,CAA9B;AAwEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASswQ,MAAT,CAAgBtzR,MAAhB,EAAwB;AACtB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASszR,MAAT,EAAiB1uD,uBAAjB,EAA4B;AAC1Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAAC+D,OAAjB,CAAV;AAAA,QACIqyD,IAAI,GAAGjwQ,CAAC,CAACxP,GAAF,IAAS,KADpB;AAAA,QAEI0/Q,QAAQ,GAAGlwQ,CAAC,CAACkwQ,QAFjB;AAAA,QAGIrpR,MAAM,GAAGgzN,KAAK,CAAChzN,MAHnB,CADkB,CAIS;AAC3B;AACA;;AAEA,QAAI,uBAAQA,MAAR,CAAJ,EAAqB;AACnB,UAAI6Y,GAAG,CAACshL,OAAJ,MAAiBn6L,MAAM,CAAC9D,KAAP,CAAahL,CAAC,IAAIm4R,QAAQ,CAACn4R,CAAD,CAA1B,CAArB,EAAqD;AACnD8O,QAAAA,MAAM,GAAGA,MAAM,CAAC,CAAD,CAAf;AACA6Y,QAAAA,GAAG,CAAC7Y,MAAJ,GAAa,IAAb,CAFmD,CAEhC;AACpB,OAHD,MAGO;AACL,eAAOgzN,KAAK,CAAC6B,eAAb;AACD;AACF,KAfiB,CAehB;;;AAGF,QAAIy0D,OAAO,GAAGtpR,MAAM,KAAK,OAAzB;AAAA,QACI0hF,MAAM,GAAG2nM,QAAQ,CAAC3nM,MAAT,IAAmBmlH,eADhC;AAAA,QAEI0iF,KAAK,GAAGF,QAAQ,CAACE,KAAT,IAAkB1iF,eAF9B;AAAA,QAGIixE,IAAI,GAAGuR,QAAQ,CAACvR,IAAT,IAAiBjxE,eAH5B;AAAA,QAII1xM,GAAG,GAAG,CAAC6K,MAAM,IAAI,CAACspR,OAAX,GAAqBD,QAAQ,CAACrpR,MAAD,CAA7B,GAAwC0hF,MAAzC,KAAoDmlH,eAJ9D;;AAMA,QAAImsB,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC38K,GAApB,CAAJ,EAA8B;AAC5B28K,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1BqzR,QAAAA,KAAK,CAACrzR,CAAD,EAAIijB,CAAJ,CAAL;AACAuoE,QAAAA,MAAM,CAACxrF,CAAD,EAAIijB,CAAJ,CAAN;AACD,OAHD;AAIAN,MAAAA,GAAG,CAACq6M,QAAJ,CAAaq2D,KAAK,CAACrtQ,MAAnB;AACArD,MAAAA,GAAG,CAACq6M,QAAJ,CAAaxxI,MAAM,CAACxlE,MAApB;;AAEA,UAAI/mB,GAAG,KAAK0xM,eAAR,IAAiB1xM,GAAG,KAAKusF,MAA7B,EAAqC;AACnCsxI,QAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC38K,GAAlB,EAAuBngD,CAAC,IAAI;AAC1Bf,UAAAA,GAAG,CAACe,CAAD,EAAIijB,CAAJ,CAAH;AACD,SAFD;AAGAN,QAAAA,GAAG,CAACq6M,QAAJ,CAAa/9N,GAAG,CAAC+mB,MAAjB;AACD;AACF;;AAED,QAAI82M,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC6D,GAApB,KAA4BihD,IAAI,KAAKjxE,eAAzC,EAAgD;AAC9CmsB,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC6D,GAAlB,EAAuB3gO,CAAC,IAAI;AAC1B4hR,QAAAA,IAAI,CAAC5hR,CAAD,EAAIijB,CAAJ,CAAJ;AACD,OAFD;AAGAN,MAAAA,GAAG,CAACq6M,QAAJ,CAAa4kD,IAAI,CAAC57P,MAAlB;AACD;;AAED,QAAIotQ,OAAO,IAAIn0R,GAAG,KAAK0xM,eAAvB,EAA8B;AAC5B,YAAMpgE,IAAI,GAAGusF,KAAK,CAAC8D,GAAN,IAAa39M,CAAC,CAACo6M,QAAF,KAAeP,KAAK,CAACkE,MAArB,GAA8B,CAA3C,CAAb;;AAEA,UAAIoyD,OAAJ,EAAa;AACXt2D,QAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAI;AACrB,gBAAMyT,GAAG,GAAG4/Q,KAAK,CAACrzR,CAAD,EAAIijB,CAAJ,CAAL,IAAeiwQ,IAA3B;AACA,cAAIj0R,GAAG,CAACe,CAAD,EAAIijB,CAAJ,CAAH,IAAaxP,GAAjB,EAAsBkP,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAayD,CAAb;AACvB,SAHD;AAIA,YAAI2iB,GAAG,CAAClP,GAAJ,CAAQ7X,MAAZ,EAAoB+mB,GAAG,CAACq6M,QAAJ,CAAaq2D,KAAK,CAACrtQ,MAAnB;AACrB,OAND,MAMO;AACL82M,QAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAI;AACrB,cAAIf,GAAG,CAACe,CAAD,EAAIijB,CAAJ,CAAH,IAAaiwQ,IAAjB,EAAuBvwQ,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAayD,CAAb;AACxB,SAFD;AAGD;;AAED,UAAI2iB,GAAG,CAAClP,GAAJ,CAAQ7X,MAAZ,EAAoB+mB,GAAG,CAACq6M,QAAJ,CAAa/9N,GAAG,CAAC+mB,MAAjB;AACrB;;AAED,WAAOrD,GAAG,CAACshL,OAAJ,KAAgBthL,GAAhB,GAAsBm6M,KAAK,CAAC6B,eAAnC;AACD;;AAnEyB,CAA5B;AAuEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS20D,aAAT,CAAuB3zR,MAAvB,EAA+B;AAC7B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACD,wBAAS2zR,aAAT,EAAwB/uD,uBAAxB,EAAmC;AACjCh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,IAAd,IAAsB,CAAC2jB,CAAC,CAACo6M,QAAF,EAA3B,EAAyC;AACvC,aAAOP,KAAK,CAAC6B,eAAb;AACD;;AAED,QAAItY,MAAM,GAAGyW,KAAK,CAAC8C,QAAN,CAAevZ,MAAf,EAAb;AAAA,QACI1jM,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CADV;AAAA,QAEI3pH,KAAK,GAAG,KAAKl4G,KAFjB;AAAA,QAGIid,IAAI,GAAG0G,CAAC,CAAC1G,IAAF,IAAU8oP,uBAHrB;AAAA,QAIIlzP,KAAK,GAAG8Q,CAAC,CAAC9Q,KAJd;AAAA,QAKImgE,KAAK,GAAG,CAACrvD,CAAC,CAACqvD,KALf;AAAA,QAMI+B,KAAK,GAAG,0BAAUliE,KAAV,EAAiB8Q,CAAC,CAACoxD,KAAF,IAAW,IAAX,GAAkB,CAAlB,GAAsBpxD,CAAC,CAACoxD,KAAzC,EAAgDpxD,CAAC,CAAC+hN,OAAlD,CANZ;AAAA,QAOIuuD,KAAK,GAAG,CAAC,CAACtwQ,CAAC,CAACvc,MAAJ,IAAc6V,IAAI,KAAK8oP,uBAPnC;AAAA,QAQIxmJ,MAAM,GAAG57F,CAAC,CAAC47F,MAAF,IAAY,4BAAYwnG,MAAZ,EAAoBl0M,KAApB,EAA2BkiE,KAA3B,EAAkC93D,IAAlC,EAAwC0G,CAAC,CAACyiM,eAA1C,EAA2DziM,CAAC,CAAC8jM,UAA7D,EAAyEwsE,KAAzE,CARzB;AAAA,QASI7sR,MAAM,GAAGuc,CAAC,CAACvc,MAAF,IAAY,4BAAYyL,KAAZ,EAAmBkiE,KAAnB,CATzB;AAAA,QAUIq9H,MAVJ;AAAA,QAWIzuF,QAXJ;AAAA,QAYIl/G,IAZJ;AAAA,QAaIkF,MAbJ;AAAA,QAcIgsM,QAdJ;AAeA,QAAIz9F,KAAJ,EAAW70F,GAAG,CAACw7E,GAAJ,GAAUqZ,KAAV;;AAEX,QAAIj7F,IAAI,KAAK8oP,uBAAb,EAA2B;AACzB,UAAI/yL,KAAK,IAAI5rE,MAAM,CAAC9K,MAAP,GAAgB02E,KAA7B,EAAoC;AAClCwqJ,QAAAA,KAAK,CAAC8C,QAAN,CAAelhO,IAAf,CAAoB,qDAApB;AACA84G,QAAAA,KAAK,GAAG9wG,MAAM,CAACf,KAAP,CAAa,CAAb,EAAgB2sE,KAAK,GAAG,CAAxB,CAAR;AACA2iI,QAAAA,QAAQ,GAAG,IAAX;AACD,OAJD,MAIO;AACLz9F,QAAAA,KAAK,GAAG9wG,MAAR;AACD;;AAED,UAAI,0BAAW3C,IAAI,GAAGkf,CAAC,CAAClf,IAApB,CAAJ,EAA+B;AAC7B;AACA,YAAI,CAACkf,CAAC,CAACvc,MAAH,IAAayL,KAAK,CAACqlG,KAAK,CAAC,CAAD,CAAN,CAAL,KAAoB,CAArC,EAAwC;AACtCA,UAAAA,KAAK,GAAGA,KAAK,CAAC7xG,KAAN,CAAY,CAAZ,CAAR;AACD,SAJ4B,CAI3B;;;AAGFsD,QAAAA,MAAM,GAAGuuG,KAAK,CAAC3uG,MAAN,CAAa,CAACnG,GAAD,EAAMpD,KAAN,KAAgB+C,IAAI,CAACK,GAAL,CAASA,GAAT,EAAcqB,IAAI,CAACzE,KAAD,EAAQ2jB,CAAR,CAAlB,CAA7B,EAA4D,CAA5D,CAAT;AACD,OARD,MAQO;AACLlf,QAAAA,IAAI,GAAG,wBAASkF,MAAM,GAAGlF,IAAI,IAAI,CAA1B,CAAP;AACD;;AAEDyzG,MAAAA,KAAK,GAAGA,KAAK,CAACzxG,GAAN,CAAU,CAACzG,KAAD,EAAQ8C,KAAR,KAAkB,0BAAO;AACzCA,QAAAA,KAAK,EAAEA,KADkC;AAEzC+wH,QAAAA,KAAK,EAAEtU,MAAM,CAACv/G,KAAD,EAAQ8C,KAAR,EAAeo1G,KAAf,CAF4B;AAGzCl4G,QAAAA,KAAK,EAAEA,KAHkC;AAIzC2J,QAAAA,MAAM,EAAEA,MAJiC;AAKzClF,QAAAA,IAAI,EAAEA,IAAI,CAACzE,KAAD,EAAQ2jB,CAAR;AAL+B,OAAP,CAA5B,CAAR;;AAQA,UAAIgyL,QAAJ,EAAc;AACZA,QAAAA,QAAQ,GAAGvuM,MAAM,CAAC8wG,KAAK,CAAC57G,MAAP,CAAjB;AACA47G,QAAAA,KAAK,CAACj7G,IAAN,CAAW,0BAAO;AAChB6F,UAAAA,KAAK,EAAEo1G,KAAK,CAAC57G,MADG;AAEhBu3H,UAAAA,KAAK,EAAE,SAASt3H,MAAT,CAAgB6K,MAAM,CAAC9K,MAAP,GAAgB47G,KAAK,CAAC57G,MAAtC,EAA8C,UAA9C,CAFS;AAGhB0D,UAAAA,KAAK,EAAE21M,QAHS;AAIhBhsM,UAAAA,MAAM,EAAEA,MAJQ;AAKhBlF,UAAAA,IAAI,EAAEA,IAAI,CAACkxM,QAAD,EAAWhyL,CAAX;AALM,SAAP,CAAX;AAOD;AACF,KAvCD,MAuCO,IAAI1G,IAAI,KAAKgpP,yBAAb,EAA6B;AAClC7zD,MAAAA,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAT,EAAyBzuF,QAAQ,GAAG,8BAAc9wG,KAAd,EAAqBu/L,MAAM,CAAC,CAAD,CAA3B,EAAgC,oBAAKA,MAAL,CAAhC,CAApC,CADkC,CACiD;AACnF;;AAEA,UAAIhrM,MAAM,CAAC9K,MAAP,GAAgB,CAAhB,IAAqB,CAACqnB,CAAC,CAACvc,MAAxB,IAAkCgrM,MAAM,CAAC,CAAD,CAAN,KAAc,oBAAKA,MAAL,CAApD,EAAkE;AAChEhrM,QAAAA,MAAM,GAAG,CAACgrM,MAAM,CAAC,CAAD,CAAP,EAAY,oBAAKA,MAAL,CAAZ,CAAT;AACD;;AAEDl6F,MAAAA,KAAK,GAAG9wG,MAAM,CAACX,GAAP,CAAW,CAACzG,KAAD,EAAQ8C,KAAR,KAAkB,0BAAO;AAC1CA,QAAAA,KAAK,EAAEA,KADmC;AAE1C+wH,QAAAA,KAAK,EAAEtU,MAAM,CAACv/G,KAAD,EAAQ8C,KAAR,EAAesE,MAAf,CAF6B;AAG1CpH,QAAAA,KAAK,EAAEA,KAHmC;AAI1Ck0R,QAAAA,IAAI,EAAEvwK,QAAQ,CAAC3jH,KAAD;AAJ4B,OAAP,CAA7B,CAAR;AAMD,KAdM,MAcA;AACLyE,MAAAA,IAAI,GAAG2C,MAAM,CAAC9K,MAAP,GAAgB,CAAvB;AACAqnH,MAAAA,QAAQ,GAAG,8BAAc9wG,KAAd,CAAX;AACAqlG,MAAAA,KAAK,GAAG9wG,MAAM,CAACX,GAAP,CAAW,CAACzG,KAAD,EAAQ8C,KAAR,KAAkB,0BAAO;AAC1CA,QAAAA,KAAK,EAAEA,KADmC;AAE1C+wH,QAAAA,KAAK,EAAEtU,MAAM,CAACv/G,KAAD,EAAQ8C,KAAR,EAAesE,MAAf,CAF6B;AAG1CpH,QAAAA,KAAK,EAAEA,KAHmC;AAI1Ck0R,QAAAA,IAAI,EAAEpxR,KAAK,GAAG6gH,QAAQ,CAAC3jH,KAAD,CAAX,GAAqB,CAJU;AAK1Cm0R,QAAAA,KAAK,EAAErxR,KAAK,KAAK2B,IAAV,GAAiB,CAAjB,GAAqBk/G,QAAQ,CAACv8G,MAAM,CAACtE,KAAK,GAAG,CAAT,CAAP;AALM,OAAP,CAA7B,CAAR;AAOD;;AAEDugB,IAAAA,GAAG,CAACyvC,MAAJ,GAAaolD,KAAb;AACA70F,IAAAA,GAAG,CAAC1F,GAAJ,GAAUu6F,KAAV;AACA,SAAKl4G,KAAL,GAAak4G,KAAb;AACA,WAAO70F,GAAP;AACD;;AA5FgC,CAAnC;;AAgGA,MAAM+wQ,OAAO,GAAG1zR,CAAC,IAAIA,CAAC,CAACoyD,MAAF,CAAS3vD,CAA9B;;AAEA,MAAMkxR,OAAO,GAAG3zR,CAAC,IAAIA,CAAC,CAACoyD,MAAF,CAASpxC,CAA9B;;AAEA,MAAM4yQ,OAAO,GAAG5zR,CAAC,IAAIA,CAAC,CAAC6yC,MAAF,CAASpwC,CAA9B;;AAEA,MAAMoxR,OAAO,GAAG7zR,CAAC,IAAIA,CAAC,CAAC6yC,MAAF,CAAS7xB,CAA9B;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAAS8yQ,QAAT,CAAkBn0R,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACDm0R,QAAQ,CAACrvD,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,gBAAY;AADF,GAFQ;AAKpB,YAAU,CAAC;AACT,YAAQ,SADC;AAET,YAAQ,OAFC;AAGT,eAAW;AAHF,GAAD,EAIP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,eAAW;AAHV,GAJO,EAQP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,eAAW;AAHV,GARO,EAYP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,eAAW,UAHV;AAID,cAAU,CAAC,YAAD,EAAe,UAAf,EAA2B,QAA3B;AAJT,GAhBO,EAqBP;AACD,YAAQ,OADP;AAED,YAAQ,MAFP;AAGD,eAAW,MAHV;AAID,cAAU,CAAC,MAAD,EAAS,KAAT,EAAgB,OAAhB,EAAyB,UAAzB,EAAqC,YAArC;AAJT,GArBO,EA0BP;AACD,YAAQ,SADP;AAED,YAAQ;AAFP,GA1BO,EA6BP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GA7BO;AALU,CAAtB;AAwCA,wBAASqvD,QAAT,EAAmBvvD,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIo7C,EAAE,GAAGj1P,CAAC,CAACywQ,OAAF,IAAaA,OAAtB;AAAA,QACIvb,EAAE,GAAGl1P,CAAC,CAAC0wQ,OAAF,IAAaA,OADtB;AAAA,QAEIx2K,EAAE,GAAGl6F,CAAC,CAAC2wQ,OAAF,IAAaA,OAFtB;AAAA,QAGIjC,EAAE,GAAG1uQ,CAAC,CAAC4wQ,OAAF,IAAaA,OAHtB;AAAA,QAIIjoD,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,MAJjB;AAAA,QAKI2iC,MAAM,GAAGtrP,CAAC,CAACsrP,MAAF,IAAY,UALzB;AAAA,QAMIzqQ,KAAK,GAAGmf,CAAC,CAACnf,KAAF,IAAW,MANvB;AAAA,QAOI6G,IAAI,GAAGopR,KAAK,CAAC30R,GAAN,CAAU0E,KAAK,GAAG,GAAR,GAAcyqQ,MAAxB,KAAmCwlB,KAAK,CAAC30R,GAAN,CAAU0E,KAAV,CAP9C;;AASA,QAAI,CAAC6G,IAAL,EAAW;AACT,2BAAM,gCAAgCsY,CAAC,CAACnf,KAAlC,IAA2Cmf,CAAC,CAACsrP,MAAF,GAAW,MAAMtrP,CAAC,CAACsrP,MAAnB,GAA4B,EAAvE,CAAN;AACD;;AAEDzxC,IAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAI;AAC7BA,MAAAA,CAAC,CAAC4rO,EAAD,CAAD,GAAQjhO,IAAI,CAACutQ,EAAE,CAACl4Q,CAAD,CAAH,EAAQm4Q,EAAE,CAACn4Q,CAAD,CAAV,EAAem9G,EAAE,CAACn9G,CAAD,CAAjB,EAAsB2xR,EAAE,CAAC3xR,CAAD,CAAxB,CAAZ;AACD,KAFD;AAGA,WAAO88N,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC4O,EAApC,CAAP;AACD;;AAnB2B,CAA9B;;AAuBA,MAAM/6M,IAAI,GAAG,CAACqnP,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB,MAAMzZ,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4Bh7J,EAA5B,GAAiC,GAAjC,GAAuCw0K,EAAxE;;AAEA,MAAMqC,KAAK,GAAG,CAAC3mB,EAAD,EAAK34L,EAAL,EAASu/M,EAAT,EAAapnB,EAAb,KAAoBh8O,IAAI,CAAC6jD,EAAE,GAAGryE,IAAI,CAACgU,GAAL,CAASg3P,EAAT,CAAN,EAAoB34L,EAAE,GAAGryE,IAAI,CAAC+T,GAAL,CAASi3P,EAAT,CAAzB,EAAuCR,EAAE,GAAGxqQ,IAAI,CAACgU,GAAL,CAAS49Q,EAAT,CAA5C,EAA0DpnB,EAAE,GAAGxqQ,IAAI,CAAC+T,GAAL,CAAS69Q,EAAT,CAA/D,CAAtC;;AAEA,MAAM52E,GAAG,GAAG,CAAC66D,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB;AAC9B,MAAIvpQ,EAAE,GAAG+0F,EAAE,GAAG+6J,EAAd;AAAA,MACI92P,EAAE,GAAGuwQ,EAAE,GAAGxZ,EADd;AAAA,MAEI+b,EAAE,GAAG7xR,IAAI,CAACqC,IAAL,CAAU0jB,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAzB,IAA+B,CAFxC;AAAA,MAGI+yQ,EAAE,GAAG,MAAM9xR,IAAI,CAACuQ,KAAL,CAAWwO,EAAX,EAAegH,EAAf,CAAN,GAA2B/lB,IAAI,CAACuiC,EAHzC;AAIA,SAAO,MAAMszO,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4B+b,EAA5B,GAAiC,GAAjC,GAAuCA,EAAvC,GAA4C,GAA5C,GAAkDC,EAAlD,GAAuD,MAAvD,GAAgE,GAAhE,GAAsEh3K,EAAtE,GAA2E,GAA3E,GAAiFw0K,EAAxF;AACD,CAND;;AAQA,MAAMyC,IAAI,GAAG,CAAC/mB,EAAD,EAAK34L,EAAL,EAASu/M,EAAT,EAAapnB,EAAb,KAAoBxvD,GAAG,CAAC3oI,EAAE,GAAGryE,IAAI,CAACgU,GAAL,CAASg3P,EAAT,CAAN,EAAoB34L,EAAE,GAAGryE,IAAI,CAAC+T,GAAL,CAASi3P,EAAT,CAAzB,EAAuCR,EAAE,GAAGxqQ,IAAI,CAACgU,GAAL,CAAS49Q,EAAT,CAA5C,EAA0DpnB,EAAE,GAAGxqQ,IAAI,CAAC+T,GAAL,CAAS69Q,EAAT,CAA/D,CAApC;;AAEA,MAAM90C,KAAK,GAAG,CAAC+4B,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB;AAChC,QAAMvpQ,EAAE,GAAG+0F,EAAE,GAAG+6J,EAAhB;AAAA,QACM92P,EAAE,GAAGuwQ,EAAE,GAAGxZ,EADhB;AAAA,QAEMpB,EAAE,GAAG,OAAO3uP,EAAE,GAAGhH,EAAZ,CAFX;AAAA,QAGMizQ,EAAE,GAAG,OAAOjzQ,EAAE,GAAGgH,EAAZ,CAHX;AAIA,SAAO,MAAM8vP,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,IAA6BD,EAAE,GAAGnB,EAAlC,IAAwC,GAAxC,IAA+CoB,EAAE,GAAGkc,EAApD,IAA0D,GAA1D,IAAiEl3K,EAAE,GAAGk3K,EAAtE,IAA4E,GAA5E,IAAmF1C,EAAE,GAAG5a,EAAxF,IAA8F,GAA9F,GAAoG55J,EAApG,GAAyG,GAAzG,GAA+Gw0K,EAAtH;AACD,CAND;;AAQA,MAAM2C,MAAM,GAAG,CAACjnB,EAAD,EAAK34L,EAAL,EAASu/M,EAAT,EAAapnB,EAAb,KAAoB1tB,KAAK,CAACzqK,EAAE,GAAGryE,IAAI,CAACgU,GAAL,CAASg3P,EAAT,CAAN,EAAoB34L,EAAE,GAAGryE,IAAI,CAAC+T,GAAL,CAASi3P,EAAT,CAAzB,EAAuCR,EAAE,GAAGxqQ,IAAI,CAACgU,GAAL,CAAS49Q,EAAT,CAA5C,EAA0DpnB,EAAE,GAAGxqQ,IAAI,CAAC+T,GAAL,CAAS69Q,EAAT,CAA/D,CAAxC;;AAEA,MAAMM,MAAM,GAAG,CAACrc,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB,MAAMzZ,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4BwZ,EAA5B,GAAiC,GAAjC,GAAuCx0K,EAA1E;;AAEA,MAAMq3K,MAAM,GAAG,CAACtc,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB,MAAMzZ,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4Bh7J,EAA5B,GAAiC,GAAjC,GAAuCw0K,EAA1E;;AAEA,MAAM8C,MAAM,GAAG,CAACpnB,EAAD,EAAK34L,EAAL,EAASu/M,EAAT,EAAapnB,EAAb,KAAoB;AACjC,QAAM6nB,EAAE,GAAGryR,IAAI,CAACgU,GAAL,CAASg3P,EAAT,CAAX;AAAA,QACMsnB,EAAE,GAAGtyR,IAAI,CAAC+T,GAAL,CAASi3P,EAAT,CADX;AAAA,QAEMunB,EAAE,GAAGvyR,IAAI,CAACgU,GAAL,CAAS49Q,EAAT,CAFX;AAAA,QAGMnmB,EAAE,GAAGzrQ,IAAI,CAAC+T,GAAL,CAAS69Q,EAAT,CAHX;AAAA,QAIMlhD,EAAE,GAAG1wO,IAAI,CAACiT,GAAL,CAAS2+Q,EAAE,GAAG5mB,EAAd,IAAoBhrQ,IAAI,CAACuiC,EAAzB,GAA8BqvP,EAAE,IAAI5mB,EAApC,GAAyC4mB,EAAE,GAAG5mB,EAJzD;AAKA,SAAO,MAAM34L,EAAE,GAAGggN,EAAX,GAAgB,GAAhB,GAAsBhgN,EAAE,GAAGigN,EAA3B,GAAgC,GAAhC,GAAsCjgN,EAAtC,GAA2C,GAA3C,GAAiDA,EAAjD,GAAsD,OAAtD,IAAiEq+J,EAAE,GAAG,CAAH,GAAO,CAA1E,IAA+E,GAA/E,GAAqFr+J,EAAE,GAAGkgN,EAA1F,GAA+F,GAA/F,GAAqGlgN,EAAE,GAAGo5L,EAA1G,GAA+G,GAA/G,GAAqHjB,EAAE,GAAG+nB,EAA1H,GAA+H,GAA/H,GAAqI/nB,EAAE,GAAGiB,EAAjJ;AACD,CAPD;;AASA,MAAM+mB,SAAS,GAAG,CAAC3c,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB;AACpC,QAAM59L,CAAC,GAAG,CAACmkL,EAAE,GAAG/6J,EAAN,IAAY,CAAtB;AACA,SAAO,MAAM+6J,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4BpkL,CAA5B,GAAgC,GAAhC,GAAsCokL,EAAtC,GAA2C,GAA3C,GAAiDpkL,CAAjD,GAAqD,GAArD,GAA2D49L,EAA3D,GAAgE,GAAhE,GAAsEx0K,EAAtE,GAA2E,GAA3E,GAAiFw0K,EAAxF;AACD,CAHD;;AAKA,MAAMmD,SAAS,GAAG,CAAC5c,EAAD,EAAKC,EAAL,EAASh7J,EAAT,EAAaw0K,EAAb,KAAoB;AACpC,QAAM59L,CAAC,GAAG,CAACokL,EAAE,GAAGwZ,EAAN,IAAY,CAAtB;AACA,SAAO,MAAMzZ,EAAN,GAAW,GAAX,GAAiBC,EAAjB,GAAsB,GAAtB,GAA4BD,EAA5B,GAAiC,GAAjC,GAAuCnkL,CAAvC,GAA2C,GAA3C,GAAiDopB,EAAjD,GAAsD,GAAtD,GAA4DppB,CAA5D,GAAgE,GAAhE,GAAsEopB,EAAtE,GAA2E,GAA3E,GAAiFw0K,EAAxF;AACD,CAHD;;AAKA,MAAMoD,SAAS,GAAG,CAAC1nB,EAAD,EAAK34L,EAAL,EAASu/M,EAAT,EAAapnB,EAAb,KAAoB;AACpC,QAAM6nB,EAAE,GAAGryR,IAAI,CAACgU,GAAL,CAASg3P,EAAT,CAAX;AAAA,QACMsnB,EAAE,GAAGtyR,IAAI,CAAC+T,GAAL,CAASi3P,EAAT,CADX;AAAA,QAEMunB,EAAE,GAAGvyR,IAAI,CAACgU,GAAL,CAAS49Q,EAAT,CAFX;AAAA,QAGMnmB,EAAE,GAAGzrQ,IAAI,CAAC+T,GAAL,CAAS69Q,EAAT,CAHX;AAAA,QAIMe,EAAE,GAAG,CAACtgN,EAAE,GAAGm4L,EAAN,IAAY,CAJvB;AAKA,SAAO,MAAMn4L,EAAE,GAAGggN,EAAX,GAAgB,GAAhB,GAAsBhgN,EAAE,GAAGigN,EAA3B,GAAgC,GAAhC,GAAsCK,EAAE,GAAGN,EAA3C,GAAgD,GAAhD,GAAsDM,EAAE,GAAGL,EAA3D,GAAgE,GAAhE,GAAsEK,EAAE,GAAGJ,EAA3E,GAAgF,GAAhF,GAAsFI,EAAE,GAAGlnB,EAA3F,GAAgG,GAAhG,GAAsGjB,EAAE,GAAG+nB,EAA3G,GAAgH,GAAhH,GAAsH/nB,EAAE,GAAGiB,EAAlI;AACD,CAPD;;AASA,MAAMimB,KAAK,GAAG,uBAAQ;AACpB,UAAQljQ,IADY;AAEpB,iBAAemjQ,KAFK;AAGpB,SAAO32E,GAHa;AAIpB,gBAAc+2E,IAJM;AAKpB,WAASj1C,KALW;AAMpB,kBAAgBm1C,MANI;AAOpB,2BAAyBC,MAPL;AAQpB,yBAAuBC,MARH;AASpB,uBAAqBC,MATD;AAUpB,yBAAuBI,SAVH;AAWpB,uBAAqBC,SAXD;AAYpB,qBAAmBC;AAZC,CAAR,CAAd;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASE,GAAT,CAAat1R,MAAb,EAAqB;AACnB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDs1R,GAAG,CAACxwD,UAAJ,GAAiB;AACf,UAAQ,KADO;AAEf,cAAY;AACV,gBAAY;AADF,GAFG;AAKf,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAHO,EAOP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAPO,EAWP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAXO,EAeP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,YAAD,EAAe,UAAf;AALV,GAfO;AALK,CAAjB;AA4BA,wBAASwwD,GAAT,EAAc1wD,uBAAd,EAAyB;AACvBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI8O,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,YAAD,EAAe,UAAf,CAAjB;AAAA,QACI8P,UAAU,GAAG9P,EAAE,CAAC,CAAD,CADnB;AAAA,QAEIgQ,QAAQ,GAAGhQ,EAAE,CAAC,CAAD,CAFjB;AAAA,QAGI95G,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAF,IAAWxmC,aAHvB;AAAA,QAIIljF,KAAK,GAAG6a,CAAC,CAACy4N,UAAF,IAAgB,CAJ5B;AAAA,QAKI79M,IAAI,GAAG5a,CAAC,CAAC24N,QAAF,IAAc,IAAd,GAAqB34N,CAAC,CAAC24N,QAAvB,GAAkC,IAAIv5O,IAAI,CAACuiC,EALtD;AAAA,QAMIt5B,IAAI,GAAGwxN,KAAK,CAAC1qK,MANjB;AAAA,QAOI1rD,MAAM,GAAG4E,IAAI,CAACvF,GAAL,CAAS+rH,KAAT,CAPb;AAAA,QAQItnH,CAAC,GAAG9D,MAAM,CAAC9K,MARf;AAAA,QASI4H,CAAC,GAAG4E,KATR;AAAA,QAUIwR,CAAC,GAAG,CAACikB,IAAI,GAAGz1B,KAAR,IAAiB,kBAAI1B,MAAJ,CAVzB;AAAA,QAWItE,KAAK,GAAG,oBAAMoI,CAAN,CAXZ;AAAA,QAYIlO,CAZJ;AAAA,QAaI0D,CAbJ;AAAA,QAcIwO,CAdJ;;AAgBA,QAAIyU,CAAC,CAAC3c,IAAN,EAAY;AACVlE,MAAAA,KAAK,CAACkE,IAAN,CAAW,CAAC9C,CAAD,EAAI6G,CAAJ,KAAU3D,MAAM,CAAClD,CAAD,CAAN,GAAYkD,MAAM,CAAC2D,CAAD,CAAvC;AACD;;AAED,SAAK/N,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBkS,MAAAA,CAAC,GAAG9H,MAAM,CAACtE,KAAK,CAAC9F,CAAD,CAAN,CAAV;AACA0D,MAAAA,CAAC,GAAGsL,IAAI,CAAClJ,KAAK,CAAC9F,CAAD,CAAN,CAAR;AACA0D,MAAAA,CAAC,CAAC07O,UAAD,CAAD,GAAgBl4O,CAAhB;AACAxD,MAAAA,CAAC,CAAC47O,QAAD,CAAD,GAAcp4O,CAAC,IAAIgL,CAAC,GAAGoL,CAAvB;AACD;;AAED,SAAKta,KAAL,GAAaoH,MAAb;AACA,WAAOo2N,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC4O,EAApC,CAAP;AACD;;AA/BsB,CAAzB;AAmCA,MAAMspD,aAAa,GAAG,CAAtB;;AAEA,SAASC,WAAT,CAAqBhjR,KAArB,EAA4B;AAC1B,QAAMoK,IAAI,GAAGpK,KAAK,CAACoK,IAAnB;AACA,SAAO,CAACpK,KAAK,CAACixM,IAAP,KAAgB7mM,IAAI,KAAK0xI,iBAAT,IAAmB1xI,IAAI,KAAK8gP,cAA5B,IAAmC9gP,IAAI,KAAK+gP,eAA5D,CAAP;AACD;;AAED,SAAS83B,UAAT,CAAoB74Q,IAApB,EAA0B;AACxB,SAAO,6BAAaA,IAAb,KAAsBA,IAAI,KAAKgwI,qBAAtC;AACD;;AAED,MAAMkxE,IAAI,GAAG,qBAAM,CAAC,KAAD,EAAQ,UAAR,EAAoB,OAApB,EAA6B,MAA7B,EAAqC,QAArC,EAA+C,cAA/C,EAA+D,aAA/D,EAA8E,QAA9E,EAAwF,WAAxF,EAAqG,WAArG,EAAkH,WAAlH,EAA+H,WAA/H,EAA4I,gBAA5I,EAA8J,MAA9J,EAAsK,MAAtK,EAA8K,MAA9K,EAAsL,OAAtL,EAA+L,WAA/L,EAA4M,OAA5M,EAAqN,SAArN,EAAgO,aAAhO,EAA+O,kBAA/O,CAAN,CAAb;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS43D,KAAT,CAAe11R,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;;AACA,OAAK09N,QAAL,CAAc,IAAd,EAFqB,CAEA;AACtB;;AACD,wBAASg4D,KAAT,EAAgB9wD,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIlB,EAAE,GAAGkB,KAAK,CAAC8C,QAAf;AAAA,QACImhC,OAAO,GAAG,KAAKzhQ,KADnB;AAAA,QAEIiB,GAAG,GAAG+0R,QAAQ,CAACryQ,CAAD,CAFlB;;AAIA,QAAI,CAAC89O,OAAD,IAAYxgQ,GAAG,KAAKwgQ,OAAO,CAACxkP,IAAhC,EAAsC;AACpC,WAAKjd,KAAL,GAAayhQ,OAAO,GAAG,sBAAMxgQ,GAAN,GAAvB;AACD;;AAED,SAAKA,GAAL,IAAY0iB,CAAZ,EAAe,IAAI,CAACw6M,IAAI,CAACl9N,GAAD,CAAT,EAAgB;AAC7B;AACA,UAAIA,GAAG,KAAK,SAAR,IAAqB60R,UAAU,CAACr0B,OAAO,CAACxkP,IAAT,CAAnC,EAAmD,SAFtB,CAEgC;;AAE7D,gCAAWwkP,OAAO,CAACxgQ,GAAD,CAAlB,IAA2BwgQ,OAAO,CAACxgQ,GAAD,CAAP,CAAa0iB,CAAC,CAAC1iB,GAAD,CAAd,CAA3B,GAAkDq7N,EAAE,CAACl9N,IAAH,CAAQ,iCAAiC6B,GAAzC,CAAlD;AACD;;AAEDg1R,IAAAA,cAAc,CAACx0B,OAAD,EAAU99O,CAAV,EAAauyQ,aAAa,CAACz0B,OAAD,EAAU99O,CAAV,EAAawyQ,eAAe,CAAC10B,OAAD,EAAU99O,CAAV,EAAa24M,EAAb,CAA5B,CAA1B,CAAd;AACA,WAAOkB,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAP;AACD;;AAnBwB,CAA3B;;AAuBA,SAASm0D,QAAT,CAAkBryQ,CAAlB,EAAqB;AACnB,MAAIjjB,CAAC,GAAGijB,CAAC,CAAC1G,IAAV;AAAA,MACIpT,CAAC,GAAG,EADR;AAAA,MAEIqB,CAFJ,CADmB,CAGZ;;AAEP,MAAIxK,CAAC,KAAKusJ,qBAAV,EAAsB,OAAOA,wBAAa,GAAb,GAAmB0B,iBAA1B;;AAEtB,MAAIynI,iBAAiB,CAACzyQ,CAAD,CAArB,EAA0B;AACxBzY,IAAAA,CAAC,GAAGyY,CAAC,CAAC0yQ,SAAF,GAAc1yQ,CAAC,CAAC0yQ,SAAF,CAAY/5R,MAA1B,GAAmCqnB,CAAC,CAACyuL,MAAF,GAAWzuL,CAAC,CAACyuL,MAAF,CAAS91M,MAAT,GAAkB,EAAEqnB,CAAC,CAAC2yQ,SAAF,IAAe,IAAjB,CAA7B,GAAsD,CAA7F;AACAzsR,IAAAA,CAAC,GAAGqB,CAAC,KAAK,CAAN,GAAU+hJ,wBAAa,GAAvB,GAA6B/hJ,CAAC,KAAK,CAAN,GAAUizP,uBAAY,GAAtB,GAA4B,EAA7D;AACD;;AAED,SAAO,CAACt0P,CAAC,GAAGnJ,CAAJ,IAASiuJ,iBAAV,EAAkBxtJ,WAAlB,EAAP;AACD;;AAED,SAASi1R,iBAAT,CAA2BzyQ,CAA3B,EAA8B;AAC5B,QAAMjjB,CAAC,GAAGijB,CAAC,CAAC1G,IAAZ;AACA,SAAO,6BAAavc,CAAb,KAAmBA,CAAC,KAAKw9P,eAAzB,IAAiCx9P,CAAC,KAAKwuN,cAAvC,KAA+CvrM,CAAC,CAACm2F,MAAF,IAAYn2F,CAAC,CAAC6a,KAAF,IAAW7a,CAAC,CAAC6a,KAAF,CAAQliC,MAAnB,IAA6BqnB,CAAC,CAAC6a,KAAF,CAAQ93B,KAAR,CAAc2B,kBAAd,CAAxF,CAAP;AACD;;AAED,SAAS8tR,eAAT,CAAyBtjR,KAAzB,EAAgC8Q,CAAhC,EAAmC24M,EAAnC,EAAuC;AACrC;AACA,QAAM18B,GAAG,GAAGy2F,SAAS,CAACxjR,KAAD,EAAQ8Q,CAAC,CAAC4yQ,SAAV,EAAqBj6D,EAArB,CAArB;AACA,MAAI18B,GAAG,GAAG,CAAC,CAAX,EAAc,OAAOA,GAAP;AACd,MAAIwS,MAAM,GAAGzuL,CAAC,CAACyuL,MAAf;AAAA,MACIn1L,IAAI,GAAGpK,KAAK,CAACoK,IADjB;AAAA,MAEI21B,IAAI,GAAGjvB,CAAC,CAACivB,IAAF,IAAUjvB,CAAC,CAACivB,IAAF,KAAWs/E,SAAX,IAAwB2jK,WAAW,CAAChjR,KAAD,CAFxD;AAAA,MAGI3H,CAHJ;AAAA,MAIIo1M,GAJJ;AAKA,MAAI,CAAClO,MAAL,EAAa,OAAO,CAAP,CATwB,CASd;;AAEvB,MAAI0jF,UAAU,CAAC74Q,IAAD,CAAV,IAAoB0G,CAAC,CAAClK,OAAtB,IAAiC24L,MAAM,CAAC,CAAD,CAAN,KAAc,oBAAKA,MAAL,CAAnD,EAAiE;AAC/DA,IAAAA,MAAM,GAAGokF,SAAS,CAACv5Q,IAAD,EAAOm1L,MAAP,EAAezuL,CAAC,CAAC6a,KAAjB,EAAwB7a,CAAC,CAAClK,OAA1B,EAAmCkK,CAAC,CAACuvB,QAArC,EAA+CvvB,CAAC,CAACi5G,QAAjD,CAAlB;AACD,GAboC,CAanC;;;AAGF,MAAIhqF,IAAI,IAAIjvB,CAAC,CAAC8yQ,SAAF,IAAe,IAAvB,IAA+B9yQ,CAAC,CAAC+yQ,SAAF,IAAe,IAA9C,IAAsD/yQ,CAAC,CAAC2yQ,SAAF,IAAe,IAAzE,EAA+E;AAC7EprR,IAAAA,CAAC,GAAG,CAACknM,MAAM,GAAGA,MAAM,CAAC/rM,KAAP,EAAV,EAA0B/J,MAA1B,GAAmC,CAAnC,IAAwC,CAA5C;;AAEA,QAAIs2C,IAAJ,EAAU;AACR,UAAIw/J,MAAM,CAAC,CAAD,CAAN,GAAY,CAAhB,EAAmBA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAZ;AACnB,UAAIA,MAAM,CAAClnM,CAAD,CAAN,GAAY,CAAhB,EAAmBknM,MAAM,CAAClnM,CAAD,CAAN,GAAY,CAAZ;AACpB;;AAED,QAAIyY,CAAC,CAAC8yQ,SAAF,IAAe,IAAnB,EAAyBrkF,MAAM,CAAC,CAAD,CAAN,GAAYzuL,CAAC,CAAC8yQ,SAAd;AACzB,QAAI9yQ,CAAC,CAAC+yQ,SAAF,IAAe,IAAnB,EAAyBtkF,MAAM,CAAClnM,CAAD,CAAN,GAAYyY,CAAC,CAAC+yQ,SAAd;;AAEzB,QAAI/yQ,CAAC,CAAC2yQ,SAAF,IAAe,IAAnB,EAAyB;AACvBh2E,MAAAA,GAAG,GAAG38L,CAAC,CAAC2yQ,SAAR;AACA,YAAMt5R,CAAC,GAAGsjN,GAAG,GAAGlO,MAAM,CAAClnM,CAAD,CAAZ,GAAkBA,CAAC,GAAG,CAAtB,GAA0Bo1M,GAAG,GAAGlO,MAAM,CAAC,CAAD,CAAZ,GAAkB,CAAlB,GAAsBlnM,CAA1D;AACA,UAAIlO,CAAC,KAAKkO,CAAV,EAAaoxN,EAAE,CAACl9N,IAAH,CAAQ,4CAAR,EAAsDkhN,GAAtD;AACblO,MAAAA,MAAM,CAAC5xK,MAAP,CAAcxjC,CAAd,EAAiB,CAAjB,EAAoBsjN,GAApB;AACD;AACF,GAjCoC,CAiCnC;;;AAGFztM,EAAAA,KAAK,CAACu/L,MAAN,CAAaukF,WAAW,CAAC15Q,IAAD,EAAOm1L,MAAP,EAAekqB,EAAf,CAAxB,EApCqC,CAoCQ;AAC7C;;AAEA,MAAIr/M,IAAI,KAAKqhP,kBAAb,EAAsB;AACpBzrP,IAAAA,KAAK,CAACglJ,OAAN,CAAcl0I,CAAC,CAACizQ,cAAF,GAAmBC,wBAAnB,GAAmC3kK,SAAjD;AACD,GAzCoC,CAyCnC;;;AAGF,MAAIvuG,CAAC,CAAC4/L,IAAF,IAAU1wM,KAAK,CAAC0wM,IAApB,EAA0B;AACxB1wM,IAAAA,KAAK,CAAC0wM,IAAN,CAAW5/L,CAAC,CAAC4/L,IAAF,KAAW,IAAX,IAAmB,0BAAU1wM,KAAV,EAAiB8Q,CAAC,CAAC4/L,IAAnB,CAAnB,IAA+C,IAA1D;AACD,GA9CoC,CA8CnC;;;AAGF,SAAOnR,MAAM,CAAC91M,MAAd;AACD;;AAED,SAAS+5R,SAAT,CAAmBxjR,KAAnB,EAA0B+sL,GAA1B,EAA+B08B,EAA/B,EAAmC;AACjC,MAAI18B,GAAJ,EAAS;AACP/sL,IAAAA,KAAK,CAACu/L,MAAN,CAAaukF,WAAW,CAAC9jR,KAAK,CAACoK,IAAP,EAAa2iL,GAAb,EAAkB08B,EAAlB,CAAxB;AACA,WAAO18B,GAAG,CAACtjM,MAAX;AACD,GAHD,MAGO;AACL,WAAO,CAAC,CAAR;AACD;AACF;;AAED,SAASk6R,SAAT,CAAmBv5Q,IAAnB,EAAyBm1L,MAAzB,EAAiC5zK,KAAjC,EAAwCzvB,GAAxC,EAA6CmkC,QAA7C,EAAuD0pF,QAAvD,EAAiE;AAC/D,MAAIg3E,IAAI,GAAG7wM,IAAI,CAACiT,GAAL,CAAS,oBAAKwoB,KAAL,IAAcA,KAAK,CAAC,CAAD,CAA5B,CAAX;AAAA,MACIs2K,IAAI,GAAGlB,IAAI,IAAIA,IAAI,GAAG,IAAI7kM,GAAf,CADf;AAAA,MAEIlF,CAAC,GAAGoT,IAAI,KAAK6gP,cAAT,GAAe,uBAAQ1rD,MAAR,EAAgB,IAAhB,EAAsB0C,IAAtB,CAAf,GAA6C73L,IAAI,KAAK+gP,eAAT,GAAgB,uBAAQ5rD,MAAR,EAAgB,IAAhB,EAAsB0C,IAAtB,EAA4B,GAA5B,CAAhB,GAAmD73L,IAAI,KAAK8gP,cAAT,GAAe,uBAAQ3rD,MAAR,EAAgB,IAAhB,EAAsB0C,IAAtB,EAA4B5hK,QAAQ,IAAI,CAAxC,CAAf,GAA4Dj2B,IAAI,KAAKghP,iBAAT,GAAkB,0BAAW7rD,MAAX,EAAmB,IAAnB,EAAyB0C,IAAzB,EAA+Bl4E,QAAQ,IAAI,CAA3C,CAAlB,GAAkE,0BAAWw1E,MAAX,EAAmB,IAAnB,EAAyB0C,IAAzB,CAFtO;AAGA1C,EAAAA,MAAM,GAAGA,MAAM,CAAC/rM,KAAP,EAAT;AACA+rM,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYvoM,CAAC,CAAC,CAAD,CAAb;AACAuoM,EAAAA,MAAM,CAACA,MAAM,CAAC91M,MAAP,GAAgB,CAAjB,CAAN,GAA4BuN,CAAC,CAAC,CAAD,CAA7B;AACA,SAAOuoM,MAAP;AACD;;AAED,SAASukF,WAAT,CAAqB15Q,IAArB,EAA2Bm1L,MAA3B,EAAmCkqB,EAAnC,EAAuC;AACrC,MAAI,8BAAcr/M,IAAd,CAAJ,EAAyB;AACvB;AACA;AACA,QAAIzc,CAAC,GAAGuC,IAAI,CAACiT,GAAL,CAASo8L,MAAM,CAAC7oM,MAAP,CAAc,CAAC/I,CAAD,EAAI0O,CAAJ,KAAU1O,CAAC,IAAI0O,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAaA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAA7B,CAAzB,EAA0D,CAA1D,CAAT,CAAR;;AAEA,QAAI1O,CAAC,KAAK4xM,MAAM,CAAC91M,MAAjB,EAAyB;AACvBggO,MAAAA,EAAE,CAACl9N,IAAH,CAAQ,qCAAqC,2BAAYgzM,MAAZ,CAA7C;AACD;AACF;;AAED,SAAOA,MAAP;AACD;;AAED,SAAS8jF,aAAT,CAAuBrjR,KAAvB,EAA8B8Q,CAA9B,EAAiCoxD,KAAjC,EAAwC;AACtC,MAAI+uI,IAAI,GAAGngM,CAAC,CAACmgM,IAAb;;AAEA,MAAIA,IAAI,IAAI,CAAC,uBAAQA,IAAR,CAAb,EAA4B;AAC1B;AACA,UAAM1R,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAf;AAAA,UACMsB,EAAE,GAAGtB,MAAM,CAAC,CAAD,CADjB;AAAA,UAEMuB,EAAE,GAAG,oBAAKvB,MAAL,CAFX;AAAA,UAGM16L,IAAI,GAAGosM,IAAI,CAACpsM,IAHlB;AAIA,QAAI5O,KAAK,GAAGg7M,IAAI,CAACh7M,KAAL,IAAc,IAAd,GAAqB4qM,EAArB,GAA0BoQ,IAAI,CAACh7M,KAA3C;AAAA,QACIy1B,IAAI,GAAGulL,IAAI,CAACvlL,IAAL,IAAa,IAAb,GAAoBo1K,EAApB,GAAyBmQ,IAAI,CAACvlL,IADzC;AAEA,QAAI,CAAC7mB,IAAL,EAAW,qBAAM,6CAAN;AACX,QAAI5O,KAAK,GAAG4qM,EAAZ,EAAgB5qM,KAAK,GAAG4O,IAAI,GAAG3U,IAAI,CAACoC,IAAL,CAAUuuM,EAAE,GAAGh8L,IAAf,CAAf;AAChB,QAAI6mB,IAAI,GAAGo1K,EAAX,EAAep1K,IAAI,GAAG7mB,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW6oM,EAAE,GAAGj8L,IAAhB,CAAd;AACfosM,IAAAA,IAAI,GAAG,oBAAMh7M,KAAN,EAAay1B,IAAI,GAAG7mB,IAAI,GAAG,CAA3B,EAA8BA,IAA9B,CAAP;AACD;;AAED,MAAIosM,IAAJ,EAAU;AACR;AACAjxM,IAAAA,KAAK,CAACixM,IAAN,GAAaA,IAAb;AACD,GAHD,MAGO,IAAIjxM,KAAK,CAACixM,IAAV,EAAgB;AACrB;AACA,WAAOjxM,KAAK,CAACixM,IAAb;AACD,GAvBqC,CAuBpC;;;AAGF,MAAIjxM,KAAK,CAACoK,IAAN,KAAewhP,qBAAnB,EAA+B;AAC7B,QAAI,CAAC36C,IAAL,EAAW;AACT;AACAjxM,MAAAA,KAAK,CAACixM,IAAN,GAAajxM,KAAK,CAACu/L,MAAN,EAAb;AACD,KAHD,MAGO,IAAI,CAACzuL,CAAC,CAACyuL,MAAH,IAAa,CAACzuL,CAAC,CAAC4yQ,SAApB,EAA+B;AACpC;AACA1jR,MAAAA,KAAK,CAACu/L,MAAN,CAAa0R,IAAb;AACA/uI,MAAAA,KAAK,GAAG+uI,IAAI,CAACxnN,MAAb;AACD;AACF,GAnCqC,CAmCpC;;;AAGF,SAAOy4E,KAAP;AACD;;AAED,SAASkhN,cAAT,CAAwBpjR,KAAxB,EAA+B8Q,CAA/B,EAAkCoxD,KAAlC,EAAyC;AACvC,MAAI93D,IAAI,GAAGpK,KAAK,CAACoK,IAAjB;AAAA,MACI5T,KAAK,GAAGsa,CAAC,CAACta,KAAF,IAAW,KADvB;AAAA,MAEIm1B,KAAK,GAAG7a,CAAC,CAAC6a,KAFd,CADuC,CAGlB;;AAErB,MAAI7a,CAAC,CAACmzQ,SAAF,IAAe,IAAnB,EAAyB;AACvBt4P,IAAAA,KAAK,GAAGu4P,kBAAkB,CAAC95Q,IAAD,EAAO0G,CAAP,EAAUoxD,KAAV,CAA1B;AACD,GAFD,CAEE;AAFF,OAGK,IAAIpxD,CAAC,CAACm2F,MAAN,EAAc;AACft7E,MAAAA,KAAK,GAAGw4P,eAAe,CAAC/5Q,IAAD,EAAO0G,CAAP,EAAUoxD,KAAV,CAAvB;;AAEA,UAAI,0BAAWv2C,KAAX,CAAJ,EAAuB;AACrB,YAAI3rB,KAAK,CAACi1O,YAAV,EAAwB;AACtB,iBAAOj1O,KAAK,CAACi1O,YAAN,CAAmBtpN,KAAnB,CAAP;AACD,SAFD,MAEO;AACL,+BAAM,cAAcjiC,MAAd,CAAqB0gB,IAArB,EAA2B,gDAA3B,CAAN;AACD;AACF;AACF,KAlBoC,CAkBnC;;;AAGJ,MAAIuhB,KAAK,IAAI,gCAAgBvhB,IAAhB,CAAb,EAAoC;AAClC,WAAOpK,KAAK,CAACi1O,YAAN,CAAmB,kCAAkBmvC,IAAI,CAACz4P,KAAD,EAAQ7a,CAAC,CAAClS,OAAV,CAAtB,EAA0CkS,CAAC,CAACw2O,WAA5C,EAAyDx2O,CAAC,CAACuzQ,gBAA3D,CAAnB,CAAP;AACD,GAvBsC,CAuBrC;;;AAGF,MAAI14P,KAAK,IAAI7a,CAAC,CAACw2O,WAAX,IAA0BtnP,KAAK,CAACsnP,WAApC,EAAiD;AAC/CtnP,IAAAA,KAAK,CAACsnP,WAAN,CAAkB,4BAAYx2O,CAAC,CAACw2O,WAAd,EAA2Bx2O,CAAC,CAACuzQ,gBAA7B,CAAlB;AACD,GAFD,MAEO,IAAI,0BAAWrkR,KAAK,CAACxJ,KAAjB,CAAJ,EAA6B;AAClCwJ,IAAAA,KAAK,CAACxJ,KAAN,CAAYA,KAAZ;AACD,GAFM,MAEA,IAAI,0BAAWwJ,KAAK,CAACw1O,UAAjB,CAAJ,EAAkC;AACvCx1O,IAAAA,KAAK,CAACsnP,WAAN,CAAkB9wP,KAAK,GAAGuxP,+BAAH,GAAsBu8B,0BAA7C;AACD;;AAED,MAAI34P,KAAJ,EAAW3rB,KAAK,CAAC2rB,KAAN,CAAYy4P,IAAI,CAACz4P,KAAD,EAAQ7a,CAAC,CAAClS,OAAV,CAAhB;AACZ;;AAED,SAASslR,kBAAT,CAA4B95Q,IAA5B,EAAkC0G,CAAlC,EAAqCoxD,KAArC,EAA4C;AAC1C,MAAI93D,IAAI,KAAKuhP,eAAT,IAAiBvhP,IAAI,KAAKshP,gBAA9B,EAAqC;AACnC,yBAAM,+CAAN;AACD,GAHyC,CAGxC;;;AAGF,MAAIioB,KAAK,GAAG,CAAC7iQ,CAAC,CAACwkO,YAAF,IAAkB,IAAlB,GAAyBxkO,CAAC,CAACwkO,YAA3B,GAA0CxkO,CAAC,CAAClK,OAA7C,KAAyD,CAArE;AAAA,MACIgtQ,KAAK,GAAGxpQ,IAAI,KAAKshP,gBAAT,GAAiB,CAAjB,GAAqB,CAAC56O,CAAC,CAACukO,YAAF,IAAkB,IAAlB,GAAyBvkO,CAAC,CAACukO,YAA3B,GAA0CvkO,CAAC,CAAClK,OAA7C,KAAyD,CAD1F;AAEA,SAAO,CAAC,CAAD,EAAIkK,CAAC,CAACmzQ,SAAF,GAAc,0BAAU/hN,KAAV,EAAiB0xM,KAAjB,EAAwBD,KAAxB,CAAlB,CAAP;AACD;;AAED,SAASwQ,eAAT,CAAyB/5Q,IAAzB,EAA+B0G,CAA/B,EAAkCoxD,KAAlC,EAAyC;AACvC,MAAIshI,MAAM,GAAG1yL,CAAC,CAACyzQ,YAAf;AAAA,MACI74R,IADJ;AAAA,MAEI84R,QAFJ;;AAIA,MAAI,uBAAQ1zQ,CAAC,CAACm2F,MAAV,CAAJ,EAAuB;AACrBu9K,IAAAA,QAAQ,GAAG,kCAAkB1zQ,CAAC,CAACm2F,MAApB,EAA4Bn2F,CAAC,CAACw2O,WAA9B,EAA2Cx2O,CAAC,CAACuzQ,gBAA7C,CAAX;AACD,GAFD,MAEO;AACL34R,IAAAA,IAAI,GAAGolB,CAAC,CAACm2F,MAAF,CAAS34G,WAAT,EAAP;AACAk2R,IAAAA,QAAQ,GAAG,uBAAO94R,IAAP,CAAX;AACA,QAAI,CAAC84R,QAAL,EAAe,qBAAM,6BAA6B96R,MAA7B,CAAoConB,CAAC,CAACm2F,MAAtC,CAAN;AAChB,GAXsC,CAWrC;;;AAGF/kC,EAAAA,KAAK,GAAG93D,IAAI,KAAKohP,oBAAT,GAAqBtpL,KAAK,GAAG,CAA7B,GAAiC93D,IAAI,KAAKwhP,qBAAT,GAAsB1pL,KAAK,GAAG,CAA9B,GAAkC93D,IAAI,KAAKg6N,mBAAT,IAAqBh6N,IAAI,KAAKmhP,mBAA9B,GAAyC,CAACz6O,CAAC,CAAC2zQ,WAAH,IAAkB1B,aAA3D,GAA2E7gN,KAAtJ,CAduC,CAcsH;;AAE7J,SAAO,gCAAgB93D,IAAhB,IAAwBs6Q,YAAY,CAACF,QAAD,EAAWhhF,MAAX,EAAmB1yL,CAAC,CAAClS,OAArB,CAApC,GAAoE,0BAAW4lR,QAAX,IAAuB,qCAAqBE,YAAY,CAACF,QAAD,EAAWhhF,MAAX,CAAjC,EAAqDthI,KAArD,CAAvB,GAAqF93D,IAAI,KAAKqhP,kBAAT,GAAmB+4B,QAAnB,GAA8BA,QAAQ,CAAChxR,KAAT,CAAe,CAAf,EAAkB0uE,KAAlB,CAA9L;AACD;;AAED,SAASwiN,YAAT,CAAsBz9K,MAAtB,EAA8Bu8F,MAA9B,EAAsC5kM,OAAtC,EAA+C;AAC7C,SAAO,0BAAWqoG,MAAX,MAAuBu8F,MAAM,IAAI5kM,OAAjC,IAA4C,iCAAiBqoG,MAAjB,EAAyBm9K,IAAI,CAAC5gF,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAX,EAAmB5kM,OAAnB,CAA7B,CAA5C,GAAwGqoG,MAA/G;AACD;;AAED,SAASm9K,IAAT,CAAc95R,KAAd,EAAqBsU,OAArB,EAA8B;AAC5B,SAAOA,OAAO,GAAGtU,KAAK,CAACkJ,KAAN,GAAcoL,OAAd,EAAH,GAA6BtU,KAA3C;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASq6R,SAAT,CAAmBn3R,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD,wBAASm3R,SAAT,EAAoBvyD,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMrpN,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,CAAW,MAAX,KAAsBP,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC38K,GAApB,CAAtB,IAAkD28K,KAAK,CAACO,QAAN,CAAep6M,CAAC,CAAC3c,IAAF,CAAO8zC,MAAtB,CAAlD,IAAmF0iL,KAAK,CAACO,QAAN,CAAe,OAAf,CAA/F;AACA,QAAI5pN,GAAJ,EAASqpN,KAAK,CAAC1qK,MAAN,CAAa9rD,IAAb,CAAkB,iCAAc2c,CAAC,CAAC3c,IAAhB,CAAlB;AACT,SAAK+2N,QAAL,CAAc5pN,GAAd;AACA,WAAOqpN,KAAP;AACD;;AAN4B,CAA/B;AAUA,MAAMi6D,IAAI,GAAG,MAAb;AAAA,MACMC,MAAM,GAAG,QADf;AAAA,MAEMC,SAAS,GAAG,WAFlB;AAAA,MAGMC,SAAS,GAAG,CAAC,IAAD,EAAO,IAAP,CAHlB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,KAAT,CAAex3R,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDw3R,KAAK,CAAC1yD,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,gBAAY;AADF,GAFK;AAKjB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAHO,EAOP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAPO,EAUP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,eAAWsyD,IAHV;AAID,cAAU,CAACA,IAAD,EAAOC,MAAP,EAAeC,SAAf;AAJT,GAVO,EAeP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAWC;AALV,GAfO;AALO,CAAnB;AA4BA,wBAASC,KAAT,EAAgB5yD,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI8O,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQsrD,SAAjB;AAAA,QACIt6E,EAAE,GAAGgvB,EAAE,CAAC,CAAD,CADX;AAAA,QAEI98H,EAAE,GAAG88H,EAAE,CAAC,CAAD,CAFX;AAAA,QAGItlO,IAAI,GAAG,iCAAc2c,CAAC,CAAC3c,IAAhB,CAHX;AAAA,QAIIwrH,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAF,IAAWxmC,aAJvB;AAAA,QAKIx5E,KAAK,GAAGmR,CAAC,CAACha,MAAF,KAAa+tR,MAAb,GAAsBI,WAAtB,GAAoCn0Q,CAAC,CAACha,MAAF,KAAaguR,SAAb,GAAyBI,cAAzB,GAA0CC,SAL1F;AAAA,QAMI93E,MANJ;AAAA,QAOIljN,CAPJ;AAAA,QAQIkO,CARJ;AAAA,QASI9H,GATJ,CADkB,CAUT;;AAET88M,IAAAA,MAAM,GAAGwyB,SAAS,CAAClV,KAAK,CAAC1qK,MAAP,EAAenvC,CAAC,CAACmsN,OAAjB,EAA0B9oO,IAA1B,EAAgCwrH,KAAhC,CAAlB,CAZkB,CAYwC;;AAE1D,SAAKx1H,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGg1M,MAAM,CAAC5jN,MAAlB,EAA0B8G,GAAG,GAAG88M,MAAM,CAAC98M,GAA5C,EAAiDpG,CAAC,GAAGkO,CAArD,EAAwD,EAAElO,CAA1D,EAA6D;AAC3DwV,MAAAA,KAAK,CAAC0tM,MAAM,CAACljN,CAAD,CAAP,EAAYoG,GAAZ,EAAiBovH,KAAjB,EAAwB8qF,EAAxB,EAA4B9tG,EAA5B,CAAL;AACD;;AAED,WAAOguH,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC4O,EAApC,CAAP;AACD;;AApBwB,CAA3B;;AAwBA,SAASwrD,WAAT,CAAqBnvK,KAArB,EAA4BvlH,GAA5B,EAAiCovH,KAAjC,EAAwC8qF,EAAxC,EAA4C9tG,EAA5C,EAAgD;AAC9C,MAAI60H,IAAI,GAAG,CAACjhO,GAAG,GAAGulH,KAAK,CAACplH,GAAb,IAAoB,CAA/B;AAAA,MACIkxF,CAAC,GAAGk0B,KAAK,CAACrsH,MADd;AAAA,MAEI2K,CAAC,GAAG,CAFR;AAAA,MAGIvG,CAHJ;;AAKA,SAAOuG,CAAC,GAAGwtF,CAAX,EAAc,EAAExtF,CAAhB,EAAmB;AACjBvG,IAAAA,CAAC,GAAGioH,KAAK,CAAC1hH,CAAD,CAAT;AACAvG,IAAAA,CAAC,CAAC48M,EAAD,CAAD,GAAQ+mB,IAAR;AACA3jO,IAAAA,CAAC,CAAC8uG,EAAD,CAAD,GAAQ60H,IAAI,IAAIthO,IAAI,CAACiT,GAAL,CAASw8G,KAAK,CAAC9xH,CAAD,CAAd,CAAhB;AACD;AACF;;AAED,SAASq3R,cAAT,CAAwBpvK,KAAxB,EAA+BvlH,GAA/B,EAAoCovH,KAApC,EAA2C8qF,EAA3C,EAA+C9tG,EAA/C,EAAmD;AACjD,MAAI38F,KAAK,GAAG,IAAI81G,KAAK,CAACplH,GAAtB;AAAA,MACI8gO,IAAI,GAAG,CADX;AAAA,MAEI5vI,CAAC,GAAGk0B,KAAK,CAACrsH,MAFd;AAAA,MAGI2K,CAAC,GAAG,CAHR;AAAA,MAIIiI,CAAC,GAAG,CAJR;AAAA,MAKIxO,CALJ;;AAOA,SAAOuG,CAAC,GAAGwtF,CAAX,EAAc,EAAExtF,CAAhB,EAAmB;AACjBvG,IAAAA,CAAC,GAAGioH,KAAK,CAAC1hH,CAAD,CAAT;AACAvG,IAAAA,CAAC,CAAC48M,EAAD,CAAD,GAAQ+mB,IAAR;AACA3jO,IAAAA,CAAC,CAAC8uG,EAAD,CAAD,GAAQ60H,IAAI,GAAGxxN,KAAK,IAAI3D,CAAC,IAAInM,IAAI,CAACiT,GAAL,CAASw8G,KAAK,CAAC9xH,CAAD,CAAd,CAAT,CAApB;AACD;AACF;;AAED,SAASs3R,SAAT,CAAmBrvK,KAAnB,EAA0BvlH,GAA1B,EAA+BovH,KAA/B,EAAsC8qF,EAAtC,EAA0C9tG,EAA1C,EAA8C;AAC5C,MAAIyoL,OAAO,GAAG,CAAd;AAAA,MACIC,OAAO,GAAG,CADd;AAAA,MAEIzjM,CAAC,GAAGk0B,KAAK,CAACrsH,MAFd;AAAA,MAGI2K,CAAC,GAAG,CAHR;AAAA,MAIIiI,CAJJ;AAAA,MAKIxO,CALJ;;AAOA,SAAOuG,CAAC,GAAGwtF,CAAX,EAAc,EAAExtF,CAAhB,EAAmB;AACjBvG,IAAAA,CAAC,GAAGioH,KAAK,CAAC1hH,CAAD,CAAT;AACAiI,IAAAA,CAAC,GAAG,CAACsjH,KAAK,CAAC9xH,CAAD,CAAV;;AAEA,QAAIwO,CAAC,GAAG,CAAR,EAAW;AACTxO,MAAAA,CAAC,CAAC48M,EAAD,CAAD,GAAQ46E,OAAR;AACAx3R,MAAAA,CAAC,CAAC8uG,EAAD,CAAD,GAAQ0oL,OAAO,IAAIhpR,CAAnB;AACD,KAHD,MAGO;AACLxO,MAAAA,CAAC,CAAC48M,EAAD,CAAD,GAAQ26E,OAAR;AACAv3R,MAAAA,CAAC,CAAC8uG,EAAD,CAAD,GAAQyoL,OAAO,IAAI/oR,CAAnB;AACD;AACF;AACF;;AAED,SAASwjO,SAAT,CAAmB1mO,IAAnB,EAAyB8jO,OAAzB,EAAkC9oO,IAAlC,EAAwCwrH,KAAxC,EAA+C;AAC7C,MAAI0tF,MAAM,GAAG,EAAb;AAAA,MACIpgN,GAAG,GAAG6I,CAAC,IAAIA,CAAC,CAACjI,CAAD,CADhB;AAAA,MAEI+F,GAFJ;AAAA,MAGIzJ,CAHJ;AAAA,MAIIkO,CAJJ;AAAA,MAKIupF,CALJ;AAAA,MAMI/zF,CANJ;AAAA,MAOI4Z,CAPJ;AAAA,MAQImxB,CARJ;AAAA,MASIjrC,CATJ;AAAA,MAUI4C,GAVJ,CAD6C,CAWpC;;;AAGT,MAAI0sO,OAAO,IAAI,IAAf,EAAqB;AACnB5vB,IAAAA,MAAM,CAACjjN,IAAP,CAAY+O,IAAI,CAAC3F,KAAL,EAAZ;AACD,GAFD,MAEO;AACL,SAAKI,GAAG,GAAG,EAAN,EAAUzJ,CAAC,GAAG,CAAd,EAAiBkO,CAAC,GAAGc,IAAI,CAAC1P,MAA/B,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD0D,MAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;AACAsd,MAAAA,CAAC,GAAGw1N,OAAO,CAACrpO,GAAR,CAAY3G,GAAZ,CAAJ;AACA2rC,MAAAA,CAAC,GAAGhlC,GAAG,CAAC6T,CAAD,CAAP;;AAEA,UAAI,CAACmxB,CAAL,EAAQ;AACNhlC,QAAAA,GAAG,CAAC6T,CAAD,CAAH,GAASmxB,CAAC,GAAG,EAAb;AACAy0K,QAAAA,MAAM,CAACjjN,IAAP,CAAYwuC,CAAZ;AACD;;AAEDA,MAAAA,CAAC,CAACxuC,IAAF,CAAOyD,CAAP;AACD;AACF,GA7B4C,CA6B3C;;;AAGF,OAAK4Z,CAAC,GAAG,CAAJ,EAAOlX,GAAG,GAAG,CAAb,EAAgBqxF,CAAC,GAAGyrH,MAAM,CAAC5jN,MAAhC,EAAwCge,CAAC,GAAGm6E,CAA5C,EAA+C,EAAEn6E,CAAjD,EAAoD;AAClDmxB,IAAAA,CAAC,GAAGy0K,MAAM,CAAC5lM,CAAD,CAAV;;AAEA,SAAKtd,CAAC,GAAG,CAAJ,EAAOwD,CAAC,GAAG,CAAX,EAAc0K,CAAC,GAAGugC,CAAC,CAACnvC,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CwD,MAAAA,CAAC,IAAIuC,IAAI,CAACiT,GAAL,CAASw8G,KAAK,CAAC/mF,CAAC,CAACzuC,CAAD,CAAF,CAAd,CAAL;AACD;;AAEDyuC,IAAAA,CAAC,CAACloC,GAAF,GAAQ/C,CAAR;AACA,QAAIA,CAAC,GAAG4C,GAAR,EAAaA,GAAG,GAAG5C,CAAN;AACb,QAAIwG,IAAJ,EAAUykC,CAAC,CAACzkC,IAAF,CAAOA,IAAP;AACX;;AAEDk5M,EAAAA,MAAM,CAAC98M,GAAP,GAAaA,GAAb;AACA,SAAO88M,MAAP;AACD;;;;;;;;;;;ACvhCM,IAAI7lI,OAAO,GAAG,IAAd;;AACA,IAAI0+K,QAAQ,GAAG,KAAf;;AACA,IAAI/e,EAAE,GAAGj3O,IAAI,CAACuiC,EAAd;;AACA,IAAIw2M,MAAM,GAAG9B,EAAE,GAAG,CAAlB;;AACA,IAAIm+C,SAAS,GAAGn+C,EAAE,GAAG,CAArB;;AACA,IAAIC,GAAG,GAAGD,EAAE,GAAG,CAAf;;AAEA,IAAIia,OAAO,GAAG,MAAMja,EAApB;;AACA,IAAIga,OAAO,GAAGha,EAAE,GAAG,GAAnB;;AAEA,IAAIhkO,GAAG,GAAGjT,IAAI,CAACiT,GAAf;;AACA,IAAImB,IAAI,GAAGpU,IAAI,CAACoU,IAAhB;;AACA,IAAI7D,KAAK,GAAGvQ,IAAI,CAACuQ,KAAjB;;AACA,IAAIyD,GAAG,GAAGhU,IAAI,CAACgU,GAAf;;AACA,IAAI5R,IAAI,GAAGpC,IAAI,CAACoC,IAAhB;;AACA,IAAIH,GAAG,GAAGjC,IAAI,CAACiC,GAAf;;AACA,IAAI8F,KAAK,GAAG/H,IAAI,CAAC+H,KAAjB;;AACA,IAAIq0F,KAAK,GAAGp8F,IAAI,CAACo8F,KAAjB;;AACA,IAAInyF,GAAG,GAAGjK,IAAI,CAACiK,GAAf;;AACA,IAAIyG,GAAG,GAAG1Q,IAAI,CAAC0Q,GAAf;;AACA,IAAIqD,GAAG,GAAG/T,IAAI,CAAC+T,GAAf;;;AACA,IAAIrB,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,IAAa,UAAStS,CAAT,EAAY;AAAE,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAhC;AAAoC,CAA1E;;;AACA,IAAIiC,IAAI,GAAGrC,IAAI,CAACqC,IAAhB;;AACA,IAAI4R,GAAG,GAAGjU,IAAI,CAACiU,GAAf;;;AAEA,SAASE,IAAT,CAAc/T,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAC,GAAG,CAAC,CAAL,GAAS62O,EAAT,GAAcj3O,IAAI,CAACmU,IAAL,CAAU/T,CAAV,CAAjC;AACD;;AAEM,SAAS8T,IAAT,CAAc9T,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQ24O,MAAR,GAAiB34O,CAAC,GAAG,CAAC,CAAL,GAAS,CAAC24O,MAAV,GAAmB/4O,IAAI,CAACkU,IAAL,CAAU9T,CAAV,CAA3C;AACD;;AAEM,SAASi1R,QAAT,CAAkBj1R,CAAlB,EAAqB;AAC1B,SAAO,CAACA,CAAC,GAAG2T,GAAG,CAAC3T,CAAC,GAAG,CAAL,CAAR,IAAmBA,CAA1B;AACD;;;;;;;;;ACnCc,SAASvF,IAAT,GAAgB,CAAE;;;;;;;;;ACAjC,SAASy6R,cAAT,CAAwBj6E,QAAxB,EAAkCx4B,MAAlC,EAA0C;AACxC,MAAIw4B,QAAQ,IAAIk6E,kBAAkB,CAAC3kK,cAAnB,CAAkCyqF,QAAQ,CAACnhM,IAA3C,CAAhB,EAAkE;AAChEq7Q,IAAAA,kBAAkB,CAACl6E,QAAQ,CAACnhM,IAAV,CAAlB,CAAkCmhM,QAAlC,EAA4Cx4B,MAA5C;AACD;AACF;;AAED,IAAI2yG,gBAAgB,GAAG;AACrBC,EAAAA,OAAO,EAAE,UAASn0F,MAAT,EAAiBze,MAAjB,EAAyB;AAChCyyG,IAAAA,cAAc,CAACh0F,MAAM,CAAC+Z,QAAR,EAAkBx4B,MAAlB,CAAd;AACD,GAHoB;AAIrB6yG,EAAAA,iBAAiB,EAAE,UAASp0F,MAAT,EAAiBze,MAAjB,EAAyB;AAC1C,QAAIiH,QAAQ,GAAGwX,MAAM,CAACxX,QAAtB;AAAA,QAAgC7vL,CAAC,GAAG,CAAC,CAArC;AAAA,QAAwCkO,CAAC,GAAG2hL,QAAQ,CAACvwL,MAArD;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgBmtR,cAAc,CAACxrG,QAAQ,CAAC7vL,CAAD,CAAR,CAAYohN,QAAb,EAAuBx4B,MAAvB,CAAd;AACjB;AAPoB,CAAvB;AAUA,IAAI0yG,kBAAkB,GAAG;AACvBI,EAAAA,MAAM,EAAE,UAASr0F,MAAT,EAAiBze,MAAjB,EAAyB;AAC/BA,IAAAA,MAAM,CAAC+yG,MAAP;AACD,GAHsB;AAIvBp6B,EAAAA,KAAK,EAAE,UAASl6D,MAAT,EAAiBze,MAAjB,EAAyB;AAC9Bye,IAAAA,MAAM,GAAGA,MAAM,CAACwZ,WAAhB;AACAj4B,IAAAA,MAAM,CAAC24B,KAAP,CAAala,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmCA,MAAM,CAAC,CAAD,CAAzC;AACD,GAPsB;AAQvBu0F,EAAAA,UAAU,EAAE,UAASv0F,MAAT,EAAiBze,MAAjB,EAAyB;AACnC,QAAIi4B,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgBm5L,MAAM,GAAGwZ,WAAW,CAAC7gN,CAAD,CAApB,EAAyB4oL,MAAM,CAAC24B,KAAP,CAAala,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmCA,MAAM,CAAC,CAAD,CAAzC,CAAzB;AACjB,GAXsB;AAYvBoc,EAAAA,UAAU,EAAE,UAASpc,MAAT,EAAiBze,MAAjB,EAAyB;AACnCizG,IAAAA,UAAU,CAACx0F,MAAM,CAACwZ,WAAR,EAAqBj4B,MAArB,EAA6B,CAA7B,CAAV;AACD,GAdsB;AAevB86B,EAAAA,eAAe,EAAE,UAASrc,MAAT,EAAiBze,MAAjB,EAAyB;AACxC,QAAIi4B,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB2tR,UAAU,CAACh7E,WAAW,CAAC7gN,CAAD,CAAZ,EAAiB4oL,MAAjB,EAAyB,CAAzB,CAAV;AACjB,GAlBsB;AAmBvB+6B,EAAAA,OAAO,EAAE,UAAStc,MAAT,EAAiBze,MAAjB,EAAyB;AAChCkzG,IAAAA,aAAa,CAACz0F,MAAM,CAACwZ,WAAR,EAAqBj4B,MAArB,CAAb;AACD,GArBsB;AAsBvBg7B,EAAAA,YAAY,EAAE,UAASvc,MAAT,EAAiBze,MAAjB,EAAyB;AACrC,QAAIi4B,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB4tR,aAAa,CAACj7E,WAAW,CAAC7gN,CAAD,CAAZ,EAAiB4oL,MAAjB,CAAb;AACjB,GAzBsB;AA0BvBmzG,EAAAA,kBAAkB,EAAE,UAAS10F,MAAT,EAAiBze,MAAjB,EAAyB;AAC3C,QAAIg4B,UAAU,GAAGvZ,MAAM,CAACuZ,UAAxB;AAAA,QAAoC5gN,CAAC,GAAG,CAAC,CAAzC;AAAA,QAA4CkO,CAAC,GAAG0yM,UAAU,CAACthN,MAA3D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgBmtR,cAAc,CAACz6E,UAAU,CAAC5gN,CAAD,CAAX,EAAgB4oL,MAAhB,CAAd;AACjB;AA7BsB,CAAzB;;AAgCA,SAASizG,UAAT,CAAoBh7E,WAApB,EAAiCj4B,MAAjC,EAAyCozG,MAAzC,EAAiD;AAC/C,MAAIh8R,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAAZ,GAAqB08R,MAArC;AAAA,MAA6CC,UAA7C;AACArzG,EAAAA,MAAM,CAAC85D,SAAP;;AACA,SAAO,EAAE1iP,CAAF,GAAMkO,CAAb,EAAgB+tR,UAAU,GAAGp7E,WAAW,CAAC7gN,CAAD,CAAxB,EAA6B4oL,MAAM,CAAC24B,KAAP,CAAa06E,UAAU,CAAC,CAAD,CAAvB,EAA4BA,UAAU,CAAC,CAAD,CAAtC,EAA2CA,UAAU,CAAC,CAAD,CAArD,CAA7B;;AAChBrzG,EAAAA,MAAM,CAACg6D,OAAP;AACD;;AAED,SAASk5C,aAAT,CAAuBj7E,WAAvB,EAAoCj4B,MAApC,EAA4C;AAC1C,MAAI5oL,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA5B;AACAspL,EAAAA,MAAM,CAACszG,YAAP;;AACA,SAAO,EAAEl8R,CAAF,GAAMkO,CAAb,EAAgB2tR,UAAU,CAACh7E,WAAW,CAAC7gN,CAAD,CAAZ,EAAiB4oL,MAAjB,EAAyB,CAAzB,CAAV;;AAChBA,EAAAA,MAAM,CAACuzG,UAAP;AACD;;AAEc,kBAAS90F,MAAT,EAAiBze,MAAjB,EAAyB;AACtC,MAAIye,MAAM,IAAIk0F,gBAAgB,CAAC5kK,cAAjB,CAAgC0wE,MAAM,CAACpnL,IAAvC,CAAd,EAA4D;AAC1Ds7Q,IAAAA,gBAAgB,CAACl0F,MAAM,CAACpnL,IAAR,CAAhB,CAA8BonL,MAA9B,EAAsCze,MAAtC;AACD,GAFD,MAEO;AACLyyG,IAAAA,cAAc,CAACh0F,MAAD,EAASze,MAAT,CAAd;AACD;AACF;;;;;;;;;;ACpED;;AACA;;AACA;;AACA;;;;AAEO,IAAIwzG,WAAW,GAAG,IAAIj3E,cAAJ,EAAlB,EAEP;;;AAEA,IAAIk3E,OAAO,GAAG,IAAIl3E,cAAJ,EAAd;AAAA,IACIm3E,QADJ;AAAA,IAEIC,KAFJ;AAAA,IAGIC,OAHJ;AAAA,IAIIC,OAJJ;AAAA,IAKIC,OALJ;AAOO,IAAIC,UAAU,GAAG;AACtBp7E,EAAAA,KAAK,EAAE3gN,aADe;AAEtB8hP,EAAAA,SAAS,EAAE9hP,aAFW;AAGtBgiP,EAAAA,OAAO,EAAEhiP,aAHa;AAItBs7R,EAAAA,YAAY,EAAE,YAAW;AACvB,0BAAAE,WAAW,GAAG,IAAIj3E,cAAJ,EAAd;AACAw3E,IAAAA,UAAU,CAACj6C,SAAX,GAAuBk6C,aAAvB;AACAD,IAAAA,UAAU,CAAC/5C,OAAX,GAAqBi6C,WAArB;AACD,GARqB;AAStBV,EAAAA,UAAU,EAAE,YAAW;AACrB,QAAIW,QAAQ,GAAG,CAACV,WAAhB;AACAC,IAAAA,OAAO,CAAC17Q,GAAR,CAAYm8Q,QAAQ,GAAG,CAAX,GAAe7/C,YAAM6/C,QAArB,GAAgCA,QAA5C;AACA,SAAKp6C,SAAL,GAAiB,KAAKE,OAAL,GAAe,KAAKrhC,KAAL,GAAa3gN,aAA7C;AACD,GAbqB;AActB+6R,EAAAA,MAAM,EAAE,YAAW;AACjBU,IAAAA,OAAO,CAAC17Q,GAAR,CAAYs8N,SAAZ;AACD;AAhBqB,CAAjB;;;AAmBP,SAAS2/C,aAAT,GAAyB;AACvBD,EAAAA,UAAU,CAACp7E,KAAX,GAAmBw7E,cAAnB;AACD;;AAED,SAASF,WAAT,GAAuB;AACrBG,EAAAA,SAAS,CAACV,QAAD,EAAWC,KAAX,CAAT;AACD;;AAED,SAASQ,cAAT,CAAwBE,MAAxB,EAAgCC,GAAhC,EAAqC;AACnCP,EAAAA,UAAU,CAACp7E,KAAX,GAAmBy7E,SAAnB;AACAV,EAAAA,QAAQ,GAAGW,MAAX,EAAmBV,KAAK,GAAGW,GAA3B;AACAD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACAwlC,EAAAA,OAAO,GAAGS,MAAV,EAAkBR,OAAO,GAAG,eAAIS,GAAG,GAAGA,GAAG,GAAG,CAAN,GAAU/B,eAApB,CAA5B,EAA4DuB,OAAO,GAAG,eAAIQ,GAAJ,CAAtE;AACD;;AAED,SAASF,SAAT,CAAmBC,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9BD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACAkmC,EAAAA,GAAG,GAAGA,GAAG,GAAG,CAAN,GAAU/B,eAAhB,CAF8B,CAEH;AAE3B;AACA;AACA;;AACA,MAAIgC,OAAO,GAAGF,MAAM,GAAGT,OAAvB;AAAA,MACIY,QAAQ,GAAGD,OAAO,IAAI,CAAX,GAAe,CAAf,GAAmB,CAAC,CADnC;AAAA,MAEIE,QAAQ,GAAGD,QAAQ,GAAGD,OAF1B;AAAA,MAGIG,MAAM,GAAG,eAAIJ,GAAJ,CAHb;AAAA,MAIIK,MAAM,GAAG,eAAIL,GAAJ,CAJb;AAAA,MAKI5/Q,CAAC,GAAGo/Q,OAAO,GAAGa,MALlB;AAAA,MAMIv+M,CAAC,GAAGy9M,OAAO,GAAGa,MAAV,GAAmBhgR,CAAC,GAAG,eAAI+/Q,QAAJ,CAN/B;AAAA,MAOInrR,CAAC,GAAGoL,CAAC,GAAG8/Q,QAAJ,GAAe,eAAIC,QAAJ,CAPvB;AAQAjB,EAAAA,WAAW,CAACz7Q,GAAZ,CAAgB,iBAAMzO,CAAN,EAAS8sE,CAAT,CAAhB,EAf8B,CAiB9B;;AACAw9M,EAAAA,OAAO,GAAGS,MAAV,EAAkBR,OAAO,GAAGa,MAA5B,EAAoCZ,OAAO,GAAGa,MAA9C;AACD;;AAEc,kBAASl2F,MAAT,EAAiB;AAC9Bg1F,EAAAA,OAAO,GAAG,IAAIl3E,cAAJ,EAAV;AACA,uBAAO9d,MAAP,EAAes1F,UAAf;AACA,SAAON,OAAO,GAAG,CAAjB;AACD;;;;;;;;;;;;;;;AC3ED;;AAEO,SAASmB,SAAT,CAAmBC,SAAnB,EAA8B;AACnC,SAAO,CAAC,iBAAMA,SAAS,CAAC,CAAD,CAAf,EAAoBA,SAAS,CAAC,CAAD,CAA7B,CAAD,EAAoC,gBAAKA,SAAS,CAAC,CAAD,CAAd,CAApC,CAAP;AACD;;AAEM,SAASA,SAAT,CAAmBD,SAAnB,EAA8B;AACnC,MAAIP,MAAM,GAAGO,SAAS,CAAC,CAAD,CAAtB;AAAA,MAA2BN,GAAG,GAAGM,SAAS,CAAC,CAAD,CAA1C;AAAA,MAA+CF,MAAM,GAAG,eAAIJ,GAAJ,CAAxD;AACA,SAAO,CAACI,MAAM,GAAG,eAAIL,MAAJ,CAAV,EAAuBK,MAAM,GAAG,eAAIL,MAAJ,CAAhC,EAA6C,eAAIC,GAAJ,CAA7C,CAAP;AACD;;AAEM,SAASQ,YAAT,CAAsBx2R,CAAtB,EAAyB6G,CAAzB,EAA4B;AACjC,SAAO7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAtB,GAA4B7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAA3C;AACD;;AAEM,SAAS4vR,cAAT,CAAwBz2R,CAAxB,EAA2B6G,CAA3B,EAA8B;AACnC,SAAO,CAAC7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAvB,EAA4B7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAlD,EAAuD7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAA7E,CAAP;AACD,EAED;;;AACO,SAAS6vR,mBAAT,CAA6B12R,CAA7B,EAAgC6G,CAAhC,EAAmC;AACxC7G,EAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ6G,CAAC,CAAC,CAAD,CAAT,EAAc7G,CAAC,CAAC,CAAD,CAAD,IAAQ6G,CAAC,CAAC,CAAD,CAAvB,EAA4B7G,CAAC,CAAC,CAAD,CAAD,IAAQ6G,CAAC,CAAC,CAAD,CAArC;AACD;;AAEM,SAAS8vR,cAAT,CAAwBC,MAAxB,EAAgCxgR,CAAhC,EAAmC;AACxC,SAAO,CAACwgR,MAAM,CAAC,CAAD,CAAN,GAAYxgR,CAAb,EAAgBwgR,MAAM,CAAC,CAAD,CAAN,GAAYxgR,CAA5B,EAA+BwgR,MAAM,CAAC,CAAD,CAAN,GAAYxgR,CAA3C,CAAP;AACD,EAED;;;AACO,SAASygR,yBAAT,CAAmClxR,CAAnC,EAAsC;AAC3C,MAAIiF,CAAC,GAAG,gBAAKjF,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAtB,GAA4BA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAzC,CAAR;AACAA,EAAAA,CAAC,CAAC,CAAD,CAAD,IAAQiF,CAAR,EAAWjF,CAAC,CAAC,CAAD,CAAD,IAAQiF,CAAnB,EAAsBjF,CAAC,CAAC,CAAD,CAAD,IAAQiF,CAA9B;AACD;;;;;;;;;AChCD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAI0qR,OAAJ,EAAawB,IAAb,EAAmBC,OAAnB,EAA4BC,IAA5B,EAAkC;AAC9BC,OADJ,EACa;AACT7B,QAFJ,EAEcC,KAFd,EAEqB;AACjBr6E,EAHJ,EAGQ;AACJk8E,QAJJ,EAKI7rF,MALJ,EAMI/wK,KANJ;AAQA,IAAI68P,YAAY,GAAG;AACjB98E,EAAAA,KAAK,EAAE+8E,WADU;AAEjB57C,EAAAA,SAAS,EAAE67C,eAFM;AAGjB37C,EAAAA,OAAO,EAAE47C,aAHQ;AAIjBtC,EAAAA,YAAY,EAAE,YAAW;AACvBmC,IAAAA,YAAY,CAAC98E,KAAb,GAAqBk9E,eAArB;AACAJ,IAAAA,YAAY,CAAC37C,SAAb,GAAyBg8C,eAAzB;AACAL,IAAAA,YAAY,CAACz7C,OAAb,GAAuB+7C,aAAvB;AACAP,IAAAA,QAAQ,GAAG,IAAIj5E,cAAJ,EAAX;;AACAw3E,qBAAWT,YAAX;AACD,GAVgB;AAWjBC,EAAAA,UAAU,EAAE,YAAW;AACrBQ,qBAAWR,UAAX;;AACAkC,IAAAA,YAAY,CAAC98E,KAAb,GAAqB+8E,WAArB;AACAD,IAAAA,YAAY,CAAC37C,SAAb,GAAyB67C,eAAzB;AACAF,IAAAA,YAAY,CAACz7C,OAAb,GAAuB47C,aAAvB;AACA,QAAIpC,oBAAc,CAAlB,EAAqBI,OAAO,GAAG,EAAEyB,OAAO,GAAG,GAAZ,CAAV,EAA4BD,IAAI,GAAG,EAAEE,IAAI,GAAG,EAAT,CAAnC,CAArB,KACK,IAAIE,QAAQ,GAAG/gN,aAAf,EAAwB6gN,IAAI,GAAG,EAAP,CAAxB,KACA,IAAIE,QAAQ,GAAG,CAAC/gN,aAAhB,EAAyB2gN,IAAI,GAAG,CAAC,EAAR;AAC9Bx8P,IAAAA,KAAK,CAAC,CAAD,CAAL,GAAWg7P,OAAX,EAAoBh7P,KAAK,CAAC,CAAD,CAAL,GAAWy8P,OAA/B;AACD,GApBgB;AAqBjBtC,EAAAA,MAAM,EAAE,YAAW;AACjBa,IAAAA,OAAO,GAAG,EAAEyB,OAAO,GAAG,GAAZ,CAAV,EAA4BD,IAAI,GAAG,EAAEE,IAAI,GAAG,EAAT,CAAnC;AACD;AAvBgB,CAAnB;;AA0BA,SAASI,WAAT,CAAqBrB,MAArB,EAA6BC,GAA7B,EAAkC;AAChC3qF,EAAAA,MAAM,CAACtyM,IAAP,CAAYuhC,KAAK,GAAG,CAACg7P,OAAO,GAAGS,MAAX,EAAmBgB,OAAO,GAAGhB,MAA7B,CAApB;AACA,MAAIC,GAAG,GAAGc,IAAV,EAAgBA,IAAI,GAAGd,GAAP;AAChB,MAAIA,GAAG,GAAGgB,IAAV,EAAgBA,IAAI,GAAGhB,GAAP;AACjB;;AAED,SAAS0B,SAAT,CAAmB3B,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9B,MAAI54P,CAAC,GAAG,0BAAU,CAAC24P,MAAM,GAAGjmC,aAAV,EAAmBkmC,GAAG,GAAGlmC,aAAzB,CAAV,CAAR;;AACA,MAAI90C,EAAJ,EAAQ;AACN,QAAI+yB,MAAM,GAAG,+BAAe/yB,EAAf,EAAmB59K,CAAnB,CAAb;AAAA,QACIu6P,UAAU,GAAG,CAAC5pD,MAAM,CAAC,CAAD,CAAP,EAAY,CAACA,MAAM,CAAC,CAAD,CAAnB,EAAwB,CAAxB,CADjB;AAAA,QAEI6pD,UAAU,GAAG,+BAAeD,UAAf,EAA2B5pD,MAA3B,CAFjB;AAGA,8CAA0B6pD,UAA1B;AACAA,IAAAA,UAAU,GAAG,0BAAUA,UAAV,CAAb;AACA,QAAInpM,KAAK,GAAGsnM,MAAM,GAAGkB,OAArB;AAAA,QACI1lR,IAAI,GAAGk9E,KAAK,GAAG,CAAR,GAAY,CAAZ,GAAgB,CAAC,CAD5B;AAAA,QAEIopM,OAAO,GAAGD,UAAU,CAAC,CAAD,CAAV,GAAgB7nC,aAAhB,GAA0Bx+O,IAFxC;AAAA,QAGIumR,IAHJ;AAAA,QAIIC,YAAY,GAAG,eAAItpM,KAAJ,IAAa,GAJhC;;AAKA,QAAIspM,YAAY,IAAIxmR,IAAI,GAAG0lR,OAAP,GAAiBY,OAAjB,IAA4BA,OAAO,GAAGtmR,IAAI,GAAGwkR,MAAjD,CAAhB,EAA0E;AACxE+B,MAAAA,IAAI,GAAGF,UAAU,CAAC,CAAD,CAAV,GAAgB7nC,aAAvB;AACA,UAAI+nC,IAAI,GAAGd,IAAX,EAAiBA,IAAI,GAAGc,IAAP;AAClB,KAHD,MAGO,IAAID,OAAO,GAAG,CAACA,OAAO,GAAG,GAAX,IAAkB,GAAlB,GAAwB,GAAlC,EAAuCE,YAAY,IAAIxmR,IAAI,GAAG0lR,OAAP,GAAiBY,OAAjB,IAA4BA,OAAO,GAAGtmR,IAAI,GAAGwkR,MAAjD,CAAvD,EAAiH;AACtH+B,MAAAA,IAAI,GAAG,CAACF,UAAU,CAAC,CAAD,CAAX,GAAiB7nC,aAAxB;AACA,UAAI+nC,IAAI,GAAGhB,IAAX,EAAiBA,IAAI,GAAGgB,IAAP;AAClB,KAHM,MAGA;AACL,UAAI9B,GAAG,GAAGc,IAAV,EAAgBA,IAAI,GAAGd,GAAP;AAChB,UAAIA,GAAG,GAAGgB,IAAV,EAAgBA,IAAI,GAAGhB,GAAP;AACjB;;AACD,QAAI+B,YAAJ,EAAkB;AAChB,UAAIhC,MAAM,GAAGkB,OAAb,EAAsB;AACpB,YAAIh6C,KAAK,CAACq4C,OAAD,EAAUS,MAAV,CAAL,GAAyB94C,KAAK,CAACq4C,OAAD,EAAUyB,OAAV,CAAlC,EAAsDA,OAAO,GAAGhB,MAAV;AACvD,OAFD,MAEO;AACL,YAAI94C,KAAK,CAAC84C,MAAD,EAASgB,OAAT,CAAL,GAAyB95C,KAAK,CAACq4C,OAAD,EAAUyB,OAAV,CAAlC,EAAsDzB,OAAO,GAAGS,MAAV;AACvD;AACF,KAND,MAMO;AACL,UAAIgB,OAAO,IAAIzB,OAAf,EAAwB;AACtB,YAAIS,MAAM,GAAGT,OAAb,EAAsBA,OAAO,GAAGS,MAAV;AACtB,YAAIA,MAAM,GAAGgB,OAAb,EAAsBA,OAAO,GAAGhB,MAAV;AACvB,OAHD,MAGO;AACL,YAAIA,MAAM,GAAGkB,OAAb,EAAsB;AACpB,cAAIh6C,KAAK,CAACq4C,OAAD,EAAUS,MAAV,CAAL,GAAyB94C,KAAK,CAACq4C,OAAD,EAAUyB,OAAV,CAAlC,EAAsDA,OAAO,GAAGhB,MAAV;AACvD,SAFD,MAEO;AACL,cAAI94C,KAAK,CAAC84C,MAAD,EAASgB,OAAT,CAAL,GAAyB95C,KAAK,CAACq4C,OAAD,EAAUyB,OAAV,CAAlC,EAAsDzB,OAAO,GAAGS,MAAV;AACvD;AACF;AACF;AACF,GAvCD,MAuCO;AACL1qF,IAAAA,MAAM,CAACtyM,IAAP,CAAYuhC,KAAK,GAAG,CAACg7P,OAAO,GAAGS,MAAX,EAAmBgB,OAAO,GAAGhB,MAA7B,CAApB;AACD;;AACD,MAAIC,GAAG,GAAGc,IAAV,EAAgBA,IAAI,GAAGd,GAAP;AAChB,MAAIA,GAAG,GAAGgB,IAAV,EAAgBA,IAAI,GAAGhB,GAAP;AAChBh7E,EAAAA,EAAE,GAAG59K,CAAL,EAAQ65P,OAAO,GAAGlB,MAAlB;AACD;;AAED,SAASsB,eAAT,GAA2B;AACzBF,EAAAA,YAAY,CAAC98E,KAAb,GAAqBq9E,SAArB;AACD;;AAED,SAASJ,aAAT,GAAyB;AACvBh9P,EAAAA,KAAK,CAAC,CAAD,CAAL,GAAWg7P,OAAX,EAAoBh7P,KAAK,CAAC,CAAD,CAAL,GAAWy8P,OAA/B;AACAI,EAAAA,YAAY,CAAC98E,KAAb,GAAqB+8E,WAArB;AACAp8E,EAAAA,EAAE,GAAG,IAAL;AACD;;AAED,SAASu8E,eAAT,CAAyBxB,MAAzB,EAAiCC,GAAjC,EAAsC;AACpC,MAAIh7E,EAAJ,EAAQ;AACN,QAAIvsH,KAAK,GAAGsnM,MAAM,GAAGkB,OAArB;AACAC,IAAAA,QAAQ,CAACz9Q,GAAT,CAAa,eAAIg1E,KAAJ,IAAa,GAAb,GAAmBA,KAAK,IAAIA,KAAK,GAAG,CAAR,GAAY,GAAZ,GAAkB,CAAC,GAAvB,CAAxB,GAAsDA,KAAnE;AACD,GAHD,MAGO;AACL2mM,IAAAA,QAAQ,GAAGW,MAAX,EAAmBV,KAAK,GAAGW,GAA3B;AACD;;AACDP,mBAAWp7E,KAAX,CAAiB07E,MAAjB,EAAyBC,GAAzB;;AACA0B,EAAAA,SAAS,CAAC3B,MAAD,EAASC,GAAT,CAAT;AACD;;AAED,SAASwB,eAAT,GAA2B;AACzB/B,mBAAWj6C,SAAX;AACD;;AAED,SAASi8C,aAAT,GAAyB;AACvBF,EAAAA,eAAe,CAACnC,QAAD,EAAWC,KAAX,CAAf;;AACAI,mBAAW/5C,OAAX;;AACA,MAAI,eAAIw7C,QAAJ,IAAgB/gN,aAApB,EAA6Bm/M,OAAO,GAAG,EAAEyB,OAAO,GAAG,GAAZ,CAAV;AAC7Bz8P,EAAAA,KAAK,CAAC,CAAD,CAAL,GAAWg7P,OAAX,EAAoBh7P,KAAK,CAAC,CAAD,CAAL,GAAWy8P,OAA/B;AACA/7E,EAAAA,EAAE,GAAG,IAAL;AACD,EAED;AACA;AACA;;;AACA,SAASiiC,KAAT,CAAeq4C,OAAf,EAAwByB,OAAxB,EAAiC;AAC/B,SAAO,CAACA,OAAO,IAAIzB,OAAZ,IAAuB,CAAvB,GAA2ByB,OAAO,GAAG,GAArC,GAA2CA,OAAlD;AACD;;AAED,SAASiB,YAAT,CAAsBh4R,CAAtB,EAAyB6G,CAAzB,EAA4B;AAC1B,SAAO7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAf;AACD;;AAED,SAASoxR,aAAT,CAAuB39P,KAAvB,EAA8Br7B,CAA9B,EAAiC;AAC/B,SAAOq7B,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAjB,GAAuBA,KAAK,CAAC,CAAD,CAAL,IAAYr7B,CAAZ,IAAiBA,CAAC,IAAIq7B,KAAK,CAAC,CAAD,CAAlD,GAAwDr7B,CAAC,GAAGq7B,KAAK,CAAC,CAAD,CAAT,IAAgBA,KAAK,CAAC,CAAD,CAAL,GAAWr7B,CAA1F;AACD;;AAEc,kBAAS86M,OAAT,EAAkB;AAC/B,MAAIjhN,CAAJ,EAAOkO,CAAP,EAAUhH,CAAV,EAAa6G,CAAb,EAAgBqqM,MAAhB,EAAwBgnF,QAAxB,EAAkCzpM,KAAlC;AAEAuoM,EAAAA,IAAI,GAAGD,OAAO,GAAG,EAAEzB,OAAO,GAAGwB,IAAI,GAAGl2R,QAAnB,CAAjB;AACAyqM,EAAAA,MAAM,GAAG,EAAT;AACA,uBAAO0O,OAAP,EAAgBo9E,YAAhB,EAL+B,CAO/B;;AACA,MAAInwR,CAAC,GAAGqkM,MAAM,CAACjzM,MAAf,EAAuB;AACrBizM,IAAAA,MAAM,CAACvoM,IAAP,CAAYk1R,YAAZ,EADqB,CAGrB;;AACA,SAAKl/R,CAAC,GAAG,CAAJ,EAAOkH,CAAC,GAAGqrM,MAAM,CAAC,CAAD,CAAjB,EAAsB6F,MAAM,GAAG,CAAClxM,CAAD,CAApC,EAAyClH,CAAC,GAAGkO,CAA7C,EAAgD,EAAElO,CAAlD,EAAqD;AACnD+N,MAAAA,CAAC,GAAGwkM,MAAM,CAACvyM,CAAD,CAAV;;AACA,UAAIm/R,aAAa,CAACj4R,CAAD,EAAI6G,CAAC,CAAC,CAAD,CAAL,CAAb,IAA0BoxR,aAAa,CAACj4R,CAAD,EAAI6G,CAAC,CAAC,CAAD,CAAL,CAA3C,EAAsD;AACpD,YAAIo2O,KAAK,CAACj9O,CAAC,CAAC,CAAD,CAAF,EAAO6G,CAAC,CAAC,CAAD,CAAR,CAAL,GAAoBo2O,KAAK,CAACj9O,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAA7B,EAA2CA,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR;AAC3C,YAAIo2O,KAAK,CAACp2O,CAAC,CAAC,CAAD,CAAF,EAAO7G,CAAC,CAAC,CAAD,CAAR,CAAL,GAAoBi9O,KAAK,CAACj9O,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAA7B,EAA2CA,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR;AAC5C,OAHD,MAGO;AACLqqM,QAAAA,MAAM,CAACn4M,IAAP,CAAYiH,CAAC,GAAG6G,CAAhB;AACD;AACF,KAZoB,CAcrB;AACA;;;AACA,SAAKqxR,QAAQ,GAAG,CAACt3R,QAAZ,EAAsBoG,CAAC,GAAGkqM,MAAM,CAAC94M,MAAP,GAAgB,CAA1C,EAA6CU,CAAC,GAAG,CAAjD,EAAoDkH,CAAC,GAAGkxM,MAAM,CAAClqM,CAAD,CAAnE,EAAwElO,CAAC,IAAIkO,CAA7E,EAAgFhH,CAAC,GAAG6G,CAAJ,EAAO,EAAE/N,CAAzF,EAA4F;AAC1F+N,MAAAA,CAAC,GAAGqqM,MAAM,CAACp4M,CAAD,CAAV;AACA,UAAI,CAAC21F,KAAK,GAAGwuJ,KAAK,CAACj9O,CAAC,CAAC,CAAD,CAAF,EAAO6G,CAAC,CAAC,CAAD,CAAR,CAAd,IAA8BqxR,QAAlC,EAA4CA,QAAQ,GAAGzpM,KAAX,EAAkB6mM,OAAO,GAAGzuR,CAAC,CAAC,CAAD,CAA7B,EAAkCkwR,OAAO,GAAG/2R,CAAC,CAAC,CAAD,CAA7C;AAC7C;AACF;;AAEDqrM,EAAAA,MAAM,GAAG/wK,KAAK,GAAG,IAAjB;AAEA,SAAOg7P,OAAO,KAAK10R,QAAZ,IAAwBk2R,IAAI,KAAKl2R,QAAjC,GACD,CAAC,CAACyqE,GAAD,EAAMA,GAAN,CAAD,EAAa,CAACA,GAAD,EAAMA,GAAN,CAAb,CADC,GAED,CAAC,CAACiqN,OAAD,EAAUwB,IAAV,CAAD,EAAkB,CAACC,OAAD,EAAUC,IAAV,CAAlB,CAFN;AAGD;;;;;;;;;AClLD;;AACA;;AACA;;AACA;;;;AAEA,IAAImB,EAAJ,EAAQC,EAAR,EACIC,EADJ,EACQC,EADR,EACYC,EADZ,EAEIC,EAFJ,EAEQC,EAFR,EAEYC,EAFZ,EAGIrzD,EAHJ,EAGQszD,EAHR,EAGYC,EAHZ,EAIIxD,QAJJ,EAIcC,KAJd,EAIqB;AACjBl8E,EALJ,EAKQC,EALR,EAKYv2C,EALZ,EAKgB;;AAEhB,IAAIg2H,cAAc,GAAG;AACnBpE,EAAAA,MAAM,EAAE/6R,aADW;AAEnB2gN,EAAAA,KAAK,EAAEy+E,aAFY;AAGnBt9C,EAAAA,SAAS,EAAEu9C,iBAHQ;AAInBr9C,EAAAA,OAAO,EAAEs9C,eAJU;AAKnBhE,EAAAA,YAAY,EAAE,YAAW;AACvB6D,IAAAA,cAAc,CAACr9C,SAAf,GAA2By9C,iBAA3B;AACAJ,IAAAA,cAAc,CAACn9C,OAAf,GAAyBw9C,eAAzB;AACD,GARkB;AASnBjE,EAAAA,UAAU,EAAE,YAAW;AACrB4D,IAAAA,cAAc,CAACr9C,SAAf,GAA2Bu9C,iBAA3B;AACAF,IAAAA,cAAc,CAACn9C,OAAf,GAAyBs9C,eAAzB;AACD;AAZkB,CAArB,EAeA;;AACA,SAASF,aAAT,CAAuB/C,MAAvB,EAA+BC,GAA/B,EAAoC;AAClCD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA,MAAIsmC,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AACAmD,EAAAA,sBAAsB,CAAC/C,MAAM,GAAG,eAAIL,MAAJ,CAAV,EAAuBK,MAAM,GAAG,eAAIL,MAAJ,CAAhC,EAA6C,eAAIC,GAAJ,CAA7C,CAAtB;AACD;;AAED,SAASmD,sBAAT,CAAgCl6R,CAAhC,EAAmCue,CAAnC,EAAsC+wD,CAAtC,EAAyC;AACvC,IAAE4pN,EAAF;AACAE,EAAAA,EAAE,IAAI,CAACp5R,CAAC,GAAGo5R,EAAL,IAAWF,EAAjB;AACAG,EAAAA,EAAE,IAAI,CAAC96Q,CAAC,GAAG86Q,EAAL,IAAWH,EAAjB;AACAI,EAAAA,EAAE,IAAI,CAAChqN,CAAC,GAAGgqN,EAAL,IAAWJ,EAAjB;AACD;;AAED,SAASY,iBAAT,GAA6B;AAC3BF,EAAAA,cAAc,CAACx+E,KAAf,GAAuB++E,sBAAvB;AACD;;AAED,SAASA,sBAAT,CAAgCrD,MAAhC,EAAwCC,GAAxC,EAA6C;AAC3CD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA,MAAIsmC,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AACA78E,EAAAA,EAAE,GAAGi9E,MAAM,GAAG,eAAIL,MAAJ,CAAd;AACA38E,EAAAA,EAAE,GAAGg9E,MAAM,GAAG,eAAIL,MAAJ,CAAd;AACAlzH,EAAAA,EAAE,GAAG,eAAImzH,GAAJ,CAAL;AACA6C,EAAAA,cAAc,CAACx+E,KAAf,GAAuBg/E,iBAAvB;AACAF,EAAAA,sBAAsB,CAAChgF,EAAD,EAAKC,EAAL,EAASv2C,EAAT,CAAtB;AACD;;AAED,SAASw2H,iBAAT,CAA2BtD,MAA3B,EAAmCC,GAAnC,EAAwC;AACtCD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA,MAAIsmC,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,MACI/2R,CAAC,GAAGm3R,MAAM,GAAG,eAAIL,MAAJ,CADjB;AAAA,MAEIv4Q,CAAC,GAAG44Q,MAAM,GAAG,eAAIL,MAAJ,CAFjB;AAAA,MAGIxnN,CAAC,GAAG,eAAIynN,GAAJ,CAHR;AAAA,MAII5wO,CAAC,GAAG,iBAAM,gBAAK,CAACA,CAAC,GAAGg0J,EAAE,GAAG7qI,CAAL,GAASs0F,EAAE,GAAGrlJ,CAAnB,IAAwB4nC,CAAxB,GAA4B,CAACA,CAAC,GAAGy9G,EAAE,GAAG5jK,CAAL,GAASk6M,EAAE,GAAG5qI,CAAnB,IAAwBnpB,CAApD,GAAwD,CAACA,CAAC,GAAG+zJ,EAAE,GAAG37L,CAAL,GAAS47L,EAAE,GAAGn6M,CAAnB,IAAwBmmD,CAArF,CAAN,EAA+F+zJ,EAAE,GAAGl6M,CAAL,GAASm6M,EAAE,GAAG57L,CAAd,GAAkBqlJ,EAAE,GAAGt0F,CAAtH,CAJR;AAKA6pN,EAAAA,EAAE,IAAIhzO,CAAN;AACAozO,EAAAA,EAAE,IAAIpzO,CAAC,IAAI+zJ,EAAE,IAAIA,EAAE,GAAGl6M,CAAT,CAAN,CAAP;AACAw5R,EAAAA,EAAE,IAAIrzO,CAAC,IAAIg0J,EAAE,IAAIA,EAAE,GAAG57L,CAAT,CAAN,CAAP;AACAk7Q,EAAAA,EAAE,IAAItzO,CAAC,IAAIy9G,EAAE,IAAIA,EAAE,GAAGt0F,CAAT,CAAN,CAAP;AACA4qN,EAAAA,sBAAsB,CAAChgF,EAAD,EAAKC,EAAL,EAASv2C,EAAT,CAAtB;AACD;;AAED,SAASm2H,eAAT,GAA2B;AACzBH,EAAAA,cAAc,CAACx+E,KAAf,GAAuBy+E,aAAvB;AACD,EAED;AACA;;;AACA,SAASG,iBAAT,GAA6B;AAC3BJ,EAAAA,cAAc,CAACx+E,KAAf,GAAuBi/E,sBAAvB;AACD;;AAED,SAASJ,eAAT,GAA2B;AACzBK,EAAAA,iBAAiB,CAACnE,QAAD,EAAWC,KAAX,CAAjB;AACAwD,EAAAA,cAAc,CAACx+E,KAAf,GAAuBy+E,aAAvB;AACD;;AAED,SAASQ,sBAAT,CAAgCvD,MAAhC,EAAwCC,GAAxC,EAA6C;AAC3CZ,EAAAA,QAAQ,GAAGW,MAAX,EAAmBV,KAAK,GAAGW,GAA3B;AACAD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA+oC,EAAAA,cAAc,CAACx+E,KAAf,GAAuBk/E,iBAAvB;AACA,MAAInD,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AACA78E,EAAAA,EAAE,GAAGi9E,MAAM,GAAG,eAAIL,MAAJ,CAAd;AACA38E,EAAAA,EAAE,GAAGg9E,MAAM,GAAG,eAAIL,MAAJ,CAAd;AACAlzH,EAAAA,EAAE,GAAG,eAAImzH,GAAJ,CAAL;AACAmD,EAAAA,sBAAsB,CAAChgF,EAAD,EAAKC,EAAL,EAASv2C,EAAT,CAAtB;AACD;;AAED,SAAS02H,iBAAT,CAA2BxD,MAA3B,EAAmCC,GAAnC,EAAwC;AACtCD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA,MAAIsmC,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,MACI/2R,CAAC,GAAGm3R,MAAM,GAAG,eAAIL,MAAJ,CADjB;AAAA,MAEIv4Q,CAAC,GAAG44Q,MAAM,GAAG,eAAIL,MAAJ,CAFjB;AAAA,MAGIxnN,CAAC,GAAG,eAAIynN,GAAJ,CAHR;AAAA,MAIIj8C,EAAE,GAAG3gC,EAAE,GAAG7qI,CAAL,GAASs0F,EAAE,GAAGrlJ,CAJvB;AAAA,MAKIw8N,EAAE,GAAGn3E,EAAE,GAAG5jK,CAAL,GAASk6M,EAAE,GAAG5qI,CALvB;AAAA,MAMIirN,EAAE,GAAGrgF,EAAE,GAAG37L,CAAL,GAAS47L,EAAE,GAAGn6M,CANvB;AAAA,MAOIsxF,CAAC,GAAG,iBAAMwpJ,EAAN,EAAUC,EAAV,EAAcw/C,EAAd,CAPR;AAAA,MAQIp0O,CAAC,GAAG,gBAAKmrC,CAAL,CARR;AAAA,MAQiB;AACbvlF,EAAAA,CAAC,GAAGulF,CAAC,IAAI,CAACnrC,CAAD,GAAKmrC,CATlB,CAFsC,CAWjB;;AACrB80I,EAAAA,EAAE,CAAC5rN,GAAH,CAAOzO,CAAC,GAAG+uO,EAAX;AACA4+C,EAAAA,EAAE,CAACl/Q,GAAH,CAAOzO,CAAC,GAAGgvO,EAAX;AACA4+C,EAAAA,EAAE,CAACn/Q,GAAH,CAAOzO,CAAC,GAAGwuR,EAAX;AACApB,EAAAA,EAAE,IAAIhzO,CAAN;AACAozO,EAAAA,EAAE,IAAIpzO,CAAC,IAAI+zJ,EAAE,IAAIA,EAAE,GAAGl6M,CAAT,CAAN,CAAP;AACAw5R,EAAAA,EAAE,IAAIrzO,CAAC,IAAIg0J,EAAE,IAAIA,EAAE,GAAG57L,CAAT,CAAN,CAAP;AACAk7Q,EAAAA,EAAE,IAAItzO,CAAC,IAAIy9G,EAAE,IAAIA,EAAE,GAAGt0F,CAAT,CAAN,CAAP;AACA4qN,EAAAA,sBAAsB,CAAChgF,EAAD,EAAKC,EAAL,EAASv2C,EAAT,CAAtB;AACD;;AAEc,kBAASs9B,MAAT,EAAiB;AAC9Bg4F,EAAAA,EAAE,GAAGC,EAAE,GACPC,EAAE,GAAGC,EAAE,GAAGC,EAAE,GACZC,EAAE,GAAGC,EAAE,GAAGC,EAAE,GAAG,CAFf;AAGArzD,EAAAA,EAAE,GAAG,IAAIpnB,cAAJ,EAAL;AACA06E,EAAAA,EAAE,GAAG,IAAI16E,cAAJ,EAAL;AACA26E,EAAAA,EAAE,GAAG,IAAI36E,cAAJ,EAAL;AACA,uBAAO9d,MAAP,EAAe04F,cAAf;AAEA,MAAI55R,CAAC,GAAG,CAAComO,EAAT;AAAA,MACI7nN,CAAC,GAAG,CAACm7Q,EADT;AAAA,MAEIpqN,CAAC,GAAG,CAACqqN,EAFT;AAAA,MAGIroM,CAAC,GAAG,iBAAMtxF,CAAN,EAASue,CAAT,EAAY+wD,CAAZ,CAHR,CAT8B,CAc9B;;AACA,MAAIgiB,CAAC,GAAGskK,cAAR,EAAkB;AAChB51P,IAAAA,CAAC,GAAGu5R,EAAJ,EAAQh7Q,CAAC,GAAGi7Q,EAAZ,EAAgBlqN,CAAC,GAAGmqN,EAApB,CADgB,CAEhB;;AACA,QAAIN,EAAE,GAAGjiN,aAAT,EAAkBl3E,CAAC,GAAGo5R,EAAJ,EAAQ76Q,CAAC,GAAG86Q,EAAZ,EAAgB/pN,CAAC,GAAGgqN,EAApB;AAClBhoM,IAAAA,CAAC,GAAG,iBAAMtxF,CAAN,EAASue,CAAT,EAAY+wD,CAAZ,CAAJ,CAJgB,CAKhB;;AACA,QAAIgiB,CAAC,GAAGskK,cAAR,EAAkB,OAAO,CAACxpL,GAAD,EAAMA,GAAN,CAAP;AACnB;;AAED,SAAO,CAAC,iBAAM7tD,CAAN,EAASve,CAAT,IAAc8wP,aAAf,EAAwB,gBAAKxhL,CAAC,GAAGgiB,CAAT,IAAcw/J,aAAtC,CAAP;AACD;;;;;;;;;AE9Ic,kBAAS/vP,CAAT,EAAY6G,CAAZ,EAAe;AAE5B,WAAS4yR,OAAT,CAAiBx6R,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,WAAOve,CAAC,GAAGe,CAAC,CAACf,CAAD,EAAIue,CAAJ,CAAL,EAAa3W,CAAC,CAAC5H,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAArB;AACD;;AAED,MAAIe,CAAC,CAACw2P,MAAF,IAAY3vP,CAAC,CAAC2vP,MAAlB,EAA0BijC,OAAO,CAACjjC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACxD,WAAOve,CAAC,GAAG4H,CAAC,CAAC2vP,MAAF,CAASv3P,CAAT,EAAYue,CAAZ,CAAJ,EAAoBve,CAAC,IAAIe,CAAC,CAACw2P,MAAF,CAASv3P,CAAC,CAAC,CAAD,CAAV,EAAeA,CAAC,CAAC,CAAD,CAAhB,CAAhC;AACD,GAFyB;AAI1B,SAAOw6R,OAAP;AACD;;;;;;;;;;ACXD;;AACA;;;;AAEA,SAASC,gBAAT,CAA0B3D,MAA1B,EAAkCC,GAAlC,EAAuC;AACrC,SAAO,CAAC,eAAID,MAAJ,IAAcjgD,QAAd,GAAmBigD,MAAM,GAAGl3R,IAAI,CAACsG,KAAL,CAAW,CAAC4wR,MAAD,GAAUhgD,SAArB,IAA4BA,SAAxD,GAA8DggD,MAA/D,EAAuEC,GAAvE,CAAP;AACD;;AAED0D,gBAAgB,CAACljC,MAAjB,GAA0BkjC,gBAA1B;;AAEO,SAASC,aAAT,CAAuBC,WAAvB,EAAoCC,QAApC,EAA8CC,UAA9C,EAA0D;AAC/D,SAAO,CAACF,WAAW,IAAI7jD,SAAhB,IAAwB8jD,QAAQ,IAAIC,UAAZ,GAAyB,sBAAQC,cAAc,CAACH,WAAD,CAAtB,EAAqCI,gBAAgB,CAACH,QAAD,EAAWC,UAAX,CAArD,CAAzB,GAC3BC,cAAc,CAACH,WAAD,CADX,GAEFC,QAAQ,IAAIC,UAAZ,GAAyBE,gBAAgB,CAACH,QAAD,EAAWC,UAAX,CAAzC,GACDJ,gBAHJ;AAID;;AAED,SAASO,qBAAT,CAA+BL,WAA/B,EAA4C;AAC1C,SAAO,UAAS7D,MAAT,EAAiBC,GAAjB,EAAsB;AAC3B,WAAOD,MAAM,IAAI6D,WAAV,EAAuB,CAAC7D,MAAM,GAAGjgD,QAAT,GAAcigD,MAAM,GAAGhgD,SAAvB,GAA6BggD,MAAM,GAAG,CAACjgD,QAAV,GAAeigD,MAAM,GAAGhgD,SAAxB,GAA8BggD,MAA5D,EAAoEC,GAApE,CAA9B;AACD,GAFD;AAGD;;AAED,SAAS+D,cAAT,CAAwBH,WAAxB,EAAqC;AACnC,MAAIM,QAAQ,GAAGD,qBAAqB,CAACL,WAAD,CAApC;AACAM,EAAAA,QAAQ,CAAC1jC,MAAT,GAAkByjC,qBAAqB,CAAC,CAACL,WAAF,CAAvC;AACA,SAAOM,QAAP;AACD;;AAED,SAASF,gBAAT,CAA0BH,QAA1B,EAAoCC,UAApC,EAAgD;AAC9C,MAAIK,WAAW,GAAG,eAAIN,QAAJ,CAAlB;AAAA,MACIO,WAAW,GAAG,eAAIP,QAAJ,CADlB;AAAA,MAEIQ,aAAa,GAAG,eAAIP,UAAJ,CAFpB;AAAA,MAGIQ,aAAa,GAAG,eAAIR,UAAJ,CAHpB;;AAKA,WAASI,QAAT,CAAkBnE,MAAlB,EAA0BC,GAA1B,EAA+B;AAC7B,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI/2R,CAAC,GAAG,eAAI82R,MAAJ,IAAcK,MADtB;AAAA,QAEI54Q,CAAC,GAAG,eAAIu4Q,MAAJ,IAAcK,MAFtB;AAAA,QAGI7nN,CAAC,GAAG,eAAIynN,GAAJ,CAHR;AAAA,QAII5/Q,CAAC,GAAGm4D,CAAC,GAAG4rN,WAAJ,GAAkBl7R,CAAC,GAAGm7R,WAJ9B;AAKA,WAAO,CACL,iBAAM58Q,CAAC,GAAG68Q,aAAJ,GAAoBjkR,CAAC,GAAGkkR,aAA9B,EAA6Cr7R,CAAC,GAAGk7R,WAAJ,GAAkB5rN,CAAC,GAAG6rN,WAAnE,CADK,EAEL,gBAAKhkR,CAAC,GAAGikR,aAAJ,GAAoB78Q,CAAC,GAAG88Q,aAA7B,CAFK,CAAP;AAID;;AAEDJ,EAAAA,QAAQ,CAAC1jC,MAAT,GAAkB,UAASu/B,MAAT,EAAiBC,GAAjB,EAAsB;AACtC,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI/2R,CAAC,GAAG,eAAI82R,MAAJ,IAAcK,MADtB;AAAA,QAEI54Q,CAAC,GAAG,eAAIu4Q,MAAJ,IAAcK,MAFtB;AAAA,QAGI7nN,CAAC,GAAG,eAAIynN,GAAJ,CAHR;AAAA,QAII5/Q,CAAC,GAAGm4D,CAAC,GAAG8rN,aAAJ,GAAoB78Q,CAAC,GAAG88Q,aAJhC;AAKA,WAAO,CACL,iBAAM98Q,CAAC,GAAG68Q,aAAJ,GAAoB9rN,CAAC,GAAG+rN,aAA9B,EAA6Cr7R,CAAC,GAAGk7R,WAAJ,GAAkB/jR,CAAC,GAAGgkR,WAAnE,CADK,EAEL,gBAAKhkR,CAAC,GAAG+jR,WAAJ,GAAkBl7R,CAAC,GAAGm7R,WAA3B,CAFK,CAAP;AAID,GAVD;;AAYA,SAAOF,QAAP;AACD;;AAEc,kBAAS7mC,MAAT,EAAiB;AAC9BA,EAAAA,MAAM,GAAGsmC,aAAa,CAACtmC,MAAM,CAAC,CAAD,CAAN,GAAYvD,aAAb,EAAsBuD,MAAM,CAAC,CAAD,CAAN,GAAYvD,aAAlC,EAA2CuD,MAAM,CAACj7P,MAAP,GAAgB,CAAhB,GAAoBi7P,MAAM,CAAC,CAAD,CAAN,GAAYvD,aAAhC,GAA0C,CAArF,CAAtB;;AAEA,WAASyqC,OAAT,CAAiB5gF,WAAjB,EAA8B;AAC5BA,IAAAA,WAAW,GAAG05C,MAAM,CAAC15C,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAAlB,EAA2Bn2C,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAA5C,CAApB;AACA,WAAOn2C,WAAW,CAAC,CAAD,CAAX,IAAkBo2C,aAAlB,EAA2Bp2C,WAAW,CAAC,CAAD,CAAX,IAAkBo2C,aAA7C,EAAsDp2C,WAA7D;AACD;;AAED4gF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAAS78C,WAAT,EAAsB;AACrCA,IAAAA,WAAW,GAAG05C,MAAM,CAACmD,MAAP,CAAc78C,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAA/B,EAAwCn2C,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAAzD,CAAd;AACA,WAAOn2C,WAAW,CAAC,CAAD,CAAX,IAAkBo2C,aAAlB,EAA2Bp2C,WAAW,CAAC,CAAD,CAAX,IAAkBo2C,aAA7C,EAAsDp2C,WAA7D;AACD,GAHD;;AAKA,SAAO4gF,OAAP;AACD;;;;;;;;;;AC3ED;;AACA;;AACA;;AACA;;;;AAEA;AACO,SAASC,YAAT,CAAsB94G,MAAtB,EAA8BzsK,MAA9B,EAAsCw5E,KAAtC,EAA6CgsM,SAA7C,EAAwD12E,EAAxD,EAA4DtkI,EAA5D,EAAgE;AACrE,MAAI,CAACgP,KAAL,EAAY;AACZ,MAAIisM,SAAS,GAAG,eAAIzlR,MAAJ,CAAhB;AAAA,MACI0lR,SAAS,GAAG,eAAI1lR,MAAJ,CADhB;AAAA,MAEIzB,IAAI,GAAGinR,SAAS,GAAGhsM,KAFvB;;AAGA,MAAIs1H,EAAE,IAAI,IAAV,EAAgB;AACdA,IAAAA,EAAE,GAAG9uM,MAAM,GAAGwlR,SAAS,GAAG1kD,SAA1B;AACAt2J,IAAAA,EAAE,GAAGxqE,MAAM,GAAGzB,IAAI,GAAG,CAArB;AACD,GAHD,MAGO;AACLuwM,IAAAA,EAAE,GAAG62E,YAAY,CAACF,SAAD,EAAY32E,EAAZ,CAAjB;AACAtkI,IAAAA,EAAE,GAAGm7M,YAAY,CAACF,SAAD,EAAYj7M,EAAZ,CAAjB;AACA,QAAIg7M,SAAS,GAAG,CAAZ,GAAgB12E,EAAE,GAAGtkI,EAArB,GAA0BskI,EAAE,GAAGtkI,EAAnC,EAAuCskI,EAAE,IAAI02E,SAAS,GAAG1kD,SAAlB;AACxC;;AACD,OAAK,IAAI17B,KAAJ,EAAW79M,CAAC,GAAGunN,EAApB,EAAwB02E,SAAS,GAAG,CAAZ,GAAgBj+R,CAAC,GAAGijF,EAApB,GAAyBjjF,CAAC,GAAGijF,EAArD,EAAyDjjF,CAAC,IAAIgX,IAA9D,EAAoE;AAClE6mM,IAAAA,KAAK,GAAG,0BAAU,CAACqgF,SAAD,EAAY,CAACC,SAAD,GAAa,eAAIn+R,CAAJ,CAAzB,EAAiC,CAACm+R,SAAD,GAAa,eAAIn+R,CAAJ,CAA9C,CAAV,CAAR;AACAklL,IAAAA,MAAM,CAAC24B,KAAP,CAAaA,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B;AACD;AACF,EAED;;;AACA,SAASugF,YAAT,CAAsBF,SAAtB,EAAiCrgF,KAAjC,EAAwC;AACtCA,EAAAA,KAAK,GAAG,0BAAUA,KAAV,CAAR,EAA0BA,KAAK,CAAC,CAAD,CAAL,IAAYqgF,SAAtC;AACA,4CAA0BrgF,KAA1B;AACA,MAAIplM,MAAM,GAAG,gBAAK,CAAColM,KAAK,CAAC,CAAD,CAAX,CAAb;AACA,SAAO,CAAC,CAAC,CAACA,KAAK,CAAC,CAAD,CAAN,GAAY,CAAZ,GAAgB,CAACplM,MAAjB,GAA0BA,MAA3B,IAAqC8gO,SAArC,GAA2C5/J,aAA5C,IAAuD4/J,SAA9D;AACD;;AAEc,oBAAW;AACxB,MAAI/8E,MAAM,GAAG,uBAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,CAAb;AAAA,MACI/jJ,MAAM,GAAG,uBAAS,EAAT,CADb;AAAA,MAEI+3E,SAAS,GAAG,uBAAS,CAAT,CAFhB;AAAA,MAGIstH,IAHJ;AAAA,MAII+4C,MAJJ;AAAA,MAKI3xE,MAAM,GAAG;AAAC24B,IAAAA,KAAK,EAAEA;AAAR,GALb;;AAOA,WAASA,KAAT,CAAep7M,CAAf,EAAkBue,CAAlB,EAAqB;AACnB88L,IAAAA,IAAI,CAACvhN,IAAL,CAAUkG,CAAC,GAAGo0P,MAAM,CAACp0P,CAAD,EAAIue,CAAJ,CAApB;AACAve,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ8wP,aAAR,EAAiB9wP,CAAC,CAAC,CAAD,CAAD,IAAQ8wP,aAAzB;AACD;;AAED,WAASxR,MAAT,GAAkB;AAChB,QAAIh5O,CAAC,GAAGyzJ,MAAM,CAAC7/J,KAAP,CAAa,IAAb,EAAmBN,SAAnB,CAAR;AAAA,QACIiO,CAAC,GAAGmO,MAAM,CAAC9b,KAAP,CAAa,IAAb,EAAmBN,SAAnB,IAAgCi3P,aADxC;AAAA,QAEI1yN,CAAC,GAAG4vD,SAAS,CAAC7zF,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,IAAmCi3P,aAF3C;;AAGAx1C,IAAAA,IAAI,GAAG,EAAP;AACA+4C,IAAAA,MAAM,GAAG,6BAAc,CAAC9tP,CAAC,CAAC,CAAD,CAAF,GAAQuqP,aAAtB,EAA+B,CAACvqP,CAAC,CAAC,CAAD,CAAF,GAAQuqP,aAAvC,EAAgD,CAAhD,EAAmD0G,MAA5D;AACAgkC,IAAAA,YAAY,CAAC94G,MAAD,EAAS56K,CAAT,EAAYs2B,CAAZ,EAAe,CAAf,CAAZ;AACA73B,IAAAA,CAAC,GAAG;AAACwT,MAAAA,IAAI,EAAE,SAAP;AAAkB4gM,MAAAA,WAAW,EAAE,CAACW,IAAD;AAA/B,KAAJ;AACAA,IAAAA,IAAI,GAAG+4C,MAAM,GAAG,IAAhB;AACA,WAAO9tP,CAAP;AACD;;AAEDg5O,EAAAA,MAAM,CAACvlF,MAAP,GAAgB,UAASv5I,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4gK,MAAM,GAAG,OAAOv5I,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAT,CAAvC,EAAiE8+N,MAArF,IAA+FvlF,MAAtG;AACD,GAFD;;AAIAulF,EAAAA,MAAM,CAACtpO,MAAP,GAAgB,UAASwK,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6c,MAAM,GAAG,OAAOwK,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAvC,EAAqD8+N,MAAzE,IAAmFtpO,MAA1F;AACD,GAFD;;AAIAspO,EAAAA,MAAM,CAACvxJ,SAAP,GAAmB,UAASvtE,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB40F,SAAS,GAAG,OAAOvtE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA1C,EAAwD8+N,MAA5E,IAAsFvxJ,SAA7F;AACD,GAFD;;AAIA,SAAOuxJ,MAAP;AACD;;;;;;;;;ACvED;;;;AAEe,oBAAW;AACxB,MAAI/zO,KAAK,GAAG,EAAZ;AAAA,MACI6iB,IADJ;AAEA,SAAO;AACLgtL,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe+yE,CAAf,EAAkB;AACvBljE,MAAAA,IAAI,CAACt0B,IAAL,CAAU,CAACkG,CAAD,EAAIue,CAAJ,EAAO+yE,CAAP,CAAV;AACD,KAHI;AAILirJ,IAAAA,SAAS,EAAE,YAAW;AACpBhxO,MAAAA,KAAK,CAACzR,IAAN,CAAWs0B,IAAI,GAAG,EAAlB;AACD,KANI;AAOLquN,IAAAA,OAAO,EAAEhiP,aAPJ;AAQLmhS,IAAAA,MAAM,EAAE,YAAW;AACjB,UAAIrwR,KAAK,CAACpS,MAAN,GAAe,CAAnB,EAAsBoS,KAAK,CAACzR,IAAN,CAAWyR,KAAK,CAAC0Y,GAAN,GAAY7qB,MAAZ,CAAmBmS,KAAK,CAACozC,KAAN,EAAnB,CAAX;AACvB,KAVI;AAWL5/C,IAAAA,MAAM,EAAE,YAAW;AACjB,UAAIA,MAAM,GAAGwM,KAAb;AACAA,MAAAA,KAAK,GAAG,EAAR;AACA6iB,MAAAA,IAAI,GAAG,IAAP;AACA,aAAOrvB,MAAP;AACD;AAhBI,GAAP;AAkBD;;;;;;;;;ACvBD;;AAEe,kBAASgC,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO,eAAI7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAZ,IAAmBsvE,aAAnB,IAA8B,eAAIn2E,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAZ,IAAmBsvE,aAAxD;AACD;;;;;;;;;ACJD;;AACA;;;;AAEA,SAAS2kN,YAAT,CAAsBzgF,KAAtB,EAA6BD,MAA7B,EAAqCxW,KAArC,EAA4C5/E,KAA5C,EAAmD;AACjD,OAAK/kH,CAAL,GAASo7M,KAAT;AACA,OAAK9rI,CAAL,GAAS6rI,MAAT;AACA,OAAK31L,CAAL,GAASm/K,KAAT,CAHiD,CAGjC;;AAChB,OAAKpsM,CAAL,GAASwsH,KAAT,CAJiD,CAIjC;;AAChB,OAAKh5G,CAAL,GAAS,KAAT,CALiD,CAKjC;;AAChB,OAAKhE,CAAL,GAAS,KAAKo2B,CAAL,GAAS,IAAlB,CANiD,CAMzB;AACzB,EAED;AACA;AACA;;;AACe,kBAAS2oO,QAAT,EAAmBg1B,mBAAnB,EAAwCC,WAAxC,EAAqD/kC,WAArD,EAAkEv0E,MAAlE,EAA0E;AACvF,MAAIu5G,OAAO,GAAG,EAAd;AAAA,MACIj6P,IAAI,GAAG,EADX;AAAA,MAEIloC,CAFJ;AAAA,MAGIkO,CAHJ;AAKA++P,EAAAA,QAAQ,CAACnpQ,OAAT,CAAiB,UAASs+R,OAAT,EAAkB;AACjC,QAAI,CAACl0R,CAAC,GAAGk0R,OAAO,CAAC9iS,MAAR,GAAiB,CAAtB,KAA4B,CAAhC,EAAmC;AACnC,QAAI4O,CAAJ;AAAA,QAAOg0M,EAAE,GAAGkgF,OAAO,CAAC,CAAD,CAAnB;AAAA,QAAwBrtK,EAAE,GAAGqtK,OAAO,CAACl0R,CAAD,CAApC;AAAA,QAAyC/H,CAAzC;;AAEA,QAAI,yBAAW+7M,EAAX,EAAentF,EAAf,CAAJ,EAAwB;AACtB,UAAI,CAACmtF,EAAE,CAAC,CAAD,CAAH,IAAU,CAACntF,EAAE,CAAC,CAAD,CAAjB,EAAsB;AACpB6zD,QAAAA,MAAM,CAAC85D,SAAP;;AACA,aAAK1iP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB4oL,MAAM,CAAC24B,KAAP,CAAa,CAACW,EAAE,GAAGkgF,OAAO,CAACpiS,CAAD,CAAb,EAAkB,CAAlB,CAAb,EAAmCkiN,EAAE,CAAC,CAAD,CAArC;;AACxBt5B,QAAAA,MAAM,CAACg6D,OAAP;AACA;AACD,OANqB,CAOtB;;;AACA7tH,MAAAA,EAAE,CAAC,CAAD,CAAF,IAAS,IAAI13C,aAAb;AACD;;AAED8kN,IAAAA,OAAO,CAACliS,IAAR,CAAakG,CAAC,GAAG,IAAI67R,YAAJ,CAAiB9/E,EAAjB,EAAqBkgF,OAArB,EAA8B,IAA9B,EAAoC,IAApC,CAAjB;AACAl6P,IAAAA,IAAI,CAACjoC,IAAL,CAAUkG,CAAC,CAACwlB,CAAF,GAAM,IAAIq2Q,YAAJ,CAAiB9/E,EAAjB,EAAqB,IAArB,EAA2B/7M,CAA3B,EAA8B,KAA9B,CAAhB;AACAg8R,IAAAA,OAAO,CAACliS,IAAR,CAAakG,CAAC,GAAG,IAAI67R,YAAJ,CAAiBjtK,EAAjB,EAAqBqtK,OAArB,EAA8B,IAA9B,EAAoC,KAApC,CAAjB;AACAl6P,IAAAA,IAAI,CAACjoC,IAAL,CAAUkG,CAAC,CAACwlB,CAAF,GAAM,IAAIq2Q,YAAJ,CAAiBjtK,EAAjB,EAAqB,IAArB,EAA2B5uH,CAA3B,EAA8B,IAA9B,CAAhB;AACD,GAnBD;AAqBA,MAAI,CAACg8R,OAAO,CAAC7iS,MAAb,EAAqB;AAErB4oC,EAAAA,IAAI,CAACl+B,IAAL,CAAUi4R,mBAAV;AACAv9C,EAAAA,IAAI,CAACy9C,OAAD,CAAJ;AACAz9C,EAAAA,IAAI,CAACx8M,IAAD,CAAJ;;AAEA,OAAKloC,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGg6B,IAAI,CAAC5oC,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCkoC,IAAAA,IAAI,CAACloC,CAAD,CAAJ,CAAQtB,CAAR,GAAYwjS,WAAW,GAAG,CAACA,WAA3B;AACD;;AAED,MAAIp2R,KAAK,GAAGq2R,OAAO,CAAC,CAAD,CAAnB;AAAA,MACI7gF,MADJ;AAAA,MAEIC,KAFJ;;AAIA,SAAO,CAAP,EAAU;AACR;AACA,QAAIzwC,OAAO,GAAGhlK,KAAd;AAAA,QACIu2R,SAAS,GAAG,IADhB;;AAEA,WAAOvxH,OAAO,CAAC5+J,CAAf,EAAkB,IAAI,CAAC4+J,OAAO,GAAGA,OAAO,CAAC5iK,CAAnB,MAA0BpC,KAA9B,EAAqC;;AACvDw1M,IAAAA,MAAM,GAAGxwC,OAAO,CAACr7F,CAAjB;AACAmzG,IAAAA,MAAM,CAAC85D,SAAP;;AACA,OAAG;AACD5xE,MAAAA,OAAO,CAAC5+J,CAAR,GAAY4+J,OAAO,CAACnlJ,CAAR,CAAUzZ,CAAV,GAAc,IAA1B;;AACA,UAAI4+J,OAAO,CAACpyK,CAAZ,EAAe;AACb,YAAI2jS,SAAJ,EAAe;AACb,eAAKriS,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGozM,MAAM,CAAChiN,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C4oL,MAAM,CAAC24B,KAAP,CAAa,CAACA,KAAK,GAAGD,MAAM,CAACthN,CAAD,CAAf,EAAoB,CAApB,CAAb,EAAqCuhN,KAAK,CAAC,CAAD,CAA1C;AAC5C,SAFD,MAEO;AACL47C,UAAAA,WAAW,CAACrsF,OAAO,CAAC3qK,CAAT,EAAY2qK,OAAO,CAAC5iK,CAAR,CAAU/H,CAAtB,EAAyB,CAAzB,EAA4ByiL,MAA5B,CAAX;AACD;;AACD9X,QAAAA,OAAO,GAAGA,OAAO,CAAC5iK,CAAlB;AACD,OAPD,MAOO;AACL,YAAIm0R,SAAJ,EAAe;AACb/gF,UAAAA,MAAM,GAAGxwC,OAAO,CAACxsI,CAAR,CAAUmxC,CAAnB;;AACA,eAAKz1E,CAAC,GAAGshN,MAAM,CAAChiN,MAAP,GAAgB,CAAzB,EAA4BU,CAAC,IAAI,CAAjC,EAAoC,EAAEA,CAAtC,EAAyC4oL,MAAM,CAAC24B,KAAP,CAAa,CAACA,KAAK,GAAGD,MAAM,CAACthN,CAAD,CAAf,EAAoB,CAApB,CAAb,EAAqCuhN,KAAK,CAAC,CAAD,CAA1C;AAC1C,SAHD,MAGO;AACL47C,UAAAA,WAAW,CAACrsF,OAAO,CAAC3qK,CAAT,EAAY2qK,OAAO,CAACxsI,CAAR,CAAUn+B,CAAtB,EAAyB,CAAC,CAA1B,EAA6ByiL,MAA7B,CAAX;AACD;;AACD9X,QAAAA,OAAO,GAAGA,OAAO,CAACxsI,CAAlB;AACD;;AACDwsI,MAAAA,OAAO,GAAGA,OAAO,CAACnlJ,CAAlB;AACA21L,MAAAA,MAAM,GAAGxwC,OAAO,CAACr7F,CAAjB;AACA4sN,MAAAA,SAAS,GAAG,CAACA,SAAb;AACD,KArBD,QAqBS,CAACvxH,OAAO,CAAC5+J,CArBlB;;AAsBA02K,IAAAA,MAAM,CAACg6D,OAAP;AACD;AACF;;AAED,SAAS8B,IAAT,CAAcvkP,KAAd,EAAqB;AACnB,MAAI,EAAE+N,CAAC,GAAG/N,KAAK,CAACb,MAAZ,CAAJ,EAAyB;AACzB,MAAI4O,CAAJ;AAAA,MACIlO,CAAC,GAAG,CADR;AAAA,MAEIkH,CAAC,GAAG/G,KAAK,CAAC,CAAD,CAFb;AAAA,MAGI4N,CAHJ;;AAIA,SAAO,EAAE/N,CAAF,GAAMkO,CAAb,EAAgB;AACdhH,IAAAA,CAAC,CAACgH,CAAF,GAAMH,CAAC,GAAG5N,KAAK,CAACH,CAAD,CAAf;AACA+N,IAAAA,CAAC,CAACu2B,CAAF,GAAMp9B,CAAN;AACAA,IAAAA,CAAC,GAAG6G,CAAJ;AACD;;AACD7G,EAAAA,CAAC,CAACgH,CAAF,GAAMH,CAAC,GAAG5N,KAAK,CAAC,CAAD,CAAf;AACA4N,EAAAA,CAAC,CAACu2B,CAAF,GAAMp9B,CAAN;AACD;;;;;;;;;ACtGD;;AACA;;AACA;;AAEA,SAASo7R,SAAT,CAAmB/gF,KAAnB,EAA0B;AACxB,MAAI,eAAIA,KAAK,CAAC,CAAD,CAAT,KAAiBy7B,QAArB,EACE,OAAOz7B,KAAK,CAAC,CAAD,CAAZ,CADF,KAGE,OAAO,gBAAKA,KAAK,CAAC,CAAD,CAAV,KAAkB,CAAC,eAAIA,KAAK,CAAC,CAAD,CAAT,IAAgBy7B,QAAjB,IAAuBC,SAAvB,GAA6BD,QAA/C,CAAP;AACH;;AAEc,kBAASv7B,OAAT,EAAkBF,KAAlB,EAAyB;AACtC,MAAI07E,MAAM,GAAGqF,SAAS,CAAC/gF,KAAD,CAAtB;AAAA,MACI27E,GAAG,GAAG37E,KAAK,CAAC,CAAD,CADf;AAAA,MAEIg8E,MAAM,GAAG,eAAIL,GAAJ,CAFb;AAAA,MAGIjoD,MAAM,GAAG,CAAC,eAAIgoD,MAAJ,CAAD,EAAc,CAAC,eAAIA,MAAJ,CAAf,EAA4B,CAA5B,CAHb;AAAA,MAII94C,KAAK,GAAG,CAJZ;AAAA,MAKIo+C,OAAO,GAAG,CALd;AAOA,MAAIh8R,GAAG,GAAG,IAAI4+M,cAAJ,EAAV;AAEA,MAAIo4E,MAAM,KAAK,CAAf,EAAkBL,GAAG,GAAGp+C,eAASzhK,aAAf,CAAlB,KACK,IAAIkgN,MAAM,KAAK,CAAC,CAAhB,EAAmBL,GAAG,GAAG,CAACp+C,YAAD,GAAUzhK,aAAhB;;AAExB,OAAK,IAAIr9E,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGuzM,OAAO,CAACniN,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C,QAAI,EAAEy3F,CAAC,GAAG,CAAC+pH,IAAI,GAAGC,OAAO,CAACzhN,CAAD,CAAf,EAAoBV,MAA1B,CAAJ,EAAuC;AACvC,QAAIkiN,IAAJ;AAAA,QACI/pH,CADJ;AAAA,QAEI+qM,MAAM,GAAGhhF,IAAI,CAAC/pH,CAAC,GAAG,CAAL,CAFjB;AAAA,QAGI+kM,OAAO,GAAG8F,SAAS,CAACE,MAAD,CAHvB;AAAA,QAIIxE,IAAI,GAAGwE,MAAM,CAAC,CAAD,CAAN,GAAY,CAAZ,GAAgBrH,eAJ3B;AAAA,QAKIuB,OAAO,GAAG,eAAIsB,IAAJ,CALd;AAAA,QAMIvB,OAAO,GAAG,eAAIuB,IAAJ,CANd;;AAQA,SAAK,IAAI/zR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtF,CAApB,EAAuB,EAAExtF,CAAF,EAAKuyR,OAAO,GAAGyB,OAAf,EAAwBvB,OAAO,GAAG+F,OAAlC,EAA2ChG,OAAO,GAAGiG,OAArD,EAA8DF,MAAM,GAAGG,MAA9F,EAAsG;AACpG,UAAIA,MAAM,GAAGnhF,IAAI,CAACv3M,CAAD,CAAjB;AAAA,UACIg0R,OAAO,GAAGqE,SAAS,CAACK,MAAD,CADvB;AAAA,UAEIzE,IAAI,GAAGyE,MAAM,CAAC,CAAD,CAAN,GAAY,CAAZ,GAAgBxH,eAF3B;AAAA,UAGIsH,OAAO,GAAG,eAAIvE,IAAJ,CAHd;AAAA,UAIIwE,OAAO,GAAG,eAAIxE,IAAJ,CAJd;AAAA,UAKIvoM,KAAK,GAAGsoM,OAAO,GAAGzB,OALtB;AAAA,UAMI/jR,IAAI,GAAGk9E,KAAK,IAAI,CAAT,GAAa,CAAb,GAAiB,CAAC,CAN7B;AAAA,UAOIitM,QAAQ,GAAGnqR,IAAI,GAAGk9E,KAPtB;AAAA,UAQIspM,YAAY,GAAG2D,QAAQ,GAAG5lD,QAR9B;AAAA,UASI1/N,CAAC,GAAGo/Q,OAAO,GAAG+F,OATlB;AAWAl8R,MAAAA,GAAG,CAACoa,GAAJ,CAAQ,iBAAMrD,CAAC,GAAG7E,IAAJ,GAAW,eAAImqR,QAAJ,CAAjB,EAAgCnG,OAAO,GAAGiG,OAAV,GAAoBplR,CAAC,GAAG,eAAIslR,QAAJ,CAAxD,CAAR;AACAz+C,MAAAA,KAAK,IAAI86C,YAAY,GAAGtpM,KAAK,GAAGl9E,IAAI,GAAGwkO,SAAlB,GAAwBtnJ,KAA7C,CAboG,CAepG;AACA;;AACA,UAAIspM,YAAY,GAAGzC,OAAO,IAAIS,MAA1B,GAAmCgB,OAAO,IAAIhB,MAAlD,EAA0D;AACxD,YAAIl8E,GAAG,GAAG,+BAAe,0BAAUyhF,MAAV,CAAf,EAAkC,0BAAUG,MAAV,CAAlC,CAAV;AACA,kDAA0B5hF,GAA1B;AACA,YAAI2H,YAAY,GAAG,+BAAeusB,MAAf,EAAuBl0B,GAAvB,CAAnB;AACA,kDAA0B2H,YAA1B;AACA,YAAIm6E,MAAM,GAAG,CAAC5D,YAAY,GAAGtpM,KAAK,IAAI,CAAxB,GAA4B,CAAC,CAA7B,GAAiC,CAAlC,IAAuC,gBAAK+yH,YAAY,CAAC,CAAD,CAAjB,CAApD;;AACA,YAAIw0E,GAAG,GAAG2F,MAAN,IAAgB3F,GAAG,KAAK2F,MAAR,KAAmB9hF,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAG,CAAC,CAAD,CAAhC,CAApB,EAA0D;AACxDwhF,UAAAA,OAAO,IAAItD,YAAY,GAAGtpM,KAAK,IAAI,CAAxB,GAA4B,CAA5B,GAAgC,CAAC,CAA5C;AACD;AACF;AACF;AACF,GAnDqC,CAqDtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAO,CAACwuJ,KAAK,GAAG,CAAC9mK,aAAT,IAAoB8mK,KAAK,GAAG9mK,aAAR,IAAmB92E,GAAG,GAAG,CAACw1P,cAA/C,IAA4DwmC,OAAO,GAAG,CAA7E;AACD;;;;;;;;;AC5ED;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASO,YAAT,EAAuBC,QAAvB,EAAiC5lC,WAAjC,EAA8CrxP,KAA9C,EAAqD;AAClE,SAAO,UAASk3R,IAAT,EAAe;AACpB,QAAIzuQ,IAAI,GAAGwuQ,QAAQ,CAACC,IAAD,CAAnB;AAAA,QACIC,UAAU,GAAG,sBADjB;AAAA,QAEIC,QAAQ,GAAGH,QAAQ,CAACE,UAAD,CAFvB;AAAA,QAGIE,cAAc,GAAG,KAHrB;AAAA,QAII1hF,OAJJ;AAAA,QAKIwrD,QALJ;AAAA,QAMIzrD,IANJ;AAQA,QAAIt5K,IAAI,GAAG;AACTq5K,MAAAA,KAAK,EAAEA,KADE;AAETmhC,MAAAA,SAAS,EAAEA,SAFF;AAGTE,MAAAA,OAAO,EAAEA,OAHA;AAITs5C,MAAAA,YAAY,EAAE,YAAW;AACvBh0P,QAAAA,IAAI,CAACq5K,KAAL,GAAa6hF,SAAb;AACAl7P,QAAAA,IAAI,CAACw6M,SAAL,GAAiB2gD,SAAjB;AACAn7P,QAAAA,IAAI,CAAC06M,OAAL,GAAe0gD,OAAf;AACAr2B,QAAAA,QAAQ,GAAG,EAAX;AACAxrD,QAAAA,OAAO,GAAG,EAAV;AACD,OAVQ;AAWT06E,MAAAA,UAAU,EAAE,YAAW;AACrBj0P,QAAAA,IAAI,CAACq5K,KAAL,GAAaA,KAAb;AACAr5K,QAAAA,IAAI,CAACw6M,SAAL,GAAiBA,SAAjB;AACAx6M,QAAAA,IAAI,CAAC06M,OAAL,GAAeA,OAAf;AACAqqB,QAAAA,QAAQ,GAAG,oBAAMA,QAAN,CAAX;AACA,YAAIi1B,WAAW,GAAG,8BAAgBzgF,OAAhB,EAAyB31M,KAAzB,CAAlB;;AACA,YAAImhQ,QAAQ,CAAC3tQ,MAAb,EAAqB;AACnB,cAAI,CAAC6jS,cAAL,EAAqBH,IAAI,CAAC9G,YAAL,IAAqBiH,cAAc,GAAG,IAAtC;AACrB,+BAAWl2B,QAAX,EAAqBg1B,mBAArB,EAA0CC,WAA1C,EAAuD/kC,WAAvD,EAAoE6lC,IAApE;AACD,SAHD,MAGO,IAAId,WAAJ,EAAiB;AACtB,cAAI,CAACiB,cAAL,EAAqBH,IAAI,CAAC9G,YAAL,IAAqBiH,cAAc,GAAG,IAAtC;AACrBH,UAAAA,IAAI,CAACtgD,SAAL;AACAya,UAAAA,WAAW,CAAC,IAAD,EAAO,IAAP,EAAa,CAAb,EAAgB6lC,IAAhB,CAAX;AACAA,UAAAA,IAAI,CAACpgD,OAAL;AACD;;AACD,YAAIugD,cAAJ,EAAoBH,IAAI,CAAC7G,UAAL,IAAmBgH,cAAc,GAAG,KAApC;AACpBl2B,QAAAA,QAAQ,GAAGxrD,OAAO,GAAG,IAArB;AACD,OA5BQ;AA6BTk6E,MAAAA,MAAM,EAAE,YAAW;AACjBqH,QAAAA,IAAI,CAAC9G,YAAL;AACA8G,QAAAA,IAAI,CAACtgD,SAAL;AACAya,QAAAA,WAAW,CAAC,IAAD,EAAO,IAAP,EAAa,CAAb,EAAgB6lC,IAAhB,CAAX;AACAA,QAAAA,IAAI,CAACpgD,OAAL;AACAogD,QAAAA,IAAI,CAAC7G,UAAL;AACD;AAnCQ,KAAX;;AAsCA,aAAS56E,KAAT,CAAe07E,MAAf,EAAuBC,GAAvB,EAA4B;AAC1B,UAAI4F,YAAY,CAAC7F,MAAD,EAASC,GAAT,CAAhB,EAA+B8F,IAAI,CAACzhF,KAAL,CAAW07E,MAAX,EAAmBC,GAAnB;AAChC;;AAED,aAASqG,SAAT,CAAmBtG,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9B3oQ,MAAAA,IAAI,CAACgtL,KAAL,CAAW07E,MAAX,EAAmBC,GAAnB;AACD;;AAED,aAASx6C,SAAT,GAAqB;AACnBx6M,MAAAA,IAAI,CAACq5K,KAAL,GAAagiF,SAAb;AACAhvQ,MAAAA,IAAI,CAACmuN,SAAL;AACD;;AAED,aAASE,OAAT,GAAmB;AACjB16M,MAAAA,IAAI,CAACq5K,KAAL,GAAaA,KAAb;AACAhtL,MAAAA,IAAI,CAACquN,OAAL;AACD;;AAED,aAASwgD,SAAT,CAAmBnG,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9B17E,MAAAA,IAAI,CAACvhN,IAAL,CAAU,CAACg9R,MAAD,EAASC,GAAT,CAAV;AACAgG,MAAAA,QAAQ,CAAC3hF,KAAT,CAAe07E,MAAf,EAAuBC,GAAvB;AACD;;AAED,aAASmG,SAAT,GAAqB;AACnBH,MAAAA,QAAQ,CAACxgD,SAAT;AACAlhC,MAAAA,IAAI,GAAG,EAAP;AACD;;AAED,aAAS8hF,OAAT,GAAmB;AACjBF,MAAAA,SAAS,CAAC5hF,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAD,EAAaA,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAb,CAAT;AACA0hF,MAAAA,QAAQ,CAACtgD,OAAT;AAEA,UAAIv3C,KAAK,GAAG63F,QAAQ,CAAC73F,KAAT,EAAZ;AAAA,UACIm4F,YAAY,GAAGP,UAAU,CAAC/9R,MAAX,EADnB;AAAA,UAEIlF,CAFJ;AAAA,UAEOkO,CAAC,GAAGs1R,YAAY,CAAClkS,MAFxB;AAAA,UAEgCm4F,CAFhC;AAAA,UAGI2qM,OAHJ;AAAA,UAII7gF,KAJJ;AAMAC,MAAAA,IAAI,CAACp3L,GAAL;AACAq3L,MAAAA,OAAO,CAACxhN,IAAR,CAAauhN,IAAb;AACAA,MAAAA,IAAI,GAAG,IAAP;AAEA,UAAI,CAACtzM,CAAL,EAAQ,OAdS,CAgBjB;;AACA,UAAIm9L,KAAK,GAAG,CAAZ,EAAe;AACb+2F,QAAAA,OAAO,GAAGoB,YAAY,CAAC,CAAD,CAAtB;;AACA,YAAI,CAAC/rM,CAAC,GAAG2qM,OAAO,CAAC9iS,MAAR,GAAiB,CAAtB,IAA2B,CAA/B,EAAkC;AAChC,cAAI,CAAC6jS,cAAL,EAAqBH,IAAI,CAAC9G,YAAL,IAAqBiH,cAAc,GAAG,IAAtC;AACrBH,UAAAA,IAAI,CAACtgD,SAAL;;AACA,eAAK1iP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGy3F,CAAhB,EAAmB,EAAEz3F,CAArB,EAAwBgjS,IAAI,CAACzhF,KAAL,CAAW,CAACA,KAAK,GAAG6gF,OAAO,CAACpiS,CAAD,CAAhB,EAAqB,CAArB,CAAX,EAAoCuhN,KAAK,CAAC,CAAD,CAAzC;;AACxByhF,UAAAA,IAAI,CAACpgD,OAAL;AACD;;AACD;AACD,OA1BgB,CA4BjB;AACA;;;AACA,UAAI10O,CAAC,GAAG,CAAJ,IAASm9L,KAAK,GAAG,CAArB,EAAwBm4F,YAAY,CAACvjS,IAAb,CAAkBujS,YAAY,CAACp5Q,GAAb,GAAmB7qB,MAAnB,CAA0BikS,YAAY,CAAC1+O,KAAb,EAA1B,CAAlB;AAExBmoN,MAAAA,QAAQ,CAAChtQ,IAAT,CAAcujS,YAAY,CAACroR,MAAb,CAAoBsoR,YAApB,CAAd;AACD;;AAED,WAAOv7P,IAAP;AACD,GA/GD;AAgHD;;AAED,SAASu7P,YAAT,CAAsBrB,OAAtB,EAA+B;AAC7B,SAAOA,OAAO,CAAC9iS,MAAR,GAAiB,CAAxB;AACD,EAED;AACA;;;AACA,SAAS2iS,mBAAT,CAA6B/6R,CAA7B,EAAgC6G,CAAhC,EAAmC;AACjC,SAAO,CAAC,CAAC7G,CAAC,GAAGA,CAAC,CAACf,CAAP,EAAU,CAAV,IAAe,CAAf,GAAmBe,CAAC,CAAC,CAAD,CAAD,GAAO43O,YAAP,GAAgBzhK,aAAnC,GAA6CyhK,eAAS53O,CAAC,CAAC,CAAD,CAAxD,KACC,CAAC6G,CAAC,GAAGA,CAAC,CAAC5H,CAAP,EAAU,CAAV,IAAe,CAAf,GAAmB4H,CAAC,CAAC,CAAD,CAAD,GAAO+wO,YAAP,GAAgBzhK,aAAnC,GAA6CyhK,eAAS/wO,CAAC,CAAC,CAAD,CADxD,CAAP;AAED;;;;;;;;;AClID;;AACA;;;;eAEe,oBACb,YAAW;AAAE,SAAO,IAAP;AAAc,CADd,EAEb21R,oBAFa,EAGbC,2BAHa,EAIb,CAAC,CAAC3mD,QAAF,EAAM,CAAC8B,YAAP,CAJa,GAOf;AACA;AACA;;;;;AACA,SAAS4kD,oBAAT,CAA8B96G,MAA9B,EAAsC;AACpC,MAAI4zG,OAAO,GAAGjqN,GAAd;AAAA,MACIyrN,IAAI,GAAGzrN,GADX;AAAA,MAEIqxN,KAAK,GAAGrxN,GAFZ;AAAA,MAGI84H,KAHJ,CADoC,CAIzB;;AAEX,SAAO;AACLq3C,IAAAA,SAAS,EAAE,YAAW;AACpB95D,MAAAA,MAAM,CAAC85D,SAAP;AACAr3C,MAAAA,KAAK,GAAG,CAAR;AACD,KAJI;AAKLkW,IAAAA,KAAK,EAAE,UAAS08E,OAAT,EAAkBC,IAAlB,EAAwB;AAC7B,UAAI2F,KAAK,GAAG5F,OAAO,GAAG,CAAV,GAAcjhD,QAAd,GAAmB,CAACA,QAAhC;AAAA,UACIrnJ,KAAK,GAAG,eAAIsoM,OAAO,GAAGzB,OAAd,CADZ;;AAEA,UAAI,eAAI7mM,KAAK,GAAGqnJ,QAAZ,IAAkB3/J,aAAtB,EAA+B;AAAE;AAC/BurG,QAAAA,MAAM,CAAC24B,KAAP,CAAai7E,OAAb,EAAsBwB,IAAI,GAAG,CAACA,IAAI,GAAGE,IAAR,IAAgB,CAAhB,GAAoB,CAApB,GAAwBp/C,YAAxB,GAAiC,CAACA,YAA/D;AACAl2D,QAAAA,MAAM,CAAC24B,KAAP,CAAaqiF,KAAb,EAAoB5F,IAApB;AACAp1G,QAAAA,MAAM,CAACg6D,OAAP;AACAh6D,QAAAA,MAAM,CAAC85D,SAAP;AACA95D,QAAAA,MAAM,CAAC24B,KAAP,CAAasiF,KAAb,EAAoB7F,IAApB;AACAp1G,QAAAA,MAAM,CAAC24B,KAAP,CAAa08E,OAAb,EAAsBD,IAAtB;AACA3yF,QAAAA,KAAK,GAAG,CAAR;AACD,OARD,MAQO,IAAIu4F,KAAK,KAAKC,KAAV,IAAmBluM,KAAK,IAAIqnJ,QAAhC,EAAoC;AAAE;AAC3C,YAAI,eAAIw/C,OAAO,GAAGoH,KAAd,IAAuBvmN,aAA3B,EAAoCm/M,OAAO,IAAIoH,KAAK,GAAGvmN,aAAnB,CADK,CACuB;;AAChE,YAAI,eAAI4gN,OAAO,GAAG4F,KAAd,IAAuBxmN,aAA3B,EAAoC4gN,OAAO,IAAI4F,KAAK,GAAGxmN,aAAnB;AACpC2gN,QAAAA,IAAI,GAAG8F,yBAAyB,CAACtH,OAAD,EAAUwB,IAAV,EAAgBC,OAAhB,EAAyBC,IAAzB,CAAhC;AACAt1G,QAAAA,MAAM,CAAC24B,KAAP,CAAaqiF,KAAb,EAAoB5F,IAApB;AACAp1G,QAAAA,MAAM,CAACg6D,OAAP;AACAh6D,QAAAA,MAAM,CAAC85D,SAAP;AACA95D,QAAAA,MAAM,CAAC24B,KAAP,CAAasiF,KAAb,EAAoB7F,IAApB;AACA3yF,QAAAA,KAAK,GAAG,CAAR;AACD;;AACDziB,MAAAA,MAAM,CAAC24B,KAAP,CAAai7E,OAAO,GAAGyB,OAAvB,EAAgCD,IAAI,GAAGE,IAAvC;AACA0F,MAAAA,KAAK,GAAGC,KAAR;AACD,KA5BI;AA6BLjhD,IAAAA,OAAO,EAAE,YAAW;AAClBh6D,MAAAA,MAAM,CAACg6D,OAAP;AACA45C,MAAAA,OAAO,GAAGwB,IAAI,GAAGzrN,GAAjB;AACD,KAhCI;AAiCL84H,IAAAA,KAAK,EAAE,YAAW;AAChB,aAAO,IAAIA,KAAX,CADgB,CACE;AACnB;AAnCI,GAAP;AAqCD;;AAED,SAASy4F,yBAAT,CAAmCtH,OAAnC,EAA4CwB,IAA5C,EAAkDC,OAAlD,EAA2DC,IAA3D,EAAiE;AAC/D,MAAIzB,OAAJ;AAAA,MACIiG,OADJ;AAAA,MAEIqB,iBAAiB,GAAG,eAAIvH,OAAO,GAAGyB,OAAd,CAFxB;AAGA,SAAO,eAAI8F,iBAAJ,IAAyB1mN,aAAzB,GACD,gBAAK,CAAC,eAAI2gN,IAAJ,KAAa0E,OAAO,GAAG,eAAIxE,IAAJ,CAAvB,IAAoC,eAAID,OAAJ,CAApC,GACF,eAAIC,IAAJ,KAAazB,OAAO,GAAG,eAAIuB,IAAJ,CAAvB,IAAoC,eAAIxB,OAAJ,CADnC,KAEAC,OAAO,GAAGiG,OAAV,GAAoBqB,iBAFpB,CAAL,CADC,GAID,CAAC/F,IAAI,GAAGE,IAAR,IAAgB,CAJtB;AAKD;;AAED,SAASyF,2BAAT,CAAqCtyR,IAArC,EAA2C6+L,EAA3C,EAA+CyxF,SAA/C,EAA0D/4G,MAA1D,EAAkE;AAChE,MAAIs0G,GAAJ;;AACA,MAAI7rR,IAAI,IAAI,IAAZ,EAAkB;AAChB6rR,IAAAA,GAAG,GAAGyE,SAAS,GAAG7iD,YAAlB;AACAl2D,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACy7B,QAAd,EAAkBkgD,GAAlB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAAb,EAAgB27E,GAAhB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAay7B,QAAb,EAAiBkgD,GAAjB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAay7B,QAAb,EAAiB,CAAjB;AACAp0D,IAAAA,MAAM,CAAC24B,KAAP,CAAay7B,QAAb,EAAiB,CAACkgD,GAAlB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAAb,EAAgB,CAAC27E,GAAjB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACy7B,QAAd,EAAkB,CAACkgD,GAAnB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACy7B,QAAd,EAAkB,CAAlB;AACAp0D,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACy7B,QAAd,EAAkBkgD,GAAlB;AACD,GAXD,MAWO,IAAI,eAAI7rR,IAAI,CAAC,CAAD,CAAJ,GAAU6+L,EAAE,CAAC,CAAD,CAAhB,IAAuB7yH,aAA3B,EAAoC;AACzC,QAAI4/M,MAAM,GAAG5rR,IAAI,CAAC,CAAD,CAAJ,GAAU6+L,EAAE,CAAC,CAAD,CAAZ,GAAkB8sC,QAAlB,GAAuB,CAACA,QAArC;AACAkgD,IAAAA,GAAG,GAAGyE,SAAS,GAAG1E,MAAZ,GAAqB,CAA3B;AACAr0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAAC07E,MAAd,EAAsBC,GAAtB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa,CAAb,EAAgB27E,GAAhB;AACAt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAa07E,MAAb,EAAqBC,GAArB;AACD,GANM,MAMA;AACLt0G,IAAAA,MAAM,CAAC24B,KAAP,CAAarR,EAAE,CAAC,CAAD,CAAf,EAAoBA,EAAE,CAAC,CAAD,CAAtB;AACD;AACF;;;;;;;;;AC3FD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS/zL,MAAT,EAAiB;AAC9B,MAAIg1P,EAAE,GAAG,eAAIh1P,MAAJ,CAAT;AAAA,MACIw5E,KAAK,GAAG,IAAIqhK,aADhB;AAAA,MAEIgtC,WAAW,GAAG7yB,EAAE,GAAG,CAFvB;AAAA,MAGI8yB,aAAa,GAAG,eAAI9yB,EAAJ,IAAU9zL,aAH9B,CAD8B,CAIS;;;AAEvC,WAAS8/K,WAAT,CAAqB9rP,IAArB,EAA2B6+L,EAA3B,EAA+ByxF,SAA/B,EAA0C/4G,MAA1C,EAAkD;AAChD,8BAAaA,MAAb,EAAqBzsK,MAArB,EAA6Bw5E,KAA7B,EAAoCgsM,SAApC,EAA+CtwR,IAA/C,EAAqD6+L,EAArD;AACD;;AAED,WAASg0F,OAAT,CAAiBjH,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,eAAID,MAAJ,IAAc,eAAIC,GAAJ,CAAd,GAAyB/rB,EAAhC;AACD,GAZ6B,CAc9B;AACA;AACA;AACA;;;AACA,WAAS4xB,QAAT,CAAkBn6G,MAAlB,EAA0B;AACxB,QAAI45G,MAAJ,EAAY;AACR11D,IAAAA,EADJ,EACQ;AACJ/tJ,IAAAA,EAFJ,EAEQ;AACJolN,IAAAA,GAHJ,EAGS;AACL94F,IAAAA,KAJJ,CADwB,CAKb;;AACX,WAAO;AACLq3C,MAAAA,SAAS,EAAE,YAAW;AACpByhD,QAAAA,GAAG,GAAGplN,EAAE,GAAG,KAAX;AACAssH,QAAAA,KAAK,GAAG,CAAR;AACD,OAJI;AAKLkW,MAAAA,KAAK,EAAE,UAAS07E,MAAT,EAAiBC,GAAjB,EAAsB;AAC3B,YAAIyF,MAAM,GAAG,CAAC1F,MAAD,EAASC,GAAT,CAAb;AAAA,YACIkH,MADJ;AAAA,YAEIlyR,CAAC,GAAGgyR,OAAO,CAACjH,MAAD,EAASC,GAAT,CAFf;AAAA,YAGIzwR,CAAC,GAAGu3R,WAAW,GACX9xR,CAAC,GAAG,CAAH,GAAOmyR,IAAI,CAACpH,MAAD,EAASC,GAAT,CADD,GAEXhrR,CAAC,GAAGmyR,IAAI,CAACpH,MAAM,IAAIA,MAAM,GAAG,CAAT,GAAajgD,QAAb,GAAkB,CAACA,QAAvB,CAAP,EAAmCkgD,GAAnC,CAAP,GAAiD,CAL1D;AAMA,YAAI,CAACsF,MAAD,KAAY2B,GAAG,GAAGplN,EAAE,GAAG7sE,CAAvB,CAAJ,EAA+B02K,MAAM,CAAC85D,SAAP;;AAC/B,YAAIxwO,CAAC,KAAK6sE,EAAV,EAAc;AACZqlN,UAAAA,MAAM,GAAG3kD,SAAS,CAAC+iD,MAAD,EAASG,MAAT,CAAlB;AACA,cAAI,CAACyB,MAAD,IAAW,yBAAW5B,MAAX,EAAmB4B,MAAnB,CAAX,IAAyC,yBAAWzB,MAAX,EAAmByB,MAAnB,CAA7C,EACEzB,MAAM,CAAC,CAAD,CAAN,GAAY,CAAZ;AACH;;AACD,YAAIzwR,CAAC,KAAK6sE,EAAV,EAAc;AACZssH,UAAAA,KAAK,GAAG,CAAR;;AACA,cAAIn5L,CAAJ,EAAO;AACL;AACA02K,YAAAA,MAAM,CAAC85D,SAAP;AACA0hD,YAAAA,MAAM,GAAG3kD,SAAS,CAACkjD,MAAD,EAASH,MAAT,CAAlB;AACA55G,YAAAA,MAAM,CAAC24B,KAAP,CAAa6iF,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B;AACD,WALD,MAKO;AACL;AACAA,YAAAA,MAAM,GAAG3kD,SAAS,CAAC+iD,MAAD,EAASG,MAAT,CAAlB;AACA/5G,YAAAA,MAAM,CAAC24B,KAAP,CAAa6iF,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAx7G,YAAAA,MAAM,CAACg6D,OAAP;AACD;;AACD4/C,UAAAA,MAAM,GAAG4B,MAAT;AACD,SAdD,MAcO,IAAIH,aAAa,IAAIzB,MAAjB,IAA2BwB,WAAW,GAAG9xR,CAA7C,EAAgD;AACrD,cAAIxO,CAAJ,CADqD,CAErD;AACA;;AACA,cAAI,EAAE+I,CAAC,GAAGqgO,EAAN,MAAcppO,CAAC,GAAG+7O,SAAS,CAACkjD,MAAD,EAASH,MAAT,EAAiB,IAAjB,CAA3B,CAAJ,EAAwD;AACtDn3F,YAAAA,KAAK,GAAG,CAAR;;AACA,gBAAI24F,WAAJ,EAAiB;AACfp7G,cAAAA,MAAM,CAAC85D,SAAP;AACA95D,cAAAA,MAAM,CAAC24B,KAAP,CAAa79M,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAb,EAAsBA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB;AACAklL,cAAAA,MAAM,CAAC24B,KAAP,CAAa79M,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAb,EAAsBA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB;AACAklL,cAAAA,MAAM,CAACg6D,OAAP;AACD,aALD,MAKO;AACLh6D,cAAAA,MAAM,CAAC24B,KAAP,CAAa79M,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAb,EAAsBA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB;AACAklL,cAAAA,MAAM,CAACg6D,OAAP;AACAh6D,cAAAA,MAAM,CAAC85D,SAAP;AACA95D,cAAAA,MAAM,CAAC24B,KAAP,CAAa79M,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAb,EAAsBA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB,EAA+B,CAA/B;AACD;AACF;AACF;;AACD,YAAIwO,CAAC,KAAK,CAACswR,MAAD,IAAW,CAAC,yBAAWA,MAAX,EAAmBG,MAAnB,CAAjB,CAAL,EAAmD;AACjD/5G,UAAAA,MAAM,CAAC24B,KAAP,CAAaohF,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B;AACD;;AACDH,QAAAA,MAAM,GAAGG,MAAT,EAAiB5jN,EAAE,GAAG7sE,CAAtB,EAAyB46N,EAAE,GAAGrgO,CAA9B;AACD,OAvDI;AAwDLm2O,MAAAA,OAAO,EAAE,YAAW;AAClB,YAAI7jK,EAAJ,EAAQ6pG,MAAM,CAACg6D,OAAP;AACR4/C,QAAAA,MAAM,GAAG,IAAT;AACD,OA3DI;AA4DL;AACA;AACAn3F,MAAAA,KAAK,EAAE,YAAW;AAChB,eAAOA,KAAK,GAAI,CAAC84F,GAAG,IAAIplN,EAAR,KAAe,CAA/B;AACD;AAhEI,KAAP;AAkED,GA1F6B,CA4F9B;;;AACA,WAAS0gK,SAAT,CAAmBv4O,CAAnB,EAAsB6G,CAAtB,EAAyBiyE,GAAzB,EAA8B;AAC5B,QAAI4jK,EAAE,GAAG,0BAAU18O,CAAV,CAAT;AAAA,QACIo9R,EAAE,GAAG,0BAAUv2R,CAAV,CADT,CAD4B,CAI5B;AACA;;AACA,QAAIrG,EAAE,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAT;AAAA,QAAoB;AAChBC,IAAAA,EAAE,GAAG,+BAAei8O,EAAf,EAAmB0gD,EAAnB,CADT;AAAA,QAEIC,IAAI,GAAG,6BAAa58R,EAAb,EAAiBA,EAAjB,CAFX;AAAA,QAGI68R,IAAI,GAAG78R,EAAE,CAAC,CAAD,CAHb;AAAA,QAGkB;AACd88R,IAAAA,WAAW,GAAGF,IAAI,GAAGC,IAAI,GAAGA,IAJhC,CAN4B,CAY5B;;AACA,QAAI,CAACC,WAAL,EAAkB,OAAO,CAACzkN,GAAD,IAAQ94E,CAAf;AAElB,QAAImyC,EAAE,GAAI83N,EAAE,GAAGozB,IAAL,GAAYE,WAAtB;AAAA,QACInrP,EAAE,GAAG,CAAC63N,EAAD,GAAMqzB,IAAN,GAAaC,WADtB;AAAA,QAEIC,KAAK,GAAG,+BAAeh9R,EAAf,EAAmBC,EAAnB,CAFZ;AAAA,QAGIwwP,CAAC,GAAG,+BAAezwP,EAAf,EAAmB2xC,EAAnB,CAHR;AAAA,QAII++M,CAAC,GAAG,+BAAezwP,EAAf,EAAmB2xC,EAAnB,CAJR;AAKA,wCAAoB6+M,CAApB,EAAuBC,CAAvB,EApB4B,CAsB5B;;AACA,QAAIp5K,CAAC,GAAG0lN,KAAR;AAAA,QACIp4O,CAAC,GAAG,6BAAa6rM,CAAb,EAAgBn5K,CAAhB,CADR;AAAA,QAEI2lN,EAAE,GAAG,6BAAa3lN,CAAb,EAAgBA,CAAhB,CAFT;AAAA,QAGI4H,EAAE,GAAGt6B,CAAC,GAAGA,CAAJ,GAAQq4O,EAAE,IAAI,6BAAaxsC,CAAb,EAAgBA,CAAhB,IAAqB,CAAzB,CAHnB;AAKA,QAAIvxK,EAAE,GAAG,CAAT,EAAY;AAEZ,QAAIljF,CAAC,GAAG,gBAAKkjF,EAAL,CAAR;AAAA,QACI8Q,CAAC,GAAG,+BAAe1Y,CAAf,EAAkB,CAAC,CAAC1yB,CAAD,GAAK5oD,CAAN,IAAWihS,EAA7B,CADR;AAEA,wCAAoBjtM,CAApB,EAAuBygK,CAAvB;AACAzgK,IAAAA,CAAC,GAAG,0BAAUA,CAAV,CAAJ;AAEA,QAAI,CAAC1X,GAAL,EAAU,OAAO0X,CAAP,CAnCkB,CAqC5B;;AACA,QAAI8kM,OAAO,GAAGt1R,CAAC,CAAC,CAAD,CAAf;AAAA,QACI+2R,OAAO,GAAGlwR,CAAC,CAAC,CAAD,CADf;AAAA,QAEIiwR,IAAI,GAAG92R,CAAC,CAAC,CAAD,CAFZ;AAAA,QAGIg3R,IAAI,GAAGnwR,CAAC,CAAC,CAAD,CAHZ;AAAA,QAII0nE,CAJJ;AAMA,QAAIwoN,OAAO,GAAGzB,OAAd,EAAuB/mN,CAAC,GAAG+mN,OAAJ,EAAaA,OAAO,GAAGyB,OAAvB,EAAgCA,OAAO,GAAGxoN,CAA1C;;AAEvB,QAAIkgB,KAAK,GAAGsoM,OAAO,GAAGzB,OAAtB;AAAA,QACIoI,KAAK,GAAG,eAAIjvM,KAAK,GAAGqnJ,QAAZ,IAAkB3/J,aAD9B;AAAA,QAEIwnN,QAAQ,GAAGD,KAAK,IAAIjvM,KAAK,GAAGtY,aAFhC;;AAIA,QAAI,CAACunN,KAAD,IAAU1G,IAAI,GAAGF,IAArB,EAA2BvoN,CAAC,GAAGuoN,IAAJ,EAAUA,IAAI,GAAGE,IAAjB,EAAuBA,IAAI,GAAGzoN,CAA9B,CAlDC,CAoD5B;;AACA,QAAIovN,QAAQ,GACND,KAAK,GACH5G,IAAI,GAAGE,IAAP,GAAc,CAAd,GAAkBxmM,CAAC,CAAC,CAAD,CAAD,IAAQ,eAAIA,CAAC,CAAC,CAAD,CAAD,GAAO8kM,OAAX,IAAsBn/M,aAAtB,GAAgC2gN,IAAhC,GAAuCE,IAA/C,CADf,GAEHF,IAAI,IAAItmM,CAAC,CAAC,CAAD,CAAT,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQwmM,IAHpB,GAINvoM,KAAK,GAAGqnJ,QAAR,IAAcw/C,OAAO,IAAI9kM,CAAC,CAAC,CAAD,CAAZ,IAAmBA,CAAC,CAAC,CAAD,CAAD,IAAQumM,OAAzC,CAJN,EAIyD;AACvD,UAAI1tD,EAAE,GAAG,+BAAevxJ,CAAf,EAAkB,CAAC,CAAC1yB,CAAD,GAAK5oD,CAAN,IAAWihS,EAA7B,CAAT;AACA,0CAAoBp0D,EAApB,EAAwB4nB,CAAxB;AACA,aAAO,CAACzgK,CAAD,EAAI,0BAAU64I,EAAV,CAAJ,CAAP;AACD;AACF,GA3J6B,CA6J9B;AACA;;;AACA,WAAS8zD,IAAT,CAAcpH,MAAd,EAAsBC,GAAtB,EAA2B;AACzB,QAAIlvR,CAAC,GAAGg2R,WAAW,GAAG7nR,MAAH,GAAY6gO,WAAK7gO,MAApC;AAAA,QACIkoR,IAAI,GAAG,CADX;AAEA,QAAIpH,MAAM,GAAG,CAACjvR,CAAd,EAAiBq2R,IAAI,IAAI,CAAR,CAAjB,CAA4B;AAA5B,SACK,IAAIpH,MAAM,GAAGjvR,CAAb,EAAgBq2R,IAAI,IAAI,CAAR,CAJI,CAIO;;AAChC,QAAInH,GAAG,GAAG,CAAClvR,CAAX,EAAcq2R,IAAI,IAAI,CAAR,CAAd,CAAyB;AAAzB,SACK,IAAInH,GAAG,GAAGlvR,CAAV,EAAaq2R,IAAI,IAAI,CAAR,CANO,CAMI;;AAC7B,WAAOA,IAAP;AACD;;AAED,SAAO,oBAAKH,OAAL,EAAcnB,QAAd,EAAwB5lC,WAAxB,EAAqC6mC,WAAW,GAAG,CAAC,CAAD,EAAI,CAAC7nR,MAAL,CAAH,GAAkB,CAAC,CAAC6gO,QAAF,EAAM7gO,MAAM,GAAG6gO,QAAf,CAAlE,CAAP;AACD;;;;;;;;;AChLc,kBAAS91O,CAAT,EAAY6G,CAAZ,EAAesyM,EAAf,EAAmBC,EAAnB,EAAuB7tG,EAAvB,EAA2BD,EAA3B,EAA+B;AAC5C,MAAI7oG,EAAE,GAAGzC,CAAC,CAAC,CAAD,CAAV;AAAA,MACI86O,EAAE,GAAG96O,CAAC,CAAC,CAAD,CADV;AAAA,MAEI+6O,EAAE,GAAGl0O,CAAC,CAAC,CAAD,CAFV;AAAA,MAGIm0O,EAAE,GAAGn0O,CAAC,CAAC,CAAD,CAHV;AAAA,MAIIk9M,EAAE,GAAG,CAJT;AAAA,MAKItkI,EAAE,GAAG,CALT;AAAA,MAMI76D,EAAE,GAAGm2N,EAAE,GAAGt4O,EANd;AAAA,MAOImb,EAAE,GAAGo9N,EAAE,GAAGF,EAPd;AAAA,MAQIh0O,CARJ;AAUAA,EAAAA,CAAC,GAAGqyM,EAAE,GAAG12M,EAAT;AACA,MAAI,CAACmiB,EAAD,IAAO9d,CAAC,GAAG,CAAf,EAAkB;AAClBA,EAAAA,CAAC,IAAI8d,EAAL;;AACA,MAAIA,EAAE,GAAG,CAAT,EAAY;AACV,QAAI9d,CAAC,GAAGi9M,EAAR,EAAY;AACZ,QAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AACb,GAHD,MAGO,IAAI8d,EAAE,GAAG,CAAT,EAAY;AACjB,QAAI9d,CAAC,GAAG24E,EAAR,EAAY;AACZ,QAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AACb;;AAEDA,EAAAA,CAAC,GAAGykG,EAAE,GAAG9oG,EAAT;AACA,MAAI,CAACmiB,EAAD,IAAO9d,CAAC,GAAG,CAAf,EAAkB;AAClBA,EAAAA,CAAC,IAAI8d,EAAL;;AACA,MAAIA,EAAE,GAAG,CAAT,EAAY;AACV,QAAI9d,CAAC,GAAG24E,EAAR,EAAY;AACZ,QAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AACb,GAHD,MAGO,IAAI8d,EAAE,GAAG,CAAT,EAAY;AACjB,QAAI9d,CAAC,GAAGi9M,EAAR,EAAY;AACZ,QAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AACb;;AAEDA,EAAAA,CAAC,GAAGsyM,EAAE,GAAG0hC,EAAT;AACA,MAAI,CAACl9N,EAAD,IAAO9W,CAAC,GAAG,CAAf,EAAkB;AAClBA,EAAAA,CAAC,IAAI8W,EAAL;;AACA,MAAIA,EAAE,GAAG,CAAT,EAAY;AACV,QAAI9W,CAAC,GAAGi9M,EAAR,EAAY;AACZ,QAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AACb,GAHD,MAGO,IAAI8W,EAAE,GAAG,CAAT,EAAY;AACjB,QAAI9W,CAAC,GAAG24E,EAAR,EAAY;AACZ,QAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AACb;;AAEDA,EAAAA,CAAC,GAAGwkG,EAAE,GAAGwvI,EAAT;AACA,MAAI,CAACl9N,EAAD,IAAO9W,CAAC,GAAG,CAAf,EAAkB;AAClBA,EAAAA,CAAC,IAAI8W,EAAL;;AACA,MAAIA,EAAE,GAAG,CAAT,EAAY;AACV,QAAI9W,CAAC,GAAG24E,EAAR,EAAY;AACZ,QAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AACb,GAHD,MAGO,IAAI8W,EAAE,GAAG,CAAT,EAAY;AACjB,QAAI9W,CAAC,GAAGi9M,EAAR,EAAY;AACZ,QAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AACb;;AAED,MAAIi9M,EAAE,GAAG,CAAT,EAAY/jN,CAAC,CAAC,CAAD,CAAD,GAAOyC,EAAE,GAAGshN,EAAE,GAAGn/L,EAAjB,EAAqB5kB,CAAC,CAAC,CAAD,CAAD,GAAO86O,EAAE,GAAG/2B,EAAE,GAAGnmM,EAAtC;AACZ,MAAI6hE,EAAE,GAAG,CAAT,EAAY54E,CAAC,CAAC,CAAD,CAAD,GAAOpE,EAAE,GAAGg9E,EAAE,GAAG76D,EAAjB,EAAqB/d,CAAC,CAAC,CAAD,CAAD,GAAOi0O,EAAE,GAAGr7J,EAAE,GAAG7hE,EAAtC;AACZ,SAAO,IAAP;AACD;;;;;;;;;AC1DD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIggR,OAAO,GAAG,GAAd;AAAA,IAAmBC,OAAO,GAAG,CAACD,OAA9B,EAEA;AACA;;AAEe,SAASE,aAAT,CAAuB3kF,EAAvB,EAA2BC,EAA3B,EAA+B7tG,EAA/B,EAAmCD,EAAnC,EAAuC;AAEpD,WAAS0xL,OAAT,CAAiB/9R,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,WAAO27L,EAAE,IAAIl6M,CAAN,IAAWA,CAAC,IAAIssG,EAAhB,IAAsB6tG,EAAE,IAAI57L,CAA5B,IAAiCA,CAAC,IAAI8tF,EAA7C;AACD;;AAED,WAAS2qJ,WAAT,CAAqB9rP,IAArB,EAA2B6+L,EAA3B,EAA+ByxF,SAA/B,EAA0C/4G,MAA1C,EAAkD;AAChD,QAAI1hL,CAAC,GAAG,CAAR;AAAA,QAAWgoO,EAAE,GAAG,CAAhB;;AACA,QAAI79N,IAAI,IAAI,IAAR,IACG,CAACnK,CAAC,GAAG+9R,MAAM,CAAC5zR,IAAD,EAAOswR,SAAP,CAAX,OAAmCzyD,EAAE,GAAG+1D,MAAM,CAAC/0F,EAAD,EAAKyxF,SAAL,CAA9C,CADH,IAEGuD,YAAY,CAAC7zR,IAAD,EAAO6+L,EAAP,CAAZ,GAAyB,CAAzB,GAA6ByxF,SAAS,GAAG,CAFhD,EAEmD;AACjD,SAAG/4G,MAAM,CAAC24B,KAAP,CAAar6M,CAAC,KAAK,CAAN,IAAWA,CAAC,KAAK,CAAjB,GAAqBm5M,EAArB,GAA0B5tG,EAAvC,EAA2CvrG,CAAC,GAAG,CAAJ,GAAQsrG,EAAR,GAAa8tG,EAAxD,EAAH,QACO,CAACp5M,CAAC,GAAG,CAACA,CAAC,GAAGy6R,SAAJ,GAAgB,CAAjB,IAAsB,CAA3B,MAAkCzyD,EADzC;AAED,KALD,MAKO;AACLtmD,MAAAA,MAAM,CAAC24B,KAAP,CAAarR,EAAE,CAAC,CAAD,CAAf,EAAoBA,EAAE,CAAC,CAAD,CAAtB;AACD;AACF;;AAED,WAAS+0F,MAAT,CAAgB3gQ,CAAhB,EAAmBq9P,SAAnB,EAA8B;AAC5B,WAAO,eAAIr9P,CAAC,CAAC,CAAD,CAAD,GAAO+7K,EAAX,IAAiBhjI,aAAjB,GAA2BskN,SAAS,GAAG,CAAZ,GAAgB,CAAhB,GAAoB,CAA/C,GACD,eAAIr9P,CAAC,CAAC,CAAD,CAAD,GAAOmuE,EAAX,IAAiBp1B,aAAjB,GAA2BskN,SAAS,GAAG,CAAZ,GAAgB,CAAhB,GAAoB,CAA/C,GACA,eAAIr9P,CAAC,CAAC,CAAD,CAAD,GAAOg8K,EAAX,IAAiBjjI,aAAjB,GAA2BskN,SAAS,GAAG,CAAZ,GAAgB,CAAhB,GAAoB,CAA/C,GACAA,SAAS,GAAG,CAAZ,GAAgB,CAAhB,GAAoB,CAH1B,CAD4B,CAIC;AAC9B;;AAED,WAASM,mBAAT,CAA6B/6R,CAA7B,EAAgC6G,CAAhC,EAAmC;AACjC,WAAOm3R,YAAY,CAACh+R,CAAC,CAACf,CAAH,EAAM4H,CAAC,CAAC5H,CAAR,CAAnB;AACD;;AAED,WAAS++R,YAAT,CAAsBh+R,CAAtB,EAAyB6G,CAAzB,EAA4B;AAC1B,QAAIo3R,EAAE,GAAGF,MAAM,CAAC/9R,CAAD,EAAI,CAAJ,CAAf;AAAA,QACI0/N,EAAE,GAAGq+D,MAAM,CAACl3R,CAAD,EAAI,CAAJ,CADf;AAEA,WAAOo3R,EAAE,KAAKv+D,EAAP,GAAYu+D,EAAE,GAAGv+D,EAAjB,GACDu+D,EAAE,KAAK,CAAP,GAAWp3R,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAAnB,GACAi+R,EAAE,KAAK,CAAP,GAAWj+R,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAnB,GACAo3R,EAAE,KAAK,CAAP,GAAWj+R,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAnB,GACAA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAJd;AAKD;;AAED,SAAO,UAAS0hL,MAAT,EAAiB;AACtB,QAAIw8G,YAAY,GAAGx8G,MAAnB;AAAA,QACIy8G,YAAY,GAAG,sBADnB;AAAA,QAEIp4B,QAFJ;AAAA,QAGIxrD,OAHJ;AAAA,QAIID,IAJJ;AAAA,QAKI8jF,GALJ;AAAA,QAKSC,GALT;AAAA,QAKcC,GALd;AAAA,QAKmB;AACfC,IAAAA,EANJ;AAAA,QAMQC,EANR;AAAA,QAMYC,EANZ;AAAA,QAMgB;AACZ79E,IAAAA,KAPJ;AAAA,QAQIzc,KARJ;AAUA,QAAIu6F,UAAU,GAAG;AACfrkF,MAAAA,KAAK,EAAEA,KADQ;AAEfmhC,MAAAA,SAAS,EAAEA,SAFI;AAGfE,MAAAA,OAAO,EAAEA,OAHM;AAIfs5C,MAAAA,YAAY,EAAEA,YAJC;AAKfC,MAAAA,UAAU,EAAEA;AALG,KAAjB;;AAQA,aAAS56E,KAAT,CAAep7M,CAAf,EAAkBue,CAAlB,EAAqB;AACnB,UAAIw/Q,OAAO,CAAC/9R,CAAD,EAAIue,CAAJ,CAAX,EAAmB0gR,YAAY,CAAC7jF,KAAb,CAAmBp7M,CAAnB,EAAsBue,CAAtB;AACpB;;AAED,aAASmhR,aAAT,GAAyB;AACvB,UAAItD,OAAO,GAAG,CAAd;;AAEA,WAAK,IAAIviS,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGuzM,OAAO,CAACniN,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C,aAAK,IAAIwhN,IAAI,GAAGC,OAAO,CAACzhN,CAAD,CAAlB,EAAuBiK,CAAC,GAAG,CAA3B,EAA8BwtF,CAAC,GAAG+pH,IAAI,CAACliN,MAAvC,EAA+CiiN,KAAK,GAAGC,IAAI,CAAC,CAAD,CAA3D,EAAgEytB,EAAhE,EAAoEC,EAApE,EAAwE2E,EAAE,GAAGtyB,KAAK,CAAC,CAAD,CAAlF,EAAuFuyB,EAAE,GAAGvyB,KAAK,CAAC,CAAD,CAAtG,EAA2Gt3M,CAAC,GAAGwtF,CAA/G,EAAkH,EAAExtF,CAApH,EAAuH;AACrHglO,UAAAA,EAAE,GAAG4E,EAAL,EAAS3E,EAAE,GAAG4E,EAAd,EAAkBvyB,KAAK,GAAGC,IAAI,CAACv3M,CAAD,CAA9B,EAAmC4pO,EAAE,GAAGtyB,KAAK,CAAC,CAAD,CAA7C,EAAkDuyB,EAAE,GAAGvyB,KAAK,CAAC,CAAD,CAA5D;;AACA,cAAI2tB,EAAE,IAAI18H,EAAV,EAAc;AAAE,gBAAIshI,EAAE,GAAGthI,EAAL,IAAW,CAACqhI,EAAE,GAAG5E,EAAN,KAAaz8H,EAAE,GAAG08H,EAAlB,IAAwB,CAAC4E,EAAE,GAAG5E,EAAN,KAAa7uB,EAAE,GAAG4uB,EAAlB,CAAvC,EAA8D,EAAEszD,OAAF;AAAY,WAA1F,MACK;AAAE,gBAAIzuD,EAAE,IAAIthI,EAAN,IAAY,CAACqhI,EAAE,GAAG5E,EAAN,KAAaz8H,EAAE,GAAG08H,EAAlB,IAAwB,CAAC4E,EAAE,GAAG5E,EAAN,KAAa7uB,EAAE,GAAG4uB,EAAlB,CAAxC,EAA+D,EAAEszD,OAAF;AAAY;AACnF;AACF;;AAED,aAAOA,OAAP;AACD,KAnCqB,CAqCtB;;;AACA,aAASrG,YAAT,GAAwB;AACtBkJ,MAAAA,YAAY,GAAGC,YAAf,EAA6Bp4B,QAAQ,GAAG,EAAxC,EAA4CxrD,OAAO,GAAG,EAAtD,EAA0DpW,KAAK,GAAG,IAAlE;AACD;;AAED,aAAS8wF,UAAT,GAAsB;AACpB,UAAI+F,WAAW,GAAG2D,aAAa,EAA/B;AAAA,UACIC,WAAW,GAAGz6F,KAAK,IAAI62F,WAD3B;AAAA,UAEIgC,OAAO,GAAG,CAACj3B,QAAQ,GAAG,oBAAMA,QAAN,CAAZ,EAA6B3tQ,MAF3C;;AAGA,UAAIwmS,WAAW,IAAI5B,OAAnB,EAA4B;AAC1Bt7G,QAAAA,MAAM,CAACszG,YAAP;;AACA,YAAI4J,WAAJ,EAAiB;AACfl9G,UAAAA,MAAM,CAAC85D,SAAP;AACAya,UAAAA,WAAW,CAAC,IAAD,EAAO,IAAP,EAAa,CAAb,EAAgBv0E,MAAhB,CAAX;AACAA,UAAAA,MAAM,CAACg6D,OAAP;AACD;;AACD,YAAIshD,OAAJ,EAAa;AACX,+BAAWj3B,QAAX,EAAqBg1B,mBAArB,EAA0CC,WAA1C,EAAuD/kC,WAAvD,EAAoEv0E,MAApE;AACD;;AACDA,QAAAA,MAAM,CAACuzG,UAAP;AACD;;AACDiJ,MAAAA,YAAY,GAAGx8G,MAAf,EAAuBqkF,QAAQ,GAAGxrD,OAAO,GAAGD,IAAI,GAAG,IAAnD;AACD;;AAED,aAASkhC,SAAT,GAAqB;AACnBkjD,MAAAA,UAAU,CAACrkF,KAAX,GAAmBq9E,SAAnB;AACA,UAAIn9E,OAAJ,EAAaA,OAAO,CAACxhN,IAAR,CAAauhN,IAAI,GAAG,EAApB;AACbsG,MAAAA,KAAK,GAAG,IAAR;AACA69E,MAAAA,EAAE,GAAG,KAAL;AACAF,MAAAA,EAAE,GAAGC,EAAE,GAAGnzN,GAAV;AACD,KAnEqB,CAqEtB;AACA;AACA;;;AACA,aAASqwK,OAAT,GAAmB;AACjB,UAAIqqB,QAAJ,EAAc;AACZ2xB,QAAAA,SAAS,CAAC0G,GAAD,EAAMC,GAAN,CAAT;AACA,YAAIC,GAAG,IAAIG,EAAX,EAAeN,YAAY,CAACtD,MAAb;AACf90B,QAAAA,QAAQ,CAAChtQ,IAAT,CAAcolS,YAAY,CAACngS,MAAb,EAAd;AACD;;AACD0gS,MAAAA,UAAU,CAACrkF,KAAX,GAAmBA,KAAnB;AACA,UAAIokF,EAAJ,EAAQP,YAAY,CAACxiD,OAAb;AACT;;AAED,aAASg8C,SAAT,CAAmBz4R,CAAnB,EAAsBue,CAAtB,EAAyB;AACvB,UAAIxS,CAAC,GAAGgyR,OAAO,CAAC/9R,CAAD,EAAIue,CAAJ,CAAf;AACA,UAAI+8L,OAAJ,EAAaD,IAAI,CAACvhN,IAAL,CAAU,CAACkG,CAAD,EAAIue,CAAJ,CAAV;;AACb,UAAIojM,KAAJ,EAAW;AACTw9E,QAAAA,GAAG,GAAGn/R,CAAN,EAASo/R,GAAG,GAAG7gR,CAAf,EAAkB8gR,GAAG,GAAGtzR,CAAxB;AACA41M,QAAAA,KAAK,GAAG,KAAR;;AACA,YAAI51M,CAAJ,EAAO;AACLkzR,UAAAA,YAAY,CAAC1iD,SAAb;AACA0iD,UAAAA,YAAY,CAAC7jF,KAAb,CAAmBp7M,CAAnB,EAAsBue,CAAtB;AACD;AACF,OAPD,MAOO;AACL,YAAIxS,CAAC,IAAIyzR,EAAT,EAAaP,YAAY,CAAC7jF,KAAb,CAAmBp7M,CAAnB,EAAsBue,CAAtB,EAAb,KACK;AACH,cAAIxd,CAAC,GAAG,CAACu+R,EAAE,GAAG1/R,IAAI,CAACK,GAAL,CAAS2+R,OAAT,EAAkBh/R,IAAI,CAACG,GAAL,CAAS4+R,OAAT,EAAkBW,EAAlB,CAAlB,CAAN,EAAgDC,EAAE,GAAG3/R,IAAI,CAACK,GAAL,CAAS2+R,OAAT,EAAkBh/R,IAAI,CAACG,GAAL,CAAS4+R,OAAT,EAAkBY,EAAlB,CAAlB,CAArD,CAAR;AAAA,cACI33R,CAAC,GAAG,CAAC5H,CAAC,GAAGJ,IAAI,CAACK,GAAL,CAAS2+R,OAAT,EAAkBh/R,IAAI,CAACG,GAAL,CAAS4+R,OAAT,EAAkB3+R,CAAlB,CAAlB,CAAL,EAA8Cue,CAAC,GAAG3e,IAAI,CAACK,GAAL,CAAS2+R,OAAT,EAAkBh/R,IAAI,CAACG,GAAL,CAAS4+R,OAAT,EAAkBpgR,CAAlB,CAAlB,CAAlD,CADR;;AAEA,cAAI,mBAASxd,CAAT,EAAY6G,CAAZ,EAAesyM,EAAf,EAAmBC,EAAnB,EAAuB7tG,EAAvB,EAA2BD,EAA3B,CAAJ,EAAoC;AAClC,gBAAI,CAACmzL,EAAL,EAAS;AACPP,cAAAA,YAAY,CAAC1iD,SAAb;AACA0iD,cAAAA,YAAY,CAAC7jF,KAAb,CAAmBr6M,CAAC,CAAC,CAAD,CAApB,EAAyBA,CAAC,CAAC,CAAD,CAA1B;AACD;;AACDk+R,YAAAA,YAAY,CAAC7jF,KAAb,CAAmBxzM,CAAC,CAAC,CAAD,CAApB,EAAyBA,CAAC,CAAC,CAAD,CAA1B;AACA,gBAAI,CAACmE,CAAL,EAAQkzR,YAAY,CAACxiD,OAAb;AACRv3C,YAAAA,KAAK,GAAG,KAAR;AACD,WARD,MAQO,IAAIn5L,CAAJ,EAAO;AACZkzR,YAAAA,YAAY,CAAC1iD,SAAb;AACA0iD,YAAAA,YAAY,CAAC7jF,KAAb,CAAmBp7M,CAAnB,EAAsBue,CAAtB;AACA2mL,YAAAA,KAAK,GAAG,KAAR;AACD;AACF;AACF;;AACDo6F,MAAAA,EAAE,GAAGt/R,CAAL,EAAQu/R,EAAE,GAAGhhR,CAAb,EAAgBihR,EAAE,GAAGzzR,CAArB;AACD;;AAED,WAAO0zR,UAAP;AACD,GApHD;AAqHD;;;;;;;;;ACvKD;;;;AAEe,oBAAW;AACxB,MAAIvlF,EAAE,GAAG,CAAT;AAAA,MACIC,EAAE,GAAG,CADT;AAAA,MAEI7tG,EAAE,GAAG,GAFT;AAAA,MAGID,EAAE,GAAG,GAHT;AAAA,MAIIokF,KAJJ;AAAA,MAKImvG,WALJ;AAAA,MAMI79P,IANJ;AAQA,SAAOA,IAAI,GAAG;AACZ0gJ,IAAAA,MAAM,EAAE,UAASA,MAAT,EAAiB;AACvB,aAAOgO,KAAK,IAAImvG,WAAW,KAAKn9G,MAAzB,GAAkCgO,KAAlC,GAA0CA,KAAK,GAAG,wBAAcypB,EAAd,EAAkBC,EAAlB,EAAsB7tG,EAAtB,EAA0BD,EAA1B,EAA8BuzL,WAAW,GAAGn9G,MAA5C,CAAzD;AACD,KAHW;AAIZywB,IAAAA,MAAM,EAAE,UAAS1yL,CAAT,EAAY;AAClB,aAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,CAAC15L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAe25L,EAAE,GAAG,CAAC35L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB,EAA8B8rF,EAAE,GAAG,CAAC9rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApC,EAA6C6rF,EAAE,GAAG,CAAC7rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAnD,EAA4DiwK,KAAK,GAAGmvG,WAAW,GAAG,IAAlF,EAAwF79P,IAA5G,IAAoH,CAAC,CAACm4K,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAA3H;AACD;AANW,GAAd;AAQD;;;;;;;;;ACnBD;;AACA;;AACA;;AACA;;;;AAEA,IAAIwzL,SAAJ,EACIxJ,OADJ,EAEIE,OAFJ,EAGID,OAHJ;AAKA,IAAIwJ,YAAY,GAAG;AACjBtK,EAAAA,MAAM,EAAE/6R,aADS;AAEjB2gN,EAAAA,KAAK,EAAE3gN,aAFU;AAGjB8hP,EAAAA,SAAS,EAAEwjD,eAHM;AAIjBtjD,EAAAA,OAAO,EAAEhiP,aAJQ;AAKjBs7R,EAAAA,YAAY,EAAEt7R,aALG;AAMjBu7R,EAAAA,UAAU,EAAEv7R;AANK,CAAnB;;AASA,SAASslS,eAAT,GAA2B;AACzBD,EAAAA,YAAY,CAAC1kF,KAAb,GAAqB4kF,gBAArB;AACAF,EAAAA,YAAY,CAACrjD,OAAb,GAAuBwjD,aAAvB;AACD;;AAED,SAASA,aAAT,GAAyB;AACvBH,EAAAA,YAAY,CAAC1kF,KAAb,GAAqB0kF,YAAY,CAACrjD,OAAb,GAAuBhiP,aAA5C;AACD;;AAED,SAASulS,gBAAT,CAA0BlJ,MAA1B,EAAkCC,GAAlC,EAAuC;AACrCD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACAwlC,EAAAA,OAAO,GAAGS,MAAV,EAAkBP,OAAO,GAAG,eAAIQ,GAAJ,CAA5B,EAAsCT,OAAO,GAAG,eAAIS,GAAJ,CAAhD;AACA+I,EAAAA,YAAY,CAAC1kF,KAAb,GAAqB8kF,WAArB;AACD;;AAED,SAASA,WAAT,CAAqBpJ,MAArB,EAA6BC,GAA7B,EAAkC;AAChCD,EAAAA,MAAM,IAAIjmC,aAAV,EAAmBkmC,GAAG,IAAIlmC,aAA1B;AACA,MAAIumC,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,MACII,MAAM,GAAG,eAAIJ,GAAJ,CADb;AAAA,MAEIvnM,KAAK,GAAG,eAAIsnM,MAAM,GAAGT,OAAb,CAFZ;AAAA,MAGI8J,QAAQ,GAAG,eAAI3wM,KAAJ,CAHf;AAAA,MAII4wM,QAAQ,GAAG,eAAI5wM,KAAJ,CAJf;AAAA,MAKIxvF,CAAC,GAAGm3R,MAAM,GAAGiJ,QALjB;AAAA,MAMI7hR,CAAC,GAAG+3Q,OAAO,GAAGc,MAAV,GAAmBb,OAAO,GAAGY,MAAV,GAAmBgJ,QAN9C;AAAA,MAOI7wN,CAAC,GAAGinN,OAAO,GAAGa,MAAV,GAAmBd,OAAO,GAAGa,MAAV,GAAmBgJ,QAP9C;AAQAN,EAAAA,SAAS,CAACrlR,GAAV,CAAc,iBAAM,gBAAKxa,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAN,EAA2B+wD,CAA3B,CAAd;AACA+mN,EAAAA,OAAO,GAAGS,MAAV,EAAkBP,OAAO,GAAGa,MAA5B,EAAoCd,OAAO,GAAGa,MAA9C;AACD;;AAEc,kBAASj2F,MAAT,EAAiB;AAC9B2+F,EAAAA,SAAS,GAAG,IAAI7gF,cAAJ,EAAZ;AACA,uBAAO9d,MAAP,EAAe4+F,YAAf;AACA,SAAO,CAACD,SAAR;AACD;;;;;;;;;ACpDD;;;;AAEA,IAAInlF,WAAW,GAAG,CAAC,IAAD,EAAO,IAAP,CAAlB;AAAA,IACIxZ,MAAM,GAAG;AAACpnL,EAAAA,IAAI,EAAE,YAAP;AAAqB4gM,EAAAA,WAAW,EAAEA;AAAlC,CADb;;AAGe,kBAAS35M,CAAT,EAAY6G,CAAZ,EAAe;AAC5B8yM,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiB35M,CAAjB;AACA25M,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiB9yM,CAAjB;AACA,SAAO,qBAAOs5L,MAAP,CAAP;AACD;;;;;;;;;ACTD;;AACA;;AACA;;;;AAEA,IAAIm/F,kBAAkB,GAAG;AACvBhL,EAAAA,OAAO,EAAE,UAASn0F,MAAT,EAAiBka,KAAjB,EAAwB;AAC/B,WAAOklF,gBAAgB,CAACp/F,MAAM,CAAC+Z,QAAR,EAAkBG,KAAlB,CAAvB;AACD,GAHsB;AAIvBk6E,EAAAA,iBAAiB,EAAE,UAASp0F,MAAT,EAAiBka,KAAjB,EAAwB;AACzC,QAAI1xB,QAAQ,GAAGwX,MAAM,CAACxX,QAAtB;AAAA,QAAgC7vL,CAAC,GAAG,CAAC,CAArC;AAAA,QAAwCkO,CAAC,GAAG2hL,QAAQ,CAACvwL,MAArD;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAIu4R,gBAAgB,CAAC52G,QAAQ,CAAC7vL,CAAD,CAAR,CAAYohN,QAAb,EAAuBG,KAAvB,CAApB,EAAmD,OAAO,IAAP;;AACnE,WAAO,KAAP;AACD;AARsB,CAAzB;AAWA,IAAImlF,oBAAoB,GAAG;AACzBhL,EAAAA,MAAM,EAAE,YAAW;AACjB,WAAO,IAAP;AACD,GAHwB;AAIzBn6B,EAAAA,KAAK,EAAE,UAASl6D,MAAT,EAAiBka,KAAjB,EAAwB;AAC7B,WAAOolF,aAAa,CAACt/F,MAAM,CAACwZ,WAAR,EAAqBU,KAArB,CAApB;AACD,GANwB;AAOzBq6E,EAAAA,UAAU,EAAE,UAASv0F,MAAT,EAAiBka,KAAjB,EAAwB;AAClC,QAAIV,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAIy4R,aAAa,CAAC9lF,WAAW,CAAC7gN,CAAD,CAAZ,EAAiBuhN,KAAjB,CAAjB,EAA0C,OAAO,IAAP;;AAC1D,WAAO,KAAP;AACD,GAXwB;AAYzBkC,EAAAA,UAAU,EAAE,UAASpc,MAAT,EAAiBka,KAAjB,EAAwB;AAClC,WAAOqlF,YAAY,CAACv/F,MAAM,CAACwZ,WAAR,EAAqBU,KAArB,CAAnB;AACD,GAdwB;AAezBmC,EAAAA,eAAe,EAAE,UAASrc,MAAT,EAAiBka,KAAjB,EAAwB;AACvC,QAAIV,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAI04R,YAAY,CAAC/lF,WAAW,CAAC7gN,CAAD,CAAZ,EAAiBuhN,KAAjB,CAAhB,EAAyC,OAAO,IAAP;;AACzD,WAAO,KAAP;AACD,GAnBwB;AAoBzBoC,EAAAA,OAAO,EAAE,UAAStc,MAAT,EAAiBka,KAAjB,EAAwB;AAC/B,WAAOslF,eAAe,CAACx/F,MAAM,CAACwZ,WAAR,EAAqBU,KAArB,CAAtB;AACD,GAtBwB;AAuBzBqC,EAAAA,YAAY,EAAE,UAASvc,MAAT,EAAiBka,KAAjB,EAAwB;AACpC,QAAIV,WAAW,GAAGxZ,MAAM,CAACwZ,WAAzB;AAAA,QAAsC7gN,CAAC,GAAG,CAAC,CAA3C;AAAA,QAA8CkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAA9D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAI24R,eAAe,CAAChmF,WAAW,CAAC7gN,CAAD,CAAZ,EAAiBuhN,KAAjB,CAAnB,EAA4C,OAAO,IAAP;;AAC5D,WAAO,KAAP;AACD,GA3BwB;AA4BzBw6E,EAAAA,kBAAkB,EAAE,UAAS10F,MAAT,EAAiBka,KAAjB,EAAwB;AAC1C,QAAIX,UAAU,GAAGvZ,MAAM,CAACuZ,UAAxB;AAAA,QAAoC5gN,CAAC,GAAG,CAAC,CAAzC;AAAA,QAA4CkO,CAAC,GAAG0yM,UAAU,CAACthN,MAA3D;;AACA,WAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAIu4R,gBAAgB,CAAC7lF,UAAU,CAAC5gN,CAAD,CAAX,EAAgBuhN,KAAhB,CAApB,EAA4C,OAAO,IAAP;;AAC5D,WAAO,KAAP;AACD;AAhCwB,CAA3B;;AAmCA,SAASklF,gBAAT,CAA0BrlF,QAA1B,EAAoCG,KAApC,EAA2C;AACzC,SAAOH,QAAQ,IAAIslF,oBAAoB,CAAC/vK,cAArB,CAAoCyqF,QAAQ,CAACnhM,IAA7C,CAAZ,GACDymR,oBAAoB,CAACtlF,QAAQ,CAACnhM,IAAV,CAApB,CAAoCmhM,QAApC,EAA8CG,KAA9C,CADC,GAED,KAFN;AAGD;;AAED,SAASolF,aAAT,CAAuB9lF,WAAvB,EAAoCU,KAApC,EAA2C;AACzC,SAAO,uBAASV,WAAT,EAAsBU,KAAtB,MAAiC,CAAxC;AACD;;AAED,SAASqlF,YAAT,CAAsB/lF,WAAtB,EAAmCU,KAAnC,EAA0C;AACxC,MAAIulF,EAAJ,EAAQC,EAAR,EAAYC,EAAZ;;AACA,OAAK,IAAIhnS,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG2yM,WAAW,CAACvhN,MAAhC,EAAwCU,CAAC,GAAGkO,CAA5C,EAA+ClO,CAAC,EAAhD,EAAoD;AAClD+mS,IAAAA,EAAE,GAAG,uBAASlmF,WAAW,CAAC7gN,CAAD,CAApB,EAAyBuhN,KAAzB,CAAL;AACA,QAAIwlF,EAAE,KAAK,CAAX,EAAc,OAAO,IAAP;;AACd,QAAI/mS,CAAC,GAAG,CAAR,EAAW;AACTgnS,MAAAA,EAAE,GAAG,uBAASnmF,WAAW,CAAC7gN,CAAD,CAApB,EAAyB6gN,WAAW,CAAC7gN,CAAC,GAAG,CAAL,CAApC,CAAL;AACA,UACEgnS,EAAE,GAAG,CAAL,IACAF,EAAE,IAAIE,EADN,IAEAD,EAAE,IAAIC,EAFN,IAGA,CAACF,EAAE,GAAGC,EAAL,GAAUC,EAAX,KAAkB,IAAIjhS,IAAI,CAAC0Q,GAAL,CAAS,CAACqwR,EAAE,GAAGC,EAAN,IAAYC,EAArB,EAAyB,CAAzB,CAAtB,IAAqDjrC,iBAAWirC,EAJlE,EAME,OAAO,IAAP;AACH;;AACDF,IAAAA,EAAE,GAAGC,EAAL;AACD;;AACD,SAAO,KAAP;AACD;;AAED,SAASF,eAAT,CAAyBhmF,WAAzB,EAAsCU,KAAtC,EAA6C;AAC3C,SAAO,CAAC,CAAC,8BAAgBV,WAAW,CAACp3M,GAAZ,CAAgBw9R,WAAhB,CAAhB,EAA8CC,YAAY,CAAC3lF,KAAD,CAA1D,CAAT;AACD;;AAED,SAAS0lF,WAAT,CAAqBzlF,IAArB,EAA2B;AACzB,SAAOA,IAAI,GAAGA,IAAI,CAAC/3M,GAAL,CAASy9R,YAAT,CAAP,EAA+B1lF,IAAI,CAACp3L,GAAL,EAA/B,EAA2Co3L,IAAlD;AACD;;AAED,SAAS0lF,YAAT,CAAsB3lF,KAAtB,EAA6B;AAC3B,SAAO,CAACA,KAAK,CAAC,CAAD,CAAL,GAAWy1C,aAAZ,EAAqBz1C,KAAK,CAAC,CAAD,CAAL,GAAWy1C,aAAhC,CAAP;AACD;;AAEc,kBAAS3vD,MAAT,EAAiBka,KAAjB,EAAwB;AACrC,SAAO,CAACla,MAAM,IAAIm/F,kBAAkB,CAAC7vK,cAAnB,CAAkC0wE,MAAM,CAACpnL,IAAzC,CAAV,GACFumR,kBAAkB,CAACn/F,MAAM,CAACpnL,IAAR,CADhB,GAEFwmR,gBAFC,EAEiBp/F,MAFjB,EAEyBka,KAFzB,CAAP;AAGD;;;;;;;;;;AChGD;;AACA;;AAEA,SAAS4lF,UAAT,CAAoB7mF,EAApB,EAAwB9tG,EAAxB,EAA4B1tF,EAA5B,EAAgC;AAC9B,MAAIJ,CAAC,GAAG,oBAAM47L,EAAN,EAAU9tG,EAAE,GAAGn1B,aAAf,EAAwBv4D,EAAxB,EAA4BvlB,MAA5B,CAAmCizG,EAAnC,CAAR;AACA,SAAO,UAASrsG,CAAT,EAAY;AAAE,WAAOue,CAAC,CAACjb,GAAF,CAAM,UAASib,CAAT,EAAY;AAAE,aAAO,CAACve,CAAD,EAAIue,CAAJ,CAAP;AAAgB,KAApC,CAAP;AAA+C,GAApE;AACD;;AAED,SAAS0iR,UAAT,CAAoB/mF,EAApB,EAAwB5tG,EAAxB,EAA4B3mF,EAA5B,EAAgC;AAC9B,MAAI3lB,CAAC,GAAG,oBAAMk6M,EAAN,EAAU5tG,EAAE,GAAGp1B,aAAf,EAAwBvxD,EAAxB,EAA4BvsB,MAA5B,CAAmCkzG,EAAnC,CAAR;AACA,SAAO,UAAS/tF,CAAT,EAAY;AAAE,WAAOve,CAAC,CAACsD,GAAF,CAAM,UAAStD,CAAT,EAAY;AAAE,aAAO,CAACA,CAAD,EAAIue,CAAJ,CAAP;AAAgB,KAApC,CAAP;AAA+C,GAApE;AACD;;AAEc,SAAS2iR,SAAT,GAAqB;AAClC,MAAI50L,EAAJ;AAAA,MAAQ4tG,EAAR;AAAA,MAAYq/E,EAAZ;AAAA,MAAgBH,EAAhB;AAAA,MACI/sL,EADJ;AAAA,MACQ8tG,EADR;AAAA,MACYq/E,EADZ;AAAA,MACgBH,EADhB;AAAA,MAEI1zQ,EAAE,GAAG,EAFT;AAAA,MAEahH,EAAE,GAAGgH,EAFlB;AAAA,MAEsBw7Q,EAAE,GAAG,EAF3B;AAAA,MAE+BC,EAAE,GAAG,GAFpC;AAAA,MAGIphS,CAHJ;AAAA,MAGOue,CAHP;AAAA,MAGUkxD,CAHV;AAAA,MAGa+1J,CAHb;AAAA,MAIIz3I,SAAS,GAAG,GAJhB;;AAMA,WAASmzM,SAAT,GAAqB;AACnB,WAAO;AAACpnR,MAAAA,IAAI,EAAE,iBAAP;AAA0B4gM,MAAAA,WAAW,EAAEnvM,KAAK;AAA5C,KAAP;AACD;;AAED,WAASA,KAAT,GAAiB;AACf,WAAO,oBAAM,gBAAK6tR,EAAE,GAAG+H,EAAV,IAAgBA,EAAtB,EAA0B5H,EAA1B,EAA8B4H,EAA9B,EAAkC79R,GAAlC,CAAsCmsE,CAAtC,EACFr2E,MADE,CACK,oBAAM,gBAAKigS,EAAE,GAAG+H,EAAV,IAAgBA,EAAtB,EAA0B5H,EAA1B,EAA8B4H,EAA9B,EAAkC99R,GAAlC,CAAsCkiO,CAAtC,CADL,EAEFpsO,MAFE,CAEK,oBAAM,gBAAK8gN,EAAE,GAAGv0L,EAAV,IAAgBA,EAAtB,EAA0B2mF,EAA1B,EAA8B3mF,EAA9B,EAAkC3Q,MAAlC,CAAyC,UAAShV,CAAT,EAAY;AAAE,aAAO,eAAIA,CAAC,GAAGmhS,EAAR,IAAcjqN,aAArB;AAA+B,KAAtF,EAAwF5zE,GAAxF,CAA4FtD,CAA5F,CAFL,EAGF5G,MAHE,CAGK,oBAAM,gBAAK+gN,EAAE,GAAGx7L,EAAV,IAAgBA,EAAtB,EAA0B0tF,EAA1B,EAA8B1tF,EAA9B,EAAkC3J,MAAlC,CAAyC,UAASuJ,CAAT,EAAY;AAAE,aAAO,eAAIA,CAAC,GAAG6iR,EAAR,IAAclqN,aAArB;AAA+B,KAAtF,EAAwF5zE,GAAxF,CAA4Fib,CAA5F,CAHL,CAAP;AAID;;AAED2iR,EAAAA,SAAS,CAAC31R,KAAV,GAAkB,YAAW;AAC3B,WAAOA,KAAK,GAAGjI,GAAR,CAAY,UAASo3M,WAAT,EAAsB;AAAE,aAAO;AAAC5gM,QAAAA,IAAI,EAAE,YAAP;AAAqB4gM,QAAAA,WAAW,EAAEA;AAAlC,OAAP;AAAwD,KAA5F,CAAP;AACD,GAFD;;AAIAwmF,EAAAA,SAAS,CAACG,OAAV,GAAoB,YAAW;AAC7B,WAAO;AACLvnR,MAAAA,IAAI,EAAE,SADD;AAEL4gM,MAAAA,WAAW,EAAE,CACXjrI,CAAC,CAAC2pN,EAAD,CAAD,CAAMhgS,MAAN,CACAosO,CAAC,CAACg0D,EAAD,CAAD,CAAMt2R,KAAN,CAAY,CAAZ,CADA,EAEAusE,CAAC,CAAC8pN,EAAD,CAAD,CAAMjrR,OAAN,GAAgBpL,KAAhB,CAAsB,CAAtB,CAFA,EAGAsiO,CAAC,CAAC6zD,EAAD,CAAD,CAAM/qR,OAAN,GAAgBpL,KAAhB,CAAsB,CAAtB,CAHA,CADW;AAFR,KAAP;AASD,GAVD;;AAYAg+R,EAAAA,SAAS,CAAChuF,MAAV,GAAmB,UAAS1yL,CAAT,EAAY;AAC7B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO+nS,SAAS,CAACI,WAAV,EAAP;AACvB,WAAOJ,SAAS,CAACK,WAAV,CAAsB/gR,CAAtB,EAAyB8gR,WAAzB,CAAqC9gR,CAArC,CAAP;AACD,GAHD;;AAKA0gR,EAAAA,SAAS,CAACK,WAAV,GAAwB,UAAS/gR,CAAT,EAAY;AAClC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAAC,CAACigS,EAAD,EAAKC,EAAL,CAAD,EAAW,CAACE,EAAD,EAAKC,EAAL,CAAX,CAAP;AACvBJ,IAAAA,EAAE,GAAG,CAAC54Q,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAe+4Q,EAAE,GAAG,CAAC/4Q,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB;AACA64Q,IAAAA,EAAE,GAAG,CAAC74Q,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAeg5Q,EAAE,GAAG,CAACh5Q,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB;AACA,QAAI44Q,EAAE,GAAGG,EAAT,EAAa/4Q,CAAC,GAAG44Q,EAAJ,EAAQA,EAAE,GAAGG,EAAb,EAAiBA,EAAE,GAAG/4Q,CAAtB;AACb,QAAI64Q,EAAE,GAAGG,EAAT,EAAah5Q,CAAC,GAAG64Q,EAAJ,EAAQA,EAAE,GAAGG,EAAb,EAAiBA,EAAE,GAAGh5Q,CAAtB;AACb,WAAO0gR,SAAS,CAACnzM,SAAV,CAAoBA,SAApB,CAAP;AACD,GAPD;;AASAmzM,EAAAA,SAAS,CAACI,WAAV,GAAwB,UAAS9gR,CAAT,EAAY;AAClC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAAC,CAAC+gN,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAP;AACvB6tG,IAAAA,EAAE,GAAG,CAAC15L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAe8rF,EAAE,GAAG,CAAC9rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB;AACA25L,IAAAA,EAAE,GAAG,CAAC35L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAe6rF,EAAE,GAAG,CAAC7rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB;AACA,QAAI05L,EAAE,GAAG5tG,EAAT,EAAa9rF,CAAC,GAAG05L,EAAJ,EAAQA,EAAE,GAAG5tG,EAAb,EAAiBA,EAAE,GAAG9rF,CAAtB;AACb,QAAI25L,EAAE,GAAG9tG,EAAT,EAAa7rF,CAAC,GAAG25L,EAAJ,EAAQA,EAAE,GAAG9tG,EAAb,EAAiBA,EAAE,GAAG7rF,CAAtB;AACb,WAAO0gR,SAAS,CAACnzM,SAAV,CAAoBA,SAApB,CAAP;AACD,GAPD;;AASAmzM,EAAAA,SAAS,CAAC3sR,IAAV,GAAiB,UAASiM,CAAT,EAAY;AAC3B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO+nS,SAAS,CAACM,SAAV,EAAP;AACvB,WAAON,SAAS,CAACO,SAAV,CAAoBjhR,CAApB,EAAuBghR,SAAvB,CAAiChhR,CAAjC,CAAP;AACD,GAHD;;AAKA0gR,EAAAA,SAAS,CAACO,SAAV,GAAsB,UAASjhR,CAAT,EAAY;AAChC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAACgoS,EAAD,EAAKC,EAAL,CAAP;AACvBD,IAAAA,EAAE,GAAG,CAAC3gR,CAAC,CAAC,CAAD,CAAP,EAAY4gR,EAAE,GAAG,CAAC5gR,CAAC,CAAC,CAAD,CAAnB;AACA,WAAO0gR,SAAP;AACD,GAJD;;AAMAA,EAAAA,SAAS,CAACM,SAAV,GAAsB,UAAShhR,CAAT,EAAY;AAChC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAACwsB,EAAD,EAAKhH,EAAL,CAAP;AACvBgH,IAAAA,EAAE,GAAG,CAACnF,CAAC,CAAC,CAAD,CAAP,EAAY7B,EAAE,GAAG,CAAC6B,CAAC,CAAC,CAAD,CAAnB;AACA,WAAO0gR,SAAP;AACD,GAJD;;AAMAA,EAAAA,SAAS,CAACnzM,SAAV,GAAsB,UAASvtE,CAAT,EAAY;AAChC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO40F,SAAP;AACvBA,IAAAA,SAAS,GAAG,CAACvtE,CAAb;AACAxgB,IAAAA,CAAC,GAAGghS,UAAU,CAAC7mF,EAAD,EAAK9tG,EAAL,EAAS,EAAT,CAAd;AACA9tF,IAAAA,CAAC,GAAG0iR,UAAU,CAAC/mF,EAAD,EAAK5tG,EAAL,EAASve,SAAT,CAAd;AACAte,IAAAA,CAAC,GAAGuxN,UAAU,CAAC3H,EAAD,EAAKG,EAAL,EAAS,EAAT,CAAd;AACAh0D,IAAAA,CAAC,GAAGy7D,UAAU,CAAC7H,EAAD,EAAKG,EAAL,EAASxrM,SAAT,CAAd;AACA,WAAOmzM,SAAP;AACD,GARD;;AAUA,SAAOA,SAAS,CACXK,WADE,CACU,CAAC,CAAC,CAAC,GAAF,EAAO,CAAC,EAAD,GAAMrqN,aAAb,CAAD,EAAwB,CAAC,GAAD,EAAM,KAAKA,aAAX,CAAxB,CADV,EAEFoqN,WAFE,CAEU,CAAC,CAAC,CAAC,GAAF,EAAO,CAAC,EAAD,GAAMpqN,aAAb,CAAD,EAAwB,CAAC,GAAD,EAAM,KAAKA,aAAX,CAAxB,CAFV,CAAP;AAGD;;AAEM,SAASwqN,WAAT,GAAuB;AAC5B,SAAOR,SAAS,IAAhB;AACD;;;;;;;;;ACxGD;;AAEe,kBAASngS,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIsyM,EAAE,GAAGn5M,CAAC,CAAC,CAAD,CAAD,GAAO8vP,aAAhB;AAAA,MACI12C,EAAE,GAAGp5M,CAAC,CAAC,CAAD,CAAD,GAAO8vP,aADhB;AAAA,MAEIvkJ,EAAE,GAAG1kG,CAAC,CAAC,CAAD,CAAD,GAAOipP,aAFhB;AAAA,MAGIxkJ,EAAE,GAAGzkG,CAAC,CAAC,CAAD,CAAD,GAAOipP,aAHhB;AAAA,MAIItW,GAAG,GAAG,eAAIpgC,EAAJ,CAJV;AAAA,MAKIwnF,GAAG,GAAG,eAAIxnF,EAAJ,CALV;AAAA,MAMIsgC,GAAG,GAAG,eAAIpuI,EAAJ,CANV;AAAA,MAOIu1L,GAAG,GAAG,eAAIv1L,EAAJ,CAPV;AAAA,MAQIw1L,GAAG,GAAGtnD,GAAG,GAAG,eAAIrgC,EAAJ,CARhB;AAAA,MASI4nF,GAAG,GAAGvnD,GAAG,GAAG,eAAIrgC,EAAJ,CAThB;AAAA,MAUI6nF,GAAG,GAAGtnD,GAAG,GAAG,eAAInuI,EAAJ,CAVhB;AAAA,MAWI01L,GAAG,GAAGvnD,GAAG,GAAG,eAAInuI,EAAJ,CAXhB;AAAA,MAYI5lG,CAAC,GAAG,IAAI,gBAAK,gBAAK,oBAAS2lG,EAAE,GAAG8tG,EAAd,IAAoBogC,GAAG,GAAGE,GAAN,GAAY,oBAASnuI,EAAE,GAAG4tG,EAAd,CAArC,CAAL,CAZZ;AAAA,MAaI/iM,CAAC,GAAG,eAAIzQ,CAAJ,CAbR;AAeA,MAAIswP,WAAW,GAAGtwP,CAAC,GAAG,UAASnJ,CAAT,EAAY;AAChC,QAAI00P,CAAC,GAAG,eAAI10P,CAAC,IAAImJ,CAAT,IAAcyQ,CAAtB;AAAA,QACI66O,CAAC,GAAG,eAAItrP,CAAC,GAAGnJ,CAAR,IAAa4Z,CADrB;AAAA,QAEInX,CAAC,GAAGgyP,CAAC,GAAG6vC,GAAJ,GAAU5vC,CAAC,GAAG8vC,GAFtB;AAAA,QAGIxjR,CAAC,GAAGyzO,CAAC,GAAG8vC,GAAJ,GAAU7vC,CAAC,GAAG+vC,GAHtB;AAAA,QAII1yN,CAAC,GAAG0iL,CAAC,GAAG2vC,GAAJ,GAAU1vC,CAAC,GAAG2vC,GAJtB;AAKA,WAAO,CACL,iBAAMrjR,CAAN,EAASve,CAAT,IAAc8wP,aADT,EAEL,iBAAMxhL,CAAN,EAAS,gBAAKtvE,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAT,IAAgCuyO,aAF3B,CAAP;AAID,GAVkB,GAUf,YAAW;AACb,WAAO,CAAC52C,EAAE,GAAG42C,aAAN,EAAe32C,EAAE,GAAG22C,aAApB,CAAP;AACD,GAZD;AAcAkG,EAAAA,WAAW,CAACirC,QAAZ,GAAuBv7R,CAAvB;AAEA,SAAOswP,WAAP;AACD;;;;;;;;;eCnCch3P,CAAC,IAAIA;;;;;;;;;;;ACApB;;AACA;;AACA;;;;AAEA,IAAIk2R,OAAO,GAAG,IAAIl3E,cAAJ,EAAd;AAAA,IACIi3E,WAAW,GAAG,IAAIj3E,cAAJ,EADlB;AAAA,IAEIm7B,GAFJ;AAAA,IAGIC,GAHJ;AAAA,IAIIlgC,EAJJ;AAAA,IAKIC,EALJ;AAOA,IAAIq8E,UAAU,GAAG;AACfp7E,EAAAA,KAAK,EAAE3gN,aADQ;AAEf8hP,EAAAA,SAAS,EAAE9hP,aAFI;AAGfgiP,EAAAA,OAAO,EAAEhiP,aAHM;AAIfs7R,EAAAA,YAAY,EAAE,YAAW;AACvBS,IAAAA,UAAU,CAACj6C,SAAX,GAAuBk6C,aAAvB;AACAD,IAAAA,UAAU,CAAC/5C,OAAX,GAAqBi6C,WAArB;AACD,GAPc;AAQfV,EAAAA,UAAU,EAAE,YAAW;AACrBQ,IAAAA,UAAU,CAACj6C,SAAX,GAAuBi6C,UAAU,CAAC/5C,OAAX,GAAqB+5C,UAAU,CAACp7E,KAAX,GAAmB3gN,aAA/D;AACAy7R,IAAAA,OAAO,CAAC17Q,GAAR,CAAY,eAAIy7Q,WAAJ,CAAZ;AACAA,IAAAA,WAAW,GAAG,IAAIj3E,cAAJ,EAAd;AACD,GAZc;AAafjgN,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAI49M,IAAI,GAAGu5E,OAAO,GAAG,CAArB;AACAA,IAAAA,OAAO,GAAG,IAAIl3E,cAAJ,EAAV;AACA,WAAOrC,IAAP;AACD;AAjBc,CAAjB;;AAoBA,SAAS85E,aAAT,GAAyB;AACvBD,EAAAA,UAAU,CAACp7E,KAAX,GAAmBw7E,cAAnB;AACD;;AAED,SAASA,cAAT,CAAwB52R,CAAxB,EAA2Bue,CAA3B,EAA8B;AAC5Bi4Q,EAAAA,UAAU,CAACp7E,KAAX,GAAmBy7E,SAAnB;AACA18C,EAAAA,GAAG,GAAGjgC,EAAE,GAAGl6M,CAAX,EAAco6O,GAAG,GAAGjgC,EAAE,GAAG57L,CAAzB;AACD;;AAED,SAASs4Q,SAAT,CAAmB72R,CAAnB,EAAsBue,CAAtB,EAAyB;AACvB03Q,EAAAA,WAAW,CAACz7Q,GAAZ,CAAgB2/L,EAAE,GAAGn6M,CAAL,GAASk6M,EAAE,GAAG37L,CAA9B;AACA27L,EAAAA,EAAE,GAAGl6M,CAAL,EAAQm6M,EAAE,GAAG57L,CAAb;AACD;;AAED,SAASm4Q,WAAT,GAAuB;AACrBG,EAAAA,SAAS,CAAC18C,GAAD,EAAMC,GAAN,CAAT;AACD;;eAEco8C;;;;;;;;;;ACjDf;;;;AAEA,IAAIt8E,EAAE,GAAGv4M,QAAT;AAAA,IACIw4M,EAAE,GAAGD,EADT;AAAA,IAEI5tG,EAAE,GAAG,CAAC4tG,EAFV;AAAA,IAGI7tG,EAAE,GAAGC,EAHT;AAKA,IAAI4rL,YAAY,GAAG;AACjB98E,EAAAA,KAAK,EAAE+8E,WADU;AAEjB57C,EAAAA,SAAS,EAAE9hP,aAFM;AAGjBgiP,EAAAA,OAAO,EAAEhiP,aAHQ;AAIjBs7R,EAAAA,YAAY,EAAEt7R,aAJG;AAKjBu7R,EAAAA,UAAU,EAAEv7R,aALK;AAMjBsE,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAI4tQ,MAAM,GAAG,CAAC,CAACzyD,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAb;AACAC,IAAAA,EAAE,GAAGD,EAAE,GAAG,EAAE8tG,EAAE,GAAGD,EAAE,GAAGv4M,QAAZ,CAAV;AACA,WAAOgrQ,MAAP;AACD;AAVgB,CAAnB;;AAaA,SAASwrB,WAAT,CAAqBn4R,CAArB,EAAwBue,CAAxB,EAA2B;AACzB,MAAIve,CAAC,GAAGk6M,EAAR,EAAYA,EAAE,GAAGl6M,CAAL;AACZ,MAAIA,CAAC,GAAGssG,EAAR,EAAYA,EAAE,GAAGtsG,CAAL;AACZ,MAAIue,CAAC,GAAG47L,EAAR,EAAYA,EAAE,GAAG57L,CAAL;AACZ,MAAIA,CAAC,GAAG8tF,EAAR,EAAYA,EAAE,GAAG9tF,CAAL;AACb;;eAEc25Q;;;;;;;;;;AC3Bf;;AAEA;AAEA,IAAIkB,EAAE,GAAG,CAAT;AAAA,IACIC,EAAE,GAAG,CADT;AAAA,IAEIC,EAAE,GAAG,CAFT;AAAA,IAGIC,EAAE,GAAG,CAHT;AAAA,IAIIC,EAAE,GAAG,CAJT;AAAA,IAKIC,EAAE,GAAG,CALT;AAAA,IAMIrzD,EAAE,GAAG,CANT;AAAA,IAOIszD,EAAE,GAAG,CAPT;AAAA,IAQIC,EAAE,GAAG,CART;AAAA,IASIx/C,GATJ;AAAA,IAUIC,GAVJ;AAAA,IAWIlgC,EAXJ;AAAA,IAYIC,EAZJ;AAcA,IAAIy/E,cAAc,GAAG;AACnBx+E,EAAAA,KAAK,EAAEy+E,aADY;AAEnBt9C,EAAAA,SAAS,EAAEu9C,iBAFQ;AAGnBr9C,EAAAA,OAAO,EAAEs9C,eAHU;AAInBhE,EAAAA,YAAY,EAAE,YAAW;AACvB6D,IAAAA,cAAc,CAACr9C,SAAf,GAA2By9C,iBAA3B;AACAJ,IAAAA,cAAc,CAACn9C,OAAf,GAAyBw9C,eAAzB;AACD,GAPkB;AAQnBjE,EAAAA,UAAU,EAAE,YAAW;AACrB4D,IAAAA,cAAc,CAACx+E,KAAf,GAAuBy+E,aAAvB;AACAD,IAAAA,cAAc,CAACr9C,SAAf,GAA2Bu9C,iBAA3B;AACAF,IAAAA,cAAc,CAACn9C,OAAf,GAAyBs9C,eAAzB;AACD,GAZkB;AAanBh7R,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAIm9O,QAAQ,GAAGy9C,EAAE,GAAG,CAACvzD,EAAE,GAAGuzD,EAAN,EAAUD,EAAE,GAAGC,EAAf,CAAH,GACXF,EAAE,GAAG,CAACF,EAAE,GAAGE,EAAN,EAAUD,EAAE,GAAGC,EAAf,CAAH,GACFH,EAAE,GAAG,CAACF,EAAE,GAAGE,EAAN,EAAUD,EAAE,GAAGC,EAAf,CAAH,GACF,CAACltN,GAAD,EAAMA,GAAN,CAHN;AAIAgtN,IAAAA,EAAE,GAAGC,EAAE,GAAGC,EAAE,GACZC,EAAE,GAAGC,EAAE,GAAGC,EAAE,GACZrzD,EAAE,GAAGszD,EAAE,GAAGC,EAAE,GAAG,CAFf;AAGA,WAAOz9C,QAAP;AACD;AAtBkB,CAArB;;AAyBA,SAAS29C,aAAT,CAAuB75R,CAAvB,EAA0Bue,CAA1B,EAA6B;AAC3B66Q,EAAAA,EAAE,IAAIp5R,CAAN;AACAq5R,EAAAA,EAAE,IAAI96Q,CAAN;AACA,IAAE+6Q,EAAF;AACD;;AAED,SAASQ,iBAAT,GAA6B;AAC3BF,EAAAA,cAAc,CAACx+E,KAAf,GAAuB8mF,sBAAvB;AACD;;AAED,SAASA,sBAAT,CAAgCliS,CAAhC,EAAmCue,CAAnC,EAAsC;AACpCq7Q,EAAAA,cAAc,CAACx+E,KAAf,GAAuB+mF,iBAAvB;AACAtI,EAAAA,aAAa,CAAC3/E,EAAE,GAAGl6M,CAAN,EAASm6M,EAAE,GAAG57L,CAAd,CAAb;AACD;;AAED,SAAS4jR,iBAAT,CAA2BniS,CAA3B,EAA8Bue,CAA9B,EAAiC;AAC/B,MAAIoH,EAAE,GAAG3lB,CAAC,GAAGk6M,EAAb;AAAA,MAAiBv7L,EAAE,GAAGJ,CAAC,GAAG47L,EAA1B;AAAA,MAA8B7qI,CAAC,GAAG,gBAAK3pD,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB,CAAlC;AACA46Q,EAAAA,EAAE,IAAIjqN,CAAC,IAAI4qI,EAAE,GAAGl6M,CAAT,CAAD,GAAe,CAArB;AACAw5R,EAAAA,EAAE,IAAIlqN,CAAC,IAAI6qI,EAAE,GAAG57L,CAAT,CAAD,GAAe,CAArB;AACAk7Q,EAAAA,EAAE,IAAInqN,CAAN;AACAuqN,EAAAA,aAAa,CAAC3/E,EAAE,GAAGl6M,CAAN,EAASm6M,EAAE,GAAG57L,CAAd,CAAb;AACD;;AAED,SAASw7Q,eAAT,GAA2B;AACzBH,EAAAA,cAAc,CAACx+E,KAAf,GAAuBy+E,aAAvB;AACD;;AAED,SAASG,iBAAT,GAA6B;AAC3BJ,EAAAA,cAAc,CAACx+E,KAAf,GAAuBgnF,sBAAvB;AACD;;AAED,SAASnI,eAAT,GAA2B;AACzBoI,EAAAA,iBAAiB,CAACloD,GAAD,EAAMC,GAAN,CAAjB;AACD;;AAED,SAASgoD,sBAAT,CAAgCpiS,CAAhC,EAAmCue,CAAnC,EAAsC;AACpCq7Q,EAAAA,cAAc,CAACx+E,KAAf,GAAuBinF,iBAAvB;AACAxI,EAAAA,aAAa,CAAC1/C,GAAG,GAAGjgC,EAAE,GAAGl6M,CAAZ,EAAeo6O,GAAG,GAAGjgC,EAAE,GAAG57L,CAA1B,CAAb;AACD;;AAED,SAAS8jR,iBAAT,CAA2BriS,CAA3B,EAA8Bue,CAA9B,EAAiC;AAC/B,MAAIoH,EAAE,GAAG3lB,CAAC,GAAGk6M,EAAb;AAAA,MACIv7L,EAAE,GAAGJ,CAAC,GAAG47L,EADb;AAAA,MAEI7qI,CAAC,GAAG,gBAAK3pD,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB,CAFR;AAIA46Q,EAAAA,EAAE,IAAIjqN,CAAC,IAAI4qI,EAAE,GAAGl6M,CAAT,CAAD,GAAe,CAArB;AACAw5R,EAAAA,EAAE,IAAIlqN,CAAC,IAAI6qI,EAAE,GAAG57L,CAAT,CAAD,GAAe,CAArB;AACAk7Q,EAAAA,EAAE,IAAInqN,CAAN;AAEAA,EAAAA,CAAC,GAAG6qI,EAAE,GAAGn6M,CAAL,GAASk6M,EAAE,GAAG37L,CAAlB;AACA6nN,EAAAA,EAAE,IAAI92J,CAAC,IAAI4qI,EAAE,GAAGl6M,CAAT,CAAP;AACA05R,EAAAA,EAAE,IAAIpqN,CAAC,IAAI6qI,EAAE,GAAG57L,CAAT,CAAP;AACAo7Q,EAAAA,EAAE,IAAIrqN,CAAC,GAAG,CAAV;AACAuqN,EAAAA,aAAa,CAAC3/E,EAAE,GAAGl6M,CAAN,EAASm6M,EAAE,GAAG57L,CAAd,CAAb;AACD;;eAEcq7Q;;;;;;;;;;ACnGf;;AACA;;;;AAEe,SAAS0I,WAAT,CAAqBz2H,OAArB,EAA8B;AAC3C,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDy2H,WAAW,CAACroS,SAAZ,GAAwB;AACtBsoS,EAAAA,OAAO,EAAE,GADa;AAEtBC,EAAAA,WAAW,EAAE,UAAShiR,CAAT,EAAY;AACvB,WAAO,KAAK+hR,OAAL,GAAe/hR,CAAf,EAAkB,IAAzB;AACD,GAJqB;AAKtBu1Q,EAAAA,YAAY,EAAE,YAAW;AACvB,SAAK15C,KAAL,GAAa,CAAb;AACD,GAPqB;AAQtB25C,EAAAA,UAAU,EAAE,YAAW;AACrB,SAAK35C,KAAL,GAAajwK,GAAb;AACD,GAVqB;AAWtBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GAbqB;AActBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,KAAe,CAAnB,EAAsB,KAAKF,QAAL,CAAc7E,SAAd;AACtB,SAAKkF,MAAL,GAAcpwK,GAAd;AACD,GAjBqB;AAkBtBgvI,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB;;AACA,eAAKi+N,MAAL,GAAc,CAAd;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB;;AACA;AACD;;AACD;AAAS;AACP,eAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAAC,GAAG,KAAKuiS,OAA9B,EAAuChkR,CAAvC;;AACA,eAAK49N,QAAL,CAAcvhC,GAAd,CAAkB56M,CAAlB,EAAqBue,CAArB,EAAwB,KAAKgkR,OAA7B,EAAsC,CAAtC,EAAyCzrD,SAAzC;;AACA;AACD;AAdH;AAgBD,GAnCqB;AAoCtB/3O,EAAAA,MAAM,EAAEtE;AApCc,CAAxB;;;;;;;;;ACPA;;AACA;;AACA;;;;AAEA,IAAIolS,SAAS,GAAG,IAAI7gF,cAAJ,EAAhB;AAAA,IACIyjF,UADJ;AAAA,IAEItoD,GAFJ;AAAA,IAGIC,GAHJ;AAAA,IAIIlgC,EAJJ;AAAA,IAKIC,EALJ;AAOA,IAAI2lF,YAAY,GAAG;AACjB1kF,EAAAA,KAAK,EAAE3gN,aADU;AAEjB8hP,EAAAA,SAAS,EAAE,YAAW;AACpBujD,IAAAA,YAAY,CAAC1kF,KAAb,GAAqB4kF,gBAArB;AACD,GAJgB;AAKjBvjD,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIgmD,UAAJ,EAAgBvC,WAAW,CAAC/lD,GAAD,EAAMC,GAAN,CAAX;AAChB0lD,IAAAA,YAAY,CAAC1kF,KAAb,GAAqB3gN,aAArB;AACD,GARgB;AASjBs7R,EAAAA,YAAY,EAAE,YAAW;AACvB0M,IAAAA,UAAU,GAAG,IAAb;AACD,GAXgB;AAYjBzM,EAAAA,UAAU,EAAE,YAAW;AACrByM,IAAAA,UAAU,GAAG,IAAb;AACD,GAdgB;AAejB1jS,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAI5F,MAAM,GAAG,CAAC0mS,SAAd;AACAA,IAAAA,SAAS,GAAG,IAAI7gF,cAAJ,EAAZ;AACA,WAAO7lN,MAAP;AACD;AAnBgB,CAAnB;;AAsBA,SAAS6mS,gBAAT,CAA0BhgS,CAA1B,EAA6Bue,CAA7B,EAAgC;AAC9BuhR,EAAAA,YAAY,CAAC1kF,KAAb,GAAqB8kF,WAArB;AACA/lD,EAAAA,GAAG,GAAGjgC,EAAE,GAAGl6M,CAAX,EAAco6O,GAAG,GAAGjgC,EAAE,GAAG57L,CAAzB;AACD;;AAED,SAAS2hR,WAAT,CAAqBlgS,CAArB,EAAwBue,CAAxB,EAA2B;AACzB27L,EAAAA,EAAE,IAAIl6M,CAAN,EAASm6M,EAAE,IAAI57L,CAAf;AACAshR,EAAAA,SAAS,CAACrlR,GAAV,CAAc,gBAAK0/L,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAAd;AACAD,EAAAA,EAAE,GAAGl6M,CAAL,EAAQm6M,EAAE,GAAG57L,CAAb;AACD;;eAEcuhR;;;;;;;;;;AC5CA,SAAS4C,UAAT,GAAsB;AACnC,OAAKC,OAAL,GAAe,EAAf;AACD;;AAEDD,UAAU,CAACzoS,SAAX,GAAuB;AACrBsoS,EAAAA,OAAO,EAAE,GADY;AAErBK,EAAAA,OAAO,EAAEtjD,MAAM,CAAC,GAAD,CAFM;AAGrBkjD,EAAAA,WAAW,EAAE,UAAShiR,CAAT,EAAY;AACvB,QAAI,CAACA,CAAC,GAAG,CAACA,CAAN,MAAa,KAAK+hR,OAAtB,EAA+B,KAAKA,OAAL,GAAe/hR,CAAf,EAAkB,KAAKoiR,OAAL,GAAe,IAAjC;AAC/B,WAAO,IAAP;AACD,GANoB;AAOrB7M,EAAAA,YAAY,EAAE,YAAW;AACvB,SAAK15C,KAAL,GAAa,CAAb;AACD,GAToB;AAUrB25C,EAAAA,UAAU,EAAE,YAAW;AACrB,SAAK35C,KAAL,GAAajwK,GAAb;AACD,GAZoB;AAarBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GAfoB;AAgBrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,KAAe,CAAnB,EAAsB,KAAKsmD,OAAL,CAAa7oS,IAAb,CAAkB,GAAlB;AACtB,SAAK0iP,MAAL,GAAcpwK,GAAd;AACD,GAnBoB;AAoBrBgvI,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKmmD,OAAL,CAAa7oS,IAAb,CAAkB,GAAlB,EAAuBkG,CAAvB,EAA0B,GAA1B,EAA+Bue,CAA/B;;AACA,eAAKi+N,MAAL,GAAc,CAAd;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKmmD,OAAL,CAAa7oS,IAAb,CAAkB,GAAlB,EAAuBkG,CAAvB,EAA0B,GAA1B,EAA+Bue,CAA/B;;AACA;AACD;;AACD;AAAS;AACP,cAAI,KAAKqkR,OAAL,IAAgB,IAApB,EAA0B,KAAKA,OAAL,GAAetjD,MAAM,CAAC,KAAKijD,OAAN,CAArB;;AAC1B,eAAKI,OAAL,CAAa7oS,IAAb,CAAkB,GAAlB,EAAuBkG,CAAvB,EAA0B,GAA1B,EAA+Bue,CAA/B,EAAkC,KAAKqkR,OAAvC;;AACA;AACD;AAdH;AAgBD,GArCoB;AAsCrB7jS,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAI,KAAK4jS,OAAL,CAAaxpS,MAAjB,EAAyB;AACvB,UAAI4F,MAAM,GAAG,KAAK4jS,OAAL,CAAallS,IAAb,CAAkB,EAAlB,CAAb;;AACA,WAAKklS,OAAL,GAAe,EAAf;AACA,aAAO5jS,MAAP;AACD,KAJD,MAIO;AACL,aAAO,IAAP;AACD;AACF;AA9CoB,CAAvB;;AAiDA,SAASugP,MAAT,CAAgBtpO,MAAhB,EAAwB;AACtB,SAAO,QAAQA,MAAR,GACD,GADC,GACKA,MADL,GACc,GADd,GACoBA,MADpB,GAC6B,WAD7B,GAC2C,CAAC,CAAD,GAAKA,MADhD,GAED,GAFC,GAEKA,MAFL,GAEc,GAFd,GAEoBA,MAFpB,GAE6B,WAF7B,GAE2C,IAAIA,MAF/C,GAGD,GAHN;AAID;;;;;;;;;AC1DD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS6sR,UAAT,EAAqBh3H,OAArB,EAA8B;AAC3C,MAAI22H,WAAW,GAAG,GAAlB;AAAA,MACIM,gBADJ;AAAA,MAEIC,aAFJ;;AAIA,WAAS76R,IAAT,CAAcg5L,MAAd,EAAsB;AACpB,QAAIA,MAAJ,EAAY;AACV,UAAI,OAAOshG,WAAP,KAAuB,UAA3B,EAAuCO,aAAa,CAACP,WAAd,CAA0B,CAACA,WAAW,CAACtoS,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAA3B;AACvC,2BAAOsnM,MAAP,EAAe4hG,gBAAgB,CAACC,aAAD,CAA/B;AACD;;AACD,WAAOA,aAAa,CAAChkS,MAAd,EAAP;AACD;;AAEDmJ,EAAAA,IAAI,CAACy0M,IAAL,GAAY,UAASzb,MAAT,EAAiB;AAC3B,yBAAOA,MAAP,EAAe4hG,gBAAgB,CAACE,aAAD,CAA/B;AACA,WAAOA,cAASjkS,MAAT,EAAP;AACD,GAHD;;AAKAmJ,EAAAA,IAAI,CAACuiO,OAAL,GAAe,UAASvpC,MAAT,EAAiB;AAC9B,yBAAOA,MAAP,EAAe4hG,gBAAgB,CAACG,gBAAD,CAA/B;AACA,WAAOA,iBAAYlkS,MAAZ,EAAP;AACD,GAHD;;AAKAmJ,EAAAA,IAAI,CAACykQ,MAAL,GAAc,UAASzrE,MAAT,EAAiB;AAC7B,yBAAOA,MAAP,EAAe4hG,gBAAgB,CAACI,eAAD,CAA/B;AACA,WAAOA,gBAAWnkS,MAAX,EAAP;AACD,GAHD;;AAKAmJ,EAAAA,IAAI,CAACg0O,QAAL,GAAgB,UAASh7C,MAAT,EAAiB;AAC/B,yBAAOA,MAAP,EAAe4hG,gBAAgB,CAACK,iBAAD,CAA/B;AACA,WAAOA,kBAAapkS,MAAb,EAAP;AACD,GAHD;;AAKAmJ,EAAAA,IAAI,CAAC26R,UAAL,GAAkB,UAASriR,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2pS,gBAAgB,GAAGtiR,CAAC,IAAI,IAAL,IAAaqiR,UAAU,GAAG,IAAb,EAAmB/oK,iBAAhC,IAA4C,CAAC+oK,UAAU,GAAGriR,CAAd,EAAiBiiK,MAAhF,EAAwFv6K,IAA5G,IAAoH26R,UAA3H;AACD,GAFD;;AAIA36R,EAAAA,IAAI,CAAC2jK,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO0yK,OAAP;AACvBk3H,IAAAA,aAAa,GAAGviR,CAAC,IAAI,IAAL,IAAaqrJ,OAAO,GAAG,IAAV,EAAgB,IAAI62H,eAAJ,EAA7B,IAA+C,IAAIJ,gBAAJ,CAAgBz2H,OAAO,GAAGrrJ,CAA1B,CAA/D;AACA,QAAI,OAAOgiR,WAAP,KAAuB,UAA3B,EAAuCO,aAAa,CAACP,WAAd,CAA0BA,WAA1B;AACvC,WAAOt6R,IAAP;AACD,GALD;;AAOAA,EAAAA,IAAI,CAACs6R,WAAL,GAAmB,UAAShiR,CAAT,EAAY;AAC7B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOqpS,WAAP;AACvBA,IAAAA,WAAW,GAAG,OAAOhiR,CAAP,KAAa,UAAb,GAA0BA,CAA1B,IAA+BuiR,aAAa,CAACP,WAAd,CAA0B,CAAChiR,CAA3B,GAA+B,CAACA,CAA/D,CAAd;AACA,WAAOtY,IAAP;AACD,GAJD;;AAMA,SAAOA,IAAI,CAAC26R,UAAL,CAAgBA,UAAhB,EAA4Bh3H,OAA5B,CAAoCA,OAApC,CAAP;AACD;;;;;;;;;;AC5Dc,kBAASm/G,OAAT,EAAkB;AAC/B,SAAO;AACLvoG,IAAAA,MAAM,EAAE20E,WAAW,CAAC4zB,OAAD;AADd,GAAP;AAGD;;AAEM,SAAS5zB,WAAT,CAAqB4zB,OAArB,EAA8B;AACnC,SAAO,UAASvoG,MAAT,EAAiB;AACtB,QAAIplL,CAAC,GAAG,IAAI+lS,eAAJ,EAAR;;AACA,SAAK,IAAItlS,GAAT,IAAgBktR,OAAhB,EAAyB3tR,CAAC,CAACS,GAAD,CAAD,GAASktR,OAAO,CAACltR,GAAD,CAAhB;;AACzBT,IAAAA,CAAC,CAAColL,MAAF,GAAWA,MAAX;AACA,WAAOplL,CAAP;AACD,GALD;AAMD;;AAED,SAAS+lS,eAAT,GAA2B,CAAE;;AAE7BA,eAAe,CAACnpS,SAAhB,GAA4B;AAC1BwL,EAAAA,WAAW,EAAE29R,eADa;AAE1BhoF,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AAAE,SAAKkkK,MAAL,CAAY24B,KAAZ,CAAkBp7M,CAAlB,EAAqBue,CAArB;AAA0B,GAFxB;AAG1Bi3Q,EAAAA,MAAM,EAAE,YAAW;AAAE,SAAK/yG,MAAL,CAAY+yG,MAAZ;AAAuB,GAHlB;AAI1Bj5C,EAAAA,SAAS,EAAE,YAAW;AAAE,SAAK95D,MAAL,CAAY85D,SAAZ;AAA0B,GAJxB;AAK1BE,EAAAA,OAAO,EAAE,YAAW;AAAE,SAAKh6D,MAAL,CAAYg6D,OAAZ;AAAwB,GALpB;AAM1Bs5C,EAAAA,YAAY,EAAE,YAAW;AAAE,SAAKtzG,MAAL,CAAYszG,YAAZ;AAA6B,GAN9B;AAO1BC,EAAAA,UAAU,EAAE,YAAW;AAAE,SAAKvzG,MAAL,CAAYuzG,UAAZ;AAA2B;AAP1B,CAA5B;;;;;;;;;;;;ACjBA;;AACA;;;;AAEA,SAASzrI,GAAT,CAAas4I,UAAb,EAAyBQ,SAAzB,EAAoCniG,MAApC,EAA4C;AAC1C,MAAIn/J,IAAI,GAAG8gQ,UAAU,CAACS,UAAX,IAAyBT,UAAU,CAACS,UAAX,EAApC;AACAT,EAAAA,UAAU,CAACnzR,KAAX,CAAiB,GAAjB,EAAsB4qM,SAAtB,CAAgC,CAAC,CAAD,EAAI,CAAJ,CAAhC;AACA,MAAIv4K,IAAI,IAAI,IAAZ,EAAkB8gQ,UAAU,CAACS,UAAX,CAAsB,IAAtB;AAClB,uBAAUpiG,MAAV,EAAkB2hG,UAAU,CAACpgH,MAAX,CAAkBy1G,eAAlB,CAAlB;AACAmL,EAAAA,SAAS,CAACnL,gBAAan5R,MAAb,EAAD,CAAT;AACA,MAAIgjC,IAAI,IAAI,IAAZ,EAAkB8gQ,UAAU,CAACS,UAAX,CAAsBvhQ,IAAtB;AAClB,SAAO8gQ,UAAP;AACD;;AAEM,SAASU,SAAT,CAAmBV,UAAnB,EAA+B3vF,MAA/B,EAAuChS,MAAvC,EAA+C;AACpD,SAAO32C,GAAG,CAACs4I,UAAD,EAAa,UAASj7R,CAAT,EAAY;AACjC,QAAIu+C,CAAC,GAAG+sJ,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,IAAeA,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CAAvB;AAAA,QACI9sJ,CAAC,GAAG8sJ,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,IAAeA,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CADvB;AAAA,QAEI/7L,CAAC,GAAGvX,IAAI,CAACG,GAAL,CAASomD,CAAC,IAAIv+C,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAV,EAAkCw+C,CAAC,IAAIx+C,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAnC,CAFR;AAAA,QAGI5H,CAAC,GAAG,CAACkzM,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CAAD,GAAgB,CAAC/sJ,CAAC,GAAGhvC,CAAC,IAAIvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAN,IAAgC,CAHxD;AAAA,QAII2W,CAAC,GAAG,CAAC20L,MAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CAAD,GAAgB,CAAC9sJ,CAAC,GAAGjvC,CAAC,IAAIvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAN,IAAgC,CAJxD;AAKAi7R,IAAAA,UAAU,CAACnzR,KAAX,CAAiB,MAAMyH,CAAvB,EAA0BmjM,SAA1B,CAAoC,CAACt6M,CAAD,EAAIue,CAAJ,CAApC;AACD,GAPS,EAOP2iL,MAPO,CAAV;AAQD;;AAEM,SAASsiG,OAAT,CAAiBX,UAAjB,EAA6BvhS,IAA7B,EAAmC4/L,MAAnC,EAA2C;AAChD,SAAOqiG,SAAS,CAACV,UAAD,EAAa,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAASvhS,IAAT,CAAb,EAA6B4/L,MAA7B,CAAhB;AACD;;AAEM,SAASuiG,QAAT,CAAkBZ,UAAlB,EAA8B9gS,KAA9B,EAAqCm/L,MAArC,EAA6C;AAClD,SAAO32C,GAAG,CAACs4I,UAAD,EAAa,UAASj7R,CAAT,EAAY;AACjC,QAAIu+C,CAAC,GAAG,CAACpkD,KAAT;AAAA,QACIoV,CAAC,GAAGgvC,CAAC,IAAIv+C,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CADT;AAAA,QAEI5H,CAAC,GAAG,CAACmmD,CAAC,GAAGhvC,CAAC,IAAIvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAN,IAAgC,CAFxC;AAAA,QAGI2W,CAAC,GAAG,CAACpH,CAAD,GAAKvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAHb;AAIAi7R,IAAAA,UAAU,CAACnzR,KAAX,CAAiB,MAAMyH,CAAvB,EAA0BmjM,SAA1B,CAAoC,CAACt6M,CAAD,EAAIue,CAAJ,CAApC;AACD,GANS,EAMP2iL,MANO,CAAV;AAOD;;AAEM,SAASwiG,SAAT,CAAmBb,UAAnB,EAA+B/yQ,MAA/B,EAAuCoxK,MAAvC,EAA+C;AACpD,SAAO32C,GAAG,CAACs4I,UAAD,EAAa,UAASj7R,CAAT,EAAY;AACjC,QAAIw+C,CAAC,GAAG,CAACt2B,MAAT;AAAA,QACI3Y,CAAC,GAAGivC,CAAC,IAAIx+C,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CADT;AAAA,QAEI5H,CAAC,GAAG,CAACmX,CAAD,GAAKvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAFb;AAAA,QAGI2W,CAAC,GAAG,CAAC6nC,CAAC,GAAGjvC,CAAC,IAAIvP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAd,CAAN,IAAgC,CAHxC;AAIAi7R,IAAAA,UAAU,CAACnzR,KAAX,CAAiB,MAAMyH,CAAvB,EAA0BmjM,SAA1B,CAAoC,CAACt6M,CAAD,EAAIue,CAAJ,CAApC;AACD,GANS,EAMP2iL,MANO,CAAV;AAOD;;;;;;;;;AC9CD;;AACA;;AACA;;AAEA,IAAIyiG,QAAQ,GAAG,EAAf;AAAA,IAAmB;AACfC,cAAc,GAAG,eAAI,KAAK/yC,aAAT,CADrB,EACwC;;AAEzB,kBAASnd,OAAT,EAAkBmwD,MAAlB,EAA0B;AACvC,SAAO,CAACA,MAAD,GAAUC,QAAQ,CAACpwD,OAAD,EAAUmwD,MAAV,CAAlB,GAAsCE,YAAY,CAACrwD,OAAD,CAAzD;AACD;;AAED,SAASqwD,YAAT,CAAsBrwD,OAAtB,EAA+B;AAC7B,SAAO,4BAAY;AACjBt4B,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,MAAAA,CAAC,GAAG0zO,OAAO,CAAC1zO,CAAD,EAAIue,CAAJ,CAAX;AACA,WAAKkkK,MAAL,CAAY24B,KAAZ,CAAkBp7M,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB;AACD;AAJgB,GAAZ,CAAP;AAMD;;AAED,SAAS8jS,QAAT,CAAkBpwD,OAAlB,EAA2BmwD,MAA3B,EAAmC;AAEjC,WAASG,cAAT,CAAwB9pF,EAAxB,EAA4BC,EAA5B,EAAgCk8E,OAAhC,EAAyCvtD,EAAzC,EAA6C4E,EAA7C,EAAiD/G,EAAjD,EAAqDr6H,EAArD,EAAyDD,EAAzD,EAA6DyrL,OAA7D,EAAsE/uD,EAAtE,EAA0E4E,EAA1E,EAA8Ez6L,EAA9E,EAAkF5lC,KAAlF,EAAyFm1K,MAAzF,EAAiG;AAC/F,QAAI98J,EAAE,GAAG2mF,EAAE,GAAG4tG,EAAd;AAAA,QACIv7L,EAAE,GAAG0tF,EAAE,GAAG8tG,EADd;AAAA,QAEIl3I,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAFxB;;AAGA,QAAIskD,EAAE,GAAG,IAAI4gO,MAAT,IAAmBv2R,KAAK,EAA5B,EAAgC;AAC9B,UAAIvM,CAAC,GAAG+nO,EAAE,GAAGC,EAAb;AAAA,UACInhO,CAAC,GAAG8lO,EAAE,GAAGC,EADb;AAAA,UAEIrnO,CAAC,GAAGqgO,EAAE,GAAGzzL,EAFb;AAAA,UAGIo+C,CAAC,GAAG,gBAAKvwF,CAAC,GAAGA,CAAJ,GAAQ6G,CAAC,GAAGA,CAAZ,GAAgBtB,CAAC,GAAGA,CAAzB,CAHR;AAAA,UAII29R,IAAI,GAAG,gBAAK39R,CAAC,IAAIgrF,CAAV,CAJX;AAAA,UAKI0mM,OAAO,GAAG,eAAI,eAAI1xR,CAAJ,IAAS,CAAb,IAAkB4wE,aAAlB,IAA6B,eAAIm/M,OAAO,GAAGyB,OAAd,IAAyB5gN,aAAtD,GAAgE,CAACm/M,OAAO,GAAGyB,OAAX,IAAsB,CAAtF,GAA0F,iBAAMlwR,CAAN,EAAS7G,CAAT,CALxG;AAAA,UAMIo9B,CAAC,GAAGu1M,OAAO,CAACskD,OAAD,EAAUiM,IAAV,CANf;AAAA,UAOItrN,EAAE,GAAGx6C,CAAC,CAAC,CAAD,CAPV;AAAA,UAQIouE,EAAE,GAAGpuE,CAAC,CAAC,CAAD,CARV;AAAA,UASI+lQ,GAAG,GAAGvrN,EAAE,GAAGuhI,EATf;AAAA,UAUIiqF,GAAG,GAAG53L,EAAE,GAAG4tG,EAVf;AAAA,UAWIiqF,EAAE,GAAGzlR,EAAE,GAAGulR,GAAL,GAAWv+Q,EAAE,GAAGw+Q,GAXzB;;AAYA,UAAIC,EAAE,GAAGA,EAAL,GAAUnhO,EAAV,GAAe4gO,MAAf,CAAsB;AAAtB,SACG,eAAI,CAACl+Q,EAAE,GAAGu+Q,GAAL,GAAWvlR,EAAE,GAAGwlR,GAAjB,IAAwBlhO,EAAxB,GAA6B,GAAjC,IAAwC,GAD3C,CAC+C;AAD/C,SAEG6lK,EAAE,GAAGC,EAAL,GAAU2E,EAAE,GAAGC,EAAf,GAAoBhH,EAAE,GAAGzzL,EAAzB,GAA8B0wP,cAFrC,EAEqD;AAAE;AACrDI,QAAAA,cAAc,CAAC9pF,EAAD,EAAKC,EAAL,EAASk8E,OAAT,EAAkBvtD,EAAlB,EAAsB4E,EAAtB,EAA0B/G,EAA1B,EAA8BhuJ,EAA9B,EAAkC4zB,EAAlC,EAAsCyrL,OAAtC,EAA+Cj3R,CAAC,IAAIuwF,CAApD,EAAuD1pF,CAAC,IAAI0pF,CAA5D,EAA+DhrF,CAA/D,EAAkEgH,KAAlE,EAAyEm1K,MAAzE,CAAd;AACAA,QAAAA,MAAM,CAAC24B,KAAP,CAAaziI,EAAb,EAAiB4zB,EAAjB;AACAy3L,QAAAA,cAAc,CAACrrN,EAAD,EAAK4zB,EAAL,EAASyrL,OAAT,EAAkBj3R,CAAlB,EAAqB6G,CAArB,EAAwBtB,CAAxB,EAA2BgmG,EAA3B,EAA+BD,EAA/B,EAAmCyrL,OAAnC,EAA4C/uD,EAA5C,EAAgD4E,EAAhD,EAAoDz6L,EAApD,EAAwD5lC,KAAxD,EAA+Dm1K,MAA/D,CAAd;AACD;AACF;AACF;;AACD,SAAO,UAASA,MAAT,EAAiB;AACtB,QAAI0zG,QAAJ,EAAch8C,GAAd,EAAmBC,GAAnB,EAAwBgB,GAAxB,EAA6BipD,GAA7B,EAAkCC,GAAlC,EAAuC;AACnCjO,IAAAA,OADJ,EACan8E,EADb,EACiBC,EADjB,EACqB2uB,EADrB,EACyB4E,EADzB,EAC6B/G,EAD7B,CADsB,CAEW;;AAEjC,QAAI49D,cAAc,GAAG;AACnBnpF,MAAAA,KAAK,EAAEA,KADY;AAEnBmhC,MAAAA,SAAS,EAAEA,SAFQ;AAGnBE,MAAAA,OAAO,EAAEA,OAHU;AAInBs5C,MAAAA,YAAY,EAAE,YAAW;AAAEtzG,QAAAA,MAAM,CAACszG,YAAP;AAAuBwO,QAAAA,cAAc,CAAChoD,SAAf,GAA2B2gD,SAA3B;AAAuC,OAJtE;AAKnBlH,MAAAA,UAAU,EAAE,YAAW;AAAEvzG,QAAAA,MAAM,CAACuzG,UAAP;AAAqBuO,QAAAA,cAAc,CAAChoD,SAAf,GAA2BA,SAA3B;AAAuC;AALlE,KAArB;;AAQA,aAASnhC,KAAT,CAAep7M,CAAf,EAAkBue,CAAlB,EAAqB;AACnBve,MAAAA,CAAC,GAAG0zO,OAAO,CAAC1zO,CAAD,EAAIue,CAAJ,CAAX;AACAkkK,MAAAA,MAAM,CAAC24B,KAAP,CAAap7M,CAAC,CAAC,CAAD,CAAd,EAAmBA,CAAC,CAAC,CAAD,CAApB;AACD;;AAED,aAASu8O,SAAT,GAAqB;AACnBriC,MAAAA,EAAE,GAAG9tI,GAAL;AACAm4N,MAAAA,cAAc,CAACnpF,KAAf,GAAuBq9E,SAAvB;AACAh2G,MAAAA,MAAM,CAAC85D,SAAP;AACD;;AAED,aAASk8C,SAAT,CAAmB3B,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9B,UAAIzwR,CAAC,GAAG,0BAAU,CAACwwR,MAAD,EAASC,GAAT,CAAV,CAAR;AAAA,UAAkC54P,CAAC,GAAGu1M,OAAO,CAACojD,MAAD,EAASC,GAAT,CAA7C;AACAiN,MAAAA,cAAc,CAAC9pF,EAAD,EAAKC,EAAL,EAASk8E,OAAT,EAAkBvtD,EAAlB,EAAsB4E,EAAtB,EAA0B/G,EAA1B,EAA8BzsB,EAAE,GAAG/7K,CAAC,CAAC,CAAD,CAApC,EAAyCg8K,EAAE,GAAGh8K,CAAC,CAAC,CAAD,CAA/C,EAAoDk4P,OAAO,GAAGS,MAA9D,EAAsEhuD,EAAE,GAAGxiO,CAAC,CAAC,CAAD,CAA5E,EAAiFonO,EAAE,GAAGpnO,CAAC,CAAC,CAAD,CAAvF,EAA4FqgO,EAAE,GAAGrgO,CAAC,CAAC,CAAD,CAAlG,EAAuGq9R,QAAvG,EAAiHlhH,MAAjH,CAAd;AACAA,MAAAA,MAAM,CAAC24B,KAAP,CAAalB,EAAb,EAAiBC,EAAjB;AACD;;AAED,aAASsiC,OAAT,GAAmB;AACjB8nD,MAAAA,cAAc,CAACnpF,KAAf,GAAuBA,KAAvB;AACA34B,MAAAA,MAAM,CAACg6D,OAAP;AACD;;AAED,aAASygD,SAAT,GAAqB;AACnB3gD,MAAAA,SAAS;AACTgoD,MAAAA,cAAc,CAACnpF,KAAf,GAAuBopF,SAAvB;AACAD,MAAAA,cAAc,CAAC9nD,OAAf,GAAyB0gD,OAAzB;AACD;;AAED,aAASqH,SAAT,CAAmB1N,MAAnB,EAA2BC,GAA3B,EAAgC;AAC9B0B,MAAAA,SAAS,CAACtC,QAAQ,GAAGW,MAAZ,EAAoBC,GAApB,CAAT,EAAmC58C,GAAG,GAAGjgC,EAAzC,EAA6CkgC,GAAG,GAAGjgC,EAAnD,EAAuDihC,GAAG,GAAGtS,EAA7D,EAAiEu7D,GAAG,GAAG32D,EAAvE,EAA2E42D,GAAG,GAAG39D,EAAjF;AACA49D,MAAAA,cAAc,CAACnpF,KAAf,GAAuBq9E,SAAvB;AACD;;AAED,aAAS0E,OAAT,GAAmB;AACjB6G,MAAAA,cAAc,CAAC9pF,EAAD,EAAKC,EAAL,EAASk8E,OAAT,EAAkBvtD,EAAlB,EAAsB4E,EAAtB,EAA0B/G,EAA1B,EAA8BwT,GAA9B,EAAmCC,GAAnC,EAAwC+7C,QAAxC,EAAkD/6C,GAAlD,EAAuDipD,GAAvD,EAA4DC,GAA5D,EAAiEX,QAAjE,EAA2ElhH,MAA3E,CAAd;AACA8hH,MAAAA,cAAc,CAAC9nD,OAAf,GAAyBA,OAAzB;AACAA,MAAAA,OAAO;AACR;;AAED,WAAO8nD,cAAP;AACD,GApDD;AAqDD;;;;;;;;;;ACrGD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIE,gBAAgB,GAAG,4BAAY;AACjCrpF,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,SAAKkkK,MAAL,CAAY24B,KAAZ,CAAkBp7M,CAAC,GAAG6wP,aAAtB,EAA+BtyO,CAAC,GAAGsyO,aAAnC;AACD;AAHgC,CAAZ,CAAvB;;AAMA,SAAS6zC,eAAT,CAAyBtwC,MAAzB,EAAiC;AAC/B,SAAO,4BAAY;AACjBh5C,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,UAAI1W,CAAC,GAAGusP,MAAM,CAACp0P,CAAD,EAAIue,CAAJ,CAAd;AACA,aAAO,KAAKkkK,MAAL,CAAY24B,KAAZ,CAAkBvzM,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAP;AACD;AAJgB,GAAZ,CAAP;AAMD;;AAED,SAAS88R,cAAT,CAAwBxtR,CAAxB,EAA2BwO,EAA3B,EAA+BhH,EAA/B,EAAmC82P,EAAnC,EAAuCC,EAAvC,EAA2C;AACzC,WAAS5yF,SAAT,CAAmB9iL,CAAnB,EAAsBue,CAAtB,EAAyB;AACvBve,IAAAA,CAAC,IAAIy1Q,EAAL;AAASl3P,IAAAA,CAAC,IAAIm3P,EAAL;AACT,WAAO,CAAC/vP,EAAE,GAAGxO,CAAC,GAAGnX,CAAV,EAAa2e,EAAE,GAAGxH,CAAC,GAAGoH,CAAtB,CAAP;AACD;;AACDukK,EAAAA,SAAS,CAACy0E,MAAV,GAAmB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAChC,WAAO,CAAC,CAACve,CAAC,GAAG2lB,EAAL,IAAWxO,CAAX,GAAes+P,EAAhB,EAAoB,CAAC92P,EAAE,GAAGJ,CAAN,IAAWpH,CAAX,GAAeu+P,EAAnC,CAAP;AACD,GAFD;;AAGA,SAAO5yF,SAAP;AACD;;AAED,SAAS8hH,oBAAT,CAA8BztR,CAA9B,EAAiCwO,EAAjC,EAAqChH,EAArC,EAAyC82P,EAAzC,EAA6CC,EAA7C,EAAiDviQ,KAAjD,EAAwD;AACtD,MAAI,CAACA,KAAL,EAAY,OAAOwxR,cAAc,CAACxtR,CAAD,EAAIwO,EAAJ,EAAQhH,EAAR,EAAY82P,EAAZ,EAAgBC,EAAhB,CAArB;AACZ,MAAImvB,QAAQ,GAAG,eAAI1xR,KAAJ,CAAf;AAAA,MACI2xR,QAAQ,GAAG,eAAI3xR,KAAJ,CADf;AAAA,MAEIpS,CAAC,GAAG8jS,QAAQ,GAAG1tR,CAFnB;AAAA,MAGIvP,CAAC,GAAGk9R,QAAQ,GAAG3tR,CAHnB;AAAA,MAII4tR,EAAE,GAAGF,QAAQ,GAAG1tR,CAJpB;AAAA,MAKI28O,EAAE,GAAGgxC,QAAQ,GAAG3tR,CALpB;AAAA,MAMIq0N,EAAE,GAAG,CAACs5D,QAAQ,GAAGnmR,EAAX,GAAgBkmR,QAAQ,GAAGl/Q,EAA5B,IAAkCxO,CAN3C;AAAA,MAOI6tR,EAAE,GAAG,CAACF,QAAQ,GAAGn/Q,EAAX,GAAgBk/Q,QAAQ,GAAGlmR,EAA5B,IAAkCxH,CAP3C;;AAQA,WAAS2rK,SAAT,CAAmB9iL,CAAnB,EAAsBue,CAAtB,EAAyB;AACvBve,IAAAA,CAAC,IAAIy1Q,EAAL;AAASl3P,IAAAA,CAAC,IAAIm3P,EAAL;AACT,WAAO,CAAC30Q,CAAC,GAAGf,CAAJ,GAAQ4H,CAAC,GAAG2W,CAAZ,GAAgBoH,EAAjB,EAAqBhH,EAAE,GAAG/W,CAAC,GAAG5H,CAAT,GAAae,CAAC,GAAGwd,CAAtC,CAAP;AACD;;AACDukK,EAAAA,SAAS,CAACy0E,MAAV,GAAmB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAChC,WAAO,CAACk3P,EAAE,IAAIsvB,EAAE,GAAG/kS,CAAL,GAAS8zP,EAAE,GAAGv1O,CAAd,GAAkBitN,EAAtB,CAAH,EAA8BkqC,EAAE,IAAIsvB,EAAE,GAAGlxC,EAAE,GAAG9zP,CAAV,GAAc+kS,EAAE,GAAGxmR,CAAvB,CAAhC,CAAP;AACD,GAFD;;AAGA,SAAOukK,SAAP;AACD;;AAEc,SAAS+/G,UAAT,CAAoBnvD,OAApB,EAA6B;AAC1C,SAAOuxD,iBAAiB,CAAC,YAAW;AAAE,WAAOvxD,OAAP;AAAiB,GAA/B,CAAjB,EAAP;AACD;;AAEM,SAASuxD,iBAAT,CAA2BC,SAA3B,EAAsC;AAC3C,MAAIxxD,OAAJ;AAAA,MACIv8N,CAAC,GAAG,GADR;AAAA,MACa;AACTnX,EAAAA,CAAC,GAAG,GAFR;AAAA,MAEaue,CAAC,GAAG,GAFjB;AAAA,MAEsB;AAClBu4Q,EAAAA,MAAM,GAAG,CAHb;AAAA,MAGgBC,GAAG,GAAG,CAHtB;AAAA,MAGyB;AACrB4D,EAAAA,WAAW,GAAG,CAJlB;AAAA,MAIqBC,QAAQ,GAAG,CAJhC;AAAA,MAImCC,UAAU,GAAG,CAJhD;AAAA,MAImDzmC,MAJnD;AAAA,MAI2D;AACvDjhP,EAAAA,KAAK,GAAG,CALZ;AAAA,MAKe;AACXsiQ,EAAAA,EAAE,GAAG,CANT;AAAA,MAMY;AACRC,EAAAA,EAAE,GAAG,CAPT;AAAA,MAOY;AACRxnH,EAAAA,KAAK,GAAG,IARZ;AAAA,MAQkBi3I,OAAO,GAAGC,qBAR5B;AAAA,MAQ8C;AAC1ClrF,EAAAA,EAAE,GAAG,IATT;AAAA,MASeC,EATf;AAAA,MASmB7tG,EATnB;AAAA,MASuBD,EATvB;AAAA,MAS2Bg5L,QAAQ,GAAGvrK,iBATtC;AAAA,MASgD;AAC5C+pK,EAAAA,MAAM,GAAG,GAVb;AAAA,MAUkB;AACdyB,EAAAA,eAXJ;AAAA,MAYIC,gBAZJ;AAAA,MAaIC,sBAbJ;AAAA,MAcI/0G,KAdJ;AAAA,MAeImvG,WAfJ;;AAiBA,WAASiD,UAAT,CAAoBznF,KAApB,EAA2B;AACzB,WAAOoqF,sBAAsB,CAACpqF,KAAK,CAAC,CAAD,CAAL,GAAWy1C,aAAZ,EAAqBz1C,KAAK,CAAC,CAAD,CAAL,GAAWy1C,aAAhC,CAA7B;AACD;;AAED,WAAS0G,MAAT,CAAgBn8C,KAAhB,EAAuB;AACrBA,IAAAA,KAAK,GAAGoqF,sBAAsB,CAACjuC,MAAvB,CAA8Bn8C,KAAK,CAAC,CAAD,CAAnC,EAAwCA,KAAK,CAAC,CAAD,CAA7C,CAAR;AACA,WAAOA,KAAK,IAAI,CAACA,KAAK,CAAC,CAAD,CAAL,GAAW01C,aAAZ,EAAqB11C,KAAK,CAAC,CAAD,CAAL,GAAW01C,aAAhC,CAAhB;AACD;;AAED+xC,EAAAA,UAAU,CAACpgH,MAAX,GAAoB,UAASA,MAAT,EAAiB;AACnC,WAAOgO,KAAK,IAAImvG,WAAW,KAAKn9G,MAAzB,GAAkCgO,KAAlC,GAA0CA,KAAK,GAAGg0G,gBAAgB,CAACC,eAAe,CAACtwC,MAAD,CAAf,CAAwB+wC,OAAO,CAACG,eAAe,CAACD,QAAQ,CAACzF,WAAW,GAAGn9G,MAAf,CAAT,CAAhB,CAA/B,CAAD,CAAzE;AACD,GAFD;;AAIAogH,EAAAA,UAAU,CAACsC,OAAX,GAAqB,UAAS3kR,CAAT,EAAY;AAC/B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBgsS,OAAO,GAAG3kR,CAAV,EAAa0tI,KAAK,GAAGn/B,SAArB,EAAgCxoG,KAAK,EAAzD,IAA+D4+Q,OAAtE;AACD,GAFD;;AAIAtC,EAAAA,UAAU,CAACwC,QAAX,GAAsB,UAAS7kR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBksS,QAAQ,GAAG7kR,CAAX,EAAc05L,EAAE,GAAGC,EAAE,GAAG7tG,EAAE,GAAGD,EAAE,GAAG,IAAlC,EAAwC9lF,KAAK,EAAjE,IAAuE8+Q,QAA9E;AACD,GAFD;;AAIAxC,EAAAA,UAAU,CAAC4C,SAAX,GAAuB,UAASjlR,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBgsS,OAAO,GAAG,CAAC3kR,CAAD,GAAK,qBAAW0tI,KAAK,GAAG1tI,CAAC,GAAGqwO,aAAvB,CAAL,IAAwC3iG,KAAK,GAAG,IAAR,EAAck3I,qBAAtD,CAAV,EAAmF7+Q,KAAK,EAA5G,IAAkH2nI,KAAK,GAAG4iG,aAAjI;AACD,GAFD;;AAIA+xC,EAAAA,UAAU,CAACS,UAAX,GAAwB,UAAS9iR,CAAT,EAAY;AAClC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBksS,QAAQ,GAAG7kR,CAAC,IAAI,IAAL,IAAa05L,EAAE,GAAGC,EAAE,GAAG7tG,EAAE,GAAGD,EAAE,GAAG,IAApB,EAA0BytB,iBAAvC,IAAmD,wBAAcogF,EAAE,GAAG,CAAC15L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApB,EAA6B25L,EAAE,GAAG,CAAC35L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAnC,EAA4C8rF,EAAE,GAAG,CAAC9rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAlD,EAA2D6rF,EAAE,GAAG,CAAC7rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAjE,CAA9D,EAAyI+F,KAAK,EAAlK,IAAwK2zL,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoB,CAAC,CAACA,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAnM;AACD,GAFD;;AAIAw2L,EAAAA,UAAU,CAACnzR,KAAX,GAAmB,UAAS8Q,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBge,CAAC,GAAG,CAACqJ,CAAL,EAAQklR,QAAQ,EAApC,IAA0CvuR,CAAjD;AACD,GAFD;;AAIA0rR,EAAAA,UAAU,CAACvoF,SAAX,GAAuB,UAAS95L,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,CAACwgB,CAAC,CAAC,CAAD,CAAN,EAAWjC,CAAC,GAAG,CAACiC,CAAC,CAAC,CAAD,CAAjB,EAAsBklR,QAAQ,EAAlD,IAAwD,CAAC1lS,CAAD,EAAIue,CAAJ,CAA/D;AACD,GAFD;;AAIAskR,EAAAA,UAAU,CAAC9oI,MAAX,GAAoB,UAASv5I,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB29R,MAAM,GAAGt2Q,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAaqwO,aAAtB,EAA+BkmC,GAAG,GAAGv2Q,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAaqwO,aAAlD,EAA2D60C,QAAQ,EAAvF,IAA6F,CAAC5O,MAAM,GAAGhmC,aAAV,EAAmBimC,GAAG,GAAGjmC,aAAzB,CAApG;AACD,GAFD;;AAIA+xC,EAAAA,UAAU,CAACzuC,MAAX,GAAoB,UAAS5zO,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBwhS,WAAW,GAAGn6Q,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAaqwO,aAA3B,EAAoC+pC,QAAQ,GAAGp6Q,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAaqwO,aAA5D,EAAqEgqC,UAAU,GAAGr6Q,CAAC,CAACrnB,MAAF,GAAW,CAAX,GAAeqnB,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAaqwO,aAA5B,GAAsC,CAAxH,EAA2H60C,QAAQ,EAAvJ,IAA6J,CAAC/K,WAAW,GAAG7pC,aAAf,EAAwB8pC,QAAQ,GAAG9pC,aAAnC,EAA4C+pC,UAAU,GAAG/pC,aAAzD,CAApK;AACD,GAFD;;AAIA+xC,EAAAA,UAAU,CAAC7kD,KAAX,GAAmB,UAASx9N,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBga,KAAK,GAAGqN,CAAC,GAAG,GAAJ,GAAUqwO,aAAlB,EAA2B60C,QAAQ,EAAvD,IAA6DvyR,KAAK,GAAG29O,aAA5E;AACD,GAFD;;AAIA+xC,EAAAA,UAAU,CAAC8C,QAAX,GAAsB,UAASnlR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBs8Q,EAAE,GAAGj1P,CAAC,GAAG,CAAC,CAAJ,GAAQ,CAAd,EAAiBklR,QAAQ,EAA7C,IAAmDjwB,EAAE,GAAG,CAA/D;AACD,GAFD;;AAIAotB,EAAAA,UAAU,CAAC+C,QAAX,GAAsB,UAASplR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu8Q,EAAE,GAAGl1P,CAAC,GAAG,CAAC,CAAJ,GAAQ,CAAd,EAAiBklR,QAAQ,EAA7C,IAAmDhwB,EAAE,GAAG,CAA/D;AACD,GAFD;;AAIAmtB,EAAAA,UAAU,CAAC90M,SAAX,GAAuB,UAASvtE,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmsS,eAAe,GAAG,uBAASC,gBAAT,EAA2B1B,MAAM,GAAGrjR,CAAC,GAAGA,CAAxC,CAAlB,EAA8D+F,KAAK,EAAvF,IAA6F,gBAAKs9Q,MAAL,CAApG;AACD,GAFD;;AAIAhB,EAAAA,UAAU,CAACU,SAAX,GAAuB,UAASrwF,MAAT,EAAiBhS,MAAjB,EAAyB;AAC9C,WAAO,oBAAU2hG,UAAV,EAAsB3vF,MAAtB,EAA8BhS,MAA9B,CAAP;AACD,GAFD;;AAIA2hG,EAAAA,UAAU,CAACW,OAAX,GAAqB,UAASliS,IAAT,EAAe4/L,MAAf,EAAuB;AAC1C,WAAO,kBAAQ2hG,UAAR,EAAoBvhS,IAApB,EAA0B4/L,MAA1B,CAAP;AACD,GAFD;;AAIA2hG,EAAAA,UAAU,CAACY,QAAX,GAAsB,UAAS1hS,KAAT,EAAgBm/L,MAAhB,EAAwB;AAC5C,WAAO,mBAAS2hG,UAAT,EAAqB9gS,KAArB,EAA4Bm/L,MAA5B,CAAP;AACD,GAFD;;AAIA2hG,EAAAA,UAAU,CAACa,SAAX,GAAuB,UAAS5zQ,MAAT,EAAiBoxK,MAAjB,EAAyB;AAC9C,WAAO,oBAAU2hG,UAAV,EAAsB/yQ,MAAtB,EAA8BoxK,MAA9B,CAAP;AACD,GAFD;;AAIA,WAASwkG,QAAT,GAAoB;AAClB,QAAI3rI,MAAM,GAAG6qI,oBAAoB,CAACztR,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAUs+P,EAAV,EAAcC,EAAd,EAAkBviQ,KAAlB,CAApB,CAA6CjZ,KAA7C,CAAmD,IAAnD,EAAyDw5O,OAAO,CAACojD,MAAD,EAASC,GAAT,CAAhE,CAAb;AAAA,QACIj0G,SAAS,GAAG8hH,oBAAoB,CAACztR,CAAD,EAAInX,CAAC,GAAG+5J,MAAM,CAAC,CAAD,CAAd,EAAmBx7I,CAAC,GAAGw7I,MAAM,CAAC,CAAD,CAA7B,EAAkC07G,EAAlC,EAAsCC,EAAtC,EAA0CviQ,KAA1C,CADpC;AAEAihP,IAAAA,MAAM,GAAG,6BAAcumC,WAAd,EAA2BC,QAA3B,EAAqCC,UAArC,CAAT;AACA0K,IAAAA,gBAAgB,GAAG,sBAAQ7xD,OAAR,EAAiB5wD,SAAjB,CAAnB;AACA0iH,IAAAA,sBAAsB,GAAG,sBAAQpxC,MAAR,EAAgBmxC,gBAAhB,CAAzB;AACAD,IAAAA,eAAe,GAAG,uBAASC,gBAAT,EAA2B1B,MAA3B,CAAlB;AACA,WAAOt9Q,KAAK,EAAZ;AACD;;AAED,WAASA,KAAT,GAAiB;AACfkqK,IAAAA,KAAK,GAAGmvG,WAAW,GAAG,IAAtB;AACA,WAAOiD,UAAP;AACD;;AAED,SAAO,YAAW;AAChBnvD,IAAAA,OAAO,GAAGwxD,SAAS,CAAChrS,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,CAAV;AACAipS,IAAAA,UAAU,CAACtrC,MAAX,GAAoB7jB,OAAO,CAAC6jB,MAAR,IAAkBA,MAAtC;AACA,WAAOmuC,QAAQ,EAAf;AACD,GAJD;AAKD;;;;;;;;;AChLD;;AACA;;AAEO,SAASG,eAAT,CAAyBX,SAAzB,EAAoC;AACzC,MAAIrN,IAAI,GAAG,CAAX;AAAA,MACIE,IAAI,GAAGlhD,WAAK,CADhB;AAAA,MAEIvlJ,CAAC,GAAG,8BAAkB4zM,SAAlB,CAFR;AAAA,MAGI/mQ,CAAC,GAAGmzD,CAAC,CAACumM,IAAD,EAAOE,IAAP,CAHT;;AAKA55P,EAAAA,CAAC,CAAC2nQ,SAAF,GAAc,UAAStlR,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACumM,IAAI,GAAGr3Q,CAAC,CAAC,CAAD,CAAD,GAAOqwO,aAAf,EAAwBknC,IAAI,GAAGv3Q,CAAC,CAAC,CAAD,CAAD,GAAOqwO,aAAtC,CAApB,GAAqE,CAACgnC,IAAI,GAAG/mC,aAAR,EAAiBinC,IAAI,GAAGjnC,aAAxB,CAA5E;AACD,GAFD;;AAIA,SAAO3yN,CAAP;AACD;;;;;;;;;ACdD;;AAEO,SAAS4nQ,uBAAT,CAAiClO,IAAjC,EAAuC;AAC5C,MAAIvB,OAAO,GAAG,eAAIuB,IAAJ,CAAd;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,CAACD,MAAM,GAAGR,OAAV,EAAmB,eAAIS,GAAJ,IAAWT,OAA9B,CAAP;AACD;;AAEDgF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,WAAO,CAACve,CAAC,GAAGs2R,OAAL,EAAc,gBAAK/3Q,CAAC,GAAG+3Q,OAAT,CAAd,CAAP;AACD,GAFD;;AAIA,SAAOgF,OAAP;AACD;;;;;;;;;;ACdD;;AACA;;AACA;;AAEO,SAAS0K,iBAAT,CAA2B7rF,EAA3B,EAA+B9tG,EAA/B,EAAmC;AACxC,MAAIs1L,GAAG,GAAG,eAAIxnF,EAAJ,CAAV;AAAA,MAAmBpyM,CAAC,GAAG,CAAC45R,GAAG,GAAG,eAAIt1L,EAAJ,CAAP,IAAkB,CAAzC,CADwC,CAGxC;;AACA,MAAI,eAAItkG,CAAJ,IAASmvE,aAAb,EAAsB,OAAO,mDAAwBijI,EAAxB,CAAP;AAEtB,MAAI7zM,CAAC,GAAG,IAAIq7R,GAAG,IAAI,IAAI55R,CAAJ,GAAQ45R,GAAZ,CAAf;AAAA,MAAiClwF,EAAE,GAAG,gBAAKnrM,CAAL,IAAUyB,CAAhD;;AAEA,WAAS2rO,OAAT,CAAiB1zO,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,QAAI1W,CAAC,GAAG,gBAAKvB,CAAC,GAAG,IAAIyB,CAAJ,GAAQ,eAAIwW,CAAJ,CAAjB,IAA2BxW,CAAnC;AACA,WAAO,CAACF,CAAC,GAAG,eAAI7H,CAAC,IAAI+H,CAAT,CAAL,EAAkB0pM,EAAE,GAAG5pM,CAAC,GAAG,eAAI7H,CAAJ,CAA3B,CAAP;AACD;;AAED0zO,EAAAA,OAAO,CAAC6jB,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI0nR,GAAG,GAAGx0F,EAAE,GAAGlzL,CAAf;AAAA,QACI5S,CAAC,GAAG,iBAAM3L,CAAN,EAAS,eAAIimS,GAAJ,CAAT,IAAqB,gBAAKA,GAAL,CAD7B;AAEA,QAAIA,GAAG,GAAGl+R,CAAN,GAAU,CAAd,EACE4D,CAAC,IAAIkrO,WAAK,gBAAK72O,CAAL,CAAL,GAAe,gBAAKimS,GAAL,CAApB;AACF,WAAO,CAACt6R,CAAC,GAAG5D,CAAL,EAAQ,gBAAK,CAACzB,CAAC,GAAG,CAACtG,CAAC,GAAGA,CAAJ,GAAQimS,GAAG,GAAGA,GAAf,IAAsBl+R,CAAtB,GAA0BA,CAA/B,KAAqC,IAAIA,CAAzC,CAAL,CAAR,CAAP;AACD,GAND;;AAQA,SAAO2rO,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,4BAAgBsyD,iBAAhB,EACFt2R,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,OAAJ,CAFL,CAAP;AAGD;;;;;;;;;AChCD;;;;AAEe,oBAAW;AACxB,SAAO,+BACF+rI,SADE,CACQ,CAAC,IAAD,EAAO,IAAP,CADR,EAEFp2R,KAFE,CAEI,IAFJ,EAGF4qM,SAHE,CAGQ,CAAC,GAAD,EAAM,GAAN,CAHR,EAIF85C,MAJE,CAIK,CAAC,EAAD,EAAK,CAAL,CAJL,EAKFr6F,MALE,CAKK,CAAC,CAAC,GAAF,EAAO,IAAP,CALL,CAAP;AAMD;;;;;;;;;ACTD;;AACA;;AACA;;AACA;;;;AAEA;AACA;AACA,SAASmsI,SAAT,CAAmBC,OAAnB,EAA4B;AAC1B,MAAIp+R,CAAC,GAAGo+R,OAAO,CAAChtS,MAAhB;AACA,SAAO;AACLiiN,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AAAE,UAAI1kB,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAWuhN,KAAX,CAAiBp7M,CAAjB,EAAoBue,CAApB;AAAyB,KADxE;AAELi3Q,IAAAA,MAAM,EAAE,YAAW;AAAE,UAAI37R,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAW27R,MAAX;AAAsB,KAFlE;AAGLj5C,IAAAA,SAAS,EAAE,YAAW;AAAE,UAAI1iP,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAW0iP,SAAX;AAAyB,KAHxE;AAILE,IAAAA,OAAO,EAAE,YAAW;AAAE,UAAI5iP,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAW4iP,OAAX;AAAuB,KAJpE;AAKLs5C,IAAAA,YAAY,EAAE,YAAW;AAAE,UAAIl8R,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAWk8R,YAAX;AAA4B,KAL9E;AAMLC,IAAAA,UAAU,EAAE,YAAW;AAAE,UAAIn8R,CAAC,GAAG,CAAC,CAAT;;AAAY,aAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBo+R,OAAO,CAACtsS,CAAD,CAAP,CAAWm8R,UAAX;AAA0B;AAN1E,GAAP;AAQD,EAED;AACA;AACA;AACA;AACA;;;AACe,oBAAW;AACxB,MAAIvlG,KAAJ;AAAA,MACImvG,WADJ;AAAA,MAEIwG,OAAO,GAAG,sBAFd;AAAA,MAEwBC,YAFxB;AAAA,MAGIC,MAAM,GAAG,+BAAiBlyC,MAAjB,CAAwB,CAAC,GAAD,EAAM,CAAN,CAAxB,EAAkCr6F,MAAlC,CAAyC,CAAC,CAAC,CAAF,EAAK,IAAL,CAAzC,EAAqD+rI,SAArD,CAA+D,CAAC,EAAD,EAAK,EAAL,CAA/D,CAHb;AAAA,MAGuFS,WAHvF;AAAA,MAGoG;AAChGC,EAAAA,MAAM,GAAG,+BAAiBpyC,MAAjB,CAAwB,CAAC,GAAD,EAAM,CAAN,CAAxB,EAAkCr6F,MAAlC,CAAyC,CAAC,CAAC,CAAF,EAAK,IAAL,CAAzC,EAAqD+rI,SAArD,CAA+D,CAAC,CAAD,EAAI,EAAJ,CAA/D,CAJb;AAAA,MAIsFW,WAJtF;AAAA,MAImG;AAC/FrrF,EAAAA,KALJ;AAAA,MAKWsrF,WAAW,GAAG;AAACtrF,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AAAE68L,MAAAA,KAAK,GAAG,CAACp7M,CAAD,EAAIue,CAAJ,CAAR;AAAiB;AAA1C,GALzB;;AAOA,WAASooR,SAAT,CAAmBjsF,WAAnB,EAAgC;AAC9B,QAAI16M,CAAC,GAAG06M,WAAW,CAAC,CAAD,CAAnB;AAAA,QAAwBn8L,CAAC,GAAGm8L,WAAW,CAAC,CAAD,CAAvC;AACA,WAAOU,KAAK,GAAG,IAAR,EACH,CAACirF,YAAY,CAACjrF,KAAb,CAAmBp7M,CAAnB,EAAsBue,CAAtB,GAA0B68L,KAA3B,MACImrF,WAAW,CAACnrF,KAAZ,CAAkBp7M,CAAlB,EAAqBue,CAArB,GAAyB68L,KAD7B,MAEIqrF,WAAW,CAACrrF,KAAZ,CAAkBp7M,CAAlB,EAAqBue,CAArB,GAAyB68L,KAF7B,CADJ;AAID;;AAEDurF,EAAAA,SAAS,CAACpvC,MAAV,GAAmB,UAAS78C,WAAT,EAAsB;AACvC,QAAIvjM,CAAC,GAAGivR,OAAO,CAAC12R,KAAR,EAAR;AAAA,QACInS,CAAC,GAAG6oS,OAAO,CAAC9rF,SAAR,EADR;AAAA,QAEIt6M,CAAC,GAAG,CAAC06M,WAAW,CAAC,CAAD,CAAX,GAAiBn9M,CAAC,CAAC,CAAD,CAAnB,IAA0B4Z,CAFlC;AAAA,QAGIoH,CAAC,GAAG,CAACm8L,WAAW,CAAC,CAAD,CAAX,GAAiBn9M,CAAC,CAAC,CAAD,CAAnB,IAA0B4Z,CAHlC;AAIA,WAAO,CAACoH,CAAC,IAAI,KAAL,IAAcA,CAAC,GAAG,KAAlB,IAA2Bve,CAAC,IAAI,CAAC,KAAjC,IAA0CA,CAAC,GAAG,CAAC,KAA/C,GAAuDsmS,MAAvD,GACF/nR,CAAC,IAAI,KAAL,IAAcA,CAAC,GAAG,KAAlB,IAA2Bve,CAAC,IAAI,CAAC,KAAjC,IAA0CA,CAAC,GAAG,CAAC,KAA/C,GAAuDwmS,MAAvD,GACAJ,OAFC,EAEQ7uC,MAFR,CAEe78C,WAFf,CAAP;AAGD,GARD;;AAUAisF,EAAAA,SAAS,CAAClkH,MAAV,GAAmB,UAASA,MAAT,EAAiB;AAClC,WAAOgO,KAAK,IAAImvG,WAAW,KAAKn9G,MAAzB,GAAkCgO,KAAlC,GAA0CA,KAAK,GAAGy1G,SAAS,CAAC,CAACE,OAAO,CAAC3jH,MAAR,CAAem9G,WAAW,GAAGn9G,MAA7B,CAAD,EAAuC6jH,MAAM,CAAC7jH,MAAP,CAAcA,MAAd,CAAvC,EAA8D+jH,MAAM,CAAC/jH,MAAP,CAAcA,MAAd,CAA9D,CAAD,CAAlE;AACD,GAFD;;AAIAkkH,EAAAA,SAAS,CAAC54M,SAAV,GAAsB,UAASvtE,CAAT,EAAY;AAChC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOitS,OAAO,CAACr4M,SAAR,EAAP;AACvBq4M,IAAAA,OAAO,CAACr4M,SAAR,CAAkBvtE,CAAlB,GAAsB8lR,MAAM,CAACv4M,SAAP,CAAiBvtE,CAAjB,CAAtB,EAA2CgmR,MAAM,CAACz4M,SAAP,CAAiBvtE,CAAjB,CAA3C;AACA,WAAO+F,KAAK,EAAZ;AACD,GAJD;;AAMAogR,EAAAA,SAAS,CAACj3R,KAAV,GAAkB,UAAS8Q,CAAT,EAAY;AAC5B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOitS,OAAO,CAAC12R,KAAR,EAAP;AACvB02R,IAAAA,OAAO,CAAC12R,KAAR,CAAc8Q,CAAd,GAAkB8lR,MAAM,CAAC52R,KAAP,CAAa8Q,CAAC,GAAG,IAAjB,CAAlB,EAA0CgmR,MAAM,CAAC92R,KAAP,CAAa8Q,CAAb,CAA1C;AACA,WAAOmmR,SAAS,CAACrsF,SAAV,CAAoB8rF,OAAO,CAAC9rF,SAAR,EAApB,CAAP;AACD,GAJD;;AAMAqsF,EAAAA,SAAS,CAACrsF,SAAV,GAAsB,UAAS95L,CAAT,EAAY;AAChC,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOitS,OAAO,CAAC9rF,SAAR,EAAP;AACvB,QAAInjM,CAAC,GAAGivR,OAAO,CAAC12R,KAAR,EAAR;AAAA,QAAyB1P,CAAC,GAAG,CAACwgB,CAAC,CAAC,CAAD,CAA/B;AAAA,QAAoCjC,CAAC,GAAG,CAACiC,CAAC,CAAC,CAAD,CAA1C;AAEA6lR,IAAAA,YAAY,GAAGD,OAAO,CACjB9rF,SADU,CACA95L,CADA,EAEV8iR,UAFU,CAEC,CAAC,CAACtjS,CAAC,GAAG,QAAQmX,CAAb,EAAgBoH,CAAC,GAAG,QAAQpH,CAA5B,CAAD,EAAiC,CAACnX,CAAC,GAAG,QAAQmX,CAAb,EAAgBoH,CAAC,GAAG,QAAQpH,CAA5B,CAAjC,CAFD,EAGVsrK,MAHU,CAGHikH,WAHG,CAAf;AAKAH,IAAAA,WAAW,GAAGD,MAAM,CACfhsF,SADS,CACC,CAACt6M,CAAC,GAAG,QAAQmX,CAAb,EAAgBoH,CAAC,GAAG,QAAQpH,CAA5B,CADD,EAETmsR,UAFS,CAEE,CAAC,CAACtjS,CAAC,GAAG,QAAQmX,CAAZ,GAAgB+/D,aAAjB,EAA0B34D,CAAC,GAAG,QAAQpH,CAAZ,GAAgB+/D,aAA1C,CAAD,EAAqD,CAACl3E,CAAC,GAAG,QAAQmX,CAAZ,GAAgB+/D,aAAjB,EAA0B34D,CAAC,GAAG,QAAQpH,CAAZ,GAAgB+/D,aAA1C,CAArD,CAFF,EAGTurG,MAHS,CAGFikH,WAHE,CAAd;AAKAD,IAAAA,WAAW,GAAGD,MAAM,CACflsF,SADS,CACC,CAACt6M,CAAC,GAAG,QAAQmX,CAAb,EAAgBoH,CAAC,GAAG,QAAQpH,CAA5B,CADD,EAETmsR,UAFS,CAEE,CAAC,CAACtjS,CAAC,GAAG,QAAQmX,CAAZ,GAAgB+/D,aAAjB,EAA0B34D,CAAC,GAAG,QAAQpH,CAAZ,GAAgB+/D,aAA1C,CAAD,EAAqD,CAACl3E,CAAC,GAAG,QAAQmX,CAAZ,GAAgB+/D,aAAjB,EAA0B34D,CAAC,GAAG,QAAQpH,CAAZ,GAAgB+/D,aAA1C,CAArD,CAFF,EAGTurG,MAHS,CAGFikH,WAHE,CAAd;AAKA,WAAOngR,KAAK,EAAZ;AACD,GApBD;;AAsBAogR,EAAAA,SAAS,CAACpD,SAAV,GAAsB,UAASrwF,MAAT,EAAiBhS,MAAjB,EAAyB;AAC7C,WAAO,oBAAUylG,SAAV,EAAqBzzF,MAArB,EAA6BhS,MAA7B,CAAP;AACD,GAFD;;AAIAylG,EAAAA,SAAS,CAACnD,OAAV,GAAoB,UAASliS,IAAT,EAAe4/L,MAAf,EAAuB;AACzC,WAAO,kBAAQylG,SAAR,EAAmBrlS,IAAnB,EAAyB4/L,MAAzB,CAAP;AACD,GAFD;;AAIAylG,EAAAA,SAAS,CAAClD,QAAV,GAAqB,UAAS1hS,KAAT,EAAgBm/L,MAAhB,EAAwB;AAC3C,WAAO,mBAASylG,SAAT,EAAoB5kS,KAApB,EAA2Bm/L,MAA3B,CAAP;AACD,GAFD;;AAIAylG,EAAAA,SAAS,CAACjD,SAAV,GAAsB,UAAS5zQ,MAAT,EAAiBoxK,MAAjB,EAAyB;AAC7C,WAAO,oBAAUylG,SAAV,EAAqB72Q,MAArB,EAA6BoxK,MAA7B,CAAP;AACD,GAFD;;AAIA,WAAS36K,KAAT,GAAiB;AACfkqK,IAAAA,KAAK,GAAGmvG,WAAW,GAAG,IAAtB;AACA,WAAO+G,SAAP;AACD;;AAED,SAAOA,SAAS,CAACj3R,KAAV,CAAgB,IAAhB,CAAP;AACD;;;;;;;;;;AC9GD;;AAEO,SAASk3R,YAAT,CAAsBl3R,KAAtB,EAA6B;AAClC,SAAO,UAAS1P,CAAT,EAAYue,CAAZ,EAAe;AACpB,QAAIu8N,EAAE,GAAG,eAAI96O,CAAJ,CAAT;AAAA,QACI+6O,EAAE,GAAG,eAAIx8N,CAAJ,CADT;AAAA,QAEIpH,CAAC,GAAGzH,KAAK,CAACorO,EAAE,GAAGC,EAAN,CAFb;AAGI,QAAI5jO,CAAC,KAAKxV,QAAV,EAAoB,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;AACxB,WAAO,CACLwV,CAAC,GAAG4jO,EAAJ,GAAS,eAAI/6O,CAAJ,CADJ,EAELmX,CAAC,GAAG,eAAIoH,CAAJ,CAFC,CAAP;AAID,GATD;AAUD;;AAEM,SAASsoR,eAAT,CAAyB7oD,KAAzB,EAAgC;AACrC,SAAO,UAASh+O,CAAT,EAAYue,CAAZ,EAAe;AACpB,QAAI+wD,CAAC,GAAG,gBAAKtvE,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAR;AAAA,QACIjY,CAAC,GAAG03O,KAAK,CAAC1uK,CAAD,CADb;AAAA,QAEI2iN,EAAE,GAAG,eAAI3rR,CAAJ,CAFT;AAAA,QAGIwgS,EAAE,GAAG,eAAIxgS,CAAJ,CAHT;AAIA,WAAO,CACL,iBAAMtG,CAAC,GAAGiyR,EAAV,EAAc3iN,CAAC,GAAGw3N,EAAlB,CADK,EAEL,gBAAKx3N,CAAC,IAAI/wD,CAAC,GAAG0zQ,EAAJ,GAAS3iN,CAAnB,CAFK,CAAP;AAID,GATD;AAUD;;;;;;;;;;AC1BD;;AACA;;AACA;;;;AAEO,IAAIy3N,qBAAqB,GAAG,6BAAa,UAASC,IAAT,EAAe;AAC7D,SAAO,gBAAK,KAAK,IAAIA,IAAT,CAAL,CAAP;AACD,CAFkC,CAA5B;;AAIPD,qBAAqB,CAACxvC,MAAtB,GAA+B,gCAAgB,UAASjoL,CAAT,EAAY;AACzD,SAAO,IAAI,gBAAKA,CAAC,GAAG,CAAT,CAAX;AACD,CAF8B,CAA/B;;AAIe,oBAAW;AACxB,SAAO,oBAAWy3N,qBAAX,EACFr3R,KADE,CACI,MADJ,EAEF+1R,SAFE,CAEQ,MAAM,IAFd,CAAP;AAGD;;;;;;;;;;AChBD;;AACA;;AACA;;;;AAEO,IAAIwB,uBAAuB,GAAG,6BAAa,UAAS3gS,CAAT,EAAY;AAC5D,SAAO,CAACA,CAAC,GAAG,gBAAKA,CAAL,CAAL,KAAiBA,CAAC,GAAG,eAAIA,CAAJ,CAA5B;AACD,CAFoC,CAA9B;;AAIP2gS,uBAAuB,CAAC1vC,MAAxB,GAAiC,gCAAgB,UAASjoL,CAAT,EAAY;AAC3D,SAAOA,CAAP;AACD,CAFgC,CAAjC;;AAIe,oBAAW;AACxB,SAAO,oBAAW23N,uBAAX,EACFv3R,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,MAAM,IAFd,CAAP;AAGD;;;;;;;;;;;AChBD;;AACA;;AACA;;;;AAEO,SAASyB,WAAT,CAAqBpQ,MAArB,EAA6BC,GAA7B,EAAkC;AACvC,SAAO,CAACD,MAAD,EAAS,eAAI,eAAI,CAACn+C,eAASo+C,GAAV,IAAiB,CAArB,CAAJ,CAAT,CAAP;AACD;;AAEDmQ,WAAW,CAAC3vC,MAAZ,GAAqB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAClC,SAAO,CAACve,CAAD,EAAI,IAAI,gBAAK,eAAIue,CAAJ,CAAL,CAAJ,GAAmBo6N,YAAvB,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,SAAOwuD,kBAAkB,CAACD,WAAD,CAAlB,CACFx3R,KADE,CACI,MAAMonO,SADV,CAAP;AAED;;AAEM,SAASqwD,kBAAT,CAA4BzzD,OAA5B,EAAqC;AAC1C,MAAIpiJ,CAAC,GAAG,oBAAWoiJ,OAAX,CAAR;AAAA,MACI35E,MAAM,GAAGzoE,CAAC,CAACyoE,MADf;AAAA,MAEIrqJ,KAAK,GAAG4hF,CAAC,CAAC5hF,KAFd;AAAA,MAGI4qM,SAAS,GAAGhpH,CAAC,CAACgpH,SAHlB;AAAA,MAIIgpF,UAAU,GAAGhyM,CAAC,CAACgyM,UAJnB;AAAA,MAKIppF,EAAE,GAAG,IALT;AAAA,MAKeC,EALf;AAAA,MAKmB7tG,EALnB;AAAA,MAKuBD,EALvB,CAD0C,CAMf;;AAE3B/a,EAAAA,CAAC,CAAC5hF,KAAF,GAAU,UAAS8Q,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBuW,KAAK,CAAC8Q,CAAD,CAAL,EAAU4mR,MAAM,EAApC,IAA0C13R,KAAK,EAAtD;AACD,GAFD;;AAIA4hF,EAAAA,CAAC,CAACgpH,SAAF,GAAc,UAAS95L,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmhN,SAAS,CAAC95L,CAAD,CAAT,EAAc4mR,MAAM,EAAxC,IAA8C9sF,SAAS,EAA9D;AACD,GAFD;;AAIAhpH,EAAAA,CAAC,CAACyoE,MAAF,GAAW,UAASv5I,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4gK,MAAM,CAACv5I,CAAD,CAAN,EAAW4mR,MAAM,EAArC,IAA2CrtI,MAAM,EAAxD;AACD,GAFD;;AAIAzoE,EAAAA,CAAC,CAACgyM,UAAF,GAAe,UAAS9iR,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAqBqnB,CAAC,IAAI,IAAL,GAAY05L,EAAE,GAAGC,EAAE,GAAG7tG,EAAE,GAAGD,EAAE,GAAG,IAAhC,IAAwC6tG,EAAE,GAAG,CAAC15L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAN,EAAe25L,EAAE,GAAG,CAAC35L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAArB,EAA8B8rF,EAAE,GAAG,CAAC9rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApC,EAA6C6rF,EAAE,GAAG,CAAC7rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAA3F,CAAD,EAAuG4mR,MAAM,EAAjI,IAAuIltF,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoB,CAAC,CAACA,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAlK;AACD,GAFD;;AAIA,WAAS+6L,MAAT,GAAkB;AAChB,QAAIjwR,CAAC,GAAG0/N,WAAKnnO,KAAK,EAAlB;AAAA,QACInS,CAAC,GAAG+zF,CAAC,CAAC,uBAASA,CAAC,CAAC8iK,MAAF,EAAT,EAAqBmD,MAArB,CAA4B,CAAC,CAAD,EAAI,CAAJ,CAA5B,CAAD,CADT;AAEA,WAAO+rC,UAAU,CAACppF,EAAE,IAAI,IAAN,GACZ,CAAC,CAAC38M,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAR,EAAW5Z,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAlB,CAAD,EAAuB,CAAC5Z,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAR,EAAW5Z,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAlB,CAAvB,CADY,GACmCu8N,OAAO,KAAKwzD,WAAZ,GAC/C,CAAC,CAACtnS,IAAI,CAACK,GAAL,CAAS1C,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAhB,EAAmB+iM,EAAnB,CAAD,EAAyBC,EAAzB,CAAD,EAA+B,CAACv6M,IAAI,CAACG,GAAL,CAASxC,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAhB,EAAmBm1F,EAAnB,CAAD,EAAyBD,EAAzB,CAA/B,CAD+C,GAE/C,CAAC,CAAC6tG,EAAD,EAAKt6M,IAAI,CAACK,GAAL,CAAS1C,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAhB,EAAmBgjM,EAAnB,CAAL,CAAD,EAA+B,CAAC7tG,EAAD,EAAK1sG,IAAI,CAACG,GAAL,CAASxC,CAAC,CAAC,CAAD,CAAD,GAAO4Z,CAAhB,EAAmBk1F,EAAnB,CAAL,CAA/B,CAHW,CAAjB;AAID;;AAED,SAAO+6L,MAAM,EAAb;AACD;;;;;;;;;;ACnDD;;AACA;;AACA;;AAEA,SAASC,IAAT,CAAc9oR,CAAd,EAAiB;AACf,SAAO,eAAI,CAACo6N,eAASp6N,CAAV,IAAe,CAAnB,CAAP;AACD;;AAEM,SAAS+oR,iBAAT,CAA2BntF,EAA3B,EAA+B9tG,EAA/B,EAAmC;AACxC,MAAIkuI,GAAG,GAAG,eAAIpgC,EAAJ,CAAV;AAAA,MACIpyM,CAAC,GAAGoyM,EAAE,KAAK9tG,EAAP,GAAY,eAAI8tG,EAAJ,CAAZ,GAAsB,eAAIogC,GAAG,GAAG,eAAIluI,EAAJ,CAAV,IAAqB,eAAIg7L,IAAI,CAACh7L,EAAD,CAAJ,GAAWg7L,IAAI,CAACltF,EAAD,CAAnB,CADnD;AAAA,MAEI30M,CAAC,GAAG+0O,GAAG,GAAG,eAAI8sD,IAAI,CAACltF,EAAD,CAAR,EAAcpyM,CAAd,CAAN,GAAyBA,CAFjC;AAIA,MAAI,CAACA,CAAL,EAAQ,OAAOm/R,qBAAP;;AAER,WAASxzD,OAAT,CAAiB1zO,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,QAAI/Y,CAAC,GAAG,CAAR,EAAW;AAAE,UAAI+Y,CAAC,GAAG,CAACo6N,YAAD,GAAUzhK,aAAlB,EAA2B34D,CAAC,GAAG,CAACo6N,YAAD,GAAUzhK,aAAd;AAAwB,KAAhE,MACK;AAAE,UAAI34D,CAAC,GAAGo6N,eAASzhK,aAAjB,EAA0B34D,CAAC,GAAGo6N,eAASzhK,aAAb;AAAuB;;AACxD,QAAIrvE,CAAC,GAAGrC,CAAC,GAAG,eAAI6hS,IAAI,CAAC9oR,CAAD,CAAR,EAAaxW,CAAb,CAAZ;AACA,WAAO,CAACF,CAAC,GAAG,eAAIE,CAAC,GAAG/H,CAAR,CAAL,EAAiBwF,CAAC,GAAGqC,CAAC,GAAG,eAAIE,CAAC,GAAG/H,CAAR,CAAzB,CAAP;AACD;;AAED0zO,EAAAA,OAAO,CAAC6jB,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIonQ,EAAE,GAAGngR,CAAC,GAAG+Y,CAAb;AAAA,QAAgB1W,CAAC,GAAG,gBAAKE,CAAL,IAAU,gBAAK/H,CAAC,GAAGA,CAAJ,GAAQ2lR,EAAE,GAAGA,EAAlB,CAA9B;AAAA,QACEh6Q,CAAC,GAAG,iBAAM3L,CAAN,EAAS,eAAI2lR,EAAJ,CAAT,IAAoB,gBAAKA,EAAL,CAD1B;AAEA,QAAIA,EAAE,GAAG59Q,CAAL,GAAS,CAAb,EACE4D,CAAC,IAAIkrO,WAAK,gBAAK72O,CAAL,CAAL,GAAe,gBAAK2lR,EAAL,CAApB;AACF,WAAO,CAACh6Q,CAAC,GAAG5D,CAAL,EAAQ,IAAI,gBAAK,eAAIvC,CAAC,GAAGqC,CAAR,EAAW,IAAIE,CAAf,CAAL,CAAJ,GAA8B4wO,YAAtC,CAAP;AACD,GAND;;AAQA,SAAOjF,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,4BAAgB4zD,iBAAhB,EACF53R,KADE,CACI,KADJ,EAEFo2R,SAFE,CAEQ,CAAC,EAAD,EAAK,EAAL,CAFR,CAAP;AAGD;;;;;;;;;;ACrCD;;;;AAEO,SAASyB,kBAAT,CAA4BzQ,MAA5B,EAAoCC,GAApC,EAAyC;AAC9C,SAAO,CAACD,MAAD,EAASC,GAAT,CAAP;AACD;;AAEDwQ,kBAAkB,CAAChwC,MAAnB,GAA4BgwC,kBAA5B;;AAEe,oBAAW;AACxB,SAAO,oBAAWA,kBAAX,EACF73R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACXD;;AACA;;AACA;;AAEO,SAAS83R,mBAAT,CAA6BrtF,EAA7B,EAAiC9tG,EAAjC,EAAqC;AAC1C,MAAIkuI,GAAG,GAAG,eAAIpgC,EAAJ,CAAV;AAAA,MACIpyM,CAAC,GAAGoyM,EAAE,KAAK9tG,EAAP,GAAY,eAAI8tG,EAAJ,CAAZ,GAAsB,CAACogC,GAAG,GAAG,eAAIluI,EAAJ,CAAP,KAAmBA,EAAE,GAAG8tG,EAAxB,CAD9B;AAAA,MAEI7xK,CAAC,GAAGiyM,GAAG,GAAGxyO,CAAN,GAAUoyM,EAFlB;AAIA,MAAI,eAAIpyM,CAAJ,IAASmvE,aAAb,EAAsB,OAAOqwN,mCAAP;;AAEtB,WAAS7zD,OAAT,CAAiB1zO,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,QAAIyzP,EAAE,GAAG1pO,CAAC,GAAG/pB,CAAb;AAAA,QAAgBkpR,EAAE,GAAG1/R,CAAC,GAAG/H,CAAzB;AACA,WAAO,CAACgyQ,EAAE,GAAG,eAAIy1B,EAAJ,CAAN,EAAen/P,CAAC,GAAG0pO,EAAE,GAAG,eAAIy1B,EAAJ,CAAxB,CAAP;AACD;;AAED/zD,EAAAA,OAAO,CAAC6jB,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIyzP,EAAE,GAAG1pO,CAAC,GAAG/pB,CAAb;AAAA,QACI5S,CAAC,GAAG,iBAAM3L,CAAN,EAAS,eAAIgyQ,EAAJ,CAAT,IAAoB,gBAAKA,EAAL,CAD5B;AAEA,QAAIA,EAAE,GAAGjqQ,CAAL,GAAS,CAAb,EACE4D,CAAC,IAAIkrO,WAAK,gBAAK72O,CAAL,CAAL,GAAe,gBAAKgyQ,EAAL,CAApB;AACF,WAAO,CAACrmQ,CAAC,GAAG5D,CAAL,EAAQugC,CAAC,GAAG,gBAAKvgC,CAAL,IAAU,gBAAK/H,CAAC,GAAGA,CAAJ,GAAQgyQ,EAAE,GAAGA,EAAlB,CAAtB,CAAP;AACD,GAND;;AAQA,SAAOt+B,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,4BAAgB8zD,mBAAhB,EACF93R,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,OAAJ,CAFL,CAAP;AAGD;;;;;;;;;;AC/BD;;AACA;;;;AAEA,IAAI2tI,EAAE,GAAG,QAAT;AAAA,IACIC,EAAE,GAAG,CAAC,QADV;AAAA,IAEIC,EAAE,GAAG,QAFT;AAAA,IAGIC,EAAE,GAAG,QAHT;AAAA,IAII51M,CAAC,GAAG,gBAAK,CAAL,IAAU,CAJlB;AAAA,IAKIy2B,UAAU,GAAG,EALjB;;AAOO,SAASo/K,aAAT,CAAuBhR,MAAvB,EAA+BC,GAA/B,EAAoC;AACzC,MAAIprR,CAAC,GAAG,gBAAKsmF,CAAC,GAAG,eAAI8kM,GAAJ,CAAT,CAAR;AAAA,MAA4BrqI,EAAE,GAAG/gJ,CAAC,GAAGA,CAArC;AAAA,MAAwCo8R,EAAE,GAAGr7I,EAAE,GAAGA,EAAL,GAAUA,EAAvD;AACA,SAAO,CACLoqI,MAAM,GAAG,eAAInrR,CAAJ,CAAT,IAAmBsmF,CAAC,IAAIy1M,EAAE,GAAG,IAAIC,EAAJ,GAASj7I,EAAd,GAAmBq7I,EAAE,IAAI,IAAIH,EAAJ,GAAS,IAAIC,EAAJ,GAASn7I,EAAtB,CAAzB,CAApB,CADK,EAEL/gJ,CAAC,IAAI+7R,EAAE,GAAGC,EAAE,GAAGj7I,EAAV,GAAeq7I,EAAE,IAAIH,EAAE,GAAGC,EAAE,GAAGn7I,EAAd,CAArB,CAFI,CAAP;AAID;;AAEDo7I,aAAa,CAACvwC,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpC,MAAI5S,CAAC,GAAG4S,CAAR;AAAA,MAAWmuI,EAAE,GAAG/gJ,CAAC,GAAGA,CAApB;AAAA,MAAuBo8R,EAAE,GAAGr7I,EAAE,GAAGA,EAAL,GAAUA,EAAtC;;AACA,OAAK,IAAI7yJ,CAAC,GAAG,CAAR,EAAW21F,KAAX,EAAkBm2L,EAAlB,EAAsBqiB,GAA3B,EAAgCnuS,CAAC,GAAG6uH,UAApC,EAAgD,EAAE7uH,CAAlD,EAAqD;AACnD8rR,IAAAA,EAAE,GAAGh6Q,CAAC,IAAI+7R,EAAE,GAAGC,EAAE,GAAGj7I,EAAV,GAAeq7I,EAAE,IAAIH,EAAE,GAAGC,EAAE,GAAGn7I,EAAd,CAArB,CAAD,GAA2CnuI,CAAhD;AACAypR,IAAAA,GAAG,GAAGN,EAAE,GAAG,IAAIC,EAAJ,GAASj7I,EAAd,GAAmBq7I,EAAE,IAAI,IAAIH,EAAJ,GAAS,IAAIC,EAAJ,GAASn7I,EAAtB,CAA3B;AACA/gJ,IAAAA,CAAC,IAAI6jF,KAAK,GAAGm2L,EAAE,GAAGqiB,GAAlB,EAAuBt7I,EAAE,GAAG/gJ,CAAC,GAAGA,CAAhC,EAAmCo8R,EAAE,GAAGr7I,EAAE,GAAGA,EAAL,GAAUA,EAAlD;AACA,QAAI,eAAIl9D,KAAJ,IAAaomK,cAAjB,EAA2B;AAC5B;;AACD,SAAO,CACL3jK,CAAC,GAAGjyF,CAAJ,IAAS0nS,EAAE,GAAG,IAAIC,EAAJ,GAASj7I,EAAd,GAAmBq7I,EAAE,IAAI,IAAIH,EAAJ,GAAS,IAAIC,EAAJ,GAASn7I,EAAtB,CAA9B,IAA2D,eAAI/gJ,CAAJ,CADtD,EAEL,gBAAK,eAAIA,CAAJ,IAASsmF,CAAd,CAFK,CAAP;AAID,CAZD;;AAce,oBAAW;AACxB,SAAO,oBAAW61M,aAAX,EACFp4R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACnCD;;AACA;;AACA;;;;AAEO,SAASu4R,WAAT,CAAqBjoS,CAArB,EAAwBue,CAAxB,EAA2B;AAChC,MAAIw8N,EAAE,GAAG,eAAIx8N,CAAJ,CAAT;AAAA,MAAiBpH,CAAC,GAAG,eAAInX,CAAJ,IAAS+6O,EAA9B;AACA,SAAO,CAACA,EAAE,GAAG,eAAI/6O,CAAJ,CAAL,GAAcmX,CAAf,EAAkB,eAAIoH,CAAJ,IAASpH,CAA3B,CAAP;AACD;;AAED8wR,WAAW,CAAC1wC,MAAZ,GAAqB,gCAAgBvjP,UAAhB,CAArB;;AAEe,oBAAW;AACxB,SAAO,oBAAWi0R,WAAX,EACFv4R,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,EAFR,CAAP;AAGD;;;;;;;;;ACfD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAItuR,CAAC,GAAG,CAAR;AAAA,MAAWujG,EAAE,GAAG,CAAhB;AAAA,MAAmBw0K,EAAE,GAAG,CAAxB;AAAA,MAA2BzZ,EAAE,GAAG,CAAhC;AAAA,MAAmCC,EAAE,GAAG,CAAxC;AAAA,MAA2C;AACvCviQ,EAAAA,KAAK,GAAG,CADZ;AAAA,MACe6rR,EADf;AAAA,MACmBp0B,EADnB;AAAA,MACuB;AACnB1wD,EAAAA,EAAE,GAAG,IAFT;AAAA,MAEeC,EAFf;AAAA,MAEmB7tG,EAFnB;AAAA,MAEuBD,EAFvB;AAAA,MAE2B;AACvB+tG,EAAAA,EAAE,GAAG,CAHT;AAAA,MAGYC,EAAE,GAAG,CAHjB;AAAA,MAIIv3B,SAAS,GAAG,4BAAY;AACtBs4B,IAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,UAAI4f,CAAC,GAAG0kQ,UAAU,CAAC,CAAC7iS,CAAD,EAAIue,CAAJ,CAAD,CAAlB;AACA,WAAKkkK,MAAL,CAAY24B,KAAZ,CAAkBj9K,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB;AACD;AAJqB,GAAZ,CAJhB;AAAA,MAUIknQ,QAAQ,GAAGvrK,iBAVf;AAAA,MAWI22D,KAXJ;AAAA,MAYImvG,WAZJ;;AAcA,WAASr5Q,KAAT,GAAiB;AACf6zL,IAAAA,EAAE,GAAGjjM,CAAC,GAAGs+P,EAAT;AACAp7D,IAAAA,EAAE,GAAGljM,CAAC,GAAGu+P,EAAT;AACAjlF,IAAAA,KAAK,GAAGmvG,WAAW,GAAG,IAAtB;AACA,WAAOiD,UAAP;AACD;;AAED,WAASA,UAAT,CAAqB1kQ,CAArB,EAAwB;AACtB,QAAIn+B,CAAC,GAAGm+B,CAAC,CAAC,CAAD,CAAD,GAAOi8K,EAAf;AAAA,QAAmB77L,CAAC,GAAG4f,CAAC,CAAC,CAAD,CAAD,GAAOk8K,EAA9B;;AACA,QAAIlnM,KAAJ,EAAW;AACT,UAAI5V,CAAC,GAAGghB,CAAC,GAAGygR,EAAJ,GAASh/R,CAAC,GAAG4qQ,EAArB;AACA5qQ,MAAAA,CAAC,GAAGA,CAAC,GAAGg/R,EAAJ,GAASzgR,CAAC,GAAGqsP,EAAjB;AACArsP,MAAAA,CAAC,GAAGhhB,CAAJ;AACD;;AACD,WAAO,CAACyC,CAAC,GAAG06G,EAAL,EAASn8F,CAAC,GAAG2wQ,EAAb,CAAP;AACD;;AACD2T,EAAAA,UAAU,CAACtrC,MAAX,GAAoB,UAASp5N,CAAT,EAAY;AAC9B,QAAIn+B,CAAC,GAAGm+B,CAAC,CAAC,CAAD,CAAD,GAAOu8E,EAAf;AAAA,QAAmBn8F,CAAC,GAAG4f,CAAC,CAAC,CAAD,CAAD,GAAO+wP,EAA9B;;AACA,QAAI/7Q,KAAJ,EAAW;AACT,UAAI5V,CAAC,GAAGghB,CAAC,GAAGygR,EAAJ,GAASh/R,CAAC,GAAG4qQ,EAArB;AACA5qQ,MAAAA,CAAC,GAAGA,CAAC,GAAGg/R,EAAJ,GAASzgR,CAAC,GAAGqsP,EAAjB;AACArsP,MAAAA,CAAC,GAAGhhB,CAAJ;AACD;;AACD,WAAO,CAACyC,CAAC,GAAGo6M,EAAL,EAAS77L,CAAC,GAAG87L,EAAb,CAAP;AACD,GARD;;AASAwoF,EAAAA,UAAU,CAACpgH,MAAX,GAAoB,UAASA,MAAT,EAAiB;AACnC,WAAOgO,KAAK,IAAImvG,WAAW,KAAKn9G,MAAzB,GAAkCgO,KAAlC,GAA0CA,KAAK,GAAG3N,SAAS,CAACuiH,QAAQ,CAACzF,WAAW,GAAGn9G,MAAf,CAAT,CAAlE;AACD,GAFD;;AAGAogH,EAAAA,UAAU,CAACwC,QAAX,GAAsB,UAAS7kR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBksS,QAAQ,GAAG7kR,CAAX,EAAc05L,EAAE,GAAGC,EAAE,GAAG7tG,EAAE,GAAGD,EAAE,GAAG,IAAlC,EAAwC9lF,KAAK,EAAjE,IAAuE8+Q,QAA9E;AACD,GAFD;;AAGAxC,EAAAA,UAAU,CAACS,UAAX,GAAwB,UAAS9iR,CAAT,EAAY;AAClC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBksS,QAAQ,GAAG7kR,CAAC,IAAI,IAAL,IAAa05L,EAAE,GAAGC,EAAE,GAAG7tG,EAAE,GAAGD,EAAE,GAAG,IAApB,EAA0BytB,iBAAvC,IAAmD,wBAAcogF,EAAE,GAAG,CAAC15L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApB,EAA6B25L,EAAE,GAAG,CAAC35L,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAnC,EAA4C8rF,EAAE,GAAG,CAAC9rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAlD,EAA2D6rF,EAAE,GAAG,CAAC7rF,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAjE,CAA9D,EAAyI+F,KAAK,EAAlK,IAAwK2zL,EAAE,IAAI,IAAN,GAAa,IAAb,GAAoB,CAAC,CAACA,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAnM;AACD,GAFD;;AAGAw2L,EAAAA,UAAU,CAACnzR,KAAX,GAAmB,UAAS8Q,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBge,CAAC,GAAG,CAACqJ,CAAL,EAAQ+F,KAAK,EAAjC,IAAuCpP,CAA9C;AACD,GAFD;;AAGA0rR,EAAAA,UAAU,CAACvoF,SAAX,GAAuB,UAAS95L,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBuhH,EAAE,GAAG,CAACl6F,CAAC,CAAC,CAAD,CAAP,EAAY0uQ,EAAE,GAAG,CAAC1uQ,CAAC,CAAC,CAAD,CAAnB,EAAwB+F,KAAK,EAAjD,IAAuD,CAACm0F,EAAD,EAAKw0K,EAAL,CAA9D;AACD,GAFD;;AAGA2T,EAAAA,UAAU,CAAC7kD,KAAX,GAAmB,UAASx9N,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBga,KAAK,GAAGqN,CAAC,GAAG,GAAJ,GAAUqwO,aAAlB,EAA2B+Z,EAAE,GAAG,eAAIz3P,KAAJ,CAAhC,EAA4C6rR,EAAE,GAAG,eAAI7rR,KAAJ,CAAjD,EAA6DoT,KAAK,EAAtF,IAA4FpT,KAAK,GAAG29O,aAA3G;AACD,GAFD;;AAGA+xC,EAAAA,UAAU,CAAC8C,QAAX,GAAsB,UAASnlR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBs8Q,EAAE,GAAGj1P,CAAC,GAAG,CAAC,CAAJ,GAAQ,CAAd,EAAiB+F,KAAK,EAA1C,IAAgDkvP,EAAE,GAAG,CAA5D;AACD,GAFD;;AAGAotB,EAAAA,UAAU,CAAC+C,QAAX,GAAsB,UAASplR,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,IAAoBu8Q,EAAE,GAAGl1P,CAAC,GAAG,CAAC,CAAJ,GAAQ,CAAd,EAAiB+F,KAAK,EAA1C,IAAgDmvP,EAAE,GAAG,CAA5D;AACD,GAFD;;AAGAmtB,EAAAA,UAAU,CAACU,SAAX,GAAuB,UAASrwF,MAAT,EAAiBhS,MAAjB,EAAyB;AAC9C,WAAO,oBAAU2hG,UAAV,EAAsB3vF,MAAtB,EAA8BhS,MAA9B,CAAP;AACD,GAFD;;AAGA2hG,EAAAA,UAAU,CAACW,OAAX,GAAqB,UAASliS,IAAT,EAAe4/L,MAAf,EAAuB;AAC1C,WAAO,kBAAQ2hG,UAAR,EAAoBvhS,IAApB,EAA0B4/L,MAA1B,CAAP;AACD,GAFD;;AAGA2hG,EAAAA,UAAU,CAACY,QAAX,GAAsB,UAAS1hS,KAAT,EAAgBm/L,MAAhB,EAAwB;AAC5C,WAAO,mBAAS2hG,UAAT,EAAqB9gS,KAArB,EAA4Bm/L,MAA5B,CAAP;AACD,GAFD;;AAGA2hG,EAAAA,UAAU,CAACa,SAAX,GAAuB,UAAS5zQ,MAAT,EAAiBoxK,MAAjB,EAAyB;AAC9C,WAAO,oBAAU2hG,UAAV,EAAsB/yQ,MAAtB,EAA8BoxK,MAA9B,CAAP;AACD,GAFD;;AAIA,SAAO2hG,UAAP;AACD;;;;;;;;;;ACpFD;;AACA;;;;AAEO,SAASqF,gBAAT,CAA0BpR,MAA1B,EAAkCC,GAAlC,EAAuC;AAC5C,MAAIkN,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AAAA,MAAsBoR,IAAI,GAAGlE,IAAI,GAAGA,IAApC;AACA,SAAO,CACLnN,MAAM,IAAI,SAAS,WAAWmN,IAApB,GAA2BkE,IAAI,IAAI,CAAC,QAAD,GAAYA,IAAI,IAAI,WAAWlE,IAAX,GAAkB,WAAWkE,IAAjC,CAApB,CAAnC,CADD,EAELpR,GAAG,IAAI,WAAWkN,IAAI,IAAI,WAAWkE,IAAI,IAAI,CAAC,QAAD,GAAY,WAAWlE,IAAvB,GAA8B,WAAWkE,IAA7C,CAAnB,CAAnB,CAFE,CAAP;AAID;;AAEDD,gBAAgB,CAAC3wC,MAAjB,GAA0B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACvC,MAAIw4Q,GAAG,GAAGx4Q,CAAV;AAAA,MAAa1kB,CAAC,GAAG,EAAjB;AAAA,MAAqB21F,KAArB;;AACA,KAAG;AACD,QAAIy0M,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AAAA,QAAsBoR,IAAI,GAAGlE,IAAI,GAAGA,IAApC;AACAlN,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAACunM,GAAG,IAAI,WAAWkN,IAAI,IAAI,WAAWkE,IAAI,IAAI,CAAC,QAAD,GAAY,WAAWlE,IAAvB,GAA8B,WAAWkE,IAA7C,CAAnB,CAAnB,CAAH,GAAgG5pR,CAAjG,KACV,WAAW0lR,IAAI,IAAI,WAAW,CAAX,GAAekE,IAAI,IAAI,CAAC,QAAD,GAAY,CAAZ,GAAgB,WAAW,CAAX,GAAelE,IAA/B,GAAsC,WAAW,EAAX,GAAgBkE,IAA1D,CAAvB,CADL,CAAf;AAED,GAJD,QAIS,eAAI34M,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAJvC;;AAKA,SAAO,CACLmG,CAAC,IAAI,SAAS,CAACikS,IAAI,GAAGlN,GAAG,GAAGA,GAAd,KAAsB,CAAC,QAAD,GAAYkN,IAAI,IAAI,CAAC,QAAD,GAAYA,IAAI,GAAGA,IAAP,GAAcA,IAAd,IAAsB,WAAW,WAAWA,IAA5C,CAAhB,CAAtC,CAAb,CADI,EAELlN,GAFK,CAAP;AAID,CAXD;;AAae,oBAAW;AACxB,SAAO,oBAAWmR,gBAAX,EACFx4R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC3BD;;AACA;;AACA;;;;AAEO,SAAS04R,eAAT,CAAyBpoS,CAAzB,EAA4Bue,CAA5B,EAA+B;AACpC,SAAO,CAAC,eAAIA,CAAJ,IAAS,eAAIve,CAAJ,CAAV,EAAkB,eAAIue,CAAJ,CAAlB,CAAP;AACD;;AAED6pR,eAAe,CAAC7wC,MAAhB,GAAyB,gCAAgBzjP,UAAhB,CAAzB;;AAEe,oBAAW;AACxB,SAAO,oBAAWs0R,eAAX,EACF14R,KADE,CACI,KADJ,EAEF+1R,SAFE,CAEQ,KAAKvuN,aAFb,CAAP;AAGD;;;;;;;;;;ACdD;;AACA;;AACA;;;;AAEO,SAASmxN,gBAAT,CAA0BroS,CAA1B,EAA6Bue,CAA7B,EAAgC;AACrC,MAAIw8N,EAAE,GAAG,eAAIx8N,CAAJ,CAAT;AAAA,MAAiBpH,CAAC,GAAG,IAAI,eAAInX,CAAJ,IAAS+6O,EAAlC;AACA,SAAO,CAACA,EAAE,GAAG,eAAI/6O,CAAJ,CAAL,GAAcmX,CAAf,EAAkB,eAAIoH,CAAJ,IAASpH,CAA3B,CAAP;AACD;;AAEDkxR,gBAAgB,CAAC9wC,MAAjB,GAA0B,gCAAgB,UAASjoL,CAAT,EAAY;AACpD,SAAO,IAAI,gBAAKA,CAAL,CAAX;AACD,CAFyB,CAA1B;;AAIe,oBAAW;AACxB,SAAO,oBAAW+4N,gBAAX,EACF34R,KADE,CACI,GADJ,EAEF+1R,SAFE,CAEQ,GAFR,CAAP;AAGD;;;;;;;;;;ACjBD;;AACA;;AAEO,SAAS6C,qBAAT,CAA+BxR,MAA/B,EAAuCC,GAAvC,EAA4C;AACjD,SAAO,CAAC,eAAI,eAAI,CAACp+C,eAASo+C,GAAV,IAAiB,CAArB,CAAJ,CAAD,EAA+B,CAACD,MAAhC,CAAP;AACD;;AAEDwR,qBAAqB,CAAC/wC,MAAtB,GAA+B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC5C,SAAO,CAAC,CAACA,CAAF,EAAK,IAAI,gBAAK,eAAIve,CAAJ,CAAL,CAAJ,GAAmB24O,YAAxB,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,MAAIrnJ,CAAC,GAAG,kCAAmBg3M,qBAAnB,CAAR;AAAA,MACIvuI,MAAM,GAAGzoE,CAAC,CAACyoE,MADf;AAAA,MAEIq6F,MAAM,GAAG9iK,CAAC,CAAC8iK,MAFf;;AAIA9iK,EAAAA,CAAC,CAACyoE,MAAF,GAAW,UAASv5I,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmB4gK,MAAM,CAAC,CAAC,CAACv5I,CAAC,CAAC,CAAD,CAAH,EAAQA,CAAC,CAAC,CAAD,CAAT,CAAD,CAAzB,IAA4CA,CAAC,GAAGu5I,MAAM,EAAV,EAAc,CAACv5I,CAAC,CAAC,CAAD,CAAF,EAAO,CAACA,CAAC,CAAC,CAAD,CAAT,CAA1D,CAAP;AACD,GAFD;;AAIA8wE,EAAAA,CAAC,CAAC8iK,MAAF,GAAW,UAAS5zO,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBi7P,MAAM,CAAC,CAAC5zO,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAACrnB,MAAF,GAAW,CAAX,GAAeqnB,CAAC,CAAC,CAAD,CAAD,GAAO,EAAtB,GAA2B,EAAxC,CAAD,CAAzB,IAA0EA,CAAC,GAAG4zO,MAAM,EAAV,EAAc,CAAC5zO,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAD,GAAO,EAApB,CAAxF,CAAP;AACD,GAFD;;AAIA,SAAO4zO,MAAM,CAAC,CAAC,CAAD,EAAI,CAAJ,EAAO,EAAP,CAAD,CAAN,CACF1kP,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;ACjCO,IAAImD,GAAG,GAAGjT,IAAI,CAACiT,GAAf;;AACA,IAAImB,IAAI,GAAGpU,IAAI,CAACoU,IAAhB;;AACA,IAAI7D,KAAK,GAAGvQ,IAAI,CAACuQ,KAAjB;;AACA,IAAInO,IAAI,GAAGpC,IAAI,CAACoC,IAAhB;;AACA,IAAI4R,GAAG,GAAGhU,IAAI,CAACgU,GAAf;;AACA,IAAI/R,GAAG,GAAGjC,IAAI,CAACiC,GAAf;;AACA,IAAI8F,KAAK,GAAG/H,IAAI,CAAC+H,KAAjB;;AACA,IAAIkC,GAAG,GAAGjK,IAAI,CAACiK,GAAf;;AACA,IAAI5J,GAAG,GAAGL,IAAI,CAACK,GAAf;;AACA,IAAIF,GAAG,GAAGH,IAAI,CAACG,GAAf;;AACA,IAAIuQ,GAAG,GAAG1Q,IAAI,CAAC0Q,GAAf;;AACA,IAAIpK,KAAK,GAAGtG,IAAI,CAACsG,KAAjB;;;AACA,IAAIoM,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,IAAa,UAAStS,CAAT,EAAY;AAAE,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAhC;AAAoC,CAA1E;;;AACA,IAAI2T,GAAG,GAAG/T,IAAI,CAAC+T,GAAf;;AACA,IAAIE,GAAG,GAAGjU,IAAI,CAACiU,GAAf;;AAEA,IAAIqjE,OAAO,GAAG,IAAd;;AACA,IAAI0+K,QAAQ,GAAG,KAAf;;AACA,IAAI/e,EAAE,GAAGj3O,IAAI,CAACuiC,EAAd;;AACA,IAAIw2M,MAAM,GAAG9B,EAAE,GAAG,CAAlB;;AACA,IAAIm+C,SAAS,GAAGn+C,EAAE,GAAG,CAArB;;AACA,IAAI0xD,OAAO,GAAG3oS,IAAI,CAAC4oS,OAAnB;;AACA,IAAIC,KAAK,GAAGxmS,IAAI,CAAC,CAAD,CAAhB;;AACA,IAAIymS,MAAM,GAAGzmS,IAAI,CAAC40O,EAAD,CAAjB;;AACA,IAAIC,GAAG,GAAGD,EAAE,GAAG,CAAf;;AACA,IAAIia,OAAO,GAAG,MAAMja,EAApB;;AACA,IAAIga,OAAO,GAAGha,EAAE,GAAG,GAAnB;;;AAEA,SAAS8xD,KAAT,CAAe3oS,CAAf,EAAkB;AACvB,SAAOA,CAAC,GAAGA,CAAC,GAAGJ,IAAI,CAAC+T,GAAL,CAAS3T,CAAT,CAAP,GAAqB,CAA7B;AACD;;AAEM,SAAS8T,IAAT,CAAc9T,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQ24O,MAAR,GAAiB34O,CAAC,GAAG,CAAC,CAAL,GAAS,CAAC24O,MAAV,GAAmB/4O,IAAI,CAACkU,IAAL,CAAU9T,CAAV,CAA3C;AACD;;AAEM,SAAS+T,IAAT,CAAc/T,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAC,GAAG,CAAC,CAAL,GAAS62O,EAAT,GAAcj3O,IAAI,CAACmU,IAAL,CAAU/T,CAAV,CAAjC;AACD;;AAEM,SAASiC,IAAT,CAAcjC,CAAd,EAAiB;AACtB,SAAOA,CAAC,GAAG,CAAJ,GAAQJ,IAAI,CAACqC,IAAL,CAAUjC,CAAV,CAAR,GAAuB,CAA9B;AACD;;AAEM,SAAS0B,IAAT,CAAc1B,CAAd,EAAiB;AACtBA,EAAAA,CAAC,GAAG6B,GAAG,CAAC,IAAI7B,CAAL,CAAP;AACA,SAAO,CAACA,CAAC,GAAG,CAAL,KAAWA,CAAC,GAAG,CAAf,CAAP;AACD;;AAEM,SAASiU,IAAT,CAAcjU,CAAd,EAAiB;AACtB,SAAO,CAAC6B,GAAG,CAAC7B,CAAD,CAAH,GAAS6B,GAAG,CAAC,CAAC7B,CAAF,CAAb,IAAqB,CAA5B;AACD;;AAEM,SAASkU,IAAT,CAAclU,CAAd,EAAiB;AACtB,SAAO,CAAC6B,GAAG,CAAC7B,CAAD,CAAH,GAAS6B,GAAG,CAAC,CAAC7B,CAAF,CAAb,IAAqB,CAA5B;AACD;;AAEM,SAAS4oS,MAAT,CAAgB5oS,CAAhB,EAAmB;AACxB,SAAO6J,GAAG,CAAC7J,CAAC,GAAGiC,IAAI,CAACjC,CAAC,GAAGA,CAAJ,GAAQ,CAAT,CAAT,CAAV;AACD;;AAEM,SAAS6oS,MAAT,CAAgB7oS,CAAhB,EAAmB;AACxB,SAAO6J,GAAG,CAAC7J,CAAC,GAAGiC,IAAI,CAACjC,CAAC,GAAGA,CAAJ,GAAQ,CAAT,CAAT,CAAV;AACD;;;;;;;;;;AC/DD;;AACA;;AAEO,SAAS8oS,OAAT,CAAiB5yR,IAAjB,EAAuB;AAC5B,MAAI6yR,SAAS,GAAG,eAAI7yR,IAAI,GAAG,CAAX,CAAhB;AAAA,MACItO,CAAC,GAAG,IAAI,eAAI,eAAIsO,IAAI,GAAG,CAAX,CAAJ,CAAJ,IAA0B6yR,SAAS,GAAGA,SAAtC,CADR;;AAGA,WAASzN,OAAT,CAAiBt7R,CAAjB,EAAoBue,CAApB,EAAuB;AACrB,QAAIyqR,IAAI,GAAG,eAAIhpS,CAAJ,CAAX;AAAA,QACIipS,IAAI,GAAG,eAAI1qR,CAAJ,CADX;AAAA,QAEI2qR,IAAI,GAAG,eAAI3qR,CAAJ,CAFX;AAAA,QAGI4qR,IAAI,GAAGF,IAAI,GAAGD,IAHlB;AAAA,QAII7xR,CAAC,GAAG,EAAE,CAAC,IAAIgyR,IAAJ,GAAW,eAAI,CAAC,IAAIA,IAAL,IAAa,CAAjB,KAAuB,IAAIA,IAA3B,CAAX,GAA8C,CAAC,GAAhD,IAAuDvhS,CAAC,IAAI,IAAIuhS,IAAR,CAA1D,CAJR;AAKA,WAAO,CAAChyR,CAAC,GAAG8xR,IAAJ,GAAW,eAAIjpS,CAAJ,CAAZ,EAAoBmX,CAAC,GAAG+xR,IAAxB,CAAP;AACD;;AAED5N,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI1W,CAAC,GAAG,gBAAK7H,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAR;AAAA,QACI+wD,CAAC,GAAG,CAACp5D,IAAD,GAAQ,CADhB;AAAA,QAEIrc,CAAC,GAAG,EAFR;AAAA,QAEY21F,KAFZ;AAGA,QAAI,CAAC3nF,CAAL,EAAQ,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;;AACR,OAAG;AACD,UAAIuhS,GAAG,GAAG95N,CAAC,GAAG,CAAd;AAAA,UACI+5N,MAAM,GAAG,eAAID,GAAJ,CADb;AAAA,UAEIE,MAAM,GAAG,eAAIF,GAAJ,CAFb;AAAA,UAGIG,MAAM,GAAGD,MAAM,GAAGD,MAHtB;AAAA,UAIIG,QAAQ,GAAG,CAAC,eAAI,eAAIH,MAAJ,CAAJ,CAJhB;AAKA/5N,MAAAA,CAAC,IAAIkgB,KAAK,GAAG,CAAC,IAAI+5M,MAAJ,GAAaC,QAAb,GAAwB5hS,CAAC,GAAG2hS,MAA5B,GAAqC1hS,CAAtC,KAA4C,CAAC2hS,QAAD,IAAaF,MAAM,GAAGA,MAAtB,IAAgC,CAAhC,GAAoC1hS,CAAC,IAAI,IAAIyhS,MAAJ,GAAaA,MAAjB,CAAjF,KAA8GA,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,CAAjI,CAAb;AACD,KAPD,QAOS,eAAI75M,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAPvC;;AAQA,QAAI4vS,IAAI,GAAG,eAAIn6N,CAAJ,CAAX;AACA,WAAO,CAAC,iBAAMtvE,CAAC,GAAGypS,IAAV,EAAgB5hS,CAAC,GAAG,eAAIynE,CAAJ,CAApB,CAAD,EAA8B,gBAAK/wD,CAAC,GAAGkrR,IAAJ,GAAW5hS,CAAhB,CAA9B,CAAP;AACD,GAfD;;AAiBA,SAAOyzR,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIplR,IAAI,GAAGyiO,YAAX;AAAA,MACIrnJ,CAAC,GAAG,iCAAkBw3M,OAAlB,CADR;AAAA,MAEI3qQ,CAAC,GAAGmzD,CAAC,CAACp7E,IAAD,CAFT;;AAIAioB,EAAAA,CAAC,CAACnoB,MAAF,GAAW,UAASwK,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACp7E,IAAI,GAAGsK,CAAC,GAAGqwO,aAAZ,CAApB,GAA2C36O,IAAI,GAAG46O,aAAzD;AACD,GAFD;;AAIA,SAAO3yN,CAAC,CACHzuB,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,GAFR,CAAP;AAGD;;;;;;;;;;AChDD;;AACA;;AAEO,SAASiE,SAAT,CAAmB1pS,CAAnB,EAAsBue,CAAtB,EAAyB;AAC9B,MAAI0qR,IAAI,GAAG,eAAI1qR,CAAJ,CAAX;AAAA,MAAmBorR,MAAM,GAAG,iBAAM,gBAAKV,IAAI,GAAG,eAAIjpS,CAAC,IAAI,CAAT,CAAZ,CAAN,CAA5B;AACA,SAAO,CAAC,IAAIipS,IAAJ,GAAW,eAAIjpS,CAAJ,CAAX,GAAoB2pS,MAArB,EAA6B,eAAIprR,CAAJ,IAASorR,MAAtC,CAAP;AACD,EAED;AACA;;;AACAD,SAAS,CAACnyC,MAAV,GAAmB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAChC,MAAIve,CAAC,GAAGA,CAAJ,GAAQ,IAAIue,CAAJ,GAAQA,CAAhB,GAAoBs4N,WAAKA,QAAL,GAAU3/J,aAAlC,EAA2C;AAC3C,MAAIo1B,EAAE,GAAGtsG,CAAT;AAAA,MAAYqsG,EAAE,GAAG9tF,CAAjB;AAAA,MAAoB1kB,CAAC,GAAG,EAAxB;;AACA,KAAG;AACD,QAAI+vS,IAAI,GAAG,eAAIt9L,EAAJ,CAAX;AAAA,QACIu9L,MAAM,GAAG,eAAIv9L,EAAE,GAAG,CAAT,CADb;AAAA,QAEIw9L,MAAM,GAAG,eAAIx9L,EAAE,GAAG,CAAT,CAFb;AAAA,QAGI48L,IAAI,GAAG,eAAI78L,EAAJ,CAHX;AAAA,QAII48L,IAAI,GAAG,eAAI58L,EAAJ,CAJX;AAAA,QAKI09L,MAAM,GAAG,eAAI,IAAI19L,EAAR,CALb;AAAA,QAMI29L,KAAK,GAAGd,IAAI,GAAGA,IANnB;AAAA,QAOIe,KAAK,GAAGhB,IAAI,GAAGA,IAPnB;AAAA,QAQIiB,OAAO,GAAGL,MAAM,GAAGA,MARvB;AAAA,QASIvjS,CAAC,GAAG,IAAI2jS,KAAK,GAAGH,MAAR,GAAiBA,MAT7B;AAAA,QAUIvxS,CAAC,GAAG+N,CAAC,GAAG,gBAAK2iS,IAAI,GAAGa,MAAZ,IAAsB,gBAAKtkS,CAAC,GAAG,IAAIc,CAAb,CAAzB,GAA2Cd,CAAC,GAAG,CAVxD;AAAA,QAWIA,CAXJ;AAAA,QAYIkgR,EAAE,GAAG,IAAIntR,CAAJ,GAAQ0wS,IAAR,GAAeY,MAAf,GAAwB7pS,CAZjC;AAAA,QAaI2lR,EAAE,GAAGptR,CAAC,GAAG2wS,IAAJ,GAAW3qR,CAbpB;AAAA,QAcI4rR,IAAI,GAAG3kS,CAAC,IAAIykS,KAAK,GAAGC,OAAR,GAAkB3xS,CAAC,GAAG0wS,IAAJ,GAAWa,MAAX,GAAoBE,KAA1C,CAdZ;AAAA,QAeII,IAAI,GAAG5kS,CAAC,IAAI,MAAMokS,IAAN,GAAaG,MAAb,GAAsBxxS,CAAC,GAAG,CAAJ,GAAQ2wS,IAAR,GAAeW,MAAzC,CAfZ;AAAA,QAgBIQ,IAAI,GAAG7kS,CAAC,GAAG,IAAJ,IAAYukS,MAAM,GAAGF,MAAT,GAAkBtxS,CAAC,GAAG2wS,IAAJ,GAAWe,KAAX,GAAmBL,IAAjD,CAhBX;AAAA,QAiBIU,IAAI,GAAG9kS,CAAC,IAAIwkS,KAAK,GAAGF,MAAR,GAAiBvxS,CAAC,GAAG2xS,OAAJ,GAAcjB,IAAnC,CAjBZ;AAAA,QAkBI35N,CAAC,GAAG86N,IAAI,GAAGC,IAAP,GAAcC,IAAI,GAAGH,IAlB7B;AAmBA,QAAI,CAAC76N,CAAL,EAAQ;AACR,QAAI3pD,EAAE,GAAG,CAACggQ,EAAE,GAAGykB,IAAL,GAAY1kB,EAAE,GAAG4kB,IAAlB,IAA0Bh7N,CAAnC;AAAA,QACI3wD,EAAE,GAAG,CAAC+mQ,EAAE,GAAG2kB,IAAL,GAAY1kB,EAAE,GAAGwkB,IAAlB,IAA0B76N,CADnC;AAEAg9B,IAAAA,EAAE,IAAI3mF,EAAN,EAAU0mF,EAAE,IAAI1tF,EAAhB;AACD,GAxBD,QAwBS,CAAC,eAAIgH,EAAJ,IAAUuxD,aAAV,IAAqB,eAAIv4D,EAAJ,IAAUu4D,aAAhC,KAA4C,EAAEr9E,CAAF,GAAM,CAxB3D;;AAyBA,SAAO,CAACyyG,EAAD,EAAKD,EAAL,CAAP;AACD,CA7BD;;AA+Be,oBAAW;AACxB,SAAO,0BAAWq9L,SAAX,EACFh6R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;AC5CD;;AACA;;AAEO,SAAS66R,YAAT,CAAsB1S,IAAtB,EAA4B;AACjC,MAAItB,OAAO,GAAG,eAAIsB,IAAJ,CAAd;AAAA,MACIvB,OAAO,GAAG,eAAIuB,IAAJ,CADd;AAAA,MAEI2S,KAAK,GAAG3S,IAAI,IAAI,CAAR,GAAY,CAAZ,GAAgB,CAAC,CAF7B;AAAA,MAGI4S,OAAO,GAAG,eAAID,KAAK,GAAG3S,IAAZ,CAHd;AAAA,MAII1gR,CAAC,GAAG,CAAC,IAAIo/Q,OAAJ,GAAcD,OAAf,IAA0B,CAJlC;;AAMA,WAASgF,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI2T,SAAS,GAAG,eAAI5T,MAAM,IAAI,CAAd,CADhB;AAEA,WAAO,CACL,CAAC,IAAIK,MAAL,IAAe,eAAIL,MAAJ,CADV,EAEL,CAAC0T,KAAK,GAAGzT,GAAR,GAAc,CAAC,iBAAM2T,SAAN,EAAiBD,OAAjB,CAAD,GAA6B,IAA3C,GAAkD,CAAlD,GAAsD,CAACD,KAAD,GAAS,EAAhE,IAAsErzR,CAAtE,GAA0E,eAAI4/Q,GAAJ,IAAWT,OAArF,GAA+F,CAAC,IAAIa,MAAL,IAAeZ,OAAf,GAAyBmU,SAFnH,CAE6H;AAF7H,KAAP;AAID;;AAEDpP,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIu4Q,MAAM,GAAG,CAAb;AAAA,QACIC,GAAG,GAAG,CADV;AAAA,QAEIl9R,CAAC,GAAG,EAFR;;AAGA,OAAG;AACD,UAAI6wS,SAAS,GAAG,eAAI5T,MAAJ,CAAhB;AAAA,UACI6T,SAAS,GAAG,eAAI7T,MAAJ,CADhB;AAAA,UAEIK,MAAM,GAAG,eAAIJ,GAAJ,CAFb;AAAA,UAGIK,MAAM,GAAG,eAAIL,GAAJ,CAHb;AAAA,UAII/kC,CAAC,GAAG,IAAImlC,MAJZ;AAAA,UAKIzR,EAAE,GAAG1zB,CAAC,GAAG24C,SAAJ,GAAgB3qS,CALzB;AAAA,UAMI2lR,EAAE,GAAGxuQ,CAAC,GAAGigR,MAAM,GAAGd,OAAb,GAAuBtkC,CAAC,GAAGukC,OAAJ,GAAcmU,SAArC,GAAiDnsR,CAN1D;AAAA,UAOIqsR,SAAS,GAAG54C,CAAC,GAAG04C,SAAJ,GAAgB,CAPhC;AAAA,UAQIG,MAAM,GAAG,CAACF,SAAD,GAAavT,MAR1B;AAAA,UASI0T,SAAS,GAAGvU,OAAO,GAAGvkC,CAAV,GAAc24C,SAAd,GAA0B,CAT1C;AAAA,UAUII,MAAM,GAAGzU,OAAO,GAAGa,MAAV,GAAmBZ,OAAO,GAAGmU,SAAV,GAAsBtT,MAVtD;AAAA,UAWI5sJ,WAAW,GAAGqgK,MAAM,GAAGC,SAAT,GAAqBC,MAAM,GAAGH,SAXhD;AAAA,UAYI5T,OAAO,GAAG,CAACrR,EAAE,GAAGklB,MAAL,GAAcnlB,EAAE,GAAGqlB,MAApB,IAA8BvgK,WAA9B,GAA4C,CAZ1D;AAAA,UAaIwgK,IAAI,GAAG,CAACtlB,EAAE,GAAGolB,SAAL,GAAiBnlB,EAAE,GAAGilB,SAAvB,IAAoCpgK,WAb/C;AAcA,UAAI,eAAIwgK,IAAJ,IAAY,CAAhB,EAAmBA,IAAI,IAAI,CAAR;AACnBlU,MAAAA,MAAM,IAAIE,OAAV,EAAmBD,GAAG,IAAIiU,IAA1B;AACD,KAjBD,QAiBS,CAAC,eAAIhU,OAAJ,IAAe9/M,aAAf,IAA0B,eAAI8zN,IAAJ,IAAY9zN,aAAvC,KAAmD,EAAEr9E,CAAF,GAAM,CAjBlE;;AAkBA,WAAO2wS,KAAK,GAAGzT,GAAR,GAAc,CAAC,iBAAM,eAAID,MAAJ,CAAN,EAAmB2T,OAAnB,CAAD,GAA+B,IAA7C,GAAoD,CAAC3T,MAAM,GAAG,CAAV,EAAaC,GAAb,CAApD,GAAwE,IAA/E;AACD,GAvBD;;AAyBA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIzD,IAAI,GAAG,KAAKhnC,aAAhB;AAAA,MACI25C,KAAK,GAAG3S,IAAI,IAAI,CAAR,GAAY,CAAZ,GAAgB,CAAC,CAD7B;AAAA,MAEI4S,OAAO,GAAG,eAAID,KAAK,GAAG3S,IAAZ,CAFd;AAAA,MAGIvmM,CAAC,GAAG,iCAAkBi5M,YAAlB,CAHR;AAAA,MAIIpsQ,CAAC,GAAGmzD,CAAC,CAACumM,IAAD,CAJT;AAAA,MAKIoT,OAAO,GAAG9sQ,CAAC,CAACskJ,MALhB;;AAOAtkJ,EAAAA,CAAC,CAAC+sQ,QAAF,GAAa,UAAS1qR,CAAT,EAAY;AACvB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO0+R,IAAI,GAAG/mC,aAAd;AACvB25C,IAAAA,OAAO,GAAG,eAAI,CAACD,KAAK,GAAG,CAAC3S,IAAI,GAAGr3Q,CAAC,GAAGqwO,aAAZ,KAAwB,CAAxB,GAA4B,CAA5B,GAAgC,CAAC,CAA1C,IAA+CgnC,IAAnD,CAAV;AACA,WAAOvmM,CAAC,CAACumM,IAAD,CAAR;AACD,GAJD;;AAMA15P,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1B,QAAI2xE,MAAM,GAAGj2N,CAAC,CAACi2N,MAAF,EAAb;AAAA,QACI+2C,YAAY,GAAGF,OAAO,CAACxoH,MAAD,CAD1B;AAAA,QAEI2oH,YAAY,IAAIjtQ,CAAC,CAACi2N,MAAF,CAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,GAAkB62C,OAAO,CAACxoH,MAAD,CAA7B,CAFhB;AAAA,QAGI10F,SAAS,GAAG5vD,CAAC,CAAC4vD,SAAF,EAHhB;AAIA5vD,IAAAA,CAAC,CAACi2N,MAAF,CAASA,MAAT;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAC/B4V,MAAAA,YAAY,CAACrV,YAAb,IAA6BqV,YAAY,CAAC7uD,SAAb,EAA7B;;AACA,WAAK,IAAIu6C,MAAM,GAAG0T,KAAK,GAAG,CAAC,GAA3B,EAAgCA,KAAK,GAAG1T,MAAR,GAAiB,GAAjD,EAAsDA,MAAM,IAAI0T,KAAK,GAAG,EAAxE,EACEY,YAAY,CAAChwF,KAAb,CAAmB07E,MAAnB,EAA2B0T,KAAK,GAAG,EAAnC;;AACF,UAAI3S,IAAJ,EAAU,OAAO2S,KAAK,IAAI1T,MAAM,IAAI,IAAI0T,KAAJ,GAAYz8M,SAA1B,CAAL,IAA6C,CAAC,GAArD,EAA0D;AAClEq9M,QAAAA,YAAY,CAAChwF,KAAb,CAAmB07E,MAAnB,EAA2B0T,KAAK,GAAG,CAAC,iBAAM,eAAI1T,MAAM,GAAGjmC,aAAT,GAAmB,CAAvB,CAAN,EAAiC45C,OAAjC,CAAT,GAAqD35C,aAAhF;AACD;AACDs6C,MAAAA,YAAY,CAAC3uD,OAAb,IAAwB2uD,YAAY,CAACpV,UAAb,EAAxB;AACD,KARD;;AASA,WAAOmV,YAAP;AACD,GAhBD;;AAkBA,SAAOhtQ,CAAC,CACHzuB,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,OAAJ,CAFL,CAAP;AAGD;;;;;;;;;;AClFD;;AACA;;AAEO,SAASsxI,SAAT,CAAmBvU,MAAnB,EAA2BC,GAA3B,EAAgC;AACrC,MAAIuU,MAAM,GAAG,eAAIvU,GAAG,GAAG,CAAV,CAAb;AAAA,MACI5/Q,CAAC,GAAG,gBAAK,IAAIm0R,MAAM,GAAGA,MAAlB,CADR;AAAA,MAEIhlS,CAAC,GAAG,IAAI6Q,CAAC,GAAG,eAAI2/Q,MAAM,IAAI,CAAd,CAFhB;AAAA,MAGI92R,CAAC,GAAG,eAAI82R,MAAJ,IAAc3/Q,CAAd,GAAkB7Q,CAH1B;AAAA,MAIIiY,CAAC,GAAG+sR,MAAM,GAAGhlS,CAJjB;AAAA,MAKIqyE,EAAE,GAAG34E,CAAC,GAAGA,CALb;AAAA,MAMIusG,EAAE,GAAGhuF,CAAC,GAAGA,CANb;AAOA,SAAO,CACL,IAAI,CAAJ,GAAQve,CAAR,IAAa,IAAI24E,EAAJ,GAAS,IAAI4zB,EAA1B,CADK,EAEL,IAAI,CAAJ,GAAQhuF,CAAR,IAAa,IAAI,IAAIo6D,EAAR,GAAa4zB,EAA1B,CAFK,CAAP;AAID;;AAED8+L,SAAS,CAAC9zC,MAAV,GAAmB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAChCve,EAAAA,CAAC,IAAI,IAAI,CAAT,EAAYue,CAAC,IAAI,IAAI,CAArB;AACA,MAAI,CAACve,CAAD,IAAM,eAAIue,CAAJ,IAAS,CAAnB,EAAsB,OAAO,IAAP;AACtB,MAAIo6D,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,MACIusG,EAAE,GAAGhuF,CAAC,GAAGA,CADb;AAAA,MAEIlhB,CAAC,GAAG,IAAIs7E,EAAJ,GAAS4zB,EAFjB;AAAA,MAGIg/L,OAAO,GAAG,gBAAK,CAACluS,CAAC,GAAG,gBAAKA,CAAC,GAAGA,CAAJ,GAAQ,IAAIkhB,CAAJ,GAAQA,CAArB,CAAL,IAAgC,CAArC,CAHd;AAAA,MAIIitR,GAAG,GAAG,gBAAKD,OAAL,IAAgB,CAJ1B;AAAA,MAKIE,EAAE,GAAGF,OAAO,GAAG,kBAAO,eAAIhtR,CAAC,GAAGgtR,OAAR,CAAP,IAA2B,CAA9B,GAAkC,kBAAO,eAAIvrS,CAAJ,CAAP,IAAiB,CALnE;AAAA,MAMI0rS,MAAM,GAAG,eAAIF,GAAJ,CANb;AAAA,MAOIG,MAAM,GAAG,gBAAKF,EAAL,CAPb;AAAA,MAQI/kS,CAAC,GAAGilS,MAAM,GAAGA,MAAT,GAAkBD,MAAM,GAAGA,MARnC;AASA,SAAO,CACL,gBAAK1rS,CAAL,IAAU,CAAV,GAAc,iBAAM,gBAAKyrS,EAAL,IAAWC,MAAjB,EAAyB,OAAOhlS,CAAhC,CADT,EAEL,gBAAK6X,CAAL,IAAU,CAAV,GAAc,iBAAMotR,MAAM,GAAG,eAAIH,GAAJ,CAAf,EAAyB,OAAO9kS,CAAhC,CAFT,CAAP;AAID,CAhBD;;AAkBe,oBAAW;AACxB,SAAO,0BAAW2kS,SAAX,EACF37R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACtCD;;AACA;;AAEA,IAAIk8R,KAAK,GAAG,gBAAK,CAAL,CAAZ;AAAA,IACI/T,IAAI,GAAG,eAAI,IAAI4Q,WAAR,CADX;;AAGO,SAASoD,QAAT,CAAkB/U,MAAlB,EAA0BC,GAA1B,EAA+B;AACpC,MAAIc,IAAI,GAAG,eAAId,GAAJ,CAAX;AACA,SAAOc,IAAI,GAAG7C,eAAP,GACD,CAAC8B,MAAD,EAAS,eAAI,eAAI9B,kBAAY+B,GAAG,GAAG,CAAtB,CAAJ,CAAT,CADC,GAED,CAACD,MAAM,GAAG,eAAIe,IAAJ,CAAT,IAAsB,IAAI4Q,WAAJ,GAAY,IAAI,eAAI5Q,IAAJ,CAAtC,CAAD,EAAmD,gBAAKd,GAAL,KAAa,IAAI0R,WAAJ,IAAa5Q,IAAI,GAAG7C,eAApB,IAAiC,eAAI,eAAI6C,IAAI,GAAG,CAAX,CAAJ,CAA9C,CAAnD,CAFN;AAGD;;AAEDgU,QAAQ,CAACt0C,MAAT,GAAkB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/B,MAAI,CAAC47L,EAAE,GAAG,eAAI57L,CAAJ,CAAN,IAAgBs5Q,IAApB,EAA0B,OAAO,CAAC73R,CAAD,EAAI,IAAI,gBAAK,eAAIue,CAAJ,CAAL,CAAJ,GAAmBo6N,YAAvB,CAAP;AAC1B,MAAIo+C,GAAG,GAAG/B,eAAV;AAAA,MAAqBn7R,CAAC,GAAG,EAAzB;AAAA,MAA6B21F,KAA7B;AAAA,MAAoC2qH,EAApC;;AACA,KAAG;AACD,QAAI2xF,QAAQ,GAAG,eAAI/U,GAAG,GAAG,CAAV,CAAf;AAAA,QAA6BgV,QAAQ,GAAG,eAAIhV,GAAG,GAAG,CAAV,CAAxC;AACAA,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAACo8M,KAAK,IAAI7U,GAAG,GAAG/B,eAAV,CAAL,GAA4B,eAAI+W,QAAJ,CAA5B,GAA4C5xF,EAA7C,KAAoDyxF,KAAK,GAAGE,QAAQ,GAAGA,QAAX,IAAuB,IAAIC,QAA3B,CAA5D,CAAf;AACD,GAHD,QAGS,eAAIv8M,KAAJ,IAAaomK,cAAb,IAAyB,EAAE/7P,CAAF,GAAM,CAHxC;;AAIA,SAAO,CAACmG,CAAC,IAAI,eAAI+2R,GAAJ,KAAY6U,KAAK,GAAG,IAAI,eAAI7U,GAAJ,CAAxB,CAAJ,CAAF,EAA0C,gBAAKx4Q,CAAL,IAAUw4Q,GAApD,CAAP;AACD,CARD;;AAUe,oBAAW;AACxB,SAAO,0BAAW8U,QAAX,EACFn8R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC1BD;;AACA;;AAEO,SAASs8R,WAAT,CAAqBC,KAArB,EAA4B;AACjC,MAAI90R,CAAC,GAAG,IAAI0/N,QAAJ,GAASo1D,KAAjB;;AAEA,WAAS3Q,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI54P,CAAC,GAAG,uCAAwB24P,MAAxB,EAAgCC,GAAhC,CAAR;;AACA,QAAI,eAAID,MAAJ,IAAcn+C,YAAlB,EAA0B;AAAE;AAC1B,UAAIzqF,KAAK,GAAG,iBAAM/vH,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,CAAZ;AAAA,UACIt2B,CAAC,GAAG,gBAAKs2B,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA3B,CADR;AAAA,UAEI+tQ,MAAM,GAAG/0R,CAAC,GAAG,iBAAM,CAAC+2I,KAAK,GAAGyqF,YAAT,IAAmBxhO,CAAzB,CAAJ,GAAkCwhO,YAF/C;AAAA,UAGIxlO,KAAK,GAAG,iBAAM,eAAI+6I,KAAK,IAAIg+I,MAAb,CAAN,EAA4B,IAAI,eAAIh+I,KAAJ,CAAhC,CAHZ,CADwB,CAIiC;;;AACzDA,MAAAA,KAAK,GAAGg+I,MAAM,GAAG,gBAAKr1D,WAAKhvO,CAAL,GAAS,eAAIsL,KAAJ,CAAd,CAAT,GAAqCA,KAA7C;AACAgrB,MAAAA,CAAC,CAAC,CAAD,CAAD,GAAOt2B,CAAC,GAAG,eAAIqmJ,KAAJ,CAAX;AACA/vH,MAAAA,CAAC,CAAC,CAAD,CAAD,GAAOt2B,CAAC,GAAG,eAAIqmJ,KAAJ,CAAX;AACD;;AACD,WAAO/vH,CAAP;AACD;;AAEDm9P,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI1W,CAAC,GAAG,gBAAK7H,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAR;;AACA,QAAI1W,CAAC,GAAG8wO,YAAR,EAAgB;AACd,UAAIzqF,KAAK,GAAG,iBAAM3vI,CAAN,EAASve,CAAT,CAAZ;AAAA,UACIksS,MAAM,GAAG/0R,CAAC,GAAG,iBAAM,CAAC+2I,KAAK,GAAGyqF,YAAT,IAAmBxhO,CAAzB,CAAJ,GAAkCwhO,YAD/C;AAAA,UAEIt7O,CAAC,GAAG6wJ,KAAK,GAAGg+I,MAAR,GAAiB,CAAC,CAAlB,GAAsB,CAF9B;AAAA,UAGIl6C,CAAC,GAAGnqP,CAAC,GAAG,eAAIqkS,MAAM,GAAGh+I,KAAb,CAHZ;AAAA,UAIIi+I,QAAQ,GAAG,IAAI,eAAI9uS,CAAC,GAAG,gBAAK,CAAC20P,CAAC,GAAGnb,QAAL,IAAW,gBAAKA,YAAMA,WAAK,IAAImb,CAAf,IAAoBnqP,CAAC,GAAGA,CAA7B,CAAhB,CAAR,CAJnB;;AAKAqmJ,MAAAA,KAAK,GAAGg+I,MAAM,GAAG,IAAI,gBAAK,CAACC,QAAQ,GAAG9uS,CAAC,GAAG,gBAAK8uS,QAAQ,GAAGA,QAAX,GAAsB,CAA3B,CAAhB,IAAiD,CAAtD,CAArB;AACAnsS,MAAAA,CAAC,GAAG6H,CAAC,GAAG,eAAIqmJ,KAAJ,CAAR,EAAoB3vI,CAAC,GAAG1W,CAAC,GAAG,eAAIqmJ,KAAJ,CAA5B;AACD;;AACD,WAAO+4I,kCAAwB1vC,MAAxB,CAA+Bv3P,CAA/B,EAAkCue,CAAlC,CAAP;AACD,GAZD;;AAcA,SAAO+8Q,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAI2Q,KAAK,GAAG,CAAZ;AAAA,MACI36M,CAAC,GAAG,iCAAkB06M,WAAlB,CADR;AAAA,MAEI7tQ,CAAC,GAAGmzD,CAAC,CAAC26M,KAAD,CAFT;AAAA,MAGInJ,gBAAgB,GAAG3kQ,CAAC,CAACskJ,MAHzB;AAAA,MAIIvrG,OAAO,GAAG,IAJd;AAAA,MAKI8zL,EAAE,GAAG,CAAC,eAAI9zL,OAAO,GAAG25K,aAAd,CALV;AAAA,MAMI5+K,EAAE,GAAG,eAAIiF,OAAO,GAAG25K,aAAd,CANT;;AAQA1yN,EAAAA,CAAC,CAAC8tQ,KAAF,GAAU,UAASzrR,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAAC26M,KAAK,GAAG,CAACzrR,CAAV,CAApB,GAAmCyrR,KAA1C;AACD,GAFD;;AAIA9tQ,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1B,QAAI2xE,MAAM,GAAGj2N,CAAC,CAACi2N,MAAF,EAAb;AAAA,QACI+2C,YAAY,GAAGrI,gBAAgB,CAACrgH,MAAD,CADnC;AAAA,QAEI2oH,YAAY,IAAIjtQ,CAAC,CAACi2N,MAAF,CAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,GAAkB0uC,gBAAgB,CAACrgH,MAAD,CAAtC,CAFhB;AAGAtkJ,IAAAA,CAAC,CAACi2N,MAAF,CAASA,MAAT;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAC/B4V,MAAAA,YAAY,CAACrV,YAAb,IAA6BqV,YAAY,CAAC7uD,SAAb,EAA7B;;AACA,WAAK,IAAI1iP,CAAC,GAAG,CAAR,EAAW21F,KAAK,GAAG,MAAMy8M,KAAzB,EAAgCG,MAAM,GAAG,IAAIv1D,QAAJ,GAASo1D,KAAlD,EAAyDlV,GAAG,GAAG,KAAK,MAAMkV,KAA1E,EAAiFpU,IAAI,GAAGl/C,YAA7F,EAAqG9+O,CAAC,GAAGoyS,KAAzG,EAAgH,EAAEpyS,CAAF,EAAKk9R,GAAG,IAAIvnM,KAAZ,EAAmBqoM,IAAI,IAAIuU,MAA3I,EAAmJ;AACjJhB,QAAAA,YAAY,CAAChwF,KAAb,CAAmB,iBAAMnpI,EAAE,GAAG,eAAI4lN,IAAJ,CAAX,EAAsB7sB,EAAtB,IAA4Bla,aAA/C,EAAwD,gBAAK7+K,EAAE,GAAG,eAAI4lN,IAAJ,CAAV,IAAuB/mC,aAA/E;;AACA,YAAIimC,GAAG,GAAG,CAAC,EAAX,EAAe;AACbqU,UAAAA,YAAY,CAAChwF,KAAb,CAAmB,CAAC,EAApB,EAAwB,CAAC,GAAD,GAAO27E,GAAP,GAAa7/M,OAArC;AACAk0N,UAAAA,YAAY,CAAChwF,KAAb,CAAmB,CAAC,EAApB,EAAwB,CAAC,GAAD,GAAO27E,GAAP,GAAa7/M,OAArC;AACD,SAHD,MAGO;AACLk0N,UAAAA,YAAY,CAAChwF,KAAb,CAAmB,EAAnB,EAAuB27E,GAAG,GAAG7/M,OAA7B;AACAk0N,UAAAA,YAAY,CAAChwF,KAAb,CAAmB,EAAnB,EAAuB27E,GAAG,GAAG7/M,OAA7B;AACD;AACF;;AACDk0N,MAAAA,YAAY,CAAC3uD,OAAb,IAAwB2uD,YAAY,CAACpV,UAAb,EAAxB;AACD,KAbD;;AAcA,WAAOmV,YAAP;AACD,GApBD;;AAsBA,SAAOhtQ,CAAC,CACHzuB,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,OAAJ,CAFL,EAGF0rI,SAHE,CAGQ,MAAM,IAHd,CAAP;AAID;;;;;;;;;;AC5ED;;AACA;;AAEO,SAAS4G,SAAT,CAAmBr6C,CAAnB,EAAsBC,CAAtB,EAAyB;AAC9B,MAAIr4P,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B84P,CAAC,GAAGD,CAAJ;AAC1B,MAAIC,CAAC,KAAK,CAAV,EAAa,OAAO80C,+BAAP;AACb,MAAI90C,CAAC,KAAKtwP,QAAV,EAAoB,OAAO2qS,wBAAP;;AAEpB,WAAShR,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIr8E,WAAW,GAAG,qCAAsBo8E,MAAM,GAAG7kC,CAA/B,EAAkC8kC,GAAlC,CAAlB;AACAr8E,IAAAA,WAAW,CAAC,CAAD,CAAX,IAAkBs3C,CAAlB;AACA,WAAOt3C,WAAP;AACD;;AAED4gF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIm8L,WAAW,GAAGqsF,gCAAsBxvC,MAAtB,CAA6Bv3P,CAAC,GAAGgyP,CAAjC,EAAoCzzO,CAApC,CAAlB;;AACAm8L,IAAAA,WAAW,CAAC,CAAD,CAAX,IAAkBu3C,CAAlB;AACA,WAAOv3C,WAAP;AACD,GAJD;;AAMA,SAAO4gF,OAAP;AACD;;AAED,SAASgR,wBAAT,CAAkCxV,MAAlC,EAA0CC,GAA1C,EAA+C;AAC7C,SAAO,CACLD,MAAM,GAAG,eAAIC,GAAJ,CAAT,GAAoB,eAAIA,GAAG,IAAI,CAAX,CADf,EAEL,IAAI,eAAIA,GAAJ,CAFC,CAAP;AAID;;AAEDuV,wBAAwB,CAAC/0C,MAAzB,GAAkC,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/C,MAAIw4Q,GAAG,GAAG,IAAI,gBAAKx4Q,CAAC,GAAG,CAAT,CAAd;AACA,SAAO,CACLve,CAAC,GAAG,eAAI+2R,GAAG,GAAG,CAAV,CAAJ,GAAmB,eAAIA,GAAJ,CADd,EAELA,GAFK,CAAP;AAID,CAND;;AAQe,oBAAW;AACxB,MAAI9kC,CAAC,GAAG,CAAR;AAAA,MACI3gK,CAAC,GAAG,iCAAkB+6M,SAAlB,CADR;AAAA,MAEIluQ,CAAC,GAAGmzD,CAAC,CAAC2gK,CAAD,CAFT;;AAIA9zN,EAAAA,CAAC,CAAC0kL,WAAF,GAAgB,UAASriM,CAAT,EAAY;AAC1B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO84P,CAAP;AACvB,WAAO3gK,CAAC,CAAC2gK,CAAC,GAAG,CAACzxO,CAAN,CAAR;AACD,GAHD;;AAKA,SAAO2d,CAAC,CACLzuB,KADI,CACE,OADF,CAAP;AAED;;;;;;;;;;AClDD;;AAEA;AACA;AACO,SAAS68R,KAAT,CAAe/mS,CAAf,EAAkB+Y,CAAlB,EAAqBve,CAArB,EAAwB;AAC7B,MAAIgmI,KAAK,GAAG,GAAZ;AAAA,MAAiBx2C,KAAjB;AAAA,MAAwBg9M,EAAxB;AAAA,MAA4BC,EAA5B;AACAzsS,EAAAA,CAAC,GAAGA,CAAC,KAAK+uH,SAAN,GAAkB,CAAlB,GAAsB,CAAC/uH,CAA3B;AACAue,EAAAA,CAAC,GAAG,CAACA,CAAL;;AACA,KAAG;AACDiuR,IAAAA,EAAE,GAAGhnS,CAAC,CAACxF,CAAD,CAAN;AACAysS,IAAAA,EAAE,GAAGjnS,CAAC,CAACxF,CAAC,GAAGk3E,aAAL,CAAN;AACA,QAAIs1N,EAAE,KAAKC,EAAX,EAAeA,EAAE,GAAGD,EAAE,GAAGt1N,aAAV;AACfl3E,IAAAA,CAAC,IAAIwvF,KAAK,GAAI,CAAC,CAAD,GAAKtY,aAAL,IAAgBs1N,EAAE,GAAGjuR,CAArB,CAAD,IAA6BiuR,EAAE,GAAGC,EAAlC,CAAb;AACD,GALD,QAKSzmK,KAAK,KAAK,CAAV,IAAe,eAAIx2C,KAAJ,IAAatY,aALrC;;AAMA,SAAO8uD,KAAK,GAAG,CAAR,GAAY55D,GAAZ,GAAkBpsE,CAAzB;AACD,EAED;AACA;;;AACO,SAAS0sS,OAAT,CAAiBlnS,CAAjB,EAAoBmnS,cAApB,EAAoCnqE,GAApC,EAAyC;AAC9C,MAAImqE,cAAc,KAAK59K,SAAvB,EAAkC49K,cAAc,GAAG,EAAjB;AAClC,MAAInqE,GAAG,KAAKzzG,SAAZ,EAAuByzG,GAAG,GAAGozB,cAAN;AACvB,SAAO,UAAS51P,CAAT,EAAYue,CAAZ,EAAexd,CAAf,EAAkB6G,CAAlB,EAAqB;AAC1B,QAAIglS,IAAJ,EAAU/8F,EAAV,EAAcj3F,EAAd;AACA73G,IAAAA,CAAC,GAAGA,CAAC,KAAKguH,SAAN,GAAkB,CAAlB,GAAsB,CAAChuH,CAA3B;AACA6G,IAAAA,CAAC,GAAGA,CAAC,KAAKmnH,SAAN,GAAkB,CAAlB,GAAsB,CAACnnH,CAA3B;;AACA,SAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8yS,cAApB,EAAoC9yS,CAAC,EAArC,EAAyC;AACvC,UAAIskC,CAAC,GAAG34B,CAAC,CAACzE,CAAD,EAAI6G,CAAJ,CAAT;AAAA,UACE;AACA8yG,MAAAA,EAAE,GAAGv8E,CAAC,CAAC,CAAD,CAAD,GAAOn+B,CAFd;AAAA,UAGEkvR,EAAE,GAAG/wP,CAAC,CAAC,CAAD,CAAD,GAAO5f,CAHd;AAIA,UAAI,eAAIm8F,EAAJ,IAAU8nH,GAAV,IAAiB,eAAI0sD,EAAJ,IAAU1sD,GAA/B,EAAoC,MALG,CAKI;AAE3C;;AACA,UAAIp8K,CAAC,GAAGs0D,EAAE,GAAGA,EAAL,GAAUw0K,EAAE,GAAGA,EAAvB;;AACA,UAAI9oO,CAAC,GAAGwmP,IAAR,EAAc;AACZ7rS,QAAAA,CAAC,IAAI8uM,EAAE,IAAI,CAAX;AACAjoM,QAAAA,CAAC,IAAIgxG,EAAE,IAAI,CAAX;AACA;AACD;;AACDg0L,MAAAA,IAAI,GAAGxmP,CAAP,CAduC,CAgBvC;;AACA,UAAIykN,EAAE,GAAG,CAAC9pQ,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAd,IAAmByhO,GAA5B;AAAA,UACEqqE,EAAE,GAAG,CAACjlS,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAd,IAAmB46N,GAD1B;AAAA,UAEEib,EAAE,GAAGj4O,CAAC,CAACzE,CAAC,GAAG8pQ,EAAL,EAASjjQ,CAAT,CAFR;AAAA,UAGEu2R,EAAE,GAAG34R,CAAC,CAACzE,CAAD,EAAI6G,CAAC,GAAGilS,EAAR,CAHR;AAAA,UAIEC,GAAG,GAAG,CAACrvD,EAAE,CAAC,CAAD,CAAF,GAAQt/M,CAAC,CAAC,CAAD,CAAV,IAAiB0sO,EAJzB;AAAA,UAKEkiC,GAAG,GAAG,CAACtvD,EAAE,CAAC,CAAD,CAAF,GAAQt/M,CAAC,CAAC,CAAD,CAAV,IAAiB0sO,EALzB;AAAA,UAMEmiC,GAAG,GAAG,CAAC7O,EAAE,CAAC,CAAD,CAAF,GAAQhgQ,CAAC,CAAC,CAAD,CAAV,IAAiB0uQ,EANzB;AAAA,UAOEI,GAAG,GAAG,CAAC9O,EAAE,CAAC,CAAD,CAAF,GAAQhgQ,CAAC,CAAC,CAAD,CAAV,IAAiB0uQ,EAPzB;AAAA,UAQE;AACAxyD,MAAAA,CAAC,GAAG4yD,GAAG,GAAGH,GAAN,GAAYC,GAAG,GAAGC,GATxB;AAAA,UAUE;AACArhS,MAAAA,CAAC,GAAG,CAAC,eAAI0uO,CAAJ,IAAS,GAAT,GAAe,GAAf,GAAqB,CAAtB,IAA2BA,CAXjC;AAYAxqC,MAAAA,EAAE,GAAG,CAACq/E,EAAE,GAAG8d,GAAL,GAAWtyL,EAAE,GAAGuyL,GAAjB,IAAwBthS,CAA7B;AACAitG,MAAAA,EAAE,GAAG,CAAC8B,EAAE,GAAGqyL,GAAL,GAAW7d,EAAE,GAAG4d,GAAjB,IAAwBnhS,CAA7B;AACA5K,MAAAA,CAAC,IAAI8uM,EAAL;AACAjoM,MAAAA,CAAC,IAAIgxG,EAAL;AACA,UAAI,eAAIi3F,EAAJ,IAAU2yB,GAAV,IAAiB,eAAI5pH,EAAJ,IAAU4pH,GAA/B,EAAoC,MAjCG,CAiCI;AAC5C;;AACD,WAAO,CAACzhO,CAAD,EAAI6G,CAAJ,CAAP;AACD,GAxCD;AAyCD;;;;;;;;;;AC/DD;;AACA;;AACA;;AACA;;AAEA;AACA;AACO,SAASslS,aAAT,GAAyB;AAC9B,MAAIC,MAAM,GAAG,uBAAU,IAAV,EAAgB,CAAhB,CAAb;AAAA,MACIC,EAAE,GAAG,GADT;AAAA,MACcj2R,CAAC,GAAG,EADlB;;AAGA,WAASmkR,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAE5B,QAAID,MAAM,GAAGC,GAAT,GAAe,CAACqW,EAApB,EAAwB;AACtB,UAAIv0N,CAAC,GAAG,CAACi+M,MAAM,GAAGC,GAAT,GAAe,GAAhB,KAAwBD,MAAM,GAAGC,GAAT,GAAeqW,EAAvC,IAA6C,CAArD;AACAtW,MAAAA,MAAM,IAAIj+M,CAAV;AACAk+M,MAAAA,GAAG,IAAI,MAAMl+M,CAAN,GAAU,eAAIk+M,GAAG,GAAGlgD,WAAK,CAAf,CAAjB;AACD;;AAED,QAAIhvO,CAAC,GAAGslS,MAAM,CAACrW,MAAD,EAASC,GAAT,CAAd;AAEA,QAAIrwR,CAAC,GAAG,CAAC,IAAI,eAAIowR,MAAM,GAAGC,GAAb,CAAL,IAA0B5/Q,CAAlC;;AAEA,QAAItP,CAAC,CAAC,CAAD,CAAD,GAAO,CAAX,EAAc;AACZA,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAInB,CAAZ;AACD;;AACD,QAAImB,CAAC,CAAC,CAAD,CAAD,GAAO,CAAX,EAAc;AACZA,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAInB,CAAC,GAAG,GAAJ,GAAUmB,CAAC,CAAC,CAAD,CAAX,GAAiBA,CAAC,CAAC,CAAD,CAA9B;AACD;;AAED,WAAOA,CAAP;AACD;;AAEDyzR,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,qBAAQ+jC,OAAR,CAAjB;AACA,SAAOA,OAAP;AACD;;AAEc,oBAAW;AACxB;AACA,SAAO,0BAAW4R,aAAa,EAAxB,EACJ94C,MADI,CACG,CAAC,CAAC,IAAF,EAAQ,CAAC,EAAT,CADH,EAEJ1kP,KAFI,CAEE,MAFF,EAGJqqJ,MAHI,CAGG,CAAC,IAAD,EAAO,IAAP,CAHH,CAAP;AAID;;;;;;;;;;;;AC3CD;;AACA;;AAEO,SAASszI,qBAAT,CAA+BC,EAA/B,EAAmCvW,GAAnC,EAAwC;AAC7C,MAAIwW,QAAQ,GAAGD,EAAE,GAAG,eAAIvW,GAAJ,CAApB;AAAA,MAA8Bl9R,CAAC,GAAG,EAAlC;AAAA,MAAsC21F,KAAtC;;AACA,KAAGunM,GAAG,IAAIvnM,KAAK,GAAG,CAACunM,GAAG,GAAG,eAAIA,GAAJ,CAAN,GAAiBwW,QAAlB,KAA+B,IAAI,eAAIxW,GAAJ,CAAnC,CAAf,CAAH,QACO,eAAIvnM,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CADrC;;AAEA,SAAOk9R,GAAG,GAAG,CAAb;AACD;;AAEM,SAASyW,mBAAT,CAA6B1yD,EAA7B,EAAiCC,EAAjC,EAAqCuyD,EAArC,EAAyC;AAE9C,WAAShS,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,CAACj8C,EAAE,GAAGg8C,MAAL,GAAc,eAAIC,GAAG,GAAGsW,qBAAqB,CAACC,EAAD,EAAKvW,GAAL,CAA/B,CAAf,EAA0Dh8C,EAAE,GAAG,eAAIg8C,GAAJ,CAA/D,CAAP;AACD;;AAEDuE,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,WAAOA,CAAC,GAAG,gBAAKA,CAAC,GAAGw8N,EAAT,CAAJ,EAAkB,CAAC/6O,CAAC,IAAI86O,EAAE,GAAG,eAAIv8N,CAAJ,CAAT,CAAF,EAAoB,gBAAK,CAAC,IAAIA,CAAJ,GAAQ,eAAI,IAAIA,CAAR,CAAT,IAAuB+uR,EAA5B,CAApB,CAAzB;AACD,GAFD;;AAIA,SAAOhS,OAAP;AACD;;AAEM,IAAImS,YAAY,GAAGD,mBAAmB,CAAC/E,cAAQ9vD,YAAT,EAAiB8vD,WAAjB,EAAwB5xD,QAAxB,CAAtC;;;AAEQ,oBAAW;AACxB,SAAO,0BAAW42D,YAAX,EACF/9R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC5BD;;AACA;;AACA;;AAEA,IAAIyH,CAAC,GAAG,OAAR;AAAA,IACIgvC,CAAC,GAAG,OADR;;AAGO,SAASunP,QAAT,CAAkB5W,MAAlB,EAA0BC,GAA1B,EAA+B;AACpC,MAAI7oI,KAAK,GAAG,sCAAsB2oF,QAAtB,EAA0BkgD,GAA1B,CAAZ;AACA,SAAO,CAAC5/Q,CAAC,GAAG2/Q,MAAJ,IAAc,IAAI,eAAIC,GAAJ,CAAJ,GAAe5wO,CAAC,GAAG,eAAI+nG,KAAJ,CAAjC,CAAD,EAA+C,CAAC6oI,GAAG,GAAG0R,cAAQ,eAAIv6I,KAAJ,CAAf,IAA6B/2I,CAA5E,CAAP;AACD;;AAEDu2R,QAAQ,CAACn2C,MAAT,GAAkB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/B,MAAI87L,EAAE,GAAGljM,CAAC,GAAGoH,CAAb;AAAA,MAAgB2vI,KAAK,GAAG3vI,CAAC,GAAG,CAAJ,GAAQ,CAACy2Q,eAAT,GAAqBA,eAA7C;AAAA,MAAwDn7R,CAAC,GAAG,EAA5D;AAAA,MAAgE21F,KAAhE;AAAA,MAAuEunM,GAAvE;;AACA,KAAG;AACDA,IAAAA,GAAG,GAAG18E,EAAE,GAAGouF,cAAQ,eAAIv6I,KAAJ,CAAnB;AACAA,IAAAA,KAAK,IAAI1+D,KAAK,GAAG,CAAC,eAAI,IAAI0+D,KAAR,IAAiB,IAAIA,KAArB,GAA6B2oF,WAAK,eAAIkgD,GAAJ,CAAnC,KAAgD,IAAI,eAAI,IAAI7oI,KAAR,CAAJ,GAAqB,CAArB,GAAyB2oF,WAAK,eAAIkgD,GAAJ,CAAL,GAAgB0R,WAAhB,GAAwB,eAAIv6I,KAAJ,CAAjG,CAAjB;AACD,GAHD,QAGS,eAAI1+D,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAHvC;;AAIAk9R,EAAAA,GAAG,GAAG18E,EAAE,GAAGouF,cAAQ,eAAIv6I,KAAJ,CAAnB;AACA,SAAO,CAACluJ,CAAC,IAAI,IAAI,eAAI+2R,GAAJ,CAAJ,GAAe5wO,CAAC,GAAG,eAAI+nG,KAAJ,CAAvB,CAAD,GAAsC/2I,CAAvC,EAA0C4/Q,GAA1C,CAAP;AACD,CARD;;AAUe,oBAAW;AACxB,SAAO,0BAAW2W,QAAX,EACFh+R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;ACzBD;;AACA;;AAEe,kBAASw1R,SAAT,EAAoB;AACjC,MAAIrN,IAAI,GAAG,CAAX;AAAA,MACIvmM,CAAC,GAAG,iCAAkB4zM,SAAlB,CADR;AAAA,MAEI/mQ,CAAC,GAAGmzD,CAAC,CAACumM,IAAD,CAFT;;AAIA15P,EAAAA,CAAC,CAAC+sQ,QAAF,GAAa,UAAS1qR,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACumM,IAAI,GAAGr3Q,CAAC,GAAGqwO,aAAZ,CAApB,GAA2CgnC,IAAI,GAAG/mC,aAAzD;AACD,GAFD;;AAIA,SAAO3yN,CAAP;AACD;;;;;;;;;;ACbD;;AACA;;AAEO,SAASwvQ,aAAT,CAAuB7W,MAAvB,EAA+BC,GAA/B,EAAoC;AACzC,SAAO,CAACD,MAAM,GAAG,eAAIC,GAAJ,CAAV,EAAoBA,GAApB,CAAP;AACD;;AAED4W,aAAa,CAACp2C,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpC,SAAO,CAACve,CAAC,GAAG,eAAIue,CAAJ,CAAL,EAAaA,CAAb,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,SAAO,0BAAWovR,aAAX,EACFj+R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACdD;;AACA;;AACA;;;;AAEO,SAASk+R,QAAT,CAAkB/V,IAAlB,EAAwB;AAC7B,MAAI,CAACA,IAAL,EAAW,OAAO8V,yBAAP;AACX,MAAIE,OAAO,GAAG,IAAI,eAAIhW,IAAJ,CAAlB;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI/tK,GAAG,GAAG6kL,OAAO,GAAGhW,IAAV,GAAiBd,GAA3B;AAAA,QACIx+R,CAAC,GAAGywH,GAAG,GAAG8tK,MAAM,GAAG,eAAIC,GAAJ,CAAT,GAAoB/tK,GAAvB,GAA6BA,GADxC;AAEA,WAAO,CAACA,GAAG,GAAG,eAAIzwH,CAAJ,CAAP,EAAes1S,OAAO,GAAG7kL,GAAG,GAAG,eAAIzwH,CAAJ,CAA/B,CAAP;AACD;;AAED+iS,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIyqG,GAAG,GAAG,gBAAKhpH,CAAC,GAAGA,CAAJ,GAAQ,CAACue,CAAC,GAAGsvR,OAAO,GAAGtvR,CAAf,IAAoBA,CAAjC,CAAV;AAAA,QACIw4Q,GAAG,GAAG8W,OAAO,GAAGhW,IAAV,GAAiB7uK,GAD3B;AAEA,WAAO,CAACA,GAAG,GAAG,eAAI+tK,GAAJ,CAAN,GAAiB,iBAAM/2R,CAAN,EAASue,CAAT,CAAlB,EAA+Bw4Q,GAA/B,CAAP;AACD,GAJD;;AAMA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAUsS,QAAV,EACFl+R,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,OAAJ,CAFL,EAGFmxI,QAHE,CAGO,EAHP,CAAP;AAID;;;;;;;;;;AC5BD;;AACA;;AAEO,SAAS4C,YAAT,CAAsBC,MAAtB,EAA8B;AAEnC,WAASzS,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI/tK,GAAG,GAAG2vH,eAASo+C,GAAnB;AAAA,QACIyU,GAAG,GAAGxiL,GAAG,GAAG8tK,MAAM,GAAGiX,MAAT,GAAkB,eAAI/kL,GAAJ,CAAlB,GAA6BA,GAAhC,GAAsCA,GADnD;AAEA,WAAO,CAACA,GAAG,GAAG,eAAIwiL,GAAJ,CAAN,GAAiBuC,MAAlB,EAA0Bp1D,eAAS3vH,GAAG,GAAG,eAAIwiL,GAAJ,CAAzC,CAAP;AACD;;AAEDlQ,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI+tF,EAAE,GAAGtsG,CAAC,GAAG+tS,MAAb;AAAA,QACI1hM,EAAE,GAAGssI,eAASp6N,CADlB;AAAA,QAEIyqG,GAAG,GAAG,gBAAK1c,EAAE,GAAGA,EAAL,GAAUD,EAAE,GAAGA,EAApB,CAFV;AAAA,QAGIm/L,GAAG,GAAG,iBAAMl/L,EAAN,EAAUD,EAAV,CAHV;AAIA,WAAO,CAAC,CAAC2c,GAAG,GAAGA,GAAG,GAAG,eAAIA,GAAJ,CAAT,GAAoB,CAAxB,IAA6BwiL,GAA7B,GAAmCuC,MAApC,EAA4Cp1D,eAAS3vH,GAArD,CAAP;AACD,GAND;;AAQA,SAAOsyK,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIyS,MAAM,GAAG,GAAb;AAAA,MACIz8M,CAAC,GAAG,iCAAkBw8M,YAAlB,CADR;AAAA,MAEI3vQ,CAAC,GAAGmzD,CAAC,CAACy8M,MAAD,CAFT;;AAIA5vQ,EAAAA,CAAC,CAACqiF,QAAF,GAAa,UAAShgG,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACy8M,MAAM,GAAG,CAACvtR,CAAX,CAApB,GAAoCutR,MAA3C;AACD,GAFD;;AAIA,SAAO5vQ,CAAC,CACHzuB,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACjCD;;AACA;;AACA;;AAEO,IAAIs+R,UAAU,GAAG,oCAAoB,CAApB,EAAuB,IAAIn3D,QAA3B,EAA+BA,QAA/B,CAAjB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAWm3D,UAAX,EACFt+R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;;ACTD;;AACA;;AACA;;AAEA;AACA,SAASuyR,QAAT,CAAkB+I,IAAlB,EAAwB93P,EAAxB,EAA4Bu7B,EAA5B,EAAgCt7B,EAAhC,EAAoCu7B,EAApC,EAAwCsoN,OAAxC,EAAiD;AAC/C,MAAIiX,UAAU,GAAG,eAAIjX,OAAJ,CAAjB;AAAA,MAA+BnvR,CAA/B;;AACA,MAAI,eAAImjS,IAAJ,IAAY,CAAZ,IAAiB,eAAIhU,OAAJ,IAAe,CAApC,EAAuC;AACrCnvR,IAAAA,CAAC,GAAG,gBAAK4mE,EAAE,GAAGC,EAAL,GAAUx7B,EAAE,GAAGC,EAAL,GAAU86P,UAAzB,CAAJ;AACD,GAFD,MAEO;AACL,QAAIC,OAAO,GAAG,eAAIlD,IAAI,GAAG,CAAX,CAAd;AAAA,QAA6BmD,UAAU,GAAG,eAAInX,OAAO,GAAG,CAAd,CAA1C;AACAnvR,IAAAA,CAAC,GAAG,IAAI,gBAAK,gBAAKqmS,OAAO,GAAGA,OAAV,GAAoBh7P,EAAE,GAAGC,EAAL,GAAUg7P,UAAV,GAAuBA,UAAhD,CAAL,CAAR;AACD;;AACD,SAAO,eAAItmS,CAAJ,IAASqvE,aAAT,GAAmB,CAACrvE,CAAD,EAAI,iBAAMsrC,EAAE,GAAG,eAAI6jP,OAAJ,CAAX,EAAyB9jP,EAAE,GAAGw7B,EAAL,GAAUD,EAAE,GAAGt7B,EAAL,GAAU86P,UAA7C,CAAJ,CAAnB,GAAmF,CAAC,CAAD,EAAI,CAAJ,CAA1F;AACD,EAED;;;AACA,SAASjwD,KAAT,CAAep2O,CAAf,EAAkBtB,CAAlB,EAAqBvF,CAArB,EAAwB;AACtB,SAAO,gBAAK,CAAC6G,CAAC,GAAGA,CAAJ,GAAQtB,CAAC,GAAGA,CAAZ,GAAgBvF,CAAC,GAAGA,CAArB,KAA2B,IAAI6G,CAAJ,GAAQtB,CAAnC,CAAL,CAAP;AACD,EAED;;;AACA,SAAS61R,SAAT,CAAmBrF,MAAnB,EAA2B;AACzB,SAAOA,MAAM,GAAG,IAAIjgD,QAAJ,GAAS,iBAAM,CAACigD,MAAM,GAAGjgD,QAAV,KAAiB,IAAIA,QAArB,CAAN,CAAzB;AACD;;AAEM,SAASu3D,aAAT,CAAuBryF,EAAvB,EAA2BntF,EAA3B,EAA+B8vH,EAA/B,EAAmC;AACxC,MAAIvjC,MAAM,GAAG,CACX,CAACY,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAe,eAAIA,EAAE,CAAC,CAAD,CAAN,CAAf,EAA2B,eAAIA,EAAE,CAAC,CAAD,CAAN,CAA3B,CADW,EAEX,CAACntF,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAe,eAAIA,EAAE,CAAC,CAAD,CAAN,CAAf,EAA2B,eAAIA,EAAE,CAAC,CAAD,CAAN,CAA3B,CAFW,EAGX,CAAC8vH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAe,eAAIA,EAAE,CAAC,CAAD,CAAN,CAAf,EAA2B,eAAIA,EAAE,CAAC,CAAD,CAAN,CAA3B,CAHW,CAAb;;AAMA,OAAK,IAAI39O,CAAC,GAAGo6M,MAAM,CAAC,CAAD,CAAd,EAAmBvzM,CAAnB,EAAsB/N,CAAC,GAAG,CAA/B,EAAkCA,CAAC,GAAG,CAAtC,EAAyC,EAAEA,CAAF,EAAKkH,CAAC,GAAG6G,CAAlD,EAAqD;AACnDA,IAAAA,CAAC,GAAGuzM,MAAM,CAACthN,CAAD,CAAV;AACAkH,IAAAA,CAAC,CAACgL,CAAF,GAAMk2R,QAAQ,CAACr6R,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAAT,EAAcA,CAAC,CAAC,CAAD,CAAf,EAAoBA,CAAC,CAAC,CAAD,CAArB,EAA0B6G,CAAC,CAAC,CAAD,CAA3B,EAAgCA,CAAC,CAAC,CAAD,CAAjC,EAAsCA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAA9C,CAAd;AACAA,IAAAA,CAAC,CAACq6M,KAAF,GAAU,CAAC,CAAD,EAAI,CAAJ,CAAV;AACD;;AAED,MAAIizF,KAAK,GAAGrwD,KAAK,CAAC7iC,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAD,EAAiBovM,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAjB,EAAiCovM,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAjC,CAAjB;AAAA,MACIk+G,KAAK,GAAG+zH,KAAK,CAAC7iC,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAD,EAAiBovM,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAjB,EAAiCovM,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,CAAjC,CADjB;AAAA,MAEIm+G,KAAK,GAAG2sH,WAAKw3D,KAFjB;AAIAlzF,EAAAA,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqB,CAArB;AACAD,EAAAA,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqB,EAAED,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqBD,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,IAAiB,CAAxC,CAArB;AAEA,MAAIwD,IAAI,GAAG,CACT4rM,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqBD,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqBD,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,IAAiB,eAAIsiS,KAAJ,CADlD,EAET,KAAKlzF,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqBD,MAAM,CAAC,CAAD,CAAN,CAAUC,KAAV,CAAgB,CAAhB,IAAqBD,MAAM,CAAC,CAAD,CAAN,CAAUpvM,CAAV,CAAY,CAAZ,IAAiB,eAAIsiS,KAAJ,CAAhE,CAFS,CAAX;;AAKA,WAAS/S,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIK,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,QACII,MAAM,GAAG,eAAIJ,GAAJ,CADb;AAAA,QAEIhrR,CAAC,GAAG,IAAIpS,KAAJ,CAAU,CAAV,CAFR;AAAA,QAEsBE,CAFtB,CAD4B,CAK5B;;AACA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAhB,EAAmB,EAAEA,CAArB,EAAwB;AACtB,UAAIskC,CAAC,GAAGg9K,MAAM,CAACthN,CAAD,CAAd;AACAkS,MAAAA,CAAC,CAAClS,CAAD,CAAD,GAAOooS,QAAQ,CAAClL,GAAG,GAAG54P,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd,EAAmBA,CAAC,CAAC,CAAD,CAApB,EAAyBg5P,MAAzB,EAAiCC,MAAjC,EAAyCN,MAAM,GAAG34P,CAAC,CAAC,CAAD,CAAnD,CAAf;AACA,UAAI,CAACpyB,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,CAAL,EAAc,OAAOskC,CAAC,CAACi9K,KAAT;AACdrvM,MAAAA,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAUsiS,SAAS,CAACpwR,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAUskC,CAAC,CAACpyB,CAAF,CAAI,CAAJ,CAAX,CAAnB;AACD,KAX2B,CAa5B;;;AACA,QAAIqvM,KAAK,GAAG7rM,IAAI,CAACrM,KAAL,EAAZ;;AACA,SAAKrJ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAhB,EAAmB,EAAEA,CAArB,EAAwB;AACtB,UAAIiK,CAAC,GAAGjK,CAAC,IAAI,CAAL,GAAS,CAAT,GAAaA,CAAC,GAAG,CAAzB;AACA,UAAIkH,CAAC,GAAGi9O,KAAK,CAAC7iC,MAAM,CAACthN,CAAD,CAAN,CAAUkS,CAAV,CAAY,CAAZ,CAAD,EAAiBA,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,CAAjB,EAA0BkS,CAAC,CAACjI,CAAD,CAAD,CAAK,CAAL,CAA1B,CAAb;AACA,UAAIiI,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,CAAd,EAAiBkH,CAAC,GAAG,CAACA,CAAL;;AAEjB,UAAI,CAAClH,CAAL,EAAQ;AACNuhN,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACAq6M,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACD,OAHD,MAGO,IAAIlH,CAAC,IAAI,CAAT,EAAY;AACjBkH,QAAAA,CAAC,GAAGkpH,KAAK,GAAGlpH,CAAZ;AACAq6M,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACAq6M,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACD,OAJM,MAIA;AACLA,QAAAA,CAAC,GAAGmpH,KAAK,GAAGnpH,CAAZ;AACAq6M,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACAq6M,QAAAA,KAAK,CAAC,CAAD,CAAL,IAAYrvM,CAAC,CAAClS,CAAD,CAAD,CAAK,CAAL,IAAU,eAAIkH,CAAJ,CAAtB;AACD;AACF;;AAEDq6M,IAAAA,KAAK,CAAC,CAAD,CAAL,IAAY,CAAZ,EAAeA,KAAK,CAAC,CAAD,CAAL,IAAY,CAA3B;AACA,WAAOA,KAAP;AACD;;AAED,SAAOkgF,OAAP;AACD;;AAED,SAASyF,YAAT,CAAsB5iQ,CAAtB,EAAyB;AACvB,SAAOA,CAAC,CAAC,CAAD,CAAD,IAAQ0yN,aAAR,EAAiB1yN,CAAC,CAAC,CAAD,CAAD,IAAQ0yN,aAAzB,EAAkC1yN,CAAzC;AACD;;AAEM,SAASmwQ,gBAAT,GAA4B;AACjC,SAAOC,UAAU,CAAC,CAAC,CAAD,EAAI,EAAJ,CAAD,EAAU,CAAC,EAAD,EAAK,EAAL,CAAV,EAAoB,CAAC,IAAD,EAAO,CAAC,EAAR,CAApB,CAAV,CACF7+R,KADE,CACI,GADJ,EAEFqqJ,MAFE,CAEK,CAAC,IAAD,EAAO,CAAP,CAFL,CAAP;AAGD;;AAEc,SAASw0I,UAAT,CAAoBxyF,EAApB,EAAwBntF,EAAxB,EAA4B8vH,EAA5B,EAAgC;AAAE;AAC/C,MAAIp4O,CAAC,GAAG,wBAAS;AAACwT,IAAAA,IAAI,EAAE,YAAP;AAAqB4gM,IAAAA,WAAW,EAAE,CAACqB,EAAD,EAAKntF,EAAL,EAAS8vH,EAAT;AAAlC,GAAT,CAAR;AAAA,MACI1sD,CAAC,GAAG,CAAC,CAAC1rL,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CADR;AAAA,MAEIuB,CAAC,GAAG,wBAASmqL,CAAT,CAFR;AAAA,MAGIxsL,CAAC,GAAG4oS,aAAa,CAACrN,YAAY,CAACl5R,CAAC,CAACk0M,EAAD,CAAF,CAAb,EAAsBglF,YAAY,CAACl5R,CAAC,CAAC+mH,EAAD,CAAF,CAAlC,EAA2CmyK,YAAY,CAACl5R,CAAC,CAAC62O,EAAD,CAAF,CAAvD,CAHrB;AAIAl5O,EAAAA,CAAC,CAAC+xP,MAAF,GAAW,qBAAQ/xP,CAAR,CAAX;AACA,MAAI24B,CAAC,GAAG,0BAAW34B,CAAX,EAAc4uP,MAAd,CAAqBpiE,CAArB,CAAR;AAAA,MACIj4B,MAAM,GAAG57H,CAAC,CAAC47H,MADf;AAGA,SAAO57H,CAAC,CAACi2N,MAAT;;AAEAj2N,EAAAA,CAAC,CAAC47H,MAAF,GAAW,UAASv5I,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmB4gK,MAAM,CAAClyJ,CAAC,CAAC2Y,CAAD,CAAF,CAAzB,GAAkC3Y,CAAC,CAAC0vP,MAAF,CAASx9F,MAAM,EAAf,CAAzC;AACD,GAFD;;AAIA,SAAO57H,CAAC,CACHsnQ,SADE,CACQ,EADR,CAAP;AAED;;;;;;;;;;ACvHD;;AACA;;AAEO,SAAS+I,YAAT,CAAsB1X,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAI5jR,KAAK,GAAG,gBAAK,IAAI,eAAI4jR,GAAJ,CAAT,CAAZ;AACA,SAAO,CAAE,IAAI2R,YAAL,GAAe5R,MAAf,GAAwB3jR,KAAzB,EAAgCu1R,gBAAU,IAAIv1R,KAAd,CAAhC,CAAP;AACD;;AAEDq7R,YAAY,CAACj3C,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAIu4Q,MAAM,GAAG,CAACA,MAAM,GAAGv4Q,CAAC,GAAGmqR,YAAJ,GAAa,CAAvB,IAA4B5R,MAAzC;AACA,SAAO,CAACA,MAAM,GAAG,CAAT,GAAa92R,CAAC,GAAG,gBAAK62O,WAAKigD,MAAV,CAAJ,GAAwB,CAArC,GAAyC,CAA1C,EAA6C,gBAAK,IAAIA,MAAT,CAA7C,CAAP;AACD,CAHD;;AAKe,oBAAW;AACxB,SAAO,0BAAW0X,YAAX,EACF9+R,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,EAAJ,CAFL,CAAP;AAGD;;;;;;;;;;ACjBD;;AACA;;;;AAEO,SAAS00I,QAAT,CAAkB5W,IAAlB,EAAwB;AAC7B,MAAI4S,OAAO,GAAG,eAAI5S,IAAJ,CAAd;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,CAACD,MAAD,EAAS,CAACA,MAAM,GAAGA,MAAM,GAAG,eAAIA,MAAJ,CAAZ,GAA0B,CAAjC,KAAuC,eAAIC,GAAJ,IAAW,eAAID,MAAJ,CAAX,GAAyB2T,OAAO,GAAG,eAAI1T,GAAJ,CAA1E,CAAT,CAAP;AACD;;AAEDuE,EAAAA,OAAO,CAAC/jC,MAAR,GAAiBkzC,OAAO,GAAG,UAASzqS,CAAT,EAAYue,CAAZ,EAAe;AACxC,QAAIve,CAAJ,EAAOue,CAAC,IAAI,eAAIve,CAAJ,IAASA,CAAd;AACP,QAAI0qS,SAAS,GAAG,eAAI1qS,CAAJ,CAAhB;AACA,WAAO,CAACA,CAAD,EAAI,IAAI,iBAAM,gBAAK0qS,SAAS,GAAGA,SAAZ,GAAwBD,OAAO,GAAGA,OAAlC,GAA4ClsR,CAAC,GAAGA,CAArD,IAA0DmsR,SAAhE,EAA2ED,OAAO,GAAGlsR,CAArF,CAAR,CAAP;AACD,GAJuB,GAIpB,UAASve,CAAT,EAAYue,CAAZ,EAAe;AACjB,WAAO,CAACve,CAAD,EAAI,gBAAKA,CAAC,GAAGue,CAAC,GAAG,eAAIve,CAAJ,CAAJ,GAAaA,CAAhB,GAAoBue,CAA1B,CAAJ,CAAP;AACD,GAND;AAQA,SAAO+8Q,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAUmT,QAAV,EACF/+R,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,EAFR,CAAP;AAGD;;;;;;;;;;ACzBD;;AACA;;AAEA,IAAIrmD,KAAK,GAAG,gBAAK,CAAL,CAAZ;;AAEO,SAASsvD,UAAT,CAAoB5X,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,SAAO,CAAC33C,KAAK,GAAG03C,MAAR,IAAkB,IAAI,eAAI,IAAIC,GAAJ,GAAU,CAAd,CAAJ,GAAuB,CAAzC,IAA8C2R,YAA/C,EAAuDtpD,KAAK,GAAGspD,YAAR,GAAiB,eAAI3R,GAAG,GAAG,CAAV,CAAxE,CAAP;AACD;;AAED2X,UAAU,CAACn3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIw4Q,GAAG,GAAG,IAAI,gBAAKx4Q,CAAC,IAAI6gO,KAAK,GAAGspD,YAAZ,CAAN,CAAd;AACA,SAAO,CAACA,eAAS1oS,CAAT,IAAco/O,KAAK,IAAI,IAAI,eAAI,IAAI23C,GAAJ,GAAU,CAAd,CAAJ,GAAuB,CAA3B,CAAnB,CAAD,EAAoDA,GAApD,CAAP;AACD,CAHD;;AAKe,oBAAW;AACxB,SAAO,0BAAW2X,UAAX,EACFh/R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACjBD;;AACA;;;;AAEO,SAASq2R,uBAAT,CAAiClO,IAAjC,EAAuC;AAC5C,MAAIvB,OAAO,GAAG,eAAIuB,IAAJ,CAAd;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,CAACD,MAAM,GAAGR,OAAV,EAAmB,eAAIS,GAAJ,IAAWT,OAA9B,CAAP;AACD;;AAEDgF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,WAAO,CAACve,CAAC,GAAGs2R,OAAL,EAAc,gBAAK/3Q,CAAC,GAAG+3Q,OAAT,CAAd,CAAP;AACD,GAFD;;AAIA,SAAOgF,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAUyK,uBAAV,EACFmF,QADE,CACO,KADP,EACc;AADd,GAEFx7R,KAFE,CAEI,OAFJ,CAAP,CADwB,CAGH;AACtB;;;;;;;;;;ACrBD;;AACA;;;;AAEO,SAASi/R,2BAAT,CAAqC9W,IAArC,EAA2C;AAChD,MAAIvB,OAAO,GAAG,eAAIuB,IAAJ,CAAd;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,WAAO,CAACD,MAAM,GAAGR,OAAV,EAAmB,CAAC,IAAIA,OAAL,IAAgB,eAAIS,GAAG,GAAG,CAAV,CAAnC,CAAP;AACD;;AAEDuE,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,WAAO,CAACve,CAAC,GAAGs2R,OAAL,EAAc,gBAAK/3Q,CAAC,IAAI,IAAI+3Q,OAAR,CAAN,IAA0B,CAAxC,CAAP;AACD,GAFD;;AAIA,SAAOgF,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAUqT,2BAAV,EACFj/R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACpBD;;AACA;;AAEO,SAASk/R,UAAT,CAAoB9X,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5jR,KAAK,GAAG,gBAAK,KAAK,IAAI0jO,QAAT,CAAL,CAAZ;AACA,SAAO,CACL1jO,KAAK,GAAG2jR,MAAR,IAAkB,IAAI,eAAIC,GAAJ,IAAWlgD,QAAjC,CADK,EAEL1jO,KAAK,GAAG4jR,GAFH,CAAP;AAID;;AAED6X,UAAU,CAACr3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIpL,KAAK,GAAG,gBAAK,KAAK,IAAI0jO,QAAT,CAAL,CAAZ;AAAA,MACIkgD,GAAG,GAAGx4Q,CAAC,GAAGpL,KADd;AAEA,SAAO,CACLnT,CAAC,IAAImT,KAAK,IAAI,IAAI,eAAI4jR,GAAJ,IAAWlgD,QAAnB,CAAT,CADI,EAELkgD,GAFK,CAAP;AAID,CAPD;;AASe,oBAAW;AACxB,SAAO,0BAAW6X,UAAX,EACFl/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACvBD;;AACA;;AAEO,SAASm/R,UAAT,CAAoB/X,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5jR,KAAK,GAAG,gBAAK,IAAI,IAAI,eAAI,eAAI4jR,GAAJ,CAAJ,CAAb,CAAZ;AACA,SAAO,CACL,IAAI,gBAAK,IAAIlgD,QAAT,CAAJ,GAAmBigD,MAAnB,GAA4B3jR,KADvB,EAEL,gBAAK4jR,GAAL,IAAY,gBAAK,IAAIlgD,QAAJ,GAAS,CAAd,CAAZ,IAAgC,IAAI1jO,KAApC,CAFK,CAAP;AAID;;AAED07R,UAAU,CAACt3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIpL,KAAK,GAAG,IAAI,eAAIoL,CAAJ,IAAS,gBAAK,IAAIs4N,QAAJ,GAAS,CAAd,CAAzB;AACA,SAAO,CACL72O,CAAC,GAAG,gBAAK,IAAI62O,QAAT,CAAJ,IAAoB,IAAI1jO,KAAxB,CADK,EAEL,gBAAKoL,CAAL,IAAU,gBAAK,CAAC,IAAIpL,KAAK,GAAGA,KAAb,IAAsB,CAA3B,CAFL,CAAP;AAID,CAND;;AAQe,oBAAW;AACxB,SAAO,0BAAW07R,UAAX,EACFn/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACtBD;;AACA;;AAEO,SAASo/R,UAAT,CAAoBhY,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5/Q,CAAC,GAAG,gBAAK0/N,YAAM,IAAIA,QAAV,CAAL,CAAR;AACA,SAAO,CACL,IAAI1/N,CAAJ,GAAQ2/Q,MAAR,IAAkB,IAAI,gBAAK,IAAI,IAAIC,GAAJ,GAAUA,GAAV,IAAiBlgD,WAAKA,QAAtB,CAAT,CAAtB,CADK,EAEL,IAAI1/N,CAAJ,GAAQ4/Q,GAFH,CAAP;AAID;;AAED+X,UAAU,CAACv3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIpH,CAAC,GAAG,gBAAK0/N,YAAM,IAAIA,QAAV,CAAL,IAAsB,CAA9B;AACA,SAAO,CACL72O,CAAC,GAAGmX,CAAJ,IAAS,IAAI,gBAAK,IAAIoH,CAAC,GAAGA,CAAJ,IAAS,IAAIs4N,QAAb,KAAoB,IAAIA,QAAxB,CAAT,CAAb,CADK,EAELt4N,CAAC,GAAGpH,CAAJ,GAAQ,CAFH,CAAP;AAID,CAND;;AAQe,oBAAW;AACxB,SAAO,0BAAW23R,UAAX,EACFp/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACtBD;;AACA;;AAEO,SAASq/R,UAAT,CAAoBjY,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5/Q,CAAC,GAAG,CAAC,IAAIwhO,YAAL,IAAe,eAAIo+C,GAAJ,CAAvB;AACAA,EAAAA,GAAG,IAAI,CAAP;;AACA,OAAK,IAAIl9R,CAAC,GAAG,CAAR,EAAW21F,KAAK,GAAG7tF,QAAxB,EAAkC9H,CAAC,GAAG,EAAJ,IAAU,eAAI21F,KAAJ,IAAatY,aAAzD,EAAkEr9E,CAAC,EAAnE,EAAuE;AACrE,QAAIs9R,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AACAA,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAACunM,GAAG,GAAG,eAAIA,GAAJ,KAAYI,MAAM,GAAG,CAArB,CAAN,GAAgChgR,CAAjC,KAAuC,IAAIggR,MAAJ,IAAc,IAAIA,MAAlB,CAAvC,CAAf;AACD;;AACD,SAAO,CACL,IAAI,gBAAKtgD,YAAM,IAAIA,QAAV,CAAL,CAAJ,GAA0BigD,MAA1B,IAAoC,IAAI,eAAIC,GAAJ,CAAxC,CADK,EAEL,IAAI,gBAAKlgD,YAAM,IAAIA,QAAV,CAAL,CAAJ,GAA0B,eAAIkgD,GAAJ,CAFrB,CAAP;AAID;;AAEDgY,UAAU,CAACx3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIyzO,CAAC,GAAGzzO,CAAC,GAAG,gBAAK,CAAC,IAAIs4N,QAAL,IAAWA,QAAhB,CAAJ,GAA0B,CAAlC;AAAA,MACI1/N,CAAC,GAAG,gBAAK66O,CAAL,CADR;AAAA,MAEI1rP,CAAC,GAAG,eAAI6Q,CAAJ,CAFR;AAGA,SAAO,CACLnX,CAAC,IAAI,IAAI,gBAAK62O,YAAM,IAAIA,QAAV,CAAL,CAAJ,IAA2B,IAAIvwO,CAA/B,CAAJ,CADI,EAEL,gBAAK,CAAC6Q,CAAC,GAAG66O,CAAC,IAAI1rP,CAAC,GAAG,CAAR,CAAN,KAAqB,IAAIqyO,YAAzB,CAAL,CAFK,CAAP;AAID,CARD;;AAUe,oBAAW;AACxB,SAAO,0BAAWo2D,UAAX,EACFr/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC7BD;;AACA;;AAEO,SAASs/R,UAAT,CAAoBlY,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,SAAO,CACLD,MAAM,IAAI,IAAI,eAAIC,GAAJ,CAAR,CAAN,GAA0B,gBAAK,IAAIlgD,QAAT,CADrB,EAEL,IAAIkgD,GAAJ,GAAU,gBAAK,IAAIlgD,QAAT,CAFL,CAAP;AAID;;AAEDm4D,UAAU,CAACz3C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIpH,CAAC,GAAG,gBAAK,IAAI0/N,QAAT,CAAR;AAAA,MACIkgD,GAAG,GAAGx4Q,CAAC,GAAGpH,CAAJ,GAAQ,CADlB;AAEA,SAAO,CACLA,CAAC,GAAGnX,CAAJ,IAAS,IAAI,eAAI+2R,GAAJ,CAAb,CADK,EAELA,GAFK,CAAP;AAID,CAPD;;AASe,oBAAW;AACxB,SAAO,0BAAWiY,UAAX,EACFt/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACtBD;;AACA;;AAEO,SAASu/R,UAAT,CAAoBnY,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5/Q,CAAC,GAAG,CAAC,IAAIwhO,YAAL,IAAe,eAAIo+C,GAAJ,CAAvB;;AACA,OAAK,IAAIl9R,CAAC,GAAG,CAAR,EAAW21F,KAAK,GAAG7tF,QAAxB,EAAkC9H,CAAC,GAAG,EAAJ,IAAU,eAAI21F,KAAJ,IAAatY,aAAzD,EAAkEr9E,CAAC,EAAnE,EAAuE;AACrEk9R,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAACunM,GAAG,GAAG,eAAIA,GAAJ,CAAN,GAAiB5/Q,CAAlB,KAAwB,IAAI,eAAI4/Q,GAAJ,CAA5B,CAAf;AACD;;AACD5/Q,EAAAA,CAAC,GAAG,gBAAK,IAAI0/N,QAAT,CAAJ;AACA,SAAO,CACLigD,MAAM,IAAI,IAAI,eAAIC,GAAJ,CAAR,CAAN,GAA0B5/Q,CADrB,EAEL,IAAI4/Q,GAAJ,GAAU5/Q,CAFL,CAAP;AAID;;AAED83R,UAAU,CAAC13C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIza,CAAC,GAAG,IAAI60O,YAAZ;AAAA,MACIxhO,CAAC,GAAG,gBAAKrT,CAAC,GAAG,CAAT,CADR;AAEA,SAAO,CACL9D,CAAC,GAAG,CAAJ,GAAQmX,CAAR,IAAa,IAAI,eAAIoH,CAAC,IAAIpH,CAAT,CAAjB,CADK,EAEL,gBAAK,CAACoH,CAAC,GAAG,eAAIA,CAAJ,CAAL,IAAeza,CAApB,CAFK,CAAP;AAID,CAPD;;AASe,oBAAW;AACxB,SAAO,0BAAWmrS,UAAX,EACFv/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC3BD;;AACA;;AACA;;AAEA,IAAIw/R,UAAU,GAAG,IAAI,IAAIzG,WAAzB;;AAEO,SAAS0G,YAAT,CAAsBrY,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAIvoN,EAAE,GAAG,eAAIsoN,MAAM,IAAI,CAAd,CAAT;AAAA,MACInwD,EAAE,GAAG,eAAImwD,MAAJ,CADT;AAAA,MAEI3/Q,CAAC,GAAG,gBAAK,eAAI4/Q,GAAJ,CAAL,CAFR;AAAA,MAGI7jP,EAAE,GAAG,eAAI6jP,GAAG,IAAI,CAAX,CAHT;AAAA,MAIIx5R,CAAC,GAAG,eAAIw5R,GAAJ,KAAY7jP,EAAE,GAAGu1P,cAAQ9hE,EAAR,GAAaxvN,CAA9B,CAJR;AAAA,MAKI7Q,CAAC,GAAG,gBAAK,KAAK,IAAI/I,CAAC,GAAGA,CAAb,CAAL,CALR;AAAA,MAMIwO,CAAC,GAAG,gBAAK,CAAC08R,cAAQv1P,EAAR,GAAa,CAACyzL,EAAE,GAAGn4J,EAAN,IAAYr3D,CAA1B,KAAgCsxR,cAAQv1P,EAAR,GAAa,CAACyzL,EAAE,GAAGn4J,EAAN,IAAYr3D,CAAzD,CAAL,CANR;AAOA,SAAO,CACL+3R,UAAU,IAAI5oS,CAAC,IAAIyF,CAAC,GAAG,IAAIA,CAAZ,CAAD,GAAkB,IAAI,eAAIA,CAAJ,CAA1B,CADL,EAELmjS,UAAU,IAAI5oS,CAAC,GAAG/I,CAAJ,IAASwO,CAAC,GAAG,IAAIA,CAAjB,IAAsB,IAAI,gBAAKxO,CAAL,CAA9B,CAFL,CAAP;AAID;;AAED4xS,YAAY,CAAC53C,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAI,EAAE4f,CAAC,GAAGktQ,kBAAU9zC,MAAV,CAAiBv3P,CAAC,GAAG,GAArB,EAA0Bue,CAAC,GAAG,KAA9B,CAAN,CAAJ,EAAiD,OAAO,IAAP;AACjD,MAAIu4Q,MAAM,GAAG34P,CAAC,CAAC,CAAD,CAAd;AAAA,MAAmB44P,GAAG,GAAG54P,CAAC,CAAC,CAAD,CAA1B;AAAA,MAA+BtkC,CAAC,GAAG,EAAnC;AAAA,MAAuCskC,CAAvC;AACAn+B,EAAAA,CAAC,IAAIkvS,UAAL,EAAiB3wR,CAAC,IAAI2wR,UAAtB;;AACA,KAAG;AACD,QAAIE,EAAE,GAAGtY,MAAM,GAAG,CAAlB;AAAA,QACItgC,EAAE,GAAGugC,GAAG,GAAG,CADf;AAAA,QAEIvoN,EAAE,GAAG,eAAI4gO,EAAJ,CAFT;AAAA,QAGIzoE,EAAE,GAAG,eAAIyoE,EAAJ,CAHT;AAAA,QAII3gO,EAAE,GAAG,eAAI+nL,EAAJ,CAJT;AAAA,QAKItjN,EAAE,GAAG,eAAIsjN,EAAJ,CALT;AAAA,QAMI64C,IAAI,GAAG,eAAItY,GAAJ,CANX;AAAA,QAOI5/Q,CAAC,GAAG,gBAAKk4R,IAAL,CAPR;AAAA,QAQI9xS,CAAC,GAAGkxE,EAAE,IAAIv7B,EAAE,GAAGu1P,cAAQ9hE,EAAR,GAAaxvN,CAAtB,CARV;AAAA,QASIspE,EAAE,GAAGljF,CAAC,GAAGA,CATb;AAAA,QAUI+I,CAAC,GAAG,gBAAK,KAAK,IAAIm6E,EAAT,CAAL,CAVR;AAAA,QAWI7H,EAAE,GAAI6vN,cAAQv1P,EAAR,GAAa,CAACyzL,EAAE,GAAGn4J,EAAN,IAAYr3D,CAXnC;AAAA,QAYIihE,EAAE,GAAIqwN,cAAQv1P,EAAR,GAAa,CAACyzL,EAAE,GAAGn4J,EAAN,IAAYr3D,CAZnC;AAAA,QAaIkhE,EAAE,GAAGO,EAAE,GAAGR,EAbd;AAAA,QAcIrsE,CAAC,GAAG,gBAAKssE,EAAL,CAdR;AAAA,QAeIi3N,IAAI,GAAGvjS,CAAC,GAAG,IAAIA,CAfnB;AAAA,QAgBIwjS,IAAI,GAAGxjS,CAAC,GAAG,IAAIA,CAhBnB;AAAA,QAiBI25Q,EAAE,GAAGp/Q,CAAC,GAAGgpS,IAAJ,GAAW,IAAI,eAAIvjS,CAAJ,CAAf,GAAwB/L,CAjBjC;AAAA,QAkBI2lR,EAAE,GAAGr/Q,CAAC,GAAG/I,CAAJ,GAAQgyS,IAAR,GAAe,IAAI,gBAAKhyS,CAAL,CAAnB,GAA6BghB,CAlBtC;AAAA,QAmBIixR,iBAAiB,GAAG/gO,EAAE,IAAI85N,gBAAUpxR,CAAV,GAAcq3D,EAAd,GAAmBiS,EAAnB,GAAwBhS,EAnBtD;AAAA,QAoBIghO,cAAc,GAAG,CAAChH,cAAQ9hE,EAAR,GAAazzL,EAAb,GAAkB/7B,CAAnB,KAAyB,KAAK+7B,EAAE,GAAGu1P,cAAQ9hE,EAAR,GAAaxvN,CAAvB,KAA6B+7B,EAAE,GAAGu1P,cAAQ9hE,EAAR,GAAaxvN,CAA/C,IAAoDA,CAA7E,CApBrB;AAAA,QAqBIu4R,YAAY,GAAG,CAAC,GAAD,GAAOnyS,CAAP,GAAW+I,CAAX,GAAeA,CAAf,GAAmBA,CArBtC;AAAA,QAsBIqpS,iBAAiB,GAAGD,YAAY,GAAGF,iBAtBvC;AAAA,QAuBII,cAAc,GAAGF,YAAY,GAAGD,cAvBpC;AAAA,QAwBIz9C,CAAC,GAAG,CAACA,CAAC,GAAG,IAAI9+M,EAAJ,GAASu1P,cAAQtxR,CAAR,IAAawvN,EAAE,GAAGn4J,EAAlB,CAAd,IAAuCwjL,CAAvC,GAA2CjmP,CAxBnD;AAAA,QAyBI8jS,iBAAiB,GAAG,CAACpH,cAAQ9hE,EAAR,GAAazzL,EAAb,GAAkB/7B,CAAlB,GAAsBk4R,IAAvB,IAA+Br9C,CAzBvD;AAAA,QA0BI89C,cAAc,GAAG,EAAErH,cAAQj6N,EAAR,GAAaC,EAAf,KAAsBt3D,CAAC,GAAG66O,CAA1B,CA1BrB;AAAA,QA2BI+9C,iBAAiB,GAAGT,IAAI,GAAGK,iBAAP,GAA2B,IAAIE,iBAAJ,GAAwB9jS,CAAnD,GAAuDzF,CAAC,IAAIupS,iBAAiB,GAAGA,iBAAiB,GAAGx3N,EAA5C,CA3BhF;AAAA,QA4BI23N,cAAc,GAAGV,IAAI,GAAGM,cAAP,GAAwB,IAAIE,cAAJ,GAAqB/jS,CAA7C,GAAiDzF,CAAC,IAAIwpS,cAAc,GAAGA,cAAc,GAAGz3N,EAAtC,CA5BvE;AAAA,QA6BI43N,iBAAiB,GAAG1yS,CAAC,GAAGgyS,IAAJ,GAAWI,iBAAX,GAA+B,IAAIH,iBAAJ,IAAyB,IAAI/uN,EAA7B,CAA/B,GAAkEn6E,CAAC,GAAGipS,IAAJ,GAAWC,iBAA7E,GAAiGlpS,CAAC,GAAG/I,CAAJ,IAASsyS,iBAAiB,GAAGA,iBAAiB,GAAGx3N,EAAjD,CA7BzH;AAAA,QA8BI63N,cAAc,GAAG3yS,CAAC,GAAGgyS,IAAJ,GAAWK,cAAX,GAA4B,IAAIH,cAAJ,IAAsB,IAAIhvN,EAA1B,CAA5B,GAA4Dn6E,CAAC,GAAGipS,IAAJ,GAAWE,cAAvE,GAAwFnpS,CAAC,GAAG/I,CAAJ,IAASuyS,cAAc,GAAGA,cAAc,GAAGz3N,EAA3C,CA9B7G;AAAA,QA+BImyD,WAAW,GAAGwlK,cAAc,GAAGC,iBAAjB,GAAqCC,cAAc,GAAGH,iBA/BxE;;AAgCA,QAAI,CAACvlK,WAAL,EAAkB;AAClB,QAAImwJ,WAAW,GAAG,CAAChV,EAAE,GAAGqqB,cAAL,GAAsBtqB,EAAE,GAAGwqB,cAA5B,IAA8C1lK,WAAhE;AAAA,QACIowJ,QAAQ,GAAG,CAAClV,EAAE,GAAGuqB,iBAAL,GAAyBtqB,EAAE,GAAGoqB,iBAA/B,IAAoDvlK,WADnE;AAEAssJ,IAAAA,MAAM,IAAI6D,WAAV;AACA5D,IAAAA,GAAG,GAAG,eAAI,CAACp+C,YAAL,EAAa,eAAIA,YAAJ,EAAYo+C,GAAG,GAAG6D,QAAlB,CAAb,CAAN;AACD,GAtCD,QAsCS,CAAC,eAAID,WAAJ,IAAmBzjN,aAAnB,IAA8B,eAAI0jN,QAAJ,IAAgB1jN,aAA/C,KAA2D,EAAEr9E,CAAF,GAAM,CAtC1E;;AAuCA,SAAO,eAAI,eAAIk9R,GAAJ,IAAWp+C,YAAf,IAAyBzhK,aAAzB,GAAmC,CAAC,CAAD,EAAI6/M,GAAJ,CAAnC,GAA8Cl9R,CAAC,IAAI,CAACi9R,MAAD,EAASC,GAAT,CAA1D;AACD,CA5CD;;AA8Ce,oBAAW;AACxB,SAAO,0BAAWoY,YAAX,EACFz/R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACrED;;AACA;;AAEA,IAAIygS,MAAM,GAAG,eAAI,KAAKt/C,aAAT,CAAb;;AAEO,SAASu/C,QAAT,CAAkBtZ,MAAlB,EAA0BC,GAA1B,EAA+B;AACpC,MAAIx5R,CAAC,GAAG,eAAIw5R,GAAG,GAAG,CAAV,CAAR;AACA,SAAO,CAACD,MAAM,GAAGqZ,MAAT,GAAkB,gBAAK,IAAI5yS,CAAC,GAAGA,CAAb,CAAnB,EAAoC,CAAC,IAAI4yS,MAAL,IAAe5yS,CAAnD,CAAP;AACD;;AAED6yS,QAAQ,CAAC74C,MAAT,GAAkB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/B,MAAIhhB,CAAC,GAAGghB,CAAC,IAAI,IAAI4xR,MAAR,CAAT;AACA,SAAO,CAACnwS,CAAC,IAAIA,CAAC,IAAImwS,MAAM,GAAG,gBAAK,IAAI5yS,CAAC,GAAGA,CAAb,CAAb,CAAP,EAAsC,IAAI,gBAAKA,CAAL,CAA1C,CAAP;AACD,CAHD;;AAKe,oBAAW;AACxB,SAAO,0BAAW6yS,QAAX,EACF1gS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AClBD;;AACA;;AAEO,SAAS2gS,UAAT,CAAoBvZ,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAI5/Q,CAAC,GAAG4/Q,GAAG,GAAG,CAAd;AAAA,MAAiBuZ,IAAI,GAAG,eAAIn5R,CAAJ,CAAxB;AACA,SAAO,CAAE,IAAI2/Q,MAAJ,GAAa4R,YAAb,GAAsB,eAAI3R,GAAJ,CAAtB,GAAiCuZ,IAAjC,GAAwCA,IAA1C,EAAgD5H,eAAS,eAAIvxR,CAAJ,CAAzD,CAAP;AACD;;AAEDk5R,UAAU,CAAC94C,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIpH,CAAC,GAAG,gBAAKoH,CAAC,GAAGmqR,YAAT,CAAR;AAAA,MAA0B4H,IAAI,GAAG,eAAIn5R,CAAJ,CAAjC;AAAA,MAAyC4/Q,GAAG,GAAG,IAAI5/Q,CAAnD;AACA,SAAO,CAACnX,CAAC,GAAG0oS,YAAJ,GAAa,CAAb,IAAkB,eAAI3R,GAAJ,IAAWuZ,IAAX,GAAkBA,IAApC,CAAD,EAA4CvZ,GAA5C,CAAP;AACD,CAHD;;AAKe,oBAAW;AACxB,SAAO,0BAAWsZ,UAAX,EACF3gS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AChBD;;AACA;;AACA;;AAEO,SAAS6gS,oBAAT,CAA8Bp9R,KAA9B,EAAqC;AAC1C,MAAI+C,IAAI,GAAG,IAAI/C,KAAf;AAAA,MACIulR,UAAU,GAAGj8F,GAAG,CAACo6C,QAAD,EAAK,CAAL,CAAH,CAAW,CAAX,IAAgBp6C,GAAG,CAAC,CAACo6C,QAAF,EAAM,CAAN,CAAH,CAAY,CAAZ,CADjC;AAAA,MAEI4nD,KAAK,GAAGhiG,GAAG,CAAC,CAAD,EAAIk8C,YAAJ,CAAH,CAAe,CAAf,IAAoBl8C,GAAG,CAAC,CAAD,EAAI,CAACk8C,YAAL,CAAH,CAAgB,CAAhB,CAFhC;AAAA,MAGI0nC,KAAK,GAAG,gBAAK,IAAIoe,KAAJ,GAAY/F,UAAjB,CAHZ;;AAKA,WAASj8F,GAAT,CAAaq6F,MAAb,EAAqBC,GAArB,EAA0B;AACxB,QAAIyZ,MAAM,GAAG,eAAIzZ,GAAJ,CAAb;AAAA,QACI0Z,MAAM,GAAG,eAAI1Z,GAAJ,CADb;AAEA,WAAO,CACLyZ,MAAM,IAAIt6R,IAAI,GAAG/C,KAAK,GAAGq9R,MAAnB,CAAN,GAAmC1Z,MAD9B,EAEL5gR,IAAI,GAAG6gR,GAAP,GAAa5jR,KAAK,GAAGs9R,MAFhB,CAAP;AAID;;AAED,WAASnV,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI54P,CAAC,GAAGs+J,GAAG,CAACq6F,MAAD,EAASC,GAAT,CAAX;AACA,WAAO,CAAC54P,CAAC,CAAC,CAAD,CAAD,GAAOkiP,KAAR,EAAeliP,CAAC,CAAC,CAAD,CAAD,GAAOkiP,KAAtB,CAAP;AACD;;AAED,WAASqwB,eAAT,CAAyB3Z,GAAzB,EAA8B;AAC5B,WAAOuE,OAAO,CAAC,CAAD,EAAIvE,GAAJ,CAAP,CAAgB,CAAhB,CAAP;AACD;;AAEDuE,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIw4Q,GAAG,GAAG,mBAAM2Z,eAAN,EAAuBnyR,CAAvB,CAAV;AAAA,QACIu4Q,MAAM,GAAG92R,CAAC,GAAGqgR,KAAJ,IAAaltQ,KAAK,GAAG+C,IAAI,GAAG,eAAI6gR,GAAJ,CAA5B,CADb;AAEA,WAAO,CAACD,MAAD,EAASC,GAAT,CAAP;AACD,GAJD;;AAMA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAInoR,KAAK,GAAG,GAAZ;AAAA,MACIm+E,CAAC,GAAG,iCAAkBi/M,oBAAlB,CADR;AAAA,MAEIpyQ,CAAC,GAAGmzD,CAAC,CAACn+E,KAAD,CAFT;;AAIAgrB,EAAAA,CAAC,CAAChrB,KAAF,GAAU,UAASqN,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACn+E,KAAK,GAAG,CAACqN,CAAV,CAApB,GAAmCrN,KAA1C;AACD,GAFD;;AAIA,SAAOgrB,CAAC,CACHzuB,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;AChDD;;AACA;;AAEA,SAASihS,cAAT,CAAwBv1F,KAAxB,EAA+B;AAC7B,SAAO,CAACA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAZ,EAAe,gBAAK,eAAIA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAey1C,aAAnB,CAAL,IAAoCC,aAAnD,CAAP;AACD;;AAED,SAAS8/C,aAAT,CAAuBx1F,KAAvB,EAA8B;AAC5B,SAAO,CAACA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAZ,EAAe,IAAI,gBAAK,eAAIA,KAAK,CAAC,CAAD,CAAL,GAAWy1C,aAAf,CAAL,CAAJ,GAAoCC,aAAnD,CAAP;AACD;;AAEc,kBAAS+/C,cAAT,EAAyB;AACtC,MAAIA,cAAc,IAAI,IAAtB,EAA4BA,cAAc,GAAGC,sBAAjB;AAC5B,MAAIjO,UAAU,GAAGgO,cAAc,EAA/B;AAAA,MACIE,eAAe,GAAG,iCAAqBrhS,KAArB,CAA2BohP,aAA3B,EAAoC/iK,SAApC,CAA8C,CAA9C,EAAiD03M,SAAjD,CAA2D,IAA3D,EAAiEnrF,SAAjE,CAA2E,CAAC,CAAD,EAAI,CAAJ,CAA3E,CADtB,CAFsC,CAGoE;;AAE1G,WAAS02F,OAAT,CAAiB51F,KAAjB,EAAwB;AACtB,WAAOynF,UAAU,CAAC8N,cAAc,CAACv1F,KAAD,CAAf,CAAjB;AACD;;AAED,MAAIynF,UAAU,CAACtrC,MAAf,EAAuBy5C,OAAO,CAACz5C,MAAR,GAAiB,UAASn8C,KAAT,EAAgB;AACtD,WAAOw1F,aAAa,CAAC/N,UAAU,CAACtrC,MAAX,CAAkBn8C,KAAlB,CAAD,CAApB;AACD,GAFsB;;AAIvB41F,EAAAA,OAAO,CAACvuH,MAAR,GAAiB,UAASA,MAAT,EAAiB;AAChC,QAAIh0G,EAAE,GAAGo0N,UAAU,CAACpgH,MAAX,CAAkBA,MAAlB,CAAT;AAAA,QAAoCj0G,EAAE,GAAGuiO,eAAe,CAACtuH,MAAhB,CAAuB;AAC9D24B,MAAAA,KAAK,EAAE,UAAS07E,MAAT,EAAiBC,GAAjB,EAAsB;AAAEtoN,QAAAA,EAAE,CAAC2sI,KAAH,CAAS07E,MAAM,GAAG,CAAlB,EAAqB,gBAAK,eAAI,CAACC,GAAD,GAAO,CAAP,GAAWlmC,aAAf,CAAL,IAAgCC,aAArD;AAAgE,OADjC;AAE9DvU,MAAAA,SAAS,EAAE,YAAW;AAAE9tK,QAAAA,EAAE,CAAC8tK,SAAH;AAAiB,OAFqB;AAG9DE,MAAAA,OAAO,EAAE,YAAW;AAAEhuK,QAAAA,EAAE,CAACguK,OAAH;AAAe,OAHyB;AAI9Ds5C,MAAAA,YAAY,EAAE,YAAW;AAAEtnN,QAAAA,EAAE,CAACsnN,YAAH;AAAoB,OAJe;AAK9DC,MAAAA,UAAU,EAAE,YAAW;AAAEvnN,QAAAA,EAAE,CAACunN,UAAH;AAAkB;AALmB,KAAvB,CAAzC;AAOAxnN,IAAAA,EAAE,CAACgnN,MAAH,GAAY/mN,EAAE,CAAC+mN,MAAf;AACA,WAAOhnN,EAAP;AACD,GAVD;;AAYA,WAAS4iI,QAAT,CAAkBh2M,IAAlB,EAAwB;AACtB41S,IAAAA,OAAO,CAAC51S,IAAD,CAAP,GAAgB,YAAW;AACzB,aAAOxB,SAAS,CAACT,MAAV,IAAoB0pS,UAAU,CAACznS,IAAD,CAAV,CAAiBlB,KAAjB,CAAuB2oS,UAAvB,EAAmCjpS,SAAnC,GAA+Co3S,OAAnE,IAA8EnO,UAAU,CAACznS,IAAD,CAAV,EAArF;AACD,KAFD;AAGD;;AAED41S,EAAAA,OAAO,CAAC58C,MAAR,GAAiB,UAAS5zO,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB43S,eAAe,CAAC38C,MAAhB,CAAuB5zO,CAAvB,GAA2BwwR,OAA/C,IAA0DD,eAAe,CAAC38C,MAAhB,EAAjE;AACD,GAFD;;AAIA48C,EAAAA,OAAO,CAACj3I,MAAR,GAAiB,UAASv5I,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0pS,UAAU,CAAC9oI,MAAX,CAAkB42I,cAAc,CAACnwR,CAAD,CAAhC,GAAsCwwR,OAA1D,IAAqEJ,aAAa,CAAC/N,UAAU,CAAC9oI,MAAX,EAAD,CAAzF;AACD,GAFD;;AAIAq3C,EAAAA,QAAQ,CAAC,OAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,WAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,YAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,WAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,WAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,SAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,UAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,OAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,WAAD,CAAR;AACAA,EAAAA,QAAQ,CAAC,WAAD,CAAR;AAEA,SAAO4/F,OAAO,CACTthS,KADE,CACI,KADJ,CAAP;AAED;;;;;;;;;;AC/DD;;AACA;;AAEO,SAASuhS,UAAT,CAAoBjoL,GAApB,EAAyBjhH,CAAzB,EAA4B;AACjC,MAAIoP,CAAC,GAAG,IAAI0/N,QAAJ,GAAS9uO,CAAjB;AAAA,MACI+tP,IAAI,GAAG9sI,GAAG,GAAGA,GADjB;;AAGA,WAASsyK,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI54P,CAAC,GAAG,uCAAwB24P,MAAxB,EAAgCC,GAAhC,CAAR;AAAA,QACI/2R,CAAC,GAAGm+B,CAAC,CAAC,CAAD,CADT;AAAA,QAEI5f,CAAC,GAAG4f,CAAC,CAAC,CAAD,CAFT;AAAA,QAGI+tK,EAAE,GAAGlsM,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAHrB;;AAKA,QAAI2tL,EAAE,GAAG4pD,IAAT,EAAe;AACb,UAAIjuP,CAAC,GAAG,gBAAKqkM,EAAL,CAAR;AAAA,UACIh+C,KAAK,GAAG,iBAAM3vI,CAAN,EAASve,CAAT,CADZ;AAAA,UAEIksS,MAAM,GAAG/0R,CAAC,GAAG,iBAAM+2I,KAAK,GAAG/2I,CAAd,CAFjB;AAAA,UAGIhE,KAAK,GAAG+6I,KAAK,GAAGg+I,MAHpB;AAAA,UAIIgF,WAAW,GAAGloL,GAAG,GAAG,eAAI71G,KAAJ,CAJxB;AAAA,UAKIg+R,EAAE,GAAG,CAACnoL,GAAG,GAAG,eAAI71G,KAAJ,CAAN,GAAmBA,KAAK,GAAG,eAAI+9R,WAAJ,CAA5B,KAAiDv4D,eAASu4D,WAA1D,CALT;AAAA,UAMIE,EAAE,GAAGC,aAAa,CAACl+R,KAAD,EAAQg+R,EAAR,CANtB;AAAA,UAOI54S,CAAC,GAAG,CAACs+O,WAAK7tH,GAAN,IAAasoL,gBAAgB,CAACF,EAAD,EAAKF,WAAL,EAAkBr6D,QAAlB,CAPrC;AASA72O,MAAAA,CAAC,GAAG6H,CAAJ;AACA,UAAIhO,CAAC,GAAG,EAAR;AAAA,UAAY21F,KAAZ;;AACA,SAAG;AACDxvF,QAAAA,CAAC,IAAIwvF,KAAK,GAAG,CAACw5B,GAAG,GAAGsoL,gBAAgB,CAACF,EAAD,EAAKF,WAAL,EAAkBlxS,CAAlB,CAAhB,GAAuCzH,CAA7C,GAAiDsP,CAAlD,KAAwDupS,EAAE,CAACpxS,CAAD,CAAF,GAAQzH,CAAhE,CAAb;AACD,OAFD,QAES,eAAIi3F,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAFvC;;AAIA0kB,MAAAA,CAAC,GAAGpL,KAAK,GAAG,eAAInT,CAAJ,CAAZ;AACA,UAAIA,CAAC,GAAG24O,YAAR,EAAgBp6N,CAAC,IAAI4yR,EAAE,IAAInxS,CAAC,GAAG24O,YAAR,CAAP;AAEhB,UAAIt7O,CAAC,GAAG,eAAI6uS,MAAJ,CAAR;AAAA,UACI5lS,CAAC,GAAG,eAAI4lS,MAAJ,CADR;AAEA/tQ,MAAAA,CAAC,CAAC,CAAD,CAAD,GAAOn+B,CAAC,GAAGsG,CAAJ,GAAQiY,CAAC,GAAGlhB,CAAnB;AACA8gC,MAAAA,CAAC,CAAC,CAAD,CAAD,GAAOn+B,CAAC,GAAG3C,CAAJ,GAAQkhB,CAAC,GAAGjY,CAAnB;AACD;;AACD,WAAO63B,CAAP;AACD;;AAEDm9P,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI2tL,EAAE,GAAGlsM,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAArB;;AACA,QAAI2tL,EAAE,GAAG4pD,IAAT,EAAe;AACb,UAAIjuP,CAAC,GAAG,gBAAKqkM,EAAL,CAAR;AAAA,UACIh+C,KAAK,GAAG,iBAAM3vI,CAAN,EAASve,CAAT,CADZ;AAAA,UAEIksS,MAAM,GAAG/0R,CAAC,GAAG,iBAAM+2I,KAAK,GAAG/2I,CAAd,CAFjB;AAAA,UAGIo6R,MAAM,GAAGrjJ,KAAK,GAAGg+I,MAHrB;AAKAlsS,MAAAA,CAAC,GAAG6H,CAAC,GAAG,eAAI0pS,MAAJ,CAAR;AACAhzR,MAAAA,CAAC,GAAG1W,CAAC,GAAG,eAAI0pS,MAAJ,CAAR;AAEA,UAAIC,QAAQ,GAAGxxS,CAAC,GAAG24O,YAAnB;AAAA,UACIixD,IAAI,GAAG,eAAI5pS,CAAJ,CADX;AAAA,UAEImT,KAAK,GAAGoL,CAAC,GAAGqrR,IAFhB;AAAA,UAGIp6M,KAAK,GAAGxvF,CAAC,GAAG24O,YAAJ,GAAah3O,QAAb,GAAwB,CAHpC;AAAA,UAII9H,CAAC,GAAG,EAJR;;AAMA,aAAO,IAAP,EAAa;AACX,YAAI43S,WAAW,GAAGzoL,GAAG,GAAG,eAAI71G,KAAJ,CAAxB;AAAA,YACI+9R,WAAW,GAAGloL,GAAG,GAAG,eAAI71G,KAAJ,CADxB;AAAA,YAEIu+R,cAAc,GAAG,eAAIR,WAAJ,CAFrB;AAAA,YAGIS,kBAAkB,GAAGh5D,eAASu4D,WAHlC;AAAA,YAIIC,EAAE,GAAG,CAACM,WAAW,GAAGt+R,KAAK,GAAGu+R,cAAvB,IAAyCC,kBAJlD;AAAA,YAKIP,EAAE,GAAGC,aAAa,CAACl+R,KAAD,EAAQg+R,EAAR,CALtB;AAOA,YAAI,eAAI3hN,KAAJ,IAAaomK,cAAb,IAAyB,CAAC,GAAE/7P,CAAhC,EAAmC;AAEnCsZ,QAAAA,KAAK,IAAIq8E,KAAK,GAAG,CAACr8E,KAAK,GAAGy2R,IAAR,GAAeuH,EAAE,GAAGK,QAApB,GAA+BjzR,CAAhC,KACfqrR,IAAI,GAAG4H,QAAQ,GAAG,CAAX,IACLG,kBAAkB,IAAIT,WAAW,GAAG/9R,KAAK,GAAGs+R,WAAR,GAAsB,eAAIP,WAAJ,CAApC,GAAuDQ,cAA3D,CAAlB,GACAD,WAAW,IAAIA,WAAW,GAAGt+R,KAAK,GAAGu+R,cAA1B,CAFN,KAGFC,kBAAkB,GAAGA,kBAHnB,CADQ,CAAjB;AAKD;;AACD9pS,MAAAA,CAAC,GAAGmhH,GAAG,GAAGsoL,gBAAgB,CAACF,EAAD,EAAKF,WAAL,EAAkBlxS,CAAlB,CAAhB,IAAwC62O,WAAK7tH,GAA7C,IAAoDsoL,gBAAgB,CAACF,EAAD,EAAKF,WAAL,EAAkBr6D,QAAlB,CAA9E;AACA3oF,MAAAA,KAAK,GAAGg+I,MAAM,GAAG/4R,KAAjB;AACAnT,MAAAA,CAAC,GAAG6H,CAAC,GAAG,eAAIqmJ,KAAJ,CAAR;AACA3vI,MAAAA,CAAC,GAAG1W,CAAC,GAAG,eAAIqmJ,KAAJ,CAAR;AACD;;AACD,WAAO+4I,kCAAwB1vC,MAAxB,CAA+Bv3P,CAA/B,EAAkCue,CAAlC,CAAP;AACD,GAvCD;;AAyCA,SAAO+8Q,OAAP;AACD;;AAED,SAAS+V,aAAT,CAAuBl+R,KAAvB,EAA8BgE,CAA9B,EAAiC;AAC/B,SAAO,UAASnX,CAAT,EAAY;AACjB,QAAIu/R,EAAE,GAAGpsR,KAAK,GAAG,eAAInT,CAAJ,CAAjB;AACA,QAAIA,CAAC,GAAG24O,YAAR,EAAgB4mD,EAAE,IAAIpoR,CAAN;AAChB,WAAO,gBAAK,IAAIooR,EAAE,GAAGA,EAAd,CAAP;AACD,GAJD;AAKD,EAED;;;AACA,SAAS+R,gBAAT,CAA0B9rS,CAA1B,EAA6BzE,CAA7B,EAAgC6G,CAAhC,EAAmC;AACjC,MAAIG,CAAC,GAAG,EAAR;AAAA,MACIq+C,CAAC,GAAG,CAACx+C,CAAC,GAAG7G,CAAL,IAAUgH,CADlB;AAAA,MAEI1K,CAAC,GAAGmI,CAAC,CAACzE,CAAD,CAAD,GAAOyE,CAAC,CAACoC,CAAD,CAFhB;;AAGA,OAAK,IAAI/N,CAAC,GAAG,CAAR,EAAWmG,CAAC,GAAGe,CAApB,EAAuBlH,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmCwD,CAAC,IAAI,IAAImI,CAAC,CAACxF,CAAC,IAAIomD,CAAN,CAAV;;AACnC,SAAO/oD,CAAC,GAAG,GAAJ,GAAU+oD,CAAjB;AACD;;AAEc,oBAAW;AACxB,MAAIr+C,CAAC,GAAG,CAAR;AAAA,MACIihH,GAAG,GAAG,KAAK6nI,aADf;AAAA,MAEI+gD,IAAI,GAAG,eAAI5oL,GAAJ,CAFX;AAAA,MAGI6oL,IAAI,GAAG,eAAI7oL,GAAJ,CAHX;AAAA,MAII13B,CAAC,GAAG,iCAAkB2/M,UAAlB,CAJR;AAAA,MAKI9yQ,CAAC,GAAGmzD,CAAC,CAAC03B,GAAD,EAAMjhH,CAAN,CALT;AAAA,MAMIkjS,OAAO,GAAG9sQ,CAAC,CAACskJ,MANhB;AAAA,MAOIvrG,OAAO,GAAG,IAPd;AAAA,MAQI8zL,EAAE,GAAG,CAAC,eAAI9zL,OAAO,GAAG25K,aAAd,CARV;AAAA,MASI5+K,EAAE,GAAG,eAAIiF,OAAO,GAAG25K,aAAd,CATT;;AAWA1yN,EAAAA,CAAC,CAACnoB,MAAF,GAAW,UAASwK,CAAT,EAAY;AACrB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO6vH,GAAG,GAAG8nI,aAAb;AACvB8gD,IAAAA,IAAI,GAAG,eAAI5oL,GAAG,GAAGxoG,CAAC,GAAGqwO,aAAd,CAAP;AACAghD,IAAAA,IAAI,GAAG,eAAI7oL,GAAJ,CAAP;AACA,WAAO13B,CAAC,CAAC03B,GAAD,EAAMjhH,CAAN,CAAR;AACD,GALD;;AAOAo2B,EAAAA,CAAC,CAAC8tQ,KAAF,GAAU,UAASzrR,CAAT,EAAY;AACpB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO4O,CAAP;AACvB,WAAOupF,CAAC,CAAC03B,GAAD,EAAMjhH,CAAC,GAAG,CAACyY,CAAX,CAAR;AACD,GAHD;;AAKA2d,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1B,QAAI2xE,MAAM,GAAGj2N,CAAC,CAACi2N,MAAF,EAAb;AAAA,QACI+2C,YAAY,GAAGF,OAAO,CAACxoH,MAAD,CAD1B;AAAA,QAEI2oH,YAAY,IAAIjtQ,CAAC,CAACi2N,MAAF,CAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,GAAkB62C,OAAO,CAACxoH,MAAD,CAA7B,CAFhB;AAGAtkJ,IAAAA,CAAC,CAACi2N,MAAF,CAASA,MAAT;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAC/B4V,MAAAA,YAAY,CAACrV,YAAb,IAA6BqV,YAAY,CAAC7uD,SAAb,EAA7B;;AACA,WAAK,IAAI1iP,CAAC,GAAG,CAAR,EAAW21F,KAAK,GAAG,IAAIqnJ,QAAJ,GAAS9uO,CAA5B,EAA+BgvR,GAAG,GAAG,CAA1C,EAA6Cl9R,CAAC,GAAGkO,CAAjD,EAAoD,EAAElO,CAAF,EAAKk9R,GAAG,IAAIvnM,KAAhE,EAAuE;AACrE47M,QAAAA,YAAY,CAAChwF,KAAb,CAAmB,iBAAMnpI,EAAE,GAAG,eAAI8kN,GAAJ,CAAX,EAAqB/rB,EAArB,IAA2Bla,aAA9C,EAAuD,gBAAK7+K,EAAE,GAAG,eAAI8kN,GAAJ,CAAV,IAAsBjmC,aAA7E;AACAs6C,QAAAA,YAAY,CAAChwF,KAAb,CAAmB,iBAAMy2F,IAAI,GAAG,eAAI9a,GAAG,GAAGvnM,KAAK,GAAG,CAAlB,CAAb,EAAmCoiN,IAAnC,IAA2C9gD,aAA9D,EAAuE,gBAAK+gD,IAAI,GAAG,eAAI9a,GAAG,GAAGvnM,KAAK,GAAG,CAAlB,CAAZ,IAAoCshK,aAA3G;AACD;;AACDs6C,MAAAA,YAAY,CAAC3uD,OAAb,IAAwB2uD,YAAY,CAACpV,UAAb,EAAxB;AACD,KAPD;;AAQA,WAAOmV,YAAP;AACD,GAdD;;AAgBA,SAAOhtQ,CAAC,CACHi2N,MADE,CACK,CAAC,EAAD,EAAK,CAAC,EAAN,CADL,EAEF1kP,KAFE,CAEI,OAFJ,EAGF+1R,SAHE,CAGQ,MAAM,IAHd,CAAP;AAID;;;;;;;;;ACjJD;;AAEe,kBAAS1kS,CAAT,EAAY6G,CAAZ,EAAetB,CAAf,EAAkBI,CAAlB,EAAqBnO,CAArB,EAAwBiN,CAAxB,EAA2B8iC,CAA3B,EAA8B8d,CAA9B,EAAiC;AAC9C,MAAIxsD,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0BitD,CAAC,GAAG,CAAJ;;AAE1B,WAASk1O,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI,CAACA,GAAL,EAAU,OAAO,CAACh2R,CAAC,GAAG+1R,MAAJ,GAAajgD,QAAd,EAAkB,CAAlB,CAAP;;AACV,QAAIotD,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AAAA,QACI+a,EAAE,GAAG/wS,CAAC,GAAGkjS,IAAI,IAAIr8R,CAAC,GAAGq8R,IAAI,IAAI39R,CAAC,GAAG29R,IAAI,GAAGv9R,CAAf,CAAZ,CADjB;AAAA,QAEIqrS,EAAE,GAAGhb,GAAG,IAAIx+R,CAAC,GAAG,CAAJ,GAAQ0rS,IAAI,IAAIz+R,CAAC,GAAG4gD,CAAJ,GAAQ69O,IAAI,GAAG37P,CAAnB,CAAhB,CAFZ;AAAA,QAGIgpD,CAAC,GAAG,CAACwgN,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAhB,KAAuB,IAAIA,EAA3B,CAHR;AAAA,QAII5+R,KAAK,GAAG2jR,MAAM,GAAG,gBAAKgb,EAAE,GAAGxgN,CAAV,CAAT,GAAwBulJ,QAJpC;;AAKA,WAAO,CAACvlJ,CAAC,GAAG,eAAIn+E,KAAJ,CAAL,EAAiB4jR,GAAG,IAAI,IAAIkN,IAAI,GAAG79O,CAAf,CAAH,GAAuBkrC,CAAC,IAAI,IAAI,eAAIn+E,KAAJ,CAAR,CAAzC,CAAP;AACD;;AAEDmoR,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIu4Q,MAAM,GAAGjgD,WAAK72O,CAAL,GAASe,CAAtB;AAAA,QACIg2R,GAAG,GAAGx4Q,CADV;AAAA,QAEIo8Q,WAFJ;AAAA,QAEiBC,QAFjB;AAAA,QAE2B/gS,CAAC,GAAG,EAF/B;;AAGA,OAAG;AACD,UAAIoqS,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AAAA,UACI+a,EAAE,GAAG/wS,CAAC,GAAGkjS,IAAI,IAAIr8R,CAAC,GAAGq8R,IAAI,IAAI39R,CAAC,GAAG29R,IAAI,GAAGv9R,CAAf,CAAZ,CADjB;AAAA,UAEIqrS,EAAE,GAAGhb,GAAG,IAAIx+R,CAAC,GAAG,CAAJ,GAAQ0rS,IAAI,IAAIz+R,CAAC,GAAG4gD,CAAJ,GAAQ69O,IAAI,GAAG37P,CAAnB,CAAhB,CAFZ;AAAA,UAGInK,CAAC,GAAG2zQ,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAHvB;AAAA,UAIIxgN,CAAC,GAAG,IAAIwgN,EAJZ;AAAA,UAKIzgN,CAAC,GAAGnzD,CAAC,GAAGozD,CALZ;AAAA,UAMIm/J,EAAE,GAAGp/J,CAAC,GAAGA,CANb;AAAA,UAOI0gN,aAAa,GAAG,gBAAKF,EAAE,GAAGxgN,CAAV,IAAeulJ,QAPnC;AAAA,UAQI1jO,KAAK,GAAG2jR,MAAM,GAAGkb,aARrB;AAAA,UASIC,GAAG,GAAGH,EAAE,GAAGA,EATf;AAAA,UAUII,OAAO,GAAG,CAAC,IAAItqS,CAAJ,GAAQq8R,IAAI,IAAI,IAAI39R,CAAJ,GAAQ29R,IAAI,GAAG,CAAP,GAAWv9R,CAAvB,CAAb,IAA0CqwR,GAVxD;AAAA,UAWIob,OAAO,GAAG55S,CAAC,GAAG0rS,IAAI,IAAI,IAAIz+R,CAAJ,GAAQy+R,IAAI,GAAG,CAAP,GAAW37P,CAAvB,CAXtB;AAAA,UAYI8pQ,MAAM,GAAG,KAAKN,EAAE,GAAGI,OAAL,GAAeH,EAAE,IAAII,OAAO,GAAG,CAAd,CAAtB,CAZb;AAAA,UAaIE,MAAM,GAAG,KAAKF,OAAO,GAAG,CAAf,CAbb;AAAA,UAcIG,MAAM,GAAG,CAACF,MAAM,GAAG7gN,CAAT,GAAapzD,CAAC,GAAGk0Q,MAAlB,KAA6B9gN,CAAC,GAAGA,CAAjC,CAdb;AAAA,UAeIszM,QAAQ,GAAG,eAAI1xR,KAAJ,CAff;AAAA,UAgBI2xR,QAAQ,GAAG,eAAI3xR,KAAJ,CAhBf;AAAA,UAiBIo/R,SAAS,GAAGjhN,CAAC,GAAGuzM,QAjBpB;AAAA,UAkBI2N,SAAS,GAAGlhN,CAAC,GAAGwzM,QAlBpB;AAAA,UAmBI2N,UAAU,GAAK3b,MAAM,GAAGjgD,QAAV,IAAiB,IAAI,gBAAK,IAAIo7D,GAAG,GAAGvhD,EAAf,CAArB,KAA4CwhD,OAAO,GAAG5gN,CAAV,GAAcwgN,EAAE,GAAGQ,MAA/D,CAAD,GAA2E5hD,EAnB5F;AAAA,UAoBIg1B,EAAE,GAAG8sB,SAAS,GAAGxyS,CApBrB;AAAA,UAqBI2lR,EAAE,GAAGoR,GAAG,IAAI,IAAIkN,IAAI,GAAG79O,CAAf,CAAH,GAAuBkrC,CAAvB,GAA2BihN,SAA3B,GAAuCh0R,CArBhD;AAAA,UAsBIyxR,cAAc,GAAGsC,MAAM,GAAGxN,QAAT,GAAoByN,SAAS,GAAGE,UAtBrD;AAAA,UAuBI1C,iBAAiB,GAAGwC,SAAS,GAAGP,aAvBpC;AAAA,UAwBI9B,cAAc,GAAG,IAAIoC,MAAJ,IAAcA,MAAM,GAAGzN,QAAT,GAAoB2N,SAAS,GAAGC,UAA9C,CAxBrB;AAAA,UAyBIxC,iBAAiB,GAAGuC,SAAS,GAAGR,aAzBpC;AAAA,UA0BIxnK,WAAW,GAAGwlK,cAAc,GAAGC,iBAAjB,GAAqCC,cAAc,GAAGH,iBA1BxE;;AA2BA,UAAI,CAACvlK,WAAL,EAAkB;AAClBssJ,MAAAA,MAAM,IAAI6D,WAAW,GAAG,CAAChV,EAAE,GAAGqqB,cAAL,GAAsBtqB,EAAE,GAAGwqB,cAA5B,IAA8C1lK,WAAtE;AACAusJ,MAAAA,GAAG,IAAI6D,QAAQ,GAAG,CAAClV,EAAE,GAAGuqB,iBAAL,GAAyBtqB,EAAE,GAAGoqB,iBAA/B,IAAoDvlK,WAAtE;AACD,KA/BD,QA+BS,CAAC,eAAImwJ,WAAJ,IAAmBzjN,aAAnB,IAA8B,eAAI0jN,QAAJ,IAAgB1jN,aAA/C,KAA2D,EAAEr9E,CAAF,GAAM,CA/B1E;;AAgCA,WAAO,CAACi9R,MAAD,EAASC,GAAT,CAAP;AACD,GArCD;;AAuCA,SAAOuE,OAAP;AACD;;;;;;;;;;ACvDD;;AACA;;;;AAEO,IAAIoX,YAAY,GAAG,gCAAqB,MAArB,EAA6B,CAAC,MAA9B,EAAsC,OAAtC,EAA+C,CAAC,OAAhD,EAAyD,OAAzD,EAAkE,CAAC,OAAnE,EAA4E,QAA5E,CAAnB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAWA,YAAX,EACFhjS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACRD;;AACA;;;;AAEO,IAAIijS,YAAY,GAAG,gCAAqB,QAArB,EAA+B,CAAC,QAAhC,EAA0C,QAA1C,EAAoD,CAAC,QAArD,EAA+D,QAA/D,EAAyE,CAAC,QAA1E,EAAmF,QAAnF,CAAnB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAWA,YAAX,EACFjjS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACRD;;AACA;;AACA;;;;AAEO,IAAIkjS,YAAY,GAAG,gCAAqB,IAAI,CAAJ,GAAQ/7D,QAA7B,EAAiC,CAAC,OAAlC,EAA2C,CAAC,MAA5C,EAAoD,CAApD,EAAuD,MAAvD,EAA+D,CAAC,OAAhE,EAAyE,CAAzE,EAA4E,KAA5E,CAAnB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAW+7D,YAAX,EACFljS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACTD;;AACA;;AAEO,SAASmjS,YAAT,CAAsB/b,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAIiB,OAAO,GAAGlB,MAAM,GAAGA,MAAvB;AAAA,MACImN,IAAI,GAAGlN,GAAG,GAAGA,GADjB;AAEA,SAAO,CACLD,MAAM,IAAI,IAAI,WAAWmN,IAAnB,CAAN,IAAkC,OAAO,cAAcjM,OAAd,GAAwBA,OAAjE,CADK,EAELjB,GAAG,IAAI,IAAIkN,IAAI,GAAG,EAAf,CAFE,CAAP;AAID;;AAED4O,YAAY,CAACt7C,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAIu4Q,MAAM,GAAG92R,CAAb;AAAA,MACI+2R,GAAG,GAAGx4Q,CADV;AAAA,MAEI1kB,CAAC,GAAG,EAFR;AAAA,MAEY21F,KAFZ;;AAGA,KAAG;AACD,QAAIy0M,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AACAA,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAACunM,GAAG,IAAI,IAAIkN,IAAI,GAAG,EAAf,CAAH,GAAwB1lR,CAAzB,KAA+B,IAAI0lR,IAAI,GAAG,CAA1C,CAAf;AACD,GAHD,QAGS,eAAIz0M,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAHvC;;AAIAA,EAAAA,CAAC,GAAG,EAAJ;AACAmG,EAAAA,CAAC,IAAI,IAAG,WAAWikS,IAAnB;;AACA,KAAG;AACD,QAAI6O,OAAO,GAAG,CAACA,OAAO,GAAGhc,MAAM,GAAGA,MAApB,IAA8Bgc,OAA5C;AACAhc,IAAAA,MAAM,IAAItnM,KAAK,GAAG,CAACsnM,MAAM,IAAI,OAAO,cAAcgc,OAAzB,CAAN,GAA0C9yS,CAA3C,KAAiD,OAAO,aAAa8yS,OAArE,CAAlB;AACD,GAHD,QAGS,eAAItjN,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAHvC;;AAIA,SAAO,CAACi9R,MAAD,EAASC,GAAT,CAAP;AACD,CAfD;;AAiBe,oBAAW;AACxB,SAAO,0BAAW8b,YAAX,EACFnjS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AChCD;;AACA;;;;AAEO,IAAIqjS,YAAY,GAAG,gCAAqB,MAArB,EAA6B,CAAC,OAA9B,EAAuC,OAAvC,EAAgD,CAAC,QAAjD,EAA2D,OAA3D,EAAoE,CAAC,OAArE,EAA6E,QAA7E,CAAnB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAWA,YAAX,EACFrjS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;ACRD;;AAEe,kBAASgkO,OAAT,EAAkB;AAC/B,MAAI/tN,EAAE,GAAG+tN,OAAO,CAACiF,YAAD,EAAS,CAAT,CAAP,CAAmB,CAAnB,IAAwBjF,OAAO,CAAC,CAACiF,YAAF,EAAU,CAAV,CAAP,CAAoB,CAApB,CAAjC;;AAEA,WAASq6D,aAAT,CAAuBlc,MAAvB,EAA+BC,GAA/B,EAAoC;AAClC,QAAI15R,CAAC,GAAGy5R,MAAM,GAAG,CAAT,GAAa,CAAC,GAAd,GAAoB,GAA5B;AAAA,QACI17E,KAAK,GAAGs4B,OAAO,CAACojD,MAAM,GAAGz5R,CAAC,GAAGw5O,QAAd,EAAkBkgD,GAAlB,CADnB;AAEA37E,IAAAA,KAAK,CAAC,CAAD,CAAL,IAAY/9M,CAAC,GAAGsoB,EAAhB;AACA,WAAOy1L,KAAP;AACD;;AAED,MAAIs4B,OAAO,CAAC6jB,MAAZ,EAAoBy7C,aAAa,CAACz7C,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACxD,QAAIlhB,CAAC,GAAG2C,CAAC,GAAG,CAAJ,GAAQ,CAAC,GAAT,GAAe,GAAvB;AAAA,QACIjD,QAAQ,GAAG22O,OAAO,CAAC6jB,MAAR,CAAev3P,CAAC,GAAG3C,CAAC,GAAGsoB,EAAvB,EAA2BpH,CAA3B,CADf;AAAA,QAEIu4Q,MAAM,GAAG/5R,QAAQ,CAAC,CAAD,CAAR,GAAcM,CAAC,GAAGw5O,QAF/B;AAGA,QAAIigD,MAAM,GAAG,CAACjgD,QAAd,EAAkBigD,MAAM,IAAI,IAAIjgD,QAAd,CAAlB,KACK,IAAIigD,MAAM,GAAGjgD,QAAb,EAAiBigD,MAAM,IAAI,IAAIjgD,QAAd;AACtB95O,IAAAA,QAAQ,CAAC,CAAD,CAAR,GAAc+5R,MAAd;AACA,WAAO/5R,QAAP;AACD,GARmB;AAUpB,SAAOi2S,aAAP;AACD;;;;;;;;;;ACvBD;;AACA;;AACA;;;;AAEO,SAASC,aAAT,CAAuBnc,MAAvB,EAA+BC,GAA/B,EAAoC;AACzC,MAAImc,OAAO,GAAG,gBAAKpc,MAAL,CAAd;AAAA,MACIqc,IAAI,GAAG,gBAAKpc,GAAL,CADX;AAAA,MAEII,MAAM,GAAG,eAAIJ,GAAJ,CAFb;AAAA,MAGI/2R,CAAC,GAAG,eAAI82R,MAAJ,IAAcK,MAHtB;AAAA,MAII54Q,CAAC,GAAG,eAAIu4Q,MAAJ,IAAcK,MAJtB;AAAA,MAKI7nN,CAAC,GAAG,eAAI6jO,IAAI,GAAGpc,GAAX,CALR;AAMAD,EAAAA,MAAM,GAAG,eAAI,iBAAMv4Q,CAAN,EAAS+wD,CAAT,CAAJ,CAAT;AACAynN,EAAAA,GAAG,GAAG,gBAAK/2R,CAAL,CAAN;AACA,MAAI,eAAI82R,MAAM,GAAGn+C,YAAb,IAAuBzhK,aAA3B,EAAoC4/M,MAAM,IAAIn+C,YAAV;AACpC,MAAIv9B,KAAK,GAAGg4F,oBAAoB,CAACtc,MAAM,GAAGjgD,WAAK,CAAd,GAAkB8B,eAASm+C,MAA3B,GAAoCA,MAArC,EAA6CC,GAA7C,CAAhC;AACA,MAAID,MAAM,GAAGjgD,WAAK,CAAlB,EAAqBvnK,CAAC,GAAG8rI,KAAK,CAAC,CAAD,CAAT,EAAcA,KAAK,CAAC,CAAD,CAAL,GAAW,CAACA,KAAK,CAAC,CAAD,CAA/B,EAAoCA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAC9rI,CAAhD;AACrB,SAAQ8rI,KAAK,CAAC,CAAD,CAAL,IAAY83F,OAAZ,EAAqB93F,KAAK,CAAC,CAAD,CAAL,IAAY,CAAC+3F,IAAlC,EAAwC/3F,KAAhD;AACD;;AAED63F,aAAa,CAAC17C,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpC,MAAI,eAAIve,CAAJ,IAAS,CAAb,EAAgBA,CAAC,GAAG,gBAAKA,CAAL,IAAU,CAAV,GAAcA,CAAlB;AAChB,MAAI,eAAIue,CAAJ,IAAS,CAAb,EAAgBA,CAAC,GAAG,gBAAKA,CAAL,IAAU,CAAV,GAAcA,CAAlB;AAChB,MAAIk3P,EAAE,GAAG,gBAAKz1Q,CAAL,CAAT;AAAA,MACI01Q,EAAE,GAAG,gBAAKn3P,CAAL,CADT;AAAA,MAEI27L,EAAE,GAAG,CAACu7D,EAAD,GAAMz1Q,CAFf;AAAA,MAGIm6M,EAAE,GAAG,CAACu7D,EAAD,GAAMn3P,CAHf;AAAA,MAIIhhB,CAAC,GAAG48M,EAAE,GAAGD,EAAL,GAAU,CAJlB;AAAA,MAKI/7K,CAAC,GAAGk1Q,0BAA0B,CAAC91S,CAAC,GAAG48M,EAAH,GAAQD,EAAV,EAAc38M,CAAC,GAAG28M,EAAH,GAAQC,EAAvB,CALlC;AAAA,MAMI28E,MAAM,GAAG34P,CAAC,CAAC,CAAD,CANd;AAAA,MAOI44P,GAAG,GAAG54P,CAAC,CAAC,CAAD,CAPX;AAAA,MAQIg5P,MAAM,GAAG,eAAIJ,GAAJ,CARb;AASA,MAAIx5R,CAAJ,EAAOu5R,MAAM,GAAG,CAACn+C,YAAD,GAAUm+C,MAAnB;AACP,SAAO,CAACrhB,EAAE,IAAI,iBAAM,eAAIqhB,MAAJ,IAAcK,MAApB,EAA4B,CAAC,eAAIJ,GAAJ,CAA7B,IAAyClgD,QAA7C,CAAH,EAAqD6+B,EAAE,GAAG,gBAAK,eAAIohB,MAAJ,IAAcK,MAAnB,CAA1D,CAAP;AACD,CAdD;;AAgBA,SAASic,oBAAT,CAA8Btc,MAA9B,EAAsCC,GAAtC,EAA2C;AACzC,MAAIA,GAAG,KAAKp+C,YAAZ,EAAoB,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;AAEpB,MAAIy+C,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,MACIlvR,CAAC,GAAGuvR,MAAM,GAAGA,MADjB;AAAA,MAEIlrF,EAAE,GAAGrkM,CAAC,GAAGA,CAFb;AAAA,MAGI/D,CAAC,GAAG,IAAIooM,EAHZ;AAAA,MAII/0L,CAAC,GAAG,IAAI,IAAI+0L,EAJhB;AAAA,MAKI36G,CAAC,GAAG,IAAI26G,EALZ;AAAA,MAMI58H,CAAC,GAAG,gBAAK,IAAI,gBAAKxrE,CAAL,CAAT,CANR;AAAA,MAOIiI,CAAC,GAAGwlF,CAAC,GAAG1pF,CAAC,GAAG/D,CAAJ,GAAQwrE,CAPpB;AAAA,MAQIovK,EAAE,GAAG,CAAC,IAAI04C,MAAL,IAAerrR,CARxB;AAAA,MASIoyB,CAAC,GAAG,gBAAKugN,EAAL,CATR;AAAA,MAUI40D,EAAE,GAAG50D,EAAE,GAAG56O,CAVd;AAAA,MAWI/C,CAAC,GAAG,gBAAKuyS,EAAL,CAXR;AAAA,MAYIltP,CAAC,GAAGjoB,CAAC,GAAGozD,CAZZ;AAAA,MAaIvxF,CAbJ;AAAA,MAcInG,CAdJ;AAgBA,MAAIi9R,MAAM,KAAK,CAAf,EAAkB,OAAO,CAAC,CAAD,EAAI,EAAE1wO,CAAC,GAAGv+C,CAAC,GAAG9G,CAAV,CAAJ,CAAP;AAElB,MAAIo2R,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,MACIwc,MAAM,GAAG,IAAIpc,MADjB;AAAA,MAEIqc,MAAM,GAAG,IAAIpc,MAAJ,GAAaD,MAF1B;AAAA,MAGIsc,MAAM,GAAG,CAAC,CAAC,CAAD,GAAK5rS,CAAL,GAASynE,CAAC,GAAGn4D,CAAd,IAAmBq8R,MAHhC;AAAA,MAIIE,OAAO,GAAG,CAAC,CAAC3nS,CAAD,GAAKorR,MAAL,GAAc,CAAC,IAAIC,MAAL,IAAeqc,MAA9B,KAAyC1nS,CAAC,GAAGA,CAA7C,CAJd;AAAA,MAKIqmS,MAAM,GAAI,MAAMsB,OAAP,GAAkBv1Q,CAL/B;AAAA,MAMIw1Q,MAAM,GAAGpiN,CAAC,GAAG6gN,MAAJ,GAAa,IAAIvqS,CAAJ,GAAQs2B,CAAR,GAAYq1Q,MANtC;AAAA,MAOII,QAAQ,GAAG/rS,CAAC,GAAG/D,CAAJ,GAAQ4vS,OAAR,GAAkBh1D,EAAE,GAAGvnO,CAAL,GAASq8R,MAP1C;AAAA,MAQI7wE,EAAE,GAAG,CAAC4wE,MAAD,GAAUC,MARnB;AAAA,MASIK,EAAE,GAAG,CAACN,MAAD,GAAUK,QATnB;AAAA,MAUIE,IAAI,GAAG,CAAC,CAAD,GAAKP,MAAL,GAAcI,MAVzB;AAAA,MAWI7b,OAAO,GAAG,IAAIhB,MAAJ,GAAajgD,QAX3B;AAAA,MAYIrnJ,KAZJ,CArByC,CAmCzC;;AACA,MAAIsnM,MAAM,GAAG,QAAQjgD,QAAjB,IAAuBkgD,GAAG,GAAGlgD,WAAK,CAAX,IAAgBigD,MAAM,GAAG,QAAQjgD,QAA5D,EAAgE;AAC9D72O,IAAAA,CAAC,GAAG,CAAComD,CAAC,GAAGv+C,CAAC,GAAG,gBAAKyrS,EAAE,IAAI,IAAIpnG,EAAR,CAAF,GAAgB9lJ,CAAC,GAAGA,CAAzB,CAAT,KAAyC,IAAI8lJ,EAA7C,CAAJ;AACA,QAAI4qF,MAAM,GAAGjgD,WAAK,CAAlB,EAAqB,OAAO,CAAC72O,CAAD,EAAIA,CAAJ,CAAP;AACrB,QAAIssG,EAAE,GAAGtsG,CAAT;AAAA,QAAYk6M,EAAE,GAAG,MAAMl6M,CAAvB;AACAA,IAAAA,CAAC,GAAG,OAAOk6M,EAAE,GAAG5tG,EAAZ,CAAJ,EAAqBzyG,CAAC,GAAG,EAAzB;;AACA,OAAG;AACD,UAAIyuC,CAAC,GAAG,gBAAKgrQ,EAAE,GAAGtzS,CAAC,GAAGA,CAAd,CAAR;AAAA,UACIwF,CAAC,GAAIxF,CAAC,IAAI8zS,IAAI,GAAGnxE,EAAE,GAAGr6L,CAAhB,CAAD,GAAsBurQ,EAAE,GAAG,gBAAK7zS,CAAC,GAAGe,CAAT,CAA5B,GAA2C+2R,OADnD;AAEA,UAAI,CAACtyR,CAAL,EAAQ;AACR,UAAIA,CAAC,GAAG,CAAR,EAAW00M,EAAE,GAAGl6M,CAAL,CAAX,KACKssG,EAAE,GAAGtsG,CAAL;AACLA,MAAAA,CAAC,GAAG,OAAOk6M,EAAE,GAAG5tG,EAAZ,CAAJ;AACD,KAPD,QAOS,eAAIA,EAAE,GAAG4tG,EAAT,IAAehjI,aAAf,IAA0B,EAAEr9E,CAAF,GAAM,CAPzC;AAQD,GAbD,CAeA;AAfA,OAgBK;AACHmG,MAAAA,CAAC,GAAGk3E,aAAJ,EAAar9E,CAAC,GAAG,EAAjB;;AACA,SAAG;AACD,YAAI8+E,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,YACI+zS,EAAE,GAAG,gBAAKT,EAAE,GAAG36N,EAAV,CADT;AAAA,YAEIq7N,OAAO,GAAGF,IAAI,GAAGnxE,EAAE,GAAGoxE,EAF1B;AAAA,YAGIn7Q,EAAE,GAAG54B,CAAC,GAAGg0S,OAAJ,GAAcH,EAAE,GAAG,gBAAK7zS,CAAC,GAAGe,CAAT,CAAnB,GAAiC+2R,OAH1C;AAAA,YAII3+D,EAAE,GAAG66E,OAAO,GAAG,CAACH,EAAE,GAAGlxE,EAAE,GAAGhqJ,EAAX,IAAiBo7N,EAJpC;AAKA/zS,QAAAA,CAAC,IAAIwvF,KAAK,GAAGukN,EAAE,GAAGn7Q,EAAE,GAAGugM,EAAR,GAAa,CAA5B;AACD,OAPD,QAOS,eAAI3pI,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CAPvC;AAQD;;AAED,SAAO,CAACmG,CAAD,EAAI,CAAComD,CAAD,GAAKv+C,CAAC,GAAG,gBAAKyrS,EAAE,GAAGtzS,CAAC,GAAGA,CAAd,CAAb,CAAP;AACD;;AAED,SAASqzS,0BAAT,CAAoCrzS,CAApC,EAAuCue,CAAvC,EAA0C;AACxC,MAAI27L,EAAE,GAAG,CAAT;AAAA,MACI5tG,EAAE,GAAG,CADT;AAAA,MAEIzkG,CAAC,GAAG,GAFR;AAAA,MAGIhO,CAAC,GAAG,EAHR;;AAKA,SAAO,IAAP,EAAa;AACX,QAAIqyM,EAAE,GAAGrkM,CAAC,GAAGA,CAAb;AAAA,QACIuvR,MAAM,GAAG,gBAAKvvR,CAAL,CADb;AAAA,QAEIynE,CAAC,GAAG,gBAAK,IAAI,gBAAK,IAAI48H,EAAT,CAAT,CAFR;AAAA,QAGIngM,CAAC,GAAI,IAAImgM,EAAL,GAAWrkM,CAAC,IAAI,IAAIqkM,EAAR,CAAD,GAAe58H,CAHlC;AAAA,QAIIovK,EAAE,GAAG,CAAC,IAAI04C,MAAL,IAAerrR,CAJxB;AAAA,QAKIoyB,CAAC,GAAG,gBAAKugN,EAAL,CALR;AAAA,QAMI40D,EAAE,GAAG50D,EAAE,IAAI,IAAIxyC,EAAR,CANX;AAAA,QAOI9lJ,CAAC,GAAGjoB,CAAC,IAAI,IAAI+tK,EAAR,CAPT;AAAA,QAQI6nG,EAAE,GAAGT,EAAE,GAAGtzS,CAAC,GAAGA,CARlB;AAAA,QASIsoC,CAAC,GAAG,gBAAKyrQ,EAAL,CATR;AAAA,QAUI55F,EAAE,GAAG57L,CAAC,GAAG6nC,CAAJ,GAAQv+C,CAAC,GAAGygC,CAVrB;AAWA,QAAI,eAAIgkE,EAAE,GAAG4tG,EAAT,IAAe07C,cAAf,IAA2B,EAAE/7P,CAAF,KAAQ,CAAnC,IAAwCsgN,EAAE,KAAK,CAAnD,EAAsD;AACtD,QAAIA,EAAE,GAAG,CAAT,EAAYD,EAAE,GAAGryM,CAAL,CAAZ,KACKykG,EAAE,GAAGzkG,CAAL;AACLA,IAAAA,CAAC,GAAG,OAAOqyM,EAAE,GAAG5tG,EAAZ,CAAJ;AACD;;AAED,MAAI,CAACzyG,CAAL,EAAQ,OAAO,IAAP;AAER,MAAIk9R,GAAG,GAAG,gBAAKK,MAAL,CAAV;AAAA,MACID,MAAM,GAAG,eAAIJ,GAAJ,CADb;AAAA,MAEIwc,MAAM,GAAG,IAAIpc,MAFjB;AAAA,MAGIqc,MAAM,GAAG,IAAIpc,MAAJ,GAAaD,MAH1B;AAAA,MAIIsc,MAAM,GAAG,CAAC,CAAC,CAAD,GAAK5rS,CAAL,GAASynE,CAAC,IAAI,IAAI,IAAI48H,EAAZ,CAAX,IAA8BsnG,MAJ3C;AAAA,MAKIE,OAAO,GAAG,CAAC,CAAC3nS,CAAD,GAAKorR,MAAL,GAAc,CAAC,IAAIC,MAAL,IAAeqc,MAA9B,KAAyC1nS,CAAC,GAAGA,CAA7C,CALd;AAAA,MAMIqmS,MAAM,GAAG,MAAMsB,OAAN,GAAgBv1Q,CAN7B;AAAA,MAOIw1Q,MAAM,GAAG,CAAC,IAAIznG,EAAL,IAAWkmG,MAAX,GAAoB,IAAIvqS,CAAJ,GAAQs2B,CAAR,GAAYq1Q,MAP7C;AAAA,MAQIM,IAAI,GAAG,CAAC,CAAD,GAAKP,MAAL,GAAcI,MARzB;AAAA,MASIhxE,EAAE,GAAG,CAAC4wE,MAAD,GAAUC,MATnB;AAAA,MAUIK,EAAE,GAAG,CAACN,MAAD,IAAW1rS,CAAC,IAAI,IAAIqkM,EAAR,CAAD,GAAewnG,OAAf,GAAyBh1D,EAAE,IAAI,IAAI,IAAIxyC,EAAZ,CAAF,GAAoBsnG,MAAxD,CAVT;AAYA,SAAO,CAAC38D,WAAK,CAAL,IAAU72O,CAAC,IAAI8zS,IAAI,GAAGnxE,EAAE,GAAGr6L,CAAhB,CAAD,GAAsBurQ,EAAE,GAAG,gBAAK7zS,CAAC,GAAG,gBAAKszS,EAAL,CAAT,CAArC,CAAD,EAA2Dvc,GAA3D,CAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,0BAAW,qBAAUkc,aAAV,CAAX,EACFvjS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;;;AClJD;;AAEA;AACO,SAASukS,UAAT,CAAoBp7N,CAApB,EAAuB9sE,CAAvB,EAA0BulF,CAA1B,EAA6B;AAClC,MAAIvwF,CAAJ,EAAO6G,CAAP,EAAUtB,CAAV;;AACA,MAAI,CAACuyE,CAAL,EAAQ;AACNjxE,IAAAA,CAAC,GAAGssS,SAAS,CAACnoS,CAAD,EAAI,IAAIulF,CAAR,CAAb;AACA,WAAO,CACL,CAAC,CAAD,EAAI1pF,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAZ,CADK,EAEL,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAN,EAAW,CAAX,CAFK,EAGL,CAACA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAT,EAAc,CAAd,CAHK,CAAP;AAKD;;AACD7G,EAAAA,CAAC,GAAGmzS,SAAS,CAACr7N,CAAD,EAAIyY,CAAJ,CAAb;AACA,MAAI,CAACvlF,CAAL,EAAQ,OAAO,CAAC,CAAChL,CAAC,CAAC,CAAD,CAAF,EAAO,CAAP,CAAD,EAAY,CAACA,CAAC,CAAC,CAAD,CAAF,EAAO,CAAP,CAAZ,EAAuB,CAACA,CAAC,CAAC,CAAD,CAAF,EAAO,CAAP,CAAvB,CAAP;AACR6G,EAAAA,CAAC,GAAGssS,SAAS,CAACnoS,CAAD,EAAI,IAAIulF,CAAR,CAAb;AACAhrF,EAAAA,CAAC,GAAGsB,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAc0pF,CAAC,GAAGvwF,CAAC,CAAC,CAAD,CAAL,GAAWA,CAAC,CAAC,CAAD,CAAZ,GAAkB6G,CAAC,CAAC,CAAD,CAAnB,GAAyBA,CAAC,CAAC,CAAD,CAA5C;AACA,SAAO,CACL,CAAC7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAActB,CAAf,EAAkBvF,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAc6G,CAAC,CAAC,CAAD,CAAf,GAAqBA,CAAC,CAAC,CAAD,CAAtB,GAA4BtB,CAA9C,CADK,EAEL,CAACvF,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAActB,CAAf,EAAkB,CAACvF,CAAC,CAAC,CAAD,CAAF,GAAQA,CAAC,CAAC,CAAD,CAAT,GAAe6G,CAAC,CAAC,CAAD,CAAhB,GAAsBA,CAAC,CAAC,CAAD,CAAvB,GAA6BtB,CAA/C,CAFK,EAGL,CAACvF,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAf,GAAqBtB,CAAtB,EAAyB,CAACgrF,CAAD,GAAKvwF,CAAC,CAAC,CAAD,CAAN,GAAYA,CAAC,CAAC,CAAD,CAAb,GAAmB6G,CAAC,CAAC,CAAD,CAApB,GAA0BtB,CAAnD,CAHK,CAAP;AAKD,EAED;;;AACO,SAAS4tS,SAAT,CAAmBr7N,CAAnB,EAAsByY,CAAtB,EAAyB;AAC9B,MAAIyzM,EAAJ,EAAQn9R,CAAR,EAAWmvR,GAAX,EAAgBx5R,CAAhB,EAAmB42S,IAAnB;;AACA,MAAI7iN,CAAC,GAAGpa,aAAR,EAAiB;AACf35E,IAAAA,CAAC,GAAG,eAAIs7E,CAAJ,CAAJ;AACAjxE,IAAAA,CAAC,GAAG,eAAIixE,CAAJ,CAAJ;AACAksN,IAAAA,EAAE,GAAGzzM,CAAC,IAAIzY,CAAC,GAAGt7E,CAAC,GAAGqK,CAAZ,CAAD,GAAkB,CAAvB;AACA,WAAO,CACLrK,CAAC,GAAGwnS,EAAE,GAAGn9R,CADJ,EAELA,CAAC,GAAGm9R,EAAE,GAAGxnS,CAFJ,EAGL,IAAI+zF,CAAC,GAAG/zF,CAAJ,GAAQA,CAAR,GAAY,CAHX,EAILs7E,CAAC,GAAGksN,EAJC,CAAP;AAMD;;AACD,MAAIzzM,CAAC,IAAI,IAAIpa,aAAb,EAAsB;AACpB6tN,IAAAA,EAAE,GAAG,CAAC,IAAIzzM,CAAL,IAAU,CAAf;AACA1pF,IAAAA,CAAC,GAAG,gBAAKixE,CAAL,CAAJ;AACAt7E,IAAAA,CAAC,GAAG,gBAAKs7E,CAAL,CAAJ;AACAk+M,IAAAA,GAAG,GAAG,IAAInvR,CAAV;AACAusS,IAAAA,IAAI,GAAGvsS,CAAC,GAAG,gBAAKixE,CAAL,CAAX;AACA,WAAO,CACLt7E,CAAC,GAAGwnS,EAAE,IAAIoP,IAAI,GAAGt7N,CAAX,CAAF,IAAmBjxE,CAAC,GAAGA,CAAvB,CADC,EAELmvR,GAAG,GAAGgO,EAAE,GAAGxnS,CAAL,GAASw5R,GAAT,IAAgBod,IAAI,GAAGt7N,CAAvB,CAFD,EAGLk+M,GAAG,GAAGgO,EAAE,GAAGxnS,CAAL,GAASw5R,GAAT,IAAgBod,IAAI,GAAGt7N,CAAvB,CAHD,EAIL,IAAI,gBAAK,eAAIA,CAAJ,CAAL,CAAJ,GAAmB8/J,YAAnB,GAA4BosD,EAAE,IAAIoP,IAAI,GAAGt7N,CAAX,CAAF,GAAkBjxE,CAJzC,CAAP;AAMD;;AAED,MAAI7G,CAAC,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,CAAR;AAAA,MACIuF,CAAC,GAAG,CAAC,gBAAKgrF,CAAL,CAAD,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,CADR;AAAA,MAEIz3F,CAAC,GAAG,CAFR;AAGA+N,EAAAA,CAAC,GAAG,gBAAK,IAAI0pF,CAAT,CAAJ;AACA6iN,EAAAA,IAAI,GAAG,CAAP;;AAEA,SAAO,eAAI7tS,CAAC,CAACzM,CAAD,CAAD,GAAOkH,CAAC,CAAClH,CAAD,CAAZ,IAAmBq9E,aAAnB,IAA8Br9E,CAAC,GAAG,CAAzC,EAA4C;AAC1CkrS,IAAAA,EAAE,GAAGhkS,CAAC,CAAClH,CAAC,EAAF,CAAN;AACAyM,IAAAA,CAAC,CAACzM,CAAD,CAAD,GAAO,CAACkrS,EAAE,GAAGn9R,CAAN,IAAW,CAAlB;AACA7G,IAAAA,CAAC,CAAClH,CAAD,CAAD,GAAO,CAACkrS,EAAE,GAAGn9R,CAAN,IAAW,CAAlB;AACAA,IAAAA,CAAC,GAAG,gBAAKm9R,EAAE,GAAGn9R,CAAV,CAAJ;AACAusS,IAAAA,IAAI,IAAI,CAAR;AACD;;AAEDpd,EAAAA,GAAG,GAAGod,IAAI,GAAGpzS,CAAC,CAAClH,CAAD,CAAR,GAAcg/E,CAApB;;AACA,KAAG;AACDt7E,IAAAA,CAAC,GAAG+I,CAAC,CAACzM,CAAD,CAAD,GAAO,eAAI+N,CAAC,GAAGmvR,GAAR,CAAP,GAAsBh2R,CAAC,CAAClH,CAAD,CAA3B;AACAk9R,IAAAA,GAAG,GAAG,CAAC,gBAAKx5R,CAAL,IAAUw5R,GAAX,IAAkB,CAAxB;AACD,GAHD,QAGS,EAAEl9R,CAHX;;AAKA,SAAO,CAAC,eAAIk9R,GAAJ,CAAD,EAAWx5R,CAAC,GAAG,eAAIw5R,GAAJ,CAAf,EAAyBx5R,CAAC,GAAG,eAAIw5R,GAAG,GAAGnvR,CAAV,CAA7B,EAA2CmvR,GAA3C,CAAP;AACD,EAED;AACA;;;AACO,SAASqd,UAAT,CAAoBrd,GAApB,EAAyBsd,GAAzB,EAA8B/iN,CAA9B,EAAiC;AACtC,MAAIzpF,CAAC,GAAG,eAAIkvR,GAAJ,CAAR;AAAA,MACIl9R,CAAC,GAAG,eAAIw6S,GAAJ,CADR;AAAA,MAEIC,OAAO,GAAG,gBAAKz6S,CAAL,CAFd;;AAGA,MAAIgO,CAAJ,EAAO;AACL,QAAI0sS,MAAM,GAAG,IAAI,eAAI1sS,CAAJ,CAAjB;AAAA,QACI2sS,OAAO,GAAG,KAAK,eAAI3sS,CAAJ,IAAS,eAAIA,CAAJ,CAAd,CADd;AAAA,QAEID,CAAC,GAAG,EAAE4sS,OAAO,GAAGljN,CAAC,IAAIgjN,OAAO,GAAGA,OAAV,GAAoBC,MAApB,GAA6BA,MAAjC,CAAX,GAAsD,CAAtD,GAA0DjjN,CAA5D,CAFR;AAAA,QAGIhrF,CAAC,GAAG,CAACgrF,CAAC,GAAG,CAAL,IAAUkjN,OAHlB;AAAA,QAIIC,UAAU,GAAG,CAAC,CAAC7sS,CAAD,GAAK,gBAAKA,CAAC,GAAGA,CAAJ,GAAQ,IAAItB,CAAjB,CAAN,IAA6B,CAJ9C;AAKA,WAAO,CACLouS,SAAS,CAAC,gBAAK,IAAI,gBAAKD,UAAL,CAAT,CAAD,EAA6BnjN,CAA7B,CAAT,GAA2C,gBAAKylM,GAAL,CADtC,EAEL2d,SAAS,CAAC,gBAAK,gBAAK,CAACD,UAAU,GAAGD,OAAb,GAAuB,CAAxB,IAA6BljN,CAAlC,CAAL,CAAD,EAA6C,IAAIA,CAAjD,CAAT,GAA+D,gBAAK+iN,GAAL,CAF1D,CAAP;AAID;;AACD,SAAO,CACL,CADK,EAELK,SAAS,CAAC,gBAAKJ,OAAL,CAAD,EAAgB,IAAIhjN,CAApB,CAAT,GAAkC,gBAAK+iN,GAAL,CAF7B,CAAP;AAID,EAED;AACA;;;AACO,SAASK,SAAT,CAAmB3d,GAAnB,EAAwBzlM,CAAxB,EAA2B;AAChC,MAAI,CAACA,CAAL,EAAQ,OAAOylM,GAAP;AACR,MAAIzlM,CAAC,KAAK,CAAV,EAAa,OAAO,eAAI,eAAIylM,GAAG,GAAG,CAAN,GAAU/B,eAAd,CAAJ,CAAP;AACb,MAAIj0R,CAAC,GAAG,CAAR;AAAA,MACI6G,CAAC,GAAG,gBAAK,IAAI0pF,CAAT,CADR;AAAA,MAEIhrF,CAAC,GAAG,gBAAKgrF,CAAL,CAFR;;AAGA,OAAK,IAAIz3F,CAAC,GAAG,CAAb,EAAgB,eAAIyM,CAAJ,IAAS4wE,aAAzB,EAAkCr9E,CAAC,EAAnC,EAAuC;AACrC,QAAIk9R,GAAG,GAAGlgD,QAAV,EAAc;AACZ,UAAIm0D,IAAI,GAAG,gBAAKpjS,CAAC,GAAG,eAAImvR,GAAJ,CAAJ,GAAeh2R,CAApB,CAAX;AACA,UAAIiqS,IAAI,GAAG,CAAX,EAAcA,IAAI,IAAIn0D,QAAR;AACdkgD,MAAAA,GAAG,IAAIiU,IAAI,GAAG,CAAC,EAAEjU,GAAG,GAAGlgD,QAAR,CAAD,GAAeA,QAA7B;AACD,KAJD,MAIOkgD,GAAG,IAAIA,GAAP;;AACPzwR,IAAAA,CAAC,GAAG,CAACvF,CAAC,GAAG6G,CAAL,IAAU,CAAd;AACAA,IAAAA,CAAC,GAAG,gBAAK7G,CAAC,GAAG6G,CAAT,CAAJ;AACAtB,IAAAA,CAAC,GAAG,CAAC,CAACvF,CAAC,GAAGuF,CAAL,IAAUsB,CAAX,IAAgB,CAApB;AACD;;AACD,SAAOmvR,GAAG,IAAI,eAAI,CAAJ,EAAOl9R,CAAP,IAAYkH,CAAhB,CAAV;AACD;;;;;;;;;;ACrHD;;AACA;;AACA;;AACA;;;;AAEO,SAAS4zS,QAAT,CAAkB7d,MAAlB,EAA0BC,GAA1B,EAA+B;AACpC,MAAIoa,EAAE,GAAG,CAAC1I,cAAQ,CAAT,KAAeA,cAAQ,CAAvB,CAAT;AAAA,MACItxR,CAAC,GAAG,gBAAK,IAAIg6R,EAAE,GAAGA,EAAd,CADR;AAAA,MAEIpgD,CAAC,GAAG,yBAAUpY,YAAV,EAAkBxhO,CAAC,GAAGA,CAAtB,CAFR;AAAA,MAGI3R,CAAC,GAAG,CAAC,CAHT;AAAA,MAII6uS,GAAG,GAAG,eAAI,eAAIx9D,WAAK,CAAL,GAAS,eAAIkgD,GAAJ,IAAW,CAAxB,CAAJ,CAJV;AAAA,MAKIlvR,CAAC,GAAG,eAAIrC,CAAC,GAAG6uS,GAAR,IAAe,gBAAKlD,EAAL,CALvB;AAAA,MAMIyD,EAAE,GAAGC,gBAAgB,CAAChtS,CAAC,GAAG,eAAIrC,CAAC,GAAGsxR,MAAR,CAAL,EAAsBjvR,CAAC,GAAG,eAAIrC,CAAC,GAAGsxR,MAAR,CAA1B,CANzB;AAAA,MAOIv5R,CAAC,GAAG,0BAAWq3S,EAAE,CAAC,CAAD,CAAb,EAAkBA,EAAE,CAAC,CAAD,CAApB,EAAyBz9R,CAAC,GAAGA,CAA7B,CAPR;AAQA,SAAO,CAAC,CAAC5Z,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACw5R,GAAG,IAAI,CAAP,GAAW,CAAX,GAAe,CAAC,CAAjB,KAAuB,MAAMhmC,CAAN,GAAUxzP,CAAC,CAAC,CAAD,CAAlC,CAAR,CAAP;AACD;;AAED,SAASs3S,gBAAT,CAA0B70S,CAA1B,EAA6Bue,CAA7B,EAAgC;AAC9B,MAAIo6D,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,MACI80S,GAAG,GAAGv2R,CAAC,GAAG,CADd;AAAA,MAEIhhB,CAAC,GAAG,IAAIo7E,EAAJ,GAASp6D,CAAC,GAAGA,CAFrB;AAGA,SAAO,CACN,OAAO,CAACve,CAAC,IAAI,CAAL,GAAS24O,YAAT,GAAkB,CAACA,YAApB,IAA8B,iBAAMp7O,CAAN,EAAS,IAAIyC,CAAb,CAArC,CADM,EAEL,CAAC,IAAD,GAAQ,eAAIzC,CAAC,GAAGA,CAAJ,GAAQ,IAAIo7E,EAAhB,CAAR,GAA6B,MAAM,eAAIm8N,GAAG,GAAGA,GAAN,GAAYn8N,EAAhB,CAF9B,CAAP;AAID;;AAED,SAASo8N,kBAAT,CAA4Bh0S,CAA5B,EAA+B6G,CAA/B,EAAkC;AAChC,MAAI4iI,WAAW,GAAG5iI,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAxC;AACA,SAAO,CACL,CAAC7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAvB,IAA8B4iI,WADzB,EAEL,CAACzpI,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAvB,IAA8B4iI,WAFzB,CAAP;AAID;;AAEDmqK,QAAQ,CAACp9C,MAAT,GAAkB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/B,MAAI4yR,EAAE,GAAG,CAAC1I,cAAQ,CAAT,KAAeA,cAAQ,CAAvB,CAAT;AAAA,MACItxR,CAAC,GAAG,gBAAK,IAAIg6R,EAAE,GAAGA,EAAd,CADR;AAAA,MAEIpgD,CAAC,GAAG,yBAAUpY,YAAV,EAAkBxhO,CAAC,GAAGA,CAAtB,CAFR;AAAA,MAGI3R,CAAC,GAAG,CAAC,CAHT;AAAA,MAII1B,CAAC,GAAG,0BAAW,MAAMitP,CAAN,GAAUxyO,CAArB,EAAwB,CAACve,CAAzB,EAA4BmX,CAAC,GAAGA,CAAhC,CAJR;AAAA,MAKI69R,EAAE,GAAGD,kBAAkB,CAACjxS,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAL3B;AAAA,MAMIgzR,MAAM,GAAG,iBAAMke,EAAE,CAAC,CAAD,CAAR,EAAaA,EAAE,CAAC,CAAD,CAAf,IAAsBxvS,CANnC;AAOA,SAAO,CACLsxR,MADK,EAEL,IAAI,gBAAK,eAAI,MAAMtxR,CAAN,GAAU,eAAI2rS,EAAE,GAAG6D,EAAE,CAAC,CAAD,CAAP,GAAaA,EAAE,CAAC,CAAD,CAAf,GAAqB7D,EAAE,GAAG6D,EAAE,CAAC,CAAD,CAAP,GAAaA,EAAE,CAAC,CAAD,CAAxC,CAAd,CAAL,CAAJ,GAAwEr8D,YAFnE,CAAP;AAID,CAZD;;AAce,oBAAW;AACxB,SAAO,0BAAW,qBAAUg8D,QAAV,CAAX,EACFjlS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACpDD;;AACA;;AAEO,SAASulS,uBAAT,CAAiCpd,IAAjC,EAAuC;AAC5C,MAAItB,OAAO,GAAG,eAAIsB,IAAJ,CAAd;AAAA,MACIvB,OAAO,GAAG,eAAIuB,IAAJ,CADd;AAAA,MAEIzjC,MAAM,GAAG8gD,4BAA4B,CAACrd,IAAD,CAFzC;AAIAzjC,EAAAA,MAAM,CAACmD,MAAP,GAAgB29C,4BAA4B,CAAC,CAACrd,IAAF,CAA5C;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI54P,CAAC,GAAGi2N,MAAM,CAAC0iC,MAAD,EAASC,GAAT,CAAd;AACAD,IAAAA,MAAM,GAAG34P,CAAC,CAAC,CAAD,CAAV,EAAe44P,GAAG,GAAG54P,CAAC,CAAC,CAAD,CAAtB;AACA,QAAIi5P,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,QACII,MAAM,GAAG,eAAIJ,GAAJ,CADb;AAAA,QAEI2T,SAAS,GAAG,eAAI5T,MAAJ,CAFhB;AAAA,QAGIxnN,CAAC,GAAG,gBAAKinN,OAAO,GAAGa,MAAV,GAAmBd,OAAO,GAAGa,MAAV,GAAmBuT,SAA3C,CAHR;AAAA,QAIIjB,IAAI,GAAG,eAAIn6N,CAAJ,CAJX;AAAA,QAKIyhL,CAAC,GAAG,eAAI04C,IAAJ,IAAYvyN,aAAZ,GAAsB5H,CAAC,GAAGm6N,IAA1B,GAAiC,CALzC;AAMA,WAAO,CACL14C,CAAC,GAAGulC,OAAJ,GAAc,eAAIQ,MAAJ,CADT,EAEL,CAAC,eAAIA,MAAJ,IAAcn+C,YAAd,GAAuBoY,CAAvB,GAA2B,CAACA,CAA7B,MAAgC;AAC3BwlC,IAAAA,OAAO,GAAGY,MAAV,GAAmBb,OAAO,GAAGc,MAAV,GAAmBsT,SAD3C,CAFK,CAAP;AAKD;;AAEDpP,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIyqG,GAAG,GAAG,gBAAKhpH,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAjB,CAAV;AAAA,QACIkrR,IAAI,GAAG,CAAC,eAAIzgL,GAAJ,CADZ;AAAA,QAEImgL,IAAI,GAAG,eAAIngL,GAAJ,CAFX;AAAA,QAGIjoH,CAAC,GAAGioH,GAAG,GAAGmgL,IAHd;AAAA,QAIIvhS,CAAC,GAAG,CAAC2W,CAAD,GAAKkrR,IAJb;AAAA,QAKInjS,CAAC,GAAG0iH,GAAG,GAAGutK,OALd;AAAA,QAMI7vR,CAAC,GAAG,gBAAK3F,CAAC,GAAGA,CAAJ,GAAQ6G,CAAC,GAAGA,CAAZ,GAAgBtB,CAAC,GAAGA,CAAzB,CANR;AAAA,QAOIywR,GAAG,GAAG,iBAAMh2R,CAAC,GAAGuF,CAAJ,GAAQsB,CAAC,GAAGlB,CAAlB,EAAqBkB,CAAC,GAAGtB,CAAJ,GAAQvF,CAAC,GAAG2F,CAAjC,CAPV;AAAA,QAQIowR,MAAM,GAAG,CAAC9tK,GAAG,GAAG2vH,YAAN,GAAe,CAAC,CAAhB,GAAoB,CAArB,IAA0B,iBAAM34O,CAAC,GAAGypS,IAAV,EAAgBzgL,GAAG,GAAG,eAAI+tK,GAAJ,CAAN,GAAiBoS,IAAjB,GAAwB5qR,CAAC,GAAG,eAAIw4Q,GAAJ,CAAJ,GAAe0S,IAAvD,CARvC;AASA,WAAOr1C,MAAM,CAACmD,MAAP,CAAcu/B,MAAd,EAAsBC,GAAtB,CAAP;AACD,GAXD;;AAaA,SAAOuE,OAAP;AACD,EAED;AACA;;;AACA,SAAS4Z,4BAAT,CAAsCrd,IAAtC,EAA4C;AAC1C,MAAItB,OAAO,GAAG,eAAIsB,IAAJ,CAAd;AAAA,MACIvB,OAAO,GAAG,eAAIuB,IAAJ,CADd;AAGA,SAAO,UAASf,MAAT,EAAiBC,GAAjB,EAAsB;AAC3B,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI/2R,CAAC,GAAG,eAAI82R,MAAJ,IAAcK,MADtB;AAAA,QAEI54Q,CAAC,GAAG,eAAIu4Q,MAAJ,IAAcK,MAFtB;AAAA,QAGI7nN,CAAC,GAAG,eAAIynN,GAAJ,CAHR;AAIA,WAAO,CACL,iBAAMx4Q,CAAN,EAASve,CAAC,GAAGs2R,OAAJ,GAAchnN,CAAC,GAAGinN,OAA3B,CADK,EAEL,gBAAKjnN,CAAC,GAAGgnN,OAAJ,GAAct2R,CAAC,GAAGu2R,OAAvB,CAFK,CAAP;AAID,GATD;AAUD;;AAEc,oBAAW;AACxB,MAAIsB,IAAI,GAAG,CAAX;AAAA,MACIvmM,CAAC,GAAG,iCAAkB2jN,uBAAlB,CADR;AAAA,MAEI92Q,CAAC,GAAGmzD,CAAC,CAACumM,IAAD,CAFT;AAAA,MAGIsd,OAAO,GAAGh3Q,CAAC,CAACi2N,MAHhB;AAAA,MAII62C,OAAO,GAAG9sQ,CAAC,CAACskJ,MAJhB;AAAA,MAKI68D,MAAM,GAAG,uBALb;;AAOAnhN,EAAAA,CAAC,CAAC+sQ,QAAF,GAAa,UAAS1qR,CAAT,EAAY;AACvB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO0+R,IAAI,GAAG/mC,aAAd;AACvB,QAAIjpP,CAAC,GAAGs2B,CAAC,CAACi2N,MAAF,EAAR;AACA,WAAO9iK,CAAC,CAACumM,IAAI,GAAGr3Q,CAAC,GAAGqwO,aAAZ,CAAD,CAAsBuD,MAAtB,CAA6BvsP,CAA7B,CAAP;AACD,GAJD,CARwB,CAcxB;;;AACAs2B,EAAAA,CAAC,CAACi2N,MAAF,GAAW,UAAS5zO,CAAT,EAAY;AACrB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAQqnB,CAAC,GAAG20R,OAAO,CAACx8S,IAAR,CAAawlC,CAAb,CAAJ,EAAqB3d,CAAC,CAAC,CAAD,CAAD,IAAQq3Q,IAAI,GAAG/mC,aAApC,EAA6CtwO,CAArD;AACvB20R,IAAAA,OAAO,CAACx8S,IAAR,CAAawlC,CAAb,EAAgB,CAAC3d,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAD,GAAOq3Q,IAAI,GAAG/mC,aAArB,CAAhB;AACAxR,IAAAA,MAAM,CAACvlF,MAAP,CAAc,CAAC,CAACv5I,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAd;AACA,WAAO2d,CAAP;AACD,GALD;;AAOAA,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1BA,IAAAA,MAAM,GAAGwoH,OAAO,CAACxoH,MAAD,CAAhB;;AACAA,IAAAA,MAAM,CAAC+yG,MAAP,GAAgB,YAAW;AACzB/yG,MAAAA,MAAM,CAACszG,YAAP;AACA,UAAI7+M,OAAO,GAAG,IAAd;AAAA,UACImkI,IAAI,GAAGikC,MAAM,CAACtpO,MAAP,CAAc,KAAKkhE,OAAnB,IAA8BwjI,WAA9B,CAA0C,CAA1C,CADX;AAAA,UAEI3yM,CAAC,GAAGszM,IAAI,CAACliN,MAAL,GAAc,CAFtB;AAAA,UAGIU,CAAC,GAAG,CAAC,CAHT;AAAA,UAIIskC,CAJJ;AAKAskJ,MAAAA,MAAM,CAAC85D,SAAP;;AACA,aAAO,EAAE1iP,CAAF,GAAMkO,CAAb,EAAgB06K,MAAM,CAAC24B,KAAP,CAAa,CAACj9K,CAAC,GAAGk9K,IAAI,CAACxhN,CAAD,CAAT,EAAc,CAAd,CAAb,EAA+BskC,CAAC,CAAC,CAAD,CAAhC;;AAChBskJ,MAAAA,MAAM,CAACg6D,OAAP;AACAphC,MAAAA,IAAI,GAAGikC,MAAM,CAACtpO,MAAP,CAAc,KAAKkhE,OAAnB,IAA8BwjI,WAA9B,CAA0C,CAA1C,CAAP;AACA3yM,MAAAA,CAAC,GAAGszM,IAAI,CAACliN,MAAL,GAAc,CAAlB;AACAspL,MAAAA,MAAM,CAAC85D,SAAP;;AACA,aAAO,EAAE1iP,CAAF,IAAO,CAAd,EAAiB4oL,MAAM,CAAC24B,KAAP,CAAa,CAACj9K,CAAC,GAAGk9K,IAAI,CAACxhN,CAAD,CAAT,EAAc,CAAd,CAAb,EAA+BskC,CAAC,CAAC,CAAD,CAAhC;;AACjBskJ,MAAAA,MAAM,CAACg6D,OAAP;AACAh6D,MAAAA,MAAM,CAACuzG,UAAP;AACD,KAhBD;;AAiBA,WAAOvzG,MAAP;AACD,GApBD;;AAsBA,SAAOtkJ,CAAC,CACHzuB,KADE,CACI,OADJ,EAEFw7R,QAFE,CAEO,EAFP,EAGFzF,SAHE,CAGQ,MAAM,IAHd,CAAP;AAID;;;;;;;;;;AC5GD;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAI10C,CAAC,GAAG,CAAR;AAAA,IACIqkD,eAAe,GAAG,gBAAK,IAAI,IAAIrkD,CAAb,IAAkBD,aADxC;AAAA,IAEIukD,cAAc,GAAG,mDAAwB,CAAxB,CAFrB;;AAIO,SAASC,UAAT,CAAoB7pF,CAApB,EAAuB;AAC5B,MAAIosE,IAAI,GAAGud,eAAe,GAAGvkD,aAA7B;AAAA,MACIlrO,EAAE,GAAG,6BAAakxN,QAAb,EAAiBghD,IAAjB,EAAuB,CAAvB,IAA4B,6BAAa,CAAChhD,QAAd,EAAkBghD,IAAlB,EAAwB,CAAxB,CADrC;AAAA,MAEI19E,EAAE,GAAGk7F,cAAc,CAAC,CAAD,EAAIxd,IAAJ,CAAd,CAAwB,CAAxB,CAFT;AAAA,MAGIxrL,EAAE,GAAG,6BAAa,CAAb,EAAgBwrL,IAAhB,EAAsB,CAAtB,CAHT;AAAA,MAIIh9C,GAAG,GAAG6tD,eAASr8L,EAJnB;AAAA,MAKIl1F,CAAC,GAAG2/N,YAAMrrB,CALd;AAAA,MAMItlK,CAAC,GAAG,IAAI2wL,SANZ;AAAA,MAOI1wL,CAAC,GAAG+zJ,EAAE,GAAI0gC,GAAG,GAAGA,GAAN,GAAY,CAAb,GAAkB/D,SAP/B;;AASA,WAASwkD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI37E,KAAJ;AAAA,QACI6oF,IAAI,GAAG,eAAIlN,GAAJ,CADX;;AAEA,QAAIkN,IAAI,GAAGpM,IAAX,EAAiB;AACf,UAAIh+R,CAAC,GAAG,eAAI4xN,CAAC,GAAG,CAAR,EAAW,eAAI,CAAJ,EAAO,iBAAM,CAACqrE,MAAM,GAAGjgD,QAAV,IAAgB1/N,CAAtB,CAAP,CAAX,CAAR;AACA2/Q,MAAAA,MAAM,IAAIjgD,YAAMprB,CAAC,GAAG,CAAV,IAAeA,CAAf,GAAmB5xN,CAAC,GAAGsd,CAAjC;AACAikM,MAAAA,KAAK,GAAG,6BAAa07E,MAAb,EAAqBmN,IAArB,CAAR;AACA7oF,MAAAA,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAAL,GAAW07B,SAAX,GAAiBnxN,EAAjB,GAAsBmxN,aAAOrrB,CAAC,GAAG,CAAX,KAAiB,IAAIA,CAArB,CAAtB,GAAgD5xN,CAAC,GAAGi9O,SAAJ,GAAUrrB,CAArE;AACArQ,MAAAA,KAAK,CAAC,CAAD,CAAL,GAAWjB,EAAE,GAAG,CAACiB,KAAK,CAAC,CAAD,CAAL,GAAW/uG,EAAZ,IAAkB,CAAlB,GAAsBwuI,GAAtB,GAA4B/D,SAA5C;AACA,UAAIigD,GAAG,GAAG,CAAV,EAAa37E,KAAK,CAAC,CAAD,CAAL,GAAW,CAACA,KAAK,CAAC,CAAD,CAAjB;AACd,KAPD,MAOO;AACLA,MAAAA,KAAK,GAAGi6F,cAAc,CAACve,MAAD,EAASC,GAAT,CAAtB;AACD;;AACD37E,IAAAA,KAAK,CAAC,CAAD,CAAL,IAAYj1J,CAAZ,EAAei1J,KAAK,CAAC,CAAD,CAAL,IAAYh1J,CAA3B;AACA,WAAOg1J,KAAP;AACD;;AAEDkgF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9Bve,IAAAA,CAAC,IAAImmD,CAAL,EAAQ5nC,CAAC,IAAI6nC,CAAb;AACA,QAAImmD,EAAE,GAAG,eAAIhuF,CAAJ,CAAT;;AACA,QAAIguF,EAAE,GAAG4tG,EAAT,EAAa;AACX,UAAItgN,CAAC,GAAG,eAAI4xN,CAAC,GAAG,CAAR,EAAW,eAAI,CAAJ,EAAO,iBAAM,CAACzrN,CAAC,GAAG62O,QAAL,IAAW1/N,CAAjB,CAAP,CAAX,CAAR;AACAnX,MAAAA,CAAC,GAAG,CAACA,CAAC,GAAG62O,YAAMprB,CAAC,GAAG,CAAV,IAAeA,CAAnB,GAAuB5xN,CAAC,GAAGsd,CAA5B,IAAiCwO,EAAjC,GAAsCmxN,SAA1C;;AACA,UAAI17B,KAAK,GAAGozF,wBAAaj3C,MAAb,CAAoBv3P,CAApB,EAAuB,QAAQusG,EAAE,GAAG4tG,EAAb,IAAmB28B,SAAnB,GAAyB+D,GAAzB,GAA+BxuI,EAAtD,CAAZ;;AACA+uG,MAAAA,KAAK,CAAC,CAAD,CAAL,IAAYy7B,YAAMprB,CAAC,GAAG,CAAV,IAAeA,CAAf,GAAmB5xN,CAAC,GAAGsd,CAAnC;AACA,UAAIoH,CAAC,GAAG,CAAR,EAAW68L,KAAK,CAAC,CAAD,CAAL,GAAW,CAACA,KAAK,CAAC,CAAD,CAAjB;AACX,aAAOA,KAAP;AACD;;AACD,WAAOi6F,cAAc,CAAC99C,MAAf,CAAsBv3P,CAAtB,EAAyBue,CAAzB,CAAP;AACD,GAZD;;AAcA,SAAO+8Q,OAAP;AACD;;AAED,SAASia,SAAT,CAAmBv1S,CAAnB,EAAsBnG,CAAtB,EAAyB;AACvB,SAAO,CAACmG,CAAD,EAAInG,CAAC,GAAG,CAAJ,GAAQ,KAAKq9E,aAAb,GAAuBk+N,eAA3B,CAAP;AACD;;AAED,SAASI,YAAT,CAAsBx1S,CAAtB,EAAyBnG,CAAzB,EAA4B;AAC1B,SAAO,CAACmG,CAAD,EAAInG,CAAC,GAAG,CAAJ,GAAQ,CAAC,EAAD,GAAMq9E,aAAd,GAAwB,CAACk+N,eAA7B,CAAP;AACD;;AAED,SAASK,WAAT,CAAqB/uS,CAArB,EAAwB;AACtB,SAAO,CAACA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAIwwE,aAAZ,CAAD,EAAuBxwE,CAAC,CAAC,CAAD,CAAxB,CAAP;AACD;;AAED,SAAS8uR,MAAT,CAAgBjhR,IAAhB,EAAsB;AACpB,MAAIjO,CAAC,GAAG,GAAGlN,MAAH,CACN,oBAAM,CAAC,GAAP,EAAY,MAAMmb,IAAI,GAAG,CAAzB,EAA4BA,IAA5B,EAAkCjR,GAAlC,CAAsCiyS,SAAtC,CADM,EAEN,oBAAM,GAAN,EAAW,CAAC,GAAD,GAAOhhS,IAAI,GAAG,CAAzB,EAA4B,CAACA,IAA7B,EAAmCjR,GAAnC,CAAuCkyS,YAAvC,CAFM,CAAR;AAIA,SAAO;AACL17R,IAAAA,IAAI,EAAE,SADD;AAEL4gM,IAAAA,WAAW,EAAE,CAACnmM,IAAI,KAAK,GAAT,GAAejO,CAAC,CAAChD,GAAF,CAAMmyS,WAAN,CAAf,GAAoCnvS,CAArC;AAFR,GAAP;AAID;;AAEc,oBAAW;AACxB,MAAImlN,CAAC,GAAG,CAAR;AAAA,MACIn6H,CAAC,GAAG,iCAAkBgkN,UAAlB,CADR;AAAA,MAEIn3Q,CAAC,GAAGmzD,CAAC,CAACm6H,CAAD,CAFT;AAAA,MAGIw/E,OAAO,GAAG9sQ,CAAC,CAACskJ,MAHhB;;AAKAtkJ,EAAAA,CAAC,CAAC8tQ,KAAF,GAAU,UAASzrR,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACm6H,CAAC,GAAG,CAACjrM,CAAN,CAApB,GAA+BirM,CAAtC;AACD,GAFD;;AAIAttL,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1B,QAAI2xE,MAAM,GAAGj2N,CAAC,CAACi2N,MAAF,EAAb;AAAA,QACI+2C,YAAY,GAAGF,OAAO,CAACxoH,MAAD,CAD1B;AAAA,QAEI2oH,YAAY,IAAIjtQ,CAAC,CAACi2N,MAAF,CAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,GAAkB62C,OAAO,CAACxoH,MAAD,CAA7B,CAFhB;AAGAtkJ,IAAAA,CAAC,CAACi2N,MAAF,CAASA,MAAT;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAAE,4BAAUA,MAAM,CAAC,MAAM/pE,CAAP,CAAhB,EAA2B2/E,YAA3B;AAA2C,KAA9E;;AACA,WAAOD,YAAP;AACD,GAPD;;AASA,SAAOhtQ,CAAC,CACHzuB,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;AClGD;;AACA;;AAEO,SAASgmS,OAAT,CAAiB3kD,CAAjB,EAAoB;AACzB,MAAIrlC,CAAC,GAAG,IAAIqlC,CAAZ;AAAA,MACI4kD,KAAK,GAAG,eAAI,IAAIjqF,CAAR,CADZ;AAAA,MAEIkqF,EAAE,GAAG,gBAAKD,KAAL,CAFT;AAAA,MAGI3jD,CAAC,GAAG,IAAI,gBAAKnb,YAAMob,CAAC,GAAGpb,WAAK,IAAI++D,EAAJ,GAASlqF,CAAxB,CAAL,CAHZ;AAAA,MAIIumC,CAJJ;AAAA,MAKI4jD,IAAI,GAAG,MAAM7jD,CAAN,IAAWtmC,CAAC,GAAG,gBAAKqlC,CAAC,IAAI,IAAIA,CAAR,CAAN,CAAf,CALX;AAAA,MAMI+kD,EAAE,GAAG/kD,CAAC,GAAGA,CANb;AAAA,MAOIglD,EAAE,GAAGrqF,CAAC,GAAGA,CAPb;;AASA,WAAS4vE,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIx5R,CAAC,GAAG,IAAI,eAAIw5R,GAAJ,CAAZ;AAAA,QACI/tK,GADJ;AAAA,QAEIgtL,KAFJ;;AAGA,QAAIz4S,CAAC,IAAIA,CAAC,GAAG,CAAb,EAAgB;AACd,UAAI2wJ,KAAK,GAAGyqF,eAASo+C,GAArB;AAAA,UAA0Bl9R,CAAC,GAAG,EAA9B;AAAA,UAAkC21F,KAAlC;;AACA,SAAG;AACD,YAAIymN,QAAQ,GAAG,eAAI/nJ,KAAJ,CAAf;AAAA,YACIgoJ,QAAQ,GAAG,eAAIhoJ,KAAJ,CADf;AAAA,YAEIioJ,MAAM,GAAGP,EAAE,GAAG,iBAAMK,QAAN,EAAgBvqF,CAAC,GAAGwqF,QAApB,CAFlB;AAAA,YAGIhkD,CAAC,GAAG,IAAI6jD,EAAJ,GAAS,IAAIrqF,CAAJ,GAAQwqF,QAHzB;AAIAhoJ,QAAAA,KAAK,IAAI1+D,KAAK,GAAG,CAAC0+D,KAAK,GAAG4nJ,EAAE,GAAGF,EAAb,GAAkBlqF,CAAC,GAAGuqF,QAAtB,GAAiC/jD,CAAC,GAAGikD,MAArC,GAA6C,MAAM54S,CAAN,GAAU00P,CAAxD,KAA8D,IAAIvmC,CAAJ,GAAQuqF,QAAR,GAAmBE,MAAjF,CAAjB;AACD,OAND,QAMS,eAAI3mN,KAAJ,IAAaomK,cAAb,IAAyB,EAAE/7P,CAAF,GAAM,CANxC;;AAOAmvH,MAAAA,GAAG,GAAGgpI,CAAC,GAAG,gBAAKE,CAAL,CAAV;AACA8jD,MAAAA,KAAK,GAAGlf,MAAM,GAAGqf,MAAT,GAAkBt/D,QAA1B;AACD,KAXD,MAWO;AACL7tH,MAAAA,GAAG,GAAGgpI,CAAC,IAAIjB,CAAC,GAAGxzP,CAAR,CAAP;AACAy4S,MAAAA,KAAK,GAAGlf,MAAM,GAAG8e,EAAT,GAAc/+D,QAAtB;AACD;;AACD,WAAO,CACL7tH,GAAG,GAAG,eAAIgtL,KAAJ,CADD,EAELH,IAAI,GAAG7sL,GAAG,GAAG,eAAIgtL,KAAJ,CAFR,CAAP;AAID;;AAED1a,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIu3O,IAAI,GAAG91P,CAAC,GAAGA,CAAJ,GAAQ,CAACue,CAAC,IAAIs3R,IAAN,IAAct3R,CAAjC;AAAA,QACI23R,QAAQ,GAAG,CAAC,IAAIH,EAAJ,GAASjgD,IAAI,IAAI9D,CAAC,GAAGA,CAAR,CAAd,KAA6B,IAAItmC,CAAjC,CADf;AAAA,QAEIx9D,KAAK,GAAG,gBAAKgoJ,QAAL,CAFZ;AAAA,QAGID,QAAQ,GAAG,eAAI/nJ,KAAJ,CAHf;AAAA,QAIIioJ,MAAM,GAAGP,EAAE,GAAG,iBAAMK,QAAN,EAAgBvqF,CAAC,GAAGwqF,QAApB,CAJlB;AAKA,WAAO,CACL,gBAAKl2S,CAAC,GAAG,gBAAK81P,IAAL,CAAT,IAAuBjf,QAAvB,GAA4Bs/D,MADvB,EAEL,gBAAK,IAAI,KAAKjoJ,KAAK,GAAG4nJ,EAAE,GAAGF,EAAb,GAAkBlqF,CAAC,GAAGuqF,QAAtB,GAAiC,CAAC,IAAIF,EAAJ,GAAS,IAAIrqF,CAAJ,GAAQwqF,QAAlB,IAA8BC,MAApE,IAA8ElkD,CAAvF,CAFK,CAAP;AAID,GAVD;;AAYA,SAAOqpC,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIvqC,CAAC,GAAG,CAAR;AAAA,MACIz/J,CAAC,GAAG,iCAAkBokN,OAAlB,CADR;AAAA,MAEIv3Q,CAAC,GAAGmzD,CAAC,CAACy/J,CAAD,CAFT;;AAIA5yN,EAAAA,CAAC,CAACkiP,KAAF,GAAU,UAAS7/P,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACy/J,CAAC,GAAG,CAACvwO,CAAN,CAApB,GAA+BuwO,CAAtC;AACD,GAFD;;AAIA,SAAO5yN,CAAC,CACHzuB,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAD,EAAI,KAAJ,CAFL,CAAP;AAGD;;;;;;;;;;;ACjED;;AACA;;AACA;;AAEO,IAAIq8I,gBAAgB,GAAG,kBAAvB;;AAEA,IAAIC,cAAc,GAAG,eAArB;;;AAEA,SAASC,gBAAT,CAA0Bxf,MAA1B,EAAkCC,GAAlC,EAAuC;AAC5C,SAAOA,GAAG,GAAG,CAACqf,gBAAP,IACAtf,MAAM,GAAG,6BAAaA,MAAb,EAAqBC,GAArB,CAAT,EAAoCD,MAAM,CAAC,CAAD,CAAN,IAAauf,cAAjD,EAAiEvf,MADjE,IAED,+BAAcA,MAAd,EAAsBC,GAAtB,CAFN;AAGD;;AAEDuf,gBAAgB,CAAC/+C,MAAjB,GAA0B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACvC,SAAOA,CAAC,GAAG,CAAC63R,gBAAL,GACD3I,wBAAal2C,MAAb,CAAoBv3P,CAApB,EAAuBue,CAAC,GAAG83R,cAA3B,CADC,GAED1I,0BAAcp2C,MAAd,CAAqBv3P,CAArB,EAAwBue,CAAxB,CAFN;AAGD,CAJD;;AAMe,oBAAW;AACxB,SAAO,0BAAW+3R,gBAAX,EACFliD,MADE,CACK,CAAC,CAAC,EAAF,EAAM,CAAC,EAAP,CADL,EAEF1kP,KAFE,CAEI,OAFJ,EAGFqqJ,MAHE,CAGK,CAAC,CAAD,EAAI,CAAC,MAAL,CAHL,CAAP;AAID;;;;;;;;;;ACzBD;;AACA;;AACA;;AACA;;AACA;;AAEO,SAASw8I,aAAT,CAAuBzf,MAAvB,EAA+BC,GAA/B,EAAoC;AACzC,SAAO,eAAIA,GAAJ,IAAWqf,+BAAX,IACAtf,MAAM,GAAG,6BAAaA,MAAb,EAAqBC,GAArB,CAAT,EAAoCD,MAAM,CAAC,CAAD,CAAN,IAAaC,GAAG,GAAG,CAAN,GAAUsf,6BAAV,GAA2B,CAACA,6BAA7E,EAA6Fvf,MAD7F,IAED,+BAAcA,MAAd,EAAsBC,GAAtB,CAFN;AAGD;;AAEDwf,aAAa,CAACh/C,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpC,SAAO,eAAIA,CAAJ,IAAS63R,+BAAT,GACD3I,wBAAal2C,MAAb,CAAoBv3P,CAApB,EAAuBue,CAAC,IAAIA,CAAC,GAAG,CAAJ,GAAQ83R,6BAAR,GAAyB,CAACA,6BAA9B,CAAxB,CADC,GAED1I,0BAAcp2C,MAAd,CAAqBv3P,CAArB,EAAwBue,CAAxB,CAFN;AAGD,CAJD;;AAMe,oBAAW;AACxB,SAAO,0BAAWg4R,aAAX,EACF7mS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACrBD;;AACA;;AACA;;AAEO,SAAS8mS,WAAT,CAAqBz1S,CAArB,EAAwB6G,CAAxB,EAA2B6uS,MAA3B,EAAmCp2B,KAAnC,EAA0C;AAC/C,MAAIlpQ,CAAC,GAAG,gBACH,IAAI0/N,QAAL,IACG,IAAI4/D,MAAJ,GACC,CAAC,IAAI11S,CAAJ,GAAQ6G,CAAC,GAAG,CAAb,IAAkB,eAAI,IAAI6uS,MAAR,CADnB,GAEE,CAAC11S,CAAC,GAAG6G,CAAL,IAAU,CAAX,GAAgB,eAAI,IAAI6uS,MAAR,CAFjB,GAGE7uS,CAAC,GAAG,CAAL,GAAU,eAAI,IAAI6uS,MAAR,CAJd,CADI,CAAR;AAAA,MAOEnwS,CAAC,GAAG,gBACF+5Q,KAAK,GACH,eAAIo2B,MAAJ,CADF,GAEE,gBAAK,CAAC,IAAI11S,CAAC,GAAG,eAAI,IAAI01S,MAAR,CAAR,GAA0B7uS,CAAC,GAAG,eAAI,IAAI6uS,MAAR,CAA/B,KAAmD,IAAI11S,CAAJ,GAAQ6G,CAA3D,CAAL,CAHA,CAPN;AAAA,MAYEqqF,CAAC,GAAGwkN,MAAM,GAAGC,OAAO,CAAC,CAAD,CAZtB;;AAcA,WAAS1gS,MAAT,CAAgBq+R,GAAhB,EAAqB;AACnB,WAAO,gBAAK,IAAItzS,CAAC,GAAG,eAAI,IAAIszS,GAAR,CAAR,GAAuBzsS,CAAC,GAAG,eAAI,IAAIysS,GAAR,CAAhC,CAAP;AACD;;AAED,WAASqC,OAAT,CAAiBn5S,CAAjB,EAAoB;AAClB,QAAI82S,GAAG,GAAG92S,CAAC,GAAGk5S,MAAd;AACA,WACE,CAAC,IAAIpC,GAAJ,GACC,CAAC,IAAItzS,CAAJ,GAAQ6G,CAAC,GAAG,CAAb,IAAkB,eAAI,IAAIysS,GAAR,CADnB,GAEE,CAACtzS,CAAC,GAAG6G,CAAL,IAAU,CAAX,GAAgB,eAAI,IAAIysS,GAAR,CAFjB,GAGEzsS,CAAC,GAAG,CAAL,GAAU,eAAI,IAAIysS,GAAR,CAHZ,IAIAoC,MALF;AAOD;;AAED,WAASE,cAAT,CAAwBtC,GAAxB,EAA6B;AAC3B,WAAOr+R,MAAM,CAACq+R,GAAD,CAAN,GAAc,eAAIA,GAAJ,CAArB;AACD;;AAED,MAAI/Y,OAAO,GAAG,UAASxE,MAAT,EAAiBC,GAAjB,EAAsB;AAClC,QAAIsd,GAAG,GAAGoC,MAAM,GAAG,mBAAMC,OAAN,EAAgBzkN,CAAC,GAAG,eAAI8kM,GAAJ,CAAL,GAAiB0f,MAAhC,EAAwC1f,GAAG,GAAGlgD,QAA9C,CAAnB;AACA,QAAIpyO,KAAK,CAAC4vS,GAAD,CAAT,EAAgBA,GAAG,GAAGoC,MAAM,GAAG,gBAAK1f,GAAL,CAAf;AAChB,QAAI53C,EAAE,GAAGhoO,CAAC,GAAGnB,MAAM,CAACq+R,GAAD,CAAnB;AACA,WAAO,CAAGl1D,EAAE,GAAG74O,CAAL,GAASwwR,MAAV,GAAoBjgD,QAArB,GAA2B,eAAIw9D,GAAJ,CAA5B,EAAuCl1D,EAAE,GAAG74O,CAAN,GAAW,eAAI+tS,GAAJ,CAAjD,CAAP;AACD,GALD;;AAOA/Y,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI81R,GAAG,GAAG,mBAAMsC,cAAN,EAAuBp4R,CAAC,GAAGjY,CAAL,GAAU6Q,CAAhC,CAAV;AACA,WAAO,CACJnX,CAAC,GAAG62O,QAAL,IAAY,eAAIw9D,GAAJ,IAAWl9R,CAAX,GAAe7Q,CAAf,GAAmB0P,MAAM,CAACq+R,GAAD,CAArC,CADK,EAEL,gBAAMoC,MAAM,GAAGC,OAAO,CAACrC,GAAG,GAAGoC,MAAP,CAAjB,GAAmCxkN,CAAxC,CAFK,CAAP;AAID,GAND;;AAQA,MAAIwkN,MAAM,KAAK,CAAf,EAAkB;AAChBt/R,IAAAA,CAAC,GAAG,gBAAKkpQ,KAAK,GAAGxpC,QAAb,CAAJ;;AACAykD,IAAAA,OAAO,GAAG,UAASxE,MAAT,EAAiBC,GAAjB,EAAsB;AAC9B,aAAO,CAACD,MAAM,GAAG3/Q,CAAV,EAAa,eAAI4/Q,GAAJ,IAAW5/Q,CAAxB,CAAP;AACD,KAFD;;AAGAmkR,IAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,aAAO,CAACve,CAAC,GAAGmX,CAAL,EAAQ,gBAAKoH,CAAC,GAAGpH,CAAT,CAAR,CAAP;AACD,KAFD;AAGD;;AAED,SAAOmkR,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIv6R,CAAC,GAAG,CAAR;AAAA,MACE6G,CAAC,GAAG,CADN;AAAA,MAEE6uS,MAAM,GAAG,KAAK5lD,aAFhB;AAAA,MAGEwvB,KAAK,GAAG,CAHV;AAAA,MAIEu2B,MAAM,GAAG,iCAAkBJ,WAAlB,CAJX;AAAA,MAKE3T,UAAU,GAAG+T,MAAM,CAAC71S,CAAD,EAAI6G,CAAJ,EAAO6uS,MAAP,EAAep2B,KAAf,CALrB;;AAOAwiB,EAAAA,UAAU,CAAC9hS,CAAX,GAAe,UAASyf,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAAE71S,CAAC,GAAG,CAACyf,CAAP,EAAW5Y,CAAX,EAAc6uS,MAAd,EAAsBp2B,KAAtB,CAAzB,GAAwDt/Q,CAA/D;AACD,GAFD;;AAGA8hS,EAAAA,UAAU,CAACj7R,CAAX,GAAe,UAAS4Y,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAAC71S,CAAD,EAAK6G,CAAC,GAAG,CAAC4Y,CAAV,EAAci2R,MAAd,EAAsBp2B,KAAtB,CAAzB,GAAwDz4Q,CAA/D;AACD,GAFD;;AAGAi7R,EAAAA,UAAU,CAAC4T,MAAX,GAAoB,UAASj2R,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,GACHy9S,MAAM,CAAC71S,CAAD,EAAI6G,CAAJ,EAAQ6uS,MAAM,GAAG,CAACj2R,CAAD,GAAKqwO,aAAtB,EAAgCwvB,KAAhC,CADH,GAEHo2B,MAAM,GAAG3lD,aAFb;AAGD,GAJD;;AAKA+xC,EAAAA,UAAU,CAACxiB,KAAX,GAAmB,UAAS7/P,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAAC71S,CAAD,EAAI6G,CAAJ,EAAO6uS,MAAP,EAAgBp2B,KAAK,GAAG,CAAC7/P,CAAzB,CAAzB,GAAwD6/P,KAA/D;AACD,GAFD;;AAIA,SAAOwiB,UAAU,CAACnzR,KAAX,CAAiB,OAAjB,CAAP;AACD;;;;;;;;;AC1FD;AAEA;AACA;AACA,SAASmnS,MAAT,CAAiBrxS,CAAjB,EAAoBzE,CAApB,EAAuB6G,CAAvB,EAA0BkvS,EAA1B,EAA8BltG,EAA9B,EAAkCE,EAAlC,EAAsCitG,EAAtC,EAA0CC,GAA1C,EAA+CC,QAA/C,EAAyD3pS,KAAzD,EAAgEiO,KAAhE,EAAuE;AACrE,MAAIA,KAAK,CAAC27R,cAAV,EAA0B;AACxB,WAAO9qO,GAAP;AACD;;AAED,MAAIhmB,CAAJ,EAAOqmP,EAAP,EAAW7zQ,EAAX,EAAeu+Q,EAAf,EAAmBllO,EAAnB,EAAuBvD,EAAvB,EAA2B4iB,CAA3B,EAA8B8lN,EAA9B,EAAkCC,EAAlC,EAAsCp6R,GAAtC;AAEAmpC,EAAAA,CAAC,GAAGx+C,CAAC,GAAG7G,CAAR;AACA0rS,EAAAA,EAAE,GAAGjnS,CAAC,CAACzE,CAAC,GAAGqlD,CAAC,GAAG,IAAT,CAAN;AACAxtB,EAAAA,EAAE,GAAGpzB,CAAC,CAACoC,CAAC,GAAGw+C,CAAC,GAAG,IAAT,CAAN,CATqE,CAWrE;;AACA,MAAI3hD,KAAK,CAACgoS,EAAD,CAAT,EAAe;AACblxR,IAAAA,KAAK,CAAC27R,cAAN,GAAuB,IAAvB;AACA;AACD,GAfoE,CAiBrE;;;AACA,MAAIzyS,KAAK,CAACm0B,EAAD,CAAT,EAAe;AACbrd,IAAAA,KAAK,CAAC27R,cAAN,GAAuB,IAAvB;AACA;AACD;;AAEDC,EAAAA,EAAE,GAAG/wP,CAAC,IAAI0wP,EAAE,GAAG,IAAIrK,EAAT,GAAc7iG,EAAlB,CAAD,GAAyB,EAA9B;AACA33H,EAAAA,EAAE,GAAG7rB,CAAC,IAAIwjJ,EAAE,GAAG,IAAIhxK,EAAT,GAAckxK,EAAlB,CAAD,GAAyB,EAA9B;AACAp7H,EAAAA,EAAE,GAAGyoO,EAAE,GAAGllO,EAAV;AACAh1D,EAAAA,GAAG,GAAG,CAACyxD,EAAE,GAAGqoO,EAAN,IAAY,EAAlB;;AAEA,MAAIzpS,KAAK,GAAG2pS,QAAZ,EAAsB;AACpB17R,IAAAA,KAAK,CAAC+7R,aAAN;AACA,WAAO5oO,EAAE,GAAGzxD,GAAZ;AACD,GAHD,MAGO,IAAIrd,IAAI,CAACiT,GAAL,CAASoK,GAAT,IAAgB+5R,GAApB,EAAyB;AAC9B,WAAOtoO,EAAE,GAAGzxD,GAAZ;AACD,GAFM,MAEA;AACLq0E,IAAAA,CAAC,GAAGvwF,CAAC,GAAGqlD,CAAC,GAAG,GAAZ;AAEAgxP,IAAAA,EAAE,GAAGP,MAAM,CAACrxS,CAAD,EAAIzE,CAAJ,EAAOuwF,CAAP,EAAUwlN,EAAV,EAAcrK,EAAd,EAAkB7iG,EAAlB,EAAsButG,EAAtB,EAA0BH,GAAG,GAAG,GAAhC,EAAqCC,QAArC,EAA+C3pS,KAAK,GAAG,CAAvD,EAA0DiO,KAA1D,CAAX;;AAEA,QAAI9W,KAAK,CAAC2yS,EAAD,CAAT,EAAe;AACb77R,MAAAA,KAAK,CAAC27R,cAAN,GAAuB,IAAvB;AACA,aAAO9qO,GAAP;AACD;;AAEDirO,IAAAA,EAAE,GAAGR,MAAM,CAACrxS,CAAD,EAAI8rF,CAAJ,EAAO1pF,CAAP,EAAUgiM,EAAV,EAAchxK,EAAd,EAAkBkxK,EAAlB,EAAsB73H,EAAtB,EAA0B+kO,GAAG,GAAG,GAAhC,EAAqCC,QAArC,EAA+C3pS,KAAK,GAAG,CAAvD,EAA0DiO,KAA1D,CAAX;;AAEA,QAAI9W,KAAK,CAAC4yS,EAAD,CAAT,EAAe;AACb97R,MAAAA,KAAK,CAAC27R,cAAN,GAAuB,IAAvB;AACA,aAAO9qO,GAAP;AACD;;AAED,WAAOgrO,EAAE,GAAGC,EAAZ;AACD;AACF;;AAEM,SAASE,SAAT,CAAoB/xS,CAApB,EAAuBzE,CAAvB,EAA0B6G,CAA1B,EAA6BovS,GAA7B,EAAkCC,QAAlC,EAA4C;AACjD,MAAI17R,KAAK,GAAG;AACV+7R,IAAAA,aAAa,EAAE,CADL;AAEVJ,IAAAA,cAAc,EAAE;AAFN,GAAZ;;AAKA,MAAIF,GAAG,KAAKjoL,SAAZ,EAAuB;AACrBioL,IAAAA,GAAG,GAAG,IAAN;AACD;;AACD,MAAIC,QAAQ,KAAKloL,SAAjB,EAA4B;AAC1BkoL,IAAAA,QAAQ,GAAG,EAAX;AACD;;AAED,MAAIH,EAAE,GAAGtxS,CAAC,CAACzE,CAAD,CAAV;AACA,MAAI6oM,EAAE,GAAGpkM,CAAC,CAAC,OAAOzE,CAAC,GAAG6G,CAAX,CAAD,CAAV;AACA,MAAIkiM,EAAE,GAAGtkM,CAAC,CAACoC,CAAD,CAAV;AAEA,MAAImvS,EAAE,GAAG,CAACD,EAAE,GAAG,IAAIltG,EAAT,GAAcE,EAAf,KAAsBliM,CAAC,GAAG7G,CAA1B,IAA+B,CAAxC;AAEA,MAAIhC,MAAM,GAAG83S,MAAM,CAACrxS,CAAD,EAAIzE,CAAJ,EAAO6G,CAAP,EAAUkvS,EAAV,EAAcltG,EAAd,EAAkBE,EAAlB,EAAsBitG,EAAtB,EAA0BC,GAA1B,EAA+BC,QAA/B,EAAyC,CAAzC,EAA4C17R,KAA5C,CAAnB;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEE,SAAOxc,MAAP;AACD;;;;;;;;;;AC1FD;;AACA;;AACA;;AAEO,SAASy4S,kBAAT,CAA4BrkS,KAA5B,EAAmCgE,CAAnC,EAAsC8hJ,KAAtC,EAA6C;AAElD,WAASw+I,QAAT,CAAmBjyS,CAAnB,EAAsB;AACpB,WAAO2N,KAAK,GAAG,CAAC,IAAIA,KAAL,IAAc,eAAI,IAAI,eAAI3N,CAAJ,EAAO2R,CAAP,CAAR,EAAmB,IAAIA,CAAvB,CAA7B;AACD;;AAED,WAASm4D,CAAT,CAAW9pE,CAAX,EAAc;AACZ,WAAO,0BAAUiyS,QAAV,EAAoB,CAApB,EAAuBjyS,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AAED,MAAIkyS,CAAC,GAAG,IAAIpoO,CAAC,CAAC,CAAD,CAAb;AAAA,MACIvnE,CAAC,GAAG,IADR;AAAA,MAEIupF,CAAC,GAAG,CAAC,IAAI,IAAL,IAAaomN,CAFrB;AAAA,MAGIC,MAAM,GAAG,EAHb;;AAIA,OAAK,IAAI99S,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIkO,CAArB,EAAwBlO,CAAC,EAAzB,EACI89S,MAAM,CAAC79S,IAAP,CAAYw1E,CAAC,CAACz1E,CAAC,GAAGkO,CAAL,CAAD,GAAWupF,CAAvB;;AAEJ,WAASk0I,CAAT,CAAWirE,MAAX,EAAmB;AACjB,QAAImH,IAAI,GAAG,CAAX;AAAA,QAAcC,IAAI,GAAG9vS,CAArB;AAAA,QAAwBF,CAAC,GAAGE,CAAC,IAAI,CAAjC;;AACA,OAAG;AACD,UAAI4vS,MAAM,CAAC9vS,CAAD,CAAN,GAAY4oS,MAAhB,EAAwBoH,IAAI,GAAGhwS,CAAP,CAAxB,KAAuC+vS,IAAI,GAAG/vS,CAAP;AACvCA,MAAAA,CAAC,GAAI+vS,IAAI,GAAGC,IAAR,IAAiB,CAArB;AACD,KAHD,QAGShwS,CAAC,GAAG+vS,IAHb;;AAIA,QAAI/+N,CAAC,GAAG8+N,MAAM,CAAC9vS,CAAC,GAAG,CAAL,CAAN,GAAgB8vS,MAAM,CAAC9vS,CAAD,CAA9B;AACA,QAAIgxE,CAAJ,EAAOA,CAAC,GAAG,CAAC43N,MAAM,GAAGkH,MAAM,CAAC9vS,CAAC,GAAG,CAAL,CAAhB,IAA2BgxE,CAA/B;AACP,WAAO,CAAChxE,CAAC,GAAG,CAAJ,GAAQgxE,CAAT,IAAc9wE,CAArB;AACD;;AAED,MAAIs4Q,KAAK,GAAG,IAAI76C,CAAC,CAAC,CAAD,CAAL,GAAWqR,QAAX,GAAgB6gE,CAAhB,GAAoBz+I,KAAhC;;AAEA,MAAIqiI,OAAO,GAAG,UAASxE,MAAT,EAAiBC,GAAjB,EAAsB;AAClC,QAAIx4Q,CAAC,GAAGinN,CAAC,CAAC,eAAI,eAAIuxD,GAAJ,CAAJ,CAAD,CAAT;AAAA,QACI/2R,CAAC,GAAGy3S,QAAQ,CAACl5R,CAAD,CAAR,GAAcu4Q,MADtB;AAEAv4Q,IAAAA,CAAC,IAAI8hQ,KAAL;AACA,WAAO,CAAErgR,CAAF,EAAM+2R,GAAG,IAAI,CAAR,GAAax4Q,CAAb,GAAiB,CAACA,CAAvB,CAAP;AACD,GALD;;AAOA+8Q,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIw4Q,GAAJ;AACAx4Q,IAAAA,CAAC,IAAI8hQ,KAAL;AACA,QAAI,eAAI9hQ,CAAJ,IAAS,CAAb,EAAgBw4Q,GAAG,GAAG,gBAAKx4Q,CAAL,IAAU,gBAAK+wD,CAAC,CAAC,eAAI/wD,CAAJ,CAAD,CAAD,GAAYm5R,CAAjB,CAAhB;AAChB,WAAO,CAAE13S,CAAC,GAAGy3S,QAAQ,CAAC,eAAIl5R,CAAJ,CAAD,CAAd,EAAwBw4Q,GAAxB,CAAP;AACD,GALD;;AAOA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAInoR,KAAK,GAAG,CAAZ;AAAA,MACIgE,CAAC,GAAG,GADR;AAAA,MAEI8hJ,KAAK,GAAG,QAFZ;AAAA,MAEsB;AAClB3nE,EAAAA,CAAC,GAAG,iCAAkBkmN,kBAAlB,CAHR;AAAA,MAIIr5Q,CAAC,GAAGmzD,CAAC,CAACn+E,KAAD,EAAQgE,CAAR,EAAW8hJ,KAAX,CAJT;;AAMA96H,EAAAA,CAAC,CAAChrB,KAAF,GAAU,UAASqN,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACn+E,KAAK,GAAG,CAACqN,CAAV,EAAarJ,CAAb,EAAgB8hJ,KAAhB,CAApB,GAA6C9lJ,KAApD;AACD,GAFD;;AAIAgrB,EAAAA,CAAC,CAAChnB,CAAF,GAAM,UAASqJ,CAAT,EAAY;AAChB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACn+E,KAAD,EAAQgE,CAAC,GAAG,CAACqJ,CAAb,EAAgBy4I,KAAhB,CAApB,GAA6C9hJ,CAApD;AACD,GAFD;;AAIAgnB,EAAAA,CAAC,CAAC86H,KAAF,GAAU,UAASz4I,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACn+E,KAAD,EAAQgE,CAAR,EAAW8hJ,KAAK,GAAG,CAACz4I,CAApB,CAApB,GAA6Cy4I,KAApD;AACD,GAFD;;AAIA,SAAO96H,CAAC,CACHzuB,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;ACxED;;AACA;;AACA;;AAEA,SAASooS,UAAT,CAAoB/2S,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,SAAO,eAAI7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAZ,IAAmBsvE,aAAnB,IAA8B,eAAIn2E,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAZ,IAAmBsvE,aAAxD;AACD;;AAED,SAAS6gO,eAAT,CAAyBr9F,WAAzB,EAAsCppH,CAAtC,EAAyC;AACvC,MAAIz3F,CAAC,GAAG,CAAC,CAAT;AAAA,MACIkO,CAAC,GAAG2yM,WAAW,CAACvhN,MADpB;AAAA,MAEI4iN,EAAE,GAAGrB,WAAW,CAAC,CAAD,CAFpB;AAAA,MAGI9rF,EAHJ;AAAA,MAIIjpG,EAJJ;AAAA,MAKIhH,EALJ;AAAA,MAMIq5R,SAAS,GAAG,EANhB;;AAOA,SAAO,EAAEn+S,CAAF,GAAMkO,CAAb,EAAgB;AACd6mH,IAAAA,EAAE,GAAG8rF,WAAW,CAAC7gN,CAAD,CAAhB;AACA8rB,IAAAA,EAAE,GAAG,CAACipG,EAAE,CAAC,CAAD,CAAF,GAAQmtF,EAAE,CAAC,CAAD,CAAX,IAAkBzqH,CAAvB;AACA3yE,IAAAA,EAAE,GAAG,CAACiwG,EAAE,CAAC,CAAD,CAAF,GAAQmtF,EAAE,CAAC,CAAD,CAAX,IAAkBzqH,CAAvB;;AACA,SAAK,IAAIxtF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtF,CAApB,EAAuB,EAAExtF,CAAzB,EAA4Bk0S,SAAS,CAACl+S,IAAV,CAAe,CAACiiN,EAAE,CAAC,CAAD,CAAF,GAAQj4M,CAAC,GAAG6hB,EAAb,EAAiBo2L,EAAE,CAAC,CAAD,CAAF,GAAQj4M,CAAC,GAAG6a,EAA7B,CAAf;;AAC5Bo9L,IAAAA,EAAE,GAAGntF,EAAL;AACD;;AACDopL,EAAAA,SAAS,CAACl+S,IAAV,CAAe80H,EAAf;AACA,SAAOopL,SAAP;AACD;;AAED,SAASC,iBAAT,CAA2BhM,KAA3B,EAAkC;AAChC,MAAIvxF,WAAW,GAAG,EAAlB;AAAA,MACIw9F,IADJ;AAAA,MAEI7hB,OAFJ;AAAA,MAEawB,IAFb;AAAA,MAEmBE,IAFnB;AAAA,MAGIC,OAHJ;AAAA,MAGaiM,IAHb;AAAA,MAIIpqS,CAJJ;AAAA,MAIOkO,CAAC,GAAGkkS,KAAK,CAAC,CAAD,CAAL,CAAS9yS,MAJpB,CADgC,CAOhC;;AACA,OAAKU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBq+S,IAAAA,IAAI,GAAGjM,KAAK,CAAC,CAAD,CAAL,CAASpyS,CAAT,CAAP;AACAw8R,IAAAA,OAAO,GAAG6hB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAV,EAAsBrgB,IAAI,GAAGqgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAA7B,EAAyCngB,IAAI,GAAGmgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAhD;AACAlgB,IAAAA,OAAO,GAAGkgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAV,EAAsBjU,IAAI,GAAGiU,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAA7B;AACAx9F,IAAAA,WAAW,CAAC5gN,IAAZ,CAAiBi+S,eAAe,CAAC,CAC/B,CAAC1hB,OAAO,GAAGn/M,aAAX,EAAoB2gN,IAAI,GAAG3gN,aAA3B,CAD+B,EAE/B,CAACm/M,OAAO,GAAGn/M,aAAX,EAAoB6gN,IAAI,GAAG7gN,aAA3B,CAF+B,EAG/B,CAAC8gN,OAAO,GAAG9gN,aAAX,EAAoB6gN,IAAI,GAAG7gN,aAA3B,CAH+B,EAI/B,CAAC8gN,OAAO,GAAG9gN,aAAX,EAAoB+sN,IAAI,GAAG/sN,aAA3B,CAJ+B,CAAD,EAK7B,EAL6B,CAAhC;AAMD,GAlB+B,CAoBhC;;;AACA,OAAKr9E,CAAC,GAAGoyS,KAAK,CAAC,CAAD,CAAL,CAAS9yS,MAAT,GAAkB,CAA3B,EAA8BU,CAAC,IAAI,CAAnC,EAAsC,EAAEA,CAAxC,EAA2C;AACzCq+S,IAAAA,IAAI,GAAGjM,KAAK,CAAC,CAAD,CAAL,CAASpyS,CAAT,CAAP;AACAw8R,IAAAA,OAAO,GAAG6hB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAV,EAAsBrgB,IAAI,GAAGqgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAA7B,EAAyCngB,IAAI,GAAGmgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAhD;AACAlgB,IAAAA,OAAO,GAAGkgB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAV,EAAsBjU,IAAI,GAAGiU,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAA7B;AACAx9F,IAAAA,WAAW,CAAC5gN,IAAZ,CAAiBi+S,eAAe,CAAC,CAC/B,CAAC/f,OAAO,GAAG9gN,aAAX,EAAoB+sN,IAAI,GAAG/sN,aAA3B,CAD+B,EAE/B,CAAC8gN,OAAO,GAAG9gN,aAAX,EAAoB6gN,IAAI,GAAG7gN,aAA3B,CAF+B,EAG/B,CAACm/M,OAAO,GAAGn/M,aAAX,EAAoB6gN,IAAI,GAAG7gN,aAA3B,CAH+B,EAI/B,CAACm/M,OAAO,GAAGn/M,aAAX,EAAoB2gN,IAAI,GAAG3gN,aAA3B,CAJ+B,CAAD,EAK7B,EAL6B,CAAhC;AAMD;;AAED,SAAO;AACLp9D,IAAAA,IAAI,EAAE,SADD;AAEL4gM,IAAAA,WAAW,EAAE,CAAC,oBAAMA,WAAN,CAAD;AAFR,GAAP;AAID;;AAEc,kBAASg5B,OAAT,EAAkBu4D,KAAlB,EAAyBj8P,OAAzB,EAAkC;AAC/C,MAAIwlP,MAAJ,EAAY7oB,MAAZ;;AAEA,WAAS2uB,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIzkR,IAAI,GAAGykR,GAAG,GAAG,CAAN,GAAU,CAAC,CAAX,GAAe,CAAC,CAA3B;AAAA,QAA8BmhB,IAAI,GAAGjM,KAAK,CAAC,EAAElV,GAAG,GAAG,CAAR,CAAD,CAA1C;;AACA,SAAK,IAAIl9R,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGmwS,IAAI,CAAC/+S,MAAL,GAAc,CAAlC,EAAqCU,CAAC,GAAGkO,CAAJ,IAAS+uR,MAAM,GAAGohB,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAAvD,EAAsE,EAAEA,CAAxE,CAA0E;;AAC1E,QAAIskC,CAAC,GAAGu1M,OAAO,CAACojD,MAAM,GAAGohB,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAAV,EAAyBk9R,GAAzB,CAAf;AACA54P,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQu1M,OAAO,CAACwkE,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAAD,EAAgByY,IAAI,GAAGykR,GAAP,GAAazkR,IAAI,GAAG4lS,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAApB,GAAoCq+S,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAApC,GAAoDk9R,GAApE,CAAP,CAAgF,CAAhF,CAAR;AACA,WAAO54P,CAAP;AACD;;AAED,MAAI6R,OAAJ,EAAa;AACXsrP,IAAAA,OAAO,CAAC/jC,MAAR,GAAiBvnN,OAAO,CAACsrP,OAAD,CAAxB;AACD,GAFD,MAEO,IAAI5nD,OAAO,CAAC6jB,MAAZ,EAAoB;AACzB+jC,IAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,UAAIo0P,KAAK,GAAGhG,MAAM,CAAC,EAAEpuP,CAAC,GAAG,CAAN,CAAD,CAAlB;AAAA,UAA8B25R,IAAI,GAAGjM,KAAK,CAAC,EAAE1tR,CAAC,GAAG,CAAN,CAAD,CAA1C;;AACA,WAAK,IAAI1kB,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4qQ,KAAK,CAACx5Q,MAA1B,EAAkCU,CAAC,GAAGkO,CAAtC,EAAyC,EAAElO,CAA3C,EAA8C;AAC5C,YAAI+N,CAAC,GAAG+qQ,KAAK,CAAC94Q,CAAD,CAAb;;AACA,YAAI+N,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,KAAW5H,CAAX,IAAgBA,CAAC,GAAG4H,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApB,IAA+BA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,KAAW2W,CAA1C,IAA+CA,CAAC,GAAG3W,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAvD,EAAgE;AAC9D,cAAIu2B,CAAC,GAAGu1M,OAAO,CAAC6jB,MAAR,CAAev3P,CAAC,GAAG0zO,OAAO,CAACwkE,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAAD,EAAgB,CAAhB,CAAP,CAA0B,CAA1B,CAAnB,EAAiD0kB,CAAjD,CAAR;AACA4f,UAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ+5Q,IAAI,CAACr+S,CAAD,CAAJ,CAAQ,CAAR,EAAW,CAAX,CAAR;AACA,iBAAOi+S,UAAU,CAACxc,OAAO,CAACn9P,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAR,EAAsB,CAACn+B,CAAD,EAAIue,CAAJ,CAAtB,CAAV,GAA0C4f,CAA1C,GAA8C,IAArD;AACD;AACF;AACF,KAVD;AAWD;;AAED,MAAIA,CAAC,GAAG,0BAAWm9P,OAAX,CAAR;AAAA,MACI2P,OAAO,GAAG9sQ,CAAC,CAACskJ,MADhB;;AAGAtkJ,EAAAA,CAAC,CAACskJ,MAAF,GAAW,UAASA,MAAT,EAAiB;AAC1B,QAAI2xE,MAAM,GAAGj2N,CAAC,CAACi2N,MAAF,EAAb;AAAA,QACI+2C,YAAY,GAAGF,OAAO,CAACxoH,MAAD,CAD1B;AAAA,QAEI2oH,YAAY,IAAIjtQ,CAAC,CAACi2N,MAAF,CAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,GAAkB62C,OAAO,CAACxoH,MAAD,CAA7B,CAFhB;AAGAtkJ,IAAAA,CAAC,CAACi2N,MAAF,CAASA,MAAT;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAAE,4BAAUA,MAAV,EAAkB4V,YAAlB;AAAkC,KAArE;;AACA,WAAOD,YAAP;AACD,GAPD;;AASAhtQ,EAAAA,CAAC,CAAC8tQ,KAAF,GAAU,UAASzrR,CAAT,EAAY;AACpB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO8yS,KAAK,CAAC3oS,GAAN,CAAU,UAAS40S,IAAT,EAAe;AACrD,aAAOA,IAAI,CAAC50S,GAAL,CAAS,UAASqI,CAAT,EAAY;AAC1B,eAAO,CACL,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAAX,EAAoBnlP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAA9B,CADK,EAEL,CAACnlP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAAX,EAAoBnlP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAA9B,CAFK,EAGL,CAACnlP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAAX,EAAoBnlP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUmlP,aAA9B,CAHK,CAAP;AAKD,OANM,CAAP;AAOD,KAR6B,CAAP;AAUvB0kC,IAAAA,MAAM,GAAGyiB,iBAAiB,CAACz3R,CAAD,CAA1B;AAEAyrR,IAAAA,KAAK,GAAGzrR,CAAC,CAACld,GAAF,CAAM,UAAS40S,IAAT,EAAe;AAC3B,aAAOA,IAAI,CAAC50S,GAAL,CAAS,UAASqI,CAAT,EAAY;AAC1B,eAAO,CACL,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAAX,EAAoBllP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAA9B,CADK,EAEL,CAACllP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAAX,EAAoBllP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAA9B,CAFK,EAGL,CAACllP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAAX,EAAoBllP,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUklP,aAA9B,CAHK,CAAP;AAKD,OANM,CAAP;AAOD,KARO,CAAR;AAUA8b,IAAAA,MAAM,GAAGs/B,KAAK,CAAC3oS,GAAN,CAAU,UAAS40S,IAAT,EAAe;AAChC,aAAOA,IAAI,CAAC50S,GAAL,CAAS,UAASqI,CAAT,EAAY;AAC1B,YAAIuuM,EAAE,GAAGw5B,OAAO,CAAC/nO,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,CAAP,CAA0B,CAA1B,CAAT;AAAA,YACI2gG,EAAE,GAAGonI,OAAO,CAAC/nO,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,CAAP,CAA0B,CAA1B,CADT;AAAA,YAEIwuM,EAAE,GAAGu5B,OAAO,CAAC/nO,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,CAAP,CAA0B,CAA1B,CAFT;AAAA,YAGI0gG,EAAE,GAAGqnI,OAAO,CAAC/nO,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,CAAP,CAA0B,CAA1B,CAHT;AAAA,YAIIpO,CAJJ;AAKA,YAAI48M,EAAE,GAAG9tG,EAAT,EAAa9uG,CAAC,GAAG48M,EAAJ,EAAQA,EAAE,GAAG9tG,EAAb,EAAiBA,EAAE,GAAG9uG,CAAtB;AACb,eAAO,CAAC,CAAC28M,EAAD,EAAKC,EAAL,CAAD,EAAW,CAAC7tG,EAAD,EAAKD,EAAL,CAAX,CAAP;AACD,OARM,CAAP;AASD,KAVQ,CAAT;AAYA,WAAOluE,CAAP;AACD,GApCD;;AAsCA,MAAI8tQ,KAAK,IAAI,IAAb,EAAmB9tQ,CAAC,CAAC8tQ,KAAF,CAAQA,KAAR;AAEnB,SAAO9tQ,CAAP;AACD;;;;;;;;;AClJD;;AACA;;;;AAEA,IAAI8tQ,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAQ,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CADW,EAEX,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAC,CAAC,GAAF,EAAS,CAAT,CAA3B,CADC,EAED,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CAFC,EAGD,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAS,CAAT,CAA3B,CAHC,EAID,CAAC,CAAG,EAAH,EAAS,CAAT,CAAD,EAAc,CAAE,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAJC,CAHS,CAAZ;;AAUe,oBAAW;AACxB,SAAO,oBAAUyB,eAAV,EAAoBzB,KAApB,EACFv8R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;AChBD;;AACA;;;;AAEA,IAAIu8R,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAQ,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CADW,EAEX,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAC,CAAC,GAAF,EAAS,CAAT,CAA3B,CADC,EAED,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CAFC,EAGD,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAS,CAAT,CAA3B,CAHC,EAID,CAAC,CAAG,EAAH,EAAS,CAAT,CAAD,EAAc,CAAE,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAJC,CAHS,CAAZ;;AAUe,oBAAW;AACxB,SAAO,oBAAUsK,yBAAV,EAAyBtK,KAAzB,EACFv8R,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;AChBD;;AACA;;;;AAEA,IAAIu8R,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAQ,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CADW,EAEX,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAC,CAAC,GAAF,EAAS,CAAT,CAA3B,CADC,EAED,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CAFC,EAGD,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAS,CAAT,CAA3B,CAHC,EAID,CAAC,CAAG,EAAH,EAAS,CAAT,CAAD,EAAc,CAAE,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAJC,CAHS,CAAZ;;AAUe,oBAAW;AACxB,SAAO,oBAAUwB,uBAAV,EAAwBxB,KAAxB,EACFv8R,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;AChBD;;AACA;;;;AAEA,IAAIu8R,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAE,CAAC,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAI,CAAJ,EAAS,CAAT,CAA3B,CADW,EAEX,CAAC,CAAI,CAAJ,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAI,CAAJ,EAAS,CAAT,CAA3B,CADC,EAED,CAAC,CAAI,CAAJ,EAAS,CAAT,CAAD,EAAc,CAAG,EAAH,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAFC,CAHS,CAAZ;;AAQe,oBAAW;AACxB,SAAO,oBAAUwB,uBAAV,EAAwBxB,KAAxB,EACFv8R,KADE,CACI,OADJ,EAEF0kP,MAFE,CAEK,CAAC,EAAD,EAAK,CAAL,CAFL,CAAP;AAGD;;;;;;;;;ACfD;;AACA;;AACA;;;;AAEA,IAAI63C,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAQ,EAAR,CAAD,EAAc,CAAE,CAAC,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAI,CAAJ,EAAQ,EAAR,CAA3B,CADW,EAEX,CAAC,CAAI,CAAJ,EAAQ,EAAR,CAAD,EAAc,CAAG,EAAH,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAQ,EAAR,CAA3B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAD,EAAc,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAA3B,CADC,EAED,CAAC,CAAE,CAAC,EAAH,EAAO,CAAC,EAAR,CAAD,EAAc,CAAI,CAAJ,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAO,CAAC,EAAR,CAA3B,CAFC,EAGD,CAAC,CAAG,EAAH,EAAO,CAAC,EAAR,CAAD,EAAc,CAAE,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAO,CAAC,EAAR,CAA3B,CAHC,CAHS,CAAZ;;AASe,oBAAW;AACxB,SAAO,oBAAUqK,+BAAV,EAA4BrK,KAA5B,EAAmCS,eAAnC,EACFt4C,MADE,CACK,CAAC,CAAC,EAAF,EAAM,CAAC,EAAP,CADL,EAEF1kP,KAFE,CAEI,OAFJ,EAGFqqJ,MAHE,CAGK,CAAC,CAAD,EAAI,CAAC,MAAL,CAHL,CAAP;AAID;;;;;;;;;AClBD;;AACA;;;;AAEA,IAAIkyI,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAQ,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CADW,EAEX,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAI,CAAJ,EAAQ,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAS,CAAT,CAA3B,CAFW,EAGX,CAAC,CAAG,EAAH,EAAS,CAAT,CAAD,EAAc,CAAE,GAAF,EAAQ,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAHW,CAAD,EAIT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAS,CAAT,CAAD,EAAc,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,CAAC,EAAH,EAAS,CAAT,CAA3B,CADC,EAED,CAAC,CAAE,CAAC,EAAH,EAAS,CAAT,CAAD,EAAc,CAAI,CAAJ,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAG,EAAH,EAAS,CAAT,CAA3B,CAFC,EAGD,CAAC,CAAG,EAAH,EAAS,CAAT,CAAD,EAAc,CAAE,GAAF,EAAO,CAAC,EAAR,CAAd,EAA2B,CAAE,GAAF,EAAS,CAAT,CAA3B,CAHC,CAJS,CAAZ;;AAUe,oBAAW;AACxB,SAAO,oBAAU0B,yBAAV,EAAyB1B,KAAzB,EACFv8R,KADE,CACI,MADJ,EAEF0kP,MAFE,CAEK,CAAC,CAAC,EAAF,EAAM,CAAN,CAFL,CAAP;AAGD;;;;;;;;;;ACjBD;;AACA;;AAEO,SAAS+jD,cAAT,CAAwBrhB,MAAxB,EAAgCC,GAAhC,EAAqC;AAC1C,SAAO,CAAC,IAAIjgD,SAAJ,GAAUggD,MAAV,GAAmB,gBAAKjgD,WAAKA,QAAL,GAAU,CAAV,GAAckgD,GAAG,GAAGA,GAAzB,CAApB,EAAmDA,GAAnD,CAAP;AACD;;AAEDohB,cAAc,CAAC5gD,MAAf,GAAwB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACrC,SAAO,CAACu4N,YAAM,CAAN,GAAU92O,CAAV,GAAc,gBAAK62O,WAAKA,QAAL,GAAU,CAAV,GAAct4N,CAAC,GAAGA,CAAvB,CAAf,EAA0CA,CAA1C,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,SAAO,0BAAW45R,cAAX,EACFzoS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACdD;;AACA;;AAEO,SAAS0oS,WAAT,CAAqBrwS,CAArB,EAAwB;AAE7B,WAASuzR,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI,eAAI,eAAIA,GAAJ,IAAWp+C,YAAf,IAAyBzhK,aAA7B,EAAsC,OAAO,CAAC,CAAD,EAAI6/M,GAAG,GAAG,CAAN,GAAU,CAAC,CAAX,GAAe,CAAnB,CAAP;AACtC,QAAIK,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,QACIhrR,CAAC,GAAG,eAAI,CAAC,IAAIqrR,MAAL,KAAgB,IAAIA,MAApB,CAAJ,EAAiCrvR,CAAC,GAAG,CAArC,CADR;AAAA,QAEIzB,CAAC,GAAG,OAAOyF,CAAC,GAAG,IAAIA,CAAf,IAAoB,eAAI+qR,MAAM,IAAI/uR,CAAd,CAF5B;AAGA,WAAO,CACL,IAAI,eAAI+uR,MAAJ,CAAJ,GAAkBxwR,CADb,EAEL,CAACyF,CAAC,GAAG,IAAIA,CAAT,IAAczF,CAFT,CAAP;AAID;;AAEDg1R,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI47L,EAAE,GAAG,eAAI57L,CAAJ,CAAT;AACA,QAAI,eAAI47L,EAAE,GAAG,CAAT,IAAcjjI,aAAlB,EAA2B,OAAOl3E,CAAC,GAAG,IAAH,GAAU,CAAC,CAAD,EAAI,gBAAKue,CAAL,IAAUo6N,YAAd,CAAlB;AAC3B,QAAIx+B,EAAE,GAAG,CAAT,EAAY,OAAO,IAAP;AAEZn6M,IAAAA,CAAC,IAAI,CAAL,EAAQue,CAAC,IAAI,CAAb;AACA,QAAIo6D,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,QACIusG,EAAE,GAAGhuF,CAAC,GAAGA,CADb;AAAA,QAEIhhB,CAAC,GAAG,IAAIghB,CAAJ,IAAS,IAAIo6D,EAAJ,GAAS4zB,EAAlB,CAFR,CAN8B,CAQC;;AAC/BhvG,IAAAA,CAAC,GAAG,eAAI,CAAC,IAAIA,CAAL,KAAW,IAAIA,CAAf,CAAJ,EAAuB,IAAIwK,CAA3B,CAAJ;AACA,WAAO,CACL,iBAAM,IAAI/H,CAAV,EAAa,IAAI24E,EAAJ,GAAS4zB,EAAtB,IAA4BxkG,CADvB,EAEL,gBAAK,CAACxK,CAAC,GAAG,CAAL,KAAWA,CAAC,GAAG,CAAf,CAAL,CAFK,CAAP;AAID,GAdD;;AAgBA,SAAO+9R,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAIvzR,CAAC,GAAG,GAAR;AAAA,MACIupF,CAAC,GAAG,iCAAkB8mN,WAAlB,CADR;AAAA,MAEIj6Q,CAAC,GAAGmzD,CAAC,CAACvpF,CAAD,CAFT;;AAIAo2B,EAAAA,CAAC,CAACk6Q,OAAF,GAAY,UAAS73R,CAAT,EAAY;AACtB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBm4F,CAAC,CAACvpF,CAAC,GAAG,CAACyY,CAAN,CAApB,GAA+BzY,CAAtC;AACD,GAFD;;AAIA,SAAOo2B,CAAC,CACHzuB,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;AC9CD;;AACA;;AAEA,IAAI4oS,QAAQ,GAAGzhE,WAAK4xD,WAApB;;AAEO,SAAS8P,WAAT,CAAqBzhB,MAArB,EAA6BC,GAA7B,EAAkC;AACvC,SAAO,CACLD,MAAM,IAAI,IAAI,gBAAK,eAAIC,GAAJ,CAAL,CAAR,CAAN,GAAgC,CAD3B,EAELA,GAAG,IAAI,eAAIA,GAAG,GAAG,CAAV,IAAe,eAAID,MAAM,GAAG,CAAb,CAAnB,CAFE,CAAP;AAID;;AAEDyhB,WAAW,CAAChhD,MAAZ,GAAqB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAClC,MAAI27L,EAAE,GAAG,eAAIl6M,CAAJ,CAAT;AAAA,MACIm6M,EAAE,GAAG,eAAI57L,CAAJ,CADT;AAAA,MAEIu4Q,MAAM,GAAG5/M,aAFb;AAAA,MAGI6/M,GAAG,GAAGp+C,YAHV;AAIA,MAAIx+B,EAAE,GAAGm+F,QAAT,EAAmBvhB,GAAG,IAAI58E,EAAE,GAAGm+F,QAAZ,CAAnB,KACKxhB,MAAM,IAAI,IAAI,gBAAKwhB,QAAQ,GAAGn+F,EAAhB,CAAd;;AACL,OAAK,IAAItgN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,EAAzB,EAA6B;AAC3B,QAAIu9R,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,QACIyhB,UAAU,GAAG,gBAAK,eAAIzhB,GAAJ,CAAL,CADjB;AAAA,QAEI0hB,QAAQ,GAAG,eAAI1hB,GAAG,GAAG,CAAV,CAFf;AAAA,QAGI+U,QAAQ,GAAG,eAAI/U,GAAG,GAAG,CAAV,CAHf;AAAA,QAII2hB,WAAW,GAAG,eAAI5hB,MAAM,GAAG,CAAb,CAJlB;AAAA,QAKI6hB,WAAW,GAAG,eAAI7hB,MAAM,GAAG,CAAb,CALlB;AAAA,QAMI0V,EAAE,GAAG,MAAM1V,MAAN,IAAgB,IAAI0hB,UAApB,IAAkCt+F,EAN3C;AAAA,QAOIuyF,EAAE,GAAG1V,GAAG,IAAI+U,QAAQ,GAAG6M,WAAf,CAAH,GAAiCx+F,EAP1C;AAAA,QAQIy+F,OAAO,GAAGJ,UAAU,GAAG,CAAC,IAAD,GAAQ1hB,MAAR,GAAiBM,MAAjB,GAA0BohB,UAA7B,GAA0C,CARlE;AAAA,QASIK,UAAU,GAAG,OAAO,IAAIL,UAAX,CATjB;AAAA,QAUIM,OAAO,GAAG,CAAC,IAAI,MAAM/hB,GAAN,GAAY0hB,QAAZ,GAAuB3M,QAA5B,KAAyCA,QAAQ,GAAG6M,WAApD,CAVd;AAAA,QAWII,UAAU,GAAIhiB,GAAG,GAAG+U,QAAP,IAAoB4M,WAAW,GAAG,CAAlC,KAAwCC,WAAW,GAAGA,WAAtD,CAXjB;AAAA,QAYI7wE,KAAK,GAAG8wE,OAAO,GAAGG,UAAV,GAAuBD,OAAO,GAAGD,UAZ7C;AAAA,QAaI7N,IAAI,GAAG,CAACwB,EAAE,GAAGuM,UAAL,GAAkBtM,EAAE,GAAGoM,UAAxB,IAAsC/wE,KAbjD;AAAA,QAcIkvD,OAAO,GAAG,CAACyV,EAAE,GAAGmM,OAAL,GAAepM,EAAE,GAAGsM,OAArB,IAAgChxE,KAd9C;AAeAivD,IAAAA,GAAG,IAAIiU,IAAP;AACAlU,IAAAA,MAAM,IAAIE,OAAV;AACA,QAAI,eAAIgU,IAAJ,IAAY9zN,aAAZ,IAAuB,eAAI8/M,OAAJ,IAAe9/M,aAA1C,EAAmD;AACpD;;AACD,SAAO,CAACl3E,CAAC,GAAG,CAAJ,GAAQ,CAAC82R,MAAT,GAAkBA,MAAnB,EAA2Bv4Q,CAAC,GAAG,CAAJ,GAAQ,CAACw4Q,GAAT,GAAeA,GAA1C,CAAP;AACD,CA5BD;;AA8Be,oBAAW;AACxB,SAAO,0BAAWwhB,WAAX,EACF7oS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC7CD;;AACA;;AAEO,SAASspS,YAAT,CAAsBliB,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAIiB,OAAO,GAAGlB,MAAM,GAAGA,MAAvB;AAAA,MAA+BmN,IAAI,GAAGlN,GAAG,GAAGA,GAA5C;AACA,SAAO,CACLD,MAAM,IAAI,WAAWmN,IAAI,IAAI,CAAC,QAAD,GAAYjM,OAAO,GAAG,CAAC,SAAvB,GAAmCiM,IAAI,GAAG,CAAC,SAA/C,CAAnB,CADD,EAELlN,GAAG,IAAI,UAAUiB,OAAO,IAAI,YAAYiM,IAAI,GAAG,CAAC,OAApB,GAA8BjM,OAAO,GAAG,WAA5C,CAAjB,GAA4EiM,IAAI,IAAI,YAAYA,IAAI,GAAG,CAAC,SAAxB,CAApF,CAFE,CAAP;AAID;;AAED+U,YAAY,CAACzhD,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAIu4Q,MAAM,GAAG,gBAAK92R,CAAL,IAAU62O,QAAvB;AAAA,MACIkgD,GAAG,GAAGx4Q,CAAC,GAAG,CADd;AAAA,MAEI1kB,CAAC,GAAG,EAFR;;AAGA,KAAG;AACD,QAAIm+R,OAAO,GAAGlB,MAAM,GAAGA,MAAvB;AAAA,QACImN,IAAI,GAAGlN,GAAG,GAAGA,GADjB;AAAA,QAEIkiB,SAAS,GAAGniB,MAAM,GAAGC,GAFzB;AAAA,QAGIrR,EAAE,GAAGoR,MAAM,IAAI,WAAWmN,IAAI,IAAI,CAAC,QAAD,GAAYjM,OAAO,GAAG,CAAC,SAAvB,GAAmCiM,IAAI,GAAG,CAAC,SAA/C,CAAnB,CAAN,GAAsFjkS,CAH/F;AAAA,QAII2lR,EAAE,GAAGoR,GAAG,IAAI,UAAUiB,OAAO,IAAI,YAAYiM,IAAI,GAAG,CAAC,OAApB,GAA8BjM,OAAO,GAAG,WAA5C,CAAjB,GAA4EiM,IAAI,IAAI,YAAYA,IAAI,GAAG,CAAC,SAAxB,CAApF,CAAH,GAA6H1lR,CAJtI;AAAA,QAKIwxR,iBAAiB,GAAG,WAAW9L,IAAI,IAAI,WAAW,IAAIjM,OAAJ,GAAc,SAAzB,GAAqCiM,IAAI,GAAG,SAAhD,CALvC;AAAA,QAMI+L,cAAc,GAAG,CAACiJ,SAAD,IAAc,IAAI,QAAJ,GAAe,IAAI,SAAJ,GAAgBhV,IAA/B,GAAsC,IAAI,SAAJ,GAAgBjM,OAApE,CANrB;AAAA,QAOIiY,iBAAiB,GAAGgJ,SAAS,IAAI,IAAI,SAAJ,GAAgB,IAAI,WAAJ,GAAkBjhB,OAAlC,GAA4C,IAAI,CAAC,OAAL,GAAeiM,IAA/D,CAPjC;AAAA,QAQIiM,cAAc,GAAG,UAAUlY,OAAO,IAAI,YAAY,cAAcA,OAA9B,CAAjB,GAA0DiM,IAAI,IAAI,KAAK,YAAY,UAAUjM,OAA3B,IAAsC,IAAI,SAAJ,GAAgBiM,IAA1D,CARnF;AAAA,QASIz5J,WAAW,GAAGwlK,cAAc,GAAGC,iBAAjB,GAAqCC,cAAc,GAAGH,iBATxE;AAAA,QAUIpV,WAAW,GAAG,CAAChV,EAAE,GAAGqqB,cAAL,GAAsBtqB,EAAE,GAAGwqB,cAA5B,IAA8C1lK,WAVhE;AAAA,QAWIowJ,QAAQ,GAAG,CAAClV,EAAE,GAAGuqB,iBAAL,GAAyBtqB,EAAE,GAAGoqB,iBAA/B,IAAoDvlK,WAXnE;AAYAssJ,IAAAA,MAAM,IAAI6D,WAAV,EAAuB5D,GAAG,IAAI6D,QAA9B;AACD,GAdD,QAcS,CAAC,eAAID,WAAJ,IAAmBzjN,aAAnB,IAA8B,eAAI0jN,QAAJ,IAAgB1jN,aAA/C,KAA2D,EAAEr9E,CAAF,GAAM,CAd1E;;AAeA,SAAOA,CAAC,IAAI,CAACi9R,MAAD,EAASC,GAAT,CAAZ;AACD,CApBD;;AAsBe,oBAAW;AACxB,SAAO,0BAAWiiB,YAAX,EACFtpS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACpCD;;AACA;;AAEO,SAASwpS,UAAT,CAAoBpiB,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,SAAO,CACL,eAAID,MAAJ,IAAc,eAAIC,GAAJ,CADT,EAEL,eAAIA,GAAJ,IAAW,eAAID,MAAJ,CAFN,CAAP;AAID;;AAEDoiB,UAAU,CAAC3hD,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIo6D,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,MACIusG,EAAE,GAAGhuF,CAAC,GAAGA,CADb;AAAA,MAEI46R,IAAI,GAAG5sM,EAAE,GAAG,CAFhB;AAAA,MAGI6sM,OAAO,GAAGzgO,EAAE,GAAGwgO,IAHnB;AAAA,MAIIhiB,MAAM,GAAGn3R,CAAC,GACJuoS,gBAAU,gBAAK,CAAC6Q,OAAO,GAAG,gBAAKA,OAAO,GAAGA,OAAV,GAAoB,IAAIzgO,EAA7B,CAAX,IAA+CA,EAApD,CADN,GAEJ,IAAI,gBAAKwgO,IAAL,CANd;AAOA,SAAO,CACL,gBAAKn5S,CAAC,GAAGm3R,MAAT,CADK,EAEL,gBAAK54Q,CAAL,IAAU,gBAAK44Q,MAAL,CAFL,CAAP;AAID,CAZD;;AAce,oBAAW;AACxB,SAAO,0BAAW+hB,UAAX,EACFxpS,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,KAAK,IAFb,CAAP;AAGD;;;;;;;;;;AC5BD;;AACA;;;;AAEO,SAAS4T,aAAT,CAAuBxhB,IAAvB,EAA6B;AAClC,MAAIvB,OAAO,GAAG,eAAIuB,IAAJ,CAAd;AAAA,MACI4S,OAAO,GAAG,eAAIzV,kBAAY6C,IAAI,GAAG,CAAvB,CADd;;AAGA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIx4Q,CAAC,GAAGw4Q,GAAG,GAAGc,IAAd;AAAA,QACI73R,CAAC,GAAG,eAAIue,CAAJ,IAAS24D,aAAT,GAAmB4/M,MAAM,GAAGR,OAA5B,GACE,eAAIt2R,CAAC,GAAGg1R,kBAAY+B,GAAG,GAAG,CAA1B,IAA+B7/M,aAA/B,IAA0C,eAAI,eAAIl3E,CAAJ,IAAS24O,YAAb,IAAuBzhK,aAAjE,GACA,CADA,GACI4/M,MAAM,GAAGv4Q,CAAT,GAAa,eAAI,eAAIve,CAAJ,IAASyqS,OAAb,CAH3B;AAIA,WAAO,CAACzqS,CAAD,EAAIue,CAAJ,CAAP;AACD;;AAED+8Q,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIu4Q,MAAJ;AAAA,QACIC,GAAG,GAAGx4Q,CAAC,GAAGs5Q,IADd;AAEA,WAAO,CACL,eAAIt5Q,CAAJ,IAAS24D,aAAT,GAAmBl3E,CAAC,GAAGs2R,OAAvB,GACO,eAAIQ,MAAM,GAAG9B,kBAAY+B,GAAG,GAAG,CAA/B,IAAoC7/M,aAApC,IAA+C,eAAI,eAAI4/M,MAAJ,IAAcn+C,YAAlB,IAA4BzhK,aAA5E,GAAuF,CAAvF,GACAl3E,CAAC,GAAG,eAAI,eAAI82R,MAAJ,IAAc2T,OAAlB,CAAJ,GAAiClsR,CAHlC,EAILw4Q,GAJK,CAAP;AAMD,GATD;;AAWA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAU+d,aAAV,EACFnO,QADE,CACO,EADP,EAEFx7R,KAFE,CAEI,OAFJ,CAAP;AAGD;;;;;;;;;;ACjCD;;AACA;;AAEO,SAAS4pS,SAAT,CAAmBxiB,MAAnB,EAA2BC,GAA3B,EAAgC;AACrC,SAAO,CAACD,MAAD,EAAS,OAAO,eAAI,eAAI9B,kBAAY,MAAM+B,GAAtB,CAAJ,CAAhB,CAAP;AACD;;AAEDuiB,SAAS,CAAC/hD,MAAV,GAAmB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAChC,SAAO,CAACve,CAAD,EAAI,MAAM,gBAAK,eAAI,MAAMue,CAAV,CAAL,CAAN,GAA2B,QAAQs4N,QAAvC,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,SAAO,0BAAWyiE,SAAX,EACF5pS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;;;;;;ACdD;;AACA;;AAEO,SAAS6pS,wBAAT,CAAkCrnD,CAAlC,EAAqC;AAC1C,MAAI5gK,CAAC,GAAG4gK,CAAC,CAAC/4P,MAAF,GAAW,CAAnB;;AAEA,WAASmiS,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI5/Q,CAAC,GAAG,KAAK,IAAIggR,MAAM,GAAG,eAAIL,MAAJ,CAAlB,CADR;AAAA,QAEI0iB,EAAE,GAAGriS,CAAC,GAAGggR,MAAJ,GAAa,eAAIL,MAAJ,CAFtB;AAAA,QAGI2iB,EAAE,GAAGtiS,CAAC,GAAG,eAAI4/Q,GAAJ,CAHb;AAAA,QAIIl9R,CAAC,GAAGy3F,CAJR;AAAA,QAKInrC,CAAC,GAAG+rM,CAAC,CAACr4P,CAAD,CALT;AAAA,QAMI6hM,EAAE,GAAGv1I,CAAC,CAAC,CAAD,CANV;AAAA,QAOI4+O,EAAE,GAAG5+O,CAAC,CAAC,CAAD,CAPV;AAAA,QAQI5oD,CARJ;;AASA,WAAO,EAAE1D,CAAF,IAAO,CAAd,EAAiB;AACfssD,MAAAA,CAAC,GAAG+rM,CAAC,CAACr4P,CAAD,CAAL;AACA6hM,MAAAA,EAAE,GAAGv1I,CAAC,CAAC,CAAD,CAAD,GAAOqzP,EAAE,IAAIj8S,CAAC,GAAGm+L,EAAR,CAAT,GAAuB+9G,EAAE,GAAG1U,EAAjC;AACAA,MAAAA,EAAE,GAAG5+O,CAAC,CAAC,CAAD,CAAD,GAAOqzP,EAAE,GAAGzU,EAAZ,GAAiB0U,EAAE,GAAGl8S,CAA3B;AACD;;AACDm+L,IAAAA,EAAE,GAAG89G,EAAE,IAAIj8S,CAAC,GAAGm+L,EAAR,CAAF,GAAgB+9G,EAAE,GAAG1U,EAA1B;AACAA,IAAAA,EAAE,GAAGyU,EAAE,GAAGzU,EAAL,GAAU0U,EAAE,GAAGl8S,CAApB;AACA,WAAO,CAACm+L,EAAD,EAAKqpG,EAAL,CAAP;AACD;;AAEDzJ,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI1kB,CAAC,GAAG,EAAR;AAAA,QACI2/S,EAAE,GAAGx5S,CADT;AAAA,QAEIy5S,EAAE,GAAGl7R,CAFT;;AAGA,OAAG;AACD,UAAIza,CAAC,GAAGwtF,CAAR;AAAA,UACInrC,CAAC,GAAG+rM,CAAC,CAACpuP,CAAD,CADT;AAAA,UAEI43L,EAAE,GAAGv1I,CAAC,CAAC,CAAD,CAFV;AAAA,UAGI4+O,EAAE,GAAG5+O,CAAC,CAAC,CAAD,CAHV;AAAA,UAIIkkN,EAAE,GAAG,CAJT;AAAA,UAKIvW,EAAE,GAAG,CALT;AAAA,UAMIv2P,CANJ;;AAQA,aAAO,EAAEuG,CAAF,IAAO,CAAd,EAAiB;AACfqiD,QAAAA,CAAC,GAAG+rM,CAAC,CAACpuP,CAAD,CAAL;AACAumQ,QAAAA,EAAE,GAAG3uE,EAAE,GAAG89G,EAAE,IAAIj8S,CAAC,GAAG8sQ,EAAR,CAAP,GAAqBovC,EAAE,GAAG3lD,EAA/B;AACAA,QAAAA,EAAE,GAAGixC,EAAE,GAAGyU,EAAE,GAAG1lD,EAAV,GAAe2lD,EAAE,GAAGl8S,CAAzB;AACAm+L,QAAAA,EAAE,GAAGv1I,CAAC,CAAC,CAAD,CAAD,GAAOqzP,EAAE,IAAIj8S,CAAC,GAAGm+L,EAAR,CAAT,GAAuB+9G,EAAE,GAAG1U,EAAjC;AACAA,QAAAA,EAAE,GAAG5+O,CAAC,CAAC,CAAD,CAAD,GAAOqzP,EAAE,GAAGzU,EAAZ,GAAiB0U,EAAE,GAAGl8S,CAA3B;AACD;;AACD8sQ,MAAAA,EAAE,GAAG3uE,EAAE,GAAG89G,EAAE,IAAIj8S,CAAC,GAAG8sQ,EAAR,CAAP,GAAqBovC,EAAE,GAAG3lD,EAA/B;AACAA,MAAAA,EAAE,GAAGixC,EAAE,GAAGyU,EAAE,GAAG1lD,EAAV,GAAe2lD,EAAE,GAAGl8S,CAAzB;AACAm+L,MAAAA,EAAE,GAAG89G,EAAE,IAAIj8S,CAAC,GAAGm+L,EAAR,CAAF,GAAgB+9G,EAAE,GAAG1U,EAArB,GAA0B/kS,CAA/B;AACA+kS,MAAAA,EAAE,GAAGyU,EAAE,GAAGzU,EAAL,GAAU0U,EAAE,GAAGl8S,CAAf,GAAmBghB,CAAxB;AAEA,UAAIisH,WAAW,GAAG6/H,EAAE,GAAGA,EAAL,GAAUvW,EAAE,GAAGA,EAAjC;AAAA,UAAqC4lD,MAArC;AAAA,UAA6CC,MAA7C;AACAH,MAAAA,EAAE,IAAIE,MAAM,GAAG,CAACh+G,EAAE,GAAG2uE,EAAL,GAAU06B,EAAE,GAAGjxC,EAAhB,IAAsBtpH,WAArC;AACAivK,MAAAA,EAAE,IAAIE,MAAM,GAAG,CAAC5U,EAAE,GAAG16B,EAAL,GAAU3uE,EAAE,GAAGo4D,EAAhB,IAAsBtpH,WAArC;AACD,KAxBD,QAwBS,eAAIkvK,MAAJ,IAAc,eAAIC,MAAJ,CAAd,GAA4BziO,gBAAUA,aAAtC,IAAiD,EAAEr9E,CAAF,GAAM,CAxBhE;;AA0BA,QAAIA,CAAJ,EAAO;AACL,UAAImvH,GAAG,GAAG,gBAAKwwL,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAAV;AAAA,UACInzS,CAAC,GAAG,IAAI,gBAAK0iH,GAAG,GAAG,GAAX,CADZ;AAAA,UAEI4wL,IAAI,GAAG,eAAItzS,CAAJ,CAFX;AAGA,aAAO,CAAC,iBAAMkzS,EAAE,GAAGI,IAAX,EAAiB5wL,GAAG,GAAG,eAAI1iH,CAAJ,CAAvB,CAAD,EAAiC0iH,GAAG,GAAG,gBAAKywL,EAAE,GAAGG,IAAL,GAAY5wL,GAAjB,CAAH,GAA2B,CAA/D,CAAP;AACD;AACF,GApCD;;AAsCA,SAAOsyK,OAAP;AACD;;AAED,IAAIgL,MAAM,GAAG,CAAC,CAAC,SAAD,EAAY,CAAZ,CAAD,EAAiB,CAAC,SAAD,EAAY,CAAC,SAAb,CAAjB,EAA0C,CAAC,SAAD,EAAY,SAAZ,CAA1C,EAAkE,CAAC,CAAC,SAAF,EAAa,CAAC,SAAd,CAAlE,EAA4F,CAAC,SAAD,EAAY,CAAC,SAAb,CAA5F,EAAqH,CAAC,SAAD,EAAY,CAAC,SAAb,CAArH,CAAb;AAAA,IACIuT,IAAI,GAAG,CAAC,CAAC,OAAD,EAAU,CAAV,CAAD,EAAe,CAAC,CAAD,EAAI,CAAJ,CAAf,EAAuB,CAAC,CAAC,QAAF,EAAY,CAAZ,CAAvB,EAAuC,CAAC,CAAD,EAAI,CAAJ,CAAvC,EAA+C,CAAC,QAAD,EAAW,CAAX,CAA/C,CADX;AAAA,IAEIC,IAAI,GAAG,CAAC,CAAC,SAAD,EAAY,CAAZ,CAAD,EAAiB,CAAC,SAAD,EAAY,SAAZ,CAAjB,EAAyC,CAAC,CAAC,SAAF,EAAa,CAAC,SAAd,CAAzC,EAAmE,CAAC,CAAC,SAAF,EAAa,CAAC,SAAd,CAAnE,EAA6F,CAAC,SAAD,EAAY,SAAZ,CAA7F,EAAqH,CAAC,SAAD,EAAY,SAAZ,CAArH,EAA6I,CAAC,SAAD,EAAY,CAAC,SAAb,CAA7I,EAAsK,CAAC,SAAD,EAAY,CAAC,SAAb,CAAtK,EAA+L,CAAC,CAAC,SAAF,EAAa,SAAb,CAA/L,EAAwN,CAAC,CAAC,SAAF,EAAa,SAAb,CAAxN,CAFX;AAAA,IAGIC,MAAM,GAAG,CAAC,CAAC,MAAD,EAAS,CAAT,CAAD,EAAc,CAAC,CAAD,EAAI,CAAJ,CAAd,EAAsB,CAAC,OAAD,EAAU,CAAV,CAAtB,CAHb;AAAA,IAIIC,GAAG,GAAG,CAAC,CAAC,QAAD,EAAW,CAAX,CAAD,EAAgB,CAAC,CAAD,EAAI,CAAJ,CAAhB,EAAwB,CAAC,CAAC,UAAF,EAAc,CAAC,UAAf,CAAxB,CAJV;;AAMO,SAASC,2BAAT,GAAuC;AAC5C,SAAOC,qBAAqB,CAAC5T,MAAD,EAAS,CAAC,GAAD,EAAM,CAAC,EAAP,CAAT,CAArB,CACF52R,KADE,CACI,IADJ,EAEFqqJ,MAFE,CAEK,CAAC,CAAC,OAAF,EAAW,OAAX,CAFL,EAGF0rI,SAHE,CAGQ,EAHR,EAIFznD,KAJE,CAII,GAJJ,CAAP;AAKD;;AAEM,SAASm8D,yBAAT,GAAqC;AAC1C,SAAOD,qBAAqB,CAACL,IAAD,EAAO,CAAC,EAAD,EAAK,CAAC,EAAN,CAAP,CAArB,CACFnqS,KADE,CACI,IADJ,EAEF+1R,SAFE,CAEQ,EAFR,EAGF1rI,MAHE,CAGK,CAAC,CAAC,OAAF,EAAW,OAAX,CAHL,CAAP;AAID;;AAEM,SAASqgJ,yBAAT,GAAqC;AAC1C,SAAOF,qBAAqB,CAACJ,IAAD,EAAO,CAAC,GAAD,EAAM,CAAC,EAAP,CAAP,CAArB,CACFpqS,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,EAFR,EAGF1rI,MAHE,CAGK,CAAC,CAAC,OAAF,EAAW,OAAX,CAHL,CAAP;AAID;;AAEM,SAASsgJ,2BAAT,GAAuC;AAC5C,SAAOH,qBAAqB,CAACH,MAAD,EAAS,CAAC,CAAC,EAAF,EAAM,CAAC,EAAP,CAAT,CAArB,CACFrqS,KADE,CACI,OADJ,EAEFqqJ,MAFE,CAEK,CAAC,EAAD,EAAK,OAAL,CAFL,EAGF0rI,SAHE,CAGQ,EAHR,CAAP;AAID;;AAEM,SAAS6U,wBAAT,GAAoC;AACzC,SAAOJ,qBAAqB,CAACF,GAAD,EAAM,CAAC,GAAD,EAAM,EAAN,CAAN,CAArB,CACFtqS,KADE,CACI,GADJ,EAEF+1R,SAFE,CAEQ,GAFR,EAGF1rI,MAHE,CAGK,CAAC,CAAC,GAAF,EAAO,CAAC,EAAR,CAHL,CAAP;AAID;;AAEc,SAASmgJ,qBAAT,CAA+BK,YAA/B,EAA6CnmD,MAA7C,EAAqD;AAClE,MAAIj2N,CAAC,GAAG,0BAAWo7Q,wBAAwB,CAACgB,YAAD,CAAnC,EAAmDnmD,MAAnD,CAA0DA,MAA1D,EAAkEqxC,SAAlE,CAA4E,EAA5E,CAAR;AAAA,MACI59R,CAAC,GAAG,wBAASusP,MAAT,CADR;AAAA,MAEIr6F,MAAM,GAAG57H,CAAC,CAAC47H,MAFf;AAIA,SAAO57H,CAAC,CAACi2N,MAAT;;AAEAj2N,EAAAA,CAAC,CAAC47H,MAAF,GAAW,UAASv5I,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmB4gK,MAAM,CAAClyJ,CAAC,CAAC2Y,CAAD,CAAF,CAAzB,GAAkC3Y,CAAC,CAAC0vP,MAAF,CAASx9F,MAAM,EAAf,CAAzC;AACD,GAFD;;AAIA,SAAO57H,CAAP;AACD;;;;;;;;;;ACzHD;;AACA;;AAEA,IAAIq8Q,KAAK,GAAG,gBAAK,CAAL,CAAZ;AAAA,IACIC,KAAK,GAAG,gBAAK,CAAL,CADZ;;AAGO,SAASC,uBAAT,CAAiC5jB,MAAjC,EAAyCC,GAAzC,EAA8C;AACnD,MAAI7oI,KAAK,GAAG,gBAAK,IAAI,eAAI6oI,GAAJ,CAAJ,IAAgB,IAAIyjB,KAApB,CAAL,CAAZ;AACA,SAAO,CACLA,KAAK,GAAG1jB,MAAR,IAAkB,IAAI,eAAI,IAAI5oI,KAAJ,GAAY,CAAhB,CAAJ,GAAyB,CAA3C,IAAgDusJ,KAD3C,EAEL,IAAI,eAAIvsJ,KAAK,GAAG,CAAZ,CAAJ,GAAqBusJ,KAFhB,CAAP;AAID;;AAEDC,uBAAuB,CAACnjD,MAAxB,GAAiC,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9C,MAAI2vI,KAAK,GAAG,IAAI,gBAAK3vI,CAAC,GAAGk8R,KAAJ,GAAY,CAAjB,CAAhB;AACA,SAAO,CACLz6S,CAAC,GAAGy6S,KAAJ,IAAaD,KAAK,IAAI,IAAI,eAAI,IAAItsJ,KAAJ,GAAY,CAAhB,CAAJ,GAAyB,CAA7B,CAAlB,CADK,EAEL,gBAAK,eAAIA,KAAJ,IAAa,CAAb,GAAiBssJ,KAAjB,GAAyB,CAA9B,CAFK,CAAP;AAID,CAND;;AAQe,oBAAW;AACxB,SAAO,0BAAWE,uBAAX,EACFhrS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACzBD;;AACA;;AAEO,SAASirS,qBAAT,CAA+B7jB,MAA/B,EAAuCC,GAAvC,EAA4C;AACjD,MAAI5/Q,CAAC,GAAG,CAAC,IAAIoxR,aAAL,IAAgB,eAAIxR,GAAJ,CAAxB;AAAA,MACI7oI,KAAK,GAAG6oI,GADZ;;AAEA,OAAK,IAAIl9R,CAAC,GAAG,CAAR,EAAW21F,KAAhB,EAAuB31F,CAAC,GAAG,EAA3B,EAA+BA,CAAC,EAAhC,EAAoC;AAClCq0J,IAAAA,KAAK,IAAI1+D,KAAK,GAAG,CAAC,eAAI0+D,KAAK,GAAG,CAAZ,IAAiB,eAAIA,KAAJ,CAAjB,GAA8B/2I,CAA/B,KAAqC,MAAM,eAAI+2I,KAAK,GAAG,CAAZ,CAAN,GAAuB,eAAIA,KAAJ,CAA5D,CAAjB;AACA,QAAI,eAAI1+D,KAAJ,IAAatY,aAAjB,EAA0B;AAC3B;;AACD,SAAO,CACL4/M,MAAM,IAAI,IAAI,IAAI,eAAI5oI,KAAJ,CAAJ,GAAiB,eAAIA,KAAK,GAAG,CAAZ,CAAzB,CAAN,IAAkD,IAAIu6I,WAAtD,CADK,EAEL,IAAI,gBAAK,CAAL,CAAJ,GAAc,eAAIv6I,KAAK,GAAG,CAAZ,CAAd,GAA+B,gBAAK,IAAIu6I,WAAT,CAF1B,CAAP;AAID;;AAEDkS,qBAAqB,CAACpjD,MAAtB,GAA+B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC5C,MAAIq8R,UAAU,GAAGr8R,CAAC,GAAG,gBAAK,IAAIkqR,WAAT,CAAJ,IAAuB,IAAI,gBAAK,CAAL,CAA3B,CAAjB;AAAA,MACIv6I,KAAK,GAAG,IAAI,gBAAK0sJ,UAAL,CADhB;AAEA,SAAO,CACL,IAAInS,WAAJ,GAAYzoS,CAAZ,IAAiB,IAAI,IAAI,eAAIkuJ,KAAJ,CAAJ,GAAiB,eAAIA,KAAK,GAAG,CAAZ,CAAtC,CADK,EAEL,gBAAK,CAAC0sJ,UAAU,GAAG,eAAI1sJ,KAAJ,CAAd,KAA6B,IAAIq6I,aAAjC,CAAL,CAFK,CAAP;AAID,CAPD;;AASe,oBAAW;AACxB,SAAO,0BAAWoS,qBAAX,EACFjrS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC5BD;;AACA;;AAEO,SAASmrS,wBAAT,CAAkC/jB,MAAlC,EAA0CC,GAA1C,EAA+C;AACpD,MAAI/kC,CAAC,GAAG,gBAAK,KAAK,IAAInb,QAAT,CAAL,CAAR;AAAA,MACI1/N,CAAC,GAAG,CAAC,IAAI0/N,WAAK,CAAV,IAAe,eAAIkgD,GAAJ,CADvB;AAAA,MAEI7oI,KAAK,GAAG6oI,GAAG,GAAG,CAFlB;;AAGA,OAAK,IAAIl9R,CAAC,GAAG,CAAR,EAAW21F,KAAhB,EAAuB31F,CAAC,GAAG,EAA3B,EAA+BA,CAAC,EAAhC,EAAoC;AAClCq0J,IAAAA,KAAK,IAAI1+D,KAAK,GAAG,CAAC0+D,KAAK,GAAG,CAAR,GAAY,eAAIA,KAAJ,CAAZ,GAAyB/2I,CAA1B,KAAgC,MAAM,eAAI+2I,KAAJ,CAAtC,CAAjB;AACA,QAAI,eAAI1+D,KAAJ,IAAatY,aAAjB,EAA0B;AAC3B;;AACD,SAAO,CACL86K,CAAC,IAAI,MAAM,eAAI9jG,KAAJ,CAAV,CAAD,GAAyB4oI,MAAzB,GAAkC,GAD7B,EAEL9kC,CAAC,GAAG9jG,KAFC,CAAP;AAID;;AAED2sJ,wBAAwB,CAACtjD,MAAzB,GAAkC,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/C,MAAIyzO,CAAC,GAAG,gBAAK,KAAK,IAAInb,QAAT,CAAL,CAAR;AAAA,MACI3oF,KAAK,GAAG3vI,CAAC,GAAGyzO,CADhB;AAEA,MAAI,eAAI,eAAI9jG,KAAJ,IAAayqF,YAAjB,IAA2BzhK,aAA/B,EAAwCg3E,KAAK,GAAGA,KAAK,GAAG,CAAR,GAAY,CAACyqF,YAAb,GAAsBA,YAA9B;AACxC,SAAO,CACL,MAAM34O,CAAN,IAAWgyP,CAAC,IAAI,MAAM,eAAI9jG,KAAJ,CAAV,CAAZ,CADK,EAEL,gBAAK,CAACA,KAAK,GAAG,CAAR,GAAY,eAAIA,KAAJ,CAAb,KAA4B,IAAI2oF,WAAK,CAArC,CAAL,CAFK,CAAP;AAID,CARD;;AAUe,oBAAW;AACxB,SAAO,0BAAWgkE,wBAAX,EACFnrS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC9BD;;AACA;;AAEO,SAASorS,gBAAT,CAA0BhkB,MAA1B,EAAkCC,GAAlC,EAAuC;AAC5C,MAAIkN,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AAAA,MAAsBoR,IAAI,GAAGlE,IAAI,GAAGA,IAApC;AAAA,MAA0C8W,IAAI,GAAG9W,IAAI,GAAGkE,IAAxD;AACA,SAAO,CACLrR,MAAM,IAAI,UAAU,UAAUmN,IAApB,GAA2B8W,IAAI,GAAGA,IAAP,IAAe,CAAC,OAAD,GAAW,UAAU9W,IAArB,GAA4B,UAAUkE,IAAtC,GAA6C,UAAU4S,IAAtE,CAA/B,CADD,EAELhkB,GAAG,IAAI,UAAUoR,IAAI,GAAGA,IAAP,IAAe,CAAC,OAAD,GAAW,UAAUlE,IAArB,GAA4B,UAAUkE,IAArD,CAAd,CAFE,CAAP;AAID;;AAED2S,gBAAgB,CAACvjD,MAAjB,GAA0B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACvC,MAAIw4Q,GAAG,GAAGx4Q,CAAV;AAAA,MAAa1kB,CAAC,GAAG,EAAjB;AAAA,MAAqB21F,KAArB;AAAA,MAA4By0M,IAA5B;AAAA,MAAkCkE,IAAlC;AAAA,MAAwC4S,IAAxC;;AACA,KAAG;AACD9W,IAAAA,IAAI,GAAGlN,GAAG,GAAGA,GAAb;AAAkBoR,IAAAA,IAAI,GAAGlE,IAAI,GAAGA,IAAd;AAClBlN,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAAEunM,GAAG,IAAI,UAAUoR,IAAI,GAAGA,IAAP,IAAe,CAAC,OAAD,GAAW,UAAUlE,IAArB,GAA4B,UAAUkE,IAArD,CAAd,CAAJ,GAAiF5pR,CAAlF,KACZ,UAAU4pR,IAAI,GAAGA,IAAP,IAAgB,IAAI,CAAC,OAAN,GAAkB,KAAK,OAAN,GAAiBlE,IAAlC,GAA0C,KAAK,CAAC,OAAP,GAAkBkE,IAA1E,CADE,CAAf;AAED,GAJD,QAIS,eAAI34M,KAAJ,IAAaomK,cAAb,IAAyB,EAAE/7P,CAAF,GAAM,CAJxC;;AAKAoqS,EAAAA,IAAI,GAAGlN,GAAG,GAAGA,GAAb;AAAkBoR,EAAAA,IAAI,GAAGlE,IAAI,GAAGA,IAAd;AAAoB8W,EAAAA,IAAI,GAAG9W,IAAI,GAAGkE,IAAd;AACtC,SAAO,CACLnoS,CAAC,IAAI,UAAU,UAAUikS,IAApB,GAA2B8W,IAAI,GAAGA,IAAP,IAAe,CAAC,OAAD,GAAW,UAAU9W,IAArB,GAA4B,UAAUkE,IAAtC,GAA6C,UAAU4S,IAAtE,CAA/B,CADI,EAELhkB,GAFK,CAAP;AAID,CAZD;;AAce,oBAAW;AACxB,SAAO,0BAAW+jB,gBAAX,EACFprS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC5BD;;AACA;;AAEO,SAASsrS,aAAT,CAAuBlkB,MAAvB,EAA+BC,GAA/B,EAAoC;AACzC,SAAO,CACLD,MAAM,IAAI,IAAI,eAAIC,GAAJ,CAAR,CAAN,GAA0B,CADrB,EAEL,KAAKA,GAAG,GAAG,eAAIA,GAAG,GAAG,CAAV,CAAX,CAFK,CAAP;AAID;;AAEDikB,aAAa,CAACzjD,MAAd,GAAuB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpC,MAAI4f,CAAC,GAAG5f,CAAC,GAAG,CAAZ;;AACA,OAAK,IAAI1kB,CAAC,GAAG,CAAR,EAAW21F,KAAK,GAAG7tF,QAAxB,EAAkC9H,CAAC,GAAG,EAAJ,IAAU,eAAI21F,KAAJ,IAAatY,aAAzD,EAAkE,EAAEr9E,CAApE,EAAuE;AACrE,QAAIyM,CAAC,GAAG,eAAIiY,CAAC,GAAG,CAAR,CAAR;AACAA,IAAAA,CAAC,IAAIixE,KAAK,GAAG,CAACjxE,CAAC,GAAG,eAAIA,CAAC,GAAG,CAAR,CAAJ,GAAiB4f,CAAlB,KAAwB,IAAI,OAAO73B,CAAC,GAAGA,CAAX,CAA5B,CAAb;AACD;;AACD,SAAO,CACL,IAAItG,CAAJ,IAAS,IAAI,eAAIue,CAAJ,CAAb,CADK,EAELA,CAFK,CAAP;AAID,CAVD;;AAYe,oBAAW;AACxB,SAAO,0BAAWy8R,aAAX,EACFtrS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;ACzBD;;AACA;;;;AAEA,IAAIu8R,KAAK,GAAG,CAAC,CAAE;AACb,CAAC,CAAC,CAAC,GAAF,EAAQ,CAAR,CAAD,EAAc,CAAC,CAAC,EAAF,EAAO,EAAP,CAAd,EAA0B,CAAI,CAAJ,EAAQ,CAAR,CAA1B,CADW,EAEX,CAAC,CAAI,CAAJ,EAAQ,CAAR,CAAD,EAAa,CAAG,EAAH,EAAQ,EAAR,CAAb,EAA0B,CAAE,GAAF,EAAO,CAAP,CAA1B,CAFW,CAAD,EAGT,CAAE;AACH,CAAC,CAAC,CAAC,GAAF,EAAO,CAAP,CAAD,EAAY,CAAC,CAAC,EAAF,EAAM,CAAC,EAAP,CAAZ,EAAwB,CAAG,CAAH,EAAM,CAAN,CAAxB,CADC,EAED,CAAC,CAAI,CAAJ,EAAO,CAAP,CAAD,EAAY,CAAE,EAAF,EAAM,CAAC,EAAP,CAAZ,EAAwB,CAAC,GAAD,EAAM,CAAN,CAAxB,CAFC,CAHS,CAAZ;;AAQe,oBAAW;AACxB,SAAO,oBAAU,uBAAUtqS,QAAV,CAAV,EAA+BsqS,KAA/B,EACF73C,MADE,CACK,CAAC,EAAD,EAAK,CAAL,CADL,EAEF1kP,KAFE,CAEI,MAFJ,CAAP;AAGD;;;;;;;;;;ACfD;;AACA;;AACA;;AAEA;AACA;AACA;AAEO,SAASurS,WAAT,CAAqBnkB,MAArB,EAA6BC,GAA7B,EAAkC;AACvC,MAAIK,MAAM,GAAG,eAAIL,GAAJ,CAAb;AAAA,MACExlM,CAAC,GAAG,eAAIwlM,GAAJ,CADN;AAAA,MAEE15R,CAAC,GAAG,gBAAKy5R,MAAL,CAFN;AAIA,MAAIA,MAAM,KAAK,CAAX,IAAgB,eAAIC,GAAJ,MAAap+C,YAAjC,EAAyC,OAAO,CAAC,CAAD,EAAIo+C,GAAJ,CAAP,CAAzC,KACK,IAAIA,GAAG,KAAK,CAAZ,EAAe,OAAO,CAACD,MAAD,EAAS,CAAT,CAAP,CAAf,KACA,IAAI,eAAIA,MAAJ,MAAgBn+C,YAApB,EAA4B,OAAO,CAACm+C,MAAM,GAAGvlM,CAAV,EAAaonJ,eAASy+C,MAAtB,CAAP;AAEjC,MAAIxvR,CAAC,GAAGivO,YAAM,IAAIigD,MAAV,IAAqB,IAAIA,MAAL,GAAejgD,QAA3C;AAAA,MACEvwO,CAAC,GAAI,IAAIywR,GAAL,GAAYlgD,QADlB;AAAA,MAEEnwO,CAAC,GAAG,CAAC,IAAIJ,CAAC,GAAGA,CAAT,KAAe8wR,MAAM,GAAG9wR,CAAxB,CAFN;AAIA,MAAI40S,EAAE,GAAGtzS,CAAC,GAAGA,CAAb;AAAA,MACEq7D,EAAE,GAAGv8D,CAAC,GAAGA,CADX;AAAA,MAEEy0S,IAAI,GAAG,IAAID,EAAE,GAAGj4O,EAFlB;AAAA,MAGEm4O,IAAI,GAAG,IAAIn4O,EAAE,GAAGi4O,EAHlB;AAKA,MAAIjpN,CAAC,GAAG,CAAErqF,CAAC,GAAGwvR,MAAL,GAAe1wR,CAAf,GAAmBkB,CAAC,GAAG,CAAxB,IAA6BuzS,IAArC;AAAA,MACEjpN,CAAC,GAAG,CAAEjvB,EAAE,GAAGm0N,MAAN,GAAgB8jB,EAAhB,GAAqBx0S,CAAC,GAAG,CAA1B,IAA+B00S,IADrC;AAAA,MAEE9pN,CAAC,GAAGW,CAAC,GAAGA,CAAJ,GAASV,CAAC,GAAGA,CAAL,GAAU4pN,IAFxB;AAAA,MAGEpzS,CAAC,GAAGmqF,CAAC,GAAGA,CAAJ,GAAQ,CAAEjvB,EAAE,GAAGm0N,MAAL,GAAcA,MAAf,GAAyB8jB,EAAzB,GAA8Bx0S,CAAC,GAAG0wR,MAAlC,GAA2C,CAA5C,IAAiDgkB,IAH/D;AAKA,SAAO,CACLziE,gBAAU1mJ,CAAC,GAAG,gBAAKX,CAAL,IAAUj0F,CAAxB,CADK,EAELs7O,gBAAUzmJ,CAAC,GAAG,gBAAKnqF,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAjB,IAAsB,gBAAK,CAACgvR,GAAD,GAAOnvR,CAAZ,CAAtB,GAAuCvK,CAArD,CAFK,CAAP;AAID;;AAED49S,WAAW,CAAC1jD,MAAZ,GAAqB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAElCve,EAAAA,CAAC,IAAI24O,YAAL;AACAp6N,EAAAA,CAAC,IAAIo6N,YAAL;AAEA,MAAIhgK,EAAE,GAAG34E,CAAC,GAAGA,CAAb;AAAA,MACEusG,EAAE,GAAGhuF,CAAC,GAAGA,CADX;AAAA,MAEE88R,IAAI,GAAG1iO,EAAE,GAAG4zB,EAFd;AAAA,MAGE+uM,GAAG,GAAGzkE,WAAKA,QAHb;AAKA,SAAO,CACL72O,CAAC,GAAG,CAACq7S,IAAI,GAAE,CAAN,GAAU,gBAAK,CAAC,IAAIA,IAAL,KAAc,IAAIA,IAAlB,IAA0B,IAAI1iO,EAAnC,CAAX,KAAsD,IAAI34E,CAA1D,IAA+D24O,YAAlE,GAA2E,CADvE,EAEL,mBAAM,UAASo+C,GAAT,EAAc;AAClB,WACEskB,IAAI,IAAIxkE,WAAK,eAAIkgD,GAAJ,CAAL,GAAgB,IAAIA,GAAxB,CAAJ,GAAmClgD,QAAnC,GACA,IAAIkgD,GAAJ,GAAUA,GAAV,IAAiBx4Q,CAAC,GAAG,eAAIw4Q,GAAJ,CAArB,CADA,GAEA,IAAIlgD,QAAJ,GAASkgD,GAFT,GAGAukB,GAAG,GAAG/8R,CAJR;AAMD,GAPD,EAOG,CAPH,CAFK,CAAP;AAWD,CArBD;;AAuBe,oBAAW;AACxB,SAAO,0BAAW08R,WAAX,EACJvrS,KADI,CACE,OADF,CAAP;AAED;;;;;;;;;;AC/DD;;AACA;;AAEA;AACA;AAEA,IAAI6rS,WAAW,GAAG,MAAlB;AAAA,IACIC,WAAW,GAAG,OADlB;AAAA,IAEIC,WAAW,GAAG,CAAC,OAFnB;AAAA,IAGIC,WAAW,GAAG,OAHlB;AAAA,IAIIC,WAAW,GAAGJ,WAJlB;AAAA,IAKIK,WAAW,GAAG,IAAIJ,WALtB;AAAA,IAMIK,WAAW,GAAG,IAAIJ,WANtB;AAAA,IAOIK,WAAW,GAAG,IAAIJ,WAPtB;AAAA,IAQIK,aAAa,GAAG,WARpB;;AAUO,SAASC,YAAT,CAAsBllB,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAIkN,IAAI,GAAGlN,GAAG,GAAGA,GAAjB;AACA,SAAO,CACLD,MADK,EAELC,GAAG,IAAIwkB,WAAW,GAAGtX,IAAI,GAAGA,IAAP,IAAeuX,WAAW,GAAGvX,IAAI,IAAIwX,WAAW,GAAGC,WAAW,GAAGzX,IAAhC,CAAjC,CAAlB,CAFE,CAAP;AAID;;AAED+X,YAAY,CAACzkD,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAIA,CAAC,GAAGw9R,aAAR,EAAuBx9R,CAAC,GAAGw9R,aAAJ,CAAvB,KACK,IAAIx9R,CAAC,GAAG,CAACw9R,aAAT,EAAwBx9R,CAAC,GAAG,CAACw9R,aAAL;AAC7B,MAAIp0C,EAAE,GAAGppP,CAAT;AAAA,MAAYixE,KAAZ;;AAEA,KAAG;AAAE;AACH,QAAI+c,EAAE,GAAGo7J,EAAE,GAAGA,EAAd;AACAA,IAAAA,EAAE,IAAIn4K,KAAK,GAAG,CAAEm4K,EAAE,IAAI4zC,WAAW,GAAGhvM,EAAE,GAAGA,EAAL,IAAWivM,WAAW,GAAGjvM,EAAE,IAAIkvM,WAAW,GAAGC,WAAW,GAAGnvM,EAAhC,CAA3B,CAAlB,CAAH,GAAyFhuF,CAA1F,KAAgGo9R,WAAW,GAAGpvM,EAAE,GAAGA,EAAL,IAAWqvM,WAAW,GAAGrvM,EAAE,IAAIsvM,WAAW,GAAGC,WAAW,GAAGvvM,EAAhC,CAA3B,CAA9G,CAAd;AACD,GAHD,QAGS,eAAI/c,KAAJ,IAAatY,aAHtB;;AAKA,SAAO,CAACl3E,CAAD,EAAI2nQ,EAAJ,CAAP;AACD,CAXD;;AAae,oBAAW;AACxB,SAAO,0BAAWq0C,YAAX,EACFtsS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACxCD;;AACA;;AAEO,SAASusS,YAAT,CAAsBnlB,MAAtB,EAA8BC,GAA9B,EAAmC;AACxC,MAAI,eAAIA,GAAJ,IAAW7/M,aAAf,EAAwB,OAAO,CAAC4/M,MAAD,EAAS,CAAT,CAAP;AACxB,MAAIwU,MAAM,GAAG,eAAIvU,GAAJ,CAAb;AAAA,MACI5/Q,CAAC,GAAG2/Q,MAAM,GAAG,eAAIC,GAAJ,CADjB;AAEA,SAAO,CACL,eAAI5/Q,CAAJ,IAASm0R,MADJ,EAELvU,GAAG,GAAG,CAAC,IAAI,eAAI5/Q,CAAJ,CAAL,IAAem0R,MAFhB,CAAP;AAID;;AAED2Q,YAAY,CAAC1kD,MAAb,GAAsB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACnC,MAAI,eAAIA,CAAJ,IAAS24D,aAAb,EAAsB,OAAO,CAACl3E,CAAD,EAAI,CAAJ,CAAP;AACtB,MAAImX,CAAC,GAAGnX,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAApB;AAAA,MACIw4Q,GAAG,GAAGx4Q,CAAC,GAAG,GADd;AAAA,MAEI1kB,CAAC,GAAG,EAFR;AAAA,MAEY21F,KAFZ;;AAGA,KAAG;AACD,QAAI87M,MAAM,GAAG,eAAIvU,GAAJ,CAAb;AAAA,QACIwc,MAAM,GAAG,IAAI,eAAIxc,GAAJ,CADjB;AAAA,QAEIjzR,CAAC,GAAGqT,CAAC,GAAG,IAAIoH,CAAJ,GAAQw4Q,GAAZ,GAAkBA,GAAG,GAAGA,GAFhC;AAGAA,IAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAAC87M,MAAM,GAAGxnS,CAAT,GAAa,KAAKizR,GAAG,GAAGx4Q,CAAX,CAAd,KAAgC,IAAIza,CAAC,GAAGyvS,MAAJ,GAAaA,MAAjB,GAA0B,KAAKxc,GAAG,GAAGx4Q,CAAX,IAAgB+sR,MAA1E,CAAf;AACD,GALD,QAKS,eAAI97M,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CALvC;;AAMAyxS,EAAAA,MAAM,GAAG,eAAIvU,GAAJ,CAAT;AACA,SAAO,CACL,CAAC,eAAIx4Q,CAAJ,IAAS,eAAIw4Q,GAAG,GAAG,IAAIuU,MAAd,CAAT,GAAiC,gBAAKtrS,CAAC,GAAGsrS,MAAT,CAAjC,GAAoD,gBAAK/sR,CAAL,IAAU,gBAAKve,CAAL,CAAV,IAAqB,gBAAK,eAAIA,CAAC,GAAGsrS,MAAR,CAAL,IAAwB3yD,YAA7C,CAArD,IAA6G,eAAIo+C,GAAJ,CADxG,EAELA,GAFK,CAAP;AAID,CAhBD;;AAkBe,oBAAW;AACxB,SAAO,0BAAWklB,YAAX,EACFvsS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;;AClCD;;AAEA;AACA;AACA;AACA;AAEA;AACe,kBAAS3O,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIixE,CAAC,GAAGvzC,QAAQ,CAACvkC,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAhB;AAAA,MACIgL,CAAC,GAAGu5B,QAAQ,CAAC19B,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CADhB;AAAA,MAEImvR,GAAG,GAAG/4C,KAAK,CAACnlK,CAAD,EAAI9sE,CAAJ,CAFf;AAAA,MAGI1O,CAAC,GAAGlE,MAAM,CAAC0/E,CAAD,CAAN,GAAY1/E,MAAM,CAAC4S,CAAD,CAH1B;AAKA,SAAO24B,QAAQ,CAAC,CACd,CADc,EACX,CADW,EACR3jC,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CADQ,EAEd,CAFc,EAEX,CAFW,EAERA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAFQ,CAAD,EAGZ2jC,QAAQ,CAAC,CACVrnC,CADU,EACP,CADO,EACJ,CADI,EAEV,CAFU,EAEPA,CAFO,EAEJ,CAFI,CAAD,EAGRqnC,QAAQ,CAAC,CACV,eAAIqyP,GAAJ,CADU,EACA,eAAIA,GAAJ,CADA,EACU,CADV,EAEV,CAAC,eAAIA,GAAJ,CAFS,EAEC,eAAIA,GAAJ,CAFD,EAEW,CAFX,CAAD,EAGR,CACD,CADC,EACE,CADF,EACK,CAACnvR,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CADN,EAED,CAFC,EAEE,CAFF,EAEK,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAFN,CAHQ,CAHA,CAHI,CAAf;AAaD,EAED;;;AACO,SAASooC,OAAT,CAAiBshD,CAAjB,EAAoB;AACzB,MAAIn6E,CAAC,GAAG,KAAKm6E,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA3B,CAAR;AACA,SAAO,CACLn6E,CAAC,GAAGm6E,CAAC,CAAC,CAAD,CADA,EACK,CAACn6E,CAAD,GAAKm6E,CAAC,CAAC,CAAD,CADX,EACgBn6E,CAAC,IAAIm6E,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA1B,CADjB,EAEL,CAACn6E,CAAD,GAAKm6E,CAAC,CAAC,CAAD,CAFD,EAEMn6E,CAAC,GAAGm6E,CAAC,CAAC,CAAD,CAFX,EAEgBn6E,CAAC,IAAIm6E,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA1B,CAFjB,CAAP;AAID,EAED;;;AACO,SAAS5sD,QAAT,CAAkB3jC,CAAlB,EAAqB6G,CAArB,EAAwB;AAC7B,SAAO,CACL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CADjB,EAEL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAFjB,EAGL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAtB,GAA4B7G,CAAC,CAAC,CAAD,CAHxB,EAILA,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAJjB,EAKL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CALjB,EAML7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAtB,GAA4B7G,CAAC,CAAC,CAAD,CANxB,CAAP;AAQD,EAED;;;AACA,SAASukC,QAAT,CAAkBvkC,CAAlB,EAAqB6G,CAArB,EAAwB;AACtB,SAAO,CAAC7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAT,EAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAtB,CAAP;AACD,EAED;;;AACA,SAASzO,MAAT,CAAgB4S,CAAhB,EAAmB;AACjB,SAAO,gBAAKA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAR,GAAcA,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA3B,CAAP;AACD,EAED;;;AACA,SAASiyO,KAAT,CAAej9O,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO,iBAAM7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAA5B,EAAiC7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAvD,CAAP;AACD;;;;;;;;;AC/DD;;AACA;;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACe,kBAAS41L,IAAT,EAAe0+G,IAAf,EAAqB;AAElCv8H,EAAAA,OAAO,CAAC6d,IAAD,EAAO;AAAC1a,IAAAA,SAAS,EAAE;AAAZ,GAAP,CAAP;;AAEA,WAASnD,OAAT,CAAiB/6J,IAAjB,EAAuB2sL,MAAvB,EAA+B;AAC7B3sL,IAAAA,IAAI,CAACu3R,KAAL,GAAaC,SAAS,CAACx3R,IAAI,CAACs3R,IAAN,CAAtB,CAD6B,CAE7B;;AACA,QAAI3qG,MAAM,CAAC2qG,IAAX,EAAiB;AACf,UAAIG,MAAM,GAAGz3R,IAAI,CAACy3R,MAAL,GAAcC,UAAU,CAAC13R,IAAI,CAACs3R,IAAN,EAAY3qG,MAAM,CAAC2qG,IAAnB,CAArC;AAAA,UACI5qN,CAAC,GAAG,qBAAO+qN,MAAM,CAAC/4S,GAAP,CAAWiuM,MAAM,CAACmiC,OAAlB,CAAP,EAAmC2oE,MAAM,CAAC/4S,GAAP,CAAWshB,IAAI,CAAC8uN,OAAhB,CAAnC,CADR;AAEA9uN,MAAAA,IAAI,CAACk+J,SAAL,GAAiByuB,MAAM,CAACzuB,SAAP,GAAmB,sBAASyuB,MAAM,CAACzuB,SAAhB,EAA2BxxF,CAA3B,CAAnB,GAAmDA,CAApE,CAHe,CAIf;;AACA,UAAI6qN,KAAK,GAAG5qG,MAAM,CAAC4qG,KAAnB;;AACA,WAAK,IAAItiT,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGo0S,KAAK,CAAChjT,MAA1B,EAAkCU,CAAC,GAAGkO,CAAtC,EAAyC,EAAElO,CAA3C,EAA8C;AAC5C,YAAIi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAAV,IAAsCi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAApD,EAA8EsiT,KAAK,CAACtiT,CAAD,CAAL,GAAW+qB,IAAX;AAC9E,YAAIkzR,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAAV,IAAsCi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAApD,EAA8EsiT,KAAK,CAACtiT,CAAD,CAAL,GAAW+qB,IAAX;AAC/E;;AACDu3R,MAAAA,KAAK,GAAGv3R,IAAI,CAACu3R,KAAb;;AACA,WAAKtiT,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGo0S,KAAK,CAAChjT,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,YAAIi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAAV,IAAsCi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAApD,EAA8EsiT,KAAK,CAACtiT,CAAD,CAAL,GAAW03M,MAAX;AAC9E,YAAIumG,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAAV,IAAsCi+S,UAAU,CAACuE,MAAM,CAAC,CAAD,CAAP,EAAYF,KAAK,CAACtiT,CAAD,CAAL,CAAS,CAAT,CAAZ,CAApD,EAA8EsiT,KAAK,CAACtiT,CAAD,CAAL,GAAW03M,MAAX;AAC/E;AACF,KAfD,MAeO;AACL3sL,MAAAA,IAAI,CAACk+J,SAAL,GAAiByuB,MAAM,CAACzuB,SAAxB;AACD;;AACD,QAAIl+J,IAAI,CAAC+pJ,QAAT,EAAmB;AACjB/pJ,MAAAA,IAAI,CAAC+pJ,QAAL,CAAchxK,OAAd,CAAsB,UAAS69K,KAAT,EAAgB;AACpCmE,QAAAA,OAAO,CAACnE,KAAD,EAAQ52J,IAAR,CAAP;AACD,OAFD;AAGD;;AACD,WAAOA,IAAP;AACD;;AAED,WAAS02Q,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAInyQ,IAAI,GAAGs3R,IAAI,CAACplB,MAAD,EAASC,GAAT,CAAf;AAAA,QACI37E,KAAK,GAAGx2L,IAAI,CAAC8uN,OAAL,CAAa,CAACojD,MAAM,GAAGhmC,aAAV,EAAmBimC,GAAG,GAAGjmC,aAAzB,CAAb,CADZ;AAAA,QAEIvzP,CAFJ;;AAGA,QAAIA,CAAC,GAAGqnB,IAAI,CAACk+J,SAAb,EAAwB;AACtB,aAAO,CACLvlL,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAAZ,GAAkB79M,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAA9B,GAAoC79M,CAAC,CAAC,CAAD,CADhC,EAEL,EAAEA,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAAZ,GAAkB79M,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAA9B,GAAoC79M,CAAC,CAAC,CAAD,CAAvC,CAFK,CAAP;AAID;;AACD69M,IAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,CAACA,KAAK,CAAC,CAAD,CAAjB;AACA,WAAOA,KAAP;AACD,GA7CiC,CA+ClC;AACA;;;AACA,MAAImhG,UAAU,CAAC/+G,IAAD,CAAd,EAAsB89F,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACpD,QAAIm8L,WAAW,GAAG8hG,UAAU,CAACh/G,IAAD,EAAO,CAACx9L,CAAD,EAAI,CAACue,CAAL,CAAP,CAA5B;AACA,WAAOm8L,WAAW,KAAKA,WAAW,CAAC,CAAD,CAAX,IAAkBm2C,aAAlB,EAA2Bn2C,WAAW,CAAC,CAAD,CAAX,IAAkBm2C,aAA7C,EAAsDn2C,WAA3D,CAAlB;AACD,GAHqB;;AAKtB,WAAS8hG,UAAT,CAAoB53R,IAApB,EAA0B81L,WAA1B,EAAuC;AACrC,QAAI68C,MAAM,GAAG3yO,IAAI,CAAC8uN,OAAL,CAAa6jB,MAA1B;AAAA,QACIh6P,CAAC,GAAGqnB,IAAI,CAACk+J,SADb;AAAA,QAEIs4B,KAAK,GAAGV,WAFZ;;AAGA,QAAIn9M,CAAJ,EAAO;AACLA,MAAAA,CAAC,GAAG,qBAAQA,CAAR,CAAJ;AACA69M,MAAAA,KAAK,GAAG,CACN79M,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAAZ,GAAkB79M,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAA9B,GAAoC79M,CAAC,CAAC,CAAD,CAD/B,EAELA,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAAZ,GAAkB79M,CAAC,CAAC,CAAD,CAAD,GAAO69M,KAAK,CAAC,CAAD,CAA9B,GAAoC79M,CAAC,CAAC,CAAD,CAFhC,CAAR;AAID;;AACD,QAAIg6P,MAAM,IAAI3yO,IAAI,KAAK63R,WAAW,CAACt+Q,CAAC,GAAGo5N,MAAM,CAACn8C,KAAD,CAAX,CAAlC,EAAuD,OAAOj9K,CAAP;AACvD,QAAIA,CAAJ;AAAA,QACIwwI,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QADpB;;AAEA,SAAK,IAAI90K,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4mK,QAAQ,IAAIA,QAAQ,CAACx1K,MAAzC,EAAiDU,CAAC,GAAGkO,CAArD,EAAwD,EAAElO,CAA1D,EAA6D;AAC3D,UAAIskC,CAAC,GAAGq+Q,UAAU,CAAC7tI,QAAQ,CAAC90K,CAAD,CAAT,EAAc6gN,WAAd,CAAlB,EAA8C,OAAOv8K,CAAP;AAC/C;AACF;;AAED,WAASs+Q,WAAT,CAAqB/hG,WAArB,EAAkC;AAChC,WAAOwhG,IAAI,CAACxhG,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAAlB,EAA2Bn2C,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAA5C,CAAX;AACD;;AAED,MAAIj+J,IAAI,GAAG,0BAAW0oM,OAAX,CAAX;AAAA,MACI2P,OAAO,GAAGr4M,IAAI,CAAC6vF,MADnB;;AAGA7vF,EAAAA,IAAI,CAAC6vF,MAAL,GAAc,UAASA,MAAT,EAAiB;AAC7B,QAAI2xE,MAAM,GAAGxhK,IAAI,CAACwhK,MAAL,EAAb;AAAA,QACI+2C,YAAY,GAAGF,OAAO,CAACxoH,MAAD,CAD1B;AAAA,QAEI2oH,YAAY,IAAIx4M,IAAI,CAACwhK,MAAL,CAAY,CAAC,CAAD,EAAI,CAAJ,CAAZ,GAAqB62C,OAAO,CAACxoH,MAAD,CAAhC,CAFhB;AAGA7vF,IAAAA,IAAI,CAACwhK,MAAL,CAAYA,MAAZ;;AACA+2C,IAAAA,YAAY,CAAC3V,MAAb,GAAsB,YAAW;AAC/B4V,MAAAA,YAAY,CAACrV,YAAb;AACAqV,MAAAA,YAAY,CAAC7uD,SAAb;AACA8kD,MAAAA,OAAO,CAAC+J,YAAD,EAAe5tG,IAAf,CAAP;AACA4tG,MAAAA,YAAY,CAAC3uD,OAAb;AACA2uD,MAAAA,YAAY,CAACpV,UAAb;AACD,KAND;;AAOA,WAAOmV,YAAP;AACD,GAbD;;AAeA,SAAOv4M,IAAI,CAACorJ,KAAL,CAAW,CAAC,EAAZ,CAAP;AACD;;AAED,SAASqjD,OAAT,CAAiB5+G,MAAjB,EAAyB79J,IAAzB,EAA+B2sL,MAA/B,EAAuC;AACrC,MAAI6J,KAAJ;AAAA,MACI+gG,KAAK,GAAGv3R,IAAI,CAACu3R,KADjB;AAAA,MAEIp0S,CAAC,GAAGo0S,KAAK,CAAChjT,MAFd;AAAA,MAGI0uO,IAHJ;AAAA,MAII60E,UAAU,GAAG;AAAC5iS,IAAAA,IAAI,EAAE,YAAP;AAAqB4gM,IAAAA,WAAW,EAAE91L,IAAI,CAACs3R;AAAvC,GAJjB;AAAA,MAKIS,QAAQ,GAAG/3R,IAAI,CAACs3R,IAAL,CAAUlnS,MAAV,CAAiB,UAAStO,CAAT,EAAY;AAAE,WAAO,eAAIA,CAAC,CAAC,CAAD,CAAL,MAAc,EAArB;AAA0B,GAAzD,CALf;AAAA,MAMIkB,CAAC,GAAG,sBAAO;AAACkS,IAAAA,IAAI,EAAE,YAAP;AAAqB4gM,IAAAA,WAAW,EAAEiiG;AAAlC,GAAP,CANR;AAAA,MAOIC,MAAM,GAAG,KAPb;AAAA,MAQI94S,CAAC,GAAG,CAAC,CART;AAAA,MASI6hB,EAAE,GAAG/d,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CATnB,CADqC,CAWrC;;AACA,MAAItB,CAAC,GAAGqf,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAArB,GACF,CAAC,CAAC/d,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAX,IAAsB,CAAvB,EAA0B,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,IAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAX,IAAsB,CAAhD,CADE,GAEF,wBAAS80S,UAAT,CAFN,CAZqC,CAerC;;AACA,MAAInrG,MAAJ,EAAY,OAAO,EAAEztM,CAAF,GAAMiE,CAAb,EAAgB;AAC1B,QAAIo0S,KAAK,CAACr4S,CAAD,CAAL,KAAaytM,MAAjB,EAAyB;AAC1B;AACD,IAAEztM,CAAF;;AACA,OAAK,IAAIjK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BguO,IAAAA,IAAI,GAAGs0E,KAAK,CAAC,CAACtiT,CAAC,GAAGiK,CAAL,IAAUiE,CAAX,CAAZ;;AACA,QAAIpO,KAAK,CAACuH,OAAN,CAAc2mO,IAAd,CAAJ,EAAyB;AACvB,UAAI,CAAC+0E,MAAL,EAAa;AACXn6H,QAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACA,KAAK,GAAG,2BAAYysB,IAAI,CAAC,CAAD,CAAhB,EAAqBvhO,CAArB,EAAwB4wE,aAAxB,CAAT,EAA2C,CAA3C,CAAb,EAA4DkkI,KAAK,CAAC,CAAD,CAAjE;AACAwhG,QAAAA,MAAM,GAAG,IAAT;AACD;;AACDn6H,MAAAA,MAAM,CAAC24B,KAAP,CAAa,CAACA,KAAK,GAAG,2BAAYysB,IAAI,CAAC,CAAD,CAAhB,EAAqBvhO,CAArB,EAAwB4wE,aAAxB,CAAT,EAA2C,CAA3C,CAAb,EAA4DkkI,KAAK,CAAC,CAAD,CAAjE;AACD,KAND,MAMO;AACLwhG,MAAAA,MAAM,GAAG,KAAT;AACA,UAAI/0E,IAAI,KAAKt2B,MAAb,EAAqB8vF,OAAO,CAAC5+G,MAAD,EAASolD,IAAT,EAAejjN,IAAf,CAAP;AACtB;AACF;AACF,EAED;;;AACA,SAASkzR,UAAT,CAAoB/2S,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,SAAO7G,CAAC,IAAI6G,CAAL,IAAU7G,CAAC,CAAC,CAAD,CAAD,KAAS6G,CAAC,CAAC,CAAD,CAApB,IAA2B7G,CAAC,CAAC,CAAD,CAAD,KAAS6G,CAAC,CAAC,CAAD,CAA5C;AACD,EAED;;;AACA,SAAS00S,UAAT,CAAoBv7S,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAI5H,CAAJ;AAAA,MAAOue,CAAP;AAAA,MAAUxW,CAAC,GAAGhH,CAAC,CAAC5H,MAAhB;AAAA,MAAwBm3C,KAAK,GAAG,IAAhC;;AACA,OAAK,IAAIz2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BmG,IAAAA,CAAC,GAAGe,CAAC,CAAClH,CAAD,CAAL;;AACA,SAAK,IAAIiK,CAAC,GAAG8D,CAAC,CAACzO,MAAf,EAAuB,EAAE2K,CAAF,IAAO,CAA9B,GAAkC;AAChCya,MAAAA,CAAC,GAAG3W,CAAC,CAAC9D,CAAD,CAAL;;AACA,UAAI9D,CAAC,CAAC,CAAD,CAAD,KAASue,CAAC,CAAC,CAAD,CAAV,IAAiBve,CAAC,CAAC,CAAD,CAAD,KAASue,CAAC,CAAC,CAAD,CAA/B,EAAoC;AAClC,YAAI+xB,KAAJ,EAAW,OAAO,CAACA,KAAD,EAAQtwC,CAAR,CAAP;AACXswC,QAAAA,KAAK,GAAGtwC,CAAR;AACD;AACF;AACF;AACF,EAED;;;AACA,SAASo8S,SAAT,CAAmBF,IAAnB,EAAyB;AACvB,MAAIn0S,CAAC,GAAGm0S,IAAI,CAAC/iT,MAAb;AAAA,MACIgjT,KAAK,GAAG,EADZ;;AAEA,OAAK,IAAIp7S,CAAC,GAAGm7S,IAAI,CAACn0S,CAAC,GAAG,CAAL,CAAZ,EAAqBlO,CAAC,GAAG,CAA9B,EAAiCA,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6CsiT,KAAK,CAACriT,IAAN,CAAW,CAACiH,CAAD,EAAIA,CAAC,GAAGm7S,IAAI,CAACriT,CAAD,CAAZ,CAAX;;AAC7C,SAAOsiT,KAAP;AACD;;AAED,SAASI,UAAT,CAAoB33R,IAApB,EAA0B;AACxB,SAAOA,IAAI,CAAC8uN,OAAL,CAAa6jB,MAAb,IAAuB3yO,IAAI,CAAC+pJ,QAAL,IAAiB/pJ,IAAI,CAAC+pJ,QAAL,CAAc9zJ,IAAd,CAAmB0hS,UAAnB,CAA/C;AACD;;;;;;;;AC5KD;AACA,IAAIM,UAAU,GAAG,CACf,CAAC,CAAD,EAAI,EAAJ,CADe,EAEf,CAAC,CAAC,EAAF,EAAM,CAAN,CAFe,EAEL,CAAC,CAAD,EAAI,CAAJ,CAFK,EAEG,CAAC,EAAD,EAAK,CAAL,CAFH,EAEY,CAAC,GAAD,EAAM,CAAN,CAFZ,EAGf,CAAC,CAAD,EAAI,CAAC,EAAL,CAHe,CAAjB;;eAMe,CACb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CADa,EAEb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAFa,EAGb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAHa,EAIb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAJa,EAKb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CALa,EAMb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CANa,EAOb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAPa,EAQb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CARa,EASbv5S,GATa,CAST,UAAS44S,IAAT,EAAe;AACnB,SAAOA,IAAI,CAAC54S,GAAL,CAAS,UAASzJ,CAAT,EAAY;AAC1B,WAAOgjT,UAAU,CAAChjT,CAAD,CAAjB;AACD,GAFM,CAAP;AAGD,CAbc;;;;;;;;;;;ACPf;;AACA;;AACA;;AACA;;;;AAEe,kBAASijT,cAAT,EAAyB;AAEtCA,EAAAA,cAAc,GAAGA,cAAc,IAAI,UAASZ,IAAT,EAAe;AAChD,QAAI51S,CAAC,GAAG,wBAAS;AAACwT,MAAAA,IAAI,EAAE,YAAP;AAAqB4gM,MAAAA,WAAW,EAAEwhG;AAAlC,KAAT,CAAR;AACA,WAAO,0BAAWxsS,KAAX,CAAiB,CAAjB,EAAoB4qM,SAApB,CAA8B,CAAC,CAAD,EAAI,CAAJ,CAA9B,EAAsC85C,MAAtC,CAA6C,CAAC,CAAC9tP,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAA7C,CAAP;AACD,GAHD;;AAKA,MAAIy2S,KAAK,GAAGF,oBAAWv5S,GAAX,CAAe,UAAS44S,IAAT,EAAe;AACxC,WAAO;AAACA,MAAAA,IAAI,EAAEA,IAAP;AAAaxoE,MAAAA,OAAO,EAAEopE,cAAc,CAACZ,IAAD;AAApC,KAAP;AACD,GAFW,CAAZ;;AAIA,GAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0Bv+S,OAA1B,CAAkC,UAAS+I,CAAT,EAAY7M,CAAZ,EAAe;AAC/C,QAAI+qB,IAAI,GAAGm4R,KAAK,CAACr2S,CAAD,CAAhB;AACAke,IAAAA,IAAI,IAAI,CAACA,IAAI,CAAC+pJ,QAAL,KAAkB/pJ,IAAI,CAAC+pJ,QAAL,GAAgB,EAAlC,CAAD,EAAwC70K,IAAxC,CAA6CijT,KAAK,CAACljT,CAAD,CAAlD,CAAR;AACD,GAHD;AAKA,SAAO,oBAAWkjT,KAAK,CAAC,CAAD,CAAhB,EAAqB,UAASjmB,MAAT,EAAiBC,GAAjB,EAAsB;AAC5C,WAAOgmB,KAAK,CAACjmB,MAAM,GAAG,CAACjgD,QAAD,GAAM,CAAf,GAAmBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAjC,GACPD,MAAM,GAAG,CAAT,GAAaC,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAA3B,GACAD,MAAM,GAAGjgD,WAAK,CAAd,GAAkBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAhC,GACAA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAHR,CAAZ;AAID,GALE,EAMF/4C,KANE,CAMI,CAAC,EANL,EAOFtuO,KAPE,CAOI,OAPJ,EAQFqqJ,MARE,CAQK,CAAC,CAAD,EAAI,EAAJ,CARL,CAAP;AASD;;;;;;;;;AC9BD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIqgD,EAAE,GAAG,IAAI,gBAAK,CAAL,CAAb;;AAEA,SAAS4iG,UAAT,CAAoBj8S,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAIu2B,CAAC,GAAG,6BAAap9B,CAAb,EAAgB6G,CAAhB,CAAR;AACA,SAAO,CAACu2B,CAAC,CAAC,CAAD,CAAD,GAAOi8K,EAAR,EAAYj8K,CAAC,CAAC,CAAD,CAAb,CAAP;AACD;;AAED6+Q,UAAU,CAACzlD,MAAX,GAAoB,UAASv3P,CAAT,EAAWue,CAAX,EAAc;AAChC,SAAOiwR,wBAAaj3C,MAAb,CAAoBv3P,CAAC,GAAGo6M,EAAxB,EAA4B77L,CAA5B,CAAP;AACD,CAFD;;AAIe,kBAASu+R,cAAT,EAAyB;AAEtCA,EAAAA,cAAc,GAAGA,cAAc,IAAI,UAASZ,IAAT,EAAe;AAChD,QAAI51S,CAAC,GAAG,wBAAS;AAACwT,MAAAA,IAAI,EAAE,YAAP;AAAqB4gM,MAAAA,WAAW,EAAEwhG;AAAlC,KAAT,CAAR;AACA,WAAO,0BAAWc,UAAX,EAAuB1iG,SAAvB,CAAiC,CAAC,CAAD,EAAI,CAAJ,CAAjC,EAAyC5qM,KAAzC,CAA+C,CAA/C,EAAkD0kP,MAAlD,CAAyD9tP,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,GAAW,CAAC,CAACA,CAAC,CAAC,CAAD,CAAH,EAAQ,CAAR,CAAX,GAAwB,CAAC,MAAMA,CAAC,CAAC,CAAD,CAAR,EAAa,GAAb,CAAjF,CAAP;AACD,GAHD;;AAKA,MAAIy2S,KAAK,GAAGF,oBAAWv5S,GAAX,CAAe,UAAS44S,IAAT,EAAe;AACxC,WAAO;AAACA,MAAAA,IAAI,EAAEA,IAAP;AAAaxoE,MAAAA,OAAO,EAAEopE,cAAc,CAACZ,IAAD;AAApC,KAAP;AACD,GAFW,CAAZ;;AAIA,GAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0Bv+S,OAA1B,CAAkC,UAAS+I,CAAT,EAAY7M,CAAZ,EAAe;AAC/C,QAAI+qB,IAAI,GAAGm4R,KAAK,CAACr2S,CAAD,CAAhB;AACAke,IAAAA,IAAI,IAAI,CAACA,IAAI,CAAC+pJ,QAAL,KAAkB/pJ,IAAI,CAAC+pJ,QAAL,GAAgB,EAAlC,CAAD,EAAwC70K,IAAxC,CAA6CijT,KAAK,CAACljT,CAAD,CAAlD,CAAR;AACD,GAHD;AAKA,SAAO,oBAAWkjT,KAAK,CAAC,CAAD,CAAhB,EAAqB,UAASjmB,MAAT,EAAiBC,GAAjB,EAAsB;AAC5C,WAAOgmB,KAAK,CAACjmB,MAAM,GAAG,CAACjgD,QAAD,GAAM,CAAf,GAAmBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAjC,GACPD,MAAM,GAAG,CAAT,GAAaC,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAA3B,GACAD,MAAM,GAAGjgD,WAAK,CAAd,GAAkBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAhC,GACAA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAHR,CAAZ;AAID,GALE,EAMF/4C,KANE,CAMI,CAAC,EANL,EAOFtuO,KAPE,CAOI,OAPJ,EAQFqqJ,MARE,CAQK,CAAC,CAAD,EAAI,OAAJ,CARL,CAAP;AASD;;;;;;;;;AC1CD;;AACA;;AACA;;AACA;;;;AAEe,kBAAS+iJ,cAAT,EAAyB;AAEtCA,EAAAA,cAAc,GAAGA,cAAc,IAAI,UAASZ,IAAT,EAAe;AAChD,QAAI51S,CAAC,GAAG41S,IAAI,CAAC/iT,MAAL,KAAgB,CAAhB,GAAoB,wBAAS;AAAC2gB,MAAAA,IAAI,EAAE,YAAP;AAAqB4gM,MAAAA,WAAW,EAAEwhG;AAAlC,KAAT,CAApB,GAAwEA,IAAI,CAAC,CAAD,CAApF;AACA,WAAO,0BAAWxsS,KAAX,CAAiB,CAAjB,EAAoB4qM,SAApB,CAA8B,CAAC,CAAD,EAAI,CAAJ,CAA9B,EAAsC85C,MAAtC,CAA6C,CAAC,CAAC9tP,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAA7C,CAAP;AACD,GAHD;;AAKA,MAAI22S,EAAE,GAAGJ,oBAAWv5S,GAAX,CAAe,UAAS44S,IAAT,EAAe;AACrC,QAAIgB,GAAG,GAAGhB,IAAI,CAAC54S,GAAL,CAASg0R,SAAT,CAAV;AAAA,QACIvvR,CAAC,GAAGm1S,GAAG,CAAC/jT,MADZ;AAAA,QAEI4H,CAAC,GAAGm8S,GAAG,CAACn1S,CAAC,GAAG,CAAL,CAFX;AAAA,QAGIH,CAHJ;AAAA,QAIIu1S,OAAO,GAAG,EAJd;;AAKA,SAAK,IAAItjT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B+N,MAAAA,CAAC,GAAGs1S,GAAG,CAACrjT,CAAD,CAAP;AACAsjT,MAAAA,OAAO,CAACrjT,IAAR,CAAau9R,SAAS,CAAC,CACrBt2R,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B6G,CAAC,CAAC,CAAD,CAAD,GAAO,mBADd,EAErB7G,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B6G,CAAC,CAAC,CAAD,CAAD,GAAO,mBAFd,EAGrB7G,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B6G,CAAC,CAAC,CAAD,CAAD,GAAO,mBAHd,CAAD,CAAtB,EAIIyvR,SAAS,CAAC,CACZzvR,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B7G,CAAC,CAAC,CAAD,CAAD,GAAO,mBADvB,EAEZ6G,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B7G,CAAC,CAAC,CAAD,CAAD,GAAO,mBAFvB,EAGZ6G,CAAC,CAAC,CAAD,CAAD,GAAO,kBAAP,GAA4B7G,CAAC,CAAC,CAAD,CAAD,GAAO,mBAHvB,CAAD,CAJb;AASAA,MAAAA,CAAC,GAAG6G,CAAJ;AACD;;AACD,WAAOu1S,OAAP;AACD,GApBQ,CAAT;;AAsBA,MAAIC,aAAa,GAAG,EAApB;AAEA,MAAIC,OAAO,GAAG,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,CAAd;AAEAJ,EAAAA,EAAE,CAACt/S,OAAH,CAAW,UAASw/S,OAAT,EAAkBr5S,CAAlB,EAAqB;AAC9B,QAAIo4S,IAAI,GAAGW,oBAAW/4S,CAAX,CAAX;AAAA,QACIiE,CAAC,GAAGm0S,IAAI,CAAC/iT,MADb;AAAA,QAEImkT,OAAO,GAAGF,aAAa,CAACt5S,CAAD,CAAb,GAAmB,EAFjC;;AAGA,SAAK,IAAIjK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BojT,MAAAA,EAAE,CAACnjT,IAAH,CAAQ,CACNoiT,IAAI,CAACriT,CAAD,CADE,EAENsjT,OAAO,CAAC,CAACtjT,CAAC,GAAG,CAAJ,GAAQ,CAAT,KAAe,IAAIkO,CAAnB,CAAD,CAFD,EAGNo1S,OAAO,CAAC,CAACtjT,CAAC,GAAG,CAAJ,GAAQ,CAAT,KAAe,IAAIkO,CAAnB,CAAD,CAHD,CAAR;AAKAs1S,MAAAA,OAAO,CAACvjT,IAAR,CAAagK,CAAb;AACAw5S,MAAAA,OAAO,CAACxjT,IAAR,CAAa+kN,KAAK,CAChBy4E,SAAS,CAAC6lB,OAAO,CAAC,CAACtjT,CAAC,GAAG,CAAJ,GAAQ,CAAT,KAAe,IAAIkO,CAAnB,CAAD,CAAR,CADO,EAEhBuvR,SAAS,CAAC6lB,OAAO,CAAC,CAACtjT,CAAC,GAAG,CAAJ,GAAQ,CAAT,KAAe,IAAIkO,CAAnB,CAAD,CAAR,CAFO,CAAlB;AAID;AACF,GAhBD;AAkBA,MAAIg1S,KAAK,GAAGE,EAAE,CAAC35S,GAAH,CAAO,UAAS44S,IAAT,EAAe;AAChC,WAAO;AACLxoE,MAAAA,OAAO,EAAEopE,cAAc,CAACZ,IAAD,CADlB;AAELA,MAAAA,IAAI,EAAEA;AAFD,KAAP;AAID,GALW,CAAZ;AAOAmB,EAAAA,OAAO,CAAC1/S,OAAR,CAAgB,UAAS+I,CAAT,EAAY7M,CAAZ,EAAe;AAC7B,QAAI03M,MAAM,GAAGwrG,KAAK,CAACr2S,CAAD,CAAlB;AACA6qM,IAAAA,MAAM,IAAI,CAACA,MAAM,CAAC5iC,QAAP,KAAoB4iC,MAAM,CAAC5iC,QAAP,GAAkB,EAAtC,CAAD,EAA4C70K,IAA5C,CAAiDijT,KAAK,CAACljT,CAAD,CAAtD,CAAV;AACD,GAHD;;AAKA,WAASqiT,IAAT,CAAcplB,MAAd,EAAsBC,GAAtB,EAA2B;AACzB,QAAIyZ,MAAM,GAAG,eAAIzZ,GAAJ,CAAb;AAAA,QACI54P,CAAC,GAAG,CAACqyQ,MAAM,GAAG,eAAI1Z,MAAJ,CAAV,EAAuB0Z,MAAM,GAAG,eAAI1Z,MAAJ,CAAhC,EAA6C,eAAIC,GAAJ,CAA7C,CADR;AAGA,QAAIomB,OAAO,GAAGrmB,MAAM,GAAG,CAACjgD,QAAD,GAAM,CAAf,GAAmBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAjC,GACRD,MAAM,GAAG,CAAT,GAAaC,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAA3B,GACAD,MAAM,GAAGjgD,WAAK,CAAd,GAAkBkgD,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAAhC,GACAA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc,CAHpB;AAKA,QAAIhvR,CAAC,GAAGq1S,aAAa,CAACD,OAAD,CAArB;AAEA,WAAOJ,KAAK,CAAChuS,GAAG,CAAChH,CAAC,CAAC,CAAD,CAAF,EAAOo2B,CAAP,CAAH,GAAe,CAAf,GAAmB,IAAI,IAAIg/Q,OAA3B,GACPpuS,GAAG,CAAChH,CAAC,CAAC,CAAD,CAAF,EAAOo2B,CAAP,CAAH,GAAe,CAAf,GAAmB,IAAI,IAAIg/Q,OAAR,GAAkB,CAArC,GACApuS,GAAG,CAAChH,CAAC,CAAC,CAAD,CAAF,EAAOo2B,CAAP,CAAH,GAAe,CAAf,GAAmB,IAAI,IAAIg/Q,OAAR,GAAkB,CAArC,GACAA,OAHM,CAAZ;AAID;;AAED,SAAO,oBAAWJ,KAAK,CAAC,CAAD,CAAhB,EAAqBb,IAArB,EACFl+D,KADE,CACI,CAAC,EADL,EAEFtuO,KAFE,CAEI,OAFJ,EAGFqqJ,MAHE,CAGK,CAAC,CAAD,EAAG,EAAH,CAHL,CAAP;AAID;;AAED,SAAShrJ,GAAT,CAAahO,CAAb,EAAgB6G,CAAhB,EAAmB;AACjB,OAAK,IAAI/N,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGhH,CAAC,CAAC5H,MAAjB,EAAyBkE,CAAC,GAAG,CAAlC,EAAqCxD,CAAC,GAAGkO,CAAzC,EAA4C,EAAElO,CAA9C,EAAiDwD,CAAC,IAAI0D,CAAC,CAAClH,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAD,CAAb;;AACjD,SAAOwD,CAAP;AACD;;AAED,SAASwhN,KAAT,CAAe99M,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO,CACL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CADjB,EAEL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAFjB,EAGL7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAAR,GAAc7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAHjB,CAAP;AAKD,EAED;;;AACA,SAASyvR,SAAT,CAAmBC,SAAnB,EAA8B;AAC5B,SAAO,CACL,iBAAMA,SAAS,CAAC,CAAD,CAAf,EAAoBA,SAAS,CAAC,CAAD,CAA7B,IAAoCxmC,aAD/B,EAEL,gBAAK,eAAI,CAAC,CAAL,EAAQ,eAAI,CAAJ,EAAOwmC,SAAS,CAAC,CAAD,CAAhB,CAAR,CAAL,IAAsCxmC,aAFjC,CAAP;AAID,EAED;;;AACA,SAASwmC,SAAT,CAAmB58E,WAAnB,EAAgC;AAC9B,MAAIo8E,MAAM,GAAGp8E,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAA9B;AAAA,MACIkmC,GAAG,GAAGr8E,WAAW,CAAC,CAAD,CAAX,GAAiBm2C,aAD3B;AAAA,MAEI2/C,MAAM,GAAG,eAAIzZ,GAAJ,CAFb;AAGA,SAAO,CACLyZ,MAAM,GAAG,eAAI1Z,MAAJ,CADJ,EAEL0Z,MAAM,GAAG,eAAI1Z,MAAJ,CAFJ,EAGL,eAAIC,GAAJ,CAHK,CAAP;AAKD;;;;;;;;;eC1Hc,MAAM,CAAE;;;;;;;;;;;ACAR,kBAAS17E,IAAT,EAAe;AAC5B,MAAI,CAACtzM,CAAC,GAAGszM,IAAI,CAACliN,MAAV,IAAoB,CAAxB,EAA2B,OAAO,KAAP;AAC3B,MAAIU,CAAC,GAAG,CAAR;AAAA,MACIkO,CADJ;AAAA,MAEI40M,IAAI,GAAGtB,IAAI,CAACtzM,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBszM,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAjB,GAA8BA,IAAI,CAACtzM,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBszM,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAF1D;;AAGA,SAAO,EAAExhN,CAAF,GAAMkO,CAAb,EAAgB40M,IAAI,IAAItB,IAAI,CAACxhN,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBwhN,IAAI,CAACxhN,CAAD,CAAJ,CAAQ,CAAR,CAAjB,GAA8BwhN,IAAI,CAACxhN,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBwhN,IAAI,CAACxhN,CAAD,CAAJ,CAAQ,CAAR,CAAvD;;AAChB,SAAO8iN,IAAI,IAAI,CAAf;AACD;;;;;;;;;ACPc,kBAAStB,IAAT,EAAeD,KAAf,EAAsB;AACnC,MAAIp7M,CAAC,GAAGo7M,KAAK,CAAC,CAAD,CAAb;AAAA,MACI78L,CAAC,GAAG68L,KAAK,CAAC,CAAD,CADb;AAAA,MAEIsxD,QAAQ,GAAG,KAFf;;AAGA,OAAK,IAAI7yQ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGszM,IAAI,CAACliN,MAApB,EAA4B2K,CAAC,GAAGiE,CAAC,GAAG,CAAzC,EAA4ClO,CAAC,GAAGkO,CAAhD,EAAmDjE,CAAC,GAAGjK,CAAC,EAAxD,EAA4D;AAC1D,QAAIg9O,EAAE,GAAGx7B,IAAI,CAACxhN,CAAD,CAAb;AAAA,QAAkB4xS,EAAE,GAAG50D,EAAE,CAAC,CAAD,CAAzB;AAAA,QAA8B0mE,EAAE,GAAG1mE,EAAE,CAAC,CAAD,CAArC;AAAA,QACI2mE,EAAE,GAAGniG,IAAI,CAACv3M,CAAD,CADb;AAAA,QACkB25S,EAAE,GAAGD,EAAE,CAAC,CAAD,CADzB;AAAA,QAC8BE,EAAE,GAAGF,EAAE,CAAC,CAAD,CADrC;AAEA,QAAMD,EAAE,GAAGh/R,CAAN,GAAYm/R,EAAE,GAAGn/R,CAAlB,IAA0Bve,CAAC,GAAG,CAACy9S,EAAE,GAAGhS,EAAN,KAAaltR,CAAC,GAAGg/R,EAAjB,KAAwBG,EAAE,GAAGH,EAA7B,IAAmC9R,EAArE,EAA0E/+B,QAAQ,GAAG,CAACA,QAAZ;AAC3E;;AACD,SAAOA,QAAP;AACD;;;;;;;;;ACVD;;AACA;;AACA;;AACA;;;;AAEe,kBAASxrE,MAAT,EAAiB2hG,UAAjB,EAA6B;AAC1C,MAAIpgH,MAAM,GAAGogH,UAAU,CAACpgH,MAAxB;AAAA,MAAgCixD,OAAhC;AACA,MAAI,CAACjxD,MAAL,EAAa,MAAM,IAAIrqL,KAAJ,CAAU,oBAAV,CAAN;;AACb,UAAQ8oM,MAAM,IAAIA,MAAM,CAACpnL,IAAzB;AACE,SAAK,SAAL;AAAgB45N,MAAAA,OAAO,GAAGiqE,cAAV;AAA0B;;AAC1C,SAAK,mBAAL;AAA0BjqE,MAAAA,OAAO,GAAGkqE,wBAAV;AAAoC;;AAC9D;AAASlqE,MAAAA,OAAO,GAAGmqE,eAAV;AAA2B;AAHtC;;AAKA,SAAOnqE,OAAO,CAACxyC,MAAD,EAASze,MAAT,CAAd;AACD;;AAED,SAASm7H,wBAAT,CAAkCp4R,CAAlC,EAAqCi9J,MAArC,EAA6C;AAC3C,SAAO;AACL3oK,IAAAA,IAAI,EAAE,mBADD;AAEL4vK,IAAAA,QAAQ,EAAElkK,CAAC,CAACkkK,QAAF,CAAWpmL,GAAX,CAAe,UAASkC,CAAT,EAAY;AACnC,aAAOm4S,cAAc,CAACn4S,CAAD,EAAIi9K,MAAJ,CAArB;AACD,KAFS;AAFL,GAAP;AAMD;;AAED,SAASk7H,cAAT,CAAwBn4R,CAAxB,EAA2Bi9J,MAA3B,EAAmC;AACjC,SAAO;AACL3oK,IAAAA,IAAI,EAAE,SADD;AAELhN,IAAAA,EAAE,EAAE0Y,CAAC,CAAC1Y,EAFD;AAGLkuM,IAAAA,UAAU,EAAEx1L,CAAC,CAACw1L,UAHT;AAILC,IAAAA,QAAQ,EAAE4iG,eAAe,CAACr4R,CAAC,CAACy1L,QAAH,EAAax4B,MAAb;AAJpB,GAAP;AAMD;;AAED,SAASq7H,yBAAT,CAAmCt4R,CAAnC,EAAsCi9J,MAAtC,EAA8C;AAC5C,SAAO;AACL3oK,IAAAA,IAAI,EAAE,oBADD;AAEL2gM,IAAAA,UAAU,EAAEj1L,CAAC,CAACi1L,UAAF,CAAan3M,GAAb,CAAiB,UAASkiB,CAAT,EAAY;AACvC,aAAOq4R,eAAe,CAACr4R,CAAD,EAAIi9J,MAAJ,CAAtB;AACD,KAFW;AAFP,GAAP;AAMD;;AAED,SAASo7H,eAAT,CAAyBr4R,CAAzB,EAA4Bi9J,MAA5B,EAAoC;AAClC,MAAI,CAACj9J,CAAL,EAAQ,OAAO,IAAP;AACR,MAAIA,CAAC,CAAC1L,IAAF,KAAW,oBAAf,EAAqC,OAAOgkS,yBAAyB,CAACt4R,CAAD,EAAIi9J,MAAJ,CAAhC;AACrC,MAAIo6G,IAAJ;;AACA,UAAQr3Q,CAAC,CAAC1L,IAAV;AACE,SAAK,OAAL;AAAc+iR,MAAAA,IAAI,GAAGkhB,SAAP;AAAkB;;AAChC,SAAK,YAAL;AAAmBlhB,MAAAA,IAAI,GAAGkhB,SAAP;AAAkB;;AACrC,SAAK,YAAL;AAAmBlhB,MAAAA,IAAI,GAAGmhB,QAAP;AAAiB;;AACpC,SAAK,iBAAL;AAAwBnhB,MAAAA,IAAI,GAAGmhB,QAAP;AAAiB;;AACzC,SAAK,SAAL;AAAgBnhB,MAAAA,IAAI,GAAGohB,WAAP;AAAoB;;AACpC,SAAK,cAAL;AAAqBphB,MAAAA,IAAI,GAAGohB,WAAP;AAAoB;;AACzC,SAAK,QAAL;AAAephB,MAAAA,IAAI,GAAGohB,WAAP;AAAoB;;AACnC;AAAS,aAAO,IAAP;AARX;;AAUA,wBAAUz4R,CAAV,EAAai9J,MAAM,CAACo6G,IAAD,CAAnB;AACA,SAAOA,IAAI,CAAC99R,MAAL,EAAP;AACD;;AAED,IAAIo8M,MAAM,GAAG,EAAb;AAAA,IACI5vM,KAAK,GAAG,EADZ;AAGA,IAAIwyS,SAAS,GAAG;AACd3iG,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB48L,IAAAA,MAAM,CAACrhN,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD,GAHa;AAIdxf,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAIA,MAAM,GAAG,CAACo8M,MAAM,CAAChiN,MAAR,GAAiB,IAAjB,GACPgiN,MAAM,CAAChiN,MAAP,GAAgB,CAAhB,GAAoB;AAAC2gB,MAAAA,IAAI,EAAE,OAAP;AAAgB4gM,MAAAA,WAAW,EAAES,MAAM,CAAC,CAAD;AAAnC,KAApB,GACA;AAACrhM,MAAAA,IAAI,EAAE,YAAP;AAAqB4gM,MAAAA,WAAW,EAAES;AAAlC,KAFN;AAGAA,IAAAA,MAAM,GAAG,EAAT;AACA,WAAOp8M,MAAP;AACD;AAVa,CAAhB;AAaA,IAAIi/S,QAAQ,GAAG;AACbzhE,EAAAA,SAAS,EAAE9hP,aADE;AAEb2gN,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB48L,IAAAA,MAAM,CAACrhN,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD,GAJY;AAKbk+N,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIthC,MAAM,CAAChiN,MAAX,EAAmBoS,KAAK,CAACzR,IAAN,CAAWqhN,MAAX,GAAoBA,MAAM,GAAG,EAA7B;AACpB,GAPY;AAQbp8M,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAIA,MAAM,GAAG,CAACwM,KAAK,CAACpS,MAAP,GAAgB,IAAhB,GACPoS,KAAK,CAACpS,MAAN,GAAe,CAAf,GAAmB;AAAC2gB,MAAAA,IAAI,EAAE,YAAP;AAAqB4gM,MAAAA,WAAW,EAAEnvM,KAAK,CAAC,CAAD;AAAvC,KAAnB,GACA;AAACuO,MAAAA,IAAI,EAAE,iBAAP;AAA0B4gM,MAAAA,WAAW,EAAEnvM;AAAvC,KAFN;AAGAA,IAAAA,KAAK,GAAG,EAAR;AACA,WAAOxM,MAAP;AACD;AAdY,CAAf;AAiBA,IAAIk/S,WAAW,GAAG;AAChBloB,EAAAA,YAAY,EAAEt7R,aADE;AAEhB8hP,EAAAA,SAAS,EAAE9hP,aAFK;AAGhB2gN,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB48L,IAAAA,MAAM,CAACrhN,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD,GALe;AAMhBk+N,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI10O,CAAC,GAAGozM,MAAM,CAAChiN,MAAf;;AACA,QAAI4O,CAAJ,EAAO;AACL,SAAGozM,MAAM,CAACrhN,IAAP,CAAYqhN,MAAM,CAAC,CAAD,CAAN,CAAUj4M,KAAV,EAAZ,EAAH,QAA0C,EAAE6E,CAAF,GAAM,CAAhD;;AACAwD,MAAAA,KAAK,CAACzR,IAAN,CAAWqhN,MAAX,GAAoBA,MAAM,GAAG,EAA7B;AACD;AACF,GAZe;AAahB66E,EAAAA,UAAU,EAAEv7R,aAbI;AAchBsE,EAAAA,MAAM,EAAE,YAAW;AACjB,QAAI,CAACwM,KAAK,CAACpS,MAAX,EAAmB,OAAO,IAAP;AACnB,QAAI2jN,QAAQ,GAAG,EAAf;AAAA,QACIohG,KAAK,GAAG,EADZ,CAFiB,CAKjB;;AACA3yS,IAAAA,KAAK,CAAC5N,OAAN,CAAc,UAAS09M,IAAT,EAAe;AAC3B,UAAI,wBAAUA,IAAV,CAAJ,EAAqByB,QAAQ,CAAChjN,IAAT,CAAc,CAACuhN,IAAD,CAAd,EAArB,KACK6iG,KAAK,CAACpkT,IAAN,CAAWuhN,IAAX;AACN,KAHD;AAKA6iG,IAAAA,KAAK,CAACvgT,OAAN,CAAc,UAASwgT,IAAT,EAAe;AAC3B,UAAI/iG,KAAK,GAAG+iG,IAAI,CAAC,CAAD,CAAhB;AACArhG,MAAAA,QAAQ,CAACjiM,IAAT,CAAc,UAASygM,OAAT,EAAkB;AAC9B,YAAI,uBAASA,OAAO,CAAC,CAAD,CAAhB,EAAqBF,KAArB,CAAJ,EAAiC;AAC/BE,UAAAA,OAAO,CAACxhN,IAAR,CAAaqkT,IAAb;AACA,iBAAO,IAAP;AACD;AACF,OALD,KAKMrhG,QAAQ,CAAChjN,IAAT,CAAc,CAACqkT,IAAD,CAAd,CALN;AAMD,KARD;AAUA5yS,IAAAA,KAAK,GAAG,EAAR;AAEA,WAAO,CAACuxM,QAAQ,CAAC3jN,MAAV,GAAmB,IAAnB,GACD2jN,QAAQ,CAAC3jN,MAAT,GAAkB,CAAlB,GAAsB;AAAC2gB,MAAAA,IAAI,EAAE,cAAP;AAAuB4gM,MAAAA,WAAW,EAAEoC;AAApC,KAAtB,GACA;AAAChjM,MAAAA,IAAI,EAAE,SAAP;AAAkB4gM,MAAAA,WAAW,EAAEoC,QAAQ,CAAC,CAAD;AAAvC,KAFN;AAGD;AAxCe,CAAlB;;;;;;;;;AC9FA;;AACA;;AAEe,kBAAS42B,OAAT,EAAkB;AAC/B,MAAI/tN,EAAE,GAAG+tN,OAAO,CAACiF,YAAD,EAAS,CAAT,CAAP,CAAmB,CAAnB,IAAwBjF,OAAO,CAAC,CAACiF,YAAF,EAAU,CAAV,CAAP,CAAoB,CAApB,CAAjC;;AAEA,WAASylE,kBAAT,CAA4BtnB,MAA5B,EAAoCC,GAApC,EAAyC;AACvC,QAAIx5R,CAAC,GAAG,eAAIu5R,MAAJ,IAAcn+C,YAAtB;AAAA,QACIx6M,CAAC,GAAGu1M,OAAO,CAACn2O,CAAC,GAAGu5R,MAAH,GAAYA,MAAM,GAAG,CAAT,GAAaA,MAAM,GAAGjgD,QAAtB,GAA2BigD,MAAM,GAAGjgD,QAAlD,EAAsDkgD,GAAtD,CADf;AAAA,QAEI/2R,CAAC,GAAG,CAACm+B,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAT,IAAgBoqQ,aAFxB;AAAA,QAGIhqR,CAAC,GAAG,CAAC4f,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAT,IAAgBoqQ,aAHxB;;AAIA,QAAIhrS,CAAJ,EAAO,OAAO,CAACyC,CAAD,EAAIue,CAAJ,CAAP;AACP,QAAI7X,CAAC,GAAGif,EAAE,GAAG4iR,aAAb;AAAA,QACIlrS,CAAC,GAAG2C,CAAC,GAAG,CAAJ,GAAQue,CAAC,GAAG,CAAZ,GAAgB,CAAC,CAAjB,GAAqB,CAD7B;AAEA,WAAO,CAAClhB,CAAC,GAAG2C,CAAJ,GAAQ,gBAAKue,CAAL,IAAU7X,CAAnB,EAAsBrJ,CAAC,GAAGkhB,CAAJ,GAAQ,gBAAKve,CAAL,IAAU0G,CAAxC,CAAP;AACD;;AAED,MAAIgtO,OAAO,CAAC6jB,MAAZ,EAAoB6mD,kBAAkB,CAAC7mD,MAAnB,GAA4B,UAASr9C,EAAT,EAAaC,EAAb,EAAiB;AAC/D,QAAIn6M,CAAC,GAAG,CAACk6M,EAAE,GAAGC,EAAN,IAAYouF,aAApB;AAAA,QACIhqR,CAAC,GAAG,CAAC47L,EAAE,GAAGD,EAAN,IAAYquF,aADpB;AAAA,QAEIhrS,CAAC,GAAG,eAAIyC,CAAJ,IAAS,MAAM2lB,EAAf,IAAqB,eAAIpH,CAAJ,IAAS,MAAMoH,EAF5C;;AAIA,QAAI,CAACpoB,CAAL,EAAQ;AACN,UAAImJ,CAAC,GAAGif,EAAE,GAAG4iR,aAAb;AAAA,UACIlrS,CAAC,GAAG2C,CAAC,GAAG,CAAJ,GAAQue,CAAC,GAAG,CAAZ,GAAgB,CAAC,CAAjB,GAAqB,CAD7B;AAAA,UAEI+tF,EAAE,GAAG,CAACjvG,CAAD,GAAK68M,EAAL,GAAU,CAAC37L,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAAC,CAAd,IAAmB7X,CAFtC;AAAA,UAGI2lG,EAAE,GAAG,CAAChvG,CAAD,GAAK88M,EAAL,GAAU,CAACn6M,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAAC,CAAd,IAAmB0G,CAHtC;AAIA1G,MAAAA,CAAC,GAAG,CAAC,CAACssG,EAAD,GAAMD,EAAP,IAAak8L,aAAjB;AACAhqR,MAAAA,CAAC,GAAG,CAAC+tF,EAAE,GAAGD,EAAN,IAAYk8L,aAAhB;AACD;;AAED,QAAIpqQ,CAAC,GAAGu1M,OAAO,CAAC6jB,MAAR,CAAev3P,CAAf,EAAkBue,CAAlB,CAAR;AACA,QAAI,CAAChhB,CAAL,EAAQ4gC,CAAC,CAAC,CAAD,CAAD,IAAQn+B,CAAC,GAAG,CAAJ,GAAQ62O,QAAR,GAAa,CAACA,QAAtB;AACR,WAAO14M,CAAP;AACD,GAjBmB;AAmBpB,SAAO,0BAAWigR,kBAAX,EACFhqD,MADE,CACK,CAAC,CAAC,EAAF,EAAM,CAAC,EAAP,EAAW,EAAX,CADL,EAEFqxC,SAFE,CAEQ,MAAM,IAFd,CAAP;AAGD;;;;;;;;;ACvCD;;AACA;;;;AAEe,oBAAW;AACxB,SAAO,oBAAYwN,yBAAZ,EACFvjS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;ACND;;AACA;;;;AAEe,oBAAW;AACxB,SAAO,oBAAYilS,eAAZ,EACFjlS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;ACNc,kBAASmV,KAAT,EAAgBw5R,MAAhB,EAAwB;AACrC,MAAI,EAAE,MAAMA,MAAM,GAAG,CAACA,MAAhB,KAA2BA,MAAM,IAAI,EAAvC,CAAJ,EAAgD,MAAM,IAAIjmT,KAAJ,CAAU,gBAAV,CAAN;;AAEhD,WAASwlN,aAAT,CAAuB/4L,KAAvB,EAA8B;AAC5B,QAAI9c,CAAC,GAAG8c,KAAK,CAAC1rB,MAAd;AAAA,QAAsBU,CAAC,GAAG,CAA1B;AAAA,QAA6B0pB,MAAM,GAAG,IAAI5pB,KAAJ,CAAUoO,CAAV,CAAtC;AACAwb,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,CAACsB,KAAK,CAAC,CAAD,CAAL,CAAS/Y,OAAT,CAAiBuyS,MAAjB,CAAb;AACA96R,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,CAACsB,KAAK,CAAC,CAAD,CAAL,CAAS/Y,OAAT,CAAiBuyS,MAAjB,CAAb;;AACA,WAAOxkT,CAAC,GAAGkO,CAAX,EAAcwb,MAAM,CAAC1pB,CAAD,CAAN,GAAYgrB,KAAK,CAAChrB,CAAD,CAAjB,EAAsB,EAAEA,CAAxB;;AACd,WAAO0pB,MAAP;AACD;;AAED,WAAS+6R,cAAT,CAAwBz5R,KAAxB,EAA+B;AAC7B,WAAOA,KAAK,CAACvhB,GAAN,CAAUs6M,aAAV,CAAP;AACD;;AAED,WAAS2gG,0BAAT,CAAoC15R,KAApC,EAA2C;AACzC,QAAIw3Q,MAAM,GAAGz+E,aAAa,CAAC/4L,KAAK,CAAC,CAAD,CAAN,CAA1B;AACA,QAAItB,MAAM,GAAG,CAAC84Q,MAAD,CAAb;;AACA,SAAK,IAAIxiS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgrB,KAAK,CAAC1rB,MAA1B,EAAkCU,CAAC,EAAnC,EAAuC;AACrC,UAAIuhN,KAAK,GAAGwC,aAAa,CAAC/4L,KAAK,CAAChrB,CAAD,CAAN,CAAzB;;AACA,UAAIuhN,KAAK,CAACjiN,MAAN,GAAe,CAAf,IAAoBiiN,KAAK,CAAC,CAAD,CAAL,IAAYihF,MAAM,CAAC,CAAD,CAAtC,IAA6CjhF,KAAK,CAAC,CAAD,CAAL,IAAYihF,MAAM,CAAC,CAAD,CAAnE,EAAwE;AACtE94Q,QAAAA,MAAM,CAACzpB,IAAP,CAAYshN,KAAZ;AACAihF,QAAAA,MAAM,GAAGjhF,KAAT;AACD;AACF;;AACD,QAAI73L,MAAM,CAACpqB,MAAP,KAAkB,CAAlB,IAAuB0rB,KAAK,CAAC1rB,MAAN,GAAe,CAA1C,EAA6C;AAC3CoqB,MAAAA,MAAM,CAACzpB,IAAP,CAAY8jN,aAAa,CAAC/4L,KAAK,CAACA,KAAK,CAAC1rB,MAAN,GAAe,CAAhB,CAAN,CAAzB;AACD;;AACD,WAAOoqB,MAAP;AACD;;AAED,WAASi7R,eAAT,CAAyB35R,KAAzB,EAAgC;AAC9B,WAAOA,KAAK,CAACvhB,GAAN,CAAUi7S,0BAAV,CAAP;AACD;;AAED,WAAS1gG,gBAAT,CAA0Bh5L,KAA1B,EAAiC;AAC/B,QAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOA,KAAP;AACnB,QAAItB,MAAJ;;AACA,YAAQsB,KAAK,CAAC/K,IAAd;AACE,WAAK,oBAAL;AAA2ByJ,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,oBAAP;AAA6B2gM,UAAAA,UAAU,EAAE51L,KAAK,CAAC41L,UAAN,CAAiBn3M,GAAjB,CAAqBu6M,gBAArB;AAAzC,SAAT;AAA2F;;AACtH,WAAK,OAAL;AAAct6L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,OAAP;AAAgB4gM,UAAAA,WAAW,EAAEkD,aAAa,CAAC/4L,KAAK,CAAC61L,WAAP;AAA1C,SAAT;AAAyE;;AACvF,WAAK,YAAL;AAAmBn3L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE+K,KAAK,CAAC/K,IAAb;AAAmB4gM,UAAAA,WAAW,EAAE4jG,cAAc,CAACz5R,KAAK,CAAC61L,WAAP;AAA9C,SAAT;AAA6E;;AAChG,WAAK,YAAL;AAAmBn3L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE+K,KAAK,CAAC/K,IAAb;AAAmB4gM,UAAAA,WAAW,EAAE6jG,0BAA0B,CAAC15R,KAAK,CAAC61L,WAAP;AAA1D,SAAT;AAAyF;;AAC5G,WAAK,iBAAL;AAAwB,WAAK,SAAL;AAAgBn3L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE+K,KAAK,CAAC/K,IAAb;AAAmB4gM,UAAAA,WAAW,EAAE8jG,eAAe,CAAC35R,KAAK,CAAC61L,WAAP;AAA/C,SAAT;AAA8E;;AACtH,WAAK,cAAL;AAAqBn3L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,cAAP;AAAuB4gM,UAAAA,WAAW,EAAE71L,KAAK,CAAC61L,WAAN,CAAkBp3M,GAAlB,CAAsBk7S,eAAtB;AAApC,SAAT;AAAsF;;AAC3G;AAAS,eAAO35R,KAAP;AAPX;;AASA,QAAIA,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,WAAOx3L,MAAP;AACD;;AAED,WAASk7R,eAAT,CAAyB55R,KAAzB,EAAgC;AAC9B,QAAItB,MAAM,GAAG;AAACzJ,MAAAA,IAAI,EAAE,SAAP;AAAkBkhM,MAAAA,UAAU,EAAEn2L,KAAK,CAACm2L,UAApC;AAAgDC,MAAAA,QAAQ,EAAE4C,gBAAgB,CAACh5L,KAAK,CAACo2L,QAAP;AAA1E,KAAb;AACA,QAAIp2L,KAAK,CAAC/X,EAAN,IAAY,IAAhB,EAAsByW,MAAM,CAACzW,EAAP,GAAY+X,KAAK,CAAC/X,EAAlB;AACtB,QAAI+X,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,WAAOx3L,MAAP;AACD;;AAED,MAAIsB,KAAK,IAAI,IAAb,EAAmB,QAAQA,KAAK,CAAC/K,IAAd;AACjB,SAAK,SAAL;AAAgB,aAAO2kS,eAAe,CAAC55R,KAAD,CAAtB;;AAChB,SAAK,mBAAL;AAA0B;AACxB,YAAItB,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,mBAAP;AAA4B4vK,UAAAA,QAAQ,EAAE7kK,KAAK,CAAC6kK,QAAN,CAAepmL,GAAf,CAAmBm7S,eAAnB;AAAtC,SAAb;AACA,YAAI55R,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,eAAOx3L,MAAP;AACD;;AACD;AAAS,aAAOs6L,gBAAgB,CAACh5L,KAAD,CAAvB;AAPQ;AAUnB,SAAOA,KAAP;AACD;;;;;;;;;;ACrED;;AACA;;;;AAEO,SAAS65R,uBAAT,CAAiC7mB,IAAjC,EAAuC;AAC5C,MAAItB,OAAO,GAAG,eAAIsB,IAAJ,CAAd;;AAEA,WAASyD,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI/kC,CAAC,GAAGukC,OAAO,GAAG,eAAIO,MAAM,GAAGP,OAAT,GAAmB,CAAvB,IAA4BA,OAA/B,GAAyCO,MAAM,GAAG,CAAjE;AACA,QAAI,CAACC,GAAL,EAAU,OAAO,CAAC,IAAI/kC,CAAL,EAAQ,CAAC6lC,IAAT,CAAP;AACV,QAAI1lC,CAAC,GAAG,IAAI,gBAAKH,CAAC,GAAG,eAAI+kC,GAAJ,CAAT,CAAZ;AAAA,QACI4nB,MAAM,GAAG,IAAI,eAAI5nB,GAAJ,CADjB;AAEA,WAAO,CACL,eAAI5kC,CAAJ,IAASwsD,MADJ,EAEL5nB,GAAG,GAAG,CAAC,IAAI,eAAI5kC,CAAJ,CAAL,IAAewsD,MAArB,GAA8B9mB,IAFzB,CAAP;AAID,GAZ2C,CAc5C;;;AACAyD,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAI,eAAIA,CAAC,IAAIs5Q,IAAT,IAAiB3gN,aAArB,EAA8B,OAAO,CAACq/M,OAAO,GAAG,IAAI,gBAAKA,OAAO,GAAGv2R,CAAV,GAAc,CAAnB,CAAJ,GAA4Bu2R,OAA/B,GAAyCv2R,CAAjD,EAAoD,CAApD,CAAP;AAC9B,QAAImX,CAAC,GAAGnX,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAApB;AAAA,QACIw4Q,GAAG,GAAG,CADV;AAAA,QAEIl9R,CAAC,GAAG,EAFR;AAAA,QAEY21F,KAFZ;;AAGA,OAAG;AACD,UAAI87M,MAAM,GAAG,eAAIvU,GAAJ,CAAb;AAAA,UACIwc,MAAM,GAAG,IAAI,eAAIxc,GAAJ,CADjB;AAAA,UAEIjzR,CAAC,GAAGqT,CAAC,GAAG,IAAIoH,CAAJ,GAAQw4Q,GAAZ,GAAkBA,GAAG,GAAGA,GAFhC;AAGAA,MAAAA,GAAG,IAAIvnM,KAAK,GAAG,CAAC87M,MAAM,GAAGxnS,CAAT,GAAa,KAAKizR,GAAG,GAAGx4Q,CAAX,CAAd,KAAgC,IAAIza,CAAC,GAAGyvS,MAAJ,GAAaA,MAAjB,GAA0B,KAAKxc,GAAG,GAAGx4Q,CAAX,IAAgB+sR,MAA1E,CAAf;AACD,KALD,QAKS,eAAI97M,KAAJ,IAAatY,aAAb,IAAwB,EAAEr9E,CAAF,GAAM,CALvC;;AAMA,QAAIs4P,CAAC,GAAGnyP,CAAC,IAAIsrS,MAAM,GAAG,eAAIvU,GAAJ,CAAb,CAAT;AAAA,QACI/kC,CAAC,GAAG,eAAI,eAAIzzO,CAAJ,IAAS,eAAIw4Q,GAAG,GAAG,IAAIuU,MAAd,CAAT,GAAiC,gBAAKn5C,CAAL,IAAU,GAA3C,GAAiD,gBAAKA,CAAL,IAAU,GAAV,GAAgBtb,WAAK,CAA1E,IAA+E,eAAIkgD,GAAJ,CADvF;AAEA,WAAO,CACLR,OAAO,GAAG,IAAI,gBAAKA,OAAO,GAAGvkC,CAAf,CAAJ,GAAwBukC,OAA3B,GAAqC,IAAIvkC,CAD3C,EAEL+kC,GAFK,CAAP;AAID,GAjBD;;AAmBA,SAAOuE,OAAP;AACD;;AAEc,oBAAW;AACxB,SAAO,uBAAUojB,uBAAV,EACFhvS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC3CD;;AACA;;AAEA,IAAIqhP,CAAC,GAAG,CACN,CAAC,MAAD,EAAS,CAAC,KAAV,CADM,EAEN,CAAC,MAAD,EAAS,MAAT,CAFM,EAGN,CAAC,MAAD,EAAS,MAAT,CAHM,EAIN,CAAC,MAAD,EAAS,MAAT,CAJM,EAKN,CAAC,MAAD,EAAS,MAAT,CALM,EAMN,CAAC,MAAD,EAAS,MAAT,CANM,EAON,CAAC,MAAD,EAAS,MAAT,CAPM,EAQN,CAAC,MAAD,EAAS,MAAT,CARM,EASN,CAAC,MAAD,EAAS,MAAT,CATM,EAUN,CAAC,MAAD,EAAS,MAAT,CAVM,EAWN,CAAC,MAAD,EAAS,MAAT,CAXM,EAYN,CAAC,MAAD,EAAS,MAAT,CAZM,EAaN,CAAC,MAAD,EAAS,MAAT,CAbM,EAcN,CAAC,MAAD,EAAS,MAAT,CAdM,EAeN,CAAC,MAAD,EAAS,MAAT,CAfM,EAgBN,CAAC,MAAD,EAAS,MAAT,CAhBM,EAiBN,CAAC,MAAD,EAAS,MAAT,CAjBM,EAkBN,CAAC,MAAD,EAAS,MAAT,CAlBM,EAmBN,CAAC,MAAD,EAAS,MAAT,CAnBM,EAoBN,CAAC,MAAD,EAAS,MAAT,CApBM,CAAR;AAuBAA,CAAC,CAACpzP,OAAF,CAAU,UAAS+I,CAAT,EAAY;AACpBA,EAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ,MAAR;AACD,CAFD;;AAIO,SAASk4S,WAAT,CAAqB9nB,MAArB,EAA6BC,GAA7B,EAAkC;AACvC,MAAIl9R,CAAC,GAAG,eAAI,EAAJ,EAAQ,eAAIk9R,GAAJ,IAAW,EAAX,GAAgBlgD,QAAxB,CAAR;AAAA,MACIt8I,EAAE,GAAG,iBAAM1gG,CAAN,CADT;AAAA,MAEIglT,EAAE,GAAGhlT,CAAC,GAAG0gG,EAFb;AAAA,MAGI/2F,EAAE,GAAG,CAAC2T,CAAC,GAAG45O,CAAC,CAACx2J,EAAD,CAAN,EAAY,CAAZ,CAHT;AAAA,MAIIshJ,EAAE,GAAG1kO,CAAC,CAAC,CAAD,CAJV;AAAA,MAKI2kO,EAAE,GAAG,CAAC3kO,CAAC,GAAG45O,CAAC,CAAC,EAAEx2J,EAAH,CAAN,EAAc,CAAd,CALT;AAAA,MAMIwhJ,EAAE,GAAG5kO,CAAC,CAAC,CAAD,CANV;AAAA,MAOI2jO,EAAE,GAAG,CAAC3jO,CAAC,GAAG45O,CAAC,CAAC,eAAI,EAAJ,EAAQ,EAAEx2J,EAAV,CAAD,CAAN,EAAuB,CAAvB,CAPT;AAAA,MAQIwgJ,EAAE,GAAG5jO,CAAC,CAAC,CAAD,CARV;AAAA,MASIA,CATJ;AAUA,SAAO,CACL2/Q,MAAM,IAAIh7C,EAAE,GAAG+iE,EAAE,IAAI/jE,EAAE,GAAGt3O,EAAT,CAAF,GAAiB,CAAtB,GAA0Bq7S,EAAE,GAAGA,EAAL,IAAW/jE,EAAE,GAAG,IAAIgB,EAAT,GAAct4O,EAAzB,IAA+B,CAA7D,CADD,EAEL,CAACuzR,GAAG,GAAG,CAAN,GAAUp+C,YAAV,GAAmB,CAACA,YAArB,KAAgCoD,EAAE,GAAG8iE,EAAE,IAAI9jE,EAAE,GAAGc,EAAT,CAAF,GAAiB,CAAtB,GAA0BgjE,EAAE,GAAGA,EAAL,IAAW9jE,EAAE,GAAG,IAAIgB,EAAT,GAAcF,EAAzB,IAA+B,CAAzF,CAFK,CAAP;AAID;;AAED+iE,WAAW,CAACrnD,MAAZ,GAAqB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAClC,MAAIugS,EAAE,GAAGvgS,CAAC,GAAGo6N,YAAb;AAAA,MACIo+C,GAAG,GAAG+nB,EAAE,GAAG,EADf;AAAA,MAEIjlT,CAAC,GAAG,eAAI,EAAJ,EAAQ,eAAIk9R,GAAG,GAAG,CAAV,CAAR,CAFR;AAAA,MAGIx8L,EAAE,GAAG,eAAI,CAAJ,EAAO,iBAAM1gG,CAAN,CAAP,CAHT;;AAIA,KAAG;AACD,QAAIgiP,EAAE,GAAGkV,CAAC,CAACx2J,EAAD,CAAD,CAAM,CAAN,CAAT;AAAA,QACIwhJ,EAAE,GAAGgV,CAAC,CAACx2J,EAAE,GAAG,CAAN,CAAD,CAAU,CAAV,CADT;AAAA,QAEIwgJ,EAAE,GAAGgW,CAAC,CAAC,eAAI,EAAJ,EAAQx2J,EAAE,GAAG,CAAb,CAAD,CAAD,CAAmB,CAAnB,CAFT;AAAA,QAGI1hB,CAAC,GAAGkiK,EAAE,GAAGc,EAHb;AAAA,QAII9vO,CAAC,GAAGgvO,EAAE,GAAG,IAAIgB,EAAT,GAAcF,EAJtB;AAAA,QAKIt+O,CAAC,GAAG,KAAK,eAAIuhT,EAAJ,IAAU/iE,EAAf,IAAqBljK,CAL7B;AAAA,QAMIvyE,CAAC,GAAGyF,CAAC,GAAG8sE,CANZ;AAAA,QAOIgmO,EAAE,GAAGthT,CAAC,IAAI,IAAI+I,CAAC,GAAG/I,CAAJ,IAAS,IAAI,IAAI+I,CAAJ,GAAQ/I,CAArB,CAAR,CAPV;;AAQA,QAAIshT,EAAE,IAAI,CAAN,IAAWtkN,EAAE,KAAK,CAAtB,EAAyB;AACvBw8L,MAAAA,GAAG,GAAG,CAACx4Q,CAAC,IAAI,CAAL,GAAS,CAAT,GAAa,CAAC,CAAf,KAAqBsgS,EAAE,GAAGhlT,CAA1B,CAAN;AACA,UAAIiK,CAAC,GAAG,EAAR;AAAA,UAAY0rF,KAAZ;;AACA,SAAG;AACD31F,QAAAA,CAAC,GAAG,eAAI,EAAJ,EAAQ,eAAIk9R,GAAJ,IAAW,CAAnB,CAAJ;AACAx8L,QAAAA,EAAE,GAAG,iBAAM1gG,CAAN,CAAL;AACAglT,QAAAA,EAAE,GAAGhlT,CAAC,GAAG0gG,EAAT;AACAshJ,QAAAA,EAAE,GAAGkV,CAAC,CAACx2J,EAAD,CAAD,CAAM,CAAN,CAAL;AACAwhJ,QAAAA,EAAE,GAAGgV,CAAC,CAACx2J,EAAE,GAAG,CAAN,CAAD,CAAU,CAAV,CAAL;AACAwgJ,QAAAA,EAAE,GAAGgW,CAAC,CAAC,eAAI,EAAJ,EAAQx2J,EAAE,GAAG,CAAb,CAAD,CAAD,CAAmB,CAAnB,CAAL;AACAw8L,QAAAA,GAAG,IAAI,CAACvnM,KAAK,GAAG,CAACjxE,CAAC,IAAI,CAAL,GAASo6N,YAAT,GAAkB,CAACA,YAApB,KAA+BoD,EAAE,GAAG8iE,EAAE,IAAI9jE,EAAE,GAAGc,EAAT,CAAF,GAAiB,CAAtB,GAA0BgjE,EAAE,GAAGA,EAAL,IAAW9jE,EAAE,GAAG,IAAIgB,EAAT,GAAcF,EAAzB,IAA+B,CAAxF,IAA6Ft9N,CAAtG,IAA2GuyO,aAAlH;AACD,OARD,QAQS,eAAIthK,KAAJ,IAAaomK,cAAb,IAAyB,EAAE9xP,CAAF,GAAM,CARxC;;AASA;AACD;AACF,GAvBD,QAuBS,EAAEy2F,EAAF,IAAQ,CAvBjB;;AAwBA,MAAI/2F,EAAE,GAAGutP,CAAC,CAACx2J,EAAD,CAAD,CAAM,CAAN,CAAT;AAAA,MACIuhJ,EAAE,GAAGiV,CAAC,CAACx2J,EAAE,GAAG,CAAN,CAAD,CAAU,CAAV,CADT;AAAA,MAEIugJ,EAAE,GAAGiW,CAAC,CAAC,eAAI,EAAJ,EAAQx2J,EAAE,GAAG,CAAb,CAAD,CAAD,CAAmB,CAAnB,CAFT;AAGA,SAAO,CACLv6F,CAAC,IAAI87O,EAAE,GAAG+iE,EAAE,IAAI/jE,EAAE,GAAGt3O,EAAT,CAAF,GAAiB,CAAtB,GAA0Bq7S,EAAE,GAAGA,EAAL,IAAW/jE,EAAE,GAAG,IAAIgB,EAAT,GAAct4O,EAAzB,IAA+B,CAA7D,CADI,EAELuzR,GAAG,GAAGlmC,aAFD,CAAP;AAID,CApCD;;AAsCe,oBAAW;AACxB,SAAO,0BAAW+tD,WAAX,EACFlvS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACxFD;;AACA;;AAEA,SAASqvS,oBAAT,CAA8BlkH,CAA9B,EAAiC;AAC/B,WAASygG,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,QACI5/Q,CAAC,GAAG,CAAC0jL,CAAC,GAAG,CAAL,KAAWA,CAAC,GAAGs8F,MAAM,GAAG,eAAIL,MAAJ,CAAxB,CADR;AAEA,WAAO,CACL3/Q,CAAC,GAAGggR,MAAJ,GAAa,eAAIL,MAAJ,CADR,EAEL3/Q,CAAC,GAAG,eAAI4/Q,GAAJ,CAFC,CAAP;AAID;;AAEDuE,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIu3O,IAAI,GAAG91P,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAvB;AAAA,QACIyqG,GAAG,GAAG,gBAAK8sI,IAAL,CADV;AAAA,QAEI8jD,IAAI,GAAG,CAAC/+G,CAAC,GAAG,gBAAK,IAAIi7D,IAAI,IAAIj7D,CAAC,GAAG,CAAR,CAAJ,IAAkBA,CAAC,GAAG,CAAtB,CAAT,CAAL,KAA4C,CAACA,CAAC,GAAG,CAAL,IAAU7xE,GAAV,GAAgBA,GAAG,IAAI6xE,CAAC,GAAG,CAAR,CAA/D,CAFX;AAGA,WAAO,CACL,iBAAM76L,CAAC,GAAG45S,IAAV,EAAgB5wL,GAAG,GAAG,gBAAK,IAAI4wL,IAAI,GAAGA,IAAhB,CAAtB,CADK,EAEL5wL,GAAG,GAAG,gBAAKzqG,CAAC,GAAGq7R,IAAJ,GAAW5wL,GAAhB,CAAH,GAA0B,CAFxB,CAAP;AAID,GARD;;AAUA,SAAOsyK,OAAP;AACD;;AAEM,SAAS0jB,YAAT,CAAsBnkH,CAAtB,EAAyBm7G,KAAzB,EAAgC;AACrC,MAAIrwC,QAAQ,GAAGo5C,oBAAoB,CAAClkH,CAAD,CAAnC;AACA,MAAI,CAACm7G,KAAL,EAAY,OAAOrwC,QAAP;AACZ,MAAIs5C,QAAQ,GAAG,eAAIjJ,KAAJ,CAAf;AAAA,MACIkJ,QAAQ,GAAG,eAAIlJ,KAAJ,CADf;;AAGA,WAAS1a,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIr8E,WAAW,GAAGirD,QAAQ,CAACmxB,MAAD,EAASC,GAAT,CAA1B;AAAA,QACIx4Q,CAAC,GAAGm8L,WAAW,CAAC,CAAD,CADnB;AAAA,QAEIs3C,CAAC,GAAGzzO,CAAC,GAAG2gS,QAAJ,IAAgBrkH,CAAC,GAAG,CAApB,IAAyBokH,QAFjC;AAGA,WAAO,CACLvkG,WAAW,CAAC,CAAD,CAAX,GAAiBukG,QAAjB,GAA4BjtD,CADvB,EAELzzO,CAAC,GAAGyzO,CAFC,CAAP;AAID;;AAEDspC,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIpH,CAAC,GAAG,CAAC0jL,CAAC,GAAG,CAAL,KAAWA,CAAC,GAAG,CAAJ,GAAQt8K,CAAC,GAAG2gS,QAAvB,CAAR;AACA,WAAOv5C,QAAQ,CAACpO,MAAT,CAAgBpgP,CAAC,GAAGnX,CAApB,EAAuBmX,CAAC,GAAGoH,CAAJ,GAAQ0gS,QAA/B,CAAP;AACD,GAHD;;AAKA,SAAO3jB,OAAP;AACD;;AAEc,oBAAW;AACxB,MAAI2G,QAAQ,GAAG,CAAf;AAAA,MACI+T,KAAK,GAAG,CADZ;AAAA,MAEI1kN,CAAC,GAAG,iCAAkB0tN,YAAlB,CAFR;AAAA,MAGI7gR,CAAC,GAAGmzD,CAAC,CAAC2wM,QAAD,EAAW+T,KAAX,CAHT,CADwB,CAMxB;;AACA73Q,EAAAA,CAAC,CAAC8jQ,QAAF,GAAa,UAASzhR,CAAT,EAAY;AACvB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO8oS,QAAP;AACvB,WAAO3wM,CAAC,CAAC2wM,QAAQ,GAAG,CAACzhR,CAAb,EAAgBw1R,KAAhB,CAAR;AACD,GAHD;;AAKA73Q,EAAAA,CAAC,CAACghR,IAAF,GAAS,UAAS3+R,CAAT,EAAY;AACnB,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO68S,KAAK,GAAGllD,aAAf;AACvB,WAAOx/J,CAAC,CAAC2wM,QAAD,EAAW+T,KAAK,GAAGx1R,CAAC,GAAGqwO,aAAvB,CAAR;AACD,GAHD;;AAKA,SAAO1yN,CAAC,CACHzuB,KADE,CACI,OADJ,EAEF+1R,SAFE,CAEQ,gBAAK,IAAIxD,QAAT,IAAqBnxC,aAArB,GAA+B,IAFvC,CAAP;AAGD;;;;;;;;ACtED,IAAI55K,OAAO,GAAG,IAAd;AAAA,IACIkoO,cAAc,GAAG,GADrB;AAAA,IAEIllG,EAAE,GAAG,CAAC,GAFV;AAAA,IAEemlG,GAAG,GAAGnlG,EAAE,GAAGhjI,OAF1B;AAAA,IAGIo1B,EAAE,GAAG,GAHT;AAAA,IAGcgzM,GAAG,GAAGhzM,EAAE,GAAGp1B,OAHzB;AAAA,IAIIijI,EAAE,GAAG,CAAC,EAJV;AAAA,IAIcolG,GAAG,GAAGplG,EAAE,GAAGjjI,OAJzB;AAAA,IAKIm1B,EAAE,GAAG,EALT;AAAA,IAKamzM,GAAG,GAAGnzM,EAAE,GAAGn1B,OALxB;;AAOA,SAASuoO,QAAT,CAAkB/kG,WAAlB,EAA+B;AAC7B,SAAOA,WAAW,CAACvhN,MAAZ,GAAqB,CAA5B;AACD;;AAED,SAASggQ,QAAT,CAAkBn5P,CAAlB,EAAqB;AACnB,SAAOJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAC,GAAGo/S,cAAf,IAAiCA,cAAxC;AACD;;AAED,SAASM,cAAT,CAAwBnhS,CAAxB,EAA2B;AACzB,SAAOA,CAAC,KAAK47L,EAAN,IAAY57L,CAAC,KAAK8tF,EAAlB,GAAuB,CAAC,CAAD,EAAI9tF,CAAJ,CAAvB,GAAgC,CAAC27L,EAAD,EAAKi/C,QAAQ,CAAC56O,CAAD,CAAb,CAAvC,CADyB,CACiC;AAC3D;;AAED,SAASohS,UAAT,CAAoBxhR,CAApB,EAAuB;AACrB,MAAIn+B,CAAC,GAAGm+B,CAAC,CAAC,CAAD,CAAT;AAAA,MAAc5f,CAAC,GAAG4f,CAAC,CAAC,CAAD,CAAnB;AAAA,MAAwByhR,OAAO,GAAG,KAAlC;AACA,MAAI5/S,CAAC,IAAIq/S,GAAT,EAAcr/S,CAAC,GAAGk6M,EAAJ,EAAQ0lG,OAAO,GAAG,IAAlB,CAAd,KACK,IAAI5/S,CAAC,IAAIs/S,GAAT,EAAct/S,CAAC,GAAGssG,EAAJ,EAAQszM,OAAO,GAAG,IAAlB;AACnB,MAAIrhS,CAAC,IAAIghS,GAAT,EAAchhS,CAAC,GAAG47L,EAAJ,EAAQylG,OAAO,GAAG,IAAlB,CAAd,KACK,IAAIrhS,CAAC,IAAIihS,GAAT,EAAcjhS,CAAC,GAAG8tF,EAAJ,EAAQuzM,OAAO,GAAG,IAAlB;AACnB,SAAOA,OAAO,GAAG,CAAC5/S,CAAD,EAAIue,CAAJ,CAAH,GAAY4f,CAA1B;AACD;;AAED,SAAS0hR,WAAT,CAAqB1kG,MAArB,EAA6B;AAC3B,SAAOA,MAAM,CAAC73M,GAAP,CAAWq8S,UAAX,CAAP;AACD,EAED;;;AACA,SAASG,gBAAT,CAA0BC,KAA1B,EAAiCzkG,OAAjC,EAA0CI,SAA1C,EAAqD;AACnD,OAAK,IAAI53M,CAAC,GAAG,CAAR,EAAWwtF,CAAC,GAAGyuN,KAAK,CAAC5mT,MAA1B,EAAkC2K,CAAC,GAAGwtF,CAAtC,EAAyC,EAAExtF,CAA3C,EAA8C;AAC5C,QAAIu3M,IAAI,GAAG0kG,KAAK,CAACj8S,CAAD,CAAL,CAASZ,KAAT,EAAX,CAD4C,CAG5C;;AACAw4M,IAAAA,SAAS,CAAC5hN,IAAV,CAAe;AAAC6F,MAAAA,KAAK,EAAE,CAAC,CAAT;AAAY27M,MAAAA,OAAO,EAAEA,OAArB;AAA8BD,MAAAA,IAAI,EAAEA;AAApC,KAAf;;AAEA,SAAK,IAAIxhN,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGszM,IAAI,CAACliN,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C,UAAIuhN,KAAK,GAAGC,IAAI,CAACxhN,CAAD,CAAhB;AAAA,UACImG,CAAC,GAAGo7M,KAAK,CAAC,CAAD,CADb;AAAA,UAEI78L,CAAC,GAAG68L,KAAK,CAAC,CAAD,CAFb,CAD2C,CAK3C;;AACA,UAAIp7M,CAAC,IAAIq/S,GAAL,IAAYr/S,CAAC,IAAIs/S,GAAjB,IAAwB/gS,CAAC,IAAIghS,GAA7B,IAAoChhS,CAAC,IAAIihS,GAA7C,EAAkD;AAChDnkG,QAAAA,IAAI,CAACxhN,CAAD,CAAJ,GAAU8lT,UAAU,CAACvkG,KAAD,CAApB,CADgD,CAGhD;;AACA,aAAK,IAAIjkM,CAAC,GAAGtd,CAAC,GAAG,CAAjB,EAAoBsd,CAAC,GAAGpP,CAAxB,EAA2B,EAAEoP,CAA7B,EAAgC;AAC9B,cAAI6oS,MAAM,GAAG3kG,IAAI,CAAClkM,CAAD,CAAjB;AAAA,cACI4wN,EAAE,GAAGi4E,MAAM,CAAC,CAAD,CADf;AAAA,cAEIh4E,EAAE,GAAGg4E,MAAM,CAAC,CAAD,CAFf;AAGA,cAAIj4E,EAAE,GAAGs3E,GAAL,IAAYt3E,EAAE,GAAGu3E,GAAjB,IAAwBt3E,EAAE,GAAGu3E,GAA7B,IAAoCv3E,EAAE,GAAGw3E,GAA7C,EAAkD;AACnD,SAT+C,CAWhD;AACA;AACA;;;AACA,YAAIroS,CAAC,KAAKtd,CAAC,GAAG,CAAd,EAAiB,SAd+B,CAgBhD;AACA;AACA;;AACA,YAAIA,CAAJ,EAAO;AACL,cAAIomT,cAAc,GAAG;AAACtgT,YAAAA,KAAK,EAAE,CAAC,CAAT;AAAY27M,YAAAA,OAAO,EAAEA,OAArB;AAA8BD,YAAAA,IAAI,EAAEA,IAAI,CAACn4M,KAAL,CAAW,CAAX,EAAcrJ,CAAC,GAAG,CAAlB;AAApC,WAArB;AACAomT,UAAAA,cAAc,CAAC5kG,IAAf,CAAoB4kG,cAAc,CAAC5kG,IAAf,CAAoBliN,MAApB,GAA6B,CAAjD,IAAsDumT,cAAc,CAACnhS,CAAD,CAApE;AACAm9L,UAAAA,SAAS,CAACA,SAAS,CAACviN,MAAV,GAAmB,CAApB,CAAT,GAAkC8mT,cAAlC;AACD,SAJD,CAMA;AACA;AAPA,aAQKvkG,SAAS,CAACz3L,GAAV,GA3B2C,CA6BhD;AACA;;;AACA,YAAI9M,CAAC,IAAIpP,CAAT,EAAY,MA/BoC,CAiChD;;AACA2zM,QAAAA,SAAS,CAAC5hN,IAAV,CAAe;AAAC6F,UAAAA,KAAK,EAAE,CAAC,CAAT;AAAY27M,UAAAA,OAAO,EAAEA,OAArB;AAA8BD,UAAAA,IAAI,EAAEA,IAAI,GAAGA,IAAI,CAACn4M,KAAL,CAAWiU,CAAC,GAAG,CAAf;AAA3C,SAAf;AACAkkM,QAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUqkG,cAAc,CAACrkG,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAD,CAAxB;AACAxhN,QAAAA,CAAC,GAAG,CAAC,CAAL;AACAkO,QAAAA,CAAC,GAAGszM,IAAI,CAACliN,MAAT;AACD;AACF;AACF;AACF,EAED;;;AACA,SAAS+mT,eAAT,CAAyBxkG,SAAzB,EAAoC;AAClC,MAAI7hN,CAAJ;AAAA,MAAOkO,CAAC,GAAG2zM,SAAS,CAACviN,MAArB,CADkC,CAGlC;;AACA,MAAIqiN,eAAe,GAAG,EAAtB;AAAA,MACIC,aAAa,GAAG,EADpB;AAAA,MAEI0kG,QAFJ;AAAA,MAGIx6S,KAHJ;AAAA,MAIIy6S,aAJJ;AAAA,MAKI50S,GALJ;AAAA,MAMI60S,WANJ,CAJkC,CAYlC;;AACA,OAAKxmT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBsmT,IAAAA,QAAQ,GAAGzkG,SAAS,CAAC7hN,CAAD,CAApB;AACA8L,IAAAA,KAAK,GAAGw6S,QAAQ,CAAC9kG,IAAT,CAAc,CAAd,CAAR;AACA7vM,IAAAA,GAAG,GAAG20S,QAAQ,CAAC9kG,IAAT,CAAc8kG,QAAQ,CAAC9kG,IAAT,CAAcliN,MAAd,GAAuB,CAArC,CAAN,CAHsB,CAKtB;;AACA,QAAIwM,KAAK,CAAC,CAAD,CAAL,KAAa6F,GAAG,CAAC,CAAD,CAAhB,IAAuB7F,KAAK,CAAC,CAAD,CAAL,KAAa6F,GAAG,CAAC,CAAD,CAA3C,EAAgD;AAC9C20S,MAAAA,QAAQ,CAAC7kG,OAAT,CAAiBxhN,IAAjB,CAAsBqmT,QAAQ,CAAC9kG,IAA/B;AACAK,MAAAA,SAAS,CAAC7hN,CAAD,CAAT,GAAe,IAAf;AACA;AACD;;AAEDsmT,IAAAA,QAAQ,CAACxgT,KAAT,GAAiB9F,CAAjB;AACA2hN,IAAAA,eAAe,CAAC71M,KAAD,CAAf,GAAyB81M,aAAa,CAACjwM,GAAD,CAAb,GAAqB20S,QAA9C;AACD,GA3BiC,CA6BlC;;;AACA,OAAKtmT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBsmT,IAAAA,QAAQ,GAAGzkG,SAAS,CAAC7hN,CAAD,CAApB;;AACA,QAAIsmT,QAAJ,EAAc;AACZx6S,MAAAA,KAAK,GAAGw6S,QAAQ,CAAC9kG,IAAT,CAAc,CAAd,CAAR;AACA7vM,MAAAA,GAAG,GAAG20S,QAAQ,CAAC9kG,IAAT,CAAc8kG,QAAQ,CAAC9kG,IAAT,CAAcliN,MAAd,GAAuB,CAArC,CAAN;AACAinT,MAAAA,aAAa,GAAG3kG,aAAa,CAAC91M,KAAD,CAA7B;AACA06S,MAAAA,WAAW,GAAG7kG,eAAe,CAAChwM,GAAD,CAA7B;AAEA,aAAOgwM,eAAe,CAAC71M,KAAD,CAAtB;AACA,aAAO81M,aAAa,CAACjwM,GAAD,CAApB,CAPY,CASZ;;AACA,UAAI7F,KAAK,CAAC,CAAD,CAAL,KAAa6F,GAAG,CAAC,CAAD,CAAhB,IAAuB7F,KAAK,CAAC,CAAD,CAAL,KAAa6F,GAAG,CAAC,CAAD,CAA3C,EAAgD;AAC9C20S,QAAAA,QAAQ,CAAC7kG,OAAT,CAAiBxhN,IAAjB,CAAsBqmT,QAAQ,CAAC9kG,IAA/B;AACA;AACD;;AAED,UAAI+kG,aAAJ,EAAmB;AACjB,eAAO3kG,aAAa,CAAC91M,KAAD,CAApB;AACA,eAAO61M,eAAe,CAAC4kG,aAAa,CAAC/kG,IAAd,CAAmB,CAAnB,CAAD,CAAtB;AACA+kG,QAAAA,aAAa,CAAC/kG,IAAd,CAAmBp3L,GAAnB,GAHiB,CAGS;;AAC1By3L,QAAAA,SAAS,CAAC0kG,aAAa,CAACzgT,KAAf,CAAT,GAAiC,IAAjC;AACAwgT,QAAAA,QAAQ,GAAG;AAACxgT,UAAAA,KAAK,EAAE,CAAC,CAAT;AAAY27M,UAAAA,OAAO,EAAE8kG,aAAa,CAAC9kG,OAAnC;AAA4CD,UAAAA,IAAI,EAAE+kG,aAAa,CAAC/kG,IAAd,CAAmBjiN,MAAnB,CAA0B+mT,QAAQ,CAAC9kG,IAAnC;AAAlD,SAAX;;AAEA,YAAI+kG,aAAa,KAAKC,WAAtB,EAAmC;AACjC;AACAF,UAAAA,QAAQ,CAAC7kG,OAAT,CAAiBxhN,IAAjB,CAAsBqmT,QAAQ,CAAC9kG,IAA/B;AACD,SAHD,MAGO;AACL8kG,UAAAA,QAAQ,CAACxgT,KAAT,GAAiBoI,CAAC,EAAlB;AACA2zM,UAAAA,SAAS,CAAC5hN,IAAV,CAAe0hN,eAAe,CAAC2kG,QAAQ,CAAC9kG,IAAT,CAAc,CAAd,CAAD,CAAf,GAAoCI,aAAa,CAAC0kG,QAAQ,CAAC9kG,IAAT,CAAc8kG,QAAQ,CAAC9kG,IAAT,CAAcliN,MAAd,GAAuB,CAArC,CAAD,CAAb,GAAyDgnT,QAA5G;AACD;AACF,OAdD,MAcO,IAAIE,WAAJ,EAAiB;AACtB,eAAO7kG,eAAe,CAAChwM,GAAD,CAAtB;AACA,eAAOiwM,aAAa,CAAC4kG,WAAW,CAAChlG,IAAZ,CAAiBglG,WAAW,CAAChlG,IAAZ,CAAiBliN,MAAjB,GAA0B,CAA3C,CAAD,CAApB;AACAgnT,QAAAA,QAAQ,CAAC9kG,IAAT,CAAcp3L,GAAd,GAHsB,CAGD;;AACrBk8R,QAAAA,QAAQ,GAAG;AAACxgT,UAAAA,KAAK,EAAEoI,CAAC,EAAT;AAAauzM,UAAAA,OAAO,EAAE+kG,WAAW,CAAC/kG,OAAlC;AAA2CD,UAAAA,IAAI,EAAE8kG,QAAQ,CAAC9kG,IAAT,CAAcjiN,MAAd,CAAqBinT,WAAW,CAAChlG,IAAjC;AAAjD,SAAX;AACAK,QAAAA,SAAS,CAAC2kG,WAAW,CAAC1gT,KAAb,CAAT,GAA+B,IAA/B;AACA+7M,QAAAA,SAAS,CAAC5hN,IAAV,CAAe0hN,eAAe,CAAC2kG,QAAQ,CAAC9kG,IAAT,CAAc,CAAd,CAAD,CAAf,GAAoCI,aAAa,CAAC0kG,QAAQ,CAAC9kG,IAAT,CAAc8kG,QAAQ,CAAC9kG,IAAT,CAAcliN,MAAd,GAAuB,CAArC,CAAD,CAAb,GAAyDgnT,QAA5G;AACD,OAPM,MAOA;AACLA,QAAAA,QAAQ,CAAC9kG,IAAT,CAAcvhN,IAAd,CAAmBqmT,QAAQ,CAAC9kG,IAAT,CAAc,CAAd,CAAnB,EADK,CACiC;;AACtC8kG,QAAAA,QAAQ,CAAC7kG,OAAT,CAAiBxhN,IAAjB,CAAsBqmT,QAAQ,CAAC9kG,IAA/B;AACD;AACF;AACF;AACF;;AAED,SAASilG,aAAT,CAAuBz7R,KAAvB,EAA8B;AAC5B,MAAItB,MAAM,GAAG;AAACzJ,IAAAA,IAAI,EAAE,SAAP;AAAkBmhM,IAAAA,QAAQ,EAAEslG,cAAc,CAAC17R,KAAK,CAACo2L,QAAP;AAA1C,GAAb;AACA,MAAIp2L,KAAK,CAAC/X,EAAN,IAAY,IAAhB,EAAsByW,MAAM,CAACzW,EAAP,GAAY+X,KAAK,CAAC/X,EAAlB;AACtB,MAAI+X,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,MAAIl2L,KAAK,CAACm2L,UAAN,IAAoB,IAAxB,EAA8Bz3L,MAAM,CAACy3L,UAAP,GAAoBn2L,KAAK,CAACm2L,UAA1B;AAC9B,SAAOz3L,MAAP;AACD;;AAED,SAASg9R,cAAT,CAAwB17R,KAAxB,EAA+B;AAC7B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOA,KAAP;AACnB,MAAItB,MAAJ,EAAYm4L,SAAZ,EAAuB7hN,CAAvB,EAA0BkO,CAA1B;;AACA,UAAQ8c,KAAK,CAAC/K,IAAd;AACE,SAAK,oBAAL;AAA2ByJ,MAAAA,MAAM,GAAG;AAACzJ,QAAAA,IAAI,EAAE,oBAAP;AAA6B2gM,QAAAA,UAAU,EAAE51L,KAAK,CAAC41L,UAAN,CAAiBn3M,GAAjB,CAAqBi9S,cAArB;AAAzC,OAAT;AAAyF;;AACpH,SAAK,OAAL;AAAch9R,MAAAA,MAAM,GAAG;AAACzJ,QAAAA,IAAI,EAAE,OAAP;AAAgB4gM,QAAAA,WAAW,EAAEilG,UAAU,CAAC96R,KAAK,CAAC61L,WAAP;AAAvC,OAAT;AAAsE;;AACpF,SAAK,YAAL;AAAmB,SAAK,YAAL;AAAmBn3L,MAAAA,MAAM,GAAG;AAACzJ,QAAAA,IAAI,EAAE+K,KAAK,CAAC/K,IAAb;AAAmB4gM,QAAAA,WAAW,EAAEmlG,WAAW,CAACh7R,KAAK,CAAC61L,WAAP;AAA3C,OAAT;AAA0E;;AAChH,SAAK,iBAAL;AAAwBn3L,MAAAA,MAAM,GAAG;AAACzJ,QAAAA,IAAI,EAAE,iBAAP;AAA0B4gM,QAAAA,WAAW,EAAE71L,KAAK,CAAC61L,WAAN,CAAkBp3M,GAAlB,CAAsBu8S,WAAtB;AAAvC,OAAT;AAAqF;;AAC7G,SAAK,SAAL;AAAgB;AACd,YAAIvkG,OAAO,GAAG,EAAd;AACAwkG,QAAAA,gBAAgB,CAACj7R,KAAK,CAAC61L,WAAP,EAAoBY,OAApB,EAA6BI,SAAS,GAAG,EAAzC,CAAhB;AACAwkG,QAAAA,eAAe,CAACxkG,SAAD,CAAf;AACAn4L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,SAAP;AAAkB4gM,UAAAA,WAAW,EAAEY;AAA/B,SAAT;AACA;AACD;;AACD,SAAK,cAAL;AAAqB;AACnBI,QAAAA,SAAS,GAAG,EAAZ,EAAgB7hN,CAAC,GAAG,CAAC,CAArB,EAAwBkO,CAAC,GAAG8c,KAAK,CAAC61L,WAAN,CAAkBvhN,MAA9C;AACA,YAAI2jN,QAAQ,GAAG,IAAInjN,KAAJ,CAAUoO,CAAV,CAAf;;AACA,eAAO,EAAElO,CAAF,GAAMkO,CAAb,EAAgB+3S,gBAAgB,CAACj7R,KAAK,CAAC61L,WAAN,CAAkB7gN,CAAlB,CAAD,EAAuBijN,QAAQ,CAACjjN,CAAD,CAAR,GAAc,EAArC,EAAyC6hN,SAAzC,CAAhB;;AAChBwkG,QAAAA,eAAe,CAACxkG,SAAD,CAAf;AACAn4L,QAAAA,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,cAAP;AAAuB4gM,UAAAA,WAAW,EAAEoC,QAAQ,CAAC9nM,MAAT,CAAgByqS,QAAhB;AAApC,SAAT;AACA;AACD;;AACD;AAAS,aAAO56R,KAAP;AApBX;;AAsBA,MAAIA,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,SAAOx3L,MAAP;AACD;;AAEc,kBAASsB,KAAT,EAAgB;AAC7B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOA,KAAP;;AACnB,UAAQA,KAAK,CAAC/K,IAAd;AACE,SAAK,SAAL;AAAgB,aAAOwmS,aAAa,CAACz7R,KAAD,CAApB;;AAChB,SAAK,mBAAL;AAA0B;AACxB,YAAItB,MAAM,GAAG;AAACzJ,UAAAA,IAAI,EAAE,mBAAP;AAA4B4vK,UAAAA,QAAQ,EAAE7kK,KAAK,CAAC6kK,QAAN,CAAepmL,GAAf,CAAmBg9S,aAAnB;AAAtC,SAAb;AACA,YAAIz7R,KAAK,CAACk2L,IAAN,IAAc,IAAlB,EAAwBx3L,MAAM,CAACw3L,IAAP,GAAcl2L,KAAK,CAACk2L,IAApB;AACxB,eAAOx3L,MAAP;AACD;;AACD;AAAS,aAAOg9R,cAAc,CAAC17R,KAAD,CAArB;AAPX;AASD;;;;;;;;;;ACtND;;AACA;;AAEO,SAAS27R,QAAT,CAAkB1pB,MAAlB,EAA0BC,GAA1B,EAA+B;AACpC,MAAIx5R,CAAC,GAAG,eAAIw5R,GAAG,GAAG,CAAV,CAAR;AAAA,MACI15R,CAAC,GAAG,eAAI23R,kBAAYz3R,CAAhB,CADR;AAEA,SAAO,CACLu5R,MAAM,IAAI,UAAU,UAAUz5R,CAAV,GAAcA,CAA5B,CADD,EAEL,UAAUE,CAFL,CAAP;AAID;;AAEDijT,QAAQ,CAACjpD,MAAT,GAAkB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC/B,MAAIhhB,CAAC,GAAGghB,CAAC,GAAG,OAAZ;AAAA,MACIlhB,CAAC,GAAG,eAAI23R,kBAAYz3R,CAAhB,CADR;AAEA,SAAO,CACLyC,CAAC,IAAI,UAAU,UAAU3C,CAAV,GAAcA,CAA5B,CADI,EAEL,IAAI,gBAAKE,CAAL,CAFC,CAAP;AAID,CAPD;;AASe,oBAAW;AACxB,SAAO,0BAAWijT,QAAX,EACF9wS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;ACxBD;;AACA;;AAEA;AACA;AACA;AACe,kBAAS+sL,GAAT,EAAcsf,EAAd,EAAkBntF,EAAlB,EAAsB;AACnC,MAAI/0H,CAAC,GAAG,2BAAYkiN,EAAZ,EAAgBntF,EAAhB,CAAR;AAAA,MACIppG,CAAC,GAAG3rB,CAAC,CAAC,GAAD,CADT;AAAA,MAEIkH,CAAC,GAAG,wBAAS,CAAC,CAACykB,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAT,EAAyBu2L,EAAzB,CAFR;AAAA,MAGIn0M,CAAC,GAAG/N,CAAC,CAACooS,QAAF,GAAa,CAHrB;AAAA,MAII1jR,CAAC,GAAG,CAAC,gBAAK,eAAIxd,CAAC,CAAC,CAAD,CAAD,GAAO8vP,aAAX,IAAsB,eAAIjpP,CAAJ,CAA3B,CAJT;AAAA,MAKIoqL,CAAC,GAAG,CAAC,CAACxsK,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,EAAe,EAAEzkB,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP,GAAW81O,WAAKt4N,CAAhB,GAAoBA,CAAtB,IAA2BuyO,aAA1C,CALR;AAAA,MAMI3yN,CAAC,GAAG,0BAAWs+J,GAAG,CAAC70L,CAAD,CAAd,EAAmBwsP,MAAnB,CAA0BpiE,CAA1B,CANR;AAAA,MAOInqL,CAAC,GAAG,wBAASmqL,CAAT,CAPR;AAAA,MAQIj4B,MAAM,GAAG57H,CAAC,CAAC47H,MARf;AAUA,SAAO57H,CAAC,CAACi2N,MAAT;;AAEAj2N,EAAAA,CAAC,CAAC47H,MAAF,GAAW,UAASv5I,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,GAAmB4gK,MAAM,CAAClyJ,CAAC,CAAC2Y,CAAD,CAAF,CAAzB,GAAkC3Y,CAAC,CAAC0vP,MAAF,CAASx9F,MAAM,EAAf,CAAzC;AACD,GAFD;;AAIA,SAAO57H,CAAC,CACHsnQ,SADE,CACQ,EADR,CAAP;AAED;;;;;;;;;;;ACzBD;;AACA;;AACA;;;;AAEO,SAASgb,oBAAT,CAA8B/5S,CAA9B,EAAiC;AACtC,MAAIg6S,IAAI,GAAG,eAAIh6S,CAAJ,CAAX;;AAEA,WAAS40R,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAIr8E,WAAW,GAAG,2BAAYo8E,MAAZ,EAAoBC,GAApB,CAAlB;AACAr8E,IAAAA,WAAW,CAAC,CAAD,CAAX,IAAkBgmG,IAAlB;AACA,WAAOhmG,WAAP;AACD;;AAED4gF,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,WAAO0pR,sBAAY1wC,MAAZ,CAAmBv3P,CAAC,GAAG0gT,IAAvB,EAA6BniS,CAA7B,CAAP;AACD,GAFD;;AAIA,SAAO+8Q,OAAP;AACD;;AAEM,SAASqlB,oBAAT,GAAgC;AACrC,SAAOC,iBAAiB,CAAC,CAAC,CAAC,GAAF,EAAO,IAAP,CAAD,EAAe,CAAC,CAAC,EAAF,EAAM,EAAN,CAAf,CAAjB,CACFnb,SADE,CACQ,EADR,EAEF/1R,KAFE,CAEI,GAFJ,CAAP;AAGD;;AAEc,SAASkxS,iBAAT,CAA2B7kG,EAA3B,EAA+BntF,EAA/B,EAAmC;AAChD,SAAO,uBAAS6xL,oBAAT,EAA+B1kG,EAA/B,EAAmCntF,EAAnC,CAAP;AACD;;;;;;;;;;;AC5BD;;AACA;;AACA;;;;AAEO,SAASiyL,sBAAT,CAAgCj9I,EAAhC,EAAoC;AACzC,MAAI,EAAEA,EAAE,IAAI,CAAR,CAAJ,EAAgB,OAAOqjI,iCAAP;AAChB,MAAI6Z,OAAO,GAAG,CAACl9I,EAAD,GAAM,CAApB;AAAA,MACIm9I,OAAO,GAAG,CAACD,OADf;AAAA,MAEIE,GAAG,GAAGp9I,EAAE,GAAGA,EAFf;AAAA,MAGIq9I,UAAU,GAAG,eAAIF,OAAJ,CAHjB;AAAA,MAIIvvO,CAAC,GAAG,MAAM,eAAIuvO,OAAJ,CAJd;;AAMA,WAASzlB,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAImqB,EAAE,GAAG,gBAAK,eAAInqB,GAAJ,IAAW,eAAID,MAAM,GAAGgqB,OAAb,CAAhB,CAAT;AAAA,QACIK,EAAE,GAAG,gBAAK,eAAIpqB,GAAJ,IAAW,eAAID,MAAM,GAAGiqB,OAAb,CAAhB,CADT;AAAA,QAEIruN,EAAE,GAAGqkM,GAAG,GAAG,CAAN,GAAU,CAAC,CAAX,GAAe,CAFxB;AAGAmqB,IAAAA,EAAE,IAAIA,EAAN,EAAUC,EAAE,IAAIA,EAAhB;AACA,WAAO,CACL,CAACD,EAAE,GAAGC,EAAN,KAAa,IAAIv9I,EAAjB,CADK,EAELlxE,EAAE,GAAG,gBAAK,IAAIsuN,GAAJ,GAAUG,EAAV,GAAe,CAACH,GAAG,GAAGE,EAAN,GAAWC,EAAZ,KAAmBH,GAAG,GAAGE,EAAN,GAAWC,EAA9B,CAApB,CAAL,IAA+D,IAAIv9I,EAAnE,CAFK,CAAP;AAID;;AAED03H,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIguF,EAAE,GAAGhuF,CAAC,GAAGA,CAAb;AAAA,QACI6iS,KAAK,GAAG,eAAI,gBAAK70M,EAAE,GAAG,CAAChvG,CAAC,GAAGyC,CAAC,GAAG8gT,OAAT,IAAoBvjT,CAA9B,CAAJ,CADZ;AAAA,QAEI8jT,KAAK,GAAG,eAAI,gBAAK90M,EAAE,GAAG,CAAChvG,CAAC,GAAGyC,CAAC,GAAG+gT,OAAT,IAAoBxjT,CAA9B,CAAJ,CAFZ;AAAA,QAGIA,CAHJ;AAAA,QAIImJ,CAJJ;AAKA,WAAO,CACL,iBAAMA,CAAC,GAAG06S,KAAK,GAAGC,KAAlB,EAAyB9jT,CAAC,GAAG,CAAC6jT,KAAK,GAAGC,KAAT,IAAkBJ,UAA/C,CADK,EAEL,CAAC1iS,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAd,IAAmB,gBAAK,gBAAKhhB,CAAC,GAAGA,CAAJ,GAAQmJ,CAAC,GAAGA,CAAjB,IAAsB8qE,CAA3B,CAFd,CAAP;AAID,GAVD;;AAYA,SAAO8pN,OAAP;AACD;;AAEM,SAASgmB,sBAAT,GAAkC;AACvC,SAAOC,mBAAmB,CAAC,CAAC,CAAC,GAAF,EAAO,IAAP,CAAD,EAAe,CAAC,CAAC,EAAF,EAAM,EAAN,CAAf,CAAnB,CACF9b,SADE,CACQ,GADR,EAEF/1R,KAFE,CAEI,OAFJ,CAAP;AAGD;;AAEc,SAAS6xS,mBAAT,CAA6BxlG,EAA7B,EAAiCntF,EAAjC,EAAqC;AAClD,SAAO,uBAASiyL,sBAAT,EAAiC9kG,EAAjC,EAAqCntF,EAArC,CAAP;AACD;;;;;;;;;;AC9CD;;AACA;;AAEO,SAAS4yL,gBAAT,CAA0B1qB,MAA1B,EAAkCC,GAAlC,EAAuC;AAC5C,MAAI,eAAIA,GAAJ,IAAW7/M,aAAf,EAAwB,OAAO,CAAC4/M,MAAD,EAAS,CAAT,CAAP;AACxB,MAAImf,QAAQ,GAAG,eAAIlf,GAAG,GAAGp+C,YAAV,CAAf;AAAA,MACIzqF,KAAK,GAAG,gBAAK+nJ,QAAL,CADZ;AAEA,MAAI,eAAInf,MAAJ,IAAc5/M,aAAd,IAAyB,eAAI,eAAI6/M,GAAJ,IAAWp+C,YAAf,IAAyBzhK,aAAtD,EAA+D,OAAO,CAAC,CAAD,EAAI,gBAAK6/M,GAAL,IAAYlgD,QAAZ,GAAiB,eAAI3oF,KAAK,GAAG,CAAZ,CAArB,CAAP;AAC/D,MAAIgoJ,QAAQ,GAAG,eAAIhoJ,KAAJ,CAAf;AAAA,MACI8jG,CAAC,GAAG,eAAInb,WAAKigD,MAAL,GAAcA,MAAM,GAAGjgD,QAA3B,IAAiC,CADzC;AAAA,MAEI8wD,EAAE,GAAG31C,CAAC,GAAGA,CAFb;AAAA,MAGI0lD,CAAC,GAAGxB,QAAQ,IAAID,QAAQ,GAAGC,QAAX,GAAsB,CAA1B,CAHhB;AAAA,MAIIr7G,CAAC,GAAG68G,CAAC,IAAI,IAAIzB,QAAJ,GAAe,CAAnB,CAJT;AAAA,MAKIwL,EAAE,GAAG5mH,CAAC,GAAGA,CALb;AAAA,MAMI6mH,KAAK,GAAGD,EAAE,GAAG9Z,EANjB;AAAA,MAOIga,IAAI,GAAGjK,CAAC,GAAG+J,EAPf;AAAA,MAQI/rF,CAAC,GAAGiyE,EAAE,GAAG+P,CARb;AASA,SAAO,CACL,gBAAK5gB,MAAL,IAAejgD,QAAf,IAAqBmb,CAAC,GAAG2vD,IAAJ,GAAW,gBAAKha,EAAE,GAAGga,IAAL,GAAYA,IAAZ,GAAmBD,KAAK,IAAIhK,CAAC,GAAGA,CAAJ,GAAQ+J,EAAZ,CAA7B,CAAhC,IAAiFC,KAD5E,EAEL,gBAAK3qB,GAAL,IAAYlgD,QAAZ,IAAkBh8C,CAAC,GAAG66B,CAAJ,GAAQs8B,CAAC,GAAG,gBAAK,CAAC21C,EAAE,GAAG,CAAN,IAAW+Z,KAAX,GAAmBhsF,CAAC,GAAGA,CAA5B,CAA9B,IAAgEgsF,KAF3D,CAAP;AAID;;AAEDF,gBAAgB,CAACjqD,MAAjB,GAA0B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACvC,MAAI,eAAIA,CAAJ,IAAS24D,aAAb,EAAsB,OAAO,CAACl3E,CAAD,EAAI,CAAJ,CAAP;AACtB,MAAI,eAAIA,CAAJ,IAASk3E,aAAb,EAAsB,OAAO,CAAC,CAAD,EAAIyhK,eAAS,eAAI,IAAI,gBAAKp6N,CAAC,GAAGs4N,QAAT,CAAR,CAAb,CAAP;AACtB,MAAIl+J,EAAE,GAAG,CAAC34E,CAAC,IAAI62O,QAAN,IAAY72O,CAArB;AAAA,MACIusG,EAAE,GAAG,CAAChuF,CAAC,IAAIs4N,QAAN,IAAYt4N,CADrB;AAAA,MAEIqjS,KAAK,GAAGjpO,EAAE,GAAG4zB,EAFjB;AAAA,MAGIj9B,CAAC,GAAGsyO,KAAK,GAAGA,KAHhB;AAAA,MAII1uQ,EAAE,GAAG,CAAC,eAAI30B,CAAJ,CAAD,IAAW,IAAIqjS,KAAf,CAJT;AAAA,MAKIzuQ,EAAE,GAAGD,EAAE,GAAG,IAAIq5D,EAAT,GAAc5zB,EALvB;AAAA,MAMIkpO,EAAE,GAAG,CAAC,CAAD,GAAK3uQ,EAAL,GAAU,CAAV,GAAc,IAAIq5D,EAAlB,GAAuBj9B,CANhC;AAAA,MAOI5oE,CAAC,GAAG6lG,EAAE,GAAGs1M,EAAL,GAAU,CAAC,IAAI1uQ,EAAJ,GAASA,EAAT,GAAcA,EAAd,IAAoB0uQ,EAAE,GAAGA,EAAL,GAAUA,EAA9B,IAAoC,IAAI3uQ,EAAJ,GAASC,EAAT,IAAe0uQ,EAAE,GAAGA,EAApB,CAArC,IAAgE,EAPlF;AAAA,MAQI94E,EAAE,GAAG,CAAC71L,EAAE,GAAGC,EAAE,GAAGA,EAAL,IAAW,IAAI0uQ,EAAf,CAAN,IAA4BA,EARrC;AAAA,MASIlxD,EAAE,GAAG,IAAI,gBAAK,CAAC5nB,EAAD,GAAM,CAAX,CATb;AAAA,MAUI+4E,MAAM,GAAG,gBAAK,IAAIp7S,CAAJ,IAASqiO,EAAE,GAAG4nB,EAAd,CAAL,IAA0B,CAVvC;AAWA,SAAO,CACL9Z,YAAM+qE,KAAK,GAAG,CAAR,GAAY,gBAAK,IAAI,KAAKjpO,EAAE,GAAG4zB,EAAV,CAAJ,GAAoBj9B,CAAzB,CAAlB,KAAkD,IAAItvE,CAAtD,CADK,EAEL,gBAAKue,CAAL,IAAUs4N,QAAV,IAAgB,CAAC8Z,EAAD,GAAM,eAAImxD,MAAM,GAAGjrE,WAAK,CAAlB,CAAN,GAA6B1jM,EAAE,IAAI,IAAI0uQ,EAAR,CAA/C,CAFK,CAAP;AAID,CAlBD;;AAoBe,oBAAW;AACxB,SAAO,0BAAWL,gBAAX,EACF9xS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;AC9CD;;AACA;;AAEO,SAASqyS,iBAAT,CAA2BjrB,MAA3B,EAAmCC,GAAnC,EAAwC;AAC7C,MAAI,eAAIA,GAAJ,IAAW7/M,aAAf,EAAwB,OAAO,CAAC4/M,MAAD,EAAS,CAAT,CAAP;AACxB,MAAImf,QAAQ,GAAG,eAAIlf,GAAG,GAAGp+C,YAAV,CAAf;AAAA,MACIzqF,KAAK,GAAG,gBAAK+nJ,QAAL,CADZ;AAEA,MAAI,eAAInf,MAAJ,IAAc5/M,aAAd,IAAyB,eAAI,eAAI6/M,GAAJ,IAAWp+C,YAAf,IAAyBzhK,aAAtD,EAA+D,OAAO,CAAC,CAAD,EAAI,gBAAK6/M,GAAL,IAAYlgD,QAAZ,GAAiB,eAAI3oF,KAAK,GAAG,CAAZ,CAArB,CAAP;AAC/D,MAAIgoJ,QAAQ,GAAG,eAAIhoJ,KAAJ,CAAf;AAAA,MACI8jG,CAAC,GAAG,eAAInb,WAAKigD,MAAL,GAAcA,MAAM,GAAGjgD,QAA3B,IAAiC,CADzC;AAAA,MAEI8wD,EAAE,GAAG31C,CAAC,GAAGA,CAFb;AAAA,MAGI1lJ,EAAE,GAAG4pM,QAAQ,IAAI,gBAAK,IAAIvO,EAAT,IAAe31C,CAAC,GAAGkkD,QAAvB,CAAR,IAA4C,IAAIvO,EAAE,GAAGsO,QAAL,GAAgBA,QAAhE,CAHT;AAIA,SAAO,CACL,gBAAKnf,MAAL,IAAejgD,QAAf,GAAoBvqI,EADf,EAEL,gBAAKyqL,GAAL,IAAYlgD,QAAZ,GAAiB,gBAAK,IAAIvqI,EAAE,IAAI,IAAI0lJ,CAAJ,GAAQ1lJ,EAAZ,CAAX,CAFZ,CAAP;AAID;;AAEDy1M,iBAAiB,CAACxqD,MAAlB,GAA2B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACxC,MAAI,CAACve,CAAL,EAAQ,OAAO,CAAC,CAAD,EAAI24O,eAAS,eAAI,IAAI,gBAAKp6N,CAAC,GAAGs4N,QAAT,CAAR,CAAb,CAAP;AACR,MAAIvqI,EAAE,GAAG,eAAItsG,CAAC,GAAG62O,QAAR,CAAT;AAAA,MACImb,CAAC,GAAG,CAAC,IAAI1lJ,EAAE,GAAGA,EAAT,GAAc,CAAC/tF,CAAC,IAAIs4N,QAAN,IAAYt4N,CAA3B,KAAiC,IAAI+tF,EAArC,CADR;AAAA,MAEIq7L,EAAE,GAAG31C,CAAC,GAAGA,CAFb;AAAA,MAGIC,CAAC,GAAG,gBAAK01C,EAAE,GAAG,CAAV,CAHR;AAIA,SAAO,CACL,gBAAK3nS,CAAL,IAAU62O,QAAV,IAAgBob,CAAC,GAAGD,CAApB,CADK,EAEL,gBAAKzzO,CAAL,IAAUo6N,YAAV,GAAmB,eAAI,IAAI,iBAAM,gBAAK,CAAC,IAAI,IAAIqZ,CAAJ,GAAQ1lJ,EAAb,KAAoB0lJ,CAAC,GAAGC,CAAxB,IAA6B3lJ,EAAlC,CAAN,EAA6C,gBAAK2lJ,CAAC,GAAGD,CAAJ,GAAQ1lJ,EAAb,CAA7C,CAAR,CAFd,CAAP;AAID,CAVD;;AAYe,oBAAW;AACxB,SAAO,0BAAWy1M,iBAAX,EACFryS,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;ACjCD;;AACA;;AAEO,SAASsyS,iBAAT,CAA2BlrB,MAA3B,EAAmCC,GAAnC,EAAwC;AAC7C,MAAI,eAAIA,GAAJ,IAAW7/M,aAAf,EAAwB,OAAO,CAAC4/M,MAAD,EAAS,CAAT,CAAP;AACxB,MAAImf,QAAQ,GAAGlf,GAAG,GAAGp+C,YAArB;AAAA,MACIzqF,KAAK,GAAG,gBAAK+nJ,QAAL,CADZ;AAEA,MAAI,eAAInf,MAAJ,IAAc5/M,aAAd,IAAyB,eAAI,eAAI6/M,GAAJ,IAAWp+C,YAAf,IAAyBzhK,aAAtD,EAA+D,OAAO,CAAC,CAAD,EAAI2/J,WAAK,eAAI3oF,KAAK,GAAG,CAAZ,CAAT,CAAP;AAC/D,MAAI8jG,CAAC,GAAG,CAACnb,WAAKigD,MAAL,GAAcA,MAAM,GAAGjgD,QAAxB,IAA8B,CAAtC;AAAA,MACIxqI,EAAE,GAAG4pM,QAAQ,IAAI,IAAI,eAAI/nJ,KAAJ,CAAR,CADjB;AAEA,SAAO,CACL2oF,YAAM,gBAAKigD,MAAL,IAAe,gBAAK9kC,CAAC,GAAGA,CAAJ,GAAQ,CAAR,GAAY3lJ,EAAE,GAAGA,EAAtB,CAAf,GAA2C2lJ,CAAjD,CADK,EAELnb,WAAKxqI,EAFA,CAAP;AAID;;AAED21M,iBAAiB,CAACzqD,MAAlB,GAA2B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACxC,MAAI,CAACA,CAAL,EAAQ,OAAO,CAACve,CAAD,EAAI,CAAJ,CAAP;AACR,MAAIqsG,EAAE,GAAG9tF,CAAC,GAAGs4N,QAAb;AAAA,MACImb,CAAC,GAAG,CAACnb,WAAKA,QAAL,IAAW,IAAIxqI,EAAE,GAAGA,EAApB,IAA0BrsG,CAAC,GAAGA,CAA/B,KAAqC,IAAI62O,QAAJ,GAAS72O,CAA9C,CADR;AAEA,SAAO,CACLA,CAAC,GAAG62O,YAAM,gBAAK72O,CAAL,IAAU,gBAAKgyP,CAAC,GAAGA,CAAJ,GAAQ,CAAb,CAAV,GAA4BA,CAAlC,CAAH,GAA0C,CADtC,EAELrZ,eAAS,eAAI,IAAI,gBAAKtsI,EAAL,CAAR,CAFJ,CAAP;AAID,CARD;;AAUe,oBAAW;AACxB,SAAO,0BAAW21M,iBAAX,EACAtyS,KADA,CACM,OADN,CAAP;AAED;;;;;;;;;;AC7BD;;AACA;;AAEO,SAASuyS,iBAAT,CAA2BnrB,MAA3B,EAAmCC,GAAnC,EAAwC;AAC7C,MAAI,CAACA,GAAL,EAAU,OAAO,CAACD,MAAD,EAAS,CAAT,CAAP;AACV,MAAIe,IAAI,GAAG,eAAId,GAAJ,CAAX;AACA,MAAI,CAACD,MAAD,IAAWe,IAAI,KAAKl/C,YAAxB,EAAgC,OAAO,CAAC,CAAD,EAAIo+C,GAAJ,CAAP;AAChC,MAAI9kC,CAAC,GAAG4lC,IAAI,GAAGl/C,YAAf;AAAA,MACIupE,EAAE,GAAGjwD,CAAC,GAAGA,CADb;AAAA,MAEIC,CAAC,GAAG,CAAC,IAAID,CAAJ,GAAQiwD,EAAE,IAAIA,EAAE,GAAG,CAAT,CAAV,GAAwB,CAAzB,KAA+B,IAAIA,EAAJ,IAAUjwD,CAAC,GAAG,CAAd,CAA/B,CAFR;AAAA,MAGIkwD,EAAE,GAAGjwD,CAAC,GAAGA,CAHb;AAAA,MAIIkwD,EAAE,GAAGnwD,CAAC,GAAGC,CAJb;AAAA,MAKImwD,IAAI,GAAGH,EAAE,GAAGC,EAAL,GAAU,IAAIC,EALzB;AAAA,MAMIE,IAAI,GAAGrwD,CAAC,GAAG,IAAIC,CANnB;AAAA,MAOImkC,OAAO,GAAGS,MAAM,GAAGn+C,YAPvB;AAAA,MAQIm/C,OAAO,GAAGzB,OAAO,GAAG,IAAIA,OAR5B;AAAA,MASIh8C,CAAC,GAAG,gBAAK,eAAIy8C,MAAJ,IAAcn+C,YAAnB,IAA6B,gBAAKm/C,OAAO,GAAGA,OAAV,GAAoB,CAAzB,CATrC;AAAA,MAUIyqB,EAAE,GAAGloE,CAAC,GAAGA,CAVb;AAAA,MAWImoE,CAAC,GAAGH,IAAI,IAAIH,EAAE,GAAGC,EAAE,GAAGI,EAAV,GAAe,CAAnB,CAAJ,GAA4B,CAAC,IAAIL,EAAL,KAAYA,EAAE,IAAII,IAAI,GAAGA,IAAP,GAAc,IAAIH,EAAtB,CAAF,GAA8B,KAAKC,EAAL,GAAUD,EAAxC,GAA6C,IAAIA,EAAJ,GAASA,EAAlE,CAXpC;AAAA,MAYI71M,EAAE,GAAG,CAAC+tI,CAAC,IAAIgoE,IAAI,GAAGF,EAAP,GAAY,CAAhB,CAAD,GAAsB,IAAI,gBAAKK,CAAL,CAA3B,KAAuC,IAAIH,IAAJ,GAAWE,EAAlD,CAZT;AAaA,SAAO,CACL,gBAAKzrB,MAAL,IAAen+C,YAAf,GAAwBrsI,EADnB,EAEL,gBAAKyqL,GAAL,IAAYp+C,YAAZ,GAAqB,gBAAK,IAAI0B,CAAC,GAAG,eAAI/tI,EAAJ,CAAR,GAAkBA,EAAE,GAAGA,EAA5B,CAFhB,CAAP;AAID;;AAED21M,iBAAiB,CAAC1qD,MAAlB,GAA2B,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACxC,MAAIixE,KAAJ;AACA,MAAI,CAACxvF,CAAD,IAAM,CAACue,CAAX,EAAc,OAAO,CAACve,CAAD,EAAIue,CAAJ,CAAP;AACd,MAAIm3P,EAAE,GAAG,gBAAKn3P,CAAL,CAAT;AACAA,EAAAA,CAAC,GAAG,eAAIA,CAAJ,IAASs4N,QAAb;;AACA,MAAIvqI,EAAE,GAAG,gBAAKtsG,CAAL,IAAUA,CAAV,GAAc24O,YAAvB;AAAA,MACI0B,CAAC,GAAG,CAAC/tI,EAAE,GAAGA,EAAL,GAAU,CAAV,GAAc,IAAI/tF,CAAJ,GAAQA,CAAvB,IAA4B,eAAI+tF,EAAJ,CADpC;AAAA,MAEIi2M,EAAE,GAAGloE,CAAC,GAAGA,CAFb;AAAA,MAGI4X,CAAC,GAAG1zO,CAAC,IAAI,KAAKA,CAAC,GAAG,GAAJ,GAAU,eAAIA,CAAJ,EAAO,eAAIve,CAAJ,CAAP,CAAV,GAA2B,CAAhC,CAAJ,CAHT;AAAA,MAII6H,CAAC,GAAG7H,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAJpB;AAAA,MAKI1kB,CAAC,GAAG,EALR;;AAMA,KAAG;AACD,QAAIqoT,EAAE,GAAGjwD,CAAC,GAAGA,CAAb;AAAA,QACIC,CAAC,GAAG,CAAC,IAAID,CAAJ,GAAQiwD,EAAE,IAAIA,EAAE,GAAG,CAAT,CAAV,GAAwB,CAAzB,KAA+B,IAAIA,EAAJ,IAAUjwD,CAAC,GAAG,CAAd,CAA/B,CADR;AAAA,QAEIwwD,EAAE,GAAG,CAAC,IAAIxwD,CAAJ,GAAQiwD,EAAE,GAAGjwD,CAAb,GAAiB,EAAlB,KAAyB,IAAIiwD,EAAJ,GAASjwD,CAAlC,CAFT;AAAA,QAGIkwD,EAAE,GAAGjwD,CAAC,GAAGA,CAHb;AAAA,QAIIkwD,EAAE,GAAGnwD,CAAC,GAAGC,CAJb;AAAA,QAKIwwD,GAAG,GAAGzwD,CAAC,GAAGC,CALd;AAAA,QAMImwD,IAAI,GAAGK,GAAG,GAAGA,GANjB;AAAA,QAOIJ,IAAI,GAAGrwD,CAAC,GAAG,IAAIC,CAPnB;AAAA,QAQIswD,CAAC,GAAGH,IAAI,IAAIH,EAAE,GAAGC,EAAE,GAAGI,EAAV,GAAe,CAAnB,CAAJ,GAA4B,CAAC,IAAIL,EAAL,KAAYA,EAAE,IAAII,IAAI,GAAGA,IAAP,GAAc,IAAIH,EAAtB,CAAF,GAA8BA,EAAE,IAAI,KAAKC,EAAL,GAAU,IAAID,EAAlB,CAA5C,CARpC;AAAA,QASIQ,EAAE,GAAG,CAAC,CAAD,GAAKD,GAAL,IAAY,IAAIN,EAAJ,GAASD,EAAT,GAAc,CAAC,IAAI,IAAID,EAAR,GAAa,IAAIA,EAAJ,GAASA,EAAvB,KAA8B,IAAIO,EAAlC,CAAd,GAAsDN,EAAE,IAAI,CAAC,CAAD,GAAK,KAAKD,EAAV,GAAeK,EAAf,GAAoB,CAAC,CAAC,CAAD,GAAK,IAAIL,EAAT,GAAc,IAAIK,EAAnB,IAAyBE,EAAjD,CAAxD,GAA+GL,EAAE,IAAI,CAAC,CAAD,GAAK,KAAKF,EAAV,GAAe,CAAC,CAAC,EAAD,GAAM,KAAKA,EAAX,GAAgBK,EAAjB,IAAuBE,EAA1C,CAA7H,CATT;AAAA,QAUIG,KAAK,GAAG,gBAAKJ,CAAL,CAVZ;AAAA,QAWIh9S,CAAC,GAAG60O,CAAC,IAAIgoE,IAAI,GAAGF,EAAP,GAAY,CAAhB,CAAD,GAAsB,IAAIS,KAA1B,GAAkCt2M,EAAE,IAAI,IAAI+1M,IAAJ,GAAWE,EAAf,CAX5C;AAAA,QAYIM,EAAE,GAAGxoE,CAAC,IAAI,IAAI6X,CAAJ,GAAQuwD,EAAR,GAAa,IAAIC,GAAJ,IAAW,IAAID,EAAf,CAAjB,CAAD,GAAwCE,EAAE,GAAGC,KAA7C,GAAqD,IAAIF,GAAJ,IAAWroE,CAAC,IAAI,CAAC,CAAD,GAAK8nE,EAAL,GAAUE,IAAd,CAAD,GAAuB,IAAIO,KAAtC,KAAgD,IAAIH,EAApD,KAA2DF,EAAE,GAAG,IAAIF,IAApE,CAZ9D;AAaApwD,IAAAA,CAAC,IAAIziK,KAAK,GAAGhqF,CAAC,GAAGq9S,EAAjB;AACD,GAfD,QAeSrzN,KAAK,GAAG3nF,CAAR,GAAYA,CAAZ,GAAgBqvE,aAAhB,IAA2B,EAAEr9E,CAAF,GAAM,CAf1C;;AAgBA,SAAO,CACL,gBAAKmG,CAAL,KAAW,gBAAKq6O,CAAC,GAAGA,CAAJ,GAAQ,CAAb,IAAkBA,CAA7B,IAAkCxD,QAAlC,GAAuC,CADlC,EAEL6+B,EAAE,GAAG/8B,YAAL,GAAcsZ,CAFT,CAAP;AAID,CA/BD;;AAiCe,oBAAW;AACxB,SAAO,0BAAWgwD,iBAAX,EACFvyS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;;AC9DD;;AACA;;AAEA,SAASozS,aAAT,CAAuBhoE,EAAvB,EAA2BC,EAA3B,EAA+B4V,EAA/B,EAAmCD,EAAnC,EAAuC3oP,CAAvC,EAA0C;AACxC,WAASuzR,OAAT,CAAiBxE,MAAjB,EAAyBC,GAAzB,EAA8B;AAC5B,QAAI15R,CAAC,GAAGszP,EAAE,GAAG,eAAID,EAAE,GAAGqmC,GAAT,CAAb;AAAA,QACIpwD,EAAE,GAAG,gBAAK,IAAItpO,CAAC,GAAGA,CAAb,CADT;AAAA,QAEI61C,EAAE,GAAG,gBAAK,KAAK,IAAIyzL,EAAE,GAAG,eAAImwD,MAAM,IAAI/uR,CAAd,CAAd,CAAL,CAFT;AAGA,WAAO,CACL+yO,EAAE,GAAGnU,EAAL,GAAUzzL,EAAV,GAAe,eAAI4jP,MAAJ,CADV,EAEL/7C,EAAE,GAAG19O,CAAL,GAAS61C,EAFJ,CAAP;AAID;;AAEDooP,EAAAA,OAAO,CAAC/jC,MAAR,GAAiB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AAC9B,QAAIiiE,EAAE,GAAGxgF,CAAC,GAAG86O,EAAb;AAAA,QACIr6J,EAAE,GAAGliE,CAAC,GAAGw8N,EADb;AAAA,QAEI58M,CAAC,GAAG,gBAAKqiD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAFR;AAAA,QAGIn6E,CAAC,GAAG,IAAI,gBAAK63B,CAAC,GAAG,CAAT,CAHZ;AAIA,WAAO,CACL,iBAAMn+B,CAAC,GAAG,eAAIsG,CAAJ,CAAV,EAAkBw0O,EAAE,GAAG38M,CAAvB,IAA4Bp2B,CADvB,EAELo2B,CAAC,IAAI,gBAAK5f,CAAC,GAAG,eAAIjY,CAAJ,CAAJ,IAAcy0O,EAAE,GAAG4V,EAAL,GAAUxyN,CAAxB,CAAL,IAAmCuyN,EAFnC,CAAP;AAID,GATD;;AAWA,SAAO4qC,OAAP;AACD;;AAEM,SAASynB,SAAT,CAAmBC,QAAnB,EAA6Bld,SAA7B,EAAwCmd,SAAxC,EAAmD5iC,KAAnD,EAA0D;AAC/D;AACA,MAAI0X,IAAI,GAAGlhD,WAAK,CAAhB,CAF+D,CAI/D;AACA;;AACAmsE,EAAAA,QAAQ,GAAG,eAAIA,QAAJ,EAAc9rO,aAAd,CAAX;AACA4uN,EAAAA,SAAS,GAAG,eAAIA,SAAJ,EAAe5uN,aAAf,CAAZ,CAP+D,CAQ/D;;AACA8rO,EAAAA,QAAQ,GAAG,eAAIA,QAAJ,EAAcrqE,YAAd,CAAX;AACAmtD,EAAAA,SAAS,GAAG,eAAIA,SAAJ,EAAejvD,WAAK3/J,aAApB,CAAZ,CAV+D,CAW/D;;AACA+rO,EAAAA,SAAS,GAAG,eAAIA,SAAJ,EAAe,CAAf,CAAZ;AACAA,EAAAA,SAAS,GAAG,eAAIA,SAAJ,EAAe,MAAM/rO,aAArB,CAAZ,CAb+D,CAc/D;AACA;AACA;;AACAmpM,EAAAA,KAAK,GAAG,eAAIA,KAAJ,EAAWnpM,aAAX,CAAR,CAjB+D,CAmB/D;AACA;;AACA,MAAIgsO,UAAU,GAAGD,SAAS,GAAC,GAAV,GAAgB,CAAjC,CArB+D,CAsB/D;;AACA,MAAIE,MAAM,GAAI9iC,KAAK,GAAG,GAAtB,CAvB+D,CAwB/D;;AACA,MAAI3vB,EAAE,GAAG,gBAAKwyD,UAAU,GAAG,eAAInrB,IAAJ,CAAlB,IAA+BA,IAAxC;AAAA,MACIpnC,EAAE,GAAG,eAAIqyD,QAAJ,IAAgB,eAAItyD,EAAE,GAAG/X,YAAT,CADzB;AAAA,MAEI5wO,CAAC,GAAG+9R,SAAS,GAAGjvD,QAFpB;AAAA,MAGI1/N,CAAC,GAAG,gBAAKgsS,MAAM,GAAG,eAAIH,QAAQ,GAAG,CAAf,CAAT,GAA6B,eAAIld,SAAS,GAAG,CAAhB,CAAlC,CAHR;AAAA,MAIIhrD,EAAE,GAAG3jO,CAAC,GAAG,gBAAKpP,CAAC,GAAG4oP,EAAJ,GAASD,EAAd,CAJb;AAAA,MAKI3V,EAAE,GAAG,KAAK5jO,CAAC,GAAG,gBAAKpP,CAAC,GAAG4oP,EAAJ,GAASD,EAAd,CAAT,CALT;AAOA,SAAOoyD,aAAa,CAAChoE,EAAD,EAAKC,EAAL,EAAS4V,EAAT,EAAaD,EAAb,EAAiB3oP,CAAjB,CAApB;AACD;;AAEc,SAASq7S,MAAT,GAAkB;AAC/B;AACA,MAAIJ,QAAQ,GAAG,KAAKnyD,aAApB;AAAA,MACIi1C,SAAS,GAAG,KAAKj1C,aADrB;AAAA,MAEIoyD,SAAS,GAAG,EAFhB;AAAA,MAGI5iC,KAAK,GAAG,GAHZ;AAAA,MAIIu2B,MAAM,GAAG,iCAAkBmM,SAAlB,CAJb;AAAA,MAKIlgB,UAAU,GAAG+T,MAAM,CAACoM,QAAD,EAAWld,SAAX,EAAsBmd,SAAtB,EAAiC5iC,KAAjC,CALvB;;AAOAwiB,EAAAA,UAAU,CAACmgB,QAAX,GAAsB,UAASxiS,CAAT,EAAY;AAChC,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAACoM,QAAQ,GAAG,CAACxiS,CAAD,GAAKqwO,aAAjB,EAA0Bi1C,SAA1B,EAAqCmd,SAArC,EAAgD5iC,KAAhD,CAAzB,GAAkF2iC,QAAQ,GAAGlyD,aAApG;AACD,GAFD;;AAIA+xC,EAAAA,UAAU,CAACiD,SAAX,GAAuB,UAAStlR,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAACoM,QAAD,EAAWld,SAAS,GAAG,CAACtlR,CAAD,GAAKqwO,aAA5B,EAAqCoyD,SAArC,EAAgD5iC,KAAhD,CAAzB,GAAkFylB,SAAS,GAAGh1C,aAArG;AACD,GAFD;;AAGA+xC,EAAAA,UAAU,CAACogB,SAAX,GAAuB,UAASziS,CAAT,EAAY;AACjC,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAACoM,QAAD,EAAWld,SAAX,EAAsBmd,SAAS,GAAG,CAACziS,CAAnC,EAAsC6/P,KAAtC,CAAzB,GAAwE4iC,SAA/E;AACD,GAFD;;AAGApgB,EAAAA,UAAU,CAACxiB,KAAX,GAAmB,UAAS7/P,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,GAAmBy9S,MAAM,CAACoM,QAAD,EAAWld,SAAX,EAAsBmd,SAAtB,EAAiC5iC,KAAK,GAAG,CAAC7/P,CAA1C,CAAzB,GAAwE6/P,KAA/E;AACD,GAFD;;AAIA,SAAOwiB,UAAU,CACdnzR,KADI,CACE,OADF,CAAP;AAED;;AAEM,SAAS2zS,OAAT,GAAmB;AACxB,SAAOD,MAAM,GACRJ,QADE,CACO,EADP,EAEFld,SAFE,CAEQ,EAFR,EAGFmd,SAHE,CAGQ,CAHR,EAIF5iC,KAJE,CAII,GAJJ,EAKF3wQ,KALE,CAKI,OALJ,CAAP;AAMD;;;;;;;;;;ACjGD;;AACA;;AACA;;AAEA,IAAIsiP,CAAC,GAAG,IAAInb,QAAJ,GAAS,IAAI,gBAAK,CAAL,CAArB;AAAA,IACIob,CAAC,GAAG,IAAI,gBAAK,IAAIpb,QAAJ,GAAS,gBAAK,CAAL,CAAT,GAAmBmb,CAAxB,CADZ;AAGO,IAAIsxD,UAAU,GAAG,oCAAoBrxD,CAAC,GAAG,gBAAK,CAAL,CAAJ,GAAcpb,QAAlC,EAAsCob,CAAtC,EAAyCD,CAAC,GAAG,CAA7C,CAAjB;;;AAEQ,oBAAW;AACxB,SAAO,0BAAWsxD,UAAX,EACF5zS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACZD;;AACA;;AAEO,SAAS6zS,UAAT,CAAoBzsB,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,SAAO,CAACD,MAAM,GAAG,gBAAK,IAAI,IAAIC,GAAJ,GAAUA,GAAV,IAAiBlgD,WAAKA,QAAtB,CAAT,CAAV,EAA+CkgD,GAA/C,CAAP;AACD;;AAEDwsB,UAAU,CAAChsD,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,SAAO,CAACve,CAAC,GAAG,gBAAK,IAAI,IAAIue,CAAJ,GAAQA,CAAR,IAAas4N,WAAKA,QAAlB,CAAT,CAAL,EAAsCt4N,CAAtC,CAAP;AACD,CAFD;;AAIe,oBAAW;AACxB,SAAO,0BAAWglS,UAAX,EACF7zS,KADE,CACI,MADJ,CAAP;AAED;;;;;;;;;;ACdD;;AACA;;AAEO,SAAS8zS,UAAT,CAAoB1sB,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAII,MAAM,GAAG,eAAIJ,GAAJ,CAAb;AAAA,MACIK,MAAM,GAAG,eAAIN,MAAJ,IAAcK,MAD3B;AAAA,MAEIssB,QAAQ,GAAG,IAAIrsB,MAFnB;AAAA,MAGIsT,SAAS,GAAG,eAAI5T,MAAM,GAAG,iBAAM,eAAIA,MAAJ,IAAcK,MAApB,EAA4B,CAAC,eAAIJ,GAAJ,CAA7B,CAAb,CAHhB;AAAA,MAII4T,SAAS,GAAG,eAAI7T,MAAJ,CAJhB;AAKAK,EAAAA,MAAM,GAAG,gBAAK,IAAIC,MAAM,GAAGA,MAAlB,CAAT;AACA,SAAO,CACLuT,SAAS,GAAGxT,MAAZ,GAAqBuT,SAAS,GAAG+Y,QAD5B,EAEL,CAAC/Y,SAAD,GAAavT,MAAb,GAAsBwT,SAAS,GAAG8Y,QAF7B,CAAP;AAID;;AAEDD,UAAU,CAACjsD,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAI4nC,CAAC,GAAG,CAACnmD,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAb,IAAkB,CAAC,CAA3B;AAAA,MACIpH,CAAC,GAAG,gBAAK,CAACgvC,CAAD,IAAM,IAAIA,CAAV,CAAL,CADR;AAAA,MAEIv+C,CAAC,GAAG2W,CAAC,GAAG4nC,CAAJ,GAAQnmD,CAAC,GAAGmX,CAFpB;AAAA,MAGIpW,CAAC,GAAGf,CAAC,GAAGmmD,CAAJ,GAAQ5nC,CAAC,GAAGpH,CAHpB;AAAA,MAIIkjO,CAAC,GAAG,gBAAKt5O,CAAC,GAAGA,CAAJ,GAAQ6G,CAAC,GAAGA,CAAjB,CAJR;AAKA,SAAO,CACL,iBAAMuP,CAAC,GAAGvP,CAAV,EAAayyO,CAAC,IAAI,IAAIl0L,CAAR,CAAd,CADK,EAELk0L,CAAC,GAAG,CAAC,gBAAKljO,CAAC,GAAGpW,CAAJ,GAAQs5O,CAAb,CAAJ,GAAsB,CAFlB,CAAP;AAID,CAVD;;AAYe,oBAAW;AACxB,SAAO,0BAAWmpE,UAAX,EACFpvD,MADE,CACK,CAAC,CAAD,EAAI,CAAC,EAAL,EAAS,EAAT,CADL,EAEF1kP,KAFE,CAEI,MAFJ,EAGF+1R,SAHE,CAGQ,MAAM,IAHd,CAAP;AAID;;;;;;;;;;ACjCD;;AACA;;AACA;;AAEO,SAASie,UAAT,CAAoB5sB,MAApB,EAA4BC,GAA5B,EAAiC;AACtC,MAAIr8E,WAAW,GAAG,uBAAUo8E,MAAV,EAAkBC,GAAlB,CAAlB;AACA,SAAO,CACL,CAACr8E,WAAW,CAAC,CAAD,CAAX,GAAiBo8E,MAAM,GAAGn+C,YAA3B,IAAqC,CADhC,EAEL,CAACj+B,WAAW,CAAC,CAAD,CAAX,GAAiBq8E,GAAlB,IAAyB,CAFpB,CAAP;AAID;;AAED2sB,UAAU,CAACnsD,MAAX,GAAoB,UAASv3P,CAAT,EAAYue,CAAZ,EAAe;AACjC,MAAIu4Q,MAAM,GAAG92R,CAAb;AAAA,MAAgB+2R,GAAG,GAAGx4Q,CAAtB;AAAA,MAAyB1kB,CAAC,GAAG,EAA7B;;AACA,KAAG;AACD,QAAI22S,MAAM,GAAG,eAAIzZ,GAAJ,CAAb;AAAA,QACI0Z,MAAM,GAAG,eAAI1Z,GAAJ,CADb;AAAA,QAEI4sB,QAAQ,GAAG,eAAI,IAAI5sB,GAAR,CAFf;AAAA,QAGI6sB,OAAO,GAAGnT,MAAM,GAAGA,MAHvB;AAAA,QAIIoT,OAAO,GAAGrT,MAAM,GAAGA,MAJvB;AAAA,QAKIsT,SAAS,GAAG,eAAIhtB,MAAJ,CALhB;AAAA,QAMIitB,WAAW,GAAG,eAAIjtB,MAAM,GAAG,CAAb,CANlB;AAAA,QAOIktB,WAAW,GAAG,eAAIltB,MAAM,GAAG,CAAb,CAPlB;AAAA,QAQImtB,YAAY,GAAGD,WAAW,GAAGA,WARjC;AAAA,QASI9xD,CAAC,GAAG,IAAI2xD,OAAO,GAAGE,WAAV,GAAwBA,WATpC;AAAA,QAUI5xD,CAAC,GAAGD,CAAC,GAAG,gBAAKs+C,MAAM,GAAGuT,WAAd,IAA6B,gBAAKvB,CAAC,GAAG,IAAItwD,CAAb,CAAhC,GAAkDswD,CAAC,GAAG,CAV/D;AAAA,QAWIA,CAXJ;AAAA,QAYI98B,EAAE,GAAG,OAAO,IAAIvzB,CAAJ,GAAQq+C,MAAR,GAAiBwT,WAAjB,GAA+BltB,MAAM,GAAGn+C,YAA/C,IAAyD34O,CAZlE;AAAA,QAaI2lR,EAAE,GAAG,OAAOxzB,CAAC,GAAGs+C,MAAJ,GAAa1Z,GAApB,IAA2Bx4Q,CAbpC;AAAA,QAcI2lS,SAAS,GAAG,MAAM1B,CAAN,IAAWqB,OAAO,GAAGI,YAAV,GAAyB9xD,CAAC,GAAGq+C,MAAJ,GAAauT,WAAb,GAA2BH,OAA/D,IAA0E,MAAMjrE,YAdhG;AAAA,QAeIwrE,MAAM,GAAG3B,CAAC,IAAIsB,SAAS,GAAGH,QAAZ,GAAuB,CAAvB,GAA2BxxD,CAAC,GAAGs+C,MAAJ,GAAauT,WAA5C,CAfd;AAAA,QAgBII,SAAS,GAAG,QAAQ5B,CAAR,IAAamB,QAAQ,GAAGK,WAAX,GAAyB7xD,CAAC,GAAGs+C,MAAJ,GAAaoT,OAAb,GAAuBC,SAA7D,CAhBhB;AAAA,QAiBIO,MAAM,GAAG,MAAM7B,CAAN,IAAWoB,OAAO,GAAGG,WAAV,GAAwB5xD,CAAC,GAAG8xD,YAAJ,GAAmBzT,MAAtD,IAAgE,GAjB7E;AAAA,QAkBIhmK,WAAW,GAAG25K,MAAM,GAAGC,SAAT,GAAqBC,MAAM,GAAGH,SAlBhD;AAAA,QAmBII,OAAO,GAAG,CAAC3+B,EAAE,GAAGw+B,MAAL,GAAcz+B,EAAE,GAAG2+B,MAApB,IAA8B75K,WAnB5C;AAAA,QAoBI+5K,IAAI,GAAG,CAAC7+B,EAAE,GAAG0+B,SAAL,GAAiBz+B,EAAE,GAAGu+B,SAAvB,IAAoC15K,WApB/C;AAqBAssJ,IAAAA,MAAM,IAAIwtB,OAAV,EAAmBvtB,GAAG,IAAIwtB,IAA1B;AACD,GAvBD,QAuBS,CAAC,eAAID,OAAJ,IAAeptO,aAAf,IAA0B,eAAIqtO,IAAJ,IAAYrtO,aAAvC,KAAmD,EAAEr9E,CAAF,GAAM,CAvBlE;;AAwBA,SAAO,CAACi9R,MAAD,EAASC,GAAT,CAAP;AACD,CA3BD;;AA6Be,oBAAW;AACxB,SAAO,0BAAW2sB,UAAX,EACFh0S,KADE,CACI,OADJ,CAAP;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;AC9FA;;AACA;;AAEA,MAAM80S,WAAW,GAAG,qBAApB;AACA,MAAMC,oBAAoB,GAAG,CAAC;AAC9B,WAD6B,EAChB,YADgB,EACF,OADE,EACO,WADP,EACoB,QADpB,EAC8B,QAD9B,EACwC,WADxC,EACqD,WADrD,EACkE,UADlE,EAC8E,UAD9E,EAC0F;AACvH,aAF6B,EAEd,UAFc,EAEF,UAFE,EAEU,OAFV,EAEmB,UAFnB,EAE+B,QAF/B,EAEyC,OAFzC,EAEkD,SAFlD,EAE6D,MAF7D,CAA7B;AAGA;AACA;AACA;;;;AAEA,SAAShzH,MAAT,CAAgB33K,IAAhB,EAAsBrU,WAAtB,EAAmC;AACjC,SAAO,SAASo9R,UAAT,GAAsB;AAC3B,UAAM1kQ,CAAC,GAAG14B,WAAW,EAArB;AACA04B,IAAAA,CAAC,CAACrkB,IAAF,GAASA,IAAT;AACAqkB,IAAAA,CAAC,CAACj2B,IAAF,GAAS,sBAAU26R,UAAV,CAAqB1kQ,CAArB,CAAT;;AAEAA,IAAAA,CAAC,CAACwwC,IAAF,GAASxwC,CAAC,CAACwwC,IAAF,IAAU,YAAY;AAC7B,YAAMroE,CAAC,GAAGu8R,UAAU,EAApB;AACA4hB,MAAAA,oBAAoB,CAAC9mT,OAArB,CAA6BizE,IAAI,IAAI;AACnC,YAAIzyC,CAAC,CAACyyC,IAAD,CAAL,EAAatqE,CAAC,CAACsqE,IAAD,CAAD,CAAQzyC,CAAC,CAACyyC,IAAD,CAAD,EAAR;AACd,OAFD;AAGAtqE,MAAAA,CAAC,CAAC4B,IAAF,CAAOs6R,WAAP,CAAmBrkQ,CAAC,CAACj2B,IAAF,CAAOs6R,WAAP,EAAnB;AACA,aAAOl8R,CAAP;AACD,KAPD;;AASA,WAAO63B,CAAP;AACD,GAfD;AAgBD;;AAED,SAAS0kQ,UAAT,CAAoB/oR,IAApB,EAA0B84E,IAA1B,EAAgC;AAC9B,MAAI,CAAC94E,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAA7B,EAAuC;AACrC,UAAM,IAAI1hB,KAAJ,CAAU,wCAAV,CAAN;AACD;;AAED0hB,EAAAA,IAAI,GAAGA,IAAI,CAAC9b,WAAL,EAAP;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxBurT,IAAAA,WAAW,CAAC5qS,IAAD,CAAX,GAAoB23K,MAAM,CAAC33K,IAAD,EAAO84E,IAAP,CAA1B;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO8xN,WAAW,CAAC5qS,IAAD,CAAX,IAAqB,IAA5B;AACD;AACF;;AACD,SAAS6qS,iBAAT,CAA2B/xN,IAA3B,EAAiC;AAC/B,SAAOA,IAAI,IAAIA,IAAI,CAAC1qF,IAAb,IAAqBs8S,WAA5B;AACD;;AACD,MAAME,WAAW,GAAG;AAClB;AACAE,EAAAA,MAAM,EAAEC,gBAFU;AAGlBC,EAAAA,SAAS,EAAEC,mBAHO;AAIlBC,EAAAA,kBAAkB,EAAEC,4BAJF;AAKlBC,EAAAA,oBAAoB,EAAEC,8BALJ;AAMlBC,EAAAA,cAAc,EAAEC,wBANE;AAOlBC,EAAAA,cAAc,EAAEC,wBAPE;AAQlBC,EAAAA,gBAAgB,EAAEC,0BARA;AASlBC,EAAAA,UAAU,EAAEC,oBATM;AAUlB5U,EAAAA,eAAe,EAAE6U,yBAVC;AAWlBC,EAAAA,QAAQ,EAAEC,kBAXQ;AAYlBhsL,EAAAA,QAAQ,EAAEisL,kBAZQ;AAalBC,EAAAA,QAAQ,EAAEC,kBAbQ;AAclBC,EAAAA,SAAS,EAAEC,6BAdO;AAelBC,EAAAA,aAAa,EAAEC,uBAfG;AAgBlBC,EAAAA,YAAY,EAAExV,sBAhBI;AAiBlByV,EAAAA,aAAa,EAAEC,uBAjBG;AAkBlBC,EAAAA,kBAAkB,EAAEC;AAlBF,CAApB;;AAqBA,KAAK,MAAM5oT,GAAX,IAAkB4mT,WAAlB,EAA+B;AAC7B7hB,EAAAA,UAAU,CAAC/kS,GAAD,EAAM4mT,WAAW,CAAC5mT,GAAD,CAAjB,CAAV;AACD;;;;;;;;;;;;;;;;;;ACtED;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASrD,IAAT,GAAgB,CAAE;;AAElB,MAAMksT,KAAK,GAAG,CAAC,EAAD,EAAK,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAL,EAAiC,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAjC,EAA6D,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAA7D,EAAyF,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAzF,EAAqH,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,EAA2B,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAA3B,CAArH,EAA2K,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAA3K,EAAuM,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAvM,EAAmO,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAnO,EAA+P,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAA/P,EAA2R,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,EAA2B,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAA3B,CAA3R,EAAiV,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAjV,EAA6W,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAA7W,EAAyY,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAzY,EAAqa,CAAC,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,EAAa,CAAC,GAAD,EAAM,GAAN,CAAb,CAAD,CAAra,EAAic,EAAjc,CAAd,EAAod;;AAEpd,SAASC,QAAT,GAAqB;AACnB,MAAIjhS,EAAE,GAAG,CAAT;AAAA,MACIhH,EAAE,GAAG,CADT;AAAA,MAEIkkN,MAAM,GAAGgkF,YAFb;;AAIA,WAASD,QAAT,CAAkB3iT,MAAlB,EAA0By8M,EAA1B,EAA8B;AAC5B,WAAOA,EAAE,CAACp9M,GAAH,CAAOzG,KAAK,IAAIiqT,OAAO,CAAC7iT,MAAD,EAASpH,KAAT,CAAvB,CAAP;AACD,GAPkB,CAOjB;AACF;;;AAGA,WAASiqT,OAAT,CAAiB7iT,MAAjB,EAAyBpH,KAAzB,EAAgC;AAC9B,QAAIigN,QAAQ,GAAG,EAAf;AAAA,QACIohG,KAAK,GAAG,EADZ;AAEA6I,IAAAA,QAAQ,CAAC9iT,MAAD,EAASpH,KAAT,EAAgBw+M,IAAI,IAAI;AAC9BwnB,MAAAA,MAAM,CAACxnB,IAAD,EAAOp3M,MAAP,EAAepH,KAAf,CAAN;AACA,UAAI8/M,IAAI,CAACtB,IAAD,CAAJ,GAAa,CAAjB,EAAoByB,QAAQ,CAAChjN,IAAT,CAAc,CAACuhN,IAAD,CAAd,EAApB,KAA+C6iG,KAAK,CAACpkT,IAAN,CAAWuhN,IAAX;AAChD,KAHO,CAAR;AAIA6iG,IAAAA,KAAK,CAACvgT,OAAN,CAAcwgT,IAAI,IAAI;AACpB,WAAK,IAAItkT,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG+0M,QAAQ,CAAC3jN,MAAxB,EAAgCmiN,OAArC,EAA8CzhN,CAAC,GAAGkO,CAAlD,EAAqD,EAAElO,CAAvD,EAA0D;AACxD,YAAI6yQ,QAAQ,CAAC,CAACpxD,OAAO,GAAGwB,QAAQ,CAACjjN,CAAD,CAAnB,EAAwB,CAAxB,CAAD,EAA6BskT,IAA7B,CAAR,KAA+C,CAAC,CAApD,EAAuD;AACrD7iG,UAAAA,OAAO,CAACxhN,IAAR,CAAaqkT,IAAb;AACA;AACD;AACF;AACF,KAPD;AAQA,WAAO;AACLrkS,MAAAA,IAAI,EAAE,cADD;AAELjd,MAAAA,KAAK,EAAEA,KAFF;AAGL69M,MAAAA,WAAW,EAAEoC;AAHR,KAAP;AAKD,GA/BkB,CA+BjB;AACF;;;AAGA,WAASiqG,QAAT,CAAkB9iT,MAAlB,EAA0BpH,KAA1B,EAAiC4zE,QAAjC,EAA2C;AACzC,QAAI+qI,eAAe,GAAG,IAAI7hN,KAAJ,EAAtB;AAAA,QACI8hN,aAAa,GAAG,IAAI9hN,KAAJ,EADpB;AAAA,QAEIqG,CAFJ;AAAA,QAGIue,CAHJ;AAAA,QAIIumM,EAJJ;AAAA,QAKItkI,EALJ;AAAA,QAMIC,EANJ;AAAA,QAOI0wK,EAPJ,CADyC,CAQjC;;AAERnxP,IAAAA,CAAC,GAAGue,CAAC,GAAG,CAAC,CAAT;AACAiiE,IAAAA,EAAE,GAAGv8E,MAAM,CAAC,CAAD,CAAN,IAAapH,KAAlB;AACA8pT,IAAAA,KAAK,CAACnmO,EAAE,IAAI,CAAP,CAAL,CAAe7iF,OAAf,CAAuBqpT,MAAvB;;AAEA,WAAO,EAAEhnT,CAAF,GAAM2lB,EAAE,GAAG,CAAlB,EAAqB;AACnBm/L,MAAAA,EAAE,GAAGtkI,EAAL,EAASA,EAAE,GAAGv8E,MAAM,CAACjE,CAAC,GAAG,CAAL,CAAN,IAAiBnD,KAA/B;AACA8pT,MAAAA,KAAK,CAAC7hG,EAAE,GAAGtkI,EAAE,IAAI,CAAZ,CAAL,CAAoB7iF,OAApB,CAA4BqpT,MAA5B;AACD;;AAEDL,IAAAA,KAAK,CAACnmO,EAAE,IAAI,CAAP,CAAL,CAAe7iF,OAAf,CAAuBqpT,MAAvB,EAnByC,CAmBT;;AAEhC,WAAO,EAAEzoS,CAAF,GAAMI,EAAE,GAAG,CAAlB,EAAqB;AACnB3e,MAAAA,CAAC,GAAG,CAAC,CAAL;AACAwgF,MAAAA,EAAE,GAAGv8E,MAAM,CAACsa,CAAC,GAAGoH,EAAJ,GAASA,EAAV,CAAN,IAAuB9oB,KAA5B;AACA4jF,MAAAA,EAAE,GAAGx8E,MAAM,CAACsa,CAAC,GAAGoH,EAAL,CAAN,IAAkB9oB,KAAvB;AACA8pT,MAAAA,KAAK,CAACnmO,EAAE,IAAI,CAAN,GAAUC,EAAE,IAAI,CAAjB,CAAL,CAAyB9iF,OAAzB,CAAiCqpT,MAAjC;;AAEA,aAAO,EAAEhnT,CAAF,GAAM2lB,EAAE,GAAG,CAAlB,EAAqB;AACnBm/L,QAAAA,EAAE,GAAGtkI,EAAL,EAASA,EAAE,GAAGv8E,MAAM,CAACsa,CAAC,GAAGoH,EAAJ,GAASA,EAAT,GAAc3lB,CAAd,GAAkB,CAAnB,CAAN,IAA+BnD,KAA7C;AACAs0P,QAAAA,EAAE,GAAG1wK,EAAL,EAASA,EAAE,GAAGx8E,MAAM,CAACsa,CAAC,GAAGoH,EAAJ,GAAS3lB,CAAT,GAAa,CAAd,CAAN,IAA0BnD,KAAxC;AACA8pT,QAAAA,KAAK,CAAC7hG,EAAE,GAAGtkI,EAAE,IAAI,CAAX,GAAeC,EAAE,IAAI,CAArB,GAAyB0wK,EAAE,IAAI,CAAhC,CAAL,CAAwCxzP,OAAxC,CAAgDqpT,MAAhD;AACD;;AAEDL,MAAAA,KAAK,CAACnmO,EAAE,GAAGC,EAAE,IAAI,CAAZ,CAAL,CAAoB9iF,OAApB,CAA4BqpT,MAA5B;AACD,KAlCwC,CAkCvC;;;AAGFhnT,IAAAA,CAAC,GAAG,CAAC,CAAL;AACAygF,IAAAA,EAAE,GAAGx8E,MAAM,CAACsa,CAAC,GAAGoH,EAAL,CAAN,IAAkB9oB,KAAvB;AACA8pT,IAAAA,KAAK,CAAClmO,EAAE,IAAI,CAAP,CAAL,CAAe9iF,OAAf,CAAuBqpT,MAAvB;;AAEA,WAAO,EAAEhnT,CAAF,GAAM2lB,EAAE,GAAG,CAAlB,EAAqB;AACnBwrO,MAAAA,EAAE,GAAG1wK,EAAL,EAASA,EAAE,GAAGx8E,MAAM,CAACsa,CAAC,GAAGoH,EAAJ,GAAS3lB,CAAT,GAAa,CAAd,CAAN,IAA0BnD,KAAxC;AACA8pT,MAAAA,KAAK,CAAClmO,EAAE,IAAI,CAAN,GAAU0wK,EAAE,IAAI,CAAjB,CAAL,CAAyBxzP,OAAzB,CAAiCqpT,MAAjC;AACD;;AAEDL,IAAAA,KAAK,CAAClmO,EAAE,IAAI,CAAP,CAAL,CAAe9iF,OAAf,CAAuBqpT,MAAvB;;AAEA,aAASA,MAAT,CAAgB54R,IAAhB,EAAsB;AACpB,UAAIzoB,KAAK,GAAG,CAACyoB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,IAAapuB,CAAd,EAAiBouB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,IAAa7P,CAA9B,CAAZ;AAAA,UACI/S,GAAG,GAAG,CAAC4iB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,IAAapuB,CAAd,EAAiBouB,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,IAAa7P,CAA9B,CADV;AAAA,UAEIo5K,UAAU,GAAGh4L,KAAK,CAACgG,KAAD,CAFtB;AAAA,UAGIkyL,QAAQ,GAAGl4L,KAAK,CAAC6L,GAAD,CAHpB;AAAA,UAIIhG,CAJJ;AAAA,UAKI8iC,CALJ;;AAOA,UAAI9iC,CAAC,GAAGi2M,aAAa,CAAC9jB,UAAD,CAArB,EAAmC;AACjC,YAAIrvJ,CAAC,GAAGkzK,eAAe,CAAC3jB,QAAD,CAAvB,EAAmC;AACjC,iBAAO4jB,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAApB;AACA,iBAAOgwM,eAAe,CAAClzK,CAAC,CAAC3iC,KAAH,CAAtB;;AAEA,cAAIH,CAAC,KAAK8iC,CAAV,EAAa;AACX9iC,YAAAA,CAAC,CAAC61M,IAAF,CAAOvhN,IAAP,CAAY0R,GAAZ;AACAilE,YAAAA,QAAQ,CAACjrE,CAAC,CAAC61M,IAAH,CAAR;AACD,WAHD,MAGO;AACLG,YAAAA,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAf,GAA2B81M,aAAa,CAACnzK,CAAC,CAAC98B,GAAH,CAAb,GAAuB;AAChD7F,cAAAA,KAAK,EAAEH,CAAC,CAACG,KADuC;AAEhD6F,cAAAA,GAAG,EAAE88B,CAAC,CAAC98B,GAFyC;AAGhD6vM,cAAAA,IAAI,EAAE71M,CAAC,CAAC61M,IAAF,CAAOjiN,MAAP,CAAckvC,CAAC,CAAC+yK,IAAhB;AAH0C,aAAlD;AAKD;AACF,SAdD,MAcO;AACL,iBAAOI,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAApB;AACAhG,UAAAA,CAAC,CAAC61M,IAAF,CAAOvhN,IAAP,CAAY0R,GAAZ;AACAiwM,UAAAA,aAAa,CAACj2M,CAAC,CAACgG,GAAF,GAAQqsL,QAAT,CAAb,GAAkCryL,CAAlC;AACD;AACF,OApBD,MAoBO,IAAIA,CAAC,GAAGg2M,eAAe,CAAC3jB,QAAD,CAAvB,EAAmC;AACxC,YAAIvvJ,CAAC,GAAGmzK,aAAa,CAAC9jB,UAAD,CAArB,EAAmC;AACjC,iBAAO6jB,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAtB;AACA,iBAAO81M,aAAa,CAACnzK,CAAC,CAAC98B,GAAH,CAApB;;AAEA,cAAIhG,CAAC,KAAK8iC,CAAV,EAAa;AACX9iC,YAAAA,CAAC,CAAC61M,IAAF,CAAOvhN,IAAP,CAAY0R,GAAZ;AACAilE,YAAAA,QAAQ,CAACjrE,CAAC,CAAC61M,IAAH,CAAR;AACD,WAHD,MAGO;AACLG,YAAAA,eAAe,CAAClzK,CAAC,CAAC3iC,KAAH,CAAf,GAA2B81M,aAAa,CAACj2M,CAAC,CAACgG,GAAH,CAAb,GAAuB;AAChD7F,cAAAA,KAAK,EAAE2iC,CAAC,CAAC3iC,KADuC;AAEhD6F,cAAAA,GAAG,EAAEhG,CAAC,CAACgG,GAFyC;AAGhD6vM,cAAAA,IAAI,EAAE/yK,CAAC,CAAC+yK,IAAF,CAAOjiN,MAAP,CAAcoM,CAAC,CAAC61M,IAAhB;AAH0C,aAAlD;AAKD;AACF,SAdD,MAcO;AACL,iBAAOG,eAAe,CAACh2M,CAAC,CAACG,KAAH,CAAtB;AACAH,UAAAA,CAAC,CAAC61M,IAAF,CAAOz6K,OAAP,CAAej7B,KAAf;AACA61M,UAAAA,eAAe,CAACh2M,CAAC,CAACG,KAAF,GAAUgyL,UAAX,CAAf,GAAwCnyL,CAAxC;AACD;AACF,OApBM,MAoBA;AACLg2M,QAAAA,eAAe,CAAC7jB,UAAD,CAAf,GAA8B8jB,aAAa,CAAC5jB,QAAD,CAAb,GAA0B;AACtDlyL,UAAAA,KAAK,EAAEgyL,UAD+C;AAEtDnsL,UAAAA,GAAG,EAAEqsL,QAFiD;AAGtDwjB,UAAAA,IAAI,EAAE,CAAC11M,KAAD,EAAQ6F,GAAR;AAHgD,SAAxD;AAKD;AACF;AACF;;AAED,WAAS7L,KAAT,CAAey7M,KAAf,EAAsB;AACpB,WAAOA,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAeA,KAAK,CAAC,CAAD,CAAL,IAAYz1L,EAAE,GAAG,CAAjB,IAAsB,CAA5C;AACD;;AAED,WAASkhS,YAAT,CAAsBxrG,IAAtB,EAA4Bp3M,MAA5B,EAAoCpH,KAApC,EAA2C;AACzCw+M,IAAAA,IAAI,CAAC19M,OAAL,CAAay9M,KAAK,IAAI;AACpB,UAAIp7M,CAAC,GAAGo7M,KAAK,CAAC,CAAD,CAAb;AAAA,UACI78L,CAAC,GAAG68L,KAAK,CAAC,CAAD,CADb;AAAA,UAEI6rG,EAAE,GAAGjnT,CAAC,GAAG,CAFb;AAAA,UAGIknT,EAAE,GAAG3oS,CAAC,GAAG,CAHb;AAAA,UAIIq6D,EAJJ;AAAA,UAKIR,EAAE,GAAGn0E,MAAM,CAACijT,EAAE,GAAGvhS,EAAL,GAAUshS,EAAX,CALf;;AAOA,UAAIjnT,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG2lB,EAAb,IAAmBshS,EAAE,KAAKjnT,CAA9B,EAAiC;AAC/B44E,QAAAA,EAAE,GAAG30E,MAAM,CAACijT,EAAE,GAAGvhS,EAAL,GAAUshS,EAAV,GAAe,CAAhB,CAAX;AACA7rG,QAAAA,KAAK,CAAC,CAAD,CAAL,GAAWp7M,CAAC,GAAG,CAACnD,KAAK,GAAG+7E,EAAT,KAAgBR,EAAE,GAAGQ,EAArB,CAAJ,GAA+B,GAA1C;AACD;;AAED,UAAIr6D,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAGI,EAAb,IAAmBuoS,EAAE,KAAK3oS,CAA9B,EAAiC;AAC/Bq6D,QAAAA,EAAE,GAAG30E,MAAM,CAAC,CAACijT,EAAE,GAAG,CAAN,IAAWvhS,EAAX,GAAgBshS,EAAjB,CAAX;AACA7rG,QAAAA,KAAK,CAAC,CAAD,CAAL,GAAW78L,CAAC,GAAG,CAAC1hB,KAAK,GAAG+7E,EAAT,KAAgBR,EAAE,GAAGQ,EAArB,CAAJ,GAA+B,GAA1C;AACD;AACF,KAjBD;AAkBD;;AAEDguO,EAAAA,QAAQ,CAACE,OAAT,GAAmBA,OAAnB;;AAEAF,EAAAA,QAAQ,CAACtlT,IAAT,GAAgB,UAAUkf,CAAV,EAAa;AAC3B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAACwsB,EAAD,EAAKhH,EAAL,CAAP;;AAEvB,QAAIywR,EAAE,GAAGxvS,IAAI,CAAC+H,KAAL,CAAW6Y,CAAC,CAAC,CAAD,CAAZ,CAAT;AAAA,QACIg2O,EAAE,GAAG52P,IAAI,CAAC+H,KAAL,CAAW6Y,CAAC,CAAC,CAAD,CAAZ,CADT;;AAGA,QAAI,EAAE4uR,EAAE,IAAI,CAAN,IAAW54C,EAAE,IAAI,CAAnB,CAAJ,EAA2B,qBAAM,cAAN;AAC3B,WAAO7wO,EAAE,GAAGypR,EAAL,EAASzwR,EAAE,GAAG63O,EAAd,EAAkBowD,QAAzB;AACD,GARD;;AAUAA,EAAAA,QAAQ,CAAC/jF,MAAT,GAAkB,UAAUriN,CAAV,EAAa;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0pO,MAAM,GAAGriN,CAAC,GAAGqmS,YAAH,GAAkBpsT,IAA5B,EAAkCmsT,QAAtD,IAAkE/jF,MAAM,KAAKgkF,YAApF;AACD,GAFD;;AAIA,SAAOD,QAAP;AACD;;AAED,SAASjqG,IAAT,CAActB,IAAd,EAAoB;AAClB,MAAIxhN,CAAC,GAAG,CAAR;AAAA,MACIkO,CAAC,GAAGszM,IAAI,CAACliN,MADb;AAAA,MAEIwjN,IAAI,GAAGtB,IAAI,CAACtzM,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBszM,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAjB,GAA8BA,IAAI,CAACtzM,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBszM,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAF1D;;AAIA,SAAO,EAAExhN,CAAF,GAAMkO,CAAb,EAAgB40M,IAAI,IAAItB,IAAI,CAACxhN,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBwhN,IAAI,CAACxhN,CAAD,CAAJ,CAAQ,CAAR,CAAjB,GAA8BwhN,IAAI,CAACxhN,CAAC,GAAG,CAAL,CAAJ,CAAY,CAAZ,IAAiBwhN,IAAI,CAACxhN,CAAD,CAAJ,CAAQ,CAAR,CAAvD;;AAEhB,SAAO8iN,IAAP;AACD;;AAED,SAAS+vD,QAAT,CAAkBrxD,IAAlB,EAAwB8iG,IAAxB,EAA8B;AAC5B,MAAItkT,CAAC,GAAG,CAAC,CAAT;AAAA,MACIkO,CAAC,GAAGo2S,IAAI,CAAChlT,MADb;AAAA,MAEImN,CAFJ;;AAIA,SAAO,EAAEzM,CAAF,GAAMkO,CAAb,EAAgB,IAAIzB,CAAC,GAAG6gT,YAAY,CAAC9rG,IAAD,EAAO8iG,IAAI,CAACtkT,CAAD,CAAX,CAApB,EAAqC,OAAOyM,CAAP;;AAErD,SAAO,CAAP;AACD;;AAED,SAAS6gT,YAAT,CAAsB9rG,IAAtB,EAA4BD,KAA5B,EAAmC;AACjC,MAAIp7M,CAAC,GAAGo7M,KAAK,CAAC,CAAD,CAAb;AAAA,MACI78L,CAAC,GAAG68L,KAAK,CAAC,CAAD,CADb;AAAA,MAEIsxD,QAAQ,GAAG,CAAC,CAFhB;;AAIA,OAAK,IAAI7yQ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGszM,IAAI,CAACliN,MAApB,EAA4B2K,CAAC,GAAGiE,CAAC,GAAG,CAAzC,EAA4ClO,CAAC,GAAGkO,CAAhD,EAAmDjE,CAAC,GAAGjK,CAAC,EAAxD,EAA4D;AAC1D,QAAIg9O,EAAE,GAAGx7B,IAAI,CAACxhN,CAAD,CAAb;AAAA,QACI4xS,EAAE,GAAG50D,EAAE,CAAC,CAAD,CADX;AAAA,QAEI0mE,EAAE,GAAG1mE,EAAE,CAAC,CAAD,CAFX;AAAA,QAGI2mE,EAAE,GAAGniG,IAAI,CAACv3M,CAAD,CAHb;AAAA,QAII25S,EAAE,GAAGD,EAAE,CAAC,CAAD,CAJX;AAAA,QAKIE,EAAE,GAAGF,EAAE,CAAC,CAAD,CALX;AAMA,QAAI4J,eAAe,CAACvwE,EAAD,EAAK2mE,EAAL,EAASpiG,KAAT,CAAnB,EAAoC,OAAO,CAAP;AACpC,QAAImiG,EAAE,GAAGh/R,CAAL,KAAWm/R,EAAE,GAAGn/R,CAAhB,IAAqBve,CAAC,GAAG,CAACy9S,EAAE,GAAGhS,EAAN,KAAaltR,CAAC,GAAGg/R,EAAjB,KAAwBG,EAAE,GAAGH,EAA7B,IAAmC9R,EAAhE,EAAoE/+B,QAAQ,GAAG,CAACA,QAAZ;AACrE;;AAED,SAAOA,QAAP;AACD;;AAED,SAAS06C,eAAT,CAAyBrmT,CAAzB,EAA4B6G,CAA5B,EAA+BtB,CAA/B,EAAkC;AAChC,MAAIzM,CAAJ;AACA,SAAOwtT,SAAS,CAACtmT,CAAD,EAAI6G,CAAJ,EAAOtB,CAAP,CAAT,IAAsBghT,MAAM,CAACvmT,CAAC,CAAClH,CAAC,GAAG,EAAEkH,CAAC,CAAC,CAAD,CAAD,KAAS6G,CAAC,CAAC,CAAD,CAAZ,CAAL,CAAF,EAA0BtB,CAAC,CAACzM,CAAD,CAA3B,EAAgC+N,CAAC,CAAC/N,CAAD,CAAjC,CAAnC;AACD;;AAED,SAASwtT,SAAT,CAAmBtmT,CAAnB,EAAsB6G,CAAtB,EAAyBtB,CAAzB,EAA4B;AAC1B,SAAO,CAACsB,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAAT,KAAiBuF,CAAC,CAAC,CAAD,CAAD,GAAOvF,CAAC,CAAC,CAAD,CAAzB,MAAkC,CAACuF,CAAC,CAAC,CAAD,CAAD,GAAOvF,CAAC,CAAC,CAAD,CAAT,KAAiB6G,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAAzB,CAAzC;AACD;;AAED,SAASumT,MAAT,CAAgBnpR,CAAhB,EAAmBozD,CAAnB,EAAsB1pF,CAAtB,EAAyB;AACvB,SAAOs2B,CAAC,IAAIozD,CAAL,IAAUA,CAAC,IAAI1pF,CAAf,IAAoBA,CAAC,IAAI0pF,CAAL,IAAUA,CAAC,IAAIpzD,CAA1C;AACD;;AAED,SAASg7N,QAAT,CAAmBhiP,CAAnB,EAAsBipM,IAAtB,EAA4B3wK,IAA5B,EAAkC;AAChC,SAAO,UAAUxrC,MAAV,EAAkB;AACvB,QAAIma,EAAE,GAAG,sBAAOna,MAAP,CAAT;AAAA,QACI0B,KAAK,GAAG8pC,IAAI,GAAG7vC,IAAI,CAACG,GAAL,CAASqe,EAAE,CAAC,CAAD,CAAX,EAAgB,CAAhB,CAAH,GAAwBA,EAAE,CAAC,CAAD,CAD1C;AAAA,QAEIgd,IAAI,GAAGhd,EAAE,CAAC,CAAD,CAFb;AAAA,QAGIqyL,IAAI,GAAGr1K,IAAI,GAAGz1B,KAHlB;AAAA,QAII4O,IAAI,GAAG6rM,IAAI,GAAG,uBAASz6M,KAAT,EAAgBy1B,IAAhB,EAAsBjkB,CAAtB,CAAH,GAA8Bs5L,IAAI,IAAIt5L,CAAC,GAAG,CAAR,CAJjD;AAKA,WAAO,oBAAM5C,IAAN,EAAY6mB,IAAZ,EAAkB7mB,IAAlB,CAAP;AACD,GAPD;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASgzS,UAAT,CAAoBrqT,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDqqT,UAAU,CAACvlF,UAAX,GAAwB;AACtB,UAAQ,YADc;AAEtB,cAAY;AACV,iBAAa;AADH,GAFU;AAKtB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GAHO,EAOP;AACD,YAAQ,QADP;AAED,YAAQ;AAFP,GAPO,EAUP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAVO,EAcP;AACD,YAAQ,SADP;AAED,YAAQ,MAFP;AAGD,cAAU,CAAC,QAAD,EAAW,aAAX,CAHT;AAID,eAAW;AAJV,GAdO,EAmBP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAnBO,EAuBP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAvBO,EA2BP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GA3BO,EA+BP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,YAAQ;AAJP,GA/BO,EAoCP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GApCO;AALY,CAAxB;AAgDA,wBAASulF,UAAT,EAAqBzlF,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,CAACw9N,KAAK,CAAC74B,OAAN,EAAf,IAAkC,CAAChhL,CAAC,CAACo6M,QAAF,EAAvC,EAAqD;AACnD,aAAOP,KAAK,CAAC6B,eAAb;AACD;;AAED,QAAIh8M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAV;AAAA,QACI/uK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAD7C;AAAA,QAEI0/D,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAF,IAAWyK,kBAFvB;AAAA,QAGIgtL,OAAO,GAAGF,QAAQ,GAAG/jF,MAAX,CAAkBriN,CAAC,CAACqiN,MAAF,KAAa,KAA/B,CAHd;AAAA,QAIIniB,EAAE,GAAGlgM,CAAC,CAACqgM,UAAF,IAAgB2mG,MAAM,CAAC73P,MAAD,EAAS0/D,KAAT,EAAgB7uG,CAAhB,CAJ/B;AAAA,QAKI2oN,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,KAAS,IAAT,GAAgB,IAAhB,GAAuB3oN,CAAC,CAAC2oN,EAAF,IAAQ,SALxC;AAAA,QAMIllO,MAAM,GAAG,EANb;AAOA0rD,IAAAA,MAAM,CAAChyD,OAAP,CAAeJ,CAAC,IAAI;AAClB,YAAMuuR,IAAI,GAAGz8J,KAAK,CAAC9xH,CAAD,CAAlB,CADkB,CACK;;AAEvB,YAAMwgH,KAAK,GAAG+oM,OAAO,CAACxlT,IAAR,CAAa,CAACwqR,IAAI,CAAC/pR,KAAN,EAAa+pR,IAAI,CAACh8P,MAAlB,CAAb,EAAwCg8P,IAAI,CAAC7nR,MAA7C,EAAqD,uBAAQy8M,EAAR,IAAcA,EAAd,GAAmBA,EAAE,CAACorE,IAAI,CAAC7nR,MAAN,CAA1E,CAAd,CAHkB,CAGsF;;AAExGwjT,MAAAA,cAAc,CAAC1pM,KAAD,EAAQ+tK,IAAR,EAAcvuR,CAAd,EAAiBijB,CAAjB,CAAd,CALkB,CAKiB;;AAEnCu9F,MAAAA,KAAK,CAACpgH,OAAN,CAAcwgC,CAAC,IAAI;AACjBl6B,QAAAA,MAAM,CAACnK,IAAP,CAAY,4BAASyD,CAAT,EAAY,0BAAO4rO,EAAE,IAAI,IAAN,GAAa;AAC1C,WAACA,EAAD,GAAMhrM;AADoC,SAAb,GAE3BA,CAFoB,CAAZ,CAAZ;AAGD,OAJD;AAKD,KAZD;AAaA,QAAI,KAAKthC,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,SAAKA,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAAJ,GAAUvW,MAApC;AACA,WAAOic,GAAP;AACD;;AA7B6B,CAAhC;;AAiCA,SAASsnS,MAAT,CAAgBvjT,MAAhB,EAAwBuB,CAAxB,EAA2Bgb,CAA3B,EAA8B;AAC5B,QAAM+wE,CAAC,GAAG4nK,QAAQ,CAAC34O,CAAC,CAACgnS,MAAF,IAAY,EAAb,EAAiBhnS,CAAC,CAAC4/L,IAAnB,EAAyB5/L,CAAC,CAACivB,IAAF,KAAW,KAApC,CAAlB;AACA,SAAOjvB,CAAC,CAAC/d,OAAF,KAAc,QAAd,GAAyB8uF,CAAzB,GAA6BA,CAAC,CAACttF,MAAM,CAACX,GAAP,CAAW/F,CAAC,IAAI,kBAAIiI,CAAC,CAACjI,CAAD,CAAD,CAAK0G,MAAT,CAAhB,CAAD,CAArC;AACD;;AAED,SAASwjT,cAAT,CAAwB1pM,KAAxB,EAA+B+tK,IAA/B,EAAqClzD,KAArC,EAA4Cp4M,CAA5C,EAA+C;AAC7C,MAAInjB,CAAC,GAAGmjB,CAAC,CAAC9Q,KAAF,IAAWo8Q,IAAI,CAACp8Q,KAAxB;AAAA,MACInS,CAAC,GAAGijB,CAAC,CAAC85L,SAAF,IAAewxE,IAAI,CAACxxE,SAD5B;AAEA,MAAI,0BAAWj9M,CAAX,CAAJ,EAAmBA,CAAC,GAAGA,CAAC,CAACu7N,KAAD,EAAQp4M,CAAR,CAAL;AACnB,MAAI,0BAAWjjB,CAAX,CAAJ,EAAmBA,CAAC,GAAGA,CAAC,CAACq7N,KAAD,EAAQp4M,CAAR,CAAL;AACnB,MAAI,CAACnjB,CAAC,KAAK,CAAN,IAAWA,CAAC,IAAI,IAAjB,KAA0B,CAACE,CAA/B,EAAkC;AAClC,QAAMk4Q,EAAE,GAAG,CAAC,wBAASp4Q,CAAT,IAAcA,CAAd,GAAkBA,CAAC,CAAC,CAAD,CAApB,KAA4B,CAAvC;AAAA,QACMq4Q,EAAE,GAAG,CAAC,wBAASr4Q,CAAT,IAAcA,CAAd,GAAkBA,CAAC,CAAC,CAAD,CAApB,KAA4B,CADvC;AAAA,QAEMq9G,EAAE,GAAGn9G,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAN,IAAa,CAFxB;AAAA,QAGM2xR,EAAE,GAAG3xR,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAN,IAAa,CAHxB;AAIAwgH,EAAAA,KAAK,CAACpgH,OAAN,CAAcmlL,SAAS,CAACgpG,IAAD,EAAOrW,EAAP,EAAWC,EAAX,EAAeh7J,EAAf,EAAmBw0K,EAAnB,CAAvB;AACD;;AAED,SAASpsG,SAAT,CAAmBgpG,IAAnB,EAAyBrW,EAAzB,EAA6BC,EAA7B,EAAiCh7J,EAAjC,EAAqCw0K,EAArC,EAAyC;AACvC,QAAM5iL,EAAE,GAAGw/K,IAAI,CAACx/K,EAAL,IAAW,CAAtB;AAAA,QACMD,EAAE,GAAGy/K,IAAI,CAACz/K,EAAL,IAAW,CADtB;AAAA,QAEMynL,IAAI,GAAGre,EAAE,GAAGC,EAAL,GAAU,CAFvB;;AAIA,WAASgyC,gBAAT,CAA0BhtG,WAA1B,EAAuC;AACrCA,IAAAA,WAAW,CAAC/8M,OAAZ,CAAoBgqT,aAApB;AACD;;AAED,WAASA,aAAT,CAAuBjtG,WAAvB,EAAoC;AAClC,QAAIo5E,IAAJ,EAAUp5E,WAAW,CAACpsM,OAAZ,GADwB,CACD;;AAEjCosM,IAAAA,WAAW,CAAC/8M,OAAZ,CAAoBu9M,cAApB;AACD;;AAED,WAASA,cAAT,CAAwBR,WAAxB,EAAqC;AACnCA,IAAAA,WAAW,CAAC,CAAD,CAAX,GAAiB,CAACA,WAAW,CAAC,CAAD,CAAX,GAAiBpuG,EAAlB,IAAwBmpK,EAAxB,GAA6B/6J,EAA9C;AACAggG,IAAAA,WAAW,CAAC,CAAD,CAAX,GAAiB,CAACA,WAAW,CAAC,CAAD,CAAX,GAAiBruG,EAAlB,IAAwBqpK,EAAxB,GAA6BwZ,EAA9C;AACD;;AAED,SAAO,UAAUj0E,QAAV,EAAoB;AACzBA,IAAAA,QAAQ,CAACP,WAAT,CAAqB/8M,OAArB,CAA6B+pT,gBAA7B;AACA,WAAOzsG,QAAP;AACD,GAHD;AAID;;AAED,SAASjlM,MAAT,CAAgByxN,EAAhB,EAAoB5+N,IAApB,EAA0BrD,CAA1B,EAA6B;AAC3B,QAAMuG,CAAC,GAAG07N,EAAE,IAAI,CAAN,GAAUA,EAAV,GAAe,kCAAa5+N,IAAb,EAAmBrD,CAAnB,CAAzB;AACA,SAAO5F,IAAI,CAACsG,KAAL,CAAW,CAACtG,IAAI,CAACqC,IAAL,CAAU,IAAI8J,CAAJ,GAAQA,CAAR,GAAY,CAAtB,IAA2B,CAA5B,IAAiC,CAA5C,CAAP;AACD;;AAED,SAAS8pM,MAAT,CAAgBr1L,CAAhB,EAAmB;AACjB,SAAO,0BAAWA,CAAX,IAAgBA,CAAhB,GAAoB,wBAAS,CAACA,CAAV,CAA3B;AACD,EAAC;;;AAGF,SAASonS,SAAT,GAAsB;AACpB,MAAI5nT,CAAC,GAAG0G,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAd;AAAA,MACI6X,CAAC,GAAG7X,CAAC,IAAIA,CAAC,CAAC,CAAD,CADd;AAAA,MAEIusC,MAAM,GAAG41C,aAFb;AAAA,MAGIs7I,SAAS,GAAG,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,CAHhB;AAAA,MAIIx+M,EAAE,GAAG,GAJT;AAAA,MAKIhH,EAAE,GAAG,GALT;AAAA,MAMIxH,CAAC,GAAG,CANR,CADoB,CAOT;;;AAGX,WAASq7N,OAAT,CAAiB3pO,IAAjB,EAAuBsgL,MAAvB,EAA+B;AAC7B,UAAM49E,EAAE,GAAG/wP,MAAM,CAACmuN,SAAS,CAAC,CAAD,CAAV,EAAet7N,IAAf,EAAqB7I,CAArB,CAAN,IAAiCmX,CAA5C;AAAA,UACM;AACN6vP,IAAAA,EAAE,GAAGhxP,MAAM,CAACmuN,SAAS,CAAC,CAAD,CAAV,EAAet7N,IAAf,EAAqB0V,CAArB,CAAN,IAAiCpH,CAFtC;AAAA,UAGM;AACN4iO,IAAAA,EAAE,GAAGgtB,EAAE,GAAGA,EAAE,GAAG,CAAR,GAAY,CAJnB;AAAA,UAKM;AACN/sB,IAAAA,EAAE,GAAGgtB,EAAE,GAAGA,EAAE,GAAG,CAAR,GAAY,CANnB;AAAA,UAOM;AACNj/P,IAAAA,CAAC,GAAG,IAAIgyO,EAAJ,IAAUp0N,EAAE,IAAIxO,CAAhB,CARJ;AAAA,UASM;AACNm6E,IAAAA,CAAC,GAAG,IAAI0oJ,EAAJ,IAAUr7N,EAAE,IAAIxH,CAAhB,CAVJ;AAAA,UAWM;AACN0wS,IAAAA,OAAO,GAAG,IAAI3jT,YAAJ,CAAiB6D,CAAC,GAAGupF,CAArB,CAZV;AAAA,UAaMw2N,OAAO,GAAG,IAAI5jT,YAAJ,CAAiB6D,CAAC,GAAGupF,CAArB,CAbhB;AAcA,QAAIrtF,MAAM,GAAG4jT,OAAb;AACAh/S,IAAAA,IAAI,CAAClL,OAAL,CAAa+I,CAAC,IAAI;AAChB,YAAM+kS,EAAE,GAAG1xD,EAAE,IAAI,CAAC/5O,CAAC,CAAC0G,CAAD,CAAF,IAASyQ,CAAb,CAAb;AAAA,YACMomS,EAAE,GAAGvjE,EAAE,IAAI,CAACz7N,CAAC,CAAC7X,CAAD,CAAF,IAASyQ,CAAb,CADb;;AAGA,UAAIs0R,EAAE,IAAI,CAAN,IAAWA,EAAE,GAAG1jS,CAAhB,IAAqBw1S,EAAE,IAAI,CAA3B,IAAgCA,EAAE,GAAGjsN,CAAzC,EAA4C;AAC1Cu2N,QAAAA,OAAO,CAACpc,EAAE,GAAG8R,EAAE,GAAGx1S,CAAX,CAAP,IAAwB,CAACkrC,MAAM,CAACvsC,CAAD,CAA/B;AACD;AACF,KAPD;;AASA,QAAIqgQ,EAAE,GAAG,CAAL,IAAUC,EAAE,GAAG,CAAnB,EAAsB;AACpB+gD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB/gD,EAAzB,CAAL;AACAihD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOw2N,OAAP,EAAgBD,OAAhB,EAAyB7gD,EAAzB,CAAL;AACA+gD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB/gD,EAAzB,CAAL;AACAihD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOw2N,OAAP,EAAgBD,OAAhB,EAAyB7gD,EAAzB,CAAL;AACA+gD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB/gD,EAAzB,CAAL;AACAihD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOw2N,OAAP,EAAgBD,OAAhB,EAAyB7gD,EAAzB,CAAL;AACD,KAPD,MAOO,IAAID,EAAE,GAAG,CAAT,EAAY;AACjBghD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB/gD,EAAzB,CAAL;AACAghD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOw2N,OAAP,EAAgBD,OAAhB,EAAyB9gD,EAAzB,CAAL;AACAghD,MAAAA,KAAK,CAAChgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB/gD,EAAzB,CAAL;AACA9iQ,MAAAA,MAAM,GAAG6jT,OAAT;AACD,KALM,MAKA,IAAI9gD,EAAE,GAAG,CAAT,EAAY;AACjBghD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB9gD,EAAzB,CAAL;AACAghD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOw2N,OAAP,EAAgBD,OAAhB,EAAyB7gD,EAAzB,CAAL;AACAghD,MAAAA,KAAK,CAACjgT,CAAD,EAAIupF,CAAJ,EAAOu2N,OAAP,EAAgBC,OAAhB,EAAyB9gD,EAAzB,CAAL;AACA/iQ,MAAAA,MAAM,GAAG6jT,OAAT;AACD,KA1C4B,CA0C3B;AACF;;;AAGA,UAAMzqT,CAAC,GAAG8rL,MAAM,GAAGvpL,IAAI,CAAC0Q,GAAL,CAAS,CAAT,EAAY,CAAC,CAAD,GAAK6G,CAAjB,CAAH,GAAyB,IAAI,kBAAIlT,MAAJ,CAA7C;;AAEA,SAAK,IAAIpK,CAAC,GAAG,CAAR,EAAWypP,EAAE,GAAGv7O,CAAC,GAAGupF,CAAzB,EAA4Bz3F,CAAC,GAAGypP,EAAhC,EAAoC,EAAEzpP,CAAtC,EAAyCoK,MAAM,CAACpK,CAAD,CAAN,IAAawD,CAAb;;AAEzC,WAAO;AACL4G,MAAAA,MAAM,EAAEA,MADH;AAELyL,MAAAA,KAAK,EAAE,KAAKyH,CAFP;AAGLpV,MAAAA,KAAK,EAAEgG,CAHF;AAIL+nB,MAAAA,MAAM,EAAEwhE,CAJH;AAKLgb,MAAAA,EAAE,EAAEytI,EALC;AAML1tI,MAAAA,EAAE,EAAE2tI,EANC;AAOLrhK,MAAAA,EAAE,EAAEohK,EAAE,IAAIp0N,EAAE,IAAIxO,CAAV,CAPD;AAQLo1F,MAAAA,EAAE,EAAEytI,EAAE,IAAIr7N,EAAE,IAAIxH,CAAV;AARD,KAAP;AAUD;;AAEDq7N,EAAAA,OAAO,CAACxyO,CAAR,GAAY,UAAUwgB,CAAV,EAAa;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG61M,MAAM,CAACr1L,CAAD,CAAV,EAAegyN,OAAnC,IAA8CxyO,CAArD;AACD,GAFD;;AAIAwyO,EAAAA,OAAO,CAACj0N,CAAR,GAAY,UAAUiC,CAAV,EAAa;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAGs3L,MAAM,CAACr1L,CAAD,CAAV,EAAegyN,OAAnC,IAA8Cj0N,CAArD;AACD,GAFD;;AAIAi0N,EAAAA,OAAO,CAACv/L,MAAR,GAAiB,UAAUzyB,CAAV,EAAa;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB85C,MAAM,GAAG4iK,MAAM,CAACr1L,CAAD,CAAf,EAAoBgyN,OAAxC,IAAmDv/L,MAA1D;AACD,GAFD;;AAIAu/L,EAAAA,OAAO,CAAClxO,IAAR,GAAe,UAAUkf,CAAV,EAAa;AAC1B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,CAACwsB,EAAD,EAAKhH,EAAL,CAAP;;AAEvB,QAAIywR,EAAE,GAAG,CAAC5uR,CAAC,CAAC,CAAD,CAAX;AAAA,QACIg2O,EAAE,GAAG,CAACh2O,CAAC,CAAC,CAAD,CADX;;AAGA,QAAI,EAAE4uR,EAAE,IAAI,CAAN,IAAW54C,EAAE,IAAI,CAAnB,CAAJ,EAA2B,qBAAM,cAAN;AAC3B,WAAO7wO,EAAE,GAAGypR,EAAL,EAASzwR,EAAE,GAAG63O,EAAd,EAAkBhkB,OAAzB;AACD,GARD;;AAUAA,EAAAA,OAAO,CAACy1E,QAAR,GAAmB,UAAUznS,CAAV,EAAa;AAC9B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKge,CAAZ;AACvB,QAAI,EAAE,CAACqJ,CAAC,GAAG,CAACA,CAAN,KAAY,CAAd,CAAJ,EAAsB,qBAAM,mBAAN;AACtBrJ,IAAAA,CAAC,GAAGvX,IAAI,CAAC+H,KAAL,CAAW/H,IAAI,CAACiK,GAAL,CAAS2W,CAAT,IAAc5gB,IAAI,CAAC0gN,GAA9B,CAAJ;AACA,WAAOkyB,OAAP;AACD,GALD;;AAOAA,EAAAA,OAAO,CAACrO,SAAR,GAAoB,UAAU3jN,CAAV,EAAa;AAC/B,QAAI,CAAC5mB,SAAS,CAACT,MAAf,EAAuB,OAAOgrO,SAAP;AACvB3jN,IAAAA,CAAC,GAAG,qBAAMA,CAAN,CAAJ;AACA,QAAIA,CAAC,CAACrnB,MAAF,KAAa,CAAjB,EAAoBqnB,CAAC,GAAG,CAAC,CAACA,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAJ;AACpB,QAAIA,CAAC,CAACrnB,MAAF,KAAa,CAAjB,EAAoB,qBAAM,mBAAN;AACpB,WAAOgrO,SAAS,GAAG3jN,CAAZ,EAAegyN,OAAtB;AACD,GAND;;AAQA,SAAOA,OAAP;AACD;;AAED,SAASu1E,KAAT,CAAehgT,CAAf,EAAkBupF,CAAlB,EAAqB3hC,MAArB,EAA6Bvf,MAA7B,EAAqCvoC,CAArC,EAAwC;AACtC,QAAMs+C,CAAC,GAAG,CAACt+C,CAAC,IAAI,CAAN,IAAW,CAArB;;AAEA,OAAK,IAAI/D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtF,CAApB,EAAuB,EAAExtF,CAAzB,EAA4B;AAC1B,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAWo4E,EAAE,GAAG,CAArB,EAAwBp4E,CAAC,GAAGkO,CAAC,GAAGF,CAAhC,EAAmC,EAAEhO,CAArC,EAAwC;AACtC,UAAIA,CAAC,GAAGkO,CAAR,EAAW;AACTkqE,QAAAA,EAAE,IAAItiB,MAAM,CAAC91D,CAAC,GAAGiK,CAAC,GAAGiE,CAAT,CAAZ;AACD;;AAED,UAAIlO,CAAC,IAAIgO,CAAT,EAAY;AACV,YAAIhO,CAAC,IAAIssD,CAAT,EAAY;AACV8rB,UAAAA,EAAE,IAAItiB,MAAM,CAAC91D,CAAC,GAAGssD,CAAJ,GAAQriD,CAAC,GAAGiE,CAAb,CAAZ;AACD;;AAEDqoC,QAAAA,MAAM,CAACv2C,CAAC,GAAGgO,CAAJ,GAAQ/D,CAAC,GAAGiE,CAAb,CAAN,GAAwBkqE,EAAE,GAAGryE,IAAI,CAACG,GAAL,CAASlG,CAAC,GAAG,CAAb,EAAgBkO,CAAC,GAAG,CAAJ,GAAQo+C,CAAR,GAAYtsD,CAA5B,EAA+BssD,CAA/B,CAA7B;AACD;AACF;AACF;AACF;;AAED,SAAS6hQ,KAAT,CAAejgT,CAAf,EAAkBupF,CAAlB,EAAqB3hC,MAArB,EAA6Bvf,MAA7B,EAAqCvoC,CAArC,EAAwC;AACtC,QAAMs+C,CAAC,GAAG,CAACt+C,CAAC,IAAI,CAAN,IAAW,CAArB;;AAEA,OAAK,IAAIhO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,SAAK,IAAIiK,CAAC,GAAG,CAAR,EAAWmuE,EAAE,GAAG,CAArB,EAAwBnuE,CAAC,GAAGwtF,CAAC,GAAGzpF,CAAhC,EAAmC,EAAE/D,CAArC,EAAwC;AACtC,UAAIA,CAAC,GAAGwtF,CAAR,EAAW;AACTrf,QAAAA,EAAE,IAAItiB,MAAM,CAAC91D,CAAC,GAAGiK,CAAC,GAAGiE,CAAT,CAAZ;AACD;;AAED,UAAIjE,CAAC,IAAI+D,CAAT,EAAY;AACV,YAAI/D,CAAC,IAAIqiD,CAAT,EAAY;AACV8rB,UAAAA,EAAE,IAAItiB,MAAM,CAAC91D,CAAC,GAAG,CAACiK,CAAC,GAAGqiD,CAAL,IAAUp+C,CAAf,CAAZ;AACD;;AAEDqoC,QAAAA,MAAM,CAACv2C,CAAC,GAAG,CAACiK,CAAC,GAAG+D,CAAL,IAAUE,CAAf,CAAN,GAA0BkqE,EAAE,GAAGryE,IAAI,CAACG,GAAL,CAAS+D,CAAC,GAAG,CAAb,EAAgBwtF,CAAC,GAAG,CAAJ,GAAQnrC,CAAR,GAAYriD,CAA5B,EAA+BqiD,CAA/B,CAA/B;AACD;AACF;AACF;AACF;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS+hQ,KAAT,CAAehrT,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDgrT,KAAK,CAAClmF,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,iBAAa;AADH,GAFK;AAKjB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,aAAS,IAHA;AAIT,cAAU,CAJD;AAKT,gBAAY;AALH,GAAD,EAMP;AACD,YAAQ,GADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GANO,EAUP;AACD,YAAQ,GADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAVO,EAcP;AACD,YAAQ,QADP;AAED,YAAQ;AAFP,GAdO,EAiBP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GAjBO,EAqBP;AACD,YAAQ,UADP;AAED,YAAQ;AAFP,GArBO,EAwBP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GAxBO,EA6BP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GA7BO,EAiCP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAjCO;AALO,CAAnB;AA4CA,MAAMmmF,MAAM,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,QAAX,EAAqB,MAArB,EAA6B,UAA7B,EAAyC,WAAzC,CAAf;;AACA,SAASjrT,MAAT,CAAgBod,GAAhB,EAAqBkG,CAArB,EAAwB;AACtB2nS,EAAAA,MAAM,CAACxqT,OAAP,CAAekxC,KAAK,IAAIruB,CAAC,CAACquB,KAAD,CAAD,IAAY,IAAZ,GAAmBv0B,GAAG,CAACu0B,KAAD,CAAH,CAAWruB,CAAC,CAACquB,KAAD,CAAZ,CAAnB,GAA0C,CAAlE;AACA,SAAOv0B,GAAP;AACD;;AACD,wBAAS4tS,KAAT,EAAgBpmF,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,CAACw9N,KAAK,CAAC74B,OAAN,EAAf,IAAkC,CAAChhL,CAAC,CAACo6M,QAAF,EAAvC,EAAqD,OAAOP,KAAK,CAAC6B,eAAb;AACrD,QAAIh8M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAV;AAAA,QACI/uK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAD7C;AAAA,QAEIotJ,MAAM,GAAGwyB,SAAS,CAAC5/K,MAAD,EAASnvC,CAAC,CAACmsN,OAAX,CAFtB;AAAA,QAGIjnH,KAAK,GAAG,CAACllG,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CAHZ;AAAA,QAIIu2B,GAAG,GAAG/mO,MAAM,CAAC0qT,SAAS,EAAV,EAAcpnS,CAAd,CAJhB;AAAA,QAKI2oN,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,MALjB;AAAA,QAMIllO,MAAM,GAAG,EANb;;AAQA,aAASzH,GAAT,CAAae,CAAb,EAAgBgH,IAAhB,EAAsB;AACpB,WAAK,IAAI1K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6rH,KAAK,CAACvsH,MAA1B,EAAkC,EAAEU,CAApC,EAAuC0D,CAAC,CAACmoH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAc0K,IAAI,CAAC1K,CAAD,CAAlB;;AAEvC,aAAO0D,CAAP;AACD,KAdiB,CAchB;;;AAGF0G,IAAAA,MAAM,GAAG84M,MAAM,CAACz5M,GAAP,CAAWglC,CAAC,IAAI,0BAAO9rC,GAAG,CAAC;AAClC,OAAC2sO,EAAD,GAAMlF,GAAG,CAAC37L,CAAD,EAAI9nB,CAAC,CAAC2oK,MAAN;AADyB,KAAD,EAEhC7gJ,CAAC,CAAC3H,IAF8B,CAAV,CAAhB,CAAT;AAGA,QAAI,KAAK9jC,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,SAAKA,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAAJ,GAAUvW,MAApC;AACA,WAAOic,GAAP;AACD;;AAxBwB,CAA3B;;AA2BA,SAASqvN,SAAT,CAAmB1mO,IAAnB,EAAyB8jO,OAAzB,EAAkC;AAChC,MAAI5vB,MAAM,GAAG,EAAb;AAAA,MACIpgN,GAAG,GAAG6I,CAAC,IAAIA,CAAC,CAACjI,CAAD,CADhB;AAAA,MAEI+F,GAFJ;AAAA,MAGIzJ,CAHJ;AAAA,MAIIkO,CAJJ;AAAA,MAKIxK,CALJ;AAAA,MAMI4Z,CANJ;AAAA,MAOImxB,CAPJ,CADgC,CAQzB;;;AAGP,MAAIqkM,OAAO,IAAI,IAAf,EAAqB;AACnB5vB,IAAAA,MAAM,CAACjjN,IAAP,CAAY+O,IAAZ;AACD,GAFD,MAEO;AACL,SAAKvF,GAAG,GAAG,EAAN,EAAUzJ,CAAC,GAAG,CAAd,EAAiBkO,CAAC,GAAGc,IAAI,CAAC1P,MAA/B,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD0D,MAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;AACAsd,MAAAA,CAAC,GAAGw1N,OAAO,CAACrpO,GAAR,CAAY3G,GAAZ,CAAJ;AACA2rC,MAAAA,CAAC,GAAGhlC,GAAG,CAAC6T,CAAD,CAAP;;AAEA,UAAI,CAACmxB,CAAL,EAAQ;AACNhlC,QAAAA,GAAG,CAAC6T,CAAD,CAAH,GAASmxB,CAAC,GAAG,EAAb;AACAA,QAAAA,CAAC,CAAC3H,IAAF,GAASxpB,CAAT;AACA4lM,QAAAA,MAAM,CAACjjN,IAAP,CAAYwuC,CAAZ;AACD;;AAEDA,MAAAA,CAAC,CAACxuC,IAAF,CAAOyD,CAAP;AACD;AACF;;AAED,SAAOw/M,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASqrG,OAAT,CAAiBlrT,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDkrT,OAAO,CAACpmF,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,iBAAa;AADH,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,aAAS,IAHA;AAIT,cAAU,CAJD;AAKT,gBAAY;AALH,GAAD,EAMP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GANO,EAUP;AACD,YAAQ,GADP;AAED,YAAQ;AAFP,GAVO,EAaP;AACD,YAAQ,GADP;AAED,YAAQ;AAFP,GAbO,EAgBP;AACD,YAAQ,QADP;AAED,YAAQ;AAFP,GAhBO,EAmBP;AACD,YAAQ,UADP;AAED,YAAQ;AAFP,GAnBO,EAsBP;AACD,YAAQ,WADP;AAED,YAAQ;AAFP,GAtBO,EAyBP;AACD,YAAQ,OADP;AAED,YAAQ;AAFP,GAzBO,EA4BP;AACD,YAAQ,MADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GA5BO,EAgCP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GAhCO,EAoCP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GApCO;AALS,CAArB;AA+CA,wBAASomF,OAAT,EAAkBtmF,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,KAAKx9N,KAAL,IAAc,CAACw9N,KAAK,CAAC74B,OAAN,EAAf,IAAkC,CAAChhL,CAAC,CAACo6M,QAAF,EAAvC,EAAqD;AACnD,aAAOP,KAAK,CAAC6B,eAAb;AACD;;AAED,QAAIh8M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAV;AAAA,QACIooF,OAAO,GAAGF,QAAQ,GAAG/jF,MAAX,CAAkBriN,CAAC,CAACqiN,MAAF,KAAa,KAA/B,CADd;AAAA,QAEI5+N,MAAM,GAAGuc,CAAC,CAACvc,MAFf;AAAA,QAGI8+N,MAAM,GAAGviN,CAAC,CAACqgM,UAAF,IAAgBs4C,QAAQ,CAAC34O,CAAC,CAACoxD,KAAF,IAAW,EAAZ,EAAgBpxD,CAAC,CAAC4/L,IAAlB,EAAwB,CAAC,CAACn8M,MAA1B,CAHrC;AAAA,QAII3C,IAAI,GAAGkf,CAAC,CAAClf,IAJb;AAAA,QAKIwqR,IALJ;AAAA,QAMIu8B,IANJ;;AAQA,QAAI,CAACpkT,MAAL,EAAa;AACXA,MAAAA,MAAM,GAAGo2N,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAAzC;AACAm8N,MAAAA,IAAI,GAAG5uR,MAAM,CAAC0qT,SAAS,EAAV,EAAcpnS,CAAd,CAAN,CAAuBvc,MAAvB,EAA+B,IAA/B,CAAP;AACAokT,MAAAA,IAAI,GAAGvlI,SAAS,CAACgpG,IAAD,EAAOA,IAAI,CAACp8Q,KAAL,IAAc,CAArB,EAAwBo8Q,IAAI,CAACp8Q,KAAL,IAAc,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAhB;AACApO,MAAAA,IAAI,GAAG,CAACwqR,IAAI,CAAC/pR,KAAN,EAAa+pR,IAAI,CAACh8P,MAAlB,CAAP;AACA7rB,MAAAA,MAAM,GAAG6nR,IAAI,CAAC7nR,MAAd;AACD;;AAED8+N,IAAAA,MAAM,GAAG,uBAAQA,MAAR,IAAkBA,MAAlB,GAA2BA,MAAM,CAAC9+N,MAAD,CAA1C;AACAA,IAAAA,MAAM,GAAG6iT,OAAO,CAACxlT,IAAR,CAAaA,IAAb,EAAmB2C,MAAnB,EAA2B8+N,MAA3B,CAAT;AACA,QAAIslF,IAAJ,EAAUpkT,MAAM,CAACtG,OAAP,CAAe0qT,IAAf;AACV,QAAI,KAAKxrT,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,SAAKA,KAAL,GAAaqjB,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAAC1F,GAAJ,GAAU,CAACvW,MAAM,IAAI,EAAX,EAAeX,GAAf,CAAmBm2N,oBAAnB,CAApC;AACA,WAAOv5M,GAAP;AACD;;AA5B0B,CAA7B;AAgCA,MAAMm1Q,OAAO,GAAG,SAAhB;AACA,MAAMC,iBAAiB,GAAG,mBAA1B;AACA,MAAMG,UAAU,GAAG,YAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS6yB,OAAT,CAAiBprT,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDorT,OAAO,CAACtmF,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY,EAFO;AAGnB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,cAAU;AAJD,GAAD,EAKP;AACD,YAAQ,SADP;AAED,YAAQ;AAFP,GALO;AAHS,CAArB;AAaA,wBAASsmF,OAAT,EAAkBxmF,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI3wC,QAAQ,GAAG,KAAK6+H,SAApB;AAAA,QACIptG,MAAM,GAAG,KAAKqtG,OADlB;AAAA,QAEI7wQ,MAAM,GAAGn3B,CAAC,CAACm3B,MAFf;AAAA,QAGI8wQ,GAAG,GAAG9wQ,MAAM,IAAIA,MAAM,CAAC,CAAD,CAH1B;AAAA,QAII+wQ,GAAG,GAAG/wQ,MAAM,IAAIA,MAAM,CAAC,CAAD,CAJ1B;AAAA,QAKIgxQ,OAAO,GAAGnoS,CAAC,CAACmoS,OAAF,IAAa,CAAChxQ,MAAD,IAAWmiF,kBALtC;AAAA,QAMIgU,IAAI,GAAGusF,KAAK,CAAC38K,GANjB;AAAA,QAOI1sC,GAPJ;AAQAA,IAAAA,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,MAAgBP,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC6D,GAApB,CAAhB,IAA4C7D,KAAK,CAACO,QAAN,CAAe,8BAAe+tF,OAAf,CAAf,CAA5C,IAAuFF,GAAG,IAAIpuF,KAAK,CAACO,QAAN,CAAe,8BAAe6tF,GAAf,CAAf,CAA9F,IAAqIC,GAAG,IAAIruF,KAAK,CAACO,QAAN,CAAe,8BAAe8tF,GAAf,CAAf,CAAlJ;;AAEA,QAAI,CAAC,KAAK7rT,KAAN,IAAemU,GAAnB,EAAwB;AACtB88H,MAAAA,IAAI,GAAGusF,KAAK,CAACmE,MAAb;AACA,WAAK+pF,SAAL,GAAiB7+H,QAAQ,GAAG,EAA5B;AACA,WAAK8+H,OAAL,GAAertG,MAAM,GAAG,EAAxB;AACD;;AAED,QAAIwtG,OAAJ,EAAa;AACXtuF,MAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAImsL,QAAQ,CAAC5vL,IAAT,CAAc6uT,OAAO,CAACprT,CAAD,CAArB,CAAvB;AACD;;AAED,QAAIkrT,GAAG,IAAIC,GAAX,EAAgB;AACdruF,MAAAA,KAAK,CAACwE,KAAN,CAAY/wF,IAAZ,EAAkBvwI,CAAC,IAAI;AACrB,YAAIyC,CAAC,GAAGyoT,GAAG,CAAClrT,CAAD,CAAX;AAAA,YACIghB,CAAC,GAAGmqS,GAAG,CAACnrT,CAAD,CADX;;AAGA,YAAIyC,CAAC,IAAI,IAAL,IAAaue,CAAC,IAAI,IAAlB,IAA0B,CAACve,CAAC,GAAG,CAACA,CAAN,MAAaA,CAAvC,IAA4C,CAACue,CAAC,GAAG,CAACA,CAAN,MAAaA,CAA7D,EAAgE;AAC9D48L,UAAAA,MAAM,CAACrhN,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD;AACF,OAPD;AAQAmrK,MAAAA,QAAQ,GAAGA,QAAQ,CAACtwL,MAAT,CAAgB;AACzB0gB,QAAAA,IAAI,EAAEu7Q,OADmB;AAEzBp6E,QAAAA,QAAQ,EAAE;AACRnhM,UAAAA,IAAI,EAAE27Q,UADE;AAER/6E,UAAAA,WAAW,EAAES;AAFL;AAFe,OAAhB,CAAX;AAOD;;AAED,SAAKt+M,KAAL,GAAa;AACXid,MAAAA,IAAI,EAAEw7Q,iBADK;AAEX5rG,MAAAA,QAAQ,EAAEA;AAFC,KAAb;AAID;;AA5C0B,CAA7B;AAgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASk/H,OAAT,CAAiB1rT,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD0rT,OAAO,CAAC5mF,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,gBAAY;AADF,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,YADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,OADP;AAED,YAAQ;AAFP,GAHO,EAMP;AACD,YAAQ,aADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GANO,EAUP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAVO;AALS,CAArB;AAqBA,wBAAS4mF,OAAT,EAAkB9mF,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAV;AAAA,QACIp2N,IAAI,GAAG,KAAKrL,KADhB;AAAA,QAEIwyH,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAF,IAAWyK,kBAFvB;AAAA,QAGIqvG,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,MAHjB;AAAA,QAIIr7F,IAAI,GAAG5tH,GAAG,CAACs+M,MAJf;;AAMA,QAAI,CAACt2N,IAAD,IAASsY,CAAC,CAACo6M,QAAF,EAAb,EAA2B;AACzB;AACA,WAAK/9N,KAAL,GAAaqL,IAAI,GAAG,uCAAkBsY,CAAC,CAACqiR,UAApB,CAApB;AACA3iR,MAAAA,GAAG,CAAC0+M,WAAJ,GAAkB3E,MAAlB;AACD,KAJD,MAIO;AACLnsF,MAAAA,IAAI,GAAGze,KAAK,KAAKyK,kBAAV,IAAsBugG,KAAK,CAACO,QAAN,CAAevrG,KAAK,CAAC13E,MAArB,CAAtB,GAAqDz3B,GAAG,CAACm+M,OAAzD,GAAmEn+M,GAAG,CAACw9B,GAA9E;AACD;;AAED,UAAMs1C,IAAI,GAAG61N,QAAQ,CAAC3gT,IAAD,EAAOsY,CAAC,CAACgiR,WAAT,CAArB;AACAtiR,IAAAA,GAAG,CAAC2+M,KAAJ,CAAU/wF,IAAV,EAAgBvwI,CAAC,IAAIA,CAAC,CAAC4rO,EAAD,CAAD,GAAQjhO,IAAI,CAACmnH,KAAK,CAAC9xH,CAAD,CAAN,CAAjC;AACA2K,IAAAA,IAAI,CAACs6R,WAAL,CAAiBxvM,IAAjB;AACA,WAAO9yE,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AApB0B,CAA7B;;AAwBA,SAAS0/E,QAAT,CAAkB3gT,IAAlB,EAAwBs6R,WAAxB,EAAqC;AACnC,QAAMxvM,IAAI,GAAG9qF,IAAI,CAACs6R,WAAL,EAAb;AACAt6R,EAAAA,IAAI,CAAC2jK,OAAL,CAAa,IAAb;;AAEA,MAAI22H,WAAW,IAAI,IAAnB,EAAyB;AACvBt6R,IAAAA,IAAI,CAACs6R,WAAL,CAAiBA,WAAjB;AACD;;AAED,SAAOxvM,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS81N,QAAT,CAAkB5rT,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD4rT,QAAQ,CAAC9mF,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,gBAAY;AADF,GAFQ;AAKpB,YAAU,CAAC;AACT,YAAQ,YADC;AAET,YAAQ,YAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,gBAAY,IAJX;AAKD,cAAU;AALT,GAJO,EAUP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,GAAD,EAAM,GAAN;AALV,GAVO;AALU,CAAtB;AAuBA,wBAAS8mF,QAAT,EAAmBhnF,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIznI,IAAI,GAAGpyE,CAAC,CAACqiR,UAAb;AAAA,QACI4lB,GAAG,GAAGjoS,CAAC,CAACm3B,MAAF,CAAS,CAAT,CADV;AAAA,QAEI+wQ,GAAG,GAAGloS,CAAC,CAACm3B,MAAF,CAAS,CAAT,CAFV;AAAA,QAGIwxL,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,GAAD,EAAM,GAAN,CAHjB;AAAA,QAIInpO,CAAC,GAAGmpO,EAAE,CAAC,CAAD,CAJV;AAAA,QAKI5qN,CAAC,GAAG4qN,EAAE,CAAC,CAAD,CALV;AAAA,QAMIn4N,GANJ;;AAQA,aAASxU,GAAT,CAAae,CAAb,EAAgB;AACd,YAAMmpO,EAAE,GAAG9zI,IAAI,CAAC,CAAC61N,GAAG,CAAClrT,CAAD,CAAJ,EAASmrT,GAAG,CAACnrT,CAAD,CAAZ,CAAD,CAAf;;AAEA,UAAImpO,EAAJ,EAAQ;AACNnpO,QAAAA,CAAC,CAACyC,CAAD,CAAD,GAAO0mO,EAAE,CAAC,CAAD,CAAT;AACAnpO,QAAAA,CAAC,CAACghB,CAAD,CAAD,GAAOmoN,EAAE,CAAC,CAAD,CAAT;AACD,OAHD,MAGO;AACLnpO,QAAAA,CAAC,CAACyC,CAAD,CAAD,GAAO+uH,SAAP;AACAxxH,QAAAA,CAAC,CAACghB,CAAD,CAAD,GAAOwwG,SAAP;AACD;AACF;;AAED,QAAIvuG,CAAC,CAACo6M,QAAF,EAAJ,EAAkB;AAChB;AACAP,MAAAA,KAAK,GAAGA,KAAK,CAACuE,WAAN,GAAoB3E,MAApB,CAA2B,IAA3B,EAAiC4E,KAAjC,CAAuCxE,KAAK,CAACmE,MAA7C,EAAqDhiO,GAArD,CAAR;AACD,KAHD,MAGO;AACLwU,MAAAA,GAAG,GAAGqpN,KAAK,CAACO,QAAN,CAAe6tF,GAAG,CAAC9wQ,MAAnB,KAA8B0iL,KAAK,CAACO,QAAN,CAAe8tF,GAAG,CAAC/wQ,MAAnB,CAApC;AACA0iL,MAAAA,KAAK,CAACwE,KAAN,CAAY7tN,GAAG,GAAGqpN,KAAK,CAACgE,OAAT,GAAmBhE,KAAK,CAAC38K,GAAxC,EAA6ClhD,GAA7C;AACD;;AAED,WAAO69N,KAAK,CAACE,QAAN,CAAe4O,EAAf,CAAP;AACD;;AA/B2B,CAA9B;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS4/E,QAAT,CAAkB7rT,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD6rT,QAAQ,CAAC/mF,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,gBAAY,IADF;AAEV,aAAS;AAFC,GAFQ;AAMpB,YAAU,CAAC;AACT,YAAQ,YADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,eAAW;AAHV,GAHO,EAOP;AACD,YAAQ,aADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GAPO,EAWP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAXO;AANU,CAAtB;AAuBA,wBAAS+mF,QAAT,EAAmBjnF,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAV;AAAA,QACIj9N,KAAK,GAAG,KAAKxE,KADjB;AAAA,QAEIssO,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,OAFjB;AAAA,QAGIr7F,IAAI,GAAG5tH,GAAG,CAACw9B,GAHf;;AAKA,QAAI,CAACr8C,KAAD,IAAUmf,CAAC,CAACo6M,QAAF,EAAd,EAA4B;AAC1B;AACA,WAAK/9N,KAAL,GAAawE,KAAK,GAAG2nT,cAAc,CAAC,uCAAkBxoS,CAAC,CAACqiR,UAApB,CAAD,EAAkCriR,CAAC,CAAC6uG,KAAF,IAAW,qBAAM,OAAN,CAA7C,EAA6D7uG,CAAC,CAACgiR,WAA/D,CAAnC;AACAtiR,MAAAA,GAAG,CAAC0+M,WAAJ,GAAkB3E,MAAlB;AACAnsF,MAAAA,IAAI,GAAG5tH,GAAG,CAACs+M,MAAX;AACD;;AAEDt+M,IAAAA,GAAG,CAAC2+M,KAAJ,CAAU/wF,IAAV,EAAgBvwI,CAAC,IAAIA,CAAC,CAAC4rO,EAAD,CAAD,GAAQ9nO,KAA7B;AACA,WAAO6e,GAAG,CAACq6M,QAAJ,CAAa4O,EAAb,CAAP;AACD;;AAhB2B,CAA9B;;AAoBA,SAAS6/E,cAAT,CAAwB9gT,IAAxB,EAA8BmnH,KAA9B,EAAqCmzK,WAArC,EAAkD;AAChD,QAAMnhS,KAAK,GAAGmhS,WAAW,IAAI,IAAf,GAAsBhiR,CAAC,IAAItY,IAAI,CAACmnH,KAAK,CAAC7uG,CAAD,CAAN,CAA/B,GAA4CA,CAAC,IAAI;AAC7D,QAAIwyE,IAAI,GAAG9qF,IAAI,CAACs6R,WAAL,EAAX;AAAA,QACI3lS,KAAK,GAAGqL,IAAI,CAACs6R,WAAL,CAAiBA,WAAjB,EAA8BnzK,KAAK,CAAC7uG,CAAD,CAAnC,CADZ;AAEAtY,IAAAA,IAAI,CAACs6R,WAAL,CAAiBxvM,IAAjB;AACA,WAAOn2F,KAAP;AACD,GALD;;AAOAwE,EAAAA,KAAK,CAACwqK,OAAN,GAAgBrrJ,CAAC,IAAI;AACnBtY,IAAAA,IAAI,CAAC2jK,OAAL,CAAarrJ,CAAb;AACA,WAAOnf,KAAP;AACD,GAHD;;AAKA,SAAOA,KAAP;AACD;AAED;AACA;AACA;AACA;;;AAEA,SAAS4nT,SAAT,CAAmB/rT,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;;AACA,OAAKo0L,SAAL,GAAiB,0BAAjB;AACD;;AACD23H,SAAS,CAACjnF,UAAV,GAAuB;AACrB,UAAQ,WADa;AAErB,cAAY;AACV,eAAW,IADD;AAEV,iBAAa;AAFH,GAFS;AAMrB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,cAAU,CAJD;AAKT,eAAW;AACT,cAAQ,QADC;AAET,eAAS,IAFA;AAGT,gBAAU;AAHD;AALF,GAAD,EAUP;AACD,YAAQ,aADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW;AACT,cAAQ,QADC;AAET,eAAS,IAFA;AAGT,gBAAU;AAHD;AALV,GAVO,EAoBP;AACD,YAAQ,aADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW;AACT,cAAQ,QADC;AAET,eAAS,IAFA;AAGT,gBAAU;AAHD;AALV,GApBO,EA8BP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GA9BO,EAmCP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,EAAD,EAAK,GAAL;AALV,GAnCO,EAyCP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,EAAD,EAAK,EAAL;AALV,GAzCO,EA+CP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GA/CO;AANW,CAAvB;AA2DA,wBAASinF,SAAT,EAAoBnnF,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI3rC,GAAG,GAAG,KAAK7xL,KAAf;AAAA,QACI00L,GAAG,GAAG,KAAKD,SADf;AAAA,QAEI/zL,CAFJ;;AAIA,QAAI,CAACmxL,GAAG,CAACv1L,MAAL,IAAeqnB,CAAC,CAACo6M,QAAF,EAAnB,EAAiC;AAC/B,WAAK,MAAMhqJ,IAAX,IAAmBpwD,CAAnB,EAAsB;AACpB,YAAI,0BAAW+wK,GAAG,CAAC3gH,IAAD,CAAd,CAAJ,EAA2B;AACzB2gH,UAAAA,GAAG,CAAC3gH,IAAD,CAAH,CAAUpwD,CAAC,CAACowD,IAAD,CAAX;AACD;AACF;AACF;;AAEDrzE,IAAAA,CAAC,GAAGg0L,GAAG,EAAP;;AAEA,QAAI7C,GAAG,CAACv1L,MAAR,EAAgB;AACdkhO,MAAAA,KAAK,CAACrpN,GAAN,CAAUlX,IAAV,CAAe,2BAAQ40L,GAAG,CAAC,CAAD,CAAX,EAAgBnxL,CAAhB,CAAf;AACD,KAFD,MAEO;AACL88N,MAAAA,KAAK,CAAC7/M,GAAN,CAAU1gB,IAAV,CAAe,0BAAOyD,CAAP,CAAf;AACD;;AAEDmxL,IAAAA,GAAG,CAAC,CAAD,CAAH,GAASnxL,CAAT;AACA,WAAO88N,KAAP;AACD;;AAxB4B,CAA/B;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS6uF,OAAT,CAAiBhsT,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDgsT,OAAO,CAAClnF,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,gBAAY;AADF,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GAHO,EAOP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GAPO,EAWP;AACD,YAAQ,SADP;AAED,YAAQ,MAFP;AAGD,cAAU,CAAC,QAAD,EAAW,aAAX,CAHT;AAID,eAAW;AAJV,GAXO,EAgBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAhBO;AALS,CAArB;AA2BA,wBAASknF,OAAT,EAAkBpnF,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,CAACA,KAAK,CAAC74B,OAAN,EAAD,IAAoB,CAAChhL,CAAC,CAACo6M,QAAF,EAAzB,EAAuC;AACrC,aAAOP,KAAK,CAAC6B,eAAb;AACD;;AAED,QAAIvsK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA7C;AAAA,QACI0sP,MAAM,GAAG77R,CAAC,CAAC/d,OAAF,KAAc,QAD3B;AAAA,QAEI4sH,KAAK,GAAG7uG,CAAC,CAAC6uG,KAAF,IAAWyK,kBAFvB;AAAA,QAGIu2H,OAAO,GAAG84D,QAAQ,CAAC3oS,CAAC,CAAC6vO,OAAH,EAAY7vO,CAAZ,CAHtB;AAAA,QAII6uO,KAAK,GAAG+5D,MAAM,CAAC5oS,CAAC,CAAC6uO,KAAH,EAAU7uO,CAAV,CAJlB;AAAA,QAKI2oN,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,OALjB;AAAA,QAMI7uN,GAAG,GAAG;AACRihB,MAAAA,EAAE,EAAE,CADI;AAERuC,MAAAA,EAAE,EAAE,CAFI;AAGRurR,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,IAAI,EAAEjN,MAAM,GAAG,kBAAI1sP,MAAM,CAACrsD,GAAP,CAAW/F,CAAC,IAAI,kBAAI8xH,KAAK,CAAC9xH,CAAD,CAAL,CAAS0G,MAAb,CAAhB,CAAJ,CAAH,GAAgD;AAJpD,KANV;AAYA0rD,IAAAA,MAAM,CAAChyD,OAAP,CAAeJ,CAAC,IAAI;AAClB,YAAMwO,CAAC,GAAGsjH,KAAK,CAAC9xH,CAAD,CAAf,CADkB,CACE;;AAEpB,YAAMioB,CAAC,GAAG,sBAAO,EAAP,EAAWjoB,CAAX,EAAc+c,GAAd,CAAV,CAHkB,CAGY;;AAE9B,UAAI,CAAC+hS,MAAL,EAAa72R,CAAC,CAAC8jS,IAAF,GAAS,kBAAIv9S,CAAC,CAAC9H,MAAF,IAAY,EAAhB,CAAT,CALK,CAKyB;AAC3C;;AAEA1G,MAAAA,CAAC,CAAC4rO,EAAD,CAAD,GAAQogF,QAAQ,CAACx9S,CAAD,EAAIyZ,CAAJ,EAAO6pO,KAAK,CAACm6D,GAAN,GAAYn6D,KAAZ,GAAoB,wBAASA,KAAK,CAAC7pO,CAAD,CAAd,CAA3B,EAA+C6qO,OAAO,CAACm5D,GAAR,GAAcn5D,OAAd,GAAwB,wBAASA,OAAO,CAAC7qO,CAAD,CAAhB,CAAvE,CAAhB;AACD,KATD;AAUA,WAAO60M,KAAK,CAACJ,MAAN,CAAa,IAAb,EAAmBM,QAAnB,CAA4B4O,EAA5B,CAAP;AACD;;AA7B0B,CAA7B,GA+BI;;AAEJ,SAASigF,MAAT,CAAgB/5D,KAAhB,EAAuB7uO,CAAvB,EAA0B;AACxB,MAAIhb,CAAJ;;AAEA,MAAI,0BAAW6pP,KAAX,CAAJ,EAAuB;AACrB7pP,IAAAA,CAAC,GAAG8U,GAAG,IAAI,kBAAI+0O,KAAK,CAAC/0O,GAAD,EAAMkG,CAAN,CAAT,CAAX;;AAEAhb,IAAAA,CAAC,CAACgkT,GAAF,GAAQC,UAAU,CAACp6D,KAAD,CAAlB;AACD,GAJD,MAIO;AACL;AACA7pP,IAAAA,CAAC,GAAG,wBAAS,kBAAI6pP,KAAK,IAAI,MAAb,CAAT,CAAJ;AACD;;AAED,SAAO7pP,CAAP;AACD,EAAC;;;AAGF,SAAS2jT,QAAT,CAAkB94D,OAAlB,EAA2B7vO,CAA3B,EAA8B;AAC5B,MAAIhb,CAAJ;;AAEA,MAAI,0BAAW6qP,OAAX,CAAJ,EAAyB;AACvB7qP,IAAAA,CAAC,GAAG8U,GAAG,IAAI+1O,OAAO,CAAC/1O,GAAD,EAAMkG,CAAN,CAAlB;;AAEAhb,IAAAA,CAAC,CAACgkT,GAAF,GAAQC,UAAU,CAACp5D,OAAD,CAAlB;AACD,GAJD,MAIO,IAAIA,OAAJ,EAAa;AAClB7qP,IAAAA,CAAC,GAAG,wBAAS6qP,OAAT,CAAJ;AACD,GAFM,MAEA;AACL;AACA7qP,IAAAA,CAAC,GAAG8U,GAAG,IAAIA,GAAG,CAAC+uS,MAAJ,GAAa/uS,GAAG,CAACgvS,IAAjB,IAAyB,CAApC;;AAEA9jT,IAAAA,CAAC,CAACgkT,GAAF,GAAQ,IAAR;AACD;;AAED,SAAOhkT,CAAP;AACD,EAAC;;;AAGF,SAASikT,UAAT,CAAoBjkT,CAApB,EAAuB;AACrB,MAAI,CAAC,0BAAWA,CAAX,CAAL,EAAoB,OAAO,KAAP;AACpB,QAAMhJ,GAAG,GAAG,qBAAM,8BAAegJ,CAAf,CAAN,CAAZ;AACA,SAAOhJ,GAAG,CAAC++B,EAAJ,IAAU/+B,GAAG,CAACshC,EAAd,IAAoBthC,GAAG,CAAC6sT,MAAxB,IAAkC7sT,GAAG,CAAC8sT,IAA7C;AACD,EAAC;;;AAGF,SAASC,QAAT,CAAkBz9B,IAAlB,EAAwBxxQ,GAAxB,EAA6B+0O,KAA7B,EAAoCgB,OAApC,EAA6C;AAC3C,QAAMtoP,CAAC,GAAG+jR,IAAI,CAAC/pR,KAAf;AAAA,QACMuvF,CAAC,GAAGw6L,IAAI,CAACh8P,MADf;AAAA,QAEMw8E,EAAE,GAAGw/K,IAAI,CAACx/K,EAAL,IAAW,CAFtB;AAAA,QAGMD,EAAE,GAAGy/K,IAAI,CAACz/K,EAAL,IAAW,CAHtB;AAAA,QAIM1zB,EAAE,GAAGmzM,IAAI,CAACnzM,EAAL,IAAW5wE,CAJtB;AAAA,QAKMwkG,EAAE,GAAGu/K,IAAI,CAACv/K,EAAL,IAAWjb,CALtB;AAAA,QAMMnxF,GAAG,GAAG2rR,IAAI,CAAC7nR,MANjB;AAAA,QAOMpH,KAAK,GAAGsD,GAAG,GAAGtG,CAAC,IAAIsG,GAAG,CAACtG,CAAD,CAAX,GAAiB41C,cAPlC;AAAA,QAQMi6Q,GAAG,GAAG,wBAAO/wO,EAAE,GAAG2zB,EAAZ,EAAgBC,EAAE,GAAGF,EAArB,CARZ;AAAA,QASMob,GAAG,GAAGiiM,GAAG,CAAC3gS,UAAJ,CAAe,IAAf,CATZ;AAAA,QAUMm+F,GAAG,GAAGO,GAAG,CAACT,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuBruC,EAAE,GAAG2zB,EAA5B,EAAgCC,EAAE,GAAGF,EAArC,CAVZ;AAAA,QAWMs9M,GAAG,GAAGziM,GAAG,CAACr+G,IAXhB;;AAaA,OAAK,IAAI/E,CAAC,GAAGuoG,EAAR,EAAYl1F,CAAC,GAAG,CAArB,EAAwBrT,CAAC,GAAGyoG,EAA5B,EAAgC,EAAEzoG,CAAlC,EAAqC;AACnCwW,IAAAA,GAAG,CAACwjB,EAAJ,GAASh6B,CAAC,GAAGuoG,EAAb;;AAEA,SAAK,IAAIxyG,CAAC,GAAGyyG,EAAR,EAAYzkG,CAAC,GAAG/D,CAAC,GAAGiE,CAAzB,EAA4BlO,CAAC,GAAG8+E,EAAhC,EAAoC,EAAE9+E,CAAF,EAAKsd,CAAC,IAAI,CAA9C,EAAiD;AAC/CmD,MAAAA,GAAG,CAACihB,EAAJ,GAAS1hC,CAAC,GAAGyyG,EAAb;AACAhyF,MAAAA,GAAG,CAAC+uS,MAAJ,GAAaxsT,KAAK,CAAChD,CAAC,GAAGgO,CAAL,CAAlB;AACA,YAAMkE,CAAC,GAAGsjP,KAAK,CAAC/0O,GAAD,CAAf;AACAqvS,MAAAA,GAAG,CAACxyS,CAAC,GAAG,CAAL,CAAH,GAAapL,CAAC,CAAClE,CAAf;AACA8hT,MAAAA,GAAG,CAACxyS,CAAC,GAAG,CAAL,CAAH,GAAapL,CAAC,CAACu8B,CAAf;AACAqhR,MAAAA,GAAG,CAACxyS,CAAC,GAAG,CAAL,CAAH,GAAapL,CAAC,CAACnE,CAAf;AACA+hT,MAAAA,GAAG,CAACxyS,CAAC,GAAG,CAAL,CAAH,GAAa,CAAC,EAAE,MAAMk5O,OAAO,CAAC/1O,GAAD,CAAf,CAAd;AACD;AACF;;AAEDmtG,EAAAA,GAAG,CAACE,YAAJ,CAAiBT,GAAjB,EAAsB,CAAtB,EAAyB,CAAzB;AACA,SAAOwiM,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AAEA,SAASE,UAAT,CAAoB1sT,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;;AACA,OAAK09N,QAAL,CAAc,IAAd,EAF0B,CAEL;AACtB;;AACD,wBAASgvF,UAAT,EAAqB9nF,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIznI,IAAI,GAAG,KAAK/1F,KAAhB;;AAEA,QAAI,CAAC+1F,IAAD,IAASpyE,CAAC,CAACo6M,QAAF,CAAW,MAAX,CAAb,EAAiC;AAC/B,WAAK/9N,KAAL,GAAa+1F,IAAI,GAAG6+F,MAAM,CAACjxK,CAAC,CAAC1G,IAAH,CAA1B;;AACA2qS,2CAAqB9mT,OAArB,CAA6BizE,IAAI,IAAI;AACnC,YAAIpwD,CAAC,CAACowD,IAAD,CAAD,IAAW,IAAf,EAAqBp0E,GAAG,CAACo2F,IAAD,EAAOhiB,IAAP,EAAapwD,CAAC,CAACowD,IAAD,CAAd,CAAH;AACtB,OAFD;AAGD,KALD,MAKO;AACL6zO,2CAAqB9mT,OAArB,CAA6BizE,IAAI,IAAI;AACnC,YAAIpwD,CAAC,CAACo6M,QAAF,CAAWhqJ,IAAX,CAAJ,EAAsBp0E,GAAG,CAACo2F,IAAD,EAAOhiB,IAAP,EAAapwD,CAAC,CAACowD,IAAD,CAAd,CAAH;AACvB,OAFD;AAGD;;AAED,QAAIpwD,CAAC,CAACgiR,WAAF,IAAiB,IAArB,EAA2B5vM,IAAI,CAAC1qF,IAAL,CAAUs6R,WAAV,CAAsBhiR,CAAC,CAACgiR,WAAxB;AAC3B,QAAIhiR,CAAC,CAAC+pI,GAAN,EAAWA,GAAG,CAAC33D,IAAD,EAAOpyE,CAAP,CAAH;AACX,WAAO65M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAP;AACD;;AAlB6B,CAAhC;;AAsBA,SAASn0E,GAAT,CAAa33D,IAAb,EAAmBpyE,CAAnB,EAAsB;AACpB,QAAM3X,IAAI,GAAGghT,cAAc,CAACrpS,CAAC,CAAC+pI,GAAH,CAA3B;AACA/pI,EAAAA,CAAC,CAAC0yL,MAAF,GAAWtgH,IAAI,CAAC2wM,SAAL,CAAe/iR,CAAC,CAAC0yL,MAAjB,EAAyBrqM,IAAzB,CAAX,GAA4C2X,CAAC,CAAClf,IAAF,GAASsxF,IAAI,CAAC4wM,OAAL,CAAahjR,CAAC,CAAClf,IAAf,EAAqBuH,IAArB,CAAT,GAAsC,CAAlF;AACD;;AAED,SAAS4oL,MAAT,CAAgB33K,IAAhB,EAAsB;AACpB,QAAMrU,WAAW,GAAG,gCAAW,CAACqU,IAAI,IAAI,UAAT,EAAqB9b,WAArB,EAAX,CAApB;AACA,MAAI,CAACyH,WAAL,EAAkB,qBAAM,mCAAmCqU,IAAzC;AAClB,SAAOrU,WAAW,EAAlB;AACD;;AAED,SAASjJ,GAAT,CAAao2F,IAAb,EAAmB90F,GAAnB,EAAwBjB,KAAxB,EAA+B;AAC7B,MAAI,0BAAW+1F,IAAI,CAAC90F,GAAD,CAAf,CAAJ,EAA2B80F,IAAI,CAAC90F,GAAD,CAAJ,CAAUjB,KAAV;AAC5B;;AAED,SAASgtT,cAAT,CAAwBhhT,IAAxB,EAA8B;AAC5BA,EAAAA,IAAI,GAAG,qBAAMA,IAAN,CAAP;AACA,SAAOA,IAAI,CAAC1P,MAAL,KAAgB,CAAhB,GAAoB0P,IAAI,CAAC,CAAD,CAAxB,GAA8B;AACnCiR,IAAAA,IAAI,EAAEw7Q,iBAD6B;AAEnC5rG,IAAAA,QAAQ,EAAE7gL,IAAI,CAACzC,MAAL,CAAY,CAACrF,CAAD,EAAIyE,CAAJ,KAAUzE,CAAC,CAAC3H,MAAF,CAAS0wT,SAAS,CAACtkT,CAAD,CAAlB,CAAtB,EAA8C,EAA9C;AAFyB,GAArC;AAID;;AAED,SAASskT,SAAT,CAAmBtkT,CAAnB,EAAsB;AACpB,SAAOA,CAAC,CAACsU,IAAF,KAAWw7Q,iBAAX,GAA+B9vR,CAAC,CAACkkL,QAAjC,GAA4C,qBAAMlkL,CAAN,EAASwP,MAAT,CAAgBtO,CAAC,IAAIA,CAAC,IAAI,IAA1B,EAAgCpD,GAAhC,CAAoCoD,CAAC,IAAIA,CAAC,CAACoT,IAAF,KAAWu7Q,OAAX,GAAqB3uR,CAArB,GAAyB;AACnHoT,IAAAA,IAAI,EAAEu7Q,OAD6G;AAEnHp6E,IAAAA,QAAQ,EAAEv0M;AAFyG,GAAlE,CAAnD;AAID;;;;;;;;;ACl6Cc,kBAAS1G,CAAT,EAAYue,CAAZ,EAAe;AAC5B,MAAIovH,KAAJ;AAAA,MAAWo8K,QAAQ,GAAG,CAAtB;AAEA,MAAI/pT,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIue,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;;AAEf,WAASo8M,KAAT,GAAiB;AACf,QAAI9gO,CAAJ;AAAA,QACIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MADd;AAAA,QAEIyrB,IAFJ;AAAA,QAGI6wP,EAAE,GAAG,CAHT;AAAA,QAIIC,EAAE,GAAG,CAJT;;AAMA,SAAK77Q,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB47Q,EAAE,IAAI7wP,IAAI,CAAC5kB,CAA5B,EAA+B01Q,EAAE,IAAI9wP,IAAI,CAACrG,CAA1C;AACD;;AAED,SAAKk3P,EAAE,GAAG,CAACA,EAAE,GAAG1tQ,CAAL,GAAS/H,CAAV,IAAe+pT,QAApB,EAA8Br0C,EAAE,GAAG,CAACA,EAAE,GAAG3tQ,CAAL,GAASwW,CAAV,IAAewrS,QAAlD,EAA4DlwT,CAAC,GAAG,CAArE,EAAwEA,CAAC,GAAGkO,CAA5E,EAA+E,EAAElO,CAAjF,EAAoF;AAClF+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAAC5kB,CAAL,IAAUy1Q,EAA3B,EAA+B7wP,IAAI,CAACrG,CAAL,IAAUm3P,EAAzC;AACD;AACF;;AAED/6C,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS94P,CAAT,EAAY;AAC7BmtH,IAAAA,KAAK,GAAGntH,CAAR;AACD,GAFD;;AAIAm6M,EAAAA,KAAK,CAAC36N,CAAN,GAAU,UAASwgB,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,CAACwgB,CAAL,EAAQm6M,KAA5B,IAAqC36N,CAA5C;AACD,GAFD;;AAIA26N,EAAAA,KAAK,CAACp8M,CAAN,GAAU,UAASiC,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,CAACiC,CAAL,EAAQm6M,KAA5B,IAAqCp8M,CAA5C;AACD,GAFD;;AAIAo8M,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,CAACvpS,CAAZ,EAAem6M,KAAnC,IAA4CovF,QAAnD;AACD,GAFD;;AAIA,SAAOpvF,KAAP;AACD;;;;;;;;;;ACvCc,kBAASj0N,CAAT,EAAY;AACzB,QAAM1G,CAAC,GAAG,CAAC,KAAKugP,EAAL,CAAQ5nP,IAAR,CAAa,IAAb,EAAmB+N,CAAnB,CAAX;AAAA,QACI6X,CAAC,GAAG,CAAC,KAAKiiO,EAAL,CAAQ7nP,IAAR,CAAa,IAAb,EAAmB+N,CAAnB,CADT;AAEA,SAAO8T,GAAG,CAAC,KAAKwvS,KAAL,CAAWhqT,CAAX,EAAcue,CAAd,CAAD,EAAmBve,CAAnB,EAAsBue,CAAtB,EAAyB7X,CAAzB,CAAV;AACD;;AAED,SAAS8T,GAAT,CAAawjL,IAAb,EAAmBh+L,CAAnB,EAAsBue,CAAtB,EAAyB7X,CAAzB,EAA4B;AAC1B,MAAIjC,KAAK,CAACzE,CAAD,CAAL,IAAYyE,KAAK,CAAC8Z,CAAD,CAArB,EAA0B,OAAOy/K,IAAP,CADA,CACa;;AAEvC,MAAIuT,MAAJ;AAAA,MACI3sL,IAAI,GAAGo5K,IAAI,CAAComF,KADhB;AAAA,MAEI6lC,IAAI,GAAG;AAACphT,IAAAA,IAAI,EAAEnC;AAAP,GAFX;AAAA,MAGIwzM,EAAE,GAAGlc,IAAI,CAACi5C,GAHd;AAAA,MAII98B,EAAE,GAAGnc,IAAI,CAACk5C,GAJd;AAAA,MAKI5qI,EAAE,GAAG0xF,IAAI,CAACm5C,GALd;AAAA,MAMI9qI,EAAE,GAAG2xF,IAAI,CAACo5C,GANd;AAAA,MAOIjuC,EAPJ;AAAA,MAQI+gH,EARJ;AAAA,MASI9gH,EATJ;AAAA,MAUIo6C,EAVJ;AAAA,MAWIv2M,KAXJ;AAAA,MAYIF,MAZJ;AAAA,MAaIlzC,CAbJ;AAAA,MAcIiK,CAdJ,CAH0B,CAmB1B;;AACA,MAAI,CAAC8gB,IAAL,EAAW,OAAOo5K,IAAI,CAAComF,KAAL,GAAa6lC,IAAb,EAAmBjsH,IAA1B,CApBe,CAsB1B;;AACA,SAAOp5K,IAAI,CAACzrB,MAAZ,EAAoB;AAClB,QAAI8zC,KAAK,GAAGjtC,CAAC,KAAKmpM,EAAE,GAAG,CAAC+Q,EAAE,GAAG5tG,EAAN,IAAY,CAAtB,CAAb,EAAuC4tG,EAAE,GAAG/Q,EAAL,CAAvC,KAAqD78F,EAAE,GAAG68F,EAAL;AACrD,QAAIp8J,MAAM,GAAGxuB,CAAC,KAAK2rS,EAAE,GAAG,CAAC/vG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB,CAAd,EAAwC8tG,EAAE,GAAG+vG,EAAL,CAAxC,KAAsD79M,EAAE,GAAG69M,EAAL;AACtD,QAAI34G,MAAM,GAAG3sL,IAAT,EAAe,EAAEA,IAAI,GAAGA,IAAI,CAAC/qB,CAAC,GAAGkzC,MAAM,IAAI,CAAV,GAAcE,KAAnB,CAAb,CAAnB,EAA4D,OAAOskK,MAAM,CAAC13M,CAAD,CAAN,GAAYowT,IAAZ,EAAkBjsH,IAAzB;AAC7D,GA3ByB,CA6B1B;;;AACAoL,EAAAA,EAAE,GAAG,CAACpL,IAAI,CAACuiD,EAAL,CAAQ5nP,IAAR,CAAa,IAAb,EAAmBisB,IAAI,CAAC/b,IAAxB,CAAN;AACA26O,EAAAA,EAAE,GAAG,CAACxlD,IAAI,CAACwiD,EAAL,CAAQ7nP,IAAR,CAAa,IAAb,EAAmBisB,IAAI,CAAC/b,IAAxB,CAAN;AACA,MAAI7I,CAAC,KAAKopM,EAAN,IAAY7qL,CAAC,KAAKilO,EAAtB,EAA0B,OAAOymE,IAAI,CAAC17O,IAAL,GAAY3pD,IAAZ,EAAkB2sL,MAAM,GAAGA,MAAM,CAAC13M,CAAD,CAAN,GAAYowT,IAAf,GAAsBjsH,IAAI,CAAComF,KAAL,GAAa6lC,IAA3D,EAAiEjsH,IAAxE,CAhCA,CAkC1B;;AACA,KAAG;AACDuT,IAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAC13M,CAAD,CAAN,GAAY,IAAIF,KAAJ,CAAU,CAAV,CAAf,GAA8BqkM,IAAI,CAAComF,KAAL,GAAa,IAAIzqR,KAAJ,CAAU,CAAV,CAA1D;AACA,QAAIszC,KAAK,GAAGjtC,CAAC,KAAKmpM,EAAE,GAAG,CAAC+Q,EAAE,GAAG5tG,EAAN,IAAY,CAAtB,CAAb,EAAuC4tG,EAAE,GAAG/Q,EAAL,CAAvC,KAAqD78F,EAAE,GAAG68F,EAAL;AACrD,QAAIp8J,MAAM,GAAGxuB,CAAC,KAAK2rS,EAAE,GAAG,CAAC/vG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB,CAAd,EAAwC8tG,EAAE,GAAG+vG,EAAL,CAAxC,KAAsD79M,EAAE,GAAG69M,EAAL;AACvD,GAJD,QAIS,CAACrwT,CAAC,GAAGkzC,MAAM,IAAI,CAAV,GAAcE,KAAnB,OAA+BnpC,CAAC,GAAG,CAAC0/O,EAAE,IAAI0mE,EAAP,KAAc,CAAd,GAAmB9gH,EAAE,IAAID,EAA5D,CAJT;;AAKA,SAAOoI,MAAM,CAACztM,CAAD,CAAN,GAAY8gB,IAAZ,EAAkB2sL,MAAM,CAAC13M,CAAD,CAAN,GAAYowT,IAA9B,EAAoCjsH,IAA3C;AACD;;AAEM,SAASghC,MAAT,CAAgBn2N,IAAhB,EAAsB;AAC3B,MAAInC,CAAJ;AAAA,MAAO7M,CAAP;AAAA,MAAUkO,CAAC,GAAGc,IAAI,CAAC1P,MAAnB;AAAA,MACI6G,CADJ;AAAA,MAEIue,CAFJ;AAAA,MAGIkiM,EAAE,GAAG,IAAI9mN,KAAJ,CAAUoO,CAAV,CAHT;AAAA,MAIIoiT,EAAE,GAAG,IAAIxwT,KAAJ,CAAUoO,CAAV,CAJT;AAAA,MAKImyM,EAAE,GAAGv4M,QALT;AAAA,MAMIw4M,EAAE,GAAGx4M,QANT;AAAA,MAOI2qG,EAAE,GAAG,CAAC3qG,QAPV;AAAA,MAQI0qG,EAAE,GAAG,CAAC1qG,QARV,CAD2B,CAW3B;;AACA,OAAK9H,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,QAAI4K,KAAK,CAACzE,CAAC,GAAG,CAAC,KAAKugP,EAAL,CAAQ5nP,IAAR,CAAa,IAAb,EAAmB+N,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAA3B,CAAN,CAAL,IAA+C4K,KAAK,CAAC8Z,CAAC,GAAG,CAAC,KAAKiiO,EAAL,CAAQ7nP,IAAR,CAAa,IAAb,EAAmB+N,CAAnB,CAAN,CAAxD,EAAsF;AACtF+5M,IAAAA,EAAE,CAAC5mN,CAAD,CAAF,GAAQmG,CAAR;AACAmqT,IAAAA,EAAE,CAACtwT,CAAD,CAAF,GAAQ0kB,CAAR;AACA,QAAIve,CAAC,GAAGk6M,EAAR,EAAYA,EAAE,GAAGl6M,CAAL;AACZ,QAAIA,CAAC,GAAGssG,EAAR,EAAYA,EAAE,GAAGtsG,CAAL;AACZ,QAAIue,CAAC,GAAG47L,EAAR,EAAYA,EAAE,GAAG57L,CAAL;AACZ,QAAIA,CAAC,GAAG8tF,EAAR,EAAYA,EAAE,GAAG9tF,CAAL;AACb,GApB0B,CAsB3B;;;AACA,MAAI27L,EAAE,GAAG5tG,EAAL,IAAW6tG,EAAE,GAAG9tG,EAApB,EAAwB,OAAO,IAAP,CAvBG,CAyB3B;;AACA,OAAK29M,KAAL,CAAW9vG,EAAX,EAAeC,EAAf,EAAmB6vG,KAAnB,CAAyB19M,EAAzB,EAA6BD,EAA7B,EA1B2B,CA4B3B;;AACA,OAAKxyG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB2gB,IAAAA,GAAG,CAAC,IAAD,EAAOimM,EAAE,CAAC5mN,CAAD,CAAT,EAAcswT,EAAE,CAACtwT,CAAD,CAAhB,EAAqBgP,IAAI,CAAChP,CAAD,CAAzB,CAAH;AACD;;AAED,SAAO,IAAP;AACD;;;;;;;;;ACnFc,kBAASmG,CAAT,EAAYue,CAAZ,EAAe;AAC5B,MAAI9Z,KAAK,CAACzE,CAAC,GAAG,CAACA,CAAN,CAAL,IAAiByE,KAAK,CAAC8Z,CAAC,GAAG,CAACA,CAAN,CAA1B,EAAoC,OAAO,IAAP,CADR,CACqB;;AAEjD,MAAI27L,EAAE,GAAG,KAAK+8B,GAAd;AAAA,MACI98B,EAAE,GAAG,KAAK+8B,GADd;AAAA,MAEI5qI,EAAE,GAAG,KAAK6qI,GAFd;AAAA,MAGI9qI,EAAE,GAAG,KAAK+qI,GAHd,CAH4B,CAQ5B;AACA;AACA;;AACA,MAAI3yO,KAAK,CAACy1M,EAAD,CAAT,EAAe;AACb5tG,IAAAA,EAAE,GAAG,CAAC4tG,EAAE,GAAGt6M,IAAI,CAAC+H,KAAL,CAAW3H,CAAX,CAAN,IAAuB,CAA5B;AACAqsG,IAAAA,EAAE,GAAG,CAAC8tG,EAAE,GAAGv6M,IAAI,CAAC+H,KAAL,CAAW4W,CAAX,CAAN,IAAuB,CAA5B;AACD,GAHD,CAKA;AALA,OAMK;AACH,UAAI+wD,CAAC,GAAGg9B,EAAE,GAAG4tG,EAAL,IAAW,CAAnB;AAAA,UACIt1L,IAAI,GAAG,KAAKw/P,KADhB;AAAA,UAEI7yE,MAFJ;AAAA,UAGI13M,CAHJ;;AAKA,aAAOqgN,EAAE,GAAGl6M,CAAL,IAAUA,CAAC,IAAIssG,EAAf,IAAqB6tG,EAAE,GAAG57L,CAA1B,IAA+BA,CAAC,IAAI8tF,EAA3C,EAA+C;AAC7CxyG,QAAAA,CAAC,GAAG,CAAC0kB,CAAC,GAAG47L,EAAL,KAAY,CAAZ,GAAiBn6M,CAAC,GAAGk6M,EAAzB;AACA3I,QAAAA,MAAM,GAAG,IAAI53M,KAAJ,CAAU,CAAV,CAAT,EAAuB43M,MAAM,CAAC13M,CAAD,CAAN,GAAY+qB,IAAnC,EAAyCA,IAAI,GAAG2sL,MAAhD,EAAwDjiI,CAAC,IAAI,CAA7D;;AACA,gBAAQz1E,CAAR;AACE,eAAK,CAAL;AAAQyyG,YAAAA,EAAE,GAAG4tG,EAAE,GAAG5qI,CAAV,EAAa+8B,EAAE,GAAG8tG,EAAE,GAAG7qI,CAAvB;AAA0B;;AAClC,eAAK,CAAL;AAAQ4qI,YAAAA,EAAE,GAAG5tG,EAAE,GAAGh9B,CAAV,EAAa+8B,EAAE,GAAG8tG,EAAE,GAAG7qI,CAAvB;AAA0B;;AAClC,eAAK,CAAL;AAAQg9B,YAAAA,EAAE,GAAG4tG,EAAE,GAAG5qI,CAAV,EAAa6qI,EAAE,GAAG9tG,EAAE,GAAG/8B,CAAvB;AAA0B;;AAClC,eAAK,CAAL;AAAQ4qI,YAAAA,EAAE,GAAG5tG,EAAE,GAAGh9B,CAAV,EAAa6qI,EAAE,GAAG9tG,EAAE,GAAG/8B,CAAvB;AAA0B;AAJpC;AAMD;;AAED,UAAI,KAAK80M,KAAL,IAAc,KAAKA,KAAL,CAAWjrR,MAA7B,EAAqC,KAAKirR,KAAL,GAAax/P,IAAb;AACtC;;AAED,OAAKqyN,GAAL,GAAW/8B,EAAX;AACA,OAAKg9B,GAAL,GAAW/8B,EAAX;AACA,OAAKg9B,GAAL,GAAW7qI,EAAX;AACA,OAAK8qI,GAAL,GAAW/qI,EAAX;AACA,SAAO,IAAP;AACD;;;;;;;;;AC1Cc,oBAAW;AACxB,MAAIxjG,IAAI,GAAG,EAAX;AACA,OAAKg2N,KAAL,CAAW,UAASj6M,IAAT,EAAe;AACxB,QAAI,CAACA,IAAI,CAACzrB,MAAV,EAAkB,GAAG0P,IAAI,CAAC/O,IAAL,CAAU8qB,IAAI,CAAC/b,IAAf,EAAH,QAAgC+b,IAAI,GAAGA,IAAI,CAAC2pD,IAA5C;AACnB,GAFD;AAGA,SAAO1lE,IAAP;AACD;;;;;;;;;ACNc,kBAAS2X,CAAT,EAAY;AACzB,SAAO5mB,SAAS,CAACT,MAAV,GACD,KAAK6wT,KAAL,CAAW,CAACxpS,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAZ,EAAqB,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB,EAA+BwpS,KAA/B,CAAqC,CAACxpS,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtC,EAA+C,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAhD,CADC,GAED/b,KAAK,CAAC,KAAKwyO,GAAN,CAAL,GAAkBloH,SAAlB,GAA8B,CAAC,CAAC,KAAKkoH,GAAN,EAAW,KAAKC,GAAhB,CAAD,EAAuB,CAAC,KAAKC,GAAN,EAAW,KAAKC,GAAhB,CAAvB,CAFpC;AAGD;;;;;;;;;ACJc,kBAASxyN,IAAT,EAAes1L,EAAf,EAAmBC,EAAnB,EAAuB7tG,EAAvB,EAA2BD,EAA3B,EAA+B;AAC5C,OAAKznF,IAAL,GAAYA,IAAZ;AACA,OAAKs1L,EAAL,GAAUA,EAAV;AACA,OAAKC,EAAL,GAAUA,EAAV;AACA,OAAK7tG,EAAL,GAAUA,EAAV;AACA,OAAKD,EAAL,GAAUA,EAAV;AACD;;;;;;;;;ACND;;;;AAEe,kBAASrsG,CAAT,EAAYue,CAAZ,EAAevI,MAAf,EAAuB;AACpC,MAAInN,IAAJ;AAAA,MACIqxM,EAAE,GAAG,KAAK+8B,GADd;AAAA,MAEI98B,EAAE,GAAG,KAAK+8B,GAFd;AAAA,MAGI5qI,EAHJ;AAAA,MAIID,EAJJ;AAAA,MAKI1zB,EALJ;AAAA,MAMI4zB,EANJ;AAAA,MAOIgtI,EAAE,GAAG,KAAKpC,GAPd;AAAA,MAQIqC,EAAE,GAAG,KAAKpC,GARd;AAAA,MASIgzE,KAAK,GAAG,EATZ;AAAA,MAUIxlS,IAAI,GAAG,KAAKw/P,KAVhB;AAAA,MAWI7yL,CAXJ;AAAA,MAYI13F,CAZJ;AAcA,MAAI+qB,IAAJ,EAAUwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAASzlS,IAAT,EAAes1L,EAAf,EAAmBC,EAAnB,EAAuBo/B,EAAvB,EAA2BC,EAA3B,CAAX;AACV,MAAIxjO,MAAM,IAAI,IAAd,EAAoBA,MAAM,GAAGrU,QAAT,CAApB,KACK;AACHu4M,IAAAA,EAAE,GAAGl6M,CAAC,GAAGgW,MAAT,EAAiBmkM,EAAE,GAAG57L,CAAC,GAAGvI,MAA1B;AACAujO,IAAAA,EAAE,GAAGv5O,CAAC,GAAGgW,MAAT,EAAiBwjO,EAAE,GAAGj7N,CAAC,GAAGvI,MAA1B;AACAA,IAAAA,MAAM,IAAIA,MAAV;AACD;;AAED,SAAOu7E,CAAC,GAAG64N,KAAK,CAACnmS,GAAN,EAAX,EAAwB;AAEtB;AACA,QAAI,EAAEW,IAAI,GAAG2sE,CAAC,CAAC3sE,IAAX,KACG,CAAC0nF,EAAE,GAAG/a,CAAC,CAAC2oH,EAAR,IAAcq/B,EADjB,IAEG,CAACltI,EAAE,GAAG9a,CAAC,CAAC4oH,EAAR,IAAcq/B,EAFjB,IAGG,CAAC7gK,EAAE,GAAG4Y,CAAC,CAAC+a,EAAR,IAAc4tG,EAHjB,IAIG,CAAC3tG,EAAE,GAAGhb,CAAC,CAAC8a,EAAR,IAAc8tG,EAJrB,EAIyB,SAPH,CAStB;;AACA,QAAIv1L,IAAI,CAACzrB,MAAT,EAAiB;AACf,UAAIgwM,EAAE,GAAG,CAAC78F,EAAE,GAAG3zB,EAAN,IAAY,CAArB;AAAA,UACIuxO,EAAE,GAAG,CAAC79M,EAAE,GAAGE,EAAN,IAAY,CADrB;AAGA69M,MAAAA,KAAK,CAACtwT,IAAN,CACE,IAAIuwT,aAAJ,CAASzlS,IAAI,CAAC,CAAD,CAAb,EAAkBukL,EAAlB,EAAsB+gH,EAAtB,EAA0BvxO,EAA1B,EAA8B4zB,EAA9B,CADF,EAEE,IAAI89M,aAAJ,CAASzlS,IAAI,CAAC,CAAD,CAAb,EAAkB0nF,EAAlB,EAAsB49M,EAAtB,EAA0B/gH,EAA1B,EAA8B58F,EAA9B,CAFF,EAGE,IAAI89M,aAAJ,CAASzlS,IAAI,CAAC,CAAD,CAAb,EAAkBukL,EAAlB,EAAsB98F,EAAtB,EAA0B1zB,EAA1B,EAA8BuxO,EAA9B,CAHF,EAIE,IAAIG,aAAJ,CAASzlS,IAAI,CAAC,CAAD,CAAb,EAAkB0nF,EAAlB,EAAsBD,EAAtB,EAA0B88F,EAA1B,EAA8B+gH,EAA9B,CAJF,EAJe,CAWf;;AACA,UAAIrwT,CAAC,GAAG,CAAC0kB,CAAC,IAAI2rS,EAAN,KAAa,CAAb,GAAkBlqT,CAAC,IAAImpM,EAA/B,EAAoC;AAClC53G,QAAAA,CAAC,GAAG64N,KAAK,CAACA,KAAK,CAACjxT,MAAN,GAAe,CAAhB,CAAT;AACAixT,QAAAA,KAAK,CAACA,KAAK,CAACjxT,MAAN,GAAe,CAAhB,CAAL,GAA0BixT,KAAK,CAACA,KAAK,CAACjxT,MAAN,GAAe,CAAf,GAAmBU,CAApB,CAA/B;AACAuwT,QAAAA,KAAK,CAACA,KAAK,CAACjxT,MAAN,GAAe,CAAf,GAAmBU,CAApB,CAAL,GAA8B03F,CAA9B;AACD;AACF,KAjBD,CAmBA;AAnBA,SAoBK;AACH,YAAI5rE,EAAE,GAAG3lB,CAAC,GAAG,CAAC,KAAKugP,EAAL,CAAQ5nP,IAAR,CAAa,IAAb,EAAmBisB,IAAI,CAAC/b,IAAxB,CAAd;AAAA,YACI8V,EAAE,GAAGJ,CAAC,GAAG,CAAC,KAAKiiO,EAAL,CAAQ7nP,IAAR,CAAa,IAAb,EAAmBisB,IAAI,CAAC/b,IAAxB,CADd;AAAA,YAEIo6D,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAFxB;;AAGA,YAAIskD,EAAE,GAAGjtD,MAAT,EAAiB;AACf,cAAItP,CAAC,GAAG9G,IAAI,CAACqC,IAAL,CAAU+T,MAAM,GAAGitD,EAAnB,CAAR;AACAi3I,UAAAA,EAAE,GAAGl6M,CAAC,GAAG0G,CAAT,EAAYyzM,EAAE,GAAG57L,CAAC,GAAG7X,CAArB;AACA6yO,UAAAA,EAAE,GAAGv5O,CAAC,GAAG0G,CAAT,EAAY8yO,EAAE,GAAGj7N,CAAC,GAAG7X,CAArB;AACAmC,UAAAA,IAAI,GAAG+b,IAAI,CAAC/b,IAAZ;AACD;AACF;AACF;;AAED,SAAOA,IAAP;AACD;;;;;;;;;;ACrEc,kBAASnC,CAAT,EAAY;AACzB,MAAIjC,KAAK,CAACzE,CAAC,GAAG,CAAC,KAAKugP,EAAL,CAAQ5nP,IAAR,CAAa,IAAb,EAAmB+N,CAAnB,CAAN,CAAL,IAAqCjC,KAAK,CAAC8Z,CAAC,GAAG,CAAC,KAAKiiO,EAAL,CAAQ7nP,IAAR,CAAa,IAAb,EAAmB+N,CAAnB,CAAN,CAA9C,EAA4E,OAAO,IAAP,CADnD,CACgE;;AAEzF,MAAI6qM,MAAJ;AAAA,MACI3sL,IAAI,GAAG,KAAKw/P,KADhB;AAAA,MAEIkmC,QAFJ;AAAA,MAGI5oG,QAHJ;AAAA,MAIInzI,IAJJ;AAAA,MAKI2rI,EAAE,GAAG,KAAK+8B,GALd;AAAA,MAMI98B,EAAE,GAAG,KAAK+8B,GANd;AAAA,MAOI5qI,EAAE,GAAG,KAAK6qI,GAPd;AAAA,MAQI9qI,EAAE,GAAG,KAAK+qI,GARd;AAAA,MASIp3O,CATJ;AAAA,MAUIue,CAVJ;AAAA,MAWI4qL,EAXJ;AAAA,MAYI+gH,EAZJ;AAAA,MAaIj9Q,KAbJ;AAAA,MAcIF,MAdJ;AAAA,MAeIlzC,CAfJ;AAAA,MAgBIiK,CAhBJ,CAHyB,CAqBzB;;AACA,MAAI,CAAC8gB,IAAL,EAAW,OAAO,IAAP,CAtBc,CAwBzB;AACA;;AACA,MAAIA,IAAI,CAACzrB,MAAT,EAAiB,OAAO,IAAP,EAAa;AAC5B,QAAI8zC,KAAK,GAAGjtC,CAAC,KAAKmpM,EAAE,GAAG,CAAC+Q,EAAE,GAAG5tG,EAAN,IAAY,CAAtB,CAAb,EAAuC4tG,EAAE,GAAG/Q,EAAL,CAAvC,KAAqD78F,EAAE,GAAG68F,EAAL;AACrD,QAAIp8J,MAAM,GAAGxuB,CAAC,KAAK2rS,EAAE,GAAG,CAAC/vG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB,CAAd,EAAwC8tG,EAAE,GAAG+vG,EAAL,CAAxC,KAAsD79M,EAAE,GAAG69M,EAAL;AACtD,QAAI,EAAE34G,MAAM,GAAG3sL,IAAT,EAAeA,IAAI,GAAGA,IAAI,CAAC/qB,CAAC,GAAGkzC,MAAM,IAAI,CAAV,GAAcE,KAAnB,CAA5B,CAAJ,EAA4D,OAAO,IAAP;AAC5D,QAAI,CAACroB,IAAI,CAACzrB,MAAV,EAAkB;AAClB,QAAIo4M,MAAM,CAAE13M,CAAC,GAAG,CAAL,GAAU,CAAX,CAAN,IAAuB03M,MAAM,CAAE13M,CAAC,GAAG,CAAL,GAAU,CAAX,CAA7B,IAA8C03M,MAAM,CAAE13M,CAAC,GAAG,CAAL,GAAU,CAAX,CAAxD,EAAuEywT,QAAQ,GAAG/4G,MAAX,EAAmBztM,CAAC,GAAGjK,CAAvB;AACxE,GAhCwB,CAkCzB;;AACA,SAAO+qB,IAAI,CAAC/b,IAAL,KAAcnC,CAArB,EAAwB,IAAI,EAAEg7M,QAAQ,GAAG98L,IAAX,EAAiBA,IAAI,GAAGA,IAAI,CAAC2pD,IAA/B,CAAJ,EAA0C,OAAO,IAAP;;AAClE,MAAIA,IAAI,GAAG3pD,IAAI,CAAC2pD,IAAhB,EAAsB,OAAO3pD,IAAI,CAAC2pD,IAAZ,CApCG,CAsCzB;;AACA,MAAImzI,QAAJ,EAAc,OAAQnzI,IAAI,GAAGmzI,QAAQ,CAACnzI,IAAT,GAAgBA,IAAnB,GAA0B,OAAOmzI,QAAQ,CAACnzI,IAA/C,EAAsD,IAA7D,CAvCW,CAyCzB;;AACA,MAAI,CAACgjI,MAAL,EAAa,OAAO,KAAK6yE,KAAL,GAAa71M,IAAb,EAAmB,IAA1B,CA1CY,CA4CzB;;AACAA,EAAAA,IAAI,GAAGgjI,MAAM,CAAC13M,CAAD,CAAN,GAAY00E,IAAf,GAAsB,OAAOgjI,MAAM,CAAC13M,CAAD,CAAvC,CA7CyB,CA+CzB;;AACA,MAAI,CAAC+qB,IAAI,GAAG2sL,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAArD,KACG3sL,IAAI,MAAM2sL,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAAnD,CADP,IAEG,CAAC3sL,IAAI,CAACzrB,MAFb,EAEqB;AACnB,QAAImxT,QAAJ,EAAcA,QAAQ,CAACxmT,CAAD,CAAR,GAAc8gB,IAAd,CAAd,KACK,KAAKw/P,KAAL,GAAax/P,IAAb;AACN;;AAED,SAAO,IAAP;AACD;;AAEM,SAAS2lS,SAAT,CAAmB1hT,IAAnB,EAAyB;AAC9B,OAAK,IAAIhP,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGc,IAAI,CAAC1P,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C,KAAKmzE,MAAL,CAAYnkE,IAAI,CAAChP,CAAD,CAAhB;;AAC7C,SAAO,IAAP;AACD;;;;;;;;;AC7Dc,oBAAW;AACxB,SAAO,KAAKuqR,KAAZ;AACD;;;;;;;;;ACFc,oBAAW;AACxB,MAAI9iR,IAAI,GAAG,CAAX;AACA,OAAKu9N,KAAL,CAAW,UAASj6M,IAAT,EAAe;AACxB,QAAI,CAACA,IAAI,CAACzrB,MAAV,EAAkB,GAAG,EAAEmI,IAAF,CAAH,QAAkBsjB,IAAI,GAAGA,IAAI,CAAC2pD,IAA9B;AACnB,GAFD;AAGA,SAAOjtE,IAAP;AACD;;;;;;;;;ACND;;;;AAEe,kBAASmvE,QAAT,EAAmB;AAChC,MAAI25O,KAAK,GAAG,EAAZ;AAAA,MAAgB74N,CAAhB;AAAA,MAAmB3sE,IAAI,GAAG,KAAKw/P,KAA/B;AAAA,MAAsC5oG,KAAtC;AAAA,MAA6C0+B,EAA7C;AAAA,MAAiDC,EAAjD;AAAA,MAAqD7tG,EAArD;AAAA,MAAyDD,EAAzD;AACA,MAAIznF,IAAJ,EAAUwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAASzlS,IAAT,EAAe,KAAKqyN,GAApB,EAAyB,KAAKC,GAA9B,EAAmC,KAAKC,GAAxC,EAA6C,KAAKC,GAAlD,CAAX;;AACV,SAAO7lJ,CAAC,GAAG64N,KAAK,CAACnmS,GAAN,EAAX,EAAwB;AACtB,QAAI,CAACwsD,QAAQ,CAAC7rD,IAAI,GAAG2sE,CAAC,CAAC3sE,IAAV,EAAgBs1L,EAAE,GAAG3oH,CAAC,CAAC2oH,EAAvB,EAA2BC,EAAE,GAAG5oH,CAAC,CAAC4oH,EAAlC,EAAsC7tG,EAAE,GAAG/a,CAAC,CAAC+a,EAA7C,EAAiDD,EAAE,GAAG9a,CAAC,CAAC8a,EAAxD,CAAT,IAAwEznF,IAAI,CAACzrB,MAAjF,EAAyF;AACvF,UAAIgwM,EAAE,GAAG,CAAC+Q,EAAE,GAAG5tG,EAAN,IAAY,CAArB;AAAA,UAAwB49M,EAAE,GAAG,CAAC/vG,EAAE,GAAG9tG,EAAN,IAAY,CAAzC;AACA,UAAImvE,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB2tB,EAAhB,EAAoB+gH,EAApB,EAAwB59M,EAAxB,EAA4BD,EAA5B,CAAX;AACrB,UAAImvE,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB0+B,EAAhB,EAAoBgwG,EAApB,EAAwB/gH,EAAxB,EAA4B98F,EAA5B,CAAX;AACrB,UAAImvE,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB2tB,EAAhB,EAAoBgR,EAApB,EAAwB7tG,EAAxB,EAA4B49M,EAA5B,CAAX;AACrB,UAAI1uI,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB0+B,EAAhB,EAAoBC,EAApB,EAAwBhR,EAAxB,EAA4B+gH,EAA5B,CAAX;AACtB;AACF;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACfD;;;;AAEe,kBAASz5O,QAAT,EAAmB;AAChC,MAAI25O,KAAK,GAAG,EAAZ;AAAA,MAAgB77O,IAAI,GAAG,EAAvB;AAAA,MAA2BgjB,CAA3B;AACA,MAAI,KAAK6yL,KAAT,EAAgBgmC,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS,KAAKjmC,KAAd,EAAqB,KAAKntC,GAA1B,EAA+B,KAAKC,GAApC,EAAyC,KAAKC,GAA9C,EAAmD,KAAKC,GAAxD,CAAX;;AAChB,SAAO7lJ,CAAC,GAAG64N,KAAK,CAACnmS,GAAN,EAAX,EAAwB;AACtB,QAAIW,IAAI,GAAG2sE,CAAC,CAAC3sE,IAAb;;AACA,QAAIA,IAAI,CAACzrB,MAAT,EAAiB;AACf,UAAIqiL,KAAJ;AAAA,UAAW0+B,EAAE,GAAG3oH,CAAC,CAAC2oH,EAAlB;AAAA,UAAsBC,EAAE,GAAG5oH,CAAC,CAAC4oH,EAA7B;AAAA,UAAiC7tG,EAAE,GAAG/a,CAAC,CAAC+a,EAAxC;AAAA,UAA4CD,EAAE,GAAG9a,CAAC,CAAC8a,EAAnD;AAAA,UAAuD88F,EAAE,GAAG,CAAC+Q,EAAE,GAAG5tG,EAAN,IAAY,CAAxE;AAAA,UAA2E49M,EAAE,GAAG,CAAC/vG,EAAE,GAAG9tG,EAAN,IAAY,CAA5F;AACA,UAAImvE,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB0+B,EAAhB,EAAoBC,EAApB,EAAwBhR,EAAxB,EAA4B+gH,EAA5B,CAAX;AACrB,UAAI1uI,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB2tB,EAAhB,EAAoBgR,EAApB,EAAwB7tG,EAAxB,EAA4B49M,EAA5B,CAAX;AACrB,UAAI1uI,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB0+B,EAAhB,EAAoBgwG,EAApB,EAAwB/gH,EAAxB,EAA4B98F,EAA5B,CAAX;AACrB,UAAImvE,KAAK,GAAG52J,IAAI,CAAC,CAAD,CAAhB,EAAqBwlS,KAAK,CAACtwT,IAAN,CAAW,IAAIuwT,aAAJ,CAAS7uI,KAAT,EAAgB2tB,EAAhB,EAAoB+gH,EAApB,EAAwB59M,EAAxB,EAA4BD,EAA5B,CAAX;AACtB;;AACD99B,IAAAA,IAAI,CAACz0E,IAAL,CAAUy3F,CAAV;AACD;;AACD,SAAOA,CAAC,GAAGhjB,IAAI,CAACtqD,GAAL,EAAX,EAAuB;AACrBwsD,IAAAA,QAAQ,CAAC8gB,CAAC,CAAC3sE,IAAH,EAAS2sE,CAAC,CAAC2oH,EAAX,EAAe3oH,CAAC,CAAC4oH,EAAjB,EAAqB5oH,CAAC,CAAC+a,EAAvB,EAA2B/a,CAAC,CAAC8a,EAA7B,CAAR;AACD;;AACD,SAAO,IAAP;AACD;;;;;;;;;;ACpBM,SAASm+M,QAAT,CAAkB9jT,CAAlB,EAAqB;AAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;AAEc,kBAAS8Z,CAAT,EAAY;AACzB,SAAO5mB,SAAS,CAACT,MAAV,IAAoB,KAAKonP,EAAL,GAAU//N,CAAV,EAAa,IAAjC,IAAyC,KAAK+/N,EAArD;AACD;;;;;;;;;;ACNM,SAASkqE,QAAT,CAAkB/jT,CAAlB,EAAqB;AAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;AAEc,kBAAS8Z,CAAT,EAAY;AACzB,SAAO5mB,SAAS,CAACT,MAAV,IAAoB,KAAKqnP,EAAL,GAAUhgO,CAAV,EAAa,IAAjC,IAAyC,KAAKggO,EAArD;AACD;;;;;;;;;ACND;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAASkqE,QAAT,CAAkB/8K,KAAlB,EAAyB3tI,CAAzB,EAA4Bue,CAA5B,EAA+B;AAC5C,MAAIy/K,IAAI,GAAG,IAAI2sH,QAAJ,CAAa3qT,CAAC,IAAI,IAAL,GAAYwqT,WAAZ,GAAuBxqT,CAApC,EAAuCue,CAAC,IAAI,IAAL,GAAYksS,WAAZ,GAAuBlsS,CAA9D,EAAiE6tD,GAAjE,EAAsEA,GAAtE,EAA2EA,GAA3E,EAAgFA,GAAhF,CAAX;AACA,SAAOuhE,KAAK,IAAI,IAAT,GAAgBqwD,IAAhB,GAAuBA,IAAI,CAACghC,MAAL,CAAYrxF,KAAZ,CAA9B;AACD;;AAED,SAASg9K,QAAT,CAAkB3qT,CAAlB,EAAqBue,CAArB,EAAwB27L,EAAxB,EAA4BC,EAA5B,EAAgC7tG,EAAhC,EAAoCD,EAApC,EAAwC;AACtC,OAAKk0I,EAAL,GAAUvgP,CAAV;AACA,OAAKwgP,EAAL,GAAUjiO,CAAV;AACA,OAAK04N,GAAL,GAAW/8B,EAAX;AACA,OAAKg9B,GAAL,GAAW/8B,EAAX;AACA,OAAKg9B,GAAL,GAAW7qI,EAAX;AACA,OAAK8qI,GAAL,GAAW/qI,EAAX;AACA,OAAK+3K,KAAL,GAAar1J,SAAb;AACD;;AAED,SAAS67L,SAAT,CAAmBX,IAAnB,EAAyB;AACvB,MAAIt7O,IAAI,GAAG;AAAC9lE,IAAAA,IAAI,EAAEohT,IAAI,CAACphT;AAAZ,GAAX;AAAA,MAA8B0lE,IAAI,GAAGI,IAArC;;AACA,SAAOs7O,IAAI,GAAGA,IAAI,CAAC17O,IAAnB,EAAyBA,IAAI,GAAGA,IAAI,CAACA,IAAL,GAAY;AAAC1lE,IAAAA,IAAI,EAAEohT,IAAI,CAACphT;AAAZ,GAAnB;;AACzB,SAAO8lE,IAAP;AACD;;AAED,IAAIk8O,SAAS,GAAGH,QAAQ,CAACzwT,SAAT,GAAqB0wT,QAAQ,CAAC1wT,SAA9C;;AAEA4wT,SAAS,CAACl8O,IAAV,GAAiB,YAAW;AAC1B,MAAIA,IAAI,GAAG,IAAIg8O,QAAJ,CAAa,KAAKpqE,EAAlB,EAAsB,KAAKC,EAA3B,EAA+B,KAAKvJ,GAApC,EAAyC,KAAKC,GAA9C,EAAmD,KAAKC,GAAxD,EAA6D,KAAKC,GAAlE,CAAX;AAAA,MACIxyN,IAAI,GAAG,KAAKw/P,KADhB;AAAA,MAEIz2I,KAFJ;AAAA,MAGI6tC,KAHJ;AAKA,MAAI,CAAC52J,IAAL,EAAW,OAAO+pD,IAAP;AAEX,MAAI,CAAC/pD,IAAI,CAACzrB,MAAV,EAAkB,OAAOw1E,IAAI,CAACy1M,KAAL,GAAawmC,SAAS,CAAChmS,IAAD,CAAtB,EAA8B+pD,IAArC;AAElBg/D,EAAAA,KAAK,GAAG,CAAC;AAACh+E,IAAAA,MAAM,EAAE/qC,IAAT;AAAewrB,IAAAA,MAAM,EAAEu+B,IAAI,CAACy1M,KAAL,GAAa,IAAIzqR,KAAJ,CAAU,CAAV;AAApC,GAAD,CAAR;;AACA,SAAOirB,IAAI,GAAG+oH,KAAK,CAAC1pH,GAAN,EAAd,EAA2B;AACzB,SAAK,IAAIpqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;AAC1B,UAAI2hL,KAAK,GAAG52J,IAAI,CAAC+qC,MAAL,CAAY91D,CAAZ,CAAZ,EAA4B;AAC1B,YAAI2hL,KAAK,CAACriL,MAAV,EAAkBw0I,KAAK,CAAC7zI,IAAN,CAAW;AAAC61D,UAAAA,MAAM,EAAE6rH,KAAT;AAAgBprI,UAAAA,MAAM,EAAExrB,IAAI,CAACwrB,MAAL,CAAYv2C,CAAZ,IAAiB,IAAIF,KAAJ,CAAU,CAAV;AAAzC,SAAX,EAAlB,KACKirB,IAAI,CAACwrB,MAAL,CAAYv2C,CAAZ,IAAiB+wT,SAAS,CAACpvI,KAAD,CAA1B;AACN;AACF;AACF;;AAED,SAAO7sG,IAAP;AACD,CArBD;;AAuBAk8O,SAAS,CAACrwS,GAAV,GAAgBswS,YAAhB;AACAD,SAAS,CAAC7rF,MAAV,GAAmB+rF,WAAnB;AACAF,SAAS,CAACb,KAAV,GAAkBgB,cAAlB;AACAH,SAAS,CAAChiT,IAAV,GAAiBoiT,aAAjB;AACAJ,SAAS,CAAC33G,MAAV,GAAmBg4G,eAAnB;AACAL,SAAS,CAACp+I,IAAV,GAAiB0+I,aAAjB;AACAN,SAAS,CAAC79O,MAAV,GAAmBo+O,eAAnB;AACAP,SAAS,CAACN,SAAV,GAAsBc,iBAAtB;AACAR,SAAS,CAACrtH,IAAV,GAAiB8tH,aAAjB;AACAT,SAAS,CAACvpT,IAAV,GAAiBiqT,aAAjB;AACAV,SAAS,CAAChsF,KAAV,GAAkB2sF,cAAlB;AACAX,SAAS,CAACY,UAAV,GAAuBC,mBAAvB;AACAb,SAAS,CAAC7qT,CAAV,GAAc2rT,UAAd;AACAd,SAAS,CAACtsS,CAAV,GAAcqtS,UAAd;;;;;;;;;;;;;;ACxEA;;;;;;;;;;;AEAe,kBAAS/rT,MAAT,EAAiB;AAC9B,SAAO,CAACA,MAAM,KAAK,GAAZ,IAAmB,IAA1B;AACD;;;;;;;;;ACFD;;AACA;;AACA;;;;AAEA,SAASG,CAAT,CAAW0G,CAAX,EAAc;AACZ,SAAOA,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAACmlT,EAAf;AACD;;AAED,SAASttS,CAAT,CAAW7X,CAAX,EAAc;AACZ,SAAOA,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAAColT,EAAf;AACD;;AAEc,kBAAS91S,MAAT,EAAiB;AAC9B,MAAI23H,KAAJ;AAAA,MACIo+K,KADJ;AAAA,MAEIlsT,MAFJ;AAAA,MAGIkqT,QAAQ,GAAG,CAHf;AAAA,MAIIrhM,UAAU,GAAG,CAJjB;AAMA,MAAI,OAAO1yG,MAAP,KAAkB,UAAtB,EAAkCA,MAAM,GAAG,uBAASA,MAAM,IAAI,IAAV,GAAiB,CAAjB,GAAqB,CAACA,MAA/B,CAAT;;AAElC,WAAS2kN,KAAT,GAAiB;AACf,QAAI9gO,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AAAA,QACI6kM,IADJ;AAAA,QAEIp5K,IAFJ;AAAA,QAGI6mR,EAHJ;AAAA,QAII8R,EAJJ;AAAA,QAKIyO,EALJ;AAAA,QAMIC,GANJ;;AAQA,SAAK,IAAI90S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxG,UAApB,EAAgC,EAAEvxG,CAAlC,EAAqC;AACnC6mL,MAAAA,IAAI,GAAG,0BAASrwD,KAAT,EAAgB3tI,CAAhB,EAAmBue,CAAnB,EAAsBktS,UAAtB,CAAiCS,OAAjC,CAAP;;AACA,WAAKryT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+qB,QAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ;AACAmyT,QAAAA,EAAE,GAAGD,KAAK,CAACnnS,IAAI,CAACjlB,KAAN,CAAV,EAAwBssT,GAAG,GAAGD,EAAE,GAAGA,EAAnC;AACAvgB,QAAAA,EAAE,GAAG7mR,IAAI,CAAC5kB,CAAL,GAAS4kB,IAAI,CAACinS,EAAnB;AACAtO,QAAAA,EAAE,GAAG34R,IAAI,CAACrG,CAAL,GAASqG,IAAI,CAACknS,EAAnB;AACA9tH,QAAAA,IAAI,CAAC6gC,KAAL,CAAW3kO,KAAX;AACD;AACF;;AAED,aAASA,KAAT,CAAe4sO,IAAf,EAAqB5sB,EAArB,EAAyBC,EAAzB,EAA6B7tG,EAA7B,EAAiCD,EAAjC,EAAqC;AACnC,UAAIxjG,IAAI,GAAGi+N,IAAI,CAACj+N,IAAhB;AAAA,UAAsBsjT,EAAE,GAAGrlF,IAAI,CAACj/N,CAAhC;AAAA,UAAmCA,CAAC,GAAGmkT,EAAE,GAAGG,EAA5C;;AACA,UAAItjT,IAAJ,EAAU;AACR,YAAIA,IAAI,CAAClJ,KAAL,GAAailB,IAAI,CAACjlB,KAAtB,EAA6B;AAC3B,cAAIK,CAAC,GAAGyrS,EAAE,GAAG5iS,IAAI,CAAC7I,CAAV,GAAc6I,IAAI,CAACgjT,EAA3B;AAAA,cACIttS,CAAC,GAAGg/R,EAAE,GAAG10S,IAAI,CAAC0V,CAAV,GAAc1V,IAAI,CAACijT,EAD3B;AAAA,cAEIngT,CAAC,GAAG3L,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAFpB;;AAGA,cAAI5S,CAAC,GAAG9D,CAAC,GAAGA,CAAZ,EAAe;AACb,gBAAI7H,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAOH,MAAP,CAAJ,EAAoB8L,CAAC,IAAI3L,CAAC,GAAGA,CAA7B;AACb,gBAAIue,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAO1e,MAAP,CAAJ,EAAoB8L,CAAC,IAAI4S,CAAC,GAAGA,CAA7B;AACb5S,YAAAA,CAAC,GAAG,CAAC9D,CAAC,IAAI8D,CAAC,GAAG/L,IAAI,CAACqC,IAAL,CAAU0J,CAAV,CAAR,CAAF,IAA2BA,CAA3B,GAA+Bo+S,QAAnC;AACAnlS,YAAAA,IAAI,CAACinS,EAAL,IAAW,CAAC7rT,CAAC,IAAI2L,CAAN,KAAY9D,CAAC,GAAG,CAACskT,EAAE,IAAIA,EAAP,KAAcF,GAAG,GAAGE,EAApB,CAAhB,CAAX;AACAvnS,YAAAA,IAAI,CAACknS,EAAL,IAAW,CAACvtS,CAAC,IAAI5S,CAAN,IAAW9D,CAAtB;AACAgB,YAAAA,IAAI,CAACgjT,EAAL,IAAW7rT,CAAC,IAAI6H,CAAC,GAAG,IAAIA,CAAZ,CAAZ;AACAgB,YAAAA,IAAI,CAACijT,EAAL,IAAWvtS,CAAC,GAAG1W,CAAf;AACD;AACF;;AACD;AACD;;AACD,aAAOqyM,EAAE,GAAGuxF,EAAE,GAAG5jS,CAAV,IAAeykG,EAAE,GAAGm/L,EAAE,GAAG5jS,CAAzB,IAA8BsyM,EAAE,GAAGojG,EAAE,GAAG11S,CAAxC,IAA6CwkG,EAAE,GAAGkxM,EAAE,GAAG11S,CAA9D;AACD;AACF;;AAED,WAASqkT,OAAT,CAAiBplF,IAAjB,EAAuB;AACrB,QAAIA,IAAI,CAACj+N,IAAT,EAAe,OAAOi+N,IAAI,CAACj/N,CAAL,GAASkkT,KAAK,CAACjlF,IAAI,CAACj+N,IAAL,CAAUlJ,KAAX,CAArB;;AACf,SAAK,IAAI9F,CAAC,GAAGitO,IAAI,CAACj/N,CAAL,GAAS,CAAtB,EAAyBhO,CAAC,GAAG,CAA7B,EAAgC,EAAEA,CAAlC,EAAqC;AACnC,UAAIitO,IAAI,CAACjtO,CAAD,CAAJ,IAAWitO,IAAI,CAACjtO,CAAD,CAAJ,CAAQgO,CAAR,GAAYi/N,IAAI,CAACj/N,CAAhC,EAAmC;AACjCi/N,QAAAA,IAAI,CAACj/N,CAAL,GAASi/N,IAAI,CAACjtO,CAAD,CAAJ,CAAQgO,CAAjB;AACD;AACF;AACF;;AAED,WAASyxQ,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AACZ,QAAI9zI,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AAAA,QAAyByrB,IAAzB;AACAmnS,IAAAA,KAAK,GAAG,IAAIpyT,KAAJ,CAAUoO,CAAV,CAAR;;AACA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB+qB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiBkyT,KAAK,CAACnnS,IAAI,CAACjlB,KAAN,CAAL,GAAoB,CAACqW,MAAM,CAAC4O,IAAD,EAAO/qB,CAAP,EAAU8zI,KAAV,CAA5C;AACzB;;AAEDgtF,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS8yC,MAAT,EAAiBC,OAAjB,EAA0B;AAC3C1+K,IAAAA,KAAK,GAAGy+K,MAAR;AACAvsT,IAAAA,MAAM,GAAGwsT,OAAT;AACA/yC,IAAAA,UAAU;AACX,GAJD;;AAMA3+C,EAAAA,KAAK,CAACjyG,UAAN,GAAmB,UAASloG,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBuvH,UAAU,GAAG,CAACloG,CAAd,EAAiBm6M,KAArC,IAA8CjyG,UAArD;AACD,GAFD;;AAIAiyG,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,CAACvpS,CAAZ,EAAem6M,KAAnC,IAA4CovF,QAAnD;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAAC3kN,MAAN,GAAe,UAASwK,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6c,MAAM,GAAG,OAAOwK,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAvC,EAAqD84P,UAAU,EAA/D,EAAmE3+C,KAAvF,IAAgG3kN,MAAvG;AACD,GAFD;;AAIA,SAAO2kN,KAAP;AACD;;;;;;;;;ACnGD;;AACA;;;;AAEA,SAASh7N,KAAT,CAAe+G,CAAf,EAAkB;AAChB,SAAOA,CAAC,CAAC/G,KAAT;AACD;;AAED,SAAS8sK,IAAT,CAAc6/I,QAAd,EAAwBC,MAAxB,EAAgC;AAC9B,MAAI3nS,IAAI,GAAG0nS,QAAQ,CAAC3vT,GAAT,CAAa4vT,MAAb,CAAX;AACA,MAAI,CAAC3nS,IAAL,EAAW,MAAM,IAAIxsB,KAAJ,CAAU,qBAAqBm0T,MAA/B,CAAN;AACX,SAAO3nS,IAAP;AACD;;AAEc,kBAAS4nS,KAAT,EAAgB;AAC7B,MAAI1/S,EAAE,GAAGnN,KAAT;AAAA,MACIoqT,QAAQ,GAAG0C,eADf;AAAA,MAEIC,SAFJ;AAAA,MAGIzqB,QAAQ,GAAG,uBAAS,EAAT,CAHf;AAAA,MAII0qB,SAJJ;AAAA,MAKIh/K,KALJ;AAAA,MAMI/7D,KANJ;AAAA,MAOI37D,IAPJ;AAAA,MAQIpW,MARJ;AAAA,MASI6oH,UAAU,GAAG,CATjB;AAWA,MAAI8jM,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;;AAEnB,WAASC,eAAT,CAAyBluE,IAAzB,EAA+B;AAC7B,WAAO,IAAI3+O,IAAI,CAACG,GAAL,CAAS6xE,KAAK,CAAC2sK,IAAI,CAAC5uL,MAAL,CAAYhwD,KAAb,CAAd,EAAmCiyE,KAAK,CAAC2sK,IAAI,CAACnuM,MAAL,CAAYzwC,KAAb,CAAxC,CAAX;AACD;;AAED,WAASg7N,KAAT,CAAexnN,KAAf,EAAsB;AACpB,SAAK,IAAIgE,CAAC,GAAG,CAAR,EAAWpP,CAAC,GAAGykT,KAAK,CAACrzT,MAA1B,EAAkCge,CAAC,GAAGuxG,UAAtC,EAAkD,EAAEvxG,CAApD,EAAuD;AACrD,WAAK,IAAItd,CAAC,GAAG,CAAR,EAAW0kP,IAAX,EAAiB5uL,MAAjB,EAAyBvf,MAAzB,EAAiCpwC,CAAjC,EAAoCue,CAApC,EAAuC5S,CAAvC,EAA0C/D,CAA/C,EAAkD/N,CAAC,GAAGkO,CAAtD,EAAyD,EAAElO,CAA3D,EAA8D;AAC5D0kP,QAAAA,IAAI,GAAGiuE,KAAK,CAAC3yT,CAAD,CAAZ,EAAiB81D,MAAM,GAAG4uL,IAAI,CAAC5uL,MAA/B,EAAuCvf,MAAM,GAAGmuM,IAAI,CAACnuM,MAArD;AACApwC,QAAAA,CAAC,GAAGowC,MAAM,CAACpwC,CAAP,GAAWowC,MAAM,CAACy7Q,EAAlB,GAAuBl8P,MAAM,CAAC3vD,CAA9B,GAAkC2vD,MAAM,CAACk8P,EAAzC,IAA+C,qBAAOhsT,MAAP,CAAnD;AACA0e,QAAAA,CAAC,GAAG6xB,MAAM,CAAC7xB,CAAP,GAAW6xB,MAAM,CAAC07Q,EAAlB,GAAuBn8P,MAAM,CAACpxC,CAA9B,GAAkCoxC,MAAM,CAACm8P,EAAzC,IAA+C,qBAAOjsT,MAAP,CAAnD;AACA8L,QAAAA,CAAC,GAAG/L,IAAI,CAACqC,IAAL,CAAUjC,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAtB,CAAJ;AACA5S,QAAAA,CAAC,GAAG,CAACA,CAAC,GAAGghT,SAAS,CAAC9yT,CAAD,CAAd,IAAqB8R,CAArB,GAAyBwH,KAAzB,GAAiCu5S,SAAS,CAAC7yT,CAAD,CAA9C;AACAmG,QAAAA,CAAC,IAAI2L,CAAL,EAAQ4S,CAAC,IAAI5S,CAAb;AACAykC,QAAAA,MAAM,CAACy7Q,EAAP,IAAa7rT,CAAC,IAAI4H,CAAC,GAAGqO,IAAI,CAACpc,CAAD,CAAZ,CAAd;AACAu2C,QAAAA,MAAM,CAAC07Q,EAAP,IAAavtS,CAAC,GAAG3W,CAAjB;AACA+nD,QAAAA,MAAM,CAACk8P,EAAP,IAAa7rT,CAAC,IAAI4H,CAAC,GAAG,IAAIA,CAAZ,CAAd;AACA+nD,QAAAA,MAAM,CAACm8P,EAAP,IAAavtS,CAAC,GAAG3W,CAAjB;AACD;AACF;AACF;;AAED,WAAS0xQ,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AAEZ,QAAI9zI,CAAJ;AAAA,QACIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MADd;AAAA,QAEIm4F,CAAC,GAAGk7N,KAAK,CAACrzT,MAFd;AAAA,QAGImzT,QAAQ,GAAG,IAAIjuT,GAAJ,CAAQsvI,KAAK,CAACrqI,GAAN,CAAU,CAACoD,CAAD,EAAI7M,CAAJ,KAAU,CAACiT,EAAE,CAACpG,CAAD,EAAI7M,CAAJ,EAAO8zI,KAAP,CAAH,EAAkBjnI,CAAlB,CAApB,CAAR,CAHf;AAAA,QAII63O,IAJJ;;AAMA,SAAK1kP,CAAC,GAAG,CAAJ,EAAO+3E,KAAK,GAAG,IAAIj4E,KAAJ,CAAUoO,CAAV,CAApB,EAAkClO,CAAC,GAAGy3F,CAAtC,EAAyC,EAAEz3F,CAA3C,EAA8C;AAC5C0kP,MAAAA,IAAI,GAAGiuE,KAAK,CAAC3yT,CAAD,CAAZ,EAAiB0kP,IAAI,CAAC5+O,KAAL,GAAa9F,CAA9B;AACA,UAAI,OAAO0kP,IAAI,CAAC5uL,MAAZ,KAAuB,QAA3B,EAAqC4uL,IAAI,CAAC5uL,MAAL,GAAc88G,IAAI,CAAC6/I,QAAD,EAAW/tE,IAAI,CAAC5uL,MAAhB,CAAlB;AACrC,UAAI,OAAO4uL,IAAI,CAACnuM,MAAZ,KAAuB,QAA3B,EAAqCmuM,IAAI,CAACnuM,MAAL,GAAcq8H,IAAI,CAAC6/I,QAAD,EAAW/tE,IAAI,CAACnuM,MAAhB,CAAlB;AACrCwhC,MAAAA,KAAK,CAAC2sK,IAAI,CAAC5uL,MAAL,CAAYhwD,KAAb,CAAL,GAA2B,CAACiyE,KAAK,CAAC2sK,IAAI,CAAC5uL,MAAL,CAAYhwD,KAAb,CAAL,IAA4B,CAA7B,IAAkC,CAA7D;AACAiyE,MAAAA,KAAK,CAAC2sK,IAAI,CAACnuM,MAAL,CAAYzwC,KAAb,CAAL,GAA2B,CAACiyE,KAAK,CAAC2sK,IAAI,CAACnuM,MAAL,CAAYzwC,KAAb,CAAL,IAA4B,CAA7B,IAAkC,CAA7D;AACD;;AAED,SAAK9F,CAAC,GAAG,CAAJ,EAAOoc,IAAI,GAAG,IAAItc,KAAJ,CAAU23F,CAAV,CAAnB,EAAiCz3F,CAAC,GAAGy3F,CAArC,EAAwC,EAAEz3F,CAA1C,EAA6C;AAC3C0kP,MAAAA,IAAI,GAAGiuE,KAAK,CAAC3yT,CAAD,CAAZ,EAAiBoc,IAAI,CAACpc,CAAD,CAAJ,GAAU+3E,KAAK,CAAC2sK,IAAI,CAAC5uL,MAAL,CAAYhwD,KAAb,CAAL,IAA4BiyE,KAAK,CAAC2sK,IAAI,CAAC5uL,MAAL,CAAYhwD,KAAb,CAAL,GAA2BiyE,KAAK,CAAC2sK,IAAI,CAACnuM,MAAL,CAAYzwC,KAAb,CAA5D,CAA3B;AACD;;AAED+sT,IAAAA,SAAS,GAAG,IAAI/yT,KAAJ,CAAU23F,CAAV,CAAZ,EAA0Bs7N,kBAAkB,EAA5C;AACAD,IAAAA,SAAS,GAAG,IAAIhzT,KAAJ,CAAU23F,CAAV,CAAZ,EAA0Bu7N,kBAAkB,EAA5C;AACD;;AAED,WAASD,kBAAT,GAA8B;AAC5B,QAAI,CAACj/K,KAAL,EAAY;;AAEZ,SAAK,IAAI9zI,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGykT,KAAK,CAACrzT,MAA1B,EAAkCU,CAAC,GAAGkO,CAAtC,EAAyC,EAAElO,CAA3C,EAA8C;AAC5C6yT,MAAAA,SAAS,CAAC7yT,CAAD,CAAT,GAAe,CAACkwT,QAAQ,CAACyC,KAAK,CAAC3yT,CAAD,CAAN,EAAWA,CAAX,EAAc2yT,KAAd,CAAxB;AACD;AACF;;AAED,WAASK,kBAAT,GAA8B;AAC5B,QAAI,CAACl/K,KAAL,EAAY;;AAEZ,SAAK,IAAI9zI,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGykT,KAAK,CAACrzT,MAA1B,EAAkCU,CAAC,GAAGkO,CAAtC,EAAyC,EAAElO,CAA3C,EAA8C;AAC5C8yT,MAAAA,SAAS,CAAC9yT,CAAD,CAAT,GAAe,CAACooS,QAAQ,CAACuqB,KAAK,CAAC3yT,CAAD,CAAN,EAAWA,CAAX,EAAc2yT,KAAd,CAAxB;AACD;AACF;;AAED7xF,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS8yC,MAAT,EAAiBC,OAAjB,EAA0B;AAC3C1+K,IAAAA,KAAK,GAAGy+K,MAAR;AACAvsT,IAAAA,MAAM,GAAGwsT,OAAT;AACA/yC,IAAAA,UAAU;AACX,GAJD;;AAMA3+C,EAAAA,KAAK,CAAC6xF,KAAN,GAAc,UAAShsS,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqzT,KAAK,GAAGhsS,CAAR,EAAW84P,UAAU,EAArB,EAAyB3+C,KAA7C,IAAsD6xF,KAA7D;AACD,GAFD;;AAIA7xF,EAAAA,KAAK,CAAC7tN,EAAN,GAAW,UAAS0T,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2T,EAAE,GAAG0T,CAAL,EAAQm6M,KAA5B,IAAqC7tN,EAA5C;AACD,GAFD;;AAIA6tN,EAAAA,KAAK,CAACjyG,UAAN,GAAmB,UAASloG,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBuvH,UAAU,GAAG,CAACloG,CAAd,EAAiBm6M,KAArC,IAA8CjyG,UAArD;AACD,GAFD;;AAIAiyG,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,OAAOvpS,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDosS,kBAAkB,EAAzE,EAA6EjyF,KAAjG,IAA0GovF,QAAjH;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAACsnE,QAAN,GAAiB,UAASzhR,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8oS,QAAQ,GAAG,OAAOzhR,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDqsS,kBAAkB,EAAzE,EAA6ElyF,KAAjG,IAA0GsnE,QAAjH;AACD,GAFD;;AAIA,SAAOtnE,KAAP;AACD;;;;;;;;ACpHD,IAAIlgO,IAAI,GAAG;AAACoC,EAAAA,KAAK,EAAE,MAAM,CAAE;AAAhB,CAAX;;AAEA,SAASiwT,QAAT,GAAoB;AAClB,OAAK,IAAIjzT,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGnO,SAAS,CAACT,MAAzB,EAAiCqnB,CAAC,GAAG,EAArC,EAAyCjjB,CAA9C,EAAiD1D,CAAC,GAAGkO,CAArD,EAAwD,EAAElO,CAA1D,EAA6D;AAC3D,QAAI,EAAE0D,CAAC,GAAG3D,SAAS,CAACC,CAAD,CAAT,GAAe,EAArB,KAA6B0D,CAAC,IAAIijB,CAAlC,IAAwC,QAAQgH,IAAR,CAAajqB,CAAb,CAA5C,EAA6D,MAAM,IAAInF,KAAJ,CAAU,mBAAmBmF,CAA7B,CAAN;AAC7DijB,IAAAA,CAAC,CAACjjB,CAAD,CAAD,GAAO,EAAP;AACD;;AACD,SAAO,IAAIwvT,QAAJ,CAAavsS,CAAb,CAAP;AACD;;AAED,SAASusS,QAAT,CAAkBvsS,CAAlB,EAAqB;AACnB,OAAKA,CAAL,GAASA,CAAT;AACD;;AAED,SAASwsS,cAAT,CAAwBC,SAAxB,EAAmC92G,KAAnC,EAA0C;AACxC,SAAO82G,SAAS,CAACn4M,IAAV,GAAiBp3G,KAAjB,CAAuB,OAAvB,EAAgC4F,GAAhC,CAAoC,UAAS/F,CAAT,EAAY;AACrD,QAAInC,IAAI,GAAG,EAAX;AAAA,QAAevB,CAAC,GAAG0D,CAAC,CAAC05B,OAAF,CAAU,GAAV,CAAnB;AACA,QAAIp9B,CAAC,IAAI,CAAT,EAAYuB,IAAI,GAAGmC,CAAC,CAAC2F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAAP,EAAuB0D,CAAC,GAAGA,CAAC,CAAC2F,KAAF,CAAQ,CAAR,EAAWrJ,CAAX,CAA3B;AACZ,QAAI0D,CAAC,IAAI,CAAC44M,KAAK,CAAC3lF,cAAN,CAAqBjzH,CAArB,CAAV,EAAmC,MAAM,IAAInF,KAAJ,CAAU,mBAAmBmF,CAA7B,CAAN;AACnC,WAAO;AAACuc,MAAAA,IAAI,EAAEvc,CAAP;AAAUnC,MAAAA,IAAI,EAAEA;AAAhB,KAAP;AACD,GALM,CAAP;AAMD;;AAED2xT,QAAQ,CAAC9yT,SAAT,GAAqB6yT,QAAQ,CAAC7yT,SAAT,GAAqB;AACxCwL,EAAAA,WAAW,EAAEsnT,QAD2B;AAExCryT,EAAAA,EAAE,EAAE,UAASwyT,QAAT,EAAmBz8O,QAAnB,EAA6B;AAC/B,QAAIjwD,CAAC,GAAG,KAAKA,CAAb;AAAA,QACI2sS,CAAC,GAAGH,cAAc,CAACE,QAAQ,GAAG,EAAZ,EAAgB1sS,CAAhB,CADtB;AAAA,QAEIjjB,CAFJ;AAAA,QAGI1D,CAAC,GAAG,CAAC,CAHT;AAAA,QAIIkO,CAAC,GAAGolT,CAAC,CAACh0T,MAJV,CAD+B,CAO/B;;AACA,QAAIS,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB,aAAO,EAAEU,CAAF,GAAMkO,CAAb,EAAgB,IAAI,CAACxK,CAAC,GAAG,CAAC2vT,QAAQ,GAAGC,CAAC,CAACtzT,CAAD,CAAb,EAAkBigB,IAAvB,MAAiCvc,CAAC,GAAGZ,GAAG,CAAC6jB,CAAC,CAACjjB,CAAD,CAAF,EAAO2vT,QAAQ,CAAC9xT,IAAhB,CAAxC,CAAJ,EAAoE,OAAOmC,CAAP;;AACpF;AACD,KAX8B,CAa/B;AACA;;;AACA,QAAIkzE,QAAQ,IAAI,IAAZ,IAAoB,OAAOA,QAAP,KAAoB,UAA5C,EAAwD,MAAM,IAAIr4E,KAAJ,CAAU,uBAAuBq4E,QAAjC,CAAN;;AACxD,WAAO,EAAE52E,CAAF,GAAMkO,CAAb,EAAgB;AACd,UAAIxK,CAAC,GAAG,CAAC2vT,QAAQ,GAAGC,CAAC,CAACtzT,CAAD,CAAb,EAAkBigB,IAA1B,EAAgC0G,CAAC,CAACjjB,CAAD,CAAD,GAAOf,GAAG,CAACgkB,CAAC,CAACjjB,CAAD,CAAF,EAAO2vT,QAAQ,CAAC9xT,IAAhB,EAAsBq1E,QAAtB,CAAV,CAAhC,KACK,IAAIA,QAAQ,IAAI,IAAhB,EAAsB,KAAKlzE,CAAL,IAAUijB,CAAV,EAAaA,CAAC,CAACjjB,CAAD,CAAD,GAAOf,GAAG,CAACgkB,CAAC,CAACjjB,CAAD,CAAF,EAAO2vT,QAAQ,CAAC9xT,IAAhB,EAAsB,IAAtB,CAAV;AACzC;;AAED,WAAO,IAAP;AACD,GAxBuC;AAyBxCuzE,EAAAA,IAAI,EAAE,YAAW;AACf,QAAIA,IAAI,GAAG,EAAX;AAAA,QAAenuD,CAAC,GAAG,KAAKA,CAAxB;;AACA,SAAK,IAAIjjB,CAAT,IAAcijB,CAAd,EAAiBmuD,IAAI,CAACpxE,CAAD,CAAJ,GAAUijB,CAAC,CAACjjB,CAAD,CAAD,CAAK2F,KAAL,EAAV;;AACjB,WAAO,IAAI6pT,QAAJ,CAAap+O,IAAb,CAAP;AACD,GA7BuC;AA8BxCh2E,EAAAA,IAAI,EAAE,UAASmhB,IAAT,EAAeu5K,IAAf,EAAqB;AACzB,QAAI,CAACtrL,CAAC,GAAGnO,SAAS,CAACT,MAAV,GAAmB,CAAxB,IAA6B,CAAjC,EAAoC,KAAK,IAAIO,IAAI,GAAG,IAAIC,KAAJ,CAAUoO,CAAV,CAAX,EAAyBlO,CAAC,GAAG,CAA7B,EAAgCkO,CAAhC,EAAmCxK,CAAxC,EAA2C1D,CAAC,GAAGkO,CAA/C,EAAkD,EAAElO,CAApD,EAAuDH,IAAI,CAACG,CAAD,CAAJ,GAAUD,SAAS,CAACC,CAAC,GAAG,CAAL,CAAnB;AAC3F,QAAI,CAAC,KAAK2mB,CAAL,CAAOgwG,cAAP,CAAsB12G,IAAtB,CAAL,EAAkC,MAAM,IAAI1hB,KAAJ,CAAU,mBAAmB0hB,IAA7B,CAAN;;AAClC,SAAKvc,CAAC,GAAG,KAAKijB,CAAL,CAAO1G,IAAP,CAAJ,EAAkBjgB,CAAC,GAAG,CAAtB,EAAyBkO,CAAC,GAAGxK,CAAC,CAACpE,MAApC,EAA4CU,CAAC,GAAGkO,CAAhD,EAAmD,EAAElO,CAArD,EAAwD0D,CAAC,CAAC1D,CAAD,CAAD,CAAKgD,KAAL,CAAW3C,KAAX,CAAiBm5L,IAAjB,EAAuB35L,IAAvB;AACzD,GAlCuC;AAmCxCQ,EAAAA,KAAK,EAAE,UAAS4f,IAAT,EAAeu5K,IAAf,EAAqB35L,IAArB,EAA2B;AAChC,QAAI,CAAC,KAAK8mB,CAAL,CAAOgwG,cAAP,CAAsB12G,IAAtB,CAAL,EAAkC,MAAM,IAAI1hB,KAAJ,CAAU,mBAAmB0hB,IAA7B,CAAN;;AAClC,SAAK,IAAIvc,CAAC,GAAG,KAAKijB,CAAL,CAAO1G,IAAP,CAAR,EAAsBjgB,CAAC,GAAG,CAA1B,EAA6BkO,CAAC,GAAGxK,CAAC,CAACpE,MAAxC,EAAgDU,CAAC,GAAGkO,CAApD,EAAuD,EAAElO,CAAzD,EAA4D0D,CAAC,CAAC1D,CAAD,CAAD,CAAKgD,KAAL,CAAW3C,KAAX,CAAiBm5L,IAAjB,EAAuB35L,IAAvB;AAC7D;AAtCuC,CAA1C;;AAyCA,SAASiD,GAAT,CAAamd,IAAb,EAAmB1e,IAAnB,EAAyB;AACvB,OAAK,IAAIvB,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG+R,IAAI,CAAC3gB,MAApB,EAA4BmN,CAAjC,EAAoCzM,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C,QAAI,CAACyM,CAAC,GAAGwT,IAAI,CAACjgB,CAAD,CAAT,EAAcuB,IAAd,KAAuBA,IAA3B,EAAiC;AAC/B,aAAOkL,CAAC,CAACzJ,KAAT;AACD;AACF;AACF;;AAED,SAASL,GAAT,CAAasd,IAAb,EAAmB1e,IAAnB,EAAyBq1E,QAAzB,EAAmC;AACjC,OAAK,IAAI52E,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG+R,IAAI,CAAC3gB,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C,QAAIigB,IAAI,CAACjgB,CAAD,CAAJ,CAAQuB,IAAR,KAAiBA,IAArB,EAA2B;AACzB0e,MAAAA,IAAI,CAACjgB,CAAD,CAAJ,GAAUY,IAAV,EAAgBqf,IAAI,GAAGA,IAAI,CAAC5W,KAAL,CAAW,CAAX,EAAcrJ,CAAd,EAAiBT,MAAjB,CAAwB0gB,IAAI,CAAC5W,KAAL,CAAWrJ,CAAC,GAAG,CAAf,CAAxB,CAAvB;AACA;AACD;AACF;;AACD,MAAI42E,QAAQ,IAAI,IAAhB,EAAsB32D,IAAI,CAAChgB,IAAL,CAAU;AAACsB,IAAAA,IAAI,EAAEA,IAAP;AAAayB,IAAAA,KAAK,EAAE4zE;AAApB,GAAV;AACtB,SAAO32D,IAAP;AACD;;eAEcgzS;;;;;;;;;;;;;;;ACnFf;;;;;;;;;;;;;ACAA,IAAIngO,KAAK,GAAG,CAAZ;AAAA,IAAe;AACXrzF,OAAO,GAAG,CADd;AAAA,IACiB;AACb4rN,QAAQ,GAAG,CAFf;AAAA,IAEkB;AACdkoG,SAAS,GAAG,IAHhB;AAAA,IAGsB;AAClBC,QAJJ;AAAA,IAKIC,QALJ;AAAA,IAMIC,SAAS,GAAG,CANhB;AAAA,IAOIC,QAAQ,GAAG,CAPf;AAAA,IAQIC,SAAS,GAAG,CARhB;AAAA,IASIC,KAAK,GAAG,OAAOp7M,WAAP,KAAuB,QAAvB,IAAmCA,WAAW,CAACxrG,GAA/C,GAAqDwrG,WAArD,GAAmE3iC,IAT/E;AAAA,IAUIg+O,QAAQ,GAAG,OAAOlnS,MAAP,KAAkB,QAAlB,IAA8BA,MAAM,CAAC4mG,qBAArC,GAA6D5mG,MAAM,CAAC4mG,qBAAP,CAA6B6W,IAA7B,CAAkCz9G,MAAlC,CAA7D,GAAyG,UAASjhB,CAAT,EAAY;AAAElN,EAAAA,UAAU,CAACkN,CAAD,EAAI,EAAJ,CAAV;AAAoB,CAV1J;;AAYO,SAASsB,GAAT,GAAe;AACpB,SAAO0mT,QAAQ,KAAKG,QAAQ,CAACC,QAAD,CAAR,EAAoBJ,QAAQ,GAAGE,KAAK,CAAC5mT,GAAN,KAAc2mT,SAAlD,CAAf;AACD;;AAED,SAASG,QAAT,GAAoB;AAClBJ,EAAAA,QAAQ,GAAG,CAAX;AACD;;AAEM,SAASK,KAAT,GAAiB;AACtB,OAAKjxC,KAAL,GACA,KAAKkxC,KAAL,GACA,KAAKC,KAAL,GAAa,IAFb;AAGD;;AAEDF,KAAK,CAAC5zT,SAAN,GAAkB0O,KAAK,CAAC1O,SAAN,GAAkB;AAClCwL,EAAAA,WAAW,EAAEooT,KADqB;AAElCG,EAAAA,OAAO,EAAE,UAASv9O,QAAT,EAAmBugI,KAAnB,EAA0BpoM,IAA1B,EAAgC;AACvC,QAAI,OAAO6nE,QAAP,KAAoB,UAAxB,EAAoC,MAAM,IAAIswD,SAAJ,CAAc,4BAAd,CAAN;AACpCn4H,IAAAA,IAAI,GAAG,CAACA,IAAI,IAAI,IAAR,GAAe9B,GAAG,EAAlB,GAAuB,CAAC8B,IAAzB,KAAkCooM,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoB,CAACA,KAAvD,CAAP;;AACA,QAAI,CAAC,KAAK+8G,KAAN,IAAeT,QAAQ,KAAK,IAAhC,EAAsC;AACpC,UAAIA,QAAJ,EAAcA,QAAQ,CAACS,KAAT,GAAiB,IAAjB,CAAd,KACKV,QAAQ,GAAG,IAAX;AACLC,MAAAA,QAAQ,GAAG,IAAX;AACD;;AACD,SAAK1wC,KAAL,GAAansM,QAAb;AACA,SAAKq9O,KAAL,GAAallT,IAAb;AACAqlT,IAAAA,KAAK;AACN,GAbiC;AAclC7yR,EAAAA,IAAI,EAAE,YAAW;AACf,QAAI,KAAKwhP,KAAT,EAAgB;AACd,WAAKA,KAAL,GAAa,IAAb;AACA,WAAKkxC,KAAL,GAAansT,QAAb;AACAssT,MAAAA,KAAK;AACN;AACF;AApBiC,CAApC;;AAuBO,SAAStlT,KAAT,CAAe8nE,QAAf,EAAyBugI,KAAzB,EAAgCpoM,IAAhC,EAAsC;AAC3C,MAAIrL,CAAC,GAAG,IAAIswT,KAAJ,EAAR;AACAtwT,EAAAA,CAAC,CAACywT,OAAF,CAAUv9O,QAAV,EAAoBugI,KAApB,EAA2BpoM,IAA3B;AACA,SAAOrL,CAAP;AACD;;AAEM,SAAS2wT,UAAT,GAAsB;AAC3BpnT,EAAAA,GAAG,GADwB,CACpB;;AACP,IAAE6lF,KAAF,CAF2B,CAElB;;AACT,MAAIpvF,CAAC,GAAG8vT,QAAR;AAAA,MAAkB90T,CAAlB;;AACA,SAAOgF,CAAP,EAAU;AACR,QAAI,CAAChF,CAAC,GAAGi1T,QAAQ,GAAGjwT,CAAC,CAACuwT,KAAlB,KAA4B,CAAhC,EAAmCvwT,CAAC,CAACq/Q,KAAF,CAAQjkR,IAAR,CAAa,IAAb,EAAmBJ,CAAnB;AACnCgF,IAAAA,CAAC,GAAGA,CAAC,CAACwwT,KAAN;AACD;;AACD,IAAEphO,KAAF;AACD;;AAED,SAASwhO,IAAT,GAAgB;AACdX,EAAAA,QAAQ,GAAG,CAACD,SAAS,GAAGG,KAAK,CAAC5mT,GAAN,EAAb,IAA4B2mT,SAAvC;AACA9gO,EAAAA,KAAK,GAAGrzF,OAAO,GAAG,CAAlB;;AACA,MAAI;AACF40T,IAAAA,UAAU;AACX,GAFD,SAEU;AACRvhO,IAAAA,KAAK,GAAG,CAAR;AACAyhO,IAAAA,GAAG;AACHZ,IAAAA,QAAQ,GAAG,CAAX;AACD;AACF;;AAED,SAASa,IAAT,GAAgB;AACd,MAAIvnT,GAAG,GAAG4mT,KAAK,CAAC5mT,GAAN,EAAV;AAAA,MAAuBkqM,KAAK,GAAGlqM,GAAG,GAAGymT,SAArC;AACA,MAAIv8G,KAAK,GAAGo8G,SAAZ,EAAuBK,SAAS,IAAIz8G,KAAb,EAAoBu8G,SAAS,GAAGzmT,GAAhC;AACxB;;AAED,SAASsnT,GAAT,GAAe;AACb,MAAItpG,EAAJ;AAAA,MAAQtkI,EAAE,GAAG6sO,QAAb;AAAA,MAAuB5sO,EAAvB;AAAA,MAA2B73E,IAAI,GAAGjH,QAAlC;;AACA,SAAO6+E,EAAP,EAAW;AACT,QAAIA,EAAE,CAACo8L,KAAP,EAAc;AACZ,UAAIh0Q,IAAI,GAAG43E,EAAE,CAACstO,KAAd,EAAqBllT,IAAI,GAAG43E,EAAE,CAACstO,KAAV;AACrBhpG,MAAAA,EAAE,GAAGtkI,EAAL,EAASA,EAAE,GAAGA,EAAE,CAACutO,KAAjB;AACD,KAHD,MAGO;AACLttO,MAAAA,EAAE,GAAGD,EAAE,CAACutO,KAAR,EAAevtO,EAAE,CAACutO,KAAH,GAAW,IAA1B;AACAvtO,MAAAA,EAAE,GAAGskI,EAAE,GAAGA,EAAE,CAACipG,KAAH,GAAWttO,EAAd,GAAmB4sO,QAAQ,GAAG5sO,EAArC;AACD;AACF;;AACD6sO,EAAAA,QAAQ,GAAGxoG,EAAX;AACAmpG,EAAAA,KAAK,CAACrlT,IAAD,CAAL;AACD;;AAED,SAASqlT,KAAT,CAAerlT,IAAf,EAAqB;AACnB,MAAI+jF,KAAJ,EAAW,OADQ,CACA;;AACnB,MAAIrzF,OAAJ,EAAaA,OAAO,GAAGd,YAAY,CAACc,OAAD,CAAtB;AACb,MAAI03M,KAAK,GAAGpoM,IAAI,GAAG4kT,QAAnB,CAHmB,CAGU;;AAC7B,MAAIx8G,KAAK,GAAG,EAAZ,EAAgB;AACd,QAAIpoM,IAAI,GAAGjH,QAAX,EAAqBrI,OAAO,GAAGhB,UAAU,CAAC61T,IAAD,EAAOvlT,IAAI,GAAG8kT,KAAK,CAAC5mT,GAAN,EAAP,GAAqB2mT,SAA5B,CAApB;AACrB,QAAIvoG,QAAJ,EAAcA,QAAQ,GAAGh4B,aAAa,CAACg4B,QAAD,CAAxB;AACf,GAHD,MAGO;AACL,QAAI,CAACA,QAAL,EAAeqoG,SAAS,GAAGG,KAAK,CAAC5mT,GAAN,EAAZ,EAAyBo+M,QAAQ,GAAGn4B,WAAW,CAACshI,IAAD,EAAOjB,SAAP,CAA/C;AACfzgO,IAAAA,KAAK,GAAG,CAAR,EAAWghO,QAAQ,CAACQ,IAAD,CAAnB;AACD;AACF;;;;;;;;;AC7GD;;AAEe,kBAAS19O,QAAT,EAAmBugI,KAAnB,EAA0BpoM,IAA1B,EAAgC;AAC7C,MAAIrL,CAAC,GAAG,IAAIswT,YAAJ,EAAR;AACA78G,EAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoB,CAACA,KAA7B;AACAzzM,EAAAA,CAAC,CAACywT,OAAF,CAAUM,OAAO,IAAI;AACnB/wT,IAAAA,CAAC,CAAC69B,IAAF;AACAq1C,IAAAA,QAAQ,CAAC69O,OAAO,GAAGt9G,KAAX,CAAR;AACD,GAHD,EAGGA,KAHH,EAGUpoM,IAHV;AAIA,SAAOrL,CAAP;AACD;;;;;;;;;ACVD;;AAEe,kBAASkzE,QAAT,EAAmBugI,KAAnB,EAA0BpoM,IAA1B,EAAgC;AAC7C,MAAIrL,CAAC,GAAG,IAAIswT,YAAJ,EAAR;AAAA,MAAmBh4P,KAAK,GAAGm7I,KAA3B;AACA,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOzzM,CAAC,CAACywT,OAAF,CAAUv9O,QAAV,EAAoBugI,KAApB,EAA2BpoM,IAA3B,GAAkCrL,CAAzC;AACnBA,EAAAA,CAAC,CAACgxT,QAAF,GAAahxT,CAAC,CAACywT,OAAf;;AACAzwT,EAAAA,CAAC,CAACywT,OAAF,GAAY,UAASv9O,QAAT,EAAmBugI,KAAnB,EAA0BpoM,IAA1B,EAAgC;AAC1CooM,IAAAA,KAAK,GAAG,CAACA,KAAT,EAAgBpoM,IAAI,GAAGA,IAAI,IAAI,IAAR,GAAe,iBAAf,GAAuB,CAACA,IAA/C;;AACArL,IAAAA,CAAC,CAACgxT,QAAF,CAAW,SAASC,IAAT,CAAcF,OAAd,EAAuB;AAChCA,MAAAA,OAAO,IAAIz4P,KAAX;;AACAt4D,MAAAA,CAAC,CAACgxT,QAAF,CAAWC,IAAX,EAAiB34P,KAAK,IAAIm7I,KAA1B,EAAiCpoM,IAAjC;;AACA6nE,MAAAA,QAAQ,CAAC69O,OAAD,CAAR;AACD,KAJD,EAIGt9G,KAJH,EAIUpoM,IAJV;AAKD,GAPD;;AAQArL,EAAAA,CAAC,CAACywT,OAAF,CAAUv9O,QAAV,EAAoBugI,KAApB,EAA2BpoM,IAA3B;AACA,SAAOrL,CAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBD;;AAMA;;AAIA;;;;;;;;;;ACVA;AACA,MAAMwD,CAAC,GAAG,OAAV;AACA,MAAMuF,CAAC,GAAG,UAAV;AACA,MAAMgrF,CAAC,GAAG,UAAV,EAAsB;;AAEP,oBAAW;AACxB,MAAIj0F,CAAC,GAAG,CAAR;AACA,SAAO,MAAM,CAACA,CAAC,GAAG,CAAC0D,CAAC,GAAG1D,CAAJ,GAAQiJ,CAAT,IAAcgrF,CAAnB,IAAwBA,CAArC;AACD;;;;;;;;;;;ACRD;;AACA;;AACA;;;;AAEO,SAAStxF,CAAT,CAAW0G,CAAX,EAAc;AACnB,SAAOA,CAAC,CAAC1G,CAAT;AACD;;AAEM,SAASue,CAAT,CAAW7X,CAAX,EAAc;AACnB,SAAOA,CAAC,CAAC6X,CAAT;AACD;;AAED,IAAIkwS,aAAa,GAAG,EAApB;AAAA,IACIC,YAAY,GAAG9uT,IAAI,CAACuiC,EAAL,IAAW,IAAIviC,IAAI,CAACqC,IAAL,CAAU,CAAV,CAAf,CADnB;;AAGe,kBAAS0rI,KAAT,EAAgB;AAC7B,MAAIghL,UAAJ;AAAA,MACIx7S,KAAK,GAAG,CADZ;AAAA,MAEIy7S,QAAQ,GAAG,KAFf;AAAA,MAGIC,UAAU,GAAG,IAAIjvT,IAAI,CAAC0Q,GAAL,CAASs+S,QAAT,EAAmB,IAAI,GAAvB,CAHrB;AAAA,MAIIE,WAAW,GAAG,CAJlB;AAAA,MAKIC,aAAa,GAAG,GALpB;AAAA,MAMIC,MAAM,GAAG,IAAI3wT,GAAJ,EANb;AAAA,MAOI4wT,OAAO,GAAG,oBAAM16S,IAAN,CAPd;AAAA,MAQI0qG,KAAK,GAAG,0BAAS,MAAT,EAAiB,KAAjB,CARZ;AAAA,MASIp/G,MAAM,GAAG,mBATb;AAWA,MAAI8tI,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;;AAEnB,WAASp5H,IAAT,GAAgB;AACdi6S,IAAAA,IAAI;AACJvvM,IAAAA,KAAK,CAACtmH,IAAN,CAAW,MAAX,EAAmBg2T,UAAnB;;AACA,QAAIx7S,KAAK,GAAGy7S,QAAZ,EAAsB;AACpBK,MAAAA,OAAO,CAAC7zR,IAAR;AACA6jF,MAAAA,KAAK,CAACtmH,IAAN,CAAW,KAAX,EAAkBg2T,UAAlB;AACD;AACF;;AAED,WAASH,IAAT,CAAc9lM,UAAd,EAA0B;AACxB,QAAI7uH,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AAAA,QAAyByrB,IAAzB;AAEA,QAAI8jG,UAAU,KAAKqG,SAAnB,EAA8BrG,UAAU,GAAG,CAAb;;AAE9B,SAAK,IAAIvxG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxG,UAApB,EAAgC,EAAEvxG,CAAlC,EAAqC;AACnChE,MAAAA,KAAK,IAAI,CAAC27S,WAAW,GAAG37S,KAAf,IAAwB07S,UAAjC;AAEAG,MAAAA,MAAM,CAACrxT,OAAP,CAAe,UAASg9N,KAAT,EAAgB;AAC7BA,QAAAA,KAAK,CAACxnN,KAAD,CAAL;AACD,OAFD;;AAIA,WAAKtZ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+qB,QAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ;AACA,YAAI+qB,IAAI,CAAC8gQ,EAAL,IAAW,IAAf,EAAqB9gQ,IAAI,CAAC5kB,CAAL,IAAU4kB,IAAI,CAACinS,EAAL,IAAWkD,aAArB,CAArB,KACKnqS,IAAI,CAAC5kB,CAAL,GAAS4kB,IAAI,CAAC8gQ,EAAd,EAAkB9gQ,IAAI,CAACinS,EAAL,GAAU,CAA5B;AACL,YAAIjnS,IAAI,CAAC+gQ,EAAL,IAAW,IAAf,EAAqB/gQ,IAAI,CAACrG,CAAL,IAAUqG,IAAI,CAACknS,EAAL,IAAWiD,aAArB,CAArB,KACKnqS,IAAI,CAACrG,CAAL,GAASqG,IAAI,CAAC+gQ,EAAd,EAAkB/gQ,IAAI,CAACknS,EAAL,GAAU,CAA5B;AACN;AACF;;AAED,WAAO6C,UAAP;AACD;;AAED,WAASO,eAAT,GAA2B;AACzB,SAAK,IAAIr1T,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAArB,EAA6ByrB,IAAlC,EAAwC/qB,CAAC,GAAGkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAACjlB,KAAL,GAAa9F,CAA9B;AACA,UAAI+qB,IAAI,CAAC8gQ,EAAL,IAAW,IAAf,EAAqB9gQ,IAAI,CAAC5kB,CAAL,GAAS4kB,IAAI,CAAC8gQ,EAAd;AACrB,UAAI9gQ,IAAI,CAAC+gQ,EAAL,IAAW,IAAf,EAAqB/gQ,IAAI,CAACrG,CAAL,GAASqG,IAAI,CAAC+gQ,EAAd;;AACrB,UAAIlhR,KAAK,CAACmgB,IAAI,CAAC5kB,CAAN,CAAL,IAAiByE,KAAK,CAACmgB,IAAI,CAACrG,CAAN,CAA1B,EAAoC;AAClC,YAAIvI,MAAM,GAAGy4S,aAAa,GAAG7uT,IAAI,CAACqC,IAAL,CAAU,MAAMpI,CAAhB,CAA7B;AAAA,YAAiDmkP,KAAK,GAAGnkP,CAAC,GAAG60T,YAA7D;AACA9pS,QAAAA,IAAI,CAAC5kB,CAAL,GAASgW,MAAM,GAAGpW,IAAI,CAACgU,GAAL,CAASoqO,KAAT,CAAlB;AACAp5N,QAAAA,IAAI,CAACrG,CAAL,GAASvI,MAAM,GAAGpW,IAAI,CAAC+T,GAAL,CAASqqO,KAAT,CAAlB;AACD;;AACD,UAAIv5O,KAAK,CAACmgB,IAAI,CAACinS,EAAN,CAAL,IAAkBpnT,KAAK,CAACmgB,IAAI,CAACknS,EAAN,CAA3B,EAAsC;AACpClnS,QAAAA,IAAI,CAACinS,EAAL,GAAUjnS,IAAI,CAACknS,EAAL,GAAU,CAApB;AACD;AACF;AACF;;AAED,WAASqD,eAAT,CAAyBx0F,KAAzB,EAAgC;AAC9B,QAAIA,KAAK,CAAC2+C,UAAV,EAAsB3+C,KAAK,CAAC2+C,UAAN,CAAiB3rI,KAAjB,EAAwB9tI,MAAxB;AACtB,WAAO86N,KAAP;AACD;;AAEDu0F,EAAAA,eAAe;AAEf,SAAOP,UAAU,GAAG;AAClBH,IAAAA,IAAI,EAAEA,IADY;AAGlBR,IAAAA,OAAO,EAAE,YAAW;AAClB,aAAOiB,OAAO,CAACjB,OAAR,CAAgBz5S,IAAhB,GAAuBo6S,UAA9B;AACD,KALiB;AAOlBvzR,IAAAA,IAAI,EAAE,YAAW;AACf,aAAO6zR,OAAO,CAAC7zR,IAAR,IAAgBuzR,UAAvB;AACD,KATiB;AAWlBhhL,IAAAA,KAAK,EAAE,UAASntH,CAAT,EAAY;AACjB,aAAO5mB,SAAS,CAACT,MAAV,IAAoBw0I,KAAK,GAAGntH,CAAR,EAAW0uS,eAAe,EAA1B,EAA8BF,MAAM,CAACrxT,OAAP,CAAewxT,eAAf,CAA9B,EAA+DR,UAAnF,IAAiGhhL,KAAxG;AACD,KAbiB;AAelBx6H,IAAAA,KAAK,EAAE,UAASqN,CAAT,EAAY;AACjB,aAAO5mB,SAAS,CAACT,MAAV,IAAoBga,KAAK,GAAG,CAACqN,CAAT,EAAYmuS,UAAhC,IAA8Cx7S,KAArD;AACD,KAjBiB;AAmBlBy7S,IAAAA,QAAQ,EAAE,UAASpuS,CAAT,EAAY;AACpB,aAAO5mB,SAAS,CAACT,MAAV,IAAoBy1T,QAAQ,GAAG,CAACpuS,CAAZ,EAAemuS,UAAnC,IAAiDC,QAAxD;AACD,KArBiB;AAuBlBC,IAAAA,UAAU,EAAE,UAASruS,CAAT,EAAY;AACtB,aAAO5mB,SAAS,CAACT,MAAV,IAAoB01T,UAAU,GAAG,CAACruS,CAAd,EAAiBmuS,UAArC,IAAmD,CAACE,UAA3D;AACD,KAzBiB;AA2BlBC,IAAAA,WAAW,EAAE,UAAStuS,CAAT,EAAY;AACvB,aAAO5mB,SAAS,CAACT,MAAV,IAAoB21T,WAAW,GAAG,CAACtuS,CAAf,EAAkBmuS,UAAtC,IAAoDG,WAA3D;AACD,KA7BiB;AA+BlBC,IAAAA,aAAa,EAAE,UAASvuS,CAAT,EAAY;AACzB,aAAO5mB,SAAS,CAACT,MAAV,IAAoB41T,aAAa,GAAG,IAAIvuS,CAApB,EAAuBmuS,UAA3C,IAAyD,IAAII,aAApE;AACD,KAjCiB;AAmClBK,IAAAA,YAAY,EAAE,UAAS5uS,CAAT,EAAY;AACxB,aAAO5mB,SAAS,CAACT,MAAV,IAAoB0G,MAAM,GAAG2gB,CAAT,EAAYwuS,MAAM,CAACrxT,OAAP,CAAewxT,eAAf,CAAZ,EAA6CR,UAAjE,IAA+E9uT,MAAtF;AACD,KArCiB;AAuClB86N,IAAAA,KAAK,EAAE,UAASv/N,IAAT,EAAeolB,CAAf,EAAkB;AACvB,aAAO5mB,SAAS,CAACT,MAAV,GAAmB,CAAnB,IAAyBqnB,CAAC,IAAI,IAAL,GAAYwuS,MAAM,CAAC1vT,MAAP,CAAclE,IAAd,CAAZ,GAAkC4zT,MAAM,CAACxyT,GAAP,CAAWpB,IAAX,EAAiB+zT,eAAe,CAAC3uS,CAAD,CAAhC,CAAnC,EAA0EmuS,UAAlG,IAAgHK,MAAM,CAACryT,GAAP,CAAWvB,IAAX,CAAvH;AACD,KAzCiB;AA2ClBqxK,IAAAA,IAAI,EAAE,UAASzsK,CAAT,EAAYue,CAAZ,EAAevI,MAAf,EAAuB;AAC3B,UAAInc,CAAC,GAAG,CAAR;AAAA,UACIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MADd;AAAA,UAEIwsB,EAFJ;AAAA,UAGIhH,EAHJ;AAAA,UAIIskD,EAJJ;AAAA,UAKIr+C,IALJ;AAAA,UAMIyqS,OANJ;AAQA,UAAIr5S,MAAM,IAAI,IAAd,EAAoBA,MAAM,GAAGrU,QAAT,CAApB,KACKqU,MAAM,IAAIA,MAAV;;AAEL,WAAKnc,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+qB,QAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ;AACA8rB,QAAAA,EAAE,GAAG3lB,CAAC,GAAG4kB,IAAI,CAAC5kB,CAAd;AACA2e,QAAAA,EAAE,GAAGJ,CAAC,GAAGqG,IAAI,CAACrG,CAAd;AACA0kD,QAAAA,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACA,YAAIskD,EAAE,GAAGjtD,MAAT,EAAiBq5S,OAAO,GAAGzqS,IAAV,EAAgB5O,MAAM,GAAGitD,EAAzB;AAClB;;AAED,aAAOosP,OAAP;AACD,KAhEiB;AAkElB30T,IAAAA,EAAE,EAAE,UAASU,IAAT,EAAeolB,CAAf,EAAkB;AACpB,aAAO5mB,SAAS,CAACT,MAAV,GAAmB,CAAnB,IAAwB8lH,KAAK,CAACvkH,EAAN,CAASU,IAAT,EAAeolB,CAAf,GAAmBmuS,UAA3C,IAAyD1vM,KAAK,CAACvkH,EAAN,CAASU,IAAT,CAAhE;AACD;AApEiB,GAApB;AAsED;;;;;;;;;AC3JD;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAIuyI,KAAJ;AAAA,MACI/oH,IADJ;AAAA,MAEI/kB,MAFJ;AAAA,MAGIsT,KAHJ;AAAA,MAII42S,QAAQ,GAAG,uBAAS,CAAC,EAAV,CAJf;AAAA,MAKI2C,SALJ;AAAA,MAMI4C,YAAY,GAAG,CANnB;AAAA,MAOIC,YAAY,GAAG5tT,QAPnB;AAAA,MAQI6tT,MAAM,GAAG,IARb;;AAUA,WAAS70F,KAAT,CAAen6M,CAAf,EAAkB;AAChB,QAAI3mB,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AAAA,QAAyB6kM,IAAI,GAAG,0BAASrwD,KAAT,EAAgB3tI,aAAhB,EAAmBue,aAAnB,EAAsBktS,UAAtB,CAAiCgE,UAAjC,CAAhC;;AACA,SAAKt8S,KAAK,GAAGqN,CAAR,EAAW3mB,CAAC,GAAG,CAApB,EAAuBA,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC+qB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiBmkM,IAAI,CAAC6gC,KAAL,CAAW3kO,KAAX,CAAjB;AACpC;;AAED,WAASo/Q,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AACZ,QAAI9zI,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AAAA,QAAyByrB,IAAzB;AACA8nS,IAAAA,SAAS,GAAG,IAAI/yT,KAAJ,CAAUoO,CAAV,CAAZ;;AACA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB+qB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB6yT,SAAS,CAAC9nS,IAAI,CAACjlB,KAAN,CAAT,GAAwB,CAACoqT,QAAQ,CAACnlS,IAAD,EAAO/qB,CAAP,EAAU8zI,KAAV,CAAlD;AACzB;;AAED,WAAS8hL,UAAT,CAAoB3oF,IAApB,EAA0B;AACxB,QAAIijF,QAAQ,GAAG,CAAf;AAAA,QAAkBx4N,CAAlB;AAAA,QAAqBjrF,CAArB;AAAA,QAAwB2sC,MAAM,GAAG,CAAjC;AAAA,QAAoCjzC,CAApC;AAAA,QAAuCue,CAAvC;AAAA,QAA0C1kB,CAA1C,CADwB,CAGxB;;AACA,QAAIitO,IAAI,CAAC3tO,MAAT,EAAiB;AACf,WAAK6G,CAAC,GAAGue,CAAC,GAAG1kB,CAAC,GAAG,CAAjB,EAAoBA,CAAC,GAAG,CAAxB,EAA2B,EAAEA,CAA7B,EAAgC;AAC9B,YAAI,CAAC03F,CAAC,GAAGu1I,IAAI,CAACjtO,CAAD,CAAT,MAAkByM,CAAC,GAAG1G,IAAI,CAACiT,GAAL,CAAS0+E,CAAC,CAAC10F,KAAX,CAAtB,CAAJ,EAA8C;AAC5CktT,UAAAA,QAAQ,IAAIx4N,CAAC,CAAC10F,KAAd,EAAqBo2C,MAAM,IAAI3sC,CAA/B,EAAkCtG,CAAC,IAAIsG,CAAC,GAAGirF,CAAC,CAACvxF,CAA7C,EAAgDue,CAAC,IAAIjY,CAAC,GAAGirF,CAAC,CAAChzE,CAA3D;AACD;AACF;;AACDuoN,MAAAA,IAAI,CAAC9mO,CAAL,GAASA,CAAC,GAAGizC,MAAb;AACA6zL,MAAAA,IAAI,CAACvoN,CAAL,GAASA,CAAC,GAAG00B,MAAb;AACD,KARD,CAUA;AAVA,SAWK;AACHs+C,QAAAA,CAAC,GAAGu1I,IAAJ;AACAv1I,QAAAA,CAAC,CAACvxF,CAAF,GAAMuxF,CAAC,CAAC1oF,IAAF,CAAO7I,CAAb;AACAuxF,QAAAA,CAAC,CAAChzE,CAAF,GAAMgzE,CAAC,CAAC1oF,IAAF,CAAO0V,CAAb;;AACA,WAAGwrS,QAAQ,IAAI2C,SAAS,CAACn7N,CAAC,CAAC1oF,IAAF,CAAOlJ,KAAR,CAArB,CAAH,QACO4xF,CAAC,GAAGA,CAAC,CAAChjB,IADb;AAED;;AAEDu4J,IAAAA,IAAI,CAACjqO,KAAL,GAAaktT,QAAb;AACD;;AAED,WAAS7vT,KAAT,CAAe4sO,IAAf,EAAqBx6H,EAArB,EAAyB9rF,CAAzB,EAA4Bm4D,EAA5B,EAAgC;AAC9B,QAAI,CAACmuJ,IAAI,CAACjqO,KAAV,EAAiB,OAAO,IAAP;AAEjB,QAAImD,CAAC,GAAG8mO,IAAI,CAAC9mO,CAAL,GAAS4kB,IAAI,CAAC5kB,CAAtB;AAAA,QACIue,CAAC,GAAGuoN,IAAI,CAACvoN,CAAL,GAASqG,IAAI,CAACrG,CADtB;AAAA,QAEI4nC,CAAC,GAAGwyB,EAAE,GAAG2zB,EAFb;AAAA,QAGI3gG,CAAC,GAAG3L,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAHpB,CAH8B,CAQ9B;AACA;;AACA,QAAI4nC,CAAC,GAAGA,CAAJ,GAAQqpQ,MAAR,GAAiB7jT,CAArB,EAAwB;AACtB,UAAIA,CAAC,GAAG4jT,YAAR,EAAsB;AACpB,YAAIvvT,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAOH,MAAP,CAAJ,EAAoB8L,CAAC,IAAI3L,CAAC,GAAGA,CAA7B;AACb,YAAIue,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAO1e,MAAP,CAAJ,EAAoB8L,CAAC,IAAI4S,CAAC,GAAGA,CAA7B;AACb,YAAI5S,CAAC,GAAG2jT,YAAR,EAAsB3jT,CAAC,GAAG/L,IAAI,CAACqC,IAAL,CAAUqtT,YAAY,GAAG3jT,CAAzB,CAAJ;AACtBiZ,QAAAA,IAAI,CAACinS,EAAL,IAAW7rT,CAAC,GAAG8mO,IAAI,CAACjqO,KAAT,GAAiBsW,KAAjB,GAAyBxH,CAApC;AACAiZ,QAAAA,IAAI,CAACknS,EAAL,IAAWvtS,CAAC,GAAGuoN,IAAI,CAACjqO,KAAT,GAAiBsW,KAAjB,GAAyBxH,CAApC;AACD;;AACD,aAAO,IAAP;AACD,KATD,CAWA;AAXA,SAYK,IAAIm7N,IAAI,CAAC3tO,MAAL,IAAewS,CAAC,IAAI4jT,YAAxB,EAAsC,OAtBb,CAwB9B;;;AACA,QAAIzoF,IAAI,CAACj+N,IAAL,KAAc+b,IAAd,IAAsBkiN,IAAI,CAACv4J,IAA/B,EAAqC;AACnC,UAAIvuE,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAOH,MAAP,CAAJ,EAAoB8L,CAAC,IAAI3L,CAAC,GAAGA,CAA7B;AACb,UAAIue,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG,qBAAO1e,MAAP,CAAJ,EAAoB8L,CAAC,IAAI4S,CAAC,GAAGA,CAA7B;AACb,UAAI5S,CAAC,GAAG2jT,YAAR,EAAsB3jT,CAAC,GAAG/L,IAAI,CAACqC,IAAL,CAAUqtT,YAAY,GAAG3jT,CAAzB,CAAJ;AACvB;;AAED,OAAG,IAAIm7N,IAAI,CAACj+N,IAAL,KAAc+b,IAAlB,EAAwB;AACzBuhC,MAAAA,CAAC,GAAGumQ,SAAS,CAAC5lF,IAAI,CAACj+N,IAAL,CAAUlJ,KAAX,CAAT,GAA6BwT,KAA7B,GAAqCxH,CAAzC;AACAiZ,MAAAA,IAAI,CAACinS,EAAL,IAAW7rT,CAAC,GAAGmmD,CAAf;AACAvhC,MAAAA,IAAI,CAACknS,EAAL,IAAWvtS,CAAC,GAAG4nC,CAAf;AACD,KAJD,QAIS2gL,IAAI,GAAGA,IAAI,CAACv4J,IAJrB;AAKD;;AAEDosJ,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS8yC,MAAT,EAAiBC,OAAjB,EAA0B;AAC3C1+K,IAAAA,KAAK,GAAGy+K,MAAR;AACAvsT,IAAAA,MAAM,GAAGwsT,OAAT;AACA/yC,IAAAA,UAAU;AACX,GAJD;;AAMA3+C,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,OAAOvpS,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuD84P,UAAU,EAAjE,EAAqE3+C,KAAzF,IAAkGovF,QAAzG;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAAC+0F,WAAN,GAAoB,UAASlvS,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBm2T,YAAY,GAAG9uS,CAAC,GAAGA,CAAnB,EAAsBm6M,KAA1C,IAAmD/6N,IAAI,CAACqC,IAAL,CAAUqtT,YAAV,CAA1D;AACD,GAFD;;AAIA30F,EAAAA,KAAK,CAACg1F,WAAN,GAAoB,UAASnvS,CAAT,EAAY;AAC9B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBo2T,YAAY,GAAG/uS,CAAC,GAAGA,CAAnB,EAAsBm6M,KAA1C,IAAmD/6N,IAAI,CAACqC,IAAL,CAAUstT,YAAV,CAA1D;AACD,GAFD;;AAIA50F,EAAAA,KAAK,CAACzsE,KAAN,GAAc,UAAS1tI,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBq2T,MAAM,GAAGhvS,CAAC,GAAGA,CAAb,EAAgBm6M,KAApC,IAA6C/6N,IAAI,CAACqC,IAAL,CAAUutT,MAAV,CAApD;AACD,GAFD;;AAIA,SAAO70F,KAAP;AACD;;;;;;;;;ACnHD;;;;AAEe,kBAAS3kN,MAAT,EAAiBhW,CAAjB,EAAoBue,CAApB,EAAuB;AACpC,MAAIovH,KAAJ;AAAA,MACIo8K,QAAQ,GAAG,uBAAS,GAAT,CADf;AAAA,MAEI2C,SAFJ;AAAA,MAGIkD,QAHJ;AAKA,MAAI,OAAO55S,MAAP,KAAkB,UAAtB,EAAkCA,MAAM,GAAG,uBAAS,CAACA,MAAV,CAAT;AAClC,MAAIhW,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIue,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;;AAEf,WAASo8M,KAAT,CAAexnN,KAAf,EAAsB;AACpB,SAAK,IAAItZ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAA1B,EAAkCU,CAAC,GAAGkO,CAAtC,EAAyC,EAAElO,CAA3C,EAA8C;AAC5C,UAAI+qB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAhB;AAAA,UACI8rB,EAAE,GAAGf,IAAI,CAAC5kB,CAAL,GAASA,CAAT,IAAc,IADvB;AAAA,UAEI2e,EAAE,GAAGiG,IAAI,CAACrG,CAAL,GAASA,CAAT,IAAc,IAFvB;AAAA,UAGI1W,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAU0jB,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAzB,CAHR;AAAA,UAIIxH,CAAC,GAAG,CAACy4S,QAAQ,CAAC/1T,CAAD,CAAR,GAAcgO,CAAf,IAAoB6kT,SAAS,CAAC7yT,CAAD,CAA7B,GAAmCsZ,KAAnC,GAA2CtL,CAJnD;AAKA+c,MAAAA,IAAI,CAACinS,EAAL,IAAWlmS,EAAE,GAAGxO,CAAhB;AACAyN,MAAAA,IAAI,CAACknS,EAAL,IAAWntS,EAAE,GAAGxH,CAAhB;AACD;AACF;;AAED,WAASmiQ,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AACZ,QAAI9zI,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AACAuzT,IAAAA,SAAS,GAAG,IAAI/yT,KAAJ,CAAUoO,CAAV,CAAZ;AACA6nT,IAAAA,QAAQ,GAAG,IAAIj2T,KAAJ,CAAUoO,CAAV,CAAX;;AACA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+1T,MAAAA,QAAQ,CAAC/1T,CAAD,CAAR,GAAc,CAACmc,MAAM,CAAC23H,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAArB;AACA++K,MAAAA,SAAS,CAAC7yT,CAAD,CAAT,GAAe4K,KAAK,CAACmrT,QAAQ,CAAC/1T,CAAD,CAAT,CAAL,GAAqB,CAArB,GAAyB,CAACkwT,QAAQ,CAACp8K,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAAjD;AACD;AACF;;AAEDgtF,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS94P,CAAT,EAAY;AAC7BmtH,IAAAA,KAAK,GAAGntH,CAAR,EAAW84P,UAAU,EAArB;AACD,GAFD;;AAIA3+C,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,OAAOvpS,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuD84P,UAAU,EAAjE,EAAqE3+C,KAAzF,IAAkGovF,QAAzG;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAAC3kN,MAAN,GAAe,UAASwK,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6c,MAAM,GAAG,OAAOwK,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAvC,EAAqD84P,UAAU,EAA/D,EAAmE3+C,KAAvF,IAAgG3kN,MAAvG;AACD,GAFD;;AAIA2kN,EAAAA,KAAK,CAAC36N,CAAN,GAAU,UAASwgB,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,CAACwgB,CAAL,EAAQm6M,KAA5B,IAAqC36N,CAA5C;AACD,GAFD;;AAIA26N,EAAAA,KAAK,CAACp8M,CAAN,GAAU,UAASiC,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,CAACiC,CAAL,EAAQm6M,KAA5B,IAAqCp8M,CAA5C;AACD,GAFD;;AAIA,SAAOo8M,KAAP;AACD;;;;;;;;;ACxDD;;;;AAEe,kBAAS36N,CAAT,EAAY;AACzB,MAAI+pT,QAAQ,GAAG,uBAAS,GAAT,CAAf;AAAA,MACIp8K,KADJ;AAAA,MAEI++K,SAFJ;AAAA,MAGIjsG,EAHJ;AAKA,MAAI,OAAOzgN,CAAP,KAAa,UAAjB,EAA6BA,CAAC,GAAG,uBAASA,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgB,CAACA,CAA1B,CAAJ;;AAE7B,WAAS26N,KAAT,CAAexnN,KAAf,EAAsB;AACpB,SAAK,IAAItZ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAArB,EAA6ByrB,IAAlC,EAAwC/qB,CAAC,GAAGkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAACinS,EAAL,IAAW,CAACprG,EAAE,CAAC5mN,CAAD,CAAF,GAAQ+qB,IAAI,CAAC5kB,CAAd,IAAmB0sT,SAAS,CAAC7yT,CAAD,CAA5B,GAAkCsZ,KAA9D;AACD;AACF;;AAED,WAASmmQ,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AACZ,QAAI9zI,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AACAuzT,IAAAA,SAAS,GAAG,IAAI/yT,KAAJ,CAAUoO,CAAV,CAAZ;AACA04M,IAAAA,EAAE,GAAG,IAAI9mN,KAAJ,CAAUoO,CAAV,CAAL;;AACA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6yT,MAAAA,SAAS,CAAC7yT,CAAD,CAAT,GAAe4K,KAAK,CAACg8M,EAAE,CAAC5mN,CAAD,CAAF,GAAQ,CAACmG,CAAC,CAAC2tI,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAAX,CAAL,GAAwC,CAAxC,GAA4C,CAACo8K,QAAQ,CAACp8K,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAApE;AACD;AACF;;AAEDgtF,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS94P,CAAT,EAAY;AAC7BmtH,IAAAA,KAAK,GAAGntH,CAAR;AACA84P,IAAAA,UAAU;AACX,GAHD;;AAKA3+C,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,OAAOvpS,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuD84P,UAAU,EAAjE,EAAqE3+C,KAAzF,IAAkGovF,QAAzG;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAAC36N,CAAN,GAAU,UAASwgB,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD84P,UAAU,EAA1D,EAA8D3+C,KAAlF,IAA2F36N,CAAlG;AACD,GAFD;;AAIA,SAAO26N,KAAP;AACD;;;;;;;;;ACxCD;;;;AAEe,kBAASp8M,CAAT,EAAY;AACzB,MAAIwrS,QAAQ,GAAG,uBAAS,GAAT,CAAf;AAAA,MACIp8K,KADJ;AAAA,MAEI++K,SAFJ;AAAA,MAGIvC,EAHJ;AAKA,MAAI,OAAO5rS,CAAP,KAAa,UAAjB,EAA6BA,CAAC,GAAG,uBAASA,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgB,CAACA,CAA1B,CAAJ;;AAE7B,WAASo8M,KAAT,CAAexnN,KAAf,EAAsB;AACpB,SAAK,IAAItZ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAArB,EAA6ByrB,IAAlC,EAAwC/qB,CAAC,GAAGkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAACknS,EAAL,IAAW,CAAC3B,EAAE,CAACtwT,CAAD,CAAF,GAAQ+qB,IAAI,CAACrG,CAAd,IAAmBmuS,SAAS,CAAC7yT,CAAD,CAA5B,GAAkCsZ,KAA9D;AACD;AACF;;AAED,WAASmmQ,UAAT,GAAsB;AACpB,QAAI,CAAC3rI,KAAL,EAAY;AACZ,QAAI9zI,CAAJ;AAAA,QAAOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAAjB;AACAuzT,IAAAA,SAAS,GAAG,IAAI/yT,KAAJ,CAAUoO,CAAV,CAAZ;AACAoiT,IAAAA,EAAE,GAAG,IAAIxwT,KAAJ,CAAUoO,CAAV,CAAL;;AACA,SAAKlO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6yT,MAAAA,SAAS,CAAC7yT,CAAD,CAAT,GAAe4K,KAAK,CAAC0lT,EAAE,CAACtwT,CAAD,CAAF,GAAQ,CAAC0kB,CAAC,CAACovH,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAAX,CAAL,GAAwC,CAAxC,GAA4C,CAACo8K,QAAQ,CAACp8K,KAAK,CAAC9zI,CAAD,CAAN,EAAWA,CAAX,EAAc8zI,KAAd,CAApE;AACD;AACF;;AAEDgtF,EAAAA,KAAK,CAAC2+C,UAAN,GAAmB,UAAS94P,CAAT,EAAY;AAC7BmtH,IAAAA,KAAK,GAAGntH,CAAR;AACA84P,IAAAA,UAAU;AACX,GAHD;;AAKA3+C,EAAAA,KAAK,CAACovF,QAAN,GAAiB,UAASvpS,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4wT,QAAQ,GAAG,OAAOvpS,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuD84P,UAAU,EAAjE,EAAqE3+C,KAAzF,IAAkGovF,QAAzG;AACD,GAFD;;AAIApvF,EAAAA,KAAK,CAACp8M,CAAN,GAAU,UAASiC,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD84P,UAAU,EAA1D,EAA8D3+C,KAAlF,IAA2Fp8M,CAAlG;AACD,GAFD;;AAIA,SAAOo8M,KAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;ACPA;;AACA;;AACA;;AAEA,MAAMk1F,QAAQ,GAAG;AACf91J,EAAAA,MAAM,EAAE+1J,oBADO;AAEfC,EAAAA,OAAO,EAAEC,qBAFM;AAGfC,EAAAA,KAAK,EAAEC,sBAHQ;AAIf3xE,EAAAA,IAAI,EAAE4xE,kBAJS;AAKfnwT,EAAAA,CAAC,EAAEowT,eALY;AAMf7xS,EAAAA,CAAC,EAAE8xS;AANY,CAAjB;AAQA,MAAMC,MAAM,GAAG,QAAf;AAAA,MACMC,WAAW,GAAG,CAAC,OAAD,EAAU,UAAV,EAAsB,aAAtB,EAAqC,eAArC,EAAsD,QAAtD,CADpB;AAAA,MAEMC,WAAW,GAAG,CAAC,QAAD,EAAW,YAAX,CAFpB;AAAA,MAGMC,WAAW,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,IAAX,EAAiB,IAAjB,CAHpB;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,KAAT,CAAexzT,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDwzT,KAAK,CAAC1uF,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,gBAAY;AADF,GAFK;AAKjB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,SAFC;AAGT,eAAW;AAHF,GAAD,EAIP;AACD,YAAQ,SADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAJO,EAQP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GARO,EAYP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAhBO,EAoBP;AACD,YAAQ,aADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GApBO,EAwBP;AACD,YAAQ,eADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAxBO,EA4BP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAAC;AACT,aAAO;AACL,iBAAS;AADJ,OADE;AAIT,gBAAU,CAAC;AACT,gBAAQ,GADC;AAET,gBAAQ,QAFC;AAGT,mBAAW;AAHF,OAAD,EAIP;AACD,gBAAQ,GADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OAJO;AAJD,KAAD,EAaP;AACD,aAAO;AACL,iBAAS;AADJ,OADN;AAID,gBAAU,CAAC;AACT,gBAAQ,QADC;AAET,gBAAQ,QAFC;AAGT,gBAAQ;AAHC,OAAD,EAIP;AACD,gBAAQ,UADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OAJO,EAQP;AACD,gBAAQ,YADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OARO;AAJT,KAbO,EA8BP;AACD,aAAO;AACL,iBAAS;AADJ,OADN;AAID,gBAAU,CAAC;AACT,gBAAQ,UADC;AAET,gBAAQ,QAFC;AAGT,mBAAW,CAAC;AAHH,OAAD,EAIP;AACD,gBAAQ,OADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OAJO,EAQP;AACD,gBAAQ,aADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OARO,EAYP;AACD,gBAAQ,aADP;AAED,gBAAQ;AAFP,OAZO;AAJT,KA9BO,EAkDP;AACD,aAAO;AACL,iBAAS;AADJ,OADN;AAID,gBAAU,CAAC;AACT,gBAAQ,OADC;AAET,gBAAQ;AAFC,OAAD,EAGP;AACD,gBAAQ,IADP;AAED,gBAAQ;AAFP,OAHO,EAMP;AACD,gBAAQ,UADP;AAED,gBAAQ,QAFP;AAGD,mBAAW,EAHV;AAID,gBAAQ;AAJP,OANO,EAWP;AACD,gBAAQ,UADP;AAED,gBAAQ,QAFP;AAGD,gBAAQ;AAHP,OAXO,EAeP;AACD,gBAAQ,YADP;AAED,gBAAQ,QAFP;AAGD,mBAAW;AAHV,OAfO;AAJT,KAlDO,EA0EP;AACD,aAAO;AACL,iBAAS;AADJ,OADN;AAID,gBAAU,CAAC;AACT,gBAAQ,UADC;AAET,gBAAQ,QAFC;AAGT,mBAAW;AAHF,OAAD,EAIP;AACD,gBAAQ,GADP;AAED,gBAAQ;AAFP,OAJO;AAJT,KA1EO,EAsFP;AACD,aAAO;AACL,iBAAS;AADJ,OADN;AAID,gBAAU,CAAC;AACT,gBAAQ,UADC;AAET,gBAAQ,QAFC;AAGT,mBAAW;AAHF,OAAD,EAIP;AACD,gBAAQ,GADP;AAED,gBAAQ;AAFP,OAJO;AAJT,KAtFO;AAJT,GA5BO,EAmIP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,KAJT;AAKD,eAAWyuF;AALV,GAnIO;AALO,CAAnB;AAgJA,wBAASC,KAAT,EAAgB5uF,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAIs2F,GAAG,GAAG,KAAK9zT,KAAf;AAAA,QACI+zT,MAAM,GAAGv2F,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC+D,OAApB,CADb;AAAA,QAEIlhO,MAAM,GAAGsjB,CAAC,CAACo6M,QAAF,CAAW21F,WAAX,CAFb;AAAA,QAGI9+N,KAAK,GAAGjxE,CAAC,CAACkoG,UAAF,IAAgB,GAH5B,CADkB,CAIe;;;AAGjC,QAAI,CAACioM,GAAL,EAAU;AACR,WAAK9zT,KAAL,GAAa8zT,GAAG,GAAGhC,UAAU,CAACt0F,KAAK,CAAC1qK,MAAP,EAAenvC,CAAf,CAA7B;AACAmwS,MAAAA,GAAG,CAACj2T,EAAJ,CAAO,MAAP,EAAem2T,KAAK,CAACx2F,KAAK,CAAC8C,QAAP,EAAiB,IAAjB,CAApB;;AAEA,UAAI,CAAC38M,CAAC,CAACswS,MAAP,EAAe;AACbF,QAAAA,MAAM,GAAG,IAAT;AACAD,QAAAA,GAAG,CAACnC,IAAJ,GAFa,CAED;AACb;;AAEDn0F,MAAAA,KAAK,CAACE,QAAN,CAAe,OAAf;AACD,KAVD,MAUO;AACL,UAAIq2F,MAAJ,EAAY;AACVv2F,QAAAA,KAAK,CAACE,QAAN,CAAe,OAAf;AACAo2F,QAAAA,GAAG,CAAChjL,KAAJ,CAAU0sF,KAAK,CAAC1qK,MAAhB;AACD;;AAED,UAAIzyD,MAAM,IAAIm9N,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC8D,GAApB,CAAd,EAAwC;AACtC/uK,QAAAA,KAAK,CAACuhQ,GAAD,EAAMnwS,CAAN,EAAS,CAAT,EAAY65M,KAAZ,CAAL;AACD;AACF,KA1BiB,CA0BhB;;;AAGF,QAAIn9N,MAAM,IAAI0zT,MAAV,IAAoBpwS,CAAC,CAACo6M,QAAF,CAAW41F,WAAX,CAApB,IAA+Cn2F,KAAK,CAAC74B,OAAN,MAAmBhhL,CAAC,CAACwtS,OAAxE,EAAiF;AAC/E2C,MAAAA,GAAG,CAACx9S,KAAJ,CAAUvT,IAAI,CAACK,GAAL,CAAS0wT,GAAG,CAACx9S,KAAJ,EAAT,EAAsBqN,CAAC,CAACrN,KAAF,IAAW,CAAjC,CAAV,EAA+C07S,UAA/C,CAA0D,IAAIjvT,IAAI,CAAC0Q,GAAL,CAASqgT,GAAG,CAAC/B,QAAJ,EAAT,EAAyB,IAAIn9N,KAA7B,CAA9D;;AAEA,UAAIjxE,CAAC,CAACswS,MAAN,EAAc;AACZ,aAAKH,GAAG,CAACv1R,IAAJ,EAAL,EAAiB,EAAEq2D,KAAF,IAAW,CAA5B,GAAgCk/N,GAAG,CAACnC,IAAJ;AACjC,OAFD,MAEO;AACL,YAAImC,GAAG,CAACI,OAAJ,EAAJ,EAAmBJ,GAAG,CAAC3C,OAAJ;AACnB,YAAI,CAAC4C,MAAL,EAAa,OAAOv2F,KAAK,CAAC6B,eAAb,CAFR,CAEsC;AAC5C;AACF;;AAED,WAAO,KAAKx0K,MAAL,CAAYlnC,CAAZ,EAAe65M,KAAf,CAAP;AACD,GA1CwB;;AA4CzB3yK,EAAAA,MAAM,CAAClnC,CAAD,EAAI65M,KAAJ,EAAW;AACf,UAAM8C,QAAQ,GAAG9C,KAAK,CAAC8C,QAAvB,CADe,CACkB;;AAEjC,SAAK,IAAIzjO,IAAI,GAAG,KAAKoiO,OAAhB,EAAyBh4N,CAAC,GAAG,CAA7B,EAAgCwtF,CAAC,GAAG53F,IAAI,CAACP,MAAzC,EAAiDi+B,GAAtD,EAA2DtzB,CAAC,GAAGwtF,CAA/D,EAAkE,EAAExtF,CAApE,EAAuE;AACrEszB,MAAAA,GAAG,GAAG19B,IAAI,CAACoK,CAAD,CAAV;;AAEA,UAAIszB,GAAG,CAACh8B,IAAJ,KAAak1T,MAAb,IAAuBl5R,GAAG,CAACoB,EAAJ,CAAOojM,OAAP,CAAejB,KAAf,KAAyB,MAApD,EAA4D;AAC1D;AACD;;AAED,WAAK,IAAIntG,GAAG,GAAGp2F,GAAG,CAACoB,EAAJ,CAAOsjM,OAAjB,EAA0BjiO,CAAC,GAAG,CAA9B,EAAiCkO,CAAC,GAAGylH,GAAG,CAACr0H,MAAzC,EAAiDq/B,EAAtD,EAA0D3+B,CAAC,GAAGkO,CAA9D,EAAiE,EAAElO,CAAnE,EAAsE;AACpE,YAAI2zH,GAAG,CAAC3zH,CAAD,CAAH,CAAOuB,IAAP,KAAgB,OAAhB,KAA4Bo9B,EAAE,GAAGg1F,GAAG,CAAC3zH,CAAD,CAAH,CAAO2+B,EAAP,CAAUm3B,MAA3C,CAAJ,EAAwD;AACtDwtK,UAAAA,QAAQ,CAAC9C,KAAT,CAAe7hM,EAAf,EAAmB2kM,QAAQ,CAACrD,SAAT,GAAqBG,MAArB,EAAnB;AACA;AACD;AACF;AACF,KAhBc,CAgBb;;;AAGF,WAAOI,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoCk2F,WAApC,CAAP;AACD;;AAhEwB,CAA3B;;AAoEA,SAASI,KAAT,CAAe13F,EAAf,EAAmB3gM,EAAnB,EAAuB;AACrB,SAAO,MAAM2gM,EAAE,CAACiD,KAAH,CAAS5jM,EAAT,EAAah/B,GAAb,EAAb;AACD;;AAED,SAASm1T,UAAT,CAAoBhhL,KAApB,EAA2BntH,CAA3B,EAA8B;AAC5B,QAAMmwS,GAAG,GAAG,8BAAgBhjL,KAAhB,CAAZ;AAAA,QACMvyG,IAAI,GAAGu1R,GAAG,CAACv1R,IADjB;AAAA,QAEM4yR,OAAO,GAAG2C,GAAG,CAAC3C,OAFpB;AAGA,MAAI+C,OAAO,GAAG,KAAd;;AAEAJ,EAAAA,GAAG,CAACI,OAAJ,GAAc,MAAMA,OAApB;;AAEAJ,EAAAA,GAAG,CAAC3C,OAAJ,GAAc,OAAO+C,OAAO,GAAG,KAAV,EAAiB/C,OAAO,EAA/B,CAAd;;AAEA2C,EAAAA,GAAG,CAACv1R,IAAJ,GAAW,OAAO21R,OAAO,GAAG,IAAV,EAAgB31R,IAAI,EAA3B,CAAX;;AAEA,SAAOg0B,KAAK,CAACuhQ,GAAD,EAAMnwS,CAAN,EAAS,IAAT,CAAL,CAAoB9lB,EAApB,CAAuB,KAAvB,EAA8B,MAAMq2T,OAAO,GAAG,IAA9C,CAAP;AACD;;AAED,SAAS3hQ,KAAT,CAAeuhQ,GAAf,EAAoBnwS,CAApB,EAAuBkvD,IAAvB,EAA6B2qJ,KAA7B,EAAoC;AAClC,MAAI70N,CAAC,GAAG,qBAAMgb,CAAC,CAACwuS,MAAR,CAAR;AAAA,MACIn1T,CADJ;AAAA,MAEIkO,CAFJ;AAAA,MAGIo2B,CAHJ;AAAA,MAII/iC,IAJJ;;AAMA,OAAKvB,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGwoT,WAAW,CAACp3T,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9CskC,IAAAA,CAAC,GAAGoyR,WAAW,CAAC12T,CAAD,CAAf;AACA,QAAIskC,CAAC,KAAKmyR,MAAN,IAAgB9vS,CAAC,CAACo6M,QAAF,CAAWz8L,CAAX,CAApB,EAAmCwyR,GAAG,CAACxyR,CAAD,CAAH,CAAO3d,CAAC,CAAC2d,CAAD,CAAR;AACpC;;AAED,OAAKtkC,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGvC,CAAC,CAACrM,MAAlB,EAA0BU,CAAC,GAAGkO,CAA9B,EAAiC,EAAElO,CAAnC,EAAsC;AACpCuB,IAAAA,IAAI,GAAGk1T,MAAM,GAAGz2T,CAAhB;AACAskC,IAAAA,CAAC,GAAGuxC,IAAI,IAAIlvD,CAAC,CAACo6M,QAAF,CAAW01F,MAAX,EAAmBz2T,CAAnB,CAAR,GAAgCm3T,QAAQ,CAACxrT,CAAC,CAAC3L,CAAD,CAAF,CAAxC,GAAiDwgO,KAAK,IAAIO,QAAQ,CAACp1N,CAAC,CAAC3L,CAAD,CAAF,EAAOwgO,KAAP,CAAjB,GAAiCs2F,GAAG,CAACh2F,KAAJ,CAAUv/N,IAAV,CAAjC,GAAmD,IAAxG;AACA,QAAI+iC,CAAJ,EAAOwyR,GAAG,CAACh2F,KAAJ,CAAUv/N,IAAV,EAAgB+iC,CAAhB;AACR;;AAED,OAAKp2B,CAAC,GAAG4oT,GAAG,CAACM,SAAJ,IAAiB,CAA1B,EAA6Bp3T,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvC82T,IAAAA,GAAG,CAACh2F,KAAJ,CAAU21F,MAAM,GAAGz2T,CAAnB,EAAsB,IAAtB,EADuC,CACV;AAC9B;;AAED82T,EAAAA,GAAG,CAACM,SAAJ,GAAgBzrT,CAAC,CAACrM,MAAlB;AACA,SAAOw3T,GAAP;AACD;;AAED,SAAS/1F,QAAT,CAAkBp1N,CAAlB,EAAqB60N,KAArB,EAA4B;AAC1B,MAAIljN,CAAJ,EAAOpL,CAAP;;AAEA,OAAKoL,CAAL,IAAU3R,CAAV,EAAa;AACX,QAAI,0BAAWuG,CAAC,GAAGvG,CAAC,CAAC2R,CAAD,CAAhB,KAAwBkjN,KAAK,CAACO,QAAN,CAAe,8BAAe7uN,CAAf,CAAf,CAA5B,EAA+D,OAAO,CAAP;AAChE;;AAED,SAAO,CAAP;AACD;;AAED,SAASilT,QAAT,CAAkBxwS,CAAlB,EAAqB;AACnB,MAAIhb,CAAJ,EAAO24B,CAAP;;AAEA,MAAI,CAAC,8BAAe0xR,QAAf,EAAyBrvS,CAAC,CAACm6M,KAA3B,CAAL,EAAwC;AACtC,yBAAM,yBAAyBn6M,CAAC,CAACm6M,KAAjC;AACD;;AAEDn1N,EAAAA,CAAC,GAAGqqT,QAAQ,CAACrvS,CAAC,CAACm6M,KAAH,CAAR,EAAJ;;AAEA,OAAKx8L,CAAL,IAAU3d,CAAV,EAAa;AACX,QAAI,0BAAWhb,CAAC,CAAC24B,CAAD,CAAZ,CAAJ,EAAsB+yR,aAAa,CAAC1rT,CAAC,CAAC24B,CAAD,CAAF,EAAO3d,CAAC,CAAC2d,CAAD,CAAR,EAAa3d,CAAb,CAAb;AACvB;;AAED,SAAOhb,CAAP;AACD;;AAED,SAAS0rT,aAAT,CAAuB1rT,CAAvB,EAA0BuG,CAA1B,EAA6ByU,CAA7B,EAAgC;AAC9Bhb,EAAAA,CAAC,CAAC,0BAAWuG,CAAX,IAAgBrF,CAAC,IAAIqF,CAAC,CAACrF,CAAD,EAAI8Z,CAAJ,CAAtB,GAA+BzU,CAAhC,CAAD;AACD;;;;;;;;;ACvTD,SAASolT,iBAAT,CAA2BpwT,CAA3B,EAA8B6G,CAA9B,EAAiC;AAC/B,SAAO7G,CAAC,CAACwwM,MAAF,KAAa3pM,CAAC,CAAC2pM,MAAf,GAAwB,CAAxB,GAA4B,CAAnC;AACD;;AAED,SAAS6/G,KAAT,CAAeziJ,QAAf,EAAyB;AACvB,SAAOA,QAAQ,CAACvoK,MAAT,CAAgBirT,WAAhB,EAA6B,CAA7B,IAAkC1iJ,QAAQ,CAACx1K,MAAlD;AACD;;AAED,SAASk4T,WAAT,CAAqBrxT,CAArB,EAAwBsG,CAAxB,EAA2B;AACzB,SAAOtG,CAAC,GAAGsG,CAAC,CAACtG,CAAb;AACD;;AAED,SAASsxT,IAAT,CAAc3iJ,QAAd,EAAwB;AACtB,SAAO,IAAIA,QAAQ,CAACvoK,MAAT,CAAgBmrT,UAAhB,EAA4B,CAA5B,CAAX;AACD;;AAED,SAASA,UAAT,CAAoBhzS,CAApB,EAAuBjY,CAAvB,EAA0B;AACxB,SAAO1G,IAAI,CAACK,GAAL,CAASse,CAAT,EAAYjY,CAAC,CAACiY,CAAd,CAAP;AACD;;AAED,SAASizS,QAAT,CAAkB5sS,IAAlB,EAAwB;AACtB,MAAI+pJ,QAAJ;;AACA,SAAOA,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAAvB,EAAiC/pJ,IAAI,GAAG+pJ,QAAQ,CAAC,CAAD,CAAf;;AACjC,SAAO/pJ,IAAP;AACD;;AAED,SAAS6sS,SAAT,CAAmB7sS,IAAnB,EAAyB;AACvB,MAAI+pJ,QAAJ;;AACA,SAAOA,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAAvB,EAAiC/pJ,IAAI,GAAG+pJ,QAAQ,CAACA,QAAQ,CAACx1K,MAAT,GAAkB,CAAnB,CAAf;;AACjC,SAAOyrB,IAAP;AACD;;AAEc,oBAAW;AACxB,MAAI2mQ,UAAU,GAAG4lC,iBAAjB;AAAA,MACIxrS,EAAE,GAAG,CADT;AAAA,MAEIhH,EAAE,GAAG,CAFT;AAAA,MAGI+yS,QAAQ,GAAG,KAHf;;AAKA,WAASC,OAAT,CAAiBn0H,IAAjB,EAAuB;AACrB,QAAIo0H,YAAJ;AAAA,QACI5xT,CAAC,GAAG,CADR,CADqB,CAIrB;;AACAw9L,IAAAA,IAAI,CAACq0H,SAAL,CAAe,UAASjtS,IAAT,EAAe;AAC5B,UAAI+pJ,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAApB;;AACA,UAAIA,QAAJ,EAAc;AACZ/pJ,QAAAA,IAAI,CAAC5kB,CAAL,GAASoxT,KAAK,CAACziJ,QAAD,CAAd;AACA/pJ,QAAAA,IAAI,CAACrG,CAAL,GAAS+yS,IAAI,CAAC3iJ,QAAD,CAAb;AACD,OAHD,MAGO;AACL/pJ,QAAAA,IAAI,CAAC5kB,CAAL,GAAS4xT,YAAY,GAAG5xT,CAAC,IAAIurR,UAAU,CAAC3mQ,IAAD,EAAOgtS,YAAP,CAAlB,GAAyC,CAA9D;AACAhtS,QAAAA,IAAI,CAACrG,CAAL,GAAS,CAAT;AACAqzS,QAAAA,YAAY,GAAGhtS,IAAf;AACD;AACF,KAVD;AAYA,QAAIooB,IAAI,GAAGwkR,QAAQ,CAACh0H,IAAD,CAAnB;AAAA,QACIvwJ,KAAK,GAAGwkR,SAAS,CAACj0H,IAAD,CADrB;AAAA,QAEI0c,EAAE,GAAGltK,IAAI,CAAChtC,CAAL,GAASurR,UAAU,CAACv+O,IAAD,EAAOC,KAAP,CAAV,GAA0B,CAF5C;AAAA,QAGIq/D,EAAE,GAAGr/D,KAAK,CAACjtC,CAAN,GAAUurR,UAAU,CAACt+O,KAAD,EAAQD,IAAR,CAAV,GAA0B,CAH7C,CAjBqB,CAsBrB;;AACA,WAAOwwJ,IAAI,CAACq0H,SAAL,CAAeH,QAAQ,GAAG,UAAS9sS,IAAT,EAAe;AAC9CA,MAAAA,IAAI,CAAC5kB,CAAL,GAAS,CAAC4kB,IAAI,CAAC5kB,CAAL,GAASw9L,IAAI,CAACx9L,CAAf,IAAoB2lB,EAA7B;AACAf,MAAAA,IAAI,CAACrG,CAAL,GAAS,CAACi/K,IAAI,CAACj/K,CAAL,GAASqG,IAAI,CAACrG,CAAf,IAAoBI,EAA7B;AACD,KAH6B,GAG1B,UAASiG,IAAT,EAAe;AACjBA,MAAAA,IAAI,CAAC5kB,CAAL,GAAS,CAAC4kB,IAAI,CAAC5kB,CAAL,GAASk6M,EAAV,KAAiB5tG,EAAE,GAAG4tG,EAAtB,IAA4Bv0L,EAArC;AACAf,MAAAA,IAAI,CAACrG,CAAL,GAAS,CAAC,KAAKi/K,IAAI,CAACj/K,CAAL,GAASqG,IAAI,CAACrG,CAAL,GAASi/K,IAAI,CAACj/K,CAAvB,GAA2B,CAAhC,CAAD,IAAuCI,EAAhD;AACD,KANM,CAAP;AAOD;;AAEDgzS,EAAAA,OAAO,CAACpmC,UAAR,GAAqB,UAASvrR,CAAT,EAAY;AAC/B,WAAOpG,SAAS,CAACT,MAAV,IAAoBoyR,UAAU,GAAGvrR,CAAb,EAAgB2xT,OAApC,IAA+CpmC,UAAtD;AACD,GAFD;;AAIAomC,EAAAA,OAAO,CAACrwT,IAAR,GAAe,UAAStB,CAAT,EAAY;AACzB,WAAOpG,SAAS,CAACT,MAAV,IAAoBu4T,QAAQ,GAAG,KAAX,EAAkB/rS,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAzB,EAA8B2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAArC,EAA0C2xT,OAA9D,IAA0ED,QAAQ,GAAG,IAAH,GAAU,CAAC/rS,EAAD,EAAKhH,EAAL,CAAnG;AACD,GAFD;;AAIAgzS,EAAAA,OAAO,CAACD,QAAR,GAAmB,UAAS1xT,CAAT,EAAY;AAC7B,WAAOpG,SAAS,CAACT,MAAV,IAAoBu4T,QAAQ,GAAG,IAAX,EAAiB/rS,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAxB,EAA6B2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAApC,EAAyC2xT,OAA7D,IAAyED,QAAQ,GAAG,CAAC/rS,EAAD,EAAKhH,EAAL,CAAH,GAAc,IAAtG;AACD,GAFD;;AAIA,SAAOgzS,OAAP;AACD;;;;;;;;;ACnFD,SAAS//O,KAAT,CAAehtD,IAAf,EAAqB;AACnB,MAAIxkB,GAAG,GAAG,CAAV;AAAA,MACIuuK,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QADpB;AAAA,MAEI90K,CAAC,GAAG80K,QAAQ,IAAIA,QAAQ,CAACx1K,MAF7B;AAGA,MAAI,CAACU,CAAL,EAAQuG,GAAG,GAAG,CAAN,CAAR,KACK,OAAO,EAAEvG,CAAF,IAAO,CAAd,EAAiBuG,GAAG,IAAIuuK,QAAQ,CAAC90K,CAAD,CAAR,CAAYgD,KAAnB;AACtB+nB,EAAAA,IAAI,CAAC/nB,KAAL,GAAauD,GAAb;AACD;;AAEc,oBAAW;AACxB,SAAO,KAAKyxT,SAAL,CAAejgP,KAAf,CAAP;AACD;;;;;;;;;ACXc,kBAASnB,QAAT,EAAmB4iH,IAAnB,EAAyB;AACtC,MAAI1zL,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAMilB,IAAX,IAAmB,IAAnB,EAAyB;AACvB6rD,IAAAA,QAAQ,CAAC93E,IAAT,CAAc06L,IAAd,EAAoBzuK,IAApB,EAA0B,EAAEjlB,KAA5B,EAAmC,IAAnC;AACD;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACNc,kBAAS8wE,QAAT,EAAmB4iH,IAAnB,EAAyB;AACtC,MAAIzuK,IAAI,GAAG,IAAX;AAAA,MAAiB+oH,KAAK,GAAG,CAAC/oH,IAAD,CAAzB;AAAA,MAAiC+pJ,QAAjC;AAAA,MAA2C90K,CAA3C;AAAA,MAA8C8F,KAAK,GAAG,CAAC,CAAvD;;AACA,SAAOilB,IAAI,GAAG+oH,KAAK,CAAC1pH,GAAN,EAAd,EAA2B;AACzBwsD,IAAAA,QAAQ,CAAC93E,IAAT,CAAc06L,IAAd,EAAoBzuK,IAApB,EAA0B,EAAEjlB,KAA5B,EAAmC,IAAnC;;AACA,QAAIgvK,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAApB,EAA8B;AAC5B,WAAK90K,CAAC,GAAG80K,QAAQ,CAACx1K,MAAT,GAAkB,CAA3B,EAA8BU,CAAC,IAAI,CAAnC,EAAsC,EAAEA,CAAxC,EAA2C;AACzC8zI,QAAAA,KAAK,CAAC7zI,IAAN,CAAW60K,QAAQ,CAAC90K,CAAD,CAAnB;AACD;AACF;AACF;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACXc,kBAAS42E,QAAT,EAAmB4iH,IAAnB,EAAyB;AACtC,MAAIzuK,IAAI,GAAG,IAAX;AAAA,MAAiB+oH,KAAK,GAAG,CAAC/oH,IAAD,CAAzB;AAAA,MAAiC2pD,IAAI,GAAG,EAAxC;AAAA,MAA4CogG,QAA5C;AAAA,MAAsD90K,CAAtD;AAAA,MAAyDkO,CAAzD;AAAA,MAA4DpI,KAAK,GAAG,CAAC,CAArE;;AACA,SAAOilB,IAAI,GAAG+oH,KAAK,CAAC1pH,GAAN,EAAd,EAA2B;AACzBsqD,IAAAA,IAAI,CAACz0E,IAAL,CAAU8qB,IAAV;;AACA,QAAI+pJ,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAApB,EAA8B;AAC5B,WAAK90K,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG4mK,QAAQ,CAACx1K,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C8zI,QAAAA,KAAK,CAAC7zI,IAAN,CAAW60K,QAAQ,CAAC90K,CAAD,CAAnB;AACD;AACF;AACF;;AACD,SAAO+qB,IAAI,GAAG2pD,IAAI,CAACtqD,GAAL,EAAd,EAA0B;AACxBwsD,IAAAA,QAAQ,CAAC93E,IAAT,CAAc06L,IAAd,EAAoBzuK,IAApB,EAA0B,EAAEjlB,KAA5B,EAAmC,IAAnC;AACD;;AACD,SAAO,IAAP;AACD;;;;;;;;;ACdc,kBAAS8wE,QAAT,EAAmB4iH,IAAnB,EAAyB;AACtC,MAAI1zL,KAAK,GAAG,CAAC,CAAb;;AACA,OAAK,MAAMilB,IAAX,IAAmB,IAAnB,EAAyB;AACvB,QAAI6rD,QAAQ,CAAC93E,IAAT,CAAc06L,IAAd,EAAoBzuK,IAApB,EAA0B,EAAEjlB,KAA5B,EAAmC,IAAnC,CAAJ,EAA8C;AAC5C,aAAOilB,IAAP;AACD;AACF;AACF;;;;;;;;;ACPc,kBAAS/nB,KAAT,EAAgB;AAC7B,SAAO,KAAKg1T,SAAL,CAAe,UAASjtS,IAAT,EAAe;AACnC,QAAIxkB,GAAG,GAAG,CAACvD,KAAK,CAAC+nB,IAAI,CAAC/b,IAAN,CAAN,IAAqB,CAA/B;AAAA,QACI8lK,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QADpB;AAAA,QAEI90K,CAAC,GAAG80K,QAAQ,IAAIA,QAAQ,CAACx1K,MAF7B;;AAGA,WAAO,EAAEU,CAAF,IAAO,CAAd,EAAiBuG,GAAG,IAAIuuK,QAAQ,CAAC90K,CAAD,CAAR,CAAYgD,KAAnB;;AACjB+nB,IAAAA,IAAI,CAAC/nB,KAAL,GAAauD,GAAb;AACD,GANM,CAAP;AAOD;;;;;;;;;ACRc,kBAASuhM,OAAT,EAAkB;AAC/B,SAAO,KAAKmwH,UAAL,CAAgB,UAASltS,IAAT,EAAe;AACpC,QAAIA,IAAI,CAAC+pJ,QAAT,EAAmB;AACjB/pJ,MAAAA,IAAI,CAAC+pJ,QAAL,CAAc9qK,IAAd,CAAmB89L,OAAnB;AACD;AACF,GAJM,CAAP;AAKD;;;;;;;;;ACNc,kBAASn2L,GAAT,EAAc;AAC3B,MAAI7F,KAAK,GAAG,IAAZ;AAAA,MACIosT,QAAQ,GAAGC,mBAAmB,CAACrsT,KAAD,EAAQ6F,GAAR,CADlC;AAAA,MAEImiI,KAAK,GAAG,CAAChoI,KAAD,CAFZ;;AAGA,SAAOA,KAAK,KAAKosT,QAAjB,EAA2B;AACzBpsT,IAAAA,KAAK,GAAGA,KAAK,CAAC4rM,MAAd;AACA5jE,IAAAA,KAAK,CAAC7zI,IAAN,CAAW6L,KAAX;AACD;;AACD,MAAIwR,CAAC,GAAGw2H,KAAK,CAACx0I,MAAd;;AACA,SAAOqS,GAAG,KAAKumT,QAAf,EAAyB;AACvBpkL,IAAAA,KAAK,CAACtwG,MAAN,CAAalmB,CAAb,EAAgB,CAAhB,EAAmB3L,GAAnB;AACAA,IAAAA,GAAG,GAAGA,GAAG,CAAC+lM,MAAV;AACD;;AACD,SAAO5jE,KAAP;AACD;;AAED,SAASqkL,mBAAT,CAA6BjxT,CAA7B,EAAgC6G,CAAhC,EAAmC;AACjC,MAAI7G,CAAC,KAAK6G,CAAV,EAAa,OAAO7G,CAAP;AACb,MAAIkxT,MAAM,GAAGlxT,CAAC,CAACmxT,SAAF,EAAb;AAAA,MACIC,MAAM,GAAGvqT,CAAC,CAACsqT,SAAF,EADb;AAAA,MAEI5rT,CAAC,GAAG,IAFR;AAGAvF,EAAAA,CAAC,GAAGkxT,MAAM,CAAChuS,GAAP,EAAJ;AACArc,EAAAA,CAAC,GAAGuqT,MAAM,CAACluS,GAAP,EAAJ;;AACA,SAAOljB,CAAC,KAAK6G,CAAb,EAAgB;AACdtB,IAAAA,CAAC,GAAGvF,CAAJ;AACAA,IAAAA,CAAC,GAAGkxT,MAAM,CAAChuS,GAAP,EAAJ;AACArc,IAAAA,CAAC,GAAGuqT,MAAM,CAACluS,GAAP,EAAJ;AACD;;AACD,SAAO3d,CAAP;AACD;;;;;;;;;AC7Bc,oBAAW;AACxB,MAAIse,IAAI,GAAG,IAAX;AAAA,MAAiB+oH,KAAK,GAAG,CAAC/oH,IAAD,CAAzB;;AACA,SAAOA,IAAI,GAAGA,IAAI,CAAC2sL,MAAnB,EAA2B;AACzB5jE,IAAAA,KAAK,CAAC7zI,IAAN,CAAW8qB,IAAX;AACD;;AACD,SAAO+oH,KAAP;AACD;;;;;;;;;ACNc,oBAAW;AACxB,SAAOh0I,KAAK,CAACuR,IAAN,CAAW,IAAX,CAAP;AACD;;;;;;;;;ACFc,oBAAW;AACxB,MAAIknT,MAAM,GAAG,EAAb;AACA,OAAKN,UAAL,CAAgB,UAASltS,IAAT,EAAe;AAC7B,QAAI,CAACA,IAAI,CAAC+pJ,QAAV,EAAoB;AAClByjJ,MAAAA,MAAM,CAACt4T,IAAP,CAAY8qB,IAAZ;AACD;AACF,GAJD;AAKA,SAAOwtS,MAAP;AACD;;;;;;;;;ACRc,oBAAW;AACxB,MAAI50H,IAAI,GAAG,IAAX;AAAA,MAAiBgvH,KAAK,GAAG,EAAzB;AACAhvH,EAAAA,IAAI,CAAC60H,IAAL,CAAU,UAASztS,IAAT,EAAe;AACvB,QAAIA,IAAI,KAAK44K,IAAb,EAAmB;AAAE;AACnBgvH,MAAAA,KAAK,CAAC1yT,IAAN,CAAW;AAAC61D,QAAAA,MAAM,EAAE/qC,IAAI,CAAC2sL,MAAd;AAAsBnhK,QAAAA,MAAM,EAAExrB;AAA9B,OAAX;AACD;AACF,GAJD;AAKA,SAAO4nS,KAAP;AACD;;;;;;;;;ACRc,qBAAY;AACzB,MAAI5nS,IAAI,GAAG,IAAX;AAAA,MAAiB+lJ,OAAjB;AAAA,MAA0Bp8F,IAAI,GAAG,CAAC3pD,IAAD,CAAjC;AAAA,MAAyC+pJ,QAAzC;AAAA,MAAmD90K,CAAnD;AAAA,MAAsDkO,CAAtD;;AACA,KAAG;AACD4iK,IAAAA,OAAO,GAAGp8F,IAAI,CAACjgE,OAAL,EAAV,EAA0BigE,IAAI,GAAG,EAAjC;;AACA,WAAO3pD,IAAI,GAAG+lJ,OAAO,CAAC1mJ,GAAR,EAAd,EAA6B;AAC3B,YAAMW,IAAN;;AACA,UAAI+pJ,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAApB,EAA8B;AAC5B,aAAK90K,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAG4mK,QAAQ,CAACx1K,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C00E,UAAAA,IAAI,CAACz0E,IAAL,CAAU60K,QAAQ,CAAC90K,CAAD,CAAlB;AACD;AACF;AACF;AACF,GAVD,QAUS00E,IAAI,CAACp1E,MAVd;AAWD;;;;;;;;;;;ACbD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,SAASm5T,SAAT,CAAmBzpT,IAAnB,EAAyB8lK,QAAzB,EAAmC;AAChD,MAAI9lK,IAAI,YAAYxK,GAApB,EAAyB;AACvBwK,IAAAA,IAAI,GAAG,CAACkmH,SAAD,EAAYlmH,IAAZ,CAAP;AACA,QAAI8lK,QAAQ,KAAK5/C,SAAjB,EAA4B4/C,QAAQ,GAAG4jJ,WAAX;AAC7B,GAHD,MAGO,IAAI5jJ,QAAQ,KAAK5/C,SAAjB,EAA4B;AACjC4/C,IAAAA,QAAQ,GAAG6jJ,cAAX;AACD;;AAED,MAAIh1H,IAAI,GAAG,IAAI3gE,IAAJ,CAASh0H,IAAT,CAAX;AAAA,MACI+b,IADJ;AAAA,MAEI+oH,KAAK,GAAG,CAAC6vD,IAAD,CAFZ;AAAA,MAGIhiB,KAHJ;AAAA,MAIIi3I,MAJJ;AAAA,MAKI54T,CALJ;AAAA,MAMIkO,CANJ;;AAQA,SAAO6c,IAAI,GAAG+oH,KAAK,CAAC1pH,GAAN,EAAd,EAA2B;AACzB,QAAI,CAACwuS,MAAM,GAAG9jJ,QAAQ,CAAC/pJ,IAAI,CAAC/b,IAAN,CAAlB,MAAmCd,CAAC,GAAG,CAAC0qT,MAAM,GAAG94T,KAAK,CAACuR,IAAN,CAAWunT,MAAX,CAAV,EAA8Bt5T,MAArE,CAAJ,EAAkF;AAChFyrB,MAAAA,IAAI,CAAC+pJ,QAAL,GAAgB8jJ,MAAhB;;AACA,WAAK54T,CAAC,GAAGkO,CAAC,GAAG,CAAb,EAAgBlO,CAAC,IAAI,CAArB,EAAwB,EAAEA,CAA1B,EAA6B;AAC3B8zI,QAAAA,KAAK,CAAC7zI,IAAN,CAAW0hL,KAAK,GAAGi3I,MAAM,CAAC54T,CAAD,CAAN,GAAY,IAAIgjI,IAAJ,CAAS41L,MAAM,CAAC54T,CAAD,CAAf,CAA/B;AACA2hL,QAAAA,KAAK,CAAC+1B,MAAN,GAAe3sL,IAAf;AACA42J,QAAAA,KAAK,CAACluK,KAAN,GAAcsX,IAAI,CAACtX,KAAL,GAAa,CAA3B;AACD;AACF;AACF;;AAED,SAAOkwL,IAAI,CAACs0H,UAAL,CAAgBY,aAAhB,CAAP;AACD;;AAED,SAASC,SAAT,GAAqB;AACnB,SAAOL,SAAS,CAAC,IAAD,CAAT,CAAgBR,UAAhB,CAA2Bc,QAA3B,CAAP;AACD;;AAED,SAASJ,cAAT,CAAwB9rT,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACioK,QAAT;AACD;;AAED,SAAS4jJ,WAAT,CAAqB7rT,CAArB,EAAwB;AACtB,SAAO/M,KAAK,CAACuH,OAAN,CAAcwF,CAAd,IAAmBA,CAAC,CAAC,CAAD,CAApB,GAA0B,IAAjC;AACD;;AAED,SAASksT,QAAT,CAAkBhuS,IAAlB,EAAwB;AACtB,MAAIA,IAAI,CAAC/b,IAAL,CAAUhM,KAAV,KAAoBkyH,SAAxB,EAAmCnqG,IAAI,CAAC/nB,KAAL,GAAa+nB,IAAI,CAAC/b,IAAL,CAAUhM,KAAvB;AACnC+nB,EAAAA,IAAI,CAAC/b,IAAL,GAAY+b,IAAI,CAAC/b,IAAL,CAAUA,IAAtB;AACD;;AAEM,SAAS6pT,aAAT,CAAuB9tS,IAAvB,EAA6B;AAClC,MAAIkL,MAAM,GAAG,CAAb;;AACA,KAAGlL,IAAI,CAACkL,MAAL,GAAcA,MAAd,CAAH,QACO,CAAClL,IAAI,GAAGA,IAAI,CAAC2sL,MAAb,KAAyB3sL,IAAI,CAACkL,MAAL,GAAc,EAAEA,MADhD;AAED;;AAEM,SAAS+sG,IAAT,CAAch0H,IAAd,EAAoB;AACzB,OAAKA,IAAL,GAAYA,IAAZ;AACA,OAAKyE,KAAL,GACA,KAAKwiB,MAAL,GAAc,CADd;AAEA,OAAKyhL,MAAL,GAAc,IAAd;AACD;;AAED10E,IAAI,CAAC5iI,SAAL,GAAiBq4T,SAAS,CAACr4T,SAAV,GAAsB;AACrCwL,EAAAA,WAAW,EAAEo3H,IADwB;AAErCjrD,EAAAA,KAAK,EAAEihP,cAF8B;AAGrCR,EAAAA,IAAI,EAAES,aAH+B;AAIrCjB,EAAAA,SAAS,EAAEkB,kBAJ0B;AAKrCjB,EAAAA,UAAU,EAAEkB,mBALyB;AAMrCvmJ,EAAAA,IAAI,EAAEwmJ,aAN+B;AAOrC7yT,EAAAA,GAAG,EAAE8yT,YAPgC;AAQrCrvT,EAAAA,IAAI,EAAEsvT,aAR+B;AASrCjrT,EAAAA,IAAI,EAAEkrT,aAT+B;AAUrClB,EAAAA,SAAS,EAAEmB,kBAV0B;AAWrCC,EAAAA,WAAW,EAAEC,oBAXwB;AAYrCnB,EAAAA,MAAM,EAAEoB,eAZ6B;AAarChH,EAAAA,KAAK,EAAEiH,cAb8B;AAcrC9kP,EAAAA,IAAI,EAAEgkP,SAd+B;AAerC,GAACv6S,MAAM,CAACslI,QAAR,GAAmBg2K;AAfkB,CAAvC;;;;;;;;;;AC1Ee,kBAAS1zT,CAAT,EAAY;AACzB,SAAO,OAAOA,CAAP,KAAa,QAAb,IAAyB,YAAYA,CAArC,GACHA,CADG,CACD;AADC,IAEHrG,KAAK,CAACuR,IAAN,CAAWlL,CAAX,CAFJ,CADyB,CAGN;AACpB;;AAEM,SAASR,OAAT,CAAiBxF,KAAjB,EAAwB;AAC7B,MAAIs3F,CAAC,GAAGt3F,KAAK,CAACb,MAAd;AAAA,MACIoE,CADJ;AAAA,MAEI1D,CAFJ;;AAIA,SAAOy3F,CAAP,EAAU;AACRz3F,IAAAA,CAAC,GAAG+F,IAAI,CAACC,MAAL,KAAgByxF,CAAC,EAAjB,GAAsB,CAA1B;AACA/zF,IAAAA,CAAC,GAAGvD,KAAK,CAACs3F,CAAD,CAAT;AACAt3F,IAAAA,KAAK,CAACs3F,CAAD,CAAL,GAAWt3F,KAAK,CAACH,CAAD,CAAhB;AACAG,IAAAA,KAAK,CAACH,CAAD,CAAL,GAAW0D,CAAX;AACD;;AAED,SAAOvD,KAAP;AACD;;;;;;;;;ACnBD;;AAEe,kBAAS25T,OAAT,EAAkB;AAC/B,MAAI95T,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAC,GAAG,CAAC4rT,OAAO,GAAG,oBAAQh6T,KAAK,CAACuR,IAAN,CAAWyoT,OAAX,CAAR,CAAX,EAAyCx6T,MAAxD;AAAA,MAAgE84P,CAAC,GAAG,EAApE;AAAA,MAAwE9zN,CAAxE;AAAA,MAA2E5lC,CAA3E;;AAEA,SAAOsB,CAAC,GAAGkO,CAAX,EAAc;AACZo2B,IAAAA,CAAC,GAAGw1R,OAAO,CAAC95T,CAAD,CAAX;AACA,QAAItB,CAAC,IAAIq7T,YAAY,CAACr7T,CAAD,EAAI4lC,CAAJ,CAArB,EAA6B,EAAEtkC,CAAF,CAA7B,KACKtB,CAAC,GAAGs7T,YAAY,CAAC5hE,CAAC,GAAG6hE,WAAW,CAAC7hE,CAAD,EAAI9zN,CAAJ,CAAhB,CAAhB,EAAyCtkC,CAAC,GAAG,CAA7C;AACN;;AAED,SAAOtB,CAAP;AACD;;AAED,SAASu7T,WAAT,CAAqB7hE,CAArB,EAAwB9zN,CAAxB,EAA2B;AACzB,MAAItkC,CAAJ,EAAOiK,CAAP;AAEA,MAAIiwT,eAAe,CAAC51R,CAAD,EAAI8zN,CAAJ,CAAnB,EAA2B,OAAO,CAAC9zN,CAAD,CAAP,CAHF,CAKzB;;AACA,OAAKtkC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGo4P,CAAC,CAAC94P,MAAlB,EAA0B,EAAEU,CAA5B,EAA+B;AAC7B,QAAIm6T,WAAW,CAAC71R,CAAD,EAAI8zN,CAAC,CAACp4P,CAAD,CAAL,CAAX,IACGk6T,eAAe,CAACE,aAAa,CAAChiE,CAAC,CAACp4P,CAAD,CAAF,EAAOskC,CAAP,CAAd,EAAyB8zN,CAAzB,CADtB,EACmD;AACjD,aAAO,CAACA,CAAC,CAACp4P,CAAD,CAAF,EAAOskC,CAAP,CAAP;AACD;AACF,GAXwB,CAazB;;;AACA,OAAKtkC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGo4P,CAAC,CAAC94P,MAAF,GAAW,CAA3B,EAA8B,EAAEU,CAAhC,EAAmC;AACjC,SAAKiK,CAAC,GAAGjK,CAAC,GAAG,CAAb,EAAgBiK,CAAC,GAAGmuP,CAAC,CAAC94P,MAAtB,EAA8B,EAAE2K,CAAhC,EAAmC;AACjC,UAAIkwT,WAAW,CAACC,aAAa,CAAChiE,CAAC,CAACp4P,CAAD,CAAF,EAAOo4P,CAAC,CAACnuP,CAAD,CAAR,CAAd,EAA4Bq6B,CAA5B,CAAX,IACG61R,WAAW,CAACC,aAAa,CAAChiE,CAAC,CAACp4P,CAAD,CAAF,EAAOskC,CAAP,CAAd,EAAyB8zN,CAAC,CAACnuP,CAAD,CAA1B,CADd,IAEGkwT,WAAW,CAACC,aAAa,CAAChiE,CAAC,CAACnuP,CAAD,CAAF,EAAOq6B,CAAP,CAAd,EAAyB8zN,CAAC,CAACp4P,CAAD,CAA1B,CAFd,IAGGk6T,eAAe,CAACG,aAAa,CAACjiE,CAAC,CAACp4P,CAAD,CAAF,EAAOo4P,CAAC,CAACnuP,CAAD,CAAR,EAAaq6B,CAAb,CAAd,EAA+B8zN,CAA/B,CAHtB,EAGyD;AACvD,eAAO,CAACA,CAAC,CAACp4P,CAAD,CAAF,EAAOo4P,CAAC,CAACnuP,CAAD,CAAR,EAAaq6B,CAAb,CAAP;AACD;AACF;AACF,GAvBwB,CAyBzB;;;AACA,QAAM,IAAI/lC,KAAJ,EAAN;AACD;;AAED,SAAS47T,WAAT,CAAqBjzT,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,MAAIusT,EAAE,GAAGpzT,CAAC,CAAC8G,CAAF,GAAMD,CAAC,CAACC,CAAjB;AAAA,MAAoB8d,EAAE,GAAG/d,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAACf,CAAjC;AAAA,MAAoC2e,EAAE,GAAG/W,CAAC,CAAC2W,CAAF,GAAMxd,CAAC,CAACwd,CAAjD;AACA,SAAO41S,EAAE,GAAG,CAAL,IAAUA,EAAE,GAAGA,EAAL,GAAUxuS,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1C;AACD;;AAED,SAASi1S,YAAT,CAAsB7yT,CAAtB,EAAyB6G,CAAzB,EAA4B;AAC1B,MAAIusT,EAAE,GAAGpzT,CAAC,CAAC8G,CAAF,GAAMD,CAAC,CAACC,CAAR,GAAYjI,IAAI,CAACK,GAAL,CAASc,CAAC,CAAC8G,CAAX,EAAcD,CAAC,CAACC,CAAhB,EAAmB,CAAnB,IAAwB,IAA7C;AAAA,MAAmD8d,EAAE,GAAG/d,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAACf,CAAhE;AAAA,MAAmE2e,EAAE,GAAG/W,CAAC,CAAC2W,CAAF,GAAMxd,CAAC,CAACwd,CAAhF;AACA,SAAO41S,EAAE,GAAG,CAAL,IAAUA,EAAE,GAAGA,EAAL,GAAUxuS,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1C;AACD;;AAED,SAASo1S,eAAT,CAAyBhzT,CAAzB,EAA4BkxP,CAA5B,EAA+B;AAC7B,OAAK,IAAIp4P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGo4P,CAAC,CAAC94P,MAAtB,EAA8B,EAAEU,CAAhC,EAAmC;AACjC,QAAI,CAAC+5T,YAAY,CAAC7yT,CAAD,EAAIkxP,CAAC,CAACp4P,CAAD,CAAL,CAAjB,EAA4B;AAC1B,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAED,SAASg6T,YAAT,CAAsB5hE,CAAtB,EAAyB;AACvB,UAAQA,CAAC,CAAC94P,MAAV;AACE,SAAK,CAAL;AAAQ,aAAOi7T,aAAa,CAACniE,CAAC,CAAC,CAAD,CAAF,CAApB;;AACR,SAAK,CAAL;AAAQ,aAAOgiE,aAAa,CAAChiE,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAApB;;AACR,SAAK,CAAL;AAAQ,aAAOiiE,aAAa,CAACjiE,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd,CAApB;AAHV;AAKD;;AAED,SAASmiE,aAAT,CAAuBrzT,CAAvB,EAA0B;AACxB,SAAO;AACLf,IAAAA,CAAC,EAAEe,CAAC,CAACf,CADA;AAELue,IAAAA,CAAC,EAAExd,CAAC,CAACwd,CAFA;AAGL1W,IAAAA,CAAC,EAAE9G,CAAC,CAAC8G;AAHA,GAAP;AAKD;;AAED,SAASosT,aAAT,CAAuBlzT,CAAvB,EAA0B6G,CAA1B,EAA6B;AAC3B,MAAI0kG,EAAE,GAAGvrG,CAAC,CAACf,CAAX;AAAA,MAAcqsG,EAAE,GAAGtrG,CAAC,CAACwd,CAArB;AAAA,MAAwB0tL,EAAE,GAAGlrM,CAAC,CAAC8G,CAA/B;AAAA,MACI8wE,EAAE,GAAG/wE,CAAC,CAAC5H,CADX;AAAA,MACcusG,EAAE,GAAG3kG,CAAC,CAAC2W,CADrB;AAAA,MACwB2tL,EAAE,GAAGtkM,CAAC,CAACC,CAD/B;AAAA,MAEI8vO,GAAG,GAAGh/J,EAAE,GAAG2zB,EAFf;AAAA,MAEmBsrI,GAAG,GAAGrrI,EAAE,GAAGF,EAF9B;AAAA,MAEkCgoN,GAAG,GAAGnoH,EAAE,GAAGD,EAF7C;AAAA,MAGItgM,CAAC,GAAG/L,IAAI,CAACqC,IAAL,CAAU01O,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA5B,CAHR;AAIA,SAAO;AACL53O,IAAAA,CAAC,EAAE,CAACssG,EAAE,GAAG3zB,EAAL,GAAUg/J,GAAG,GAAGhsO,CAAN,GAAU0oT,GAArB,IAA4B,CAD1B;AAEL91S,IAAAA,CAAC,EAAE,CAAC8tF,EAAE,GAAGE,EAAL,GAAUqrI,GAAG,GAAGjsO,CAAN,GAAU0oT,GAArB,IAA4B,CAF1B;AAGLxsT,IAAAA,CAAC,EAAE,CAAC8D,CAAC,GAAGsgM,EAAJ,GAASC,EAAV,IAAgB;AAHd,GAAP;AAKD;;AAED,SAASgoH,aAAT,CAAuBnzT,CAAvB,EAA0B6G,CAA1B,EAA6BtB,CAA7B,EAAgC;AAC9B,MAAIgmG,EAAE,GAAGvrG,CAAC,CAACf,CAAX;AAAA,MAAcqsG,EAAE,GAAGtrG,CAAC,CAACwd,CAArB;AAAA,MAAwB0tL,EAAE,GAAGlrM,CAAC,CAAC8G,CAA/B;AAAA,MACI8wE,EAAE,GAAG/wE,CAAC,CAAC5H,CADX;AAAA,MACcusG,EAAE,GAAG3kG,CAAC,CAAC2W,CADrB;AAAA,MACwB2tL,EAAE,GAAGtkM,CAAC,CAACC,CAD/B;AAAA,MAEI0xO,EAAE,GAAGjzO,CAAC,CAACtG,CAFX;AAAA,MAEcw5O,EAAE,GAAGlzO,CAAC,CAACiY,CAFrB;AAAA,MAEwB+1S,EAAE,GAAGhuT,CAAC,CAACuB,CAF/B;AAAA,MAGIyrS,EAAE,GAAGhnM,EAAE,GAAG3zB,EAHd;AAAA,MAII47O,EAAE,GAAGjoN,EAAE,GAAGitI,EAJd;AAAA,MAKI2hE,EAAE,GAAG7uM,EAAE,GAAGE,EALd;AAAA,MAMIioN,EAAE,GAAGnoN,EAAE,GAAGmtI,EANd;AAAA,MAOIrmM,EAAE,GAAG+4J,EAAE,GAAGD,EAPd;AAAA,MAQI41G,EAAE,GAAGyS,EAAE,GAAGroH,EARd;AAAA,MASIjpI,EAAE,GAAGspC,EAAE,GAAGA,EAAL,GAAUD,EAAE,GAAGA,EAAf,GAAoB4/F,EAAE,GAAGA,EATlC;AAAA,MAUIhpI,EAAE,GAAGD,EAAE,GAAG2V,EAAE,GAAGA,EAAV,GAAe4zB,EAAE,GAAGA,EAApB,GAAyB2/F,EAAE,GAAGA,EAVvC;AAAA,MAWIuoH,EAAE,GAAGzxP,EAAE,GAAGu2K,EAAE,GAAGA,EAAV,GAAeC,EAAE,GAAGA,EAApB,GAAyB86E,EAAE,GAAGA,EAXvC;AAAA,MAYIzzB,EAAE,GAAG0zB,EAAE,GAAGrZ,EAAL,GAAU5H,EAAE,GAAGkhB,EAZxB;AAAA,MAaIl/D,EAAE,GAAG,CAAC4lD,EAAE,GAAGuZ,EAAL,GAAUD,EAAE,GAAGvxP,EAAhB,KAAuB49N,EAAE,GAAG,CAA5B,IAAiCv0L,EAb1C;AAAA,MAcIkpJ,EAAE,GAAG,CAACg/D,EAAE,GAAGrhR,EAAL,GAAU+nQ,EAAE,GAAG2G,EAAhB,IAAsBhhB,EAd/B;AAAA,MAeItrC,EAAE,GAAG,CAACg/D,EAAE,GAAGtxP,EAAL,GAAUqwO,EAAE,GAAGmhB,EAAhB,KAAuB5zB,EAAE,GAAG,CAA5B,IAAiCx0L,EAf1C;AAAA,MAgBIopJ,EAAE,GAAG,CAAC69C,EAAE,GAAGuO,EAAL,GAAU0S,EAAE,GAAGphR,EAAhB,IAAsB0tP,EAhB/B;AAAA,MAiBI7uC,CAAC,GAAGwD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoB,CAjB5B;AAAA,MAkBIxD,CAAC,GAAG,KAAKhmD,EAAE,GAAGqpD,EAAE,GAAGE,EAAV,GAAeD,EAAE,GAAGE,EAAzB,CAlBR;AAAA,MAmBIvD,CAAC,GAAGoD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoBtpD,EAAE,GAAGA,EAnBjC;AAAA,MAoBIpkM,CAAC,GAAG,EAAEmqP,CAAC,GAAG,CAACC,CAAC,GAAGryP,IAAI,CAACqC,IAAL,CAAUgwP,CAAC,GAAGA,CAAJ,GAAQ,IAAID,CAAJ,GAAQE,CAA1B,CAAL,KAAsC,IAAIF,CAA1C,CAAH,GAAkDE,CAAC,GAAGD,CAAzD,CApBR;AAqBA,SAAO;AACLjyP,IAAAA,CAAC,EAAEssG,EAAE,GAAGgpJ,EAAL,GAAUE,EAAE,GAAG3tP,CADb;AAEL0W,IAAAA,CAAC,EAAE8tF,EAAE,GAAGkpJ,EAAL,GAAUE,EAAE,GAAG5tP,CAFb;AAGLA,IAAAA,CAAC,EAAEA;AAHE,GAAP;AAKD;;;;;;;;;;ACrHD;;AACA;;;;AAEA,SAAS6sT,KAAT,CAAe9sT,CAAf,EAAkB7G,CAAlB,EAAqBuF,CAArB,EAAwB;AACtB,MAAIqf,EAAE,GAAG/d,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAACf,CAAjB;AAAA,MAAoBA,CAApB;AAAA,MAAuBszS,EAAvB;AAAA,MACI30R,EAAE,GAAG/W,CAAC,CAAC2W,CAAF,GAAMxd,CAAC,CAACwd,CADjB;AAAA,MACoBA,CADpB;AAAA,MACuB28R,EADvB;AAAA,MAEIj4O,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAFxB;;AAGA,MAAIskD,EAAJ,EAAQ;AACNqwO,IAAAA,EAAE,GAAGvyS,CAAC,CAAC8G,CAAF,GAAMvB,CAAC,CAACuB,CAAb,EAAgByrS,EAAE,IAAIA,EAAtB;AACA4H,IAAAA,EAAE,GAAGtzS,CAAC,CAACC,CAAF,GAAMvB,CAAC,CAACuB,CAAb,EAAgBqzS,EAAE,IAAIA,EAAtB;;AACA,QAAI5H,EAAE,GAAG4H,EAAT,EAAa;AACXl7S,MAAAA,CAAC,GAAG,CAACijE,EAAE,GAAGi4O,EAAL,GAAU5H,EAAX,KAAkB,IAAIrwO,EAAtB,CAAJ;AACA1kD,MAAAA,CAAC,GAAG3e,IAAI,CAACqC,IAAL,CAAUrC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYi7S,EAAE,GAAGj4O,EAAL,GAAUjjE,CAAC,GAAGA,CAA1B,CAAV,CAAJ;AACAsG,MAAAA,CAAC,CAACtG,CAAF,GAAM4H,CAAC,CAAC5H,CAAF,GAAMA,CAAC,GAAG2lB,EAAV,GAAepH,CAAC,GAAGI,EAAzB;AACArY,MAAAA,CAAC,CAACiY,CAAF,GAAM3W,CAAC,CAAC2W,CAAF,GAAMve,CAAC,GAAG2e,EAAV,GAAeJ,CAAC,GAAGoH,EAAzB;AACD,KALD,MAKO;AACL3lB,MAAAA,CAAC,GAAG,CAACijE,EAAE,GAAGqwO,EAAL,GAAU4H,EAAX,KAAkB,IAAIj4O,EAAtB,CAAJ;AACA1kD,MAAAA,CAAC,GAAG3e,IAAI,CAACqC,IAAL,CAAUrC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYqzS,EAAE,GAAGrwO,EAAL,GAAUjjE,CAAC,GAAGA,CAA1B,CAAV,CAAJ;AACAsG,MAAAA,CAAC,CAACtG,CAAF,GAAMe,CAAC,CAACf,CAAF,GAAMA,CAAC,GAAG2lB,EAAV,GAAepH,CAAC,GAAGI,EAAzB;AACArY,MAAAA,CAAC,CAACiY,CAAF,GAAMxd,CAAC,CAACwd,CAAF,GAAMve,CAAC,GAAG2e,EAAV,GAAeJ,CAAC,GAAGoH,EAAzB;AACD;AACF,GAdD,MAcO;AACLrf,IAAAA,CAAC,CAACtG,CAAF,GAAMe,CAAC,CAACf,CAAF,GAAMsG,CAAC,CAACuB,CAAd;AACAvB,IAAAA,CAAC,CAACiY,CAAF,GAAMxd,CAAC,CAACwd,CAAR;AACD;AACF;;AAED,SAASgpL,UAAT,CAAoBxmM,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAIusT,EAAE,GAAGpzT,CAAC,CAAC8G,CAAF,GAAMD,CAAC,CAACC,CAAR,GAAY,IAArB;AAAA,MAA2B8d,EAAE,GAAG/d,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAACf,CAAxC;AAAA,MAA2C2e,EAAE,GAAG/W,CAAC,CAAC2W,CAAF,GAAMxd,CAAC,CAACwd,CAAxD;AACA,SAAO41S,EAAE,GAAG,CAAL,IAAUA,EAAE,GAAGA,EAAL,GAAUxuS,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1C;AACD;;AAED,SAAS2yB,KAAT,CAAe1sB,IAAf,EAAqB;AACnB,MAAI7jB,CAAC,GAAG6jB,IAAI,CAACpE,CAAb;AAAA,MACI5Y,CAAC,GAAGgd,IAAI,CAAC2pD,IAAL,CAAU/tD,CADlB;AAAA,MAEIqgR,EAAE,GAAG9/R,CAAC,CAAC8G,CAAF,GAAMD,CAAC,CAACC,CAFjB;AAAA,MAGI8d,EAAE,GAAG,CAAC5kB,CAAC,CAACf,CAAF,GAAM4H,CAAC,CAACC,CAAR,GAAYD,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAAC8G,CAArB,IAA0Bg5R,EAHnC;AAAA,MAIIliR,EAAE,GAAG,CAAC5d,CAAC,CAACwd,CAAF,GAAM3W,CAAC,CAACC,CAAR,GAAYD,CAAC,CAAC2W,CAAF,GAAMxd,CAAC,CAAC8G,CAArB,IAA0Bg5R,EAJnC;AAKA,SAAOl7Q,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAtB;AACD;;AAED,SAASk+G,IAAT,CAAcyiH,MAAd,EAAsB;AACpB,OAAK9+N,CAAL,GAAS8+N,MAAT;AACA,OAAK/wK,IAAL,GAAY,IAAZ;AACA,OAAKmzI,QAAL,GAAgB,IAAhB;AACD;;AAEM,SAASizG,WAAT,CAAqBhB,OAArB,EAA8B;AACnC,MAAI,EAAE5rT,CAAC,GAAG,CAAC4rT,OAAO,GAAG,oBAAMA,OAAN,CAAX,EAA2Bx6T,MAAjC,CAAJ,EAA8C,OAAO,CAAP;AAE9C,MAAI4H,CAAJ,EAAO6G,CAAP,EAAUtB,CAAV,EAAayB,CAAb,EAAgB6sT,EAAhB,EAAoB51B,EAApB,EAAwBnlS,CAAxB,EAA2BiK,CAA3B,EAA8BqT,CAA9B,EAAiC09S,EAAjC,EAAqChxE,EAArC,CAHmC,CAKnC;;AACA9iP,EAAAA,CAAC,GAAG4yT,OAAO,CAAC,CAAD,CAAX,EAAgB5yT,CAAC,CAACf,CAAF,GAAM,CAAtB,EAAyBe,CAAC,CAACwd,CAAF,GAAM,CAA/B;AACA,MAAI,EAAExW,CAAC,GAAG,CAAN,CAAJ,EAAc,OAAOhH,CAAC,CAAC8G,CAAT,CAPqB,CASnC;;AACAD,EAAAA,CAAC,GAAG+rT,OAAO,CAAC,CAAD,CAAX,EAAgB5yT,CAAC,CAACf,CAAF,GAAM,CAAC4H,CAAC,CAACC,CAAzB,EAA4BD,CAAC,CAAC5H,CAAF,GAAMe,CAAC,CAAC8G,CAApC,EAAuCD,CAAC,CAAC2W,CAAF,GAAM,CAA7C;AACA,MAAI,EAAExW,CAAC,GAAG,CAAN,CAAJ,EAAc,OAAOhH,CAAC,CAAC8G,CAAF,GAAMD,CAAC,CAACC,CAAf,CAXqB,CAanC;;AACA6sT,EAAAA,KAAK,CAAC9sT,CAAD,EAAI7G,CAAJ,EAAOuF,CAAC,GAAGqtT,OAAO,CAAC,CAAD,CAAlB,CAAL,CAdmC,CAgBnC;;AACA5yT,EAAAA,CAAC,GAAG,IAAI87H,IAAJ,CAAS97H,CAAT,CAAJ,EAAiB6G,CAAC,GAAG,IAAIi1H,IAAJ,CAASj1H,CAAT,CAArB,EAAkCtB,CAAC,GAAG,IAAIu2H,IAAJ,CAASv2H,CAAT,CAAtC;AACAvF,EAAAA,CAAC,CAACwtE,IAAF,GAASjoE,CAAC,CAACo7M,QAAF,GAAa95M,CAAtB;AACAA,EAAAA,CAAC,CAAC2mE,IAAF,GAASxtE,CAAC,CAAC2gN,QAAF,GAAap7M,CAAtB;AACAA,EAAAA,CAAC,CAACioE,IAAF,GAAS3mE,CAAC,CAAC85M,QAAF,GAAa3gN,CAAtB,CApBmC,CAsBnC;;AACA+zT,EAAAA,IAAI,EAAE,KAAKj7T,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AAC5B66T,IAAAA,KAAK,CAAC3zT,CAAC,CAACyf,CAAH,EAAM5Y,CAAC,CAAC4Y,CAAR,EAAWla,CAAC,GAAGqtT,OAAO,CAAC95T,CAAD,CAAtB,CAAL,EAAiCyM,CAAC,GAAG,IAAIu2H,IAAJ,CAASv2H,CAAT,CAArC,CAD4B,CAG5B;AACA;AACA;;AACAxC,IAAAA,CAAC,GAAG8D,CAAC,CAAC2mE,IAAN,EAAYp3D,CAAC,GAAGpW,CAAC,CAAC2gN,QAAlB,EAA4BmzG,EAAE,GAAGjtT,CAAC,CAAC4Y,CAAF,CAAI3Y,CAArC,EAAwCg8O,EAAE,GAAG9iP,CAAC,CAACyf,CAAF,CAAI3Y,CAAjD;;AACA,OAAG;AACD,UAAIgtT,EAAE,IAAIhxE,EAAV,EAAc;AACZ,YAAIt8C,UAAU,CAACzjM,CAAC,CAAC0c,CAAH,EAAMla,CAAC,CAACka,CAAR,CAAd,EAA0B;AACxB5Y,UAAAA,CAAC,GAAG9D,CAAJ,EAAO/C,CAAC,CAACwtE,IAAF,GAAS3mE,CAAhB,EAAmBA,CAAC,CAAC85M,QAAF,GAAa3gN,CAAhC,EAAmC,EAAElH,CAArC;AACA,mBAASi7T,IAAT;AACD;;AACDD,QAAAA,EAAE,IAAI/wT,CAAC,CAAC0c,CAAF,CAAI3Y,CAAV,EAAa/D,CAAC,GAAGA,CAAC,CAACyqE,IAAnB;AACD,OAND,MAMO;AACL,YAAIg5H,UAAU,CAACpwL,CAAC,CAACqJ,CAAH,EAAMla,CAAC,CAACka,CAAR,CAAd,EAA0B;AACxBzf,UAAAA,CAAC,GAAGoW,CAAJ,EAAOpW,CAAC,CAACwtE,IAAF,GAAS3mE,CAAhB,EAAmBA,CAAC,CAAC85M,QAAF,GAAa3gN,CAAhC,EAAmC,EAAElH,CAArC;AACA,mBAASi7T,IAAT;AACD;;AACDjxE,QAAAA,EAAE,IAAI1sO,CAAC,CAACqJ,CAAF,CAAI3Y,CAAV,EAAasP,CAAC,GAAGA,CAAC,CAACuqM,QAAnB;AACD;AACF,KAdD,QAcS59M,CAAC,KAAKqT,CAAC,CAACo3D,IAdjB,EAP4B,CAuB5B;;;AACAjoE,IAAAA,CAAC,CAACo7M,QAAF,GAAa3gN,CAAb,EAAgBuF,CAAC,CAACioE,IAAF,GAAS3mE,CAAzB,EAA4B7G,CAAC,CAACwtE,IAAF,GAAS3mE,CAAC,CAAC85M,QAAF,GAAa95M,CAAC,GAAGtB,CAAtD,CAxB4B,CA0B5B;;AACAsuT,IAAAA,EAAE,GAAGtjR,KAAK,CAACvwC,CAAD,CAAV;;AACA,WAAO,CAACuF,CAAC,GAAGA,CAAC,CAACioE,IAAP,MAAiB3mE,CAAxB,EAA2B;AACzB,UAAI,CAACo3R,EAAE,GAAG1tP,KAAK,CAAChrC,CAAD,CAAX,IAAkBsuT,EAAtB,EAA0B;AACxB7zT,QAAAA,CAAC,GAAGuF,CAAJ,EAAOsuT,EAAE,GAAG51B,EAAZ;AACD;AACF;;AACDp3R,IAAAA,CAAC,GAAG7G,CAAC,CAACwtE,IAAN;AACD,GAzDkC,CA2DnC;;;AACAxtE,EAAAA,CAAC,GAAG,CAAC6G,CAAC,CAAC4Y,CAAH,CAAJ,EAAWla,CAAC,GAAGsB,CAAf;;AAAkB,SAAO,CAACtB,CAAC,GAAGA,CAAC,CAACioE,IAAP,MAAiB3mE,CAAxB,EAA2B7G,CAAC,CAACjH,IAAF,CAAOwM,CAAC,CAACka,CAAT;;AAAala,EAAAA,CAAC,GAAG,sBAAQvF,CAAR,CAAJ,CA5DvB,CA8DnC;;AACA,OAAKlH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwBkH,CAAC,GAAG4yT,OAAO,CAAC95T,CAAD,CAAX,EAAgBkH,CAAC,CAACf,CAAF,IAAOsG,CAAC,CAACtG,CAAzB,EAA4Be,CAAC,CAACwd,CAAF,IAAOjY,CAAC,CAACiY,CAArC;;AAExB,SAAOjY,CAAC,CAACuB,CAAT;AACD;;AAEc,kBAAS8rT,OAAT,EAAkB;AAC/BgB,EAAAA,WAAW,CAAChB,OAAD,CAAX;AACA,SAAOA,OAAP;AACD;;;;;;;;;;ACtHM,SAASoB,QAAT,CAAkBvvT,CAAlB,EAAqB;AAC1B,SAAOA,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBqkL,QAAQ,CAACrkL,CAAD,CAAlC;AACD;;AAEM,SAASqkL,QAAT,CAAkBrkL,CAAlB,EAAqB;AAC1B,MAAI,OAAOA,CAAP,KAAa,UAAjB,EAA6B,MAAM,IAAIpN,KAAJ,EAAN;AAC7B,SAAOoN,CAAP;AACD;;;;;;;;;;ACPM,SAASwvT,YAAT,GAAwB;AAC7B,SAAO,CAAP;AACD;;AAEc,kBAASh1T,CAAT,EAAY;AACzB,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;;;;;;;;ACRD;;AACA;;AACA;;;;;;AAEA,SAASi1T,aAAT,CAAuBvuT,CAAvB,EAA0B;AACxB,SAAO9G,IAAI,CAACqC,IAAL,CAAUyE,CAAC,CAAC7J,KAAZ,CAAP;AACD;;AAEc,oBAAW;AACxB,MAAImZ,MAAM,GAAG,IAAb;AAAA,MACI2P,EAAE,GAAG,CADT;AAAA,MAEIhH,EAAE,GAAG,CAFT;AAAA,MAGIrI,OAAO,GAAG0+S,sBAHd;;AAKA,WAASF,IAAT,CAAct3H,IAAd,EAAoB;AAClBA,IAAAA,IAAI,CAACx9L,CAAL,GAAS2lB,EAAE,GAAG,CAAd,EAAiB63K,IAAI,CAACj/K,CAAL,GAASI,EAAE,GAAG,CAA/B;;AACA,QAAI3I,MAAJ,EAAY;AACVwnL,MAAAA,IAAI,CAACs0H,UAAL,CAAgBoD,UAAU,CAACl/S,MAAD,CAA1B,EACK67S,SADL,CACesD,YAAY,CAAC7+S,OAAD,EAAU,GAAV,CAD3B,EAEKw7S,UAFL,CAEgBsD,cAAc,CAAC,CAAD,CAF9B;AAGD,KAJD,MAIO;AACL53H,MAAAA,IAAI,CAACs0H,UAAL,CAAgBoD,UAAU,CAACD,aAAD,CAA1B,EACKpD,SADL,CACesD,YAAY,CAACH,sBAAD,EAAe,CAAf,CAD3B,EAEKnD,SAFL,CAEesD,YAAY,CAAC7+S,OAAD,EAAUknL,IAAI,CAAC31L,CAAL,GAASjI,IAAI,CAACG,GAAL,CAAS4lB,EAAT,EAAahH,EAAb,CAAnB,CAF3B,EAGKmzS,UAHL,CAGgBsD,cAAc,CAACx1T,IAAI,CAACG,GAAL,CAAS4lB,EAAT,EAAahH,EAAb,KAAoB,IAAI6+K,IAAI,CAAC31L,CAA7B,CAAD,CAH9B;AAID;;AACD,WAAO21L,IAAP;AACD;;AAEDs3H,EAAAA,IAAI,CAAC9+S,MAAL,GAAc,UAAShW,CAAT,EAAY;AACxB,WAAOpG,SAAS,CAACT,MAAV,IAAoB6c,MAAM,GAAG,yBAAShW,CAAT,CAAT,EAAsB80T,IAA1C,IAAkD9+S,MAAzD;AACD,GAFD;;AAIA8+S,EAAAA,IAAI,CAACxzT,IAAL,GAAY,UAAStB,CAAT,EAAY;AACtB,WAAOpG,SAAS,CAACT,MAAV,IAAoBwsB,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAP,EAAY2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAAnB,EAAwB80T,IAA5C,IAAoD,CAACnvS,EAAD,EAAKhH,EAAL,CAA3D;AACD,GAFD;;AAIAm2S,EAAAA,IAAI,CAACx+S,OAAL,GAAe,UAAStW,CAAT,EAAY;AACzB,WAAOpG,SAAS,CAACT,MAAV,IAAoBmd,OAAO,GAAG,OAAOtW,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAxC,EAAsD80T,IAA1E,IAAkFx+S,OAAzF;AACD,GAFD;;AAIA,SAAOw+S,IAAP;AACD;;AAED,SAASI,UAAT,CAAoBl/S,MAApB,EAA4B;AAC1B,SAAO,UAAS4O,IAAT,EAAe;AACpB,QAAI,CAACA,IAAI,CAAC+pJ,QAAV,EAAoB;AAClB/pJ,MAAAA,IAAI,CAAC/c,CAAL,GAASjI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,CAAC+V,MAAM,CAAC4O,IAAD,CAAP,IAAiB,CAA7B,CAAT;AACD;AACF,GAJD;AAKD;;AAED,SAASuwS,YAAT,CAAsB7+S,OAAtB,EAA+Ba,CAA/B,EAAkC;AAChC,SAAO,UAASyN,IAAT,EAAe;AACpB,QAAI+pJ,QAAQ,GAAG/pJ,IAAI,CAAC+pJ,QAApB,EAA8B;AAC5B,UAAIA,QAAJ;AAAA,UACI90K,CADJ;AAAA,UAEIkO,CAAC,GAAG4mK,QAAQ,CAACx1K,MAFjB;AAAA,UAGI0O,CAAC,GAAGyO,OAAO,CAACsO,IAAD,CAAP,GAAgBzN,CAAhB,IAAqB,CAH7B;AAAA,UAII5e,CAJJ;AAMA,UAAIsP,CAAJ,EAAO,KAAKhO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB80K,QAAQ,CAAC90K,CAAD,CAAR,CAAYgO,CAAZ,IAAiBA,CAAjB;AAC/BtP,MAAAA,CAAC,GAAG,2BAAYo2K,QAAZ,CAAJ;AACA,UAAI9mK,CAAJ,EAAO,KAAKhO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB80K,QAAQ,CAAC90K,CAAD,CAAR,CAAYgO,CAAZ,IAAiBA,CAAjB;AAC/B+c,MAAAA,IAAI,CAAC/c,CAAL,GAAStP,CAAC,GAAGsP,CAAb;AACD;AACF,GAbD;AAcD;;AAED,SAASutT,cAAT,CAAwBj+S,CAAxB,EAA2B;AACzB,SAAO,UAASyN,IAAT,EAAe;AACpB,QAAI2sL,MAAM,GAAG3sL,IAAI,CAAC2sL,MAAlB;AACA3sL,IAAAA,IAAI,CAAC/c,CAAL,IAAUsP,CAAV;;AACA,QAAIo6L,MAAJ,EAAY;AACV3sL,MAAAA,IAAI,CAAC5kB,CAAL,GAASuxM,MAAM,CAACvxM,CAAP,GAAWmX,CAAC,GAAGyN,IAAI,CAAC5kB,CAA7B;AACA4kB,MAAAA,IAAI,CAACrG,CAAL,GAASgzL,MAAM,CAAChzL,CAAP,GAAWpH,CAAC,GAAGyN,IAAI,CAACrG,CAA7B;AACD;AACF,GAPD;AAQD;;;;;;;;;AC9Ec,kBAASqG,IAAT,EAAe;AAC5BA,EAAAA,IAAI,CAACs1L,EAAL,GAAUt6M,IAAI,CAACsG,KAAL,CAAW0e,IAAI,CAACs1L,EAAhB,CAAV;AACAt1L,EAAAA,IAAI,CAACu1L,EAAL,GAAUv6M,IAAI,CAACsG,KAAL,CAAW0e,IAAI,CAACu1L,EAAhB,CAAV;AACAv1L,EAAAA,IAAI,CAAC0nF,EAAL,GAAU1sG,IAAI,CAACsG,KAAL,CAAW0e,IAAI,CAAC0nF,EAAhB,CAAV;AACA1nF,EAAAA,IAAI,CAACynF,EAAL,GAAUzsG,IAAI,CAACsG,KAAL,CAAW0e,IAAI,CAACynF,EAAhB,CAAV;AACD;;;;;;;;;ACLc,kBAASklG,MAAT,EAAiB2I,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BD,EAA7B,EAAiC;AAC9C,MAAIshC,KAAK,GAAG4jE,MAAM,CAAC5iC,QAAnB;AAAA,MACI/pJ,IADJ;AAAA,MAEI/qB,CAAC,GAAG,CAAC,CAFT;AAAA,MAGIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAHd;AAAA,MAIIge,CAAC,GAAGo6L,MAAM,CAAC10M,KAAP,IAAgB,CAACyvG,EAAE,GAAG4tG,EAAN,IAAY3I,MAAM,CAAC10M,KAJ3C;;AAMA,SAAO,EAAEhD,CAAF,GAAMkO,CAAb,EAAgB;AACd6c,IAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAACu1L,EAAL,GAAUA,EAA3B,EAA+Bv1L,IAAI,CAACynF,EAAL,GAAUA,EAAzC;AACAznF,IAAAA,IAAI,CAACs1L,EAAL,GAAUA,EAAV,EAAct1L,IAAI,CAAC0nF,EAAL,GAAU4tG,EAAE,IAAIt1L,IAAI,CAAC/nB,KAAL,GAAasa,CAA3C;AACD;AACF;;;;;;;;;ACXD;;AACA;;;;AAEe,oBAAW;AACxB,MAAIwO,EAAE,GAAG,CAAT;AAAA,MACIhH,EAAE,GAAG,CADT;AAAA,MAEIrI,OAAO,GAAG,CAFd;AAAA,MAGIpQ,KAAK,GAAG,KAHZ;;AAKA,WAASqpO,SAAT,CAAmB/xC,IAAnB,EAAyB;AACvB,QAAIz1L,CAAC,GAAGy1L,IAAI,CAAC1tK,MAAL,GAAc,CAAtB;AACA0tK,IAAAA,IAAI,CAAC0c,EAAL,GACA1c,IAAI,CAAC2c,EAAL,GAAU7jM,OADV;AAEAknL,IAAAA,IAAI,CAAClxF,EAAL,GAAU3mF,EAAV;AACA63K,IAAAA,IAAI,CAACnxF,EAAL,GAAU1tF,EAAE,GAAG5W,CAAf;AACAy1L,IAAAA,IAAI,CAACs0H,UAAL,CAAgBuD,YAAY,CAAC12S,EAAD,EAAK5W,CAAL,CAA5B;AACA,QAAI7B,KAAJ,EAAWs3L,IAAI,CAACs0H,UAAL,CAAgBwD,cAAhB;AACX,WAAO93H,IAAP;AACD;;AAED,WAAS63H,YAAT,CAAsB12S,EAAtB,EAA0B5W,CAA1B,EAA6B;AAC3B,WAAO,UAAS6c,IAAT,EAAe;AACpB,UAAIA,IAAI,CAAC+pJ,QAAT,EAAmB;AACjB,2BAAY/pJ,IAAZ,EAAkBA,IAAI,CAACs1L,EAAvB,EAA2Bv7L,EAAE,IAAIiG,IAAI,CAACtX,KAAL,GAAa,CAAjB,CAAF,GAAwBvF,CAAnD,EAAsD6c,IAAI,CAAC0nF,EAA3D,EAA+D3tF,EAAE,IAAIiG,IAAI,CAACtX,KAAL,GAAa,CAAjB,CAAF,GAAwBvF,CAAvF;AACD;;AACD,UAAImyM,EAAE,GAAGt1L,IAAI,CAACs1L,EAAd;AAAA,UACIC,EAAE,GAAGv1L,IAAI,CAACu1L,EADd;AAAA,UAEI7tG,EAAE,GAAG1nF,IAAI,CAAC0nF,EAAL,GAAUh2F,OAFnB;AAAA,UAGI+1F,EAAE,GAAGznF,IAAI,CAACynF,EAAL,GAAU/1F,OAHnB;AAIA,UAAIg2F,EAAE,GAAG4tG,EAAT,EAAaA,EAAE,GAAG5tG,EAAE,GAAG,CAAC4tG,EAAE,GAAG5tG,EAAN,IAAY,CAAtB;AACb,UAAID,EAAE,GAAG8tG,EAAT,EAAaA,EAAE,GAAG9tG,EAAE,GAAG,CAAC8tG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB;AACbznF,MAAAA,IAAI,CAACs1L,EAAL,GAAUA,EAAV;AACAt1L,MAAAA,IAAI,CAACu1L,EAAL,GAAUA,EAAV;AACAv1L,MAAAA,IAAI,CAAC0nF,EAAL,GAAUA,EAAV;AACA1nF,MAAAA,IAAI,CAACynF,EAAL,GAAUA,EAAV;AACD,KAdD;AAeD;;AAEDkjI,EAAAA,SAAS,CAACrpO,KAAV,GAAkB,UAASlG,CAAT,EAAY;AAC5B,WAAOpG,SAAS,CAACT,MAAV,IAAoB+M,KAAK,GAAG,CAAC,CAAClG,CAAV,EAAauvO,SAAjC,IAA8CrpO,KAArD;AACD,GAFD;;AAIAqpO,EAAAA,SAAS,CAACjuO,IAAV,GAAiB,UAAStB,CAAT,EAAY;AAC3B,WAAOpG,SAAS,CAACT,MAAV,IAAoBwsB,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAP,EAAY2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAAnB,EAAwBuvO,SAA5C,IAAyD,CAAC5pN,EAAD,EAAKhH,EAAL,CAAhE;AACD,GAFD;;AAIA4wN,EAAAA,SAAS,CAACj5N,OAAV,GAAoB,UAAStW,CAAT,EAAY;AAC9B,WAAOpG,SAAS,CAACT,MAAV,IAAoBmd,OAAO,GAAG,CAACtW,CAAX,EAAcuvO,SAAlC,IAA+Cj5N,OAAtD;AACD,GAFD;;AAIA,SAAOi5N,SAAP;AACD;;;;;;;;;ACnDD;;AACA;;AAEA,IAAIgmF,OAAO,GAAG;AAACjoT,EAAAA,KAAK,EAAE,CAAC;AAAT,CAAd;AAAA,IACIkoT,SAAS,GAAG,EADhB;;AAGA,SAASC,SAAT,CAAmB/uT,CAAnB,EAAsB;AACpB,SAAOA,CAAC,CAACoG,EAAT;AACD;;AAED,SAAS4oT,eAAT,CAAyBhvT,CAAzB,EAA4B;AAC1B,SAAOA,CAAC,CAACivT,QAAT;AACD;;AAEc,oBAAW;AACxB,MAAI7oT,EAAE,GAAG2oT,SAAT;AAAA,MACIE,QAAQ,GAAGD,eADf;;AAGA,WAASE,QAAT,CAAkB/sT,IAAlB,EAAwB;AACtB,QAAI8kI,KAAK,GAAGh0I,KAAK,CAACuR,IAAN,CAAWrC,IAAX,CAAZ;AAAA,QACId,CAAC,GAAG4lI,KAAK,CAACx0I,MADd;AAAA,QAEIuN,CAFJ;AAAA,QAGI7M,CAHJ;AAAA,QAII2jM,IAJJ;AAAA,QAKI+T,MALJ;AAAA,QAMI3sL,IANJ;AAAA,QAOI2nS,MAPJ;AAAA,QAQIl4K,OARJ;AAAA,QASIwhL,SAAS,GAAG,IAAIx3T,GAAJ,EAThB;;AAWA,SAAKxE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6M,MAAAA,CAAC,GAAGinI,KAAK,CAAC9zI,CAAD,CAAT,EAAc+qB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAL,GAAW,IAAIgjI,WAAJ,CAASn2H,CAAT,CAAhC;;AACA,UAAI,CAAC6lT,MAAM,GAAGz/S,EAAE,CAACpG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAZ,KAA6B,IAA7B,KAAsC0jT,MAAM,IAAI,EAAhD,CAAJ,EAAyD;AACvDl4K,QAAAA,OAAO,GAAGzvH,IAAI,CAAC9X,EAAL,GAAUy/S,MAApB;AACAsJ,QAAAA,SAAS,CAACr5T,GAAV,CAAc63I,OAAd,EAAuBwhL,SAAS,CAAC12T,GAAV,CAAck1I,OAAd,IAAyBmhL,SAAzB,GAAqC5wS,IAA5D;AACD;;AACD,UAAI,CAAC2nS,MAAM,GAAGoJ,QAAQ,CAACjvT,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAlB,KAAmC,IAAnC,KAA4C0jT,MAAM,IAAI,EAAtD,CAAJ,EAA+D;AAC7D3nS,QAAAA,IAAI,CAAC2sL,MAAL,GAAcg7G,MAAd;AACD;AACF;;AAED,SAAK1yT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB+qB,MAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ;;AACA,UAAI0yT,MAAM,GAAG3nS,IAAI,CAAC2sL,MAAlB,EAA0B;AACxBA,QAAAA,MAAM,GAAGskH,SAAS,CAACl5T,GAAV,CAAc4vT,MAAd,CAAT;AACA,YAAI,CAACh7G,MAAL,EAAa,MAAM,IAAIn5M,KAAJ,CAAU,cAAcm0T,MAAxB,CAAN;AACb,YAAIh7G,MAAM,KAAKikH,SAAf,EAA0B,MAAM,IAAIp9T,KAAJ,CAAU,gBAAgBm0T,MAA1B,CAAN;AAC1B,YAAIh7G,MAAM,CAAC5iC,QAAX,EAAqB4iC,MAAM,CAAC5iC,QAAP,CAAgB70K,IAAhB,CAAqB8qB,IAArB,EAArB,KACK2sL,MAAM,CAAC5iC,QAAP,GAAkB,CAAC/pJ,IAAD,CAAlB;AACLA,QAAAA,IAAI,CAAC2sL,MAAL,GAAcA,MAAd;AACD,OAPD,MAOO;AACL,YAAI/T,IAAJ,EAAU,MAAM,IAAIplM,KAAJ,CAAU,gBAAV,CAAN;AACVolM,QAAAA,IAAI,GAAG54K,IAAP;AACD;AACF;;AAED,QAAI,CAAC44K,IAAL,EAAW,MAAM,IAAIplM,KAAJ,CAAU,SAAV,CAAN;AACXolM,IAAAA,IAAI,CAAC+T,MAAL,GAAcgkH,OAAd;AACA/3H,IAAAA,IAAI,CAACs0H,UAAL,CAAgB,UAASltS,IAAT,EAAe;AAAEA,MAAAA,IAAI,CAACtX,KAAL,GAAasX,IAAI,CAAC2sL,MAAL,CAAYjkM,KAAZ,GAAoB,CAAjC;AAAoC,QAAEvF,CAAF;AAAM,KAA3E,EAA6E+pT,UAA7E,CAAwFY,oBAAxF;AACAl1H,IAAAA,IAAI,CAAC+T,MAAL,GAAc,IAAd;AACA,QAAIxpM,CAAC,GAAG,CAAR,EAAW,MAAM,IAAI3P,KAAJ,CAAU,OAAV,CAAN;AAEX,WAAOolM,IAAP;AACD;;AAEDo4H,EAAAA,QAAQ,CAAC9oT,EAAT,GAAc,UAAS9M,CAAT,EAAY;AACxB,WAAOpG,SAAS,CAACT,MAAV,IAAoB2T,EAAE,GAAG,yBAAS9M,CAAT,CAAL,EAAkB41T,QAAtC,IAAkD9oT,EAAzD;AACD,GAFD;;AAIA8oT,EAAAA,QAAQ,CAACD,QAAT,GAAoB,UAAS31T,CAAT,EAAY;AAC9B,WAAOpG,SAAS,CAACT,MAAV,IAAoBw8T,QAAQ,GAAG,yBAAS31T,CAAT,CAAX,EAAwB41T,QAA5C,IAAwDD,QAA/D;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD;;;;;;;;;AC1ED;;AAEA,SAASzE,iBAAT,CAA2BpwT,CAA3B,EAA8B6G,CAA9B,EAAiC;AAC/B,SAAO7G,CAAC,CAACwwM,MAAF,KAAa3pM,CAAC,CAAC2pM,MAAf,GAAwB,CAAxB,GAA4B,CAAnC;AACD,EAED;AACA;AACA;AAEA;AACA;AACA;AACA;;;AACA,SAASukH,QAAT,CAAkB/pT,CAAlB,EAAqB;AACnB,MAAI4iK,QAAQ,GAAG5iK,CAAC,CAAC4iK,QAAjB;AACA,SAAOA,QAAQ,GAAGA,QAAQ,CAAC,CAAD,CAAX,GAAiB5iK,CAAC,CAACxO,CAAlC;AACD,EAED;;;AACA,SAASw4T,SAAT,CAAmBhqT,CAAnB,EAAsB;AACpB,MAAI4iK,QAAQ,GAAG5iK,CAAC,CAAC4iK,QAAjB;AACA,SAAOA,QAAQ,GAAGA,QAAQ,CAACA,QAAQ,CAACx1K,MAAT,GAAkB,CAAnB,CAAX,GAAmC4S,CAAC,CAACxO,CAApD;AACD,EAED;AACA;;;AACA,SAASy4T,WAAT,CAAqBC,EAArB,EAAyBC,EAAzB,EAA6Bv3Q,KAA7B,EAAoC;AAClC,MAAIiyQ,MAAM,GAAGjyQ,KAAK,IAAIu3Q,EAAE,CAACr8T,CAAH,GAAOo8T,EAAE,CAACp8T,CAAd,CAAlB;AACAq8T,EAAAA,EAAE,CAAC5vT,CAAH,IAAQsqT,MAAR;AACAsF,EAAAA,EAAE,CAAC74T,CAAH,IAAQshD,KAAR;AACAs3Q,EAAAA,EAAE,CAAC3vT,CAAH,IAAQsqT,MAAR;AACAsF,EAAAA,EAAE,CAAC5mP,CAAH,IAAQ3wB,KAAR;AACAu3Q,EAAAA,EAAE,CAAC5kO,CAAH,IAAQ3yC,KAAR;AACD,EAED;AACA;AACA;;;AACA,SAASw3Q,aAAT,CAAuBpqT,CAAvB,EAA0B;AACxB,MAAI4yC,KAAK,GAAG,CAAZ;AAAA,MACIiyQ,MAAM,GAAG,CADb;AAAA,MAEIjiJ,QAAQ,GAAG5iK,CAAC,CAAC4iK,QAFjB;AAAA,MAGI90K,CAAC,GAAG80K,QAAQ,CAACx1K,MAHjB;AAAA,MAIIgtD,CAJJ;;AAKA,SAAO,EAAEtsD,CAAF,IAAO,CAAd,EAAiB;AACfssD,IAAAA,CAAC,GAAGwoH,QAAQ,CAAC90K,CAAD,CAAZ;AACAssD,IAAAA,CAAC,CAACmpB,CAAF,IAAO3wB,KAAP;AACAwH,IAAAA,CAAC,CAACmrC,CAAF,IAAO3yC,KAAP;AACAA,IAAAA,KAAK,IAAIwH,CAAC,CAAC9oD,CAAF,IAAOuzT,MAAM,IAAIzqQ,CAAC,CAAC7/C,CAAnB,CAAT;AACD;AACF,EAED;AACA;;;AACA,SAAS8vT,YAAT,CAAsBC,GAAtB,EAA2BtqT,CAA3B,EAA8BgmT,QAA9B,EAAwC;AACtC,SAAOsE,GAAG,CAACt1T,CAAJ,CAAMwwM,MAAN,KAAiBxlM,CAAC,CAACwlM,MAAnB,GAA4B8kH,GAAG,CAACt1T,CAAhC,GAAoCgxT,QAA3C;AACD;;AAED,SAASuE,QAAT,CAAkB1xS,IAAlB,EAAwB/qB,CAAxB,EAA2B;AACzB,OAAK2mB,CAAL,GAASoE,IAAT;AACA,OAAK2sL,MAAL,GAAc,IAAd;AACA,OAAK5iC,QAAL,GAAgB,IAAhB;AACA,OAAKqjF,CAAL,GAAS,IAAT,CAJyB,CAIV;;AACf,OAAKjxP,CAAL,GAAS,IAAT,CALyB,CAKV;;AACf,OAAKuuE,CAAL,GAAS,CAAT,CANyB,CAMb;;AACZ,OAAKgiB,CAAL,GAAS,CAAT,CAPyB,CAOb;;AACZ,OAAKhrF,CAAL,GAAS,CAAT,CARyB,CAQb;;AACZ,OAAKjJ,CAAL,GAAS,CAAT,CATyB,CASb;;AACZ,OAAKE,CAAL,GAAS,IAAT,CAVyB,CAUV;;AACf,OAAK1D,CAAL,GAASA,CAAT,CAXyB,CAWb;AACb;;AAEDy8T,QAAQ,CAACr8T,SAAT,GAAqB2C,MAAM,CAAC60L,MAAP,CAAc50D,YAAK5iI,SAAnB,CAArB;;AAEA,SAASs8T,QAAT,CAAkB/4H,IAAlB,EAAwB;AACtB,MAAIQ,IAAI,GAAG,IAAIs4H,QAAJ,CAAa94H,IAAb,EAAmB,CAAnB,CAAX;AAAA,MACI54K,IADJ;AAAA,MAEI+oH,KAAK,GAAG,CAACqwD,IAAD,CAFZ;AAAA,MAGIxiB,KAHJ;AAAA,MAII7M,QAJJ;AAAA,MAKI90K,CALJ;AAAA,MAMIkO,CANJ;;AAQA,SAAO6c,IAAI,GAAG+oH,KAAK,CAAC1pH,GAAN,EAAd,EAA2B;AACzB,QAAI0qJ,QAAQ,GAAG/pJ,IAAI,CAACpE,CAAL,CAAOmuJ,QAAtB,EAAgC;AAC9B/pJ,MAAAA,IAAI,CAAC+pJ,QAAL,GAAgB,IAAIh1K,KAAJ,CAAUoO,CAAC,GAAG4mK,QAAQ,CAACx1K,MAAvB,CAAhB;;AACA,WAAKU,CAAC,GAAGkO,CAAC,GAAG,CAAb,EAAgBlO,CAAC,IAAI,CAArB,EAAwB,EAAEA,CAA1B,EAA6B;AAC3B8zI,QAAAA,KAAK,CAAC7zI,IAAN,CAAW0hL,KAAK,GAAG52J,IAAI,CAAC+pJ,QAAL,CAAc90K,CAAd,IAAmB,IAAIy8T,QAAJ,CAAa3nJ,QAAQ,CAAC90K,CAAD,CAArB,EAA0BA,CAA1B,CAAtC;AACA2hL,QAAAA,KAAK,CAAC+1B,MAAN,GAAe3sL,IAAf;AACD;AACF;AACF;;AAED,GAACo5K,IAAI,CAACuT,MAAL,GAAc,IAAI+kH,QAAJ,CAAa,IAAb,EAAmB,CAAnB,CAAf,EAAsC3nJ,QAAtC,GAAiD,CAACqvB,IAAD,CAAjD;AACA,SAAOA,IAAP;AACD,EAED;;;AACe,oBAAW;AACxB,MAAIutF,UAAU,GAAG4lC,iBAAjB;AAAA,MACIxrS,EAAE,GAAG,CADT;AAAA,MAEIhH,EAAE,GAAG,CAFT;AAAA,MAGI+yS,QAAQ,GAAG,IAHf;;AAKA,WAAS1zH,IAAT,CAAcR,IAAd,EAAoB;AAClB,QAAIjgM,CAAC,GAAGg5T,QAAQ,CAAC/4H,IAAD,CAAhB,CADkB,CAGlB;;AACAjgM,IAAAA,CAAC,CAACs0T,SAAF,CAAY2E,SAAZ,GAAwBj5T,CAAC,CAACg0M,MAAF,CAASjgH,CAAT,GAAa,CAAC/zF,CAAC,CAAC+xE,CAAxC;AACA/xE,IAAAA,CAAC,CAACu0T,UAAF,CAAa2E,UAAb,EALkB,CAOlB;;AACA,QAAI/E,QAAJ,EAAcl0H,IAAI,CAACs0H,UAAL,CAAgB4E,QAAhB,EAAd,CAEA;AACA;AAHA,SAIK;AACH,YAAI1pR,IAAI,GAAGwwJ,IAAX;AAAA,YACIvwJ,KAAK,GAAGuwJ,IADZ;AAAA,YAEIzwJ,MAAM,GAAGywJ,IAFb;AAGAA,QAAAA,IAAI,CAACs0H,UAAL,CAAgB,UAASltS,IAAT,EAAe;AAC7B,cAAIA,IAAI,CAAC5kB,CAAL,GAASgtC,IAAI,CAAChtC,CAAlB,EAAqBgtC,IAAI,GAAGpoB,IAAP;AACrB,cAAIA,IAAI,CAAC5kB,CAAL,GAASitC,KAAK,CAACjtC,CAAnB,EAAsBitC,KAAK,GAAGroB,IAAR;AACtB,cAAIA,IAAI,CAACtX,KAAL,GAAay/B,MAAM,CAACz/B,KAAxB,EAA+By/B,MAAM,GAAGnoB,IAAT;AAChC,SAJD;AAKA,YAAIvnB,CAAC,GAAG2vC,IAAI,KAAKC,KAAT,GAAiB,CAAjB,GAAqBs+O,UAAU,CAACv+O,IAAD,EAAOC,KAAP,CAAV,GAA0B,CAAvD;AAAA,YACIytE,EAAE,GAAGr9G,CAAC,GAAG2vC,IAAI,CAAChtC,CADlB;AAAA,YAEIo6M,EAAE,GAAGz0L,EAAE,IAAIsnB,KAAK,CAACjtC,CAAN,GAAU3C,CAAV,GAAcq9G,EAAlB,CAFX;AAAA,YAGI2/F,EAAE,GAAG17L,EAAE,IAAIouB,MAAM,CAACz/B,KAAP,IAAgB,CAApB,CAHX;AAIAkwL,QAAAA,IAAI,CAACs0H,UAAL,CAAgB,UAASltS,IAAT,EAAe;AAC7BA,UAAAA,IAAI,CAAC5kB,CAAL,GAAS,CAAC4kB,IAAI,CAAC5kB,CAAL,GAAS06G,EAAV,IAAgB0/F,EAAzB;AACAx1L,UAAAA,IAAI,CAACrG,CAAL,GAASqG,IAAI,CAACtX,KAAL,GAAa+sM,EAAtB;AACD,SAHD;AAID;AAED,WAAO7c,IAAP;AACD,GAtCuB,CAwCxB;AACA;AACA;AACA;;;AACA,WAASg5H,SAAT,CAAmBzqT,CAAnB,EAAsB;AACpB,QAAI4iK,QAAQ,GAAG5iK,CAAC,CAAC4iK,QAAjB;AAAA,QACIgoJ,QAAQ,GAAG5qT,CAAC,CAACwlM,MAAF,CAAS5iC,QADxB;AAAA,QAEIxoH,CAAC,GAAGp6C,CAAC,CAAClS,CAAF,GAAM88T,QAAQ,CAAC5qT,CAAC,CAAClS,CAAF,GAAM,CAAP,CAAd,GAA0B,IAFlC;;AAGA,QAAI80K,QAAJ,EAAc;AACZwnJ,MAAAA,aAAa,CAACpqT,CAAD,CAAb;AACA,UAAI6qT,QAAQ,GAAG,CAACjoJ,QAAQ,CAAC,CAAD,CAAR,CAAYr/F,CAAZ,GAAgBq/F,QAAQ,CAACA,QAAQ,CAACx1K,MAAT,GAAkB,CAAnB,CAAR,CAA8Bm2E,CAA/C,IAAoD,CAAnE;;AACA,UAAInpB,CAAJ,EAAO;AACLp6C,QAAAA,CAAC,CAACujE,CAAF,GAAMnpB,CAAC,CAACmpB,CAAF,GAAMi8M,UAAU,CAACx/Q,CAAC,CAACyU,CAAH,EAAM2lC,CAAC,CAAC3lC,CAAR,CAAtB;AACAzU,QAAAA,CAAC,CAACulF,CAAF,GAAMvlF,CAAC,CAACujE,CAAF,GAAMsnP,QAAZ;AACD,OAHD,MAGO;AACL7qT,QAAAA,CAAC,CAACujE,CAAF,GAAMsnP,QAAN;AACD;AACF,KATD,MASO,IAAIzwQ,CAAJ,EAAO;AACZp6C,MAAAA,CAAC,CAACujE,CAAF,GAAMnpB,CAAC,CAACmpB,CAAF,GAAMi8M,UAAU,CAACx/Q,CAAC,CAACyU,CAAH,EAAM2lC,CAAC,CAAC3lC,CAAR,CAAtB;AACD;;AACDzU,IAAAA,CAAC,CAACwlM,MAAF,CAASygD,CAAT,GAAa6kE,SAAS,CAAC9qT,CAAD,EAAIo6C,CAAJ,EAAOp6C,CAAC,CAACwlM,MAAF,CAASygD,CAAT,IAAc2kE,QAAQ,CAAC,CAAD,CAA7B,CAAtB;AACD,GA7DuB,CA+DxB;;;AACA,WAASF,UAAT,CAAoB1qT,CAApB,EAAuB;AACrBA,IAAAA,CAAC,CAACyU,CAAF,CAAIxgB,CAAJ,GAAQ+L,CAAC,CAACujE,CAAF,GAAMvjE,CAAC,CAACwlM,MAAF,CAASjgH,CAAvB;AACAvlF,IAAAA,CAAC,CAACulF,CAAF,IAAOvlF,CAAC,CAACwlM,MAAF,CAASjgH,CAAhB;AACD,GAnEuB,CAqExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,WAASulO,SAAT,CAAmB9qT,CAAnB,EAAsBo6C,CAAtB,EAAyB4rQ,QAAzB,EAAmC;AACjC,QAAI5rQ,CAAJ,EAAO;AACL,UAAI2wQ,GAAG,GAAG/qT,CAAV;AAAA,UACIgrT,GAAG,GAAGhrT,CADV;AAAA,UAEIsqT,GAAG,GAAGlwQ,CAFV;AAAA,UAGI6wQ,GAAG,GAAGF,GAAG,CAACvlH,MAAJ,CAAW5iC,QAAX,CAAoB,CAApB,CAHV;AAAA,UAIIsoJ,GAAG,GAAGH,GAAG,CAACxlO,CAJd;AAAA,UAKI4lO,GAAG,GAAGH,GAAG,CAACzlO,CALd;AAAA,UAMIq/N,GAAG,GAAG0F,GAAG,CAAC/kO,CANd;AAAA,UAOI6lO,GAAG,GAAGH,GAAG,CAAC1lO,CAPd;AAAA,UAQI3yC,KARJ;;AASA,aAAO03Q,GAAG,GAAGN,SAAS,CAACM,GAAD,CAAf,EAAsBS,GAAG,GAAGhB,QAAQ,CAACgB,GAAD,CAApC,EAA2CT,GAAG,IAAIS,GAAzD,EAA8D;AAC5DE,QAAAA,GAAG,GAAGlB,QAAQ,CAACkB,GAAD,CAAd;AACAD,QAAAA,GAAG,GAAGhB,SAAS,CAACgB,GAAD,CAAf;AACAA,QAAAA,GAAG,CAACh2T,CAAJ,GAAQgL,CAAR;AACA4yC,QAAAA,KAAK,GAAG03Q,GAAG,CAAC/mP,CAAJ,GAAQqhP,GAAR,GAAcmG,GAAG,CAACxnP,CAAlB,GAAsB2nP,GAAtB,GAA4B1rC,UAAU,CAAC8qC,GAAG,CAAC71S,CAAL,EAAQs2S,GAAG,CAACt2S,CAAZ,CAA9C;;AACA,YAAIm+B,KAAK,GAAG,CAAZ,EAAe;AACbq3Q,UAAAA,WAAW,CAACI,YAAY,CAACC,GAAD,EAAMtqT,CAAN,EAASgmT,QAAT,CAAb,EAAiChmT,CAAjC,EAAoC4yC,KAApC,CAAX;AACAs4Q,UAAAA,GAAG,IAAIt4Q,KAAP;AACAu4Q,UAAAA,GAAG,IAAIv4Q,KAAP;AACD;;AACDgyQ,QAAAA,GAAG,IAAI0F,GAAG,CAAC/kO,CAAX;AACA2lO,QAAAA,GAAG,IAAIH,GAAG,CAACxlO,CAAX;AACA6lO,QAAAA,GAAG,IAAIH,GAAG,CAAC1lO,CAAX;AACA4lO,QAAAA,GAAG,IAAIH,GAAG,CAACzlO,CAAX;AACD;;AACD,UAAI+kO,GAAG,IAAI,CAACN,SAAS,CAACgB,GAAD,CAArB,EAA4B;AAC1BA,QAAAA,GAAG,CAACx5T,CAAJ,GAAQ84T,GAAR;AACAU,QAAAA,GAAG,CAACzlO,CAAJ,IAASq/N,GAAG,GAAGuG,GAAf;AACD;;AACD,UAAIJ,GAAG,IAAI,CAAChB,QAAQ,CAACkB,GAAD,CAApB,EAA2B;AACzBA,QAAAA,GAAG,CAACz5T,CAAJ,GAAQu5T,GAAR;AACAE,QAAAA,GAAG,CAAC1lO,CAAJ,IAAS2lO,GAAG,GAAGE,GAAf;AACApF,QAAAA,QAAQ,GAAGhmT,CAAX;AACD;AACF;;AACD,WAAOgmT,QAAP;AACD;;AAED,WAAS2E,QAAT,CAAkB9xS,IAAlB,EAAwB;AACtBA,IAAAA,IAAI,CAAC5kB,CAAL,IAAU2lB,EAAV;AACAf,IAAAA,IAAI,CAACrG,CAAL,GAASqG,IAAI,CAACtX,KAAL,GAAaqR,EAAtB;AACD;;AAEDq/K,EAAAA,IAAI,CAACutF,UAAL,GAAkB,UAASvrR,CAAT,EAAY;AAC5B,WAAOpG,SAAS,CAACT,MAAV,IAAoBoyR,UAAU,GAAGvrR,CAAb,EAAgBg+L,IAApC,IAA4CutF,UAAnD;AACD,GAFD;;AAIAvtF,EAAAA,IAAI,CAAC18L,IAAL,GAAY,UAAStB,CAAT,EAAY;AACtB,WAAOpG,SAAS,CAACT,MAAV,IAAoBu4T,QAAQ,GAAG,KAAX,EAAkB/rS,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAzB,EAA8B2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAArC,EAA0Cg+L,IAA9D,IAAuE0zH,QAAQ,GAAG,IAAH,GAAU,CAAC/rS,EAAD,EAAKhH,EAAL,CAAhG;AACD,GAFD;;AAIAq/K,EAAAA,IAAI,CAAC0zH,QAAL,GAAgB,UAAS1xT,CAAT,EAAY;AAC1B,WAAOpG,SAAS,CAACT,MAAV,IAAoBu4T,QAAQ,GAAG,IAAX,EAAiB/rS,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAxB,EAA6B2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAApC,EAAyCg+L,IAA7D,IAAsE0zH,QAAQ,GAAG,CAAC/rS,EAAD,EAAKhH,EAAL,CAAH,GAAc,IAAnG;AACD,GAFD;;AAIA,SAAOq/K,IAAP;AACD;;;;;;;;;AC5Oc,kBAASuT,MAAT,EAAiB2I,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BD,EAA7B,EAAiC;AAC9C,MAAIshC,KAAK,GAAG4jE,MAAM,CAAC5iC,QAAnB;AAAA,MACI/pJ,IADJ;AAAA,MAEI/qB,CAAC,GAAG,CAAC,CAFT;AAAA,MAGIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAHd;AAAA,MAIIge,CAAC,GAAGo6L,MAAM,CAAC10M,KAAP,IAAgB,CAACwvG,EAAE,GAAG8tG,EAAN,IAAY5I,MAAM,CAAC10M,KAJ3C;;AAMA,SAAO,EAAEhD,CAAF,GAAMkO,CAAb,EAAgB;AACd6c,IAAAA,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAZ,EAAiB+qB,IAAI,CAACs1L,EAAL,GAAUA,EAA3B,EAA+Bt1L,IAAI,CAAC0nF,EAAL,GAAUA,EAAzC;AACA1nF,IAAAA,IAAI,CAACu1L,EAAL,GAAUA,EAAV,EAAcv1L,IAAI,CAACynF,EAAL,GAAU8tG,EAAE,IAAIv1L,IAAI,CAAC/nB,KAAL,GAAasa,CAA3C;AACD;AACF;;;;;;;;;;ACXD;;AACA;;;;AAEO,IAAI4/Q,GAAG,GAAG,CAAC,IAAIn3R,IAAI,CAACqC,IAAL,CAAU,CAAV,CAAL,IAAqB,CAA/B;;;AAEA,SAASm1T,aAAT,CAAuB/2C,KAAvB,EAA8B9uE,MAA9B,EAAsC2I,EAAtC,EAA0CC,EAA1C,EAA8C7tG,EAA9C,EAAkDD,EAAlD,EAAsD;AAC3D,MAAIj/F,IAAI,GAAG,EAAX;AAAA,MACIugI,KAAK,GAAG4jE,MAAM,CAAC5iC,QADnB;AAAA,MAEInkK,GAFJ;AAAA,MAGIq5Q,SAHJ;AAAA,MAIItpL,EAAE,GAAG,CAJT;AAAA,MAKI23G,EAAE,GAAG,CALT;AAAA,MAMInqM,CAAC,GAAG4lI,KAAK,CAACx0I,MANd;AAAA,MAOIwsB,EAPJ;AAAA,MAOQhH,EAPR;AAAA,MAQI9hB,KAAK,GAAG00M,MAAM,CAAC10M,KARnB;AAAA,MASIw6T,QATJ;AAAA,MAUI5kM,QAVJ;AAAA,MAWI96B,QAXJ;AAAA,MAYI2/N,QAZJ;AAAA,MAaIC,QAbJ;AAAA,MAcIpkT,KAdJ;AAAA,MAeI+C,IAfJ;;AAiBA,SAAOqkF,EAAE,GAAGxyF,CAAZ,EAAe;AACb4d,IAAAA,EAAE,GAAG2mF,EAAE,GAAG4tG,EAAV,EAAcv7L,EAAE,GAAG0tF,EAAE,GAAG8tG,EAAxB,CADa,CAGb;;AACA,OAAGk9G,QAAQ,GAAG1pL,KAAK,CAACukE,EAAE,EAAH,CAAL,CAAYr1M,KAAvB,CAAH,QAAwC,CAACw6T,QAAD,IAAanlH,EAAE,GAAGnqM,CAA1D;;AACA0qH,IAAAA,QAAQ,GAAG96B,QAAQ,GAAG0/N,QAAtB;AACAlkT,IAAAA,KAAK,GAAGvT,IAAI,CAACK,GAAL,CAAS0e,EAAE,GAAGgH,EAAd,EAAkBA,EAAE,GAAGhH,EAAvB,KAA8B9hB,KAAK,GAAGwjR,KAAtC,CAAR;AACAnqQ,IAAAA,IAAI,GAAGmhT,QAAQ,GAAGA,QAAX,GAAsBlkT,KAA7B;AACAokT,IAAAA,QAAQ,GAAG33T,IAAI,CAACK,GAAL,CAAS03F,QAAQ,GAAGzhF,IAApB,EAA0BA,IAAI,GAAGu8G,QAAjC,CAAX,CARa,CAUb;;AACA,WAAOy/E,EAAE,GAAGnqM,CAAZ,EAAe,EAAEmqM,EAAjB,EAAqB;AACnBmlH,MAAAA,QAAQ,IAAIxzC,SAAS,GAAGl2I,KAAK,CAACukE,EAAD,CAAL,CAAUr1M,KAAlC;AACA,UAAIgnR,SAAS,GAAGpxJ,QAAhB,EAA0BA,QAAQ,GAAGoxJ,SAAX;AAC1B,UAAIA,SAAS,GAAGlsL,QAAhB,EAA0BA,QAAQ,GAAGksL,SAAX;AAC1B3tQ,MAAAA,IAAI,GAAGmhT,QAAQ,GAAGA,QAAX,GAAsBlkT,KAA7B;AACAmkT,MAAAA,QAAQ,GAAG13T,IAAI,CAACK,GAAL,CAAS03F,QAAQ,GAAGzhF,IAApB,EAA0BA,IAAI,GAAGu8G,QAAjC,CAAX;;AACA,UAAI6kM,QAAQ,GAAGC,QAAf,EAAyB;AAAEF,QAAAA,QAAQ,IAAIxzC,SAAZ;AAAuB;AAAQ;;AAC1D0zC,MAAAA,QAAQ,GAAGD,QAAX;AACD,KAnBY,CAqBb;;;AACAlqT,IAAAA,IAAI,CAACtT,IAAL,CAAU0Q,GAAG,GAAG;AAAC3N,MAAAA,KAAK,EAAEw6T,QAAR;AAAkBG,MAAAA,IAAI,EAAE7xS,EAAE,GAAGhH,EAA7B;AAAiCgwJ,MAAAA,QAAQ,EAAEhhC,KAAK,CAACzqI,KAAN,CAAYq3F,EAAZ,EAAgB23G,EAAhB;AAA3C,KAAhB;AACA,QAAI1nM,GAAG,CAACgtT,IAAR,EAAc,mBAAYhtT,GAAZ,EAAiB0vM,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BzvG,KAAK,GAAGs9M,EAAE,IAAIx7L,EAAE,GAAG04S,QAAL,GAAgBx6T,KAAzB,GAAiCwvG,EAAnE,EAAd,KACK,oBAAa7hG,GAAb,EAAkB0vM,EAAlB,EAAsBC,EAAtB,EAA0Bt9M,KAAK,GAAGq9M,EAAE,IAAIv0L,EAAE,GAAG0xS,QAAL,GAAgBx6T,KAAzB,GAAiCyvG,EAAhE,EAAoED,EAApE;AACLxvG,IAAAA,KAAK,IAAIw6T,QAAT,EAAmB98N,EAAE,GAAG23G,EAAxB;AACD;;AAED,SAAO9kM,IAAP;AACD;;eAEe,SAASqzO,MAAT,CAAgB4/B,KAAhB,EAAuB;AAErC,WAASo3C,QAAT,CAAkBlmH,MAAlB,EAA0B2I,EAA1B,EAA8BC,EAA9B,EAAkC7tG,EAAlC,EAAsCD,EAAtC,EAA0C;AACxC+qN,IAAAA,aAAa,CAAC/2C,KAAD,EAAQ9uE,MAAR,EAAgB2I,EAAhB,EAAoBC,EAApB,EAAwB7tG,EAAxB,EAA4BD,EAA5B,CAAb;AACD;;AAEDorN,EAAAA,QAAQ,CAACp3C,KAAT,GAAiB,UAASrgR,CAAT,EAAY;AAC3B,WAAOygP,MAAM,CAAC,CAACzgP,CAAC,GAAG,CAACA,CAAN,IAAW,CAAX,GAAeA,CAAf,GAAmB,CAApB,CAAb;AACD,GAFD;;AAIA,SAAOy3T,QAAP;AACD,CAXc,CAWZ1gC,GAXY;;;;;;;;;;;ACtDf;;AACA;;AACA;;AACA;;;;;;;;AAEe,oBAAW;AACxB,MAAI3jP,IAAI,GAAGqkR,iBAAX;AAAA,MACIvxT,KAAK,GAAG,KADZ;AAAA,MAEIyf,EAAE,GAAG,CAFT;AAAA,MAGIhH,EAAE,GAAG,CAHT;AAAA,MAII+4S,YAAY,GAAG,CAAC,CAAD,CAJnB;AAAA,MAKI3yE,YAAY,GAAGiwE,sBALnB;AAAA,MAMI2C,UAAU,GAAG3C,sBANjB;AAAA,MAOI4C,YAAY,GAAG5C,sBAPnB;AAAA,MAQI6C,aAAa,GAAG7C,sBARpB;AAAA,MASI8C,WAAW,GAAG9C,sBATlB;;AAWA,WAAS+C,OAAT,CAAiBv6H,IAAjB,EAAuB;AACrBA,IAAAA,IAAI,CAAC0c,EAAL,GACA1c,IAAI,CAAC2c,EAAL,GAAU,CADV;AAEA3c,IAAAA,IAAI,CAAClxF,EAAL,GAAU3mF,EAAV;AACA63K,IAAAA,IAAI,CAACnxF,EAAL,GAAU1tF,EAAV;AACA6+K,IAAAA,IAAI,CAACs0H,UAAL,CAAgBuD,YAAhB;AACAqC,IAAAA,YAAY,GAAG,CAAC,CAAD,CAAf;AACA,QAAIxxT,KAAJ,EAAWs3L,IAAI,CAACs0H,UAAL,CAAgBwD,cAAhB;AACX,WAAO93H,IAAP;AACD;;AAED,WAAS63H,YAAT,CAAsBzwS,IAAtB,EAA4B;AAC1B,QAAIuZ,CAAC,GAAGu5R,YAAY,CAAC9yS,IAAI,CAACtX,KAAN,CAApB;AAAA,QACI4sM,EAAE,GAAGt1L,IAAI,CAACs1L,EAAL,GAAU/7K,CADnB;AAAA,QAEIg8K,EAAE,GAAGv1L,IAAI,CAACu1L,EAAL,GAAUh8K,CAFnB;AAAA,QAGImuE,EAAE,GAAG1nF,IAAI,CAAC0nF,EAAL,GAAUnuE,CAHnB;AAAA,QAIIkuE,EAAE,GAAGznF,IAAI,CAACynF,EAAL,GAAUluE,CAJnB;AAKA,QAAImuE,EAAE,GAAG4tG,EAAT,EAAaA,EAAE,GAAG5tG,EAAE,GAAG,CAAC4tG,EAAE,GAAG5tG,EAAN,IAAY,CAAtB;AACb,QAAID,EAAE,GAAG8tG,EAAT,EAAaA,EAAE,GAAG9tG,EAAE,GAAG,CAAC8tG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB;AACbznF,IAAAA,IAAI,CAACs1L,EAAL,GAAUA,EAAV;AACAt1L,IAAAA,IAAI,CAACu1L,EAAL,GAAUA,EAAV;AACAv1L,IAAAA,IAAI,CAAC0nF,EAAL,GAAUA,EAAV;AACA1nF,IAAAA,IAAI,CAACynF,EAAL,GAAUA,EAAV;;AACA,QAAIznF,IAAI,CAAC+pJ,QAAT,EAAmB;AACjBxwI,MAAAA,CAAC,GAAGu5R,YAAY,CAAC9yS,IAAI,CAACtX,KAAL,GAAa,CAAd,CAAZ,GAA+By3O,YAAY,CAACngO,IAAD,CAAZ,GAAqB,CAAxD;AACAs1L,MAAAA,EAAE,IAAI49G,WAAW,CAAClzS,IAAD,CAAX,GAAoBuZ,CAA1B;AACAg8K,MAAAA,EAAE,IAAIw9G,UAAU,CAAC/yS,IAAD,CAAV,GAAmBuZ,CAAzB;AACAmuE,MAAAA,EAAE,IAAIsrN,YAAY,CAAChzS,IAAD,CAAZ,GAAqBuZ,CAA3B;AACAkuE,MAAAA,EAAE,IAAIwrN,aAAa,CAACjzS,IAAD,CAAb,GAAsBuZ,CAA5B;AACA,UAAImuE,EAAE,GAAG4tG,EAAT,EAAaA,EAAE,GAAG5tG,EAAE,GAAG,CAAC4tG,EAAE,GAAG5tG,EAAN,IAAY,CAAtB;AACb,UAAID,EAAE,GAAG8tG,EAAT,EAAaA,EAAE,GAAG9tG,EAAE,GAAG,CAAC8tG,EAAE,GAAG9tG,EAAN,IAAY,CAAtB;AACbj5D,MAAAA,IAAI,CAACxuB,IAAD,EAAOs1L,EAAP,EAAWC,EAAX,EAAe7tG,EAAf,EAAmBD,EAAnB,CAAJ;AACD;AACF;;AAED0rN,EAAAA,OAAO,CAAC7xT,KAAR,GAAgB,UAASlG,CAAT,EAAY;AAC1B,WAAOpG,SAAS,CAACT,MAAV,IAAoB+M,KAAK,GAAG,CAAC,CAAClG,CAAV,EAAa+3T,OAAjC,IAA4C7xT,KAAnD;AACD,GAFD;;AAIA6xT,EAAAA,OAAO,CAACz2T,IAAR,GAAe,UAAStB,CAAT,EAAY;AACzB,WAAOpG,SAAS,CAACT,MAAV,IAAoBwsB,EAAE,GAAG,CAAC3lB,CAAC,CAAC,CAAD,CAAP,EAAY2e,EAAE,GAAG,CAAC3e,CAAC,CAAC,CAAD,CAAnB,EAAwB+3T,OAA5C,IAAuD,CAACpyS,EAAD,EAAKhH,EAAL,CAA9D;AACD,GAFD;;AAIAo5S,EAAAA,OAAO,CAAC3kR,IAAR,GAAe,UAASpzC,CAAT,EAAY;AACzB,WAAOpG,SAAS,CAACT,MAAV,IAAoBi6C,IAAI,GAAG,yBAASpzC,CAAT,CAAP,EAAoB+3T,OAAxC,IAAmD3kR,IAA1D;AACD,GAFD;;AAIA2kR,EAAAA,OAAO,CAACzhT,OAAR,GAAkB,UAAStW,CAAT,EAAY;AAC5B,WAAOpG,SAAS,CAACT,MAAV,GAAmB4+T,OAAO,CAAChzE,YAAR,CAAqB/kP,CAArB,EAAwBglP,YAAxB,CAAqChlP,CAArC,CAAnB,GAA6D+3T,OAAO,CAAChzE,YAAR,EAApE;AACD,GAFD;;AAIAgzE,EAAAA,OAAO,CAAChzE,YAAR,GAAuB,UAAS/kP,CAAT,EAAY;AACjC,WAAOpG,SAAS,CAACT,MAAV,IAAoB4rP,YAAY,GAAG,OAAO/kP,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7C,EAA2D+3T,OAA/E,IAA0FhzE,YAAjG;AACD,GAFD;;AAIAgzE,EAAAA,OAAO,CAAC/yE,YAAR,GAAuB,UAAShlP,CAAT,EAAY;AACjC,WAAOpG,SAAS,CAACT,MAAV,GAAmB4+T,OAAO,CAACJ,UAAR,CAAmB33T,CAAnB,EAAsB43T,YAAtB,CAAmC53T,CAAnC,EAAsC63T,aAAtC,CAAoD73T,CAApD,EAAuD83T,WAAvD,CAAmE93T,CAAnE,CAAnB,GAA2F+3T,OAAO,CAACJ,UAAR,EAAlG;AACD,GAFD;;AAIAI,EAAAA,OAAO,CAACJ,UAAR,GAAqB,UAAS33T,CAAT,EAAY;AAC/B,WAAOpG,SAAS,CAACT,MAAV,IAAoBw+T,UAAU,GAAG,OAAO33T,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyD+3T,OAA7E,IAAwFJ,UAA/F;AACD,GAFD;;AAIAI,EAAAA,OAAO,CAACH,YAAR,GAAuB,UAAS53T,CAAT,EAAY;AACjC,WAAOpG,SAAS,CAACT,MAAV,IAAoBy+T,YAAY,GAAG,OAAO53T,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7C,EAA2D+3T,OAA/E,IAA0FH,YAAjG;AACD,GAFD;;AAIAG,EAAAA,OAAO,CAACF,aAAR,GAAwB,UAAS73T,CAAT,EAAY;AAClC,WAAOpG,SAAS,CAACT,MAAV,IAAoB0+T,aAAa,GAAG,OAAO73T,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA9C,EAA4D+3T,OAAhF,IAA2FF,aAAlG;AACD,GAFD;;AAIAE,EAAAA,OAAO,CAACD,WAAR,GAAsB,UAAS93T,CAAT,EAAY;AAChC,WAAOpG,SAAS,CAACT,MAAV,IAAoB2+T,WAAW,GAAG,OAAO93T,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0D+3T,OAA9E,IAAyFD,WAAhG;AACD,GAFD;;AAIA,SAAOC,OAAP;AACD;;;;;;;;;AC7Fc,kBAASxmH,MAAT,EAAiB2I,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BD,EAA7B,EAAiC;AAC9C,MAAIshC,KAAK,GAAG4jE,MAAM,CAAC5iC,QAAnB;AAAA,MACI90K,CADJ;AAAA,MACOkO,CAAC,GAAG4lI,KAAK,CAACx0I,MADjB;AAAA,MAEIiH,GAFJ;AAAA,MAES+jP,IAAI,GAAG,IAAIxqP,KAAJ,CAAUoO,CAAC,GAAG,CAAd,CAFhB;;AAIA,OAAKo8O,IAAI,CAAC,CAAD,CAAJ,GAAU/jP,GAAG,GAAGvG,CAAC,GAAG,CAAzB,EAA4BA,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtCsqP,IAAAA,IAAI,CAACtqP,CAAC,GAAG,CAAL,CAAJ,GAAcuG,GAAG,IAAIutI,KAAK,CAAC9zI,CAAD,CAAL,CAASgD,KAA9B;AACD;;AAED0yO,EAAAA,SAAS,CAAC,CAAD,EAAIxnO,CAAJ,EAAOwpM,MAAM,CAAC10M,KAAd,EAAqBq9M,EAArB,EAAyBC,EAAzB,EAA6B7tG,EAA7B,EAAiCD,EAAjC,CAAT;;AAEA,WAASkjI,SAAT,CAAmB11O,CAAnB,EAAsBiK,CAAtB,EAAyBjH,KAAzB,EAAgCq9M,EAAhC,EAAoCC,EAApC,EAAwC7tG,EAAxC,EAA4CD,EAA5C,EAAgD;AAC9C,QAAIxyG,CAAC,IAAIiK,CAAC,GAAG,CAAb,EAAgB;AACd,UAAI8gB,IAAI,GAAG+oH,KAAK,CAAC9zI,CAAD,CAAhB;AACA+qB,MAAAA,IAAI,CAACs1L,EAAL,GAAUA,EAAV,EAAct1L,IAAI,CAACu1L,EAAL,GAAUA,EAAxB;AACAv1L,MAAAA,IAAI,CAAC0nF,EAAL,GAAUA,EAAV,EAAc1nF,IAAI,CAACynF,EAAL,GAAUA,EAAxB;AACA;AACD;;AAED,QAAI2rN,WAAW,GAAG7zE,IAAI,CAACtqP,CAAD,CAAtB;AAAA,QACIo+T,WAAW,GAAIp7T,KAAK,GAAG,CAAT,GAAcm7T,WADhC;AAAA,QAEI7gT,CAAC,GAAGtd,CAAC,GAAG,CAFZ;AAAA,QAGI22M,EAAE,GAAG1sM,CAAC,GAAG,CAHb;;AAKA,WAAOqT,CAAC,GAAGq5L,EAAX,EAAe;AACb,UAAI2M,GAAG,GAAGhmM,CAAC,GAAGq5L,EAAJ,KAAW,CAArB;AACA,UAAI2zC,IAAI,CAAChnC,GAAD,CAAJ,GAAY86G,WAAhB,EAA6B9gT,CAAC,GAAGgmM,GAAG,GAAG,CAAV,CAA7B,KACK3M,EAAE,GAAG2M,GAAL;AACN;;AAED,QAAK86G,WAAW,GAAG9zE,IAAI,CAAChtO,CAAC,GAAG,CAAL,CAAnB,GAA+BgtO,IAAI,CAAChtO,CAAD,CAAJ,GAAU8gT,WAAzC,IAAyDp+T,CAAC,GAAG,CAAJ,GAAQsd,CAArE,EAAwE,EAAEA,CAAF;AAExE,QAAI+gT,SAAS,GAAG/zE,IAAI,CAAChtO,CAAD,CAAJ,GAAU6gT,WAA1B;AAAA,QACIG,UAAU,GAAGt7T,KAAK,GAAGq7T,SADzB;;AAGA,QAAK5rN,EAAE,GAAG4tG,EAAN,GAAa7tG,EAAE,GAAG8tG,EAAtB,EAA2B;AACzB,UAAI4tB,EAAE,GAAGlrO,KAAK,GAAG,CAACq9M,EAAE,GAAGi+G,UAAL,GAAkB7rN,EAAE,GAAG4rN,SAAxB,IAAqCr7T,KAAxC,GAAgDyvG,EAA9D;AACAijI,MAAAA,SAAS,CAAC11O,CAAD,EAAIsd,CAAJ,EAAO+gT,SAAP,EAAkBh+G,EAAlB,EAAsBC,EAAtB,EAA0B4tB,EAA1B,EAA8B17H,EAA9B,CAAT;AACAkjI,MAAAA,SAAS,CAACp4N,CAAD,EAAIrT,CAAJ,EAAOq0T,UAAP,EAAmBpwF,EAAnB,EAAuB5tB,EAAvB,EAA2B7tG,EAA3B,EAA+BD,EAA/B,CAAT;AACD,KAJD,MAIO;AACL,UAAI27H,EAAE,GAAGnrO,KAAK,GAAG,CAACs9M,EAAE,GAAGg+G,UAAL,GAAkB9rN,EAAE,GAAG6rN,SAAxB,IAAqCr7T,KAAxC,GAAgDwvG,EAA9D;AACAkjI,MAAAA,SAAS,CAAC11O,CAAD,EAAIsd,CAAJ,EAAO+gT,SAAP,EAAkBh+G,EAAlB,EAAsBC,EAAtB,EAA0B7tG,EAA1B,EAA8B07H,EAA9B,CAAT;AACAuH,MAAAA,SAAS,CAACp4N,CAAD,EAAIrT,CAAJ,EAAOq0T,UAAP,EAAmBj+G,EAAnB,EAAuB8tB,EAAvB,EAA2B17H,EAA3B,EAA+BD,EAA/B,CAAT;AACD;AACF;AACF;;;;;;;;;AC7CD;;AACA;;;;AAEe,kBAASklG,MAAT,EAAiB2I,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BD,EAA7B,EAAiC;AAC9C,GAACklG,MAAM,CAACjkM,KAAP,GAAe,CAAf,GAAmBpK,cAAnB,GAA2Bs0T,aAA5B,EAAkCjmH,MAAlC,EAA0C2I,EAA1C,EAA8CC,EAA9C,EAAkD7tG,EAAlD,EAAsDD,EAAtD;AACD;;;;;;;;;ACLD;;AACA;;AACA;;;;eAEgB,SAASo0I,MAAT,CAAgB4/B,KAAhB,EAAuB;AAErC,WAAS+3C,UAAT,CAAoB7mH,MAApB,EAA4B2I,EAA5B,EAAgCC,EAAhC,EAAoC7tG,EAApC,EAAwCD,EAAxC,EAA4C;AAC1C,QAAI,CAACj/F,IAAI,GAAGmkM,MAAM,CAAC8mH,SAAf,KAA8BjrT,IAAI,CAACizQ,KAAL,KAAeA,KAAjD,EAAyD;AACvD,UAAIjzQ,IAAJ;AAAA,UACI5C,GADJ;AAAA,UAEImjI,KAFJ;AAAA,UAGI9zI,CAHJ;AAAA,UAIIiK,CAAC,GAAG,CAAC,CAJT;AAAA,UAKIiE,CALJ;AAAA,UAMIupF,CAAC,GAAGlkF,IAAI,CAACjU,MANb;AAAA,UAOI0D,KAAK,GAAG00M,MAAM,CAAC10M,KAPnB;;AASA,aAAO,EAAEiH,CAAF,GAAMwtF,CAAb,EAAgB;AACd9mF,QAAAA,GAAG,GAAG4C,IAAI,CAACtJ,CAAD,CAAV,EAAe6pI,KAAK,GAAGnjI,GAAG,CAACmkK,QAA3B;;AACA,aAAK90K,CAAC,GAAG2Q,GAAG,CAAC3N,KAAJ,GAAY,CAAhB,EAAmBkL,CAAC,GAAG4lI,KAAK,CAACx0I,MAAlC,EAA0CU,CAAC,GAAGkO,CAA9C,EAAiD,EAAElO,CAAnD,EAAsD2Q,GAAG,CAAC3N,KAAJ,IAAa8wI,KAAK,CAAC9zI,CAAD,CAAL,CAASgD,KAAtB;;AACtD,YAAI2N,GAAG,CAACgtT,IAAR,EAAc,mBAAYhtT,GAAZ,EAAiB0vM,EAAjB,EAAqBC,EAArB,EAAyB7tG,EAAzB,EAA6BzvG,KAAK,GAAGs9M,EAAE,IAAI,CAAC9tG,EAAE,GAAG8tG,EAAN,IAAY3vM,GAAG,CAAC3N,KAAhB,GAAwBA,KAAjC,GAAyCwvG,EAA3E,EAAd,KACK,oBAAa7hG,GAAb,EAAkB0vM,EAAlB,EAAsBC,EAAtB,EAA0Bt9M,KAAK,GAAGq9M,EAAE,IAAI,CAAC5tG,EAAE,GAAG4tG,EAAN,IAAY1vM,GAAG,CAAC3N,KAAhB,GAAwBA,KAAjC,GAAyCyvG,EAAxE,EAA4ED,EAA5E;AACLxvG,QAAAA,KAAK,IAAI2N,GAAG,CAAC3N,KAAb;AACD;AACF,KAjBD,MAiBO;AACL00M,MAAAA,MAAM,CAAC8mH,SAAP,GAAmBjrT,IAAI,GAAG,6BAAcizQ,KAAd,EAAqB9uE,MAArB,EAA6B2I,EAA7B,EAAiCC,EAAjC,EAAqC7tG,EAArC,EAAyCD,EAAzC,CAA1B;AACAj/F,MAAAA,IAAI,CAACizQ,KAAL,GAAaA,KAAb;AACD;AACF;;AAED+3C,EAAAA,UAAU,CAAC/3C,KAAX,GAAmB,UAASrgR,CAAT,EAAY;AAC7B,WAAOygP,MAAM,CAAC,CAACzgP,CAAC,GAAG,CAACA,CAAN,IAAW,CAAX,GAAeA,CAAf,GAAmB,CAApB,CAAb;AACD,GAFD;;AAIA,SAAOo4T,UAAP;AACD,CA/Bc,CA+BZrhC,aA/BY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;ACdA;;AACA;;AACA;;AAEA;AACA,SAASlyB,MAAT,CAAiB7mE,IAAjB,EAAuBlgM,GAAvB,EAA4BkX,MAA5B,EAAoC;AAClC,QAAM1R,GAAG,GAAG,EAAZ;AACA06L,EAAAA,IAAI,CAACq0H,IAAL,CAAUztS,IAAI,IAAI;AAChB,UAAMrnB,CAAC,GAAGqnB,IAAI,CAAC/b,IAAf;AACA,QAAImM,MAAM,CAACzX,CAAD,CAAV,EAAe+F,GAAG,CAACxF,GAAG,CAACP,CAAD,CAAJ,CAAH,GAAcqnB,IAAd;AAChB,GAHD;AAIAo5K,EAAAA,IAAI,CAAC6mE,MAAL,GAAcvhQ,GAAd;AACA,SAAO06L,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASs6H,IAAT,CAAcp7T,MAAd,EAAsB;AACpB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDo7T,IAAI,CAACt2F,UAAL,GAAkB;AAChB,UAAQ,MADQ;AAEhB,cAAY;AACV,kBAAc,IADJ;AAEV,eAAW;AAFD,GAFI;AAMhB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,OAFC;AAGT,aAAS;AAHA,GAAD,EAIP;AACD,YAAQ,UADP;AAED,YAAQ;AAFP,GAJO;AANM,CAAlB;;AAgBA,MAAMrzD,QAAQ,GAAG5mK,CAAC,IAAIA,CAAC,CAAC9D,MAAxB;;AAEA,wBAASq0T,IAAT,EAAex2F,uBAAf,EAA0B;AACxBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,CAACA,KAAK,CAAC1qK,MAAX,EAAmB;AACjB,2BAAM,kDAAN;AACD;;AAED,QAAI4hI,GAAG,GAAG/wK,CAAC,CAACwgL,QAAZ;AAAA,QACIhwL,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EADV;AAAA,QAEI16M,GAAG,GAAGm6M,KAAK,CAAC5rN,KAAN,EAFV;AAAA,QAGIuvL,IAAI,GAAG,KAAKnhM,KAHhB;;AAKA,QAAI,CAACmhM,IAAD,IAAShtL,GAAT,IAAgBqpN,KAAK,CAAC74B,OAAN,EAApB,EAAqC;AACnC;AACA,UAAIxD,IAAJ,EAAU;AACRA,QAAAA,IAAI,CAACq0H,IAAL,CAAUztS,IAAI,IAAI;AAChB,cAAIA,IAAI,CAAC+pJ,QAAL,IAAiB,2BAAQ/pJ,IAAI,CAAC/b,IAAb,CAArB,EAAyC;AACvCqX,YAAAA,GAAG,CAACw7E,GAAJ,CAAQ5hG,IAAR,CAAa8qB,IAAI,CAAC/b,IAAlB;AACD;AACF,SAJD;AAKD,OARkC,CAQjC;;;AAGF,WAAKhM,KAAL,GAAamhM,IAAI,GAAG,4BAAU;AAC5B/5L,QAAAA,MAAM,EAAE,qBAAMuc,CAAC,CAACxE,IAAR,EAAc5V,MAAd,CAAqB,CAAC2B,CAAD,EAAIoP,CAAJ,KAAU;AACrCpP,UAAAA,CAAC,CAACjK,GAAF,CAAMqZ,CAAN;AACA,iBAAOpP,CAAP;AACD,SAHO,EAGLs3M,IAAI,EAHC,EAGGvgN,OAHH,CAGWohB,GAAG,CAACyvC,MAHf;AADoB,OAAV,EAKjBg/G,QALiB,CAApB,CAXmC,CAgBrB;;AAEd,UAAI4iB,GAAJ,EAAS;AACPyM,QAAAA,IAAI,CAACq0H,IAAL,CAAUztS,IAAI,IAAI;AAChB,cAAIA,IAAI,CAAC+pJ,QAAT,EAAmB;AACjB/pJ,YAAAA,IAAI,GAAG,0BAAOA,IAAI,CAAC/b,IAAZ,CAAP;AACAqX,YAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa8qB,IAAb;AACA1E,YAAAA,GAAG,CAACyvC,MAAJ,CAAW71D,IAAX,CAAgB8qB,IAAhB;AACD;AACF,SAND;AAOD,OA1BkC,CA0BjC;;;AAGFigP,MAAAA,MAAM,CAAC7mE,IAAD,EAAOu7B,qBAAP,EAAgBA,qBAAhB,CAAN;AACD;;AAEDr5M,IAAAA,GAAG,CAACyvC,MAAJ,CAAW6tI,IAAX,GAAkBQ,IAAlB;AACA,WAAO99K,GAAP;AACD;;AA7CuB,CAA1B;;AAiDA,SAASm/L,IAAT,GAAgB;AACd,QAAMrjM,IAAI,GAAG,EAAb;AAAA,QACMqjM,IAAI,GAAG;AACXvgN,IAAAA,OAAO,EAAE9E,KAAK,IAAI8E,OAAO,CAAC5E,KAAK,CAACF,KAAD,EAAQ,CAAR,CAAN,EAAkB,CAAlB,CADd;AAEX8D,IAAAA,GAAG,EAAE4I,CAAC,KAAKsV,IAAI,CAACliB,IAAL,CAAU4M,CAAV,GAAc24M,IAAnB;AAFK,GADb;;AAMA,WAASnlN,KAAT,CAAeF,KAAf,EAAsBsT,KAAtB,EAA6B;AAC3B,QAAIA,KAAK,IAAI0O,IAAI,CAAC7iB,MAAlB,EAA0B;AACxB,aAAOa,KAAP;AACD;;AAED,UAAM+N,CAAC,GAAG/N,KAAK,CAACb,MAAhB;AAAA,UACM2E,GAAG,GAAGke,IAAI,CAAC1O,KAAK,EAAN,CADhB;AAAA,UAEMirT,WAAW,GAAG,EAFpB;AAAA,UAGMx5T,MAAM,GAAG,EAHf;AAIA,QAAIlF,CAAC,GAAG,CAAC,CAAT;AAAA,QACI+D,QADJ;AAAA,QAEIf,KAFJ;AAAA,QAGIoH,MAHJ;;AAKA,WAAO,EAAEpK,CAAF,GAAMkO,CAAb,EAAgB;AACdnK,MAAAA,QAAQ,GAAGE,GAAG,CAACjB,KAAK,GAAG7C,KAAK,CAACH,CAAD,CAAd,CAAH,GAAwB,EAAnC;;AAEA,UAAIoK,MAAM,GAAGs0T,WAAW,CAAC36T,QAAD,CAAxB,EAAoC;AAClCqG,QAAAA,MAAM,CAACnK,IAAP,CAAY+C,KAAZ;AACD,OAFD,MAEO;AACL07T,QAAAA,WAAW,CAAC36T,QAAD,CAAX,GAAwB,CAACf,KAAD,CAAxB;AACD;AACF;;AAED,SAAKe,QAAL,IAAiB26T,WAAjB,EAA8B;AAC5Bx5T,MAAAA,MAAM,CAACnB,QAAD,CAAN,GAAmB1D,KAAK,CAACq+T,WAAW,CAAC36T,QAAD,CAAZ,EAAwB0P,KAAxB,CAAxB;AACD;;AAED,WAAOvO,MAAP;AACD;;AAED,WAASD,OAAT,CAAiBwE,GAAjB,EAAsBgK,KAAtB,EAA6B;AAC3B,QAAI,EAAEA,KAAF,GAAU0O,IAAI,CAAC7iB,MAAnB,EAA2B,OAAOmK,GAAP;AAC3B,UAAMtJ,KAAK,GAAG,EAAd;;AAEA,SAAK,MAAM8D,GAAX,IAAkBwF,GAAlB,EAAuB;AACrBtJ,MAAAA,KAAK,CAACF,IAAN,CAAW;AACTgE,QAAAA,GADS;AAETmG,QAAAA,MAAM,EAAEnF,OAAO,CAACwE,GAAG,CAACxF,GAAD,CAAJ,EAAWwP,KAAX;AAFN,OAAX;AAID;;AAED,WAAOtT,KAAP;AACD;;AAED,SAAOqlN,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AAEA,SAASm5G,eAAT,CAAyBt7T,MAAzB,EAAiC;AAC/B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AAED,MAAMi0T,iBAAiB,GAAG,CAACpwT,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAACwwM,MAAF,KAAa3pM,CAAC,CAAC2pM,MAAf,GAAwB,CAAxB,GAA4B,CAAhE;;AAEA,wBAASinH,eAAT,EAA0B12F,uBAA1B,EAAqC;AACnCh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,CAACA,KAAK,CAAC1qK,MAAP,IAAiB,CAAC0qK,KAAK,CAAC1qK,MAAN,CAAa6tI,IAAnC,EAAyC;AACvC,2BAAM,KAAK/3L,WAAL,CAAiBrK,IAAjB,GAAwB,iDAA9B;AACD;;AAED,UAAMwzM,MAAM,GAAG,KAAKA,MAAL,CAAYpuL,CAAC,CAACsqB,MAAd,CAAf;AAAA,UACM6M,MAAM,GAAG,KAAKA,MADpB;AAAA,UAEM6lJ,IAAI,GAAG68B,KAAK,CAAC1qK,MAAN,CAAa6tI,IAF1B;AAAA,UAGM2rC,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQxxL,MAHnB;AAIA,QAAIn3B,CAAC,CAAC6uG,KAAN,EAAamuE,IAAI,CAACp9L,GAAL,CAASogB,CAAC,CAAC6uG,KAAX,EAAb,KAAoCmuE,IAAI,CAAC5rH,KAAL;AACpC,QAAIpxD,CAAC,CAAC3c,IAAN,EAAY25L,IAAI,CAAC35L,IAAL,CAAU,iCAAc2c,CAAC,CAAC3c,IAAhB,EAAsB6C,CAAC,IAAIA,CAAC,CAACmC,IAA7B,CAAV;AACZi6H,IAAAA,SAAS,CAAC8rE,MAAD,EAAS,KAAK1xM,MAAd,EAAsBsjB,CAAtB,CAAT;;AAEA,QAAIouL,MAAM,CAAC28E,UAAX,EAAuB;AACrB38E,MAAAA,MAAM,CAAC28E,UAAP,CAAkB/qQ,CAAC,CAAC+qQ,UAAF,KAAiB,KAAjB,GAAyB4lC,iBAAzB,GAA6CtoO,aAA/D;AACD;;AAED,QAAI;AACF,WAAKhsF,KAAL,GAAa+xM,MAAM,CAACpR,IAAD,CAAnB;AACD,KAFD,CAEE,OAAOvgL,GAAP,EAAY;AACZ,2BAAMA,GAAN;AACD;;AAEDugL,IAAAA,IAAI,CAAC60H,IAAL,CAAUztS,IAAI,IAAI6zS,SAAS,CAAC7zS,IAAD,EAAO+yB,MAAP,EAAewxL,EAAf,CAA3B;AACA,WAAO9O,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC4O,EAApC,EAAwC5O,QAAxC,CAAiD,MAAjD,CAAP;AACD;;AA1BkC,CAArC;;AA8BA,SAASz3F,SAAT,CAAmB8rE,MAAnB,EAA2B1xM,MAA3B,EAAmCsjB,CAAnC,EAAsC;AACpC,OAAK,IAAI2d,CAAJ,EAAOtkC,CAAC,GAAG,CAAX,EAAckO,CAAC,GAAG7K,MAAM,CAAC/D,MAA9B,EAAsCU,CAAC,GAAGkO,CAA1C,EAA6C,EAAElO,CAA/C,EAAkD;AAChDskC,IAAAA,CAAC,GAAGjhC,MAAM,CAACrD,CAAD,CAAV;AACA,QAAIskC,CAAC,IAAI3d,CAAT,EAAYouL,MAAM,CAACzwK,CAAD,CAAN,CAAU3d,CAAC,CAAC2d,CAAD,CAAX;AACb;AACF;;AAED,SAASs6R,SAAT,CAAmB7zS,IAAnB,EAAyB+yB,MAAzB,EAAiCwxL,EAAjC,EAAqC;AACnC,QAAM5rO,CAAC,GAAGqnB,IAAI,CAAC/b,IAAf;AAAA,QACMd,CAAC,GAAG4vC,MAAM,CAACx+C,MAAP,GAAgB,CAD1B;;AAGA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B0D,IAAAA,CAAC,CAAC4rO,EAAE,CAACtvO,CAAD,CAAH,CAAD,GAAW+qB,IAAI,CAAC+yB,MAAM,CAAC99C,CAAD,CAAP,CAAf;AACD;;AAED0D,EAAAA,CAAC,CAAC4rO,EAAE,CAACphO,CAAD,CAAH,CAAD,GAAW6c,IAAI,CAAC+pJ,QAAL,GAAgB/pJ,IAAI,CAAC+pJ,QAAL,CAAcx1K,MAA9B,GAAuC,CAAlD;AACD;;AAED,MAAMq2O,MAAM,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,OAAhB,EAAyB,UAAzB,CAAf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASkpF,IAAT,CAAcx7T,MAAd,EAAsB;AACpBs7T,EAAAA,eAAe,CAAC7/T,IAAhB,CAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDw7T,IAAI,CAAC12F,UAAL,GAAkB;AAChB,UAAQ,MADQ;AAEhB,cAAY;AACV,YAAQ,IADE;AAEV,gBAAY;AAFF,GAFI;AAMhB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAHO,EAMP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GANO,EAUP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,eAAW;AAHV,GAVO,EAcP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GAdO,EAmBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAUwN,MAAM,CAACr2O,MAJhB;AAKD,eAAWq2O;AALV,GAnBO;AANM,CAAlB;AAiCA,wBAASkpF,IAAT,EAAeF,eAAf,EAAgC;AAC9B5pH,EAAAA,MAAM,EAAEkmH,iBADsB;AAE9B53T,EAAAA,MAAM,EAAE,CAAC,QAAD,EAAW,MAAX,EAAmB,SAAnB,CAFsB;AAG9By6C,EAAAA,MAAM,EAAE63L;AAHsB,CAAhC;AAMA,MAAMmpF,QAAQ,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,OAAzB,EAAkC,UAAlC,CAAjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,SAAT,CAAmB17T,MAAnB,EAA2B;AACzBs7T,EAAAA,eAAe,CAAC7/T,IAAhB,CAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD07T,SAAS,CAAC52F,UAAV,GAAuB;AACrB,UAAQ,WADa;AAErB,cAAY;AACV,YAAQ,IADE;AAEV,gBAAY;AAFF,GAFS;AAMrB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAHO,EAMP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GANO,EAUP;AACD,YAAQ,OADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GAVO,EAcP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GAdO,EAmBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU22F,QAAQ,CAACx/T,MAJlB;AAKD,eAAWw/T;AALV,GAnBO;AANW,CAAvB;AAiCA,wBAASC,SAAT,EAAoBJ,eAApB,EAAqC;AACnC5pH,EAAAA,MAAM,EAAE2gC,sBAD2B;AAEnCryO,EAAAA,MAAM,EAAE,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAF2B;AAGnCy6C,EAAAA,MAAM,EAAEghR;AAH2B,CAArC;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASE,QAAT,CAAkB37T,MAAlB,EAA0B;AACxB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD27T,QAAQ,CAAC72F,UAAT,GAAsB;AACpB,UAAQ,UADY;AAEpB,cAAY;AACV,kBAAc;AADJ,GAFQ;AAKpB,YAAU,CAAC;AACT,YAAQ,KADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,WADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO;AALU,CAAtB;AAeA,wBAAS62F,QAAT,EAAmB/2F,uBAAnB,EAA8B;AAC5Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,CAACA,KAAK,CAAC1qK,MAAX,EAAmB;AACjB,2BAAM,sDAAN;AACD;;AAED,QAAIquI,IAAI,GAAG,KAAKnhM,KAAhB;;AAEA,UAAMmU,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EAAZ;AAAA,UACM16M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,EAAsBM,WAAtB,CAAkCvE,KAAK,CAACmE,MAAxC,CADZ;AAAA,UAEMhlO,GAAG,GAAG,CAACwkM,IAAD,IAAShtL,GAAT,IAAgBqpN,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC+D,OAApB,CAAhB,IAAgD/D,KAAK,CAACO,QAAN,CAAep6M,CAAC,CAAC1iB,GAAF,CAAM65C,MAArB,CAAhD,IAAgF0iL,KAAK,CAACO,QAAN,CAAep6M,CAAC,CAACs4S,SAAF,CAAYnhR,MAA3B,CAF5F,CAPkB,CAS8G;;;AAGhIz3B,IAAAA,GAAG,CAACyvC,MAAJ,GAAazvC,GAAG,CAACyvC,MAAJ,CAAWzsD,KAAX,EAAb;;AAEA,QAAI1J,GAAJ,EAAS;AACPwkM,MAAAA,IAAI,GAAG99K,GAAG,CAACyvC,MAAJ,CAAWx2D,MAAX,GAAoB0rQ,MAAM,CAAC,6BAAW/3P,EAAX,CAAc0T,CAAC,CAAC1iB,GAAhB,EAAqB63T,QAArB,CAA8Bn1S,CAAC,CAACs4S,SAAhC,EAA2C54S,GAAG,CAACyvC,MAA/C,CAAD,EAAyDnvC,CAAC,CAAC1iB,GAA3D,EAAgEmwM,gBAAhE,CAA1B,GAAoG42D,MAAM,CAAC,6BAAW,CAAC,EAAD,CAAX,CAAD,EAAmBrkP,CAAC,CAAC1iB,GAArB,EAA0B0iB,CAAC,CAAC1iB,GAA5B,CAAjH;AACD;;AAEDoiB,IAAAA,GAAG,CAACyvC,MAAJ,CAAW6tI,IAAX,GAAkB,KAAK3gM,KAAL,GAAamhM,IAA/B;AACA,WAAO99K,GAAP;AACD;;AArB2B,CAA9B;AAyBA,MAAM64S,OAAO,GAAG;AACdl4S,EAAAA,IAAI,EAAEm9K,iBADQ;AAEd2zH,EAAAA,OAAO,EAAEA;AAFK,CAAhB;AAIA,MAAMqH,QAAQ,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,OAAX,EAAoB,UAApB,CAAjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,IAAT,CAAc/7T,MAAd,EAAsB;AACpBs7T,EAAAA,eAAe,CAAC7/T,IAAhB,CAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD+7T,IAAI,CAACj3F,UAAL,GAAkB;AAChB,UAAQ,MADQ;AAEhB,cAAY;AACV,YAAQ,IADE;AAEV,gBAAY;AAFF,GAFI;AAMhB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAHO,EAMP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,eAAW,MAHV;AAID,cAAU,CAAC,MAAD,EAAS,SAAT;AAJT,GANO,EAWP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GAXO,EAgBP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GAhBO,EAqBP;AACD,YAAQ,YADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GArBO,EAyBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAUg3F,QAAQ,CAAC7/T,MAJlB;AAKD,eAAW6/T;AALV,GAzBO;AANM,CAAlB;AAuCA,wBAASC,IAAT,EAAeT,eAAf,EAAgC;AAC9B;AACF;AACA;AACE5pH,EAAAA,MAAM,CAAC9jK,MAAD,EAAS;AACb,UAAMwmD,CAAC,GAAGxmD,MAAM,IAAI,MAApB;AACA,QAAI,8BAAeiuR,OAAf,EAAwBznO,CAAxB,CAAJ,EAAgC,OAAOynO,OAAO,CAACznO,CAAD,CAAP,EAAP,CAAhC,KAAyD,qBAAM,sCAAsCA,CAA5C;AAC1D,GAP6B;;AAS9Bp0F,EAAAA,MAAM,EAAE,CAAC,MAAD,EAAS,UAAT,CATsB;AAU9By6C,EAAAA,MAAM,EAAEqhR;AAVsB,CAAhC;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASE,SAAT,CAAmBh8T,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,EAArB,EAAyBuE,MAAzB;AACD;;AACDg8T,SAAS,CAACl3F,UAAV,GAAuB;AACrB,UAAQ,WADa;AAErB,cAAY;AACV,YAAQ,IADE;AAEV,iBAAa,IAFH;AAGV,eAAW;AAHD,GAFS;AAOrB,YAAU;AAPW,CAAvB;AASA,wBAASk3F,SAAT,EAAoBp3F,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMmyF,KAAK,GAAG,KAAK3vT,KAAnB;AAAA,UACMmhM,IAAI,GAAGq8B,KAAK,CAAC1qK,MAAN,IAAgB0qK,KAAK,CAAC1qK,MAAN,CAAa6tI,IAD1C;AAAA,UAEMt9K,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAjB,CAFZ;AAAA,UAGMkV,GAAG,GAAG,EAHZ;AAIA,QAAI,CAAC31C,IAAL,EAAW,qBAAM,kDAAN;;AAEX,QAAIq8B,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC+D,OAApB,CAAJ,EAAkC;AAChC;AACAl+M,MAAAA,GAAG,CAACw7E,GAAJ,GAAU8wN,KAAV,CAFgC,CAEf;;AAEjBnyF,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAACmE,MAAlB,EAA0BjhO,CAAC,IAAIo2O,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAH,GAAkB,CAAjD,EAJgC,CAIqB;;AAErDygM,MAAAA,IAAI,CAACq0H,IAAL,CAAUztS,IAAI,IAAI;AAChB,cAAMrnB,CAAC,GAAGqnB,IAAI,CAAC/b,IAAf;AAAA,cACMs1B,CAAC,GAAGvZ,IAAI,CAAC2sL,MAAL,IAAe3sL,IAAI,CAAC2sL,MAAL,CAAY1oM,IADrC;;AAGA,YAAIs1B,CAAC,IAAIw1M,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAR,IAAwBo2O,GAAG,CAAC,2BAAQx1M,CAAR,CAAD,CAA/B,EAA6C;AAC3Cje,UAAAA,GAAG,CAAC1F,GAAJ,CAAQ1gB,IAAR,CAAa,0BAAO;AAClB61D,YAAAA,MAAM,EAAExxB,CADU;AAElBiS,YAAAA,MAAM,EAAE7yC;AAFU,WAAP,CAAb;AAID;AACF,OAVD;AAWA,WAAKV,KAAL,GAAaqjB,GAAG,CAAC1F,GAAjB;AACD,KAlBD,MAkBO,IAAI6/M,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC8D,GAApB,CAAJ,EAA8B;AACnC;AACA9D,MAAAA,KAAK,CAACwE,KAAN,CAAYxE,KAAK,CAAC8D,GAAlB,EAAuB5gO,CAAC,IAAIo2O,GAAG,CAAC,2BAAQp2O,CAAR,CAAD,CAAH,GAAkB,CAA9C,EAFmC,CAEe;;AAElDivT,MAAAA,KAAK,CAAC7uT,OAAN,CAAc4gP,IAAI,IAAI;AACpB,YAAI5K,GAAG,CAAC,2BAAQ4K,IAAI,CAAC5uL,MAAb,CAAD,CAAH,IAA6BgkL,GAAG,CAAC,2BAAQ4K,IAAI,CAACnuM,MAAb,CAAD,CAApC,EAA4D;AAC1DlwB,UAAAA,GAAG,CAAClP,GAAJ,CAAQlX,IAAR,CAAaykP,IAAb;AACD;AACF,OAJD;AAKD;;AAED,WAAOr+N,GAAP;AACD;;AAtC4B,CAA/B;AA0CA,MAAMi5S,KAAK,GAAG;AACZ5tP,EAAAA,MAAM,EAAE6tP,0BADI;AAEZ5B,EAAAA,IAAI,EAAE6B,wBAFM;AAGZn2T,EAAAA,KAAK,EAAEo2T,yBAHK;AAIZC,EAAAA,SAAS,EAAEC,6BAJC;AAKZ/B,EAAAA,QAAQ,EAAEgC,4BALE;AAMZrB,EAAAA,UAAU,EAAEsB;AANA,CAAd;AAQA,MAAMC,QAAQ,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,OAAzB,EAAkC,UAAlC,CAAjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,OAAT,CAAiB18T,MAAjB,EAAyB;AACvBs7T,EAAAA,eAAe,CAAC7/T,IAAhB,CAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD08T,OAAO,CAAC53F,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,YAAQ,IADE;AAEV,gBAAY;AAFF,GAFO;AAMnB,YAAU,CAAC;AACT,YAAQ,OADC;AAET,YAAQ;AAFC,GAAD,EAGP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAHO,EAMP;AACD,YAAQ,QADP;AAED,YAAQ,MAFP;AAGD,eAAW,UAHV;AAID,cAAU,CAAC,UAAD,EAAa,YAAb,EAA2B,QAA3B,EAAqC,MAArC,EAA6C,OAA7C,EAAsD,WAAtD;AAJT,GANO,EAWP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAXO,EAeP;AACD,YAAQ,cADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAfO,EAmBP;AACD,YAAQ,cADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAnBO,EAuBP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAvBO,EA2BP;AACD,YAAQ,cADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GA3BO,EA+BP;AACD,YAAQ,eADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GA/BO,EAmCP;AACD,YAAQ,aADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAnCO,EAuCP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAvCO,EA2CP;AACD,YAAQ,OADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GA3CO,EA+CP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GA/CO,EAoDP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU23F,QAAQ,CAACxgU,MAJlB;AAKD,eAAWwgU;AALV,GApDO;AANS,CAArB;AAkEA,wBAASC,OAAT,EAAkBpB,eAAlB,EAAmC;AACjC;AACF;AACA;AACA;AACE5pH,EAAAA,MAAM,GAAG;AACP,UAAM5uM,CAAC,GAAG,2BAAV;;AAEAA,IAAAA,CAAC,CAACqgR,KAAF,GAAU7/P,CAAC,IAAI;AACb,YAAMjjB,CAAC,GAAGyC,CAAC,CAACozC,IAAF,EAAV;AACA,UAAI71C,CAAC,CAAC8iR,KAAN,EAAargR,CAAC,CAACozC,IAAF,CAAO71C,CAAC,CAAC8iR,KAAF,CAAQ7/P,CAAR,CAAP;AACd,KAHD;;AAKAxgB,IAAAA,CAAC,CAAC8qC,MAAF,GAAWtqB,CAAC,IAAI;AACd,UAAI,8BAAe24S,KAAf,EAAsB34S,CAAtB,CAAJ,EAA8BxgB,CAAC,CAACozC,IAAF,CAAO+lR,KAAK,CAAC34S,CAAD,CAAZ,EAA9B,KAAoD,qBAAM,yCAAyCA,CAA/C;AACrD,KAFD;;AAIA,WAAOxgB,CAAP;AACD,GAlBgC;;AAoBjC9C,EAAAA,MAAM,EAAE,CAAC,QAAD,EAAW,OAAX,EAAoB,MAApB,EAA4B,OAA5B,EAAqC,SAArC,EAAgD,cAAhD,EAAgE,cAAhE,EAAgF,YAAhF,EAA8F,cAA9F,EAA8G,eAA9G,EAA+H,aAA/H,CApByB;AAqBjCy6C,EAAAA,MAAM,EAAEgiR;AArByB,CAAnC;;;;;;;;;;ACjkBA;;AACA;;AACA;;AAEA,SAASpqF,SAAT,CAAoB1mO,IAApB,EAA0B8jO,OAA1B,EAAmC;AACjC,MAAI5vB,MAAM,GAAG,EAAb;AAAA,MACIpgN,GAAG,GAAG,UAAU6I,CAAV,EAAa;AACrB,WAAOA,CAAC,CAACjI,CAAD,CAAR;AACD,GAHD;AAAA,MAII+F,GAJJ;AAAA,MAKIzJ,CALJ;AAAA,MAMIkO,CANJ;AAAA,MAOIxK,CAPJ;AAAA,MAQI4Z,CARJ;AAAA,MASImxB,CATJ,CADiC,CAU1B;;;AAGP,MAAIqkM,OAAO,IAAI,IAAf,EAAqB;AACnB5vB,IAAAA,MAAM,CAACjjN,IAAP,CAAY+O,IAAZ;AACD,GAFD,MAEO;AACL,SAAKvF,GAAG,GAAG,EAAN,EAAUzJ,CAAC,GAAG,CAAd,EAAiBkO,CAAC,GAAGc,IAAI,CAAC1P,MAA/B,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD0D,MAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;AACAsd,MAAAA,CAAC,GAAGw1N,OAAO,CAACrpO,GAAR,CAAY3G,GAAZ,CAAJ;AACA2rC,MAAAA,CAAC,GAAGhlC,GAAG,CAAC6T,CAAD,CAAP;;AAEA,UAAI,CAACmxB,CAAL,EAAQ;AACNhlC,QAAAA,GAAG,CAAC6T,CAAD,CAAH,GAASmxB,CAAC,GAAG,EAAb;AACAA,QAAAA,CAAC,CAAC3H,IAAF,GAASxpB,CAAT;AACA4lM,QAAAA,MAAM,CAACjjN,IAAP,CAAYwuC,CAAZ;AACD;;AAEDA,MAAAA,CAAC,CAACxuC,IAAF,CAAOyD,CAAP;AACD;AACF;;AAED,SAAOw/M,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS88G,KAAT,CAAe38T,MAAf,EAAuB;AACrB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD28T,KAAK,CAAC73F,UAAN,GAAmB;AACjB,UAAQ,OADS;AAEjB,cAAY;AACV,iBAAa;AADH,GAFK;AAKjB,YAAU,CAAC;AACT,YAAQ,GADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,GADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GARO,EAYP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAZO,EAgBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GAhBO;AALO,CAAnB;AA2BA,wBAAS63F,KAAT,EAAgB/3F,uBAAhB,EAA2B;AACzBh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAZ;;AAEA,QAAI,CAAC,KAAK7hO,KAAN,IAAew9N,KAAK,CAAC74B,OAAN,EAAf,IAAkChhL,CAAC,CAACo6M,QAAF,EAAtC,EAAoD;AAClD,YAAMjrK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA/C;AAAA,YACMotJ,MAAM,GAAGwyB,SAAS,CAAC5/K,MAAD,EAASnvC,CAAC,CAACmsN,OAAX,CADxB;AAAA,YAEMjnH,KAAK,GAAG,CAACllG,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CAFd;AAAA,YAGMp8G,CAAC,GAAGo0B,KAAK,CAACvsH,MAHhB;AAAA,YAIMgwO,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,4BAAa3oN,CAAC,CAACxgB,CAAf,CAAD,EAAoB,4BAAawgB,CAAC,CAACjC,CAAf,CAApB,CAJnB;AAAA,YAKMta,MAAM,GAAG,EALf;AAMA84M,MAAAA,MAAM,CAACp/M,OAAP,CAAe2qC,CAAC,IAAI;AAClB,6CAAgBA,CAAhB,EAAmB9nB,CAAC,CAACxgB,CAArB,EAAwBwgB,CAAC,CAACjC,CAA1B,EAA6BiC,CAAC,CAAC2jN,SAAF,IAAe,GAA5C,EAAiDxmO,OAAjD,CAAyDwgC,CAAC,IAAI;AAC5D,gBAAM5gC,CAAC,GAAG,EAAV;;AAEA,eAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGy3F,CAApB,EAAuB,EAAEz3F,CAAzB,EAA4B;AAC1B0D,YAAAA,CAAC,CAACmoH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAcyuC,CAAC,CAAC3H,IAAF,CAAO9mC,CAAP,CAAd;AACD;;AAED0D,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhrM,CAAC,CAAC,CAAD,CAAZ;AACA5gC,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhrM,CAAC,CAAC,CAAD,CAAZ;AACAl6B,UAAAA,MAAM,CAACnK,IAAP,CAAY,0BAAOyD,CAAP,CAAZ;AACD,SAVD;AAWD,OAZD;AAaA,UAAI,KAAKV,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,WAAKA,KAAL,GAAaqjB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAACyvC,MAAJ,GAAa1rD,MAApC;AACD;;AAED,WAAOic,GAAP;AACD;;AA7BwB,CAA3B;AAiCA,MAAMmxN,OAAO,GAAG;AACd1hJ,EAAAA,MAAM,EAAEmqO,gCADM;AAEdjwT,EAAAA,GAAG,EAAEkwT,6BAFS;AAGdl4T,EAAAA,GAAG,EAAEm4T,6BAHS;AAId1pT,EAAAA,GAAG,EAAE2pT,6BAJS;AAKdnzF,EAAAA,IAAI,EAAEozF,8BALQ;AAMdhzF,EAAAA,IAAI,EAAEizF;AANQ,CAAhB;;AASA,MAAMC,gBAAgB,GAAG,CAACtvR,MAAD,EAASimK,KAAT,KAAmBjmK,MAAM,KAAK,MAAX,GAAoBimK,KAApB,GAA4BjmK,MAAM,KAAK,MAAX,GAAoB,CAApB,GAAwB,CAAhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASuvR,UAAT,CAAoBn9T,MAApB,EAA4B;AAC1B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACDm9T,UAAU,CAACr4F,UAAX,GAAwB;AACtB,UAAQ,YADc;AAEtB,cAAY;AACV,iBAAa;AADH,GAFU;AAKtB,YAAU,CAAC;AACT,YAAQ,GADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,GADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,SADP;AAED,YAAQ,OAFP;AAGD,aAAS;AAHR,GARO,EAYP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,eAAW,QAHV;AAID,cAAUplO,MAAM,CAACof,IAAP,CAAYq1N,OAAZ;AAJT,GAZO,EAiBP;AACD,YAAQ,OADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAjBO,EAqBP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GArBO,EA0BP;AACD,YAAQ,QADP;AAED,YAAQ,SAFP;AAGD,eAAW;AAHV,GA1BO,EA8BP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS;AAHR,GA9BO;AALY,CAAxB;AAyCA,wBAASgpF,UAAT,EAAqBv4F,uBAArB,EAAgC;AAC9Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAMn6M,GAAG,GAAGm6M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACoE,SAAN,GAAkBpE,KAAK,CAACqE,SAAnC,CAAZ;;AAEA,QAAI,CAAC,KAAK7hO,KAAN,IAAew9N,KAAK,CAAC74B,OAAN,EAAf,IAAkChhL,CAAC,CAACo6M,QAAF,EAAtC,EAAoD;AAClD,YAAMjrK,MAAM,GAAG0qK,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA/C;AAAA,YACMotJ,MAAM,GAAGwyB,SAAS,CAAC5/K,MAAD,EAASnvC,CAAC,CAACmsN,OAAX,CADxB;AAAA,YAEMjnH,KAAK,GAAG,CAACllG,CAAC,CAACmsN,OAAF,IAAa,EAAd,EAAkBrpO,GAAlB,CAAsBoqM,sBAAtB,CAFd;AAAA,YAGM5iK,MAAM,GAAGtqB,CAAC,CAACsqB,MAAF,IAAY,QAH3B;AAAA,YAIMimK,KAAK,GAAGvwL,CAAC,CAACuwL,KAAF,IAAW,CAJzB;AAAA,YAKMupH,GAAG,GAAGF,gBAAgB,CAACtvR,MAAD,EAASimK,KAAT,CAL5B;AAAA,YAMMo4B,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,CAAC,4BAAa3oN,CAAC,CAACxgB,CAAf,CAAD,EAAoB,4BAAawgB,CAAC,CAACjC,CAAf,CAApB,CANnB;AAAA,YAOMgsI,GAAG,GAAG8mF,OAAO,CAACvmM,MAAD,CAPnB;AAAA,YAQM7mC,MAAM,GAAG,EARf;AASA,UAAIgrM,MAAM,GAAGzuL,CAAC,CAAC0yL,MAAf;;AAEA,UAAI,CAAC,8BAAem+B,OAAf,EAAwBvmM,MAAxB,CAAL,EAAsC;AACpC,6BAAM,gCAAgCA,MAAtC;AACD;;AAED,UAAImkK,MAAM,IAAI,IAAd,EAAoB;AAClB,YAAInkK,MAAM,KAAK,KAAX,IAAoBmkK,MAAM,CAAC,CAAD,CAAN,IAAa,CAArC,EAAwC;AACtCorB,UAAAA,KAAK,CAAC8C,QAAN,CAAelhO,IAAf,CAAoB,sDAApB;AACAgzM,UAAAA,MAAM,GAAG,IAAT;AACD;AACF;;AAED8N,MAAAA,MAAM,CAACp/M,OAAP,CAAe2qC,CAAC,IAAI;AAClB,cAAMvgC,CAAC,GAAGugC,CAAC,CAACnvC,MAAZ;;AAEA,YAAI4O,CAAC,IAAIuyT,GAAT,EAAc;AACZjgG,UAAAA,KAAK,CAAC8C,QAAN,CAAelhO,IAAf,CAAoB,4DAApB;AACA;AACD;;AAED,cAAMymI,KAAK,GAAG6nB,GAAG,CAACjiH,CAAD,EAAI9nB,CAAC,CAACxgB,CAAN,EAASwgB,CAAC,CAACjC,CAAX,EAAcwyL,KAAd,CAAjB;;AAEA,YAAIvwL,CAAC,CAACtjB,MAAN,EAAc;AACZ;AACA+G,UAAAA,MAAM,CAACnK,IAAP,CAAY,0BAAO;AACjBkiB,YAAAA,IAAI,EAAEssB,CAAC,CAAC3H,IADS;AAEjB0lM,YAAAA,IAAI,EAAE3jG,KAAK,CAAC2jG,IAFK;AAGjBP,YAAAA,QAAQ,EAAEpjG,KAAK,CAACojG;AAHC,WAAP,CAAZ;AAKA;AACD;;AAED,cAAMt5B,GAAG,GAAGyC,MAAM,IAAI,sBAAO3mK,CAAP,EAAU9nB,CAAC,CAACxgB,CAAZ,CAAtB;AAAA,cACMwa,GAAG,GAAG2jB,CAAC,IAAI;AACf,gBAAM5gC,CAAC,GAAG,EAAV;;AAEA,eAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6rH,KAAK,CAACvsH,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrC0D,YAAAA,CAAC,CAACmoH,KAAK,CAAC7rH,CAAD,CAAN,CAAD,GAAcyuC,CAAC,CAAC3H,IAAF,CAAO9mC,CAAP,CAAd;AACD;;AAED0D,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhrM,CAAC,CAAC,CAAD,CAAZ;AACA5gC,UAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhrM,CAAC,CAAC,CAAD,CAAZ;AACAl6B,UAAAA,MAAM,CAACnK,IAAP,CAAY,0BAAOyD,CAAP,CAAZ;AACD,SAXD;;AAaA,YAAIutC,MAAM,KAAK,QAAf,EAAyB;AACvB;AACA0hK,UAAAA,GAAG,CAAC7uM,OAAJ,CAAYqC,CAAC,IAAIwa,GAAG,CAAC,CAACxa,CAAD,EAAI0iI,KAAK,CAAC2nB,OAAN,CAAcrqJ,CAAd,CAAJ,CAAD,CAApB;AACD,SAHD,MAGO;AACL;AACA,2CAAY0iI,KAAK,CAAC2nB,OAAlB,EAA2BmiD,GAA3B,EAAgC,EAAhC,EAAoC,GAApC,EAAyC7uM,OAAzC,CAAiD6c,GAAjD;AACD;AACF,OAxCD;AAyCA,UAAI,KAAK3d,KAAT,EAAgBqjB,GAAG,CAACw7E,GAAJ,GAAU,KAAK7+F,KAAf;AAChB,WAAKA,KAAL,GAAaqjB,GAAG,CAAC1F,GAAJ,GAAU0F,GAAG,CAACyvC,MAAJ,GAAa1rD,MAApC;AACD;;AAED,WAAOic,GAAP;AACD;;AAzE6B,CAAhC;;;;;;;;ACjLA,MAAMotN,OAAO,GAAG1tO,IAAI,CAAC0Q,GAAL,CAAS,CAAT,EAAY,CAAC,EAAb,CAAhB;AACA,MAAMiqT,UAAU,GAAG,IAAItyT,WAAJ,CAAgB,GAAhB,CAAnB;;AAEe,MAAMuyT,UAAN,CAAiB;AAE5B,SAAOtvT,IAAP,CAAYiwM,MAAZ,EAAoBs/G,IAAI,GAAGC,WAA3B,EAAwCC,IAAI,GAAGC,WAA/C,EAA4D;AACxD,UAAM7yT,CAAC,GAAGozM,MAAM,CAAChiN,MAAjB;AACA,UAAM08C,MAAM,GAAG,IAAIipK,YAAJ,CAAiB/2M,CAAC,GAAG,CAArB,CAAf;;AAEA,SAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,YAAMskC,CAAC,GAAGg9K,MAAM,CAACthN,CAAD,CAAhB;AACAg8C,MAAAA,MAAM,CAAC,IAAIh8C,CAAL,CAAN,GAAgB4gU,IAAI,CAACt8R,CAAD,CAApB;AACA0X,MAAAA,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAN,GAAoB8gU,IAAI,CAACx8R,CAAD,CAAxB;AACH;;AAED,WAAO,IAAIq8R,UAAJ,CAAe3kR,MAAf,CAAP;AACH;;AAEDpwC,EAAAA,WAAW,CAACowC,MAAD,EAAS;AAChB,UAAM9tC,CAAC,GAAG8tC,MAAM,CAAC18C,MAAP,IAAiB,CAA3B;AACA,QAAI4O,CAAC,GAAG,CAAJ,IAAS,OAAO8tC,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAlC,EAA4C,MAAM,IAAIz9C,KAAJ,CAAU,qCAAV,CAAN;AAE5C,SAAKy9C,MAAL,GAAcA,MAAd,CAJgB,CAMhB;;AACA,UAAMglR,YAAY,GAAGj7T,IAAI,CAACK,GAAL,CAAS,IAAI8H,CAAJ,GAAQ,CAAjB,EAAoB,CAApB,CAArB;AACA,SAAK+yT,UAAL,GAAkB,IAAI7yT,WAAJ,CAAgB4yT,YAAY,GAAG,CAA/B,CAAlB;AACA,SAAKE,UAAL,GAAkB,IAAI52T,UAAJ,CAAe02T,YAAY,GAAG,CAA9B,CAAlB,CATgB,CAWhB;;AACA,SAAKG,SAAL,GAAiBp7T,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACqC,IAAL,CAAU8F,CAAV,CAAV,CAAjB;AACA,SAAKkzT,SAAL,GAAiB,IAAIhzT,WAAJ,CAAgBF,CAAhB,CAAjB,CAbgB,CAaqB;;AACrC,SAAKmzT,SAAL,GAAiB,IAAIjzT,WAAJ,CAAgBF,CAAhB,CAAjB,CAdgB,CAcqB;;AACrC,SAAKozT,QAAL,GAAgB,IAAIlzT,WAAJ,CAAgBF,CAAhB,CAAhB,CAfgB,CAeoB;;AACpC,SAAKqzT,SAAL,GAAiB,IAAIj3T,UAAJ,CAAe,KAAK62T,SAApB,EAA+B3wT,IAA/B,CAAoC,CAAC,CAArC,CAAjB,CAhBgB,CAgB0C;AAE1D;;AACA,SAAKgxT,IAAL,GAAY,IAAIpzT,WAAJ,CAAgBF,CAAhB,CAAZ;AACA,SAAKuzT,MAAL,GAAc,IAAIx8G,YAAJ,CAAiB/2M,CAAjB,CAAd;AAEA,SAAKghF,MAAL;AACH;;AAEDA,EAAAA,MAAM,GAAG;AACL,UAAM;AAAClzC,MAAAA,MAAD;AAASolR,MAAAA,SAAS,EAAEM,QAApB;AAA8BL,MAAAA,SAAS,EAAEM,QAAzC;AAAmDL,MAAAA,QAAQ,EAAEM,OAA7D;AAAsEL,MAAAA,SAAS,EAAEM;AAAjF,QAA8F,IAApG;AACA,UAAM3zT,CAAC,GAAG8tC,MAAM,CAAC18C,MAAP,IAAiB,CAA3B,CAFK,CAIL;;AACA,QAAIuvO,IAAI,GAAG/mO,QAAX;AACA,QAAIg6T,IAAI,GAAGh6T,QAAX;AACA,QAAIgnO,IAAI,GAAG,CAAChnO,QAAZ;AACA,QAAI2vT,IAAI,GAAG,CAAC3vT,QAAZ;;AAEA,SAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,YAAMmG,CAAC,GAAG61C,MAAM,CAAC,IAAIh8C,CAAL,CAAhB;AACA,YAAM0kB,CAAC,GAAGs3B,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAhB;AACA,UAAImG,CAAC,GAAG0oO,IAAR,EAAcA,IAAI,GAAG1oO,CAAP;AACd,UAAIue,CAAC,GAAGo9S,IAAR,EAAcA,IAAI,GAAGp9S,CAAP;AACd,UAAIve,CAAC,GAAG2oO,IAAR,EAAcA,IAAI,GAAG3oO,CAAP;AACd,UAAIue,CAAC,GAAG+yS,IAAR,EAAcA,IAAI,GAAG/yS,CAAP;AACd,WAAK88S,IAAL,CAAUxhU,CAAV,IAAeA,CAAf;AACH;;AACD,UAAMihP,EAAE,GAAG,CAACpS,IAAI,GAAGC,IAAR,IAAgB,CAA3B;AACA,UAAMoS,EAAE,GAAG,CAAC4gF,IAAI,GAAGrK,IAAR,IAAgB,CAA3B;AAEA,QAAIsK,OAAO,GAAGj6T,QAAd;AACA,QAAI44F,EAAJ,EAAQ23G,EAAR,EAAY2pH,EAAZ,CAvBK,CAyBL;;AACA,SAAK,IAAIhiU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,YAAM6M,CAAC,GAAGu8N,IAAI,CAAC6X,EAAD,EAAKC,EAAL,EAASllM,MAAM,CAAC,IAAIh8C,CAAL,CAAf,EAAwBg8C,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAA9B,CAAd;;AACA,UAAI6M,CAAC,GAAGk1T,OAAR,EAAiB;AACbrhO,QAAAA,EAAE,GAAG1gG,CAAL;AACA+hU,QAAAA,OAAO,GAAGl1T,CAAV;AACH;AACJ;;AACD,UAAMo1T,GAAG,GAAGjmR,MAAM,CAAC,IAAI0kD,EAAL,CAAlB;AACA,UAAMwhO,GAAG,GAAGlmR,MAAM,CAAC,IAAI0kD,EAAJ,GAAS,CAAV,CAAlB;AAEAqhO,IAAAA,OAAO,GAAGj6T,QAAV,CApCK,CAsCL;;AACA,SAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,UAAIA,CAAC,KAAK0gG,EAAV,EAAc;AACd,YAAM7zF,CAAC,GAAGu8N,IAAI,CAAC64F,GAAD,EAAMC,GAAN,EAAWlmR,MAAM,CAAC,IAAIh8C,CAAL,CAAjB,EAA0Bg8C,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAhC,CAAd;;AACA,UAAI6M,CAAC,GAAGk1T,OAAJ,IAAel1T,CAAC,GAAG,CAAvB,EAA0B;AACtBwrM,QAAAA,EAAE,GAAGr4M,CAAL;AACA+hU,QAAAA,OAAO,GAAGl1T,CAAV;AACH;AACJ;;AACD,QAAIs1T,GAAG,GAAGnmR,MAAM,CAAC,IAAIq8J,EAAL,CAAhB;AACA,QAAI+pH,GAAG,GAAGpmR,MAAM,CAAC,IAAIq8J,EAAJ,GAAS,CAAV,CAAhB;AAEA,QAAIgqH,SAAS,GAAGv6T,QAAhB,CAlDK,CAoDL;;AACA,SAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,UAAIA,CAAC,KAAK0gG,EAAN,IAAY1gG,CAAC,KAAKq4M,EAAtB,EAA0B;AAC1B,YAAMrqM,CAAC,GAAGs0T,YAAY,CAACL,GAAD,EAAMC,GAAN,EAAWC,GAAX,EAAgBC,GAAhB,EAAqBpmR,MAAM,CAAC,IAAIh8C,CAAL,CAA3B,EAAoCg8C,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAA1C,CAAtB;;AACA,UAAIgO,CAAC,GAAGq0T,SAAR,EAAmB;AACfL,QAAAA,EAAE,GAAGhiU,CAAL;AACAqiU,QAAAA,SAAS,GAAGr0T,CAAZ;AACH;AACJ;;AACD,QAAIu0T,GAAG,GAAGvmR,MAAM,CAAC,IAAIgmR,EAAL,CAAhB;AACA,QAAIQ,GAAG,GAAGxmR,MAAM,CAAC,IAAIgmR,EAAJ,GAAS,CAAV,CAAhB;;AAEA,QAAIK,SAAS,KAAKv6T,QAAlB,EAA4B;AACxB;AACA;AACA,WAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,aAAKyhU,MAAL,CAAYzhU,CAAZ,IAAkBg8C,MAAM,CAAC,IAAIh8C,CAAL,CAAN,GAAgBg8C,MAAM,CAAC,CAAD,CAAvB,IAAgCA,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAN,GAAoBg8C,MAAM,CAAC,CAAD,CAA3E;AACH;;AACDymR,MAAAA,SAAS,CAAC,KAAKjB,IAAN,EAAY,KAAKC,MAAjB,EAAyB,CAAzB,EAA4BvzT,CAAC,GAAG,CAAhC,CAAT;AACA,YAAMw0T,IAAI,GAAG,IAAIt0T,WAAJ,CAAgBF,CAAhB,CAAb;AACA,UAAIjE,CAAC,GAAG,CAAR;;AACA,WAAK,IAAIjK,CAAC,GAAG,CAAR,EAAWu1M,EAAE,GAAG,CAACztM,QAAtB,EAAgC9H,CAAC,GAAGkO,CAApC,EAAuClO,CAAC,EAAxC,EAA4C;AACxC,cAAMiT,EAAE,GAAG,KAAKuuT,IAAL,CAAUxhU,CAAV,CAAX;;AACA,YAAI,KAAKyhU,MAAL,CAAYxuT,EAAZ,IAAkBsiM,EAAtB,EAA0B;AACtBmtH,UAAAA,IAAI,CAACz4T,CAAC,EAAF,CAAJ,GAAYgJ,EAAZ;AACAsiM,UAAAA,EAAE,GAAG,KAAKksH,MAAL,CAAYxuT,EAAZ,CAAL;AACH;AACJ;;AACD,WAAKyvT,IAAL,GAAYA,IAAI,CAACvqR,QAAL,CAAc,CAAd,EAAiBluC,CAAjB,CAAZ;AACA,WAAK04T,SAAL,GAAiB,IAAIv0T,WAAJ,CAAgB,CAAhB,CAAjB;AACA,WAAKw0T,SAAL,GAAiB,IAAIx0T,WAAJ,CAAgB,CAAhB,CAAjB;AACA;AACH,KApFI,CAsFL;;;AACA,QAAI6jQ,MAAM,CAACgwD,GAAD,EAAMC,GAAN,EAAWC,GAAX,EAAgBC,GAAhB,EAAqBG,GAArB,EAA0BC,GAA1B,CAAV,EAA0C;AACtC,YAAMxiU,CAAC,GAAGq4M,EAAV;AACA,YAAMlyM,CAAC,GAAGg8T,GAAV;AACA,YAAMz9S,CAAC,GAAG09S,GAAV;AACA/pH,MAAAA,EAAE,GAAG2pH,EAAL;AACAG,MAAAA,GAAG,GAAGI,GAAN;AACAH,MAAAA,GAAG,GAAGI,GAAN;AACAR,MAAAA,EAAE,GAAGhiU,CAAL;AACAuiU,MAAAA,GAAG,GAAGp8T,CAAN;AACAq8T,MAAAA,GAAG,GAAG99S,CAAN;AACH;;AAED,UAAMw7I,MAAM,GAAG2iK,YAAY,CAACZ,GAAD,EAAMC,GAAN,EAAWC,GAAX,EAAgBC,GAAhB,EAAqBG,GAArB,EAA0BC,GAA1B,CAA3B;AACA,SAAKM,GAAL,GAAW5iK,MAAM,CAAC/5J,CAAlB;AACA,SAAK48T,GAAL,GAAW7iK,MAAM,CAACx7I,CAAlB;;AAEA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AACxB,WAAKyhU,MAAL,CAAYzhU,CAAZ,IAAiBopO,IAAI,CAACptL,MAAM,CAAC,IAAIh8C,CAAL,CAAP,EAAgBg8C,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAtB,EAAmCkgK,MAAM,CAAC/5J,CAA1C,EAA6C+5J,MAAM,CAACx7I,CAApD,CAArB;AACH,KAzGI,CA2GL;;;AACA+9S,IAAAA,SAAS,CAAC,KAAKjB,IAAN,EAAY,KAAKC,MAAjB,EAAyB,CAAzB,EAA4BvzT,CAAC,GAAG,CAAhC,CAAT,CA5GK,CA8GL;;AACA,SAAK80T,UAAL,GAAkBtiO,EAAlB;AACA,QAAIuiO,QAAQ,GAAG,CAAf;AAEAtB,IAAAA,QAAQ,CAACjhO,EAAD,CAAR,GAAeghO,QAAQ,CAACM,EAAD,CAAR,GAAe3pH,EAA9B;AACAspH,IAAAA,QAAQ,CAACtpH,EAAD,CAAR,GAAeqpH,QAAQ,CAAChhO,EAAD,CAAR,GAAeshO,EAA9B;AACAL,IAAAA,QAAQ,CAACK,EAAD,CAAR,GAAeN,QAAQ,CAACrpH,EAAD,CAAR,GAAe33G,EAA9B;AAEAkhO,IAAAA,OAAO,CAAClhO,EAAD,CAAP,GAAc,CAAd;AACAkhO,IAAAA,OAAO,CAACvpH,EAAD,CAAP,GAAc,CAAd;AACAupH,IAAAA,OAAO,CAACI,EAAD,CAAP,GAAc,CAAd;AAEAH,IAAAA,QAAQ,CAACrxT,IAAT,CAAc,CAAC,CAAf;AACAqxT,IAAAA,QAAQ,CAAC,KAAKqB,QAAL,CAAcjB,GAAd,EAAmBC,GAAnB,CAAD,CAAR,GAAoCxhO,EAApC;AACAmhO,IAAAA,QAAQ,CAAC,KAAKqB,QAAL,CAAcf,GAAd,EAAmBC,GAAnB,CAAD,CAAR,GAAoC/pH,EAApC;AACAwpH,IAAAA,QAAQ,CAAC,KAAKqB,QAAL,CAAcX,GAAd,EAAmBC,GAAnB,CAAD,CAAR,GAAoCR,EAApC;AAEA,SAAKmB,YAAL,GAAoB,CAApB;;AACA,SAAKC,YAAL,CAAkB1iO,EAAlB,EAAsB23G,EAAtB,EAA0B2pH,EAA1B,EAA8B,CAAC,CAA/B,EAAkC,CAAC,CAAnC,EAAsC,CAAC,CAAvC;;AAEA,SAAK,IAAI1kT,CAAC,GAAG,CAAR,EAAWiyL,EAAX,EAAeo6C,EAApB,EAAwBrsO,CAAC,GAAG,KAAKkkT,IAAL,CAAUliU,MAAtC,EAA8Cge,CAAC,EAA/C,EAAmD;AAC/C,YAAMtd,CAAC,GAAG,KAAKwhU,IAAL,CAAUlkT,CAAV,CAAV;AACA,YAAMnX,CAAC,GAAG61C,MAAM,CAAC,IAAIh8C,CAAL,CAAhB;AACA,YAAM0kB,CAAC,GAAGs3B,MAAM,CAAC,IAAIh8C,CAAJ,GAAQ,CAAT,CAAhB,CAH+C,CAK/C;;AACA,UAAIsd,CAAC,GAAG,CAAJ,IAASvX,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGopM,EAAb,KAAoBkkC,OAA7B,IAAwC1tO,IAAI,CAACiT,GAAL,CAAS0L,CAAC,GAAGilO,EAAb,KAAoBlW,OAAhE,EAAyE;AACzElkC,MAAAA,EAAE,GAAGppM,CAAL;AACAwjP,MAAAA,EAAE,GAAGjlO,CAAL,CAR+C,CAU/C;;AACA,UAAI1kB,CAAC,KAAK0gG,EAAN,IAAY1gG,CAAC,KAAKq4M,EAAlB,IAAwBr4M,CAAC,KAAKgiU,EAAlC,EAAsC,SAXS,CAa/C;;AACA,UAAIl2T,KAAK,GAAG,CAAZ;;AACA,WAAK,IAAI7B,CAAC,GAAG,CAAR,EAAWhG,GAAG,GAAG,KAAKi/T,QAAL,CAAc/8T,CAAd,EAAiBue,CAAjB,CAAtB,EAA2Cza,CAAC,GAAG,KAAKk3T,SAApD,EAA+Dl3T,CAAC,EAAhE,EAAoE;AAChE6B,QAAAA,KAAK,GAAG+1T,QAAQ,CAAC,CAAC59T,GAAG,GAAGgG,CAAP,IAAY,KAAKk3T,SAAlB,CAAhB;AACA,YAAIr1T,KAAK,KAAK,CAAC,CAAX,IAAgBA,KAAK,KAAK61T,QAAQ,CAAC71T,KAAD,CAAtC,EAA+C;AAClD;;AAEDA,MAAAA,KAAK,GAAG41T,QAAQ,CAAC51T,KAAD,CAAhB;AACA,UAAIpN,CAAC,GAAGoN,KAAR;AAAA,UAAe4rF,CAAf;;AACA,aAAOA,CAAC,GAAGiqO,QAAQ,CAACjjU,CAAD,CAAZ,EAAiB,CAACuzQ,MAAM,CAAC9rQ,CAAD,EAAIue,CAAJ,EAAOs3B,MAAM,CAAC,IAAIt9C,CAAL,CAAb,EAAsBs9C,MAAM,CAAC,IAAIt9C,CAAJ,GAAQ,CAAT,CAA5B,EAAyCs9C,MAAM,CAAC,IAAI07C,CAAL,CAA/C,EAAwD17C,MAAM,CAAC,IAAI07C,CAAJ,GAAQ,CAAT,CAA9D,CAA/B,EAA2G;AACvGh5F,QAAAA,CAAC,GAAGg5F,CAAJ;;AACA,YAAIh5F,CAAC,KAAKoN,KAAV,EAAiB;AACbpN,UAAAA,CAAC,GAAG,CAAC,CAAL;AACA;AACH;AACJ;;AACD,UAAIA,CAAC,KAAK,CAAC,CAAX,EAAc,SA7BiC,CA6BvB;AAExB;;AACA,UAAIgF,CAAC,GAAG,KAAK0/T,YAAL,CAAkB1kU,CAAlB,EAAqBsB,CAArB,EAAwB2hU,QAAQ,CAACjjU,CAAD,CAAhC,EAAqC,CAAC,CAAtC,EAAyC,CAAC,CAA1C,EAA6CkjU,OAAO,CAACljU,CAAD,CAApD,CAAR,CAhC+C,CAkC/C;;;AACAkjU,MAAAA,OAAO,CAAC5hU,CAAD,CAAP,GAAa,KAAKqjU,SAAL,CAAe3/T,CAAC,GAAG,CAAnB,CAAb;AACAk+T,MAAAA,OAAO,CAACljU,CAAD,CAAP,GAAagF,CAAb,CApC+C,CAoC/B;;AAChBu/T,MAAAA,QAAQ,GArCuC,CAuC/C;;AACA,UAAI/0T,CAAC,GAAGyzT,QAAQ,CAACjjU,CAAD,CAAhB;;AACA,aAAOg5F,CAAC,GAAGiqO,QAAQ,CAACzzT,CAAD,CAAZ,EAAiB+jQ,MAAM,CAAC9rQ,CAAD,EAAIue,CAAJ,EAAOs3B,MAAM,CAAC,IAAI9tC,CAAL,CAAb,EAAsB8tC,MAAM,CAAC,IAAI9tC,CAAJ,GAAQ,CAAT,CAA5B,EAAyC8tC,MAAM,CAAC,IAAI07C,CAAL,CAA/C,EAAwD17C,MAAM,CAAC,IAAI07C,CAAJ,GAAQ,CAAT,CAA9D,CAA9B,EAA0G;AACtGh0F,QAAAA,CAAC,GAAG,KAAK0/T,YAAL,CAAkBl1T,CAAlB,EAAqBlO,CAArB,EAAwB03F,CAAxB,EAA2BkqO,OAAO,CAAC5hU,CAAD,CAAlC,EAAuC,CAAC,CAAxC,EAA2C4hU,OAAO,CAAC1zT,CAAD,CAAlD,CAAJ;AACA0zT,QAAAA,OAAO,CAAC5hU,CAAD,CAAP,GAAa,KAAKqjU,SAAL,CAAe3/T,CAAC,GAAG,CAAnB,CAAb;AACAi+T,QAAAA,QAAQ,CAACzzT,CAAD,CAAR,GAAcA,CAAd,CAHsG,CAGrF;;AACjB+0T,QAAAA,QAAQ;AACR/0T,QAAAA,CAAC,GAAGwpF,CAAJ;AACH,OA/C8C,CAiD/C;;;AACA,UAAIh5F,CAAC,KAAKoN,KAAV,EAAiB;AACb,eAAO4rF,CAAC,GAAGgqO,QAAQ,CAAChjU,CAAD,CAAZ,EAAiBuzQ,MAAM,CAAC9rQ,CAAD,EAAIue,CAAJ,EAAOs3B,MAAM,CAAC,IAAI07C,CAAL,CAAb,EAAsB17C,MAAM,CAAC,IAAI07C,CAAJ,GAAQ,CAAT,CAA5B,EAAyC17C,MAAM,CAAC,IAAIt9C,CAAL,CAA/C,EAAwDs9C,MAAM,CAAC,IAAIt9C,CAAJ,GAAQ,CAAT,CAA9D,CAA9B,EAA0G;AACtGgF,UAAAA,CAAC,GAAG,KAAK0/T,YAAL,CAAkB1rO,CAAlB,EAAqB13F,CAArB,EAAwBtB,CAAxB,EAA2B,CAAC,CAA5B,EAA+BkjU,OAAO,CAACljU,CAAD,CAAtC,EAA2CkjU,OAAO,CAAClqO,CAAD,CAAlD,CAAJ;;AACA,eAAK2rO,SAAL,CAAe3/T,CAAC,GAAG,CAAnB;;AACAk+T,UAAAA,OAAO,CAAClqO,CAAD,CAAP,GAAah0F,CAAb;AACAi+T,UAAAA,QAAQ,CAACjjU,CAAD,CAAR,GAAcA,CAAd,CAJsG,CAIrF;;AACjBukU,UAAAA,QAAQ;AACRvkU,UAAAA,CAAC,GAAGg5F,CAAJ;AACH;AACJ,OA3D8C,CA6D/C;;;AACA,WAAKsrO,UAAL,GAAkBtB,QAAQ,CAAC1hU,CAAD,CAAR,GAActB,CAAhC;AACAijU,MAAAA,QAAQ,CAACjjU,CAAD,CAAR,GAAcgjU,QAAQ,CAACxzT,CAAD,CAAR,GAAclO,CAA5B;AACA2hU,MAAAA,QAAQ,CAAC3hU,CAAD,CAAR,GAAckO,CAAd,CAhE+C,CAkE/C;;AACA2zT,MAAAA,QAAQ,CAAC,KAAKqB,QAAL,CAAc/8T,CAAd,EAAiBue,CAAjB,CAAD,CAAR,GAAgC1kB,CAAhC;AACA6hU,MAAAA,QAAQ,CAAC,KAAKqB,QAAL,CAAclnR,MAAM,CAAC,IAAIt9C,CAAL,CAApB,EAA6Bs9C,MAAM,CAAC,IAAIt9C,CAAJ,GAAQ,CAAT,CAAnC,CAAD,CAAR,GAA4DA,CAA5D;AACH;;AAED,SAAKgkU,IAAL,GAAY,IAAIt0T,WAAJ,CAAgB60T,QAAhB,CAAZ;;AACA,SAAK,IAAIjjU,CAAC,GAAG,CAAR,EAAWtB,CAAC,GAAG,KAAKskU,UAAzB,EAAqChjU,CAAC,GAAGijU,QAAzC,EAAmDjjU,CAAC,EAApD,EAAwD;AACpD,WAAK0iU,IAAL,CAAU1iU,CAAV,IAAetB,CAAf;AACAA,MAAAA,CAAC,GAAGijU,QAAQ,CAACjjU,CAAD,CAAZ;AACH,KA7MI,CA+ML;;;AACA,SAAKikU,SAAL,GAAiB,KAAK1B,UAAL,CAAgB9oR,QAAhB,CAAyB,CAAzB,EAA4B,KAAKgrR,YAAjC,CAAjB;AACA,SAAKP,SAAL,GAAiB,KAAK1B,UAAL,CAAgB/oR,QAAhB,CAAyB,CAAzB,EAA4B,KAAKgrR,YAAjC,CAAjB;AACH;;AAEDD,EAAAA,QAAQ,CAAC/8T,CAAD,EAAIue,CAAJ,EAAO;AACX,WAAO3e,IAAI,CAAC+H,KAAL,CAAWw1T,WAAW,CAACn9T,CAAC,GAAG,KAAK28T,GAAV,EAAep+S,CAAC,GAAG,KAAKq+S,GAAxB,CAAX,GAA0C,KAAK5B,SAA1D,IAAuE,KAAKA,SAAnF;AACH;;AAEDkC,EAAAA,SAAS,CAACn8T,CAAD,EAAI;AACT,UAAM;AAAC+5T,MAAAA,UAAU,EAAE0B,SAAb;AAAwBzB,MAAAA,UAAU,EAAE0B,SAApC;AAA+C5mR,MAAAA;AAA/C,QAAyD,IAA/D;AAEA,QAAIh8C,CAAC,GAAG,CAAR;AACA,QAAI6hM,EAAE,GAAG,CAAT,CAJS,CAMT;;AACA,WAAO,IAAP,EAAa;AACT,YAAM9zL,CAAC,GAAG60T,SAAS,CAAC17T,CAAD,CAAnB;AAEA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACY,YAAM+nO,EAAE,GAAG/nO,CAAC,GAAGA,CAAC,GAAG,CAAnB;AACA26L,MAAAA,EAAE,GAAGotC,EAAE,GAAG,CAAC/nO,CAAC,GAAG,CAAL,IAAU,CAApB;;AAEA,UAAI6G,CAAC,KAAK,CAAC,CAAX,EAAc;AAAE;AACZ,YAAI/N,CAAC,KAAK,CAAV,EAAa;AACbkH,QAAAA,CAAC,GAAGw5T,UAAU,CAAC,EAAE1gU,CAAH,CAAd;AACA;AACH;;AAED,YAAM6zO,EAAE,GAAG9lO,CAAC,GAAGA,CAAC,GAAG,CAAnB;AACA,YAAMw1T,EAAE,GAAGt0F,EAAE,GAAG,CAAC/nO,CAAC,GAAG,CAAL,IAAU,CAA1B;AACA,YAAM0xP,EAAE,GAAG/kB,EAAE,GAAG,CAAC9lO,CAAC,GAAG,CAAL,IAAU,CAA1B;AAEA,YAAMm0M,EAAE,GAAGygH,SAAS,CAAC9gI,EAAD,CAApB;AACA,YAAMgN,EAAE,GAAG8zH,SAAS,CAACz7T,CAAD,CAApB;AACA,YAAMwmQ,EAAE,GAAGi1D,SAAS,CAACY,EAAD,CAApB;AACA,YAAMxuM,EAAE,GAAG4tM,SAAS,CAAC/pE,EAAD,CAApB;AAEA,YAAM4qE,OAAO,GAAGC,QAAQ,CACpBznR,MAAM,CAAC,IAAIkmK,EAAL,CADc,EACJlmK,MAAM,CAAC,IAAIkmK,EAAJ,GAAS,CAAV,CADF,EAEpBlmK,MAAM,CAAC,IAAI6yJ,EAAL,CAFc,EAEJ7yJ,MAAM,CAAC,IAAI6yJ,EAAJ,GAAS,CAAV,CAFF,EAGpB7yJ,MAAM,CAAC,IAAI0xN,EAAL,CAHc,EAGJ1xN,MAAM,CAAC,IAAI0xN,EAAJ,GAAS,CAAV,CAHF,EAIpB1xN,MAAM,CAAC,IAAI+4E,EAAL,CAJc,EAIJ/4E,MAAM,CAAC,IAAI+4E,EAAJ,GAAS,CAAV,CAJF,CAAxB;;AAMA,UAAIyuM,OAAJ,EAAa;AACTb,QAAAA,SAAS,CAACz7T,CAAD,CAAT,GAAe6tH,EAAf;AACA4tM,QAAAA,SAAS,CAAC50T,CAAD,CAAT,GAAem0M,EAAf;AAEA,cAAMwhH,GAAG,GAAGd,SAAS,CAAChqE,EAAD,CAArB,CAJS,CAMT;;AACA,YAAI8qE,GAAG,KAAK,CAAC,CAAb,EAAgB;AACZ,cAAIhlU,CAAC,GAAG,KAAKskU,UAAb;;AACA,aAAG;AACC,gBAAI,KAAK1B,QAAL,CAAc5iU,CAAd,MAAqBk6P,EAAzB,EAA6B;AACzB,mBAAK0oE,QAAL,CAAc5iU,CAAd,IAAmBwI,CAAnB;AACA;AACH;;AACDxI,YAAAA,CAAC,GAAG,KAAK0iU,SAAL,CAAe1iU,CAAf,CAAJ;AACH,WAND,QAMSA,CAAC,KAAK,KAAKskU,UANpB;AAOH;;AACD,aAAKW,KAAL,CAAWz8T,CAAX,EAAcw8T,GAAd;;AACA,aAAKC,KAAL,CAAW51T,CAAX,EAAc60T,SAAS,CAAC/gI,EAAD,CAAvB;;AACA,aAAK8hI,KAAL,CAAW9hI,EAAX,EAAe+2D,EAAf;;AAEA,cAAM4X,EAAE,GAAG38B,EAAE,GAAG,CAAC9lO,CAAC,GAAG,CAAL,IAAU,CAA1B,CArBS,CAuBT;;AACA,YAAI/N,CAAC,GAAG0gU,UAAU,CAACphU,MAAnB,EAA2B;AACvBohU,UAAAA,UAAU,CAAC1gU,CAAC,EAAF,CAAV,GAAkBwwQ,EAAlB;AACH;AACJ,OA3BD,MA2BO;AACH,YAAIxwQ,CAAC,KAAK,CAAV,EAAa;AACbkH,QAAAA,CAAC,GAAGw5T,UAAU,CAAC,EAAE1gU,CAAH,CAAd;AACH;AACJ;;AAED,WAAO6hM,EAAP;AACH;;AAED8hI,EAAAA,KAAK,CAACz8T,CAAD,EAAI6G,CAAJ,EAAO;AACR,SAAKmzT,UAAL,CAAgBh6T,CAAhB,IAAqB6G,CAArB;AACA,QAAIA,CAAC,KAAK,CAAC,CAAX,EAAc,KAAKmzT,UAAL,CAAgBnzT,CAAhB,IAAqB7G,CAArB;AACjB,GAxV2B,CA0V5B;;;AACAk8T,EAAAA,YAAY,CAAC1iO,EAAD,EAAK23G,EAAL,EAAS2pH,EAAT,EAAa96T,CAAb,EAAgB6G,CAAhB,EAAmBtB,CAAnB,EAAsB;AAC9B,UAAM/I,CAAC,GAAG,KAAKy/T,YAAf;AAEA,SAAKlC,UAAL,CAAgBv9T,CAAhB,IAAqBg9F,EAArB;AACA,SAAKugO,UAAL,CAAgBv9T,CAAC,GAAG,CAApB,IAAyB20M,EAAzB;AACA,SAAK4oH,UAAL,CAAgBv9T,CAAC,GAAG,CAApB,IAAyBs+T,EAAzB;;AAEA,SAAK2B,KAAL,CAAWjgU,CAAX,EAAcwD,CAAd;;AACA,SAAKy8T,KAAL,CAAWjgU,CAAC,GAAG,CAAf,EAAkBqK,CAAlB;;AACA,SAAK41T,KAAL,CAAWjgU,CAAC,GAAG,CAAf,EAAkB+I,CAAlB;;AAEA,SAAK02T,YAAL,IAAqB,CAArB;AAEA,WAAOz/T,CAAP;AACH;;AAzW2B,EA4WhC;;;;;AACA,SAAS4/T,WAAT,CAAqBx3S,EAArB,EAAyBhH,EAAzB,EAA6B;AACzB,QAAMwf,CAAC,GAAGxY,EAAE,IAAI/lB,IAAI,CAACiT,GAAL,CAAS8S,EAAT,IAAe/lB,IAAI,CAACiT,GAAL,CAAS8L,EAAT,CAAnB,CAAZ;AACA,SAAO,CAACA,EAAE,GAAG,CAAL,GAAS,IAAIwf,CAAb,GAAiB,IAAIA,CAAtB,IAA2B,CAAlC,CAFyB,CAEY;AACxC;;AAED,SAAS8kM,IAAT,CAAcz/N,EAAd,EAAkBq4O,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8B;AAC1B,QAAMp2N,EAAE,GAAGniB,EAAE,GAAGs4O,EAAhB;AACA,QAAMn9N,EAAE,GAAGk9N,EAAE,GAAGE,EAAhB;AACA,SAAOp2N,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAtB;AACH,EAED;;;AACA,SAAS8+S,YAAT,CAAsB96E,EAAtB,EAA0BE,EAA1B,EAA8BkkB,EAA9B,EAAkCC,EAAlC,EAAsC02D,EAAtC,EAA0CC,EAA1C,EAA8C;AAC1C,QAAMhyT,CAAC,GAAG,CAACq7P,EAAE,GAAGnkB,EAAN,KAAa66E,EAAE,GAAG/6E,EAAlB,CAAV;AACA,QAAM96O,CAAC,GAAG,CAACk/P,EAAE,GAAGpkB,EAAN,KAAag7E,EAAE,GAAG96E,EAAlB,CAAV;AACA,SAAOjjP,IAAI,CAACiT,GAAL,CAASlH,CAAC,GAAG9D,CAAb,KAAmB,yBAAyBjI,IAAI,CAACiT,GAAL,CAASlH,CAAC,GAAG9D,CAAb,CAA5C,GAA8D8D,CAAC,GAAG9D,CAAlE,GAAsE,CAA7E;AACH,EAED;;;AACA,SAASikQ,MAAT,CAAgB/E,EAAhB,EAAoBC,EAApB,EAAwB02D,EAAxB,EAA4BC,EAA5B,EAAgCh7E,EAAhC,EAAoCE,EAApC,EAAwC;AACpC,QAAMvwO,IAAI,GAAGmrT,YAAY,CAAC96E,EAAD,EAAKE,EAAL,EAASkkB,EAAT,EAAaC,EAAb,EAAiB02D,EAAjB,EAAqBC,EAArB,CAAZ,IACbF,YAAY,CAAC12D,EAAD,EAAKC,EAAL,EAAS02D,EAAT,EAAaC,EAAb,EAAiBh7E,EAAjB,EAAqBE,EAArB,CADC,IAEb46E,YAAY,CAACC,EAAD,EAAKC,EAAL,EAASh7E,EAAT,EAAaE,EAAb,EAAiBkkB,EAAjB,EAAqBC,EAArB,CAFZ;AAGA,SAAO10P,IAAI,GAAG,CAAd;AACH;;AAED,SAASgrT,QAAT,CAAkB95T,EAAlB,EAAsBq4O,EAAtB,EAA0BC,EAA1B,EAA8BC,EAA9B,EAAkCjB,EAAlC,EAAsCC,EAAtC,EAA0C4H,EAA1C,EAA8CE,EAA9C,EAAkD;AAC9C,QAAMl9N,EAAE,GAAGniB,EAAE,GAAGm/O,EAAhB;AACA,QAAMhkO,EAAE,GAAGk9N,EAAE,GAAGgH,EAAhB;AACA,QAAMzkO,EAAE,GAAG09N,EAAE,GAAG6G,EAAhB;AACA,QAAMqsC,EAAE,GAAGjzC,EAAE,GAAG8G,EAAhB;AACA,QAAM6iC,EAAE,GAAG5qC,EAAE,GAAG6H,EAAhB;AACA,QAAMgjC,EAAE,GAAG5qC,EAAE,GAAG8H,EAAhB;AAEA,QAAMrH,EAAE,GAAG71N,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1B;AACA,QAAMi/S,EAAE,GAAGx/S,EAAE,GAAGA,EAAL,GAAU4wQ,EAAE,GAAGA,EAA1B;AACA,QAAMse,EAAE,GAAG5nB,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAA1B;AAEA,SAAOhgQ,EAAE,IAAIqpQ,EAAE,GAAGse,EAAL,GAAUswB,EAAE,GAAGj4C,EAAnB,CAAF,GACAhnQ,EAAE,IAAIP,EAAE,GAAGkvR,EAAL,GAAUswB,EAAE,GAAGl4C,EAAnB,CADF,GAEAlqC,EAAE,IAAIp9N,EAAE,GAAGunQ,EAAL,GAAUqJ,EAAE,GAAGtJ,EAAnB,CAFF,GAE2B,CAFlC;AAGH;;AAED,SAASy2C,YAAT,CAAsB34T,EAAtB,EAA0Bq4O,EAA1B,EAA8BC,EAA9B,EAAkCC,EAAlC,EAAsCjB,EAAtC,EAA0CC,EAA1C,EAA8C;AAC1C,QAAMp1N,EAAE,GAAGm2N,EAAE,GAAGt4O,EAAhB;AACA,QAAMmb,EAAE,GAAGo9N,EAAE,GAAGF,EAAhB;AACA,QAAMz9N,EAAE,GAAG08N,EAAE,GAAGt3O,EAAhB;AACA,QAAMwrR,EAAE,GAAGj0C,EAAE,GAAGc,EAAhB;AAEA,QAAM4W,EAAE,GAAG9sO,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1B;AACA,QAAMk/S,EAAE,GAAGz/S,EAAE,GAAGA,EAAL,GAAU4wQ,EAAE,GAAGA,EAA1B;AACA,QAAMtoR,CAAC,GAAG,OAAOif,EAAE,GAAGqpQ,EAAL,GAAUrwQ,EAAE,GAAGP,EAAtB,CAAV;AAEA,QAAMpe,CAAC,GAAG,CAACgvR,EAAE,GAAGv8B,EAAL,GAAU9zO,EAAE,GAAGk/S,EAAhB,IAAsBn3T,CAAhC;AACA,QAAM6X,CAAC,GAAG,CAACoH,EAAE,GAAGk4S,EAAL,GAAUz/S,EAAE,GAAGq0O,EAAhB,IAAsB/rP,CAAhC;AAEA,SAAO1G,CAAC,GAAGA,CAAJ,GAAQue,CAAC,GAAGA,CAAnB;AACH;;AAED,SAASm+S,YAAT,CAAsBl5T,EAAtB,EAA0Bq4O,EAA1B,EAA8BC,EAA9B,EAAkCC,EAAlC,EAAsCjB,EAAtC,EAA0CC,EAA1C,EAA8C;AAC1C,QAAMp1N,EAAE,GAAGm2N,EAAE,GAAGt4O,EAAhB;AACA,QAAMmb,EAAE,GAAGo9N,EAAE,GAAGF,EAAhB;AACA,QAAMz9N,EAAE,GAAG08N,EAAE,GAAGt3O,EAAhB;AACA,QAAMwrR,EAAE,GAAGj0C,EAAE,GAAGc,EAAhB;AAEA,QAAM4W,EAAE,GAAG9sO,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1B;AACA,QAAMk/S,EAAE,GAAGz/S,EAAE,GAAGA,EAAL,GAAU4wQ,EAAE,GAAGA,EAA1B;AACA,QAAMtoR,CAAC,GAAG,OAAOif,EAAE,GAAGqpQ,EAAL,GAAUrwQ,EAAE,GAAGP,EAAtB,CAAV;AAEA,QAAMpe,CAAC,GAAGwD,EAAE,GAAG,CAACwrR,EAAE,GAAGv8B,EAAL,GAAU9zO,EAAE,GAAGk/S,EAAhB,IAAsBn3T,CAArC;AACA,QAAM6X,CAAC,GAAGs9N,EAAE,GAAG,CAACl2N,EAAE,GAAGk4S,EAAL,GAAUz/S,EAAE,GAAGq0O,EAAhB,IAAsB/rP,CAArC;AAEA,SAAO;AAAC1G,IAAAA,CAAD;AAAIue,IAAAA;AAAJ,GAAP;AACH;;AAED,SAAS+9S,SAAT,CAAmB/+I,GAAnB,EAAwBmnD,KAAxB,EAA+B13L,IAA/B,EAAqCC,KAArC,EAA4C;AACxC,MAAIA,KAAK,GAAGD,IAAR,IAAgB,EAApB,EAAwB;AACpB,SAAK,IAAInzC,CAAC,GAAGmzC,IAAI,GAAG,CAApB,EAAuBnzC,CAAC,IAAIozC,KAA5B,EAAmCpzC,CAAC,EAApC,EAAwC;AACpC,YAAM6F,IAAI,GAAG69K,GAAG,CAAC1jL,CAAD,CAAhB;AACA,YAAMikU,QAAQ,GAAGp5F,KAAK,CAAChlO,IAAD,CAAtB;AACA,UAAIoE,CAAC,GAAGjK,CAAC,GAAG,CAAZ;;AACA,aAAOiK,CAAC,IAAIkpC,IAAL,IAAa03L,KAAK,CAACnnD,GAAG,CAACz5K,CAAD,CAAJ,CAAL,GAAgBg6T,QAApC,EAA8CvgJ,GAAG,CAACz5K,CAAC,GAAG,CAAL,CAAH,GAAay5K,GAAG,CAACz5K,CAAC,EAAF,CAAhB;;AAC9Cy5K,MAAAA,GAAG,CAACz5K,CAAC,GAAG,CAAL,CAAH,GAAapE,IAAb;AACH;AACJ,GARD,MAQO;AACH,UAAMwqO,MAAM,GAAIl9L,IAAI,GAAGC,KAAR,IAAkB,CAAjC;AACA,QAAIpzC,CAAC,GAAGmzC,IAAI,GAAG,CAAf;AACA,QAAIlpC,CAAC,GAAGmpC,KAAR;AACAi0K,IAAAA,IAAI,CAAC3jC,GAAD,EAAM2sD,MAAN,EAAcrwO,CAAd,CAAJ;AACA,QAAI6qO,KAAK,CAACnnD,GAAG,CAACvwI,IAAD,CAAJ,CAAL,GAAmB03L,KAAK,CAACnnD,GAAG,CAACtwI,KAAD,CAAJ,CAA5B,EAA0Ci0K,IAAI,CAAC3jC,GAAD,EAAMvwI,IAAN,EAAYC,KAAZ,CAAJ;AAC1C,QAAIy3L,KAAK,CAACnnD,GAAG,CAAC1jL,CAAD,CAAJ,CAAL,GAAgB6qO,KAAK,CAACnnD,GAAG,CAACtwI,KAAD,CAAJ,CAAzB,EAAuCi0K,IAAI,CAAC3jC,GAAD,EAAM1jL,CAAN,EAASozC,KAAT,CAAJ;AACvC,QAAIy3L,KAAK,CAACnnD,GAAG,CAACvwI,IAAD,CAAJ,CAAL,GAAmB03L,KAAK,CAACnnD,GAAG,CAAC1jL,CAAD,CAAJ,CAA5B,EAAsCqnN,IAAI,CAAC3jC,GAAD,EAAMvwI,IAAN,EAAYnzC,CAAZ,CAAJ;AAEtC,UAAM6F,IAAI,GAAG69K,GAAG,CAAC1jL,CAAD,CAAhB;AACA,UAAMikU,QAAQ,GAAGp5F,KAAK,CAAChlO,IAAD,CAAtB;;AACA,WAAO,IAAP,EAAa;AACT,SAAG7F,CAAC,GAAJ,QAAe6qO,KAAK,CAACnnD,GAAG,CAAC1jL,CAAD,CAAJ,CAAL,GAAgBikU,QAA/B;;AACA,SAAGh6T,CAAC,GAAJ,QAAe4gO,KAAK,CAACnnD,GAAG,CAACz5K,CAAD,CAAJ,CAAL,GAAgBg6T,QAA/B;;AACA,UAAIh6T,CAAC,GAAGjK,CAAR,EAAW;AACXqnN,MAAAA,IAAI,CAAC3jC,GAAD,EAAM1jL,CAAN,EAASiK,CAAT,CAAJ;AACH;;AACDy5K,IAAAA,GAAG,CAACvwI,IAAI,GAAG,CAAR,CAAH,GAAgBuwI,GAAG,CAACz5K,CAAD,CAAnB;AACAy5K,IAAAA,GAAG,CAACz5K,CAAD,CAAH,GAASpE,IAAT;;AAEA,QAAIutC,KAAK,GAAGpzC,CAAR,GAAY,CAAZ,IAAiBiK,CAAC,GAAGkpC,IAAzB,EAA+B;AAC3BsvR,MAAAA,SAAS,CAAC/+I,GAAD,EAAMmnD,KAAN,EAAa7qO,CAAb,EAAgBozC,KAAhB,CAAT;AACAqvR,MAAAA,SAAS,CAAC/+I,GAAD,EAAMmnD,KAAN,EAAa13L,IAAb,EAAmBlpC,CAAC,GAAG,CAAvB,CAAT;AACH,KAHD,MAGO;AACHw4T,MAAAA,SAAS,CAAC/+I,GAAD,EAAMmnD,KAAN,EAAa13L,IAAb,EAAmBlpC,CAAC,GAAG,CAAvB,CAAT;AACAw4T,MAAAA,SAAS,CAAC/+I,GAAD,EAAMmnD,KAAN,EAAa7qO,CAAb,EAAgBozC,KAAhB,CAAT;AACH;AACJ;AACJ;;AAED,SAASi0K,IAAT,CAAc7gN,GAAd,EAAmBxG,CAAnB,EAAsBiK,CAAtB,EAAyB;AACrB,QAAMmgC,GAAG,GAAG5jC,GAAG,CAACxG,CAAD,CAAf;AACAwG,EAAAA,GAAG,CAACxG,CAAD,CAAH,GAASwG,GAAG,CAACyD,CAAD,CAAZ;AACAzD,EAAAA,GAAG,CAACyD,CAAD,CAAH,GAASmgC,GAAT;AACH;;AAED,SAASy2R,WAAT,CAAqBv8R,CAArB,EAAwB;AACpB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACH;;AACD,SAASy8R,WAAT,CAAqBz8R,CAArB,EAAwB;AACpB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACH;;;;;;;;AC9eD,MAAM+4C,OAAO,GAAG,IAAhB;;AAEe,MAAM8/J,IAAN,CAAW;AACxBvxO,EAAAA,WAAW,GAAG;AACZ,SAAKwxO,GAAL,GAAW,KAAKC,GAAL,GAAW;AACtB,SAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,IADtB,CADY,CAEgB;;AAC5B,SAAK52N,CAAL,GAAS,EAAT;AACD;;AACD62N,EAAAA,MAAM,CAACr3O,CAAD,EAAIue,CAAJ,EAAO;AACX,SAAKiC,CAAL,IAAW,IAAG,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAAE,IAAG,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAE,EAAnE;AACD;;AACD+4N,EAAAA,SAAS,GAAG;AACV,QAAI,KAAKH,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAKA,GAAL,GAAW,KAAKF,GAAhB,EAAqB,KAAKG,GAAL,GAAW,KAAKF,GAArC;AACA,WAAK12N,CAAL,IAAU,GAAV;AACD;AACF;;AACD+2N,EAAAA,MAAM,CAACv3O,CAAD,EAAIue,CAAJ,EAAO;AACX,SAAKiC,CAAL,IAAW,IAAG,KAAK22N,GAAL,GAAW,CAACn3O,CAAE,IAAG,KAAKo3O,GAAL,GAAW,CAAC74N,CAAE,EAA7C;AACD;;AACDq8L,EAAAA,GAAG,CAAC56M,CAAD,EAAIue,CAAJ,EAAO1W,CAAP,EAAU;AACX7H,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb,EAAgB1W,CAAC,GAAG,CAACA,CAArB;AACA,UAAMqyM,EAAE,GAAGl6M,CAAC,GAAG6H,CAAf;AACA,UAAMsyM,EAAE,GAAG57L,CAAX;AACA,QAAI1W,CAAC,GAAG,CAAR,EAAW,MAAM,IAAIzP,KAAJ,CAAU,iBAAV,CAAN;AACX,QAAI,KAAK++O,GAAL,KAAa,IAAjB,EAAuB,KAAK32N,CAAL,IAAW,IAAG05L,EAAG,IAAGC,EAAG,EAAvB,CAAvB,KACK,IAAIv6M,IAAI,CAACiT,GAAL,CAAS,KAAKskO,GAAL,GAAWj9B,EAApB,IAA0BhjI,OAA1B,IAAqCt3E,IAAI,CAACiT,GAAL,CAAS,KAAKukO,GAAL,GAAWj9B,EAApB,IAA0BjjI,OAAnE,EAA4E,KAAK12D,CAAL,IAAU,MAAM05L,EAAN,GAAW,GAAX,GAAiBC,EAA3B;AACjF,QAAI,CAACtyM,CAAL,EAAQ;AACR,SAAK2Y,CAAL,IAAW,IAAG3Y,CAAE,IAAGA,CAAE,UAAS7H,CAAC,GAAG6H,CAAE,IAAG0W,CAAE,IAAG1W,CAAE,IAAGA,CAAE,UAAS,KAAKsvO,GAAL,GAAWj9B,EAAG,IAAG,KAAKk9B,GAAL,GAAWj9B,EAAG,EAA3F;AACD;;AACDu+B,EAAAA,IAAI,CAAC14O,CAAD,EAAIue,CAAJ,EAAO4nC,CAAP,EAAUC,CAAV,EAAa;AACf,SAAK5lC,CAAL,IAAW,IAAG,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAAE,IAAG,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAE,IAAG,CAAC4nC,CAAE,IAAG,CAACC,CAAE,IAAG,CAACD,CAAE,GAArF;AACD;;AACDtpD,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK2jB,CAAL,IAAU,IAAjB;AACD;;AAjCuB;;;;;;;;;;;ACFX,MAAMg9L,OAAN,CAAc;AAC3B/3M,EAAAA,WAAW,GAAG;AACZ,SAAK+a,CAAL,GAAS,EAAT;AACD;;AACD62N,EAAAA,MAAM,CAACr3O,CAAD,EAAIue,CAAJ,EAAO;AACX,SAAKiC,CAAL,CAAO1mB,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD;;AACD+4N,EAAAA,SAAS,GAAG;AACV,SAAK92N,CAAL,CAAO1mB,IAAP,CAAY,KAAK0mB,CAAL,CAAO,CAAP,EAAUtd,KAAV,EAAZ;AACD;;AACDq0O,EAAAA,MAAM,CAACv3O,CAAD,EAAIue,CAAJ,EAAO;AACX,SAAKiC,CAAL,CAAO1mB,IAAP,CAAY,CAACkG,CAAD,EAAIue,CAAJ,CAAZ;AACD;;AACD1hB,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK2jB,CAAL,CAAOrnB,MAAP,GAAgB,KAAKqnB,CAArB,GAAyB,IAAhC;AACD;;AAf0B;;;;;;;;;;;ACA7B;;AACA;;;;AAEe,MAAMu9S,OAAN,CAAc;AAC3Bt4T,EAAAA,WAAW,CAACu4T,QAAD,EAAW,CAACC,IAAD,EAAOC,IAAP,EAAaC,IAAb,EAAmBC,IAAnB,IAA2B,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,GAAZ,CAAtC,EAAwD;AACjE,QAAI,EAAE,CAACD,IAAI,GAAG,CAACA,IAAT,MAAmBF,IAAI,GAAG,CAACA,IAA3B,CAAF,KAAuC,EAAE,CAACG,IAAI,GAAG,CAACA,IAAT,MAAmBF,IAAI,GAAG,CAACA,IAA3B,CAAF,CAA3C,EAAgF,MAAM,IAAI9lU,KAAJ,CAAU,gBAAV,CAAN;AAChF,SAAK4lU,QAAL,GAAgBA,QAAhB;AACA,SAAKK,cAAL,GAAsB,IAAIv/G,YAAJ,CAAiBk/G,QAAQ,CAAC7iH,MAAT,CAAgBhiN,MAAhB,GAAyB,CAA1C,CAAtB;AACA,SAAKmlU,OAAL,GAAe,IAAIx/G,YAAJ,CAAiBk/G,QAAQ,CAAC7iH,MAAT,CAAgBhiN,MAAhB,GAAyB,CAA1C,CAAf;AACA,SAAKglU,IAAL,GAAYA,IAAZ,EAAkB,KAAKF,IAAL,GAAYA,IAA9B;AACA,SAAKG,IAAL,GAAYA,IAAZ,EAAkB,KAAKF,IAAL,GAAYA,IAA9B;;AACA,SAAKK,KAAL;AACD;;AACDx1O,EAAAA,MAAM,GAAG;AACP,SAAKi1O,QAAL,CAAcj1O,MAAd;;AACA,SAAKw1O,KAAL;;AACA,WAAO,IAAP;AACD;;AACDA,EAAAA,KAAK,GAAG;AACN,UAAM;AAACP,MAAAA,QAAQ,EAAE;AAAC7iH,QAAAA,MAAD;AAASohH,QAAAA,IAAT;AAAeC,QAAAA;AAAf,OAAX;AAAsC8B,MAAAA;AAAtC,QAAiD,IAAvD,CADM,CAGN;;AACA,UAAME,aAAa,GAAG,KAAKA,aAAL,GAAqB,KAAKH,cAAL,CAAoBrsR,QAApB,CAA6B,CAA7B,EAAgCwqR,SAAS,CAACrjU,MAAV,GAAmB,CAAnB,GAAuB,CAAvD,CAA3C;;AACA,SAAK,IAAIU,CAAC,GAAG,CAAR,EAAWiK,CAAC,GAAG,CAAf,EAAkBiE,CAAC,GAAGy0T,SAAS,CAACrjU,MAAhC,EAAwC6G,CAAxC,EAA2Cue,CAAhD,EAAmD1kB,CAAC,GAAGkO,CAAvD,EAA0DlO,CAAC,IAAI,CAAL,EAAQiK,CAAC,IAAI,CAAvE,EAA0E;AACxE,YAAM08E,EAAE,GAAGg8O,SAAS,CAAC3iU,CAAD,CAAT,GAAe,CAA1B;AACA,YAAM4mF,EAAE,GAAG+7O,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CAAT,GAAmB,CAA9B;AACA,YAAMs3P,EAAE,GAAGqrE,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CAAT,GAAmB,CAA9B;AACA,YAAMyyG,EAAE,GAAG6uG,MAAM,CAAC36H,EAAD,CAAjB;AACA,YAAM6rB,EAAE,GAAG8uG,MAAM,CAAC36H,EAAE,GAAG,CAAN,CAAjB;AACA,YAAM7H,EAAE,GAAGwiI,MAAM,CAAC16H,EAAD,CAAjB;AACA,YAAM8rB,EAAE,GAAG4uG,MAAM,CAAC16H,EAAE,GAAG,CAAN,CAAjB;AACA,YAAM84J,EAAE,GAAGp+B,MAAM,CAACg2C,EAAD,CAAjB;AACA,YAAM3X,EAAE,GAAGr+B,MAAM,CAACg2C,EAAE,GAAG,CAAN,CAAjB;AAEA,YAAMxrO,EAAE,GAAGgzD,EAAE,GAAG2zB,EAAhB;AACA,YAAM3tF,EAAE,GAAG4tF,EAAE,GAAGF,EAAhB;AACA,YAAMjuF,EAAE,GAAGm7N,EAAE,GAAGjtI,EAAhB;AACA,YAAM0iL,EAAE,GAAGx1C,EAAE,GAAGntI,EAAhB;AACA,YAAMomJ,EAAE,GAAG9sO,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAA1B;AACA,YAAMk/S,EAAE,GAAGz/S,EAAE,GAAGA,EAAL,GAAU4wQ,EAAE,GAAGA,EAA1B;AACA,YAAM6R,EAAE,GAAG,CAACl7Q,EAAE,GAAGqpQ,EAAL,GAAUrwQ,EAAE,GAAGP,EAAhB,IAAsB,CAAjC;;AAEA,UAAI,CAACyiR,EAAL,EAAS;AACP;AACA7gS,QAAAA,CAAC,GAAG,CAACssG,EAAE,GAAGitI,EAAN,IAAY,CAAZ,GAAgB,MAAMy1C,EAA1B;AACAzwQ,QAAAA,CAAC,GAAG,CAAC8tF,EAAE,GAAGmtI,EAAN,IAAY,CAAZ,GAAgB,MAAMp7N,EAA1B;AACD,OAJD,MAKK,IAAIxe,IAAI,CAACiT,GAAL,CAASguR,EAAT,IAAe,IAAnB,EAAyB;AAC5B;AACA7gS,QAAAA,CAAC,GAAG,CAACssG,EAAE,GAAGitI,EAAN,IAAY,CAAhB;AACAh7N,QAAAA,CAAC,GAAG,CAAC8tF,EAAE,GAAGmtI,EAAN,IAAY,CAAhB;AACD,OAJI,MAIE;AACL,cAAM9yO,CAAC,GAAG,IAAIm6R,EAAd;AACA7gS,QAAAA,CAAC,GAAGssG,EAAE,GAAG,CAAC0iL,EAAE,GAAGv8B,EAAL,GAAU9zO,EAAE,GAAGk/S,EAAhB,IAAsBn3T,CAA/B;AACA6X,QAAAA,CAAC,GAAG8tF,EAAE,GAAG,CAAC1mF,EAAE,GAAGk4S,EAAL,GAAUz/S,EAAE,GAAGq0O,EAAhB,IAAsB/rP,CAA/B;AACD;;AACD83T,MAAAA,aAAa,CAAC16T,CAAD,CAAb,GAAmB9D,CAAnB;AACAw+T,MAAAA,aAAa,CAAC16T,CAAC,GAAG,CAAL,CAAb,GAAuBya,CAAvB;AACD,KAxCK,CA0CN;;;AACA,QAAI6nC,CAAC,GAAGm2Q,IAAI,CAACA,IAAI,CAACpjU,MAAL,GAAc,CAAf,CAAZ;AACA,QAAI4iN,EAAJ;AAAA,QAAQntF,EAAE,GAAGxoE,CAAC,GAAG,CAAjB;AACA,QAAI8zJ,EAAJ;AAAA,QAAQ5tG,EAAE,GAAG6uG,MAAM,CAAC,IAAI/0J,CAAL,CAAnB;AACA,QAAI+zJ,EAAJ;AAAA,QAAQ9tG,EAAE,GAAG8uG,MAAM,CAAC,IAAI/0J,CAAJ,GAAQ,CAAT,CAAnB;AACAk4Q,IAAAA,OAAO,CAACj0T,IAAR,CAAa,CAAb;;AACA,SAAK,IAAIxQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0iU,IAAI,CAACpjU,MAAzB,EAAiC,EAAEU,CAAnC,EAAsC;AACpCusD,MAAAA,CAAC,GAAGm2Q,IAAI,CAAC1iU,CAAD,CAAR;AACAkiN,MAAAA,EAAE,GAAGntF,EAAL,EAASsrF,EAAE,GAAG5tG,EAAd,EAAkB6tG,EAAE,GAAG9tG,EAAvB;AACAuiB,MAAAA,EAAE,GAAGxoE,CAAC,GAAG,CAAT,EAAYkmD,EAAE,GAAG6uG,MAAM,CAAC,IAAI/0J,CAAL,CAAvB,EAAgCimD,EAAE,GAAG8uG,MAAM,CAAC,IAAI/0J,CAAJ,GAAQ,CAAT,CAA3C;AACAk4Q,MAAAA,OAAO,CAACviH,EAAE,GAAG,CAAN,CAAP,GAAkBuiH,OAAO,CAAC1vM,EAAD,CAAP,GAAcurF,EAAE,GAAG9tG,EAArC;AACAiyN,MAAAA,OAAO,CAACviH,EAAE,GAAG,CAAN,CAAP,GAAkBuiH,OAAO,CAAC1vM,EAAE,GAAG,CAAN,CAAP,GAAkBtiB,EAAE,GAAG4tG,EAAzC;AACD;AACF;;AACDyiE,EAAAA,MAAM,CAAC9wG,OAAD,EAAU;AACd,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA,UAAM;AAACivM,MAAAA,QAAQ,EAAE;AAACvB,QAAAA,SAAD;AAAYgC,QAAAA,OAAZ;AAAqBlC,QAAAA;AAArB,OAAX;AAAuCiC,MAAAA,aAAvC;AAAsDF,MAAAA;AAAtD,QAAiE,IAAvE;AACA,QAAI/B,IAAI,CAACpjU,MAAL,IAAe,CAAnB,EAAsB,OAAO,IAAP;;AACtB,SAAK,IAAIU,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG00T,SAAS,CAACtjU,MAA9B,EAAsCU,CAAC,GAAGkO,CAA1C,EAA6C,EAAElO,CAA/C,EAAkD;AAChD,YAAMiK,CAAC,GAAG24T,SAAS,CAAC5iU,CAAD,CAAnB;AACA,UAAIiK,CAAC,GAAGjK,CAAR,EAAW;AACX,YAAM6kU,EAAE,GAAG9+T,IAAI,CAAC+H,KAAL,CAAW9N,CAAC,GAAG,CAAf,IAAoB,CAA/B;AACA,YAAM8kU,EAAE,GAAG/+T,IAAI,CAAC+H,KAAL,CAAW7D,CAAC,GAAG,CAAf,IAAoB,CAA/B;AACA,YAAM2nS,EAAE,GAAG+yB,aAAa,CAACE,EAAD,CAAxB;AACA,YAAMnhB,EAAE,GAAGihB,aAAa,CAACE,EAAE,GAAG,CAAN,CAAxB;AACA,YAAMjhB,EAAE,GAAG+gB,aAAa,CAACG,EAAD,CAAxB;AACA,YAAMjhB,EAAE,GAAG8gB,aAAa,CAACG,EAAE,GAAG,CAAN,CAAxB;;AACA,WAAKC,cAAL,CAAoBnzB,EAApB,EAAwB8R,EAAxB,EAA4BE,EAA5B,EAAgCC,EAAhC,EAAoC7xI,OAApC;AACD;;AACD,QAAIo2E,EAAJ;AAAA,QAAQC,EAAE,GAAGq6E,IAAI,CAACA,IAAI,CAACpjU,MAAL,GAAc,CAAf,CAAjB;;AACA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0iU,IAAI,CAACpjU,MAAzB,EAAiC,EAAEU,CAAnC,EAAsC;AACpCooP,MAAAA,EAAE,GAAGC,EAAL,EAASA,EAAE,GAAGq6E,IAAI,CAAC1iU,CAAD,CAAlB;AACA,YAAM0D,CAAC,GAAGqC,IAAI,CAAC+H,KAAL,CAAW82T,OAAO,CAACv8E,EAAD,CAAP,GAAc,CAAzB,IAA8B,CAAxC;AACA,YAAMliP,CAAC,GAAGw+T,aAAa,CAACjhU,CAAD,CAAvB;AACA,YAAMghB,CAAC,GAAGigT,aAAa,CAACjhU,CAAC,GAAG,CAAL,CAAvB;AACA,YAAMwO,CAAC,GAAGk2O,EAAE,GAAG,CAAf;;AACA,YAAM9jN,CAAC,GAAG,KAAK0gS,QAAL,CAAc7+T,CAAd,EAAiBue,CAAjB,EAAoB+/S,OAAO,CAACvyT,CAAC,GAAG,CAAL,CAA3B,EAAoCuyT,OAAO,CAACvyT,CAAC,GAAG,CAAL,CAA3C,CAAV;;AACA,UAAIoyB,CAAJ,EAAO,KAAKygS,cAAL,CAAoB5+T,CAApB,EAAuBue,CAAvB,EAA0B4f,CAAC,CAAC,CAAD,CAA3B,EAAgCA,CAAC,CAAC,CAAD,CAAjC,EAAsC0tI,OAAtC;AACR;;AACD,WAAOn+J,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACDiiU,EAAAA,YAAY,CAACjzJ,OAAD,EAAU;AACpB,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA88C,IAAAA,OAAO,CAAC6sE,IAAR,CAAa,KAAKulF,IAAlB,EAAwB,KAAKC,IAA7B,EAAmC,KAAKC,IAAL,GAAY,KAAKF,IAApD,EAA0D,KAAKG,IAAL,GAAY,KAAKF,IAA3E;AACA,WAAOxwT,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACDkiU,EAAAA,UAAU,CAACllU,CAAD,EAAIgyK,OAAJ,EAAa;AACrB,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;;AACA,UAAMosF,MAAM,GAAG,KAAK6jH,KAAL,CAAWnlU,CAAX,CAAf;;AACA,QAAIshN,MAAM,KAAK,IAAX,IAAmB,CAACA,MAAM,CAAChiN,MAA/B,EAAuC;AACvC0yK,IAAAA,OAAO,CAACwrE,MAAR,CAAel8B,MAAM,CAAC,CAAD,CAArB,EAA0BA,MAAM,CAAC,CAAD,CAAhC;AACA,QAAIpzM,CAAC,GAAGozM,MAAM,CAAChiN,MAAf;;AACA,WAAOgiN,MAAM,CAAC,CAAD,CAAN,KAAcA,MAAM,CAACpzM,CAAC,GAAC,CAAH,CAApB,IAA6BozM,MAAM,CAAC,CAAD,CAAN,KAAcA,MAAM,CAACpzM,CAAC,GAAC,CAAH,CAAjD,IAA0DA,CAAC,GAAG,CAArE,EAAwEA,CAAC,IAAI,CAAL;;AACxE,SAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,IAAI,CAA5B,EAA+B;AAC7B,UAAIshN,MAAM,CAACthN,CAAD,CAAN,KAAcshN,MAAM,CAACthN,CAAC,GAAC,CAAH,CAApB,IAA6BshN,MAAM,CAACthN,CAAC,GAAC,CAAH,CAAN,KAAgBshN,MAAM,CAACthN,CAAC,GAAC,CAAH,CAAvD,EACEgyK,OAAO,CAAC0rE,MAAR,CAAep8B,MAAM,CAACthN,CAAD,CAArB,EAA0BshN,MAAM,CAACthN,CAAC,GAAG,CAAL,CAAhC;AACH;;AACDgyK,IAAAA,OAAO,CAACyrE,SAAR;AACA,WAAO5pO,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACD,GAACoiU,YAAD,GAAgB;AACd,UAAM;AAACjB,MAAAA,QAAQ,EAAE;AAAC7iH,QAAAA;AAAD;AAAX,QAAuB,IAA7B;;AACA,SAAK,IAAIthN,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGozM,MAAM,CAAChiN,MAAP,GAAgB,CAApC,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD,YAAMslK,IAAI,GAAG,KAAK+/J,WAAL,CAAiBrlU,CAAjB,CAAb;AACA,UAAIslK,IAAJ,EAAUA,IAAI,CAACx/J,KAAL,GAAa9F,CAAb,EAAgB,MAAMslK,IAAtB;AACX;AACF;;AACD+/J,EAAAA,WAAW,CAACrlU,CAAD,EAAI;AACb,UAAMyhN,OAAO,GAAG,IAAIkC,gBAAJ,EAAhB;AACA,SAAKuhH,UAAL,CAAgBllU,CAAhB,EAAmByhN,OAAnB;AACA,WAAOA,OAAO,CAACz+M,KAAR,EAAP;AACD;;AACD+hU,EAAAA,cAAc,CAAC1kH,EAAD,EAAKC,EAAL,EAAS7tG,EAAT,EAAaD,EAAb,EAAiBw/D,OAAjB,EAA0B;AACtC,QAAIr6F,CAAJ;;AACA,UAAMm1J,EAAE,GAAG,KAAKw4F,WAAL,CAAiBjlH,EAAjB,EAAqBC,EAArB,CAAX;;AACA,UAAMjnK,EAAE,GAAG,KAAKisR,WAAL,CAAiB7yN,EAAjB,EAAqBD,EAArB,CAAX;;AACA,QAAIs6H,EAAE,KAAK,CAAP,IAAYzzL,EAAE,KAAK,CAAvB,EAA0B;AACxB24H,MAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAf,EAAmBD,EAAnB;AACD,KAHD,MAGO,IAAI76B,CAAC,GAAG,KAAK4tP,YAAL,CAAkBllH,EAAlB,EAAsBC,EAAtB,EAA0B7tG,EAA1B,EAA8BD,EAA9B,EAAkCs6H,EAAlC,EAAsCzzL,EAAtC,CAAR,EAAmD;AACxD24H,MAAAA,OAAO,CAACwrE,MAAR,CAAe7lK,CAAC,CAAC,CAAD,CAAhB,EAAqBA,CAAC,CAAC,CAAD,CAAtB;AACAq6F,MAAAA,OAAO,CAAC0rE,MAAR,CAAe/lK,CAAC,CAAC,CAAD,CAAhB,EAAqBA,CAAC,CAAC,CAAD,CAAtB;AACD;AACF;;AACDk7L,EAAAA,QAAQ,CAAC7yQ,CAAD,EAAImG,CAAJ,EAAOue,CAAP,EAAU;AAChB,QAAI,CAACve,CAAC,GAAG,CAACA,CAAL,EAAQA,CAAC,KAAKA,CAAf,MAAsBue,CAAC,GAAG,CAACA,CAAL,EAAQA,CAAC,KAAKA,CAApC,CAAJ,EAA4C,OAAO,KAAP;AAC5C,WAAO,KAAKy/S,QAAL,CAAcqB,KAAd,CAAoBxlU,CAApB,EAAuBmG,CAAvB,EAA0Bue,CAA1B,MAAiC1kB,CAAxC;AACD;;AACD,GAACojN,SAAD,CAAWpjN,CAAX,EAAc;AACZ,UAAM2xO,EAAE,GAAG,KAAKwzF,KAAL,CAAWnlU,CAAX,CAAX;;AACA,QAAI2xO,EAAJ,EAAQ,KAAK,MAAM1nO,CAAX,IAAgB,KAAKk6T,QAAL,CAAc/gH,SAAd,CAAwBpjN,CAAxB,CAAhB,EAA4C;AAClD,YAAMylU,EAAE,GAAG,KAAKN,KAAL,CAAWl7T,CAAX,CAAX,CADkD,CAElD;;;AACA,UAAIw7T,EAAJ,EAAQC,IAAI,EAAE,KAAK,IAAIx6B,EAAE,GAAG,CAAT,EAAYy6B,EAAE,GAAGh0F,EAAE,CAACryO,MAAzB,EAAiC4rS,EAAE,GAAGy6B,EAAtC,EAA0Cz6B,EAAE,IAAI,CAAhD,EAAmD;AAC/D,aAAK,IAAI06B,EAAE,GAAG,CAAT,EAAYC,EAAE,GAAGJ,EAAE,CAACnmU,MAAzB,EAAiCsmU,EAAE,GAAGC,EAAtC,EAA0CD,EAAE,IAAI,CAAhD,EAAmD;AACjD,cAAIj0F,EAAE,CAACu5D,EAAD,CAAF,IAAUu6B,EAAE,CAACG,EAAD,CAAZ,IACDj0F,EAAE,CAACu5D,EAAE,GAAG,CAAN,CAAF,IAAcu6B,EAAE,CAACG,EAAE,GAAG,CAAN,CADf,IAEDj0F,EAAE,CAAC,CAACu5D,EAAE,GAAG,CAAN,IAAWy6B,EAAZ,CAAF,IAAqBF,EAAE,CAAC,CAACG,EAAE,GAAGC,EAAL,GAAU,CAAX,IAAgBA,EAAjB,CAFtB,IAGDl0F,EAAE,CAAC,CAACu5D,EAAE,GAAG,CAAN,IAAWy6B,EAAZ,CAAF,IAAqBF,EAAE,CAAC,CAACG,EAAE,GAAGC,EAAL,GAAU,CAAX,IAAgBA,EAAjB,CAH1B,EAIE;AACA,kBAAM57T,CAAN;AACA,kBAAMy7T,IAAN;AACD;AACF;AACF;AACF;AACF;;AACDI,EAAAA,KAAK,CAAC9lU,CAAD,EAAI;AACP,UAAM;AAAC2kU,MAAAA,aAAD;AAAgBR,MAAAA,QAAQ,EAAE;AAACS,QAAAA,OAAD;AAAUhC,QAAAA,SAAV;AAAqBD,QAAAA;AAArB;AAA1B,QAA6D,IAAnE;AACA,UAAMoD,EAAE,GAAGnB,OAAO,CAAC5kU,CAAD,CAAlB;AACA,QAAI+lU,EAAE,KAAK,CAAC,CAAZ,EAAe,OAAO,IAAP,CAHR,CAGqB;;AAC5B,UAAMzkH,MAAM,GAAG,EAAf;AACA,QAAI5iN,CAAC,GAAGqnU,EAAR;;AACA,OAAG;AACD,YAAMriU,CAAC,GAAGqC,IAAI,CAAC+H,KAAL,CAAWpP,CAAC,GAAG,CAAf,CAAV;AACA4iN,MAAAA,MAAM,CAACrhN,IAAP,CAAY0kU,aAAa,CAACjhU,CAAC,GAAG,CAAL,CAAzB,EAAkCihU,aAAa,CAACjhU,CAAC,GAAG,CAAJ,GAAQ,CAAT,CAA/C;AACAhF,MAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAcA,CAAC,GAAG,CAAlB,GAAsBA,CAAC,GAAG,CAA9B;AACA,UAAIikU,SAAS,CAACjkU,CAAD,CAAT,KAAiBsB,CAArB,EAAwB,MAJvB,CAI8B;;AAC/BtB,MAAAA,CAAC,GAAGkkU,SAAS,CAAClkU,CAAD,CAAb;AACD,KAND,QAMSA,CAAC,KAAKqnU,EAAN,IAAYrnU,CAAC,KAAK,CAAC,CAN5B;;AAOA,WAAO4iN,MAAP;AACD;;AACD6jH,EAAAA,KAAK,CAACnlU,CAAD,EAAI;AACP;AACA,QAAIA,CAAC,KAAK,CAAN,IAAW,KAAKmkU,QAAL,CAAczB,IAAd,CAAmBpjU,MAAnB,KAA8B,CAA7C,EAAgD;AAC9C,aAAO,CAAC,KAAKglU,IAAN,EAAY,KAAKD,IAAjB,EAAuB,KAAKC,IAA5B,EAAkC,KAAKC,IAAvC,EAA6C,KAAKH,IAAlD,EAAwD,KAAKG,IAA7D,EAAmE,KAAKH,IAAxE,EAA8E,KAAKC,IAAnF,CAAP;AACD;;AACD,UAAM/iH,MAAM,GAAG,KAAKwkH,KAAL,CAAW9lU,CAAX,CAAf;;AACA,QAAIshN,MAAM,KAAK,IAAf,EAAqB,OAAO,IAAP;AACrB,UAAM;AAACmjH,MAAAA,OAAO,EAAE3oG;AAAV,QAAe,IAArB;AACA,UAAM5pN,CAAC,GAAGlS,CAAC,GAAG,CAAd;AACA,WAAO87N,CAAC,CAAC5pN,CAAD,CAAD,IAAQ4pN,CAAC,CAAC5pN,CAAC,GAAG,CAAL,CAAT,GACD,KAAK8zT,aAAL,CAAmBhmU,CAAnB,EAAsBshN,MAAtB,EAA8Bwa,CAAC,CAAC5pN,CAAD,CAA/B,EAAoC4pN,CAAC,CAAC5pN,CAAC,GAAG,CAAL,CAArC,EAA8C4pN,CAAC,CAAC5pN,CAAC,GAAG,CAAL,CAA/C,EAAwD4pN,CAAC,CAAC5pN,CAAC,GAAG,CAAL,CAAzD,CADC,GAED,KAAK+zT,WAAL,CAAiBjmU,CAAjB,EAAoBshN,MAApB,CAFN;AAGD;;AACD2kH,EAAAA,WAAW,CAACjmU,CAAD,EAAIshN,MAAJ,EAAY;AACrB,UAAMpzM,CAAC,GAAGozM,MAAM,CAAChiN,MAAjB;AACA,QAAI0hM,CAAC,GAAG,IAAR;AACA,QAAIqf,EAAJ;AAAA,QAAQC,EAAR;AAAA,QAAY7tG,EAAE,GAAG6uG,MAAM,CAACpzM,CAAC,GAAG,CAAL,CAAvB;AAAA,QAAgCskG,EAAE,GAAG8uG,MAAM,CAACpzM,CAAC,GAAG,CAAL,CAA3C;;AACA,QAAI4+N,EAAJ;AAAA,QAAQzzL,EAAE,GAAG,KAAKisR,WAAL,CAAiB7yN,EAAjB,EAAqBD,EAArB,CAAb;;AACA,QAAIuzN,EAAJ,EAAQG,EAAR;;AACA,SAAK,IAAIj8T,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiE,CAApB,EAAuBjE,CAAC,IAAI,CAA5B,EAA+B;AAC7Bo2M,MAAAA,EAAE,GAAG5tG,EAAL,EAAS6tG,EAAE,GAAG9tG,EAAd,EAAkBC,EAAE,GAAG6uG,MAAM,CAACr3M,CAAD,CAA7B,EAAkCuoG,EAAE,GAAG8uG,MAAM,CAACr3M,CAAC,GAAG,CAAL,CAA7C;AACA6iO,MAAAA,EAAE,GAAGzzL,EAAL,EAASA,EAAE,GAAG,KAAKisR,WAAL,CAAiB7yN,EAAjB,EAAqBD,EAArB,CAAd;;AACA,UAAIs6H,EAAE,KAAK,CAAP,IAAYzzL,EAAE,KAAK,CAAvB,EAA0B;AACxB0sR,QAAAA,EAAE,GAAGG,EAAL,EAASA,EAAE,GAAG,CAAd;AACA,YAAIllI,CAAJ,EAAOA,CAAC,CAAC/gM,IAAF,CAAOwyG,EAAP,EAAWD,EAAX,EAAP,KACKwuF,CAAC,GAAG,CAACvuF,EAAD,EAAKD,EAAL,CAAJ;AACN,OAJD,MAIO;AACL,YAAI76B,CAAJ,EAAOwuP,GAAP,EAAYr+B,GAAZ,EAAiBs+B,GAAjB,EAAsBr+B,GAAtB;;AACA,YAAIj7D,EAAE,KAAK,CAAX,EAAc;AACZ,cAAI,CAACn1J,CAAC,GAAG,KAAK4tP,YAAL,CAAkBllH,EAAlB,EAAsBC,EAAtB,EAA0B7tG,EAA1B,EAA8BD,EAA9B,EAAkCs6H,EAAlC,EAAsCzzL,EAAtC,CAAL,MAAoD,IAAxD,EAA8D;AAC9D,WAAC8sR,GAAD,EAAMr+B,GAAN,EAAWs+B,GAAX,EAAgBr+B,GAAhB,IAAuBpwN,CAAvB;AACD,SAHD,MAGO;AACL,cAAI,CAACA,CAAC,GAAG,KAAK4tP,YAAL,CAAkB9yN,EAAlB,EAAsBD,EAAtB,EAA0B6tG,EAA1B,EAA8BC,EAA9B,EAAkCjnK,EAAlC,EAAsCyzL,EAAtC,CAAL,MAAoD,IAAxD,EAA8D;AAC9D,WAACs5F,GAAD,EAAMr+B,GAAN,EAAWo+B,GAAX,EAAgBr+B,GAAhB,IAAuBnwN,CAAvB;AACAouP,UAAAA,EAAE,GAAGG,EAAL,EAASA,EAAE,GAAG,KAAKG,SAAL,CAAeF,GAAf,EAAoBr+B,GAApB,CAAd;AACA,cAAIi+B,EAAE,IAAIG,EAAV,EAAc,KAAKI,KAAL,CAAWtmU,CAAX,EAAc+lU,EAAd,EAAkBG,EAAlB,EAAsBllI,CAAtB,EAAyBA,CAAC,CAAC1hM,MAA3B;AACd,cAAI0hM,CAAJ,EAAOA,CAAC,CAAC/gM,IAAF,CAAOkmU,GAAP,EAAYr+B,GAAZ,EAAP,KACK9mG,CAAC,GAAG,CAACmlI,GAAD,EAAMr+B,GAAN,CAAJ;AACN;;AACDi+B,QAAAA,EAAE,GAAGG,EAAL,EAASA,EAAE,GAAG,KAAKG,SAAL,CAAeD,GAAf,EAAoBr+B,GAApB,CAAd;AACA,YAAIg+B,EAAE,IAAIG,EAAV,EAAc,KAAKI,KAAL,CAAWtmU,CAAX,EAAc+lU,EAAd,EAAkBG,EAAlB,EAAsBllI,CAAtB,EAAyBA,CAAC,CAAC1hM,MAA3B;AACd,YAAI0hM,CAAJ,EAAOA,CAAC,CAAC/gM,IAAF,CAAOmmU,GAAP,EAAYr+B,GAAZ,EAAP,KACK/mG,CAAC,GAAG,CAAColI,GAAD,EAAMr+B,GAAN,CAAJ;AACN;AACF;;AACD,QAAI/mG,CAAJ,EAAO;AACL+kI,MAAAA,EAAE,GAAGG,EAAL,EAASA,EAAE,GAAG,KAAKG,SAAL,CAAerlI,CAAC,CAAC,CAAD,CAAhB,EAAqBA,CAAC,CAAC,CAAD,CAAtB,CAAd;AACA,UAAI+kI,EAAE,IAAIG,EAAV,EAAc,KAAKI,KAAL,CAAWtmU,CAAX,EAAc+lU,EAAd,EAAkBG,EAAlB,EAAsBllI,CAAtB,EAAyBA,CAAC,CAAC1hM,MAA3B;AACf,KAHD,MAGO,IAAI,KAAKuzQ,QAAL,CAAc7yQ,CAAd,EAAiB,CAAC,KAAKokU,IAAL,GAAY,KAAKE,IAAlB,IAA0B,CAA3C,EAA8C,CAAC,KAAKD,IAAL,GAAY,KAAKE,IAAlB,IAA0B,CAAxE,CAAJ,EAAgF;AACrF,aAAO,CAAC,KAAKD,IAAN,EAAY,KAAKD,IAAjB,EAAuB,KAAKC,IAA5B,EAAkC,KAAKC,IAAvC,EAA6C,KAAKH,IAAlD,EAAwD,KAAKG,IAA7D,EAAmE,KAAKH,IAAxE,EAA8E,KAAKC,IAAnF,CAAP;AACD;;AACD,WAAOrjI,CAAP;AACD;;AACDukI,EAAAA,YAAY,CAACllH,EAAD,EAAKC,EAAL,EAAS7tG,EAAT,EAAaD,EAAb,EAAiBs6H,EAAjB,EAAqBzzL,EAArB,EAAyB;AACnC,WAAO,IAAP,EAAa;AACX,UAAIyzL,EAAE,KAAK,CAAP,IAAYzzL,EAAE,KAAK,CAAvB,EAA0B,OAAO,CAACgnK,EAAD,EAAKC,EAAL,EAAS7tG,EAAT,EAAaD,EAAb,CAAP;AAC1B,UAAIs6H,EAAE,GAAGzzL,EAAT,EAAa,OAAO,IAAP;AACb,UAAIlzC,CAAJ;AAAA,UAAOue,CAAP;AAAA,UAAUjY,CAAC,GAAGqgO,EAAE,IAAIzzL,EAApB;AACA,UAAI5sC,CAAC,GAAG,MAAR,EAAgBtG,CAAC,GAAGk6M,EAAE,GAAG,CAAC5tG,EAAE,GAAG4tG,EAAN,KAAa,KAAKkkH,IAAL,GAAYjkH,EAAzB,KAAgC9tG,EAAE,GAAG8tG,EAArC,CAAT,EAAmD57L,CAAC,GAAG,KAAK6/S,IAA5D,CAAhB,KACK,IAAI93T,CAAC,GAAG,MAAR,EAAgBtG,CAAC,GAAGk6M,EAAE,GAAG,CAAC5tG,EAAE,GAAG4tG,EAAN,KAAa,KAAKgkH,IAAL,GAAY/jH,EAAzB,KAAgC9tG,EAAE,GAAG8tG,EAArC,CAAT,EAAmD57L,CAAC,GAAG,KAAK2/S,IAA5D,CAAhB,KACA,IAAI53T,CAAC,GAAG,MAAR,EAAgBiY,CAAC,GAAG47L,EAAE,GAAG,CAAC9tG,EAAE,GAAG8tG,EAAN,KAAa,KAAKgkH,IAAL,GAAYjkH,EAAzB,KAAgC5tG,EAAE,GAAG4tG,EAArC,CAAT,EAAmDl6M,CAAC,GAAG,KAAKm+T,IAA5D,CAAhB,KACA5/S,CAAC,GAAG47L,EAAE,GAAG,CAAC9tG,EAAE,GAAG8tG,EAAN,KAAa,KAAK8jH,IAAL,GAAY/jH,EAAzB,KAAgC5tG,EAAE,GAAG4tG,EAArC,CAAT,EAAmDl6M,CAAC,GAAG,KAAKi+T,IAA5D;AACL,UAAIt3F,EAAJ,EAAQzsB,EAAE,GAAGl6M,CAAL,EAAQm6M,EAAE,GAAG57L,CAAb,EAAgBooN,EAAE,GAAG,KAAKw4F,WAAL,CAAiBjlH,EAAjB,EAAqBC,EAArB,CAArB,CAAR,KACK7tG,EAAE,GAAGtsG,CAAL,EAAQqsG,EAAE,GAAG9tF,CAAb,EAAgB20B,EAAE,GAAG,KAAKisR,WAAL,CAAiB7yN,EAAjB,EAAqBD,EAArB,CAArB;AACN;AACF;;AACDwzN,EAAAA,aAAa,CAAChmU,CAAD,EAAIshN,MAAJ,EAAYilH,GAAZ,EAAiBC,GAAjB,EAAsBC,GAAtB,EAA2BC,GAA3B,EAAgC;AAC3C,QAAI1lI,CAAC,GAAGlhM,KAAK,CAACuR,IAAN,CAAWiwM,MAAX,CAAR;AAAA,QAA4Bh9K,CAA5B;AACA,QAAIA,CAAC,GAAG,KAAK0gS,QAAL,CAAchkI,CAAC,CAAC,CAAD,CAAf,EAAoBA,CAAC,CAAC,CAAD,CAArB,EAA0BulI,GAA1B,EAA+BC,GAA/B,CAAR,EAA6CxlI,CAAC,CAACj6J,OAAF,CAAUzC,CAAC,CAAC,CAAD,CAAX,EAAgBA,CAAC,CAAC,CAAD,CAAjB;AAC7C,QAAIA,CAAC,GAAG,KAAK0gS,QAAL,CAAchkI,CAAC,CAACA,CAAC,CAAC1hM,MAAF,GAAW,CAAZ,CAAf,EAA+B0hM,CAAC,CAACA,CAAC,CAAC1hM,MAAF,GAAW,CAAZ,CAAhC,EAAgDmnU,GAAhD,EAAqDC,GAArD,CAAR,EAAmE1lI,CAAC,CAAC/gM,IAAF,CAAOqkC,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd;;AACnE,QAAI08J,CAAC,GAAG,KAAKilI,WAAL,CAAiBjmU,CAAjB,EAAoBghM,CAApB,CAAR,EAAgC;AAC9B,WAAK,IAAI/2L,CAAC,GAAG,CAAR,EAAWiE,CAAC,GAAG8yL,CAAC,CAAC1hM,MAAjB,EAAyBwtO,EAAzB,EAA6BzzL,EAAE,GAAG,KAAKgtR,SAAL,CAAerlI,CAAC,CAAC9yL,CAAC,GAAG,CAAL,CAAhB,EAAyB8yL,CAAC,CAAC9yL,CAAC,GAAG,CAAL,CAA1B,CAAvC,EAA2EjE,CAAC,GAAGiE,CAA/E,EAAkFjE,CAAC,IAAI,CAAvF,EAA0F;AACxF6iO,QAAAA,EAAE,GAAGzzL,EAAL,EAASA,EAAE,GAAG,KAAKgtR,SAAL,CAAerlI,CAAC,CAAC/2L,CAAD,CAAhB,EAAqB+2L,CAAC,CAAC/2L,CAAC,GAAG,CAAL,CAAtB,CAAd;AACA,YAAI6iO,EAAE,IAAIzzL,EAAV,EAAcpvC,CAAC,GAAG,KAAKq8T,KAAL,CAAWtmU,CAAX,EAAc8sO,EAAd,EAAkBzzL,EAAlB,EAAsB2nJ,CAAtB,EAAyB/2L,CAAzB,CAAJ,EAAiCiE,CAAC,GAAG8yL,CAAC,CAAC1hM,MAAvC;AACf;AACF,KALD,MAKO,IAAI,KAAKuzQ,QAAL,CAAc7yQ,CAAd,EAAiB,CAAC,KAAKokU,IAAL,GAAY,KAAKE,IAAlB,IAA0B,CAA3C,EAA8C,CAAC,KAAKD,IAAL,GAAY,KAAKE,IAAlB,IAA0B,CAAxE,CAAJ,EAAgF;AACrFvjI,MAAAA,CAAC,GAAG,CAAC,KAAKojI,IAAN,EAAY,KAAKC,IAAjB,EAAuB,KAAKC,IAA5B,EAAkC,KAAKD,IAAvC,EAA6C,KAAKC,IAAlD,EAAwD,KAAKC,IAA7D,EAAmE,KAAKH,IAAxE,EAA8E,KAAKG,IAAnF,CAAJ;AACD;;AACD,WAAOvjI,CAAP;AACD;;AACDslI,EAAAA,KAAK,CAACtmU,CAAD,EAAI+lU,EAAJ,EAAQG,EAAR,EAAYllI,CAAZ,EAAe/2L,CAAf,EAAkB;AACrB,WAAO87T,EAAE,KAAKG,EAAd,EAAkB;AAChB,UAAI//T,CAAJ,EAAOue,CAAP;;AACA,cAAQqhT,EAAR;AACE,aAAK,MAAL;AAAaA,UAAAA,EAAE,GAAG,MAAL;AAAa;AAAU;;AACpC,aAAK,MAAL;AAAaA,UAAAA,EAAE,GAAG,MAAL,EAAa5/T,CAAC,GAAG,KAAKm+T,IAAtB,EAA4B5/S,CAAC,GAAG,KAAK2/S,IAArC;AAA2C;AAAO;;AAC/D,aAAK,MAAL;AAAa0B,UAAAA,EAAE,GAAG,MAAL;AAAa;AAAU;;AACpC,aAAK,MAAL;AAAaA,UAAAA,EAAE,GAAG,MAAL,EAAa5/T,CAAC,GAAG,KAAKm+T,IAAtB,EAA4B5/S,CAAC,GAAG,KAAK6/S,IAArC;AAA2C;AAAO;;AAC/D,aAAK,MAAL;AAAawB,UAAAA,EAAE,GAAG,MAAL;AAAa;AAAU;;AACpC,aAAK,MAAL;AAAaA,UAAAA,EAAE,GAAG,MAAL,EAAa5/T,CAAC,GAAG,KAAKi+T,IAAtB,EAA4B1/S,CAAC,GAAG,KAAK6/S,IAArC;AAA2C;AAAO;;AAC/D,aAAK,MAAL;AAAawB,UAAAA,EAAE,GAAG,MAAL;AAAa;AAAU;;AACpC,aAAK,MAAL;AAAaA,UAAAA,EAAE,GAAG,MAAL,EAAa5/T,CAAC,GAAG,KAAKi+T,IAAtB,EAA4B1/S,CAAC,GAAG,KAAK2/S,IAArC;AAA2C;AAAO;AARjE;;AAUA,UAAI,CAACrjI,CAAC,CAAC/2L,CAAD,CAAD,KAAS9D,CAAT,IAAc66L,CAAC,CAAC/2L,CAAC,GAAG,CAAL,CAAD,KAAaya,CAA5B,KAAkC,KAAKmuP,QAAL,CAAc7yQ,CAAd,EAAiBmG,CAAjB,EAAoBue,CAApB,CAAtC,EAA8D;AAC5Ds8K,QAAAA,CAAC,CAACx9J,MAAF,CAASv5B,CAAT,EAAY,CAAZ,EAAe9D,CAAf,EAAkBue,CAAlB,GAAsBza,CAAC,IAAI,CAA3B;AACD;AACF;;AACD,QAAI+2L,CAAC,CAAC1hM,MAAF,GAAW,CAAf,EAAkB;AAChB,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGghM,CAAC,CAAC1hM,MAAtB,EAA8BU,CAAC,IAAG,CAAlC,EAAqC;AACnC,cAAMiK,CAAC,GAAG,CAACjK,CAAC,GAAG,CAAL,IAAUghM,CAAC,CAAC1hM,MAAtB;AAAA,cAA8Bge,CAAC,GAAG,CAACtd,CAAC,GAAG,CAAL,IAAUghM,CAAC,CAAC1hM,MAA9C;AACA,YAAI0hM,CAAC,CAAChhM,CAAD,CAAD,KAASghM,CAAC,CAAC/2L,CAAD,CAAV,IAAiB+2L,CAAC,CAAC/2L,CAAD,CAAD,KAAS+2L,CAAC,CAAC1jL,CAAD,CAA3B,IACD0jL,CAAC,CAAChhM,CAAC,GAAG,CAAL,CAAD,KAAaghM,CAAC,CAAC/2L,CAAC,GAAG,CAAL,CAAd,IAAyB+2L,CAAC,CAAC/2L,CAAC,GAAG,CAAL,CAAD,KAAa+2L,CAAC,CAAC1jL,CAAC,GAAG,CAAL,CAD1C,EAEE0jL,CAAC,CAACx9J,MAAF,CAASv5B,CAAT,EAAY,CAAZ,GAAgBjK,CAAC,IAAI,CAArB;AACH;AACF;;AACD,WAAOiK,CAAP;AACD;;AACD+6T,EAAAA,QAAQ,CAAC3kH,EAAD,EAAKC,EAAL,EAAS0xG,EAAT,EAAaC,EAAb,EAAiB;AACvB,QAAIvuT,CAAC,GAAGoE,QAAR;AAAA,QAAkB2E,CAAlB;AAAA,QAAqBtG,CAArB;AAAA,QAAwBue,CAAxB;;AACA,QAAIutS,EAAE,GAAG,CAAT,EAAY;AAAE;AACZ,UAAI3xG,EAAE,IAAI,KAAK+jH,IAAf,EAAqB,OAAO,IAAP;AACrB,UAAI,CAAC53T,CAAC,GAAG,CAAC,KAAK43T,IAAL,GAAY/jH,EAAb,IAAmB2xG,EAAxB,IAA8BvuT,CAAlC,EAAqCghB,CAAC,GAAG,KAAK2/S,IAAT,EAAel+T,CAAC,GAAGk6M,EAAE,GAAG,CAAC38M,CAAC,GAAG+I,CAAL,IAAUulT,EAAlC;AACtC,KAHD,MAGO,IAAIC,EAAE,GAAG,CAAT,EAAY;AAAE;AACnB,UAAI3xG,EAAE,IAAI,KAAKikH,IAAf,EAAqB,OAAO,IAAP;AACrB,UAAI,CAAC93T,CAAC,GAAG,CAAC,KAAK83T,IAAL,GAAYjkH,EAAb,IAAmB2xG,EAAxB,IAA8BvuT,CAAlC,EAAqCghB,CAAC,GAAG,KAAK6/S,IAAT,EAAep+T,CAAC,GAAGk6M,EAAE,GAAG,CAAC38M,CAAC,GAAG+I,CAAL,IAAUulT,EAAlC;AACtC;;AACD,QAAIA,EAAE,GAAG,CAAT,EAAY;AAAE;AACZ,UAAI3xG,EAAE,IAAI,KAAKikH,IAAf,EAAqB,OAAO,IAAP;AACrB,UAAI,CAAC73T,CAAC,GAAG,CAAC,KAAK63T,IAAL,GAAYjkH,EAAb,IAAmB2xG,EAAxB,IAA8BtuT,CAAlC,EAAqCyC,CAAC,GAAG,KAAKm+T,IAAT,EAAe5/S,CAAC,GAAG47L,EAAE,GAAG,CAAC58M,CAAC,GAAG+I,CAAL,IAAUwlT,EAAlC;AACtC,KAHD,MAGO,IAAID,EAAE,GAAG,CAAT,EAAY;AAAE;AACnB,UAAI3xG,EAAE,IAAI,KAAK+jH,IAAf,EAAqB,OAAO,IAAP;AACrB,UAAI,CAAC33T,CAAC,GAAG,CAAC,KAAK23T,IAAL,GAAY/jH,EAAb,IAAmB2xG,EAAxB,IAA8BtuT,CAAlC,EAAqCyC,CAAC,GAAG,KAAKi+T,IAAT,EAAe1/S,CAAC,GAAG47L,EAAE,GAAG,CAAC58M,CAAC,GAAG+I,CAAL,IAAUwlT,EAAlC;AACtC;;AACD,WAAO,CAAC9rT,CAAD,EAAIue,CAAJ,CAAP;AACD;;AACD2hT,EAAAA,SAAS,CAAClgU,CAAD,EAAIue,CAAJ,EAAO;AACd,WAAO,CAACve,CAAC,KAAK,KAAKi+T,IAAX,GAAkB,MAAlB,GACFj+T,CAAC,KAAK,KAAKm+T,IAAX,GAAkB,MAAlB,GAA2B,MAD1B,KAEA5/S,CAAC,KAAK,KAAK2/S,IAAX,GAAkB,MAAlB,GACD3/S,CAAC,KAAK,KAAK6/S,IAAX,GAAkB,MAAlB,GAA2B,MAH1B,CAAP;AAID;;AACDe,EAAAA,WAAW,CAACn/T,CAAD,EAAIue,CAAJ,EAAO;AAChB,WAAO,CAACve,CAAC,GAAG,KAAKi+T,IAAT,GAAgB,MAAhB,GACFj+T,CAAC,GAAG,KAAKm+T,IAAT,GAAgB,MAAhB,GAAyB,MADxB,KAEA5/S,CAAC,GAAG,KAAK2/S,IAAT,GAAgB,MAAhB,GACD3/S,CAAC,GAAG,KAAK6/S,IAAT,GAAgB,MAAhB,GAAyB,MAHxB,CAAP;AAID;;AA3T0B;;;;;;;;;;;ACH7B;;AACA;;AACA;;AACA;;;;AAEA,MAAMtnF,GAAG,GAAG,IAAIl3O,IAAI,CAACuiC,EAArB;AAAA,MAAyB7xB,GAAG,GAAG1Q,IAAI,CAAC0Q,GAApC;;AAEA,SAASssO,MAAT,CAAgBz+M,CAAhB,EAAmB;AACjB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;AAED,SAAS0+M,MAAT,CAAgB1+M,CAAhB,EAAmB;AACjB,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD,EAED;;;AACA,SAASkpR,SAAT,CAAmB3gT,CAAnB,EAAsB;AACpB,QAAM;AAAC81T,IAAAA,SAAD;AAAY3mR,IAAAA;AAAZ,MAAsBnvC,CAA5B;;AACA,OAAK,IAAI7M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2iU,SAAS,CAACrjU,MAA9B,EAAsCU,CAAC,IAAI,CAA3C,EAA8C;AAC5C,UAAMkH,CAAC,GAAG,IAAIy7T,SAAS,CAAC3iU,CAAD,CAAvB;AAAA,UACM+N,CAAC,GAAG,IAAI40T,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CADvB;AAAA,UAEMyM,CAAC,GAAG,IAAIk2T,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CAFvB;AAAA,UAGMglN,KAAK,GAAG,CAAChpK,MAAM,CAACvvC,CAAD,CAAN,GAAYuvC,MAAM,CAAC90C,CAAD,CAAnB,KAA2B80C,MAAM,CAACjuC,CAAC,GAAG,CAAL,CAAN,GAAgBiuC,MAAM,CAAC90C,CAAC,GAAG,CAAL,CAAjD,IACA,CAAC80C,MAAM,CAACjuC,CAAD,CAAN,GAAYiuC,MAAM,CAAC90C,CAAD,CAAnB,KAA2B80C,MAAM,CAACvvC,CAAC,GAAG,CAAL,CAAN,GAAgBuvC,MAAM,CAAC90C,CAAC,GAAG,CAAL,CAAjD,CAJd;AAKA,QAAI89M,KAAK,GAAG,KAAZ,EAAmB,OAAO,KAAP;AACpB;;AACD,SAAO,IAAP;AACD;;AAED,SAAS2hH,MAAT,CAAgBxgU,CAAhB,EAAmBue,CAAnB,EAAsB1W,CAAtB,EAAyB;AACvB,SAAO,CAAC7H,CAAC,GAAGJ,IAAI,CAAC+T,GAAL,CAAS3T,CAAC,GAAGue,CAAb,IAAkB1W,CAAvB,EAA0B0W,CAAC,GAAG3e,IAAI,CAACgU,GAAL,CAAS5T,CAAC,GAAGue,CAAb,IAAkB1W,CAAhD,CAAP;AACD;;AAEc,MAAM44T,QAAN,CAAe;AAC5B,SAAOv1T,IAAP,CAAYiwM,MAAZ,EAAoBuqE,EAAE,GAAG9oC,MAAzB,EAAiC+oC,EAAE,GAAG9oC,MAAtC,EAA8CxpD,IAA9C,EAAoD;AAClD,WAAO,IAAIotI,QAAJ,CAAa,YAAYtlH,MAAZ,GACdulH,SAAS,CAACvlH,MAAD,EAASuqE,EAAT,EAAaC,EAAb,EAAiBtyF,IAAjB,CADK,GAEdyrB,YAAY,CAAC5zM,IAAb,CAAkBy1T,YAAY,CAACxlH,MAAD,EAASuqE,EAAT,EAAaC,EAAb,EAAiBtyF,IAAjB,CAA9B,CAFC,CAAP;AAGD;;AACD5tL,EAAAA,WAAW,CAAC01M,MAAD,EAAS;AAClB,SAAKylH,WAAL,GAAmB,IAAIpG,mBAAJ,CAAer/G,MAAf,CAAnB;AACA,SAAKsjH,OAAL,GAAe,IAAIt6T,UAAJ,CAAeg3M,MAAM,CAAChiN,MAAP,GAAgB,CAA/B,CAAf;AACA,SAAK0nU,UAAL,GAAkB,IAAI18T,UAAJ,CAAeg3M,MAAM,CAAChiN,MAAP,GAAgB,CAA/B,CAAlB;AACA,SAAKgiN,MAAL,GAAc,KAAKylH,WAAL,CAAiB/qR,MAA/B;;AACA,SAAK0oR,KAAL;AACD;;AACDx1O,EAAAA,MAAM,GAAG;AACP,SAAK63O,WAAL,CAAiB73O,MAAjB;;AACA,SAAKw1O,KAAL;;AACA,WAAO,IAAP;AACD;;AACDA,EAAAA,KAAK,GAAG;AACN,UAAM73T,CAAC,GAAG,KAAKk6T,WAAf;AAAA,UAA4BzlH,MAAM,GAAG,KAAKA,MAA1C,CADM,CAGN;;AACA,QAAIz0M,CAAC,CAAC61T,IAAF,IAAU71T,CAAC,CAAC61T,IAAF,CAAOpjU,MAAP,GAAgB,CAA1B,IAA+BkuT,SAAS,CAAC3gT,CAAD,CAA5C,EAAiD;AAC/C,WAAK2gT,SAAL,GAAiBljT,UAAU,CAAC+G,IAAX,CAAgB;AAAC/R,QAAAA,MAAM,EAAEgiN,MAAM,CAAChiN,MAAP,GAAc;AAAvB,OAAhB,EAA2C,CAACqnB,CAAD,EAAG3mB,CAAH,KAASA,CAApD,EACdgK,IADc,CACT,CAAChK,CAAD,EAAIiK,CAAJ,KAAUq3M,MAAM,CAAC,IAAIthN,CAAL,CAAN,GAAgBshN,MAAM,CAAC,IAAIr3M,CAAL,CAAtB,IAAiCq3M,MAAM,CAAC,IAAIthN,CAAJ,GAAQ,CAAT,CAAN,GAAoBshN,MAAM,CAAC,IAAIr3M,CAAJ,GAAQ,CAAT,CAD5D,CAAjB,CAD+C,CAE4C;;AAC3F,YAAMvL,CAAC,GAAG,KAAK8uT,SAAL,CAAe,CAAf,CAAV;AAAA,YAA6B7hT,CAAC,GAAG,KAAK6hT,SAAL,CAAe,KAAKA,SAAL,CAAeluT,MAAf,GAAwB,CAAvC,CAAjC;AAAA,YACEwzQ,MAAM,GAAG,CAAExxD,MAAM,CAAC,IAAI5iN,CAAL,CAAR,EAAiB4iN,MAAM,CAAC,IAAI5iN,CAAJ,GAAQ,CAAT,CAAvB,EAAoC4iN,MAAM,CAAC,IAAI31M,CAAL,CAA1C,EAAmD21M,MAAM,CAAC,IAAI31M,CAAJ,GAAQ,CAAT,CAAzD,CADX;AAAA,YAEEqC,CAAC,GAAG,OAAOjI,IAAI,CAACo8F,KAAL,CAAW2wK,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAA7B,EAAkCA,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAApD,CAFb;;AAGA,WAAK,IAAI9yQ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGozM,MAAM,CAAChiN,MAAP,GAAgB,CAApC,EAAuCU,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjD,cAAMskC,CAAC,GAAGqiS,MAAM,CAACrlH,MAAM,CAAC,IAAIthN,CAAL,CAAP,EAAgBshN,MAAM,CAAC,IAAIthN,CAAJ,GAAQ,CAAT,CAAtB,EAAmCgO,CAAnC,CAAhB;AACAszM,QAAAA,MAAM,CAAC,IAAIthN,CAAL,CAAN,GAAgBskC,CAAC,CAAC,CAAD,CAAjB;AACAg9K,QAAAA,MAAM,CAAC,IAAIthN,CAAJ,GAAQ,CAAT,CAAN,GAAoBskC,CAAC,CAAC,CAAD,CAArB;AACD;;AACD,WAAKyiS,WAAL,GAAmB,IAAIpG,mBAAJ,CAAer/G,MAAf,CAAnB;AACD,KAZD,MAYO;AACL,aAAO,KAAKksG,SAAZ;AACD;;AAED,UAAMoV,SAAS,GAAG,KAAKA,SAAL,GAAiB,KAAKmE,WAAL,CAAiBnE,SAApD;AACA,UAAMF,IAAI,GAAG,KAAKA,IAAL,GAAY,KAAKqE,WAAL,CAAiBrE,IAA1C;AACA,UAAMC,SAAS,GAAG,KAAKA,SAAL,GAAiB,KAAKoE,WAAL,CAAiBpE,SAApD;AACA,UAAMiC,OAAO,GAAG,KAAKA,OAAL,CAAap0T,IAAb,CAAkB,CAAC,CAAnB,CAAhB;;AACA,UAAMy2T,SAAS,GAAG,KAAKD,UAAL,CAAgBx2T,IAAhB,CAAqB,CAAC,CAAtB,CAAlB,CAxBM,CA0BN;AACA;AACA;;;AACA,SAAK,IAAI9R,CAAC,GAAG,CAAR,EAAWwP,CAAC,GAAG00T,SAAS,CAACtjU,MAA9B,EAAsCZ,CAAC,GAAGwP,CAA1C,EAA6C,EAAExP,CAA/C,EAAkD;AAChD,YAAM4lC,CAAC,GAAGq+R,SAAS,CAACjkU,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAcA,CAAC,GAAG,CAAlB,GAAsBA,CAAC,GAAG,CAA3B,CAAnB;AACA,UAAIkkU,SAAS,CAAClkU,CAAD,CAAT,KAAiB,CAAC,CAAlB,IAAuBkmU,OAAO,CAACtgS,CAAD,CAAP,KAAe,CAAC,CAA3C,EAA8CsgS,OAAO,CAACtgS,CAAD,CAAP,GAAa5lC,CAAb;AAC/C;;AACD,SAAK,IAAIsB,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGw0T,IAAI,CAACpjU,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CinU,MAAAA,SAAS,CAACvE,IAAI,CAAC1iU,CAAD,CAAL,CAAT,GAAqBA,CAArB;AACD,KAnCK,CAqCN;;;AACA,QAAI0iU,IAAI,CAACpjU,MAAL,IAAe,CAAf,IAAoBojU,IAAI,CAACpjU,MAAL,GAAc,CAAtC,EAAyC;AACvC,WAAKqjU,SAAL,GAAiB,IAAIr4T,UAAJ,CAAe,CAAf,EAAkBkG,IAAlB,CAAuB,CAAC,CAAxB,CAAjB;AACA,WAAKoyT,SAAL,GAAiB,IAAIt4T,UAAJ,CAAe,CAAf,EAAkBkG,IAAlB,CAAuB,CAAC,CAAxB,CAAjB;AACA,WAAKmyT,SAAL,CAAe,CAAf,IAAoBD,IAAI,CAAC,CAAD,CAAxB;AACA,WAAKC,SAAL,CAAe,CAAf,IAAoBD,IAAI,CAAC,CAAD,CAAxB;AACA,WAAKC,SAAL,CAAe,CAAf,IAAoBD,IAAI,CAAC,CAAD,CAAxB;AACAkC,MAAAA,OAAO,CAAClC,IAAI,CAAC,CAAD,CAAL,CAAP,GAAmB,CAAnB;AACA,UAAIA,IAAI,CAACpjU,MAAL,KAAgB,CAApB,EAAuBslU,OAAO,CAAClC,IAAI,CAAC,CAAD,CAAL,CAAP,GAAmB,CAAnB;AACxB;AACF;;AACDwE,EAAAA,OAAO,CAACp0D,MAAD,EAAS;AACd,WAAO,IAAIoxD,gBAAJ,CAAY,IAAZ,EAAkBpxD,MAAlB,CAAP;AACD;;AACD,GAAC1vD,SAAD,CAAWpjN,CAAX,EAAc;AACZ,UAAM;AAAC4kU,MAAAA,OAAD;AAAUlC,MAAAA,IAAV;AAAgBsE,MAAAA,UAAhB;AAA4BpE,MAAAA,SAA5B;AAAuCD,MAAAA,SAAvC;AAAkDnV,MAAAA;AAAlD,QAA+D,IAArE,CADY,CAGZ;;AACA,QAAIA,SAAJ,EAAe;AACb,YAAM17S,CAAC,GAAG07S,SAAS,CAACpwR,OAAV,CAAkBp9B,CAAlB,CAAV;AACA,UAAI8R,CAAC,GAAG,CAAR,EAAW,MAAM07S,SAAS,CAAC17S,CAAC,GAAG,CAAL,CAAf;AACX,UAAIA,CAAC,GAAG07S,SAAS,CAACluT,MAAV,GAAmB,CAA3B,EAA8B,MAAMkuT,SAAS,CAAC17S,CAAC,GAAG,CAAL,CAAf;AAC9B;AACD;;AAED,UAAMi0T,EAAE,GAAGnB,OAAO,CAAC5kU,CAAD,CAAlB;AACA,QAAI+lU,EAAE,KAAK,CAAC,CAAZ,EAAe,OAZH,CAYW;;AACvB,QAAIrnU,CAAC,GAAGqnU,EAAR;AAAA,QAAY7jH,EAAE,GAAG,CAAC,CAAlB;;AACA,OAAG;AACD,YAAMA,EAAE,GAAGygH,SAAS,CAACjkU,CAAD,CAApB;AACAA,MAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAcA,CAAC,GAAG,CAAlB,GAAsBA,CAAC,GAAG,CAA9B;AACA,UAAIikU,SAAS,CAACjkU,CAAD,CAAT,KAAiBsB,CAArB,EAAwB,OAHvB,CAG+B;;AAChCtB,MAAAA,CAAC,GAAGkkU,SAAS,CAAClkU,CAAD,CAAb;;AACA,UAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;AACZ,cAAM4lC,CAAC,GAAGo+R,IAAI,CAAC,CAACsE,UAAU,CAAChnU,CAAD,CAAV,GAAgB,CAAjB,IAAsB0iU,IAAI,CAACpjU,MAA5B,CAAd;AACA,YAAIglC,CAAC,KAAK49K,EAAV,EAAc,MAAM59K,CAAN;AACd;AACD;AACF,KAVD,QAUS5lC,CAAC,KAAKqnU,EAVf;AAWD;;AACDnzJ,EAAAA,IAAI,CAACzsK,CAAD,EAAIue,CAAJ,EAAO1kB,CAAC,GAAG,CAAX,EAAc;AAChB,QAAI,CAACmG,CAAC,GAAG,CAACA,CAAL,EAAQA,CAAC,KAAKA,CAAf,MAAsBue,CAAC,GAAG,CAACA,CAAL,EAAQA,CAAC,KAAKA,CAApC,CAAJ,EAA4C,OAAO,CAAC,CAAR;AAC5C,UAAMg8E,EAAE,GAAG1gG,CAAX;AACA,QAAIyM,CAAJ;;AACA,WAAO,CAACA,CAAC,GAAG,KAAK+4T,KAAL,CAAWxlU,CAAX,EAAcmG,CAAd,EAAiBue,CAAjB,CAAL,KAA6B,CAA7B,IAAkCjY,CAAC,KAAKzM,CAAxC,IAA6CyM,CAAC,KAAKi0F,EAA1D,EAA8D1gG,CAAC,GAAGyM,CAAJ;;AAC9D,WAAOA,CAAP;AACD;;AACD+4T,EAAAA,KAAK,CAACxlU,CAAD,EAAImG,CAAJ,EAAOue,CAAP,EAAU;AACb,UAAM;AAACkgT,MAAAA,OAAD;AAAUlC,MAAAA,IAAV;AAAgBsE,MAAAA,UAAhB;AAA4BpE,MAAAA,SAA5B;AAAuCD,MAAAA,SAAvC;AAAkDrhH,MAAAA;AAAlD,QAA4D,IAAlE;AACA,QAAIsjH,OAAO,CAAC5kU,CAAD,CAAP,KAAe,CAAC,CAAhB,IAAqB,CAACshN,MAAM,CAAChiN,MAAjC,EAAyC,OAAO,CAACU,CAAC,GAAG,CAAL,KAAWshN,MAAM,CAAChiN,MAAP,IAAiB,CAA5B,CAAP;AACzC,QAAImN,CAAC,GAAGzM,CAAR;AACA,QAAImnU,EAAE,GAAG1wT,GAAG,CAACtQ,CAAC,GAAGm7M,MAAM,CAACthN,CAAC,GAAG,CAAL,CAAX,EAAoB,CAApB,CAAH,GAA4ByW,GAAG,CAACiO,CAAC,GAAG48L,MAAM,CAACthN,CAAC,GAAG,CAAJ,GAAQ,CAAT,CAAX,EAAwB,CAAxB,CAAxC;AACA,UAAM+lU,EAAE,GAAGnB,OAAO,CAAC5kU,CAAD,CAAlB;AACA,QAAItB,CAAC,GAAGqnU,EAAR;;AACA,OAAG;AACD,UAAIriU,CAAC,GAAGi/T,SAAS,CAACjkU,CAAD,CAAjB;AACA,YAAMq7O,EAAE,GAAGtjO,GAAG,CAACtQ,CAAC,GAAGm7M,MAAM,CAAC59M,CAAC,GAAG,CAAL,CAAX,EAAoB,CAApB,CAAH,GAA4B+S,GAAG,CAACiO,CAAC,GAAG48L,MAAM,CAAC59M,CAAC,GAAG,CAAJ,GAAQ,CAAT,CAAX,EAAwB,CAAxB,CAA1C;AACA,UAAIq2O,EAAE,GAAGotF,EAAT,EAAaA,EAAE,GAAGptF,EAAL,EAASttO,CAAC,GAAG/I,CAAb;AACbhF,MAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAcA,CAAC,GAAG,CAAlB,GAAsBA,CAAC,GAAG,CAA9B;AACA,UAAIikU,SAAS,CAACjkU,CAAD,CAAT,KAAiBsB,CAArB,EAAwB,MALvB,CAK8B;;AAC/BtB,MAAAA,CAAC,GAAGkkU,SAAS,CAAClkU,CAAD,CAAb;;AACA,UAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;AACZA,QAAAA,CAAC,GAAGgkU,IAAI,CAAC,CAACsE,UAAU,CAAChnU,CAAD,CAAV,GAAgB,CAAjB,IAAsB0iU,IAAI,CAACpjU,MAA5B,CAAR;;AACA,YAAIZ,CAAC,KAAKgF,CAAV,EAAa;AACX,cAAI+S,GAAG,CAACtQ,CAAC,GAAGm7M,MAAM,CAAC5iN,CAAC,GAAG,CAAL,CAAX,EAAoB,CAApB,CAAH,GAA4B+X,GAAG,CAACiO,CAAC,GAAG48L,MAAM,CAAC5iN,CAAC,GAAG,CAAJ,GAAQ,CAAT,CAAX,EAAwB,CAAxB,CAA/B,GAA4DyoU,EAAhE,EAAoE,OAAOzoU,CAAP;AACrE;;AACD;AACD;AACF,KAdD,QAcSA,CAAC,KAAKqnU,EAdf;;AAeA,WAAOt5T,CAAP;AACD;;AACDq2Q,EAAAA,MAAM,CAAC9wG,OAAD,EAAU;AACd,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA,UAAM;AAACosF,MAAAA,MAAD;AAASshH,MAAAA,SAAT;AAAoBD,MAAAA;AAApB,QAAiC,IAAvC;;AACA,SAAK,IAAI3iU,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG00T,SAAS,CAACtjU,MAA9B,EAAsCU,CAAC,GAAGkO,CAA1C,EAA6C,EAAElO,CAA/C,EAAkD;AAChD,YAAMiK,CAAC,GAAG24T,SAAS,CAAC5iU,CAAD,CAAnB;AACA,UAAIiK,CAAC,GAAGjK,CAAR,EAAW;AACX,YAAM6kU,EAAE,GAAGlC,SAAS,CAAC3iU,CAAD,CAAT,GAAe,CAA1B;AACA,YAAM8kU,EAAE,GAAGnC,SAAS,CAAC14T,CAAD,CAAT,GAAe,CAA1B;AACA+nK,MAAAA,OAAO,CAACwrE,MAAR,CAAel8B,MAAM,CAACujH,EAAD,CAArB,EAA2BvjH,MAAM,CAACujH,EAAE,GAAG,CAAN,CAAjC;AACA7yJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAep8B,MAAM,CAACwjH,EAAD,CAArB,EAA2BxjH,MAAM,CAACwjH,EAAE,GAAG,CAAN,CAAjC;AACD;;AACD,SAAKsC,UAAL,CAAgBp1J,OAAhB;AACA,WAAOn+J,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACDqkU,EAAAA,YAAY,CAACr1J,OAAD,EAAUhkK,CAAC,GAAG,CAAd,EAAiB;AAC3B,UAAM6F,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA,UAAM;AAACosF,MAAAA;AAAD,QAAW,IAAjB;;AACA,SAAK,IAAIthN,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGozM,MAAM,CAAChiN,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0ClO,CAAC,IAAI,CAA/C,EAAkD;AAChD,YAAMmG,CAAC,GAAGm7M,MAAM,CAACthN,CAAD,CAAhB;AAAA,YAAqB0kB,CAAC,GAAG48L,MAAM,CAACthN,CAAC,GAAG,CAAL,CAA/B;AACAgyK,MAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG6H,CAAnB,EAAsB0W,CAAtB;AACAstJ,MAAAA,OAAO,CAAC+uC,GAAR,CAAY56M,CAAZ,EAAeue,CAAf,EAAkB1W,CAAlB,EAAqB,CAArB,EAAwBivO,GAAxB;AACD;;AACD,WAAOppO,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACDokU,EAAAA,UAAU,CAACp1J,OAAD,EAAU;AAClB,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA,UAAM;AAACwtM,MAAAA,IAAD;AAAOphH,MAAAA;AAAP,QAAiB,IAAvB;AACA,UAAM/0J,CAAC,GAAGm2Q,IAAI,CAAC,CAAD,CAAJ,GAAU,CAApB;AAAA,UAAuBx0T,CAAC,GAAGw0T,IAAI,CAACpjU,MAAhC;AACA0yK,IAAAA,OAAO,CAACwrE,MAAR,CAAel8B,MAAM,CAAC/0J,CAAD,CAArB,EAA0B+0J,MAAM,CAAC/0J,CAAC,GAAG,CAAL,CAAhC;;AACA,SAAK,IAAIvsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,YAAMusD,CAAC,GAAG,IAAIm2Q,IAAI,CAAC1iU,CAAD,CAAlB;AACAgyK,MAAAA,OAAO,CAAC0rE,MAAR,CAAep8B,MAAM,CAAC/0J,CAAD,CAArB,EAA0B+0J,MAAM,CAAC/0J,CAAC,GAAG,CAAL,CAAhC;AACD;;AACDylH,IAAAA,OAAO,CAACyrE,SAAR;AACA,WAAO5pO,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACDskU,EAAAA,WAAW,GAAG;AACZ,UAAM7lH,OAAO,GAAG,IAAIkC,gBAAJ,EAAhB;AACA,SAAKyjH,UAAL,CAAgB3lH,OAAhB;AACA,WAAOA,OAAO,CAACz+M,KAAR,EAAP;AACD;;AACDukU,EAAAA,cAAc,CAACvnU,CAAD,EAAIgyK,OAAJ,EAAa;AACzB,UAAMn+J,MAAM,GAAGm+J,OAAO,IAAI,IAAX,GAAkBA,OAAO,GAAG,IAAImrE,aAAJ,EAA5B,GAAuCjoH,SAAtD;AACA,UAAM;AAACosF,MAAAA,MAAD;AAASqhH,MAAAA;AAAT,QAAsB,IAA5B;AACA,UAAM13G,EAAE,GAAG03G,SAAS,CAAC3iU,CAAC,IAAI,CAAN,CAAT,GAAoB,CAA/B;AACA,UAAM2mF,EAAE,GAAGg8O,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CAAT,GAAmB,CAA9B;AACA,UAAM4mF,EAAE,GAAG+7O,SAAS,CAAC3iU,CAAC,GAAG,CAAL,CAAT,GAAmB,CAA9B;AACAgyK,IAAAA,OAAO,CAACwrE,MAAR,CAAel8B,MAAM,CAAC2J,EAAD,CAArB,EAA2B3J,MAAM,CAAC2J,EAAE,GAAG,CAAN,CAAjC;AACAj5C,IAAAA,OAAO,CAAC0rE,MAAR,CAAep8B,MAAM,CAAC36H,EAAD,CAArB,EAA2B26H,MAAM,CAAC36H,EAAE,GAAG,CAAN,CAAjC;AACAqrF,IAAAA,OAAO,CAAC0rE,MAAR,CAAep8B,MAAM,CAAC16H,EAAD,CAArB,EAA2B06H,MAAM,CAAC16H,EAAE,GAAG,CAAN,CAAjC;AACAorF,IAAAA,OAAO,CAACyrE,SAAR;AACA,WAAO5pO,MAAM,IAAIA,MAAM,CAAC7Q,KAAP,EAAjB;AACD;;AACD,GAACwkU,gBAAD,GAAoB;AAClB,UAAM;AAAC7E,MAAAA;AAAD,QAAc,IAApB;;AACA,SAAK,IAAI3iU,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGy0T,SAAS,CAACrjU,MAAV,GAAmB,CAAvC,EAA0CU,CAAC,GAAGkO,CAA9C,EAAiD,EAAElO,CAAnD,EAAsD;AACpD,YAAM,KAAKynU,eAAL,CAAqBznU,CAArB,CAAN;AACD;AACF;;AACDynU,EAAAA,eAAe,CAACznU,CAAD,EAAI;AACjB,UAAMyhN,OAAO,GAAG,IAAIkC,gBAAJ,EAAhB;AACA,SAAK4jH,cAAL,CAAoBvnU,CAApB,EAAuByhN,OAAvB;AACA,WAAOA,OAAO,CAACz+M,KAAR,EAAP;AACD;;AA7L2B;;;;AAgM9B,SAAS6jU,SAAT,CAAmBvlH,MAAnB,EAA2BuqE,EAA3B,EAA+BC,EAA/B,EAAmCtyF,IAAnC,EAAyC;AACvC,QAAMtrL,CAAC,GAAGozM,MAAM,CAAChiN,MAAjB;AACA,QAAMa,KAAK,GAAG,IAAI8kN,YAAJ,CAAiB/2M,CAAC,GAAG,CAArB,CAAd;;AACA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,UAAMskC,CAAC,GAAGg9K,MAAM,CAACthN,CAAD,CAAhB;AACAG,IAAAA,KAAK,CAACH,CAAC,GAAG,CAAL,CAAL,GAAe6rR,EAAE,CAAC/sR,IAAH,CAAQ06L,IAAR,EAAcl1J,CAAd,EAAiBtkC,CAAjB,EAAoBshN,MAApB,CAAf;AACAnhN,IAAAA,KAAK,CAACH,CAAC,GAAG,CAAJ,GAAQ,CAAT,CAAL,GAAmB8rR,EAAE,CAAChtR,IAAH,CAAQ06L,IAAR,EAAcl1J,CAAd,EAAiBtkC,CAAjB,EAAoBshN,MAApB,CAAnB;AACD;;AACD,SAAOnhN,KAAP;AACD;;AAED,UAAU2mU,YAAV,CAAuBxlH,MAAvB,EAA+BuqE,EAA/B,EAAmCC,EAAnC,EAAuCtyF,IAAvC,EAA6C;AAC3C,MAAIx5L,CAAC,GAAG,CAAR;;AACA,OAAK,MAAMskC,CAAX,IAAgBg9K,MAAhB,EAAwB;AACtB,UAAMuqE,EAAE,CAAC/sR,IAAH,CAAQ06L,IAAR,EAAcl1J,CAAd,EAAiBtkC,CAAjB,EAAoBshN,MAApB,CAAN;AACA,UAAMwqE,EAAE,CAAChtR,IAAH,CAAQ06L,IAAR,EAAcl1J,CAAd,EAAiBtkC,CAAjB,EAAoBshN,MAApB,CAAN;AACA,MAAEthN,CAAF;AACD;AACF;;;;;;;;;;;;;;;;;;;;ACnPD;;AACA;;;;;;;;;;;ACDA;;AACA;;AACA;;AAEA,SAASkkU,OAAT,CAAiB7gU,MAAjB,EAAyB;AACvB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD6gU,OAAO,CAAC/7F,UAAR,GAAqB;AACnB,UAAQ,SADW;AAEnB,cAAY;AACV,gBAAY;AADF,GAFO;AAKnB,YAAU,CAAC;AACT,YAAQ,GADC;AAET,YAAQ,OAFC;AAGT,gBAAY;AAHH,GAAD,EAIP;AACD,YAAQ,GADP;AAED,YAAQ,OAFP;AAGD,gBAAY;AAHX,GAJO,EAQP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU;AAJT,GARO,EAaP;AACD,YAAQ,QADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAW,CAAC,CAAC,CAAC,GAAF,EAAO,CAAC,GAAR,CAAD,EAAe,CAAC,GAAD,EAAM,GAAN,CAAf,CALV;AAMD,eAAW;AACT,cAAQ,QADC;AAET,eAAS,IAFA;AAGT,gBAAU;AAHD;AANV,GAbO,EAwBP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,eAAW;AAHV,GAxBO;AALS,CAArB;AAmCA,MAAMu/F,aAAa,GAAG,CAAC,CAAC,GAAF,EAAO,CAAC,GAAR,EAAa,GAAb,EAAkB,GAAlB,CAAtB;AACA,wBAASxD,OAAT,EAAkBj8F,uBAAlB,EAA6B;AAC3Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM8O,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQ,MAAnB;AAAA,UACMtgO,IAAI,GAAGwxN,KAAK,CAAC1qK,MADnB,CADkB,CAES;;AAE3B,QAAI,CAAC9mD,IAAD,IAAS,CAACA,IAAI,CAAC1P,MAAnB,EAA2B,OAAOkhO,KAAP,CAJT,CAIuB;;AAEzC,QAAIh9N,CAAC,GAAGmjB,CAAC,CAAClf,IAAV;AACAjE,IAAAA,CAAC,GAAGA,CAAC,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd,CAAH,GAAwB,CAACA,CAAC,GAAGmjB,CAAC,CAAC0yL,MAAP,IAAiB,CAAC71M,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAD,EAAUA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV,EAAmBA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAnB,EAA4BA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAA5B,CAAjB,GAAwDkkU,aAArF;;AACA,UAAMR,OAAO,GAAG,KAAKlkU,KAAL,GAAa4jU,qBAASv1T,IAAT,CAAcrC,IAAd,EAAoB2X,CAAC,CAACxgB,CAAtB,EAAyBwgB,CAAC,CAACjC,CAA3B,EAA8BwiT,OAA9B,CAAsC1jU,CAAtC,CAA7B,CARkB,CAQqD;;;AAEvE,SAAK,IAAIxD,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGc,IAAI,CAAC1P,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C,YAAMyhN,OAAO,GAAGylH,OAAO,CAAC7B,WAAR,CAAoBrlU,CAApB,CAAhB;AACAgP,MAAAA,IAAI,CAAChP,CAAD,CAAJ,CAAQsvO,EAAR,IAAc7tB,OAAO,GAAGkmH,YAAY,CAAClmH,OAAD,CAAf,GAA2B,IAAhD;AACD;;AAED,WAAO+e,KAAK,CAACJ,MAAN,CAAaz5M,CAAC,CAACo6M,QAAF,EAAb,EAA2BL,QAA3B,CAAoC4O,EAApC,CAAP;AACD;;AAjB0B,CAA7B,GAmBI;;AAEJ,SAASq4F,YAAT,CAAsBrjS,CAAtB,EAAyB;AACvB,QAAMn+B,CAAC,GAAGm+B,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAV;AAAA,QACM5f,CAAC,GAAG4f,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CADV;AAEA,MAAIp2B,CAAC,GAAGo2B,CAAC,CAAChlC,MAAF,GAAW,CAAnB;;AAEA,SAAOglC,CAAC,CAACp2B,CAAD,CAAD,CAAK,CAAL,MAAY/H,CAAZ,IAAiBm+B,CAAC,CAACp2B,CAAD,CAAD,CAAK,CAAL,MAAYwW,CAApC,EAAuC,EAAExW,CAAzC,CAA2C;;AAE3C,SAAO,MAAMo2B,CAAC,CAACj7B,KAAF,CAAQ,CAAR,EAAW6E,CAAC,GAAG,CAAf,EAAkBtK,IAAlB,CAAuB,GAAvB,CAAN,GAAoC,GAA3C;AACD;;;;;;;;;ACxED;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIgkU,YAAY,GAAG7hU,IAAI,CAACuiC,EAAL,GAAU,GAA7B;AAAA,IACIs2M,EAAE,GAAG,KAAK,EAAL,IAAW,CADpB;AAAA,IAEIipF,EAAE,GAAG,KAAK,EAFd;;AAGA,SAASC,KAAT,GAAkB;AAChB,MAAIrgU,IAAI,GAAG,CAAC,GAAD,EAAM,GAAN,CAAX;AAAA,MACIixG,IADJ;AAAA,MAEI4kK,IAFJ;AAAA,MAGIT,QAHJ;AAAA,MAIIoB,SAJJ;AAAA,MAKIE,UALJ;AAAA,MAMI5jB,MANJ;AAAA,MAOI99O,OAPJ;AAAA,MAQIsrT,MAAM,GAAGC,iBARb;AAAA,MASIC,KAAK,GAAG,EATZ;AAAA,MAUIjiU,MAAM,GAAGD,IAAI,CAACC,MAVlB;AAAA,MAWI8hU,KAAK,GAAG,EAXZ;;AAaAA,EAAAA,KAAK,CAAC/yH,MAAN,GAAe,YAAY;AACzB,QAAImzH,eAAe,GAAGh5S,UAAU,CAAC,yBAAD,CAAhC;AAAA,QACIi5S,KAAK,GAAGC,SAAS,CAAC,CAAC3gU,IAAI,CAAC,CAAD,CAAJ,IAAW,CAAZ,IAAiBA,IAAI,CAAC,CAAD,CAAtB,CADrB;AAAA,QAEIqrQ,MAAM,GAAG,IAFb;AAAA,QAGI5kQ,CAAC,GAAG+5T,KAAK,CAAC3oU,MAHd;AAAA,QAIIU,CAAC,GAAG,CAAC,CAJT;AAAA,QAKIqoU,IAAI,GAAG,EALX;AAAA,QAMIr5T,IAAI,GAAGi5T,KAAK,CAACx+T,GAAN,CAAUoD,CAAC,KAAK;AACzB6rG,MAAAA,IAAI,EAAEA,IAAI,CAAC7rG,CAAD,CADe;AAEzBywQ,MAAAA,IAAI,EAAEA,IAAI,CAACzwQ,CAAD,CAFe;AAGzB45Q,MAAAA,KAAK,EAAExI,SAAS,CAACpxQ,CAAD,CAHS;AAIzBusC,MAAAA,MAAM,EAAE+kO,UAAU,CAACtxQ,CAAD,CAJO;AAKzB0tP,MAAAA,MAAM,EAAEA,MAAM,CAAC1tP,CAAD,CALW;AAMzBpF,MAAAA,IAAI,EAAE,CAAC,EAAEo1Q,QAAQ,CAAChwQ,CAAD,CAAR,GAAc,KAAhB,CANkB;AAOzB4P,MAAAA,OAAO,EAAEA,OAAO,CAAC5P,CAAD,CAPS;AAQzBy7T,MAAAA,IAAI,EAAE,CARmB;AASzBC,MAAAA,IAAI,EAAE,CATmB;AAUzB91N,MAAAA,EAAE,EAAE,CAVqB;AAWzBD,MAAAA,EAAE,EAAE,CAXqB;AAYzB6tG,MAAAA,EAAE,EAAE,CAZqB;AAazBC,MAAAA,EAAE,EAAE,CAbqB;AAczBkoH,MAAAA,OAAO,EAAE,KAdgB;AAezBC,MAAAA,MAAM,EAAE,IAfiB;AAgBzB1pG,MAAAA,KAAK,EAAElyN;AAhBkB,KAAL,CAAX,EAiBP7C,IAjBO,CAiBF,CAAC9C,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAACtG,IAAF,GAASP,CAAC,CAACO,IAjBnB,CANX;;AAyBA,WAAO,EAAEzH,CAAF,GAAMkO,CAAb,EAAgB;AACd,UAAIrB,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAZ;AACA6M,MAAAA,CAAC,CAAC1G,CAAF,GAAMsB,IAAI,CAAC,CAAD,CAAJ,IAAWzB,MAAM,KAAK,EAAtB,KAA6B,CAAnC;AACA6G,MAAAA,CAAC,CAAC6X,CAAF,GAAMjd,IAAI,CAAC,CAAD,CAAJ,IAAWzB,MAAM,KAAK,EAAtB,KAA6B,CAAnC;AACA0iU,MAAAA,WAAW,CAACR,eAAD,EAAkBr7T,CAAlB,EAAqBmC,IAArB,EAA2BhP,CAA3B,CAAX;;AAEA,UAAI6M,CAAC,CAAC27T,OAAF,IAAa3N,KAAK,CAACsN,KAAD,EAAQt7T,CAAR,EAAWimQ,MAAX,CAAtB,EAA0C;AACxCu1D,QAAAA,IAAI,CAACpoU,IAAL,CAAU4M,CAAV;AACA,YAAIimQ,MAAJ,EAAY61D,WAAW,CAAC71D,MAAD,EAASjmQ,CAAT,CAAX,CAAZ,KAAwCimQ,MAAM,GAAG,CAAC;AAChD3sQ,UAAAA,CAAC,EAAE0G,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAACwzM,EADqC;AAEhD37L,UAAAA,CAAC,EAAE7X,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAACyzM;AAFqC,SAAD,EAG9C;AACDn6M,UAAAA,CAAC,EAAE0G,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAAC4lG,EADV;AAED/tF,UAAAA,CAAC,EAAE7X,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAAC2lG;AAFV,SAH8C,CAAT,CAFA,CAQpC;;AAEJ3lG,QAAAA,CAAC,CAAC1G,CAAF,IAAOsB,IAAI,CAAC,CAAD,CAAJ,IAAW,CAAlB;AACAoF,QAAAA,CAAC,CAAC6X,CAAF,IAAOjd,IAAI,CAAC,CAAD,CAAJ,IAAW,CAAlB;AACD;AACF;;AAED,WAAO4gU,IAAP;AACD,GAhDD;;AAkDA,WAASn5S,UAAT,CAAoBP,MAApB,EAA4B;AAC1BA,IAAAA,MAAM,CAACzmB,KAAP,GAAeymB,MAAM,CAACsH,MAAP,GAAgB,CAA/B;AACA,QAAIuwP,KAAK,GAAGzgR,IAAI,CAACqC,IAAL,CAAUumB,MAAM,CAACO,UAAP,CAAkB,IAAlB,EAAwBi+F,YAAxB,CAAqC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8C,CAA9C,EAAiDn+G,IAAjD,CAAsD1P,MAAtD,IAAgE,CAA1E,CAAZ;AACAqvB,IAAAA,MAAM,CAACzmB,KAAP,GAAe,CAAC02O,EAAE,IAAI,CAAP,IAAY4nC,KAA3B;AACA73P,IAAAA,MAAM,CAACsH,MAAP,GAAgB4xS,EAAE,GAAGrhD,KAArB;AACA,QAAIx0G,OAAO,GAAGrjJ,MAAM,CAACO,UAAP,CAAkB,IAAlB,CAAd;AACA8iJ,IAAAA,OAAO,CAACskG,SAAR,GAAoBtkG,OAAO,CAAC4kG,WAAR,GAAsB,KAA1C;AACA5kG,IAAAA,OAAO,CAACqsG,SAAR,GAAoB,QAApB;AACA,WAAO;AACLrsG,MAAAA,OAAO,EAAEA,OADJ;AAELw0G,MAAAA,KAAK,EAAEA;AAFF,KAAP;AAID;;AAED,WAASq0C,KAAT,CAAesN,KAAf,EAAsBpvD,GAAtB,EAA2BjG,MAA3B,EAAmC;AACjC,QAAI81D,MAAM,GAAG7vD,GAAG,CAAC5yQ,CAAjB;AAAA,QACI0iU,MAAM,GAAG9vD,GAAG,CAACr0P,CADjB;AAAA,QAEIokT,QAAQ,GAAG/iU,IAAI,CAACqC,IAAL,CAAUX,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC,CAAD,CAAd,GAAoBA,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC,CAAD,CAA5C,CAFf;AAAA,QAGIjE,CAAC,GAAGukU,MAAM,CAACtgU,IAAD,CAHd;AAAA,QAIIsyO,EAAE,GAAG/zO,MAAM,KAAK,EAAX,GAAgB,CAAhB,GAAoB,CAAC,CAJ9B;AAAA,QAKItC,CAAC,GAAG,CAACq2O,EALT;AAAA,QAMIw2D,IANJ;AAAA,QAOIzkR,EAPJ;AAAA,QAQIhH,EARJ;;AAUA,WAAOyrR,IAAI,GAAG/sS,CAAC,CAACE,CAAC,IAAIq2O,EAAN,CAAf,EAA0B;AACxBjuN,MAAAA,EAAE,GAAG,CAAC,CAACykR,IAAI,CAAC,CAAD,CAAX;AACAzrR,MAAAA,EAAE,GAAG,CAAC,CAACyrR,IAAI,CAAC,CAAD,CAAX;AACA,UAAIxqS,IAAI,CAACG,GAAL,CAASH,IAAI,CAACiT,GAAL,CAAS8S,EAAT,CAAT,EAAuB/lB,IAAI,CAACiT,GAAL,CAAS8L,EAAT,CAAvB,KAAwCgkT,QAA5C,EAAsD;AACtD/vD,MAAAA,GAAG,CAAC5yQ,CAAJ,GAAQyiU,MAAM,GAAG98S,EAAjB;AACAitP,MAAAA,GAAG,CAACr0P,CAAJ,GAAQmkT,MAAM,GAAG/jT,EAAjB;AACA,UAAIi0P,GAAG,CAAC5yQ,CAAJ,GAAQ4yQ,GAAG,CAAC14D,EAAZ,GAAiB,CAAjB,IAAsB04D,GAAG,CAACr0P,CAAJ,GAAQq0P,GAAG,CAACz4D,EAAZ,GAAiB,CAAvC,IAA4Cy4D,GAAG,CAAC5yQ,CAAJ,GAAQ4yQ,GAAG,CAACtmK,EAAZ,GAAiBhrG,IAAI,CAAC,CAAD,CAAjE,IAAwEsxQ,GAAG,CAACr0P,CAAJ,GAAQq0P,GAAG,CAACvmK,EAAZ,GAAiB/qG,IAAI,CAAC,CAAD,CAAjG,EAAsG,SAN9E,CAMwF;;AAEhH,UAAI,CAACqrQ,MAAD,IAAW,CAACi2D,YAAY,CAAChwD,GAAD,EAAMovD,KAAN,EAAa1gU,IAAI,CAAC,CAAD,CAAjB,CAA5B,EAAmD;AACjD,YAAI,CAACqrQ,MAAD,IAAWk2D,YAAY,CAACjwD,GAAD,EAAMjG,MAAN,CAA3B,EAA0C;AACxC,cAAI21D,MAAM,GAAG1vD,GAAG,CAAC0vD,MAAjB;AAAA,cACIn8Q,CAAC,GAAGysN,GAAG,CAAC7wQ,KAAJ,IAAa,CADrB;AAAA,cAEI2rQ,EAAE,GAAGpsQ,IAAI,CAAC,CAAD,CAAJ,IAAW,CAFpB;AAAA,cAGIulO,EAAE,GAAG+rC,GAAG,CAAC5yQ,CAAJ,IAASmmD,CAAC,IAAI,CAAd,CAHT;AAAA,cAIIsvN,EAAE,GAAG5uC,EAAE,GAAG,IAJd;AAAA,cAKIi8F,GAAG,GAAG,KAAKrtD,EALf;AAAA,cAMIrvN,CAAC,GAAGwsN,GAAG,CAACvmK,EAAJ,GAASumK,GAAG,CAACz4D,EANrB;AAAA,cAOIn6M,CAAC,GAAG,CAAC4yQ,GAAG,CAACr0P,CAAJ,GAAQq0P,GAAG,CAACz4D,EAAb,IAAmBuzD,EAAnB,IAAyB7mC,EAAE,IAAI,CAA/B,CAPR;AAAA,cAQI3F,IARJ;;AAUA,eAAK,IAAIp9N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsiD,CAApB,EAAuBtiD,CAAC,EAAxB,EAA4B;AAC1Bo9N,YAAAA,IAAI,GAAG,CAAP;;AAEA,iBAAK,IAAIrnO,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIssD,CAArB,EAAwBtsD,CAAC,EAAzB,EAA6B;AAC3BmoU,cAAAA,KAAK,CAAChiU,CAAC,GAAGnG,CAAL,CAAL,IAAgBqnO,IAAI,IAAI4hG,GAAR,IAAejpU,CAAC,GAAGssD,CAAJ,GAAQ,CAAC+6K,IAAI,GAAGohG,MAAM,CAACx+T,CAAC,GAAGqiD,CAAJ,GAAQtsD,CAAT,CAAd,MAA+B47Q,EAAvC,GAA4C,CAA3D,CAAhB;AACD;;AAEDz1Q,YAAAA,CAAC,IAAI0tQ,EAAL;AACD;;AAEDkF,UAAAA,GAAG,CAAC0vD,MAAJ,GAAa,IAAb;AACA,iBAAO,IAAP;AACD;AACF;AACF;;AAED,WAAO,KAAP;AACD;;AAEDX,EAAAA,KAAK,CAACG,KAAN,GAAc,UAAUthT,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB2oU,MAAAA,KAAK,GAAGthT,CAAR;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOG,KAAP;AACD;AACF,GAPD;;AASAH,EAAAA,KAAK,CAACrgU,IAAN,GAAa,UAAUkf,CAAV,EAAa;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBmI,MAAAA,IAAI,GAAG,CAAC,CAACkf,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAP;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOrgU,IAAP;AACD;AACF,GAPD;;AASAqgU,EAAAA,KAAK,CAACxqD,IAAN,GAAa,UAAU32P,CAAV,EAAa;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBg+Q,MAAAA,IAAI,GAAG4rD,OAAO,CAACviT,CAAD,CAAd;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOxqD,IAAP;AACD;AACF,GAPD;;AASAwqD,EAAAA,KAAK,CAAC7pD,SAAN,GAAkB,UAAUt3P,CAAV,EAAa;AAC7B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB2+Q,MAAAA,SAAS,GAAGirD,OAAO,CAACviT,CAAD,CAAnB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAO7pD,SAAP;AACD;AACF,GAPD;;AASA6pD,EAAAA,KAAK,CAAC3pD,UAAN,GAAmB,UAAUx3P,CAAV,EAAa;AAC9B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6+Q,MAAAA,UAAU,GAAG+qD,OAAO,CAACviT,CAAD,CAApB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAO3pD,UAAP;AACD;AACF,GAPD;;AASA2pD,EAAAA,KAAK,CAACvtE,MAAN,GAAe,UAAU5zO,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBi7P,MAAAA,MAAM,GAAG2uE,OAAO,CAACviT,CAAD,CAAhB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOvtE,MAAP;AACD;AACF,GAPD;;AASAutE,EAAAA,KAAK,CAACpvN,IAAN,GAAa,UAAU/xF,CAAV,EAAa;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBo5G,MAAAA,IAAI,GAAGwwN,OAAO,CAACviT,CAAD,CAAd;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOpvN,IAAP;AACD;AACF,GAPD;;AASAovN,EAAAA,KAAK,CAACC,MAAN,GAAe,UAAUphT,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpByoU,MAAAA,MAAM,GAAGoB,OAAO,CAACxiT,CAAD,CAAP,IAAcA,CAAvB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOC,MAAP;AACD;AACF,GAPD;;AASAD,EAAAA,KAAK,CAACjrD,QAAN,GAAiB,UAAUl2P,CAAV,EAAa;AAC5B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBu9Q,MAAAA,QAAQ,GAAGqsD,OAAO,CAACviT,CAAD,CAAlB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOjrD,QAAP;AACD;AACF,GAPD;;AASAirD,EAAAA,KAAK,CAACrrT,OAAN,GAAgB,UAAUkK,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBmd,MAAAA,OAAO,GAAGysT,OAAO,CAACviT,CAAD,CAAjB;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAOrrT,OAAP;AACD;AACF,GAPD;;AASAqrT,EAAAA,KAAK,CAAC9hU,MAAN,GAAe,UAAU2gB,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0G,MAAAA,MAAM,GAAG2gB,CAAT;AACA,aAAOmhT,KAAP;AACD,KAHD,MAGO;AACL,aAAO9hU,MAAP;AACD;AACF,GAPD;;AASA,SAAO8hU,KAAP;AACD,EAAC;AACF;;;AAEA,SAASY,WAAT,CAAqBR,eAArB,EAAsCr7T,CAAtC,EAAyCmC,IAAzC,EAA+Cg2S,EAA/C,EAAmD;AACjD,MAAIn4S,CAAC,CAAC47T,MAAN,EAAc;AACd,MAAIh8T,CAAC,GAAGy7T,eAAe,CAACl2J,OAAxB;AAAA,MACIw0G,KAAK,GAAG0hD,eAAe,CAAC1hD,KAD5B;AAEA/5Q,EAAAA,CAAC,CAAC46Q,SAAF,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAACzoC,EAAE,IAAI,CAAP,IAAY4nC,KAA9B,EAAqCqhD,EAAE,GAAGrhD,KAA1C;AACA,MAAIrgR,CAAC,GAAG,CAAR;AAAA,MACIue,CAAC,GAAG,CADR;AAAA,MAEI0kT,IAAI,GAAG,CAFX;AAAA,MAGIl7T,CAAC,GAAGc,IAAI,CAAC1P,MAHb;AAAA,MAIIgtD,CAJJ;AAAA,MAKI+8Q,GALJ;AAAA,MAMI98Q,CANJ;AAAA,MAOIvsD,CAPJ;AAAA,MAQIiK,CARJ;AASA,IAAE+6S,EAAF;;AAEA,SAAO,EAAEA,EAAF,GAAO92S,CAAd,EAAiB;AACfrB,IAAAA,CAAC,GAAGmC,IAAI,CAACg2S,EAAD,CAAR;AACAv4S,IAAAA,CAAC,CAAC2f,IAAF;AACA3f,IAAAA,CAAC,CAAC6wQ,IAAF,GAASzwQ,CAAC,CAAC45Q,KAAF,GAAU,GAAV,GAAgB55Q,CAAC,CAACusC,MAAlB,GAA2B,GAA3B,GAAiC,CAAC,EAAE,CAACvsC,CAAC,CAACpF,IAAF,GAAS,CAAV,IAAe++Q,KAAjB,CAAlC,GAA4D,KAA5D,GAAoE35Q,CAAC,CAACywQ,IAA/E;AACAhxN,IAAAA,CAAC,GAAG7/C,CAAC,CAAC+wQ,WAAF,CAAc3wQ,CAAC,CAAC6rG,IAAF,GAAS,GAAvB,EAA4BxwG,KAA5B,GAAoCs+Q,KAAxC;AACAj6N,IAAAA,CAAC,GAAG1/C,CAAC,CAACpF,IAAF,IAAU,CAAd;;AAEA,QAAIoF,CAAC,CAAC0tP,MAAN,EAAc;AACZ,UAAIniL,EAAE,GAAGryE,IAAI,CAAC+T,GAAL,CAASjN,CAAC,CAAC0tP,MAAF,GAAWqtE,YAApB,CAAT;AAAA,UACIz2D,EAAE,GAAGprQ,IAAI,CAACgU,GAAL,CAASlN,CAAC,CAAC0tP,MAAF,GAAWqtE,YAApB,CADT;AAAA,UAEI0B,GAAG,GAAGh9Q,CAAC,GAAG6kN,EAFd;AAAA,UAGIo4D,GAAG,GAAGj9Q,CAAC,GAAG8rB,EAHd;AAAA,UAIIoxP,GAAG,GAAGj9Q,CAAC,GAAG4kN,EAJd;AAAA,UAKIs4D,GAAG,GAAGl9Q,CAAC,GAAG6rB,EALd;AAMA9rB,MAAAA,CAAC,GAAGvmD,IAAI,CAACK,GAAL,CAASL,IAAI,CAACiT,GAAL,CAASswT,GAAG,GAAGG,GAAf,CAAT,EAA8B1jU,IAAI,CAACiT,GAAL,CAASswT,GAAG,GAAGG,GAAf,CAA9B,IAAqD,IAArD,IAA6D,CAA7D,IAAkE,CAAtE;AACAl9Q,MAAAA,CAAC,GAAG,CAAC,CAACxmD,IAAI,CAACK,GAAL,CAASL,IAAI,CAACiT,GAAL,CAASuwT,GAAG,GAAGC,GAAf,CAAT,EAA8BzjU,IAAI,CAACiT,GAAL,CAASuwT,GAAG,GAAGC,GAAf,CAA9B,CAAN;AACD,KATD,MASO;AACLl9Q,MAAAA,CAAC,GAAGA,CAAC,GAAG,IAAJ,IAAY,CAAZ,IAAiB,CAArB;AACD;;AAED,QAAIC,CAAC,GAAG68Q,IAAR,EAAcA,IAAI,GAAG78Q,CAAP;;AAEd,QAAIpmD,CAAC,GAAGmmD,CAAJ,IAASsyL,EAAE,IAAI,CAAnB,EAAsB;AACpBz4O,MAAAA,CAAC,GAAG,CAAJ;AACAue,MAAAA,CAAC,IAAI0kT,IAAL;AACAA,MAAAA,IAAI,GAAG,CAAP;AACD;;AAED,QAAI1kT,CAAC,GAAG6nC,CAAJ,IAASs7Q,EAAb,EAAiB;AACjBp7T,IAAAA,CAAC,CAACg0M,SAAF,CAAY,CAACt6M,CAAC,IAAImmD,CAAC,IAAI,CAAT,CAAF,IAAiBk6N,KAA7B,EAAoC,CAAC9hQ,CAAC,IAAI6nC,CAAC,IAAI,CAAT,CAAF,IAAiBi6N,KAArD;AACA,QAAI35Q,CAAC,CAAC0tP,MAAN,EAAc9tP,CAAC,CAAC8tP,MAAF,CAAS1tP,CAAC,CAAC0tP,MAAF,GAAWqtE,YAApB;AACdn7T,IAAAA,CAAC,CAACmyQ,QAAF,CAAW/xQ,CAAC,CAAC6rG,IAAb,EAAmB,CAAnB,EAAsB,CAAtB;;AAEA,QAAI7rG,CAAC,CAAC4P,OAAN,EAAe;AACbhQ,MAAAA,CAAC,CAACoqQ,SAAF,GAAc,IAAIhqQ,CAAC,CAAC4P,OAApB;AACAhQ,MAAAA,CAAC,CAACoyQ,UAAF,CAAahyQ,CAAC,CAAC6rG,IAAf,EAAqB,CAArB,EAAwB,CAAxB;AACD;;AAEDjsG,IAAAA,CAAC,CAAC6tQ,OAAF;AACAztQ,IAAAA,CAAC,CAAC3E,KAAF,GAAUokD,CAAV;AACAz/C,IAAAA,CAAC,CAACopB,MAAF,GAAWs2B,CAAX;AACA1/C,IAAAA,CAAC,CAACy7T,IAAF,GAASniU,CAAT;AACA0G,IAAAA,CAAC,CAAC07T,IAAF,GAAS7jT,CAAT;AACA7X,IAAAA,CAAC,CAAC4lG,EAAF,GAAOnmD,CAAC,IAAI,CAAZ;AACAz/C,IAAAA,CAAC,CAAC2lG,EAAF,GAAOjmD,CAAC,IAAI,CAAZ;AACA1/C,IAAAA,CAAC,CAACwzM,EAAF,GAAO,CAACxzM,CAAC,CAAC4lG,EAAV;AACA5lG,IAAAA,CAAC,CAACyzM,EAAF,GAAO,CAACzzM,CAAC,CAAC2lG,EAAV;AACA3lG,IAAAA,CAAC,CAAC27T,OAAF,GAAY,IAAZ;AACAriU,IAAAA,CAAC,IAAImmD,CAAL;AACD;;AAED,MAAIZ,MAAM,GAAGj/C,CAAC,CAAC0gH,YAAF,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAACyxH,EAAE,IAAI,CAAP,IAAY4nC,KAAjC,EAAwCqhD,EAAE,GAAGrhD,KAA7C,EAAoDx3Q,IAAjE;AAAA,MACIy5T,MAAM,GAAG,EADb;;AAGA,SAAO,EAAEzjB,EAAF,IAAQ,CAAf,EAAkB;AAChBn4S,IAAAA,CAAC,GAAGmC,IAAI,CAACg2S,EAAD,CAAR;AACA,QAAI,CAACn4S,CAAC,CAAC27T,OAAP,EAAgB;AAChBl8Q,IAAAA,CAAC,GAAGz/C,CAAC,CAAC3E,KAAN;AACAmhU,IAAAA,GAAG,GAAG/8Q,CAAC,IAAI,CAAX;AACAC,IAAAA,CAAC,GAAG1/C,CAAC,CAAC2lG,EAAF,GAAO3lG,CAAC,CAACyzM,EAAb,CALgB,CAKC;;AAEjB,SAAKtgN,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGusD,CAAC,GAAG88Q,GAApB,EAAyBrpU,CAAC,EAA1B,EAA8ByoU,MAAM,CAACzoU,CAAD,CAAN,GAAY,CAAZ;;AAE9BmG,IAAAA,CAAC,GAAG0G,CAAC,CAACy7T,IAAN;AACA,QAAIniU,CAAC,IAAI,IAAT,EAAe;AACfue,IAAAA,CAAC,GAAG7X,CAAC,CAAC07T,IAAN;AACA,QAAI/nT,IAAI,GAAG,CAAX;AAAA,QACIkpT,OAAO,GAAG,CAAC,CADf;;AAGA,SAAKz/T,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsiD,CAAhB,EAAmBtiD,CAAC,EAApB,EAAwB;AACtB,WAAKjK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGssD,CAAhB,EAAmBtsD,CAAC,EAApB,EAAwB;AACtB,YAAIsd,CAAC,GAAG+rT,GAAG,GAAGp/T,CAAN,IAAWjK,CAAC,IAAI,CAAhB,CAAR;AAAA,YACIy3F,CAAC,GAAG/rC,MAAM,CAAC,CAAChnC,CAAC,GAAGza,CAAL,KAAW20O,EAAE,IAAI,CAAjB,KAAuBz4O,CAAC,GAAGnG,CAA3B,KAAiC,CAAlC,CAAN,GAA6C,KAAK,KAAKA,CAAC,GAAG,EAA3D,GAAgE,CADxE;AAEAyoU,QAAAA,MAAM,CAACnrT,CAAD,CAAN,IAAam6E,CAAb;AACAj3E,QAAAA,IAAI,IAAIi3E,CAAR;AACD;;AAED,UAAIj3E,IAAJ,EAAUkpT,OAAO,GAAGz/T,CAAV,CAAV,KAA2B;AACzB4C,QAAAA,CAAC,CAACyzM,EAAF;AACA/zJ,QAAAA,CAAC;AACDtiD,QAAAA,CAAC;AACDya,QAAAA,CAAC;AACF;AACF;;AAED7X,IAAAA,CAAC,CAAC2lG,EAAF,GAAO3lG,CAAC,CAACyzM,EAAF,GAAOopH,OAAd;AACA78T,IAAAA,CAAC,CAAC47T,MAAF,GAAWA,MAAM,CAACp/T,KAAP,CAAa,CAAb,EAAgB,CAACwD,CAAC,CAAC2lG,EAAF,GAAO3lG,CAAC,CAACyzM,EAAV,IAAgB+oH,GAAhC,CAAX;AACD;AACF,EAAC;;;AAGF,SAASN,YAAT,CAAsBhwD,GAAtB,EAA2BovD,KAA3B,EAAkCt0D,EAAlC,EAAsC;AACpCA,EAAAA,EAAE,KAAK,CAAP;AACA,MAAI40D,MAAM,GAAG1vD,GAAG,CAAC0vD,MAAjB;AAAA,MACIn8Q,CAAC,GAAGysN,GAAG,CAAC7wQ,KAAJ,IAAa,CADrB;AAAA,MAEI8kO,EAAE,GAAG+rC,GAAG,CAAC5yQ,CAAJ,IAASmmD,CAAC,IAAI,CAAd,CAFT;AAAA,MAGIsvN,EAAE,GAAG5uC,EAAE,GAAG,IAHd;AAAA,MAIIi8F,GAAG,GAAG,KAAKrtD,EAJf;AAAA,MAKIrvN,CAAC,GAAGwsN,GAAG,CAACvmK,EAAJ,GAASumK,GAAG,CAACz4D,EALrB;AAAA,MAMIn6M,CAAC,GAAG,CAAC4yQ,GAAG,CAACr0P,CAAJ,GAAQq0P,GAAG,CAACz4D,EAAb,IAAmBuzD,EAAnB,IAAyB7mC,EAAE,IAAI,CAA/B,CANR;AAAA,MAOI3F,IAPJ;;AASA,OAAK,IAAIp9N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsiD,CAApB,EAAuBtiD,CAAC,EAAxB,EAA4B;AAC1Bo9N,IAAAA,IAAI,GAAG,CAAP;;AAEA,SAAK,IAAIrnO,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIssD,CAArB,EAAwBtsD,CAAC,EAAzB,EAA6B;AAC3B,UAAI,CAACqnO,IAAI,IAAI4hG,GAAR,IAAejpU,CAAC,GAAGssD,CAAJ,GAAQ,CAAC+6K,IAAI,GAAGohG,MAAM,CAACx+T,CAAC,GAAGqiD,CAAJ,GAAQtsD,CAAT,CAAd,MAA+B47Q,EAAvC,GAA4C,CAA3D,CAAD,IAAkEusD,KAAK,CAAChiU,CAAC,GAAGnG,CAAL,CAA3E,EAAoF,OAAO,IAAP;AACrF;;AAEDmG,IAAAA,CAAC,IAAI0tQ,EAAL;AACD;;AAED,SAAO,KAAP;AACD;;AAED,SAAS80D,WAAT,CAAqB71D,MAArB,EAA6BjmQ,CAA7B,EAAgC;AAC9B,MAAIgnO,EAAE,GAAGi/B,MAAM,CAAC,CAAD,CAAf;AAAA,MACIh/B,EAAE,GAAGg/B,MAAM,CAAC,CAAD,CADf;AAEA,MAAIjmQ,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAACwzM,EAAR,GAAawzB,EAAE,CAAC1tO,CAApB,EAAuB0tO,EAAE,CAAC1tO,CAAH,GAAO0G,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAACwzM,EAAf;AACvB,MAAIxzM,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAACyzM,EAAR,GAAauzB,EAAE,CAACnvN,CAApB,EAAuBmvN,EAAE,CAACnvN,CAAH,GAAO7X,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAACyzM,EAAf;AACvB,MAAIzzM,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAAC4lG,EAAR,GAAaqhI,EAAE,CAAC3tO,CAApB,EAAuB2tO,EAAE,CAAC3tO,CAAH,GAAO0G,CAAC,CAAC1G,CAAF,GAAM0G,CAAC,CAAC4lG,EAAf;AACvB,MAAI5lG,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAAC2lG,EAAR,GAAashI,EAAE,CAACpvN,CAApB,EAAuBovN,EAAE,CAACpvN,CAAH,GAAO7X,CAAC,CAAC6X,CAAF,GAAM7X,CAAC,CAAC2lG,EAAf;AACxB;;AAED,SAASw2N,YAAT,CAAsB9hU,CAAtB,EAAyB6G,CAAzB,EAA4B;AAC1B,SAAO7G,CAAC,CAACf,CAAF,GAAMe,CAAC,CAACurG,EAAR,GAAa1kG,CAAC,CAAC,CAAD,CAAD,CAAK5H,CAAlB,IAAuBe,CAAC,CAACf,CAAF,GAAMe,CAAC,CAACm5M,EAAR,GAAatyM,CAAC,CAAC,CAAD,CAAD,CAAK5H,CAAzC,IAA8Ce,CAAC,CAACwd,CAAF,GAAMxd,CAAC,CAACsrG,EAAR,GAAazkG,CAAC,CAAC,CAAD,CAAD,CAAK2W,CAAhE,IAAqExd,CAAC,CAACwd,CAAF,GAAMxd,CAAC,CAACo5M,EAAR,GAAavyM,CAAC,CAAC,CAAD,CAAD,CAAK2W,CAA9F;AACD;;AAED,SAASsjT,iBAAT,CAA2BvgU,IAA3B,EAAiC;AAC/B,MAAI/I,CAAC,GAAG+I,IAAI,CAAC,CAAD,CAAJ,GAAUA,IAAI,CAAC,CAAD,CAAtB;AACA,SAAO,UAAU/D,CAAV,EAAa;AAClB,WAAO,CAAChF,CAAC,IAAIgF,CAAC,IAAI,EAAT,CAAD,GAAgBqC,IAAI,CAACgU,GAAL,CAASrW,CAAT,CAAjB,EAA8BA,CAAC,GAAGqC,IAAI,CAAC+T,GAAL,CAASpW,CAAT,CAAlC,CAAP;AACD,GAFD;AAGD;;AAED,SAASimU,iBAAT,CAA2BliU,IAA3B,EAAiC;AAC/B,MAAIqd,EAAE,GAAG,CAAT;AAAA,MACIgH,EAAE,GAAGhH,EAAE,GAAGrd,IAAI,CAAC,CAAD,CAAT,GAAeA,IAAI,CAAC,CAAD,CAD5B;AAAA,MAEItB,CAAC,GAAG,CAFR;AAAA,MAGIue,CAAC,GAAG,CAHR;AAIA,SAAO,UAAUhhB,CAAV,EAAa;AAClB,QAAI+U,IAAI,GAAG/U,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAxB,CADkB,CACS;;AAE3B,YAAQqC,IAAI,CAACqC,IAAL,CAAU,IAAI,IAAIqQ,IAAJ,GAAW/U,CAAzB,IAA8B+U,IAA9B,GAAqC,CAA7C;AACE,WAAK,CAAL;AACEtS,QAAAA,CAAC,IAAI2lB,EAAL;AACA;;AAEF,WAAK,CAAL;AACEpH,QAAAA,CAAC,IAAII,EAAL;AACA;;AAEF,WAAK,CAAL;AACE3e,QAAAA,CAAC,IAAI2lB,EAAL;AACA;;AAEF;AACEpH,QAAAA,CAAC,IAAII,EAAL;AACA;AAfJ;;AAkBA,WAAO,CAAC3e,CAAD,EAAIue,CAAJ,CAAP;AACD,GAtBD;AAuBD,EAAC;;;AAGF,SAAS0jT,SAAT,CAAmBl6T,CAAnB,EAAsB;AACpB,MAAIhH,CAAC,GAAG,EAAR;AAAA,MACIlH,CAAC,GAAG,CAAC,CADT;;AAGA,SAAO,EAAEA,CAAF,GAAMkO,CAAb,EAAgBhH,CAAC,CAAClH,CAAD,CAAD,GAAO,CAAP;;AAEhB,SAAOkH,CAAP;AACD;;AAED,SAASgiU,OAAT,CAAiBr8T,CAAjB,EAAoB;AAClB,SAAO,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,YAAY;AAC/C,WAAOA,CAAP;AACD,GAFD;AAGD;;AAED,IAAIs8T,OAAO,GAAG;AACZS,EAAAA,WAAW,EAAE5B,iBADD;AAEZ6B,EAAAA,WAAW,EAAEF;AAFD,CAAd;AAKA,MAAMh0F,MAAM,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,MAAX,EAAmB,UAAnB,EAA+B,WAA/B,EAA4C,YAA5C,EAA0D,OAA1D,CAAf;AACA,MAAM2D,MAAM,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,QAAjB,EAA2B,UAA3B,EAAuC,WAAvC,EAAoD,YAApD,CAAf;;AACA,SAASwwF,SAAT,CAAmBzmU,MAAnB,EAA2B;AACzB4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqBgpU,KAAK,EAA1B,EAA8BzkU,MAA9B;AACD;;AACDymU,SAAS,CAAC3hG,UAAV,GAAuB;AACrB,UAAQ,WADa;AAErB,cAAY;AACV,gBAAY;AADF,GAFS;AAKrB,YAAU,CAAC;AACT,YAAQ,MADC;AAET,YAAQ,QAFC;AAGT,aAAS,IAHA;AAIT,cAAU;AAJD,GAAD,EAKP;AACD,YAAQ,MADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GALO,EAUP;AACD,YAAQ,WADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GAVO,EAeP;AACD,YAAQ,YADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GAfO,EAoBP;AACD,YAAQ,UADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GApBO,EAyBP;AACD,YAAQ,eADP;AAED,YAAQ,QAFP;AAGD,aAAS,UAHR;AAID,eAAW,CAAC,EAAD,EAAK,EAAL;AAJV,GAzBO,EA8BP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,YAAQ,IAHP;AAID,eAAW;AAJV,GA9BO,EAmCP;AACD,YAAQ,MADP;AAED,YAAQ;AAFP,GAnCO,EAsCP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,cAAU,CAAC,aAAD,EAAgB,aAAhB;AAHT,GAtCO,EA0CP;AACD,YAAQ,SADP;AAED,YAAQ,QAFP;AAGD,YAAQ;AAHP,GA1CO,EA8CP;AACD,YAAQ,IADP;AAED,YAAQ,QAFP;AAGD,aAAS,IAHR;AAID,cAAU,CAJT;AAKD,eAAWwN;AALV,GA9CO;AALW,CAAvB;AA2DA,wBAASm0F,SAAT,EAAoB7hG,uBAApB,EAA+B;AAC7Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI75M,CAAC,CAAClf,IAAF,IAAU,EAAEkf,CAAC,CAAClf,IAAF,CAAO,CAAP,KAAakf,CAAC,CAAClf,IAAF,CAAO,CAAP,CAAf,CAAd,EAAyC;AACvC,2BAAM,6CAAN;AACD;;AAED,aAAS04N,IAAT,CAAcnrL,KAAd,EAAqB;AACnB,YAAM1Q,CAAC,GAAG3d,CAAC,CAACquB,KAAD,CAAX;AACA,aAAO,0BAAW1Q,CAAX,KAAiBk8L,KAAK,CAACO,QAAN,CAAez8L,CAAC,CAACwZ,MAAjB,CAAxB;AACD;;AAED,UAAM3mC,GAAG,GAAGwP,CAAC,CAACo6M,QAAF,EAAZ;;AAEA,QAAI,EAAE5pN,GAAG,IAAIqpN,KAAK,CAAC74B,OAAN,CAAc64B,KAAK,CAAC+D,OAApB,CAAP,IAAuC+U,MAAM,CAACt4N,IAAP,CAAYm/M,IAAZ,CAAzC,CAAJ,EAAiE;AACjE,UAAMnxN,IAAI,GAAGwxN,KAAK,CAACuE,WAAN,CAAkBvE,KAAK,CAACmE,MAAxB,EAAgC7uK,MAA7C;AAAA,UACMi/I,MAAM,GAAG,KAAK/xM,KADpB;AAAA,UAEMssO,EAAE,GAAG3oN,CAAC,CAAC2oN,EAAF,IAAQqG,MAFnB;AAGA,QAAIknC,QAAQ,GAAGl2P,CAAC,CAACk2P,QAAF,IAAc,EAA7B;AAAA,QACIr7O,KADJ;AAEA,8BAAWq7O,QAAX,IAAuBr7O,KAAK,GAAG7a,CAAC,CAACojT,aAAjC,GAAiDltD,QAAQ,GAAG,wBAASA,QAAT,CAA5D,CAlBkB,CAkB8D;;AAEhF,QAAIr7O,KAAJ,EAAW;AACT,YAAMwoS,KAAK,GAAGntD,QAAd;AAAA,YACMotD,SAAS,GAAG,sBAAM,MAAN,IAAgB70H,MAAhB,CAAuB,sBAAOpmM,IAAP,EAAag7T,KAAb,CAAvB,EAA4CxoS,KAA5C,CAAkDA,KAAlD,CADlB;;AAGAq7O,MAAAA,QAAQ,GAAG12Q,CAAC,IAAI8jU,SAAS,CAACD,KAAK,CAAC7jU,CAAD,CAAN,CAAzB;AACD;;AAED6I,IAAAA,IAAI,CAAClL,OAAL,CAAaJ,CAAC,IAAI;AAChBA,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAW/8J,GAAX;AACA7uE,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAW/8J,GAAX;AACA7uE,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAW,CAAX;AACD,KAJD,EA3BkB,CA+Bd;;AAEJ,UAAM24F,KAAK,GAAGlzH,MAAM,CAACkzH,KAAP,CAAaj5T,IAAb,EAAmB0pG,IAAnB,CAAwB/xF,CAAC,CAAC+xF,IAA1B,EAAgCjxG,IAAhC,CAAqCkf,CAAC,CAAClf,IAAF,IAAU,CAAC,GAAD,EAAM,GAAN,CAA/C,EAA2DgV,OAA3D,CAAmEkK,CAAC,CAAClK,OAAF,IAAa,CAAhF,EAAmFsrT,MAAnF,CAA0FphT,CAAC,CAACohT,MAAF,IAAY,aAAtG,EAAqHxtE,MAArH,CAA4H5zO,CAAC,CAAC4zO,MAAF,IAAY,CAAxI,EAA2I+iB,IAA3I,CAAgJ32P,CAAC,CAAC22P,IAAF,IAAU,YAA1J,EAAwKW,SAAxK,CAAkLt3P,CAAC,CAACs3P,SAAF,IAAe,QAAjM,EAA2ME,UAA3M,CAAsNx3P,CAAC,CAACw3P,UAAF,IAAgB,QAAtO,EAAgPtB,QAAhP,CAAyPA,QAAzP,EAAmQ72Q,MAAnQ,CAA0QA,sBAA1Q,EAAkR+uM,MAAlR,EAAd;AACA,UAAMttM,IAAI,GAAGstM,MAAM,CAACttM,IAAP,EAAb;AAAA,UACMqkB,EAAE,GAAGrkB,IAAI,CAAC,CAAD,CAAJ,IAAW,CADtB;AAAA,UAEMqd,EAAE,GAAGrd,IAAI,CAAC,CAAD,CAAJ,IAAW,CAFtB;AAAA,UAGMyG,CAAC,GAAG+5T,KAAK,CAAC3oU,MAHhB;;AAKA,SAAK,IAAIU,CAAC,GAAG,CAAR,EAAWssD,CAAX,EAAc5oD,CAAnB,EAAsB1D,CAAC,GAAGkO,CAA1B,EAA6B,EAAElO,CAA/B,EAAkC;AAChCssD,MAAAA,CAAC,GAAG27Q,KAAK,CAACjoU,CAAD,CAAT;AACA0D,MAAAA,CAAC,GAAG4oD,CAAC,CAACyyK,KAAN;AACAr7N,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAACnmD,CAAF,GAAM2lB,EAAjB;AACApoB,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAAC5nC,CAAF,GAAMI,EAAjB;AACAphB,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAACgxN,IAAb;AACA55Q,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAAC7kD,IAAb;AACA/D,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAACm6N,KAAb;AACA/iR,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAAClT,MAAb;AACA11C,MAAAA,CAAC,CAAC4rO,EAAE,CAAC,CAAD,CAAH,CAAD,GAAWhjL,CAAC,CAACiuM,MAAb;AACD;;AAED,WAAO/5B,KAAK,CAACJ,MAAN,CAAajpN,GAAb,EAAkBupN,QAAlB,CAA2B4O,EAA3B,CAAP;AACD;;AArD4B,CAA/B;;;;;;;;;;ACzhBA;;AACA;;AACA;;AAEA,MAAM46F,MAAM,GAAGh8T,CAAC,IAAI,IAAI3D,UAAJ,CAAe2D,CAAf,CAApB;;AACA,MAAMi8T,OAAO,GAAGj8T,CAAC,IAAI,IAAI07C,WAAJ,CAAgB17C,CAAhB,CAArB;;AACA,MAAMk8T,OAAO,GAAGl8T,CAAC,IAAI,IAAIE,WAAJ,CAAgBF,CAAhB,CAArB;AAEA;AACA;AACA;;;AAEA,SAASm8T,OAAT,GAAmB;AACjB,MAAIniU,KAAK,GAAG,CAAZ;AAAA,MACI8G,IAAI,GAAG,EADX;AAAA,MAEIwR,IAAI,GAAG4pT,OAAO,CAAC,CAAD,CAFlB;AAAA,MAGIp1J,IAAI,GAAG70K,KAAK,CAAC,CAAD,EAAI+H,KAAJ,CAHhB;AAAA,MAIIixF,IAAI,GAAGh5F,KAAK,CAAC,CAAD,EAAI+H,KAAJ,CAJhB;AAKA,SAAO;AACL8G,IAAAA,IAAI,EAAE,MAAMA,IADP;AAELwR,IAAAA,IAAI,EAAE,MAAMA,IAAI,GAAG8pT,QAAQ,CAAC9pT,IAAD,EAAOxR,IAAI,CAAC1P,MAAZ,CAFtB;;AAILqhB,IAAAA,GAAG,CAACxgB,KAAD,EAAQ;AACT,WAAK,IAAIH,CAAC,GAAG,CAAR,EAAWiK,CAAC,GAAG+E,IAAI,CAAC1P,MAApB,EAA4B4O,CAAC,GAAG/N,KAAK,CAACb,MAAtC,EAA8CoE,CAAnD,EAAsD1D,CAAC,GAAGkO,CAA1D,EAA6D,EAAElO,CAA/D,EAAkE;AAChE0D,QAAAA,CAAC,GAAGvD,KAAK,CAACH,CAAD,CAAT;AACA0D,QAAAA,CAAC,CAAC6mU,MAAF,GAAWtgU,CAAC,EAAZ;AACA+E,QAAAA,IAAI,CAAC/O,IAAL,CAAUyD,CAAV;AACD;AACF,KAVI;;AAYLyvE,IAAAA,MAAM,CAACxoE,GAAD,EAAMlB,GAAN,EAAW;AACf;AACA,YAAMyE,CAAC,GAAGc,IAAI,CAAC1P,MAAf;AAAA,YACMw1E,IAAI,GAAGh1E,KAAK,CAACoO,CAAC,GAAGvD,GAAL,CADlB;AAAA,YAEM6/T,OAAO,GAAGx7T,IAFhB,CAFe,CAIO;;AAEtB,UAAItL,CAAJ,EAAO1D,CAAP,EAAUiK,CAAV,CANe,CAMF;;AAEb,WAAKjK,CAAC,GAAG,CAAT,EAAY,CAACyJ,GAAG,CAACzJ,CAAD,CAAJ,IAAWA,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC;AACjC80E,QAAAA,IAAI,CAAC90E,CAAD,CAAJ,GAAUgP,IAAI,CAAChP,CAAD,CAAd;AACAwqU,QAAAA,OAAO,CAACxqU,CAAD,CAAP,GAAaA,CAAb;AACD,OAXc,CAWb;;;AAGF,WAAKiK,CAAC,GAAGjK,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB0D,QAAAA,CAAC,GAAGsL,IAAI,CAAChP,CAAD,CAAR;;AAEA,YAAI,CAACyJ,GAAG,CAACzJ,CAAD,CAAR,EAAa;AACXwqU,UAAAA,OAAO,CAACxqU,CAAD,CAAP,GAAaiK,CAAb;AACA+qK,UAAAA,IAAI,CAAC/qK,CAAD,CAAJ,GAAU+qK,IAAI,CAACh1K,CAAD,CAAd;AACAm5F,UAAAA,IAAI,CAAClvF,CAAD,CAAJ,GAAUkvF,IAAI,CAACn5F,CAAD,CAAd;AACA80E,UAAAA,IAAI,CAAC7qE,CAAD,CAAJ,GAAUvG,CAAV;AACAA,UAAAA,CAAC,CAAC6mU,MAAF,GAAWtgU,CAAC,EAAZ;AACD,SAND,MAMO;AACLugU,UAAAA,OAAO,CAACxqU,CAAD,CAAP,GAAa,CAAC,CAAd;AACD;;AAEDg1K,QAAAA,IAAI,CAACh1K,CAAD,CAAJ,GAAU,CAAV,CAbsB,CAaT;AACd;;AAEDgP,MAAAA,IAAI,GAAG8lE,IAAP;AACA,aAAO01P,OAAP;AACD,KA5CI;;AA8CL/iU,IAAAA,IAAI,EAAE,MAAMuH,IAAI,CAAC1P,MA9CZ;AA+CL01K,IAAAA,IAAI,EAAE,MAAMA,IA/CP;AAgDL77E,IAAAA,IAAI,EAAE,MAAMA,IAhDP;AAiDLzsE,IAAAA,KAAK,EAAEpP,CAAC,IAAI67E,IAAI,CAAC77E,CAAD,CAAJ,GAAU03J,IAAI,CAAC13J,CAAD,CAjDrB;AAkDLvH,IAAAA,GAAG,EAAE,MAAM7N,KAAK,GAAG,KAAR,GAAgB,IAAhB,GAAuBA,KAAK,GAAG,OAAR,GAAkB,MAAlB,GAA2B,UAlDxD;;AAoDLvF,IAAAA,GAAG,CAAC2a,CAAD,EAAI0xE,GAAJ,EAAS;AACVgmF,MAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACD,KAtDI;;AAwDLyoH,IAAAA,KAAK,CAACn6L,CAAD,EAAI0xE,GAAJ,EAAS;AACZgmF,MAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW,CAAC0xE,GAAZ;AACD,KA1DI;;AA4DL4kG,IAAAA,MAAM,CAAC1lL,CAAD,EAAIupF,CAAJ,EAAO;AACX,YAAMn6E,CAAC,GAAG03J,IAAI,CAAC11K,MAAf;;AAEA,UAAI4O,CAAC,GAAGoP,CAAJ,IAASm6E,CAAC,GAAGvvF,KAAjB,EAAwB;AACtBA,QAAAA,KAAK,GAAGnC,IAAI,CAACK,GAAL,CAASqxF,CAAT,EAAYvvF,KAAZ,CAAR;AACA8sK,QAAAA,IAAI,GAAG70K,KAAK,CAAC+N,CAAD,EAAIhG,KAAJ,EAAW8sK,IAAX,CAAZ;AACA77E,QAAAA,IAAI,GAAGh5F,KAAK,CAAC+N,CAAD,EAAIhG,KAAJ,CAAZ;AACD;AACF;;AApEI,GAAP;AAuED;;AAED,SAASoiU,QAAT,CAAkBnqU,KAAlB,EAAyBb,MAAzB,EAAiCw1E,IAAjC,EAAuC;AACrC,MAAI30E,KAAK,CAACb,MAAN,IAAgBA,MAApB,EAA4B,OAAOa,KAAP;AAC5B20E,EAAAA,IAAI,GAAGA,IAAI,IAAI,IAAI30E,KAAK,CAACyL,WAAV,CAAsBtM,MAAtB,CAAf;AACAw1E,EAAAA,IAAI,CAACnyE,GAAL,CAASxC,KAAT;AACA,SAAO20E,IAAP;AACD;;AAED,SAAS30E,KAAT,CAAe+N,CAAf,EAAkBupF,CAAlB,EAAqBt3F,KAArB,EAA4B;AAC1B,QAAM20E,IAAI,GAAG,CAAC2iB,CAAC,GAAG,KAAJ,GAAYyyO,MAAZ,GAAqBzyO,CAAC,GAAG,OAAJ,GAAc0yO,OAAd,GAAwBC,OAA9C,EAAuDl8T,CAAvD,CAAb;AACA,MAAI/N,KAAJ,EAAW20E,IAAI,CAACnyE,GAAL,CAASxC,KAAT;AACX,SAAO20E,IAAP;AACD;;AAED,SAAS21P,SAAT,CAAoB3kU,KAApB,EAA2B9F,CAA3B,EAA8BgpB,KAA9B,EAAqC;AACnC,QAAM24M,GAAG,GAAG,KAAK3hO,CAAjB;AACA,SAAO;AACLgvF,IAAAA,GAAG,EAAE2yI,GADA;AAEL/rL,IAAAA,IAAI,EAAE,CAAC+rL,GAFF;AAGLngM,IAAAA,KAAK,EAAExY,KAAK,CAAC3f,KAAN,EAHF;AAIL0zO,IAAAA,MAAM,EAAEj3O,KAAK,CAACi3O,MAJT;AAKLj3O,IAAAA,KAAK,EAAEA,KAAK,CAACA,KALR;AAML2B,IAAAA,IAAI,EAAE3B,KAAK,CAAC2B,IANP;;AAQLijU,IAAAA,KAAK,CAAC3mJ,KAAD,EAAQ/O,IAAR,EAAc;AACjB,YAAMr6J,GAAG,GAAG,IAAZ;AAAA,YACM6mB,KAAK,GAAG7mB,GAAG,CAACoiO,MAAJ,CAAWpiO,GAAG,CAAC6mB,KAAf,EAAsBuiJ,KAAK,CAAC/gL,KAA5B,CADd;AAAA,YAEMwiD,GAAG,GAAGu+H,KAAK,CAACj+K,KAFlB;AAAA,YAGM4wM,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CAHhB;AAAA,YAIMm1K,EAAE,GAAGn1K,KAAK,CAAC,CAAD,CAJhB;AAAA,YAKM95B,EAAE,GAAG89C,GAAG,CAAClmD,MALf;AAMA,UAAIU,CAAJ;;AAEA,WAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG02M,EAAhB,EAAoB,EAAE12M,CAAtB,EAAyBg1K,IAAI,CAACxvH,GAAG,CAACxlD,CAAD,CAAJ,CAAJ,IAAgB2hO,GAAhB;;AAEzB,WAAK3hO,CAAC,GAAG22M,EAAT,EAAa32M,CAAC,GAAG0H,EAAjB,EAAqB,EAAE1H,CAAvB,EAA0Bg1K,IAAI,CAACxvH,GAAG,CAACxlD,CAAD,CAAJ,CAAJ,IAAgB2hO,GAAhB;;AAE1B,aAAOhnN,GAAP;AACD;;AAtBI,GAAP;AAyBD;AAED;AACA;AACA;;;AAEA,SAASgwT,WAAT,GAAuB;AACrB,MAAI7kU,KAAK,GAAGskU,OAAO,CAAC,CAAD,CAAnB;AAAA,MACIpnU,KAAK,GAAG,EADZ;AAAA,MAEIyE,IAAI,GAAG,CAFX;;AAIA,WAAS44N,MAAT,CAAgBp8N,GAAhB,EAAqB+K,IAArB,EAA2Bg8B,IAA3B,EAAiC;AAC/B,QAAI,CAACh8B,IAAI,CAAC1P,MAAV,EAAkB,OAAO,EAAP;AAClB,UAAM64M,EAAE,GAAG1wM,IAAX;AAAA,UACMC,EAAE,GAAGsH,IAAI,CAAC1P,MADhB;AAAA,UAEMsrU,IAAI,GAAGR,OAAO,CAAC1iU,EAAD,CAFpB;AAGA,QAAImjU,IAAI,GAAG/qU,KAAK,CAAC4H,EAAD,CAAhB;AAAA,QACIojU,IADJ;AAAA,QAEIC,IAFJ;AAAA,QAGI/qU,CAHJ;;AAKA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG0H,EAAhB,EAAoB,EAAE1H,CAAtB,EAAyB;AACvB6qU,MAAAA,IAAI,CAAC7qU,CAAD,CAAJ,GAAUiE,GAAG,CAAC+K,IAAI,CAAChP,CAAD,CAAL,CAAb;AACA4qU,MAAAA,IAAI,CAAC5qU,CAAD,CAAJ,GAAUA,CAAV;AACD;;AAED6qU,IAAAA,IAAI,GAAG7gU,IAAI,CAAC6gU,IAAD,EAAOD,IAAP,CAAX;;AAEA,QAAIzyH,EAAJ,EAAQ;AACN2yH,MAAAA,IAAI,GAAG9nU,KAAP;AACA+nU,MAAAA,IAAI,GAAGjlU,KAAP;AACA9C,MAAAA,KAAK,GAAGlD,KAAK,CAACq4M,EAAE,GAAGzwM,EAAN,CAAb;AACA5B,MAAAA,KAAK,GAAGskU,OAAO,CAACjyH,EAAE,GAAGzwM,EAAN,CAAf;AACAsyM,MAAAA,KAAK,CAAChvK,IAAD,EAAO8/R,IAAP,EAAaC,IAAb,EAAmB5yH,EAAnB,EAAuB0yH,IAAvB,EAA6BD,IAA7B,EAAmCljU,EAAnC,EAAuC1E,KAAvC,EAA8C8C,KAA9C,CAAL;AACD,KAND,MAMO;AACL,UAAIklC,IAAI,GAAG,CAAX,EAAc,KAAKhrC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG0H,EAAhB,EAAoB,EAAE1H,CAAtB,EAAyB;AACrC4qU,QAAAA,IAAI,CAAC5qU,CAAD,CAAJ,IAAWgrC,IAAX;AACD;AACDhoC,MAAAA,KAAK,GAAG6nU,IAAR;AACA/kU,MAAAA,KAAK,GAAG8kU,IAAR;AACD;;AAEDnjU,IAAAA,IAAI,GAAG0wM,EAAE,GAAGzwM,EAAZ;AACA,WAAO;AACL5B,MAAAA,KAAK,EAAE8kU,IADF;AAEL5nU,MAAAA,KAAK,EAAE6nU;AAFF,KAAP;AAID;;AAED,WAAS13P,MAAT,CAAgBxoE,GAAhB,EAAqBlB,GAArB,EAA0B;AACxB;AACA,UAAMyE,CAAC,GAAGzG,IAAV;AACA,QAAI+9C,GAAJ,EAASxlD,CAAT,EAAYiK,CAAZ,CAHwB,CAGT;;AAEf,SAAKjK,CAAC,GAAG,CAAT,EAAY,CAACyJ,GAAG,CAAC3D,KAAK,CAAC9F,CAAD,CAAN,CAAJ,IAAkBA,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,CAAyC,CALjB,CAKmB;;;AAG3C,SAAKiK,CAAC,GAAGjK,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,UAAI,CAACyJ,GAAG,CAAC+7C,GAAG,GAAG1/C,KAAK,CAAC9F,CAAD,CAAZ,CAAR,EAA0B;AACxB8F,QAAAA,KAAK,CAACmE,CAAD,CAAL,GAAWu7C,GAAX;AACAxiD,QAAAA,KAAK,CAACiH,CAAD,CAAL,GAAWjH,KAAK,CAAChD,CAAD,CAAhB;AACA,UAAEiK,CAAF;AACD;AACF;;AAEDxC,IAAAA,IAAI,GAAGyG,CAAC,GAAGvD,GAAX;AACD;;AAED,WAAS6/T,OAAT,CAAiB/gU,GAAjB,EAAsB;AACpB,SAAK,IAAIzJ,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGzG,IAApB,EAA0BzH,CAAC,GAAGkO,CAA9B,EAAiC,EAAElO,CAAnC,EAAsC;AACpC8F,MAAAA,KAAK,CAAC9F,CAAD,CAAL,GAAWyJ,GAAG,CAAC3D,KAAK,CAAC9F,CAAD,CAAN,CAAd;AACD;AACF;;AAED,WAAS+8O,MAAT,CAAgBv7M,KAAhB,EAAuBrhC,KAAvB,EAA8B;AAC5B,QAAI+N,CAAJ;;AAEA,QAAI/N,KAAJ,EAAW;AACT+N,MAAAA,CAAC,GAAG/N,KAAK,CAACb,MAAV;AACD,KAFD,MAEO;AACLa,MAAAA,KAAK,GAAG6C,KAAR;AACAkL,MAAAA,CAAC,GAAGzG,IAAJ;AACD;;AAED,WAAO,CAAC,yBAAWtH,KAAX,EAAkBqhC,KAAK,CAAC,CAAD,CAAvB,EAA4B,CAA5B,EAA+BtzB,CAA/B,CAAD,EAAoC,0BAAY/N,KAAZ,EAAmBqhC,KAAK,CAAC,CAAD,CAAxB,EAA6B,CAA7B,EAAgCtzB,CAAhC,CAApC,CAAP;AACD;;AAED,SAAO;AACLmyN,IAAAA,MAAM,EAAEA,MADH;AAELltJ,IAAAA,MAAM,EAAEA,MAFH;AAGL4pK,IAAAA,MAAM,EAAEA,MAHH;AAILytF,IAAAA,OAAO,EAAEA,OAJJ;AAKL1kU,IAAAA,KAAK,EAAE,MAAMA,KALR;AAML2B,IAAAA,IAAI,EAAE,MAAMA;AANP,GAAP;AAQD;;AAED,SAASuC,IAAT,CAAcI,MAAd,EAAsBtE,KAAtB,EAA6B;AAC3BsE,EAAAA,MAAM,CAACJ,IAAP,CAAYlL,IAAZ,CAAiBgH,KAAjB,EAAwB,CAACoB,CAAD,EAAI6G,CAAJ,KAAU;AAChC,UAAM5H,CAAC,GAAGiE,MAAM,CAAClD,CAAD,CAAhB;AAAA,UACMwd,CAAC,GAAGta,MAAM,CAAC2D,CAAD,CADhB;AAEA,WAAO5H,CAAC,GAAGue,CAAJ,GAAQ,CAAC,CAAT,GAAave,CAAC,GAAGue,CAAJ,GAAQ,CAAR,GAAY,CAAhC;AACD,GAJD;AAKA,SAAO,sBAAQta,MAAR,EAAgBtE,KAAhB,CAAP;AACD;;AAED,SAASk0M,KAAT,CAAehvK,IAAf,EAAqBu8K,MAArB,EAA6ByjH,MAA7B,EAAqC7yH,EAArC,EAAyCqP,MAAzC,EAAiDyjH,MAAjD,EAAyDvjU,EAAzD,EAA6D1E,KAA7D,EAAoE8C,KAApE,EAA2E;AACzE,MAAI46F,EAAE,GAAG,CAAT;AAAA,MACI23G,EAAE,GAAG,CADT;AAAA,MAEIr4M,CAFJ;;AAIA,OAAKA,CAAC,GAAG,CAAT,EAAY0gG,EAAE,GAAGy3G,EAAL,IAAWE,EAAE,GAAG3wM,EAA5B,EAAgC,EAAE1H,CAAlC,EAAqC;AACnC,QAAIunN,MAAM,CAAC7mH,EAAD,CAAN,GAAa8mH,MAAM,CAACnP,EAAD,CAAvB,EAA6B;AAC3Br1M,MAAAA,KAAK,CAAChD,CAAD,CAAL,GAAWunN,MAAM,CAAC7mH,EAAD,CAAjB;AACA56F,MAAAA,KAAK,CAAC9F,CAAD,CAAL,GAAWgrU,MAAM,CAACtqO,EAAE,EAAH,CAAjB;AACD,KAHD,MAGO;AACL19F,MAAAA,KAAK,CAAChD,CAAD,CAAL,GAAWwnN,MAAM,CAACnP,EAAD,CAAjB;AACAvyM,MAAAA,KAAK,CAAC9F,CAAD,CAAL,GAAWirU,MAAM,CAAC5yH,EAAE,EAAH,CAAN,GAAertK,IAA1B;AACD;AACF;;AAED,SAAO01D,EAAE,GAAGy3G,EAAZ,EAAgB,EAAEz3G,EAAF,EAAM,EAAE1gG,CAAxB,EAA2B;AACzBgD,IAAAA,KAAK,CAAChD,CAAD,CAAL,GAAWunN,MAAM,CAAC7mH,EAAD,CAAjB;AACA56F,IAAAA,KAAK,CAAC9F,CAAD,CAAL,GAAWgrU,MAAM,CAACtqO,EAAD,CAAjB;AACD;;AAED,SAAO23G,EAAE,GAAG3wM,EAAZ,EAAgB,EAAE2wM,EAAF,EAAM,EAAEr4M,CAAxB,EAA2B;AACzBgD,IAAAA,KAAK,CAAChD,CAAD,CAAL,GAAWwnN,MAAM,CAACnP,EAAD,CAAjB;AACAvyM,IAAAA,KAAK,CAAC9F,CAAD,CAAL,GAAWirU,MAAM,CAAC5yH,EAAD,CAAN,GAAartK,IAAxB;AACD;AACF;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASkgS,WAAT,CAAqB7nU,MAArB,EAA6B;AAC3B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqBurU,OAAO,EAA5B,EAAgChnU,MAAhC;;AACA,OAAK8nU,QAAL,GAAgB,IAAhB;AACA,OAAK/4F,KAAL,GAAa,IAAb;AACD;;AACD84F,WAAW,CAAC/iG,UAAZ,GAAyB;AACvB,UAAQ,aADe;AAEvB,cAAY,EAFW;AAGvB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,OAFC;AAGT,aAAS,IAHA;AAIT,gBAAY;AAJH,GAAD,EAKP;AACD,YAAQ,OADP;AAED,YAAQ,OAFP;AAGD,aAAS,IAHR;AAID,gBAAY,IAJX;AAKD,eAAW;AACT,cAAQ,QADC;AAET,eAAS,IAFA;AAGT,gBAAU;AAHD;AALV,GALO;AAHa,CAAzB;AAoBA,wBAAS+iG,WAAT,EAAsBjjG,uBAAtB,EAAiC;AAC/Bh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,QAAI,CAAC,KAAK4R,KAAV,EAAiB;AACf,aAAO,KAAKv8J,IAAL,CAAUlvD,CAAV,EAAa65M,KAAb,CAAP;AACD,KAFD,MAEO;AACL,UAAI3qJ,IAAI,GAAGlvD,CAAC,CAACo6M,QAAF,CAAW,QAAX,KAAwBp6M,CAAC,CAACm3B,MAAF,CAAS98B,IAAT,CAAcrV,CAAC,IAAI60N,KAAK,CAACO,QAAN,CAAep1N,CAAC,CAACmyC,MAAjB,CAAnB,CAAnC;;AAEA,aAAO+3B,IAAI,GAAG,KAAKu1P,MAAL,CAAYzkT,CAAZ,EAAe65M,KAAf,CAAH,GAA2B,KAAK6qG,IAAL,CAAU1kT,CAAV,EAAa65M,KAAb,CAAtC;AACD;AACF,GAT8B;;AAW/B3qJ,EAAAA,IAAI,CAAClvD,CAAD,EAAI65M,KAAJ,EAAW;AACb,UAAM1iL,MAAM,GAAGn3B,CAAC,CAACm3B,MAAjB;AAAA,UACM90B,KAAK,GAAGrC,CAAC,CAACqC,KADhB;AAAA,UAEMnU,OAAO,GAAG,KAAKs2T,QAAL,GAAgB,EAFhC;AAAA,UAGMrkS,IAAI,GAAG,KAAKsrM,KAAL,GAAa,EAH1B;AAAA,UAIM36I,CAAC,GAAGzuE,KAAK,CAAC1pB,MAJhB;AAKA,QAAIU,CAAC,GAAG,CAAR;AAAA,QACIiE,GADJ;AAAA,QAEI6B,KAFJ,CANa,CAQF;;AAEX,WAAO9F,CAAC,GAAGy3F,CAAX,EAAc,EAAEz3F,CAAhB,EAAmB;AACjBiE,MAAAA,GAAG,GAAG65C,MAAM,CAAC99C,CAAD,CAAN,CAAU4zM,KAAhB;AACA9tM,MAAAA,KAAK,GAAG+O,OAAO,CAAC5Q,GAAD,CAAP,KAAiB4Q,OAAO,CAAC5Q,GAAD,CAAP,GAAe0mU,WAAW,EAA3C,CAAR;AACA7jS,MAAAA,IAAI,CAAC7mC,IAAL,CAAUwqU,SAAS,CAAC3kU,KAAD,EAAQ9F,CAAR,EAAWgpB,KAAK,CAAChpB,CAAD,CAAhB,CAAnB;AACD;;AAED,WAAO,KAAKqrU,IAAL,CAAU1kT,CAAV,EAAa65M,KAAb,CAAP;AACD,GA5B8B;;AA8B/B4qG,EAAAA,MAAM,CAACzkT,CAAD,EAAI65M,KAAJ,EAAW;AACf,UAAM92M,MAAM,GAAG82M,KAAK,CAACuE,WAAN,GAAoBG,IAApB,EAAf;AAAA,UACMpnL,MAAM,GAAGn3B,CAAC,CAACm3B,MADjB;AAAA,UAEM90B,KAAK,GAAGrC,CAAC,CAACqC,KAFhB;AAAA,UAGMnU,OAAO,GAAG,KAAKs2T,QAHrB;AAAA,UAIMrkS,IAAI,GAAG,KAAKsrM,KAJlB;AAAA,UAKMk5F,IAAI,GAAG,KAAKtoU,KALlB;AAAA,UAMMgyK,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EANb;AAAA,UAOM77E,IAAI,GAAGmyO,IAAI,CAACnyO,IAAL,EAPb;AAAA,UAQMpjF,GAAG,GAAGu1T,IAAI,CAACv1T,GAAL,EARZ;AAAA,UASMsQ,GAAG,GAAGqD,MAAM,CAACm4E,GAAP,GAAan4E,MAAM,CAAC/I,GAThC;AAAA,UAUMxJ,GAAG,GAAGuS,MAAM,CAACvS,GAVnB;AAAA,UAWMsgF,CAAC,GAAGzuE,KAAK,CAAC1pB,MAXhB;AAAA,UAYMi0O,IAAI,GAAG,EAZb;AAaA,QAAI5yN,GAAJ,EAAS7a,KAAT,EAAgB7B,GAAhB,EAAqBuvO,IAArB,EAA2B+3F,MAA3B,EAAmCC,MAAnC,EAA2CxrU,CAA3C,EAA8CkO,CAA9C,EAAiDvC,CAAjD,CAde,CAcqC;;AAEpDwtF,IAAAA,IAAI,CAACx2F,GAAL,CAASqyK,IAAT,EAhBe,CAgBC;;AAEhB,QAAIwrD,KAAK,CAAC3+H,GAAN,CAAUviG,MAAd,EAAsB;AACpBisU,MAAAA,MAAM,GAAG,KAAKp4P,MAAL,CAAYxsD,CAAZ,EAAe65M,KAAf,EAAsB92M,MAAtB,CAAT;AACD,KApBc,CAoBb;;;AAGF,QAAI82M,KAAK,CAAC7/M,GAAN,CAAUrhB,MAAd,EAAsB;AACpBgsU,MAAAA,IAAI,CAAC3qT,GAAL,CAAS6/M,KAAK,CAAC7/M,GAAf;AACD,KAzBc,CAyBb;;;AAGF,QAAI6/M,KAAK,CAACrpN,GAAN,CAAU7X,MAAd,EAAsB;AACpBksU,MAAAA,MAAM,GAAG,EAAT;;AAEA,WAAKh4F,IAAI,GAAGhT,KAAK,CAACrpN,GAAb,EAAkBnX,CAAC,GAAG,CAAtB,EAAyBkO,CAAC,GAAGslO,IAAI,CAACl0O,MAAvC,EAA+CU,CAAC,GAAGkO,CAAnD,EAAsD,EAAElO,CAAxD,EAA2D;AACzDwrU,QAAAA,MAAM,CAACh4F,IAAI,CAACxzO,CAAD,CAAJ,CAAQuqU,MAAT,CAAN,GAAyB,CAAzB;AACD;AACF,KAlCc,CAkCb;;;AAGF,SAAKvqU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGy3F,CAAhB,EAAmB,EAAEz3F,CAArB,EAAwB;AACtB2L,MAAAA,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAV;;AAEA,UAAI,CAAC8mC,IAAI,CAAC9mC,CAAD,CAAL,IAAY2mB,CAAC,CAACo6M,QAAF,CAAW,QAAX,EAAqB/gO,CAArB,CAAZ,IAAuCwgO,KAAK,CAACO,QAAN,CAAep1N,CAAC,CAACmyC,MAAjB,CAA3C,EAAqE;AACnE75C,QAAAA,GAAG,GAAG0H,CAAC,CAACioM,KAAR;;AAEA,YAAI,EAAEjzL,GAAG,GAAG4yN,IAAI,CAACtvO,GAAD,CAAZ,CAAJ,EAAwB;AACtB4Q,UAAAA,OAAO,CAAC5Q,GAAD,CAAP,GAAe6B,KAAK,GAAG6kU,WAAW,EAAlC;AACAp3F,UAAAA,IAAI,CAACtvO,GAAD,CAAJ,GAAY0c,GAAG,GAAG7a,KAAK,CAACu6N,MAAN,CAAa10N,CAAb,EAAgB60N,KAAK,CAAC1qK,MAAtB,EAA8B,CAA9B,CAAlB;AACD;;AAEDhvB,QAAAA,IAAI,CAAC9mC,CAAD,CAAJ,GAAUyqU,SAAS,CAAC3kU,KAAD,EAAQ9F,CAAR,EAAWgpB,KAAK,CAAChpB,CAAD,CAAhB,CAAT,CAA8B0qU,KAA9B,CAAoC/pT,GAApC,EAAyCq0J,IAAzC,CAAV;AACD;AACF,KAlDc,CAkDb;AACF;AACA;;;AAGA,SAAKh1K,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGo9T,IAAI,CAACt8T,IAAL,GAAY1P,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C,UAAIurU,MAAM,CAACvrU,CAAD,CAAV,EAAe;AACb;AACA;AACD,OAHD,MAGO,IAAIm5F,IAAI,CAACn5F,CAAD,CAAJ,KAAYg1K,IAAI,CAACh1K,CAAD,CAApB,EAAyB;AAC9B;AACAqmB,QAAAA,GAAG,CAACpmB,IAAJ,CAASD,CAAT;AACD,OAHM,MAGA,IAAIwrU,MAAM,CAACxrU,CAAD,CAAN,IAAag1K,IAAI,CAACh1K,CAAD,CAAJ,KAAY+V,GAA7B,EAAkC;AACvC;AACAoB,QAAAA,GAAG,CAAClX,IAAJ,CAASD,CAAT;AACD;AACF;;AAEDsrU,IAAAA,IAAI,CAACr+R,IAAL,GAAY,CAAC,KAAKwqD,CAAN,IAAW,CAAvB;AACA,WAAO/tE,MAAP;AACD,GApG8B;;AAsG/B2hT,EAAAA,IAAI,CAAC1kT,CAAD,EAAI65M,KAAJ,EAAW;AACb,UAAM92M,MAAM,GAAG82M,KAAK,CAACuE,WAAN,GAAoBG,IAApB,EAAf;AAAA,UACMztI,CAAC,GAAG,KAAK26I,KAAL,CAAW9yO,MADrB;AAEA,QAAI2tC,IAAI,GAAG,CAAX;;AAEA,QAAIuzL,KAAK,CAAC3+H,GAAN,CAAUviG,MAAd,EAAsB;AACpB,WAAK6zE,MAAL,CAAYxsD,CAAZ,EAAe65M,KAAf,EAAsB92M,MAAtB;AACAujB,MAAAA,IAAI,IAAI,CAAC,KAAKwqD,CAAN,IAAW,CAAnB;AACD;;AAED,QAAI9wE,CAAC,CAACo6M,QAAF,CAAW,OAAX,KAAuB,CAACp6M,CAAC,CAACo6M,QAAF,CAAW,QAAX,CAA5B,EAAkD;AAChD9zL,MAAAA,IAAI,IAAI,KAAKiiD,MAAL,CAAYvoE,CAAZ,EAAe65M,KAAf,EAAsB92M,MAAtB,CAAR;AACD;;AAED,QAAI82M,KAAK,CAAC7/M,GAAN,CAAUrhB,MAAd,EAAsB;AACpB,WAAK+gO,MAAL,CAAY15M,CAAZ,EAAe65M,KAAf,EAAsB92M,MAAtB;AACAujB,MAAAA,IAAI,IAAI,CAAC,KAAKwqD,CAAN,IAAW,CAAnB;AACD;;AAED,QAAI+oI,KAAK,CAACrpN,GAAN,CAAU7X,MAAd,EAAsB;AACpB,WAAKghO,MAAL,CAAYE,KAAZ,EAAmB92M,MAAnB;AACAujB,MAAAA,IAAI,IAAI,CAAC,KAAKwqD,CAAN,IAAW,CAAnB;AACD;;AAED,SAAKz0F,KAAL,CAAWiqC,IAAX,GAAkBA,IAAlB;AACA,WAAOvjB,MAAP;AACD,GAhI8B;;AAkI/B22M,EAAAA,MAAM,CAAC15M,CAAD,EAAI65M,KAAJ,EAAW92M,MAAX,EAAmB;AACvB,UAAM+gJ,MAAM,GAAG+1D,KAAK,CAAC7/M,GAArB;AAAA,UACM2qT,IAAI,GAAG,KAAKtoU,KADlB;AAAA,UAEM8jC,IAAI,GAAG,KAAKsrM,KAFlB;AAAA,UAGMv9N,OAAO,GAAG,KAAKs2T,QAHrB;AAAA,UAIMrtR,MAAM,GAAGn3B,CAAC,CAACm3B,MAJjB;AAAA,UAKMy1L,IAAI,GAAG,EALb;AAAA,UAMMltN,GAAG,GAAGqD,MAAM,CAAC/I,GANnB;AAAA,UAOMzS,CAAC,GAAGo9T,IAAI,CAAC7jU,IAAL,KAAcgjK,MAAM,CAACnrK,MAP/B;AAAA,UAQMm4F,CAAC,GAAG3wD,IAAI,CAACxnC,MARf;AASA,QAAIge,CAAC,GAAGguT,IAAI,CAAC7jU,IAAL,EAAR;AAAA,QACIwC,CADJ;AAAA,QAEIhG,GAFJ;AAAA,QAGI0c,GAHJ,CAVuB,CAad;;AAET2qT,IAAAA,IAAI,CAAC13I,MAAL,CAAY1lL,CAAZ,EAAeupF,CAAf;AACA6zO,IAAAA,IAAI,CAAC3qT,GAAL,CAAS8pJ,MAAT;AACA,UAAMuK,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EAAb;AAAA,UACM77E,IAAI,GAAGmyO,IAAI,CAACnyO,IAAL,EADb;AAAA,UAEMpjF,GAAG,GAAGu1T,IAAI,CAACv1T,GAAL,EAFZ,CAjBuB,CAmBC;;AAExB,SAAK9L,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtBhG,MAAAA,GAAG,GAAG65C,MAAM,CAAC7zC,CAAD,CAAN,CAAU2pM,KAAhB;AACAjzL,MAAAA,GAAG,GAAG4yN,IAAI,CAACtvO,GAAD,CAAJ,KAAcsvO,IAAI,CAACtvO,GAAD,CAAJ,GAAY4Q,OAAO,CAAC5Q,GAAD,CAAP,CAAao8N,MAAb,CAAoBviL,MAAM,CAAC7zC,CAAD,CAA1B,EAA+BwgK,MAA/B,EAAuCntJ,CAAvC,CAA1B,CAAN;AACAwpB,MAAAA,IAAI,CAAC78B,CAAD,CAAJ,CAAQygU,KAAR,CAAc/pT,GAAd,EAAmBq0J,IAAnB;AACD,KAzBsB,CAyBrB;;;AAGF,WAAO13J,CAAC,GAAGpP,CAAX,EAAc,EAAEoP,CAAhB,EAAmB;AACjB67E,MAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAUvH,GAAV;AACA,UAAIi/J,IAAI,CAAC13J,CAAD,CAAJ,KAAYvH,GAAhB,EAAqBsQ,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACtB;AACF,GAlK8B;;AAoK/BgjN,EAAAA,MAAM,CAACE,KAAD,EAAQ92M,MAAR,EAAgB;AACpB,UAAMrD,GAAG,GAAGqD,MAAM,CAACvS,GAAnB;AAAA,UACMm0T,IAAI,GAAG,KAAKtoU,KADlB;AAAA,UAEMgyK,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EAFb;AAAA,UAGMj/J,GAAG,GAAGu1T,IAAI,CAACv1T,GAAL,EAHZ;AAAA,UAIM00J,MAAM,GAAG+1D,KAAK,CAACrpN,GAJrB;AAKA,QAAInX,CAAJ,EAAOkO,CAAP,EAAUoP,CAAV;;AAEA,SAAKtd,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGu8J,MAAM,CAACnrK,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C;AACzCsd,MAAAA,CAAC,GAAGmtJ,MAAM,CAACzqK,CAAD,CAAN,CAAUuqU,MAAd;AACA,UAAIv1J,IAAI,CAAC13J,CAAD,CAAJ,KAAYvH,GAAhB,EAAqBsQ,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACtB;AACF,GAhL8B;;AAkL/B61D,EAAAA,MAAM,CAACxsD,CAAD,EAAI65M,KAAJ,EAAW92M,MAAX,EAAmB;AACvB,UAAM7U,OAAO,GAAG,KAAKs2T,QAArB;AAAA,UACMG,IAAI,GAAG,KAAKtoU,KADlB;AAAA,UAEMgyK,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EAFb;AAAA,UAGM77E,IAAI,GAAGmyO,IAAI,CAACnyO,IAAL,EAHb;AAAA,UAIMpjF,GAAG,GAAGu1T,IAAI,CAACv1T,GAAL,EAJZ;AAAA,UAKMtM,GAAG,GAAG,EALZ;AAAA,UAMM4c,GAAG,GAAGqD,MAAM,CAACm4E,GANnB;AAAA,UAOM4oE,MAAM,GAAG+1D,KAAK,CAAC3+H,GAPrB;AAQA,QAAI7hG,CAAJ,EAAOkO,CAAP,EAAUoP,CAAV,EAAa3R,CAAb,CATuB,CASP;;AAEhB,SAAK3L,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGu8J,MAAM,CAACnrK,MAAvB,EAA+BU,CAAC,GAAGkO,CAAnC,EAAsC,EAAElO,CAAxC,EAA2C;AACzCsd,MAAAA,CAAC,GAAGmtJ,MAAM,CAACzqK,CAAD,CAAN,CAAUuqU,MAAd;AACA9gU,MAAAA,GAAG,CAAC6T,CAAD,CAAH,GAAS,CAAT,CAFyC,CAE7B;;AAEZ67E,MAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAU3R,CAAC,GAAGqpK,IAAI,CAAC13J,CAAD,CAAlB;AACA03J,MAAAA,IAAI,CAAC13J,CAAD,CAAJ,GAAUvH,GAAV;AACA,UAAIpK,CAAC,KAAKoK,GAAV,EAAesQ,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AAChB,KAlBsB,CAkBrB;;;AAGF,SAAKA,CAAL,IAAUzI,OAAV,EAAmB;AACjBA,MAAAA,OAAO,CAACyI,CAAD,CAAP,CAAW61D,MAAX,CAAkBjlE,CAAlB,EAAqBzE,GAArB;AACD;;AAED,SAAK+gU,OAAL,CAAahqG,KAAb,EAAoBtyN,CAApB,EAAuBzE,GAAvB;AACA,WAAOA,GAAP;AACD,GA7M8B;;AA+M/B;AACA+gU,EAAAA,OAAO,CAAChqG,KAAD,EAAQ71N,GAAR,EAAalB,GAAb,EAAkB;AACvB,UAAMoL,OAAO,GAAG,KAAKs2T,QAArB;AAAA,UACMG,IAAI,GAAG,KAAKtoU,KADlB;AAEAw9N,IAAAA,KAAK,CAACkF,QAAN,CAAe,MAAM;AACnB,YAAM+lG,QAAQ,GAAGH,IAAI,CAACn4P,MAAL,CAAYxoE,GAAZ,EAAiBlB,GAAjB,CAAjB;;AAEA,WAAK,MAAMxF,GAAX,IAAkB4Q,OAAlB,EAA2BA,OAAO,CAAC5Q,GAAD,CAAP,CAAaumU,OAAb,CAAqBiB,QAArB;AAC5B,KAJD;AAKD,GAxN8B;;AA0N/Bv8O,EAAAA,MAAM,CAACvoE,CAAD,EAAI65M,KAAJ,EAAW92M,MAAX,EAAmB;AACvB,UAAMod,IAAI,GAAG,KAAKsrM,KAAlB;AAAA,UACMppN,KAAK,GAAGrC,CAAC,CAACqC,KADhB;AAAA,UAEMu4M,KAAK,GAAGf,KAAK,CAACe,KAFpB;AAAA,UAGM9pI,CAAC,GAAG3wD,IAAI,CAACxnC,MAHf;AAIA,QAAI2tC,IAAI,GAAG,CAAX;AAAA,QACIjtC,CADJ;AAAA,QAEI03F,CAFJ,CALuB,CAOhB;;AAEPhuE,IAAAA,MAAM,CAAC2sI,OAAP,GAAiB,CAAjB;;AAEA,SAAK3+D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,CAAhB,EAAmB,EAAEC,CAArB,EAAwB;AACtB,UAAI/wE,CAAC,CAACo6M,QAAF,CAAW,OAAX,EAAoBrpI,CAApB,CAAJ,EAA4B;AAC1B13F,QAAAA,CAAC,GAAG03F,CAAJ;AACA,UAAEzqD,IAAF;AACD;AACF;;AAED,QAAIA,IAAI,KAAK,CAAb,EAAgB;AACd;AACAA,MAAAA,IAAI,GAAGnG,IAAI,CAAC9mC,CAAD,CAAJ,CAAQgvF,GAAf;AACA,WAAK08O,YAAL,CAAkB5kS,IAAI,CAAC9mC,CAAD,CAAtB,EAA2BgpB,KAAK,CAAChpB,CAAD,CAAhC,EAAqC0pB,MAAM,CAAC/I,GAA5C,EAAiD+I,MAAM,CAACm4E,GAAxD;AACD,KAJD,MAIO;AACL;AACA,WAAKnK,CAAC,GAAG,CAAJ,EAAOzqD,IAAI,GAAG,CAAnB,EAAsByqD,CAAC,GAAGD,CAA1B,EAA6B,EAAEC,CAA/B,EAAkC;AAChC,YAAI,CAAC/wE,CAAC,CAACo6M,QAAF,CAAW,OAAX,EAAoBrpI,CAApB,CAAL,EAA6B;AAC7BzqD,QAAAA,IAAI,IAAInG,IAAI,CAAC4wD,CAAD,CAAJ,CAAQ1I,GAAhB;AACA,aAAK28O,YAAL,CAAkB7kS,IAAI,CAAC4wD,CAAD,CAAtB,EAA2B1uE,KAAK,CAAC0uE,CAAD,CAAhC,EAAqC6pI,KAArC,EAA4C73M,MAAM,CAAC/I,GAAnD;AACA+I,QAAAA,MAAM,CAACm4E,GAAP,GAAan4E,MAAM,CAAC/I,GAApB,CAJgC,CAIP;AAC1B;AACF;;AAED,WAAOssB,IAAP;AACD,GA3P8B;;AA6P/B0+R,EAAAA,YAAY,CAAChxT,GAAD,EAAMqO,KAAN,EAAau4M,KAAb,EAAoBl7M,GAApB,EAAyB;AACnC,UAAMilT,IAAI,GAAG,KAAKtoU,KAAlB;AAAA,UACMwd,IAAI,GAAG8qT,IAAI,CAAC9qT,IAAL,EADb;AAAA,UAEMw0J,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EAFb;AAAA,UAGM77E,IAAI,GAAGmyO,IAAI,CAACnyO,IAAL,EAHb;AAAA,UAIMrzF,KAAK,GAAG6U,GAAG,CAAC7U,KAAJ,EAJd;AAAA,UAKM8lU,GAAG,GAAGjxT,GAAG,CAACoiO,MAAJ,CAAWpiO,GAAG,CAAC6mB,KAAf,CALZ;AAAA,UAMMA,KAAK,GAAG7mB,GAAG,CAACoiO,MAAJ,CAAW/zN,KAAX,CANd;AAAA,UAOM6iT,GAAG,GAAGrqS,KAAK,CAAC,CAAD,CAPjB;AAAA,UAQMsqS,GAAG,GAAGtqS,KAAK,CAAC,CAAD,CARjB;AAAA,UASMuqS,GAAG,GAAGH,GAAG,CAAC,CAAD,CATf;AAAA,UAUMI,GAAG,GAAGJ,GAAG,CAAC,CAAD,CAVf;AAAA,UAWM58O,GAAG,GAAGr0E,GAAG,CAACq0E,GAXhB;AAYA,QAAIhvF,CAAJ,EAAOiK,CAAP,EAAUqT,CAAV,CAbmC,CAatB;;AAEb,QAAIuuT,GAAG,GAAGE,GAAV,EAAe;AACb,WAAK/rU,CAAC,GAAG6rU,GAAJ,EAAS5hU,CAAC,GAAGlE,IAAI,CAACG,GAAL,CAAS6lU,GAAT,EAAcD,GAAd,CAAlB,EAAsC9rU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;;AAEA,YAAIwgB,IAAI,CAAClD,CAAD,CAAJ,KAAYikN,KAAhB,EAAuB;AACrBpoI,UAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAU03J,IAAI,CAAC13J,CAAD,CAAd;AACAkD,UAAAA,IAAI,CAAClD,CAAD,CAAJ,GAAUikN,KAAV;AACAl7M,UAAAA,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACD;;AAED03J,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACD;AACF,KAZD,MAYO,IAAI68O,GAAG,GAAGE,GAAV,EAAe;AACpB,WAAK/rU,CAAC,GAAG+rU,GAAJ,EAAS9hU,CAAC,GAAGlE,IAAI,CAACG,GAAL,CAAS2lU,GAAT,EAAcG,GAAd,CAAlB,EAAsChsU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;;AAEA,YAAIwgB,IAAI,CAAClD,CAAD,CAAJ,KAAYikN,KAAhB,EAAuB;AACrBpoI,UAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAU03J,IAAI,CAAC13J,CAAD,CAAd;AACAkD,UAAAA,IAAI,CAAClD,CAAD,CAAJ,GAAUikN,KAAV;AACAl7M,UAAAA,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACD;;AAED03J,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACD;AACF,KAvCkC,CAuCjC;;;AAGF,QAAI88O,GAAG,GAAGE,GAAV,EAAe;AACb,WAAKhsU,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAASylU,GAAT,EAAcG,GAAd,CAAJ,EAAwB/hU,CAAC,GAAG6hU,GAAjC,EAAsC9rU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;;AAEA,YAAIwgB,IAAI,CAAClD,CAAD,CAAJ,KAAYikN,KAAhB,EAAuB;AACrBpoI,UAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAU03J,IAAI,CAAC13J,CAAD,CAAd;AACAkD,UAAAA,IAAI,CAAClD,CAAD,CAAJ,GAAUikN,KAAV;AACAl7M,UAAAA,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACD;;AAED03J,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACD;AACF,KAZD,MAYO,IAAI88O,GAAG,GAAGE,GAAV,EAAe;AACpB,WAAKhsU,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS2lU,GAAT,EAAcD,GAAd,CAAJ,EAAwB7hU,CAAC,GAAG+hU,GAAjC,EAAsChsU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;;AAEA,YAAIwgB,IAAI,CAAClD,CAAD,CAAJ,KAAYikN,KAAhB,EAAuB;AACrBpoI,UAAAA,IAAI,CAAC77E,CAAD,CAAJ,GAAU03J,IAAI,CAAC13J,CAAD,CAAd;AACAkD,UAAAA,IAAI,CAAClD,CAAD,CAAJ,GAAUikN,KAAV;AACAl7M,UAAAA,GAAG,CAACpmB,IAAJ,CAASqd,CAAT;AACD;;AAED03J,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACD;AACF;;AAEDr0E,IAAAA,GAAG,CAAC6mB,KAAJ,GAAYxY,KAAK,CAAC3f,KAAN,EAAZ;AACD,GAlU8B;;AAoU/BqiU,EAAAA,YAAY,CAAC/wT,GAAD,EAAMqO,KAAN,EAAarI,GAAb,EAAkBkhF,GAAlB,EAAuB;AACjC,UAAMypO,IAAI,GAAG,KAAKtoU,KAAlB;AAAA,UACMgyK,IAAI,GAAGs2J,IAAI,CAACt2J,IAAL,EADb;AAAA,UAEMlvK,KAAK,GAAG6U,GAAG,CAAC7U,KAAJ,EAFd;AAAA,UAGM8lU,GAAG,GAAGjxT,GAAG,CAACoiO,MAAJ,CAAWpiO,GAAG,CAAC6mB,KAAf,CAHZ;AAAA,UAIMA,KAAK,GAAG7mB,GAAG,CAACoiO,MAAJ,CAAW/zN,KAAX,CAJd;AAAA,UAKM6iT,GAAG,GAAGrqS,KAAK,CAAC,CAAD,CALjB;AAAA,UAMMsqS,GAAG,GAAGtqS,KAAK,CAAC,CAAD,CANjB;AAAA,UAOMuqS,GAAG,GAAGH,GAAG,CAAC,CAAD,CAPf;AAAA,UAQMI,GAAG,GAAGJ,GAAG,CAAC,CAAD,CARf;AAAA,UASM58O,GAAG,GAAGr0E,GAAG,CAACq0E,GAThB;AAUA,QAAIhvF,CAAJ,EAAOiK,CAAP,EAAUqT,CAAV,CAXiC,CAWpB;;AAEb,QAAIuuT,GAAG,GAAGE,GAAV,EAAe;AACb,WAAK/rU,CAAC,GAAG6rU,GAAJ,EAAS5hU,CAAC,GAAGlE,IAAI,CAACG,GAAL,CAAS6lU,GAAT,EAAcD,GAAd,CAAlB,EAAsC9rU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;AACAg1K,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACAruE,QAAAA,GAAG,CAAC1gB,IAAJ,CAASqd,CAAT;AACD;AACF,KAND,MAMO,IAAIuuT,GAAG,GAAGE,GAAV,EAAe;AACpB,WAAK/rU,CAAC,GAAG+rU,GAAJ,EAAS9hU,CAAC,GAAGlE,IAAI,CAACG,GAAL,CAAS2lU,GAAT,EAAcG,GAAd,CAAlB,EAAsChsU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;AACAg1K,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACA6S,QAAAA,GAAG,CAAC5hG,IAAJ,CAASqd,CAAT;AACD;AACF,KAzBgC,CAyB/B;;;AAGF,QAAIwuT,GAAG,GAAGE,GAAV,EAAe;AACb,WAAKhsU,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAASylU,GAAT,EAAcG,GAAd,CAAJ,EAAwB/hU,CAAC,GAAG6hU,GAAjC,EAAsC9rU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;AACAg1K,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACAruE,QAAAA,GAAG,CAAC1gB,IAAJ,CAASqd,CAAT;AACD;AACF,KAND,MAMO,IAAIwuT,GAAG,GAAGE,GAAV,EAAe;AACpB,WAAKhsU,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS2lU,GAAT,EAAcD,GAAd,CAAJ,EAAwB7hU,CAAC,GAAG+hU,GAAjC,EAAsChsU,CAAC,GAAGiK,CAA1C,EAA6C,EAAEjK,CAA/C,EAAkD;AAChDsd,QAAAA,CAAC,GAAGxX,KAAK,CAAC9F,CAAD,CAAT;AACAg1K,QAAAA,IAAI,CAAC13J,CAAD,CAAJ,IAAW0xE,GAAX;AACA6S,QAAAA,GAAG,CAAC5hG,IAAJ,CAASqd,CAAT;AACD;AACF;;AAED3C,IAAAA,GAAG,CAAC6mB,KAAJ,GAAYxY,KAAK,CAAC3f,KAAN,EAAZ;AACD;;AA/W8B,CAAjC;AAmXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS4iU,aAAT,CAAuB5oU,MAAvB,EAA+B;AAC7B4kO,0BAAUnpO,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2BuE,MAA3B;AACD;;AACD4oU,aAAa,CAAC9jG,UAAd,GAA2B;AACzB,UAAQ,eADiB;AAEzB,cAAY,EAFa;AAGzB,YAAU,CAAC;AACT,YAAQ,QADC;AAET,YAAQ,QAFC;AAGT,gBAAY,IAHH;AAIT,mBAAe;AAJN,GAAD,EAKP;AACD,YAAQ,QADP;AAED,YAAQ,QAFP;AAGD,gBAAY,IAHX;AAID,mBAAe;AAJd,GALO;AAHe,CAA3B;AAeA,wBAAS8jG,aAAT,EAAwBhkG,uBAAxB,EAAmC;AACjCh/C,EAAAA,SAAS,CAACtiK,CAAD,EAAI65M,KAAJ,EAAW;AAClB,UAAM0rG,MAAM,GAAG,EAAEvlT,CAAC,CAACulT,MAAF,IAAY,CAAd,CAAf;AAAA,UACM;AACNC,IAAAA,MAAM,GAAGxlT,CAAC,CAACxL,MAFX;AAAA,UAGM8xB,IAAI,GAAGk/R,MAAM,CAACl/R,IAHpB,CADkB,CAIQ;;AAE1B,QAAI,CAACA,IAAI,GAAGi/R,MAAR,MAAoB,CAAxB,EAA2B,OAAO1rG,KAAK,CAAC6B,eAAb;;AAE3B,UAAM34M,MAAM,GAAG82M,KAAK,CAAC0E,IAAN,CAAW1E,KAAK,CAACiE,GAAjB,CAAf;AAAA,UACMz1N,IAAI,GAAGm9T,MAAM,CAACn9T,IAAP,EADb;AAAA,UAEMgmK,IAAI,GAAGm3J,MAAM,CAACn3J,IAAP,EAFb;AAAA,UAGM77E,IAAI,GAAGgzO,MAAM,CAAChzO,IAAP,EAHb;AAAA,UAIMvhB,IAAI,GAAGt6D,CAAC,IAAI,EAAE03J,IAAI,CAAC13J,CAAD,CAAJ,GAAU4uT,MAAZ,IAAsBl9T,IAAI,CAACsO,CAAD,CAA1B,GAAgC,IAJlD,CARkB,CAYsC;;;AAGxDoM,IAAAA,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAAC46M,GAArB,EAA0B1sJ,IAA1B,EAfkB,CAee;AACjC;AACA;;AAEA,QAAI,EAAE3qC,IAAI,GAAGA,IAAI,GAAG,CAAhB,CAAJ,EAAwB;AACtB;AACAvjB,MAAAA,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAACm6B,GAArB,EAA0B+zB,IAA1B;AACAluD,MAAAA,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAAC26M,GAArB,EAA0B/mN,CAAC,IAAI,CAAC03J,IAAI,CAAC13J,CAAD,CAAJ,GAAU4uT,MAAX,MAAuBj/R,IAAvB,GAA8Bj+B,IAAI,CAACsO,CAAD,CAAlC,GAAwC,IAAvE;AACD,KAJD,MAIO;AACL;AACAoM,MAAAA,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAACm6B,GAArB,EAA0BvmC,CAAC,IAAI;AAC7B,cAAM7Q,CAAC,GAAGuoK,IAAI,CAAC13J,CAAD,CAAJ,GAAU4uT,MAApB;AAAA,cACMvgU,CAAC,GAAG,CAACc,CAAD,IAAMA,CAAC,GAAG0sF,IAAI,CAAC77E,CAAD,CAAJ,GAAU4uT,MAD9B;AAEA,eAAOvgU,CAAC,GAAGqD,IAAI,CAACsO,CAAD,CAAP,GAAa,IAArB;AACD,OAJD;AAKAoM,MAAAA,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAAC26M,GAArB,EAA0B/mN,CAAC,IAAI;AAC7B,cAAM7Q,CAAC,GAAGuoK,IAAI,CAAC13J,CAAD,CAAJ,GAAU4uT,MAApB;AAAA,cACMvgU,CAAC,GAAGc,CAAC,IAAI,EAAEA,CAAC,IAAIA,CAAC,GAAG0sF,IAAI,CAAC77E,CAAD,CAAJ,GAAU4uT,MAAlB,CAAH,CADf;AAEA,eAAOvgU,CAAC,GAAGqD,IAAI,CAACsO,CAAD,CAAP,GAAa,IAArB;AACD,OAJD;AAKD,KAnCiB,CAmChB;;;AAGF,WAAOoM,MAAM,CAACvO,MAAP,CAAcuO,MAAM,CAACi7M,MAArB,EAA6BjhO,CAAC,IAAIk0E,IAAI,CAACl0E,CAAC,CAAC6mU,MAAH,CAAtC,CAAP;AACD;;AAxCgC,CAAnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEvrBA;;AACA;;AACA;;AACA;;AAEA;AAEA,MAAMjwH,WAAW,GAAG,oBAApB,EAA0C;;AAE1C,MAAMC,UAAU,GAAG,iGAAnB,EAAsH;;AAEtH,MAAMC,aAAa,GAAG,6DAAtB,EAAqF;AACrF;;AAEA,MAAMC,YAAY,GAAG,SAArB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS2xH,aAAT,CAAwB79T,KAAxB,EAA+B2oL,EAA/B,EAAmC;AACjC,SAAOvgH,OAAO,KAAK;AACjBA,IAAAA,OAAO,EAAEA,OAAO,IAAI,EADH;AAEjB+jI,IAAAA,QAAQ,EAAEA,QAFO;AAGjB38F,IAAAA,IAAI,EAAEA,IAHW;AAIjB48F,IAAAA,UAAU,EAAE,CAAC,CAACzjB,EAJG;AAKjBlxE,IAAAA,IAAI,EAAE40F,UAAU,CAAC1jB,EAAD,CALC;AAMjB1rE,IAAAA,IAAI,EAAEqvF,UAAU,CAACtsM,KAAD;AANC,GAAL,CAAd;AAQD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,eAAewvG,IAAf,CAAoB+8F,GAApB,EAAyBnkI,OAAzB,EAAkC;AAChC,QAAMs9H,GAAG,GAAG,MAAM,KAAKyG,QAAL,CAAcI,GAAd,EAAmBnkI,OAAnB,CAAlB;AAAA,QACMylC,GAAG,GAAG63F,GAAG,CAACzvF,IADhB;AAEA,SAAOyvF,GAAG,CAAC8G,SAAJ,GAAgB,KAAK/0F,IAAL,CAAU5J,GAAV,CAAhB,GAAiC,KAAKoP,IAAL,CAAUpP,GAAV,EAAezlC,OAAf,CAAxC;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,eAAe+jI,QAAf,CAAwBI,GAAxB,EAA6BnkI,OAA7B,EAAsC;AACpCA,EAAAA,OAAO,GAAG,sBAAO,EAAP,EAAW,KAAKA,OAAhB,EAAyBA,OAAzB,CAAV;AACA,QAAMgkI,UAAU,GAAG,KAAKA,UAAxB;AAAA,QACMz1M,MAAM,GAAG;AACbs/G,IAAAA,IAAI,EAAE;AADO,GADf;AAIA,MAAIw2F,MAAJ,EAAYC,QAAZ,EAAsBjwK,IAAtB;AACA,QAAMkwK,SAAS,GAAGX,UAAU,CAAC5sL,IAAX,CAAgBmtL,GAAG,CAACv3M,OAAJ,CAAYi3M,aAAZ,EAA2B,EAA3B,CAAhB,CAAlB;;AAEA,MAAIM,GAAG,IAAI,IAAP,IAAe,OAAOA,GAAP,KAAe,QAA9B,IAA0C,CAACI,SAA/C,EAA0D;AACxD,yBAAM,oCAAoC,2BAAYJ,GAAZ,CAA1C;AACD;;AAED,QAAMK,WAAW,GAAGb,WAAW,CAAC3sL,IAAZ,CAAiBmtL,GAAjB,CAApB,CAboC,CAaO;;AAE3C,MAAI,CAAC9vK,IAAI,GAAG2rC,OAAO,CAACykI,OAAhB,KAA4B,CAACD,WAAjC,EAA8C;AAC5C;AACA,QAAI,CAACL,GAAG,CAACt6F,UAAJ,CAAe,GAAf,CAAD,IAAwBx1E,IAAI,CAACA,IAAI,CAAC1rC,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAAtD,EAA2D;AACzDw7M,MAAAA,GAAG,GAAG,MAAMA,GAAZ;AACD;;AAEDA,IAAAA,GAAG,GAAG9vK,IAAI,GAAG8vK,GAAb;AACD,GAtBmC,CAsBlC;;;AAGFG,EAAAA,QAAQ,GAAG,CAACD,MAAM,GAAGF,GAAG,CAACt6F,UAAJ,CAAei6F,YAAf,CAAV,KAA2C9jI,OAAO,CAACmoD,IAAR,KAAiB,MAA5D,IAAsEnoD,OAAO,CAACmoD,IAAR,KAAiB,MAAjB,IAA2B,CAACq8E,WAA5B,IAA2CR,UAA5H;;AAEA,MAAIK,MAAJ,EAAY;AACV;AACAF,IAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAUoxM,YAAY,CAACn7M,MAAvB,CAAN;AACD,GAHD,MAGO,IAAIw7M,GAAG,CAACt6F,UAAJ,CAAe,IAAf,CAAJ,EAA0B;AAC/B,QAAI7pC,OAAO,CAAC0kI,eAAR,KAA4B,MAAhC,EAAwC;AACtC;AACAP,MAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAU,CAAV,CAAN;AACA4xM,MAAAA,QAAQ,GAAG,IAAX;AACD,KAJD,MAIO;AACL;AACAH,MAAAA,GAAG,GAAG,CAACnkI,OAAO,CAAC0kI,eAAR,IAA2B,MAA5B,IAAsC,GAAtC,GAA4CP,GAAlD;AACD;AACF,GAvCmC,CAuClC;;;AAGF/3M,EAAAA,MAAM,CAACub,cAAP,CAAsBpZ,MAAtB,EAA8B,WAA9B,EAA2C;AACzClC,IAAAA,KAAK,EAAE,CAAC,CAACi4M;AADgC,GAA3C,EA1CoC,CA4ChC;;AAEJ/1M,EAAAA,MAAM,CAACs/G,IAAP,GAAcs2F,GAAd,CA9CoC,CA8CjB;;AAEnB,MAAInkI,OAAO,CAACpgC,MAAZ,EAAoB;AAClBrxC,IAAAA,MAAM,CAACqxC,MAAP,GAAgBogC,OAAO,CAACpgC,MAAR,GAAiB,EAAjC;AACD,GAlDmC,CAkDlC;;;AAGF,MAAIogC,OAAO,CAAC2kI,GAAZ,EAAiB;AACfp2M,IAAAA,MAAM,CAACo2M,GAAP,GAAa3kI,OAAO,CAAC2kI,GAAR,GAAc,EAA3B;AACD,GAvDmC,CAuDlC;AACF;;;AAGA,MAAI3kI,OAAO,CAACq7F,OAAR,KAAoB,OAApB,IAA+Br7F,OAAO,CAAC4kI,WAA3C,EAAwD;AACtDr2M,IAAAA,MAAM,CAACq2M,WAAP,GAAqB5kI,OAAO,CAAC4kI,WAAR,GAAsB,EAA3C;AACD,GA7DmC,CA6DlC;;;AAGF,SAAOr2M,MAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAAS01M,UAAT,CAAoB1jB,EAApB,EAAwB;AACtB,SAAOA,EAAE,GAAGskB,QAAQ,IAAI,IAAI7yM,OAAJ,CAAY,CAAC8yM,MAAD,EAAS5yM,MAAT,KAAoB;AACtDquL,IAAAA,EAAE,CAACwkB,QAAH,CAAYF,QAAZ,EAAsB,CAACn3L,KAAD,EAAQrV,IAAR,KAAiB;AACrC,UAAIqV,KAAJ,EAAWxb,MAAM,CAACwb,KAAD,CAAN,CAAX,KAA8Bo3L,MAAM,CAACzsM,IAAD,CAAN;AAC/B,KAFD;AAGD,GAJuB,CAAf,GAIJ2sM,UAJL;AAKD;AACD;AACA;AACA;;;AAGA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,wBAAN;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASd,UAAT,CAAoBtsM,KAApB,EAA2B;AACzB,SAAOA,KAAK,GAAG,gBAAgB6tG,GAAhB,EAAqBzlC,OAArB,EAA8B;AAC3C,UAAMs9H,GAAG,GAAG,sBAAO,EAAP,EAAW,KAAKt9H,OAAL,CAAa60C,IAAxB,EAA8B70C,OAA9B,CAAZ;AAAA,UACM12D,IAAI,GAAG02D,OAAO,IAAIA,OAAO,CAAC4wC,QADhC;AAAA,UAEMA,QAAQ,GAAG,MAAMh5G,KAAK,CAAC6tG,GAAD,EAAM63F,GAAN,CAF5B;AAGA,WAAO,CAAC1sF,QAAQ,CAAC6C,EAAV,GAAe,qBAAM7C,QAAQ,CAACj1F,MAAT,GAAkB,EAAlB,GAAuBi1F,QAAQ,CAACivE,UAAtC,CAAf,GAAmE,0BAAWjvE,QAAQ,CAACtnG,IAAD,CAAnB,IAA6BsnG,QAAQ,CAACtnG,IAAD,CAAR,EAA7B,GAAgDsnG,QAAQ,CAAC7O,IAAT,EAA1H;AACD,GALW,GAKRkjG,UALJ;AAMD;AACD;AACA;AACA;;;AAGA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,iCAAN;AACD;;AAED,MAAMt9H,OAAO,GAAG33D,CAAC,IAAIA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAxC;;AAEA,MAAMpb,SAAS,GAAGob,CAAC,IAAIA,CAAC,KAAK,MAAN,IAAgBA,CAAC,KAAK,OAAtB,IAAiCA,CAAC,KAAK,IAAvC,IAA+CA,CAAC,KAAK,KAA5E;;AAEA,MAAMizL,MAAM,GAAGjzL,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAakrE,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAb,CAArB;;AAEA,MAAMnb,QAAQ,GAAGmb,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAa,CAAC+b,CAAd,CAAD,IAAqB,EAAEA,CAAC,YAAYmvD,IAAf,CAA3C;;AAEA,MAAMzoE,SAAS,GAAGsZ,CAAC,IAAInb,QAAQ,CAACmb,CAAD,CAAR,IAAevZ,MAAM,CAACC,SAAP,CAAiB,CAACsZ,CAAlB,CAAtC;;AAEA,MAAMk1L,WAAW,GAAG;AAClBC,EAAAA,OAAO,EAAE7B,mBADS;AAElB8B,EAAAA,OAAO,EAAErG,kBAFS;AAGlBsG,EAAAA,MAAM,EAAEtG,kBAHU;AAIlBY,EAAAA,IAAI,EAAE4D,gBAJY;AAKlB+B,EAAAA,MAAM,EAAEtsM,kBALU;AAMlBkrJ,EAAAA,OAAO,EAAE56B;AANS,CAApB;;AAQA,MAAMi8E,SAAS,GAAG,CAAC3wM,SAAD,EAAY8B,SAAZ,EAAuB7B,QAAvB,EAAiCouM,MAAjC,CAAlB;AACA,MAAMuC,QAAQ,GAAG,CAAC,SAAD,EAAY,SAAZ,EAAuB,QAAvB,EAAiC,MAAjC,CAAjB;;AACA,SAASC,SAAT,CAAmBhyM,MAAnB,EAA2BorH,KAA3B,EAAkC;AAChC,MAAI,CAACprH,MAAD,IAAW,CAACA,MAAM,CAAC9K,MAAvB,EAA+B,OAAO,SAAP;AAC/B,QAAM4O,CAAC,GAAG9D,MAAM,CAAC9K,MAAjB;AAAA,QACMm4F,CAAC,GAAGykH,SAAS,CAAC58M,MADpB;AAAA,QAEM4H,CAAC,GAAGg1M,SAAS,CAACzyM,GAAV,CAAc,CAACkd,CAAD,EAAI3mB,CAAJ,KAAUA,CAAC,GAAG,CAA5B,CAFV;;AAIA,OAAK,IAAIA,CAAC,GAAG,CAAR,EAAW0D,CAAC,GAAG,CAAf,EAAkBuG,CAAlB,EAAqBjH,KAA1B,EAAiChD,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CgD,IAAAA,KAAK,GAAGwyH,KAAK,GAAGprH,MAAM,CAACpK,CAAD,CAAN,CAAUw1H,KAAV,CAAH,GAAsBprH,MAAM,CAACpK,CAAD,CAAzC;;AAEA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB,UAAI/C,CAAC,CAAC+C,CAAD,CAAD,IAAQq0E,OAAO,CAACt7E,KAAD,CAAf,IAA0B,CAACk5M,SAAS,CAACjyM,CAAD,CAAT,CAAajH,KAAb,CAA/B,EAAoD;AAClDkE,QAAAA,CAAC,CAAC+C,CAAD,CAAD,GAAO,CAAP;AACA,UAAEvG,CAAF;AACA,YAAIA,CAAC,KAAKw4M,SAAS,CAAC58M,MAApB,EAA4B,OAAO,QAAP;AAC7B;AACF;AACF;;AAED,SAAO68M,QAAQ,CAACj1M,CAAC,CAACqF,MAAF,CAAS,CAACyyE,CAAD,EAAI9sE,CAAJ,KAAU8sE,CAAC,KAAK,CAAN,GAAU9sE,CAAV,GAAc8sE,CAAjC,EAAoC,CAApC,IAAyC,CAA1C,CAAf;AACD;;AACD,SAASq9H,UAAT,CAAoBrtM,IAApB,EAA0B8uC,MAA1B,EAAkC;AAChC,SAAOA,MAAM,CAACvxC,MAAP,CAAc,CAAC+vM,KAAD,EAAQ9mF,KAAR,KAAkB;AACrC8mF,IAAAA,KAAK,CAAC9mF,KAAD,CAAL,GAAe4mF,SAAS,CAACptM,IAAD,EAAOwmH,KAAP,CAAxB;AACA,WAAO8mF,KAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;AAED,SAASuD,eAAT,CAAyB7wB,SAAzB,EAAoC;AAClC,QAAM9sI,KAAK,GAAG,UAAUlzC,IAAV,EAAgBuzG,MAAhB,EAAwB;AACpC,UAAMu9F,KAAK,GAAG;AACZ9wB,MAAAA,SAAS,EAAEA;AADC,KAAd;AAGA,WAAO+wB,GAAG,CAAC/wM,IAAD,EAAOuzG,MAAM,GAAG,sBAAOA,MAAP,EAAeu9F,KAAf,CAAH,GAA2BA,KAAxC,CAAV;AACD,GALD;;AAOA59J,EAAAA,KAAK,CAAC89J,YAAN,GAAqB,MAArB;AACA,SAAO99J,KAAP;AACD;;AACD,SAAS69J,GAAT,CAAa/wM,IAAb,EAAmBuzG,MAAnB,EAA2B;AACzB,MAAIA,MAAM,CAAC09F,MAAX,EAAmB;AACjBjxM,IAAAA,IAAI,GAAGuzG,MAAM,CAAC09F,MAAP,CAAcx2M,GAAd,CAAkBy2M,qBAAlB,EAA+Bt8M,IAA/B,CAAoC2+G,MAAM,CAACysE,SAA3C,IAAwD,IAAxD,GAA+DhgL,IAAtE;AACD;;AAED,SAAO,sBAAUuzG,MAAM,CAACysE,SAAjB,EAA4B9sI,KAA5B,CAAkClzC,IAAI,GAAG,EAAzC,CAAP;AACD;;AACD+wM,GAAG,CAACC,YAAJ,GAAmB,MAAnB;;AAEA,SAASG,QAAT,CAAkBx5L,CAAlB,EAAqB;AACnB,SAAO,OAAO6zF,MAAP,KAAkB,UAAlB,IAAgC,0BAAWA,MAAM,CAAC2lG,QAAlB,CAAhC,GAA8D3lG,MAAM,CAAC2lG,QAAP,CAAgBx5L,CAAhB,CAA9D,GAAmF,KAA1F;AACD;;AAED,SAAS4jG,IAAT,CAAcv7G,IAAd,EAAoBuzG,MAApB,EAA4B;AAC1B,QAAMxrC,IAAI,GAAGwrC,MAAM,IAAIA,MAAM,CAACg1F,QAAjB,GAA4B,qBAAMh1F,MAAM,CAACg1F,QAAb,CAA5B,GAAqDt3E,kBAAlE;AACA,SAAO,wBAASjxH,IAAT,KAAkB,CAACmxM,QAAQ,CAACnxM,IAAD,CAA3B,GAAoCoxM,SAAS,CAACrpI,IAAI,CAAC/nE,IAAD,CAAL,EAAauzG,MAAb,CAA7C,GAAoExrC,IAAI,CAAC90B,IAAI,CAACC,KAAL,CAAWlzC,IAAX,CAAD,CAA/E;AACD;;AACDu7G,IAAI,CAACy1F,YAAL,GAAoB,MAApB;;AAEA,SAASI,SAAT,CAAmBpxM,IAAnB,EAAyBuzG,MAAzB,EAAiC;AAC/B,SAAOA,MAAM,IAAIA,MAAM,CAACztC,IAAjB,GAAwB7yB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAenzC,IAAf,CAAX,CAAxB,GAA2DA,IAAlE;AACD;;AAED,MAAMqnJ,OAAO,GAAG;AACd6tD,EAAAA,QAAQ,EAAE,CAACh9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G,CADZ;AAEdo2M,EAAAA,QAAQ,EAAE,CAACj9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G;AAFZ,CAAhB;;AAIA,SAASq2M,QAAT,CAAkBp1M,IAAlB,EAAwBuzG,MAAxB,EAAgC;AAC9B,MAAItxE,MAAJ,EAAYo2J,MAAZ,EAAoBkQ,QAApB,EAA8Bp8L,MAA9B;AACAnM,EAAAA,IAAI,GAAGu7G,IAAI,CAACv7G,IAAD,EAAOuzG,MAAP,CAAX;;AAEA,MAAIA,MAAM,IAAIA,MAAM,CAAC0+F,OAArB,EAA8B;AAC5BhwK,IAAAA,MAAM,GAAGgwK,uBAAT;AACA1J,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC0+F,OAAlB;AACD,GAHD,MAGO,IAAI1+F,MAAM,IAAIA,MAAM,CAAC8hG,IAArB,EAA2B;AAChCpzK,IAAAA,MAAM,GAAGozK,oBAAT;AACA9M,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC8hG,IAAlB;AACAlpM,IAAAA,MAAM,GAAGk7I,OAAO,CAAC9zC,MAAM,CAACpnG,MAAR,CAAhB;AACD,GAJM,MAIA;AACL,yBAAM,6CAAN;AACD;;AAEDksL,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAGr4L,IAAI,CAACgyM,OAAL,CAAazJ,QAAb,CAAV,IAAoCtmK,MAAM,CAACjiC,IAAD,EAAOq4L,MAAP,EAAelsL,MAAf,CAA1C,GAAmE,qBAAM,8BAA8Bo8L,QAApC,CAA5E;AACA,SAAOlQ,MAAM,IAAIA,MAAM,CAACxX,QAAjB,IAA6B,CAACwX,MAAD,CAApC;AACD;;AACD+c,QAAQ,CAACpE,YAAT,GAAwB,MAAxB;AAEA,MAAMz9F,MAAM,GAAG;AACbw9F,EAAAA,GAAG,EAAEA,GADQ;AAEbxoB,EAAAA,GAAG,EAAEsoB,eAAe,CAAC,GAAD,CAFP;AAGbX,EAAAA,GAAG,EAAEW,eAAe,CAAC,IAAD,CAHP;AAIbt1F,EAAAA,IAAI,EAAEA,IAJO;AAKb65F,EAAAA,QAAQ,EAAEA;AALG,CAAf;;;AAOA,SAASE,OAAT,CAAiB/iN,IAAjB,EAAuBgjN,MAAvB,EAA+B;AAC7B,MAAIxkN,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxBijH,IAAAA,MAAM,CAAChhH,IAAD,CAAN,GAAegjN,MAAf;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO,8BAAehiG,MAAf,EAAuBhhH,IAAvB,IAA+BghH,MAAM,CAAChhH,IAAD,CAArC,GAA8C,IAArD;AACD;AACF;;AACD,SAASy+M,YAAT,CAAsB//L,IAAtB,EAA4B;AAC1B,QAAMtU,CAAC,GAAG24M,OAAO,CAACrkM,IAAD,CAAjB;AACA,SAAOtU,CAAC,IAAIA,CAAC,CAACq0M,YAAP,IAAuB,MAA9B;AACD;;AAED,SAASjsM,IAAT,CAAe/E,IAAf,EAAqB4vN,MAArB,EAA6BC,UAA7B,EAAyCC,SAAzC,EAAoD;AAClDF,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AACA,QAAMra,MAAM,GAAGD,OAAO,CAACsa,MAAM,CAAC3+M,IAAP,IAAe,MAAhB,CAAtB;AACA,MAAI,CAACskM,MAAL,EAAa,qBAAM,+BAA+Bqa,MAAM,CAAC3+M,IAA5C;AACbjR,EAAAA,IAAI,GAAGu1M,MAAM,CAACv1M,IAAD,EAAO4vN,MAAP,CAAb;AACA,MAAIA,MAAM,CAAC18K,KAAX,EAAkBA,KAAK,CAAClzC,IAAD,EAAO4vN,MAAM,CAAC18K,KAAd,EAAqB28K,UAArB,EAAiCC,SAAjC,CAAL;AAClB,MAAI,8BAAe9vN,IAAf,EAAqB,SAArB,CAAJ,EAAqC,OAAOA,IAAI,CAACwE,OAAZ;AACrC,SAAOxE,IAAP;AACD;;AAED,SAASkzC,KAAT,CAAelzC,IAAf,EAAqBstM,KAArB,EAA4BuiB,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,MAAI,CAAC9vN,IAAI,CAAC1P,MAAV,EAAkB,OAD+B,CACvB;;AAE1B,QAAMyqN,MAAM,GAAG,0CAAf;AACA8U,EAAAA,UAAU,GAAGA,UAAU,IAAI9U,MAAM,CAAC+S,SAAlC;AACAgC,EAAAA,SAAS,GAAGA,SAAS,IAAI/U,MAAM,CAACoS,QAAhC;AACA,MAAIr+K,MAAM,GAAG9uC,IAAI,CAACwE,OAAL,IAAgBzQ,MAAM,CAACof,IAAP,CAAYnT,IAAI,CAAC,CAAD,CAAhB,CAA7B;AAAA,MACI+vN,KADJ;AAAA,MAEIvpG,KAFJ;AAAA,MAGIx1H,CAHJ;AAAA,MAIIiK,CAJJ;AAAA,MAKIiE,CALJ;AAAA,MAMIupF,CANJ;AAOA,MAAI6kH,KAAK,KAAK,MAAd,EAAsBA,KAAK,GAAGD,UAAU,CAACrtM,IAAD,EAAO8uC,MAAP,CAAlB;AACtBA,EAAAA,MAAM,GAAG/6C,MAAM,CAACof,IAAP,CAAYm6L,KAAZ,CAAT;AACA,QAAM0iB,OAAO,GAAGlhL,MAAM,CAACr0C,GAAP,CAAW+rH,KAAK,IAAI;AAClC,UAAMv1G,IAAI,GAAGq8L,KAAK,CAAC9mF,KAAD,CAAlB;AACA,QAAIypG,KAAJ,EAAWn9D,OAAX;;AAEA,QAAI7hJ,IAAI,KAAKA,IAAI,CAACugG,UAAL,CAAgB,OAAhB,KAA4BvgG,IAAI,CAACugG,UAAL,CAAgB,MAAhB,CAAjC,CAAR,EAAmE;AACjEy+G,MAAAA,KAAK,GAAGh/M,IAAI,CAACpc,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAR,CADiE,CAChC;;AAEjCi+J,MAAAA,OAAO,GAAGm9D,KAAK,CAAC,CAAD,CAAf;;AAEA,UAAIn9D,OAAO,CAAC,CAAD,CAAP,KAAe,IAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAiB,CAAlB,CAAP,KAAgC,IAAvD,IAA+DwiK,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAsBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAiB,CAAlB,CAAP,KAAgC,GAAzH,EAA8H;AAC5HwiK,QAAAA,OAAO,GAAGA,OAAO,CAACz4J,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;AACD;;AAED,YAAM64C,KAAK,GAAG+8K,KAAK,CAAC,CAAD,CAAL,KAAa,KAAb,GAAqBH,SAArB,GAAiCD,UAA/C;AACA,aAAO38K,KAAK,CAAC4/G,OAAD,CAAZ;AACD;;AAED,QAAI,CAAC+5C,WAAW,CAAC57L,IAAD,CAAhB,EAAwB;AACtB,YAAM1hB,KAAK,CAAC,6BAA6Bi3H,KAA7B,GAAqC,GAArC,GAA2Cv1G,IAA5C,CAAX;AACD;;AAED,WAAO47L,WAAW,CAAC57L,IAAD,CAAlB;AACD,GAtBe,CAAhB;;AAwBA,OAAKjgB,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGc,IAAI,CAAC1P,MAAhB,EAAwBm4F,CAAC,GAAG35C,MAAM,CAACx+C,MAAxC,EAAgDU,CAAC,GAAGkO,CAApD,EAAuD,EAAElO,CAAzD,EAA4D;AAC1D++N,IAAAA,KAAK,GAAG/vN,IAAI,CAAChP,CAAD,CAAZ;;AAEA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtBurH,MAAAA,KAAK,GAAG13E,MAAM,CAAC7zC,CAAD,CAAd;AACA80N,MAAAA,KAAK,CAACvpG,KAAD,CAAL,GAAewpG,OAAO,CAAC/0N,CAAD,CAAP,CAAW80N,KAAK,CAACvpG,KAAD,CAAhB,CAAf;AACD;AACF;AACF;;AAED,MAAM0pG,MAAM,GAAGktG,aAAa,CAAC,OAAO79T,KAAP,KAAiB,WAAjB,IAAgCA,KAAjC,EAAwC;AACpE,IAD4B,CACvB;AADuB,CAA5B;;;;;;;;;;;;;AC/WA,IAAIi8P,WAAW,GAAG,CAAlB;;AAEO,SAASC,kBAAT,GAA8B;AACnCD,EAAAA,WAAW,GAAG,CAAd;AACD;;AAEM,MAAME,aAAa,GAAG,IAAtB;;;AAEA,SAASC,UAAT,CAAoB3nQ,KAApB,EAA2B;AAChC,SAAOA,KAAK,IAAIA,KAAK,CAACwmB,QAAtB;AACD;;AAEM,SAASohP,WAAT,CAAqBn8N,CAArB,EAAwBo8N,IAAxB,EAA8B7/N,IAA9B,EAAoC;AACzC,MAAI/3B,EAAE,GAAGw7B,CAAC,CAACx7B,EAAX;AAAA,MACIgN,IAAI,GAAGwuB,CAAC,CAACjlB,QADb;AAAA,MAEI45F,MAAM,GAAGnjG,IAAI,KAAK,QAAT,GAAoByqP,aAApB,GAAoC,EAFjD,CADyC,CAKzC;;AACA,MAAI,CAACz3P,EAAL,EAAS;AACPA,IAAAA,EAAE,GAAGw7B,CAAC,CAACx7B,EAAF,GAAO,cAAeu3P,WAAW,EAAtC;;AACA,QAAIvqP,IAAI,KAAK,QAAb,EAAuB;AACrBwuB,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,GAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,GAAP,CAAV;AACA/jE,MAAAA,CAAC,CAAC2jK,EAAF,GAAOtvM,GAAG,CAAC2rC,CAAC,CAAC2jK,EAAH,EAAO,CAAP,CAAV;AACA3jK,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,GAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,GAAP,CAAV;AACAjkE,MAAAA,CAAC,CAAC4jK,EAAF,GAAOvvM,GAAG,CAAC2rC,CAAC,CAAC4jK,EAAH,EAAO,GAAP,CAAV;AACAjvF,MAAAA,MAAM,GAAGsnJ,aAAT;AACD,KARD,MAQO;AACLj8N,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,CAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,CAAP,CAAV;AACA/jE,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,CAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,CAAP,CAAV;AACD;AACF,GAtBwC,CAwBzC;;;AACAm4J,EAAAA,IAAI,CAAC53P,EAAD,CAAJ,GAAWw7B,CAAX,CAzByC,CA2BzC;;AACA,SAAO,UAAUzD,IAAI,IAAI,EAAlB,IAAwB,GAAxB,GAA8Bo4E,MAA9B,GAAuCnwG,EAAvC,GAA4C,GAAnD;AACD;;AAED,SAASnQ,GAAT,CAAawD,GAAb,EAAkB0vK,GAAlB,EAAuB;AACrB,SAAO1vK,GAAG,IAAI,IAAP,GAAcA,GAAd,GAAoB0vK,GAA3B;AACD;;AAEc,kBAASksC,EAAT,EAAantF,EAAb,EAAiB;AAC9B,MAAIg2I,KAAK,GAAG,EAAZ;AAAA,MAAgBvhP,QAAhB;AACA,SAAOA,QAAQ,GAAG;AAChBA,IAAAA,QAAQ,EAAE,QADM;AAEhBipF,IAAAA,EAAE,EAAEyvG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAFD;AAGhB1vG,IAAAA,EAAE,EAAE0vG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAHD;AAIhBpjI,IAAAA,EAAE,EAAEi2C,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAJD;AAKhBriB,IAAAA,EAAE,EAAEqiB,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CALD;AAMhBg2I,IAAAA,KAAK,EAAEA,KANS;AAOhBxpO,IAAAA,IAAI,EAAE,UAAS50B,MAAT,EAAiB6oP,KAAjB,EAAwB;AAC5BuV,MAAAA,KAAK,CAAC9qQ,IAAN,CAAW;AAAC0M,QAAAA,MAAM,EAAEA,MAAT;AAAiB6oP,QAAAA,KAAK,EAAEA;AAAxB,OAAX;AACA,aAAOhsO,QAAP;AACD;AAVe,GAAlB;AAYD;;;;;;;;AE7DD,IAAIwzN,EAAE,GAAGj3O,IAAI,CAACuiC,EAAd;AAAA,IACI20M,GAAG,GAAG,IAAID,EADd;AAAA,IAEI3/J,OAAO,GAAG,IAFd;AAAA,IAGI6/J,UAAU,GAAGD,GAAG,GAAG5/J,OAHvB;;AAKA,SAAS8/J,IAAT,GAAgB;AACd,OAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW;AACtB,OAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,IADtB,CADc,CAEc;;AAC5B,OAAK52N,CAAL,GAAS,EAAT;AACD;;AAED,SAAStY,IAAT,GAAgB;AACd,SAAO,IAAI8uO,IAAJ,EAAP;AACD;;AAEDA,IAAI,CAAC/8O,SAAL,GAAiBiO,IAAI,CAACjO,SAAL,GAAiB;AAChCwL,EAAAA,WAAW,EAAEuxO,IADmB;AAEhCK,EAAAA,MAAM,EAAE,UAASr3O,CAAT,EAAYue,CAAZ,EAAe;AACrB,SAAKiC,CAAL,IAAU,OAAO,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAA9B,IAAmC,GAAnC,IAA0C,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAjE,CAAV;AACD,GAJ+B;AAKhC+4N,EAAAA,SAAS,EAAE,YAAW;AACpB,QAAI,KAAKH,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAKA,GAAL,GAAW,KAAKF,GAAhB,EAAqB,KAAKG,GAAL,GAAW,KAAKF,GAArC;AACA,WAAK12N,CAAL,IAAU,GAAV;AACD;AACF,GAV+B;AAWhC+2N,EAAAA,MAAM,EAAE,UAASv3O,CAAT,EAAYue,CAAZ,EAAe;AACrB,SAAKiC,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW,CAACn3O,CAAnB,IAAwB,GAAxB,IAA+B,KAAKo3O,GAAL,GAAW,CAAC74N,CAA3C,CAAV;AACD,GAb+B;AAchCi5N,EAAAA,gBAAgB,EAAE,UAASlrI,EAAT,EAAaD,EAAb,EAAiBrsG,CAAjB,EAAoBue,CAApB,EAAuB;AACvC,SAAKiC,CAAL,IAAU,MAAO,CAAC8rF,EAAR,GAAc,GAAd,GAAqB,CAACD,EAAtB,GAA4B,GAA5B,IAAmC,KAAK8qI,GAAL,GAAW,CAACn3O,CAA/C,IAAoD,GAApD,IAA2D,KAAKo3O,GAAL,GAAW,CAAC74N,CAAvE,CAAV;AACD,GAhB+B;AAiBhCk5N,EAAAA,aAAa,EAAE,UAASnrI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyBvsG,CAAzB,EAA4Bue,CAA5B,EAA+B;AAC5C,SAAKiC,CAAL,IAAU,MAAO,CAAC8rF,EAAR,GAAc,GAAd,GAAqB,CAACD,EAAtB,GAA4B,GAA5B,GAAmC,CAAC1zB,EAApC,GAA0C,GAA1C,GAAiD,CAAC4zB,EAAlD,GAAwD,GAAxD,IAA+D,KAAK4qI,GAAL,GAAW,CAACn3O,CAA3E,IAAgF,GAAhF,IAAuF,KAAKo3O,GAAL,GAAW,CAAC74N,CAAnG,CAAV;AACD,GAnB+B;AAoBhCm5N,EAAAA,KAAK,EAAE,UAASprI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyB1kG,CAAzB,EAA4B;AACjCykG,IAAAA,EAAE,GAAG,CAACA,EAAN,EAAUD,EAAE,GAAG,CAACA,EAAhB,EAAoB1zB,EAAE,GAAG,CAACA,EAA1B,EAA8B4zB,EAAE,GAAG,CAACA,EAApC,EAAwC1kG,CAAC,GAAG,CAACA,CAA7C;AACA,QAAIqyM,EAAE,GAAG,KAAKi9B,GAAd;AAAA,QACIh9B,EAAE,GAAG,KAAKi9B,GADd;AAAA,QAEIO,GAAG,GAAGh/J,EAAE,GAAG2zB,EAFf;AAAA,QAGIsrI,GAAG,GAAGrrI,EAAE,GAAGF,EAHf;AAAA,QAIIwrI,GAAG,GAAG39B,EAAE,GAAG5tG,EAJf;AAAA,QAKIwrI,GAAG,GAAG39B,EAAE,GAAG9tG,EALf;AAAA,QAMI0rI,KAAK,GAAGF,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAN9B,CAFiC,CAUjC;;AACA,QAAIjwO,CAAC,GAAG,CAAR,EAAW,MAAM,IAAIzP,KAAJ,CAAU,sBAAsByP,CAAhC,CAAN,CAXsB,CAajC;;AACA,QAAI,KAAKsvO,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAK32N,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW7qI,EAAlB,IAAwB,GAAxB,IAA+B,KAAK8qI,GAAL,GAAW/qI,EAA1C,CAAV;AACD,KAFD,CAIA;AAJA,SAKK,IAAI,EAAE0rI,KAAK,GAAG7gK,OAAV,CAAJ,EAAuB,CAAvB,CAEL;AACA;AACA;AAJK,WAKA,IAAI,EAAEt3E,IAAI,CAACiT,GAAL,CAASilO,GAAG,GAAGH,GAAN,GAAYC,GAAG,GAAGC,GAA3B,IAAkC3gK,OAApC,KAAgD,CAACrvE,CAArD,EAAwD;AAC3D,eAAK2Y,CAAL,IAAU,OAAO,KAAK22N,GAAL,GAAW7qI,EAAlB,IAAwB,GAAxB,IAA+B,KAAK8qI,GAAL,GAAW/qI,EAA1C,CAAV;AACD,SAFI,CAIL;AAJK,aAKA;AACH,gBAAI2rI,GAAG,GAAGr/J,EAAE,GAAGuhI,EAAf;AAAA,gBACI+9B,GAAG,GAAG1rI,EAAE,GAAG4tG,EADf;AAAA,gBAEI+9B,KAAK,GAAGP,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAF9B;AAAA,gBAGIO,KAAK,GAAGH,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAH9B;AAAA,gBAIIG,GAAG,GAAGx4O,IAAI,CAACqC,IAAL,CAAUi2O,KAAV,CAJV;AAAA,gBAKIG,GAAG,GAAGz4O,IAAI,CAACqC,IAAL,CAAU81O,KAAV,CALV;AAAA,gBAMIpsO,CAAC,GAAG9D,CAAC,GAAGjI,IAAI,CAACiU,GAAL,CAAS,CAACgjO,EAAE,GAAGj3O,IAAI,CAACmU,IAAL,CAAU,CAACmkO,KAAK,GAAGH,KAAR,GAAgBI,KAAjB,KAA2B,IAAIC,GAAJ,GAAUC,GAArC,CAAV,CAAN,IAA8D,CAAvE,CANZ;AAAA,gBAOIC,GAAG,GAAG3sO,CAAC,GAAG0sO,GAPd;AAAA,gBAQIE,GAAG,GAAG5sO,CAAC,GAAGysO,GARd,CADG,CAWH;;AACA,gBAAIx4O,IAAI,CAACiT,GAAL,CAASylO,GAAG,GAAG,CAAf,IAAoBphK,OAAxB,EAAiC;AAC/B,mBAAK12D,CAAL,IAAU,OAAO8rF,EAAE,GAAGgsI,GAAG,GAAGT,GAAlB,IAAyB,GAAzB,IAAgCxrI,EAAE,GAAGisI,GAAG,GAAGR,GAA3C,CAAV;AACD;;AAED,iBAAKt3N,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,OAApB,GAA+B,EAAEiwO,GAAG,GAAGE,GAAN,GAAYH,GAAG,GAAGI,GAApB,CAA/B,GAA2D,GAA3D,IAAkE,KAAKd,GAAL,GAAW7qI,EAAE,GAAGisI,GAAG,GAAGZ,GAAxF,IAA+F,GAA/F,IAAsG,KAAKP,GAAL,GAAW/qI,EAAE,GAAGksI,GAAG,GAAGX,GAA5H,CAAV;AACD;AACF,GAnE+B;AAoEhCh9B,EAAAA,GAAG,EAAE,UAAS56M,CAAT,EAAYue,CAAZ,EAAe1W,CAAf,EAAkBihO,EAAlB,EAAsBC,EAAtB,EAA0ByP,GAA1B,EAA+B;AAClCx4O,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb,EAAgB1W,CAAC,GAAG,CAACA,CAArB,EAAwB2wO,GAAG,GAAG,CAAC,CAACA,GAAhC;AACA,QAAI7yN,EAAE,GAAG9d,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASk1N,EAAT,CAAb;AAAA,QACInqN,EAAE,GAAG9W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASm1N,EAAT,CADb;AAAA,QAEI5uB,EAAE,GAAGl6M,CAAC,GAAG2lB,EAFb;AAAA,QAGIw0L,EAAE,GAAG57L,CAAC,GAAGI,EAHb;AAAA,QAII85N,EAAE,GAAG,IAAID,GAJb;AAAA,QAKI3oC,EAAE,GAAG2oC,GAAG,GAAG1P,EAAE,GAAGC,EAAR,GAAaA,EAAE,GAAGD,EAL9B,CAFkC,CASlC;;AACA,QAAIjhO,CAAC,GAAG,CAAR,EAAW,MAAM,IAAIzP,KAAJ,CAAU,sBAAsByP,CAAhC,CAAN,CAVuB,CAYlC;;AACA,QAAI,KAAKsvO,GAAL,KAAa,IAAjB,EAAuB;AACrB,WAAK32N,CAAL,IAAU,MAAM05L,EAAN,GAAW,GAAX,GAAiBC,EAA3B;AACD,KAFD,CAIA;AAJA,SAKK,IAAIv6M,IAAI,CAACiT,GAAL,CAAS,KAAKskO,GAAL,GAAWj9B,EAApB,IAA0BhjI,OAA1B,IAAqCt3E,IAAI,CAACiT,GAAL,CAAS,KAAKukO,GAAL,GAAWj9B,EAApB,IAA0BjjI,OAAnE,EAA4E;AAC/E,aAAK12D,CAAL,IAAU,MAAM05L,EAAN,GAAW,GAAX,GAAiBC,EAA3B;AACD,OApBiC,CAsBlC;;;AACA,QAAI,CAACtyM,CAAL,EAAQ,OAvB0B,CAyBlC;;AACA,QAAIgoM,EAAE,GAAG,CAAT,EAAYA,EAAE,GAAGA,EAAE,GAAGinC,GAAL,GAAWA,GAAhB,CA1BsB,CA4BlC;;AACA,QAAIjnC,EAAE,GAAGknC,UAAT,EAAqB;AACnB,WAAKv2N,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,OAApB,GAA8B4wO,EAA9B,GAAmC,GAAnC,IAA0Cz4O,CAAC,GAAG2lB,EAA9C,IAAoD,GAApD,IAA2DpH,CAAC,GAAGI,EAA/D,IAAqE,GAArE,GAA2E9W,CAA3E,GAA+E,GAA/E,GAAqFA,CAArF,GAAyF,OAAzF,GAAmG4wO,EAAnG,GAAwG,GAAxG,IAA+G,KAAKtB,GAAL,GAAWj9B,EAA1H,IAAgI,GAAhI,IAAuI,KAAKk9B,GAAL,GAAWj9B,EAAlJ,CAAV;AACD,KAFD,CAIA;AAJA,SAKK,IAAItK,EAAE,GAAG34H,OAAT,EAAkB;AACrB,aAAK12D,CAAL,IAAU,MAAM3Y,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,KAApB,GAA6B,EAAEgoM,EAAE,IAAIgnC,EAAR,CAA7B,GAA4C,GAA5C,GAAkD4B,EAAlD,GAAuD,GAAvD,IAA8D,KAAKtB,GAAL,GAAWn3O,CAAC,GAAG6H,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASm1N,EAAT,CAAjF,IAAiG,GAAjG,IAAwG,KAAKqO,GAAL,GAAW74N,CAAC,GAAG1W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASo1N,EAAT,CAA3H,CAAV;AACD;AACF,GAzG+B;AA0GhC2P,EAAAA,IAAI,EAAE,UAAS14O,CAAT,EAAYue,CAAZ,EAAe4nC,CAAf,EAAkBC,CAAlB,EAAqB;AACzB,SAAK5lC,CAAL,IAAU,OAAO,KAAKy2N,GAAL,GAAW,KAAKE,GAAL,GAAW,CAACn3O,CAA9B,IAAmC,GAAnC,IAA0C,KAAKk3O,GAAL,GAAW,KAAKE,GAAL,GAAW,CAAC74N,CAAjE,IAAsE,GAAtE,GAA6E,CAAC4nC,CAA9E,GAAmF,GAAnF,GAA0F,CAACC,CAA3F,GAAgG,GAAhG,GAAuG,CAACD,CAAxG,GAA6G,GAAvH;AACD,GA5G+B;AA6GhC38C,EAAAA,QAAQ,EAAE,YAAW;AACnB,WAAO,KAAKgX,CAAZ;AACD;AA/G+B,CAAlC;eAkHetY;;;;;;;;;;;;;;;ACjIf;;;;;;;;;;;AGAA;;AACA;;AACA;;;;AAEA,SAAS0wO,cAAT,CAAwBlyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACmyO,WAAT;AACD;;AAED,SAASC,cAAT,CAAwBpyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACqyO,WAAT;AACD;;AAED,SAASC,aAAT,CAAuBtyO,CAAvB,EAA0B;AACxB,SAAOA,CAAC,CAACuyO,UAAT;AACD;;AAED,SAASC,WAAT,CAAqBxyO,CAArB,EAAwB;AACtB,SAAOA,CAAC,CAACyyO,QAAT;AACD;;AAED,SAASC,WAAT,CAAqB1yO,CAArB,EAAwB;AACtB,SAAOA,CAAC,IAAIA,CAAC,CAAC2yO,QAAd,CADsB,CACE;AACzB;;AAED,SAASC,SAAT,CAAmBp/B,EAAnB,EAAuBC,EAAvB,EAA2B7tG,EAA3B,EAA+BD,EAA/B,EAAmC1zB,EAAnC,EAAuC4zB,EAAvC,EAA2CgtI,EAA3C,EAA+CC,EAA/C,EAAmD;AACjD,MAAIC,GAAG,GAAGntI,EAAE,GAAG4tG,EAAf;AAAA,MAAmBw/B,GAAG,GAAGrtI,EAAE,GAAG8tG,EAA9B;AAAA,MACIw/B,GAAG,GAAGJ,EAAE,GAAG5gK,EADf;AAAA,MACmBihK,GAAG,GAAGJ,EAAE,GAAGjtI,EAD9B;AAAA,MAEIhvG,CAAC,GAAGq8O,GAAG,GAAGH,GAAN,GAAYE,GAAG,GAAGD,GAF1B;AAGA,MAAIn8O,CAAC,GAAGA,CAAJ,GAAQ25E,aAAZ,EAAqB;AACrB35E,EAAAA,CAAC,GAAG,CAACo8O,GAAG,IAAIx/B,EAAE,GAAG5tG,EAAT,CAAH,GAAkBqtI,GAAG,IAAI1/B,EAAE,GAAGvhI,EAAT,CAAtB,IAAsCp7E,CAA1C;AACA,SAAO,CAAC28M,EAAE,GAAG38M,CAAC,GAAGk8O,GAAV,EAAet/B,EAAE,GAAG58M,CAAC,GAAGm8O,GAAxB,CAAP;AACD,EAED;AACA;;;AACA,SAASG,cAAT,CAAwB3/B,EAAxB,EAA4BC,EAA5B,EAAgC7tG,EAAhC,EAAoCD,EAApC,EAAwC4/F,EAAxC,EAA4C6tC,EAA5C,EAAgDrB,EAAhD,EAAoD;AAClD,MAAIZ,GAAG,GAAG39B,EAAE,GAAG5tG,EAAf;AAAA,MACIwrI,GAAG,GAAG39B,EAAE,GAAG9tG,EADf;AAAA,MAEIkkG,EAAE,GAAG,CAACkoC,EAAE,GAAGqB,EAAH,GAAQ,CAACA,EAAZ,IAAkB,gBAAKjC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAvB,CAF3B;AAAA,MAGIiC,EAAE,GAAGxpC,EAAE,GAAGunC,GAHd;AAAA,MAIIkC,EAAE,GAAG,CAACzpC,EAAD,GAAMsnC,GAJf;AAAA,MAKIoC,GAAG,GAAG//B,EAAE,GAAG6/B,EALf;AAAA,MAMIG,GAAG,GAAG//B,EAAE,GAAG6/B,EANf;AAAA,MAOIP,GAAG,GAAGntI,EAAE,GAAGytI,EAPf;AAAA,MAQIL,GAAG,GAAGrtI,EAAE,GAAG2tI,EARf;AAAA,MASIG,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CATxB;AAAA,MAUIW,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CAVxB;AAAA,MAWI/zN,EAAE,GAAG8zN,GAAG,GAAGQ,GAXf;AAAA,MAYIt7N,EAAE,GAAG+6N,GAAG,GAAGQ,GAZf;AAAA,MAaIj3K,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAbxB;AAAA,MAcI9W,CAAC,GAAGokM,EAAE,GAAG6tC,EAdb;AAAA,MAeIO,CAAC,GAAGJ,GAAG,GAAGP,GAAN,GAAYD,GAAG,GAAGS,GAf1B;AAAA,MAgBIxzO,CAAC,GAAG,CAACiY,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAf,IAAoB,gBAAK,eAAI,CAAJ,EAAO9W,CAAC,GAAGA,CAAJ,GAAQo7D,EAAR,GAAao3K,CAAC,GAAGA,CAAxB,CAAL,CAhB5B;AAAA,MAiBIC,GAAG,GAAG,CAACD,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAjB9B;AAAA,MAkBIs3K,GAAG,GAAG,CAAC,CAACF,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EAlB/B;AAAA,MAmBIu3K,GAAG,GAAG,CAACH,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAnB9B;AAAA,MAoBIw3K,GAAG,GAAG,CAAC,CAACJ,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EApB/B;AAAA,MAqBIy3K,GAAG,GAAGJ,GAAG,GAAGH,GArBhB;AAAA,MAsBIQ,GAAG,GAAGJ,GAAG,GAAGH,GAtBhB;AAAA,MAuBIQ,GAAG,GAAGJ,GAAG,GAAGL,GAvBhB;AAAA,MAwBIU,GAAG,GAAGJ,GAAG,GAAGL,GAxBhB,CADkD,CA2BlD;AACA;;AACA,MAAIM,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAlB,GAAwBC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA9C,EAAmDP,GAAG,GAAGE,GAAN,EAAWD,GAAG,GAAGE,GAAjB;AAEnD,SAAO;AACLK,IAAAA,EAAE,EAAER,GADC;AAELS,IAAAA,EAAE,EAAER,GAFC;AAGL1C,IAAAA,GAAG,EAAE,CAACkC,EAHD;AAILjC,IAAAA,GAAG,EAAE,CAACkC,EAJD;AAKLC,IAAAA,GAAG,EAAEK,GAAG,IAAIruC,EAAE,GAAGpkM,CAAL,GAAS,CAAb,CALH;AAMLqyO,IAAAA,GAAG,EAAEK,GAAG,IAAItuC,EAAE,GAAGpkM,CAAL,GAAS,CAAb;AANH,GAAP;AAQD;;AAEc,oBAAW;AACxB,MAAIgxO,WAAW,GAAGD,cAAlB;AAAA,MACIG,WAAW,GAAGD,cADlB;AAAA,MAEIkC,YAAY,GAAG,uBAAS,CAAT,CAFnB;AAAA,MAGIC,SAAS,GAAG,IAHhB;AAAA,MAIIhC,UAAU,GAAGD,aAJjB;AAAA,MAKIG,QAAQ,GAAGD,WALf;AAAA,MAMIG,QAAQ,GAAGD,WANf;AAAA,MAOIvtE,OAAO,GAAG,IAPd;;AASA,WAAS+uC,GAAT,GAAe;AACb,QAAIltM,MAAJ;AAAA,QACI7F,CADJ;AAAA,QAEI4pM,EAAE,GAAG,CAAConC,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAFV;AAAA,QAGIqyM,EAAE,GAAG,CAAC8sC,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAHV;AAAA,QAIIkvO,EAAE,GAAGmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,IAAoC++O,YAJ7C;AAAA,QAKI5P,EAAE,GAAGoQ,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC++O,YAL3C;AAAA,QAMI9oC,EAAE,GAAG,eAAIk5B,EAAE,GAAGD,EAAT,CANT;AAAA,QAOI2P,EAAE,GAAG1P,EAAE,GAAGD,EAPd;;AASA,QAAI,CAACj9D,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB,CAVD,CAYb;;AACA,QAAIu+L,EAAE,GAAGwF,EAAT,EAAa5pM,CAAC,GAAGokM,EAAJ,EAAQA,EAAE,GAAGwF,EAAb,EAAiBA,EAAE,GAAG5pM,CAAtB,CAbA,CAeb;;AACA,QAAI,EAAEokM,EAAE,GAAG/0H,aAAP,CAAJ,EAAqB20F,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAAlB,EAArB,CAEA;AAFA,SAGK,IAAIxnC,EAAE,GAAGinC,YAAM5/J,aAAf,EAAwB;AAC3B20F,QAAAA,OAAO,CAACwrE,MAAR,CAAeprC,EAAE,GAAG,eAAI68B,EAAJ,CAApB,EAA6B78B,EAAE,GAAG,eAAI68B,EAAJ,CAAlC;AACAj9D,QAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB68B,EAAtB,EAA0BC,EAA1B,EAA8B,CAAC0P,EAA/B;;AACA,YAAIhnC,EAAE,GAAGv6H,aAAT,EAAkB;AAChB20F,UAAAA,OAAO,CAACwrE,MAAR,CAAe5lC,EAAE,GAAG,eAAIs3B,EAAJ,CAApB,EAA6Bt3B,EAAE,GAAG,eAAIs3B,EAAJ,CAAlC;AACAl9D,UAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsBs3B,EAAtB,EAA0BD,EAA1B,EAA8B2P,EAA9B;AACD;AACF,OAPI,CASL;AATK,WAUA;AACH,cAAIyC,GAAG,GAAGpS,EAAV;AAAA,cACIqS,GAAG,GAAGpS,EADV;AAAA,cAEIqS,GAAG,GAAGtS,EAFV;AAAA,cAGIuS,GAAG,GAAGtS,EAHV;AAAA,cAIIuS,GAAG,GAAGzrC,EAJV;AAAA,cAKI0rC,GAAG,GAAG1rC,EALV;AAAA,cAMI2rC,EAAE,GAAGnC,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC,CAN3C;AAAA,cAOI6hP,EAAE,GAAID,EAAE,GAAGtkK,aAAN,KAAmB+jK,SAAS,GAAG,CAACA,SAAS,CAAC/gP,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,CAAJ,GAAuC,gBAAK63M,EAAE,GAAGA,EAAL,GAAUxF,EAAE,GAAGA,EAApB,CAAnE,CAPT;AAAA,cAQI6tC,EAAE,GAAG,eAAI,eAAI7tC,EAAE,GAAGwF,EAAT,IAAe,CAAnB,EAAsB,CAACupC,YAAY,CAAC9gP,KAAb,CAAmB,IAAnB,EAAyBN,SAAzB,CAAvB,CART;AAAA,cASI8hP,GAAG,GAAG5B,EATV;AAAA,cAUI6B,GAAG,GAAG7B,EAVV;AAAA,cAWIh1B,EAXJ;AAAA,cAYItkI,EAZJ,CADG,CAeH;;AACA,cAAIi7J,EAAE,GAAGvkK,aAAT,EAAkB;AAChB,gBAAI6kI,EAAE,GAAG,gBAAK0/B,EAAE,GAAGhqC,EAAL,GAAU,eAAI+pC,EAAJ,CAAf,CAAT;AAAA,gBACI5sH,EAAE,GAAG,gBAAK6sH,EAAE,GAAGxvC,EAAL,GAAU,eAAIuvC,EAAJ,CAAf,CADT;AAEA,gBAAI,CAACF,GAAG,IAAIv/B,EAAE,GAAG,CAAb,IAAkB7kI,aAAtB,EAA+B6kI,EAAE,IAAK08B,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqB2C,GAAG,IAAIr/B,EAA5B,EAAgCs/B,GAAG,IAAIt/B,EAAvC,CAA/B,KACKu/B,GAAG,GAAG,CAAN,EAASF,GAAG,GAAGC,GAAG,GAAG,CAACvS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACL,gBAAI,CAACwS,GAAG,IAAI3sH,EAAE,GAAG,CAAb,IAAkB13C,aAAtB,EAA+B03C,EAAE,IAAK6pH,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqByC,GAAG,IAAItsH,EAA5B,EAAgCusH,GAAG,IAAIvsH,EAAvC,CAA/B,KACK2sH,GAAG,GAAG,CAAN,EAASL,GAAG,GAAGC,GAAG,GAAG,CAACrS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACN;;AAED,cAAI8O,GAAG,GAAG5rC,EAAE,GAAG,eAAIivC,GAAJ,CAAf;AAAA,cACIpD,GAAG,GAAG7rC,EAAE,GAAG,eAAIivC,GAAJ,CADf;AAAA,cAEIzB,GAAG,GAAGhoC,EAAE,GAAG,eAAI4pC,GAAJ,CAFf;AAAA,cAGI3B,GAAG,GAAGjoC,EAAE,GAAG,eAAI4pC,GAAJ,CAHf,CAzBG,CA8BH;;AACA,cAAIvB,EAAE,GAAG5iK,aAAT,EAAkB;AAChB,gBAAI+iK,GAAG,GAAGhuC,EAAE,GAAG,eAAIkvC,GAAJ,CAAf;AAAA,gBACIjB,GAAG,GAAGjuC,EAAE,GAAG,eAAIkvC,GAAJ,CADf;AAAA,gBAEIhB,GAAG,GAAG1oC,EAAE,GAAG,eAAI2pC,GAAJ,CAFf;AAAA,gBAGIhB,GAAG,GAAG3oC,EAAE,GAAG,eAAI2pC,GAAJ,CAHf;AAAA,gBAIIQ,EAJJ,CADgB,CAOhB;;AACA,gBAAI/rC,EAAE,GAAGgnC,QAAL,KAAY+E,EAAE,GAAGtC,SAAS,CAACzB,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqBH,GAArB,EAA0BC,GAA1B,EAA+BT,GAA/B,EAAoCC,GAApC,CAA1B,CAAJ,EAAyE;AACvE,kBAAIl2O,EAAE,GAAGq0O,GAAG,GAAG+D,EAAE,CAAC,CAAD,CAAjB;AAAA,kBACIC,EAAE,GAAG/D,GAAG,GAAG8D,EAAE,CAAC,CAAD,CADjB;AAAA,kBAEIE,EAAE,GAAG7B,GAAG,GAAG2B,EAAE,CAAC,CAAD,CAFjB;AAAA,kBAGIG,EAAE,GAAG7B,GAAG,GAAG0B,EAAE,CAAC,CAAD,CAHjB;AAAA,kBAIII,EAAE,GAAG,IAAI,eAAI,gBAAK,CAACx4O,EAAE,GAAGs4O,EAAL,GAAUD,EAAE,GAAGE,EAAhB,KAAuB,gBAAKv4O,EAAE,GAAGA,EAAL,GAAUq4O,EAAE,GAAGA,EAApB,IAA0B,gBAAKC,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAAjD,CAAL,IAAkF,CAAtF,CAJb;AAAA,kBAKIE,EAAE,GAAG,gBAAKL,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAAV,GAAgBA,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAA/B,CALT;AAMAF,cAAAA,GAAG,GAAG,eAAI5B,EAAJ,EAAQ,CAACroC,EAAE,GAAGwqC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACAL,cAAAA,GAAG,GAAG,eAAI7B,EAAJ,EAAQ,CAAC7tC,EAAE,GAAGgwC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACD;AACF,WAjDE,CAmDH;;;AACA,cAAI,EAAET,GAAG,GAAGrkK,aAAR,CAAJ,EAAsB20F,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,EAAtB,CAEA;AAFA,eAGK,IAAI6D,GAAG,GAAGzkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACM,GAAD,EAAMC,GAAN,EAAWvC,GAAX,EAAgBC,GAAhB,EAAqB7rC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAACI,GAAD,EAAMC,GAAN,EAAWT,GAAX,EAAgBC,GAAhB,EAAqBztC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AAEA5sE,cAAAA,OAAO,CAACwrE,MAAR,CAAevyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI6D,GAAG,GAAG7B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB,iBAAM6Y,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoG,CAACxB,EAArG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAMn7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,GAA0BjsE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsBivC,GAAtB,EAA2BC,GAA3B,EAAgC,CAAC1C,EAAjC,CAA1B,CAzEF,CA2EH;AACA;;AACA,cAAI,EAAEhnC,EAAE,GAAGv6H,aAAP,KAAmB,EAAEokK,GAAG,GAAGpkK,aAAR,CAAvB,EAAyC20F,OAAO,CAAC0rE,MAAR,CAAekC,GAAf,EAAoBC,GAApB,EAAzC,CAEA;AAFA,eAGK,IAAIgC,GAAG,GAAGxkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACJ,GAAD,EAAMC,GAAN,EAAWO,GAAX,EAAgBC,GAAhB,EAAqBzoC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAAChC,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqB3oC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AAEA5sE,cAAAA,OAAO,CAAC0rE,MAAR,CAAezyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI4D,GAAG,GAAG5B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB,iBAAMqT,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoGxB,EAApG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAMl7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB4pC,GAAtB,EAA2BD,GAA3B,EAAgC3C,EAAhC;AACN;AAED5sE,IAAAA,OAAO,CAACyrE,SAAR;AAEA,QAAI5pO,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAEDktM,EAAAA,GAAG,CAACshC,QAAJ,GAAe,YAAW;AACxB,QAAIr0O,CAAC,GAAG,CAAC,CAACgxO,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAD,GAAsC,CAACm/O,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAxC,IAA8E,CAAtF;AAAA,QACImH,CAAC,GAAG,CAAC,CAACk4O,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAAD,GAAqC,CAACu/O,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAAvC,IAA0E,CAA1E,GAA8Ei9O,WAAK,CAD3F;AAEA,WAAO,CAAC,eAAI91O,CAAJ,IAAS8G,CAAV,EAAa,eAAI9G,CAAJ,IAAS8G,CAAtB,CAAP;AACD,GAJD;;AAMA+yM,EAAAA,GAAG,CAACi+B,WAAJ,GAAkB,UAASr4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0/O,WAAW,GAAG,OAAOr4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFi+B,WAA5F;AACD,GAFD;;AAIAj+B,EAAAA,GAAG,CAACm+B,WAAJ,GAAkB,UAASv4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4/O,WAAW,GAAG,OAAOv4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFm+B,WAA5F;AACD,GAFD;;AAIAn+B,EAAAA,GAAG,CAACogC,YAAJ,GAAmB,UAASx6N,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6hP,YAAY,GAAG,OAAOx6N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7C,EAA2Do6L,GAA/E,IAAsFogC,YAA7F;AACD,GAFD;;AAIApgC,EAAAA,GAAG,CAACqgC,SAAJ,GAAgB,UAASz6N,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8hP,SAAS,GAAGz6N,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7D,EAA2Eo6L,GAA/F,IAAsGqgC,SAA7G;AACD,GAFD;;AAIArgC,EAAAA,GAAG,CAACq+B,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDo6L,GAA7E,IAAoFq+B,UAA3F;AACD,GAFD;;AAIAr+B,EAAAA,GAAG,CAACu+B,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFu+B,QAAzF;AACD,GAFD;;AAIAv+B,EAAAA,GAAG,CAACy+B,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFy+B,QAAzF;AACD,GAFD;;AAIAz+B,EAAAA,GAAG,CAAC/uC,OAAJ,GAAc,UAASrrJ,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkCo6L,GAAtD,IAA6D/uC,OAApE;AACD,GAFD;;AAIA,SAAO+uC,GAAP;AACD;;;;;;;;;AGpQD;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAI56M,CAAC,GAAG48O,QAAR;AAAA,MACIr+N,CAAC,GAAGs+N,QADR;AAAA,MAEIh7B,OAAO,GAAG,uBAAS,IAAT,CAFd;AAAA,MAGIh2C,OAAO,GAAG,IAHd;AAAA,MAII6wE,KAAK,GAAGC,eAJZ;AAAA,MAKIp5N,MAAM,GAAG,IALb;;AAOA,WAAS6K,IAAT,CAAcvlB,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAMA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0Bv5N,MAAM,CAACg5N,SAAP,GAA1B,KACKh5N,MAAM,CAACk5N,OAAP;AACN;;AACD,UAAIK,QAAJ,EAAcv5N,MAAM,CAAC63L,KAAP,CAAa,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAf,EAA6B,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAA/B;AACf;;AAED,QAAI6E,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED0gB,EAAAA,IAAI,CAACpuB,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4EpuB,CAAnF;AACD,GAFD;;AAIAouB,EAAAA,IAAI,CAAC7P,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4E7P,CAAnF;AACD,GAFD;;AAIA6P,EAAAA,IAAI,CAACyzL,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuD4N,IAA3E,IAAmFyzL,OAA1F;AACD,GAFD;;AAIAzzL,EAAAA,IAAI,CAACsuN,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyDz9I,IAA7E,IAAqFsuN,KAA5F;AACD,GAFD;;AAIAtuN,EAAAA,IAAI,CAACy9I,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmE4N,IAAvF,IAA+Fy9I,OAAtG;AACD,GAFD;;AAIA,SAAOz9I,IAAP;AACD;;;;;;;;;ACtDD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAI8rL,EAAE,GAAG0iC,QAAT;AAAA,MACItwI,EAAE,GAAG,IADT;AAAA,MAEI6tG,EAAE,GAAG,uBAAS,CAAT,CAFT;AAAA,MAGI9tG,EAAE,GAAGwwI,QAHT;AAAA,MAIIh7B,OAAO,GAAG,uBAAS,IAAT,CAJd;AAAA,MAKIh2C,OAAO,GAAG,IALd;AAAA,MAMI6wE,KAAK,GAAGC,eANZ;AAAA,MAOIp5N,MAAM,GAAG,IAPb;;AASA,WAASo5L,IAAT,CAAc9zM,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIiK,CADJ;AAAA,QAEIqT,CAFJ;AAAA,QAGIpP,CAAC,GAAGc,IAAI,CAAC1P,MAHb;AAAA,QAIIuN,CAJJ;AAAA,QAKIo2O,QAAQ,GAAG,KALf;AAAA,QAMIpvO,MANJ;AAAA,QAOIqvO,GAAG,GAAG,IAAIpjP,KAAJ,CAAUoO,CAAV,CAPV;AAAA,QAQIi1O,GAAG,GAAG,IAAIrjP,KAAJ,CAAUoO,CAAV,CARV;AAUA,QAAI8jK,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0B;AACxBh5O,UAAAA,CAAC,GAAGjK,CAAJ;AACA0pB,UAAAA,MAAM,CAAC64N,SAAP;AACA74N,UAAAA,MAAM,CAACg5N,SAAP;AACD,SAJD,MAIO;AACLh5N,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAACg5N,SAAP;;AACA,eAAKplO,CAAC,GAAGtd,CAAC,GAAG,CAAb,EAAgBsd,CAAC,IAAIrT,CAArB,EAAwB,EAAEqT,CAA1B,EAA6B;AAC3BoM,YAAAA,MAAM,CAAC63L,KAAP,CAAa2hC,GAAG,CAAC5lO,CAAD,CAAhB,EAAqB6lO,GAAG,CAAC7lO,CAAD,CAAxB;AACD;;AACDoM,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAAC+4N,OAAP;AACD;AACF;;AACD,UAAIQ,QAAJ,EAAc;AACZC,QAAAA,GAAG,CAACljP,CAAD,CAAH,GAAS,CAACqgN,EAAE,CAACxzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAZ,EAA0Bm0O,GAAG,CAACnjP,CAAD,CAAH,GAAS,CAACsgN,EAAE,CAACzzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC;AACA0a,QAAAA,MAAM,CAAC63L,KAAP,CAAa9uG,EAAE,GAAG,CAACA,EAAE,CAAC5lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBk0O,GAAG,CAACljP,CAAD,CAAvC,EAA4CwyG,EAAE,GAAG,CAACA,EAAE,CAAC3lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBm0O,GAAG,CAACnjP,CAAD,CAAtE;AACD;AACF;;AAED,QAAI6T,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED,WAASuvO,QAAT,GAAoB;AAClB,WAAO,qBAAOp7B,OAAP,CAAeA,OAAf,EAAwB66B,KAAxB,CAA8BA,KAA9B,EAAqC7wE,OAArC,CAA6CA,OAA7C,CAAP;AACD;;AAED8wC,EAAAA,IAAI,CAAC38M,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD8rF,EAAE,GAAG,IAAtD,EAA4DqwG,IAAhF,IAAwFzC,EAA/F;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACzC,EAAL,GAAU,UAAS15L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6EzC,EAApF;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACrwG,EAAL,GAAU,UAAS9rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmzG,EAAE,GAAG9rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGrwG,EAAvG;AACD,GAFD;;AAIAqwG,EAAAA,IAAI,CAACp+L,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD6rF,EAAE,GAAG,IAAtD,EAA4DswG,IAAhF,IAAwFxC,EAA/F;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACxC,EAAL,GAAU,UAAS35L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6ExC,EAApF;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACtwG,EAAL,GAAU,UAAS7rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkzG,EAAE,GAAG7rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGtwG,EAAvG;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAACugC,MAAL,GACAvgC,IAAI,CAACwgC,MAAL,GAAc,YAAW;AACvB,WAAOF,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAHD;;AAKAwC,EAAAA,IAAI,CAACygC,MAAL,GAAc,YAAW;AACvB,WAAOH,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB8tF,EAAnB,CAAP;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAAC0gC,MAAL,GAAc,YAAW;AACvB,WAAOJ,QAAQ,GAAGj9O,CAAX,CAAassG,EAAb,EAAiB/tF,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACkF,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuDm8L,IAA3E,IAAmFkF,OAA1F;AACD,GAFD;;AAIAlF,EAAAA,IAAI,CAAC+/B,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyD8wC,IAA7E,IAAqF+/B,KAA5F;AACD,GAFD;;AAIA//B,EAAAA,IAAI,CAAC9wC,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmEm8L,IAAvF,IAA+F9wC,OAAtG;AACD,GAFD;;AAIA,SAAO8wC,IAAP;AACD;;;;;;;;;AG5GD;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAI9/M,KAAK,GAAGi9H,iBAAZ;AAAA,MACIwjH,UAAU,GAAGC,mBADjB;AAAA,MAEI15O,IAAI,GAAG,IAFX;AAAA,MAGIo1O,UAAU,GAAG,uBAAS,CAAT,CAHjB;AAAA,MAIIE,QAAQ,GAAG,uBAASrC,SAAT,CAJf;AAAA,MAKIuC,QAAQ,GAAG,uBAAS,CAAT,CALf;;AAOA,WAASmE,GAAT,CAAa30O,IAAb,EAAmB;AACjB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEI2K,CAFJ;AAAA,QAGIqT,CAHJ;AAAA,QAII/W,GAAG,GAAG,CAJV;AAAA,QAKIT,KAAK,GAAG,IAAIhG,KAAJ,CAAUoO,CAAV,CALZ;AAAA,QAMI4yM,IAAI,GAAG,IAAIhhN,KAAJ,CAAUoO,CAAV,CANX;AAAA,QAOI+gO,EAAE,GAAG,CAACmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAPV;AAAA,QAQIi2M,EAAE,GAAGjwM,IAAI,CAACG,GAAL,CAAS+2O,SAAT,EAAcl3O,IAAI,CAACK,GAAL,CAAS,CAAC62O,SAAV,EAAeqC,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkCkvO,EAAjD,CAAd,CART;AAAA,QASIC,EATJ;AAAA,QAUI5qM,CAAC,GAAGv+B,IAAI,CAACG,GAAL,CAASH,IAAI,CAACiT,GAAL,CAASg9L,EAAT,IAAe9nM,CAAxB,EAA2BsxO,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAA3B,CAVR;AAAA,QAWI6jP,EAAE,GAAGt/M,CAAC,IAAI0xK,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAlB,CAXV;AAAA,QAYI9jM,CAZJ;;AAcA,SAAKlS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,UAAI,CAACkS,CAAC,GAAG4uM,IAAI,CAACh7M,KAAK,CAAC9F,CAAD,CAAL,GAAWA,CAAZ,CAAJ,GAAqB,CAACgD,KAAK,CAACgM,IAAI,CAAChP,CAAD,CAAL,EAAUA,CAAV,EAAagP,IAAb,CAAhC,IAAsD,CAA1D,EAA6D;AAC3DzI,QAAAA,GAAG,IAAI2L,CAAP;AACD;AACF,KAnBgB,CAqBjB;;;AACA,QAAIuxO,UAAU,IAAI,IAAlB,EAAwB39O,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOw5O,UAAU,CAAC3iC,IAAI,CAAC9gN,CAAD,CAAL,EAAU8gN,IAAI,CAAC72M,CAAD,CAAd,CAAjB;AAAsC,KAAlE,EAAxB,KACK,IAAID,IAAI,IAAI,IAAZ,EAAkBlE,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOD,IAAI,CAACgF,IAAI,CAAChP,CAAD,CAAL,EAAUgP,IAAI,CAAC/E,CAAD,CAAd,CAAX;AAAgC,KAA5D,EAvBN,CAyBjB;;AACA,SAAKjK,CAAC,GAAG,CAAJ,EAAOsd,CAAC,GAAG/W,GAAG,GAAG,CAACyvM,EAAE,GAAG9nM,CAAC,GAAG01O,EAAV,IAAgBr9O,GAAnB,GAAyB,CAA5C,EAA+CvG,CAAC,GAAGkO,CAAnD,EAAsD,EAAElO,CAAF,EAAKivO,EAAE,GAAGC,EAAhE,EAAoE;AAClEjlO,MAAAA,CAAC,GAAGnE,KAAK,CAAC9F,CAAD,CAAT,EAAckS,CAAC,GAAG4uM,IAAI,CAAC72M,CAAD,CAAtB,EAA2BilO,EAAE,GAAGD,EAAE,IAAI/8N,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAGoL,CAAZ,GAAgB,CAApB,CAAF,GAA2BsmO,EAA3D,EAA+D9iC,IAAI,CAAC72M,CAAD,CAAJ,GAAU;AACvE+E,QAAAA,IAAI,EAAEA,IAAI,CAAC/E,CAAD,CAD6D;AAEvEnE,QAAAA,KAAK,EAAE9F,CAFgE;AAGvEgD,QAAAA,KAAK,EAAEkP,CAHgE;AAIvEktO,QAAAA,UAAU,EAAEnQ,EAJ2D;AAKvEqQ,QAAAA,QAAQ,EAAEpQ,EAL6D;AAMvEsQ,QAAAA,QAAQ,EAAEl7M;AAN6D,OAAzE;AAQD;;AAED,WAAOw8K,IAAP;AACD;;AAED6iC,EAAAA,GAAG,CAAC3gP,KAAJ,GAAY,UAAS2jB,CAAT,EAAY;AACtB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDg9N,GAAxE,IAA+E3gP,KAAtF;AACD,GAFD;;AAIA2gP,EAAAA,GAAG,CAACF,UAAJ,GAAiB,UAAS98N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmkP,UAAU,GAAG98N,CAAb,EAAgB3c,IAAI,GAAG,IAAvB,EAA6B25O,GAAjD,IAAwDF,UAA/D;AACD,GAFD;;AAIAE,EAAAA,GAAG,CAAC35O,IAAJ,GAAW,UAAS2c,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0K,IAAI,GAAG2c,CAAP,EAAU88N,UAAU,GAAG,IAAvB,EAA6BE,GAAjD,IAAwD35O,IAA/D;AACD,GAFD;;AAIA25O,EAAAA,GAAG,CAACvE,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDg9N,GAA7E,IAAoFvE,UAA3F;AACD,GAFD;;AAIAuE,EAAAA,GAAG,CAACrE,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFrE,QAAzF;AACD,GAFD;;AAIAqE,EAAAA,GAAG,CAACnE,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFnE,QAAzF;AACD,GAFD;;AAIA,SAAOmE,GAAP;AACD;;;;;;;;;;AC9ED;;;;AAEO,IAAIE,iBAAiB,GAAGC,WAAW,CAAChB,eAAD,CAAnC;;;AAEP,SAASiB,MAAT,CAAgBlB,KAAhB,EAAuB;AACrB,OAAKmB,MAAL,GAAcnB,KAAd;AACD;;AAEDkB,MAAM,CAAC3jP,SAAP,GAAmB;AACjBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKyB,MAAL,CAAYzB,SAAZ;AACD,GAHgB;AAIjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKuB,MAAL,CAAYvB,OAAZ;AACD,GANgB;AAOjBC,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKsB,MAAL,CAAYtB,SAAZ;AACD,GATgB;AAUjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKoB,MAAL,CAAYpB,OAAZ;AACD,GAZgB;AAajBrhC,EAAAA,KAAK,EAAE,UAASr6M,CAAT,EAAY8G,CAAZ,EAAe;AACpB,SAAKg2O,MAAL,CAAYziC,KAAZ,CAAkBvzM,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAtB,EAAmC8G,CAAC,GAAG,CAACjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAxC;AACD;AAfgB,CAAnB;;AAkBe,SAAS48O,WAAT,CAAqBjB,KAArB,EAA4B;AAEzC,WAASoB,MAAT,CAAgBjyE,OAAhB,EAAyB;AACvB,WAAO,IAAI+xE,MAAJ,CAAWlB,KAAK,CAAC7wE,OAAD,CAAhB,CAAP;AACD;;AAEDiyE,EAAAA,MAAM,CAACD,MAAP,GAAgBnB,KAAhB;AAEA,SAAOoB,MAAP;AACD;;;;;;;;;;ACnCD;;AACA;;;;;;;;AAEO,SAASC,UAAT,CAAoBpyO,CAApB,EAAuB;AAC5B,MAAIrF,CAAC,GAAGqF,CAAC,CAAC+wO,KAAV;AAEA/wO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;;AAEA5S,EAAAA,CAAC,CAAC+wO,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAOlyO,CAAP;AACD;;AAEc,oBAAW;AACxB,SAAOoyO,UAAU,CAAC,qBAAOrB,KAAP,CAAagB,yBAAb,CAAD,CAAjB;AACD;;;;;;;;;AClBD;;AACA;;AACA;;;;;;;;AAEe,oBAAW;AACxB,MAAI38O,CAAC,GAAG,qBAAO27O,KAAP,CAAagB,yBAAb,CAAR;AAAA,MACIp3O,CAAC,GAAGvF,CAAC,CAAC27O,KADV;AAAA,MAEIxiC,EAAE,GAAGn5M,CAAC,CAACm8O,MAFX;AAAA,MAGI5wI,EAAE,GAAGvrG,CAAC,CAACs8O,MAHX;AAAA,MAIIljC,EAAE,GAAGp5M,CAAC,CAACo8O,MAJX;AAAA,MAKI9wI,EAAE,GAAGtrG,CAAC,CAACq8O,MALX;AAOAr8O,EAAAA,CAAC,CAACi9O,KAAF,GAAUj9O,CAAC,CAACf,CAAZ,EAAe,OAAOe,CAAC,CAACf,CAAxB;AACAe,EAAAA,CAAC,CAACk4O,UAAF,GAAel4O,CAAC,CAACm5M,EAAjB,EAAqB,OAAOn5M,CAAC,CAACm5M,EAA9B;AACAn5M,EAAAA,CAAC,CAACo4O,QAAF,GAAap4O,CAAC,CAACurG,EAAf,EAAmB,OAAOvrG,CAAC,CAACurG,EAA5B;AACAvrG,EAAAA,CAAC,CAACiV,MAAF,GAAWjV,CAAC,CAACwd,CAAb,EAAgB,OAAOxd,CAAC,CAACwd,CAAzB;AACAxd,EAAAA,CAAC,CAAC83O,WAAF,GAAgB93O,CAAC,CAACo5M,EAAlB,EAAsB,OAAOp5M,CAAC,CAACo5M,EAA/B;AACAp5M,EAAAA,CAAC,CAACg4O,WAAF,GAAgBh4O,CAAC,CAACsrG,EAAlB,EAAsB,OAAOtrG,CAAC,CAACsrG,EAA/B;AACAtrG,EAAAA,CAAC,CAACk9O,cAAF,GAAmB,YAAW;AAAE,WAAO,4BAAW/jC,EAAE,EAAb,CAAP;AAA0B,GAA1D,EAA4D,OAAOn5M,CAAC,CAACm8O,MAArE;AACAn8O,EAAAA,CAAC,CAACm9O,YAAF,GAAiB,YAAW;AAAE,WAAO,4BAAW5xI,EAAE,EAAb,CAAP;AAA0B,GAAxD,EAA0D,OAAOvrG,CAAC,CAACs8O,MAAnE;AACAt8O,EAAAA,CAAC,CAACo9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAWhkC,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOp5M,CAAC,CAACo8O,MAAtE;AACAp8O,EAAAA,CAAC,CAACq9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAW/xI,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOtrG,CAAC,CAACq8O,MAAtE;;AAEAr8O,EAAAA,CAAC,CAAC27O,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAO98O,CAAP;AACD;;;;;;;;AE5BM,IAAImC,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA5B;;;;;;;;;;;;ACAP;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASm7O,UAAT,CAAoB33O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAACipD,MAAT;AACD;;AAED,SAAS2uL,UAAT,CAAoB53O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC0pC,MAAT;AACD;;AAED,SAASmuM,IAAT,CAAc7B,KAAd,EAAqB;AACnB,MAAI/sL,MAAM,GAAG0uL,UAAb;AAAA,MACIjuM,MAAM,GAAGkuM,UADb;AAAA,MAEIt+O,CAAC,GAAG48O,QAFR;AAAA,MAGIr+N,CAAC,GAAGs+N,QAHR;AAAA,MAIIhxE,OAAO,GAAG,IAJd;;AAMA,WAAS0yE,IAAT,GAAgB;AACd,QAAI7wO,MAAJ;AAAA,QAAYpT,IAAI,GAAG4I,aAAMvK,IAAN,CAAWiB,SAAX,CAAnB;AAAA,QAA0CyD,CAAC,GAAGsyD,MAAM,CAACz1D,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA9C;AAAA,QAAwEiD,CAAC,GAAG6yC,MAAM,CAACl2C,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA5E;;AACA,QAAI,CAACuxK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdgvO,IAAAA,KAAK,CAAC7wE,OAAD,EAAU,CAAC7rK,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAU+C,CAAV,EAAa/C,IAA5B,EAAX,EAA+C,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAAhD,EAAqE,CAAC0F,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAUiD,CAAV,EAAajD,IAA5B,EAAtE,EAA0G,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAA3G,CAAL;AACA,QAAIoT,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED6wO,EAAAA,IAAI,CAAC5uL,MAAL,GAAc,UAASnvC,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBw2D,MAAM,GAAGnvC,CAAT,EAAY+9N,IAAhC,IAAwC5uL,MAA/C;AACD,GAFD;;AAIA4uL,EAAAA,IAAI,CAACnuM,MAAL,GAAc,UAAS5vB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBi3C,MAAM,GAAG5vB,CAAT,EAAY+9N,IAAhC,IAAwCnuM,MAA/C;AACD,GAFD;;AAIAmuM,EAAAA,IAAI,CAACv+O,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4Ev+O,CAAnF;AACD,GAFD;;AAIAu+O,EAAAA,IAAI,CAAChgO,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4EhgO,CAAnF;AACD,GAFD;;AAIAggO,EAAAA,IAAI,CAAC1yE,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkC+9N,IAAtD,IAA8D1yE,OAArE;AACD,GAFD;;AAIA,SAAO0yE,IAAP;AACD;;AAED,SAASC,eAAT,CAAyB3yE,OAAzB,EAAkCquC,EAAlC,EAAsCC,EAAtC,EAA0C7tG,EAA1C,EAA8CD,EAA9C,EAAkD;AAChDw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAE,GAAG,CAACA,EAAE,GAAG5tG,EAAN,IAAY,CAAvC,EAA0C6tG,EAA1C,EAA8CD,EAA9C,EAAkD7tG,EAAlD,EAAsDC,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASoyI,aAAT,CAAuB5yE,OAAvB,EAAgCquC,EAAhC,EAAoCC,EAApC,EAAwC7tG,EAAxC,EAA4CD,EAA5C,EAAgD;AAC9Cw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAtB,EAA0BC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAA3C,EAA8CC,EAA9C,EAAkD6tG,EAAlD,EAAsD7tG,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASsxI,WAAT,CAAqB9xE,OAArB,EAA8BquC,EAA9B,EAAkCC,EAAlC,EAAsC7tG,EAAtC,EAA0CD,EAA1C,EAA8C;AAC5C,MAAI0vG,EAAE,GAAG,0BAAY7B,EAAZ,EAAgBC,EAAhB,CAAT;AAAA,MACIvrF,EAAE,GAAG,0BAAYsrF,EAAZ,EAAgBC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAAjC,CADT;AAAA,MAEIqyI,EAAE,GAAG,0BAAYpyI,EAAZ,EAAgB6tG,EAAhB,CAFT;AAAA,MAGIwkC,EAAE,GAAG,0BAAYryI,EAAZ,EAAgBD,EAAhB,CAHT;AAIAw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAet7B,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB;AACAlwC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsB7oH,EAAE,CAAC,CAAD,CAAxB,EAA6BA,EAAE,CAAC,CAAD,CAA/B,EAAoC8vH,EAAE,CAAC,CAAD,CAAtC,EAA2CA,EAAE,CAAC,CAAD,CAA7C,EAAkDC,EAAE,CAAC,CAAD,CAApD,EAAyDA,EAAE,CAAC,CAAD,CAA3D;AACD;;AAEM,SAASC,cAAT,GAA0B;AAC/B,SAAOL,IAAI,CAACC,eAAD,CAAX;AACD;;AAEM,SAASK,YAAT,GAAwB;AAC7B,SAAON,IAAI,CAACE,aAAD,CAAX;AACD;;AAEM,SAASK,UAAT,GAAsB;AAC3B,MAAInzO,CAAC,GAAG4yO,IAAI,CAACZ,WAAD,CAAZ;AACAhyO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;AACA,SAAO5S,CAAP;AACD;;;;;;;;;ACnFD;;eAEe;AACbozO,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAGu1O,QAAjB,CAAR;AACAhrE,IAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,IAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwBivO,SAAxB;AACD;AALY;;;;;;;;;;AGFf;;AAEA,IAAIoI,EAAE,GAAG,sBAAT;AAAA,IACIC,EAAE,GAAGv/O,IAAI,CAAC+T,GAAL,CAASkjO,WAAK,EAAd,IAAoBj3O,IAAI,CAAC+T,GAAL,CAAS,IAAIkjO,QAAJ,GAAS,EAAlB,CAD7B;AAAA,IAEIz8B,EAAE,GAAGx6M,IAAI,CAAC+T,GAAL,CAASmjO,YAAM,EAAf,IAAqBqI,EAF9B;AAAA,IAGI9kC,EAAE,GAAG,CAACz6M,IAAI,CAACgU,GAAL,CAASkjO,YAAM,EAAf,CAAD,GAAsBqI,EAH/B;eAKe;AACbJ,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAG49O,EAAjB,CAAR;AAAA,QACIl/O,CAAC,GAAGo6M,EAAE,GAAGvyM,CADb;AAAA,QAEI0W,CAAC,GAAG87L,EAAE,GAAGxyM,CAFb;AAGAgkK,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACxvO,CAAnB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAf,EAAkBue,CAAlB;;AACA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;AAC1B,UAAIkH,CAAC,GAAG+1O,YAAMj9O,CAAN,GAAU,CAAlB;AAAA,UACIyM,CAAC,GAAG1G,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CADR;AAAA,UAEI1D,CAAC,GAAGuC,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAFR;AAGA8qK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAC,GAAGwK,CAAnB,EAAsB,CAACvB,CAAD,GAAKuB,CAA3B;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGtG,CAAJ,GAAQ3C,CAAC,GAAGkhB,CAA3B,EAA8BlhB,CAAC,GAAG2C,CAAJ,GAAQsG,CAAC,GAAGiY,CAA1C;AACD;;AACDstJ,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAfY;;;;;;;;;;;AIPf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,IAAI+H,OAAO,GAAG,CACnBC,eADmB,EAEnBzgC,cAFmB,EAGnB0gC,gBAHmB,EAInB5sO,eAJmB,EAKnB6sO,aALmB,EAMnBC,iBANmB,EAOnBC,YAPmB,CAAd;;;AAUQ,oBAAW;AACxB,MAAI5lO,IAAI,GAAG,uBAASwlO,eAAT,CAAX;AAAA,MACIh+O,IAAI,GAAG,uBAAS,EAAT,CADX;AAAA,MAEIuqK,OAAO,GAAG,IAFd;;AAIA,WAASu3C,MAAT,GAAkB;AAChB,QAAI11M,MAAJ;AACA,QAAI,CAACm+J,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdoM,IAAAA,IAAI,CAAC5f,KAAL,CAAW,IAAX,EAAiBN,SAAjB,EAA4BmlP,IAA5B,CAAiClzE,OAAjC,EAA0C,CAACvqK,IAAI,CAACpH,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAA3C;AACA,QAAI8T,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED01M,EAAAA,MAAM,CAACtpM,IAAP,GAAc,UAAS0G,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2gB,IAAI,GAAG,OAAO0G,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAASA,CAAT,CAArC,EAAkD4iM,MAAtE,IAAgFtpM,IAAvF;AACD,GAFD;;AAIAspM,EAAAA,MAAM,CAAC9hN,IAAP,GAAc,UAASkf,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmI,IAAI,GAAG,OAAOkf,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAArC,EAAmD4iM,MAAvE,IAAiF9hN,IAAxF;AACD,GAFD;;AAIA8hN,EAAAA,MAAM,CAACv3C,OAAP,GAAiB,UAASrrJ,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B,EAAgC4iM,MAApD,IAA8Dv3C,OAArE;AACD,GAFD;;AAIA,SAAOu3C,MAAP;AACD;;;;;;;;;AG7CD;;AACA;;;;AAEA,SAASw8B,WAAT,CAAqB/zE,OAArB,EAA8B;AAC5B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED+zE,WAAW,CAAC3lP,SAAZ,GAAwB;AACtBmiP,EAAAA,SAAS,EAAE3hP,aADW;AAEtB6hP,EAAAA,OAAO,EAAE7hP,aAFa;AAGtB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAC5C,KAAK7I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW9zK,GADvD;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPqB;AAQtBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKwI,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKE,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAhF;;AACA,eAAK9D,QAAL,CAAc5E,MAAd,CAAqB,CAAC,KAAKuI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAhF;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK5kC,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA;AACD;AAjBH;AAmBD,GA5BqB;AA6BtB9kC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKqD,GAAL,GAAW7/O,CAAX,EAAc,KAAKggP,GAAL,GAAWzhO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuD,GAAL,GAAW//O,CAAX,EAAc,KAAKkgP,GAAL,GAAW3hO,CAAzB;;AAA4B,aAAK49N,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKJ,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAArD,EAAwD,CAAC,KAAKk3O,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAxF;;AAA4F;;AACjJ;AAAS,0BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AAvCqB,CAAxB;;AA0Ce,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAI+zE,WAAJ,CAAgB/zE,OAAhB,CAAP;AACD;;;;;;;;;ACnDD;;AAEA,SAASs0E,SAAT,CAAmBt0E,OAAnB,EAA4B;AAC1B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDs0E,SAAS,CAAClmP,SAAV,GAAsB;AACpBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHmB;AAIpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANmB;AAOpBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKD,GAAL,GAAW,KAAKE,GAAL,GAAWhrK,GADtB;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXmB;AAYpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfmB;AAgBpBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,YAAItiC,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAAzC;AAAA,YAA4Cm6M,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAjF;AAAoF,aAAK89N,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBr9B,EAArB,EAAyBC,EAAzB,CAAb,GAA4C,KAAKgiC,QAAL,CAAc9E,MAAd,CAAqBn9B,EAArB,EAAyBC,EAAzB,CAA5C;AAA0E;;AACvL,WAAK,CAAL;AAAQ,aAAKqiC,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,0BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AA3BmB,CAAtB;;AA8Be,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIs0E,SAAJ,CAAct0E,OAAd,CAAP;AACD;;;;;;;;;ACtCD;;AAEA,SAASu0E,MAAT,CAAgBv0E,OAAhB,EAAyB31J,IAAzB,EAA+B;AAC7B,OAAKmqO,MAAL,GAAc,IAAIV,YAAJ,CAAU9zE,OAAV,CAAd;AACA,OAAKy0E,KAAL,GAAapqO,IAAb;AACD;;AAEDkqO,MAAM,CAACnmP,SAAP,GAAmB;AACjBsiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKgE,EAAL,GAAU,EAAV;AACA,SAAKC,EAAL,GAAU,EAAV;;AACA,SAAKH,MAAL,CAAY9D,SAAZ;AACD,GALgB;AAMjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIz8O,CAAC,GAAG,KAAKugP,EAAb;AAAA,QACIhiO,CAAC,GAAG,KAAKiiO,EADb;AAAA,QAEI18O,CAAC,GAAG9D,CAAC,CAAC7G,MAAF,GAAW,CAFnB;;AAIA,QAAI2K,CAAC,GAAG,CAAR,EAAW;AACT,UAAIo2M,EAAE,GAAGl6M,CAAC,CAAC,CAAD,CAAV;AAAA,UACIm6M,EAAE,GAAG57L,CAAC,CAAC,CAAD,CADV;AAAA,UAEIoH,EAAE,GAAG3lB,CAAC,CAAC8D,CAAD,CAAD,GAAOo2M,EAFhB;AAAA,UAGIv7L,EAAE,GAAGJ,CAAC,CAACza,CAAD,CAAD,GAAOq2M,EAHhB;AAAA,UAIItgN,CAAC,GAAG,CAAC,CAJT;AAAA,UAKI0D,CALJ;;AAOA,aAAO,EAAE1D,CAAF,IAAOiK,CAAd,EAAiB;AACfvG,QAAAA,CAAC,GAAG1D,CAAC,GAAGiK,CAAR;;AACA,aAAKu8O,MAAL,CAAYjlC,KAAZ,CACE,KAAKklC,KAAL,GAAatgP,CAAC,CAACnG,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBpmC,EAAE,GAAG38M,CAAC,GAAGooB,EAA7B,CADtB,EAEE,KAAK26N,KAAL,GAAa/hO,CAAC,CAAC1kB,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBnmC,EAAE,GAAG58M,CAAC,GAAGohB,EAA7B,CAFtB;AAID;AACF;;AAED,SAAK4hO,EAAL,GAAU,KAAKC,EAAL,GAAU,IAApB;;AACA,SAAKH,MAAL,CAAY5D,OAAZ;AACD,GA9BgB;AA+BjBrhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,SAAKgiO,EAAL,CAAQzmP,IAAR,CAAa,CAACkG,CAAd;;AACA,SAAKwgP,EAAL,CAAQ1mP,IAAR,CAAa,CAACykB,CAAd;AACD;AAlCgB,CAAnB;;eAqCgB,SAASkiO,MAAT,CAAgBvqO,IAAhB,EAAsB;AAEpC,WAASwqO,MAAT,CAAgB70E,OAAhB,EAAyB;AACvB,WAAO31J,IAAI,KAAK,CAAT,GAAa,IAAIypO,YAAJ,CAAU9zE,OAAV,CAAb,GAAkC,IAAIu0E,MAAJ,CAAWv0E,OAAX,EAAoB31J,IAApB,CAAzC;AACD;;AAEDwqO,EAAAA,MAAM,CAACxqO,IAAP,GAAc,UAASA,IAAT,EAAe;AAC3B,WAAOuqO,MAAM,CAAC,CAACvqO,IAAF,CAAb;AACD,GAFD;;AAIA,SAAOwqO,MAAP;AACD,CAXc,CAWZ,IAXY;;;;;;;;;;;;AE5Cf;;AACA;;;;AAEO,SAASI,cAAT,CAAwBj1E,OAAxB,EAAiC+0E,OAAjC,EAA0C;AAC/C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDE,cAAc,CAAC7mP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE3hP,aADc;AAEzB6hP,EAAAA,OAAO,EAAE7hP,aAFgB;AAGzB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPwB;AAQzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA3BwB;AA4BzB5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,6BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAtCwB,CAA3B;;eAyCgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIi1E,cAAJ,CAAmBj1E,OAAnB,EAA4B+0E,OAA5B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACjDf;;AAEO,SAASI,YAAT,CAAsBp1E,OAAtB,EAA+B+0E,OAA/B,EAAwC;AAC7C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDK,YAAY,CAAChnP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHsB;AAIvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANsB;AAOvBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXsB;AAYvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfsB;AAgBvBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,6BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA3BsB,CAAzB;;eA8BgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIo1E,YAAJ,CAAiBp1E,OAAjB,EAA0B+0E,OAA1B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACrCf;;AACA;;AAEO,SAASzlC,KAAT,CAAe/nB,IAAf,EAAqBrzL,CAArB,EAAwBue,CAAxB,EAA2B;AAChC,MAAI+tF,EAAE,GAAG+mF,IAAI,CAAC8jD,GAAd;AAAA,MACI9qI,EAAE,GAAGgnF,IAAI,CAAC+jD,GADd;AAAA,MAEIz+J,EAAE,GAAG06G,IAAI,CAACwsD,GAFd;AAAA,MAGItzI,EAAE,GAAG8mF,IAAI,CAAC2sD,GAHd;;AAKA,MAAI3sD,IAAI,CAAC6tD,MAAL,GAAchqK,aAAlB,EAA2B;AACzB,QAAIn2E,CAAC,GAAG,IAAIsyL,IAAI,CAAC8tD,OAAT,GAAmB,IAAI9tD,IAAI,CAAC6tD,MAAT,GAAkB7tD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACIt5O,CAAC,GAAG,IAAIsrL,IAAI,CAAC6tD,MAAT,IAAmB7tD,IAAI,CAAC6tD,MAAL,GAAc7tD,IAAI,CAAC+tD,MAAtC,CADR;AAEA90I,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGvrG,CAAL,GAASsyL,IAAI,CAAC4jD,GAAL,GAAW5jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAACwsD,GAAL,GAAWxsD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACAskG,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGtrG,CAAL,GAASsyL,IAAI,CAAC6jD,GAAL,GAAW7jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAAC2sD,GAAL,GAAW3sD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACD;;AAED,MAAIsrL,IAAI,CAACiuD,MAAL,GAAcpqK,aAAlB,EAA2B;AACzB,QAAItvE,CAAC,GAAG,IAAIyrL,IAAI,CAACkuD,OAAT,GAAmB,IAAIluD,IAAI,CAACiuD,MAAT,GAAkBjuD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACI/vJ,CAAC,GAAG,IAAI+hG,IAAI,CAACiuD,MAAT,IAAmBjuD,IAAI,CAACiuD,MAAL,GAAcjuD,IAAI,CAAC+tD,MAAtC,CADR;AAEAzoK,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG/wE,CAAL,GAASyrL,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAACkuD,OAAzB,GAAmCvhP,CAAC,GAAGqzL,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACAib,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG3kG,CAAL,GAASyrL,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAACkuD,OAAzB,GAAmChjO,CAAC,GAAG80K,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACD;;AAED+hG,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CAA4BnrI,EAA5B,EAAgCD,EAAhC,EAAoC1zB,EAApC,EAAwC4zB,EAAxC,EAA4C8mF,IAAI,CAACwsD,GAAjD,EAAsDxsD,IAAI,CAAC2sD,GAA3D;AACD;;AAED,SAASwB,UAAT,CAAoB31E,OAApB,EAA6B14J,KAA7B,EAAoC;AAClC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAEDquO,UAAU,CAACvnP,SAAX,GAAuB;AACrBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHoB;AAIrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANoB;AAOrBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAboB;AAcrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC;;AAA0C;;AAClD,WAAK,CAAL;AAAQ,aAAK5kC,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AAAgC;AAF1C;;AAIA,QAAI,KAAK3D,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GArBoB;AAsBrBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAASphC,QAAAA,KAAK,CAAC,IAAD,EAAOp7M,CAAP,EAAUue,CAAV,CAAL;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA1CoB,CAAvB;;eA6CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAIquO,UAAJ,CAAe31E,OAAf,EAAwB14J,KAAxB,CAAH,GAAoC,IAAIwtO,kBAAJ,CAAa90E,OAAb,EAAsB,CAAtB,CAAhD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC5Ef;;AACA;;AACA;;;;AAEA,SAASC,gBAAT,CAA0Bh2E,OAA1B,EAAmC14J,KAAnC,EAA0C;AACxC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED0uO,gBAAgB,CAAC5nP,SAAjB,GAA6B;AAC3BmiP,EAAAA,SAAS,EAAE3hP,aADgB;AAE3B6hP,EAAAA,OAAO,EAAE7hP,aAFkB;AAG3B8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAT0B;AAU3BC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA7B0B;AA8B3B5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,+BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAlD0B,CAA7B;;eAqDgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI0uO,gBAAJ,CAAqBh2E,OAArB,EAA8B14J,KAA9B,CAAH,GAA0C,IAAI2tO,8BAAJ,CAAmBj1E,OAAnB,EAA4B,CAA5B,CAAtD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC9Df;;AACA;;AAEA,SAASE,cAAT,CAAwBj2E,OAAxB,EAAiC14J,KAAjC,EAAwC;AACtC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED2uO,cAAc,CAAC7nP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHwB;AAIzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANwB;AAOzBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAbwB;AAczBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAjBwB;AAkBzBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,+BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAQA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAvCwB,CAA3B;;eA0CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI2uO,cAAJ,CAAmBj2E,OAAnB,EAA4B14J,KAA5B,CAAH,GAAwC,IAAI8tO,0BAAJ,CAAiBp1E,OAAjB,EAA0B,CAA1B,CAApD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AClDf;;;;AAEA,SAASG,YAAT,CAAsBl2E,OAAtB,EAA+B;AAC7B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDk2E,YAAY,CAAC9nP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE3hP,aADY;AAEvB6hP,EAAAA,OAAO,EAAE7hP,aAFc;AAGvB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GALsB;AAMvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKD,MAAT,EAAiB,KAAKL,QAAL,CAAc7E,SAAd;AAClB,GARsB;AASvBl8B,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;AACA,QAAI,KAAKi+N,MAAT,EAAiB,KAAKL,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,EAAjB,KACK,KAAKi+N,MAAL,GAAc,CAAd,EAAiB,KAAKL,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAAjB;AACN;AAbsB,CAAzB;;AAgBe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIk2E,YAAJ,CAAiBl2E,OAAjB,CAAP;AACD;;;;;;;;;AMxBD;;AACA;;AACA;;AACA;;;;AAEA,SAASq3E,UAAT,CAAoBx8O,CAApB,EAAuB5I,GAAvB,EAA4B;AAC1B,SAAO4I,CAAC,CAAC5I,GAAD,CAAR;AACD;;AAEc,oBAAW;AACxB,MAAIke,IAAI,GAAG,uBAAS,EAAT,CAAX;AAAA,MACI+0L,KAAK,GAAGqyC,cADZ;AAAA,MAEI58O,MAAM,GAAG68O,aAFb;AAAA,MAGIxmP,KAAK,GAAGqmP,UAHZ;;AAKA,WAAS7zO,KAAT,CAAexG,IAAf,EAAqB;AACnB,QAAIq9T,EAAE,GAAGlqT,IAAI,CAAC9hB,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAAT;AAAA,QACIC,CADJ;AAAA,QAEIy3F,CAAC,GAAGzoF,IAAI,CAAC1P,MAFb;AAAA,QAGI4O,CAAC,GAAGm+T,EAAE,CAAC/sU,MAHX;AAAA,QAIImqP,EAAE,GAAG,IAAI3pP,KAAJ,CAAUoO,CAAV,CAJT;AAAA,QAKIw7O,EALJ;;AAOA,SAAK1pP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,WAAK,IAAIqjN,EAAE,GAAGgpH,EAAE,CAACrsU,CAAD,CAAX,EAAgB4tG,EAAE,GAAG67I,EAAE,CAACzpP,CAAD,CAAF,GAAQ,IAAIF,KAAJ,CAAU23F,CAAV,CAA7B,EAA2CxtF,CAAC,GAAG,CAA/C,EAAkDqiU,GAAvD,EAA4DriU,CAAC,GAAGwtF,CAAhE,EAAmE,EAAExtF,CAArE,EAAwE;AACtE2jG,QAAAA,EAAE,CAAC3jG,CAAD,CAAF,GAAQqiU,GAAG,GAAG,CAAC,CAAD,EAAI,CAACtpU,KAAK,CAACgM,IAAI,CAAC/E,CAAD,CAAL,EAAUo5M,EAAV,EAAcp5M,CAAd,EAAiB+E,IAAjB,CAAV,CAAd;AACAs9T,QAAAA,GAAG,CAACt9T,IAAJ,GAAWA,IAAI,CAAC/E,CAAD,CAAf;AACD;;AACD2jG,MAAAA,EAAE,CAAC3pG,GAAH,GAASo/M,EAAT;AACD;;AAED,SAAKrjN,CAAC,GAAG,CAAJ,EAAO0pP,EAAE,GAAGxyC,KAAK,CAACuyC,EAAD,CAAtB,EAA4BzpP,CAAC,GAAGkO,CAAhC,EAAmC,EAAElO,CAArC,EAAwC;AACtCypP,MAAAA,EAAE,CAACC,EAAE,CAAC1pP,CAAD,CAAH,CAAF,CAAU8F,KAAV,GAAkB9F,CAAlB;AACD;;AAED2M,IAAAA,MAAM,CAAC88O,EAAD,EAAKC,EAAL,CAAN;AACA,WAAOD,EAAP;AACD;;AAEDj0O,EAAAA,KAAK,CAAC2M,IAAN,GAAa,UAASwE,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6iB,IAAI,GAAG,OAAOwE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAStd,aAAMvK,IAAN,CAAW6nB,CAAX,CAAT,CAArC,EAA8DnR,KAAlF,IAA2F2M,IAAlG;AACD,GAFD;;AAIA3M,EAAAA,KAAK,CAACxS,KAAN,GAAc,UAAS2jB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDnR,KAAxE,IAAiFxS,KAAxF;AACD,GAFD;;AAIAwS,EAAAA,KAAK,CAAC0hM,KAAN,GAAc,UAASvwL,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB43M,KAAK,GAAGvwL,CAAC,IAAI,IAAL,GAAY4iO,cAAZ,GAAwB,OAAO5iO,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAStd,aAAMvK,IAAN,CAAW6nB,CAAX,CAAT,CAA9D,EAAuFnR,KAA3G,IAAoH0hM,KAA3H;AACD,GAFD;;AAIA1hM,EAAAA,KAAK,CAAC7I,MAAN,GAAe,UAASga,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqN,MAAM,GAAGga,CAAC,IAAI,IAAL,GAAY6iO,aAAZ,GAAyB7iO,CAAlC,EAAqCnR,KAAzD,IAAkE7I,MAAzE;AACD,GAFD;;AAIA,SAAO6I,KAAP;AACD;;;;;;;;;ACxDD;;;;AAEe,kBAAS4zO,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAIU,CAAJ,EAAOkO,CAAP,EAAUjE,CAAC,GAAG,CAAd,EAAiBwtF,CAAC,GAAG2xJ,MAAM,CAAC,CAAD,CAAN,CAAU9pP,MAA/B,EAAuColB,CAA5C,EAA+Cza,CAAC,GAAGwtF,CAAnD,EAAsD,EAAExtF,CAAxD,EAA2D;AACzD,SAAKya,CAAC,GAAG1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AAC5B,QAAIya,CAAJ,EAAO,KAAK1kB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwBopP,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmBya,CAAnB;AAChC;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;AETD;;;;AAEe,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAI2K,CAAC,GAAG,CAAR,EAAW0qE,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAtB,EAAkChpM,CAAlC,EAAqCupF,CAAC,GAAG9iB,EAAE,CAACr1E,MAAjD,EAAyD2K,CAAC,GAAGwtF,CAA7D,EAAgE,EAAExtF,CAAlE,EAAqE;AACnE,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW0kB,CAAC,GAAG,CAApB,EAAuB1kB,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AACnC0qE,IAAAA,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,KAAY0qE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,IAAW,CAACya,CAAD,GAAK,CAA5B;AACD;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACTD;;;;AAEe,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,KAA8B,EAAE,CAACm4F,CAAC,GAAG,CAAC9iB,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAZ,EAAwB53M,MAA7B,IAAuC,CAAzC,CAAlC,EAA+E;;AAC/E,OAAK,IAAIolB,CAAC,GAAG,CAAR,EAAWza,CAAC,GAAG,CAAf,EAAkB0qE,EAAlB,EAAsB8iB,CAAtB,EAAyBvpF,CAA9B,EAAiCjE,CAAC,GAAGwtF,CAArC,EAAwC,EAAExtF,CAA1C,EAA6C;AAC3C,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW40E,EAAE,GAAG,CAAhB,EAAmBC,EAAE,GAAG,CAA7B,EAAgC70E,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C,UAAI4tG,EAAE,GAAGw7I,MAAM,CAAClyC,KAAK,CAACl3M,CAAD,CAAN,CAAf;AAAA,UACI6pP,IAAI,GAAGj8I,EAAE,CAAC3jG,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,UAEI6/O,IAAI,GAAGl8I,EAAE,CAAC3jG,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAAA,UAGI8/O,EAAE,GAAG,CAACF,IAAI,GAAGC,IAAR,IAAgB,CAHzB;;AAIA,WAAK,IAAIxsO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtd,CAApB,EAAuB,EAAEsd,CAAzB,EAA4B;AAC1B,YAAI0sO,EAAE,GAAGZ,MAAM,CAAClyC,KAAK,CAAC55L,CAAD,CAAN,CAAf;AAAA,YACI2sO,IAAI,GAAGD,EAAE,CAAC//O,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,YAEIigP,IAAI,GAAGF,EAAE,CAAC//O,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAGA8/O,QAAAA,EAAE,IAAIE,IAAI,GAAGC,IAAb;AACD;;AACDt1K,MAAAA,EAAE,IAAIi1K,IAAN,EAAYh1K,EAAE,IAAIk1K,EAAE,GAAGF,IAAvB;AACD;;AACDl1K,IAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,QAAIkwD,EAAJ,EAAQlwD,CAAC,IAAImwD,EAAE,GAAGD,EAAV;AACT;;AACDD,EAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACvBD;;;;AAEe,kBAASkyC,MAAT,EAAiB;AAC9B,MAAIe,KAAK,GAAGf,MAAM,CAAC3/O,GAAP,CAAW2gP,IAAX,CAAZ;AACA,SAAO,mBAAKhB,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOo8O,KAAK,CAACjjP,CAAD,CAAL,GAAWijP,KAAK,CAACp8O,CAAD,CAAvB;AAA6B,GAAhE,CAAP;AACD;;AAED,SAASq8O,IAAT,CAAchB,MAAd,EAAsB;AACpB,MAAIppP,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYiK,CAAC,GAAG,CAAhB;AAAA,MAAmBiE,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsCuuG,EAAtC;AAAA,MAA0Cw8I,EAAE,GAAG,CAACviP,QAAhD;;AACA,SAAO,EAAE9H,CAAF,GAAMkO,CAAb,EAAgB,IAAI,CAAC2/F,EAAE,GAAG,CAACu7I,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAP,IAAuBqqP,EAA3B,EAA+BA,EAAE,GAAGx8I,EAAL,EAAS5jG,CAAC,GAAGjK,CAAb;;AAC/C,SAAOiK,CAAP;AACD;;;;;;;;;;ACXD;;;;AAEe,kBAASm/O,MAAT,EAAiB;AAC9B,MAAIkB,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,GAAX,CAAX;AACA,SAAO,mBAAK6iP,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOu8O,IAAI,CAACpjP,CAAD,CAAJ,GAAUojP,IAAI,CAACv8O,CAAD,CAArB;AAA2B,GAA9D,CAAP;AACD;;AAEM,SAASxH,GAAT,CAAa6iP,MAAb,EAAqB;AAC1B,MAAI5lP,CAAC,GAAG,CAAR;AAAA,MAAWxD,CAAC,GAAG,CAAC,CAAhB;AAAA,MAAmBkO,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsC4S,CAAtC;;AACA,SAAO,EAAElS,CAAF,GAAMkO,CAAb,EAAgB,IAAIgE,CAAC,GAAG,CAACk3O,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAT,EAAuBwD,CAAC,IAAI0O,CAAL;;AACvC,SAAO1O,CAAP;AACD;;;;;;;;;ACXD;;;;AAEe,kBAAS4lP,MAAT,EAAiB;AAC9B,SAAO,wBAAUA,MAAV,EAAkB30O,OAAlB,EAAP;AACD;;;;;;;;;ACJD;;AACA;;;;AAEe,kBAAS20O,MAAT,EAAiB;AAC9B,MAAIl7O,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAf;AAAA,MACIU,CADJ;AAAA,MAEIiK,CAFJ;AAAA,MAGIqgP,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,cAAX,CAHX;AAAA,MAII2wM,KAAK,GAAG,yBAAWkyC,MAAX,CAJZ;AAAA,MAKIn2M,GAAG,GAAG,CALV;AAAA,MAMIC,MAAM,GAAG,CANb;AAAA,MAOIq3M,IAAI,GAAG,EAPX;AAAA,MAQIC,OAAO,GAAG,EARd;;AAUA,OAAKxqP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBiK,IAAAA,CAAC,GAAGitM,KAAK,CAACl3M,CAAD,CAAT;;AACA,QAAIizC,GAAG,GAAGC,MAAV,EAAkB;AAChBD,MAAAA,GAAG,IAAIq3M,IAAI,CAACrgP,CAAD,CAAX;AACAsgP,MAAAA,IAAI,CAACtqP,IAAL,CAAUgK,CAAV;AACD,KAHD,MAGO;AACLipC,MAAAA,MAAM,IAAIo3M,IAAI,CAACrgP,CAAD,CAAd;AACAugP,MAAAA,OAAO,CAACvqP,IAAR,CAAagK,CAAb;AACD;AACF;;AAED,SAAOugP,OAAO,CAAC/1O,OAAR,GAAkBlV,MAAlB,CAAyBgrP,IAAzB,CAAP;AACD;;;;;;;;;AC1BD;;;;AAEe,kBAASnB,MAAT,EAAiB;AAC9B,SAAO,mBAAKA,MAAL,EAAa30O,OAAb,EAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;AC7CA;;AAEA;;AAqBA,IAAIu2P,MAAM,GAAG;AACX,WAAS;AACPnoB,IAAAA,KAAK,EAAEooB;AADA,GADE;AAIX,kBAAgB;AACdpoB,IAAAA,KAAK,EAAEqoB;AADO,GAJL;AAOX,gBAAc;AACZroB,IAAAA,KAAK,EAAEsoB;AADK,GAPH;AAUX,YAAU;AACRtoB,IAAAA,KAAK,EAAEuoB,oBADC;AAERrkB,IAAAA,OAAO,EAAE,MAFD;AAGR/jP,IAAAA,KAAK,EAAE;AAHC,GAVC;AAeX,cAAY;AACV6/O,IAAAA,KAAK,EAAEwoB,sBADG;AAEVtkB,IAAAA,OAAO,EAAE,SAFC;AAGV/jP,IAAAA,KAAK,EAAE;AAHG,GAfD;AAoBX,mBAAiB;AACf6/O,IAAAA,KAAK,EAAEyoB,0BADQ;AAEfvkB,IAAAA,OAAO,EAAE,SAFM;AAGf/jP,IAAAA,KAAK,EAAE;AAHQ,GApBN;AAyBX,qBAAmB;AACjB6/O,IAAAA,KAAK,EAAE0oB,4BADU;AAEjBxkB,IAAAA,OAAO,EAAE,SAFQ;AAGjB/jP,IAAAA,KAAK,EAAE;AAHU,GAzBR;AA8BX,iBAAe;AACb6/O,IAAAA,KAAK,EAAE2oB,wBADM;AAEbzkB,IAAAA,OAAO,EAAE,OAFI;AAGb/jP,IAAAA,KAAK,EAAE;AAHM,GA9BJ;AAmCX,wBAAsB;AACpB6/O,IAAAA,KAAK,EAAE4oB,8BADa;AAEpB1kB,IAAAA,OAAO,EAAE,OAFW;AAGpB/jP,IAAAA,KAAK,EAAE;AAHa,GAnCX;AAwCX,sBAAoB;AAClB6/O,IAAAA,KAAK,EAAE6oB,4BADW;AAElB3kB,IAAAA,OAAO,EAAE,OAFS;AAGlB/jP,IAAAA,KAAK,EAAE;AAHW,GAxCT;AA6CX,YAAU;AACR6/O,IAAAA,KAAK,EAAEC;AADC,GA7CC;AAgDX,mBAAiB;AACfD,IAAAA,KAAK,EAAE8oB;AADQ,GAhDN;AAmDX,cAAY;AACVC,IAAAA,UAAU,EAAEC,uBADF;AAEVC,IAAAA,QAAQ,EAAIC;AAFF,GAnDD;AAuDX,aAAW;AACTlpB,IAAAA,KAAK,EAAEmpB;AADE,GAvDA;AA0DX,UAAQ;AACNnpB,IAAAA,KAAK,EAAEopB;AADD,GA1DG;AA6DX,gBAAc;AACZppB,IAAAA,KAAK,EAAEqpB;AADK,GA7DH;AAgEX,iBAAe;AACbrpB,IAAAA,KAAK,EAAEspB;AADM;AAhEJ,CAAb;;AAqEe,SAASC,MAAT,CAAgBnsP,IAAhB,EAAsBosP,WAAtB,EAAmCtlB,OAAnC,EAA4C;AACzD,MAAI77H,KAAK,GAAG,8BAAe8/I,MAAf,EAAuB/qP,IAAvB,KAAgC+qP,MAAM,CAAC/qP,IAAD,CAAlD;AAAA,MACI4iO,KAAK,GAAG,IADZ;;AAGA,MAAI33H,KAAJ,EAAW;AACT23H,IAAAA,KAAK,GAAG33H,KAAK,CAAC23H,KAAN,IAAe33H,KAAK,CAACmhJ,WAAW,IAAI,UAAhB,CAA5B;;AACA,QAAInhJ,KAAK,CAAC67H,OAAN,IAAiBA,OAAO,IAAI,IAAhC,EAAsC;AACpClE,MAAAA,KAAK,GAAGA,KAAK,CAAC33H,KAAK,CAAC67H,OAAP,CAAL,CAAqBA,OAArB,CAAR;AACD;AACF;;AAED,SAAOlE,KAAP;AACD;;;;;;;;ACxGD;AACA,IAAIypB,MAAM,GAAG;AAAE70K,EAAAA,CAAC,EAAC,CAAJ;AAAO3lF,EAAAA,CAAC,EAAC,CAAT;AAAYy6C,EAAAA,CAAC,EAAC,CAAd;AAAiBr6C,EAAAA,CAAC,EAAC,CAAnB;AAAsBzF,EAAAA,CAAC,EAAC,CAAxB;AAA2BjJ,EAAAA,CAAC,EAAC,CAA7B;AAAgCk0F,EAAAA,CAAC,EAAC,CAAlC;AAAqCh0F,EAAAA,CAAC,EAAC,CAAvC;AAA0CwD,EAAAA,CAAC,EAAC;AAA5C,CAAb;AAAA,IACIs0L,MAAM,GAAG,CAAC,2BAAD,EAA8B,KAA9B,EAAqC,aAArC,EAAoD,UAApD,CADb;;AAGe,kBAASgxE,OAAT,EAAkB;AAC/B,MAAItnQ,MAAM,GAAG,EAAb;AAAA,MACImJ,IADJ;AAAA,MAEI2mK,IAFJ;AAAA,MAGI3+F,MAHJ;AAAA,MAIIq1H,MAJJ;AAAA,MAIY12J,KAJZ;AAAA,MAKIy3N,GALJ;AAAA,MAKS/sQ,GALT;AAAA,MAKcM,CALd;AAAA,MAKiBiK,CALjB;AAAA,MAKoBiE,CALpB;AAAA,MAKuBupF,CALvB,CAD+B,CAQ/B;;AACAppF,EAAAA,IAAI,GAAGm+P,OAAO,CACXnjQ,KADI,GAEJ9F,OAFI,CAEIi4L,MAAM,CAAC,CAAD,CAFV,EAEe,OAFf,EAGJ33L,KAHI,CAGE23L,MAAM,CAAC,CAAD,CAHR,EAIJnyL,KAJI,CAIE,CAJF,CAAP,CAT+B,CAe/B;;AACA,OAAKrJ,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACG,IAAI,CAAC/O,MAAjB,EAAyBU,CAAC,GAACkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC;AACjCg1K,IAAAA,IAAI,GAAG3mK,IAAI,CAACrO,CAAD,CAAX;AACAq2E,IAAAA,MAAM,GAAG2+F,IAAI,CACV3rK,KADM,CACA,CADA,EAEN4xG,IAFM,GAGN13G,OAHM,CAGEi4L,MAAM,CAAC,CAAD,CAHR,EAGY,SAHZ,EAIN33L,KAJM,CAIA23L,MAAM,CAAC,CAAD,CAJN,CAAT;AAKAixE,IAAAA,GAAG,GAAGz3F,IAAI,CAACz3H,MAAL,CAAY,CAAZ,CAAN;AAEAmuJ,IAAAA,MAAM,GAAG,CAAC+gE,GAAD,CAAT;;AACA,SAAKxiQ,CAAC,GAAC,CAAF,EAAKwtF,CAAC,GAACphB,MAAM,CAAC/2E,MAAnB,EAA2B2K,CAAC,GAACwtF,CAA7B,EAAgC,EAAExtF,CAAlC,EAAqC;AACnC,UAAI,CAAC+qC,KAAK,GAAG,CAACqhC,MAAM,CAACpsE,CAAD,CAAhB,MAAyB+qC,KAA7B,EAAoC;AAAE;AACpC02J,QAAAA,MAAM,CAACzrM,IAAP,CAAY+0C,KAAZ;AACD;AACF;;AAEDt1C,IAAAA,GAAG,GAAG4sQ,MAAM,CAACG,GAAG,CAACtoQ,WAAJ,EAAD,CAAZ;;AACA,QAAIunM,MAAM,CAACpsM,MAAP,GAAc,CAAd,GAAkBI,GAAtB,EAA2B;AACzB,WAAKuK,CAAC,GAAC,CAAF,EAAKwtF,CAAC,GAACi0G,MAAM,CAACpsM,MAAnB,EAA2B2K,CAAC,GAACwtF,CAA7B,EAAgCxtF,CAAC,IAAEvK,GAAnC,EAAwC;AACtCwF,QAAAA,MAAM,CAACjF,IAAP,CAAY,CAACwsQ,GAAD,EAAMltQ,MAAN,CAAamsM,MAAM,CAACriM,KAAP,CAAaY,CAAb,EAAgBA,CAAC,GAACvK,GAAlB,CAAb,CAAZ;AACD;AACF,KAJD,MAKK;AACHwF,MAAAA,MAAM,CAACjF,IAAP,CAAYyrM,MAAZ;AACD;AACF;;AAED,SAAOxmM,MAAP;AACD;;;;;;;;AChDM,MAAMwnQ,QAAQ,GAAG3mQ,IAAI,CAACuiC,EAAL,GAAU,GAA3B;;AACA,MAAMqkO,OAAO,GAAG,KAAhB;;AACA,MAAMC,MAAM,GAAG7mQ,IAAI,CAACuiC,EAAL,GAAU,CAAzB;;AACA,MAAMukO,GAAG,GAAG9mQ,IAAI,CAACuiC,EAAL,GAAU,CAAtB;;AACA,MAAMwkO,SAAS,GAAG/mQ,IAAI,CAACqC,IAAL,CAAU,CAAV,IAAe,CAAjC;;;;;;;;;;;;ACJP;;AAEO,IAAI2kQ,YAAY,GAAG,EAAnB;;AACA,IAAIC,WAAW,GAAG,EAAlB;;AAEP,IAAIppQ,IAAI,GAAG,GAAGA,IAAd,EAEA;;AACO,SAASqpQ,QAAT,CAAkB9mQ,CAAlB,EAAqBue,CAArB,EAAwBwoP,EAAxB,EAA4BC,EAA5B,EAAgCC,KAAhC,EAAuCC,KAAvC,EAA8CC,OAA9C,EAAuDptB,EAAvD,EAA2DC,EAA3D,EAA+D;AACpE,MAAIl8O,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUiB,SAAV,CAAV;;AACA,MAAIgtQ,YAAY,CAAC9oQ,GAAD,CAAhB,EAAuB;AACrB,WAAO8oQ,YAAY,CAAC9oQ,GAAD,CAAnB;AACD;;AAED,MAAIspQ,EAAE,GAAGD,OAAO,GAAGZ,mBAAnB;AACA,MAAIc,MAAM,GAAGznQ,IAAI,CAAC+T,GAAL,CAASyzP,EAAT,CAAb;AACA,MAAIE,MAAM,GAAG1nQ,IAAI,CAACgU,GAAL,CAASwzP,EAAT,CAAb;AACAL,EAAAA,EAAE,GAAGnnQ,IAAI,CAACiT,GAAL,CAASk0P,EAAT,CAAL;AACAC,EAAAA,EAAE,GAAGpnQ,IAAI,CAACiT,GAAL,CAASm0P,EAAT,CAAL;AACA,MAAIrkB,EAAE,GAAG2kB,MAAM,IAAIvtB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAApB,GAA0BqnQ,MAAM,IAAIrtB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAAvD;AACA,MAAIskO,EAAE,GAAGykB,MAAM,IAAIttB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAApB,GAA0B8oP,MAAM,IAAIttB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAAvD;AACA,MAAIunQ,EAAE,GAAI5kB,EAAE,GAACA,EAAJ,IAAWokB,EAAE,GAACA,EAAd,IAAqBlkB,EAAE,GAACA,EAAJ,IAAWmkB,EAAE,GAACA,EAAd,CAA7B;;AACA,MAAIO,EAAE,GAAG,CAAT,EAAY;AACVA,IAAAA,EAAE,GAAG3nQ,IAAI,CAACqC,IAAL,CAAUslQ,EAAV,CAAL;AACAR,IAAAA,EAAE,IAAIQ,EAAN;AACAP,IAAAA,EAAE,IAAIO,EAAN;AACD;;AAED,MAAInsB,GAAG,GAAGksB,MAAM,GAAGP,EAAnB;AACA,MAAI7rB,GAAG,GAAGmsB,MAAM,GAAGN,EAAnB;AACA,MAAI1rB,GAAG,GAAI,CAACgsB,MAAF,GAAYL,EAAtB;AACA,MAAI7rB,GAAG,GAAImsB,MAAD,GAAWN,EAArB;AACA,MAAI9sD,EAAE,GAAGkhC,GAAG,GAAGrB,EAAN,GAAWmB,GAAG,GAAGlB,EAA1B;AACA,MAAI7/B,EAAE,GAAGkhC,GAAG,GAAGtB,EAAN,GAAWoB,GAAG,GAAGnB,EAA1B;AACA,MAAI1tI,EAAE,GAAG8uI,GAAG,GAAGp7O,CAAN,GAAUk7O,GAAG,GAAG38N,CAAzB;AACA,MAAI8tF,EAAE,GAAGgvI,GAAG,GAAGr7O,CAAN,GAAUm7O,GAAG,GAAG58N,CAAzB;AAEA,MAAI7X,CAAC,GAAG,CAAC4lG,EAAE,GAAC4tG,EAAJ,KAAW5tG,EAAE,GAAC4tG,EAAd,IAAoB,CAAC7tG,EAAE,GAAC8tG,EAAJ,KAAW9tG,EAAE,GAAC8tG,EAAd,CAA5B;AACA,MAAIqtD,UAAU,GAAG,IAAI9gQ,CAAJ,GAAQ,IAAzB;AACA,MAAI8gQ,UAAU,GAAG,CAAjB,EAAoBA,UAAU,GAAG,CAAb;AACpB,MAAIC,OAAO,GAAG7nQ,IAAI,CAACqC,IAAL,CAAUulQ,UAAV,CAAd;AACA,MAAIN,KAAK,IAAID,KAAb,EAAoBQ,OAAO,GAAG,CAACA,OAAX;AACpB,MAAIC,EAAE,GAAG,OAAOxtD,EAAE,GAAG5tG,EAAZ,IAAkBm7J,OAAO,IAAIp7J,EAAE,GAAC8tG,EAAP,CAAlC;AACA,MAAIwtD,EAAE,GAAG,OAAOxtD,EAAE,GAAG9tG,EAAZ,IAAkBo7J,OAAO,IAAIn7J,EAAE,GAAC4tG,EAAP,CAAlC;AAEA,MAAI0tD,GAAG,GAAGhoQ,IAAI,CAACuQ,KAAL,CAAWgqM,EAAE,GAACwtD,EAAd,EAAkBztD,EAAE,GAACwtD,EAArB,CAAV;AACA,MAAIG,GAAG,GAAGjoQ,IAAI,CAACuQ,KAAL,CAAWk8F,EAAE,GAACs7J,EAAd,EAAkBr7J,EAAE,GAACo7J,EAArB,CAAV;AAEA,MAAII,MAAM,GAAGD,GAAG,GAACD,GAAjB;;AACA,MAAIE,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AAC7BY,IAAAA,MAAM,IAAIpB,cAAV;AACD,GAFD,MAEO,IAAIoB,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AACpCY,IAAAA,MAAM,IAAIpB,cAAV;AACD;;AAED,MAAIqB,IAAI,GAAGnoQ,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACiT,GAAL,CAASi1P,MAAM,IAAIrB,oBAAS,KAAb,CAAf,CAAV,CAAX;AACA,MAAI1nQ,MAAM,GAAG,EAAb;;AACA,OAAK,IAAIlF,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACkuQ,IAAhB,EAAsB,EAAEluQ,CAAxB,EAA2B;AACzB,QAAImuQ,GAAG,GAAGJ,GAAG,GAAG/tQ,CAAC,GAAGiuQ,MAAJ,GAAaC,IAA7B;AACA,QAAIE,GAAG,GAAGL,GAAG,GAAG,CAAC/tQ,CAAC,GAAC,CAAH,IAAQiuQ,MAAR,GAAiBC,IAAjC;AACAhpQ,IAAAA,MAAM,CAAClF,CAAD,CAAN,GAAY,CAAC6tQ,EAAD,EAAKC,EAAL,EAASK,GAAT,EAAcC,GAAd,EAAmBlB,EAAnB,EAAuBC,EAAvB,EAA2BK,MAA3B,EAAmCC,MAAnC,CAAZ;AACD;;AAED,SAAQV,YAAY,CAAC9oQ,GAAD,CAAZ,GAAoBiB,MAA5B;AACD;;AAEM,SAASmpQ,MAAT,CAAgBhrQ,MAAhB,EAAwB;AAC7B,MAAIY,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUuE,MAAV,CAAV;;AACA,MAAI2pQ,WAAW,CAAC/oQ,GAAD,CAAf,EAAsB;AACpB,WAAO+oQ,WAAW,CAAC/oQ,GAAD,CAAlB;AACD;;AAED,MAAIg9O,EAAE,GAAG59O,MAAM,CAAC,CAAD,CAAf;AAAA,MACI69O,EAAE,GAAG79O,MAAM,CAAC,CAAD,CADf;AAAA,MAEI0qQ,GAAG,GAAG1qQ,MAAM,CAAC,CAAD,CAFhB;AAAA,MAGI2qQ,GAAG,GAAG3qQ,MAAM,CAAC,CAAD,CAHhB;AAAA,MAII6pQ,EAAE,GAAG7pQ,MAAM,CAAC,CAAD,CAJf;AAAA,MAKI8pQ,EAAE,GAAG9pQ,MAAM,CAAC,CAAD,CALf;AAAA,MAMImqQ,MAAM,GAAGnqQ,MAAM,CAAC,CAAD,CANnB;AAAA,MAOIoqQ,MAAM,GAAGpqQ,MAAM,CAAC,CAAD,CAPnB;AASA,MAAIk+O,GAAG,GAAGksB,MAAM,GAAGP,EAAnB;AACA,MAAI7rB,GAAG,GAAG,CAACmsB,MAAD,GAAUL,EAApB;AACA,MAAI3rB,GAAG,GAAGgsB,MAAM,GAAGN,EAAnB;AACA,MAAI5rB,GAAG,GAAGmsB,MAAM,GAAGN,EAAnB;AAEA,MAAImB,OAAO,GAAGvoQ,IAAI,CAACgU,GAAL,CAASg0P,GAAT,CAAd;AACA,MAAIQ,OAAO,GAAGxoQ,IAAI,CAAC+T,GAAL,CAASi0P,GAAT,CAAd;AACA,MAAIS,OAAO,GAAGzoQ,IAAI,CAACgU,GAAL,CAASi0P,GAAT,CAAd;AACA,MAAIS,OAAO,GAAG1oQ,IAAI,CAAC+T,GAAL,CAASk0P,GAAT,CAAd;AAEA,MAAIU,OAAO,GAAG,OAAOV,GAAG,GAAGD,GAAb,CAAd;AACA,MAAIY,SAAS,GAAG5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAO,GAAG,GAAnB,CAAhB;AACA,MAAIhrQ,CAAC,GAAI,IAAE,CAAH,GAAQirQ,SAAR,GAAoBA,SAApB,GAAgC5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAT,CAAxC;AACA,MAAIj8J,EAAE,GAAGwuI,EAAE,GAAGqtB,OAAL,GAAe5qQ,CAAC,GAAG6qQ,OAA5B;AACA,MAAI/7J,EAAE,GAAG0uI,EAAE,GAAGqtB,OAAL,GAAe7qQ,CAAC,GAAG4qQ,OAA5B;AACA,MAAI5uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAd;AACA,MAAI7uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAd;AACA,MAAI3vL,EAAE,GAAG4gK,EAAE,GAAGh8O,CAAC,GAAG+qQ,OAAlB;AACA,MAAI/7J,EAAE,GAAGitI,EAAE,GAAGj8O,CAAC,GAAG8qQ,OAAlB;AAEA,SAAQxB,WAAW,CAAC/oQ,GAAD,CAAX,GAAmB,CACzBs9O,GAAG,GAAG9uI,EAAN,GAAW4uI,GAAG,GAAG7uI,EADQ,EACHgvI,GAAG,GAAG/uI,EAAN,GAAW6uI,GAAG,GAAG9uI,EADd,EAEzB+uI,GAAG,GAAGziK,EAAN,GAAWuiK,GAAG,GAAG3uI,EAFQ,EAEH8uI,GAAG,GAAG1iK,EAAN,GAAWwiK,GAAG,GAAG5uI,EAFd,EAGzB6uI,GAAG,GAAG7B,EAAN,GAAW2B,GAAG,GAAG1B,EAHQ,EAGH6B,GAAG,GAAG9B,EAAN,GAAW4B,GAAG,GAAG3B,EAHd,CAA3B;AAKD;;;;;;;;;AC1GD;;AAEA,IAAI95O,IAAI,GAAG,CAAC,GAAD,EAAM,CAAN,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,CAAX;;AAEA,SAASgQ,KAAT,CAAei7J,OAAf,EAAwB89F,EAAxB,EAA4BC,EAA5B,EAAgC;AAC9B,MAAIpiQ,CAAC,GAAI5G,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAA1B;;AACA,MAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AAC1B5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GARD,MAQO,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA;AACL,SAAK,IAAI9wK,CAAC,GAAC,CAAN,EAASkO,CAAC,GAAC4iK,OAAO,CAACxxK,MAAxB,EAAgCU,CAAC,GAACkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC6F,MAAAA,IAAI,CAAC7F,CAAD,CAAJ,GAAU,CAACA,CAAC,GAAG,CAAJ,IAAS,CAAT,GAAa4uQ,EAAb,GAAkBC,EAAnB,IAAyB/9F,OAAO,CAAC9wK,CAAD,CAA1C;AACD;AACF;;AACD,SAAO6F,IAAP;AACD;;AAEc,kBAASmsK,OAAT,EAAkB3jK,IAAlB,EAAwByD,CAAxB,EAA2BpO,CAA3B,EAA8BkrQ,EAA9B,EAAkCC,EAAlC,EAAsC;AACnD,MAAI/9F,OAAJ;AAAA,MAAa;AACT+2C,EAAAA,QAAQ,GAAG,IADf;AAAA,MAEI1hN,CAAC,GAAG,CAFR;AAAA,MAEW;AACPue,EAAAA,CAAC,GAAG,CAHR;AAAA,MAGW;AACPqqP,EAAAA,QAAQ,GAAG,CAJf;AAAA,MAIkB;AACdC,EAAAA,QAAQ,GAAG,CALf;AAAA,MAKkB;AACdC,EAAAA,KANJ;AAAA,MAOIC,KAPJ;AAAA,MAQIC,YARJ;AAAA,MASIC,YATJ;AAWA,MAAIt9P,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIpO,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIkrQ,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,MAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGD,EAAL;AAEhB,MAAI58F,OAAO,CAACq9F,SAAZ,EAAuBr9F,OAAO,CAACq9F,SAAR;;AAEvB,OAAK,IAAIrvQ,CAAC,GAAC,CAAN,EAASN,GAAG,GAAC2O,IAAI,CAAC/O,MAAvB,EAA+BU,CAAC,GAACN,GAAjC,EAAsC,EAAEM,CAAxC,EAA2C;AACzC8wK,IAAAA,OAAO,GAAGziK,IAAI,CAACrO,CAAD,CAAd;;AACA,QAAI4uQ,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB/9F,MAAAA,OAAO,GAAGj7J,KAAK,CAACi7J,OAAD,EAAU89F,EAAV,EAAcC,EAAd,CAAf;AACD;;AAED,YAAQ/9F,OAAO,CAAC,CAAD,CAAf;AAAsB;AAEpB,WAAK,GAAL;AAAU;AACR3qK,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRghB,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRghB,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AAAU;AACRurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AACAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CACEz3O,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CADnB,EACsB;AACpB4S,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CAFnB,EAEsB;AACpBqrQ,QAAAA,QAAQ,GAAGj9P,CAHb,EAGgB;AACdk9P,QAAAA,QAAQ,GAAGtrQ,CAJb,EAIgB;AACdurQ,QAAAA,KAAK,GAAGn9P,CALV,EAMEo9P,KAAK,GAAGxrQ,CANV;AAQAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AAAU;AACR/oQ,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAi+F,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CACE9sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CADf,EAEEg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAFf,EAGEqrQ,QAAQ,GAAGj9P,CAHb,EAIEk9P,QAAQ,GAAGtrQ,CAJb,EAKEyC,CAAC,GAAG2L,CALN,EAME4S,CAAC,GAAGhhB,CANN;AAQA;;AAEF,WAAK,GAAL;AAAU;AACR;AACAurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB,CAHF,CAIE;;AACAi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CACEmxB,QAAQ,GAAGj9P,CADb,EAEEk9P,QAAQ,GAAGtrQ,CAFb,EAGEyC,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CAHnB,EAIE4S,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CAJnB,EAKEurQ,KAAK,GAAGn9P,CALV,EAMEo9P,KAAK,GAAGxrQ,CANV,EAPF,CAgBE;AACA;AACA;AACA;;AACAqrQ,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AAEA3qK,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AAAU;AACRD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAFF,CAGE;;AACAi+F,QAAAA,QAAQ,GAAG,IAAE5oQ,CAAF,GAAM4oQ,QAAjB;AACAC,QAAAA,QAAQ,GAAG,IAAEtqP,CAAF,GAAMsqP,QAAjB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CACEmxB,QAAQ,GAAGj9P,CADb,EAEEk9P,QAAQ,GAAGtrQ,CAFb,EAGEotK,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAHf,EAIEg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAJf,EAKEurQ,KAAK,GAAGn9P,CALV,EAMEo9P,KAAK,GAAGxrQ,CANV;AAQAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ,CAfF,CAgBE;AACA;AACA;AACA;;AACAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AAEA;;AAEF,WAAK,GAAL;AAAU;AACR;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AAEAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AAEAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CACEoxB,QAAQ,GAAGj9P,CADb,EAEEk9P,QAAQ,GAAGtrQ,CAFb,EAGEurQ,KAAK,GAAGn9P,CAHV,EAIEo9P,KAAK,GAAGxrQ,CAJV;AAMAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AAAU;AACRD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf;AAEAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CACE7sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CADf,EAEEg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAFf,EAGEurQ,KAAK,GAAGn9P,CAHV,EAIEo9P,KAAK,GAAGxrQ,CAJV;AAMAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACA;;AAEF,WAAK,GAAL;AAAU;AAER;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;;AAEA,YAAI+2C,QAAQ,CAAC,CAAD,CAAR,CAAYz8F,KAAZ,CAAkB,QAAlB,MAAgC,IAApC,EAA0C;AACxC;AACA;AACA2jJ,UAAAA,QAAQ,GAAG5oQ,CAAX;AACA6oQ,UAAAA,QAAQ,GAAGtqP,CAAX;AACD,SALD,MAMK,IAAImjM,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC5B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQgpQ,YAAnB;AACAH,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQ0qP,YAAnB;AACD,SAJI,MAKA,IAAIvnD,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC5B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACD;;AAEDG,QAAAA,YAAY,GAAGJ,QAAf;AACAK,QAAAA,YAAY,GAAGJ,QAAf;AAEAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CACEoxB,QAAQ,GAAGj9P,CADb,EAEEk9P,QAAQ,GAAGtrQ,CAFb,EAGEurQ,KAAK,GAAGn9P,CAHV,EAIEo9P,KAAK,GAAGxrQ,CAJV;AAMAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACA;;AAEF,WAAK,GAAL;AACEm+F,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAFF,CAIE;;AACAi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CACEoxB,QAAQ,GAAGj9P,CADb,EAEEk9P,QAAQ,GAAGtrQ,CAFb,EAGEurQ,KAAK,GAAGn9P,CAHV,EAIEo9P,KAAK,GAAGxrQ,CAJV;AAMAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACEI,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAC7BotK,OAAO,CAAC,CAAD,CADsB,EAE7BA,OAAO,CAAC,CAAD,CAFsB,EAG7BA,OAAO,CAAC,CAAD,CAHsB,EAI7BA,OAAO,CAAC,CAAD,CAJsB,EAK7BA,OAAO,CAAC,CAAD,CALsB,EAM7BA,OAAO,CAAC,CAAD,CAAP,GAAa3qK,CAAb,GAAiB2L,CANY,EAO7Bg/J,OAAO,CAAC,CAAD,CAAP,GAAapsJ,CAAb,GAAiBhhB,CAPY,CAAxB,CAAP;AASAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACA;;AAEF,WAAK,GAAL;AACEw+F,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAC7BotK,OAAO,CAAC,CAAD,CADsB,EAE7BA,OAAO,CAAC,CAAD,CAFsB,EAG7BA,OAAO,CAAC,CAAD,CAHsB,EAI7BA,OAAO,CAAC,CAAD,CAJsB,EAK7BA,OAAO,CAAC,CAAD,CALsB,EAM7BA,OAAO,CAAC,CAAD,CAAP,GAAah/J,CANgB,EAO7Bg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAPgB,CAAxB,CAAP;AASAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACA;;AAEF,WAAK,GAAL;AACA,WAAK,GAAL;AACEkB,QAAAA,OAAO,CAACyrE,SAAR;AACA;AA1PJ;;AA4PA51B,IAAAA,QAAQ,GAAG/2C,OAAX;AACD;AACF;;AAED,SAASw+F,OAAT,CAAiBt9F,OAAjB,EAA0B7rK,CAA1B,EAA6Bue,CAA7B,EAAgCs3B,MAAhC,EAAwC;AACtC,MAAIuzN,GAAG,GAAG,mBACRvzN,MAAM,CAAC,CAAD,CADE,EACG;AACXA,EAAAA,MAAM,CAAC,CAAD,CAFE,EAEG;AACXA,EAAAA,MAAM,CAAC,CAAD,CAHE,EAGG;AACXA,EAAAA,MAAM,CAAC,CAAD,CAJE,EAIG;AACXA,EAAAA,MAAM,CAAC,CAAD,CALE,EAKG;AACXA,EAAAA,MAAM,CAAC,CAAD,CANE,EAMG;AACXA,EAAAA,MAAM,CAAC,CAAD,CAPE,EAOG;AACX71C,EAAAA,CARQ,EAQLue,CARK,CAAV;;AAUA,OAAK,IAAI1kB,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACuvQ,GAAG,CAACjwQ,MAApB,EAA4B,EAAEU,CAA9B,EAAiC;AAC/B,QAAIwvQ,GAAG,GAAG,iBAAOD,GAAG,CAACvvQ,CAAD,CAAV,CAAV;AACAgyK,IAAAA,OAAO,CAAC4rE,aAAR,CAAsB4xB,GAAG,CAAC,CAAD,CAAzB,EAA8BA,GAAG,CAAC,CAAD,CAAjC,EAAsCA,GAAG,CAAC,CAAD,CAAzC,EAA8CA,GAAG,CAAC,CAAD,CAAjD,EAAsDA,GAAG,CAAC,CAAD,CAAzD,EAA8DA,GAAG,CAAC,CAAD,CAAjE;AACD;AACF;;;;;;;;;AClUD;;AACA;;AACA;;AACA;;;;AAEA,IAAIC,KAAK,GAAG,kBAAZ;AAEA,IAAIC,QAAQ,GAAG;AACb,YAAU;AACRxqB,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwB6+P,cAAxB;AACD;AALO,GADG;AAQb,WAAS;AACP3nB,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,GADZ;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAACxK,CAApB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBA,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBxK,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACwK,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACA,CAApB;AACAwuK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAjBM,GARI;AA2Bb,aAAW;AACTyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB1vO,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARQ,GA3BE;AAqCb,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAI6kD,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUX,IAAV,CAAR;AAAA,UACItB,CAAC,GAAG,CAACmmD,CAAD,GAAK,CADb;AAEA0lH,MAAAA,OAAO,CAAC6sE,IAAR,CAAa14O,CAAb,EAAgBA,CAAhB,EAAmBmmD,CAAnB,EAAsBA,CAAtB;AACD;AALO,GArCG;AA4Cb,WAAS;AACP44L,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,CADZ;AAAA,UAEItK,CAAC,GAAGsK,CAAC,GAAG,GAFZ;AAAA,UAGIkE,CAAC,GAAGlE,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACh6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAAC0O,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAeh6O,CAAf,EAAkB,CAACwO,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACh6O,CAAhB,EAAmB,CAACwO,CAApB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAAC0O,CAApB;AACA8/J,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAdM,GA5CI;AA4Db,WAAS;AACPyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAAA,UAEI2d,CAAC,GAAI4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFjB;AAAA,UAGI1hQ,CAAC,GAAGC,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC3vO,CAAhB,EAAmBw+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe3vO,CAAf,EAAkBw+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAVM,GA5DI;AAwEb,cAAY;AACVyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAAA,UAEI2d,CAAC,GAAI4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFjB;AAGAz9F,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AATS,GAxEC;AAmFb,iBAAe;AACbyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAlB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARY,GAnFF;AA6Fb,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkBjxL,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,CAACu+C,CAApB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACu+C,CAAnB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GA7FJ;AAuGb,oBAAkB;AAChByH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAejxL,CAAf,EAAkB,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmB,CAACv+C,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmBv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARe,GAvGL;AAiHb,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,uBAAY9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACjxL,CAAhB,EAAmB,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkB,CAACv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkBv+C,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GAjHJ;AA2Hb,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACD;AALO;AA3HG,CAAf;;AAoIe,SAASw3O,OAAT,CAAiB7+N,CAAjB,EAAoB;AACjC,SAAO,8BAAe+oP,QAAf,EAAyB/oP,CAAzB,IAA8B+oP,QAAQ,CAAC/oP,CAAD,CAAtC,GAA4CgpP,YAAY,CAAChpP,CAAD,CAA/D;AACD;;AAED,IAAIigO,MAAM,GAAG,EAAb;;AAEA,SAAS+oB,YAAT,CAAsBthQ,IAAtB,EAA4B;AAC1B,MAAI,CAAC,8BAAeu4O,MAAf,EAAuBv4O,IAAvB,CAAL,EAAmC;AACjC,QAAIq9L,MAAM,GAAG,oBAAUr9L,IAAV,CAAb;AACAu4O,IAAAA,MAAM,CAACv4O,IAAD,CAAN,GAAe;AACb62O,MAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,6BAAWuqK,OAAX,EAAoB05B,MAApB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC3lM,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAApD;AACD;AAHY,KAAf;AAKD;;AACD,SAAOm/O,MAAM,CAACv4O,IAAD,CAAb;AACD;;;;;;;;;AC3JD;;AAEA;AACA,MAAMgqP,CAAC,GAAG,cAAV,EAA0B;;AAE1B,SAASuX,UAAT,CAAoB/iQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC1G,CAAT;AACD;;AAED,SAAS0pQ,UAAT,CAAoBhjQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC6X,CAAT;AACD;;AAED,SAASorP,cAAT,CAAwBjjQ,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAAC3E,KAAT;AACD;;AAED,SAAS6nQ,eAAT,CAAyBljQ,CAAzB,EAA4B;AAC1B,SAAOA,CAAC,CAACopB,MAAT;AACD;;AAED,SAAS+lL,MAAT,CAAgBr1L,CAAhB,EAAmB;AACjB,SAAO,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,MAAM,CAACA,CAA5C;AACD;;AAED,SAAS1gB,KAAT,CAAejD,KAAf,EAAsBkD,GAAtB,EAA2BE,GAA3B,EAAgC;AAC9B,SAAOL,IAAI,CAACK,GAAL,CAASF,GAAT,EAAcH,IAAI,CAACG,GAAL,CAASlD,KAAT,EAAgBoD,GAAhB,CAAd,CAAP;AACD;;AAEc,oBAAW;AACxB,MAAID,CAAC,GAAGypQ,UAAR;AAAA,MACIlrP,CAAC,GAAGmrP,UADR;AAAA,MAEI3nQ,KAAK,GAAG4nQ,cAFZ;AAAA,MAGI75O,MAAM,GAAG85O,eAHb;AAAA,MAIIE,IAAI,GAAGj0D,MAAM,CAAC,CAAD,CAJjB;AAAA,MAKIk0D,IAAI,GAAGD,IALX;AAAA,MAMIE,IAAI,GAAGF,IANX;AAAA,MAOIG,IAAI,GAAGH,IAPX;AAAA,MAQIj+F,OAAO,GAAG,IARd;;AAUA,WAASq+F,SAAT,CAAmB1pP,CAAnB,EAAsB05L,EAAtB,EAA0BC,EAA1B,EAA8B;AAC5B,QAAIzsM,MAAJ;AAAA,QACI4+F,EAAE,GAAG4tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAACl6M,CAAC,CAACrH,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAD5B;AAAA,QAEI6rF,EAAE,GAAG8tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAC57L,CAAC,CAAC5lB,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAF5B;AAAA,QAGI2lC,CAAC,GAAI,CAACpkD,KAAK,CAACpJ,IAAN,CAAW,IAAX,EAAiB6nB,CAAjB,CAHV;AAAA,QAII4lC,CAAC,GAAI,CAACt2B,MAAM,CAACn3B,IAAP,CAAY,IAAZ,EAAkB6nB,CAAlB,CAJV;AAAA,QAKInjB,CAAC,GAAIuC,IAAI,CAACG,GAAL,CAASomD,CAAT,EAAYC,CAAZ,IAAiB,CAL1B;AAAA,QAMI+jN,EAAE,GAAGrqQ,KAAK,CAAC,CAACgqQ,IAAI,CAACnxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CANd;AAAA,QAOI+sQ,EAAE,GAAGtqQ,KAAK,CAAC,CAACiqQ,IAAI,CAACpxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CAPd;AAAA,QAQIo1P,EAAE,GAAG3yP,KAAK,CAAC,CAACkqQ,IAAI,CAACrxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CARd;AAAA,QASIgtQ,EAAE,GAAGvqQ,KAAK,CAAC,CAACmqQ,IAAI,CAACtxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CATd;AAWA,QAAI,CAACwuK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAEd,QAAIy8P,EAAE,IAAI,CAAN,IAAWC,EAAE,IAAI,CAAjB,IAAsB3X,EAAE,IAAI,CAA5B,IAAiC4X,EAAE,IAAI,CAA3C,EAA8C;AAC5Cx+F,MAAAA,OAAO,CAAC6sE,IAAR,CAAapsI,EAAb,EAAiBD,EAAjB,EAAqBlmD,CAArB,EAAwBC,CAAxB;AACD,KAFD,MAEO;AACL,UAAIuyB,EAAE,GAAG2zB,EAAE,GAAGnmD,CAAd;AAAA,UACIomD,EAAE,GAAGF,EAAE,GAAGjmD,CADd;AAEAylH,MAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAG69J,EAApB,EAAwB99J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAGyxL,EAApB,EAAwB/9J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAE,GAAGu5K,CAAC,GAAGkY,EAA/B,EAAmC/9J,EAAnC,EAAuC1zB,EAAvC,EAA2C0zB,EAAE,GAAG6lJ,CAAC,GAAGkY,EAApD,EAAwDzxL,EAAxD,EAA4D0zB,EAAE,GAAG+9J,EAAjE;AACAv+F,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAE,GAAG89J,EAAxB;AACAx+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAtB,EAA0B4zB,EAAE,GAAG2lJ,CAAC,GAAGmY,EAAnC,EAAuC1xL,EAAE,GAAGu5K,CAAC,GAAGmY,EAAhD,EAAoD99J,EAApD,EAAwD5zB,EAAE,GAAG0xL,EAA7D,EAAiE99J,EAAjE;AACAs/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGmmJ,EAApB,EAAwBlmJ,EAAxB;AACAs/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAE,GAAG4lJ,CAAC,GAAGO,EAA/B,EAAmClmJ,EAAnC,EAAuCD,EAAvC,EAA2CC,EAAE,GAAG2lJ,CAAC,GAAGO,EAApD,EAAwDnmJ,EAAxD,EAA4DC,EAAE,GAAGkmJ,EAAjE;AACA5mF,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAf,EAAmBD,EAAE,GAAG89J,EAAxB;AACAt+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAtB,EAA0BD,EAAE,GAAG6lJ,CAAC,GAAGiY,EAAnC,EAAuC79J,EAAE,GAAG4lJ,CAAC,GAAGiY,EAAhD,EAAoD99J,EAApD,EAAwDC,EAAE,GAAG69J,EAA7D,EAAiE99J,EAAjE;AACAw/D,MAAAA,OAAO,CAACyrE,SAAR;AACD;;AAED,QAAI5pO,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAEDw8P,EAAAA,SAAS,CAAClqQ,CAAV,GAAc,UAASwgB,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAG61M,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOlqQ,CAAP;AACD;AACF,GAPD;;AASAkqQ,EAAAA,SAAS,CAAC3rP,CAAV,GAAc,UAASiC,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGs3L,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAO3rP,CAAP;AACD;AACF,GAPD;;AASA2rP,EAAAA,SAAS,CAACnoQ,KAAV,GAAkB,UAASye,CAAT,EAAY;AAC5B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4I,MAAAA,KAAK,GAAG8zM,MAAM,CAACr1L,CAAD,CAAd;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOnoQ,KAAP;AACD;AACF,GAPD;;AASAmoQ,EAAAA,SAAS,CAACp6O,MAAV,GAAmB,UAAStP,CAAT,EAAY;AAC7B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB22B,MAAAA,MAAM,GAAG+lL,MAAM,CAACr1L,CAAD,CAAf;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOp6O,MAAP;AACD;AACF,GAPD;;AASAo6O,EAAAA,SAAS,CAAClvB,YAAV,GAAyB,UAASmvB,EAAT,EAAaC,EAAb,EAAiBC,EAAjB,EAAqB5X,EAArB,EAAyB;AAChD,QAAI74P,SAAS,CAACT,MAAd,EAAsB;AACpB2wQ,MAAAA,IAAI,GAAGj0D,MAAM,CAACs0D,EAAD,CAAb;AACAJ,MAAAA,IAAI,GAAGK,EAAE,IAAI,IAAN,GAAav0D,MAAM,CAACu0D,EAAD,CAAnB,GAA0BN,IAAjC;AACAG,MAAAA,IAAI,GAAGI,EAAE,IAAI,IAAN,GAAax0D,MAAM,CAACw0D,EAAD,CAAnB,GAA0BP,IAAjC;AACAE,MAAAA,IAAI,GAAGvX,EAAE,IAAI,IAAN,GAAa58C,MAAM,CAAC48C,EAAD,CAAnB,GAA0BsX,IAAjC;AACA,aAAOG,SAAP;AACD,KAND,MAMO;AACL,aAAOJ,IAAP;AACD;AACF,GAVD;;AAYAI,EAAAA,SAAS,CAACr+F,OAAV,GAAoB,UAASrrJ,CAAT,EAAY;AAC9B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0yK,MAAAA,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOr+F,OAAP;AACD;AACF,GAPD;;AASA,SAAOq+F,SAAP;AACD;;;;;;;;;ACvID;;AACA;;AAEe,oBAAW;AACxB,MAAIlqQ,CAAJ;AAAA,MACIue,CADJ;AAAA,MAEIjd,IAFJ;AAAA,MAGIugN,OAHJ;AAAA,MAIIh2C,OAAO,GAAG,IAJd;AAAA,MAKI/1I,KALJ;AAAA,MAKWw2E,EALX;AAAA,MAKeD,EALf;AAAA,MAKmB4/F,EALnB;;AAOA,WAASmP,KAAT,CAAeziI,EAAf,EAAmB4zB,EAAnB,EAAuBg+J,EAAvB,EAA2B;AACzB,QAAIr+D,EAAE,GAAGq+D,EAAE,GAAG,CAAd;;AAEA,QAAIz0O,KAAJ,EAAW;AACT,UAAI2vM,EAAE,GAAGp5H,EAAE,GAAGE,EAAd;AAAA,UACIm5H,EAAE,GAAG/sJ,EAAE,GAAG2zB,EADd;;AAGA,UAAIm5H,EAAE,IAAIC,EAAV,EAAc;AACZ;AACA,YAAI8kC,EAAE,GAAG5qQ,IAAI,CAACqC,IAAL,CAAUwjO,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAT;AAAA,YACIqhC,EAAE,GAAG,CAACthC,EAAE,IAAI+kC,EAAP,IAAav+D,EADtB;AAAA,YAEI+6D,EAAE,GAAG,CAACthC,EAAE,IAAI8kC,EAAP,IAAav+D,EAFtB;AAAA,YAGI1uM,CAAC,GAAGqC,IAAI,CAACuQ,KAAL,CAAWu1N,EAAX,EAAeD,EAAf,CAHR,CAFY,CAOZ;;AACA55D,QAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAG8sJ,EAAE,GAAGv5B,EAAzB,EAA6B3/F,EAAE,GAAGm5H,EAAE,GAAGx5B,EAAvC;AACArgC,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB3uM,CAAC,GAAGqC,IAAI,CAACuiC,EAAjC,EAAqC5kC,CAArC;AACAsuK,QAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC+uC,GAAR,CAAYtuG,EAAZ,EAAgBD,EAAhB,EAAoB4/F,EAApB,EAAwB1uM,CAAxB,EAA2BA,CAAC,GAAGqC,IAAI,CAACuiC,EAApC;AACD,OAbD,MAaO;AACL0pI,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB,CAAxB,EAA2Bw6D,cAA3B;AACD;;AACD76F,MAAAA,OAAO,CAACyrE,SAAR;AACD,KArBD,MAqBO;AACLxhN,MAAAA,KAAK,GAAG,CAAR;AACD;;AACDw2E,IAAAA,EAAE,GAAG3zB,EAAL;AACA0zB,IAAAA,EAAE,GAAGE,EAAL;AACA0/F,IAAAA,EAAE,GAAGC,EAAL;AACD;;AAED,WAASu+D,KAAT,CAAe5hQ,IAAf,EAAqB;AACnB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAMA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0BhnN,KAAK,GAAG,CAAR;AAC3B;;AACD,UAAIgnN,QAAJ,EAAc1hC,KAAK,CAAC,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAH,EAAiB,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAnB,EAAiC,CAACvH,IAAI,CAACoF,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC,CAAL;AACf;;AAED,QAAI6E,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAED+8P,EAAAA,KAAK,CAACzqQ,CAAN,GAAU,UAASwgB,CAAT,EAAY;AACpB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAGwgB,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOzqQ,CAAP;AACD;AACF,GAPD;;AASAyqQ,EAAAA,KAAK,CAAClsP,CAAN,GAAU,UAASiC,CAAT,EAAY;AACpB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGiC,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOlsP,CAAP;AACD;AACF,GAPD;;AASAksP,EAAAA,KAAK,CAACnpQ,IAAN,GAAa,UAASkf,CAAT,EAAY;AACvB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBmI,MAAAA,IAAI,GAAGkf,CAAP;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOnpQ,IAAP;AACD;AACF,GAPD;;AASAmpQ,EAAAA,KAAK,CAAC5oD,OAAN,GAAgB,UAASrhM,CAAT,EAAY;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0oN,MAAAA,OAAO,GAAGrhM,CAAV;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAO5oD,OAAP;AACD;AACF,GAPD;;AASA4oD,EAAAA,KAAK,CAAC5+F,OAAN,GAAgB,UAASrrJ,CAAT,EAAY;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,UAAIqnB,CAAC,IAAI,IAAT,EAAe;AACbqrJ,QAAAA,OAAO,GAAG,IAAV;AACD,OAFD,MAEO;AACLA,QAAAA,OAAO,GAAGrrJ,CAAV;AACD;;AACD,aAAOiqP,KAAP;AACD,KAPD,MAOO;AACL,aAAO5+F,OAAP;AACD;AACF,GAXD;;AAaA,SAAO4+F,KAAP;AACD;;;;;;;;;;;;;;;;ACnHD;;AACA;;AAEA;;AACA;;AAEA;;;;AAOA,SAAS5tQ,KAAT,CAAekE,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO7G,CAAC,IAAI,IAAL,GAAYA,CAAZ,GAAgB6G,CAAvB;AACD;;AAED,MAAM5H,CAAC,GAAIyhB,IAAI,IAAIA,IAAI,CAACzhB,CAAL,IAAU,CAA7B;AAAA,MACMue,CAAC,GAAIkD,IAAI,IAAIA,IAAI,CAAClD,CAAL,IAAU,CAD7B;AAAA,MAEM4nC,CAAC,GAAI1kC,IAAI,IAAIA,IAAI,CAAC1f,KAAL,IAAc,CAFjC;AAAA,MAGMqkD,CAAC,GAAI3kC,IAAI,IAAIA,IAAI,CAACqO,MAAL,IAAe,CAHlC;AAAA,MAIM46O,EAAE,GAAGjpP,IAAI,IAAI,CAACA,IAAI,CAACzhB,CAAL,IAAU,CAAX,KAAiByhB,IAAI,CAAC1f,KAAL,IAAc,CAA/B,CAJnB;AAAA,MAKM4oQ,EAAE,GAAGlpP,IAAI,IAAI,CAACA,IAAI,CAAClD,CAAL,IAAU,CAAX,KAAiBkD,IAAI,CAACqO,MAAL,IAAe,CAAhC,CALnB;AAAA,MAMM86O,EAAE,GAAGnpP,IAAI,IAAIA,IAAI,CAACw3N,UAAL,IAAmB,CANtC;AAAA,MAOM4xB,EAAE,GAAGppP,IAAI,IAAIA,IAAI,CAAC03N,QAAL,IAAiB,CAPpC;AAAA,MAQMsE,EAAE,GAAGh8N,IAAI,IAAIA,IAAI,CAAC43N,QAAL,IAAiB,CARpC;AAAA,MASMyxB,EAAE,GAAGrpP,IAAI,IAAIA,IAAI,CAACo3N,WAAL,IAAoB,CATvC;AAAA,MAUMkyB,EAAE,GAAGtpP,IAAI,IAAIA,IAAI,CAACs3N,WAAL,IAAoB,CAVvC;AAAA,MAWMiyB,EAAE,GAAGvpP,IAAI,IAAIA,IAAI,CAACu5N,YAAL,IAAqB,CAXxC;AAAA,MAYMmvB,EAAE,GAAG1oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACwpP,mBAAN,EAA2BxpP,IAAI,CAACu5N,YAAhC,CAAL,IAAsD,CAZzE;AAAA,MAaMovB,EAAE,GAAG3oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACypP,oBAAN,EAA4BzpP,IAAI,CAACu5N,YAAjC,CAAL,IAAuD,CAb1E;AAAA,MAcMqvB,EAAE,GAAG5oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC0pP,uBAAN,EAA+B1pP,IAAI,CAACu5N,YAApC,CAAL,IAA0D,CAd7E;AAAA,MAeMyX,EAAE,GAAGhxO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC2pP,sBAAN,EAA8B3pP,IAAI,CAACu5N,YAAnC,CAAL,IAAyD,CAf5E;AAAA,MAgBMsI,EAAE,GAAG7hO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACngB,IAAN,EAAY,EAAZ,CAhBxB;AAAA,MAiBM+pQ,EAAE,GAAG5pP,IAAI,IAAIA,IAAI,CAACngB,IAAL,IAAa,CAjBhC;AAAA,MAkBMuuK,GAAG,GAAGpuJ,IAAI,IAAI,EAAEA,IAAI,CAACogM,OAAL,KAAiB,KAAnB,CAlBpB;AAAA,MAmBM/nM,IAAI,GAAG2H,IAAI,IAAI,sBAAQA,IAAI,CAACpgB,KAAL,IAAc,QAAtB,CAnBrB;;AAqBA,MAAMiqQ,QAAQ,GAAM,oBAASryB,UAAT,CAAoB2xB,EAApB,EAAwBzxB,QAAxB,CAAiC0xB,EAAjC,EAAqCxxB,QAArC,CAA8CoE,EAA9C,EACG5E,WADH,CACeiyB,EADf,EACmB/xB,WADnB,CAC+BgyB,EAD/B,EACmC/vB,YADnC,CACgDgwB,EADhD,CAApB;AAAA,MAEMO,UAAU,GAAI,qBAAUvrQ,CAAV,CAAYA,CAAZ,EAAeqsG,EAAf,CAAkB9tF,CAAlB,EAAqB47L,EAArB,CAAwBwwD,EAAxB,EAA4B9oD,OAA5B,CAAoChyC,GAApC,CAFpB;AAAA,MAGM27F,UAAU,GAAI,qBAAUjtP,CAAV,CAAYA,CAAZ,EAAe+tF,EAAf,CAAkBtsG,CAAlB,EAAqBk6M,EAArB,CAAwBwwD,EAAxB,EAA4B7oD,OAA5B,CAAoChyC,GAApC,CAHpB;AAAA,MAIM47F,SAAS,GAAK,qBAAUzrQ,CAAV,CAAYA,CAAZ,EAAeue,CAAf,CAAiBA,CAAjB,EAAoBsjM,OAApB,CAA4BhyC,GAA5B,CAJpB;AAAA,MAKM67F,SAAS,GAAK,0BAAU1rQ,CAAV,CAAYA,CAAZ,EAAeue,CAAf,CAAiBA,CAAjB,EAAoBxc,KAApB,CAA0BokD,CAA1B,EAA6Br2B,MAA7B,CAAoCs2B,CAApC,EACG40L,YADH,CACgBmvB,EADhB,EACoBC,EADpB,EACwBC,EADxB,EAC4B5X,EAD5B,CALpB;AAAA,MAOMkZ,WAAW,GAAG,uBAAY7xP,IAAZ,CAAiBA,IAAjB,EAAuBxY,IAAvB,CAA4BgiP,EAA5B,CAPpB;AAAA,MAQMsoB,UAAU,GAAI,sBAAW5rQ,CAAX,CAAaA,CAAb,EAAgBue,CAAhB,CAAkBA,CAAlB,EAAqBsjM,OAArB,CAA6BhyC,GAA7B,EAAkCvuK,IAAlC,CAAuC+pQ,EAAvC,CARpB;;AAUO,SAASQ,eAAT,CAAyBpqP,IAAzB,EAA+B;AACpC,SAAOA,IAAI,CAACu5N,YAAL,IACFv5N,IAAI,CAACwpP,mBADH,IAEFxpP,IAAI,CAACypP,oBAFH,IAGFzpP,IAAI,CAAC0pP,uBAHH,IAIF1pP,IAAI,CAAC2pP,sBAJV;AAKD;;AAEM,SAASxwD,GAAT,CAAa/uC,OAAb,EAAsBpqJ,IAAtB,EAA4B;AACjC,SAAO6pP,QAAQ,CAACz/F,OAAT,CAAiBA,OAAjB,EAA0BpqJ,IAA1B,CAAP;AACD;;AAEM,SAASk7L,IAAT,CAAc9wC,OAAd,EAAuB92D,KAAvB,EAA8B;AACnC,MAAItzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAhB;AAAA,MACIwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADjC;AAEA,SAAO,CAACv1O,IAAI,CAACqqP,MAAL,KAAgB,YAAhB,GAA+BN,UAA/B,GAA4CD,UAA7C,EACJ7uB,KADI,CACE,qBAAO6hB,MAAP,EAAe98O,IAAI,CAACqqP,MAApB,EAA4BrqP,IAAI,CAACm/N,OAAjC,CADF,EAEJ/0E,OAFI,CAEIA,OAFJ,EAEa92D,KAFb,CAAP;AAGD;;AAEM,SAAS3mF,IAAT,CAAcy9I,OAAd,EAAuB92D,KAAvB,EAA8B;AACnC,MAAItzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAhB;AAAA,MACIwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADjC;AAEA,SAAOyU,SAAS,CAAC/uB,KAAV,CAAgB,qBAAO6hB,MAAP,EAAe98O,IAAI,CAACqqP,MAApB,EAA4BrqP,IAAI,CAACm/N,OAAjC,CAAhB,EACJ/0E,OADI,CACIA,OADJ,EACa92D,KADb,CAAP;AAED;;AAEM,SAASm1J,SAAT,CAAmBr+F,OAAnB,EAA4BpqJ,IAA5B,EAAkCzhB,CAAlC,EAAqCue,CAArC,EAAwC;AAC7C,SAAOmtP,SAAS,CAAC7/F,OAAV,CAAkBA,OAAlB,EAA2BpqJ,IAA3B,EAAiCzhB,CAAjC,EAAoCue,CAApC,CAAP;AACD;;AAEM,SAASld,KAAT,CAAewqK,OAAf,EAAwBpqJ,IAAxB,EAA8B;AACnC,SAAO,CAACA,IAAI,CAACsqP,IAAL,CAAU1qQ,KAAV,IAAmBogB,IAAI,CAACpgB,KAAzB,EACJwqK,OADI,CACIA,OADJ,EACapqJ,IADb,CAAP;AAED;;AAEM,SAAS2hM,MAAT,CAAgBv3C,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AACpC,SAAOkqP,WAAW,CAAC9/F,OAAZ,CAAoBA,OAApB,EAA6BpqJ,IAA7B,CAAP;AACD;;AAEM,SAASgpP,KAAT,CAAe5+F,OAAf,EAAwB92D,KAAxB,EAA+B;AACpC,SAAO62J,UAAU,CAAC//F,OAAX,CAAmBA,OAAnB,EAA4B92D,KAA5B,CAAP;AACD;;;;;;;;;;AC1FD;;AACA;;AAEA,IAAIi3J,OAAO,GAAG,CAAd;;AAEO,SAASC,cAAT,GAA0B;AAC/BD,EAAAA,OAAO,GAAG,CAAV;AACD;;AAEc,kBAASE,QAAT,EAAmBzqP,IAAnB,EAAyBngB,IAAzB,EAA+B;AAC5C,MAAIygC,IAAI,GAAGtgB,IAAI,CAACsgB,IAAhB;AAAA,MACI2iO,IAAI,GAAGwH,QAAQ,CAACC,KADpB;AAAA,MAEIr/P,EAAE,GAAG2U,IAAI,CAACuqP,OAAL,KAAiBvqP,IAAI,CAACuqP,OAAL,GAAe,SAASA,OAAO,EAAhD,CAFT;AAAA,MAGI1lQ,CAAC,GAAGo+P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,MAAsB43P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,IAAoB;AAACA,IAAAA,EAAE,EAAEA;AAAL,GAA1C,CAHR;;AAKA,MAAI,0BAAWi1B,IAAX,CAAJ,EAAsB;AACpBz7B,IAAAA,CAAC,CAAC4B,IAAF,GAAS65B,IAAI,CAAC,IAAD,CAAb;AACD,GAFD,MAEO,IAAI,6BAAgBzgC,IAAhB,CAAJ,EAA2B;AAChCgF,IAAAA,CAAC,CAAC4B,IAAF,GAAS,uBAAU,IAAV,EAAgB5G,IAAhB,EAAsB,CAAtB,EAAyB,CAAzB,CAAT;AACD,GAFM,MAEA;AACLgF,IAAAA,CAAC,CAACvE,KAAF,GAAUT,IAAI,CAACS,KAAL,IAAc,CAAxB;AACAuE,IAAAA,CAAC,CAACwpB,MAAF,GAAWxuB,IAAI,CAACwuB,MAAL,IAAe,CAA1B;AACD;;AAED,SAAO,UAAUhjB,EAAV,GAAe,GAAtB;AACD;;;;;;;;;ACzBc,SAASu/P,MAAT,CAAgBzkQ,CAAhB,EAAmB;AAChC,OAAK0pM,KAAL;AACA,MAAI1pM,CAAJ,EAAO,KAAK66M,KAAL,CAAW76M,CAAX;AACR;;AAED,IAAI3N,SAAS,GAAGoyQ,MAAM,CAACpyQ,SAAvB;;AAEAA,SAAS,CAACwU,KAAV,GAAkB,YAAW;AAC3B,SAAO,IAAI49P,MAAJ,CAAW,IAAX,CAAP;AACD,CAFD;;AAIApyQ,SAAS,CAACq3M,KAAV,GAAkB,YAAW;AAC3B,OAAKhlG,EAAL,GAAU,CAACrlG,MAAM,CAAC+/H,SAAlB;AACA,OAAK36B,EAAL,GAAU,CAACplG,MAAM,CAAC+/H,SAAlB;AACA,OAAKruD,EAAL,GAAU,CAAC1xE,MAAM,CAAC+/H,SAAlB;AACA,OAAKz6B,EAAL,GAAU,CAACtlG,MAAM,CAAC+/H,SAAlB;AACA,SAAO,IAAP;AACD,CAND;;AAQA/sI,SAAS,CAAC+zM,KAAV,GAAkB,YAAW;AAC3B,SACE,KAAK1hG,EAAL,KAAY,CAACrlG,MAAM,CAAC+/H,SAApB,IACA,KAAK36B,EAAL,KAAY,CAACplG,MAAM,CAAC+/H,SADpB,IAEA,KAAKruD,EAAL,KAAY,CAAC1xE,MAAM,CAAC+/H,SAFpB,IAGA,KAAKz6B,EAAL,KAAY,CAACtlG,MAAM,CAAC+/H,SAJtB;AAMD,CAPD;;AASA/sI,SAAS,CAACqyQ,MAAV,GAAmB,UAAS1kQ,CAAT,EAAY;AAC7B,SACE,KAAK0kG,EAAL,KAAY1kG,CAAC,CAAC0kG,EAAd,IACA,KAAKD,EAAL,KAAYzkG,CAAC,CAACykG,EADd,IAEA,KAAK1zB,EAAL,KAAY/wE,CAAC,CAAC+wE,EAFd,IAGA,KAAK4zB,EAAL,KAAY3kG,CAAC,CAAC2kG,EAJhB;AAMD,CAPD;;AASAtyG,SAAS,CAACuC,GAAV,GAAgB,UAAS8vG,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyB;AACvC,MAAI5zB,EAAE,GAAG2zB,EAAT,EAAa;AACX,SAAK3zB,EAAL,GAAU2zB,EAAV;AACA,SAAKA,EAAL,GAAU3zB,EAAV;AACD,GAHD,MAGO;AACL,SAAK2zB,EAAL,GAAUA,EAAV;AACA,SAAK3zB,EAAL,GAAUA,EAAV;AACD;;AACD,MAAI4zB,EAAE,GAAGF,EAAT,EAAa;AACX,SAAKE,EAAL,GAAUF,EAAV;AACA,SAAKA,EAAL,GAAUE,EAAV;AACD,GAHD,MAGO;AACL,SAAKF,EAAL,GAAUA,EAAV;AACA,SAAKE,EAAL,GAAUA,EAAV;AACD;;AACD,SAAO,IAAP;AACD,CAhBD;;AAkBAtyG,SAAS,CAACugB,GAAV,GAAgB,UAASxa,CAAT,EAAYue,CAAZ,EAAe;AAC7B,MAAIve,CAAC,GAAG,KAAKssG,EAAb,EAAiB,KAAKA,EAAL,GAAUtsG,CAAV;AACjB,MAAIue,CAAC,GAAG,KAAK8tF,EAAb,EAAiB,KAAKA,EAAL,GAAU9tF,CAAV;AACjB,MAAIve,CAAC,GAAG,KAAK24E,EAAb,EAAiB,KAAKA,EAAL,GAAU34E,CAAV;AACjB,MAAIue,CAAC,GAAG,KAAKguF,EAAb,EAAiB,KAAKA,EAAL,GAAUhuF,CAAV;AACjB,SAAO,IAAP;AACD,CAND;;AAQAtkB,SAAS,CAACsnL,MAAV,GAAmB,UAAS76K,CAAT,EAAY;AAC7B,OAAK4lG,EAAL,IAAW5lG,CAAX;AACA,OAAK2lG,EAAL,IAAW3lG,CAAX;AACA,OAAKiyE,EAAL,IAAWjyE,CAAX;AACA,OAAK6lG,EAAL,IAAW7lG,CAAX;AACA,SAAO,IAAP;AACD,CAND;;AAQAzM,SAAS,CAACiM,KAAV,GAAkB,YAAW;AAC3B,OAAKomG,EAAL,GAAU1sG,IAAI,CAAC+H,KAAL,CAAW,KAAK2kG,EAAhB,CAAV;AACA,OAAKD,EAAL,GAAUzsG,IAAI,CAAC+H,KAAL,CAAW,KAAK0kG,EAAhB,CAAV;AACA,OAAK1zB,EAAL,GAAU/4E,IAAI,CAACoC,IAAL,CAAU,KAAK22E,EAAf,CAAV;AACA,OAAK4zB,EAAL,GAAU3sG,IAAI,CAACoC,IAAL,CAAU,KAAKuqG,EAAf,CAAV;AACA,SAAO,IAAP;AACD,CAND;;AAQAtyG,SAAS,CAACyV,KAAV,GAAkB,UAASrS,CAAT,EAAY;AAC5B,OAAKivG,EAAL,IAAWjvG,CAAX;AACA,OAAKgvG,EAAL,IAAWhvG,CAAX;AACA,OAAKs7E,EAAL,IAAWt7E,CAAX;AACA,OAAKkvG,EAAL,IAAWlvG,CAAX;AACA,SAAO,IAAP;AACD,CAND;;AAQApD,SAAS,CAACqgN,SAAV,GAAsB,UAAS30L,EAAT,EAAahH,EAAb,EAAiB;AACrC,OAAK2tF,EAAL,IAAW3mF,EAAX;AACA,OAAKgzD,EAAL,IAAWhzD,EAAX;AACA,OAAK0mF,EAAL,IAAW1tF,EAAX;AACA,OAAK4tF,EAAL,IAAW5tF,EAAX;AACA,SAAO,IAAP;AACD,CAND;;AAQA1kB,SAAS,CAACm6P,MAAV,GAAmB,UAASpW,KAAT,EAAgBh+O,CAAhB,EAAmBue,CAAnB,EAAsB;AACvC,QAAM4f,CAAC,GAAG,KAAKouO,aAAL,CAAmBvuB,KAAnB,EAA0Bh+O,CAA1B,EAA6Bue,CAA7B,CAAV;AACA,SAAO,KAAK+yL,KAAL,GACJ92L,GADI,CACA2jB,CAAC,CAAC,CAAD,CADD,EACMA,CAAC,CAAC,CAAD,CADP,EAEJ3jB,GAFI,CAEA2jB,CAAC,CAAC,CAAD,CAFD,EAEMA,CAAC,CAAC,CAAD,CAFP,EAGJ3jB,GAHI,CAGA2jB,CAAC,CAAC,CAAD,CAHD,EAGMA,CAAC,CAAC,CAAD,CAHP,EAIJ3jB,GAJI,CAIA2jB,CAAC,CAAC,CAAD,CAJD,EAIMA,CAAC,CAAC,CAAD,CAJP,CAAP;AAKD,CAPD;;AASAlkC,SAAS,CAACsyQ,aAAV,GAA0B,UAASvuB,KAAT,EAAgBh+O,CAAhB,EAAmBue,CAAnB,EAAsB;AAC9C,MAAI;AAAC+tF,IAAAA,EAAD;AAAKD,IAAAA,EAAL;AAAS1zB,IAAAA,EAAT;AAAa4zB,IAAAA;AAAb,MAAmB,IAAvB;AAAA,MACI34F,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAASoqO,KAAT,CADV;AAAA,MAEIrqO,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAASqqO,KAAT,CAFV;AAAA,MAGIlD,EAAE,GAAG96O,CAAC,GAAGA,CAAC,GAAC4T,GAAN,GAAY2K,CAAC,GAAC5K,GAHvB;AAAA,MAIIonO,EAAE,GAAGx8N,CAAC,GAAGve,CAAC,GAAC2T,GAAN,GAAY4K,CAAC,GAAC3K,GAJvB;AAMA,SAAO,CACLA,GAAG,GAAC04F,EAAJ,GAAS34F,GAAG,GAAC04F,EAAb,GAAkByuI,EADb,EACiBnnO,GAAG,GAAC24F,EAAJ,GAAS14F,GAAG,GAACy4F,EAAb,GAAkB0uI,EADnC,EAELnnO,GAAG,GAAC04F,EAAJ,GAAS34F,GAAG,GAAC44F,EAAb,GAAkBuuI,EAFb,EAEiBnnO,GAAG,GAAC24F,EAAJ,GAAS14F,GAAG,GAAC24F,EAAb,GAAkBwuI,EAFnC,EAGLnnO,GAAG,GAAC+kE,EAAJ,GAAShlE,GAAG,GAAC04F,EAAb,GAAkByuI,EAHb,EAGiBnnO,GAAG,GAACglE,EAAJ,GAAS/kE,GAAG,GAACy4F,EAAb,GAAkB0uI,EAHnC,EAILnnO,GAAG,GAAC+kE,EAAJ,GAAShlE,GAAG,GAAC44F,EAAb,GAAkBuuI,EAJb,EAIiBnnO,GAAG,GAACglE,EAAJ,GAAS/kE,GAAG,GAAC24F,EAAb,GAAkBwuI,EAJnC,CAAP;AAMD,CAbD;;AAeA9gP,SAAS,CAACwoN,KAAV,GAAkB,UAAS76M,CAAT,EAAY;AAC5B,MAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,MAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,MAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,MAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,SAAO,IAAP;AACD,CAND;;AAQAtyG,SAAS,CAACq/O,SAAV,GAAsB,UAAS1xO,CAAT,EAAY;AAChC,MAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,MAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,MAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,MAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,SAAO,IAAP;AACD,CAND;;AAQAtyG,SAAS,CAACuyQ,QAAV,GAAqB,UAAS5kQ,CAAT,EAAY;AAC/B,SAAOA,CAAC,IACN,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAb,IACA,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EADb,IAEA,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAFb,IAGA,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAJf;AAMD,CAPD;;AASAtyG,SAAS,CAACwyQ,UAAV,GAAuB,UAAS7kQ,CAAT,EAAY;AACjC,SAAOA,CAAC,KACN,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAb,IACA,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EADb,IAEA,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAFb,IAGA,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAJP,CAAR;AAMD,CAPD;;AASAtyG,SAAS,CAACstM,UAAV,GAAuB,UAAS3/L,CAAT,EAAY;AACjC,SAAOA,CAAC,IAAI,EACV,KAAK+wE,EAAL,GAAU/wE,CAAC,CAAC0kG,EAAZ,IACA,KAAKA,EAAL,GAAU1kG,CAAC,CAAC+wE,EADZ,IAEA,KAAK4zB,EAAL,GAAU3kG,CAAC,CAACykG,EAFZ,IAGA,KAAKA,EAAL,GAAUzkG,CAAC,CAAC2kG,EAJF,CAAZ;AAMD,CAPD;;AASAtyG,SAAS,CAACyyQ,QAAV,GAAqB,UAAS1sQ,CAAT,EAAYue,CAAZ,EAAe;AAClC,SAAO,EACLve,CAAC,GAAG,KAAKssG,EAAT,IACAtsG,CAAC,GAAG,KAAK24E,EADT,IAEAp6D,CAAC,GAAG,KAAK8tF,EAFT,IAGA9tF,CAAC,GAAG,KAAKguF,EAJJ,CAAP;AAMD,CAPD;;AASAtyG,SAAS,CAAC8H,KAAV,GAAkB,YAAW;AAC3B,SAAO,KAAK42E,EAAL,GAAU,KAAK2zB,EAAtB;AACD,CAFD;;AAIAryG,SAAS,CAAC61B,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAKy8E,EAAL,GAAU,KAAKF,EAAtB;AACD,CAFD;;;;;;;;;AC/KA;;;;AAEe,SAAStyG,IAAT,CAAcgyQ,IAAd,EAAoB;AACjC,OAAKA,IAAL,GAAYA,IAAZ;AACA,OAAKY,MAAL,GAAe,KAAKA,MAAL,IAAe,IAAIN,eAAJ,EAA9B;AACD;;;;;;;;;ACLD;;AACA;;;;AAEe,SAASO,SAAT,CAAmBb,IAAnB,EAAyB;AACtChyQ,gBAAKpB,IAAL,CAAU,IAAV,EAAgBozQ,IAAhB;;AACA,OAAKh3J,KAAL,GAAc,KAAKA,KAAL,IAAc,EAA5B;AACD;;AAED,wBAAS63J,SAAT,EAAoB7yQ,aAApB;;;;;;;;;ACRA;;AAEA;AACA;AACA,MAAMo6M,WAAW,GAAG,oBAApB,EAEA;;AACA,MAAMC,UAAU,GAAG,iGAAnB,EAAsH;;AACtH,MAAMC,aAAa,GAAG,6DAAtB,EAAqF;AAGrF;;AACA,MAAMC,YAAY,GAAG,SAArB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,kBAASlsM,KAAT,EAAgB2oL,EAAhB,EAAoB;AACjC,SAAOvgH,OAAO,KAAK;AACjBA,IAAAA,OAAO,EAAEA,OAAO,IAAI,EADH;AAEjB+jI,IAAAA,QAAQ,EAAEA,QAFO;AAGjB38F,IAAAA,IAAI,EAAEA,IAHW;AAIjB48F,IAAAA,UAAU,EAAE,CAAC,CAACzjB,EAJG;AAKjBlxE,IAAAA,IAAI,EAAE40F,UAAU,CAAC1jB,EAAD,CALC;AAMjB1rE,IAAAA,IAAI,EAAEqvF,UAAU,CAACtsM,KAAD;AANC,GAAL,CAAd;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAewvG,IAAf,CAAoB+8F,GAApB,EAAyBnkI,OAAzB,EAAkC;AAChC,QAAMs9H,GAAG,GAAG,MAAM,KAAKyG,QAAL,CAAcI,GAAd,EAAmBnkI,OAAnB,CAAlB;AAAA,QACMylC,GAAG,GAAG63F,GAAG,CAACzvF,IADhB;AAGA,SAAOyvF,GAAG,CAAC8G,SAAJ,GACH,KAAK/0F,IAAL,CAAU5J,GAAV,CADG,GAEH,KAAKoP,IAAL,CAAUpP,GAAV,EAAezlC,OAAf,CAFJ;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe+jI,QAAf,CAAwBI,GAAxB,EAA6BnkI,OAA7B,EAAsC;AACpCA,EAAAA,OAAO,GAAG,sBAAO,EAAP,EAAW,KAAKA,OAAhB,EAAyBA,OAAzB,CAAV;AAEA,QAAMgkI,UAAU,GAAG,KAAKA,UAAxB;AAAA,QACMz1M,MAAM,GAAG;AAACs/G,IAAAA,IAAI,EAAE;AAAP,GADf;AAGA,MAAIw2F,MAAJ,EAAYC,QAAZ,EAAsBjwK,IAAtB;AAEA,QAAMkwK,SAAS,GAAGX,UAAU,CAAC5sL,IAAX,CAAgBmtL,GAAG,CAACv3M,OAAJ,CAAYi3M,aAAZ,EAA2B,EAA3B,CAAhB,CAAlB;;AAEA,MAAIM,GAAG,IAAI,IAAP,IAAe,OAAOA,GAAP,KAAe,QAA9B,IAA0C,CAACI,SAA/C,EAA0D;AACxD,yBAAM,oCAAoC,2BAAYJ,GAAZ,CAA1C;AACD;;AAED,QAAMK,WAAW,GAAGb,WAAW,CAAC3sL,IAAZ,CAAiBmtL,GAAjB,CAApB,CAdoC,CAgBpC;;AACA,MAAI,CAAC9vK,IAAI,GAAG2rC,OAAO,CAACykI,OAAhB,KAA4B,CAACD,WAAjC,EAA8C;AAC5C;AACA,QAAI,CAACL,GAAG,CAACt6F,UAAJ,CAAe,GAAf,CAAD,IAAwBx1E,IAAI,CAACA,IAAI,CAAC1rC,MAAL,GAAY,CAAb,CAAJ,KAAwB,GAApD,EAAyD;AACvDw7M,MAAAA,GAAG,GAAG,MAAMA,GAAZ;AACD;;AACDA,IAAAA,GAAG,GAAG9vK,IAAI,GAAG8vK,GAAb;AACD,GAvBmC,CAyBpC;;;AACAG,EAAAA,QAAQ,GAAG,CAACD,MAAM,GAAGF,GAAG,CAACt6F,UAAJ,CAAei6F,YAAf,CAAV,KACN9jI,OAAO,CAACmoD,IAAR,KAAiB,MADX,IAENnoD,OAAO,CAACmoD,IAAR,KAAiB,MAAjB,IAA2B,CAACq8E,WAA5B,IAA2CR,UAFhD;;AAIA,MAAIK,MAAJ,EAAY;AACV;AACAF,IAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAUoxM,YAAY,CAACn7M,MAAvB,CAAN;AACD,GAHD,MAGO,IAAIw7M,GAAG,CAACt6F,UAAJ,CAAe,IAAf,CAAJ,EAA0B;AAC/B,QAAI7pC,OAAO,CAAC0kI,eAAR,KAA4B,MAAhC,EAAwC;AACtC;AACAP,MAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAU,CAAV,CAAN;AACA4xM,MAAAA,QAAQ,GAAG,IAAX;AACD,KAJD,MAIO;AACL;AACAH,MAAAA,GAAG,GAAG,CAACnkI,OAAO,CAAC0kI,eAAR,IAA2B,MAA5B,IAAsC,GAAtC,GAA4CP,GAAlD;AACD;AACF,GA1CmC,CA4CpC;;;AACA/3M,EAAAA,MAAM,CAACub,cAAP,CAAsBpZ,MAAtB,EAA8B,WAA9B,EAA2C;AAAClC,IAAAA,KAAK,EAAE,CAAC,CAACi4M;AAAV,GAA3C,EA7CoC,CA+CpC;;AACA/1M,EAAAA,MAAM,CAACs/G,IAAP,GAAcs2F,GAAd,CAhDoC,CAkDpC;;AACA,MAAInkI,OAAO,CAACpgC,MAAZ,EAAoB;AAClBrxC,IAAAA,MAAM,CAACqxC,MAAP,GAAgBogC,OAAO,CAACpgC,MAAR,GAAiB,EAAjC;AACD,GArDmC,CAuDpC;;;AACA,MAAIogC,OAAO,CAAC2kI,GAAZ,EAAiB;AACfp2M,IAAAA,MAAM,CAACo2M,GAAP,GAAa3kI,OAAO,CAAC2kI,GAAR,GAAc,EAA3B;AACD,GA1DmC,CA4DpC;AACA;;;AACA,MAAI3kI,OAAO,CAACq7F,OAAR,KAAoB,OAApB,IAA+Br7F,OAAO,CAAC4kI,WAA3C,EAAwD;AACtDr2M,IAAAA,MAAM,CAACq2M,WAAP,GAAqB5kI,OAAO,CAAC4kI,WAAR,GAAsB,EAA3C;AACD,GAhEmC,CAkEpC;;;AACA,SAAOr2M,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS01M,UAAT,CAAoB1jB,EAApB,EAAwB;AACtB,SAAOA,EAAE,GACLskB,QAAQ,IAAI,IAAI7yM,OAAJ,CAAY,CAAC8yM,MAAD,EAAS5yM,MAAT,KAAoB;AAC1CquL,IAAAA,EAAE,CAACwkB,QAAH,CAAYF,QAAZ,EAAsB,CAACn3L,KAAD,EAAQrV,IAAR,KAAiB;AACrC,UAAIqV,KAAJ,EAAWxb,MAAM,CAACwb,KAAD,CAAN,CAAX,KACKo3L,MAAM,CAACzsM,IAAD,CAAN;AACN,KAHD;AAID,GALW,CADP,GAOL2sM,UAPJ;AAQD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,wBAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASd,UAAT,CAAoBtsM,KAApB,EAA2B;AACzB,SAAOA,KAAK,GACR,gBAAe6tG,GAAf,EAAoBzlC,OAApB,EAA6B;AAC3B,UAAMs9H,GAAG,GAAG,sBAAO,EAAP,EAAW,KAAKt9H,OAAL,CAAa60C,IAAxB,EAA8B70C,OAA9B,CAAZ;AAAA,UACM12D,IAAI,GAAG02D,OAAO,IAAIA,OAAO,CAAC4wC,QADhC;AAAA,UAEMA,QAAQ,GAAG,MAAMh5G,KAAK,CAAC6tG,GAAD,EAAM63F,GAAN,CAF5B;AAIA,WAAO,CAAC1sF,QAAQ,CAAC6C,EAAV,GACH,qBAAM7C,QAAQ,CAACj1F,MAAT,GAAkB,EAAlB,GAAuBi1F,QAAQ,CAACivE,UAAtC,CADG,GAEH,0BAAWjvE,QAAQ,CAACtnG,IAAD,CAAnB,IAA6BsnG,QAAQ,CAACtnG,IAAD,CAAR,EAA7B,GACAsnG,QAAQ,CAAC7O,IAAT,EAHJ;AAID,GAVO,GAWRkjG,UAXJ;AAYD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,iCAAN;AACD;;;;;;;;;;;AC7LD;;AAEA,MAAMt9H,OAAO,GAAG33D,CAAC,IAAIA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAxC;;AAEA,MAAMpb,SAAS,GAAGob,CAAC,IAAIA,CAAC,KAAK,MAAN,IAClBA,CAAC,KAAK,OADY,IAElBA,CAAC,KAAK,IAFY,IAGlBA,CAAC,KAAK,KAHX;;AAKA,MAAMizL,MAAM,GAAGjzL,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAakrE,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAb,CAArB;;AAEA,MAAMnb,QAAQ,GAAGmb,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAa,CAAC+b,CAAd,CAAD,IAAqB,EAAEA,CAAC,YAAYmvD,IAAf,CAA3C;;AAEA,MAAMzoE,SAAS,GAAGsZ,CAAC,IAAInb,QAAQ,CAACmb,CAAD,CAAR,IAAevZ,MAAM,CAACC,SAAP,CAAiB,CAACsZ,CAAlB,CAAtC;;AAEO,MAAMk1L,WAAW,GAAG;AACzBC,EAAAA,OAAO,EAAE7B,mBADgB;AAEzB8B,EAAAA,OAAO,EAAErG,kBAFgB;AAGzBsG,EAAAA,MAAM,EAAGtG,kBAHgB;AAIzBY,EAAAA,IAAI,EAAK4D,gBAJgB;AAKzB+B,EAAAA,MAAM,EAAGtsM,kBALgB;AAMzBkrJ,EAAAA,OAAO,EAAE56B;AANgB,CAApB;;AASP,MAAMi8E,SAAS,GAAG,CAChB3wM,SADgB,EAEhB8B,SAFgB,EAGhB7B,QAHgB,EAIhBouM,MAJgB,CAAlB;AAOA,MAAMuC,QAAQ,GAAG,CACf,SADe,EAEf,SAFe,EAGf,QAHe,EAIf,MAJe,CAAjB;;AAOO,SAASC,SAAT,CAAmBhyM,MAAnB,EAA2BorH,KAA3B,EAAkC;AACvC,MAAI,CAACprH,MAAD,IAAW,CAACA,MAAM,CAAC9K,MAAvB,EAA+B,OAAO,SAAP;AAE/B,QAAM4O,CAAC,GAAG9D,MAAM,CAAC9K,MAAjB;AAAA,QACMm4F,CAAC,GAAGykH,SAAS,CAAC58M,MADpB;AAAA,QAEM4H,CAAC,GAAGg1M,SAAS,CAACzyM,GAAV,CAAc,CAACkd,CAAD,EAAI3mB,CAAJ,KAAUA,CAAC,GAAG,CAA5B,CAFV;;AAIA,OAAK,IAAIA,CAAC,GAAG,CAAR,EAAW0D,CAAC,GAAG,CAAf,EAAkBuG,CAAlB,EAAqBjH,KAA1B,EAAiChD,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CgD,IAAAA,KAAK,GAAGwyH,KAAK,GAAGprH,MAAM,CAACpK,CAAD,CAAN,CAAUw1H,KAAV,CAAH,GAAsBprH,MAAM,CAACpK,CAAD,CAAzC;;AACA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB,UAAI/C,CAAC,CAAC+C,CAAD,CAAD,IAAQq0E,OAAO,CAACt7E,KAAD,CAAf,IAA0B,CAACk5M,SAAS,CAACjyM,CAAD,CAAT,CAAajH,KAAb,CAA/B,EAAoD;AAClDkE,QAAAA,CAAC,CAAC+C,CAAD,CAAD,GAAO,CAAP;AACA,UAAEvG,CAAF;AACA,YAAIA,CAAC,KAAKw4M,SAAS,CAAC58M,MAApB,EAA4B,OAAO,QAAP;AAC7B;AACF;AACF;;AAED,SAAO68M,QAAQ,CACbj1M,CAAC,CAACqF,MAAF,CAAS,CAACyyE,CAAD,EAAI9sE,CAAJ,KAAU8sE,CAAC,KAAK,CAAN,GAAU9sE,CAAV,GAAc8sE,CAAjC,EAAoC,CAApC,IAAyC,CAD5B,CAAf;AAGD;;AAEM,SAASq9H,UAAT,CAAoBrtM,IAApB,EAA0B8uC,MAA1B,EAAkC;AACvC,SAAOA,MAAM,CAACvxC,MAAP,CAAc,CAAC+vM,KAAD,EAAQ9mF,KAAR,KAAkB;AACrC8mF,IAAAA,KAAK,CAAC9mF,KAAD,CAAL,GAAe4mF,SAAS,CAACptM,IAAD,EAAOwmH,KAAP,CAAxB;AACA,WAAO8mF,KAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;;;;;;;;;AClED;;AACA;;AAEO,SAASuD,eAAT,CAAyB7wB,SAAzB,EAAoC;AACzC,QAAM9sI,KAAK,GAAG,UAASlzC,IAAT,EAAeuzG,MAAf,EAAuB;AACnC,UAAMu9F,KAAK,GAAG;AAAC9wB,MAAAA,SAAS,EAAEA;AAAZ,KAAd;AACA,WAAO+wB,GAAG,CAAC/wM,IAAD,EAAOuzG,MAAM,GAAG,sBAAOA,MAAP,EAAeu9F,KAAf,CAAH,GAA2BA,KAAxC,CAAV;AACD,GAHD;;AAKA59J,EAAAA,KAAK,CAAC89J,YAAN,GAAqB,MAArB;AAEA,SAAO99J,KAAP;AACD;;AAEc,SAAS69J,GAAT,CAAa/wM,IAAb,EAAmBuzG,MAAnB,EAA2B;AACxC,MAAIA,MAAM,CAAC09F,MAAX,EAAmB;AACjBjxM,IAAAA,IAAI,GAAGuzG,MAAM,CAAC09F,MAAP,CACJx2M,GADI,CACAy2M,qBADA,EAEJt8M,IAFI,CAEC2+G,MAAM,CAACysE,SAFR,IAEqB,IAFrB,GAE4BhgL,IAFnC;AAGD;;AACD,SAAO,sBAAUuzG,MAAM,CAACysE,SAAjB,EAA4B9sI,KAA5B,CAAkClzC,IAAI,GAAG,EAAzC,CAAP;AACD;;AAED+wM,GAAG,CAACC,YAAJ,GAAmB,MAAnB;;;;;;;;;;ACvBA;;AAIA,SAASG,QAAT,CAAkBx5L,CAAlB,EAAqB;AACnB,SAAQ,OAAO6zF,MAAP,KAAkB,UAAlB,IAAgC,0BAAWA,MAAM,CAAC2lG,QAAlB,CAAjC,GACH3lG,MAAM,CAAC2lG,QAAP,CAAgBx5L,CAAhB,CADG,GACkB,KADzB;AAED;;AAEc,SAAS4jG,IAAT,CAAcv7G,IAAd,EAAoBuzG,MAApB,EAA4B;AACzC,QAAMxrC,IAAI,GAAIwrC,MAAM,IAAIA,MAAM,CAACg1F,QAAlB,GAA8B,qBAAMh1F,MAAM,CAACg1F,QAAb,CAA9B,GAAuDt3E,kBAApE;AACA,SAAO,wBAASjxH,IAAT,KAAkB,CAACmxM,QAAQ,CAACnxM,IAAD,CAA3B,GACHoxM,SAAS,CAACrpI,IAAI,CAAC/nE,IAAD,CAAL,EAAauzG,MAAb,CADN,GAEHxrC,IAAI,CAAC90B,IAAI,CAACC,KAAL,CAAWlzC,IAAX,CAAD,CAFR;AAGD;;AAEDu7G,IAAI,CAACy1F,YAAL,GAAoB,MAApB;;AAEA,SAASI,SAAT,CAAmBpxM,IAAnB,EAAyBuzG,MAAzB,EAAiC;AAC/B,MAAI,CAAC,uBAAQvzG,IAAR,CAAD,IAAkB,0BAAWA,IAAX,CAAtB,EAAwC;AACtCA,IAAAA,IAAI,GAAG,CAAC,GAAGA,IAAJ,CAAP;AACD;;AACD,SAAQuzG,MAAM,IAAIA,MAAM,CAACztC,IAAlB,GACH7yB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAenzC,IAAf,CAAX,CADG,GAEHA,IAFJ;AAGD;;;;;;;;;ACzBD;;AACA;;AACA;;;;AAEA,MAAMqnJ,OAAO,GAAG;AACd6tD,EAAAA,QAAQ,EAAE,CAACh9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G,CADZ;AAEdo2M,EAAAA,QAAQ,EAAE,CAACj9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G;AAFZ,CAAhB;;AAKe,SAASq2M,QAAT,CAAkBp1M,IAAlB,EAAwBuzG,MAAxB,EAAgC;AAC7C,MAAItxE,MAAJ,EAAYo2J,MAAZ,EAAoBkQ,QAApB,EAA8Bp8L,MAA9B;AACAnM,EAAAA,IAAI,GAAG,mBAAKA,IAAL,EAAWuzG,MAAX,CAAP;;AAEA,MAAIA,MAAM,IAAIA,MAAM,CAAC0+F,OAArB,EAA8B;AAC5BhwK,IAAAA,MAAM,GAAGgwK,uBAAT;AACA1J,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC0+F,OAAlB;AACD,GAHD,MAGO,IAAI1+F,MAAM,IAAIA,MAAM,CAAC8hG,IAArB,EAA2B;AAChCpzK,IAAAA,MAAM,GAAGozK,oBAAT;AACA9M,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC8hG,IAAlB;AACAlpM,IAAAA,MAAM,GAAGk7I,OAAO,CAAC9zC,MAAM,CAACpnG,MAAR,CAAhB;AACD,GAJM,MAIA;AACL,yBAAM,6CAAN;AACD;;AAEDksL,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAGr4L,IAAI,CAACgyM,OAAL,CAAazJ,QAAb,CAAV,IACLtmK,MAAM,CAACjiC,IAAD,EAAOq4L,MAAP,EAAelsL,MAAf,CADD,GAEL,qBAAM,8BAA8Bo8L,QAApC,CAFJ;AAIA,SAAOlQ,MAAM,IAAIA,MAAM,CAACxX,QAAjB,IAA6B,CAACwX,MAAD,CAApC;AACD;;AAED+c,QAAQ,CAACpE,YAAT,GAAwB,MAAxB;;;;;;;;;;;AC/BA;;AACA;;AACA;;AACA;;;;;;;;AAEO,MAAMz9F,MAAM,GAAG;AACpBw9F,EAAAA,GAAG,EAAEA,YADe;AAEpBxoB,EAAAA,GAAG,EAAE,0BAAgB,GAAhB,CAFe;AAGpB2nB,EAAAA,GAAG,EAAE,0BAAgB,IAAhB,CAHe;AAIpB30F,EAAAA,IAAI,EAAEA,aAJc;AAKpB65F,EAAAA,QAAQ,EAAEA;AALU,CAAf;;;AAQA,SAASE,OAAT,CAAiB/iN,IAAjB,EAAuBgjN,MAAvB,EAA+B;AACpC,MAAIxkN,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxBijH,IAAAA,MAAM,CAAChhH,IAAD,CAAN,GAAegjN,MAAf;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO,8BAAehiG,MAAf,EAAuBhhH,IAAvB,IAA+BghH,MAAM,CAAChhH,IAAD,CAArC,GAA8C,IAArD;AACD;AACF;;AAEM,SAASy+M,YAAT,CAAsB//L,IAAtB,EAA4B;AACjC,QAAMtU,CAAC,GAAG24M,OAAO,CAACrkM,IAAD,CAAjB;AACA,SAAOtU,CAAC,IAAIA,CAAC,CAACq0M,YAAP,IAAuB,MAA9B;AACD;;;;;;;;;ACzBD;;AACA;;AACA;;AACA;;AAEe,kBAAShxM,IAAT,EAAe4vN,MAAf,EAAuBC,UAAvB,EAAmCC,SAAnC,EAA8C;AAC3DF,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AAEA,QAAMra,MAAM,GAAG,oBAAQqa,MAAM,CAAC3+M,IAAP,IAAe,MAAvB,CAAf;AACA,MAAI,CAACskM,MAAL,EAAa,qBAAM,+BAA+Bqa,MAAM,CAAC3+M,IAA5C;AAEbjR,EAAAA,IAAI,GAAGu1M,MAAM,CAACv1M,IAAD,EAAO4vN,MAAP,CAAb;AACA,MAAIA,MAAM,CAAC18K,KAAX,EAAkBA,KAAK,CAAClzC,IAAD,EAAO4vN,MAAM,CAAC18K,KAAd,EAAqB28K,UAArB,EAAiCC,SAAjC,CAAL;AAElB,MAAI,8BAAe9vN,IAAf,EAAqB,SAArB,CAAJ,EAAqC,OAAOA,IAAI,CAACwE,OAAZ;AACrC,SAAOxE,IAAP;AACD;;AAED,SAASkzC,KAAT,CAAelzC,IAAf,EAAqBstM,KAArB,EAA4BuiB,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,MAAI,CAAC9vN,IAAI,CAAC1P,MAAV,EAAkB,OAD+B,CACvB;;AAE1B,QAAMyqN,MAAM,GAAG,0CAAf;AACA8U,EAAAA,UAAU,GAAGA,UAAU,IAAI9U,MAAM,CAAC+S,SAAlC;AACAgC,EAAAA,SAAS,GAAGA,SAAS,IAAI/U,MAAM,CAACoS,QAAhC;AAEA,MAAIr+K,MAAM,GAAG9uC,IAAI,CAACwE,OAAL,IAAgBzQ,MAAM,CAACof,IAAP,CAAYnT,IAAI,CAAC,CAAD,CAAhB,CAA7B;AAAA,MACI+vN,KADJ;AAAA,MACWvpG,KADX;AAAA,MACkBx1H,CADlB;AAAA,MACqBiK,CADrB;AAAA,MACwBiE,CADxB;AAAA,MAC2BupF,CAD3B;AAGA,MAAI6kH,KAAK,KAAK,MAAd,EAAsBA,KAAK,GAAG,sBAAWttM,IAAX,EAAiB8uC,MAAjB,CAAR;AAEtBA,EAAAA,MAAM,GAAG/6C,MAAM,CAACof,IAAP,CAAYm6L,KAAZ,CAAT;AACA,QAAM0iB,OAAO,GAAGlhL,MAAM,CAACr0C,GAAP,CAAW+rH,KAAK,IAAI;AAClC,UAAMv1G,IAAI,GAAGq8L,KAAK,CAAC9mF,KAAD,CAAlB;AACA,QAAIypG,KAAJ,EAAWn9D,OAAX;;AAEA,QAAI7hJ,IAAI,KAAKA,IAAI,CAACugG,UAAL,CAAgB,OAAhB,KAA4BvgG,IAAI,CAACugG,UAAL,CAAgB,MAAhB,CAAjC,CAAR,EAAmE;AACjEy+G,MAAAA,KAAK,GAAGh/M,IAAI,CAACpc,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAR,CADiE,CAC/B;;AAClCi+J,MAAAA,OAAO,GAAGm9D,KAAK,CAAC,CAAD,CAAf;;AAEA,UAAKn9D,OAAO,CAAC,CAAD,CAAP,KAAe,IAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,IAAtD,IACCwiK,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,GAD1D,EACgE;AAC9DwiK,QAAAA,OAAO,GAAGA,OAAO,CAACz4J,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;AACD;;AAED,YAAM64C,KAAK,GAAG+8K,KAAK,CAAC,CAAD,CAAL,KAAa,KAAb,GAAqBH,SAArB,GAAiCD,UAA/C;AACA,aAAO38K,KAAK,CAAC4/G,OAAD,CAAZ;AACD;;AAED,QAAI,CAAC+5C,kBAAY57L,IAAZ,CAAL,EAAwB;AACtB,YAAM1hB,KAAK,CAAC,6BAA6Bi3H,KAA7B,GAAqC,GAArC,GAA2Cv1G,IAA5C,CAAX;AACD;;AAED,WAAO47L,kBAAY57L,IAAZ,CAAP;AACD,GAtBe,CAAhB;;AAwBA,OAAKjgB,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACc,IAAI,CAAC1P,MAAZ,EAAoBm4F,CAAC,GAAC35C,MAAM,CAACx+C,MAAlC,EAA0CU,CAAC,GAACkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD++N,IAAAA,KAAK,GAAG/vN,IAAI,CAAChP,CAAD,CAAZ;;AACA,SAAKiK,CAAC,GAAC,CAAP,EAAUA,CAAC,GAACwtF,CAAZ,EAAe,EAAExtF,CAAjB,EAAoB;AAClBurH,MAAAA,KAAK,GAAG13E,MAAM,CAAC7zC,CAAD,CAAd;AACA80N,MAAAA,KAAK,CAACvpG,KAAD,CAAL,GAAewpG,OAAO,CAAC/0N,CAAD,CAAP,CAAW80N,KAAK,CAACvpG,KAAD,CAAhB,CAAf;AACD;AACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DD;;AAOA;;AAIA;;AAMA;;;;AAfO,MAAM0pG,MAAM,GAAG,qBACpB,OAAO3wN,KAAP,KAAiB,WAAjB,IAAgCA,KADZ,EACmB;AACvC,IAFoB,CAEf;AAFe,CAAf;;;;;;;;;;ACFP;;AACA;;AACA;;AAEe,SAASykQ,cAAT,CAAwBC,YAAxB,EAAsC;AACnD,OAAKnvC,QAAL,GAAgB,CAAhB;AACA,OAAK+D,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACD;;AAED,IAAI7yQ,SAAS,GAAG4yQ,cAAc,CAAC5yQ,SAA/B;;AAEAA,SAAS,CAACyjO,OAAV,GAAoB,YAAW;AAC7B,SAAO,KAAKC,QAAZ;AACD,CAFD;;AAIA,SAASovC,SAAT,CAAmBh0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAED,SAASqvC,SAAT,CAAmBj0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAED1jO,SAAS,CAACgzQ,WAAV,GAAwB,UAASt4D,GAAT,EAAc;AACpC,MAAIokB,MAAM,GAAG,IAAb;AACAg0C,EAAAA,SAAS,CAACh0C,MAAD,CAAT;AAEA,SAAOA,MAAM,CAAC2I,OAAP,CAAentB,QAAf,CAAwBI,GAAxB,EAA6B;AAAC9oC,IAAAA,OAAO,EAAC;AAAT,GAA7B,EACJ/iK,IADI,CACC,UAASglM,GAAT,EAAc;AAClBk/D,IAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,WAAOjrB,GAAP;AACD,GAJI,EAKJ9wL,KALI,CAKE,YAAW;AAChBgwP,IAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,WAAO,IAAP;AACD,GARI,CAAP;AASD,CAbD;;AAeA9+N,SAAS,CAACizQ,SAAV,GAAsB,UAASv4D,GAAT,EAAc;AAClC,QAAMokB,MAAM,GAAG,IAAf;AAAA,QACMyrB,KAAK,GAAG,wBADd;AAEAuoB,EAAAA,SAAS,CAACh0C,MAAD,CAAT;AAEA,SAAOA,MAAM,CAAC2I,OAAP,CACJntB,QADI,CACKI,GADL,EACU;AAAC9oC,IAAAA,OAAO,EAAE;AAAV,GADV,EAEJ/iK,IAFI,CAEC,UAASglM,GAAT,EAAc;AAClB,UAAM73F,GAAG,GAAG63F,GAAG,CAACzvF,IAAhB;AACA,QAAI,CAACpI,GAAD,IAAQ,CAACuuI,KAAb,EAAoB,MAAM;AAACvuI,MAAAA,GAAG,EAAEA;AAAN,KAAN;AAEpB,UAAMiR,GAAG,GAAG,IAAIs9H,KAAJ,EAAZ,CAJkB,CAMlB;AACA;;AACA,UAAM2oB,IAAI,GAAG,8BAAer/D,GAAf,EAAoB,aAApB,IAAqCA,GAAG,CAACsH,WAAzC,GAAuD,WAApE;AACA,QAAI+3D,IAAI,IAAI,IAAZ,EAAkBjmJ,GAAG,CAACkuF,WAAJ,GAAkB+3D,IAAlB,CATA,CAWlB;;AACAjmJ,IAAAA,GAAG,CAAClI,MAAJ,GAAa,MAAMguJ,SAAS,CAACj0C,MAAD,CAA5B;;AACA7xG,IAAAA,GAAG,CAACxN,OAAJ,GAAc,MAAMszJ,SAAS,CAACj0C,MAAD,CAA7B;;AACA7xG,IAAAA,GAAG,CAACwnE,GAAJ,GAAUz4E,GAAV;AAEA,WAAOiR,GAAP;AACD,GAnBI,EAoBJlqG,KApBI,CAoBE,UAASzkB,CAAT,EAAY;AACjBy0Q,IAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,WAAO;AAACq0C,MAAAA,QAAQ,EAAE,KAAX;AAAkBrrQ,MAAAA,KAAK,EAAE,CAAzB;AAA4B+tB,MAAAA,MAAM,EAAE,CAApC;AAAuC4+J,MAAAA,GAAG,EAAEn2L,CAAC,IAAIA,CAAC,CAAC09G,GAAP,IAAc;AAA1D,KAAP;AACD,GAvBI,CAAP;AAwBD,CA7BD;;AA+BAh8G,SAAS,CAAC67B,KAAV,GAAkB,YAAW;AAC3B,MAAIijM,MAAM,GAAG,IAAb;AACA,SAAO,IAAIv2N,OAAJ,CAAY,UAAS8yM,MAAT,EAAiB;AAClC,aAAS+3D,IAAT,CAAcxwQ,KAAd,EAAqB;AACnB,UAAI,CAACk8N,MAAM,CAAC2E,OAAP,EAAL,EAAuBpoB,MAAM,CAACz4M,KAAD,CAAN,CAAvB,KACKvE,UAAU,CAAC,YAAW;AAAE+0Q,QAAAA,IAAI,CAAC,IAAD,CAAJ;AAAa,OAA3B,EAA6B,EAA7B,CAAV;AACN;;AACDA,IAAAA,IAAI,CAAC,KAAD,CAAJ;AACD,GANM,CAAP;AAOD,CATD;;;;;;;;;ACrEe,kBAASV,MAAT,EAAiBlrP,IAAjB,EAAuB8rP,KAAvB,EAA8B;AAC3C,MAAI9rP,IAAI,CAAC+rP,MAAL,IAAe/rP,IAAI,CAAC4uO,OAAL,KAAiB,CAAhC,IAAqC5uO,IAAI,CAACgsP,aAAL,KAAuB,CAAhE,EAAmE;AACjE,UAAMC,EAAE,GAAGjsP,IAAI,CAACksP,WAAL,IAAoB,IAApB,GAA2B,CAAClsP,IAAI,CAACksP,WAAjC,GAA+C,CAA1D;AACAhB,IAAAA,MAAM,CAACprF,MAAP,CAAcmsF,EAAE,IAAIH,KAAK,GAAGK,eAAe,CAACnsP,IAAD,EAAOisP,EAAP,CAAlB,GAA+B,CAAxC,CAAhB;AACD;;AACD,SAAOf,MAAP;AACD;;AAED,SAASiB,eAAT,CAAyBnsP,IAAzB,EAA+BksP,WAA/B,EAA4C;AAC1C;AACA,SAAOlsP,IAAI,CAACosP,UAAL,IAAmBpsP,IAAI,CAACosP,UAAL,KAAoB,OAAvC,GAAiD,CAAjD,GAAqDF,WAA5D;AACD;;;;;;;;;ACXD;;AAEA,IAAIhB,MAAJ;AAAA,IAAY9lC,EAAZ;AAAA,IAAgBJ,EAAhB;AAAA,IACIqnC,eAAe,GAAGpH,iBAAM,IAD5B;;AAGe,SAAS76F,OAAT,CAAiBrrJ,CAAjB,EAAoB;AACjCmsP,EAAAA,MAAM,GAAGnsP,CAAT;AACA,SAAOqrJ,OAAP;AACD;;AAED,SAASpxK,IAAT,GAAgB,CAAE;;AAElB,SAAS+f,GAAT,CAAaxa,CAAb,EAAgBue,CAAhB,EAAmB;AAAEouP,EAAAA,MAAM,CAACnyP,GAAP,CAAWxa,CAAX,EAAcue,CAAd;AAAmB;;AAExC,SAAS4vP,IAAT,CAAcnuQ,CAAd,EAAiBue,CAAjB,EAAoB;AAAE/D,EAAAA,GAAG,CAACqsN,EAAE,GAAG7mO,CAAN,EAASymO,EAAE,GAAGloN,CAAd,CAAH;AAAsB;;AAE5C,SAAS6vP,IAAT,CAAcpuQ,CAAd,EAAiB;AAAEwa,EAAAA,GAAG,CAACxa,CAAD,EAAI2sQ,MAAM,CAACtgK,EAAX,CAAH;AAAoB;;AAEvC,SAASgiK,IAAT,CAAc9vP,CAAd,EAAiB;AAAE/D,EAAAA,GAAG,CAACmyP,MAAM,CAACrgK,EAAR,EAAY/tF,CAAZ,CAAH;AAAoB;;AAEvCstJ,OAAO,CAACq9F,SAAR,GAAoBzuQ,IAApB;AAEAoxK,OAAO,CAACyrE,SAAR,GAAoB78O,IAApB;AAEAoxK,OAAO,CAACwrE,MAAR,GAAiB82B,IAAjB;AAEAtiG,OAAO,CAAC0rE,MAAR,GAAiB42B,IAAjB;;AAEAtiG,OAAO,CAAC6sE,IAAR,GAAe,UAAS14O,CAAT,EAAYue,CAAZ,EAAe4nC,CAAf,EAAkBC,CAAlB,EAAqB;AAClC5rC,EAAAA,GAAG,CAACxa,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAC,GAAG6nC,CAAZ,CAAH;AACA+nN,EAAAA,IAAI,CAACnuQ,CAAD,EAAIue,CAAJ,CAAJ;AACD,CAHD;;AAKAstJ,OAAO,CAAC2rE,gBAAR,GAA2B,UAASlrI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyB;AAClDuiK,EAAAA,WAAW,CAACjoC,EAAD,EAAKv6H,EAAL,EAAS3zB,EAAT,EAAay1L,IAAb,CAAX;AACAU,EAAAA,WAAW,CAACroC,EAAD,EAAKp6H,EAAL,EAASE,EAAT,EAAa8hK,IAAb,CAAX;AACAF,EAAAA,IAAI,CAACx1L,EAAD,EAAK4zB,EAAL,CAAJ;AACD,CAJD;;AAMA,SAASuiK,WAAT,CAAqB50D,EAArB,EAAyB5tG,EAAzB,EAA6B3zB,EAA7B,EAAiC8nJ,EAAjC,EAAqC;AACnC,QAAMljO,CAAC,GAAG,CAAC28M,EAAE,GAAG5tG,EAAN,KAAa4tG,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EAA3B,CAAV;AACA,MAAI,IAAI/uG,CAAJ,IAASA,CAAC,GAAG,CAAjB,EAAoBkjO,EAAE,CAACvmB,EAAE,GAAG,CAAC5tG,EAAE,GAAG4tG,EAAN,IAAY38M,CAAlB,CAAF;AACrB;;AAEDsuK,OAAO,CAAC4rE,aAAR,GAAwB,UAASnrI,EAAT,EAAaD,EAAb,EAAiB1zB,EAAjB,EAAqB4zB,EAArB,EAAyBgtI,EAAzB,EAA6BC,EAA7B,EAAiC;AACvDy1B,EAAAA,YAAY,CAACpoC,EAAD,EAAKv6H,EAAL,EAAS3zB,EAAT,EAAa4gK,EAAb,EAAiB60B,IAAjB,CAAZ;AACAa,EAAAA,YAAY,CAACxoC,EAAD,EAAKp6H,EAAL,EAASE,EAAT,EAAaitI,EAAb,EAAiB60B,IAAjB,CAAZ;AACAF,EAAAA,IAAI,CAAC50B,EAAD,EAAKC,EAAL,CAAJ;AACD,CAJD;;AAMA,SAASy1B,YAAT,CAAsB/0D,EAAtB,EAA0B5tG,EAA1B,EAA8B3zB,EAA9B,EAAkC4gK,EAAlC,EAAsC9Y,EAAtC,EAA0C;AACxC,QAAM1/N,CAAC,GAAGw4O,EAAE,GAAGr/B,EAAL,GAAU,IAAI5tG,EAAd,GAAmB,IAAI3zB,EAAjC;AAAA,QACM/wE,CAAC,GAAGsyM,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EADxB;AAAA,QAEMhmG,CAAC,GAAG4zM,EAAE,GAAG5tG,EAFf;AAIA,MAAIw4G,EAAE,GAAG,CAAT;AAAA,MAAYtkI,EAAE,GAAG,CAAjB;AAAA,MAAoB34E,CAApB,CALwC,CAOxC;;AACA,MAAIjI,IAAI,CAACiT,GAAL,CAAS9R,CAAT,IAAcylQ,kBAAlB,EAA2B;AACzB;AACA3+P,IAAAA,CAAC,GAAGD,CAAC,GAAGA,CAAJ,GAAQtB,CAAC,GAAGvF,CAAhB;;AACA,QAAI8G,CAAC,IAAI,CAAT,EAAY;AACVA,MAAAA,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAU4F,CAAV,CAAJ;AACAi9M,MAAAA,EAAE,GAAG,CAAC,CAACl9M,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACAy/E,MAAAA,EAAE,GAAG,CAAC,CAAC54E,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACD;AACF,GARD,MAQO;AACL;AACA+jN,IAAAA,EAAE,GAAG,MAAMx+M,CAAN,GAAUsB,CAAf;AACD,GAnBuC,CAqBxC;;;AACA,MAAI,IAAIk9M,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsB2b,EAAE,CAACyuC,KAAK,CAACpqD,EAAD,EAAK5K,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACtB,MAAI,IAAI/4J,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsBigJ,EAAE,CAACyuC,KAAK,CAAC1uL,EAAD,EAAK05H,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACvB;;AAED,SAAS21B,KAAT,CAAe3xQ,CAAf,EAAkB28M,EAAlB,EAAsB5tG,EAAtB,EAA0B3zB,EAA1B,EAA8B4gK,EAA9B,EAAkC;AAChC,QAAMl8O,CAAC,GAAG,IAAIE,CAAd;AAAA,QAAiBmxE,EAAE,GAAGrxE,CAAC,GAAGA,CAA1B;AAAA,QAA6BojF,EAAE,GAAGljF,CAAC,GAAGA,CAAtC;AACA,SAAQmxE,EAAE,GAAGrxE,CAAL,GAAS68M,EAAV,GAAiB,IAAIxrI,EAAJ,GAASnxE,CAAT,GAAa+uG,EAA9B,GAAqC,IAAIjvG,CAAJ,GAAQojF,EAAR,GAAa9H,EAAlD,GAAyD8H,EAAE,GAAGljF,CAAL,GAASg8O,EAAzE;AACD;;AAED1tE,OAAO,CAAC+uC,GAAR,GAAc,UAASkgC,EAAT,EAAaC,EAAb,EAAiBlzO,CAAjB,EAAoB+iQ,EAApB,EAAwBC,EAAxB,EAA4BryB,GAA5B,EAAiC;AAC7C;AACA3R,EAAAA,EAAE,GAAGh/N,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASi3P,EAAT,CAAJ,GAAmB/vB,EAAxB;AACArU,EAAAA,EAAE,GAAG5+N,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASk3P,EAAT,CAAJ,GAAmB9vB,EAAxB;;AAEA,MAAIn7O,IAAI,CAACiT,GAAL,CAASg4P,EAAE,GAAGD,EAAd,IAAoBkD,eAAxB,EAAyC;AACvC;AACAtzP,IAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACA2S,IAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACD,GAJD,MAIO;AACL,UAAMkhF,MAAM,GAAGhoF,CAAC,IAAIyZ,GAAG,CAAC3S,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAJ,GAAkB+5O,EAAnB,EAAuBjzO,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAJ,GAAkBg6O,EAAzC,CAAvB;;AACA,QAAI19O,CAAJ,EAAOxD,CAAP,CAFK,CAIL;;AACAkvF,IAAAA,MAAM,CAAC6hL,EAAD,CAAN;AACA7hL,IAAAA,MAAM,CAAC8hL,EAAD,CAAN,CANK,CAQL;;AACA,QAAIA,EAAE,KAAKD,EAAX,EAAe;AACbA,MAAAA,EAAE,GAAGA,EAAE,GAAGlE,cAAV;AAAe,UAAIkE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAIlE,cAAN;AAC3BmE,MAAAA,EAAE,GAAGA,EAAE,GAAGnE,cAAV;AAAe,UAAImE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAInE,cAAN;;AAE3B,UAAImE,EAAE,GAAGD,EAAT,EAAa;AACXpyB,QAAAA,GAAG,GAAG,CAACA,GAAP,CADW,CACC;;AACZn7O,QAAAA,CAAC,GAAGutQ,EAAJ;AAAQA,QAAAA,EAAE,GAAGC,EAAL;AAASA,QAAAA,EAAE,GAAGxtQ,CAAL,CAFN,CAEc;AAC1B;;AAED,UAAIm7O,GAAJ,EAAS;AACPqyB,QAAAA,EAAE,IAAInE,cAAN;AACArpQ,QAAAA,CAAC,GAAGutQ,EAAE,GAAIA,EAAE,GAAGnE,iBAAf;;AACA,aAAK5sQ,CAAC,GAAC,CAAP,EAAUA,CAAC,GAAC,CAAF,IAAOwD,CAAC,GAACwtQ,EAAnB,EAAuB,EAAEhxQ,CAAF,EAAKwD,CAAC,IAAEopQ,iBAA/B,EAAuC19K,MAAM,CAAC1rF,CAAD,CAAN;AACxC,OAJD,MAIO;AACLA,QAAAA,CAAC,GAAGutQ,EAAE,GAAIA,EAAE,GAAGnE,iBAAX,GAAqBA,iBAAzB;;AACA,aAAK5sQ,CAAC,GAAC,CAAP,EAAUA,CAAC,GAAC,CAAF,IAAOwD,CAAC,GAACwtQ,EAAnB,EAAuB,EAAEhxQ,CAAF,EAAKwD,CAAC,GAACA,CAAC,GAACopQ,iBAAhC,EAAwC19K,MAAM,CAAC1rF,CAAD,CAAN;AACzC;AACF;AACF;AACF,CArCD;;;;;;;;;ACjFA;;AAEO,IAAIwuK,OAAO,GAAG,mBAACA,OAAO,GAAG,wBAAO,CAAP,EAAS,CAAT,CAAX,IACjBA,OAAO,CAAC9iJ,UAAR,CAAmB,IAAnB,CADiB,GAEjB,IAFG;;;;;;;;;;;;;;ACFP;;AACA;;;;AAEA,MAAMnhB,CAAC,GAAG,IAAIykQ,eAAJ,EAAV;;AAEO,SAAS+C,aAAT,CAAuBrwB,IAAvB,EAA6B;AAClC,SAAO,UAASt9N,IAAT,EAAe4tP,KAAf,EAAsB;AAC3B;AACA,QAAI,CAACxjG,gBAAL,EAAc,OAAO,IAAP,CAFa,CAI3B;;AACAkzE,IAAAA,IAAI,CAAClzE,gBAAD,EAAUpqJ,IAAV,CAAJ,CAL2B,CAO3B;;AACA7Z,IAAAA,CAAC,CAAC0pM,KAAF,GAAUmR,KAAV,CAAgBhhM,IAAI,CAACkrP,MAArB,EAA6BrzB,SAA7B,CAAuC+1B,KAAvC,EAA8CnpQ,KAA9C;AACA,UAAM;AAAComG,MAAAA,EAAD;AAAKD,MAAAA,EAAL;AAAS1zB,MAAAA,EAAT;AAAa4zB,MAAAA;AAAb,QAAmB3kG,CAAzB,CAT2B,CAW3B;AACA;;AACA,SAAK,IAAI2W,CAAC,GAAG8tF,EAAb,EAAiB9tF,CAAC,IAAIguF,EAAtB,EAA0B,EAAEhuF,CAA5B,EAA+B;AAC7B,WAAK,IAAIve,CAAC,GAAGssG,EAAb,EAAiBtsG,CAAC,IAAI24E,EAAtB,EAA0B,EAAE34E,CAA5B,EAA+B;AAC7B,YAAI6rK,iBAAQyjG,aAAR,CAAsBtvQ,CAAtB,EAAyBue,CAAzB,CAAJ,EAAiC;AAC/B,iBAAO,IAAP;AACD;AACF;AACF,KAnB0B,CAqB3B;;;AACA,WAAO,KAAP;AACD,GAvBD;AAwBD;;AAEM,SAASgxP,cAAT,CAAwB9tP,IAAxB,EAA8Bk8L,GAA9B,EAAmC;AACxC,SAAOA,GAAG,CAAC+uD,QAAJ,CAAajrP,IAAI,CAACzhB,CAAL,IAAU,CAAvB,EAA0ByhB,IAAI,CAAClD,CAAL,IAAU,CAApC,CAAP;AACD;;AAEM,SAASixP,aAAT,CAAuB/tP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AACvC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEM4nC,CAAC,GAAG1kC,IAAI,CAAC1f,KAAL,IAAc,CAFxB;AAAA,QAGMqkD,CAAC,GAAG3kC,IAAI,CAACqO,MAAL,IAAe,CAHzB;AAIA,SAAO6tL,GAAG,CAACpW,UAAJ,CAAe3/L,CAAC,CAACpL,GAAF,CAAMwD,CAAN,EAASue,CAAT,EAAYve,CAAC,GAAGmmD,CAAhB,EAAmB5nC,CAAC,GAAG6nC,CAAvB,CAAf,CAAP;AACD;;AAEM,SAASqpN,aAAT,CAAuBhuP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AACvC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEMo6D,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B34E,CAFvC;AAAA,QAGMusG,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BhuF,CAHvC;AAIA,SAAOmxP,gBAAgB,CAAC/xD,GAAD,EAAM39M,CAAN,EAASue,CAAT,EAAYo6D,EAAZ,EAAgB4zB,EAAhB,CAAvB;AACD;;AAEM,SAASmjK,gBAAT,CAA0B/xD,GAA1B,EAA+B39M,CAA/B,EAAkCue,CAAlC,EAAqCs6D,CAArC,EAAwC9sE,CAAxC,EAA2C;AAChD,QAAM;AAACugG,IAAAA,EAAD;AAAKD,IAAAA,EAAL;AAAS1zB,IAAAA,EAAT;AAAa4zB,IAAAA;AAAb,MAAmBoxG,GAAzB;AAAA,QACMh4L,EAAE,GAAGkzD,CAAC,GAAG74E,CADf;AAAA,QAEM2e,EAAE,GAAG5S,CAAC,GAAGwS,CAFf;AAIA,MAAIumM,EAAE,GAAG,CAAT;AAAA,MAAYtkI,EAAE,GAAG,CAAjB;AAAA,MAAoBriD,CAApB;AAAA,MAAuBozD,CAAvB;AAAA,MAA0B1pF,CAA1B;AAAA,MAA6BtP,CAA7B;;AAEA,OAAKA,CAAC,GAAC,CAAP,EAAUA,CAAC,GAAC,CAAZ,EAAe,EAAEA,CAAjB,EAAoB;AAClB,QAAIA,CAAC,KAAK,CAAV,EAAa;AAAE4lC,MAAAA,CAAC,GAAG,CAACxY,EAAL;AAAS4rE,MAAAA,CAAC,GAAG,EAAE+a,EAAE,GAAGtsG,CAAP,CAAJ;AAAgB;;AACxC,QAAIzH,CAAC,KAAK,CAAV,EAAa;AAAE4lC,MAAAA,CAAC,GAAIxY,EAAL;AAAS4rE,MAAAA,CAAC,GAAK5Y,EAAE,GAAG34E,CAAX;AAAgB;;AACxC,QAAIzH,CAAC,KAAK,CAAV,EAAa;AAAE4lC,MAAAA,CAAC,GAAG,CAACxf,EAAL;AAAS4yE,MAAAA,CAAC,GAAG,EAAE8a,EAAE,GAAG9tF,CAAP,CAAJ;AAAgB;;AACxC,QAAIhmB,CAAC,KAAK,CAAV,EAAa;AAAE4lC,MAAAA,CAAC,GAAIxf,EAAL;AAAS4yE,MAAAA,CAAC,GAAKgb,EAAE,GAAGhuF,CAAX;AAAgB;;AAExC,QAAI3e,IAAI,CAACiT,GAAL,CAASsrB,CAAT,IAAc,KAAd,IAAuBozD,CAAC,GAAG,CAA/B,EAAkC,OAAO,KAAP;AAElC1pF,IAAAA,CAAC,GAAG0pF,CAAC,GAAGpzD,CAAR;;AAEA,QAAIA,CAAC,GAAG,CAAR,EAAW;AACT,UAAIt2B,CAAC,GAAG24E,EAAR,EAAY,OAAO,KAAP,CAAZ,KACK,IAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AAClB,KAHD,MAGO,IAAIs2B,CAAC,GAAG,CAAR,EAAW;AAChB,UAAIt2B,CAAC,GAAGi9M,EAAR,EAAY,OAAO,KAAP,CAAZ,KACK,IAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AAClB;AACF;;AAED,SAAO,IAAP;AACD;;;;;;;;;AC/Ec,kBAASgkK,OAAT,EAAkBpqJ,IAAlB,EAAwB;AACrCoqJ,EAAAA,OAAO,CAAC+jG,wBAAR,GAAmCnuP,IAAI,CAACkuP,KAAL,IAAc,aAAjD;AACD;;;;;;;;;ACFc,kBAAS9yQ,KAAT,EAAgBonQ,IAAhB,EAAsB;AACnC,SAAOpnQ,KAAK,IAAI,IAAT,GAAgBonQ,IAAhB,GAAuBpnQ,KAA9B;AACD;;;;;;;;;ACFD;;AACA;;;;AAEA,SAASizQ,QAAT,CAAkBzsP,QAAlB,EAA4BuhP,KAA5B,EAAmC;AACjC,QAAM78P,CAAC,GAAG68P,KAAK,CAACzrQ,MAAhB;;AACA,OAAK,IAAIU,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBwpB,IAAAA,QAAQ,CAAC0sP,YAAT,CAAsBnL,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MAA/B,EAAuCo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P,KAAhD;AACD;;AACD,SAAOhsO,QAAP;AACD;;AAEc,kBAASwoJ,OAAT,EAAkBv4D,IAAlB,EAAwBq5J,MAAxB,EAAgC;AAC7C,QAAMxmN,CAAC,GAAGwmN,MAAM,CAAC5qQ,KAAP,EAAV;AAAA,QACMqkD,CAAC,GAAGumN,MAAM,CAAC78O,MAAP,EADV;AAEA,MAAIzM,QAAJ;;AAGA,MAAIiwF,IAAI,CAACjwF,QAAL,KAAkB,QAAtB,EAAgC;AAC9BA,IAAAA,QAAQ,GAAGwoJ,OAAO,CAACmkG,oBAAR,CACTrD,MAAM,CAACrgK,EAAP,GAAY,oBAAMgH,IAAI,CAAChH,EAAX,EAAe,GAAf,IAAsBnmD,CADzB,EAETwmN,MAAM,CAACtgK,EAAP,GAAY,oBAAMiH,IAAI,CAACjH,EAAX,EAAe,GAAf,IAAsBjmD,CAFzB,EAGTxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiB,oBAAMktD,IAAI,CAAC24F,EAAX,EAAe,CAAf,CAHR,EAIT0gE,MAAM,CAACrgK,EAAP,GAAY,oBAAMgH,IAAI,CAAC36B,EAAX,EAAe,GAAf,IAAsBxyB,CAJzB,EAKTwmN,MAAM,CAACtgK,EAAP,GAAY,oBAAMiH,IAAI,CAAC/G,EAAX,EAAe,GAAf,IAAsBnmD,CALzB,EAMTxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiB,oBAAMktD,IAAI,CAAC44F,EAAX,EAAe,GAAf,CANR,CAAX;AAQD,GATD,MASO;AAAE;AACP,UAAM5/F,EAAE,GAAG,oBAAMgH,IAAI,CAAChH,EAAX,EAAe,CAAf,CAAX;AAAA,UACMD,EAAE,GAAG,oBAAMiH,IAAI,CAACjH,EAAX,EAAe,CAAf,CADX;AAAA,UAEM1zB,EAAE,GAAG,oBAAM26B,IAAI,CAAC36B,EAAX,EAAe,CAAf,CAFX;AAAA,UAGM4zB,EAAE,GAAG,oBAAM+G,IAAI,CAAC/G,EAAX,EAAe,CAAf,CAHX;;AAKA,QAAID,EAAE,KAAK3zB,EAAP,IAAa0zB,EAAE,KAAKE,EAApB,IAA0BpmD,CAAC,KAAKC,CAApC,EAAuC;AACrC;AACA/iC,MAAAA,QAAQ,GAAGwoJ,OAAO,CAACokG,oBAAR,CACTtD,MAAM,CAACrgK,EAAP,GAAYA,EAAE,GAAGnmD,CADR,EAETwmN,MAAM,CAACtgK,EAAP,GAAYA,EAAE,GAAGjmD,CAFR,EAGTumN,MAAM,CAACrgK,EAAP,GAAY3zB,EAAE,GAAGxyB,CAHR,EAITwmN,MAAM,CAACtgK,EAAP,GAAYE,EAAE,GAAGnmD,CAJR,CAAX;AAMD,KARD,MAQO;AACL;AACA;AACA,YAAMvxC,KAAK,GAAG,wBAAOjV,IAAI,CAACoC,IAAL,CAAUmkD,CAAV,CAAP,EAAqBvmD,IAAI,CAACoC,IAAL,CAAUokD,CAAV,CAArB,CAAd;AAAA,YACM8pN,IAAI,GAAGr7P,KAAK,CAACkU,UAAN,CAAiB,IAAjB,CADb;AAGAmnP,MAAAA,IAAI,CAACxgQ,KAAL,CAAWy2C,CAAX,EAAcC,CAAd;AACA8pN,MAAAA,IAAI,CAACC,SAAL,GAAiBL,QAAQ,CACvBI,IAAI,CAACD,oBAAL,CAA0B3jK,EAA1B,EAA8BD,EAA9B,EAAkC1zB,EAAlC,EAAsC4zB,EAAtC,CADuB,EAEvB+G,IAAI,CAACsxJ,KAFkB,CAAzB;AAIAsL,MAAAA,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoBjqN,CAApB,EAAuBC,CAAvB;AAEA,aAAOylH,OAAO,CAACwkG,aAAR,CAAsBx7P,KAAtB,EAA6B,WAA7B,CAAP;AACD;AACF;;AAED,SAAOi7P,QAAQ,CAACzsP,QAAD,EAAWiwF,IAAI,CAACsxJ,KAAhB,CAAf;AACD;;;;;;;;;AC1DD;;AACA;;;;AAEe,kBAAS/4F,OAAT,EAAkBpqJ,IAAlB,EAAwB5kB,KAAxB,EAA+B;AAC5C,SAAO,0BAAWA,KAAX,IACH,uBAASgvK,OAAT,EAAkBhvK,KAAlB,EAAyB4kB,IAAI,CAACkrP,MAA9B,CADG,GAEH9vQ,KAFJ;AAGD;;;;;;;;;ACPD;;;;AAEe,kBAASgvK,OAAT,EAAkBpqJ,IAAlB,EAAwB4uO,OAAxB,EAAiC;AAC9CA,EAAAA,OAAO,IAAK5uO,IAAI,CAAC6uP,WAAL,IAAkB,IAAlB,GAAyB,CAAzB,GAA6B7uP,IAAI,CAAC6uP,WAA9C;;AACA,MAAIjgB,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAACskG,SAAR,GAAoB,oBAAMtkG,OAAN,EAAepqJ,IAAf,EAAqBA,IAAI,CAACpX,IAA1B,CAApB;AACA,WAAO,IAAP;AACD,GAJD,MAIO;AACL,WAAO,KAAP;AACD;AACF;;;;;;;;;ACXD;;;;AAEA,IAAIinO,KAAK,GAAG,EAAZ;;AAEe,kBAASzlE,OAAT,EAAkBpqJ,IAAlB,EAAwB4uO,OAAxB,EAAiC;AAC9C,MAAImgB,EAAE,GAAG,CAACA,EAAE,GAAG/uP,IAAI,CAACksP,WAAX,KAA2B,IAA3B,GAAkC6C,EAAlC,GAAuC,CAAhD;AAEA,MAAIA,EAAE,IAAI,CAAV,EAAa,OAAO,KAAP;AAEbngB,EAAAA,OAAO,IAAK5uO,IAAI,CAACgsP,aAAL,IAAoB,IAApB,GAA2B,CAA3B,GAA+BhsP,IAAI,CAACgsP,aAAhD;;AACA,MAAIpd,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAAC4kG,WAAR,GAAsB,oBAAM5kG,OAAN,EAAepqJ,IAAf,EAAqBA,IAAI,CAAC+rP,MAA1B,CAAtB;AAEA3hG,IAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAApB;AACA3kG,IAAAA,OAAO,CAAC8kG,OAAR,GAAkBlvP,IAAI,CAACmvP,SAAL,IAAkB,MAApC;AACA/kG,IAAAA,OAAO,CAACglG,QAAR,GAAmBpvP,IAAI,CAACosP,UAAL,IAAmB,OAAtC;AACAhiG,IAAAA,OAAO,CAACilG,UAAR,GAAqBrvP,IAAI,CAACsvP,gBAAL,IAAyB,EAA9C;;AAEA,QAAIllG,OAAO,CAACmlG,WAAZ,EAAyB;AACvBnlG,MAAAA,OAAO,CAACmlG,WAAR,CAAoBvvP,IAAI,CAACwvP,UAAL,IAAmB3/B,KAAvC;AACAzlE,MAAAA,OAAO,CAACqlG,cAAR,GAAyBzvP,IAAI,CAAC0vP,gBAAL,IAAyB,CAAlD;AACD;;AACD,WAAO,IAAP;AACD,GAdD,MAcO;AACL,WAAO,KAAP;AACD;AACF;;;;;;;;;;;AC3BD,SAASxvE,OAAT,CAAiB5gM,CAAjB,EAAoB6G,CAApB,EAAuB;AACrB,SAAO7G,CAAC,CAACqwQ,MAAF,GAAWxpQ,CAAC,CAACwpQ,MAAb,IAAuBrwQ,CAAC,CAACpB,KAAF,GAAUiI,CAAC,CAACjI,KAA1C;AACD;;AAEM,SAAS0xQ,MAAT,CAAgBC,KAAhB,EAAuB;AAC5B,MAAI,CAACA,KAAK,CAACC,MAAX,EAAmB,OAAOD,KAAK,CAACE,MAAb;AAEnB,MAAIz8J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACIxxF,MAAM,GAAG,EADb;AAAA,MACiB9B,IADjB;AAAA,MACuB5nB,CADvB;AAAA,MAC0BkO,CAD1B;;AAGA,OAAKlO,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC4nB,IAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACA4nB,IAAAA,IAAI,CAAC9hB,KAAL,GAAa9F,CAAb;AACA,QAAI4nB,IAAI,CAAC2vP,MAAT,EAAiB7tP,MAAM,CAACzpB,IAAP,CAAY2nB,IAAZ;AAClB;;AAED6vP,EAAAA,KAAK,CAACC,MAAN,GAAe,KAAf;AACA,SAAOD,KAAK,CAACE,MAAN,GAAejuP,MAAM,CAAC1f,IAAP,CAAY89L,OAAZ,CAAtB;AACD;;AAEM,SAASk9B,KAAT,CAAeyyC,KAAf,EAAsB7+D,OAAtB,EAA+B;AACpC,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MAAyBl7G,CAAzB;AAAA,MAA4BkO,CAA5B;AACA,MAAI,CAACgtG,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B;AAE7B,MAAIq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAAnB;;AAEA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B;AAC3B,SAAKU,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB3+D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACvB;;AACDk7G,IAAAA,KAAK,GAAGy8J,MAAR;AACD;;AAED,OAAK33Q,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC44M,IAAAA,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACD;AACF;;AAEM,SAAS43Q,SAAT,CAAmBH,KAAnB,EAA0B7+D,OAA1B,EAAmC;AACxC,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MAAyB28J,GAAzB;AAAA,MAA8B73Q,CAA9B;AACA,MAAI,CAACk7G,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B,OAAO,IAAP;AAE7B,MAAIq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAAnB;AACA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B47G,KAAK,GAAGy8J,MAAR;;AAE7B,OAAK33Q,CAAC,GAACk7G,KAAK,CAAC57G,MAAb,EAAqB,EAAEU,CAAF,IAAO,CAA5B,GAAgC;AAC9B,QAAI63Q,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;;AAED,MAAI38J,KAAK,KAAKy8J,MAAd,EAAsB;AACpB,SAAKz8J,KAAK,GAACu8J,KAAK,CAACv8J,KAAZ,EAAmBl7G,CAAC,GAACk7G,KAAK,CAAC57G,MAAhC,EAAwC,EAAEU,CAAF,IAAO,CAA/C,GAAmD;AACjD,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB;AACpB,YAAIM,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;AACF;AACF;;AAED,SAAO,IAAP;AACD;;;;;;;;;;AC1DD;;AACA;;AACA;;AACA;;;;AAEO,SAASC,OAAT,CAAiBzpQ,IAAjB,EAAuB;AAC5B,SAAO,UAAS2jK,OAAT,EAAkBylG,KAAlB,EAAyB3E,MAAzB,EAAiC;AACtC,sBAAM2E,KAAN,EAAa,UAAS7vP,IAAT,EAAe;AAC1B,UAAI,CAACkrP,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C;AAC7CiF,QAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBpqJ,IAAhB,EAAsBA,IAAtB,CAAR;AACD;AACF,KAJD;AAKD,GAND;AAOD;;AAEM,SAASowP,OAAT,CAAiB3pQ,IAAjB,EAAuB;AAC5B,SAAO,UAAS2jK,OAAT,EAAkBylG,KAAlB,EAAyB3E,MAAzB,EAAiC;AACtC,QAAI2E,KAAK,CAACv8J,KAAN,CAAY57G,MAAZ,KAAuB,CAACwzQ,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB+pE,KAAK,CAAC3E,MAAxB,CAAlC,CAAJ,EAAwE;AACtEiF,MAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBylG,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAhB,EAAgCu8J,KAAK,CAACv8J,KAAtC,CAAR;AACD;AACF,GAJD;AAKD;;AAED,SAAS68J,QAAT,CAAkB1pQ,IAAlB,EAAwB2jK,OAAxB,EAAiCpqJ,IAAjC,EAAuCszF,KAAvC,EAA8C;AAC5C,MAAIs7I,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AACA,MAAIA,OAAO,KAAK,CAAhB,EAAmB;AAEnB,MAAInoP,IAAI,CAAC2jK,OAAD,EAAU92D,KAAV,CAAR,EAA0B;AAE1B,sBAAM82D,OAAN,EAAepqJ,IAAf;;AAEA,MAAIA,IAAI,CAACpX,IAAL,IAAa,mBAAKwhK,OAAL,EAAcpqJ,IAAd,EAAoB4uO,OAApB,CAAjB,EAA+C;AAC7CxkF,IAAAA,OAAO,CAACxhK,IAAR;AACD;;AAED,MAAIoX,IAAI,CAAC+rP,MAAL,IAAe,qBAAO3hG,OAAP,EAAgBpqJ,IAAhB,EAAsB4uO,OAAtB,CAAnB,EAAmD;AACjDxkF,IAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;;;;;;;;;;;ACtCD;;AACA;;AAEO,SAASsE,IAAT,CAActqP,IAAd,EAAoB;AACzBA,EAAAA,IAAI,GAAGA,IAAI,IAAIymL,gBAAf;AAEA,SAAO,UAASpiC,OAAT,EAAkBylG,KAAlB,EAAyBtxQ,CAAzB,EAA4Bue,CAA5B,EAA+BwzP,EAA/B,EAAmCC,EAAnC,EAAuC;AAC5ChyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AAEA,WAAO,sBAAUX,KAAV,EAAiB,UAAS7vP,IAAT,EAAe;AACrC,UAAI7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAb,CADqC,CAErC;;AACA,UAAK/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAP,IAA8B,CAACpqQ,CAAnC,EAAsC,OAHD,CAIrC;;AACA,UAAI4f,IAAI,CAACqkJ,OAAD,EAAUpqJ,IAAV,EAAgBzhB,CAAhB,EAAmBue,CAAnB,EAAsBwzP,EAAtB,EAA0BC,EAA1B,CAAR,EAAuC,OAAOvwP,IAAP;AACxC,KANM,CAAP;AAOD,GAXD;AAYD;;AAEM,SAASywP,OAAT,CAAiBhqQ,IAAjB,EAAuBiqQ,MAAvB,EAA+B;AACpC,SAAO,UAAStmG,OAAT,EAAkBrmJ,CAAlB,EAAqBxlB,CAArB,EAAwBue,CAAxB,EAA2B;AAChC,QAAIkD,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcskB,CAAd,IAAmBA,CAAC,CAAC,CAAD,CAApB,GAA0BA,CAArC;AAAA,QACInb,IAAI,GAAI8nQ,MAAM,IAAI,IAAX,GAAmB1wP,IAAI,CAACpX,IAAxB,GAA+B8nQ,MAD1C;AAAA,QAEI3E,MAAM,GAAG/rP,IAAI,CAAC+rP,MAAL,IAAe3hG,OAAO,CAACumG,eAFpC;AAAA,QAEqD5B,EAFrD;AAAA,QAEyDv0B,EAFzD;;AAIA,QAAIuxB,MAAJ,EAAY;AACVgD,MAAAA,EAAE,GAAG/uP,IAAI,CAACksP,WAAV;AACA1xB,MAAAA,EAAE,GAAGx6N,IAAI,CAACmvP,SAAV;AACA/kG,MAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAtC;AACA3kG,MAAAA,OAAO,CAAC8kG,OAAR,GAAoB10B,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,MAAtC;AACD;;AAED,WAAO/zO,IAAI,CAAC2jK,OAAD,EAAUrmJ,CAAV,CAAJ,GAAmB,KAAnB,GACJnb,IAAI,IAAIwhK,OAAO,CAACyjG,aAAR,CAAsBtvQ,CAAtB,EAAyBue,CAAzB,CAAT,IACCivP,MAAM,IAAI3hG,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAFb;AAGD,GAfD;AAgBD;;AAEM,SAAS8zP,QAAT,CAAkBnqQ,IAAlB,EAAwB;AAC7B,SAAO4pQ,IAAI,CAACI,OAAO,CAAChqQ,IAAD,CAAR,CAAX;AACD;;;;;;;;;;;;;ACzCM,SAASoyM,SAAT,CAAmBt6M,CAAnB,EAAsBue,CAAtB,EAAyB;AAC9B,SAAO,eAAeve,CAAf,GAAmB,GAAnB,GAAyBue,CAAzB,GAA6B,GAApC;AACD;;AAEM,SAAS61O,MAAT,CAAgBrzP,CAAhB,EAAmB;AACxB,SAAO,YAAYA,CAAZ,GAAgB,GAAvB;AACD;;AAEM,SAAS2O,KAAT,CAAe4kP,MAAf,EAAuBC,MAAvB,EAA8B;AACnC,SAAO,WAAUD,MAAV,GAAmB,GAAnB,GAAyBC,MAAzB,GAAgC,GAAvC;AACD;;AAEM,SAAS+d,aAAT,CAAuB7wP,IAAvB,EAA6B;AAClC,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAhB;AACD;;AAEM,SAASi0P,aAAT,CAAuB/wP,IAAvB,EAA6B;AAClC,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAT,IACFkD,IAAI,CAACu8N,KAAL,GAAa,MAAMoW,MAAM,CAAC3yO,IAAI,CAACu8N,KAAN,CAAzB,GAAwC,EADtC,KAEFv8N,IAAI,CAAC6yO,MAAL,IAAe7yO,IAAI,CAAC8yO,MAApB,GAA6B,MAAM7kP,KAAK,CAAC+R,IAAI,CAAC6yO,MAAL,IAAe,CAAhB,EAAmB7yO,IAAI,CAAC8yO,MAAL,IAAe,CAAlC,CAAxC,GAA+E,EAF7E,CAAP;AAGD;;;;;;;;;ACpBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASz6O,IAAT,EAAezY,KAAf,EAAsBqxQ,KAAtB,EAA6B;AAE1C,WAAS/2O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,IAAAA,IAAI,CAAC,WAAD,EAAc,8BAAcymB,IAAd,CAAd,CAAJ;AACAzmB,IAAAA,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAOogB,IAAP,CAAX,CAAJ;AACD;;AAED,WAASkxP,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3B,QAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,QACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAGAld,IAAAA,KAAK,CAAC,2BAAQsrQ,MAAR,CAAD,EAAkBlrP,IAAlB,CAAL;AACA,8BAAYkrP,MAAZ,EAAoBlrP,IAApB,EAA0B64L,SAA1B,CAAoCt6M,CAApC,EAAuCue,CAAvC;;AACA,QAAIkD,IAAI,CAACu8N,KAAT,EAAgB;AACd2uB,MAAAA,MAAM,CAACvY,MAAP,CAAc3yO,IAAI,CAACu8N,KAAL,GAAauoB,mBAA3B,EAAqCvmQ,CAArC,EAAwCue,CAAxC;AACD;;AAED,WAAOouP,MAAP;AACD;;AAED,WAAS5tB,IAAT,CAAclzE,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,QAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,QACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,QAEIxd,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CAFtB;AAIAnyE,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACA,QAAIxd,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAerzP,CAAC,IAAIwlQ,mBAApB;AACP16F,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAUpqJ,IAAV,CAAL;AACA,QAAI1gB,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACP8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD;;AAED,SAAO;AACLzE,IAAAA,IAAI,EAAIA,IADH;AAEL84P,IAAAA,GAAG,EAAK,MAFH;AAGLC,IAAAA,MAAM,EAAE,KAHH;AAILl3O,IAAAA,IAAI,EAAIA,IAJH;AAKLg3O,IAAAA,KAAK,EAAGA,KALH;AAML5zB,IAAAA,IAAI,EAAI,mBAAQA,IAAR,CANH;AAOL+yB,IAAAA,IAAI,EAAI,oBAAS/yB,IAAT,CAPH;AAQL2zB,IAAAA,KAAK,EAAGA,KAAK,IAAI,8BAAc3zB,IAAd;AARZ,GAAP;AAWD;;;;;;;;;ACpDD;;AACA;;;;eAEe,2BAAa,KAAb,EAAoBnkC,WAApB;;;;;;;;;;;;;ACHR,SAASm4D,QAAT,CAAkBhyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AAC7B,MAAIpyB,CAAC,GAAGhL,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B3tO,CAAC,CAAC,CAAD,CAAhC,GAAsCA,CAAC,CAAC,CAAD,CAA/C;AAAA,MACImxC,CAAC,GAAGvuE,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B,GAA/B,GAAqC,GAD7C;AAAA,MAEIjyQ,CAAC,GAAGkH,CAAC,CAAC5H,MAFV;AAAA,MAGI4G,GAAG,GAAG,CAAC4B,QAHX;AAAA,MAGqB+vQ,GAHrB;AAAA,MAG0BhrQ,CAH1B;;AAKA,SAAO,EAAE7M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bn7M,IAAAA,CAAC,GAAG9G,IAAI,CAACiT,GAAL,CAAS9R,CAAC,CAAClH,CAAD,CAAD,CAAKy1E,CAAL,IAAUvjE,CAAnB,CAAJ;;AACA,QAAIrF,CAAC,GAAG3G,GAAR,EAAa;AACXA,MAAAA,GAAG,GAAG2G,CAAN;AACAgrQ,MAAAA,GAAG,GAAG3wQ,CAAC,CAAClH,CAAD,CAAP;AACD;AACF;;AAED,SAAO63Q,GAAP;AACD;;AAEM,SAASsB,QAAT,CAAkBjyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AAC7B,MAAI5gC,CAAC,GAAGqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,CAAC,CAAD,CAAD,CAAK4sQ,WAAL,IAAoB,CAA7B,EAAgC,CAAhC,CAAR;AAAA,MACI9zQ,CAAC,GAAGkH,CAAC,CAAC5H,MADV;AAAA,MACkBwsB,EADlB;AAAA,MACsBhH,EADtB;AAAA,MAC0B0wL,EAD1B;;AAGA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACA,QAAI0wL,EAAE,GAAG9xM,CAAT,EAAY,OAAOwD,CAAC,CAAClH,CAAD,CAAR;AACb;;AAED,SAAO,IAAP;AACD;;AAEM,SAASo5Q,SAAT,CAAmBlyQ,CAAnB,EAAsBo9B,CAAtB,EAAyB;AAC9B,MAAItkC,CAAC,GAAGkH,CAAC,CAAC5H,MAAV;AAAA,MAAkBwsB,EAAlB;AAAA,MAAsBhH,EAAtB;AAAA,MAA0B0wL,EAA1B;;AAEA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACAgH,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKyH,IAAL,IAAa,CAAlB;AACA,QAAI+tM,EAAE,GAAG1pL,EAAE,GAACA,EAAZ,EAAgB,OAAO5kB,CAAC,CAAClH,CAAD,CAAR;AACjB;;AAED,SAAO,IAAP;AACD;;;;;;;;;AC9CD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASigB,IAAT,EAAezY,KAAf,EAAsB8xQ,GAAtB,EAA2B;AAExC,WAASx3O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxB,QAAIszF,KAAK,GAAGtzF,IAAI,CAACsqP,IAAL,CAAUh3J,KAAtB;AACA,QAAIA,KAAK,CAAC57G,MAAV,EAAkB6B,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAO0zG,KAAP,CAAX,CAAJ;AACnB;;AAED,WAAS49J,KAAT,CAAehG,MAAf,EAAuBZ,IAAvB,EAA6B;AAC3B,QAAIh3J,KAAK,GAAGg3J,IAAI,CAACh3J,KAAjB;;AACA,QAAIA,KAAK,CAAC57G,MAAN,KAAiB,CAArB,EAAwB;AACtB,aAAOwzQ,MAAP;AACD,KAFD,MAEO;AACLtrQ,MAAAA,KAAK,CAAC,2BAAQsrQ,MAAR,CAAD,EAAkB53J,KAAlB,CAAL;AACA,aAAO,0BAAY43J,MAAZ,EAAoB53J,KAAK,CAAC,CAAD,CAAzB,CAAP;AACD;AACF;;AAED,WAASgqI,IAAT,CAAclzE,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B82D,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAU92D,KAAV,CAAL;AACD;;AAED,MAAI28J,GAAG,GAAG,mBAAQ3yB,IAAR,CAAV;;AAEA,WAAS+yB,IAAT,CAAcjmG,OAAd,EAAuBylG,KAAvB,EAA8BtxQ,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,QAAIj9J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,QACIntG,CAAC,GAAG0pQ,KAAK,CAAC3E,MADd;;AAGA,QAAI,CAAC53J,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAAjB,IAA2ByO,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAArC,EAAyD;AACvD,aAAO,IAAP;AACD;;AAEDhyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AACA,WAAOP,GAAG,CAAC7lG,OAAD,EAAU92D,KAAV,EAAiB/0G,CAAjB,EAAoBue,CAApB,CAAH,GAA4Bw2F,KAAK,CAAC,CAAD,CAAjC,GAAuC,IAA9C;AACD;;AAED,SAAO;AACLj7F,IAAAA,IAAI,EAAIA,IADH;AAEL84P,IAAAA,GAAG,EAAK,MAFH;AAGLC,IAAAA,MAAM,EAAE,IAHH;AAILl3O,IAAAA,IAAI,EAAIA,IAJH;AAKLg3O,IAAAA,KAAK,EAAGA,KALH;AAML5zB,IAAAA,IAAI,EAAI,mBAAQA,IAAR,CANH;AAOL+yB,IAAAA,IAAI,EAAIA,IAPH;AAQLY,IAAAA,KAAK,EAAGnD,yBARH;AASL4D,IAAAA,GAAG,EAAKA;AATH,GAAP;AAYD;;;;;;;;;ACvDD;;AACA;;AACA;;;;eAEe,gCAAkB,MAAlB,EAA0Bx2D,YAA1B,EAAgCo2D,kBAAhC;;;;;;;;;;;;ACJf;;AACA;;AAEe,kBAASlnG,OAAT,EAAkBylG,KAAlB,EAAyB;AACtC,MAAIvvO,IAAI,GAAGuvO,KAAK,CAACvvO,IAAjB;AAEA8pI,EAAAA,OAAO,CAAC5lJ,IAAR;;AAEA,MAAI,0BAAW8b,IAAX,CAAJ,EAAsB;AACpB8pI,IAAAA,OAAO,CAACq9F,SAAR;AACAnnO,IAAAA,IAAI,CAAC8pI,OAAD,CAAJ;AACAA,IAAAA,OAAO,CAAC9pI,IAAR;AACD,GAJD,MAIO;AACLuxO,IAAAA,SAAS,CAACznG,OAAD,EAAUylG,KAAK,CAAC9rJ,KAAhB,CAAT;AACD;AACF;;AAEM,SAAS8tJ,SAAT,CAAmBznG,OAAnB,EAA4BrmD,KAA5B,EAAmC;AACxCqmD,EAAAA,OAAO,CAACq9F,SAAR;AACA,+BAAgB1jJ,KAAhB,IACI,uBAAUqmD,OAAV,EAAmBrmD,KAAnB,EAA0B,CAA1B,EAA6B,CAA7B,CADJ,GAEIqmD,OAAO,CAAC6sE,IAAR,CAAa,CAAb,EAAgB,CAAhB,EAAmBlzH,KAAK,CAACzjH,KAAN,IAAe,CAAlC,EAAqCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAArD,CAFJ;AAGA+7I,EAAAA,OAAO,CAAC9pI,IAAR;AACD;;;;;;;;;ACvBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASv7B,MAAT,CAAgBib,IAAhB,EAAsB;AACpB,QAAMisP,EAAE,GAAG,oBAAMjsP,IAAI,CAACksP,WAAX,EAAwB,CAAxB,CAAX;AACA,SAAOlsP,IAAI,CAAC8xP,YAAL,IAAqB,IAArB,GAA4B9xP,IAAI,CAAC8xP,YAAjC,GACH9xP,IAAI,CAAC+rP,MAAL,IAAeE,EAAE,GAAG,GAApB,IAA2BA,EAAE,GAAG,GAAhC,GAAsC,MAAM9tQ,IAAI,CAACiT,GAAL,CAAS66P,EAAE,GAAG,CAAd,CAA5C,GACA,CAFJ;AAGD;;AAED,SAAS/xO,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,EAAAA,IAAI,CAAC,WAAD,EAAc,8BAAcymB,IAAd,CAAd,CAAJ;AACD;;AAED,SAAS+xP,aAAT,CAAuBx4Q,IAAvB,EAA6BymB,IAA7B,EAAmC;AACjC,QAAM5mB,GAAG,GAAG2L,MAAM,CAACib,IAAD,CAAlB;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAM,uBAAU,IAAV,EAAgBymB,IAAhB,EAAsB5mB,GAAtB,EAA2BA,GAA3B,CAAN,CAAJ;AACD;;AAED,SAAS44Q,UAAT,CAAoBz4Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;AACAw4Q,EAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD;;AAED,SAASiyP,UAAT,CAAoB14Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;;AACA,MAAIymB,IAAI,CAACkyP,gBAAT,EAA2B;AACzBH,IAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD,GAFD,MAEO;AACLzmB,IAAAA,IAAI,CAAC,GAAD,EAAM,EAAN,CAAJ;AACD;AACF;;AAED,SAAS44Q,OAAT,CAAiB54Q,IAAjB,EAAuBymB,IAAvB,EAA6ByqP,QAA7B,EAAuC;AACrC,QAAMj2J,GAAG,GAAGx0F,IAAI,CAACsgB,IAAL,GAAY,oBAAKmqO,QAAL,EAAezqP,IAAf,EAAqBA,IAArB,CAAZ,GAAyC,IAArD;AACAzmB,EAAAA,IAAI,CAAC,WAAD,EAAci7G,GAAd,CAAJ;AACD;;AAED,SAAS08J,KAAT,CAAehG,MAAf,EAAuBnnJ,KAAvB,EAA8B;AAC5B,MAAI,CAACA,KAAK,CAACzjF,IAAP,IAAeyjF,KAAK,CAACzQ,KAAzB,EAAgC;AAC9B,UAAMA,KAAK,GAAGyQ,KAAK,CAACzQ,KAApB;AAAA,UAA2BzjB,CAAC,GAAGyjB,KAAK,CAAC57G,MAArC;;AACA,SAAK,IAAI2K,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB6oQ,MAAAA,MAAM,CAAClqD,KAAP,CAAa1tG,KAAK,CAACjxG,CAAD,CAAL,CAAS6oQ,MAAtB;AACD;AACF;;AAED,MAAI,CAACnnJ,KAAK,CAACzjF,IAAN,IAAcyjF,KAAK,CAACzjH,KAApB,IAA6ByjH,KAAK,CAAC11F,MAApC,KAA+C,CAAC01F,KAAK,CAACquJ,OAA1D,EAAmE;AACjElH,IAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBA,GAAjB,CAAqBgrG,KAAK,CAACzjH,KAAN,IAAe,CAApC,EAAuCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAAvD;AACD;;AAED,4BAAY68O,MAAZ,EAAoBnnJ,KAApB;AAEA,SAAOmnJ,MAAM,CAACryD,SAAP,CAAiB90F,KAAK,CAACxlH,CAAN,IAAW,CAA5B,EAA+BwlH,KAAK,CAACjnG,CAAN,IAAW,CAA1C,CAAP;AACD;;AAED,SAASu1P,aAAT,CAAuBjoG,OAAvB,EAAgCrmD,KAAhC,EAAuCxlH,CAAvC,EAA0Cue,CAA1C,EAA6C;AAC3C,QAAM1jB,GAAG,GAAG2L,MAAM,CAACg/G,KAAD,CAAlB;AACAqmD,EAAAA,OAAO,CAACq9F,SAAR;AACA,yBAAUr9F,OAAV,EAAmBrmD,KAAnB,EAA0B,CAACxlH,CAAC,IAAI,CAAN,IAAWnF,GAArC,EAA0C,CAAC0jB,CAAC,IAAI,CAAN,IAAW1jB,GAArD;AACD;;AAED,MAAMk5Q,aAAa,GAAG,mBAAQD,aAAR,CAAtB;AACA,MAAME,aAAa,GAAG,mBAAQF,aAAR,EAAuB,KAAvB,CAAtB;;AAEA,SAAS/0B,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC,oBAAM2E,KAAN,EAAa9rJ,KAAK,IAAI;AACpB,UAAMusJ,EAAE,GAAGvsJ,KAAK,CAACxlH,CAAN,IAAW,CAAtB;AAAA,UACMgyQ,EAAE,GAAGxsJ,KAAK,CAACjnG,CAAN,IAAW,CADtB;AAAA,UAEM21P,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAFnB;AAAA,UAGMtjB,OAAO,GAAG7qI,KAAK,CAAC6qI,OAAN,IAAiB,IAAjB,GAAwB,CAAxB,GAA4B7qI,KAAK,CAAC6qI,OAHlD,CADoB,CAMpB;;AACA,QAAI,CAAC7qI,KAAK,CAACgoJ,MAAN,IAAgBhoJ,KAAK,CAACn7G,IAAvB,KAAgCgmP,OAApC,EAA6C;AAC3CyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACA,0BAAMnmG,OAAN,EAAermD,KAAf;;AACA,UAAIA,KAAK,CAACn7G,IAAN,IAAc,mBAAKwhK,OAAL,EAAcrmD,KAAd,EAAqB6qI,OAArB,CAAlB,EAAiD;AAC/CxkF,QAAAA,OAAO,CAACxhK,IAAR;AACD;;AACD,UAAIm7G,KAAK,CAACgoJ,MAAN,IAAgB,CAAC0G,IAAjB,IAAyB,qBAAOroG,OAAP,EAAgBrmD,KAAhB,EAAuB6qI,OAAvB,CAA7B,EAA8D;AAC5DxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,KAhBmB,CAkBpB;;;AACA3hG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkBy3D,EAAlB,EAAsBC,EAAtB;AACA,QAAIxsJ,KAAK,CAACzjF,IAAV,EAAgB,qBAAU8pI,OAAV,EAAmBrmD,KAAnB;AAChB,QAAImnJ,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiB,CAACy3D,EAAlB,EAAsB,CAACC,EAAvB,EAtBQ,CAwBpB;;AACA,sBAAMxsJ,KAAN,EAAa/jG,IAAI,IAAI;AACnB,WAAKs9N,IAAL,CAAUlzE,OAAV,EAAmBpqJ,IAAnB,EAAyBkrP,MAAzB;AACD,KAFD,EAzBoB,CA6BpB;;AACA,QAAIA,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiBy3D,EAAjB,EAAqBC,EAArB;AACZnmG,IAAAA,OAAO,CAACsoG,OAAR,GA/BoB,CAiCpB;;AACA,QAAID,IAAI,IAAI1uJ,KAAK,CAACgoJ,MAAd,IAAwBnd,OAA5B,EAAqC;AACnCyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACA,0BAAMnmG,OAAN,EAAermD,KAAf;;AACA,UAAI,qBAAOqmD,OAAP,EAAgBrmD,KAAhB,EAAuB6qI,OAAvB,CAAJ,EAAqC;AACnCxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;AACF,GAzCD;AA0CD;;AAED,SAASsE,IAAT,CAAcjmG,OAAd,EAAuBylG,KAAvB,EAA8BtxQ,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,MAAIV,KAAK,CAAC3E,MAAN,IAAgB,CAAC2E,KAAK,CAAC3E,MAAN,CAAaD,QAAb,CAAsBqF,EAAtB,EAA0BC,EAA1B,CAAjB,IAAkD,CAACV,KAAK,CAACv8J,KAA7D,EAAoE;AAClE,WAAO,IAAP;AACD;;AAED,QAAM+lI,EAAE,GAAG96O,CAAC,GAAG6rK,OAAO,CAAComG,UAAvB;AAAA,QACMl3B,EAAE,GAAGx8N,CAAC,GAAGstJ,OAAO,CAAComG,UADvB;AAGA,SAAO,sBAAUX,KAAV,EAAiB9rJ,KAAK,IAAI;AAC/B,QAAIksJ,GAAJ,EAASwC,IAAT,EAAeI,EAAf,EAAmB3uP,EAAnB,EAAuBhH,EAAvB,EAA2BihF,EAA3B,EAA+By0K,EAA/B,EAAmCzsQ,CAAnC,EAAsCtB,CAAtC,CAD+B,CAG/B;;AACAsB,IAAAA,CAAC,GAAG49G,KAAK,CAACmnJ,MAAV;AACA,QAAI/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAV,EAA8B,OALC,CAO/B;;AACArsP,IAAAA,EAAE,GAAG6/F,KAAK,CAACxlH,CAAN,IAAW,CAAhB;AACA2e,IAAAA,EAAE,GAAG6mG,KAAK,CAACjnG,CAAN,IAAW,CAAhB;AACAqhF,IAAAA,EAAE,GAAGj6E,EAAE,IAAI6/F,KAAK,CAACzjH,KAAN,IAAe,CAAnB,CAAP;AACAsyQ,IAAAA,EAAE,GAAG11P,EAAE,IAAI6mG,KAAK,CAAC11F,MAAN,IAAgB,CAApB,CAAP;AACAxpB,IAAAA,CAAC,GAAGk/G,KAAK,CAACzjF,IAAV;AACA,QAAIz7B,CAAC,KAAKyrQ,EAAE,GAAGpsP,EAAL,IAAWosP,EAAE,GAAGnyK,EAAhB,IAAsBoyK,EAAE,GAAGrzP,EAA3B,IAAiCqzP,EAAE,GAAGqC,EAA3C,CAAL,EAAqD,OAbtB,CAe/B;;AACAxoG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkB30L,EAAlB,EAAsBhH,EAAtB;AACAgH,IAAAA,EAAE,GAAGosP,EAAE,GAAGpsP,EAAV;AACAhH,IAAAA,EAAE,GAAGqzP,EAAE,GAAGrzP,EAAV,CAnB+B,CAqB/B;;AACA,QAAIrY,CAAC,IAAI,6BAAgBk/G,KAAhB,CAAL,IAA+B,CAACuuJ,aAAa,CAACloG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAAjD,EAA2E;AACzElvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO,IAAP;AACD;;AAEDD,IAAAA,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAAb;AACAW,IAAAA,EAAE,GAAGhD,KAAK,CAACiD,WAAN,KAAsB,KAA3B,CA5B+B,CA8B/B;;AACA,QAAID,EAAE,IAAIJ,IAAN,IAAc1uJ,KAAK,CAACgoJ,MAApB,IACGwG,aAAa,CAACnoG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CADpB,EAC8C;AAC5ClvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO3uJ,KAAP;AACD,KAnC8B,CAqC/B;;;AACAksJ,IAAAA,GAAG,GAAG,sBAAUlsJ,KAAV,EAAiBumJ,IAAI,IAAIyI,QAAQ,CAACzI,IAAD,EAAOpmP,EAAP,EAAWhH,EAAX,CAAR,GAC3B,KAAKmzP,IAAL,CAAU/F,IAAV,EAAgB/rQ,CAAhB,EAAmBue,CAAnB,EAAsBoH,EAAtB,EAA0BhH,EAA1B,CAD2B,GAE3B,IAFE,CAAN,CAtC+B,CA2C/B;;AACA,QAAI,CAAC+yP,GAAD,IAAQ4C,EAAR,KAAe9uJ,KAAK,CAACn7G,IAAN,IAAe,CAAC6pQ,IAAD,IAAS1uJ,KAAK,CAACgoJ,MAA7C,KACGuG,aAAa,CAACloG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CADpB,EAC8C;AAC5C22B,MAAAA,GAAG,GAAGlsJ,KAAN;AACD,KA/C8B,CAiD/B;;;AACAqmD,IAAAA,OAAO,CAACsoG,OAAR;AACA,WAAOzC,GAAG,IAAI,IAAd;AACD,GApDM,CAAP;AAqDD;;AAED,SAAS8C,QAAT,CAAkBzI,IAAlB,EAAwB/rQ,CAAxB,EAA2Bue,CAA3B,EAA8B;AAC5B,SAAO,CAACwtP,IAAI,CAACwI,WAAL,KAAqB,KAArB,IAA8BxI,IAAI,CAAC0I,QAAL,KAAkB,OAAjD,KACF1I,IAAI,CAACY,MADH,IACaZ,IAAI,CAACY,MAAL,CAAYD,QAAZ,CAAqB1sQ,CAArB,EAAwBue,CAAxB,CADpB;AAED;;eAEc;AACbzE,EAAAA,IAAI,EAAQ,OADC;AAEb84P,EAAAA,GAAG,EAAS,GAFC;AAGbC,EAAAA,MAAM,EAAM,KAHC;AAIbl3O,EAAAA,IAAI,EAAQA,IAJC;AAKbg3O,EAAAA,KAAK,EAAOA,KALC;AAMb5zB,EAAAA,IAAI,EAAQA,IANC;AAOb+yB,EAAAA,IAAI,EAAQA,IAPC;AAQbY,EAAAA,KAAK,EAAOlD,wBARC;AASboE,EAAAA,OAAO,EAAKA,OATC;AAUbH,EAAAA,UAAU,EAAEA,UAVC;AAWbC,EAAAA,UAAU,EAAEA;AAXC;;;;;;;;;eC7LA;AACb,aAAW,KADE;AAEb,WAAS,4BAFI;AAGb,iBAAe;AAHF;;;;;;;;;;ACAf;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASgB,QAAT,CAAkBjzP,IAAlB,EAAwByqP,QAAxB,EAAkC;AAChC,MAAIr3P,KAAK,GAAG4M,IAAI,CAAC5M,KAAjB;;AACA,MAAI,CAACA,KAAD,IAAU4M,IAAI,CAACw0F,GAAL,IAAYx0F,IAAI,CAACw0F,GAAL,KAAaphG,KAAK,CAACohG,GAA7C,EAAkD;AAChDphG,IAAAA,KAAK,GAAG;AAACu4P,MAAAA,QAAQ,EAAE,KAAX;AAAkBrrQ,MAAAA,KAAK,EAAE,CAAzB;AAA4B+tB,MAAAA,MAAM,EAAE;AAApC,KAAR;AACAo8O,IAAAA,QAAQ,CAACgB,SAAT,CAAmBzrP,IAAI,CAACw0F,GAAxB,EAA6BntG,IAA7B,CAAkC+L,KAAK,IAAI;AACzC4M,MAAAA,IAAI,CAAC5M,KAAL,GAAaA,KAAb;AACA4M,MAAAA,IAAI,CAAC5M,KAAL,CAAWohG,GAAX,GAAiBx0F,IAAI,CAACw0F,GAAtB;AACD,KAHD;AAID;;AACD,SAAOphG,KAAP;AACD;;AAED,SAASgsC,UAAT,CAAoBp/B,IAApB,EAA0B5M,KAA1B,EAAiC;AAC/B,SAAO4M,IAAI,CAAC1f,KAAL,IAAc,IAAd,GAAqB0f,IAAI,CAAC1f,KAA1B,GACH,CAAC8S,KAAD,IAAU,CAACA,KAAK,CAAC9S,KAAjB,GAAyB,CAAzB,GACA0f,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAACqO,MAA9B,GAAuCrO,IAAI,CAACqO,MAAL,GAAcjb,KAAK,CAAC9S,KAApB,GAA4B8S,KAAK,CAACib,MAAzE,GACAjb,KAAK,CAAC9S,KAHV;AAID;;AAED,SAAS6+C,WAAT,CAAqBn/B,IAArB,EAA2B5M,KAA3B,EAAkC;AAChC,SAAO4M,IAAI,CAACqO,MAAL,IAAe,IAAf,GAAsBrO,IAAI,CAACqO,MAA3B,GACH,CAACjb,KAAD,IAAU,CAACA,KAAK,CAACib,MAAjB,GAA0B,CAA1B,GACArO,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAAC1f,KAA9B,GAAsC0f,IAAI,CAAC1f,KAAL,GAAa8S,KAAK,CAACib,MAAnB,GAA4Bjb,KAAK,CAAC9S,KAAxE,GACA8S,KAAK,CAACib,MAHV;AAID;;AAED,SAAS8kP,YAAT,CAAsBxiE,KAAtB,EAA6BjsJ,CAA7B,EAAgC;AAC9B,SAAOisJ,KAAK,KAAK,QAAV,GAAqBjsJ,CAAC,GAAG,CAAzB,GAA6BisJ,KAAK,KAAK,OAAV,GAAoBjsJ,CAApB,GAAwB,CAA5D;AACD;;AAED,SAAS0uN,YAAT,CAAsBxqG,QAAtB,EAAgCjkH,CAAhC,EAAmC;AACjC,SAAOikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAC,GAAG,CAA5B,GAAgCikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAxB,GAA4B,CAAnE;AACD;;AAED,SAASzqB,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0ByqP,QAA1B,EAAoC;AAClC,QAAMhlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAOyqP,QAAP,CAApB;AAAA,QACM/lN,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAAA,QAKMvsD,CAAC,GAAG,CAACqtH,GAAG,CAACwnE,GAAL,IAAYxnE,GAAG,CAAC6tJ,SAAhB,GAA4B7tJ,GAAG,CAAC6tJ,SAAJ,EAA5B,GAA8C7tJ,GAAG,CAACwnE,GAAJ,IAAW,EALnE;AAOA1zL,EAAAA,IAAI,CAAC,MAAD,EAASnB,CAAT,EAAY8iH,kBAAS,aAAT,CAAZ,EAAqC,YAArC,CAAJ;AACA3hH,EAAAA,IAAI,CAAC,WAAD,EAAc,0BAAUgF,CAAV,EAAaue,CAAb,CAAd,CAAJ;AACAvjB,EAAAA,IAAI,CAAC,OAAD,EAAUmrD,CAAV,CAAJ;AACAnrD,EAAAA,IAAI,CAAC,QAAD,EAAWorD,CAAX,CAAJ;AACAprD,EAAAA,IAAI,CAAC,qBAAD,EAAwBymB,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,GAAwB,MAAxB,GAAiC,UAAzD,CAAJ;AACD;;AAED,SAAShC,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3B,QAAMylG,GAAG,GAAGzlG,IAAI,CAAC5M,KAAjB;AAAA,QACMsxC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAMA,SAAOumN,MAAM,CAACnwQ,GAAP,CAAWwD,CAAX,EAAcue,CAAd,EAAiBve,CAAC,GAAGmmD,CAArB,EAAwB5nC,CAAC,GAAG6nC,CAA5B,CAAP;AACD;;AAED,SAAS24L,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC,oBAAM2E,KAAN,EAAa7vP,IAAI,IAAI;AACnB,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OAD5B,CACoC;;AAEvD,QAAIzlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAO,IAAP,CAAlB;AAAA,QACI0kC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADlB;AAAA,QAEI9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFnB;AAAA,QAGIlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHpC;AAAA,QAII5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJpC;AAAA,QAKIiqM,OALJ;AAAA,QAKa6kB,GALb;AAAA,QAKkBC,GALlB;AAAA,QAKuB53Q,CALvB;;AAOA,QAAIkkB,IAAI,CAACkzP,MAAL,KAAgB,KAApB,EAA2B;AACzBO,MAAAA,GAAG,GAAGhuJ,GAAG,CAACnlH,KAAJ,GAAYmlH,GAAG,CAACp3F,MAAtB;AACAqlP,MAAAA,GAAG,GAAG1zP,IAAI,CAAC1f,KAAL,GAAa0f,IAAI,CAACqO,MAAxB;;AACA,UAAIolP,GAAG,KAAKA,GAAR,IAAeC,GAAG,KAAKA,GAAvB,IAA8BD,GAAG,KAAKC,GAA1C,EAA+C;AAC7C,YAAIA,GAAG,GAAGD,GAAV,EAAe;AACb33Q,UAAAA,CAAC,GAAG4oD,CAAC,GAAG+uN,GAAR;AACA32P,UAAAA,CAAC,IAAI,CAAC6nC,CAAC,GAAG7oD,CAAL,IAAU,CAAf;AACA6oD,UAAAA,CAAC,GAAG7oD,CAAJ;AACD,SAJD,MAIO;AACLA,UAAAA,CAAC,GAAG6oD,CAAC,GAAG8uN,GAAR;AACAl1Q,UAAAA,CAAC,IAAI,CAACmmD,CAAC,GAAG5oD,CAAL,IAAU,CAAf;AACA4oD,UAAAA,CAAC,GAAG5oD,CAAJ;AACD;AACF;AACF;;AAED,QAAI2pH,GAAG,CAACkmJ,QAAJ,IAAgBlmJ,GAAG,CAAC6tJ,SAAxB,EAAmC;AACjC,0BAAMlpG,OAAN,EAAepqJ,IAAf;AACAoqJ,MAAAA,OAAO,CAAC0kG,WAAR,GAAsB,CAAClgB,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAhB,KAA4B,IAA5B,GAAmCA,OAAnC,GAA6C,CAAnE;AACAxkF,MAAAA,OAAO,CAACupG,qBAAR,GAAgC3zP,IAAI,CAACohN,MAAL,KAAgB,KAAhD;AACAh3D,MAAAA,OAAO,CAACt7D,SAAR,CAAkB2W,GAAlB,EAAuBlnH,CAAvB,EAA0Bue,CAA1B,EAA6B4nC,CAA7B,EAAgCC,CAAhC;AACD;AACF,GAhCD;AAiCD;;eAEc;AACbtsC,EAAAA,IAAI,EAAM,OADG;AAEb84P,EAAAA,GAAG,EAAO,OAFG;AAGbC,EAAAA,MAAM,EAAI,KAHG;AAIbl3O,EAAAA,IAAI,EAAMA,IAJG;AAKbg3O,EAAAA,KAAK,EAAKA,KALG;AAMb5zB,EAAAA,IAAI,EAAMA,IANG;AAOb+yB,EAAAA,IAAI,EAAM,iBAPG;AAQbY,EAAAA,KAAK,EAAKzkE,gBARG;AAQK;AAClBtxM,EAAAA,GAAG,EAAO+3Q,QATG;AAUbW,EAAAA,OAAO,EAAGT,YAVG;AAWbU,EAAAA,OAAO,EAAGT;AAXG;;;;;;;;;;ACtGf;;AACA;;AACA;;;;eAEe,gCAAkB,MAAlB,EAA0BzmP,YAA1B,EAAgC4kP,kBAAhC;;;;;;;;;;;ACJf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASr3O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxB,MAAIg0P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAAxB;AAAA,MACIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CADxB;;AAEA,MAAIkhB,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB16Q,IAAAA,IAAI,CAAC,eAAD,EAAkB,oBAAlB,CAAJ;AACD;;AACDA,EAAAA,IAAI,CAAC,WAAD,EAAc,8BAAcymB,IAAd,CAAd,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAMymB,IAAI,CAACvZ,IAAX,CAAJ;AACD;;AAED,SAASA,IAAT,CAAc2jK,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,MAAIvZ,IAAI,GAAGuZ,IAAI,CAACvZ,IAAhB;AACA,MAAIA,IAAI,IAAI,IAAZ,EAAkB,OAAO,IAAP;AAElB,MAAIlI,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEIk3P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAFxB;AAAA,MAGIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CAHxB;AAAA,MAIIxzP,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAL,IAAc,CAAf,IAAoBuoB,mBAJ5B;AAAA,MAKI91E,KAAK,GAAGhvK,IAAI,CAACk0P,SALjB;;AAOA,MAAI,CAACllF,KAAD,IAAUA,KAAK,CAACvoL,IAAN,KAAeA,IAA7B,EAAmC;AACjC,KAACuZ,IAAI,CAACk0P,SAAL,GAAiBllF,KAAK,GAAG,oBAAUvoL,IAAV,CAA1B,EAA2CA,IAA3C,GAAkDA,IAAlD;AACD;;AAED,MAAInH,CAAC,IAAI8qK,OAAO,CAACuoF,MAAb,IAAuBvoF,OAAO,CAACyuC,SAAnC,EAA8C;AAC5CzuC,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,IAAAA,OAAO,CAACuoF,MAAR,CAAerzP,CAAf;AACA,yBAAW8qK,OAAX,EAAoB4kB,KAApB,EAA2B,CAA3B,EAA8B,CAA9B,EAAiCglF,EAAjC,EAAqCC,EAArC;AACA7pG,IAAAA,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACA8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD,GAND,MAMO;AACL,yBAAWstJ,OAAX,EAAoB4kB,KAApB,EAA2BzwL,CAA3B,EAA8Bue,CAA9B,EAAiCk3P,EAAjC,EAAqCC,EAArC;AACD;AACF;;AAED,SAAS/C,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3BvZ,EAAAA,IAAI,CAAC,2BAAQykQ,MAAR,CAAD,EAAkBlrP,IAAlB,CAAJ,GACIkrP,MAAM,CAACnwQ,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,CADJ,GAEI,0BAAYmwQ,MAAZ,EAAoBlrP,IAApB,EAA0B,IAA1B,CAFJ;;AAIA,MAAIA,IAAI,CAACu8N,KAAT,EAAgB;AACd2uB,IAAAA,MAAM,CAACvY,MAAP,CAAc3yO,IAAI,CAACu8N,KAAL,GAAauoB,mBAA3B,EAAqC9kP,IAAI,CAACzhB,CAAL,IAAU,CAA/C,EAAkDyhB,IAAI,CAAClD,CAAL,IAAU,CAA5D;AACD;;AAED,SAAOouP,MAAP;AACD;;eAEc;AACb7yP,EAAAA,IAAI,EAAI,MADK;AAEb84P,EAAAA,GAAG,EAAK,MAFK;AAGbC,EAAAA,MAAM,EAAE,KAHK;AAIbl3O,EAAAA,IAAI,EAAIA,IAJK;AAKbg3O,EAAAA,KAAK,EAAGA,KALK;AAMb5zB,EAAAA,IAAI,EAAI,mBAAQ72O,IAAR,CANK;AAOb4pQ,EAAAA,IAAI,EAAI,oBAAS5pQ,IAAT,CAPK;AAQbwqQ,EAAAA,KAAK,EAAG,8BAAcxqQ,IAAd;AARK;;;;;;;;;;AC1Df;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASyzB,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,EAAAA,IAAI,CAAC,GAAD,EAAM,uBAAU,IAAV,EAAgBymB,IAAhB,CAAN,CAAJ;AACD;;AAED,SAASkxP,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3B,MAAIzhB,CAAJ,EAAOue,CAAP;AACA,SAAO,0BAAYouP,MAAM,CAACnwQ,GAAP,CACjBwD,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CADG,EAEjBue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CAFG,EAGhBve,CAAC,GAAGyhB,IAAI,CAAC1f,KAAV,IAAoB,CAHH,EAIhBwc,CAAC,GAAGkD,IAAI,CAACqO,MAAV,IAAqB,CAJJ,CAAZ,EAKJrO,IALI,CAAP;AAMD;;AAED,SAASs9N,IAAT,CAAclzE,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3BoqJ,EAAAA,OAAO,CAACq9F,SAAR;AACA,yBAAUr9F,OAAV,EAAmBpqJ,IAAnB;AACD;;eAEc;AACb3H,EAAAA,IAAI,EAAI,MADK;AAEb84P,EAAAA,GAAG,EAAK,MAFK;AAGbC,EAAAA,MAAM,EAAE,KAHK;AAIbl3O,EAAAA,IAAI,EAAIA,IAJK;AAKbg3O,EAAAA,KAAK,EAAGA,KALK;AAMb5zB,EAAAA,IAAI,EAAI,mBAAQA,IAAR,CANK;AAOb+yB,EAAAA,IAAI,EAAI,oBAAS/yB,IAAT,CAPK;AAQb2zB,EAAAA,KAAK,EAAGlD;AARK;;;;;;;;;;ACzBf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAAS7zO,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,EAAAA,IAAI,CAAC,WAAD,EAAc,8BAAcymB,IAAd,CAAd,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAL,IAAWl3D,IAAI,CAACzhB,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACAhF,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAL,IAAW9qF,IAAI,CAAClD,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACD;;AAED,SAASo0P,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3B,MAAI6qF,EAAJ,EAAQD,EAAR;AACA,SAAO,0BAAYsgK,MAAM,CAACnwQ,GAAP,CACjB8vG,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CADE,EAEjBqsG,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAFE,EAGjBkD,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAHX,EAIjB7qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAJX,CAAZ,EAKJ5qF,IALI,CAAP;AAMD;;AAED,SAASvZ,IAAT,CAAc2jK,OAAd,EAAuBpqJ,IAAvB,EAA6B4uO,OAA7B,EAAsC;AACpC,MAAI/jJ,EAAJ,EAAQD,EAAR,EAAY1zB,EAAZ,EAAgB4zB,EAAhB;;AAEA,MAAI9qF,IAAI,CAAC+rP,MAAL,IAAe,qBAAO3hG,OAAP,EAAgBpqJ,IAAhB,EAAsB4uO,OAAtB,CAAnB,EAAmD;AACjD/jJ,IAAAA,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAqsG,IAAAA,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAAf;AACAo6D,IAAAA,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAAjC;AACAC,IAAAA,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAAjC;AACAw/D,IAAAA,OAAO,CAACq9F,SAAR;AACAr9F,IAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAf,EAAmBD,EAAnB;AACAw/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAnB;AACA,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD;;AAED,SAASwyI,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC,oBAAM2E,KAAN,EAAa,UAAS7vP,IAAT,EAAe;AAC1B,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OADrB,CAC6B;;AACvD,QAAItc,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;;AACA,QAAIA,OAAO,IAAInoP,IAAI,CAAC2jK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAnB,EAA6C;AAC3C,0BAAMxkF,OAAN,EAAepqJ,IAAf;AACAoqJ,MAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,GAPD;AAQD;;AAED,SAASkE,GAAT,CAAa7lG,OAAb,EAAsBpqJ,IAAtB,EAA4BzhB,CAA5B,EAA+Bue,CAA/B,EAAkC;AAChC,MAAI,CAACstJ,OAAO,CAACumG,eAAb,EAA8B,OAAO,KAAP;AAC9B,SAAOlqQ,IAAI,CAAC2jK,OAAD,EAAUpqJ,IAAV,EAAgB,CAAhB,CAAJ,IAA0BoqJ,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAAjC;AACD;;eAEc;AACbzE,EAAAA,IAAI,EAAI,MADK;AAEb84P,EAAAA,GAAG,EAAK,MAFK;AAGbC,EAAAA,MAAM,EAAE,KAHK;AAIbl3O,EAAAA,IAAI,EAAIA,IAJK;AAKbg3O,EAAAA,KAAK,EAAGA,KALK;AAMb5zB,EAAAA,IAAI,EAAIA,IANK;AAOb+yB,EAAAA,IAAI,EAAI,gBAAKJ,GAAL,CAPK;AAQbgB,EAAAA,KAAK,EAAGjD;AARK;;;;;;;;;;ACxDf;;AACA;;;;eAEe,2BAAa,OAAb,EAAsBpuQ,aAAtB;;;;;;;;;;;ACHf;;AACA;;AACA;;;;eAEe,2BAAa,QAAb,EAAuB+hN,cAAvB,EAA+BmsD,yBAA/B;;;;;;;;;;;;;;;;;;;ACJf;;AACA;;AAEA;AACA,MAAMiH,UAAU,GAAG,yBAAnB;AAEO,IAAIC,WAAW,GAAG;AACvB3mP,EAAAA,MAAM,EAAE4mP,QADe;AAEvBC,EAAAA,YAAY,EAAEA,YAFS;AAGvBC,EAAAA,aAAa,EAAEA,aAHQ;AAIvB70Q,EAAAA,KAAK,EAAE60Q,aAJgB;AAKvBpuP,EAAAA,MAAM,EAAEquP;AALe,CAAlB;;AAQPA,SAAS,CAAC,IAAD,CAAT;;AAEA,SAASA,SAAT,CAAmBC,GAAnB,EAAwB;AACtBL,EAAAA,WAAW,CAAC10Q,KAAZ,GAAqB+0Q,GAAG,IAAIjrG,gBAAR,GAAmB8qG,YAAnB,GAAkCC,aAAtD;AACD,EAED;;;AACA,SAASA,aAAT,CAAuBn1P,IAAvB,EAA6B8wF,IAA7B,EAAmC;AACjC,SAAOwkK,cAAc,CAACC,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAV,EAAwBmkK,QAAQ,CAACj1P,IAAD,CAAhC,CAArB;AACD;;AAED,SAASs1P,cAAT,CAAwBxkK,IAAxB,EAA8B0kK,iBAA9B,EAAiD;AAC/C,SAAO,CAAC,EAAE,MAAM1kK,IAAI,CAACp5G,MAAX,GAAoB89Q,iBAAtB,CAAR;AACD,EAED;;;AACA,SAASN,YAAT,CAAsBl1P,IAAtB,EAA4B8wF,IAA5B,EAAkC;AAChC,SAAOmkK,QAAQ,CAACj1P,IAAD,CAAR,IAAkB,CAAlB,IAAuB,EAAE8wF,IAAI,GAAGykK,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAlB,CAAvB,GAAyD,CAAzD,GACH2kK,aAAa,CAAC3kK,IAAD,EAAO4kK,IAAI,CAAC11P,IAAD,CAAX,CADjB;AAED;;AAED,SAASy1P,aAAT,CAAuB3kK,IAAvB,EAA6B6kK,WAA7B,EAA0C;AACxC,QAAMt5Q,GAAG,GAAI,IAAGs5Q,WAAY,KAAI7kK,IAAK,EAArC;AACA,MAAIxwG,KAAK,GAAGy0Q,UAAU,CAAC75Q,GAAX,CAAemB,GAAf,CAAZ;;AACA,MAAIiE,KAAK,KAAKgtH,SAAd,EAAyB;AACvB88C,qBAAQsrG,IAAR,GAAeC,WAAf;AACAr1Q,IAAAA,KAAK,GAAG8pK,iBAAQwrG,WAAR,CAAoB9kK,IAApB,EAA0BxwG,KAAlC;AACAy0Q,IAAAA,UAAU,CAACh6Q,GAAX,CAAesB,GAAf,EAAoBiE,KAApB;AACD;;AACD,SAAOA,KAAP;AACD;;AAEM,SAAS20Q,QAAT,CAAkBj1P,IAAlB,EAAwB;AAC7B,SAAOA,IAAI,CAACi1P,QAAL,IAAiB,IAAjB,GAAyB,CAACj1P,IAAI,CAACi1P,QAAN,IAAkB,CAA3C,GAAgD,EAAvD;AACD;;AAEM,SAASY,UAAT,CAAoB71P,IAApB,EAA0B;AAC/B,SAAOA,IAAI,CAAC61P,UAAL,IAAmB,IAAnB,GAA0B71P,IAAI,CAAC61P,UAA/B,GAA6CZ,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,CAArE;AACD;;AAED,SAAS81P,SAAT,CAAmB/2P,CAAnB,EAAsB;AACpB,SAAO,uBAAQA,CAAR,IAAaA,CAAC,CAACrnB,MAAF,GAAW,CAAX,GAAeqnB,CAAf,GAAmBA,CAAC,CAAC,CAAD,CAAjC,GAAuCA,CAA9C;AACD;;AAEM,SAASg3P,SAAT,CAAmB/1P,IAAnB,EAAyB;AAC9B,SAAO81P,SAAS,CACd91P,IAAI,CAACg2P,SAAL,IAAkBh2P,IAAI,CAAC8wF,IAAvB,IAA+B,CAAC,uBAAQ9wF,IAAI,CAAC8wF,IAAb,CAAhC,GACI9wF,IAAI,CAAC8wF,IAAL,CAAU70G,KAAV,CAAgB+jB,IAAI,CAACg2P,SAArB,CADJ,GAEIh2P,IAAI,CAAC8wF,IAHK,CAAhB;AAKD;;AAEM,SAASmlK,eAAT,CAAyBj2P,IAAzB,EAA+B;AACpC,QAAM0oP,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;AACA,SAAO,CAAC,uBAAQ0oP,EAAR,IAAeA,EAAE,CAAChxQ,MAAH,GAAY,CAA3B,GAAgC,CAAjC,IAAsCm+Q,UAAU,CAAC71P,IAAD,CAAvD;AACD;;AAEM,SAASu1P,SAAT,CAAmBv1P,IAAnB,EAAyB2M,IAAzB,EAA+B;AACpC,QAAMmkF,IAAI,GAAGnkF,IAAI,IAAI,IAAR,GAAe,EAAf,GAAoB,CAACA,IAAI,GAAG,EAAR,EAAY0mF,IAAZ,EAAjC;AACA,SAAOrzF,IAAI,CAACouD,KAAL,GAAa,CAAb,IAAkB0iC,IAAI,CAACp5G,MAAvB,GAAgC86M,QAAQ,CAACxyL,IAAD,EAAO8wF,IAAP,CAAxC,GAAuDA,IAA9D;AACD;;AAED,SAASolK,WAAT,CAAqBl2P,IAArB,EAA2B;AACzB,MAAIg1P,WAAW,CAAC10Q,KAAZ,KAAsB40Q,YAA1B,EAAwC;AACtC;AACA,UAAMS,WAAW,GAAGD,IAAI,CAAC11P,IAAD,CAAxB;AACA,WAAO8wF,IAAI,IAAI2kK,aAAa,CAAC3kK,IAAD,EAAO6kK,WAAP,CAA5B;AACD,GAJD,MAIO;AACL;AACA,UAAMH,iBAAiB,GAAGP,QAAQ,CAACj1P,IAAD,CAAlC;AACA,WAAO8wF,IAAI,IAAIwkK,cAAc,CAACxkK,IAAD,EAAO0kK,iBAAP,CAA7B;AACD;AACF;;AAED,SAAShjE,QAAT,CAAkBxyL,IAAlB,EAAwB8wF,IAAxB,EAA8B;AAC5B,MAAI1iC,KAAK,GAAG,CAACpuD,IAAI,CAACouD,KAAlB;AAAA,MACI9tE,KAAK,GAAG41Q,WAAW,CAACl2P,IAAD,CADvB;AAGA,MAAI1f,KAAK,CAACwwG,IAAD,CAAL,GAAc1iC,KAAlB,EAAyB,OAAO0iC,IAAP;AAEzB,MAAIigG,QAAQ,GAAG/wL,IAAI,CAAC+wL,QAAL,IAAiB,QAAhC;AAAA,MACIpM,GAAG,GAAG3kL,IAAI,CAACjmB,GAAL,KAAa,KADvB;AAAA,MAEI+0M,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAGj+F,IAAI,CAACp5G,MAHd;AAAA,MAGsBgkN,GAHtB;AAKAttI,EAAAA,KAAK,IAAI9tE,KAAK,CAACywM,QAAD,CAAd;;AAEA,MAAIpM,GAAJ,EAAS;AACP,WAAOmK,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAI5M,EAAE,GAAGC,EAAL,KAAY,CAAnB;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAWi6M,GAAX,CAAD,CAAL,GAAyBttI,KAA7B,EAAoC0gI,EAAE,GAAG4M,GAAG,GAAG,CAAX,CAApC,KACK3M,EAAE,GAAG2M,GAAL;AACN;;AACD,WAAO3K,QAAQ,GAAGjgG,IAAI,CAACrvG,KAAL,CAAWqtM,EAAX,CAAlB;AACD,GAPD,MAOO;AACL,WAAOA,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAG,KAAK5M,EAAE,GAAGC,EAAL,KAAY,CAAjB,CAAN;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAci6M,GAAd,CAAD,CAAL,GAA4BttI,KAAhC,EAAuC0gI,EAAE,GAAG4M,GAAL,CAAvC,KACK3M,EAAE,GAAG2M,GAAG,GAAG,CAAX;AACN;;AACD,WAAO5qG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAcqtM,EAAd,IAAoBiC,QAA3B;AACD;AACF;;AAEM,SAASolE,UAAT,CAAoBn2P,IAApB,EAA0Bo2P,KAA1B,EAAiC;AACtC,MAAIV,IAAI,GAAG11P,IAAI,CAAC01P,IAAhB;AACA,SAAO,CAACU,KAAK,IAAIV,IAAT,GACJhyQ,MAAM,CAACgyQ,IAAD,CAAN,CAAa/5Q,OAAb,CAAqB,IAArB,EAA2B,IAA3B,CADI,GAEJ+5Q,IAFG,KAEM,YAFb;AAGD;;AAEM,SAASA,IAAT,CAAc11P,IAAd,EAAoBo2P,KAApB,EAA2B;AAChC,SAAO,MACJp2P,IAAI,CAACq2P,SAAL,GAAiBr2P,IAAI,CAACq2P,SAAL,GAAiB,GAAlC,GAAwC,EADpC,KAEJr2P,IAAI,CAACs2P,WAAL,GAAmBt2P,IAAI,CAACs2P,WAAL,GAAmB,GAAtC,GAA4C,EAFxC,KAGJt2P,IAAI,CAACu2P,UAAL,GAAkBv2P,IAAI,CAACu2P,UAAL,GAAkB,GAApC,GAA0C,EAHtC,IAILtB,QAAQ,CAACj1P,IAAD,CAJH,GAIY,KAJZ,GAKLm2P,UAAU,CAACn2P,IAAD,EAAOo2P,KAAP,CALZ;AAMD;;AAEM,SAASrxQ,MAAT,CAAgBib,IAAhB,EAAsB;AAC3B;AACA;AACA;AACA,MAAI4oJ,QAAQ,GAAG5oJ,IAAI,CAAC4oJ,QAApB;AAAA,MACIjkH,CAAC,GAAGswN,QAAQ,CAACj1P,IAAD,CADhB;AAGA,SAAO7hB,IAAI,CAACsG,KAAL,CACLmkK,QAAQ,KAAK,KAAb,GAA8B,OAAOjkH,CAArC,GACAikH,QAAQ,KAAK,QAAb,GAA8B,OAAOjkH,CAArC,GACAikH,QAAQ,KAAK,QAAb,GAA6B,CAAC,IAAD,GAAQjkH,CAArC,GACAikH,QAAQ,KAAK,UAAb,GAA8B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAAzD,GACA4oJ,QAAQ,KAAK,aAAb,GAA8B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAAzD,GAAkE,CAL7D,CAAP;AAOD;;;;;;;;;ACpJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIy2P,SAAS,GAAG;AACd,UAAU,OADI;AAEd,YAAU,QAFI;AAGd,WAAU;AAHI,CAAhB;AAMA,IAAIC,UAAU,GAAG,IAAI9L,eAAJ,EAAjB;;AAEA,SAAS+L,WAAT,CAAqB32P,IAArB,EAA2B;AACzB,MAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEI1W,CAAC,GAAG4Z,IAAI,CAACzL,MAAL,IAAe,CAFvB;AAAA,MAE0BzY,CAF1B;;AAIA,MAAIsK,CAAJ,EAAO;AACLtK,IAAAA,CAAC,GAAG,CAACkkB,IAAI,CAACysI,KAAL,IAAc,CAAf,IAAoBu4G,iBAAxB;AACAzmQ,IAAAA,CAAC,IAAI6H,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASrW,CAAT,CAAT;AACAghB,IAAAA,CAAC,IAAI1W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASpW,CAAT,CAAT;AACD;;AAED46Q,EAAAA,UAAU,CAAC7rK,EAAX,GAAgBtsG,CAAhB;AACAm4Q,EAAAA,UAAU,CAAC9rK,EAAX,GAAgB9tF,CAAhB;AACA,SAAO45P,UAAP;AACD;;AAED,SAASx8O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxB,MAAIkE,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CAApB;AAAA,MACIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiB,kBAAO8C,IAAP,CAD1B;AAAA,MAEI0c,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKItrG,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CALtB;AAAA,MAKyBzgP,CALzB;AAOAvC,EAAAA,IAAI,CAAC,aAAD,EAAgBk9Q,SAAS,CAACz2P,IAAI,CAAC2wL,KAAN,CAAT,IAAyB,OAAzC,CAAJ;;AAEA,MAAIrxM,CAAJ,EAAO;AACLxD,IAAAA,CAAC,GAAG,0BAAUyC,CAAV,EAAaue,CAAb,IAAkB,GAAlB,GAAwB,uBAAOxd,CAAP,CAA5B;AACA,QAAI4kB,EAAE,IAAIhH,EAAV,EAAcphB,CAAC,IAAI,MAAM,0BAAUooB,EAAV,EAAchH,EAAd,CAAX;AACf,GAHD,MAGO;AACLphB,IAAAA,CAAC,GAAG,0BAAUyC,CAAC,GAAG2lB,EAAd,EAAkBpH,CAAC,GAAGI,EAAtB,CAAJ;AACD;;AACD3jB,EAAAA,IAAI,CAAC,WAAD,EAAcuC,CAAd,CAAJ;AACD;;AAED,SAASo1Q,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6Bk3G,IAA7B,EAAmC;AACjC,MAAIvyE,CAAC,GAAGqwN,kBAAY3mP,MAAZ,CAAmBrO,IAAnB,CAAR;AAAA,MACI1gB,CAAC,GAAG0gB,IAAI,CAAC2wL,KADb;AAAA,MAEIj0K,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKI1mF,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CALpB;AAAA,MAMIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiB,kBAAO8C,IAAP,CAAjB,GAAgC7hB,IAAI,CAACsG,KAAL,CAAW,MAAIkgD,CAAf,CANzC;AAAA,MAM4D;AACxD+jN,EAAAA,EAAE,GAAG,qBAAU1oP,IAAV,CAPT;AAAA,MAQI0kC,CARJ,CADiC,CAWjC;;;AACA,MAAI,uBAAQgkN,EAAR,CAAJ,EAAiB;AACf;AACA/jN,IAAAA,CAAC,IAAI,sBAAW3kC,IAAX,KAAoB0oP,EAAE,CAAChxQ,MAAH,GAAY,CAAhC,CAAL;AACAgtD,IAAAA,CAAC,GAAGgkN,EAAE,CAAC/jQ,MAAH,CAAU,CAAC+/C,CAAD,EAAI5oD,CAAJ,KAAUqC,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYswN,kBAAY10Q,KAAZ,CAAkB0f,IAAlB,EAAwBlkB,CAAxB,CAAZ,CAApB,EAA6D,CAA7D,CAAJ;AACD,GAJD,MAIO;AACL;AACA4oD,IAAAA,CAAC,GAAGswN,kBAAY10Q,KAAZ,CAAkB0f,IAAlB,EAAwB0oP,EAAxB,CAAJ;AACD,GAnBgC,CAqBjC;;;AACA,MAAIppQ,CAAC,KAAK,QAAV,EAAoB;AAClB4kB,IAAAA,EAAE,IAAKwgC,CAAC,GAAG,CAAX;AACD,GAFD,MAEO,IAAIplD,CAAC,KAAK,OAAV,EAAmB;AACxB4kB,IAAAA,EAAE,IAAIwgC,CAAN;AACD,GAFM,MAEA,CACL;AACD;;AAEDwmN,EAAAA,MAAM,CAACnwQ,GAAP,CAAWmpB,EAAE,IAAE3lB,CAAf,EAAkB2e,EAAE,IAAEJ,CAAtB,EAAyBoH,EAAE,GAACwgC,CAA5B,EAA+BxnC,EAAE,GAACynC,CAAlC;;AAEA,MAAI3kC,IAAI,CAACu8N,KAAL,IAAc,CAACrlH,IAAnB,EAAyB;AACvBg0I,IAAAA,MAAM,CAACvY,MAAP,CAAc3yO,IAAI,CAACu8N,KAAL,GAAauoB,mBAA3B,EAAqCvmQ,CAArC,EAAwCue,CAAxC;AACD,GAFD,MAEO,IAAIo6G,IAAI,KAAK,CAAb,EAAgB;AACrB,WAAOg0I,MAAM,CAACJ,aAAP,CAAqB9qP,IAAI,CAACu8N,KAAL,GAAauoB,mBAAlC,EAA4CvmQ,CAA5C,EAA+Cue,CAA/C,CAAP;AACD;;AACD,SAAOouP,MAAP;AACD;;AAED,SAAS5tB,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC,oBAAM2E,KAAN,EAAa,UAAS7vP,IAAT,EAAe;AAC1B,QAAI4uO,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AAAA,QACIlyN,CADJ;AAAA,QACOn+B,CADP;AAAA,QACUue,CADV;AAAA,QACa1kB,CADb;AAAA,QACgB2+Q,EADhB;AAAA,QACoBrO,EADpB;AAAA,QACwBz1J,GADxB;AAGA,QAAIi4J,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAX,IAA6C;AAC7Ctc,IAAAA,OAAO,KAAK,CADZ,IACiB5uO,IAAI,CAACi1P,QAAL,IAAiB,CADlC,IAEAj1P,IAAI,CAAC8wF,IAAL,IAAa,IAFb,IAEqB9wF,IAAI,CAAC8wF,IAAL,CAAUp5G,MAAV,KAAqB,CAF9C,EAEiD;AAEjD0yK,IAAAA,OAAO,CAACsrG,IAAR,GAAe,gBAAK11P,IAAL,CAAf;AACAoqJ,IAAAA,OAAO,CAACqsG,SAAR,GAAoBz2P,IAAI,CAAC2wL,KAAL,IAAc,MAAlC;AAEAj0K,IAAAA,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAf;AACAzhB,IAAAA,CAAC,GAAGm+B,CAAC,CAACmuE,EAAN,EACA/tF,CAAC,GAAG4f,CAAC,CAACkuE,EADN;;AAGA,QAAI5qF,IAAI,CAACu8N,KAAT,EAAgB;AACdnyE,MAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,MAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,MAAAA,OAAO,CAACuoF,MAAR,CAAe3yO,IAAI,CAACu8N,KAAL,GAAauoB,mBAA5B;AACAvmQ,MAAAA,CAAC,GAAGue,CAAC,GAAG,CAAR,CAJc,CAIH;AACZ;;AACDve,IAAAA,CAAC,IAAKyhB,IAAI,CAACkE,EAAL,IAAW,CAAjB;AACApH,IAAAA,CAAC,IAAI,CAACkD,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiB,kBAAO8C,IAAP,CAAtB;AAEA0oP,IAAAA,EAAE,GAAG,qBAAU1oP,IAAV,CAAL;AACA,wBAAMoqJ,OAAN,EAAepqJ,IAAf;;AACA,QAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACfqO,MAAAA,EAAE,GAAG,sBAAW/2P,IAAX,CAAL;;AACA,WAAK5nB,CAAC,GAAC,CAAP,EAAUA,CAAC,GAACswQ,EAAE,CAAChxQ,MAAf,EAAuB,EAAEU,CAAzB,EAA4B;AAC1B66G,QAAAA,GAAG,GAAG,qBAAUjzF,IAAV,EAAgB0oP,EAAE,CAACtwQ,CAAD,CAAlB,CAAN;;AACA,YAAI4nB,IAAI,CAACpX,IAAL,IAAa,mBAAKwhK,OAAL,EAAcpqJ,IAAd,EAAoB4uO,OAApB,CAAjB,EAA+C;AAC7CxkF,UAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AACD,YAAIkD,IAAI,CAAC+rP,MAAL,IAAe,qBAAO3hG,OAAP,EAAgBpqJ,IAAhB,EAAsB4uO,OAAtB,CAAnB,EAAmD;AACjDxkF,UAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;;AACDA,QAAAA,CAAC,IAAIi6P,EAAL;AACD;AACF,KAZD,MAYO;AACL9jK,MAAAA,GAAG,GAAG,qBAAUjzF,IAAV,EAAgB0oP,EAAhB,CAAN;;AACA,UAAI1oP,IAAI,CAACpX,IAAL,IAAa,mBAAKwhK,OAAL,EAAcpqJ,IAAd,EAAoB4uO,OAApB,CAAjB,EAA+C;AAC7CxkF,QAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AACD,UAAIkD,IAAI,CAAC+rP,MAAL,IAAe,qBAAO3hG,OAAP,EAAgBpqJ,IAAhB,EAAsB4uO,OAAtB,CAAnB,EAAmD;AACjDxkF,QAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;AACF;;AAED,QAAIkD,IAAI,CAACu8N,KAAT,EAAgBnyE,OAAO,CAACsoG,OAAR;AACjB,GAjDD;AAkDD;;AAED,SAASzC,GAAT,CAAa7lG,OAAb,EAAsBpqJ,IAAtB,EAA4BzhB,CAA5B,EAA+Bue,CAA/B,EAAkCwzP,EAAlC,EAAsCC,EAAtC,EAA0C;AACxC,MAAIvwP,IAAI,CAACi1P,QAAL,IAAiB,CAArB,EAAwB,OAAO,KAAP;AACxB,MAAI,CAACj1P,IAAI,CAACu8N,KAAV,EAAiB,OAAO,IAAP,CAFuB,CAEV;AAE9B;;AACA,MAAI7/M,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAnB;AAAA,MACIje,EAAE,GAAG26B,CAAC,CAACmuE,EADX;AAAA,MAEIuvI,EAAE,GAAG19M,CAAC,CAACkuE,EAFX;AAAA,MAGIzkG,CAAC,GAAG+qQ,KAAK,CAACwF,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAHb;AAAA,MAII1gB,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAN,GAAcuoB,mBAJtB;AAAA,MAKI3yP,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CALV;AAAA,MAMI4S,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CANV;AAAA,MAOI4hP,EAAE,GAAG/uO,GAAG,GAAGm+P,EAAN,GAAWp+P,GAAG,GAAGq+P,EAAjB,IAAuBxuQ,EAAE,GAAGoQ,GAAG,GAAGpQ,EAAX,GAAgBmQ,GAAG,GAAGkoO,EAA7C,CAPT;AAAA,MAQIgH,EAAE,GAAGlvO,GAAG,GAAGo+P,EAAN,GAAWn+P,GAAG,GAAGo+P,EAAjB,IAAuBn2B,EAAE,GAAGloO,GAAG,GAAGnQ,EAAX,GAAgBoQ,GAAG,GAAGioO,EAA7C,CART;AAUA,SAAOj0O,CAAC,CAAC8kQ,QAAF,CAAW/pB,EAAX,EAAeE,EAAf,CAAP;AACD;;AAED,SAAS+1B,aAAT,CAAuBn3P,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,MAAIx/K,CAAC,GAAGw0O,KAAK,CAACwF,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAAb;AACA,SAAO,iCAAiBk8L,GAAjB,EAAsBx/K,CAAC,CAAC,CAAD,CAAvB,EAA4BA,CAAC,CAAC,CAAD,CAA7B,EAAkCA,CAAC,CAAC,CAAD,CAAnC,EAAwCA,CAAC,CAAC,CAAD,CAAzC,KACA,iCAAiBw/K,GAAjB,EAAsBx/K,CAAC,CAAC,CAAD,CAAvB,EAA4BA,CAAC,CAAC,CAAD,CAA7B,EAAkCA,CAAC,CAAC,CAAD,CAAnC,EAAwCA,CAAC,CAAC,CAAD,CAAzC,CADA,IAEA,iCAAiBw/K,GAAjB,EAAsBx/K,CAAC,CAAC,CAAD,CAAvB,EAA4BA,CAAC,CAAC,CAAD,CAA7B,EAAkCA,CAAC,CAAC,CAAD,CAAnC,EAAwCA,CAAC,CAAC,CAAD,CAAzC,CAFA,IAGA,iCAAiBw/K,GAAjB,EAAsBx/K,CAAC,CAAC,CAAD,CAAvB,EAA4BA,CAAC,CAAC,CAAD,CAA7B,EAAkCA,CAAC,CAAC,CAAD,CAAnC,EAAwCA,CAAC,CAAC,CAAD,CAAzC,CAHP;AAID;;eAEc;AACbrkB,EAAAA,IAAI,EAAI,MADK;AAEb84P,EAAAA,GAAG,EAAK,MAFK;AAGbC,EAAAA,MAAM,EAAE,KAHK;AAIbl3O,EAAAA,IAAI,EAAIA,IAJK;AAKbg3O,EAAAA,KAAK,EAAGA,KALK;AAMb5zB,EAAAA,IAAI,EAAIA,IANK;AAOb+yB,EAAAA,IAAI,EAAI,gBAAKJ,GAAL,CAPK;AAQbgB,EAAAA,KAAK,EAAGkG;AARK;;;;;;;;;;AC9Kf;;AACA;;AACA;;;;eAEe,gCAAkB,OAAlB,EAA2BnO,aAA3B,EAAkCwI,mBAAlC;;;;;;;;;;;ACJf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;eAEe;AACbr4D,EAAAA,GAAG,EAAMA,YADI;AAEb+B,EAAAA,IAAI,EAAKA,aAFI;AAGbn3F,EAAAA,KAAK,EAAIA,cAHI;AAIb3wG,EAAAA,KAAK,EAAIA,cAJI;AAKbuZ,EAAAA,IAAI,EAAKA,aALI;AAMblmB,EAAAA,IAAI,EAAKA,aANI;AAObwwO,EAAAA,IAAI,EAAKA,aAPI;AAQb29B,EAAAA,IAAI,EAAKA,aARI;AASbh1Q,EAAAA,KAAK,EAAIA,cATI;AAUb+hN,EAAAA,MAAM,EAAGA,eAVI;AAWb7wG,EAAAA,IAAI,EAAKA,aAXI;AAYbk4J,EAAAA,KAAK,EAAIA;AAZI;;;;;;;;;;ACbf;;AACA;;;;AAEe,kBAAShpP,IAAT,EAAeiK,IAAf,EAAqBoiL,GAArB,EAA0B;AACvC,MAAIh0L,IAAI,GAAG04H,eAAM/wH,IAAI,CAACsqP,IAAL,CAAU0I,QAAhB,CAAX;AAAA,MACI9B,KAAK,GAAGjnP,IAAI,IAAI5R,IAAI,CAAC64P,KADzB;AAEA,MAAI74P,IAAI,CAAC+4P,MAAT,EAAiBpxP,IAAI,GAAGA,IAAI,CAACsqP,IAAZ;AAEjB,SAAO4G,KAAK,CAAClxP,IAAI,CAACkrP,MAAL,KAAgBlrP,IAAI,CAACkrP,MAAL,GAAc,IAAIN,eAAJ,EAA9B,CAAD,EAA8C5qP,IAA9C,EAAoDqsL,GAApD,CAAZ;AACD;;;;;;;;;ACTD;;AACA;;AACA;;;;AAEA,IAAIkrE,KAAK,GAAG;AAACjN,EAAAA,IAAI,EAAE;AAAP,CAAZ;;AAEe,kBAASA,IAAT,EAAeY,MAAf,EAAuB7+D,GAAvB,EAA4B;AACzC,MAAIh0L,IAAI,GAAI04H,eAAMu5H,IAAI,CAAC0I,QAAX,CAAZ;AAAA,MACI9B,KAAK,GAAG74P,IAAI,CAAC64P,KADjB;AAAA,MAEI59J,KAAK,GAAGg3J,IAAI,CAACh3J,KAFjB;AAAA,MAGImkK,QAAQ,GAAGnkK,KAAK,IAAIA,KAAK,CAAC57G,MAH9B;AAAA,MAIIU,CAJJ;AAAA,MAIOkO,CAJP;AAAA,MAIU0Z,IAJV;AAAA,MAIgB7Z,CAJhB;;AAMA,MAAIkS,IAAI,CAAC+4P,MAAT,EAAiB;AACf,QAAIqG,QAAJ,EAAc;AACZz3P,MAAAA,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAZ;AACD,KAFD,MAEO;AACL;AACAikK,MAAAA,KAAK,CAACjN,IAAN,GAAaA,IAAb;AACAtqP,MAAAA,IAAI,GAAGu3P,KAAP;AACD;;AACDpxQ,IAAAA,CAAC,GAAG,wBAAU6Z,IAAV,EAAgBkxP,KAAhB,EAAuB7kE,GAAvB,CAAJ;AACA6+D,IAAAA,MAAM,GAAGA,MAAM,IAAIA,MAAM,CAAClqD,KAAP,CAAa76M,CAAb,CAAV,IAA6BA,CAAtC;AACA,WAAO+kQ,MAAP;AACD;;AAEDA,EAAAA,MAAM,GAAGA,MAAM,IACVZ,IAAI,CAACY,MAAL,IAAeZ,IAAI,CAACY,MAAL,CAAYr7D,KAAZ,EADX,IAEJ,IAAI+6D,eAAJ,EAFL;;AAIA,MAAI6M,QAAJ,EAAc;AACZ,SAAKr/Q,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC8yQ,MAAAA,MAAM,CAAClqD,KAAP,CAAa,wBAAU1tG,KAAK,CAACl7G,CAAD,CAAf,EAAoB84Q,KAApB,EAA2B7kE,GAA3B,CAAb;AACD;AACF;;AAED,SAAOi+D,IAAI,CAACY,MAAL,GAAcA,MAArB;AACD;;;;;;;;;;ACrCD;;;;AAEA,IAAI3wP,IAAI,GAAG,CACT,UADS,EACG,MADH,EACW,MADX,EACmB,aADnB,EACkC,MADlC,EAC0C,OAD1C,EACmD,QADnD,EAET,GAFS,EAEJ,GAFI,EAEC,OAFD,EAEU,QAFV,EAEoB,OAFpB,EAE6B,UAF7B,EAEqD;AAC9D,MAHS,EAGD,aAHC,EAGc,SAHd,EAGyB,OAHzB,EAGqD;AAC9D,QAJS,EAIC,eAJD,EAIkB,aAJlB,EAIiC,WAJjC,EAIqD;AAC9D,YALS,EAKK,kBALL,EAKqD;AAC9D,kBANS,EAMW,cANX,EAMqD;AAC9D,YAPS,EAOK,UAPL,EAOiB,aAPjB,EAOgC,aAPhC,EAOqD;AAC9D,cARS,EAQO,UARP,EAQqD;AAC9D,qBATS,EASc,sBATd,EASqD;AAC9D,wBAVS,EAUiB,yBAVjB,EAWT,aAXS,EAWM,SAXN,EAWiB,QAXjB,EAW2B,SAX3B,EAWqD;AAC9D,KAZS,EAYF,QAZE,EAYQ,QAZR,EAYqD;AAC9D,MAbS,EAaD,QAbC,EAaS,QAbT,EAaqD;AAC9D,IAdS,EAcH,IAdG,EAcqD;AAC9D,MAfS,EAeD,OAfC,EAeqD;AAC9D,MAhBS,EAgBD,OAhBC,EAgBQ,OAhBR,EAgBiB,QAhBjB,EAgB2B,KAhB3B,EAgBkC,IAhBlC,EAgBwC,IAhBxC,EAgBqD;AAC9D,UAjBS,EAiBG,OAjBH,EAiBY,WAjBZ,EAiByB,YAjBzB,EAkBT,MAlBS,EAkBD,UAlBC,EAkBW,YAlBX,EAkByB,WAlBzB,EAkBsC,aAlBtC,EAkBqD;AAC9D,aAnBS,EAmBM,MAnBN,EAmBc,UAnBd,EAmB0B,qBAnB1B,CAmBqD;AAnBrD,CAAX;;AAsBO,SAASm9P,WAAT,CAAqB7H,KAArB,EAA4B8H,MAA5B,EAAoC;AACzC,SAAOt9N,IAAI,CAACE,SAAL,CAAes1N,KAAf,EAAsBt1P,IAAtB,EAA4Bo9P,MAA5B,CAAP;AACD;;AAEM,SAASC,aAAT,CAAuBj1J,IAAvB,EAA6B;AAClC,MAAIktJ,KAAK,GAAI,OAAOltJ,IAAP,KAAgB,QAAhB,GAA2BtoE,IAAI,CAACC,KAAL,CAAWqoE,IAAX,CAA3B,GAA8CA,IAA3D;AACA,SAAOk1J,UAAU,CAAChI,KAAD,CAAjB;AACD;;AAED,SAASgI,UAAT,CAAoBhI,KAApB,EAA2B;AACzB,MAAIx3P,IAAI,GAAGw3P,KAAK,CAACmD,QAAjB;AAAA,MACI1/J,KAAK,GAAGu8J,KAAK,CAACv8J,KADlB;AAAA,MAEIw8F,MAFJ;AAAA,MAEY13M,CAFZ;AAAA,MAEekO,CAFf;;AAIA,MAAIgtG,KAAJ,EAAW;AACT,SAAKl7G,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC03M,MAAAA,MAAM,GAAGz3L,IAAI,GAAG,MAAH,GAAY,OAAzB;AACAi7F,MAAAA,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,IAAmB+/D,KAAnB;AACA,UAAIv8J,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAb,EAAqBr8J,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,EAAiBggE,MAAjB,GAA0B,IAA1B;AACrB,UAAI,aAAaz3P,IAAI,IAAIy3L,MAArB,CAAJ,EAAkC+nE,UAAU,CAACvkK,KAAK,CAACl7G,CAAD,CAAN,CAAV;AACnC;AACF;;AAED,MAAIigB,IAAJ,EAAU,wBAAUw3P,KAAV;AACV,SAAOA,KAAP;AACD;;;;;;;;;ACjDD;;AACA;;AACA;;;;AAEe,SAASiI,UAAT,CAAoBjI,KAApB,EAA2B;AACxC,MAAI13Q,SAAS,CAACT,MAAd,EAAsB;AACpB,SAAKqkM,IAAL,GAAY,8BAAc8zE,KAAd,CAAZ;AACD,GAFD,MAEO;AACL,SAAK9zE,IAAL,GAAYg8E,UAAU,CAAC;AACrB/E,MAAAA,QAAQ,EAAE,OADW;AAErBr5Q,MAAAA,IAAI,EAAE,MAFe;AAGrBq+Q,MAAAA,IAAI,EAAE;AAHe,KAAD,CAAtB;AAKA,SAAKj8E,IAAL,CAAUzoF,KAAV,GAAkB,CAAC,IAAI63J,kBAAJ,CAAc,KAAKpvE,IAAnB,CAAD,CAAlB;AACD;AACF;;AAED,IAAIvjM,SAAS,GAAGs/Q,UAAU,CAACt/Q,SAA3B;;AAEAA,SAAS,CAAC0uJ,MAAV,GAAmB,UAASywH,MAAT,EAAiB;AAClC,SAAO,4BAAY,KAAK57E,IAAjB,EAAuB47E,MAAM,IAAI,CAAjC,CAAP;AACD,CAFD;;AAIAn/Q,SAAS,CAAC8xQ,IAAV,GAAiB,UAAS2N,OAAT,EAAkBl0J,KAAlB,EAAyB7lH,KAAzB,EAAgC;AAC/C6lH,EAAAA,KAAK,GAAGA,KAAK,IAAI,KAAKg4E,IAAL,CAAUzoF,KAAV,CAAgB,CAAhB,CAAjB;AACA,MAAIg3J,IAAI,GAAGyN,UAAU,CAACE,OAAD,EAAUl0J,KAAV,CAArB;AACAA,EAAAA,KAAK,CAACzQ,KAAN,CAAYp1G,KAAZ,IAAqBosQ,IAArB;AACA,MAAIA,IAAI,CAACqF,MAAT,EAAiBrF,IAAI,CAACvmJ,KAAL,CAAW+rJ,MAAX,GAAoB,IAApB;AACjB,SAAOxF,IAAP;AACD,CAND;;AAQA,SAASyN,UAAT,CAAoB3pG,GAApB,EAAyBrqD,KAAzB,EAAgC;AAC9B,QAAMumJ,IAAI,GAAG;AACXY,IAAAA,MAAM,EAAO,IAAIN,eAAJ,EADF;AAEXtqO,IAAAA,IAAI,EAAS,CAAC,CAAC8tI,GAAG,CAAC9tI,IAFR;AAGXyjF,IAAAA,KAAK,EAAQA,KAHF;AAIX+uJ,IAAAA,WAAW,EAAE1kG,GAAG,CAAC0kG,WAAJ,KAAoB,KAApB,GAA4B,KAA5B,GAAoC,IAJtC;AAKXx/J,IAAAA,KAAK,EAAQ,EALF;AAMX0/J,IAAAA,QAAQ,EAAK5kG,GAAG,CAAC4kG,QANN;AAOXr5Q,IAAAA,IAAI,EAASy0K,GAAG,CAACz0K,IAAJ,IAAY2zH,SAPd;AAQX0qJ,IAAAA,IAAI,EAAS5pG,GAAG,CAAC4pG,IAAJ,IAAY1qJ,SARd;AASXqiJ,IAAAA,MAAM,EAAOvhG,GAAG,CAACuhG,MAAJ,IAAc;AAThB,GAAb,CAD8B,CAa9B;;AACA,MAAIvhG,GAAG,CAAC8pG,IAAJ,IAAY,IAAhB,EAAsB;AACpB5N,IAAAA,IAAI,CAAC4N,IAAL,GAAY9pG,GAAG,CAAC8pG,IAAhB;AACD;;AACD,MAAI9pG,GAAG,CAAC+pG,WAAR,EAAqB;AACnB7N,IAAAA,IAAI,CAAC6N,WAAL,GAAmB/pG,GAAG,CAAC+pG,WAAvB;AACD;;AAED,SAAO7N,IAAP;AACD;;;;;;;;;;;;;ACrDD;AACO,SAAS8N,SAAT,CAAmBC,GAAnB,EAAwBlH,GAAxB,EAA6BpsP,EAA7B,EAAiC;AACtC,MAAI,CAACszP,GAAD,IAAQ,OAAO7yP,QAAP,KAAoB,WAA5B,IAA2CA,QAAQ,CAACyB,aAAxD,EAAuE;AACrEoxP,IAAAA,GAAG,GAAG7yP,QAAN;AACD;;AACD,SAAO6yP,GAAG,GACLtzP,EAAE,GAAGszP,GAAG,CAAChlB,eAAJ,CAAoBtuO,EAApB,EAAwBosP,GAAxB,CAAH,GAAkCkH,GAAG,CAACpxP,aAAJ,CAAkBkqP,GAAlB,CAD/B,GAEN,IAFJ;AAGD,EAED;;;AACO,SAASmH,OAAT,CAAiBC,EAAjB,EAAqBpH,GAArB,EAA0B;AAC/BA,EAAAA,GAAG,GAAGA,GAAG,CAAC50Q,WAAJ,EAAN;AACA,MAAI2vI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MAA2BpgR,CAAC,GAAG,CAA/B;AAAA,MAAkCkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAA5C;;AACA,SAAOU,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB,IAAI8zI,KAAK,CAAC9zI,CAAD,CAAL,CAASqgR,OAAT,CAAiBl8Q,WAAjB,OAAmC40Q,GAAvC,EAA4C;AAC3D,WAAOjlI,KAAK,CAAC9zI,CAAD,CAAZ;AACD;AACF,EAED;AACA;;;AACO,SAASsgR,QAAT,CAAkBH,EAAlB,EAAsBr6Q,KAAtB,EAA6BizQ,GAA7B,EAAkCpsP,EAAlC,EAAsC;AAC3C,MAAIzlB,CAAC,GAAGi5Q,EAAE,CAACC,UAAH,CAAct6Q,KAAd,CAAR;AAAA,MAA8BiI,CAA9B;;AACA,MAAI,CAAC7G,CAAD,IAAMA,CAAC,CAACm5Q,OAAF,CAAUl8Q,WAAV,OAA4B40Q,GAAG,CAAC50Q,WAAJ,EAAtC,EAAyD;AACvD4J,IAAAA,CAAC,GAAG7G,CAAC,IAAI,IAAT;AACAA,IAAAA,CAAC,GAAG84Q,SAAS,CAACG,EAAE,CAACI,aAAJ,EAAmBxH,GAAnB,EAAwBpsP,EAAxB,CAAb;AACAwzP,IAAAA,EAAE,CAACK,YAAH,CAAgBt5Q,CAAhB,EAAmB6G,CAAnB;AACD;;AACD,SAAO7G,CAAP;AACD,EAED;;;AACO,SAASu5Q,QAAT,CAAkBN,EAAlB,EAAsBr6Q,KAAtB,EAA6B;AAClC,MAAIguI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MACIprG,IAAI,GAAGlhC,KAAK,CAACx0I,MADjB;;AAEA,SAAO01K,IAAI,GAAGlvK,KAAd,EAAqBq6Q,EAAE,CAACO,WAAH,CAAe5sI,KAAK,CAAC,EAAEkhC,IAAH,CAApB;;AACrB,SAAOmrG,EAAP;AACD,EAED;;;AACO,SAASQ,QAAT,CAAkBzO,IAAlB,EAAwB;AAC7B,SAAO,UAAUA,IAAI,CAAC0I,QAAf,IACF1I,IAAI,CAAC0N,IAAL,GAAY,WAAW1N,IAAI,CAAC0N,IAA5B,GAAmC,EADjC,KAEF1N,IAAI,CAAC3wQ,IAAL,GAAY,MAAM2wQ,IAAI,CAAC3wQ,IAAvB,GAA8B,EAF5B,CAAP;AAGD;;;;;;;;;AC5Cc,kBAAS6jH,KAAT,EAAgB+6J,EAAhB,EAAoB;AACjC,MAAIthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAX;AACA,SAAO,CACLx7J,KAAK,CAACy7J,OAAN,GAAgBhiC,IAAI,CAAC1rM,IAArB,IAA6BgtO,EAAE,CAACW,UAAH,IAAiB,CAA9C,CADK,EAEL17J,KAAK,CAAC27J,OAAN,GAAgBliC,IAAI,CAAC5rM,GAArB,IAA4BktO,EAAE,CAACa,SAAH,IAAgB,CAA5C,CAFK,CAAP;AAID;;;;;;;;;ACND;;AACA;;;;AAEe,kBAASp5P,IAAT,EAAew9F,KAAf,EAAsB+6J,EAAtB,EAA0Be,MAA1B,EAAkC;AAC/C,MAAIhP,IAAI,GAAGtqP,IAAI,IAAIA,IAAI,CAACsqP,IAAxB;AAAA,MACIiP,IADJ;AAAA,MACU78O,CADV;;AAGA,MAAI4tO,IAAI,IAAI,CAACiP,IAAI,GAAGxoI,eAAMu5H,IAAI,CAAC0I,QAAX,CAAR,EAA8BtB,GAA1C,EAA+C;AAC7Ch1O,IAAAA,CAAC,GAAG,oBAAM8gF,KAAN,EAAa+6J,EAAb,CAAJ;AACA77O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;AACA58O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;;AACA,WAAOt5P,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAxB,EAA+B;AAC7BrnF,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AACAm+B,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAAClD,CAAL,IAAU,CAAlB;AACD;;AACDkD,IAAAA,IAAI,GAAGu5P,IAAI,CAAC7H,GAAL,CAASpH,IAAI,CAACh3J,KAAd,EAAqB52E,CAArB,CAAP;AACD;;AAED,SAAO1c,IAAP;AACD;;;;;;;;;ACnBD;;AACA;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASw5P,OAAT,CAAiBnO,YAAjB,EAA+BoO,aAA/B,EAA8C;AAC3D,OAAKC,OAAL,GAAe,IAAf;AACA,OAAKC,SAAL,GAAiB,EAAjB;AACA,OAAK15C,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACA,OAAKuO,QAAL,GAAgBH,aAAa,IAAII,cAAjC;AACD,EAED;AACA;;;AACA,SAASA,cAAT,CAAwB/kK,OAAxB,EAAiC0I,KAAjC,EAAwCx9F,IAAxC,EAA8C5kB,KAA9C,EAAqD;AACnD05G,EAAAA,OAAO,CAACrmE,OAAR,GAAkB6kN,YAAlB,CAA+B,OAA/B,EAAwCl4P,KAAK,IAAI,EAAjD;AACD;;AAED,MAAM5C,SAAS,GAAGghR,OAAO,CAAChhR,SAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAA,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAae,MAAb,EAAqBzgQ,GAArB,EAA0B;AAC/C,OAAKihQ,GAAL,GAAWvB,EAAX;AACA,OAAKwB,IAAL,GAAYlhQ,GAAG,IAAI,IAAnB;AACA,SAAO,KAAKygQ,MAAL,CAAYA,MAAZ,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;;;AACA9gR,SAAS,CAACi2C,OAAV,GAAoB,YAAW;AAC7B,SAAO,KAAKqrO,GAAZ;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;;;AACAthR,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,CAFD;AAIA;AACA;AACA;;;AACAxhR,SAAS,CAAC8gR,MAAV,GAAmB,UAASA,MAAT,EAAiB;AAClC,MAAInhR,SAAS,CAACT,MAAd,EAAsB;AACpB,SAAKuiR,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO,KAAKW,OAAL,CAAax4Q,KAAb,EAAP;AACD;AACF,CAPD;AASA;AACA;AACA;;;AACAjJ,SAAS,CAACq3Q,KAAV,GAAkB,UAASA,KAAT,EAAgB;AAChC,MAAI,CAAC13Q,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKwiR,MAAZ;AACvB,OAAKA,MAAL,GAAcrK,KAAd;AACA,SAAO,IAAP;AACD,CAJD;AAMA;AACA;AACA;;;AACAr3Q,SAAS,CAACS,EAAV,GAAe;AAAS;AAAmB,CAAE,CAA7C;AAEA;AACA;AACA;;;AACAT,SAAS,CAACY,GAAV,GAAgB;AAAS;AAAmB,CAAE,CAA9C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAZ,SAAS,CAAC2hR,aAAV,GAA0B,UAASx1N,CAAT,EAAYtsC,IAAZ,EAAkBy8F,OAAlB,EAA2B;AACnD,OAAK,IAAI18G,CAAC,GAAGusD,CAAC,GAAGA,CAAC,CAACjtD,MAAL,GAAc,CAA5B,EAA+B,EAAEU,CAAF,IAAK,CAApC,GAAwC;AACtC,QAAIusD,CAAC,CAACvsD,CAAD,CAAD,CAAKigB,IAAL,KAAcA,IAAd,KAAuB,CAACy8F,OAAD,IAAYnwD,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,KAAiBA,OAApD,CAAJ,EAAkE;AAChE,aAAO18G,CAAP;AACD;AACF;;AACD,SAAO,CAAC,CAAR;AACD,CAPD;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAI,SAAS,CAACouJ,QAAV,GAAqB,UAASvuI,IAAT,EAAe;AAClC,QAAMssC,CAAC,GAAG,KAAKg1N,SAAf;AAAA,QAA0Br6Q,CAAC,GAAG,EAA9B;;AACA,MAAI+Y,IAAJ,EAAU;AACR/Y,IAAAA,CAAC,CAACjH,IAAF,CAAOI,KAAP,CAAa6G,CAAb,EAAgBqlD,CAAC,CAAC,KAAKy1N,SAAL,CAAe/hQ,IAAf,CAAD,CAAjB;AACD,GAFD,MAEO;AACL,SAAK,MAAM3C,CAAX,IAAgBivC,CAAhB,EAAmB;AAAErlD,MAAAA,CAAC,CAACjH,IAAF,CAAOI,KAAP,CAAa6G,CAAb,EAAgBqlD,CAAC,CAACjvC,CAAD,CAAjB;AAAwB;AAC9C;;AACD,SAAOpW,CAAP;AACD,CARD;AAUA;AACA;AACA;AACA;AACA;AACA;;;AACA9G,SAAS,CAAC4hR,SAAV,GAAsB,UAASzgR,IAAT,EAAe;AACnC,QAAMvB,CAAC,GAAGuB,IAAI,CAAC67B,OAAL,CAAa,GAAb,CAAV;AACA,SAAOp9B,CAAC,GAAG,CAAJ,GAAQuB,IAAR,GAAeA,IAAI,CAAC8H,KAAL,CAAW,CAAX,EAAcrJ,CAAd,CAAtB;AACD,CAHD;AAKA;AACA;AACA;AACA;AACA;AACA;;;AACAI,SAAS,CAAC6hR,UAAV,GAAuB,UAAS78J,KAAT,EAAgBx9F,IAAhB,EAAsB48F,IAAtB,EAA4B;AACjD,OAAKqjH,OAAL,CACGntB,QADH,CACYl2F,IADZ,EACkB;AAACwtD,IAAAA,OAAO,EAAC;AAAT,GADlB,EAEG/iK,IAFH,CAEQglM,GAAG,IAAI;AACX,UAAMv1M,CAAC,GAAG,IAAIgmH,UAAJ,CAAeU,KAAK,CAACnlG,IAArB,EAA2BmlG,KAA3B,CAAV;AAAA,UACMl+G,CAAC,GAAG,oBAAU,IAAV,EAAgB,GAAhB,CADV;;AAEA,SAAK,MAAM3F,IAAX,IAAmB0yM,GAAnB,EAAwB/sM,CAAC,CAACg0P,YAAF,CAAe35P,IAAf,EAAqB0yM,GAAG,CAAC1yM,IAAD,CAAxB;;AACxB2F,IAAAA,CAAC,CAACu9G,aAAF,CAAgB/lH,CAAhB;AACD,GAPH,EAQGykB,KARH,CAQS,YAAW;AAAE;AAAkB,GARxC;AASD,CAVD;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA/iB,SAAS,CAAC8hR,aAAV,GAA0B,UAAS98J,KAAT,EAAgBx9F,IAAhB,EAAsBu6P,IAAtB,EAA4B;AACpD,MAAIv6P,IAAI,IAAIA,IAAI,CAACw6P,OAAL,IAAgB,IAA5B,EAAkC;AAChCx6P,IAAAA,IAAI,GAAG,0BAAYA,IAAZ,EAAkBw9F,KAAlB,EAAyB,KAAKz2F,MAAL,EAAzB,EAAwC,KAAKkzP,OAA7C,CAAP;AACA,UAAM7+Q,KAAK,GAAIm/Q,IAAI,IAAIv6P,IAAR,IAAgBA,IAAI,CAACw6P,OAAtB,IAAkC,IAAhD;;AACA,SAAKZ,QAAL,CAAc1iR,IAAd,CAAmB,KAAK6iR,IAAxB,EAA8B,IAA9B,EAAoCv8J,KAApC,EAA2Cx9F,IAA3C,EAAiD5kB,KAAjD;AACD;AACF,CAND;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA5C,SAAS,CAACiiR,yBAAV,GAAsC,UAASz6P,IAAT,EAAe;AACnD,QAAMu4P,EAAE,GAAG,KAAKxxP,MAAL,EAAX;AACA,MAAI,CAACwxP,EAAL,EAAS;AAET,QAAMthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAb;AAAA,QACMM,MAAM,GAAG,KAAKW,OADpB;AAAA,QAEM/O,MAAM,GAAGlrP,IAAI,CAACkrP,MAFpB;AAAA,QAGM5qQ,KAAK,GAAG4qQ,MAAM,CAAC5qQ,KAAP,EAHd;AAAA,QAIM+tB,MAAM,GAAG68O,MAAM,CAAC78O,MAAP,EAJf;AAMA,MAAI9vB,CAAC,GAAG2sQ,MAAM,CAACrgK,EAAP,GAAYyuK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC1rM,IAArC;AAAA,MACIzuB,CAAC,GAAGouP,MAAM,CAACtgK,EAAP,GAAY0uK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC5rM,GADrC,CAVmD,CAanD;;AACA,SAAOrrB,IAAI,CAACsqP,IAAL,KAActqP,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAA/B,CAAP,EAA8C;AAC5CxlH,IAAAA,CAAC,IAAIyhB,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAue,IAAAA,CAAC,IAAIkD,IAAI,CAAClD,CAAL,IAAU,CAAf;AACD,GAjBkD,CAmBnD;;;AACA,SAAO;AACLve,IAAAA,CADK;AACFue,IAAAA,CADE;AACCxc,IAAAA,KADD;AACQ+tB,IAAAA,MADR;AAELkd,IAAAA,IAAI,EAAEhtC,CAFD;AAEI8sC,IAAAA,GAAG,EAAEvuB,CAFT;AAEY0uB,IAAAA,KAAK,EAAEjtC,CAAC,GAAG+B,KAFvB;AAE8BgrC,IAAAA,MAAM,EAAExuB,CAAC,GAAGuR;AAF1C,GAAP;AAID,CAxBD;;;;;;;;;ACjLA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASqsP,QAAT,CAAkBpjD,MAAlB,EAA0B;AACvC,OAAKwiD,GAAL,GAAW,IAAX;AACA,OAAKa,QAAL,GAAgB,IAAhB;AACA,OAAK16C,OAAL,GAAe,IAAImrC,uBAAJ,CAAmB9zC,MAAnB,CAAf;AACD;;AAED,IAAI9+N,SAAS,GAAGkiR,QAAQ,CAACliR,SAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAA,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAaj4Q,KAAb,EAAoB+tB,MAApB,EAA4BirP,MAA5B,EAAoCsB,WAApC,EAAiD;AACtE,OAAKd,GAAL,GAAWvB,EAAX;AACA,SAAO,KAAKvsF,MAAL,CAAY1rL,KAAZ,EAAmB+tB,MAAnB,EAA2BirP,MAA3B,EAAmCsB,WAAnC,CAAP;AACD,CAHD;AAKA;AACA;AACA;AACA;;;AACApiR,SAAS,CAACi2C,OAAV,GAAoB,YAAW;AAC7B,SAAO,KAAKqrO,GAAZ;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;;;AACAthR,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,CAFD;AAIA;AACA;AACA;;;AACAxhR,SAAS,CAACw5Q,UAAV,GAAuB,UAAS6I,OAAT,EAAkB;AACvC,MAAI1iR,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B,OAAO,KAAKijR,QAAZ;AAC5B,OAAKA,QAAL,GAAgBE,OAAhB;AACA,SAAO,IAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAriR,SAAS,CAACwzL,MAAV,GAAmB,UAAS1rL,KAAT,EAAgB+tB,MAAhB,EAAwBirP,MAAxB,EAAgCsB,WAAhC,EAA6C;AAC9D,OAAKE,MAAL,GAAcx6Q,KAAd;AACA,OAAKy6Q,OAAL,GAAe1sP,MAAf;AACA,OAAK4rP,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,OAAK0B,MAAL,GAAcJ,WAAW,IAAI,CAA7B;AACA,SAAO,IAAP;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;AACA;;;AACApiR,SAAS,CAACyiR,KAAV,GAAkB;AAAS;AAAU,CACpC,CADD;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAziR,SAAS,CAAC0iR,MAAV,GAAmB,UAASrL,KAAT,EAAgB;AACjC,MAAIzpQ,CAAC,GAAG,IAAR,CADiC,CAGjC;AACA;;AACAA,EAAAA,CAAC,CAAC+0Q,KAAF,GAAU,YAAW;AAAE/0Q,IAAAA,CAAC,CAACg1Q,OAAF,CAAUvL,KAAV;AAAmB,GAA1C,CALiC,CAOjC;;;AACAzpQ,EAAAA,CAAC,CAAC+0Q,KAAF,GARiC,CAUjC;AACA;;;AACA/0Q,EAAAA,CAAC,CAAC+0Q,KAAF,GAAU,IAAV;AAEA,SAAO/0Q,CAAP;AACD,CAfD;AAiBA;AACA;AACA;AACA;AACA;;;AACA5N,SAAS,CAAC4iR,OAAV,GAAoB;AAAS;AAAW,CACtC;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA5iR,SAAS,CAAC6iR,WAAV,GAAwB,UAASxL,KAAT,EAAgB;AACtC,MAAIzpQ,CAAC,GAAG,KAAK80Q,MAAL,CAAYrL,KAAZ,CAAR;AACA,SAAO,KAAKyL,MAAL,GACH,KAAKA,MAAL,CAAYj0Q,IAAZ,CAAiB,YAAW;AAAE,WAAOjB,CAAP;AAAW,GAAzC,CADG,GAEHrF,OAAO,CAACC,OAAR,CAAgBoF,CAAhB,CAFJ;AAGD,CALD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA5N,SAAS,CAAC+iR,KAAV,GAAkB,UAASlyO,MAAT,EAAiB6pK,GAAjB,EAAsB;AACtC,MAAI9sM,CAAC,GAAG,IAAR;AAAA,MACIs2B,CAAC,GAAGt2B,CAAC,CAAC65N,OAAF,CAAU52L,MAAV,EAAkB6pK,GAAlB,CADR;;AAGA,MAAI,CAAC9sM,CAAC,CAACk1Q,MAAP,EAAe;AACb;AACA,QAAIpkR,IAAI,GAAGkP,CAAC,CAAC+0Q,KAAb;AACA/0Q,IAAAA,CAAC,CAACk1Q,MAAF,GAAWl1Q,CAAC,CAAC65N,OAAF,CAAU5rM,KAAV,GACRhtB,IADQ,CACH,UAASm0Q,MAAT,EAAiB;AACrB,UAAIA,MAAJ,EAAYtkR,IAAI;AAChBkP,MAAAA,CAAC,CAACk1Q,MAAF,GAAW,IAAX;AACD,KAJQ,CAAX;AAKD;;AAED,SAAO5+O,CAAP;AACD,CAfD;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAlkC,SAAS,CAACgzQ,WAAV,GAAwB,UAASt4D,GAAT,EAAc;AACpC,SAAO,KAAKqoE,KAAL,CAAW,aAAX,EAA0BroE,GAA1B,CAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA16M,SAAS,CAACizQ,SAAV,GAAsB,UAASv4D,GAAT,EAAc;AAClC,SAAO,KAAKqoE,KAAL,CAAW,WAAX,EAAwBroE,GAAxB,CAAP;AACD,CAFD;;;;;;;;ACpLO,MAAMuoE,YAAY,GAAG,SAArB;;AACA,MAAMC,aAAa,GAAG,UAAtB;;AACA,MAAMC,UAAU,GAAG,OAAnB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,aAAa,GAAG,UAAtB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,YAAY,GAAG,SAArB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,aAAa,GAAG,UAAtB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,UAAU,GAAG,OAAnB;;AACA,MAAMC,gBAAgB,GAAG,UAAzB;;AACA,MAAMC,UAAU,GAAG,OAAnB;;AACA,MAAMC,eAAe,GAAG,YAAxB;;AACA,MAAMC,eAAe,GAAG,YAAxB;;AACA,MAAMC,cAAc,GAAG,WAAvB;;AACA,MAAMC,aAAa,GAAG,UAAtB;;AAEA,MAAMC,MAAM,GAAG,CACpBlB,YADoB,EAEpBC,aAFoB,EAGpBC,UAHoB,EAIpBC,cAJoB,EAKpBC,cALoB,EAMpBC,aANoB,EAOpBC,cAPoB,EAQpBC,YARoB,EASpBC,cAToB,EAUpBC,aAVoB,EAWpBC,cAXoB,EAYpBC,UAZoB,EAapBC,gBAboB,EAcpBC,UAdoB,EAepBC,eAfoB,EAgBpBC,eAhBoB,EAiBpBC,cAjBoB,EAkBpBC,aAlBoB,CAAf;;AAqBA,MAAME,gBAAgB,GAAGX,cAAzB;;AAEA,MAAMY,gBAAgB,GAAGX,aAAzB;;AAEA,MAAMY,SAAS,GAAGV,UAAlB;;;;;;;;;;AC5CP;;AACA;;AACA;;AAMA;;AACA;;AACA;;;;AAEe,SAASW,aAAT,CAAuBzlD,MAAvB,EAA+BkjD,OAA/B,EAAwC;AACrDhB,mBAAQtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;;AACA,OAAKwC,KAAL,GAAa,IAAb;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAK/rF,OAAL,GAAe,EAAf;AACD;;AAED,MAAM34L,SAAS,GAAG,wBAASukR,aAAT,EAAwBvD,gBAAxB,CAAlB;;AAEAhhR,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAae,MAAb,EAAqBzgQ,GAArB,EAA0B;AAC/C,OAAK+kQ,OAAL,GAAerF,EAAE,IAAI,kBAAQA,EAAR,EAAY,QAAZ,CAArB,CAD+C,CAG/C;;AACA,GAAC6D,kBAAD,EAAaL,sBAAb,EAA6BE,sBAA7B,EAA6CC,qBAA7C,EAA4DL,sBAA5D,EACG3/Q,OADH,CACWmc,IAAI,IAAI+kQ,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CADrC;AAGA,SAAOmhQ,iBAAQhhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,CARD;;AAUA,MAAMskQ,WAAW,GAAG9kQ,IAAI,IACtBA,IAAI,KAAKmkQ,uBAAT,IACAnkQ,IAAI,KAAKokQ,sBADT,IAEApkQ,IAAI,KAAKqkQ,qBAHiB,GAK1B,CAACF,uBAAD,EAAkBC,sBAAlB,EAAkCC,qBAAlC,CAL0B,GAM1B,CAACrkQ,IAAD,CANF,EAQA;;;AACA,SAAS+kQ,kBAAT,CAA4BtoK,OAA5B,EAAqCz8F,IAArC,EAA2C;AACzC8kQ,EAAAA,WAAW,CAAC9kQ,IAAD,CAAX,CAAkBnc,OAAlB,CAA0B6iB,CAAC,IAAIoI,gBAAgB,CAAC2tF,OAAD,EAAU/1F,CAAV,CAA/C;AACD;;AAED,SAASoI,gBAAT,CAA0B2tF,OAA1B,EAAmCz8F,IAAnC,EAAyC;AACvC,QAAM0O,MAAM,GAAG+tF,OAAO,CAAC/tF,MAAR,EAAf;;AACA,MAAIA,MAAM,IAAI,CAAC+tF,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,CAAf,EAAsC;AACpCy8F,IAAAA,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,IAAwB,CAAxB;AACA0O,IAAAA,MAAM,CAACI,gBAAP,CAAwB9O,IAAxB,EAA8By8F,OAAO,CAACz8F,IAAD,CAAP,GAC1Bo3L,GAAG,IAAI36F,OAAO,CAACz8F,IAAD,CAAP,CAAco3L,GAAd,CADmB,GAE1BA,GAAG,IAAI36F,OAAO,CAACuoK,IAAR,CAAahlQ,IAAb,EAAmBo3L,GAAnB,CAFX;AAID;AACF,EAED;;;AACAj3M,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAK62P,OAAZ;AACD,CAFD,EAIA;;;AACAplR,SAAS,CAAC4xK,OAAV,GAAoB,YAAW;AAC7B,SAAO,KAAKwzG,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAP;AACD,CAFD,EAIA;;;AACA9uB,SAAS,CAACu5L,MAAV,GAAmB4qF,cAAnB;;AAEA,SAAS1gQ,IAAT,CAAcqhQ,SAAd,EAAyBC,SAAzB,EAAoCC,QAApC,EAA8C;AAC5C,SAAO,UAAS/tE,GAAT,EAAc;AACnB,UAAMnwM,CAAC,GAAG,KAAKo6Q,OAAf;AAAA,UACMh9O,CAAC,GAAG,KAAK+gP,SAAL,CAAehuE,GAAf,CADV;;AAGA,QAAI/yK,CAAC,KAAKp9B,CAAV,EAAa;AACX;AACA,WAAK+9Q,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EAFW,CAEgB;AAC5B,KAHD,MAGO;AACL;AACA,UAAI,CAACnwM,CAAD,IAAM,CAACA,CAAC,CAACo+Q,IAAb,EAAmB;AACjB;AACA;AACA,aAAKL,IAAL,CAAUG,QAAV,EAAoB/tE,GAApB;AACD;;AACD,WAAKiqE,OAAL,GAAeh9O,CAAf,CAPK,CAOsB;;AAC3B,WAAK2gP,IAAL,CAAUE,SAAV,EAAqB9tE,GAArB,EARK,CAQsB;;AAC3B,WAAK4tE,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EATK,CASsB;AAC5B;AACF,GAlBD;AAmBD;;AAED,SAASkuE,QAAT,CAAkBtlQ,IAAlB,EAAwB;AACtB,SAAO,UAASo3L,GAAT,EAAc;AACnB,SAAK4tE,IAAL,CAAUhlQ,IAAV,EAAgBo3L,GAAhB;AACA,SAAKiqE,OAAL,GAAe,IAAf;AACD,GAHD;AAID,EAED;;;AACAlhR,SAAS,CAACqlR,cAAV,GAA2B,UAASpuE,GAAT,EAAc;AACvC,OAAK4tE,IAAL,CAAUd,uBAAV,EAA2B9sE,GAA3B;AACD,CAFD;;AAIAj3M,SAAS,CAACslR,SAAV,GAAsB7hQ,IAAI,CAACggQ,sBAAD,EAAiBE,sBAAjB,EAAiCD,qBAAjC,CAA1B;AACA1jR,SAAS,CAACulR,QAAV,GAAsB9hQ,IAAI,CAAC6/P,qBAAD,EAAgBF,sBAAhB,EAAgCC,sBAAhC,CAA1B;AAEArjR,SAAS,CAACwlR,QAAV,GAAsBL,QAAQ,CAACzB,qBAAD,CAA9B;AACA1jR,SAAS,CAACylR,SAAV,GAAsBN,QAAQ,CAAC9B,sBAAD,CAA9B;;AAEArjR,SAAS,CAAC0lR,SAAV,GAAsB,UAASzuE,GAAT,EAAc;AAClC,OAAKutE,KAAL,GAAa,KAAKtD,OAAlB;AACA,OAAK2D,IAAL,CAAUtB,sBAAV,EAA0BtsE,GAA1B;AACD,CAHD;;AAKAj3M,SAAS,CAAC2lR,KAAV,GAAkB,UAAS1uE,GAAT,EAAc;AAC9B,MAAI,KAAKutE,KAAL,KAAe,KAAKtD,OAAxB,EAAiC;AAC/B,SAAK2D,IAAL,CAAUjB,kBAAV,EAAsB3sE,GAAtB;AACA,SAAKutE,KAAL,GAAa,IAAb;AACD;AACF,CALD;;AAOAxkR,SAAS,CAAC4lR,UAAV,GAAuB,UAAS3uE,GAAT,EAAc;AACnC,OAAKwtE,MAAL,GAAc,KAAKQ,SAAL,CAAehuE,GAAG,CAAC4uE,cAAJ,CAAmB,CAAnB,CAAf,CAAd;;AAEA,MAAI,KAAKnB,MAAT,EAAiB;AACf,SAAKxD,OAAL,GAAe,KAAKuD,MAApB;AACA,SAAKC,MAAL,GAAc,KAAd;AACD;;AAED,OAAKG,IAAL,CAAUb,uBAAV,EAA2B/sE,GAA3B,EAAgC,IAAhC;AACD,CATD;;AAWAj3M,SAAS,CAAC8lR,SAAV,GAAsB,UAAS7uE,GAAT,EAAc;AAClC,OAAK4tE,IAAL,CAAUZ,sBAAV,EAA0BhtE,GAA1B,EAA+B,IAA/B;AACD,CAFD;;AAIAj3M,SAAS,CAAC+lR,QAAV,GAAqB,UAAS9uE,GAAT,EAAc;AACjC,OAAK4tE,IAAL,CAAUX,qBAAV,EAAyBjtE,GAAzB,EAA8B,IAA9B;AACA,OAAKwtE,MAAL,GAAc,IAAd;AACD,CAHD,EAKA;;;AACAzkR,SAAS,CAAC6kR,IAAV,GAAiB,UAAShlQ,IAAT,EAAeo3L,GAAf,EAAoBkrB,KAApB,EAA2B;AAC1C,QAAMr7N,CAAC,GAAGq7N,KAAK,GAAG,KAAKsiD,MAAR,GAAiB,KAAKvD,OAArC;AAAA,QACM/0N,CAAC,GAAG,KAAKg1N,SAAL,CAAethQ,IAAf,CADV,CAD0C,CAI1C;;AACAo3L,EAAAA,GAAG,CAAC+uE,QAAJ,GAAenmQ,IAAf,CAL0C,CAO1C;;AACA,MAAIA,IAAI,KAAKykQ,iBAAT,IAAsBx9Q,CAAtB,IAA2BA,CAAC,CAACs9G,IAAjC,EAAuC;AACrC,SAAKy9J,UAAL,CAAgB5qE,GAAhB,EAAqBnwM,CAArB,EAAwBA,CAAC,CAACs9G,IAA1B;AACD,GAFD,MAEO,IAAIvkG,IAAI,KAAKukQ,wBAAT,IAA6BvkQ,IAAI,KAAKwkQ,wBAA1C,EAA4D;AACjE,SAAKvC,aAAL,CAAmB7qE,GAAnB,EAAwBnwM,CAAxB,EAA2B+Y,IAAI,KAAKwkQ,wBAApC;AACD,GAZyC,CAc1C;;;AACA,MAAIl4N,CAAJ,EAAO;AACL,SAAK,IAAIvsD,CAAC,GAAC,CAAN,EAASN,GAAG,GAAC6sD,CAAC,CAACjtD,MAApB,EAA4BU,CAAC,GAACN,GAA9B,EAAmC,EAAEM,CAArC,EAAwC;AACtCusD,MAAAA,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,CAAa59G,IAAb,CAAkB,KAAK6iR,IAAvB,EAA6BtqE,GAA7B,EAAkCnwM,CAAlC;AACD;AACF;AACF,CApBD,EAsBA;;;AACA9G,SAAS,CAACS,EAAV,GAAe,UAASof,IAAT,EAAey8F,OAAf,EAAwB;AACrC,QAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,QACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,QAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,MAAI18G,CAAC,GAAG,CAAR,EAAW;AACTglR,IAAAA,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CAAlB;AACA,KAACssC,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiC;AAC/BggB,MAAAA,IAAI,EAAKA,IADsB;AAE/By8F,MAAAA,OAAO,EAAEA;AAFsB,KAAjC;AAID;;AAED,SAAO,IAAP;AACD,CAdD,EAgBA;;;AACAt8G,SAAS,CAACY,GAAV,GAAgB,UAASif,IAAT,EAAey8F,OAAf,EAAwB;AACtC,QAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,QACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,QAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,MAAI18G,CAAC,IAAI,CAAT,EAAY;AACVusD,IAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,SAAO,IAAP;AACD,CAVD;;AAYAI,SAAS,CAACilR,SAAV,GAAsB,UAAShuE,GAAT,EAAc;AAClC,QAAM/yK,CAAC,GAAG,oBAAM+yK,GAAN,EAAW,KAAKmuE,OAAhB,CAAV;AAAA,QACM75P,CAAC,GAAG,KAAKk2P,OADf;AAEA,SAAO,KAAK5J,IAAL,CAAU,KAAK6J,MAAf,EAAuBx9O,CAAC,CAAC,CAAD,CAAxB,EAA6BA,CAAC,CAAC,CAAD,CAA9B,EAAmCA,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAA3C,EAAgD2Y,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAAxD,CAAP;AACD,CAJD,EAMA;AACA;AACA;;;AACAvrB,SAAS,CAAC63Q,IAAV,GAAiB,UAASR,KAAT,EAAgBtxQ,CAAhB,EAAmBue,CAAnB,EAAsBwzP,EAAtB,EAA0BC,EAA1B,EAA8B;AAC7C,QAAM1pO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,QACMkgG,IAAI,GAAG+M,eAAMxH,KAAK,CAACmD,QAAZ,CADb;AAEA,SAAO1I,IAAI,CAAC+F,IAAL,CAAUn5Q,IAAV,CAAe,IAAf,EAAqB2vC,CAArB,EAAwBgpO,KAAxB,EAA+BtxQ,CAA/B,EAAkCue,CAAlC,EAAqCwzP,EAArC,EAAyCC,EAAzC,CAAP;AACD,CAJD;;;;;;;;;AC3MA,SAAS74M,gBAAT,GAA4B;AAC1B,SAAO,OAAO1yC,MAAP,KAAkB,WAAlB,GAAgCA,MAAM,CAAC0yC,gBAAP,IAA2B,CAA3D,GAA+D,CAAtE;AACD;;AAED,IAAI84M,UAAU,GAAG94M,gBAAgB,EAAjC;;AAEe,kBAAS3wC,MAAT,EAAiBzmB,KAAjB,EAAwB+tB,MAAxB,EAAgCirP,MAAhC,EAAwCsB,WAAxC,EAAqDvuE,GAArD,EAA0D;AACvE,QAAMoyE,KAAK,GAAG,OAAOC,WAAP,KAAuB,WAAvB,IACC33P,MAAM,YAAY23P,WADnB,IAEC33P,MAAM,CAAC43P,UAAP,IAAqB,IAFpC;AAAA,QAGMv0G,OAAO,GAAGrjJ,MAAM,CAACO,UAAP,CAAkB,IAAlB,CAHhB;AAAA,QAIMs3P,KAAK,GAAGH,KAAK,GAAGjO,UAAH,GAAgBoK,WAJnC;AAMA7zP,EAAAA,MAAM,CAACzmB,KAAP,GAAeA,KAAK,GAAGs+Q,KAAvB;AACA73P,EAAAA,MAAM,CAACsH,MAAP,GAAgBA,MAAM,GAAGuwP,KAAzB;;AAEA,OAAK,MAAMviR,GAAX,IAAkBgwM,GAAlB,EAAuB;AACrBjiC,IAAAA,OAAO,CAAC/tK,GAAD,CAAP,GAAegwM,GAAG,CAAChwM,GAAD,CAAlB;AACD;;AAED,MAAIoiR,KAAK,IAAIG,KAAK,KAAK,CAAvB,EAA0B;AACxB73P,IAAAA,MAAM,CAAC83P,KAAP,CAAav+Q,KAAb,GAAqBA,KAAK,GAAG,IAA7B;AACAymB,IAAAA,MAAM,CAAC83P,KAAP,CAAaxwP,MAAb,GAAsBA,MAAM,GAAG,IAA/B;AACD;;AAED+7I,EAAAA,OAAO,CAAComG,UAAR,GAAqBoO,KAArB;AACAx0G,EAAAA,OAAO,CAAC00G,YAAR,CACEF,KADF,EACS,CADT,EACY,CADZ,EACeA,KADf,EAEEA,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAFhB,EAGEsF,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAHhB;AAMA,SAAOvyP,MAAP;AACD;;;;;;;;;ACjCD;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,SAASg4P,cAAT,CAAwBznD,MAAxB,EAAgC;AAC7CojD,oBAASxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;;AACA,OAAK0nD,QAAL,GAAgB,EAAhB;AACA,OAAKC,OAAL,GAAe,KAAf;AACA,OAAKC,MAAL,GAAc,IAAItU,eAAJ,EAAd;AACA,OAAKuU,MAAL,GAAc,IAAIvU,eAAJ,EAAd;AACD;;AAED,MAAMpyQ,SAAS,GAAG,wBAASumR,cAAT,EAAyBrE,iBAAzB,CAAlB;AAAA,MACMt3O,IAAI,GAAGs3O,kBAASliR,SADtB;;AAGAA,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAaj4Q,KAAb,EAAoB+tB,MAApB,EAA4BirP,MAA5B,EAAoCsB,WAApC,EAAiD7rM,OAAjD,EAA0D;AAC/E,OAAKiwM,QAAL,GAAgBjwM,OAAO,IAAI,EAA3B;AAEA,OAAK6uM,OAAL,GAAe,KAAKoB,QAAL,CAAcM,eAAd,GACX,IADW,GAEX,wBAAO,CAAP,EAAU,CAAV,EAAa,KAAKN,QAAL,CAAc3mQ,IAA3B,CAFJ,CAH+E,CAKzC;;AAEtC,MAAIkgQ,EAAE,IAAI,KAAKqF,OAAf,EAAwB;AACtB,uBAASrF,EAAT,EAAa,CAAb,EAAgBgH,WAAhB,CAA4B,KAAK3B,OAAjC;;AACA,SAAKA,OAAL,CAAatqB,YAAb,CAA0B,OAA1B,EAAmC,OAAnC;AACD,GAV8E,CAY/E;;;AACA,SAAOlwN,IAAI,CAACy0O,UAAL,CAAgB3gR,IAAhB,CAAqB,IAArB,EAA2BqhR,EAA3B,EAA+Bj4Q,KAA/B,EAAsC+tB,MAAtC,EAA8CirP,MAA9C,EAAsDsB,WAAtD,CAAP;AACD,CAdD;;AAgBApiR,SAAS,CAACwzL,MAAV,GAAmB,UAAS1rL,KAAT,EAAgB+tB,MAAhB,EAAwBirP,MAAxB,EAAgCsB,WAAhC,EAA6C;AAC9Dx3O,EAAAA,IAAI,CAAC4oJ,MAAL,CAAY90L,IAAZ,CAAiB,IAAjB,EAAuBoJ,KAAvB,EAA8B+tB,MAA9B,EAAsCirP,MAAtC,EAA8CsB,WAA9C;;AAEA,MAAI,KAAKgD,OAAT,EAAkB;AAChB;AACA,yBAAO,KAAKA,OAAZ,EAAqB,KAAK9C,MAA1B,EAAkC,KAAKC,OAAvC,EACE,KAAKd,OADP,EACgB,KAAKe,MADrB,EAC6B,KAAKgE,QAAL,CAAc50G,OAD3C;AAED,GAJD,MAIO;AACL;AACA,UAAMpkD,GAAG,GAAG,KAAKg5J,QAAL,CAAcM,eAA1B;AACA,QAAI,CAACt5J,GAAL,EAAU,qBAAM,qDAAN;AACVA,IAAAA,GAAG,CAAC/3G,KAAJ,CAAU,KAAK+sQ,MAAf,EAAuB,KAAKA,MAA5B;AACAh1J,IAAAA,GAAG,CAAC6yF,SAAJ,CAAc,KAAKohE,OAAL,CAAa,CAAb,CAAd,EAA+B,KAAKA,OAAL,CAAa,CAAb,CAA/B;AACD;;AAED,OAAKgF,OAAL,GAAe,IAAf;AACA,SAAO,IAAP;AACD,CAjBD;;AAmBAzmR,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAK62P,OAAZ;AACD,CAFD;;AAIAplR,SAAS,CAAC4xK,OAAV,GAAoB,YAAW;AAC7B,SAAO,KAAK40G,QAAL,CAAcM,eAAd,KACD,KAAK1B,OAAL,GAAe,KAAKA,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAf,GAA+C,IAD9C,CAAP;AAED,CAHD;;AAKA9uB,SAAS,CAACyiR,KAAV,GAAkB,UAASj7P,IAAT,EAAe;AAC/B,MAAI7Z,CAAC,GAAG,KAAKg5Q,MAAL,CAAYtvE,KAAZ,GAAoBmR,KAApB,CAA0BhhM,IAAI,CAACkrP,MAA/B,CAAR;AAAA,MACIrkO,CAAC,GAAG7mB,IAAI,CAACsqP,IAAL,CAAUvmJ,KADlB;;AAGA,SAAOl9E,CAAP,EAAU;AACR1gC,IAAAA,CAAC,CAAC0yM,SAAF,CAAYhyK,CAAC,CAACtoC,CAAF,IAAO,CAAnB,EAAsBsoC,CAAC,CAAC/pB,CAAF,IAAO,CAA7B;AACA+pB,IAAAA,CAAC,GAAGA,CAAC,CAACyjO,IAAF,CAAOvmJ,KAAX;AACD;;AAED,OAAKm7J,MAAL,CAAYl+D,KAAZ,CAAkB76M,CAAlB;AACD,CAVD;;AAYA,SAASk5Q,YAAT,CAAsBx4O,CAAtB,EAAyB1gC,CAAzB,EAA4BmzQ,MAA5B,EAAoC;AAClC;AACAnzQ,EAAAA,CAAC,CAAC25K,MAAF,CAAS,CAAT,EAAYr7K,KAAZ,GAFkC,CAIlC;;AACA,MAAIoiC,CAAC,CAAC2pO,UAAF,GAAe,CAAnB,EAAsB;AACpBrqQ,IAAAA,CAAC,CAAC8H,KAAF,CAAQ44B,CAAC,CAAC2pO,UAAV,EAAsB/rQ,KAAtB,GAA8BwJ,KAA9B,CAAoC,IAAI44B,CAAC,CAAC2pO,UAA1C;AACD,GAPiC,CASlC;;;AACArqQ,EAAAA,CAAC,CAAC0yM,SAAF,CAAY,EAAEygE,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAAZ,EAA8B,EAAEA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAA9B,EAVkC,CAYlC;;AACAzyO,EAAAA,CAAC,CAAC4gO,SAAF;AACA5gO,EAAAA,CAAC,CAACowM,IAAF,CAAO9wO,CAAC,CAAC0kG,EAAT,EAAa1kG,CAAC,CAACykG,EAAf,EAAmBzkG,CAAC,CAAC7F,KAAF,EAAnB,EAA8B6F,CAAC,CAACkoB,MAAF,EAA9B;AACAwY,EAAAA,CAAC,CAACvG,IAAF;AAEA,SAAOn6B,CAAP;AACD;;AAED,MAAMi5Q,UAAU,GAAG,CAAC9F,MAAD,EAASh5Q,KAAT,EAAgB+tB,MAAhB,KAA2B,IAAIu8O,eAAJ,GAC3C7vQ,GAD2C,CACvC,CADuC,EACpC,CADoC,EACjCuF,KADiC,EAC1B+tB,MAD0B,EAE3CwqL,SAF2C,CAEjC,CAACygE,MAAM,CAAC,CAAD,CAF0B,EAErB,CAACA,MAAM,CAAC,CAAD,CAFc,CAA9C;;AAIA9gR,SAAS,CAAC4iR,OAAV,GAAoB,UAASvL,KAAT,EAAgB;AAClC,QAAMhpO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,QACMrmJ,CAAC,GAAG,KAAKk2P,OADf;AAAA,QAEMv1N,CAAC,GAAG,KAAKo2N,MAFf;AAAA,QAGMn2N,CAAC,GAAG,KAAKo2N,OAHf;AAAA,QAIM5jK,EAAE,GAAG,KAAK+nK,MAJhB;AAAA,QAKMM,EAAE,GAAGJ,UAAU,CAACr7P,CAAD,EAAI2gC,CAAJ,EAAOC,CAAP,CALrB,CADkC,CAQlC;;AACA9d,EAAAA,CAAC,CAACriB,IAAF;AACA,QAAMre,CAAC,GAAG,KAAK84Q,OAAL,IAAgB9nK,EAAE,CAACo1F,KAAH,EAAhB,IACL,KAAK0yE,OAAL,GAAe,KAAf,EAAsBO,EAAE,CAAC1/F,MAAH,CAAU,CAAV,CADjB,IAENu/F,YAAY,CAACx4O,CAAD,EAAI24O,EAAE,CAAC3nC,SAAH,CAAa1gI,EAAb,CAAJ,EAAsBpzF,CAAtB,CAFhB;AAIA,OAAK8rL,KAAL,CAAW,CAAC9rL,CAAC,CAAC,CAAD,CAAb,EAAkB,CAACA,CAAC,CAAC,CAAD,CAApB,EAAyB2gC,CAAzB,EAA4BC,CAA5B,EAdkC,CAgBlC;;AACA,OAAK24L,IAAL,CAAUz2M,CAAV,EAAagpO,KAAb,EAAoB1pQ,CAApB,EAjBkC,CAmBlC;;AACA0gC,EAAAA,CAAC,CAAC6rO,OAAF;AACAv7J,EAAAA,EAAE,CAAC04F,KAAH;AAEA,SAAO,IAAP;AACD,CAxBD;;AA0BAr3M,SAAS,CAAC8kP,IAAV,GAAiB,UAASt3H,GAAT,EAAc6pJ,KAAd,EAAqB3E,MAArB,EAA6B;AAC5C,QAAMZ,IAAI,GAAGv5H,eAAM8+H,KAAK,CAACmD,QAAZ,CAAb;AACA,MAAInD,KAAK,CAACvvO,IAAV,EAAgB,mBAAK0lF,GAAL,EAAU6pJ,KAAV;AAChBvF,EAAAA,IAAI,CAAChtB,IAAL,CAAUpmP,IAAV,CAAe,IAAf,EAAqB8uH,GAArB,EAA0B6pJ,KAA1B,EAAiC3E,MAAjC;AACA,MAAI2E,KAAK,CAACvvO,IAAV,EAAgB0lF,GAAG,CAAC0sJ,OAAJ;AACjB,CALD;;AAOAl6Q,SAAS,CAACq3M,KAAV,GAAkB,UAAStxM,CAAT,EAAYue,CAAZ,EAAe4nC,CAAf,EAAkBC,CAAlB,EAAqB;AACrC,QAAM0nJ,GAAG,GAAG,KAAK2yE,QAAjB;AAAA,QACOn4O,CAAC,GAAG,KAAKujI,OAAL,EADX;;AAGA,MAAIiiC,GAAG,CAACh0L,IAAJ,KAAa,KAAb,IAAsB,CAACg0L,GAAG,CAACizE,eAA/B,EAAgD;AAC9C;AACA;AACAz4O,IAAAA,CAAC,CAAC44O,SAAF,CAAYlhR,CAAZ,EAAeue,CAAf,EAAkB4nC,CAAlB,EAAqBC,CAArB;AACD;;AAED,MAAI,KAAKg2N,QAAL,IAAiB,IAArB,EAA2B;AACzB9zO,IAAAA,CAAC,CAAC6nO,SAAF,GAAc,KAAKiM,QAAnB;AACA9zO,IAAAA,CAAC,CAAC8nO,QAAF,CAAWpwQ,CAAX,EAAcue,CAAd,EAAiB4nC,CAAjB,EAAoBC,CAApB;AACD;AACF,CAdD;;;;;;;;;ACtIA;;AACA;;AACA;;AACA;;;;AAEe,SAAS+6N,UAAT,CAAoBpoD,MAApB,EAA4BkjD,OAA5B,EAAqC;AAClDhB,mBAAQtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;;AACA,QAAM71N,CAAC,GAAG,IAAV;AACAA,EAAAA,CAAC,CAACg7N,YAAF,GAAiBnuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC1C,QAAIA,IAAI,IAAIA,IAAI,CAAC48F,IAAjB,EAAuBj4D,CAAC,CAAC01N,UAAF,CAAa5qE,GAAb,EAAkBzvL,IAAlB,EAAwBA,IAAI,CAAC48F,IAA7B;AACxB,GAFwB,CAAzB;AAGAj4D,EAAAA,CAAC,CAACi7N,eAAF,GAAoBpuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC7C2kC,IAAAA,CAAC,CAAC21N,aAAF,CAAgB7qE,GAAhB,EAAqBzvL,IAArB,EAA2ByvL,GAAG,CAACp3L,IAAJ,KAAawkQ,wBAAxC;AACD,GAF2B,CAA5B;AAGD;;AAED,MAAMrkR,SAAS,GAAG,wBAASknR,UAAT,EAAqBlG,gBAArB,CAAlB;;AAEAhhR,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAae,MAAb,EAAqBzgQ,GAArB,EAA0B;AAC/C,MAAIinQ,GAAG,GAAG,KAAKC,IAAf;;AACA,MAAID,GAAJ,EAAS;AACPA,IAAAA,GAAG,CAACpgF,mBAAJ,CAAwBo9E,iBAAxB,EAAmC,KAAK6C,YAAxC;AACAG,IAAAA,GAAG,CAACpgF,mBAAJ,CAAwBk9E,wBAAxB,EAA0C,KAAKgD,eAA/C;AACAE,IAAAA,GAAG,CAACpgF,mBAAJ,CAAwBm9E,wBAAxB,EAA0C,KAAK+C,eAA/C;AACD;;AACD,OAAKG,IAAL,GAAYD,GAAG,GAAGvH,EAAE,IAAI,kBAAQA,EAAR,EAAY,KAAZ,CAAxB;;AACA,MAAIuH,GAAJ,EAAS;AACPA,IAAAA,GAAG,CAAC34P,gBAAJ,CAAqB21P,iBAArB,EAAgC,KAAK6C,YAArC;AACAG,IAAAA,GAAG,CAAC34P,gBAAJ,CAAqBy1P,wBAArB,EAAuC,KAAKgD,eAA5C;AACAE,IAAAA,GAAG,CAAC34P,gBAAJ,CAAqB01P,wBAArB,EAAuC,KAAK+C,eAA5C;AACD;;AACD,SAAOpG,iBAAQhhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,CAdD;;AAgBArgB,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAKg5P,IAAZ;AACD,CAFD,EAIA;;;AACA,MAAMvuF,QAAQ,GAAG,CAACpnB,OAAD,EAAUt1D,OAAV,KAAsB26F,GAAG,IAAI;AAC5C,MAAIzvL,IAAI,GAAGyvL,GAAG,CAAC9gK,MAAJ,CAAWkxO,QAAtB;AACA7/P,EAAAA,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcugB,IAAd,IAAsBA,IAAI,CAAC,CAAD,CAA1B,GAAgCA,IAAvC;AACAyvL,EAAAA,GAAG,CAAC+uE,QAAJ,GAAe/uE,GAAG,CAACp3L,IAAnB;AACAy8F,EAAAA,OAAO,CAAC59G,IAAR,CAAakzK,OAAO,CAAC2vG,IAArB,EAA2BtqE,GAA3B,EAAgCzvL,IAAhC;AACD,CALD,EAOA;;;AACAxnB,SAAS,CAACS,EAAV,GAAe,UAASof,IAAT,EAAey8F,OAAf,EAAwB;AACrC,QAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,QACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,QAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,MAAI18G,CAAC,GAAG,CAAR,EAAW;AACT,UAAMmG,CAAC,GAAG;AACR8Z,MAAAA,IADQ;AAERy8F,MAAAA,OAFQ;AAGR08E,MAAAA,QAAQ,EAAEA,QAAQ,CAAC,IAAD,EAAO18E,OAAP;AAHV,KAAV;AAMA,KAACnwD,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiCkG,CAAjC;;AACA,QAAI,KAAKwhR,IAAT,EAAe;AACb,WAAKA,IAAL,CAAU54P,gBAAV,CAA2BxtB,IAA3B,EAAiC4E,CAAC,CAACizL,QAAnC;AACD;AACF;;AAED,SAAO,IAAP;AACD,CAnBD,EAqBA;;;AACAh5L,SAAS,CAACY,GAAV,GAAgB,UAASif,IAAT,EAAey8F,OAAf,EAAwB;AACtC,QAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,QACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,QAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,MAAI18G,CAAC,IAAI,CAAT,EAAY;AACV,QAAI,KAAK2nR,IAAT,EAAe;AACb,WAAKA,IAAL,CAAUrgF,mBAAV,CAA8B/lM,IAA9B,EAAoCgrD,CAAC,CAACvsD,CAAD,CAAD,CAAKo5L,QAAzC;AACD;;AACD7sI,IAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,SAAO,IAAP;AACD,CAbD;;;;;;;;;AErEA;;AAEe,kBAASoK,MAAT,EAAiB;AAC9B,MAAI8D,CAAC,GAAG9D,MAAM,CAAC9K,MAAf;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAAC+H,KAAL,CAAW,CAAC,CAACpK,CAAC,IAAI,CAAN,IAAW,CAAX,GAAe,EAAEA,CAAjB,GAAqBA,CAAtB,IAA2BwK,CAAtC,CAAR;AAAA,QACI6wE,EAAE,GAAG30E,MAAM,CAAC,CAACpK,CAAC,GAAGkO,CAAJ,GAAQ,CAAT,IAAcA,CAAf,CADf;AAAA,QAEIqwE,EAAE,GAAGn0E,MAAM,CAACpK,CAAC,GAAGkO,CAAL,CAFf;AAAA,QAGIswE,EAAE,GAAGp0E,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAHf;AAAA,QAII4qP,EAAE,GAAG1uP,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAJf;AAKA,WAAO,kBAAM,CAACxK,CAAC,GAAG1D,CAAC,GAAGkO,CAAT,IAAcA,CAApB,EAAuB6wE,EAAvB,EAA2BR,EAA3B,EAA+BC,EAA/B,EAAmCs6K,EAAnC,CAAP;AACD,GAPD;AAQD;;;;;;;;;;;AEZD;;;;AAEA,SAAShjK,MAAT,CAAgB5uF,CAAhB,EAAmB2F,CAAnB,EAAsB;AACpB,SAAO,UAASnJ,CAAT,EAAY;AACjB,WAAOwD,CAAC,GAAGxD,CAAC,GAAGmJ,CAAf;AACD,GAFD;AAGD;;AAED,SAASksP,WAAT,CAAqB7xP,CAArB,EAAwB6G,CAAxB,EAA2B2W,CAA3B,EAA8B;AAC5B,SAAOxd,CAAC,GAAGnB,IAAI,CAAC0Q,GAAL,CAASvP,CAAT,EAAYwd,CAAZ,CAAJ,EAAoB3W,CAAC,GAAGhI,IAAI,CAAC0Q,GAAL,CAAS1I,CAAT,EAAY2W,CAAZ,IAAiBxd,CAAzC,EAA4Cwd,CAAC,GAAG,IAAIA,CAApD,EAAuD,UAAShhB,CAAT,EAAY;AACxE,WAAOqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,GAAGxD,CAAC,GAAGqK,CAAjB,EAAoB2W,CAApB,CAAP;AACD,GAFD;AAGD;;AAEM,SAASs0O,GAAT,CAAa9xP,CAAb,EAAgB6G,CAAhB,EAAmB;AACxB,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAC,GAAG,GAAJ,IAAWA,CAAC,GAAG,CAAC,GAAhB,GAAsBA,CAAC,GAAG,MAAM9G,IAAI,CAACsG,KAAL,CAAWQ,CAAC,GAAG,GAAf,CAAhC,GAAsDA,CAA1D,CAAT,GAAwE,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAhF;AACD;;AAEM,SAASk4J,KAAT,CAAe16I,CAAf,EAAkB;AACvB,SAAO,CAACA,CAAC,GAAG,CAACA,CAAN,MAAa,CAAb,GAAiBu0O,OAAjB,GAA2B,UAAS/xP,CAAT,EAAY6G,CAAZ,EAAe;AAC/C,WAAOA,CAAC,GAAG7G,CAAJ,GAAQ6xP,WAAW,CAAC7xP,CAAD,EAAI6G,CAAJ,EAAO2W,CAAP,CAAnB,GAA+B,uBAAS9Z,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAtC;AACD,GAFD;AAGD;;AAEc,SAAS+xP,OAAT,CAAiB/xP,CAAjB,EAAoB6G,CAApB,EAAuB;AACpC,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAJ,CAAT,GAAkB,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAA1B;AACD;;;;;;;;;AC5BD;;AACA;;AACA;;AACA;;;;;;;;eAEgB,SAASgyP,QAAT,CAAkBx0O,CAAlB,EAAqB;AACnC,MAAI8wO,KAAK,GAAG,kBAAM9wO,CAAN,CAAZ;;AAEA,WAASgxO,GAAT,CAAa5pP,KAAb,EAAoB6F,GAApB,EAAyB;AACvB,QAAI3D,CAAC,GAAGwnP,KAAK,CAAC,CAAC1pP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BkC,CAA3B,EAA8B,CAAC2D,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB3D,CAApD,CAAb;AAAA,QACIygC,CAAC,GAAG+mN,KAAK,CAAC1pP,KAAK,CAAC2iC,CAAP,EAAU98B,GAAG,CAAC88B,CAAd,CADb;AAAA,QAEI1gC,CAAC,GAAGynP,KAAK,CAAC1pP,KAAK,CAACiC,CAAP,EAAU4D,GAAG,CAAC5D,CAAd,CAFb;AAAA,QAGIyoP,OAAO,GAAG,oBAAQ1qP,KAAK,CAAC0qP,OAAd,EAAuB7kP,GAAG,CAAC6kP,OAA3B,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACkC,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC2iC,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD;;AAED4pP,EAAAA,GAAG,CAACt2F,KAAJ,GAAY85F,QAAZ;AAEA,SAAOxD,GAAP;AACD,CApBc,CAoBZ,CApBY;;;;AAsBf,SAASyD,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,SAAO,UAASC,MAAT,EAAiB;AACtB,QAAInrP,CAAC,GAAGmrP,MAAM,CAAC/5P,MAAf;AAAA,QACI0O,CAAC,GAAG,IAAIlO,KAAJ,CAAUoO,CAAV,CADR;AAAA,QAEIugC,CAAC,GAAG,IAAI3uC,KAAJ,CAAUoO,CAAV,CAFR;AAAA,QAGIH,CAAC,GAAG,IAAIjO,KAAJ,CAAUoO,CAAV,CAHR;AAAA,QAIIlO,CAJJ;AAAA,QAIOw1P,KAJP;;AAKA,SAAKx1P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBw1P,MAAAA,KAAK,GAAG,kBAAS6D,MAAM,CAACr5P,CAAD,CAAf,CAAR;AACAgO,MAAAA,CAAC,CAAChO,CAAD,CAAD,GAAOw1P,KAAK,CAACxnP,CAAN,IAAW,CAAlB;AACAygC,MAAAA,CAAC,CAACzuC,CAAD,CAAD,GAAOw1P,KAAK,CAAC/mN,CAAN,IAAW,CAAlB;AACA1gC,MAAAA,CAAC,CAAC/N,CAAD,CAAD,GAAOw1P,KAAK,CAACznP,CAAN,IAAW,CAAlB;AACD;;AACDC,IAAAA,CAAC,GAAGorP,MAAM,CAACprP,CAAD,CAAV;AACAygC,IAAAA,CAAC,GAAG2qN,MAAM,CAAC3qN,CAAD,CAAV;AACA1gC,IAAAA,CAAC,GAAGqrP,MAAM,CAACrrP,CAAD,CAAV;AACAynP,IAAAA,KAAK,CAACgB,OAAN,GAAgB,CAAhB;AACA,WAAO,UAAS9yP,CAAT,EAAY;AACjB8xP,MAAAA,KAAK,CAACxnP,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAAC/mN,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAACznP,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACA,aAAO8xP,KAAK,GAAG,EAAf;AACD,KALD;AAMD,GAtBD;AAuBD;;AAEM,IAAI8D,QAAQ,GAAGH,SAAS,CAAC3kM,cAAD,CAAxB;;AACA,IAAI+kM,cAAc,GAAGJ,SAAS,CAACK,oBAAD,CAA9B;;;;;;;;;;;AEtDP;;AACA;;;;;;;;AAEe,kBAAStyP,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO,CAAC,gCAAcA,CAAd,IAAmB4rP,oBAAnB,GAAiCC,YAAlC,EAAgD1yP,CAAhD,EAAmD6G,CAAnD,CAAP;AACD;;AAEM,SAAS6rP,YAAT,CAAsB1yP,CAAtB,EAAyB6G,CAAzB,EAA4B;AACjC,MAAI8rP,EAAE,GAAG9rP,CAAC,GAAGA,CAAC,CAACzO,MAAL,GAAc,CAAxB;AAAA,MACIw6P,EAAE,GAAG5yP,CAAC,GAAGnB,IAAI,CAACG,GAAL,CAAS2zP,EAAT,EAAa3yP,CAAC,CAAC5H,MAAf,CAAH,GAA4B,CADtC;AAAA,MAEI6G,CAAC,GAAG,IAAIrG,KAAJ,CAAUg6P,EAAV,CAFR;AAAA,MAGIrtP,CAAC,GAAG,IAAI3M,KAAJ,CAAU+5P,EAAV,CAHR;AAAA,MAII75P,CAJJ;;AAMA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyBmG,CAAC,CAACnG,CAAD,CAAD,GAAO,oBAAMkH,CAAC,CAAClH,CAAD,CAAP,EAAY+N,CAAC,CAAC/N,CAAD,CAAb,CAAP;;AACzB,SAAOA,CAAC,GAAG65P,EAAX,EAAe,EAAE75P,CAAjB,EAAoByM,CAAC,CAACzM,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAD,CAAR;;AAEpB,SAAO,UAAS0D,CAAT,EAAY;AACjB,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyByM,CAAC,CAACzM,CAAD,CAAD,GAAOmG,CAAC,CAACnG,CAAD,CAAD,CAAK0D,CAAL,CAAP;;AACzB,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;AGrBD;;;;AAEe,kBAASvF,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,EAAR;AAAA,MACIyM,CAAC,GAAG,EADR;AAAA,MAEI6Q,CAFJ;AAIA,MAAIpW,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;AACzC,MAAI6G,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;;AAEzC,OAAKuP,CAAL,IAAUvP,CAAV,EAAa;AACX,QAAIuP,CAAC,IAAIpW,CAAT,EAAY;AACVlH,MAAAA,CAAC,CAACsd,CAAD,CAAD,GAAO,oBAAMpW,CAAC,CAACoW,CAAD,CAAP,EAAYvP,CAAC,CAACuP,CAAD,CAAb,CAAP;AACD,KAFD,MAEO;AACL7Q,MAAAA,CAAC,CAAC6Q,CAAD,CAAD,GAAOvP,CAAC,CAACuP,CAAD,CAAR;AACD;AACF;;AAED,SAAO,UAAS5Z,CAAT,EAAY;AACjB,SAAK4Z,CAAL,IAAUtd,CAAV,EAAayM,CAAC,CAAC6Q,CAAD,CAAD,GAAOtd,CAAC,CAACsd,CAAD,CAAD,CAAK5Z,CAAL,CAAP;;AACb,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;ACtBD;;;;AAEA,IAAIstP,GAAG,GAAG,6CAAV;AAAA,IACIC,GAAG,GAAG,IAAIr/H,MAAJ,CAAWo/H,GAAG,CAACjkM,MAAf,EAAuB,GAAvB,CADV;;AAGA,SAASlgB,IAAT,CAAc7nC,CAAd,EAAiB;AACf,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;AAED,SAASihF,GAAT,CAAajhF,CAAb,EAAgB;AACd,SAAO,UAASrK,CAAT,EAAY;AACjB,WAAOqK,CAAC,CAACrK,CAAD,CAAD,GAAO,EAAd;AACD,GAFD;AAGD;;AAEc,kBAASwD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIksP,EAAE,GAAGF,GAAG,CAACh1M,SAAJ,GAAgBi1M,GAAG,CAACj1M,SAAJ,GAAgB,CAAzC;AAAA,MAA4C;AACxCm1M,EAAAA,EADJ;AAAA,MACQ;AACJC,EAAAA,EAFJ;AAAA,MAEQ;AACJC,EAAAA,EAHJ;AAAA,MAGQ;AACJp6P,EAAAA,CAAC,GAAG,CAAC,CAJT;AAAA,MAIY;AACRwD,EAAAA,CAAC,GAAG,EALR;AAAA,MAKY;AACRk0F,EAAAA,CAAC,GAAG,EANR,CAD4B,CAOhB;AAEZ;;AACAxwF,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR,EAAY6G,CAAC,GAAGA,CAAC,GAAG,EAApB,CAV4B,CAY5B;;AACA,SAAO,CAACmsP,EAAE,GAAGH,GAAG,CAAC5lO,IAAJ,CAASjtB,CAAT,CAAN,MACCizP,EAAE,GAAGH,GAAG,CAAC7lO,IAAJ,CAASpmB,CAAT,CADN,CAAP,EAC2B;AACzB,QAAI,CAACqsP,EAAE,GAAGD,EAAE,CAACr0P,KAAT,IAAkBm0P,EAAtB,EAA0B;AAAE;AAC1BG,MAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,EAAYG,EAAZ,CAAL;AACA,UAAI52P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,WACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN;;AACD,QAAI,CAACF,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAR,OAAkBC,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAzB,CAAJ,EAAmC;AAAE;AACnC,UAAI32P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQm6P,EAAR,CAAV,CAAsB;AAAtB,WACK32P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASm6P,EAAT;AACN,KAHD,MAGO;AAAE;AACP32P,MAAAA,CAAC,CAAC,EAAExD,CAAH,CAAD,GAAS,IAAT;AACA03F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAJ;AAAOmG,QAAAA,CAAC,EAAE,qBAAO+zP,EAAP,EAAWC,EAAX;AAAV,OAAP;AACD;;AACDF,IAAAA,EAAE,GAAGD,GAAG,CAACj1M,SAAT;AACD,GA5B2B,CA8B5B;;;AACA,MAAIk1M,EAAE,GAAGlsP,CAAC,CAACzO,MAAX,EAAmB;AACjB86P,IAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,CAAL;AACA,QAAIz2P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,SACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN,GAnC2B,CAqC5B;AACA;;;AACA,SAAO52P,CAAC,CAAClE,MAAF,GAAW,CAAX,GAAgBo4F,CAAC,CAAC,CAAD,CAAD,GACjB1I,GAAG,CAAC0I,CAAC,CAAC,CAAD,CAAD,CAAKvxF,CAAN,CADc,GAEjByvC,IAAI,CAAC7nC,CAAD,CAFH,IAGAA,CAAC,GAAG2pF,CAAC,CAACp4F,MAAN,EAAc,UAASoE,CAAT,EAAY;AACzB,SAAK,IAAI1D,CAAC,GAAG,CAAR,EAAW2rB,CAAhB,EAAmB3rB,CAAC,GAAG+N,CAAvB,EAA0B,EAAE/N,CAA5B,EAA+BwD,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAC/B,WAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,GANA,CAAP;AAOD;;;;;;;;;AC/DD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,kBAASsD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIrK,CAAC,GAAG,OAAOqK,CAAf;AAAA,MAAkBtB,CAAlB;AACA,SAAOsB,CAAC,IAAI,IAAL,IAAarK,CAAC,KAAK,SAAnB,GAA+B,uBAASqK,CAAT,CAA/B,GACD,CAACrK,CAAC,KAAK,QAAN,GAAiBs4M,eAAjB,GACDt4M,CAAC,KAAK,QAAN,GAAkB,CAAC+I,CAAC,GAAG,oBAAMsB,CAAN,CAAL,KAAkBA,CAAC,GAAGtB,CAAJ,EAAOipP,YAAzB,IAAgCz5C,eAAlD,GACAluM,CAAC,YAAYynP,cAAb,GAAqBE,YAArB,GACA3nP,CAAC,YAAY+nE,IAAb,GAAoBwgI,aAApB,GACA,gCAAcvoM,CAAd,IAAmB4rP,oBAAnB,GACA75P,KAAK,CAACuH,OAAN,CAAc0G,CAAd,IAAmB6rP,mBAAnB,GACA,OAAO7rP,CAAC,CAACu3M,OAAT,KAAqB,UAArB,IAAmC,OAAOv3M,CAAC,CAAC4B,QAAT,KAAsB,UAAzD,IAAuE/E,KAAK,CAACmD,CAAD,CAA5E,GAAkFs5L,eAAlF,GACA2U,eAPA,EAOQ90M,CAPR,EAOW6G,CAPX,CADN;AASD;;;;;;;;;AErBD;;AAEe,kBAAS7G,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,gBAAI,CAACkH,CAAL,EAAQ,CAAC6G,CAAT,CAAR;AACA,SAAO,UAASrK,CAAT,EAAY;AACjB,QAAIyC,CAAC,GAAGnG,CAAC,CAAC0D,CAAD,CAAT;AACA,WAAOyC,CAAC,GAAG,MAAMJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAC,GAAG,GAAf,CAAjB;AACD,GAHD;AAID;;;;;;;;;;AGRD;;;;;;AAEA,IAAIw0P,OAAJ;AAEA;;AACO,SAASC,QAAT,CAAkB53P,KAAlB,EAAyB;AAC9B,QAAMy0F,CAAC,GAAG,KAAK,OAAOojK,SAAP,KAAqB,UAArB,GAAkCA,SAAlC,GAA8CC,eAAnD,EAAoE93P,KAAK,GAAG,EAA5E,CAAV;AACA,SAAOy0F,CAAC,CAACsjK,UAAF,GAAe96H,mBAAf,GAA0B,wBAAUxoC,CAAC,CAACvwF,CAAZ,EAAeuwF,CAAC,CAAC1pF,CAAjB,EAAoB0pF,CAAC,CAAChrF,CAAtB,EAAyBgrF,CAAC,CAAC5qF,CAA3B,EAA8B4qF,CAAC,CAAC/4F,CAAhC,EAAmC+4F,CAAC,CAAC9rF,CAArC,CAAjC;AACD;;AAEM,SAASqvP,QAAT,CAAkBh4P,KAAlB,EAAyB;AAC9B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOi9H,mBAAP;AACnB,MAAI,CAAC06H,OAAL,EAAcA,OAAO,GAAGvtO,QAAQ,CAAC6tO,eAAT,CAAyB,4BAAzB,EAAuD,GAAvD,CAAV;AACdN,EAAAA,OAAO,CAACO,YAAR,CAAqB,WAArB,EAAkCl4P,KAAlC;AACA,MAAI,EAAEA,KAAK,GAAG23P,OAAO,CAAC1xE,SAAR,CAAkBkyE,OAAlB,CAA0BC,WAA1B,EAAV,CAAJ,EAAwD,OAAOn7H,mBAAP;AACxDj9H,EAAAA,KAAK,GAAGA,KAAK,CAACslN,MAAd;AACA,SAAO,wBAAUtlN,KAAK,CAACkE,CAAhB,EAAmBlE,KAAK,CAAC+K,CAAzB,EAA4B/K,KAAK,CAACyJ,CAAlC,EAAqCzJ,KAAK,CAAC6J,CAA3C,EAA8C7J,KAAK,CAACtE,CAApD,EAAuDsE,KAAK,CAAC2I,CAA7D,CAAP;AACD;;;;;;;;;ACjBD;;AACA;;;;AAEA,SAAS0vP,oBAAT,CAA8Bn5M,KAA9B,EAAqCo5M,OAArC,EAA8CC,OAA9C,EAAuDC,QAAvD,EAAiE;AAE/D,WAASpxO,GAAT,CAAa5mB,CAAb,EAAgB;AACd,WAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC4mB,GAAF,KAAU,GAArB,GAA2B,EAAlC;AACD;;AAED,WAASq2L,SAAT,CAAmBg7C,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAmCp4P,CAAnC,EAAsCk0F,CAAtC,EAAyC;AACvC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAO,YAAP,EAAqB,IAArB,EAA2Bq7P,OAA3B,EAAoC,IAApC,EAA0CC,OAA1C,CAAR;AACA7jK,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,IAAIC,EAAV,EAAc;AACnBp4P,MAAAA,CAAC,CAACvD,IAAF,CAAO,eAAe07P,EAAf,GAAoBL,OAApB,GAA8BM,EAA9B,GAAmCL,OAA1C;AACD;AACF;;AAED,WAAShB,MAAT,CAAgBrzP,CAAhB,EAAmB6G,CAAnB,EAAsBvK,CAAtB,EAAyBk0F,CAAzB,EAA4B;AAC1B,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX,UAAI7G,CAAC,GAAG6G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CAAjB,KAAgC,IAAIA,CAAC,GAAG7G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CADtC,CACgD;;AAC3DwwF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAhB,EAA2B,IAA3B,EAAiCg4P,QAAjC,IAA6C,CAAjD;AAAoDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAvD,OAAP;AACD,KAHD,MAGO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAT,GAAqBuK,CAArB,GAAyBytP,QAAhC;AACD;AACF;;AAED,WAAShB,KAAT,CAAetzP,CAAf,EAAkB6G,CAAlB,EAAqBvK,CAArB,EAAwBk0F,CAAxB,EAA2B;AACzB,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX2pF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgCg4P,QAAhC,IAA4C,CAAhD;AAAmDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAtD,OAAP;AACD,KAFD,MAEO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBuK,CAApB,GAAwBytP,QAA/B;AACD;AACF;;AAED,WAAS3lP,KAAT,CAAe4lP,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+Bp4P,CAA/B,EAAkCk0F,CAAlC,EAAqC;AACnC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,IAArC,EAA2C,GAA3C,CAAR;AACAk0F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AAC/Bp4P,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBm4P,EAApB,GAAyB,GAAzB,GAA+BC,EAA/B,GAAoC,GAA3C;AACD;AACF;;AAED,SAAO,UAAS10P,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIvK,CAAC,GAAG,EAAR;AAAA,QAAY;AACRk0F,IAAAA,CAAC,GAAG,EADR,CADoB,CAER;;AACZxwF,IAAAA,CAAC,GAAGg7C,KAAK,CAACh7C,CAAD,CAAT,EAAc6G,CAAC,GAAGm0C,KAAK,CAACn0C,CAAD,CAAvB;AACA0yM,IAAAA,SAAS,CAACv5M,CAAC,CAACmzP,UAAH,EAAenzP,CAAC,CAACozP,UAAjB,EAA6BvsP,CAAC,CAACssP,UAA/B,EAA2CtsP,CAAC,CAACusP,UAA7C,EAAyD92P,CAAzD,EAA4Dk0F,CAA5D,CAAT;AACA6iK,IAAAA,MAAM,CAACrzP,CAAC,CAACqzP,MAAH,EAAWxsP,CAAC,CAACwsP,MAAb,EAAqB/2P,CAArB,EAAwBk0F,CAAxB,CAAN;AACA8iK,IAAAA,KAAK,CAACtzP,CAAC,CAACszP,KAAH,EAAUzsP,CAAC,CAACysP,KAAZ,EAAmBh3P,CAAnB,EAAsBk0F,CAAtB,CAAL;AACA7hF,IAAAA,KAAK,CAAC3O,CAAC,CAACuzP,MAAH,EAAWvzP,CAAC,CAACwzP,MAAb,EAAqB3sP,CAAC,CAAC0sP,MAAvB,EAA+B1sP,CAAC,CAAC2sP,MAAjC,EAAyCl3P,CAAzC,EAA4Ck0F,CAA5C,CAAL;AACAxwF,IAAAA,CAAC,GAAG6G,CAAC,GAAG,IAAR,CARoB,CAQN;;AACd,WAAO,UAASrK,CAAT,EAAY;AACjB,UAAI1D,CAAC,GAAG,CAAC,CAAT;AAAA,UAAYkO,CAAC,GAAGwpF,CAAC,CAACp4F,MAAlB;AAAA,UAA0BqsB,CAA1B;;AACA,aAAO,EAAE3rB,CAAF,GAAMkO,CAAb,EAAgB1K,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAChB,aAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,KAJD;AAKD,GAdD;AAeD;;AAEM,IAAIi4P,uBAAuB,GAAGR,oBAAoB,CAACT,eAAD,EAAW,MAAX,EAAmB,KAAnB,EAA0B,MAA1B,CAAlD;;AACA,IAAIkB,uBAAuB,GAAGT,oBAAoB,CAACL,eAAD,EAAW,IAAX,EAAiB,GAAjB,EAAsB,GAAtB,CAAlD;;;;;;;;;;AE9DP;;AACA;;;;;;AAEA,SAASpE,GAAT,CAAaoC,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,QAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEc8qP,GAAG,CAACoC,UAAD;;;AACX,IAAI8D,OAAO,GAAGlG,GAAG,CAACpB,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;AAEe,SAASqC,GAAT,CAAa/rP,KAAb,EAAoB6F,GAApB,EAAyB;AACtC,MAAIG,CAAC,GAAG,oBAAM,CAAChG,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BgG,CAAhC,EAAmC,CAACH,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsBG,CAAzD,CAAR;AAAA,MACI5K,CAAC,GAAG,oBAAM4E,KAAK,CAAC5E,CAAZ,EAAeyK,GAAG,CAACzK,CAAnB,CADR;AAAA,MAEI6G,CAAC,GAAG,oBAAMjC,KAAK,CAACiC,CAAZ,EAAe4D,GAAG,CAAC5D,CAAnB,CAFR;AAAA,MAGIyoP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,SAAO,UAAS9yP,CAAT,EAAY;AACjBoI,IAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC5E,CAAN,GAAUA,CAAC,CAACxD,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,WAAOoI,KAAK,GAAG,EAAf;AACD,GAND;AAOD;;;;;;;;;ACfD;;AACA;;;;;;AAEA,SAASosP,GAAT,CAAac,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI9/C,CAAC,GAAG,oBAAMX,KAAK,CAACW,CAAZ,EAAekF,GAAG,CAAClF,CAAnB,CADR;AAAA,QAEIqF,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACW,CAAN,GAAUA,CAAC,CAAC/I,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEcosP,GAAG,CAACc,UAAD;;;AACX,IAAI+D,OAAO,GAAG7E,GAAG,CAAC1C,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;;;AAEA,SAASqD,SAAT,CAAmBG,GAAnB,EAAwB;AACtB,SAAQ,SAASgE,cAAT,CAAwBt4O,CAAxB,EAA2B;AACjCA,IAAAA,CAAC,GAAG,CAACA,CAAL;;AAEA,aAASm0O,SAAT,CAAmB/sP,KAAnB,EAA0B6F,GAA1B,EAA+B;AAC7B,UAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,wBAAeA,KAAf,CAAT,EAAgCygD,CAAjC,EAAoC,CAAC56C,GAAG,GAAG,wBAAeA,GAAf,CAAP,EAA4B46C,CAAhE,CAAX;AAAA,UACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,UAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,UAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,aAAO,UAAS9yP,CAAT,EAAY;AACjBoI,QAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAAC/L,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAYghB,CAAZ,CAAD,CAAX;AACA5Y,QAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,eAAOoI,KAAK,GAAG,EAAf;AACD,OAND;AAOD;;AAED+sP,IAAAA,SAAS,CAACz5F,KAAV,GAAkB49F,cAAlB;AAEA,WAAOnE,SAAP;AACD,GApBM,CAoBJ,CApBI,CAAP;AAqBD;;eAEcA,SAAS,CAACG,UAAD;;;AACjB,IAAIiE,aAAa,GAAGpE,SAAS,CAACrD,cAAD,CAA7B;;;;;;;;;;AC5BP;;;;AAEe,SAAS0H,SAAT,CAAmBC,WAAnB,EAAgC/yP,MAAhC,EAAwC;AACrD,MAAIA,MAAM,KAAK8qH,SAAf,EAA0B9qH,MAAM,GAAG+yP,WAAT,EAAsBA,WAAW,GAAGn6P,cAApC;AAC1B,MAAIhD,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAA/B;AAAA,MAAkC4S,CAAC,GAAG9H,MAAM,CAAC,CAAD,CAA5C;AAAA,MAAiD8zM,CAAC,GAAG,IAAIp+M,KAAJ,CAAUoO,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAtB,CAArD;;AACA,SAAOlO,CAAC,GAAGkO,CAAX,EAAcgwM,CAAC,CAACl+M,CAAD,CAAD,GAAOm9P,WAAW,CAACjrP,CAAD,EAAIA,CAAC,GAAG9H,MAAM,CAAC,EAAEpK,CAAH,CAAd,CAAlB;;AACd,SAAO,UAAS0D,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAASgI,CAAC,GAAG,CAAb,EAAgBnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,IAAIwK,CAAhB,CAAhB,CAAZ,CAAR;AACA,WAAOgwM,CAAC,CAACl+M,CAAD,CAAD,CAAK0D,CAAC,GAAG1D,CAAT,CAAP;AACD,GAHD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;;AACA;;AACA;;AAEA;;AAEA;;;;;;AAEA,SAAS6gQ,SAAT,CAAoB9oL,KAApB,EAA2BmzK,YAA3B,EAAyCC,YAAzC,EAAuD;AACrD,QAAMl0F,KAAK,GAAGl/E,KAAK,GAAGmzK,YAAR,GAAuBC,YAAY,GAAG,CAApD;AACA,SAAOpzK,KAAK,GAAGk/E,KAAK,GAAG,CAAR,GAAYA,KAAZ,GAAoB,CAAvB,GAA2B,CAAvC;AACD;;AAED,MAAM9wH,QAAQ,GAAG,UAAjB;;AACA,MAAMwrH,MAAM,GAAG,QAAf;;AACA,MAAMmvG,GAAG,GAAG,KAAZ;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMhvC,GAAG,GAAG,KAAZ;;AACA,MAAMjiE,UAAU,GAAG,YAAnB;;AACA,MAAMkxG,SAAS,GAAG,WAAlB;;AACA,MAAMlnB,QAAQ,GAAG,UAAjB;;AACA,MAAMmnB,QAAQ,GAAG,UAAjB;;AACA,MAAMC,SAAS,GAAG,WAAlB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,UAAU,GAAG,aAAnB,EAAkC;;;AAElC,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,QAAQ,GAAG,UAAjB;AACA,MAAMC,YAAY,GAAG,cAArB;AACA,MAAMC,aAAa,GAAG,eAAtB;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AAEA,SAASC,WAAT,CAAsBlsP,KAAtB,EAA6B;AAC3B,SAAO,UAAU8Q,CAAV,EAAa;AAClB,QAAI+vL,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIjjB,CAFJ;;AAIA,QAAIizM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,WAAO,CAACmS,KAAK,CAAC6nP,MAAN,CAAahnD,EAAb,CAAD,EAAmB7gM,KAAK,CAAC6nP,MAAN,CAAa/mD,EAAb,CAAnB,CAAP;AACD,GAZD;AAaD;;AAED,SAASqrD,iBAAT,CAA4BnsP,KAA5B,EAAmC;AACjC,SAAO,UAAU8Q,CAAV,EAAa;AAClB,UAAM6a,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAd;AACA,QAAIk1K,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIzgB,GAAG,GAAG,CAAC,CAFX;AAAA,QAGIE,GAHJ;AAAA,QAII1C,CAJJ;AAAA,QAKI1D,CALJ;AAAA,QAMIkO,CANJ;;AAQA,QAAIyoM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,SAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGszB,KAAK,CAACliC,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,UAAIwhC,KAAK,CAACxhC,CAAD,CAAL,IAAY02M,EAAZ,IAAkBl1K,KAAK,CAACxhC,CAAD,CAAL,IAAY22M,EAAlC,EAAsC;AACpC,YAAIzwM,GAAG,GAAG,CAAV,EAAaA,GAAG,GAAGlG,CAAN;AACboG,QAAAA,GAAG,GAAGpG,CAAN;AACD;AACF;;AAED,QAAIkG,GAAG,GAAG,CAAV,EAAa,OAAOgvH,SAAP;AACbwhF,IAAAA,EAAE,GAAG7gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACt7B,GAAD,CAAxB,CAAL;AACAywM,IAAAA,EAAE,GAAG9gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACp7B,GAAD,CAAxB,CAAL;AACA,WAAO,CAACswM,EAAE,CAAC,CAAD,CAAF,KAAUxhF,SAAV,GAAsBwhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAjC,EAAsCC,EAAE,CAAC,CAAD,CAAF,KAAUzhF,SAAV,GAAsByhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAtE,CAAP;AACD,GA3BD;AA4BD;;AAED,SAASg9B,IAAT,GAAgB;AACd,QAAM99N,KAAK,GAAG,6BAAeglJ,OAAf,CAAuB3lC,SAAvB,CAAd;AAAA,QACMkgF,MAAM,GAAGv/L,KAAK,CAACu/L,MADrB;AAAA,QAEM61C,YAAY,GAAGp1O,KAAK,CAAC2rB,KAF3B;AAGA,MAAIygO,OAAO,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAd;AAAA,MACIvnP,IADJ;AAAA,MAEI4vN,SAFJ;AAAA,MAGIj+N,KAAK,GAAG,KAHZ;AAAA,MAII6+O,YAAY,GAAG,CAJnB;AAAA,MAKIC,YAAY,GAAG,CALnB;AAAA,MAMI5yC,KAAK,GAAG,GANZ;AAOA,SAAO1iM,KAAK,CAACglJ,OAAb;;AAEA,WAASuwF,OAAT,GAAmB;AACjB,UAAMl9O,CAAC,GAAGknM,MAAM,GAAG91M,MAAnB;AAAA,UACMmV,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CADpC;AAAA,UAEM1gO,IAAI,GAAG0gO,OAAO,CAAC,IAAIxtP,OAAL,CAFpB;AAAA,UAGMwiJ,KAAK,GAAG4pG,SAAS,CAAC3yP,CAAD,EAAIg9O,YAAJ,EAAkBC,YAAlB,CAHvB;AAIA,QAAIr/O,KAAK,GAAGm2P,OAAO,CAACxtP,OAAO,GAAG,CAAX,CAAnB;AACAiG,IAAAA,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,KAAkBmrJ,KAAK,IAAI,CAA3B,CAAP;;AAEA,QAAI5qJ,KAAJ,EAAW;AACTqO,MAAAA,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACD;;AAED5O,IAAAA,KAAK,IAAI,CAACy1B,IAAI,GAAGz1B,KAAP,GAAe4O,IAAI,IAAIxM,CAAC,GAAGg9O,YAAR,CAApB,IAA6C3yC,KAAtD;AACA+xB,IAAAA,SAAS,GAAG5vN,IAAI,IAAI,IAAIwwO,YAAR,CAAhB;;AAEA,QAAI7+O,KAAJ,EAAW;AACTP,MAAAA,KAAK,GAAG/F,IAAI,CAACsG,KAAL,CAAWP,KAAX,CAAR;AACAw+N,MAAAA,SAAS,GAAGvkO,IAAI,CAACsG,KAAL,CAAWi+N,SAAX,CAAZ;AACD;;AAED,UAAMlgO,MAAM,GAAG,oBAAM8D,CAAN,EAASzE,GAAT,CAAazJ,CAAC,IAAI8L,KAAK,GAAG4O,IAAI,GAAG1a,CAAjC,CAAf;AACA,WAAOirP,YAAY,CAACx2O,OAAO,GAAGrK,MAAM,CAACqK,OAAP,EAAH,GAAsBrK,MAA9B,CAAnB;AACD;;AAEDyL,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,CAACzuL,CAAD,CAAN;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOh2C,MAAM,EAAb;AACD;AACF,GAPD;;AASAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB2iQ,MAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO6W,OAAO,CAAC54P,KAAR,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAU1kO,CAAV,EAAa;AAC9Bs7O,IAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACAta,IAAAA,KAAK,GAAG,IAAR;AACA,WAAO++O,OAAO,EAAd;AACD,GAJD;;AAMAv1O,EAAAA,KAAK,CAACy0N,SAAN,GAAkB,YAAY;AAC5B,WAAOA,SAAP;AACD,GAFD;;AAIAz0N,EAAAA,KAAK,CAAC6E,IAAN,GAAa,YAAY;AACvB,WAAOA,IAAP;AACD,GAFD;;AAIA7E,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAAUsa,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB+M,MAAAA,KAAK,GAAG,CAAC,CAACsa,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO/+O,KAAP;AACD;AACF,GAPD;;AASAwJ,EAAAA,KAAK,CAAC4G,OAAN,GAAgB,UAAUkK,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACAukO,MAAAA,YAAY,GAAGC,YAAf;AACA,aAAOC,OAAO,EAAd;AACD,KAJD,MAIO;AACL,aAAOF,YAAP;AACD;AACF,GARD;;AAUAr1O,EAAAA,KAAK,CAACq1O,YAAN,GAAqB,UAAUvkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4rP,MAAAA,YAAY,GAAGnlP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOF,YAAP;AACD;AACF,GAPD;;AASAr1O,EAAAA,KAAK,CAACs1O,YAAN,GAAqB,UAAUxkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOD,YAAP;AACD;AACF,GAPD;;AASAt1O,EAAAA,KAAK,CAAC0iM,KAAN,GAAc,UAAU5xL,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBi5M,MAAAA,KAAK,GAAGxyM,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAR;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO7yC,KAAP;AACD;AACF,GAPD;;AASA1iM,EAAAA,KAAK,CAACksP,WAAN,GAAoB,UAAUp7O,CAAV,EAAa;AAC/B;AACA,QAAIA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAA5B,EAAkC;AAClC,UAAMlS,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CAApC;AAAA,UACM73P,MAAM,GAAGqK,OAAO,GAAGw2O,YAAY,GAAGx2O,OAAf,EAAH,GAA8Bw2O,YAAY,EADhE;AAAA,UAEM/8O,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAF1B;AAGA,QAAIo3M,EAAE,GAAG,CAAC/vL,CAAC,CAAC,CAAD,CAAX;AAAA,QACIgwL,EAAE,GAAG,CAAChwL,CAAC,CAAC,CAAD,CADX;AAAA,QAEIzf,CAFJ;AAAA,QAGI6G,CAHJ;AAAA,QAIIrK,CAJJ,CAN+B,CAUxB;;AAEP,QAAIgzM,EAAE,KAAKA,EAAP,IAAaC,EAAE,KAAKA,EAAxB,EAA4B,OAZG,CAYK;;AAEpC,QAAIA,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,QAAIizM,EAAE,GAAGvsM,MAAM,CAAC,CAAD,CAAX,IAAkBssM,EAAE,GAAGurD,OAAO,CAAC,IAAIxtP,OAAL,CAAlC,EAAiD,OApBlB,CAoB0B;;AAEzDvN,IAAAA,CAAC,GAAGnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,0BAAYgE,MAAZ,EAAoBssM,EAApB,IAA0B,CAAtC,CAAJ;AACA3oM,IAAAA,CAAC,GAAG2oM,EAAE,KAAKC,EAAP,GAAYzvM,CAAZ,GAAgB,0BAAYkD,MAAZ,EAAoBusM,EAApB,IAA0B,CAA9C,CAvB+B,CAuBkB;;AAEjD,QAAID,EAAE,GAAGtsM,MAAM,CAAClD,CAAD,CAAX,GAAiBojO,SAAS,GAAG,KAAjC,EAAwC,EAAEpjO,CAAF;;AAExC,QAAIuN,OAAJ,EAAa;AACX;AACA/Q,MAAAA,CAAC,GAAGwD,CAAJ;AACAA,MAAAA,CAAC,GAAGgH,CAAC,GAAGH,CAAR;AACAA,MAAAA,CAAC,GAAGG,CAAC,GAAGxK,CAAR;AACD;;AAED,WAAOwD,CAAC,GAAG6G,CAAJ,GAAQmnH,SAAR,GAAoBkgF,MAAM,GAAG/rM,KAAT,CAAenC,CAAf,EAAkB6G,CAAC,GAAG,CAAtB,CAA3B;AACD,GAnCD;;AAqCA8H,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAAU/2O,CAAV,EAAa;AAC1B,UAAM3jB,KAAK,GAAG6S,KAAK,CAACksP,WAAN,CAAkB,CAACp7O,CAAD,EAAIA,CAAJ,CAAlB,CAAd;AACA,WAAO3jB,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcA,KAA1B;AACD,GAHD;;AAKA6S,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAO6+J,IAAI,GAAGv+B,MAAP,CAAcA,MAAM,EAApB,EAAwB5zK,KAAxB,CAA8BygO,OAA9B,EAAuC51P,KAAvC,CAA6CA,KAA7C,EAAoD6+O,YAApD,CAAiEA,YAAjE,EAA+EC,YAA/E,CAA4FA,YAA5F,EAA0G5yC,KAA1G,CAAgHA,KAAhH,CAAP;AACD,GAFD;;AAIA,SAAO6yC,OAAO,EAAd;AACD;;AAED,SAASE,QAAT,CAAkBz1O,KAAlB,EAAyB;AACvB,QAAMi/D,IAAI,GAAGj/D,KAAK,CAACi/D,IAAnB;AACAj/D,EAAAA,KAAK,CAAC4G,OAAN,GAAgB5G,KAAK,CAACs1O,YAAtB;AACA,SAAOt1O,KAAK,CAACq1O,YAAb;;AAEAr1O,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOw2K,QAAQ,CAACx2K,IAAI,EAAL,CAAf;AACD,GAFD;;AAIA,SAAOj/D,KAAP;AACD;;AAED,SAAS0rM,KAAT,GAAiB;AACf,SAAO+pC,QAAQ,CAAC3X,IAAI,GAAGuX,YAAP,CAAoB,CAApB,CAAD,CAAf;AACD;;AAED,IAAIzhP,GAAG,GAAG3J,KAAK,CAACM,SAAN,CAAgBqJ,GAA1B;;AACA,SAAS+6M,OAAT,CAAiB79L,CAAjB,EAAoB;AAClB,SAAOld,GAAG,CAAC3K,IAAJ,CAAS6nB,CAAT,EAAY+uL,kBAAZ,CAAP;AACD;;AAED,MAAMrsM,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA9B;;AAEA,SAAS64P,eAAT,GAA2B;AACzB,MAAI9sD,MAAM,GAAG,EAAb;AAAA,MACI5zK,KAAK,GAAG,EADZ;;AAGA,WAAS3rB,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAnB,GAAuB+uH,SAAvB,GAAmC1zF,KAAK,CAAC,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,IAAoB,CAArB,IAA0Bq7B,KAAK,CAACliC,MAAjC,CAA/C;AACD;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,GAAGoP,OAAO,CAAC79L,CAAD,CAAhB;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAOu/L,MAAM,CAAC/rM,KAAP,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBkiC,MAAAA,KAAK,GAAGn4B,KAAK,CAACvK,IAAN,CAAW6nB,CAAX,CAAR;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAO2rB,KAAK,CAACn4B,KAAN,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAU/lL,KAAV,EAAiBsxI,SAAjB,EAA4B;AAC7C,WAAO,yBAAajU,MAAM,CAAC,CAAD,CAAnB,EAAwB,oBAAKA,MAAL,CAAxB,EAAsCr9H,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAA3D,EAAkEsxI,SAAlE,CAAP;AACD,GAFD;;AAIAxzM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOotL,eAAe,GAAG9sD,MAAlB,CAAyBv/L,KAAK,CAACu/L,MAAN,EAAzB,EAAyC5zK,KAAzC,CAA+C3rB,KAAK,CAAC2rB,KAAN,EAA/C,CAAP;AACD,GAFD;;AAIA,SAAO3rB,KAAP;AACD;;AAED,MAAMssP,MAAM,GAAG,EAAf;AACA;AACA;AACA;;AAEA,SAASvqE,MAAT,CAAgB33K,IAAhB,EAAsBrU,WAAtB,EAAmCk3G,QAAnC,EAA6C;AAC3C,QAAMsuH,GAAG,GAAG,SAASv7N,KAAT,GAAiB;AAC3B,UAAMrS,CAAC,GAAGoI,WAAW,EAArB;;AAEA,QAAI,CAACpI,CAAC,CAACu+P,WAAP,EAAoB;AAClBv+P,MAAAA,CAAC,CAACu+P,WAAF,GAAgBv+P,CAAC,CAACk6P,MAAF,GAAWqE,WAAW,CAACv+P,CAAD,CAAtB,GAA4BA,CAAC,CAAC67P,YAAF,GAAiB2C,iBAAiB,CAACx+P,CAAD,CAAlC,GAAwC0xH,SAApF;AACD;;AAED1xH,IAAAA,CAAC,CAACyc,IAAF,GAASA,IAAT;AACA,WAAOzc,CAAP;AACD,GATD;;AAWA4tO,EAAAA,GAAG,CAACtuH,QAAJ,GAAe,qBAAM,qBAAMA,QAAN,CAAN,CAAf;AACA,SAAOsuH,GAAP;AACD;;AAED,SAASv7N,KAAT,CAAeoK,IAAf,EAAqBpK,KAArB,EAA4BitG,QAA5B,EAAsC;AACpC,MAAI/iH,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6iQ,IAAAA,MAAM,CAACliP,IAAD,CAAN,GAAe23K,MAAM,CAAC33K,IAAD,EAAOpK,KAAP,EAAcitG,QAAd,CAArB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOs/I,gBAAgB,CAACniP,IAAD,CAAhB,GAAyBkiP,MAAM,CAACliP,IAAD,CAA/B,GAAwCi1G,SAA/C;AACD;AACF,EAAC;;;AAEFr/G,KAAK,CAACswB,QAAD,EAAWk8N,sBAAX,CAAL,EAAgC;;AAEhCxsP,KAAK,CAAC87I,MAAD,EAAS2wG,oBAAT,EAAsBZ,UAAtB,CAAL;AACA7rP,KAAK,CAACirP,GAAD,EAAMyB,iBAAN,EAAgB,CAACb,UAAD,EAAaZ,GAAb,CAAhB,CAAL;AACAjrP,KAAK,CAACkrP,GAAD,EAAMyB,iBAAN,EAAgBd,UAAhB,CAAL;AACA7rP,KAAK,CAACmrP,IAAD,EAAOyB,kBAAP,EAAkBf,UAAlB,CAAL;AACA7rP,KAAK,CAACorP,MAAD,EAASyB,oBAAT,EAAsBhB,UAAtB,CAAL;AACA7rP,KAAK,CAACqrP,IAAD,EAAOyB,kBAAP,EAAkB,CAACjB,UAAD,EAAaI,QAAb,CAAlB,CAAL;AACAjsP,KAAK,CAACq8M,GAAD,EAAM0wC,iBAAN,EAAgB,CAAClB,UAAD,EAAaI,QAAb,CAAhB,CAAL,EAA8C;;AAE9CjsP,KAAK,CAACo6I,UAAD,EAAa4yG,wBAAb,EAA8B,CAACnB,UAAD,EAAaG,aAAb,CAA9B,CAAL,EAAiE;;AAEjEhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCoyJ,MAAlC,CAAD,EAA4CkxG,wBAA5C,EAA6D,CAACnB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCuhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACpB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA7D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCwhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACrB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCyhQ,IAAlC,CAAD,EAA0CgC,4BAA1C,EAA+D,CAACtB,UAAD,EAAaG,aAAb,CAA/D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkC0hQ,MAAlC,CAAD,EAA4CgC,8BAA5C,EAAmE,CAACvB,UAAD,EAAaG,aAAb,CAAnE,CAAL,EAAsG;;AAEtGhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCoyJ,MAAjC,CAAD,EAA2CuxG,uBAA3C,EAA2D,CAACxB,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCuhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAACzB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA3D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCwhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAAC1B,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCyhQ,IAAjC,CAAD,EAAyCqC,2BAAzC,EAA6D,CAAC3B,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiC0hQ,MAAjC,CAAD,EAA2CqC,6BAA3C,EAAiE,CAAC5B,UAAD,EAAaG,aAAb,CAAjE,CAAL,EAAoG;;AAEpGhsP,KAAK,CAACokO,QAAD,EAAWspB,sBAAX,EAA0B,CAAC3B,YAAD,EAAe3nB,QAAf,CAA1B,CAAL;AACApkO,KAAK,CAACurP,QAAD,EAAWoC,sBAAX,EAA0B5B,YAA1B,CAAL;AACA/rP,KAAK,CAACwrP,SAAD,EAAYoC,uBAAZ,EAA4B7B,YAA5B,CAAL,EAAgD;;AAEhD/rP,KAAK,CAAC4rP,UAAD,EAAaS,eAAb,EAA8B,CAACP,QAAD,EAAWC,YAAX,CAA9B,CAAL;AACA/rP,KAAK,CAACyrP,OAAD,EAAUoC,qBAAV,EAAwB/B,QAAxB,CAAL;AACA9rP,KAAK,CAAC2rP,IAAD,EAAO7tB,IAAP,EAAaguB,QAAb,CAAL;AACA9rP,KAAK,CAAC0rP,KAAD,EAAQhgD,KAAR,EAAeogD,QAAf,CAAL;;AACA,SAASS,gBAAT,CAA0BniP,IAA1B,EAAgC;AAC9B,SAAO,8BAAekiP,MAAf,EAAuBliP,IAAvB,CAAP;AACD;;AAED,SAAS0jP,OAAT,CAAiB1/P,GAAjB,EAAsBgc,IAAtB,EAA4B;AAC1B,QAAMzc,CAAC,GAAG2+P,MAAM,CAACl+P,GAAD,CAAhB;AACA,SAAOT,CAAC,IAAIA,CAAC,CAACs/G,QAAF,CAAW7iG,IAAX,CAAZ;AACD;;AAED,SAAS2jP,YAAT,CAAsB3/P,GAAtB,EAA2B;AACzB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMy9P,UAAN,CAAd;AACD;;AACD,SAASmC,UAAT,CAAoB5/P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM09P,QAAN,CAAd;AACD;;AACD,SAASmC,cAAT,CAAwB7/P,GAAxB,EAA6B;AAC3B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM29P,YAAN,CAAd;AACD;;AACD,SAASmC,aAAT,CAAuB9/P,GAAvB,EAA4B;AAC1B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM68P,GAAN,CAAd;AACD;;AACD,SAASkD,UAAT,CAAoB//P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM69P,QAAN,CAAd;AACD;;AACD,SAASmC,eAAT,CAAyBhgQ,GAAzB,EAA8B;AAC5B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM49P,aAAN,CAAd;AACD;;AACD,SAASqC,UAAT,CAAoBjgQ,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMg2O,QAAN,CAAd;AACD;;AAED,MAAMkqB,UAAU,GAAG,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,EAA8B,UAA9B,CAAnB;;AACA,SAASC,gBAAT,CAA0BtZ,YAA1B,EAAwCtpN,KAAxC,EAA+C;AAC7C,QAAM11B,KAAK,GAAG01B,KAAK,CAAC,CAAD,CAAnB;AAAA,QACMo1K,IAAI,GAAG,oBAAKp1K,KAAL,IAAc11B,KAD3B;AAEA,SAAO,UAAU9L,CAAV,EAAa;AAClB,WAAO8qP,YAAY,CAACh/O,KAAK,GAAG9L,CAAC,GAAG42M,IAAb,CAAnB;AACD,GAFD;AAGD;;AACD,SAASytD,iBAAT,CAA2BhL,MAA3B,EAAmCp5O,IAAnC,EAAyCm/I,KAAzC,EAAgD;AAC9C,SAAO,iBAAU+9F,WAAW,CAACl9O,IAAI,IAAI,KAAT,EAAgBm/I,KAAhB,CAArB,EAA6Ci6F,MAA7C,CAAP;AACD;;AACD,SAASiL,oBAAT,CAA8BxZ,YAA9B,EAA4C/yK,KAA5C,EAAmD;AACjD,QAAMm0D,OAAO,GAAG,IAAIpsI,KAAJ,CAAUi4E,KAAV,CAAhB;AAAA,QACM7pE,CAAC,GAAG6pE,KAAK,GAAG,CADlB;;AAGA,OAAK,IAAI/3E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,KAApB,GAA4Bm0D,OAAO,CAAClsI,CAAD,CAAP,GAAa8qP,YAAY,CAAC,EAAE9qP,CAAF,GAAMkO,CAAP,CAAzB;;AAE5B,SAAOg+H,OAAP;AACD;;AACD,SAASq4H,SAAT,CAAmB1uP,KAAnB,EAA0B;AACxB,QAAMnS,CAAC,GAAGmS,KAAK,CAACoK,IAAhB;AAAA,QACMzc,CAAC,GAAGqS,KAAK,CAACi/D,IAAN,EADV;AAEAtxE,EAAAA,CAAC,CAACyc,IAAF,GAASvc,CAAT;AACA,SAAOF,CAAP;AACD;;AACD,SAASghQ,aAAT,CAAuBC,OAAvB,EAAgCv+P,GAAhC,EAAqCE,GAArC,EAA0C;AACxC,QAAMuvF,KAAK,GAAGvvF,GAAG,GAAGF,GAApB;AACA,MAAIlG,CAAJ,EAAO0D,CAAP,EAAUF,CAAV;;AAEA,MAAI,CAACmyF,KAAD,IAAU,CAACvoF,MAAM,CAACvC,QAAP,CAAgB8qF,KAAhB,CAAf,EAAuC;AACrC,WAAO,wBAAS,GAAT,CAAP;AACD,GAFD,MAEO;AACL31F,IAAAA,CAAC,GAAG,CAAC0D,CAAC,GAAG+gQ,OAAO,CAACxkP,IAAb,EAAmBmd,OAAnB,CAA2B,GAA3B,CAAJ;AACA15B,IAAAA,CAAC,GAAG1D,CAAC,GAAG,CAAJ,GAAQ0D,CAAR,GAAYA,CAAC,CAAC2F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAAhB;AACAwD,IAAAA,CAAC,GAAGqS,KAAK,CAACnS,CAAD,CAAL,GAAW0xM,MAAX,CAAkB,CAAClvM,GAAD,EAAME,GAAN,CAAlB,EAA8Bo7B,KAA9B,CAAoC,CAAC,CAAD,EAAI,CAAJ,CAApC,CAAJ;AACA2iO,IAAAA,UAAU,CAACrgQ,OAAX,CAAmB2zF,CAAC,IAAIgtK,OAAO,CAAChtK,CAAD,CAAP,GAAaj0F,CAAC,CAACi0F,CAAD,CAAD,CAAKgtK,OAAO,CAAChtK,CAAD,CAAP,EAAL,CAAb,GAAkC,CAA1D;AACA,WAAOj0F,CAAP;AACD;AACF;;AACD,SAAS25P,WAAT,CAAqBl9O,IAArB,EAA2Bm/I,KAA3B,EAAkC;AAChC,QAAMslG,MAAM,GAAGlsD,CAAC,CAACvnK,MAAM,CAAChxB,IAAD,CAAP,CAAhB;AACA,SAAOm/I,KAAK,IAAI,IAAT,IAAiBslG,MAAjB,IAA2BA,MAAM,CAACtlG,KAAlC,GAA0CslG,MAAM,CAACtlG,KAAP,CAAaA,KAAb,CAA1C,GAAgEslG,MAAvE;AACD;;AAED,SAASzzN,MAAT,CAAgBhxB,IAAhB,EAAsB;AACpB,SAAO,gBAAgBA,IAAI,CAAC9b,WAAL,GAAmBN,KAAnB,CAAyB,GAAzB,EAA8B4F,GAA9B,CAAkCjG,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAA5D,EAAwEzF,IAAxE,CAA6E,EAA7E,CAAvB;AACD;;AAED,MAAMi6P,UAAU,GAAG;AACjB8G,EAAAA,KAAK,EAAE,oEADU;AAEjBC,EAAAA,MAAM,EAAE,oEAFS;AAGjBC,EAAAA,KAAK,EAAE,oEAHU;AAIjBC,EAAAA,OAAO,EAAE,oEAJQ;AAKjBC,EAAAA,OAAO,EAAE,oEALQ;AAMjBC,EAAAA,IAAI,EAAE,oEANW;AAOjBC,EAAAA,SAAS,EAAE,oEAPM;AAQjBC,EAAAA,UAAU,EAAE,oEARK;AASjBC,EAAAA,SAAS,EAAE,oEATM;AAUjBC,EAAAA,SAAS,EAAE,oEAVM;AAWjBC,EAAAA,UAAU,EAAE,oEAXK;AAYjBC,EAAAA,eAAe,EAAE,oEAZA;AAajBC,EAAAA,SAAS,EAAE,oEAbM;AAcjBC,EAAAA,SAAS,EAAE,oEAdM;AAejBC,EAAAA,WAAW,EAAE,oEAfI;AAgBjBC,EAAAA,iBAAiB,EAAE,oEAhBF;AAiBjBC,EAAAA,eAAe,EAAE,oEAjBA;AAkBjBC,EAAAA,UAAU,EAAE,oEAlBK;AAmBjBC,EAAAA,cAAc,EAAE,oEAnBC;AAoBjBC,EAAAA,WAAW,EAAE,oEApBI;AAqBjBC,EAAAA,YAAY,EAAE,oEArBG;AAsBjBC,EAAAA,OAAO,EAAE,oEAtBQ;AAuBjBC,EAAAA,OAAO,EAAE,oEAvBQ;AAwBjBC,EAAAA,eAAe,EAAE,oEAxBA;AAyBjBC,EAAAA,aAAa,EAAE,oEAzBE;AA0BjBC,EAAAA,cAAc,EAAE,oEA1BC;AA2BjBC,EAAAA,eAAe,EAAE,oEA3BA;AA4BjBpoP,EAAAA,QAAQ,EAAE,oEA5BO;AA6BjBqoP,EAAAA,OAAO,EAAE,4LA7BQ;AA8BjBC,EAAAA,KAAK,EAAE,4LA9BU;AA+BjBC,EAAAA,OAAO,EAAE,4LA/BQ;AAgCjBC,EAAAA,MAAM,EAAE,4LAhCS;AAiCjBC,EAAAA,OAAO,EAAE,kYAjCQ;AAkCjBC,EAAAA,OAAO,EAAE,4LAlCQ;AAmCjBC,EAAAA,OAAO,EAAE,4LAnCQ;AAoCjBC,EAAAA,KAAK,EAAE,kYApCU;AAqCjBC,EAAAA,MAAM,EAAE,oEArCS;AAsCjBC,EAAAA,SAAS,EAAE,wDAtCM;AAuCjBC,EAAAA,KAAK,EAAE,oEAvCU;AAwCjBC,EAAAA,SAAS,EAAE,oEAxCM;AAyCjBC,EAAAA,SAAS,EAAE,oEAzCM;AA0CjBC,EAAAA,UAAU,EAAE,oEA1CK;AA2CjBC,EAAAA,OAAO,EAAE,oEA3CQ;AA4CjBC,EAAAA,YAAY,EAAE,8DA5CG;AA6CjBC,EAAAA,aAAa,EAAE,8DA7CE;AA8CjBC,EAAAA,UAAU,EAAE,wDA9CK;AA+CjBC,EAAAA,WAAW,EAAE,8DA/CI;AAgDjBC,EAAAA,aAAa,EAAE,8DAhDE;AAiDjBC,EAAAA,QAAQ,EAAE,8DAjDO;AAkDjBC,EAAAA,QAAQ,EAAE,8DAlDO;AAmDjBC,EAAAA,SAAS,EAAE,8DAnDM;AAoDjBC,EAAAA,SAAS,EAAE,4CApDM;AAqDjBC,EAAAA,OAAO,EAAE;AArDQ,CAAnB;AAuDA,MAAMC,QAAQ,GAAG;AACfC,EAAAA,UAAU,EAAE,8DADG;AAEfC,EAAAA,UAAU,EAAE,0HAFG;AAGfC,EAAAA,WAAW,EAAE,0HAHE;AAIfC,EAAAA,WAAW,EAAE,0HAJE;AAKfC,EAAAA,SAAS,EAAE,8DALI;AAMfC,EAAAA,SAAS,EAAE,0HANI;AAOfC,EAAAA,MAAM,EAAE,kDAPO;AAQfC,EAAAA,KAAK,EAAE,kDARQ;AASfC,EAAAA,MAAM,EAAE,0EATO;AAUfC,EAAAA,OAAO,EAAE,wDAVM;AAWfC,EAAAA,OAAO,EAAE,kDAXM;AAYfC,EAAAA,IAAI,EAAE,wDAZS;AAafC,EAAAA,IAAI,EAAE,kDAbS;AAcfC,EAAAA,IAAI,EAAE;AAdS,CAAjB;;AAiBA,SAASxP,MAAT,CAAgByP,OAAhB,EAAyB;AACvB,QAAM56P,CAAC,GAAG46P,OAAO,CAACxpQ,MAAR,GAAiB,CAAjB,GAAqB,CAA/B;AAAA,QACMmN,CAAC,GAAG,IAAI3M,KAAJ,CAAUoO,CAAV,CADV;;AAGA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,GAAwB;AACtBzB,IAAAA,CAAC,CAACzM,CAAD,CAAD,GAAO,MAAM8oQ,OAAO,CAACz/P,KAAR,CAAcrJ,CAAC,GAAG,CAAlB,EAAqB,EAAEA,CAAF,GAAM,CAA3B,CAAb;AACD;;AAED,SAAOyM,CAAP;AACD;;AAED,SAASpM,KAAT,CAAesmB,CAAf,EAAkBhb,CAAlB,EAAqB;AACnB,OAAK,MAAM2R,CAAX,IAAgBqJ,CAAhB,EAAmBm2F,MAAM,CAACx/F,CAAD,EAAI3R,CAAC,CAACgb,CAAC,CAACrJ,CAAD,CAAF,CAAL,CAAN;AACpB;;AAED,MAAM6uG,OAAO,GAAG,EAAhB;AACA9rH,KAAK,CAAC0nQ,QAAD,EAAW1O,MAAX,CAAL;AACAh5P,KAAK,CAACw9P,UAAD,EAAal3O,CAAC,IAAI09O,iBAAiB,CAAChL,MAAM,CAAC1yO,CAAD,CAAP,CAAnC,CAAL;;AACA,SAASm2F,MAAT,CAAgBv7G,IAAhB,EAAsBu7G,MAAtB,EAA8B;AAC5Bv7G,EAAAA,IAAI,GAAGA,IAAI,IAAIA,IAAI,CAAC4C,WAAL,EAAf;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6sH,IAAAA,OAAO,CAAC5qH,IAAD,CAAP,GAAgBu7G,MAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOqP,OAAO,CAAC5qH,IAAD,CAAd;AACD;AACF;;AAED,MAAMwnQ,YAAY,GAAG,QAArB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;;AAEA,MAAMC,gBAAgB,GAAGlmQ,KAAK,IAAI,uBAAQA,KAAR,IAAiBA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAI5G,MAAM,CAAC4G,CAAD,CAArB,CAAjB,GAA6C5G,MAAM,CAACtI,KAAD,CAArF;;AAEA,MAAMo2M,SAAS,GAAG,CAAClyM,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAApC;;AAEA,MAAM21O,UAAU,GAAG,CAACx8O,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAArC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASiiQ,SAAT,CAAmBtzP,KAAnB,EAA0BkiE,KAA1B,EAAiCqxL,OAAjC,EAA0C;AACxC,MAAI1uP,IAAJ;;AAEA,MAAI,wBAASq9D,KAAT,CAAJ,EAAqB;AACnB,QAAIliE,KAAK,CAACixM,IAAV,EAAgB;AACd/uI,MAAAA,KAAK,GAAGhyE,IAAI,CAACK,GAAL,CAAS2xE,KAAT,EAAgBliE,KAAK,CAACixM,IAAN,CAAWxnN,MAA3B,CAAR;AACD;;AAED,QAAI8pQ,OAAO,IAAI,IAAf,EAAqB;AACnBrxL,MAAAA,KAAK,GAAGhyE,IAAI,CAACG,GAAL,CAAS6xE,KAAT,EAAgBhyE,IAAI,CAAC+H,KAAL,CAAW,oBAAK+H,KAAK,CAACu/L,MAAN,EAAL,IAAuBg0D,OAAvB,IAAkC,CAA7C,CAAhB,CAAR;AACD;AACF;;AAED,MAAI,wBAASrxL,KAAT,CAAJ,EAAqB;AACnBr9D,IAAAA,IAAI,GAAGq9D,KAAK,CAACr9D,IAAb;AACAq9D,IAAAA,KAAK,GAAGA,KAAK,CAACszI,QAAd;AACD;;AAED,MAAI,wBAAStzI,KAAT,CAAJ,EAAqB;AACnBA,IAAAA,KAAK,GAAGliE,KAAK,CAACoK,IAAN,KAAeihP,IAAf,GAAsB,4BAAanpL,KAAb,CAAtB,GAA4CliE,KAAK,CAACoK,IAAN,IAAciyM,GAAd,GAAoB,2BAAYn6I,KAAZ,CAApB,GAAyC,qBAAM,mDAAN,CAA7F;AACA,QAAIr9D,IAAJ,EAAUq9D,KAAK,GAAGA,KAAK,CAACruE,KAAN,CAAYgR,IAAZ,CAAR;AACX;;AAED,SAAOq9D,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASsxL,UAAT,CAAoBxzP,KAApB,EAA2BmwM,KAA3B,EAAkCjuI,KAAlC,EAAyC;AACvC,MAAIv2C,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,MACIk1K,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIm1K,EAAE,GAAG,oBAAKn1K,KAAL,CAFT;AAAA,MAGI6qK,GAAG,GAAG+M,SAHV;;AAKA,MAAI1C,EAAE,GAAGC,EAAT,EAAa;AACXn1K,IAAAA,KAAK,GAAGm1K,EAAR;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGl1K,KAAL;AACA6qK,IAAAA,GAAG,GAAGq3C,UAAN;AACD;;AAEDhtC,EAAAA,EAAE,GAAG3wM,IAAI,CAAC+H,KAAL,CAAW4oM,EAAX,CAAL;AACAC,EAAAA,EAAE,GAAG5wM,IAAI,CAACoC,IAAL,CAAUwuM,EAAV,CAAL,CAduC,CAcnB;AACpB;;AAEAqP,EAAAA,KAAK,GAAGA,KAAK,CAACv8M,GAAN,CAAUyI,CAAC,IAAI,CAACA,CAAD,EAAI2D,KAAK,CAAC3D,CAAD,CAAT,CAAf,EAA8BiJ,MAA9B,CAAqCwL,CAAC,IAAI+vL,EAAE,IAAI/vL,CAAC,CAAC,CAAD,CAAP,IAAcA,CAAC,CAAC,CAAD,CAAD,IAAQgwL,EAAhE,EAAoE3sM,IAApE,CAAyEqiM,GAAzE,EAA8E5iM,GAA9E,CAAkFkd,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAxF,CAAR;;AAEA,MAAIoxD,KAAK,GAAG,CAAR,IAAaiuI,KAAK,CAAC1mN,MAAN,GAAe,CAAhC,EAAmC;AACjC,UAAMgqQ,SAAS,GAAG,CAACtjD,KAAK,CAAC,CAAD,CAAN,EAAW,oBAAKA,KAAL,CAAX,CAAlB;;AAEA,WAAOA,KAAK,CAAC1mN,MAAN,GAAey4E,KAAf,IAAwBiuI,KAAK,CAAC1mN,MAAN,IAAgB,CAA/C,EAAkD;AAChD0mN,MAAAA,KAAK,GAAGA,KAAK,CAAC7qM,MAAN,CAAa,CAACwL,CAAD,EAAI3mB,CAAJ,KAAU,EAAEA,CAAC,GAAG,CAAN,CAAvB,CAAR;AACD;;AAED,QAAIgmN,KAAK,CAAC1mN,MAAN,GAAe,CAAnB,EAAsB;AACpB0mN,MAAAA,KAAK,GAAGsjD,SAAR;AACD;AACF;;AAED,SAAOtjD,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASujD,UAAT,CAAoB1zP,KAApB,EAA2BkiE,KAA3B,EAAkC;AAChC,SAAOliE,KAAK,CAACixM,IAAN,GAAauiD,UAAU,CAACxzP,KAAD,EAAQA,KAAK,CAACixM,IAAd,CAAvB,GAA6CjxM,KAAK,CAACmwM,KAAN,GAAcnwM,KAAK,CAACmwM,KAAN,CAAYjuI,KAAZ,CAAd,GAAmCliE,KAAK,CAACu/L,MAAN,EAAvF;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS0oD,UAAT,CAAoB/zC,MAApB,EAA4Bl0M,KAA5B,EAAmCkiE,KAAnC,EAA0CsxI,SAA1C,EAAqDoB,UAArD,EAAiE++C,MAAjE,EAAyE;AACvE,QAAMvpP,IAAI,GAAGpK,KAAK,CAACoK,IAAnB;AACA,MAAIsiG,MAAM,GAAG2mJ,gBAAb;;AAEA,MAAIjpP,IAAI,KAAKihP,IAAT,IAAiBz2C,UAAU,KAAKy2C,IAApC,EAA0C;AACxC3+I,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8S,UAAP,CAAkBxT,SAAlB,CAAT;AACD,GAFD,MAEO,IAAIppM,IAAI,KAAKiyM,GAAT,IAAgBzH,UAAU,KAAKyH,GAAnC,EAAwC;AAC7C3vG,IAAAA,MAAM,GAAGwnG,MAAM,CAACmS,SAAP,CAAiB7S,SAAjB,CAAT;AACD,GAFM,MAEA,IAAI06C,aAAa,CAAC9jP,IAAD,CAAjB,EAAyB;AAC9B,UAAMwpP,MAAM,GAAG1/C,MAAM,CAAC6T,WAAP,CAAmBvU,SAAnB,CAAf;;AAEA,QAAImgD,MAAM,IAAI3zP,KAAK,CAACixM,IAApB,EAA0B;AACxBvkG,MAAAA,MAAM,GAAGknJ,MAAT;AACD,KAFD,MAEO;AACL,YAAM97O,IAAI,GAAG+7O,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,KAAf,CAApB;;AAEAwqC,MAAAA,MAAM,GAAG57F,CAAC,IAAIgH,IAAI,CAAChH,CAAD,CAAJ,GAAU8iP,MAAM,CAAC9iP,CAAD,CAAhB,GAAsB,EAApC;AACD;AACF,GAVM,MAUA,IAAI9Q,KAAK,CAACioP,UAAV,EAAsB;AAC3B;AACA,UAAMjxP,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA7yF,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8T,UAAP,CAAkBhxN,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAzB,EAAyCy4E,KAAzC,EAAgDsxI,SAAhD,CAAT;AACD,GAJM,MAIA,IAAIA,SAAJ,EAAe;AACpB9mG,IAAAA,MAAM,GAAGwnG,MAAM,CAACxnG,MAAP,CAAc8mG,SAAd,CAAT;AACD;;AAED,SAAO9mG,MAAP;AACD;;AACD,SAASmnJ,OAAT,CAAiB7zP,KAAjB,EAAwBkiE,KAAxB,EAA+B3tE,MAA/B,EAAuC;AACrC,QAAM47M,KAAK,GAAGujD,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAAxB;AAAA,QACM/sC,IAAI,GAAGn1B,KAAK,CAACm1B,IAAN,EADb;AAAA,QAEMw9L,IAAI,GAAGziO,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAFb;AAAA,QAGM1tB,CAAC,GAAGvX,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY4kC,IAAI,GAAG+sC,KAAP,GAAeiuI,KAAK,CAAC1mN,MAAjC,CAHV,CADqC,CAIe;;AAEpD,QAAMquB,IAAI,GAAG9gB,CAAC,IAAI;AAChB,QAAI7M,CAAC,GAAG6M,CAAC,GAAG9G,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAejlC,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACiK,GAAL,CAASnD,CAAT,IAAc27N,IAAzB,CAAf,CAAZ;AACA,QAAIxoO,CAAC,GAAGgrC,IAAJ,GAAWA,IAAI,GAAG,GAAtB,EAA2BhrC,CAAC,IAAIgrC,IAAL;AAC3B,WAAOhrC,CAAC,IAAIsd,CAAZ;AACD,GAJD;;AAMA,SAAOlT,MAAM,GAAG47M,KAAK,CAAC7qM,MAAN,CAAawS,IAAb,CAAH,GAAwBA,IAArC;AACD;;AAED,MAAM63N,OAAO,GAAG;AACd,GAACvL,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY,YAFE;AAGd,GAACC,SAAD,GAAa;AAHC,CAAhB;AAKA,MAAM/8C,OAAO,GAAG;AACd,GAAC21B,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY;AAFE,CAAhB;;AAIA,SAASuI,WAAT,CAAqB9zP,KAArB,EAA4BkiE,KAA5B,EAAmC;AACjC,SAAOliE,KAAK,CAACixM,IAAN,GAAa8iD,SAAS,CAAC/zP,KAAK,CAACixM,IAAP,CAAtB,GAAqCjxM,KAAK,CAACoK,IAAN,KAAe6gP,GAAf,GAAqB4I,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,IAAf,CAA5B,GAAmDytK,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,GAAsB4pP,eAAe,CAACh0P,KAAK,CAAC2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAD,CAArC,GAAsEspP,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAA/K;AACD;;AACD,SAAS+xL,eAAT,CAAyB//C,MAAzB,EAAiCl0M,KAAjC,EAAwCwzM,SAAxC,EAAmD;AACjD,QAAM1iM,CAAC,GAAG9Q,KAAK,CAACyuM,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAV;AAAA,QACM/R,CAAC,GAAGyY,CAAC,CAACrnB,MADZ;;AAGA,MAAIuN,CAAC,GAAGqB,CAAC,GAAG,CAAJ,GAAQyY,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAhB,GAAsBA,CAAC,CAAC,CAAD,CAA/B;AAAA,MACI3mB,CADJ;;AAGA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6M,IAAAA,CAAC,GAAG9G,IAAI,CAACG,GAAL,CAAS2G,CAAT,EAAY8Z,CAAC,CAAC3mB,CAAD,CAAD,GAAO2mB,CAAC,CAAC3mB,CAAC,GAAG,CAAL,CAApB,CAAJ;AACD,GATgD,CAS/C;;;AAGF,SAAO+pN,MAAM,CAAC8T,UAAP,CAAkB,CAAlB,EAAqBhxN,CAArB,EAAwB,IAAI,EAA5B,EAAgCw8M,SAAhC,CAAP;AACD;;AAED,SAASwgD,eAAT,CAAyB7iD,UAAzB,EAAqC;AACnC,QAAM58M,MAAM,GAAG,CAAC,CAACtC,QAAF,EAAYvI,MAAZ,CAAmBynN,UAAnB,CAAf;AACA58M,EAAAA,MAAM,CAAChE,GAAP,GAAa,CAAC0B,QAAd;AACA,SAAOsC,MAAP;AACD;;AAED,SAASw/P,SAAT,CAAmB9iD,IAAnB,EAAyB;AACvB,QAAM18M,MAAM,GAAG08M,IAAI,CAACz9M,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf,CAAf;AACAe,EAAAA,MAAM,CAAChE,GAAP,GAAa,oBAAK0gN,IAAL,CAAb;AACA,SAAO18M,MAAP;AACD;;AAED,MAAM2/P,eAAe,GAAGl0P,KAAK,IAAI2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,IAAuBpK,KAAK,CAACixM,IAA9D;;AAEA,SAASkjD,WAAT,CAAqBjgD,MAArB,EAA6Bl0M,KAA7B,EAAoCkiE,KAApC,EAA2C93D,IAA3C,EAAiDopM,SAAjD,EAA4DoB,UAA5D,EAAwE++C,MAAxE,EAAgF;AAC9E,QAAMjnJ,MAAM,GAAG+hG,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAP,IAAuBwqM,UAAU,KAAKy2C,IAAtC,IAA8Cz2C,UAAU,KAAKyH,GAA7D,GAAmE43C,eAAe,CAAC//C,MAAD,EAASl0M,KAAT,EAAgBwzM,SAAhB,CAAlF,GAA+Gy0C,UAAU,CAAC/zC,MAAD,EAASl0M,KAAT,EAAgBkiE,KAAhB,EAAuBsxI,SAAvB,EAAkCoB,UAAlC,EAA8C++C,MAA9C,CAAxI;AACA,SAAOvpP,IAAI,KAAK8oP,YAAT,IAAyBgB,eAAe,CAACl0P,KAAD,CAAxC,GAAkDo0P,WAAW,CAAC1nJ,MAAD,CAA7D,GAAwEtiG,IAAI,KAAK+oP,cAAT,GAA0BkB,cAAc,CAAC3nJ,MAAD,CAAxC,GAAmD4nJ,WAAW,CAAC5nJ,MAAD,CAA7I;AACD;;AAED,MAAM0nJ,WAAW,GAAG1nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,EAAe3F,KAAf,KAAyB;AACrD,QAAM61E,KAAK,GAAGlzE,GAAG,CAAC3C,KAAK,CAAC2F,KAAK,GAAG,CAAT,CAAN,EAAmBhD,GAAG,CAAC3C,KAAK,CAACiG,GAAP,EAAY,CAAC0B,QAAb,CAAtB,CAAjB;AAAA,QACM4uM,EAAE,GAAG6H,WAAW,CAACv7M,KAAD,EAAQu/G,MAAR,CADtB;AAAA,QAEMo0F,EAAE,GAAG4H,WAAW,CAACvoI,KAAD,EAAQusC,MAAR,CAFtB;AAGA,SAAOm0F,EAAE,IAAIC,EAAN,GAAWD,EAAE,GAAG,UAAL,GAAkBC,EAA7B,GAAkCA,EAAE,GAAG,OAAOA,EAAV,GAAe,YAAYD,EAAtE;AACD,CALD;;AAOA,MAAM5zM,GAAG,GAAG,CAACE,KAAD,EAAQonQ,IAAR,KAAiBpnQ,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBonQ,IAArD;;AAEA,MAAMF,cAAc,GAAG3nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,KAAkBA,KAAK,GAAGy8G,MAAM,CAACv/G,KAAD,CAAT,GAAmB,IAA3E;;AAEA,MAAMmnQ,WAAW,GAAG5nJ,MAAM,IAAIv/G,KAAK,IAAIu/G,MAAM,CAACv/G,KAAD,CAA7C;;AAEA,MAAMu7M,WAAW,GAAG,CAACv7M,KAAD,EAAQu/G,MAAR,KAAmBn1G,MAAM,CAACvC,QAAP,CAAgB7H,KAAhB,IAAyBu/G,MAAM,CAACv/G,KAAD,CAA/B,GAAyC,IAAhF;;AAEA,SAASqnQ,aAAT,CAAuBx0P,KAAvB,EAA8B;AAC5B,QAAMu/L,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAf;AAAA,QACMr9H,KAAK,GAAGq9H,MAAM,CAAC91M,MAAP,GAAgB,CAD9B;AAEA,MAAIo3M,EAAE,GAAG,CAACtB,MAAM,CAAC,CAAD,CAAhB;AAAA,MACIuB,EAAE,GAAG,CAAC,oBAAKvB,MAAL,CADV;AAAA,MAEIwB,IAAI,GAAGD,EAAE,GAAGD,EAFhB;;AAIA,MAAI7gM,KAAK,CAACoK,IAAN,KAAeohP,SAAnB,EAA8B;AAC5B,UAAMiJ,MAAM,GAAGvyL,KAAK,GAAG6+H,IAAI,GAAG7+H,KAAV,GAAkB,GAAtC;AACA2+H,IAAAA,EAAE,IAAI4zD,MAAN;AACA3zD,IAAAA,EAAE,IAAI2zD,MAAN;AACA1zD,IAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AACD;;AAED,SAAO1zM,KAAK,IAAI,CAACA,KAAK,GAAG0zM,EAAT,IAAeE,IAA/B;AACD;;AAED,SAASr0F,MAAT,CAAgBwnG,MAAhB,EAAwBl0M,KAAxB,EAA+BwzM,SAA/B,EAA0CoB,UAA1C,EAAsD;AACpD,QAAMxqM,IAAI,GAAGwqM,UAAU,IAAI50M,KAAK,CAACoK,IAAjC,CADoD,CACb;;AAEvC,MAAI,wBAASopM,SAAT,KAAuB26C,UAAU,CAAC/jP,IAAD,CAArC,EAA6C;AAC3CopM,IAAAA,SAAS,GAAGA,SAAS,CAAC9lN,OAAV,CAAkB,KAAlB,EAAyB,IAAzB,EAA+BA,OAA/B,CAAuC,KAAvC,EAA8C,IAA9C,CAAZ;AACD;;AAED,SAAO,CAAC8lN,SAAD,IAAcppM,IAAI,KAAKihP,IAAvB,GAA8Bn3C,MAAM,CAAC8S,UAAP,CAAkB,kBAAlB,CAA9B,GAAsE,CAACxT,SAAD,IAAcppM,IAAI,KAAKiyM,GAAvB,GAA6BnI,MAAM,CAACmS,SAAP,CAAiB,sBAAjB,CAA7B,GAAwE8tC,WAAW,CAACjgD,MAAD,EAASl0M,KAAT,EAAgB,CAAhB,EAAmB,IAAnB,EAAyBwzM,SAAzB,EAAoCoB,UAApC,EAAgD,IAAhD,CAAhK;AACD;;AAED,SAAS8/C,aAAT,CAAuBxgD,MAAvB,EAA+Bl0M,KAA/B,EAAsCo+L,GAAtC,EAA2C;AACzCA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA,QAAM7tM,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY6tM,GAAG,CAACkjC,MAAJ,IAAc,CAA1B,CAAZ;AAAA,QACMjmB,GAAG,GAAG3uG,MAAM,CAACwnG,MAAD,EAASl0M,KAAT,EAAgBo+L,GAAG,CAAC1xF,MAApB,EAA4B0xF,GAAG,CAACwW,UAAhC,CADlB,CAFyC,CAGsB;;AAE/D,MAAIq5C,cAAc,CAACjuP,KAAK,CAACoK,IAAP,CAAlB,EAAgC;AAC9B,UAAM/N,CAAC,GAAGy3P,WAAW,CAAC9zP,KAAD,CAAX,CAAmBxM,KAAnB,CAAyB,CAAzB,EAA4BI,GAA5B,CAAgCynN,GAAhC,CAAV;AAAA,UACMhjN,CAAC,GAAGgE,CAAC,CAAC5S,MADZ;AAEA,WAAO,GAAGC,MAAH,CAAU2O,CAAV,EAAa,UAAb,EAAyB3O,MAAzB,CAAgC2O,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,KAAhD,EAAuD,IAAvD,EAA6D3O,MAA7D,CAAoE2S,CAAC,CAACtO,IAAF,CAAO,IAAP,CAApE,CAAP;AACD,GAJD,CAIE;AAJF,OAKK,IAAIigQ,UAAU,CAAChuP,KAAK,CAACoK,IAAP,CAAd,EAA4B;AAC7B,YAAMpT,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AAAA,YACMlnM,CAAC,GAAGrB,CAAC,CAACvN,MADZ;AAAA,YAEM4S,CAAC,GAAGhE,CAAC,GAAG9H,GAAJ,GAAUyG,CAAC,CAACxD,KAAF,CAAQ,CAAR,EAAWjD,GAAG,GAAG,CAAjB,EAAoBqD,GAApB,CAAwBynN,GAAxB,EAA6BttN,IAA7B,CAAkC,IAAlC,IAA0C,gBAA1C,GAA6DiJ,CAAC,CAACxD,KAAF,CAAQ,CAAC,CAAT,EAAYI,GAAZ,CAAgBynN,GAAhB,CAAvE,GAA8FrkN,CAAC,CAACpD,GAAF,CAAMynN,GAAN,EAAWttN,IAAX,CAAgB,IAAhB,CAFxG;AAGA,aAAO,GAAGrE,MAAH,CAAU2O,CAAV,EAAa,QAAb,EAAuB3O,MAAvB,CAA8B2O,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA7C,EAAkD,IAAlD,EAAwD3O,MAAxD,CAA+D2S,CAA/D,CAAP;AACD,KALE,CAKD;AALC,SAME;AACD,cAAMrF,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA,eAAO,eAAe71M,MAAf,CAAsB2xN,GAAG,CAACrkN,CAAC,CAAC,CAAD,CAAF,CAAzB,EAAiC,MAAjC,EAAyCtN,MAAzC,CAAgD2xN,GAAG,CAAC,oBAAKrkN,CAAL,CAAD,CAAnD,CAAP;AACD;AACN;;;;;;;;;;;AC/yBD;;AACA;;AAEA,MAAM+6Q,WAAW,GAAG,aAApB;AACA,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,SAAS,GAAG,MAAlB;AACA,MAAMC,oBAAoB,GAAG,sBAA7B;AACA,MAAMC,eAAe,GAAG,iBAAxB;AACA,MAAMC,eAAe,GAAG,iBAAxB;;AAEA,MAAMphC,MAAM,GAAG,CAAC+4B,IAAD,EAAOsI,QAAP,EAAiBrxJ,KAAjB,MAA4B;AACzC,GAACixJ,SAAD,GAAalI,IAD4B;AAEzC,GAACmI,oBAAD,GAAwBG,QAFiB;AAGzC,GAACL,UAAD,GAAchxJ,KAAK,IAAI3B;AAHkB,CAA5B,CAAf,EAMA;AACA;;;AACA,MAAMizJ,UAAU,GAAG,qBAAM,CACvB,aADuB,EAEvB,WAFuB,EAGvB,YAHuB,EAIvB,WAJuB,EAKvB,YALuB,EAMvB,aANuB,EAOvB,cAPuB,EAQvB,iBARuB,EASvB,cATuB,EAUvB,cAVuB,EAWvB,eAXuB,EAYvB,OAZuB,CAAN,CAAnB,EAeA;;AACA,MAAMC,UAAU,GAAG;AACjB,UAAQ;AAAChoF,IAAAA,IAAI,EAAE,MAAP;AAAeioF,IAAAA,OAAO,EAAEC;AAAxB,GADS;AAEjB,YAAU;AAACloF,IAAAA,IAAI,EAAE,QAAP;AAAiBioF,IAAAA,OAAO,EAAEE;AAA1B,GAFO;AAGjB,gBAAc;AACZnoF,IAAAA,IAAI,EAAE,OADM;AAEZioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAK,eAAc4gQ,YAAY,CAAC5gQ,IAAD,CAAO;AAFvC,GAHG;AAOjB,oBAAkB;AAChBw4K,IAAAA,IAAI,EAAE,UADU;AAEhBioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAK,kBAAiB4gQ,YAAY,CAAC5gQ,IAAD,CAAO;AAFtC;AAPD,CAAnB,EAaA;;AACO,MAAM6gQ,UAAU,GAAG;AACxBC,EAAAA,QAAQ,EAAEZ,SADc;AAExBa,EAAAA,mBAAmB,EAAEZ,oBAFG;AAGxBhI,EAAAA,WAAW,EAAE8H;AAHW,CAAnB;;;AAMA,SAASe,kBAAT,CAA4BznR,IAA5B,EAAkCymB,IAAlC,EAAwC;AAC7C,QAAMihQ,IAAI,GAAGjhQ,IAAI,CAACk4P,IAAL,KAAc,KAA3B;AACA3+Q,EAAAA,IAAI,CAACymR,WAAD,EAAciB,IAAI,IAAI3zJ,SAAtB,CAAJ;;AAEA,MAAI2zJ,IAAI,IAAIjhQ,IAAI,CAACm4P,WAAL,IAAoB,IAAhC,EAAsC;AACpC,SAAK,MAAMhpM,IAAX,IAAmB0xM,UAAnB,EAA+B;AAC7BtnR,MAAAA,IAAI,CAACsnR,UAAU,CAAC1xM,IAAD,CAAX,EAAmBm+C,SAAnB,CAAJ;AACD;AACF,GAJD,MAIO;AACL,UAAMj1G,IAAI,GAAG2H,IAAI,CAACsqP,IAAL,CAAU0I,QAAvB;AACAz5Q,IAAAA,IAAI,CACF0mR,UADE,EAEFjgQ,IAAI,CAACm4P,WAFH,CAAJ;AAIA5+Q,IAAAA,IAAI,CACF2mR,SADE,EAEFlgQ,IAAI,CAAC8gQ,QAAL,KAAkBzoQ,IAAI,KAAK,OAAT,GAAmB+nQ,eAAnB,GAAqCC,eAAvD,CAFE,CAAJ;AAIA9mR,IAAAA,IAAI,CACF4mR,oBADE,EAEFngQ,IAAI,CAAC+gQ,mBAAL,IAA6B,GAAE1oQ,IAAK,OAFlC,CAAJ;AAID;AACF;;AAEM,SAAS6oQ,kBAAT,CAA4B5W,IAA5B,EAAkC;AACvC,SAAOA,IAAI,CAAC4N,IAAL,KAAc,KAAd,GAAsB;AAAE,KAAC8H,WAAD,GAAe;AAAjB,GAAtB,GACHO,UAAU,CAACjW,IAAI,CAAC0N,IAAN,CAAV,GAAwB,IAAxB,GACAwI,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAV,GAAwBmJ,SAAS,CAAC7W,IAAD,EAAOkW,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAjB,CAAjC,GACAoJ,QAAQ,CAAC9W,IAAD,CAHZ;AAID;;AAED,SAAS8W,QAAT,CAAkB9W,IAAlB,EAAwB;AACtB,QAAMjyP,IAAI,GAAGiyP,IAAI,CAAC0I,QAAlB;AACA,QAAM90F,OAAO,GACX7lK,IAAI,KAAK,OAAT,IACAA,IAAI,KAAK,MADT,IAEAiyP,IAAI,CAACh3J,KAAL,CAAWl6F,IAAX,CAAgB2F,CAAC,IAAIA,CAAC,CAACo5P,WAAF,IAAiB,IAAjB,IAAyBp5P,CAAC,CAACm5P,IAAF,KAAW,KAAzD,CAHF;AAKA,SAAOj5B,MAAM,CACX/gE,OAAO,GAAGkiG,eAAH,GAAqBC,eADjB,EAEV,GAAEhoQ,IAAK,iBAFG,EAGXiyP,IAAI,CAAC6N,WAHM,CAAb;AAKD;;AAED,SAASgJ,SAAT,CAAmB7W,IAAnB,EAAyBj+D,GAAzB,EAA8B;AAC5B,MAAI;AACF,UAAMrsL,IAAI,GAAGsqP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAb;AAAA,UACMmtK,OAAO,GAAGp0E,GAAG,CAACo0E,OAAJ,KAAgB,MAAM,EAAtB,CADhB;;AAEA,WAAOxhC,MAAM,CACX5yC,GAAG,CAAC2rE,IAAJ,IAAYqI,eADD,EAEXh0E,GAAG,CAAC7T,IAFO,EAGXx4K,IAAI,CAACm4P,WAAL,IAAoBsI,OAAO,CAACzgQ,IAAD,CAHhB,CAAb;AAKD,GARD,CAQE,OAAOxE,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASolQ,YAAT,CAAsB5gQ,IAAtB,EAA4B;AAC1B,SAAO,qBAAMA,IAAI,CAAC8wF,IAAX,EAAiB90G,IAAjB,CAAsB,GAAtB,CAAP;AACD;;AAED,SAAS0kR,WAAT,CAAqB1gQ,IAArB,EAA2B;AACzB,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMkzC,MAAM,GAAGrqP,IAAI,CAACqqP,MADpB;AAAA,QAEM3xQ,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IAFjD;AAAA,QAGMgmG,GAAG,GAAGhmG,IAAI,CAACoqJ,OAHjB;AAAA,QAIMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWpjC,KAAK,CAAClpN,KAAjB,EAAwB7S,KAJtC;AAAA,QAKM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EALf;AAAA,QAMM9pM,IAAI,GAAGpK,KAAK,CAACoK,IANnB;AAAA,QAOM4sN,EAAE,GAAIolC,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,OAAjC,GAA4C,GAA5C,GAAkD,GAP7D;AASA,SAAQ,GAAEplC,EAAG,OAAN,IACFvsO,KAAK,GAAI,YAAWA,KAAM,GAArB,GAA0B,EAD7B,IAEF,UAAS,2BAAW2f,IAAX,IAAmB,UAAnB,GAAgCA,IAAK,QAF5C,GAGF,SAAQ,8BAAc8pM,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAmC,EAHhD;AAID;;AAED,SAAS2gQ,aAAT,CAAuB3gQ,IAAvB,EAA6B;AAC3B,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMz+N,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IADjD;AAAA,QAEM3H,IAAI,GAAI,GAAE8+M,KAAK,CAAC9+M,IAAN,IAAc,EAAG,SAApB,CAA6Bg7F,IAA7B,EAFb;AAAA,QAGMknJ,MAAM,GAAGpjC,KAAK,CAACojC,MAHrB;AAAA,QAIM+mB,KAAK,GAAGnmR,MAAM,CAACof,IAAP,CAAYggP,MAAZ,CAJd;AAAA,QAKMv0I,GAAG,GAAGhmG,IAAI,CAACoqJ,OALjB;AAAA,QAMMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWA,MAAM,CAAC+mB,KAAK,CAAC,CAAD,CAAN,CAAjB,EAA6BlmR,KAN3C;AAAA,QAOM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EAPf;AASA,SAAOo/D,UAAU,CAAClpQ,IAAD,CAAV,IACF3f,KAAK,GAAI,YAAWA,KAAM,GAArB,GAA0B,EAD7B,IAEF,QAAO8oR,cAAc,CAACF,KAAD,CAAQ,EAF3B,GAGF,SAAQ,8BAAcn/D,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAmC,EAHhD;AAID;;AAED,SAASqhQ,YAAT,CAAsBrhQ,IAAtB,EAA4B;AAC1B,MAAI;AACF,WAAO,qBAAM,oBAAKA,IAAI,CAACszF,KAAV,EAAiBA,KAAjB,CAAuB,CAAvB,EAA0BxC,IAAhC,EAAsC90G,IAAtC,CAA2C,GAA3C,CAAP;AACD,GAFD,CAEE,OAAOwf,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASgmQ,cAAT,CAAwBF,KAAxB,EAA+B;AAC7BA,EAAAA,KAAK,GAAGA,KAAK,CAACz/Q,GAAN,CAAU66B,CAAC,IAAIA,CAAC,IAAIA,CAAC,KAAK,MAAN,IAAgBA,CAAC,KAAK,QAAtB,GAAiC,QAAjC,GAA4C,EAAhD,CAAhB,CAAR;AACA,SAAO4kP,KAAK,CAAC5pR,MAAN,GAAe,CAAf,GAAmB4pR,KAAK,CAAC,CAAD,CAAxB,GACHA,KAAK,CAAC7/Q,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,EAAmBzF,IAAnB,CAAwB,IAAxB,IAAgC,OAAhC,GAA0C,oBAAKslR,KAAL,CAD9C;AAED;;AAED,SAASC,UAAT,CAAoB3lR,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAAhC,GAA6C7F,CAApD;AACD;;;;;;;;;;ACtKD,MAAM8lR,QAAQ,GAAGhjR,GAAG,IAAI,CAACA,GAAG,GAAG,EAAP,EACrB/C,OADqB,CACb,IADa,EACP,OADO,EAErBA,OAFqB,CAEb,IAFa,EAEP,QAFO,CAAxB;AAIA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASgpU,OAAT,CAAiBxzD,GAAjB,EAAsBj3O,IAAtB,EAA4B8gK,GAA5B,EAAiC;AACtC,MAAIp/L,CAAC,GAAG,MAAMu1Q,GAAd;AAAA,MAAmB90Q,GAAnB;AAAA,MAAwBqC,GAAxB;;AACA,MAAIw7B,IAAJ,EAAU;AACR,SAAK79B,GAAL,IAAY69B,IAAZ,EAAkB;AAChBx7B,MAAAA,GAAG,GAAGw7B,IAAI,CAAC79B,GAAD,CAAV;;AACA,UAAIqC,GAAG,IAAI,IAAX,EAAiB;AACf9C,QAAAA,CAAC,IAAI,MAAMS,GAAN,GAAY,IAAZ,GAAmBqlR,QAAQ,CAAChjR,GAAD,CAA3B,GAAmC,GAAxC;AACD;AACF;AACF;;AACD,MAAIs8L,GAAJ,EAASp/L,CAAC,IAAI,MAAMo/L,GAAX;AACT,SAAOp/L,CAAC,GAAG,GAAX;AACD;AAED;AACA;AACA;AACA;;;AACO,SAASgpU,QAAT,CAAkBzzD,GAAlB,EAAuB;AAC5B,SAAO,OAAOA,GAAP,GAAa,GAApB;AACD;;;;;;;;AC9BM,MAAMkR,MAAM,GAAG;AACpBz5Q,EAAAA,IAAI,EAAc,MADE;AAEpBimQ,EAAAA,WAAW,EAAO,cAFE;AAGpB9C,EAAAA,MAAM,EAAY,QAHE;AAIpBC,EAAAA,aAAa,EAAK,gBAJE;AAKpBE,EAAAA,WAAW,EAAO,cALE;AAMpBiD,EAAAA,SAAS,EAAS,gBANE;AAOpB/C,EAAAA,UAAU,EAAQ,iBAPE;AAQpBoD,EAAAA,UAAU,EAAQ,kBARE;AASpBE,EAAAA,gBAAgB,EAAE,mBATE;AAUpBJ,EAAAA,gBAAgB,EAAE,mBAVE;AAWpB1gB,EAAAA,OAAO,EAAW,SAXE;AAYpBsf,EAAAA,KAAK,EAAa;AAZE,CAAf,EAeP;;;AACO,MAAMoU,cAAc,GAAG;AAC5B,UAAQ,MADoB;AAE5B,uBAAqB;AAFO,CAAvB;;;;;;;;;;;AChBP;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,MAAMC,SAAS,GAAG,CAAlB;AAAA,MACMx9P,EAAE,GAAGm2F,kBAASsnK,KADpB;;AAGe,SAASC,WAAT,CAAqBnrD,MAArB,EAA6B;AAC1CojD,oBAASxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;;AACA,OAAKorD,QAAL,GAAgB,CAAhB;AACA,OAAKxD,MAAL,GAAc,EAAd;AACA,OAAKa,IAAL,GAAY,IAAZ;AACA,OAAK4C,KAAL,GAAa,IAAb;AACA,OAAKjY,KAAL,GAAa,IAAb;AACD;;AAED,IAAIlyQ,SAAS,GAAG,wBAASiqR,WAAT,EAAsB/H,iBAAtB,CAAhB;AACA,IAAIt3O,IAAI,GAAGs3O,kBAASliR,SAApB;;AAEAA,SAAS,CAACq/Q,UAAV,GAAuB,UAASU,EAAT,EAAaj4Q,KAAb,EAAoB+tB,MAApB,EAA4BxZ,OAA5B,EAAqC;AAC1D;AACA,OAAK61P,KAAL,GAAa;AACX9oP,IAAAA,QAAQ,EAAE,EADC;AAEX+oP,IAAAA,QAAQ,EAAE;AAFC,GAAb;;AAKA,MAAI4N,EAAJ,EAAQ;AACN,SAAKwH,IAAL,GAAY,mBAASxH,EAAT,EAAa,CAAb,EAAgB,KAAhB,EAAuBxzP,EAAvB,CAAZ;;AACA,SAAKg7P,IAAL,CAAUzsB,YAAV,CAAuB,OAAvB,EAAgC,OAAhC;;AACA,uBAASilB,EAAT,EAAa,CAAb,EAHM,CAKN;;AACA,SAAKoK,KAAL,GAAa,mBAAS,KAAK5C,IAAd,EAAoBwC,SAApB,EAA+B,GAA/B,EAAoCx9P,EAApC,CAAb;;AACA,SAAK,MAAMmV,IAAX,IAAmBooP,sBAAnB,EAAmC;AACjC,WAAKK,KAAL,CAAWrvB,YAAX,CAAwBp5N,IAAxB,EAA8BooP,uBAAepoP,IAAf,CAA9B;AACD,KATK,CAWN;;;AACA,uBAAS,KAAK6lP,IAAd,EAAoBwC,SAAS,GAAG,CAAhC;AACD,GApByD,CAsB1D;;;AACA,OAAKvQ,UAAL,CAAgB,KAAK2I,QAArB;AAEA,SAAOv3O,IAAI,CAACy0O,UAAL,CAAgB3gR,IAAhB,CAAqB,IAArB,EAA2BqhR,EAA3B,EAA+Bj4Q,KAA/B,EAAsC+tB,MAAtC,EAA8CxZ,OAA9C,CAAP;AACD,CA1BD;;AA4BArc,SAAS,CAACw5Q,UAAV,GAAuB,UAAS6I,OAAT,EAAkB;AACvC,MAAI1iR,SAAS,CAACT,MAAV,IAAoB,KAAKqoR,IAA7B,EAAmC;AACjC,SAAKA,IAAL,CAAUlB,KAAV,CAAgBkE,WAAhB,CAA4B,kBAA5B,EAAgDlI,OAAhD;AACD;;AACD,SAAOz3O,IAAI,CAAC4uO,UAAL,CAAgBv5Q,KAAhB,CAAsB,IAAtB,EAA4BN,SAA5B,CAAP;AACD,CALD;;AAOAK,SAAS,CAACwzL,MAAV,GAAmB,UAAS1rL,KAAT,EAAgB+tB,MAAhB,EAAwBirP,MAAxB,EAAgCsB,WAAhC,EAA6C;AAC9Dx3O,EAAAA,IAAI,CAAC4oJ,MAAL,CAAY90L,IAAZ,CAAiB,IAAjB,EAAuBoJ,KAAvB,EAA8B+tB,MAA9B,EAAsCirP,MAAtC,EAA8CsB,WAA9C;;AAEA,MAAI,KAAKmF,IAAT,EAAe;AACb,SAAKA,IAAL,CAAUzsB,YAAV,CAAuB,OAAvB,EAAgC,KAAKwnB,MAAL,GAAc,KAAKE,MAAnD;;AACA,SAAK+E,IAAL,CAAUzsB,YAAV,CAAuB,QAAvB,EAAiC,KAAKynB,OAAL,GAAe,KAAKC,MAArD;;AACA,SAAK+E,IAAL,CAAUzsB,YAAV,CAAuB,SAAvB,EAAkC,SAAS,KAAKwnB,MAAd,GAAuB,GAAvB,GAA6B,KAAKC,OAApE;;AACA,SAAK4H,KAAL,CAAWrvB,YAAX,CAAwB,WAAxB,EAAqC,eAAe,KAAK2mB,OAApB,GAA8B,GAAnE;AACD;;AAED,OAAKiF,MAAL,GAAc,EAAd;AAEA,SAAO,IAAP;AACD,CAbD;;AAeA1mR,SAAS,CAACuuB,MAAV,GAAmB,YAAW;AAC5B,SAAO,KAAKg5P,IAAZ;AACD,CAFD;;AAIAvnR,SAAS,CAACsnR,GAAV,GAAgB,YAAW;AACzB,MAAI,CAAC,KAAKC,IAAV,EAAgB,OAAO,IAAP;AAEhB,MAAI7lP,IAAI,GAAG;AACT8qP,IAAAA,KAAK,EAAI,OADA;AAET1kR,IAAAA,KAAK,EAAI,KAAKw6Q,MAAL,GAAc,KAAKE,MAFnB;AAGT3sP,IAAAA,MAAM,EAAG,KAAK0sP,OAAL,GAAe,KAAKC,MAHpB;AAITgI,IAAAA,OAAO,EAAE,SAAS,KAAKlI,MAAd,GAAuB,GAAvB,GAA6B,KAAKC;AAJlC,GAAX;;AAMA,OAAK,IAAI1+Q,GAAT,IAAgB6+G,iBAAhB,EAA0B;AACxBhhF,IAAAA,IAAI,CAAC79B,GAAD,CAAJ,GAAY6+G,kBAAS7+G,GAAT,CAAZ;AACD;;AAED,MAAI4mR,EAAE,GAAG,CAAC,KAAKtI,QAAN,GAAiB,EAAjB,GACJ,mBAAQ,MAAR,EAAgB;AACfr6Q,IAAAA,KAAK,EAAG,KAAKw6Q,MADE;AAEfzsP,IAAAA,MAAM,EAAE,KAAK0sP,OAFE;AAGfnyQ,IAAAA,IAAI,EAAI,KAAK+xQ;AAHE,GAAhB,IAII,oBAAS,MAAT,CALT;AAOA,SAAO,mBAAQ,KAAR,EAAezgP,IAAf,KACF,KAAKwwO,KAAL,CAAW6N,EAAX,GAAgB,KAAK7N,KAAL,CAAW6N,EAAX,CAAcssD,SAA9B,GAA0C,EADxC,IAEH5hD,EAFG,GAGH,KAAKN,KAAL,CAAWkiD,SAHR,GAIH,oBAAS,KAAT,CAJJ;AAKD,CAzBD,EA4BA;;;AAEArsU,SAAS,CAAC4iR,OAAV,GAAoB,UAASvL,KAAT,EAAgB;AAClC;AACA,MAAI,KAAKsT,WAAL,EAAJ,EAAwB;AACtB,QAAI,KAAKC,SAAT,EAAoB,KAAK0hD,UAAL;AACpB,SAAKxnF,IAAL,CAAU,KAAKqlC,KAAf,EAAsB9S,KAAtB;AACA,uBAAS,KAAK8S,KAAd,EAAqB,CAArB;AACD;;AAED,OAAKoiD,UAAL;AAEA,OAAK7lD,MAAL,GAAc,EAAd;AACA,IAAE,KAAKwD,QAAP;AAEA,SAAO,IAAP;AACD,CAdD,EAgBA;;;AAEAlqR,SAAS,CAACusU,UAAV,GAAuB,YAAW;AAChC,QAAMjlD,GAAG,GAAG,KAAKC,IAAjB;AAAA,QACM9c,IAAI,GAAG,KAAKyH,KADlB;AAGA,MAAI6N,EAAE,GAAGtV,IAAI,CAACsV,EAAd;AAAA,MACIr6Q,KAAK,GAAG,CADZ;;AAGA,OAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAACrhP,QAAtB,EAAgC;AAC9B,QAAI,CAAC22P,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAWA,EAAE,GAAG,mBAASuH,GAAT,EAAcyC,SAAd,EAAyB,MAAzB,EAAiCx9P,EAAjC,CAAhB;AACT7mB,IAAAA,KAAK,GAAG2lR,cAAc,CAACtL,EAAD,EAAKtV,IAAI,CAACrhP,QAAL,CAAcvW,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD;;AAED,OAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAAC0H,QAAtB,EAAgC;AAC9B,QAAI,CAAC4N,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAWA,EAAE,GAAG,mBAASuH,GAAT,EAAcyC,SAAd,EAAyB,MAAzB,EAAiCx9P,EAAjC,CAAhB;AACT7mB,IAAAA,KAAK,GAAG4lR,cAAc,CAACvL,EAAD,EAAKtV,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD,GAf+B,CAiBhC;;;AACA,MAAIq6Q,EAAJ,EAAQ;AACNr6Q,IAAAA,KAAK,KAAK,CAAV,IACK4hR,GAAG,CAAChH,WAAJ,CAAgBP,EAAhB,GAAqBtV,IAAI,CAACsV,EAAL,GAAU,IADpC,IAEI,mBAASA,EAAT,EAAar6Q,KAAb,CAFJ;AAGD;AACF,CAvBD;;AAyBA,SAAS2lR,cAAT,CAAwBtL,EAAxB,EAA4B5zP,IAA5B,EAAkCzmB,KAAlC,EAAyC;AACvC,MAAI9F,CAAJ,EAAOkO,CAAP,EAAUqzB,IAAV;;AAEA,MAAIhV,IAAI,CAAC/C,QAAL,KAAkB,QAAtB,EAAgC;AAC9B;AACA;AACA;AACA;AACA,QAAImiQ,EAAE,GAAG,mBAASxL,EAAT,EAAar6Q,KAAK,EAAlB,EAAsB,SAAtB,EAAiC6mB,EAAjC,CAAT;AACAg/P,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,IAAhB,EAAsBwP,0BAAgBn+O,IAAI,CAACtZ,EAA3C;AACA04Q,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,SAAhB,EAA2B,SAA3B;AACAywB,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,OAAhB,EAAyB,MAAzB;AACAywB,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,QAAhB,EAA0B,MAA1B;AACAywB,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,qBAAhB,EAAuC,gBAAvC;AAEAywB,IAAAA,EAAE,GAAG,mBAASA,EAAT,EAAa,CAAb,EAAgB,MAAhB,EAAwBh/P,EAAxB,CAAL;AACAg/P,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,OAAhB,EAAyB,GAAzB;AACAywB,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,QAAhB,EAA0B,GAA1B;AACAywB,IAAAA,EAAE,CAACzwB,YAAH,CAAgB,MAAhB,EAAwB,SAAS12I,IAAI,EAAb,GAAkB,GAAlB,GAAwBj4F,IAAI,CAACtZ,EAA7B,GAAkC,GAA1D;AAEAktQ,IAAAA,EAAE,GAAG,mBAASA,EAAT,EAAar6Q,KAAK,EAAlB,EAAsB,gBAAtB,EAAwC6mB,EAAxC,CAAL;AACAwzP,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACtZ,EAA3B;AACAktQ,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACkmF,EAA3B;AACA0tK,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACimF,EAA3B;AACA2tK,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAAC6lL,EAA3B;AACA+tE,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACuyD,EAA3B;AACAqhM,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACmmF,EAA3B;AACAytK,IAAAA,EAAE,CAACjlB,YAAH,CAAiB,GAAjB,EAAsB3uO,IAAI,CAAC8lL,EAA3B;AACD,GAzBD,MAyBO;AACL8tE,IAAAA,EAAE,GAAG,mBAASA,EAAT,EAAar6Q,KAAK,EAAlB,EAAsB,gBAAtB,EAAwC6mB,EAAxC,CAAL;AACAwzP,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACtZ,EAA3B;AACAktQ,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACkmF,EAA3B;AACA0tK,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACuyD,EAA3B;AACAqhM,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACimF,EAA3B;AACA2tK,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsB3uO,IAAI,CAACmmF,EAA3B;AACD;;AAED,OAAK1yG,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACqe,IAAI,CAACw+O,KAAL,CAAWzrQ,MAAvB,EAA+BU,CAAC,GAACkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCuhC,IAAAA,IAAI,GAAG,mBAAS4+O,EAAT,EAAangR,CAAb,EAAgB,MAAhB,EAAwB2sB,EAAxB,CAAP;AACA4U,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,QAAlB,EAA4B3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAc2M,MAA1C;AACA40B,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,YAAlB,EAAgC3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAcw1P,KAA9C;AACD;;AACD,qBAAS2qB,EAAT,EAAangR,CAAb;AAEA,SAAO8F,KAAP;AACD;;AAED,SAAS4lR,cAAT,CAAwBvL,EAAxB,EAA4Bj4O,IAA5B,EAAkCpiC,KAAlC,EAAyC;AACvC,MAAImnC,IAAJ;AAEAkzO,EAAAA,EAAE,GAAG,mBAASA,EAAT,EAAar6Q,KAAb,EAAoB,UAApB,EAAgC6mB,EAAhC,CAAL;AACAwzP,EAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsBhzN,IAAI,CAACj1B,EAA3B;;AAEA,MAAIi1B,IAAI,CAAC75B,IAAT,EAAe;AACb4+B,IAAAA,IAAI,GAAG,mBAASkzO,EAAT,EAAa,CAAb,EAAgB,MAAhB,EAAwBxzP,EAAxB,CAAP;AACAsgB,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,GAAlB,EAAuBhzN,IAAI,CAAC75B,IAA5B;AACD,GAHD,MAGO;AACL4+B,IAAAA,IAAI,GAAG,mBAASkzO,EAAT,EAAa,CAAb,EAAgB,MAAhB,EAAwBxzP,EAAxB,CAAP;AACAsgB,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,GAAlB,EAAuB,CAAvB;AACAjuN,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,GAAlB,EAAuB,CAAvB;AACAjuN,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,OAAlB,EAA2BhzN,IAAI,CAAChgC,KAAhC;AACA+kC,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,QAAlB,EAA4BhzN,IAAI,CAACjS,MAAjC;AACD;;AACD,qBAASkqP,EAAT,EAAa,CAAb;AAEA,SAAOr6Q,KAAK,GAAG,CAAf;AACD;;AAED1F,SAAS,CAACssU,UAAV,GAAuB,YAAW;AAChC,MAAI12J,GAAG,GAAG,KAAKs8F,KAAf;AACAt8F,EAAAA,GAAG,CAACxsJ,QAAJ,GAAe,EAAf;AACAwsJ,EAAAA,GAAG,CAACu8F,QAAJ,GAAe,EAAf;AACD,CAJD,EAOA;;;AAEAnyQ,SAAS,CAACyiR,KAAV,GAAkB,UAASj7P,IAAT,EAAe;AAC/B,MAAIA,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAAxB,EAAkC;AAChC1iQ,IAAAA,IAAI,CAACi7P,KAAL,GAAa,KAAKyH,QAAlB;;AACA,SAAKxD,MAAL,CAAY7mR,IAAZ,CAAiB2nB,IAAjB;AACD;AACF,CALD;;AAOAxnB,SAAS,CAAC6qR,OAAV,GAAoB,UAASrjQ,IAAT,EAAe;AACjC,SAAO,KAAKojQ,SAAL,IACF,CAACpjQ,IAAI,CAAC+/P,IADJ,IAEF//P,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAFzB;AAGD,CAJD;;AAMAlqR,SAAS,CAAC2qR,WAAV,GAAwB,YAAW;AACjC,OAAKC,SAAL,GAAiB,IAAjB;AACA,MAAI9vK,KAAK,GAAG,KAAK4rK,MAAjB;AACA,MAAI,CAAC5rK,KAAK,CAAC57G,MAAP,IAAiB,CAAC,KAAKgrR,QAA3B,EAAqC,OAAO,IAAP;AAErC,MAAIr3Q,EAAE,GAAG,EAAE,KAAKq3Q,QAAhB;AAAA,MACI1iQ,IADJ;AAAA,MACUsqP,IADV;AAAA,MACgBjyP,IADhB;AAAA,MACsBkhQ,IADtB;AAAA,MAC4BnhR,CAD5B;AAAA,MAC+BkO,CAD/B;AAAA,MACkCyd,CADlC;;AAGA,OAAK3rB,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACgtG,KAAK,CAAC57G,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC4nB,IAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACAkyQ,IAAAA,IAAI,GAAGtqP,IAAI,CAACsqP,IAAZ;;AAEA,QAAIA,IAAI,CAAC0I,QAAL,KAAkB36P,IAAtB,EAA4B;AAC1B;AACAA,MAAAA,IAAI,GAAGiyP,IAAI,CAAC0I,QAAZ;AACAuG,MAAAA,IAAI,GAAGxoI,eAAM14H,IAAN,CAAP;AACD;;AAED,QAAIiyP,IAAI,CAACwF,MAAL,IAAexF,IAAI,CAAC2Q,KAAL,KAAe5vQ,EAAlC,EAAsC;AACpC,WAAK+3Q,SAAL,GAAiB,KAAjB;AACAE,MAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACAi/P,MAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB,UAAS9D,CAAT,EAAY;AAAEA,QAAAA,CAAC,CAAC6iR,KAAF,GAAU5vQ,EAAV;AAAe,OAAhD;AACD;;AACD,QAAIi/P,IAAI,CAACwF,MAAT,EAAiB,SAfiB,CAeP;;AAE3B,QAAI9vP,IAAI,CAAC09P,IAAT,EAAe;AAAE;AACf,UAAInE,IAAI,CAACnI,MAAL,IAAe9G,IAAI,CAACh3J,KAAL,CAAW57G,MAA9B,EAAsC;AACpC;AACAqsB,QAAAA,CAAC,GAAGumP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAJ;AACA,YAAIvvF,CAAC,CAACg8P,IAAN,EAAY,KAAKlmD,OAAL,CAAa0/C,IAAb,EAAmBx1P,CAAC,CAACg8P,IAArB,EAA2Bh8P,CAA3B;AACb,OAJD,MAIO,IAAI/D,IAAI,CAAC+/P,IAAT,EAAe;AACpB;AACAh8P,QAAAA,CAAC,GAAG/D,IAAI,CAAC+/P,IAAL,CAAUpB,UAAd;AACA,YAAI56P,CAAJ,EAAOA,CAAC,CAAC+0P,WAAF,CAAc94P,IAAI,CAAC+/P,IAAnB;AACR;;AACD//P,MAAAA,IAAI,CAAC+/P,IAAL,GAAY,IAAZ;AACA;AACD;;AAED//P,IAAAA,IAAI,GAAIu5P,IAAI,CAACnI,MAAL,GAAc9G,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAd,GAA8BtzF,IAAtC;AACA,QAAIA,IAAI,CAAC65M,OAAL,KAAiBxuN,EAArB,EAAyB,SAhCS,CAgCC;;AAEnC,QAAI,CAAC2U,IAAI,CAAC+/P,IAAN,IAAc,CAAC//P,IAAI,CAAC+/P,IAAL,CAAUwD,eAA7B,EAA8C;AAC5C;AACA,WAAKH,SAAL,GAAiB,KAAjB;AACAE,MAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACD,KAJD,MAIO;AACL;AACA,WAAKwuN,OAAL,CAAa0/C,IAAb,EAAmBv5P,IAAI,CAAC+/P,IAAxB,EAA8B//P,IAA9B;AACD;;AACDA,IAAAA,IAAI,CAAC65M,OAAL,GAAexuN,EAAf;AACD;;AACD,SAAO,CAAC,KAAK+3Q,SAAb;AACD,CArDD;;AAuDA,SAASE,YAAT,CAAsBtjQ,IAAtB,EAA4B3U,EAA5B,EAAgC;AAC9B,SAAO2U,IAAI,IAAIA,IAAI,CAACi7P,KAAL,KAAe5vQ,EAA9B,EAAkC2U,IAAI,GAACA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAjD,EAAwD;AACtD/jG,IAAAA,IAAI,CAACi7P,KAAL,GAAa5vQ,EAAb;;AACA,QAAI2U,IAAI,CAACsqP,IAAL,IAAatqP,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,KAAoB5vQ,EAArC,EAAyC;AACvC2U,MAAAA,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,GAAkB5vQ,EAAlB;AACD,KAFD,MAEO;AACR;AACF,EAGD;AAEA;;;AACA7S,SAAS,CAAC8kP,IAAV,GAAiB,UAASi7B,EAAT,EAAa1I,KAAb,EAAoBt+K,IAApB,EAA0B;AACzC,MAAI,CAAC,KAAK8xL,OAAL,CAAaxT,KAAb,CAAL,EAA0B,OAAOA,KAAK,CAACkQ,IAAb;AAE1B,MAAID,GAAG,GAAG,KAAKC,IAAf;AAAA,MACIxG,IAAI,GAAGxoI,eAAM8+H,KAAK,CAACmD,QAAZ,CADX;AAAA,MAEIjhF,MAAM,GAAG89E,KAAK,CAACiD,WAAN,KAAsB,KAAtB,GAA8B,MAA9B,GAAuC,IAFpD;AAAA,MAGI0Q,OAAO,GAAGjK,IAAI,CAACpI,GAAL,KAAa,GAH3B;AAAA,MAIIsS,OAAO,GAAG,IAJd;AAAA,MAKIrrR,CAAC,GAAG,CALR;AAAA,MAMI03M,MANJ;AAQAA,EAAAA,MAAM,GAAGrtE,IAAI,CAACotI,KAAD,EAAQ0I,EAAR,EAAYhnL,IAAZ,EAAkB,GAAlB,EAAuBuuL,GAAvB,CAAb;AACAhwE,EAAAA,MAAM,CAACwjD,YAAP,CAAoB,OAApB,EAA6B,mBAASuc,KAAT,CAA7B,EAZyC,CAczC;;AACA,QAAMqI,IAAI,GAAG,8BAAmBrI,KAAnB,CAAb;;AACA,OAAK,MAAMxzQ,GAAX,IAAkB67Q,IAAlB,EAAwB5kB,YAAY,CAACxjD,MAAD,EAASzzM,GAAT,EAAc67Q,IAAI,CAAC77Q,GAAD,CAAlB,CAAZ;;AAExB,MAAI,CAACmnR,OAAL,EAAc;AACZlwB,IAAAA,YAAY,CAACxjD,MAAD,EAAS,gBAAT,EAA2B/d,MAA3B,CAAZ;AACD;;AACDuhE,EAAAA,YAAY,CAACxjD,MAAD,EAAS,WAAT,EACV+/D,KAAK,CAACvvO,IAAN,GAAa,mBAAK,IAAL,EAAWuvO,KAAX,EAAkBA,KAAK,CAAC9rJ,KAAxB,CAAb,GAA8C,IADpC,CAAZ;;AAGA,QAAM1tH,OAAO,GAAG2pB,IAAI,IAAI;AACtB,UAAMi7P,KAAK,GAAG,KAAKoI,OAAL,CAAarjQ,IAAb,CAAd;AAAA,UACMmD,IAAI,GAAGs/G,IAAI,CAACziH,IAAD,EAAO8vL,MAAP,EAAe2zE,OAAf,EAAwBlK,IAAI,CAACpI,GAA7B,EAAkC2O,GAAlC,CADjB;;AAGA,QAAI7E,KAAJ,EAAW;AACT,WAAKphD,OAAL,CAAa0/C,IAAb,EAAmBp2P,IAAnB,EAAyBnD,IAAzB;;AACA,UAAIwjQ,OAAJ,EAAatlG,OAAO,CAAC,IAAD,EAAO/6J,IAAP,EAAanD,IAAb,CAAP;AACd;;AAEDyjQ,IAAAA,OAAO,GAAGtgQ,IAAV;AACA,MAAE/qB,CAAF;AACD,GAXD;;AAaA,MAAImhR,IAAI,CAACnI,MAAT,EAAiB;AACf,QAAIvB,KAAK,CAACv8J,KAAN,CAAY57G,MAAhB,EAAwBrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACzB,GAFD,MAEO;AACL,sBAAMu8J,KAAN,EAAax5Q,OAAb;AACD;;AAED,qBAASy5M,MAAT,EAAiB13M,CAAjB;AACA,SAAO03M,MAAP;AACD,CA7CD,EA+CA;;;AACA,SAAS5xB,OAAT,CAAiBusF,QAAjB,EAA2B8N,EAA3B,EAA+Bx0J,KAA/B,EAAsC;AACpCw0J,EAAAA,EAAE,GAAGA,EAAE,CAAC6L,SAAH,CAAaC,eAAlB;AACA,MAAI9yL,IAAJ;AAAA,MAAU3zC,GAAG,GAAG,CAAhB;AAEA,oBAAMmmE,KAAN,EAAa/jG,IAAI,IAAI;AACnBuxE,IAAAA,IAAI,GAAGk5K,QAAQ,CAACntB,IAAT,CAAci7B,EAAd,EAAkBv4P,IAAlB,EAAwBuxE,IAAxB,CAAP;AACA,MAAE3zC,GAAF;AACD,GAHD,EAJoC,CASpC;;AACA,qBAAS26N,EAAT,EAAa,IAAI36N,GAAjB;AACD,EAED;AACA;;;AACA,SAAS6kF,IAAT,CAAcziH,IAAd,EAAoBu4P,EAApB,EAAwBkL,OAAxB,EAAiCtS,GAAjC,EAAsC2O,GAAtC,EAA2C;AACzC,MAAI38P,IAAI,GAAGnD,IAAI,CAAC+/P,IAAhB;AAAA,MAAsB1H,GAAtB,CADyC,CAGzC;;AACA,MAAI,CAACl1P,IAAL,EAAW;AACTk1P,IAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACAx1P,IAAAA,IAAI,GAAG,oBAAUk1P,GAAV,EAAelH,GAAf,EAAoBpsP,EAApB,CAAP;AACA/E,IAAAA,IAAI,CAAC+/P,IAAL,GAAY58P,IAAZ;;AAEA,QAAInD,IAAI,CAACsqP,IAAT,EAAe;AACbnnP,MAAAA,IAAI,CAAC08P,QAAL,GAAgB7/P,IAAhB;AACAmD,MAAAA,IAAI,CAACugQ,UAAL,GAAkB;AAAC96Q,QAAAA,IAAI,EAAE;AAAP,OAAlB,CAFa,CAIb;;AACA,UAAIuoQ,GAAG,KAAK,GAAZ,EAAiB;AACf,cAAM8R,EAAE,GAAG,oBAAU5K,GAAV,EAAe,MAAf,EAAuBtzP,EAAvB,CAAX;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB0D,EAAjB;AACAA,QAAAA,EAAE,CAACpD,QAAH,GAAc7/P,IAAd;AAEA,cAAMskQ,EAAE,GAAG,oBAAUjM,GAAV,EAAe,GAAf,EAAoBtzP,EAApB,CAAX;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB+E,EAAjB;AACAA,QAAAA,EAAE,CAACzE,QAAH,GAAc7/P,IAAd;AAEA,cAAMo6L,EAAE,GAAG,oBAAUi+D,GAAV,EAAe,MAAf,EAAuBtzP,EAAvB,CAAX;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiBnlE,EAAjB;AACAA,QAAAA,EAAE,CAACylE,QAAH,GAAc7/P,IAAd;AACAo6L,QAAAA,EAAE,CAACspE,UAAH,GAAgB;AAAC96Q,UAAAA,IAAI,EAAE;AAAP,SAAhB;AACD;AACF;AACF,GA7BwC,CA+BzC;;;AACA,MAAIua,IAAI,CAACogQ,eAAL,KAAyBzD,GAAzB,IAAgCyE,YAAY,CAACphQ,IAAD,EAAOsgQ,OAAP,CAAhD,EAAiE;AAC/DlL,IAAAA,EAAE,CAACK,YAAH,CAAgBz1P,IAAhB,EAAsBsgQ,OAAO,GAAGA,OAAO,CAACe,WAAX,GAAyBjM,EAAE,CAACyB,UAAzD;AACD;;AAED,SAAO72P,IAAP;AACD;;AAED,SAASohQ,YAAT,CAAsBphQ,IAAtB,EAA4BsgQ,OAA5B,EAAqC;AACnC,SAAOtgQ,IAAI,CAACw7P,UAAL,IACFx7P,IAAI,CAACw7P,UAAL,CAAgBnG,UAAhB,CAA2B9gR,MAA3B,GAAoC,CADlC,IAEFyrB,IAAI,CAACkhQ,eAAL,IAAwBZ,OAF7B,CADmC,CAGG;AACvC,EAGD;;;AAEA,IAAIh1O,OAAO,GAAG,IAAd;AAAA,IAAoB;AAChBjsC,MAAM,GAAG,IADb,EACoB;AAEpB;;AACA,IAAIohR,WAAW,GAAG;AAChB7/J,EAAAA,KAAK,EAAE,UAASw1J,IAAT,EAAehB,EAAf,EAAmBv4P,IAAnB,EAAyB;AAC9B,UAAMo6L,EAAE,GAAG3rK,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAh2Q,IAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACAnK,IAAAA,IAAI,CAACtH,UAAL,CAAgB14Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AAEAxd,IAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAL8B,CAKN;;AACxBj1O,IAAAA,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAAV;AACAe,IAAAA,IAAI,CAACpH,OAAL,CAAa54Q,IAAb,EAAmBymB,IAAnB,EAAyB,IAAzB;AAEA,UAAMijQ,EAAE,GAAGx0O,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAe,IAAAA,IAAI,CAACvH,UAAL,CAAgBz4Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AAEA,UAAM5kB,KAAK,GAAG4kB,IAAI,CAACsqP,IAAL,CAAUwI,WAAV,KAA0B,KAA1B,GAAkC,MAAlC,GAA2C,IAAzD;;AACA,QAAI13Q,KAAK,KAAKoH,MAAM,CAACuvL,MAArB,EAA6B;AAC3BuhE,MAAAA,YAAY,CAACl5C,EAAD,EAAK,gBAAL,EAAuBh/M,KAAvB,CAAZ;AACAk4P,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,gBAAL,EAAuB7nR,KAAvB,CAAZ;AACAoH,MAAAA,MAAM,CAACuvL,MAAP,GAAgB32L,KAAhB;AACD;;AAED,QAAI4kB,IAAI,CAACkyP,gBAAL,IAAyBlyP,IAAI,CAAC+rP,MAAlC,EAA0C;AACxC,YAAMnjQ,IAAI,GAAGoX,IAAI,CAACpX,IAAlB;AACA0qP,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,IAAhB,CAAZ,CAFwC,CAIxC;;AACA,WAAKykE,KAAL,CAAWoE,EAAX,EAAejjQ,IAAf;AACAszO,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,QAAL,EAAe,IAAf,CAAZ,CANwC,CAQxC;;AACA,UAAIr6Q,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVpG,MAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACA,WAAK7E,KAAL,CAAWzkE,EAAX,EAAep6L,IAAf;AACA,UAAIpX,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ,CAZ8B,CAcxC;;AACA6lC,MAAAA,OAAO,GAAG,IAAV;AACD,KAhBD,MAgBO;AACL;AACA6kN,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,MAAhB,CAAZ;AACD;AACF,GAxCe;AAyChBhnM,EAAAA,KAAK,EAAE,UAASmmQ,IAAT,EAAehB,EAAf,EAAmBv4P,IAAnB,EAAyB;AAC9B,QAAIA,IAAI,CAACohN,MAAL,KAAgB,KAApB,EAA2B;AACzBqjD,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,eAAxB,CAAR;AACAkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,WAAxB,CAAR;AACD,KAHD,MAGO;AACLkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,IAAxB,CAAR;AACD;AACF,GAhDe;AAiDhBznK,EAAAA,IAAI,EAAE,UAASyoK,IAAT,EAAehB,EAAf,EAAmBv4P,IAAnB,EAAyB;AAC7B,QAAI0oP,EAAE,GAAG,qBAAU1oP,IAAV,CAAT;AAAA,QACI3jB,GADJ;AAAA,QACSjB,KADT;AAAA,QACgBi9Q,GADhB;AAAA,QACqBtB,EADrB;;AAGA,QAAI,uBAAQrO,EAAR,CAAJ,EAAiB;AACf;AACAttQ,MAAAA,KAAK,GAAGstQ,EAAE,CAAC7mQ,GAAH,CAAOkd,CAAC,IAAI,qBAAUiB,IAAV,EAAgBjB,CAAhB,CAAZ,CAAR;AACA1iB,MAAAA,GAAG,GAAGjB,KAAK,CAACY,IAAN,CAAW,IAAX,CAAN,CAHe,CAGS;;AAExB,UAAIK,GAAG,KAAKmG,MAAM,CAACsuG,IAAnB,EAAyB;AACvB,2BAASynK,EAAT,EAAa,CAAb;AACAF,QAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACA5B,QAAAA,EAAE,GAAG,sBAAW/2P,IAAX,CAAL;AACA5kB,QAAAA,KAAK,CAACc,OAAN,CAAc,CAACJ,CAAD,EAAI1D,CAAJ,KAAU;AACtB,gBAAMwxQ,EAAE,GAAG,oBAAUyO,GAAV,EAAe,OAAf,EAAwBtzP,EAAxB,CAAX;AACA6kP,UAAAA,EAAE,CAACiW,QAAH,GAAc7/P,IAAd,CAFsB,CAEF;;AACpB4pP,UAAAA,EAAE,CAAC8a,WAAH,GAAiB5oR,CAAjB;;AACA,cAAI1D,CAAJ,EAAO;AACLwxQ,YAAAA,EAAE,CAACtW,YAAH,CAAgB,GAAhB,EAAqB,CAArB;AACAsW,YAAAA,EAAE,CAACtW,YAAH,CAAgB,IAAhB,EAAsByjB,EAAtB;AACD;;AACDwB,UAAAA,EAAE,CAACgH,WAAH,CAAe3V,EAAf;AACD,SATD;AAUApnQ,QAAAA,MAAM,CAACsuG,IAAP,GAAcz0G,GAAd;AACD;AACF,KArBD,MAqBO;AACL;AACAjB,MAAAA,KAAK,GAAG,qBAAU4kB,IAAV,EAAgB0oP,EAAhB,CAAR;;AACA,UAAIttQ,KAAK,KAAKoH,MAAM,CAACsuG,IAArB,EAA2B;AACzBynK,QAAAA,EAAE,CAACmM,WAAH,GAAiBtpR,KAAjB;AACAoH,QAAAA,MAAM,CAACsuG,IAAP,GAAc11G,KAAd;AACD;AACF;;AAEDk4P,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoB,sBAAWv4P,IAAX,CAApB,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,WAAL,EAAkB,oBAASv4P,IAAT,IAAiB,IAAnC,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,YAAL,EAAmBv4P,IAAI,CAACq2P,SAAxB,CAAZ;AACA/iB,IAAAA,YAAY,CAACilB,EAAD,EAAK,cAAL,EAAqBv4P,IAAI,CAACs2P,WAA1B,CAAZ;AACAhjB,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoBv4P,IAAI,CAACu2P,UAAzB,CAAZ;AACD;AAxFe,CAAlB;;AA2FA,SAASkO,QAAT,CAAkBlM,EAAlB,EAAsB5+Q,IAAtB,EAA4ByB,KAA5B,EAAmC;AACjC,MAAIA,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B;AAC1B,QAAIyB,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,MAAAA,EAAE,CAACsG,KAAH,CAAS+F,cAAT,CAAwBjrR,IAAxB;AACD,KAFD,MAEO;AACL4+Q,MAAAA,EAAE,CAACsG,KAAH,CAASkE,WAAT,CAAqBppR,IAArB,EAA2ByB,KAAK,GAAG,EAAnC;AACD;;AACDoH,IAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;AACF;;AAED5C,SAAS,CAACqhO,OAAV,GAAoB,UAAS0/C,IAAT,EAAehB,EAAf,EAAmBv4P,IAAnB,EAAyB;AAC3C;AACA;AACAyuB,EAAAA,OAAO,GAAG8pO,EAAV;AACA/1Q,EAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAJ2C,CAM3C;;AACA,gCAAmBnqR,IAAnB,EAAyBymB,IAAzB,EAP2C,CAS3C;;AACAu5P,EAAAA,IAAI,CAACr/O,IAAL,CAAU3gC,IAAV,EAAgBymB,IAAhB,EAAsB,IAAtB,EAV2C,CAY3C;;AACA,QAAM2jQ,KAAK,GAAGC,WAAW,CAACrK,IAAI,CAAClhQ,IAAN,CAAzB;AACA,MAAIsrQ,KAAJ,EAAWA,KAAK,CAACzsR,IAAN,CAAW,IAAX,EAAiBqiR,IAAjB,EAAuBhB,EAAvB,EAA2Bv4P,IAA3B,EAdgC,CAgB3C;AACA;;AACA,MAAIyuB,OAAJ,EAAa,KAAKowO,KAAL,CAAWpwO,OAAX,EAAoBzuB,IAApB;AACd,CAnBD;;AAqBA,SAASzmB,IAAT,CAAcI,IAAd,EAAoByB,KAApB,EAA2B2pB,EAA3B,EAA+B;AAC7B;AACA,MAAI3pB,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B,OAFC,CAI7B;;AACA,MAAIorB,EAAJ,EAAQ;AACN4/P,IAAAA,cAAc,CAACl2O,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,EAAuB2pB,EAAvB,CAAd;AACD,GAFD,MAEO;AACLuuO,IAAAA,YAAY,CAAC7kN,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,CAAZ;AACD,GAT4B,CAW7B;;;AACAoH,EAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;;AAED,SAASk4P,YAAT,CAAsBilB,EAAtB,EAA0B5+Q,IAA1B,EAAgCyB,KAAhC,EAAuC;AACrC,MAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAtB;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD;AACF;;AAED,SAASgrR,cAAT,CAAwBpM,EAAxB,EAA4B5+Q,IAA5B,EAAkCyB,KAAlC,EAAyC2pB,EAAzC,EAA6C;AAC3C,MAAI3pB,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACoM,cAAH,CAAkB5/P,EAAlB,EAAsBprB,IAAtB,EAA4ByB,KAA5B;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAACsM,iBAAH,CAAqB9/P,EAArB,EAAyBprB,IAAzB;AACD;AACF;;AAEDnB,SAAS,CAACqmR,KAAV,GAAkB,UAAStG,EAAT,EAAax0P,CAAb,EAAgB;AAChC,MAAIA,CAAC,IAAI,IAAT,EAAe;;AAEf,OAAK,MAAMorD,IAAX,IAAmBkzM,cAAnB,EAA2B;AACzB,QAAIjnR,KAAK,GAAG+zE,IAAI,KAAK,MAAT,GAAkB,sBAAWprD,CAAX,CAAlB,GAAkCA,CAAC,CAACorD,IAAD,CAA/C;AACA,QAAI/zE,KAAK,KAAKoH,MAAM,CAAC2sE,IAAD,CAApB,EAA4B;AAE5B,UAAMx1E,IAAI,GAAG0oR,eAAOlzM,IAAP,CAAb;;AACA,QAAI/zE,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,MAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD,KAFD,MAEO;AACL,UAAI,0BAAWyB,KAAX,CAAJ,EAAuB;AACrBA,QAAAA,KAAK,GAAG,2BAAYA,KAAZ,EAAmB,KAAKsvQ,KAAL,CAAW9oP,QAA9B,EAAwCg7F,IAAI,EAA5C,CAAR;AACD;;AACD27J,MAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAK,GAAG,EAA9B;AACD;;AAEDoH,IAAAA,MAAM,CAAC2sE,IAAD,CAAN,GAAe/zE,KAAf;AACD;AACF,CAnBD;;AAqBA,SAASwhH,IAAT,GAAgB;AACd,MAAI9xG,GAAJ;AACA,SAAO,OAAOka,MAAP,KAAkB,WAAlB,GAAgC,EAAhC,GACH,CAACla,GAAG,GAAGka,MAAM,CAAC1pB,QAAd,EAAwByiO,IAAxB,GAA+BjzN,GAAG,CAAC8xG,IAAJ,CAASn7G,KAAT,CAAe,CAAf,EAAkB,CAACqJ,GAAG,CAACizN,IAAJ,CAASrmO,MAA5B,CAA/B,GACAoT,GAAG,CAAC8xG,IAFR;AAGD;;;;;;;;;;ACpmBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,SAASkoK,iBAAT,CAA2BxtD,MAA3B,EAAmC;AAChDojD,oBAASxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;;AAEA,OAAKytD,KAAL,GAAa;AACXigD,IAAAA,IAAI,EAAE,EADK;AAEX/hD,IAAAA,EAAE,EAAI,EAFK;AAGXlnF,IAAAA,IAAI,EAAE,EAHK;AAIXkpI,IAAAA,IAAI,EAAE,EAJK;AAKXhiE,IAAAA,IAAI,EAAE,EALK;AAMX/wM,IAAAA,IAAI,EAAE;AANK,GAAb;AASA,OAAKw4M,KAAL,GAAa;AACX9oP,IAAAA,QAAQ,EAAE,EADC;AAEX+oP,IAAAA,QAAQ,EAAE;AAFC,GAAb;AAID;;AAED,IAAInyQ,SAAS,GAAG,wBAASssR,iBAAT,EAA4BpK,iBAA5B,CAAhB;AACA,IAAIt3O,IAAI,GAAGs3O,kBAASliR,SAApB;;AAEAA,SAAS,CAACwzL,MAAV,GAAmB,UAAS1rL,KAAT,EAAgB+tB,MAAhB,EAAwBirP,MAAxB,EAAgCsB,WAAhC,EAA6C;AAC9Dx3O,EAAAA,IAAI,CAAC4oJ,MAAL,CAAY90L,IAAZ,CAAiB,IAAjB,EAAuBoJ,KAAvB,EAA8B+tB,MAA9B,EAAsCirP,MAAtC,EAA8CsB,WAA9C;AACA,MAAI72P,CAAC,GAAG,KAAKk2P,OAAb;AAAA,MACIn+Q,CAAC,GAAG,KAAKipR,KADb;AAGA,MAAI7qP,IAAI,GAAG;AACT8qP,IAAAA,KAAK,EAAI,OADA;AAET1kR,IAAAA,KAAK,EAAI,KAAKw6Q,MAAL,GAAc,KAAKE,MAFnB;AAGT3sP,IAAAA,MAAM,EAAG,KAAK0sP,OAAL,GAAe,KAAKC,MAHpB;AAITgI,IAAAA,OAAO,EAAE,SAAS,KAAKlI,MAAd,GAAuB,GAAvB,GAA6B,KAAKC;AAJlC,GAAX;;AAMA,OAAK,IAAI1+Q,GAAT,IAAgB6+G,iBAAhB,EAA0B;AACxBhhF,IAAAA,IAAI,CAAC79B,GAAD,CAAJ,GAAY6+G,kBAAS7+G,GAAT,CAAZ;AACD;;AAEDP,EAAAA,CAAC,CAACkpU,IAAF,GAAS,mBAAQ,KAAR,EAAe9qS,IAAf,CAAT;AAEA,MAAI+oP,EAAE,GAAG,KAAKtI,QAAd;AACA,MAAIsI,EAAE,KAAK,aAAP,IAAwBA,EAAE,KAAK,MAAnC,EAA2CA,EAAE,GAAG,IAAL;;AAE3C,MAAIA,EAAJ,EAAQ;AACNnnR,IAAAA,CAAC,CAACmnR,EAAF,GAAO,mBAAQ,MAAR,EAAgB;AACrB3iR,MAAAA,KAAK,EAAG,KAAKw6Q,MADQ;AAErBzsP,MAAAA,MAAM,EAAE,KAAK0sP,OAFQ;AAGrBnyQ,MAAAA,IAAI,EAAIq6Q;AAHa,KAAhB,IAIF,oBAAS,MAAT,CAJL;AAKD,GAND,MAMO;AACLnnR,IAAAA,CAAC,CAACmnR,EAAF,GAAO,EAAP;AACD;;AAEDnnR,EAAAA,CAAC,CAACigM,IAAF,GAAS,mBAAQ,GAAR,EAAa,sBACpB,EADoB,EAChBumF,sBADgB,EACA;AAACjhG,IAAAA,SAAS,EAAE,eAAet9J,CAAf,GAAmB;AAA/B,GADA,CAAb,CAAT;AAIAjoB,EAAAA,CAAC,CAACmpU,IAAF,GAAS,oBAAS,GAAT,IAAgB,oBAAS,KAAT,CAAzB;AAEA,SAAO,IAAP;AACD,CArCD;;AAuCAzsU,SAAS,CAACw5Q,UAAV,GAAuB,YAAW;AAChC,MAAIt3C,EAAE,GAAGt3L,IAAI,CAAC4uO,UAAL,CAAgBv5Q,KAAhB,CAAsB,IAAtB,EAA4BN,SAA5B,CAAT;;AACA,MAAIA,SAAS,CAACT,MAAV,IAAoB,KAAKqtR,KAAL,CAAWigD,IAAnC,EAAyC;AACvC,SAAKh5I,MAAL,CAAY,KAAK8uF,MAAjB,EAAyB,KAAKC,OAA9B,EAAuC,KAAKd,OAA5C,EAAqD,KAAKe,MAA1D;AACD;;AACD,SAAOtgD,EAAP;AACD,CAND;;AAQAliO,SAAS,CAACsnR,GAAV,GAAgB,YAAW;AACzB,MAAIhkR,CAAC,GAAG,KAAKipR,KAAb;AACA,SAAOjpR,CAAC,CAACkpU,IAAF,GAASlpU,CAAC,CAACmnQ,IAAX,GAAkBnnQ,CAAC,CAACmnR,EAApB,GAAyBnnR,CAAC,CAACigM,IAA3B,GAAkCjgM,CAAC,CAACo2D,IAApC,GAA2Cp2D,CAAC,CAACmpU,IAApD;AACD,CAHD;;AAKAzsU,SAAS,CAAC4iR,OAAV,GAAoB,UAASvL,KAAT,EAAgB;AAClC,OAAKkV,KAAL,CAAW7yN,IAAX,GAAkB,KAAKo4M,IAAL,CAAUuF,KAAV,CAAlB;AACA,OAAKkV,KAAL,CAAW9hB,IAAX,GAAkB,KAAKiiE,SAAL,EAAlB;AACA,SAAO,IAAP;AACD,CAJD;;AAMA1sU,SAAS,CAAC0sU,SAAV,GAAsB,YAAW;AAC/B,MAAIjiE,IAAI,GAAG,EAAX;AAAA,MAAekO,GAAf;;AAEA,OAAK,MAAM9lQ,EAAX,IAAiB,KAAKq/P,KAAL,CAAW9oP,QAA5B,EAAsC;AACpC,UAAMwsJ,GAAG,GAAG,KAAKs8F,KAAL,CAAW9oP,QAAX,CAAoBvW,EAApB,CAAZ;AAAA,UACM83P,KAAK,GAAG/0F,GAAG,CAAC+0F,KADlB;;AAGA,QAAI/0F,GAAG,CAACxsJ,QAAJ,KAAiB,QAArB,EAA+B;AAC7B;AACA;AACA;AACA;AAEAqhP,MAAAA,IAAI,IAAI,mBAAQkO,GAAG,GAAG,SAAd,EAAyB;AAC/B9lQ,QAAAA,EAAE,EAAEy3P,0BAAgBz3P,EADW;AAE/B23Q,QAAAA,OAAO,EAAE,SAFsB;AAG/B1iR,QAAAA,KAAK,EAAE,MAHwB;AAI/B+tB,QAAAA,MAAM,EAAE,MAJuB;AAK/B21P,QAAAA,mBAAmB,EAAE;AALU,OAAzB,CAAR;AAQA/gB,MAAAA,IAAI,IAAI,mBAAQ,MAAR,EAAgB;AACtB3iQ,QAAAA,KAAK,EAAG,GADc;AAEtB+tB,QAAAA,MAAM,EAAE,GAFc;AAGtBzlB,QAAAA,IAAI,EAAI,UAAUyC,EAAV,GAAe;AAHD,OAAhB,IAIH,oBAAS,MAAT,CAJL;AAMA43P,MAAAA,IAAI,IAAI,oBAASkO,GAAT,CAAR;AAEAlO,MAAAA,IAAI,IAAI,mBAAQkO,GAAG,GAAG,gBAAd,EAAgC;AACtC9lQ,QAAAA,EAAE,EAAEA,EADkC;AAEtC44Q,QAAAA,EAAE,EAAE71G,GAAG,CAACvjE,EAF8B;AAGtCq5K,QAAAA,EAAE,EAAE91G,GAAG,CAACxjE,EAH8B;AAItCu5K,QAAAA,EAAE,EAAE/1G,GAAG,CAACo8B,EAJ8B;AAKtC6uC,QAAAA,EAAE,EAAEjrE,GAAG,CAACl3F,EAL8B;AAMtCoiK,QAAAA,EAAE,EAAElrE,GAAG,CAACtjE,EAN8B;AAOrC1kG,QAAAA,CAAC,EAAEgoK,GAAG,CAACq8B;AAP8B,OAAhC,CAAR;AASD,KA/BD,MA+BO;AACLw4D,MAAAA,IAAI,IAAI,mBAAQkO,GAAG,GAAG,gBAAd,EAAgC;AACtC9lQ,QAAAA,EAAE,EAAEA,EADkC;AAEtCw/F,QAAAA,EAAE,EAAEujE,GAAG,CAACvjE,EAF8B;AAGtC3zB,QAAAA,EAAE,EAAEk3F,GAAG,CAACl3F,EAH8B;AAItC0zB,QAAAA,EAAE,EAAEwjE,GAAG,CAACxjE,EAJ8B;AAKtCE,QAAAA,EAAE,EAAEsjE,GAAG,CAACtjE;AAL8B,OAAhC,CAAR;AAOD;;AAED,SAAK,IAAI1yG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+qQ,KAAK,CAACzrQ,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrC6qQ,MAAAA,IAAI,IAAI,mBAAQ,MAAR,EAAgB;AACtBl+P,QAAAA,MAAM,EAAEo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MADK;AAEtB,sBAAco+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P;AAFD,OAAhB,IAGH,oBAAS,MAAT,CAHL;AAID;;AAEDqV,IAAAA,IAAI,IAAI,oBAASkO,GAAT,CAAR;AACD;;AAED,OAAK,MAAM9lQ,EAAX,IAAiB,KAAKq/P,KAAL,CAAWC,QAA5B,EAAsC;AACpC,UAAMv8F,GAAG,GAAG,KAAKs8F,KAAL,CAAWC,QAAX,CAAoBt/P,EAApB,CAAZ;AAEA43P,IAAAA,IAAI,IAAI,mBAAQ,UAAR,EAAoB;AAAC53P,MAAAA,EAAE,EAAEA;AAAL,KAApB,CAAR;;AAEA,QAAI+iK,GAAG,CAAC3nK,IAAR,EAAc;AACZw8P,MAAAA,IAAI,IAAI,mBAAQ,MAAR,EAAgB;AACtBh+P,QAAAA,CAAC,EAAEmpK,GAAG,CAAC3nK;AADe,OAAhB,IAEH,oBAAS,MAAT,CAFL;AAGD,KAJD,MAIO;AACLw8P,MAAAA,IAAI,IAAI,mBAAQ,MAAR,EAAgB;AACtB1kQ,QAAAA,CAAC,EAAE,CADmB;AAEtBue,QAAAA,CAAC,EAAE,CAFmB;AAGtBxc,QAAAA,KAAK,EAAE8tK,GAAG,CAAC9tK,KAHW;AAItB+tB,QAAAA,MAAM,EAAE+/I,GAAG,CAAC//I;AAJU,OAAhB,IAKH,oBAAS,MAAT,CALL;AAMD;;AAED40O,IAAAA,IAAI,IAAI,oBAAS,UAAT,CAAR;AACD;;AAED,SAAOA,IAAI,GAAI,mBAAQ,MAAR,IAAkBA,IAAlB,GAAyB,oBAAS,MAAT,CAA7B,GAAiD,EAA5D;AACD,CAhFD;;AAkFAzqQ,SAAS,CAAC0hC,IAAV,GAAiB,UAAS21O,KAAT,EAAgB7vP,IAAhB,EAAsB5C,KAAtB,EAA6B+zP,GAA7B,EAAkC;AACjD,QAAM1xE,MAAM,GAAG,EAAf;AAAA,QACMlmM,IAAI,GAAG,CAACI,IAAD,EAAOyB,KAAP,EAAc2pB,EAAd,EAAkBogQ,QAAlB,KAA+B;AACpC1lF,IAAAA,MAAM,CAAC0lF,QAAQ,IAAIxrR,IAAb,CAAN,GAA2ByB,KAA3B;AACD,GAHP,CADiD,CAMjD;;;AACA,MAAIlD,KAAK,CAACuH,OAAN,CAAc2d,KAAd,CAAJ,EAA0B;AACxBA,IAAAA,KAAK,CAAClhB,OAAN,CAAcmgB,EAAE,IAAIA,EAAE,CAAC9iB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAtB;AACD,GAFD,MAEO;AACL5C,IAAAA,KAAK,CAAC7jB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAL;AACD,GAXgD,CAajD;;;AACA,MAAImxP,GAAJ,EAAS;AACPg0D,IAAAA,WAAW,CAAC1lI,MAAD,EAASz/K,IAAT,EAAe6vP,KAAf,EAAsBsB,GAAtB,EAA2B,KAAKzG,KAAhC,CAAX;AACD;;AAED,SAAOjrE,MAAP;AACD,CAnBD;;AAqBAjnM,SAAS,CAACokH,IAAV,GAAiB,UAAS58F,IAAT,EAAe;AAC9B,MAAI4xK,IAAI,GAAG,IAAX;AAAA,MACIh1E,IAAI,GAAG58F,IAAI,CAAC48F,IADhB;AAAA,MAEI1iF,IAFJ;;AAIA,MAAI0iF,IAAJ,EAAU;AACR,QAAI1iF,IAAI,GAAG03J,IAAI,CAACszF,MAAL,IAAetzF,IAAI,CAACszF,MAAL,CAAYtoK,IAAZ,CAA1B,EAA6C;AAC3C,aAAO1iF,IAAP;AACD,KAFD,MAEO;AACL03J,MAAAA,IAAI,CAAC45E,WAAL,CAAiB5uJ,IAAjB,EAAuBv1G,IAAvB,CAA4B6yB,IAAI,IAAI;AAClC;AACA;AACAA,QAAAA,IAAI,CAAC,YAAD,CAAJ,GAAqBA,IAAI,CAAC0iF,IAA1B;AACA1iF,QAAAA,IAAI,CAAC0iF,IAAL,GAAY,IAAZ;AACA,SAACg1E,IAAI,CAACszF,MAAL,KAAgBtzF,IAAI,CAACszF,MAAL,GAAc,EAA9B,CAAD,EAAoCtoK,IAApC,IAA4C1iF,IAA5C;AACD,OAND;AAOD;AACF;;AACD,SAAO,IAAP;AACD,CAnBD;;AAqBA1hC,SAAS,CAAC8xQ,IAAV,GAAiB,UAASuF,KAAT,EAAgB;AAC/B,QAAM0J,IAAI,GAAGxoI,eAAM8+H,KAAK,CAACmD,QAAZ,CAAb;AAAA,QACM7B,GAAG,GAAIoI,IAAI,CAACpI,GADlB;AAAA,QAEM8T,QAAQ,GAAG,CAACjE,wBAAD,EAAqBzH,IAAI,CAACr/O,IAA1B,CAFjB;AAIA,MAAI+4E,GAAG,GAAG,EAAV,CAL+B,CAO/B;;AACAA,EAAAA,GAAG,IAAI,mBAAQ,GAAR,EAAa,sBAClB;AACE,aAAS,mBAAS48J,KAAT,CADX;AAEE,iBAAaA,KAAK,CAACvvO,IAAN,GAAa,mBAAK,IAAL,EAAWuvO,KAAX,EAAkBA,KAAK,CAAC9rJ,KAAxB,CAAb,GAA8C;AAF7D,GADkB,EAKlB,8BAAmB8rJ,KAAnB,CALkB,EAMlB;AACE,sBAAkBsB,GAAG,KAAK,GAAR,IAAetB,KAAK,CAACiD,WAAN,KAAsB,KAArC,GAA6C,MAA7C,GAAsD;AAD1E,GANkB,CAAb,CAAP,CAR+B,CAmB/B;;AACA,QAAMz8Q,OAAO,GAAG2pB,IAAI,IAAI;AACtB,UAAM48F,IAAI,GAAG,KAAKA,IAAL,CAAU58F,IAAV,CAAb;AACA,QAAI48F,IAAJ,EAAU3J,GAAG,IAAI,mBAAQ,GAAR,EAAa2J,IAAb,CAAP;AAEV3J,IAAAA,GAAG,IAAI,mBACLk+J,GADK,EAEL,KAAKj3O,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBilQ,QAAvB,EAAiC9T,GAAG,KAAK,GAAR,GAAcA,GAAd,GAAoB,IAArD,CAFK,CAAP;;AAKA,QAAIA,GAAG,KAAK,MAAZ,EAAoB;AAClB,YAAMzI,EAAE,GAAG,qBAAU1oP,IAAV,CAAX;;AACA,UAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACf;AACA,cAAMtrP,KAAK,GAAG;AAAC7e,UAAAA,CAAC,EAAE,CAAJ;AAAO2e,UAAAA,EAAE,EAAE,sBAAW8C,IAAX;AAAX,SAAd;;AACA,aAAK,IAAI5nB,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACswQ,EAAE,CAAChxQ,MAAnB,EAA2B,EAAEU,CAA7B,EAAgC;AAC9B66G,UAAAA,GAAG,IAAI,mBAAQ,OAAR,EAAiB76G,CAAC,GAAGglB,KAAH,GAAU,IAA5B,IACHgoT,WAAW,CAAC,qBAAUplT,IAAV,EAAgB0oP,EAAE,CAACtwQ,CAAD,CAAlB,CAAD,CADR,GAEH,oBAAS,OAAT,CAFJ;AAGD;AACF,OARD,MAQO;AACL;AACA66G,QAAAA,GAAG,IAAImyN,WAAW,CAAC,qBAAUplT,IAAV,EAAgB0oP,EAAhB,CAAD,CAAlB;AACD;AACF,KAdD,MAcO,IAAIyI,GAAG,KAAK,GAAZ,EAAiB;AACtB,YAAMsB,IAAI,GAAGzyP,IAAI,CAACkyP,gBAAlB;AAAA,YACMtpQ,IAAI,GAAGoX,IAAI,CAACpX,IADlB;AAAA,YAEMmjQ,MAAM,GAAG/rP,IAAI,CAAC+rP,MAFpB;;AAIA,UAAI0G,IAAI,IAAI1G,MAAZ,EAAoB;AAClB/rP,QAAAA,IAAI,CAAC+rP,MAAL,GAAc,IAAd;AACD;;AAED94J,MAAAA,GAAG,IAAI,mBACL,MADK,EAEL,KAAK/4E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACvH,UAA5B,EAAwC,QAAxC,CAFK,IAGH,oBAAS,MAAT,CAHJ;AAKA/+J,MAAAA,GAAG,IAAI,mBAAQ,GAAR,EAAa,KAAK/4E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACpH,OAA5B,CAAb,IACH,KAAKkzD,SAAL,CAAerlT,IAAf,CADG,GAEH,oBAAS,GAAT,CAFJ;;AAIA,UAAIyyP,IAAI,IAAI1G,MAAZ,EAAoB;AAClB,YAAInjQ,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVoX,QAAAA,IAAI,CAAC+rP,MAAL,GAAcA,MAAd;AAEA94J,QAAAA,GAAG,IAAI,mBACL,MADK,EAEL,KAAK/4E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAFK,IAGH,oBAAS,MAAT,CAHJ;AAKA,YAAIrpQ,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ;AACX,OAVD,MAUO;AACLqqG,QAAAA,GAAG,IAAI,mBACL,MADK,EAEL,KAAK/4E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAFK,IAGH,oBAAS,MAAT,CAHJ;AAID;AACF;;AAEDh/J,IAAAA,GAAG,IAAI,oBAASk+J,GAAT,CAAP;AACA,QAAIv0J,IAAJ,EAAU3J,GAAG,IAAI,oBAAS,GAAT,CAAP;AACX,GA7DD;;AA+DA,MAAIsmK,IAAI,CAACnI,MAAT,EAAiB;AACf,QAAIvB,KAAK,CAACv8J,KAAN,IAAeu8J,KAAK,CAACv8J,KAAN,CAAY57G,MAA/B,EAAuCrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACxC,GAFD,MAEO;AACL,sBAAMu8J,KAAN,EAAax5Q,OAAb;AACD,GAvF8B,CAyF/B;;;AACA,SAAO48G,GAAG,GAAG,oBAAS,GAAT,CAAb;AACD,CA3FD;;AA6FAz6G,SAAS,CAAC6sU,SAAV,GAAsB,UAASx1D,KAAT,EAAgB;AACpC,MAAI58J,GAAG,GAAG,EAAV;AACA,oBAAM48J,KAAN,EAAa7vP,IAAI,IAAI;AAAEizF,IAAAA,GAAG,IAAI,KAAKq3J,IAAL,CAAUtqP,IAAV,CAAP;AAAyB,GAAhD;AACA,SAAOizF,GAAP;AACD,CAJD;;AAMA,SAASkyN,WAAT,CAAqBvpU,CAArB,EAAwBokB,IAAxB,EAA8B6vP,KAA9B,EAAqCsB,GAArC,EAA0ClO,IAA1C,EAAgD;AAC9C,MAAIjjP,IAAI,IAAI,IAAZ,EAAkB,OAAOpkB,CAAP;;AAElB,MAAIu1Q,GAAG,KAAK,QAAR,IAAoBtB,KAAK,CAACiD,WAAN,KAAsB,KAA9C,EAAqD;AACnDl3Q,IAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AAED,MAAIu1Q,GAAG,KAAK,QAAZ,EAAsB;AACpB,QAAItB,KAAK,CAACiD,WAAN,KAAsB,KAA1B,EAAiC;AAC/Bl3Q,MAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AACDA,IAAAA,CAAC,CAACwpR,OAAF,GAAY,MAAZ;AACA,QAAIplQ,IAAI,CAACpX,IAAL,KAAc,IAAlB,EAAwB,OAAOhN,CAAP;AACzB;;AAED,MAAIu1Q,GAAG,KAAK,OAAR,IAAmBnxP,IAAI,CAACohN,MAAL,KAAgB,KAAvC,EAA8C;AAC5CxlO,IAAAA,CAAC,CAACijR,KAAF,GAAU,6DAAV;AACD;;AAED,MAAI1N,GAAG,KAAK,MAAZ,EAAoB;AAClBv1Q,IAAAA,CAAC,CAAC,aAAD,CAAD,GAAmB,sBAAWokB,IAAX,CAAnB;AACApkB,IAAAA,CAAC,CAAC,WAAD,CAAD,GAAiB,oBAASokB,IAAT,IAAiB,IAAlC;AACA,QAAIA,IAAI,CAACq2P,SAAT,EAAoBz6Q,CAAC,CAAC,YAAD,CAAD,GAAkBokB,IAAI,CAACq2P,SAAvB;AACpB,QAAIr2P,IAAI,CAACs2P,WAAT,EAAsB16Q,CAAC,CAAC,cAAD,CAAD,GAAoBokB,IAAI,CAACs2P,WAAzB;AACtB,QAAIt2P,IAAI,CAACu2P,UAAT,EAAqB36Q,CAAC,CAAC,aAAD,CAAD,GAAmBokB,IAAI,CAACu2P,UAAxB;AACtB;;AAED,OAAK,MAAMpnM,IAAX,IAAmBkzM,cAAnB,EAA2B;AACzB,QAAIjnR,KAAK,GAAG4kB,IAAI,CAACmvD,IAAD,CAAhB;AACA,UAAMx1E,IAAI,GAAG0oR,eAAOlzM,IAAP,CAAb;;AAEA,QAAI/zE,KAAK,KAAK,aAAV,KAA4BzB,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,QAAxD,CAAJ,EAAuE,CACrE;AACA;AACD,KAHD,MAGO,IAAIyB,KAAK,IAAI,IAAb,EAAmB;AACxB,UAAI,0BAAWA,KAAX,CAAJ,EAAuB;AACrBA,QAAAA,KAAK,GAAG,2BAAYA,KAAZ,EAAmB6nQ,IAAI,CAACrhP,QAAxB,EAAkC,EAAlC,CAAR;AACD;;AACDhmB,MAAAA,CAAC,CAACjC,IAAD,CAAD,GAAUyB,KAAV;AACD;AACF;;AAED,SAAOQ,CAAP;AACD;;AAED,SAASwpU,WAAT,CAAqBxpU,CAArB,EAAwB;AACtB,SAAOA,CAAC,CAACD,OAAF,CAAU,IAAV,EAAgB,OAAhB,EACEA,OADF,CACU,IADV,EACgB,MADhB,EAEEA,OAFF,CAEU,IAFV,EAEgB,MAFhB,CAAP;AAGD;;;;;;;;;;AC5WD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAI0pR,MAAM,GAAG,QAAb;AACA,IAAIC,GAAG,GAAG,KAAV;AACA,IAAIC,GAAG,GAAG,KAAV;AACA,IAAI74E,IAAI,GAAG,MAAX;AAEO,IAAI84E,UAAU,GAAG;AACtBH,EAAAA,MAAM,EAAEA,MADc;AAEtBC,EAAAA,GAAG,EAAKA,GAFc;AAGtBC,EAAAA,GAAG,EAAKA,GAHc;AAItB74E,EAAAA,IAAI,EAAIA;AAJc,CAAjB;;AAOP,IAAI+4E,OAAO,GAAG,EAAd;AAEAA,OAAO,CAACJ,MAAD,CAAP,GAAkBI,OAAO,CAACH,GAAD,CAAP,GAAe;AAC/B7a,EAAAA,QAAQ,EAAEsU,uBADqB;AAE/B2G,EAAAA,QAAQ,EAAE3G,uBAFqB;AAG/BjqK,EAAAA,OAAO,EAAGioK;AAHqB,CAAjC;AAMA0I,OAAO,CAACF,GAAD,CAAP,GAAe;AACb9a,EAAAA,QAAQ,EAAEgY,oBADG;AAEbiD,EAAAA,QAAQ,EAAEZ,0BAFG;AAGbhwK,EAAAA,OAAO,EAAG4qK;AAHG,CAAf;AAMA+F,OAAO,CAAC/4E,IAAD,CAAP,GAAgB,EAAhB;;AAEO,SAASi5E,YAAT,CAAsBhsR,IAAtB,EAA4BolB,CAA5B,EAA+B;AACpCplB,EAAAA,IAAI,GAAG+J,MAAM,CAAC/J,IAAI,IAAI,EAAT,CAAN,CAAmB4C,WAAnB,EAAP;;AACA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB+tR,IAAAA,OAAO,CAAC9rR,IAAD,CAAP,GAAgBolB,CAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO0mQ,OAAO,CAAC9rR,IAAD,CAAd;AACD;AACF;;;;;;;;;AC1CD;;AACA;;AACA;;;;AAEO,SAASk+O,SAAT,CAAmBg4B,KAAnB,EAA0B3E,MAA1B,EAAkC33P,MAAlC,EAA0C;AAC/C,QAAMqyQ,IAAI,GAAG,EAAb;AAAA,QAAiB;AACX1pE,EAAAA,GAAG,GAAG,IAAI0uD,eAAJ,GAAa5pD,KAAb,CAAmBkqD,MAAnB,CADZ;AAAA,QACwC;AAClC7yP,EAAAA,IAAI,GAAGw3P,KAAK,CAACmD,QAFnB;AAIA,SAAO36P,IAAI,GAAGwtQ,aAAa,CAAChW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAhB,GACPvtQ,IAAI,KAAK,OAAT,GAAmBytQ,cAAc,CAACjW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAjC,GACA,qBAAM,kDAAN,CAFJ;AAGD;;AAED,SAASC,aAAT,CAAuBvb,IAAvB,EAA6BpuD,GAA7B,EAAkC3oM,MAAlC,EAA0CqyQ,IAA1C,EAAgD;AAC9C,MAAIG,SAAS,CAACzb,IAAD,EAAOpuD,GAAP,EAAY3oM,MAAZ,CAAb,EAAkC;AAChC,UAAM+/F,KAAK,GAAGg3J,IAAI,CAACh3J,KAAnB;AAAA,UACMj7F,IAAI,GAAGiyP,IAAI,CAAC0I,QADlB;AAAA,UAEM1sQ,CAAC,GAAGgtG,KAAK,CAAC57G,MAFhB;AAIA,QAAIU,CAAC,GAAG,CAAR;;AAEA,QAAIigB,IAAI,KAAK,OAAb,EAAsB;AACpB,aAAOjgB,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB;AACf0tR,QAAAA,cAAc,CAACxyK,KAAK,CAACl7G,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAd;AACD;AACF,KAJD,MAIO;AACL,WAAK,MAAM7/P,IAAI,GAAGsxP,eAAMh/P,IAAN,EAAY44P,KAA9B,EAAqC74Q,CAAC,GAACkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7C,YAAI4nB,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAhB;AACA,YAAI4tR,aAAa,CAAChmQ,IAAD,EAAOk8L,GAAP,EAAYn2L,IAAZ,CAAjB,EAAoC6/P,IAAI,CAACvtR,IAAL,CAAU2nB,IAAV;AACrC;AACF;AACF;;AACD,SAAO4lQ,IAAP;AACD;;AAED,SAASG,SAAT,CAAmBzb,IAAnB,EAAyBpuD,GAAzB,EAA8B3oM,MAA9B,EAAsC;AACpC;AACA;AACA;AACA,SAAO+2P,IAAI,CAACY,MAAL,IAAehvD,GAAG,CAACpW,UAAJ,CAAewkE,IAAI,CAACY,MAApB,CAAf,KACLZ,IAAI,CAAC0I,QAAL,KAAkB,OAAlB,IACA1I,IAAI,CAACwI,WAAL,KAAqB,KAArB,KAA+B,CAACv/P,MAAD,IAAWA,MAAM,CAAC+2P,IAAD,CAAhD,CAFK,CAAP;AAID;;AAED,SAASwb,cAAT,CAAwB/hK,KAAxB,EAA+Bm4F,GAA/B,EAAoC3oM,MAApC,EAA4CqyQ,IAA5C,EAAkD;AAChD;AACA;AACA,MAAKryQ,MAAM,IAAIA,MAAM,CAACwwG,KAAK,CAACumJ,IAAP,CAAjB,IACA0b,aAAa,CAACjiK,KAAD,EAAQm4F,GAAR,EAAam7D,eAAMtzJ,KAAN,CAAYktJ,KAAzB,CADjB,EACkD;AAChD2U,IAAAA,IAAI,CAACvtR,IAAL,CAAU0rH,KAAV;AACD,GAN+C,CAQhD;AACA;;;AACA,QAAMgtB,KAAK,GAAGhtB,KAAK,CAACzQ,KAApB;AAAA,QACMhtG,CAAC,GAAGyqI,KAAK,IAAIA,KAAK,CAACr5I,MADzB;;AAGA,MAAI4O,CAAJ,EAAO;AACL,UAAM/H,CAAC,GAAGwlH,KAAK,CAACxlH,CAAN,IAAW,CAArB;AAAA,UACMue,CAAC,GAAGinG,KAAK,CAACjnG,CAAN,IAAW,CADrB;AAEAo/L,IAAAA,GAAG,CAACrD,SAAJ,CAAc,CAACt6M,CAAf,EAAkB,CAACue,CAAnB;;AACA,SAAK,IAAI1kB,CAAC,GAAC,CAAX,EAAcA,CAAC,GAACkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBytR,MAAAA,aAAa,CAAC90I,KAAK,CAAC34I,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAb;AACD;;AACD1pE,IAAAA,GAAG,CAACrD,SAAJ,CAAct6M,CAAd,EAAiBue,CAAjB;AACD;;AAED,SAAO8oQ,IAAP;AACD;;AAED,SAASI,aAAT,CAAuBhmQ,IAAvB,EAA6Bk8L,GAA7B,EAAkCn2L,IAAlC,EAAwC;AACtC;AACA,QAAMmlP,MAAM,GAAGlrP,IAAI,CAACkrP,MAApB;AACA,SAAOhvD,GAAG,CAAC6uD,QAAJ,CAAaG,MAAb,KAAyBhvD,GAAG,CAACpW,UAAJ,CAAeolE,MAAf,KAA0BnlP,IAAI,CAAC/F,IAAD,EAAOk8L,GAAP,CAA9D;AACD;;;;;;;;;AC5ED;;AACA;;AACA;;;;AAEA,IAAI+pE,UAAU,GAAG,IAAIrb,eAAJ,EAAjB;;AAEe,kBAASN,IAAT,EAAe;AAC5B,MAAIhqO,IAAI,GAAGgqO,IAAI,CAAChqO,IAAhB;;AAEA,MAAI,0BAAWA,IAAX,CAAJ,EAAsB;AACpBA,IAAAA,IAAI,CAAC,2BAAa2lP,UAAU,CAACp2E,KAAX,EAAb,CAAD,CAAJ;AACD,GAFD,MAEO,IAAIvvK,IAAJ,EAAU;AACf2lP,IAAAA,UAAU,CAAClrR,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqBuvQ,IAAI,CAACvmJ,KAAL,CAAWzjH,KAAhC,EAAuCgqQ,IAAI,CAACvmJ,KAAL,CAAW11F,MAAlD;AACD,GAFM,MAEA;;AAEPi8O,EAAAA,IAAI,CAACY,MAAL,CAAYrzB,SAAZ,CAAsBouC,UAAtB;AACD;;;;;;;;;;AChBD;;AACA;;;;AAEA,IAAIE,SAAS,GAAG,IAAhB;;AAEO,SAASC,UAAT,CAAoB9mR,CAApB,EAAuB6G,CAAvB,EAA0B9J,GAA1B,EAA+B;AACpC,SAAQiD,CAAC,KAAK6G,CAAP,GAAY,IAAZ,GACF9J,GAAG,KAAK,MAAT,GAAmBgqR,SAAS,CAAC/mR,CAAD,EAAI6G,CAAJ,CAA5B,GACC7G,CAAC,YAAY4uE,IAAb,IAAqB/nE,CAAC,YAAY+nE,IAAnC,GAA2C,CAAC5uE,CAAD,KAAO,CAAC6G,CAAnD,GACC,wBAAS7G,CAAT,KAAe,wBAAS6G,CAAT,CAAhB,GAA+BhI,IAAI,CAACiT,GAAL,CAAS9R,CAAC,GAAG6G,CAAb,KAAmBggR,SAAlD,GACC,CAAC7mR,CAAD,IAAM,CAAC6G,CAAP,IAAY,CAAC,wBAAS7G,CAAT,CAAD,IAAgB,CAAC,wBAAS6G,CAAT,CAA9B,GAA6C7G,CAAC,IAAI6G,CAAlD,GACC7G,CAAC,IAAI,IAAL,IAAa6G,CAAC,IAAI,IAAnB,GAA2B,KAA3B,GACAmgR,WAAW,CAAChnR,CAAD,EAAI6G,CAAJ,CANf;AAOD;;AAEM,SAASkgR,SAAT,CAAmB/mR,CAAnB,EAAsB6G,CAAtB,EAAyB;AAC9B,SAAOigR,UAAU,CAAC,oBAAU9mR,CAAV,CAAD,EAAe,oBAAU6G,CAAV,CAAf,CAAjB;AACD;;AAED,SAASmgR,WAAT,CAAqBhnR,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,MAAIs3O,EAAE,GAAGtiP,MAAM,CAACof,IAAP,CAAYjb,CAAZ,CAAT;AAAA,MACIinR,EAAE,GAAGprR,MAAM,CAACof,IAAP,CAAYpU,CAAZ,CADT;AAAA,MAEI9J,GAFJ;AAAA,MAESjE,CAFT;AAIA,MAAIqlP,EAAE,CAAC/lP,MAAH,KAAc6uR,EAAE,CAAC7uR,MAArB,EAA6B,OAAO,KAAP;AAE7B+lP,EAAAA,EAAE,CAACr7O,IAAH;AACAmkR,EAAAA,EAAE,CAACnkR,IAAH;;AAEA,OAAKhK,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnC,QAAIqlP,EAAE,CAACrlP,CAAD,CAAF,IAASmuR,EAAE,CAACnuR,CAAD,CAAf,EAAoB,OAAO,KAAP;AACrB;;AAED,OAAKA,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnCiE,IAAAA,GAAG,GAAGohP,EAAE,CAACrlP,CAAD,CAAR;AACA,QAAI,CAACguR,UAAU,CAAC9mR,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,EAAiBA,GAAjB,CAAf,EAAsC,OAAO,KAAP;AACvC;;AAED,SAAO,OAAOiD,CAAP,KAAa,OAAO6G,CAA3B;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCD;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AASA;;AACA;;AACA;;AAMA;;;;;;;;AAMA;AAGO,SAASqgR,cAAT,GAA0B;AAC/B;AACA;AACD;;;;;;;;;ACnEc,kBAASr2M,KAAT,EAAgBmzK,YAAhB,EAA8BC,YAA9B,EAA4C;AACzD,QAAMl0F,KAAK,GAAGl/E,KAAK,GAAGmzK,YAAR,GAAuBC,YAAY,GAAG,CAApD;AACA,SAAOpzK,KAAK,GAAIk/E,KAAK,GAAG,CAAR,GAAYA,KAAZ,GAAoB,CAAxB,GAA6B,CAAzC;AACD;;;;;;;;ACHM,MAAM9wH,QAAQ,GAAG,UAAjB;;AAEA,MAAMwrH,MAAM,GAAG,QAAf;;AACA,MAAMmvG,GAAG,GAAG,KAAZ;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,MAAM,GAAG,QAAf;;AAEA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMhvC,GAAG,GAAG,KAAZ;;AAEA,MAAMjiE,UAAU,GAAG,YAAnB;;AACA,MAAMkxG,SAAS,GAAG,WAAlB;;AAEA,MAAMlnB,QAAQ,GAAG,UAAjB;;AACA,MAAMmnB,QAAQ,GAAG,UAAjB;;AACA,MAAMC,SAAS,GAAG,WAAlB;;AAEA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,UAAU,GAAG,aAAnB,EAEP;;;AACO,MAAMC,UAAU,GAAG,YAAnB;;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AACA,MAAMC,YAAY,GAAG,cAArB;;AACA,MAAMC,aAAa,GAAG,eAAtB;;AACA,MAAMC,QAAQ,GAAG,UAAjB;;;;;;;;;;AE5BQ,kBAASjsP,KAAT,EAAgB;AAC7B,SAAO,UAAS8Q,CAAT,EAAY;AACjB,QAAI+vL,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIjjB,CAFJ;;AAIA,QAAIizM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,WAAO,CACLmS,KAAK,CAAC6nP,MAAN,CAAahnD,EAAb,CADK,EAEL7gM,KAAK,CAAC6nP,MAAN,CAAa/mD,EAAb,CAFK,CAAP;AAID,GAfD;AAgBD;;;;;;;;;ACjBc,kBAAS9gM,KAAT,EAAgB;AAC7B,SAAO,UAAS8Q,CAAT,EAAY;AACjB,QAAI6a,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,QACIk1K,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CAFV;AAAA,QAGIzgB,GAAG,GAAG,CAAC,CAHX;AAAA,QAGcE,GAHd;AAAA,QAGmB1C,CAHnB;AAAA,QAGsB1D,CAHtB;AAAA,QAGyBkO,CAHzB;;AAKA,QAAIyoM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,SAAK1D,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACszB,KAAK,CAACliC,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC,UAAIwhC,KAAK,CAACxhC,CAAD,CAAL,IAAY02M,EAAZ,IAAkBl1K,KAAK,CAACxhC,CAAD,CAAL,IAAY22M,EAAlC,EAAsC;AACpC,YAAIzwM,GAAG,GAAG,CAAV,EAAaA,GAAG,GAAGlG,CAAN;AACboG,QAAAA,GAAG,GAAGpG,CAAN;AACD;AACF;;AAED,QAAIkG,GAAG,GAAG,CAAV,EAAa,OAAOgvH,SAAP;AAEbwhF,IAAAA,EAAE,GAAG7gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACt7B,GAAD,CAAxB,CAAL;AACAywM,IAAAA,EAAE,GAAG9gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACp7B,GAAD,CAAxB,CAAL;AAEA,WAAO,CACLswM,EAAE,CAAC,CAAD,CAAF,KAAUxhF,SAAV,GAAsBwhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAD3B,EAELC,EAAE,CAAC,CAAD,CAAF,KAAUzhF,SAAV,GAAsByhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAF3B,CAAP;AAID,GA5BD;AA6BD;;;;;;;;;;AC9BD;;AACA;;AACA;;;;AAEO,SAASg9B,IAAT,GAAgB;AACrB,MAAI99N,KAAK,GAAG,6BAAUglJ,OAAV,CAAkB3lC,SAAlB,CAAZ;AAAA,MACIkgF,MAAM,GAAGv/L,KAAK,CAACu/L,MADnB;AAAA,MAEI61C,YAAY,GAAGp1O,KAAK,CAAC2rB,KAFzB;AAAA,MAGIA,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CAHZ;AAAA,MAII9mB,IAJJ;AAAA,MAKI4vN,SALJ;AAAA,MAMIj+N,KAAK,GAAG,KANZ;AAAA,MAOI6+O,YAAY,GAAG,CAPnB;AAAA,MAQIC,YAAY,GAAG,CARnB;AAAA,MASI5yC,KAAK,GAAG,GATZ;AAWA,SAAO1iM,KAAK,CAACglJ,OAAb;;AAEA,WAASuwF,OAAT,GAAmB;AACjB,QAAIl9O,CAAC,GAAGknM,MAAM,GAAG91M,MAAjB;AAAA,QACImV,OAAO,GAAG+sB,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAD9B;AAAA,QAEI11B,KAAK,GAAG01B,KAAK,CAAC/sB,OAAO,GAAG,CAAX,CAFjB;AAAA,QAGI8sB,IAAI,GAAGC,KAAK,CAAC,IAAI/sB,OAAL,CAHhB;AAAA,QAIIwiJ,KAAK,GAAG,wBAAU/oJ,CAAV,EAAag9O,YAAb,EAA2BC,YAA3B,CAJZ;AAMAzwO,IAAAA,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,KAAkBmrJ,KAAK,IAAI,CAA3B,CAAP;;AACA,QAAI5qJ,KAAJ,EAAW;AACTqO,MAAAA,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACD;;AACD5O,IAAAA,KAAK,IAAI,CAACy1B,IAAI,GAAGz1B,KAAP,GAAe4O,IAAI,IAAIxM,CAAC,GAAGg9O,YAAR,CAApB,IAA6C3yC,KAAtD;AACA+xB,IAAAA,SAAS,GAAG5vN,IAAI,IAAI,IAAIwwO,YAAR,CAAhB;;AACA,QAAI7+O,KAAJ,EAAW;AACTP,MAAAA,KAAK,GAAG/F,IAAI,CAACsG,KAAL,CAAWP,KAAX,CAAR;AACAw+N,MAAAA,SAAS,GAAGvkO,IAAI,CAACsG,KAAL,CAAWi+N,SAAX,CAAZ;AACD;;AACD,UAAMlgO,MAAM,GAAG,oBAAS8D,CAAT,EAAYzE,GAAZ,CAAgB,UAASzJ,CAAT,EAAY;AAAE,aAAO8L,KAAK,GAAG4O,IAAI,GAAG1a,CAAtB;AAA0B,KAAxD,CAAf;AACA,WAAOirP,YAAY,CAACx2O,OAAO,GAAGrK,MAAM,CAACqK,OAAP,EAAH,GAAsBrK,MAA9B,CAAnB;AACD;;AAEDyL,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,CAACzuL,CAAD,CAAN;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOh2C,MAAM,EAAb;AACD;AACF,GAPD;;AASAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBkiC,MAAAA,KAAK,GAAG,CAAC,CAAC7a,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAR;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO5pN,KAAK,CAACn4B,KAAN,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAS1kO,CAAT,EAAY;AAC7B6a,IAAAA,KAAK,GAAG,CAAC,CAAC7a,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAR;AACAta,IAAAA,KAAK,GAAG,IAAR;AACA,WAAO++O,OAAO,EAAd;AACD,GAJD;;AAMAv1O,EAAAA,KAAK,CAACy0N,SAAN,GAAkB,YAAW;AAC3B,WAAOA,SAAP;AACD,GAFD;;AAIAz0N,EAAAA,KAAK,CAAC6E,IAAN,GAAa,YAAW;AACtB,WAAOA,IAAP;AACD,GAFD;;AAIA7E,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAASsa,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB+M,MAAAA,KAAK,GAAG,CAAC,CAACsa,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO/+O,KAAP;AACD;AACF,GAPD;;AASAwJ,EAAAA,KAAK,CAAC4G,OAAN,GAAgB,UAASkK,CAAT,EAAY;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACAukO,MAAAA,YAAY,GAAGC,YAAf;AACA,aAAOC,OAAO,EAAd;AACD,KAJD,MAIO;AACL,aAAOF,YAAP;AACD;AACF,GARD;;AAUAr1O,EAAAA,KAAK,CAACq1O,YAAN,GAAqB,UAASvkO,CAAT,EAAY;AAC/B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4rP,MAAAA,YAAY,GAAGnlP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOF,YAAP;AACD;AACF,GAPD;;AASAr1O,EAAAA,KAAK,CAACs1O,YAAN,GAAqB,UAASxkO,CAAT,EAAY;AAC/B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOD,YAAP;AACD;AACF,GAPD;;AASAt1O,EAAAA,KAAK,CAAC0iM,KAAN,GAAc,UAAS5xL,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBi5M,MAAAA,KAAK,GAAGxyM,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAR;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO7yC,KAAP;AACD;AACF,GAPD;;AASA1iM,EAAAA,KAAK,CAACksP,WAAN,GAAoB,UAASp7O,CAAT,EAAY;AAC9B;AACA,QAAIA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAA5B,EAAkC;AAElC,QAAI+vL,EAAE,GAAG,CAAC/vL,CAAC,CAAC,CAAD,CAAX;AAAA,QACIgwL,EAAE,GAAG,CAAChwL,CAAC,CAAC,CAAD,CADX;AAAA,QAEIlS,OAAO,GAAG+sB,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAF9B;AAAA,QAGIp3B,MAAM,GAAGqK,OAAO,GAAGw2O,YAAY,GAAGx2O,OAAf,EAAH,GAA8Bw2O,YAAY,EAH9D;AAAA,QAII/8O,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAJxB;AAAA,QAI2B4H,CAJ3B;AAAA,QAI8B6G,CAJ9B;AAAA,QAIiCrK,CAJjC,CAJ8B,CAU9B;;AACA,QAAIgzM,EAAE,KAAKA,EAAP,IAAaC,EAAE,KAAKA,EAAxB,EAA4B,OAXE,CAa9B;;AACA,QAAIA,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AACD,QAAIizM,EAAE,GAAGvsM,MAAM,CAAC,CAAD,CAAX,IAAkBssM,EAAE,GAAGl1K,KAAK,CAAC,IAAE/sB,OAAH,CAAhC,EAA6C,OAnBf,CAqB9B;;AACAvN,IAAAA,CAAC,GAAGnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,0BAAYgE,MAAZ,EAAoBssM,EAApB,IAA0B,CAAtC,CAAJ;AACA3oM,IAAAA,CAAC,GAAG2oM,EAAE,KAAGC,EAAL,GAAUzvM,CAAV,GAAc,0BAAYkD,MAAZ,EAAoBusM,EAApB,IAA0B,CAA5C,CAvB8B,CAyB9B;;AACA,QAAID,EAAE,GAAGtsM,MAAM,CAAClD,CAAD,CAAX,GAAiBojO,SAAS,GAAG,KAAjC,EAAwC,EAAEpjO,CAAF;;AAExC,QAAIuN,OAAJ,EAAa;AACX;AACA/Q,MAAAA,CAAC,GAAGwD,CAAJ;AACAA,MAAAA,CAAC,GAAGgH,CAAC,GAAGH,CAAR;AACAA,MAAAA,CAAC,GAAGG,CAAC,GAAGxK,CAAR;AACD;;AACD,WAAQwD,CAAC,GAAG6G,CAAL,GAAUmnH,SAAV,GAAsBkgF,MAAM,GAAG/rM,KAAT,CAAenC,CAAf,EAAkB6G,CAAC,GAAC,CAApB,CAA7B;AACD,GAnCD;;AAqCA8H,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAAS/2O,CAAT,EAAY;AACzB,UAAM3jB,KAAK,GAAG6S,KAAK,CAACksP,WAAN,CAAkB,CAACp7O,CAAD,EAAIA,CAAJ,CAAlB,CAAd;AACA,WAAO3jB,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcA,KAA1B;AACD,GAHD;;AAKA6S,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAO6+J,IAAI,GACNv+B,MADE,CACKA,MAAM,EADX,EAEF5zK,KAFE,CAEIA,KAFJ,EAGFn1B,KAHE,CAGIA,KAHJ,EAIF6+O,YAJE,CAIWA,YAJX,EAKFC,YALE,CAKWA,YALX,EAMF5yC,KANE,CAMIA,KANJ,CAAP;AAOD,GARD;;AAUA,SAAO6yC,OAAO,EAAd;AACD;;AAED,SAASE,QAAT,CAAkBz1O,KAAlB,EAAyB;AACvB,QAAMi/D,IAAI,GAAGj/D,KAAK,CAACi/D,IAAnB;AAEAj/D,EAAAA,KAAK,CAAC4G,OAAN,GAAgB5G,KAAK,CAACs1O,YAAtB;AACA,SAAOt1O,KAAK,CAACq1O,YAAb;;AAEAr1O,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOw2K,QAAQ,CAACx2K,IAAI,EAAL,CAAf;AACD,GAFD;;AAIA,SAAOj/D,KAAP;AACD;;AAEM,SAAS0rM,KAAT,GAAiB;AACtB,SAAO+pC,QAAQ,CAAC3X,IAAI,GAAGuX,YAAP,CAAoB,CAApB,CAAD,CAAf;AACD;;;;;;;;;AC3LD;;AAEA,IAAIzhP,GAAG,GAAG3J,KAAK,CAACM,SAAN,CAAgBqJ,GAA1B;;AAEO,SAAS+6M,OAAT,CAAiB79L,CAAjB,EAAoB;AACzB,SAAOld,GAAG,CAAC3K,IAAJ,CAAS6nB,CAAT,EAAY+uL,kBAAZ,CAAP;AACD;;;;;;;;ACNM,MAAMrsM,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA9B;;;;;;;;;;ACAP;;AACA;;AACA;;AACA;;AACA;;AAEO,SAAS64P,eAAT,GAA2B;AAChC,MAAI9sD,MAAM,GAAG,EAAb;AAAA,MACI5zK,KAAK,GAAG,EADZ;;AAGA,WAAS3rB,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAnB,GACH+uH,SADG,GAEH1zF,KAAK,CAAC,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,IAAoB,CAArB,IAA0Bq7B,KAAK,CAACliC,MAAjC,CAFT;AAGD;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAASzuL,CAAT,EAAY;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,GAAG,sBAAQzuL,CAAR,CAAT;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAOu/L,MAAM,CAAC/rM,KAAP,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAS7a,CAAT,EAAY;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBkiC,MAAAA,KAAK,GAAGn4B,aAAMvK,IAAN,CAAW6nB,CAAX,CAAR;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAO2rB,KAAK,CAACn4B,KAAN,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAS/lL,KAAT,EAAgBsxI,SAAhB,EAA2B;AAC5C,WAAO,yBAAWjU,MAAM,CAAC,CAAD,CAAjB,EAAsB,oBAAKA,MAAL,CAAtB,EAAoCr9H,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAAzD,EAAgEsxI,SAAhE,CAAP;AACD,GAFD;;AAIAxzM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAW;AACtB,WAAOotL,eAAe,GAAG9sD,MAAlB,CAAyBv/L,KAAK,CAACu/L,MAAN,EAAzB,EAAyC5zK,KAAzC,CAA+C3rB,KAAK,CAAC2rB,KAAN,EAA/C,CAAP;AACD,GAFD;;AAIA,SAAO3rB,KAAP;AACD;;;;;;;;;;;;;;;;;AC3CD;;AACA;;AACA;;AAEA;;AAaA;;AAKA;;AAIA;;;;;;;;AAEA;AACA,MAAMssP,MAAM,GAAG,EAAf;AAEA;AACA;AACA;;AACA,SAASvqE,MAAT,CAAgB33K,IAAhB,EAAsBrU,WAAtB,EAAmCk3G,QAAnC,EAA6C;AAC3C,QAAMsuH,GAAG,GAAG,SAASv7N,KAAT,GAAiB;AAC3B,UAAMrS,CAAC,GAAGoI,WAAW,EAArB;;AAEA,QAAI,CAACpI,CAAC,CAACu+P,WAAP,EAAoB;AAClBv+P,MAAAA,CAAC,CAACu+P,WAAF,GAAgBv+P,CAAC,CAACk6P,MAAF,GAAW,0BAAYl6P,CAAZ,CAAX,GACZA,CAAC,CAAC67P,YAAF,GAAiB,gCAAkB77P,CAAlB,CAAjB,GACA0xH,SAFJ;AAGD;;AAED1xH,IAAAA,CAAC,CAACyc,IAAF,GAASA,IAAT;AACA,WAAOzc,CAAP;AACD,GAXD;;AAaA4tO,EAAAA,GAAG,CAACtuH,QAAJ,GAAe,qBAAM,qBAAMA,QAAN,CAAN,CAAf;AAEA,SAAOsuH,GAAP;AACD;;AAEM,SAASv7N,KAAT,CAAeoK,IAAf,EAAqBpK,KAArB,EAA4BitG,QAA5B,EAAsC;AAC3C,MAAI/iH,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6iQ,IAAAA,MAAM,CAACliP,IAAD,CAAN,GAAe23K,MAAM,CAAC33K,IAAD,EAAOpK,KAAP,EAAcitG,QAAd,CAArB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOs/I,gBAAgB,CAACniP,IAAD,CAAhB,GAAyBkiP,MAAM,CAACliP,IAAD,CAA/B,GAAwCi1G,SAA/C;AACD;AACF,EAED;;;AACAr/G,KAAK,CAACswB,eAAD,EAAWqyK,CAAC,CAAC6pD,aAAb,CAAL,EAEA;;AACAxsP,KAAK,CAAC87I,aAAD,EAAS6mD,CAAC,CAAC8pD,WAAX,EAAwBjK,iBAAxB,CAAL;AACAxiP,KAAK,CAACirP,UAAD,EAAMtoD,CAAC,CAAC+pD,QAAR,EAAkB,CAAClK,iBAAD,EAAIyI,UAAJ,CAAlB,CAAL;AACAjrP,KAAK,CAACkrP,UAAD,EAAMvoD,CAAC,CAACgqD,QAAR,EAAkBnK,iBAAlB,CAAL;AACAxiP,KAAK,CAACmrP,WAAD,EAAOxoD,CAAC,CAACiqD,SAAT,EAAoBpK,iBAApB,CAAL;AACAxiP,KAAK,CAACorP,aAAD,EAASzoD,CAAC,CAACkqD,WAAX,EAAwBrK,iBAAxB,CAAL;AACAxiP,KAAK,CAACqrP,WAAD,EAAO1oD,CAAC,CAACmqD,SAAT,EAAoB,CAACtK,iBAAD,EAAIi7D,eAAJ,CAApB,CAAL;AACAz9S,KAAK,CAACq8M,UAAD,EAAM1Z,CAAC,CAACoqD,QAAR,EAAkB,CAACvK,iBAAD,EAAIi7D,eAAJ,CAAlB,CAAL,EAEA;;AACAz9S,KAAK,CAACo6I,iBAAD,EAAauoD,CAAC,CAACqqD,eAAf,EAAgC,CAACxK,iBAAD,EAAIn6C,oBAAJ,CAAhC,CAAL,EAA8C;;AAC9CroM,KAAK,CAAE,GAAEo6I,iBAAW,IAAG0B,aAAO,EAAzB,EAA4B6mD,CAAC,CAACqqD,eAA9B,EAA+C,CAACxK,iBAAD,EAAIn6C,oBAAJ,CAA/C,CAAL;AACAroM,KAAK,CAAE,GAAEo6I,iBAAW,IAAG6wG,UAAI,EAAtB,EAAyBtoD,CAAC,CAACsqD,kBAA3B,EAA+C,CAACzK,iBAAD,EAAIn6C,oBAAJ,EAAO4iD,UAAP,CAA/C,CAAL;AACAjrP,KAAK,CAAE,GAAEo6I,iBAAW,IAAG8wG,UAAI,EAAtB,EAAyBvoD,CAAC,CAACuqD,kBAA3B,EAA+C,CAAC1K,iBAAD,EAAIn6C,oBAAJ,CAA/C,CAAL;AACAroM,KAAK,CAAE,GAAEo6I,iBAAW,IAAG+wG,WAAK,EAAvB,EAA0BxoD,CAAC,CAACwqD,mBAA5B,EAAiD,CAAC3K,iBAAD,EAAIn6C,oBAAJ,CAAjD,CAAL;AACAroM,KAAK,CAAE,GAAEo6I,iBAAW,IAAGgxG,aAAO,EAAzB,EAA4BzoD,CAAC,CAACyqD,qBAA9B,EAAqD,CAAC5K,iBAAD,EAAIn6C,oBAAJ,CAArD,CAAL,EAEA;;AACAroM,KAAK,CAAE,GAAEsrP,gBAAU,IAAGxvG,aAAO,EAAxB,EAA2B6mD,CAAC,CAAC0qD,cAA7B,EAA6C,CAAC7K,iBAAD,EAAIn6C,oBAAJ,CAA7C,CAAL;AACAroM,KAAK,CAAE,GAAEsrP,gBAAU,IAAGL,UAAI,EAArB,EAAwBtoD,CAAC,CAAC2qD,iBAA1B,EAA6C,CAAC9K,iBAAD,EAAIn6C,oBAAJ,EAAO4iD,UAAP,CAA7C,CAAL;AACAjrP,KAAK,CAAE,GAAEsrP,gBAAU,IAAGJ,UAAI,EAArB,EAAwBvoD,CAAC,CAAC4qD,iBAA1B,EAA6C,CAAC/K,iBAAD,EAAIn6C,oBAAJ,CAA7C,CAAL;AACAroM,KAAK,CAAE,GAAEsrP,gBAAU,IAAGH,WAAK,EAAtB,EAAyBxoD,CAAC,CAAC6qD,kBAA3B,EAA+C,CAAChL,iBAAD,EAAIn6C,oBAAJ,CAA/C,CAAL;AACAroM,KAAK,CAAE,GAAEsrP,gBAAU,IAAGF,aAAO,EAAxB,EAA2BzoD,CAAC,CAAC8qD,oBAA7B,EAAmD,CAACjL,iBAAD,EAAIn6C,oBAAJ,CAAnD,CAAL,EAEA;;AACAroM,KAAK,CAACokO,eAAD,EAAWzhC,CAAC,CAAC+qD,aAAb,EAA4B,CAAC5nC,mBAAD,EAAIse,eAAJ,CAA5B,CAAL;AACApkO,KAAK,CAACurP,eAAD,EAAW5oD,CAAC,CAACgrD,aAAb,EAA4B7nC,mBAA5B,CAAL;AACA9lN,KAAK,CAACwrP,gBAAD,EAAY7oD,CAAC,CAACirD,cAAd,EAA8B9nC,mBAA9B,CAAL,EAEA;;AACA9lN,KAAK,CAAC4rP,iBAAD,EAAaS,gCAAb,EAA8B,CAAC1hB,eAAD,EAAI7kB,mBAAJ,CAA9B,CAAL;AACA9lN,KAAK,CAACyrP,cAAD,EAAU9oD,CAAC,CAACkrD,YAAZ,EAA0BljB,eAA1B,CAAL;AACA3qO,KAAK,CAAC2rP,WAAD,EAAO0rE,eAAP,EAAkB1sF,eAAlB,CAAL;AACA3qO,KAAK,CAAC0rP,YAAD,EAAQ4rE,gBAAR,EAAoB3sF,eAApB,CAAL;;AAEO,SAAS4hB,gBAAT,CAA0BniP,IAA1B,EAAgC;AACrC,SAAO,8BAAekiP,MAAf,EAAuBliP,IAAvB,CAAP;AACD;;AAED,SAAS0jP,OAAT,CAAiB1/P,GAAjB,EAAsBgc,IAAtB,EAA4B;AAC1B,QAAMzc,CAAC,GAAG2+P,MAAM,CAACl+P,GAAD,CAAhB;AACA,SAAOT,CAAC,IAAIA,CAAC,CAACs/G,QAAF,CAAW7iG,IAAX,CAAZ;AACD;;AAEM,SAAS2jP,YAAT,CAAsB3/P,GAAtB,EAA2B;AAChC,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMo0P,iBAAN,CAAd;AACD;;AAEM,SAASwL,UAAT,CAAoB5/P,GAApB,EAAyB;AAC9B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMu8O,eAAN,CAAd;AACD;;AAEM,SAASsjB,cAAT,CAAwB7/P,GAAxB,EAA6B;AAClC,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM03N,mBAAN,CAAd;AACD;;AAEM,SAASooC,aAAT,CAAuB9/P,GAAvB,EAA4B;AACjC,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM68P,UAAN,CAAd;AACD;;AAEM,SAASkD,UAAT,CAAoB//P,GAApB,EAAyB;AAC9B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMqvT,eAAN,CAAd;AACD;;AAEM,SAASrvD,eAAT,CAAyBhgQ,GAAzB,EAA8B;AACnC,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMi6M,oBAAN,CAAd;AACD;;AAEM,SAASgmD,UAAT,CAAoBjgQ,GAApB,EAAyB;AAC9B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMg2O,eAAN,CAAd;AACD;;;;;;;;;;;;;;;;;AEvID;;;;;;AAEO,SAASsR,KAAT,GAAiB,CAAE;;AAEnB,IAAIC,MAAM,GAAG,GAAb;;AACA,IAAIC,QAAQ,GAAG,IAAID,MAAnB;;AAEP,IAAIE,GAAG,GAAG,qBAAV;AAAA,IACIC,GAAG,GAAG,+CADV;AAAA,IAEIC,GAAG,GAAG,gDAFV;AAAA,IAGIC,KAAK,GAAG,oBAHZ;AAAA,IAIIC,YAAY,GAAG,IAAInxH,MAAJ,CAAW,YAAY,CAAC+wH,GAAD,EAAMA,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CAJnB;AAAA,IAKIK,YAAY,GAAG,IAAIpxH,MAAJ,CAAW,YAAY,CAACixH,GAAD,EAAMA,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CALnB;AAAA,IAMII,aAAa,GAAG,IAAIrxH,MAAJ,CAAW,aAAa,CAAC+wH,GAAD,EAAMA,GAAN,EAAWA,GAAX,EAAgBC,GAAhB,CAAb,GAAoC,MAA/C,CANpB;AAAA,IAOIM,aAAa,GAAG,IAAItxH,MAAJ,CAAW,aAAa,CAACixH,GAAD,EAAMA,GAAN,EAAWA,GAAX,EAAgBD,GAAhB,CAAb,GAAoC,MAA/C,CAPpB;AAAA,IAQIO,YAAY,GAAG,IAAIvxH,MAAJ,CAAW,YAAY,CAACgxH,GAAD,EAAMC,GAAN,EAAWA,GAAX,CAAZ,GAA8B,MAAzC,CARnB;AAAA,IASIO,aAAa,GAAG,IAAIxxH,MAAJ,CAAW,aAAa,CAACgxH,GAAD,EAAMC,GAAN,EAAWA,GAAX,EAAgBD,GAAhB,CAAb,GAAoC,MAA/C,CATpB;AAWA,IAAIS,KAAK,GAAG;AACVC,EAAAA,SAAS,EAAE,QADD;AAEVC,EAAAA,YAAY,EAAE,QAFJ;AAGVC,EAAAA,IAAI,EAAE,QAHI;AAIVC,EAAAA,UAAU,EAAE,QAJF;AAKVC,EAAAA,KAAK,EAAE,QALG;AAMVC,EAAAA,KAAK,EAAE,QANG;AAOVC,EAAAA,MAAM,EAAE,QAPE;AAQVC,EAAAA,KAAK,EAAE,QARG;AASVC,EAAAA,cAAc,EAAE,QATN;AAUVC,EAAAA,IAAI,EAAE,QAVI;AAWVC,EAAAA,UAAU,EAAE,QAXF;AAYVC,EAAAA,KAAK,EAAE,QAZG;AAaVC,EAAAA,SAAS,EAAE,QAbD;AAcVC,EAAAA,SAAS,EAAE,QAdD;AAeVC,EAAAA,UAAU,EAAE,QAfF;AAgBVC,EAAAA,SAAS,EAAE,QAhBD;AAiBVC,EAAAA,KAAK,EAAE,QAjBG;AAkBVC,EAAAA,cAAc,EAAE,QAlBN;AAmBVC,EAAAA,QAAQ,EAAE,QAnBA;AAoBVC,EAAAA,OAAO,EAAE,QApBC;AAqBVC,EAAAA,IAAI,EAAE,QArBI;AAsBVC,EAAAA,QAAQ,EAAE,QAtBA;AAuBVC,EAAAA,QAAQ,EAAE,QAvBA;AAwBVC,EAAAA,aAAa,EAAE,QAxBL;AAyBVC,EAAAA,QAAQ,EAAE,QAzBA;AA0BVC,EAAAA,SAAS,EAAE,QA1BD;AA2BVC,EAAAA,QAAQ,EAAE,QA3BA;AA4BVC,EAAAA,SAAS,EAAE,QA5BD;AA6BVC,EAAAA,WAAW,EAAE,QA7BH;AA8BVC,EAAAA,cAAc,EAAE,QA9BN;AA+BVC,EAAAA,UAAU,EAAE,QA/BF;AAgCVC,EAAAA,UAAU,EAAE,QAhCF;AAiCVC,EAAAA,OAAO,EAAE,QAjCC;AAkCVC,EAAAA,UAAU,EAAE,QAlCF;AAmCVC,EAAAA,YAAY,EAAE,QAnCJ;AAoCVC,EAAAA,aAAa,EAAE,QApCL;AAqCVC,EAAAA,aAAa,EAAE,QArCL;AAsCVC,EAAAA,aAAa,EAAE,QAtCL;AAuCVC,EAAAA,aAAa,EAAE,QAvCL;AAwCVC,EAAAA,UAAU,EAAE,QAxCF;AAyCVC,EAAAA,QAAQ,EAAE,QAzCA;AA0CVC,EAAAA,WAAW,EAAE,QA1CH;AA2CVC,EAAAA,OAAO,EAAE,QA3CC;AA4CVC,EAAAA,OAAO,EAAE,QA5CC;AA6CVC,EAAAA,UAAU,EAAE,QA7CF;AA8CVC,EAAAA,SAAS,EAAE,QA9CD;AA+CVC,EAAAA,WAAW,EAAE,QA/CH;AAgDVC,EAAAA,WAAW,EAAE,QAhDH;AAiDVC,EAAAA,OAAO,EAAE,QAjDC;AAkDVC,EAAAA,SAAS,EAAE,QAlDD;AAmDVC,EAAAA,UAAU,EAAE,QAnDF;AAoDVC,EAAAA,IAAI,EAAE,QApDI;AAqDVC,EAAAA,SAAS,EAAE,QArDD;AAsDVC,EAAAA,IAAI,EAAE,QAtDI;AAuDVC,EAAAA,KAAK,EAAE,QAvDG;AAwDVC,EAAAA,WAAW,EAAE,QAxDH;AAyDVC,EAAAA,IAAI,EAAE,QAzDI;AA0DVC,EAAAA,QAAQ,EAAE,QA1DA;AA2DVC,EAAAA,OAAO,EAAE,QA3DC;AA4DVC,EAAAA,SAAS,EAAE,QA5DD;AA6DVC,EAAAA,MAAM,EAAE,QA7DE;AA8DVC,EAAAA,KAAK,EAAE,QA9DG;AA+DVC,EAAAA,KAAK,EAAE,QA/DG;AAgEVC,EAAAA,QAAQ,EAAE,QAhEA;AAiEVC,EAAAA,aAAa,EAAE,QAjEL;AAkEVC,EAAAA,SAAS,EAAE,QAlED;AAmEVC,EAAAA,YAAY,EAAE,QAnEJ;AAoEVC,EAAAA,SAAS,EAAE,QApED;AAqEVC,EAAAA,UAAU,EAAE,QArEF;AAsEVC,EAAAA,SAAS,EAAE,QAtED;AAuEVC,EAAAA,oBAAoB,EAAE,QAvEZ;AAwEVC,EAAAA,SAAS,EAAE,QAxED;AAyEVC,EAAAA,UAAU,EAAE,QAzEF;AA0EVC,EAAAA,SAAS,EAAE,QA1ED;AA2EVC,EAAAA,SAAS,EAAE,QA3ED;AA4EVC,EAAAA,WAAW,EAAE,QA5EH;AA6EVC,EAAAA,aAAa,EAAE,QA7EL;AA8EVC,EAAAA,YAAY,EAAE,QA9EJ;AA+EVC,EAAAA,cAAc,EAAE,QA/EN;AAgFVC,EAAAA,cAAc,EAAE,QAhFN;AAiFVC,EAAAA,cAAc,EAAE,QAjFN;AAkFVC,EAAAA,WAAW,EAAE,QAlFH;AAmFVC,EAAAA,IAAI,EAAE,QAnFI;AAoFVC,EAAAA,SAAS,EAAE,QApFD;AAqFVC,EAAAA,KAAK,EAAE,QArFG;AAsFVC,EAAAA,OAAO,EAAE,QAtFC;AAuFVC,EAAAA,MAAM,EAAE,QAvFE;AAwFVC,EAAAA,gBAAgB,EAAE,QAxFR;AAyFVC,EAAAA,UAAU,EAAE,QAzFF;AA0FVC,EAAAA,YAAY,EAAE,QA1FJ;AA2FVC,EAAAA,YAAY,EAAE,QA3FJ;AA4FVC,EAAAA,cAAc,EAAE,QA5FN;AA6FVC,EAAAA,eAAe,EAAE,QA7FP;AA8FVC,EAAAA,iBAAiB,EAAE,QA9FT;AA+FVC,EAAAA,eAAe,EAAE,QA/FP;AAgGVC,EAAAA,eAAe,EAAE,QAhGP;AAiGVC,EAAAA,YAAY,EAAE,QAjGJ;AAkGVC,EAAAA,SAAS,EAAE,QAlGD;AAmGVC,EAAAA,SAAS,EAAE,QAnGD;AAoGVC,EAAAA,QAAQ,EAAE,QApGA;AAqGVC,EAAAA,WAAW,EAAE,QArGH;AAsGVC,EAAAA,IAAI,EAAE,QAtGI;AAuGVC,EAAAA,OAAO,EAAE,QAvGC;AAwGVC,EAAAA,KAAK,EAAE,QAxGG;AAyGVC,EAAAA,SAAS,EAAE,QAzGD;AA0GVC,EAAAA,MAAM,EAAE,QA1GE;AA2GVC,EAAAA,SAAS,EAAE,QA3GD;AA4GVC,EAAAA,MAAM,EAAE,QA5GE;AA6GVC,EAAAA,aAAa,EAAE,QA7GL;AA8GVC,EAAAA,SAAS,EAAE,QA9GD;AA+GVC,EAAAA,aAAa,EAAE,QA/GL;AAgHVC,EAAAA,aAAa,EAAE,QAhHL;AAiHVC,EAAAA,UAAU,EAAE,QAjHF;AAkHVC,EAAAA,SAAS,EAAE,QAlHD;AAmHVC,EAAAA,IAAI,EAAE,QAnHI;AAoHVC,EAAAA,IAAI,EAAE,QApHI;AAqHVC,EAAAA,IAAI,EAAE,QArHI;AAsHVC,EAAAA,UAAU,EAAE,QAtHF;AAuHVC,EAAAA,MAAM,EAAE,QAvHE;AAwHVC,EAAAA,aAAa,EAAE,QAxHL;AAyHVC,EAAAA,GAAG,EAAE,QAzHK;AA0HVC,EAAAA,SAAS,EAAE,QA1HD;AA2HVC,EAAAA,SAAS,EAAE,QA3HD;AA4HVC,EAAAA,WAAW,EAAE,QA5HH;AA6HVC,EAAAA,MAAM,EAAE,QA7HE;AA8HVC,EAAAA,UAAU,EAAE,QA9HF;AA+HVC,EAAAA,QAAQ,EAAE,QA/HA;AAgIVC,EAAAA,QAAQ,EAAE,QAhIA;AAiIVC,EAAAA,MAAM,EAAE,QAjIE;AAkIVC,EAAAA,MAAM,EAAE,QAlIE;AAmIVC,EAAAA,OAAO,EAAE,QAnIC;AAoIVC,EAAAA,SAAS,EAAE,QApID;AAqIVC,EAAAA,SAAS,EAAE,QArID;AAsIVC,EAAAA,SAAS,EAAE,QAtID;AAuIVC,EAAAA,IAAI,EAAE,QAvII;AAwIVC,EAAAA,WAAW,EAAE,QAxIH;AAyIVC,EAAAA,SAAS,EAAE,QAzID;AA0IV76O,EAAAA,GAAG,EAAE,QA1IK;AA2IV86O,EAAAA,IAAI,EAAE,QA3II;AA4IVC,EAAAA,OAAO,EAAE,QA5IC;AA6IVC,EAAAA,MAAM,EAAE,QA7IE;AA8IVC,EAAAA,SAAS,EAAE,QA9ID;AA+IVC,EAAAA,MAAM,EAAE,QA/IE;AAgJVC,EAAAA,KAAK,EAAE,QAhJG;AAiJVC,EAAAA,KAAK,EAAE,QAjJG;AAkJVC,EAAAA,UAAU,EAAE,QAlJF;AAmJVC,EAAAA,MAAM,EAAE,QAnJE;AAoJVC,EAAAA,WAAW,EAAE;AApJH,CAAZ;AAuJA,qBAAOhK,KAAP,EAAciK,KAAd,EAAqB;AACnB1gL,EAAAA,IAAI,EAAE,UAASvyB,QAAT,EAAmB;AACvB,WAAOx/C,MAAM,CAACE,MAAP,CAAc,IAAI,KAAK2I,WAAT,EAAd,EAAoC,IAApC,EAA0C22C,QAA1C,CAAP;AACD,GAHkB;AAInBkzM,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAO,KAAKC,GAAL,GAAWD,WAAX,EAAP;AACD,GANkB;AAOnBE,EAAAA,GAAG,EAAEC,eAPc;AAOG;AACtBC,EAAAA,SAAS,EAAED,eARQ;AASnBE,EAAAA,SAAS,EAAEC,eATQ;AAUnBC,EAAAA,SAAS,EAAEC,eAVQ;AAWnBtmP,EAAAA,QAAQ,EAAEsmP;AAXS,CAArB;;AAcA,SAASL,eAAT,GAA2B;AACzB,SAAO,KAAKF,GAAL,GAAWG,SAAX,EAAP;AACD;;AAED,SAASE,eAAT,GAA2B;AACzB,SAAOG,UAAU,CAAC,IAAD,CAAV,CAAiBJ,SAAjB,EAAP;AACD;;AAED,SAASG,eAAT,GAA2B;AACzB,SAAO,KAAKP,GAAL,GAAWM,SAAX,EAAP;AACD;;AAEc,SAASR,KAAT,CAAejzI,MAAf,EAAuB;AACpC,MAAI9qB,CAAJ,EAAO3lF,CAAP;AACAywG,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAG,EAAV,EAActH,IAAd,GAAqB92G,WAArB,EAAT;AACA,SAAO,CAACszF,CAAC,GAAGo0J,KAAK,CAAC13N,IAAN,CAAWouF,MAAX,CAAL,KAA4BzwG,CAAC,GAAG2lF,CAAC,CAAC,CAAD,CAAD,CAAKn4F,MAAT,EAAiBm4F,CAAC,GAAGmjC,QAAQ,CAACnjC,CAAC,CAAC,CAAD,CAAF,EAAO,EAAP,CAA7B,EAAyC3lF,CAAC,KAAK,CAAN,GAAUqkP,IAAI,CAAC1+J,CAAD,CAAd,CAAkB;AAAlB,IACtE3lF,CAAC,KAAK,CAAN,GAAU,IAAIskP,GAAJ,CAAS3+J,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,IAAI,CAAL,GAAS,IAAnC,EAA2CA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,GAAG,IAAhE,EAAwE,CAACA,CAAC,GAAG,GAAL,KAAa,CAAd,GAAoBA,CAAC,GAAG,GAA/F,EAAqG,CAArG,CAAV,CAAkH;AAAlH,IACA3lF,CAAC,KAAK,CAAN,GAAUukP,IAAI,CAAC5+J,CAAC,IAAI,EAAL,GAAU,IAAX,EAAiBA,CAAC,IAAI,EAAL,GAAU,IAA3B,EAAiCA,CAAC,IAAI,CAAL,GAAS,IAA1C,EAAgD,CAACA,CAAC,GAAG,IAAL,IAAa,IAA7D,CAAd,CAAiF;AAAjF,IACA3lF,CAAC,KAAK,CAAN,GAAUukP,IAAI,CAAE5+J,CAAC,IAAI,EAAL,GAAU,GAAX,GAAmBA,CAAC,IAAI,CAAL,GAAS,IAA7B,EAAqCA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,IAAI,CAAL,GAAS,IAA/D,EAAuEA,CAAC,IAAI,CAAL,GAAS,GAAV,GAAkBA,CAAC,GAAG,IAA5F,EAAmG,CAAE,CAACA,CAAC,GAAG,GAAL,KAAa,CAAd,GAAoBA,CAAC,GAAG,GAAzB,IAAiC,IAApI,CAAd,CAAwJ;AAAxJ,IACA,IAJC,CAIK;AAJL,MAKD,CAACA,CAAC,GAAGq0J,YAAY,CAAC33N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC,IAAI6zI,GAAJ,CAAQ3+J,CAAC,CAAC,CAAD,CAAT,EAAcA,CAAC,CAAC,CAAD,CAAf,EAAoBA,CAAC,CAAC,CAAD,CAArB,EAA0B,CAA1B,CAAlC,CAA+D;AAA/D,IACA,CAACA,CAAC,GAAGs0J,YAAY,CAAC53N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC,IAAI6zI,GAAJ,CAAQ3+J,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAArB,EAA0BA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAvC,EAA4CA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAzD,EAA8D,CAA9D,CAAlC,CAAmG;AAAnG,IACA,CAACA,CAAC,GAAGu0J,aAAa,CAAC73N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC8zI,IAAI,CAAC5+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,EAAaA,CAAC,CAAC,CAAD,CAAd,EAAmBA,CAAC,CAAC,CAAD,CAApB,CAAvC,CAAgE;AAAhE,IACA,CAACA,CAAC,GAAGw0J,aAAa,CAAC93N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC8zI,IAAI,CAAC5+J,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAhC,EAAqCA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAP,GAAa,GAAlD,EAAuDA,CAAC,CAAC,CAAD,CAAxD,CAAvC,CAAoG;AAApG,IACA,CAACA,CAAC,GAAGy0J,YAAY,CAAC/3N,IAAb,CAAkBouF,MAAlB,CAAL,IAAkC+zI,IAAI,CAAC7+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAA1B,EAA+B,CAA/B,CAAtC,CAAwE;AAAxE,IACA,CAACA,CAAC,GAAG00J,aAAa,CAACh4N,IAAd,CAAmBouF,MAAnB,CAAL,IAAmC+zI,IAAI,CAAC7+J,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAD,GAAO,GAAd,EAAmBA,CAAC,CAAC,CAAD,CAAD,GAAO,GAA1B,EAA+BA,CAAC,CAAC,CAAD,CAAhC,CAAvC,CAA4E;AAA5E,IACA20J,KAAK,CAACz1H,cAAN,CAAqBpU,MAArB,IAA+B4zI,IAAI,CAAC/J,KAAK,CAAC7pI,MAAD,CAAN,CAAnC,CAAmD;AAAnD,IACAA,MAAM,KAAK,aAAX,GAA2B,IAAI6zI,GAAJ,CAAQ7jL,GAAR,EAAaA,GAAb,EAAkBA,GAAlB,EAAuB,CAAvB,CAA3B,GACA,IAbN;AAcD;;AAED,SAAS4jL,IAAT,CAAcjoP,CAAd,EAAiB;AACf,SAAO,IAAIkoP,GAAJ,CAAQloP,CAAC,IAAI,EAAL,GAAU,IAAlB,EAAwBA,CAAC,IAAI,CAAL,GAAS,IAAjC,EAAuCA,CAAC,GAAG,IAA3C,EAAiD,CAAjD,CAAP;AACD;;AAED,SAASmoP,IAAT,CAAcroP,CAAd,EAAiBygC,CAAjB,EAAoB1gC,CAApB,EAAuB7G,CAAvB,EAA0B;AACxB,MAAIA,CAAC,IAAI,CAAT,EAAY8G,CAAC,GAAGygC,CAAC,GAAG1gC,CAAC,GAAGwkE,GAAZ;AACZ,SAAO,IAAI6jL,GAAJ,CAAQpoP,CAAR,EAAWygC,CAAX,EAAc1gC,CAAd,EAAiB7G,CAAjB,CAAP;AACD;;AAEM,SAASqvP,UAAT,CAAoB5qO,CAApB,EAAuB;AAC5B,MAAI,EAAEA,CAAC,YAAY4/N,KAAf,CAAJ,EAA2B5/N,CAAC,GAAG6pO,KAAK,CAAC7pO,CAAD,CAAT;AAC3B,MAAI,CAACA,CAAL,EAAQ,OAAO,IAAIyqO,GAAJ,EAAP;AACRzqO,EAAAA,CAAC,GAAGA,CAAC,CAAC+pO,GAAF,EAAJ;AACA,SAAO,IAAIU,GAAJ,CAAQzqO,CAAC,CAAC3d,CAAV,EAAa2d,CAAC,CAAC8iB,CAAf,EAAkB9iB,CAAC,CAAC5d,CAApB,EAAuB4d,CAAC,CAAC6qO,OAAzB,CAAP;AACD;;AAEM,SAASd,GAAT,CAAa1nP,CAAb,EAAgBygC,CAAhB,EAAmB1gC,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBi3P,UAAU,CAACvoP,CAAD,CAAnC,GAAyC,IAAIooP,GAAJ,CAAQpoP,CAAR,EAAWygC,CAAX,EAAc1gC,CAAd,EAAiByoP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASJ,GAAT,CAAapoP,CAAb,EAAgBygC,CAAhB,EAAmB1gC,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,OAAKxoP,CAAL,GAAS,CAACA,CAAV;AACA,OAAKygC,CAAL,GAAS,CAACA,CAAV;AACA,OAAK1gC,CAAL,GAAS,CAACA,CAAV;AACA,OAAKyoP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOJ,GAAP,EAAYV,GAAZ,EAAiB,oBAAOnK,KAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,QAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,QAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAI84O,GAAJ,CAAQ,KAAKpoP,CAAL,GAASsP,CAAjB,EAAoB,KAAKmxB,CAAL,GAASnxB,CAA7B,EAAgC,KAAKvP,CAAL,GAASuP,CAAzC,EAA4C,KAAKk5O,OAAjD,CAAP;AACD,GAJ4B;AAK7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,MAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,MAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAI84O,GAAJ,CAAQ,KAAKpoP,CAAL,GAASsP,CAAjB,EAAoB,KAAKmxB,CAAL,GAASnxB,CAA7B,EAAgC,KAAKvP,CAAL,GAASuP,CAAzC,EAA4C,KAAKk5O,OAAjD,CAAP;AACD,GAR4B;AAS7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,WAAO,IAAP;AACD,GAX4B;AAY7BD,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAQ,CAAC,GAAD,IAAQ,KAAKznP,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAA5B,IACC,CAAC,GAAD,IAAQ,KAAKygC,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAD5B,IAEC,CAAC,GAAD,IAAQ,KAAK1gC,CAAb,IAAkB,KAAKA,CAAL,GAAS,KAF5B,IAGC,KAAK,KAAKyoP,OAAV,IAAqB,KAAKA,OAAL,IAAgB,CAH7C;AAID,GAjB4B;AAkB7Bb,EAAAA,GAAG,EAAEc,aAlBwB;AAkBT;AACpBZ,EAAAA,SAAS,EAAEY,aAnBkB;AAoB7BT,EAAAA,SAAS,EAAEU,aApBkB;AAqB7B/mP,EAAAA,QAAQ,EAAE+mP;AArBmB,CAAd,CAAjB;;AAwBA,SAASD,aAAT,GAAyB;AACvB,SAAO,MAAMd,GAAG,CAAC,KAAK3nP,CAAN,CAAT,GAAoB2nP,GAAG,CAAC,KAAKlnN,CAAN,CAAvB,GAAkCknN,GAAG,CAAC,KAAK5nP,CAAN,CAA5C;AACD;;AAED,SAAS2oP,aAAT,GAAyB;AACvB,MAAIxvP,CAAC,GAAG,KAAKsvP,OAAb;AAAsBtvP,EAAAA,CAAC,GAAG0D,KAAK,CAAC1D,CAAD,CAAL,GAAW,CAAX,GAAenB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYgB,CAAZ,CAAZ,CAAnB;AACtB,SAAO,CAACA,CAAC,KAAK,CAAN,GAAU,MAAV,GAAmB,OAApB,IACDnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAK2B,CAAhB,KAAsB,CAApC,CAAZ,CADC,GACqD,IADrD,GAEDjI,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAKoiC,CAAhB,KAAsB,CAApC,CAAZ,CAFC,GAEqD,IAFrD,GAGD1oC,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAW,KAAK0B,CAAhB,KAAsB,CAApC,CAAZ,CAHC,IAIA7G,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,OAAOA,CAAP,GAAW,GAJ3B,CAAP;AAKD;;AAED,SAASyuP,GAAT,CAAa3yP,KAAb,EAAoB;AAClBA,EAAAA,KAAK,GAAG+C,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,GAAT,EAAcH,IAAI,CAACsG,KAAL,CAAWrJ,KAAX,KAAqB,CAAnC,CAAZ,CAAR;AACA,SAAO,CAACA,KAAK,GAAG,EAAR,GAAa,GAAb,GAAmB,EAApB,IAA0BA,KAAK,CAAC2M,QAAN,CAAe,EAAf,CAAjC;AACD;;AAED,SAAS2mP,IAAT,CAAc/pM,CAAd,EAAiB/oD,CAAjB,EAAoBsO,CAApB,EAAuB5K,CAAvB,EAA0B;AACxB,MAAIA,CAAC,IAAI,CAAT,EAAYqlD,CAAC,GAAG/oD,CAAC,GAAGsO,CAAC,GAAGygE,GAAZ,CAAZ,KACK,IAAIzgE,CAAC,IAAI,CAAL,IAAUA,CAAC,IAAI,CAAnB,EAAsBy6C,CAAC,GAAG/oD,CAAC,GAAG+uE,GAAR,CAAtB,KACA,IAAI/uE,CAAC,IAAI,CAAT,EAAY+oD,CAAC,GAAGgmB,GAAJ;AACjB,SAAO,IAAIokL,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB5K,CAAjB,CAAP;AACD;;AAEM,SAASgvP,UAAT,CAAoBvqO,CAApB,EAAuB;AAC5B,MAAIA,CAAC,YAAYgrO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQhrO,CAAC,CAAC4gC,CAAV,EAAa5gC,CAAC,CAACnoB,CAAf,EAAkBmoB,CAAC,CAAC7Z,CAApB,EAAuB6Z,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI,EAAE7qO,CAAC,YAAY4/N,KAAf,CAAJ,EAA2B5/N,CAAC,GAAG6pO,KAAK,CAAC7pO,CAAD,CAAT;AAC3B,MAAI,CAACA,CAAL,EAAQ,OAAO,IAAIgrO,GAAJ,EAAP;AACR,MAAIhrO,CAAC,YAAYgrO,GAAjB,EAAsB,OAAOhrO,CAAP;AACtBA,EAAAA,CAAC,GAAGA,CAAC,CAAC+pO,GAAF,EAAJ;AACA,MAAI1nP,CAAC,GAAG2d,CAAC,CAAC3d,CAAF,GAAM,GAAd;AAAA,MACIygC,CAAC,GAAG9iB,CAAC,CAAC8iB,CAAF,GAAM,GADd;AAAA,MAEI1gC,CAAC,GAAG4d,CAAC,CAAC5d,CAAF,GAAM,GAFd;AAAA,MAGI7H,GAAG,GAAGH,IAAI,CAACG,GAAL,CAAS8H,CAAT,EAAYygC,CAAZ,EAAe1gC,CAAf,CAHV;AAAA,MAII3H,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS4H,CAAT,EAAYygC,CAAZ,EAAe1gC,CAAf,CAJV;AAAA,MAKIw+C,CAAC,GAAGgmB,GALR;AAAA,MAMI/uE,CAAC,GAAG4C,GAAG,GAAGF,GANd;AAAA,MAOI4L,CAAC,GAAG,CAAC1L,GAAG,GAAGF,GAAP,IAAc,CAPtB;;AAQA,MAAI1C,CAAJ,EAAO;AACL,QAAIwK,CAAC,KAAK5H,GAAV,EAAemmD,CAAC,GAAG,CAAC9d,CAAC,GAAG1gC,CAAL,IAAUvK,CAAV,GAAc,CAACirC,CAAC,GAAG1gC,CAAL,IAAU,CAA5B,CAAf,KACK,IAAI0gC,CAAC,KAAKroC,GAAV,EAAemmD,CAAC,GAAG,CAACx+C,CAAC,GAAGC,CAAL,IAAUxK,CAAV,GAAc,CAAlB,CAAf,KACA+oD,CAAC,GAAG,CAACv+C,CAAC,GAAGygC,CAAL,IAAUjrC,CAAV,GAAc,CAAlB;AACLA,IAAAA,CAAC,IAAIsO,CAAC,GAAG,GAAJ,GAAU1L,GAAG,GAAGF,GAAhB,GAAsB,IAAIE,GAAJ,GAAUF,GAArC;AACAqmD,IAAAA,CAAC,IAAI,EAAL;AACD,GAND,MAMO;AACL/oD,IAAAA,CAAC,GAAGsO,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG,CAAb,GAAiB,CAAjB,GAAqBy6C,CAAzB;AACD;;AACD,SAAO,IAAIoqM,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB6Z,CAAC,CAAC6qO,OAAnB,CAAP;AACD;;AAEM,SAASI,GAAT,CAAarqM,CAAb,EAAgB/oD,CAAhB,EAAmBsO,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB42P,UAAU,CAAC3pM,CAAD,CAAnC,GAAyC,IAAIoqM,GAAJ,CAAQpqM,CAAR,EAAW/oD,CAAX,EAAcsO,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAED,SAASG,GAAT,CAAapqM,CAAb,EAAgB/oD,CAAhB,EAAmBsO,CAAnB,EAAsB0kP,OAAtB,EAA+B;AAC7B,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK/oD,CAAL,GAAS,CAACA,CAAV;AACA,OAAKsO,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOG,GAAP,EAAYC,GAAZ,EAAiB,oBAAOrL,KAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,QAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,QAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAIq5O,GAAJ,CAAQ,KAAKpqM,CAAb,EAAgB,KAAK/oD,CAArB,EAAwB,KAAKsO,CAAL,GAASwL,CAAjC,EAAoC,KAAKk5O,OAAzC,CAAP;AACD,GAJ4B;AAK7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,MAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,MAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAIq5O,GAAJ,CAAQ,KAAKpqM,CAAb,EAAgB,KAAK/oD,CAArB,EAAwB,KAAKsO,CAAL,GAASwL,CAAjC,EAAoC,KAAKk5O,OAAzC,CAAP;AACD,GAR4B;AAS7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAInpM,CAAC,GAAG,KAAKA,CAAL,GAAS,GAAT,GAAe,CAAC,KAAKA,CAAL,GAAS,CAAV,IAAe,GAAtC;AAAA,QACI/oD,CAAC,GAAGoH,KAAK,CAAC2hD,CAAD,CAAL,IAAY3hD,KAAK,CAAC,KAAKpH,CAAN,CAAjB,GAA4B,CAA5B,GAAgC,KAAKA,CAD7C;AAAA,QAEIsO,CAAC,GAAG,KAAKA,CAFb;AAAA,QAGI+kP,EAAE,GAAG/kP,CAAC,GAAG,CAACA,CAAC,GAAG,GAAJ,GAAUA,CAAV,GAAc,IAAIA,CAAnB,IAAwBtO,CAHrC;AAAA,QAIIszP,EAAE,GAAG,IAAIhlP,CAAJ,GAAQ+kP,EAJjB;AAKA,WAAO,IAAIT,GAAJ,CACLW,OAAO,CAACxqM,CAAC,IAAI,GAAL,GAAWA,CAAC,GAAG,GAAf,GAAqBA,CAAC,GAAG,GAA1B,EAA+BuqM,EAA/B,EAAmCD,EAAnC,CADF,EAELE,OAAO,CAACxqM,CAAD,EAAIuqM,EAAJ,EAAQD,EAAR,CAFF,EAGLE,OAAO,CAACxqM,CAAC,GAAG,GAAJ,GAAUA,CAAC,GAAG,GAAd,GAAoBA,CAAC,GAAG,GAAzB,EAA8BuqM,EAA9B,EAAkCD,EAAlC,CAHF,EAIL,KAAKL,OAJA,CAAP;AAMD,GArB4B;AAsB7Bf,EAAAA,WAAW,EAAE,YAAW;AACtB,WAAO,CAAC,KAAK,KAAKjyP,CAAV,IAAe,KAAKA,CAAL,IAAU,CAAzB,IAA8BoH,KAAK,CAAC,KAAKpH,CAAN,CAApC,KACC,KAAK,KAAKsO,CAAV,IAAe,KAAKA,CAAL,IAAU,CAD1B,IAEC,KAAK,KAAK0kP,OAAV,IAAqB,KAAKA,OAAL,IAAgB,CAF7C;AAGD,GA1B4B;AA2B7BV,EAAAA,SAAS,EAAE,YAAW;AACpB,QAAI5uP,CAAC,GAAG,KAAKsvP,OAAb;AAAsBtvP,IAAAA,CAAC,GAAG0D,KAAK,CAAC1D,CAAD,CAAL,GAAW,CAAX,GAAenB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYgB,CAAZ,CAAZ,CAAnB;AACtB,WAAO,CAACA,CAAC,KAAK,CAAN,GAAU,MAAV,GAAmB,OAApB,KACA,KAAKqlD,CAAL,IAAU,CADV,IACe,IADf,GAED,CAAC,KAAK/oD,CAAL,IAAU,CAAX,IAAgB,GAFf,GAEqB,KAFrB,GAGD,CAAC,KAAKsO,CAAL,IAAU,CAAX,IAAgB,GAHf,GAGqB,GAHrB,IAIA5K,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,OAAOA,CAAP,GAAW,GAJ3B,CAAP;AAKD;AAlC4B,CAAd,CAAjB;AAqCA;;AACA,SAAS6vP,OAAT,CAAiBxqM,CAAjB,EAAoBuqM,EAApB,EAAwBD,EAAxB,EAA4B;AAC1B,SAAO,CAACtqM,CAAC,GAAG,EAAJ,GAASuqM,EAAE,GAAG,CAACD,EAAE,GAAGC,EAAN,IAAYvqM,CAAZ,GAAgB,EAA9B,GACFA,CAAC,GAAG,GAAJ,GAAUsqM,EAAV,GACAtqM,CAAC,GAAG,GAAJ,GAAUuqM,EAAE,GAAG,CAACD,EAAE,GAAGC,EAAN,KAAa,MAAMvqM,CAAnB,IAAwB,EAAvC,GACAuqM,EAHC,IAGK,GAHZ;AAID;;;;;;;;AClXM,IAAIs2E,OAAO,GAAGrnU,IAAI,CAACuiC,EAAL,GAAU,GAAxB;;AACA,IAAI+kS,OAAO,GAAG,MAAMtnU,IAAI,CAACuiC,EAAzB;;;;;;;;;;;;;;;;ACDP;;AACA;;AACA;;;;;;AAEA;AACA,IAAI4uN,CAAC,GAAG,EAAR;AAAA,IACIC,EAAE,GAAG,OADT;AAAA,IAEIC,EAAE,GAAG,CAFT;AAAA,IAGIC,EAAE,GAAG,OAHT;AAAA,IAIIpsC,EAAE,GAAG,IAAI,EAJb;AAAA,IAKItkI,EAAE,GAAG,IAAI,EALb;AAAA,IAMIC,EAAE,GAAG,IAAID,EAAJ,GAASA,EANlB;AAAA,IAOI2wK,EAAE,GAAG3wK,EAAE,GAAGA,EAAL,GAAUA,EAPnB;;AASA,SAAS4wK,UAAT,CAAoB5rO,CAApB,EAAuB;AACrB,MAAIA,CAAC,YAAY6rO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa6Z,CAAC,CAACzkB,CAAf,EAAkBykB,CAAC,CAAC5d,CAApB,EAAuB4d,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI7qO,CAAC,YAAY8rO,GAAjB,EAAsB,OAAOC,OAAO,CAAC/rO,CAAD,CAAd;AACtB,MAAI,EAAEA,CAAC,YAAYyqO,UAAf,CAAJ,EAAyBzqO,CAAC,GAAG,uBAAWA,CAAX,CAAJ;AACzB,MAAI3d,CAAC,GAAG2pP,QAAQ,CAAChsO,CAAC,CAAC3d,CAAH,CAAhB;AAAA,MACIygC,CAAC,GAAGkpN,QAAQ,CAAChsO,CAAC,CAAC8iB,CAAH,CADhB;AAAA,MAEI1gC,CAAC,GAAG4pP,QAAQ,CAAChsO,CAAC,CAAC5d,CAAH,CAFhB;AAAA,MAGI2W,CAAC,GAAGkzO,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDqpP,EAAnD,CAHf;AAAA,MAGuEjxP,CAHvE;AAAA,MAG0EsvE,CAH1E;AAIA,MAAIznE,CAAC,KAAKygC,CAAN,IAAWA,CAAC,KAAK1gC,CAArB,EAAwB5H,CAAC,GAAGsvE,CAAC,GAAG/wD,CAAR,CAAxB,KAAwC;AACtCve,IAAAA,CAAC,GAAGyxP,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDopP,EAAnD,CAAX;AACA1hL,IAAAA,CAAC,GAAGmiL,OAAO,CAAC,CAAC,YAAY5pP,CAAZ,GAAgB,YAAYygC,CAA5B,GAAgC,YAAY1gC,CAA7C,IAAkDspP,EAAnD,CAAX;AACD;AACD,SAAO,IAAIG,GAAJ,CAAQ,MAAM9yO,CAAN,GAAU,EAAlB,EAAsB,OAAOve,CAAC,GAAGue,CAAX,CAAtB,EAAqC,OAAOA,CAAC,GAAG+wD,CAAX,CAArC,EAAoD9pD,CAAC,CAAC6qO,OAAtD,CAAP;AACD;;AAEM,SAAS9G,IAAT,CAAc59O,CAAd,EAAiB0kP,OAAjB,EAA0B;AAC/B,SAAO,IAAIgB,GAAJ,CAAQ1lP,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAP;AACD;;AAEc,SAASqB,GAAT,CAAa/lP,CAAb,EAAgB5K,CAAhB,EAAmB6G,CAAnB,EAAsByoP,OAAtB,EAA+B;AAC5C,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBi4P,UAAU,CAACzlP,CAAD,CAAnC,GAAyC,IAAI0lP,GAAJ,CAAQ1lP,CAAR,EAAW5K,CAAX,EAAc6G,CAAd,EAAiByoP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASgB,GAAT,CAAa1lP,CAAb,EAAgB5K,CAAhB,EAAmB6G,CAAnB,EAAsByoP,OAAtB,EAA+B;AACpC,OAAK1kP,CAAL,GAAS,CAACA,CAAV;AACA,OAAK5K,CAAL,GAAS,CAACA,CAAV;AACA,OAAK6G,CAAL,GAAS,CAACA,CAAV;AACA,OAAKyoP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOgB,GAAP,EAAYK,GAAZ,EAAiB,oBAAOtM,YAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpB,WAAO,IAAIk6O,GAAJ,CAAQ,KAAK1lP,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlB,EAA0C,KAAKpW,CAA/C,EAAkD,KAAK6G,CAAvD,EAA0D,KAAKyoP,OAA/D,CAAP;AACD,GAH4B;AAI7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClB,WAAO,IAAIk6O,GAAJ,CAAQ,KAAK1lP,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlB,EAA0C,KAAKpW,CAA/C,EAAkD,KAAK6G,CAAvD,EAA0D,KAAKyoP,OAA/D,CAAP;AACD,GAN4B;AAO7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAIhxO,CAAC,GAAG,CAAC,KAAK5S,CAAL,GAAS,EAAV,IAAgB,GAAxB;AAAA,QACI3L,CAAC,GAAGyE,KAAK,CAAC,KAAK1D,CAAN,CAAL,GAAgBwd,CAAhB,GAAoBA,CAAC,GAAG,KAAKxd,CAAL,GAAS,GADzC;AAAA,QAEIuuE,CAAC,GAAG7qE,KAAK,CAAC,KAAKmD,CAAN,CAAL,GAAgB2W,CAAhB,GAAoBA,CAAC,GAAG,KAAK3W,CAAL,GAAS,GAFzC;AAGA5H,IAAAA,CAAC,GAAGgxP,EAAE,GAAGW,OAAO,CAAC3xP,CAAD,CAAhB;AACAue,IAAAA,CAAC,GAAG0yO,EAAE,GAAGU,OAAO,CAACpzO,CAAD,CAAhB;AACA+wD,IAAAA,CAAC,GAAG4hL,EAAE,GAAGS,OAAO,CAACriL,CAAD,CAAhB;AACA,WAAO,IAAI2gL,UAAJ,CACL2B,QAAQ,CAAE,YAAY5xP,CAAZ,GAAgB,YAAYue,CAA5B,GAAgC,YAAY+wD,CAA9C,CADH,EAELsiL,QAAQ,CAAC,CAAC,SAAD,GAAa5xP,CAAb,GAAiB,YAAYue,CAA7B,GAAiC,YAAY+wD,CAA9C,CAFH,EAGLsiL,QAAQ,CAAE,YAAY5xP,CAAZ,GAAgB,YAAYue,CAA5B,GAAgC,YAAY+wD,CAA9C,CAHH,EAIL,KAAK+gL,OAJA,CAAP;AAMD;AApB4B,CAAd,CAAjB;;AAuBA,SAASoB,OAAT,CAAiBl0P,CAAjB,EAAoB;AAClB,SAAOA,CAAC,GAAG4zP,EAAJ,GAASvxP,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAY,IAAI,CAAhB,CAAT,GAA8BA,CAAC,GAAGkjF,EAAJ,GAASqkI,EAA9C;AACD;;AAED,SAAS6sC,OAAT,CAAiBp0P,CAAjB,EAAoB;AAClB,SAAOA,CAAC,GAAGijF,EAAJ,GAASjjF,CAAC,GAAGA,CAAJ,GAAQA,CAAjB,GAAqBkjF,EAAE,IAAIljF,CAAC,GAAGunN,EAAR,CAA9B;AACD;;AAED,SAAS8sC,QAAT,CAAkB5xP,CAAlB,EAAqB;AACnB,SAAO,OAAOA,CAAC,IAAI,SAAL,GAAiB,QAAQA,CAAzB,GAA6B,QAAQJ,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY,IAAI,GAAhB,CAAR,GAA+B,KAAnE,CAAP;AACD;;AAED,SAASwxP,QAAT,CAAkBxxP,CAAlB,EAAqB;AACnB,SAAO,CAACA,CAAC,IAAI,GAAN,KAAc,OAAd,GAAwBA,CAAC,GAAG,KAA5B,GAAoCJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAC,GAAG,KAAL,IAAc,KAAvB,EAA8B,GAA9B,CAA3C;AACD;;AAED,SAAS6xP,UAAT,CAAoBrsO,CAApB,EAAuB;AACrB,MAAIA,CAAC,YAAY8rO,GAAjB,EAAsB,OAAO,IAAIA,GAAJ,CAAQ9rO,CAAC,CAAC4gC,CAAV,EAAa5gC,CAAC,CAAClf,CAAf,EAAkBkf,CAAC,CAAC7Z,CAApB,EAAuB6Z,CAAC,CAAC6qO,OAAzB,CAAP;AACtB,MAAI,EAAE7qO,CAAC,YAAY6rO,GAAf,CAAJ,EAAyB7rO,CAAC,GAAG4rO,UAAU,CAAC5rO,CAAD,CAAd;AACzB,MAAIA,CAAC,CAACzkB,CAAF,KAAQ,CAAR,IAAaykB,CAAC,CAAC5d,CAAF,KAAQ,CAAzB,EAA4B,OAAO,IAAI0pP,GAAJ,CAAQllL,GAAR,EAAa,IAAI5mD,CAAC,CAAC7Z,CAAN,IAAW6Z,CAAC,CAAC7Z,CAAF,GAAM,GAAjB,GAAuB,CAAvB,GAA2BygE,GAAxC,EAA6C5mD,CAAC,CAAC7Z,CAA/C,EAAkD6Z,CAAC,CAAC6qO,OAApD,CAAP;;AAC5B,MAAIjqM,CAAC,GAAGxmD,IAAI,CAACuQ,KAAL,CAAWqV,CAAC,CAAC5d,CAAb,EAAgB4d,CAAC,CAACzkB,CAAlB,IAAuBmmU,aAA/B;;AACA,SAAO,IAAI51E,GAAJ,CAAQlrM,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAG,GAAZ,GAAkBA,CAA1B,EAA6BxmD,IAAI,CAACqC,IAAL,CAAUujB,CAAC,CAACzkB,CAAF,GAAMykB,CAAC,CAACzkB,CAAR,GAAYykB,CAAC,CAAC5d,CAAF,GAAM4d,CAAC,CAAC5d,CAA9B,CAA7B,EAA+D4d,CAAC,CAAC7Z,CAAjE,EAAoE6Z,CAAC,CAAC6qO,OAAtE,CAAP;AACD;;AAEM,SAASyB,GAAT,CAAanmP,CAAb,EAAgBrF,CAAhB,EAAmB8/C,CAAnB,EAAsBiqM,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB04P,UAAU,CAAClmP,CAAD,CAAnC,GAAyC,IAAI2lP,GAAJ,CAAQlrM,CAAR,EAAW9/C,CAAX,EAAcqF,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAAS0B,GAAT,CAAa3rM,CAAb,EAAgB9/C,CAAhB,EAAmBqF,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyB04P,UAAU,CAACzrM,CAAD,CAAnC,GAAyC,IAAIkrM,GAAJ,CAAQlrM,CAAR,EAAW9/C,CAAX,EAAcqF,CAAd,EAAiB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAAvC,CAAhD;AACD;;AAEM,SAASiB,GAAT,CAAalrM,CAAb,EAAgB9/C,CAAhB,EAAmBqF,CAAnB,EAAsB0kP,OAAtB,EAA+B;AACpC,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK9/C,CAAL,GAAS,CAACA,CAAV;AACA,OAAKqF,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,SAASkB,OAAT,CAAiB/rO,CAAjB,EAAoB;AAClB,MAAI/gB,KAAK,CAAC+gB,CAAC,CAAC4gC,CAAH,CAAT,EAAgB,OAAO,IAAIirM,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB6Z,CAAC,CAAC6qO,OAArB,CAAP;AAChB,MAAIjqM,CAAC,GAAG5gC,CAAC,CAAC4gC,CAAF,GAAM6gR,aAAd;AACA,SAAO,IAAI51E,GAAJ,CAAQ7rO,CAAC,CAAC7Z,CAAV,EAAa/L,IAAI,CAACgU,GAAL,CAASwyC,CAAT,IAAc5gC,CAAC,CAAClf,CAA7B,EAAgC1G,IAAI,CAAC+T,GAAL,CAASyyC,CAAT,IAAc5gC,CAAC,CAAClf,CAAhD,EAAmDkf,CAAC,CAAC6qO,OAArD,CAAP;AACD;;AAED,qBAAOiB,GAAP,EAAYS,GAAZ,EAAiB,oBAAO3M,YAAP,EAAc;AAC7BE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpB,WAAO,IAAIm6O,GAAJ,CAAQ,KAAKlrM,CAAb,EAAgB,KAAK9/C,CAArB,EAAwB,KAAKqF,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlC,EAA0D,KAAKk5O,OAA/D,CAAP;AACD,GAH4B;AAI7BhL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClB,WAAO,IAAIm6O,GAAJ,CAAQ,KAAKlrM,CAAb,EAAgB,KAAK9/C,CAArB,EAAwB,KAAKqF,CAAL,GAASolP,CAAC,IAAI55O,CAAC,IAAI,IAAL,GAAY,CAAZ,GAAgBA,CAApB,CAAlC,EAA0D,KAAKk5O,OAA/D,CAAP;AACD,GAN4B;AAO7Bd,EAAAA,GAAG,EAAE,YAAW;AACd,WAAOgC,OAAO,CAAC,IAAD,CAAP,CAAchC,GAAd,EAAP;AACD;AAT4B,CAAd,CAAjB;;;;;;;;;;;AChHA;;AACA;;AACA;;;;;;AAEA,IAAIyC,CAAC,GAAG,CAAC,OAAT;AAAA,IACIC,CAAC,GAAG,CAAC,OADT;AAAA,IAEIC,CAAC,GAAG,CAAC,OAFT;AAAA,IAGI7X,CAAC,GAAG,CAAC,OAHT;AAAA,IAII8X,CAAC,GAAG,CAAC,OAJT;AAAA,IAKIC,EAAE,GAAGD,CAAC,GAAG9X,CALb;AAAA,IAMIgY,EAAE,GAAGF,CAAC,GAAGF,CANb;AAAA,IAOIK,KAAK,GAAGL,CAAC,GAAGC,CAAJ,GAAQ7X,CAAC,GAAG2X,CAPxB;;AASA,SAASO,gBAAT,CAA0B/sO,CAA1B,EAA6B;AAC3B,MAAIA,CAAC,YAAYgtO,SAAjB,EAA4B,OAAO,IAAIA,SAAJ,CAAchtO,CAAC,CAAC4gC,CAAhB,EAAmB5gC,CAAC,CAACnoB,CAArB,EAAwBmoB,CAAC,CAAC7Z,CAA1B,EAA6B6Z,CAAC,CAAC6qO,OAA/B,CAAP;AAC5B,MAAI,EAAE7qO,CAAC,YAAYyqO,UAAf,CAAJ,EAAyBzqO,CAAC,GAAG,uBAAWA,CAAX,CAAJ;AACzB,MAAI3d,CAAC,GAAG2d,CAAC,CAAC3d,CAAF,GAAM,GAAd;AAAA,MACIygC,CAAC,GAAG9iB,CAAC,CAAC8iB,CAAF,GAAM,GADd;AAAA,MAEI1gC,CAAC,GAAG4d,CAAC,CAAC5d,CAAF,GAAM,GAFd;AAAA,MAGI+D,CAAC,GAAG,CAAC2mP,KAAK,GAAG1qP,CAAR,GAAYwqP,EAAE,GAAGvqP,CAAjB,GAAqBwqP,EAAE,GAAG/pN,CAA3B,KAAiCgqN,KAAK,GAAGF,EAAR,GAAaC,EAA9C,CAHR;AAAA,MAIII,EAAE,GAAG7qP,CAAC,GAAG+D,CAJb;AAAA,MAKIwL,CAAC,GAAG,CAACg7O,CAAC,IAAI7pN,CAAC,GAAG38B,CAAR,CAAD,GAAcumP,CAAC,GAAGO,EAAnB,IAAyBpY,CALjC;AAAA,MAMIh9O,CAAC,GAAGuC,IAAI,CAACqC,IAAL,CAAUkV,CAAC,GAAGA,CAAJ,GAAQs7O,EAAE,GAAGA,EAAvB,KAA8BN,CAAC,GAAGxmP,CAAJ,IAAS,IAAIA,CAAb,CAA9B,CANR;AAAA,MAMwD;AACpDy6C,EAAAA,CAAC,GAAG/oD,CAAC,GAAGuC,IAAI,CAACuQ,KAAL,CAAWgH,CAAX,EAAcs7O,EAAd,IAAoBy0E,aAApB,GAA8B,GAAjC,GAAuC96P,GAPhD;AAQA,SAAO,IAAIomL,SAAJ,CAAcpsM,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAG,GAAZ,GAAkBA,CAAhC,EAAmC/oD,CAAnC,EAAsCsO,CAAtC,EAAyC6Z,CAAC,CAAC6qO,OAA3C,CAAP;AACD;;AAEc,SAASqC,SAAT,CAAmBtsM,CAAnB,EAAsB/oD,CAAtB,EAAyBsO,CAAzB,EAA4B0kP,OAA5B,EAAqC;AAClD,SAAOz2P,SAAS,CAACT,MAAV,KAAqB,CAArB,GAAyBo5P,gBAAgB,CAACnsM,CAAD,CAAzC,GAA+C,IAAIosM,SAAJ,CAAcpsM,CAAd,EAAiB/oD,CAAjB,EAAoBsO,CAApB,EAAuB0kP,OAAO,IAAI,IAAX,GAAkB,CAAlB,GAAsBA,OAA7C,CAAtD;AACD;;AAEM,SAASmC,SAAT,CAAmBpsM,CAAnB,EAAsB/oD,CAAtB,EAAyBsO,CAAzB,EAA4B0kP,OAA5B,EAAqC;AAC1C,OAAKjqM,CAAL,GAAS,CAACA,CAAV;AACA,OAAK/oD,CAAL,GAAS,CAACA,CAAV;AACA,OAAKsO,CAAL,GAAS,CAACA,CAAV;AACA,OAAK0kP,OAAL,GAAe,CAACA,OAAhB;AACD;;AAED,qBAAOmC,SAAP,EAAkBE,SAAlB,EAA6B,oBAAOtN,YAAP,EAAc;AACzCE,EAAAA,QAAQ,EAAE,UAASnuO,CAAT,EAAY;AACpBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYmuO,eAAZ,GAAuB1lP,IAAI,CAAC0Q,GAAL,CAASg1O,eAAT,EAAmBnuO,CAAnB,CAA3B;AACA,WAAO,IAAIq7O,SAAJ,CAAc,KAAKpsM,CAAnB,EAAsB,KAAK/oD,CAA3B,EAA8B,KAAKsO,CAAL,GAASwL,CAAvC,EAA0C,KAAKk5O,OAA/C,CAAP;AACD,GAJwC;AAKzChL,EAAAA,MAAM,EAAE,UAASluO,CAAT,EAAY;AAClBA,IAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAYkuO,aAAZ,GAAqBzlP,IAAI,CAAC0Q,GAAL,CAAS+0O,aAAT,EAAiBluO,CAAjB,CAAzB;AACA,WAAO,IAAIq7O,SAAJ,CAAc,KAAKpsM,CAAnB,EAAsB,KAAK/oD,CAA3B,EAA8B,KAAKsO,CAAL,GAASwL,CAAvC,EAA0C,KAAKk5O,OAA/C,CAAP;AACD,GARwC;AASzCd,EAAAA,GAAG,EAAE,YAAW;AACd,QAAInpM,CAAC,GAAG3hD,KAAK,CAAC,KAAK2hD,CAAN,CAAL,GAAgB,CAAhB,GAAoB,CAAC,KAAKA,CAAL,GAAS,GAAV,IAAiB6gR,aAA7C;AAAA,QACIt7T,CAAC,GAAG,CAAC,KAAKA,CADd;AAAA,QAEI5K,CAAC,GAAG0D,KAAK,CAAC,KAAKpH,CAAN,CAAL,GAAgB,CAAhB,GAAoB,KAAKA,CAAL,GAASsO,CAAT,IAAc,IAAIA,CAAlB,CAF5B;AAAA,QAGIuI,IAAI,GAAGtU,IAAI,CAACgU,GAAL,CAASwyC,CAAT,CAHX;AAAA,QAIInyC,IAAI,GAAGrU,IAAI,CAAC+T,GAAL,CAASyyC,CAAT,CAJX;AAKA,WAAO,IAAI6pM,UAAJ,CACL,OAAOtkP,CAAC,GAAG5K,CAAC,IAAIixP,CAAC,GAAG99O,IAAJ,GAAW+9O,CAAC,GAAGh+O,IAAnB,CAAZ,CADK,EAEL,OAAOtI,CAAC,GAAG5K,CAAC,IAAImxP,CAAC,GAAGh+O,IAAJ,GAAWmmO,CAAC,GAAGpmO,IAAnB,CAAZ,CAFK,EAGL,OAAOtI,CAAC,GAAG5K,CAAC,IAAIoxP,CAAC,GAAGj+O,IAAR,CAAZ,CAHK,EAIL,KAAKm8O,OAJA,CAAP;AAMD;AArBwC,CAAd,CAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;;AACA;;AACA;;;;;;;;;;;;;;;AEFA;;AAEe,kBAASpsP,MAAT,EAAiB;AAC9B,MAAI8D,CAAC,GAAG9D,MAAM,CAAC9K,MAAf;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAAC+H,KAAL,CAAW,CAAC,CAACpK,CAAC,IAAI,CAAN,IAAW,CAAX,GAAe,EAAEA,CAAjB,GAAqBA,CAAtB,IAA2BwK,CAAtC,CAAR;AAAA,QACI6wE,EAAE,GAAG30E,MAAM,CAAC,CAACpK,CAAC,GAAGkO,CAAJ,GAAQ,CAAT,IAAcA,CAAf,CADf;AAAA,QAEIqwE,EAAE,GAAGn0E,MAAM,CAACpK,CAAC,GAAGkO,CAAL,CAFf;AAAA,QAGIswE,EAAE,GAAGp0E,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAHf;AAAA,QAII4qP,EAAE,GAAG1uP,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAJf;AAKA,WAAO,kBAAM,CAACxK,CAAC,GAAG1D,CAAC,GAAGkO,CAAT,IAAcA,CAApB,EAAuB6wE,EAAvB,EAA2BR,EAA3B,EAA+BC,EAA/B,EAAmCs6K,EAAnC,CAAP;AACD,GAPD;AAQD;;;;;;;;;;;AEZD;;;;AAEA,SAAShjK,MAAT,CAAgB5uF,CAAhB,EAAmB2F,CAAnB,EAAsB;AACpB,SAAO,UAASnJ,CAAT,EAAY;AACjB,WAAOwD,CAAC,GAAGxD,CAAC,GAAGmJ,CAAf;AACD,GAFD;AAGD;;AAED,SAASksP,WAAT,CAAqB7xP,CAArB,EAAwB6G,CAAxB,EAA2B2W,CAA3B,EAA8B;AAC5B,SAAOxd,CAAC,GAAGnB,IAAI,CAAC0Q,GAAL,CAASvP,CAAT,EAAYwd,CAAZ,CAAJ,EAAoB3W,CAAC,GAAGhI,IAAI,CAAC0Q,GAAL,CAAS1I,CAAT,EAAY2W,CAAZ,IAAiBxd,CAAzC,EAA4Cwd,CAAC,GAAG,IAAIA,CAApD,EAAuD,UAAShhB,CAAT,EAAY;AACxE,WAAOqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,GAAGxD,CAAC,GAAGqK,CAAjB,EAAoB2W,CAApB,CAAP;AACD,GAFD;AAGD;;AAEM,SAASs0O,GAAT,CAAa9xP,CAAb,EAAgB6G,CAAhB,EAAmB;AACxB,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAC,GAAG,GAAJ,IAAWA,CAAC,GAAG,CAAC,GAAhB,GAAsBA,CAAC,GAAG,MAAM9G,IAAI,CAACsG,KAAL,CAAWQ,CAAC,GAAG,GAAf,CAAhC,GAAsDA,CAA1D,CAAT,GAAwE,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAhF;AACD;;AAEM,SAASk4J,KAAT,CAAe16I,CAAf,EAAkB;AACvB,SAAO,CAACA,CAAC,GAAG,CAACA,CAAN,MAAa,CAAb,GAAiBu0O,OAAjB,GAA2B,UAAS/xP,CAAT,EAAY6G,CAAZ,EAAe;AAC/C,WAAOA,CAAC,GAAG7G,CAAJ,GAAQ6xP,WAAW,CAAC7xP,CAAD,EAAI6G,CAAJ,EAAO2W,CAAP,CAAnB,GAA+B,uBAAS9Z,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAtC;AACD,GAFD;AAGD;;AAEc,SAAS+xP,OAAT,CAAiB/xP,CAAjB,EAAoB6G,CAApB,EAAuB;AACpC,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAJ,CAAT,GAAkB,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAA1B;AACD;;;;;;;;;AC5BD;;AACA;;AACA;;AACA;;;;;;;;eAEgB,SAASgyP,QAAT,CAAkBx0O,CAAlB,EAAqB;AACnC,MAAI8wO,KAAK,GAAG,kBAAM9wO,CAAN,CAAZ;;AAEA,WAASgxO,GAAT,CAAa5pP,KAAb,EAAoB6F,GAApB,EAAyB;AACvB,QAAI3D,CAAC,GAAGwnP,KAAK,CAAC,CAAC1pP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BkC,CAA3B,EAA8B,CAAC2D,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB3D,CAApD,CAAb;AAAA,QACIygC,CAAC,GAAG+mN,KAAK,CAAC1pP,KAAK,CAAC2iC,CAAP,EAAU98B,GAAG,CAAC88B,CAAd,CADb;AAAA,QAEI1gC,CAAC,GAAGynP,KAAK,CAAC1pP,KAAK,CAACiC,CAAP,EAAU4D,GAAG,CAAC5D,CAAd,CAFb;AAAA,QAGIyoP,OAAO,GAAG,oBAAQ1qP,KAAK,CAAC0qP,OAAd,EAAuB7kP,GAAG,CAAC6kP,OAA3B,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACkC,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC2iC,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD;;AAED4pP,EAAAA,GAAG,CAACt2F,KAAJ,GAAY85F,QAAZ;AAEA,SAAOxD,GAAP;AACD,CApBc,CAoBZ,CApBY;;;;AAsBf,SAASyD,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,SAAO,UAASC,MAAT,EAAiB;AACtB,QAAInrP,CAAC,GAAGmrP,MAAM,CAAC/5P,MAAf;AAAA,QACI0O,CAAC,GAAG,IAAIlO,KAAJ,CAAUoO,CAAV,CADR;AAAA,QAEIugC,CAAC,GAAG,IAAI3uC,KAAJ,CAAUoO,CAAV,CAFR;AAAA,QAGIH,CAAC,GAAG,IAAIjO,KAAJ,CAAUoO,CAAV,CAHR;AAAA,QAIIlO,CAJJ;AAAA,QAIOw1P,KAJP;;AAKA,SAAKx1P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBw1P,MAAAA,KAAK,GAAG,kBAAS6D,MAAM,CAACr5P,CAAD,CAAf,CAAR;AACAgO,MAAAA,CAAC,CAAChO,CAAD,CAAD,GAAOw1P,KAAK,CAACxnP,CAAN,IAAW,CAAlB;AACAygC,MAAAA,CAAC,CAACzuC,CAAD,CAAD,GAAOw1P,KAAK,CAAC/mN,CAAN,IAAW,CAAlB;AACA1gC,MAAAA,CAAC,CAAC/N,CAAD,CAAD,GAAOw1P,KAAK,CAACznP,CAAN,IAAW,CAAlB;AACD;;AACDC,IAAAA,CAAC,GAAGorP,MAAM,CAACprP,CAAD,CAAV;AACAygC,IAAAA,CAAC,GAAG2qN,MAAM,CAAC3qN,CAAD,CAAV;AACA1gC,IAAAA,CAAC,GAAGqrP,MAAM,CAACrrP,CAAD,CAAV;AACAynP,IAAAA,KAAK,CAACgB,OAAN,GAAgB,CAAhB;AACA,WAAO,UAAS9yP,CAAT,EAAY;AACjB8xP,MAAAA,KAAK,CAACxnP,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAAC/mN,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAACznP,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACA,aAAO8xP,KAAK,GAAG,EAAf;AACD,KALD;AAMD,GAtBD;AAuBD;;AAEM,IAAI8D,QAAQ,GAAGH,SAAS,CAAC3kM,cAAD,CAAxB;;AACA,IAAI+kM,cAAc,GAAGJ,SAAS,CAACK,oBAAD,CAA9B;;;;;;;;;;;AEtDP;;AACA;;;;;;;;AAEe,kBAAStyP,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO,CAAC,gCAAcA,CAAd,IAAmB4rP,oBAAnB,GAAiCC,YAAlC,EAAgD1yP,CAAhD,EAAmD6G,CAAnD,CAAP;AACD;;AAEM,SAAS6rP,YAAT,CAAsB1yP,CAAtB,EAAyB6G,CAAzB,EAA4B;AACjC,MAAI8rP,EAAE,GAAG9rP,CAAC,GAAGA,CAAC,CAACzO,MAAL,GAAc,CAAxB;AAAA,MACIw6P,EAAE,GAAG5yP,CAAC,GAAGnB,IAAI,CAACG,GAAL,CAAS2zP,EAAT,EAAa3yP,CAAC,CAAC5H,MAAf,CAAH,GAA4B,CADtC;AAAA,MAEI6G,CAAC,GAAG,IAAIrG,KAAJ,CAAUg6P,EAAV,CAFR;AAAA,MAGIrtP,CAAC,GAAG,IAAI3M,KAAJ,CAAU+5P,EAAV,CAHR;AAAA,MAII75P,CAJJ;;AAMA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyBmG,CAAC,CAACnG,CAAD,CAAD,GAAO,oBAAMkH,CAAC,CAAClH,CAAD,CAAP,EAAY+N,CAAC,CAAC/N,CAAD,CAAb,CAAP;;AACzB,SAAOA,CAAC,GAAG65P,EAAX,EAAe,EAAE75P,CAAjB,EAAoByM,CAAC,CAACzM,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAD,CAAR;;AAEpB,SAAO,UAAS0D,CAAT,EAAY;AACjB,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyByM,CAAC,CAACzM,CAAD,CAAD,GAAOmG,CAAC,CAACnG,CAAD,CAAD,CAAK0D,CAAL,CAAP;;AACzB,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;AGrBD;;;;AAEe,kBAASvF,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,EAAR;AAAA,MACIyM,CAAC,GAAG,EADR;AAAA,MAEI6Q,CAFJ;AAIA,MAAIpW,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;AACzC,MAAI6G,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;;AAEzC,OAAKuP,CAAL,IAAUvP,CAAV,EAAa;AACX,QAAIuP,CAAC,IAAIpW,CAAT,EAAY;AACVlH,MAAAA,CAAC,CAACsd,CAAD,CAAD,GAAO,oBAAMpW,CAAC,CAACoW,CAAD,CAAP,EAAYvP,CAAC,CAACuP,CAAD,CAAb,CAAP;AACD,KAFD,MAEO;AACL7Q,MAAAA,CAAC,CAAC6Q,CAAD,CAAD,GAAOvP,CAAC,CAACuP,CAAD,CAAR;AACD;AACF;;AAED,SAAO,UAAS5Z,CAAT,EAAY;AACjB,SAAK4Z,CAAL,IAAUtd,CAAV,EAAayM,CAAC,CAAC6Q,CAAD,CAAD,GAAOtd,CAAC,CAACsd,CAAD,CAAD,CAAK5Z,CAAL,CAAP;;AACb,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;ACtBD;;;;AAEA,IAAIstP,GAAG,GAAG,6CAAV;AAAA,IACIC,GAAG,GAAG,IAAIr/H,MAAJ,CAAWo/H,GAAG,CAACjkM,MAAf,EAAuB,GAAvB,CADV;;AAGA,SAASlgB,IAAT,CAAc7nC,CAAd,EAAiB;AACf,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;AAED,SAASihF,GAAT,CAAajhF,CAAb,EAAgB;AACd,SAAO,UAASrK,CAAT,EAAY;AACjB,WAAOqK,CAAC,CAACrK,CAAD,CAAD,GAAO,EAAd;AACD,GAFD;AAGD;;AAEc,kBAASwD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIksP,EAAE,GAAGF,GAAG,CAACh1M,SAAJ,GAAgBi1M,GAAG,CAACj1M,SAAJ,GAAgB,CAAzC;AAAA,MAA4C;AACxCm1M,EAAAA,EADJ;AAAA,MACQ;AACJC,EAAAA,EAFJ;AAAA,MAEQ;AACJC,EAAAA,EAHJ;AAAA,MAGQ;AACJp6P,EAAAA,CAAC,GAAG,CAAC,CAJT;AAAA,MAIY;AACRwD,EAAAA,CAAC,GAAG,EALR;AAAA,MAKY;AACRk0F,EAAAA,CAAC,GAAG,EANR,CAD4B,CAOhB;AAEZ;;AACAxwF,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR,EAAY6G,CAAC,GAAGA,CAAC,GAAG,EAApB,CAV4B,CAY5B;;AACA,SAAO,CAACmsP,EAAE,GAAGH,GAAG,CAAC5lO,IAAJ,CAASjtB,CAAT,CAAN,MACCizP,EAAE,GAAGH,GAAG,CAAC7lO,IAAJ,CAASpmB,CAAT,CADN,CAAP,EAC2B;AACzB,QAAI,CAACqsP,EAAE,GAAGD,EAAE,CAACr0P,KAAT,IAAkBm0P,EAAtB,EAA0B;AAAE;AAC1BG,MAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,EAAYG,EAAZ,CAAL;AACA,UAAI52P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,WACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN;;AACD,QAAI,CAACF,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAR,OAAkBC,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAzB,CAAJ,EAAmC;AAAE;AACnC,UAAI32P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQm6P,EAAR,CAAV,CAAsB;AAAtB,WACK32P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASm6P,EAAT;AACN,KAHD,MAGO;AAAE;AACP32P,MAAAA,CAAC,CAAC,EAAExD,CAAH,CAAD,GAAS,IAAT;AACA03F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAJ;AAAOmG,QAAAA,CAAC,EAAE,qBAAO+zP,EAAP,EAAWC,EAAX;AAAV,OAAP;AACD;;AACDF,IAAAA,EAAE,GAAGD,GAAG,CAACj1M,SAAT;AACD,GA5B2B,CA8B5B;;;AACA,MAAIk1M,EAAE,GAAGlsP,CAAC,CAACzO,MAAX,EAAmB;AACjB86P,IAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,CAAL;AACA,QAAIz2P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,SACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN,GAnC2B,CAqC5B;AACA;;;AACA,SAAO52P,CAAC,CAAClE,MAAF,GAAW,CAAX,GAAgBo4F,CAAC,CAAC,CAAD,CAAD,GACjB1I,GAAG,CAAC0I,CAAC,CAAC,CAAD,CAAD,CAAKvxF,CAAN,CADc,GAEjByvC,IAAI,CAAC7nC,CAAD,CAFH,IAGAA,CAAC,GAAG2pF,CAAC,CAACp4F,MAAN,EAAc,UAASoE,CAAT,EAAY;AACzB,SAAK,IAAI1D,CAAC,GAAG,CAAR,EAAW2rB,CAAhB,EAAmB3rB,CAAC,GAAG+N,CAAvB,EAA0B,EAAE/N,CAA5B,EAA+BwD,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAC/B,WAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,GANA,CAAP;AAOD;;;;;;;;;AC/DD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,kBAASsD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIrK,CAAC,GAAG,OAAOqK,CAAf;AAAA,MAAkBtB,CAAlB;AACA,SAAOsB,CAAC,IAAI,IAAL,IAAarK,CAAC,KAAK,SAAnB,GAA+B,uBAASqK,CAAT,CAA/B,GACD,CAACrK,CAAC,KAAK,QAAN,GAAiBs4M,eAAjB,GACDt4M,CAAC,KAAK,QAAN,GAAkB,CAAC+I,CAAC,GAAG,oBAAMsB,CAAN,CAAL,KAAkBA,CAAC,GAAGtB,CAAJ,EAAOipP,YAAzB,IAAgCz5C,eAAlD,GACAluM,CAAC,YAAYynP,cAAb,GAAqBE,YAArB,GACA3nP,CAAC,YAAY+nE,IAAb,GAAoBwgI,aAApB,GACA,gCAAcvoM,CAAd,IAAmB4rP,oBAAnB,GACA75P,KAAK,CAACuH,OAAN,CAAc0G,CAAd,IAAmB6rP,mBAAnB,GACA,OAAO7rP,CAAC,CAACu3M,OAAT,KAAqB,UAArB,IAAmC,OAAOv3M,CAAC,CAAC4B,QAAT,KAAsB,UAAzD,IAAuE/E,KAAK,CAACmD,CAAD,CAA5E,GAAkFs5L,eAAlF,GACA2U,eAPA,EAOQ90M,CAPR,EAOW6G,CAPX,CADN;AASD;;;;;;;;;AErBD;;AAEe,kBAAS7G,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,gBAAI,CAACkH,CAAL,EAAQ,CAAC6G,CAAT,CAAR;AACA,SAAO,UAASrK,CAAT,EAAY;AACjB,QAAIyC,CAAC,GAAGnG,CAAC,CAAC0D,CAAD,CAAT;AACA,WAAOyC,CAAC,GAAG,MAAMJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAC,GAAG,GAAf,CAAjB;AACD,GAHD;AAID;;;;;;;;;;AGRD;;;;;;AAEA,IAAImnU,OAAJ,EACIC,OADJ,EAEIC,OAFJ,EAGI7yE,OAHJ;;AAKO,SAASC,QAAT,CAAkB53P,KAAlB,EAAyB;AAC9B,MAAIA,KAAK,KAAK,MAAd,EAAsB,OAAOi9H,mBAAP;AACtB,MAAI,CAACqtM,OAAL,EAAcA,OAAO,GAAGlgT,QAAQ,CAACyB,aAAT,CAAuB,KAAvB,CAAV,EAAyC0+S,OAAO,GAAGngT,QAAQ,CAACqgT,eAA5D,EAA6ED,OAAO,GAAGpgT,QAAQ,CAACsgT,WAAhG;AACdJ,EAAAA,OAAO,CAAC7mD,KAAR,CAAcx9F,SAAd,GAA0BjmL,KAA1B;AACAA,EAAAA,KAAK,GAAGwqU,OAAO,CAACG,gBAAR,CAAyBJ,OAAO,CAACpmD,WAAR,CAAoBmmD,OAApB,CAAzB,EAAuD,IAAvD,EAA6DM,gBAA7D,CAA8E,WAA9E,CAAR;AACAL,EAAAA,OAAO,CAAC7sD,WAAR,CAAoB4sD,OAApB;AACAtqU,EAAAA,KAAK,GAAGA,KAAK,CAACqG,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,EAAmBxF,KAAnB,CAAyB,GAAzB,CAAR;AACA,SAAO,wBAAU,CAACb,KAAK,CAAC,CAAD,CAAhB,EAAqB,CAACA,KAAK,CAAC,CAAD,CAA3B,EAAgC,CAACA,KAAK,CAAC,CAAD,CAAtC,EAA2C,CAACA,KAAK,CAAC,CAAD,CAAjD,EAAsD,CAACA,KAAK,CAAC,CAAD,CAA5D,EAAiE,CAACA,KAAK,CAAC,CAAD,CAAvE,CAAP;AACD;;AAEM,SAASg4P,QAAT,CAAkBh4P,KAAlB,EAAyB;AAC9B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOi9H,mBAAP;AACnB,MAAI,CAAC06H,OAAL,EAAcA,OAAO,GAAGvtO,QAAQ,CAAC6tO,eAAT,CAAyB,4BAAzB,EAAuD,GAAvD,CAAV;AACdN,EAAAA,OAAO,CAACO,YAAR,CAAqB,WAArB,EAAkCl4P,KAAlC;AACA,MAAI,EAAEA,KAAK,GAAG23P,OAAO,CAAC1xE,SAAR,CAAkBkyE,OAAlB,CAA0BC,WAA1B,EAAV,CAAJ,EAAwD,OAAOn7H,mBAAP;AACxDj9H,EAAAA,KAAK,GAAGA,KAAK,CAACslN,MAAd;AACA,SAAO,wBAAUtlN,KAAK,CAACkE,CAAhB,EAAmBlE,KAAK,CAAC+K,CAAzB,EAA4B/K,KAAK,CAACyJ,CAAlC,EAAqCzJ,KAAK,CAAC6J,CAA3C,EAA8C7J,KAAK,CAACtE,CAApD,EAAuDsE,KAAK,CAAC2I,CAA7D,CAAP;AACD;;;;;;;;;ACxBD;;AACA;;;;AAEA,SAAS0vP,oBAAT,CAA8Bn5M,KAA9B,EAAqCo5M,OAArC,EAA8CC,OAA9C,EAAuDC,QAAvD,EAAiE;AAE/D,WAASpxO,GAAT,CAAa5mB,CAAb,EAAgB;AACd,WAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC4mB,GAAF,KAAU,GAArB,GAA2B,EAAlC;AACD;;AAED,WAASq2L,SAAT,CAAmBg7C,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAmCp4P,CAAnC,EAAsCk0F,CAAtC,EAAyC;AACvC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAO,YAAP,EAAqB,IAArB,EAA2Bq7P,OAA3B,EAAoC,IAApC,EAA0CC,OAA1C,CAAR;AACA7jK,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,IAAIC,EAAV,EAAc;AACnBp4P,MAAAA,CAAC,CAACvD,IAAF,CAAO,eAAe07P,EAAf,GAAoBL,OAApB,GAA8BM,EAA9B,GAAmCL,OAA1C;AACD;AACF;;AAED,WAAShB,MAAT,CAAgBrzP,CAAhB,EAAmB6G,CAAnB,EAAsBvK,CAAtB,EAAyBk0F,CAAzB,EAA4B;AAC1B,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX,UAAI7G,CAAC,GAAG6G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CAAjB,KAAgC,IAAIA,CAAC,GAAG7G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CADtC,CACgD;;AAC3DwwF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAhB,EAA2B,IAA3B,EAAiCg4P,QAAjC,IAA6C,CAAjD;AAAoDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAvD,OAAP;AACD,KAHD,MAGO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAT,GAAqBuK,CAArB,GAAyBytP,QAAhC;AACD;AACF;;AAED,WAAShB,KAAT,CAAetzP,CAAf,EAAkB6G,CAAlB,EAAqBvK,CAArB,EAAwBk0F,CAAxB,EAA2B;AACzB,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX2pF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgCg4P,QAAhC,IAA4C,CAAhD;AAAmDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAtD,OAAP;AACD,KAFD,MAEO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBuK,CAApB,GAAwBytP,QAA/B;AACD;AACF;;AAED,WAAS3lP,KAAT,CAAe4lP,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+Bp4P,CAA/B,EAAkCk0F,CAAlC,EAAqC;AACnC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,IAArC,EAA2C,GAA3C,CAAR;AACAk0F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AAC/Bp4P,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBm4P,EAApB,GAAyB,GAAzB,GAA+BC,EAA/B,GAAoC,GAA3C;AACD;AACF;;AAED,SAAO,UAAS10P,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIvK,CAAC,GAAG,EAAR;AAAA,QAAY;AACRk0F,IAAAA,CAAC,GAAG,EADR,CADoB,CAER;;AACZxwF,IAAAA,CAAC,GAAGg7C,KAAK,CAACh7C,CAAD,CAAT,EAAc6G,CAAC,GAAGm0C,KAAK,CAACn0C,CAAD,CAAvB;AACA0yM,IAAAA,SAAS,CAACv5M,CAAC,CAACmzP,UAAH,EAAenzP,CAAC,CAACozP,UAAjB,EAA6BvsP,CAAC,CAACssP,UAA/B,EAA2CtsP,CAAC,CAACusP,UAA7C,EAAyD92P,CAAzD,EAA4Dk0F,CAA5D,CAAT;AACA6iK,IAAAA,MAAM,CAACrzP,CAAC,CAACqzP,MAAH,EAAWxsP,CAAC,CAACwsP,MAAb,EAAqB/2P,CAArB,EAAwBk0F,CAAxB,CAAN;AACA8iK,IAAAA,KAAK,CAACtzP,CAAC,CAACszP,KAAH,EAAUzsP,CAAC,CAACysP,KAAZ,EAAmBh3P,CAAnB,EAAsBk0F,CAAtB,CAAL;AACA7hF,IAAAA,KAAK,CAAC3O,CAAC,CAACuzP,MAAH,EAAWvzP,CAAC,CAACwzP,MAAb,EAAqB3sP,CAAC,CAAC0sP,MAAvB,EAA+B1sP,CAAC,CAAC2sP,MAAjC,EAAyCl3P,CAAzC,EAA4Ck0F,CAA5C,CAAL;AACAxwF,IAAAA,CAAC,GAAG6G,CAAC,GAAG,IAAR,CARoB,CAQN;;AACd,WAAO,UAASrK,CAAT,EAAY;AACjB,UAAI1D,CAAC,GAAG,CAAC,CAAT;AAAA,UAAYkO,CAAC,GAAGwpF,CAAC,CAACp4F,MAAlB;AAAA,UAA0BqsB,CAA1B;;AACA,aAAO,EAAE3rB,CAAF,GAAMkO,CAAb,EAAgB1K,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAChB,aAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,KAJD;AAKD,GAdD;AAeD;;AAEM,IAAIi4P,uBAAuB,GAAGR,oBAAoB,CAACT,eAAD,EAAW,MAAX,EAAmB,KAAnB,EAA0B,MAA1B,CAAlD;;AACA,IAAIkB,uBAAuB,GAAGT,oBAAoB,CAACL,eAAD,EAAW,IAAX,EAAiB,GAAjB,EAAsB,GAAtB,CAAlD;;;;;;;;;AC9DP,IAAI7rI,GAAG,GAAGppH,IAAI,CAACyjO,KAAf;AAAA,IACIyyB,IAAI,GAAG,CADX;AAAA,IAEIC,IAAI,GAAG,CAFX;AAAA,IAGIH,QAAQ,GAAG,KAHf;;AAKA,SAAS1hP,IAAT,CAAclU,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAL,IAAoB,IAAIA,CAAzB,IAA8B,CAArC;AACD;;AAED,SAASiU,IAAT,CAAcjU,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAL,IAAoB,IAAIA,CAAzB,IAA8B,CAArC;AACD;;AAED,SAAS0B,IAAT,CAAc1B,CAAd,EAAiB;AACf,SAAO,CAAC,CAACA,CAAC,GAAGJ,IAAI,CAACiC,GAAL,CAAS,IAAI7B,CAAb,CAAL,IAAwB,CAAzB,KAA+BA,CAAC,GAAG,CAAnC,CAAP;AACD,EAED;AACA;;;AACe,kBAAS+7M,EAAT,EAAantF,EAAb,EAAiB;AAC9B,MAAIonI,GAAG,GAAGj6C,EAAE,CAAC,CAAD,CAAZ;AAAA,MAAiBk6C,GAAG,GAAGl6C,EAAE,CAAC,CAAD,CAAzB;AAAA,MAA8Bm6C,EAAE,GAAGn6C,EAAE,CAAC,CAAD,CAArC;AAAA,MACIo6C,GAAG,GAAGvnI,EAAE,CAAC,CAAD,CADZ;AAAA,MACiBwnI,GAAG,GAAGxnI,EAAE,CAAC,CAAD,CADzB;AAAA,MAC8BynI,EAAE,GAAGznI,EAAE,CAAC,CAAD,CADrC;AAAA,MAEIjpG,EAAE,GAAGwwO,GAAG,GAAGH,GAFf;AAAA,MAGIr3O,EAAE,GAAGy3O,GAAG,GAAGH,GAHf;AAAA,MAIIhzL,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAJxB;AAAA,MAKI9kB,CALJ;AAAA,MAMI23E,CANJ,CAD8B,CAS9B;;AACA,MAAIvO,EAAE,GAAG2yL,QAAT,EAAmB;AACjBpkL,IAAAA,CAAC,GAAG5xE,IAAI,CAACiK,GAAL,CAASwsP,EAAE,GAAGH,EAAd,IAAoBltI,GAAxB;;AACAnvH,IAAAA,CAAC,GAAG,UAAS0D,CAAT,EAAY;AACd,aAAO,CACLy4P,GAAG,GAAGz4P,CAAC,GAAGooB,EADL,EAELswO,GAAG,GAAG14P,CAAC,GAAGohB,EAFL,EAGLu3O,EAAE,GAAGt2P,IAAI,CAACiC,GAAL,CAASmnH,GAAG,GAAGzrH,CAAN,GAAUi0E,CAAnB,CAHA,CAAP;AAKD,KAND;AAOD,GATD,CAWA;AAXA,OAYK;AACH,UAAIxO,EAAE,GAAGpjE,IAAI,CAACqC,IAAL,CAAUghE,EAAV,CAAT;AAAA,UACIyqK,EAAE,GAAG,CAAC2oB,EAAE,GAAGA,EAAL,GAAUH,EAAE,GAAGA,EAAf,GAAoBH,IAAI,GAAG9yL,EAA5B,KAAmC,IAAIizL,EAAJ,GAASJ,IAAT,GAAgB9yL,EAAnD,CADT;AAAA,UAEI2qK,EAAE,GAAG,CAAC0oB,EAAE,GAAGA,EAAL,GAAUH,EAAE,GAAGA,EAAf,GAAoBH,IAAI,GAAG9yL,EAA5B,KAAmC,IAAIozL,EAAJ,GAASP,IAAT,GAAgB9yL,EAAnD,CAFT;AAAA,UAGIyuI,EAAE,GAAG7xM,IAAI,CAACiK,GAAL,CAASjK,IAAI,CAACqC,IAAL,CAAUyrO,EAAE,GAAGA,EAAL,GAAU,CAApB,IAAyBA,EAAlC,CAHT;AAAA,UAIIzhC,EAAE,GAAGrsM,IAAI,CAACiK,GAAL,CAASjK,IAAI,CAACqC,IAAL,CAAU0rO,EAAE,GAAGA,EAAL,GAAU,CAApB,IAAyBA,EAAlC,CAJT;AAKAn8J,MAAAA,CAAC,GAAG,CAACy6H,EAAE,GAAGwF,EAAN,IAAYzoF,GAAhB;;AACAnvH,MAAAA,CAAC,GAAG,UAAS0D,CAAT,EAAY;AACd,YAAIF,CAAC,GAAGE,CAAC,GAAGi0E,CAAZ;AAAA,YACI8kL,MAAM,GAAGpiP,IAAI,CAACu9L,EAAD,CADjB;AAAA,YAEI54H,CAAC,GAAGq9K,EAAE,IAAIJ,IAAI,GAAG9yL,EAAX,CAAF,IAAoBszL,MAAM,GAAG50P,IAAI,CAACsnH,GAAG,GAAG3rH,CAAN,GAAUo0M,EAAX,CAAb,GAA8Bx9L,IAAI,CAACw9L,EAAD,CAAtD,CAFR;AAGA,eAAO,CACLukD,GAAG,GAAGn9K,CAAC,GAAGlzD,EADL,EAELswO,GAAG,GAAGp9K,CAAC,GAAGl6D,EAFL,EAGLu3O,EAAE,GAAGI,MAAL,GAAcpiP,IAAI,CAAC80G,GAAG,GAAG3rH,CAAN,GAAUo0M,EAAX,CAHb,CAAP;AAKD,OATD;AAUD;;AAED53M,EAAAA,CAAC,CAAC08P,QAAF,GAAa/kL,CAAC,GAAG,IAAjB;AAEA,SAAO33E,CAAP;AACD;;;;;;;;;AC/DD;;AACA;;;;;;AAEA,SAAS42P,GAAT,CAAaoC,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,QAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEc8qP,GAAG,CAACoC,UAAD;;;AACX,IAAI8D,OAAO,GAAGlG,GAAG,CAACpB,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;AAEe,SAASqC,GAAT,CAAa/rP,KAAb,EAAoB6F,GAApB,EAAyB;AACtC,MAAIG,CAAC,GAAG,oBAAM,CAAChG,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BgG,CAAhC,EAAmC,CAACH,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsBG,CAAzD,CAAR;AAAA,MACI5K,CAAC,GAAG,oBAAM4E,KAAK,CAAC5E,CAAZ,EAAeyK,GAAG,CAACzK,CAAnB,CADR;AAAA,MAEI6G,CAAC,GAAG,oBAAMjC,KAAK,CAACiC,CAAZ,EAAe4D,GAAG,CAAC5D,CAAnB,CAFR;AAAA,MAGIyoP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,SAAO,UAAS9yP,CAAT,EAAY;AACjBoI,IAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC5E,CAAN,GAAUA,CAAC,CAACxD,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,WAAOoI,KAAK,GAAG,EAAf;AACD,GAND;AAOD;;;;;;;;;ACfD;;AACA;;;;;;AAEA,SAASosP,GAAT,CAAac,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI9/C,CAAC,GAAG,oBAAMX,KAAK,CAACW,CAAZ,EAAekF,GAAG,CAAClF,CAAnB,CADR;AAAA,QAEIqF,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACW,CAAN,GAAUA,CAAC,CAAC/I,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEcosP,GAAG,CAACc,UAAD;;;AACX,IAAI+D,OAAO,GAAG7E,GAAG,CAAC1C,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;;;AAEA,SAASqD,SAAT,CAAmBG,GAAnB,EAAwB;AACtB,SAAQ,SAASgE,cAAT,CAAwBt4O,CAAxB,EAA2B;AACjCA,IAAAA,CAAC,GAAG,CAACA,CAAL;;AAEA,aAASm0O,SAAT,CAAmB/sP,KAAnB,EAA0B6F,GAA1B,EAA+B;AAC7B,UAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,wBAAeA,KAAf,CAAT,EAAgCygD,CAAjC,EAAoC,CAAC56C,GAAG,GAAG,wBAAeA,GAAf,CAAP,EAA4B46C,CAAhE,CAAX;AAAA,UACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,UAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,UAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,aAAO,UAAS9yP,CAAT,EAAY;AACjBoI,QAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAAC/L,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAYghB,CAAZ,CAAD,CAAX;AACA5Y,QAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,eAAOoI,KAAK,GAAG,EAAf;AACD,OAND;AAOD;;AAED+sP,IAAAA,SAAS,CAACz5F,KAAV,GAAkB49F,cAAlB;AAEA,WAAOnE,SAAP;AACD,GApBM,CAoBJ,CApBI,CAAP;AAqBD;;eAEcA,SAAS,CAACG,UAAD;;;AACjB,IAAIiE,aAAa,GAAGpE,SAAS,CAACrD,cAAD,CAA7B;;;;;;;;;;AC5BQ,SAAS0H,SAAT,CAAmBC,WAAnB,EAAgC/yP,MAAhC,EAAwC;AACrD,MAAIpK,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAA/B;AAAA,MAAkC4S,CAAC,GAAG9H,MAAM,CAAC,CAAD,CAA5C;AAAA,MAAiD8zM,CAAC,GAAG,IAAIp+M,KAAJ,CAAUoO,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAtB,CAArD;;AACA,SAAOlO,CAAC,GAAGkO,CAAX,EAAcgwM,CAAC,CAACl+M,CAAD,CAAD,GAAOm9P,WAAW,CAACjrP,CAAD,EAAIA,CAAC,GAAG9H,MAAM,CAAC,EAAEpK,CAAH,CAAd,CAAlB;;AACd,SAAO,UAAS0D,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAASgI,CAAC,GAAG,CAAb,EAAgBnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,IAAIwK,CAAhB,CAAhB,CAAZ,CAAR;AACA,WAAOgwM,CAAC,CAACl+M,CAAD,CAAD,CAAK0D,CAAC,GAAG1D,CAAT,CAAP;AACD,GAHD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEPD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;ACpBA;;AACA;;AACA;;;;;;AAEA,MAAMmkQ,UAAU,GAAG,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,EAA8B,UAA9B,CAAnB;;AAEO,SAASC,gBAAT,CAA0BtZ,YAA1B,EAAwCtpN,KAAxC,EAA+C;AACpD,QAAM11B,KAAK,GAAG01B,KAAK,CAAC,CAAD,CAAnB;AAAA,QACMo1K,IAAI,GAAG,oBAAKp1K,KAAL,IAAc11B,KAD3B;AAEA,SAAO,UAAS9L,CAAT,EAAY;AAAE,WAAO8qP,YAAY,CAACh/O,KAAK,GAAG9L,CAAC,GAAG42M,IAAb,CAAnB;AAAwC,GAA7D;AACD;;AAEM,SAASytD,iBAAT,CAA2BhL,MAA3B,EAAmCp5O,IAAnC,EAAyCm/I,KAAzC,EAAgD;AACrD,SAAOo5C,CAAC,CAAC0kD,SAAF,CAAYC,WAAW,CAACl9O,IAAI,IAAI,KAAT,EAAgBm/I,KAAhB,CAAvB,EAA+Ci6F,MAA/C,CAAP;AACD;;AAEM,SAASiL,oBAAT,CAA8BxZ,YAA9B,EAA4C/yK,KAA5C,EAAmD;AACxD,QAAMm0D,OAAO,GAAG,IAAIpsI,KAAJ,CAAUi4E,KAAV,CAAhB;AAAA,QACM7pE,CAAC,GAAG6pE,KAAK,GAAG,CADlB;;AAEA,OAAK,IAAI/3E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,KAApB,GAA4Bm0D,OAAO,CAAClsI,CAAD,CAAP,GAAa8qP,YAAY,CAAC,EAAE9qP,CAAF,GAAMkO,CAAP,CAAzB;;AAC5B,SAAOg+H,OAAP;AACD;;AAEM,SAASq4H,SAAT,CAAmB1uP,KAAnB,EAA0B;AAC/B,QAAMnS,CAAC,GAAGmS,KAAK,CAACoK,IAAhB;AAAA,QACMzc,CAAC,GAAGqS,KAAK,CAACi/D,IAAN,EADV;AAEAtxE,EAAAA,CAAC,CAACyc,IAAF,GAASvc,CAAT;AACA,SAAOF,CAAP;AACD;;AAEM,SAASghQ,aAAT,CAAuB3uP,KAAvB,EAA8B3P,GAA9B,EAAmCE,GAAnC,EAAwC;AAC7C,MAAIuvF,KAAK,GAAGvvF,GAAG,GAAGF,GAAlB;AAAA,MAAuBlG,CAAvB;AAAA,MAA0B0D,CAA1B;AAAA,MAA6BF,CAA7B;;AAEA,MAAI,CAACmyF,KAAD,IAAU,CAACvoF,MAAM,CAACvC,QAAP,CAAgB8qF,KAAhB,CAAf,EAAuC;AACrC,WAAO,wBAAS,GAAT,CAAP;AACD,GAFD,MAEO;AACL31F,IAAAA,CAAC,GAAG,CAAC0D,CAAC,GAAGmS,KAAK,CAACoK,IAAX,EAAiBmd,OAAjB,CAAyB,GAAzB,CAAJ;AACA15B,IAAAA,CAAC,GAAG1D,CAAC,GAAG,CAAJ,GAAQ0D,CAAR,GAAYA,CAAC,CAAC2F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAAhB;AACAwD,IAAAA,CAAC,GAAG,mBAASE,CAAT,IAAc0xM,MAAd,CAAqB,CAAClvM,GAAD,EAAME,GAAN,CAArB,EAAiCo7B,KAAjC,CAAuC,CAAC,CAAD,EAAI,CAAJ,CAAvC,CAAJ;AACA2iO,IAAAA,UAAU,CAACrgQ,OAAX,CAAmB2zF,CAAC,IAAI5hF,KAAK,CAAC4hF,CAAD,CAAL,GAAWj0F,CAAC,CAACi0F,CAAD,CAAD,CAAK5hF,KAAK,CAAC4hF,CAAD,CAAL,EAAL,CAAX,GAA8B,CAAtD;AACA,WAAOj0F,CAAP;AACD;AACF;;AAEM,SAAS25P,WAAT,CAAqBl9O,IAArB,EAA2Bm/I,KAA3B,EAAkC;AACvC,QAAMslG,MAAM,GAAGlsD,CAAC,CAACvnK,MAAM,CAAChxB,IAAD,CAAP,CAAhB;AACA,SAAQm/I,KAAK,IAAI,IAAT,IAAiBslG,MAAjB,IAA2BA,MAAM,CAACtlG,KAAnC,GACHslG,MAAM,CAACtlG,KAAP,CAAaA,KAAb,CADG,GAEHslG,MAFJ;AAGD;;AAED,SAASzzN,MAAT,CAAgBhxB,IAAhB,EAAsB;AACpB,SAAO,gBAAgBA,IAAI,CAAC9b,WAAL,GACpBN,KADoB,CACd,GADc,EAEpB4F,GAFoB,CAEhB,UAASjG,CAAT,EAAY;AAAE,WAAOA,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAA5B;AAAyC,GAFvC,EAGpBzF,IAHoB,CAGf,EAHe,CAAvB;AAID;;;;;;;;ACxDM,MAAMi6P,UAAU,GAAG;AACxB8G,EAAAA,KAAK,EAAE,oEADiB;AAExBC,EAAAA,MAAM,EAAE,oEAFgB;AAGxBC,EAAAA,KAAK,EAAE,oEAHiB;AAIxBC,EAAAA,OAAO,EAAE,oEAJe;AAKxBC,EAAAA,OAAO,EAAE,oEALe;AAMxBC,EAAAA,IAAI,EAAE,oEANkB;AAQxBC,EAAAA,SAAS,EAAE,oEARa;AASxBC,EAAAA,UAAU,EAAE,oEATY;AAUxBC,EAAAA,SAAS,EAAE,oEAVa;AAWxBC,EAAAA,SAAS,EAAE,oEAXa;AAYxBC,EAAAA,UAAU,EAAE,oEAZY;AAaxBC,EAAAA,eAAe,EAAE,oEAbO;AAcxBC,EAAAA,SAAS,EAAE,oEAda;AAexBC,EAAAA,SAAS,EAAE,oEAfa;AAgBxBC,EAAAA,WAAW,EAAE,oEAhBW;AAiBxBC,EAAAA,iBAAiB,EAAE,oEAjBK;AAkBxBC,EAAAA,eAAe,EAAE,oEAlBO;AAoBxBC,EAAAA,UAAU,EAAE,oEApBY;AAqBxBC,EAAAA,cAAc,EAAE,oEArBQ;AAsBxBC,EAAAA,WAAW,EAAE,oEAtBW;AAuBxBC,EAAAA,YAAY,EAAE,oEAvBU;AAwBxBC,EAAAA,OAAO,EAAE,oEAxBe;AAyBxBC,EAAAA,OAAO,EAAE,oEAzBe;AA0BxBC,EAAAA,eAAe,EAAE,oEA1BO;AA2BxBC,EAAAA,aAAa,EAAE,oEA3BS;AA4BxBC,EAAAA,cAAc,EAAE,oEA5BQ;AA6BxBC,EAAAA,eAAe,EAAE,oEA7BO;AA8BxBpoP,EAAAA,QAAQ,EAAE,oEA9Bc;AAgCxBqoP,EAAAA,OAAO,EAAE,4LAhCe;AAiCxBC,EAAAA,KAAK,EAAE,4LAjCiB;AAkCxBC,EAAAA,OAAO,EAAE,4LAlCe;AAmCxBC,EAAAA,MAAM,EAAE,4LAnCgB;AAqCxBE,EAAAA,OAAO,EAAE,4LArCe;AAsCxBC,EAAAA,OAAO,EAAE,4LAtCe;AAwCxBE,EAAAA,MAAM,EAAE,oEAxCgB;AAyCxBC,EAAAA,SAAS,EAAE,wDAzCa;AA0CxBC,EAAAA,KAAK,EAAE,oEA1CiB;AA2CxBC,EAAAA,SAAS,EAAE,oEA3Ca;AA6CxBC,EAAAA,SAAS,EAAE,oEA7Ca;AA8CxBC,EAAAA,UAAU,EAAE,oEA9CY;AA+CxBC,EAAAA,OAAO,EAAE,oEA/Ce;AAiDxBC,EAAAA,YAAY,EAAE,8DAjDU;AAkDxBC,EAAAA,aAAa,EAAE,8DAlDS;AAmDxBC,EAAAA,UAAU,EAAE,wDAnDY;AAoDxBC,EAAAA,WAAW,EAAE,8DApDW;AAqDxBC,EAAAA,aAAa,EAAE,8DArDS;AAuDxBC,EAAAA,QAAQ,EAAE,8DAvDc;AAwDxBC,EAAAA,QAAQ,EAAE,8DAxDc;AAyDxBC,EAAAA,SAAS,EAAE,8DAzDa;AA0DxBC,EAAAA,SAAS,EAAE,4CA1Da;AA2DxBC,EAAAA,OAAO,EAAE;AA3De,CAAnB;;AA8DA,MAAMC,QAAQ,GAAG;AACtBC,EAAAA,UAAU,EAAE,8DADU;AAEtBC,EAAAA,UAAU,EAAE,0HAFU;AAGtBC,EAAAA,WAAW,EAAE,0HAHS;AAItBC,EAAAA,WAAW,EAAE,0HAJS;AAKtBC,EAAAA,SAAS,EAAE,8DALW;AAMtBC,EAAAA,SAAS,EAAE,0HANW;AAOtBC,EAAAA,MAAM,EAAE,kDAPc;AAQtBC,EAAAA,KAAK,EAAE,kDARe;AAStBC,EAAAA,MAAM,EAAE,0EATc;AAUtBC,EAAAA,OAAO,EAAE,wDAVa;AAWtBC,EAAAA,OAAO,EAAE,kDAXa;AAYtBC,EAAAA,IAAI,EAAE,wDAZgB;AAatBC,EAAAA,IAAI,EAAE,kDAbgB;AActBC,EAAAA,IAAI,EAAE;AAdgB,CAAjB;;;;;;;;;;AC9DP;;AACA;;AAEA,SAASxP,MAAT,CAAgByP,OAAhB,EAAyB;AACvB,QAAM56P,CAAC,GAAG46P,OAAO,CAACxpQ,MAAR,GAAiB,CAAjB,GAAqB,CAA/B;AAAA,QACMmN,CAAC,GAAG,IAAI3M,KAAJ,CAAUoO,CAAV,CADV;;AAGA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,GAAwB;AACtBzB,IAAAA,CAAC,CAACzM,CAAD,CAAD,GAAO,MAAM8oQ,OAAO,CAACz/P,KAAR,CAAcrJ,CAAC,GAAG,CAAlB,EAAqB,EAAEA,CAAF,GAAM,CAA3B,CAAb;AACD;;AACD,SAAOyM,CAAP;AACD;;AAED,SAASpM,KAAT,CAAesmB,CAAf,EAAkBhb,CAAlB,EAAqB;AACnB,OAAK,MAAM2R,CAAX,IAAgBqJ,CAAhB,EAAmBm2F,MAAM,CAACx/F,CAAD,EAAI3R,CAAC,CAACgb,CAAC,CAACrJ,CAAD,CAAF,CAAL,CAAN;AACpB;;AAED,MAAM6uG,OAAO,GAAG,EAAhB;AACA9rH,KAAK,CAAC0nQ,kBAAD,EAAW1O,MAAX,CAAL;AACAh5P,KAAK,CAACw9P,oBAAD,EAAal3O,CAAC,IAAI,oCAAkB0yO,MAAM,CAAC1yO,CAAD,CAAxB,CAAlB,CAAL;;AAEO,SAASm2F,MAAT,CAAgBv7G,IAAhB,EAAsBu7G,MAAtB,EAA8B;AACnCv7G,EAAAA,IAAI,GAAGA,IAAI,IAAIA,IAAI,CAAC4C,WAAL,EAAf;;AACA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6sH,IAAAA,OAAO,CAAC5qH,IAAD,CAAP,GAAgBu7G,MAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOqP,OAAO,CAAC5qH,IAAD,CAAd;AACD;AACF;;;;;;;;AC7BM,MAAMwnQ,YAAY,GAAI,QAAtB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;;;;;;;;;;;;;ACFP;;AACA;;AACA;;AACA;;AAEA,MAAMC,gBAAgB,GAAGlmQ,KAAK,IAAI,uBAAQA,KAAR,IAC9BA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAI5G,MAAM,CAAC4G,CAAD,CAArB,CAD8B,GAE9B5G,MAAM,CAACtI,KAAD,CAFV;;AAIA,MAAMo2M,SAAS,GAAG,CAAClyM,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAApC;;AACA,MAAM21O,UAAU,GAAG,CAACx8O,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAArC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASiiQ,SAAT,CAAmBtzP,KAAnB,EAA0BkiE,KAA1B,EAAiCqxL,OAAjC,EAA0C;AAC/C,MAAI1uP,IAAJ;;AAEA,MAAI,wBAASq9D,KAAT,CAAJ,EAAqB;AACnB,QAAIliE,KAAK,CAACixM,IAAV,EAAgB;AACd/uI,MAAAA,KAAK,GAAGhyE,IAAI,CAACK,GAAL,CAAS2xE,KAAT,EAAgBliE,KAAK,CAACixM,IAAN,CAAWxnN,MAA3B,CAAR;AACD;;AACD,QAAI8pQ,OAAO,IAAI,IAAf,EAAqB;AACnBrxL,MAAAA,KAAK,GAAGhyE,IAAI,CAACG,GAAL,CACN6xE,KADM,EAENhyE,IAAI,CAAC+H,KAAL,CAAY,oBAAK+H,KAAK,CAACu/L,MAAN,EAAL,IAAuBg0D,OAAxB,IAAoC,CAA/C,CAFM,CAAR;AAID;AACF;;AAED,MAAI,wBAASrxL,KAAT,CAAJ,EAAqB;AACnBr9D,IAAAA,IAAI,GAAGq9D,KAAK,CAACr9D,IAAb;AACAq9D,IAAAA,KAAK,GAAGA,KAAK,CAACszI,QAAd;AACD;;AAED,MAAI,wBAAStzI,KAAT,CAAJ,EAAqB;AACnBA,IAAAA,KAAK,GAAGliE,KAAK,CAACoK,IAAN,KAAeihP,WAAf,GAAsB,4BAAanpL,KAAb,CAAtB,GACJliE,KAAK,CAACoK,IAAN,IAAciyM,UAAd,GAAoB,2BAAYn6I,KAAZ,CAApB,GACA,qBAAM,mDAAN,CAFJ;AAGA,QAAIr9D,IAAJ,EAAUq9D,KAAK,GAAGA,KAAK,CAACruE,KAAN,CAAYgR,IAAZ,CAAR;AACX;;AAED,SAAOq9D,KAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASsxL,UAAT,CAAoBxzP,KAApB,EAA2BmwM,KAA3B,EAAkCjuI,KAAlC,EAAyC;AAC9C,MAAIv2C,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,MACIk1K,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIm1K,EAAE,GAAG,oBAAKn1K,KAAL,CAFT;AAAA,MAGI6qK,GAAG,GAAG+M,SAHV;;AAKA,MAAI1C,EAAE,GAAGC,EAAT,EAAa;AACXn1K,IAAAA,KAAK,GAAGm1K,EAAR;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGl1K,KAAL;AACA6qK,IAAAA,GAAG,GAAGq3C,UAAN;AACD;;AAEDhtC,EAAAA,EAAE,GAAG3wM,IAAI,CAAC+H,KAAL,CAAW4oM,EAAX,CAAL;AACAC,EAAAA,EAAE,GAAG5wM,IAAI,CAACoC,IAAL,CAAUwuM,EAAV,CAAL,CAd8C,CAgB9C;AACA;;AACAqP,EAAAA,KAAK,GAAGA,KAAK,CAACv8M,GAAN,CAAUyI,CAAC,IAAI,CAACA,CAAD,EAAI2D,KAAK,CAAC3D,CAAD,CAAT,CAAf,EACLiJ,MADK,CACEwL,CAAC,IAAI+vL,EAAE,IAAI/vL,CAAC,CAAC,CAAD,CAAP,IAAcA,CAAC,CAAC,CAAD,CAAD,IAAQgwL,EAD7B,EAEL3sM,IAFK,CAEAqiM,GAFA,EAGL5iM,GAHK,CAGDkd,CAAC,IAAIA,CAAC,CAAC,CAAD,CAHL,CAAR;;AAKA,MAAIoxD,KAAK,GAAG,CAAR,IAAaiuI,KAAK,CAAC1mN,MAAN,GAAe,CAAhC,EAAmC;AACjC,UAAMgqQ,SAAS,GAAG,CAACtjD,KAAK,CAAC,CAAD,CAAN,EAAW,oBAAKA,KAAL,CAAX,CAAlB;;AACA,WAAOA,KAAK,CAAC1mN,MAAN,GAAey4E,KAAf,IAAwBiuI,KAAK,CAAC1mN,MAAN,IAAgB,CAA/C,EAAkD;AAChD0mN,MAAAA,KAAK,GAAGA,KAAK,CAAC7qM,MAAN,CAAa,CAACwL,CAAD,EAAI3mB,CAAJ,KAAU,EAAEA,CAAC,GAAG,CAAN,CAAvB,CAAR;AACD;;AACD,QAAIgmN,KAAK,CAAC1mN,MAAN,GAAe,CAAnB,EAAsB;AACpB0mN,MAAAA,KAAK,GAAGsjD,SAAR;AACD;AACF;;AAED,SAAOtjD,KAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASujD,UAAT,CAAoB1zP,KAApB,EAA2BkiE,KAA3B,EAAkC;AACvC,SAAOliE,KAAK,CAACixM,IAAN,GAAauiD,UAAU,CAACxzP,KAAD,EAAQA,KAAK,CAACixM,IAAd,CAAvB,GACHjxM,KAAK,CAACmwM,KAAN,GAAcnwM,KAAK,CAACmwM,KAAN,CAAYjuI,KAAZ,CAAd,GACAliE,KAAK,CAACu/L,MAAN,EAFJ;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS0oD,UAAT,CAAoB/zC,MAApB,EAA4Bl0M,KAA5B,EAAmCkiE,KAAnC,EAA0CsxI,SAA1C,EAAqDoB,UAArD,EAAiE++C,MAAjE,EAAyE;AAC9E,QAAMvpP,IAAI,GAAGpK,KAAK,CAACoK,IAAnB;AACA,MAAIsiG,MAAM,GAAG2mJ,gBAAb;;AAEA,MAAIjpP,IAAI,KAAKihP,WAAT,IAAiBz2C,UAAU,KAAKy2C,WAApC,EAA0C;AACxC3+I,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8S,UAAP,CAAkBxT,SAAlB,CAAT;AACD,GAFD,MAGK,IAAIppM,IAAI,KAAKiyM,UAAT,IAAgBzH,UAAU,KAAKyH,UAAnC,EAAwC;AAC3C3vG,IAAAA,MAAM,GAAGwnG,MAAM,CAACmS,SAAP,CAAiB7S,SAAjB,CAAT;AACD,GAFI,MAGA,IAAI,2BAAcppM,IAAd,CAAJ,EAAyB;AAC5B,UAAMwpP,MAAM,GAAG1/C,MAAM,CAAC6T,WAAP,CAAmBvU,SAAnB,CAAf;;AACA,QAAImgD,MAAM,IAAI3zP,KAAK,CAACixM,IAApB,EAA0B;AACxBvkG,MAAAA,MAAM,GAAGknJ,MAAT;AACD,KAFD,MAEO;AACL,YAAM97O,IAAI,GAAG+7O,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,KAAf,CAApB;;AACAwqC,MAAAA,MAAM,GAAG57F,CAAC,IAAIgH,IAAI,CAAChH,CAAD,CAAJ,GAAU8iP,MAAM,CAAC9iP,CAAD,CAAhB,GAAsB,EAApC;AACD;AACF,GARI,MASA,IAAI9Q,KAAK,CAACioP,UAAV,EAAsB;AACzB;AACA,UAAMjxP,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA7yF,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8T,UAAP,CAAkBhxN,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAzB,EAAyCy4E,KAAzC,EAAgDsxI,SAAhD,CAAT;AACD,GAJI,MAKA,IAAIA,SAAJ,EAAe;AAClB9mG,IAAAA,MAAM,GAAGwnG,MAAM,CAACxnG,MAAP,CAAc8mG,SAAd,CAAT;AACD;;AAED,SAAO9mG,MAAP;AACD;;AAEM,SAASmnJ,OAAT,CAAiB7zP,KAAjB,EAAwBkiE,KAAxB,EAA+B3tE,MAA/B,EAAuC;AAC5C,QAAM47M,KAAK,GAAGujD,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAAxB;AAAA,QACM/sC,IAAI,GAAGn1B,KAAK,CAACm1B,IAAN,EADb;AAAA,QAEMw9L,IAAI,GAAGziO,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAFb;AAAA,QAGM1tB,CAAC,GAAGvX,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY4kC,IAAI,GAAG+sC,KAAP,GAAeiuI,KAAK,CAAC1mN,MAAjC,CAHV,CAD4C,CAM5C;;AACA,QAAMquB,IAAI,GAAG9gB,CAAC,IAAI;AAChB,QAAI7M,CAAC,GAAG6M,CAAC,GAAG9G,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAejlC,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACiK,GAAL,CAASnD,CAAT,IAAc27N,IAAzB,CAAf,CAAZ;AACA,QAAIxoO,CAAC,GAAGgrC,IAAJ,GAAWA,IAAI,GAAG,GAAtB,EAA2BhrC,CAAC,IAAIgrC,IAAL;AAC3B,WAAOhrC,CAAC,IAAIsd,CAAZ;AACD,GAJD;;AAMA,SAAOlT,MAAM,GAAG47M,KAAK,CAAC7qM,MAAN,CAAawS,IAAb,CAAH,GAAwBA,IAArC;AACD;;;;;;;;;;;;ACxKD;;AACA;;AACA;;AACA;;AAEA,MAAM63N,OAAO,GAAG;AACd,GAACvL,eAAD,GAAa,WADC;AAEd,GAACmnB,eAAD,GAAa,YAFC;AAGd,GAACC,gBAAD,GAAa;AAHC,CAAhB;AAMA,MAAM/8C,OAAO,GAAG;AACd,GAAC21B,eAAD,GAAa,WADC;AAEd,GAACmnB,eAAD,GAAa;AAFC,CAAhB;;AAKO,SAASuI,WAAT,CAAqB9zP,KAArB,EAA4BkiE,KAA5B,EAAmC;AACxC,SAAOliE,KAAK,CAACixM,IAAN,GAAa8iD,SAAS,CAAC/zP,KAAK,CAACixM,IAAP,CAAtB,GACHjxM,KAAK,CAACoK,IAAN,KAAe6gP,UAAf,GAAqB,oBAAQjrP,KAAR,EAAekiE,KAAf,EAAsB,IAAtB,CAArB,GACAytK,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,GAAsB4pP,eAAe,CAACh0P,KAAK,CAAC2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAD,CAArC,GACA,uBAAWpK,KAAX,EAAkBkiE,KAAlB,CAHJ;AAID;;AAEM,SAAS+xL,eAAT,CAAyB//C,MAAzB,EAAiCl0M,KAAjC,EAAwCwzM,SAAxC,EAAmD;AACxD,MAAI1iM,CAAC,GAAG9Q,KAAK,CAACyuM,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAR;AAAA,MACI/R,CAAC,GAAGyY,CAAC,CAACrnB,MADV;AAAA,MAEIuN,CAAC,GAAGqB,CAAC,GAAG,CAAJ,GAAQyY,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAhB,GAAsBA,CAAC,CAAC,CAAD,CAF/B;AAAA,MAEoC3mB,CAFpC;;AAIA,OAAKA,CAAC,GAAC,CAAP,EAAUA,CAAC,GAACkO,CAAZ,EAAe,EAAElO,CAAjB,EAAoB;AAClB6M,IAAAA,CAAC,GAAG9G,IAAI,CAACG,GAAL,CAAS2G,CAAT,EAAY8Z,CAAC,CAAC3mB,CAAD,CAAD,GAAO2mB,CAAC,CAAC3mB,CAAC,GAAC,CAAH,CAApB,CAAJ;AACD,GAPuD,CASxD;;;AACA,SAAO+pN,MAAM,CAAC8T,UAAP,CAAkB,CAAlB,EAAqBhxN,CAArB,EAAwB,IAAI,EAA5B,EAAgCw8M,SAAhC,CAAP;AACD;;AAED,SAASwgD,eAAT,CAAyB7iD,UAAzB,EAAqC;AACnC,QAAM58M,MAAM,GAAG,CAAC,CAACtC,QAAF,EAAYvI,MAAZ,CAAmBynN,UAAnB,CAAf;AACA58M,EAAAA,MAAM,CAAChE,GAAP,GAAa,CAAC0B,QAAd;AACA,SAAOsC,MAAP;AACD;;AAED,SAASw/P,SAAT,CAAmB9iD,IAAnB,EAAyB;AACvB,QAAM18M,MAAM,GAAG08M,IAAI,CAACz9M,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf,CAAf;AACAe,EAAAA,MAAM,CAAChE,GAAP,GAAa,oBAAK0gN,IAAL,CAAb;AACA,SAAO18M,MAAP;AACD;;AAED,MAAM2/P,eAAe,GAAGl0P,KAAK,IAC3B2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,IAAuBpK,KAAK,CAACixM,IAD/B;;AAGO,SAASkjD,WAAT,CAAqBjgD,MAArB,EAA6Bl0M,KAA7B,EAAoCkiE,KAApC,EAA2C93D,IAA3C,EAAiDopM,SAAjD,EAA4DoB,UAA5D,EAAwE++C,MAAxE,EAAgF;AACrF,QAAMjnJ,MAAM,GAAG+hG,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAP,IAAuBwqM,UAAU,KAAKy2C,WAAtC,IAA8Cz2C,UAAU,KAAKyH,UAA7D,GACX43C,eAAe,CAAC//C,MAAD,EAASl0M,KAAT,EAAgBwzM,SAAhB,CADJ,GAEX,uBAAWU,MAAX,EAAmBl0M,KAAnB,EAA0BkiE,KAA1B,EAAiCsxI,SAAjC,EAA4CoB,UAA5C,EAAwD++C,MAAxD,CAFJ;AAIA,SAAOvpP,IAAI,KAAK8oP,yBAAT,IAAyBgB,eAAe,CAACl0P,KAAD,CAAxC,GAAkDo0P,WAAW,CAAC1nJ,MAAD,CAA7D,GACHtiG,IAAI,KAAK+oP,2BAAT,GAA0BkB,cAAc,CAAC3nJ,MAAD,CAAxC,GACA4nJ,WAAW,CAAC5nJ,MAAD,CAFf;AAGD;;AAED,MAAM0nJ,WAAW,GAAG1nJ,MAAM,IACxB,CAACv/G,KAAD,EAAQ8C,KAAR,EAAe3F,KAAf,KAAyB;AACvB,QAAM61E,KAAK,GAAGlzE,GAAG,CAAC3C,KAAK,CAAC2F,KAAK,GAAG,CAAT,CAAN,EAAmBhD,GAAG,CAAC3C,KAAK,CAACiG,GAAP,EAAY,CAAC0B,QAAb,CAAtB,CAAjB;AAAA,QACM4uM,EAAE,GAAG6H,WAAW,CAACv7M,KAAD,EAAQu/G,MAAR,CADtB;AAAA,QAEMo0F,EAAE,GAAG4H,WAAW,CAACvoI,KAAD,EAAQusC,MAAR,CAFtB;AAGA,SAAOm0F,EAAE,IAAIC,EAAN,GAAWD,EAAE,GAAG,UAAL,GAAkBC,EAA7B,GAAkCA,EAAE,GAAG,OAAOA,EAAV,GAAe,YAAYD,EAAtE;AACD,CANH;;AAQA,MAAM5zM,GAAG,GAAG,CAACE,KAAD,EAAQonQ,IAAR,KACVpnQ,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBonQ,IAD1B;;AAGA,MAAMF,cAAc,GAAG3nJ,MAAM,IAC3B,CAACv/G,KAAD,EAAQ8C,KAAR,KAAkBA,KAAK,GAAGy8G,MAAM,CAACv/G,KAAD,CAAT,GAAmB,IAD5C;;AAGA,MAAMmnQ,WAAW,GAAG5nJ,MAAM,IACxBv/G,KAAK,IAAIu/G,MAAM,CAACv/G,KAAD,CADjB;;AAGA,MAAMu7M,WAAW,GAAG,CAACv7M,KAAD,EAAQu/G,MAAR,KAClBn1G,MAAM,CAACvC,QAAP,CAAgB7H,KAAhB,IAAyBu/G,MAAM,CAACv/G,KAAD,CAA/B,GAAyC,IAD3C;;AAGO,SAASqnQ,aAAT,CAAuBx0P,KAAvB,EAA8B;AACnC,MAAIu/L,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAb;AAAA,MACIr9H,KAAK,GAAGq9H,MAAM,CAAC91M,MAAP,GAAgB,CAD5B;AAAA,MAEIo3M,EAAE,GAAG,CAACtB,MAAM,CAAC,CAAD,CAFhB;AAAA,MAGIuB,EAAE,GAAG,CAAC,oBAAKvB,MAAL,CAHV;AAAA,MAIIwB,IAAI,GAAGD,EAAE,GAAGD,EAJhB;;AAMA,MAAI7gM,KAAK,CAACoK,IAAN,KAAeohP,gBAAnB,EAA8B;AAC5B,UAAMiJ,MAAM,GAAGvyL,KAAK,GAAG6+H,IAAI,GAAG7+H,KAAV,GAAkB,GAAtC;AACA2+H,IAAAA,EAAE,IAAI4zD,MAAN;AACA3zD,IAAAA,EAAE,IAAI2zD,MAAN;AACA1zD,IAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AACD;;AAED,SAAO1zM,KAAK,IAAI,CAACA,KAAK,GAAG0zM,EAAT,IAAeE,IAA/B;AACD;;;;;;;;;AChGD;;AACA;;AACA;;AACA;;AAEA,SAASr0F,MAAT,CAAgBwnG,MAAhB,EAAwBl0M,KAAxB,EAA+BwzM,SAA/B,EAA0CoB,UAA1C,EAAsD;AACpD,QAAMxqM,IAAI,GAAGwqM,UAAU,IAAI50M,KAAK,CAACoK,IAAjC,CADoD,CAGpD;;AACA,MAAI,wBAASopM,SAAT,KAAuB,wBAAWppM,IAAX,CAA3B,EAA6C;AAC3CopM,IAAAA,SAAS,GAAGA,SAAS,CAAC9lN,OAAV,CAAkB,KAAlB,EAAyB,IAAzB,EAA+BA,OAA/B,CAAuC,KAAvC,EAA8C,IAA9C,CAAZ;AACD;;AAED,SAAO,CAAC8lN,SAAD,IAAcppM,IAAI,KAAKihP,WAAvB,GAA+Bn3C,MAAM,CAAC8S,UAAP,CAAkB,kBAAlB,CAA/B,GACH,CAACxT,SAAD,IAAcppM,IAAI,KAAKiyM,UAAvB,GAA6BnI,MAAM,CAACmS,SAAP,CAAiB,sBAAjB,CAA7B,GACA,yBAAYnS,MAAZ,EAAoBl0M,KAApB,EAA2B,CAA3B,EAA8B,IAA9B,EAAoCwzM,SAApC,EAA+CoB,UAA/C,EAA2D,IAA3D,CAFJ;AAGD;;AAEM,SAAS8/C,aAAT,CAAuBxgD,MAAvB,EAA+Bl0M,KAA/B,EAAsCo+L,GAAtC,EAA2C;AAChDA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA,QAAM7tM,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY6tM,GAAG,CAACkjC,MAAJ,IAAc,CAA1B,CAAZ;AAAA,QACMjmB,GAAG,GAAG3uG,MAAM,CAACwnG,MAAD,EAASl0M,KAAT,EAAgBo+L,GAAG,CAAC1xF,MAApB,EAA4B0xF,GAAG,CAACwW,UAAhC,CADlB,CAFgD,CAKhD;;AACA,MAAI,4BAAe50M,KAAK,CAACoK,IAArB,CAAJ,EAAgC;AAC9B,UAAM/N,CAAC,GAAG,yBAAY2D,KAAZ,EAAmBxM,KAAnB,CAAyB,CAAzB,EAA4BI,GAA5B,CAAgCynN,GAAhC,CAAV;AAAA,UACMhjN,CAAC,GAAGgE,CAAC,CAAC5S,MADZ;AAEA,WAAQ,GAAE4O,CAAE,WAAUA,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,KAAM,KAAIgE,CAAC,CAACtO,IAAF,CAAO,IAAP,CAAa,EAA7D;AACD,GAJD,CAMA;AANA,OAOK,IAAI,wBAAWiS,KAAK,CAACoK,IAAjB,CAAJ,EAA4B;AAC/B,YAAMpT,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AAAA,YACMlnM,CAAC,GAAGrB,CAAC,CAACvN,MADZ;AAAA,YAEM4S,CAAC,GAAGhE,CAAC,GAAG9H,GAAJ,GACAyG,CAAC,CAACxD,KAAF,CAAQ,CAAR,EAAWjD,GAAG,GAAG,CAAjB,EAAoBqD,GAApB,CAAwBynN,GAAxB,EAA6BttN,IAA7B,CAAkC,IAAlC,IACE,gBADF,GACqBiJ,CAAC,CAACxD,KAAF,CAAQ,CAAC,CAAT,EAAYI,GAAZ,CAAgBynN,GAAhB,CAFrB,GAGArkN,CAAC,CAACpD,GAAF,CAAMynN,GAAN,EAAWttN,IAAX,CAAgB,IAAhB,CALV;AAMA,aAAQ,GAAEsK,CAAE,SAAQA,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAAI,KAAIgE,CAAE,EAA7C;AACD,KARI,CAUL;AAVK,SAWA;AACH,cAAMrF,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA,eAAQ,eAAc8b,GAAG,CAACrkN,CAAC,CAAC,CAAD,CAAF,CAAO,OAAMqkN,GAAG,CAAC,oBAAKrkN,CAAL,CAAD,CAAU,EAAnD;AACD;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CD;;AAIA;;AAoBA;;AASA;;AAYA;;AAIA;;AAMA;;AAOA;;AAMA;;AAIA;;;;;;;;;;;;ACxEA;AACO,SAASghU,cAAT,CAAwBr9C,IAAxB,EAA8B;AACnC,QAAMrQ,EAAE,GAAGqQ,IAAI,CAACjwQ,SAAL,EAAX;;AACA,MAAI4/P,EAAJ,EAAQ;AACNA,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,MAAhB,EAAwB,mBAAxB;AACAilB,IAAAA,EAAE,CAACjlB,YAAH,CAAgB,sBAAhB,EAAwC,eAAxC;AACA4yE,IAAAA,SAAS,CAAC3tD,EAAD,EAAKqQ,IAAI,CAACzQ,WAAL,EAAL,CAAT;AACD;AACF,EAED;;;AACO,SAAS+tD,SAAT,CAAmB3tD,EAAnB,EAAuB//E,IAAvB,EAA6B;AAClC,MAAI+/E,EAAJ,EAAQ//E,IAAI,IAAI,IAAR,GACJ+/E,EAAE,CAAC2K,eAAH,CAAmB,YAAnB,CADI,GAEJ3K,EAAE,CAACjlB,YAAH,CAAgB,YAAhB,EAA8B96D,IAA9B,CAFI;AAGT;;;;;;;;;ACfc,kBAASowF,IAAT,EAAe;AAC5B;AACAA,EAAAA,IAAI,CAAC7vQ,GAAL,CAAS,IAAT,EAAegG,CAAC,IAAI;AAClB6pQ,IAAAA,IAAI,CAACu9C,WAAL,GAAmBpnT,CAAC,CAACkkQ,EAArB;AACA2F,IAAAA,IAAI,CAACw9C,OAAL,GAAe,CAAf;AACA,WAAOrnT,CAAC,CAACkkQ,EAAT;AACD,GAJD,EAIG;AAAEA,IAAAA,EAAE,EAAE2F,IAAI,CAACM,QAAL,CAAclX;AAApB,GAJH;AAKD;;;;;;;;;;ACPD;;AAEA,MAAMq0D,OAAO,GAAG,SAAhB;;AAEe,kBAASz9C,IAAT,EAAe;AAC5B;AACA,QAAM09C,MAAM,GAAG19C,IAAI,CAACM,QAAL,CAAco9C,MAAd,KAAyB19C,IAAI,CAACM,QAAL,CAAco9C,MAAd,GAAuB19C,IAAI,CAAC7vQ,GAAL,CAAS;AACtEwtT,IAAAA,IAAI,EAAEF,OADgE;AAEtErmT,IAAAA,IAAI,EAAE;AAFgE,GAAT,CAAhD,CAAf,CAF4B,CAO5B;;AACA4oQ,EAAAA,IAAI,CAAC3vR,EAAL,CAAQ2vR,IAAI,CAAC72F,MAAL,CAAY,MAAZ,EAAoB,WAApB,CAAR,EAA0Cu0I,MAA1C,EACE,CAACvnT,CAAD,EAAIy+F,KAAJ,KAAc;AACZ,UAAMpiH,KAAK,GAAGkrU,MAAM,CAAClrU,KAArB;AAAA,UACMmrU,IAAI,GAAGnrU,KAAK,GAAI,wBAASA,KAAT,IAAkBA,KAAlB,GAA0BA,KAAK,CAACmrU,IAApC,GAA4CF,OAD9D;AAAA,UAEMrmT,IAAI,GAAGw9F,KAAK,CAACx9F,IAAN,IAAcw9F,KAAK,CAACx9F,IAAN,CAAWsmT,MAAzB,IAAmC,IAFhD;AAIA,WAAQlrU,KAAK,IAAImrU,IAAI,KAAKnrU,KAAK,CAACmrU,IAAxB,IAAgCvmT,IAAI,IAAI5kB,KAAK,CAAC4kB,IAA/C,GACH5kB,KADG,GAEH;AAACmrU,MAAAA,IAAI,EAAEA,IAAP;AAAavmT,MAAAA,IAAI,EAAEA;AAAnB,KAFJ;AAGD,GATH,EAR4B,CAoB5B;;AACA4oQ,EAAAA,IAAI,CAAC7vQ,GAAL,CAAS,IAAT,EAAe,UAASgG,CAAT,EAAY;AACzB,QAAIwnT,IAAI,GAAGxnT,CAAC,CAACunT,MAAb;AAAA,QACItmT,IAAI,GAAG,KAAK5kB,KADhB;;AAGA,QAAI,CAAC,wBAASmrU,IAAT,CAAL,EAAqB;AACnBvmT,MAAAA,IAAI,GAAGumT,IAAI,CAACvmT,IAAZ;AACAumT,MAAAA,IAAI,GAAGA,IAAI,CAACA,IAAZ;AACD;;AAEDC,IAAAA,SAAS,CAAC59C,IAAD,EAAO29C,IAAI,IAAIA,IAAI,KAAKF,OAAjB,GAA2BE,IAA3B,GAAmCvmT,IAAI,IAAIumT,IAAlD,CAAT;AAEA,WAAOvmT,IAAP;AACD,GAZD,EAYG;AAACsmT,IAAAA,MAAM,EAAEA;AAAT,GAZH;AAaD;;AAEM,SAASE,SAAT,CAAmB59C,IAAnB,EAAyB09C,MAAzB,EAAiC;AACtC,QAAM/tD,EAAE,GAAGqQ,IAAI,CAAC69C,YAAL,KACN,OAAOjhT,QAAP,KAAoB,WAApB,IAAmCA,QAAQ,CAAC0sC,IADtC,GAEP02N,IAAI,CAACjwQ,SAAL,EAFJ;;AAIA,MAAI4/P,EAAJ,EAAQ;AACN,WAAO+tD,MAAM,IAAI,IAAV,GACH/tD,EAAE,CAACsG,KAAH,CAAS+F,cAAT,CAAwB,QAAxB,CADG,GAEFrM,EAAE,CAACsG,KAAH,CAASynD,MAAT,GAAkBA,MAFvB;AAGD;AACF;;;;;;;;;;;;;AClDD;;AACA;;AAEO,SAASI,OAAT,CAAiB99C,IAAjB,EAAuBjvR,IAAvB,EAA6B;AAClC,MAAIyN,IAAI,GAAGwhR,IAAI,CAAC+9C,QAAL,CAAcv/T,IAAzB;;AACA,MAAI,CAAC,8BAAeA,IAAf,EAAqBzN,IAArB,CAAL,EAAiC;AAC/B,yBAAM,4BAA4BA,IAAlC;AACD;;AACD,SAAOyN,IAAI,CAACzN,IAAD,CAAX;AACD;;AAEM,SAASyN,IAAT,CAAczN,IAAd,EAAoB6I,MAApB,EAA4B;AACjC,SAAOrK,SAAS,CAACT,MAAV,GAAmB,CAAnB,GACHgvU,OAAO,CAAC,IAAD,EAAO/sU,IAAP,CAAP,CAAoB6I,MAApB,CAA2BpH,KADxB,GAEH+zT,MAAM,CAACj4T,IAAP,CAAY,IAAZ,EAAkByC,IAAlB,EAAwB,+BAAY4xE,MAAZ,CAAmBihI,gBAAnB,EAA2BisB,MAA3B,CAAkCj2N,MAAlC,CAAxB,CAFJ;AAGD;;AAEM,SAAS2sT,MAAT,CAAgBx1T,IAAhB,EAAsBwkO,OAAtB,EAA+B;AACpC,MAAI,CAAC,+BAAYA,OAAZ,CAAL,EAA2B;AACzB,yBAAM,iDAAN;AACD;;AACD,MAAInjF,OAAO,GAAG0rL,OAAO,CAAC,IAAD,EAAO/sU,IAAP,CAArB;AACAqhJ,EAAAA,OAAO,CAACm+E,QAAR,GAAmB,IAAnB;AACA,SAAO,KAAKP,KAAL,CAAW59E,OAAO,CAAC53H,KAAnB,EAA0B+6M,OAA1B,CAAP;AACD;;AAEM,SAAS1F,MAAT,CAAgB9+N,IAAhB,EAAsBolB,CAAtB,EAAyB;AAC9B,SAAOowS,MAAM,CAACj4T,IAAP,CAAY,IAAZ,EAAkByC,IAAlB,EAAwB,+BAAY8+N,MAAZ,CAAmB15M,CAAnB,CAAxB,CAAP;AACD;;AAEM,SAASwsD,MAAT,CAAgB5xE,IAAhB,EAAsBolB,CAAtB,EAAyB;AAC9B,SAAOowS,MAAM,CAACj4T,IAAP,CAAY,IAAZ,EAAkByC,IAAlB,EAAwB,+BAAY4xE,MAAZ,CAAmBxsD,CAAnB,CAAxB,CAAP;AACD;;;;;;;;;;;;AChCM,SAASze,KAAT,CAAesoR,IAAf,EAAqB;AAC1B,MAAI/zQ,OAAO,GAAG+zQ,IAAI,CAAC/zQ,OAAL,EAAd;AACA,SAAO1W,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYoqR,IAAI,CAACg+C,UAAL,GAAkB/xT,OAAO,CAAC02B,IAA1B,GAAiC12B,OAAO,CAAC22B,KAArD,CAAP;AACD;;AAEM,SAASnd,MAAT,CAAgBu6P,IAAhB,EAAsB;AAC3B,MAAI/zQ,OAAO,GAAG+zQ,IAAI,CAAC/zQ,OAAL,EAAd;AACA,SAAO1W,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYoqR,IAAI,CAACi+C,WAAL,GAAmBhyT,OAAO,CAACw2B,GAA3B,GAAiCx2B,OAAO,CAACy2B,MAArD,CAAP;AACD;;AAEM,SAASvmC,MAAT,CAAgB6jR,IAAhB,EAAsB;AAC3B,MAAI/zQ,OAAO,GAAG+zQ,IAAI,CAAC/zQ,OAAL,EAAd;AAAA,MACIykQ,MAAM,GAAGsP,IAAI,CAAC3O,OADlB;AAEA,SAAO,CACLplQ,OAAO,CAAC02B,IAAR,GAAe+tO,MAAM,CAAC,CAAD,CADhB,EAELzkQ,OAAO,CAACw2B,GAAR,GAAciuO,MAAM,CAAC,CAAD,CAFf,CAAP;AAID;;AAEM,SAASwtD,cAAT,CAAwBl+C,IAAxB,EAA8B;AACnC,MAAItP,MAAM,GAAGv0Q,MAAM,CAAC6jR,IAAD,CAAnB;AAAA,MACIlkO,CAAC,GAAGpkD,KAAK,CAACsoR,IAAD,CADb;AAAA,MAEIjkO,CAAC,GAAGt2B,MAAM,CAACu6P,IAAD,CAFd;;AAIAA,EAAAA,IAAI,CAACm+C,SAAL,CAAe/0D,UAAf,CAA0B4W,IAAI,CAAC5W,UAAL,EAA1B;;AACA4W,EAAAA,IAAI,CAACm+C,SAAL,CAAe/6I,MAAf,CAAsBtnI,CAAtB,EAAyBC,CAAzB,EAA4B20N,MAA5B;;AACAsP,EAAAA,IAAI,CAACo+C,QAAL,CAAc1tD,MAAd,CAAqBA,MAArB;;AAEAsP,EAAAA,IAAI,CAACq+C,gBAAL,CAAsB/qU,OAAtB,CAA8B44G,OAAO,IAAI;AACvC,QAAI;AACFA,MAAAA,OAAO,CAACpwD,CAAD,EAAIC,CAAJ,CAAP;AACD,KAFD,CAEE,OAAOloC,KAAP,EAAc;AACdmsQ,MAAAA,IAAI,CAACnsQ,KAAL,CAAWA,KAAX;AACD;AACF,GAND;AAOD;;;;;;;;;ACnCD;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,kBAASmsQ,IAAT,EAAeprK,KAAf,EAAsBx9F,IAAtB,EAA4B;AACzC,MAAI5Z,CAAC,GAAIwiR,IAAI,CAACm+C,SAAd;AAAA,MACIxuD,EAAE,GAAGnyQ,CAAC,IAAIA,CAAC,CAAC2gB,MAAF,EADd;AAAA,MAEI2V,CAFJ;AAAA,MAEO5lC,CAFP;AAAA,MAEU+hN,SAFV;;AAIA,MAAI0/D,EAAJ,EAAQ;AACN1/D,IAAAA,SAAS,GAAG,wBAAO+vE,IAAP,CAAZ;AACA9xR,IAAAA,CAAC,GAAG0mH,KAAK,CAAC6gK,cAAN,GAAuB7gK,KAAK,CAAC6gK,cAAN,CAAqB,CAArB,CAAvB,GAAiD7gK,KAArD;AACA9gF,IAAAA,CAAC,GAAG,2BAAM5lC,CAAN,EAASyhR,EAAT,CAAJ;AACA77O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQm8K,SAAS,CAAC,CAAD,CAAjB;AACAn8K,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQm8K,SAAS,CAAC,CAAD,CAAjB;AACD;;AAEDr7F,EAAAA,KAAK,CAACk+G,QAAN,GAAiBktD,IAAjB;AACAprK,EAAAA,KAAK,CAACx9F,IAAN,GAAaA,IAAb;AACAw9F,EAAAA,KAAK,CAAC0pN,IAAN,GAAaC,SAAS,CAACv+C,IAAD,EAAO5oQ,IAAP,EAAa0c,CAAb,CAAtB;AACA,SAAO8gF,KAAP;AACD;;AAED,SAAS2pN,SAAT,CAAmBv+C,IAAnB,EAAyB5oQ,IAAzB,EAA+B25L,KAA/B,EAAsC;AACpC,MAAIytH,SAAS,GAAGpnT,IAAI,GAChBA,IAAI,CAACsqP,IAAL,CAAU0I,QAAV,KAAuB,OAAvB,GAAiChzP,IAAjC,GAAwCA,IAAI,CAACsqP,IAAL,CAAUvmJ,KADlC,GAEhB,IAFJ;;AAIA,WAASA,KAAT,CAAepqH,IAAf,EAAqB;AACnB,QAAIktC,CAAC,GAAGugS,SAAR;AAAA,QAAmBhvU,CAAnB;AACA,QAAIuB,IAAJ,EAAU,KAAKvB,CAAC,GAAG4nB,IAAT,EAAe5nB,CAAf,EAAkBA,CAAC,GAAGA,CAAC,CAACkyQ,IAAF,CAAOvmJ,KAA7B,EAAoC;AAC5C,UAAI3rH,CAAC,CAACkyQ,IAAF,CAAO3wQ,IAAP,KAAgBA,IAApB,EAA0B;AAAEktC,QAAAA,CAAC,GAAGzuC,CAAJ;AAAO;AAAQ;AAC5C;AACD,WAAOyuC,CAAC,IAAIA,CAAC,CAACyjO,IAAP,IAAezjO,CAAC,CAACyjO,IAAF,CAAOwI,WAAtB,GAAoCjsO,CAApC,GAAwC,EAA/C;AACD;;AAED,WAASo+L,EAAT,CAAYjlN,IAAZ,EAAkB;AAChB,QAAI,CAACA,IAAL,EAAW,OAAO25L,KAAP;AACX,QAAI,wBAAS35L,IAAT,CAAJ,EAAoBA,IAAI,GAAG+jG,KAAK,CAAC/jG,IAAD,CAAZ;AAEpB,QAAI0c,CAAC,GAAGi9K,KAAK,CAACl4M,KAAN,EAAR;;AACA,WAAOue,IAAP,EAAa;AACX0c,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AACAm+B,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAAClD,CAAL,IAAU,CAAlB;AACAkD,MAAAA,IAAI,GAAGA,IAAI,CAACsqP,IAAL,IAAatqP,IAAI,CAACsqP,IAAL,CAAUvmJ,KAA9B;AACD;;AACD,WAAOrnF,CAAP;AACD;;AAED,SAAO;AACLksP,IAAAA,IAAI,EAAG,wBAASA,IAAT,CADF;AAEL5oQ,IAAAA,IAAI,EAAG,wBAASA,IAAI,IAAI,EAAjB,CAFF;AAGL+jG,IAAAA,KAAK,EAAEA,KAHF;AAILkhH,IAAAA,EAAE,EAAKA,EAJF;AAKL1mO,IAAAA,CAAC,EAAM,UAASyhB,IAAT,EAAe;AAAE,aAAOilN,EAAE,CAACjlN,IAAD,CAAF,CAAS,CAAT,CAAP;AAAqB,KALxC;AAMLlD,IAAAA,CAAC,EAAM,UAASkD,IAAT,EAAe;AAAE,aAAOilN,EAAE,CAACjlN,IAAD,CAAF,CAAS,CAAT,CAAP;AAAqB;AANxC,GAAP;AAQD;;;;;;;;;;ACnFD;;AACA;;AACA;;;;AAEA,MAAMqnT,IAAI,GAAG,MAAb;AAAA,MACMC,KAAK,GAAG,OADd;AAAA,MAEMC,MAAM,GAAG,QAFf;AAAA,MAGMC,OAAO,GAAG;AAACC,EAAAA,IAAI,EAAE;AAAP,CAHhB;AAKA;AACA;AACA;AACA;AACA;;AACO,SAASC,qBAAT,CAA+BlqU,MAA/B,EAAuC;AAC5C,QAAMu0L,MAAM,GAAG,sBAAO;AAAC41I,IAAAA,QAAQ,EAAE;AAAX,GAAP,EAAuBnqU,MAAvB,CAAf;;AAEA,QAAMoqU,MAAM,GAAG,CAAC/uT,GAAD,EAAM0B,IAAN,KAAe;AAC5BA,IAAAA,IAAI,CAACre,OAAL,CAAawZ,CAAC,IAAI;AAChB,UAAI,uBAAQmD,GAAG,CAACnD,CAAD,CAAX,CAAJ,EAAqBmD,GAAG,CAACnD,CAAD,CAAH,GAAS,qBAAMmD,GAAG,CAACnD,CAAD,CAAT,CAAT;AACtB,KAFD;AAGD,GAJD;;AAMAkyT,EAAAA,MAAM,CAAC71I,MAAM,CAAC41I,QAAR,EAAkB,CAAC,SAAD,EAAY,OAAZ,CAAlB,CAAN;AACAC,EAAAA,MAAM,CAAC71I,MAAD,EAAS,CAAC,MAAD,EAAS,QAAT,EAAmB,UAAnB,CAAT,CAAN;AAEA,SAAOA,MAAP;AACD;;AAED,SAAS81I,OAAT,CAAiBj/C,IAAjB,EAAuBvwQ,IAAvB,EAA6B;AAC3B,MAAI+1J,GAAG,GAAGw6G,IAAI,CAACk/C,YAAL,CAAkBH,QAA5B;AAAA,MACIE,OAAO,GAAGz5J,GAAG,CAACy5J,OADlB;AAAA,MAEIE,KAAK,GAAG35J,GAAG,CAAC25J,KAFhB;AAIA,SAAOF,OAAO,KAAK,KAAZ,IAAqBE,KAAK,KAAK,IAA/B,GAAsC,KAAtC,GACHF,OAAO,KAAK,IAAZ,IAAoBE,KAAK,KAAK,KAA9B,GAAsC,IAAtC,GACAF,OAAO,GAAGA,OAAO,CAACxvT,IAAD,CAAV,GACP0vT,KAAK,GAAG,CAACA,KAAK,CAAC1vT,IAAD,CAAT,GACLuwQ,IAAI,CAACvhQ,cAAL,EAJJ;AAKD;;AAED,SAAS2gT,MAAT,CAAgBp/C,IAAhB,EAAsBvsR,GAAtB,EAA2Bgc,IAA3B,EAAiC;AAC/B,QAAMu8P,IAAI,GAAGgU,IAAI,CAACk/C,YAAL,IAAqBl/C,IAAI,CAACk/C,YAAL,CAAkBzrU,GAAlB,CAAlC;;AAEA,MAAIu4Q,IAAI,KAAK,KAAT,IAAmB,wBAASA,IAAT,KAAkB,CAACA,IAAI,CAACv8P,IAAD,CAA9C,EAAuD;AACrDuwQ,IAAAA,IAAI,CAACpuR,IAAL,CAAW,WAAU6B,GAAI,IAAGgc,IAAK,kBAAjC;AACA,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS05K,MAAT,CAAgB7jI,MAAhB,EAAwB71C,IAAxB,EAA8B9E,MAA9B,EAAsC;AAC3C,MAAIq1Q,IAAI,GAAG,IAAX;AAAA,MACIhtR,CAAC,GAAG,IAAIo/N,yBAAJ,CAAgBznN,MAAhB,CADR;AAAA,MAEIsoN,IAAI,GAAG,UAAS/kO,CAAT,EAAYkpB,IAAZ,EAAkB;AACvB4oQ,IAAAA,IAAI,CAAC3pD,QAAL,CAAc,IAAd,EAAoB,MAAM;AACxB,UAAI/wK,MAAM,KAAKm5Q,IAAX,IAAmBQ,OAAO,CAACj/C,IAAD,EAAOvwQ,IAAP,CAA9B,EAA4C;AAC1CvhB,QAAAA,CAAC,CAACuwB,cAAF;AACD;;AACDzrB,MAAAA,CAAC,CAACq/N,OAAF,CAAU,2BAAY2tD,IAAZ,EAAkB9xR,CAAlB,EAAqBkpB,IAArB,CAAV;AACD,KALD;AAMD,GATL;AAAA,MAUI46M,OAVJ;;AAYA,MAAI1sK,MAAM,KAAKo5Q,KAAf,EAAsB;AACpB,QAAIU,MAAM,CAACp/C,IAAD,EAAO,OAAP,EAAgBvwQ,IAAhB,CAAV,EAAiC;AAC/BuwQ,MAAAA,IAAI,CAAC1hR,KAAL,CAAW20N,IAAX,EAAiBxjN,IAAjB;AACD;AACF,GAJD,MAMK,IAAI61C,MAAM,KAAKm5Q,IAAf,EAAqB;AACxB,QAAIW,MAAM,CAACp/C,IAAD,EAAO,MAAP,EAAevwQ,IAAf,CAAV,EAAgC;AAC9B;AACAuwQ,MAAAA,IAAI,CAACzhQ,gBAAL,CAAsB9O,IAAtB,EAA4BwjN,IAA5B,EAAkC2rG,OAAlC;AACD;AACF,GALI,MAOA;AACH,QAAIt5Q,MAAM,KAAKq5Q,MAAf,EAAuB;AACrB,UAAIS,MAAM,CAACp/C,IAAD,EAAO,QAAP,EAAiBvwQ,IAAjB,CAAN,IAAgC,OAAO2M,MAAP,KAAkB,WAAtD,EAAmE;AACjE41M,QAAAA,OAAO,GAAG,CAAC51M,MAAD,CAAV;AACD;AACF,KAJD,MAIO,IAAI,OAAOQ,QAAP,KAAoB,WAAxB,EAAqC;AAC1C,UAAIwiT,MAAM,CAACp/C,IAAD,EAAO,UAAP,EAAmBvwQ,IAAnB,CAAV,EAAoC;AAClCuiN,QAAAA,OAAO,GAAGp1M,QAAQ,CAACs2M,gBAAT,CAA0B5tK,MAA1B,CAAV;AACD;AACF;;AAED,QAAI,CAAC0sK,OAAL,EAAc;AACZguD,MAAAA,IAAI,CAACpuR,IAAL,CAAU,mCAAmC0zD,MAA7C;AACD,KAFD,MAEO;AACL,WAAK,IAAI91D,CAAC,GAAC,CAAN,EAASkO,CAAC,GAACs0N,OAAO,CAACljO,MAAxB,EAAgCU,CAAC,GAACkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxCwiO,QAAAA,OAAO,CAACxiO,CAAD,CAAP,CAAW+uB,gBAAX,CAA4B9O,IAA5B,EAAkCwjN,IAAlC;AACD;;AAED+sD,MAAAA,IAAI,CAACq/C,eAAL,CAAqB5vU,IAArB,CAA0B;AACxBggB,QAAAA,IAAI,EAAKA,IADe;AAExBuiN,QAAAA,OAAO,EAAEA,OAFe;AAGxB9lH,QAAAA,OAAO,EAAE+mH;AAHe,OAA1B;AAKD;AACF;;AAED,SAAOjgO,CAAP;AACD;;;;;;;;;AChHD,SAASssU,UAAT,CAAoB1qN,KAApB,EAA2B;AACzB,SAAOA,KAAK,CAACx9F,IAAb;AACD;;AAED,SAASmoT,UAAT,CAAoB3qN,KAApB,EAA2B;AACzB;AACA,SAAOA,KAAK,CAACx9F,IAAN,CAAWsqP,IAAX,CAAgBp8M,MAAvB;AACD;;AAED,SAASk6Q,MAAT,CAAgBzuU,IAAhB,EAAsB;AACpB,SAAO,UAASolB,CAAT,EAAYy+F,KAAZ,EAAmB;AACxB,WAAOA,KAAK,CAAC0pN,IAAN,CAAWt+C,IAAX,GACJvwD,SADI,GAEJzyN,MAFI,CAEG43G,KAAK,CAACx9F,IAFT,EAEermB,IAFf,CAAP;AAGD,GAJD;AAKD;;AAEc,kBAAS0uU,QAAT,EAAmBC,QAAnB,EAA6B;AAC1CD,EAAAA,QAAQ,GAAG,CAACA,QAAQ,IAAI,OAAb,CAAX;AACAC,EAAAA,QAAQ,GAAG,CAACA,QAAQ,IAAI,QAAb,EAAuBD,QAAQ,CAAC,CAAD,CAA/B,CAAX,CAF0C,CAI1C;;AACA,OAAKpvU,EAAL,CACE,KAAK84L,MAAL,CAAY,MAAZ,EAAoB,WAApB,EAAiCm2I,UAAjC,CADF,EAEEC,UAFF,EAGEC,MAAM,CAACC,QAAD,CAHR,EAL0C,CAW1C;;AACA,OAAKpvU,EAAL,CACE,KAAK84L,MAAL,CAAY,MAAZ,EAAoB,UAApB,EAAgCm2I,UAAhC,CADF,EAEEC,UAFF,EAGEC,MAAM,CAACE,QAAD,CAHR;AAMA,SAAO,IAAP;AACD;;;;;;;;;ACpCD;AACA;AACA;AACA;AACA;AACA;AACe,oBAAW;AACxB,MAAI9tD,OAAO,GAAG,KAAKZ,QAAnB;AAAA,MACI2uD,MAAM,GAAG,KAAKC,OADlB;AAAA,MAEI9uU,SAAS,GAAG,KAAKuuU,eAFrB;AAAA,MAGI3hU,CAHJ;AAAA,MAGOupF,CAHP;AAAA,MAGU/4F,CAHV;AAKAwP,EAAAA,CAAC,GAAGiiU,MAAM,CAAC7wU,MAAX;;AACA,SAAO,EAAE4O,CAAF,IAAO,CAAd,EAAiB;AACfiiU,IAAAA,MAAM,CAACjiU,CAAD,CAAN,CAAUqzB,IAAV;AACD;;AAEDrzB,EAAAA,CAAC,GAAG5M,SAAS,CAAChC,MAAd;;AACA,SAAO,EAAE4O,CAAF,IAAO,CAAd,EAAiB;AACfxP,IAAAA,CAAC,GAAG4C,SAAS,CAAC4M,CAAD,CAAb;AACAupF,IAAAA,CAAC,GAAG/4F,CAAC,CAAC8jO,OAAF,CAAUljO,MAAd;;AACA,WAAO,EAAEm4F,CAAF,IAAO,CAAd,EAAiB;AACf/4F,MAAAA,CAAC,CAAC8jO,OAAF,CAAU/qI,CAAV,EAAa6vG,mBAAb,CAAiC5oM,CAAC,CAACuhB,IAAnC,EAAyCvhB,CAAC,CAACg+G,OAA3C;AACD;AACF;;AAED,MAAI0lK,OAAJ,EAAa;AACXA,IAAAA,OAAO,CAACtjR,IAAR,CAAa,IAAb,EAAmB,KAAK8vU,QAAxB,EAAkC,IAAlC,EAAwC,IAAxC,EAA8C,IAA9C;AACD;;AAED,SAAO,IAAP;AACD;;;;;;;;;AC/Bc,kBAAS71D,GAAT,EAAcj3O,IAAd,EAAoB42E,IAApB,EAA0B;AACvC,MAAIynK,EAAE,GAAG/yP,QAAQ,CAACyB,aAAT,CAAuBkqP,GAAvB,CAAT;;AACA,OAAK,IAAI90Q,GAAT,IAAgB69B,IAAhB,EAAsBq+O,EAAE,CAACjlB,YAAH,CAAgBj3P,GAAhB,EAAqB69B,IAAI,CAAC79B,GAAD,CAAzB;;AACtB,MAAIy0G,IAAI,IAAI,IAAZ,EAAkBynK,EAAE,CAACmM,WAAH,GAAiB5zK,IAAjB;AAClB,SAAOynK,EAAP;AACD;;;;;;;;;ACLD;;AACA;;AACA;;;;AAEA,MAAMkwD,SAAS,GAAG,WAAlB;AAAA,MACMC,SAAS,GAAG,gBADlB;AAAA,MAEMC,UAAU,GAAG,iBAFnB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,kBAAS//C,IAAT,EAAerQ,EAAf,EAAmB3+Q,OAAnB,EAA4B;AACzC,MAAI,CAAC2+Q,EAAL,EAAS;AAET,QAAMnrO,KAAK,GAAGxzC,OAAO,CAACwzC,KAAtB;AACA,MAAIq1F,IAAI,GAAG7oI,OAAO,CAACkgB,KAAnB;;AAEA,MAAI,CAAC2oH,IAAL,EAAW;AACTA,IAAAA,IAAI,GAAG7oI,OAAO,CAACkgB,KAAR,GAAgB;AACrB8uT,MAAAA,QAAQ,EAAE,IADW;AAErBhtG,MAAAA,MAAM,EAAE,KAFa;AAGrB7gO,MAAAA,GAAG,EAAE,IAHgB;AAIrBusF,MAAAA,MAAM,EAAElsF,KAAK,IAAI;AACf,YAAIA,KAAK,KAAKwtR,IAAI,CAACx9L,MAAL,CAAYh+C,KAAK,CAACg+C,MAAlB,CAAd,EAAyC;AACvCw9L,UAAAA,IAAI,CAAC3pD,QAAL,CAAc,IAAd,EAAoB,MAAM;AACxBx8F,YAAAA,IAAI,CAACv0E,MAAL,GAAc,IAAd;AACA06N,YAAAA,IAAI,CAACx9L,MAAL,CAAYh+C,KAAK,CAACg+C,MAAlB,EAA0BhwF,KAA1B;AACD,WAHD;AAID;AACF;AAXoB,KAAvB;;AAaA,QAAIgyC,KAAK,CAACoiF,QAAV,EAAoB;AAClBiT,MAAAA,IAAI,CAACn7C,MAAL,GAAc,wBAASl6C,KAAK,CAACoiF,QAAf,EAAyBiT,IAAI,CAACn7C,MAA9B,CAAd;AACD;AACF;;AAEDi4G,EAAAA,QAAQ,CAAC98D,IAAD,EAAO81I,EAAP,EAAWnrO,KAAX,EAAkBw7O,IAAI,CAACx9L,MAAL,CAAYh+C,KAAK,CAACg+C,MAAlB,CAAlB,CAAR;;AAEA,MAAI,CAACq3C,IAAI,CAACm5F,MAAV,EAAkB;AAChBgtD,IAAAA,IAAI,CAAC3vR,EAAL,CAAQ2vR,IAAI,CAACM,QAAL,CAAc97O,KAAK,CAACg+C,MAApB,CAAR,EAAqC,IAArC,EAA2C,MAAM;AAC/Cq3C,MAAAA,IAAI,CAACv0E,MAAL,GACKu0E,IAAI,CAACv0E,MAAL,GAAc,KADnB,GAEIu0E,IAAI,CAAC1nI,GAAL,CAAS6tR,IAAI,CAACx9L,MAAL,CAAYh+C,KAAK,CAACg+C,MAAlB,CAAT,CAFJ;AAGD,KAJD;AAKAq3C,IAAAA,IAAI,CAACm5F,MAAL,GAAc,IAAd;AACD;;AAED,SAAOn5F,IAAP;AACD;AAED;AACA;AACA;;;AACA,SAAS88D,QAAT,CAAkB98D,IAAlB,EAAwB81I,EAAxB,EAA4BnrO,KAA5B,EAAmChyC,KAAnC,EAA0C;AACxC,QAAM4kC,GAAG,GAAG,sBAAQ,KAAR,EAAe;AAAC,aAASyoS;AAAV,GAAf,CAAZ;AAEA,QAAMI,OAAO,GAAGz7R,KAAK,CAAChqB,KAAN,KAAgB,OAAhB,GACZ4c,GADY,GAEZA,GAAG,CAACu/O,WAAJ,CAAgB,sBAAQ,OAAR,CAAhB,CAFJ;AAIAspD,EAAAA,OAAO,CAACtpD,WAAR,CAAoB,sBAAQ,MAAR,EAClB;AAAC,aAASmpD;AAAV,GADkB,EAEjBt7R,KAAK,CAACzzC,IAAN,IAAcyzC,KAAK,CAACg+C,MAFH,CAApB;AAKAmtL,EAAAA,EAAE,CAACgH,WAAH,CAAev/O,GAAf;AAEA,MAAI5c,KAAK,GAAG0lT,IAAZ;;AACA,UAAQ17R,KAAK,CAAChqB,KAAd;AACE,SAAK,UAAL;AAAiBA,MAAAA,KAAK,GAAG2lT,QAAR;AAAkB;;AACnC,SAAK,QAAL;AAAiB3lT,MAAAA,KAAK,GAAGwvD,MAAR;AAAgB;;AACjC,SAAK,OAAL;AAAiBxvD,MAAAA,KAAK,GAAG4lT,KAAR;AAAe;;AAChC,SAAK,OAAL;AAAiB5lT,MAAAA,KAAK,GAAGwW,KAAR;AAAe;AAJlC;;AAOAxW,EAAAA,KAAK,CAACq/G,IAAD,EAAOomM,OAAP,EAAgBz7R,KAAhB,EAAuBhyC,KAAvB,CAAL;AACD;AAED;AACA;AACA;AACA;;;AACA,SAAS0tU,IAAT,CAAcrmM,IAAd,EAAoB81I,EAApB,EAAwBnrO,KAAxB,EAA+BhyC,KAA/B,EAAsC;AACpC,QAAM+nB,IAAI,GAAG,sBAAQ,OAAR,CAAb;;AAEA,OAAK,MAAM9mB,GAAX,IAAkB+wC,KAAlB,EAAyB;AACvB,QAAI/wC,GAAG,KAAK,QAAR,IAAoBA,GAAG,KAAK,SAAhC,EAA2C;AACzC8mB,MAAAA,IAAI,CAACmwO,YAAL,CAAkBj3P,GAAG,KAAK,OAAR,GAAkB,MAAlB,GAA2BA,GAA7C,EAAkD+wC,KAAK,CAAC/wC,GAAD,CAAvD;AACD;AACF;;AACD8mB,EAAAA,IAAI,CAACmwO,YAAL,CAAkB,MAAlB,EAA0BlmN,KAAK,CAACg+C,MAAhC;AACAjoE,EAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AAEAm9Q,EAAAA,EAAE,CAACgH,WAAH,CAAep8P,IAAf;AACAA,EAAAA,IAAI,CAACgE,gBAAL,CAAsB,OAAtB,EAA+B,MAAMs7G,IAAI,CAACn7C,MAAL,CAAYnkE,IAAI,CAAC/nB,KAAjB,CAArC;AAEAqnI,EAAAA,IAAI,CAACmmM,QAAL,GAAgB,CAACzlT,IAAD,CAAhB;;AACAs/G,EAAAA,IAAI,CAAC1nI,GAAL,GAAWK,KAAK,IAAI+nB,IAAI,CAAC/nB,KAAL,GAAaA,KAAjC;AACD;AAED;AACA;AACA;;;AACA,SAAS2tU,QAAT,CAAkBtmM,IAAlB,EAAwB81I,EAAxB,EAA4BnrO,KAA5B,EAAmChyC,KAAnC,EAA0C;AACxC,QAAM8+B,IAAI,GAAG;AAAC7hB,IAAAA,IAAI,EAAE,UAAP;AAAmB1e,IAAAA,IAAI,EAAEyzC,KAAK,CAACg+C;AAA/B,GAAb;AACA,MAAIhwF,KAAJ,EAAW8+B,IAAI,CAAC+uS,OAAL,GAAe,IAAf;AACX,QAAM9lT,IAAI,GAAG,sBAAQ,OAAR,EAAiB+W,IAAjB,CAAb;AAEAq+O,EAAAA,EAAE,CAACgH,WAAH,CAAep8P,IAAf;AACAA,EAAAA,IAAI,CAACgE,gBAAL,CAAsB,QAAtB,EAAgC,MAAMs7G,IAAI,CAACn7C,MAAL,CAAYnkE,IAAI,CAAC8lT,OAAjB,CAAtC;AAEAxmM,EAAAA,IAAI,CAACmmM,QAAL,GAAgB,CAACzlT,IAAD,CAAhB;;AACAs/G,EAAAA,IAAI,CAAC1nI,GAAL,GAAWK,KAAK,IAAI+nB,IAAI,CAAC8lT,OAAL,GAAe,CAAC,CAAC7tU,KAAF,IAAW,IAA9C;AACD;AAED;AACA;AACA;;;AACA,SAASw3E,MAAT,CAAgB6vD,IAAhB,EAAsB81I,EAAtB,EAA0BnrO,KAA1B,EAAiChyC,KAAjC,EAAwC;AACtC,QAAM+nB,IAAI,GAAG,sBAAQ,QAAR,EAAkB;AAACxpB,IAAAA,IAAI,EAAEyzC,KAAK,CAACg+C;AAAb,GAAlB,CAAb;AAAA,QACMqB,MAAM,GAAGr/C,KAAK,CAACq/C,MAAN,IAAgB,EAD/B;AAGAr/C,EAAAA,KAAK,CAAC2hC,OAAN,CAAc7yE,OAAd,CAAsB,CAACgtU,MAAD,EAAS9wU,CAAT,KAAe;AACnC,UAAM8hC,IAAI,GAAG;AAAC9+B,MAAAA,KAAK,EAAE8tU;AAAR,KAAb;AACA,QAAIC,WAAW,CAACD,MAAD,EAAS9tU,KAAT,CAAf,EAAgC8+B,IAAI,CAACkvS,QAAL,GAAgB,IAAhB;AAChCjmT,IAAAA,IAAI,CAACo8P,WAAL,CAAiB,sBAAQ,QAAR,EAAkBrlP,IAAlB,EAAwB,CAACuyD,MAAM,CAACr0F,CAAD,CAAN,IAAa8wU,MAAd,IAAsB,EAA9C,CAAjB;AACD,GAJD;AAMA3wD,EAAAA,EAAE,CAACgH,WAAH,CAAep8P,IAAf;AAEAA,EAAAA,IAAI,CAACgE,gBAAL,CAAsB,QAAtB,EAAgC,MAAM;AACpCs7G,IAAAA,IAAI,CAACn7C,MAAL,CAAYl6C,KAAK,CAAC2hC,OAAN,CAAc5rD,IAAI,CAACkmT,aAAnB,CAAZ;AACD,GAFD;AAIA5mM,EAAAA,IAAI,CAACmmM,QAAL,GAAgB,CAACzlT,IAAD,CAAhB;;AACAs/G,EAAAA,IAAI,CAAC1nI,GAAL,GAAWK,KAAK,IAAI;AAClB,SAAK,IAAIhD,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG8mC,KAAK,CAAC2hC,OAAN,CAAcr3E,MAAlC,EAA0CU,CAAC,GAAGkO,CAA9C,EAAiD,EAAElO,CAAnD,EAAsD;AACpD,UAAI+wU,WAAW,CAAC/7R,KAAK,CAAC2hC,OAAN,CAAc32E,CAAd,CAAD,EAAmBgD,KAAnB,CAAf,EAA0C;AACxC+nB,QAAAA,IAAI,CAACkmT,aAAL,GAAqBjxU,CAArB;AAAwB;AACzB;AACF;AACF,GAND;AAOD;AAED;AACA;AACA;;;AACA,SAAS4wU,KAAT,CAAevmM,IAAf,EAAqB81I,EAArB,EAAyBnrO,KAAzB,EAAgChyC,KAAhC,EAAuC;AACrC,QAAM2oH,KAAK,GAAG,sBAAQ,MAAR,EAAgB;AAAC,aAAS4kN;AAAV,GAAhB,CAAd;AAAA,QACMl8O,MAAM,GAAGr/C,KAAK,CAACq/C,MAAN,IAAgB,EAD/B;AAGA8rL,EAAAA,EAAE,CAACgH,WAAH,CAAex7J,KAAf;AAEA0e,EAAAA,IAAI,CAACmmM,QAAL,GAAgBx7R,KAAK,CAAC2hC,OAAN,CAAcltE,GAAd,CAAkB,CAACqnU,MAAD,EAAS9wU,CAAT,KAAe;AAC/C,UAAM8hC,IAAI,GAAG;AACX7hB,MAAAA,IAAI,EAAG,OADI;AAEX1e,MAAAA,IAAI,EAAGyzC,KAAK,CAACg+C,MAFF;AAGXhwF,MAAAA,KAAK,EAAE8tU;AAHI,KAAb;AAKA,QAAIC,WAAW,CAACD,MAAD,EAAS9tU,KAAT,CAAf,EAAgC8+B,IAAI,CAAC+uS,OAAL,GAAe,IAAf;AAEhC,UAAM7lT,KAAK,GAAG,sBAAQ,OAAR,EAAiB8W,IAAjB,CAAd;AACA9W,IAAAA,KAAK,CAAC+D,gBAAN,CAAuB,QAAvB,EAAiC,MAAMs7G,IAAI,CAACn7C,MAAL,CAAY4hP,MAAZ,CAAvC;AAEA,UAAMj6M,KAAK,GAAG,sBAAQ,OAAR,EAAiB,EAAjB,EAAqB,CAACxiC,MAAM,CAACr0F,CAAD,CAAN,IAAa8wU,MAAd,IAAsB,EAA3C,CAAd;AACAj6M,IAAAA,KAAK,CAACkjE,OAAN,CAAc/uK,KAAd;AACA2gG,IAAAA,KAAK,CAACw7J,WAAN,CAAkBtwJ,KAAlB;AAEA,WAAO7rG,KAAP;AACD,GAhBe,CAAhB;;AAkBAq/G,EAAAA,IAAI,CAAC1nI,GAAL,GAAWK,KAAK,IAAI;AAClB,UAAM8wI,KAAK,GAAGzJ,IAAI,CAACmmM,QAAnB;AAAA,UACMtiU,CAAC,GAAG4lI,KAAK,CAACx0I,MADhB;;AAEA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,UAAI+wU,WAAW,CAACj9L,KAAK,CAAC9zI,CAAD,CAAL,CAASgD,KAAV,EAAiBA,KAAjB,CAAf,EAAwC8wI,KAAK,CAAC9zI,CAAD,CAAL,CAAS6wU,OAAT,GAAmB,IAAnB;AACzC;AACF,GAND;AAOD;AAED;AACA;AACA;;;AACA,SAASrvS,KAAT,CAAe6oG,IAAf,EAAqB81I,EAArB,EAAyBnrO,KAAzB,EAAgChyC,KAAhC,EAAuC;AACrCA,EAAAA,KAAK,GAAGA,KAAK,KAAKkyH,SAAV,GAAsBlyH,KAAtB,GAA8B,CAAE,CAACgyC,KAAK,CAAC5uC,GAAR,GAAgB,CAAC4uC,KAAK,CAAC9uC,GAAxB,IAAgC,CAAtE;AAEA,QAAME,GAAG,GAAG4uC,KAAK,CAAC5uC,GAAN,IAAa,IAAb,GAAoB4uC,KAAK,CAAC5uC,GAA1B,GAAgCL,IAAI,CAACK,GAAL,CAAS,GAAT,EAAc,CAACpD,KAAf,KAAyB,GAArE;AAAA,QACMkD,GAAG,GAAG8uC,KAAK,CAAC9uC,GAAN,IAAaH,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYE,GAAZ,EAAiB,CAACpD,KAAlB,CAAb,IAAyC,CADrD;AAAA,QAEM0X,IAAI,GAAGs6B,KAAK,CAACt6B,IAAN,IAAc,uBAASxU,GAAT,EAAcE,GAAd,EAAmB,GAAnB,CAF3B;AAIA,QAAM2kB,IAAI,GAAG,sBAAQ,OAAR,EAAiB;AAC5B9K,IAAAA,IAAI,EAAG,OADqB;AAE5B1e,IAAAA,IAAI,EAAGyzC,KAAK,CAACg+C,MAFe;AAG5B9sF,IAAAA,GAAG,EAAIA,GAHqB;AAI5BE,IAAAA,GAAG,EAAIA,GAJqB;AAK5BsU,IAAAA,IAAI,EAAGA;AALqB,GAAjB,CAAb;AAOAqQ,EAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AAEA,QAAM4zM,IAAI,GAAG,sBAAQ,MAAR,EAAgB,EAAhB,EAAoB,CAAC5zM,KAArB,CAAb;AAEAm9Q,EAAAA,EAAE,CAACgH,WAAH,CAAep8P,IAAf;AACAo1P,EAAAA,EAAE,CAACgH,WAAH,CAAevwE,IAAf;;AAEA,QAAM1nH,MAAM,GAAG,MAAM;AACnB0nH,IAAAA,IAAI,CAAC01E,WAAL,GAAmBvhQ,IAAI,CAAC/nB,KAAxB;AACAqnI,IAAAA,IAAI,CAACn7C,MAAL,CAAY,CAACnkE,IAAI,CAAC/nB,KAAlB;AACD,GAHD,CArBqC,CA0BrC;;;AACA+nB,EAAAA,IAAI,CAACgE,gBAAL,CAAsB,OAAtB,EAA+BmgE,MAA/B;AACAnkE,EAAAA,IAAI,CAACgE,gBAAL,CAAsB,QAAtB,EAAgCmgE,MAAhC;AAEAm7C,EAAAA,IAAI,CAACmmM,QAAL,GAAgB,CAACzlT,IAAD,CAAhB;;AACAs/G,EAAAA,IAAI,CAAC1nI,GAAL,GAAWK,KAAK,IAAI;AAClB+nB,IAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AACA4zM,IAAAA,IAAI,CAAC01E,WAAL,GAAmBtpR,KAAnB;AACD,GAHD;AAID;;AAED,SAAS+tU,WAAT,CAAqB7pU,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,SAAO7G,CAAC,KAAK6G,CAAN,IAAY7G,CAAC,GAAC,EAAF,KAAS6G,CAAC,GAAC,EAA9B;AACD;;;;;;;;;ACxOD;;AAEe,kBAASyiR,IAAT,EAAexiR,CAAf,EAAkBmyQ,EAAlB,EAAsBv0Q,WAAtB,EAAmC42Q,WAAnC,EAAgDvuE,GAAhD,EAAqD;AAClEjmM,EAAAA,CAAC,GAAGA,CAAC,IAAI,IAAIpC,WAAJ,CAAgB4kR,IAAI,CAACtxD,MAAL,EAAhB,CAAT;AACA,SAAOlxN,CAAC,CACLyxQ,UADI,CACOU,EADP,EACW,uBAAMqQ,IAAN,CADX,EACwB,wBAAOA,IAAP,CADxB,EACsC,wBAAOA,IAAP,CADtC,EACoDhO,WADpD,EACiEvuE,GADjE,EAEJ2lE,UAFI,CAEO4W,IAAI,CAAC5W,UAAL,EAFP,CAAP;AAGD;;;;;;;;;ACPc,kBAAS4W,IAAT,EAAevsQ,EAAf,EAAmB;AAChC,SAAO,CAACA,EAAD,GAAM,IAAN,GAAa,YAAW;AAC7B,QAAI;AACFA,MAAAA,EAAE,CAAC5jB,KAAH,CAAS,IAAT,EAAeN,SAAf;AACD,KAFD,CAEE,OAAOskB,KAAP,EAAc;AACdmsQ,MAAAA,IAAI,CAACnsQ,KAAL,CAAWA,KAAX;AACD;AACF,GAND;AAOD;;;;;;;;;ACRD;;AACA;;;;AAEe,kBAASmsQ,IAAT,EAAe0gD,WAAf,EAA4B/wD,EAA5B,EAAgCv0Q,WAAhC,EAA6C;AAC1D;AACA,MAAI8wG,OAAO,GAAG,IAAI9wG,WAAJ,CAAgB4kR,IAAI,CAACtxD,MAAL,EAAhB,EAA+B,mBAAKsxD,IAAL,EAAWA,IAAI,CAACpO,OAAL,EAAX,CAA/B,EACX3K,KADW,CACL+Y,IAAI,CAACQ,UAAL,GAAkBrtF,IADb,EAEX87E,UAFW,CAEAU,EAFA,EAEI,wBAAOqQ,IAAP,CAFJ,EAEkBA,IAFlB,CAAd,CAF0D,CAM1D;;AACA,MAAI0gD,WAAJ,EAAiB;AACfA,IAAAA,WAAW,CAAC1iL,QAAZ,GAAuB1qJ,OAAvB,CAA+ByoD,CAAC,IAAI;AAClCmwD,MAAAA,OAAO,CAAC77G,EAAR,CAAW0rD,CAAC,CAACtsC,IAAb,EAAmBssC,CAAC,CAACmwD,OAArB;AACD,KAFD;AAGD;;AAED,SAAOA,OAAP;AACD;;;;;;;;;ACjBD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASyjK,EAAT,EAAagxD,MAAb,EAAqB;AAClC,QAAM3gD,IAAI,GAAG,IAAb;AAAA,QACMvwQ,IAAI,GAAGuwQ,IAAI,CAAC4gD,WADlB;AAAA,QAEMhsU,MAAM,GAAGorR,IAAI,CAACk/C,YAAL,CAAkBrlM,IAFjC;AAAA,QAGMnsI,MAAM,GAAG,kCAAa+hB,IAAb,CAHf,CADkC,CAMlC;;AACAkgQ,EAAAA,EAAE,GAAGqQ,IAAI,CAAC9O,GAAL,GAAWvB,EAAE,GAAGnV,MAAM,CAACwlB,IAAD,EAAOrQ,EAAP,CAAT,GAAsB,IAAxC,CAPkC,CASlC;;AACA,4BAAeqQ,IAAf,EAVkC,CAYlC;;AACA,MAAI,CAACtyR,MAAL,EAAasyR,IAAI,CAACnsQ,KAAL,CAAW,iCAAiCpE,IAA5C;AACb,QAAMmhQ,OAAO,GAAGljR,MAAM,CAACw+G,OAAP,IAAkBioK,6BAAlC;AAAA,QACMrC,QAAQ,GAAInC,EAAE,GAAGjiR,MAAM,CAACm0Q,QAAV,GAAqBn0Q,MAAM,CAACovR,QADhD,CAdkC,CAiBlC;;AACAkD,EAAAA,IAAI,CAACm+C,SAAL,GAAiB,CAACrsD,QAAD,GAAY,IAAZ,GACb,iCAAmBkO,IAAnB,EAAyBA,IAAI,CAACm+C,SAA9B,EAAyCxuD,EAAzC,EAA6CmC,QAA7C,CADJ;AAEAkO,EAAAA,IAAI,CAACo+C,QAAL,GAAgB,gCAAkBp+C,IAAlB,EAAwBA,IAAI,CAACo+C,QAA7B,EAAuCzuD,EAAvC,EAA2CiB,OAA3C,CAAhB;AACAoP,EAAAA,IAAI,CAAC3J,OAAL,GAAe,IAAf,CArBkC,CAuBlC;;AACA,MAAI1G,EAAE,IAAI/6Q,MAAM,KAAK,MAArB,EAA6B;AAC3B+rU,IAAAA,MAAM,GAAGA,MAAM,GAAI3gD,IAAI,CAAC6gD,OAAL,GAAermE,MAAM,CAACwlB,IAAD,EAAO2gD,MAAP,CAAzB,GACXhxD,EAAE,CAACgH,WAAH,CAAe,sBAAQ,MAAR,EAAgB;AAAC,eAAS;AAAV,KAAhB,CAAf,CADJ;;AAGAqJ,IAAAA,IAAI,CAAC8gD,KAAL,CAAWxtU,OAAX,CAAmB6iB,CAAC,IAAI;AACtB,UAAIA,CAAC,CAACquB,KAAF,CAAQqB,OAAR,IAAmBjxC,MAAM,KAAK,WAAlC,EAA+C;AAC7CuhB,QAAAA,CAAC,CAAC0vB,OAAF,GAAY20N,MAAM,CAACwlB,IAAD,EAAO7pQ,CAAC,CAACquB,KAAF,CAAQqB,OAAf,CAAlB;AACD;AACF,KAJD;;AAMAm6O,IAAAA,IAAI,CAAC8gD,KAAL,CAAWxtU,OAAX,CAAmB6iB,CAAC,IAAI;AACtB,yBAAK6pQ,IAAL,EAAW7pQ,CAAC,CAAC0vB,OAAF,IAAa86R,MAAxB,EAAgCxqT,CAAhC;AACD,KAFD;AAGD;;AAED,SAAO6pQ,IAAP;AACD;;AAED,SAASxlB,MAAT,CAAgBwlB,IAAhB,EAAsBrQ,EAAtB,EAA0B;AACxB,MAAI,OAAOA,EAAP,KAAc,QAAlB,EAA4B;AAC1B,QAAI,OAAO/yP,QAAP,KAAoB,WAAxB,EAAqC;AACnC+yP,MAAAA,EAAE,GAAG/yP,QAAQ,CAACmkT,aAAT,CAAuBpxD,EAAvB,CAAL;;AACA,UAAI,CAACA,EAAL,EAAS;AACPqQ,QAAAA,IAAI,CAACnsQ,KAAL,CAAW,oCAAoC87P,EAA/C;AACA,eAAO,IAAP;AACD;AACF,KAND,MAMO;AACLqQ,MAAAA,IAAI,CAACnsQ,KAAL,CAAW,kCAAX;AACA,aAAO,IAAP;AACD;AACF;;AACD,MAAI87P,EAAJ,EAAQ;AACN,QAAI;AACFA,MAAAA,EAAE,CAACqxD,SAAH,GAAe,EAAf;AACD,KAFD,CAEE,OAAO9yU,CAAP,EAAU;AACVyhR,MAAAA,EAAE,GAAG,IAAL;AACAqQ,MAAAA,IAAI,CAACnsQ,KAAL,CAAW3lB,CAAX;AACD;AACF;;AACD,SAAOyhR,EAAP;AACD;;;;;;;;;ACvED;;AAEA,MAAMnkE,MAAM,GAAGr1L,CAAC,IAAI,CAACA,CAAD,IAAM,CAA1B;;AAEA,MAAM8qT,aAAa,GAAG9qT,CAAC,KAAK;AAACssB,EAAAA,GAAG,EAAEtsB,CAAN;AAASusB,EAAAA,MAAM,EAAEvsB,CAAjB;AAAoBwsB,EAAAA,IAAI,EAAExsB,CAA1B;AAA6BysB,EAAAA,KAAK,EAAEzsB;AAApC,CAAL,CAAvB;;AAEe,kBAASA,CAAT,EAAY;AACzB,SAAO,wBAASA,CAAT,IACH;AACEssB,IAAAA,GAAG,EAAK+oK,MAAM,CAACr1L,CAAC,CAACssB,GAAH,CADhB;AAEEC,IAAAA,MAAM,EAAE8oK,MAAM,CAACr1L,CAAC,CAACusB,MAAH,CAFhB;AAGEC,IAAAA,IAAI,EAAI6oK,MAAM,CAACr1L,CAAC,CAACwsB,IAAH,CAHhB;AAIEC,IAAAA,KAAK,EAAG4oK,MAAM,CAACr1L,CAAC,CAACysB,KAAH;AAJhB,GADG,GAOHq+R,aAAa,CAACz1H,MAAM,CAACr1L,CAAD,CAAP,CAPjB;AAQD;;;;;;;;;ACfD;;AACA;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACe,wBAAe6pQ,IAAf,EAAqBvwQ,IAArB,EAA2BuiQ,WAA3B,EAAwCvuE,GAAxC,EAA6C;AAC1D,QAAM/1M,MAAM,GAAG,kCAAa+hB,IAAb,CAAf;AAAA,QACMmxN,GAAG,GAAGlzO,MAAM,IAAIA,MAAM,CAACovR,QAD7B;AAGA,MAAI,CAACl8C,GAAL,EAAU,qBAAM,iCAAiCnxN,IAAvC;AAEV,QAAMuwQ,IAAI,CAAC3pD,QAAL,EAAN;AACA,SAAO,iCAAmB2pD,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqCp/C,GAArC,EAA0CoxC,WAA1C,EAAuDvuE,GAAvD,EACJgvE,WADI,CACQuN,IAAI,CAACkhD,WAAL,CAAiB/tI,IADzB,CAAP;AAED;;;;;;;;;AClBD;;AACA;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,wBAAe1jL,IAAf,EAAqBuiQ,WAArB,EAAkC;AAC/C,MAAIviQ,IAAI,KAAK0xT,2BAAK1kD,MAAd,IAAwBhtQ,IAAI,KAAK0xT,2BAAKxkD,GAAtC,IAA6CltQ,IAAI,KAAK0xT,2BAAKzkD,GAA/D,EAAoE;AAClE,yBAAM,8BAA8BjtQ,IAApC;AACD;;AAED,QAAMjS,CAAC,GAAG,MAAM,6BAAe,IAAf,EAAqBiS,IAArB,EAA2BuiQ,WAA3B,CAAhB;AACA,SAAOviQ,IAAI,KAAK0xT,2BAAKxkD,GAAd,GACHykD,SAAS,CAAC5jU,CAAC,CAAC05Q,GAAF,EAAD,EAAU,eAAV,CADN,GAEH15Q,CAAC,CAAC2gB,MAAF,GAAWusP,SAAX,CAAqB,WAArB,CAFJ;AAGD;;AAED,SAAS02D,SAAT,CAAmB5iU,IAAnB,EAAyB6iU,IAAzB,EAA+B;AAC7B,MAAIC,IAAI,GAAG,IAAIr3N,IAAJ,CAAS,CAACzrG,IAAD,CAAT,EAAiB;AAACiR,IAAAA,IAAI,EAAE4xT;AAAP,GAAjB,CAAX;AACA,SAAOjlT,MAAM,CAACm3F,GAAP,CAAWC,eAAX,CAA2B8tN,IAA3B,CAAP;AACD;;;;;;;;;AC3BD;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACe,wBAAetvD,WAAf,EAA4BvuE,GAA5B,EAAiC;AAC9C,QAAMjmM,CAAC,GAAG,MAAM,6BAAe,IAAf,EAAqBo/Q,2BAAWH,MAAhC,EAAwCzK,WAAxC,EAAqDvuE,GAArD,CAAhB;AACA,SAAOjmM,CAAC,CAAC2gB,MAAF,EAAP;AACD;;;;;;;;;ACXD;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACe,wBAAe6zP,WAAf,EAA4B;AACzC,QAAMx0Q,CAAC,GAAG,MAAM,6BAAe,IAAf,EAAqBo/Q,2BAAWD,GAAhC,EAAqC3K,WAArC,CAAhB;AACA,SAAOx0Q,CAAC,CAAC05Q,GAAF,EAAP;AACD;;;;;;;;;;;;;ACXD;;AAEA,MAAMqqD,OAAO,GAAG,SAAhB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AACA,MAAMrhD,UAAU,GAAG,YAAnB;;AACA,MAAMshD,eAAe,GAAG,iBAAxB;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,cAAc,GAAG,gBAAvB;;AACA,MAAMC,qBAAqB,GAAG,uBAA9B;;AACA,MAAMC,iBAAiB,GAAG,mBAA1B;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,eAAe,GAAG,iBAAxB;;;AACA,SAASC,OAAT,CAAiBzyT,IAAjB,EAAuB;AACrB,OAAKA,IAAL,GAAYA,IAAZ;AACD;;AAEDyyT,OAAO,CAACtyU,SAAR,CAAkB4kO,KAAlB,GAA0B,UAAUpsB,OAAV,EAAmB;AAC3C,MAAInsM,CAAJ,EAAOzM,CAAP,EAAUkO,CAAV;AACA,MAAI0qM,OAAO,CAAC,IAAD,CAAX,EAAmB,OAAO,CAAP;;AAEnB,OAAKnsM,CAAC,GAAGqoK,QAAQ,CAAC,IAAD,CAAZ,EAAoB90K,CAAC,GAAG,CAAxB,EAA2BkO,CAAC,GAAGzB,CAAC,CAACnN,MAAtC,EAA8CU,CAAC,GAAGkO,CAAlD,EAAqD,EAAElO,CAAvD,EAA0D;AACxD,QAAIyM,CAAC,CAACzM,CAAD,CAAD,CAAKglO,KAAL,CAAWpsB,OAAX,CAAJ,EAAyB,OAAO,CAAP;AAC1B;AACF,CAPD;;AASA,SAAS9jC,QAAT,CAAkB/pJ,IAAlB,EAAwB;AACtB,UAAQA,IAAI,CAAC9K,IAAb;AACE,SAAKiyT,eAAL;AACE,aAAOnnT,IAAI,CAACylT,QAAZ;;AAEF,SAAK2B,gBAAL;AACA,SAAKG,iBAAL;AACE,aAAO,CAACvnT,IAAI,CAACooB,IAAN,EAAYpoB,IAAI,CAACqoB,KAAjB,CAAP;;AAEF,SAAKg/R,cAAL;AACE,aAAO,CAACrnT,IAAI,CAAC4nT,MAAN,EAAcpzU,MAAd,CAAqBwrB,IAAI,CAAChrB,SAA1B,CAAP;;AAEF,SAAKsyU,qBAAL;AACE,aAAO,CAACtnT,IAAI,CAAC4C,IAAN,EAAY5C,IAAI,CAAC6nT,UAAjB,EAA6B7nT,IAAI,CAAC8nT,SAAlC,CAAP;;AAEF,SAAKN,gBAAL;AACE,aAAO,CAACxnT,IAAI,CAACs8K,MAAN,EAAct8K,IAAI,CAACwsL,QAAnB,CAAP;;AAEF,SAAKi7H,gBAAL;AACE,aAAOznT,IAAI,CAACo2L,UAAZ;;AAEF,SAAK8wH,QAAL;AACE,aAAO,CAAClnT,IAAI,CAAC9mB,GAAN,EAAW8mB,IAAI,CAAC/nB,KAAhB,CAAP;;AAEF,SAAKyvU,eAAL;AACE,aAAO,CAAC1nT,IAAI,CAAC+nT,QAAN,CAAP;;AAEF,SAAKliD,UAAL;AACA,SAAKohD,OAAL;AACA,SAAKD,OAAL;AACA;AACE,aAAO,EAAP;AA9BJ;AAgCD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,IAAIgB,SAAJ,EAAej9Q,MAAf,EAAuBhwD,KAAvB,EAA8BxG,MAA9B,EAAsC0zU,SAAtC;AACA,IAAIC,mBAAmB,GAAG,CAA1B;AAAA,IACIC,QAAQ,GAAG,CADf;AAAA,IAEIC,eAAe,GAAG,CAFtB;AAAA,IAGIC,YAAY,GAAG,CAHnB;AAAA,IAIIC,gBAAgB,GAAG,CAJvB;AAAA,IAKIC,mBAAmB,GAAG,CAL1B;AAAA,IAMIC,eAAe,GAAG,CANtB;AAAA,IAOIC,kBAAkB,GAAG,CAPzB;AAAA,IAQIC,sBAAsB,GAAG,CAR7B;AASAV,SAAS,GAAG,EAAZ;AACAA,SAAS,CAACE,mBAAD,CAAT,GAAiC,SAAjC;AACAF,SAAS,CAACG,QAAD,CAAT,GAAsB,OAAtB;AACAH,SAAS,CAACI,eAAD,CAAT,GAA6B,YAA7B;AACAJ,SAAS,CAACK,YAAD,CAAT,GAA0B,SAA1B;AACAL,SAAS,CAACM,gBAAD,CAAT,GAA8B,MAA9B;AACAN,SAAS,CAACO,mBAAD,CAAT,GAAiC,SAAjC;AACAP,SAAS,CAACQ,eAAD,CAAT,GAA6B,YAA7B;AACAR,SAAS,CAACS,kBAAD,CAAT,GAAgC,QAAhC;AACAT,SAAS,CAACU,sBAAD,CAAT,GAAoC,mBAApC;AACA,IAAIC,qBAAqB,GAAG,iBAA5B;AAAA,IACIC,sBAAsB,GAAG,kBAD7B;AAAA,IAEIC,oBAAoB,GAAG,gBAF3B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,gBAAgB,GAAG,YAJvB;AAAA,IAKIC,aAAa,GAAG,SALpB;AAAA,IAMIC,uBAAuB,GAAG,mBAN9B;AAAA,IAOIC,sBAAsB,GAAG,kBAP7B;AAAA,IAQIC,sBAAsB,GAAG,kBAR7B;AAAA,IASIC,cAAc,GAAG,UATrB;AAAA,IAUIC,qBAAqB,GAAG,iBAV5B,EAU+C;;AAE/C,IAAIC,sBAAsB,GAAG,qBAA7B;AAAA,IACIC,uBAAuB,GAAG,mBAD9B;AAAA,IAEIC,uBAAuB,GAAG,mBAF9B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,yBAAyB,GAAG,0BAJhC;AAAA,IAKIC,oBAAoB,GAAG,yBAL3B;AAAA,IAMIC,oBAAoB,GAAG,4BAN3B;AAAA,IAOIC,yBAAyB,GAAG,uCAPhC;AAAA,IAQIC,yBAAyB,GAAG,gDARhC;AAAA,IASIC,8BAA8B,GAAG,sEATrC;AAUA,IAAIC,OAAO,GAAG,SAAd;AAAA,IACIC,QAAQ,GAAG,WADf,EAC4B;;AAE5B,IAAIC,4BAA4B,GAAG,IAAIt6M,MAAJ,CAAW,szJAAX,CAAnC;AAAA,IACI;AACJu6M,2BAA2B,GAAG,IAAIv6M,MAAJ,CAAW,muLAAX,CAF9B,EAE+wL;AAC/wL;AACA;AACA;;AAEA,SAASl0H,MAAT,CAAgB6R,SAAhB,EAA2B+K,OAA3B,EAAoC;AAClC;AACA,MAAI,CAAC/K,SAAL,EAAgB;AACd,UAAM,IAAI/Z,KAAJ,CAAU,aAAa8kB,OAAvB,CAAN;AACD;AACF;;AAED,SAAS8xT,cAAT,CAAwBtN,EAAxB,EAA4B;AAC1B,SAAOA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAA3B,CAD0B,CACO;AAClC;;AAED,SAASuN,UAAT,CAAoBvN,EAApB,EAAwB;AACtB,SAAO,yBAAyBzqS,OAAzB,CAAiCyqS,EAAjC,KAAwC,CAA/C;AACD;;AAED,SAASwN,YAAT,CAAsBxN,EAAtB,EAA0B;AACxB,SAAO,WAAWzqS,OAAX,CAAmByqS,EAAnB,KAA0B,CAAjC;AACD,EAAC;;;AAGF,SAASyN,YAAT,CAAsBzN,EAAtB,EAA0B;AACxB,SAAOA,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,IAArC,IAA6CA,EAAE,KAAK,IAApD,IAA4DA,EAAE,KAAK,IAAnE,IAA2EA,EAAE,IAAI,MAAN,IAAgB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,MAAzC,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,MAAjE,EAAyE,MAAzE,EAAiF,MAAjF,EAAyF,MAAzF,EAAiG,MAAjG,EAAyG,MAAzG,EAAiH,MAAjH,EAAyH,MAAzH,EAAiI,MAAjI,EAAyIzqS,OAAzI,CAAiJyqS,EAAjJ,KAAwJ,CAA1P;AACD,EAAC;;;AAGF,SAAS0N,gBAAT,CAA0B1N,EAA1B,EAA8B;AAC5B,SAAOA,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,MAArC,IAA+CA,EAAE,KAAK,MAA7D;AACD,EAAC;;;AAGF,SAAS2N,iBAAT,CAA2B3N,EAA3B,EAA+B;AAC7B,SAAOA,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8B;AACrCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADb,IACqB;AAC5BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFb,IAEqB;AAC5BA,EAAAA,EAAE,KAAK,IAHA,IAGQ;AACfA,EAAAA,EAAE,IAAI,IAAN,IAAcoN,4BAA4B,CAACtnT,IAA7B,CAAkCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAlC,CAJd;AAKD;;AAED,SAAS4N,gBAAT,CAA0B5N,EAA1B,EAA8B;AAC5B,SAAOA,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8B;AACrCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADb,IACqB;AAC5BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFb,IAEqB;AAC5BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAHb,IAGqB;AAC5BA,EAAAA,EAAE,KAAK,IAJA,IAIQ;AACfA,EAAAA,EAAE,IAAI,IAAN,IAAcqN,2BAA2B,CAACvnT,IAA5B,CAAiCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAjC,CALd;AAMD,EAAC;;;AAGF,MAAM6N,QAAQ,GAAG;AACf,QAAM,CADS;AAEf,QAAM,CAFS;AAGf,QAAM,CAHS;AAIf,SAAO,CAJQ;AAKf,SAAO,CALQ;AAMf,SAAO,CANQ;AAOf,SAAO,CAPQ;AAQf,SAAO,CARQ;AASf,UAAQ,CATO;AAUf,UAAQ,CAVO;AAWf,UAAQ,CAXO;AAYf,UAAQ,CAZO;AAaf,UAAQ,CAbO;AAcf,UAAQ,CAdO;AAef,WAAS,CAfM;AAgBf,WAAS,CAhBM;AAiBf,WAAS,CAjBM;AAkBf,WAAS,CAlBM;AAmBf,WAAS,CAnBM;AAoBf,WAAS,CApBM;AAqBf,WAAS,CArBM;AAsBf,WAAS,CAtBM;AAuBf,YAAU,CAvBK;AAwBf,YAAU,CAxBK;AAyBf,YAAU,CAzBK;AA0Bf,YAAU,CA1BK;AA2Bf,YAAU,CA3BK;AA4Bf,YAAU,CA5BK;AA6Bf,YAAU,CA7BK;AA8Bf,YAAU,CA9BK;AA+Bf,aAAW,CA/BI;AAgCf,aAAW,CAhCI;AAiCf,aAAW,CAjCI;AAkCf,aAAW,CAlCI;AAmCf,aAAW,CAnCI;AAoCf,cAAY,CApCG;AAqCf,cAAY,CArCG;AAsCf,cAAY,CAtCG;AAuCf,eAAa,CAvCE;AAwCf,eAAa,CAxCE;AAyCf,gBAAc,CAzCC;AA0Cf,gBAAc;AA1CC,CAAjB;;AA6CA,SAASC,WAAT,GAAuB;AACrB,SAAO7vU,KAAK,GAAGxG,MAAf,EAAuB;AACrB,UAAMuoU,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAX;;AAEA,QAAIwvU,YAAY,CAACzN,EAAD,CAAZ,IAAoB0N,gBAAgB,CAAC1N,EAAD,CAAxC,EAA8C;AAC5C,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;AACF;;AAED,SAAS8vU,aAAT,CAAuBxyN,MAAvB,EAA+B;AAC7B,MAAIpjH,CAAJ;AAAA,MACIN,GADJ;AAAA,MAEImoU,EAFJ;AAAA,MAGIxjC,IAAI,GAAG,CAHX;AAIA3kS,EAAAA,GAAG,GAAG0jH,MAAM,KAAK,GAAX,GAAiB,CAAjB,GAAqB,CAA3B;;AAEA,OAAKpjH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,GAAhB,EAAqB,EAAEM,CAAvB,EAA0B;AACxB,QAAI8F,KAAK,GAAGxG,MAAR,IAAkB81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAhC,EAAiD;AAC/C+hU,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACAu+R,MAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD,KAHD,MAGO;AACL0xU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,SAAOzpU,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AAED,SAASyxC,0BAAT,GAAsC;AACpC,MAAIjO,EAAJ,EAAQxjC,IAAR,EAAc0xC,GAAd,EAAmBC,GAAnB;AACAnO,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAu+R,EAAAA,IAAI,GAAG,CAAP,CAHoC,CAG1B;;AAEV,MAAIwjC,EAAE,KAAK,GAAX,EAAgB;AACdgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAOjvU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AAEA,QAAI,CAACsvU,UAAU,CAACvN,EAAD,CAAf,EAAqB;AACnB;AACD;;AAEDxjC,IAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD;;AAED,MAAIkgS,IAAI,GAAG,QAAP,IAAmBwjC,EAAE,KAAK,GAA9B,EAAmC;AACjCgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,GArBmC,CAqBlC;;;AAGF,MAAI1wC,IAAI,IAAI,MAAZ,EAAoB;AAClB,WAAO/4R,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AAED0xC,EAAAA,GAAG,GAAG,CAAC1xC,IAAI,GAAG,OAAP,IAAkB,EAAnB,IAAyB,MAA/B;AACA2xC,EAAAA,GAAG,GAAG,CAAC3xC,IAAI,GAAG,OAAP,GAAiB,IAAlB,IAA0B,MAAhC;AACA,SAAO/4R,MAAM,CAAC4sE,YAAP,CAAoB69P,GAApB,EAAyBC,GAAzB,CAAP;AACD;;AAED,SAASC,oBAAT,GAAgC;AAC9B,MAAIpO,EAAJ,EAAQ50T,EAAR;AACA40T,EAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,EAAvB,CAAL;AACAmN,EAAAA,EAAE,GAAG3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAL,CAH8B,CAGA;;AAE9B,MAAIA,EAAE,KAAK,IAAX,EAAiB;AACf,QAAI/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,MAAEjvU,KAAF;AACA+hU,IAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AAEA,QAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC2N,iBAAiB,CAAC3N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5C,EAAgE;AAC9DohQ,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED9hU,IAAAA,EAAE,GAAG40T,EAAL;AACD;;AAED,SAAO/hU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAD,CAArB,EAA2B;AACzB;AACD;;AAED,MAAE/hU,KAAF;AACAmN,IAAAA,EAAE,IAAI3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAN,CARqB,CAQU;;AAE/B,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACf50T,MAAAA,EAAE,GAAGA,EAAE,CAACqsB,MAAH,CAAU,CAAV,EAAarsB,EAAE,CAAC3T,MAAH,GAAY,CAAzB,CAAL;;AAEA,UAAIw2D,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,QAAEjvU,KAAF;AACA+hU,MAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AAEA,UAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC4N,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA3C,EAA+D;AAC7DohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED9hU,MAAAA,EAAE,IAAI40T,EAAN;AACD;AACF;;AAED,SAAO50T,EAAP;AACD;;AAED,SAASijU,aAAT,GAAyB;AACvB,MAAIpqU,KAAJ,EAAW+7T,EAAX;AACA/7T,EAAAA,KAAK,GAAGhG,KAAK,EAAb;;AAEA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,QAAI+hU,EAAE,KAAK,IAAX,EAAiB;AACf;AACA/hU,MAAAA,KAAK,GAAGgG,KAAR;AACA,aAAOmqU,oBAAoB,EAA3B;AACD;;AAED,QAAIR,gBAAgB,CAAC5N,EAAD,CAApB,EAA0B;AACxB,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;;AAED,SAAOgwD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAAP;AACD;;AAED,SAASqwU,cAAT,GAA0B;AACxB,MAAIrqU,KAAJ,EAAWmH,EAAX,EAAegN,IAAf;AACAnU,EAAAA,KAAK,GAAGhG,KAAR,CAFwB,CAET;;AAEfmN,EAAAA,EAAE,GAAG6iD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAA7B,GAAoCmwU,oBAAoB,EAAxD,GAA6DC,aAAa,EAA/E,CAJwB,CAI2D;AACnF;;AAEA,MAAIjjU,EAAE,CAAC3T,MAAH,KAAc,CAAlB,EAAqB;AACnB2gB,IAAAA,IAAI,GAAGkzT,eAAP;AACD,GAFD,MAEO,IAAIuC,QAAQ,CAAC/+M,cAAT,CAAwB1jH,EAAxB,CAAJ,EAAiC;AACtC;AACAgN,IAAAA,IAAI,GAAGmzT,YAAP;AACD,GAHM,MAGA,IAAIngU,EAAE,KAAK,MAAX,EAAmB;AACxBgN,IAAAA,IAAI,GAAGozT,gBAAP;AACD,GAFM,MAEA,IAAIpgU,EAAE,KAAK,MAAP,IAAiBA,EAAE,KAAK,OAA5B,EAAqC;AAC1CgN,IAAAA,IAAI,GAAGgzT,mBAAP;AACD,GAFM,MAEA;AACLhzT,IAAAA,IAAI,GAAGkzT,eAAP;AACD;;AAED,SAAO;AACLlzT,IAAAA,IAAI,EAAEA,IADD;AAELjd,IAAAA,KAAK,EAAEiQ,EAFF;AAGLnH,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAAC;;;AAGF,SAASswU,cAAT,GAA0B;AACxB,MAAItqU,KAAK,GAAGhG,KAAZ;AAAA,MACIu+R,IAAI,GAAGvuO,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CADX;AAAA,MAEIuwU,KAFJ;AAAA,MAGIC,GAAG,GAAGxgR,MAAM,CAAChwD,KAAD,CAHhB;AAAA,MAIIywU,GAJJ;AAAA,MAKIC,GALJ;AAAA,MAMIC,GANJ;;AAQA,UAAQpyC,IAAR;AACE;AACA,SAAK,IAAL,CAFF,CAEa;;AAEX,SAAK,IAAL,CAJF,CAIa;;AAEX,SAAK,IAAL,CANF,CAMa;;AAEX,SAAK,IAAL,CARF,CAQa;;AAEX,SAAK,IAAL,CAVF,CAUa;;AAEX,SAAK,IAAL,CAZF,CAYa;;AAEX,SAAK,IAAL,CAdF,CAca;;AAEX,SAAK,IAAL,CAhBF,CAgBa;;AAEX,SAAK,IAAL,CAlBF,CAkBa;;AAEX,SAAK,IAAL,CApBF,CAoBa;;AAEX,SAAK,IAAL,CAtBF,CAsBa;;AAEX,SAAK,IAAL;AACE;AACA,QAAEv+R,KAAF;AACA,aAAO;AACLma,QAAAA,IAAI,EAAEszT,eADD;AAELvwU,QAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAFF;AAGLv4R,QAAAA,KAAK,EAAEA,KAHF;AAIL6F,QAAAA,GAAG,EAAE7L;AAJA,OAAP;;AAOF;AACEuwU,MAAAA,KAAK,GAAGvgR,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAR,CADF,CACwC;;AAEtC,UAAIuwU,KAAK,KAAK,IAAd,EAAoB;AAClB,gBAAQhyC,IAAR;AACE,eAAK,IAAL,CADF,CACa;;AAEX,eAAK,IAAL,CAHF,CAGa;;AAEX,eAAK,IAAL,CALF,CAKa;;AAEX,eAAK,IAAL,CAPF,CAOa;;AAEX,eAAK,IAAL,CATF,CASa;;AAEX,eAAK,IAAL,CAXF,CAWa;;AAEX,eAAK,IAAL,CAbF,CAaa;;AAEX,eAAK,IAAL,CAfF,CAea;;AAEX,eAAK,IAAL,CAjBF,CAiBa;;AAEX,eAAK,IAAL;AACE;AACAv+R,YAAAA,KAAK,IAAI,CAAT;AACA,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,IAA4B/4R,MAAM,CAAC4sE,YAAP,CAAoBm+P,KAApB,CAF9B;AAGLvqU,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;;AAOF,eAAK,IAAL,CA7BF,CA6Ba;;AAEX,eAAK,IAAL;AACE;AACAA,YAAAA,KAAK,IAAI,CAAT,CAFF,CAEc;;AAEZ,gBAAIgwD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC,gBAAEA,KAAF;AACD;;AAED,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAE8yD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAFF;AAGLgG,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;AAvCJ;AA8CD;;AApFL,GATwB,CA+FtB;;;AAGF2wU,EAAAA,GAAG,GAAG3gR,MAAM,CAACx2B,MAAP,CAAcx5B,KAAd,EAAqB,CAArB,CAAN;;AAEA,MAAI2wU,GAAG,KAAK,MAAZ,EAAoB;AAClB3wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEyzU,GAFF;AAGL3qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GA5GuB,CA4GtB;;;AAGF0wU,EAAAA,GAAG,GAAGC,GAAG,CAACn3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAIk3S,GAAG,KAAK,KAAR,IAAiBA,GAAG,KAAK,KAAzB,IAAkCA,GAAG,KAAK,KAA9C,EAAqD;AACnD1wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEwzU,GAFF;AAGL1qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAzHuB,CAyHtB;;;AAGFywU,EAAAA,GAAG,GAAGC,GAAG,CAACl3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAIg3S,GAAG,KAAKC,GAAG,CAAC,CAAD,CAAX,IAAkB,SAASn5S,OAAT,CAAiBk5S,GAAjB,KAAyB,CAA3C,IAAgDC,GAAG,KAAK,IAA5D,EAAkE;AAChEzwU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEuzU,GAFF;AAGLzqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAtIuB,CAsItB;;;AAGF,MAAI,eAAes3B,OAAf,CAAuBk5S,GAAvB,KAA+B,CAAnC,EAAsC;AACpC,MAAExwU,KAAF;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEszU,GAFF;AAGLxqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD;;AAED+vU,EAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,EAAC;;;AAGF,SAAS2B,cAAT,CAAwB5qU,KAAxB,EAA+B;AAC7B,MAAIkwM,MAAM,GAAG,EAAb;;AAEA,SAAOl2M,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAf,EAAgC;AAC9B;AACD;;AAEDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAIk2M,MAAM,CAAC18M,MAAP,KAAkB,CAAtB,EAAyB;AACvBu2U,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAAC,OAAOohF,MAAR,EAAgB,EAAhB,CAFV;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD;;AAED,SAAS6wU,gBAAT,CAA0B7qU,KAA1B,EAAiC;AAC/B,MAAIkwM,MAAM,GAAG,MAAMlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAzB;;AAEA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAjB,EAAkC;AAChC;AACD;;AAEDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAI0vU,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjB,IAA+CqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjE,EAA6F;AAC3F+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAACohF,MAAD,EAAS,CAAT,CAFV;AAGL46H,IAAAA,KAAK,EAAE,IAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAAS+wU,kBAAT,GAA8B;AAC5B,MAAI76H,MAAJ,EAAYlwM,KAAZ,EAAmB+7T,EAAnB;AACAA,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAAC0uU,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAd,IAAoCozP,EAAE,KAAK,GAA5C,EAAiD,oEAAjD,CAAN;AACA/7T,EAAAA,KAAK,GAAGhG,KAAR;AACAk2M,EAAAA,MAAM,GAAG,EAAT;;AAEA,MAAI6rH,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,GAAGlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAf;AACA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX,CAFc,CAEM;AACpB;;AAEA,QAAIk2M,MAAM,KAAK,GAAf,EAAoB;AAClB,UAAI6rH,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B,UAAE/hU,KAAF;AACA,eAAO4wU,cAAc,CAAC5qU,KAAD,CAArB;AACD;;AAED,UAAIupU,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpB,eAAO8O,gBAAgB,CAAC7qU,KAAD,CAAvB;AACD,OARiB,CAQhB;;;AAGF,UAAI+7T,EAAE,IAAIsN,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAxB,EAA4C;AAC1CohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,WAAOI,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;;AAEA,WAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AAEA,QAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,QAAIqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAlB,EAA8C;AAC5C,aAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,QAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;AACF,KAJD,MAIO;AACL+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAEgP,UAAU,CAACgqM,MAAD,CAFZ;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAAC;;;AAGF,SAASgxU,iBAAT,GAA6B;AAC3B,MAAIj8N,GAAG,GAAG,EAAV;AAAA,MACImjK,KADJ;AAAA,MAEIlyQ,KAFJ;AAAA,MAGI+7T,EAHJ;AAAA,MAIIxjC,IAJJ;AAAA,MAKIuyC,KAAK,GAAG,KALZ;AAMA54D,EAAAA,KAAK,GAAGloN,MAAM,CAAChwD,KAAD,CAAd;AACAW,EAAAA,MAAM,CAACu3Q,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,GAA7B,EAAkC,yCAAlC,CAAN;AACAlyQ,EAAAA,KAAK,GAAGhG,KAAR;AACA,IAAEA,KAAF;;AAEA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AAEA,QAAI+hU,EAAE,KAAK7pD,KAAX,EAAkB;AAChBA,MAAAA,KAAK,GAAG,EAAR;AACA;AACD,KAHD,MAGO,IAAI6pD,EAAE,KAAK,IAAX,EAAiB;AACtBA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AAEA,UAAI,CAAC+hU,EAAD,IAAO,CAAC0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5B,EAAgD;AAC9C,gBAAQozP,EAAR;AACE,eAAK,GAAL;AACA,eAAK,GAAL;AACE,gBAAI/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,GAAtB,EAA2B;AACzB,gBAAEA,KAAF;AACA+0G,cAAAA,GAAG,IAAIi7N,0BAA0B,EAAjC;AACD,aAHD,MAGO;AACLj7N,cAAAA,GAAG,IAAI+6N,aAAa,CAAC/N,EAAD,CAApB;AACD;;AAED;;AAEF,eAAK,GAAL;AACEhtN,YAAAA,GAAG,IAAI,IAAP;AACA;;AAEF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AAEF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AAEF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AAEF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AAEF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,MAAP;AACA;;AAEF;AACE,gBAAIw6N,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpBxjC,cAAAA,IAAI,GAAG,WAAWjnQ,OAAX,CAAmByqS,EAAnB,CAAP,CADoB,CACW;;AAE/B,kBAAIxjC,IAAI,KAAK,CAAb,EAAgB;AACduyC,gBAAAA,KAAK,GAAG,IAAR;AACD;;AAED,kBAAI9wU,KAAK,GAAGxG,MAAR,IAAkB+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAlC,EAAmD;AACjD8wU,gBAAAA,KAAK,GAAG,IAAR;AACAvyC,gBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB,CAFiD,CAEM;AACvD;;AAEA,oBAAI,OAAOs3B,OAAP,CAAeyqS,EAAf,KAAsB,CAAtB,IAA2B/hU,KAAK,GAAGxG,MAAnC,IAA6C+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAA7D,EAA8E;AAC5Eu+R,kBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB;AACD;AACF;;AAED+0G,cAAAA,GAAG,IAAIvvG,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD,aAlBD,MAkBO;AACLxpL,cAAAA,GAAG,IAAIgtN,EAAP;AACD;;AAED;AA3DJ;AA6DD,OA9DD,MA8DO;AACL,YAAIA,EAAE,KAAK,IAAP,IAAe/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,IAArC,EAA2C;AACzC,YAAEA,KAAF;AACD;AACF;AACF,KAtEM,MAsEA,IAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7C;AACD,KAFM,MAEA;AACLomC,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAI7pD,KAAK,KAAK,EAAd,EAAkB;AAChB63D,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEuzT,kBADD;AAELxwU,IAAAA,KAAK,EAAE63G,GAFF;AAGL+7N,IAAAA,KAAK,EAAEA,KAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAASixU,UAAT,CAAoBj1K,OAApB,EAA6Bl/J,KAA7B,EAAoC;AAClC,MAAIwnC,GAAG,GAAG03H,OAAV;;AAEA,MAAIl/J,KAAK,CAACw6B,OAAN,CAAc,GAAd,KAAsB,CAA1B,EAA6B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAgN,IAAAA,GAAG,GAAGA,GAAG,CAAC7mC,OAAJ,CAAY,wBAAZ,EAAsC,CAACssM,EAAD,EAAKmnI,EAAL,KAAY;AACtD,UAAIp8M,QAAQ,CAACo8M,EAAD,EAAK,EAAL,CAAR,IAAoB,QAAxB,EAAkC;AAChC,eAAO,GAAP;AACD;;AAEDnB,MAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,KANK,EAMHpxU,OANG,CAMK,iCANL,EAMwC,GANxC,CAAN;AAOD,GAnBiC,CAmBhC;;;AAGF,MAAI;AACF,QAAIo3H,MAAJ,CAAWvwF,GAAX;AACD,GAFD,CAEE,OAAO1rC,CAAP,EAAU;AACVm3U,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,GA1BiC,CA0BhC;AACF;AACA;;;AAGA,MAAI;AACF,WAAO,IAAIh6M,MAAJ,CAAWmnC,OAAX,EAAoBl/J,KAApB,CAAP;AACD,GAFD,CAEE,OAAOq0U,SAAP,EAAkB;AAClB,WAAO,IAAP;AACD;AACF;;AAED,SAASC,cAAT,GAA0B;AACxB,MAAIrP,EAAJ,EAAQhtN,GAAR,EAAas8N,WAAb,EAA0BC,UAA1B,EAAsCt9Q,IAAtC;AACA+tQ,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAACohU,EAAE,KAAK,GAAR,EAAa,oDAAb,CAAN;AACAhtN,EAAAA,GAAG,GAAG/kD,MAAM,CAAChwD,KAAK,EAAN,CAAZ;AACAqxU,EAAAA,WAAW,GAAG,KAAd;AACAC,EAAAA,UAAU,GAAG,KAAb;;AAEA,SAAOtxU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACA+0G,IAAAA,GAAG,IAAIgtN,EAAP;;AAEA,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACfA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX,CADe,CACO;;AAEtB,UAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AACtCohQ,QAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD;;AAED/5N,MAAAA,GAAG,IAAIgtN,EAAP;AACD,KARD,MAQO,IAAI0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7CohQ,MAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,KAFM,MAEA,IAAIuC,WAAJ,EAAiB;AACtB,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACdsP,QAAAA,WAAW,GAAG,KAAd;AACD;AACF,KAJM,MAIA;AACL,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACduP,QAAAA,UAAU,GAAG,IAAb;AACA;AACD,OAHD,MAGO,IAAIvP,EAAE,KAAK,GAAX,EAAgB;AACrBsP,QAAAA,WAAW,GAAG,IAAd;AACD;AACF;AACF;;AAED,MAAI,CAACC,UAAL,EAAiB;AACfvB,IAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,GAtCuB,CAsCtB;;;AAGF96Q,EAAAA,IAAI,GAAG+gD,GAAG,CAACv7E,MAAJ,CAAW,CAAX,EAAcu7E,GAAG,CAACv7G,MAAJ,GAAa,CAA3B,CAAP;AACA,SAAO;AACL0D,IAAAA,KAAK,EAAE82D,IADF;AAELu9Q,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAASy8N,eAAT,GAA2B;AACzB,MAAIzP,EAAJ,EAAQhtN,GAAR,EAAaj4G,KAAb;AACAi4G,EAAAA,GAAG,GAAG,EAAN;AACAj4G,EAAAA,KAAK,GAAG,EAAR;;AAEA,SAAOkD,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AAEA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAArB,EAAyC;AACvC;AACD;;AAED,MAAE3uE,KAAF;;AAEA,QAAI+hU,EAAE,KAAK,IAAP,IAAe/hU,KAAK,GAAGxG,MAA3B,EAAmC;AACjCu2U,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,KAFD,MAEO;AACLnyU,MAAAA,KAAK,IAAIilU,EAAT;AACAhtN,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAIjlU,KAAK,CAACO,MAAN,CAAa,WAAb,KAA6B,CAAjC,EAAoC;AAClC0yU,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,EAA2B/xU,KAA3B,CAAV;AACD;;AAED,SAAO;AACLI,IAAAA,KAAK,EAAEJ,KADF;AAELy0U,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAAS08N,UAAT,GAAsB;AACpB,MAAIzrU,KAAJ,EAAWguD,IAAX,EAAiBl3D,KAAjB,EAAwBI,KAAxB;AACAgwU,EAAAA,SAAS,GAAG,IAAZ;AACA2C,EAAAA,WAAW;AACX7pU,EAAAA,KAAK,GAAGhG,KAAR;AACAg0D,EAAAA,IAAI,GAAGo9Q,cAAc,EAArB;AACAt0U,EAAAA,KAAK,GAAG00U,eAAe,EAAvB;AACAt0U,EAAAA,KAAK,GAAG+zU,UAAU,CAACj9Q,IAAI,CAAC92D,KAAN,EAAaJ,KAAK,CAACI,KAAnB,CAAlB;AACA,SAAO;AACLq0U,IAAAA,OAAO,EAAEv9Q,IAAI,CAACu9Q,OAAL,GAAez0U,KAAK,CAACy0U,OADzB;AAELr0U,IAAAA,KAAK,EAAEA,KAFF;AAGLw0U,IAAAA,KAAK,EAAE;AACL11K,MAAAA,OAAO,EAAEhoG,IAAI,CAAC92D,KADT;AAELJ,MAAAA,KAAK,EAAEA,KAAK,CAACI;AAFR,KAHF;AAOL8I,IAAAA,KAAK,EAAEA,KAPF;AAQL6F,IAAAA,GAAG,EAAE7L;AARA,GAAP;AAUD;;AAED,SAAS2xU,gBAAT,CAA0Bp5H,KAA1B,EAAiC;AAC/B,SAAOA,KAAK,CAACp+L,IAAN,KAAekzT,eAAf,IAAkC90H,KAAK,CAACp+L,IAAN,KAAemzT,YAAjD,IAAiE/0H,KAAK,CAACp+L,IAAN,KAAegzT,mBAAhF,IAAuG50H,KAAK,CAACp+L,IAAN,KAAeozT,gBAA7H;AACD;;AAED,SAASqE,OAAT,GAAmB;AACjB/B,EAAAA,WAAW;;AAEX,MAAI7vU,KAAK,IAAIxG,MAAb,EAAqB;AACnB,WAAO;AACL2gB,MAAAA,IAAI,EAAEizT,QADD;AAELpnU,MAAAA,KAAK,EAAEhG,KAFF;AAGL6L,MAAAA,GAAG,EAAE7L;AAHA,KAAP;AAKD;;AAED,QAAM+hU,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAX;;AAEA,MAAI0vU,iBAAiB,CAAC3N,EAAD,CAArB,EAA2B;AACzB,WAAOsO,cAAc,EAArB;AACD,GAfgB,CAef;;;AAGF,MAAItO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,IAAzC,EAA+C;AAC7C,WAAOuO,cAAc,EAArB;AACD,GApBgB,CAoBf;;;AAGF,MAAIvO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAA1B,EAAgC;AAC9B,WAAOiP,iBAAiB,EAAxB;AACD,GAzBgB,CAyBf;AACF;;;AAGA,MAAIjP,EAAE,KAAK,IAAX,EAAiB;AACf,QAAIsN,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAD,CAAlB,EAAkD;AAChD,aAAO+wU,kBAAkB,EAAzB;AACD;;AAED,WAAOT,cAAc,EAArB;AACD;;AAED,MAAIjB,cAAc,CAACtN,EAAD,CAAlB,EAAwB;AACtB,WAAOgP,kBAAkB,EAAzB;AACD;;AAED,SAAOT,cAAc,EAArB;AACD;;AAED,SAASuB,GAAT,GAAe;AACb,QAAMt5H,KAAK,GAAG20H,SAAd;AACAltU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AACAqhU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AACA5xU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AACA,SAAO0sM,KAAP;AACD;;AAED,SAASpF,IAAT,GAAgB;AACd,QAAMnrE,GAAG,GAAGhoI,KAAZ;AACAktU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AACA5xU,EAAAA,KAAK,GAAGgoI,GAAR;AACD;;AAED,SAAS8pM,qBAAT,CAA+BpH,QAA/B,EAAyC;AACvC,QAAMzlT,IAAI,GAAG,IAAI2nT,OAAJ,CAAYgB,qBAAZ,CAAb;AACA3oT,EAAAA,IAAI,CAACylT,QAAL,GAAgBA,QAAhB;AACA,SAAOzlT,IAAP;AACD;;AAED,SAAS8sT,sBAAT,CAAgCnnI,QAAhC,EAA0Cv9J,IAA1C,EAAgDC,KAAhD,EAAuD;AACrD,QAAMroB,IAAI,GAAG,IAAI2nT,OAAJ,CAAYhiI,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAK,IAAlC,GAAyCsjI,uBAAzC,GAAmEL,sBAA/E,CAAb;AACA5oT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAACooB,IAAL,GAAYA,IAAZ;AACApoB,EAAAA,IAAI,CAACqoB,KAAL,GAAaA,KAAb;AACA,SAAOroB,IAAP;AACD;;AAED,SAAS+sT,oBAAT,CAA8BnF,MAA9B,EAAsC9yU,IAAtC,EAA4C;AAC1C,QAAMkrB,IAAI,GAAG,IAAI2nT,OAAJ,CAAYkB,oBAAZ,CAAb;AACA7oT,EAAAA,IAAI,CAAC4nT,MAAL,GAAcA,MAAd;AACA5nT,EAAAA,IAAI,CAAChrB,SAAL,GAAiBF,IAAjB;AACA,SAAOkrB,IAAP;AACD;;AAED,SAASgtT,2BAAT,CAAqCpqT,IAArC,EAA2CilT,UAA3C,EAAuDC,SAAvD,EAAkE;AAChE,QAAM9nT,IAAI,GAAG,IAAI2nT,OAAJ,CAAYmB,2BAAZ,CAAb;AACA9oT,EAAAA,IAAI,CAAC4C,IAAL,GAAYA,IAAZ;AACA5C,EAAAA,IAAI,CAAC6nT,UAAL,GAAkBA,UAAlB;AACA7nT,EAAAA,IAAI,CAAC8nT,SAAL,GAAiBA,SAAjB;AACA,SAAO9nT,IAAP;AACD;;AAED,SAASitT,gBAAT,CAA0Bz2U,IAA1B,EAAgC;AAC9B,QAAMwpB,IAAI,GAAG,IAAI2nT,OAAJ,CAAYoB,gBAAZ,CAAb;AACA/oT,EAAAA,IAAI,CAACxpB,IAAL,GAAYA,IAAZ;AACA,SAAOwpB,IAAP;AACD;;AAED,SAASktT,aAAT,CAAuB55H,KAAvB,EAA8B;AAC5B,QAAMtzL,IAAI,GAAG,IAAI2nT,OAAJ,CAAYqB,aAAZ,CAAb;AACAhpT,EAAAA,IAAI,CAAC/nB,KAAL,GAAaq7M,KAAK,CAACr7M,KAAnB;AACA+nB,EAAAA,IAAI,CAAC63K,GAAL,GAAW9sI,MAAM,CAACzsD,KAAP,CAAag1M,KAAK,CAACvyM,KAAnB,EAA0BuyM,KAAK,CAAC1sM,GAAhC,CAAX;;AAEA,MAAI0sM,KAAK,CAACm5H,KAAV,EAAiB;AACf,QAAIzsT,IAAI,CAAC63K,GAAL,KAAa,IAAjB,EAAuB;AACrB73K,MAAAA,IAAI,CAAC63K,GAAL,GAAW,QAAX;AACD;;AAED73K,IAAAA,IAAI,CAACysT,KAAL,GAAan5H,KAAK,CAACm5H,KAAnB;AACD;;AAED,SAAOzsT,IAAP;AACD;;AAED,SAASmtT,sBAAT,CAAgCr/H,QAAhC,EAA0CxR,MAA1C,EAAkDkQ,QAAlD,EAA4D;AAC1D,QAAMxsL,IAAI,GAAG,IAAI2nT,OAAJ,CAAYuB,sBAAZ,CAAb;AACAlpT,EAAAA,IAAI,CAACotT,QAAL,GAAgBt/H,QAAQ,KAAK,GAA7B;AACA9tL,EAAAA,IAAI,CAACs8K,MAAL,GAAcA,MAAd;AACAt8K,EAAAA,IAAI,CAACwsL,QAAL,GAAgBA,QAAhB;AACA,MAAI,CAACxsL,IAAI,CAACotT,QAAV,EAAoB5gI,QAAQ,CAAC6gI,MAAT,GAAkB,IAAlB;AACpB,SAAOrtT,IAAP;AACD;;AAED,SAASstT,sBAAT,CAAgCl3H,UAAhC,EAA4C;AAC1C,QAAMp2L,IAAI,GAAG,IAAI2nT,OAAJ,CAAYwB,sBAAZ,CAAb;AACAnpT,EAAAA,IAAI,CAACo2L,UAAL,GAAkBA,UAAlB;AACA,SAAOp2L,IAAP;AACD;;AAED,SAASutT,cAAT,CAAwBC,IAAxB,EAA8Bt0U,GAA9B,EAAmCjB,KAAnC,EAA0C;AACxC,QAAM+nB,IAAI,GAAG,IAAI2nT,OAAJ,CAAYyB,cAAZ,CAAb;AACAppT,EAAAA,IAAI,CAAC9mB,GAAL,GAAWA,GAAX;AACA8mB,EAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AACA+nB,EAAAA,IAAI,CAACwtT,IAAL,GAAYA,IAAZ;AACA,SAAOxtT,IAAP;AACD;;AAED,SAASytT,qBAAT,CAA+B9nI,QAA/B,EAAyCoiI,QAAzC,EAAmD;AACjD,QAAM/nT,IAAI,GAAG,IAAI2nT,OAAJ,CAAY0B,qBAAZ,CAAb;AACArpT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAAC+nT,QAAL,GAAgBA,QAAhB;AACA/nT,EAAAA,IAAI,CAACq4F,MAAL,GAAc,IAAd;AACA,SAAOr4F,IAAP;AACD,EAAC;;;AAGF,SAAS8qT,UAAT,CAAoBx3H,KAApB,EAA2Bo6H,aAA3B,EAA0C;AACxC,MAAIp0T,KAAJ;AAAA,MACIxkB,IAAI,GAAGC,KAAK,CAACM,SAAN,CAAgBiJ,KAAhB,CAAsBvK,IAAtB,CAA2BiB,SAA3B,EAAsC,CAAtC,CADX;AAAA,MAEI4G,GAAG,GAAG8xU,aAAa,CAACl1U,OAAd,CAAsB,QAAtB,EAAgC,CAACm1U,KAAD,EAAQ5yU,KAAR,KAAkB;AAC1DW,IAAAA,MAAM,CAACX,KAAK,GAAGjG,IAAI,CAACP,MAAd,EAAsB,oCAAtB,CAAN;AACA,WAAOO,IAAI,CAACiG,KAAD,CAAX;AACD,GAHS,CAFV;AAMAue,EAAAA,KAAK,GAAG,IAAI9lB,KAAJ,CAAUoI,GAAV,CAAR;AACA0d,EAAAA,KAAK,CAACve,KAAN,GAAcA,KAAd;AACAue,EAAAA,KAAK,CAAC07P,WAAN,GAAoBp5Q,GAApB;AACA,QAAM0d,KAAN;AACD,EAAC;;;AAGF,SAASs0T,eAAT,CAAyBt6H,KAAzB,EAAgC;AAC9B,MAAIA,KAAK,CAACp+L,IAAN,KAAeizT,QAAnB,EAA6B;AAC3B2C,IAAAA,UAAU,CAACx3H,KAAD,EAAQq2H,oBAAR,CAAV;AACD;;AAED,MAAIr2H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAnB,EAAwC;AACtCuC,IAAAA,UAAU,CAACx3H,KAAD,EAAQi2H,uBAAR,CAAV;AACD;;AAED,MAAIj2H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAnB,EAAuC;AACrCqC,IAAAA,UAAU,CAACx3H,KAAD,EAAQk2H,uBAAR,CAAV;AACD;;AAED,MAAIl2H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClC0C,IAAAA,UAAU,CAACx3H,KAAD,EAAQm2H,2BAAR,CAAV;AACD;;AAED,MAAIn2H,KAAK,CAACp+L,IAAN,KAAemzT,YAAnB,EAAiC;AAC/ByC,IAAAA,UAAU,CAACx3H,KAAD,EAAQo2H,yBAAR,CAAV;AACD,GAnB6B,CAmB5B;;;AAGFoB,EAAAA,UAAU,CAACx3H,KAAD,EAAQg2H,sBAAR,EAAgCh2H,KAAK,CAACr7M,KAAtC,CAAV;AACD,EAAC;AACF;;;AAGA,SAASy6E,MAAT,CAAgBz6E,KAAhB,EAAuB;AACrB,QAAMq7M,KAAK,GAAGs5H,GAAG,EAAjB;;AAEA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACr7M,KAAN,KAAgBA,KAAtD,EAA6D;AAC3D21U,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;AACF,EAAC;;;AAGF,SAASjzF,KAAT,CAAepoH,KAAf,EAAsB;AACpB,SAAOgwU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAChwU,KAAV,KAAoBA,KAAjE;AACD,EAAC;;;AAGF,SAAS41U,YAAT,CAAsBC,OAAtB,EAA+B;AAC7B,SAAO7F,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAAnB,IAAmCJ,SAAS,CAAChwU,KAAV,KAAoB61U,OAA9D;AACD,EAAC;;;AAGF,SAASC,qBAAT,GAAiC;AAC/B,QAAMtI,QAAQ,GAAG,EAAjB;AACA1qU,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClB,QAAIA,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,MAAAA,GAAG;AACHnH,MAAAA,QAAQ,CAACvwU,IAAT,CAAc,IAAd;AACD,KAHD,MAGO;AACLuwU,MAAAA,QAAQ,CAACvwU,IAAT,CAAc84U,0BAA0B,EAAxC;;AAEA,UAAI,CAAC3tN,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,QAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;AACF;;AAEDk6P,EAAAA,GAAG;AACH,SAAOC,qBAAqB,CAACpH,QAAD,CAA5B;AACD,EAAC;;;AAGF,SAASwI,sBAAT,GAAkC;AAChClzU,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA,QAAMuyM,KAAK,GAAGs5H,GAAG,EAAjB,CAFgC,CAEX;AACrB;;AAEA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAf,IAAqCn1H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAxD,EAA6E;AAC3E,QAAIj1H,KAAK,CAACu4H,KAAV,EAAiB;AACff,MAAAA,UAAU,CAACx3H,KAAD,EAAQw2H,yBAAR,CAAV;AACD;;AAED,WAAOoD,aAAa,CAAC55H,KAAD,CAApB;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASi2U,mBAAT,GAA+B;AAC7B,MAAI56H,KAAJ,EAAWp6M,GAAX,EAAgBgP,EAAhB,EAAoBjQ,KAApB;AACA8C,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAG20H,SAAR;;AAEA,MAAI30H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClClgU,IAAAA,EAAE,GAAG+lU,sBAAsB,EAA3B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASrlU,EAAT,EAAajQ,KAAb,CAArB;AACD;;AAED,MAAIq7M,KAAK,CAACp+L,IAAN,KAAeizT,QAAf,IAA2B70H,KAAK,CAACp+L,IAAN,KAAeszT,eAA9C,EAA+D;AAC7DoF,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD,GAFD,MAEO;AACLp6M,IAAAA,GAAG,GAAG+0U,sBAAsB,EAA5B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASr0U,GAAT,EAAcjB,KAAd,CAArB;AACD;AACF;;AAED,SAASk2U,sBAAT,GAAkC;AAChC,MAAI/3H,UAAU,GAAG,EAAjB;AAAA,MACI5J,QADJ;AAAA,MAEIh2M,IAFJ;AAAA,MAGI0C,GAHJ;AAAA,MAIIwF,GAAG,GAAG,EAJV;AAAA,MAKIkG,QAAQ,GAAGrE,MALf;AAMAxF,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClBmsF,IAAAA,QAAQ,GAAG0hI,mBAAmB,EAA9B;;AAEA,QAAI1hI,QAAQ,CAACtzM,GAAT,CAAagc,IAAb,KAAsB6zT,gBAA1B,EAA4C;AAC1CvyU,MAAAA,IAAI,GAAGg2M,QAAQ,CAACtzM,GAAT,CAAa1C,IAApB;AACD,KAFD,MAEO;AACLA,MAAAA,IAAI,GAAGoO,QAAQ,CAAC4nM,QAAQ,CAACtzM,GAAT,CAAajB,KAAd,CAAf;AACD;;AAEDiB,IAAAA,GAAG,GAAG,MAAM1C,IAAZ;;AAEA,QAAIwB,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC2K,GAArC,EAA0CxF,GAA1C,CAAJ,EAAoD;AAClD4xU,MAAAA,UAAU,CAAC,EAAD,EAAKf,8BAAL,CAAV;AACD,KAFD,MAEO;AACLrrU,MAAAA,GAAG,CAACxF,GAAD,CAAH,GAAW,IAAX;AACD;;AAEDk9M,IAAAA,UAAU,CAAClhN,IAAX,CAAgBs3M,QAAhB;;AAEA,QAAI,CAACnsF,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,SAAO46P,sBAAsB,CAACl3H,UAAD,CAA7B;AACD,EAAC;;;AAGF,SAASg4H,oBAAT,GAAgC;AAC9B17P,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,QAAM/2E,IAAI,GAAG0yU,eAAe,EAA5B;AACA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,SAAO/2E,IAAP;AACD,EAAC;;;AAGF,MAAM2yU,aAAa,GAAG;AACpB,QAAM;AADc,CAAtB;;AAIA,SAASC,sBAAT,GAAkC;AAChC,MAAIr5T,IAAJ,EAAUo+L,KAAV,EAAiB33M,IAAjB;;AAEA,MAAI0kH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO+tN,oBAAoB,EAA3B;AACD;;AAED,MAAI/tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO0tN,qBAAqB,EAA5B;AACD;;AAED,MAAI1tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO8tN,sBAAsB,EAA7B;AACD;;AAEDj5T,EAAAA,IAAI,GAAG+yT,SAAS,CAAC/yT,IAAjB;AACAna,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;;AAEA,MAAImU,IAAI,KAAKkzT,eAAT,IAA4BkG,aAAa,CAACrG,SAAS,CAAChwU,KAAX,CAA7C,EAAgE;AAC9D0D,IAAAA,IAAI,GAAGsxU,gBAAgB,CAACL,GAAG,GAAG30U,KAAP,CAAvB;AACD,GAFD,MAEO,IAAIid,IAAI,KAAKuzT,kBAAT,IAA+BvzT,IAAI,KAAKqzT,mBAA5C,EAAiE;AACtE,QAAIN,SAAS,CAAC4D,KAAd,EAAqB;AACnBf,MAAAA,UAAU,CAAC7C,SAAD,EAAY6B,yBAAZ,CAAV;AACD;;AAEDnuU,IAAAA,IAAI,GAAGuxU,aAAa,CAACN,GAAG,EAAJ,CAApB;AACD,GANM,MAMA,IAAI13T,IAAI,KAAKmzT,YAAb,EAA2B;AAChC,UAAM,IAAI70U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI/0T,IAAI,KAAKgzT,mBAAb,EAAkC;AACvC50H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAcq7M,KAAK,CAACr7M,KAAN,KAAgB,MAA9B;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIp+L,IAAI,KAAKozT,gBAAb,EAA+B;AACpCh1H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAc,IAAd;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIjzF,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,IAAD,CAAvB,EAA+B;AACpC1kH,IAAAA,IAAI,GAAGuxU,aAAa,CAACV,UAAU,EAAX,CAApB;AACAt+H,IAAAA,IAAI;AACL,GAHM,MAGA;AACL0/H,IAAAA,eAAe,CAAChB,GAAG,EAAJ,CAAf;AACD;;AAED,SAAOjxU,IAAP;AACD,EAAC;;;AAGF,SAAS6yU,cAAT,GAA0B;AACxB,QAAM15U,IAAI,GAAG,EAAb;AACA49E,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,MAAI,CAAC2tC,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf,WAAOtlH,KAAK,GAAGxG,MAAf,EAAuB;AACrBO,MAAAA,IAAI,CAACI,IAAL,CAAU84U,0BAA0B,EAApC;;AAEA,UAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd;AACD;;AAED3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,SAAO59E,IAAP;AACD;;AAED,SAAS25U,wBAAT,GAAoC;AAClC1zU,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA,QAAMuyM,KAAK,GAAGs5H,GAAG,EAAjB;;AAEA,MAAI,CAACF,gBAAgB,CAACp5H,KAAD,CAArB,EAA8B;AAC5Bs6H,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASy2U,sBAAT,GAAkC;AAChCh8P,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,SAAO+7P,wBAAwB,EAA/B;AACD;;AAED,SAASE,mBAAT,GAA+B;AAC7Bj8P,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,QAAM/2E,IAAI,GAAG0yU,eAAe,EAA5B;AACA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AACA,SAAO/2E,IAAP;AACD;;AAED,SAASizU,oCAAT,GAAgD;AAC9C,MAAIjzU,IAAJ,EAAU7G,IAAV,EAAgB03M,QAAhB;AACA7wM,EAAAA,IAAI,GAAG4yU,sBAAsB,EAA7B;;AAEA,WAAS;AACP,QAAIluN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdmsF,MAAAA,QAAQ,GAAGkiI,sBAAsB,EAAjC;AACA/yU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHD,MAGO,IAAInsF,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBvrH,MAAAA,IAAI,GAAG05U,cAAc,EAArB;AACA7yU,MAAAA,IAAI,GAAGoxU,oBAAoB,CAACpxU,IAAD,EAAO7G,IAAP,CAA3B;AACD,KAHM,MAGA,IAAIurH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBmsF,MAAAA,QAAQ,GAAGmiI,mBAAmB,EAA9B;AACAhzU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHM,MAGA;AACL;AACD;AACF;;AAED,SAAO7wM,IAAP;AACD,EAAC;;;AAGF,SAASkzU,sBAAT,GAAkC;AAChC,QAAMlzU,IAAI,GAAGizU,oCAAoC,EAAjD;;AAEA,MAAI3G,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAvB,EAAwC;AACtC,QAAInoN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAxB,EAAgC;AAC9B,YAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD;AACF;;AAED,SAAOtuU,IAAP;AACD,EAAC;;;AAGF,SAASmzU,oBAAT,GAAgC;AAC9B,MAAIx7H,KAAJ,EAAW33M,IAAX;;AAEA,MAAIssU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAA7D,EAA2E;AACzE1sU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD,GAFD,MAEO,IAAIxuN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAxB,EAAgC;AACrC,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI5pN,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,GAAD,CAAnB,IAA4BA,KAAK,CAAC,GAAD,CAAjC,IAA0CA,KAAK,CAAC,GAAD,CAAnD,EAA0D;AAC/DizF,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAjxU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACAnzU,IAAAA,IAAI,GAAG8xU,qBAAqB,CAACn6H,KAAK,CAACr7M,KAAP,EAAc0D,IAAd,CAA5B;AACD,GAJM,MAIA,IAAIkyU,YAAY,CAAC,QAAD,CAAZ,IAA0BA,YAAY,CAAC,MAAD,CAAtC,IAAkDA,YAAY,CAAC,QAAD,CAAlE,EAA8E;AACnF,UAAM,IAAIr6U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA;AACLtuU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD;;AAED,SAAOlzU,IAAP;AACD;;AAED,SAASozU,gBAAT,CAA0Bz7H,KAA1B,EAAiC;AAC/B,MAAI07H,IAAI,GAAG,CAAX;;AAEA,MAAI17H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACp+L,IAAN,KAAemzT,YAArD,EAAmE;AACjE,WAAO,CAAP;AACD;;AAED,UAAQ/0H,KAAK,CAACr7M,KAAd;AACE,SAAK,IAAL;AACE+2U,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,YAAL;AACA,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,EAAP;AACA;AApDJ;;AAuDA,SAAOA,IAAP;AACD,EAAC;AACF;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASC,qBAAT,GAAiC;AAC/B,MAAIh7U,MAAJ,EAAYi7U,OAAZ,EAAqBvzU,IAArB,EAA2B23M,KAA3B,EAAkC07H,IAAlC,EAAwCvkU,KAAxC,EAA+C49B,KAA/C,EAAsDs9J,QAAtD,EAAgEv9J,IAAhE,EAAsEnzC,CAAtE;AACAhB,EAAAA,MAAM,GAAGg0U,SAAT;AACA7/R,EAAAA,IAAI,GAAG0mS,oBAAoB,EAA3B;AACAx7H,EAAAA,KAAK,GAAG20H,SAAR;AACA+G,EAAAA,IAAI,GAAGD,gBAAgB,CAACz7H,KAAD,CAAvB;;AAEA,MAAI07H,IAAI,KAAK,CAAb,EAAgB;AACd,WAAO5mS,IAAP;AACD;;AAEDkrK,EAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACApC,EAAAA,GAAG;AACHsC,EAAAA,OAAO,GAAG,CAACj7U,MAAD,EAASg0U,SAAT,CAAV;AACA5/R,EAAAA,KAAK,GAAGymS,oBAAoB,EAA5B;AACArkU,EAAAA,KAAK,GAAG,CAAC29B,IAAD,EAAOkrK,KAAP,EAAcjrK,KAAd,CAAR;;AAEA,SAAO,CAAC2mS,IAAI,GAAGD,gBAAgB,CAAC9G,SAAD,CAAxB,IAAuC,CAA9C,EAAiD;AAC/C;AACA,WAAOx9T,KAAK,CAAClW,MAAN,GAAe,CAAf,IAAoBy6U,IAAI,IAAIvkU,KAAK,CAACA,KAAK,CAAClW,MAAN,GAAe,CAAhB,CAAL,CAAwBy6U,IAA3D,EAAiE;AAC/D3mS,MAAAA,KAAK,GAAG59B,KAAK,CAAC4U,GAAN,EAAR;AACAsmL,MAAAA,QAAQ,GAAGl7L,KAAK,CAAC4U,GAAN,GAAYpnB,KAAvB;AACAmwC,MAAAA,IAAI,GAAG39B,KAAK,CAAC4U,GAAN,EAAP;AACA6vT,MAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,MAAAA,IAAI,GAAGmxU,sBAAsB,CAACnnI,QAAD,EAAWv9J,IAAX,EAAiBC,KAAjB,CAA7B;AACA59B,MAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,KAT8C,CAS7C;;;AAGF23M,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACAvkU,IAAAA,KAAK,CAACvV,IAAN,CAAWo+M,KAAX;AACA47H,IAAAA,OAAO,CAACh6U,IAAR,CAAa+yU,SAAb;AACAtsU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACArkU,IAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,GAnC8B,CAmC7B;;;AAGF1G,EAAAA,CAAC,GAAGwV,KAAK,CAAClW,MAAN,GAAe,CAAnB;AACAoH,EAAAA,IAAI,GAAG8O,KAAK,CAACxV,CAAD,CAAZ;AACAi6U,EAAAA,OAAO,CAAC7vT,GAAR;;AAEA,SAAOpqB,CAAC,GAAG,CAAX,EAAc;AACZi6U,IAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,IAAAA,IAAI,GAAGmxU,sBAAsB,CAACriU,KAAK,CAACxV,CAAC,GAAG,CAAL,CAAL,CAAagD,KAAd,EAAqBwS,KAAK,CAACxV,CAAC,GAAG,CAAL,CAA1B,EAAmC0G,IAAnC,CAA7B;AACA1G,IAAAA,CAAC,IAAI,CAAL;AACD;;AAED,SAAO0G,IAAP;AACD,EAAC;;;AAGF,SAASqyU,0BAAT,GAAsC;AACpC,MAAIryU,IAAJ,EAAUksU,UAAV,EAAsBC,SAAtB;AACAnsU,EAAAA,IAAI,GAAGszU,qBAAqB,EAA5B;;AAEA,MAAI5uN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,IAAAA,GAAG;AACH/E,IAAAA,UAAU,GAAGmG,0BAA0B,EAAvC;AACAt7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAo1P,IAAAA,SAAS,GAAGkG,0BAA0B,EAAtC;AACAryU,IAAAA,IAAI,GAAGqxU,2BAA2B,CAACrxU,IAAD,EAAOksU,UAAP,EAAmBC,SAAnB,CAAlC;AACD;;AAED,SAAOnsU,IAAP;AACD,EAAC;;;AAGF,SAAS0yU,eAAT,GAA2B;AACzB,QAAM1yU,IAAI,GAAGqyU,0BAA0B,EAAvC;;AAEA,MAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN,CADc,CACa;AAC5B;;AAED,SAAOtuU,IAAP;AACD;;AAED,SAASgyM,MAAT,CAAiB2rF,IAAjB,EAAuB;AACrBvuO,EAAAA,MAAM,GAAGuuO,IAAT;AACAv+R,EAAAA,KAAK,GAAG,CAAR;AACAxG,EAAAA,MAAM,GAAGw2D,MAAM,CAACx2D,MAAhB;AACA0zU,EAAAA,SAAS,GAAG,IAAZ;AACA/5H,EAAAA,IAAI;AACJ,QAAMvyM,IAAI,GAAG0yU,eAAe,EAA5B;;AAEA,MAAIpG,SAAS,CAAC/yT,IAAV,KAAmBizT,QAAvB,EAAiC;AAC/B,UAAM,IAAI30U,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,SAAOmI,IAAP;AACD;;AAED,IAAIwzU,SAAS,GAAG;AACd3nQ,EAAAA,GAAG,EAAE,KADS;AAEd+lL,EAAAA,CAAC,EAAE,QAFW;AAGd7xC,EAAAA,GAAG,EAAE,UAHS;AAIdN,EAAAA,IAAI,EAAE,WAJQ;AAKdg0H,EAAAA,KAAK,EAAE,YALO;AAMdC,EAAAA,MAAM,EAAE,aANM;AAOd9xS,EAAAA,EAAE,EAAE,SAPU;AAQdqmQ,EAAAA,OAAO,EAAE,cARK;AASdnlE,EAAAA,KAAK,EAAE,YATO;AAUd6wG,EAAAA,SAAS,EAAE,kBAVG;AAWdltM,EAAAA,SAAS,EAAE;AAXG,CAAhB;;;AAcA,SAASmtM,SAAT,CAAoBC,OAApB,EAA6B;AAC3B,WAASC,MAAT,CAAgBj5U,IAAhB,EAAsB1B,IAAtB,EAA4B+T,IAA5B,EAAkCqM,IAAlC,EAAwC;AACtC,QAAIQ,GAAG,GAAG85T,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAjB;;AAEA,QAAI+T,IAAJ,EAAU;AACR6M,MAAAA,GAAG,GAAG7M,IAAI,GAAG,GAAP,GAAa6M,GAAb,GAAmB,GAAzB;AACA,UAAI7M,IAAI,CAACi3G,WAAL,CAAiB,MAAjB,EAAyB,CAAzB,MAAgC,CAApC,EAAuCpqG,GAAG,GAAG,MAAMA,GAAN,GAAY,GAAlB;AACxC;;AAED,WAAOA,GAAG,GAAG,GAAN,GAAYlf,IAAZ,IAAoB0e,IAAI,GAAG,CAAP,GAAW,EAAX,GAAgBA,IAAI,KAAK,CAAT,GAAa,IAAb,GAAoB,MAAMpgB,IAAI,CAACwJ,KAAL,CAAW,CAAX,EAAcI,GAAd,CAAkB8wU,OAAlB,EAA2B32U,IAA3B,CAAgC,GAAhC,CAAN,GAA6C,GAArG,CAAP;AACD;;AAED,WAASqgB,EAAT,CAAY1iB,IAAZ,EAAkBqS,IAAlB,EAAwBqM,IAAxB,EAA8B;AAC5B,WAAOpgB,IAAI,IAAI26U,MAAM,CAACj5U,IAAD,EAAO1B,IAAP,EAAa+T,IAAb,EAAmBqM,IAAnB,CAArB;AACD;;AAED,QAAMkwM,IAAI,GAAG,UAAb;AAAA,QACMsqH,MAAM,GAAG,QADf;AAAA,QAEMC,MAAM,GAAG,QAFf;AAGA,SAAO;AACL;AACA9vU,IAAAA,KAAK,EAAE,cAFF;AAGLC,IAAAA,QAAQ,EAAE,iBAHL;AAILmO,IAAAA,GAAG,EAAE,UAJA;AAKLkB,IAAAA,IAAI,EAAE,WALD;AAMLD,IAAAA,IAAI,EAAE,WAND;AAOLE,IAAAA,IAAI,EAAE,WAPD;AAQL7D,IAAAA,KAAK,EAAE,YARF;AASLnO,IAAAA,IAAI,EAAE,WATD;AAUL4R,IAAAA,GAAG,EAAE,UAVA;AAWL/R,IAAAA,GAAG,EAAE,UAXA;AAYL8F,IAAAA,KAAK,EAAE,YAZF;AAaLkC,IAAAA,GAAG,EAAE,UAbA;AAcL5J,IAAAA,GAAG,EAAE,UAdA;AAeLF,IAAAA,GAAG,EAAE,UAfA;AAgBLuQ,IAAAA,GAAG,EAAE,UAhBA;AAiBLzQ,IAAAA,MAAM,EAAE,aAjBH;AAkBLqG,IAAAA,KAAK,EAAE,YAlBF;AAmBLyN,IAAAA,GAAG,EAAE,UAnBA;AAoBL1R,IAAAA,IAAI,EAAE,WApBD;AAqBL4R,IAAAA,GAAG,EAAE,UArBA;AAsBL/T,IAAAA,KAAK,EAAE,UAAUpG,IAAV,EAAgB;AACrB,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,sCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,uCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,cAAcrzU,CAAC,CAAC,CAAD,CAAf,GAAqB,aAArB,GAAqCA,CAAC,CAAC,CAAD,CAAtC,GAA4C,GAA5C,GAAkDA,CAAC,CAAC,CAAD,CAAnD,GAAyD,IAAhE;AACD,KA3BI;AA4BL;AACA+F,IAAAA,GAAG,EAAE,UA7BA;AA8BLytO,IAAAA,GAAG,EAAE,UA9BA;AA+BLigG,IAAAA,QAAQ,EAAExqH,IA/BL;AAgCL7Z,IAAAA,IAAI,EAAEryL,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CAhCH;AAiCLhE,IAAAA,GAAG,EAAEloM,EAAE,CAAC,QAAD,EAAWksM,IAAX,EAAiB,CAAjB,CAjCF;AAkCLjT,IAAAA,IAAI,EAAEj5L,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CAlCH;AAmCL1C,IAAAA,KAAK,EAAExpM,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CAnCJ;AAoCL/S,IAAAA,KAAK,EAAEn5L,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CApCJ;AAqCL7S,IAAAA,OAAO,EAAEr5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CArCN;AAsCL3S,IAAAA,OAAO,EAAEv5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CAtCN;AAuCLzS,IAAAA,YAAY,EAAEz5L,EAAE,CAAC,iBAAD,EAAoBksM,IAApB,EAA0B,CAA1B,CAvCX;AAwCLphN,IAAAA,IAAI,EAAEkV,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CAxCH;AAyCLyqH,IAAAA,cAAc,EAAE32T,EAAE,CAAC,mBAAD,EAAsBksM,IAAtB,EAA4B,CAA5B,CAzCb;AA0CL0qH,IAAAA,OAAO,EAAE52T,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CA1CN;AA2CL2qH,IAAAA,MAAM,EAAE72T,EAAE,CAAC,WAAD,EAAcksM,IAAd,EAAoB,CAApB,CA3CL;AA4CL4qH,IAAAA,OAAO,EAAE92T,EAAE,CAAC,gBAAD,EAAmBksM,IAAnB,EAAyB,CAAzB,CA5CN;AA6CL6qH,IAAAA,QAAQ,EAAE/2T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CA7CP;AA8CL8qH,IAAAA,QAAQ,EAAEh3T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CA9CP;AA+CL+qH,IAAAA,UAAU,EAAEj3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CA/CT;AAgDLgrH,IAAAA,UAAU,EAAEl3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CAhDT;AAiDLirH,IAAAA,eAAe,EAAEn3T,EAAE,CAAC,oBAAD,EAAuBksM,IAAvB,EAA6B,CAA7B,CAjDd;AAkDL;AACA7wN,IAAAA,MAAM,EAAE2kB,EAAE,CAAC,QAAD,EAAW,IAAX,EAAiB,CAAC,CAAlB,CAnDL;AAoDLrgB,IAAAA,IAAI,EAAEqgB,EAAE,CAAC,MAAD,EAAS,IAAT,CApDH;AAqDLo3T,IAAAA,OAAO,EAAEp3T,EAAE,CAAC,SAAD,EAAY,IAAZ,CArDN;AAsDLq3T,IAAAA,WAAW,EAAEr3T,EAAE,CAAC,aAAD,EAAgB,IAAhB,CAtDV;AAuDL5a,IAAAA,KAAK,EAAE4a,EAAE,CAAC,OAAD,EAAU,IAAV,CAvDJ;AAwDLxP,IAAAA,OAAO,EAAE,UAAU5U,IAAV,EAAgB;AACvB,aAAO,MAAM06U,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAb,GAAyB,qBAAhC;AACD,KA1DI;AA2DL;AACAmS,IAAAA,UAAU,EAAE,YA5DP;AA6DL4oH,IAAAA,QAAQ,EAAE,UA7DL;AA8DL78C,IAAAA,KAAK,EAAE95D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CA9DJ;AA+DLz8P,IAAAA,KAAK,EAAE/5D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CA/DJ;AAgEL37S,IAAAA,SAAS,EAAE7a,EAAE,CAAC,WAAD,EAAcw2T,MAAd,CAhER;AAiEL52U,IAAAA,KAAK,EAAEogB,EAAE,CAAC,OAAD,EAAUw2T,MAAV,CAjEJ;AAkELl3U,IAAAA,OAAO,EAAE0gB,EAAE,CAAC,SAAD,EAAYw2T,MAAZ,CAlEN;AAmELx/N,IAAAA,IAAI,EAAEh3F,EAAE,CAAC,MAAD,EAASw2T,MAAT,EAAiB,CAAjB,CAnEH;AAoEL;AACAj/I,IAAAA,MAAM,EAAEk/I,MArEH;AAsEL/sT,IAAAA,IAAI,EAAE1J,EAAE,CAAC,MAAD,EAASy2T,MAAT,CAtEH;AAuEL;AACAa,IAAAA,EAAE,EAAE,UAAU17U,IAAV,EAAgB;AAClB,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,mCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,oCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,MAAMrzU,CAAC,CAAC,CAAD,CAAP,GAAa,GAAb,GAAmBA,CAAC,CAAC,CAAD,CAApB,GAA0B,GAA1B,GAAgCA,CAAC,CAAC,CAAD,CAAjC,GAAuC,GAA9C;AACD;AA7EI,GAAP;AA+ED;;AAED,SAASs0U,WAAT,CAAqBh4U,CAArB,EAAwB;AACtB,QAAM0K,CAAC,GAAG1K,CAAC,IAAIA,CAAC,CAAClE,MAAF,GAAW,CAA1B;AACA,SAAO4O,CAAC,KAAK1K,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAAC0K,CAAD,CAAD,KAAS,GAAzB,IAAgC1K,CAAC,CAAC,CAAD,CAAD,KAAS,IAAT,IAAiBA,CAAC,CAAC0K,CAAD,CAAD,KAAS,IAA/D,CAAD,GAAwE1K,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAAxE,GAAyF7F,CAAhG;AACD;;AAED,SAAS+2U,OAAT,CAAkBtmI,GAAlB,EAAuB;AACrBA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA,QAAMxD,OAAO,GAAGwD,GAAG,CAACxD,OAAJ,GAAc,qBAAMwD,GAAG,CAACxD,OAAV,CAAd,GAAmC,EAAnD;AAAA,QACMgrI,SAAS,GAAGxnI,GAAG,CAACwnI,SAAJ,GAAgB,qBAAMxnI,GAAG,CAACwnI,SAAV,CAAhB,GAAuC,EADzD;AAAA,QAEM13K,SAAS,GAAGkwC,GAAG,CAAClwC,SAAJ,IAAiBm2K,SAFnC;AAAA,QAGMwB,SAAS,GAAG,CAACznI,GAAG,CAACynI,SAAJ,IAAiBpB,SAAlB,EAA6Bt1G,KAA7B,CAHlB;AAAA,QAIM22G,SAAS,GAAG1nI,GAAG,CAAC0nI,SAJtB;AAAA,QAKMC,QAAQ,GAAG3nI,GAAG,CAAC2nI,QALrB;AAAA,QAMMC,YAAY,GAAG,0BAAWF,SAAX,IAAwBA,SAAxB,GAAoC1oU,EAAE,IAAI,GAAG1T,MAAH,CAAUo8U,SAAV,EAAqB,KAArB,EAA4Bp8U,MAA5B,CAAmC0T,EAAnC,EAAuC,KAAvC,CAN/D;AAOA,MAAI6oU,OAAO,GAAG,EAAd;AAAA,MACIh+R,MAAM,GAAG,EADb;AAAA,MAEIi+R,WAAW,GAAG,CAFlB;;AAIA,WAAS/2G,KAAT,CAAeg3G,GAAf,EAAoB;AAClB,QAAI,wBAASA,GAAT,CAAJ,EAAmB,OAAOA,GAAP;AACnB,UAAMvkJ,SAAS,GAAGwkJ,UAAU,CAACD,GAAG,CAAC/7T,IAAL,CAA5B;AACA,QAAIw3K,SAAS,IAAI,IAAjB,EAAuB,qBAAM,uBAAuBukJ,GAAG,CAAC/7T,IAAjC;AACvB,WAAOw3K,SAAS,CAACukJ,GAAD,CAAhB;AACD;;AAED,QAAMC,UAAU,GAAG;AACjBjK,IAAAA,OAAO,EAAE9jU,CAAC,IAAIA,CAAC,CAAC00L,GADC;AAEjBguF,IAAAA,UAAU,EAAE1iR,CAAC,IAAI;AACf,YAAM+E,EAAE,GAAG/E,CAAC,CAAC3M,IAAb;;AAEA,UAAIw6U,WAAW,GAAG,CAAlB,EAAqB;AACnB,eAAO9oU,EAAP;AACD,OAFD,MAEO,IAAI,8BAAewoU,SAAf,EAA0BxoU,EAA1B,CAAJ,EAAmC;AACxC,eAAO,qBAAM,yBAAyBA,EAA/B,CAAP;AACD,OAFM,MAEA,IAAI,8BAAe8wJ,SAAf,EAA0B9wJ,EAA1B,CAAJ,EAAmC;AACxC,eAAO8wJ,SAAS,CAAC9wJ,EAAD,CAAhB;AACD,OAFM,MAEA,IAAI,8BAAew9L,OAAf,EAAwBx9L,EAAxB,CAAJ,EAAiC;AACtC,eAAOA,EAAP;AACD,OAFM,MAEA;AACL6oU,QAAAA,OAAO,CAAC7oU,EAAD,CAAP,GAAc,CAAd;AACA,eAAO4oU,YAAY,CAAC5oU,EAAD,CAAnB;AACD;AACF,KAjBgB;AAkBjBs/T,IAAAA,gBAAgB,EAAErkU,CAAC,IAAI;AACrB,YAAMrB,CAAC,GAAG,CAACqB,CAAC,CAACiqU,QAAb;AAAA,YACMxsT,CAAC,GAAGq5M,KAAK,CAAC92N,CAAC,CAACm5L,MAAH,CADf;AAEA,UAAIx6L,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,YAAMz3S,CAAC,GAAG0gM,KAAK,CAAC92N,CAAC,CAACqpM,QAAH,CAAf;;AAEA,UAAI5rL,CAAC,KAAKiwT,QAAV,EAAoB;AAClB;AACA99R,QAAAA,MAAM,CAAC09R,WAAW,CAACl3S,CAAD,CAAZ,CAAN,GAAyB,CAAzB;AACD;;AAED,UAAIz3B,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,aAAOpwT,CAAC,IAAI9e,CAAC,GAAG,MAAMy3B,CAAT,GAAa,MAAMA,CAAN,GAAU,GAA5B,CAAR;AACD,KA/BgB;AAgCjB8tS,IAAAA,cAAc,EAAElkU,CAAC,IAAI;AACnB,UAAIA,CAAC,CAACykU,MAAF,CAAS1yT,IAAT,KAAkB,YAAtB,EAAoC;AAClC,6BAAM,0BAA0B/R,CAAC,CAACykU,MAAF,CAAS1yT,IAAzC;AACD;;AAED,YAAM0yT,MAAM,GAAGzkU,CAAC,CAACykU,MAAF,CAASpxU,IAAxB;AAAA,YACM1B,IAAI,GAAGqO,CAAC,CAACnO,SADf;AAAA,YAEMkkB,EAAE,GAAG,8BAAey3T,SAAf,EAA0B/I,MAA1B,KAAqC+I,SAAS,CAAC/I,MAAD,CAFzD;AAGA,UAAI,CAAC1uT,EAAL,EAAS,qBAAM,4BAA4B0uT,MAAlC;AACT,aAAO,0BAAW1uT,EAAX,IAAiBA,EAAE,CAACpkB,IAAD,CAAnB,GAA4BokB,EAAE,GAAG,GAAL,GAAWpkB,IAAI,CAAC4J,GAAL,CAASu7N,KAAT,EAAgBphO,IAAhB,CAAqB,GAArB,CAAX,GAAuC,GAA1E;AACD,KA1CgB;AA2CjBsuU,IAAAA,eAAe,EAAEhkU,CAAC,IAAI,MAAMA,CAAC,CAACsiU,QAAF,CAAW/mU,GAAX,CAAeu7N,KAAf,EAAsBphO,IAAtB,CAA2B,GAA3B,CAAN,GAAwC,GA3C7C;AA4CjBuuU,IAAAA,gBAAgB,EAAEjkU,CAAC,IAAI,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GA5C1D;AA6CjBq/R,IAAAA,eAAe,EAAEvkU,CAAC,IAAI,MAAMA,CAAC,CAACwiM,QAAR,GAAmBs0B,KAAK,CAAC92N,CAAC,CAAC4kU,QAAH,CAAxB,GAAuC,GA7C5C;AA8CjBT,IAAAA,qBAAqB,EAAEnkU,CAAC,IAAI,MAAM82N,KAAK,CAAC92N,CAAC,CAACyf,IAAH,CAAX,GAAsB,GAAtB,GAA4Bq3M,KAAK,CAAC92N,CAAC,CAAC0kU,UAAH,CAAjC,GAAkD,GAAlD,GAAwD5tG,KAAK,CAAC92N,CAAC,CAAC2kU,SAAH,CAA7D,GAA6E,GA9CxF;AA+CjBP,IAAAA,iBAAiB,EAAEpkU,CAAC,IAAI,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GA/C3D;AAgDjBo/R,IAAAA,gBAAgB,EAAEtkU,CAAC,IAAI,MAAMA,CAAC,CAACizM,UAAF,CAAa13M,GAAb,CAAiBu7N,KAAjB,EAAwBphO,IAAxB,CAA6B,GAA7B,CAAN,GAA0C,GAhDhD;AAiDjBquU,IAAAA,QAAQ,EAAE/jU,CAAC,IAAI;AACb6tU,MAAAA,WAAW,IAAI,CAAf;AACA,YAAMz+T,CAAC,GAAG0nN,KAAK,CAAC92N,CAAC,CAACjK,GAAH,CAAf;AACA83U,MAAAA,WAAW,IAAI,CAAf;AACA,aAAOz+T,CAAC,GAAG,GAAJ,GAAU0nN,KAAK,CAAC92N,CAAC,CAAClL,KAAH,CAAtB;AACD;AAtDgB,GAAnB;;AAyDA,WAASu3U,OAAT,CAAiByB,GAAjB,EAAsB;AACpB,UAAM92U,MAAM,GAAG;AACbm/R,MAAAA,IAAI,EAAEr/D,KAAK,CAACg3G,GAAD,CADE;AAEbF,MAAAA,OAAO,EAAE/4U,MAAM,CAACof,IAAP,CAAY25T,OAAZ,CAFI;AAGbh+R,MAAAA,MAAM,EAAE/6C,MAAM,CAACof,IAAP,CAAY27B,MAAZ;AAHK,KAAf;AAKAg+R,IAAAA,OAAO,GAAG,EAAV;AACAh+R,IAAAA,MAAM,GAAG,EAAT;AACA,WAAO54C,MAAP;AACD;;AAEDq1U,EAAAA,OAAO,CAACmB,SAAR,GAAoBA,SAApB;AACAnB,EAAAA,OAAO,CAACx2K,SAAR,GAAoBA,SAApB;AACA,SAAOw2K,OAAP;AACD;;;;;;;;;;;AE1uDD;;AACA;;AAEA,MAAM2B,SAAS,GAAG,WAAlB;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,OAAO,GAAG,SAAhB;AACA,MAAMC,EAAE,GAAG,IAAX;AACA,MAAMC,GAAG,GAAG,KAAZ;AAEA,IAAIC,SAAS,GAAG,GAAhB;AAAA,IACIC,cAAc,GAAG,GADrB;AAAA,IAEIC,cAAc,GAAG,KAFrB;AAAA,IAGIC,aAAa,GAAG,MAHpB;AAAA,IAIIC,aAAa,GAAG,MAJpB;AAAA,IAKIC,UAAU,GAAG,YALjB,EAK+B;;AAE/B,SAASC,SAAT,CAAmB99G,KAAnB,EAA0B7zG,KAA1B,EAAiC;AAC/B,MAAIptE,MAAM,GAAGotE,KAAK,CAACptE,MAAnB;AAAA,MACI1zC,MAAM,GAAG8gH,KAAK,CAAC9gH,MADnB;AAAA,MAEI8D,CAAC,GAAG4vC,MAAM,CAACx+C,MAFf;AAAA,MAGIU,CAAC,GAAG,CAHR;AAAA,MAII88U,IAJJ;AAAA,MAKInxU,CALJ;;AAOA,SAAO3L,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB2L,IAAAA,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAV;AACA2L,IAAAA,CAAC,CAACuoM,MAAF,GAAW1+E,gBAAM0+E,MAAN,IAAgB,qBAAMvoM,CAAC,CAAC6pH,KAAR,CAA3B;AACAsnN,IAAAA,IAAI,GAAGnxU,CAAC,CAACuoM,MAAF,CAAS6qB,KAAT,CAAP;AACA,QAAI,sBAAO+9G,IAAP,CAAJ,EAAkBA,IAAI,GAAG,wBAASA,IAAT,CAAP;AAClB,QAAI,sBAAO1yU,MAAM,CAACpK,CAAD,CAAb,CAAJ,EAAuBoK,MAAM,CAACpK,CAAD,CAAN,GAAY,wBAASoK,MAAM,CAACpK,CAAD,CAAf,CAAZ;AACvB,QAAI,sBAAOoK,MAAM,CAACpK,CAAD,CAAN,CAAU,CAAV,CAAP,CAAJ,EAA0BoK,MAAM,CAACpK,CAAD,CAAN,GAAYoK,MAAM,CAACpK,CAAD,CAAN,CAAUyJ,GAAV,CAAcisM,kBAAd,CAAZ;;AAE1B,QAAI/pM,CAAC,CAACsU,IAAF,KAAWs8T,SAAf,EAA0B;AACxB;AACA;AACA,UAAI,uBAAQnyU,MAAM,CAACpK,CAAD,CAAd,IAAqBoK,MAAM,CAACpK,CAAD,CAAN,CAAUo9B,OAAV,CAAkB0/S,IAAlB,IAA0B,CAA/C,GAAmDA,IAAI,KAAK1yU,MAAM,CAACpK,CAAD,CAAtE,EAA2E;AACzE,eAAO,KAAP;AACD;AACF,KAND,MAMO;AACL,UAAI2L,CAAC,CAACsU,IAAF,KAAWu8T,cAAf,EAA+B;AAC7B,YAAI,CAAC,uBAAQM,IAAR,EAAc1yU,MAAM,CAACpK,CAAD,CAApB,CAAL,EAA+B,OAAO,KAAP;AAChC,OAFD,MAEO,IAAI2L,CAAC,CAACsU,IAAF,KAAW08T,aAAf,EAA8B;AACnC;AACA,YAAI,CAAC,uBAAQG,IAAR,EAAc1yU,MAAM,CAACpK,CAAD,CAApB,EAAyB,IAAzB,EAA+B,KAA/B,CAAL,EAA4C,OAAO,KAAP;AAC7C,OAHM,MAGA,IAAI2L,CAAC,CAACsU,IAAF,KAAWw8T,cAAf,EAA+B;AACpC;AACA,YAAI,CAAC,uBAAQK,IAAR,EAAc1yU,MAAM,CAACpK,CAAD,CAApB,EAAyB,KAAzB,EAAgC,KAAhC,CAAL,EAA6C,OAAO,KAAP;AAC9C,OAHM,MAGA,IAAI2L,CAAC,CAACsU,IAAF,KAAWy8T,aAAf,EAA8B;AACnC,YAAI,CAAC,uBAAQI,IAAR,EAAc1yU,MAAM,CAACpK,CAAD,CAApB,EAAyB,KAAzB,EAAgC,IAAhC,CAAL,EAA4C,OAAO,KAAP;AAC7C;AACF;AACF;;AAED,SAAO,IAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAAS+8U,aAAT,CAAuBx7U,IAAvB,EAA6Bw9N,KAA7B,EAAoCpgM,EAApC,EAAwC;AACtC,MAAI3vB,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CAAX;AAAA,MACI0D,OAAO,GAAG+J,IAAI,GAAGA,IAAI,CAAC5E,MAAL,CAAYpH,KAAf,GAAuB,EADzC;AAAA,MAEIg6U,OAAO,GAAGhuU,IAAI,GAAGA,IAAI,CAAC4tU,UAAD,CAAJ,IAAoB5tU,IAAI,CAAC4tU,UAAD,CAAJ,CAAiB55U,KAAxC,GAAgDkyH,SAFlE;AAAA,MAGIuqH,SAAS,GAAG9gN,EAAE,KAAKu9S,SAHvB;AAAA,MAIIhuU,CAAC,GAAGjJ,OAAO,CAAC3F,MAJhB;AAAA,MAKIU,CAAC,GAAG,CALR;AAAA,MAMIkrH,KANJ;AAAA,MAOI+xN,IAPJ;AAAA,MAQIllQ,KARJ;AAAA,MASI84I,IATJ;AAAA,MAUI9iN,CAVJ;;AAYA,SAAO/N,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkrH,IAAAA,KAAK,GAAGjmH,OAAO,CAACjF,CAAD,CAAf;;AAEA,QAAIg9U,OAAO,IAAIv9F,SAAf,EAA0B;AACxB;AACAw9F,MAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;AACAllQ,MAAAA,KAAK,GAAGklQ,IAAI,CAACpsH,IAAI,GAAG3lG,KAAK,CAAC2lG,IAAd,CAAJ,IAA2B,CAAnC,CAHwB,CAGc;;AAEtC,UAAI94I,KAAK,KAAK,CAAC,CAAf,EAAkB;AAClBhqE,MAAAA,CAAC,GAAG8uU,SAAS,CAAC99G,KAAD,EAAQ7zG,KAAR,CAAb;AACA+xN,MAAAA,IAAI,CAACpsH,IAAD,CAAJ,GAAa9iN,CAAC,GAAG,CAAC,CAAJ,GAAQ,EAAEgqE,KAAxB,CAPwB,CAOO;AAC/B;;AAEA,UAAIhqE,CAAC,IAAIivU,OAAO,CAACv1U,IAAR,KAAiB,CAA1B,EAA6B,OAAO,IAAP;AAC7B,UAAI,CAACsG,CAAD,IAAMgqE,KAAK,KAAKilQ,OAAO,CAACl6U,GAAR,CAAY+tN,IAAZ,EAAkB94I,KAAtC,EAA6C,OAAO,KAAP;AAC9C,KAZD,MAYO;AACLhqE,MAAAA,CAAC,GAAG8uU,SAAS,CAAC99G,KAAD,EAAQ7zG,KAAR,CAAb,CADK,CACwB;AAC7B;;AAEA,UAAIu0H,SAAS,GAAG1xO,CAAhB,EAAmB,OAAOA,CAAP;AACpB;AACF,GAlCqC,CAkCpC;AACF;AACA;;;AAGA,SAAOG,CAAC,IAAIuxO,SAAZ;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASy9F,gBAAT,CAA0B37U,IAA1B,EAAgCo9B,EAAhC,EAAoCw+S,OAApC,EAA6C;AAC3C,MAAInuU,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CAAX;AAAA,MACI0D,OAAO,GAAG+J,IAAI,GAAGA,IAAI,CAAC5E,MAAL,CAAYpH,KAAf,GAAuB,EADzC;AAAA,MAEIo6U,QAAQ,GAAG,EAFf;AAAA,MAGIC,QAAQ,GAAG,EAHf;AAAA,MAII/gI,KAAK,GAAG,EAJZ;AAAA,MAKIpxF,KALJ;AAAA,MAMIptE,MANJ;AAAA,MAOI1zC,MAPJ;AAAA,MAQIymN,IARJ;AAAA,MASIr7F,KATJ;AAAA,MAUIlxG,GAVJ;AAAA,MAWIg5T,OAXJ;AAAA,MAYIr9T,IAZJ;AAAA,MAaI2oM,KAbJ;AAAA,MAcI16M,CAAC,GAAGjJ,OAAO,CAAC3F,MAdhB;AAAA,MAeIU,CAAC,GAAG,CAfR;AAAA,MAgBIiK,CAhBJ;AAAA,MAiBIwtF,CAjBJ,CAD2C,CAkBpC;;AAEP,SAAOz3F,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjBkrH,IAAAA,KAAK,GAAGjmH,OAAO,CAACjF,CAAD,CAAf;AACA6wN,IAAAA,IAAI,GAAG3lG,KAAK,CAAC2lG,IAAb;AACA/yK,IAAAA,MAAM,GAAGotE,KAAK,CAACptE,MAAf;AACA1zC,IAAAA,MAAM,GAAG8gH,KAAK,CAAC9gH,MAAf;;AAEA,SAAKH,CAAC,GAAG,CAAJ,EAAOwtF,CAAC,GAAG35C,MAAM,CAACx+C,MAAvB,EAA+B2K,CAAC,GAAGwtF,CAAnC,EAAsC,EAAExtF,CAAxC,EAA2C;AACzCurH,MAAAA,KAAK,GAAG13E,MAAM,CAAC7zC,CAAD,CAAd;AACAqa,MAAAA,GAAG,GAAG84T,QAAQ,CAAC5nN,KAAK,CAACA,KAAP,CAAR,KAA0B4nN,QAAQ,CAAC5nN,KAAK,CAACA,KAAP,CAAR,GAAwB,EAAlD,CAAN;AACA8nN,MAAAA,OAAO,GAAGh5T,GAAG,CAACusM,IAAD,CAAH,KAAcvsM,GAAG,CAACusM,IAAD,CAAH,GAAY,EAA1B,CAAV;AACAvU,MAAAA,KAAK,CAAC9mF,KAAK,CAACA,KAAP,CAAL,GAAqBv1G,IAAI,GAAGu1G,KAAK,CAACv1G,IAAN,CAAWs9B,MAAX,CAAkB,CAAlB,CAA5B;AACAqrK,MAAAA,KAAK,GAAGj1F,GAAG,CAAC1zG,IAAI,GAAG,QAAR,CAAX;AACAqE,MAAAA,GAAG,CAACusM,IAAD,CAAH,GAAYjI,KAAK,CAAC00H,OAAD,EAAU,qBAAMlzU,MAAM,CAACH,CAAD,CAAZ,CAAV,CAAjB;AACD,KAbgB,CAaf;AACF;AACA;AACA;AACA;AACA;;;AAGA,QAAIkzU,OAAJ,EAAa;AACXG,MAAAA,OAAO,GAAGD,QAAQ,CAACxsH,IAAD,CAAR,KAAmBwsH,QAAQ,CAACxsH,IAAD,CAAR,GAAiB,EAApC,CAAV;AACAysH,MAAAA,OAAO,CAACr9U,IAAR,CAAa,qBAAMmK,MAAN,EAAcmC,MAAd,CAAqB,CAACkU,GAAD,EAAMu0J,IAAN,EAAY/qK,CAAZ,MAAmBwW,GAAG,CAACq9B,MAAM,CAAC7zC,CAAD,CAAN,CAAUurH,KAAX,CAAH,GAAuBw/C,IAAvB,EAA6Bv0J,GAAhD,CAArB,EAA2E,EAA3E,CAAb;AACD;AACF,GA7C0C,CA6CzC;;;AAGFke,EAAAA,EAAE,GAAGA,EAAE,IAAIw9S,KAAX;AACAp5U,EAAAA,MAAM,CAACof,IAAP,CAAYi7T,QAAZ,EAAsBt5U,OAAtB,CAA8B0xH,KAAK,IAAI;AACrC4nN,IAAAA,QAAQ,CAAC5nN,KAAD,CAAR,GAAkBzyH,MAAM,CAACof,IAAP,CAAYi7T,QAAQ,CAAC5nN,KAAD,CAApB,EAA6B/rH,GAA7B,CAAiConN,IAAI,IAAIusH,QAAQ,CAAC5nN,KAAD,CAAR,CAAgBq7F,IAAhB,CAAzC,EAAgEtkN,MAAhE,CAAuE,CAACC,GAAD,EAAMwoK,IAAN,KAAexoK,GAAG,KAAK0oH,SAAR,GAAoB8/C,IAApB,GAA2BrhD,GAAG,CAAC2oF,KAAK,CAAC9mF,KAAD,CAAL,GAAe,GAAf,GAAqB72F,EAAtB,CAAH,CAA6BnyB,GAA7B,EAAkCwoK,IAAlC,CAAjH,CAAlB;AACD,GAFD;AAGA/vK,EAAAA,OAAO,GAAGlC,MAAM,CAACof,IAAP,CAAYk7T,QAAZ,CAAV;;AAEA,MAAIF,OAAO,IAAIl4U,OAAO,CAAC3F,MAAvB,EAA+B;AAC7B89U,IAAAA,QAAQ,CAAChB,OAAD,CAAR,GAAoBz9S,EAAE,KAAKw9S,KAAP,GAAe;AACjC,OAACE,EAAD,GAAMp3U,OAAO,CAACsH,MAAR,CAAe,CAACC,GAAD,EAAM8Q,CAAN,MAAa9Q,GAAG,CAACvM,IAAJ,CAAS,GAAGo9U,QAAQ,CAAC//T,CAAD,CAApB,GAA0B9Q,GAAvC,CAAf,EAA4D,EAA5D;AAD2B,KAAf,GAEhB;AACF,OAAC8vU,GAAD,GAAOr3U,OAAO,CAACwE,GAAR,CAAY6T,CAAC,KAAK;AACvB,SAAC++T,EAAD,GAAMgB,QAAQ,CAAC//T,CAAD;AADS,OAAL,CAAb;AADL,KAFJ;AAOD;;AAED,SAAO8/T,QAAP;AACD;;AACD,IAAIzpN,GAAG,GAAG;AACR4pN,EAAAA,OAAO,EAAE,UAAUvyS,IAAV,EAAgBhoC,KAAhB,EAAuB;AAC9B,QAAI,CAACgoC,IAAI,CAAC1rC,MAAV,EAAkB,OAAO0D,KAAP;AAClB,QAAIhD,CAAC,GAAG,CAAR;AAAA,QACIkO,CAAC,GAAGlL,KAAK,CAAC1D,MADd;;AAGA,WAAOU,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB,IAAIgrC,IAAI,CAAC5N,OAAL,CAAap6B,KAAK,CAAChD,CAAD,CAAlB,IAAyB,CAA7B,EAAgCgrC,IAAI,CAAC/qC,IAAL,CAAU+C,KAAK,CAAChD,CAAD,CAAf;;AAEnD,WAAOgrC,IAAP;AACD,GATO;AAURwyS,EAAAA,WAAW,EAAE,UAAUxyS,IAAV,EAAgBhoC,KAAhB,EAAuB;AAClC,WAAO,CAACgoC,IAAI,CAAC1rC,MAAN,GAAe0D,KAAf,GAAuBgoC,IAAI,CAAC7vB,MAAL,CAAYjJ,CAAC,IAAIlP,KAAK,CAACo6B,OAAN,CAAclrB,CAAd,KAAoB,CAArC,CAA9B;AACD,GAZO;AAaRurU,EAAAA,OAAO,EAAE,UAAUzyS,IAAV,EAAgBhoC,KAAhB,EAAuB;AAC9B,QAAI0zM,EAAE,GAAG,wBAAS1zM,KAAK,CAAC,CAAD,CAAd,CAAT;AAAA,QACI2zM,EAAE,GAAG,wBAAS3zM,KAAK,CAAC,CAAD,CAAd,CADT;;AAGA,QAAI0zM,EAAE,GAAGC,EAAT,EAAa;AACXD,MAAAA,EAAE,GAAG1zM,KAAK,CAAC,CAAD,CAAV;AACA2zM,MAAAA,EAAE,GAAG3zM,KAAK,CAAC,CAAD,CAAV;AACD;;AAED,QAAI,CAACgoC,IAAI,CAAC1rC,MAAV,EAAkB,OAAO,CAACo3M,EAAD,EAAKC,EAAL,CAAP;AAClB,QAAI3rK,IAAI,CAAC,CAAD,CAAJ,GAAU0rK,EAAd,EAAkB1rK,IAAI,CAAC,CAAD,CAAJ,GAAU0rK,EAAV;AAClB,QAAI1rK,IAAI,CAAC,CAAD,CAAJ,GAAU2rK,EAAd,EAAkB3rK,IAAI,CAAC,CAAD,CAAJ,GAAU2rK,EAAV;AAClB,WAAO3rK,IAAP;AACD,GA1BO;AA2BR0yS,EAAAA,WAAW,EAAE,UAAU1yS,IAAV,EAAgBhoC,KAAhB,EAAuB;AAClC,QAAI0zM,EAAE,GAAG,wBAAS1zM,KAAK,CAAC,CAAD,CAAd,CAAT;AAAA,QACI2zM,EAAE,GAAG,wBAAS3zM,KAAK,CAAC,CAAD,CAAd,CADT;;AAGA,QAAI0zM,EAAE,GAAGC,EAAT,EAAa;AACXD,MAAAA,EAAE,GAAG1zM,KAAK,CAAC,CAAD,CAAV;AACA2zM,MAAAA,EAAE,GAAG3zM,KAAK,CAAC,CAAD,CAAV;AACD;;AAED,QAAI,CAACgoC,IAAI,CAAC1rC,MAAV,EAAkB,OAAO,CAACo3M,EAAD,EAAKC,EAAL,CAAP;;AAElB,QAAIA,EAAE,GAAG3rK,IAAI,CAAC,CAAD,CAAT,IAAgBA,IAAI,CAAC,CAAD,CAAJ,GAAU0rK,EAA9B,EAAkC;AAChC,aAAO,EAAP;AACD,KAFD,MAEO;AACL,UAAI1rK,IAAI,CAAC,CAAD,CAAJ,GAAU0rK,EAAd,EAAkB1rK,IAAI,CAAC,CAAD,CAAJ,GAAU0rK,EAAV;AAClB,UAAI1rK,IAAI,CAAC,CAAD,CAAJ,GAAU2rK,EAAd,EAAkB3rK,IAAI,CAAC,CAAD,CAAJ,GAAU2rK,EAAV;AACnB;;AAED,WAAO3rK,IAAP;AACD;AA9CO,CAAV;AAiDA,MAAM2yS,UAAU,GAAG,GAAnB;AAAA,MACMC,WAAW,GAAG,GADpB;;AAEA,SAASC,gBAAT,CAA0Bt8U,IAA1B,EAAgC1B,IAAhC,EAAsCi+U,KAAtC,EAA6Cz6U,MAA7C,EAAqD;AACnD,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B,qBAAM,iEAAN;AAC9B,QAAMhjU,IAAI,GAAGnP,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAArB;AAAA,QACM27B,EAAE,GAAG9+B,IAAI,CAACP,MAAL,IAAe,CAAf,IAAoB,oBAAKO,IAAL,EAAWmD,KAD1C;AAAA,QAEMwyH,KAAK,GAAG,MAFd;AAAA,QAGMuoN,SAAS,GAAGH,WAAW,GAAGpoN,KAHhC;AAAA,QAIMwoN,QAAQ,GAAGL,UAAU,GAAG3uU,IAJ9B,CAFmD,CAMf;;AAEpC,MAAI2vB,EAAE,KAAKu9S,SAAP,IAAoB,CAAC,8BAAe74U,MAAf,EAAuB06U,SAAvB,CAAzB,EAA4D;AAC1D16U,IAAAA,MAAM,CAAC06U,SAAD,CAAN,GAAoBD,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBkvU,SAApB,CAA8BJ,KAA9B,EAAqCtoN,KAArC,CAApB;AACD,GAVkD,CAUjD;;;AAGF,MAAI,CAAC,8BAAenyH,MAAf,EAAuB26U,QAAvB,CAAL,EAAuC;AACrC36U,IAAAA,MAAM,CAAC26U,QAAD,CAAN,GAAmBF,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBmvU,SAApB,EAAnB;AACD;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9PD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASnvU,IAAT,CAAczN,IAAd,EAAoB;AAClB,QAAMyN,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CAAb;AACA,SAAOyN,IAAI,GAAGA,IAAI,CAAC5E,MAAL,CAAYpH,KAAf,GAAuB,EAAlC;AACD;;AACD,SAASo7U,MAAT,CAAgB78U,IAAhB,EAAsBi0H,KAAtB,EAA6BxyH,KAA7B,EAAoC;AAClC,QAAM8C,KAAK,GAAG,KAAKksK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,EAAwB,WAAWi0H,KAAnC,CAAd;AAAA,QACMtK,KAAK,GAAGplH,KAAK,GAAGA,KAAK,CAAC9C,KAAN,CAAYF,GAAZ,CAAgBE,KAAhB,CAAH,GAA4BkyH,SAD/C;AAEA,SAAOhK,KAAK,GAAGA,KAAK,CAACnzC,KAAT,GAAiBmzC,KAA7B;AACD;;AACD,SAASmzN,OAAT,CAAiB98U,IAAjB,EAAuBkpK,MAAvB,EAA+B;AAC7B,QAAM60D,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,QACMt0N,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CADb;AAAA,QAEMypB,KAAK,GAAGhc,IAAI,CAACgc,KAFnB;AAGAs0M,EAAAA,EAAE,CAACkB,KAAH,CAASx1M,KAAT,EAAgBs0M,EAAE,CAACW,SAAH,GAAe9sJ,MAAf,CAAsBihI,gBAAtB,EAA8BisB,MAA9B,CAAqC51D,MAArC,CAAhB;AACA,SAAO,CAAP;AACD;;AAED,SAASj9J,MAAT,CAAiBoa,IAAjB,EAAuBrmB,IAAvB,EAA6B+8U,MAA7B,EAAqC;AACnC,MAAI12T,IAAJ,EAAU;AACR,UAAM03M,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,UACM/sL,MAAM,GAAG3uB,IAAI,CAACsqP,IAAL,CAAUp8M,MADzB;AAEAwpK,IAAAA,EAAE,CAACkB,KAAH,CAASjqL,MAAT,EAAiB+oL,EAAE,CAACW,SAAH,GAAezyN,MAAf,CAAsBoa,IAAtB,EAA4BrmB,IAA5B,CAAjB;AACD;;AAED,SAAO+8U,MAAM,KAAKppN,SAAX,GAAuBopN,MAAvB,GAAgC12T,IAAvC;AACD;;AAED,MAAMw/J,IAAI,GAAGn2I,MAAM,IAAI,UAAUjuC,KAAV,EAAiBy2G,IAAjB,EAAuB;AAC5C,QAAMswG,MAAM,GAAG,KAAK/3C,OAAL,CAAasxD,QAAb,CAAsBvZ,MAAtB,EAAf;AACA,SAAOA,MAAM,CAAC94K,MAAD,CAAN,CAAewoE,IAAf,EAAqBz2G,KAArB,CAAP;AACD,CAHD;;AAKA,MAAMu/G,MAAM,GAAG6kE,IAAI,CAAC,QAAD,CAAnB;;AACA,MAAMy1C,UAAU,GAAGz1C,IAAI,CAAC,YAAD,CAAvB;;AACA,MAAM80C,SAAS,GAAG90C,IAAI,CAAC,WAAD,CAAtB;;AACA,MAAM01C,SAAS,GAAG11C,IAAI,CAAC,WAAD,CAAtB;;AACA,MAAM+0C,QAAQ,GAAG/0C,IAAI,CAAC,UAAD,CAArB;;AACA,MAAMm3J,OAAO,GAAG,IAAIzoQ,IAAJ,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAhB;;AAEA,SAAS/mE,IAAT,CAAc0+M,KAAd,EAAqBtB,GAArB,EAA0B9C,SAA1B,EAAqC;AACnC,MAAI,CAACj8M,MAAM,CAACC,SAAP,CAAiBogN,KAAjB,CAAD,IAA4B,CAACrgN,MAAM,CAACC,SAAP,CAAiB8+M,GAAjB,CAAjC,EAAwD,OAAO,EAAP;AACxDoyH,EAAAA,OAAO,CAACC,OAAR,CAAgB,IAAhB;AACAD,EAAAA,OAAO,CAAC7wH,QAAR,CAAiBD,KAAjB;AACA8wH,EAAAA,OAAO,CAAClyH,OAAR,CAAgBF,GAAhB;AACA,SAAO0Q,UAAU,CAAC/9N,IAAX,CAAgB,IAAhB,EAAsBy/U,OAAtB,EAA+Bl1H,SAA/B,CAAP;AACD;;AAED,SAASo1H,WAAT,CAAqBhxH,KAArB,EAA4B;AAC1B,SAAO1+M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB2uN,KAAhB,EAAuB,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AACD,SAASixH,iBAAT,CAA2BjxH,KAA3B,EAAkC;AAChC,SAAO1+M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB2uN,KAAhB,EAAuB,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AACD,SAASkxH,SAAT,CAAmBxyH,GAAnB,EAAwB;AACtB,SAAOp9M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB,CAAhB,EAAmB,IAAIqtN,GAAvB,EAA4B,IAA5B,CAAP;AACD;;AACD,SAASyyH,eAAT,CAAyBzyH,GAAzB,EAA8B;AAC5B,SAAOp9M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB,CAAhB,EAAmB,IAAIqtN,GAAvB,EAA4B,IAA5B,CAAP;AACD;;AAED,MAAMwxH,UAAU,GAAG,GAAnB;;AACA,MAAMC,WAAW,GAAG,GAApB;;AACA,MAAMiB,WAAW,GAAG,GAApB;;AACA,MAAMC,YAAY,GAAG,GAArB;;;AAEA,SAASC,WAAT,CAAqBx9U,IAArB,EAA2B1B,IAA3B,EAAiCi+U,KAAjC,EAAwCz6U,MAAxC,EAAgD;AAC9C,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B;AAC5B,yBAAM,4DAAN;AACD;;AAED,QAAMhjU,IAAI,GAAGnP,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAArB;AAAA,QACMg7U,QAAQ,GAAGL,UAAU,GAAG3uU,IAD9B;;AAGA,MAAI,CAAC,8BAAegvU,QAAf,EAAyB36U,MAAzB,CAAL,EAAuC;AACrC,QAAI;AACFA,MAAAA,MAAM,CAAC26U,QAAD,CAAN,GAAmBF,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBmvU,SAApB,EAAnB;AACD,KAFD,CAEE,OAAO/6T,GAAP,EAAY,CAAC;AACd;AACF;AACF;;AACD,SAAS47T,aAAT,CAAuBz9U,IAAvB,EAA6B1B,IAA7B,EAAmCi+U,KAAnC,EAA0Cz6U,MAA1C,EAAkD;AAChD,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B,qBAAM,oDAAN;AAC9B,MAAInyU,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B,qBAAM,qDAAN;AAC9B,QAAMhjU,IAAI,GAAGnP,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAArB;AAAA,QACMwyH,KAAK,GAAG31H,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KADtB;AAAA,QAEM+6U,SAAS,GAAGH,WAAW,GAAGpoN,KAFhC;;AAIA,MAAI,CAAC,8BAAeuoN,SAAf,EAA0B16U,MAA1B,CAAL,EAAwC;AACtCA,IAAAA,MAAM,CAAC06U,SAAD,CAAN,GAAoBD,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBkvU,SAApB,CAA8BJ,KAA9B,EAAqCtoN,KAArC,CAApB;AACD;AACF;;AACD,SAASypN,YAAT,CAAsB19U,IAAtB,EAA4B1B,IAA5B,EAAkCi+U,KAAlC,EAAyCz6U,MAAzC,EAAiD;AAC/C,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B;AAC5B;AACAkN,IAAAA,kBAAkB,CAACpB,KAAD,EAAQz6U,MAAR,EAAgBxD,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAAxB,CAAlB;AACD,GAHD,MAGO;AACL;AACA,SAAKzB,IAAL,IAAau8U,KAAK,CAAC37E,MAAnB,EAA2B;AACzB+8E,MAAAA,kBAAkB,CAACpB,KAAD,EAAQz6U,MAAR,EAAgB9B,IAAhB,CAAlB;AACD;AACF;AACF;;AAED,SAAS29U,kBAAT,CAA4BpB,KAA5B,EAAmCz6U,MAAnC,EAA2C9B,IAA3C,EAAiD;AAC/C,QAAM49U,SAAS,GAAGN,WAAW,GAAGt9U,IAAhC;;AAEA,MAAI,CAAC,8BAAe8B,MAAf,EAAuB87U,SAAvB,CAAL,EAAwC;AACtC,QAAI;AACF97U,MAAAA,MAAM,CAAC87U,SAAD,CAAN,GAAoBrB,KAAK,CAACsB,QAAN,CAAe79U,IAAf,CAApB;AACD,KAFD,CAEE,OAAO6hB,GAAP,EAAY,CAAC;AACd;AACF;AACF;;AAED,SAASi8T,QAAT,CAAkB99U,IAAlB,EAAwBqsH,GAAxB,EAA6B;AAC3B,MAAIpqH,CAAJ;AACA,SAAO,0BAAWjC,IAAX,IAAmBA,IAAnB,GAA0B,wBAASA,IAAT,IAAiB,CAACiC,CAAC,GAAGoqH,GAAG,CAACu0I,MAAJ,CAAW5gQ,IAAX,CAAL,KAA0BiC,CAAC,CAACR,KAA7C,GAAqDkyH,SAAtF;AACD;;AACD,SAASoqN,sBAAT,CAAgC/E,OAAhC,EAAyCgF,KAAzC,EAAgDC,QAAhD,EAA0D;AACxD;AACAD,EAAAA,KAAK,CAACE,WAAN,GAAoBj8U,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAAC8mO,SAAP,GAAmB9mO,CAAC,CAAC8mO,SAAF,EAAnB,GAAmC,CAA5D,CAFwD,CAEO;;;AAG/Dk1G,EAAAA,QAAQ,CAACE,UAAT,GAAsBT,YAAtB;AACAO,EAAAA,QAAQ,CAACG,MAAT,GAAkBV,YAAlB;AACAO,EAAAA,QAAQ,CAAC58D,MAAT,GAAkBq8D,YAAlB,CAPwD,CAOxB;;AAEhC,QAAMW,GAAG,GAAGriT,GAAG,IAAI,QAAQA,GAAG,CAACtd,IAAJ,KAAa+xT,uBAAb,GAAuB,2BAAY6M,WAAW,GAAGthT,GAAG,CAACv6B,KAA9B,CAAvB,GAA8D,2BAAY67U,WAAZ,IAA2B,GAA3B,GAAiCtE,OAAO,CAACh9S,GAAD,CAA9G,IAAuH,GAA1I,CATwD,CASuF;AAC/I;;;AAGA,SAAO;AACLmiT,IAAAA,UAAU,EAAE7/U,IAAI,IAAI,oBAAoBN,MAApB,CAA2BqgV,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAA9B,EAAyC,GAAzC,CADf;AAEL8/U,IAAAA,MAAM,EAAE9/U,IAAI,IAAI,GAAGN,MAAH,CAAUqgV,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAAb,EAAwB,UAAxB,CAFX;AAGL+iR,IAAAA,MAAM,EAAE/iR,IAAI,IAAI,GAAGN,MAAH,CAAUqgV,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAAb,EAAwB,GAAxB,EAA6BN,MAA7B,CAAoCg7U,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAA3C,EAAsD,GAAtD;AAHX,GAAP;AAKD;;AAED,SAASggV,SAAT,CAAmBC,UAAnB,EAA+BC,YAA/B,EAA6C;AAC3C,SAAO,UAAU/2C,UAAV,EAAsB8lB,OAAtB,EAA+BnjM,KAA/B,EAAsC;AAC3C,QAAIq9K,UAAJ,EAAgB;AACd;AACA,YAAM1kQ,CAAC,GAAG+6S,QAAQ,CAACr2C,UAAD,EAAa,CAACr9K,KAAK,IAAI,IAAV,EAAgBqmD,OAA7B,CAAlB;AACA,aAAO1tI,CAAC,IAAIA,CAAC,CAACj2B,IAAF,CAAOyxU,UAAP,EAAmBhxB,OAAnB,CAAZ;AACD,KAJD,MAIO;AACL;AACA,aAAOixB,YAAY,CAACjxB,OAAD,CAAnB;AACD;AACF,GATD;AAUD;;AAED,MAAMkxB,OAAO,GAAGH,SAAS,CAAC,MAAD,EAASI,cAAT,CAAzB;;AACA,MAAMC,SAAS,GAAGL,SAAS,CAAC,QAAD,EAAWM,gBAAX,CAA3B;;AACA,MAAMC,WAAW,GAAGP,SAAS,CAAC,UAAD,EAAaQ,kBAAb,CAA7B;;;AAEA,SAASC,OAAT,CAAkB14T,IAAlB,EAAwB;AACtB,QAAM+jG,KAAK,GAAG,KAAKqmD,OAAL,CAAarmD,KAA3B;AACA,MAAI3oH,KAAK,GAAG,KAAZ;AACA,MAAI2oH,KAAJ,EAAW,OAAO/jG,IAAP,EAAa;AACtB,QAAIA,IAAI,KAAK+jG,KAAb,EAAoB;AAClB3oH,MAAAA,KAAK,GAAG,IAAR;AACA;AACD;;AAED4kB,IAAAA,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAjB;AACD;AACD,SAAO3oH,KAAP;AACD;;AAED,SAASgN,GAAT,CAAasvN,EAAb,EAAiBruL,MAAjB,EAAyBpxC,IAAzB,EAA+B;AAC7B,MAAI;AACFy/N,IAAAA,EAAE,CAACruL,MAAD,CAAF,CAAW5wC,KAAX,CAAiBi/N,EAAjB,EAAqB,CAAC,YAAD,EAAe//N,MAAf,CAAsB,GAAG8J,KAAH,CAASvK,IAAT,CAAce,IAAd,CAAtB,CAArB;AACD,GAFD,CAEE,OAAOujB,GAAP,EAAY;AACZk8M,IAAAA,EAAE,CAACl9N,IAAH,CAAQghB,GAAR;AACD;;AAED,SAAOvjB,IAAI,CAACA,IAAI,CAACP,MAAL,GAAc,CAAf,CAAX;AACD;;AAED,SAAS8C,IAAT,GAAgB;AACd,SAAO4N,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,MAAxB,EAAgCvjO,SAAhC,CAAV;AACD;;AACD,SAAS0jB,IAAT,GAAgB;AACd,SAAOzT,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,MAAxB,EAAgCvjO,SAAhC,CAAV;AACD;;AACD,SAAS+yB,KAAT,GAAiB;AACf,SAAO9iB,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,OAAxB,EAAiCvjO,SAAjC,CAAV;AACD;;AAED,SAASwgV,uBAAT,CAAiCC,YAAjC,EAA+C;AAC7C,QAAMl6U,GAAG,GAAGk6U,YAAY,GAAG,GAA3B;;AAEA,MAAIl6U,GAAG,IAAI,OAAX,EAAoB;AAClB,WAAOA,GAAG,GAAG,KAAb;AACD;;AAED,SAAOP,IAAI,CAAC0Q,GAAL,CAAS,CAACnQ,GAAG,GAAG,KAAP,IAAgB,KAAzB,EAAgC,GAAhC,CAAP;AACD;;AAED,SAASm6U,SAAT,CAAmBjrF,KAAnB,EAA0B;AACxB,QAAM/oP,CAAC,GAAG,kBAAI+oP,KAAJ,CAAV;AAAA,QACMxnP,CAAC,GAAGuyU,uBAAuB,CAAC9zU,CAAC,CAACuB,CAAH,CADjC;AAAA,QAEMygC,CAAC,GAAG8xS,uBAAuB,CAAC9zU,CAAC,CAACgiC,CAAH,CAFjC;AAAA,QAGM1gC,CAAC,GAAGwyU,uBAAuB,CAAC9zU,CAAC,CAACsB,CAAH,CAHjC;AAIA,SAAO,SAASC,CAAT,GAAa,SAASygC,CAAtB,GAA0B,SAAS1gC,CAA1C;AACD,EAAC;;;AAEF,SAAS2yU,QAAT,CAAkBC,MAAlB,EAA0BC,MAA1B,EAAkC;AAChC,QAAMC,IAAI,GAAGJ,SAAS,CAACE,MAAD,CAAtB;AAAA,QACMG,IAAI,GAAGL,SAAS,CAACG,MAAD,CADtB;AAAA,QAEMG,IAAI,GAAGh7U,IAAI,CAACK,GAAL,CAASy6U,IAAT,EAAeC,IAAf,CAFb;AAAA,QAGME,IAAI,GAAGj7U,IAAI,CAACG,GAAL,CAAS26U,IAAT,EAAeC,IAAf,CAHb;AAIA,SAAO,CAACC,IAAI,GAAG,IAAR,KAAiBC,IAAI,GAAG,IAAxB,CAAP;AACD;;AAED,SAAShnI,KAAT,GAAkB;AAChB,QAAMn6M,IAAI,GAAG,GAAGwJ,KAAH,CAASvK,IAAT,CAAciB,SAAd,CAAb;AACAF,EAAAA,IAAI,CAACknC,OAAL,CAAa,EAAb;AACA,SAAO,sBAAO,GAAGlnC,IAAV,CAAP;AACD;;AAED,SAAS6X,KAAT,CAAexQ,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO7G,CAAC,KAAK6G,CAAN,IAAW7G,CAAC,KAAKA,CAAN,IAAW6G,CAAC,KAAKA,CAA5B,GAAgC,IAAhC,GAAuC,uBAAQ7G,CAAR,IAAa,uBAAQ6G,CAAR,KAAc7G,CAAC,CAAC5H,MAAF,KAAayO,CAAC,CAACzO,MAA7B,GAAsC2hV,UAAU,CAAC/5U,CAAD,EAAI6G,CAAJ,CAAhD,GAAyD,KAAtE,GAA8E,wBAAS7G,CAAT,KAAe,wBAAS6G,CAAT,CAAf,GAA6BmzU,WAAW,CAACh6U,CAAD,EAAI6G,CAAJ,CAAxC,GAAiD,KAA7K;AACD;;AAED,SAASkzU,UAAT,CAAoB/5U,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,OAAK,IAAI/N,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGhH,CAAC,CAAC5H,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,QAAI,CAAC0X,KAAK,CAACxQ,CAAC,CAAClH,CAAD,CAAF,EAAO+N,CAAC,CAAC/N,CAAD,CAAR,CAAV,EAAwB,OAAO,KAAP;AACzB;;AAED,SAAO,IAAP;AACD;;AAED,SAASkhV,WAAT,CAAqBh6U,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,OAAK,MAAM9J,GAAX,IAAkBiD,CAAlB,EAAqB;AACnB,QAAI,CAACwQ,KAAK,CAACxQ,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,CAAV,EAA4B,OAAO,KAAP;AAC7B;;AAED,SAAO,IAAP;AACD;;AAED,SAASk9U,eAAT,CAAyBj4D,KAAzB,EAAgC;AAC9B,SAAOviQ,CAAC,IAAIu6T,WAAW,CAACh4D,KAAD,EAAQviQ,CAAR,CAAvB;AACD;;AAED,SAAS25M,MAAT,CAAiB/+N,IAAjB,EAAuB8+N,MAAvB,EAA+BltJ,MAA/B,EAAuCiuQ,MAAvC,EAA+C9gH,MAA/C,EAAuDl2N,MAAvD,EAA+D;AAC7D,QAAMk1N,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,QACMt0N,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CADb;AAAA,QAEMypB,KAAK,GAAGhc,IAAI,CAACgc,KAFnB;AAAA,QAGMu2M,KAAK,GAAGjC,EAAE,CAACiC,KAAH,EAHd;AAIA,MAAIwE,OAAO,GAAG/2N,IAAI,CAAC+2N,OAAnB;AAAA,MACInpJ,SADJ;AAAA,MAEI34E,GAFJ;;AAIA,MAAIq7N,EAAE,CAAC+hH,QAAH,KAAgB,KAAhB,IAAyB,EAAEr2T,KAAK,CAAChoB,KAAN,CAAY1D,MAAZ,IAAsB+gO,MAAtB,IAAgC+gH,MAAlC,CAA7B,EAAwE;AACtE;AACA,WAAO,CAAP;AACD;;AAED,MAAI,CAACr7G,OAAD,IAAYA,OAAO,CAACxE,KAAR,GAAgBA,KAAhC,EAAuC;AACrCvyN,IAAAA,IAAI,CAAC+2N,OAAL,GAAeA,OAAO,GAAGzG,EAAE,CAACW,SAAH,EAAzB;AACA8F,IAAAA,OAAO,CAACxE,KAAR,GAAgBA,KAAhB;AACAjC,IAAAA,EAAE,CAACoG,QAAH,CAAY,MAAM;AAChB12N,MAAAA,IAAI,CAAC+xN,QAAL,GAAgB,IAAhB;AACAzB,MAAAA,EAAE,CAACkB,KAAH,CAASx1M,KAAT,EAAgB+6M,OAAhB,EAAyBpmO,GAAzB;AACD,KAHD,EAGG,IAHH,EAGS,CAHT;AAID;;AAED,MAAIwzE,MAAJ,EAAY;AACVyJ,IAAAA,SAAS,GAAGzJ,MAAM,KAAK,IAAX,GAAkBihI,gBAAlB,GAA2B,uBAAQjhI,MAAR,KAAmB,2BAAQA,MAAR,CAAnB,GAAqCA,MAArC,GAA8CguQ,eAAe,CAAChuQ,MAAD,CAApG;AACA4yJ,IAAAA,OAAO,CAAC5yJ,MAAR,CAAeyJ,SAAf;AACD;;AAED,MAAIyjJ,MAAJ,EAAY;AACV0F,IAAAA,OAAO,CAAC1F,MAAR,CAAeA,MAAf;AACD;;AAED,MAAI+gH,MAAJ,EAAY;AACVxkQ,IAAAA,SAAS,GAAGukQ,eAAe,CAACC,MAAD,CAA3B;;AAEA,QAAIp2T,KAAK,CAAChoB,KAAN,CAAYge,IAAZ,CAAiB47D,SAAjB,CAAJ,EAAiC;AAC/BmpJ,MAAAA,OAAO,CAAC5yJ,MAAR,CAAeyJ,SAAf;AACD,KAFD,MAEO;AACLmpJ,MAAAA,OAAO,CAAC1F,MAAR,CAAe+gH,MAAf;AACD;AACF;;AAED,MAAI9gH,MAAJ,EAAY;AACV,SAAKr8N,GAAL,IAAYmG,MAAZ,EAAoB;AAClB27N,MAAAA,OAAO,CAACzF,MAAR,CAAeA,MAAf,EAAuBr8N,GAAvB,EAA4BmG,MAAM,CAACnG,GAAD,CAAlC;AACD;AACF;;AAED,SAAO,CAAP;AACD;;AAED,SAASq9U,aAAT,CAAuBl8N,KAAvB,EAA8B;AAC5B,QAAM1hH,CAAC,GAAG0hH,KAAK,CAACm8N,OAAhB;AAAA,QACMz1T,EAAE,GAAGpoB,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAAL,GAAen9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAD/B;AAAA,QAEM/7P,EAAE,GAAGphB,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAAL,GAAer9Q,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAF/B;AAGA,SAAOh7Q,IAAI,CAACqC,IAAL,CAAU0jB,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAzB,CAAP;AACD;;AACD,SAAS08T,UAAT,CAAoBp8N,KAApB,EAA2B;AACzB,QAAM1hH,CAAC,GAAG0hH,KAAK,CAACm8N,OAAhB;AACA,SAAOx7U,IAAI,CAACuQ,KAAL,CAAW5S,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAAL,GAAer9Q,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAA/B,EAAwCr9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAAL,GAAen9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAA5D,CAAP;AACD;;AAED,SAAS4gE,SAAT,CAAmB1pQ,KAAnB,EAA0BmzK,YAA1B,EAAwCC,YAAxC,EAAsD;AACpD,SAAO,0BAAUpzK,KAAK,IAAI,CAAnB,EAAsBmzK,YAAY,IAAI,CAAtC,EAAyCC,YAAY,IAAI,CAAzD,CAAP;AACD;;AACD,SAAS7gB,SAAT,CAAmB/oO,IAAnB,EAAyBoqH,KAAzB,EAAgC;AAC9B,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAOxuK,CAAC,IAAIA,CAAC,CAAC8mO,SAAP,GAAmB9mO,CAAC,CAAC8mO,SAAF,EAAnB,GAAmC,CAA1C;AACD;;AACD,SAASx1J,IAAT,CAAcvzE,IAAd,EAAoBoqH,KAApB,EAA2B;AACzB,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAACsxE,IAAF,EAAH,GAAcogD,SAAtB;AACD;;AACD,SAASkgF,MAAT,CAAgB7zM,IAAhB,EAAsBoqH,KAAtB,EAA6B;AAC3B,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAAC4xM,MAAF,EAAH,GAAgB,EAAxB;AACD;;AACD,SAASsoD,MAAT,CAAgBn8P,IAAhB,EAAsBigC,KAAtB,EAA6BmqF,KAA7B,EAAoC;AAClC,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAO,CAACxuK,CAAD,GAAK0xH,SAAL,GAAiB,uBAAQ1zF,KAAR,IAAiB,CAACh+B,CAAC,CAACu+P,WAAF,IAAiBv+P,CAAC,CAACk6P,MAApB,EAA4Bl8N,KAA5B,CAAjB,GAAsD,CAACh+B,CAAC,CAACk6P,MAAF,IAAYl6P,CAAC,CAAC67P,YAAf,EAA6B79N,KAA7B,CAA9E;AACD;;AACD,SAASA,KAAT,CAAejgC,IAAf,EAAqBoqH,KAArB,EAA4B;AAC1B,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAOxuK,CAAC,IAAIA,CAAC,CAACg+B,KAAP,GAAeh+B,CAAC,CAACg+B,KAAF,EAAf,GAA2B,EAAlC;AACD;;AACD,SAAS3rB,KAAT,CAAetU,IAAf,EAAqByB,KAArB,EAA4B2oH,KAA5B,EAAmC;AACjC,QAAMnoH,CAAC,GAAG67U,QAAQ,CAAC99U,IAAD,EAAO,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAAvB,CAAlB;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAACR,KAAD,CAAJ,GAAckyH,SAAtB;AACD;;AAED,SAASwsN,aAAT,CAAwB7rU,KAAxB,EAA+BqsM,EAA/B,EAAmCntF,EAAnC,EAAuCh9C,KAAvC,EAA8C4zC,KAA9C,EAAqD;AACnD91G,EAAAA,KAAK,GAAGwpU,QAAQ,CAACxpU,KAAD,EAAQ,CAAC81G,KAAK,IAAI,IAAV,EAAgBqmD,OAAxB,CAAhB;AACA,QAAMxoJ,QAAQ,GAAG,8BAAS04L,EAAT,EAAantF,EAAb,CAAjB;AACA,MAAIg2I,KAAK,GAAGl1P,KAAK,CAACu/L,MAAN,EAAZ;AAAA,MACIlvM,GAAG,GAAG6kQ,KAAK,CAAC,CAAD,CADf;AAAA,MAEI3kQ,GAAG,GAAG,oBAAK2kQ,KAAL,CAFV;AAAA,MAGIpkJ,QAAQ,GAAGsZ,kBAHf;;AAKA,MAAI,EAAE75H,GAAG,GAAGF,GAAR,CAAJ,EAAkB;AAChB;AACA2P,IAAAA,KAAK,GAAG,CAACA,KAAK,CAACi1O,YAAN,GAAqB,sBAAQ,YAAR,IAAwBA,YAAxB,CAAqCj1O,KAAK,CAACi1O,YAAN,EAArC,CAArB,GAAkF,sBAAQ,QAAR,IAAoBqS,WAApB,CAAgCtnP,KAAK,CAACsnP,WAAN,EAAhC,EAAqD37N,KAArD,CAA2D3rB,KAAK,CAAC2rB,KAAN,EAA3D,CAAnF,EAA8J4zK,MAA9J,CAAqK,CAAClvM,GAAG,GAAG,CAAP,EAAUE,GAAG,GAAG,CAAhB,CAArK,CAAR;AACD,GAHD,MAGO;AACLugH,IAAAA,QAAQ,GAAG,8BAAc9wG,KAAd,EAAqB3P,GAArB,EAA0BE,GAA1B,CAAX;AACD;;AAED,MAAIyP,KAAK,CAACmwM,KAAV,EAAiB;AACf+kD,IAAAA,KAAK,GAAGl1P,KAAK,CAACmwM,KAAN,CAAY,CAACjuI,KAAD,IAAU,EAAtB,CAAR;AACA,QAAI7xE,GAAG,KAAK6kQ,KAAK,CAAC,CAAD,CAAjB,EAAsBA,KAAK,CAAChkO,OAAN,CAAc7gC,GAAd;AACtB,QAAIE,GAAG,KAAK,oBAAK2kQ,KAAL,CAAZ,EAAyBA,KAAK,CAAC9qQ,IAAN,CAAWmG,GAAX;AAC1B;;AAED2kQ,EAAAA,KAAK,CAACjnQ,OAAN,CAAc6iB,CAAC,IAAI6C,QAAQ,CAAC+X,IAAT,CAAcolF,QAAQ,CAAChgG,CAAD,CAAtB,EAA2B9Q,KAAK,CAAC8Q,CAAD,CAAhC,CAAnB;AACA,SAAO6C,QAAP;AACD;;AAED,SAASm4T,QAAT,CAAkB34C,UAAlB,EAA8B8lB,OAA9B,EAAuCnjM,KAAvC,EAA8C;AAC5C,QAAMrnF,CAAC,GAAG+6S,QAAQ,CAACr2C,UAAD,EAAa,CAACr9K,KAAK,IAAI,IAAV,EAAgBqmD,OAA7B,CAAlB;AACA,SAAO,UAAUA,OAAV,EAAmB;AACxB,WAAO1tI,CAAC,GAAGA,CAAC,CAACj2B,IAAF,CAAO2jK,OAAP,CAAeA,OAAf,EAAwB88I,OAAxB,CAAH,GAAsC,EAA9C;AACD,GAFD;AAGD;;AACD,SAAS8yB,SAAT,CAAmBvzU,IAAnB,EAAyB;AACvB,MAAIi2B,CAAC,GAAG,IAAR;AACA,SAAO,UAAU0tI,OAAV,EAAmB;AACxB,WAAOA,OAAO,GAAG,gCAAWA,OAAX,EAAoB1tI,CAAC,GAAGA,CAAC,IAAI,+BAAUj2B,IAAV,CAA7B,CAAH,GAAmDA,IAAjE;AACD,GAFD;AAGD;;AAED,MAAM0wN,KAAK,GAAGlyN,CAAC,IAAIA,CAAC,CAACmC,IAArB;;AAEA,SAAS6yU,SAAT,CAAmBtgV,IAAnB,EAAyBywK,OAAzB,EAAkC;AAChC,QAAMmyB,IAAI,GAAGn1L,IAAI,CAAClQ,IAAL,CAAUkzK,OAAV,EAAmBzwK,IAAnB,CAAb;AACA,SAAO4iM,IAAI,CAACR,IAAL,IAAaQ,IAAI,CAACR,IAAL,CAAUqnE,MAAvB,IAAiC,EAAxC;AACD;;AAED,SAAS82E,QAAT,CAAkBvgV,IAAlB,EAAwBu0D,MAAxB,EAAgCvf,MAAhC,EAAwC;AACtC,QAAMu9F,KAAK,GAAG+tM,SAAS,CAACtgV,IAAD,EAAO,IAAP,CAAvB;AAAA,QACMiC,CAAC,GAAGswI,KAAK,CAACh+E,MAAD,CADf;AAAA,QAEMpyD,CAAC,GAAGowI,KAAK,CAACv9F,MAAD,CAFf;AAGA,SAAO/yC,CAAC,IAAIE,CAAL,GAASF,CAAC,CAAC6K,IAAF,CAAO3K,CAAP,EAAU+F,GAAV,CAAcs1N,KAAd,CAAT,GAAgC7pG,SAAvC;AACD;;AACD,SAAS6sN,aAAT,CAAuBxgV,IAAvB,EAA6BwpB,IAA7B,EAAmC;AACjC,QAAM7c,CAAC,GAAG2zU,SAAS,CAACtgV,IAAD,EAAO,IAAP,CAAT,CAAsBwpB,IAAtB,CAAV;AACA,SAAO7c,CAAC,GAAGA,CAAC,CAACmqT,SAAF,GAAc5uT,GAAd,CAAkBs1N,KAAlB,CAAH,GAA8B7pG,SAAtC;AACD;;AAED,MAAM8sN,OAAO,GAAG,MAAM,OAAOp1T,MAAP,KAAkB,WAAlB,IAAiCA,MAAjC,IAA2C,IAAjE;;AAEA,SAASyyC,MAAT,GAAkB;AAChB,QAAM/S,CAAC,GAAG01R,OAAO,EAAjB;;AAEA,SAAO11R,CAAC,GAAGA,CAAC,CAAC+S,MAAL,GAAc,EAAtB;AACD;;AACD,SAASpkB,UAAT,GAAsB;AACpB,QAAMqR,CAAC,GAAG01R,OAAO,EAAjB;;AAEA,SAAO11R,CAAC,GAAG,CAACA,CAAC,CAAC21R,UAAH,EAAe31R,CAAC,CAAC41R,WAAjB,CAAH,GAAmC,CAAChtN,SAAD,EAAYA,SAAZ,CAA3C;AACD;;AACD,SAASitN,aAAT,GAAyB;AACvB,QAAM3xD,IAAI,GAAG,KAAKx+G,OAAL,CAAasxD,QAA1B;AAAA,QACM68C,EAAE,GAAGqQ,IAAI,CAACjwQ,SAAL,IAAkBiwQ,IAAI,CAACjwQ,SAAL,EAD7B;AAEA,SAAO4/P,EAAE,GAAG,CAACA,EAAE,CAACiiE,WAAJ,EAAiBjiE,EAAE,CAACkiE,YAApB,CAAH,GAAuC,CAACntN,SAAD,EAAYA,SAAZ,CAAhD;AACD;;AAED,SAASuqH,SAAT,CAAoB1xO,CAApB,EAAuBkmM,GAAvB,EAA4BtoF,KAA5B,EAAmC;AACjC,MAAI,CAAC59G,CAAL,EAAQ,OAAO,EAAP;AACR,QAAM,CAACixE,CAAD,EAAI9sE,CAAJ,IAASnE,CAAf;AAAA,QACM+1M,GAAG,GAAG,IAAI0uD,sBAAJ,GAAa7vQ,GAAb,CAAiBq8E,CAAC,CAAC,CAAD,CAAlB,EAAuBA,CAAC,CAAC,CAAD,CAAxB,EAA6B9sE,CAAC,CAAC,CAAD,CAA9B,EAAmCA,CAAC,CAAC,CAAD,CAApC,CADZ;AAAA,QAEMulQ,KAAK,GAAG9rJ,KAAK,IAAI,KAAKqmD,OAAL,CAAasxD,QAAb,CAAsB0tD,UAAtB,GAAmCrtF,IAF1D;AAGA,SAAO,+BAAY8zE,KAAZ,EAAmB3zD,GAAnB,EAAwB3oM,MAAM,CAAC84L,GAAD,CAA9B,CAAP;AACD;;AAED,SAAS94L,MAAT,CAAgB84L,GAAhB,EAAqB;AACnB,MAAI3vK,CAAC,GAAG,IAAR;;AAEA,MAAI2vK,GAAJ,EAAS;AACP,UAAMqI,KAAK,GAAG,qBAAMrI,GAAG,CAAC2mE,QAAV,CAAd;AAAA,UACM/uJ,KAAK,GAAG,qBAAMooF,GAAG,CAACquI,QAAV,CADd;;AAGAh+S,IAAAA,CAAC,GAAG3d,CAAC,IAAI,CAAC,CAAC21L,KAAK,CAACh9M,MAAP,IAAiBg9M,KAAK,CAACt7L,IAAN,CAAWtd,CAAC,IAAIijB,CAAC,CAACi0P,QAAF,KAAel3Q,CAA/B,CAAlB,MAAyD,CAACmoH,KAAK,CAACvsH,MAAP,IAAiBusH,KAAK,CAAC7qG,IAAN,CAAWxd,CAAC,IAAImjB,CAAC,CAACplB,IAAF,KAAWiC,CAA3B,CAA1E,CAAT;AACD;;AAED,SAAO8gC,CAAP;AACD;;AAED,MAAMi+S,eAAe,GAAG;AACtBv8U,EAAAA,MAAM,GAAG;AACP,WAAO,6BAAP;AACD,GAHqB;;AAKtB;AACA8jO,EAAAA,gBAAgB,EAAhBA,gCANsB;AAOtBW,EAAAA,mBAAmB,EAAnBA,mCAPsB;AAQtBQ,EAAAA,iBAAiB,EAAjBA,iCARsB;AAStBpB,EAAAA,aAAa,EAAbA,6BATsB;AAUtBW,EAAAA,gBAAgB,EAAhBA,gCAVsB;AAWtBQ,EAAAA,cAAc,EAAdA,8BAXsB;AAYtBhB,EAAAA,cAAc,EAAdA,8BAZsB;AAatBU,EAAAA,iBAAiB,EAAjBA,iCAbsB;AActBQ,EAAAA,eAAe,EAAfA,+BAdsB;AAetBxB,EAAAA,YAAY,EAAZA,4BAfsB;AAgBtBa,EAAAA,eAAe,EAAfA,+BAhBsB;AAiBtBQ,EAAAA,aAAa,EAAbA,6BAjBsB;AAkBtB1jO,EAAAA,OAAO,EAAPA,iBAlBsB;AAmBtBkE,EAAAA,SAAS,EAATA,mBAnBsB;AAoBtBquM,EAAAA,MAAM,EAANA,gBApBsB;;AAsBtB4oI,EAAAA,SAAS,CAAC77T,CAAD,EAAI;AACX,WAAOA,CAAC,KAAKuuG,SAAb;AACD,GAxBqB;;AA0BtB1pH,EAAAA,QAAQ,EAARA,kBA1BsB;AA2BtBwtM,EAAAA,QAAQ,EAARA,kBA3BsB;AA4BtBa,EAAAA,QAAQ,EAARA,kBA5BsB;AA6BtBxuM,EAAAA,QAAQ,EAARA,kBA7BsB;AA8BtBo0N,EAAAA,OAAO,EAAPA,qBA9BsB;;AAgCtBnhJ,EAAAA,OAAO,CAAC33D,CAAD,EAAI;AACT,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA1B;AACD,GAlCqB;;AAoCtBszL,EAAAA,SAAS,EAATA,mBApCsB;AAqCtBC,EAAAA,MAAM,EAANA,gBArCsB;AAsCtBxE,EAAAA,QAAQ,EAARA,kBAtCsB;AAuCtB/lM,EAAAA,QAAQ,EAARA,kBAvCsB;AAwCtB0/C,EAAAA,KAAK,EAALA,eAxCsB;AAyCtByqJ,EAAAA,IAAI,EAAJA,cAzCsB;AA0CtBE,EAAAA,KA1CsB;AA2CtBjoM,EAAAA,GAAG,EAAHA,aA3CsB;AA4CtBknM,EAAAA,IAAI,EAAJA,cA5CsB;AA6CtBrC,EAAAA,IAAI,EAAJA,cA7CsB;AA8CtB+C,EAAAA,OAAO,EAAPA,iBA9CsB;AA+CtBS,EAAAA,QAAQ,EAARA,kBA/CsB;AAgDtBs7C,EAAAA,GAAG,EAAHA,YAhDsB;AAiDtBmC,EAAAA,GAAG,EAAHA,YAjDsB;AAkDtBK,EAAAA,GAAG,EAAHA,YAlDsB;AAmDtBtB,EAAAA,GAAG,EAAHA,YAnDsB;AAoDtB6pF,EAAAA,SApDsB;AAqDtBC,EAAAA,QArDsB;AAsDtBz6I,EAAAA,QAAQ,EAAEg8D,cAtDY;AAuDtB1/I,EAAAA,MAvDsB;AAwDtB25G,EAAAA,SAxDsB;AAyDtBC,EAAAA,QAzDsB;AA0DtBpI,EAAAA,SAAS,EAATA,mBA1DsB;AA2DtBE,EAAAA,WAAW,EAAXA,qBA3DsB;AA4DtB4I,EAAAA,UA5DsB;AA6DtBC,EAAAA,SA7DsB;AA8DtBhJ,EAAAA,UAAU,EAAVA,oBA9DsB;AA+DtBE,EAAAA,YAAY,EAAZA,sBA/DsB;AAgEtBhD,EAAAA,iBAAiB,EAAjBA,2BAhEsB;AAiEtBytH,EAAAA,WAjEsB;AAkEtBC,EAAAA,iBAlEsB;AAmEtBC,EAAAA,SAnEsB;AAoEtBC,EAAAA,eApEsB;AAqEtBvoI,EAAAA,OAAO,EAAPA,iBArEsB;AAsEtBG,EAAAA,UAAU,EAAVA,oBAtEsB;AAuEtB8a,EAAAA,IAAI,EAAJA,cAvEsB;AAwEtBU,EAAAA,OAAO,EAAPA,iBAxEsB;AAyEtBZ,EAAAA,SAAS,EAATA,mBAzEsB;AA0EtBU,EAAAA,YAAY,EAAZA,sBA1EsB;AA2EtB1vN,EAAAA,IA3EsB;AA4EtBqhB,EAAAA,IA5EsB;AA6EtBqP,EAAAA,KA7EsB;AA8EtBumL,EAAAA,MAAM,EAANA,gBA9EsB;AA+EtBinI,EAAAA,OA/EsB;AAgFtB7gG,EAAAA,SAhFsB;AAiFtBtmC,EAAAA,UAAU,EAAVA,oBAjFsB;AAkFtBmoI,EAAAA,aAlFsB;AAmFtBE,EAAAA,UAnFsB;AAoFtBniR,EAAAA,MApFsB;AAqFtB8iR,EAAAA,aArFsB;AAsFtBlnS,EAAAA,UAtFsB;AAuFtBwmS,EAAAA,SAvFsB;AAwFtBpD,EAAAA,OAxFsB;AAyFtBuD,EAAAA,SAzFsB;AA0FtBnsI,EAAAA,SAAS,EAATA,mBA1FsB;AA2FtBE,EAAAA,MAAM,EAANA,gBA3FsB;AA4FtBC,EAAAA,MAAM,EAANA,gBA5FsB;AA6FtBC,EAAAA,SAAS,EAATA,mBA7FsB;AA8FtBI,EAAAA,UAAU,EAAVA,oBA9FsB;AA+FtBC,EAAAA,OAAO,EAAPA,iBA/FsB;AAgGtBC,EAAAA,OAAO,EAAPA,iBAhGsB;AAiGtBC,EAAAA,UAAU,EAAVA,oBAjGsB;AAkGtB5oM,EAAAA,MAlGsB;AAmGtB8yN,EAAAA;AAnGsB,CAAxB;;AAqGA,MAAMmiH,cAAc,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,GAArC,CAAvB;AAAA,MACM;AACNC,WAAW,GAAG,aAFd;AAAA,MAGM;AACNC,UAAU,GAAG,OAJb;AAAA,MAKM;AACNC,WAAW,GAAG,EANd,EAMkB;AAClB;;AAEA,MAAMC,aAAa,GAAG;AACpBpH,EAAAA,SAAS,EAAE,CAAC,GAAD,CADS;AAEpBhrI,EAAAA,OAAO,EAAE,CAAC,OAAD,EAAU,OAAV,EAAmB,MAAnB,CAFW;AAGpBmrI,EAAAA,QAAQ,EAAE,OAHU;AAIpBD,EAAAA,SAAS,EAAE1oU,EAAE,IAAI,KAAK1T,MAAL,CAAY,2BAAYu/U,YAAY,GAAG7rU,EAA3B,CAAZ,EAA4C,GAA5C,CAJG;AAKpByoU,EAAAA,SAAS,EAAEoH,cALS;AAMpB/+K,EAAAA,SAAS,EAAEA,yBANS;AAOpBy7K,EAAAA,QAAQ,EAAEoD;AAPU,CAAtB,EAQG;;;AAEH,MAAMG,aAAa,GAAG,6BAAQF,aAAR,CAAtB,EAA8C;;;;AAE9C,SAASC,cAAT,CAAwBvI,OAAxB,EAAiC;AAC/B,QAAMt2T,EAAE,GAAG,+BAAUs2T,OAAV,CAAX;AACAkI,EAAAA,cAAc,CAAC3+U,OAAf,CAAuBvC,IAAI,IAAI0iB,EAAE,CAAC1iB,IAAD,CAAF,GAAWmhV,WAAW,GAAGnhV,IAAxD;;AAEA,OAAK,MAAMA,IAAX,IAAmBghV,eAAnB,EAAoC;AAClCt+T,IAAAA,EAAE,CAAC1iB,IAAD,CAAF,GAAWohV,UAAU,GAAGphV,IAAxB;AACD;;AAED,wBAAO0iB,EAAP,EAAWq7T,sBAAsB,CAAC/E,OAAD,EAAUgI,eAAV,EAA2BK,WAA3B,CAAjC;AACA,SAAO3+T,EAAP;AACD,EAAC;;;AAGF,SAAS++T,kBAAT,CAA4BzhV,IAA5B,EAAkC0iB,EAAlC,EAAsC20L,OAAtC,EAA+C;AAC7C,MAAI74M,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B;AAC1B,WAAOijV,eAAe,CAAChhV,IAAD,CAAtB;AACD,GAH4C,CAG3C;;;AAGFghV,EAAAA,eAAe,CAAChhV,IAAD,CAAf,GAAwB0iB,EAAxB,CAN6C,CAMjB;;AAE5B,MAAI20L,OAAJ,EAAagqI,WAAW,CAACrhV,IAAD,CAAX,GAAoBq3M,OAApB,CARgC,CAQH;AAC1C;;AAEA,MAAImqI,aAAJ,EAAmBA,aAAa,CAACrH,SAAd,CAAwBn6U,IAAxB,IAAgCohV,UAAU,GAAGphV,IAA7C;AACnB,SAAO,IAAP;AACD,EAAC;;;AAEFyhV,kBAAkB,CAAC,WAAD,EAAc14G,SAAd,EAAyB20G,YAAzB,CAAlB;AACA+D,kBAAkB,CAAC,MAAD,EAASluQ,IAAT,EAAemqQ,YAAf,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAW5tI,MAAX,EAAmB6pI,YAAnB,CAAlB;AACA+D,kBAAkB,CAAC,OAAD,EAAUxhT,KAAV,EAAiBy9S,YAAjB,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAWtlF,MAAX,EAAmBuhF,YAAnB,CAAlB;AACA+D,kBAAkB,CAAC,OAAD,EAAUntU,KAAV,EAAiBopU,YAAjB,CAAlB;AACA+D,kBAAkB,CAAC,UAAD,EAAatB,aAAb,EAA4BzC,YAA5B,CAAlB;AACA+D,kBAAkB,CAAC,SAAD,EAAYhD,OAAZ,EAAqBf,YAArB,CAAlB;AACA+D,kBAAkB,CAAC,WAAD,EAAc9C,SAAd,EAAyBjB,YAAzB,CAAlB;AACA+D,kBAAkB,CAAC,aAAD,EAAgB5C,WAAhB,EAA6BnB,YAA7B,CAAlB;AACA+D,kBAAkB,CAAC,UAAD,EAAarB,QAAb,EAAuB1C,YAAvB,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAW5E,MAAX,EAAmBY,aAAnB,CAAlB;AACAgE,kBAAkB,CAAC,MAAD,EAASh0U,IAAT,EAAe+vU,WAAf,CAAlB;AACAiE,kBAAkB,CAAC,UAAD,EAAalB,QAAb,EAAuB/C,WAAvB,CAAlB;AACAiE,kBAAkB,CAAC,eAAD,EAAkBjB,aAAlB,EAAiChD,WAAjC,CAAlB,EAAiE;;AAEjEiE,kBAAkB,CAAC,iBAAD,EAAoBjG,6BAApB,EAAmCc,gCAAnC,CAAlB;AACAmF,kBAAkB,CAAC,oBAAD,EAAuB9F,gCAAvB,EAAyCW,gCAAzC,CAAlB;;AAEA,SAASnlI,MAAT,CAAiBhyM,IAAjB,EAAuBo3U,KAAvB,EAA8B;AAC5B,QAAMz6U,MAAM,GAAG,EAAf,CAD4B,CACT;;AAEnB,MAAI24U,GAAJ;;AAEA,MAAI;AACFt1U,IAAAA,IAAI,GAAG,wBAASA,IAAT,IAAiBA,IAAjB,GAAwB,2BAAYA,IAAZ,IAAoB,EAAnD;AACAs1U,IAAAA,GAAG,GAAG,2BAAMt1U,IAAN,CAAN;AACD,GAHD,CAGE,OAAO0c,GAAP,EAAY;AACZ,yBAAM,6BAA6B1c,IAAnC;AACD,GAV2B,CAU1B;;;AAGFs1U,EAAAA,GAAG,CAACh3G,KAAJ,CAAUj6M,IAAI,IAAI;AAChB,QAAIA,IAAI,CAAC9K,IAAL,KAAcmyT,8BAAlB,EAAkC;AAClC,UAAM7wU,IAAI,GAAGwpB,IAAI,CAAC4nT,MAAL,CAAYpxU,IAAzB;AAAA,UACMyjO,KAAK,GAAG69G,aAAa,CAACrD,QAAd,CAAuBj+U,IAAvB,CADd;AAEA,QAAIyjO,KAAJ,EAAWA,KAAK,CAACzjO,IAAD,EAAOwpB,IAAI,CAAChrB,SAAZ,EAAuB+9U,KAAvB,EAA8Bz6U,MAA9B,CAAL;AACZ,GALD,EAb4B,CAkBxB;;AAEJ,QAAMq0L,GAAG,GAAGqrJ,aAAa,CAAC/G,GAAD,CAAzB,CApB4B,CAoBI;;AAEhCtkJ,EAAAA,GAAG,CAACokJ,OAAJ,CAAYh4U,OAAZ,CAAoBvC,IAAI,IAAI;AAC1B,UAAM0hV,UAAU,GAAGnE,YAAY,GAAGv9U,IAAlC;;AAEA,QAAI,CAAC,8BAAe8B,MAAf,EAAuB4/U,UAAvB,CAAD,IAAuCnF,KAAK,CAACoF,SAAN,CAAgB3hV,IAAhB,CAA3C,EAAkE;AAChE8B,MAAAA,MAAM,CAAC4/U,UAAD,CAAN,GAAqBnF,KAAK,CAACqF,SAAN,CAAgB5hV,IAAhB,CAArB;AACD;AACF,GAND,EAtB4B,CA4BxB;;AAEJ,SAAO;AACL6hV,IAAAA,KAAK,EAAE,sBAAO;AACZ/+C,MAAAA,IAAI,EAAE3sG,GAAG,CAAC2sG;AADE,KAAP,EAEJy5C,KAAK,CAACnnQ,OAAN,CAAcqlQ,GAAd,GAAoB;AACrBA,MAAAA;AADqB,KAApB,GAEC,IAJG,CADF;AAMLqH,IAAAA,OAAO,EAAE3rJ,GAAG,CAAC55I,MANR;AAOLwlS,IAAAA,OAAO,EAAEjgV;AAPJ,GAAP;AASD;;;;;;;;;AC1oBD;;AACA;;AAEA;AACA;AACA;AACA,SAAS6+C,KAAT,CAAgBu3D,IAAhB,EAAsB;AACpB,QAAMmU,GAAG,GAAG,IAAZ;AAAA,QACM21N,SAAS,GAAG9pO,IAAI,CAAC8pO,SAAL,IAAkB,EADpC,CADoB,CAEoB;;AAExC,MAAI9pO,IAAI,CAACmgK,UAAT,EAAqB;AACnBhsJ,IAAAA,GAAG,CAACgsJ,UAAJ,GAAiBngK,IAAI,CAACmgK,UAAtB;AACD,GANmB,CAMlB;;;AAGF,MAAIngK,IAAI,CAAC+pO,WAAT,EAAsB;AACpB51N,IAAAA,GAAG,CAAC41N,WAAJ,GAAkB/pO,IAAI,CAAC+pO,WAAvB;AACD,GAXmB,CAWlB;;;AAGF,MAAI/pO,IAAI,CAACswG,MAAT,EAAiB;AACfn8F,IAAAA,GAAG,CAACm8F,MAAJ,GAAatwG,IAAI,CAACswG,MAAlB;AACD,GAhBmB,CAgBlB;;;AAGFw5H,EAAAA,SAAS,CAACz/U,OAAV,CAAkBonH,KAAK,IAAI0C,GAAG,CAAC61N,aAAJ,CAAkBv4N,KAAlB,CAA3B,EAnBoB,CAmBkC;;AAEtDq4N,EAAAA,SAAS,CAACz/U,OAAV,CAAkBonH,KAAK,IAAI0C,GAAG,CAAC81N,uBAAJ,CAA4Bx4N,KAA5B,CAA3B,EArBoB,CAqB4C;;AAEhE,GAACzR,IAAI,CAAC6yL,OAAL,IAAgB,EAAjB,EAAqBxoS,OAArB,CAA6BonH,KAAK,IAAI0C,GAAG,CAAC+1N,WAAJ,CAAgBz4N,KAAhB,CAAtC,EAvBoB,CAuB2C;;AAE/D,GAACzR,IAAI,CAACntE,OAAL,IAAgB,EAAjB,EAAqBxoC,OAArB,CAA6BonH,KAAK,IAAI0C,GAAG,CAACg2N,WAAJ,CAAgB14N,KAAhB,CAAtC;AACA,SAAO0C,GAAG,CAAChlH,OAAJ,EAAP;AACD;;AAED,MAAMi7U,IAAI,GAAG,qBAAM,CAAC,MAAD,CAAN,CAAb;AAAA,MACMC,IAAI,GAAG,qBAAM,CAAC,OAAD,EAAU,OAAV,EAAmB,MAAnB,CAAN,CADb;;AAEA,SAASC,aAAT,CAAuBv2U,MAAvB,EAA+BotQ,QAA/B,EAAyC;AACvC,MAAIypB,IAAI,GAAG,EAAX;AACA,MAAIw/C,IAAI,CAACjpE,QAAD,CAAR,EAAoB,OAAOypB,IAAP;;AAEpB,MAAI72R,MAAM,CAACsxE,EAAX,EAAe;AACb,QAAItxE,MAAM,CAACrH,CAAX,EAAc;AACZ,UAAI29U,IAAI,CAAClpE,QAAD,CAAR,EAAoB;AAClBypB,QAAAA,IAAI,IAAI,oCAAR;AACD;;AAEDA,MAAAA,IAAI,IAAI,mBAAR;AACD,KAND,MAMO;AACLA,MAAAA,IAAI,IAAI,wBAAR;AACD;AACF;;AAED,MAAI72R,MAAM,CAACqgQ,EAAX,EAAe;AACbw2B,IAAAA,IAAI,IAAI,0BAAR;AACD;;AAED,MAAI72R,MAAM,CAACklG,EAAX,EAAe;AACb,QAAIllG,MAAM,CAACkX,CAAX,EAAc;AACZ,UAAIo/T,IAAI,CAAClpE,QAAD,CAAR,EAAoB;AAClBypB,QAAAA,IAAI,IAAI,oCAAR;AACD;;AAEDA,MAAAA,IAAI,IAAI,oBAAR;AACD,KAND,MAMO;AACLA,MAAAA,IAAI,IAAI,yBAAR;AACD;AACF;;AAED,MAAI72R,MAAM,CAACsgQ,EAAX,EAAe;AACbu2B,IAAAA,IAAI,IAAI,2BAAR;AACD;;AAED,SAAOA,IAAP;AACD;;AACD,SAAS2/C,aAAT,CAAuB/jU,IAAvB,EAA6B;AAC3B,SAAO,CAACA,IAAI,GAAG,EAAR,EAAY9b,WAAZ,EAAP;AACD;;AACD,SAAS8/U,UAAT,CAAoBhkU,IAApB,EAA0B;AACxB,SAAO+jU,aAAa,CAAC/jU,IAAD,CAAb,KAAwB,UAA/B;AACD;;AACD,SAASikU,SAAT,CAAmBjkU,IAAnB,EAAyB;AACvB,SAAO+jU,aAAa,CAAC/jU,IAAD,CAAb,KAAwB,SAA/B;AACD;;AAED,SAASkkU,UAAT,CAAoBv2N,GAApB,EAAyB/tH,IAAzB,EAA+BwkS,IAA/B,EAAqC;AACnC;AACA,MAAIA,IAAI,CAACA,IAAI,CAAC/kS,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA9B,EAAmC;AACjC+kS,IAAAA,IAAI,GAAG,YAAYA,IAAZ,GAAmB,IAA1B;AACD;;AAED,QAAMpgR,EAAE,GAAGzE,QAAQ,CAAC,GAAG3f,IAAI,CAACN,MAAL,CAAY8kS,IAAZ,CAAJ,CAAnB;AACA,SAAOz2K,GAAG,IAAIA,GAAG,CAAC8tN,SAAX,GAAuBz3T,EAAE,CAAComH,IAAH,CAAQzc,GAAG,CAAC8tN,SAAZ,CAAvB,GAAgDz3T,EAAvD;AACD,EAAC;;;AAGF,SAASmgU,QAAT,CAAkBplQ,CAAlB,EAAqB9sE,CAArB,EAAwB+5L,EAAxB,EAA4BD,EAA5B,EAAgC;AAC9B,SAAO,SAASzsM,MAAT,CAAgBy/E,CAAhB,EAAmB,WAAnB,EAAgCz/E,MAAhC,CAAuC2S,CAAvC,EAA0C,iCAA1C,EAA6E3S,MAA7E,CAAoF0sM,EAApF,EAAwF,4CAAxF,EAAsI1sM,MAAtI,CAA6IysM,EAA7I,EAAiJ,gGAAjJ,EAAmPzsM,MAAnP,CAA0P0sM,EAA1P,EAA8P,6BAA9P,EAA6R1sM,MAA7R,CAAoSysM,EAApS,EAAwS,KAAxS,CAAP;AACD;;AAED,IAAIq4I,iBAAiB,GAAG;AACtB;AACF;AACA;AACE3zI,EAAAA,QAAQ,EAAE,CAAC9iF,GAAD,EAAMlnH,IAAN,KAAey9U,UAAU,CAACv2N,GAAD,EAAM,CAAC,GAAD,CAAN,EAAalnH,IAAI,CAAC29R,IAAlB,CAJb;;AAMtB;AACF;AACA;AACEigD,EAAAA,SAAS,EAAE,CAAC12N,GAAD,EAAMlnH,IAAN,KAAey9U,UAAU,CAACv2N,GAAD,EAAM,CAAC,OAAD,EAAU,GAAV,CAAN,EAAsBlnH,IAAI,CAAC29R,IAA3B,CATd;;AAWtB;AACF;AACA;AACEj/K,EAAAA,KAAK,EAAE,CAACwI,GAAD,EAAMlnH,IAAN,KAAey9U,UAAU,CAACv2N,GAAD,EAAM,CAAC,OAAD,CAAN,EAAiBlnH,IAAI,CAAC29R,IAAtB,CAdV;;AAgBtB;AACF;AACA;AACE3nL,EAAAA,OAAO,EAAE,CAACkR,GAAD,EAAMlnH,IAAN,KAAe;AACtB,UAAM29R,IAAI,GAAG,iDAAiD9kS,MAAjD,CAAwDmH,IAAI,CAAC29R,IAA7D,EAAmE,GAAnE,CAAb;AACA,WAAO8/C,UAAU,CAACv2N,GAAD,EAAM,CAAC,GAAD,EAAM,OAAN,CAAN,EAAsBy2K,IAAtB,CAAjB;AACD,GAtBqB;;AAwBtB;AACF;AACA;AACE72R,EAAAA,MAAM,EAAE,CAACogH,GAAD,EAAMpgH,MAAN,KAAiB;AACvB,UAAM;AACJotQ,MAAAA,QADI;AAEJr4N,MAAAA;AAFI,QAGF/0C,MAHJ;AAIA,QAAI62R,IAAI,GAAG,iCAAX;;AAEA,SAAK,MAAM9iS,IAAX,IAAmBghD,QAAnB,EAA6B;AAC3B,YAAM52B,CAAC,GAAG,OAAO,2BAAYpqB,IAAZ,CAAP,GAA2B,GAArC;AACA8iS,MAAAA,IAAI,IAAI,KAAK9kS,MAAL,CAAYgjD,QAAQ,CAAChhD,IAAD,CAAR,CAAe8iS,IAA3B,EAAiC,MAAjC,EAAyC9kS,MAAzC,CAAgDosB,CAAhD,EAAmD,OAAnD,EAA4DpsB,MAA5D,CAAmEosB,CAAnE,EAAsE,SAAtE,CAAR;AACD;;AAED04Q,IAAAA,IAAI,IAAI0/C,aAAa,CAACxhS,QAAD,EAAWq4N,QAAX,CAArB;AACAypB,IAAAA,IAAI,IAAI,WAAR;AACA,WAAO8/C,UAAU,CAACv2N,GAAD,EAAM,CAAC,MAAD,EAAS,GAAT,CAAN,EAAqBy2K,IAArB,CAAjB;AACD,GA1CqB;;AA4CtB;AACF;AACA;AACEk2C,EAAAA,OAAO,EAAE;AACPz3U,IAAAA,GAAG,CAACuL,IAAD,EAAO;AACR,YAAMuxU,GAAG,GAAG,IAAIrgV,MAAJ,CAAW8O,IAAI,CAAC5E,GAAL,CAASy2M,qBAAT,EAAsBt8M,IAAtB,CAA2B,IAA3B,CAAX,EAA6C,GAA7C,CAAZ;AACA,YAAMd,GAAG,GAAG0c,QAAQ,CAAC,GAAD,EAAM,WAAWjgB,MAAX,CAAkBqgV,GAAlB,EAAuB,GAAvB,CAAN,CAApB;AACA98U,MAAAA,GAAG,CAACuL,IAAJ,GAAWuxU,GAAX;AACA,aAAO98U,GAAP;AACD,KANM;;AAQPwzC,IAAAA,UAAU,CAACwH,MAAD,EAASg5J,MAAT,EAAiB;AACzB,UAAIpzM,CAAJ;;AAEA,YAAM+F,GAAG,GAAG,CAACkC,CAAD,EAAI3L,CAAJ,KAAU;AACpB,cAAM2rB,CAAC,GAAGmrL,MAAM,CAAC92M,CAAD,CAAhB;AACA,YAAIg/E,CAAJ,EAAO9sE,CAAP;;AAEA,YAAIvG,CAAC,CAAC0C,IAAN,EAAY;AACV2wE,UAAAA,CAAC,GAAG,IAAIz/E,MAAJ,CAAWoM,CAAC,CAAC0C,IAAb,CAAJ;AACA6D,UAAAA,CAAC,GAAG,IAAI3S,MAAJ,CAAWoM,CAAC,CAAC0C,IAAb,CAAJ;AACD,SAHD,MAGO;AACL,WAAC3K,CAAC,GAAGA,CAAC,IAAI,EAAV,EAAc,MAAM1D,CAApB,IAAyB2L,CAAzB;AACAqzE,UAAAA,CAAC,GAAG,SAASz/E,MAAT,CAAgBS,CAAhB,EAAmB,KAAnB,CAAJ;AACAkS,UAAAA,CAAC,GAAG,SAAS3S,MAAT,CAAgBS,CAAhB,EAAmB,KAAnB,CAAJ;AACD;;AAED,eAAOokV,QAAQ,CAACplQ,CAAD,EAAI9sE,CAAJ,EAAO,CAACyZ,CAAR,EAAWA,CAAX,CAAf;AACD,OAdD;;AAgBA,YAAM1H,EAAE,GAAGzE,QAAQ,CAAC,GAAD,EAAM,GAAN,EAAW,sBAAsBs+B,MAAM,CAACr0C,GAAP,CAAWA,GAAX,EAAgB7F,IAAhB,CAAqB,EAArB,CAAtB,GAAiD,IAA5D,CAAnB;AACA,aAAOF,CAAC,GAAGugB,EAAE,CAAComH,IAAH,CAAQ3mI,CAAR,CAAH,GAAgBugB,EAAxB;AACD;;AA7BM;AA/Ca,CAAxB;AAiFA;AACA;AACA;;AAEA,SAASw/T,aAAT,CAAuBhqO,IAAvB,EAA6B;AAC3B,QAAMmU,GAAG,GAAG,IAAZ;;AAEA,MAAIq2N,UAAU,CAACxqO,IAAI,CAACx5F,IAAN,CAAV,IAAyB,CAACw5F,IAAI,CAACx5F,IAAnC,EAAyC;AACvC2tG,IAAAA,GAAG,CAAC8iF,QAAJ,CAAaj3F,IAAb,EAAmBA,IAAI,CAACvqB,MAAL,GAAc0+B,GAAG,CAAC22N,kBAAJ,CAAuB9qO,IAAI,CAACvqB,MAA5B,CAAd,GAAoD,IAAvE;AACD,GAFD,MAEO;AACL0+B,IAAAA,GAAG,CAACq7D,SAAJ,CAAcxvE,IAAd,EAAoBA,IAAI,CAACx5F,IAAzB;AACD;AACF;AACD;AACA;AACA;;;AAEA,SAASyjU,uBAAT,CAAiCjqO,IAAjC,EAAuC;AACrC,QAAMmU,GAAG,GAAG,IAAZ;;AAEA,MAAInU,IAAI,CAACp2G,MAAT,EAAiB;AACf,UAAMs7B,EAAE,GAAGivF,GAAG,CAAC9qH,GAAJ,CAAQ22G,IAAI,CAACxmG,EAAb,CAAX;AACA,QAAI,CAAC0rB,EAAL,EAAS,qBAAM,0BAA0B86E,IAAI,CAACxmG,EAArC;AACT26G,IAAAA,GAAG,CAAC01G,QAAJ,CAAapxC,OAAb,CAAqBvzJ,EAArB,EAAyBA,EAAE,CAAC+iM,UAAH,CAAc9zG,GAAG,CAAC42N,eAAJ,CAAoB/qO,IAAI,CAACp2G,MAAzB,CAAd,EAAgDo2G,IAAI,CAAC6nH,KAArD,EAA4D7nH,IAAI,CAACooH,QAAjE,CAAzB;AACD;AACF;AAED;AACA;AACA;;;AAEA,SAAS2iH,eAAT,CAAyB/qO,IAAzB,EAA+Bp2G,MAA/B,EAAuC;AACrCA,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AACA,QAAMuqH,GAAG,GAAG,IAAZ;;AAEA,OAAK,MAAM3pH,GAAX,IAAkBw1G,IAAlB,EAAwB;AACtB,UAAMz2G,KAAK,GAAGy2G,IAAI,CAACx1G,GAAD,CAAlB;AACAZ,IAAAA,MAAM,CAACY,GAAD,CAAN,GAAc,uBAAQjB,KAAR,IAAiBA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAIuyU,cAAc,CAACvyU,CAAD,EAAI07G,GAAJ,EAASvqH,MAAT,CAA7B,CAAjB,GAAkEohV,cAAc,CAACzhV,KAAD,EAAQ4qH,GAAR,EAAavqH,MAAb,CAA9F;AACD;;AAED,SAAOA,MAAP;AACD;AACD;AACA;AACA;;;AAEA,SAASohV,cAAT,CAAwBhrO,IAAxB,EAA8BmU,GAA9B,EAAmCvqH,MAAnC,EAA2C;AACzC,MAAI,CAACo2G,IAAD,IAAS,CAAC,wBAASA,IAAT,CAAd,EAA8B,OAAOA,IAAP;;AAE9B,OAAK,IAAIz5G,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGw2U,OAAO,CAACplV,MAAvB,EAA+BglC,CAApC,EAAuCtkC,CAAC,GAAGkO,CAA3C,EAA8C,EAAElO,CAAhD,EAAmD;AACjDskC,IAAAA,CAAC,GAAGogT,OAAO,CAAC1kV,CAAD,CAAX;;AAEA,QAAI,8BAAey5G,IAAf,EAAqBn1E,CAAC,CAACrgC,GAAvB,CAAJ,EAAiC;AAC/B,aAAOqgC,CAAC,CAAC4d,KAAF,CAAQu3D,IAAR,EAAcmU,GAAd,EAAmBvqH,MAAnB,CAAP;AACD;AACF;;AAED,SAAOo2G,IAAP;AACD;AACD;;;AAGA,IAAIirO,OAAO,GAAG,CAAC;AACbzgV,EAAAA,GAAG,EAAE,MADQ;AAEbi+C,EAAAA,KAAK,EAAEyiS;AAFM,CAAD,EAGX;AACD1gV,EAAAA,GAAG,EAAE,MADJ;AAEDi+C,EAAAA,KAAK,EAAE0iS;AAFN,CAHW,EAMX;AACD3gV,EAAAA,GAAG,EAAE,OADJ;AAEDi+C,EAAAA,KAAK,EAAE2iS;AAFN,CANW,EASX;AACD5gV,EAAAA,GAAG,EAAE,QADJ;AAEDi+C,EAAAA,KAAK,EAAEy1L;AAFN,CATW,EAYX;AACD1zO,EAAAA,GAAG,EAAE,SADJ;AAEDi+C,EAAAA,KAAK,EAAE4iS;AAFN,CAZW,EAeX;AACD7gV,EAAAA,GAAG,EAAE,UADJ;AAEDi+C,EAAAA,KAAK,EAAE6iS;AAFN,CAfW,EAkBX;AACD9gV,EAAAA,GAAG,EAAE,UADJ;AAEDi+C,EAAAA,KAAK,EAAEhzB;AAFN,CAlBW,EAqBX;AACDjrB,EAAAA,GAAG,EAAE,UADJ;AAEDi+C,EAAAA,KAAK,EAAE8iS;AAFN,CArBW,EAwBX;AACD/gV,EAAAA,GAAG,EAAE,UADJ;AAEDi+C,EAAAA,KAAK,EAAE+iS;AAFN,CAxBW,CAAd;AA4BA;AACA;AACA;;AAEA,SAASN,WAAT,CAAqBh+T,CAArB,EAAwBinG,GAAxB,EAA6B;AAC3B,SAAOA,GAAG,CAAC9qH,GAAJ,CAAQ6jB,CAAC,CAACu+T,IAAV,KAAmB,qBAAM,2BAA2Bv+T,CAAC,CAACu+T,IAAnC,CAA1B;AACD;AACD;AACA;AACA;;;AAGA,SAASL,aAAT,CAAuBl+T,CAAvB,EAA0BinG,GAA1B,EAA+BvqH,MAA/B,EAAuC;AACrC,MAAIsjB,CAAC,CAAC28T,OAAN,EAAe;AACb;AACA11N,IAAAA,GAAG,CAAC42N,eAAJ,CAAoB79T,CAAC,CAAC28T,OAAtB,EAA+BjgV,MAA/B;AACD;;AAED,QAAMia,CAAC,GAAG,OAAOqJ,CAAC,CAACy8T,KAAF,CAAQ/+C,IAAf,GAAsB,GAAtB,GAA4B19Q,CAAC,CAACw+T,KAAxC;AACA,SAAOv3N,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,MAAcswG,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,IAAY,wBAASswG,GAAG,CAACw3N,mBAAJ,CAAwBz+T,CAAC,CAACy8T,KAA1B,CAAT,EAA2Cz8T,CAAC,CAAC08T,OAA7C,EAAsD18T,CAAC,CAACw+T,KAAxD,CAA1B,CAAP;AACD;AACD;AACA;AACA;;;AAGA,SAASP,MAAT,CAAgBj+T,CAAhB,EAAmBinG,GAAnB,EAAwB;AACtB,QAAMtwG,CAAC,GAAG,OAAOqJ,CAAC,CAAC0+T,IAAT,GAAgB,GAAhB,GAAsB,CAAC,CAAC1+T,CAAC,CAAC2+T,KAApC;AACA,SAAO13N,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,MAAcswG,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,IAAY,mBAAIqJ,CAAC,CAAC0+T,IAAN,EAAY1+T,CAAC,CAAC2+T,KAAd,EAAqB13N,GAAG,CAAClnH,IAAJ,CAAS6zU,OAA9B,CAA1B,CAAP;AACD;AACD;AACA;AACA;;;AAGA,SAAS5iG,QAAT,CAAkBhxN,CAAlB,EAAqBinG,GAArB,EAA0B;AACxB,MAAI,CAACjnG,CAAC,CAAC4+T,MAAP,EAAe,OAAO,IAAP;AACf,QAAMjoU,CAAC,GAAG,OAAOqJ,CAAC,CAAC4+T,MAAT,GAAkB,GAAlB,GAAwB5+T,CAAC,CAACw+T,KAApC;AACA,SAAOv3N,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,MAAcswG,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,IAAY,qBAAMqJ,CAAC,CAAC4+T,MAAR,EAAgB5+T,CAAC,CAACw+T,KAAlB,EAAyBv3N,GAAG,CAAClnH,IAAJ,CAAS6zU,OAAlC,CAA1B,CAAP;AACD;AACD;AACA;AACA;;;AAGA,SAASwK,UAAT,CAAoBp+T,CAApB,EAAuBinG,GAAvB,EAA4B;AAC1B;AACA;AACA,QAAMtwG,CAAC,GAAG,OAAOqJ,CAAC,CAAC6+T,QAAT,GAAoB,GAApB,GAA0B7+T,CAAC,CAAC8+T,MAAtC;AAAA,QACMh5U,CAAC,GAAG,qBAAMka,CAAC,CAAC6+T,QAAR,EAAkB/7U,GAAlB,CAAsBkd,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAAC++T,QAAP,GAAkBhmH,qBAAlB,GAA4B/4M,CAAvD,CADV;AAEA,SAAOinG,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,MAAcswG,GAAG,CAAC3pG,EAAJ,CAAO3G,CAAP,IAAY,uBAAQ7Q,CAAR,EAAWka,CAAC,CAAC8+T,MAAb,EAAqB73N,GAAG,CAAClnH,IAAJ,CAAS6zU,OAA9B,CAA1B,CAAP;AACD;AACD;AACA;AACA;;;AAGA,SAASuK,SAAT,CAAmBn+T,CAAnB,EAAsBinG,GAAtB,EAA2B;AACzB,QAAMnU,IAAI,GAAG9yF,CAAC,CAACg/T,OAAf;AAAA,QACMn4U,MAAM,GAAG,EADf;;AAGA,OAAK,MAAMjM,IAAX,IAAmBk4G,IAAnB,EAAyB;AACvB,UAAMmsO,GAAG,GAAGnsO,IAAI,CAACl4G,IAAD,CAAhB;AACAiM,IAAAA,MAAM,CAACjM,IAAD,CAAN,GAAe,wBAASqsH,GAAG,CAACi4N,gBAAJ,CAAqBD,GAAG,CAACxC,KAAzB,CAAT,EAA0CwC,GAAG,CAACvC,OAA9C,CAAf;AACA71U,IAAAA,MAAM,CAACjM,IAAD,CAAN,CAAamoB,MAAb,GAAsBk8T,GAAG,CAAC19P,OAA1B;AACD;;AAED,SAAO16E,MAAP;AACD;AACD;AACA;AACA;;;AAGA,SAAS0hB,UAAT,CAAoBvI,CAApB,EAAuBinG,GAAvB,EAA4B;AAC1B,SAAOA,GAAP;AACD;AACD;AACA;AACA;;;AAGA,SAASo3N,UAAT,CAAoBr+T,CAApB,EAAuBinG,GAAvB,EAA4B;AAC1B,QAAMnU,IAAI,GAAG9yF,CAAC,CAACm/T,QAAf;AACA,SAAO,UAAUxiH,QAAV,EAAoBr/N,GAApB,EAAyByzM,MAAzB,EAAiC;AACtC,UAAMquI,MAAM,GAAGn4N,GAAG,CAACs3G,IAAJ,GAAWhjL,KAAX,CAAiBu3D,IAAjB,CAAf;AAAA,UACM96E,EAAE,GAAGonT,MAAM,CAACjjV,GAAP,CAAW22G,IAAI,CAAC8pO,SAAL,CAAe,CAAf,EAAkBtwU,EAA7B,CADX;AAAA,UAEMqxB,CAAC,GAAGyhT,MAAM,CAAClxI,OAAP,CAAe6C,MAFzB;AAGA,QAAIpzK,CAAJ,EAAOA,CAAC,CAAC3hC,GAAF,CAAM+0M,MAAN;;AAEP/4K,IAAAA,EAAE,CAACu3M,aAAH,GAAmB,MAAMtoH,GAAG,CAACw0G,MAAJ,CAAW2jH,MAAX,CAAzB;;AAEA,WAAOpnT,EAAP;AACD,GATD;AAUD;AACD;AACA;AACA;;;AAGA,SAASsmT,UAAT,GAAsB;AACpB,SAAOvlH,qBAAP;AACD;AAED;AACA;AACA;;;AAEA,SAASikH,WAAT,CAAsBlqO,IAAtB,EAA4B;AAC1B,MAAImU,GAAG,GAAG,IAAV;AAAA,MACIzyG,MAAM,GAAGs+F,IAAI,CAACt+F,MAAL,IAAe,IAAf,GAAsByyG,GAAG,CAACo4N,eAAJ,CAAoBvsO,IAAI,CAACt+F,MAAzB,CAAtB,GAAyD+5G,SADtE;AAAA,MAEI0zD,MAAM,GAAGnvE,IAAI,CAACmvE,MAAL,IAAe,IAAf,GAAsBh7D,GAAG,CAAC9qH,GAAJ,CAAQ22G,IAAI,CAACmvE,MAAb,CAAtB,GAA6C1zD,SAF1D;AAAA,MAGIr1H,IAHJ;;AAKA,MAAI45G,IAAI,CAAC3jD,MAAT,EAAiB;AACf8yH,IAAAA,MAAM,GAAGh7D,GAAG,CAAC+rE,MAAJ,CAAWlgF,IAAI,CAAC3jD,MAAhB,EAAwB2jD,IAAI,CAACx5F,IAA7B,EAAmC9E,MAAnC,CAAT;AACD,GAFD,MAEO,IAAIs+F,IAAI,CAACugG,KAAT,EAAgB;AACrBn6M,IAAAA,IAAI,GAAG45G,IAAI,CAACugG,KAAL,CAAWvwM,GAAX,CAAekd,CAAC,IAAIinG,GAAG,CAAC9qH,GAAJ,CAAQ6jB,CAAR,CAApB,CAAP;AACAiiK,IAAAA,MAAM,GAAG/oL,IAAI,CAAC,CAAD,CAAJ,CAAQm6M,KAAR,CAAc35M,KAAd,CAAoBR,IAAI,CAAC,CAAD,CAAxB,EAA6BA,IAAI,CAACwJ,KAAL,CAAW,CAAX,CAA7B,CAAT;AACD;;AAED,MAAIowG,IAAI,CAAC8pH,OAAT,EAAkB;AAChB1jO,IAAAA,IAAI,GAAG45G,IAAI,CAAC8pH,OAAL,CAAa95N,GAAb,CAAiBkd,CAAC,IAAIinG,GAAG,CAAC9qH,GAAJ,CAAQ6jB,CAAR,CAAtB,CAAP;AACAiiK,IAAAA,MAAM,GAAGA,MAAM,CAAC26C,OAAP,CAAe1jO,IAAI,CAAC,CAAD,CAAnB,EAAwBA,IAAI,CAAC,CAAD,CAA5B,CAAT;AACD;;AAED,MAAI45G,IAAI,CAACt+F,MAAT,EAAiB;AACfytK,IAAAA,MAAM,GAAGA,MAAM,CAACztK,MAAP,CAAcA,MAAd,CAAT;AACD;;AAED,MAAIs+F,IAAI,CAAC2pH,QAAL,IAAiB,IAArB,EAA2B;AACzBx6C,IAAAA,MAAM,GAAGA,MAAM,CAACw6C,QAAP,CAAgB,CAAC3pH,IAAI,CAAC2pH,QAAtB,CAAT;AACD;;AAED,MAAI3pH,IAAI,CAAC2d,QAAL,IAAiB,IAArB,EAA2B;AACzBwxD,IAAAA,MAAM,GAAGA,MAAM,CAACxxD,QAAP,CAAgB,CAAC3d,IAAI,CAAC2d,QAAtB,CAAT;AACD;;AAED,MAAIwxD,MAAM,IAAI,IAAd,EAAoB;AAClB,yBAAM,gCAAgC3mI,IAAI,CAACE,SAAL,CAAes3D,IAAf,CAAtC;AACD;;AAED,MAAIA,IAAI,CAACupH,OAAT,EAAkBp6C,MAAM,CAACo6C,OAAP,CAAe,IAAf;AAClBp1G,EAAAA,GAAG,CAACg7D,MAAJ,CAAWnvE,IAAX,EAAiBmvE,MAAjB;AACD;AAED;AACA;AACA;;;AAEA,SAASg7J,WAAT,CAAsBnqO,IAAtB,EAA4B;AAC1B,MAAImU,GAAG,GAAG,IAAV;AAAA,MACIq4N,KAAK,GAAG,wBAASA,KAAK,GAAGxsO,IAAI,CAAC3jD,MAAtB,IAAgCmwR,KAAK,CAACf,IAAtC,GAA6Ce,KADzD;AAAA,MAEInwR,MAAM,GAAG83D,GAAG,CAAC9qH,GAAJ,CAAQmjV,KAAR,CAFb;AAAA,MAGI1vS,MAAM,GAAG,IAHb;AAAA,MAII24C,MAAM,GAAGuqB,IAAI,CAACvqB,MAJlB;AAAA,MAKI7rF,MAAM,GAAG6xH,SALb;AAMA,MAAI,CAACp/D,MAAL,EAAa,qBAAM,yBAAyB2jD,IAAI,CAAC3jD,MAApC;AACbvf,EAAAA,MAAM,GAAGkjE,IAAI,CAACljE,MAAL,IAAekjE,IAAI,CAACljE,MAAL,CAAY6sS,KAA3B,GAAmCx1N,GAAG,CAACo4N,eAAJ,CAAoBvsO,IAAI,CAACljE,MAAL,CAAY6sS,KAAhC,CAAnC,GAA4Ex1N,GAAG,CAAC9qH,GAAJ,CAAQ22G,IAAI,CAACljE,MAAb,CAArF;;AAEA,MAAI24C,MAAM,IAAIA,MAAM,CAACk0P,KAArB,EAA4B;AAC1B,QAAIl0P,MAAM,CAACo0P,OAAX,EAAoB;AAClBjgV,MAAAA,MAAM,GAAGuqH,GAAG,CAAC42N,eAAJ,CAAoBt1P,MAAM,CAACo0P,OAA3B,CAAT;AACD;;AAEDp0P,IAAAA,MAAM,GAAG0+B,GAAG,CAACs4N,iBAAJ,CAAsBh3P,MAAM,CAACk0P,KAA7B,CAAT;AACD;;AAEDx1N,EAAAA,GAAG,CAAC1+B,MAAJ,CAAWuqB,IAAX,EAAiB3jD,MAAjB,EAAyBvf,MAAzB,EAAiC24C,MAAjC,EAAyC7rF,MAAzC;AACD;;AAED,MAAM89N,IAAI,GAAG;AACXj0C,EAAAA,IAAI,EAAE;AADK,CAAb;;AAGA,SAASi5J,QAAT,CAAkBxvQ,OAAlB,EAA2B;AACzB,MAAIi3C,GAAG,GAAG,IAAV;AAAA,MACIlsG,KAAK,GAAG,EADZ;;AAGA,MAAIi1D,OAAO,CAACk+H,OAAZ,EAAqB;AACnB,QAAIA,OAAO,GAAGnzL,KAAK,CAACmzL,OAAN,GAAgB,EAA9B;AACA9xM,IAAAA,MAAM,CAACof,IAAP,CAAYyrG,GAAG,CAACinF,OAAhB,EAAyB/wM,OAAzB,CAAiCG,GAAG,IAAI;AACtC,YAAM06B,EAAE,GAAGivF,GAAG,CAACinF,OAAJ,CAAY5wM,GAAZ,CAAX;;AAEA,UAAI0yE,OAAO,CAACk+H,OAAR,CAAgB5wM,GAAhB,EAAqB06B,EAArB,CAAJ,EAA8B;AAC5Bk2K,QAAAA,OAAO,CAAC5wM,GAAD,CAAP,GAAe06B,EAAE,CAAC37B,KAAlB;AACD;AACF,KAND;AAOD;;AAED,MAAI2zE,OAAO,CAAC3nE,IAAZ,EAAkB;AAChB,QAAIA,IAAI,GAAG0S,KAAK,CAAC1S,IAAN,GAAa,EAAxB;AACAjM,IAAAA,MAAM,CAACof,IAAP,CAAYyrG,GAAG,CAAC5+G,IAAhB,EAAsBlL,OAAtB,CAA8BG,GAAG,IAAI;AACnC,YAAM2+I,OAAO,GAAGh1B,GAAG,CAAC5+G,IAAJ,CAAS/K,GAAT,CAAhB;;AAEA,UAAI0yE,OAAO,CAAC3nE,IAAR,CAAa/K,GAAb,EAAkB2+I,OAAlB,CAAJ,EAAgC;AAC9B5zI,QAAAA,IAAI,CAAC/K,GAAD,CAAJ,GAAY2+I,OAAO,CAAC53H,KAAR,CAAchoB,KAA1B;AACD;AACF,KAND;AAOD;;AAED,MAAI4qH,GAAG,CAACw4N,UAAJ,IAAkBzvQ,OAAO,CAACmvG,OAAR,KAAoB,KAA1C,EAAiD;AAC/CpkK,IAAAA,KAAK,CAAC0kU,UAAN,GAAmBx4N,GAAG,CAACw4N,UAAJ,CAAe38U,GAAf,CAAmBmkH,GAAG,IAAIA,GAAG,CAACu4N,QAAJ,CAAaxvQ,OAAb,CAA1B,CAAnB;AACD;;AAED,SAAOj1D,KAAP;AACD;;AACD,SAAS2kU,QAAT,CAAkB3kU,KAAlB,EAAyB;AACvB,MAAIksG,GAAG,GAAG,IAAV;AAAA,MACI0xG,EAAE,GAAG1xG,GAAG,CAAC01G,QADb;AAAA,MAEIt0N,IAAI,GAAG0S,KAAK,CAAC1S,IAFjB;AAAA,MAGI6lM,OAAO,GAAGnzL,KAAK,CAACmzL,OAHpB;AAIA9xM,EAAAA,MAAM,CAACof,IAAP,CAAY0yL,OAAO,IAAI,EAAvB,EAA2B/wM,OAA3B,CAAmCG,GAAG,IAAI;AACxCq7N,IAAAA,EAAE,CAACpwI,MAAH,CAAU0+B,GAAG,CAACinF,OAAJ,CAAY5wM,GAAZ,CAAV,EAA4B4wM,OAAO,CAAC5wM,GAAD,CAAnC,EAA0Ck9N,IAA1C;AACD,GAFD;AAGAp+N,EAAAA,MAAM,CAACof,IAAP,CAAYnT,IAAI,IAAI,EAApB,EAAwBlL,OAAxB,CAAgCG,GAAG,IAAI;AACrCq7N,IAAAA,EAAE,CAACkB,KAAH,CAAS5yG,GAAG,CAAC5+G,IAAJ,CAAS/K,GAAT,EAAc+mB,KAAvB,EAA8Bs0M,EAAE,CAACW,SAAH,GAAe9sJ,MAAf,CAAsBihI,gBAAtB,EAA8BisB,MAA9B,CAAqCrxN,IAAI,CAAC/K,GAAD,CAAzC,CAA9B;AACD,GAFD;AAGA,GAACyd,KAAK,CAAC0kU,UAAN,IAAoB,EAArB,EAAyBtiV,OAAzB,CAAiC,CAACwiV,QAAD,EAAWtmV,CAAX,KAAiB;AAChD,UAAM+lV,MAAM,GAAGn4N,GAAG,CAACw4N,UAAJ,CAAepmV,CAAf,CAAf;AACA,QAAI+lV,MAAJ,EAAYA,MAAM,CAACM,QAAP,CAAgBC,QAAhB;AACb,GAHD;AAID;AAED;AACA;AACA;AACA;AACA;;;AAEA,SAASt0K,OAAT,CAAkBstD,EAAlB,EAAsB4I,UAAtB,EAAkCwzG,SAAlC,EAA6Ch1U,IAA7C,EAAmD;AACjD,SAAO,IAAI6/U,OAAJ,CAAYjnH,EAAZ,EAAgB4I,UAAhB,EAA4BwzG,SAA5B,EAAuCh1U,IAAvC,CAAP;AACD;;AAED,SAAS6/U,OAAT,CAAiBjnH,EAAjB,EAAqB4I,UAArB,EAAiCwzG,SAAjC,EAA4Ch1U,IAA5C,EAAkD;AAChD,OAAK48N,QAAL,GAAgBhE,EAAhB;AACA,OAAK4I,UAAL,GAAkBA,UAAlB;AACA,OAAKvuC,MAAL,GAAc2lC,EAAE,CAAC3lC,MAAH,CAAUtvD,IAAV,CAAei1F,EAAf,CAAd;AACA,OAAK54N,IAAL,GAAYA,IAAI,IAAI29U,iBAApB,EAAuC,KAAKxvI,OAAL,GAAe,EAAtD;AACA,OAAKstD,MAAL,GAAc,EAAd;AACA,OAAKruH,KAAL,GAAa,EAAb;AACA,OAAK9kI,IAAL,GAAY,EAAZ;AACA,OAAKiV,EAAL,GAAU,EAAV;;AAEA,MAAIy3T,SAAJ,EAAe;AACb,SAAKA,SAAL,GAAiB34U,MAAM,CAAC60L,MAAP,CAAc8jJ,SAAd,CAAjB;AACA,SAAKA,SAAL,CAAe1pK,OAAf,GAAyB,IAAzB;AACD;AACF;;AAED,SAASw0K,UAAT,CAAoB54N,GAApB,EAAyB;AACvB,OAAK01G,QAAL,GAAgB11G,GAAG,CAAC01G,QAApB;AACA,OAAK4E,UAAL,GAAkBt6G,GAAG,CAACs6G,UAAtB;AACA,OAAKvuC,MAAL,GAAc/rE,GAAG,CAAC+rE,MAAlB;AACA,OAAKjzL,IAAL,GAAYknH,GAAG,CAAClnH,IAAhB;AACA,OAAKmuM,OAAL,GAAe9xM,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAACinF,OAAlB,CAAf;AACA,OAAKstD,MAAL,GAAcp/P,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAACu0I,MAAlB,CAAd;AACA,OAAKruH,KAAL,GAAa/wI,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAACkmB,KAAlB,CAAb;AACA,OAAK9kI,IAAL,GAAYjM,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAAC5+G,IAAlB,CAAZ;AACA,OAAKiV,EAAL,GAAUlhB,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAAC3pG,EAAlB,CAAV;;AAEA,MAAI2pG,GAAG,CAAC8tN,SAAR,EAAmB;AACjB,SAAKA,SAAL,GAAiB34U,MAAM,CAAC60L,MAAP,CAAchqE,GAAG,CAAC8tN,SAAlB,CAAjB;AACA,SAAKA,SAAL,CAAe1pK,OAAf,GAAyB,IAAzB;AACD;AACF;;AAEDu0K,OAAO,CAACnmV,SAAR,GAAoBomV,UAAU,CAACpmV,SAAX,GAAuB;AACzC8kO,EAAAA,IAAI,GAAG;AACL,UAAMt3G,GAAG,GAAG,IAAI44N,UAAJ,CAAe,IAAf,CAAZ;AACA,KAAC,KAAKJ,UAAL,KAAoB,KAAKA,UAAL,GAAkB,EAAtC,CAAD,EAA4CnmV,IAA5C,CAAiD2tH,GAAjD;AACA,WAAOA,GAAP;AACD,GALwC;;AAOzCw0G,EAAAA,MAAM,CAACx0G,GAAD,EAAM;AACV,SAAKw4N,UAAL,GAAkB,KAAKA,UAAL,CAAgBjrU,MAAhB,CAAuB1O,CAAC,IAAIA,CAAC,KAAKmhH,GAAlC,CAAlB,CADU,CACgD;AAC1D;;AAEA,UAAMzrG,IAAI,GAAGpf,MAAM,CAACof,IAAP,CAAYyrG,GAAG,CAACkmB,KAAhB,CAAb;;AAEA,SAAK,MAAM7vI,GAAX,IAAkBke,IAAlB,EAAwByrG,GAAG,CAACkmB,KAAJ,CAAU7vI,GAAV,EAAe29N,QAAf,GAA0B,IAA1B;;AAExB,SAAK,MAAM39N,GAAX,IAAkBke,IAAlB,EAAwByrG,GAAG,CAACkmB,KAAJ,CAAU7vI,GAAV,EAAem+N,MAAf;;AAExBx0G,IAAAA,GAAG,CAACkmB,KAAJ,GAAY,IAAZ;AACD,GAlBwC;;AAoBzChxI,EAAAA,GAAG,CAACmQ,EAAD,EAAK;AACN,WAAO,KAAK6gI,KAAL,CAAW7gI,EAAX,CAAP;AACD,GAtBwC;;AAwBzCtQ,EAAAA,GAAG,CAACsQ,EAAD,EAAK8X,IAAL,EAAW;AACZ,WAAO,KAAK+oH,KAAL,CAAW7gI,EAAX,IAAiB8X,IAAxB;AACD,GA1BwC;;AA4BzCpK,EAAAA,GAAG,CAAC84F,IAAD,EAAO96E,EAAP,EAAW;AACZ,UAAMivF,GAAG,GAAG,IAAZ;AAAA,UACM0xG,EAAE,GAAG1xG,GAAG,CAAC01G,QADf;AAAA,UAEMt0N,IAAI,GAAGyqG,IAAI,CAACz2G,KAFlB;AAGA4qH,IAAAA,GAAG,CAACjrH,GAAJ,CAAQ82G,IAAI,CAACxmG,EAAb,EAAiB0rB,EAAjB;;AAEA,QAAIulT,SAAS,CAACzqO,IAAI,CAACx5F,IAAN,CAAT,IAAwBjR,IAA5B,EAAkC;AAChC,UAAIA,IAAI,CAACy3U,OAAT,EAAkB;AAChBnnH,QAAAA,EAAE,CAACM,MAAH,CAAUjhM,EAAV,EAAc3vB,IAAI,CAACy3U,OAAnB,EAA4Bz3U,IAAI,CAAC03U,OAAjC;AACD,OAFD,MAEO,IAAI13U,IAAI,CAAC23U,QAAT,EAAmB;AACxBrnH,QAAAA,EAAE,CAACsE,OAAH,CAAWjlM,EAAX,EAAe3vB,IAAI,CAAC23U,QAApB,EAA8B33U,IAAI,CAAC03U,OAAnC;AACD,OAFM,MAEA;AACLpnH,QAAAA,EAAE,CAACkB,KAAH,CAAS7hM,EAAT,EAAa2gM,EAAE,CAACW,SAAH,GAAeI,MAAf,CAAsBrxN,IAAtB,CAAb;AACD;AACF;;AAED,QAAIyqG,IAAI,CAACkqF,IAAT,EAAe;AACb/1E,MAAAA,GAAG,CAAC+1E,IAAJ,GAAWhlK,EAAX;AACD;;AAED,QAAI86E,IAAI,CAACi+F,MAAT,EAAiB;AACf,UAAIpzK,CAAC,GAAGspF,GAAG,CAAC9qH,GAAJ,CAAQ22G,IAAI,CAACi+F,MAAL,CAAYwtI,IAApB,CAAR;;AAEA,UAAI5gT,CAAJ,EAAO;AACLg7L,QAAAA,EAAE,CAACptC,OAAH,CAAW5tJ,CAAX,EAAc,CAAC3F,EAAD,CAAd;AACAA,QAAAA,EAAE,CAACk1D,OAAH,GAAalzE,GAAb,CAAiB2jB,CAAjB;AACD,OAHD,MAGO;AACL,SAACspF,GAAG,CAACg5N,UAAJ,GAAiBh5N,GAAG,CAACg5N,UAAJ,IAAkB,EAApC,EAAwC3mV,IAAxC,CAA6C,MAAM;AACjDqkC,UAAAA,CAAC,GAAGspF,GAAG,CAAC9qH,GAAJ,CAAQ22G,IAAI,CAACi+F,MAAL,CAAYwtI,IAApB,CAAJ;AACA5lH,UAAAA,EAAE,CAACptC,OAAH,CAAW5tJ,CAAX,EAAc,CAAC3F,EAAD,CAAd;AACAA,UAAAA,EAAE,CAACk1D,OAAH,GAAalzE,GAAb,CAAiB2jB,CAAjB;AACD,SAJD;AAKD;AACF;;AAED,QAAIm1E,IAAI,CAACzmB,MAAT,EAAiB;AACf46B,MAAAA,GAAG,CAACinF,OAAJ,CAAYp7F,IAAI,CAACzmB,MAAjB,IAA2Br0D,EAA3B;AACD;;AAED,QAAI86E,IAAI,CAAC5jG,KAAT,EAAgB;AACd+3G,MAAAA,GAAG,CAACu0I,MAAJ,CAAW1oJ,IAAI,CAAC5jG,KAAhB,IAAyB8oB,EAAzB;AACD;;AAED,QAAI86E,IAAI,CAACzqG,IAAT,EAAe;AACb,WAAK,MAAMzN,IAAX,IAAmBk4G,IAAI,CAACzqG,IAAxB,EAA8B;AAC5B,cAAMA,IAAI,GAAG4+G,GAAG,CAAC5+G,IAAJ,CAASzN,IAAT,MAAmBqsH,GAAG,CAAC5+G,IAAJ,CAASzN,IAAT,IAAiB,EAApC,CAAb;AACAk4G,QAAAA,IAAI,CAACzqG,IAAL,CAAUzN,IAAV,EAAgBuC,OAAhB,CAAwB87Q,IAAI,IAAI5wQ,IAAI,CAAC4wQ,IAAD,CAAJ,GAAajhP,EAA7C;AACD;AACF;AACF,GA7EwC;;AA+EzC/1B,EAAAA,OAAO,GAAG;AACR,KAAC,KAAKg+U,UAAL,IAAmB,EAApB,EAAwB9iV,OAAxB,CAAgCmgB,EAAE,IAAIA,EAAE,EAAxC;AACA,WAAO,KAAK2iU,UAAZ;AACA,WAAO,IAAP;AACD,GAnFwC;;AAqFzCl2I,EAAAA,QAAQ,CAACj3F,IAAD,EAAOvqB,MAAP,EAAe;AACrB,SAAKvuE,GAAL,CAAS84F,IAAT,EAAe,KAAK6pH,QAAL,CAAc3iN,GAAd,CAAkB84F,IAAI,CAACz2G,KAAvB,EAA8BksF,MAA9B,CAAf;AACD,GAvFwC;;AAyFzC+5F,EAAAA,SAAS,CAACxvE,IAAD,EAAOx5F,IAAP,EAAa;AACpB,SAAKU,GAAL,CAAS84F,IAAT,EAAe,KAAK6pH,QAAL,CAAc3iN,GAAd,CAAkB,KAAKunN,UAAL,CAAgB87G,aAAa,CAAC/jU,IAAD,CAA7B,CAAlB,CAAf;AACD,GA3FwC;;AA6FzC2oK,EAAAA,MAAM,CAACnvE,IAAD,EAAOmvE,MAAP,EAAe;AACnB,SAAKjmL,GAAL,CAAS82G,IAAI,CAACxmG,EAAd,EAAkB21K,MAAlB;AACD,GA/FwC;;AAiGzC15F,EAAAA,MAAM,CAACuqB,IAAD,EAAOmvE,MAAP,EAAeryI,MAAf,EAAuB24C,MAAvB,EAA+B7rF,MAA/B,EAAuC;AAC3C,SAAKigO,QAAL,CAAcziO,EAAd,CAAiB+nL,MAAjB,EAAyBryI,MAAzB,EAAiC24C,MAAjC,EAAyC7rF,MAAzC,EAAiDo2G,IAAI,CAAC9iC,OAAtD;AACD,GAnGwC;;AAqGzC;AACA4tQ,EAAAA,kBAAkB,CAAC79U,IAAD,EAAO;AACvB,WAAO,KAAKA,IAAL,CAAUgqM,QAAV,CAAmB,IAAnB,EAAyBhqM,IAAzB,CAAP;AACD,GAxGwC;;AA0GzC0+U,EAAAA,mBAAmB,CAAC1+U,IAAD,EAAO;AACxB,WAAO,KAAKA,IAAL,CAAU49U,SAAV,CAAoB,IAApB,EAA0B59U,IAA1B,CAAP;AACD,GA5GwC;;AA8GzCs/U,EAAAA,eAAe,CAACt/U,IAAD,EAAO;AACpB,WAAO,KAAKA,IAAL,CAAU0+G,KAAV,CAAgB,IAAhB,EAAsB1+G,IAAtB,CAAP;AACD,GAhHwC;;AAkHzCw/U,EAAAA,iBAAiB,CAACx/U,IAAD,EAAO;AACtB,WAAO,KAAKA,IAAL,CAAUg2G,OAAV,CAAkB,IAAlB,EAAwBh2G,IAAxB,CAAP;AACD,GApHwC;;AAsHzCm/U,EAAAA,gBAAgB,CAACr4U,MAAD,EAAS;AACvB,WAAO,KAAK9G,IAAL,CAAU8G,MAAV,CAAiB,IAAjB,EAAuBA,MAAvB,CAAP;AACD,GAxHwC;;AA0HzC;AACA00C,EAAAA,KA3HyC;AA4HzCuhS,EAAAA,aA5HyC;AA6HzCC,EAAAA,uBA7HyC;AA8HzCc,EAAAA,eA9HyC;AA+HzCb,EAAAA,WA/HyC;AAgIzCC,EAAAA,WAhIyC;AAiIzC;AACAuC,EAAAA,QAlIyC;AAmIzCE,EAAAA;AAnIyC,CAA3C;;;;;;;;;ACzhBA;;AACA;;AACA;;AAEe,kBAAS71D,IAAT,EAAe/2K,IAAf,EAAqB/yG,IAArB,EAA2B;AACxC,SAAO,0BAAQ8pR,IAAR,EAActoD,wBAAd,EAA0Bq6G,8BAA1B,EAA2C77U,IAA3C,EAAiDw7C,KAAjD,CAAuDu3D,IAAvD,CAAP;AACD;;;;;;;;;ACND;;AAEO,SAAS5jG,KAAT,CAAetU,IAAf,EAAqB;AAC1B,MAAI4gQ,MAAM,GAAG,KAAKosE,QAAL,CAAcpsE,MAA3B;;AACA,MAAI,CAAC,8BAAeA,MAAf,EAAuB5gQ,IAAvB,CAAL,EAAmC;AACjC,yBAAM,uCAAuCA,IAA7C;AACD;;AACD,SAAO4gQ,MAAM,CAAC5gQ,IAAD,CAAN,CAAayB,KAApB;AACD;;;;;;;;;;;ACRD,IAAI6jV,KAAK,GAAG,OAAZ;AAAA,IACIC,MAAM,GAAG,QADb;AAAA,IAEIl3D,OAAO,GAAG,SAFd;AAAA,IAGIi0D,IAAI,GAAG;AAAC32J,EAAAA,IAAI,EAAE;AAAP,CAHX;;AAKO,SAASkpG,SAAT,CAAmB5F,IAAnB,EAAyBtoR,KAAzB,EAAgC;AACrC,MAAIhB,CAAC,GAAGspR,IAAI,CAACyF,QAAL,EAAR;AAAA,MACI3xP,CAAC,GAAGksP,IAAI,CAAC/zQ,OAAL,EADR;AAEA,SAAOvU,KAAK,IAAIhB,CAAC,IAAIA,CAAC,CAAC2rQ,QAAF,KAAe+c,OAApB,GAA8BtrP,CAAC,CAAC6O,IAAF,GAAS7O,CAAC,CAAC8O,KAAzC,GAAiD,CAArD,CAAZ;AACD;;AAEM,SAASijP,UAAT,CAAoB7F,IAApB,EAA0Bv6P,MAA1B,EAAkC;AACvC,MAAI/uB,CAAC,GAAGspR,IAAI,CAACyF,QAAL,EAAR;AAAA,MACI3xP,CAAC,GAAGksP,IAAI,CAAC/zQ,OAAL,EADR;AAEA,SAAOwZ,MAAM,IAAI/uB,CAAC,IAAIA,CAAC,CAAC2rQ,QAAF,KAAe+c,OAApB,GAA8BtrP,CAAC,CAAC2O,GAAF,GAAQ3O,CAAC,CAAC4O,MAAxC,GAAiD,CAArD,CAAb;AACD;;AAEM,SAAS6zS,gBAAT,CAA0Bv2D,IAA1B,EAAgC;AACrC,MAAIhtR,CAAC,GAAGgtR,IAAI,CAACM,QAAb;AAAA,MACIxkO,CAAC,GAAG9oD,CAAC,CAACqjV,KAAD,CADT;AAAA,MAEIt6R,CAAC,GAAG/oD,CAAC,CAACsjV,MAAD,CAFT;AAAA,MAGIxiT,CAAC,GAAG9gC,CAAC,CAACosR,OAAD,CAHT;;AAKA,WAASo3D,SAAT,GAAqB;AACnBx2D,IAAAA,IAAI,CAAC2F,SAAL,GAAiB3F,IAAI,CAACw9C,OAAL,GAAe,CAAhC;AACD,GARoC,CAUrC;;;AACAx9C,EAAAA,IAAI,CAACy2D,YAAL,GAAoBz2D,IAAI,CAAC7vQ,GAAL,CAAS,IAAT,EAClBgG,CAAC,IAAI;AACH6pQ,IAAAA,IAAI,CAAC9N,MAAL,GAAc/7P,CAAC,CAAClf,IAAhB;AACA+oR,IAAAA,IAAI,CAACg+C,UAAL,GAAkBp4C,SAAS,CAAC5F,IAAD,EAAO7pQ,CAAC,CAAClf,IAAT,CAA3B;AACAu/U,IAAAA,SAAS;AACV,GALiB,EAMlB;AAACv/U,IAAAA,IAAI,EAAE6kD;AAAP,GANkB,CAApB,CAXqC,CAoBrC;;AACAkkO,EAAAA,IAAI,CAAC02D,aAAL,GAAqB12D,IAAI,CAAC7vQ,GAAL,CAAS,IAAT,EACnBgG,CAAC,IAAI;AACH6pQ,IAAAA,IAAI,CAAC7N,OAAL,GAAeh8P,CAAC,CAAClf,IAAjB;AACA+oR,IAAAA,IAAI,CAACi+C,WAAL,GAAmBp4C,UAAU,CAAC7F,IAAD,EAAO7pQ,CAAC,CAAClf,IAAT,CAA7B;AACAu/U,IAAAA,SAAS;AACV,GALkB,EAMnB;AAACv/U,IAAAA,IAAI,EAAE8kD;AAAP,GANmB,CAArB,CArBqC,CA8BrC;;AACA,MAAI46R,aAAa,GAAG32D,IAAI,CAAC7vQ,GAAL,CAAS,IAAT,EAAeqmU,SAAf,EAA0B;AAACj1U,IAAAA,GAAG,EAAEuyB;AAAN,GAA1B,CAApB,CA/BqC,CAiCrC;;AACAksP,EAAAA,IAAI,CAACy2D,YAAL,CAAkBz9U,IAAlB,GAAyB8iD,CAAC,CAAC9iD,IAAF,GAAS,CAAlC;AACAgnR,EAAAA,IAAI,CAAC02D,aAAL,CAAmB19U,IAAnB,GAA0B+iD,CAAC,CAAC/iD,IAAF,GAAS,CAAnC;AACA29U,EAAAA,aAAa,CAAC39U,IAAd,GAAqB86B,CAAC,CAAC96B,IAAF,GAAS,CAA9B;AACD;;AAEM,SAAS49U,UAAT,CAAoBhxD,SAApB,EAA+BC,UAA/B,EAA2CnuR,KAA3C,EAAkD+tB,MAAlD,EAA0DirP,MAA1D,EAAkEsR,IAAlE,EAAwE;AAC7E,OAAK9sD,QAAL,CAAc8qD,IAAI,IAAI;AACpB,QAAIwmC,KAAK,GAAG,CAAZ,CADoB,CAGpB;;AACAxmC,IAAAA,IAAI,CAAC2F,SAAL,GAAiB,CAAjB,CAJoB,CAMpB;;AACA,QAAI3F,IAAI,CAACtoR,KAAL,OAAiBA,KAArB,EAA4B;AAC1B8uT,MAAAA,KAAK,GAAG,CAAR;AACAxmC,MAAAA,IAAI,CAACx9L,MAAL,CAAY6zP,KAAZ,EAAmB3+U,KAAnB,EAA0B27U,IAA1B,EAF0B,CAEO;;AACjCrzD,MAAAA,IAAI,CAACy2D,YAAL,CAAkB/5J,IAAlB,CAAuB,IAAvB,EAH0B,CAGI;;AAC/B,KAXmB,CAapB;;;AACA,QAAIsjG,IAAI,CAACv6P,MAAL,OAAkBA,MAAtB,EAA8B;AAC5B+gS,MAAAA,KAAK,GAAG,CAAR;AACAxmC,MAAAA,IAAI,CAACx9L,MAAL,CAAY8zP,MAAZ,EAAoB7wT,MAApB,EAA4B4tT,IAA5B,EAF4B,CAEO;;AACnCrzD,MAAAA,IAAI,CAAC02D,aAAL,CAAmBh6J,IAAnB,CAAwB,IAAxB,EAH4B,CAGG;;AAChC,KAlBmB,CAoBpB;;;AACA,QAAIsjG,IAAI,CAACg+C,UAAL,KAAoBp4C,SAAxB,EAAmC;AACjC5F,MAAAA,IAAI,CAACw9C,OAAL,GAAe,CAAf;AACAx9C,MAAAA,IAAI,CAACg+C,UAAL,GAAkBp4C,SAAlB;AACD,KAxBmB,CA0BpB;;;AACA,QAAI5F,IAAI,CAACi+C,WAAL,KAAqBp4C,UAAzB,EAAqC;AACnC7F,MAAAA,IAAI,CAACw9C,OAAL,GAAe,CAAf;AACAx9C,MAAAA,IAAI,CAACi+C,WAAL,GAAmBp4C,UAAnB;AACD,KA9BmB,CAgCpB;;;AACA,QAAI7F,IAAI,CAAC3O,OAAL,CAAa,CAAb,MAAoBX,MAAM,CAAC,CAAD,CAA1B,IAAiCsP,IAAI,CAAC3O,OAAL,CAAa,CAAb,MAAoBX,MAAM,CAAC,CAAD,CAA/D,EAAoE;AAClEsP,MAAAA,IAAI,CAACw9C,OAAL,GAAe,CAAf;AACAx9C,MAAAA,IAAI,CAAC3O,OAAL,GAAeX,MAAf;AACD,KApCmB,CAsCpB;;;AACA,QAAI81C,KAAJ,EAAWxmC,IAAI,CAAC7wR,GAAL,CAAS,OAAT;AACX,QAAI6yR,IAAJ,EAAUhC,IAAI,CAAC9qD,QAAL,CAAcxzN,CAAC,IAAIA,CAAC,CAAC0hL,MAAF,EAAnB;AACX,GAzCD,EAyCG,KAzCH,EAyCU,CAzCV;AA0CD;;;;;;;;;;ACnGD;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASuyJ,QAAT,CAAkBxvQ,OAAlB,EAA2B;AAChC,SAAO,KAAK43P,QAAL,CAAc4X,QAAd,CAAuBxvQ,OAAO,IAAI;AACvC3nE,IAAAA,IAAI,EAAKq4U,QAD8B;AAEvCxyI,IAAAA,OAAO,EAAEyyI,UAF8B;AAGvCxhK,IAAAA,OAAO,EAAE;AAH8B,GAAlC,CAAP;AAKD;;AAED,SAASuhK,QAAT,CAAkB9lV,IAAlB,EAAwByN,IAAxB,EAA8B;AAC5B,SAAOA,IAAI,CAAC+xN,QAAL,IACA,uBAAQ/xN,IAAI,CAACgc,KAAL,CAAWhoB,KAAnB,CADA,IAEAzB,IAAI,CAAC67B,OAAL,CAAa,UAAb,CAFP;AAGD;;AAED,SAASkqT,UAAT,CAAoB/lV,IAApB,EAA0Bo9B,EAA1B,EAA8B;AAC5B,SAAO,EAAEp9B,IAAI,KAAK,QAAT,IAAqBo9B,EAAE,YAAYupM,yBAAWq/G,KAAhD,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASlB,QAAT,CAAkB3kU,KAAlB,EAAyB;AAC9B,OAAKmlN,QAAL,CAAc,IAAd,EACE30N,CAAC,IAAI;AAAEA,IAAAA,CAAC,CAACmvU,QAAF,GAAa,KAAb;;AAAoBnvU,IAAAA,CAAC,CAACq8T,QAAF,CAAW8X,QAAX,CAAoB3kU,KAApB;AAA6B,GAD1D,EAEExP,CAAC,IAAI;AAAEA,IAAAA,CAAC,CAACmvU,QAAF,GAAa,IAAb;AAAoB,GAF7B;AAIA,SAAO,IAAP;AACD;;;;;;;;;ACjDD;;AAEe,kBAASzqQ,QAAT,EAAmBugI,KAAnB,EAA0B;AACvC,WAASw9G,IAAT,CAAcF,OAAd,EAAuB;AACrB79O,IAAAA,QAAQ,CAAC;AAAC4wQ,MAAAA,SAAS,EAAE1xQ,IAAI,CAAC7oE,GAAL,EAAZ;AAAwBwnT,MAAAA,OAAO,EAAEA;AAAjC,KAAD,CAAR;AACD;;AACD,OAAK2b,OAAL,CAAanwU,IAAb,CAAkB,uBAAS00T,IAAT,EAAex9G,KAAf,CAAlB;AACD;;;;;;;;;ACPD;;AAEe,kBAASz6F,OAAT,EAAkB0I,KAAlB,EAAyBx9F,IAAzB,EAA+B5kB,KAA/B,EAAsC;AACnD,MAAIm9Q,EAAE,GAAGzjK,OAAO,CAACrmE,OAAR,EAAT;AACA,MAAI8pO,EAAJ,EAAQA,EAAE,CAACjlB,YAAH,CAAgB,OAAhB,EAAyBusF,aAAa,CAACzkV,KAAD,CAAtC;AACT;;AAED,SAASykV,aAAT,CAAuBzkV,KAAvB,EAA8B;AAC5B,SAAOA,KAAK,IAAI,IAAT,GAAgB,EAAhB,GACH,uBAAQA,KAAR,IAAiB0kV,WAAW,CAAC1kV,KAAD,CAA5B,GACA,wBAASA,KAAT,KAAmB,CAAC,sBAAOA,KAAP,CAApB,GAAoC2kV,YAAY,CAAC3kV,KAAD,CAAhD,GACAA,KAAK,GAAG,EAHZ;AAID;;AAED,SAAS2kV,YAAT,CAAsBlnU,GAAtB,EAA2B;AACzB,SAAO1d,MAAM,CAACof,IAAP,CAAY1B,GAAZ,EAAiBhX,GAAjB,CAAqBxF,GAAG,IAAI;AACjC,QAAIiO,CAAC,GAAGuO,GAAG,CAACxc,GAAD,CAAX;AACA,WAAOA,GAAG,GAAG,IAAN,IAAc,uBAAQiO,CAAR,IAAaw1U,WAAW,CAACx1U,CAAD,CAAxB,GAA8BqsM,WAAW,CAACrsM,CAAD,CAAvD,CAAP;AACD,GAHM,EAGJtO,IAHI,CAGC,IAHD,CAAP;AAID;;AAED,SAAS8jV,WAAT,CAAqB1kV,KAArB,EAA4B;AAC1B,SAAO,MAAMA,KAAK,CAACyG,GAAN,CAAU80M,WAAV,EAAuB36M,IAAvB,CAA4B,IAA5B,CAAN,GAA0C,GAAjD;AACD;;AAED,SAAS26M,WAAT,CAAqBv7M,KAArB,EAA4B;AAC1B,SAAO,uBAAQA,KAAR,IAAiB,UAAjB,GACH,wBAASA,KAAT,KAAmB,CAAC,sBAAOA,KAAP,CAApB,GAAoC,UAApC,GACAA,KAFJ;AAGD;;;;;;;;;AC7BD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAGA;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS4kV,IAAT,CAAcnuO,IAAd,EAAoB9iC,OAApB,EAA6B;AAC1C,QAAM65M,IAAI,GAAG,IAAb;AACA75M,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;;AAEA+wJ,yBAAS5oO,IAAT,CAAc0xR,IAAd;;AACA,MAAI75M,OAAO,CAACuoJ,MAAZ,EAAoBsxD,IAAI,CAACtxD,MAAL,CAAYvoJ,OAAO,CAACuoJ,MAApB;AACpB,MAAIvoJ,OAAO,CAACloE,MAAZ,EAAoB+hR,IAAI,CAAC/hR,MAAL,CAAYkoE,OAAO,CAACloE,MAApB;AACpB,MAAIkoE,OAAO,CAACgxJ,QAAR,IAAoB,IAAxB,EAA8B6oD,IAAI,CAAC7oD,QAAL,CAAchxJ,OAAO,CAACgxJ,QAAtB;;AAC9B,MAAIhxJ,OAAO,CAACozI,MAAR,IAAkBtwG,IAAI,CAACswG,MAA3B,EAAmC;AACjC,UAAMr3M,GAAG,GAAG,sBAAO,EAAP,EAAW+mG,IAAI,CAACswG,MAAhB,EAAwBpzI,OAAO,CAACozI,MAAhC,CAAZ;AACAymE,IAAAA,IAAI,CAACzmE,MAAL,CAAY,wBAAOr3M,GAAG,CAACspM,MAAX,EAAmBtpM,GAAG,CAAC3D,IAAvB,CAAZ;AACD;;AAEDyhR,EAAAA,IAAI,CAAC9O,GAAL,GAAW,IAAX;AACA8O,EAAAA,IAAI,CAAC6gD,OAAL,GAAe,IAAf;AACA7gD,EAAAA,IAAI,CAAC4gD,WAAL,GAAmBz6P,OAAO,CAAC07L,QAAR,IAAoB+a,2BAAWH,MAAlD;AACAuD,EAAAA,IAAI,CAACkhD,WAAL,GAAmB,IAAIhyD,0BAAJ,EAAnB;AACA,QAAM/7E,IAAI,GAAG6sF,IAAI,CAACkhD,WAAL,CAAiB/tI,IAA9B,CAjB0C,CAmB1C;;AACA6sF,EAAAA,IAAI,CAACm+C,SAAL,GAAiB,IAAjB;AACAn+C,EAAAA,IAAI,CAAChP,QAAL,GAAgB7qM,OAAO,CAACyrM,OAAR,IAAmBX,gBAAnC,EACA+O,IAAI,CAAC3J,OAAL,GAAe,IADf;AAEA2J,EAAAA,IAAI,CAACo+C,QAAL,GAAgB,IAAIjqD,6BAAJ,GAAoBlN,KAApB,CAA0B9zE,IAA1B,CAAhB;AACA6sF,EAAAA,IAAI,CAACq3D,aAAL,GAAqB,KAArB;AACAr3D,EAAAA,IAAI,CAACs3D,eAAL,GAAuB,KAAvB;AACAt3D,EAAAA,IAAI,CAAC4/C,OAAL,GAAe,EAAf;AACA5/C,EAAAA,IAAI,CAACq/C,eAAL,GAAuB,EAAvB;AACAr/C,EAAAA,IAAI,CAACq+C,gBAAL,GAAwB,EAAxB,CA5B0C,CA8B1C;;AACAr+C,EAAAA,IAAI,CAACk/C,YAAL,GAAoB,mCAAsBj2N,IAAI,CAAC+pO,WAA3B,CAApB;AACAhzD,EAAAA,IAAI,CAAC69C,YAAL,CAAkB79C,IAAI,CAACk/C,YAAL,CAAkBrB,YAApC,EAhC0C,CAkC1C;;AACA,QAAMzgN,GAAG,GAAG,sBAAQ4iK,IAAR,EAAc/2K,IAAd,EAAoB9iC,OAAO,CAACjwE,IAA5B,CAAZ;AACA8pR,EAAAA,IAAI,CAAC+9C,QAAL,GAAgB3gN,GAAhB;AACA4iK,EAAAA,IAAI,CAACM,QAAL,GAAgBljK,GAAG,CAACinF,OAApB;AACA27E,EAAAA,IAAI,CAAC8gD,KAAL,GAAa,CAAC73N,IAAI,CAACsuO,QAAL,IAAiB,EAAlB,EAAsBt+U,GAAtB,CAA0Bkd,CAAC,KAAK;AAC3CjF,IAAAA,KAAK,EAAE,IADoC;AAE3CszB,IAAAA,KAAK,EAAE,sBAAO,EAAP,EAAWruB,CAAX;AAFoC,GAAL,CAA3B,CAAb,CAtC0C,CA2C1C;;AACA,MAAIinG,GAAG,CAAC+1E,IAAR,EAAc/1E,GAAG,CAAC+1E,IAAJ,CAAShhM,GAAT,CAAaghM,IAAb;AACdA,EAAAA,IAAI,CAAC7tI,MAAL,GAAc83D,GAAG,CAAC5+G,IAAJ,CAAS20L,IAAT,CAAc34K,KAA5B;AACAwlQ,EAAAA,IAAI,CAAChwD,KAAL,CACE5yG,GAAG,CAAC5+G,IAAJ,CAAS20L,IAAT,CAAc34K,KADhB,EAEEwlQ,IAAI,CAACvwD,SAAL,GAAiBI,MAAjB,CAAwB18B,IAAI,CAACzoF,KAA7B,CAFF,EA9C0C,CAmD1C;;AACAs1K,EAAAA,IAAI,CAAC9N,MAAL,GAAc8N,IAAI,CAACtoR,KAAL,EAAd;AACAsoR,EAAAA,IAAI,CAAC7N,OAAL,GAAe6N,IAAI,CAACv6P,MAAL,EAAf;AACAu6P,EAAAA,IAAI,CAACg+C,UAAL,GAAkB,qBAAUh+C,IAAV,EAAgBA,IAAI,CAAC9N,MAArB,CAAlB;AACA8N,EAAAA,IAAI,CAACi+C,WAAL,GAAmB,sBAAWj+C,IAAX,EAAiBA,IAAI,CAAC7N,OAAtB,CAAnB;AACA6N,EAAAA,IAAI,CAAC3O,OAAL,GAAe,CAAC,CAAD,EAAI,CAAJ,CAAf;AACA2O,EAAAA,IAAI,CAACw9C,OAAL,GAAe,CAAf;AACAx9C,EAAAA,IAAI,CAAC2F,SAAL,GAAiB,CAAjB;AACA,8BAAiB3F,IAAjB,EA3D0C,CA6D1C;;AACA,2BAAWA,IAAX,EA9D0C,CAgE1C;;AACA,uBAAOA,IAAP,EAjE0C,CAmE1C;;AACAA,EAAAA,IAAI,CAACzQ,WAAL,CAAiBtmK,IAAI,CAACsmK,WAAtB,EApE0C,CAsE1C;;AACA,MAAIppM,OAAO,CAACqxQ,KAAZ,EAAmBx3D,IAAI,CAACw3D,KAAL,GAvEuB,CAyE1C;;AACA,MAAIrxQ,OAAO,CAACp2D,SAAZ,EAAuBiwQ,IAAI,CAAC/Q,UAAL,CAAgB9oM,OAAO,CAACp2D,SAAxB,EAAmCo2D,OAAO,CAAC0zD,IAA3C;AACxB;;AAED,SAAS49M,YAAT,CAAsBz3D,IAAtB,EAA4BjvR,IAA5B,EAAkC;AAChC,SAAO,8BAAeivR,IAAI,CAACM,QAApB,EAA8BvvR,IAA9B,IACHivR,IAAI,CAACM,QAAL,CAAcvvR,IAAd,CADG,GAEH,qBAAM,+BAA+B,2BAAYA,IAAZ,CAArC,CAFJ;AAGD;;AAED,SAAS2mV,mBAAT,CAA6BvpT,EAA7B,EAAiC+9E,OAAjC,EAA0C;AACxC,QAAMnwD,CAAC,GAAG,CAAC5tB,EAAE,CAACijM,QAAH,IAAe,EAAhB,EACPzmN,MADO,CACAwjB,EAAE,IAAIA,EAAE,CAAC8iM,OAAH,IAAc9iM,EAAE,CAAC8iM,OAAH,CAAW/kH,OAAX,KAAuBA,OAD3C,CAAV;AAEA,SAAOnwD,CAAC,CAACjtD,MAAF,GAAWitD,CAAC,CAAC,CAAD,CAAZ,GAAkB,IAAzB;AACD;;AAED,SAAS47R,mBAAT,CAA6B33D,IAA7B,EAAmCjvR,IAAnC,EAAyCo9B,EAAzC,EAA6C+9E,OAA7C,EAAsD;AACpD,MAAInwD,CAAC,GAAG27R,mBAAmB,CAACvpT,EAAD,EAAK+9E,OAAL,CAA3B;;AACA,MAAI,CAACnwD,CAAL,EAAQ;AACNA,IAAAA,CAAC,GAAG,mBAAKikO,IAAL,EAAW,MAAM9zK,OAAO,CAACn7G,IAAD,EAAOo9B,EAAE,CAAC37B,KAAV,CAAxB,CAAJ;AACAupD,IAAAA,CAAC,CAACmwD,OAAF,GAAYA,OAAZ;AACA8zK,IAAAA,IAAI,CAAC3vR,EAAL,CAAQ89B,EAAR,EAAY,IAAZ,EAAkB4tB,CAAlB;AACD;;AACD,SAAOikO,IAAP;AACD;;AAED,SAAS43D,sBAAT,CAAgC53D,IAAhC,EAAsC7xP,EAAtC,EAA0C+9E,OAA1C,EAAmD;AACjD,MAAInwD,CAAC,GAAG27R,mBAAmB,CAACvpT,EAAD,EAAK+9E,OAAL,CAA3B;AACA,MAAInwD,CAAJ,EAAO5tB,EAAE,CAACijM,QAAH,CAAYzuJ,MAAZ,CAAmB5mB,CAAnB;AACP,SAAOikO,IAAP;AACD;;AAED,wBAASo3D,IAAT,EAAelgH,sBAAf,EAAyB;AACvB;AAEA,QAAMjjF,QAAN,CAAej3I,MAAf,EAAuBw4N,MAAvB,EAA+BC,OAA/B,EAAwC;AACtC;AACA,UAAMyB,uBAAStnO,SAAT,CAAmBqkJ,QAAnB,CAA4B3lJ,IAA5B,CAAiC,IAAjC,EAAuC0O,MAAvC,EAA+Cw4N,MAA/C,CAAN,CAFsC,CAItC;;AACA,QAAI,KAAK6gD,OAAL,IAAgB,KAAKmnD,OAAzB,EAAkC;AAChC,UAAI;AACF,YAAI,KAAKW,SAAT,EAAoB;AAClB,cAAI,KAAKX,OAAT,EAAkB;AAChB,iBAAKA,OAAL,GAAe,CAAf;AACA,4CAAe,IAAf;AACD;;AACD,gBAAM,KAAKW,SAAL,CAAe1rD,WAAf,CAA2B,KAAKyuD,WAAL,CAAiB/tI,IAA5C,CAAN;AACD;;AACD,aAAKkjF,OAAL,GAAe,KAAf;AACD,OATD,CASE,OAAOnoR,CAAP,EAAU;AACV,aAAK2lB,KAAL,CAAW3lB,CAAX;AACD;AACF,KAlBqC,CAoBtC;;;AACA,QAAIunO,OAAJ,EAAa,iCAAc,IAAd,EAAoBA,OAApB;AAEb,WAAO,IAAP;AACD,GA3BsB;;AA6BvB48C,EAAAA,KAAK,CAACj7P,IAAD,EAAO;AACV,SAAKi/P,OAAL,GAAe,IAAf;AACA,SAAK8nD,SAAL,IAAkB,KAAKA,SAAL,CAAe9rD,KAAf,CAAqBj7P,IAArB,CAAlB;AACD,GAhCsB;;AAkCvB;AAEAm4P,EAAAA,WAAW,CAACrnK,IAAD,EAAO;AAChB,QAAI34G,SAAS,CAACT,MAAd,EAAsB;AACpB,YAAM8gM,IAAI,GAAG1nF,IAAI,IAAI,IAAR,GAAgBA,IAAI,GAAG,EAAvB,GAA6B,IAA1C;AACA,UAAI0nF,IAAI,KAAK,KAAKioJ,KAAlB,EAAyB,qBAAU,KAAK3mE,GAAf,EAAoB,KAAK2mE,KAAL,GAAajoJ,IAAjC;AACzB,aAAO,IAAP;AACD;;AACD,WAAO,KAAKioJ,KAAZ;AACD,GA3CsB;;AA6CvB9nU,EAAAA,SAAS,GAAG;AACV,WAAO,KAAKmhQ,GAAZ;AACD,GA/CsB;;AAiDvBsP,EAAAA,UAAU,GAAG;AACX,WAAO,KAAK0gD,WAAZ;AACD,GAnDsB;;AAqDvBxwD,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKW,OAAL,CAAax4Q,KAAb,EAAP;AACD,GAvDsB;;AAyDvB2pF,EAAAA,MAAM,CAACzxF,IAAD,EAAOyB,KAAP,EAAc2zE,OAAd,EAAuB;AAC3B,QAAIh4C,EAAE,GAAGspT,YAAY,CAAC,IAAD,EAAO1mV,IAAP,CAArB;AACA,WAAOxB,SAAS,CAACT,MAAV,KAAqB,CAArB,GACHq/B,EAAE,CAAC37B,KADA,GAEH,KAAKksF,MAAL,CAAYvwD,EAAZ,EAAgB37B,KAAhB,EAAuB2zE,OAAvB,CAFJ;AAGD,GA9DsB;;AAgEvBzuE,EAAAA,KAAK,CAACye,CAAD,EAAI;AACP,WAAO5mB,SAAS,CAACT,MAAV,GAAmB,KAAK0zF,MAAL,CAAY,OAAZ,EAAqBrsE,CAArB,CAAnB,GAA6C,KAAKqsE,MAAL,CAAY,OAAZ,CAApD;AACD,GAlEsB;;AAoEvB/8D,EAAAA,MAAM,CAACtP,CAAD,EAAI;AACR,WAAO5mB,SAAS,CAACT,MAAV,GAAmB,KAAK0zF,MAAL,CAAY,QAAZ,EAAsBrsE,CAAtB,CAAnB,GAA8C,KAAKqsE,MAAL,CAAY,QAAZ,CAArD;AACD,GAtEsB;;AAwEvBv2E,EAAAA,OAAO,CAACkK,CAAD,EAAI;AACT,WAAO5mB,SAAS,CAACT,MAAV,GACH,KAAK0zF,MAAL,CAAY,SAAZ,EAAuB,sBAAQrsE,CAAR,CAAvB,CADG,GAEH,sBAAQ,KAAKqsE,MAAL,CAAY,SAAZ,CAAR,CAFJ;AAGD,GA5EsB;;AA8EvBijM,EAAAA,QAAQ,CAACtvQ,CAAD,EAAI;AACV,WAAO5mB,SAAS,CAACT,MAAV,GAAmB,KAAK0zF,MAAL,CAAY,UAAZ,EAAwBrsE,CAAxB,CAAnB,GAAgD,KAAKqsE,MAAL,CAAY,UAAZ,CAAvD;AACD,GAhFsB;;AAkFvB4mL,EAAAA,UAAU,CAACjzP,CAAD,EAAI;AACZ,WAAO5mB,SAAS,CAACT,MAAV,GAAmB,KAAK0zF,MAAL,CAAY,YAAZ,EAA0BrsE,CAA1B,CAAnB,GAAkD,KAAKqsE,MAAL,CAAY,YAAZ,CAAzD;AACD,GApFsB;;AAsFvBq/K,EAAAA,QAAQ,CAACpyP,IAAD,EAAO;AACb,QAAI,CAAClgB,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAK8xU,WAAZ;AACvB,QAAI,CAAC,kCAAanxT,IAAb,CAAL,EAAyB,qBAAM,iCAAiCA,IAAvC;;AACzB,QAAIA,IAAI,KAAK,KAAKmxT,WAAlB,EAA+B;AAC7B,WAAKA,WAAL,GAAmBnxT,IAAnB;;AACA,WAAKqoU,cAAL;AACD;;AACD,WAAO,IAAP;AACD,GA9FsB;;AAgGvBlmE,EAAAA,OAAO,CAAC1lK,OAAD,EAAU;AACf,QAAI,CAAC38G,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKkiR,QAAZ;;AACvB,QAAI9kK,OAAO,KAAK,KAAK8kK,QAArB,EAA+B;AAC7B,WAAKA,QAAL,GAAgB9kK,OAAhB;;AACA,WAAK4rO,cAAL;AACD;;AACD,WAAO,IAAP;AACD,GAvGsB;;AAyGvBppH,EAAAA,MAAM,CAACA,MAAD,EAAS;AACb,QAAI,CAACn/N,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKuoO,OAAZ;;AACvB,QAAI3I,MAAM,KAAK,KAAK2I,OAApB,EAA6B;AAC3BH,6BAAStnO,SAAT,CAAmB8+N,MAAnB,CAA0BpgO,IAA1B,CAA+B,IAA/B,EAAqCogO,MAArC;;AACA,WAAKopH,cAAL;AACD;;AACD,WAAO,IAAP;AACD,GAhHsB;;AAkHvB10J,EAAAA,MAAM,GAAG;AACP;AACA,SAAKuiG,SAAL,GAAiB,CAAjB,CAFO,CAGP;;AACA,WAAO,KAAK5zD,KAAL,CAAW0lH,YAAY,CAAC,IAAD,EAAO,UAAP,CAAvB,CAAP;AACD,GAvHsB;;AAyHvBK,EAAAA,cAAc,GAAG;AACf,QAAI,KAAK3Z,SAAT,EAAoB;AAClB,WAAKA,SAAL,GAAiB,IAAjB;AACA,WAAKlvD,UAAL,CAAgB,KAAKiC,GAArB,EAA0B,KAAK2vD,OAA/B;AACD;AACF,GA9HsB;;AAgIvB;AACA/6C,EAAAA,WAAW,EAAE8wD,gBAjIU;;AAmIvB;AAEAr4T,EAAAA,gBAAgB,CAAC9O,IAAD,EAAOy8F,OAAP,EAAgB/lC,OAAhB,EAAyB;AACvC,QAAIC,QAAQ,GAAG8lC,OAAf;;AACA,QAAI,EAAE/lC,OAAO,IAAIA,OAAO,CAAC04P,IAAR,KAAiB,KAA9B,CAAJ,EAA0C;AACxC;AACAz4P,MAAAA,QAAQ,GAAG,mBAAK,IAAL,EAAW8lC,OAAX,CAAX;AACA9lC,MAAAA,QAAQ,CAACgsH,GAAT,GAAelmF,OAAf;AACD;;AACD,SAAKkyN,QAAL,CAAc/tU,EAAd,CAAiBof,IAAjB,EAAuB22D,QAAvB;;AACA,WAAO,IAAP;AACD,GA9IsB;;AAgJvB0wH,EAAAA,mBAAmB,CAACrnL,IAAD,EAAOy8F,OAAP,EAAgB;AACjC,QAAI8xC,QAAQ,GAAG,KAAKogL,QAAL,CAAcpgL,QAAd,CAAuBvuI,IAAvB,CAAf;AAAA,QACIjgB,CAAC,GAAGwuJ,QAAQ,CAAClvJ,MADjB;AAAA,QACyBitD,CADzB;AAAA,QAC4B7oD,CAD5B,CADiC,CAIjC;;;AACA,WAAO,EAAE1D,CAAF,IAAO,CAAd,EAAiB;AACf0D,MAAAA,CAAC,GAAG8qJ,QAAQ,CAACxuJ,CAAD,CAAR,CAAYigB,IAAhB;AACAssC,MAAAA,CAAC,GAAGiiG,QAAQ,CAACxuJ,CAAD,CAAR,CAAY08G,OAAhB;;AACA,UAAIz8F,IAAI,KAAKvc,CAAT,KAAeg5G,OAAO,KAAKnwD,CAAZ,IAAiBmwD,OAAO,KAAKnwD,CAAC,CAACq2I,GAA9C,CAAJ,EAAwD;AACtD,aAAKgsI,QAAL,CAAc5tU,GAAd,CAAkB0C,CAAlB,EAAqB6oD,CAArB;;AACA;AACD;AACF;;AACD,WAAO,IAAP;AACD,GA9JsB;;AAgKvBg8R,EAAAA,iBAAiB,CAAC7rO,OAAD,EAAU;AACzB,QAAI5qG,CAAC,GAAG,KAAK+8T,gBAAb;;AACA,QAAI/8T,CAAC,CAACsrB,OAAF,CAAUs/E,OAAV,IAAqB,CAAzB,EAA4B;AAC1B;AACA;AACA;AACA5qG,MAAAA,CAAC,CAAC7R,IAAF,CAAOy8G,OAAP;AACD;;AACD,WAAO,IAAP;AACD,GAzKsB;;AA2KvB8rO,EAAAA,oBAAoB,CAAC9rO,OAAD,EAAU;AAC5B,QAAI5qG,CAAC,GAAG,KAAK+8T,gBAAb;AAAA,QACI7uU,CAAC,GAAG8R,CAAC,CAACsrB,OAAF,CAAUs/E,OAAV,CADR;;AAEA,QAAI18G,CAAC,IAAI,CAAT,EAAY;AACV8R,MAAAA,CAAC,CAAC0xB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AACD,WAAO,IAAP;AACD,GAlLsB;;AAoLvByoV,EAAAA,iBAAiB,CAAClnV,IAAD,EAAOm7G,OAAP,EAAgB;AAC/B,WAAOyrO,mBAAmB,CAAC,IAAD,EAAO5mV,IAAP,EAAa0mV,YAAY,CAAC,IAAD,EAAO1mV,IAAP,CAAzB,EAAuCm7G,OAAvC,CAA1B;AACD,GAtLsB;;AAwLvBgsO,EAAAA,oBAAoB,CAACnnV,IAAD,EAAOm7G,OAAP,EAAgB;AAClC,WAAO0rO,sBAAsB,CAAC,IAAD,EAAOH,YAAY,CAAC,IAAD,EAAO1mV,IAAP,CAAnB,EAAiCm7G,OAAjC,CAA7B;AACD,GA1LsB;;AA4LvBisO,EAAAA,eAAe,CAACpnV,IAAD,EAAOm7G,OAAP,EAAgB;AAC7B,WAAOyrO,mBAAmB,CAAC,IAAD,EAAO5mV,IAAP,EAAa,mBAAQ,IAAR,EAAcA,IAAd,EAAoB6I,MAAjC,EAAyCsyG,OAAzC,CAA1B;AACD,GA9LsB;;AAgMvBksO,EAAAA,kBAAkB,CAACrnV,IAAD,EAAOm7G,OAAP,EAAgB;AAChC,WAAO0rO,sBAAsB,CAAC,IAAD,EAAO,mBAAQ,IAAR,EAAc7mV,IAAd,EAAoB6I,MAA3B,EAAmCsyG,OAAnC,CAA7B;AACD,GAlMsB;;AAoMvB2xN,EAAAA,YAAY,CAAC1nT,CAAD,EAAI;AACd,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,UAAI,KAAKuoV,aAAL,KAAuB,CAAC,CAAClhU,CAA7B,EAAgC;AAC9B,cAAMwyE,IAAI,GAAG,uBAAU,IAAV,EAAgB,IAAhB,CAAb,CAD8B,CACM;;AACpC,aAAK0uP,aAAL,GAAqB,CAAC,CAAClhU,CAAvB;AACA,YAAIwyE,IAAJ,EAAU,uBAAU,IAAV,EAAgBA,IAAhB,EAHoB,CAGG;AAClC;;AACD,aAAO,IAAP;AACD,KAPD,MAOO;AACL,aAAO,KAAK0uP,aAAZ;AACD;AACF,GA/MsB;;AAiNvB54T,EAAAA,cAAc,CAACtI,CAAD,EAAI;AAChB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKwoV,eAAL,GAAuBnhU,CAAvB;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKmhU,eAAZ;AACD;AACF,GAxNsB;;AA0NvBh5U,EAAAA,KAAK,EAALA,cA1NuB;AA2NvB6qL,EAAAA,MAAM,EAANA,cA3NuB;AA4NvBkvJ,EAAAA,QAAQ,EAARA,iBA5NuB;AA6NvBb,EAAAA,KAAK,EAALA,cA7NuB;AA+NvB;AACAh5U,EAAAA,IAAI,EAAJA,UAhOuB;AAiOvB+nT,EAAAA,MAAM,EAANA,YAjOuB;AAkOvB12F,EAAAA,MAAM,EAANA,YAlOuB;AAmOvBltJ,EAAAA,MAAM,EAANA,YAnOuB;AAqOvB;AACAt9D,EAAAA,KAAK,EAALA,YAtOuB;AAwOvB;AACA4pQ,EAAAA,UAAU,EAAVA,mBAzOuB;AA2OvB;AACAqpE,EAAAA,UAAU,EAAEC,yBA5OW;AA6OvBr5B,EAAAA,QAAQ,EAAEs5B,uBA7Oa;AA8OvBC,EAAAA,KAAK,EAAEC,oBA9OgB;AAgPvB;AACA/C,EAAAA,QAAQ,EAARA,eAjPuB;AAkPvBE,EAAAA,QAAQ,EAARA;AAlPuB,CAAzB;;;;;;;;;;;;;;ACjJA;;;;;;;;;;;;;AEAA;;AAEO,SAASr3U,IAAT,CAAczN,IAAd,EAAoB;AACzB,QAAMyN,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CAAb;AACA,SAAOyN,IAAI,GAAGA,IAAI,CAAC5E,MAAL,CAAYpH,KAAf,GAAuB,EAAlC;AACD;;AAEM,SAASo7U,MAAT,CAAgB78U,IAAhB,EAAsBi0H,KAAtB,EAA6BxyH,KAA7B,EAAoC;AACzC,QAAM8C,KAAK,GAAG,KAAKksK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,EAAwB,WAAWi0H,KAAnC,CAAd;AAAA,QACMtK,KAAK,GAAGplH,KAAK,GAAGA,KAAK,CAAC9C,KAAN,CAAYF,GAAZ,CAAgBE,KAAhB,CAAH,GAA4BkyH,SAD/C;AAEA,SAAOhK,KAAK,GAAGA,KAAK,CAACnzC,KAAT,GAAiBmzC,KAA7B;AACD;;AAEM,SAASmzN,OAAT,CAAiB98U,IAAjB,EAAuBkpK,MAAvB,EAA+B;AACpC,QAAM60D,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,QACMt0N,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CADb;AAAA,QAEMypB,KAAK,GAAGhc,IAAI,CAACgc,KAFnB;AAIAs0M,EAAAA,EAAE,CAACkB,KAAH,CAASx1M,KAAT,EAAgBs0M,EAAE,CAACW,SAAH,GAAe9sJ,MAAf,CAAsBihI,gBAAtB,EAA8BisB,MAA9B,CAAqC51D,MAArC,CAAhB;AACA,SAAO,CAAP;AACD;;;;;;;;;ACpBc,kBAAS7iJ,IAAT,EAAermB,IAAf,EAAqB+8U,MAArB,EAA6B;AAC1C,MAAI12T,IAAJ,EAAU;AACR,UAAM03M,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,UACM/sL,MAAM,GAAG3uB,IAAI,CAACsqP,IAAL,CAAUp8M,MADzB;AAEAwpK,IAAAA,EAAE,CAACkB,KAAH,CAASjqL,MAAT,EAAiB+oL,EAAE,CAACW,SAAH,GAAezyN,MAAf,CAAsBoa,IAAtB,EAA4BrmB,IAA5B,CAAjB;AACD;;AACD,SAAO+8U,MAAM,KAAKppN,SAAX,GAAuBopN,MAAvB,GAAgC12T,IAAvC;AACD;;;;;;;;;;;;;ACPD,MAAMw/J,IAAI,GAAGn2I,MAAM,IAAI,UAASjuC,KAAT,EAAgBy2G,IAAhB,EAAsB;AAC3C,QAAMswG,MAAM,GAAG,KAAK/3C,OAAL,CAAasxD,QAAb,CAAsBvZ,MAAtB,EAAf;AACA,SAAOA,MAAM,CAAC94K,MAAD,CAAN,CAAewoE,IAAf,EAAqBz2G,KAArB,CAAP;AACD,CAHD;;AAKO,MAAMu/G,MAAM,GAAG6kE,IAAI,CAAC,QAAD,CAAnB;;AACA,MAAMy1C,UAAU,GAAGz1C,IAAI,CAAC,YAAD,CAAvB;;AACA,MAAM80C,SAAS,GAAG90C,IAAI,CAAC,WAAD,CAAtB;;AACA,MAAM01C,SAAS,GAAG11C,IAAI,CAAC,WAAD,CAAtB;;AACA,MAAM+0C,QAAQ,GAAG/0C,IAAI,CAAC,UAAD,CAArB;;AAEP,MAAMm3J,OAAO,GAAG,IAAIzoQ,IAAJ,CAAS,IAAT,EAAe,CAAf,EAAkB,CAAlB,CAAhB;;AAEA,SAAS/mE,IAAT,CAAc0+M,KAAd,EAAqBtB,GAArB,EAA0B9C,SAA1B,EAAqC;AACnC,MAAI,CAACj8M,MAAM,CAACC,SAAP,CAAiBogN,KAAjB,CAAD,IAA4B,CAACrgN,MAAM,CAACC,SAAP,CAAiB8+M,GAAjB,CAAjC,EAAwD,OAAO,EAAP;AACxDoyH,EAAAA,OAAO,CAACC,OAAR,CAAgB,IAAhB;AACAD,EAAAA,OAAO,CAAC7wH,QAAR,CAAiBD,KAAjB;AACA8wH,EAAAA,OAAO,CAAClyH,OAAR,CAAgBF,GAAhB;AACA,SAAO0Q,UAAU,CAAC/9N,IAAX,CAAgB,IAAhB,EAAsBy/U,OAAtB,EAA+Bl1H,SAA/B,CAAP;AACD;;AAEM,SAASo1H,WAAT,CAAqBhxH,KAArB,EAA4B;AACjC,SAAO1+M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB2uN,KAAhB,EAAuB,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AAEM,SAASixH,iBAAT,CAA2BjxH,KAA3B,EAAkC;AACvC,SAAO1+M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB2uN,KAAhB,EAAuB,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AAEM,SAASkxH,SAAT,CAAmBxyH,GAAnB,EAAwB;AAC7B,SAAOp9M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB,CAAhB,EAAmB,IAAIqtN,GAAvB,EAA4B,IAA5B,CAAP;AACD;;AAEM,SAASyyH,eAAT,CAAyBzyH,GAAzB,EAA8B;AACnC,SAAOp9M,IAAI,CAACjQ,IAAL,CAAU,IAAV,EAAgB,CAAhB,EAAmB,IAAIqtN,GAAvB,EAA4B,IAA5B,CAAP;AACD;;;;;;;;ACnCM,MAAMwxH,UAAU,GAAK,GAArB;;AACA,MAAMC,WAAW,GAAI,GAArB;;AACA,MAAMiB,WAAW,GAAI,GAArB;;AACA,MAAMC,YAAY,GAAG,GAArB;;;;;;;;;;ACHA,MAAM/M,OAAO,GAAG,SAAhB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AACA,MAAMrhD,UAAU,GAAG,YAAnB;;AAEA,MAAMshD,eAAe,GAAG,iBAAxB;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,cAAc,GAAG,gBAAvB;;AACA,MAAMC,qBAAqB,GAAG,uBAA9B;;AACA,MAAMC,iBAAiB,GAAG,mBAA1B;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,gBAAgB,GAAG,kBAAzB;;AACA,MAAMC,eAAe,GAAG,iBAAxB;;;AAEQ,SAASC,OAAT,CAAiBzyT,IAAjB,EAAuB;AACpC,OAAKA,IAAL,GAAYA,IAAZ;AACD;;AAEDyyT,OAAO,CAACtyU,SAAR,CAAkB4kO,KAAlB,GAA0B,UAASpsB,OAAT,EAAkB;AAC1C,MAAInsM,CAAJ,EAAOzM,CAAP,EAAUkO,CAAV;AAEA,MAAI0qM,OAAO,CAAC,IAAD,CAAX,EAAmB,OAAO,CAAP;;AAEnB,OAAKnsM,CAAC,GAACqoK,QAAQ,CAAC,IAAD,CAAV,EAAkB90K,CAAC,GAAC,CAApB,EAAuBkO,CAAC,GAACzB,CAAC,CAACnN,MAAhC,EAAwCU,CAAC,GAACkO,CAA1C,EAA6C,EAAElO,CAA/C,EAAkD;AAChD,QAAIyM,CAAC,CAACzM,CAAD,CAAD,CAAKglO,KAAL,CAAWpsB,OAAX,CAAJ,EAAyB,OAAO,CAAP;AAC1B;AACF,CARD;;AAUA,SAAS9jC,QAAT,CAAkB/pJ,IAAlB,EAAwB;AACtB,UAAQA,IAAI,CAAC9K,IAAb;AACE,SAAKiyT,eAAL;AACE,aAAOnnT,IAAI,CAACylT,QAAZ;;AACF,SAAK2B,gBAAL;AACA,SAAKG,iBAAL;AACE,aAAO,CAACvnT,IAAI,CAACooB,IAAN,EAAYpoB,IAAI,CAACqoB,KAAjB,CAAP;;AACF,SAAKg/R,cAAL;AACE,aAAO,CAACrnT,IAAI,CAAC4nT,MAAN,EAAcpzU,MAAd,CAAqBwrB,IAAI,CAAChrB,SAA1B,CAAP;;AACF,SAAKsyU,qBAAL;AACE,aAAO,CAACtnT,IAAI,CAAC4C,IAAN,EAAY5C,IAAI,CAAC6nT,UAAjB,EAA6B7nT,IAAI,CAAC8nT,SAAlC,CAAP;;AACF,SAAKN,gBAAL;AACE,aAAO,CAACxnT,IAAI,CAACs8K,MAAN,EAAct8K,IAAI,CAACwsL,QAAnB,CAAP;;AACF,SAAKi7H,gBAAL;AACE,aAAOznT,IAAI,CAACo2L,UAAZ;;AACF,SAAK8wH,QAAL;AACE,aAAO,CAAClnT,IAAI,CAAC9mB,GAAN,EAAW8mB,IAAI,CAAC/nB,KAAhB,CAAP;;AACF,SAAKyvU,eAAL;AACE,aAAO,CAAC1nT,IAAI,CAAC+nT,QAAN,CAAP;;AACF,SAAKliD,UAAL;AACA,SAAKohD,OAAL;AACA,SAAKD,OAAL;AACA;AACE,aAAO,EAAP;AAtBJ;AAwBD;;;;;;;;;AClBD;;;;AAnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAIgB,SAAJ,EACIj9Q,MADJ,EAEIhwD,KAFJ,EAGIxG,MAHJ,EAII0zU,SAJJ;AAMA,IAAIC,mBAAmB,GAAG,CAA1B;AAAA,IACIC,QAAQ,GAAG,CADf;AAAA,IAEIC,eAAe,GAAG,CAFtB;AAAA,IAGIC,YAAY,GAAG,CAHnB;AAAA,IAIIC,gBAAgB,GAAG,CAJvB;AAAA,IAKIC,mBAAmB,GAAG,CAL1B;AAAA,IAMIC,eAAe,GAAG,CANtB;AAAA,IAOIC,kBAAkB,GAAG,CAPzB;AAAA,IAQIC,sBAAsB,GAAG,CAR7B;AAUAV,SAAS,GAAG,EAAZ;AACAA,SAAS,CAACE,mBAAD,CAAT,GAAiC,SAAjC;AACAF,SAAS,CAACG,QAAD,CAAT,GAAsB,OAAtB;AACAH,SAAS,CAACI,eAAD,CAAT,GAA6B,YAA7B;AACAJ,SAAS,CAACK,YAAD,CAAT,GAA0B,SAA1B;AACAL,SAAS,CAACM,gBAAD,CAAT,GAA8B,MAA9B;AACAN,SAAS,CAACO,mBAAD,CAAT,GAAiC,SAAjC;AACAP,SAAS,CAACQ,eAAD,CAAT,GAA6B,YAA7B;AACAR,SAAS,CAACS,kBAAD,CAAT,GAAgC,QAAhC;AACAT,SAAS,CAACU,sBAAD,CAAT,GAAoC,mBAApC;AAEA,IAAIC,qBAAqB,GAAG,iBAA5B;AAAA,IACIC,sBAAsB,GAAG,kBAD7B;AAAA,IAEIC,oBAAoB,GAAG,gBAF3B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,gBAAgB,GAAG,YAJvB;AAAA,IAKIC,aAAa,GAAG,SALpB;AAAA,IAMIC,uBAAuB,GAAG,mBAN9B;AAAA,IAOIC,sBAAsB,GAAG,kBAP7B;AAAA,IAQIC,sBAAsB,GAAG,kBAR7B;AAAA,IASIC,cAAc,GAAG,UATrB;AAAA,IAUIC,qBAAqB,GAAG,iBAV5B,EAYA;;AACA,IAAIC,sBAAsB,GAAG,qBAA7B;AAAA,IACIC,uBAAuB,GAAG,mBAD9B;AAAA,IAEIC,uBAAuB,GAAG,mBAF9B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,yBAAyB,GAAG,0BAJhC;AAAA,IAKIC,oBAAoB,GAAG,yBAL3B;AAAA,IAMIC,oBAAoB,GAAG,4BAN3B;AAAA,IAOIC,yBAAyB,GAAG,uCAPhC;AAAA,IAQIC,yBAAyB,GAAG,gDARhC;AAAA,IASIC,8BAA8B,GAAG,sEATrC;AAWA,IAAIC,OAAO,GAAG,SAAd;AAAA,IACIC,QAAQ,GAAG,WADf,EAGA;;AACA,IAAIC,4BAA4B,GAAG,IAAIt6M,MAAJ,CAAW,szJAAX,CAAnC;AAAA,IACI;AACAu6M,2BAA2B,GAAG,IAAIv6M,MAAJ,CAAW,muLAAX,CAFlC,EAIA;AACA;AACA;AACA;;AAEA,SAASl0H,MAAT,CAAgB6R,SAAhB,EAA2B+K,OAA3B,EAAoC;AAClC;AACA,MAAI,CAAC/K,SAAL,EAAgB;AACd,UAAM,IAAI/Z,KAAJ,CAAU,aAAa8kB,OAAvB,CAAN;AACD;AACF;;AAED,SAAS8xT,cAAT,CAAwBtN,EAAxB,EAA4B;AAC1B,SAAQA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAA5B,CAD0B,CACS;AACpC;;AAED,SAASuN,UAAT,CAAoBvN,EAApB,EAAwB;AACtB,SAAO,yBAAyBzqS,OAAzB,CAAiCyqS,EAAjC,KAAwC,CAA/C;AACD;;AAED,SAASwN,YAAT,CAAsBxN,EAAtB,EAA0B;AACxB,SAAO,WAAWzqS,OAAX,CAAmByqS,EAAnB,KAA0B,CAAjC;AACD,EAED;;;AAEA,SAASyN,YAAT,CAAsBzN,EAAtB,EAA0B;AACxB,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAmCA,EAAE,KAAK,IAA1C,IAAoDA,EAAE,KAAK,IAA3D,IAAqEA,EAAE,KAAK,IAA5E,IACJA,EAAE,IAAI,MAAN,IAAgB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,MAAzC,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,MAAjE,EAAyE,MAAzE,EAAiF,MAAjF,EAAyF,MAAzF,EAAiG,MAAjG,EAAyG,MAAzG,EAAiH,MAAjH,EAAyH,MAAzH,EAAiI,MAAjI,EAAyIzqS,OAAzI,CAAiJyqS,EAAjJ,KAAwJ,CAD3K;AAED,EAED;;;AAEA,SAAS0N,gBAAT,CAA0B1N,EAA1B,EAA8B;AAC5B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAmCA,EAAE,KAAK,MAA1C,IAAsDA,EAAE,KAAK,MAApE;AACD,EAED;;;AAEA,SAAS2N,iBAAT,CAA2B3N,EAA3B,EAA+B;AAC7B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAkC;AACtCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADhB,IACyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFhB,IAEyB;AAC7BA,EAAAA,EAAE,KAAK,IAHH,IAGY;AACfA,EAAAA,EAAE,IAAI,IAAP,IAAgBoN,4BAA4B,CAACtnT,IAA7B,CAAkCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAlC,CAJnB;AAKD;;AAED,SAAS4N,gBAAT,CAA0B5N,EAA1B,EAA8B;AAC5B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAkC;AACtCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADhB,IACyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFhB,IAEyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAHhB,IAGyB;AAC7BA,EAAAA,EAAE,KAAK,IAJH,IAIY;AACfA,EAAAA,EAAE,IAAI,IAAP,IAAgBqN,2BAA2B,CAACvnT,IAA5B,CAAiCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAjC,CALnB;AAMD,EAED;;;AAEA,IAAI6N,QAAQ,GAAG;AACb,QAAK,CADQ;AACL,QAAK,CADA;AACG,QAAK,CADR;AAEb,SAAM,CAFO;AAEJ,SAAM,CAFF;AAEK,SAAM,CAFX;AAEc,SAAM,CAFpB;AAEuB,SAAM,CAF7B;AAGb,UAAO,CAHM;AAGH,UAAO,CAHJ;AAGO,UAAO,CAHd;AAGiB,UAAO,CAHxB;AAG2B,UAAO,CAHlC;AAGqC,UAAO,CAH5C;AAIb,WAAQ,CAJK;AAIF,WAAQ,CAJN;AAIS,WAAQ,CAJjB;AAIoB,WAAQ,CAJ5B;AAI+B,WAAQ,CAJvC;AAI0C,WAAQ,CAJlD;AAIqD,WAAQ,CAJ7D;AAIgE,WAAQ,CAJxE;AAKb,YAAS,CALI;AAKD,YAAS,CALR;AAKW,YAAS,CALpB;AAKuB,YAAS,CALhC;AAKmC,YAAS,CAL5C;AAK+C,YAAS,CALxD;AAK2D,YAAS,CALpE;AAKuE,YAAS,CALhF;AAMb,aAAU,CANG;AAMA,aAAU,CANV;AAMa,aAAU,CANvB;AAM0B,aAAU,CANpC;AAMuC,aAAU,CANjD;AAOb,cAAW,CAPE;AAOC,cAAW,CAPZ;AAOe,cAAW,CAP1B;AAQb,eAAY,CARC;AAQE,eAAY,CARd;AASb,gBAAa,CATA;AASG,gBAAa;AAThB,CAAf;;AAYA,SAASC,WAAT,GAAuB;AACrB,MAAI9N,EAAJ;;AAEA,SAAO/hU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,QAAIwvU,YAAY,CAACzN,EAAD,CAAZ,IAAoB0N,gBAAgB,CAAC1N,EAAD,CAAxC,EAA8C;AAC5C,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;AACF;;AAED,SAAS8vU,aAAT,CAAuBxyN,MAAvB,EAA+B;AAC7B,MAAIpjH,CAAJ;AAAA,MAAON,GAAP;AAAA,MAAYmoU,EAAZ;AAAA,MAAgBxjC,IAAI,GAAG,CAAvB;AAEA3kS,EAAAA,GAAG,GAAI0jH,MAAM,KAAK,GAAZ,GAAmB,CAAnB,GAAuB,CAA7B;;AACA,OAAKpjH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,GAAhB,EAAqB,EAAEM,CAAvB,EAA0B;AACxB,QAAI8F,KAAK,GAAGxG,MAAR,IAAkB81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAhC,EAAiD;AAC/C+hU,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACAu+R,MAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD,KAHD,MAGO;AACL0xU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AACD,SAAOzpU,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AAED,SAASyxC,0BAAT,GAAsC;AACpC,MAAIjO,EAAJ,EAAQxjC,IAAR,EAAc0xC,GAAd,EAAmBC,GAAnB;AAEAnO,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAu+R,EAAAA,IAAI,GAAG,CAAP,CAJoC,CAMpC;;AACA,MAAIwjC,EAAE,KAAK,GAAX,EAAgB;AACdgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAOjvU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AACA,QAAI,CAACsvU,UAAU,CAACvN,EAAD,CAAf,EAAqB;AACnB;AACD;;AACDxjC,IAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD;;AAED,MAAIkgS,IAAI,GAAG,QAAP,IAAmBwjC,EAAE,KAAK,GAA9B,EAAmC;AACjCgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,GArBmC,CAuBpC;;;AACA,MAAI1wC,IAAI,IAAI,MAAZ,EAAoB;AAClB,WAAO/4R,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AACD0xC,EAAAA,GAAG,GAAG,CAAE1xC,IAAI,GAAG,OAAR,IAAoB,EAArB,IAA2B,MAAjC;AACA2xC,EAAAA,GAAG,GAAG,CAAE3xC,IAAI,GAAG,OAAR,GAAmB,IAApB,IAA4B,MAAlC;AACA,SAAO/4R,MAAM,CAAC4sE,YAAP,CAAoB69P,GAApB,EAAyBC,GAAzB,CAAP;AACD;;AAED,SAASC,oBAAT,GAAgC;AAC9B,MAAIpO,EAAJ,EAAQ50T,EAAR;AAEA40T,EAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,EAAvB,CAAL;AACAmN,EAAAA,EAAE,GAAG3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAL,CAJ8B,CAM9B;;AACA,MAAIA,EAAE,KAAK,IAAX,EAAiB;AACf,QAAI/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD,MAAEjvU,KAAF;AACA+hU,IAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AACA,QAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC2N,iBAAiB,CAAC3N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5C,EAAgE;AAC9DohQ,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD9hU,IAAAA,EAAE,GAAG40T,EAAL;AACD;;AAED,SAAO/hU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AACA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAD,CAArB,EAA2B;AACzB;AACD;;AACD,MAAE/hU,KAAF;AACAmN,IAAAA,EAAE,IAAI3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAN,CANqB,CAQrB;;AACA,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACf50T,MAAAA,EAAE,GAAGA,EAAE,CAACqsB,MAAH,CAAU,CAAV,EAAarsB,EAAE,CAAC3T,MAAH,GAAY,CAAzB,CAAL;;AACA,UAAIw2D,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD,QAAEjvU,KAAF;AACA+hU,MAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AACA,UAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC4N,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA3C,EAA+D;AAC7DohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD9hU,MAAAA,EAAE,IAAI40T,EAAN;AACD;AACF;;AAED,SAAO50T,EAAP;AACD;;AAED,SAASijU,aAAT,GAAyB;AACvB,MAAIpqU,KAAJ,EAAW+7T,EAAX;AAEA/7T,EAAAA,KAAK,GAAGhG,KAAK,EAAb;;AACA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AACA,QAAI+hU,EAAE,KAAK,IAAX,EAAiB;AACf;AACA/hU,MAAAA,KAAK,GAAGgG,KAAR;AACA,aAAOmqU,oBAAoB,EAA3B;AACD;;AACD,QAAIR,gBAAgB,CAAC5N,EAAD,CAApB,EAA0B;AACxB,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;;AAED,SAAOgwD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAAP;AACD;;AAED,SAASqwU,cAAT,GAA0B;AACxB,MAAIrqU,KAAJ,EAAWmH,EAAX,EAAegN,IAAf;AAEAnU,EAAAA,KAAK,GAAGhG,KAAR,CAHwB,CAKxB;;AACAmN,EAAAA,EAAE,GAAI6iD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAA9B,GAAsCmwU,oBAAoB,EAA1D,GAA+DC,aAAa,EAAjF,CANwB,CAQxB;AACA;;AACA,MAAIjjU,EAAE,CAAC3T,MAAH,KAAc,CAAlB,EAAqB;AACnB2gB,IAAAA,IAAI,GAAGkzT,eAAP;AACD,GAFD,MAEO,IAAIuC,QAAQ,CAAC/+M,cAAT,CAAwB1jH,EAAxB,CAAJ,EAAiC;AAAE;AACxCgN,IAAAA,IAAI,GAAGmzT,YAAP;AACD,GAFM,MAEA,IAAIngU,EAAE,KAAK,MAAX,EAAmB;AACxBgN,IAAAA,IAAI,GAAGozT,gBAAP;AACD,GAFM,MAEA,IAAIpgU,EAAE,KAAK,MAAP,IAAiBA,EAAE,KAAK,OAA5B,EAAqC;AAC1CgN,IAAAA,IAAI,GAAGgzT,mBAAP;AACD,GAFM,MAEA;AACLhzT,IAAAA,IAAI,GAAGkzT,eAAP;AACD;;AAED,SAAO;AACLlzT,IAAAA,IAAI,EAAEA,IADD;AAELjd,IAAAA,KAAK,EAAEiQ,EAFF;AAGLnH,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAED;;;AAEA,SAASswU,cAAT,GAA0B;AACxB,MAAItqU,KAAK,GAAGhG,KAAZ;AAAA,MACEu+R,IAAI,GAAGvuO,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CADT;AAAA,MAEEuwU,KAFF;AAAA,MAGEC,GAAG,GAAGxgR,MAAM,CAAChwD,KAAD,CAHd;AAAA,MAIEywU,GAJF;AAAA,MAKEC,GALF;AAAA,MAMEC,GANF;;AAQA,UAAQpyC,IAAR;AAEE;AACA,SAAK,IAAL,CAHF,CAGa;;AACX,SAAK,IAAL,CAJF,CAIa;;AACX,SAAK,IAAL,CALF,CAKa;;AACX,SAAK,IAAL,CANF,CAMa;;AACX,SAAK,IAAL,CAPF,CAOa;;AACX,SAAK,IAAL,CARF,CAQa;;AACX,SAAK,IAAL,CATF,CASa;;AACX,SAAK,IAAL,CAVF,CAUa;;AACX,SAAK,IAAL,CAXF,CAWa;;AACX,SAAK,IAAL,CAZF,CAYa;;AACX,SAAK,IAAL,CAbF,CAaa;;AACX,SAAK,IAAL;AAAW;AACT,QAAEv+R,KAAF;AACA,aAAO;AACLma,QAAAA,IAAI,EAAEszT,eADD;AAELvwU,QAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAFF;AAGLv4R,QAAAA,KAAK,EAAEA,KAHF;AAIL6F,QAAAA,GAAG,EAAE7L;AAJA,OAAP;;AAOF;AACEuwU,MAAAA,KAAK,GAAGvgR,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAR,CADF,CAGE;;AACA,UAAIuwU,KAAK,KAAK,IAAd,EAAoB;AAClB,gBAAQhyC,IAAR;AACE,eAAK,IAAL,CADF,CACa;;AACX,eAAK,IAAL,CAFF,CAEa;;AACX,eAAK,IAAL,CAHF,CAGa;;AACX,eAAK,IAAL,CAJF,CAIa;;AACX,eAAK,IAAL,CALF,CAKa;;AACX,eAAK,IAAL,CANF,CAMa;;AACX,eAAK,IAAL,CAPF,CAOa;;AACX,eAAK,IAAL,CARF,CAQa;;AACX,eAAK,IAAL,CATF,CASa;;AACX,eAAK,IAAL;AAAW;AACTv+R,YAAAA,KAAK,IAAI,CAAT;AACA,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,IAA4B/4R,MAAM,CAAC4sE,YAAP,CAAoBm+P,KAApB,CAF9B;AAGLvqU,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;;AAOF,eAAK,IAAL,CAnBF,CAmBa;;AACX,eAAK,IAAL;AAAW;AACTA,YAAAA,KAAK,IAAI,CAAT,CADF,CAGE;;AACA,gBAAIgwD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC,gBAAEA,KAAF;AACD;;AACD,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAE8yD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAFF;AAGLgG,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;AA3BJ;AAkCD;;AA9DL,GATwB,CA0ExB;;;AAEA2wU,EAAAA,GAAG,GAAG3gR,MAAM,CAACx2B,MAAP,CAAcx5B,KAAd,EAAqB,CAArB,CAAN;;AAEA,MAAI2wU,GAAG,KAAK,MAAZ,EAAoB;AAClB3wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEyzU,GAFF;AAGL3qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAtFuB,CAwFxB;;;AAEA0wU,EAAAA,GAAG,GAAGC,GAAG,CAACn3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAIk3S,GAAG,KAAK,KAAR,IAAiBA,GAAG,KAAK,KAAzB,IAAkCA,GAAG,KAAK,KAA9C,EAAqD;AACnD1wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEwzU,GAFF;AAGL1qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GApGuB,CAsGxB;;;AACAywU,EAAAA,GAAG,GAAGC,GAAG,CAACl3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAKg3S,GAAG,KAAKC,GAAG,CAAC,CAAD,CAAX,IAAmB,SAASn5S,OAAT,CAAiBk5S,GAAjB,KAAyB,CAA7C,IAAoDC,GAAG,KAAK,IAAhE,EAAsE;AACpEzwU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEuzU,GAFF;AAGLzqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAjHuB,CAmHxB;;;AAEA,MAAI,eAAes3B,OAAf,CAAuBk5S,GAAvB,KAA+B,CAAnC,EAAsC;AACpC,MAAExwU,KAAF;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEszU,GAFF;AAGLxqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD;;AAED+vU,EAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,EAED;;;AAEA,SAAS2B,cAAT,CAAwB5qU,KAAxB,EAA+B;AAC7B,MAAIkwM,MAAM,GAAG,EAAb;;AAEA,SAAOl2M,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAf,EAAgC;AAC9B;AACD;;AACDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAIk2M,MAAM,CAAC18M,MAAP,KAAkB,CAAtB,EAAyB;AACvBu2U,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAAC,OAAOohF,MAAR,EAAgB,EAAhB,CAFV;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD;;AAED,SAAS6wU,gBAAT,CAA0B7qU,KAA1B,EAAiC;AAC/B,MAAIkwM,MAAM,GAAG,MAAMlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAzB;;AACA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAjB,EAAkC;AAChC;AACD;;AACDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAI0vU,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjB,IAA+CqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjE,EAA6F;AAC3F+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAACohF,MAAD,EAAS,CAAT,CAFV;AAGL46H,IAAAA,KAAK,EAAE,IAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAAS+wU,kBAAT,GAA8B;AAC5B,MAAI76H,MAAJ,EAAYlwM,KAAZ,EAAmB+7T,EAAnB;AAEAA,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAAC0uU,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAd,IAAqCozP,EAAE,KAAK,GAA7C,EACJ,oEADI,CAAN;AAGA/7T,EAAAA,KAAK,GAAGhG,KAAR;AACAk2M,EAAAA,MAAM,GAAG,EAAT;;AACA,MAAI6rH,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,GAAGlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAf;AACA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX,CAFc,CAId;AACA;;AACA,QAAIk2M,MAAM,KAAK,GAAf,EAAoB;AAClB,UAAI6rH,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B,UAAE/hU,KAAF;AACA,eAAO4wU,cAAc,CAAC5qU,KAAD,CAArB;AACD;;AACD,UAAIupU,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpB,eAAO8O,gBAAgB,CAAC7qU,KAAD,CAAvB;AACD,OAPiB,CASlB;;;AACA,UAAI+7T,EAAE,IAAIsN,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAxB,EAA4C;AAC1CohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,WAAOI,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;;AACA,WAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AAEA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AACA,QAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD,QAAIqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAlB,EAA8C;AAC5C,aAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,QAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;AACF,KAJD,MAIO;AACL+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAEgP,UAAU,CAACgqM,MAAD,CAFZ;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAED;;;AAEA,SAASgxU,iBAAT,GAA6B;AAC3B,MAAIj8N,GAAG,GAAG,EAAV;AAAA,MACEmjK,KADF;AAAA,MACSlyQ,KADT;AAAA,MACgB+7T,EADhB;AAAA,MACoBxjC,IADpB;AAAA,MAC0BuyC,KAAK,GAAG,KADlC;AAGA54D,EAAAA,KAAK,GAAGloN,MAAM,CAAChwD,KAAD,CAAd;AACAW,EAAAA,MAAM,CAAEu3Q,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,GAA9B,EACJ,yCADI,CAAN;AAGAlyQ,EAAAA,KAAK,GAAGhG,KAAR;AACA,IAAEA,KAAF;;AAEA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AAEA,QAAI+hU,EAAE,KAAK7pD,KAAX,EAAkB;AAChBA,MAAAA,KAAK,GAAG,EAAR;AACA;AACD,KAHD,MAGO,IAAI6pD,EAAE,KAAK,IAAX,EAAiB;AACtBA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AACA,UAAI,CAAC+hU,EAAD,IAAO,CAAC0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5B,EAAgD;AAC9C,gBAAQozP,EAAR;AACE,eAAK,GAAL;AACA,eAAK,GAAL;AACE,gBAAI/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,GAAtB,EAA2B;AACzB,gBAAEA,KAAF;AACA+0G,cAAAA,GAAG,IAAIi7N,0BAA0B,EAAjC;AACD,aAHD,MAGO;AACLj7N,cAAAA,GAAG,IAAI+6N,aAAa,CAAC/N,EAAD,CAApB;AACD;;AACD;;AACF,eAAK,GAAL;AACEhtN,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,MAAP;AACA;;AAEF;AACE,gBAAIw6N,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpBxjC,cAAAA,IAAI,GAAG,WAAWjnQ,OAAX,CAAmByqS,EAAnB,CAAP,CADoB,CAGpB;;AACA,kBAAIxjC,IAAI,KAAK,CAAb,EAAgB;AACduyC,gBAAAA,KAAK,GAAG,IAAR;AACD;;AAED,kBAAI9wU,KAAK,GAAGxG,MAAR,IAAkB+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAlC,EAAmD;AACjD8wU,gBAAAA,KAAK,GAAG,IAAR;AACAvyC,gBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB,CAFiD,CAIjD;AACA;;AACA,oBAAI,OAAOs3B,OAAP,CAAeyqS,EAAf,KAAsB,CAAtB,IACF/hU,KAAK,GAAGxG,MADN,IAEF+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAFd,EAE+B;AAC7Bu+R,kBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB;AACD;AACF;;AACD+0G,cAAAA,GAAG,IAAIvvG,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD,aArBD,MAqBO;AACLxpL,cAAAA,GAAG,IAAIgtN,EAAP;AACD;;AACD;AAtDJ;AAwDD,OAzDD,MAyDO;AACL,YAAIA,EAAE,KAAK,IAAP,IAAe/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,IAArC,EAA2C;AACzC,YAAEA,KAAF;AACD;AACF;AACF,KAhEM,MAgEA,IAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7C;AACD,KAFM,MAEA;AACLomC,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAI7pD,KAAK,KAAK,EAAd,EAAkB;AAChB63D,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEuzT,kBADD;AAELxwU,IAAAA,KAAK,EAAE63G,GAFF;AAGL+7N,IAAAA,KAAK,EAAEA,KAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAASixU,UAAT,CAAoBj1K,OAApB,EAA6Bl/J,KAA7B,EAAoC;AAClC,MAAIwnC,GAAG,GAAG03H,OAAV;;AAEA,MAAIl/J,KAAK,CAACw6B,OAAN,CAAc,GAAd,KAAsB,CAA1B,EAA6B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAgN,IAAAA,GAAG,GAAGA,GAAG,CACN7mC,OADG,CACK,wBADL,EAC+B,CAACssM,EAAD,EAAKmnI,EAAL,KAAY;AAC7C,UAAIp8M,QAAQ,CAACo8M,EAAD,EAAK,EAAL,CAAR,IAAoB,QAAxB,EAAkC;AAChC,eAAO,GAAP;AACD;;AACDnB,MAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,KANG,EAOHpxU,OAPG,CAOK,iCAPL,EAOwC,GAPxC,CAAN;AAQD,GApBiC,CAsBlC;;;AACA,MAAI;AACF,QAAIo3H,MAAJ,CAAWvwF,GAAX;AACD,GAFD,CAEE,OAAO1rC,CAAP,EAAU;AACVm3U,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,GA3BiC,CA6BlC;AACA;AACA;;;AACA,MAAI;AACF,WAAO,IAAIh6M,MAAJ,CAAWmnC,OAAX,EAAoBl/J,KAApB,CAAP;AACD,GAFD,CAEE,OAAOq0U,SAAP,EAAkB;AAClB,WAAO,IAAP;AACD;AACF;;AAED,SAASC,cAAT,GAA0B;AACxB,MAAIrP,EAAJ,EAAQhtN,GAAR,EAAas8N,WAAb,EAA0BC,UAA1B,EAAsCt9Q,IAAtC;AAEA+tQ,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAACohU,EAAE,KAAK,GAAR,EAAa,oDAAb,CAAN;AACAhtN,EAAAA,GAAG,GAAG/kD,MAAM,CAAChwD,KAAK,EAAN,CAAZ;AAEAqxU,EAAAA,WAAW,GAAG,KAAd;AACAC,EAAAA,UAAU,GAAG,KAAb;;AACA,SAAOtxU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACA+0G,IAAAA,GAAG,IAAIgtN,EAAP;;AACA,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACfA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX,CADe,CAEf;;AACA,UAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AACtCohQ,QAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD;;AACD/5N,MAAAA,GAAG,IAAIgtN,EAAP;AACD,KAPD,MAOO,IAAI0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7CohQ,MAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,KAFM,MAEA,IAAIuC,WAAJ,EAAiB;AACtB,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACdsP,QAAAA,WAAW,GAAG,KAAd;AACD;AACF,KAJM,MAIA;AACL,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACduP,QAAAA,UAAU,GAAG,IAAb;AACA;AACD,OAHD,MAGO,IAAIvP,EAAE,KAAK,GAAX,EAAgB;AACrBsP,QAAAA,WAAW,GAAG,IAAd;AACD;AACF;AACF;;AAED,MAAI,CAACC,UAAL,EAAiB;AACfvB,IAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,GArCuB,CAuCxB;;;AACA96Q,EAAAA,IAAI,GAAG+gD,GAAG,CAACv7E,MAAJ,CAAW,CAAX,EAAcu7E,GAAG,CAACv7G,MAAJ,GAAa,CAA3B,CAAP;AACA,SAAO;AACL0D,IAAAA,KAAK,EAAE82D,IADF;AAELu9Q,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAASy8N,eAAT,GAA2B;AACzB,MAAIzP,EAAJ,EAAQhtN,GAAR,EAAaj4G,KAAb;AAEAi4G,EAAAA,GAAG,GAAG,EAAN;AACAj4G,EAAAA,KAAK,GAAG,EAAR;;AACA,SAAOkD,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AACA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAArB,EAAyC;AACvC;AACD;;AAED,MAAE3uE,KAAF;;AACA,QAAI+hU,EAAE,KAAK,IAAP,IAAe/hU,KAAK,GAAGxG,MAA3B,EAAmC;AACjCu2U,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,KAFD,MAEO;AACLnyU,MAAAA,KAAK,IAAIilU,EAAT;AACAhtN,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAIjlU,KAAK,CAACO,MAAN,CAAa,WAAb,KAA6B,CAAjC,EAAoC;AAClC0yU,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,EAA2B/xU,KAA3B,CAAV;AACD;;AAED,SAAO;AACLI,IAAAA,KAAK,EAAEJ,KADF;AAELy0U,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAAS08N,UAAT,GAAsB;AACpB,MAAIzrU,KAAJ,EAAWguD,IAAX,EAAiBl3D,KAAjB,EAAwBI,KAAxB;AAEAgwU,EAAAA,SAAS,GAAG,IAAZ;AACA2C,EAAAA,WAAW;AACX7pU,EAAAA,KAAK,GAAGhG,KAAR;AAEAg0D,EAAAA,IAAI,GAAGo9Q,cAAc,EAArB;AACAt0U,EAAAA,KAAK,GAAG00U,eAAe,EAAvB;AACAt0U,EAAAA,KAAK,GAAG+zU,UAAU,CAACj9Q,IAAI,CAAC92D,KAAN,EAAaJ,KAAK,CAACI,KAAnB,CAAlB;AAEA,SAAO;AACLq0U,IAAAA,OAAO,EAAEv9Q,IAAI,CAACu9Q,OAAL,GAAez0U,KAAK,CAACy0U,OADzB;AAELr0U,IAAAA,KAAK,EAAEA,KAFF;AAGLw0U,IAAAA,KAAK,EAAE;AACL11K,MAAAA,OAAO,EAAEhoG,IAAI,CAAC92D,KADT;AAELJ,MAAAA,KAAK,EAAEA,KAAK,CAACI;AAFR,KAHF;AAOL8I,IAAAA,KAAK,EAAEA,KAPF;AAQL6F,IAAAA,GAAG,EAAE7L;AARA,GAAP;AAUD;;AAED,SAAS2xU,gBAAT,CAA0Bp5H,KAA1B,EAAiC;AAC/B,SAAOA,KAAK,CAACp+L,IAAN,KAAekzT,eAAf,IACL90H,KAAK,CAACp+L,IAAN,KAAemzT,YADV,IAEL/0H,KAAK,CAACp+L,IAAN,KAAegzT,mBAFV,IAGL50H,KAAK,CAACp+L,IAAN,KAAeozT,gBAHjB;AAID;;AAED,SAASqE,OAAT,GAAmB;AACjB,MAAI7P,EAAJ;AAEA8N,EAAAA,WAAW;;AAEX,MAAI7vU,KAAK,IAAIxG,MAAb,EAAqB;AACnB,WAAO;AACL2gB,MAAAA,IAAI,EAAEizT,QADD;AAELpnU,MAAAA,KAAK,EAAEhG,KAFF;AAGL6L,MAAAA,GAAG,EAAE7L;AAHA,KAAP;AAKD;;AAED+hU,EAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,MAAI0vU,iBAAiB,CAAC3N,EAAD,CAArB,EAA2B;AACzB,WAAOsO,cAAc,EAArB;AACD,GAjBgB,CAmBjB;;;AACA,MAAItO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,IAAzC,EAA+C;AAC7C,WAAOuO,cAAc,EAArB;AACD,GAtBgB,CAwBjB;;;AACA,MAAIvO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAA1B,EAAgC;AAC9B,WAAOiP,iBAAiB,EAAxB;AACD,GA3BgB,CA8BjB;AACA;;;AACA,MAAIjP,EAAE,KAAK,IAAX,EAAiB;AACf,QAAIsN,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAD,CAAlB,EAAkD;AAChD,aAAO+wU,kBAAkB,EAAzB;AACD;;AACD,WAAOT,cAAc,EAArB;AACD;;AAED,MAAIjB,cAAc,CAACtN,EAAD,CAAlB,EAAwB;AACtB,WAAOgP,kBAAkB,EAAzB;AACD;;AAED,SAAOT,cAAc,EAArB;AACD;;AAED,SAASuB,GAAT,GAAe;AACb,MAAIt5H,KAAJ;AAEAA,EAAAA,KAAK,GAAG20H,SAAR;AACAltU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AAEAqhU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AAEA5xU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AAEA,SAAO0sM,KAAP;AACD;;AAED,SAASpF,IAAT,GAAgB;AACd,MAAInrE,GAAJ;AAEAA,EAAAA,GAAG,GAAGhoI,KAAN;AAEAktU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AACA5xU,EAAAA,KAAK,GAAGgoI,GAAR;AACD;;AAED,SAAS8pM,qBAAT,CAA+BpH,QAA/B,EAAyC;AACvC,MAAIzlT,IAAI,GAAG,IAAI2nT,YAAJ,CAAYgB,qBAAZ,CAAX;AACA3oT,EAAAA,IAAI,CAACylT,QAAL,GAAgBA,QAAhB;AACA,SAAOzlT,IAAP;AACD;;AAED,SAAS8sT,sBAAT,CAAgCnnI,QAAhC,EAA0Cv9J,IAA1C,EAAgDC,KAAhD,EAAuD;AACrD,MAAIroB,IAAI,GAAG,IAAI2nT,YAAJ,CAAahiI,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAK,IAAnC,GAA2CsjI,uBAA3C,GAAqEL,sBAAjF,CAAX;AACA5oT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAACooB,IAAL,GAAYA,IAAZ;AACApoB,EAAAA,IAAI,CAACqoB,KAAL,GAAaA,KAAb;AACA,SAAOroB,IAAP;AACD;;AAED,SAAS+sT,oBAAT,CAA8BnF,MAA9B,EAAsC9yU,IAAtC,EAA4C;AAC1C,MAAIkrB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYkB,oBAAZ,CAAX;AACA7oT,EAAAA,IAAI,CAAC4nT,MAAL,GAAcA,MAAd;AACA5nT,EAAAA,IAAI,CAAChrB,SAAL,GAAiBF,IAAjB;AACA,SAAOkrB,IAAP;AACD;;AAED,SAASgtT,2BAAT,CAAqCpqT,IAArC,EAA2CilT,UAA3C,EAAuDC,SAAvD,EAAkE;AAChE,MAAI9nT,IAAI,GAAG,IAAI2nT,YAAJ,CAAYmB,2BAAZ,CAAX;AACA9oT,EAAAA,IAAI,CAAC4C,IAAL,GAAYA,IAAZ;AACA5C,EAAAA,IAAI,CAAC6nT,UAAL,GAAkBA,UAAlB;AACA7nT,EAAAA,IAAI,CAAC8nT,SAAL,GAAiBA,SAAjB;AACA,SAAO9nT,IAAP;AACD;;AAED,SAASitT,gBAAT,CAA0Bz2U,IAA1B,EAAgC;AAC9B,MAAIwpB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYoB,gBAAZ,CAAX;AACA/oT,EAAAA,IAAI,CAACxpB,IAAL,GAAYA,IAAZ;AACA,SAAOwpB,IAAP;AACD;;AAED,SAASktT,aAAT,CAAuB55H,KAAvB,EAA8B;AAC5B,MAAItzL,IAAI,GAAG,IAAI2nT,YAAJ,CAAYqB,aAAZ,CAAX;AACAhpT,EAAAA,IAAI,CAAC/nB,KAAL,GAAaq7M,KAAK,CAACr7M,KAAnB;AACA+nB,EAAAA,IAAI,CAAC63K,GAAL,GAAW9sI,MAAM,CAACzsD,KAAP,CAAag1M,KAAK,CAACvyM,KAAnB,EAA0BuyM,KAAK,CAAC1sM,GAAhC,CAAX;;AACA,MAAI0sM,KAAK,CAACm5H,KAAV,EAAiB;AACf,QAAIzsT,IAAI,CAAC63K,GAAL,KAAa,IAAjB,EAAuB;AACrB73K,MAAAA,IAAI,CAAC63K,GAAL,GAAW,QAAX;AACD;;AACD73K,IAAAA,IAAI,CAACysT,KAAL,GAAan5H,KAAK,CAACm5H,KAAnB;AACD;;AACD,SAAOzsT,IAAP;AACD;;AAED,SAASmtT,sBAAT,CAAgCr/H,QAAhC,EAA0CxR,MAA1C,EAAkDkQ,QAAlD,EAA4D;AAC1D,MAAIxsL,IAAI,GAAG,IAAI2nT,YAAJ,CAAYuB,sBAAZ,CAAX;AACAlpT,EAAAA,IAAI,CAACotT,QAAL,GAAgBt/H,QAAQ,KAAK,GAA7B;AACA9tL,EAAAA,IAAI,CAACs8K,MAAL,GAAcA,MAAd;AACAt8K,EAAAA,IAAI,CAACwsL,QAAL,GAAgBA,QAAhB;AACA,MAAI,CAACxsL,IAAI,CAACotT,QAAV,EAAoB5gI,QAAQ,CAAC6gI,MAAT,GAAkB,IAAlB;AACpB,SAAOrtT,IAAP;AACD;;AAED,SAASstT,sBAAT,CAAgCl3H,UAAhC,EAA4C;AAC1C,MAAIp2L,IAAI,GAAG,IAAI2nT,YAAJ,CAAYwB,sBAAZ,CAAX;AACAnpT,EAAAA,IAAI,CAACo2L,UAAL,GAAkBA,UAAlB;AACA,SAAOp2L,IAAP;AACD;;AAED,SAASutT,cAAT,CAAwBC,IAAxB,EAA8Bt0U,GAA9B,EAAmCjB,KAAnC,EAA0C;AACxC,MAAI+nB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYyB,cAAZ,CAAX;AACAppT,EAAAA,IAAI,CAAC9mB,GAAL,GAAWA,GAAX;AACA8mB,EAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AACA+nB,EAAAA,IAAI,CAACwtT,IAAL,GAAYA,IAAZ;AACA,SAAOxtT,IAAP;AACD;;AAED,SAASytT,qBAAT,CAA+B9nI,QAA/B,EAAyCoiI,QAAzC,EAAmD;AACjD,MAAI/nT,IAAI,GAAG,IAAI2nT,YAAJ,CAAY0B,qBAAZ,CAAX;AACArpT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAAC+nT,QAAL,GAAgBA,QAAhB;AACA/nT,EAAAA,IAAI,CAACq4F,MAAL,GAAc,IAAd;AACA,SAAOr4F,IAAP;AACD,EAED;;;AAEA,SAAS8qT,UAAT,CAAoBx3H,KAApB,EAA2Bo6H,aAA3B,EAA0C;AACxC,MAAIp0T,KAAJ;AAAA,MACExkB,IAAI,GAAGC,KAAK,CAACM,SAAN,CAAgBiJ,KAAhB,CAAsBvK,IAAtB,CAA2BiB,SAA3B,EAAsC,CAAtC,CADT;AAAA,MAEE4G,GAAG,GAAG8xU,aAAa,CAACl1U,OAAd,CACJ,QADI,EAEJ,CAACm1U,KAAD,EAAQ5yU,KAAR,KAAkB;AAChBW,IAAAA,MAAM,CAACX,KAAK,GAAGjG,IAAI,CAACP,MAAd,EAAsB,oCAAtB,CAAN;AACA,WAAOO,IAAI,CAACiG,KAAD,CAAX;AACD,GALG,CAFR;AAWAue,EAAAA,KAAK,GAAG,IAAI9lB,KAAJ,CAAUoI,GAAV,CAAR;AACA0d,EAAAA,KAAK,CAACve,KAAN,GAAcA,KAAd;AACAue,EAAAA,KAAK,CAAC07P,WAAN,GAAoBp5Q,GAApB;AACA,QAAM0d,KAAN;AACD,EAED;;;AAEA,SAASs0T,eAAT,CAAyBt6H,KAAzB,EAAgC;AAC9B,MAAIA,KAAK,CAACp+L,IAAN,KAAeizT,QAAnB,EAA6B;AAC3B2C,IAAAA,UAAU,CAACx3H,KAAD,EAAQq2H,oBAAR,CAAV;AACD;;AAED,MAAIr2H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAnB,EAAwC;AACtCuC,IAAAA,UAAU,CAACx3H,KAAD,EAAQi2H,uBAAR,CAAV;AACD;;AAED,MAAIj2H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAnB,EAAuC;AACrCqC,IAAAA,UAAU,CAACx3H,KAAD,EAAQk2H,uBAAR,CAAV;AACD;;AAED,MAAIl2H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClC0C,IAAAA,UAAU,CAACx3H,KAAD,EAAQm2H,2BAAR,CAAV;AACD;;AAED,MAAIn2H,KAAK,CAACp+L,IAAN,KAAemzT,YAAnB,EAAiC;AAC/ByC,IAAAA,UAAU,CAACx3H,KAAD,EAAQo2H,yBAAR,CAAV;AACD,GAnB6B,CAqB9B;;;AACAoB,EAAAA,UAAU,CAACx3H,KAAD,EAAQg2H,sBAAR,EAAgCh2H,KAAK,CAACr7M,KAAtC,CAAV;AACD,EAED;AACA;;;AAEA,SAASy6E,MAAT,CAAgBz6E,KAAhB,EAAuB;AACrB,MAAIq7M,KAAK,GAAGs5H,GAAG,EAAf;;AACA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACr7M,KAAN,KAAgBA,KAAtD,EAA6D;AAC3D21U,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;AACF,EAED;;;AAEA,SAASjzF,KAAT,CAAepoH,KAAf,EAAsB;AACpB,SAAOgwU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAChwU,KAAV,KAAoBA,KAAjE;AACD,EAED;;;AAEA,SAAS41U,YAAT,CAAsBC,OAAtB,EAA+B;AAC7B,SAAO7F,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAAnB,IAAmCJ,SAAS,CAAChwU,KAAV,KAAoB61U,OAA9D;AACD,EAED;;;AAEA,SAASC,qBAAT,GAAiC;AAC/B,MAAItI,QAAQ,GAAG,EAAf;AAEA1qU,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClB,QAAIA,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,MAAAA,GAAG;AACHnH,MAAAA,QAAQ,CAACvwU,IAAT,CAAc,IAAd;AACD,KAHD,MAGO;AACLuwU,MAAAA,QAAQ,CAACvwU,IAAT,CAAc84U,0BAA0B,EAAxC;;AAEA,UAAI,CAAC3tN,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,QAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;AACF;;AAEDk6P,EAAAA,GAAG;AAEH,SAAOC,qBAAqB,CAACpH,QAAD,CAA5B;AACD,EAED;;;AAEA,SAASwI,sBAAT,GAAkC;AAChC,MAAI36H,KAAJ;AAEAv4M,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAGs5H,GAAG,EAAX,CAJgC,CAMhC;AACA;;AAEA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAf,IAAqCn1H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAxD,EAA6E;AAC3E,QAAIj1H,KAAK,CAACu4H,KAAV,EAAiB;AACff,MAAAA,UAAU,CAACx3H,KAAD,EAAQw2H,yBAAR,CAAV;AACD;;AACD,WAAOoD,aAAa,CAAC55H,KAAD,CAApB;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASi2U,mBAAT,GAA+B;AAC7B,MAAI56H,KAAJ,EAAWp6M,GAAX,EAAgBgP,EAAhB,EAAoBjQ,KAApB;AAEA8C,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAG20H,SAAR;;AAEA,MAAI30H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClClgU,IAAAA,EAAE,GAAG+lU,sBAAsB,EAA3B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASrlU,EAAT,EAAajQ,KAAb,CAArB;AACD;;AACD,MAAIq7M,KAAK,CAACp+L,IAAN,KAAeizT,QAAf,IAA2B70H,KAAK,CAACp+L,IAAN,KAAeszT,eAA9C,EAA+D;AAC7DoF,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD,GAFD,MAEO;AACLp6M,IAAAA,GAAG,GAAG+0U,sBAAsB,EAA5B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASr0U,GAAT,EAAcjB,KAAd,CAArB;AACD;AACF;;AAED,SAASk2U,sBAAT,GAAkC;AAChC,MAAI/3H,UAAU,GAAG,EAAjB;AAAA,MACE5J,QADF;AAAA,MACYh2M,IADZ;AAAA,MACkB0C,GADlB;AAAA,MACuBwF,GAAG,GAAG,EAD7B;AAAA,MAEEkG,QAAQ,GAAGrE,MAFb;AAIAxF,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClBmsF,IAAAA,QAAQ,GAAG0hI,mBAAmB,EAA9B;;AAEA,QAAI1hI,QAAQ,CAACtzM,GAAT,CAAagc,IAAb,KAAsB6zT,gBAA1B,EAA4C;AAC1CvyU,MAAAA,IAAI,GAAGg2M,QAAQ,CAACtzM,GAAT,CAAa1C,IAApB;AACD,KAFD,MAEO;AACLA,MAAAA,IAAI,GAAGoO,QAAQ,CAAC4nM,QAAQ,CAACtzM,GAAT,CAAajB,KAAd,CAAf;AACD;;AAEDiB,IAAAA,GAAG,GAAG,MAAM1C,IAAZ;;AACA,QAAIwB,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC2K,GAArC,EAA0CxF,GAA1C,CAAJ,EAAoD;AAClD4xU,MAAAA,UAAU,CAAC,EAAD,EAAKf,8BAAL,CAAV;AACD,KAFD,MAEO;AACLrrU,MAAAA,GAAG,CAACxF,GAAD,CAAH,GAAW,IAAX;AACD;;AAEDk9M,IAAAA,UAAU,CAAClhN,IAAX,CAAgBs3M,QAAhB;;AAEA,QAAI,CAACnsF,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO46P,sBAAsB,CAACl3H,UAAD,CAA7B;AACD,EAED;;;AAEA,SAASg4H,oBAAT,GAAgC;AAC9B,MAAIzyU,IAAJ;AAEA+2E,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA/2E,EAAAA,IAAI,GAAG0yU,eAAe,EAAtB;AAEA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO/2E,IAAP;AACD,EAGD;;;AAEA,IAAI2yU,aAAa,GAAG;AAClB,QAAM;AADY,CAApB;;AAIA,SAASC,sBAAT,GAAkC;AAChC,MAAIr5T,IAAJ,EAAUo+L,KAAV,EAAiB33M,IAAjB;;AAEA,MAAI0kH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO+tN,oBAAoB,EAA3B;AACD;;AAED,MAAI/tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO0tN,qBAAqB,EAA5B;AACD;;AAED,MAAI1tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO8tN,sBAAsB,EAA7B;AACD;;AAEDj5T,EAAAA,IAAI,GAAG+yT,SAAS,CAAC/yT,IAAjB;AACAna,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;;AAGA,MAAImU,IAAI,KAAKkzT,eAAT,IAA4BkG,aAAa,CAACrG,SAAS,CAAChwU,KAAX,CAA7C,EAAgE;AAC9D0D,IAAAA,IAAI,GAAGsxU,gBAAgB,CAACL,GAAG,GAAG30U,KAAP,CAAvB;AACD,GAFD,MAEO,IAAIid,IAAI,KAAKuzT,kBAAT,IAA+BvzT,IAAI,KAAKqzT,mBAA5C,EAAiE;AACtE,QAAIN,SAAS,CAAC4D,KAAd,EAAqB;AACnBf,MAAAA,UAAU,CAAC7C,SAAD,EAAY6B,yBAAZ,CAAV;AACD;;AACDnuU,IAAAA,IAAI,GAAGuxU,aAAa,CAACN,GAAG,EAAJ,CAApB;AACD,GALM,MAKA,IAAI13T,IAAI,KAAKmzT,YAAb,EAA2B;AAChC,UAAM,IAAI70U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI/0T,IAAI,KAAKgzT,mBAAb,EAAkC;AACvC50H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAeq7M,KAAK,CAACr7M,KAAN,KAAgB,MAA/B;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIp+L,IAAI,KAAKozT,gBAAb,EAA+B;AACpCh1H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAc,IAAd;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIjzF,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,IAAD,CAAvB,EAA+B;AACpC1kH,IAAAA,IAAI,GAAGuxU,aAAa,CAACV,UAAU,EAAX,CAApB;AACAt+H,IAAAA,IAAI;AACL,GAHM,MAGA;AACL0/H,IAAAA,eAAe,CAAChB,GAAG,EAAJ,CAAf;AACD;;AAED,SAAOjxU,IAAP;AACD,EAED;;;AAEA,SAAS6yU,cAAT,GAA0B;AACxB,MAAI15U,IAAI,GAAG,EAAX;AAEA49E,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,MAAI,CAAC2tC,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf,WAAOtlH,KAAK,GAAGxG,MAAf,EAAuB;AACrBO,MAAAA,IAAI,CAACI,IAAL,CAAU84U,0BAA0B,EAApC;;AACA,UAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd;AACD;;AACD3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO59E,IAAP;AACD;;AAED,SAAS25U,wBAAT,GAAoC;AAClC,MAAIn7H,KAAJ;AACAv4M,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAGs5H,GAAG,EAAX;;AAEA,MAAI,CAACF,gBAAgB,CAACp5H,KAAD,CAArB,EAA8B;AAC5Bs6H,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASy2U,sBAAT,GAAkC;AAChCh8P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO+7P,wBAAwB,EAA/B;AACD;;AAED,SAASE,mBAAT,GAA+B;AAC7B,MAAIhzU,IAAJ;AAEA+2E,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA/2E,EAAAA,IAAI,GAAG0yU,eAAe,EAAtB;AAEA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO/2E,IAAP;AACD;;AAED,SAASizU,oCAAT,GAAgD;AAC9C,MAAIjzU,IAAJ,EAAU7G,IAAV,EAAgB03M,QAAhB;AAEA7wM,EAAAA,IAAI,GAAG4yU,sBAAsB,EAA7B;;AAEA,WAAS;AACP,QAAIluN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdmsF,MAAAA,QAAQ,GAAGkiI,sBAAsB,EAAjC;AACA/yU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHD,MAGO,IAAInsF,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBvrH,MAAAA,IAAI,GAAG05U,cAAc,EAArB;AACA7yU,MAAAA,IAAI,GAAGoxU,oBAAoB,CAACpxU,IAAD,EAAO7G,IAAP,CAA3B;AACD,KAHM,MAGA,IAAIurH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBmsF,MAAAA,QAAQ,GAAGmiI,mBAAmB,EAA9B;AACAhzU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHM,MAGA;AACL;AACD;AACF;;AAED,SAAO7wM,IAAP;AACD,EAED;;;AAEA,SAASkzU,sBAAT,GAAkC;AAChC,MAAIlzU,IAAI,GAAGizU,oCAAoC,EAA/C;;AAEA,MAAI3G,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAvB,EAAwC;AACtC,QAAKnoN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAzB,EAAkC;AAChC,YAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD;AACF;;AAED,SAAOtuU,IAAP;AACD,EAED;;;AAEA,SAASmzU,oBAAT,GAAgC;AAC9B,MAAIx7H,KAAJ,EAAW33M,IAAX;;AAEA,MAAIssU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAA7D,EAA2E;AACzE1sU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD,GAFD,MAEO,IAAIxuN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAxB,EAAgC;AACrC,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI5pN,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,GAAD,CAAnB,IAA4BA,KAAK,CAAC,GAAD,CAAjC,IAA0CA,KAAK,CAAC,GAAD,CAAnD,EAA0D;AAC/DizF,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAjxU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACAnzU,IAAAA,IAAI,GAAG8xU,qBAAqB,CAACn6H,KAAK,CAACr7M,KAAP,EAAc0D,IAAd,CAA5B;AACD,GAJM,MAIA,IAAIkyU,YAAY,CAAC,QAAD,CAAZ,IAA0BA,YAAY,CAAC,MAAD,CAAtC,IAAkDA,YAAY,CAAC,QAAD,CAAlE,EAA8E;AACnF,UAAM,IAAIr6U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA;AACLtuU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD;;AAED,SAAOlzU,IAAP;AACD;;AAED,SAASozU,gBAAT,CAA0Bz7H,KAA1B,EAAiC;AAC/B,MAAI07H,IAAI,GAAG,CAAX;;AAEA,MAAI17H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACp+L,IAAN,KAAemzT,YAArD,EAAmE;AACjE,WAAO,CAAP;AACD;;AAED,UAAQ/0H,KAAK,CAACr7M,KAAd;AACE,SAAK,IAAL;AACE+2U,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,YAAL;AACA,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,EAAP;AACA;;AAEF;AACE;AAvDJ;;AA0DA,SAAOA,IAAP;AACD,EAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASC,qBAAT,GAAiC;AAC/B,MAAIh7U,MAAJ,EAAYi7U,OAAZ,EAAqBvzU,IAArB,EAA2B23M,KAA3B,EAAkC07H,IAAlC,EAAwCvkU,KAAxC,EAA+C49B,KAA/C,EAAsDs9J,QAAtD,EAAgEv9J,IAAhE,EAAsEnzC,CAAtE;AAEAhB,EAAAA,MAAM,GAAGg0U,SAAT;AACA7/R,EAAAA,IAAI,GAAG0mS,oBAAoB,EAA3B;AAEAx7H,EAAAA,KAAK,GAAG20H,SAAR;AACA+G,EAAAA,IAAI,GAAGD,gBAAgB,CAACz7H,KAAD,CAAvB;;AACA,MAAI07H,IAAI,KAAK,CAAb,EAAgB;AACd,WAAO5mS,IAAP;AACD;;AACDkrK,EAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACApC,EAAAA,GAAG;AAEHsC,EAAAA,OAAO,GAAG,CAACj7U,MAAD,EAASg0U,SAAT,CAAV;AACA5/R,EAAAA,KAAK,GAAGymS,oBAAoB,EAA5B;AAEArkU,EAAAA,KAAK,GAAG,CAAC29B,IAAD,EAAOkrK,KAAP,EAAcjrK,KAAd,CAAR;;AAEA,SAAO,CAAC2mS,IAAI,GAAGD,gBAAgB,CAAC9G,SAAD,CAAxB,IAAuC,CAA9C,EAAiD;AAE/C;AACA,WAAQx9T,KAAK,CAAClW,MAAN,GAAe,CAAhB,IAAuBy6U,IAAI,IAAIvkU,KAAK,CAACA,KAAK,CAAClW,MAAN,GAAe,CAAhB,CAAL,CAAwBy6U,IAA9D,EAAqE;AACnE3mS,MAAAA,KAAK,GAAG59B,KAAK,CAAC4U,GAAN,EAAR;AACAsmL,MAAAA,QAAQ,GAAGl7L,KAAK,CAAC4U,GAAN,GAAYpnB,KAAvB;AACAmwC,MAAAA,IAAI,GAAG39B,KAAK,CAAC4U,GAAN,EAAP;AACA6vT,MAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,MAAAA,IAAI,GAAGmxU,sBAAsB,CAACnnI,QAAD,EAAWv9J,IAAX,EAAiBC,KAAjB,CAA7B;AACA59B,MAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,KAV8C,CAY/C;;;AACA23M,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACAvkU,IAAAA,KAAK,CAACvV,IAAN,CAAWo+M,KAAX;AACA47H,IAAAA,OAAO,CAACh6U,IAAR,CAAa+yU,SAAb;AACAtsU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACArkU,IAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,GAtC8B,CAwC/B;;;AACA1G,EAAAA,CAAC,GAAGwV,KAAK,CAAClW,MAAN,GAAe,CAAnB;AACAoH,EAAAA,IAAI,GAAG8O,KAAK,CAACxV,CAAD,CAAZ;AACAi6U,EAAAA,OAAO,CAAC7vT,GAAR;;AACA,SAAOpqB,CAAC,GAAG,CAAX,EAAc;AACZi6U,IAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,IAAAA,IAAI,GAAGmxU,sBAAsB,CAACriU,KAAK,CAACxV,CAAC,GAAG,CAAL,CAAL,CAAagD,KAAd,EAAqBwS,KAAK,CAACxV,CAAC,GAAG,CAAL,CAA1B,EAAmC0G,IAAnC,CAA7B;AACA1G,IAAAA,CAAC,IAAI,CAAL;AACD;;AAED,SAAO0G,IAAP;AACD,EAED;;;AAEA,SAASqyU,0BAAT,GAAsC;AACpC,MAAIryU,IAAJ,EAAUksU,UAAV,EAAsBC,SAAtB;AAEAnsU,EAAAA,IAAI,GAAGszU,qBAAqB,EAA5B;;AAEA,MAAI5uN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,IAAAA,GAAG;AACH/E,IAAAA,UAAU,GAAGmG,0BAA0B,EAAvC;AACAt7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAo1P,IAAAA,SAAS,GAAGkG,0BAA0B,EAAtC;AAEAryU,IAAAA,IAAI,GAAGqxU,2BAA2B,CAACrxU,IAAD,EAAOksU,UAAP,EAAmBC,SAAnB,CAAlC;AACD;;AAED,SAAOnsU,IAAP;AACD,EAED;;;AAEA,SAAS0yU,eAAT,GAA2B;AACzB,MAAI1yU,IAAI,GAAGqyU,0BAA0B,EAArC;;AAEA,MAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN,CADc,CACa;AAC5B;;AAED,SAAOtuU,IAAP;AACD;;AAEc,kBAAS29R,IAAT,EAAe;AAC5BvuO,EAAAA,MAAM,GAAGuuO,IAAT;AACAv+R,EAAAA,KAAK,GAAG,CAAR;AACAxG,EAAAA,MAAM,GAAGw2D,MAAM,CAACx2D,MAAhB;AACA0zU,EAAAA,SAAS,GAAG,IAAZ;AAEA/5H,EAAAA,IAAI;AAEJ,MAAIvyM,IAAI,GAAG0yU,eAAe,EAA1B;;AAEA,MAAIpG,SAAS,CAAC/yT,IAAV,KAAmBizT,QAAvB,EAAiC;AAC/B,UAAM,IAAI30U,KAAJ,CAAU,kCAAV,CAAN;AACD;;AACD,SAAOmI,IAAP;AACD;;;;;;;;eC39Cc;AACb6rE,EAAAA,GAAG,EAAQ,KADE;AAEb+lL,EAAAA,CAAC,EAAU,QAFE;AAGb7xC,EAAAA,GAAG,EAAQ,UAHE;AAIbN,EAAAA,IAAI,EAAO,WAJE;AAKbg0H,EAAAA,KAAK,EAAM,YALE;AAMbC,EAAAA,MAAM,EAAK,aANE;AAOb9xS,EAAAA,EAAE,EAAS,SAPE;AAQbqmQ,EAAAA,OAAO,EAAI,cARE;AASbnlE,EAAAA,KAAK,EAAM,YATE;AAUb6wG,EAAAA,SAAS,EAAE,kBAVE;AAWbltM,EAAAA,SAAS,EAAE;AAXE;;;;;;;;;;ACAf;;AAEe,kBAASotM,OAAT,EAAkB;AAE/B,WAASC,MAAT,CAAgBj5U,IAAhB,EAAsB1B,IAAtB,EAA4B+T,IAA5B,EAAkCqM,IAAlC,EAAwC;AACtC,QAAIQ,GAAG,GAAG85T,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAjB;;AACA,QAAI+T,IAAJ,EAAU;AACR6M,MAAAA,GAAG,GAAG7M,IAAI,GAAG,GAAP,GAAa6M,GAAb,GAAmB,GAAzB;AACA,UAAI7M,IAAI,CAACi3G,WAAL,CAAiB,MAAjB,EAAyB,CAAzB,MAAgC,CAApC,EAAuCpqG,GAAG,GAAG,MAAMA,GAAN,GAAY,GAAlB;AACxC;;AACD,WAAOA,GAAG,GAAG,GAAN,GAAYlf,IAAZ,IAAoB0e,IAAI,GAAG,CAAP,GAAW,EAAX,GAAgBA,IAAI,KAAK,CAAT,GACzC,IADyC,GAEzC,MAAMpgB,IAAI,CAACwJ,KAAL,CAAW,CAAX,EAAcI,GAAd,CAAkB8wU,OAAlB,EAA2B32U,IAA3B,CAAgC,GAAhC,CAAN,GAA6C,GAFxC,CAAP;AAGD;;AAED,WAASqgB,EAAT,CAAY1iB,IAAZ,EAAkBqS,IAAlB,EAAwBqM,IAAxB,EAA8B;AAC5B,WAAOpgB,IAAI,IAAI26U,MAAM,CAACj5U,IAAD,EAAO1B,IAAP,EAAa+T,IAAb,EAAmBqM,IAAnB,CAArB;AACD;;AAED,QAAMkwM,IAAI,GAAG,UAAb;AAAA,QACMsqH,MAAM,GAAG,QADf;AAAA,QAEMC,MAAM,GAAG,QAFf;AAIA,SAAO;AACL;AACA9vU,IAAAA,KAAK,EAAK,cAFL;AAGLC,IAAAA,QAAQ,EAAE,iBAHL;AAILmO,IAAAA,GAAG,EAAO,UAJL;AAKLkB,IAAAA,IAAI,EAAM,WALL;AAMLD,IAAAA,IAAI,EAAM,WANL;AAOLE,IAAAA,IAAI,EAAM,WAPL;AAQL7D,IAAAA,KAAK,EAAK,YARL;AASLnO,IAAAA,IAAI,EAAM,WATL;AAUL4R,IAAAA,GAAG,EAAO,UAVL;AAWL/R,IAAAA,GAAG,EAAO,UAXL;AAYL8F,IAAAA,KAAK,EAAK,YAZL;AAaLkC,IAAAA,GAAG,EAAO,UAbL;AAcL5J,IAAAA,GAAG,EAAO,UAdL;AAeLF,IAAAA,GAAG,EAAO,UAfL;AAgBLuQ,IAAAA,GAAG,EAAO,UAhBL;AAiBLzQ,IAAAA,MAAM,EAAI,aAjBL;AAkBLqG,IAAAA,KAAK,EAAK,YAlBL;AAmBLyN,IAAAA,GAAG,EAAO,UAnBL;AAoBL1R,IAAAA,IAAI,EAAM,WApBL;AAqBL4R,IAAAA,GAAG,EAAO,UArBL;AAuBL/T,IAAAA,KAAK,EAAE,UAASpG,IAAT,EAAe;AACpB,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,sCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,uCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,cAAYrzU,CAAC,CAAC,CAAD,CAAb,GAAiB,aAAjB,GAA+BA,CAAC,CAAC,CAAD,CAAhC,GAAoC,GAApC,GAAwCA,CAAC,CAAC,CAAD,CAAzC,GAA6C,IAApD;AACD,KA5BI;AA8BL;AACA+F,IAAAA,GAAG,EAAc,UA/BZ;AAgCLytO,IAAAA,GAAG,EAAc,UAhCZ;AAiCLigG,IAAAA,QAAQ,EAASxqH,IAjCZ;AAkCL7Z,IAAAA,IAAI,EAAaryL,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CAlCd;AAmCLhE,IAAAA,GAAG,EAAcloM,EAAE,CAAC,QAAD,EAAWksM,IAAX,EAAiB,CAAjB,CAnCd;AAoCLjT,IAAAA,IAAI,EAAaj5L,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CApCd;AAqCL1C,IAAAA,KAAK,EAAYxpM,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CArCd;AAsCL/S,IAAAA,KAAK,EAAYn5L,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CAtCd;AAuCL7S,IAAAA,OAAO,EAAUr5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CAvCd;AAwCL3S,IAAAA,OAAO,EAAUv5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CAxCd;AAyCLzS,IAAAA,YAAY,EAAKz5L,EAAE,CAAC,iBAAD,EAAoBksM,IAApB,EAA0B,CAA1B,CAzCd;AA0CLphN,IAAAA,IAAI,EAAakV,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CA1Cd;AA2CLyqH,IAAAA,cAAc,EAAG32T,EAAE,CAAC,mBAAD,EAAsBksM,IAAtB,EAA4B,CAA5B,CA3Cd;AA4CL0qH,IAAAA,OAAO,EAAU52T,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CA5Cd;AA6CL2qH,IAAAA,MAAM,EAAW72T,EAAE,CAAC,WAAD,EAAcksM,IAAd,EAAoB,CAApB,CA7Cd;AA8CL4qH,IAAAA,OAAO,EAAU92T,EAAE,CAAC,gBAAD,EAAmBksM,IAAnB,EAAyB,CAAzB,CA9Cd;AA+CL6qH,IAAAA,QAAQ,EAAS/2T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CA/Cd;AAgDL8qH,IAAAA,QAAQ,EAASh3T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CAhDd;AAiDL+qH,IAAAA,UAAU,EAAOj3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CAjDd;AAkDLgrH,IAAAA,UAAU,EAAOl3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CAlDd;AAmDLirH,IAAAA,eAAe,EAAEn3T,EAAE,CAAC,oBAAD,EAAuBksM,IAAvB,EAA6B,CAA7B,CAnDd;AAqDL;AACA7wN,IAAAA,MAAM,EAAO2kB,EAAE,CAAC,QAAD,EAAW,IAAX,EAAiB,CAAC,CAAlB,CAtDV;AAuDLrgB,IAAAA,IAAI,EAASqgB,EAAE,CAAC,MAAD,EAAS,IAAT,CAvDV;AAwDLo3T,IAAAA,OAAO,EAAMp3T,EAAE,CAAC,SAAD,EAAY,IAAZ,CAxDV;AAyDLq3T,IAAAA,WAAW,EAAEr3T,EAAE,CAAC,aAAD,EAAgB,IAAhB,CAzDV;AA0DL5a,IAAAA,KAAK,EAAQ4a,EAAE,CAAC,OAAD,EAAU,IAAV,CA1DV;AA4DLxP,IAAAA,OAAO,EAAE,UAAS5U,IAAT,EAAe;AACtB,aAAO,MAAI06U,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAX,GAAqB,qBAA5B;AACD,KA9DI;AAgEL;AACAmS,IAAAA,UAAU,EAAG,YAjER;AAkEL4oH,IAAAA,QAAQ,EAAK,UAlER;AAmEL78C,IAAAA,KAAK,EAAQ95D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CAnEV;AAoELz8P,IAAAA,KAAK,EAAQ/5D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CApEV;AAqEL37S,IAAAA,SAAS,EAAI7a,EAAE,CAAC,WAAD,EAAcw2T,MAAd,CArEV;AAsEL52U,IAAAA,KAAK,EAAQogB,EAAE,CAAC,OAAD,EAAUw2T,MAAV,CAtEV;AAuELl3U,IAAAA,OAAO,EAAM0gB,EAAE,CAAC,SAAD,EAAYw2T,MAAZ,CAvEV;AAwELx/N,IAAAA,IAAI,EAASh3F,EAAE,CAAC,MAAD,EAASw2T,MAAT,EAAiB,CAAjB,CAxEV;AA0EL;AACAj/I,IAAAA,MAAM,EAAGk/I,MA3EJ;AA4EL/sT,IAAAA,IAAI,EAAK1J,EAAE,CAAC,MAAD,EAASy2T,MAAT,CA5EN;AA8EL;AACAa,IAAAA,EAAE,EAAE,UAAS17U,IAAT,EAAe;AACf,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,mCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,oCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,MAAIrzU,CAAC,CAAC,CAAD,CAAL,GAAS,GAAT,GAAaA,CAAC,CAAC,CAAD,CAAd,GAAkB,GAAlB,GAAsBA,CAAC,CAAC,CAAD,CAAvB,GAA2B,GAAlC;AACD;AApFE,GAAP;AAsFD;;;;;;;;;AC7GD;;AACA;;AACA;;;;AAEA,SAASs0U,WAAT,CAAqBh4U,CAArB,EAAwB;AACtB,QAAM0K,CAAC,GAAG1K,CAAC,IAAIA,CAAC,CAAClE,MAAF,GAAW,CAA1B;AACA,SAAO4O,CAAC,KACH1K,CAAC,CAAC,CAAD,CAAD,KAAO,GAAP,IAAcA,CAAC,CAAC0K,CAAD,CAAD,KAAO,GAAtB,IACC1K,CAAC,CAAC,CAAD,CAAD,KAAO,IAAP,IAAeA,CAAC,CAAC0K,CAAD,CAAD,KAAO,IAFnB,CAAD,GAGD1K,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAHC,GAGgB7F,CAHvB;AAID;;AAEc,kBAASywM,GAAT,EAAc;AAC3BA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;AAEA,QAAMk1I,SAAS,GAAGl1I,GAAG,CAACk1I,SAAJ,GAAgB,qBAAMl1I,GAAG,CAACk1I,SAAV,CAAhB,GAAuC,EAAzD;AAAA,QACMC,SAAS,GAAGn1I,GAAG,CAACm1I,SAAJ,GAAgB,qBAAMn1I,GAAG,CAACm1I,SAAV,CAAhB,GAAuC,EADzD;AAAA,QAEMrlL,SAAS,GAAGkwC,GAAG,CAAClwC,SAAJ,IAAiBm2K,kBAFnC;AAAA,QAGMwB,SAAS,GAAG,CAACznI,GAAG,CAACynI,SAAJ,IAAiBpB,kBAAlB,EAA6Bt1G,KAA7B,CAHlB;AAAA,QAIM22G,SAAS,GAAG1nI,GAAG,CAAC0nI,SAJtB;AAAA,QAKMC,QAAQ,GAAG3nI,GAAG,CAAC2nI,QALrB;AAAA,QAMMC,YAAY,GAAG,0BAAWF,SAAX,IACXA,SADW,GAEX1oU,EAAE,IAAK,GAAE0oU,SAAU,KAAI1oU,EAAG,IARpC;;AAUA,MAAI6oU,OAAO,GAAG,EAAd;AAAA,MACIh+R,MAAM,GAAG,EADb;AAAA,MAEIi+R,WAAW,GAAG,CAFlB;;AAIA,WAAS/2G,KAAT,CAAeg3G,GAAf,EAAoB;AAClB,QAAI,wBAASA,GAAT,CAAJ,EAAmB,OAAOA,GAAP;AACnB,UAAMvkJ,SAAS,GAAGwkJ,UAAU,CAACD,GAAG,CAAC/7T,IAAL,CAA5B;AACA,QAAIw3K,SAAS,IAAI,IAAjB,EAAuB,qBAAM,uBAAuBukJ,GAAG,CAAC/7T,IAAjC;AACvB,WAAOw3K,SAAS,CAACukJ,GAAD,CAAhB;AACD;;AAED,QAAMC,UAAU,GAAG;AACjBjK,IAAAA,OAAO,EAAE9jU,CAAC,IAAIA,CAAC,CAAC00L,GADC;AAGjBguF,IAAAA,UAAU,EAAE1iR,CAAC,IAAI;AACf,YAAM+E,EAAE,GAAG/E,CAAC,CAAC3M,IAAb;;AACA,UAAIw6U,WAAW,GAAG,CAAlB,EAAqB;AACnB,eAAO9oU,EAAP;AACD,OAFD,MAEO,IAAI,8BAAem2U,SAAf,EAA0Bn2U,EAA1B,CAAJ,EAAmC;AACxC,eAAO,qBAAM,yBAAyBA,EAA/B,CAAP;AACD,OAFM,MAEA,IAAI,8BAAe8wJ,SAAf,EAA0B9wJ,EAA1B,CAAJ,EAAmC;AACxC,eAAO8wJ,SAAS,CAAC9wJ,EAAD,CAAhB;AACD,OAFM,MAEA,IAAI,8BAAek2U,SAAf,EAA0Bl2U,EAA1B,CAAJ,EAAmC;AACxC,eAAOA,EAAP;AACD,OAFM,MAEA;AACL6oU,QAAAA,OAAO,CAAC7oU,EAAD,CAAP,GAAc,CAAd;AACA,eAAO4oU,YAAY,CAAC5oU,EAAD,CAAnB;AACD;AACF,KAjBgB;AAmBjBs/T,IAAAA,gBAAgB,EAAErkU,CAAC,IAAI;AACnB,YAAMrB,CAAC,GAAG,CAACqB,CAAC,CAACiqU,QAAb;AAAA,YACMxsT,CAAC,GAAGq5M,KAAK,CAAC92N,CAAC,CAACm5L,MAAH,CADf;AAEA,UAAIx6L,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,YAAMz3S,CAAC,GAAG0gM,KAAK,CAAC92N,CAAC,CAACqpM,QAAH,CAAf;;AACA,UAAI5rL,CAAC,KAAKiwT,QAAV,EAAoB;AAClB;AACA99R,QAAAA,MAAM,CAAC09R,WAAW,CAACl3S,CAAD,CAAZ,CAAN,GAAyB,CAAzB;AACD;;AACD,UAAIz3B,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,aAAOpwT,CAAC,IAAI9e,CAAC,GAAG,MAAIy3B,CAAP,GAAW,MAAIA,CAAJ,GAAM,GAAtB,CAAR;AACD,KA9Bc;AAgCjB8tS,IAAAA,cAAc,EAAElkU,CAAC,IAAI;AACjB,UAAIA,CAAC,CAACykU,MAAF,CAAS1yT,IAAT,KAAkB,YAAtB,EAAoC;AAClC,6BAAM,0BAA0B/R,CAAC,CAACykU,MAAF,CAAS1yT,IAAzC;AACD;;AACD,YAAM0yT,MAAM,GAAGzkU,CAAC,CAACykU,MAAF,CAASpxU,IAAxB;AAAA,YACM1B,IAAI,GAAGqO,CAAC,CAACnO,SADf;AAAA,YAEMkkB,EAAE,GAAG,8BAAey3T,SAAf,EAA0B/I,MAA1B,KAAqC+I,SAAS,CAAC/I,MAAD,CAFzD;AAGA,UAAI,CAAC1uT,EAAL,EAAS,qBAAM,4BAA4B0uT,MAAlC;AACT,aAAO,0BAAW1uT,EAAX,IACHA,EAAE,CAACpkB,IAAD,CADC,GAEHokB,EAAE,GAAG,GAAL,GAAWpkB,IAAI,CAAC4J,GAAL,CAASu7N,KAAT,EAAgBphO,IAAhB,CAAqB,GAArB,CAAX,GAAuC,GAF3C;AAGD,KA3Cc;AA6CjBsuU,IAAAA,eAAe,EAAEhkU,CAAC,IACd,MAAMA,CAAC,CAACsiU,QAAF,CAAW/mU,GAAX,CAAeu7N,KAAf,EAAsBphO,IAAtB,CAA2B,GAA3B,CAAN,GAAwC,GA9C3B;AAgDjBuuU,IAAAA,gBAAgB,EAAEjkU,CAAC,IACf,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GAjDvC;AAmDjBq/R,IAAAA,eAAe,EAAEvkU,CAAC,IACd,MAAMA,CAAC,CAACwiM,QAAR,GAAmBs0B,KAAK,CAAC92N,CAAC,CAAC4kU,QAAH,CAAxB,GAAuC,GApD1B;AAsDjBT,IAAAA,qBAAqB,EAAEnkU,CAAC,IACpB,MAAM82N,KAAK,CAAC92N,CAAC,CAACyf,IAAH,CAAX,GACE,GADF,GACQq3M,KAAK,CAAC92N,CAAC,CAAC0kU,UAAH,CADb,GAEE,GAFF,GAEQ5tG,KAAK,CAAC92N,CAAC,CAAC2kU,SAAH,CAFb,GAGE,GA1DW;AA4DjBP,IAAAA,iBAAiB,EAAEpkU,CAAC,IAChB,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GA7DvC;AA+DjBo/R,IAAAA,gBAAgB,EAAEtkU,CAAC,IACf,MAAMA,CAAC,CAACizM,UAAF,CAAa13M,GAAb,CAAiBu7N,KAAjB,EAAwBphO,IAAxB,CAA6B,GAA7B,CAAN,GAA0C,GAhE7B;AAkEjBquU,IAAAA,QAAQ,EAAE/jU,CAAC,IAAI;AACX6tU,MAAAA,WAAW,IAAI,CAAf;AACA,YAAMz+T,CAAC,GAAG0nN,KAAK,CAAC92N,CAAC,CAACjK,GAAH,CAAf;AACA83U,MAAAA,WAAW,IAAI,CAAf;AACA,aAAOz+T,CAAC,GAAG,GAAJ,GAAU0nN,KAAK,CAAC92N,CAAC,CAAClL,KAAH,CAAtB;AACD;AAvEc,GAAnB;;AA0EA,WAASu3U,OAAT,CAAiByB,GAAjB,EAAsB;AACpB,UAAM92U,MAAM,GAAG;AACbm/R,MAAAA,IAAI,EAAKr/D,KAAK,CAACg3G,GAAD,CADD;AAEbF,MAAAA,OAAO,EAAE/4U,MAAM,CAACof,IAAP,CAAY25T,OAAZ,CAFI;AAGbh+R,MAAAA,MAAM,EAAG/6C,MAAM,CAACof,IAAP,CAAY27B,MAAZ;AAHI,KAAf;AAKAg+R,IAAAA,OAAO,GAAG,EAAV;AACAh+R,IAAAA,MAAM,GAAG,EAAT;AACA,WAAO54C,MAAP;AACD;;AAEDq1U,EAAAA,OAAO,CAACmB,SAAR,GAAoBA,SAApB;AACAnB,EAAAA,OAAO,CAACx2K,SAAR,GAAoBA,SAApB;AAEA,SAAOw2K,OAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7HD;;AAgBA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;ACnBA;;AACA;;AACA;;AAEO,SAASwE,WAAT,CAAqBx9U,IAArB,EAA2B1B,IAA3B,EAAiCi+U,KAAjC,EAAwCz6U,MAAxC,EAAgD;AACrD,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B;AAC5B,yBAAM,4DAAN;AACD;;AAED,QAAMhjU,IAAI,GAAGnP,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAArB;AAAA,QACMg7U,QAAQ,GAAGL,wBAAa3uU,IAD9B;;AAGA,MAAI,CAAC,8BAAegvU,QAAf,EAAyB36U,MAAzB,CAAL,EAAuC;AACrC,QAAI;AACFA,MAAAA,MAAM,CAAC26U,QAAD,CAAN,GAAmBF,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBmvU,SAApB,EAAnB;AACD,KAFD,CAEE,OAAO/6T,GAAP,EAAY,CACZ;AACD;AACF;AACF;;AAEM,SAAS47T,aAAT,CAAuBz9U,IAAvB,EAA6B1B,IAA7B,EAAmCi+U,KAAnC,EAA0Cz6U,MAA1C,EAAkD;AACvD,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B,qBAAM,oDAAN;AAC9B,MAAInyU,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B,qBAAM,qDAAN;AAE9B,QAAMhjU,IAAI,GAAGnP,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAArB;AAAA,QACMwyH,KAAK,GAAG31H,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KADtB;AAAA,QAEM+6U,SAAS,GAAGH,yBAAcpoN,KAFhC;;AAIA,MAAI,CAAC,8BAAeuoN,SAAf,EAA0B16U,MAA1B,CAAL,EAAwC;AACtCA,IAAAA,MAAM,CAAC06U,SAAD,CAAN,GAAoBD,KAAK,CAACG,OAAN,CAAcjvU,IAAd,EAAoBkvU,SAApB,CAA8BJ,KAA9B,EAAqCtoN,KAArC,CAApB;AACD;AACF;;AAEM,SAASypN,YAAT,CAAsB19U,IAAtB,EAA4B1B,IAA5B,EAAkCi+U,KAAlC,EAAyCz6U,MAAzC,EAAiD;AACtD,MAAIxD,IAAI,CAAC,CAAD,CAAJ,CAAQogB,IAAR,KAAiB+xT,uBAArB,EAA8B;AAC5B;AACAkN,IAAAA,kBAAkB,CAACpB,KAAD,EAAQz6U,MAAR,EAAgBxD,IAAI,CAAC,CAAD,CAAJ,CAAQmD,KAAxB,CAAlB;AACD,GAHD,MAGO;AACL;AACA,SAAKzB,IAAL,IAAau8U,KAAK,CAAC37E,MAAnB,EAA2B;AACzB+8E,MAAAA,kBAAkB,CAACpB,KAAD,EAAQz6U,MAAR,EAAgB9B,IAAhB,CAAlB;AACD;AACF;AACF;;AAED,SAAS29U,kBAAT,CAA4BpB,KAA5B,EAAmCz6U,MAAnC,EAA2C9B,IAA3C,EAAiD;AAC/C,QAAM49U,SAAS,GAAGN,yBAAct9U,IAAhC;;AACA,MAAI,CAAC,8BAAe8B,MAAf,EAAuB87U,SAAvB,CAAL,EAAwC;AACtC,QAAI;AACF97U,MAAAA,MAAM,CAAC87U,SAAD,CAAN,GAAoBrB,KAAK,CAACsB,QAAN,CAAe79U,IAAf,CAApB;AACD,KAFD,CAEE,OAAO6hB,GAAP,EAAY,CACZ;AACD;AACF;AACF;;;;;;;;;;ACvDD;;AACA;;AACA;;AACA;;AAEO,SAASi8T,QAAT,CAAkB99U,IAAlB,EAAwBqsH,GAAxB,EAA6B;AAClC,MAAIpqH,CAAJ;AACA,SAAO,0BAAWjC,IAAX,IAAmBA,IAAnB,GACH,wBAASA,IAAT,IAAiB,CAACiC,CAAC,GAAGoqH,GAAG,CAACu0I,MAAJ,CAAW5gQ,IAAX,CAAL,KAA0BiC,CAAC,CAACR,KAA7C,GACAkyH,SAFJ;AAGD;;AAEM,SAASoqN,sBAAT,CAAgC/E,OAAhC,EAAyCgF,KAAzC,EAAgDC,QAAhD,EAA0D;AAC/D;AACAD,EAAAA,KAAK,CAACE,WAAN,GAAoBj8U,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAAC8mO,SAAP,GAAmB9mO,CAAC,CAAC8mO,SAAF,EAAnB,GAAmC,CAA5D,CAF+D,CAI/D;;;AACAk1G,EAAAA,QAAQ,CAACE,UAAT,GAAsBT,sBAAtB;AACAO,EAAAA,QAAQ,CAACG,MAAT,GAAkBV,sBAAlB;AACAO,EAAAA,QAAQ,CAAC58D,MAAT,GAAkBq8D,sBAAlB,CAP+D,CAS/D;;AACA,QAAMW,GAAG,GAAGriT,GAAG,IAAI,QACjBA,GAAG,CAACtd,IAAJ,KAAa+xT,uBAAb,GACI,2BAAY6M,yBAActhT,GAAG,CAACv6B,KAA9B,CADJ,GAEI,2BAAY67U,sBAAZ,IAA2B,GAA3B,GAAiCtE,OAAO,CAACh9S,GAAD,CAH3B,IAIf,GAJJ,CAV+D,CAgB/D;AACA;;;AACA,SAAO;AACLmiT,IAAAA,UAAU,EAAE7/U,IAAI,IAAK,oBAAmB+/U,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAAU,GADhD;AAEL8/U,IAAAA,MAAM,EAAE9/U,IAAI,IAAK,GAAE+/U,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAAU,UAF3B;AAGL+iR,IAAAA,MAAM,EAAE/iR,IAAI,IAAK,GAAE+/U,GAAG,CAAC//U,IAAI,CAAC,CAAD,CAAL,CAAU,IAAG06U,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAU;AAH/C,GAAP;AAKD;;;;;;;;;ACnCD;;AACA;;AAMA,SAASggV,SAAT,CAAmBC,UAAnB,EAA+BC,YAA/B,EAA6C;AAC3C,SAAO,UAAS/2C,UAAT,EAAqB8lB,OAArB,EAA8BnjM,KAA9B,EAAqC;AAC1C,QAAIq9K,UAAJ,EAAgB;AACd;AACA,YAAM1kQ,CAAC,GAAG,sBAAS0kQ,UAAT,EAAqB,CAACr9K,KAAK,IAAI,IAAV,EAAgBqmD,OAArC,CAAV;AACA,aAAO1tI,CAAC,IAAIA,CAAC,CAACj2B,IAAF,CAAOyxU,UAAP,EAAmBhxB,OAAnB,CAAZ;AACD,KAJD,MAIO;AACL;AACA,aAAOixB,YAAY,CAACjxB,OAAD,CAAnB;AACD;AACF,GATD;AAUD;;AAEM,MAAMkxB,OAAO,GAAGH,SAAS,CAAC,MAAD,EAAS/8H,cAAT,CAAzB;;AACA,MAAMo9H,SAAS,GAAGL,SAAS,CAAC,QAAD,EAAW/sE,gBAAX,CAA3B;;AACA,MAAMstE,WAAW,GAAGP,SAAS,CAAC,UAAD,EAAax9F,kBAAb,CAA7B;;;;;;;;;;ACtBQ,kBAASz6N,IAAT,EAAe;AAC5B,QAAM+jG,KAAK,GAAG,KAAKqmD,OAAL,CAAarmD,KAA3B;AACA,MAAI3oH,KAAK,GAAG,KAAZ;AAEA,MAAI2oH,KAAJ,EAAW,OAAO/jG,IAAP,EAAa;AACtB,QAAIA,IAAI,KAAK+jG,KAAb,EAAoB;AAAE3oH,MAAAA,KAAK,GAAG,IAAR;AAAc;AAAQ;;AAC5C4kB,IAAAA,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAjB;AACD;AACD,SAAO3oH,KAAP;AACD;;;;;;;;;;;ACTD,SAASgN,GAAT,CAAasvN,EAAb,EAAiBruL,MAAjB,EAAyBpxC,IAAzB,EAA+B;AAC7B,MAAI;AACFy/N,IAAAA,EAAE,CAACruL,MAAD,CAAF,CAAW5wC,KAAX,CAAiBi/N,EAAjB,EAAqB,CAAC,YAAD,EAAe//N,MAAf,CAAsB,GAAG8J,KAAH,CAASvK,IAAT,CAAce,IAAd,CAAtB,CAArB;AACD,GAFD,CAEE,OAAOujB,GAAP,EAAY;AACZk8M,IAAAA,EAAE,CAACl9N,IAAH,CAAQghB,GAAR;AACD;;AACD,SAAOvjB,IAAI,CAACA,IAAI,CAACP,MAAL,GAAY,CAAb,CAAX;AACD;;AAEM,SAAS8C,IAAT,GAAgB;AACrB,SAAO4N,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,MAAxB,EAAgCvjO,SAAhC,CAAV;AACD;;AAEM,SAAS0jB,IAAT,GAAgB;AACrB,SAAOzT,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,MAAxB,EAAgCvjO,SAAhC,CAAV;AACD;;AAEM,SAAS+yB,KAAT,GAAiB;AACtB,SAAO9iB,GAAG,CAAC,KAAKgiK,OAAL,CAAasxD,QAAd,EAAwB,OAAxB,EAAiCvjO,SAAjC,CAAV;AACD;;;;;;;;;;ACnBD;;AAEA;AACA,SAASwgV,uBAAT,CAAiCC,YAAjC,EAA+C;AAC7C,QAAMl6U,GAAG,GAAGk6U,YAAY,GAAG,GAA3B;;AACA,MAAIl6U,GAAG,IAAI,OAAX,EAAoB;AAClB,WAAOA,GAAG,GAAG,KAAb;AACD;;AACD,SAAOP,IAAI,CAAC0Q,GAAL,CAAS,CAACnQ,GAAG,GAAG,KAAP,IAAgB,KAAzB,EAAgC,GAAhC,CAAP;AACD;;AAEM,SAASm6U,SAAT,CAAmBjrF,KAAnB,EAA0B;AAC/B,QAAM/oP,CAAC,GAAG,kBAAI+oP,KAAJ,CAAV;AAAA,QACMxnP,CAAC,GAAGuyU,uBAAuB,CAAC9zU,CAAC,CAACuB,CAAH,CADjC;AAAA,QAEMygC,CAAC,GAAG8xS,uBAAuB,CAAC9zU,CAAC,CAACgiC,CAAH,CAFjC;AAAA,QAGM1gC,CAAC,GAAGwyU,uBAAuB,CAAC9zU,CAAC,CAACsB,CAAH,CAHjC;AAIA,SAAO,SAASC,CAAT,GAAa,SAASygC,CAAtB,GAA0B,SAAS1gC,CAA1C;AACD,EAED;;;AACO,SAAS2yU,QAAT,CAAkBC,MAAlB,EAA0BC,MAA1B,EAAkC;AACvC,QAAMC,IAAI,GAAGJ,SAAS,CAACE,MAAD,CAAtB;AAAA,QACMG,IAAI,GAAGL,SAAS,CAACG,MAAD,CADtB;AAAA,QAEMG,IAAI,GAAGh7U,IAAI,CAACK,GAAL,CAASy6U,IAAT,EAAeC,IAAf,CAFb;AAAA,QAGME,IAAI,GAAGj7U,IAAI,CAACG,GAAL,CAAS26U,IAAT,EAAeC,IAAf,CAHb;AAIA,SAAO,CAACC,IAAI,GAAG,IAAR,KAAiBC,IAAI,GAAG,IAAxB,CAAP;AACD;;;;;;;;;AC1BD;;AAEe,oBAAW;AACxB,QAAMnhV,IAAI,GAAG,GAAGwJ,KAAH,CAASvK,IAAT,CAAciB,SAAd,CAAb;AACAF,EAAAA,IAAI,CAACknC,OAAL,CAAa,EAAb;AACA,SAAOs0J,iBAAOh7L,KAAP,CAAa,IAAb,EAAmBR,IAAnB,CAAP;AACD;;;;;;;;;ACND;;AACA;;AAEA,SAAS6X,KAAT,CAAexQ,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO7G,CAAC,KAAK6G,CAAN,IAAW7G,CAAC,KAAKA,CAAN,IAAW6G,CAAC,KAAKA,CAA5B,GAAgC,IAAhC,GACH,uBAAQ7G,CAAR,IACE,uBAAQ6G,CAAR,KAAc7G,CAAC,CAAC5H,MAAF,KAAayO,CAAC,CAACzO,MAA7B,GAAsC2hV,UAAU,CAAC/5U,CAAD,EAAI6G,CAAJ,CAAhD,GAAyD,KAD3D,GAGA,wBAAS7G,CAAT,KAAe,wBAAS6G,CAAT,CAAf,GAA6BmzU,WAAW,CAACh6U,CAAD,EAAI6G,CAAJ,CAAxC,GACA,KALJ;AAMD;;AAED,SAASkzU,UAAT,CAAoB/5U,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,OAAK,IAAI/N,CAAC,GAAC,CAAN,EAASkO,CAAC,GAAChH,CAAC,CAAC5H,MAAlB,EAA0BU,CAAC,GAACkO,CAA5B,EAA+B,EAAElO,CAAjC,EAAoC;AAClC,QAAI,CAAC0X,KAAK,CAACxQ,CAAC,CAAClH,CAAD,CAAF,EAAO+N,CAAC,CAAC/N,CAAD,CAAR,CAAV,EAAwB,OAAO,KAAP;AACzB;;AACD,SAAO,IAAP;AACD;;AAED,SAASkhV,WAAT,CAAqBh6U,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,OAAK,MAAM9J,GAAX,IAAkBiD,CAAlB,EAAqB;AACnB,QAAI,CAACwQ,KAAK,CAACxQ,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,CAAV,EAA4B,OAAO,KAAP;AAC7B;;AACD,SAAO,IAAP;AACD;;AAED,SAASk9U,eAAT,CAAyBj4D,KAAzB,EAAgC;AAC9B,SAAOviQ,CAAC,IAAIu6T,WAAW,CAACh4D,KAAD,EAAQviQ,CAAR,CAAvB;AACD;;AAEc,kBAASplB,IAAT,EAAe8+N,MAAf,EAAuBltJ,MAAvB,EAA+BiuQ,MAA/B,EAAuC9gH,MAAvC,EAA+Cl2N,MAA/C,EAAuD;AACpE,QAAMk1N,EAAE,GAAG,KAAKttD,OAAL,CAAasxD,QAAxB;AAAA,QACMt0N,IAAI,GAAG,KAAKgjK,OAAL,CAAahjK,IAAb,CAAkBzN,IAAlB,CADb;AAAA,QAEMypB,KAAK,GAAGhc,IAAI,CAACgc,KAFnB;AAAA,QAGMu2M,KAAK,GAAGjC,EAAE,CAACiC,KAAH,EAHd;AAKA,MAAIwE,OAAO,GAAG/2N,IAAI,CAAC+2N,OAAnB;AAAA,MACInpJ,SADJ;AAAA,MACe34E,GADf;;AAGA,MAAIq7N,EAAE,CAAC+hH,QAAH,KAAgB,KAAhB,IAAyB,EAAEr2T,KAAK,CAAChoB,KAAN,CAAY1D,MAAZ,IAAsB+gO,MAAtB,IAAgC+gH,MAAlC,CAA7B,EAAwE;AACtE;AACA,WAAO,CAAP;AACD;;AAED,MAAI,CAACr7G,OAAD,IAAYA,OAAO,CAACxE,KAAR,GAAgBA,KAAhC,EAAuC;AACrCvyN,IAAAA,IAAI,CAAC+2N,OAAL,GAAgBA,OAAO,GAAGzG,EAAE,CAACW,SAAH,EAA1B;AACA8F,IAAAA,OAAO,CAACxE,KAAR,GAAgBA,KAAhB;AACAjC,IAAAA,EAAE,CAACoG,QAAH,CAAY,MAAM;AAChB12N,MAAAA,IAAI,CAAC+xN,QAAL,GAAgB,IAAhB;AACAzB,MAAAA,EAAE,CAACkB,KAAH,CAASx1M,KAAT,EAAgB+6M,OAAhB,EAAyBpmO,GAAzB;AACD,KAHD,EAGG,IAHH,EAGS,CAHT;AAID;;AAED,MAAIwzE,MAAJ,EAAY;AACVyJ,IAAAA,SAAS,GAAGzJ,MAAM,KAAK,IAAX,GAAkBihI,gBAAlB,GACP,uBAAQjhI,MAAR,KAAmB,2BAAQA,MAAR,CAApB,GAAuCA,MAAvC,GACAguQ,eAAe,CAAChuQ,MAAD,CAFnB;AAGA4yJ,IAAAA,OAAO,CAAC5yJ,MAAR,CAAeyJ,SAAf;AACD;;AAED,MAAIyjJ,MAAJ,EAAY;AACV0F,IAAAA,OAAO,CAAC1F,MAAR,CAAeA,MAAf;AACD;;AAED,MAAI+gH,MAAJ,EAAY;AACVxkQ,IAAAA,SAAS,GAAGukQ,eAAe,CAACC,MAAD,CAA3B;;AACA,QAAIp2T,KAAK,CAAChoB,KAAN,CAAYge,IAAZ,CAAiB47D,SAAjB,CAAJ,EAAiC;AAC/BmpJ,MAAAA,OAAO,CAAC5yJ,MAAR,CAAeyJ,SAAf;AACD,KAFD,MAEO;AACLmpJ,MAAAA,OAAO,CAAC1F,MAAR,CAAe+gH,MAAf;AACD;AACF;;AAED,MAAI9gH,MAAJ,EAAY;AACV,SAAKr8N,GAAL,IAAYmG,MAAZ,EAAoB;AAClB27N,MAAAA,OAAO,CAACzF,MAAR,CAAeA,MAAf,EAAuBr8N,GAAvB,EAA4BmG,MAAM,CAACnG,GAAD,CAAlC;AACD;AACF;;AAED,SAAO,CAAP;AACD;;;;;;;;;;AChFM,SAASq9U,aAAT,CAAuBl8N,KAAvB,EAA8B;AACnC,QAAM1hH,CAAC,GAAG0hH,KAAK,CAACm8N,OAAhB;AAAA,QACMz1T,EAAE,GAAGpoB,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAAL,GAAen9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAD/B;AAAA,QAEM/7P,EAAE,GAAGphB,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAAL,GAAer9Q,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAF/B;AAGA,SAAOh7Q,IAAI,CAACqC,IAAL,CAAU0jB,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAAzB,CAAP;AACD;;AAEM,SAAS08T,UAAT,CAAoBp8N,KAApB,EAA2B;AAChC,QAAM1hH,CAAC,GAAG0hH,KAAK,CAACm8N,OAAhB;AACA,SAAOx7U,IAAI,CAACuQ,KAAL,CACL5S,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OAAL,GAAer9Q,CAAC,CAAC,CAAD,CAAD,CAAKq9Q,OADf,EAELr9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAAL,GAAen9Q,CAAC,CAAC,CAAD,CAAD,CAAKm9Q,OAFf,CAAP;AAID;;;;;;;;;AEbD;;AAEe,kBAASz2Q,MAAT,EAAiB;AAC9B,MAAI8D,CAAC,GAAG9D,MAAM,CAAC9K,MAAf;AACA,SAAO,UAASoE,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAAC+H,KAAL,CAAW,CAAC,CAACpK,CAAC,IAAI,CAAN,IAAW,CAAX,GAAe,EAAEA,CAAjB,GAAqBA,CAAtB,IAA2BwK,CAAtC,CAAR;AAAA,QACI6wE,EAAE,GAAG30E,MAAM,CAAC,CAACpK,CAAC,GAAGkO,CAAJ,GAAQ,CAAT,IAAcA,CAAf,CADf;AAAA,QAEIqwE,EAAE,GAAGn0E,MAAM,CAACpK,CAAC,GAAGkO,CAAL,CAFf;AAAA,QAGIswE,EAAE,GAAGp0E,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAHf;AAAA,QAII4qP,EAAE,GAAG1uP,MAAM,CAAC,CAACpK,CAAC,GAAG,CAAL,IAAUkO,CAAX,CAJf;AAKA,WAAO,kBAAM,CAACxK,CAAC,GAAG1D,CAAC,GAAGkO,CAAT,IAAcA,CAApB,EAAuB6wE,EAAvB,EAA2BR,EAA3B,EAA+BC,EAA/B,EAAmCs6K,EAAnC,CAAP;AACD,GAPD;AAQD;;;;;;;;;;;AEZD;;;;AAEA,SAAShjK,MAAT,CAAgB5uF,CAAhB,EAAmB2F,CAAnB,EAAsB;AACpB,SAAO,UAASnJ,CAAT,EAAY;AACjB,WAAOwD,CAAC,GAAGxD,CAAC,GAAGmJ,CAAf;AACD,GAFD;AAGD;;AAED,SAASksP,WAAT,CAAqB7xP,CAArB,EAAwB6G,CAAxB,EAA2B2W,CAA3B,EAA8B;AAC5B,SAAOxd,CAAC,GAAGnB,IAAI,CAAC0Q,GAAL,CAASvP,CAAT,EAAYwd,CAAZ,CAAJ,EAAoB3W,CAAC,GAAGhI,IAAI,CAAC0Q,GAAL,CAAS1I,CAAT,EAAY2W,CAAZ,IAAiBxd,CAAzC,EAA4Cwd,CAAC,GAAG,IAAIA,CAApD,EAAuD,UAAShhB,CAAT,EAAY;AACxE,WAAOqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,GAAGxD,CAAC,GAAGqK,CAAjB,EAAoB2W,CAApB,CAAP;AACD,GAFD;AAGD;;AAEM,SAASs0O,GAAT,CAAa9xP,CAAb,EAAgB6G,CAAhB,EAAmB;AACxB,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAC,GAAG,GAAJ,IAAWA,CAAC,GAAG,CAAC,GAAhB,GAAsBA,CAAC,GAAG,MAAM9G,IAAI,CAACsG,KAAL,CAAWQ,CAAC,GAAG,GAAf,CAAhC,GAAsDA,CAA1D,CAAT,GAAwE,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAhF;AACD;;AAEM,SAASk4J,KAAT,CAAe16I,CAAf,EAAkB;AACvB,SAAO,CAACA,CAAC,GAAG,CAACA,CAAN,MAAa,CAAb,GAAiBu0O,OAAjB,GAA2B,UAAS/xP,CAAT,EAAY6G,CAAZ,EAAe;AAC/C,WAAOA,CAAC,GAAG7G,CAAJ,GAAQ6xP,WAAW,CAAC7xP,CAAD,EAAI6G,CAAJ,EAAO2W,CAAP,CAAnB,GAA+B,uBAAS9Z,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAAtC;AACD,GAFD;AAGD;;AAEc,SAAS+xP,OAAT,CAAiB/xP,CAAjB,EAAoB6G,CAApB,EAAuB;AACpC,MAAIlB,CAAC,GAAGkB,CAAC,GAAG7G,CAAZ;AACA,SAAO2F,CAAC,GAAGipF,MAAM,CAAC5uF,CAAD,EAAI2F,CAAJ,CAAT,GAAkB,uBAASjC,KAAK,CAAC1D,CAAD,CAAL,GAAW6G,CAAX,GAAe7G,CAAxB,CAA1B;AACD;;;;;;;;;AC5BD;;AACA;;AACA;;AACA;;;;;;;;eAEgB,SAASgyP,QAAT,CAAkBx0O,CAAlB,EAAqB;AACnC,MAAI8wO,KAAK,GAAG,kBAAM9wO,CAAN,CAAZ;;AAEA,WAASgxO,GAAT,CAAa5pP,KAAb,EAAoB6F,GAApB,EAAyB;AACvB,QAAI3D,CAAC,GAAGwnP,KAAK,CAAC,CAAC1pP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BkC,CAA3B,EAA8B,CAAC2D,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB3D,CAApD,CAAb;AAAA,QACIygC,CAAC,GAAG+mN,KAAK,CAAC1pP,KAAK,CAAC2iC,CAAP,EAAU98B,GAAG,CAAC88B,CAAd,CADb;AAAA,QAEI1gC,CAAC,GAAGynP,KAAK,CAAC1pP,KAAK,CAACiC,CAAP,EAAU4D,GAAG,CAAC5D,CAAd,CAFb;AAAA,QAGIyoP,OAAO,GAAG,oBAAQ1qP,KAAK,CAAC0qP,OAAd,EAAuB7kP,GAAG,CAAC6kP,OAA3B,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACkC,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC2iC,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD;;AAED4pP,EAAAA,GAAG,CAACt2F,KAAJ,GAAY85F,QAAZ;AAEA,SAAOxD,GAAP;AACD,CApBc,CAoBZ,CApBY;;;;AAsBf,SAASyD,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,SAAO,UAASC,MAAT,EAAiB;AACtB,QAAInrP,CAAC,GAAGmrP,MAAM,CAAC/5P,MAAf;AAAA,QACI0O,CAAC,GAAG,IAAIlO,KAAJ,CAAUoO,CAAV,CADR;AAAA,QAEIugC,CAAC,GAAG,IAAI3uC,KAAJ,CAAUoO,CAAV,CAFR;AAAA,QAGIH,CAAC,GAAG,IAAIjO,KAAJ,CAAUoO,CAAV,CAHR;AAAA,QAIIlO,CAJJ;AAAA,QAIOw1P,KAJP;;AAKA,SAAKx1P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBw1P,MAAAA,KAAK,GAAG,kBAAS6D,MAAM,CAACr5P,CAAD,CAAf,CAAR;AACAgO,MAAAA,CAAC,CAAChO,CAAD,CAAD,GAAOw1P,KAAK,CAACxnP,CAAN,IAAW,CAAlB;AACAygC,MAAAA,CAAC,CAACzuC,CAAD,CAAD,GAAOw1P,KAAK,CAAC/mN,CAAN,IAAW,CAAlB;AACA1gC,MAAAA,CAAC,CAAC/N,CAAD,CAAD,GAAOw1P,KAAK,CAACznP,CAAN,IAAW,CAAlB;AACD;;AACDC,IAAAA,CAAC,GAAGorP,MAAM,CAACprP,CAAD,CAAV;AACAygC,IAAAA,CAAC,GAAG2qN,MAAM,CAAC3qN,CAAD,CAAV;AACA1gC,IAAAA,CAAC,GAAGqrP,MAAM,CAACrrP,CAAD,CAAV;AACAynP,IAAAA,KAAK,CAACgB,OAAN,GAAgB,CAAhB;AACA,WAAO,UAAS9yP,CAAT,EAAY;AACjB8xP,MAAAA,KAAK,CAACxnP,CAAN,GAAUA,CAAC,CAACtK,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAAC/mN,CAAN,GAAUA,CAAC,CAAC/qC,CAAD,CAAX;AACA8xP,MAAAA,KAAK,CAACznP,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACA,aAAO8xP,KAAK,GAAG,EAAf;AACD,KALD;AAMD,GAtBD;AAuBD;;AAEM,IAAI8D,QAAQ,GAAGH,SAAS,CAAC3kM,cAAD,CAAxB;;AACA,IAAI+kM,cAAc,GAAGJ,SAAS,CAACK,oBAAD,CAA9B;;;;;;;;;;;AEtDP;;AACA;;;;;;;;AAEe,kBAAStyP,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,SAAO,CAAC,gCAAcA,CAAd,IAAmB4rP,oBAAnB,GAAiCC,YAAlC,EAAgD1yP,CAAhD,EAAmD6G,CAAnD,CAAP;AACD;;AAEM,SAAS6rP,YAAT,CAAsB1yP,CAAtB,EAAyB6G,CAAzB,EAA4B;AACjC,MAAI8rP,EAAE,GAAG9rP,CAAC,GAAGA,CAAC,CAACzO,MAAL,GAAc,CAAxB;AAAA,MACIw6P,EAAE,GAAG5yP,CAAC,GAAGnB,IAAI,CAACG,GAAL,CAAS2zP,EAAT,EAAa3yP,CAAC,CAAC5H,MAAf,CAAH,GAA4B,CADtC;AAAA,MAEI6G,CAAC,GAAG,IAAIrG,KAAJ,CAAUg6P,EAAV,CAFR;AAAA,MAGIrtP,CAAC,GAAG,IAAI3M,KAAJ,CAAU+5P,EAAV,CAHR;AAAA,MAII75P,CAJJ;;AAMA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyBmG,CAAC,CAACnG,CAAD,CAAD,GAAO,oBAAMkH,CAAC,CAAClH,CAAD,CAAP,EAAY+N,CAAC,CAAC/N,CAAD,CAAb,CAAP;;AACzB,SAAOA,CAAC,GAAG65P,EAAX,EAAe,EAAE75P,CAAjB,EAAoByM,CAAC,CAACzM,CAAD,CAAD,GAAO+N,CAAC,CAAC/N,CAAD,CAAR;;AAEpB,SAAO,UAAS0D,CAAT,EAAY;AACjB,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG85P,EAAhB,EAAoB,EAAE95P,CAAtB,EAAyByM,CAAC,CAACzM,CAAD,CAAD,GAAOmG,CAAC,CAACnG,CAAD,CAAD,CAAK0D,CAAL,CAAP;;AACzB,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;AGrBD;;;;AAEe,kBAASvF,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,EAAR;AAAA,MACIyM,CAAC,GAAG,EADR;AAAA,MAEI6Q,CAFJ;AAIA,MAAIpW,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;AACzC,MAAI6G,CAAC,KAAK,IAAN,IAAc,OAAOA,CAAP,KAAa,QAA/B,EAAyCA,CAAC,GAAG,EAAJ;;AAEzC,OAAKuP,CAAL,IAAUvP,CAAV,EAAa;AACX,QAAIuP,CAAC,IAAIpW,CAAT,EAAY;AACVlH,MAAAA,CAAC,CAACsd,CAAD,CAAD,GAAO,oBAAMpW,CAAC,CAACoW,CAAD,CAAP,EAAYvP,CAAC,CAACuP,CAAD,CAAb,CAAP;AACD,KAFD,MAEO;AACL7Q,MAAAA,CAAC,CAAC6Q,CAAD,CAAD,GAAOvP,CAAC,CAACuP,CAAD,CAAR;AACD;AACF;;AAED,SAAO,UAAS5Z,CAAT,EAAY;AACjB,SAAK4Z,CAAL,IAAUtd,CAAV,EAAayM,CAAC,CAAC6Q,CAAD,CAAD,GAAOtd,CAAC,CAACsd,CAAD,CAAD,CAAK5Z,CAAL,CAAP;;AACb,WAAO+I,CAAP;AACD,GAHD;AAID;;;;;;;;;ACtBD;;;;AAEA,IAAIstP,GAAG,GAAG,6CAAV;AAAA,IACIC,GAAG,GAAG,IAAIr/H,MAAJ,CAAWo/H,GAAG,CAACjkM,MAAf,EAAuB,GAAvB,CADV;;AAGA,SAASlgB,IAAT,CAAc7nC,CAAd,EAAiB;AACf,SAAO,YAAW;AAChB,WAAOA,CAAP;AACD,GAFD;AAGD;;AAED,SAASihF,GAAT,CAAajhF,CAAb,EAAgB;AACd,SAAO,UAASrK,CAAT,EAAY;AACjB,WAAOqK,CAAC,CAACrK,CAAD,CAAD,GAAO,EAAd;AACD,GAFD;AAGD;;AAEc,kBAASwD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIksP,EAAE,GAAGF,GAAG,CAACh1M,SAAJ,GAAgBi1M,GAAG,CAACj1M,SAAJ,GAAgB,CAAzC;AAAA,MAA4C;AACxCm1M,EAAAA,EADJ;AAAA,MACQ;AACJC,EAAAA,EAFJ;AAAA,MAEQ;AACJC,EAAAA,EAHJ;AAAA,MAGQ;AACJp6P,EAAAA,CAAC,GAAG,CAAC,CAJT;AAAA,MAIY;AACRwD,EAAAA,CAAC,GAAG,EALR;AAAA,MAKY;AACRk0F,EAAAA,CAAC,GAAG,EANR,CAD4B,CAOhB;AAEZ;;AACAxwF,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR,EAAY6G,CAAC,GAAGA,CAAC,GAAG,EAApB,CAV4B,CAY5B;;AACA,SAAO,CAACmsP,EAAE,GAAGH,GAAG,CAAC5lO,IAAJ,CAASjtB,CAAT,CAAN,MACCizP,EAAE,GAAGH,GAAG,CAAC7lO,IAAJ,CAASpmB,CAAT,CADN,CAAP,EAC2B;AACzB,QAAI,CAACqsP,EAAE,GAAGD,EAAE,CAACr0P,KAAT,IAAkBm0P,EAAtB,EAA0B;AAAE;AAC1BG,MAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,EAAYG,EAAZ,CAAL;AACA,UAAI52P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,WACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN;;AACD,QAAI,CAACF,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAR,OAAkBC,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAzB,CAAJ,EAAmC;AAAE;AACnC,UAAI32P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQm6P,EAAR,CAAV,CAAsB;AAAtB,WACK32P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASm6P,EAAT;AACN,KAHD,MAGO;AAAE;AACP32P,MAAAA,CAAC,CAAC,EAAExD,CAAH,CAAD,GAAS,IAAT;AACA03F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAJ;AAAOmG,QAAAA,CAAC,EAAE,qBAAO+zP,EAAP,EAAWC,EAAX;AAAV,OAAP;AACD;;AACDF,IAAAA,EAAE,GAAGD,GAAG,CAACj1M,SAAT;AACD,GA5B2B,CA8B5B;;;AACA,MAAIk1M,EAAE,GAAGlsP,CAAC,CAACzO,MAAX,EAAmB;AACjB86P,IAAAA,EAAE,GAAGrsP,CAAC,CAAC1E,KAAF,CAAQ4wP,EAAR,CAAL;AACA,QAAIz2P,CAAC,CAACxD,CAAD,CAAL,EAAUwD,CAAC,CAACxD,CAAD,CAAD,IAAQo6P,EAAR,CAAV,CAAsB;AAAtB,SACK52P,CAAC,CAAC,EAAExD,CAAH,CAAD,GAASo6P,EAAT;AACN,GAnC2B,CAqC5B;AACA;;;AACA,SAAO52P,CAAC,CAAClE,MAAF,GAAW,CAAX,GAAgBo4F,CAAC,CAAC,CAAD,CAAD,GACjB1I,GAAG,CAAC0I,CAAC,CAAC,CAAD,CAAD,CAAKvxF,CAAN,CADc,GAEjByvC,IAAI,CAAC7nC,CAAD,CAFH,IAGAA,CAAC,GAAG2pF,CAAC,CAACp4F,MAAN,EAAc,UAASoE,CAAT,EAAY;AACzB,SAAK,IAAI1D,CAAC,GAAG,CAAR,EAAW2rB,CAAhB,EAAmB3rB,CAAC,GAAG+N,CAAvB,EAA0B,EAAE/N,CAA5B,EAA+BwD,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAC/B,WAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,GANA,CAAP;AAOD;;;;;;;;;AC/DD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,kBAASsD,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAIrK,CAAC,GAAG,OAAOqK,CAAf;AAAA,MAAkBtB,CAAlB;AACA,SAAOsB,CAAC,IAAI,IAAL,IAAarK,CAAC,KAAK,SAAnB,GAA+B,uBAASqK,CAAT,CAA/B,GACD,CAACrK,CAAC,KAAK,QAAN,GAAiBs4M,eAAjB,GACDt4M,CAAC,KAAK,QAAN,GAAkB,CAAC+I,CAAC,GAAG,oBAAMsB,CAAN,CAAL,KAAkBA,CAAC,GAAGtB,CAAJ,EAAOipP,YAAzB,IAAgCz5C,eAAlD,GACAluM,CAAC,YAAYynP,cAAb,GAAqBE,YAArB,GACA3nP,CAAC,YAAY+nE,IAAb,GAAoBwgI,aAApB,GACA,gCAAcvoM,CAAd,IAAmB4rP,oBAAnB,GACA75P,KAAK,CAACuH,OAAN,CAAc0G,CAAd,IAAmB6rP,mBAAnB,GACA,OAAO7rP,CAAC,CAACu3M,OAAT,KAAqB,UAArB,IAAmC,OAAOv3M,CAAC,CAAC4B,QAAT,KAAsB,UAAzD,IAAuE/E,KAAK,CAACmD,CAAD,CAA5E,GAAkFs5L,eAAlF,GACA2U,eAPA,EAOQ90M,CAPR,EAOW6G,CAPX,CADN;AASD;;;;;;;;;AErBD;;AAEe,kBAAS7G,CAAT,EAAY6G,CAAZ,EAAe;AAC5B,MAAI/N,CAAC,GAAG,gBAAI,CAACkH,CAAL,EAAQ,CAAC6G,CAAT,CAAR;AACA,SAAO,UAASrK,CAAT,EAAY;AACjB,QAAIyC,CAAC,GAAGnG,CAAC,CAAC0D,CAAD,CAAT;AACA,WAAOyC,CAAC,GAAG,MAAMJ,IAAI,CAAC+H,KAAL,CAAW3H,CAAC,GAAG,GAAf,CAAjB;AACD,GAHD;AAID;;;;;;;;;;AGRD;;;;;;AAEA,IAAIw0P,OAAJ;AAEA;;AACO,SAASC,QAAT,CAAkB53P,KAAlB,EAAyB;AAC9B,QAAMy0F,CAAC,GAAG,KAAK,OAAOojK,SAAP,KAAqB,UAArB,GAAkCA,SAAlC,GAA8CC,eAAnD,EAAoE93P,KAAK,GAAG,EAA5E,CAAV;AACA,SAAOy0F,CAAC,CAACsjK,UAAF,GAAe96H,mBAAf,GAA0B,wBAAUxoC,CAAC,CAACvwF,CAAZ,EAAeuwF,CAAC,CAAC1pF,CAAjB,EAAoB0pF,CAAC,CAAChrF,CAAtB,EAAyBgrF,CAAC,CAAC5qF,CAA3B,EAA8B4qF,CAAC,CAAC/4F,CAAhC,EAAmC+4F,CAAC,CAAC9rF,CAArC,CAAjC;AACD;;AAEM,SAASqvP,QAAT,CAAkBh4P,KAAlB,EAAyB;AAC9B,MAAIA,KAAK,IAAI,IAAb,EAAmB,OAAOi9H,mBAAP;AACnB,MAAI,CAAC06H,OAAL,EAAcA,OAAO,GAAGvtO,QAAQ,CAAC6tO,eAAT,CAAyB,4BAAzB,EAAuD,GAAvD,CAAV;AACdN,EAAAA,OAAO,CAACO,YAAR,CAAqB,WAArB,EAAkCl4P,KAAlC;AACA,MAAI,EAAEA,KAAK,GAAG23P,OAAO,CAAC1xE,SAAR,CAAkBkyE,OAAlB,CAA0BC,WAA1B,EAAV,CAAJ,EAAwD,OAAOn7H,mBAAP;AACxDj9H,EAAAA,KAAK,GAAGA,KAAK,CAACslN,MAAd;AACA,SAAO,wBAAUtlN,KAAK,CAACkE,CAAhB,EAAmBlE,KAAK,CAAC+K,CAAzB,EAA4B/K,KAAK,CAACyJ,CAAlC,EAAqCzJ,KAAK,CAAC6J,CAA3C,EAA8C7J,KAAK,CAACtE,CAApD,EAAuDsE,KAAK,CAAC2I,CAA7D,CAAP;AACD;;;;;;;;;ACjBD;;AACA;;;;AAEA,SAAS0vP,oBAAT,CAA8Bn5M,KAA9B,EAAqCo5M,OAArC,EAA8CC,OAA9C,EAAuDC,QAAvD,EAAiE;AAE/D,WAASpxO,GAAT,CAAa5mB,CAAb,EAAgB;AACd,WAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC4mB,GAAF,KAAU,GAArB,GAA2B,EAAlC;AACD;;AAED,WAASq2L,SAAT,CAAmBg7C,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAmCp4P,CAAnC,EAAsCk0F,CAAtC,EAAyC;AACvC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAO,YAAP,EAAqB,IAArB,EAA2Bq7P,OAA3B,EAAoC,IAApC,EAA0CC,OAA1C,CAAR;AACA7jK,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,IAAIC,EAAV,EAAc;AACnBp4P,MAAAA,CAAC,CAACvD,IAAF,CAAO,eAAe07P,EAAf,GAAoBL,OAApB,GAA8BM,EAA9B,GAAmCL,OAA1C;AACD;AACF;;AAED,WAAShB,MAAT,CAAgBrzP,CAAhB,EAAmB6G,CAAnB,EAAsBvK,CAAtB,EAAyBk0F,CAAzB,EAA4B;AAC1B,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX,UAAI7G,CAAC,GAAG6G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CAAjB,KAAgC,IAAIA,CAAC,GAAG7G,CAAJ,GAAQ,GAAZ,EAAiBA,CAAC,IAAI,GAAL,CADtC,CACgD;;AAC3DwwF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAhB,EAA2B,IAA3B,EAAiCg4P,QAAjC,IAA6C,CAAjD;AAAoDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAvD,OAAP;AACD,KAHD,MAGO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,SAAT,GAAqBuK,CAArB,GAAyBytP,QAAhC;AACD;AACF;;AAED,WAAShB,KAAT,CAAetzP,CAAf,EAAkB6G,CAAlB,EAAqBvK,CAArB,EAAwBk0F,CAAxB,EAA2B;AACzB,QAAIxwF,CAAC,KAAK6G,CAAV,EAAa;AACX2pF,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgCg4P,QAAhC,IAA4C,CAAhD;AAAmDr1P,QAAAA,CAAC,EAAE,qBAAOe,CAAP,EAAU6G,CAAV;AAAtD,OAAP;AACD,KAFD,MAEO,IAAIA,CAAJ,EAAO;AACZvK,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBuK,CAApB,GAAwBytP,QAA/B;AACD;AACF;;AAED,WAAS3lP,KAAT,CAAe4lP,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+Bp4P,CAA/B,EAAkCk0F,CAAlC,EAAqC;AACnC,QAAI+jK,EAAE,KAAKE,EAAP,IAAaD,EAAE,KAAKE,EAAxB,EAA4B;AAC1B,UAAI57P,CAAC,GAAGwD,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAhB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,IAArC,EAA2C,GAA3C,CAAR;AACAk0F,MAAAA,CAAC,CAACz3F,IAAF,CAAO;AAACD,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOs1P,EAAP,EAAWE,EAAX;AAAd,OAAP,EAAsC;AAAC37P,QAAAA,CAAC,EAAEA,CAAC,GAAG,CAAR;AAAWmG,QAAAA,CAAC,EAAE,qBAAOu1P,EAAP,EAAWE,EAAX;AAAd,OAAtC;AACD,KAHD,MAGO,IAAID,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AAC/Bp4P,MAAAA,CAAC,CAACvD,IAAF,CAAOmqB,GAAG,CAAC5mB,CAAD,CAAH,GAAS,QAAT,GAAoBm4P,EAApB,GAAyB,GAAzB,GAA+BC,EAA/B,GAAoC,GAA3C;AACD;AACF;;AAED,SAAO,UAAS10P,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIvK,CAAC,GAAG,EAAR;AAAA,QAAY;AACRk0F,IAAAA,CAAC,GAAG,EADR,CADoB,CAER;;AACZxwF,IAAAA,CAAC,GAAGg7C,KAAK,CAACh7C,CAAD,CAAT,EAAc6G,CAAC,GAAGm0C,KAAK,CAACn0C,CAAD,CAAvB;AACA0yM,IAAAA,SAAS,CAACv5M,CAAC,CAACmzP,UAAH,EAAenzP,CAAC,CAACozP,UAAjB,EAA6BvsP,CAAC,CAACssP,UAA/B,EAA2CtsP,CAAC,CAACusP,UAA7C,EAAyD92P,CAAzD,EAA4Dk0F,CAA5D,CAAT;AACA6iK,IAAAA,MAAM,CAACrzP,CAAC,CAACqzP,MAAH,EAAWxsP,CAAC,CAACwsP,MAAb,EAAqB/2P,CAArB,EAAwBk0F,CAAxB,CAAN;AACA8iK,IAAAA,KAAK,CAACtzP,CAAC,CAACszP,KAAH,EAAUzsP,CAAC,CAACysP,KAAZ,EAAmBh3P,CAAnB,EAAsBk0F,CAAtB,CAAL;AACA7hF,IAAAA,KAAK,CAAC3O,CAAC,CAACuzP,MAAH,EAAWvzP,CAAC,CAACwzP,MAAb,EAAqB3sP,CAAC,CAAC0sP,MAAvB,EAA+B1sP,CAAC,CAAC2sP,MAAjC,EAAyCl3P,CAAzC,EAA4Ck0F,CAA5C,CAAL;AACAxwF,IAAAA,CAAC,GAAG6G,CAAC,GAAG,IAAR,CARoB,CAQN;;AACd,WAAO,UAASrK,CAAT,EAAY;AACjB,UAAI1D,CAAC,GAAG,CAAC,CAAT;AAAA,UAAYkO,CAAC,GAAGwpF,CAAC,CAACp4F,MAAlB;AAAA,UAA0BqsB,CAA1B;;AACA,aAAO,EAAE3rB,CAAF,GAAMkO,CAAb,EAAgB1K,CAAC,CAAC,CAACmoB,CAAC,GAAG+rE,CAAC,CAAC13F,CAAD,CAAN,EAAWA,CAAZ,CAAD,GAAkB2rB,CAAC,CAACxlB,CAAF,CAAIzC,CAAJ,CAAlB;;AAChB,aAAOF,CAAC,CAACI,IAAF,CAAO,EAAP,CAAP;AACD,KAJD;AAKD,GAdD;AAeD;;AAEM,IAAIi4P,uBAAuB,GAAGR,oBAAoB,CAACT,eAAD,EAAW,MAAX,EAAmB,KAAnB,EAA0B,MAA1B,CAAlD;;AACA,IAAIkB,uBAAuB,GAAGT,oBAAoB,CAACL,eAAD,EAAW,IAAX,EAAiB,GAAjB,EAAsB,GAAtB,CAAlD;;;;;;;;;;AE9DP;;AACA;;;;;;AAEA,SAASpE,GAAT,CAAaoC,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,QAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEc8qP,GAAG,CAACoC,UAAD;;;AACX,IAAI8D,OAAO,GAAGlG,GAAG,CAACpB,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;AAEe,SAASqC,GAAT,CAAa/rP,KAAb,EAAoB6F,GAApB,EAAyB;AACtC,MAAIG,CAAC,GAAG,oBAAM,CAAChG,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BgG,CAAhC,EAAmC,CAACH,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsBG,CAAzD,CAAR;AAAA,MACI5K,CAAC,GAAG,oBAAM4E,KAAK,CAAC5E,CAAZ,EAAeyK,GAAG,CAACzK,CAAnB,CADR;AAAA,MAEI6G,CAAC,GAAG,oBAAMjC,KAAK,CAACiC,CAAZ,EAAe4D,GAAG,CAAC5D,CAAnB,CAFR;AAAA,MAGIyoP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,SAAO,UAAS9yP,CAAT,EAAY;AACjBoI,IAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC5E,CAAN,GAAUA,CAAC,CAACxD,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAACiC,CAAN,GAAUA,CAAC,CAACrK,CAAD,CAAX;AACAoI,IAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,WAAOoI,KAAK,GAAG,EAAf;AACD,GAND;AAOD;;;;;;;;;ACfD;;AACA;;;;;;AAEA,SAASosP,GAAT,CAAac,GAAb,EAAkB;AAChB,SAAO,UAASltP,KAAT,EAAgB6F,GAAhB,EAAqB;AAC1B,QAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,kBAASA,KAAT,CAAT,EAA0BygD,CAA3B,EAA8B,CAAC56C,GAAG,GAAG,kBAASA,GAAT,CAAP,EAAsB46C,CAApD,CAAX;AAAA,QACI9/C,CAAC,GAAG,oBAAMX,KAAK,CAACW,CAAZ,EAAekF,GAAG,CAAClF,CAAnB,CADR;AAAA,QAEIqF,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,QAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,WAAO,UAAS9yP,CAAT,EAAY;AACjBoI,MAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACW,CAAN,GAAUA,CAAC,CAAC/I,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAACpO,CAAD,CAAX;AACAoI,MAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,aAAOoI,KAAK,GAAG,EAAf;AACD,KAND;AAOD,GAZD;AAaD;;eAEcosP,GAAG,CAACc,UAAD;;;AACX,IAAI+D,OAAO,GAAG7E,GAAG,CAAC1C,cAAD,CAAjB;;;;;;;;;;ACpBP;;AACA;;;;;;AAEA,SAASqD,SAAT,CAAmBG,GAAnB,EAAwB;AACtB,SAAQ,SAASgE,cAAT,CAAwBt4O,CAAxB,EAA2B;AACjCA,IAAAA,CAAC,GAAG,CAACA,CAAL;;AAEA,aAASm0O,SAAT,CAAmB/sP,KAAnB,EAA0B6F,GAA1B,EAA+B;AAC7B,UAAI46C,CAAC,GAAGysM,GAAG,CAAC,CAACltP,KAAK,GAAG,wBAAeA,KAAf,CAAT,EAAgCygD,CAAjC,EAAoC,CAAC56C,GAAG,GAAG,wBAAeA,GAAf,CAAP,EAA4B46C,CAAhE,CAAX;AAAA,UACI/oD,CAAC,GAAG,oBAAMsI,KAAK,CAACtI,CAAZ,EAAemO,GAAG,CAACnO,CAAnB,CADR;AAAA,UAEIsO,CAAC,GAAG,oBAAMhG,KAAK,CAACgG,CAAZ,EAAeH,GAAG,CAACG,CAAnB,CAFR;AAAA,UAGI0kP,OAAO,GAAG,oBAAM1qP,KAAK,CAAC0qP,OAAZ,EAAqB7kP,GAAG,CAAC6kP,OAAzB,CAHd;AAIA,aAAO,UAAS9yP,CAAT,EAAY;AACjBoI,QAAAA,KAAK,CAACygD,CAAN,GAAUA,CAAC,CAAC7oD,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACtI,CAAN,GAAUA,CAAC,CAACE,CAAD,CAAX;AACAoI,QAAAA,KAAK,CAACgG,CAAN,GAAUA,CAAC,CAAC/L,IAAI,CAAC0Q,GAAL,CAAS/S,CAAT,EAAYghB,CAAZ,CAAD,CAAX;AACA5Y,QAAAA,KAAK,CAAC0qP,OAAN,GAAgBA,OAAO,CAAC9yP,CAAD,CAAvB;AACA,eAAOoI,KAAK,GAAG,EAAf;AACD,OAND;AAOD;;AAED+sP,IAAAA,SAAS,CAACz5F,KAAV,GAAkB49F,cAAlB;AAEA,WAAOnE,SAAP;AACD,GApBM,CAoBJ,CApBI,CAAP;AAqBD;;eAEcA,SAAS,CAACG,UAAD;;;AACjB,IAAIiE,aAAa,GAAGpE,SAAS,CAACrD,cAAD,CAA7B;;;;;;;;;;AC5BP;;;;AAEe,SAAS0H,SAAT,CAAmBC,WAAnB,EAAgC/yP,MAAhC,EAAwC;AACrD,MAAIA,MAAM,KAAK8qH,SAAf,EAA0B9qH,MAAM,GAAG+yP,WAAT,EAAsBA,WAAW,GAAGn6P,cAApC;AAC1B,MAAIhD,CAAC,GAAG,CAAR;AAAA,MAAWkO,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAA/B;AAAA,MAAkC4S,CAAC,GAAG9H,MAAM,CAAC,CAAD,CAA5C;AAAA,MAAiD8zM,CAAC,GAAG,IAAIp+M,KAAJ,CAAUoO,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAtB,CAArD;;AACA,SAAOlO,CAAC,GAAGkO,CAAX,EAAcgwM,CAAC,CAACl+M,CAAD,CAAD,GAAOm9P,WAAW,CAACjrP,CAAD,EAAIA,CAAC,GAAG9H,MAAM,CAAC,EAAEpK,CAAH,CAAd,CAAlB;;AACd,SAAO,UAAS0D,CAAT,EAAY;AACjB,QAAI1D,CAAC,GAAG+F,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAASgI,CAAC,GAAG,CAAb,EAAgBnI,IAAI,CAAC+H,KAAL,CAAWpK,CAAC,IAAIwK,CAAhB,CAAhB,CAAZ,CAAR;AACA,WAAOgwM,CAAC,CAACl+M,CAAD,CAAD,CAAK0D,CAAC,GAAG1D,CAAT,CAAP;AACD,GAHD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;;AACA;;AACA;;AAEA;;AAEA;;;;;;AAEA,SAAS6gQ,SAAT,CAAoB9oL,KAApB,EAA2BmzK,YAA3B,EAAyCC,YAAzC,EAAuD;AACrD,QAAMl0F,KAAK,GAAGl/E,KAAK,GAAGmzK,YAAR,GAAuBC,YAAY,GAAG,CAApD;AACA,SAAOpzK,KAAK,GAAGk/E,KAAK,GAAG,CAAR,GAAYA,KAAZ,GAAoB,CAAvB,GAA2B,CAAvC;AACD;;AAED,MAAM9wH,QAAQ,GAAG,UAAjB;;AACA,MAAMwrH,MAAM,GAAG,QAAf;;AACA,MAAMmvG,GAAG,GAAG,KAAZ;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMhvC,GAAG,GAAG,KAAZ;;AACA,MAAMjiE,UAAU,GAAG,YAAnB;;AACA,MAAMkxG,SAAS,GAAG,WAAlB;;AACA,MAAMlnB,QAAQ,GAAG,UAAjB;;AACA,MAAMmnB,QAAQ,GAAG,UAAjB;;AACA,MAAMC,SAAS,GAAG,WAAlB;;AACA,MAAMC,OAAO,GAAG,SAAhB;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,UAAU,GAAG,aAAnB,EAAkC;;;AAElC,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,QAAQ,GAAG,UAAjB;AACA,MAAMC,YAAY,GAAG,cAArB;AACA,MAAMC,aAAa,GAAG,eAAtB;AACA,MAAMC,QAAQ,GAAG,UAAjB;;AAEA,SAASC,WAAT,CAAsBlsP,KAAtB,EAA6B;AAC3B,SAAO,UAAU8Q,CAAV,EAAa;AAClB,QAAI+vL,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIjjB,CAFJ;;AAIA,QAAIizM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,WAAO,CAACmS,KAAK,CAAC6nP,MAAN,CAAahnD,EAAb,CAAD,EAAmB7gM,KAAK,CAAC6nP,MAAN,CAAa/mD,EAAb,CAAnB,CAAP;AACD,GAZD;AAaD;;AAED,SAASqrD,iBAAT,CAA4BnsP,KAA5B,EAAmC;AACjC,SAAO,UAAU8Q,CAAV,EAAa;AAClB,UAAM6a,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAd;AACA,QAAIk1K,EAAE,GAAG/vL,CAAC,CAAC,CAAD,CAAV;AAAA,QACIgwL,EAAE,GAAGhwL,CAAC,CAAC,CAAD,CADV;AAAA,QAEIzgB,GAAG,GAAG,CAAC,CAFX;AAAA,QAGIE,GAHJ;AAAA,QAII1C,CAJJ;AAAA,QAKI1D,CALJ;AAAA,QAMIkO,CANJ;;AAQA,QAAIyoM,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,SAAK1D,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGszB,KAAK,CAACliC,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,UAAIwhC,KAAK,CAACxhC,CAAD,CAAL,IAAY02M,EAAZ,IAAkBl1K,KAAK,CAACxhC,CAAD,CAAL,IAAY22M,EAAlC,EAAsC;AACpC,YAAIzwM,GAAG,GAAG,CAAV,EAAaA,GAAG,GAAGlG,CAAN;AACboG,QAAAA,GAAG,GAAGpG,CAAN;AACD;AACF;;AAED,QAAIkG,GAAG,GAAG,CAAV,EAAa,OAAOgvH,SAAP;AACbwhF,IAAAA,EAAE,GAAG7gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACt7B,GAAD,CAAxB,CAAL;AACAywM,IAAAA,EAAE,GAAG9gM,KAAK,CAACwpP,YAAN,CAAmB79N,KAAK,CAACp7B,GAAD,CAAxB,CAAL;AACA,WAAO,CAACswM,EAAE,CAAC,CAAD,CAAF,KAAUxhF,SAAV,GAAsBwhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAjC,EAAsCC,EAAE,CAAC,CAAD,CAAF,KAAUzhF,SAAV,GAAsByhF,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAtE,CAAP;AACD,GA3BD;AA4BD;;AAED,SAASg9B,IAAT,GAAgB;AACd,QAAM99N,KAAK,GAAG,6BAAeglJ,OAAf,CAAuB3lC,SAAvB,CAAd;AAAA,QACMkgF,MAAM,GAAGv/L,KAAK,CAACu/L,MADrB;AAAA,QAEM61C,YAAY,GAAGp1O,KAAK,CAAC2rB,KAF3B;AAGA,MAAIygO,OAAO,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAd;AAAA,MACIvnP,IADJ;AAAA,MAEI4vN,SAFJ;AAAA,MAGIj+N,KAAK,GAAG,KAHZ;AAAA,MAII6+O,YAAY,GAAG,CAJnB;AAAA,MAKIC,YAAY,GAAG,CALnB;AAAA,MAMI5yC,KAAK,GAAG,GANZ;AAOA,SAAO1iM,KAAK,CAACglJ,OAAb;;AAEA,WAASuwF,OAAT,GAAmB;AACjB,UAAMl9O,CAAC,GAAGknM,MAAM,GAAG91M,MAAnB;AAAA,UACMmV,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CADpC;AAAA,UAEM1gO,IAAI,GAAG0gO,OAAO,CAAC,IAAIxtP,OAAL,CAFpB;AAAA,UAGMwiJ,KAAK,GAAG4pG,SAAS,CAAC3yP,CAAD,EAAIg9O,YAAJ,EAAkBC,YAAlB,CAHvB;AAIA,QAAIr/O,KAAK,GAAGm2P,OAAO,CAACxtP,OAAO,GAAG,CAAX,CAAnB;AACAiG,IAAAA,IAAI,GAAG,CAAC6mB,IAAI,GAAGz1B,KAAR,KAAkBmrJ,KAAK,IAAI,CAA3B,CAAP;;AAEA,QAAI5qJ,KAAJ,EAAW;AACTqO,MAAAA,IAAI,GAAG3U,IAAI,CAAC+H,KAAL,CAAW4M,IAAX,CAAP;AACD;;AAED5O,IAAAA,KAAK,IAAI,CAACy1B,IAAI,GAAGz1B,KAAP,GAAe4O,IAAI,IAAIxM,CAAC,GAAGg9O,YAAR,CAApB,IAA6C3yC,KAAtD;AACA+xB,IAAAA,SAAS,GAAG5vN,IAAI,IAAI,IAAIwwO,YAAR,CAAhB;;AAEA,QAAI7+O,KAAJ,EAAW;AACTP,MAAAA,KAAK,GAAG/F,IAAI,CAACsG,KAAL,CAAWP,KAAX,CAAR;AACAw+N,MAAAA,SAAS,GAAGvkO,IAAI,CAACsG,KAAL,CAAWi+N,SAAX,CAAZ;AACD;;AAED,UAAMlgO,MAAM,GAAG,oBAAM8D,CAAN,EAASzE,GAAT,CAAazJ,CAAC,IAAI8L,KAAK,GAAG4O,IAAI,GAAG1a,CAAjC,CAAf;AACA,WAAOirP,YAAY,CAACx2O,OAAO,GAAGrK,MAAM,CAACqK,OAAP,EAAH,GAAsBrK,MAA9B,CAAnB;AACD;;AAEDyL,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,CAACzuL,CAAD,CAAN;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOh2C,MAAM,EAAb;AACD;AACF,GAPD;;AASAv/L,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB2iQ,MAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO6W,OAAO,CAAC54P,KAAR,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACw1O,UAAN,GAAmB,UAAU1kO,CAAV,EAAa;AAC9Bs7O,IAAAA,OAAO,GAAG,CAAC,CAACt7O,CAAC,CAAC,CAAD,CAAH,EAAQ,CAACA,CAAC,CAAC,CAAD,CAAV,CAAV;AACAta,IAAAA,KAAK,GAAG,IAAR;AACA,WAAO++O,OAAO,EAAd;AACD,GAJD;;AAMAv1O,EAAAA,KAAK,CAACy0N,SAAN,GAAkB,YAAY;AAC5B,WAAOA,SAAP;AACD,GAFD;;AAIAz0N,EAAAA,KAAK,CAAC6E,IAAN,GAAa,YAAY;AACvB,WAAOA,IAAP;AACD,GAFD;;AAIA7E,EAAAA,KAAK,CAACxJ,KAAN,GAAc,UAAUsa,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB+M,MAAAA,KAAK,GAAG,CAAC,CAACsa,CAAV;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO/+O,KAAP;AACD;AACF,GAPD;;AASAwJ,EAAAA,KAAK,CAAC4G,OAAN,GAAgB,UAAUkK,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACAukO,MAAAA,YAAY,GAAGC,YAAf;AACA,aAAOC,OAAO,EAAd;AACD,KAJD,MAIO;AACL,aAAOF,YAAP;AACD;AACF,GARD;;AAUAr1O,EAAAA,KAAK,CAACq1O,YAAN,GAAqB,UAAUvkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4rP,MAAAA,YAAY,GAAGnlP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOF,YAAP;AACD;AACF,GAPD;;AASAr1O,EAAAA,KAAK,CAACs1O,YAAN,GAAqB,UAAUxkO,CAAV,EAAa;AAChC,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6rP,MAAAA,YAAY,GAAGplP,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAf;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAOD,YAAP;AACD;AACF,GAPD;;AASAt1O,EAAAA,KAAK,CAAC0iM,KAAN,GAAc,UAAU5xL,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBi5M,MAAAA,KAAK,GAAGxyM,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACG,GAAL,CAAS,CAAT,EAAYygB,CAAZ,CAAZ,CAAR;AACA,aAAOykO,OAAO,EAAd;AACD,KAHD,MAGO;AACL,aAAO7yC,KAAP;AACD;AACF,GAPD;;AASA1iM,EAAAA,KAAK,CAACksP,WAAN,GAAoB,UAAUp7O,CAAV,EAAa;AAC/B;AACA,QAAIA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAA5B,EAAkC;AAClC,UAAMlS,OAAO,GAAGwtP,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CAApC;AAAA,UACM73P,MAAM,GAAGqK,OAAO,GAAGw2O,YAAY,GAAGx2O,OAAf,EAAH,GAA8Bw2O,YAAY,EADhE;AAAA,UAEM/8O,CAAC,GAAG9D,MAAM,CAAC9K,MAAP,GAAgB,CAF1B;AAGA,QAAIo3M,EAAE,GAAG,CAAC/vL,CAAC,CAAC,CAAD,CAAX;AAAA,QACIgwL,EAAE,GAAG,CAAChwL,CAAC,CAAC,CAAD,CADX;AAAA,QAEIzf,CAFJ;AAAA,QAGI6G,CAHJ;AAAA,QAIIrK,CAJJ,CAN+B,CAUxB;;AAEP,QAAIgzM,EAAE,KAAKA,EAAP,IAAaC,EAAE,KAAKA,EAAxB,EAA4B,OAZG,CAYK;;AAEpC,QAAIA,EAAE,GAAGD,EAAT,EAAa;AACXhzM,MAAAA,CAAC,GAAGgzM,EAAJ;AACAA,MAAAA,EAAE,GAAGC,EAAL;AACAA,MAAAA,EAAE,GAAGjzM,CAAL;AACD;;AAED,QAAIizM,EAAE,GAAGvsM,MAAM,CAAC,CAAD,CAAX,IAAkBssM,EAAE,GAAGurD,OAAO,CAAC,IAAIxtP,OAAL,CAAlC,EAAiD,OApBlB,CAoB0B;;AAEzDvN,IAAAA,CAAC,GAAGnB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY,0BAAYgE,MAAZ,EAAoBssM,EAApB,IAA0B,CAAtC,CAAJ;AACA3oM,IAAAA,CAAC,GAAG2oM,EAAE,KAAKC,EAAP,GAAYzvM,CAAZ,GAAgB,0BAAYkD,MAAZ,EAAoBusM,EAApB,IAA0B,CAA9C,CAvB+B,CAuBkB;;AAEjD,QAAID,EAAE,GAAGtsM,MAAM,CAAClD,CAAD,CAAX,GAAiBojO,SAAS,GAAG,KAAjC,EAAwC,EAAEpjO,CAAF;;AAExC,QAAIuN,OAAJ,EAAa;AACX;AACA/Q,MAAAA,CAAC,GAAGwD,CAAJ;AACAA,MAAAA,CAAC,GAAGgH,CAAC,GAAGH,CAAR;AACAA,MAAAA,CAAC,GAAGG,CAAC,GAAGxK,CAAR;AACD;;AAED,WAAOwD,CAAC,GAAG6G,CAAJ,GAAQmnH,SAAR,GAAoBkgF,MAAM,GAAG/rM,KAAT,CAAenC,CAAf,EAAkB6G,CAAC,GAAG,CAAtB,CAA3B;AACD,GAnCD;;AAqCA8H,EAAAA,KAAK,CAAC6nP,MAAN,GAAe,UAAU/2O,CAAV,EAAa;AAC1B,UAAM3jB,KAAK,GAAG6S,KAAK,CAACksP,WAAN,CAAkB,CAACp7O,CAAD,EAAIA,CAAJ,CAAlB,CAAd;AACA,WAAO3jB,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcA,KAA1B;AACD,GAHD;;AAKA6S,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAO6+J,IAAI,GAAGv+B,MAAP,CAAcA,MAAM,EAApB,EAAwB5zK,KAAxB,CAA8BygO,OAA9B,EAAuC51P,KAAvC,CAA6CA,KAA7C,EAAoD6+O,YAApD,CAAiEA,YAAjE,EAA+EC,YAA/E,CAA4FA,YAA5F,EAA0G5yC,KAA1G,CAAgHA,KAAhH,CAAP;AACD,GAFD;;AAIA,SAAO6yC,OAAO,EAAd;AACD;;AAED,SAASE,QAAT,CAAkBz1O,KAAlB,EAAyB;AACvB,QAAMi/D,IAAI,GAAGj/D,KAAK,CAACi/D,IAAnB;AACAj/D,EAAAA,KAAK,CAAC4G,OAAN,GAAgB5G,KAAK,CAACs1O,YAAtB;AACA,SAAOt1O,KAAK,CAACq1O,YAAb;;AAEAr1O,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOw2K,QAAQ,CAACx2K,IAAI,EAAL,CAAf;AACD,GAFD;;AAIA,SAAOj/D,KAAP;AACD;;AAED,SAAS0rM,KAAT,GAAiB;AACf,SAAO+pC,QAAQ,CAAC3X,IAAI,GAAGuX,YAAP,CAAoB,CAApB,CAAD,CAAf;AACD;;AAED,IAAIzhP,GAAG,GAAG3J,KAAK,CAACM,SAAN,CAAgBqJ,GAA1B;;AACA,SAAS+6M,OAAT,CAAiB79L,CAAjB,EAAoB;AAClB,SAAOld,GAAG,CAAC3K,IAAJ,CAAS6nB,CAAT,EAAY+uL,kBAAZ,CAAP;AACD;;AAED,MAAMrsM,KAAK,GAAGvJ,KAAK,CAACM,SAAN,CAAgBiJ,KAA9B;;AAEA,SAAS64P,eAAT,GAA2B;AACzB,MAAI9sD,MAAM,GAAG,EAAb;AAAA,MACI5zK,KAAK,GAAG,EADZ;;AAGA,WAAS3rB,KAAT,CAAe1P,CAAf,EAAkB;AAChB,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAnB,GAAuB+uH,SAAvB,GAAmC1zF,KAAK,CAAC,CAAC,qBAAO4zK,MAAP,EAAejvM,CAAf,IAAoB,CAArB,IAA0Bq7B,KAAK,CAACliC,MAAjC,CAA/C;AACD;;AAEDuW,EAAAA,KAAK,CAACu/L,MAAN,GAAe,UAAUzuL,CAAV,EAAa;AAC1B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB81M,MAAAA,MAAM,GAAGoP,OAAO,CAAC79L,CAAD,CAAhB;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAOu/L,MAAM,CAAC/rM,KAAP,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAAC2rB,KAAN,GAAc,UAAU7a,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBkiC,MAAAA,KAAK,GAAGn4B,KAAK,CAACvK,IAAN,CAAW6nB,CAAX,CAAR;AACA,aAAO9Q,KAAP;AACD,KAHD,MAGO;AACL,aAAO2rB,KAAK,CAACn4B,KAAN,EAAP;AACD;AACF,GAPD;;AASAwM,EAAAA,KAAK,CAACioP,UAAN,GAAmB,UAAU/lL,KAAV,EAAiBsxI,SAAjB,EAA4B;AAC7C,WAAO,yBAAajU,MAAM,CAAC,CAAD,CAAnB,EAAwB,oBAAKA,MAAL,CAAxB,EAAsCr9H,KAAK,IAAI,IAAT,GAAgB,EAAhB,GAAqBA,KAA3D,EAAkEsxI,SAAlE,CAAP;AACD,GAFD;;AAIAxzM,EAAAA,KAAK,CAACi/D,IAAN,GAAa,YAAY;AACvB,WAAOotL,eAAe,GAAG9sD,MAAlB,CAAyBv/L,KAAK,CAACu/L,MAAN,EAAzB,EAAyC5zK,KAAzC,CAA+C3rB,KAAK,CAAC2rB,KAAN,EAA/C,CAAP;AACD,GAFD;;AAIA,SAAO3rB,KAAP;AACD;;AAED,MAAMssP,MAAM,GAAG,EAAf;AACA;AACA;AACA;;AAEA,SAASvqE,MAAT,CAAgB33K,IAAhB,EAAsBrU,WAAtB,EAAmCk3G,QAAnC,EAA6C;AAC3C,QAAMsuH,GAAG,GAAG,SAASv7N,KAAT,GAAiB;AAC3B,UAAMrS,CAAC,GAAGoI,WAAW,EAArB;;AAEA,QAAI,CAACpI,CAAC,CAACu+P,WAAP,EAAoB;AAClBv+P,MAAAA,CAAC,CAACu+P,WAAF,GAAgBv+P,CAAC,CAACk6P,MAAF,GAAWqE,WAAW,CAACv+P,CAAD,CAAtB,GAA4BA,CAAC,CAAC67P,YAAF,GAAiB2C,iBAAiB,CAACx+P,CAAD,CAAlC,GAAwC0xH,SAApF;AACD;;AAED1xH,IAAAA,CAAC,CAACyc,IAAF,GAASA,IAAT;AACA,WAAOzc,CAAP;AACD,GATD;;AAWA4tO,EAAAA,GAAG,CAACtuH,QAAJ,GAAe,qBAAM,qBAAMA,QAAN,CAAN,CAAf;AACA,SAAOsuH,GAAP;AACD;;AAED,SAASv7N,KAAT,CAAeoK,IAAf,EAAqBpK,KAArB,EAA4BitG,QAA5B,EAAsC;AACpC,MAAI/iH,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6iQ,IAAAA,MAAM,CAACliP,IAAD,CAAN,GAAe23K,MAAM,CAAC33K,IAAD,EAAOpK,KAAP,EAAcitG,QAAd,CAArB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOs/I,gBAAgB,CAACniP,IAAD,CAAhB,GAAyBkiP,MAAM,CAACliP,IAAD,CAA/B,GAAwCi1G,SAA/C;AACD;AACF,EAAC;;;AAEFr/G,KAAK,CAACswB,QAAD,EAAWk8N,sBAAX,CAAL,EAAgC;;AAEhCxsP,KAAK,CAAC87I,MAAD,EAAS2wG,oBAAT,EAAsBZ,UAAtB,CAAL;AACA7rP,KAAK,CAACirP,GAAD,EAAMyB,iBAAN,EAAgB,CAACb,UAAD,EAAaZ,GAAb,CAAhB,CAAL;AACAjrP,KAAK,CAACkrP,GAAD,EAAMyB,iBAAN,EAAgBd,UAAhB,CAAL;AACA7rP,KAAK,CAACmrP,IAAD,EAAOyB,kBAAP,EAAkBf,UAAlB,CAAL;AACA7rP,KAAK,CAACorP,MAAD,EAASyB,oBAAT,EAAsBhB,UAAtB,CAAL;AACA7rP,KAAK,CAACqrP,IAAD,EAAOyB,kBAAP,EAAkB,CAACjB,UAAD,EAAaI,QAAb,CAAlB,CAAL;AACAjsP,KAAK,CAACq8M,GAAD,EAAM0wC,iBAAN,EAAgB,CAAClB,UAAD,EAAaI,QAAb,CAAhB,CAAL,EAA8C;;AAE9CjsP,KAAK,CAACo6I,UAAD,EAAa4yG,wBAAb,EAA8B,CAACnB,UAAD,EAAaG,aAAb,CAA9B,CAAL,EAAiE;;AAEjEhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCoyJ,MAAlC,CAAD,EAA4CkxG,wBAA5C,EAA6D,CAACnB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCuhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACpB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA7D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCwhQ,GAAlC,CAAD,EAAyCgC,2BAAzC,EAA6D,CAACrB,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkCyhQ,IAAlC,CAAD,EAA0CgC,4BAA1C,EAA+D,CAACtB,UAAD,EAAaG,aAAb,CAA/D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU0wJ,UAAV,EAAsB,GAAtB,EAA2B1wJ,MAA3B,CAAkC0hQ,MAAlC,CAAD,EAA4CgC,8BAA5C,EAAmE,CAACvB,UAAD,EAAaG,aAAb,CAAnE,CAAL,EAAsG;;AAEtGhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCoyJ,MAAjC,CAAD,EAA2CuxG,uBAA3C,EAA2D,CAACxB,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCuhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAACzB,UAAD,EAAaG,aAAb,EAA4Bf,GAA5B,CAA3D,CAAL;AACAjrP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCwhQ,GAAjC,CAAD,EAAwCqC,0BAAxC,EAA2D,CAAC1B,UAAD,EAAaG,aAAb,CAA3D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiCyhQ,IAAjC,CAAD,EAAyCqC,2BAAzC,EAA6D,CAAC3B,UAAD,EAAaG,aAAb,CAA7D,CAAL;AACAhsP,KAAK,CAAC,GAAGtW,MAAH,CAAU4hQ,SAAV,EAAqB,GAArB,EAA0B5hQ,MAA1B,CAAiC0hQ,MAAjC,CAAD,EAA2CqC,6BAA3C,EAAiE,CAAC5B,UAAD,EAAaG,aAAb,CAAjE,CAAL,EAAoG;;AAEpGhsP,KAAK,CAACokO,QAAD,EAAWspB,sBAAX,EAA0B,CAAC3B,YAAD,EAAe3nB,QAAf,CAA1B,CAAL;AACApkO,KAAK,CAACurP,QAAD,EAAWoC,sBAAX,EAA0B5B,YAA1B,CAAL;AACA/rP,KAAK,CAACwrP,SAAD,EAAYoC,uBAAZ,EAA4B7B,YAA5B,CAAL,EAAgD;;AAEhD/rP,KAAK,CAAC4rP,UAAD,EAAaS,eAAb,EAA8B,CAACP,QAAD,EAAWC,YAAX,CAA9B,CAAL;AACA/rP,KAAK,CAACyrP,OAAD,EAAUoC,qBAAV,EAAwB/B,QAAxB,CAAL;AACA9rP,KAAK,CAAC2rP,IAAD,EAAO7tB,IAAP,EAAaguB,QAAb,CAAL;AACA9rP,KAAK,CAAC0rP,KAAD,EAAQhgD,KAAR,EAAeogD,QAAf,CAAL;;AACA,SAASS,gBAAT,CAA0BniP,IAA1B,EAAgC;AAC9B,SAAO,8BAAekiP,MAAf,EAAuBliP,IAAvB,CAAP;AACD;;AAED,SAAS0jP,OAAT,CAAiB1/P,GAAjB,EAAsBgc,IAAtB,EAA4B;AAC1B,QAAMzc,CAAC,GAAG2+P,MAAM,CAACl+P,GAAD,CAAhB;AACA,SAAOT,CAAC,IAAIA,CAAC,CAACs/G,QAAF,CAAW7iG,IAAX,CAAZ;AACD;;AAED,SAAS2jP,YAAT,CAAsB3/P,GAAtB,EAA2B;AACzB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMy9P,UAAN,CAAd;AACD;;AACD,SAASmC,UAAT,CAAoB5/P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM09P,QAAN,CAAd;AACD;;AACD,SAASmC,cAAT,CAAwB7/P,GAAxB,EAA6B;AAC3B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM29P,YAAN,CAAd;AACD;;AACD,SAASmC,aAAT,CAAuB9/P,GAAvB,EAA4B;AAC1B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM68P,GAAN,CAAd;AACD;;AACD,SAASkD,UAAT,CAAoB//P,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM69P,QAAN,CAAd;AACD;;AACD,SAASmC,eAAT,CAAyBhgQ,GAAzB,EAA8B;AAC5B,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAM49P,aAAN,CAAd;AACD;;AACD,SAASqC,UAAT,CAAoBjgQ,GAApB,EAAyB;AACvB,SAAO0/P,OAAO,CAAC1/P,GAAD,EAAMg2O,QAAN,CAAd;AACD;;AAED,MAAMkqB,UAAU,GAAG,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,EAA8B,UAA9B,CAAnB;;AACA,SAASC,gBAAT,CAA0BtZ,YAA1B,EAAwCtpN,KAAxC,EAA+C;AAC7C,QAAM11B,KAAK,GAAG01B,KAAK,CAAC,CAAD,CAAnB;AAAA,QACMo1K,IAAI,GAAG,oBAAKp1K,KAAL,IAAc11B,KAD3B;AAEA,SAAO,UAAU9L,CAAV,EAAa;AAClB,WAAO8qP,YAAY,CAACh/O,KAAK,GAAG9L,CAAC,GAAG42M,IAAb,CAAnB;AACD,GAFD;AAGD;;AACD,SAASytD,iBAAT,CAA2BhL,MAA3B,EAAmCp5O,IAAnC,EAAyCm/I,KAAzC,EAAgD;AAC9C,SAAO,iBAAU+9F,WAAW,CAACl9O,IAAI,IAAI,KAAT,EAAgBm/I,KAAhB,CAArB,EAA6Ci6F,MAA7C,CAAP;AACD;;AACD,SAASiL,oBAAT,CAA8BxZ,YAA9B,EAA4C/yK,KAA5C,EAAmD;AACjD,QAAMm0D,OAAO,GAAG,IAAIpsI,KAAJ,CAAUi4E,KAAV,CAAhB;AAAA,QACM7pE,CAAC,GAAG6pE,KAAK,GAAG,CADlB;;AAGA,OAAK,IAAI/3E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,KAApB,GAA4Bm0D,OAAO,CAAClsI,CAAD,CAAP,GAAa8qP,YAAY,CAAC,EAAE9qP,CAAF,GAAMkO,CAAP,CAAzB;;AAE5B,SAAOg+H,OAAP;AACD;;AACD,SAASq4H,SAAT,CAAmB1uP,KAAnB,EAA0B;AACxB,QAAMnS,CAAC,GAAGmS,KAAK,CAACoK,IAAhB;AAAA,QACMzc,CAAC,GAAGqS,KAAK,CAACi/D,IAAN,EADV;AAEAtxE,EAAAA,CAAC,CAACyc,IAAF,GAASvc,CAAT;AACA,SAAOF,CAAP;AACD;;AACD,SAASghQ,aAAT,CAAuBC,OAAvB,EAAgCv+P,GAAhC,EAAqCE,GAArC,EAA0C;AACxC,QAAMuvF,KAAK,GAAGvvF,GAAG,GAAGF,GAApB;AACA,MAAIlG,CAAJ,EAAO0D,CAAP,EAAUF,CAAV;;AAEA,MAAI,CAACmyF,KAAD,IAAU,CAACvoF,MAAM,CAACvC,QAAP,CAAgB8qF,KAAhB,CAAf,EAAuC;AACrC,WAAO,wBAAS,GAAT,CAAP;AACD,GAFD,MAEO;AACL31F,IAAAA,CAAC,GAAG,CAAC0D,CAAC,GAAG+gQ,OAAO,CAACxkP,IAAb,EAAmBmd,OAAnB,CAA2B,GAA3B,CAAJ;AACA15B,IAAAA,CAAC,GAAG1D,CAAC,GAAG,CAAJ,GAAQ0D,CAAR,GAAYA,CAAC,CAAC2F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,CAAhB;AACAwD,IAAAA,CAAC,GAAGqS,KAAK,CAACnS,CAAD,CAAL,GAAW0xM,MAAX,CAAkB,CAAClvM,GAAD,EAAME,GAAN,CAAlB,EAA8Bo7B,KAA9B,CAAoC,CAAC,CAAD,EAAI,CAAJ,CAApC,CAAJ;AACA2iO,IAAAA,UAAU,CAACrgQ,OAAX,CAAmB2zF,CAAC,IAAIgtK,OAAO,CAAChtK,CAAD,CAAP,GAAaj0F,CAAC,CAACi0F,CAAD,CAAD,CAAKgtK,OAAO,CAAChtK,CAAD,CAAP,EAAL,CAAb,GAAkC,CAA1D;AACA,WAAOj0F,CAAP;AACD;AACF;;AACD,SAAS25P,WAAT,CAAqBl9O,IAArB,EAA2Bm/I,KAA3B,EAAkC;AAChC,QAAMslG,MAAM,GAAGlsD,CAAC,CAACvnK,MAAM,CAAChxB,IAAD,CAAP,CAAhB;AACA,SAAOm/I,KAAK,IAAI,IAAT,IAAiBslG,MAAjB,IAA2BA,MAAM,CAACtlG,KAAlC,GAA0CslG,MAAM,CAACtlG,KAAP,CAAaA,KAAb,CAA1C,GAAgEslG,MAAvE;AACD;;AAED,SAASzzN,MAAT,CAAgBhxB,IAAhB,EAAsB;AACpB,SAAO,gBAAgBA,IAAI,CAAC9b,WAAL,GAAmBN,KAAnB,CAAyB,GAAzB,EAA8B4F,GAA9B,CAAkCjG,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAA5D,EAAwEzF,IAAxE,CAA6E,EAA7E,CAAvB;AACD;;AAED,MAAMi6P,UAAU,GAAG;AACjB8G,EAAAA,KAAK,EAAE,oEADU;AAEjBC,EAAAA,MAAM,EAAE,oEAFS;AAGjBC,EAAAA,KAAK,EAAE,oEAHU;AAIjBC,EAAAA,OAAO,EAAE,oEAJQ;AAKjBC,EAAAA,OAAO,EAAE,oEALQ;AAMjBC,EAAAA,IAAI,EAAE,oEANW;AAOjBC,EAAAA,SAAS,EAAE,oEAPM;AAQjBC,EAAAA,UAAU,EAAE,oEARK;AASjBC,EAAAA,SAAS,EAAE,oEATM;AAUjBC,EAAAA,SAAS,EAAE,oEAVM;AAWjBC,EAAAA,UAAU,EAAE,oEAXK;AAYjBC,EAAAA,eAAe,EAAE,oEAZA;AAajBC,EAAAA,SAAS,EAAE,oEAbM;AAcjBC,EAAAA,SAAS,EAAE,oEAdM;AAejBC,EAAAA,WAAW,EAAE,oEAfI;AAgBjBC,EAAAA,iBAAiB,EAAE,oEAhBF;AAiBjBC,EAAAA,eAAe,EAAE,oEAjBA;AAkBjBC,EAAAA,UAAU,EAAE,oEAlBK;AAmBjBC,EAAAA,cAAc,EAAE,oEAnBC;AAoBjBC,EAAAA,WAAW,EAAE,oEApBI;AAqBjBC,EAAAA,YAAY,EAAE,oEArBG;AAsBjBC,EAAAA,OAAO,EAAE,oEAtBQ;AAuBjBC,EAAAA,OAAO,EAAE,oEAvBQ;AAwBjBC,EAAAA,eAAe,EAAE,oEAxBA;AAyBjBC,EAAAA,aAAa,EAAE,oEAzBE;AA0BjBC,EAAAA,cAAc,EAAE,oEA1BC;AA2BjBC,EAAAA,eAAe,EAAE,oEA3BA;AA4BjBpoP,EAAAA,QAAQ,EAAE,oEA5BO;AA6BjBqoP,EAAAA,OAAO,EAAE,4LA7BQ;AA8BjBC,EAAAA,KAAK,EAAE,4LA9BU;AA+BjBC,EAAAA,OAAO,EAAE,4LA/BQ;AAgCjBC,EAAAA,MAAM,EAAE,4LAhCS;AAiCjBC,EAAAA,OAAO,EAAE,kYAjCQ;AAkCjBC,EAAAA,OAAO,EAAE,4LAlCQ;AAmCjBC,EAAAA,OAAO,EAAE,4LAnCQ;AAoCjBC,EAAAA,KAAK,EAAE,kYApCU;AAqCjBC,EAAAA,MAAM,EAAE,oEArCS;AAsCjBC,EAAAA,SAAS,EAAE,wDAtCM;AAuCjBC,EAAAA,KAAK,EAAE,oEAvCU;AAwCjBC,EAAAA,SAAS,EAAE,oEAxCM;AAyCjBC,EAAAA,SAAS,EAAE,oEAzCM;AA0CjBC,EAAAA,UAAU,EAAE,oEA1CK;AA2CjBC,EAAAA,OAAO,EAAE,oEA3CQ;AA4CjBC,EAAAA,YAAY,EAAE,8DA5CG;AA6CjBC,EAAAA,aAAa,EAAE,8DA7CE;AA8CjBC,EAAAA,UAAU,EAAE,wDA9CK;AA+CjBC,EAAAA,WAAW,EAAE,8DA/CI;AAgDjBC,EAAAA,aAAa,EAAE,8DAhDE;AAiDjBC,EAAAA,QAAQ,EAAE,8DAjDO;AAkDjBC,EAAAA,QAAQ,EAAE,8DAlDO;AAmDjBC,EAAAA,SAAS,EAAE,8DAnDM;AAoDjBC,EAAAA,SAAS,EAAE,4CApDM;AAqDjBC,EAAAA,OAAO,EAAE;AArDQ,CAAnB;AAuDA,MAAMC,QAAQ,GAAG;AACfC,EAAAA,UAAU,EAAE,8DADG;AAEfC,EAAAA,UAAU,EAAE,0HAFG;AAGfC,EAAAA,WAAW,EAAE,0HAHE;AAIfC,EAAAA,WAAW,EAAE,0HAJE;AAKfC,EAAAA,SAAS,EAAE,8DALI;AAMfC,EAAAA,SAAS,EAAE,0HANI;AAOfC,EAAAA,MAAM,EAAE,kDAPO;AAQfC,EAAAA,KAAK,EAAE,kDARQ;AASfC,EAAAA,MAAM,EAAE,0EATO;AAUfC,EAAAA,OAAO,EAAE,wDAVM;AAWfC,EAAAA,OAAO,EAAE,kDAXM;AAYfC,EAAAA,IAAI,EAAE,wDAZS;AAafC,EAAAA,IAAI,EAAE,kDAbS;AAcfC,EAAAA,IAAI,EAAE;AAdS,CAAjB;;AAiBA,SAASxP,MAAT,CAAgByP,OAAhB,EAAyB;AACvB,QAAM56P,CAAC,GAAG46P,OAAO,CAACxpQ,MAAR,GAAiB,CAAjB,GAAqB,CAA/B;AAAA,QACMmN,CAAC,GAAG,IAAI3M,KAAJ,CAAUoO,CAAV,CADV;;AAGA,OAAK,IAAIlO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,GAAwB;AACtBzB,IAAAA,CAAC,CAACzM,CAAD,CAAD,GAAO,MAAM8oQ,OAAO,CAACz/P,KAAR,CAAcrJ,CAAC,GAAG,CAAlB,EAAqB,EAAEA,CAAF,GAAM,CAA3B,CAAb;AACD;;AAED,SAAOyM,CAAP;AACD;;AAED,SAASpM,KAAT,CAAesmB,CAAf,EAAkBhb,CAAlB,EAAqB;AACnB,OAAK,MAAM2R,CAAX,IAAgBqJ,CAAhB,EAAmBm2F,MAAM,CAACx/F,CAAD,EAAI3R,CAAC,CAACgb,CAAC,CAACrJ,CAAD,CAAF,CAAL,CAAN;AACpB;;AAED,MAAM6uG,OAAO,GAAG,EAAhB;AACA9rH,KAAK,CAAC0nQ,QAAD,EAAW1O,MAAX,CAAL;AACAh5P,KAAK,CAACw9P,UAAD,EAAal3O,CAAC,IAAI09O,iBAAiB,CAAChL,MAAM,CAAC1yO,CAAD,CAAP,CAAnC,CAAL;;AACA,SAASm2F,MAAT,CAAgBv7G,IAAhB,EAAsBu7G,MAAtB,EAA8B;AAC5Bv7G,EAAAA,IAAI,GAAGA,IAAI,IAAIA,IAAI,CAAC4C,WAAL,EAAf;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB6sH,IAAAA,OAAO,CAAC5qH,IAAD,CAAP,GAAgBu7G,MAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAOqP,OAAO,CAAC5qH,IAAD,CAAd;AACD;AACF;;AAED,MAAMwnQ,YAAY,GAAG,QAArB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;AACA,MAAMC,cAAc,GAAG,UAAvB;;;AAEA,MAAMC,gBAAgB,GAAGlmQ,KAAK,IAAI,uBAAQA,KAAR,IAAiBA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAI5G,MAAM,CAAC4G,CAAD,CAArB,CAAjB,GAA6C5G,MAAM,CAACtI,KAAD,CAArF;;AAEA,MAAMo2M,SAAS,GAAG,CAAClyM,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,CAAC,CAAD,CAAD,GAAO6G,CAAC,CAAC,CAAD,CAApC;;AAEA,MAAM21O,UAAU,GAAG,CAACx8O,CAAD,EAAI6G,CAAJ,KAAUA,CAAC,CAAC,CAAD,CAAD,GAAO7G,CAAC,CAAC,CAAD,CAArC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAASiiQ,SAAT,CAAmBtzP,KAAnB,EAA0BkiE,KAA1B,EAAiCqxL,OAAjC,EAA0C;AACxC,MAAI1uP,IAAJ;;AAEA,MAAI,wBAASq9D,KAAT,CAAJ,EAAqB;AACnB,QAAIliE,KAAK,CAACixM,IAAV,EAAgB;AACd/uI,MAAAA,KAAK,GAAGhyE,IAAI,CAACK,GAAL,CAAS2xE,KAAT,EAAgBliE,KAAK,CAACixM,IAAN,CAAWxnN,MAA3B,CAAR;AACD;;AAED,QAAI8pQ,OAAO,IAAI,IAAf,EAAqB;AACnBrxL,MAAAA,KAAK,GAAGhyE,IAAI,CAACG,GAAL,CAAS6xE,KAAT,EAAgBhyE,IAAI,CAAC+H,KAAL,CAAW,oBAAK+H,KAAK,CAACu/L,MAAN,EAAL,IAAuBg0D,OAAvB,IAAkC,CAA7C,CAAhB,CAAR;AACD;AACF;;AAED,MAAI,wBAASrxL,KAAT,CAAJ,EAAqB;AACnBr9D,IAAAA,IAAI,GAAGq9D,KAAK,CAACr9D,IAAb;AACAq9D,IAAAA,KAAK,GAAGA,KAAK,CAACszI,QAAd;AACD;;AAED,MAAI,wBAAStzI,KAAT,CAAJ,EAAqB;AACnBA,IAAAA,KAAK,GAAGliE,KAAK,CAACoK,IAAN,KAAeihP,IAAf,GAAsB,4BAAanpL,KAAb,CAAtB,GAA4CliE,KAAK,CAACoK,IAAN,IAAciyM,GAAd,GAAoB,2BAAYn6I,KAAZ,CAApB,GAAyC,qBAAM,mDAAN,CAA7F;AACA,QAAIr9D,IAAJ,EAAUq9D,KAAK,GAAGA,KAAK,CAACruE,KAAN,CAAYgR,IAAZ,CAAR;AACX;;AAED,SAAOq9D,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASsxL,UAAT,CAAoBxzP,KAApB,EAA2BmwM,KAA3B,EAAkCjuI,KAAlC,EAAyC;AACvC,MAAIv2C,KAAK,GAAG3rB,KAAK,CAAC2rB,KAAN,EAAZ;AAAA,MACIk1K,EAAE,GAAGl1K,KAAK,CAAC,CAAD,CADd;AAAA,MAEIm1K,EAAE,GAAG,oBAAKn1K,KAAL,CAFT;AAAA,MAGI6qK,GAAG,GAAG+M,SAHV;;AAKA,MAAI1C,EAAE,GAAGC,EAAT,EAAa;AACXn1K,IAAAA,KAAK,GAAGm1K,EAAR;AACAA,IAAAA,EAAE,GAAGD,EAAL;AACAA,IAAAA,EAAE,GAAGl1K,KAAL;AACA6qK,IAAAA,GAAG,GAAGq3C,UAAN;AACD;;AAEDhtC,EAAAA,EAAE,GAAG3wM,IAAI,CAAC+H,KAAL,CAAW4oM,EAAX,CAAL;AACAC,EAAAA,EAAE,GAAG5wM,IAAI,CAACoC,IAAL,CAAUwuM,EAAV,CAAL,CAduC,CAcnB;AACpB;;AAEAqP,EAAAA,KAAK,GAAGA,KAAK,CAACv8M,GAAN,CAAUyI,CAAC,IAAI,CAACA,CAAD,EAAI2D,KAAK,CAAC3D,CAAD,CAAT,CAAf,EAA8BiJ,MAA9B,CAAqCwL,CAAC,IAAI+vL,EAAE,IAAI/vL,CAAC,CAAC,CAAD,CAAP,IAAcA,CAAC,CAAC,CAAD,CAAD,IAAQgwL,EAAhE,EAAoE3sM,IAApE,CAAyEqiM,GAAzE,EAA8E5iM,GAA9E,CAAkFkd,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAxF,CAAR;;AAEA,MAAIoxD,KAAK,GAAG,CAAR,IAAaiuI,KAAK,CAAC1mN,MAAN,GAAe,CAAhC,EAAmC;AACjC,UAAMgqQ,SAAS,GAAG,CAACtjD,KAAK,CAAC,CAAD,CAAN,EAAW,oBAAKA,KAAL,CAAX,CAAlB;;AAEA,WAAOA,KAAK,CAAC1mN,MAAN,GAAey4E,KAAf,IAAwBiuI,KAAK,CAAC1mN,MAAN,IAAgB,CAA/C,EAAkD;AAChD0mN,MAAAA,KAAK,GAAGA,KAAK,CAAC7qM,MAAN,CAAa,CAACwL,CAAD,EAAI3mB,CAAJ,KAAU,EAAEA,CAAC,GAAG,CAAN,CAAvB,CAAR;AACD;;AAED,QAAIgmN,KAAK,CAAC1mN,MAAN,GAAe,CAAnB,EAAsB;AACpB0mN,MAAAA,KAAK,GAAGsjD,SAAR;AACD;AACF;;AAED,SAAOtjD,KAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASujD,UAAT,CAAoB1zP,KAApB,EAA2BkiE,KAA3B,EAAkC;AAChC,SAAOliE,KAAK,CAACixM,IAAN,GAAauiD,UAAU,CAACxzP,KAAD,EAAQA,KAAK,CAACixM,IAAd,CAAvB,GAA6CjxM,KAAK,CAACmwM,KAAN,GAAcnwM,KAAK,CAACmwM,KAAN,CAAYjuI,KAAZ,CAAd,GAAmCliE,KAAK,CAACu/L,MAAN,EAAvF;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS0oD,UAAT,CAAoB/zC,MAApB,EAA4Bl0M,KAA5B,EAAmCkiE,KAAnC,EAA0CsxI,SAA1C,EAAqDoB,UAArD,EAAiE++C,MAAjE,EAAyE;AACvE,QAAMvpP,IAAI,GAAGpK,KAAK,CAACoK,IAAnB;AACA,MAAIsiG,MAAM,GAAG2mJ,gBAAb;;AAEA,MAAIjpP,IAAI,KAAKihP,IAAT,IAAiBz2C,UAAU,KAAKy2C,IAApC,EAA0C;AACxC3+I,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8S,UAAP,CAAkBxT,SAAlB,CAAT;AACD,GAFD,MAEO,IAAIppM,IAAI,KAAKiyM,GAAT,IAAgBzH,UAAU,KAAKyH,GAAnC,EAAwC;AAC7C3vG,IAAAA,MAAM,GAAGwnG,MAAM,CAACmS,SAAP,CAAiB7S,SAAjB,CAAT;AACD,GAFM,MAEA,IAAI06C,aAAa,CAAC9jP,IAAD,CAAjB,EAAyB;AAC9B,UAAMwpP,MAAM,GAAG1/C,MAAM,CAAC6T,WAAP,CAAmBvU,SAAnB,CAAf;;AAEA,QAAImgD,MAAM,IAAI3zP,KAAK,CAACixM,IAApB,EAA0B;AACxBvkG,MAAAA,MAAM,GAAGknJ,MAAT;AACD,KAFD,MAEO;AACL,YAAM97O,IAAI,GAAG+7O,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,KAAf,CAApB;;AAEAwqC,MAAAA,MAAM,GAAG57F,CAAC,IAAIgH,IAAI,CAAChH,CAAD,CAAJ,GAAU8iP,MAAM,CAAC9iP,CAAD,CAAhB,GAAsB,EAApC;AACD;AACF,GAVM,MAUA,IAAI9Q,KAAK,CAACioP,UAAV,EAAsB;AAC3B;AACA,UAAMjxP,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA7yF,IAAAA,MAAM,GAAGwnG,MAAM,CAAC8T,UAAP,CAAkBhxN,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAACA,CAAC,CAACvN,MAAF,GAAW,CAAZ,CAAzB,EAAyCy4E,KAAzC,EAAgDsxI,SAAhD,CAAT;AACD,GAJM,MAIA,IAAIA,SAAJ,EAAe;AACpB9mG,IAAAA,MAAM,GAAGwnG,MAAM,CAACxnG,MAAP,CAAc8mG,SAAd,CAAT;AACD;;AAED,SAAO9mG,MAAP;AACD;;AACD,SAASmnJ,OAAT,CAAiB7zP,KAAjB,EAAwBkiE,KAAxB,EAA+B3tE,MAA/B,EAAuC;AACrC,QAAM47M,KAAK,GAAGujD,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAAxB;AAAA,QACM/sC,IAAI,GAAGn1B,KAAK,CAACm1B,IAAN,EADb;AAAA,QAEMw9L,IAAI,GAAGziO,IAAI,CAACiK,GAAL,CAASg7B,IAAT,CAFb;AAAA,QAGM1tB,CAAC,GAAGvX,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY4kC,IAAI,GAAG+sC,KAAP,GAAeiuI,KAAK,CAAC1mN,MAAjC,CAHV,CADqC,CAIe;;AAEpD,QAAMquB,IAAI,GAAG9gB,CAAC,IAAI;AAChB,QAAI7M,CAAC,GAAG6M,CAAC,GAAG9G,IAAI,CAAC0Q,GAAL,CAASu0B,IAAT,EAAejlC,IAAI,CAACsG,KAAL,CAAWtG,IAAI,CAACiK,GAAL,CAASnD,CAAT,IAAc27N,IAAzB,CAAf,CAAZ;AACA,QAAIxoO,CAAC,GAAGgrC,IAAJ,GAAWA,IAAI,GAAG,GAAtB,EAA2BhrC,CAAC,IAAIgrC,IAAL;AAC3B,WAAOhrC,CAAC,IAAIsd,CAAZ;AACD,GAJD;;AAMA,SAAOlT,MAAM,GAAG47M,KAAK,CAAC7qM,MAAN,CAAawS,IAAb,CAAH,GAAwBA,IAArC;AACD;;AAED,MAAM63N,OAAO,GAAG;AACd,GAACvL,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY,YAFE;AAGd,GAACC,SAAD,GAAa;AAHC,CAAhB;AAKA,MAAM/8C,OAAO,GAAG;AACd,GAAC21B,QAAD,GAAY,WADE;AAEd,GAACmnB,QAAD,GAAY;AAFE,CAAhB;;AAIA,SAASuI,WAAT,CAAqB9zP,KAArB,EAA4BkiE,KAA5B,EAAmC;AACjC,SAAOliE,KAAK,CAACixM,IAAN,GAAa8iD,SAAS,CAAC/zP,KAAK,CAACixM,IAAP,CAAtB,GAAqCjxM,KAAK,CAACoK,IAAN,KAAe6gP,GAAf,GAAqB4I,OAAO,CAAC7zP,KAAD,EAAQkiE,KAAR,EAAe,IAAf,CAA5B,GAAmDytK,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,GAAsB4pP,eAAe,CAACh0P,KAAK,CAAC2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAD,CAArC,GAAsEspP,UAAU,CAAC1zP,KAAD,EAAQkiE,KAAR,CAA/K;AACD;;AACD,SAAS+xL,eAAT,CAAyB//C,MAAzB,EAAiCl0M,KAAjC,EAAwCwzM,SAAxC,EAAmD;AACjD,QAAM1iM,CAAC,GAAG9Q,KAAK,CAACyuM,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAR,CAAL,EAAV;AAAA,QACM/R,CAAC,GAAGyY,CAAC,CAACrnB,MADZ;;AAGA,MAAIuN,CAAC,GAAGqB,CAAC,GAAG,CAAJ,GAAQyY,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAhB,GAAsBA,CAAC,CAAC,CAAD,CAA/B;AAAA,MACI3mB,CADJ;;AAGA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB6M,IAAAA,CAAC,GAAG9G,IAAI,CAACG,GAAL,CAAS2G,CAAT,EAAY8Z,CAAC,CAAC3mB,CAAD,CAAD,GAAO2mB,CAAC,CAAC3mB,CAAC,GAAG,CAAL,CAApB,CAAJ;AACD,GATgD,CAS/C;;;AAGF,SAAO+pN,MAAM,CAAC8T,UAAP,CAAkB,CAAlB,EAAqBhxN,CAArB,EAAwB,IAAI,EAA5B,EAAgCw8M,SAAhC,CAAP;AACD;;AAED,SAASwgD,eAAT,CAAyB7iD,UAAzB,EAAqC;AACnC,QAAM58M,MAAM,GAAG,CAAC,CAACtC,QAAF,EAAYvI,MAAZ,CAAmBynN,UAAnB,CAAf;AACA58M,EAAAA,MAAM,CAAChE,GAAP,GAAa,CAAC0B,QAAd;AACA,SAAOsC,MAAP;AACD;;AAED,SAASw/P,SAAT,CAAmB9iD,IAAnB,EAAyB;AACvB,QAAM18M,MAAM,GAAG08M,IAAI,CAACz9M,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf,CAAf;AACAe,EAAAA,MAAM,CAAChE,GAAP,GAAa,oBAAK0gN,IAAL,CAAb;AACA,SAAO18M,MAAP;AACD;;AAED,MAAM2/P,eAAe,GAAGl0P,KAAK,IAAI2vO,OAAO,CAAC3vO,KAAK,CAACoK,IAAP,CAAP,IAAuBpK,KAAK,CAACixM,IAA9D;;AAEA,SAASkjD,WAAT,CAAqBjgD,MAArB,EAA6Bl0M,KAA7B,EAAoCkiE,KAApC,EAA2C93D,IAA3C,EAAiDopM,SAAjD,EAA4DoB,UAA5D,EAAwE++C,MAAxE,EAAgF;AAC9E,QAAMjnJ,MAAM,GAAG+hG,OAAO,CAACzuM,KAAK,CAACoK,IAAP,CAAP,IAAuBwqM,UAAU,KAAKy2C,IAAtC,IAA8Cz2C,UAAU,KAAKyH,GAA7D,GAAmE43C,eAAe,CAAC//C,MAAD,EAASl0M,KAAT,EAAgBwzM,SAAhB,CAAlF,GAA+Gy0C,UAAU,CAAC/zC,MAAD,EAASl0M,KAAT,EAAgBkiE,KAAhB,EAAuBsxI,SAAvB,EAAkCoB,UAAlC,EAA8C++C,MAA9C,CAAxI;AACA,SAAOvpP,IAAI,KAAK8oP,YAAT,IAAyBgB,eAAe,CAACl0P,KAAD,CAAxC,GAAkDo0P,WAAW,CAAC1nJ,MAAD,CAA7D,GAAwEtiG,IAAI,KAAK+oP,cAAT,GAA0BkB,cAAc,CAAC3nJ,MAAD,CAAxC,GAAmD4nJ,WAAW,CAAC5nJ,MAAD,CAA7I;AACD;;AAED,MAAM0nJ,WAAW,GAAG1nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,EAAe3F,KAAf,KAAyB;AACrD,QAAM61E,KAAK,GAAGlzE,GAAG,CAAC3C,KAAK,CAAC2F,KAAK,GAAG,CAAT,CAAN,EAAmBhD,GAAG,CAAC3C,KAAK,CAACiG,GAAP,EAAY,CAAC0B,QAAb,CAAtB,CAAjB;AAAA,QACM4uM,EAAE,GAAG6H,WAAW,CAACv7M,KAAD,EAAQu/G,MAAR,CADtB;AAAA,QAEMo0F,EAAE,GAAG4H,WAAW,CAACvoI,KAAD,EAAQusC,MAAR,CAFtB;AAGA,SAAOm0F,EAAE,IAAIC,EAAN,GAAWD,EAAE,GAAG,UAAL,GAAkBC,EAA7B,GAAkCA,EAAE,GAAG,OAAOA,EAAV,GAAe,YAAYD,EAAtE;AACD,CALD;;AAOA,MAAM5zM,GAAG,GAAG,CAACE,KAAD,EAAQonQ,IAAR,KAAiBpnQ,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBonQ,IAArD;;AAEA,MAAMF,cAAc,GAAG3nJ,MAAM,IAAI,CAACv/G,KAAD,EAAQ8C,KAAR,KAAkBA,KAAK,GAAGy8G,MAAM,CAACv/G,KAAD,CAAT,GAAmB,IAA3E;;AAEA,MAAMmnQ,WAAW,GAAG5nJ,MAAM,IAAIv/G,KAAK,IAAIu/G,MAAM,CAACv/G,KAAD,CAA7C;;AAEA,MAAMu7M,WAAW,GAAG,CAACv7M,KAAD,EAAQu/G,MAAR,KAAmBn1G,MAAM,CAACvC,QAAP,CAAgB7H,KAAhB,IAAyBu/G,MAAM,CAACv/G,KAAD,CAA/B,GAAyC,IAAhF;;AAEA,SAASqnQ,aAAT,CAAuBx0P,KAAvB,EAA8B;AAC5B,QAAMu/L,MAAM,GAAGv/L,KAAK,CAACu/L,MAAN,EAAf;AAAA,QACMr9H,KAAK,GAAGq9H,MAAM,CAAC91M,MAAP,GAAgB,CAD9B;AAEA,MAAIo3M,EAAE,GAAG,CAACtB,MAAM,CAAC,CAAD,CAAhB;AAAA,MACIuB,EAAE,GAAG,CAAC,oBAAKvB,MAAL,CADV;AAAA,MAEIwB,IAAI,GAAGD,EAAE,GAAGD,EAFhB;;AAIA,MAAI7gM,KAAK,CAACoK,IAAN,KAAeohP,SAAnB,EAA8B;AAC5B,UAAMiJ,MAAM,GAAGvyL,KAAK,GAAG6+H,IAAI,GAAG7+H,KAAV,GAAkB,GAAtC;AACA2+H,IAAAA,EAAE,IAAI4zD,MAAN;AACA3zD,IAAAA,EAAE,IAAI2zD,MAAN;AACA1zD,IAAAA,IAAI,GAAGD,EAAE,GAAGD,EAAZ;AACD;;AAED,SAAO1zM,KAAK,IAAI,CAACA,KAAK,GAAG0zM,EAAT,IAAeE,IAA/B;AACD;;AAED,SAASr0F,MAAT,CAAgBwnG,MAAhB,EAAwBl0M,KAAxB,EAA+BwzM,SAA/B,EAA0CoB,UAA1C,EAAsD;AACpD,QAAMxqM,IAAI,GAAGwqM,UAAU,IAAI50M,KAAK,CAACoK,IAAjC,CADoD,CACb;;AAEvC,MAAI,wBAASopM,SAAT,KAAuB26C,UAAU,CAAC/jP,IAAD,CAArC,EAA6C;AAC3CopM,IAAAA,SAAS,GAAGA,SAAS,CAAC9lN,OAAV,CAAkB,KAAlB,EAAyB,IAAzB,EAA+BA,OAA/B,CAAuC,KAAvC,EAA8C,IAA9C,CAAZ;AACD;;AAED,SAAO,CAAC8lN,SAAD,IAAcppM,IAAI,KAAKihP,IAAvB,GAA8Bn3C,MAAM,CAAC8S,UAAP,CAAkB,kBAAlB,CAA9B,GAAsE,CAACxT,SAAD,IAAcppM,IAAI,KAAKiyM,GAAvB,GAA6BnI,MAAM,CAACmS,SAAP,CAAiB,sBAAjB,CAA7B,GAAwE8tC,WAAW,CAACjgD,MAAD,EAASl0M,KAAT,EAAgB,CAAhB,EAAmB,IAAnB,EAAyBwzM,SAAzB,EAAoCoB,UAApC,EAAgD,IAAhD,CAAhK;AACD;;AAED,SAAS8/C,aAAT,CAAuBxgD,MAAvB,EAA+Bl0M,KAA/B,EAAsCo+L,GAAtC,EAA2C;AACzCA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA,QAAM7tM,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS,CAAT,EAAY6tM,GAAG,CAACkjC,MAAJ,IAAc,CAA1B,CAAZ;AAAA,QACMjmB,GAAG,GAAG3uG,MAAM,CAACwnG,MAAD,EAASl0M,KAAT,EAAgBo+L,GAAG,CAAC1xF,MAApB,EAA4B0xF,GAAG,CAACwW,UAAhC,CADlB,CAFyC,CAGsB;;AAE/D,MAAIq5C,cAAc,CAACjuP,KAAK,CAACoK,IAAP,CAAlB,EAAgC;AAC9B,UAAM/N,CAAC,GAAGy3P,WAAW,CAAC9zP,KAAD,CAAX,CAAmBxM,KAAnB,CAAyB,CAAzB,EAA4BI,GAA5B,CAAgCynN,GAAhC,CAAV;AAAA,UACMhjN,CAAC,GAAGgE,CAAC,CAAC5S,MADZ;AAEA,WAAO,GAAGC,MAAH,CAAU2O,CAAV,EAAa,UAAb,EAAyB3O,MAAzB,CAAgC2O,CAAC,KAAK,CAAN,GAAU,GAAV,GAAgB,KAAhD,EAAuD,IAAvD,EAA6D3O,MAA7D,CAAoE2S,CAAC,CAACtO,IAAF,CAAO,IAAP,CAApE,CAAP;AACD,GAJD,CAIE;AAJF,OAKK,IAAIigQ,UAAU,CAAChuP,KAAK,CAACoK,IAAP,CAAd,EAA4B;AAC7B,YAAMpT,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AAAA,YACMlnM,CAAC,GAAGrB,CAAC,CAACvN,MADZ;AAAA,YAEM4S,CAAC,GAAGhE,CAAC,GAAG9H,GAAJ,GAAUyG,CAAC,CAACxD,KAAF,CAAQ,CAAR,EAAWjD,GAAG,GAAG,CAAjB,EAAoBqD,GAApB,CAAwBynN,GAAxB,EAA6BttN,IAA7B,CAAkC,IAAlC,IAA0C,gBAA1C,GAA6DiJ,CAAC,CAACxD,KAAF,CAAQ,CAAC,CAAT,EAAYI,GAAZ,CAAgBynN,GAAhB,CAAvE,GAA8FrkN,CAAC,CAACpD,GAAF,CAAMynN,GAAN,EAAWttN,IAAX,CAAgB,IAAhB,CAFxG;AAGA,aAAO,GAAGrE,MAAH,CAAU2O,CAAV,EAAa,QAAb,EAAuB3O,MAAvB,CAA8B2O,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA7C,EAAkD,IAAlD,EAAwD3O,MAAxD,CAA+D2S,CAA/D,CAAP;AACD,KALE,CAKD;AALC,SAME;AACD,cAAMrF,CAAC,GAAGgJ,KAAK,CAACu/L,MAAN,EAAV;AACA,eAAO,eAAe71M,MAAf,CAAsB2xN,GAAG,CAACrkN,CAAC,CAAC,CAAD,CAAF,CAAzB,EAAiC,MAAjC,EAAyCtN,MAAzC,CAAgD2xN,GAAG,CAAC,oBAAKrkN,CAAL,CAAD,CAAnD,CAAP;AACD;AACN;;;;;;;;;;;;;;;AC/yBD;;AACA;;AACA;;AAEO,SAAS40U,SAAT,CAAmB1pQ,KAAnB,EAA0BmzK,YAA1B,EAAwCC,YAAxC,EAAsD;AAC3D,SAAO,0BAAUpzK,KAAK,IAAI,CAAnB,EAAsBmzK,YAAY,IAAI,CAAtC,EAAyCC,YAAY,IAAI,CAAzD,CAAP;AACD;;AAEM,SAAS7gB,SAAT,CAAmB/oO,IAAnB,EAAyBoqH,KAAzB,EAAgC;AACrC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAOxuK,CAAC,IAAIA,CAAC,CAAC8mO,SAAP,GAAmB9mO,CAAC,CAAC8mO,SAAF,EAAnB,GAAmC,CAA1C;AACD;;AAEM,SAASx1J,IAAT,CAAcvzE,IAAd,EAAoBoqH,KAApB,EAA2B;AAChC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAACsxE,IAAF,EAAH,GAAcogD,SAAtB;AACD;;AAEM,SAASkgF,MAAT,CAAgB7zM,IAAhB,EAAsBoqH,KAAtB,EAA6B;AAClC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAAC4xM,MAAF,EAAH,GAAgB,EAAxB;AACD;;AAEM,SAASsoD,MAAT,CAAgBn8P,IAAhB,EAAsBigC,KAAtB,EAA6BmqF,KAA7B,EAAoC;AACzC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAO,CAACxuK,CAAD,GAAK0xH,SAAL,GACH,uBAAQ1zF,KAAR,IAAiB,CAACh+B,CAAC,CAACu+P,WAAF,IAAiBv+P,CAAC,CAACk6P,MAApB,EAA4Bl8N,KAA5B,CAAjB,GACA,CAACh+B,CAAC,CAACk6P,MAAF,IAAYl6P,CAAC,CAAC67P,YAAf,EAA6B79N,KAA7B,CAFJ;AAGD;;AAEM,SAASA,KAAT,CAAejgC,IAAf,EAAqBoqH,KAArB,EAA4B;AACjC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAOxuK,CAAC,IAAIA,CAAC,CAACg+B,KAAP,GAAeh+B,CAAC,CAACg+B,KAAF,EAAf,GAA2B,EAAlC;AACD;;AAEM,SAAS3rB,KAAT,CAAetU,IAAf,EAAqByB,KAArB,EAA4B2oH,KAA5B,EAAmC;AACxC,QAAMnoH,CAAC,GAAG,sBAASjC,IAAT,EAAe,CAACoqH,KAAK,IAAI,IAAV,EAAgBqmD,OAA/B,CAAV;AACA,SAAOxuK,CAAC,GAAGA,CAAC,CAACR,KAAD,CAAJ,GAAckyH,SAAtB;AACD;;;;;;;;;;;;;;AEtCD;;;;;;;;;;;AGAA;;AACA;;AACA;;;;AAEA,SAAS6pH,cAAT,CAAwBlyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACmyO,WAAT;AACD;;AAED,SAASC,cAAT,CAAwBpyO,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAACqyO,WAAT;AACD;;AAED,SAASC,aAAT,CAAuBtyO,CAAvB,EAA0B;AACxB,SAAOA,CAAC,CAACuyO,UAAT;AACD;;AAED,SAASC,WAAT,CAAqBxyO,CAArB,EAAwB;AACtB,SAAOA,CAAC,CAACyyO,QAAT;AACD;;AAED,SAASC,WAAT,CAAqB1yO,CAArB,EAAwB;AACtB,SAAOA,CAAC,IAAIA,CAAC,CAAC2yO,QAAd,CADsB,CACE;AACzB;;AAED,SAASC,SAAT,CAAmBp/B,EAAnB,EAAuBC,EAAvB,EAA2B7tG,EAA3B,EAA+BD,EAA/B,EAAmC1zB,EAAnC,EAAuC4zB,EAAvC,EAA2CgtI,EAA3C,EAA+CC,EAA/C,EAAmD;AACjD,MAAIC,GAAG,GAAGntI,EAAE,GAAG4tG,EAAf;AAAA,MAAmBw/B,GAAG,GAAGrtI,EAAE,GAAG8tG,EAA9B;AAAA,MACIw/B,GAAG,GAAGJ,EAAE,GAAG5gK,EADf;AAAA,MACmBihK,GAAG,GAAGJ,EAAE,GAAGjtI,EAD9B;AAAA,MAEIhvG,CAAC,GAAGq8O,GAAG,GAAGH,GAAN,GAAYE,GAAG,GAAGD,GAF1B;AAGA,MAAIn8O,CAAC,GAAGA,CAAJ,GAAQ25E,aAAZ,EAAqB;AACrB35E,EAAAA,CAAC,GAAG,CAACo8O,GAAG,IAAIx/B,EAAE,GAAG5tG,EAAT,CAAH,GAAkBqtI,GAAG,IAAI1/B,EAAE,GAAGvhI,EAAT,CAAtB,IAAsCp7E,CAA1C;AACA,SAAO,CAAC28M,EAAE,GAAG38M,CAAC,GAAGk8O,GAAV,EAAet/B,EAAE,GAAG58M,CAAC,GAAGm8O,GAAxB,CAAP;AACD,EAED;AACA;;;AACA,SAASG,cAAT,CAAwB3/B,EAAxB,EAA4BC,EAA5B,EAAgC7tG,EAAhC,EAAoCD,EAApC,EAAwC4/F,EAAxC,EAA4C6tC,EAA5C,EAAgDrB,EAAhD,EAAoD;AAClD,MAAIZ,GAAG,GAAG39B,EAAE,GAAG5tG,EAAf;AAAA,MACIwrI,GAAG,GAAG39B,EAAE,GAAG9tG,EADf;AAAA,MAEIkkG,EAAE,GAAG,CAACkoC,EAAE,GAAGqB,EAAH,GAAQ,CAACA,EAAZ,IAAkB,gBAAKjC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAvB,CAF3B;AAAA,MAGIiC,EAAE,GAAGxpC,EAAE,GAAGunC,GAHd;AAAA,MAIIkC,EAAE,GAAG,CAACzpC,EAAD,GAAMsnC,GAJf;AAAA,MAKIoC,GAAG,GAAG//B,EAAE,GAAG6/B,EALf;AAAA,MAMIG,GAAG,GAAG//B,EAAE,GAAG6/B,EANf;AAAA,MAOIP,GAAG,GAAGntI,EAAE,GAAGytI,EAPf;AAAA,MAQIL,GAAG,GAAGrtI,EAAE,GAAG2tI,EARf;AAAA,MASIG,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CATxB;AAAA,MAUIW,GAAG,GAAG,CAACF,GAAG,GAAGR,GAAP,IAAc,CAVxB;AAAA,MAWI/zN,EAAE,GAAG8zN,GAAG,GAAGQ,GAXf;AAAA,MAYIt7N,EAAE,GAAG+6N,GAAG,GAAGQ,GAZf;AAAA,MAaIj3K,EAAE,GAAGt9C,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAbxB;AAAA,MAcI9W,CAAC,GAAGokM,EAAE,GAAG6tC,EAdb;AAAA,MAeIO,CAAC,GAAGJ,GAAG,GAAGP,GAAN,GAAYD,GAAG,GAAGS,GAf1B;AAAA,MAgBIxzO,CAAC,GAAG,CAACiY,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAf,IAAoB,gBAAK,eAAI,CAAJ,EAAO9W,CAAC,GAAGA,CAAJ,GAAQo7D,EAAR,GAAao3K,CAAC,GAAGA,CAAxB,CAAL,CAhB5B;AAAA,MAiBIC,GAAG,GAAG,CAACD,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAjB9B;AAAA,MAkBIs3K,GAAG,GAAG,CAAC,CAACF,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EAlB/B;AAAA,MAmBIu3K,GAAG,GAAG,CAACH,CAAC,GAAG17N,EAAJ,GAASgH,EAAE,GAAGjf,CAAf,IAAoBu8D,EAnB9B;AAAA,MAoBIw3K,GAAG,GAAG,CAAC,CAACJ,CAAD,GAAK10N,EAAL,GAAUhH,EAAE,GAAGjY,CAAhB,IAAqBu8D,EApB/B;AAAA,MAqBIy3K,GAAG,GAAGJ,GAAG,GAAGH,GArBhB;AAAA,MAsBIQ,GAAG,GAAGJ,GAAG,GAAGH,GAtBhB;AAAA,MAuBIQ,GAAG,GAAGJ,GAAG,GAAGL,GAvBhB;AAAA,MAwBIU,GAAG,GAAGJ,GAAG,GAAGL,GAxBhB,CADkD,CA2BlD;AACA;;AACA,MAAIM,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAlB,GAAwBC,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA9C,EAAmDP,GAAG,GAAGE,GAAN,EAAWD,GAAG,GAAGE,GAAjB;AAEnD,SAAO;AACLK,IAAAA,EAAE,EAAER,GADC;AAELS,IAAAA,EAAE,EAAER,GAFC;AAGL1C,IAAAA,GAAG,EAAE,CAACkC,EAHD;AAILjC,IAAAA,GAAG,EAAE,CAACkC,EAJD;AAKLC,IAAAA,GAAG,EAAEK,GAAG,IAAIruC,EAAE,GAAGpkM,CAAL,GAAS,CAAb,CALH;AAMLqyO,IAAAA,GAAG,EAAEK,GAAG,IAAItuC,EAAE,GAAGpkM,CAAL,GAAS,CAAb;AANH,GAAP;AAQD;;AAEc,oBAAW;AACxB,MAAIgxO,WAAW,GAAGD,cAAlB;AAAA,MACIG,WAAW,GAAGD,cADlB;AAAA,MAEIkC,YAAY,GAAG,uBAAS,CAAT,CAFnB;AAAA,MAGIC,SAAS,GAAG,IAHhB;AAAA,MAIIhC,UAAU,GAAGD,aAJjB;AAAA,MAKIG,QAAQ,GAAGD,WALf;AAAA,MAMIG,QAAQ,GAAGD,WANf;AAAA,MAOIvtE,OAAO,GAAG,IAPd;;AASA,WAAS+uC,GAAT,GAAe;AACb,QAAIltM,MAAJ;AAAA,QACI7F,CADJ;AAAA,QAEI4pM,EAAE,GAAG,CAAConC,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAFV;AAAA,QAGIqyM,EAAE,GAAG,CAAC8sC,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAHV;AAAA,QAIIkvO,EAAE,GAAGmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,IAAoC++O,YAJ7C;AAAA,QAKI5P,EAAE,GAAGoQ,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC++O,YAL3C;AAAA,QAMI9oC,EAAE,GAAG,eAAIk5B,EAAE,GAAGD,EAAT,CANT;AAAA,QAOI2P,EAAE,GAAG1P,EAAE,GAAGD,EAPd;;AASA,QAAI,CAACj9D,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB,CAVD,CAYb;;AACA,QAAIu+L,EAAE,GAAGwF,EAAT,EAAa5pM,CAAC,GAAGokM,EAAJ,EAAQA,EAAE,GAAGwF,EAAb,EAAiBA,EAAE,GAAG5pM,CAAtB,CAbA,CAeb;;AACA,QAAI,EAAEokM,EAAE,GAAG/0H,aAAP,CAAJ,EAAqB20F,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAAlB,EAArB,CAEA;AAFA,SAGK,IAAIxnC,EAAE,GAAGinC,YAAM5/J,aAAf,EAAwB;AAC3B20F,QAAAA,OAAO,CAACwrE,MAAR,CAAeprC,EAAE,GAAG,eAAI68B,EAAJ,CAApB,EAA6B78B,EAAE,GAAG,eAAI68B,EAAJ,CAAlC;AACAj9D,QAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB68B,EAAtB,EAA0BC,EAA1B,EAA8B,CAAC0P,EAA/B;;AACA,YAAIhnC,EAAE,GAAGv6H,aAAT,EAAkB;AAChB20F,UAAAA,OAAO,CAACwrE,MAAR,CAAe5lC,EAAE,GAAG,eAAIs3B,EAAJ,CAApB,EAA6Bt3B,EAAE,GAAG,eAAIs3B,EAAJ,CAAlC;AACAl9D,UAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsBs3B,EAAtB,EAA0BD,EAA1B,EAA8B2P,EAA9B;AACD;AACF,OAPI,CASL;AATK,WAUA;AACH,cAAIyC,GAAG,GAAGpS,EAAV;AAAA,cACIqS,GAAG,GAAGpS,EADV;AAAA,cAEIqS,GAAG,GAAGtS,EAFV;AAAA,cAGIuS,GAAG,GAAGtS,EAHV;AAAA,cAIIuS,GAAG,GAAGzrC,EAJV;AAAA,cAKI0rC,GAAG,GAAG1rC,EALV;AAAA,cAMI2rC,EAAE,GAAGnC,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkC,CAN3C;AAAA,cAOI6hP,EAAE,GAAID,EAAE,GAAGtkK,aAAN,KAAmB+jK,SAAS,GAAG,CAACA,SAAS,CAAC/gP,KAAV,CAAgB,IAAhB,EAAsBN,SAAtB,CAAJ,GAAuC,gBAAK63M,EAAE,GAAGA,EAAL,GAAUxF,EAAE,GAAGA,EAApB,CAAnE,CAPT;AAAA,cAQI6tC,EAAE,GAAG,eAAI,eAAI7tC,EAAE,GAAGwF,EAAT,IAAe,CAAnB,EAAsB,CAACupC,YAAY,CAAC9gP,KAAb,CAAmB,IAAnB,EAAyBN,SAAzB,CAAvB,CART;AAAA,cASI8hP,GAAG,GAAG5B,EATV;AAAA,cAUI6B,GAAG,GAAG7B,EAVV;AAAA,cAWIh1B,EAXJ;AAAA,cAYItkI,EAZJ,CADG,CAeH;;AACA,cAAIi7J,EAAE,GAAGvkK,aAAT,EAAkB;AAChB,gBAAI6kI,EAAE,GAAG,gBAAK0/B,EAAE,GAAGhqC,EAAL,GAAU,eAAI+pC,EAAJ,CAAf,CAAT;AAAA,gBACI5sH,EAAE,GAAG,gBAAK6sH,EAAE,GAAGxvC,EAAL,GAAU,eAAIuvC,EAAJ,CAAf,CADT;AAEA,gBAAI,CAACF,GAAG,IAAIv/B,EAAE,GAAG,CAAb,IAAkB7kI,aAAtB,EAA+B6kI,EAAE,IAAK08B,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqB2C,GAAG,IAAIr/B,EAA5B,EAAgCs/B,GAAG,IAAIt/B,EAAvC,CAA/B,KACKu/B,GAAG,GAAG,CAAN,EAASF,GAAG,GAAGC,GAAG,GAAG,CAACvS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACL,gBAAI,CAACwS,GAAG,IAAI3sH,EAAE,GAAG,CAAb,IAAkB13C,aAAtB,EAA+B03C,EAAE,IAAK6pH,EAAE,GAAG,CAAH,GAAO,CAAC,CAAjB,EAAqByC,GAAG,IAAItsH,EAA5B,EAAgCusH,GAAG,IAAIvsH,EAAvC,CAA/B,KACK2sH,GAAG,GAAG,CAAN,EAASL,GAAG,GAAGC,GAAG,GAAG,CAACrS,EAAE,GAAGC,EAAN,IAAY,CAAjC;AACN;;AAED,cAAI8O,GAAG,GAAG5rC,EAAE,GAAG,eAAIivC,GAAJ,CAAf;AAAA,cACIpD,GAAG,GAAG7rC,EAAE,GAAG,eAAIivC,GAAJ,CADf;AAAA,cAEIzB,GAAG,GAAGhoC,EAAE,GAAG,eAAI4pC,GAAJ,CAFf;AAAA,cAGI3B,GAAG,GAAGjoC,EAAE,GAAG,eAAI4pC,GAAJ,CAHf,CAzBG,CA8BH;;AACA,cAAIvB,EAAE,GAAG5iK,aAAT,EAAkB;AAChB,gBAAI+iK,GAAG,GAAGhuC,EAAE,GAAG,eAAIkvC,GAAJ,CAAf;AAAA,gBACIjB,GAAG,GAAGjuC,EAAE,GAAG,eAAIkvC,GAAJ,CADf;AAAA,gBAEIhB,GAAG,GAAG1oC,EAAE,GAAG,eAAI2pC,GAAJ,CAFf;AAAA,gBAGIhB,GAAG,GAAG3oC,EAAE,GAAG,eAAI2pC,GAAJ,CAHf;AAAA,gBAIIQ,EAJJ,CADgB,CAOhB;;AACA,gBAAI/rC,EAAE,GAAGgnC,QAAL,KAAY+E,EAAE,GAAGtC,SAAS,CAACzB,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqBH,GAArB,EAA0BC,GAA1B,EAA+BT,GAA/B,EAAoCC,GAApC,CAA1B,CAAJ,EAAyE;AACvE,kBAAIl2O,EAAE,GAAGq0O,GAAG,GAAG+D,EAAE,CAAC,CAAD,CAAjB;AAAA,kBACIC,EAAE,GAAG/D,GAAG,GAAG8D,EAAE,CAAC,CAAD,CADjB;AAAA,kBAEIE,EAAE,GAAG7B,GAAG,GAAG2B,EAAE,CAAC,CAAD,CAFjB;AAAA,kBAGIG,EAAE,GAAG7B,GAAG,GAAG0B,EAAE,CAAC,CAAD,CAHjB;AAAA,kBAIII,EAAE,GAAG,IAAI,eAAI,gBAAK,CAACx4O,EAAE,GAAGs4O,EAAL,GAAUD,EAAE,GAAGE,EAAhB,KAAuB,gBAAKv4O,EAAE,GAAGA,EAAL,GAAUq4O,EAAE,GAAGA,EAApB,IAA0B,gBAAKC,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAApB,CAAjD,CAAL,IAAkF,CAAtF,CAJb;AAAA,kBAKIE,EAAE,GAAG,gBAAKL,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAAV,GAAgBA,EAAE,CAAC,CAAD,CAAF,GAAQA,EAAE,CAAC,CAAD,CAA/B,CALT;AAMAF,cAAAA,GAAG,GAAG,eAAI5B,EAAJ,EAAQ,CAACroC,EAAE,GAAGwqC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACAL,cAAAA,GAAG,GAAG,eAAI7B,EAAJ,EAAQ,CAAC7tC,EAAE,GAAGgwC,EAAN,KAAaD,EAAE,GAAG,CAAlB,CAAR,CAAN;AACD;AACF,WAjDE,CAmDH;;;AACA,cAAI,EAAET,GAAG,GAAGrkK,aAAR,CAAJ,EAAsB20F,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,EAAtB,CAEA;AAFA,eAGK,IAAI6D,GAAG,GAAGzkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACM,GAAD,EAAMC,GAAN,EAAWvC,GAAX,EAAgBC,GAAhB,EAAqB7rC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAACI,GAAD,EAAMC,GAAN,EAAWT,GAAX,EAAgBC,GAAhB,EAAqBztC,EAArB,EAAyB0vC,GAAzB,EAA8BlD,EAA9B,CAAnB;AAEA5sE,cAAAA,OAAO,CAACwrE,MAAR,CAAevyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI6D,GAAG,GAAG7B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAM72B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsB,iBAAM6Y,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoG,CAACxB,EAArG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BY,GAA1B,EAA+B,iBAAMn7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAACwrE,MAAR,CAAeQ,GAAf,EAAoBC,GAApB,GAA0BjsE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB3O,EAAlB,EAAsBivC,GAAtB,EAA2BC,GAA3B,EAAgC,CAAC1C,EAAjC,CAA1B,CAzEF,CA2EH;AACA;;AACA,cAAI,EAAEhnC,EAAE,GAAGv6H,aAAP,KAAmB,EAAEokK,GAAG,GAAGpkK,aAAR,CAAvB,EAAyC20F,OAAO,CAAC0rE,MAAR,CAAekC,GAAf,EAAoBC,GAApB,EAAzC,CAEA;AAFA,eAGK,IAAIgC,GAAG,GAAGxkK,aAAV,EAAmB;AACtB4tI,cAAAA,EAAE,GAAG+0B,cAAc,CAACJ,GAAD,EAAMC,GAAN,EAAWO,GAAX,EAAgBC,GAAhB,EAAqBzoC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AACAj4J,cAAAA,EAAE,GAAGq5J,cAAc,CAAChC,GAAD,EAAMC,GAAN,EAAWqC,GAAX,EAAgBC,GAAhB,EAAqB3oC,EAArB,EAAyB,CAACiqC,GAA1B,EAA+BjD,EAA/B,CAAnB;AAEA5sE,cAAAA,OAAO,CAAC0rE,MAAR,CAAezyB,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAAC+yB,GAA1B,EAA+B/yB,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACgzB,GAA1C,EAJsB,CAMtB;;AACA,kBAAI4D,GAAG,GAAG5B,EAAV,EAAcjuE,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAMr3J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E,EAAd,CAEA;AAFA,mBAGK;AACH5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYkK,EAAE,CAACg2B,EAAf,EAAmBh2B,EAAE,CAACi2B,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAM52B,EAAE,CAACgzB,GAAT,EAAchzB,EAAE,CAAC+yB,GAAjB,CAA/B,EAAsD,iBAAM/yB,EAAE,CAACo1B,GAAT,EAAcp1B,EAAE,CAACm1B,GAAjB,CAAtD,EAA6E,CAACxB,EAA9E;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB,iBAAMqT,EAAE,CAACi2B,EAAH,GAAQj2B,EAAE,CAACo1B,GAAjB,EAAsBp1B,EAAE,CAACg2B,EAAH,GAAQh2B,EAAE,CAACm1B,GAAjC,CAAtB,EAA6D,iBAAMz5J,EAAE,CAACu6J,EAAH,GAAQv6J,EAAE,CAAC05J,GAAjB,EAAsB15J,EAAE,CAACs6J,EAAH,GAAQt6J,EAAE,CAACy5J,GAAjC,CAA7D,EAAoGxB,EAApG;AACA5sE,kBAAAA,OAAO,CAAC+uC,GAAR,CAAYp6H,EAAE,CAACs6J,EAAf,EAAmBt6J,EAAE,CAACu6J,EAAtB,EAA0BW,GAA1B,EAA+B,iBAAMl7J,EAAE,CAAC05J,GAAT,EAAc15J,EAAE,CAACy5J,GAAjB,CAA/B,EAAsD,iBAAMz5J,EAAE,CAACs3J,GAAT,EAAct3J,EAAE,CAACq3J,GAAjB,CAAtD,EAA6E,CAACY,EAA9E;AACD;AACF,aAfI,CAiBL;AAjBK,iBAkBA5sE,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkBnJ,EAAlB,EAAsB4pC,GAAtB,EAA2BD,GAA3B,EAAgC3C,EAAhC;AACN;AAED5sE,IAAAA,OAAO,CAACyrE,SAAR;AAEA,QAAI5pO,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAEDktM,EAAAA,GAAG,CAACshC,QAAJ,GAAe,YAAW;AACxB,QAAIr0O,CAAC,GAAG,CAAC,CAACgxO,WAAW,CAAC3+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAD,GAAsC,CAACm/O,WAAW,CAAC7+O,KAAZ,CAAkB,IAAlB,EAAwBN,SAAxB,CAAxC,IAA8E,CAAtF;AAAA,QACImH,CAAC,GAAG,CAAC,CAACk4O,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAAD,GAAqC,CAACu/O,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAAvC,IAA0E,CAA1E,GAA8Ei9O,WAAK,CAD3F;AAEA,WAAO,CAAC,eAAI91O,CAAJ,IAAS8G,CAAV,EAAa,eAAI9G,CAAJ,IAAS8G,CAAtB,CAAP;AACD,GAJD;;AAMA+yM,EAAAA,GAAG,CAACi+B,WAAJ,GAAkB,UAASr4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0/O,WAAW,GAAG,OAAOr4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFi+B,WAA5F;AACD,GAFD;;AAIAj+B,EAAAA,GAAG,CAACm+B,WAAJ,GAAkB,UAASv4N,CAAT,EAAY;AAC5B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB4/O,WAAW,GAAG,OAAOv4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA5C,EAA0Do6L,GAA9E,IAAqFm+B,WAA5F;AACD,GAFD;;AAIAn+B,EAAAA,GAAG,CAACogC,YAAJ,GAAmB,UAASx6N,CAAT,EAAY;AAC7B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6hP,YAAY,GAAG,OAAOx6N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7C,EAA2Do6L,GAA/E,IAAsFogC,YAA7F;AACD,GAFD;;AAIApgC,EAAAA,GAAG,CAACqgC,SAAJ,GAAgB,UAASz6N,CAAT,EAAY;AAC1B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8hP,SAAS,GAAGz6N,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA7D,EAA2Eo6L,GAA/F,IAAsGqgC,SAA7G;AACD,GAFD;;AAIArgC,EAAAA,GAAG,CAACq+B,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDo6L,GAA7E,IAAoFq+B,UAA3F;AACD,GAFD;;AAIAr+B,EAAAA,GAAG,CAACu+B,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFu+B,QAAzF;AACD,GAFD;;AAIAv+B,EAAAA,GAAG,CAACy+B,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDo6L,GAA3E,IAAkFy+B,QAAzF;AACD,GAFD;;AAIAz+B,EAAAA,GAAG,CAAC/uC,OAAJ,GAAc,UAASrrJ,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkCo6L,GAAtD,IAA6D/uC,OAApE;AACD,GAFD;;AAIA,SAAO+uC,GAAP;AACD;;;;;;;;;AIpQD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS56M,CAAT,EAAYue,CAAZ,EAAe;AAC5B,MAAIsjM,OAAO,GAAG,uBAAS,IAAT,CAAd;AAAA,MACIh2C,OAAO,GAAG,IADd;AAAA,MAEI6wE,KAAK,GAAGC,eAFZ;AAAA,MAGIp5N,MAAM,GAAG,IAHb;AAKAvjB,EAAAA,CAAC,GAAG,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA+BA,CAAC,KAAK+uH,SAAP,GAAoB6tH,QAApB,GAA6B,uBAAS58O,CAAT,CAA/D;AACAue,EAAAA,CAAC,GAAG,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA+BA,CAAC,KAAKwwG,SAAP,GAAoB8tH,QAApB,GAA6B,uBAASt+N,CAAT,CAA/D;;AAEA,WAAS6P,IAAT,CAAcvlB,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAD7B;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAMA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0Bv5N,MAAM,CAACg5N,SAAP,GAA1B,KACKh5N,MAAM,CAACk5N,OAAP;AACN;;AACD,UAAIK,QAAJ,EAAcv5N,MAAM,CAAC63L,KAAP,CAAa,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAf,EAA6B,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAA/B;AACf;;AAED,QAAI6E,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED0gB,EAAAA,IAAI,CAACpuB,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4EpuB,CAAnF;AACD,GAFD;;AAIAouB,EAAAA,IAAI,CAAC7P,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD4N,IAApE,IAA4E7P,CAAnF;AACD,GAFD;;AAIA6P,EAAAA,IAAI,CAACyzL,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuD4N,IAA3E,IAAmFyzL,OAA1F;AACD,GAFD;;AAIAzzL,EAAAA,IAAI,CAACsuN,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyDz9I,IAA7E,IAAqFsuN,KAA5F;AACD,GAFD;;AAIAtuN,EAAAA,IAAI,CAACy9I,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmE4N,IAAvF,IAA+Fy9I,OAAtG;AACD,GAFD;;AAIA,SAAOz9I,IAAP;AACD;;;;;;;;;ACxDD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS8rL,EAAT,EAAaC,EAAb,EAAiB9tG,EAAjB,EAAqB;AAClC,MAAIC,EAAE,GAAG,IAAT;AAAA,MACIu1G,OAAO,GAAG,uBAAS,IAAT,CADd;AAAA,MAEIh2C,OAAO,GAAG,IAFd;AAAA,MAGI6wE,KAAK,GAAGC,eAHZ;AAAA,MAIIp5N,MAAM,GAAG,IAJb;AAMA22L,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAKnrF,SAAR,GAAqB6tH,QAArB,GAA8B,uBAAS,CAAC1iC,EAAV,CAAnE;AACAC,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAKprF,SAAR,GAAqB,uBAAS,CAAT,CAArB,GAAmC,uBAAS,CAACorF,EAAV,CAAxE;AACA9tG,EAAAA,EAAE,GAAG,OAAOA,EAAP,KAAc,UAAd,GAA2BA,EAA3B,GAAiCA,EAAE,KAAK0iB,SAAR,GAAqB8tH,QAArB,GAA8B,uBAAS,CAACxwI,EAAV,CAAnE;;AAEA,WAASswG,IAAT,CAAc9zM,IAAd,EAAoB;AAClB,QAAIhP,CAAJ;AAAA,QACIiK,CADJ;AAAA,QAEIqT,CAFJ;AAAA,QAGIpP,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAH7B;AAAA,QAIIuN,CAJJ;AAAA,QAKIo2O,QAAQ,GAAG,KALf;AAAA,QAMIpvO,MANJ;AAAA,QAOIqvO,GAAG,GAAG,IAAIpjP,KAAJ,CAAUoO,CAAV,CAPV;AAAA,QAQIi1O,GAAG,GAAG,IAAIrjP,KAAJ,CAAUoO,CAAV,CARV;AAUA,QAAI8jK,OAAO,IAAI,IAAf,EAAqBtoJ,MAAM,GAAGm5N,KAAK,CAAChvO,MAAM,GAAG,mBAAV,CAAd;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0B;AACxBh5O,UAAAA,CAAC,GAAGjK,CAAJ;AACA0pB,UAAAA,MAAM,CAAC64N,SAAP;AACA74N,UAAAA,MAAM,CAACg5N,SAAP;AACD,SAJD,MAIO;AACLh5N,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAACg5N,SAAP;;AACA,eAAKplO,CAAC,GAAGtd,CAAC,GAAG,CAAb,EAAgBsd,CAAC,IAAIrT,CAArB,EAAwB,EAAEqT,CAA1B,EAA6B;AAC3BoM,YAAAA,MAAM,CAAC63L,KAAP,CAAa2hC,GAAG,CAAC5lO,CAAD,CAAhB,EAAqB6lO,GAAG,CAAC7lO,CAAD,CAAxB;AACD;;AACDoM,UAAAA,MAAM,CAACk5N,OAAP;AACAl5N,UAAAA,MAAM,CAAC+4N,OAAP;AACD;AACF;;AACD,UAAIQ,QAAJ,EAAc;AACZC,QAAAA,GAAG,CAACljP,CAAD,CAAH,GAAS,CAACqgN,EAAE,CAACxzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAZ,EAA0Bm0O,GAAG,CAACnjP,CAAD,CAAH,GAAS,CAACsgN,EAAE,CAACzzM,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC;AACA0a,QAAAA,MAAM,CAAC63L,KAAP,CAAa9uG,EAAE,GAAG,CAACA,EAAE,CAAC5lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBk0O,GAAG,CAACljP,CAAD,CAAvC,EAA4CwyG,EAAE,GAAG,CAACA,EAAE,CAAC3lG,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAN,GAAqBm0O,GAAG,CAACnjP,CAAD,CAAtE;AACD;AACF;;AAED,QAAI6T,MAAJ,EAAY,OAAO6V,MAAM,GAAG,IAAT,EAAe7V,MAAM,GAAG,EAAT,IAAe,IAArC;AACb;;AAED,WAASuvO,QAAT,GAAoB;AAClB,WAAO,qBAAOp7B,OAAP,CAAeA,OAAf,EAAwB66B,KAAxB,CAA8BA,KAA9B,EAAqC7wE,OAArC,CAA6CA,OAA7C,CAAP;AACD;;AAED8wC,EAAAA,IAAI,CAAC38M,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD8rF,EAAE,GAAG,IAAtD,EAA4DqwG,IAAhF,IAAwFzC,EAA/F;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACzC,EAAL,GAAU,UAAS15L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB+gN,EAAE,GAAG,OAAO15L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6EzC,EAApF;AACD,GAFD;;AAIAyC,EAAAA,IAAI,CAACrwG,EAAL,GAAU,UAAS9rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmzG,EAAE,GAAG9rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGrwG,EAAvG;AACD,GAFD;;AAIAqwG,EAAAA,IAAI,CAACp+L,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiD6rF,EAAE,GAAG,IAAtD,EAA4DswG,IAAhF,IAAwFxC,EAA/F;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACxC,EAAL,GAAU,UAAS35L,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBghN,EAAE,GAAG,OAAO35L,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAnC,EAAiDm8L,IAArE,IAA6ExC,EAApF;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACtwG,EAAL,GAAU,UAAS7rF,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkzG,EAAE,GAAG7rF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtD,EAAoEm8L,IAAxF,IAAgGtwG,EAAvG;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAACugC,MAAL,GACAvgC,IAAI,CAACwgC,MAAL,GAAc,YAAW;AACvB,WAAOF,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAHD;;AAKAwC,EAAAA,IAAI,CAACygC,MAAL,GAAc,YAAW;AACvB,WAAOH,QAAQ,GAAGj9O,CAAX,CAAak6M,EAAb,EAAiB37L,CAAjB,CAAmB8tF,EAAnB,CAAP;AACD,GAFD;;AAIAswG,EAAAA,IAAI,CAAC0gC,MAAL,GAAc,YAAW;AACvB,WAAOJ,QAAQ,GAAGj9O,CAAX,CAAassG,EAAb,EAAiB/tF,CAAjB,CAAmB47L,EAAnB,CAAP;AACD,GAFD;;AAIAwC,EAAAA,IAAI,CAACkF,OAAL,GAAe,UAASrhM,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0oN,OAAO,GAAG,OAAOrhM,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAAC,CAACA,CAAX,CAAxC,EAAuDm8L,IAA3E,IAAmFkF,OAA1F;AACD,GAFD;;AAIAlF,EAAAA,IAAI,CAAC+/B,KAAL,GAAa,UAASl8N,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBujP,KAAK,GAAGl8N,CAAR,EAAWqrJ,OAAO,IAAI,IAAX,KAAoBtoJ,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAD,CAAlC,CAAX,EAAyD8wC,IAA7E,IAAqF+/B,KAA5F;AACD,GAFD;;AAIA//B,EAAAA,IAAI,CAAC9wC,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqnB,CAAC,IAAI,IAAL,GAAYqrJ,OAAO,GAAGtoJ,MAAM,GAAG,IAA/B,GAAsCA,MAAM,GAAGm5N,KAAK,CAAC7wE,OAAO,GAAGrrJ,CAAX,CAApD,EAAmEm8L,IAAvF,IAA+F9wC,OAAtG;AACD,GAFD;;AAIA,SAAO8wC,IAAP;AACD;;;;;;;;;AG9GD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,oBAAW;AACxB,MAAI9/M,KAAK,GAAGi9H,iBAAZ;AAAA,MACIwjH,UAAU,GAAGC,mBADjB;AAAA,MAEI15O,IAAI,GAAG,IAFX;AAAA,MAGIo1O,UAAU,GAAG,uBAAS,CAAT,CAHjB;AAAA,MAIIE,QAAQ,GAAG,uBAASrC,SAAT,CAJf;AAAA,MAKIuC,QAAQ,GAAG,uBAAS,CAAT,CALf;;AAOA,WAASmE,GAAT,CAAa30O,IAAb,EAAmB;AACjB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAG,CAACc,IAAI,GAAG,oBAAMA,IAAN,CAAR,EAAqB1P,MAD7B;AAAA,QAEI2K,CAFJ;AAAA,QAGIqT,CAHJ;AAAA,QAII/W,GAAG,GAAG,CAJV;AAAA,QAKIT,KAAK,GAAG,IAAIhG,KAAJ,CAAUoO,CAAV,CALZ;AAAA,QAMI4yM,IAAI,GAAG,IAAIhhN,KAAJ,CAAUoO,CAAV,CANX;AAAA,QAOI+gO,EAAE,GAAG,CAACmQ,UAAU,CAAC/+O,KAAX,CAAiB,IAAjB,EAAuBN,SAAvB,CAPV;AAAA,QAQIi2M,EAAE,GAAGjwM,IAAI,CAACG,GAAL,CAAS+2O,SAAT,EAAcl3O,IAAI,CAACK,GAAL,CAAS,CAAC62O,SAAV,EAAeqC,QAAQ,CAACj/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,IAAkCkvO,EAAjD,CAAd,CART;AAAA,QASIC,EATJ;AAAA,QAUI5qM,CAAC,GAAGv+B,IAAI,CAACG,GAAL,CAASH,IAAI,CAACiT,GAAL,CAASg9L,EAAT,IAAe9nM,CAAxB,EAA2BsxO,QAAQ,CAACn/O,KAAT,CAAe,IAAf,EAAqBN,SAArB,CAA3B,CAVR;AAAA,QAWI6jP,EAAE,GAAGt/M,CAAC,IAAI0xK,EAAE,GAAG,CAAL,GAAS,CAAC,CAAV,GAAc,CAAlB,CAXV;AAAA,QAYI9jM,CAZJ;;AAcA,SAAKlS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtB,UAAI,CAACkS,CAAC,GAAG4uM,IAAI,CAACh7M,KAAK,CAAC9F,CAAD,CAAL,GAAWA,CAAZ,CAAJ,GAAqB,CAACgD,KAAK,CAACgM,IAAI,CAAChP,CAAD,CAAL,EAAUA,CAAV,EAAagP,IAAb,CAAhC,IAAsD,CAA1D,EAA6D;AAC3DzI,QAAAA,GAAG,IAAI2L,CAAP;AACD;AACF,KAnBgB,CAqBjB;;;AACA,QAAIuxO,UAAU,IAAI,IAAlB,EAAwB39O,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOw5O,UAAU,CAAC3iC,IAAI,CAAC9gN,CAAD,CAAL,EAAU8gN,IAAI,CAAC72M,CAAD,CAAd,CAAjB;AAAsC,KAAlE,EAAxB,KACK,IAAID,IAAI,IAAI,IAAZ,EAAkBlE,KAAK,CAACkE,IAAN,CAAW,UAAShK,CAAT,EAAYiK,CAAZ,EAAe;AAAE,aAAOD,IAAI,CAACgF,IAAI,CAAChP,CAAD,CAAL,EAAUgP,IAAI,CAAC/E,CAAD,CAAd,CAAX;AAAgC,KAA5D,EAvBN,CAyBjB;;AACA,SAAKjK,CAAC,GAAG,CAAJ,EAAOsd,CAAC,GAAG/W,GAAG,GAAG,CAACyvM,EAAE,GAAG9nM,CAAC,GAAG01O,EAAV,IAAgBr9O,GAAnB,GAAyB,CAA5C,EAA+CvG,CAAC,GAAGkO,CAAnD,EAAsD,EAAElO,CAAF,EAAKivO,EAAE,GAAGC,EAAhE,EAAoE;AAClEjlO,MAAAA,CAAC,GAAGnE,KAAK,CAAC9F,CAAD,CAAT,EAAckS,CAAC,GAAG4uM,IAAI,CAAC72M,CAAD,CAAtB,EAA2BilO,EAAE,GAAGD,EAAE,IAAI/8N,CAAC,GAAG,CAAJ,GAAQA,CAAC,GAAGoL,CAAZ,GAAgB,CAApB,CAAF,GAA2BsmO,EAA3D,EAA+D9iC,IAAI,CAAC72M,CAAD,CAAJ,GAAU;AACvE+E,QAAAA,IAAI,EAAEA,IAAI,CAAC/E,CAAD,CAD6D;AAEvEnE,QAAAA,KAAK,EAAE9F,CAFgE;AAGvEgD,QAAAA,KAAK,EAAEkP,CAHgE;AAIvEktO,QAAAA,UAAU,EAAEnQ,EAJ2D;AAKvEqQ,QAAAA,QAAQ,EAAEpQ,EAL6D;AAMvEsQ,QAAAA,QAAQ,EAAEl7M;AAN6D,OAAzE;AAQD;;AAED,WAAOw8K,IAAP;AACD;;AAED6iC,EAAAA,GAAG,CAAC3gP,KAAJ,GAAY,UAAS2jB,CAAT,EAAY;AACtB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDg9N,GAAxE,IAA+E3gP,KAAtF;AACD,GAFD;;AAIA2gP,EAAAA,GAAG,CAACF,UAAJ,GAAiB,UAAS98N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmkP,UAAU,GAAG98N,CAAb,EAAgB3c,IAAI,GAAG,IAAvB,EAA6B25O,GAAjD,IAAwDF,UAA/D;AACD,GAFD;;AAIAE,EAAAA,GAAG,CAAC35O,IAAJ,GAAW,UAAS2c,CAAT,EAAY;AACrB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0K,IAAI,GAAG2c,CAAP,EAAU88N,UAAU,GAAG,IAAvB,EAA6BE,GAAjD,IAAwD35O,IAA/D;AACD,GAFD;;AAIA25O,EAAAA,GAAG,CAACvE,UAAJ,GAAiB,UAASz4N,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB8/O,UAAU,GAAG,OAAOz4N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAA3C,EAAyDg9N,GAA7E,IAAoFvE,UAA3F;AACD,GAFD;;AAIAuE,EAAAA,GAAG,CAACrE,QAAJ,GAAe,UAAS34N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBggP,QAAQ,GAAG,OAAO34N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFrE,QAAzF;AACD,GAFD;;AAIAqE,EAAAA,GAAG,CAACnE,QAAJ,GAAe,UAAS74N,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBkgP,QAAQ,GAAG,OAAO74N,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAzC,EAAuDg9N,GAA3E,IAAkFnE,QAAzF;AACD,GAFD;;AAIA,SAAOmE,GAAP;AACD;;;;;;;;;;AC/ED;;;;AAEO,IAAIE,iBAAiB,GAAGC,WAAW,CAAChB,eAAD,CAAnC;;;AAEP,SAASiB,MAAT,CAAgBlB,KAAhB,EAAuB;AACrB,OAAKmB,MAAL,GAAcnB,KAAd;AACD;;AAEDkB,MAAM,CAAC3jP,SAAP,GAAmB;AACjBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKyB,MAAL,CAAYzB,SAAZ;AACD,GAHgB;AAIjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKuB,MAAL,CAAYvB,OAAZ;AACD,GANgB;AAOjBC,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKsB,MAAL,CAAYtB,SAAZ;AACD,GATgB;AAUjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKoB,MAAL,CAAYpB,OAAZ;AACD,GAZgB;AAajBrhC,EAAAA,KAAK,EAAE,UAASr6M,CAAT,EAAY8G,CAAZ,EAAe;AACpB,SAAKg2O,MAAL,CAAYziC,KAAZ,CAAkBvzM,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAtB,EAAmC8G,CAAC,GAAG,CAACjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAxC;AACD;AAfgB,CAAnB;;AAkBe,SAAS48O,WAAT,CAAqBjB,KAArB,EAA4B;AAEzC,WAASoB,MAAT,CAAgBjyE,OAAhB,EAAyB;AACvB,WAAO,IAAI+xE,MAAJ,CAAWlB,KAAK,CAAC7wE,OAAD,CAAhB,CAAP;AACD;;AAEDiyE,EAAAA,MAAM,CAACD,MAAP,GAAgBnB,KAAhB;AAEA,SAAOoB,MAAP;AACD;;;;;;;;;;ACnCD;;AACA;;;;;;;;AAEO,SAASC,UAAT,CAAoBpyO,CAApB,EAAuB;AAC5B,MAAIrF,CAAC,GAAGqF,CAAC,CAAC+wO,KAAV;AAEA/wO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;;AAEA5S,EAAAA,CAAC,CAAC+wO,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAOlyO,CAAP;AACD;;AAEc,oBAAW;AACxB,SAAOoyO,UAAU,CAAC,qBAAOrB,KAAP,CAAagB,yBAAb,CAAD,CAAjB;AACD;;;;;;;;;AClBD;;AACA;;AACA;;;;;;;;AAEe,oBAAW;AACxB,MAAI38O,CAAC,GAAG,qBAAO27O,KAAP,CAAagB,yBAAb,CAAR;AAAA,MACIp3O,CAAC,GAAGvF,CAAC,CAAC27O,KADV;AAAA,MAEIxiC,EAAE,GAAGn5M,CAAC,CAACm8O,MAFX;AAAA,MAGI5wI,EAAE,GAAGvrG,CAAC,CAACs8O,MAHX;AAAA,MAIIljC,EAAE,GAAGp5M,CAAC,CAACo8O,MAJX;AAAA,MAKI9wI,EAAE,GAAGtrG,CAAC,CAACq8O,MALX;AAOAr8O,EAAAA,CAAC,CAACi9O,KAAF,GAAUj9O,CAAC,CAACf,CAAZ,EAAe,OAAOe,CAAC,CAACf,CAAxB;AACAe,EAAAA,CAAC,CAACk4O,UAAF,GAAel4O,CAAC,CAACm5M,EAAjB,EAAqB,OAAOn5M,CAAC,CAACm5M,EAA9B;AACAn5M,EAAAA,CAAC,CAACo4O,QAAF,GAAap4O,CAAC,CAACurG,EAAf,EAAmB,OAAOvrG,CAAC,CAACurG,EAA5B;AACAvrG,EAAAA,CAAC,CAACiV,MAAF,GAAWjV,CAAC,CAACwd,CAAb,EAAgB,OAAOxd,CAAC,CAACwd,CAAzB;AACAxd,EAAAA,CAAC,CAAC83O,WAAF,GAAgB93O,CAAC,CAACo5M,EAAlB,EAAsB,OAAOp5M,CAAC,CAACo5M,EAA/B;AACAp5M,EAAAA,CAAC,CAACg4O,WAAF,GAAgBh4O,CAAC,CAACsrG,EAAlB,EAAsB,OAAOtrG,CAAC,CAACsrG,EAA/B;AACAtrG,EAAAA,CAAC,CAACk9O,cAAF,GAAmB,YAAW;AAAE,WAAO,4BAAW/jC,EAAE,EAAb,CAAP;AAA0B,GAA1D,EAA4D,OAAOn5M,CAAC,CAACm8O,MAArE;AACAn8O,EAAAA,CAAC,CAACm9O,YAAF,GAAiB,YAAW;AAAE,WAAO,4BAAW5xI,EAAE,EAAb,CAAP;AAA0B,GAAxD,EAA0D,OAAOvrG,CAAC,CAACs8O,MAAnE;AACAt8O,EAAAA,CAAC,CAACo9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAWhkC,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOp5M,CAAC,CAACo8O,MAAtE;AACAp8O,EAAAA,CAAC,CAACq9O,eAAF,GAAoB,YAAW;AAAE,WAAO,4BAAW/xI,EAAE,EAAb,CAAP;AAA0B,GAA3D,EAA6D,OAAOtrG,CAAC,CAACq8O,MAAtE;;AAEAr8O,EAAAA,CAAC,CAAC27O,KAAF,GAAU,UAASl8N,CAAT,EAAY;AACpB,WAAO5mB,SAAS,CAACT,MAAV,GAAmBmN,CAAC,CAAC,qBAAYka,CAAZ,CAAD,CAApB,GAAuCla,CAAC,GAAGu3O,MAAlD;AACD,GAFD;;AAIA,SAAO98O,CAAP;AACD;;;;;;;;;;;AE5BD;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASs9O,UAAT,CAAoB33O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAACipD,MAAT;AACD;;AAED,SAAS2uL,UAAT,CAAoB53O,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC0pC,MAAT;AACD;;AAED,SAASmuM,IAAT,CAAc7B,KAAd,EAAqB;AACnB,MAAI/sL,MAAM,GAAG0uL,UAAb;AAAA,MACIjuM,MAAM,GAAGkuM,UADb;AAAA,MAEIt+O,CAAC,GAAG48O,QAFR;AAAA,MAGIr+N,CAAC,GAAGs+N,QAHR;AAAA,MAIIhxE,OAAO,GAAG,IAJd;;AAMA,WAAS0yE,IAAT,GAAgB;AACd,QAAI7wO,MAAJ;AAAA,QAAYpT,IAAI,GAAG4I,aAAMvK,IAAN,CAAWiB,SAAX,CAAnB;AAAA,QAA0CyD,CAAC,GAAGsyD,MAAM,CAACz1D,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA9C;AAAA,QAAwEiD,CAAC,GAAG6yC,MAAM,CAACl2C,KAAP,CAAa,IAAb,EAAmBI,IAAnB,CAA5E;;AACA,QAAI,CAACuxK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdgvO,IAAAA,KAAK,CAAC7wE,OAAD,EAAU,CAAC7rK,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAU+C,CAAV,EAAa/C,IAA5B,EAAX,EAA+C,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAAhD,EAAqE,CAAC0F,CAAC,CAAC9F,KAAF,CAAQ,IAAR,GAAeI,IAAI,CAAC,CAAD,CAAJ,GAAUiD,CAAV,EAAajD,IAA5B,EAAtE,EAA0G,CAACikB,CAAC,CAACrkB,KAAF,CAAQ,IAAR,EAAcI,IAAd,CAA3G,CAAL;AACA,QAAIoT,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED6wO,EAAAA,IAAI,CAAC5uL,MAAL,GAAc,UAASnvC,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBw2D,MAAM,GAAGnvC,CAAT,EAAY+9N,IAAhC,IAAwC5uL,MAA/C;AACD,GAFD;;AAIA4uL,EAAAA,IAAI,CAACnuM,MAAL,GAAc,UAAS5vB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBi3C,MAAM,GAAG5vB,CAAT,EAAY+9N,IAAhC,IAAwCnuM,MAA/C;AACD,GAFD;;AAIAmuM,EAAAA,IAAI,CAACv+O,CAAL,GAAS,UAASwgB,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6G,CAAC,GAAG,OAAOwgB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4Ev+O,CAAnF;AACD,GAFD;;AAIAu+O,EAAAA,IAAI,CAAChgO,CAAL,GAAS,UAASiC,CAAT,EAAY;AACnB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBolB,CAAC,GAAG,OAAOiC,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAlC,EAAgD+9N,IAApE,IAA4EhgO,CAAnF;AACD,GAFD;;AAIAggO,EAAAA,IAAI,CAAC1yE,OAAL,GAAe,UAASrrJ,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAqB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA9B,EAAkC+9N,IAAtD,IAA8D1yE,OAArE;AACD,GAFD;;AAIA,SAAO0yE,IAAP;AACD;;AAED,SAASC,eAAT,CAAyB3yE,OAAzB,EAAkCquC,EAAlC,EAAsCC,EAAtC,EAA0C7tG,EAA1C,EAA8CD,EAA9C,EAAkD;AAChDw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAE,GAAG,CAACA,EAAE,GAAG5tG,EAAN,IAAY,CAAvC,EAA0C6tG,EAA1C,EAA8CD,EAA9C,EAAkD7tG,EAAlD,EAAsDC,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASoyI,aAAT,CAAuB5yE,OAAvB,EAAgCquC,EAAhC,EAAoCC,EAApC,EAAwC7tG,EAAxC,EAA4CD,EAA5C,EAAgD;AAC9Cw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAen9B,EAAf,EAAmBC,EAAnB;AACAtuC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsBv9B,EAAtB,EAA0BC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAA3C,EAA8CC,EAA9C,EAAkD6tG,EAAlD,EAAsD7tG,EAAtD,EAA0DD,EAA1D;AACD;;AAED,SAASsxI,WAAT,CAAqB9xE,OAArB,EAA8BquC,EAA9B,EAAkCC,EAAlC,EAAsC7tG,EAAtC,EAA0CD,EAA1C,EAA8C;AAC5C,MAAI0vG,EAAE,GAAG,0BAAY7B,EAAZ,EAAgBC,EAAhB,CAAT;AAAA,MACIvrF,EAAE,GAAG,0BAAYsrF,EAAZ,EAAgBC,EAAE,GAAG,CAACA,EAAE,GAAG9tG,EAAN,IAAY,CAAjC,CADT;AAAA,MAEIqyI,EAAE,GAAG,0BAAYpyI,EAAZ,EAAgB6tG,EAAhB,CAFT;AAAA,MAGIwkC,EAAE,GAAG,0BAAYryI,EAAZ,EAAgBD,EAAhB,CAHT;AAIAw/D,EAAAA,OAAO,CAACwrE,MAAR,CAAet7B,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB;AACAlwC,EAAAA,OAAO,CAAC4rE,aAAR,CAAsB7oH,EAAE,CAAC,CAAD,CAAxB,EAA6BA,EAAE,CAAC,CAAD,CAA/B,EAAoC8vH,EAAE,CAAC,CAAD,CAAtC,EAA2CA,EAAE,CAAC,CAAD,CAA7C,EAAkDC,EAAE,CAAC,CAAD,CAApD,EAAyDA,EAAE,CAAC,CAAD,CAA3D;AACD;;AAEM,SAASC,cAAT,GAA0B;AAC/B,SAAOL,IAAI,CAACC,eAAD,CAAX;AACD;;AAEM,SAASK,YAAT,GAAwB;AAC7B,SAAON,IAAI,CAACE,aAAD,CAAX;AACD;;AAEM,SAASK,UAAT,GAAsB;AAC3B,MAAInzO,CAAC,GAAG4yO,IAAI,CAACZ,WAAD,CAAZ;AACAhyO,EAAAA,CAAC,CAACqyO,KAAF,GAAUryO,CAAC,CAAC3L,CAAZ,EAAe,OAAO2L,CAAC,CAAC3L,CAAxB;AACA2L,EAAAA,CAAC,CAACqK,MAAF,GAAWrK,CAAC,CAAC4S,CAAb,EAAgB,OAAO5S,CAAC,CAAC4S,CAAzB;AACA,SAAO5S,CAAP;AACD;;;;;;;;;ACnFD;;eAEe;AACbozO,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAGu1O,QAAjB,CAAR;AACAhrE,IAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,IAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwBivO,SAAxB;AACD;AALY;;;;;;;;;;AGFf;;AAEA,IAAIoI,EAAE,GAAG,sBAAT;AAAA,IACIC,EAAE,GAAGv/O,IAAI,CAAC+T,GAAL,CAASkjO,WAAK,EAAd,IAAoBj3O,IAAI,CAAC+T,GAAL,CAAS,IAAIkjO,QAAJ,GAAS,EAAlB,CAD7B;AAAA,IAEIz8B,EAAE,GAAGx6M,IAAI,CAAC+T,GAAL,CAASmjO,YAAM,EAAf,IAAqBqI,EAF9B;AAAA,IAGI9kC,EAAE,GAAG,CAACz6M,IAAI,CAACgU,GAAL,CAASkjO,YAAM,EAAf,CAAD,GAAsBqI,EAH/B;eAKe;AACbJ,EAAAA,IAAI,EAAE,UAASlzE,OAAT,EAAkBvqK,IAAlB,EAAwB;AAC5B,QAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAI,GAAG49O,EAAjB,CAAR;AAAA,QACIl/O,CAAC,GAAGo6M,EAAE,GAAGvyM,CADb;AAAA,QAEI0W,CAAC,GAAG87L,EAAE,GAAGxyM,CAFb;AAGAgkK,IAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACxvO,CAAnB;AACAgkK,IAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAf,EAAkBue,CAAlB;;AACA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;AAC1B,UAAIkH,CAAC,GAAG+1O,YAAMj9O,CAAN,GAAU,CAAlB;AAAA,UACIyM,CAAC,GAAG1G,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CADR;AAAA,UAEI1D,CAAC,GAAGuC,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAFR;AAGA8qK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAC,GAAGwK,CAAnB,EAAsB,CAACvB,CAAD,GAAKuB,CAA3B;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAejxO,CAAC,GAAGtG,CAAJ,GAAQ3C,CAAC,GAAGkhB,CAA3B,EAA8BlhB,CAAC,GAAG2C,CAAJ,GAAQsG,CAAC,GAAGiY,CAA1C;AACD;;AACDstJ,IAAAA,OAAO,CAACyrE,SAAR;AACD;AAfY;;;;;;;;;;;AIPf;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,IAAI+H,OAAO,GAAG,CACnBC,eADmB,EAEnBzgC,cAFmB,EAGnB0gC,gBAHmB,EAInB5sO,eAJmB,EAKnB6sO,aALmB,EAMnBC,iBANmB,EAOnBC,YAPmB,CAAd;;;AAUQ,kBAAS5lO,IAAT,EAAexY,IAAf,EAAqB;AAClC,MAAIuqK,OAAO,GAAG,IAAd;AACA/xJ,EAAAA,IAAI,GAAG,OAAOA,IAAP,KAAgB,UAAhB,GAA6BA,IAA7B,GAAoC,uBAASA,IAAI,IAAIwlO,eAAjB,CAA3C;AACAh+O,EAAAA,IAAI,GAAG,OAAOA,IAAP,KAAgB,UAAhB,GAA6BA,IAA7B,GAAoC,uBAASA,IAAI,KAAKytH,SAAT,GAAqB,EAArB,GAA0B,CAACztH,IAApC,CAA3C;;AAEA,WAAS8hN,MAAT,GAAkB;AAChB,QAAI11M,MAAJ;AACA,QAAI,CAACm+J,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;AACdoM,IAAAA,IAAI,CAAC5f,KAAL,CAAW,IAAX,EAAiBN,SAAjB,EAA4BmlP,IAA5B,CAAiClzE,OAAjC,EAA0C,CAACvqK,IAAI,CAACpH,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAA3C;AACA,QAAI8T,MAAJ,EAAY,OAAOm+J,OAAO,GAAG,IAAV,EAAgBn+J,MAAM,GAAG,EAAT,IAAe,IAAtC;AACb;;AAED01M,EAAAA,MAAM,CAACtpM,IAAP,GAAc,UAAS0G,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB2gB,IAAI,GAAG,OAAO0G,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAASA,CAAT,CAArC,EAAkD4iM,MAAtE,IAAgFtpM,IAAvF;AACD,GAFD;;AAIAspM,EAAAA,MAAM,CAAC9hN,IAAP,GAAc,UAASkf,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBmI,IAAI,GAAG,OAAOkf,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAArC,EAAmD4iM,MAAvE,IAAiF9hN,IAAxF;AACD,GAFD;;AAIA8hN,EAAAA,MAAM,CAACv3C,OAAP,GAAiB,UAASrrJ,CAAT,EAAY;AAC3B,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0yK,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B,EAAgC4iM,MAApD,IAA8Dv3C,OAArE;AACD,GAFD;;AAIA,SAAOu3C,MAAP;AACD;;;;;;;;;AG7CD;;AACA;;;;AAEA,SAASw8B,WAAT,CAAqB/zE,OAArB,EAA8B;AAC5B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAED+zE,WAAW,CAAC3lP,SAAZ,GAAwB;AACtBmiP,EAAAA,SAAS,EAAE3hP,aADW;AAEtB6hP,EAAAA,OAAO,EAAE7hP,aAFa;AAGtB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAC5C,KAAK7I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW9zK,GADvD;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPqB;AAQtBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKwI,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKE,GAAL,GAAW,IAAI,KAAKC,GAArB,IAA4B,CAAhF;;AACA,eAAK9D,QAAL,CAAc5E,MAAd,CAAqB,CAAC,KAAKuI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAjD,EAAoD,CAAC,KAAKI,GAAL,GAAW,IAAI,KAAKD,GAArB,IAA4B,CAAhF;;AACA,eAAK7D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK5kC,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA;AACD;AAjBH;AAmBD,GA5BqB;AA6BtB9kC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKqD,GAAL,GAAW7/O,CAAX,EAAc,KAAKggP,GAAL,GAAWzhO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuD,GAAL,GAAW//O,CAAX,EAAc,KAAKkgP,GAAL,GAAW3hO,CAAzB;;AAA4B,aAAK49N,QAAL,CAAc9E,MAAd,CAAqB,CAAC,KAAKJ,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAArD,EAAwD,CAAC,KAAKk3O,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAxF;;AAA4F;;AACjJ;AAAS,0BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AAvCqB,CAAxB;;AA0Ce,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAI+zE,WAAJ,CAAgB/zE,OAAhB,CAAP;AACD;;;;;;;;;ACnDD;;AAEA,SAASs0E,SAAT,CAAmBt0E,OAAnB,EAA4B;AAC1B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDs0E,SAAS,CAAClmP,SAAV,GAAsB;AACpBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHmB;AAIpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANmB;AAOpBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GACX,KAAKD,GAAL,GAAW,KAAKE,GAAL,GAAWhrK,GADtB;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXmB;AAYpBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfmB;AAgBpBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,YAAItiC,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0Bn3O,CAA3B,IAAgC,CAAzC;AAAA,YAA4Cm6M,EAAE,GAAG,CAAC,KAAK+8B,GAAL,GAAW,IAAI,KAAKE,GAApB,GAA0B74N,CAA3B,IAAgC,CAAjF;AAAoF,aAAK89N,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBr9B,EAArB,EAAyBC,EAAzB,CAAb,GAA4C,KAAKgiC,QAAL,CAAc9E,MAAd,CAAqBn9B,EAArB,EAAyBC,EAAzB,CAA5C;AAA0E;;AACvL,WAAK,CAAL;AAAQ,aAAKqiC,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,0BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAWn3O,CAAhC;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW74N,CAAhC;AACD;AA3BmB,CAAtB;;AA8Be,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIs0E,SAAJ,CAAct0E,OAAd,CAAP;AACD;;;;;;;;;ACtCD;;AAEA,SAASu0E,MAAT,CAAgBv0E,OAAhB,EAAyB31J,IAAzB,EAA+B;AAC7B,OAAKmqO,MAAL,GAAc,IAAIV,YAAJ,CAAU9zE,OAAV,CAAd;AACA,OAAKy0E,KAAL,GAAapqO,IAAb;AACD;;AAEDkqO,MAAM,CAACnmP,SAAP,GAAmB;AACjBsiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKgE,EAAL,GAAU,EAAV;AACA,SAAKC,EAAL,GAAU,EAAV;;AACA,SAAKH,MAAL,CAAY9D,SAAZ;AACD,GALgB;AAMjBE,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAIz8O,CAAC,GAAG,KAAKugP,EAAb;AAAA,QACIhiO,CAAC,GAAG,KAAKiiO,EADb;AAAA,QAEI18O,CAAC,GAAG9D,CAAC,CAAC7G,MAAF,GAAW,CAFnB;;AAIA,QAAI2K,CAAC,GAAG,CAAR,EAAW;AACT,UAAIo2M,EAAE,GAAGl6M,CAAC,CAAC,CAAD,CAAV;AAAA,UACIm6M,EAAE,GAAG57L,CAAC,CAAC,CAAD,CADV;AAAA,UAEIoH,EAAE,GAAG3lB,CAAC,CAAC8D,CAAD,CAAD,GAAOo2M,EAFhB;AAAA,UAGIv7L,EAAE,GAAGJ,CAAC,CAACza,CAAD,CAAD,GAAOq2M,EAHhB;AAAA,UAIItgN,CAAC,GAAG,CAAC,CAJT;AAAA,UAKI0D,CALJ;;AAOA,aAAO,EAAE1D,CAAF,IAAOiK,CAAd,EAAiB;AACfvG,QAAAA,CAAC,GAAG1D,CAAC,GAAGiK,CAAR;;AACA,aAAKu8O,MAAL,CAAYjlC,KAAZ,CACE,KAAKklC,KAAL,GAAatgP,CAAC,CAACnG,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBpmC,EAAE,GAAG38M,CAAC,GAAGooB,EAA7B,CADtB,EAEE,KAAK26N,KAAL,GAAa/hO,CAAC,CAAC1kB,CAAD,CAAd,GAAoB,CAAC,IAAI,KAAKymP,KAAV,KAAoBnmC,EAAE,GAAG58M,CAAC,GAAGohB,EAA7B,CAFtB;AAID;AACF;;AAED,SAAK4hO,EAAL,GAAU,KAAKC,EAAL,GAAU,IAApB;;AACA,SAAKH,MAAL,CAAY5D,OAAZ;AACD,GA9BgB;AA+BjBrhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpB,SAAKgiO,EAAL,CAAQzmP,IAAR,CAAa,CAACkG,CAAd;;AACA,SAAKwgP,EAAL,CAAQ1mP,IAAR,CAAa,CAACykB,CAAd;AACD;AAlCgB,CAAnB;;eAqCgB,SAASkiO,MAAT,CAAgBvqO,IAAhB,EAAsB;AAEpC,WAASwqO,MAAT,CAAgB70E,OAAhB,EAAyB;AACvB,WAAO31J,IAAI,KAAK,CAAT,GAAa,IAAIypO,YAAJ,CAAU9zE,OAAV,CAAb,GAAkC,IAAIu0E,MAAJ,CAAWv0E,OAAX,EAAoB31J,IAApB,CAAzC;AACD;;AAEDwqO,EAAAA,MAAM,CAACxqO,IAAP,GAAc,UAASA,IAAT,EAAe;AAC3B,WAAOuqO,MAAM,CAAC,CAACvqO,IAAF,CAAb;AACD,GAFD;;AAIA,SAAOwqO,MAAP;AACD,CAXc,CAWZ,IAXY;;;;;;;;;;;;AE5Cf;;AACA;;;;AAEO,SAASI,cAAT,CAAwBj1E,OAAxB,EAAiC+0E,OAAjC,EAA0C;AAC/C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDE,cAAc,CAAC7mP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE3hP,aADc;AAEzB6hP,EAAAA,OAAO,EAAE7hP,aAFgB;AAGzB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAPwB;AAQzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA3BwB;AA4BzB5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,6BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAMA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAtCwB,CAA3B;;eAyCgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIi1E,cAAJ,CAAmBj1E,OAAnB,EAA4B+0E,OAA5B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACjDf;;AAEO,SAASI,YAAT,CAAsBp1E,OAAtB,EAA+B+0E,OAA/B,EAAwC;AAC7C,OAAKzE,QAAL,GAAgBtwE,OAAhB;AACA,OAAK57C,EAAL,GAAU,CAAC,IAAI2wH,OAAL,IAAgB,CAA1B;AACD;;AAEDK,YAAY,CAAChnP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHsB;AAIvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANsB;AAOvBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAKowK,MAAL,GAAc,CAAd;AACD,GAXsB;AAYvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAfsB;AAgBvBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AACA,YAAQ,KAAKi+N,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,6BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAOA,SAAK04N,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA3BsB,CAAzB;;eA8BgB,SAASkiO,MAAT,CAAgBG,OAAhB,EAAyB;AAEvC,WAASC,QAAT,CAAkBh1E,OAAlB,EAA2B;AACzB,WAAO,IAAIo1E,YAAJ,CAAiBp1E,OAAjB,EAA0B+0E,OAA1B,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,OAAT,GAAmB,UAASA,OAAT,EAAkB;AACnC,WAAOH,MAAM,CAAC,CAACG,OAAF,CAAb;AACD,GAFD;;AAIA,SAAOC,QAAP;AACD,CAXc,CAWZ,CAXY;;;;;;;;;;;;ACrCf;;AACA;;AAEO,SAASzlC,KAAT,CAAe/nB,IAAf,EAAqBrzL,CAArB,EAAwBue,CAAxB,EAA2B;AAChC,MAAI+tF,EAAE,GAAG+mF,IAAI,CAAC8jD,GAAd;AAAA,MACI9qI,EAAE,GAAGgnF,IAAI,CAAC+jD,GADd;AAAA,MAEIz+J,EAAE,GAAG06G,IAAI,CAACwsD,GAFd;AAAA,MAGItzI,EAAE,GAAG8mF,IAAI,CAAC2sD,GAHd;;AAKA,MAAI3sD,IAAI,CAAC6tD,MAAL,GAAchqK,aAAlB,EAA2B;AACzB,QAAIn2E,CAAC,GAAG,IAAIsyL,IAAI,CAAC8tD,OAAT,GAAmB,IAAI9tD,IAAI,CAAC6tD,MAAT,GAAkB7tD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACIt5O,CAAC,GAAG,IAAIsrL,IAAI,CAAC6tD,MAAT,IAAmB7tD,IAAI,CAAC6tD,MAAL,GAAc7tD,IAAI,CAAC+tD,MAAtC,CADR;AAEA90I,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGvrG,CAAL,GAASsyL,IAAI,CAAC4jD,GAAL,GAAW5jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAACwsD,GAAL,GAAWxsD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACAskG,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAGtrG,CAAL,GAASsyL,IAAI,CAAC6jD,GAAL,GAAW7jD,IAAI,CAACguD,OAAzB,GAAmChuD,IAAI,CAAC2sD,GAAL,GAAW3sD,IAAI,CAAC8tD,OAApD,IAA+Dp5O,CAApE;AACD;;AAED,MAAIsrL,IAAI,CAACiuD,MAAL,GAAcpqK,aAAlB,EAA2B;AACzB,QAAItvE,CAAC,GAAG,IAAIyrL,IAAI,CAACkuD,OAAT,GAAmB,IAAIluD,IAAI,CAACiuD,MAAT,GAAkBjuD,IAAI,CAAC+tD,MAA1C,GAAmD/tD,IAAI,CAACguD,OAAhE;AAAA,QACI/vJ,CAAC,GAAG,IAAI+hG,IAAI,CAACiuD,MAAT,IAAmBjuD,IAAI,CAACiuD,MAAL,GAAcjuD,IAAI,CAAC+tD,MAAtC,CADR;AAEAzoK,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG/wE,CAAL,GAASyrL,IAAI,CAAC8jD,GAAL,GAAW9jD,IAAI,CAACkuD,OAAzB,GAAmCvhP,CAAC,GAAGqzL,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACAib,IAAAA,EAAE,GAAG,CAACA,EAAE,GAAG3kG,CAAL,GAASyrL,IAAI,CAAC+jD,GAAL,GAAW/jD,IAAI,CAACkuD,OAAzB,GAAmChjO,CAAC,GAAG80K,IAAI,CAACguD,OAA7C,IAAwD/vJ,CAA7D;AACD;;AAED+hG,EAAAA,IAAI,CAAC8oD,QAAL,CAAc1E,aAAd,CAA4BnrI,EAA5B,EAAgCD,EAAhC,EAAoC1zB,EAApC,EAAwC4zB,EAAxC,EAA4C8mF,IAAI,CAACwsD,GAAjD,EAAsDxsD,IAAI,CAAC2sD,GAA3D;AACD;;AAED,SAASwB,UAAT,CAAoB31E,OAApB,EAA6B14J,KAA7B,EAAoC;AAClC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAEDquO,UAAU,CAACvnP,SAAX,GAAuB;AACrBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHoB;AAIrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANoB;AAOrBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAboB;AAcrBC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKL,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC;;AAA0C;;AAClD,WAAK,CAAL;AAAQ,aAAK5kC,KAAL,CAAW,KAAKykC,GAAhB,EAAqB,KAAKG,GAA1B;AAAgC;AAF1C;;AAIA,QAAI,KAAK3D,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GArBoB;AAsBrBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,CAAb,GAA0C,KAAK49N,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAA1C;AAAsE;;AAC/F,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAASphC,QAAAA,KAAK,CAAC,IAAD,EAAOp7M,CAAP,EAAUue,CAAV,CAAL;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AA1CoB,CAAvB;;eA6CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAIquO,UAAJ,CAAe31E,OAAf,EAAwB14J,KAAxB,CAAH,GAAoC,IAAIwtO,kBAAJ,CAAa90E,OAAb,EAAsB,CAAtB,CAAhD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC5Ef;;AACA;;AACA;;;;AAEA,SAASC,gBAAT,CAA0Bh2E,OAA1B,EAAmC14J,KAAnC,EAA0C;AACxC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED0uO,gBAAgB,CAAC5nP,SAAjB,GAA6B;AAC3BmiP,EAAAA,SAAS,EAAE3hP,aADgB;AAE3B6hP,EAAAA,OAAO,EAAE7hP,aAFkB;AAG3B8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKgB,GAAL,GACvD,KAAK7J,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKC,GAAL,GAAW,KAAKc,GAAL,GAAW50K,GADlE;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAT0B;AAU3BC,EAAAA,OAAO,EAAE,YAAW;AAClB,YAAQ,KAAKD,MAAb;AACE,WAAK,CAAL;AAAQ;AACN,eAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAKyI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAK6E,QAAL,CAAc5E,MAAd,CAAqB,KAAKuI,GAA1B,EAA+B,KAAKG,GAApC;;AACA,eAAK9D,QAAL,CAAc7E,SAAd;;AACA;AACD;;AACD,WAAK,CAAL;AAAQ;AACN,eAAKl8B,KAAL,CAAW,KAAK0kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK7kC,KAAL,CAAW,KAAK2kC,GAAhB,EAAqB,KAAKG,GAA1B;AACA,eAAK9kC,KAAL,CAAW,KAAK2lC,GAAhB,EAAqB,KAAKC,GAA1B;AACA;AACD;AAhBH;AAkBD,GA7B0B;AA8B3B5lC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKsD,GAAL,GAAW9/O,CAAX,EAAc,KAAKigP,GAAL,GAAW1hO,CAAzB;AAA4B;;AACrD,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;;AAAiB,aAAKL,QAAL,CAAc9E,MAAd,CAAqB,KAAK0I,GAAL,GAAW//O,CAAhC,EAAmC,KAAKkgP,GAAL,GAAW3hO,CAA9C;;AAAkD;;AAC3E,WAAK,CAAL;AAAQ,aAAKi+N,MAAL,GAAc,CAAd;AAAiB,aAAKuE,GAAL,GAAW/gP,CAAX,EAAc,KAAKghP,GAAL,GAAWziO,CAAzB;AAA4B;;AACrD;AAAS,+BAAM,IAAN,EAAYve,CAAZ,EAAeue,CAAf;AAAmB;AAJ9B;;AAOA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAlD0B,CAA7B;;eAqDgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI0uO,gBAAJ,CAAqBh2E,OAArB,EAA8B14J,KAA9B,CAAH,GAA0C,IAAI2tO,8BAAJ,CAAmBj1E,OAAnB,EAA4B,CAA5B,CAAtD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AC9Df;;AACA;;AAEA,SAASE,cAAT,CAAwBj2E,OAAxB,EAAiC14J,KAAjC,EAAwC;AACtC,OAAKgpO,QAAL,GAAgBtwE,OAAhB;AACA,OAAK41E,MAAL,GAActuO,KAAd;AACD;;AAED2uO,cAAc,CAAC7nP,SAAf,GAA2B;AACzBmiP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,KAAL,GAAa,CAAb;AACD,GAHwB;AAIzBC,EAAAA,OAAO,EAAE,YAAW;AAClB,SAAKD,KAAL,GAAajwK,GAAb;AACD,GANwB;AAOzBmwK,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKtF,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK0I,GAAL,GACtB,KAAK3I,GAAL,GAAW,KAAKE,GAAL,GAAW,KAAK4I,GAAL,GAAW5zK,GADjC;AAEA,SAAK80K,MAAL,GAAc,KAAKE,MAAL,GAAc,KAAKE,MAAL,GAC5B,KAAKH,OAAL,GAAe,KAAKE,OAAL,GAAe,KAAKE,OAAL,GAC9B,KAAK/E,MAAL,GAAc,CAFd;AAGD,GAbwB;AAczBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKJ,KAAL,IAAe,KAAKA,KAAL,KAAe,CAAf,IAAoB,KAAKG,MAAL,KAAgB,CAAvD,EAA2D,KAAKL,QAAL,CAAc7E,SAAd;AAC3D,SAAK+E,KAAL,GAAa,IAAI,KAAKA,KAAtB;AACD,GAjBwB;AAkBzBjhC,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;;AAEA,QAAI,KAAKi+N,MAAT,EAAiB;AACf,UAAIkF,GAAG,GAAG,KAAK7B,GAAL,GAAW7/O,CAArB;AAAA,UACI2hP,GAAG,GAAG,KAAK3B,GAAL,GAAWzhO,CADrB;AAEA,WAAK+iO,MAAL,GAAc1hP,IAAI,CAACqC,IAAL,CAAU,KAAKs/O,OAAL,GAAe3hP,IAAI,CAAC0Q,GAAL,CAASoxO,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA3B,EAAgC,KAAKF,MAArC,CAAzB,CAAd;AACD;;AAED,YAAQ,KAAKjF,MAAb;AACE,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB;;AACzB,WAAK,CAAL;AAAQ,aAAKA,MAAL,GAAc,CAAd;AAAiB,aAAKH,KAAL,GAAa,KAAKF,QAAL,CAAc5E,MAAd,CAAqB,KAAKsI,GAA1B,EAA+B,KAAKG,GAApC,CAAb,GAAwD,KAAK7D,QAAL,CAAc9E,MAAd,CAAqB,KAAKwI,GAA1B,EAA+B,KAAKG,GAApC,CAAxD;AAAkG;;AAC3H,WAAK,CAAL;AAAQ,aAAKxD,MAAL,GAAc,CAAd;AAAiB;;AACzB;AAAS,+BAAM,IAAN,EAAYx8O,CAAZ,EAAeue,CAAf;AAAmB;AAL9B;;AAQA,SAAK2iO,MAAL,GAAc,KAAKE,MAAnB,EAA2B,KAAKA,MAAL,GAAc,KAAKE,MAA9C;AACA,SAAKH,OAAL,GAAe,KAAKE,OAApB,EAA6B,KAAKA,OAAL,GAAe,KAAKE,OAAjD;AACA,SAAKtK,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK0I,GAArC,EAA0C,KAAKA,GAAL,GAAW7/O,CAArD;AACA,SAAKk3O,GAAL,GAAW,KAAKE,GAAhB,EAAqB,KAAKA,GAAL,GAAW,KAAK4I,GAArC,EAA0C,KAAKA,GAAL,GAAWzhO,CAArD;AACD;AAvCwB,CAA3B;;eA0CgB,SAASkiO,MAAT,CAAgBttO,KAAhB,EAAuB;AAErC,WAASyuO,UAAT,CAAoB/1E,OAApB,EAA6B;AAC3B,WAAO14J,KAAK,GAAG,IAAI2uO,cAAJ,CAAmBj2E,OAAnB,EAA4B14J,KAA5B,CAAH,GAAwC,IAAI8tO,0BAAJ,CAAiBp1E,OAAjB,EAA0B,CAA1B,CAApD;AACD;;AAED+1E,EAAAA,UAAU,CAACzuO,KAAX,GAAmB,UAASA,KAAT,EAAgB;AACjC,WAAOstO,MAAM,CAAC,CAACttO,KAAF,CAAb;AACD,GAFD;;AAIA,SAAOyuO,UAAP;AACD,CAXc,CAWZ,GAXY;;;;;;;;;;;AClDf;;;;AAEA,SAASG,YAAT,CAAsBl2E,OAAtB,EAA+B;AAC7B,OAAKswE,QAAL,GAAgBtwE,OAAhB;AACD;;AAEDk2E,YAAY,CAAC9nP,SAAb,GAAyB;AACvBmiP,EAAAA,SAAS,EAAE3hP,aADY;AAEvB6hP,EAAAA,OAAO,EAAE7hP,aAFc;AAGvB8hP,EAAAA,SAAS,EAAE,YAAW;AACpB,SAAKC,MAAL,GAAc,CAAd;AACD,GALsB;AAMvBC,EAAAA,OAAO,EAAE,YAAW;AAClB,QAAI,KAAKD,MAAT,EAAiB,KAAKL,QAAL,CAAc7E,SAAd;AAClB,GARsB;AASvBl8B,EAAAA,KAAK,EAAE,UAASp7M,CAAT,EAAYue,CAAZ,EAAe;AACpBve,IAAAA,CAAC,GAAG,CAACA,CAAL,EAAQue,CAAC,GAAG,CAACA,CAAb;AACA,QAAI,KAAKi+N,MAAT,EAAiB,KAAKL,QAAL,CAAc5E,MAAd,CAAqBv3O,CAArB,EAAwBue,CAAxB,EAAjB,KACK,KAAKi+N,MAAL,GAAc,CAAd,EAAiB,KAAKL,QAAL,CAAc9E,MAAd,CAAqBr3O,CAArB,EAAwBue,CAAxB,CAAjB;AACN;AAbsB,CAAzB;;AAgBe,kBAASstJ,OAAT,EAAkB;AAC/B,SAAO,IAAIk2E,YAAJ,CAAiBl2E,OAAjB,CAAP;AACD;;;;;;;;;AMxBD;;AACA;;AACA;;AACA;;;;AAEA,SAASq3E,UAAT,CAAoBx8O,CAApB,EAAuB5I,GAAvB,EAA4B;AAC1B,SAAO4I,CAAC,CAAC5I,GAAD,CAAR;AACD;;AAED,SAASqlP,WAAT,CAAqBrlP,GAArB,EAA0B;AACxB,QAAMmlP,MAAM,GAAG,EAAf;AACAA,EAAAA,MAAM,CAACnlP,GAAP,GAAaA,GAAb;AACA,SAAOmlP,MAAP;AACD;;AAEc,oBAAW;AACxB,MAAIjnO,IAAI,GAAG,uBAAS,EAAT,CAAX;AAAA,MACI+0L,KAAK,GAAGqyC,cADZ;AAAA,MAEI58O,MAAM,GAAG68O,aAFb;AAAA,MAGIxmP,KAAK,GAAGqmP,UAHZ;;AAKA,WAAS7zO,KAAT,CAAexG,IAAf,EAAqB;AACnB,QAAIy6O,EAAE,GAAG3pP,KAAK,CAACuR,IAAN,CAAW8Q,IAAI,CAAC9hB,KAAL,CAAW,IAAX,EAAiBN,SAAjB,CAAX,EAAwCupP,WAAxC,CAAT;AAAA,QACItpP,CADJ;AAAA,QACOkO,CAAC,GAAGu7O,EAAE,CAACnqP,MADd;AAAA,QACsB2K,CAAC,GAAG,CAAC,CAD3B;AAAA,QAEIy/O,EAFJ;;AAIA,SAAK,MAAM78O,CAAX,IAAgBmC,IAAhB,EAAsB;AACpB,WAAKhP,CAAC,GAAG,CAAJ,EAAO,EAAEiK,CAAd,EAAiBjK,CAAC,GAAGkO,CAArB,EAAwB,EAAElO,CAA1B,EAA6B;AAC3B,SAACypP,EAAE,CAACzpP,CAAD,CAAF,CAAMiK,CAAN,IAAW,CAAC,CAAD,EAAI,CAACjH,KAAK,CAAC6J,CAAD,EAAI48O,EAAE,CAACzpP,CAAD,CAAF,CAAMiE,GAAV,EAAegG,CAAf,EAAkB+E,IAAlB,CAAV,CAAZ,EAAgDA,IAAhD,GAAuDnC,CAAvD;AACD;AACF;;AAED,SAAK7M,CAAC,GAAG,CAAJ,EAAO0pP,EAAE,GAAG,oBAAMxyC,KAAK,CAACuyC,EAAD,CAAX,CAAjB,EAAmCzpP,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7CypP,MAAAA,EAAE,CAACC,EAAE,CAAC1pP,CAAD,CAAH,CAAF,CAAU8F,KAAV,GAAkB9F,CAAlB;AACD;;AAED2M,IAAAA,MAAM,CAAC88O,EAAD,EAAKC,EAAL,CAAN;AACA,WAAOD,EAAP;AACD;;AAEDj0O,EAAAA,KAAK,CAAC2M,IAAN,GAAa,UAASwE,CAAT,EAAY;AACvB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB6iB,IAAI,GAAG,OAAOwE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS7mB,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,CAArC,EAA8DnR,KAAlF,IAA2F2M,IAAlG;AACD,GAFD;;AAIA3M,EAAAA,KAAK,CAACxS,KAAN,GAAc,UAAS2jB,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB0D,KAAK,GAAG,OAAO2jB,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS,CAACA,CAAV,CAAtC,EAAoDnR,KAAxE,IAAiFxS,KAAxF;AACD,GAFD;;AAIAwS,EAAAA,KAAK,CAAC0hM,KAAN,GAAc,UAASvwL,CAAT,EAAY;AACxB,WAAO5mB,SAAS,CAACT,MAAV,IAAoB43M,KAAK,GAAGvwL,CAAC,IAAI,IAAL,GAAY4iO,cAAZ,GAAwB,OAAO5iO,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,uBAAS7mB,KAAK,CAACuR,IAAN,CAAWsV,CAAX,CAAT,CAA9D,EAAuFnR,KAA3G,IAAoH0hM,KAA3H;AACD,GAFD;;AAIA1hM,EAAAA,KAAK,CAAC7I,MAAN,GAAe,UAASga,CAAT,EAAY;AACzB,WAAO5mB,SAAS,CAACT,MAAV,IAAoBqN,MAAM,GAAGga,CAAC,IAAI,IAAL,GAAY6iO,aAAZ,GAAyB7iO,CAAlC,EAAqCnR,KAAzD,IAAkE7I,MAAzE;AACD,GAFD;;AAIA,SAAO6I,KAAP;AACD;;;;;;;;;ACzDD;;;;AAEe,kBAAS4zO,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAIU,CAAJ,EAAOkO,CAAP,EAAUjE,CAAC,GAAG,CAAd,EAAiBwtF,CAAC,GAAG2xJ,MAAM,CAAC,CAAD,CAAN,CAAU9pP,MAA/B,EAAuColB,CAA5C,EAA+Cza,CAAC,GAAGwtF,CAAnD,EAAsD,EAAExtF,CAAxD,EAA2D;AACzD,SAAKya,CAAC,GAAG1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AAC5B,QAAIya,CAAJ,EAAO,KAAK1kB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwBopP,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmBya,CAAnB;AAChC;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;AETD;;;;AAEe,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,CAAJ,EAAgC;;AAChC,OAAK,IAAI2K,CAAC,GAAG,CAAR,EAAW0qE,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAtB,EAAkChpM,CAAlC,EAAqCupF,CAAC,GAAG9iB,EAAE,CAACr1E,MAAjD,EAAyD2K,CAAC,GAAGwtF,CAA7D,EAAgE,EAAExtF,CAAlE,EAAqE;AACnE,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW0kB,CAAC,GAAG,CAApB,EAAuB1kB,CAAC,GAAGkO,CAA3B,EAA8B,EAAElO,CAAhC,EAAmC0kB,CAAC,IAAI0kO,MAAM,CAACppP,CAAD,CAAN,CAAUiK,CAAV,EAAa,CAAb,KAAmB,CAAxB;;AACnC0qE,IAAAA,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,KAAY0qE,EAAE,CAAC1qE,CAAD,CAAF,CAAM,CAAN,IAAW,CAACya,CAAD,GAAK,CAA5B;AACD;;AACD,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACTD;;;;AAEe,kBAASkyC,MAAT,EAAiBlyC,KAAjB,EAAwB;AACrC,MAAI,EAAE,CAAChpM,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAZ,IAAsB,CAAxB,KAA8B,EAAE,CAACm4F,CAAC,GAAG,CAAC9iB,EAAE,GAAGy0K,MAAM,CAAClyC,KAAK,CAAC,CAAD,CAAN,CAAZ,EAAwB53M,MAA7B,IAAuC,CAAzC,CAAlC,EAA+E;;AAC/E,OAAK,IAAIolB,CAAC,GAAG,CAAR,EAAWza,CAAC,GAAG,CAAf,EAAkB0qE,EAAlB,EAAsB8iB,CAAtB,EAAyBvpF,CAA9B,EAAiCjE,CAAC,GAAGwtF,CAArC,EAAwC,EAAExtF,CAA1C,EAA6C;AAC3C,SAAK,IAAIjK,CAAC,GAAG,CAAR,EAAW40E,EAAE,GAAG,CAAhB,EAAmBC,EAAE,GAAG,CAA7B,EAAgC70E,CAAC,GAAGkO,CAApC,EAAuC,EAAElO,CAAzC,EAA4C;AAC1C,UAAI4tG,EAAE,GAAGw7I,MAAM,CAAClyC,KAAK,CAACl3M,CAAD,CAAN,CAAf;AAAA,UACI6pP,IAAI,GAAGj8I,EAAE,CAAC3jG,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,UAEI6/O,IAAI,GAAGl8I,EAAE,CAAC3jG,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAAA,UAGI8/O,EAAE,GAAG,CAACF,IAAI,GAAGC,IAAR,IAAgB,CAHzB;;AAIA,WAAK,IAAIxsO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtd,CAApB,EAAuB,EAAEsd,CAAzB,EAA4B;AAC1B,YAAI0sO,EAAE,GAAGZ,MAAM,CAAClyC,KAAK,CAAC55L,CAAD,CAAN,CAAf;AAAA,YACI2sO,IAAI,GAAGD,EAAE,CAAC//O,CAAD,CAAF,CAAM,CAAN,KAAY,CADvB;AAAA,YAEIigP,IAAI,GAAGF,EAAE,CAAC//O,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB,CAF3B;AAGA8/O,QAAAA,EAAE,IAAIE,IAAI,GAAGC,IAAb;AACD;;AACDt1K,MAAAA,EAAE,IAAIi1K,IAAN,EAAYh1K,EAAE,IAAIk1K,EAAE,GAAGF,IAAvB;AACD;;AACDl1K,IAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,QAAIkwD,EAAJ,EAAQlwD,CAAC,IAAImwD,EAAE,GAAGD,EAAV;AACT;;AACDD,EAAAA,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,KAAgB0qE,EAAE,CAAC1qE,CAAC,GAAG,CAAL,CAAF,CAAU,CAAV,IAAeya,CAA/B;AACA,qBAAK0kO,MAAL,EAAalyC,KAAb;AACD;;;;;;;;;ACvBD;;;;AAEe,kBAASkyC,MAAT,EAAiB;AAC9B,MAAIe,KAAK,GAAGf,MAAM,CAAC3/O,GAAP,CAAW2gP,IAAX,CAAZ;AACA,SAAO,mBAAKhB,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOo8O,KAAK,CAACjjP,CAAD,CAAL,GAAWijP,KAAK,CAACp8O,CAAD,CAAvB;AAA6B,GAAhE,CAAP;AACD;;AAED,SAASq8O,IAAT,CAAchB,MAAd,EAAsB;AACpB,MAAIppP,CAAC,GAAG,CAAC,CAAT;AAAA,MAAYiK,CAAC,GAAG,CAAhB;AAAA,MAAmBiE,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsCuuG,EAAtC;AAAA,MAA0Cw8I,EAAE,GAAG,CAACviP,QAAhD;;AACA,SAAO,EAAE9H,CAAF,GAAMkO,CAAb,EAAgB,IAAI,CAAC2/F,EAAE,GAAG,CAACu7I,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAP,IAAuBqqP,EAA3B,EAA+BA,EAAE,GAAGx8I,EAAL,EAAS5jG,CAAC,GAAGjK,CAAb;;AAC/C,SAAOiK,CAAP;AACD;;;;;;;;;;ACXD;;;;AAEe,kBAASm/O,MAAT,EAAiB;AAC9B,MAAIkB,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,GAAX,CAAX;AACA,SAAO,mBAAK6iP,MAAL,EAAap/O,IAAb,CAAkB,UAAS9C,CAAT,EAAY6G,CAAZ,EAAe;AAAE,WAAOu8O,IAAI,CAACpjP,CAAD,CAAJ,GAAUojP,IAAI,CAACv8O,CAAD,CAArB;AAA2B,GAA9D,CAAP;AACD;;AAEM,SAASxH,GAAT,CAAa6iP,MAAb,EAAqB;AAC1B,MAAI5lP,CAAC,GAAG,CAAR;AAAA,MAAWxD,CAAC,GAAG,CAAC,CAAhB;AAAA,MAAmBkO,CAAC,GAAGk7O,MAAM,CAAC9pP,MAA9B;AAAA,MAAsC4S,CAAtC;;AACA,SAAO,EAAElS,CAAF,GAAMkO,CAAb,EAAgB,IAAIgE,CAAC,GAAG,CAACk3O,MAAM,CAACppP,CAAD,CAAN,CAAU,CAAV,CAAT,EAAuBwD,CAAC,IAAI0O,CAAL;;AACvC,SAAO1O,CAAP;AACD;;;;;;;;;ACXD;;;;AAEe,kBAAS4lP,MAAT,EAAiB;AAC9B,SAAO,wBAAUA,MAAV,EAAkB30O,OAAlB,EAAP;AACD;;;;;;;;;ACJD;;AACA;;;;AAEe,kBAAS20O,MAAT,EAAiB;AAC9B,MAAIl7O,CAAC,GAAGk7O,MAAM,CAAC9pP,MAAf;AAAA,MACIU,CADJ;AAAA,MAEIiK,CAFJ;AAAA,MAGIqgP,IAAI,GAAGlB,MAAM,CAAC3/O,GAAP,CAAWlD,cAAX,CAHX;AAAA,MAII2wM,KAAK,GAAG,yBAAWkyC,MAAX,CAJZ;AAAA,MAKIn2M,GAAG,GAAG,CALV;AAAA,MAMIC,MAAM,GAAG,CANb;AAAA,MAOIq3M,IAAI,GAAG,EAPX;AAAA,MAQIC,OAAO,GAAG,EARd;;AAUA,OAAKxqP,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkO,CAAhB,EAAmB,EAAElO,CAArB,EAAwB;AACtBiK,IAAAA,CAAC,GAAGitM,KAAK,CAACl3M,CAAD,CAAT;;AACA,QAAIizC,GAAG,GAAGC,MAAV,EAAkB;AAChBD,MAAAA,GAAG,IAAIq3M,IAAI,CAACrgP,CAAD,CAAX;AACAsgP,MAAAA,IAAI,CAACtqP,IAAL,CAAUgK,CAAV;AACD,KAHD,MAGO;AACLipC,MAAAA,MAAM,IAAIo3M,IAAI,CAACrgP,CAAD,CAAd;AACAugP,MAAAA,OAAO,CAACvqP,IAAR,CAAagK,CAAb;AACD;AACF;;AAED,SAAOugP,OAAO,CAAC/1O,OAAR,GAAkBlV,MAAlB,CAAyBgrP,IAAzB,CAAP;AACD;;;;;;;;;AC1BD;;;;AAEe,kBAASnB,MAAT,EAAiB;AAC9B,SAAO,mBAAKA,MAAL,EAAa30O,OAAb,EAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;AC7CA;;AAEA;AACA;AACA,MAAM6lM,WAAW,GAAG,oBAApB,EAEA;;AACA,MAAMC,UAAU,GAAG,iGAAnB,EAAsH;;AACtH,MAAMC,aAAa,GAAG,6DAAtB,EAAqF;AAGrF;;AACA,MAAMC,YAAY,GAAG,SAArB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,kBAASlsM,KAAT,EAAgB2oL,EAAhB,EAAoB;AACjC,SAAOvgH,OAAO,KAAK;AACjBA,IAAAA,OAAO,EAAEA,OAAO,IAAI,EADH;AAEjB+jI,IAAAA,QAAQ,EAAEA,QAFO;AAGjB38F,IAAAA,IAAI,EAAEA,IAHW;AAIjB48F,IAAAA,UAAU,EAAE,CAAC,CAACzjB,EAJG;AAKjBlxE,IAAAA,IAAI,EAAE40F,UAAU,CAAC1jB,EAAD,CALC;AAMjB1rE,IAAAA,IAAI,EAAEqvF,UAAU,CAACtsM,KAAD;AANC,GAAL,CAAd;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAewvG,IAAf,CAAoB+8F,GAApB,EAAyBnkI,OAAzB,EAAkC;AAChC,QAAMs9H,GAAG,GAAG,MAAM,KAAKyG,QAAL,CAAcI,GAAd,EAAmBnkI,OAAnB,CAAlB;AAAA,QACMylC,GAAG,GAAG63F,GAAG,CAACzvF,IADhB;AAGA,SAAOyvF,GAAG,CAAC8G,SAAJ,GACH,KAAK/0F,IAAL,CAAU5J,GAAV,CADG,GAEH,KAAKoP,IAAL,CAAUpP,GAAV,EAAezlC,OAAf,CAFJ;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe+jI,QAAf,CAAwBI,GAAxB,EAA6BnkI,OAA7B,EAAsC;AACpCA,EAAAA,OAAO,GAAG,sBAAO,EAAP,EAAW,KAAKA,OAAhB,EAAyBA,OAAzB,CAAV;AAEA,QAAMgkI,UAAU,GAAG,KAAKA,UAAxB;AAAA,QACMz1M,MAAM,GAAG;AAACs/G,IAAAA,IAAI,EAAE;AAAP,GADf;AAGA,MAAIw2F,MAAJ,EAAYC,QAAZ,EAAsBjwK,IAAtB;AAEA,QAAMkwK,SAAS,GAAGX,UAAU,CAAC5sL,IAAX,CAAgBmtL,GAAG,CAACv3M,OAAJ,CAAYi3M,aAAZ,EAA2B,EAA3B,CAAhB,CAAlB;;AAEA,MAAIM,GAAG,IAAI,IAAP,IAAe,OAAOA,GAAP,KAAe,QAA9B,IAA0C,CAACI,SAA/C,EAA0D;AACxD,yBAAM,oCAAoC,2BAAYJ,GAAZ,CAA1C;AACD;;AAED,QAAMK,WAAW,GAAGb,WAAW,CAAC3sL,IAAZ,CAAiBmtL,GAAjB,CAApB,CAdoC,CAgBpC;;AACA,MAAI,CAAC9vK,IAAI,GAAG2rC,OAAO,CAACykI,OAAhB,KAA4B,CAACD,WAAjC,EAA8C;AAC5C;AACA,QAAI,CAACL,GAAG,CAACt6F,UAAJ,CAAe,GAAf,CAAD,IAAwBx1E,IAAI,CAACA,IAAI,CAAC1rC,MAAL,GAAY,CAAb,CAAJ,KAAwB,GAApD,EAAyD;AACvDw7M,MAAAA,GAAG,GAAG,MAAMA,GAAZ;AACD;;AACDA,IAAAA,GAAG,GAAG9vK,IAAI,GAAG8vK,GAAb;AACD,GAvBmC,CAyBpC;;;AACAG,EAAAA,QAAQ,GAAG,CAACD,MAAM,GAAGF,GAAG,CAACt6F,UAAJ,CAAei6F,YAAf,CAAV,KACN9jI,OAAO,CAACmoD,IAAR,KAAiB,MADX,IAENnoD,OAAO,CAACmoD,IAAR,KAAiB,MAAjB,IAA2B,CAACq8E,WAA5B,IAA2CR,UAFhD;;AAIA,MAAIK,MAAJ,EAAY;AACV;AACAF,IAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAUoxM,YAAY,CAACn7M,MAAvB,CAAN;AACD,GAHD,MAGO,IAAIw7M,GAAG,CAACt6F,UAAJ,CAAe,IAAf,CAAJ,EAA0B;AAC/B,QAAI7pC,OAAO,CAAC0kI,eAAR,KAA4B,MAAhC,EAAwC;AACtC;AACAP,MAAAA,GAAG,GAAGA,GAAG,CAACzxM,KAAJ,CAAU,CAAV,CAAN;AACA4xM,MAAAA,QAAQ,GAAG,IAAX;AACD,KAJD,MAIO;AACL;AACAH,MAAAA,GAAG,GAAG,CAACnkI,OAAO,CAAC0kI,eAAR,IAA2B,MAA5B,IAAsC,GAAtC,GAA4CP,GAAlD;AACD;AACF,GA1CmC,CA4CpC;;;AACA/3M,EAAAA,MAAM,CAACub,cAAP,CAAsBpZ,MAAtB,EAA8B,WAA9B,EAA2C;AAAClC,IAAAA,KAAK,EAAE,CAAC,CAACi4M;AAAV,GAA3C,EA7CoC,CA+CpC;;AACA/1M,EAAAA,MAAM,CAACs/G,IAAP,GAAcs2F,GAAd,CAhDoC,CAkDpC;;AACA,MAAInkI,OAAO,CAACpgC,MAAZ,EAAoB;AAClBrxC,IAAAA,MAAM,CAACqxC,MAAP,GAAgBogC,OAAO,CAACpgC,MAAR,GAAiB,EAAjC;AACD,GArDmC,CAuDpC;;;AACA,MAAIogC,OAAO,CAAC2kI,GAAZ,EAAiB;AACfp2M,IAAAA,MAAM,CAACo2M,GAAP,GAAa3kI,OAAO,CAAC2kI,GAAR,GAAc,EAA3B;AACD,GA1DmC,CA4DpC;AACA;;;AACA,MAAI3kI,OAAO,CAACq7F,OAAR,KAAoB,OAApB,IAA+Br7F,OAAO,CAAC4kI,WAA3C,EAAwD;AACtDr2M,IAAAA,MAAM,CAACq2M,WAAP,GAAqB5kI,OAAO,CAAC4kI,WAAR,GAAsB,EAA3C;AACD,GAhEmC,CAkEpC;;;AACA,SAAOr2M,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS01M,UAAT,CAAoB1jB,EAApB,EAAwB;AACtB,SAAOA,EAAE,GACLskB,QAAQ,IAAI,IAAI7yM,OAAJ,CAAY,CAAC8yM,MAAD,EAAS5yM,MAAT,KAAoB;AAC1CquL,IAAAA,EAAE,CAACwkB,QAAH,CAAYF,QAAZ,EAAsB,CAACn3L,KAAD,EAAQrV,IAAR,KAAiB;AACrC,UAAIqV,KAAJ,EAAWxb,MAAM,CAACwb,KAAD,CAAN,CAAX,KACKo3L,MAAM,CAACzsM,IAAD,CAAN;AACN,KAHD;AAID,GALW,CADP,GAOL2sM,UAPJ;AAQD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,wBAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASd,UAAT,CAAoBtsM,KAApB,EAA2B;AACzB,SAAOA,KAAK,GACR,gBAAe6tG,GAAf,EAAoBzlC,OAApB,EAA6B;AAC3B,UAAMs9H,GAAG,GAAG,sBAAO,EAAP,EAAW,KAAKt9H,OAAL,CAAa60C,IAAxB,EAA8B70C,OAA9B,CAAZ;AAAA,UACM12D,IAAI,GAAG02D,OAAO,IAAIA,OAAO,CAAC4wC,QADhC;AAAA,UAEMA,QAAQ,GAAG,MAAMh5G,KAAK,CAAC6tG,GAAD,EAAM63F,GAAN,CAF5B;AAIA,WAAO,CAAC1sF,QAAQ,CAAC6C,EAAV,GACH,qBAAM7C,QAAQ,CAACj1F,MAAT,GAAkB,EAAlB,GAAuBi1F,QAAQ,CAACivE,UAAtC,CADG,GAEH,0BAAWjvE,QAAQ,CAACtnG,IAAD,CAAnB,IAA6BsnG,QAAQ,CAACtnG,IAAD,CAAR,EAA7B,GACAsnG,QAAQ,CAAC7O,IAAT,EAHJ;AAID,GAVO,GAWRkjG,UAXJ;AAYD;AAED;AACA;AACA;;;AACA,eAAeA,UAAf,GAA4B;AAC1B,uBAAM,iCAAN;AACD;;;;;;;;;;;AC7LD;;AAEA,MAAMt9H,OAAO,GAAG33D,CAAC,IAAIA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAAxC;;AAEA,MAAMpb,SAAS,GAAGob,CAAC,IAAIA,CAAC,KAAK,MAAN,IAClBA,CAAC,KAAK,OADY,IAElBA,CAAC,KAAK,IAFY,IAGlBA,CAAC,KAAK,KAHX;;AAKA,MAAMizL,MAAM,GAAGjzL,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAakrE,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAb,CAArB;;AAEA,MAAMnb,QAAQ,GAAGmb,CAAC,IAAI,CAACvZ,MAAM,CAACxC,KAAP,CAAa,CAAC+b,CAAd,CAAD,IAAqB,EAAEA,CAAC,YAAYmvD,IAAf,CAA3C;;AAEA,MAAMzoE,SAAS,GAAGsZ,CAAC,IAAInb,QAAQ,CAACmb,CAAD,CAAR,IAAevZ,MAAM,CAACC,SAAP,CAAiB,CAACsZ,CAAlB,CAAtC;;AAEO,MAAMk1L,WAAW,GAAG;AACzBC,EAAAA,OAAO,EAAE7B,mBADgB;AAEzB8B,EAAAA,OAAO,EAAErG,kBAFgB;AAGzBsG,EAAAA,MAAM,EAAGtG,kBAHgB;AAIzBY,EAAAA,IAAI,EAAK4D,gBAJgB;AAKzB+B,EAAAA,MAAM,EAAGtsM,kBALgB;AAMzBkrJ,EAAAA,OAAO,EAAE56B;AANgB,CAApB;;AASP,MAAMi8E,SAAS,GAAG,CAChB3wM,SADgB,EAEhB8B,SAFgB,EAGhB7B,QAHgB,EAIhBouM,MAJgB,CAAlB;AAOA,MAAMuC,QAAQ,GAAG,CACf,SADe,EAEf,SAFe,EAGf,QAHe,EAIf,MAJe,CAAjB;;AAOO,SAASC,SAAT,CAAmBhyM,MAAnB,EAA2BorH,KAA3B,EAAkC;AACvC,MAAI,CAACprH,MAAD,IAAW,CAACA,MAAM,CAAC9K,MAAvB,EAA+B,OAAO,SAAP;AAE/B,QAAM4O,CAAC,GAAG9D,MAAM,CAAC9K,MAAjB;AAAA,QACMm4F,CAAC,GAAGykH,SAAS,CAAC58M,MADpB;AAAA,QAEM4H,CAAC,GAAGg1M,SAAS,CAACzyM,GAAV,CAAc,CAACkd,CAAD,EAAI3mB,CAAJ,KAAUA,CAAC,GAAG,CAA5B,CAFV;;AAIA,OAAK,IAAIA,CAAC,GAAG,CAAR,EAAW0D,CAAC,GAAG,CAAf,EAAkBuG,CAAlB,EAAqBjH,KAA1B,EAAiChD,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3CgD,IAAAA,KAAK,GAAGwyH,KAAK,GAAGprH,MAAM,CAACpK,CAAD,CAAN,CAAUw1H,KAAV,CAAH,GAAsBprH,MAAM,CAACpK,CAAD,CAAzC;;AACA,SAAKiK,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwtF,CAAhB,EAAmB,EAAExtF,CAArB,EAAwB;AACtB,UAAI/C,CAAC,CAAC+C,CAAD,CAAD,IAAQq0E,OAAO,CAACt7E,KAAD,CAAf,IAA0B,CAACk5M,SAAS,CAACjyM,CAAD,CAAT,CAAajH,KAAb,CAA/B,EAAoD;AAClDkE,QAAAA,CAAC,CAAC+C,CAAD,CAAD,GAAO,CAAP;AACA,UAAEvG,CAAF;AACA,YAAIA,CAAC,KAAKw4M,SAAS,CAAC58M,MAApB,EAA4B,OAAO,QAAP;AAC7B;AACF;AACF;;AAED,SAAO68M,QAAQ,CACbj1M,CAAC,CAACqF,MAAF,CAAS,CAACyyE,CAAD,EAAI9sE,CAAJ,KAAU8sE,CAAC,KAAK,CAAN,GAAU9sE,CAAV,GAAc8sE,CAAjC,EAAoC,CAApC,IAAyC,CAD5B,CAAf;AAGD;;AAEM,SAASq9H,UAAT,CAAoBrtM,IAApB,EAA0B8uC,MAA1B,EAAkC;AACvC,SAAOA,MAAM,CAACvxC,MAAP,CAAc,CAAC+vM,KAAD,EAAQ9mF,KAAR,KAAkB;AACrC8mF,IAAAA,KAAK,CAAC9mF,KAAD,CAAL,GAAe4mF,SAAS,CAACptM,IAAD,EAAOwmH,KAAP,CAAxB;AACA,WAAO8mF,KAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;;;;;;;;;AClED;;AACA;;AAEO,SAASuD,eAAT,CAAyB7wB,SAAzB,EAAoC;AACzC,QAAM9sI,KAAK,GAAG,UAASlzC,IAAT,EAAeuzG,MAAf,EAAuB;AACnC,UAAMu9F,KAAK,GAAG;AAAC9wB,MAAAA,SAAS,EAAEA;AAAZ,KAAd;AACA,WAAO+wB,GAAG,CAAC/wM,IAAD,EAAOuzG,MAAM,GAAG,sBAAOA,MAAP,EAAeu9F,KAAf,CAAH,GAA2BA,KAAxC,CAAV;AACD,GAHD;;AAKA59J,EAAAA,KAAK,CAAC89J,YAAN,GAAqB,MAArB;AAEA,SAAO99J,KAAP;AACD;;AAEc,SAAS69J,GAAT,CAAa/wM,IAAb,EAAmBuzG,MAAnB,EAA2B;AACxC,MAAIA,MAAM,CAAC09F,MAAX,EAAmB;AACjBjxM,IAAAA,IAAI,GAAGuzG,MAAM,CAAC09F,MAAP,CACJx2M,GADI,CACAy2M,qBADA,EAEJt8M,IAFI,CAEC2+G,MAAM,CAACysE,SAFR,IAEqB,IAFrB,GAE4BhgL,IAFnC;AAGD;;AACD,SAAO,sBAAUuzG,MAAM,CAACysE,SAAjB,EAA4B9sI,KAA5B,CAAkClzC,IAAI,GAAG,EAAzC,CAAP;AACD;;AAED+wM,GAAG,CAACC,YAAJ,GAAmB,MAAnB;;;;;;;;;;ACvBA;;AAIA,SAASG,QAAT,CAAkBx5L,CAAlB,EAAqB;AACnB,SAAQ,OAAO6zF,MAAP,KAAkB,UAAlB,IAAgC,0BAAWA,MAAM,CAAC2lG,QAAlB,CAAjC,GACH3lG,MAAM,CAAC2lG,QAAP,CAAgBx5L,CAAhB,CADG,GACkB,KADzB;AAED;;AAEc,SAAS4jG,IAAT,CAAcv7G,IAAd,EAAoBuzG,MAApB,EAA4B;AACzC,QAAMxrC,IAAI,GAAIwrC,MAAM,IAAIA,MAAM,CAACg1F,QAAlB,GAA8B,qBAAMh1F,MAAM,CAACg1F,QAAb,CAA9B,GAAuDt3E,kBAApE;AACA,SAAO,wBAASjxH,IAAT,KAAkB,CAACmxM,QAAQ,CAACnxM,IAAD,CAA3B,GACHoxM,SAAS,CAACrpI,IAAI,CAAC/nE,IAAD,CAAL,EAAauzG,MAAb,CADN,GAEHxrC,IAAI,CAAC90B,IAAI,CAACC,KAAL,CAAWlzC,IAAX,CAAD,CAFR;AAGD;;AAEDu7G,IAAI,CAACy1F,YAAL,GAAoB,MAApB;;AAEA,SAASI,SAAT,CAAmBpxM,IAAnB,EAAyBuzG,MAAzB,EAAiC;AAC/B,MAAI,CAAC,uBAAQvzG,IAAR,CAAD,IAAkB,0BAAWA,IAAX,CAAtB,EAAwC;AACtCA,IAAAA,IAAI,GAAG,CAAC,GAAGA,IAAJ,CAAP;AACD;;AACD,SAAQuzG,MAAM,IAAIA,MAAM,CAACztC,IAAlB,GACH7yB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAenzC,IAAf,CAAX,CADG,GAEHA,IAFJ;AAGD;;;;;;;;;ACzBD;;AACA;;AACA;;;;AAEA,MAAMqnJ,OAAO,GAAG;AACd6tD,EAAAA,QAAQ,EAAE,CAACh9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G,CADZ;AAEdo2M,EAAAA,QAAQ,EAAE,CAACj9M,CAAD,EAAI6G,CAAJ,KAAU7G,CAAC,KAAK6G;AAFZ,CAAhB;;AAKe,SAASq2M,QAAT,CAAkBp1M,IAAlB,EAAwBuzG,MAAxB,EAAgC;AAC7C,MAAItxE,MAAJ,EAAYo2J,MAAZ,EAAoBkQ,QAApB,EAA8Bp8L,MAA9B;AACAnM,EAAAA,IAAI,GAAG,mBAAKA,IAAL,EAAWuzG,MAAX,CAAP;;AAEA,MAAIA,MAAM,IAAIA,MAAM,CAAC0+F,OAArB,EAA8B;AAC5BhwK,IAAAA,MAAM,GAAGgwK,uBAAT;AACA1J,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC0+F,OAAlB;AACD,GAHD,MAGO,IAAI1+F,MAAM,IAAIA,MAAM,CAAC8hG,IAArB,EAA2B;AAChCpzK,IAAAA,MAAM,GAAGozK,oBAAT;AACA9M,IAAAA,QAAQ,GAAGh1F,MAAM,CAAC8hG,IAAlB;AACAlpM,IAAAA,MAAM,GAAGk7I,OAAO,CAAC9zC,MAAM,CAACpnG,MAAR,CAAhB;AACD,GAJM,MAIA;AACL,yBAAM,6CAAN;AACD;;AAEDksL,EAAAA,MAAM,GAAG,CAACA,MAAM,GAAGr4L,IAAI,CAACgyM,OAAL,CAAazJ,QAAb,CAAV,IACLtmK,MAAM,CAACjiC,IAAD,EAAOq4L,MAAP,EAAelsL,MAAf,CADD,GAEL,qBAAM,8BAA8Bo8L,QAApC,CAFJ;AAIA,SAAOlQ,MAAM,IAAIA,MAAM,CAACxX,QAAjB,IAA6B,CAACwX,MAAD,CAApC;AACD;;AAED+c,QAAQ,CAACpE,YAAT,GAAwB,MAAxB;;;;;;;;;;;AC/BA;;AACA;;AACA;;AACA;;;;;;;;AAEO,MAAMz9F,MAAM,GAAG;AACpBw9F,EAAAA,GAAG,EAAEA,YADe;AAEpBxoB,EAAAA,GAAG,EAAE,0BAAgB,GAAhB,CAFe;AAGpB2nB,EAAAA,GAAG,EAAE,0BAAgB,IAAhB,CAHe;AAIpB30F,EAAAA,IAAI,EAAEA,aAJc;AAKpB65F,EAAAA,QAAQ,EAAEA;AALU,CAAf;;;AAQA,SAASE,OAAT,CAAiB/iN,IAAjB,EAAuBgjN,MAAvB,EAA+B;AACpC,MAAIxkN,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxBijH,IAAAA,MAAM,CAAChhH,IAAD,CAAN,GAAegjN,MAAf;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO,8BAAehiG,MAAf,EAAuBhhH,IAAvB,IAA+BghH,MAAM,CAAChhH,IAAD,CAArC,GAA8C,IAArD;AACD;AACF;;AAEM,SAASy+M,YAAT,CAAsB//L,IAAtB,EAA4B;AACjC,QAAMtU,CAAC,GAAG24M,OAAO,CAACrkM,IAAD,CAAjB;AACA,SAAOtU,CAAC,IAAIA,CAAC,CAACq0M,YAAP,IAAuB,MAA9B;AACD;;;;;;;;;ACzBD;;AACA;;AACA;;AACA;;AAEe,kBAAShxM,IAAT,EAAe4vN,MAAf,EAAuBC,UAAvB,EAAmCC,SAAnC,EAA8C;AAC3DF,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AAEA,QAAMra,MAAM,GAAG,oBAAQqa,MAAM,CAAC3+M,IAAP,IAAe,MAAvB,CAAf;AACA,MAAI,CAACskM,MAAL,EAAa,qBAAM,+BAA+Bqa,MAAM,CAAC3+M,IAA5C;AAEbjR,EAAAA,IAAI,GAAGu1M,MAAM,CAACv1M,IAAD,EAAO4vN,MAAP,CAAb;AACA,MAAIA,MAAM,CAAC18K,KAAX,EAAkBA,KAAK,CAAClzC,IAAD,EAAO4vN,MAAM,CAAC18K,KAAd,EAAqB28K,UAArB,EAAiCC,SAAjC,CAAL;AAElB,MAAI,8BAAe9vN,IAAf,EAAqB,SAArB,CAAJ,EAAqC,OAAOA,IAAI,CAACwE,OAAZ;AACrC,SAAOxE,IAAP;AACD;;AAED,SAASkzC,KAAT,CAAelzC,IAAf,EAAqBstM,KAArB,EAA4BuiB,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,MAAI,CAAC9vN,IAAI,CAAC1P,MAAV,EAAkB,OAD+B,CACvB;;AAE1B,QAAMyqN,MAAM,GAAG,0CAAf;AACA8U,EAAAA,UAAU,GAAGA,UAAU,IAAI9U,MAAM,CAAC+S,SAAlC;AACAgC,EAAAA,SAAS,GAAGA,SAAS,IAAI/U,MAAM,CAACoS,QAAhC;AAEA,MAAIr+K,MAAM,GAAG9uC,IAAI,CAACwE,OAAL,IAAgBzQ,MAAM,CAACof,IAAP,CAAYnT,IAAI,CAAC,CAAD,CAAhB,CAA7B;AAAA,MACI+vN,KADJ;AAAA,MACWvpG,KADX;AAAA,MACkBx1H,CADlB;AAAA,MACqBiK,CADrB;AAAA,MACwBiE,CADxB;AAAA,MAC2BupF,CAD3B;AAGA,MAAI6kH,KAAK,KAAK,MAAd,EAAsBA,KAAK,GAAG,sBAAWttM,IAAX,EAAiB8uC,MAAjB,CAAR;AAEtBA,EAAAA,MAAM,GAAG/6C,MAAM,CAACof,IAAP,CAAYm6L,KAAZ,CAAT;AACA,QAAM0iB,OAAO,GAAGlhL,MAAM,CAACr0C,GAAP,CAAW+rH,KAAK,IAAI;AAClC,UAAMv1G,IAAI,GAAGq8L,KAAK,CAAC9mF,KAAD,CAAlB;AACA,QAAIypG,KAAJ,EAAWn9D,OAAX;;AAEA,QAAI7hJ,IAAI,KAAKA,IAAI,CAACugG,UAAL,CAAgB,OAAhB,KAA4BvgG,IAAI,CAACugG,UAAL,CAAgB,MAAhB,CAAjC,CAAR,EAAmE;AACjEy+G,MAAAA,KAAK,GAAGh/M,IAAI,CAACpc,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAR,CADiE,CAC/B;;AAClCi+J,MAAAA,OAAO,GAAGm9D,KAAK,CAAC,CAAD,CAAf;;AAEA,UAAKn9D,OAAO,CAAC,CAAD,CAAP,KAAe,IAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,IAAtD,IACCwiK,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAuBA,OAAO,CAACA,OAAO,CAACxiK,MAAR,GAAe,CAAhB,CAAP,KAA8B,GAD1D,EACgE;AAC9DwiK,QAAAA,OAAO,GAAGA,OAAO,CAACz4J,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;AACD;;AAED,YAAM64C,KAAK,GAAG+8K,KAAK,CAAC,CAAD,CAAL,KAAa,KAAb,GAAqBH,SAArB,GAAiCD,UAA/C;AACA,aAAO38K,KAAK,CAAC4/G,OAAD,CAAZ;AACD;;AAED,QAAI,CAAC+5C,kBAAY57L,IAAZ,CAAL,EAAwB;AACtB,YAAM1hB,KAAK,CAAC,6BAA6Bi3H,KAA7B,GAAqC,GAArC,GAA2Cv1G,IAA5C,CAAX;AACD;;AAED,WAAO47L,kBAAY57L,IAAZ,CAAP;AACD,GAtBe,CAAhB;;AAwBA,OAAKjgB,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACc,IAAI,CAAC1P,MAAZ,EAAoBm4F,CAAC,GAAC35C,MAAM,CAACx+C,MAAlC,EAA0CU,CAAC,GAACkO,CAA5C,EAA+C,EAAElO,CAAjD,EAAoD;AAClD++N,IAAAA,KAAK,GAAG/vN,IAAI,CAAChP,CAAD,CAAZ;;AACA,SAAKiK,CAAC,GAAC,CAAP,EAAUA,CAAC,GAACwtF,CAAZ,EAAe,EAAExtF,CAAjB,EAAoB;AAClBurH,MAAAA,KAAK,GAAG13E,MAAM,CAAC7zC,CAAD,CAAd;AACA80N,MAAAA,KAAK,CAACvpG,KAAD,CAAL,GAAewpG,OAAO,CAAC/0N,CAAD,CAAP,CAAW80N,KAAK,CAACvpG,KAAD,CAAhB,CAAf;AACD;AACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DD;;AAOA;;AAIA;;AAMA;;;;AAfO,MAAM0pG,MAAM,GAAG,qBACpB,OAAO3wN,KAAP,KAAiB,WAAjB,IAAgCA,KADZ,EACmB;AACvC,IAFoB,CAEf;AAFe,CAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFP;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAIi8P,WAAW,GAAG,CAAlB;;AACA,SAASC,kBAAT,GAA8B;AAC5BD,EAAAA,WAAW,GAAG,CAAd;AACD;;AACD,MAAME,aAAa,GAAG,IAAtB;;AACA,SAASC,UAAT,CAAoB3nQ,KAApB,EAA2B;AACzB,SAAOA,KAAK,IAAIA,KAAK,CAACwmB,QAAtB;AACD;;AACD,SAASohP,WAAT,CAAqBn8N,CAArB,EAAwBo8N,IAAxB,EAA8B7/N,IAA9B,EAAoC;AAClC,QAAM/qB,IAAI,GAAGwuB,CAAC,CAACjlB,QAAf;AACA,MAAIvW,EAAE,GAAGw7B,CAAC,CAACx7B,EAAX;AAAA,MACImwG,MAAM,GAAGnjG,IAAI,KAAK,QAAT,GAAoByqP,aAApB,GAAoC,EADjD,CAFkC,CAGmB;;AAErD,MAAI,CAACz3P,EAAL,EAAS;AACPA,IAAAA,EAAE,GAAGw7B,CAAC,CAACx7B,EAAF,GAAO,cAAcu3P,WAAW,EAArC;;AAEA,QAAIvqP,IAAI,KAAK,QAAb,EAAuB;AACrBwuB,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,GAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,GAAP,CAAV;AACA/jE,MAAAA,CAAC,CAAC2jK,EAAF,GAAOtvM,GAAG,CAAC2rC,CAAC,CAAC2jK,EAAH,EAAO,CAAP,CAAV;AACA3jK,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,GAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,GAAP,CAAV;AACAjkE,MAAAA,CAAC,CAAC4jK,EAAF,GAAOvvM,GAAG,CAAC2rC,CAAC,CAAC4jK,EAAH,EAAO,GAAP,CAAV;AACAjvF,MAAAA,MAAM,GAAGsnJ,aAAT;AACD,KARD,MAQO;AACLj8N,MAAAA,CAAC,CAACgkE,EAAF,GAAO3vG,GAAG,CAAC2rC,CAAC,CAACgkE,EAAH,EAAO,CAAP,CAAV;AACAhkE,MAAAA,CAAC,CAAC+jE,EAAF,GAAO1vG,GAAG,CAAC2rC,CAAC,CAAC+jE,EAAH,EAAO,CAAP,CAAV;AACA/jE,MAAAA,CAAC,CAACqwC,EAAF,GAAOh8E,GAAG,CAAC2rC,CAAC,CAACqwC,EAAH,EAAO,CAAP,CAAV;AACArwC,MAAAA,CAAC,CAACikE,EAAF,GAAO5vG,GAAG,CAAC2rC,CAAC,CAACikE,EAAH,EAAO,CAAP,CAAV;AACD;AACF,GAtBiC,CAsBhC;;;AAGFm4J,EAAAA,IAAI,CAAC53P,EAAD,CAAJ,GAAWw7B,CAAX,CAzBkC,CAyBpB;;AAEd,SAAO,UAAUzD,IAAI,IAAI,EAAlB,IAAwB,GAAxB,GAA8Bo4E,MAA9B,GAAuCnwG,EAAvC,GAA4C,GAAnD;AACD;;AAED,SAASnQ,GAAT,CAAawD,GAAb,EAAkB0vK,GAAlB,EAAuB;AACrB,SAAO1vK,GAAG,IAAI,IAAP,GAAcA,GAAd,GAAoB0vK,GAA3B;AACD;;AAED,SAAS80F,QAAT,CAAmB5oD,EAAnB,EAAuBntF,EAAvB,EAA2B;AACzB,MAAIg2I,KAAK,GAAG,EAAZ;AAAA,MACIvhP,QADJ;AAEA,SAAOA,QAAQ,GAAG;AAChBA,IAAAA,QAAQ,EAAE,QADM;AAEhBipF,IAAAA,EAAE,EAAEyvG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAFD;AAGhB1vG,IAAAA,EAAE,EAAE0vG,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAHD;AAIhBpjI,IAAAA,EAAE,EAAEi2C,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CAJD;AAKhBriB,IAAAA,EAAE,EAAEqiB,EAAE,GAAGA,EAAE,CAAC,CAAD,CAAL,GAAW,CALD;AAMhBg2I,IAAAA,KAAK,EAAEA,KANS;AAOhBxpO,IAAAA,IAAI,EAAE,UAAU50B,MAAV,EAAkB6oP,KAAlB,EAAyB;AAC7BuV,MAAAA,KAAK,CAAC9qQ,IAAN,CAAW;AACT0M,QAAAA,MAAM,EAAEA,MADC;AAET6oP,QAAAA,KAAK,EAAEA;AAFE,OAAX;AAIA,aAAOhsO,QAAP;AACD;AAbe,GAAlB;AAeD;;AAED,MAAMwhP,MAAM,GAAG;AACb,WAAS;AACPnoB,IAAAA,KAAK,EAAEooB;AADA,GADI;AAIb,kBAAgB;AACdpoB,IAAAA,KAAK,EAAEqoB;AADO,GAJH;AAOb,gBAAc;AACZroB,IAAAA,KAAK,EAAEsoB;AADK,GAPD;AAUb,YAAU;AACRtoB,IAAAA,KAAK,EAAEuoB,oBADC;AAERrkB,IAAAA,OAAO,EAAE,MAFD;AAGR/jP,IAAAA,KAAK,EAAE;AAHC,GAVG;AAeb,cAAY;AACV6/O,IAAAA,KAAK,EAAEwoB,sBADG;AAEVtkB,IAAAA,OAAO,EAAE,SAFC;AAGV/jP,IAAAA,KAAK,EAAE;AAHG,GAfC;AAoBb,mBAAiB;AACf6/O,IAAAA,KAAK,EAAEyoB,0BADQ;AAEfvkB,IAAAA,OAAO,EAAE,SAFM;AAGf/jP,IAAAA,KAAK,EAAE;AAHQ,GApBJ;AAyBb,qBAAmB;AACjB6/O,IAAAA,KAAK,EAAE0oB,4BADU;AAEjBxkB,IAAAA,OAAO,EAAE,SAFQ;AAGjB/jP,IAAAA,KAAK,EAAE;AAHU,GAzBN;AA8Bb,iBAAe;AACb6/O,IAAAA,KAAK,EAAE2oB,wBADM;AAEbzkB,IAAAA,OAAO,EAAE,OAFI;AAGb/jP,IAAAA,KAAK,EAAE;AAHM,GA9BF;AAmCb,wBAAsB;AACpB6/O,IAAAA,KAAK,EAAE4oB,8BADa;AAEpB1kB,IAAAA,OAAO,EAAE,OAFW;AAGpB/jP,IAAAA,KAAK,EAAE;AAHa,GAnCT;AAwCb,sBAAoB;AAClB6/O,IAAAA,KAAK,EAAE6oB,4BADW;AAElB3kB,IAAAA,OAAO,EAAE,OAFS;AAGlB/jP,IAAAA,KAAK,EAAE;AAHW,GAxCP;AA6Cb,YAAU;AACR6/O,IAAAA,KAAK,EAAEC;AADC,GA7CG;AAgDb,mBAAiB;AACfD,IAAAA,KAAK,EAAE8oB;AADQ,GAhDJ;AAmDb,cAAY;AACVC,IAAAA,UAAU,EAAEC,uBADF;AAEVC,IAAAA,QAAQ,EAAEC;AAFA,GAnDC;AAuDb,aAAW;AACTlpB,IAAAA,KAAK,EAAEmpB;AADE,GAvDE;AA0Db,UAAQ;AACNnpB,IAAAA,KAAK,EAAEopB;AADD,GA1DK;AA6Db,gBAAc;AACZppB,IAAAA,KAAK,EAAEqpB;AADK,GA7DD;AAgEb,iBAAe;AACbrpB,IAAAA,KAAK,EAAEspB;AADM;AAhEF,CAAf;;AAoEA,SAASC,MAAT,CAAgBnsP,IAAhB,EAAsBosP,WAAtB,EAAmCtlB,OAAnC,EAA4C;AAC1C,MAAI77H,KAAK,GAAG,8BAAe8/I,MAAf,EAAuB/qP,IAAvB,KAAgC+qP,MAAM,CAAC/qP,IAAD,CAAlD;AAAA,MACI4iO,KAAK,GAAG,IADZ;;AAGA,MAAI33H,KAAJ,EAAW;AACT23H,IAAAA,KAAK,GAAG33H,KAAK,CAAC23H,KAAN,IAAe33H,KAAK,CAACmhJ,WAAW,IAAI,UAAhB,CAA5B;;AAEA,QAAInhJ,KAAK,CAAC67H,OAAN,IAAiBA,OAAO,IAAI,IAAhC,EAAsC;AACpClE,MAAAA,KAAK,GAAGA,KAAK,CAAC33H,KAAK,CAAC67H,OAAP,CAAL,CAAqBA,OAArB,CAAR;AACD;AACF;;AAED,SAAOlE,KAAP;AACD,EAED;;;AACA,MAAMypB,MAAM,GAAG;AACb70K,EAAAA,CAAC,EAAE,CADU;AAEb3lF,EAAAA,CAAC,EAAE,CAFU;AAGby6C,EAAAA,CAAC,EAAE,CAHU;AAIbr6C,EAAAA,CAAC,EAAE,CAJU;AAKbzF,EAAAA,CAAC,EAAE,CALU;AAMbjJ,EAAAA,CAAC,EAAE,CANU;AAObk0F,EAAAA,CAAC,EAAE,CAPU;AAQbh0F,EAAAA,CAAC,EAAE,CARU;AASbwD,EAAAA,CAAC,EAAE;AATU,CAAf;AAAA,MAWMs0L,MAAM,GAAG,CAAC,2BAAD,EAA8B,KAA9B,EAAqC,gBAArC,EAAuD,aAAvD,EAAsE,UAAtE,CAXf;;AAYA,SAAS+wE,SAAT,CAAoBC,OAApB,EAA6B;AAC3B,QAAMtnQ,MAAM,GAAG,EAAf;AACA,MAAI8vK,IAAJ,EAAU3+F,MAAV,EAAkBq1H,MAAlB,EAA0B12J,KAA1B,EAAiCy3N,GAAjC,EAAsC/sQ,GAAtC,EAA2CM,CAA3C,EAA8CiK,CAA9C,EAAiDiE,CAAjD,EAAoDupF,CAApD,CAF2B,CAE4B;;AAEvD,QAAMppF,IAAI,GAAGm+P,OAAO,CAACnjQ,KAAR,GAAgB9F,OAAhB,CAAwBi4L,MAAM,CAAC,CAAD,CAA9B,EAAmC,OAAnC,EAA4C33L,KAA5C,CAAkD23L,MAAM,CAAC,CAAD,CAAxD,EAA6DnyL,KAA7D,CAAmE,CAAnE,CAAb,CAJ2B,CAIyD;;AAEpF,OAAKrJ,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGG,IAAI,CAAC/O,MAArB,EAA6BU,CAAC,GAAGkO,CAAjC,EAAoC,EAAElO,CAAtC,EAAyC;AACvCg1K,IAAAA,IAAI,GAAG3mK,IAAI,CAACrO,CAAD,CAAX;AACAq2E,IAAAA,MAAM,GAAG2+F,IAAI,CAAC3rK,KAAL,CAAW,CAAX,EAAc4xG,IAAd,GAAqB13G,OAArB,CAA6Bi4L,MAAM,CAAC,CAAD,CAAnC,EAAwC,SAAxC,EAAmDj4L,OAAnD,CAA2Di4L,MAAM,CAAC,CAAD,CAAjE,EAAsE,SAAtE,EAAiF33L,KAAjF,CAAuF23L,MAAM,CAAC,CAAD,CAA7F,CAAT;AACAixE,IAAAA,GAAG,GAAGz3F,IAAI,CAACz3H,MAAL,CAAY,CAAZ,CAAN;AACAmuJ,IAAAA,MAAM,GAAG,CAAC+gE,GAAD,CAAT;;AAEA,SAAKxiQ,CAAC,GAAG,CAAJ,EAAOwtF,CAAC,GAAGphB,MAAM,CAAC/2E,MAAvB,EAA+B2K,CAAC,GAAGwtF,CAAnC,EAAsC,EAAExtF,CAAxC,EAA2C;AACzC,UAAI,CAAC+qC,KAAK,GAAG,CAACqhC,MAAM,CAACpsE,CAAD,CAAhB,MAAyB+qC,KAA7B,EAAoC;AAClC;AACA02J,QAAAA,MAAM,CAACzrM,IAAP,CAAY+0C,KAAZ;AACD;AACF;;AAEDt1C,IAAAA,GAAG,GAAG4sQ,MAAM,CAACG,GAAG,CAACtoQ,WAAJ,EAAD,CAAZ;;AAEA,QAAIunM,MAAM,CAACpsM,MAAP,GAAgB,CAAhB,GAAoBI,GAAxB,EAA6B;AAC3B,YAAM+3F,CAAC,GAAGi0G,MAAM,CAACpsM,MAAjB;AACA2K,MAAAA,CAAC,GAAG,CAAJ;AACA/E,MAAAA,MAAM,CAACjF,IAAP,CAAY,CAACwsQ,GAAD,EAAMltQ,MAAN,CAAamsM,MAAM,CAACriM,KAAP,CAAaY,CAAb,EAAgBA,CAAC,IAAIvK,GAArB,CAAb,CAAZ,EAH2B,CAG2B;;AAEtD+sQ,MAAAA,GAAG,GAAGA,GAAG,KAAK,GAAR,GAAc,GAAd,GAAoBA,GAAG,KAAK,GAAR,GAAc,GAAd,GAAoBA,GAA9C;;AAEA,aAAOxiQ,CAAC,GAAGwtF,CAAX,EAAcxtF,CAAC,IAAIvK,GAAnB,EAAwB;AACtBwF,QAAAA,MAAM,CAACjF,IAAP,CAAY,CAACwsQ,GAAD,EAAMltQ,MAAN,CAAamsM,MAAM,CAACriM,KAAP,CAAaY,CAAb,EAAgBA,CAAC,GAAGvK,GAApB,CAAb,CAAZ;AACD;AACF,KAVD,MAUO;AACLwF,MAAAA,MAAM,CAACjF,IAAP,CAAYyrM,MAAZ;AACD;AACF;;AAED,SAAOxmM,MAAP;AACD;;AAED,MAAMwnQ,QAAQ,GAAG3mQ,IAAI,CAACuiC,EAAL,GAAU,GAA3B;AACA,MAAMqkO,OAAO,GAAG,KAAhB;AACA,MAAMC,MAAM,GAAG7mQ,IAAI,CAACuiC,EAAL,GAAU,CAAzB;AACA,MAAMukO,GAAG,GAAG9mQ,IAAI,CAACuiC,EAAL,GAAU,CAAtB;AACA,MAAMwkO,SAAS,GAAG/mQ,IAAI,CAACqC,IAAL,CAAU,CAAV,IAAe,CAAjC;AAEA,IAAI2kQ,YAAY,GAAG,EAAnB;AACA,IAAIC,WAAW,GAAG,EAAlB;AACA,IAAIppQ,IAAI,GAAG,GAAGA,IAAd,EAAoB;;AAEpB,SAASqpQ,QAAT,CAAkB9mQ,CAAlB,EAAqBue,CAArB,EAAwBwoP,EAAxB,EAA4BC,EAA5B,EAAgCC,KAAhC,EAAuCC,KAAvC,EAA8CC,OAA9C,EAAuDptB,EAAvD,EAA2DC,EAA3D,EAA+D;AAC7D,QAAMl8O,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUiB,SAAV,CAAZ;;AAEA,MAAIgtQ,YAAY,CAAC9oQ,GAAD,CAAhB,EAAuB;AACrB,WAAO8oQ,YAAY,CAAC9oQ,GAAD,CAAnB;AACD;;AAED,QAAMspQ,EAAE,GAAGD,OAAO,GAAGZ,QAArB;AACA,QAAMc,MAAM,GAAGznQ,IAAI,CAAC+T,GAAL,CAASyzP,EAAT,CAAf;AACA,QAAME,MAAM,GAAG1nQ,IAAI,CAACgU,GAAL,CAASwzP,EAAT,CAAf;AACAL,EAAAA,EAAE,GAAGnnQ,IAAI,CAACiT,GAAL,CAASk0P,EAAT,CAAL;AACAC,EAAAA,EAAE,GAAGpnQ,IAAI,CAACiT,GAAL,CAASm0P,EAAT,CAAL;AACA,QAAMrkB,EAAE,GAAG2kB,MAAM,IAAIvtB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAApB,GAA0BqnQ,MAAM,IAAIrtB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAAzD;AACA,QAAMskO,EAAE,GAAGykB,MAAM,IAAIttB,EAAE,GAAGz7N,CAAT,CAAN,GAAoB,GAApB,GAA0B8oP,MAAM,IAAIttB,EAAE,GAAG/5O,CAAT,CAAN,GAAoB,GAAzD;AACA,MAAIunQ,EAAE,GAAG5kB,EAAE,GAAGA,EAAL,IAAWokB,EAAE,GAAGA,EAAhB,IAAsBlkB,EAAE,GAAGA,EAAL,IAAWmkB,EAAE,GAAGA,EAAhB,CAA/B;;AAEA,MAAIO,EAAE,GAAG,CAAT,EAAY;AACVA,IAAAA,EAAE,GAAG3nQ,IAAI,CAACqC,IAAL,CAAUslQ,EAAV,CAAL;AACAR,IAAAA,EAAE,IAAIQ,EAAN;AACAP,IAAAA,EAAE,IAAIO,EAAN;AACD;;AAED,QAAMnsB,GAAG,GAAGksB,MAAM,GAAGP,EAArB;AACA,QAAM7rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAM1rB,GAAG,GAAG,CAACgsB,MAAD,GAAUL,EAAtB;AACA,QAAM7rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAM9sD,EAAE,GAAGkhC,GAAG,GAAGrB,EAAN,GAAWmB,GAAG,GAAGlB,EAA5B;AACA,QAAM7/B,EAAE,GAAGkhC,GAAG,GAAGtB,EAAN,GAAWoB,GAAG,GAAGnB,EAA5B;AACA,QAAM1tI,EAAE,GAAG8uI,GAAG,GAAGp7O,CAAN,GAAUk7O,GAAG,GAAG38N,CAA3B;AACA,QAAM8tF,EAAE,GAAGgvI,GAAG,GAAGr7O,CAAN,GAAUm7O,GAAG,GAAG58N,CAA3B;AACA,QAAM7X,CAAC,GAAG,CAAC4lG,EAAE,GAAG4tG,EAAN,KAAa5tG,EAAE,GAAG4tG,EAAlB,IAAwB,CAAC7tG,EAAE,GAAG8tG,EAAN,KAAa9tG,EAAE,GAAG8tG,EAAlB,CAAlC;AACA,MAAIqtD,UAAU,GAAG,IAAI9gQ,CAAJ,GAAQ,IAAzB;AACA,MAAI8gQ,UAAU,GAAG,CAAjB,EAAoBA,UAAU,GAAG,CAAb;AACpB,MAAIC,OAAO,GAAG7nQ,IAAI,CAACqC,IAAL,CAAUulQ,UAAV,CAAd;AACA,MAAIN,KAAK,IAAID,KAAb,EAAoBQ,OAAO,GAAG,CAACA,OAAX;AACpB,QAAMC,EAAE,GAAG,OAAOxtD,EAAE,GAAG5tG,EAAZ,IAAkBm7J,OAAO,IAAIp7J,EAAE,GAAG8tG,EAAT,CAApC;AACA,QAAMwtD,EAAE,GAAG,OAAOxtD,EAAE,GAAG9tG,EAAZ,IAAkBo7J,OAAO,IAAIn7J,EAAE,GAAG4tG,EAAT,CAApC;AACA,QAAM0tD,GAAG,GAAGhoQ,IAAI,CAACuQ,KAAL,CAAWgqM,EAAE,GAAGwtD,EAAhB,EAAoBztD,EAAE,GAAGwtD,EAAzB,CAAZ;AACA,QAAMG,GAAG,GAAGjoQ,IAAI,CAACuQ,KAAL,CAAWk8F,EAAE,GAAGs7J,EAAhB,EAAoBr7J,EAAE,GAAGo7J,EAAzB,CAAZ;AACA,MAAII,MAAM,GAAGD,GAAG,GAAGD,GAAnB;;AAEA,MAAIE,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AAC7BY,IAAAA,MAAM,IAAIpB,GAAV;AACD,GAFD,MAEO,IAAIoB,MAAM,GAAG,CAAT,IAAcZ,KAAK,KAAK,CAA5B,EAA+B;AACpCY,IAAAA,MAAM,IAAIpB,GAAV;AACD;;AAED,QAAMqB,IAAI,GAAGnoQ,IAAI,CAACoC,IAAL,CAAUpC,IAAI,CAACiT,GAAL,CAASi1P,MAAM,IAAIrB,MAAM,GAAG,KAAb,CAAf,CAAV,CAAb;AACA,QAAM1nQ,MAAM,GAAG,EAAf;;AAEA,OAAK,IAAIlF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuQ,IAApB,EAA0B,EAAEluQ,CAA5B,EAA+B;AAC7B,UAAMmuQ,GAAG,GAAGJ,GAAG,GAAG/tQ,CAAC,GAAGiuQ,MAAJ,GAAaC,IAA/B;AACA,UAAME,GAAG,GAAGL,GAAG,GAAG,CAAC/tQ,CAAC,GAAG,CAAL,IAAUiuQ,MAAV,GAAmBC,IAArC;AACAhpQ,IAAAA,MAAM,CAAClF,CAAD,CAAN,GAAY,CAAC6tQ,EAAD,EAAKC,EAAL,EAASK,GAAT,EAAcC,GAAd,EAAmBlB,EAAnB,EAAuBC,EAAvB,EAA2BK,MAA3B,EAAmCC,MAAnC,CAAZ;AACD;;AAED,SAAOV,YAAY,CAAC9oQ,GAAD,CAAZ,GAAoBiB,MAA3B;AACD;;AACD,SAASmpQ,MAAT,CAAgBhrQ,MAAhB,EAAwB;AACtB,QAAMY,GAAG,GAAGL,IAAI,CAAC9E,IAAL,CAAUuE,MAAV,CAAZ;;AAEA,MAAI2pQ,WAAW,CAAC/oQ,GAAD,CAAf,EAAsB;AACpB,WAAO+oQ,WAAW,CAAC/oQ,GAAD,CAAlB;AACD;;AAED,MAAIg9O,EAAE,GAAG59O,MAAM,CAAC,CAAD,CAAf;AAAA,MACI69O,EAAE,GAAG79O,MAAM,CAAC,CAAD,CADf;AAAA,MAEI0qQ,GAAG,GAAG1qQ,MAAM,CAAC,CAAD,CAFhB;AAAA,MAGI2qQ,GAAG,GAAG3qQ,MAAM,CAAC,CAAD,CAHhB;AAAA,MAII6pQ,EAAE,GAAG7pQ,MAAM,CAAC,CAAD,CAJf;AAAA,MAKI8pQ,EAAE,GAAG9pQ,MAAM,CAAC,CAAD,CALf;AAAA,MAMImqQ,MAAM,GAAGnqQ,MAAM,CAAC,CAAD,CANnB;AAAA,MAOIoqQ,MAAM,GAAGpqQ,MAAM,CAAC,CAAD,CAPnB;AAQA,QAAMk+O,GAAG,GAAGksB,MAAM,GAAGP,EAArB;AACA,QAAM7rB,GAAG,GAAG,CAACmsB,MAAD,GAAUL,EAAtB;AACA,QAAM3rB,GAAG,GAAGgsB,MAAM,GAAGN,EAArB;AACA,QAAM5rB,GAAG,GAAGmsB,MAAM,GAAGN,EAArB;AACA,QAAMmB,OAAO,GAAGvoQ,IAAI,CAACgU,GAAL,CAASg0P,GAAT,CAAhB;AACA,QAAMQ,OAAO,GAAGxoQ,IAAI,CAAC+T,GAAL,CAASi0P,GAAT,CAAhB;AACA,QAAMS,OAAO,GAAGzoQ,IAAI,CAACgU,GAAL,CAASi0P,GAAT,CAAhB;AACA,QAAMS,OAAO,GAAG1oQ,IAAI,CAAC+T,GAAL,CAASk0P,GAAT,CAAhB;AACA,QAAMU,OAAO,GAAG,OAAOV,GAAG,GAAGD,GAAb,CAAhB;AACA,QAAMY,SAAS,GAAG5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAO,GAAG,GAAnB,CAAlB;AACA,QAAMhrQ,CAAC,GAAG,IAAI,CAAJ,GAAQirQ,SAAR,GAAoBA,SAApB,GAAgC5oQ,IAAI,CAAC+T,GAAL,CAAS40P,OAAT,CAA1C;AACA,QAAMj8J,EAAE,GAAGwuI,EAAE,GAAGqtB,OAAL,GAAe5qQ,CAAC,GAAG6qQ,OAA9B;AACA,QAAM/7J,EAAE,GAAG0uI,EAAE,GAAGqtB,OAAL,GAAe7qQ,CAAC,GAAG4qQ,OAA9B;AACA,QAAM5uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAhB;AACA,QAAM7uB,EAAE,GAAGuB,EAAE,GAAGutB,OAAhB;AACA,QAAM3vL,EAAE,GAAG4gK,EAAE,GAAGh8O,CAAC,GAAG+qQ,OAApB;AACA,QAAM/7J,EAAE,GAAGitI,EAAE,GAAGj8O,CAAC,GAAG8qQ,OAApB;AACA,SAAOxB,WAAW,CAAC/oQ,GAAD,CAAX,GAAmB,CAACs9O,GAAG,GAAG9uI,EAAN,GAAW4uI,GAAG,GAAG7uI,EAAlB,EAAsBgvI,GAAG,GAAG/uI,EAAN,GAAW6uI,GAAG,GAAG9uI,EAAvC,EAA2C+uI,GAAG,GAAGziK,EAAN,GAAWuiK,GAAG,GAAG3uI,EAA5D,EAAgE8uI,GAAG,GAAG1iK,EAAN,GAAWwiK,GAAG,GAAG5uI,EAAjF,EAAqF6uI,GAAG,GAAG7B,EAAN,GAAW2B,GAAG,GAAG1B,EAAtG,EAA0G6B,GAAG,GAAG9B,EAAN,GAAW4B,GAAG,GAAG3B,EAA3H,CAA1B;AACD;;AAED,MAAM95O,IAAI,GAAG,CAAC,GAAD,EAAM,CAAN,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,CAAb;;AAEA,SAASgQ,KAAT,CAAei7J,OAAf,EAAwB89F,EAAxB,EAA4BC,EAA5B,EAAgC;AAC9B,QAAMpiQ,CAAC,GAAG5G,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAA3B;;AAEA,MAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AAC1B5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUirK,OAAO,CAAC,CAAD,CAAjB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACAjrK,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GARD,MAQO,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU+oQ,EAAE,GAAG99F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA,IAAIrkK,CAAC,KAAK,GAAN,IAAaA,CAAC,KAAK,GAAvB,EAA4B;AACjC5G,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUgpQ,EAAE,GAAG/9F,OAAO,CAAC,CAAD,CAAtB;AACD,GAFM,MAEA;AACL,SAAK,IAAI9wK,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAG4iK,OAAO,CAACxxK,MAA5B,EAAoCU,CAAC,GAAGkO,CAAxC,EAA2C,EAAElO,CAA7C,EAAgD;AAC9C6F,MAAAA,IAAI,CAAC7F,CAAD,CAAJ,GAAU,CAACA,CAAC,GAAG,CAAJ,IAAS,CAAT,GAAa4uQ,EAAb,GAAkBC,EAAnB,IAAyB/9F,OAAO,CAAC9wK,CAAD,CAA1C;AACD;AACF;;AAED,SAAO6F,IAAP;AACD;;AAED,SAASipQ,UAAT,CAAqB98F,OAArB,EAA8B3jK,IAA9B,EAAoCyD,CAApC,EAAuCpO,CAAvC,EAA0CkrQ,EAA1C,EAA8CC,EAA9C,EAAkD;AAChD,MAAI/9F,OAAJ;AAAA,MACI;AACJ+2C,EAAAA,QAAQ,GAAG,IAFX;AAAA,MAGI1hN,CAAC,GAAG,CAHR;AAAA,MAII;AACJue,EAAAA,CAAC,GAAG,CALJ;AAAA,MAMI;AACJqqP,EAAAA,QAAQ,GAAG,CAPX;AAAA,MAQI;AACJC,EAAAA,QAAQ,GAAG,CATX;AAAA,MAUI;AACJC,EAAAA,KAXA;AAAA,MAYIC,KAZJ;AAAA,MAaIC,YAbJ;AAAA,MAcIC,YAdJ;AAeA,MAAIt9P,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIpO,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;AACf,MAAIkrQ,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAG,CAAL;AAChB,MAAIC,EAAE,IAAI,IAAV,EAAgBA,EAAE,GAAGD,EAAL;AAChB,MAAI58F,OAAO,CAACq9F,SAAZ,EAAuBr9F,OAAO,CAACq9F,SAAR;;AAEvB,OAAK,IAAIrvQ,CAAC,GAAG,CAAR,EAAWN,GAAG,GAAG2O,IAAI,CAAC/O,MAA3B,EAAmCU,CAAC,GAAGN,GAAvC,EAA4C,EAAEM,CAA9C,EAAiD;AAC/C8wK,IAAAA,OAAO,GAAGziK,IAAI,CAACrO,CAAD,CAAd;;AAEA,QAAI4uQ,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB/9F,MAAAA,OAAO,GAAGj7J,KAAK,CAACi7J,OAAD,EAAU89F,EAAV,EAAcC,EAAd,CAAf;AACD;;AAED,YAAQ/9F,OAAO,CAAC,CAAD,CAAf;AACE;AACA,WAAK,GAAL;AACE;AACA3qK,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAghB,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAghB,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAAC0rE,MAAR,CAAev3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAkB,QAAAA,OAAO,CAACwrE,MAAR,CAAer3O,CAAC,GAAG2L,CAAnB,EAAsB4S,CAAC,GAAGhhB,CAA1B;AACA;;AAEF,WAAK,GAAL;AACE;AACAurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AACAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBz3O,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CAAvC,EAA0C;AAC1C4S,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CADjB,EACoB;AACpBqrQ,QAAAA,QAAQ,GAAGj9P,CAFX,EAEc;AACdk9P,QAAAA,QAAQ,GAAGtrQ,CAHX,EAGc;AACdurQ,QAAAA,KAAK,GAAGn9P,CAJR,EAIWo9P,KAAK,GAAGxrQ,CAJnB;AAKAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACA/oQ,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACAi+F,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACAkB,QAAAA,OAAO,CAAC4rE,aAAR,CAAsB9sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAAnC,EAAsCg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAAnD,EAAsDqrQ,QAAQ,GAAGj9P,CAAjE,EAAoEk9P,QAAQ,GAAGtrQ,CAA/E,EAAkFyC,CAAC,GAAG2L,CAAtF,EAAyF4S,CAAC,GAAGhhB,CAA7F;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAurQ,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB,CAJF,CAI0B;;AAExBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBmxB,QAAQ,GAAGj9P,CAAjC,EAAoCk9P,QAAQ,GAAGtrQ,CAA/C,EAAkDyC,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX,GAAiBh/J,CAAnE,EAAsE4S,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX,GAAiBptK,CAAvF,EAA0FurQ,KAAK,GAAGn9P,CAAlG,EAAqGo9P,KAAK,GAAGxrQ,CAA7G,EARF,CAQmH;AACjH;AACA;AACA;;AAEAqrQ,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACA3qK,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACAD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAHF,CAGsB;;AAEpBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC4rE,aAAR,CAAsBmxB,QAAQ,GAAGj9P,CAAjC,EAAoCk9P,QAAQ,GAAGtrQ,CAA/C,EAAkDotK,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAA/D,EAAkEg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAA/E,EAAkFurQ,KAAK,GAAGn9P,CAA1F,EAA6Fo9P,KAAK,GAAGxrQ,CAArG;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ,CATF,CASa;AACX;AACA;AACA;;AAEAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;AACAi+F,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACE;AACAD,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf;AACAkB,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyB7sE,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAAtC,EAAyCg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAAtD,EAAyDurQ,KAAK,GAAGn9P,CAAjE,EAAoEo9P,KAAK,GAAGxrQ,CAA5E;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAGj+F,OAAO,CAAC,CAAD,CAAlB;AACAk+F,QAAAA,QAAQ,GAAGl+F,OAAO,CAAC,CAAD,CAAlB;AACA;;AAEF,WAAK,GAAL;AACE;AACA;AACAm+F,QAAAA,KAAK,GAAG9oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAnB;AACAo+F,QAAAA,KAAK,GAAGxqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAnB;;AAEA,YAAI+2C,QAAQ,CAAC,CAAD,CAAR,CAAYz8F,KAAZ,CAAkB,QAAlB,MAAgC,IAApC,EAA0C;AACxC;AACA;AACA2jJ,UAAAA,QAAQ,GAAG5oQ,CAAX;AACA6oQ,UAAAA,QAAQ,GAAGtqP,CAAX;AACD,SALD,MAKO,IAAImjM,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC9B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQgpQ,YAAnB;AACAH,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQ0qP,YAAnB;AACD,SAJM,MAIA,IAAIvnD,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAApB,EAAyB;AAC9B;AACAknD,UAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,UAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACD;;AAEDG,QAAAA,YAAY,GAAGJ,QAAf;AACAK,QAAAA,YAAY,GAAGJ,QAAf;AACAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACAH,QAAAA,QAAQ,GAAG5oQ,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAtB;AACAk+F,QAAAA,QAAQ,GAAGtqP,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAtB;AACA;;AAEF,WAAK,GAAL;AACEm+F,QAAAA,KAAK,GAAGn+F,OAAO,CAAC,CAAD,CAAf;AACAo+F,QAAAA,KAAK,GAAGp+F,OAAO,CAAC,CAAD,CAAf,CAFF,CAEsB;;AAEpBi+F,QAAAA,QAAQ,GAAG,IAAI5oQ,CAAJ,GAAQ4oQ,QAAnB;AACAC,QAAAA,QAAQ,GAAG,IAAItqP,CAAJ,GAAQsqP,QAAnB;AACAh9F,QAAAA,OAAO,CAAC2rE,gBAAR,CAAyBoxB,QAAQ,GAAGj9P,CAApC,EAAuCk9P,QAAQ,GAAGtrQ,CAAlD,EAAqDurQ,KAAK,GAAGn9P,CAA7D,EAAgEo9P,KAAK,GAAGxrQ,CAAxE;AACAyC,QAAAA,CAAC,GAAG8oQ,KAAJ;AACAvqP,QAAAA,CAAC,GAAGwqP,KAAJ;AACA;;AAEF,WAAK,GAAL;AACEI,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAACotK,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,EAAiDA,OAAO,CAAC,CAAD,CAAxD,EAA6DA,OAAO,CAAC,CAAD,CAAP,GAAa3qK,CAAb,GAAiB2L,CAA9E,EAAiFg/J,OAAO,CAAC,CAAD,CAAP,GAAapsJ,CAAb,GAAiBhhB,CAAlG,CAAxB,CAAP;AACAyC,QAAAA,CAAC,IAAI2qK,OAAO,CAAC,CAAD,CAAZ;AACApsJ,QAAAA,CAAC,IAAIosJ,OAAO,CAAC,CAAD,CAAZ;AACA;;AAEF,WAAK,GAAL;AACEw+F,QAAAA,OAAO,CAACt9F,OAAD,EAAU7rK,CAAC,GAAG2L,CAAd,EAAiB4S,CAAC,GAAGhhB,CAArB,EAAwB,CAACotK,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,EAAiDA,OAAO,CAAC,CAAD,CAAxD,EAA6DA,OAAO,CAAC,CAAD,CAAP,GAAah/J,CAA1E,EAA6Eg/J,OAAO,CAAC,CAAD,CAAP,GAAaptK,CAA1F,CAAxB,CAAP;AACAyC,QAAAA,CAAC,GAAG2qK,OAAO,CAAC,CAAD,CAAX;AACApsJ,QAAAA,CAAC,GAAGosJ,OAAO,CAAC,CAAD,CAAX;AACA;;AAEF,WAAK,GAAL;AACA,WAAK,GAAL;AACEkB,QAAAA,OAAO,CAACyrE,SAAR;AACA;AAlMJ;;AAqMA51B,IAAAA,QAAQ,GAAG/2C,OAAX;AACD;AACF;;AAED,SAASw+F,OAAT,CAAiBt9F,OAAjB,EAA0B7rK,CAA1B,EAA6Bue,CAA7B,EAAgCs3B,MAAhC,EAAwC;AACtC,QAAMuzN,GAAG,GAAGtC,QAAQ,CAACjxN,MAAM,CAAC,CAAD,CAAP,EAAY;AAChCA,EAAAA,MAAM,CAAC,CAAD,CADc,EACT;AACXA,EAAAA,MAAM,CAAC,CAAD,CAFc,EAET;AACXA,EAAAA,MAAM,CAAC,CAAD,CAHc,EAGT;AACXA,EAAAA,MAAM,CAAC,CAAD,CAJc,EAIT;AACXA,EAAAA,MAAM,CAAC,CAAD,CALc,EAKT;AACXA,EAAAA,MAAM,CAAC,CAAD,CANc,EAMT;AACX71C,EAAAA,CAPoB,EAOjBue,CAPiB,CAApB;;AASA,OAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuvQ,GAAG,CAACjwQ,MAAxB,EAAgC,EAAEU,CAAlC,EAAqC;AACnC,UAAMwvQ,GAAG,GAAGnB,MAAM,CAACkB,GAAG,CAACvvQ,CAAD,CAAJ,CAAlB;AACAgyK,IAAAA,OAAO,CAAC4rE,aAAR,CAAsB4xB,GAAG,CAAC,CAAD,CAAzB,EAA8BA,GAAG,CAAC,CAAD,CAAjC,EAAsCA,GAAG,CAAC,CAAD,CAAzC,EAA8CA,GAAG,CAAC,CAAD,CAAjD,EAAsDA,GAAG,CAAC,CAAD,CAAzD,EAA8DA,GAAG,CAAC,CAAD,CAAjE;AACD;AACF;;AAED,MAAMC,KAAK,GAAG,kBAAd;AACA,MAAMC,QAAQ,GAAG;AACf,YAAU;AACRxqB,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAexvO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC+uC,GAAR,CAAY,CAAZ,EAAe,CAAf,EAAkB/yM,CAAlB,EAAqB,CAArB,EAAwB6+P,GAAxB;AACD;AALO,GADK;AAQf,WAAS;AACP3nB,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,GADZ;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAACxK,CAApB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBA,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBxK,CAAlB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACxK,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACA,CAAnB;AACAwuK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAACwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACwK,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAACA,CAApB;AACAwuK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAjBM,GARM;AA2Bf,aAAW;AACTyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB1vO,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARQ,GA3BI;AAqCf,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAI6kD,CAAC,GAAGvmD,IAAI,CAACqC,IAAL,CAAUX,IAAV,CAAR;AAAA,UACItB,CAAC,GAAG,CAACmmD,CAAD,GAAK,CADb;AAEA0lH,MAAAA,OAAO,CAAC6sE,IAAR,CAAa14O,CAAb,EAAgBA,CAAhB,EAAmBmmD,CAAnB,EAAsBA,CAAtB;AACD;AALO,GArCK;AA4Cf,WAAS;AACP44L,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACIjE,CAAC,GAAGwK,CAAC,GAAG,CADZ;AAAA,UAEItK,CAAC,GAAGsK,CAAC,GAAG,GAFZ;AAAA,UAGIkE,CAAC,GAAGlE,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACh6O,CAAhB,EAAmBwK,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkBwK,CAAlB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAel6O,CAAf,EAAkB,CAAC0O,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAeh6O,CAAf,EAAkB,CAACwO,CAAnB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAf,EAAkB,CAAC1vO,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACh6O,CAAhB,EAAmB,CAACwO,CAApB;AACA8/J,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACl6O,CAAhB,EAAmB,CAAC0O,CAApB;AACA8/J,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAdM,GA5CM;AA4Df,WAAS;AACPyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAAA,UAEI2d,CAAC,GAAG4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFhB;AAAA,UAGI1hQ,CAAC,GAAGC,CAAC,GAAG,CAHZ;AAIAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC3vO,CAAhB,EAAmBw+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe3vO,CAAf,EAAkBw+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AAVM,GA5DM;AAwEf,cAAY;AACVyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAAA,UAEI2d,CAAC,GAAG4gC,CAAC,GAAGv+C,CAAC,GAAGyhQ,KAFhB;AAGAz9F,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAD,GAAK5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAC,GAAG5gC,CAAvB;AACAqmJ,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAC,GAAG5gC,CAAtB;AACAqmJ,MAAAA,OAAO,CAACyrE,SAAR;AACD;AATS,GAxEG;AAmFf,iBAAe;AACbyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkB,CAACjxL,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmBu+C,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkBu+C,CAAlB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARY,GAnFA;AA6Ff,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAAf,EAAkBjxL,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAAC1vO,CAAhB,EAAmB,CAACu+C,CAApB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAACu+C,CAAnB;AACAylH,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GA7FF;AAuGf,oBAAkB;AAChByH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAejxL,CAAf,EAAkB,CAAlB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmB,CAACv+C,CAApB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe,CAACnxL,CAAhB,EAAmBv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARe,GAvGH;AAiHf,mBAAiB;AACfyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,UAAIuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1B;AAAA,UACI8kD,CAAC,GAAGugN,SAAS,GAAG9+P,CADpB;AAEAgkK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACjxL,CAAhB,EAAmB,CAAnB;AACAylH,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkB,CAACv+C,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAenxL,CAAf,EAAkBv+C,CAAlB;AACAgkK,MAAAA,OAAO,CAACyrE,SAAR;AACD;AARc,GAjHF;AA2Hf,YAAU;AACRyH,IAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7B,YAAMuG,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA5B;AACAuqK,MAAAA,OAAO,CAACwrE,MAAR,CAAe,CAACxvO,CAAhB,EAAmB,CAAnB;AACAgkK,MAAAA,OAAO,CAAC0rE,MAAR,CAAe1vO,CAAf,EAAkB,CAAlB;AACD;AALO;AA3HK,CAAjB;;AAmIA,SAASw3O,OAAT,CAAiB7+N,CAAjB,EAAoB;AAClB,SAAO,8BAAe+oP,QAAf,EAAyB/oP,CAAzB,IAA8B+oP,QAAQ,CAAC/oP,CAAD,CAAtC,GAA4CgpP,YAAY,CAAChpP,CAAD,CAA/D;AACD;;AACD,IAAIigO,MAAM,GAAG,EAAb;;AAEA,SAAS+oB,YAAT,CAAsBthQ,IAAtB,EAA4B;AAC1B,MAAI,CAAC,8BAAeu4O,MAAf,EAAuBv4O,IAAvB,CAAL,EAAmC;AACjC,UAAMq9L,MAAM,GAAG6gE,SAAS,CAACl+P,IAAD,CAAxB;AACAu4O,IAAAA,MAAM,CAACv4O,IAAD,CAAN,GAAe;AACb62O,MAAAA,IAAI,EAAE,UAAUlzE,OAAV,EAAmBvqK,IAAnB,EAAyB;AAC7BqnQ,QAAAA,UAAU,CAAC98F,OAAD,EAAU05B,MAAV,EAAkB,CAAlB,EAAqB,CAArB,EAAwB3lM,IAAI,CAACqC,IAAL,CAAUX,IAAV,IAAkB,CAA1C,CAAV;AACD;AAHY,KAAf;AAKD;;AAED,SAAOm/O,MAAM,CAACv4O,IAAD,CAAb;AACD;;AAED,MAAMgqP,CAAC,GAAG,cAAV,EAA0B;;AAE1B,SAASuX,UAAT,CAAoB/iQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC1G,CAAT;AACD;;AAED,SAAS0pQ,UAAT,CAAoBhjQ,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAC6X,CAAT;AACD;;AAED,SAASorP,cAAT,CAAwBjjQ,CAAxB,EAA2B;AACzB,SAAOA,CAAC,CAAC3E,KAAT;AACD;;AAED,SAAS6nQ,eAAT,CAAyBljQ,CAAzB,EAA4B;AAC1B,SAAOA,CAAC,CAACopB,MAAT;AACD;;AAED,SAAS+lL,MAAT,CAAgBr1L,CAAhB,EAAmB;AACjB,SAAO,OAAOA,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B,MAAM,CAACA,CAA5C;AACD;;AAED,SAAS1gB,KAAT,CAAejD,KAAf,EAAsBkD,GAAtB,EAA2BE,GAA3B,EAAgC;AAC9B,SAAOL,IAAI,CAACK,GAAL,CAASF,GAAT,EAAcH,IAAI,CAACG,GAAL,CAASlD,KAAT,EAAgBoD,GAAhB,CAAd,CAAP;AACD;;AAED,SAAS4pQ,OAAT,GAAoB;AAClB,MAAI7pQ,CAAC,GAAGypQ,UAAR;AAAA,MACIlrP,CAAC,GAAGmrP,UADR;AAAA,MAEI3nQ,KAAK,GAAG4nQ,cAFZ;AAAA,MAGI75O,MAAM,GAAG85O,eAHb;AAAA,MAIIE,IAAI,GAAGj0D,MAAM,CAAC,CAAD,CAJjB;AAAA,MAKIk0D,IAAI,GAAGD,IALX;AAAA,MAMIE,IAAI,GAAGF,IANX;AAAA,MAOIG,IAAI,GAAGH,IAPX;AAAA,MAQIj+F,OAAO,GAAG,IARd;;AAUA,WAASq+F,SAAT,CAAmB1pP,CAAnB,EAAsB05L,EAAtB,EAA0BC,EAA1B,EAA8B;AAC5B,QAAIzsM,MAAJ;AAAA,QACI4+F,EAAE,GAAG4tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAACl6M,CAAC,CAACrH,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAD5B;AAAA,QAEI6rF,EAAE,GAAG8tG,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAC57L,CAAC,CAAC5lB,IAAF,CAAO,IAAP,EAAa6nB,CAAb,CAF5B;AAAA,QAGI2lC,CAAC,GAAG,CAACpkD,KAAK,CAACpJ,IAAN,CAAW,IAAX,EAAiB6nB,CAAjB,CAHT;AAAA,QAII4lC,CAAC,GAAG,CAACt2B,MAAM,CAACn3B,IAAP,CAAY,IAAZ,EAAkB6nB,CAAlB,CAJT;AAAA,QAKInjB,CAAC,GAAGuC,IAAI,CAACG,GAAL,CAASomD,CAAT,EAAYC,CAAZ,IAAiB,CALzB;AAAA,QAMI+jN,EAAE,GAAGrqQ,KAAK,CAAC,CAACgqQ,IAAI,CAACnxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CANd;AAAA,QAOI+sQ,EAAE,GAAGtqQ,KAAK,CAAC,CAACiqQ,IAAI,CAACpxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CAPd;AAAA,QAQIo1P,EAAE,GAAG3yP,KAAK,CAAC,CAACkqQ,IAAI,CAACrxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CARd;AAAA,QASIgtQ,EAAE,GAAGvqQ,KAAK,CAAC,CAACmqQ,IAAI,CAACtxQ,IAAL,CAAU,IAAV,EAAgB6nB,CAAhB,CAAF,EAAsB,CAAtB,EAAyBnjB,CAAzB,CATd;AAUA,QAAI,CAACwuK,OAAL,EAAcA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAEd,QAAIy8P,EAAE,IAAI,CAAN,IAAWC,EAAE,IAAI,CAAjB,IAAsB3X,EAAE,IAAI,CAA5B,IAAiC4X,EAAE,IAAI,CAA3C,EAA8C;AAC5Cx+F,MAAAA,OAAO,CAAC6sE,IAAR,CAAapsI,EAAb,EAAiBD,EAAjB,EAAqBlmD,CAArB,EAAwBC,CAAxB;AACD,KAFD,MAEO;AACL,UAAIuyB,EAAE,GAAG2zB,EAAE,GAAGnmD,CAAd;AAAA,UACIomD,EAAE,GAAGF,EAAE,GAAGjmD,CADd;AAEAylH,MAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAG69J,EAApB,EAAwB99J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAGyxL,EAApB,EAAwB/9J,EAAxB;AACAw/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAE,GAAGu5K,CAAC,GAAGkY,EAA/B,EAAmC/9J,EAAnC,EAAuC1zB,EAAvC,EAA2C0zB,EAAE,GAAG6lJ,CAAC,GAAGkY,EAApD,EAAwDzxL,EAAxD,EAA4D0zB,EAAE,GAAG+9J,EAAjE;AACAv+F,MAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAE,GAAG89J,EAAxB;AACAx+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsB9+J,EAAtB,EAA0B4zB,EAAE,GAAG2lJ,CAAC,GAAGmY,EAAnC,EAAuC1xL,EAAE,GAAGu5K,CAAC,GAAGmY,EAAhD,EAAoD99J,EAApD,EAAwD5zB,EAAE,GAAG0xL,EAA7D,EAAiE99J,EAAjE;AACAs/D,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGmmJ,EAApB,EAAwBlmJ,EAAxB;AACAs/D,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAE,GAAG4lJ,CAAC,GAAGO,EAA/B,EAAmClmJ,EAAnC,EAAuCD,EAAvC,EAA2CC,EAAE,GAAG2lJ,CAAC,GAAGO,EAApD,EAAwDnmJ,EAAxD,EAA4DC,EAAE,GAAGkmJ,EAAjE;AACA5mF,MAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAf,EAAmBD,EAAE,GAAG89J,EAAxB;AACAt+F,MAAAA,OAAO,CAAC4rE,aAAR,CAAsBnrI,EAAtB,EAA0BD,EAAE,GAAG6lJ,CAAC,GAAGiY,EAAnC,EAAuC79J,EAAE,GAAG4lJ,CAAC,GAAGiY,EAAhD,EAAoD99J,EAApD,EAAwDC,EAAE,GAAG69J,EAA7D,EAAiE99J,EAAjE;AACAw/D,MAAAA,OAAO,CAACyrE,SAAR;AACD;;AAED,QAAI5pO,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAEDw8P,EAAAA,SAAS,CAAClqQ,CAAV,GAAc,UAAUwgB,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAG61M,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOlqQ,CAAP;AACD;AACF,GAPD;;AASAkqQ,EAAAA,SAAS,CAAC3rP,CAAV,GAAc,UAAUiC,CAAV,EAAa;AACzB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGs3L,MAAM,CAACr1L,CAAD,CAAV;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAO3rP,CAAP;AACD;AACF,GAPD;;AASA2rP,EAAAA,SAAS,CAACnoQ,KAAV,GAAkB,UAAUye,CAAV,EAAa;AAC7B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB4I,MAAAA,KAAK,GAAG8zM,MAAM,CAACr1L,CAAD,CAAd;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOnoQ,KAAP;AACD;AACF,GAPD;;AASAmoQ,EAAAA,SAAS,CAACp6O,MAAV,GAAmB,UAAUtP,CAAV,EAAa;AAC9B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB22B,MAAAA,MAAM,GAAG+lL,MAAM,CAACr1L,CAAD,CAAf;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOp6O,MAAP;AACD;AACF,GAPD;;AASAo6O,EAAAA,SAAS,CAAClvB,YAAV,GAAyB,UAAUmvB,EAAV,EAAcC,EAAd,EAAkBC,EAAlB,EAAsB5X,EAAtB,EAA0B;AACjD,QAAI74P,SAAS,CAACT,MAAd,EAAsB;AACpB2wQ,MAAAA,IAAI,GAAGj0D,MAAM,CAACs0D,EAAD,CAAb;AACAJ,MAAAA,IAAI,GAAGK,EAAE,IAAI,IAAN,GAAav0D,MAAM,CAACu0D,EAAD,CAAnB,GAA0BN,IAAjC;AACAG,MAAAA,IAAI,GAAGI,EAAE,IAAI,IAAN,GAAax0D,MAAM,CAACw0D,EAAD,CAAnB,GAA0BP,IAAjC;AACAE,MAAAA,IAAI,GAAGvX,EAAE,IAAI,IAAN,GAAa58C,MAAM,CAAC48C,EAAD,CAAnB,GAA0BsX,IAAjC;AACA,aAAOG,SAAP;AACD,KAND,MAMO;AACL,aAAOJ,IAAP;AACD;AACF,GAVD;;AAYAI,EAAAA,SAAS,CAACr+F,OAAV,GAAoB,UAAUrrJ,CAAV,EAAa;AAC/B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0yK,MAAAA,OAAO,GAAGrrJ,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAA7B;AACA,aAAO0pP,SAAP;AACD,KAHD,MAGO;AACL,aAAOr+F,OAAP;AACD;AACF,GAPD;;AASA,SAAOq+F,SAAP;AACD;;AAED,SAASI,QAAT,GAAqB;AACnB,MAAItqQ,CAAJ;AAAA,MACIue,CADJ;AAAA,MAEIjd,IAFJ;AAAA,MAGIugN,OAHJ;AAAA,MAIIh2C,OAAO,GAAG,IAJd;AAAA,MAKI/1I,KALJ;AAAA,MAMIw2E,EANJ;AAAA,MAOID,EAPJ;AAAA,MAQI4/F,EARJ;;AAUA,WAASmP,KAAT,CAAeziI,EAAf,EAAmB4zB,EAAnB,EAAuBg+J,EAAvB,EAA2B;AACzB,UAAMr+D,EAAE,GAAGq+D,EAAE,GAAG,CAAhB;;AAEA,QAAIz0O,KAAJ,EAAW;AACT,UAAI2vM,EAAE,GAAGp5H,EAAE,GAAGE,EAAd;AAAA,UACIm5H,EAAE,GAAG/sJ,EAAE,GAAG2zB,EADd;;AAGA,UAAIm5H,EAAE,IAAIC,EAAV,EAAc;AACZ;AACA,YAAI8kC,EAAE,GAAG5qQ,IAAI,CAACqC,IAAL,CAAUwjO,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAT;AAAA,YACIqhC,EAAE,GAAG,CAACthC,EAAE,IAAI+kC,EAAP,IAAav+D,EADtB;AAAA,YAEI+6D,EAAE,GAAG,CAACthC,EAAE,IAAI8kC,EAAP,IAAav+D,EAFtB;AAAA,YAGI1uM,CAAC,GAAGqC,IAAI,CAACuQ,KAAL,CAAWu1N,EAAX,EAAeD,EAAf,CAHR,CAFY,CAKgB;;AAE5B55D,QAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAE,GAAG8sJ,EAAE,GAAGv5B,EAAzB,EAA6B3/F,EAAE,GAAGm5H,EAAE,GAAGx5B,EAAvC;AACArgC,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB3uM,CAAC,GAAGqC,IAAI,CAACuiC,EAAjC,EAAqC5kC,CAArC;AACAsuK,QAAAA,OAAO,CAAC0rE,MAAR,CAAejrI,EAAE,GAAGy6J,EAApB,EAAwB16J,EAAE,GAAG26J,EAA7B;AACAn7F,QAAAA,OAAO,CAAC+uC,GAAR,CAAYtuG,EAAZ,EAAgBD,EAAhB,EAAoB4/F,EAApB,EAAwB1uM,CAAxB,EAA2BA,CAAC,GAAGqC,IAAI,CAACuiC,EAApC;AACD,OAZD,MAYO;AACL0pI,QAAAA,OAAO,CAAC+uC,GAAR,CAAYjiI,EAAZ,EAAgB4zB,EAAhB,EAAoB2/F,EAApB,EAAwB,CAAxB,EAA2Bw6D,GAA3B;AACD;;AAED76F,MAAAA,OAAO,CAACyrE,SAAR;AACD,KArBD,MAqBO;AACLxhN,MAAAA,KAAK,GAAG,CAAR;AACD;;AAEDw2E,IAAAA,EAAE,GAAG3zB,EAAL;AACA0zB,IAAAA,EAAE,GAAGE,EAAL;AACA0/F,IAAAA,EAAE,GAAGC,EAAL;AACD;;AAED,WAASu+D,KAAT,CAAe5hQ,IAAf,EAAqB;AACnB,QAAIhP,CAAJ;AAAA,QACIkO,CAAC,GAAGc,IAAI,CAAC1P,MADb;AAAA,QAEIuN,CAFJ;AAAA,QAGIo2O,QAAQ,GAAG,KAHf;AAAA,QAIIpvO,MAJJ;AAKA,QAAIm+J,OAAO,IAAI,IAAf,EAAqBA,OAAO,GAAGn+J,MAAM,GAAG,mBAAnB;;AAErB,SAAK7T,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIkO,CAAjB,EAAoB,EAAElO,CAAtB,EAAyB;AACvB,UAAI,EAAEA,CAAC,GAAGkO,CAAJ,IAAS85M,OAAO,CAACn7M,CAAC,GAAGmC,IAAI,CAAChP,CAAD,CAAT,EAAcA,CAAd,EAAiBgP,IAAjB,CAAlB,MAA8Ci0O,QAAlD,EAA4D;AAC1D,YAAIA,QAAQ,GAAG,CAACA,QAAhB,EAA0BhnN,KAAK,GAAG,CAAR;AAC3B;;AAED,UAAIgnN,QAAJ,EAAc1hC,KAAK,CAAC,CAACp7M,CAAC,CAAC0G,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAH,EAAiB,CAAC0V,CAAC,CAAC7X,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAnB,EAAiC,CAACvH,IAAI,CAACoF,CAAD,EAAI7M,CAAJ,EAAOgP,IAAP,CAAtC,CAAL;AACf;;AAED,QAAI6E,MAAJ,EAAY;AACVm+J,MAAAA,OAAO,GAAG,IAAV;AACA,aAAOn+J,MAAM,GAAG,EAAT,IAAe,IAAtB;AACD;AACF;;AAED+8P,EAAAA,KAAK,CAACzqQ,CAAN,GAAU,UAAUwgB,CAAV,EAAa;AACrB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB6G,MAAAA,CAAC,GAAGwgB,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOzqQ,CAAP;AACD;AACF,GAPD;;AASAyqQ,EAAAA,KAAK,CAAClsP,CAAN,GAAU,UAAUiC,CAAV,EAAa;AACrB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBolB,MAAAA,CAAC,GAAGiC,CAAJ;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOlsP,CAAP;AACD;AACF,GAPD;;AASAksP,EAAAA,KAAK,CAACnpQ,IAAN,GAAa,UAAUkf,CAAV,EAAa;AACxB,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBmI,MAAAA,IAAI,GAAGkf,CAAP;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAOnpQ,IAAP;AACD;AACF,GAPD;;AASAmpQ,EAAAA,KAAK,CAAC5oD,OAAN,GAAgB,UAAUrhM,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB0oN,MAAAA,OAAO,GAAGrhM,CAAV;AACA,aAAOiqP,KAAP;AACD,KAHD,MAGO;AACL,aAAO5oD,OAAP;AACD;AACF,GAPD;;AASA4oD,EAAAA,KAAK,CAAC5+F,OAAN,GAAgB,UAAUrrJ,CAAV,EAAa;AAC3B,QAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpB,UAAIqnB,CAAC,IAAI,IAAT,EAAe;AACbqrJ,QAAAA,OAAO,GAAG,IAAV;AACD,OAFD,MAEO;AACLA,QAAAA,OAAO,GAAGrrJ,CAAV;AACD;;AAED,aAAOiqP,KAAP;AACD,KARD,MAQO;AACL,aAAO5+F,OAAP;AACD;AACF,GAZD;;AAcA,SAAO4+F,KAAP;AACD;;AAED,SAAS5tQ,KAAT,CAAekE,CAAf,EAAkB6G,CAAlB,EAAqB;AACnB,SAAO7G,CAAC,IAAI,IAAL,GAAYA,CAAZ,GAAgB6G,CAAvB;AACD;;AAED,MAAM5H,CAAC,GAAGyhB,IAAI,IAAIA,IAAI,CAACzhB,CAAL,IAAU,CAA5B;AAAA,MACMue,CAAC,GAAGkD,IAAI,IAAIA,IAAI,CAAClD,CAAL,IAAU,CAD5B;AAAA,MAEM4nC,CAAC,GAAG1kC,IAAI,IAAIA,IAAI,CAAC1f,KAAL,IAAc,CAFhC;AAAA,MAGMqkD,CAAC,GAAG3kC,IAAI,IAAIA,IAAI,CAACqO,MAAL,IAAe,CAHjC;AAAA,MAIM46O,EAAE,GAAGjpP,IAAI,IAAI,CAACA,IAAI,CAACzhB,CAAL,IAAU,CAAX,KAAiByhB,IAAI,CAAC1f,KAAL,IAAc,CAA/B,CAJnB;AAAA,MAKM4oQ,EAAE,GAAGlpP,IAAI,IAAI,CAACA,IAAI,CAAClD,CAAL,IAAU,CAAX,KAAiBkD,IAAI,CAACqO,MAAL,IAAe,CAAhC,CALnB;AAAA,MAMM86O,EAAE,GAAGnpP,IAAI,IAAIA,IAAI,CAACw3N,UAAL,IAAmB,CANtC;AAAA,MAOM4xB,EAAE,GAAGppP,IAAI,IAAIA,IAAI,CAAC03N,QAAL,IAAiB,CAPpC;AAAA,MAQMsE,EAAE,GAAGh8N,IAAI,IAAIA,IAAI,CAAC43N,QAAL,IAAiB,CARpC;AAAA,MASMyxB,EAAE,GAAGrpP,IAAI,IAAIA,IAAI,CAACo3N,WAAL,IAAoB,CATvC;AAAA,MAUMkyB,EAAE,GAAGtpP,IAAI,IAAIA,IAAI,CAACs3N,WAAL,IAAoB,CAVvC;AAAA,MAWMiyB,EAAE,GAAGvpP,IAAI,IAAIA,IAAI,CAACu5N,YAAL,IAAqB,CAXxC;AAAA,MAYMmvB,EAAE,GAAG1oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACwpP,mBAAN,EAA2BxpP,IAAI,CAACu5N,YAAhC,CAAL,IAAsD,CAZzE;AAAA,MAaMovB,EAAE,GAAG3oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACypP,oBAAN,EAA4BzpP,IAAI,CAACu5N,YAAjC,CAAL,IAAuD,CAb1E;AAAA,MAcMqvB,EAAE,GAAG5oP,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC0pP,uBAAN,EAA+B1pP,IAAI,CAACu5N,YAApC,CAAL,IAA0D,CAd7E;AAAA,MAeMyX,EAAE,GAAGhxO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAAC2pP,sBAAN,EAA8B3pP,IAAI,CAACu5N,YAAnC,CAAL,IAAyD,CAf5E;AAAA,MAgBMsI,EAAE,GAAG7hO,IAAI,IAAI5kB,KAAK,CAAC4kB,IAAI,CAACngB,IAAN,EAAY,EAAZ,CAhBxB;AAAA,MAiBM+pQ,EAAE,GAAG5pP,IAAI,IAAIA,IAAI,CAACngB,IAAL,IAAa,CAjBhC;AAAA,MAkBMuuK,GAAG,GAAGpuJ,IAAI,IAAI,EAAEA,IAAI,CAACogM,OAAL,KAAiB,KAAnB,CAlBpB;AAAA,MAmBM/nM,IAAI,GAAG2H,IAAI,IAAI49N,OAAO,CAAC59N,IAAI,CAACpgB,KAAL,IAAc,QAAf,CAnB5B;;AAqBA,MAAMiqQ,QAAQ,GAAG,oBAAQryB,UAAR,CAAmB2xB,EAAnB,EAAuBzxB,QAAvB,CAAgC0xB,EAAhC,EAAoCxxB,QAApC,CAA6CoE,EAA7C,EAAiD5E,WAAjD,CAA6DiyB,EAA7D,EAAiE/xB,WAAjE,CAA6EgyB,EAA7E,EAAiF/vB,YAAjF,CAA8FgwB,EAA9F,CAAjB;AAAA,MACMO,UAAU,GAAG,qBAASvrQ,CAAT,CAAWA,CAAX,EAAcqsG,EAAd,CAAiB9tF,CAAjB,EAAoB47L,EAApB,CAAuBwwD,EAAvB,EAA2B9oD,OAA3B,CAAmChyC,GAAnC,CADnB;AAAA,MAEM27F,UAAU,GAAG,qBAASjtP,CAAT,CAAWA,CAAX,EAAc+tF,EAAd,CAAiBtsG,CAAjB,EAAoBk6M,EAApB,CAAuBwwD,EAAvB,EAA2B7oD,OAA3B,CAAmChyC,GAAnC,CAFnB;AAAA,MAGM47F,SAAS,GAAG,qBAASzrQ,CAAT,CAAWA,CAAX,EAAcue,CAAd,CAAgBA,CAAhB,EAAmBsjM,OAAnB,CAA2BhyC,GAA3B,CAHlB;AAAA,MAIM67F,SAAS,GAAG7B,OAAO,GAAG7pQ,CAAV,CAAYA,CAAZ,EAAeue,CAAf,CAAiBA,CAAjB,EAAoBxc,KAApB,CAA0BokD,CAA1B,EAA6Br2B,MAA7B,CAAoCs2B,CAApC,EAAuC40L,YAAvC,CAAoDmvB,EAApD,EAAwDC,EAAxD,EAA4DC,EAA5D,EAAgE5X,EAAhE,CAJlB;AAAA,MAKMkZ,WAAW,GAAG,uBAAW7xP,IAAX,CAAgBA,IAAhB,EAAsBxY,IAAtB,CAA2BgiP,EAA3B,CALpB;AAAA,MAMMsoB,UAAU,GAAGtB,QAAQ,GAAGtqQ,CAAX,CAAaA,CAAb,EAAgBue,CAAhB,CAAkBA,CAAlB,EAAqBsjM,OAArB,CAA6BhyC,GAA7B,EAAkCvuK,IAAlC,CAAuC+pQ,EAAvC,CANnB;;AAOA,SAASQ,eAAT,CAAyBpqP,IAAzB,EAA+B;AAC7B,SAAOA,IAAI,CAACu5N,YAAL,IAAqBv5N,IAAI,CAACwpP,mBAA1B,IAAiDxpP,IAAI,CAACypP,oBAAtD,IAA8EzpP,IAAI,CAAC0pP,uBAAnF,IAA8G1pP,IAAI,CAAC2pP,sBAA1H;AACD;;AACD,SAASxwD,GAAT,CAAa/uC,OAAb,EAAsBpqJ,IAAtB,EAA4B;AAC1B,SAAO6pP,QAAQ,CAACz/F,OAAT,CAAiBA,OAAjB,EAA0BpqJ,IAA1B,CAAP;AACD;;AACD,SAASk7L,IAAT,CAAc9wC,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B,QAAMtzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAlB;AAAA,QACMwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADnC;AAEA,SAAO,CAACv1O,IAAI,CAACqqP,MAAL,KAAgB,YAAhB,GAA+BN,UAA/B,GAA4CD,UAA7C,EAAyD7uB,KAAzD,CAA+DupB,MAAM,CAAC1H,MAAD,EAAS98O,IAAI,CAACqqP,MAAd,EAAsBrqP,IAAI,CAACm/N,OAA3B,CAArE,EAA0G/0E,OAA1G,CAAkHA,OAAlH,EAA2H92D,KAA3H,CAAP;AACD;;AACD,SAAS3mF,IAAT,CAAcy9I,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B,QAAMtzF,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAlB;AAAA,QACMwpJ,MAAM,GAAG98O,IAAI,CAACu1O,WAAL,IAAoB,QADnC;AAEA,SAAOyU,SAAS,CAAC/uB,KAAV,CAAgBupB,MAAM,CAAC1H,MAAD,EAAS98O,IAAI,CAACqqP,MAAd,EAAsBrqP,IAAI,CAACm/N,OAA3B,CAAtB,EAA2D/0E,OAA3D,CAAmEA,OAAnE,EAA4E92D,KAA5E,CAAP;AACD;;AACD,SAASm1J,SAAT,CAAmBr+F,OAAnB,EAA4BpqJ,IAA5B,EAAkCzhB,CAAlC,EAAqCue,CAArC,EAAwC;AACtC,SAAOmtP,SAAS,CAAC7/F,OAAV,CAAkBA,OAAlB,EAA2BpqJ,IAA3B,EAAiCzhB,CAAjC,EAAoCue,CAApC,CAAP;AACD;;AACD,SAASld,KAAT,CAAewqK,OAAf,EAAwBpqJ,IAAxB,EAA8B;AAC5B,SAAO,CAACA,IAAI,CAACsqP,IAAL,CAAU1qQ,KAAV,IAAmBogB,IAAI,CAACpgB,KAAzB,EAAgCwqK,OAAhC,CAAwCA,OAAxC,EAAiDpqJ,IAAjD,CAAP;AACD;;AACD,SAAS2hM,MAAT,CAAgBv3C,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7B,SAAOkqP,WAAW,CAAC9/F,OAAZ,CAAoBA,OAApB,EAA6BpqJ,IAA7B,CAAP;AACD;;AACD,SAASgpP,KAAT,CAAe5+F,OAAf,EAAwB92D,KAAxB,EAA+B;AAC7B,SAAO62J,UAAU,CAAC//F,OAAX,CAAmBA,OAAnB,EAA4B92D,KAA5B,CAAP;AACD;;AAED,IAAIi3J,OAAO,GAAG,CAAd;;AACA,SAASC,cAAT,GAA0B;AACxBD,EAAAA,OAAO,GAAG,CAAV;AACD;;AACD,SAASjqO,IAAT,CAAemqO,QAAf,EAAyBzqP,IAAzB,EAA+BngB,IAA/B,EAAqC;AACnC,MAAIygC,IAAI,GAAGtgB,IAAI,CAACsgB,IAAhB;AAAA,MACI2iO,IAAI,GAAGwH,QAAQ,CAACC,KADpB;AAAA,MAEIr/P,EAAE,GAAG2U,IAAI,CAACuqP,OAAL,KAAiBvqP,IAAI,CAACuqP,OAAL,GAAe,SAASA,OAAO,EAAhD,CAFT;AAAA,MAGI1lQ,CAAC,GAAGo+P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,MAAsB43P,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,IAAoB;AAChDA,IAAAA,EAAE,EAAEA;AAD4C,GAA1C,CAHR;;AAOA,MAAI,0BAAWi1B,IAAX,CAAJ,EAAsB;AACpBz7B,IAAAA,CAAC,CAAC4B,IAAF,GAAS65B,IAAI,CAAC,IAAD,CAAb;AACD,GAFD,MAEO,IAAI8pO,eAAe,CAACvqQ,IAAD,CAAnB,EAA2B;AAChCgF,IAAAA,CAAC,CAAC4B,IAAF,GAASgiQ,SAAS,CAAC,IAAD,EAAO5oQ,IAAP,EAAa,CAAb,EAAgB,CAAhB,CAAlB;AACD,GAFM,MAEA;AACLgF,IAAAA,CAAC,CAACvE,KAAF,GAAUT,IAAI,CAACS,KAAL,IAAc,CAAxB;AACAuE,IAAAA,CAAC,CAACwpB,MAAF,GAAWxuB,IAAI,CAACwuB,MAAL,IAAe,CAA1B;AACD;;AAED,SAAO,UAAUhjB,EAAV,GAAe,GAAtB;AACD;;AAED,SAASu/P,MAAT,CAAgBzkQ,CAAhB,EAAmB;AACjB,OAAK0pM,KAAL;AACA,MAAI1pM,CAAJ,EAAO,KAAK66M,KAAL,CAAW76M,CAAX;AACR;;AACDykQ,MAAM,CAACpyQ,SAAP,GAAmB;AACjBwU,EAAAA,KAAK,GAAG;AACN,WAAO,IAAI49P,MAAJ,CAAW,IAAX,CAAP;AACD,GAHgB;;AAKjB/6D,EAAAA,KAAK,GAAG;AACN,SAAKhlG,EAAL,GAAU,CAACrlG,MAAM,CAAC+/H,SAAlB;AACA,SAAK36B,EAAL,GAAU,CAACplG,MAAM,CAAC+/H,SAAlB;AACA,SAAKruD,EAAL,GAAU,CAAC1xE,MAAM,CAAC+/H,SAAlB;AACA,SAAKz6B,EAAL,GAAU,CAACtlG,MAAM,CAAC+/H,SAAlB;AACA,WAAO,IAAP;AACD,GAXgB;;AAajBgnE,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK1hG,EAAL,KAAY,CAACrlG,MAAM,CAAC+/H,SAApB,IAAiC,KAAK36B,EAAL,KAAY,CAACplG,MAAM,CAAC+/H,SAArD,IAAkE,KAAKruD,EAAL,KAAY,CAAC1xE,MAAM,CAAC+/H,SAAtF,IAAmG,KAAKz6B,EAAL,KAAY,CAACtlG,MAAM,CAAC+/H,SAA9H;AACD,GAfgB;;AAiBjBslI,EAAAA,MAAM,CAAC1kQ,CAAD,EAAI;AACR,WAAO,KAAK0kG,EAAL,KAAY1kG,CAAC,CAAC0kG,EAAd,IAAoB,KAAKD,EAAL,KAAYzkG,CAAC,CAACykG,EAAlC,IAAwC,KAAK1zB,EAAL,KAAY/wE,CAAC,CAAC+wE,EAAtD,IAA4D,KAAK4zB,EAAL,KAAY3kG,CAAC,CAAC2kG,EAAjF;AACD,GAnBgB;;AAqBjB/vG,EAAAA,GAAG,CAAC8vG,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiB;AAClB,QAAI5zB,EAAE,GAAG2zB,EAAT,EAAa;AACX,WAAK3zB,EAAL,GAAU2zB,EAAV;AACA,WAAKA,EAAL,GAAU3zB,EAAV;AACD,KAHD,MAGO;AACL,WAAK2zB,EAAL,GAAUA,EAAV;AACA,WAAK3zB,EAAL,GAAUA,EAAV;AACD;;AAED,QAAI4zB,EAAE,GAAGF,EAAT,EAAa;AACX,WAAKE,EAAL,GAAUF,EAAV;AACA,WAAKA,EAAL,GAAUE,EAAV;AACD,KAHD,MAGO;AACL,WAAKF,EAAL,GAAUA,EAAV;AACA,WAAKE,EAAL,GAAUA,EAAV;AACD;;AAED,WAAO,IAAP;AACD,GAvCgB;;AAyCjB/xF,EAAAA,GAAG,CAACxa,CAAD,EAAIue,CAAJ,EAAO;AACR,QAAIve,CAAC,GAAG,KAAKssG,EAAb,EAAiB,KAAKA,EAAL,GAAUtsG,CAAV;AACjB,QAAIue,CAAC,GAAG,KAAK8tF,EAAb,EAAiB,KAAKA,EAAL,GAAU9tF,CAAV;AACjB,QAAIve,CAAC,GAAG,KAAK24E,EAAb,EAAiB,KAAKA,EAAL,GAAU34E,CAAV;AACjB,QAAIue,CAAC,GAAG,KAAKguF,EAAb,EAAiB,KAAKA,EAAL,GAAUhuF,CAAV;AACjB,WAAO,IAAP;AACD,GA/CgB;;AAiDjBgjK,EAAAA,MAAM,CAAC76K,CAAD,EAAI;AACR,SAAK4lG,EAAL,IAAW5lG,CAAX;AACA,SAAK2lG,EAAL,IAAW3lG,CAAX;AACA,SAAKiyE,EAAL,IAAWjyE,CAAX;AACA,SAAK6lG,EAAL,IAAW7lG,CAAX;AACA,WAAO,IAAP;AACD,GAvDgB;;AAyDjBR,EAAAA,KAAK,GAAG;AACN,SAAKomG,EAAL,GAAU1sG,IAAI,CAAC+H,KAAL,CAAW,KAAK2kG,EAAhB,CAAV;AACA,SAAKD,EAAL,GAAUzsG,IAAI,CAAC+H,KAAL,CAAW,KAAK0kG,EAAhB,CAAV;AACA,SAAK1zB,EAAL,GAAU/4E,IAAI,CAACoC,IAAL,CAAU,KAAK22E,EAAf,CAAV;AACA,SAAK4zB,EAAL,GAAU3sG,IAAI,CAACoC,IAAL,CAAU,KAAKuqG,EAAf,CAAV;AACA,WAAO,IAAP;AACD,GA/DgB;;AAiEjB78F,EAAAA,KAAK,CAACrS,CAAD,EAAI;AACP,SAAKivG,EAAL,IAAWjvG,CAAX;AACA,SAAKgvG,EAAL,IAAWhvG,CAAX;AACA,SAAKs7E,EAAL,IAAWt7E,CAAX;AACA,SAAKkvG,EAAL,IAAWlvG,CAAX;AACA,WAAO,IAAP;AACD,GAvEgB;;AAyEjBi9M,EAAAA,SAAS,CAAC30L,EAAD,EAAKhH,EAAL,EAAS;AAChB,SAAK2tF,EAAL,IAAW3mF,EAAX;AACA,SAAKgzD,EAAL,IAAWhzD,EAAX;AACA,SAAK0mF,EAAL,IAAW1tF,EAAX;AACA,SAAK4tF,EAAL,IAAW5tF,EAAX;AACA,WAAO,IAAP;AACD,GA/EgB;;AAiFjBy1O,EAAAA,MAAM,CAACpW,KAAD,EAAQh+O,CAAR,EAAWue,CAAX,EAAc;AAClB,UAAM4f,CAAC,GAAG,KAAKouO,aAAL,CAAmBvuB,KAAnB,EAA0Bh+O,CAA1B,EAA6Bue,CAA7B,CAAV;AACA,WAAO,KAAK+yL,KAAL,GAAa92L,GAAb,CAAiB2jB,CAAC,CAAC,CAAD,CAAlB,EAAuBA,CAAC,CAAC,CAAD,CAAxB,EAA6B3jB,GAA7B,CAAiC2jB,CAAC,CAAC,CAAD,CAAlC,EAAuCA,CAAC,CAAC,CAAD,CAAxC,EAA6C3jB,GAA7C,CAAiD2jB,CAAC,CAAC,CAAD,CAAlD,EAAuDA,CAAC,CAAC,CAAD,CAAxD,EAA6D3jB,GAA7D,CAAiE2jB,CAAC,CAAC,CAAD,CAAlE,EAAuEA,CAAC,CAAC,CAAD,CAAxE,CAAP;AACD,GApFgB;;AAsFjBouO,EAAAA,aAAa,CAACvuB,KAAD,EAAQh+O,CAAR,EAAWue,CAAX,EAAc;AACzB,QAAI;AACF+tF,MAAAA,EADE;AAEFD,MAAAA,EAFE;AAGF1zB,MAAAA,EAHE;AAIF4zB,MAAAA;AAJE,QAKA,IALJ;AAAA,QAMI34F,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAASoqO,KAAT,CANV;AAAA,QAOIrqO,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAASqqO,KAAT,CAPV;AAAA,QAQIlD,EAAE,GAAG96O,CAAC,GAAGA,CAAC,GAAG4T,GAAR,GAAc2K,CAAC,GAAG5K,GAR3B;AAAA,QASIonO,EAAE,GAAGx8N,CAAC,GAAGve,CAAC,GAAG2T,GAAR,GAAc4K,CAAC,GAAG3K,GAT3B;AAUA,WAAO,CAACA,GAAG,GAAG04F,EAAN,GAAW34F,GAAG,GAAG04F,EAAjB,GAAsByuI,EAAvB,EAA2BnnO,GAAG,GAAG24F,EAAN,GAAW14F,GAAG,GAAGy4F,EAAjB,GAAsB0uI,EAAjD,EAAqDnnO,GAAG,GAAG04F,EAAN,GAAW34F,GAAG,GAAG44F,EAAjB,GAAsBuuI,EAA3E,EAA+EnnO,GAAG,GAAG24F,EAAN,GAAW14F,GAAG,GAAG24F,EAAjB,GAAsBwuI,EAArG,EAAyGnnO,GAAG,GAAG+kE,EAAN,GAAWhlE,GAAG,GAAG04F,EAAjB,GAAsByuI,EAA/H,EAAmInnO,GAAG,GAAGglE,EAAN,GAAW/kE,GAAG,GAAGy4F,EAAjB,GAAsB0uI,EAAzJ,EAA6JnnO,GAAG,GAAG+kE,EAAN,GAAWhlE,GAAG,GAAG44F,EAAjB,GAAsBuuI,EAAnL,EAAuLnnO,GAAG,GAAGglE,EAAN,GAAW/kE,GAAG,GAAG24F,EAAjB,GAAsBwuI,EAA7M,CAAP;AACD,GAlGgB;;AAoGjBt4B,EAAAA,KAAK,CAAC76M,CAAD,EAAI;AACP,QAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,QAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,QAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,QAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,WAAO,IAAP;AACD,GA1GgB;;AA4GjB+sI,EAAAA,SAAS,CAAC1xO,CAAD,EAAI;AACX,QAAIA,CAAC,CAAC0kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC0kG,EAAZ;AACpB,QAAI1kG,CAAC,CAACykG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAUzkG,CAAC,CAACykG,EAAZ;AACpB,QAAIzkG,CAAC,CAAC+wE,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU/wE,CAAC,CAAC+wE,EAAZ;AACpB,QAAI/wE,CAAC,CAAC2kG,EAAF,GAAO,KAAKA,EAAhB,EAAoB,KAAKA,EAAL,GAAU3kG,CAAC,CAAC2kG,EAAZ;AACpB,WAAO,IAAP;AACD,GAlHgB;;AAoHjBigK,EAAAA,QAAQ,CAAC5kQ,CAAD,EAAI;AACV,WAAOA,CAAC,IAAI,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAlB,IAAwB,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EAArC,IAA2C,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAAxD,IAA8D,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAAlF;AACD,GAtHgB;;AAwHjBkgK,EAAAA,UAAU,CAAC7kQ,CAAD,EAAI;AACZ,WAAOA,CAAC,KAAK,KAAK0kG,EAAL,IAAW1kG,CAAC,CAAC0kG,EAAb,IAAmB,KAAK3zB,EAAL,IAAW/wE,CAAC,CAAC+wE,EAAhC,IAAsC,KAAK0zB,EAAL,IAAWzkG,CAAC,CAACykG,EAAnD,IAAyD,KAAKE,EAAL,IAAW3kG,CAAC,CAAC2kG,EAA3E,CAAR;AACD,GA1HgB;;AA4HjBg7F,EAAAA,UAAU,CAAC3/L,CAAD,EAAI;AACZ,WAAOA,CAAC,IAAI,EAAE,KAAK+wE,EAAL,GAAU/wE,CAAC,CAAC0kG,EAAZ,IAAkB,KAAKA,EAAL,GAAU1kG,CAAC,CAAC+wE,EAA9B,IAAoC,KAAK4zB,EAAL,GAAU3kG,CAAC,CAACykG,EAAhD,IAAsD,KAAKA,EAAL,GAAUzkG,CAAC,CAAC2kG,EAApE,CAAZ;AACD,GA9HgB;;AAgIjBmgK,EAAAA,QAAQ,CAAC1sQ,CAAD,EAAIue,CAAJ,EAAO;AACb,WAAO,EAAEve,CAAC,GAAG,KAAKssG,EAAT,IAAetsG,CAAC,GAAG,KAAK24E,EAAxB,IAA8Bp6D,CAAC,GAAG,KAAK8tF,EAAvC,IAA6C9tF,CAAC,GAAG,KAAKguF,EAAxD,CAAP;AACD,GAlIgB;;AAoIjBxqG,EAAAA,KAAK,GAAG;AACN,WAAO,KAAK42E,EAAL,GAAU,KAAK2zB,EAAtB;AACD,GAtIgB;;AAwIjBx8E,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKy8E,EAAL,GAAU,KAAKF,EAAtB;AACD;;AA1IgB,CAAnB;;AA8IA,SAAStyG,IAAT,CAAcgyQ,IAAd,EAAoB;AAClB,OAAKA,IAAL,GAAYA,IAAZ;AACA,OAAKY,MAAL,GAAc,KAAKA,MAAL,IAAe,IAAIN,MAAJ,EAA7B;AACD;;AAED,SAASO,SAAT,CAAmBb,IAAnB,EAAyB;AACvBhyQ,EAAAA,IAAI,CAACpB,IAAL,CAAU,IAAV,EAAgBozQ,IAAhB;AACA,OAAKh3J,KAAL,GAAa,KAAKA,KAAL,IAAc,EAA3B;AACD;;AACD,wBAAS63J,SAAT,EAAoB7yQ,IAApB;;AAEA,SAAS8yQ,cAAT,CAAwBC,YAAxB,EAAsC;AACpC,OAAKnvC,QAAL,GAAgB,CAAhB;AACA,OAAK+D,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACD;;AAED,SAASC,SAAT,CAAmBh0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAED,SAASqvC,SAAT,CAAmBj0C,MAAnB,EAA2B;AACzBA,EAAAA,MAAM,CAAC4E,QAAP,IAAmB,CAAnB;AACD;;AAEDkvC,cAAc,CAAC5yQ,SAAf,GAA2B;AACzByjO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKC,QAAZ;AACD,GAHwB;;AAKzBsvC,EAAAA,WAAW,CAACt4D,GAAD,EAAM;AACf,UAAMokB,MAAM,GAAG,IAAf;AACAg0C,IAAAA,SAAS,CAACh0C,MAAD,CAAT;AACA,WAAOA,MAAM,CAAC2I,OAAP,CAAentB,QAAf,CAAwBI,GAAxB,EAA6B;AAClC9oC,MAAAA,OAAO,EAAE;AADyB,KAA7B,EAEJ/iK,IAFI,CAECglM,GAAG,IAAI;AACbk/D,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAOjrB,GAAP;AACD,KALM,EAKJ9wL,KALI,CAKE,MAAM;AACbgwP,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAO,IAAP;AACD,KARM,CAAP;AASD,GAjBwB;;AAmBzBm0C,EAAAA,SAAS,CAACv4D,GAAD,EAAM;AACb,UAAMokB,MAAM,GAAG,IAAf;AAAA,UACMyrB,KAAK,GAAG,wBADd;AAEAuoB,IAAAA,SAAS,CAACh0C,MAAD,CAAT;AACA,WAAOA,MAAM,CAAC2I,OAAP,CAAentB,QAAf,CAAwBI,GAAxB,EAA6B;AAClC9oC,MAAAA,OAAO,EAAE;AADyB,KAA7B,EAEJ/iK,IAFI,CAECglM,GAAG,IAAI;AACb,YAAM73F,GAAG,GAAG63F,GAAG,CAACzvF,IAAhB;AACA,UAAI,CAACpI,GAAD,IAAQ,CAACuuI,KAAb,EAAoB,MAAM;AACxBvuI,QAAAA,GAAG,EAAEA;AADmB,OAAN;AAGpB,YAAMiR,GAAG,GAAG,IAAIs9H,KAAJ,EAAZ,CALa,CAKY;AACzB;;AAEA,YAAM2oB,IAAI,GAAG,8BAAer/D,GAAf,EAAoB,aAApB,IAAqCA,GAAG,CAACsH,WAAzC,GAAuD,WAApE;AACA,UAAI+3D,IAAI,IAAI,IAAZ,EAAkBjmJ,GAAG,CAACkuF,WAAJ,GAAkB+3D,IAAlB,CATL,CAS6B;;AAE1CjmJ,MAAAA,GAAG,CAAClI,MAAJ,GAAa,MAAMguJ,SAAS,CAACj0C,MAAD,CAA5B;;AAEA7xG,MAAAA,GAAG,CAACxN,OAAJ,GAAc,MAAMszJ,SAAS,CAACj0C,MAAD,CAA7B;;AAEA7xG,MAAAA,GAAG,CAACwnE,GAAJ,GAAUz4E,GAAV;AACA,aAAOiR,GAAP;AACD,KAnBM,EAmBJlqG,KAnBI,CAmBEzkB,CAAC,IAAI;AACZy0Q,MAAAA,SAAS,CAACj0C,MAAD,CAAT;AACA,aAAO;AACLq0C,QAAAA,QAAQ,EAAE,KADL;AAELrrQ,QAAAA,KAAK,EAAE,CAFF;AAGL+tB,QAAAA,MAAM,EAAE,CAHH;AAIL4+J,QAAAA,GAAG,EAAEn2L,CAAC,IAAIA,CAAC,CAAC09G,GAAP,IAAc;AAJd,OAAP;AAMD,KA3BM,CAAP;AA4BD,GAnDwB;;AAqDzBngF,EAAAA,KAAK,GAAG;AACN,UAAMijM,MAAM,GAAG,IAAf;AACA,WAAO,IAAIv2N,OAAJ,CAAY8yM,MAAM,IAAI;AAC3B,eAAS+3D,IAAT,CAAcxwQ,KAAd,EAAqB;AACnB,YAAI,CAACk8N,MAAM,CAAC2E,OAAP,EAAL,EAAuBpoB,MAAM,CAACz4M,KAAD,CAAN,CAAvB,KAA0CvE,UAAU,CAAC,MAAM;AACzD+0Q,UAAAA,IAAI,CAAC,IAAD,CAAJ;AACD,SAFmD,EAEjD,EAFiD,CAAV;AAG3C;;AAEDA,MAAAA,IAAI,CAAC,KAAD,CAAJ;AACD,KARM,CAAP;AASD;;AAhEwB,CAA3B;;AAoEA,SAASC,WAAT,CAAsBX,MAAtB,EAA8BlrP,IAA9B,EAAoC8rP,KAApC,EAA2C;AACzC,MAAI9rP,IAAI,CAAC+rP,MAAL,IAAe/rP,IAAI,CAAC4uO,OAAL,KAAiB,CAAhC,IAAqC5uO,IAAI,CAACgsP,aAAL,KAAuB,CAAhE,EAAmE;AACjE,UAAMC,EAAE,GAAGjsP,IAAI,CAACksP,WAAL,IAAoB,IAApB,GAA2B,CAAClsP,IAAI,CAACksP,WAAjC,GAA+C,CAA1D;AACAhB,IAAAA,MAAM,CAACprF,MAAP,CAAcmsF,EAAE,IAAIH,KAAK,GAAGK,eAAe,CAACnsP,IAAD,EAAOisP,EAAP,CAAlB,GAA+B,CAAxC,CAAhB;AACD;;AAED,SAAOf,MAAP;AACD;;AAED,SAASiB,eAAT,CAAyBnsP,IAAzB,EAA+BksP,WAA/B,EAA4C;AAC1C;AACA,SAAOlsP,IAAI,CAACosP,UAAL,IAAmBpsP,IAAI,CAACosP,UAAL,KAAoB,OAAvC,GAAiD,CAAjD,GAAqDF,WAA5D;AACD;;AAED,MAAMG,eAAe,GAAGpH,GAAG,GAAG,IAA9B;AACA,IAAIiG,MAAJ,EAAY9lC,EAAZ,EAAgBJ,EAAhB,EAAoBsnC,GAApB,EAAyBC,EAAzB,EAA6B//L,EAA7B,EAAiCggM,EAAjC,EAAqCC,EAArC;;AAEA,MAAM1zP,GAAG,GAAG,CAACxa,CAAD,EAAIue,CAAJ,KAAUouP,MAAM,CAACnyP,GAAP,CAAWxa,CAAX,EAAcue,CAAd,CAAtB;;AAEA,MAAM4vP,IAAI,GAAG,CAACnuQ,CAAD,EAAIue,CAAJ,KAAU/D,GAAG,CAACqsN,EAAE,GAAG7mO,CAAN,EAASymO,EAAE,GAAGloN,CAAd,CAA1B;;AAEA,MAAM6vP,IAAI,GAAGpuQ,CAAC,IAAIwa,GAAG,CAACxa,CAAD,EAAI2sQ,MAAM,CAACtgK,EAAX,CAArB;;AAEA,MAAMgiK,IAAI,GAAG9vP,CAAC,IAAI/D,GAAG,CAACmyP,MAAM,CAACrgK,EAAR,EAAY/tF,CAAZ,CAArB;;AAEA,MAAMokO,EAAE,GAAG,CAAC3iP,CAAD,EAAIue,CAAJ,KAAUyvP,EAAE,GAAGhuQ,CAAL,GAASiuQ,EAAE,GAAG1vP,CAAnC;;AAEA,MAAMskO,EAAE,GAAG,CAAC7iP,CAAD,EAAIue,CAAJ,KAAU0vD,EAAE,GAAGjuE,CAAL,GAASkuQ,EAAE,GAAG3vP,CAAnC;;AAEA,MAAM+vP,IAAI,GAAG,CAACtuQ,CAAD,EAAIue,CAAJ,KAAU/D,GAAG,CAACmoO,EAAE,CAAC3iP,CAAD,EAAIue,CAAJ,CAAH,EAAWskO,EAAE,CAAC7iP,CAAD,EAAIue,CAAJ,CAAb,CAA1B;;AAEA,MAAMgwP,KAAK,GAAG,CAACvuQ,CAAD,EAAIue,CAAJ,KAAU4vP,IAAI,CAACxrB,EAAE,CAAC3iP,CAAD,EAAIue,CAAJ,CAAH,EAAWskO,EAAE,CAAC7iP,CAAD,EAAIue,CAAJ,CAAb,CAA5B;;AAEA,SAASiwP,YAAT,CAAuBhuP,CAAvB,EAA0BiuP,GAA1B,EAA+B;AAC7B9B,EAAAA,MAAM,GAAGnsP,CAAT;;AAEA,MAAIiuP,GAAJ,EAAS;AACPV,IAAAA,GAAG,GAAGU,GAAG,GAAGlI,QAAZ;AACAyH,IAAAA,EAAE,GAAGE,EAAE,GAAGtuQ,IAAI,CAACgU,GAAL,CAASm6P,GAAT,CAAV;AACA9/L,IAAAA,EAAE,GAAGruE,IAAI,CAAC+T,GAAL,CAASo6P,GAAT,CAAL;AACAE,IAAAA,EAAE,GAAG,CAAChgM,EAAN;AACD,GALD,MAKO;AACL+/L,IAAAA,EAAE,GAAGE,EAAE,GAAG,CAAV;AACAH,IAAAA,GAAG,GAAG9/L,EAAE,GAAGggM,EAAE,GAAG,CAAhB;AACD;;AAED,SAAOpiG,OAAP;AACD;;AACD,MAAMA,OAAO,GAAG;AACdq9F,EAAAA,SAAS,GAAG,CAAE,CADA;;AAGd5xB,EAAAA,SAAS,GAAG,CAAE,CAHA;;AAKdD,EAAAA,MAAM,EAAEk3B,KALM;AAMdh3B,EAAAA,MAAM,EAAEg3B,KANM;;AAQd71B,EAAAA,IAAI,CAAC14O,CAAD,EAAIue,CAAJ,EAAO4nC,CAAP,EAAUC,CAAV,EAAa;AACf,QAAI2nN,GAAJ,EAAS;AACPO,MAAAA,IAAI,CAACtuQ,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAR,CAAJ;AACA+vP,MAAAA,IAAI,CAACtuQ,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAC,GAAG6nC,CAAZ,CAAJ;AACAkoN,MAAAA,IAAI,CAACtuQ,CAAD,EAAIue,CAAC,GAAG6nC,CAAR,CAAJ;AACAmoN,MAAAA,KAAK,CAACvuQ,CAAD,EAAIue,CAAJ,CAAL;AACD,KALD,MAKO;AACL/D,MAAAA,GAAG,CAACxa,CAAC,GAAGmmD,CAAL,EAAQ5nC,CAAC,GAAG6nC,CAAZ,CAAH;AACA+nN,MAAAA,IAAI,CAACnuQ,CAAD,EAAIue,CAAJ,CAAJ;AACD;AACF,GAlBa;;AAoBdi5N,EAAAA,gBAAgB,CAAClrI,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiB;AAC/B,UAAMmiK,GAAG,GAAG/rB,EAAE,CAACr2I,EAAD,EAAKD,EAAL,CAAd;AAAA,UACMsiK,GAAG,GAAG9rB,EAAE,CAACv2I,EAAD,EAAKD,EAAL,CADd;AAAA,UAEMuiK,GAAG,GAAGjsB,EAAE,CAAChqK,EAAD,EAAK4zB,EAAL,CAFd;AAAA,UAGMsiK,GAAG,GAAGhsB,EAAE,CAAClqK,EAAD,EAAK4zB,EAAL,CAHd;AAIAuiK,IAAAA,WAAW,CAACjoC,EAAD,EAAK6nC,GAAL,EAAUE,GAAV,EAAeR,IAAf,CAAX;AACAU,IAAAA,WAAW,CAACroC,EAAD,EAAKkoC,GAAL,EAAUE,GAAV,EAAeR,IAAf,CAAX;AACAF,IAAAA,IAAI,CAACS,GAAD,EAAMC,GAAN,CAAJ;AACD,GA5Ba;;AA8Bdp3B,EAAAA,aAAa,CAACnrI,EAAD,EAAKD,EAAL,EAAS1zB,EAAT,EAAa4zB,EAAb,EAAiBgtI,EAAjB,EAAqBC,EAArB,EAAyB;AACpC,UAAMk1B,GAAG,GAAG/rB,EAAE,CAACr2I,EAAD,EAAKD,EAAL,CAAd;AAAA,UACMsiK,GAAG,GAAG9rB,EAAE,CAACv2I,EAAD,EAAKD,EAAL,CADd;AAAA,UAEMuiK,GAAG,GAAGjsB,EAAE,CAAChqK,EAAD,EAAK4zB,EAAL,CAFd;AAAA,UAGMsiK,GAAG,GAAGhsB,EAAE,CAAClqK,EAAD,EAAK4zB,EAAL,CAHd;AAAA,UAIMwiK,GAAG,GAAGpsB,EAAE,CAACpJ,EAAD,EAAKC,EAAL,CAJd;AAAA,UAKMw1B,GAAG,GAAGnsB,EAAE,CAACtJ,EAAD,EAAKC,EAAL,CALd;AAMAy1B,IAAAA,YAAY,CAACpoC,EAAD,EAAK6nC,GAAL,EAAUE,GAAV,EAAeG,GAAf,EAAoBX,IAApB,CAAZ;AACAa,IAAAA,YAAY,CAACxoC,EAAD,EAAKkoC,GAAL,EAAUE,GAAV,EAAeG,GAAf,EAAoBX,IAApB,CAAZ;AACAF,IAAAA,IAAI,CAACY,GAAD,EAAMC,GAAN,CAAJ;AACD,GAxCa;;AA0Cdp0D,EAAAA,GAAG,CAACkgC,EAAD,EAAKC,EAAL,EAASlzO,CAAT,EAAY+iQ,EAAZ,EAAgBC,EAAhB,EAAoBryB,GAApB,EAAyB;AAC1BoyB,IAAAA,EAAE,IAAImD,GAAN;AACAlD,IAAAA,EAAE,IAAIkD,GAAN,CAF0B,CAEf;;AAEXlnC,IAAAA,EAAE,GAAGh/N,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASi3P,EAAT,CAAJ,GAAmB/vB,EAAxB;AACArU,IAAAA,EAAE,GAAG5+N,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASk3P,EAAT,CAAJ,GAAmB9vB,EAAxB;;AAEA,QAAIn7O,IAAI,CAACiT,GAAL,CAASg4P,EAAE,GAAGD,EAAd,IAAoBkD,eAAxB,EAAyC;AACvC;AACAtzP,MAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACA2S,MAAAA,GAAG,CAACsgO,EAAE,GAAGjzO,CAAN,EAASkzO,EAAE,GAAGlzO,CAAd,CAAH;AACD,KAJD,MAIO;AACL,YAAMkhF,MAAM,GAAGhoF,CAAC,IAAIyZ,GAAG,CAAC3S,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CAAJ,GAAkB+5O,EAAnB,EAAuBjzO,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CAAJ,GAAkBg6O,EAAzC,CAAvB;;AAEA,UAAI19O,CAAJ,EAAOxD,CAAP,CAHK,CAGK;;AAEVkvF,MAAAA,MAAM,CAAC6hL,EAAD,CAAN;AACA7hL,MAAAA,MAAM,CAAC8hL,EAAD,CAAN,CANK,CAMO;;AAEZ,UAAIA,EAAE,KAAKD,EAAX,EAAe;AACbA,QAAAA,EAAE,GAAGA,EAAE,GAAGlE,GAAV;AACA,YAAIkE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAIlE,GAAN;AACZmE,QAAAA,EAAE,GAAGA,EAAE,GAAGnE,GAAV;AACA,YAAImE,EAAE,GAAG,CAAT,EAAYA,EAAE,IAAInE,GAAN;;AAEZ,YAAImE,EAAE,GAAGD,EAAT,EAAa;AACXpyB,UAAAA,GAAG,GAAG,CAACA,GAAP,CADW,CACC;;AAEZn7O,UAAAA,CAAC,GAAGutQ,EAAJ;AACAA,UAAAA,EAAE,GAAGC,EAAL;AACAA,UAAAA,EAAE,GAAGxtQ,CAAL,CALW,CAKH;AACT;;AAED,YAAIm7O,GAAJ,EAAS;AACPqyB,UAAAA,EAAE,IAAInE,GAAN;AACArpQ,UAAAA,CAAC,GAAGutQ,EAAE,GAAGA,EAAE,GAAGnE,MAAd;;AAEA,eAAK5sQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAJ,IAASwD,CAAC,GAAGwtQ,EAAzB,EAA6B,EAAEhxQ,CAAF,EAAKwD,CAAC,IAAIopQ,MAAvC,EAA+C19K,MAAM,CAAC1rF,CAAD,CAAN;AAChD,SALD,MAKO;AACLA,UAAAA,CAAC,GAAGutQ,EAAE,GAAGA,EAAE,GAAGnE,MAAV,GAAmBA,MAAvB;;AAEA,eAAK5sQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAJ,IAASwD,CAAC,GAAGwtQ,EAAzB,EAA6B,EAAEhxQ,CAAF,EAAKwD,CAAC,GAAGA,CAAC,GAAGopQ,MAA1C,EAAkD19K,MAAM,CAAC1rF,CAAD,CAAN;AACnD;AACF;AACF;AACF;;AAvFa,CAAhB;;AA2FA,SAASyxQ,WAAT,CAAqB50D,EAArB,EAAyB5tG,EAAzB,EAA6B3zB,EAA7B,EAAiC8nJ,EAAjC,EAAqC;AACnC,QAAMljO,CAAC,GAAG,CAAC28M,EAAE,GAAG5tG,EAAN,KAAa4tG,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EAA3B,CAAV;AACA,MAAI,IAAI/uG,CAAJ,IAASA,CAAC,GAAG,CAAjB,EAAoBkjO,EAAE,CAACvmB,EAAE,GAAG,CAAC5tG,EAAE,GAAG4tG,EAAN,IAAY38M,CAAlB,CAAF;AACrB;;AAED,SAAS0xQ,YAAT,CAAsB/0D,EAAtB,EAA0B5tG,EAA1B,EAA8B3zB,EAA9B,EAAkC4gK,EAAlC,EAAsC9Y,EAAtC,EAA0C;AACxC,QAAM1/N,CAAC,GAAGw4O,EAAE,GAAGr/B,EAAL,GAAU,IAAI5tG,EAAd,GAAmB,IAAI3zB,EAAjC;AAAA,QACM/wE,CAAC,GAAGsyM,EAAE,GAAGvhI,EAAL,GAAU,IAAI2zB,EADxB;AAAA,QAEMhmG,CAAC,GAAG4zM,EAAE,GAAG5tG,EAFf;AAGA,MAAIw4G,EAAE,GAAG,CAAT;AAAA,MACItkI,EAAE,GAAG,CADT;AAAA,MAEI34E,CAFJ,CAJwC,CAMjC;;AAEP,MAAIjI,IAAI,CAACiT,GAAL,CAAS9R,CAAT,IAAcylQ,OAAlB,EAA2B;AACzB;AACA3+P,IAAAA,CAAC,GAAGD,CAAC,GAAGA,CAAJ,GAAQtB,CAAC,GAAGvF,CAAhB;;AAEA,QAAI8G,CAAC,IAAI,CAAT,EAAY;AACVA,MAAAA,CAAC,GAAGjI,IAAI,CAACqC,IAAL,CAAU4F,CAAV,CAAJ;AACAi9M,MAAAA,EAAE,GAAG,CAAC,CAACl9M,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACAy/E,MAAAA,EAAE,GAAG,CAAC,CAAC54E,CAAD,GAAKC,CAAN,IAAW9G,CAAhB;AACD;AACF,GATD,MASO;AACL;AACA+jN,IAAAA,EAAE,GAAG,MAAMx+M,CAAN,GAAUsB,CAAf;AACD,GApBuC,CAoBtC;;;AAGF,MAAI,IAAIk9M,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsB2b,EAAE,CAACyuC,KAAK,CAACpqD,EAAD,EAAK5K,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACtB,MAAI,IAAI/4J,EAAJ,IAAUA,EAAE,GAAG,CAAnB,EAAsBigJ,EAAE,CAACyuC,KAAK,CAAC1uL,EAAD,EAAK05H,EAAL,EAAS5tG,EAAT,EAAa3zB,EAAb,EAAiB4gK,EAAjB,CAAN,CAAF;AACvB;;AAED,SAAS21B,KAAT,CAAe3xQ,CAAf,EAAkB28M,EAAlB,EAAsB5tG,EAAtB,EAA0B3zB,EAA1B,EAA8B4gK,EAA9B,EAAkC;AAChC,QAAMl8O,CAAC,GAAG,IAAIE,CAAd;AAAA,QACMmxE,EAAE,GAAGrxE,CAAC,GAAGA,CADf;AAAA,QAEMojF,EAAE,GAAGljF,CAAC,GAAGA,CAFf;AAGA,SAAOmxE,EAAE,GAAGrxE,CAAL,GAAS68M,EAAT,GAAc,IAAIxrI,EAAJ,GAASnxE,CAAT,GAAa+uG,EAA3B,GAAgC,IAAIjvG,CAAJ,GAAQojF,EAAR,GAAa9H,EAA7C,GAAkD8H,EAAE,GAAGljF,CAAL,GAASg8O,EAAlE;AACD;;AAED,IAAI41B,SAAS,GAAG,CAACA,SAAS,GAAG,wBAAO,CAAP,EAAU,CAAV,CAAb,IAA6BA,SAAS,CAACpmP,UAAV,CAAqB,IAArB,CAA7B,GAA0D,IAA1E;AAEA,MAAMnhB,CAAC,GAAG,IAAIykQ,MAAJ,EAAV;;AACA,SAAS+C,aAAT,CAAuBrwB,IAAvB,EAA6B;AAC3B,SAAO,UAAUt9N,IAAV,EAAgB4tP,KAAhB,EAAuB;AAC5B;AACA,QAAI,CAACF,SAAL,EAAgB,OAAO,IAAP,CAFY,CAEC;;AAE7BpwB,IAAAA,IAAI,CAACowB,SAAD,EAAY1tP,IAAZ,CAAJ,CAJ4B,CAIL;;AAEvB7Z,IAAAA,CAAC,CAAC0pM,KAAF,GAAUmR,KAAV,CAAgBhhM,IAAI,CAACkrP,MAArB,EAA6BrzB,SAA7B,CAAuC+1B,KAAvC,EAA8CnpQ,KAA9C;AACA,UAAM;AACJomG,MAAAA,EADI;AAEJD,MAAAA,EAFI;AAGJ1zB,MAAAA,EAHI;AAIJ4zB,MAAAA;AAJI,QAKF3kG,CALJ,CAP4B,CAYrB;AACP;;AAEA,SAAK,IAAI2W,CAAC,GAAG8tF,EAAb,EAAiB9tF,CAAC,IAAIguF,EAAtB,EAA0B,EAAEhuF,CAA5B,EAA+B;AAC7B,WAAK,IAAIve,CAAC,GAAGssG,EAAb,EAAiBtsG,CAAC,IAAI24E,EAAtB,EAA0B,EAAE34E,CAA5B,EAA+B;AAC7B,YAAImvQ,SAAS,CAACG,aAAV,CAAwBtvQ,CAAxB,EAA2Bue,CAA3B,CAAJ,EAAmC;AACjC,iBAAO,IAAP;AACD;AACF;AACF,KArB2B,CAqB1B;;;AAGF,WAAO,KAAP;AACD,GAzBD;AA0BD;;AACD,SAASgxP,cAAT,CAAwB9tP,IAAxB,EAA8Bk8L,GAA9B,EAAmC;AACjC,SAAOA,GAAG,CAAC+uD,QAAJ,CAAajrP,IAAI,CAACzhB,CAAL,IAAU,CAAvB,EAA0ByhB,IAAI,CAAClD,CAAL,IAAU,CAApC,CAAP;AACD;;AACD,SAASixP,aAAT,CAAuB/tP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEM4nC,CAAC,GAAG1kC,IAAI,CAAC1f,KAAL,IAAc,CAFxB;AAAA,QAGMqkD,CAAC,GAAG3kC,IAAI,CAACqO,MAAL,IAAe,CAHzB;AAIA,SAAO6tL,GAAG,CAACpW,UAAJ,CAAe3/L,CAAC,CAACpL,GAAF,CAAMwD,CAAN,EAASue,CAAT,EAAYve,CAAC,GAAGmmD,CAAhB,EAAmB5nC,CAAC,GAAG6nC,CAAvB,CAAf,CAAP;AACD;;AACD,SAASqpN,aAAT,CAAuBhuP,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAM39M,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAApB;AAAA,QACMue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADpB;AAAA,QAEMo6D,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B34E,CAFvC;AAAA,QAGMusG,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BhuF,CAHvC;AAIA,SAAOmxP,gBAAgB,CAAC/xD,GAAD,EAAM39M,CAAN,EAASue,CAAT,EAAYo6D,EAAZ,EAAgB4zB,EAAhB,CAAvB;AACD;;AACD,SAASmjK,gBAAT,CAA0B/xD,GAA1B,EAA+B39M,CAA/B,EAAkCue,CAAlC,EAAqCs6D,CAArC,EAAwC9sE,CAAxC,EAA2C;AACzC,QAAM;AACJugG,IAAAA,EADI;AAEJD,IAAAA,EAFI;AAGJ1zB,IAAAA,EAHI;AAIJ4zB,IAAAA;AAJI,MAKFoxG,GALJ;AAAA,QAMMh4L,EAAE,GAAGkzD,CAAC,GAAG74E,CANf;AAAA,QAOM2e,EAAE,GAAG5S,CAAC,GAAGwS,CAPf;AAQA,MAAIumM,EAAE,GAAG,CAAT;AAAA,MACItkI,EAAE,GAAG,CADT;AAAA,MAEIriD,CAFJ;AAAA,MAGIozD,CAHJ;AAAA,MAII1pF,CAJJ;AAAA,MAKItP,CALJ;;AAOA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,CAAhB,EAAmB,EAAEA,CAArB,EAAwB;AACtB,QAAIA,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAG,CAACxY,EAAL;AACA4rE,MAAAA,CAAC,GAAG,EAAE+a,EAAE,GAAGtsG,CAAP,CAAJ;AACD;;AAED,QAAIzH,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAGxY,EAAJ;AACA4rE,MAAAA,CAAC,GAAG5Y,EAAE,GAAG34E,CAAT;AACD;;AAED,QAAIzH,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAG,CAACxf,EAAL;AACA4yE,MAAAA,CAAC,GAAG,EAAE8a,EAAE,GAAG9tF,CAAP,CAAJ;AACD;;AAED,QAAIhmB,CAAC,KAAK,CAAV,EAAa;AACX4lC,MAAAA,CAAC,GAAGxf,EAAJ;AACA4yE,MAAAA,CAAC,GAAGgb,EAAE,GAAGhuF,CAAT;AACD;;AAED,QAAI3e,IAAI,CAACiT,GAAL,CAASsrB,CAAT,IAAc,KAAd,IAAuBozD,CAAC,GAAG,CAA/B,EAAkC,OAAO,KAAP;AAClC1pF,IAAAA,CAAC,GAAG0pF,CAAC,GAAGpzD,CAAR;;AAEA,QAAIA,CAAC,GAAG,CAAR,EAAW;AACT,UAAIt2B,CAAC,GAAG24E,EAAR,EAAY,OAAO,KAAP,CAAZ,KAA8B,IAAI34E,CAAC,GAAGi9M,EAAR,EAAYA,EAAE,GAAGj9M,CAAL;AAC3C,KAFD,MAEO,IAAIs2B,CAAC,GAAG,CAAR,EAAW;AAChB,UAAIt2B,CAAC,GAAGi9M,EAAR,EAAY,OAAO,KAAP,CAAZ,KAA8B,IAAIj9M,CAAC,GAAG24E,EAAR,EAAYA,EAAE,GAAG34E,CAAL;AAC3C;AACF;;AAED,SAAO,IAAP;AACD;;AAED,SAAS8nQ,KAAT,CAAgB9jG,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7BoqJ,EAAAA,OAAO,CAAC+jG,wBAAR,GAAmCnuP,IAAI,CAACkuP,KAAL,IAAc,aAAjD;AACD;;AAED,SAASE,OAAT,CAAkBhzQ,KAAlB,EAAyBonQ,IAAzB,EAA+B;AAC7B,SAAOpnQ,KAAK,IAAI,IAAT,GAAgBonQ,IAAhB,GAAuBpnQ,KAA9B;AACD;;AAED,SAASizQ,QAAT,CAAkBzsP,QAAlB,EAA4BuhP,KAA5B,EAAmC;AACjC,QAAM78P,CAAC,GAAG68P,KAAK,CAACzrQ,MAAhB;;AAEA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BwpB,IAAAA,QAAQ,CAAC0sP,YAAT,CAAsBnL,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MAA/B,EAAuCo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P,KAAhD;AACD;;AAED,SAAOhsO,QAAP;AACD;;AAED,SAASA,QAAT,CAAmBwoJ,OAAnB,EAA4Bv4D,IAA5B,EAAkCq5J,MAAlC,EAA0C;AACxC,QAAMxmN,CAAC,GAAGwmN,MAAM,CAAC5qQ,KAAP,EAAV;AAAA,QACMqkD,CAAC,GAAGumN,MAAM,CAAC78O,MAAP,EADV;AAEA,MAAIzM,QAAJ;;AAEA,MAAIiwF,IAAI,CAACjwF,QAAL,KAAkB,QAAtB,EAAgC;AAC9BA,IAAAA,QAAQ,GAAGwoJ,OAAO,CAACmkG,oBAAR,CAA6BrD,MAAM,CAACrgK,EAAP,GAAYujK,OAAO,CAACv8J,IAAI,CAAChH,EAAN,EAAU,GAAV,CAAP,GAAwBnmD,CAAjE,EAAoEwmN,MAAM,CAACtgK,EAAP,GAAYwjK,OAAO,CAACv8J,IAAI,CAACjH,EAAN,EAAU,GAAV,CAAP,GAAwBjmD,CAAxG,EAA2GxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiBypN,OAAO,CAACv8J,IAAI,CAAC24F,EAAN,EAAU,CAAV,CAAnI,EAAiJ0gE,MAAM,CAACrgK,EAAP,GAAYujK,OAAO,CAACv8J,IAAI,CAAC36B,EAAN,EAAU,GAAV,CAAP,GAAwBxyB,CAArL,EAAwLwmN,MAAM,CAACtgK,EAAP,GAAYwjK,OAAO,CAACv8J,IAAI,CAAC/G,EAAN,EAAU,GAAV,CAAP,GAAwBnmD,CAA5N,EAA+NxmD,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYC,CAAZ,IAAiBypN,OAAO,CAACv8J,IAAI,CAAC44F,EAAN,EAAU,GAAV,CAAvP,CAAX;AACD,GAFD,MAEO;AACL;AACA,UAAM5/F,EAAE,GAAGujK,OAAO,CAACv8J,IAAI,CAAChH,EAAN,EAAU,CAAV,CAAlB;AAAA,UACMD,EAAE,GAAGwjK,OAAO,CAACv8J,IAAI,CAACjH,EAAN,EAAU,CAAV,CADlB;AAAA,UAEM1zB,EAAE,GAAGk3L,OAAO,CAACv8J,IAAI,CAAC36B,EAAN,EAAU,CAAV,CAFlB;AAAA,UAGM4zB,EAAE,GAAGsjK,OAAO,CAACv8J,IAAI,CAAC/G,EAAN,EAAU,CAAV,CAHlB;;AAKA,QAAID,EAAE,KAAK3zB,EAAP,IAAa0zB,EAAE,KAAKE,EAApB,IAA0BpmD,CAAC,KAAKC,CAApC,EAAuC;AACrC;AACA/iC,MAAAA,QAAQ,GAAGwoJ,OAAO,CAACokG,oBAAR,CAA6BtD,MAAM,CAACrgK,EAAP,GAAYA,EAAE,GAAGnmD,CAA9C,EAAiDwmN,MAAM,CAACtgK,EAAP,GAAYA,EAAE,GAAGjmD,CAAlE,EAAqEumN,MAAM,CAACrgK,EAAP,GAAY3zB,EAAE,GAAGxyB,CAAtF,EAAyFwmN,MAAM,CAACtgK,EAAP,GAAYE,EAAE,GAAGnmD,CAA1G,CAAX;AACD,KAHD,MAGO;AACL;AACA;AACA,YAAMvxC,KAAK,GAAG,wBAAOjV,IAAI,CAACoC,IAAL,CAAUmkD,CAAV,CAAP,EAAqBvmD,IAAI,CAACoC,IAAL,CAAUokD,CAAV,CAArB,CAAd;AAAA,YACM8pN,IAAI,GAAGr7P,KAAK,CAACkU,UAAN,CAAiB,IAAjB,CADb;AAEAmnP,MAAAA,IAAI,CAACxgQ,KAAL,CAAWy2C,CAAX,EAAcC,CAAd;AACA8pN,MAAAA,IAAI,CAACC,SAAL,GAAiBL,QAAQ,CAACI,IAAI,CAACD,oBAAL,CAA0B3jK,EAA1B,EAA8BD,EAA9B,EAAkC1zB,EAAlC,EAAsC4zB,EAAtC,CAAD,EAA4C+G,IAAI,CAACsxJ,KAAjD,CAAzB;AACAsL,MAAAA,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoBjqN,CAApB,EAAuBC,CAAvB;AACA,aAAOylH,OAAO,CAACwkG,aAAR,CAAsBx7P,KAAtB,EAA6B,WAA7B,CAAP;AACD;AACF;;AAED,SAAOi7P,QAAQ,CAACzsP,QAAD,EAAWiwF,IAAI,CAACsxJ,KAAhB,CAAf;AACD;;AAED,SAASvV,KAAT,CAAgBxjF,OAAhB,EAAyBpqJ,IAAzB,EAA+B5kB,KAA/B,EAAsC;AACpC,SAAO2nQ,UAAU,CAAC3nQ,KAAD,CAAV,GAAoBwmB,QAAQ,CAACwoJ,OAAD,EAAUhvK,KAAV,EAAiB4kB,IAAI,CAACkrP,MAAtB,CAA5B,GAA4D9vQ,KAAnE;AACD;;AAED,SAASwN,IAAT,CAAewhK,OAAf,EAAwBpqJ,IAAxB,EAA8B4uO,OAA9B,EAAuC;AACrCA,EAAAA,OAAO,IAAI5uO,IAAI,CAAC6uP,WAAL,IAAoB,IAApB,GAA2B,CAA3B,GAA+B7uP,IAAI,CAAC6uP,WAA/C;;AAEA,MAAIjgB,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAACskG,SAAR,GAAoB9gB,KAAK,CAACxjF,OAAD,EAAUpqJ,IAAV,EAAgBA,IAAI,CAACpX,IAArB,CAAzB;AACA,WAAO,IAAP;AACD,GAJD,MAIO;AACL,WAAO,KAAP;AACD;AACF;;AAED,IAAIinO,KAAK,GAAG,EAAZ;;AACA,SAASk8B,MAAT,CAAiB3hG,OAAjB,EAA0BpqJ,IAA1B,EAAgC4uO,OAAhC,EAAyC;AACvC,MAAImgB,EAAE,GAAG,CAACA,EAAE,GAAG/uP,IAAI,CAACksP,WAAX,KAA2B,IAA3B,GAAkC6C,EAAlC,GAAuC,CAAhD;AACA,MAAIA,EAAE,IAAI,CAAV,EAAa,OAAO,KAAP;AACbngB,EAAAA,OAAO,IAAI5uO,IAAI,CAACgsP,aAAL,IAAsB,IAAtB,GAA6B,CAA7B,GAAiChsP,IAAI,CAACgsP,aAAjD;;AAEA,MAAIpd,OAAO,GAAG,CAAd,EAAiB;AACfxkF,IAAAA,OAAO,CAAC0kG,WAAR,GAAsBlgB,OAAtB;AACAxkF,IAAAA,OAAO,CAAC4kG,WAAR,GAAsBphB,KAAK,CAACxjF,OAAD,EAAUpqJ,IAAV,EAAgBA,IAAI,CAAC+rP,MAArB,CAA3B;AACA3hG,IAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAApB;AACA3kG,IAAAA,OAAO,CAAC8kG,OAAR,GAAkBlvP,IAAI,CAACmvP,SAAL,IAAkB,MAApC;AACA/kG,IAAAA,OAAO,CAACglG,QAAR,GAAmBpvP,IAAI,CAACosP,UAAL,IAAmB,OAAtC;AACAhiG,IAAAA,OAAO,CAACilG,UAAR,GAAqBrvP,IAAI,CAACsvP,gBAAL,IAAyB,EAA9C;;AAEA,QAAIllG,OAAO,CAACmlG,WAAZ,EAAyB;AACvBnlG,MAAAA,OAAO,CAACmlG,WAAR,CAAoBvvP,IAAI,CAACwvP,UAAL,IAAmB3/B,KAAvC;AACAzlE,MAAAA,OAAO,CAACqlG,cAAR,GAAyBzvP,IAAI,CAAC0vP,gBAAL,IAAyB,CAAlD;AACD;;AAED,WAAO,IAAP;AACD,GAdD,MAcO;AACL,WAAO,KAAP;AACD;AACF;;AAED,SAASxvE,OAAT,CAAiB5gM,CAAjB,EAAoB6G,CAApB,EAAuB;AACrB,SAAO7G,CAAC,CAACqwQ,MAAF,GAAWxpQ,CAAC,CAACwpQ,MAAb,IAAuBrwQ,CAAC,CAACpB,KAAF,GAAUiI,CAAC,CAACjI,KAA1C;AACD;;AAED,SAAS0xQ,MAAT,CAAgBC,KAAhB,EAAuB;AACrB,MAAI,CAACA,KAAK,CAACC,MAAX,EAAmB,OAAOD,KAAK,CAACE,MAAb;AACnB,MAAIz8J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACIxxF,MAAM,GAAG,EADb;AAAA,MAEI9B,IAFJ;AAAA,MAGI5nB,CAHJ;AAAA,MAIIkO,CAJJ;;AAMA,OAAKlO,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC4nB,IAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACA4nB,IAAAA,IAAI,CAAC9hB,KAAL,GAAa9F,CAAb;AACA,QAAI4nB,IAAI,CAAC2vP,MAAT,EAAiB7tP,MAAM,CAACzpB,IAAP,CAAY2nB,IAAZ;AAClB;;AAED6vP,EAAAA,KAAK,CAACC,MAAN,GAAe,KAAf;AACA,SAAOD,KAAK,CAACE,MAAN,GAAejuP,MAAM,CAAC1f,IAAP,CAAY89L,OAAZ,CAAtB;AACD;;AACD,SAASk9B,KAAT,CAAeyyC,KAAf,EAAsB7+D,OAAtB,EAA+B;AAC7B,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACIl7G,CADJ;AAAA,MAEIkO,CAFJ;AAGA,MAAI,CAACgtG,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B;AAC7B,QAAMq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAArB;;AAEA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B;AAC3B,SAAKU,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB3+D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACvB;;AAEDk7G,IAAAA,KAAK,GAAGy8J,MAAR;AACD;;AAED,OAAK33Q,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC44M,IAAAA,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAP;AACD;AACF;;AACD,SAAS43Q,SAAT,CAAmBH,KAAnB,EAA0B7+D,OAA1B,EAAmC;AACjC,MAAI19F,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,MACI28J,GADJ;AAAA,MAEI73Q,CAFJ;AAGA,MAAI,CAACk7G,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAArB,EAA6B,OAAO,IAAP;AAC7B,QAAMq4Q,MAAM,GAAGH,MAAM,CAACC,KAAD,CAArB;AACA,MAAIE,MAAM,IAAIA,MAAM,CAACr4Q,MAArB,EAA6B47G,KAAK,GAAGy8J,MAAR;;AAE7B,OAAK33Q,CAAC,GAAGk7G,KAAK,CAAC57G,MAAf,EAAuB,EAAEU,CAAF,IAAO,CAA9B,GAAkC;AAChC,QAAI63Q,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;;AAED,MAAI38J,KAAK,KAAKy8J,MAAd,EAAsB;AACpB,SAAKz8J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAd,EAAqBl7G,CAAC,GAAGk7G,KAAK,CAAC57G,MAApC,EAA4C,EAAEU,CAAF,IAAO,CAAnD,GAAuD;AACrD,UAAI,CAACk7G,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAd,EAAsB;AACpB,YAAIM,GAAG,GAAGj/D,OAAO,CAAC19F,KAAK,CAACl7G,CAAD,CAAN,CAAjB,EAA6B,OAAO63Q,GAAP;AAC9B;AACF;AACF;;AAED,SAAO,IAAP;AACD;;AAED,SAASC,OAAT,CAAiBzpQ,IAAjB,EAAuB;AACrB,SAAO,UAAU2jK,OAAV,EAAmBylG,KAAnB,EAA0B3E,MAA1B,EAAkC;AACvC9tC,IAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,UAAI,CAACkrP,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C;AAC7CiF,QAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBpqJ,IAAhB,EAAsBA,IAAtB,CAAR;AACD;AACF,KAJI,CAAL;AAKD,GAND;AAOD;;AACD,SAASowP,OAAT,CAAiB3pQ,IAAjB,EAAuB;AACrB,SAAO,UAAU2jK,OAAV,EAAmBylG,KAAnB,EAA0B3E,MAA1B,EAAkC;AACvC,QAAI2E,KAAK,CAACv8J,KAAN,CAAY57G,MAAZ,KAAuB,CAACwzQ,MAAD,IAAWA,MAAM,CAACplE,UAAP,CAAkB+pE,KAAK,CAAC3E,MAAxB,CAAlC,CAAJ,EAAwE;AACtEiF,MAAAA,QAAQ,CAAC1pQ,IAAD,EAAO2jK,OAAP,EAAgBylG,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAhB,EAAgCu8J,KAAK,CAACv8J,KAAtC,CAAR;AACD;AACF,GAJD;AAKD;;AAED,SAAS68J,QAAT,CAAkB1pQ,IAAlB,EAAwB2jK,OAAxB,EAAiCpqJ,IAAjC,EAAuCszF,KAAvC,EAA8C;AAC5C,MAAIs7I,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AACA,MAAIA,OAAO,KAAK,CAAhB,EAAmB;AACnB,MAAInoP,IAAI,CAAC2jK,OAAD,EAAU92D,KAAV,CAAR,EAA0B;AAC1B46J,EAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;;AAEA,MAAIA,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,IAAAA,OAAO,CAACxhK,IAAR;AACD;;AAED,MAAIoX,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,IAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;;AAED,SAASsE,IAAT,CAActqP,IAAd,EAAoB;AAClBA,EAAAA,IAAI,GAAGA,IAAI,IAAIymL,gBAAf;AACA,SAAO,UAAUpiC,OAAV,EAAmBylG,KAAnB,EAA0BtxQ,CAA1B,EAA6Bue,CAA7B,EAAgCwzP,EAAhC,EAAoCC,EAApC,EAAwC;AAC7ChyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AACA,WAAOR,SAAS,CAACH,KAAD,EAAQ7vP,IAAI,IAAI;AAC9B,YAAM7Z,CAAC,GAAG6Z,IAAI,CAACkrP,MAAf,CAD8B,CACP;;AAEvB,UAAI/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAN,IAA4B,CAACpqQ,CAAjC,EAAoC,OAHN,CAGc;;AAE5C,UAAI4f,IAAI,CAACqkJ,OAAD,EAAUpqJ,IAAV,EAAgBzhB,CAAhB,EAAmBue,CAAnB,EAAsBwzP,EAAtB,EAA0BC,EAA1B,CAAR,EAAuC,OAAOvwP,IAAP;AACxC,KANe,CAAhB;AAOD,GAVD;AAWD;;AACD,SAASywP,OAAT,CAAiBhqQ,IAAjB,EAAuBiqQ,MAAvB,EAA+B;AAC7B,SAAO,UAAUtmG,OAAV,EAAmBrmJ,CAAnB,EAAsBxlB,CAAtB,EAAyBue,CAAzB,EAA4B;AACjC,QAAIkD,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcskB,CAAd,IAAmBA,CAAC,CAAC,CAAD,CAApB,GAA0BA,CAArC;AAAA,QACInb,IAAI,GAAG8nQ,MAAM,IAAI,IAAV,GAAiB1wP,IAAI,CAACpX,IAAtB,GAA6B8nQ,MADxC;AAAA,QAEI3E,MAAM,GAAG/rP,IAAI,CAAC+rP,MAAL,IAAe3hG,OAAO,CAACumG,eAFpC;AAAA,QAGI5B,EAHJ;AAAA,QAIIv0B,EAJJ;;AAMA,QAAIuxB,MAAJ,EAAY;AACVgD,MAAAA,EAAE,GAAG/uP,IAAI,CAACksP,WAAV;AACA1xB,MAAAA,EAAE,GAAGx6N,IAAI,CAACmvP,SAAV;AACA/kG,MAAAA,OAAO,CAAC6kG,SAAR,GAAoBF,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,CAAtC;AACA3kG,MAAAA,OAAO,CAAC8kG,OAAR,GAAkB10B,EAAE,IAAI,IAAN,GAAaA,EAAb,GAAkB,MAApC;AACD;;AAED,WAAO/zO,IAAI,CAAC2jK,OAAD,EAAUrmJ,CAAV,CAAJ,GAAmB,KAAnB,GAA2Bnb,IAAI,IAAIwhK,OAAO,CAACyjG,aAAR,CAAsBtvQ,CAAtB,EAAyBue,CAAzB,CAAR,IAAuCivP,MAAM,IAAI3hG,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAAnF;AACD,GAfD;AAgBD;;AACD,SAAS8zP,QAAT,CAAkBnqQ,IAAlB,EAAwB;AACtB,SAAO4pQ,IAAI,CAACI,OAAO,CAAChqQ,IAAD,CAAR,CAAX;AACD;;AAED,SAASoyM,SAAT,CAAmBt6M,CAAnB,EAAsBue,CAAtB,EAAyB;AACvB,SAAO,eAAeve,CAAf,GAAmB,GAAnB,GAAyBue,CAAzB,GAA6B,GAApC;AACD;;AACD,SAAS61O,MAAT,CAAgBrzP,CAAhB,EAAmB;AACjB,SAAO,YAAYA,CAAZ,GAAgB,GAAvB;AACD;;AACD,SAASu9P,OAAT,CAAiBhK,MAAjB,EAAyBC,MAAzB,EAAiC;AAC/B,SAAO,WAAWD,MAAX,GAAoB,GAApB,GAA0BC,MAA1B,GAAmC,GAA1C;AACD;;AACD,SAAS+d,aAAT,CAAuB7wP,IAAvB,EAA6B;AAC3B,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAhB;AACD;;AACD,SAASg0P,UAAT,CAAoB9wP,IAApB,EAA0B;AACxB,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAT,IAAuCkD,IAAI,CAACu8N,KAAL,GAAa,MAAMoW,MAAM,CAAC3yO,IAAI,CAACu8N,KAAN,CAAzB,GAAwC,EAA/E,CAAP;AACD;;AACD,SAASw0B,aAAT,CAAuB/wP,IAAvB,EAA6B;AAC3B,SAAO64L,SAAS,CAAC74L,IAAI,CAACzhB,CAAL,IAAU,CAAX,EAAcyhB,IAAI,CAAClD,CAAL,IAAU,CAAxB,CAAT,IAAuCkD,IAAI,CAACu8N,KAAL,GAAa,MAAMoW,MAAM,CAAC3yO,IAAI,CAACu8N,KAAN,CAAzB,GAAwC,EAA/E,KAAsFv8N,IAAI,CAAC6yO,MAAL,IAAe7yO,IAAI,CAAC8yO,MAApB,GAA6B,MAAM+J,OAAO,CAAC78O,IAAI,CAAC6yO,MAAL,IAAe,CAAhB,EAAmB7yO,IAAI,CAAC8yO,MAAL,IAAe,CAAlC,CAA1C,GAAiF,EAAvK,CAAP;AACD;;AAED,SAASke,YAAT,CAAuB34P,IAAvB,EAA6BzY,KAA7B,EAAoCqxQ,KAApC,EAA2C;AACzC,WAAS/2O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,IAAAA,IAAI,CAAC,WAAD,EAAcu3Q,UAAU,CAAC9wP,IAAD,CAAxB,CAAJ;AACAzmB,IAAAA,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAOogB,IAAP,CAAX,CAAJ;AACD;;AAED,WAASkxP,KAAT,CAAehG,MAAf,EAAuBlrP,IAAvB,EAA6B;AAC3BpgB,IAAAA,KAAK,CAACmtQ,YAAY,CAAC7B,MAAD,EAASlrP,IAAI,CAACu8N,KAAd,CAAb,EAAmCv8N,IAAnC,CAAL;AACA,WAAO6rP,WAAW,CAACX,MAAD,EAASlrP,IAAT,CAAX,CAA0B64L,SAA1B,CAAoC74L,IAAI,CAACzhB,CAAL,IAAU,CAA9C,EAAiDyhB,IAAI,CAAClD,CAAL,IAAU,CAA3D,CAAP;AACD;;AAED,WAASwgO,IAAT,CAAclzE,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,QAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,QACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,QAEIxd,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CAFtB;AAGAnyE,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACA,QAAIxd,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAerzP,CAAC,IAAIwlQ,QAApB;AACP16F,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAUpqJ,IAAV,CAAL;AACA,QAAI1gB,CAAJ,EAAO8qK,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACP8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD;;AAED,SAAO;AACLzE,IAAAA,IAAI,EAAEA,IADD;AAEL84P,IAAAA,GAAG,EAAE,MAFA;AAGLC,IAAAA,MAAM,EAAE,KAHH;AAILl3O,IAAAA,IAAI,EAAEA,IAJD;AAKLg3O,IAAAA,KAAK,EAAEA,KALF;AAML5zB,IAAAA,IAAI,EAAE4yB,OAAO,CAAC5yB,IAAD,CANR;AAOL+yB,IAAAA,IAAI,EAAEO,QAAQ,CAACtzB,IAAD,CAPT;AAQL2zB,IAAAA,KAAK,EAAEA,KAAK,IAAItD,aAAa,CAACrwB,IAAD;AARxB,GAAP;AAUD;;AAED,IAAI+zB,KAAK,GAAGL,YAAY,CAAC,KAAD,EAAQ73D,GAAR,CAAxB;;AAEA,SAASm4D,QAAT,CAAkBhyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AACtB,MAAIpyB,CAAC,GAAGhL,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B3tO,CAAC,CAAC,CAAD,CAAhC,GAAsCA,CAAC,CAAC,CAAD,CAA/C;AAAA,MACImxC,CAAC,GAAGvuE,CAAC,CAAC,CAAD,CAAD,CAAK+qQ,MAAL,KAAgB,YAAhB,GAA+B,GAA/B,GAAqC,GAD7C;AAAA,MAEIjyQ,CAAC,GAAGkH,CAAC,CAAC5H,MAFV;AAAA,MAGI4G,GAAG,GAAG,CAAC4B,QAHX;AAAA,MAII+vQ,GAJJ;AAAA,MAKIhrQ,CALJ;;AAOA,SAAO,EAAE7M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bn7M,IAAAA,CAAC,GAAG9G,IAAI,CAACiT,GAAL,CAAS9R,CAAC,CAAClH,CAAD,CAAD,CAAKy1E,CAAL,IAAUvjE,CAAnB,CAAJ;;AAEA,QAAIrF,CAAC,GAAG3G,GAAR,EAAa;AACXA,MAAAA,GAAG,GAAG2G,CAAN;AACAgrQ,MAAAA,GAAG,GAAG3wQ,CAAC,CAAClH,CAAD,CAAP;AACD;AACF;;AAED,SAAO63Q,GAAP;AACD;;AACD,SAASsB,QAAT,CAAkBjyQ,CAAlB,EAAqBo9B,CAArB,EAAwB;AACtB,MAAI5gC,CAAC,GAAGqC,IAAI,CAAC0Q,GAAL,CAASvP,CAAC,CAAC,CAAD,CAAD,CAAK4sQ,WAAL,IAAoB,CAA7B,EAAgC,CAAhC,CAAR;AAAA,MACI9zQ,CAAC,GAAGkH,CAAC,CAAC5H,MADV;AAAA,MAEIwsB,EAFJ;AAAA,MAGIhH,EAHJ;AAAA,MAII0wL,EAJJ;;AAMA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACA,QAAI0wL,EAAE,GAAG9xM,CAAT,EAAY,OAAOwD,CAAC,CAAClH,CAAD,CAAR;AACb;;AAED,SAAO,IAAP;AACD;;AACD,SAASo5Q,SAAT,CAAmBlyQ,CAAnB,EAAsBo9B,CAAtB,EAAyB;AACvB,MAAItkC,CAAC,GAAGkH,CAAC,CAAC5H,MAAV;AAAA,MACIwsB,EADJ;AAAA,MAEIhH,EAFJ;AAAA,MAGI0wL,EAHJ;;AAKA,SAAO,EAAEx1M,CAAF,IAAO,CAAd,EAAiB;AACf,QAAIkH,CAAC,CAAClH,CAAD,CAAD,CAAKgoN,OAAL,KAAiB,KAArB,EAA4B;AAC5Bl8L,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKmG,CAAL,GAASm+B,CAAC,CAAC,CAAD,CAAf;AACAxf,IAAAA,EAAE,GAAG5d,CAAC,CAAClH,CAAD,CAAD,CAAK0kB,CAAL,GAAS4f,CAAC,CAAC,CAAD,CAAf;AACAkxK,IAAAA,EAAE,GAAG1pL,EAAE,GAAGA,EAAL,GAAUhH,EAAE,GAAGA,EAApB;AACAgH,IAAAA,EAAE,GAAG5kB,CAAC,CAAClH,CAAD,CAAD,CAAKyH,IAAL,IAAa,CAAlB;AACA,QAAI+tM,EAAE,GAAG1pL,EAAE,GAAGA,EAAd,EAAkB,OAAO5kB,CAAC,CAAClH,CAAD,CAAR;AACnB;;AAED,SAAO,IAAP;AACD;;AAED,SAASq5Q,iBAAT,CAA4Bp5P,IAA5B,EAAkCzY,KAAlC,EAAyC8xQ,GAAzC,EAA8C;AAC5C,WAASx3O,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxB,QAAIszF,KAAK,GAAGtzF,IAAI,CAACsqP,IAAL,CAAUh3J,KAAtB;AACA,QAAIA,KAAK,CAAC57G,MAAV,EAAkB6B,IAAI,CAAC,GAAD,EAAMqG,KAAK,CAAC,IAAD,EAAO0zG,KAAP,CAAX,CAAJ;AACnB;;AAED,WAAS49J,KAAT,CAAehG,MAAf,EAAuBZ,IAAvB,EAA6B;AAC3B,QAAIh3J,KAAK,GAAGg3J,IAAI,CAACh3J,KAAjB;;AAEA,QAAIA,KAAK,CAAC57G,MAAN,KAAiB,CAArB,EAAwB;AACtB,aAAOwzQ,MAAP;AACD,KAFD,MAEO;AACLtrQ,MAAAA,KAAK,CAACmtQ,YAAY,CAAC7B,MAAD,CAAb,EAAuB53J,KAAvB,CAAL;AACA,aAAOu4J,WAAW,CAACX,MAAD,EAAS53J,KAAK,CAAC,CAAD,CAAd,CAAlB;AACD;AACF;;AAED,WAASgqI,IAAT,CAAclzE,OAAd,EAAuB92D,KAAvB,EAA8B;AAC5B82D,IAAAA,OAAO,CAACq9F,SAAR;AACA7nQ,IAAAA,KAAK,CAACwqK,OAAD,EAAU92D,KAAV,CAAL;AACD;;AAED,QAAM28J,GAAG,GAAGQ,OAAO,CAACnzB,IAAD,CAAnB;;AAEA,WAAS+yB,IAAT,CAAcjmG,OAAd,EAAuBylG,KAAvB,EAA8BtxQ,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,QAAIj9J,KAAK,GAAGu8J,KAAK,CAACv8J,KAAlB;AAAA,QACIntG,CAAC,GAAG0pQ,KAAK,CAAC3E,MADd;;AAGA,QAAI,CAAC53J,KAAD,IAAU,CAACA,KAAK,CAAC57G,MAAjB,IAA2ByO,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAArC,EAAyD;AACvD,aAAO,IAAP;AACD;;AAEDhyQ,IAAAA,CAAC,IAAI6rK,OAAO,CAAComG,UAAb;AACA1zP,IAAAA,CAAC,IAAIstJ,OAAO,CAAComG,UAAb;AACA,WAAOP,GAAG,CAAC7lG,OAAD,EAAU92D,KAAV,EAAiB/0G,CAAjB,EAAoBue,CAApB,CAAH,GAA4Bw2F,KAAK,CAAC,CAAD,CAAjC,GAAuC,IAA9C;AACD;;AAED,SAAO;AACLj7F,IAAAA,IAAI,EAAEA,IADD;AAEL84P,IAAAA,GAAG,EAAE,MAFA;AAGLC,IAAAA,MAAM,EAAE,IAHH;AAILl3O,IAAAA,IAAI,EAAEA,IAJD;AAKLg3O,IAAAA,KAAK,EAAEA,KALF;AAML5zB,IAAAA,IAAI,EAAE8yB,OAAO,CAAC9yB,IAAD,CANR;AAOL+yB,IAAAA,IAAI,EAAEA,IAPD;AAQLY,IAAAA,KAAK,EAAEnD,cARF;AASL4D,IAAAA,GAAG,EAAEA;AATA,GAAP;AAWD;;AAED,IAAIC,MAAM,GAAGF,iBAAiB,CAAC,MAAD,EAASv2D,IAAT,EAAeo2D,QAAf,CAA9B;;AAEA,SAASM,MAAT,CAAiBxnG,OAAjB,EAA0BylG,KAA1B,EAAiC;AAC/B,MAAIvvO,IAAI,GAAGuvO,KAAK,CAACvvO,IAAjB;AACA8pI,EAAAA,OAAO,CAAC5lJ,IAAR;;AAEA,MAAI,0BAAW8b,IAAX,CAAJ,EAAsB;AACpB8pI,IAAAA,OAAO,CAACq9F,SAAR;AACAnnO,IAAAA,IAAI,CAAC8pI,OAAD,CAAJ;AACAA,IAAAA,OAAO,CAAC9pI,IAAR;AACD,GAJD,MAIO;AACLuxO,IAAAA,SAAS,CAACznG,OAAD,EAAUylG,KAAK,CAAC9rJ,KAAhB,CAAT;AACD;AACF;;AACD,SAAS8tJ,SAAT,CAAmBznG,OAAnB,EAA4BrmD,KAA5B,EAAmC;AACjCqmD,EAAAA,OAAO,CAACq9F,SAAR;AACA2C,EAAAA,eAAe,CAACrmJ,KAAD,CAAf,GAAyB0kJ,SAAS,CAACr+F,OAAD,EAAUrmD,KAAV,EAAiB,CAAjB,EAAoB,CAApB,CAAlC,GAA2DqmD,OAAO,CAAC6sE,IAAR,CAAa,CAAb,EAAgB,CAAhB,EAAmBlzH,KAAK,CAACzjH,KAAN,IAAe,CAAlC,EAAqCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAArD,CAA3D;AACA+7I,EAAAA,OAAO,CAAC9pI,IAAR;AACD;;AAED,SAASv7B,MAAT,CAAgBib,IAAhB,EAAsB;AACpB,QAAMisP,EAAE,GAAGmC,OAAO,CAACpuP,IAAI,CAACksP,WAAN,EAAmB,CAAnB,CAAlB;AACA,SAAOlsP,IAAI,CAAC8xP,YAAL,IAAqB,IAArB,GAA4B9xP,IAAI,CAAC8xP,YAAjC,GAAgD9xP,IAAI,CAAC+rP,MAAL,IAAeE,EAAE,GAAG,GAApB,IAA2BA,EAAE,GAAG,GAAhC,GAAsC,MAAM9tQ,IAAI,CAACiT,GAAL,CAAS66P,EAAE,GAAG,CAAd,CAA5C,GAA+D,CAAtH;AACD;;AAED,SAAS/xO,IAAT,CAAc3gC,IAAd,EAAoBymB,IAApB,EAA0B;AACxBzmB,EAAAA,IAAI,CAAC,WAAD,EAAcs3Q,aAAa,CAAC7wP,IAAD,CAA3B,CAAJ;AACD;;AAED,SAAS+xP,aAAT,CAAuBx4Q,IAAvB,EAA6BymB,IAA7B,EAAmC;AACjC,QAAM5mB,GAAG,GAAG2L,MAAM,CAACib,IAAD,CAAlB;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAMkvQ,SAAS,CAAC,IAAD,EAAOzoP,IAAP,EAAa5mB,GAAb,EAAkBA,GAAlB,CAAf,CAAJ;AACD;;AAED,SAAS44Q,UAAT,CAAoBz4Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;AACAw4Q,EAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD;;AAED,SAASiyP,UAAT,CAAoB14Q,IAApB,EAA0BymB,IAA1B,EAAgC;AAC9BzmB,EAAAA,IAAI,CAAC,OAAD,EAAU,YAAV,CAAJ;AACAA,EAAAA,IAAI,CAAC,aAAD,EAAgB,IAAhB,CAAJ;;AAEA,MAAIymB,IAAI,CAACkyP,gBAAT,EAA2B;AACzBH,IAAAA,aAAa,CAACx4Q,IAAD,EAAOymB,IAAP,CAAb;AACD,GAFD,MAEO;AACLzmB,IAAAA,IAAI,CAAC,GAAD,EAAM,EAAN,CAAJ;AACD;AACF;;AAED,SAAS44Q,OAAT,CAAiB54Q,IAAjB,EAAuBymB,IAAvB,EAA6ByqP,QAA7B,EAAuC;AACrC,QAAMj2J,GAAG,GAAGx0F,IAAI,CAACsgB,IAAL,GAAYA,IAAI,CAACmqO,QAAD,EAAWzqP,IAAX,EAAiBA,IAAjB,CAAhB,GAAyC,IAArD;AACAzmB,EAAAA,IAAI,CAAC,WAAD,EAAci7G,GAAd,CAAJ;AACD;;AAED,SAAS08J,KAAT,CAAehG,MAAf,EAAuBnnJ,KAAvB,EAA8B;AAC5B,MAAI,CAACA,KAAK,CAACzjF,IAAP,IAAeyjF,KAAK,CAACzQ,KAAzB,EAAgC;AAC9B,UAAMA,KAAK,GAAGyQ,KAAK,CAACzQ,KAApB;AAAA,UACMzjB,CAAC,GAAGyjB,KAAK,CAAC57G,MADhB;;AAGA,SAAK,IAAI2K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtF,CAApB,EAAuB,EAAExtF,CAAzB,EAA4B;AAC1B6oQ,MAAAA,MAAM,CAAClqD,KAAP,CAAa1tG,KAAK,CAACjxG,CAAD,CAAL,CAAS6oQ,MAAtB;AACD;AACF;;AAED,MAAI,CAACnnJ,KAAK,CAACzjF,IAAN,IAAcyjF,KAAK,CAACzjH,KAApB,IAA6ByjH,KAAK,CAAC11F,MAApC,KAA+C,CAAC01F,KAAK,CAACquJ,OAA1D,EAAmE;AACjElH,IAAAA,MAAM,CAACnyP,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBA,GAAjB,CAAqBgrG,KAAK,CAACzjH,KAAN,IAAe,CAApC,EAAuCyjH,KAAK,CAAC11F,MAAN,IAAgB,CAAvD;AACD;;AAEDw9O,EAAAA,WAAW,CAACX,MAAD,EAASnnJ,KAAT,CAAX;AACA,SAAOmnJ,MAAM,CAACryD,SAAP,CAAiB90F,KAAK,CAACxlH,CAAN,IAAW,CAA5B,EAA+BwlH,KAAK,CAACjnG,CAAN,IAAW,CAA1C,CAAP;AACD;;AAED,SAASu1P,aAAT,CAAuBjoG,OAAvB,EAAgCrmD,KAAhC,EAAuCxlH,CAAvC,EAA0Cue,CAA1C,EAA6C;AAC3C,QAAM1jB,GAAG,GAAG2L,MAAM,CAACg/G,KAAD,CAAlB;AACAqmD,EAAAA,OAAO,CAACq9F,SAAR;AACAgB,EAAAA,SAAS,CAACr+F,OAAD,EAAUrmD,KAAV,EAAiB,CAACxlH,CAAC,IAAI,CAAN,IAAWnF,GAA5B,EAAiC,CAAC0jB,CAAC,IAAI,CAAN,IAAW1jB,GAA5C,CAAT;AACD;;AAED,MAAMk5Q,aAAa,GAAG7B,OAAO,CAAC4B,aAAD,CAA7B;AACA,MAAME,aAAa,GAAG9B,OAAO,CAAC4B,aAAD,EAAgB,KAAhB,CAA7B;AACA,MAAMG,SAAS,GAAG/B,OAAO,CAAC4B,aAAD,EAAgB,IAAhB,CAAzB;;AAEA,SAAS/0B,IAAT,CAAclzE,OAAd,EAAuBylG,KAAvB,EAA8B3E,MAA9B,EAAsC;AACpC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ9rJ,KAAK,IAAI;AACpB,UAAMusJ,EAAE,GAAGvsJ,KAAK,CAACxlH,CAAN,IAAW,CAAtB;AAAA,UACMgyQ,EAAE,GAAGxsJ,KAAK,CAACjnG,CAAN,IAAW,CADtB;AAAA,UAEM21P,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAFnB;AAAA,UAGMtjB,OAAO,GAAG7qI,KAAK,CAAC6qI,OAAN,IAAiB,IAAjB,GAAwB,CAAxB,GAA4B7qI,KAAK,CAAC6qI,OAHlD,CADoB,CAIuC;;AAE3D,QAAI,CAAC7qI,KAAK,CAACgoJ,MAAN,IAAgBhoJ,KAAK,CAACn7G,IAAvB,KAAgCgmP,OAApC,EAA6C;AAC3CyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACArC,MAAAA,KAAK,CAAC9jG,OAAD,EAAUrmD,KAAV,CAAL;;AAEA,UAAIA,KAAK,CAACn7G,IAAN,IAAcA,IAAI,CAACwhK,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAtB,EAAiD;AAC/CxkF,QAAAA,OAAO,CAACxhK,IAAR;AACD;;AAED,UAAIm7G,KAAK,CAACgoJ,MAAN,IAAgB,CAAC0G,IAAjB,IAAyB1G,MAAM,CAAC3hG,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAnC,EAA8D;AAC5DxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,KAjBmB,CAiBlB;;;AAGF3hG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkBy3D,EAAlB,EAAsBC,EAAtB;AACA,QAAIxsJ,KAAK,CAACzjF,IAAV,EAAgBuxO,SAAS,CAACznG,OAAD,EAAUrmD,KAAV,CAAT;AAChB,QAAImnJ,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiB,CAACy3D,EAAlB,EAAsB,CAACC,EAAvB,EAvBQ,CAuBoB;;AAExCnzC,IAAAA,KAAK,CAACr5G,KAAD,EAAQ/jG,IAAI,IAAI;AACnB,WAAKs9N,IAAL,CAAUlzE,OAAV,EAAmBpqJ,IAAnB,EAAyBkrP,MAAzB;AACD,KAFI,CAAL,CAzBoB,CA2BhB;;AAEJ,QAAIA,MAAJ,EAAYA,MAAM,CAACryD,SAAP,CAAiBy3D,EAAjB,EAAqBC,EAArB;AACZnmG,IAAAA,OAAO,CAACsoG,OAAR,GA9BoB,CA8BD;;AAEnB,QAAID,IAAI,IAAI1uJ,KAAK,CAACgoJ,MAAd,IAAwBnd,OAA5B,EAAqC;AACnCyjB,MAAAA,aAAa,CAACjoG,OAAD,EAAUrmD,KAAV,EAAiBusJ,EAAjB,EAAqBC,EAArB,CAAb;AACArC,MAAAA,KAAK,CAAC9jG,OAAD,EAAUrmD,KAAV,CAAL;;AAEA,UAAIgoJ,MAAM,CAAC3hG,OAAD,EAAUrmD,KAAV,EAAiB6qI,OAAjB,CAAV,EAAqC;AACnCxkF,QAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF;AACF,GAxCI,CAAL;AAyCD;;AAED,SAAS4G,MAAT,CAAgBvoG,OAAhB,EAAyBylG,KAAzB,EAAgCtxQ,CAAhC,EAAmCue,CAAnC,EAAsCwzP,EAAtC,EAA0CC,EAA1C,EAA8C;AAC5C,MAAIV,KAAK,CAAC3E,MAAN,IAAgB,CAAC2E,KAAK,CAAC3E,MAAN,CAAaD,QAAb,CAAsBqF,EAAtB,EAA0BC,EAA1B,CAAjB,IAAkD,CAACV,KAAK,CAACv8J,KAA7D,EAAoE;AAClE,WAAO,IAAP;AACD;;AAED,QAAM+lI,EAAE,GAAG96O,CAAC,GAAG6rK,OAAO,CAAComG,UAAvB;AAAA,QACMl3B,EAAE,GAAGx8N,CAAC,GAAGstJ,OAAO,CAAComG,UADvB;AAEA,SAAOR,SAAS,CAACH,KAAD,EAAQ9rJ,KAAK,IAAI;AAC/B,QAAIksJ,GAAJ,EAAS/rP,EAAT,EAAahH,EAAb,CAD+B,CACd;;AAEjB,UAAM/W,CAAC,GAAG49G,KAAK,CAACmnJ,MAAhB;AACA,QAAI/kQ,CAAC,IAAI,CAACA,CAAC,CAAC8kQ,QAAF,CAAWqF,EAAX,EAAeC,EAAf,CAAV,EAA8B,OAJC,CAIO;;AAEtCrsP,IAAAA,EAAE,GAAG6/F,KAAK,CAACxlH,CAAN,IAAW,CAAhB;AACA2e,IAAAA,EAAE,GAAG6mG,KAAK,CAACjnG,CAAN,IAAW,CAAhB;AACA,UAAMqhF,EAAE,GAAGj6E,EAAE,IAAI6/F,KAAK,CAACzjH,KAAN,IAAe,CAAnB,CAAb;AAAA,UACMsyQ,EAAE,GAAG11P,EAAE,IAAI6mG,KAAK,CAAC11F,MAAN,IAAgB,CAApB,CADb;AAAA,UAEMxpB,CAAC,GAAGk/G,KAAK,CAACzjF,IAFhB;AAGA,QAAIz7B,CAAC,KAAKyrQ,EAAE,GAAGpsP,EAAL,IAAWosP,EAAE,GAAGnyK,EAAhB,IAAsBoyK,EAAE,GAAGrzP,EAA3B,IAAiCqzP,EAAE,GAAGqC,EAA3C,CAAL,EAAqD,OAXtB,CAW8B;;AAE7DxoG,IAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,IAAAA,OAAO,CAACyuC,SAAR,CAAkB30L,EAAlB,EAAsBhH,EAAtB;AACAgH,IAAAA,EAAE,GAAGosP,EAAE,GAAGpsP,EAAV;AACAhH,IAAAA,EAAE,GAAGqzP,EAAE,GAAGrzP,EAAV,CAhB+B,CAgBjB;;AAEd,QAAIrY,CAAC,IAAIulQ,eAAe,CAACrmJ,KAAD,CAApB,IAA+B,CAACyuJ,SAAS,CAACpoG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAA7C,EAAuE;AACrElvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO,IAAP;AACD;;AAED,UAAMD,IAAI,GAAG1uJ,KAAK,CAACmuJ,gBAAnB;AAAA,UACMW,EAAE,GAAGhD,KAAK,CAACiD,WAAN,KAAsB,KADjC,CAvB+B,CAwBS;;AAExC,QAAID,EAAE,IAAIJ,IAAN,IAAc1uJ,KAAK,CAACgoJ,MAApB,IAA8BwG,aAAa,CAACnoG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAA/C,EAAyE;AACvElvE,MAAAA,OAAO,CAACsoG,OAAR;AACA,aAAO3uJ,KAAP;AACD,KA7B8B,CA6B7B;;;AAGFksJ,IAAAA,GAAG,GAAGD,SAAS,CAACjsJ,KAAD,EAAQumJ,IAAI,IAAIyI,QAAQ,CAACzI,IAAD,EAAOpmP,EAAP,EAAWhH,EAAX,CAAR,GAAyB,KAAKmzP,IAAL,CAAU/F,IAAV,EAAgB/rQ,CAAhB,EAAmBue,CAAnB,EAAsBoH,EAAtB,EAA0BhH,EAA1B,CAAzB,GAAyD,IAAzE,CAAf,CAhC+B,CAgCgE;;AAE/F,QAAI,CAAC+yP,GAAD,IAAQ4C,EAAR,KAAe9uJ,KAAK,CAACn7G,IAAN,IAAc,CAAC6pQ,IAAD,IAAS1uJ,KAAK,CAACgoJ,MAA5C,KAAuDuG,aAAa,CAACloG,OAAD,EAAUrmD,KAAV,EAAiBs1H,EAAjB,EAAqBC,EAArB,CAAxE,EAAkG;AAChG22B,MAAAA,GAAG,GAAGlsJ,KAAN;AACD,KApC8B,CAoC7B;;;AAGFqmD,IAAAA,OAAO,CAACsoG,OAAR;AACA,WAAOzC,GAAG,IAAI,IAAd;AACD,GAzCe,CAAhB;AA0CD;;AAED,SAAS8C,QAAT,CAAkBzI,IAAlB,EAAwB/rQ,CAAxB,EAA2Bue,CAA3B,EAA8B;AAC5B,SAAO,CAACwtP,IAAI,CAACwI,WAAL,KAAqB,KAArB,IAA8BxI,IAAI,CAAC0I,QAAL,KAAkB,OAAjD,KAA6D1I,IAAI,CAACY,MAAlE,IAA4EZ,IAAI,CAACY,MAAL,CAAYD,QAAZ,CAAqB1sQ,CAArB,EAAwBue,CAAxB,CAAnF;AACD;;AAED,IAAIinG,KAAK,GAAG;AACV1rG,EAAAA,IAAI,EAAE,OADI;AAEV84P,EAAAA,GAAG,EAAE,GAFK;AAGVC,EAAAA,MAAM,EAAE,KAHE;AAIVl3O,EAAAA,IAAI,EAAEA,IAJI;AAKVg3O,EAAAA,KAAK,EAAEA,KALG;AAMV5zB,EAAAA,IAAI,EAAEA,IANI;AAOV+yB,EAAAA,IAAI,EAAEsC,MAPI;AAQV1B,EAAAA,KAAK,EAAElD,aARG;AASVoE,EAAAA,OAAO,EAAEA,OATC;AAUVH,EAAAA,UAAU,EAAEA,UAVF;AAWVC,EAAAA,UAAU,EAAEA;AAXF,CAAZ;AAcA,IAAI/2J,QAAQ,GAAG;AACb,WAAS,4BADI;AAEb,iBAAe,8BAFF;AAGb,aAAW;AAHE,CAAf;;AAMA,SAAS+3J,QAAT,CAAkBjzP,IAAlB,EAAwByqP,QAAxB,EAAkC;AAChC,MAAIr3P,KAAK,GAAG4M,IAAI,CAAC5M,KAAjB;;AAEA,MAAI,CAACA,KAAD,IAAU4M,IAAI,CAACw0F,GAAL,IAAYx0F,IAAI,CAACw0F,GAAL,KAAaphG,KAAK,CAACohG,GAA7C,EAAkD;AAChDphG,IAAAA,KAAK,GAAG;AACNu4P,MAAAA,QAAQ,EAAE,KADJ;AAENrrQ,MAAAA,KAAK,EAAE,CAFD;AAGN+tB,MAAAA,MAAM,EAAE;AAHF,KAAR;AAKAo8O,IAAAA,QAAQ,CAACgB,SAAT,CAAmBzrP,IAAI,CAACw0F,GAAxB,EAA6BntG,IAA7B,CAAkC+L,KAAK,IAAI;AACzC4M,MAAAA,IAAI,CAAC5M,KAAL,GAAaA,KAAb;AACA4M,MAAAA,IAAI,CAAC5M,KAAL,CAAWohG,GAAX,GAAiBx0F,IAAI,CAACw0F,GAAtB;AACD,KAHD;AAID;;AAED,SAAOphG,KAAP;AACD;;AAED,SAASgsC,UAAT,CAAoBp/B,IAApB,EAA0B5M,KAA1B,EAAiC;AAC/B,SAAO4M,IAAI,CAAC1f,KAAL,IAAc,IAAd,GAAqB0f,IAAI,CAAC1f,KAA1B,GAAkC,CAAC8S,KAAD,IAAU,CAACA,KAAK,CAAC9S,KAAjB,GAAyB,CAAzB,GAA6B0f,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAACqO,MAA9B,GAAuCrO,IAAI,CAACqO,MAAL,GAAcjb,KAAK,CAAC9S,KAApB,GAA4B8S,KAAK,CAACib,MAAzE,GAAkFjb,KAAK,CAAC9S,KAA9J;AACD;;AAED,SAAS6+C,WAAT,CAAqBn/B,IAArB,EAA2B5M,KAA3B,EAAkC;AAChC,SAAO4M,IAAI,CAACqO,MAAL,IAAe,IAAf,GAAsBrO,IAAI,CAACqO,MAA3B,GAAoC,CAACjb,KAAD,IAAU,CAACA,KAAK,CAACib,MAAjB,GAA0B,CAA1B,GAA8BrO,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,IAAyBlzP,IAAI,CAAC1f,KAA9B,GAAsC0f,IAAI,CAAC1f,KAAL,GAAa8S,KAAK,CAACib,MAAnB,GAA4Bjb,KAAK,CAAC9S,KAAxE,GAAgF8S,KAAK,CAACib,MAA/J;AACD;;AAED,SAAS8kP,YAAT,CAAsBxiE,KAAtB,EAA6BjsJ,CAA7B,EAAgC;AAC9B,SAAOisJ,KAAK,KAAK,QAAV,GAAqBjsJ,CAAC,GAAG,CAAzB,GAA6BisJ,KAAK,KAAK,OAAV,GAAoBjsJ,CAApB,GAAwB,CAA5D;AACD;;AAED,SAAS0uN,YAAT,CAAsBxqG,QAAtB,EAAgCjkH,CAAhC,EAAmC;AACjC,SAAOikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAC,GAAG,CAA5B,GAAgCikH,QAAQ,KAAK,QAAb,GAAwBjkH,CAAxB,GAA4B,CAAnE;AACD;;AAED,SAAS0uN,MAAT,CAAgB95Q,IAAhB,EAAsBymB,IAAtB,EAA4ByqP,QAA5B,EAAsC;AACpC,QAAMhlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAOyqP,QAAP,CAApB;AAAA,QACM/lN,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAAA,QAKMvsD,CAAC,GAAG,CAACqtH,GAAG,CAACwnE,GAAL,IAAYxnE,GAAG,CAAC6tJ,SAAhB,GAA4B7tJ,GAAG,CAAC6tJ,SAAJ,EAA5B,GAA8C7tJ,GAAG,CAACwnE,GAAJ,IAAW,EALnE;AAMA1zL,EAAAA,IAAI,CAAC,MAAD,EAASnB,CAAT,EAAY8iH,QAAQ,CAAC,aAAD,CAApB,EAAqC,YAArC,CAAJ;AACA3hH,EAAAA,IAAI,CAAC,WAAD,EAAcs/M,SAAS,CAACt6M,CAAD,EAAIue,CAAJ,CAAvB,CAAJ;AACAvjB,EAAAA,IAAI,CAAC,OAAD,EAAUmrD,CAAV,CAAJ;AACAnrD,EAAAA,IAAI,CAAC,QAAD,EAAWorD,CAAX,CAAJ;AACAprD,EAAAA,IAAI,CAAC,qBAAD,EAAwBymB,IAAI,CAACkzP,MAAL,KAAgB,KAAhB,GAAwB,MAAxB,GAAiC,UAAzD,CAAJ;AACD;;AAED,SAASK,OAAT,CAAiBrI,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,QAAMylG,GAAG,GAAGzlG,IAAI,CAAC5M,KAAjB;AAAA,QACMsxC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CADpB;AAAA,QAEM9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CAFrB;AAAA,QAGMlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAHtC;AAAA,QAIM5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAJtC;AAKA,SAAOumN,MAAM,CAACnwQ,GAAP,CAAWwD,CAAX,EAAcue,CAAd,EAAiBve,CAAC,GAAGmmD,CAArB,EAAwB5nC,CAAC,GAAG6nC,CAA5B,CAAP;AACD;;AAED,SAAS6uN,MAAT,CAAgBppG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OAD5B,CACoC;;AAEvD,UAAMzlJ,GAAG,GAAGwtJ,QAAQ,CAACjzP,IAAD,EAAO,IAAP,CAApB;AACA,QAAI0kC,CAAC,GAAGtF,UAAU,CAACp/B,IAAD,EAAOylG,GAAP,CAAlB;AAAA,QACI9gE,CAAC,GAAGxF,WAAW,CAACn/B,IAAD,EAAOylG,GAAP,CADnB;AAAA,QAEIlnH,CAAC,GAAG,CAACyhB,IAAI,CAACzhB,CAAL,IAAU,CAAX,IAAgB40Q,YAAY,CAACnzP,IAAI,CAAC2wL,KAAN,EAAajsJ,CAAb,CAFpC;AAAA,QAGI5nC,CAAC,GAAG,CAACkD,IAAI,CAAClD,CAAL,IAAU,CAAX,IAAgBs2P,YAAY,CAACpzP,IAAI,CAAC4oJ,QAAN,EAAgBjkH,CAAhB,CAHpC;AAAA,QAIIiqM,OAJJ;AAAA,QAKI6kB,GALJ;AAAA,QAMIC,GANJ;AAAA,QAOI53Q,CAPJ;;AASA,QAAIkkB,IAAI,CAACkzP,MAAL,KAAgB,KAApB,EAA2B;AACzBO,MAAAA,GAAG,GAAGhuJ,GAAG,CAACnlH,KAAJ,GAAYmlH,GAAG,CAACp3F,MAAtB;AACAqlP,MAAAA,GAAG,GAAG1zP,IAAI,CAAC1f,KAAL,GAAa0f,IAAI,CAACqO,MAAxB;;AAEA,UAAIolP,GAAG,KAAKA,GAAR,IAAeC,GAAG,KAAKA,GAAvB,IAA8BD,GAAG,KAAKC,GAA1C,EAA+C;AAC7C,YAAIA,GAAG,GAAGD,GAAV,EAAe;AACb33Q,UAAAA,CAAC,GAAG4oD,CAAC,GAAG+uN,GAAR;AACA32P,UAAAA,CAAC,IAAI,CAAC6nC,CAAC,GAAG7oD,CAAL,IAAU,CAAf;AACA6oD,UAAAA,CAAC,GAAG7oD,CAAJ;AACD,SAJD,MAIO;AACLA,UAAAA,CAAC,GAAG6oD,CAAC,GAAG8uN,GAAR;AACAl1Q,UAAAA,CAAC,IAAI,CAACmmD,CAAC,GAAG5oD,CAAL,IAAU,CAAf;AACA4oD,UAAAA,CAAC,GAAG5oD,CAAJ;AACD;AACF;AACF;;AAED,QAAI2pH,GAAG,CAACkmJ,QAAJ,IAAgBlmJ,GAAG,CAAC6tJ,SAAxB,EAAmC;AACjCpF,MAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;AACAoqJ,MAAAA,OAAO,CAAC0kG,WAAR,GAAsB,CAAClgB,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAhB,KAA4B,IAA5B,GAAmCA,OAAnC,GAA6C,CAAnE;AACAxkF,MAAAA,OAAO,CAACupG,qBAAR,GAAgC3zP,IAAI,CAACohN,MAAL,KAAgB,KAAhD;AACAh3D,MAAAA,OAAO,CAACt7D,SAAR,CAAkB2W,GAAlB,EAAuBlnH,CAAvB,EAA0Bue,CAA1B,EAA6B4nC,CAA7B,EAAgCC,CAAhC;AACD;AACF,GApCI,CAAL;AAqCD;;AAED,IAAIvxC,KAAK,GAAG;AACViF,EAAAA,IAAI,EAAE,OADI;AAEV84P,EAAAA,GAAG,EAAE,OAFK;AAGVC,EAAAA,MAAM,EAAE,KAHE;AAIVl3O,EAAAA,IAAI,EAAEm5O,MAJI;AAKVnC,EAAAA,KAAK,EAAEqC,OALG;AAMVj2B,EAAAA,IAAI,EAAEk2B,MANI;AAOVnD,EAAAA,IAAI,EAAEA,IAAI,EAPA;AAQVY,EAAAA,KAAK,EAAEzkE,gBARG;AASV;AACAtxM,EAAAA,GAAG,EAAE+3Q,QAVK;AAWVW,EAAAA,OAAO,EAAET,YAXC;AAYVU,EAAAA,OAAO,EAAET;AAZC,CAAZ;AAeA,IAAIU,MAAM,GAAGrC,iBAAiB,CAAC,MAAD,EAAS9kP,IAAT,EAAe4kP,QAAf,CAA9B;;AAEA,SAASwC,MAAT,CAAgBx6Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1B,MAAIg0P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAAxB;AAAA,MACIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CADxB;;AAGA,MAAIkhB,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;AACxB16Q,IAAAA,IAAI,CAAC,eAAD,EAAkB,oBAAlB,CAAJ;AACD;;AAEDA,EAAAA,IAAI,CAAC,WAAD,EAAcw3Q,aAAa,CAAC/wP,IAAD,CAA3B,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,GAAD,EAAMymB,IAAI,CAACvZ,IAAX,CAAJ;AACD;;AAED,SAASA,IAAT,CAAc2jK,OAAd,EAAuBpqJ,IAAvB,EAA6B;AAC3B,MAAIvZ,IAAI,GAAGuZ,IAAI,CAACvZ,IAAhB;AACA,MAAIA,IAAI,IAAI,IAAZ,EAAkB,OAAO,IAAP;AAClB,MAAIlI,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEIk3P,EAAE,GAAGh0P,IAAI,CAAC6yO,MAAL,IAAe,CAFxB;AAAA,MAGIohB,EAAE,GAAGj0P,IAAI,CAAC8yO,MAAL,IAAe,CAHxB;AAAA,MAIIxzP,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAL,IAAc,CAAf,IAAoBuoB,QAJ5B;AAAA,MAKI91E,KAAK,GAAGhvK,IAAI,CAACk0P,SALjB;;AAOA,MAAI,CAACllF,KAAD,IAAUA,KAAK,CAACvoL,IAAN,KAAeA,IAA7B,EAAmC;AACjC,KAACuZ,IAAI,CAACk0P,SAAL,GAAiBllF,KAAK,GAAG21E,SAAS,CAACl+P,IAAD,CAAnC,EAA2CA,IAA3C,GAAkDA,IAAlD;AACD;;AAED,MAAInH,CAAC,IAAI8qK,OAAO,CAACuoF,MAAb,IAAuBvoF,OAAO,CAACyuC,SAAnC,EAA8C;AAC5CzuC,IAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,IAAAA,OAAO,CAACuoF,MAAR,CAAerzP,CAAf;AACA4nQ,IAAAA,UAAU,CAAC98F,OAAD,EAAU4kB,KAAV,EAAiB,CAAjB,EAAoB,CAApB,EAAuBglF,EAAvB,EAA2BC,EAA3B,CAAV;AACA7pG,IAAAA,OAAO,CAACuoF,MAAR,CAAe,CAACrzP,CAAhB;AACA8qK,IAAAA,OAAO,CAACyuC,SAAR,CAAkB,CAACt6M,CAAnB,EAAsB,CAACue,CAAvB;AACD,GAND,MAMO;AACLoqP,IAAAA,UAAU,CAAC98F,OAAD,EAAU4kB,KAAV,EAAiBzwL,CAAjB,EAAoBue,CAApB,EAAuBk3P,EAAvB,EAA2BC,EAA3B,CAAV;AACD;AACF;;AAED,SAASE,OAAT,CAAiBjJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,SAAOvZ,IAAI,CAACsmQ,YAAY,CAAC7B,MAAD,EAASlrP,IAAI,CAACu8N,KAAd,CAAb,EAAmCv8N,IAAnC,CAAJ,GAA+CkrP,MAAM,CAACnwQ,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,CAA/C,GAAwE8wQ,WAAW,CAACX,MAAD,EAASlrP,IAAT,EAAe,IAAf,CAA1F;AACD;;AAED,IAAIo0P,MAAM,GAAG;AACX/7P,EAAAA,IAAI,EAAE,MADK;AAEX84P,EAAAA,GAAG,EAAE,MAFM;AAGXC,EAAAA,MAAM,EAAE,KAHG;AAIXl3O,EAAAA,IAAI,EAAE65O,MAJK;AAKX7C,EAAAA,KAAK,EAAEiD,OALI;AAMX72B,EAAAA,IAAI,EAAE4yB,OAAO,CAACzpQ,IAAD,CANF;AAOX4pQ,EAAAA,IAAI,EAAEO,QAAQ,CAACnqQ,IAAD,CAPH;AAQXwqQ,EAAAA,KAAK,EAAEtD,aAAa,CAAClnQ,IAAD;AART,CAAb;;AAWA,SAAS4tQ,MAAT,CAAgB96Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1BzmB,EAAAA,IAAI,CAAC,GAAD,EAAMkvQ,SAAS,CAAC,IAAD,EAAOzoP,IAAP,CAAf,CAAJ;AACD;;AAED,SAASs0P,OAAT,CAAiBpJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,MAAIzhB,CAAJ,EAAOue,CAAP;AACA,SAAO+uP,WAAW,CAACX,MAAM,CAACnwQ,GAAP,CAAWwD,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAzB,EAA4Bue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CAA1C,EAA6Cve,CAAC,GAAGyhB,IAAI,CAAC1f,KAAT,IAAkB,CAA/D,EAAkEwc,CAAC,GAAGkD,IAAI,CAACqO,MAAT,IAAmB,CAArF,CAAD,EAA0FrO,IAA1F,CAAlB;AACD;;AAED,SAASu0P,MAAT,CAAgBnqG,OAAhB,EAAyBpqJ,IAAzB,EAA+B;AAC7BoqJ,EAAAA,OAAO,CAACq9F,SAAR;AACAgB,EAAAA,SAAS,CAACr+F,OAAD,EAAUpqJ,IAAV,CAAT;AACD;;AAED,IAAIi3N,IAAI,GAAG;AACT5+N,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAEm6O,MAJG;AAKTnD,EAAAA,KAAK,EAAEoD,OALE;AAMTh3B,EAAAA,IAAI,EAAE4yB,OAAO,CAACqE,MAAD,CANJ;AAOTlE,EAAAA,IAAI,EAAEO,QAAQ,CAAC2D,MAAD,CAPL;AAQTtD,EAAAA,KAAK,EAAElD;AARE,CAAX;;AAWA,SAASyG,MAAT,CAAgBj7Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1BzmB,EAAAA,IAAI,CAAC,WAAD,EAAcs3Q,aAAa,CAAC7wP,IAAD,CAA3B,CAAJ;AACAzmB,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAL,IAAWl3D,IAAI,CAACzhB,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACAhF,EAAAA,IAAI,CAAC,IAAD,EAAOymB,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAL,IAAW9qF,IAAI,CAAClD,CAAL,IAAU,CAArB,CAAlB,GAA4C,CAAnD,CAAJ;AACD;;AAED,SAAS23P,OAAT,CAAiBvJ,MAAjB,EAAyBlrP,IAAzB,EAA+B;AAC7B,MAAI6qF,EAAJ,EAAQD,EAAR;AACA,SAAOihK,WAAW,CAACX,MAAM,CAACnwQ,GAAP,CAAW8vG,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CAA1B,EAA6BqsG,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAA5C,EAA+CkD,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAA3E,EAA+E7qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAA3G,CAAD,EAAiH5qF,IAAjH,CAAlB;AACD;;AAED,SAAS00P,MAAT,CAAgBtqG,OAAhB,EAAyBpqJ,IAAzB,EAA+B4uO,OAA/B,EAAwC;AACtC,MAAI/jJ,EAAJ,EAAQD,EAAR,EAAY1zB,EAAZ,EAAgB4zB,EAAhB;;AAEA,MAAI9qF,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjD/jJ,IAAAA,EAAE,GAAG7qF,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAqsG,IAAAA,EAAE,GAAG5qF,IAAI,CAAClD,CAAL,IAAU,CAAf;AACAo6D,IAAAA,EAAE,GAAGl3D,IAAI,CAACk3D,EAAL,IAAW,IAAX,GAAkBl3D,IAAI,CAACk3D,EAAvB,GAA4B2zB,EAAjC;AACAC,IAAAA,EAAE,GAAG9qF,IAAI,CAAC8qF,EAAL,IAAW,IAAX,GAAkB9qF,IAAI,CAAC8qF,EAAvB,GAA4BF,EAAjC;AACAw/D,IAAAA,OAAO,CAACq9F,SAAR;AACAr9F,IAAAA,OAAO,CAACwrE,MAAR,CAAe/qI,EAAf,EAAmBD,EAAnB;AACAw/D,IAAAA,OAAO,CAAC0rE,MAAR,CAAe5+J,EAAf,EAAmB4zB,EAAnB;AACA,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD;;AAED,SAAS6pK,MAAT,CAAgBvqG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAIkrP,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAf,EAA+C,OAD5B,CACoC;;AAEvD,QAAItc,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;;AAEA,QAAIA,OAAO,IAAI8lB,MAAM,CAACtqG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7Csf,MAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;AACAoqJ,MAAAA,OAAO,CAAC2hG,MAAR;AACD;AACF,GATI,CAAL;AAUD;;AAED,SAASkE,GAAT,CAAa7lG,OAAb,EAAsBpqJ,IAAtB,EAA4BzhB,CAA5B,EAA+Bue,CAA/B,EAAkC;AAChC,MAAI,CAACstJ,OAAO,CAACumG,eAAb,EAA8B,OAAO,KAAP;AAC9B,SAAO+D,MAAM,CAACtqG,OAAD,EAAUpqJ,IAAV,EAAgB,CAAhB,CAAN,IAA4BoqJ,OAAO,CAACumG,eAAR,CAAwBpyQ,CAAxB,EAA2Bue,CAA3B,CAAnC;AACD;;AAED,IAAI83P,IAAI,GAAG;AACTv8P,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAEs6O,MAJG;AAKTtD,EAAAA,KAAK,EAAEuD,OALE;AAMTn3B,EAAAA,IAAI,EAAEq3B,MANG;AAOTtE,EAAAA,IAAI,EAAEA,IAAI,CAACJ,GAAD,CAPD;AAQTgB,EAAAA,KAAK,EAAEjD;AARE,CAAX;AAWA,IAAI6G,OAAO,GAAG7D,YAAY,CAAC,OAAD,EAAUpxQ,KAAV,CAA1B;AAEA,IAAIk1Q,QAAQ,GAAG9D,YAAY,CAAC,QAAD,EAAWrvD,MAAX,EAAmBmsD,cAAnB,CAA3B;AAEA,MAAMiH,UAAU,GAAG,yBAAnB;AACA,IAAIC,WAAW,GAAG;AAChB3mP,EAAAA,MAAM,EAAE4mP,QADQ;AAEhBC,EAAAA,YAAY,EAAEA,YAFE;AAGhBC,EAAAA,aAAa,EAAEA,aAHC;AAIhB70Q,EAAAA,KAAK,EAAE60Q,aAJS;AAKhBpuP,EAAAA,MAAM,EAAEquP;AALQ,CAAlB;;AAOAA,SAAS,CAAC,IAAD,CAAT;;AAEA,SAASA,SAAT,CAAmBC,GAAnB,EAAwB;AACtBL,EAAAA,WAAW,CAAC10Q,KAAZ,GAAoB+0Q,GAAG,IAAI3H,SAAP,GAAmBwH,YAAnB,GAAkCC,aAAtD;AACD,EAAC;;;AAGF,SAASA,aAAT,CAAuBn1P,IAAvB,EAA6B8wF,IAA7B,EAAmC;AACjC,SAAOwkK,cAAc,CAACC,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAV,EAAwBmkK,QAAQ,CAACj1P,IAAD,CAAhC,CAArB;AACD;;AAED,SAASs1P,cAAT,CAAwBxkK,IAAxB,EAA8B0kK,iBAA9B,EAAiD;AAC/C,SAAO,CAAC,EAAE,MAAM1kK,IAAI,CAACp5G,MAAX,GAAoB89Q,iBAAtB,CAAR;AACD,EAAC;;;AAGF,SAASN,YAAT,CAAsBl1P,IAAtB,EAA4B8wF,IAA5B,EAAkC;AAChC,SAAOmkK,QAAQ,CAACj1P,IAAD,CAAR,IAAkB,CAAlB,IAAuB,EAAE8wF,IAAI,GAAGykK,SAAS,CAACv1P,IAAD,EAAO8wF,IAAP,CAAlB,CAAvB,GAAyD,CAAzD,GAA6D2kK,aAAa,CAAC3kK,IAAD,EAAO4kK,IAAI,CAAC11P,IAAD,CAAX,CAAjF;AACD;;AAED,SAASy1P,aAAT,CAAuB3kK,IAAvB,EAA6B6kK,WAA7B,EAA0C;AACxC,QAAMt5Q,GAAG,GAAG,IAAI1E,MAAJ,CAAWg+Q,WAAX,EAAwB,IAAxB,EAA8Bh+Q,MAA9B,CAAqCm5G,IAArC,CAAZ;AACA,MAAIxwG,KAAK,GAAGy0Q,UAAU,CAAC75Q,GAAX,CAAemB,GAAf,CAAZ;;AAEA,MAAIiE,KAAK,KAAKgtH,SAAd,EAAyB;AACvBogJ,IAAAA,SAAS,CAACgI,IAAV,GAAiBC,WAAjB;AACAr1Q,IAAAA,KAAK,GAAGotQ,SAAS,CAACkI,WAAV,CAAsB9kK,IAAtB,EAA4BxwG,KAApC;AACAy0Q,IAAAA,UAAU,CAACh6Q,GAAX,CAAesB,GAAf,EAAoBiE,KAApB;AACD;;AAED,SAAOA,KAAP;AACD;;AAED,SAAS20Q,QAAT,CAAkBj1P,IAAlB,EAAwB;AACtB,SAAOA,IAAI,CAACi1P,QAAL,IAAiB,IAAjB,GAAwB,CAACj1P,IAAI,CAACi1P,QAAN,IAAkB,CAA1C,GAA8C,EAArD;AACD;;AACD,SAASY,UAAT,CAAoB71P,IAApB,EAA0B;AACxB,SAAOA,IAAI,CAAC61P,UAAL,IAAmB,IAAnB,GAA0B71P,IAAI,CAAC61P,UAA/B,GAA4CZ,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,CAApE;AACD;;AAED,SAAS81P,SAAT,CAAmB/2P,CAAnB,EAAsB;AACpB,SAAO,uBAAQA,CAAR,IAAaA,CAAC,CAACrnB,MAAF,GAAW,CAAX,GAAeqnB,CAAf,GAAmBA,CAAC,CAAC,CAAD,CAAjC,GAAuCA,CAA9C;AACD;;AAED,SAASg3P,SAAT,CAAmB/1P,IAAnB,EAAyB;AACvB,SAAO81P,SAAS,CAAC91P,IAAI,CAACg2P,SAAL,IAAkBh2P,IAAI,CAAC8wF,IAAvB,IAA+B,CAAC,uBAAQ9wF,IAAI,CAAC8wF,IAAb,CAAhC,GAAqD9wF,IAAI,CAAC8wF,IAAL,CAAU70G,KAAV,CAAgB+jB,IAAI,CAACg2P,SAArB,CAArD,GAAuFh2P,IAAI,CAAC8wF,IAA7F,CAAhB;AACD;;AACD,SAASmlK,eAAT,CAAyBj2P,IAAzB,EAA+B;AAC7B,QAAM0oP,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;AACA,SAAO,CAAC,uBAAQ0oP,EAAR,IAAcA,EAAE,CAAChxQ,MAAH,GAAY,CAA1B,GAA8B,CAA/B,IAAoCm+Q,UAAU,CAAC71P,IAAD,CAArD;AACD;;AACD,SAASu1P,SAAT,CAAmBv1P,IAAnB,EAAyB2M,IAAzB,EAA+B;AAC7B,QAAMmkF,IAAI,GAAGnkF,IAAI,IAAI,IAAR,GAAe,EAAf,GAAoB,CAACA,IAAI,GAAG,EAAR,EAAY0mF,IAAZ,EAAjC;AACA,SAAOrzF,IAAI,CAACouD,KAAL,GAAa,CAAb,IAAkB0iC,IAAI,CAACp5G,MAAvB,GAAgC86M,QAAQ,CAACxyL,IAAD,EAAO8wF,IAAP,CAAxC,GAAuDA,IAA9D;AACD;;AAED,SAASolK,WAAT,CAAqBl2P,IAArB,EAA2B;AACzB,MAAIg1P,WAAW,CAAC10Q,KAAZ,KAAsB40Q,YAA1B,EAAwC;AACtC;AACA,UAAMS,WAAW,GAAGD,IAAI,CAAC11P,IAAD,CAAxB;AACA,WAAO8wF,IAAI,IAAI2kK,aAAa,CAAC3kK,IAAD,EAAO6kK,WAAP,CAA5B;AACD,GAJD,MAIO;AACL;AACA,UAAMH,iBAAiB,GAAGP,QAAQ,CAACj1P,IAAD,CAAlC;AACA,WAAO8wF,IAAI,IAAIwkK,cAAc,CAACxkK,IAAD,EAAO0kK,iBAAP,CAA7B;AACD;AACF;;AAED,SAAShjE,QAAT,CAAkBxyL,IAAlB,EAAwB8wF,IAAxB,EAA8B;AAC5B,MAAI1iC,KAAK,GAAG,CAACpuD,IAAI,CAACouD,KAAlB;AAAA,MACI9tE,KAAK,GAAG41Q,WAAW,CAACl2P,IAAD,CADvB;AAEA,MAAI1f,KAAK,CAACwwG,IAAD,CAAL,GAAc1iC,KAAlB,EAAyB,OAAO0iC,IAAP;AACzB,MAAIigG,QAAQ,GAAG/wL,IAAI,CAAC+wL,QAAL,IAAiB,QAAhC;AAAA,MACIpM,GAAG,GAAG3kL,IAAI,CAACjmB,GAAL,KAAa,KADvB;AAAA,MAEI+0M,EAAE,GAAG,CAFT;AAAA,MAGIC,EAAE,GAAGj+F,IAAI,CAACp5G,MAHd;AAAA,MAIIgkN,GAJJ;AAKAttI,EAAAA,KAAK,IAAI9tE,KAAK,CAACywM,QAAD,CAAd;;AAEA,MAAIpM,GAAJ,EAAS;AACP,WAAOmK,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAG5M,EAAE,GAAGC,EAAL,KAAY,CAAlB;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAWi6M,GAAX,CAAD,CAAL,GAAyBttI,KAA7B,EAAoC0gI,EAAE,GAAG4M,GAAG,GAAG,CAAX,CAApC,KAAsD3M,EAAE,GAAG2M,GAAL;AACvD;;AAED,WAAO3K,QAAQ,GAAGjgG,IAAI,CAACrvG,KAAL,CAAWqtM,EAAX,CAAlB;AACD,GAPD,MAOO;AACL,WAAOA,EAAE,GAAGC,EAAZ,EAAgB;AACd2M,MAAAA,GAAG,GAAG,KAAK5M,EAAE,GAAGC,EAAL,KAAY,CAAjB,CAAN;AACA,UAAIzuM,KAAK,CAACwwG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAci6M,GAAd,CAAD,CAAL,GAA4BttI,KAAhC,EAAuC0gI,EAAE,GAAG4M,GAAL,CAAvC,KAAqD3M,EAAE,GAAG2M,GAAG,GAAG,CAAX;AACtD;;AAED,WAAO5qG,IAAI,CAACrvG,KAAL,CAAW,CAAX,EAAcqtM,EAAd,IAAoBiC,QAA3B;AACD;AACF;;AAED,SAASolE,UAAT,CAAoBn2P,IAApB,EAA0Bo2P,KAA1B,EAAiC;AAC/B,MAAIV,IAAI,GAAG11P,IAAI,CAAC01P,IAAhB;AACA,SAAO,CAACU,KAAK,IAAIV,IAAT,GAAgBhyQ,MAAM,CAACgyQ,IAAD,CAAN,CAAa/5Q,OAAb,CAAqB,IAArB,EAA2B,IAA3B,CAAhB,GAAmD+5Q,IAApD,KAA6D,YAApE;AACD;;AACD,SAASA,IAAT,CAAc11P,IAAd,EAAoBo2P,KAApB,EAA2B;AACzB,SAAO,MAAMp2P,IAAI,CAACq2P,SAAL,GAAiBr2P,IAAI,CAACq2P,SAAL,GAAiB,GAAlC,GAAwC,EAA9C,KAAqDr2P,IAAI,CAACs2P,WAAL,GAAmBt2P,IAAI,CAACs2P,WAAL,GAAmB,GAAtC,GAA4C,EAAjG,KAAwGt2P,IAAI,CAACu2P,UAAL,GAAkBv2P,IAAI,CAACu2P,UAAL,GAAkB,GAApC,GAA0C,EAAlJ,IAAwJtB,QAAQ,CAACj1P,IAAD,CAAhK,GAAyK,KAAzK,GAAiLm2P,UAAU,CAACn2P,IAAD,EAAOo2P,KAAP,CAAlM;AACD;;AACD,SAASI,QAAT,CAAkBx2P,IAAlB,EAAwB;AACtB;AACA;AACA;AACA,MAAI4oJ,QAAQ,GAAG5oJ,IAAI,CAAC4oJ,QAApB;AAAA,MACIjkH,CAAC,GAAGswN,QAAQ,CAACj1P,IAAD,CADhB;AAEA,SAAO7hB,IAAI,CAACsG,KAAL,CAAWmkK,QAAQ,KAAK,KAAb,GAAqB,OAAOjkH,CAA5B,GAAgCikH,QAAQ,KAAK,QAAb,GAAwB,OAAOjkH,CAA/B,GAAmCikH,QAAQ,KAAK,QAAb,GAAwB,CAAC,IAAD,GAAQjkH,CAAhC,GAAoCikH,QAAQ,KAAK,UAAb,GAA0B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAArD,GAA8D4oJ,QAAQ,KAAK,aAAb,GAA6B,OAAOjkH,CAAP,GAAW,MAAMkxN,UAAU,CAAC71P,IAAD,CAAxD,GAAiE,CAAjP,CAAP;AACD;;AAED,MAAMy2P,SAAS,GAAG;AAChB,UAAQ,OADQ;AAEhB,YAAU,QAFM;AAGhB,WAAS;AAHO,CAAlB;AAKA,MAAMC,UAAU,GAAG,IAAI9L,MAAJ,EAAnB;;AAEA,SAAS+L,WAAT,CAAqB32P,IAArB,EAA2B;AACzB,MAAIzhB,CAAC,GAAGyhB,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AAAA,MACIue,CAAC,GAAGkD,IAAI,CAAClD,CAAL,IAAU,CADlB;AAAA,MAEI1W,CAAC,GAAG4Z,IAAI,CAACzL,MAAL,IAAe,CAFvB;AAAA,MAGIzY,CAHJ;;AAKA,MAAIsK,CAAJ,EAAO;AACLtK,IAAAA,CAAC,GAAG,CAACkkB,IAAI,CAACysI,KAAL,IAAc,CAAf,IAAoBu4G,MAAxB;AACAzmQ,IAAAA,CAAC,IAAI6H,CAAC,GAAGjI,IAAI,CAACgU,GAAL,CAASrW,CAAT,CAAT;AACAghB,IAAAA,CAAC,IAAI1W,CAAC,GAAGjI,IAAI,CAAC+T,GAAL,CAASpW,CAAT,CAAT;AACD;;AAED46Q,EAAAA,UAAU,CAAC7rK,EAAX,GAAgBtsG,CAAhB;AACAm4Q,EAAAA,UAAU,CAAC9rK,EAAX,GAAgB9tF,CAAhB;AACA,SAAO45P,UAAP;AACD;;AAED,SAASE,MAAT,CAAgBr9Q,IAAhB,EAAsBymB,IAAtB,EAA4B;AAC1B,MAAIkE,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CAApB;AAAA,MACIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CADlC;AAAA,MAEI0c,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKItrG,CAAC,GAAG0gB,IAAI,CAACu8N,KAAL,IAAc,CALtB;AAAA,MAMIzgP,CANJ;AAOAvC,EAAAA,IAAI,CAAC,aAAD,EAAgBk9Q,SAAS,CAACz2P,IAAI,CAAC2wL,KAAN,CAAT,IAAyB,OAAzC,CAAJ;;AAEA,MAAIrxM,CAAJ,EAAO;AACLxD,IAAAA,CAAC,GAAG+8M,SAAS,CAACt6M,CAAD,EAAIue,CAAJ,CAAT,GAAkB,GAAlB,GAAwB61O,MAAM,CAACrzP,CAAD,CAAlC;AACA,QAAI4kB,EAAE,IAAIhH,EAAV,EAAcphB,CAAC,IAAI,MAAM+8M,SAAS,CAAC30L,EAAD,EAAKhH,EAAL,CAApB;AACf,GAHD,MAGO;AACLphB,IAAAA,CAAC,GAAG+8M,SAAS,CAACt6M,CAAC,GAAG2lB,EAAL,EAASpH,CAAC,GAAGI,EAAb,CAAb;AACD;;AAED3jB,EAAAA,IAAI,CAAC,WAAD,EAAcuC,CAAd,CAAJ;AACD;;AAED,SAAS+6Q,OAAT,CAAiB3L,MAAjB,EAAyBlrP,IAAzB,EAA+Bk3G,IAA/B,EAAqC;AACnC,MAAIvyE,CAAC,GAAGqwN,WAAW,CAAC3mP,MAAZ,CAAmBrO,IAAnB,CAAR;AAAA,MACI1gB,CAAC,GAAG0gB,IAAI,CAAC2wL,KADb;AAAA,MAEIj0K,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAFnB;AAAA,MAGIzhB,CAAC,GAAGm+B,CAAC,CAACmuE,EAHV;AAAA,MAII/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAJV;AAAA,MAKI1mF,EAAE,GAAGlE,IAAI,CAACkE,EAAL,IAAW,CALpB;AAAA,MAMIhH,EAAE,GAAG,CAAC8C,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CAAzB,GAAkC7hB,IAAI,CAACsG,KAAL,CAAW,MAAMkgD,CAAjB,CAN3C;AAAA,MAOI;AACJ+jN,EAAAA,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CARd;AAAA,MASI0kC,CATJ,CADmC,CAU5B;;AAEP,MAAI,uBAAQgkN,EAAR,CAAJ,EAAiB;AACf;AACA/jN,IAAAA,CAAC,IAAIkxN,UAAU,CAAC71P,IAAD,CAAV,IAAoB0oP,EAAE,CAAChxQ,MAAH,GAAY,CAAhC,CAAL;AACAgtD,IAAAA,CAAC,GAAGgkN,EAAE,CAAC/jQ,MAAH,CAAU,CAAC+/C,CAAD,EAAI5oD,CAAJ,KAAUqC,IAAI,CAACK,GAAL,CAASkmD,CAAT,EAAYswN,WAAW,CAAC10Q,KAAZ,CAAkB0f,IAAlB,EAAwBlkB,CAAxB,CAAZ,CAApB,EAA6D,CAA7D,CAAJ;AACD,GAJD,MAIO;AACL;AACA4oD,IAAAA,CAAC,GAAGswN,WAAW,CAAC10Q,KAAZ,CAAkB0f,IAAlB,EAAwB0oP,EAAxB,CAAJ;AACD,GAnBkC,CAmBjC;;;AAGF,MAAIppQ,CAAC,KAAK,QAAV,EAAoB;AAClB4kB,IAAAA,EAAE,IAAIwgC,CAAC,GAAG,CAAV;AACD,GAFD,MAEO,IAAIplD,CAAC,KAAK,OAAV,EAAmB;AACxB4kB,IAAAA,EAAE,IAAIwgC,CAAN;AACD,GAFM,MAEA;;AAEPwmN,EAAAA,MAAM,CAACnwQ,GAAP,CAAWmpB,EAAE,IAAI3lB,CAAjB,EAAoB2e,EAAE,IAAIJ,CAA1B,EAA6BoH,EAAE,GAAGwgC,CAAlC,EAAqCxnC,EAAE,GAAGynC,CAA1C;;AAEA,MAAI3kC,IAAI,CAACu8N,KAAL,IAAc,CAACrlH,IAAnB,EAAyB;AACvBg0I,IAAAA,MAAM,CAACvY,MAAP,CAAc3yO,IAAI,CAACu8N,KAAL,GAAauoB,QAA3B,EAAqCvmQ,CAArC,EAAwCue,CAAxC;AACD,GAFD,MAEO,IAAIo6G,IAAI,KAAK,CAAb,EAAgB;AACrB,WAAOg0I,MAAM,CAACJ,aAAP,CAAqB9qP,IAAI,CAACu8N,KAAL,GAAauoB,QAAlC,EAA4CvmQ,CAA5C,EAA+Cue,CAA/C,CAAP;AACD;;AAED,SAAOouP,MAAP;AACD;;AAED,SAAS4L,MAAT,CAAgB1sG,OAAhB,EAAyBylG,KAAzB,EAAgC3E,MAAhC,EAAwC;AACtC9tC,EAAAA,KAAK,CAACyyC,KAAD,EAAQ7vP,IAAI,IAAI;AACnB,QAAI4uO,OAAO,GAAG5uO,IAAI,CAAC4uO,OAAL,IAAgB,IAAhB,GAAuB,CAAvB,GAA2B5uO,IAAI,CAAC4uO,OAA9C;AAAA,QACIlyN,CADJ;AAAA,QAEIn+B,CAFJ;AAAA,QAGIue,CAHJ;AAAA,QAII1kB,CAJJ;AAAA,QAKI2+Q,EALJ;AAAA,QAMIrO,EANJ;AAAA,QAOIz1J,GAPJ;AAQA,QAAIi4J,MAAM,IAAI,CAACA,MAAM,CAACplE,UAAP,CAAkB9lL,IAAI,CAACkrP,MAAvB,CAAX,IAA6C;AACjDtc,IAAAA,OAAO,KAAK,CADR,IACa5uO,IAAI,CAACi1P,QAAL,IAAiB,CAD9B,IACmCj1P,IAAI,CAAC8wF,IAAL,IAAa,IADhD,IACwD9wF,IAAI,CAAC8wF,IAAL,CAAUp5G,MAAV,KAAqB,CADjF,EACoF;AACpF0yK,IAAAA,OAAO,CAACsrG,IAAR,GAAeA,IAAI,CAAC11P,IAAD,CAAnB;AACAoqJ,IAAAA,OAAO,CAACqsG,SAAR,GAAoBz2P,IAAI,CAAC2wL,KAAL,IAAc,MAAlC;AACAj0K,IAAAA,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAf;AACAzhB,IAAAA,CAAC,GAAGm+B,CAAC,CAACmuE,EAAN,EAAU/tF,CAAC,GAAG4f,CAAC,CAACkuE,EAAhB;;AAEA,QAAI5qF,IAAI,CAACu8N,KAAT,EAAgB;AACdnyE,MAAAA,OAAO,CAAC5lJ,IAAR;AACA4lJ,MAAAA,OAAO,CAACyuC,SAAR,CAAkBt6M,CAAlB,EAAqBue,CAArB;AACAstJ,MAAAA,OAAO,CAACuoF,MAAR,CAAe3yO,IAAI,CAACu8N,KAAL,GAAauoB,QAA5B;AACAvmQ,MAAAA,CAAC,GAAGue,CAAC,GAAG,CAAR,CAJc,CAIH;AACZ;;AAEDve,IAAAA,CAAC,IAAIyhB,IAAI,CAACkE,EAAL,IAAW,CAAhB;AACApH,IAAAA,CAAC,IAAI,CAACkD,IAAI,CAAC9C,EAAL,IAAW,CAAZ,IAAiBs5P,QAAQ,CAACx2P,IAAD,CAA9B;AACA0oP,IAAAA,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAAd;AACAkuP,IAAAA,KAAK,CAAC9jG,OAAD,EAAUpqJ,IAAV,CAAL;;AAEA,QAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACfqO,MAAAA,EAAE,GAAGlB,UAAU,CAAC71P,IAAD,CAAf;;AAEA,WAAK5nB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGswQ,EAAE,CAAChxQ,MAAnB,EAA2B,EAAEU,CAA7B,EAAgC;AAC9B66G,QAAAA,GAAG,GAAGsiK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAE,CAACtwQ,CAAD,CAAT,CAAf;;AAEA,YAAI4nB,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,UAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AAED,YAAIkD,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,UAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;;AAEDA,QAAAA,CAAC,IAAIi6P,EAAL;AACD;AACF,KAhBD,MAgBO;AACL9jK,MAAAA,GAAG,GAAGsiK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAf;;AAEA,UAAI1oP,IAAI,CAACpX,IAAL,IAAaA,IAAI,CAACwhK,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAArB,EAA+C;AAC7CxkF,QAAAA,OAAO,CAAC4sG,QAAR,CAAiB/jK,GAAjB,EAAsB10G,CAAtB,EAAyBue,CAAzB;AACD;;AAED,UAAIkD,IAAI,CAAC+rP,MAAL,IAAeA,MAAM,CAAC3hG,OAAD,EAAUpqJ,IAAV,EAAgB4uO,OAAhB,CAAzB,EAAmD;AACjDxkF,QAAAA,OAAO,CAAC6sG,UAAR,CAAmBhkK,GAAnB,EAAwB10G,CAAxB,EAA2Bue,CAA3B;AACD;AACF;;AAED,QAAIkD,IAAI,CAACu8N,KAAT,EAAgBnyE,OAAO,CAACsoG,OAAR;AACjB,GAzDI,CAAL;AA0DD;;AAED,SAASwE,KAAT,CAAe9sG,OAAf,EAAwBpqJ,IAAxB,EAA8BzhB,CAA9B,EAAiCue,CAAjC,EAAoCwzP,EAApC,EAAwCC,EAAxC,EAA4C;AAC1C,MAAIvwP,IAAI,CAACi1P,QAAL,IAAiB,CAArB,EAAwB,OAAO,KAAP;AACxB,MAAI,CAACj1P,IAAI,CAACu8N,KAAV,EAAiB,OAAO,IAAP,CAFyB,CAEZ;AAC9B;;AAEA,MAAI7/M,CAAC,GAAGi6O,WAAW,CAAC32P,IAAD,CAAnB;AAAA,MACIje,EAAE,GAAG26B,CAAC,CAACmuE,EADX;AAAA,MAEIuvI,EAAE,GAAG19M,CAAC,CAACkuE,EAFX;AAAA,MAGIzkG,CAAC,GAAG0wQ,OAAO,CAACH,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAHf;AAAA,MAII1gB,CAAC,GAAG,CAAC0gB,IAAI,CAACu8N,KAAN,GAAcuoB,QAJtB;AAAA,MAKI3yP,GAAG,GAAGhU,IAAI,CAACgU,GAAL,CAAS7S,CAAT,CALV;AAAA,MAMI4S,GAAG,GAAG/T,IAAI,CAAC+T,GAAL,CAAS5S,CAAT,CANV;AAAA,MAOI4hP,EAAE,GAAG/uO,GAAG,GAAGm+P,EAAN,GAAWp+P,GAAG,GAAGq+P,EAAjB,IAAuBxuQ,EAAE,GAAGoQ,GAAG,GAAGpQ,EAAX,GAAgBmQ,GAAG,GAAGkoO,EAA7C,CAPT;AAAA,MAQIgH,EAAE,GAAGlvO,GAAG,GAAGo+P,EAAN,GAAWn+P,GAAG,GAAGo+P,EAAjB,IAAuBn2B,EAAE,GAAGloO,GAAG,GAAGnQ,EAAX,GAAgBoQ,GAAG,GAAGioO,EAA7C,CART;AASA,SAAOj0O,CAAC,CAAC8kQ,QAAF,CAAW/pB,EAAX,EAAeE,EAAf,CAAP;AACD;;AAED,SAAS+1B,aAAT,CAAuBn3P,IAAvB,EAA6Bk8L,GAA7B,EAAkC;AAChC,QAAMx/K,CAAC,GAAGm6O,OAAO,CAACH,UAAD,EAAa12P,IAAb,EAAmB,CAAnB,CAAjB;AACA,SAAOiuP,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAhB,IAAiDuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAjE,IAAkGuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAAlH,IAAmJuxO,gBAAgB,CAAC/xD,GAAD,EAAMx/K,CAAC,CAAC,CAAD,CAAP,EAAYA,CAAC,CAAC,CAAD,CAAb,EAAkBA,CAAC,CAAC,CAAD,CAAnB,EAAwBA,CAAC,CAAC,CAAD,CAAzB,CAA1K;AACD;;AAED,IAAIo0E,IAAI,GAAG;AACTz4F,EAAAA,IAAI,EAAE,MADG;AAET84P,EAAAA,GAAG,EAAE,MAFI;AAGTC,EAAAA,MAAM,EAAE,KAHC;AAITl3O,EAAAA,IAAI,EAAE08O,MAJG;AAKT1F,EAAAA,KAAK,EAAE2F,OALE;AAMTv5B,EAAAA,IAAI,EAAEw5B,MANG;AAOTzG,EAAAA,IAAI,EAAEA,IAAI,CAAC6G,KAAD,CAPD;AAQTjG,EAAAA,KAAK,EAAEkG;AARE,CAAX;AAWA,IAAIC,OAAO,GAAG3F,iBAAiB,CAAC,OAAD,EAAUzI,KAAV,EAAiBwI,SAAjB,CAA/B;AAEA,IAAI6F,KAAK,GAAG;AACVl+D,EAAAA,GAAG,EAAEk4D,KADK;AAEVn2D,EAAAA,IAAI,EAAEy2D,MAFI;AAGV5tJ,EAAAA,KAAK,EAAEA,KAHG;AAIV3wG,EAAAA,KAAK,EAAEA,KAJG;AAKVuZ,EAAAA,IAAI,EAAEmnP,MALI;AAMVrtQ,EAAAA,IAAI,EAAE2tQ,MANI;AAOVn9B,EAAAA,IAAI,EAAEA,IAPI;AAQV29B,EAAAA,IAAI,EAAEA,IARI;AASVh1Q,EAAAA,KAAK,EAAEi1Q,OATG;AAUVlzD,EAAAA,MAAM,EAAEmzD,QAVE;AAWVhkK,EAAAA,IAAI,EAAEA,IAXI;AAYVk4J,EAAAA,KAAK,EAAEoO;AAZG,CAAZ;;;AAeA,SAASE,SAAT,CAAoBt3P,IAApB,EAA0BiK,IAA1B,EAAgCoiL,GAAhC,EAAqC;AACnC,MAAIh0L,IAAI,GAAGg/P,KAAK,CAACr3P,IAAI,CAACsqP,IAAL,CAAU0I,QAAX,CAAhB;AAAA,MACI9B,KAAK,GAAGjnP,IAAI,IAAI5R,IAAI,CAAC64P,KADzB;AAEA,MAAI74P,IAAI,CAAC+4P,MAAT,EAAiBpxP,IAAI,GAAGA,IAAI,CAACsqP,IAAZ;AACjB,SAAO4G,KAAK,CAAClxP,IAAI,CAACkrP,MAAL,KAAgBlrP,IAAI,CAACkrP,MAAL,GAAc,IAAIN,MAAJ,EAA9B,CAAD,EAA8C5qP,IAA9C,EAAoDqsL,GAApD,CAAZ;AACD;;AAED,IAAIkrE,KAAK,GAAG;AACVjN,EAAAA,IAAI,EAAE;AADI,CAAZ;;AAGA,SAASkN,SAAT,CAAoBlN,IAApB,EAA0BY,MAA1B,EAAkC7+D,GAAlC,EAAuC;AACrC,MAAIh0L,IAAI,GAAGg/P,KAAK,CAAC/M,IAAI,CAAC0I,QAAN,CAAhB;AAAA,MACI9B,KAAK,GAAG74P,IAAI,CAAC64P,KADjB;AAAA,MAEI59J,KAAK,GAAGg3J,IAAI,CAACh3J,KAFjB;AAAA,MAGImkK,QAAQ,GAAGnkK,KAAK,IAAIA,KAAK,CAAC57G,MAH9B;AAAA,MAIIU,CAJJ;AAAA,MAKIkO,CALJ;AAAA,MAMI0Z,IANJ;AAAA,MAOI7Z,CAPJ;;AASA,MAAIkS,IAAI,CAAC+4P,MAAT,EAAiB;AACf,QAAIqG,QAAJ,EAAc;AACZz3P,MAAAA,IAAI,GAAGszF,KAAK,CAAC,CAAD,CAAZ;AACD,KAFD,MAEO;AACL;AACAikK,MAAAA,KAAK,CAACjN,IAAN,GAAaA,IAAb;AACAtqP,MAAAA,IAAI,GAAGu3P,KAAP;AACD;;AAEDpxQ,IAAAA,CAAC,GAAGmxQ,SAAS,CAACt3P,IAAD,EAAOkxP,KAAP,EAAc7kE,GAAd,CAAb;AACA6+D,IAAAA,MAAM,GAAGA,MAAM,IAAIA,MAAM,CAAClqD,KAAP,CAAa76M,CAAb,CAAV,IAA6BA,CAAtC;AACA,WAAO+kQ,MAAP;AACD;;AAEDA,EAAAA,MAAM,GAAGA,MAAM,IAAIZ,IAAI,CAACY,MAAL,IAAeZ,IAAI,CAACY,MAAL,CAAYr7D,KAAZ,EAAzB,IAAgD,IAAI+6D,MAAJ,EAAzD;;AAEA,MAAI6M,QAAJ,EAAc;AACZ,SAAKr/Q,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC8yQ,MAAAA,MAAM,CAAClqD,KAAP,CAAas2D,SAAS,CAAChkK,KAAK,CAACl7G,CAAD,CAAN,EAAW84Q,KAAX,EAAkB7kE,GAAlB,CAAtB;AACD;AACF;;AAED,SAAOi+D,IAAI,CAACY,MAAL,GAAcA,MAArB;AACD;;AAED,MAAM3wP,IAAI,GAAG,CAAC,UAAD,EAAa,MAAb,EAAqB,MAArB,EAA6B,aAA7B,EAA4C,MAA5C,EAAoD,OAApD,EAA6D,QAA7D,EAAuE,GAAvE,EAA4E,GAA5E,EAAiF,OAAjF,EAA0F,QAA1F,EAAoG,OAApG,EAA6G,UAA7G,EAAyH;AACtI,MADa,EACL,aADK,EACU,SADV,EACqB,OADrB,EAC8B;AAC3C,QAFa,EAEH,eAFG,EAEc,aAFd,EAE6B,WAF7B,EAE0C;AACvD,YAHa,EAGC,kBAHD,EAGqB;AAClC,kBAJa,EAIO,cAJP,EAIuB;AACpC,YALa,EAKC,UALD,EAKa,aALb,EAK4B,aAL5B,EAK2C;AACxD,cANa,EAMG,UANH,EAMe;AAC5B,qBAPa,EAOU,sBAPV,EAOkC;AAC/C,wBARa,EAQa,yBARb,EAQwC,aARxC,EAQuD,SARvD,EAQkE,QARlE,EAQ4E,SAR5E,EAQuF;AACpG,KATa,EASN,QATM,EASI,QATJ,EASc;AAC3B,MAVa,EAUL,QAVK,EAUK,QAVL,EAUe;AAC5B,IAXa,EAWP,IAXO,EAWD;AACZ,MAZa,EAYL,OAZK,EAYI;AACjB,MAba,EAaL,OAbK,EAaI,OAbJ,EAaa,QAbb,EAauB,KAbvB,EAa8B,IAb9B,EAaoC,IAbpC,EAa0C;AACvD,UAda,EAcD,OAdC,EAcQ,WAdR,EAcqB,YAdrB,EAcmC,MAdnC,EAc2C,UAd3C,EAcuD,YAdvD,EAcqE,WAdrE,EAckF,aAdlF,EAciG;AAC9G,aAfa,EAeE,MAfF,EAeU,UAfV,EAesB,qBAftB,CAe4C;AAf5C,CAAb;;AAiBA,SAASm9P,WAAT,CAAqB7H,KAArB,EAA4B8H,MAA5B,EAAoC;AAClC,SAAOt9N,IAAI,CAACE,SAAL,CAAes1N,KAAf,EAAsBt1P,IAAtB,EAA4Bo9P,MAA5B,CAAP;AACD;;AACD,SAASC,aAAT,CAAuBj1J,IAAvB,EAA6B;AAC3B,QAAMktJ,KAAK,GAAG,OAAOltJ,IAAP,KAAgB,QAAhB,GAA2BtoE,IAAI,CAACC,KAAL,CAAWqoE,IAAX,CAA3B,GAA8CA,IAA5D;AACA,SAAOk1J,UAAU,CAAChI,KAAD,CAAjB;AACD;;AAED,SAASgI,UAAT,CAAoBhI,KAApB,EAA2B;AACzB,MAAIx3P,IAAI,GAAGw3P,KAAK,CAACmD,QAAjB;AAAA,MACI1/J,KAAK,GAAGu8J,KAAK,CAACv8J,KADlB;AAAA,MAEIw8F,MAFJ;AAAA,MAGI13M,CAHJ;AAAA,MAIIkO,CAJJ;;AAMA,MAAIgtG,KAAJ,EAAW;AACT,SAAKl7G,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC03M,MAAAA,MAAM,GAAGz3L,IAAI,GAAG,MAAH,GAAY,OAAzB;AACAi7F,MAAAA,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,IAAmB+/D,KAAnB;AACA,UAAIv8J,KAAK,CAACl7G,CAAD,CAAL,CAASu3Q,MAAb,EAAqBr8J,KAAK,CAACl7G,CAAD,CAAL,CAAS03M,MAAT,EAAiBggE,MAAjB,GAA0B,IAA1B;AACrB,UAAI,aAAaz3P,IAAI,IAAIy3L,MAArB,CAAJ,EAAkC+nE,UAAU,CAACvkK,KAAK,CAACl7G,CAAD,CAAN,CAAV;AACnC;AACF;;AAED,MAAIigB,IAAJ,EAAUm/P,SAAS,CAAC3H,KAAD,CAAT;AACV,SAAOA,KAAP;AACD;;AAED,SAASiI,UAAT,CAAoBjI,KAApB,EAA2B;AACzB,MAAI13Q,SAAS,CAACT,MAAd,EAAsB;AACpB,SAAKqkM,IAAL,GAAY67E,aAAa,CAAC/H,KAAD,CAAzB;AACD,GAFD,MAEO;AACL,SAAK9zE,IAAL,GAAYg8E,UAAU,CAAC;AACrB/E,MAAAA,QAAQ,EAAE,OADW;AAErBr5Q,MAAAA,IAAI,EAAE,MAFe;AAGrBq+Q,MAAAA,IAAI,EAAE;AAHe,KAAD,CAAtB;AAKA,SAAKj8E,IAAL,CAAUzoF,KAAV,GAAkB,CAAC,IAAI63J,SAAJ,CAAc,KAAKpvE,IAAnB,CAAD,CAAlB;AACD;AACF;;AACD+7E,UAAU,CAACt/Q,SAAX,GAAuB;AACrB0uJ,EAAAA,MAAM,CAACywH,MAAD,EAAS;AACb,WAAOD,WAAW,CAAC,KAAK37E,IAAN,EAAY47E,MAAM,IAAI,CAAtB,CAAlB;AACD,GAHoB;;AAKrBrN,EAAAA,IAAI,CAAC2N,OAAD,EAAUl0J,KAAV,EAAiB7lH,KAAjB,EAAwB;AAC1B6lH,IAAAA,KAAK,GAAGA,KAAK,IAAI,KAAKg4E,IAAL,CAAUzoF,KAAV,CAAgB,CAAhB,CAAjB;AACA,UAAMg3J,IAAI,GAAGyN,UAAU,CAACE,OAAD,EAAUl0J,KAAV,CAAvB;AACAA,IAAAA,KAAK,CAACzQ,KAAN,CAAYp1G,KAAZ,IAAqBosQ,IAArB;AACA,QAAIA,IAAI,CAACqF,MAAT,EAAiBrF,IAAI,CAACvmJ,KAAL,CAAW+rJ,MAAX,GAAoB,IAApB;AACjB,WAAOxF,IAAP;AACD;;AAXoB,CAAvB;;AAeA,SAASyN,UAAT,CAAoB3pG,GAApB,EAAyBrqD,KAAzB,EAAgC;AAC9B,QAAMumJ,IAAI,GAAG;AACXY,IAAAA,MAAM,EAAE,IAAIN,MAAJ,EADG;AAEXtqO,IAAAA,IAAI,EAAE,CAAC,CAAC8tI,GAAG,CAAC9tI,IAFD;AAGXyjF,IAAAA,KAAK,EAAEA,KAHI;AAIX+uJ,IAAAA,WAAW,EAAE1kG,GAAG,CAAC0kG,WAAJ,KAAoB,KAApB,GAA4B,KAA5B,GAAoC,IAJtC;AAKXx/J,IAAAA,KAAK,EAAE,EALI;AAMX0/J,IAAAA,QAAQ,EAAE5kG,GAAG,CAAC4kG,QANH;AAOXr5Q,IAAAA,IAAI,EAAEy0K,GAAG,CAACz0K,IAAJ,IAAY2zH,SAPP;AAQX0qJ,IAAAA,IAAI,EAAE5pG,GAAG,CAAC4pG,IAAJ,IAAY1qJ,SARP;AASXqiJ,IAAAA,MAAM,EAAEvhG,GAAG,CAACuhG,MAAJ,IAAc;AATX,GAAb,CAD8B,CAW3B;;AAEH,MAAIvhG,GAAG,CAAC8pG,IAAJ,IAAY,IAAhB,EAAsB;AACpB5N,IAAAA,IAAI,CAAC4N,IAAL,GAAY9pG,GAAG,CAAC8pG,IAAhB;AACD;;AAED,MAAI9pG,GAAG,CAAC+pG,WAAR,EAAqB;AACnB7N,IAAAA,IAAI,CAAC6N,WAAL,GAAmB/pG,GAAG,CAAC+pG,WAAvB;AACD;;AAED,SAAO7N,IAAP;AACD,EAED;;;AACA,SAAS8N,SAAT,CAAmBC,GAAnB,EAAwBlH,GAAxB,EAA6BpsP,EAA7B,EAAiC;AAC/B,MAAI,CAACszP,GAAD,IAAQ,OAAO7yP,QAAP,KAAoB,WAA5B,IAA2CA,QAAQ,CAACyB,aAAxD,EAAuE;AACrEoxP,IAAAA,GAAG,GAAG7yP,QAAN;AACD;;AAED,SAAO6yP,GAAG,GAAGtzP,EAAE,GAAGszP,GAAG,CAAChlB,eAAJ,CAAoBtuO,EAApB,EAAwBosP,GAAxB,CAAH,GAAkCkH,GAAG,CAACpxP,aAAJ,CAAkBkqP,GAAlB,CAAvC,GAAgE,IAA1E;AACD,EAAC;;;AAEF,SAASmH,OAAT,CAAiBC,EAAjB,EAAqBpH,GAArB,EAA0B;AACxBA,EAAAA,GAAG,GAAGA,GAAG,CAAC50Q,WAAJ,EAAN;AACA,MAAI2vI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MACIpgR,CAAC,GAAG,CADR;AAAA,MAEIkO,CAAC,GAAG4lI,KAAK,CAACx0I,MAFd;;AAIA,SAAOU,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB,IAAI8zI,KAAK,CAAC9zI,CAAD,CAAL,CAASqgR,OAAT,CAAiBl8Q,WAAjB,OAAmC40Q,GAAvC,EAA4C;AAC7D,WAAOjlI,KAAK,CAAC9zI,CAAD,CAAZ;AACD;AACF,EAAC;AACF;;;AAEA,SAASsgR,QAAT,CAAkBH,EAAlB,EAAsBr6Q,KAAtB,EAA6BizQ,GAA7B,EAAkCpsP,EAAlC,EAAsC;AACpC,MAAIzlB,CAAC,GAAGi5Q,EAAE,CAACC,UAAH,CAAct6Q,KAAd,CAAR;AAAA,MACIiI,CADJ;;AAGA,MAAI,CAAC7G,CAAD,IAAMA,CAAC,CAACm5Q,OAAF,CAAUl8Q,WAAV,OAA4B40Q,GAAG,CAAC50Q,WAAJ,EAAtC,EAAyD;AACvD4J,IAAAA,CAAC,GAAG7G,CAAC,IAAI,IAAT;AACAA,IAAAA,CAAC,GAAG84Q,SAAS,CAACG,EAAE,CAACI,aAAJ,EAAmBxH,GAAnB,EAAwBpsP,EAAxB,CAAb;AACAwzP,IAAAA,EAAE,CAACK,YAAH,CAAgBt5Q,CAAhB,EAAmB6G,CAAnB;AACD;;AAED,SAAO7G,CAAP;AACD,EAAC;;;AAEF,SAASu5Q,QAAT,CAAkBN,EAAlB,EAAsBr6Q,KAAtB,EAA6B;AAC3B,MAAIguI,KAAK,GAAGqsI,EAAE,CAACC,UAAf;AAAA,MACIprG,IAAI,GAAGlhC,KAAK,CAACx0I,MADjB;;AAGA,SAAO01K,IAAI,GAAGlvK,KAAd,EAAqBq6Q,EAAE,CAACO,WAAH,CAAe5sI,KAAK,CAAC,EAAEkhC,IAAH,CAApB;;AAErB,SAAOmrG,EAAP;AACD,EAAC;;;AAEF,SAASQ,QAAT,CAAkBzO,IAAlB,EAAwB;AACtB,SAAO,UAAUA,IAAI,CAAC0I,QAAf,IAA2B1I,IAAI,CAAC0N,IAAL,GAAY,WAAW1N,IAAI,CAAC0N,IAA5B,GAAmC,EAA9D,KAAqE1N,IAAI,CAAC3wQ,IAAL,GAAY,MAAM2wQ,IAAI,CAAC3wQ,IAAvB,GAA8B,EAAnG,CAAP;AACD;;AAED,SAASggN,KAAT,CAAgBn8F,KAAhB,EAAuB+6J,EAAvB,EAA2B;AACzB,QAAMthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAb;AACA,SAAO,CAACx7J,KAAK,CAACy7J,OAAN,GAAgBhiC,IAAI,CAAC1rM,IAArB,IAA6BgtO,EAAE,CAACW,UAAH,IAAiB,CAA9C,CAAD,EAAmD17J,KAAK,CAAC27J,OAAN,GAAgBliC,IAAI,CAAC5rM,GAArB,IAA4BktO,EAAE,CAACa,SAAH,IAAgB,CAA5C,CAAnD,CAAP;AACD;;AAED,SAASC,WAAT,CAAsBr5P,IAAtB,EAA4Bw9F,KAA5B,EAAmC+6J,EAAnC,EAAuCe,MAAvC,EAA+C;AAC7C,MAAIhP,IAAI,GAAGtqP,IAAI,IAAIA,IAAI,CAACsqP,IAAxB;AAAA,MACIiP,IADJ;AAAA,MAEI78O,CAFJ;;AAIA,MAAI4tO,IAAI,IAAI,CAACiP,IAAI,GAAGlC,KAAK,CAAC/M,IAAI,CAAC0I,QAAN,CAAb,EAA8BtB,GAA1C,EAA+C;AAC7Ch1O,IAAAA,CAAC,GAAGi9K,KAAK,CAACn8F,KAAD,EAAQ+6J,EAAR,CAAT;AACA77O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;AACA58O,IAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ48O,MAAM,CAAC,CAAD,CAAd;;AAEA,WAAOt5P,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAxB,EAA+B;AAC7BrnF,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAACzhB,CAAL,IAAU,CAAlB;AACAm+B,MAAAA,CAAC,CAAC,CAAD,CAAD,IAAQ1c,IAAI,CAAClD,CAAL,IAAU,CAAlB;AACD;;AAEDkD,IAAAA,IAAI,GAAGu5P,IAAI,CAAC7H,GAAL,CAASpH,IAAI,CAACh3J,KAAd,EAAqB52E,CAArB,CAAP;AACD;;AAED,SAAO1c,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASw5P,OAAT,CAAiBnO,YAAjB,EAA+BoO,aAA/B,EAA8C;AAC5C,OAAKC,OAAL,GAAe,IAAf;AACA,OAAKC,SAAL,GAAiB,EAAjB;AACA,OAAK15C,OAAL,GAAeorC,YAAY,IAAI,yBAA/B;AACA,OAAKuO,QAAL,GAAgBH,aAAa,IAAII,cAAjC;AACD,EAAC;AACF;;;AAEA,SAASA,cAAT,CAAwB/kK,OAAxB,EAAiC0I,KAAjC,EAAwCx9F,IAAxC,EAA8C5kB,KAA9C,EAAqD;AACnD05G,EAAAA,OAAO,CAACrmE,OAAR,GAAkB6kN,YAAlB,CAA+B,OAA/B,EAAwCl4P,KAAK,IAAI,EAAjD;AACD;;AAEDo+Q,OAAO,CAAChhR,SAAR,GAAoB;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,SAAKihQ,GAAL,GAAWvB,EAAX;AACA,SAAKwB,IAAL,GAAYlhQ,GAAG,IAAI,IAAnB;AACA,WAAO,KAAKygQ,MAAL,CAAYA,MAAZ,CAAP;AACD,GAdiB;;AAgBlB;AACF;AACA;AACA;AACE7qO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKqrO,GAAZ;AACD,GAtBiB;;AAwBlB;AACF;AACA;AACA;AACA;AACE/yP,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,GA/BiB;;AAiClB;AACF;AACA;AACEV,EAAAA,MAAM,CAACA,MAAD,EAAS;AACb,QAAInhR,SAAS,CAACT,MAAd,EAAsB;AACpB,WAAKuiR,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,aAAO,KAAKW,OAAL,CAAax4Q,KAAb,EAAP;AACD;AACF,GA3CiB;;AA6ClB;AACF;AACA;AACEouQ,EAAAA,KAAK,CAACA,KAAD,EAAQ;AACX,QAAI,CAAC13Q,SAAS,CAACT,MAAf,EAAuB,OAAO,KAAKwiR,MAAZ;AACvB,SAAKA,MAAL,GAAcrK,KAAd;AACA,WAAO,IAAP;AACD,GApDiB;;AAsDlB;AACF;AACA;AACE52Q,EAAAA,EAAE;AACF;AACA,GAAE,CA3DgB;;AA6DlB;AACF;AACA;AACEG,EAAAA,GAAG;AACH;AACA,GAAE,CAlEgB;;AAoElB;AACF;AACA;AACA;AACA;AACA;AACA;AACE+gR,EAAAA,aAAa,CAACx1N,CAAD,EAAItsC,IAAJ,EAAUy8F,OAAV,EAAmB;AAC9B,SAAK,IAAI18G,CAAC,GAAGusD,CAAC,GAAGA,CAAC,CAACjtD,MAAL,GAAc,CAA5B,EAA+B,EAAEU,CAAF,IAAO,CAAtC,GAA0C;AACxC,UAAIusD,CAAC,CAACvsD,CAAD,CAAD,CAAKigB,IAAL,KAAcA,IAAd,KAAuB,CAACy8F,OAAD,IAAYnwD,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,KAAiBA,OAApD,CAAJ,EAAkE;AAChE,eAAO18G,CAAP;AACD;AACF;;AAED,WAAO,CAAC,CAAR;AACD,GAnFiB;;AAqFlB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEwuJ,EAAAA,QAAQ,CAACvuI,IAAD,EAAO;AACb,UAAMssC,CAAC,GAAG,KAAKg1N,SAAf;AAAA,UACMr6Q,CAAC,GAAG,EADV;;AAGA,QAAI+Y,IAAJ,EAAU;AACR/Y,MAAAA,CAAC,CAACjH,IAAF,CAAO,GAAGssD,CAAC,CAAC,KAAKy1N,SAAL,CAAe/hQ,IAAf,CAAD,CAAX;AACD,KAFD,MAEO;AACL,WAAK,MAAM3C,CAAX,IAAgBivC,CAAhB,EAAmB;AACjBrlD,QAAAA,CAAC,CAACjH,IAAF,CAAO,GAAGssD,CAAC,CAACjvC,CAAD,CAAX;AACD;AACF;;AAED,WAAOpW,CAAP;AACD,GA1GiB;;AA4GlB;AACF;AACA;AACA;AACA;AACA;AACE86Q,EAAAA,SAAS,CAACzgR,IAAD,EAAO;AACd,UAAMvB,CAAC,GAAGuB,IAAI,CAAC67B,OAAL,CAAa,GAAb,CAAV;AACA,WAAOp9B,CAAC,GAAG,CAAJ,GAAQuB,IAAR,GAAeA,IAAI,CAAC8H,KAAL,CAAW,CAAX,EAAcrJ,CAAd,CAAtB;AACD,GArHiB;;AAuHlB;AACF;AACA;AACA;AACA;AACA;AACEiiR,EAAAA,UAAU,CAAC78J,KAAD,EAAQx9F,IAAR,EAAc48F,IAAd,EAAoB;AAC5B,SAAKqjH,OAAL,CAAantB,QAAb,CAAsBl2F,IAAtB,EAA4B;AAC1BwtD,MAAAA,OAAO,EAAE;AADiB,KAA5B,EAEG/iK,IAFH,CAEQglM,GAAG,IAAI;AACb,YAAMv1M,CAAC,GAAG,IAAIgmH,UAAJ,CAAeU,KAAK,CAACnlG,IAArB,EAA2BmlG,KAA3B,CAAV;AAAA,YACMl+G,CAAC,GAAG84Q,SAAS,CAAC,IAAD,EAAO,GAAP,CADnB;;AAGA,WAAK,MAAMz+Q,IAAX,IAAmB0yM,GAAnB,EAAwB/sM,CAAC,CAACg0P,YAAF,CAAe35P,IAAf,EAAqB0yM,GAAG,CAAC1yM,IAAD,CAAxB;;AAExB2F,MAAAA,CAAC,CAACu9G,aAAF,CAAgB/lH,CAAhB;AACD,KATD,EASGykB,KATH,CASS,MAAM;AACb;AACD,KAXD;AAYD,GA1IiB;;AA4IlB;AACF;AACA;AACA;AACA;AACA;AACA;AACE++P,EAAAA,aAAa,CAAC98J,KAAD,EAAQx9F,IAAR,EAAcu6P,IAAd,EAAoB;AAC/B,QAAIv6P,IAAI,IAAIA,IAAI,CAACw6P,OAAL,IAAgB,IAA5B,EAAkC;AAChCx6P,MAAAA,IAAI,GAAGq5P,WAAW,CAACr5P,IAAD,EAAOw9F,KAAP,EAAc,KAAKz2F,MAAL,EAAd,EAA6B,KAAKkzP,OAAlC,CAAlB;AACA,YAAM7+Q,KAAK,GAAGm/Q,IAAI,IAAIv6P,IAAR,IAAgBA,IAAI,CAACw6P,OAArB,IAAgC,IAA9C;;AAEA,WAAKZ,QAAL,CAAc1iR,IAAd,CAAmB,KAAK6iR,IAAxB,EAA8B,IAA9B,EAAoCv8J,KAApC,EAA2Cx9F,IAA3C,EAAiD5kB,KAAjD;AACD;AACF,GA1JiB;;AA4JlB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,yBAAyB,CAACz6P,IAAD,EAAO;AAC9B,UAAMu4P,EAAE,GAAG,KAAKxxP,MAAL,EAAX;AACA,QAAI,CAACwxP,EAAL,EAAS;AACT,UAAMthC,IAAI,GAAGshC,EAAE,CAACS,qBAAH,EAAb;AAAA,UACMM,MAAM,GAAG,KAAKW,OADpB;AAAA,UAEM/O,MAAM,GAAGlrP,IAAI,CAACkrP,MAFpB;AAAA,UAGM5qQ,KAAK,GAAG4qQ,MAAM,CAAC5qQ,KAAP,EAHd;AAAA,UAIM+tB,MAAM,GAAG68O,MAAM,CAAC78O,MAAP,EAJf;AAKA,QAAI9vB,CAAC,GAAG2sQ,MAAM,CAACrgK,EAAP,GAAYyuK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC1rM,IAArC;AAAA,QACIzuB,CAAC,GAAGouP,MAAM,CAACtgK,EAAP,GAAY0uK,MAAM,CAAC,CAAD,CAAlB,GAAwBriC,IAAI,CAAC5rM,GADrC,CAR8B,CASY;;AAE1C,WAAOrrB,IAAI,CAACsqP,IAAL,KAActqP,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAA/B,CAAP,EAA8C;AAC5CxlH,MAAAA,CAAC,IAAIyhB,IAAI,CAACzhB,CAAL,IAAU,CAAf;AACAue,MAAAA,CAAC,IAAIkD,IAAI,CAAClD,CAAL,IAAU,CAAf;AACD,KAd6B,CAc5B;;;AAGF,WAAO;AACLve,MAAAA,CADK;AAELue,MAAAA,CAFK;AAGLxc,MAAAA,KAHK;AAIL+tB,MAAAA,MAJK;AAKLkd,MAAAA,IAAI,EAAEhtC,CALD;AAML8sC,MAAAA,GAAG,EAAEvuB,CANA;AAOL0uB,MAAAA,KAAK,EAAEjtC,CAAC,GAAG+B,KAPN;AAQLgrC,MAAAA,MAAM,EAAExuB,CAAC,GAAGuR;AARP,KAAP;AAUD;;AA/LiB,CAApB;AAmMA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASqsP,QAAT,CAAkBpjD,MAAlB,EAA0B;AACxB,OAAKwiD,GAAL,GAAW,IAAX;AACA,OAAKa,QAAL,GAAgB,IAAhB;AACA,OAAK16C,OAAL,GAAe,IAAImrC,cAAJ,CAAmB9zC,MAAnB,CAAf;AACD;;AACDojD,QAAQ,CAACliR,SAAT,GAAqB;AACnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEq/Q,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC;AACjD,SAAKd,GAAL,GAAWvB,EAAX;AACA,WAAO,KAAKvsF,MAAL,CAAY1rL,KAAZ,EAAmB+tB,MAAnB,EAA2BirP,MAA3B,EAAmCsB,WAAnC,CAAP;AACD,GAfkB;;AAiBnB;AACF;AACA;AACA;AACEnsO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKqrO,GAAZ;AACD,GAvBkB;;AAyBnB;AACF;AACA;AACA;AACA;AACE/yP,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK+yP,GAAL,IAAY,KAAKA,GAAL,CAASE,UAA5B;AACD,GAhCkB;;AAkCnB;AACF;AACA;AACEhI,EAAAA,UAAU,CAAC6I,OAAD,EAAU;AAClB,QAAI1iR,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B,OAAO,KAAKijR,QAAZ;AAC5B,SAAKA,QAAL,GAAgBE,OAAhB;AACA,WAAO,IAAP;AACD,GAzCkB;;AA2CnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE7uF,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzC,SAAKE,MAAL,GAAcx6Q,KAAd;AACA,SAAKy6Q,OAAL,GAAe1sP,MAAf;AACA,SAAK4rP,OAAL,GAAeX,MAAM,IAAI,CAAC,CAAD,EAAI,CAAJ,CAAzB;AACA,SAAK0B,MAAL,GAAcJ,WAAW,IAAI,CAA7B;AACA,WAAO,IAAP;AACD,GA3DkB;;AA6DnB;AACF;AACA;AACA;AACA;AACA;AACEK,EAAAA,KAAK;AACL;AACA,GAAE,CArEiB;;AAuEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,MAAM,CAACrL,KAAD,EAAQ;AACZ,UAAMzpQ,CAAC,GAAG,IAAV,CADY,CACI;AAChB;;AAEAA,IAAAA,CAAC,CAAC+0Q,KAAF,GAAU,YAAY;AACpB/0Q,MAAAA,CAAC,CAACg1Q,OAAF,CAAUvL,KAAV;AACD,KAFD,CAJY,CAMT;;;AAGHzpQ,IAAAA,CAAC,CAAC+0Q,KAAF,GATY,CASD;AACX;;;AAGA/0Q,IAAAA,CAAC,CAAC+0Q,KAAF,GAAU,IAAV;AACA,WAAO/0Q,CAAP;AACD,GAhGkB;;AAkGnB;AACF;AACA;AACA;AACA;AACEg1Q,EAAAA,OAAO;AACP;AACA,GAAC;AACA,GA1GkB;;AA4GnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAW,CAACxL,KAAD,EAAQ;AACjB,UAAMzpQ,CAAC,GAAG,KAAK80Q,MAAL,CAAYrL,KAAZ,CAAV;AACA,WAAO,KAAKyL,MAAL,GAAc,KAAKA,MAAL,CAAYj0Q,IAAZ,CAAiB,MAAMjB,CAAvB,CAAd,GAA0CrF,OAAO,CAACC,OAAR,CAAgBoF,CAAhB,CAAjD;AACD,GAvHkB;;AAyHnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEm1Q,EAAAA,KAAK,CAAClyO,MAAD,EAAS6pK,GAAT,EAAc;AACjB,QAAI9sM,CAAC,GAAG,IAAR;AAAA,QACIs2B,CAAC,GAAGt2B,CAAC,CAAC65N,OAAF,CAAU52L,MAAV,EAAkB6pK,GAAlB,CADR;;AAGA,QAAI,CAAC9sM,CAAC,CAACk1Q,MAAP,EAAe;AACb;AACA,YAAMpkR,IAAI,GAAGkP,CAAC,CAAC+0Q,KAAf;AACA/0Q,MAAAA,CAAC,CAACk1Q,MAAF,GAAWl1Q,CAAC,CAAC65N,OAAF,CAAU5rM,KAAV,GAAkBhtB,IAAlB,CAAuBm0Q,MAAM,IAAI;AAC1C,YAAIA,MAAJ,EAAYtkR,IAAI;AAChBkP,QAAAA,CAAC,CAACk1Q,MAAF,GAAW,IAAX;AACD,OAHU,CAAX;AAID;;AAED,WAAO5+O,CAAP;AACD,GA/IkB;;AAiJnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE8uO,EAAAA,WAAW,CAACt4D,GAAD,EAAM;AACf,WAAO,KAAKqoE,KAAL,CAAW,aAAX,EAA0BroE,GAA1B,CAAP;AACD,GA1JkB;;AA4JnB;AACF;AACA;AACA;AACA;AACA;AACA;AACEu4D,EAAAA,SAAS,CAACv4D,GAAD,EAAM;AACb,WAAO,KAAKqoE,KAAL,CAAW,WAAX,EAAwBroE,GAAxB,CAAP;AACD;;AArKkB,CAArB;AAyKA,MAAMuoE,YAAY,GAAG,SAArB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,YAAY,GAAG,SAArB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,gBAAgB,GAAG,UAAzB;AACA,MAAMC,UAAU,GAAG,OAAnB;AACA,MAAMC,eAAe,GAAG,YAAxB;AACA,MAAMC,eAAe,GAAG,YAAxB;AACA,MAAMC,cAAc,GAAG,WAAvB;AACA,MAAMC,aAAa,GAAG,UAAtB;AACA,MAAMC,MAAM,GAAG,CAAClB,YAAD,EAAeC,aAAf,EAA8BC,UAA9B,EAA0CC,cAA1C,EAA0DC,cAA1D,EAA0EC,aAA1E,EAAyFC,cAAzF,EAAyGC,YAAzG,EAAuHC,cAAvH,EAAuIC,aAAvI,EAAsJC,cAAtJ,EAAsKC,UAAtK,EAAkLC,gBAAlL,EAAoMC,UAApM,EAAgNC,eAAhN,EAAiOC,eAAjO,EAAkPC,cAAlP,EAAkQC,aAAlQ,CAAf;AACA,MAAME,gBAAgB,GAAGX,cAAzB;AACA,MAAMY,gBAAgB,GAAGX,aAAzB;AACA,MAAMY,SAAS,GAAGV,UAAlB;;AAEA,SAASW,aAAT,CAAuBzlD,MAAvB,EAA+BkjD,OAA/B,EAAwC;AACtChB,EAAAA,OAAO,CAACtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;AACA,OAAKwC,KAAL,GAAa,IAAb;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAKC,MAAL,GAAc,IAAd;AACA,OAAK/rF,OAAL,GAAe,EAAf;AACD;;AAED,MAAMgsF,WAAW,GAAG9kQ,IAAI,IAAIA,IAAI,KAAKmkQ,eAAT,IAA4BnkQ,IAAI,KAAKokQ,cAArC,IAAuDpkQ,IAAI,KAAKqkQ,aAAhE,GAAgF,CAACF,eAAD,EAAkBC,cAAlB,EAAkCC,aAAlC,CAAhF,GAAmI,CAACrkQ,IAAD,CAA/J,EAAuK;;;AAGvK,SAAS+kQ,kBAAT,CAA4BtoK,OAA5B,EAAqCz8F,IAArC,EAA2C;AACzC8kQ,EAAAA,WAAW,CAAC9kQ,IAAD,CAAX,CAAkBnc,OAAlB,CAA0B6iB,CAAC,IAAIoI,gBAAgB,CAAC2tF,OAAD,EAAU/1F,CAAV,CAA/C;AACD;;AAED,SAASoI,gBAAT,CAA0B2tF,OAA1B,EAAmCz8F,IAAnC,EAAyC;AACvC,QAAM0O,MAAM,GAAG+tF,OAAO,CAAC/tF,MAAR,EAAf;;AAEA,MAAIA,MAAM,IAAI,CAAC+tF,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,CAAf,EAAsC;AACpCy8F,IAAAA,OAAO,CAACq8E,OAAR,CAAgB94K,IAAhB,IAAwB,CAAxB;AACA0O,IAAAA,MAAM,CAACI,gBAAP,CAAwB9O,IAAxB,EAA8By8F,OAAO,CAACz8F,IAAD,CAAP,GAAgBo3L,GAAG,IAAI36F,OAAO,CAACz8F,IAAD,CAAP,CAAco3L,GAAd,CAAvB,GAA4CA,GAAG,IAAI36F,OAAO,CAACuoK,IAAR,CAAahlQ,IAAb,EAAmBo3L,GAAnB,CAAjF;AACD;AACF;;AAED,SAASxzL,IAAT,CAAcqhQ,SAAd,EAAyBC,SAAzB,EAAoCC,QAApC,EAA8C;AAC5C,SAAO,UAAU/tE,GAAV,EAAe;AACpB,UAAMnwM,CAAC,GAAG,KAAKo6Q,OAAf;AAAA,UACMh9O,CAAC,GAAG,KAAK+gP,SAAL,CAAehuE,GAAf,CADV;;AAGA,QAAI/yK,CAAC,KAAKp9B,CAAV,EAAa;AACX;AACA,WAAK+9Q,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EAFW,CAEgB;AAC5B,KAHD,MAGO;AACL;AACA,UAAI,CAACnwM,CAAD,IAAM,CAACA,CAAC,CAACo+Q,IAAb,EAAmB;AACjB;AACA;AACA,aAAKL,IAAL,CAAUG,QAAV,EAAoB/tE,GAApB;AACD;;AAED,WAAKiqE,OAAL,GAAeh9O,CAAf,CARK,CAQa;;AAElB,WAAK2gP,IAAL,CAAUE,SAAV,EAAqB9tE,GAArB,EAVK,CAUsB;;AAE3B,WAAK4tE,IAAL,CAAUC,SAAV,EAAqB7tE,GAArB,EAZK,CAYsB;AAC5B;AACF,GArBD;AAsBD;;AAED,SAASkuE,QAAT,CAAkBtlQ,IAAlB,EAAwB;AACtB,SAAO,UAAUo3L,GAAV,EAAe;AACpB,SAAK4tE,IAAL,CAAUhlQ,IAAV,EAAgBo3L,GAAhB;AACA,SAAKiqE,OAAL,GAAe,IAAf;AACD,GAHD;AAID;;AAED,wBAASqD,aAAT,EAAwBvD,OAAxB,EAAiC;AAC/B3B,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,SAAK+kQ,OAAL,GAAerF,EAAE,IAAID,OAAO,CAACC,EAAD,EAAK,QAAL,CAA5B,CAD0B,CACkB;;AAE5C,KAAC6D,UAAD,EAAaL,cAAb,EAA6BE,cAA7B,EAA6CC,aAA7C,EAA4DL,cAA5D,EAA4E3/Q,OAA5E,CAAoFmc,IAAI,IAAI+kQ,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CAA9G;AACA,WAAOmhQ,OAAO,CAAChhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,GAN8B;;AAQ/B;AACAkO,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK62P,OAAZ;AACD,GAX8B;;AAa/B;AACAxzG,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKwzG,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAP;AACD,GAhB8B;;AAkB/B;AACAyqK,EAAAA,MAAM,EAAE4qF,MAnBuB;;AAqB/B;AACAkB,EAAAA,cAAc,CAACpuE,GAAD,EAAM;AAClB,SAAK4tE,IAAL,CAAUd,eAAV,EAA2B9sE,GAA3B;AACD,GAxB8B;;AA0B/BquE,EAAAA,SAAS,EAAE7hQ,IAAI,CAACggQ,cAAD,EAAiBE,cAAjB,EAAiCD,aAAjC,CA1BgB;AA2B/B6B,EAAAA,QAAQ,EAAE9hQ,IAAI,CAAC6/P,aAAD,EAAgBF,cAAhB,EAAgCC,cAAhC,CA3BiB;AA4B/BmC,EAAAA,QAAQ,EAAEL,QAAQ,CAACzB,aAAD,CA5Ba;AA6B/B+B,EAAAA,SAAS,EAAEN,QAAQ,CAAC9B,cAAD,CA7BY;;AA+B/BqC,EAAAA,SAAS,CAACzuE,GAAD,EAAM;AACb,SAAKutE,KAAL,GAAa,KAAKtD,OAAlB;AACA,SAAK2D,IAAL,CAAUtB,cAAV,EAA0BtsE,GAA1B;AACD,GAlC8B;;AAoC/B0uE,EAAAA,KAAK,CAAC1uE,GAAD,EAAM;AACT,QAAI,KAAKutE,KAAL,KAAe,KAAKtD,OAAxB,EAAiC;AAC/B,WAAK2D,IAAL,CAAUjB,UAAV,EAAsB3sE,GAAtB;AACA,WAAKutE,KAAL,GAAa,IAAb;AACD;AACF,GAzC8B;;AA2C/BoB,EAAAA,UAAU,CAAC3uE,GAAD,EAAM;AACd,SAAKwtE,MAAL,GAAc,KAAKQ,SAAL,CAAehuE,GAAG,CAAC4uE,cAAJ,CAAmB,CAAnB,CAAf,CAAd;;AAEA,QAAI,KAAKnB,MAAT,EAAiB;AACf,WAAKxD,OAAL,GAAe,KAAKuD,MAApB;AACA,WAAKC,MAAL,GAAc,KAAd;AACD;;AAED,SAAKG,IAAL,CAAUb,eAAV,EAA2B/sE,GAA3B,EAAgC,IAAhC;AACD,GApD8B;;AAsD/B6uE,EAAAA,SAAS,CAAC7uE,GAAD,EAAM;AACb,SAAK4tE,IAAL,CAAUZ,cAAV,EAA0BhtE,GAA1B,EAA+B,IAA/B;AACD,GAxD8B;;AA0D/B8uE,EAAAA,QAAQ,CAAC9uE,GAAD,EAAM;AACZ,SAAK4tE,IAAL,CAAUX,aAAV,EAAyBjtE,GAAzB,EAA8B,IAA9B;AACA,SAAKwtE,MAAL,GAAc,IAAd;AACD,GA7D8B;;AA+D/B;AACAI,EAAAA,IAAI,CAAChlQ,IAAD,EAAOo3L,GAAP,EAAYkrB,KAAZ,EAAmB;AACrB,UAAMr7N,CAAC,GAAGq7N,KAAK,GAAG,KAAKsiD,MAAR,GAAiB,KAAKvD,OAArC;AAAA,UACM/0N,CAAC,GAAG,KAAKg1N,SAAL,CAAethQ,IAAf,CADV,CADqB,CAEW;;AAEhCo3L,IAAAA,GAAG,CAAC+uE,QAAJ,GAAenmQ,IAAf,CAJqB,CAIA;;AAErB,QAAIA,IAAI,KAAKykQ,SAAT,IAAsBx9Q,CAAtB,IAA2BA,CAAC,CAACs9G,IAAjC,EAAuC;AACrC,WAAKy9J,UAAL,CAAgB5qE,GAAhB,EAAqBnwM,CAArB,EAAwBA,CAAC,CAACs9G,IAA1B;AACD,KAFD,MAEO,IAAIvkG,IAAI,KAAKukQ,gBAAT,IAA6BvkQ,IAAI,KAAKwkQ,gBAA1C,EAA4D;AACjE,WAAKvC,aAAL,CAAmB7qE,GAAnB,EAAwBnwM,CAAxB,EAA2B+Y,IAAI,KAAKwkQ,gBAApC;AACD,KAVoB,CAUnB;;;AAGF,QAAIl4N,CAAJ,EAAO;AACL,WAAK,IAAIvsD,CAAC,GAAG,CAAR,EAAWN,GAAG,GAAG6sD,CAAC,CAACjtD,MAAxB,EAAgCU,CAAC,GAAGN,GAApC,EAAyC,EAAEM,CAA3C,EAA8C;AAC5CusD,QAAAA,CAAC,CAACvsD,CAAD,CAAD,CAAK08G,OAAL,CAAa59G,IAAb,CAAkB,KAAK6iR,IAAvB,EAA6BtqE,GAA7B,EAAkCnwM,CAAlC;AACD;AACF;AACF,GAlF8B;;AAoF/B;AACArG,EAAAA,EAAE,CAACof,IAAD,EAAOy8F,OAAP,EAAgB;AAChB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,UAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,QAAI18G,CAAC,GAAG,CAAR,EAAW;AACTglR,MAAAA,kBAAkB,CAAC,IAAD,EAAO/kQ,IAAP,CAAlB;AACA,OAACssC,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiC;AAC/BggB,QAAAA,IAAI,EAAEA,IADyB;AAE/By8F,QAAAA,OAAO,EAAEA;AAFsB,OAAjC;AAID;;AAED,WAAO,IAAP;AACD,GAnG8B;;AAqG/B;AACA17G,EAAAA,GAAG,CAACif,IAAD,EAAOy8F,OAAP,EAAgB;AACjB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,UAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,QAAI18G,CAAC,IAAI,CAAT,EAAY;AACVusD,MAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,WAAO,IAAP;AACD,GAhH8B;;AAkH/BqlR,EAAAA,SAAS,CAAChuE,GAAD,EAAM;AACb,UAAM/yK,CAAC,GAAGi9K,KAAK,CAAClK,GAAD,EAAM,KAAKmuE,OAAX,CAAf;AAAA,UACM75P,CAAC,GAAG,KAAKk2P,OADf;AAEA,WAAO,KAAK5J,IAAL,CAAU,KAAK6J,MAAf,EAAuBx9O,CAAC,CAAC,CAAD,CAAxB,EAA6BA,CAAC,CAAC,CAAD,CAA9B,EAAmCA,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAA3C,EAAgD2Y,CAAC,CAAC,CAAD,CAAD,GAAO3Y,CAAC,CAAC,CAAD,CAAxD,CAAP;AACD,GAtH8B;;AAwH/B;AACA;AACA;AACAssP,EAAAA,IAAI,CAACR,KAAD,EAAQtxQ,CAAR,EAAWue,CAAX,EAAcwzP,EAAd,EAAkBC,EAAlB,EAAsB;AACxB,UAAM1pO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,UACMkgG,IAAI,GAAG+M,KAAK,CAACxH,KAAK,CAACmD,QAAP,CADlB;AAEA,WAAO1I,IAAI,CAAC+F,IAAL,CAAUn5Q,IAAV,CAAe,IAAf,EAAqB2vC,CAArB,EAAwBgpO,KAAxB,EAA+BtxQ,CAA/B,EAAkCue,CAAlC,EAAqCwzP,EAArC,EAAyCC,EAAzC,CAAP;AACD;;AA/H8B,CAAjC;;AAmIA,SAAS74M,gBAAT,GAA4B;AAC1B,SAAO,OAAO1yC,MAAP,KAAkB,WAAlB,GAAgCA,MAAM,CAAC0yC,gBAAP,IAA2B,CAA3D,GAA+D,CAAtE;AACD;;AAED,IAAI84M,UAAU,GAAG94M,gBAAgB,EAAjC;;AACA,SAASs0H,MAAT,CAAiBjlK,MAAjB,EAAyBzmB,KAAzB,EAAgC+tB,MAAhC,EAAwCirP,MAAxC,EAAgDsB,WAAhD,EAA6DvuE,GAA7D,EAAkE;AAChE,QAAMoyE,KAAK,GAAG,OAAOC,WAAP,KAAuB,WAAvB,IAAsC33P,MAAM,YAAY23P,WAAxD,IAAuE33P,MAAM,CAAC43P,UAAP,IAAqB,IAA1G;AAAA,QACMv0G,OAAO,GAAGrjJ,MAAM,CAACO,UAAP,CAAkB,IAAlB,CADhB;AAAA,QAEMs3P,KAAK,GAAGH,KAAK,GAAGjO,UAAH,GAAgBoK,WAFnC;AAGA7zP,EAAAA,MAAM,CAACzmB,KAAP,GAAeA,KAAK,GAAGs+Q,KAAvB;AACA73P,EAAAA,MAAM,CAACsH,MAAP,GAAgBA,MAAM,GAAGuwP,KAAzB;;AAEA,OAAK,MAAMviR,GAAX,IAAkBgwM,GAAlB,EAAuB;AACrBjiC,IAAAA,OAAO,CAAC/tK,GAAD,CAAP,GAAegwM,GAAG,CAAChwM,GAAD,CAAlB;AACD;;AAED,MAAIoiR,KAAK,IAAIG,KAAK,KAAK,CAAvB,EAA0B;AACxB73P,IAAAA,MAAM,CAAC83P,KAAP,CAAav+Q,KAAb,GAAqBA,KAAK,GAAG,IAA7B;AACAymB,IAAAA,MAAM,CAAC83P,KAAP,CAAaxwP,MAAb,GAAsBA,MAAM,GAAG,IAA/B;AACD;;AAED+7I,EAAAA,OAAO,CAAComG,UAAR,GAAqBoO,KAArB;AACAx0G,EAAAA,OAAO,CAAC00G,YAAR,CAAqBF,KAArB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkCA,KAAlC,EAAyCA,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAAvD,EAA4DsF,KAAK,GAAGtF,MAAM,CAAC,CAAD,CAA1E;AACA,SAAOvyP,MAAP;AACD;;AAED,SAASg4P,cAAT,CAAwBznD,MAAxB,EAAgC;AAC9BojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAK0nD,QAAL,GAAgB,EAAhB;AACA,OAAKC,OAAL,GAAe,KAAf;AACA,OAAKC,MAAL,GAAc,IAAItU,MAAJ,EAAd;AACA,OAAKuU,MAAL,GAAc,IAAIvU,MAAJ,EAAd;AACD;;AACD,MAAMxnO,IAAI,GAAGs3O,QAAQ,CAACliR,SAAtB;;AAEA,MAAM4mR,UAAU,GAAG,CAAC9F,MAAD,EAASh5Q,KAAT,EAAgB+tB,MAAhB,KAA2B,IAAIu8O,MAAJ,GAAa7vQ,GAAb,CAAiB,CAAjB,EAAoB,CAApB,EAAuBuF,KAAvB,EAA8B+tB,MAA9B,EAAsCwqL,SAAtC,CAAgD,CAACygE,MAAM,CAAC,CAAD,CAAvD,EAA4D,CAACA,MAAM,CAAC,CAAD,CAAnE,CAA9C;;AAEA,SAAS+F,YAAT,CAAsBx4O,CAAtB,EAAyB1gC,CAAzB,EAA4BmzQ,MAA5B,EAAoC;AAClC;AACAnzQ,EAAAA,CAAC,CAAC25K,MAAF,CAAS,CAAT,EAAYr7K,KAAZ,GAFkC,CAEb;;AAErB,MAAIoiC,CAAC,CAAC2pO,UAAF,GAAe,CAAnB,EAAsB;AACpBrqQ,IAAAA,CAAC,CAAC8H,KAAF,CAAQ44B,CAAC,CAAC2pO,UAAV,EAAsB/rQ,KAAtB,GAA8BwJ,KAA9B,CAAoC,IAAI44B,CAAC,CAAC2pO,UAA1C;AACD,GANiC,CAMhC;;;AAGFrqQ,EAAAA,CAAC,CAAC0yM,SAAF,CAAY,EAAEygE,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAAZ,EAA8B,EAAEA,MAAM,CAAC,CAAD,CAAN,GAAY,CAAd,CAA9B,EATkC,CASe;;AAEjDzyO,EAAAA,CAAC,CAAC4gO,SAAF;AACA5gO,EAAAA,CAAC,CAACowM,IAAF,CAAO9wO,CAAC,CAAC0kG,EAAT,EAAa1kG,CAAC,CAACykG,EAAf,EAAmBzkG,CAAC,CAAC7F,KAAF,EAAnB,EAA8B6F,CAAC,CAACkoB,MAAF,EAA9B;AACAwY,EAAAA,CAAC,CAACvG,IAAF;AACA,SAAOn6B,CAAP;AACD;;AAED,wBAAS44Q,cAAT,EAAyBrE,QAAzB,EAAmC;AACjC7C,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC7rM,OAAzC,EAAkD;AAC1D,SAAKiwM,QAAL,GAAgBjwM,OAAO,IAAI,EAA3B;AACA,SAAK6uM,OAAL,GAAe,KAAKoB,QAAL,CAAcM,eAAd,GAAgC,IAAhC,GAAuC,wBAAO,CAAP,EAAU,CAAV,EAAa,KAAKN,QAAL,CAAc3mQ,IAA3B,CAAtD,CAF0D,CAE8B;;AAExF,QAAIkgQ,EAAE,IAAI,KAAKqF,OAAf,EAAwB;AACtB/E,MAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR,CAAgBgH,WAAhB,CAA4B,KAAK3B,OAAjC;;AAEA,WAAKA,OAAL,CAAatqB,YAAb,CAA0B,OAA1B,EAAmC,OAAnC;AACD,KARyD,CAQxD;;;AAGF,WAAOlwN,IAAI,CAACy0O,UAAL,CAAgB3gR,IAAhB,CAAqB,IAArB,EAA2BqhR,EAA3B,EAA+Bj4Q,KAA/B,EAAsC+tB,MAAtC,EAA8CirP,MAA9C,EAAsDsB,WAAtD,CAAP;AACD,GAbgC;;AAejC5uF,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzCx3O,IAAAA,IAAI,CAAC4oJ,MAAL,CAAY90L,IAAZ,CAAiB,IAAjB,EAAuBoJ,KAAvB,EAA8B+tB,MAA9B,EAAsCirP,MAAtC,EAA8CsB,WAA9C;;AAEA,QAAI,KAAKgD,OAAT,EAAkB;AAChB;AACA5xF,MAAAA,MAAM,CAAC,KAAK4xF,OAAN,EAAe,KAAK9C,MAApB,EAA4B,KAAKC,OAAjC,EAA0C,KAAKd,OAA/C,EAAwD,KAAKe,MAA7D,EAAqE,KAAKgE,QAAL,CAAc50G,OAAnF,CAAN;AACD,KAHD,MAGO;AACL;AACA,YAAMpkD,GAAG,GAAG,KAAKg5J,QAAL,CAAcM,eAA1B;AACA,UAAI,CAACt5J,GAAL,EAAU,qBAAM,qDAAN;AACVA,MAAAA,GAAG,CAAC/3G,KAAJ,CAAU,KAAK+sQ,MAAf,EAAuB,KAAKA,MAA5B;AACAh1J,MAAAA,GAAG,CAAC6yF,SAAJ,CAAc,KAAKohE,OAAL,CAAa,CAAb,CAAd,EAA+B,KAAKA,OAAL,CAAa,CAAb,CAA/B;AACD;;AAED,SAAKgF,OAAL,GAAe,IAAf;AACA,WAAO,IAAP;AACD,GA/BgC;;AAiCjCl4P,EAAAA,MAAM,GAAG;AACP,WAAO,KAAK62P,OAAZ;AACD,GAnCgC;;AAqCjCxzG,EAAAA,OAAO,GAAG;AACR,WAAO,KAAK40G,QAAL,CAAcM,eAAd,KAAkC,KAAK1B,OAAL,GAAe,KAAKA,OAAL,CAAat2P,UAAb,CAAwB,IAAxB,CAAf,GAA+C,IAAjF,CAAP;AACD,GAvCgC;;AAyCjC2zP,EAAAA,KAAK,CAACj7P,IAAD,EAAO;AACV,UAAM7Z,CAAC,GAAG,KAAKg5Q,MAAL,CAAYtvE,KAAZ,GAAoBmR,KAApB,CAA0BhhM,IAAI,CAACkrP,MAA/B,CAAV;;AAEA,QAAIrkO,CAAC,GAAG7mB,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAlB;;AAEA,WAAOl9E,CAAP,EAAU;AACR1gC,MAAAA,CAAC,CAAC0yM,SAAF,CAAYhyK,CAAC,CAACtoC,CAAF,IAAO,CAAnB,EAAsBsoC,CAAC,CAAC/pB,CAAF,IAAO,CAA7B;AACA+pB,MAAAA,CAAC,GAAGA,CAAC,CAACyjO,IAAF,CAAOvmJ,KAAX;AACD;;AAED,SAAKm7J,MAAL,CAAYl+D,KAAZ,CAAkB76M,CAAlB;AACD,GApDgC;;AAsDjCi1Q,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb,UAAMhpO,CAAC,GAAG,KAAKujI,OAAL,EAAV;AAAA,UACMrmJ,CAAC,GAAG,KAAKk2P,OADf;AAAA,UAEMv1N,CAAC,GAAG,KAAKo2N,MAFf;AAAA,UAGMn2N,CAAC,GAAG,KAAKo2N,OAHf;AAAA,UAIM5jK,EAAE,GAAG,KAAK+nK,MAJhB;AAAA,UAKMM,EAAE,GAAGJ,UAAU,CAACr7P,CAAD,EAAI2gC,CAAJ,EAAOC,CAAP,CALrB,CADa,CAMmB;;AAEhC9d,IAAAA,CAAC,CAACriB,IAAF;AACA,UAAMre,CAAC,GAAG,KAAK84Q,OAAL,IAAgB9nK,EAAE,CAACo1F,KAAH,EAAhB,IAA8B,KAAK0yE,OAAL,GAAe,KAAf,EAAsBO,EAAE,CAAC1/F,MAAH,CAAU,CAAV,CAApD,IAAoEu/F,YAAY,CAACx4O,CAAD,EAAI24O,EAAE,CAAC3nC,SAAH,CAAa1gI,EAAb,CAAJ,EAAsBpzF,CAAtB,CAA1F;AACA,SAAK8rL,KAAL,CAAW,CAAC9rL,CAAC,CAAC,CAAD,CAAb,EAAkB,CAACA,CAAC,CAAC,CAAD,CAApB,EAAyB2gC,CAAzB,EAA4BC,CAA5B,EAVa,CAUmB;;AAEhC,SAAK24L,IAAL,CAAUz2M,CAAV,EAAagpO,KAAb,EAAoB1pQ,CAApB,EAZa,CAYW;;AAExB0gC,IAAAA,CAAC,CAAC6rO,OAAF;AACAv7J,IAAAA,EAAE,CAAC04F,KAAH;AACA,WAAO,IAAP;AACD,GAvEgC;;AAyEjCytC,EAAAA,IAAI,CAACt3H,GAAD,EAAM6pJ,KAAN,EAAa3E,MAAb,EAAqB;AACvB,UAAMZ,IAAI,GAAG+M,KAAK,CAACxH,KAAK,CAACmD,QAAP,CAAlB;AACA,QAAInD,KAAK,CAACvvO,IAAV,EAAgBsxO,MAAM,CAAC5rJ,GAAD,EAAM6pJ,KAAN,CAAN;AAChBvF,IAAAA,IAAI,CAAChtB,IAAL,CAAUpmP,IAAV,CAAe,IAAf,EAAqB8uH,GAArB,EAA0B6pJ,KAA1B,EAAiC3E,MAAjC;AACA,QAAI2E,KAAK,CAACvvO,IAAV,EAAgB0lF,GAAG,CAAC0sJ,OAAJ;AACjB,GA9EgC;;AAgFjC7iE,EAAAA,KAAK,CAACtxM,CAAD,EAAIue,CAAJ,EAAO4nC,CAAP,EAAUC,CAAV,EAAa;AAChB,UAAM0nJ,GAAG,GAAG,KAAK2yE,QAAjB;AAAA,UACMn4O,CAAC,GAAG,KAAKujI,OAAL,EADV;;AAGA,QAAIiiC,GAAG,CAACh0L,IAAJ,KAAa,KAAb,IAAsB,CAACg0L,GAAG,CAACizE,eAA/B,EAAgD;AAC9C;AACA;AACAz4O,MAAAA,CAAC,CAAC44O,SAAF,CAAYlhR,CAAZ,EAAeue,CAAf,EAAkB4nC,CAAlB,EAAqBC,CAArB;AACD;;AAED,QAAI,KAAKg2N,QAAL,IAAiB,IAArB,EAA2B;AACzB9zO,MAAAA,CAAC,CAAC6nO,SAAF,GAAc,KAAKiM,QAAnB;AACA9zO,MAAAA,CAAC,CAAC8nO,QAAF,CAAWpwQ,CAAX,EAAcue,CAAd,EAAiB4nC,CAAjB,EAAoBC,CAApB;AACD;AACF;;AA9FgC,CAAnC;;AAkGA,SAAS+6N,UAAT,CAAoBpoD,MAApB,EAA4BkjD,OAA5B,EAAqC;AACnChB,EAAAA,OAAO,CAACtiR,IAAR,CAAa,IAAb,EAAmBogO,MAAnB,EAA2BkjD,OAA3B;AACA,QAAM71N,CAAC,GAAG,IAAV;AACAA,EAAAA,CAAC,CAACg7N,YAAF,GAAiBnuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC1C,QAAIA,IAAI,IAAIA,IAAI,CAAC48F,IAAjB,EAAuBj4D,CAAC,CAAC01N,UAAF,CAAa5qE,GAAb,EAAkBzvL,IAAlB,EAAwBA,IAAI,CAAC48F,IAA7B;AACxB,GAFwB,CAAzB;AAGAj4D,EAAAA,CAAC,CAACi7N,eAAF,GAAoBpuF,QAAQ,CAAC7sI,CAAD,EAAI,CAAC8qJ,GAAD,EAAMzvL,IAAN,KAAe;AAC7C2kC,IAAAA,CAAC,CAAC21N,aAAF,CAAgB7qE,GAAhB,EAAqBzvL,IAArB,EAA2ByvL,GAAG,CAACp3L,IAAJ,KAAawkQ,gBAAxC;AACD,GAF2B,CAA5B;AAGD,EAAC;;;AAEF,MAAMrrF,QAAQ,GAAG,CAACpnB,OAAD,EAAUt1D,OAAV,KAAsB26F,GAAG,IAAI;AAC5C,MAAIzvL,IAAI,GAAGyvL,GAAG,CAAC9gK,MAAJ,CAAWkxO,QAAtB;AACA7/P,EAAAA,IAAI,GAAG9nB,KAAK,CAACuH,OAAN,CAAcugB,IAAd,IAAsBA,IAAI,CAAC,CAAD,CAA1B,GAAgCA,IAAvC;AACAyvL,EAAAA,GAAG,CAAC+uE,QAAJ,GAAe/uE,GAAG,CAACp3L,IAAnB;AACAy8F,EAAAA,OAAO,CAAC59G,IAAR,CAAakzK,OAAO,CAAC2vG,IAArB,EAA2BtqE,GAA3B,EAAgCzvL,IAAhC;AACD,CALD;;AAOA,wBAAS0/P,UAAT,EAAqBlG,OAArB,EAA8B;AAC5B3B,EAAAA,UAAU,CAACU,EAAD,EAAKe,MAAL,EAAazgQ,GAAb,EAAkB;AAC1B,QAAIinQ,GAAG,GAAG,KAAKC,IAAf;;AAEA,QAAID,GAAJ,EAAS;AACPA,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBo9E,SAAxB,EAAmC,KAAK6C,YAAxC;AACAG,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBk9E,gBAAxB,EAA0C,KAAKgD,eAA/C;AACAE,MAAAA,GAAG,CAACpgF,mBAAJ,CAAwBm9E,gBAAxB,EAA0C,KAAK+C,eAA/C;AACD;;AAED,SAAKG,IAAL,GAAYD,GAAG,GAAGvH,EAAE,IAAID,OAAO,CAACC,EAAD,EAAK,KAAL,CAA/B;;AAEA,QAAIuH,GAAJ,EAAS;AACPA,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqB21P,SAArB,EAAgC,KAAK6C,YAArC;AACAG,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqBy1P,gBAArB,EAAuC,KAAKgD,eAA5C;AACAE,MAAAA,GAAG,CAAC34P,gBAAJ,CAAqB01P,gBAArB,EAAuC,KAAK+C,eAA5C;AACD;;AAED,WAAOpG,OAAO,CAAChhR,SAAR,CAAkBq/Q,UAAlB,CAA6B3gR,IAA7B,CAAkC,IAAlC,EAAwCqhR,EAAxC,EAA4Ce,MAA5C,EAAoDzgQ,GAApD,CAAP;AACD,GAnB2B;;AAqB5BkO,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKg5P,IAAZ;AACD,GAvB2B;;AAyB5B;AACA9mR,EAAAA,EAAE,CAACof,IAAD,EAAOy8F,OAAP,EAAgB;AAChB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SADf;AAAA,UAEMvhR,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAC,CAAChrD,IAAD,CAApB,EAA4B0e,IAA5B,EAAkCy8F,OAAlC,CAFV;;AAIA,QAAI18G,CAAC,GAAG,CAAR,EAAW;AACT,YAAMmG,CAAC,GAAG;AACR8Z,QAAAA,IADQ;AAERy8F,QAAAA,OAFQ;AAGR08E,QAAAA,QAAQ,EAAEA,QAAQ,CAAC,IAAD,EAAO18E,OAAP;AAHV,OAAV;AAKA,OAACnwD,CAAC,CAAChrD,IAAD,CAAD,KAAYgrD,CAAC,CAAChrD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BtB,IAA5B,CAAiCkG,CAAjC;;AAEA,UAAI,KAAKwhR,IAAT,EAAe;AACb,aAAKA,IAAL,CAAU54P,gBAAV,CAA2BxtB,IAA3B,EAAiC4E,CAAC,CAACizL,QAAnC;AACD;AACF;;AAED,WAAO,IAAP;AACD,GA7C2B;;AA+C5B;AACAp4L,EAAAA,GAAG,CAACif,IAAD,EAAOy8F,OAAP,EAAgB;AACjB,UAAMn7G,IAAI,GAAG,KAAKygR,SAAL,CAAe/hQ,IAAf,CAAb;AAAA,UACMssC,CAAC,GAAG,KAAKg1N,SAAL,CAAehgR,IAAf,CADV;AAAA,UAEMvB,CAAC,GAAG,KAAK+hR,aAAL,CAAmBx1N,CAAnB,EAAsBtsC,IAAtB,EAA4By8F,OAA5B,CAFV;;AAIA,QAAI18G,CAAC,IAAI,CAAT,EAAY;AACV,UAAI,KAAK2nR,IAAT,EAAe;AACb,aAAKA,IAAL,CAAUrgF,mBAAV,CAA8B/lM,IAA9B,EAAoCgrD,CAAC,CAACvsD,CAAD,CAAD,CAAKo5L,QAAzC;AACD;;AAED7sI,MAAAA,CAAC,CAAC/oB,MAAF,CAASxjC,CAAT,EAAY,CAAZ;AACD;;AAED,WAAO,IAAP;AACD;;AA9D2B,CAA9B;AAkEA,MAAM4nR,WAAW,GAAG,aAApB;AACA,MAAMC,UAAU,GAAG,YAAnB;AACA,MAAMC,SAAS,GAAG,MAAlB;AACA,MAAMC,oBAAoB,GAAG,sBAA7B;AACA,MAAMC,eAAe,GAAG,iBAAxB;AACA,MAAMC,eAAe,GAAG,iBAAxB;;AAEA,MAAMphC,MAAM,GAAG,CAAC+4B,IAAD,EAAOsI,QAAP,EAAiBrxJ,KAAjB,MAA4B;AACzC,GAACixJ,SAAD,GAAalI,IAD4B;AAEzC,GAACmI,oBAAD,GAAwBG,QAFiB;AAGzC,GAACL,UAAD,GAAchxJ,KAAK,IAAI3B;AAHkB,CAA5B,CAAf,EAII;AACJ;;;AAGA,MAAMizJ,UAAU,GAAG,qBAAM,CAAC,aAAD,EAAgB,WAAhB,EAA6B,YAA7B,EAA2C,WAA3C,EAAwD,YAAxD,EAAsE,aAAtE,EAAqF,cAArF,EAAqG,iBAArG,EAAwH,cAAxH,EAAwI,cAAxI,EAAwJ,eAAxJ,EAAyK,OAAzK,CAAN,CAAnB,EAA6M;;AAE7M,MAAMC,UAAU,GAAG;AACjB,UAAQ;AACNhoF,IAAAA,IAAI,EAAE,MADA;AAENioF,IAAAA,OAAO,EAAEC;AAFH,GADS;AAKjB,YAAU;AACRloF,IAAAA,IAAI,EAAE,QADE;AAERioF,IAAAA,OAAO,EAAEE;AAFD,GALO;AASjB,gBAAc;AACZnoF,IAAAA,IAAI,EAAE,OADM;AAEZioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAI,eAAeroB,MAAf,CAAsBipR,YAAY,CAAC5gQ,IAAD,CAAlC,EAA0C,GAA1C;AAFL,GATG;AAajB,oBAAkB;AAChBw4K,IAAAA,IAAI,EAAE,UADU;AAEhBioF,IAAAA,OAAO,EAAEzgQ,IAAI,IAAI,kBAAkBroB,MAAlB,CAAyBipR,YAAY,CAAC5gQ,IAAD,CAArC,EAA6C,GAA7C;AAFD;AAbD,CAAnB,EAiBG;;AAEH,MAAM6gQ,UAAU,GAAG;AACjBC,EAAAA,QAAQ,EAAEZ,SADO;AAEjBa,EAAAA,mBAAmB,EAAEZ,oBAFJ;AAGjBhI,EAAAA,WAAW,EAAE8H;AAHI,CAAnB;;AAKA,SAASe,kBAAT,CAA4BznR,IAA5B,EAAkCymB,IAAlC,EAAwC;AACtC,QAAMihQ,IAAI,GAAGjhQ,IAAI,CAACk4P,IAAL,KAAc,KAA3B;AACA3+Q,EAAAA,IAAI,CAACymR,WAAD,EAAciB,IAAI,IAAI3zJ,SAAtB,CAAJ;;AAEA,MAAI2zJ,IAAI,IAAIjhQ,IAAI,CAACm4P,WAAL,IAAoB,IAAhC,EAAsC;AACpC,SAAK,MAAMhpM,IAAX,IAAmB0xM,UAAnB,EAA+B;AAC7BtnR,MAAAA,IAAI,CAACsnR,UAAU,CAAC1xM,IAAD,CAAX,EAAmBm+C,SAAnB,CAAJ;AACD;AACF,GAJD,MAIO;AACL,UAAMj1G,IAAI,GAAG2H,IAAI,CAACsqP,IAAL,CAAU0I,QAAvB;AACAz5Q,IAAAA,IAAI,CAAC0mR,UAAD,EAAajgQ,IAAI,CAACm4P,WAAlB,CAAJ;AACA5+Q,IAAAA,IAAI,CAAC2mR,SAAD,EAAYlgQ,IAAI,CAAC8gQ,QAAL,KAAkBzoQ,IAAI,KAAK,OAAT,GAAmB+nQ,eAAnB,GAAqCC,eAAvD,CAAZ,CAAJ;AACA9mR,IAAAA,IAAI,CAAC4mR,oBAAD,EAAuBngQ,IAAI,CAAC+gQ,mBAAL,IAA4B,GAAGppR,MAAH,CAAU0gB,IAAV,EAAgB,OAAhB,CAAnD,CAAJ;AACD;AACF;;AACD,SAAS6oQ,kBAAT,CAA4B5W,IAA5B,EAAkC;AAChC,SAAOA,IAAI,CAAC4N,IAAL,KAAc,KAAd,GAAsB;AAC3B,KAAC8H,WAAD,GAAe;AADY,GAAtB,GAEHO,UAAU,CAACjW,IAAI,CAAC0N,IAAN,CAAV,GAAwB,IAAxB,GAA+BwI,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAV,GAAwBmJ,SAAS,CAAC7W,IAAD,EAAOkW,UAAU,CAAClW,IAAI,CAAC0N,IAAN,CAAjB,CAAjC,GAAiEoJ,QAAQ,CAAC9W,IAAD,CAF5G;AAGD;;AAED,SAAS8W,QAAT,CAAkB9W,IAAlB,EAAwB;AACtB,QAAMjyP,IAAI,GAAGiyP,IAAI,CAAC0I,QAAlB;AACA,QAAM90F,OAAO,GAAG7lK,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,MAA7B,IAAuCiyP,IAAI,CAACh3J,KAAL,CAAWl6F,IAAX,CAAgB2F,CAAC,IAAIA,CAAC,CAACo5P,WAAF,IAAiB,IAAjB,IAAyBp5P,CAAC,CAACm5P,IAAF,KAAW,KAAzD,CAAvD;AACA,SAAOj5B,MAAM,CAAC/gE,OAAO,GAAGkiG,eAAH,GAAqBC,eAA7B,EAA8C,GAAG1oR,MAAH,CAAU0gB,IAAV,EAAgB,iBAAhB,CAA9C,EAAkFiyP,IAAI,CAAC6N,WAAvF,CAAb;AACD;;AAED,SAASgJ,SAAT,CAAmB7W,IAAnB,EAAyBj+D,GAAzB,EAA8B;AAC5B,MAAI;AACF,UAAMrsL,IAAI,GAAGsqP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAb;AAAA,UACMmtK,OAAO,GAAGp0E,GAAG,CAACo0E,OAAJ,KAAgB,MAAM,EAAtB,CADhB;;AAGA,WAAOxhC,MAAM,CAAC5yC,GAAG,CAAC2rE,IAAJ,IAAYqI,eAAb,EAA8Bh0E,GAAG,CAAC7T,IAAlC,EAAwCx4K,IAAI,CAACm4P,WAAL,IAAoBsI,OAAO,CAACzgQ,IAAD,CAAnE,CAAb;AACD,GALD,CAKE,OAAOxE,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASolQ,YAAT,CAAsB5gQ,IAAtB,EAA4B;AAC1B,SAAO,qBAAMA,IAAI,CAAC8wF,IAAX,EAAiB90G,IAAjB,CAAsB,GAAtB,CAAP;AACD;;AAED,SAAS0kR,WAAT,CAAqB1gQ,IAArB,EAA2B;AACzB,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMkzC,MAAM,GAAGrqP,IAAI,CAACqqP,MADpB;AAAA,QAEM3xQ,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IAFjD;AAAA,QAGMgmG,GAAG,GAAGhmG,IAAI,CAACoqJ,OAHjB;AAAA,QAIMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWpjC,KAAK,CAAClpN,KAAjB,EAAwB7S,KAJtC;AAAA,QAKM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EALf;AAAA,QAMM9pM,IAAI,GAAGpK,KAAK,CAACoK,IANnB;AAAA,QAOM4sN,EAAE,GAAGolC,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,OAAhC,GAA0C,GAA1C,GAAgD,GAP3D;AAQA,SAAO,GAAG1yQ,MAAH,CAAUstO,EAAV,EAAc,OAAd,KAA0BvsO,KAAK,GAAG,YAAYf,MAAZ,CAAmBe,KAAnB,EAA0B,GAA1B,CAAH,GAAoC,EAAnE,IAAyE,UAAUf,MAAV,CAAiB,2BAAW0gB,IAAX,IAAmB,UAAnB,GAAgCA,IAAjD,EAAuD,QAAvD,CAAzE,GAA4I,SAAS1gB,MAAT,CAAgB,8BAAcwqN,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAhB,CAAnJ;AACD;;AAED,SAAS2gQ,aAAT,CAAuB3gQ,IAAvB,EAA6B;AAC3B,QAAMm3M,KAAK,GAAGn3M,IAAI,CAACm3M,KAAnB;AAAA,QACMz+N,KAAK,GAAGy+N,KAAK,CAACz+N,KAAN,GAAc2oR,YAAY,CAACrhQ,IAAD,CAA1B,GAAmC,IADjD;AAAA,QAEM3H,IAAI,GAAG,GAAG1gB,MAAH,CAAUw/N,KAAK,CAAC9+M,IAAN,IAAc,EAAxB,EAA4B,SAA5B,EAAuCg7F,IAAvC,EAFb;AAAA,QAGMknJ,MAAM,GAAGpjC,KAAK,CAACojC,MAHrB;AAAA,QAIM+mB,KAAK,GAAGnmR,MAAM,CAACof,IAAP,CAAYggP,MAAZ,CAJd;AAAA,QAKMv0I,GAAG,GAAGhmG,IAAI,CAACoqJ,OALjB;AAAA,QAMMn8J,KAAK,GAAG+3G,GAAG,CAACu0I,MAAJ,CAAWA,MAAM,CAAC+mB,KAAK,CAAC,CAAD,CAAN,CAAjB,EAA6BlmR,KAN3C;AAAA,QAOM+mN,MAAM,GAAGn8F,GAAG,CAAC01G,QAAJ,CAAavZ,MAAb,EAPf;AAQA,SAAOo/D,UAAU,CAAClpQ,IAAD,CAAV,IAAoB3f,KAAK,GAAG,YAAYf,MAAZ,CAAmBe,KAAnB,EAA0B,GAA1B,CAAH,GAAoC,EAA7D,IAAmE,QAAQf,MAAR,CAAe6pR,cAAc,CAACF,KAAD,CAA7B,CAAnE,GAA2G,SAAS3pR,MAAT,CAAgB,8BAAcwqN,MAAd,EAAsBl0M,KAAtB,EAA6B+R,IAA7B,CAAhB,CAAlH;AACD;;AAED,SAASqhQ,YAAT,CAAsBrhQ,IAAtB,EAA4B;AAC1B,MAAI;AACF,WAAO,qBAAM,oBAAKA,IAAI,CAACszF,KAAV,EAAiBA,KAAjB,CAAuB,CAAvB,EAA0BxC,IAAhC,EAAsC90G,IAAtC,CAA2C,GAA3C,CAAP;AACD,GAFD,CAEE,OAAOwf,GAAP,EAAY;AACZ,WAAO,IAAP;AACD;AACF;;AAED,SAASgmQ,cAAT,CAAwBF,KAAxB,EAA+B;AAC7BA,EAAAA,KAAK,GAAGA,KAAK,CAACz/Q,GAAN,CAAU66B,CAAC,IAAIA,CAAC,IAAIA,CAAC,KAAK,MAAN,IAAgBA,CAAC,KAAK,QAAtB,GAAiC,QAAjC,GAA4C,EAAhD,CAAhB,CAAR;AACA,SAAO4kP,KAAK,CAAC5pR,MAAN,GAAe,CAAf,GAAmB4pR,KAAK,CAAC,CAAD,CAAxB,GAA8BA,KAAK,CAAC7/Q,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,EAAmBzF,IAAnB,CAAwB,IAAxB,IAAgC,OAAhC,GAA0C,oBAAKslR,KAAL,CAA/E;AACD;;AAED,SAASC,UAAT,CAAoB3lR,CAApB,EAAuB;AACrB,SAAOA,CAAC,CAAClE,MAAF,GAAWkE,CAAC,CAAC,CAAD,CAAD,CAAKg6C,WAAL,KAAqBh6C,CAAC,CAAC6F,KAAF,CAAQ,CAAR,CAAhC,GAA6C7F,CAApD;AACD;;AAED,MAAM6lR,SAAS,GAAG/iR,GAAG,IAAI,CAACA,GAAG,GAAG,EAAP,EAAW/C,OAAX,CAAmB,IAAnB,EAAyB,OAAzB,EAAkCA,OAAlC,CAA0C,IAA1C,EAAgD,MAAhD,EAAwDA,OAAxD,CAAgE,IAAhE,EAAsE,MAAtE,CAAzB;;AAEA,MAAM+lR,QAAQ,GAAGhjR,GAAG,IAAI+iR,SAAS,CAAC/iR,GAAD,CAAT,CAAe/C,OAAf,CAAuB,IAAvB,EAA6B,QAA7B,EAAuCA,OAAvC,CAA+C,KAA/C,EAAsD,OAAtD,EAA+DA,OAA/D,CAAuE,KAAvE,EAA8E,OAA9E,EAAuFA,OAAvF,CAA+F,KAA/F,EAAsG,OAAtG,CAAxB;;AAEA,SAASgmR,MAAT,GAAkB;AAChB,MAAIlnK,GAAG,GAAG,EAAV;AAAA,MACImnK,KAAK,GAAG,EADZ;AAAA,MAEIC,KAAK,GAAG,EAFZ;;AAIA,QAAMj0Q,KAAK,GAAG,EAAd;AAAA,QACMiiM,KAAK,GAAG,MAAM+xE,KAAK,GAAGC,KAAK,GAAG,EADpC;AAAA,QAEMxpR,IAAI,GAAG84Q,GAAG,IAAI;AAClB,QAAIyQ,KAAJ,EAAW;AACTnnK,MAAAA,GAAG,IAAI,GAAG9iH,MAAH,CAAUiqR,KAAV,EAAiB,GAAjB,EAAsBjqR,MAAtB,CAA6BkqR,KAA7B,CAAP;AACAhyE,MAAAA,KAAK;AACN;;AAEDjiM,IAAAA,KAAK,CAACvV,IAAN,CAAW84Q,GAAX;AACD,GATD;AAAA,QAUMj3O,IAAI,GAAG,CAACvgC,IAAD,EAAOyB,KAAP,KAAiB;AAC5B,QAAIA,KAAK,IAAI,IAAb,EAAmBwmR,KAAK,IAAI,IAAIjqR,MAAJ,CAAWgC,IAAX,EAAiB,KAAjB,EAAwBhC,MAAxB,CAA+B+pR,QAAQ,CAACtmR,KAAD,CAAvC,EAAgD,IAAhD,CAAT;AACnB,WAAOy0F,CAAP;AACD,GAbD;AAAA,QAcMA,CAAC,GAAG;AACR4nB,IAAAA,IAAI,CAAC05J,GAAD,EAAM,GAAG/zP,KAAT,EAAgB;AAClB/kB,MAAAA,IAAI,CAAC84Q,GAAD,CAAJ;AACAyQ,MAAAA,KAAK,GAAG,MAAMzQ,GAAd;;AAEA,WAAK,MAAMp2Q,GAAX,IAAkBqiB,KAAlB,EAAyB;AACvB,aAAK,MAAM/gB,GAAX,IAAkBtB,GAAlB,EAAuBm/B,IAAI,CAAC79B,GAAD,EAAMtB,GAAG,CAACsB,GAAD,CAAT,CAAJ;AACxB;;AAED,aAAOwzF,CAAP;AACD,KAVO;;AAYRmoB,IAAAA,KAAK,GAAG;AACN,YAAMm5J,GAAG,GAAGvjQ,KAAK,CAAC4U,GAAN,EAAZ;;AAEA,UAAIo/P,KAAJ,EAAW;AACTnnK,QAAAA,GAAG,IAAImnK,KAAK,IAAIC,KAAK,GAAG,IAAIlqR,MAAJ,CAAWkqR,KAAX,EAAkB,IAAlB,EAAwBlqR,MAAxB,CAA+Bw5Q,GAA/B,EAAoC,GAApC,CAAH,GAA8C,IAAvD,CAAZ;AACD,OAFD,MAEO;AACL12J,QAAAA,GAAG,IAAI,KAAK9iH,MAAL,CAAYw5Q,GAAZ,EAAiB,GAAjB,CAAP;AACD;;AAEDthE,MAAAA,KAAK;AACL,aAAOhgH,CAAP;AACD,KAvBO;;AAyBR31D,IAAAA,IAzBQ;AA0BR42E,IAAAA,IAAI,EAAEh1G,CAAC,KAAK+lR,KAAK,IAAIJ,SAAS,CAAC3lR,CAAD,CAAlB,EAAuB+zF,CAA5B,CA1BC;AA2BR9nF,IAAAA,QAAQ,EAAE,MAAM0yG;AA3BR,GAdV;;AA4CA,SAAO5qB,CAAP;AACD;;AACD,MAAMiyL,YAAY,GAAG3+P,IAAI,IAAI4+P,UAAU,CAACJ,MAAM,EAAP,EAAWx+P,IAAX,CAAV,GAA6B,EAA1D;;;;AAEA,SAAS4+P,UAAT,CAAoBlyL,CAApB,EAAuB1sE,IAAvB,EAA6B;AAC3B0sE,EAAAA,CAAC,CAAC4nB,IAAF,CAAOt0F,IAAI,CAACs1P,OAAZ;;AAEA,MAAIt1P,IAAI,CAAC6+P,aAAL,EAAJ,EAA0B;AACxB,UAAM5kQ,KAAK,GAAG+F,IAAI,CAAC8+P,UAAnB;AAAA,UACM37Q,CAAC,GAAG8W,KAAK,CAAC1lB,MADhB;;AAGA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1By3F,MAAAA,CAAC,CAAC31D,IAAF,CAAO9c,KAAK,CAAChlB,CAAD,CAAL,CAASuB,IAAhB,EAAsByjB,KAAK,CAAChlB,CAAD,CAAL,CAASgD,KAA/B;AACD;AACF;;AAED,MAAI+nB,IAAI,CAAC++P,aAAL,EAAJ,EAA0B;AACxB,UAAMh1G,QAAQ,GAAG/pJ,IAAI,CAACq1P,UAAtB;AAAA,UACMlyQ,CAAC,GAAG4mK,QAAQ,CAACx1K,MADnB;;AAGA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuBlO,CAAC,EAAxB,EAA4B;AAC1B,YAAM2hL,KAAK,GAAG7M,QAAQ,CAAC90K,CAAD,CAAtB;AACA2hL,MAAAA,KAAK,CAACooG,QAAN,KAAmB,CAAnB,CAAqB;AAArB,QACEtyL,CAAC,CAACihB,IAAF,CAAOipE,KAAK,CAACqoG,SAAb,CADF,GAC4BL,UAAU,CAAClyL,CAAD,EAAIkqF,KAAJ,CADtC;AAED;AACF;;AAED,SAAOlqF,CAAC,CAACmoB,KAAF,EAAP;AACD;;AAED,MAAMqqK,MAAM,GAAG;AACbz5Q,EAAAA,IAAI,EAAE,MADO;AAEbimQ,EAAAA,WAAW,EAAE,cAFA;AAGb9C,EAAAA,MAAM,EAAE,QAHK;AAIbC,EAAAA,aAAa,EAAE,gBAJF;AAKbE,EAAAA,WAAW,EAAE,cALA;AAMbiD,EAAAA,SAAS,EAAE,gBANE;AAOb/C,EAAAA,UAAU,EAAE,iBAPC;AAQboD,EAAAA,UAAU,EAAE,kBARC;AASbE,EAAAA,gBAAgB,EAAE,mBATL;AAUbJ,EAAAA,gBAAgB,EAAE,mBAVL;AAWb1gB,EAAAA,OAAO,EAAE,SAXI;AAYbsf,EAAAA,KAAK,EAAE;AAZM,CAAf,EAaG;;AAEH,MAAMoU,cAAc,GAAG;AACrB,UAAQ,MADa;AAErB,uBAAqB;AAFA,CAAvB;AAKA,MAAMC,SAAS,GAAG,CAAlB;AAAA,MACMx9P,EAAE,GAAGm2F,QAAQ,CAACsnK,KADpB;;AAEA,SAASC,WAAT,CAAqBnrD,MAArB,EAA6B;AAC3BojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAKorD,QAAL,GAAgB,CAAhB;AACA,OAAKxD,MAAL,GAAc,EAAd;AACA,OAAKa,IAAL,GAAY,IAAZ;AACA,OAAK4C,KAAL,GAAa,IAAb;AACA,OAAKjY,KAAL,GAAa,IAAb;AACD;;AACD,MAAMkY,MAAM,GAAGlI,QAAQ,CAACliR,SAAxB;AACA,wBAASiqR,WAAT,EAAsB/H,QAAtB,EAAgC;AAC9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE7C,EAAAA,UAAU,CAACU,EAAD,EAAKj4Q,KAAL,EAAY+tB,MAAZ,EAAoBirP,MAApB,EAA4BsB,WAA5B,EAAyC;AACjD;AACA,SAAKlQ,KAAL,GAAa,EAAb;;AAEA,SAAKmY,UAAL;;AAEA,QAAItK,EAAJ,EAAQ;AACN,WAAKwH,IAAL,GAAYrH,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,KAAR,EAAexzP,EAAf,CAApB;AACA+9P,MAAAA,aAAa,CAAC,KAAK/C,IAAN,EAAY7kK,QAAZ,CAAb;;AAEA,WAAK6kK,IAAL,CAAUzsB,YAAV,CAAuB,OAAvB,EAAgC,OAAhC;;AAEAulB,MAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR,CANM,CAMW;;AAEjB,WAAKoK,KAAL,GAAajK,QAAQ,CAAC,KAAKqH,IAAN,EAAYwC,SAAZ,EAAuB,GAAvB,EAA4Bx9P,EAA5B,CAArB;AACA+9P,MAAAA,aAAa,CAAC,KAAKH,KAAN,EAAaL,cAAb,CAAb,CATM,CASqC;;AAE3CzJ,MAAAA,QAAQ,CAAC,KAAKkH,IAAN,EAAYwC,SAAS,GAAG,CAAxB,CAAR;AACD,KAlBgD,CAkB/C;;;AAGF,SAAKvQ,UAAL,CAAgB,KAAK2I,QAArB;AACA,WAAOiI,MAAM,CAAC/K,UAAP,CAAkB3gR,IAAlB,CAAuB,IAAvB,EAA6BqhR,EAA7B,EAAiCj4Q,KAAjC,EAAwC+tB,MAAxC,EAAgDirP,MAAhD,EAAwDsB,WAAxD,CAAP;AACD,GAnC6B;;AAqC9B;AACF;AACA;AACE5I,EAAAA,UAAU,CAAC6I,OAAD,EAAU;AAClB,QAAI1iR,SAAS,CAACT,MAAV,IAAoB,KAAKqoR,IAA7B,EAAmC;AACjC,WAAKA,IAAL,CAAUlB,KAAV,CAAgBkE,WAAhB,CAA4B,kBAA5B,EAAgDlI,OAAhD;AACD;;AAED,WAAO+H,MAAM,CAAC5Q,UAAP,CAAkBv5Q,KAAlB,CAAwB,IAAxB,EAA8BN,SAA9B,CAAP;AACD,GA9C6B;;AAgD9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE6zL,EAAAA,MAAM,CAAC1rL,KAAD,EAAQ+tB,MAAR,EAAgBirP,MAAhB,EAAwBsB,WAAxB,EAAqC;AACzCgI,IAAAA,MAAM,CAAC52F,MAAP,CAAc90L,IAAd,CAAmB,IAAnB,EAAyBoJ,KAAzB,EAAgC+tB,MAAhC,EAAwCirP,MAAxC,EAAgDsB,WAAhD;;AAEA,QAAI,KAAKmF,IAAT,EAAe;AACb+C,MAAAA,aAAa,CAAC,KAAK/C,IAAN,EAAY;AACvBz/Q,QAAAA,KAAK,EAAE,KAAKw6Q,MAAL,GAAc,KAAKE,MADH;AAEvB3sP,QAAAA,MAAM,EAAE,KAAK0sP,OAAL,GAAe,KAAKC,MAFL;AAGvBgI,QAAAA,OAAO,EAAE,OAAOrrR,MAAP,CAAc,KAAKmjR,MAAnB,EAA2B,GAA3B,EAAgCnjR,MAAhC,CAAuC,KAAKojR,OAA5C;AAHc,OAAZ,CAAb;;AAMA,WAAK4H,KAAL,CAAWrvB,YAAX,CAAwB,WAAxB,EAAqC,aAAa37P,MAAb,CAAoB,KAAKsiR,OAAzB,EAAkC,GAAlC,CAArC;AACD;;AAED,SAAKiF,MAAL,GAAc,EAAd;AACA,WAAO,IAAP;AACD,GAzE6B;;AA2E9B;AACF;AACA;AACA;AACEn4P,EAAAA,MAAM,GAAG;AACP,WAAO,KAAKg5P,IAAZ;AACD,GAjF6B;;AAmF9B;AACF;AACA;AACA;AACED,EAAAA,GAAG,GAAG;AACJ,UAAMA,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACMkD,EAAE,GAAG,KAAKtI,QADhB;AAEA,QAAI,CAACmF,GAAL,EAAU,OAAO,IAAP;AACV,QAAI38P,IAAJ;;AAEA,QAAI8/P,EAAJ,EAAQ;AACNnD,MAAAA,GAAG,CAACoD,eAAJ,CAAoB,OAApB;AACA//P,MAAAA,IAAI,GAAGu1P,QAAQ,CAACoH,GAAD,EAAMyC,SAAN,EAAiB,MAAjB,EAAyBx9P,EAAzB,CAAf;AACA+9P,MAAAA,aAAa,CAAC3/P,IAAD,EAAO;AAClB7iB,QAAAA,KAAK,EAAE,KAAKw6Q,MADM;AAElBzsP,QAAAA,MAAM,EAAE,KAAK0sP,OAFK;AAGlBnyQ,QAAAA,IAAI,EAAEq6Q;AAHY,OAAP,CAAb;AAKD;;AAED,UAAMnyK,IAAI,GAAGgxK,YAAY,CAAChC,GAAD,CAAzB;;AAEA,QAAImD,EAAJ,EAAQ;AACNnD,MAAAA,GAAG,CAAChH,WAAJ,CAAgB31P,IAAhB;;AAEA,WAAK48P,IAAL,CAAUlB,KAAV,CAAgBkE,WAAhB,CAA4B,kBAA5B,EAAgDE,EAAhD;AACD;;AAED,WAAOnyK,IAAP;AACD,GAhH6B;;AAkH9B;AACF;AACA;AACA;AACEsqK,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb;AACA,QAAI,KAAKsT,WAAL,EAAJ,EAAwB;AACtB,UAAI,KAAKC,SAAT,EAAoB,KAAKP,UAAL;AACpB,WAAKvY,IAAL,CAAU,KAAKqY,KAAf,EAAsB9S,KAAtB;AACAgJ,MAAAA,QAAQ,CAAC,KAAK8J,KAAN,EAAa,CAAb,CAAR;AACD;;AAED,SAAK1f,IAAL;AACA,SAAKic,MAAL,GAAc,EAAd;AACA,MAAE,KAAKwD,QAAP;AACA,WAAO,IAAP;AACD,GAlI6B;;AAoI9B;;AAEA;AACF;AACA;AACA;AACEzH,EAAAA,KAAK,CAACj7P,IAAD,EAAO;AACV,QAAIA,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAAxB,EAAkC;AAChC1iQ,MAAAA,IAAI,CAACi7P,KAAL,GAAa,KAAKyH,QAAlB;;AAEA,WAAKxD,MAAL,CAAY7mR,IAAZ,CAAiB2nB,IAAjB;AACD;AACF,GAhJ6B;;AAkJ9B;AACF;AACA;AACA;AACEqjQ,EAAAA,OAAO,CAACrjQ,IAAD,EAAO;AACZ,WAAO,KAAKojQ,SAAL,IAAkB,CAACpjQ,IAAI,CAAC+/P,IAAxB,IAAgC//P,IAAI,CAACi7P,KAAL,KAAe,KAAKyH,QAA3D;AACD,GAxJ6B;;AA0J9B;AACF;AACA;AACA;AACES,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAjB;AACA,UAAM9vK,KAAK,GAAG,KAAK4rK,MAAnB;AACA,QAAI,CAAC5rK,KAAK,CAAC57G,MAAP,IAAiB,CAAC,KAAKgrR,QAA3B,EAAqC,OAAO,IAAP;AACrC,UAAMr3Q,EAAE,GAAG,EAAE,KAAKq3Q,QAAlB;AACA,QAAI1iQ,IAAJ,EAAUsqP,IAAV,EAAgBjyP,IAAhB,EAAsBkhQ,IAAtB,EAA4BnhR,CAA5B,EAA+BkO,CAA/B,EAAkCyd,CAAlC;;AAEA,SAAK3rB,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGgtG,KAAK,CAAC57G,MAAtB,EAA8BU,CAAC,GAAGkO,CAAlC,EAAqC,EAAElO,CAAvC,EAA0C;AACxC4nB,MAAAA,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAZ;AACAkyQ,MAAAA,IAAI,GAAGtqP,IAAI,CAACsqP,IAAZ;;AAEA,UAAIA,IAAI,CAAC0I,QAAL,KAAkB36P,IAAtB,EAA4B;AAC1B;AACAA,QAAAA,IAAI,GAAGiyP,IAAI,CAAC0I,QAAZ;AACAuG,QAAAA,IAAI,GAAGlC,KAAK,CAACh/P,IAAD,CAAZ;AACD;;AAED,UAAIiyP,IAAI,CAACwF,MAAL,IAAexF,IAAI,CAAC2Q,KAAL,KAAe5vQ,EAAlC,EAAsC;AACpC,aAAK+3Q,SAAL,GAAiB,KAAjB;AACAE,QAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACAi/P,QAAAA,IAAI,CAACh3J,KAAL,CAAWp3G,OAAX,CAAmB9D,CAAC,IAAI;AACtBA,UAAAA,CAAC,CAAC6iR,KAAF,GAAU5vQ,EAAV;AACD,SAFD;AAGD;;AAED,UAAIi/P,IAAI,CAACwF,MAAT,EAAiB,SAlBuB,CAkBb;;AAE3B,UAAI9vP,IAAI,CAAC09P,IAAT,EAAe;AACb;AACA,YAAInE,IAAI,CAACnI,MAAL,IAAe9G,IAAI,CAACh3J,KAAL,CAAW57G,MAA9B,EAAsC;AACpC;AACAqsB,UAAAA,CAAC,GAAGumP,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAJ;AACA,cAAIvvF,CAAC,CAACg8P,IAAN,EAAY,KAAKlmD,OAAL,CAAa0/C,IAAb,EAAmBx1P,CAAC,CAACg8P,IAArB,EAA2Bh8P,CAA3B;AACb,SAJD,MAIO,IAAI/D,IAAI,CAAC+/P,IAAT,EAAe;AACpB;AACAh8P,UAAAA,CAAC,GAAG/D,IAAI,CAAC+/P,IAAL,CAAUpB,UAAd;AACA,cAAI56P,CAAJ,EAAOA,CAAC,CAAC+0P,WAAF,CAAc94P,IAAI,CAAC+/P,IAAnB;AACR;;AAED//P,QAAAA,IAAI,CAAC+/P,IAAL,GAAY,IAAZ;AACA;AACD;;AAED//P,MAAAA,IAAI,GAAGu5P,IAAI,CAACnI,MAAL,GAAc9G,IAAI,CAACh3J,KAAL,CAAW,CAAX,CAAd,GAA8BtzF,IAArC;AACA,UAAIA,IAAI,CAAC65M,OAAL,KAAiBxuN,EAArB,EAAyB,SArCe,CAqCL;;AAEnC,UAAI,CAAC2U,IAAI,CAAC+/P,IAAN,IAAc,CAAC//P,IAAI,CAAC+/P,IAAL,CAAUwD,eAA7B,EAA8C;AAC5C;AACA,aAAKH,SAAL,GAAiB,KAAjB;AACAE,QAAAA,YAAY,CAACtjQ,IAAD,EAAO3U,EAAP,CAAZ;AACD,OAJD,MAIO;AACL;AACA,aAAKwuN,OAAL,CAAa0/C,IAAb,EAAmBv5P,IAAI,CAAC+/P,IAAxB,EAA8B//P,IAA9B;AACD;;AAEDA,MAAAA,IAAI,CAAC65M,OAAL,GAAexuN,EAAf;AACD;;AAED,WAAO,CAAC,KAAK+3Q,SAAb;AACD,GAzN6B;;AA2N9B;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE9Y,EAAAA,IAAI,CAACiO,EAAD,EAAK1I,KAAL,EAAYt+K,IAAZ,EAAkB;AACpB,QAAI,CAAC,KAAK8xL,OAAL,CAAaxT,KAAb,CAAL,EAA0B,OAAOA,KAAK,CAACkQ,IAAb;AAC1B,UAAMD,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACMxG,IAAI,GAAGlC,KAAK,CAACxH,KAAK,CAACmD,QAAP,CADlB;AAAA,UAEMjhF,MAAM,GAAG89E,KAAK,CAACiD,WAAN,KAAsB,KAAtB,GAA8B,MAA9B,GAAuC,IAFtD;AAAA,UAGM0Q,OAAO,GAAGjK,IAAI,CAACpI,GAAL,KAAa,GAH7B;AAIA,QAAIsS,OAAO,GAAG,IAAd;AAAA,QACIrrR,CAAC,GAAG,CADR;AAEA,UAAM03M,MAAM,GAAGrtE,IAAI,CAACotI,KAAD,EAAQ0I,EAAR,EAAYhnL,IAAZ,EAAkB,GAAlB,EAAuBuuL,GAAvB,CAAnB;AACAhwE,IAAAA,MAAM,CAACwjD,YAAP,CAAoB,OAApB,EAA6BylB,QAAQ,CAAClJ,KAAD,CAArC,EAToB,CAS2B;;AAE/C,UAAMqI,IAAI,GAAGgJ,kBAAkB,CAACrR,KAAD,CAA/B;;AAEA,SAAK,MAAMxzQ,GAAX,IAAkB67Q,IAAlB,EAAwB5kB,YAAY,CAACxjD,MAAD,EAASzzM,GAAT,EAAc67Q,IAAI,CAAC77Q,GAAD,CAAlB,CAAZ;;AAExB,QAAI,CAACmnR,OAAL,EAAc;AACZlwB,MAAAA,YAAY,CAACxjD,MAAD,EAAS,gBAAT,EAA2B/d,MAA3B,CAAZ;AACD;;AAEDuhE,IAAAA,YAAY,CAACxjD,MAAD,EAAS,WAAT,EAAsB+/D,KAAK,CAACvvO,IAAN,GAAaA,IAAI,CAAC,IAAD,EAAOuvO,KAAP,EAAcA,KAAK,CAAC9rJ,KAApB,CAAjB,GAA8C,IAApE,CAAZ;;AAEA,UAAM1tH,OAAO,GAAG2pB,IAAI,IAAI;AACtB,YAAMi7P,KAAK,GAAG,KAAKoI,OAAL,CAAarjQ,IAAb,CAAd;AAAA,YACMmD,IAAI,GAAGs/G,IAAI,CAACziH,IAAD,EAAO8vL,MAAP,EAAe2zE,OAAf,EAAwBlK,IAAI,CAACpI,GAA7B,EAAkC2O,GAAlC,CADjB;;AAGA,UAAI7E,KAAJ,EAAW;AACT,aAAKphD,OAAL,CAAa0/C,IAAb,EAAmBp2P,IAAnB,EAAyBnD,IAAzB;;AAEA,YAAIwjQ,OAAJ,EAAatlG,OAAO,CAAC,IAAD,EAAO/6J,IAAP,EAAanD,IAAb,CAAP;AACd;;AAEDyjQ,MAAAA,OAAO,GAAGtgQ,IAAV;AACA,QAAE/qB,CAAF;AACD,KAZD;;AAcA,QAAImhR,IAAI,CAACnI,MAAT,EAAiB;AACf,UAAIvB,KAAK,CAACv8J,KAAN,CAAY57G,MAAhB,EAAwBrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACzB,KAFD,MAEO;AACL8pH,MAAAA,KAAK,CAACyyC,KAAD,EAAQx5Q,OAAR,CAAL;AACD;;AAEDwiR,IAAAA,QAAQ,CAAC/oE,MAAD,EAAS13M,CAAT,CAAR;AACA,WAAO03M,MAAP;AACD,GA9Q6B;;AAgR9B;AACF;AACA;AACA;AACA;AACA;AACE+pB,EAAAA,OAAO,CAAC0/C,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACtB;AACA;AACAyuB,IAAAA,OAAO,GAAG8pO,EAAV;AACA/1Q,IAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAJsB,CAIE;;AAExB1C,IAAAA,kBAAkB,CAACznR,IAAD,EAAOymB,IAAP,CAAlB,CANsB,CAMU;;AAEhCu5P,IAAAA,IAAI,CAACr/O,IAAL,CAAU3gC,IAAV,EAAgBymB,IAAhB,EAAsB,IAAtB,EARsB,CAQO;;AAE7B,UAAM2jQ,KAAK,GAAGC,WAAW,CAACrK,IAAI,CAAClhQ,IAAN,CAAzB;AACA,QAAIsrQ,KAAJ,EAAWA,KAAK,CAACzsR,IAAN,CAAW,IAAX,EAAiBqiR,IAAjB,EAAuBhB,EAAvB,EAA2Bv4P,IAA3B,EAXW,CAWuB;AAC7C;;AAEA,QAAIyuB,OAAJ,EAAa,KAAKowO,KAAL,CAAWpwO,OAAX,EAAoBzuB,IAApB;AACd,GArS6B;;AAuS9B;AACF;AACA;AACA;AACA;AACE6+P,EAAAA,KAAK,CAACtG,EAAD,EAAKv4P,IAAL,EAAW;AACd,QAAIA,IAAI,IAAI,IAAZ,EAAkB;;AAElB,SAAK,MAAMmvD,IAAX,IAAmBkzM,MAAnB,EAA2B;AACzB,UAAIjnR,KAAK,GAAG+zE,IAAI,KAAK,MAAT,GAAkBgnM,UAAU,CAACn2P,IAAD,CAA5B,GAAqCA,IAAI,CAACmvD,IAAD,CAArD;AACA,UAAI/zE,KAAK,KAAKoH,MAAM,CAAC2sE,IAAD,CAApB,EAA4B;AAC5B,YAAMx1E,IAAI,GAAG0oR,MAAM,CAAClzM,IAAD,CAAnB;;AAEA,UAAI/zE,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,QAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD,OAFD,MAEO;AACL,YAAIopQ,UAAU,CAAC3nQ,KAAD,CAAd,EAAuB;AACrBA,UAAAA,KAAK,GAAG4nQ,WAAW,CAAC5nQ,KAAD,EAAQ,KAAKsvQ,KAAL,CAAW9oP,QAAnB,EAA6Bg7F,IAAI,EAAjC,CAAnB;AACD;;AAED27J,QAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAK,GAAG,EAA9B;AACD;;AAEDoH,MAAAA,MAAM,CAAC2sE,IAAD,CAAN,GAAe/zE,KAAf;AACD;AACF,GAhU6B;;AAkU9B;AACF;AACA;AACA;AACA;AACE6nQ,EAAAA,IAAI,GAAG;AACL,UAAM6c,GAAG,GAAG,KAAKC,IAAjB;AAAA,UACM9c,IAAI,GAAG,KAAKyH,KADlB;AAEA,QAAI6N,EAAE,GAAGtV,IAAI,CAACsV,EAAd;AAAA,QACIr6Q,KAAK,GAAG,CADZ;;AAGA,SAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAACrhP,QAAtB,EAAgC;AAC9B,UAAI,CAAC22P,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAUA,EAAE,GAAGG,QAAQ,CAACoH,GAAD,EAAMyC,SAAS,GAAG,CAAlB,EAAqB,MAArB,EAA6Bx9P,EAA7B,CAAvB;AACT7mB,MAAAA,KAAK,GAAG2lR,cAAc,CAACtL,EAAD,EAAKtV,IAAI,CAACrhP,QAAL,CAAcvW,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD;;AAED,SAAK,MAAMmN,EAAX,IAAiB43P,IAAI,CAAC0H,QAAtB,EAAgC;AAC9B,UAAI,CAAC4N,EAAL,EAAStV,IAAI,CAACsV,EAAL,GAAUA,EAAE,GAAGG,QAAQ,CAACoH,GAAD,EAAMyC,SAAS,GAAG,CAAlB,EAAqB,MAArB,EAA6Bx9P,EAA7B,CAAvB;AACT7mB,MAAAA,KAAK,GAAG4lR,cAAc,CAACvL,EAAD,EAAKtV,IAAI,CAAC0H,QAAL,CAAct/P,EAAd,CAAL,EAAwBnN,KAAxB,CAAtB;AACD,KAdI,CAcH;;;AAGF,QAAIq6Q,EAAJ,EAAQ;AACNr6Q,MAAAA,KAAK,KAAK,CAAV,IAAe4hR,GAAG,CAAChH,WAAJ,CAAgBP,EAAhB,GAAqBtV,IAAI,CAACsV,EAAL,GAAU,IAA9C,IAAsDM,QAAQ,CAACN,EAAD,EAAKr6Q,KAAL,CAA9D;AACD;AACF,GA3V6B;;AA6V9B;AACF;AACA;AACE2kR,EAAAA,UAAU,GAAG;AACX,UAAMz0G,GAAG,GAAG,KAAKs8F,KAAjB;AACAt8F,IAAAA,GAAG,CAACxsJ,QAAJ,GAAe,EAAf;AACAwsJ,IAAAA,GAAG,CAACu8F,QAAJ,GAAe,EAAf;AACD;;AApW6B,CAAhC,GAsWI;;AAEJ,SAAS2Y,YAAT,CAAsBtjQ,IAAtB,EAA4B3U,EAA5B,EAAgC;AAC9B,SAAO2U,IAAI,IAAIA,IAAI,CAACi7P,KAAL,KAAe5vQ,EAA9B,EAAkC2U,IAAI,GAAGA,IAAI,CAACsqP,IAAL,CAAUvmJ,KAAnD,EAA0D;AACxD/jG,IAAAA,IAAI,CAACi7P,KAAL,GAAa5vQ,EAAb;;AAEA,QAAI2U,IAAI,CAACsqP,IAAL,IAAatqP,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,KAAoB5vQ,EAArC,EAAyC;AACvC2U,MAAAA,IAAI,CAACsqP,IAAL,CAAU2Q,KAAV,GAAkB5vQ,EAAlB;AACD,KAFD,MAEO;AACR;AACF,EAAC;;;AAGF,SAASw4Q,cAAT,CAAwBtL,EAAxB,EAA4B5zP,IAA5B,EAAkCzmB,KAAlC,EAAyC;AACvC,MAAI9F,CAAJ,EAAOkO,CAAP,EAAUqzB,IAAV;;AAEA,MAAIhV,IAAI,CAAC/C,QAAL,KAAkB,QAAtB,EAAgC;AAC9B;AACA;AACA;AACA;AACA,QAAImiQ,EAAE,GAAGrL,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,SAAd,EAAyB6mB,EAAzB,CAAjB;AACA+9P,IAAAA,aAAa,CAACiB,EAAD,EAAK;AAChB14Q,MAAAA,EAAE,EAAEy3P,aAAa,GAAGn+O,IAAI,CAACtZ,EADT;AAEhB23Q,MAAAA,OAAO,EAAE,SAFO;AAGhB1iR,MAAAA,KAAK,EAAE,MAHS;AAIhB+tB,MAAAA,MAAM,EAAE,MAJQ;AAKhB21P,MAAAA,mBAAmB,EAAE;AALL,KAAL,CAAb;AAOAD,IAAAA,EAAE,GAAGrL,QAAQ,CAACqL,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBh/P,EAAhB,CAAb;AACA+9P,IAAAA,aAAa,CAACiB,EAAD,EAAK;AAChBzjR,MAAAA,KAAK,EAAE,CADS;AAEhB+tB,MAAAA,MAAM,EAAE,CAFQ;AAGhBzlB,MAAAA,IAAI,EAAE,OAAOjR,MAAP,CAAcilH,IAAI,EAAlB,EAAsB,GAAtB,EAA2BjlH,MAA3B,CAAkCgtB,IAAI,CAACtZ,EAAvC,EAA2C,GAA3C;AAHU,KAAL,CAAb;AAKAktQ,IAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,gBAAd,EAAgC6mB,EAAhC,CAAb;AACA+9P,IAAAA,aAAa,CAACvK,EAAD,EAAK;AAChBltQ,MAAAA,EAAE,EAAEsZ,IAAI,CAACtZ,EADO;AAEhB44Q,MAAAA,EAAE,EAAEt/P,IAAI,CAACkmF,EAFO;AAGhBq5K,MAAAA,EAAE,EAAEv/P,IAAI,CAACimF,EAHO;AAIhBu5K,MAAAA,EAAE,EAAEx/P,IAAI,CAAC6lL,EAJO;AAKhB6uC,MAAAA,EAAE,EAAE10N,IAAI,CAACuyD,EALO;AAMhBoiK,MAAAA,EAAE,EAAE30N,IAAI,CAACmmF,EANO;AAOhB1kG,MAAAA,CAAC,EAAEue,IAAI,CAAC8lL;AAPQ,KAAL,CAAb;AASD,GA7BD,MA6BO;AACL8tE,IAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAK,EAAV,EAAc,gBAAd,EAAgC6mB,EAAhC,CAAb;AACA+9P,IAAAA,aAAa,CAACvK,EAAD,EAAK;AAChBltQ,MAAAA,EAAE,EAAEsZ,IAAI,CAACtZ,EADO;AAEhBw/F,MAAAA,EAAE,EAAElmF,IAAI,CAACkmF,EAFO;AAGhB3zB,MAAAA,EAAE,EAAEvyD,IAAI,CAACuyD,EAHO;AAIhB0zB,MAAAA,EAAE,EAAEjmF,IAAI,CAACimF,EAJO;AAKhBE,MAAAA,EAAE,EAAEnmF,IAAI,CAACmmF;AALO,KAAL,CAAb;AAOD;;AAED,OAAK1yG,CAAC,GAAG,CAAJ,EAAOkO,CAAC,GAAGqe,IAAI,CAACw+O,KAAL,CAAWzrQ,MAA3B,EAAmCU,CAAC,GAAGkO,CAAvC,EAA0C,EAAElO,CAA5C,EAA+C;AAC7CuhC,IAAAA,IAAI,GAAG++O,QAAQ,CAACH,EAAD,EAAKngR,CAAL,EAAQ,MAAR,EAAgB2sB,EAAhB,CAAf;AACA4U,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,QAAlB,EAA4B3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAc2M,MAA1C;AACA40B,IAAAA,IAAI,CAAC25N,YAAL,CAAkB,YAAlB,EAAgC3uO,IAAI,CAACw+O,KAAL,CAAW/qQ,CAAX,EAAcw1P,KAA9C;AACD;;AAEDirB,EAAAA,QAAQ,CAACN,EAAD,EAAKngR,CAAL,CAAR;AACA,SAAO8F,KAAP;AACD,EAAC;;;AAGF,SAAS4lR,cAAT,CAAwBvL,EAAxB,EAA4Bj4O,IAA5B,EAAkCpiC,KAAlC,EAAyC;AACvC,MAAImnC,IAAJ;AACAkzO,EAAAA,EAAE,GAAGG,QAAQ,CAACH,EAAD,EAAKr6Q,KAAL,EAAY,UAAZ,EAAwB6mB,EAAxB,CAAb;AACAwzP,EAAAA,EAAE,CAACjlB,YAAH,CAAgB,IAAhB,EAAsBhzN,IAAI,CAACj1B,EAA3B;;AAEA,MAAIi1B,IAAI,CAAC75B,IAAT,EAAe;AACb4+B,IAAAA,IAAI,GAAGqzO,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBxzP,EAAhB,CAAf;AACAsgB,IAAAA,IAAI,CAACiuN,YAAL,CAAkB,GAAlB,EAAuBhzN,IAAI,CAAC75B,IAA5B;AACD,GAHD,MAGO;AACL4+B,IAAAA,IAAI,GAAGqzO,QAAQ,CAACH,EAAD,EAAK,CAAL,EAAQ,MAAR,EAAgBxzP,EAAhB,CAAf;AACA+9P,IAAAA,aAAa,CAACz9O,IAAD,EAAO;AAClB9mC,MAAAA,CAAC,EAAE,CADe;AAElBue,MAAAA,CAAC,EAAE,CAFe;AAGlBxc,MAAAA,KAAK,EAAEggC,IAAI,CAAChgC,KAHM;AAIlB+tB,MAAAA,MAAM,EAAEiS,IAAI,CAACjS;AAJK,KAAP,CAAb;AAMD;;AAEDwqP,EAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR;AACA,SAAOr6Q,KAAK,GAAG,CAAf;AACD,EAAC;;;AAGF,SAASggL,OAAT,CAAiBusF,QAAjB,EAA2B8N,EAA3B,EAA+Bx0J,KAA/B,EAAsC;AACpCw0J,EAAAA,EAAE,GAAGA,EAAE,CAAC6L,SAAH,CAAaC,eAAlB;AACA,MAAI9yL,IAAJ;AAAA,MACI3zC,GAAG,GAAG,CADV;AAEAw/K,EAAAA,KAAK,CAACr5G,KAAD,EAAQ/jG,IAAI,IAAI;AACnBuxE,IAAAA,IAAI,GAAGk5K,QAAQ,CAACH,IAAT,CAAciO,EAAd,EAAkBv4P,IAAlB,EAAwBuxE,IAAxB,CAAP;AACA,MAAE3zC,GAAF;AACD,GAHI,CAAL,CAJoC,CAOhC;;AAEJi7N,EAAAA,QAAQ,CAACN,EAAD,EAAK,IAAI36N,GAAT,CAAR;AACD,EAAC;AACF;;;AAGA,SAAS6kF,IAAT,CAAcziH,IAAd,EAAoBu4P,EAApB,EAAwBkL,OAAxB,EAAiCtS,GAAjC,EAAsC2O,GAAtC,EAA2C;AACzC,MAAI38P,IAAI,GAAGnD,IAAI,CAAC+/P,IAAhB;AAAA,MACI1H,GADJ,CADyC,CAEhC;;AAET,MAAI,CAACl1P,IAAL,EAAW;AACTk1P,IAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACAx1P,IAAAA,IAAI,GAAGi1P,SAAS,CAACC,GAAD,EAAMlH,GAAN,EAAWpsP,EAAX,CAAhB;AACA/E,IAAAA,IAAI,CAAC+/P,IAAL,GAAY58P,IAAZ;;AAEA,QAAInD,IAAI,CAACsqP,IAAT,EAAe;AACbnnP,MAAAA,IAAI,CAAC08P,QAAL,GAAgB7/P,IAAhB;AACAmD,MAAAA,IAAI,CAACugQ,UAAL,GAAkB;AAChB96Q,QAAAA,IAAI,EAAE;AADU,OAAlB,CAFa,CAIV;;AAEH,UAAIuoQ,GAAG,KAAK,GAAZ,EAAiB;AACf,cAAM8R,EAAE,GAAG7K,SAAS,CAACC,GAAD,EAAM,MAAN,EAActzP,EAAd,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB0D,EAAjB;AACAA,QAAAA,EAAE,CAACpD,QAAH,GAAc7/P,IAAd;AACA,cAAMskQ,EAAE,GAAGlM,SAAS,CAACC,GAAD,EAAM,GAAN,EAAWtzP,EAAX,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiB+E,EAAjB;AACAA,QAAAA,EAAE,CAACzE,QAAH,GAAc7/P,IAAd;AACA,cAAMo6L,EAAE,GAAGg+D,SAAS,CAACC,GAAD,EAAM,MAAN,EAActzP,EAAd,CAApB;AACA5B,QAAAA,IAAI,CAACo8P,WAAL,CAAiBnlE,EAAjB;AACAA,QAAAA,EAAE,CAACylE,QAAH,GAAc7/P,IAAd;AACAo6L,QAAAA,EAAE,CAACspE,UAAH,GAAgB;AACd96Q,UAAAA,IAAI,EAAE;AADQ,SAAhB;AAGD;AACF;AACF,GA9BwC,CA8BvC;;;AAGF,MAAIua,IAAI,CAACogQ,eAAL,KAAyBzD,GAAzB,IAAgCyE,YAAY,CAACphQ,IAAD,EAAOsgQ,OAAP,CAAhD,EAAiE;AAC/DlL,IAAAA,EAAE,CAACK,YAAH,CAAgBz1P,IAAhB,EAAsBsgQ,OAAO,GAAGA,OAAO,CAACe,WAAX,GAAyBjM,EAAE,CAACyB,UAAzD;AACD;;AAED,SAAO72P,IAAP;AACD,EAAC;;;AAGF,SAASohQ,YAAT,CAAsBphQ,IAAtB,EAA4BsgQ,OAA5B,EAAqC;AACnC,SAAOtgQ,IAAI,CAACw7P,UAAL,IAAmBx7P,IAAI,CAACw7P,UAAL,CAAgBnG,UAAhB,CAA2B9gR,MAA3B,GAAoC,CAAvD,IAA4DyrB,IAAI,CAACkhQ,eAAL,IAAwBZ,OAA3F,CADmC,CACiE;AACrG,EAAC;;;AAGF,IAAIh1O,OAAO,GAAG,IAAd;AAAA,IACI;AACJjsC,MAAM,GAAG,IAFT,EAEe;AACf;;AAEA,MAAMohR,WAAW,GAAG;AAClB7/J,EAAAA,KAAK,CAACw1J,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACpB,UAAMo6L,EAAE,GAAG3rK,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAh2Q,IAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACAnK,IAAAA,IAAI,CAACtH,UAAL,CAAgB14Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AACAxd,IAAAA,MAAM,GAAG+1Q,EAAE,CAACmL,UAAZ,CAJoB,CAII;;AAExBj1O,IAAAA,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAAV;AACAe,IAAAA,IAAI,CAACpH,OAAL,CAAa54Q,IAAb,EAAmBymB,IAAnB,EAAyB,IAAzB;AACA,UAAMijQ,EAAE,GAAGx0O,OAAO,GAAG8pO,EAAE,CAACC,UAAH,CAAc,CAAd,CAArB;AACAe,IAAAA,IAAI,CAACvH,UAAL,CAAgBz4Q,IAAhB,EAAsBymB,IAAtB,EAA4B,IAA5B;AACA,UAAM5kB,KAAK,GAAG4kB,IAAI,CAACsqP,IAAL,CAAUwI,WAAV,KAA0B,KAA1B,GAAkC,MAAlC,GAA2C,IAAzD;;AAEA,QAAI13Q,KAAK,KAAKoH,MAAM,CAACuvL,MAArB,EAA6B;AAC3BuhE,MAAAA,YAAY,CAACl5C,EAAD,EAAK,gBAAL,EAAuBh/M,KAAvB,CAAZ;AACAk4P,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,gBAAL,EAAuB7nR,KAAvB,CAAZ;AACAoH,MAAAA,MAAM,CAACuvL,MAAP,GAAgB32L,KAAhB;AACD;;AAED,QAAI4kB,IAAI,CAACkyP,gBAAL,IAAyBlyP,IAAI,CAAC+rP,MAAlC,EAA0C;AACxC,YAAMnjQ,IAAI,GAAGoX,IAAI,CAACpX,IAAlB;AACA0qP,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,IAAhB,CAAZ,CAFwC,CAEL;;AAEnC,WAAKykE,KAAL,CAAWoE,EAAX,EAAejjQ,IAAf;AACAszO,MAAAA,YAAY,CAAC2vB,EAAD,EAAK,QAAL,EAAe,IAAf,CAAZ,CALwC,CAKN;;AAElC,UAAIr6Q,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVpG,MAAAA,MAAM,GAAG43M,EAAE,CAACspE,UAAZ;AACA,WAAK7E,KAAL,CAAWzkE,EAAX,EAAep6L,IAAf;AACA,UAAIpX,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ,CAV8B,CAUZ;;AAE5B6lC,MAAAA,OAAO,GAAG,IAAV;AACD,KAbD,MAaO;AACL;AACA6kN,MAAAA,YAAY,CAACl5C,EAAD,EAAK,SAAL,EAAgB,MAAhB,CAAZ;AACD;AACF,GApCiB;;AAsClBhnM,EAAAA,KAAK,CAACmmQ,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACpB,QAAIA,IAAI,CAACohN,MAAL,KAAgB,KAApB,EAA2B;AACzBqjD,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,eAAxB,CAAR;AACAkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,WAAxB,CAAR;AACD,KAHD,MAGO;AACLkM,MAAAA,QAAQ,CAAClM,EAAD,EAAK,iBAAL,EAAwB,IAAxB,CAAR;AACD;AACF,GA7CiB;;AA+ClBznK,EAAAA,IAAI,CAACyoK,IAAD,EAAOhB,EAAP,EAAWv4P,IAAX,EAAiB;AACnB,UAAM0oP,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;AACA,QAAI3jB,GAAJ,EAASjB,KAAT,EAAgBi9Q,GAAhB,EAAqBtB,EAArB;;AAEA,QAAI,uBAAQrO,EAAR,CAAJ,EAAiB;AACf;AACAttQ,MAAAA,KAAK,GAAGstQ,EAAE,CAAC7mQ,GAAH,CAAOkd,CAAC,IAAIw2P,SAAS,CAACv1P,IAAD,EAAOjB,CAAP,CAArB,CAAR;AACA1iB,MAAAA,GAAG,GAAGjB,KAAK,CAACY,IAAN,CAAW,IAAX,CAAN,CAHe,CAGS;;AAExB,UAAIK,GAAG,KAAKmG,MAAM,CAACsuG,IAAnB,EAAyB;AACvB+nK,QAAAA,QAAQ,CAACN,EAAD,EAAK,CAAL,CAAR;AACAF,QAAAA,GAAG,GAAGE,EAAE,CAACI,aAAT;AACA5B,QAAAA,EAAE,GAAGlB,UAAU,CAAC71P,IAAD,CAAf;AACA5kB,QAAAA,KAAK,CAACc,OAAN,CAAc,CAACJ,CAAD,EAAI1D,CAAJ,KAAU;AACtB,gBAAMwxQ,EAAE,GAAGwO,SAAS,CAACC,GAAD,EAAM,OAAN,EAAetzP,EAAf,CAApB;AACA6kP,UAAAA,EAAE,CAACiW,QAAH,GAAc7/P,IAAd,CAFsB,CAEF;;AAEpB4pP,UAAAA,EAAE,CAAC8a,WAAH,GAAiB5oR,CAAjB;;AAEA,cAAI1D,CAAJ,EAAO;AACLwxQ,YAAAA,EAAE,CAACtW,YAAH,CAAgB,GAAhB,EAAqB,CAArB;AACAsW,YAAAA,EAAE,CAACtW,YAAH,CAAgB,IAAhB,EAAsByjB,EAAtB;AACD;;AAEDwB,UAAAA,EAAE,CAACgH,WAAH,CAAe3V,EAAf;AACD,SAZD;AAaApnQ,QAAAA,MAAM,CAACsuG,IAAP,GAAcz0G,GAAd;AACD;AACF,KAxBD,MAwBO;AACL;AACAjB,MAAAA,KAAK,GAAGm6Q,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAjB;;AAEA,UAAIttQ,KAAK,KAAKoH,MAAM,CAACsuG,IAArB,EAA2B;AACzBynK,QAAAA,EAAE,CAACmM,WAAH,GAAiBtpR,KAAjB;AACAoH,QAAAA,MAAM,CAACsuG,IAAP,GAAc11G,KAAd;AACD;AACF;;AAEDk4P,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoBpC,UAAU,CAACn2P,IAAD,CAA9B,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,WAAL,EAAkBtD,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,IAAnC,CAAZ;AACAszO,IAAAA,YAAY,CAACilB,EAAD,EAAK,YAAL,EAAmBv4P,IAAI,CAACq2P,SAAxB,CAAZ;AACA/iB,IAAAA,YAAY,CAACilB,EAAD,EAAK,cAAL,EAAqBv4P,IAAI,CAACs2P,WAA1B,CAAZ;AACAhjB,IAAAA,YAAY,CAACilB,EAAD,EAAK,aAAL,EAAoBv4P,IAAI,CAACu2P,UAAzB,CAAZ;AACD;;AA1FiB,CAApB;;AA8FA,SAASh9Q,IAAT,CAAcI,IAAd,EAAoByB,KAApB,EAA2B2pB,EAA3B,EAA+B;AAC7B;AACA,MAAI3pB,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B,OAFC,CAEO;;AAEpC,MAAIorB,EAAJ,EAAQ;AACN4/P,IAAAA,cAAc,CAACl2O,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,EAAuB2pB,EAAvB,CAAd;AACD,GAFD,MAEO;AACLuuO,IAAAA,YAAY,CAAC7kN,OAAD,EAAU90C,IAAV,EAAgByB,KAAhB,CAAZ;AACD,GAR4B,CAQ3B;;;AAGFoH,EAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;;AAED,SAASqpR,QAAT,CAAkBlM,EAAlB,EAAsB5+Q,IAAtB,EAA4ByB,KAA5B,EAAmC;AACjC,MAAIA,KAAK,KAAKoH,MAAM,CAAC7I,IAAD,CAApB,EAA4B;AAC1B,QAAIyB,KAAK,IAAI,IAAb,EAAmB;AACjBm9Q,MAAAA,EAAE,CAACsG,KAAH,CAAS+F,cAAT,CAAwBjrR,IAAxB;AACD,KAFD,MAEO;AACL4+Q,MAAAA,EAAE,CAACsG,KAAH,CAASkE,WAAT,CAAqBppR,IAArB,EAA2ByB,KAAK,GAAG,EAAnC;AACD;;AAEDoH,IAAAA,MAAM,CAAC7I,IAAD,CAAN,GAAeyB,KAAf;AACD;AACF;;AAED,SAAS0nR,aAAT,CAAuBvK,EAAvB,EAA2Bn7P,KAA3B,EAAkC;AAChC,OAAK,MAAM/gB,GAAX,IAAkB+gB,KAAlB,EAAyB;AACvBk2O,IAAAA,YAAY,CAACilB,EAAD,EAAKl8Q,GAAL,EAAU+gB,KAAK,CAAC/gB,GAAD,CAAf,CAAZ;AACD;AACF;;AAED,SAASi3P,YAAT,CAAsBilB,EAAtB,EAA0B5+Q,IAA1B,EAAgCyB,KAAhC,EAAuC;AACrC,MAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACjlB,YAAH,CAAgB35P,IAAhB,EAAsByB,KAAtB;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAAC2K,eAAH,CAAmBvpR,IAAnB;AACD;AACF;;AAED,SAASgrR,cAAT,CAAwBpM,EAAxB,EAA4B5+Q,IAA5B,EAAkCyB,KAAlC,EAAyC2pB,EAAzC,EAA6C;AAC3C,MAAI3pB,KAAK,IAAI,IAAb,EAAmB;AACjB;AACAm9Q,IAAAA,EAAE,CAACoM,cAAH,CAAkB5/P,EAAlB,EAAsBprB,IAAtB,EAA4ByB,KAA5B;AACD,GAHD,MAGO;AACL;AACAm9Q,IAAAA,EAAE,CAACsM,iBAAH,CAAqB9/P,EAArB,EAAyBprB,IAAzB;AACD;AACF;;AAED,SAASijH,IAAT,GAAgB;AACd,MAAI9xG,GAAJ;AACA,SAAO,OAAOka,MAAP,KAAkB,WAAlB,GAAgC,EAAhC,GAAqC,CAACla,GAAG,GAAGka,MAAM,CAAC1pB,QAAd,EAAwByiO,IAAxB,GAA+BjzN,GAAG,CAAC8xG,IAAJ,CAASn7G,KAAT,CAAe,CAAf,EAAkB,CAACqJ,GAAG,CAACizN,IAAJ,CAASrmO,MAA5B,CAA/B,GAAqEoT,GAAG,CAAC8xG,IAArH;AACD;;AAED,SAASkoK,iBAAT,CAA2BxtD,MAA3B,EAAmC;AACjCojD,EAAAA,QAAQ,CAACxjR,IAAT,CAAc,IAAd,EAAoBogO,MAApB;AACA,OAAKytD,KAAL,GAAa,IAAb;AACA,OAAKra,KAAL,GAAa;AACX9oP,IAAAA,QAAQ,EAAE,EADC;AAEX+oP,IAAAA,QAAQ,EAAE;AAFC,GAAb;AAID;;AACD,wBAASma,iBAAT,EAA4BpK,QAA5B,EAAsC;AACpC;AACF;AACA;AACA;AACEoF,EAAAA,GAAG,GAAG;AACJ,WAAO,KAAKiF,KAAZ;AACD,GAPmC;;AASpC;AACF;AACA;AACA;AACE3J,EAAAA,OAAO,CAACvL,KAAD,EAAQ;AACb,UAAMhgL,CAAC,GAAG8xL,MAAM,EAAhB,CADa,CACO;;AAEpB9xL,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,KAAP,EAAc,sBAAO,EAAP,EAAWyD,QAAX,EAAqB;AACjC8pK,MAAAA,KAAK,EAAE,OAD0B;AAEjC1kR,MAAAA,KAAK,EAAE,KAAKw6Q,MAAL,GAAc,KAAKE,MAFO;AAGjC3sP,MAAAA,MAAM,EAAE,KAAK0sP,OAAL,GAAe,KAAKC,MAHK;AAIjCgI,MAAAA,OAAO,EAAE,OAAOrrR,MAAP,CAAc,KAAKmjR,MAAnB,EAA2B,GAA3B,EAAgCnjR,MAAhC,CAAuC,KAAKojR,OAA5C;AAJwB,KAArB,CAAd,EAHa,CAQR;;AAEL,UAAMkI,EAAE,GAAG,KAAKtI,QAAhB;;AAEA,QAAIsI,EAAE,IAAIA,EAAE,KAAK,aAAb,IAA8BA,EAAE,KAAK,MAAzC,EAAiD;AAC/CpzL,MAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbn3G,QAAAA,KAAK,EAAE,KAAKw6Q,MADC;AAEbzsP,QAAAA,MAAM,EAAE,KAAK0sP,OAFA;AAGbnyQ,QAAAA,IAAI,EAAEq6Q;AAHO,OAAf,EAIGjrK,KAJH;AAKD,KAlBY,CAkBX;;;AAGFnoB,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY6qK,cAAZ,EAA4B;AAC1BjhG,MAAAA,SAAS,EAAE,eAAe,KAAK44F,OAApB,GAA8B;AADf,KAA5B;AAGA,SAAK3P,IAAL,CAAUz6K,CAAV,EAAaggL,KAAb;AACAhgL,IAAAA,CAAC,CAACmoB,KAAF,GAzBa,CAyBF;AACX;;AAEA,SAAKirJ,IAAL,CAAUpzK,CAAV,EA5Ba,CA4BC;;AAEd,SAAKk1L,KAAL,GAAal1L,CAAC,CAACmoB,KAAF,KAAY,EAAzB;AACA,WAAO,IAAP;AACD,GA7CmC;;AA+CpC;AACF;AACA;AACA;AACA;AACEsyJ,EAAAA,IAAI,CAACz6K,CAAD,EAAIggL,KAAJ,EAAW;AACb,UAAM0J,IAAI,GAAGlC,KAAK,CAACxH,KAAK,CAACmD,QAAP,CAAlB;AAAA,UACM7B,GAAG,GAAGoI,IAAI,CAACpI,GADjB;AAAA,UAEM8T,QAAQ,GAAG,CAACjE,kBAAD,EAAqBzH,IAAI,CAACr/O,IAA1B,CAFjB,CADa,CAGqC;;AAElD21D,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY;AACV,eAASshK,QAAQ,CAAClJ,KAAD,CADP;AAEV,mBAAaA,KAAK,CAACvvO,IAAN,GAAaA,IAAI,CAAC,IAAD,EAAOuvO,KAAP,EAAcA,KAAK,CAAC9rJ,KAApB,CAAjB,GAA8C;AAFjD,KAAZ,EAGGm9J,kBAAkB,CAACrR,KAAD,CAHrB,EAG8B;AAC5B,wBAAkBsB,GAAG,KAAK,GAAR,IAAetB,KAAK,CAACiD,WAAN,KAAsB,KAArC,GAA6C,MAA7C,GAAsD;AAD5C,KAH9B,EALa,CAUT;;AAEJ,UAAMz8Q,OAAO,GAAG2pB,IAAI,IAAI;AACtB,YAAM48F,IAAI,GAAG,KAAKA,IAAL,CAAU58F,IAAV,CAAb;AACA,UAAI48F,IAAJ,EAAU/sB,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAYmF,IAAZ;AACV/sB,MAAAA,CAAC,CAAC4nB,IAAF,CAAO05J,GAAP,EAAY,KAAKj3O,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBilQ,QAAvB,EAAiC9T,GAAG,KAAK,GAAR,GAAcA,GAAd,GAAoB,IAArD,CAAZ;;AAEA,UAAIA,GAAG,KAAK,MAAZ,EAAoB;AAClB,cAAMzI,EAAE,GAAGqN,SAAS,CAAC/1P,IAAD,CAApB;;AAEA,YAAI,uBAAQ0oP,EAAR,CAAJ,EAAiB;AACf;AACA,gBAAMtrP,KAAK,GAAG;AACZ7e,YAAAA,CAAC,EAAE,CADS;AAEZ2e,YAAAA,EAAE,EAAE24P,UAAU,CAAC71P,IAAD;AAFF,WAAd;;AAKA,eAAK,IAAI5nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGswQ,EAAE,CAAChxQ,MAAvB,EAA+B,EAAEU,CAAjC,EAAoC;AAClCy3F,YAAAA,CAAC,CAAC4nB,IAAF,CAAO,OAAP,EAAgBr/G,CAAC,GAAGglB,KAAH,GAAW,IAA5B,EAAkC0zF,IAAlC,CAAuCykK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAE,CAACtwQ,CAAD,CAAT,CAAhD,EAA+D4/G,KAA/D;AACD;AACF,SAVD,MAUO;AACL;AACAnoB,UAAAA,CAAC,CAACihB,IAAF,CAAOykK,SAAS,CAACv1P,IAAD,EAAO0oP,EAAP,CAAhB;AACD;AACF,OAjBD,MAiBO,IAAIyI,GAAG,KAAK,GAAZ,EAAiB;AACtB,cAAMsB,IAAI,GAAGzyP,IAAI,CAACkyP,gBAAlB;AAAA,cACMtpQ,IAAI,GAAGoX,IAAI,CAACpX,IADlB;AAAA,cAEMmjQ,MAAM,GAAG/rP,IAAI,CAAC+rP,MAFpB;;AAIA,YAAI0G,IAAI,IAAI1G,MAAZ,EAAoB;AAClB/rP,UAAAA,IAAI,CAAC+rP,MAAL,GAAc,IAAd;AACD;;AAEDl8K,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACvH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEh6J,KAAlE,GATsB,CASqD;;AAE3EnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,GAAP,EAAY,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACpH,OAA5B,CAAZ;AACA/0C,QAAAA,KAAK,CAACp9M,IAAD,EAAO6vP,KAAK,IAAI,KAAKvF,IAAL,CAAUz6K,CAAV,EAAaggL,KAAb,CAAhB,CAAL;AACAhgL,QAAAA,CAAC,CAACmoB,KAAF;;AAEA,YAAIy6J,IAAI,IAAI1G,MAAZ,EAAoB;AAClB,cAAInjQ,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAY,IAAZ;AACVoX,UAAAA,IAAI,CAAC+rP,MAAL,GAAcA,MAAd;AACAl8K,UAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEj6J,KAAlE;AACA,cAAIpvG,IAAJ,EAAUoX,IAAI,CAACpX,IAAL,GAAYA,IAAZ;AACX,SALD,MAKO;AACLinF,UAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe,KAAKv9E,IAAL,CAAU21O,KAAV,EAAiB7vP,IAAjB,EAAuBu5P,IAAI,CAACtH,UAA5B,EAAwC,QAAxC,CAAf,EAAkEj6J,KAAlE;AACD;AACF;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF,GA/CsB,CA+CX;;AAEX,UAAI4E,IAAJ,EAAU/sB,CAAC,CAACmoB,KAAF,GAjDY,CAiDD;AACtB,KAlDD;;AAoDA,QAAIuhK,IAAI,CAACnI,MAAT,EAAiB;AACf,UAAIvB,KAAK,CAACv8J,KAAN,IAAeu8J,KAAK,CAACv8J,KAAN,CAAY57G,MAA/B,EAAuCrB,OAAO,CAACw5Q,KAAK,CAACv8J,KAAN,CAAY,CAAZ,CAAD,CAAP;AACxC,KAFD,MAEO;AACL8pH,MAAAA,KAAK,CAACyyC,KAAD,EAAQx5Q,OAAR,CAAL;AACD,KApEY,CAoEX;;;AAGF,WAAOw5F,CAAC,CAACmoB,KAAF,EAAP,CAvEa,CAuEK;AACnB,GA5HmC;;AA8HpC;AACF;AACA;AACA;AACE4E,EAAAA,IAAI,CAAC58F,IAAD,EAAO;AACT,UAAM48F,IAAI,GAAG58F,IAAI,CAAC48F,IAAlB;AACA,QAAI1iF,IAAJ;;AAEA,QAAI0iF,IAAJ,EAAU;AACR,UAAI1iF,IAAI,GAAG,KAAKgrP,MAAL,IAAe,KAAKA,MAAL,CAAYtoK,IAAZ,CAA1B,EAA6C;AAC3C,eAAO1iF,IAAP;AACD,OAFD,MAEO;AACL,aAAKsxO,WAAL,CAAiB5uJ,IAAjB,EAAuBv1G,IAAvB,CAA4B6yB,IAAI,IAAI;AAClC;AACAA,UAAAA,IAAI,CAAC,YAAD,CAAJ,GAAqBA,IAAI,CAAC0iF,IAA1B;AACA1iF,UAAAA,IAAI,CAAC0iF,IAAL,GAAY,IAAZ;AACA,WAAC,KAAKsoK,MAAL,KAAgB,KAAKA,MAAL,GAAc,EAA9B,CAAD,EAAoCtoK,IAApC,IAA4C1iF,IAA5C;AACD,SALD;AAMD;AACF;;AAED,WAAO,IAAP;AACD,GApJmC;;AAsJpC;AACF;AACA;AACA;AACA;AACA;AACA;AACEA,EAAAA,IAAI,CAAC21O,KAAD,EAAQ7vP,IAAR,EAAc5C,KAAd,EAAqB+zP,GAArB,EAA0B;AAC5B,UAAM1xE,MAAM,GAAG,EAAf;AAAA,UACMlmM,IAAI,GAAG,CAACI,IAAD,EAAOyB,KAAP,EAAc2pB,EAAd,EAAkBogQ,QAAlB,KAA+B;AAC1C1lF,MAAAA,MAAM,CAAC0lF,QAAQ,IAAIxrR,IAAb,CAAN,GAA2ByB,KAA3B;AACD,KAHD,CAD4B,CAIzB;;;AAGH,QAAIlD,KAAK,CAACuH,OAAN,CAAc2d,KAAd,CAAJ,EAA0B;AACxBA,MAAAA,KAAK,CAAClhB,OAAN,CAAcmgB,EAAE,IAAIA,EAAE,CAAC9iB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAtB;AACD,KAFD,MAEO;AACL5C,MAAAA,KAAK,CAAC7jB,IAAD,EAAOymB,IAAP,EAAa,IAAb,CAAL;AACD,KAX2B,CAW1B;;;AAGF,QAAImxP,GAAJ,EAAS;AACP0N,MAAAA,KAAK,CAACp/E,MAAD,EAASz/K,IAAT,EAAe6vP,KAAf,EAAsBsB,GAAtB,EAA2B,KAAKzG,KAAhC,CAAL;AACD;;AAED,WAAOjrE,MAAP;AACD,GAhLmC;;AAkLpC;AACF;AACA;AACA;AACA;AACA;AACEwjE,EAAAA,IAAI,CAACpzK,CAAD,EAAI;AACN,UAAMjuE,QAAQ,GAAG,KAAK8oP,KAAL,CAAW9oP,QAA5B;AAAA,UACM+oP,QAAQ,GAAG,KAAKD,KAAL,CAAWC,QAD5B;AAAA,UAEMx6L,KAAK,GAAGh1E,MAAM,CAACof,IAAP,CAAYqH,QAAZ,EAAsBlqB,MAAtB,GAA+ByD,MAAM,CAACof,IAAP,CAAYowP,QAAZ,EAAsBjzQ,MAFnE;AAGA,QAAIy4E,KAAK,KAAK,CAAd,EAAiB,OAJX,CAImB;;AAEzB0f,IAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP;;AAEA,SAAK,MAAMpsG,EAAX,IAAiBuW,QAAjB,EAA2B;AACzB,YAAMwsJ,GAAG,GAAGxsJ,QAAQ,CAACvW,EAAD,CAApB;AAAA,YACM83P,KAAK,GAAG/0F,GAAG,CAAC+0F,KADlB;;AAGA,UAAI/0F,GAAG,CAACxsJ,QAAJ,KAAiB,QAArB,EAA+B;AAC7B;AACA;AACA;AACA;AACAiuE,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,SAAP,EAAkB;AAChBpsG,UAAAA,EAAE,EAAEy3P,aAAa,GAAGz3P,EADJ;AAEhB23Q,UAAAA,OAAO,EAAE,SAFO;AAGhB1iR,UAAAA,KAAK,EAAE,MAHS;AAIhB+tB,UAAAA,MAAM,EAAE,MAJQ;AAKhB21P,UAAAA,mBAAmB,EAAE;AALL,SAAlB;AAOAn0L,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbn3G,UAAAA,KAAK,EAAE,GADM;AAEb+tB,UAAAA,MAAM,EAAE,GAFK;AAGbzlB,UAAAA,IAAI,EAAE,UAAUyC,EAAV,GAAe;AAHR,SAAf,EAIG2sG,KAJH;AAKAnoB,QAAAA,CAAC,CAACmoB,KAAF,GAjB6B,CAiBlB;;AAEXnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,gBAAP,EAAyB;AACvBpsG,UAAAA,EAAE,EAAEA,EADmB;AAEvB44Q,UAAAA,EAAE,EAAE71G,GAAG,CAACvjE,EAFe;AAGvBq5K,UAAAA,EAAE,EAAE91G,GAAG,CAACxjE,EAHe;AAIvBu5K,UAAAA,EAAE,EAAE/1G,GAAG,CAACo8B,EAJe;AAKvB6uC,UAAAA,EAAE,EAAEjrE,GAAG,CAACl3F,EALe;AAMvBoiK,UAAAA,EAAE,EAAElrE,GAAG,CAACtjE,EANe;AAOvB1kG,UAAAA,CAAC,EAAEgoK,GAAG,CAACq8B;AAPgB,SAAzB;AASD,OA5BD,MA4BO;AACL56G,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,gBAAP,EAAyB;AACvBpsG,UAAAA,EAAE,EAAEA,EADmB;AAEvBw/F,UAAAA,EAAE,EAAEujE,GAAG,CAACvjE,EAFe;AAGvB3zB,UAAAA,EAAE,EAAEk3F,GAAG,CAACl3F,EAHe;AAIvB0zB,UAAAA,EAAE,EAAEwjE,GAAG,CAACxjE,EAJe;AAKvBE,UAAAA,EAAE,EAAEsjE,GAAG,CAACtjE;AALe,SAAzB;AAOD;;AAED,WAAK,IAAI1yG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+qQ,KAAK,CAACzrQ,MAA1B,EAAkC,EAAEU,CAApC,EAAuC;AACrCy3F,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACb1yG,UAAAA,MAAM,EAAEo+P,KAAK,CAAC/qQ,CAAD,CAAL,CAAS2M,MADJ;AAEb,wBAAco+P,KAAK,CAAC/qQ,CAAD,CAAL,CAASw1P;AAFV,SAAf,EAGG51I,KAHH;AAID;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF;AACD;;AAED,SAAK,MAAM3sG,EAAX,IAAiBs/P,QAAjB,EAA2B;AACzB,YAAMv8F,GAAG,GAAGu8F,QAAQ,CAACt/P,EAAD,CAApB;AACAwkF,MAAAA,CAAC,CAAC4nB,IAAF,CAAO,UAAP,EAAmB;AACjBpsG,QAAAA,EAAE,EAAEA;AADa,OAAnB;;AAIA,UAAI+iK,GAAG,CAAC3nK,IAAR,EAAc;AACZopF,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbxyG,UAAAA,CAAC,EAAEmpK,GAAG,CAAC3nK;AADM,SAAf,EAEGuxG,KAFH;AAGD,OAJD,MAIO;AACLnoB,QAAAA,CAAC,CAAC4nB,IAAF,CAAO,MAAP,EAAe;AACbl5G,UAAAA,CAAC,EAAE,CADU;AAEbue,UAAAA,CAAC,EAAE,CAFU;AAGbxc,UAAAA,KAAK,EAAE8tK,GAAG,CAAC9tK,KAHE;AAIb+tB,UAAAA,MAAM,EAAE+/I,GAAG,CAAC//I;AAJC,SAAf,EAKG2pF,KALH;AAMD;;AAEDnoB,MAAAA,CAAC,CAACmoB,KAAF;AACD;;AAEDnoB,IAAAA,CAAC,CAACmoB,KAAF;AACD;;AA3QmC,CAAtC,GA6QI;;AAEJ,SAAS6mK,KAAT,CAAejjR,CAAf,EAAkBokB,IAAlB,EAAwB6vP,KAAxB,EAA+BsB,GAA/B,EAAoClO,IAApC,EAA0C;AACxC,MAAIjjP,IAAI,IAAI,IAAZ,EAAkB,OAAOpkB,CAAP;;AAElB,MAAIu1Q,GAAG,KAAK,QAAR,IAAoBtB,KAAK,CAACiD,WAAN,KAAsB,KAA9C,EAAqD;AACnDl3Q,IAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AAED,MAAIu1Q,GAAG,KAAK,QAAZ,EAAsB;AACpB,QAAItB,KAAK,CAACiD,WAAN,KAAsB,KAA1B,EAAiC;AAC/Bl3Q,MAAAA,CAAC,CAAC,gBAAD,CAAD,GAAsB,MAAtB;AACD;;AAEDA,IAAAA,CAAC,CAACwpR,OAAF,GAAY,MAAZ;AACA,QAAIplQ,IAAI,CAACpX,IAAL,KAAc,IAAlB,EAAwB,OAAOhN,CAAP;AACzB;;AAED,MAAIu1Q,GAAG,KAAK,OAAR,IAAmBnxP,IAAI,CAACohN,MAAL,KAAgB,KAAvC,EAA8C;AAC5CxlO,IAAAA,CAAC,CAACijR,KAAF,GAAU,6DAAV;AACD;;AAED,MAAI1N,GAAG,KAAK,MAAZ,EAAoB;AAClBv1Q,IAAAA,CAAC,CAAC,aAAD,CAAD,GAAmBu6Q,UAAU,CAACn2P,IAAD,CAA7B;AACApkB,IAAAA,CAAC,CAAC,WAAD,CAAD,GAAiBq5Q,QAAQ,CAACj1P,IAAD,CAAR,GAAiB,IAAlC;AACApkB,IAAAA,CAAC,CAAC,YAAD,CAAD,GAAkBokB,IAAI,CAACq2P,SAAvB;AACAz6Q,IAAAA,CAAC,CAAC,cAAD,CAAD,GAAoBokB,IAAI,CAACs2P,WAAzB;AACA16Q,IAAAA,CAAC,CAAC,aAAD,CAAD,GAAmBokB,IAAI,CAACu2P,UAAxB;AACD;;AAED,OAAK,MAAMpnM,IAAX,IAAmBkzM,MAAnB,EAA2B;AACzB,QAAIjnR,KAAK,GAAG4kB,IAAI,CAACmvD,IAAD,CAAhB;AACA,UAAMx1E,IAAI,GAAG0oR,MAAM,CAAClzM,IAAD,CAAnB;AAEA,QAAI/zE,KAAK,KAAK,aAAV,KAA4BzB,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,QAAxD,CAAJ,EAAuE,CAAvE,KAA8E,IAAIyB,KAAK,IAAI,IAAb,EAAmB;AAC/F,UAAI2nQ,UAAU,CAAC3nQ,KAAD,CAAd,EAAuB;AACrBA,QAAAA,KAAK,GAAG4nQ,WAAW,CAAC5nQ,KAAD,EAAQ6nQ,IAAI,CAACrhP,QAAb,EAAuB,EAAvB,CAAnB;AACD;;AAEDhmB,MAAAA,CAAC,CAACjC,IAAD,CAAD,GAAUyB,KAAV;AACD;AACF;;AAED,SAAOQ,CAAP;AACD;;AAED,MAAMypR,MAAM,GAAG,QAAf;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAMC,GAAG,GAAG,KAAZ;AACA,MAAM74E,IAAI,GAAG,MAAb;AACA,MAAM84E,UAAU,GAAG;AACjBH,EAAAA,MAAM,EAAEA,MADS;AAEjBC,EAAAA,GAAG,EAAEA,GAFY;AAGjBC,EAAAA,GAAG,EAAEA,GAHY;AAIjB74E,EAAAA,IAAI,EAAEA;AAJW,CAAnB;;AAMA,MAAM+4E,OAAO,GAAG,EAAhB;AACAA,OAAO,CAACJ,MAAD,CAAP,GAAkBI,OAAO,CAACH,GAAD,CAAP,GAAe;AAC/B7a,EAAAA,QAAQ,EAAEsU,cADqB;AAE/B2G,EAAAA,QAAQ,EAAE3G,cAFqB;AAG/BjqK,EAAAA,OAAO,EAAEioK;AAHsB,CAAjC;AAKA0I,OAAO,CAACF,GAAD,CAAP,GAAe;AACb9a,EAAAA,QAAQ,EAAEgY,WADG;AAEbiD,EAAAA,QAAQ,EAAEZ,iBAFG;AAGbhwK,EAAAA,OAAO,EAAE4qK;AAHI,CAAf;AAKA+F,OAAO,CAAC/4E,IAAD,CAAP,GAAgB,EAAhB;;AACA,SAASi5E,YAAT,CAAsBhsR,IAAtB,EAA4BolB,CAA5B,EAA+B;AAC7BplB,EAAAA,IAAI,GAAG+J,MAAM,CAAC/J,IAAI,IAAI,EAAT,CAAN,CAAmB4C,WAAnB,EAAP;;AAEA,MAAIpE,SAAS,CAACT,MAAV,GAAmB,CAAvB,EAA0B;AACxB+tR,IAAAA,OAAO,CAAC9rR,IAAD,CAAP,GAAgBolB,CAAhB;AACA,WAAO,IAAP;AACD,GAHD,MAGO;AACL,WAAO0mQ,OAAO,CAAC9rR,IAAD,CAAd;AACD;AACF;;AAED,SAASk+O,SAAT,CAAmBg4B,KAAnB,EAA0B3E,MAA1B,EAAkC33P,MAAlC,EAA0C;AACxC,QAAMqyQ,IAAI,GAAG,EAAb;AAAA,QACM;AACN1pE,EAAAA,GAAG,GAAG,IAAI0uD,MAAJ,GAAa5pD,KAAb,CAAmBkqD,MAAnB,CAFN;AAAA,QAGM;AACN7yP,EAAAA,IAAI,GAAGw3P,KAAK,CAACmD,QAJb;AAKA,SAAO36P,IAAI,GAAGwtQ,aAAa,CAAChW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAhB,GAA6CvtQ,IAAI,KAAK,OAAT,GAAmBytQ,cAAc,CAACjW,KAAD,EAAQ3zD,GAAR,EAAa3oM,MAAb,EAAqBqyQ,IAArB,CAAjC,GAA8D,qBAAM,kDAAN,CAAtH;AACD;;AAED,SAASC,aAAT,CAAuBvb,IAAvB,EAA6BpuD,GAA7B,EAAkC3oM,MAAlC,EAA0CqyQ,IAA1C,EAAgD;AAC9C,MAAIG,SAAS,CAACzb,IAAD,EAAOpuD,GAAP,EAAY3oM,MAAZ,CAAb,EAAkC;AAChC,UAAM+/F,KAAK,GAAGg3J,IAAI,CAACh3J,KAAnB;AAAA,UACMj7F,IAAI,GAAGiyP,IAAI,CAAC0I,QADlB;AAAA,UAEM1sQ,CAAC,GAAGgtG,KAAK,CAAC57G,MAFhB;AAGA,QAAIU,CAAC,GAAG,CAAR;;AAEA,QAAIigB,IAAI,KAAK,OAAb,EAAsB;AACpB,aAAOjgB,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjB0tR,QAAAA,cAAc,CAACxyK,KAAK,CAACl7G,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAd;AACD;AACF,KAJD,MAIO;AACL,WAAK,MAAM7/P,IAAI,GAAGsxP,KAAK,CAACh/P,IAAD,CAAL,CAAY44P,KAA9B,EAAqC74Q,CAAC,GAAGkO,CAAzC,EAA4C,EAAElO,CAA9C,EAAiD;AAC/C,cAAM4nB,IAAI,GAAGszF,KAAK,CAACl7G,CAAD,CAAlB;AACA,YAAI4tR,aAAa,CAAChmQ,IAAD,EAAOk8L,GAAP,EAAYn2L,IAAZ,CAAjB,EAAoC6/P,IAAI,CAACvtR,IAAL,CAAU2nB,IAAV;AACrC;AACF;AACF;;AAED,SAAO4lQ,IAAP;AACD;;AAED,SAASG,SAAT,CAAmBzb,IAAnB,EAAyBpuD,GAAzB,EAA8B3oM,MAA9B,EAAsC;AACpC;AACA;AACA;AACA,SAAO+2P,IAAI,CAACY,MAAL,IAAehvD,GAAG,CAACpW,UAAJ,CAAewkE,IAAI,CAACY,MAApB,CAAf,KAA+CZ,IAAI,CAAC0I,QAAL,KAAkB,OAAlB,IAA6B1I,IAAI,CAACwI,WAAL,KAAqB,KAArB,KAA+B,CAACv/P,MAAD,IAAWA,MAAM,CAAC+2P,IAAD,CAAhD,CAA5E,CAAP;AACD;;AAED,SAASwb,cAAT,CAAwB/hK,KAAxB,EAA+Bm4F,GAA/B,EAAoC3oM,MAApC,EAA4CqyQ,IAA5C,EAAkD;AAChD;AACA;AACA,MAAIryQ,MAAM,IAAIA,MAAM,CAACwwG,KAAK,CAACumJ,IAAP,CAAhB,IAAgC0b,aAAa,CAACjiK,KAAD,EAAQm4F,GAAR,EAAam7D,KAAK,CAACtzJ,KAAN,CAAYktJ,KAAzB,CAAjD,EAAkF;AAChF2U,IAAAA,IAAI,CAACvtR,IAAL,CAAU0rH,KAAV;AACD,GAL+C,CAK9C;AACF;;;AAGA,QAAMgtB,KAAK,GAAGhtB,KAAK,CAACzQ,KAApB;AAAA,QACMhtG,CAAC,GAAGyqI,KAAK,IAAIA,KAAK,CAACr5I,MADzB;;AAGA,MAAI4O,CAAJ,EAAO;AACL,UAAM/H,CAAC,GAAGwlH,KAAK,CAACxlH,CAAN,IAAW,CAArB;AAAA,UACMue,CAAC,GAAGinG,KAAK,CAACjnG,CAAN,IAAW,CADrB;AAEAo/L,IAAAA,GAAG,CAACrD,SAAJ,CAAc,CAACt6M,CAAf,EAAkB,CAACue,CAAnB;;AAEA,SAAK,IAAI1kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1BytR,MAAAA,aAAa,CAAC90I,KAAK,CAAC34I,CAAD,CAAN,EAAW8jN,GAAX,EAAgB3oM,MAAhB,EAAwBqyQ,IAAxB,CAAb;AACD;;AAED1pE,IAAAA,GAAG,CAACrD,SAAJ,CAAct6M,CAAd,EAAiBue,CAAjB;AACD;;AAED,SAAO8oQ,IAAP;AACD;;AAED,SAASI,aAAT,CAAuBhmQ,IAAvB,EAA6Bk8L,GAA7B,EAAkCn2L,IAAlC,EAAwC;AACtC;AACA,QAAMmlP,MAAM,GAAGlrP,IAAI,CAACkrP,MAApB;AACA,SAAOhvD,GAAG,CAAC6uD,QAAJ,CAAaG,MAAb,KAAwBhvD,GAAG,CAACpW,UAAJ,CAAeolE,MAAf,KAA0BnlP,IAAI,CAAC/F,IAAD,EAAOk8L,GAAP,CAA7D;AACD;;AAED,MAAM+pE,UAAU,GAAG,IAAIrb,MAAJ,EAAnB;;AACA,SAASsb,SAAT,CAAoB5b,IAApB,EAA0B;AACxB,QAAMhqO,IAAI,GAAGgqO,IAAI,CAAChqO,IAAlB;;AAEA,MAAI,0BAAWA,IAAX,CAAJ,EAAsB;AACpBA,IAAAA,IAAI,CAACysO,YAAY,CAACkZ,UAAU,CAACp2E,KAAX,EAAD,CAAb,CAAJ;AACD,GAFD,MAEO,IAAIvvK,IAAJ,EAAU;AACf2lP,IAAAA,UAAU,CAAClrR,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqBuvQ,IAAI,CAACvmJ,KAAL,CAAWzjH,KAAhC,EAAuCgqQ,IAAI,CAACvmJ,KAAL,CAAW11F,MAAlD;AACD,GAFM,MAEA;;AAEPi8O,EAAAA,IAAI,CAACY,MAAL,CAAYrzB,SAAZ,CAAsBouC,UAAtB;AACD;;AAED,MAAME,SAAS,GAAG,IAAlB;;AACA,SAASC,UAAT,CAAoB9mR,CAApB,EAAuB6G,CAAvB,EAA0B9J,GAA1B,EAA+B;AAC7B,SAAOiD,CAAC,KAAK6G,CAAN,GAAU,IAAV,GAAiB9J,GAAG,KAAK,MAAR,GAAiBgqR,SAAS,CAAC/mR,CAAD,EAAI6G,CAAJ,CAA1B,GAAmC7G,CAAC,YAAY4uE,IAAb,IAAqB/nE,CAAC,YAAY+nE,IAAlC,GAAyC,CAAC5uE,CAAD,KAAO,CAAC6G,CAAjD,GAAqD,wBAAS7G,CAAT,KAAe,wBAAS6G,CAAT,CAAf,GAA6BhI,IAAI,CAACiT,GAAL,CAAS9R,CAAC,GAAG6G,CAAb,KAAmBggR,SAAhD,GAA4D,CAAC7mR,CAAD,IAAM,CAAC6G,CAAP,IAAY,CAAC,wBAAS7G,CAAT,CAAD,IAAgB,CAAC,wBAAS6G,CAAT,CAA7B,GAA2C7G,CAAC,IAAI6G,CAAhD,GAAoDmgR,WAAW,CAAChnR,CAAD,EAAI6G,CAAJ,CAA3O;AACD;;AACD,SAASkgR,SAAT,CAAmB/mR,CAAnB,EAAsB6G,CAAtB,EAAyB;AACvB,SAAOigR,UAAU,CAACzhB,SAAS,CAACrlQ,CAAD,CAAV,EAAeqlQ,SAAS,CAACx+P,CAAD,CAAxB,CAAjB;AACD;;AAED,SAASmgR,WAAT,CAAqBhnR,CAArB,EAAwB6G,CAAxB,EAA2B;AACzB,MAAIs3O,EAAE,GAAGtiP,MAAM,CAACof,IAAP,CAAYjb,CAAZ,CAAT;AAAA,MACIinR,EAAE,GAAGprR,MAAM,CAACof,IAAP,CAAYpU,CAAZ,CADT;AAAA,MAEI9J,GAFJ;AAAA,MAGIjE,CAHJ;AAIA,MAAIqlP,EAAE,CAAC/lP,MAAH,KAAc6uR,EAAE,CAAC7uR,MAArB,EAA6B,OAAO,KAAP;AAC7B+lP,EAAAA,EAAE,CAACr7O,IAAH;AACAmkR,EAAAA,EAAE,CAACnkR,IAAH;;AAEA,OAAKhK,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnC,QAAIqlP,EAAE,CAACrlP,CAAD,CAAF,IAASmuR,EAAE,CAACnuR,CAAD,CAAf,EAAoB,OAAO,KAAP;AACrB;;AAED,OAAKA,CAAC,GAAGqlP,EAAE,CAAC/lP,MAAH,GAAY,CAArB,EAAwBU,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnCiE,IAAAA,GAAG,GAAGohP,EAAE,CAACrlP,CAAD,CAAR;AACA,QAAI,CAACguR,UAAU,CAAC9mR,CAAC,CAACjD,GAAD,CAAF,EAAS8J,CAAC,CAAC9J,GAAD,CAAV,EAAiBA,GAAjB,CAAf,EAAsC,OAAO,KAAP;AACvC;;AAED,SAAO,OAAOiD,CAAP,KAAa,OAAO6G,CAA3B;AACD;;AAED,SAASqgR,cAAT,GAA0B;AACxBhc,EAAAA,cAAc;AACd3H,EAAAA,kBAAkB;AACnB;;;;;;;;;AC7iKD;;AACA;;AACA;;AACA;;AAEe,kBAAS50P,KAAT,EAAgBqsM,EAAhB,EAAoBntF,EAApB,EAAwBh9C,KAAxB,EAA+B4zC,KAA/B,EAAsC;AACnD91G,EAAAA,KAAK,GAAG,sBAASA,KAAT,EAAgB,CAAC81G,KAAK,IAAI,IAAV,EAAgBqmD,OAAhC,CAAR;AAEA,QAAMxoJ,QAAQ,GAAG,8BAAS04L,EAAT,EAAantF,EAAb,CAAjB;AAEA,MAAIg2I,KAAK,GAAGl1P,KAAK,CAACu/L,MAAN,EAAZ;AAAA,MACIlvM,GAAG,GAAG6kQ,KAAK,CAAC,CAAD,CADf;AAAA,MAEI3kQ,GAAG,GAAG,oBAAK2kQ,KAAL,CAFV;AAAA,MAGIpkJ,QAAQ,GAAGsZ,kBAHf;;AAKA,MAAI,EAAE75H,GAAG,GAAGF,GAAR,CAAJ,EAAkB;AAChB;AACA2P,IAAAA,KAAK,GAAG,CAACA,KAAK,CAACi1O,YAAN,GACL,sBAAI,YAAJ,IAAoBA,YAApB,CAAiCj1O,KAAK,CAACi1O,YAAN,EAAjC,CADK,GAEL,sBAAI,QAAJ,IAAgBqS,WAAhB,CAA4BtnP,KAAK,CAACsnP,WAAN,EAA5B,EAAiD37N,KAAjD,CAAuD3rB,KAAK,CAAC2rB,KAAN,EAAvD,CAFI,EAGN4zK,MAHM,CAGC,CAAClvM,GAAG,GAAC,CAAL,EAAQE,GAAG,GAAC,CAAZ,CAHD,CAAR;AAID,GAND,MAMO;AACLugH,IAAAA,QAAQ,GAAG,8BAAc9wG,KAAd,EAAqB3P,GAArB,EAA0BE,GAA1B,CAAX;AACD;;AAED,MAAIyP,KAAK,CAACmwM,KAAV,EAAiB;AACf+kD,IAAAA,KAAK,GAAGl1P,KAAK,CAACmwM,KAAN,CAAY,CAACjuI,KAAD,IAAU,EAAtB,CAAR;AACA,QAAI7xE,GAAG,KAAK6kQ,KAAK,CAAC,CAAD,CAAjB,EAAsBA,KAAK,CAAChkO,OAAN,CAAc7gC,GAAd;AACtB,QAAIE,GAAG,KAAK,oBAAK2kQ,KAAL,CAAZ,EAAyBA,KAAK,CAAC9qQ,IAAN,CAAWmG,GAAX;AAC1B;;AAED2kQ,EAAAA,KAAK,CAACjnQ,OAAN,CAAc6iB,CAAC,IAAI6C,QAAQ,CAAC+X,IAAT,CAAcolF,QAAQ,CAAChgG,CAAD,CAAtB,EAA2B9Q,KAAK,CAAC8Q,CAAD,CAAhC,CAAnB;AAEA,SAAO6C,QAAP;AACD;;;;;;;;;;AClCD;;AACA;;AAEO,SAASm4T,QAAT,CAAkB34C,UAAlB,EAA8B8lB,OAA9B,EAAuCnjM,KAAvC,EAA8C;AACnD,QAAMrnF,CAAC,GAAG,sBAAS0kQ,UAAT,EAAqB,CAACr9K,KAAK,IAAI,IAAV,EAAgBqmD,OAArC,CAAV;AACA,SAAO,UAASA,OAAT,EAAkB;AACvB,WAAO1tI,CAAC,GAAGA,CAAC,CAACj2B,IAAF,CAAO2jK,OAAP,CAAeA,OAAf,EAAwB88I,OAAxB,CAAH,GAAsC,EAA9C;AACD,GAFD;AAGD;;AAEM,SAAS8yB,SAAT,CAAmBvzU,IAAnB,EAAyB;AAC9B,MAAIi2B,CAAC,GAAG,IAAR;AACA,SAAO,UAAS0tI,OAAT,EAAkB;AACvB,WAAOA,OAAO,GACV,gCAAWA,OAAX,EAAqB1tI,CAAC,GAAGA,CAAC,IAAI,+BAAUj2B,IAAV,CAA9B,CADU,GAEVA,IAFJ;AAGD,GAJD;AAKD;;;;;;;;;;ACjBD;;AAEA,MAAM0wN,KAAK,GAAGlyN,CAAC,IAAIA,CAAC,CAACmC,IAArB;;AAEA,SAAS6yU,SAAT,CAAmBtgV,IAAnB,EAAyBywK,OAAzB,EAAkC;AAChC,QAAMmyB,IAAI,GAAGn1L,WAAKlQ,IAAL,CAAUkzK,OAAV,EAAmBzwK,IAAnB,CAAb;;AACA,SAAO4iM,IAAI,CAACR,IAAL,IAAaQ,IAAI,CAACR,IAAL,CAAUqnE,MAAvB,IAAiC,EAAxC;AACD;;AAEM,SAAS82E,QAAT,CAAkBvgV,IAAlB,EAAwBu0D,MAAxB,EAAgCvf,MAAhC,EAAwC;AAC7C,QAAMu9F,KAAK,GAAG+tM,SAAS,CAACtgV,IAAD,EAAO,IAAP,CAAvB;AAAA,QACMiC,CAAC,GAAGswI,KAAK,CAACh+E,MAAD,CADf;AAAA,QAEMpyD,CAAC,GAAGowI,KAAK,CAACv9F,MAAD,CAFf;AAGA,SAAO/yC,CAAC,IAAIE,CAAL,GAASF,CAAC,CAAC6K,IAAF,CAAO3K,CAAP,EAAU+F,GAAV,CAAcs1N,KAAd,CAAT,GAAgC7pG,SAAvC;AACD;;AAEM,SAAS6sN,aAAT,CAAuBxgV,IAAvB,EAA6BwpB,IAA7B,EAAmC;AACxC,QAAM7c,CAAC,GAAG2zU,SAAS,CAACtgV,IAAD,EAAO,IAAP,CAAT,CAAsBwpB,IAAtB,CAAV;AACA,SAAO7c,CAAC,GAAGA,CAAC,CAACmqT,SAAF,GAAc5uT,GAAd,CAAkBs1N,KAAlB,CAAH,GAA8B7pG,SAAtC;AACD;;;;;;;;;;;ACnBD,MAAM8sN,OAAO,GAAG,MAAO,OAAOp1T,MAAP,KAAkB,WAAlB,IAAiCA,MAAlC,IAA6C,IAAnE;;AAEO,SAASyyC,MAAT,GAAkB;AACvB,QAAM/S,CAAC,GAAG01R,OAAO,EAAjB;;AACA,SAAO11R,CAAC,GAAGA,CAAC,CAAC+S,MAAL,GAAc,EAAtB;AACD;;AAEM,SAASpkB,UAAT,GAAsB;AAC3B,QAAMqR,CAAC,GAAG01R,OAAO,EAAjB;;AACA,SAAO11R,CAAC,GACJ,CAACA,CAAC,CAAC21R,UAAH,EAAe31R,CAAC,CAAC41R,WAAjB,CADI,GAEJ,CAAChtN,SAAD,EAAYA,SAAZ,CAFJ;AAGD;;AAEM,SAASitN,aAAT,GAAyB;AAC9B,QAAM3xD,IAAI,GAAG,KAAKx+G,OAAL,CAAasxD,QAA1B;AAAA,QACM68C,EAAE,GAAGqQ,IAAI,CAACjwQ,SAAL,IAAkBiwQ,IAAI,CAACjwQ,SAAL,EAD7B;AAEA,SAAO4/P,EAAE,GACL,CAACA,EAAE,CAACiiE,WAAJ,EAAiBjiE,EAAE,CAACkiE,YAApB,CADK,GAEL,CAACntN,SAAD,EAAYA,SAAZ,CAFJ;AAGD;;;;;;;;;ACpBD;;AACA;;AAEe,kBAASnnH,CAAT,EAAYkmM,GAAZ,EAAiBtoF,KAAjB,EAAwB;AACrC,MAAI,CAAC59G,CAAL,EAAQ,OAAO,EAAP;AAER,QAAM,CAACixE,CAAD,EAAI9sE,CAAJ,IAASnE,CAAf;AAAA,QACM+1M,GAAG,GAAG,IAAI0uD,sBAAJ,GAAa7vQ,GAAb,CAAiBq8E,CAAC,CAAC,CAAD,CAAlB,EAAuBA,CAAC,CAAC,CAAD,CAAxB,EAA6B9sE,CAAC,CAAC,CAAD,CAA9B,EAAmCA,CAAC,CAAC,CAAD,CAApC,CADZ;AAAA,QAEMulQ,KAAK,GAAG9rJ,KAAK,IAAI,KAAKqmD,OAAL,CAAasxD,QAAb,CAAsB0tD,UAAtB,GAAmCrtF,IAF1D;AAIA,SAAO,+BAAU8zE,KAAV,EAAiB3zD,GAAjB,EAAsB3oM,MAAM,CAAC84L,GAAD,CAA5B,CAAP;AACD;;AAED,SAAS94L,MAAT,CAAgB84L,GAAhB,EAAqB;AACnB,MAAI3vK,CAAC,GAAG,IAAR;;AAEA,MAAI2vK,GAAJ,EAAS;AACP,UAAMqI,KAAK,GAAG,qBAAMrI,GAAG,CAAC2mE,QAAV,CAAd;AAAA,UACM/uJ,KAAK,GAAG,qBAAMooF,GAAG,CAACquI,QAAV,CADd;;AAEAh+S,IAAAA,CAAC,GAAG3d,CAAC,IAAI,CAAC,CAAC21L,KAAK,CAACh9M,MAAP,IAAiBg9M,KAAK,CAACt7L,IAAN,CAAWtd,CAAC,IAAIijB,CAAC,CAACi0P,QAAF,KAAel3Q,CAA/B,CAAlB,MACC,CAACmoH,KAAK,CAACvsH,MAAP,IAAiBusH,KAAK,CAAC7qG,IAAN,CAAWxd,CAAC,IAAImjB,CAAC,CAACplB,IAAF,KAAWiC,CAA3B,CADlB,CAAT;AAED;;AAED,SAAO8gC,CAAP;AACD;;;;;;;;;;ACxBD;;AAMA;;AAIA;;AAMA;;AAgBA;;AAYA;;AAmCA;;AAIA;;AAOA;;AAKA;;AAMA;;AAEA;;AAYA;;AAMA;;AAEA;;AAEA;;AAMA;;AAEA;;AAEA;;AAKA;;AAUA;;AAEA;;AAKA;;AAKA;;AAMA;;AAIA;;AAIA;;;;AAMA;AACO,MAAMi+S,eAAe,GAAG;AAC7Bv8U,EAAAA,MAAM,GAAG;AAAE,WAAO,6BAAP;AAAkB,GADA;;AACE;AAC/B8jO,EAAAA,gBAAgB,EAAhBA,gCAF6B;AAG7BW,EAAAA,mBAAmB,EAAnBA,mCAH6B;AAI7BQ,EAAAA,iBAAiB,EAAjBA,iCAJ6B;AAK7BpB,EAAAA,aAAa,EAAbA,6BAL6B;AAM7BW,EAAAA,gBAAgB,EAAhBA,gCAN6B;AAO7BQ,EAAAA,cAAc,EAAdA,8BAP6B;AAQ7BhB,EAAAA,cAAc,EAAdA,8BAR6B;AAS7BU,EAAAA,iBAAiB,EAAjBA,iCAT6B;AAU7BQ,EAAAA,eAAe,EAAfA,+BAV6B;AAW7BxB,EAAAA,YAAY,EAAZA,4BAX6B;AAY7Ba,EAAAA,eAAe,EAAfA,+BAZ6B;AAa7BQ,EAAAA,aAAa,EAAbA,6BAb6B;AAc7B1jO,EAAAA,OAAO,EAAPA,iBAd6B;AAe7BkE,EAAAA,SAAS,EAATA,mBAf6B;AAgB7BquM,EAAAA,MAAM,EAANA,gBAhB6B;;AAiB7B4oI,EAAAA,SAAS,CAAC77T,CAAD,EAAI;AAAE,WAAOA,CAAC,KAAKuuG,SAAb;AAAyB,GAjBX;;AAkB7B1pH,EAAAA,QAAQ,EAARA,kBAlB6B;AAmB7BwtM,EAAAA,QAAQ,EAARA,kBAnB6B;AAoB7Ba,EAAAA,QAAQ,EAARA,kBApB6B;AAqB7BxuM,EAAAA,QAAQ,EAARA,kBArB6B;AAsB7Bo0N,EAAAA,OAAO,EAAPA,qBAtB6B;;AAuB7BnhJ,EAAAA,OAAO,CAAC33D,CAAD,EAAI;AAAE,WAAOA,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAKA,CAA1B;AAA8B,GAvBd;;AAwB7BszL,EAAAA,SAAS,EAATA,mBAxB6B;AAyB7BC,EAAAA,MAAM,EAANA,gBAzB6B;AA0B7BxE,EAAAA,QAAQ,EAARA,kBA1B6B;AA2B7B/lM,EAAAA,QAAQ,EAARA,kBA3B6B;AA4B7B0/C,EAAAA,KAAK,EAALA,eA5B6B;AA6B7ByqJ,EAAAA,IAAI,EAAJA,cA7B6B;AA8B7BE,EAAAA,KAAK,EAALA,cA9B6B;AA+B7BjoM,EAAAA,GAAG,EAAHA,aA/B6B;AAgC7BknM,EAAAA,IAAI,EAAJA,cAhC6B;AAiC7BrC,EAAAA,IAAI,EAAJA,cAjC6B;AAkC7B+C,EAAAA,OAAO,EAAPA,iBAlC6B;AAmC7BS,EAAAA,QAAQ,EAARA,kBAnC6B;AAoC7Bs7C,EAAAA,GAAG,EAAHA,YApC6B;AAqC7BmC,EAAAA,GAAG,EAAHA,YArC6B;AAsC7BK,EAAAA,GAAG,EAAHA,YAtC6B;AAuC7BtB,EAAAA,GAAG,EAAHA,YAvC6B;AAwC7B6pF,EAAAA,SAAS,EAATA,oBAxC6B;AAyC7BC,EAAAA,QAAQ,EAARA,mBAzC6B;AA0C7Bz6I,EAAAA,QAAQ,EAARA,cA1C6B;AA2C7B1jF,EAAAA,MAAM,EAANA,cA3C6B;AA4C7B25G,EAAAA,SAAS,EAATA,iBA5C6B;AA6C7BC,EAAAA,QAAQ,EAARA,gBA7C6B;AA8C7BpI,EAAAA,SAAS,EAATA,mBA9C6B;AA+C7BE,EAAAA,WAAW,EAAXA,qBA/C6B;AAgD7B4I,EAAAA,UAAU,EAAVA,kBAhD6B;AAiD7BC,EAAAA,SAAS,EAATA,iBAjD6B;AAkD7BhJ,EAAAA,UAAU,EAAVA,oBAlD6B;AAmD7BE,EAAAA,YAAY,EAAZA,sBAnD6B;AAoD7BhD,EAAAA,iBAAiB,EAAjBA,2BApD6B;AAqD7BytH,EAAAA,WAAW,EAAXA,mBArD6B;AAsD7BC,EAAAA,iBAAiB,EAAjBA,yBAtD6B;AAuD7BC,EAAAA,SAAS,EAATA,iBAvD6B;AAwD7BC,EAAAA,eAAe,EAAfA,uBAxD6B;AAyD7BvoI,EAAAA,OAAO,EAAPA,iBAzD6B;AA0D7BG,EAAAA,UAAU,EAAVA,oBA1D6B;AA2D7B8a,EAAAA,IAAI,EAAJA,cA3D6B;AA4D7BU,EAAAA,OAAO,EAAPA,iBA5D6B;AA6D7BZ,EAAAA,SAAS,EAATA,mBA7D6B;AA8D7BU,EAAAA,YAAY,EAAZA,sBA9D6B;AA+D7B1vN,EAAAA,IAAI,EAAJA,SA/D6B;AAgE7BqhB,EAAAA,IAAI,EAAJA,SAhE6B;AAiE7BqP,EAAAA,KAAK,EAALA,UAjE6B;AAkE7BumL,EAAAA,MAAM,EAANA,gBAlE6B;AAmE7BinI,EAAAA,OAAO,EAAPA,gBAnE6B;AAoE7B7gG,EAAAA,SAAS,EAATA,kBApE6B;AAqE7BtmC,EAAAA,UAAU,EAAVA,oBArE6B;AAsE7BmoI,EAAAA,aAAa,EAAbA,oBAtE6B;AAuE7BE,EAAAA,UAAU,EAAVA,iBAvE6B;AAwE7BniR,EAAAA,MAAM,EAANA,cAxE6B;AAyE7B8iR,EAAAA,aAAa,EAAbA,qBAzE6B;AA0E7BlnS,EAAAA,UAAU,EAAVA,kBA1E6B;AA2E7BwmS,EAAAA,SAAS,EAATA,gBA3E6B;AA4E7BpD,EAAAA,OAAO,EAAPA,aA5E6B;AA6E7BuD,EAAAA,SAAS,EAATA,gBA7E6B;AA8E7BnsI,EAAAA,SAAS,EAATA,mBA9E6B;AA+E7BE,EAAAA,MAAM,EAANA,gBA/E6B;AAgF7BC,EAAAA,MAAM,EAANA,gBAhF6B;AAiF7BC,EAAAA,SAAS,EAATA,mBAjF6B;AAkF7BI,EAAAA,UAAU,EAAVA,oBAlF6B;AAmF7BC,EAAAA,OAAO,EAAPA,iBAnF6B;AAoF7BC,EAAAA,OAAO,EAAPA,iBApF6B;AAqF7BC,EAAAA,UAAU,EAAVA,oBArF6B;AAsF7B5oM,EAAAA,MAAM,EAANA,eAtF6B;AAuF7B8yN,EAAAA,MAAM,EAANA;AAvF6B,CAAxB;;AA0FP,MAAMmiH,cAAc,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,GAAhC,EAAqC,GAArC,CAAvB;AAAA,MAAkE;AAC5DC,WAAW,GAAG,aADpB;AAAA,MACmC;AAC7BC,UAAU,GAAG,OAFnB;AAAA,MAE4B;AACtBC,WAAW,GAAG,EAHpB,EAGwB;AAExB;;AACO,MAAMC,aAAa,GAAG;AAC3BuG,EAAAA,SAAS,EAAG,CAAC,GAAD,CADe;AAE3BD,EAAAA,SAAS,EAAG,CAAC,OAAD,EAAU,OAAV,EAAmB,MAAnB,CAFe;AAG3BvN,EAAAA,QAAQ,EAAI,OAHe;AAI3BD,EAAAA,SAAS,EAAG1oU,EAAE,IAAK,KAAI,2BAAY6rU,0BAAe7rU,EAA3B,CAA+B,GAJ3B;AAK3ByoU,EAAAA,SAAS,EAAGoH,cALe;AAM3B/+K,EAAAA,SAAS,EAAGA,yBANe;AAO3By7K,EAAAA,QAAQ,EAAIoD;AAPe,CAAtB,EAUP;;;AACO,MAAMG,aAAa,GAAG,6BAAQF,aAAR,CAAtB,EAEP;;;;AACA,SAASC,cAAT,CAAwBvI,OAAxB,EAAiC;AAC/B,QAAMt2T,EAAE,GAAG,+BAAUs2T,OAAV,CAAX;AACAkI,EAAAA,cAAc,CAAC3+U,OAAf,CAAuBvC,IAAI,IAAI0iB,EAAE,CAAC1iB,IAAD,CAAF,GAAWmhV,WAAW,GAAGnhV,IAAxD;;AACA,OAAK,MAAMA,IAAX,IAAmBghV,eAAnB,EAAoC;AAAEt+T,IAAAA,EAAE,CAAC1iB,IAAD,CAAF,GAAWohV,UAAU,GAAGphV,IAAxB;AAA+B;;AACrE,wBAAO0iB,EAAP,EAAW,oCAAuBs2T,OAAvB,EAAgCgI,eAAhC,EAAiDK,WAAjD,CAAX;AACA,SAAO3+T,EAAP;AACD,EAED;;;AACO,SAAS++T,kBAAT,CAA4BzhV,IAA5B,EAAkC0iB,EAAlC,EAAsC20L,OAAtC,EAA+C;AACpD,MAAI74M,SAAS,CAACT,MAAV,KAAqB,CAAzB,EAA4B;AAC1B,WAAOijV,eAAe,CAAChhV,IAAD,CAAtB;AACD,GAHmD,CAKpD;;;AACAghV,EAAAA,eAAe,CAAChhV,IAAD,CAAf,GAAwB0iB,EAAxB,CANoD,CAQpD;;AACA,MAAI20L,OAAJ,EAAagqI,WAAW,CAACrhV,IAAD,CAAX,GAAoBq3M,OAApB,CATuC,CAWpD;AACA;;AACA,MAAImqI,aAAJ,EAAmBA,aAAa,CAACrH,SAAd,CAAwBn6U,IAAxB,IAAgCohV,UAAU,GAAGphV,IAA7C;AACnB,SAAO,IAAP;AACD,EAED;;;AACAyhV,kBAAkB,CAAC,WAAD,EAAc14G,gBAAd,EAAyB20G,sBAAzB,CAAlB;AACA+D,kBAAkB,CAAC,MAAD,EAASluQ,WAAT,EAAemqQ,sBAAf,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAW5tI,aAAX,EAAmB6pI,sBAAnB,CAAlB;AACA+D,kBAAkB,CAAC,OAAD,EAAUxhT,YAAV,EAAiBy9S,sBAAjB,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAWtlF,aAAX,EAAmBuhF,sBAAnB,CAAlB;AACA+D,kBAAkB,CAAC,OAAD,EAAUntU,YAAV,EAAiBopU,sBAAjB,CAAlB;AACA+D,kBAAkB,CAAC,UAAD,EAAatB,sBAAb,EAA4BzC,sBAA5B,CAAlB;AACA+D,kBAAkB,CAAC,SAAD,EAAYhD,YAAZ,EAAqBf,sBAArB,CAAlB;AACA+D,kBAAkB,CAAC,WAAD,EAAc9C,cAAd,EAAyBjB,sBAAzB,CAAlB;AACA+D,kBAAkB,CAAC,aAAD,EAAgB5C,gBAAhB,EAA6BnB,sBAA7B,CAAlB;AACA+D,kBAAkB,CAAC,UAAD,EAAarB,eAAb,EAAuB1C,sBAAvB,CAAlB;AACA+D,kBAAkB,CAAC,QAAD,EAAW5E,YAAX,EAAmBY,uBAAnB,CAAlB;AACAgE,kBAAkB,CAAC,MAAD,EAASh0U,UAAT,EAAe+vU,qBAAf,CAAlB;AACAiE,kBAAkB,CAAC,UAAD,EAAalB,cAAb,EAAuB/C,qBAAvB,CAAlB;AACAiE,kBAAkB,CAAC,eAAD,EAAkBjB,mBAAlB,EAAiChD,qBAAjC,CAAlB,EAEA;;AACAiE,kBAAkB,CAAC,iBAAD,EAAoBjG,6BAApB,EAAmCc,gCAAnC,CAAlB;AACAmF,kBAAkB,CAAC,oBAAD,EAAuB9F,gCAAvB,EAAyCW,gCAAzC,CAAlB;;;;;;;;;AClVA;;AACA;;AACA;;AACA;;AAEe,kBAASn3U,IAAT,EAAeo3U,KAAf,EAAsB;AACnC,QAAMz6U,MAAM,GAAG,EAAf,CADmC,CAGnC;;AACA,MAAI24U,GAAJ;;AACA,MAAI;AACFt1U,IAAAA,IAAI,GAAG,wBAASA,IAAT,IAAiBA,IAAjB,GAAyB,2BAAYA,IAAZ,IAAoB,EAApD;AACAs1U,IAAAA,GAAG,GAAG,2BAAMt1U,IAAN,CAAN;AACD,GAHD,CAGE,OAAO0c,GAAP,EAAY;AACZ,yBAAM,6BAA6B1c,IAAnC;AACD,GAVkC,CAYnC;;;AACAs1U,EAAAA,GAAG,CAACh3G,KAAJ,CAAUj6M,IAAI,IAAI;AAChB,QAAIA,IAAI,CAAC9K,IAAL,KAAcmyT,8BAAlB,EAAkC;AAClC,UAAM7wU,IAAI,GAAGwpB,IAAI,CAAC4nT,MAAL,CAAYpxU,IAAzB;AAAA,UACMyjO,KAAK,GAAG69G,uBAAcrD,QAAd,CAAuBj+U,IAAvB,CADd;AAEA,QAAIyjO,KAAJ,EAAWA,KAAK,CAACzjO,IAAD,EAAOwpB,IAAI,CAAChrB,SAAZ,EAAuB+9U,KAAvB,EAA8Bz6U,MAA9B,CAAL;AACZ,GALD,EAbmC,CAoBnC;;AACA,QAAMq0L,GAAG,GAAG,4BAAcskJ,GAAd,CAAZ,CArBmC,CAuBnC;;AACAtkJ,EAAAA,GAAG,CAACokJ,OAAJ,CAAYh4U,OAAZ,CAAoBvC,IAAI,IAAI;AAC1B,UAAM0hV,UAAU,GAAGnE,0BAAev9U,IAAlC;;AACA,QAAI,CAAC,8BAAe8B,MAAf,EAAuB4/U,UAAvB,CAAD,IAAuCnF,KAAK,CAACoF,SAAN,CAAgB3hV,IAAhB,CAA3C,EAAkE;AAChE8B,MAAAA,MAAM,CAAC4/U,UAAD,CAAN,GAAqBnF,KAAK,CAACqF,SAAN,CAAgB5hV,IAAhB,CAArB;AACD;AACF,GALD,EAxBmC,CA+BnC;;AACA,SAAO;AACL6hV,IAAAA,KAAK,EAAI,sBAAO;AAAC/+C,MAAAA,IAAI,EAAE3sG,GAAG,CAAC2sG;AAAX,KAAP,EAAyBy5C,KAAK,CAACnnQ,OAAN,CAAcqlQ,GAAd,GAAoB;AAACA,MAAAA;AAAD,KAApB,GAA4B,IAArD,CADJ;AAELqH,IAAAA,OAAO,EAAE3rJ,GAAG,CAAC55I,MAFR;AAGLwlS,IAAAA,OAAO,EAAEjgV;AAHJ,GAAP;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CD;;AAMA;;AAIA;;AAYA;;AAMA;;AAIA;;AAMA;;AAKA;;AAIA;;AAIA;;AAKA;;AAUA;;AAIA;;AAKA;;AAKA;;AAMA;;AAOA;;AAOA;;AAIA;;;;;;;;;;;ACxGA;;AAEe,kBAASo2G,IAAT,EAAe;AAC5B,SAAO,wBAASA,IAAT,IAAiBA,IAAjB,GAAwB;AAACx5F,IAAAA,IAAI,EAAEw5F,IAAI,IAAI;AAAf,GAA/B;AACD;;;;;;;;;ACJD;;AAEA,MAAMuiG,MAAM,GAAGr1L,CAAC,IAAI,CAACA,CAAD,IAAM,CAA1B;;AAEA,MAAM8qT,aAAa,GAAG9qT,CAAC,KAAK;AAACssB,EAAAA,GAAG,EAAEtsB,CAAN;AAASusB,EAAAA,MAAM,EAAEvsB,CAAjB;AAAoBwsB,EAAAA,IAAI,EAAExsB,CAA1B;AAA6BysB,EAAAA,KAAK,EAAEzsB;AAApC,CAAL,CAAvB;;AAEe,kBAAS8yF,IAAT,EAAe;AAC5B,SAAO,CAAC,wBAASA,IAAT,CAAD,GAAkBg4N,aAAa,CAACz1H,MAAM,CAACviG,IAAD,CAAP,CAA/B,GACHA,IAAI,CAACzmB,MAAL,GAAcymB,IAAd,GACA;AACExmE,IAAAA,GAAG,EAAK+oK,MAAM,CAACviG,IAAI,CAACxmE,GAAN,CADhB;AAEEC,IAAAA,MAAM,EAAE8oK,MAAM,CAACviG,IAAI,CAACvmE,MAAN,CAFhB;AAGEC,IAAAA,IAAI,EAAI6oK,MAAM,CAACviG,IAAI,CAACtmE,IAAN,CAHhB;AAIEC,IAAAA,KAAK,EAAG4oK,MAAM,CAACviG,IAAI,CAACrmE,KAAN;AAJhB,GAFJ;AAQD;;;;;;;;;;;;;ACfD;;AAEO,MAAMi2S,OAAO,GAAG1iU,CAAC,IAAI,wBAASA,CAAT,KAAe,CAAC,uBAAQA,CAAR,CAAhB,GACxB,sBAAO,EAAP,EAAWA,CAAX,CADwB,GAExB;AAAC3jB,EAAAA,KAAK,EAAE2jB;AAAR,CAFG;;;;AAIA,SAAS2iU,SAAT,CAAmBjiJ,MAAnB,EAA2B9lM,IAA3B,EAAiCyB,KAAjC,EAAwCL,GAAxC,EAA6C;AAClD,MAAIK,KAAK,IAAI,IAAb,EAAmB;AACjB,UAAMumV,SAAS,GACZ,wBAASvmV,KAAT,KAAmB,CAAC,uBAAQA,KAAR,CAArB,IACC,uBAAQA,KAAR,KAAkBA,KAAK,CAAC1D,MAAxB,IAAkC,wBAAS0D,KAAK,CAAC,CAAD,CAAd,CAFrC,CADiB,CAMjB;;AACA,QAAIumV,SAAJ,EAAe;AACbliJ,MAAAA,MAAM,CAACn4G,MAAP,CAAc3tF,IAAd,IAAsByB,KAAtB;AACD,KAFD,MAEO;AACLqkM,MAAAA,MAAM,CAAC1kM,GAAG,IAAI,OAAR,CAAN,CAAuBpB,IAAvB,IAA+B;AAACyB,QAAAA,KAAK,EAAEA;AAAR,OAA/B;AACD;;AACD,WAAO,CAAP;AACD,GAbD,MAaO;AACL,WAAO,CAAP;AACD;AACF;;AAEM,SAASwmV,WAAT,CAAqBniJ,MAArB,EAA6B0vF,KAA7B,EAAoC7nM,MAApC,EAA4C;AACjD,OAAK,MAAM3tF,IAAX,IAAmBw1R,KAAnB,EAA0B;AACxBuyD,IAAAA,SAAS,CAACjiJ,MAAD,EAAS9lM,IAAT,EAAew1R,KAAK,CAACx1R,IAAD,CAApB,CAAT;AACD;;AACD,OAAK,MAAMA,IAAX,IAAmB2tF,MAAnB,EAA2B;AACzBo6P,IAAAA,SAAS,CAACjiJ,MAAD,EAAS9lM,IAAT,EAAe2tF,MAAM,CAAC3tF,IAAD,CAArB,EAA6B,QAA7B,CAAT;AACD;AACF;;AAEM,SAASkoV,YAAT,CAAsBj8U,MAAtB,EAA8B+9Q,KAA9B,EAAqCr+F,IAArC,EAA2C;AAChD,OAAK,MAAM3rL,IAAX,IAAmBgqR,KAAnB,EAA0B;AACxB,QAAIr+F,IAAI,IAAI,8BAAeA,IAAf,EAAqB3rL,IAArB,CAAZ,EAAwC;AACxCiM,IAAAA,MAAM,CAACjM,IAAD,CAAN,GAAe,sBAAOiM,MAAM,CAACjM,IAAD,CAAN,IAAgB,EAAvB,EAA2BgqR,KAAK,CAAChqR,IAAD,CAAhC,CAAf;AACD;;AACD,SAAOiM,MAAP;AACD;;AAEM,SAASlI,GAAT,CAAarB,GAAb,EAAkBuJ,MAAlB,EAA0B;AAC/B,SAAOA,MAAM,KACVA,MAAM,CAACupR,KAAP,IAAgBvpR,MAAM,CAACupR,KAAP,CAAa9yR,GAAb,CAAjB,IACCuJ,MAAM,CAAC0hF,MAAP,IAAiB1hF,MAAM,CAAC0hF,MAAP,CAAcjrF,GAAd,CAFP,CAAb;AAID;;;;;;;;AC/CM,MAAMylV,QAAQ,GAAG,MAAjB;;AACA,MAAMv6D,SAAS,GAAG,OAAlB;;AACA,MAAMC,SAAS,GAAG,OAAlB;;AAEA,MAAMH,QAAQ,GAAG,MAAjB;;AACA,MAAM06D,cAAc,GAAG,aAAvB;;AACA,MAAMC,YAAY,GAAG,WAArB;;AACA,MAAMC,aAAa,GAAG,YAAtB;;AACA,MAAMC,YAAY,GAAG,WAArB;;AACA,MAAMC,aAAa,GAAG,YAAtB;;AAEA,MAAM16D,UAAU,GAAG,QAAnB;;AACA,MAAM26D,cAAc,GAAG,aAAvB;;AACA,MAAMC,eAAe,GAAG,cAAxB;;AACA,MAAMC,kBAAkB,GAAG,iBAA3B;;AACA,MAAMC,eAAe,GAAG,cAAxB;;AACA,MAAMC,gBAAgB,GAAG,eAAzB;;AACA,MAAMC,eAAe,GAAG,cAAxB;;AAEA,MAAMn7D,SAAS,GAAG,OAAlB;;AACA,MAAMo7D,aAAa,GAAG,YAAtB;;AACA,MAAMC,iBAAiB,GAAG,gBAA1B;;;;;;;;;;ACrBP;;AACA;;AACA;;AAEe,kBAAS/8U,MAAT,EAAiByS,IAAjB,EAAuB2/P,IAAvB,EAA6B6G,KAA7B,EAAoCrhR,MAApC,EAA4C;AACzD,QAAMmqU,QAAQ,GAAG,EAAjB;AAAA,QAAqBx4C,KAAK,GAAG,EAA7B;AACA,MAAI7nM,MAAJ,EAAYjrF,GAAZ,EAAiBipL,IAAjB,EAAuBg8F,KAAvB,CAFyD,CAIzD;;AACAjlR,EAAAA,GAAG,GAAG,WAAN;;AACA,MAAIgc,IAAI,KAAK,MAAT,IAAmB7a,MAAM,CAACnB,GAAD,CAAN,IAAe,IAAlC,IAA0C,CAAC,eAAIA,GAAJ,EAASuJ,MAAT,CAA/C,EAAiE;AAC/Dg9U,IAAAA,YAAY,CAACjb,QAAD,EAAWtrU,GAAX,EAAgBmB,MAAM,CAACnB,GAAD,CAAtB,CAAZ;AACD,GARwD,CAUzD;;;AACA,MAAI27Q,IAAI,IAAI,QAAR,IAAoBt0Q,MAAM,CAACs0Q,IAAD,CAAN,CAAap/J,UAAb,CAAwB,MAAxB,CAAxB,EAAyD;AACvDo/J,IAAAA,IAAI,GAAG,IAAP;AACD,GAbwD,CAezD;;;AACAsJ,EAAAA,KAAK,GAAGtJ,IAAI,KAAKuP,gBAAT,GAAqB/pR,MAAM,CAACumH,KAA5B,GACHi0J,IAAI,KAAK8pE,eAAV,GAAsB,sBAAO,EAAP,EAAWtkV,MAAM,CAAC8sQ,IAAlB,EAAwB9sQ,MAAM,CAAC6a,IAAD,CAA9B,CAAtB,GACA,IAFJ;;AAIA,OAAKhc,GAAL,IAAYilR,KAAZ,EAAmB;AACjB;AACAh8F,IAAAA,IAAI,GAAG,eAAIjpL,GAAJ,EAASuJ,MAAT,KACF,CAACvJ,GAAG,KAAK,MAAR,IAAkBA,GAAG,KAAK,QAA3B,MACC,eAAI,MAAJ,EAAYuJ,MAAZ,KAAuB,eAAI,QAAJ,EAAcA,MAAd,CADxB,CADL;AAIA,QAAI,CAAC0/K,IAAL,EAAWs9J,YAAY,CAACjb,QAAD,EAAWtrU,GAAX,EAAgBilR,KAAK,CAACjlR,GAAD,CAArB,CAAZ;AACZ,GA3BwD,CA6BzD;;;AACA,uBAAMwiR,KAAN,EAAa3iR,OAAb,CAAqBvC,IAAI,IAAI;AAC3B,UAAM2nR,KAAK,GAAG9jR,MAAM,CAACqhR,KAAP,IAAgBrhR,MAAM,CAACqhR,KAAP,CAAallR,IAAb,CAA9B;;AACA,SAAK,MAAM0C,GAAX,IAAkBilR,KAAlB,EAAyB;AACvB,UAAI,CAAC,eAAIjlR,GAAJ,EAASuJ,MAAT,CAAL,EAAuB;AACrBg9U,QAAAA,YAAY,CAACjb,QAAD,EAAWtrU,GAAX,EAAgBilR,KAAK,CAACjlR,GAAD,CAArB,CAAZ;AACD;AACF;AACF,GAPD;AASAuJ,EAAAA,MAAM,GAAG,sBAAO,EAAP,EAAWA,MAAX,CAAT,CAvCyD,CAuC5B;;AAC7B,OAAKvJ,GAAL,IAAYsrU,QAAZ,EAAsB;AACpBrmD,IAAAA,KAAK,GAAGqmD,QAAQ,CAACtrU,GAAD,CAAhB;;AACA,QAAIilR,KAAK,CAACl2L,MAAV,EAAkB;AAChB,OAAC9D,MAAM,GAAGA,MAAM,IAAI,EAApB,EAAwBjrF,GAAxB,IAA+BilR,KAA/B;AACD,KAFD,MAEO;AACL6N,MAAAA,KAAK,CAAC9yR,GAAD,CAAL,GAAailR,KAAb;AACD;AACF;;AAED17Q,EAAAA,MAAM,CAACupR,KAAP,GAAe,sBAAOA,KAAP,EAAcvpR,MAAM,CAACupR,KAArB,CAAf;AACA,MAAI7nM,MAAJ,EAAY1hF,MAAM,CAAC0hF,MAAP,GAAgB,sBAAOA,MAAP,EAAe1hF,MAAM,CAAC0hF,MAAtB,CAAhB;AAEZ,SAAO1hF,MAAP;AACD;;AAED,SAASg9U,YAAT,CAAsBjb,QAAtB,EAAgCtrU,GAAhC,EAAqCjB,KAArC,EAA4C;AAC1CusU,EAAAA,QAAQ,CAACtrU,GAAD,CAAR,GAAgBjB,KAAK,IAAIA,KAAK,CAACgwF,MAAf,GACZ;AAACA,IAAAA,MAAM,EAAEhwF,KAAK,CAACgwF;AAAf,GADY,GAEZ;AAAChwF,IAAAA,KAAK,EAAEA;AAAR,GAFJ;AAGD;;;;;;;;;AC/DD;;AAEA,MAAMo8U,QAAQ,GAAGvpU,KAAK,IAAI,wBAASA,KAAT,IAAkB,2BAAYA,KAAZ,CAAlB,GACtBA,KAAK,CAACm9E,MAAN,GAAgB,IAAGn9E,KAAK,CAACm9E,MAAO,GAAhC,GACAwiC,KAAK,CAAC3/G,KAAD,CAFT;;AAIe,SAASq1G,KAAT,CAAe06N,GAAf,EAAoB;AACjC,MAAIA,GAAG,CAACp8T,QAAJ,IAAgB,IAApB,EAA0B;AACxB,WAAOA,QAAQ,CAACo8T,GAAD,CAAf;AACD;;AAED,MAAI5iV,KAAK,GAAG4iV,GAAG,CAAC5yP,MAAJ,GAAc,IAAG4yP,GAAG,CAAC5yP,MAAO,GAA5B,GACR4yP,GAAG,CAACpwF,KAAJ,GAAYA,KAAK,CAACowF,GAAG,CAACpwF,KAAL,CAAjB,GACAowF,GAAG,CAACpwN,KAAJ,IAAa,IAAb,GAAoBA,KAAK,CAACowN,GAAG,CAACpwN,KAAL,CAAzB,GACAowN,GAAG,CAAC5iV,KAAJ,KAAckyH,SAAd,GAA0B,2BAAY0wN,GAAG,CAAC5iV,KAAhB,CAA1B,GACAkyH,SAJJ;;AAMA,MAAI0wN,GAAG,CAAC/vU,KAAJ,IAAa,IAAjB,EAAuB;AACrB7S,IAAAA,KAAK,GAAG6S,KAAK,CAAC+vU,GAAD,EAAM5iV,KAAN,CAAb;AACD;;AAED,MAAIA,KAAK,KAAKkyH,SAAd,EAAyB;AACvBlyH,IAAAA,KAAK,GAAG,IAAR;AACD;;AAED,MAAI4iV,GAAG,CAAC1vS,QAAJ,IAAgB,IAApB,EAA0B;AACxBlzC,IAAAA,KAAK,GAAI,OAAMA,KAAM,IAAGu0M,QAAQ,CAACquI,GAAG,CAAC1vS,QAAL,CAAe,GAA/C;AACD;;AAED,MAAI0vS,GAAG,CAAChxD,IAAJ,IAAY,IAAhB,EAAsB;AACpB5xR,IAAAA,KAAK,IAAK,IAAGu0M,QAAQ,CAACquI,GAAG,CAAChxD,IAAL,CAAW,EAAhC;AACD;;AAED,MAAIgxD,GAAG,CAACj5U,MAAJ,IAAc,IAAlB,EAAwB;AACtB3J,IAAAA,KAAK,IAAK,IAAGu0M,QAAQ,CAACquI,GAAG,CAACj5U,MAAL,CAAa,EAAlC;AACD;;AAED,MAAIi5U,GAAG,CAACv5U,KAAR,EAAe;AACbrJ,IAAAA,KAAK,GAAI,SAAQA,KAAM,GAAvB;AACD;;AAED,SAAOA,KAAP;AACD;;AAED,MAAMynV,MAAM,GAAG,CAACxqU,IAAD,EAAO9Z,CAAP,EAAUue,CAAV,EAAa+wD,CAAb,KACZ,IAAGx1D,IAAK,IAAG,CAAC9Z,CAAD,EAAIue,CAAJ,EAAO+wD,CAAP,EAAUhsE,GAAV,CAAcyhH,KAAd,EAAqBtnH,IAArB,CAA0B,GAA1B,CAA+B,OAD7C;;AAGA,SAAS4xP,KAAT,CAAeowF,GAAf,EAAoB;AAClB,SAAQA,GAAG,CAACn5U,CAAL,GAAUg+U,MAAM,CAAC,KAAD,EAAQ7E,GAAG,CAACr5R,CAAZ,EAAeq5R,GAAG,CAACn5U,CAAnB,EAAsBm5U,GAAG,CAAC9zU,CAA1B,CAAhB,GACF8zU,GAAG,CAACr5R,CAAJ,IAASq5R,GAAG,CAACpiV,CAAd,GAAmBinV,MAAM,CAAC,KAAD,EAAQ7E,GAAG,CAACr5R,CAAZ,EAAeq5R,GAAG,CAACpiV,CAAnB,EAAsBoiV,GAAG,CAAC9zU,CAA1B,CAAzB,GACC8zU,GAAG,CAAC9zU,CAAJ,IAAS8zU,GAAG,CAAC1+U,CAAd,GAAmBujV,MAAM,CAAC,KAAD,EAAQ7E,GAAG,CAAC9zU,CAAZ,EAAe8zU,GAAG,CAAC1+U,CAAnB,EAAsB0+U,GAAG,CAAC73U,CAA1B,CAAzB,GACC63U,GAAG,CAAC53U,CAAJ,IAAS43U,GAAG,CAACn3S,CAAb,IAAkBm3S,GAAG,CAAC73U,CAAvB,GAA4B08U,MAAM,CAAC,KAAD,EAAQ7E,GAAG,CAAC53U,CAAZ,EAAe43U,GAAG,CAACn3S,CAAnB,EAAsBm3S,GAAG,CAAC73U,CAA1B,CAAlC,GACA,IAJJ;AAKD;;AAED,SAASyb,QAAT,CAAkBo8T,GAAlB,EAAuB;AACrB;AACA,QAAM/lV,IAAI,GAAG,CAAC+lV,GAAG,CAAC95U,KAAL,EAAY85U,GAAG,CAACrkT,IAAhB,EAAsBqkT,GAAG,CAAC7tQ,KAA1B,EACVtuE,GADU,CACNkd,CAAC,IAAIA,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,2BAAYA,CAAZ,CADlB,CAAb,CAFqB,CAKrB;;AACA,SAAO9mB,IAAI,CAACP,MAAL,IAAe,oBAAKO,IAAL,KAAc,IAApC,EAA0CA,IAAI,CAACuqB,GAAL;;AAE1CvqB,EAAAA,IAAI,CAACknC,OAAL,CAAaq4S,QAAQ,CAACwG,GAAG,CAACp8T,QAAL,CAArB;AACA,SAAQ,YAAW3pB,IAAI,CAAC+D,IAAL,CAAU,GAAV,CAAe,GAAlC;AACD;;AAED,SAAS2zM,QAAT,CAAkBA,QAAlB,EAA4B;AAC1B,SAAO,wBAASA,QAAT,IAAqB,MAAMrsF,KAAK,CAACqsF,QAAD,CAAX,GAAwB,GAA7C,GAAmDA,QAA1D;AACD;;AAED,SAAS/hF,KAAT,CAAeoqN,GAAf,EAAoB;AAClB,SAAO8K,YAAY,CAAC,wBAAS9K,GAAT,IAAgBA,GAAhB,GAAsB;AAAC7gH,IAAAA,KAAK,EAAE6gH;AAAR,GAAvB,CAAnB;AACD;;AAED,SAAS8K,YAAT,CAAsB9K,GAAtB,EAA2B;AACzB,MAAIv4I,MAAJ,EAAYlqE,KAAZ,EAAmB3H,KAAnB;;AAEA,MAAIoqN,GAAG,CAAC5sP,MAAR,EAAgB;AACdq0G,IAAAA,MAAM,GAAG,OAAT;AACA7xE,IAAAA,KAAK,GAAGoqN,GAAG,CAAC5sP,MAAZ;AACD,GAHD,MAGO,IAAI4sP,GAAG,CAACj0N,KAAJ,IAAai0N,GAAG,CAACloI,MAArB,EAA6B;AAClCv6E,IAAAA,KAAK,GAAGp3H,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYw5U,GAAG,CAACziN,KAAJ,IAAa,CAAzB,CAAR;AACAkqE,IAAAA,MAAM,GAAG,MAAT;;AAEA,WAAOlqE,KAAK,KAAK,CAAjB,EAAoB;AAClBkqE,MAAAA,MAAM,IAAI,aAAV;AACD;;AAED,QAAIu4I,GAAG,CAACloI,MAAR,EAAgB;AACdliF,MAAAA,KAAK,GAAGoqN,GAAG,CAACloI,MAAZ;AACArQ,MAAAA,MAAM,IAAI,QAAV;AACD,KAHD,MAGO;AACL7xE,MAAAA,KAAK,GAAGoqN,GAAG,CAACj0N,KAAZ;AACD;AACF,GAdM,MAcA,IAAIi0N,GAAG,CAAC7gH,KAAR,EAAe;AACpB13B,IAAAA,MAAM,GAAG,OAAT;AACA7xE,IAAAA,KAAK,GAAGoqN,GAAG,CAAC7gH,KAAZ;AACD,GAHM,MAGA;AACL,yBAAM,8BAA8B,2BAAY6gH,GAAZ,CAApC;AACD;;AAED,MAAI,CAACA,GAAG,CAAC5sP,MAAT,EAAiB;AACfwiC,IAAAA,KAAK,GAAG,wBAASA,KAAT,IACJ,+BAAgBA,KAAhB,EAAuB/rH,GAAvB,CAA2By2M,qBAA3B,EAAwCt8M,IAAxC,CAA6C,IAA7C,CADI,GAEJ8mV,YAAY,CAACl1N,KAAD,CAFhB;AAGD;;AAED,SAAO6xE,MAAM,GAAG,GAAT,GAAe7xE,KAAf,GAAuB,GAA9B;AACD;;AAED,SAAS3/G,KAAT,CAAe+vU,GAAf,EAAoB5iV,KAApB,EAA2B;AACzB,QAAM6S,KAAK,GAAGupU,QAAQ,CAACwG,GAAG,CAAC/vU,KAAL,CAAtB;;AAEA,MAAI+vU,GAAG,CAACpkT,KAAJ,IAAa,IAAjB,EAAuB;AACrB;AACAx+B,IAAAA,KAAK,GAAI,eAAc6S,KAAM,MAAK,CAAC+vU,GAAG,CAACpkT,KAAM,GAA7C;AACD,GAHD,MAGO;AACL;AACA,QAAIx+B,KAAK,KAAKkyH,SAAd,EAAyBlyH,KAAK,GAAI,UAAS6S,KAAM,KAAI7S,KAAM,GAAlC;;AAEzB,QAAI4iV,GAAG,CAACjyG,IAAR,EAAc;AACZ3wO,MAAAA,KAAK,GAAG,CAACA,KAAK,GAAGA,KAAK,GAAG,GAAX,GAAiB,EAAvB,IACH,cAAa6S,KAAM,GADhB,IAEH,CAAC+vU,GAAG,CAACjyG,IAAL,KAAc,CAAd,GAAkB,EAAlB,GAAuB,MAAMp8B,QAAQ,CAACquI,GAAG,CAACjyG,IAAL,CAFlC,CAAR;;AAIA,UAAIiyG,GAAG,CAACr6D,KAAR,EAAe;AACb;AACAvoR,QAAAA,KAAK,GAAI,yBAAwB6S,KAAM,0BAAyB7S,KAAM,GAAtE;AACD;AACF;;AAED,QAAIA,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,GAAR;AACpB;;AAED,SAAOA,KAAP;AACD;;;;;;;;;ACxID;;AACA;;;;AAEe,kBAAS4iV,GAAT,EAAc;AAC3B,MAAIvhD,IAAI,GAAG,EAAX;AAEAuhD,EAAAA,GAAG,CAAC9hV,OAAJ,CAAY04Q,IAAI,IAAI;AAClB,UAAMx5Q,KAAK,GAAG,oBAAMw5Q,IAAN,CAAd;AACA6nB,IAAAA,IAAI,IAAI7nB,IAAI,CAAC7uP,IAAL,GAAa,IAAG6uP,IAAI,CAAC7uP,IAAK,KAAI3qB,KAAM,GAApC,GAAyCA,KAAjD;AACD,GAHD,EAH2B,CAQ3B;;AACA,MAAI,oBAAKqhS,IAAL,MAAe,GAAnB,EAAwB;AACtBA,IAAAA,IAAI,IAAI,MAAR;AACD;;AAED,SAAOA,IAAP;AACD;;;;;;;;;ACjBD;;AACA;;AACA;;AAEA;;AACA;;;;AAEe,kBAAS72R,MAAT,EAAiByS,IAAjB,EAAuB2/P,IAAvB,EAA6B6G,KAA7B,EAAoCq3D,KAApC,EAA2Cz6U,MAA3C,EAAmD;AAChE,QAAMuiV,GAAG,GAAG,EAAZ;AACAviV,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AACAA,EAAAA,MAAM,CAACwzR,QAAP,GAAkB;AAAC8uD,IAAAA,OAAO,EAAEC;AAAV,GAAlB;AAEAp4U,EAAAA,MAAM,GAAG,uBAAcA,MAAd,EAAsByS,IAAtB,EAA4B2/P,IAA5B,EAAkC6G,KAAlC,EAAyCq3D,KAAK,CAAC14U,MAA/C,CAAT;;AACA,OAAK,MAAMnB,GAAX,IAAkBuJ,MAAlB,EAA0B;AACxBo4U,IAAAA,GAAG,CAAC3hV,GAAD,CAAH,GAAW0mV,UAAU,CAACn9U,MAAM,CAACvJ,GAAD,CAAP,EAAcgc,IAAd,EAAoB5c,MAApB,EAA4By6U,KAA5B,CAArB;AACD;;AAED,SAAOz6U,MAAP;AACD;;AAED,SAASsnV,UAAT,CAAoBC,KAApB,EAA2BhwE,QAA3B,EAAqCv3Q,MAArC,EAA6Cy6U,KAA7C,EAAoD;AAClD,QAAMv7R,QAAQ,GAAG,EAAjB;AAAA,QACMzE,MAAM,GAAG,EADf;;AAGA,OAAK,MAAMv8C,IAAX,IAAmBqpV,KAAnB,EAA0B;AACxB,QAAIA,KAAK,CAACrpV,IAAD,CAAL,IAAe,IAAnB,EAAyB;AAAE;AACzBghD,MAAAA,QAAQ,CAAChhD,IAAD,CAAR,GAAiB2gD,KAAK,CAACx7C,IAAI,CAACkkV,KAAK,CAACrpV,IAAD,CAAN,CAAL,EAAoBu8U,KAApB,EAA2Bz6U,MAA3B,EAAmCy6C,MAAnC,CAAtB;AACD;AACF;;AAED,SAAO;AACLslS,IAAAA,KAAK,EAAI;AAACxoE,MAAAA,QAAD;AAAWr4N,MAAAA;AAAX,KADJ;AAEL8gS,IAAAA,OAAO,EAAEtgV,MAAM,CAACof,IAAP,CAAY27B,MAAZ,CAFJ;AAGLoqC,IAAAA,OAAO,EAAEnlF,MAAM,CAACof,IAAP,CAAYyoU,KAAZ;AAHJ,GAAP;AAKD;;AAED,SAASlkV,IAAT,CAAck/U,GAAd,EAAmB;AACjB,SAAO,uBAAQA,GAAR,IAAe,mBAAKA,GAAL,CAAf,GAA2B,oBAAMA,GAAN,CAAlC;AACD;;AAED,SAAS1jS,KAAT,CAAemiP,IAAf,EAAqBy5C,KAArB,EAA4Bz6U,MAA5B,EAAoCy6C,MAApC,EAA4C;AAC1C,QAAMp3C,IAAI,GAAG,oCAAgB29R,IAAhB,EAAsBy5C,KAAtB,CAAb;AACAp3U,EAAAA,IAAI,CAAC28U,OAAL,CAAav/U,OAAb,CAAqBvC,IAAI,IAAIu8C,MAAM,CAACv8C,IAAD,CAAN,GAAe,CAA5C;AACA,wBAAO8B,MAAP,EAAeqD,IAAI,CAAC48U,OAApB;AACA,SAAO58U,IAAI,CAAC08U,KAAZ;AACD;;;;;;;;;AC9CD;;AAEA,MAAMvwI,KAAK,GAAG,OAAd;AAAA,MACMg4I,aAAa,GAAG,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,CADtB;;AAGA,SAASC,UAAT,CAAoB1nO,MAApB,EAA4B7hH,IAA5B,EAAkC;AAChC,uBAAM6hH,MAAM,GAAG,qBAAT,GAAiC,2BAAY7hH,IAAZ,CAAvC;AACD;;AAEc,kBAASyxF,MAAT,EAAiB8qP,KAAjB,EAAwB;AACrC,QAAMv8U,IAAI,GAAGyxF,MAAM,CAACzxF,IAApB;;AAEA,MAAIyxF,MAAM,CAAC/yF,IAAP,KAAgB4yM,KAApB,EAA2B;AACzB;AACA,QAAI,CAACirI,KAAK,CAACjpI,OAAN,CAActzM,IAAd,CAAL,EAA0BupV,UAAU,CAAC,4BAAD,EAA+BvpV,IAA/B,CAAV,CAFD,CAGzB;;AACAspV,IAAAA,aAAa,CAAC/mV,OAAd,CAAsBizE,IAAI,IAAI;AAC5B,UAAIic,MAAM,CAACjc,IAAD,CAAN,KAAiBm+C,SAArB,EAAgC41N,UAAU,CAAC,mBAAD,EAAsB/zQ,IAAtB,CAAV;AACjC,KAFD;AAGD,GAPD,MAOO;AACL;AACA,UAAMp4C,EAAE,GAAGm/S,KAAK,CAACiN,SAAN,CAAgBxpV,IAAhB,EAAsByxF,MAAM,CAAChwF,KAA7B,CAAX;AACA,QAAIgwF,MAAM,CAACsuI,KAAP,KAAiB,KAArB,EAA4B3iM,EAAE,CAAC2iM,KAAH,GAAW,KAAX;AAC5B,QAAItuI,MAAM,CAACq3C,IAAX,EAAiByzM,KAAK,CAACkN,UAAN,CAAiBzpV,IAAjB,EAAuByxF,MAAM,CAACq3C,IAA9B;AAClB;AACF;;;;;;;;;;;;;;;;;;;;;;;ACzBD;;AAEO,SAAS4gN,KAAT,CAAehrU,IAAf,EAAqBjd,KAArB,EAA4BK,MAA5B,EAAoCq0M,MAApC,EAA4C;AACjD,OAAKzkM,EAAL,GAAU,CAAC,CAAX;AACA,OAAKgN,IAAL,GAAYA,IAAZ;AACA,OAAKjd,KAAL,GAAaA,KAAb;AACA,OAAKK,MAAL,GAAcA,MAAd;AACA,MAAIq0M,MAAJ,EAAY,KAAKA,MAAL,GAAcA,MAAd;AACb;;AAEM,SAASxsF,KAAT,CAAejrG,IAAf,EAAqBjd,KAArB,EAA4BK,MAA5B,EAAoCq0M,MAApC,EAA4C;AACjD,SAAO,IAAIuzI,KAAJ,CAAUhrU,IAAV,EAAgBjd,KAAhB,EAAuBK,MAAvB,EAA+Bq0M,MAA/B,CAAP;AACD;;AAEM,SAAShH,QAAT,CAAkB1tM,KAAlB,EAAyBK,MAAzB,EAAiC;AACtC,SAAO6nH,KAAK,CAAC,UAAD,EAAaloH,KAAb,EAAoBK,MAApB,CAAZ;AACD,EAED;;;AAEO,SAASu8U,GAAT,CAAajhT,EAAb,EAAiB;AACtB,QAAMihT,GAAG,GAAG;AAACsF,IAAAA,IAAI,EAAEvmT,EAAE,CAAC1rB;AAAV,GAAZ,CADsB,CAEtB;;AACA,MAAI0rB,EAAE,CAAC1rB,EAAH,GAAQ,CAAZ,EAAe,CAAC0rB,EAAE,CAACusT,IAAH,GAAUvsT,EAAE,CAACusT,IAAH,IAAW,EAAtB,EAA0BjrV,IAA1B,CAA+B2/U,GAA/B;AACf,SAAOA,GAAP;AACD;;AAEM,MAAMuL,UAAU,GAAG;AACxBzF,EAAAA,QAAQ,EAAE,CADc;AAExB/1U,EAAAA,QAAQ,EAAE,YAAW;AAAE,WAAO,aAAP;AAAuB;AAFtB,CAAnB;;;AAKA,SAASy7U,QAAT,CAAkB51N,KAAlB,EAAyBj0H,IAAzB,EAA+B;AACpC,SAAOA,IAAI,GAAG;AAACgkV,IAAAA,MAAM,EAAE/vN,KAAT;AAAgB2vN,IAAAA,KAAK,EAAE5jV;AAAvB,GAAH,GAAkC;AAACgkV,IAAAA,MAAM,EAAE/vN;AAAT,GAA7C;AACD;;AAEM,MAAM61N,WAAW,GAAGD,QAAQ,CAAC,KAAD,CAA5B;;;AAEA,SAASE,UAAT,CAAoBxtS,MAApB,EAA4Bg5J,MAA5B,EAAoC;AACzC,SAAO;AAAC0uI,IAAAA,QAAQ,EAAE1nS,MAAX;AAAmB2nS,IAAAA,MAAM,EAAE3uI;AAA3B,GAAP;AACD;;AAEM,SAASy0I,MAAT,CAAgBztS,MAAhB,EAAwB+5J,IAAxB,EAA8B;AACnC,QAAM+nI,GAAG,GAAG;AAACyF,IAAAA,IAAI,EAAEvnS;AAAP,GAAZ;AACA,MAAI+5J,IAAJ,EAAU+nI,GAAG,CAAC0F,KAAJ,GAAY,IAAZ;AACV,SAAO1F,GAAP;AACD,EAED;;;AAEO,MAAM4L,SAAS,GAAI,WAAnB;;AAEA,MAAMC,UAAU,GAAG,YAAnB;;;AAEA,SAASC,OAAT,CAAiB1hV,IAAjB,EAAuB;AAC5B,SAAO,CAAC,wBAASA,IAAT,CAAD,GAAkB,EAAlB,GACH,CAACA,IAAI,CAACktM,KAAL,KAAeu0I,UAAf,GAA4B,GAA5B,GAAkC,GAAnC,IACEE,SAAS,CAAC3hV,IAAI,CAAC20B,EAAN,EAAU30B,IAAI,CAACwrH,KAAf,CAFf;AAGD;;AAEM,SAASm2N,SAAT,CAAmBhtT,EAAnB,EAAuB62F,KAAvB,EAA8B;AACnC,SAAO,CAAC72F,EAAE,IAAIA,EAAE,CAACq0D,MAAT,GAAkB,MAAMr0D,EAAE,CAACq0D,MAA3B,GAAoCr0D,EAAE,IAAI,EAA3C,KACFA,EAAE,IAAI62F,KAAN,GAAc,GAAd,GAAoB,EADlB,KAEFA,KAAK,IAAIA,KAAK,CAACxiC,MAAf,GAAwB,MAAMwiC,KAAK,CAACxiC,MAApC,GAA6CwiC,KAAK,IAAI,EAFpD,CAAP;AAGD,EAED;;;AAEO,MAAMo2N,KAAK,GAAG,OAAd;;AAEA,MAAMhE,IAAI,GAAG,MAAb;;;AAEA,SAASiE,QAAT,CAAkBllU,CAAlB,EAAqB;AAC1B,SAAOA,CAAC,IAAIA,CAAC,CAACqsE,MAAd;AACD;;AAEM,SAAS84P,MAAT,CAAgBnlU,CAAhB,EAAmB;AACxB,SAAOA,CAAC,IAAIA,CAAC,CAACjgB,IAAd;AACD;;AAEM,SAASqlV,SAAT,CAAmBplU,CAAnB,EAAsB;AAC3B,MAAIklU,QAAQ,CAACllU,CAAD,CAAZ,EAAiB,OAAO,IAAP;AACjB,MAAI,wBAASA,CAAT,CAAJ,EAAiB,KAAK,MAAM1iB,GAAX,IAAkB0iB,CAAlB,EAAqB;AACpC,QAAIolU,SAAS,CAACplU,CAAC,CAAC1iB,GAAD,CAAF,CAAb,EAAuB,OAAO,IAAP;AACxB;AACD,SAAO,KAAP;AACD;;AAEM,SAASjB,KAAT,CAAegpV,SAAf,EAA0B36S,YAA1B,EAAwC;AAC7C,SAAO26S,SAAS,IAAI,IAAb,GAAoBA,SAApB,GAAgC36S,YAAvC;AACD;;AAEM,SAAS46S,KAAT,CAAe/5U,CAAf,EAAkB;AACvB,SAAOA,CAAC,IAAIA,CAAC,CAAC8gF,MAAP,IAAiB9gF,CAAxB;AACD;;;;;;;;;AC9FD;;AACA;;AACA;;AAEA,MAAM8hT,KAAK,GAAG,OAAd;;AAEe,SAAS2vB,WAAT,CAAqB/6J,MAArB,EAA6Bk1J,KAA7B,EAAoC;AACjD,QAAM7sS,MAAM,GAAG23I,MAAM,CAACoxB,KAAP,GAAekyI,WAAf,GACXtjK,MAAM,CAACA,MAAP,GAAgBujK,YAAhB,GACAvjK,MAAM,CAAC3oK,IAAP,GAAcmsU,WAAd,GACA,qBAAM,mCAAmC,2BAAYxjK,MAAZ,CAAzC,CAHJ;AAKA,SAAO33I,MAAM,CAAC23I,MAAD,EAASk1J,KAAT,CAAb;AACD;;AAED,SAASuO,WAAT,CAAqBv2R,MAArB,EAA6B;AAC1B,SAAOA,MAAM,KAAK81R,WAAX,GAAmBhE,UAAnB,GAA2B9xR,MAAM,IAAI8xR,UAA5C;AACF;;AAED,SAASsE,WAAT,CAAqBtjK,MAArB,EAA6Bk1J,KAA7B,EAAoC;AAClC,QAAMz9T,IAAI,GAAGuoK,MAAM,CAACoxB,KAAP,CAAavwM,GAAb,CAAiBjG,CAAC,IAAImgV,WAAW,CAACngV,CAAD,EAAIs6U,KAAJ,CAAjC,CAAb;AAAA,QACM5yN,KAAK,GAAGohO,gBAAgB,CAAC;AAACtyI,IAAAA,KAAK,EAAE35L;AAAR,GAAD,EAAgBuoK,MAAhB,EAAwBk1J,KAAxB,CAD9B;AAEA,SAAOA,KAAK,CAACyO,SAAN,CAAgBrhO,KAAhB,EAAuBj4G,EAA9B;AACD;;AAED,SAASk5U,YAAT,CAAsBvjK,MAAtB,EAA8Bk1J,KAA9B,EAAqC;AACnC,QAAM7qU,EAAE,GAAG0wU,WAAW,CAAC/6J,MAAM,CAACA,MAAR,EAAgBk1J,KAAhB,CAAtB;AAAA,QACM5yN,KAAK,GAAGohO,gBAAgB,CAAC;AAAC1jK,IAAAA,MAAM,EAAE31K;AAAT,GAAD,EAAe21K,MAAf,EAAuBk1J,KAAvB,CAD9B;AAEA,SAAOA,KAAK,CAACyO,SAAN,CAAgBrhO,KAAhB,EAAuBj4G,EAA9B;AACD;;AAED,SAASm5U,WAAT,CAAqBxjK,MAArB,EAA6Bk1J,KAA7B,EAAoC;AAClC,MAAI7qU,EAAJ;;AACA,MAAI21K,MAAM,CAAC3oK,IAAP,KAAgB+zS,KAApB,EAA2B;AACzB/gT,IAAAA,EAAE,GAAG6qU,KAAK,CAAC14N,KAAN,CAAY4uM,KAAZ,EAAmBprI,MAAM,CAACw6C,QAA1B,CAAL;AACAx6C,IAAAA,MAAM,GAAG;AAAC26C,MAAAA,OAAO,EAAE36C,MAAM,CAAC26C,OAAjB;AAA0BpoN,MAAAA,MAAM,EAAEytK,MAAM,CAACztK;AAAzC,KAAT;AACD,GAHD,MAGO;AACLlI,IAAAA,EAAE,GAAG6qU,KAAK,CAAC14N,KAAN,CAAYinO,WAAW,CAACzjK,MAAM,CAAC9yH,MAAR,CAAvB,EAAwC8yH,MAAM,CAAC3oK,IAA/C,CAAL;AACD;;AAED,QAAMirG,KAAK,GAAGohO,gBAAgB,CAAC;AAAC1jK,IAAAA,MAAM,EAAE31K;AAAT,GAAD,EAAe21K,MAAf,EAAuBk1J,KAAvB,CAA9B;AACA,SAAO/6U,MAAM,CAACof,IAAP,CAAY+oG,KAAZ,EAAmB5rH,MAAnB,KAA8B,CAA9B,GACH2T,EADG,GAEH6qU,KAAK,CAACyO,SAAN,CAAgBrhO,KAAhB,EAAuBj4G,EAF3B;AAGD;;AAED,SAASq5U,gBAAT,CAA0BphO,KAA1B,EAAiC09D,MAAjC,EAAyCk1J,KAAzC,EAAgD;AAC9C,MAAI9oS,KAAK,GAAG4zI,MAAM,CAAC26C,OAAnB;;AAEA,MAAIvuL,KAAJ,EAAW;AACT,QAAIA,KAAK,CAAC11C,MAAN,KAAiB,CAArB,EAAwB;AACtB,2BAAM,qDAAqD,2BAAYspL,MAAZ,CAA3D;AACD;;AACD19D,IAAAA,KAAK,CAACq4G,OAAN,GAAgB,CACdogH,WAAW,CAAC3uS,KAAK,CAAC,CAAD,CAAN,EAAW8oS,KAAX,CADG,EAEd6F,WAAW,CAAC3uS,KAAK,CAAC,CAAD,CAAN,EAAW8oS,KAAX,CAFG,CAAhB;AAID;;AAED9oS,EAAAA,KAAK,GAAG4zI,MAAM,CAACztK,MAAP,GAAgB,GAAG5b,MAAH,CAAUqpL,MAAM,CAACztK,MAAjB,CAAhB,GAA2C,EAAnD;;AACA,MAAIytK,MAAM,CAACgyF,QAAP,IAAmBhyF,MAAM,CAAC05J,QAA1B,IAAsC15J,MAAM,CAAC4jK,QAAjD,EAA2D;AACzD;AACAx3S,IAAAA,KAAK,CAAC/0C,IAAN,CAAWwsV,UAAU,CAAC7jK,MAAM,CAACgyF,QAAR,EAAkBhyF,MAAM,CAAC05J,QAAzB,EAAmC15J,MAAM,CAAC4jK,QAA1C,CAArB;AACD;;AACD,MAAI5jK,MAAM,CAAC9yH,MAAP,KAAkB81R,WAAtB,EAA6B;AAC3B;AACA52S,IAAAA,KAAK,CAAC/0C,IAAN,CAAW,qBAAX;AACD;;AACD,MAAI+0C,KAAK,CAAC11C,MAAV,EAAkB;AAChB4rH,IAAAA,KAAK,CAAC/vG,MAAN,GAAe,oCAAgB,MAAM65B,KAAK,CAACpxC,IAAN,CAAW,MAAX,CAAN,GAA2B,GAA3C,EAAgDk6U,KAAhD,EAAuDsF,KAAtE;AACD;;AAED,MAAI,CAACpuS,KAAK,GAAG4zI,MAAM,CAACw6C,QAAhB,KAA6B,IAAjC,EAAuC;AACrCl4G,IAAAA,KAAK,CAACk4G,QAAN,GAAiB,CAACpuL,KAAlB;AACD;;AAED,MAAI,CAACA,KAAK,GAAG4zI,MAAM,CAACxxD,QAAhB,KAA6B,IAAjC,EAAuC;AACrClM,IAAAA,KAAK,CAACkM,QAAN,GAAiB,CAACpiF,KAAlB;AACD;;AAED,MAAI4zI,MAAM,CAACo6C,OAAX,EAAoB;AAClB93G,IAAAA,KAAK,CAAC83G,OAAN,GAAgB,IAAhB;AACD;;AAED,SAAO93G,KAAP;AACD;;AAED,SAASuhO,UAAT,CAAoBxsU,IAApB,EAA0B1e,IAA1B,EAAgCq+Q,IAAhC,EAAsC;AACpC,QAAMh4P,IAAI,GAAG,YAAb;AACA,SAAOA,IAAI,IACN3H,IAAI,IAAIA,IAAI,KAAK,GAAjB,GAAuB,OAAO2H,IAAP,GAAc,qBAAd,GAAsC3H,IAAtC,GAA6C,IAApE,GAA2E,EADrE,CAAJ,IAEF2/P,IAAI,GAAG,OAAOh4P,IAAP,GAAc,iBAAd,GAAkCg4P,IAAlC,GAAyC,IAA5C,GAAmD,EAFrD,KAGFr+Q,IAAI,GAAG,OAAOqmB,IAAP,GAAc,iBAAd,GAAkCrmB,IAAlC,GAAyC,IAA5C,GAAmD,EAHrD,CAAP;AAID;;;;;;;;AC7FD,MAAM0tU,IAAI,GAAG,MAAb;AAAA,MACMyd,MAAM,GAAG,GADf;AAAA,MAEMC,MAAM,GAAG,GAFf;AAAA,MAGMC,MAAM,GAAG,GAHf;AAAA,MAIMC,MAAM,GAAG,GAJf;AAAA,MAKMC,KAAK,GAAG,GALd;AAAA,MAMMC,KAAK,GAAG,GANd;AAAA,MAOMC,IAAI,GAAG,GAPb;AAAA,MAQMC,EAAE,GAAG,GARX;AAAA,MASMlY,OAAO,GAAG,SAThB;AAAA,MAUMmY,aAAa,GAAG;AACpB,OAAK,CADe;AAEpBnsI,EAAAA,GAAG,EAAE,CAFe;AAGpB+B,EAAAA,IAAI,EAAE,CAHc;AAIpBn3F,EAAAA,KAAK,EAAE,CAJa;AAKpB3wG,EAAAA,KAAK,EAAE,CALa;AAMpBuZ,EAAAA,IAAI,EAAE,CANc;AAOpBlmB,EAAAA,IAAI,EAAE,CAPc;AAQpBwwO,EAAAA,IAAI,EAAE,CARc;AASpB29B,EAAAA,IAAI,EAAE,CATc;AAUpBh1Q,EAAAA,KAAK,EAAE,CAVa;AAWpB+hN,EAAAA,MAAM,EAAE,CAXY;AAYpB7wG,EAAAA,IAAI,EAAE,CAZc;AAapBk4J,EAAAA,KAAK,EAAE;AAba,CAVtB;AAyBA,IAAIu8E,cAAJ,EAAoBC,KAApB;AACA;AACA;AACA;AACA;;AAEA,SAASC,aAAT,CAAwBC,QAAxB,EAAkCx3R,MAAlC,EAA0C6iF,KAA1C,EAAiD;AAC/Cw0M,EAAAA,cAAc,GAAGr3R,MAAM,IAAIm5Q,IAA3B;AACAme,EAAAA,KAAK,GAAGz0M,KAAK,IAAIu0M,aAAjB;AACA,SAAOK,UAAU,CAACD,QAAQ,CAACryO,IAAT,EAAD,CAAV,CAA4BxxG,GAA5B,CAAgC+jV,aAAhC,CAAP;AACD;;AAED,SAASC,UAAT,CAAoBxtU,IAApB,EAA0B;AACxB,SAAOmtU,KAAK,CAACntU,IAAD,CAAZ;AACD;;AAED,SAAS2yJ,IAAT,CAAcpvK,CAAd,EAAiBxD,CAAjB,EAAoB0tV,OAApB,EAA6BC,QAA7B,EAAuCC,OAAvC,EAAgD;AAC9C,QAAM1/U,CAAC,GAAG1K,CAAC,CAAClE,MAAZ;AACA,MAAIy4E,KAAK,GAAG,CAAZ;AAAA,MACItrE,CADJ;;AAGA,SAAOzM,CAAC,GAAGkO,CAAX,EAAc,EAAElO,CAAhB,EAAmB;AACjByM,IAAAA,CAAC,GAAGjJ,CAAC,CAACxD,CAAD,CAAL;AACA,QAAI,CAAC+3E,KAAD,IAAUtrE,CAAC,KAAKihV,OAApB,EAA6B,OAAO1tV,CAAP,CAA7B,KAA2C,IAAI4tV,OAAO,IAAIA,OAAO,CAACxwT,OAAR,CAAgB3wB,CAAhB,KAAsB,CAArC,EAAwC,EAAEsrE,KAAF,CAAxC,KAAqD,IAAI41Q,QAAQ,IAAIA,QAAQ,CAACvwT,OAAT,CAAiB3wB,CAAjB,KAAuB,CAAvC,EAA0C,EAAEsrE,KAAF;AAC3I;;AAED,SAAO/3E,CAAP;AACD;;AAED,SAASutV,UAAT,CAAoB/pV,CAApB,EAAuB;AACrB,QAAMkmB,MAAM,GAAG,EAAf;AAAA,QACMxb,CAAC,GAAG1K,CAAC,CAAClE,MADZ;AAEA,MAAIwM,KAAK,GAAG,CAAZ;AAAA,MACI9L,CAAC,GAAG,CADR;;AAGA,SAAOA,CAAC,GAAGkO,CAAX,EAAc;AACZlO,IAAAA,CAAC,GAAG4yK,IAAI,CAACpvK,CAAD,EAAIxD,CAAJ,EAAO+sV,KAAP,EAAcL,MAAM,GAAGE,MAAvB,EAA+BD,MAAM,GAAGE,MAAxC,CAAR;AACAnjU,IAAAA,MAAM,CAACzpB,IAAP,CAAYuD,CAAC,CAACs7B,SAAF,CAAYhzB,KAAZ,EAAmB9L,CAAnB,EAAsBi7G,IAAtB,EAAZ;AACAnvG,IAAAA,KAAK,GAAG,EAAE9L,CAAV;AACD;;AAED,MAAI0pB,MAAM,CAACpqB,MAAP,KAAkB,CAAtB,EAAyB;AACvB,UAAM,2BAA2BkE,CAAjC;AACD;;AAED,SAAOkmB,MAAP;AACD;;AAED,SAAS8jU,aAAT,CAAuBhqV,CAAvB,EAA0B;AACxB,SAAOA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,GAAeqqV,YAAY,CAACrqV,CAAD,CAA3B,GAAiCmgV,WAAW,CAACngV,CAAD,CAAnD;AACD;;AAED,SAASqqV,YAAT,CAAsBrqV,CAAtB,EAAyB;AACvB,QAAM0K,CAAC,GAAG1K,CAAC,CAAClE,MAAZ;AACA,MAAIU,CAAC,GAAG,CAAR;AAAA,MACI+N,CADJ;AAEA/N,EAAAA,CAAC,GAAG4yK,IAAI,CAACpvK,CAAD,EAAIxD,CAAJ,EAAO2sV,MAAP,EAAeD,MAAf,EAAuBC,MAAvB,CAAR;;AAEA,MAAI3sV,CAAC,KAAKkO,CAAV,EAAa;AACX,UAAM,6BAA6B1K,CAAnC;AACD;;AAEDuK,EAAAA,CAAC,GAAGw/U,UAAU,CAAC/pV,CAAC,CAACs7B,SAAF,CAAY,CAAZ,EAAe9+B,CAAf,CAAD,CAAd;;AAEA,MAAI+N,CAAC,CAACzO,MAAF,KAAa,CAAjB,EAAoB;AAClB,UAAM,8CAA8CkE,CAApD;AACD;;AAEDA,EAAAA,CAAC,GAAGA,CAAC,CAAC6F,KAAF,CAAQrJ,CAAC,GAAG,CAAZ,EAAei7G,IAAf,EAAJ;;AAEA,MAAIz3G,CAAC,CAAC,CAAD,CAAD,KAASypV,EAAb,EAAiB;AACf,UAAM,4CAA4CzpV,CAAlD;AACD;;AAEDuK,EAAAA,CAAC,GAAGA,CAAC,CAACtE,GAAF,CAAM+jV,aAAN,CAAJ;AACA,QAAM5kK,MAAM,GAAG4kK,aAAa,CAAChqV,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAW4xG,IAAX,EAAD,CAA5B;;AAEA,MAAI2tE,MAAM,CAAC26C,OAAX,EAAoB;AAClB,WAAO;AACLA,MAAAA,OAAO,EAAEx1N,CADJ;AAEL66K,MAAAA,MAAM,EAAEA;AAFH,KAAP;AAID,GALD,MAKO;AACLA,IAAAA,MAAM,CAAC26C,OAAP,GAAiBx1N,CAAjB;AACD;;AAED,SAAO66K,MAAP;AACD;;AAED,SAAS+6J,WAAT,CAAqBngV,CAArB,EAAwB;AACtB,QAAMolL,MAAM,GAAG;AACb9yH,IAAAA,MAAM,EAAEq3R;AADK,GAAf;AAAA,QAGMr3R,MAAM,GAAG,EAHf;AAIA,MAAIstK,QAAQ,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAf;AAAA,MACIk/G,QAAQ,GAAG,CADf;AAAA,MAEIx2U,KAAK,GAAG,CAFZ;AAAA,MAGIoC,CAAC,GAAG1K,CAAC,CAAClE,MAHV;AAAA,MAIIU,CAAC,GAAG,CAJR;AAAA,MAKIiK,CALJ;AAAA,MAMIkR,MANJ,CALsB,CAWV;;AAEZ,MAAI3X,CAAC,CAAC0K,CAAC,GAAG,CAAL,CAAD,KAAa2+U,MAAjB,EAAyB;AACvB7sV,IAAAA,CAAC,GAAGwD,CAAC,CAACqnH,WAAF,CAAc+hO,MAAd,CAAJ;;AAEA,QAAI5sV,CAAC,IAAI,CAAT,EAAY;AACV,UAAI;AACFojO,QAAAA,QAAQ,GAAG0qH,aAAa,CAACtqV,CAAC,CAACs7B,SAAF,CAAY9+B,CAAC,GAAG,CAAhB,EAAmBkO,CAAC,GAAG,CAAvB,CAAD,CAAxB;AACD,OAFD,CAEE,OAAOxP,CAAP,EAAU;AACV,cAAM,qCAAqC8E,CAA3C;AACD;;AAEDA,MAAAA,CAAC,GAAGA,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAWrJ,CAAX,EAAci7G,IAAd,EAAJ;AACA/sG,MAAAA,CAAC,GAAG1K,CAAC,CAAClE,MAAN;AACD,KATD,MASO,MAAM,4BAA4BkE,CAAlC;;AAEPxD,IAAAA,CAAC,GAAG,CAAJ;AACD;;AAED,MAAI,CAACkO,CAAL,EAAQ,MAAM1K,CAAN,CA9Bc,CA8BL;;AAEjB,MAAIA,CAAC,CAAC,CAAD,CAAD,KAASwpV,IAAb,EAAmB1K,QAAQ,GAAG,EAAEtiV,CAAb,CAhCG,CAgCa;;AAEnCiK,EAAAA,CAAC,GAAG2oK,IAAI,CAACpvK,CAAD,EAAIxD,CAAJ,EAAO8sV,KAAP,CAAR;;AAEA,MAAI7iV,CAAC,GAAGiE,CAAR,EAAW;AACT4nD,IAAAA,MAAM,CAAC71D,IAAP,CAAYuD,CAAC,CAACs7B,SAAF,CAAYhzB,KAAZ,EAAmB7B,CAAnB,EAAsBgxG,IAAtB,EAAZ;AACAnvG,IAAAA,KAAK,GAAG9L,CAAC,GAAG,EAAEiK,CAAd;AACD,GAvCqB,CAuCpB;;;AAGFjK,EAAAA,CAAC,GAAG4yK,IAAI,CAACpvK,CAAD,EAAIxD,CAAJ,EAAO0sV,MAAP,CAAR;;AAEA,MAAI1sV,CAAC,KAAKkO,CAAV,EAAa;AACX4nD,IAAAA,MAAM,CAAC71D,IAAP,CAAYuD,CAAC,CAACs7B,SAAF,CAAYhzB,KAAZ,EAAmBoC,CAAnB,EAAsB+sG,IAAtB,EAAZ;AACD,GAFD,MAEO;AACLnlD,IAAAA,MAAM,CAAC71D,IAAP,CAAYuD,CAAC,CAACs7B,SAAF,CAAYhzB,KAAZ,EAAmB9L,CAAnB,EAAsBi7G,IAAtB,EAAZ;AACA9/F,IAAAA,MAAM,GAAG,EAAT;AACArP,IAAAA,KAAK,GAAG,EAAE9L,CAAV;AACA,QAAI8L,KAAK,KAAKoC,CAAd,EAAiB,MAAM,6BAA6B1K,CAAnC;AAClB,GAnDqB,CAmDpB;;;AAGF,SAAOxD,CAAC,GAAGkO,CAAX,EAAc;AACZlO,IAAAA,CAAC,GAAG4yK,IAAI,CAACpvK,CAAD,EAAIxD,CAAJ,EAAO2sV,MAAP,CAAR;AACA,QAAI3sV,CAAC,KAAKkO,CAAV,EAAa,MAAM,6BAA6B1K,CAAnC;AACb2X,IAAAA,MAAM,CAAClb,IAAP,CAAYuD,CAAC,CAACs7B,SAAF,CAAYhzB,KAAZ,EAAmB9L,CAAnB,EAAsBi7G,IAAtB,EAAZ;AACA,QAAIj7G,CAAC,GAAGkO,CAAC,GAAG,CAAR,IAAa1K,CAAC,CAAC,EAAExD,CAAH,CAAD,KAAW0sV,MAA5B,EAAoC,MAAM,4BAA4BlpV,CAAlC;AACpCsI,IAAAA,KAAK,GAAG,EAAE9L,CAAV;AACD,GA5DqB,CA4DpB;;;AAGF,MAAI,EAAEkO,CAAC,GAAG4nD,MAAM,CAACx2D,MAAb,KAAwBy1U,OAAO,CAACpnT,IAAR,CAAamoC,MAAM,CAAC5nD,CAAC,GAAG,CAAL,CAAnB,CAA5B,EAAyD;AACvD,UAAM,6BAA6B1K,CAAnC;AACD;;AAED,MAAI0K,CAAC,GAAG,CAAR,EAAW;AACT06K,IAAAA,MAAM,CAAC3oK,IAAP,GAAc61C,MAAM,CAAC,CAAD,CAApB;;AAEA,QAAIwsR,QAAJ,EAAc;AACZ15J,MAAAA,MAAM,CAAC05J,QAAP,GAAkBxsR,MAAM,CAAC,CAAD,CAAN,CAAUzsD,KAAV,CAAgB,CAAhB,CAAlB;AACD,KAFD,MAEO,IAAIokV,UAAU,CAAC33R,MAAM,CAAC,CAAD,CAAP,CAAd,EAA2B;AAChC8yH,MAAAA,MAAM,CAACgyF,QAAP,GAAkB9kN,MAAM,CAAC,CAAD,CAAxB;AACD,KAFM,MAEA;AACL8yH,MAAAA,MAAM,CAAC9yH,MAAP,GAAgBA,MAAM,CAAC,CAAD,CAAtB;AACD;AACF,GAVD,MAUO;AACL8yH,IAAAA,MAAM,CAAC3oK,IAAP,GAAc61C,MAAM,CAAC,CAAD,CAApB;AACD;;AAED,MAAI8yH,MAAM,CAAC3oK,IAAP,CAAY5W,KAAZ,CAAkB,CAAC,CAAnB,MAA0B,GAA9B,EAAmC;AACjCu/K,IAAAA,MAAM,CAACo6C,OAAP,GAAiB,IAAjB;AACAp6C,IAAAA,MAAM,CAAC3oK,IAAP,GAAc2oK,MAAM,CAAC3oK,IAAP,CAAY5W,KAAZ,CAAkB,CAAlB,EAAqB,CAAC,CAAtB,CAAd;AACD;;AAED,MAAI8R,MAAM,IAAI,IAAd,EAAoBytK,MAAM,CAACztK,MAAP,GAAgBA,MAAhB;AACpB,MAAIioN,QAAQ,CAAC,CAAD,CAAZ,EAAiBx6C,MAAM,CAACw6C,QAAP,GAAkBA,QAAQ,CAAC,CAAD,CAA1B;AACjB,MAAIA,QAAQ,CAAC,CAAD,CAAZ,EAAiBx6C,MAAM,CAACxxD,QAAP,GAAkBgsG,QAAQ,CAAC,CAAD,CAA1B;AACjB,SAAOx6C,MAAP;AACD;;AAED,SAASklK,aAAT,CAAuBtqV,CAAvB,EAA0B;AACxB,QAAM0D,CAAC,GAAG1D,CAAC,CAACK,KAAF,CAAQkpV,KAAR,CAAV;AACA,MAAI,CAACvpV,CAAC,CAAClE,MAAH,IAAa4H,CAAC,CAAC5H,MAAF,GAAW,CAA5B,EAA+B,MAAMkE,CAAN;AAC/B,SAAO0D,CAAC,CAACuC,GAAF,CAAMkd,CAAC,IAAI;AAChB,UAAMxgB,CAAC,GAAG,CAACwgB,CAAX;AACA,QAAIxgB,CAAC,KAAKA,CAAV,EAAa,MAAM3C,CAAN;AACb,WAAO2C,CAAP;AACD,GAJM,CAAP;AAKD;;;;;;;;;ACtND;;AACA;;AACA;;AACA;;AACA;;;;AAEA;AACA,MAAM4nV,aAAa,GAAG;AACpB1pD,EAAAA,IAAI,EAAE,UADc;AAEpB23C,EAAAA,GAAG,EAAE;AAAC/7T,IAAAA,IAAI,EAAE,YAAP;AAAqBjd,IAAAA,KAAK,EAAE;AAA5B;AAFe,CAAtB;;AAKe,kBAASy2G,IAAT,EAAeqkO,KAAf,EAAsBvnS,MAAtB,EAA8B;AAC3C,QAAM/oC,MAAM,GAAGisG,IAAI,CAACjsG,MAApB;AAAA,QACM09G,KAAK,GAAG;AAAC30E,IAAAA,MAAM,EAAEA;AAAT,GADd;AAGA,MAAIojJ,MAAM,GAAGlgF,IAAI,CAACkgF,MAAlB;AAAA,MACIzqG,MAAM,GAAGuqB,IAAI,CAACvqB,MADlB;AAAA,MAEIszI,OAAO,GAAG,EAFd;;AAIA,MAAI,CAAC7oC,MAAL,EAAa;AACX,yBAAM,6CAAN;AACD,GAV0C,CAY3C;;;AACA,MAAI,wBAASA,MAAT,CAAJ,EAAsB;AACpBA,IAAAA,MAAM,GAAG,iCAASA,MAAT,EAAiBmkJ,KAAK,CAACkQ,UAAN,KAAqBpC,WAArB,GAA6BhE,UAA9C,CAAT;AACD,GAf0C,CAiB3C;;;AACAjuJ,EAAAA,MAAM,GAAG,qBAAMA,MAAN,EACNx+K,MADM,CACC3X,CAAC,IAAIA,CAAC,CAACwvF,MAAF,IAAYxvF,CAAC,CAACqS,KAAd,IAAuB2sN,OAAO,CAACviO,IAAR,CAAauD,CAAb,GAAiB,CAAxC,IAA6C,CADnD,CAAT,CAlB2C,CAqB3C;;AACA,MAAIg/N,OAAO,CAACljO,MAAR,GAAiB,CAArB,EAAwB;AACtBkjO,IAAAA,OAAO,GAAG,CAACyrH,YAAY,CAACzrH,OAAD,CAAb,CAAV;AACD,GAxB0C,CA0B3C;;;AACA,MAAI7oC,MAAM,CAACr6L,MAAX,EAAmB;AACjBkjO,IAAAA,OAAO,CAACviO,IAAR,CAAa05L,MAAM,CAACr6L,MAAP,GAAgB,CAAhB,GAAoB;AAAC06M,MAAAA,KAAK,EAAErgB;AAAR,KAApB,GAAsCA,MAAM,CAAC,CAAD,CAAzD;AACD;;AAED,MAAInsL,MAAM,IAAI,IAAd,EAAoB;AAClB,QAAI0hF,MAAJ,EAAY,qBAAM,kDAAN;AACZA,IAAAA,MAAM,GAAG,mBAAmB,2BAAY1hF,MAAZ,CAAnB,GAAyC,GAAlD;AACD,GAlC0C,CAoC3C;;;AACA09G,EAAAA,KAAK,CAACh8B,MAAN,GAAe,wBAASA,MAAT,IAAmB,oCAAgBA,MAAhB,EAAwB4uP,KAAxB,CAAnB,GACX5uP,MAAM,CAACxoF,IAAP,IAAe,IAAf,GAAsB,oCAAgBwoF,MAAM,CAACxoF,IAAvB,EAA6Bo3U,KAA7B,CAAtB,GACA5uP,MAAM,CAAClsF,KAAP,IAAgB,IAAhB,GAAuBksF,MAAM,CAAClsF,KAA9B,GACAksF,MAAM,CAAC8D,MAAP,IAAiB,IAAjB,GAAwB;AACtBowP,IAAAA,KAAK,EAAI2K,aADa;AAEtBzK,IAAAA,OAAO,EAAE;AAAC9zB,MAAAA,MAAM,EAAEsuB,KAAK,CAACqF,SAAN,CAAgBj0P,MAAM,CAAC8D,MAAvB;AAAT;AAFa,GAAxB,GAIA,qBAAM,sCAAN,CAPJ;;AASA,MAAIymB,IAAI,CAACqnH,KAAT,EAAgB;AACd51G,IAAAA,KAAK,CAACv0C,OAAN,GAAgB;AAACmqJ,MAAAA,KAAK,EAAE;AAAR,KAAhB;AACD;;AAED0B,EAAAA,OAAO,CAAC1+N,OAAR,CAAgBgyD,MAAM,IACpBgoR,KAAK,CAACoQ,SAAN,CAAgB,sBAAOp8J,YAAY,CAACh8H,MAAD,EAASgoR,KAAT,CAAnB,EAAoC5yN,KAApC,CAAhB,CADF;AAGD;;AAED,SAAS4mE,YAAT,CAAsBlJ,MAAtB,EAA8Bk1J,KAA9B,EAAqC;AACnC,SAAO;AACLhoR,IAAAA,MAAM,EAAE8yH,MAAM,CAAC51F,MAAP,GAAgB8qP,KAAK,CAACqF,SAAN,CAAgBv6J,MAAM,CAAC51F,MAAvB,CAAhB,GACA41F,MAAM,CAAC/yK,KAAP,GAAeioU,KAAK,CAACsB,QAAN,CAAex2J,MAAM,CAAC/yK,KAAtB,CAAf,GACA,qBAAY+yK,MAAZ,EAAoBk1J,KAApB;AAHH,GAAP;AAKD;;AAED,SAASmQ,YAAT,CAAsBzrH,OAAtB,EAA+B;AAC7B,SAAO;AACLxvI,IAAAA,MAAM,EAAE,MACJwvI,OAAO,CAAC/4N,GAAR,CAAYjG,CAAC,IAAIA,CAAC,CAACqS,KAAF,GAAU,YAAYrS,CAAC,CAACqS,KAAd,GAAsB,IAAhC,GAAuCrS,CAAC,CAACwvF,MAA1D,CADI,GAEJ;AAHC,GAAP;AAKD;;;;;;;;;ACjFD;;AACA;;AACA;;;;AAEe,kBAASA,MAAT,EAAiB8qP,KAAjB,EAAwB;AACrC,QAAMn/S,EAAE,GAAGm/S,KAAK,CAACoF,SAAN,CAAgBlwP,MAAM,CAACzxF,IAAvB,CAAX;AACA,MAAImF,IAAI,GAAGssF,MAAM,CAAC9D,MAAlB;;AAEA,MAAI8D,MAAM,CAACnd,IAAX,EAAiB;AACf,QAAInvE,IAAJ,EAAU;AACR,2BAAM,2DAAN;AACD,KAFD,MAEO;AACLA,MAAAA,IAAI,GAAGssF,MAAM,CAACnd,IAAd;AACAl3C,MAAAA,EAAE,CAACkjM,QAAH,GAAc,IAAd;AACD;AACF;;AAED,MAAIn7N,IAAJ,EAAU;AACRA,IAAAA,IAAI,GAAG,oCAAgBA,IAAhB,EAAsBo3U,KAAtB,CAAP;AACAn/S,IAAAA,EAAE,CAACuwD,MAAH,GAAYxoF,IAAI,CAAC08U,KAAjB;AACAzkT,IAAAA,EAAE,CAACt7B,MAAH,GAAYqD,IAAI,CAAC48U,OAAjB;AACD;;AAED,MAAItwP,MAAM,CAACnyF,EAAX,EAAe;AACbmyF,IAAAA,MAAM,CAACnyF,EAAP,CAAUiD,OAAV,CAAkB6iB,CAAC,IAAI,qBAAYA,CAAZ,EAAem3T,KAAf,EAAsBn/S,EAAE,CAAC1rB,EAAzB,CAAvB;AACD;AACF;;;;;;;;;AC1BD;;AAEA,MAAMg2K,SAAS,GAAG1nL,IAAI,IAAI,CAAC8B,MAAD,EAASL,KAAT,EAAgB00M,MAAhB,KACxB,iBAAMn2M,IAAN,EAAYyB,KAAZ,EAAmBK,MAAM,IAAI6xH,SAA7B,EAAwCwiF,MAAxC,CADF;;AAGO,MAAMm6B,SAAS,GAAG5oD,SAAS,CAAC,WAAD,CAA3B;;AACA,MAAMstG,SAAS,GAAGttG,SAAS,CAAC,WAAD,CAA3B;;AACA,MAAMsnG,KAAK,GAAGtnG,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAMgrD,OAAO,GAAGhrD,SAAS,CAAC,SAAD,CAAzB;;AACA,MAAMirD,OAAO,GAAGjrD,SAAS,CAAC,SAAD,CAAzB;;AACA,MAAMwtG,QAAQ,GAAGxtG,SAAS,CAAC,UAAD,CAA1B;;AACA,MAAM0tG,MAAM,GAAG1tG,SAAS,CAAC,QAAD,CAAxB;;AACA,MAAM6sD,UAAU,GAAG7sD,SAAS,CAAC,YAAD,CAA5B;;AACA,MAAM+sD,MAAM,GAAG/sD,SAAS,CAAC,QAAD,CAAxB;;AACA,MAAMktD,KAAK,GAAGltD,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAM6tD,KAAK,GAAG7tD,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAM4vD,GAAG,GAAG5vD,SAAS,CAAC,KAAD,CAArB;;AACA,MAAM+tG,aAAa,GAAG/tG,SAAS,CAAC,eAAD,CAA/B;;AACA,MAAM8vD,IAAI,GAAG9vD,SAAS,CAAC,MAAD,CAAtB;;AACA,MAAM8nG,IAAI,GAAG9nG,SAAS,CAAC,MAAD,CAAtB;;AACA,MAAMgwD,WAAW,GAAGhwD,SAAS,CAAC,aAAD,CAA7B;;AACA,MAAMmwD,WAAW,GAAGnwD,SAAS,CAAC,aAAD,CAA7B;;AACA,MAAMioG,OAAO,GAAGjoG,SAAS,CAAC,SAAD,CAAzB;;AACA,MAAMqwD,MAAM,GAAGrwD,SAAS,CAAC,QAAD,CAAxB;;AACA,MAAM0wD,QAAQ,GAAG1wD,SAAS,CAAC,UAAD,CAA1B;;AACA,MAAM8mI,UAAU,GAAG9mI,SAAS,CAAC,YAAD,CAA5B;;AACA,MAAM+wD,KAAK,GAAG/wD,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAMkxD,KAAK,GAAGlxD,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAM6oG,MAAM,GAAG7oG,SAAS,CAAC,QAAD,CAAxB;;AACA,MAAM8vG,KAAK,GAAG9vG,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAMsxD,KAAK,GAAGtxD,SAAS,CAAC,OAAD,CAAvB;;AACA,MAAMuxG,SAAS,GAAGvxG,SAAS,CAAC,WAAD,CAA3B;;AACA,MAAM2sG,UAAU,GAAG3sG,SAAS,CAAC,YAAD,CAA5B;;AACA,MAAMgyD,MAAM,GAAGhyD,SAAS,CAAC,QAAD,CAAxB;;;;;;;;;;;ACjCP;;AAGA;;AAEA;;AACA;;AAIA,IAAIklK,YAAY,GAAG,CAAnB;AAEA,MAAMC,oBAAoB,GAAI;AAACloV,EAAAA,GAAG,EAAE,KAAN;AAAaE,EAAAA,GAAG,EAAE,KAAlB;AAAyB2xE,EAAAA,KAAK,EAAE;AAAhC,CAA9B;;AAEO,SAASs2Q,SAAT,CAAmB50O,IAAnB,EAAyBqkO,KAAzB,EAAgC;AACrC,QAAM79T,IAAI,GAAGw5F,IAAI,CAACx5F,IAAL,IAAa,QAA1B;;AAEA,MAAI,CAAC,iCAAiBA,IAAjB,CAAL,EAA6B;AAC3B,yBAAM,8BAA8B,2BAAYA,IAAZ,CAApC;AACD;;AAED69T,EAAAA,KAAK,CAACwQ,QAAN,CAAe70O,IAAI,CAACl4G,IAApB,EAA0B;AACxB0e,IAAAA,IADwB;AAExBm1L,IAAAA,MAAM,EAAElgF;AAFgB,GAA1B;AAID;;AAEM,SAASq5N,UAAT,CAAoB90O,IAApB,EAA0BqkO,KAA1B,EAAiC;AACtC,QAAMz6U,MAAM,GAAGy6U,KAAK,CAACuB,QAAN,CAAe5lO,IAAI,CAACl4G,IAApB,EAA0B8B,MAAzC;AACA,MAAIY,GAAJ;AAEAZ,EAAAA,MAAM,CAAC+xM,MAAP,GAAgBo5I,gBAAgB,CAAC/0O,IAAI,CAAC27F,MAAN,EAAc37F,IAAd,EAAoBqkO,KAApB,CAAhC;;AAEA,MAAIrkO,IAAI,CAACj4E,KAAL,IAAc,IAAlB,EAAwB;AACtBn+B,IAAAA,MAAM,CAACm+B,KAAP,GAAeitT,eAAe,CAACh1O,IAAD,EAAOqkO,KAAP,EAAcz6U,MAAd,CAA9B;AACD;;AAED,MAAIo2G,IAAI,CAAC0jJ,WAAL,IAAoB,IAAxB,EAA8B;AAC5BuxF,IAAAA,qBAAqB,CAACj1O,IAAI,CAAC0jJ,WAAN,EAAmB95P,MAAnB,CAArB;AACD;;AAED,MAAIo2G,IAAI,CAAC8sG,IAAL,IAAa,IAAjB,EAAuB;AACrBljN,IAAAA,MAAM,CAACkjN,IAAP,GAAcooI,cAAc,CAACl1O,IAAI,CAAC8sG,IAAN,CAA5B;AACD;;AAED,MAAI9sG,IAAI,CAACqtG,IAAL,IAAa,IAAjB,EAAuB;AACrBzjN,IAAAA,MAAM,CAACyjN,IAAP,GAAc8nI,cAAc,CAACn1O,IAAI,CAACqtG,IAAN,EAAYg3H,KAAZ,CAA5B;AACD;;AAED,OAAK75U,GAAL,IAAYw1G,IAAZ,EAAkB;AAChB,QAAI,8BAAep2G,MAAf,EAAuBY,GAAvB,KAA+BA,GAAG,KAAK,MAA3C,EAAmD;AACnDZ,IAAAA,MAAM,CAACY,GAAD,CAAN,GAAc4qV,YAAY,CAACp1O,IAAI,CAACx1G,GAAD,CAAL,EAAY65U,KAAZ,CAA1B;AACD;AACF;;AAED,SAAS+Q,YAAT,CAAsB38U,CAAtB,EAAyB4rU,KAAzB,EAAgC;AAC9B,SAAO,CAAC,wBAAS5rU,CAAT,CAAD,GAAeA,CAAf,GACHA,CAAC,CAAC8gF,MAAF,GAAW8qP,KAAK,CAACqF,SAAN,CAAgBjxU,CAAC,CAAC8gF,MAAlB,CAAX,GACA,qBAAM,yBAAyB,2BAAY9gF,CAAZ,CAA/B,CAFJ;AAGD;;AAED,SAAS48U,UAAT,CAAoB58U,CAApB,EAAuB4rU,KAAvB,EAA8B;AAC5B,SAAO5rU,CAAC,CAAC8gF,MAAF,GACH8qP,KAAK,CAACqF,SAAN,CAAgBjxU,CAAC,CAAC8gF,MAAlB,CADG,GAEH9gF,CAAC,CAACzI,GAAF,CAAMyI,CAAC,IAAI28U,YAAY,CAAC38U,CAAD,EAAI4rU,KAAJ,CAAvB,CAFJ;AAGD;;AAED,SAASiR,eAAT,CAAyBxtV,IAAzB,EAA+B;AAC7B,uBAAM,4BAA4B,2BAAYA,IAAZ,CAAlC;AACD,EAED;;;AAEA,SAASitV,gBAAT,CAA0Bp5I,MAA1B,EAAkC37F,IAAlC,EAAwCqkO,KAAxC,EAA+C;AAC7C,MAAI,CAAC1oI,MAAL,EAAa;AACX,QAAI37F,IAAI,CAACggL,SAAL,IAAkB,IAAlB,IAA0BhgL,IAAI,CAACigL,SAAL,IAAkB,IAAhD,EAAsD;AACpD,2BAAM,8DAAN;AACD;;AACD,WAJW,CAIH;AACT;;AAED,SAAOtkF,MAAM,CAACpiH,MAAP,GAAgB8qP,KAAK,CAACqF,SAAN,CAAgB/tI,MAAM,CAACpiH,MAAvB,CAAhB,GACH,CAAC,uBAAQoiH,MAAR,IAAkB45I,cAAlB,GACD55I,MAAM,CAACt3J,MAAP,GAAgBmxS,cAAhB,GACAC,cAFA,EAEgB95I,MAFhB,EAEwB37F,IAFxB,EAE8BqkO,KAF9B,CADJ;AAID;;AAED,SAASkR,cAAT,CAAwB55I,MAAxB,EAAgC37F,IAAhC,EAAsCqkO,KAAtC,EAA6C;AAC3C,SAAO1oI,MAAM,CAAC3rM,GAAP,CAAWyI,CAAC,IAAI28U,YAAY,CAAC38U,CAAD,EAAI4rU,KAAJ,CAA5B,CAAP;AACD;;AAED,SAASoR,cAAT,CAAwB95I,MAAxB,EAAgC37F,IAAhC,EAAsCqkO,KAAtC,EAA6C;AAC3C,QAAM9uU,IAAI,GAAG8uU,KAAK,CAACG,OAAN,CAAc7oI,MAAM,CAACpmM,IAArB,CAAb;AACA,MAAI,CAACA,IAAL,EAAW+/U,eAAe,CAAC35I,MAAM,CAACpmM,IAAR,CAAf;AAEX,SAAO,2BAAWyqG,IAAI,CAACx5F,IAAhB,IACDjR,IAAI,CAACmgV,SAAL,CAAerR,KAAf,EAAsB1oI,MAAM,CAAC5/E,KAA7B,EAAoC45N,SAAS,CAACh6I,MAAM,CAACprM,IAAR,EAAc,KAAd,CAA7C,CADC,GAED,2BAAWyvG,IAAI,CAACx5F,IAAhB,IAAwBjR,IAAI,CAACqgV,SAAL,CAAevR,KAAf,EAAsB1oI,MAAM,CAAC5/E,KAA7B,CAAxB,GACAxmH,IAAI,CAACsgV,SAAL,CAAexR,KAAf,EAAsB1oI,MAAM,CAAC5/E,KAA7B,CAHN;AAID;;AAED,SAASy5N,cAAT,CAAwB75I,MAAxB,EAAgC37F,IAAhC,EAAsCqkO,KAAtC,EAA6C;AAC3C,QAAM9uU,IAAI,GAAGomM,MAAM,CAACpmM,IAApB;AAAA,QACM8uC,MAAM,GAAGs3J,MAAM,CAACt3J,MAAP,CAAcvxC,MAAd,CAAqB,CAAComM,GAAD,EAAM9lM,CAAN,KAAY;AACxCA,IAAAA,CAAC,GAAG,wBAASA,CAAT,IAAc;AAACmC,MAAAA,IAAI,EAAEA,IAAP;AAAawmH,MAAAA,KAAK,EAAE3oH;AAApB,KAAd,GACC,uBAAQA,CAAR,KAAcA,CAAC,CAACmmF,MAAjB,GAA2Bo4P,QAAQ,CAACv+U,CAAD,EAAIixU,KAAJ,CAAnC,GACAjxU,CAFJ;AAGA8lM,IAAAA,GAAG,CAAC1yM,IAAJ,CAAS4M,CAAT;AACA,WAAO8lM,GAAP;AACD,GANQ,EAMN,EANM,CADf;AASA,SAAO,CAAC,2BAAWl5F,IAAI,CAACx5F,IAAhB,IAAwBsvU,qBAAxB,GACJ,2BAAW91O,IAAI,CAACx5F,IAAhB,IAAwBuvU,sBAAxB,GACAC,qBAFG,EAEoBr6I,MAFpB,EAE4B0oI,KAF5B,EAEmChgS,MAFnC,CAAP;AAGD;;AAED,SAASstS,QAAT,CAAkBp8U,IAAlB,EAAwB8uU,KAAxB,EAA+B;AAC7B,QAAMv8U,IAAI,GAAG,aAAc4sV,YAAY,EAAvC;AAAA,QACMuB,IAAI,GAAG,yBAAQ,EAAR,CADb;;AAGA,MAAI,uBAAQ1gV,IAAR,CAAJ,EAAmB;AACjB0gV,IAAAA,IAAI,CAAC1sV,KAAL,GAAa;AAACyjV,MAAAA,OAAO,EAAEz3U;AAAV,KAAb;AACD,GAFD,MAEO,IAAIA,IAAI,CAACgkF,MAAT,EAAiB;AACtB,UAAMqxM,IAAI,GAAG,aAAa,2BAAY9iS,IAAZ,CAAb,GAAiC,GAAjC,GAAuCyN,IAAI,CAACgkF,MAA5C,GAAqD,GAAlE;AACA08P,IAAAA,IAAI,CAACrsV,MAAL,CAAY2nB,KAAZ,GAAoB8yT,KAAK,CAACqF,SAAN,CAAgB9+C,IAAhB,CAApB;AACD;;AACDy5C,EAAAA,KAAK,CAAC6R,eAAN,CAAsBpuV,IAAtB,EAA4B,CAACmuV,IAAD,EAAO,uBAAM,EAAN,CAAP,CAA5B;AACA,SAAO;AAAC1gV,IAAAA,IAAI,EAAEzN,IAAP;AAAai0H,IAAAA,KAAK,EAAE;AAApB,GAAP;AACD;;AAED,SAAS+5N,qBAAT,CAA+Bn6I,MAA/B,EAAuC0oI,KAAvC,EAA8ChgS,MAA9C,EAAsD;AACpD,QAAM9zC,IAAI,GAAGolV,SAAS,CAACh6I,MAAM,CAACprM,IAAR,EAAc,IAAd,CAAtB;AACA,MAAI9C,CAAJ,EAAOgL,CAAP,CAFoD,CAIpD;;AACA,QAAMo9K,MAAM,GAAGxxI,MAAM,CAACr0C,GAAP,CAAWkC,CAAC,IAAI;AAC7B,UAAMqD,IAAI,GAAG8uU,KAAK,CAACG,OAAN,CAActyU,CAAC,CAACqD,IAAhB,CAAb;AACA,QAAI,CAACA,IAAL,EAAW+/U,eAAe,CAACpjV,CAAC,CAACqD,IAAH,CAAf;AACX,WAAOA,IAAI,CAAC4gV,SAAL,CAAe9R,KAAf,EAAsBnyU,CAAC,CAAC6pH,KAAxB,EAA+BxrH,IAA/B,CAAP;AACD,GAJc,CAAf,CALoD,CAWpD;;AACA,QAAMs6B,CAAC,GAAG;AAACwuM,IAAAA,OAAO,EAAEu4G,iBAAV;AAAuB7qH,IAAAA,KAAK,EAAElxC;AAA9B,GAAV;;AACA,MAAItlL,IAAJ,EAAU;AACR9C,IAAAA,CAAC,GAAG8C,IAAI,CAAC20B,EAAL,IAAW,OAAf;AACAzsB,IAAAA,CAAC,GAAGlI,IAAI,CAACwrH,KAAL,GAAa,qBAAUtuH,CAAV,EAAa8C,IAAI,CAACwrH,KAAlB,CAAb,GAAwC,OAA5C;AACAlxF,IAAAA,CAAC,CAACqvF,GAAF,GAAQ,CAACy6N,oBAAoB,CAAClnV,CAAD,CAArB,CAAR;AACAo9B,IAAAA,CAAC,CAACwZ,MAAF,GAAW,CAACggS,KAAK,CAACsN,QAAN,CAAel5U,CAAf,CAAD,CAAX;AACAoyB,IAAAA,CAAC,CAACgrM,EAAF,GAAO,CAACp9N,CAAD,CAAP;AACD;;AACDhL,EAAAA,CAAC,GAAG42U,KAAK,CAACn9T,GAAN,CAAU,2BAAU2jB,CAAV,CAAV,CAAJ,CApBoD,CAsBpD;;AACA,QAAM73B,CAAC,GAAGqxU,KAAK,CAACn9T,GAAN,CAAU,yBAAQ;AAAC6/M,IAAAA,KAAK,EAAE,eAAIt5N,CAAJ;AAAR,GAAR,CAAV,CAAV,CAvBoD,CAyBpD;;AACAgL,EAAAA,CAAC,GAAG4rU,KAAK,CAACn9T,GAAN,CAAU,wBAAO;AACnB60G,IAAAA,KAAK,EAAE61N,iBADY;AAEnBrhV,IAAAA,IAAI,EAAG8zU,KAAK,CAAC+R,OAAN,CAAc7lV,IAAd,CAFY;AAGnBw2N,IAAAA,KAAK,EAAE,eAAI/zN,CAAJ;AAHY,GAAP,CAAV,CAAJ;AAMA,SAAO,eAAIyF,CAAJ,CAAP;AACD;;AAED,SAASk9U,SAAT,CAAmBplV,IAAnB,EAAyB8lV,WAAzB,EAAsC;AACpC,MAAI9lV,IAAJ,EAAU;AACR,QAAI,CAACA,IAAI,CAACwrH,KAAN,IAAe,CAACxrH,IAAI,CAAC20B,EAAzB,EAA6B;AAC3B,UAAI,wBAAS30B,IAAT,CAAJ,EAAoBA,IAAI,CAACwrH,KAAL,GAAa,KAAb,CAApB,KACKxrH,IAAI,GAAG;AAACwrH,QAAAA,KAAK,EAAE;AAAR,OAAP;AACN,KAHD,MAGO,IAAI,CAACxrH,IAAI,CAACwrH,KAAN,IAAexrH,IAAI,CAAC20B,EAAL,KAAY,OAA/B,EAAwC;AAC7C,2BAAM,8CAA8C30B,IAAI,CAAC20B,EAAzD;AACD,KAFM,MAEA,IAAImxT,WAAW,IAAI9lV,IAAI,CAACwrH,KAAxB,EAA+B;AACpC,UAAIxrH,IAAI,CAAC20B,EAAL,IAAW,CAACyvT,oBAAoB,CAACpkV,IAAI,CAAC20B,EAAN,CAApC,EAA+C;AAC7C,6BAAM,oDAAoD30B,IAAI,CAAC20B,EAA/D;AACD;AACF;AACF;;AACD,SAAO30B,IAAP;AACD;;AAED,SAASwlV,sBAAT,CAAgCp6I,MAAhC,EAAwC0oI,KAAxC,EAA+ChgS,MAA/C,EAAuD;AACrD;AACA,QAAM1zC,MAAM,GAAG0zC,MAAM,CAACr0C,GAAP,CAAWkC,CAAC,IAAI;AAC7B,UAAMqD,IAAI,GAAG8uU,KAAK,CAACG,OAAN,CAActyU,CAAC,CAACqD,IAAhB,CAAb;AACA,QAAI,CAACA,IAAL,EAAW+/U,eAAe,CAACpjV,CAAC,CAACqD,IAAH,CAAf;AACX,WAAOA,IAAI,CAACqgV,SAAL,CAAevR,KAAf,EAAsBnyU,CAAC,CAAC6pH,KAAxB,CAAP;AACD,GAJc,CAAf,CAFqD,CAQrD;;AACA,SAAO,eAAIsoN,KAAK,CAACn9T,GAAN,CAAU,6BAAY;AAACvW,IAAAA,MAAM,EAAEA;AAAT,GAAZ,CAAV,CAAJ,CAAP;AACD;;AAED,SAASqlV,qBAAT,CAA+Br6I,MAA/B,EAAuC0oI,KAAvC,EAA8ChgS,MAA9C,EAAsD;AACpD;AACA,QAAMq7L,OAAO,GAAGr7L,MAAM,CAACr0C,GAAP,CAAWkC,CAAC,IAAI;AAC9B,UAAMqD,IAAI,GAAG8uU,KAAK,CAACG,OAAN,CAActyU,CAAC,CAACqD,IAAhB,CAAb;AACA,QAAI,CAACA,IAAL,EAAW+/U,eAAe,CAACpjV,CAAC,CAACqD,IAAH,CAAf;AACX,WAAOA,IAAI,CAACsgV,SAAL,CAAexR,KAAf,EAAsBnyU,CAAC,CAAC6pH,KAAxB,CAAP;AACD,GAJe,CAAhB,CAFoD,CAQpD;;AACA,SAAO,eAAIsoN,KAAK,CAACn9T,GAAN,CAAU,6BAAY;AAACw4N,IAAAA,OAAO,EAAEA;AAAV,GAAZ,CAAV,CAAJ,CAAP;AACD,EAED;;;AAEA,SAASy1G,cAAT,CAAwB18U,CAAxB,EAA2B4rU,KAA3B,EAAkC;AAChC,SAAO5rU,CAAC,CAAC8gF,MAAF,IAAY,uBAAQ9gF,CAAR,CAAZ,GACH48U,UAAU,CAAC58U,CAAD,EAAI4rU,KAAJ,CADP,GAEHA,KAAK,CAACiS,cAAN,CAAqB79U,CAArB,CAFJ;AAGD,EAED;;;AAEA,SAASy8U,cAAT,CAAwBpoI,IAAxB,EAA8B;AAC5B,SAAO,wBAASA,IAAT,IACH;AACE8E,IAAAA,QAAQ,EAAEwjI,YAAY,CAACtoI,IAAI,CAAC8E,QAAN,CADxB;AAEE3wM,IAAAA,IAAI,EAAEm0U,YAAY,CAACtoI,IAAI,CAAC7rM,IAAN;AAFpB,GADG,GAKHm0U,YAAY,CAACtoI,IAAD,CALhB;AAMD,EAED;;;AAEA,SAASmoI,qBAAT,CAA+BvxF,WAA/B,EAA4C95P,MAA5C,EAAoD;AAClDA,EAAAA,MAAM,CAAC85P,WAAP,GAAqB0xF,YAAY,CAAC1xF,WAAW,CAACl9O,IAAZ,IAAoBk9O,WAArB,CAAjC;;AACA,MAAIA,WAAW,CAAC/9F,KAAZ,IAAqB,IAAzB,EAA+B;AAC7B/7J,IAAAA,MAAM,CAAC62R,gBAAP,GAA0B20D,YAAY,CAAC1xF,WAAW,CAAC/9F,KAAb,CAAtC;AACD;AACF,EAED;;;AAEA,SAASqvL,eAAT,CAAyBh1O,IAAzB,EAA+BqkO,KAA/B,EAAsCz6U,MAAtC,EAA8C;AAC5C,QAAM+B,MAAM,GAAG04U,KAAK,CAAC14U,MAAN,CAAao8B,KAA5B;AACA,MAAIA,KAAK,GAAGi4E,IAAI,CAACj4E,KAAjB;;AAEA,MAAIA,KAAK,CAACwxD,MAAV,EAAkB;AAChB,WAAO8qP,KAAK,CAACqF,SAAN,CAAgB3hT,KAAK,CAACwxD,MAAtB,CAAP;AACD,GAFD,MAEO,IAAI,wBAASxxD,KAAT,CAAJ,EAAqB;AAC1B,QAAIp8B,MAAM,IAAI,8BAAeA,MAAf,EAAuBo8B,KAAvB,CAAd,EAA6C;AAC3Ci4E,MAAAA,IAAI,GAAG,sBAAO,EAAP,EAAWA,IAAX,EAAiB;AAACj4E,QAAAA,KAAK,EAAEp8B,MAAM,CAACo8B,KAAD;AAAd,OAAjB,CAAP;AACA,aAAOitT,eAAe,CAACh1O,IAAD,EAAOqkO,KAAP,EAAcz6U,MAAd,CAAtB;AACD,KAHD,MAGO,IAAIm+B,KAAK,KAAK,OAAd,EAAuB;AAC5BA,MAAAA,KAAK,GAAG,CAAC,CAAD,EAAI;AAACwxD,QAAAA,MAAM,EAAE;AAAT,OAAJ,CAAR;AACD,KAFM,MAEA,IAAIxxD,KAAK,KAAK,QAAd,EAAwB;AAC7BA,MAAAA,KAAK,GAAG,2BAAWi4E,IAAI,CAACx5F,IAAhB,IACJ,CAAC,CAAD,EAAI;AAAC+yE,QAAAA,MAAM,EAAE;AAAT,OAAJ,CADI,GAEJ,CAAC;AAACA,QAAAA,MAAM,EAAE;AAAT,OAAD,EAAqB,CAArB,CAFJ;AAGD,KAJM,MAIA;AACL,2BAAM,qCAAqC,2BAAYxxD,KAAZ,CAA3C;AACD;AACF,GAbM,MAaA,IAAIA,KAAK,CAACs7E,MAAV,EAAkB;AACvBz5G,IAAAA,MAAM,CAACy5G,MAAP,GAAgB,uBAAQt7E,KAAK,CAACs7E,MAAd,IACZgyO,UAAU,CAACttT,KAAK,CAACs7E,MAAP,EAAeghO,KAAf,CADE,GAEZ+Q,YAAY,CAACrtT,KAAK,CAACs7E,MAAP,EAAeghO,KAAf,CAFhB;AAGA,QAAIt8S,KAAK,CAAC63K,MAAV,EAAkBh2M,MAAM,CAAC+2R,YAAP,GAAsB00D,UAAU,CAACttT,KAAK,CAAC63K,MAAP,EAAeykI,KAAf,CAAhC;AAClB,QAAIt8S,KAAK,CAACu2C,KAAV,EAAiB10E,MAAM,CAACi3R,WAAP,GAAqBu0D,YAAY,CAACrtT,KAAK,CAACu2C,KAAP,EAAc+lQ,KAAd,CAAjC;AACjB;AACD,GAPM,MAOA,IAAIt8S,KAAK,CAAC9mB,IAAV,EAAgB;AACrBrX,IAAAA,MAAM,CAACy2R,SAAP,GAAmB+0D,YAAY,CAACrtT,KAAK,CAAC9mB,IAAP,EAAaojU,KAAb,CAA/B;AACA;AACD,GAHM,MAGA,IAAI,2BAAWrkO,IAAI,CAACx5F,IAAhB,KAAyB,CAAC,uBAAQuhB,KAAR,CAA9B,EAA8C;AACnD,WAAOgtT,gBAAgB,CAAChtT,KAAD,EAAQi4E,IAAR,EAAcqkO,KAAd,CAAvB;AACD,GAFM,MAEA,IAAI,CAAC,uBAAQt8S,KAAR,CAAL,EAAqB;AAC1B,yBAAM,6BAA6B,2BAAYA,KAAZ,CAAnC;AACD;;AAED,SAAOA,KAAK,CAAC/3B,GAAN,CAAUyI,CAAC,IAAI,CAAC,uBAAQA,CAAR,IAAa48U,UAAb,GAA0BD,YAA3B,EAAyC38U,CAAzC,EAA4C4rU,KAA5C,CAAf,CAAP;AACD;;;;;;;;;AC/QD;;AAEe,kBAAS/kP,IAAT,EAAe+kP,KAAf,EAAsB;AACnC,QAAM14U,MAAM,GAAG04U,KAAK,CAAC14U,MAAN,CAAa4jS,UAAb,IAA2B,EAA1C;AAAA,QACM3lS,MAAM,GAAG,EADf;;AAGA,OAAK,MAAM9B,IAAX,IAAmBw3F,IAAnB,EAAyB;AACvB,QAAIx3F,IAAI,KAAK,MAAb,EAAqB;AACrB8B,IAAAA,MAAM,CAAC9B,IAAD,CAAN,GAAekjV,cAAc,CAAC1rP,IAAI,CAACx3F,IAAD,CAAL,EAAaA,IAAb,EAAmBu8U,KAAnB,CAA7B;AACD,GAPkC,CASnC;;;AACA,OAAK,MAAMv8U,IAAX,IAAmB6D,MAAnB,EAA2B;AACzB,QAAI/B,MAAM,CAAC9B,IAAD,CAAN,IAAgB,IAApB,EAA0B;AACxB8B,MAAAA,MAAM,CAAC9B,IAAD,CAAN,GAAekjV,cAAc,CAACr/U,MAAM,CAAC7D,IAAD,CAAP,EAAeA,IAAf,EAAqBu8U,KAArB,CAA7B;AACD;AACF;;AAEDA,EAAAA,KAAK,CAACkS,aAAN,CAAoBj3P,IAAI,CAACx3F,IAAzB,EAA+B8B,MAA/B;AACD;;AAED,SAASohV,cAAT,CAAwB99T,CAAxB,EAA2BplB,IAA3B,EAAiCu8U,KAAjC,EAAwC;AACtC,SAAO,uBAAQn3T,CAAR,IAAaA,CAAC,CAACld,GAAF,CAAMkd,CAAC,IAAI89T,cAAc,CAAC99T,CAAD,EAAIplB,IAAJ,EAAUu8U,KAAV,CAAzB,CAAb,GACH,CAAC,wBAASn3T,CAAT,CAAD,GAAeA,CAAf,GACAA,CAAC,CAACqsE,MAAF,GAAW8qP,KAAK,CAACqF,SAAN,CAAgBx8T,CAAC,CAACqsE,MAAlB,CAAX,GACAzxF,IAAI,KAAK,KAAT,GAAiBolB,CAAjB,GACA,qBAAM,mCAAmC,2BAAYA,CAAZ,CAAzC,CAJJ;AAKD;;;;;;;;AC3BM,MAAM0nQ,GAAG,GAAG,KAAZ;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMkM,MAAM,GAAG,QAAf;;AAEA,MAAMu1D,QAAQ,GAAG,UAAjB;;AAEA,MAAMphE,KAAK,GAAG,OAAd;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,GAAG,GAAG,KAAZ;;AAEA,MAAMmhE,KAAK,GAAI,OAAf;;AACA,MAAMC,KAAK,GAAI,OAAf;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,IAAI,GAAK,MAAf;;AACA,MAAMC,KAAK,GAAI,OAAf;;AACA,MAAMC,KAAK,GAAI,OAAf;;AAEA,MAAMC,eAAe,GAAG,aAAxB;;AACA,MAAMC,eAAe,GAAG,aAAxB;;AACA,MAAMC,eAAe,GAAG,aAAxB;;AACA,MAAMC,kBAAkB,GAAG,gBAA3B;;AAEA,MAAM9gE,OAAO,GAAG,QAAhB;;AACA,MAAM/kB,QAAQ,GAAG,UAAjB;;AACA,MAAMnJ,QAAQ,GAAG,UAAjB;;AAEA,MAAMivF,IAAI,GAAG,MAAb;;AACA,MAAMC,KAAK,GAAG,OAAd;;AACA,MAAMC,IAAI,GAAG,MAAb;;AACA,MAAMC,MAAM,GAAG,QAAf;;AACA,MAAMC,WAAW,GAAG,aAApB;;AACA,MAAMC,UAAU,GAAG,YAAnB;;AACA,MAAMC,OAAO,GAAG,SAAhB,EAEP;AACA;;;AACO,MAAMC,YAAY,GAAG,CAC1BP,IAD0B,EAE1BC,KAF0B,EAG1BC,IAH0B,EAI1BC,MAJ0B,EAK1BC,WAL0B,EAM1BC,UAN0B,EAO1BC,OAP0B,CAArB;;AAUA,MAAMrN,IAAI,GAAG;AAClBtiV,EAAAA,IAAI,EAAE,CADY;AAElBklR,EAAAA,KAAK,EAAE,CAFW;AAGlB/L,EAAAA,WAAW,EAAE;AAHK,CAAb;;AAMA,MAAM9kO,IAAI,GAAG;AAAC5yC,EAAAA,KAAK,EAAE;AAAR,CAAb;;AACA,MAAMgsF,GAAG,GAAG;AAAChsF,EAAAA,KAAK,EAAE;AAAR,CAAZ;;;;;;;;;ACvDA,MAAMouV,SAAS,GAAG,OAAlB;;AACA,MAAMC,QAAQ,GAAG,MAAjB;;AACA,MAAMC,QAAQ,GAAG,MAAjB;;AACA,MAAMC,UAAU,GAAG,QAAnB;;AACA,MAAMC,QAAQ,GAAG,MAAjB;;;;;;;;;;ACJP;;AAEe,kBAASt/E,IAAT,EAAe;AAC5BA,EAAAA,IAAI,CAACjyP,IAAL,GAAYmxU,oBAAZ;AACAl/E,EAAAA,IAAI,CAACwI,WAAL,GAAmBxI,IAAI,CAACwI,WAAL,IAAoB,KAAvC;AACA,SAAOxI,IAAP;AACD;;;;;;;;;;;;;;;ACND;;AACA;;AACA;;AAEO,SAASlH,MAAT,CAAgBvxJ,IAAhB,EAAsBr0G,MAAtB,EAA8B;AACnC,QAAMuhB,CAAC,GAAG,CAACplB,IAAD,EAAO6oQ,IAAP,KAAgB,iBAAM3wJ,IAAI,CAACl4G,IAAD,CAAV,EAAkB,iBAAM6D,MAAM,CAAC7D,IAAD,CAAZ,EAAoB6oQ,IAApB,CAAlB,CAA1B;;AAEAzjP,EAAAA,CAAC,CAAC8qU,UAAF,GAAejuV,CAAC,IAAIysV,wBAAa,iBAC/Bx2O,IAAI,CAACkoL,SAD0B,EAE/Bv8R,MAAM,CAACu8R,SAAP,KAAqBn+R,CAAC,GAAG4B,MAAM,CAACssV,eAAV,GAA4BtsV,MAAM,CAACusV,iBAAzD,CAF+B,CAAjC;;AAKAhrU,EAAAA,CAAC,CAACirU,cAAF,GAAmB,MAAM,iBACvBn4O,IAAI,CAACm4O,cADkB,EAEvBxsV,MAAM,CAACwsV,cAAP,IAAyBxsV,MAAM,CAACysV,aAFT,CAAzB;;AAKAlrU,EAAAA,CAAC,CAACmrU,iBAAF,GAAsB,MAAM,iBAC1Br4O,IAAI,CAACq4O,iBADqB,EAE1B1sV,MAAM,CAAC0sV,iBAAP,IAA4B1sV,MAAM,CAAC2sV,cAFT,CAA5B;;AAKAprU,EAAAA,CAAC,CAACqrU,YAAF,GAAiB,MAAM,iBACrBv4O,IAAI,CAACjmG,OADgB,EAErB,iBAAMpO,MAAM,CAACoO,OAAb,EAAsB,CAACmT,CAAC,CAAC8qU,UAAF,CAAa,IAAb,CAAvB,CAFqB,CAAvB;;AAKA,SAAO9qU,CAAP;AACD;;AAEM,SAASsrU,WAAT,CAAqB1wV,IAArB,EAA2BiM,MAA3B,EAAmC;AACxC,QAAM0E,CAAC,GAAG1E,MAAM,KACbA,MAAM,CAAC0hF,MAAP,IAAiB1hF,MAAM,CAAC0hF,MAAP,CAAc3tF,IAAd,CAAlB,IACCiM,MAAM,CAACupR,KAAP,IAAgBvpR,MAAM,CAACupR,KAAP,CAAax1R,IAAb,CAFH,CAAhB;AAIA,SAAO2Q,CAAC,IAAIA,CAAC,CAAC8gF,MAAP,GAAgB9gF,CAAhB,GAAoBA,CAAC,GAAGA,CAAC,CAAClP,KAAL,GAAa,IAAzC;AACD;;AAEM,SAASkvV,QAAT,CAAkB3wV,IAAlB,EAAwBu8U,KAAxB,EAA+Br3D,KAA/B,EAAsC;AAC3C,QAAMjjR,CAAC,GAAGs6U,KAAK,CAAC14U,MAAN,CAAaqhR,KAAb,CAAmBA,KAAnB,CAAV;AACA,SAAOjjR,CAAC,IAAIA,CAAC,CAACjC,IAAD,CAAb;AACD;;AAEM,SAAS4wV,UAAT,CAAoB3uV,CAApB,EAAuB9E,CAAvB,EAA0B+4F,CAA1B,EAA6B;AAClC,SAAQ,oBAAmBo3L,gBAAM,OAAMrrR,CAAE,uBAAsBurR,cAAI,OAAMrwR,CAAE,MAAK+4F,CAAE,EAAlF;AACD;;AAEM,MAAM26P,SAAS,GAAGD,UAAU,CACjC,2BAAY7jE,eAAZ,CADiC,EAEjC,2BAAYC,gBAAZ,CAFiC,EAGjC,2BAAYmM,iBAAZ,CAHiC,CAA5B;;;AAMA,SAAS23D,QAAT,CAAkB1rU,CAAlB,EAAqB;AAC1B,QAAMzU,CAAC,GAAGyU,CAAC,CAAC,UAAD,CAAX;;AACA,MAAIha,MAAM,GAAGga,CAAC,CAAC,YAAD,CAAd;AAAA,MACIgtN,IADJ;AAAA,MACU43C,KADV;;AAGA,MAAI,CAACr5Q,CAAL,EAAQ;AACN;AACAyhO,IAAAA,IAAI,GAAGhtN,CAAC,CAAC,cAAD,CAAR;AACA4kQ,IAAAA,KAAK,GAAG5kQ,CAAC,CAAC,WAAD,CAAT;AACD,GAJD,MAIO,IAAIzU,CAAC,CAAC8gF,MAAN,EAAc;AACnB;AACA2gJ,IAAAA,IAAI,GAAG;AAAC3gJ,MAAAA,MAAM,EAAG,IAAG9gF,CAAC,CAAC8gF,MAAO;AAAtB,KAAP;AACAu4L,IAAAA,KAAK,GAAG;AAACv4L,MAAAA,MAAM,EAAG,IAAG9gF,CAAC,CAAC8gF,MAAO;AAAtB,KAAR;;AACA,QAAI,CAAC,wBAASrmF,MAAT,CAAL,EAAuB;AACrBA,MAAAA,MAAM,GAAG;AAACqmF,QAAAA,MAAM,EAAG,IAAG9gF,CAAC,CAAC8gF,MAAO,wBAAuBrmF,MAAO;AAApD,OAAT;AACD;AACF,GAPM,MAOA,IAAIuF,CAAC,KAAK,QAAV,EAAoB;AACzB;AACAyhO,IAAAA,IAAI,GAAG,CAAP;AACA43C,IAAAA,KAAK,GAAG,IAAR;AACA5+Q,IAAAA,MAAM,GAAG,CAAT;AACD,GALM,MAKA;AACLgnO,IAAAA,IAAI,GAAG,GAAP;AACA43C,IAAAA,KAAK,GAAG,KAAR;AACD;;AAED,SAAO;AAACA,IAAAA,KAAD;AAAQ53C,IAAAA,IAAR;AAAchnO,IAAAA;AAAd,GAAP;AACD;;AAEM,SAAS2lV,YAAT,CAAsBtvV,KAAtB,EAA6B2J,MAA7B,EAAqC;AAC1C,SAAO,CAACA,MAAD,GAAU3J,KAAV,GACH,CAACA,KAAD,GAAS2J,MAAT,GACA,CAAC,wBAAS3J,KAAT,CAAD,GAAmB;AAAEA,IAAAA,KAAF;AAAS2J,IAAAA;AAAT,GAAnB,GACA5J,MAAM,CAACE,MAAP,CAAc,EAAd,EAAkBD,KAAlB,EAAyB;AAAE2J,IAAAA,MAAM,EAAE2lV,YAAY,CAACtvV,KAAK,CAAC2J,MAAP,EAAeA,MAAf;AAAtB,GAAzB,CAHJ;AAID;;;;;;;;;ACvFD;;AACA;;AAEe,kBAASulQ,IAAT,EAAeqgF,MAAf,EAAuB;AACpC,MAAIA,MAAJ,EAAY;AACVrgF,IAAAA,IAAI,CAAC3wQ,IAAL,GAAYgxV,MAAM,CAAChxV,IAAnB;AACA2wQ,IAAAA,IAAI,CAACuU,KAAL,GAAa8rE,MAAM,CAAC9rE,KAAP,IAAgBvU,IAAI,CAACuU,KAAlC;AACAvU,IAAAA,IAAI,CAACwI,WAAL,GAAmB,CAAC,CAAC63E,MAAM,CAAC73E,WAA5B;AACAxI,IAAAA,IAAI,CAAC1kQ,MAAL,GAAc,wBAAa0kQ,IAAI,CAAC1kQ,MAAlB,EAA0B+kV,MAA1B,EAAkC1O,eAAlC,CAAd;AACD,GALD,MAKO;AACL3xE,IAAAA,IAAI,CAACwI,WAAL,GAAmB,KAAnB;AACD;;AACD,SAAOxI,IAAP;AACD;;;;;;;;;ACbD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASz4J,IAAT,EAAe5jG,KAAf,EAAsBzQ,MAAtB,EAA8BotV,UAA9B,EAA0C;AACvD,QAAM7rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM0mQ,QAAQ,GAAGnlP,CAAC,CAAC8qU,UAAF,EADjB;AAAA,QAEMgB,SAAS,GAAG9rU,CAAC,CAACmrU,iBAAF,EAFlB;AAAA,QAGMxyV,MAAM,GAAGqnB,CAAC,CAACirU,cAAF,EAHf;;AAKA,MAAI76D,KAAJ,EAAWjrR,KAAX,EAAkBy1B,IAAlB,EAAwBr5B,KAAxB,EAA+B+tB,MAA/B;;AAEA,MAAI61O,QAAJ,EAAc;AACZhgQ,IAAAA,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAR;AACAy1B,IAAAA,IAAI,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAP;AACAr5B,IAAAA,KAAK,GAAGuqV,SAAR;AACAx8T,IAAAA,MAAM,GAAG32B,MAAT;AACD,GALD,MAKO;AACLwM,IAAAA,KAAK,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAR;AACAy1B,IAAAA,IAAI,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAP;AACAr5B,IAAAA,KAAK,GAAG5I,MAAR;AACA22B,IAAAA,MAAM,GAAGw8T,SAAT;AACD;;AAED,QAAMjlV,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AACbvgC,MAAAA,OAAO,EAAE5gN,eADI;AAEbzvC,MAAAA,CAAC,EAAEyvC,eAFU;AAGblxB,MAAAA,CAAC,EAAEkxB,eAHU;AAIb1tC,MAAAA,KAAK,EAAE,mBAAQA,KAAR,CAJM;AAKb+tB,MAAAA,MAAM,EAAE,mBAAQA,MAAR;AALK,KADF;AAQbi5D,IAAAA,MAAM,EAAE,sBAAO,EAAP,EAAW6nM,KAAX,EAAkB;AACxBvgC,MAAAA,OAAO,EAAExnK,cADe;AAExBx+E,MAAAA,IAAI,EAAE;AAACgZ,QAAAA,QAAQ,EAAE3T,KAAX;AAAkB/J,QAAAA,KAAK,EAAEA,KAAzB;AAAgCy1B,QAAAA,IAAI,EAAEA;AAAtC;AAFkB,KAAlB,CARK;AAYb+jP,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN;AADL;AAZO,GAAf;AAiBA,yBAAYpoC,MAAZ,EAAoB;AAClBmmQ,IAAAA,MAAM,EAAOhtP,CAAC,CAAC,qBAAD,CADI;AAElBmtP,IAAAA,WAAW,EAAEntP,CAAC,CAAC,qBAAD;AAFI,GAApB,EAGG;AAAE;AACH6vO,IAAAA,OAAO,EAAM7vO,CAAC,CAAC,iBAAD;AADb,GAHH;AAOA,SAAO,wBAAU;AACf1G,IAAAA,IAAI,EAAEoxU,mBADS;AAEfzxE,IAAAA,IAAI,EAAEsqE,yBAFS;AAGf18U,IAAAA;AAHe,GAAV,EAIJglV,UAJI,CAAP;AAKD;;;;;;;;;ACzDD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS/4O,IAAT,EAAe5jG,KAAf,EAAsBzQ,MAAtB,EAA8BotV,UAA9B,EAA0CE,OAA1C,EAAmD;AAChE,QAAM/rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM0mQ,QAAQ,GAAGnlP,CAAC,CAAC8qU,UAAF,EADjB;AAAA,QAEMgB,SAAS,GAAG9rU,CAAC,CAACmrU,iBAAF,EAFlB;AAAA,QAGMxyV,MAAM,GAAGqnB,CAAC,CAACirU,cAAF,EAHf;;AAKA,MAAI5yQ,CAAJ;AAAA,MAAO9sE,CAAP;AAAA,MAAUyyR,EAAV;AAAA,MAAcguD,EAAd;AAAA,MAAkBroF,MAAM,GAAG,EAA3B;AAEAwB,EAAAA,QAAQ,IACH9sL,CAAC,GAAG,GAAJ,EAAS2lN,EAAE,GAAG,IAAd,EAAoBzyR,CAAC,GAAG,GAAxB,EAA6BygV,EAAE,GAAG,OAAlC,EAA2CroF,MAAM,GAAG,IADjD,KAEHtrL,CAAC,GAAG,GAAJ,EAAS2lN,EAAE,GAAG,IAAd,EAAoBzyR,CAAC,GAAG,GAAxB,EAA6BygV,EAAE,GAAG,QAF/B,CAAR;AAIA,QAAM57D,KAAK,GAAG;AACZvgC,IAAAA,OAAO,EAAE5gN,eADG;AAEZplC,IAAAA,IAAI,EAAE;AAACqF,MAAAA,KAAK,EAAEA,KAAR;AAAe2/G,MAAAA,KAAK,EAAE+6N;AAAtB;AAFM,GAAd;AAIAx5D,EAAAA,KAAK,CAAC/3M,CAAD,CAAL,GAAY;AAACgU,IAAAA,MAAM,EAAEs3K,MAAM,GAAG,QAAT,GAAoB+lF,eAA7B;AAAmCz7D,IAAAA,IAAI,EAAEt1R;AAAzC,GAAZ;AACAy3R,EAAAA,KAAK,CAAC7kR,CAAD,CAAL,GAAY0jC,eAAZ;AACAmhP,EAAAA,KAAK,CAAC4N,EAAD,CAAL,GAAY;AAAC3xM,IAAAA,MAAM,EAAEs3K,MAAM,GAAG,QAAT,GAAoBgmF,gBAA7B;AAAoC17D,IAAAA,IAAI,EAAEt1R;AAA1C,GAAZ;AACAy3R,EAAAA,KAAK,CAAC47D,EAAD,CAAL,GAAY,mBAAQF,SAAR,CAAZ;AAEA,QAAMjlV,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KADM;AAEb7nM,IAAAA,MAAM,EAAE,sBAAO,EAAP,EAAW6nM,KAAX,EAAkB;AAACvgC,MAAAA,OAAO,EAAExnK;AAAV,KAAlB,CAFK;AAGbs2L,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHO,GAAf;AAMA,yBAAYpoC,MAAZ,EAAoB;AAClBmmQ,IAAAA,MAAM,EAAOhtP,CAAC,CAAC,qBAAD,CADI;AAElBmtP,IAAAA,WAAW,EAAEntP,CAAC,CAAC,qBAAD;AAFI,GAApB,EAGG;AAAE;AACH6vO,IAAAA,OAAO,EAAM7vO,CAAC,CAAC,iBAAD;AADb,GAHH;AAOA,SAAO,wBAAU;AACf1G,IAAAA,IAAI,EAAEoxU,mBADS;AAEfzxE,IAAAA,IAAI,EAAEoqE,qBAFS;AAGf/lV,IAAAA,GAAG,EAAGssV,gBAHS;AAIfl/U,IAAAA,IAAI,EAAEqhV,OAJS;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;;;;;;;;ACjDD;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,MAAMJ,SAAS,GAAI,SAAQ/B,eAAK,QAAO/hE,eAAK,WAAU+hE,eAAK,QAAO9hE,gBAAM,MAAKmM,iBAAO,GAApF;AAAA,MACMk4D,YAAY,GAAI,SAAQvC,eAAK,QAAO7hE,iBAAO,WAAU6hE,eAAK,QAAOhiE,cAAI,MAAKS,iBAAO,GADvF;;AAGe,kBAASr1K,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4C;AACzD,QAAM/rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM0mQ,QAAQ,GAAGnlP,CAAC,CAAC8qU,UAAF,EADjB;AAAA,QAEMgB,SAAS,GAAG,mBAAQ9rU,CAAC,CAACmrU,iBAAF,EAAR,CAFlB;AAAA,QAGMxyV,MAAM,GAAGqnB,CAAC,CAACirU,cAAF,EAHf;;AAKA,MAAIiB,OAAO,GAAGlsU,CAAC,CAAC,cAAD,CAAf;AAAA,MACIowQ,KADJ;AAAA,MACW7nM,MADX;AAAA,MACmBlQ,CADnB;AAAA,MACsB9sE,CADtB;AAAA,MACyBo4P,MAAM,GAAG,EADlC;;AAGA,QAAM98P,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AACbvgC,MAAAA,OAAO,EAAE5gN;AADI,KADF;AAIbs5C,IAAAA,MAAM,EAAEA,MAAM,GAAG;AACfsnK,MAAAA,OAAO,EAAExnK,cADM;AAEf0pB,MAAAA,IAAI,EAAE;AAAC8c,QAAAA,KAAK,EAAE26N;AAAR;AAFS,KAJJ;AAQb7qE,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN;AADL;AARO,GAAf;AAaA,yBAAYpoC,MAAZ,EAAoB;AAClBgD,IAAAA,IAAI,EAASmW,CAAC,CAAC,YAAD,CADI;AAElB8vP,IAAAA,WAAW,EAAE9vP,CAAC,CAAC,cAAD,CAFI;AAGlB22P,IAAAA,IAAI,EAAS32P,CAAC,CAAC,WAAD,CAHI;AAIlBk2P,IAAAA,QAAQ,EAAKl2P,CAAC,CAAC,eAAD,CAJI;AAKlBs3P,IAAAA,SAAS,EAAIt3P,CAAC,CAAC,gBAAD,CALI;AAMlBw3P,IAAAA,UAAU,EAAGx3P,CAAC,CAAC,iBAAD,CANI;AAOlBqvD,IAAAA,KAAK,EAAQ,kBAAMyjC,IAAI,CAACq5O,UAAX,EAAuB1tV,MAAM,CAAC2tV,kBAA9B;AAPK,GAApB;;AAUA,MAAIjnF,QAAJ,EAAc;AACZirB,IAAAA,KAAK,CAACx+E,KAAN,GAAc;AAACv1M,MAAAA,KAAK,EAAE;AAAR,KAAd;AACA+zR,IAAAA,KAAK,CAACvmH,QAAN,GAAiBthF,MAAM,CAACshF,QAAP,GAAkB;AAACx9E,MAAAA,MAAM,EAAE4/P;AAAT,KAAnC;AACA5zQ,IAAAA,CAAC,GAAG,GAAJ;AAAS9sE,IAAAA,CAAC,GAAG,GAAJ;AAASo4P,IAAAA,MAAM,GAAG,IAAT;AACnB,GAJD,MAIO;AACLysB,IAAAA,KAAK,CAACx+E,KAAN,GAAcrpH,MAAM,CAACqpH,KAAP,GAAe;AAACvlH,MAAAA,MAAM,EAAEo/P;AAAT,KAA7B;AACAr7D,IAAAA,KAAK,CAACvmH,QAAN,GAAiB;AAACxtK,MAAAA,KAAK,EAAE;AAAR,KAAjB;AACAg8E,IAAAA,CAAC,GAAG,GAAJ;AAAS9sE,IAAAA,CAAC,GAAG,GAAJ;AACV;;AAED6kR,EAAAA,KAAK,CAAC/3M,CAAD,CAAL,GAAWkQ,MAAM,CAAClQ,CAAD,CAAN,GAAY;AAACgU,IAAAA,MAAM,EAAEs3K,MAAM,GAAG,QAAT,GAAoB+lF,eAA7B;AAAmCz7D,IAAAA,IAAI,EAAEt1R;AAAzC,GAAvB;AAEAy3R,EAAAA,KAAK,CAAC7kR,CAAD,CAAL,GAAWg9E,MAAM,CAACh9E,CAAD,CAAN,GAAYugV,SAAvB;AACAA,EAAAA,SAAS,CAAC9lV,MAAV,GAAmB,kBAAM8sG,IAAI,CAACu5O,WAAX,EAAwB5tV,MAAM,CAAC6tV,mBAA/B,KAAuD,CAA1E;AAEAJ,EAAAA,OAAO,GAAGA,OAAO,GAAG;AAClBnhE,IAAAA,UAAU,EAAE/qQ,CAAC,CAAC,iBAAD,CADK;AAElBsqB,IAAAA,MAAM,EAAE4hT,OAFU;AAGlB37I,IAAAA,KAAK,EAAE,WAAWg5I;AAHA,GAAH,GAIbh7N,SAJJ,CA/CyD,CAqDzD;;AACA,SAAO,wBAAU;AACfj1G,IAAAA,IAAI,EAAGuxU,mBADQ;AAEf5xE,IAAAA,IAAI,EAAGuqE,sBAFQ;AAGf1jE,IAAAA,KAAK,EAAE+pE,0BAHQ;AAIfvsV,IAAAA,GAAG,EAAIssV,gBAJQ;AAKfl/U,IAAAA,IAAI,EAAEqhV,OALS;AAMfllV,IAAAA,MANe;AAOfqlV,IAAAA;AAPe,GAAV,EAQJL,UARI,CAAP;AASD;;;;;;;;;;AC7ED;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA;AACe,kBAAS/4O,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4Cl/U,OAA5C,EAAqD;AAClE,QAAMmT,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACMH,OAAO,GAAGutV,UAAU,CAACvtV,OAD3B;AAAA,QAEMy1Q,WAAW,GAAG,CAAC,EAAEz1Q,OAAO,IAAIA,OAAO,CAACy1Q,WAArB,CAFrB;AAAA,QAGMn5Q,IAAI,GAAG0D,OAAO,GAAGA,OAAO,CAAC1D,IAAX,GAAkB2zH,SAHtC;AAAA,QAIMj/F,MAAM,GAAGtP,CAAC,CAAC,YAAD,CAJhB;AAAA,QAKMusU,YAAY,GAAGvsU,CAAC,CAAC,cAAD,CALtB;AAAA,QAMMwsU,QAAQ,GAAG;AAACnkV,IAAAA,IAAI,EAAE;AAAP,GANjB;AAAA,QAOMokV,OAAO,GAAI,IAAG5/U,OAAQ,aAAY48U,iBAAO,YAAWQ,eAAK,EAP/D;AAAA,QAQMyC,OAAO,GAAGp9T,MAAM,GAAG,mBAAQA,MAAR,CAAH,GAAqB;AAACu/F,IAAAA,KAAK,EAAEo7N;AAAR,GAR3C;AAAA,QASM9qV,KAAK,GAAI,SAAQoqV,gBAAM,EAT7B;AAAA,QAUMx8D,KAAK,GAAI,UAASlgR,OAAQ,GAVhC;;AAYA,MAAIhG,MAAJ,EAAYupR,KAAZ,EAAmB7nM,MAAnB,EAA2BykM,KAA3B,EAAkC3pR,IAAlC;AAEAqpV,EAAAA,OAAO,CAACz+D,IAAR,GAAe,GAAf,CAfkE,CAiBlE;;AACApnR,EAAAA,MAAM,GAAG;AACPupR,IAAAA,KAAK,EAAGA,KAAK,GAAG;AACdvgC,MAAAA,OAAO,EAAE5gN,eADK;AAEdzvC,MAAAA,CAAC,EAAE;AAAC6sF,QAAAA,MAAM,EAAEogQ,OAAT;AAAkBx+D,QAAAA,IAAI,EAAE,GAAxB;AAA6BjoR,QAAAA,MAAM,EAAEumV;AAArC,OAFW;AAGdxuU,MAAAA,CAAC,EAAE2uU;AAHW,KADT;AAMPnkQ,IAAAA,MAAM,EAAEA,MAAM,GAAG;AACfsnK,MAAAA,OAAO,EAAExnK,cADM;AAEf7oF,MAAAA,CAAC,EAAE4wR,KAAK,CAAC5wR,CAFM;AAGfue,MAAAA,CAAC,EAAEqyQ,KAAK,CAACryQ;AAHM,KANV;AAWP4gQ,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN;AADL;AAXC,GAAT;AAgBA,MAAI09S,QAAQ,GAAG,IAAf;AAAA,MACIC,UAAU,GAAG,IADjB;;AAEA,MAAI,CAAC95O,IAAI,CAACjpG,IAAV,EAAgB;AACd8iV,IAAAA,QAAQ,GAAGluV,MAAM,CAACouV,mBAAlB;AACAD,IAAAA,UAAU,GAAGnuV,MAAM,CAACquV,qBAApB;AACD;;AAED,yBAAYjmV,MAAZ,EAAoB;AAClBgD,IAAAA,IAAI,EAAcmW,CAAC,CAAC,iBAAD,EAAoB2sU,QAApB,CADD;AAElB9rV,IAAAA,KAAK,EAAamf,CAAC,CAAC,YAAD,CAFD;AAGlBlf,IAAAA,IAAI,EAAckf,CAAC,CAAC,YAAD,CAHD;AAIlBgtP,IAAAA,MAAM,EAAYhtP,CAAC,CAAC,mBAAD,EAAsB4sU,UAAtB,CAJD;AAKlBn8E,IAAAA,UAAU,EAAQzwP,CAAC,CAAC,YAAD,CALD;AAMlB2wP,IAAAA,gBAAgB,EAAE3wP,CAAC,CAAC,kBAAD,CAND;AAOlBmtP,IAAAA,WAAW,EAAOntP,CAAC,CAAC,mBAAD;AAPD,GAApB,EAQG;AAAE;AACH6vO,IAAAA,OAAO,EAAW7vO,CAAC,CAAC,eAAD;AADlB,GARH;;AAYAwqU,0BAAartV,OAAb,CAAqB+R,KAAK,IAAI;AAC5B,QAAI4jG,IAAI,CAAC5jG,KAAD,CAAR,EAAiB;AACfq5E,MAAAA,MAAM,CAACr5E,KAAD,CAAN,GAAgBkhR,KAAK,CAAClhR,KAAD,CAAL,GAAe;AAACA,QAAAA,KAAK,EAAE4jG,IAAI,CAAC5jG,KAAD,CAAZ;AAAqB2/G,QAAAA,KAAK,EAAE+6N;AAA5B,OAA/B;AACD;AACF,GAJD;;AAMA,QAAM/qG,OAAO,GAAG,wBAAU;AACxBvlO,IAAAA,IAAI,EAAEsxU,qBADkB;AAExB3xE,IAAAA,IAAI,EAAEwqE,uBAFkB;AAGxBnmV,IAAAA,GAAG,EAAGssV,gBAHkB;AAIxBl/U,IAAAA,IAAI,EAAE8hV,QAJkB;AAKxBjrT,IAAAA,IAAI,EAAEjS,MAAM,GAAG,IAAH,GAAUi/F,SALE;AAMxB1nH,IAAAA;AANwB,GAAV,EAObglV,UAAU,CAAChtG,OAPE,CAAhB,CA3DkE,CAoElE;;AACA,QAAMwtG,WAAW,GAAG,mBAAQE,YAAR,CAApB;AACAF,EAAAA,WAAW,CAACrmV,MAAZ,GAAqBga,CAAC,CAAC,aAAD,CAAtB;AAEAnZ,EAAAA,MAAM,GAAG;AACPupR,IAAAA,KAAK,EAAGA,KAAK,GAAG;AACdvgC,MAAAA,OAAO,EAAE5gN,eADK;AAEdzvC,MAAAA,CAAC,EAAE;AAAC6sF,QAAAA,MAAM,EAAEogQ,OAAT;AAAkBzmV,QAAAA,MAAM,EAAEqmV;AAA1B,OAFW;AAGdtuU,MAAAA,CAAC,EAAE2uU;AAHW,KADT;AAMPnkQ,IAAAA,MAAM,EAAEA,MAAM,GAAG;AACfsnK,MAAAA,OAAO,EAAExnK,cADM;AAEf0pB,MAAAA,IAAI,EAAE;AAAC8c,QAAAA,KAAK,EAAE26N;AAAR,OAFS;AAGfhqV,MAAAA,CAAC,EAAE4wR,KAAK,CAAC5wR,CAHM;AAIfue,MAAAA,CAAC,EAAEqyQ,KAAK,CAACryQ;AAJM,KANV;AAYP4gQ,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN;AADL;AAZC,GAAT;AAiBA,yBAAYpoC,MAAZ,EAAoB;AAClB+qM,IAAAA,KAAK,EAAQ5xL,CAAC,CAAC,YAAD,CADI;AAElB6pJ,IAAAA,QAAQ,EAAK7pJ,CAAC,CAAC,eAAD,CAFI;AAGlBnW,IAAAA,IAAI,EAASmW,CAAC,CAAC,YAAD,CAHI;AAIlB8vP,IAAAA,WAAW,EAAE9vP,CAAC,CAAC,cAAD,CAJI;AAKlB22P,IAAAA,IAAI,EAAS32P,CAAC,CAAC,WAAD,CALI;AAMlBk2P,IAAAA,QAAQ,EAAKl2P,CAAC,CAAC,eAAD,CANI;AAOlBs3P,IAAAA,SAAS,EAAIt3P,CAAC,CAAC,gBAAD,CAPI;AAQlBw3P,IAAAA,UAAU,EAAGx3P,CAAC,CAAC,iBAAD,CARI;AASlBqvD,IAAAA,KAAK,EAAQrvD,CAAC,CAAC,YAAD;AATI,GAApB;AAYA,QAAM0tE,MAAM,GAAG,wBAAU;AACvBp0E,IAAAA,IAAI,EAAGuxU,mBADgB;AAEvB5xE,IAAAA,IAAI,EAAGuqE,sBAFgB;AAGvB1jE,IAAAA,KAAK,EAAE+pE,0BAHgB;AAIvBvsV,IAAAA,GAAG,EAAIssV,gBAJgB;AAKvBl/U,IAAAA,IAAI,EAAG8hV,QALgB;AAMvB3lV,IAAAA;AANuB,GAAV,EAOZglV,UAAU,CAACn+P,MAPC,CAAf,CArGkE,CA8GlE;;AACA7mF,EAAAA,MAAM,GAAG;AACPupR,IAAAA,KAAK,EAAE;AACL/c,MAAAA,OAAO,EAAE;AAACh3Q,QAAAA,KAAK,EAAE,CAACizB;AAAT,OADJ;AACsB;AAC3B/tB,MAAAA,KAAK,EAAE0tC,eAFF;AAGL3f,MAAAA,MAAM,EAAEA,MAAM,GAAG,mBAAQA,MAAR,CAAH,GAAqB2f,eAH9B;AAIL4gN,MAAAA,OAAO,EAAE5gN;AAJJ,KADA;AAOP0vO,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV,KAPC;AAQPs5C,IAAAA,MAAM,EAAEA,MAAM,GAAG;AACfsnK,MAAAA,OAAO,EAAExnK,cADM;AAEfr+E,MAAAA,GAAG,EAAE;AAACqiF,QAAAA,MAAM,EAAE;AAAT,OAFU;AAGfgqH,MAAAA,MAAM,EAAE;AAAChqH,QAAAA,MAAM,EAAE;AAAT;AAHO;AARV,GAAT,CA/GkE,CA8HlE;;AACA,MAAIrsE,CAAC,CAAC8qU,UAAF,CAAa,IAAb,CAAJ,EAAwB;AACtB99D,IAAAA,KAAK,GAAI,iCAAgCD,KAAM,GAA/C;AACAxkM,IAAAA,MAAM,CAACv+E,GAAP,CAAWqiF,MAAX,GAAqB,GAAEltF,KAAM,IAAG6tR,KAAM,EAAtC;AACAzkM,IAAAA,MAAM,CAAC8tH,MAAP,CAAchqH,MAAd,GAAwB,SAAQltF,KAAM,MAAK6tR,KAAM,GAAjD;AACA3pR,IAAAA,IAAI,GAAG;AAACwrH,MAAAA,KAAK,EAAE,CAAC,KAAD,EAAQ1vH,KAAR;AAAR,KAAP;AACD,GALD,MAKO;AACLopF,IAAAA,MAAM,CAACv+E,GAAP,CAAWqiF,MAAX,GAAqB,SAAQltF,KAAM,MAAK4tR,KAAM,GAA9C;AACAxkM,IAAAA,MAAM,CAAC8tH,MAAP,CAAchqH,MAAd,GAAwB,GAAEltF,KAAM,MAAK4tR,KAAM,EAA3C;AACA1pR,IAAAA,IAAI,GAAG;AAACwrH,MAAAA,KAAK,EAAE1vH;AAAR,KAAP;AACD,GAxIiE,CAyIlE;;;AACAopF,EAAAA,MAAM,CAAC8tH,MAAP,CAAchqH,MAAd,GAAwB,IAAGx/E,OAAQ,KAAI07E,MAAM,CAAC8tH,MAAP,CAAchqH,MAAO,IAAGltF,KAAM,EAArE,CA1IkE,CA4IlE;;AACA4sV,EAAAA,OAAO,GAAG;AAACgB,IAAAA,KAAK,EAAE;AAAC1kV,MAAAA,IAAI,EAAE0jV,OAAP;AAAgBnxV,MAAAA,IAAI,EAAE,OAAtB;AAA+BuxO,MAAAA,OAAO,EAAEo9G;AAAxC;AAAR,GAAV;AAEA,SAAO,yBAAW;AAChBtwE,IAAAA,IAAI,EAAIwP,gBADQ;AAEhB/9Q,IAAAA,IAAI,EAAIqhV,OAFQ;AAGhBllV,IAAAA,MAAM,EAAE,wBAAaA,MAAb,EAAqBvI,OAArB,EAA8B4+U,eAA9B,CAHQ;AAIhBlrM,IAAAA,KAAK,EAAG,CAAC6sG,OAAD,EAAUnxJ,MAAV,CAJQ;AAKhB9yF,IAAAA,IALgB;AAMhBm5Q,IAAAA,WANgB;AAOhB1wQ,IAAAA;AAPgB,GAAX,CAAP;AASD;;AAEM,SAAS2pV,kBAAT,CAA4Bl6O,IAA5B,EAAkCr0G,MAAlC,EAA0C;AAC/C,QAAMuhB,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV,CAD+C,CAG/C;;;AACA,SAAO;AACLmzM,IAAAA,KAAK,EAAI5xL,CAAC,CAAC,WAAD,CADL;AAELnT,IAAAA,OAAO,EAAEmT,CAAC,CAACqrU,YAAF,EAFJ;AAGL9xL,IAAAA,MAAM,EAAG;AACPvvJ,MAAAA,GAAG,EAAE,IADE;AAEPqsM,MAAAA,MAAM,EAAE;AAFD,KAHJ;AAOLvgM,IAAAA,OAAO,EAAE;AACP9L,MAAAA,GAAG,EAAKgW,CAAC,CAAC,YAAD,CADF;AAEPq2L,MAAAA,MAAM,EAAEr2L,CAAC,CAAC,eAAD;AAFF;AAPJ,GAAP;AAYD;;;;;;;;;ACtLD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA;AACA,MAAMitU,GAAG,GAAG,wBAAZ;AAAA,MACMC,GAAG,GAAG,yBADZ;AAAA,MAEMC,IAAI,GAAI,IAAGF,GAAI,OAAMC,GAAI,GAF/B;AAAA,MAGME,IAAI,GAAI,kBAAiBD,IAAK,EAHpC;AAAA,MAIMtjL,QAAQ,GAAG,2BAAW,OAAX,EAAoB,UAApB,EAAgC,UAAhC,CAJjB;AAAA,MAKMwjL,SAAS,GAAG,2BAAW,SAAX,EAAsB,QAAtB,EAAgC,UAAhC,CALlB;AAAA,MAMMC,SAAS,GAAI,kBAAiBJ,GAAI,OAAMG,SAAU,QAAOF,IAAK,wBAAuBF,GAAI,iBAAgBxB,oBAAU,EANzH;AAAA,MAOM8B,UAAU,GAAI,oBAAmBJ,IAAK,wBAP5C;AAAA,MAQMK,SAAS,GAAI,GAAEJ,IAAK,OAAMH,GAAI,kBARpC;AAAA,MASMQ,YAAY,GAAI,GAAEN,IAAK,sBAAqBD,GAAI,0BAAyBrjL,QAAS,WATxF;;AAWe,kBAAS/2D,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4C;AACzD,QAAM/rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;;AAEA,QAAMoI,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAE;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADM;AAEbs5C,IAAAA,MAAM,EAAE;AACNsnK,MAAAA,OAAO,EAAExnK,cADH;AAEN7oF,MAAAA,CAAC,EAAE;AAACqvH,QAAAA,KAAK,EAAE;AAAC7J,UAAAA,KAAK,EAAE;AAAR;AAAR,OAFG;AAGNjnG,MAAAA,CAAC,EAAE;AAAC8wG,QAAAA,KAAK,EAAE;AAAC7J,UAAAA,KAAK,EAAE;AAAR;AAAR;AAHG,KAFK;AAOb25J,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAPO,GAAf;AAUA,yBAAYpoC,MAAZ,EAAoB;AAClBykQ,IAAAA,MAAM,EAAOtrP,CAAC,CAAC,aAAD,CADI;AAElB0tU,IAAAA,OAAO,EAAM1tU,CAAC,CAAC,aAAD,CAFI;AAGlBovL,IAAAA,MAAM,EAAO;AAAC/iH,MAAAA,MAAM,EAAEkhQ;AAAT,KAHK;AAIlB/vG,IAAAA,KAAK,EAAQ;AAACnxJ,MAAAA,MAAM,EAAEmhQ;AAAT,KAJK;AAKlB57I,IAAAA,KAAK,EAAQ;AAACvlH,MAAAA,MAAM,EAAEihQ;AAAT,KALK;AAMlBzjL,IAAAA,QAAQ,EAAK;AAACx9E,MAAAA,MAAM,EAAEohQ;AAAT,KANK;AAOlB17O,IAAAA,IAAI,EAASe,IAAI,CAACn5G,KAPA;AAQlBkQ,IAAAA,IAAI,EAASmW,CAAC,CAAC,YAAD,CARI;AASlB8vP,IAAAA,WAAW,EAAE9vP,CAAC,CAAC,cAAD,CATI;AAUlB22P,IAAAA,IAAI,EAAS32P,CAAC,CAAC,WAAD,CAVI;AAWlBk2P,IAAAA,QAAQ,EAAKl2P,CAAC,CAAC,eAAD,CAXI;AAYlBs3P,IAAAA,SAAS,EAAIt3P,CAAC,CAAC,gBAAD,CAZI;AAalBw3P,IAAAA,UAAU,EAAGx3P,CAAC,CAAC,iBAAD,CAbI;AAclBqvD,IAAAA,KAAK,EAAQrvD,CAAC,CAAC,YAAD,CAdI;AAelB82P,IAAAA,UAAU,EAAG92P,CAAC,CAAC,iBAAD;AAfI,GAApB,EAgBG;AAAE;AACH4xL,IAAAA,KAAK,EAAQ5xL,CAAC,CAAC,YAAD,CADb;AAED6pJ,IAAAA,QAAQ,EAAK7pJ,CAAC,CAAC,eAAD;AAFb,GAhBH;AAqBA,SAAO,wBAAU;AACf1G,IAAAA,IAAI,EAAGuxU,mBADQ;AAEf5xE,IAAAA,IAAI,EAAGyqE,sBAFQ;AAGf5jE,IAAAA,KAAK,EAAEgqE,0BAHQ;AAIfp/U,IAAAA,IAAI,EAAGqhV,OAJQ;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;;;;;;;;AC5DD;;AAEe,kBAAStqT,IAAT,EAAe41S,KAAf,EAAsB;AACnC,MAAIp3U,IAAJ;;AAEA,MAAI,wBAASwhC,IAAT,CAAJ,EAAoB;AAClB,QAAIA,IAAI,CAAC8qD,MAAT,EAAiB;AACftsF,MAAAA,IAAI,GAAGwhC,IAAI,CAAC8qD,MAAZ;AACD,KAFD,MAEO,IAAI9qD,IAAI,CAAC75B,IAAT,EAAe;AACpB3H,MAAAA,IAAI,GAAG,eAAesuC,KAAK,CAAC9M,IAAI,CAAC75B,IAAN,CAApB,GAAkC,GAAzC;AACD,KAFM,MAEA,IAAI65B,IAAI,CAACyzP,MAAT,EAAiB;AACtBj1R,MAAAA,IAAI,GAAG,cAAcsuC,KAAK,CAAC9M,IAAI,CAACyzP,MAAN,CAAnB,GAAmC,qBAA1C;AACD;AACF;;AAED,SAAOj1R,IAAI,GACPo3U,KAAK,CAACqF,SAAN,CAAgBz8U,IAAhB,CADO,GAEP,CAAC,CAACwhC,IAFN;AAGD;;AAED,SAAS8M,KAAT,CAAehyC,KAAf,EAAsB;AACpB,SAAO,wBAASA,KAAT,KAAmBA,KAAK,CAACgwF,MAAzB,GACHhwF,KAAK,CAACgwF,MADH,GAEH,2BAAYhwF,KAAZ,CAFJ;AAGD;;;;;;;;;ACxBD;;AACA;;AAEe,kBAASy2G,IAAT,EAAe;AAC5B,QAAMmmK,IAAI,GAAGnmK,IAAI,CAACmmK,IAAL,IAAa,EAA1B;AACA,SAAQ,CAACA,IAAI,CAACxiP,OAAL,CAAa,MAAb,CAAD,IAAyB,CAACwiP,IAAI,CAACxiP,OAAL,CAAa,QAAb,CAA1B,IAAoD,CAACwiP,IAAI,CAACxiP,OAAL,CAAa,OAAb,CAAtD,GACHwiP,IADG,GAEHnmK,IAAI,CAACx5F,IAAL,KAAcmxU,oBAAd,GAA0BhiE,gBAA1B,GAAuCxP,IAAI,IAAI8pE,eAFnD;AAGD;;;;;;;;;ACRD;;;;AAEe,kBAASjwO,IAAT,EAAe;AAC5B,SAAO;AACLmhK,IAAAA,QAAQ,EAAMnhK,IAAI,CAACx5F,IADd;AAEL1e,IAAAA,IAAI,EAAUk4G,IAAI,CAACl4G,IAAL,IAAa2zH,SAFtB;AAGL0qJ,IAAAA,IAAI,EAAUnmK,IAAI,CAACmmK,IAAL,IAAa,mBAAKnmK,IAAL,CAHtB;AAIL89J,IAAAA,MAAM,EAAQ,CAAC99J,IAAI,CAAC89J,MAAN,IAAgBriJ,SAJzB;AAKL4qJ,IAAAA,IAAI,EAAUrmK,IAAI,CAACqmK,IALd;AAMLC,IAAAA,WAAW,EAAGtmK,IAAI,CAACsmK;AANd,GAAP;AAQD;;;;;;;;;ACXc,kBAAStmK,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,SAAOrkO,IAAI,IAAIA,IAAI,CAACzmB,MAAb,GAAsB8qP,KAAK,CAACqF,SAAN,CAAgB1pO,IAAI,CAACzmB,MAArB,CAAtB,GACHymB,IAAI,KAAK,KAAT,GAAiB,KAAjB,GACA,IAFJ;AAGD;;;;;;;;;;ACJD;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACe,kBAASA,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,QAAM9nK,GAAG,GAAG,8BAAWv8D,IAAI,CAACx5F,IAAhB,CAAZ;AACA,MAAI,CAAC+1J,GAAL,EAAU,qBAAM,kCAAkC,2BAAYv8D,IAAI,CAACx5F,IAAjB,CAAxC;AAEV,QAAMvc,CAAC,GAAG,iBAAMsyK,GAAG,CAAC/1J,IAAJ,CAAS9b,WAAT,EAAN,EAA8B,IAA9B,EAAoCqgV,eAAe,CAACxuK,GAAD,EAAMv8D,IAAN,EAAYqkO,KAAZ,CAAnD,CAAV;AACA,MAAIrkO,IAAI,CAACzmB,MAAT,EAAiB8qP,KAAK,CAACiN,SAAN,CAAgBtxO,IAAI,CAACzmB,MAArB,EAA6B8qP,KAAK,CAACyJ,KAAN,CAAY7jV,CAAZ,CAA7B;AACjBA,EAAAA,CAAC,CAACo/G,QAAF,GAAakzD,GAAG,CAAClzD,QAAJ,IAAgB,EAA7B;AAEA,SAAOp/G,CAAP;AACD;AAED;AACA;AACA;;;AACA,SAAS8gV,eAAT,CAAyBxuK,GAAzB,EAA8Bv8D,IAA9B,EAAoCqkO,KAApC,EAA2C;AACzC,QAAMz6U,MAAM,GAAG,EAAf;AAAA,QACM6K,CAAC,GAAG8nK,GAAG,CAAC3yK,MAAJ,CAAW/D,MADrB;;AAGA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1B,UAAMs0V,IAAI,GAAGt+K,GAAG,CAAC3yK,MAAJ,CAAWrD,CAAX,CAAb;AACAqD,IAAAA,MAAM,CAACixV,IAAI,CAAC/yV,IAAN,CAAN,GAAoBkjV,cAAc,CAAC6P,IAAD,EAAO76O,IAAP,EAAaqkO,KAAb,CAAlC;AACD;;AACD,SAAOz6U,MAAP;AACD;AAED;AACA;AACA;;;AACA,SAASohV,cAAT,CAAwBzuK,GAAxB,EAA6Bv8D,IAA7B,EAAmCqkO,KAAnC,EAA0C;AACxC,QAAM79T,IAAI,GAAG+1J,GAAG,CAAC/1J,IAAjB;AAAA,QACMjd,KAAK,GAAGy2G,IAAI,CAACu8D,GAAG,CAACz0K,IAAL,CADlB;;AAGA,MAAI0e,IAAI,KAAK,OAAb,EAAsB;AACpB,WAAOs0U,mBAAmB,CAACv+K,GAAD,EAAMv8D,IAAN,EAAYqkO,KAAZ,CAA1B;AACD,GAFD,MAEO,IAAI96U,KAAK,KAAKkyH,SAAd,EAAyB;AAC9B,QAAI8gD,GAAG,CAACga,QAAR,EAAkB;AAChB,2BAAM,sBAAsB,2BAAYv2E,IAAI,CAACx5F,IAAjB,CAAtB,GACA,cADA,GACiB,2BAAY+1J,GAAG,CAACz0K,IAAhB,CADvB;AAED;;AACD;AACD,GANM,MAMA,IAAI0e,IAAI,KAAK,OAAb,EAAsB;AAC3B,WAAOu0U,kBAAkB,CAACx+K,GAAD,EAAMv8D,IAAN,EAAYqkO,KAAZ,CAAzB;AACD,GAFM,MAEA,IAAI79T,IAAI,KAAK,YAAb,EAA2B;AAChC,WAAO69T,KAAK,CAAC2W,aAAN,CAAoBh7O,IAAI,CAACu8D,GAAG,CAACz0K,IAAL,CAAxB,CAAP;AACD;;AAED,SAAOy0K,GAAG,CAAC71K,KAAJ,IAAa,CAAC,oBAAS6C,KAAT,CAAd,GACHA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAIwiV,cAAc,CAAC1+K,GAAD,EAAM9jK,CAAN,EAAS4rU,KAAT,CAA7B,CADG,GAEH4W,cAAc,CAAC1+K,GAAD,EAAMhzK,KAAN,EAAa86U,KAAb,CAFlB;AAGD;AAED;AACA;AACA;;;AACA,SAAS4W,cAAT,CAAwB1+K,GAAxB,EAA6BhzK,KAA7B,EAAoC86U,KAApC,EAA2C;AACzC,QAAM79T,IAAI,GAAG+1J,GAAG,CAAC/1J,IAAjB;;AAEA,MAAI,oBAASjd,KAAT,CAAJ,EAAqB;AACnB,WAAO8oV,MAAM,CAAC7rU,IAAD,CAAN,GAAe,qBAAM,2CAAN,CAAf,GACA00U,OAAO,CAAC10U,IAAD,CAAP,GAAgB69T,KAAK,CAACsN,QAAN,CAAepoV,KAAf,CAAhB,GACA4xV,SAAS,CAAC30U,IAAD,CAAT,GAAkB69T,KAAK,CAACwN,UAAN,CAAiBtoV,KAAjB,CAAlB,GACA86U,KAAK,CAACqF,SAAN,CAAgBngV,KAAK,CAACgwF,MAAtB,CAHP;AAID,GALD,MAKO;AACL,UAAMtsF,IAAI,GAAGsvK,GAAG,CAACtvK,IAAJ,IAAYiuV,OAAO,CAAC10U,IAAD,CAAhC;AACA,WAAOvZ,IAAI,IAAImuV,SAAS,CAAC7xV,KAAD,CAAjB,GAA2B86U,KAAK,CAACgX,OAAN,CAAc9xV,KAAK,CAAC0D,IAApB,EAA0B1D,KAAK,CAACssO,EAAhC,CAA3B,GACA5oO,IAAI,IAAIquV,UAAU,CAAC/xV,KAAD,CAAlB,GAA4B,oBAASA,KAAK,CAACwyH,KAAf,EAAsBxyH,KAAK,CAACssO,EAA5B,CAA5B,GACAw8G,MAAM,CAAC7rU,IAAD,CAAN,GAAe,oCAAgBjd,KAAhB,EAAuB86U,KAAvB,CAAf,GACAkX,MAAM,CAAC/0U,IAAD,CAAN,GAAe,eAAI69T,KAAK,CAACG,OAAN,CAAcj7U,KAAd,EAAqBoH,MAAzB,CAAf,GACAuqV,OAAO,CAAC10U,IAAD,CAAP,GAAgB,oBAASjd,KAAT,CAAhB,GACA4xV,SAAS,CAAC30U,IAAD,CAAT,GAAkB69T,KAAK,CAACwN,UAAN,CAAiBtoV,KAAjB,CAAlB,GACAA,KANP;AAOD;AACF;AAED;AACA;AACA;;;AACA,SAASuxV,mBAAT,CAA6Bv+K,GAA7B,EAAkCv8D,IAAlC,EAAwCqkO,KAAxC,EAA+C;AAC7C,MAAI,CAAC,wBAASrkO,IAAI,CAACpoG,IAAd,CAAL,EAA0B;AACxB,yBAAM,mDAAN;AACD;;AACD,SAAOysU,KAAK,CAACG,OAAN,CAAcxkO,IAAI,CAACpoG,IAAnB,EAAyB4jV,SAAzB,CAAmCnX,KAAnC,EAA0CrkO,IAAI,CAACx1G,GAA/C,CAAP;AACD;AAED;AACA;AACA;;;AACA,SAASuwV,kBAAT,CAA4Bx+K,GAA5B,EAAiCv8D,IAAjC,EAAuCqkO,KAAvC,EAA8C;AAC5C,QAAM96U,KAAK,GAAGy2G,IAAI,CAACu8D,GAAG,CAACz0K,IAAL,CAAlB;;AAEA,MAAIy0K,GAAG,CAAC71K,KAAR,EAAe;AACb,QAAI,CAAC,uBAAQ6C,KAAR,CAAL,EAAqB;AAAE;AACrB,2BAAM,mDAAmD,2BAAYA,KAAZ,CAAzD;AACD;;AACD,WAAOA,KAAK,CAACyG,GAAN,CAAUyI,CAAC,IAAIgjV,iBAAiB,CAACl/K,GAAD,EAAM9jK,CAAN,EAAS4rU,KAAT,CAAhC,CAAP;AACD,GALD,MAKO;AACL,WAAOoX,iBAAiB,CAACl/K,GAAD,EAAMhzK,KAAN,EAAa86U,KAAb,CAAxB;AACD;AACF;AAED;AACA;AACA;;;AACA,SAASoX,iBAAT,CAA2Bl/K,GAA3B,EAAgChzK,KAAhC,EAAuC86U,KAAvC,EAA8C;AAC5C,QAAM5vU,CAAC,GAAE8nK,GAAG,CAAC3yK,MAAJ,CAAW/D,MAApB;AACA,MAAIg1V,IAAJ,CAF4C,CAI5C;;AACA,OAAK,IAAIt0V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkO,CAApB,EAAuB,EAAElO,CAAzB,EAA4B;AAC1Bs0V,IAAAA,IAAI,GAAGt+K,GAAG,CAAC3yK,MAAJ,CAAWrD,CAAX,CAAP;;AACA,SAAK,MAAMsd,CAAX,IAAgBg3U,IAAI,CAACrwV,GAArB,EAA0B;AACxB,UAAIqwV,IAAI,CAACrwV,GAAL,CAASqZ,CAAT,MAAgBta,KAAK,CAACsa,CAAD,CAAzB,EAA8B;AAAEg3U,QAAAA,IAAI,GAAG,IAAP;AAAa;AAAQ;AACtD;;AACD,QAAIA,IAAJ,EAAU;AACX,GAX2C,CAY5C;;;AACA,MAAI,CAACA,IAAL,EAAW,qBAAM,4BAA4B,2BAAYtxV,KAAZ,CAAlC,EAbiC,CAe5C;;AACA,QAAMK,MAAM,GAAG,sBAAOmhV,eAAe,CAAC8P,IAAD,EAAOtxV,KAAP,EAAc86U,KAAd,CAAtB,EAA4CwW,IAAI,CAACrwV,GAAjD,CAAf;AACA,SAAO,eAAI65U,KAAK,CAACn9T,GAAN,CAAU,wBAAOtd,MAAP,CAAV,CAAJ,CAAP;AACD,EAED;;;AAEO,MAAMwxV,SAAS,GAAGluU,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAACjgB,IAA9B;;;;AAEA,MAAMquV,UAAU,GAAGpuU,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAAC6uG,KAA/B;;;;AAEA,MAAMw/N,MAAM,GAAGruU,CAAC,IAAIA,CAAC,KAAK,MAA1B;;;;AAEA,MAAMmlU,MAAM,GAAGnlU,CAAC,IAAIA,CAAC,KAAK,MAA1B;;;;AAEA,MAAMguU,OAAO,GAAGhuU,CAAC,IAAIA,CAAC,KAAK,OAA3B;;;;AAEA,MAAMiuU,SAAS,GAAGjuU,CAAC,IAAIA,CAAC,KAAK,SAA7B;;;;;;;;;;;;AChJP;;AACA;;AACA;;AACA;;;;AAEe,kBAAStV,IAAT,EAAes6G,KAAf,EAAsBmyN,KAAtB,EAA6B;AAC1C,MAAI4V,KAAJ,EAAWzvV,GAAX,EAAgB06B,EAAhB,EAAoB+zT,OAApB,EAA6Bh7I,MAA7B,CAD0C,CAG1C;;AACA,MAAI,CAACrmM,IAAL,EAAW;AACTqhV,IAAAA,OAAO,GAAG,eAAI5U,KAAK,CAACn9T,GAAN,CAAU,yBAAQ,IAAR,EAAc,CAAC,EAAD,CAAd,CAAV,CAAJ,CAAV;AACD,GAFD,CAIA;AAJA,OAKK,IAAI+yU,KAAK,GAAGriV,IAAI,CAACqiV,KAAjB,EAAwB;AAC3B,UAAI,CAAC/nO,KAAL,EAAY,qBAAM,kCAAN,EADe,CAG3B;;AACA,UAAI+nO,KAAK,CAACl+N,KAAN,IAAe,IAAnB,EAAyB;AACvBk9N,QAAAA,OAAO,GAAGh7I,MAAM,GAAGy9I,UAAU,CAACzB,KAAD,EAAQ5V,KAAR,CAA7B;AACD,OAFD,MAEO;AACL;AACA,YAAI,CAACzsU,IAAI,CAACrC,IAAV,EAAgB;AACd2vB,UAAAA,EAAE,GAAG,wBAAe,sBAAO;AACzB1e,YAAAA,IAAI,EAAK,WADgB;AAEzB6yN,YAAAA,OAAO,EAAE,qBAAM4gH,KAAK,CAAC5gH,OAAZ;AAFgB,WAAP,EAGjB4gH,KAAK,CAAC0B,SAHW,CAAf,EAGgBtX,KAHhB,CAAL;AAIAn/S,UAAAA,EAAE,CAACt7B,MAAH,CAAUY,GAAV,GAAgB65U,KAAK,CAACyN,MAAN,CAAamI,KAAK,CAAC5gH,OAAnB,CAAhB;AACAn0M,UAAAA,EAAE,CAACt7B,MAAH,CAAUm9N,KAAV,GAAkB20H,UAAU,CAACzB,KAAD,EAAQ5V,KAAR,CAA5B;AACA4U,UAAAA,OAAO,GAAGh7I,MAAM,GAAG,eAAIomI,KAAK,CAACn9T,GAAN,CAAUge,EAAV,CAAJ,CAAnB;AACD,SARD,MAQO;AACL+4K,UAAAA,MAAM,GAAG,eAAIomI,KAAK,CAACG,OAAN,CAAc5sU,IAAI,CAACrC,IAAnB,EAAyBomV,SAA7B,CAAT;AACD;;AAEDnxV,QAAAA,GAAG,GAAG65U,KAAK,CAACyN,MAAN,CAAamI,KAAK,CAAC5gH,OAAnB,EAA4B,IAA5B,CAAN;AACD;AACF,KA/ByC,CAiC1C;;;AACA,MAAI,CAAC4/G,OAAL,EAAc;AACZA,IAAAA,OAAO,GAAGyC,UAAU,CAAC9jV,IAAD,EAAOysU,KAAP,CAApB;AACD;;AAED,SAAO;AACL75U,IAAAA,GAAG,EAAEA,GADA;AAELu8N,IAAAA,KAAK,EAAEkyH,OAFF;AAGLh7I,IAAAA,MAAM,EAAEA;AAHH,GAAP;AAKD;;AAEM,SAASy9I,UAAT,CAAoB9jV,IAApB,EAA0BysU,KAA1B,EAAiC;AACtC,SAAOzsU,IAAI,CAAC6zU,IAAL,GAAY7zU,IAAZ,GACHA,IAAI,CAACrC,IAAL,IAAaqC,IAAI,CAACrC,IAAL,CAAUk2U,IAAvB,GAA8B7zU,IAAI,CAACrC,IAAnC,GACA,eAAI8uU,KAAK,CAACG,OAAN,CAAc5sU,IAAI,CAACrC,IAAnB,EAAyB0a,MAA7B,CAFJ;AAGD;;;;;;;;;ACtDD;;AACA;;AACA;;AAEe,SAAS2rU,SAAT,CAAmBvX,KAAnB,EAA0B9yT,KAA1B,EAAiCtB,MAAjC,EAAyCtf,MAAzC,EAAiDsoO,IAAjD,EAAuD;AACpE,OAAKorG,KAAL,GAAaA,KAAb,CADoE,CAC9C;;AACtB,OAAK9yT,KAAL,GAAaA,KAAb,CAFoE,CAE9C;;AACtB,OAAKtB,MAAL,GAAcA,MAAd,CAHoE,CAG9C;;AACtB,OAAKtf,MAAL,GAAcA,MAAd,CAJoE,CAI9C;AAEtB;;AACA,OAAKgrV,SAAL,GAAiB1iH,IAAjB,CAPoE,CASpE;;AACA,OAAK5sO,KAAL,GAAa,EAAb;AACD;;AAEDuvV,SAAS,CAACC,WAAV,GAAwB,UAASxX,KAAT,EAAgB74U,OAAhB,EAAyB;AAC/C,QAAMiJ,CAAC,GAAGjJ,OAAO,CAAC3F,MAAlB;AAAA,QACM8K,MAAM,GAAGnF,OAAO,CAACiJ,CAAC,GAAC,CAAH,CADtB;AAAA,QAEMwb,MAAM,GAAGzkB,OAAO,CAACiJ,CAAC,GAAC,CAAH,CAFtB;AAIA,MAAI8c,KAAK,GAAG/lB,OAAO,CAAC,CAAD,CAAnB;AAAA,MACIytO,IAAI,GAAG,IADX;AAAA,MAEI1yO,CAAC,GAAG,CAFR;;AAIA,MAAIgrB,KAAK,IAAIA,KAAK,CAAC/K,IAAN,KAAe,MAA5B,EAAoC;AAClC+K,IAAAA,KAAK,GAAG/lB,OAAO,CAAC,CAAD,CAAf;AACD,GAX8C,CAa/C;;;AACA64U,EAAAA,KAAK,CAACn9T,GAAN,CAAU1b,OAAO,CAAC,CAAD,CAAjB;;AACA,SAAOjF,CAAC,GAACkO,CAAT,EAAY,EAAElO,CAAd,EAAiB;AACfiF,IAAAA,OAAO,CAACjF,CAAD,CAAP,CAAWqD,MAAX,CAAkBm9N,KAAlB,GAA0B,eAAIv7N,OAAO,CAACjF,CAAC,GAAC,CAAH,CAAX,CAA1B;AACA89U,IAAAA,KAAK,CAACn9T,GAAN,CAAU1b,OAAO,CAACjF,CAAD,CAAjB;AACA,QAAIiF,OAAO,CAACjF,CAAD,CAAP,CAAWigB,IAAX,KAAoB,WAAxB,EAAqCyyN,IAAI,GAAGztO,OAAO,CAACjF,CAAD,CAAd;AACtC;;AAED,SAAO,IAAIq1V,SAAJ,CAAcvX,KAAd,EAAqB9yT,KAArB,EAA4BtB,MAA5B,EAAoCtf,MAApC,EAA4CsoO,IAA5C,CAAP;AACD,CAtBD;;AAwBA,SAAS6iH,QAAT,CAAkB//N,KAAlB,EAAyB;AACvB,SAAO,wBAASA,KAAT,IAAkBA,KAAlB,GAA0B,IAAjC;AACD;;AAED,SAASggO,YAAT,CAAsB1X,KAAtB,EAA6Bx5S,CAA7B,EAAgCt6B,IAAhC,EAAsC;AACpC,QAAMslO,EAAE,GAAG,qBAAUtlO,IAAI,CAAC20B,EAAf,EAAmB30B,IAAI,CAACwrH,KAAxB,CAAX;AACA,MAAIhyH,CAAJ;;AAEA,MAAI8gC,CAAC,CAACqvF,GAAN,EAAW;AACT,SAAK,IAAI3zH,CAAC,GAAG,CAAR,EAAWkO,CAAC,GAAGo2B,CAAC,CAACgrM,EAAF,CAAKhwO,MAAzB,EAAiCU,CAAC,GAAGkO,CAArC,EAAwC,EAAElO,CAA1C,EAA6C;AAC3C,UAAIskC,CAAC,CAACgrM,EAAF,CAAKtvO,CAAL,MAAYsvO,EAAhB,EAAoB;AACrB;AACF,GAJD,MAIO;AACLhrM,IAAAA,CAAC,CAACqvF,GAAF,GAAQ,CAAC,OAAD,CAAR;AACArvF,IAAAA,CAAC,CAACwZ,MAAF,GAAW,CAAC,IAAD,CAAX;AACAxZ,IAAAA,CAAC,CAACgrM,EAAF,GAAO,CAAC,OAAD,CAAP;AACD;;AACD,MAAItlO,IAAI,CAAC20B,EAAT,EAAa;AACX2F,IAAAA,CAAC,CAACqvF,GAAF,CAAM1zH,IAAN,CAAW,CAACuD,CAAC,GAACwG,IAAI,CAAC20B,EAAL,CAAQq0D,MAAX,IAAqB8qP,KAAK,CAACqF,SAAN,CAAgB3/U,CAAhB,CAArB,GAA0CwG,IAAI,CAAC20B,EAA1D;AACA2F,IAAAA,CAAC,CAACwZ,MAAF,CAAS79C,IAAT,CAAc69U,KAAK,CAACsN,QAAN,CAAephV,IAAI,CAACwrH,KAApB,CAAd;AACAlxF,IAAAA,CAAC,CAACgrM,EAAF,CAAKrvO,IAAL,CAAUqvO,EAAV;AACD;AACF;;AAED,SAAS14C,KAAT,CAAeknJ,KAAf,EAAsBnwJ,EAAtB,EAA0BpsL,IAA1B,EAAgCk0V,MAAhC,EAAwCjgO,KAAxC,EAA+C85D,MAA/C,EAAuDxpL,KAAvD,EAA8D;AAC5D,QAAM8wL,KAAK,GAAGjJ,EAAE,CAACpsL,IAAD,CAAF,KAAaosL,EAAE,CAACpsL,IAAD,CAAF,GAAW,EAAxB,CAAd;AAAA,QACMyI,IAAI,GAAG,mBAAQslL,MAAR,CADb;AAGA,MAAIhyK,CAAC,GAAGi4U,QAAQ,CAAC//N,KAAD,CAAhB;AAAA,MACItjH,CADJ;AAAA,MACOysB,EADP;;AAGA,MAAIrhB,CAAC,IAAI,IAAT,EAAe;AACbwgU,IAAAA,KAAK,GAAGnwJ,EAAE,CAACmwJ,KAAX;AACAxgU,IAAAA,CAAC,GAAGA,CAAC,IAAItT,IAAI,GAAG,MAAMA,IAAT,GAAgB,EAAxB,CAAL;AACAkI,IAAAA,CAAC,GAAG0kL,KAAK,CAACt5K,CAAD,CAAT;AACD;;AAED,MAAI,CAACpL,CAAL,EAAQ;AACN,UAAM7O,MAAM,GAAGisL,MAAM,GACjB;AAAC95D,MAAAA,KAAK,EAAE61N,iBAAR;AAAqB7qH,MAAAA,KAAK,EAAE7yC,EAAE,CAACiiK,SAAH,CAAa9R,KAAb,EAAoBtoN,KAApB,EAA2B85D,MAA3B;AAA5B,KADiB,GAEjB;AAAC95D,MAAAA,KAAK,EAAEsoN,KAAK,CAACsN,QAAN,CAAe51N,KAAf,CAAR;AAA+BgrG,MAAAA,KAAK,EAAE,eAAI7yC,EAAE,CAACjkK,MAAP;AAAtC,KAFJ;AAGA,QAAI1f,IAAJ,EAAU3G,MAAM,CAAC2G,IAAP,GAAc8zU,KAAK,CAAC+R,OAAN,CAAcvgK,MAAd,CAAd;AACV3wJ,IAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,iBAAM80U,MAAN,EAAcvgO,SAAd,EAAyB7xH,MAAzB,CAAV,CAAL;AACA,QAAIyC,KAAJ,EAAW6nL,EAAE,CAAC7nL,KAAH,CAAS0vH,KAAT,IAAkB72F,EAAlB;AACXzsB,IAAAA,CAAC,GAAG,eAAIysB,EAAJ,CAAJ;AACA,QAAIrhB,CAAC,IAAI,IAAT,EAAes5K,KAAK,CAACt5K,CAAD,CAAL,GAAWpL,CAAX;AAChB;;AACD,SAAOA,CAAP;AACD;;AAEDmjV,SAAS,CAACj1V,SAAV,GAAsB;AACpBwvV,EAAAA,SAAS,CAAC9R,KAAD,EAAQtoN,KAAR,EAAexrH,IAAf,EAAqB;AAC5B,UAAM2jL,EAAE,GAAG,IAAX;AAAA,UACMiJ,KAAK,GAAGjJ,EAAE,CAAC2B,MAAH,KAAc3B,EAAE,CAAC2B,MAAH,GAAY,EAA1B,CADd;AAAA,UAEMhyK,CAAC,GAAGi4U,QAAQ,CAAC//N,KAAD,CAFlB;AAIA,QAAItjH,CAAJ,EAAOhL,CAAP,EAAUo9B,CAAV;;AAEA,QAAIhnB,CAAC,IAAI,IAAT,EAAe;AACbwgU,MAAAA,KAAK,GAAGnwJ,EAAE,CAACmwJ,KAAX;AACA5rU,MAAAA,CAAC,GAAG0kL,KAAK,CAACt5K,CAAD,CAAT;AACD;;AAED,QAAI,CAACpL,CAAL,EAAQ;AACNoyB,MAAAA,CAAC,GAAG;AACFwuM,QAAAA,OAAO,EAAEgrG,KAAK,CAACsN,QAAN,CAAe51N,KAAf,EAAsB,KAAtB,CADP;AAEFgrG,QAAAA,KAAK,EAAE,eAAI7yC,EAAE,CAACjkK,MAAP;AAFL,OAAJ;AAIA,UAAI1f,IAAI,IAAIA,IAAI,CAACwrH,KAAjB,EAAwBggO,YAAY,CAAC1X,KAAD,EAAQx5S,CAAR,EAAWt6B,IAAX,CAAZ;AACxB9C,MAAAA,CAAC,GAAG42U,KAAK,CAACn9T,GAAN,CAAU,2BAAU2jB,CAAV,CAAV,CAAJ;AACApyB,MAAAA,CAAC,GAAG4rU,KAAK,CAACn9T,GAAN,CAAU,yBAAQ;AAAC6/M,QAAAA,KAAK,EAAE,eAAIt5N,CAAJ;AAAR,OAAR,CAAV,CAAJ;AACAgL,MAAAA,CAAC,GAAG;AAAC6+N,QAAAA,GAAG,EAAE7pO,CAAN;AAAS04U,QAAAA,GAAG,EAAE,eAAI1tU,CAAJ;AAAd,OAAJ;AACA,UAAIoL,CAAC,IAAI,IAAT,EAAes5K,KAAK,CAACt5K,CAAD,CAAL,GAAWpL,CAAX;AAChB,KAVD,MAUO,IAAIlI,IAAI,IAAIA,IAAI,CAACwrH,KAAjB,EAAwB;AAC7BggO,MAAAA,YAAY,CAAC1X,KAAD,EAAQ5rU,CAAC,CAAC6+N,GAAF,CAAM1tO,MAAd,EAAsB2G,IAAtB,CAAZ;AACD;;AAED,WAAOkI,CAAC,CAAC0tU,GAAT;AACD,GA5BmB;;AA8BpBzB,EAAAA,SAAS,GAAG;AACV,WAAO,eAAI,KAAK/zU,MAAT,CAAP;AACD,GAhCmB;;AAkCpBklV,EAAAA,SAAS,CAACxR,KAAD,EAAQtoN,KAAR,EAAe;AACtB,WAAOohE,KAAK,CAACknJ,KAAD,EAAQ,IAAR,EAAc,QAAd,EAAwB,QAAxB,EAAkCtoN,KAAlC,EAAyC,KAAzC,CAAZ;AACD,GApCmB;;AAsCpB65N,EAAAA,SAAS,CAACvR,KAAD,EAAQtoN,KAAR,EAAe;AACtB,WAAOohE,KAAK,CAACknJ,KAAD,EAAQ,IAAR,EAAc,QAAd,EAAwB,QAAxB,EAAkCtoN,KAAlC,EAAyC,KAAzC,CAAZ;AACD,GAxCmB;;AA0CpB25N,EAAAA,SAAS,CAACrR,KAAD,EAAQtoN,KAAR,EAAexrH,IAAf,EAAqB;AAC5B,WAAO4sL,KAAK,CAACknJ,KAAD,EAAQ,IAAR,EAAc,MAAd,EAAsB,QAAtB,EAAgCtoN,KAAhC,EAAuCxrH,IAAI,IAAI,IAA/C,CAAZ;AACD,GA5CmB;;AA8CpBirV,EAAAA,SAAS,CAACnX,KAAD,EAAQtoN,KAAR,EAAe;AACtB,WAAOohE,KAAK,CAACknJ,KAAD,EAAQ,IAAR,EAAc,QAAd,EAAwB,YAAxB,EAAsCtoN,KAAtC,EAA6C,KAA7C,CAAZ;AACD,GAhDmB;;AAkDpB0oN,EAAAA,SAAS,CAACJ,KAAD,EAAQtoN,KAAR,EAAe;AACtB,WAAOohE,KAAK,CAACknJ,KAAD,EAAQ,IAAR,EAAc,QAAd,EAAwB,YAAxB,EAAsCtoN,KAAtC,EAA6C,IAA7C,EAAmD,IAAnD,CAAZ;AACD;;AApDmB,CAAtB;;;;;;;;;AC3FA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS/b,IAAT,EAAeqkO,KAAf,EAAsBnyN,KAAtB,EAA6B;AAC1C,QAAM+nO,KAAK,GAAGj6O,IAAI,CAACpoG,IAAL,CAAUqiV,KAAxB;AAAA,QACMnyV,IAAI,GAAGmyV,KAAK,CAACnyV,IADnB;AAAA,QAEMyN,IAAI,GAAG,sBAAW0kV,KAAX,EAAkB5V,KAAlB,CAFb;AAGA,MAAIn/S,EAAJ;;AAEA,MAAI,CAAC+0T,KAAK,CAACnyV,IAAX,EAAiB;AACf,yBAAM,6BAA6B,2BAAYmyV,KAAZ,CAAnC;AACD;;AACD,MAAI,CAACA,KAAK,CAAC1kV,IAAX,EAAiB;AACf,yBAAM,sCAAsC,2BAAY0kV,KAAZ,CAA5C;AACD;;AAED,MAAIA,KAAK,CAACl+N,KAAV,EAAiB;AACf72F,IAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,0BAAS;AACtB60G,MAAAA,KAAK,EAAEsoN,KAAK,CAACsN,QAAN,CAAesI,KAAK,CAACl+N,KAArB,CADe;AAEtBgrG,MAAAA,KAAK,EAAExxN;AAFe,KAAT,CAAV,CAAL;AAID,GALD,MAKO,IAAI0kV,KAAK,CAAC5gH,OAAV,EAAmB;AACxBn0M,IAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,uBAAM;AACnB1c,MAAAA,GAAG,EAAI65U,KAAK,CAACyN,MAAN,CAAamI,KAAK,CAAC5gH,OAAnB,CADY;AAEnBnnH,MAAAA,KAAK,EAAE,eAAImyN,KAAK,CAACyJ,KAAN,CAAY57N,KAAK,CAAC+rF,MAAlB,CAAJ,CAFY;AAGnB8oB,MAAAA,KAAK,EAAExxN;AAHY,KAAN,CAAV,CAAL;AAKD,GANM,MAMA;AACL,yBAAM,0CAA0C,2BAAY0kV,KAAZ,CAAhD;AACD,GA1ByC,CA4B1C;;;AACA,QAAMgC,QAAQ,GAAG5X,KAAK,CAAC54G,IAAN,EAAjB;AAAA,QACMpvK,MAAM,GAAG4/R,QAAQ,CAAC/0U,GAAT,CAAa,0BAAb,CADf;AAAA,QAEMvW,MAAM,GAAGsrV,QAAQ,CAAC/0U,GAAT,CAAa,uBAAM;AAAC6/M,IAAAA,KAAK,EAAE,eAAI1qK,MAAJ;AAAR,GAAN,CAAb,CAFf;AAGA4/R,EAAAA,QAAQ,CAACC,OAAT,CAAiBp0V,IAAjB,EAAuB,IAAI8zV,kBAAJ,CAAcK,QAAd,EAAwB5/R,MAAxB,EAAgCA,MAAhC,EAAwC1rD,MAAxC,CAAvB;AACAsrV,EAAAA,QAAQ,CAAC3K,SAAT,CAAmB,QAAnB,EAA6B,IAA7B,EAjC0C,CAmC1C;;AACApsT,EAAAA,EAAE,CAACt7B,MAAH,CAAUkzO,OAAV,GAAoB;AAClBuvG,IAAAA,QAAQ,EAAE4P,QAAQ,CAACxzS,KAAT,CAAeu3D,IAAf,EAAqBm8O,SAArB;AADQ,GAApB;AAGD;;;;;;;;;AC7CD;;AAEe,kBAASn8O,IAAT,EAAeqkO,KAAf,EAAsB9yT,KAAtB,EAA6B;AAC1C,QAAM2T,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,0BAAS;AAAC6/M,IAAAA,KAAK,EAAEx1M,KAAK,CAACw1M;AAAd,GAAT,CAAV,CAAX;AAAA,QACMk1H,QAAQ,GAAG5X,KAAK,CAAC54G,IAAN,EADjB;AAGAwwH,EAAAA,QAAQ,CAAC/0U,GAAT,CAAa,wBAAb;AACA+0U,EAAAA,QAAQ,CAAC3K,SAAT,CAAmB,QAAnB,EAA6B,IAA7B,EAL0C,CAO1C;;AACApsT,EAAAA,EAAE,CAACt7B,MAAH,CAAUkzO,OAAV,GAAoB;AAClBuvG,IAAAA,QAAQ,EAAE4P,QAAQ,CAACxzS,KAAT,CAAeu3D,IAAf,EAAqBm8O,SAArB;AADQ,GAApB;AAGD;;;;;;;;;ACbD;;AACA;;AAEe,kBAASn8O,IAAT,EAAeqkO,KAAf,EAAsBv8U,IAAtB,EAA4B;AACzC,QAAM4xE,MAAM,GAAGsmC,IAAI,CAACtmC,MAApB;AAAA,QACMktJ,MAAM,GAAG5mH,IAAI,CAAC4mH,MADpB;AAAA,QAEM+gH,MAAM,GAAG3nO,IAAI,CAAC2nO,MAFpB;AAAA,QAGM9gH,MAAM,GAAG7mH,IAAI,CAAC6mH,MAHpB;AAAA,QAIMl2N,MAAM,GAAGqvG,IAAI,CAACrvG,MAJpB;AAAA,QAKMu0B,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,qBAAV,CALX;AAOA,QAAMuuE,MAAM,GAAG,QAAQuqB,IAAI,CAACo8O,OAAb,GAAuB,WAAvB,GACXt0V,IADW,GACJ,IADI,GAEX,CAAC8+N,MAAD,EAASltJ,MAAT,EAAiBiuQ,MAAjB,EAAyB9gH,MAAzB,EAAiCl2N,MAAjC,EACGX,GADH,CACOkd,CAAC,IAAIA,CAAC,IAAI,IAAL,GAAY,MAAZ,GAAqBA,CADjC,EAEG/iB,IAFH,CAEQ,GAFR,CAFW,GAKX,MALJ;AAOA,QAAM8C,IAAI,GAAG,oCAAgBwoF,MAAhB,EAAwB4uP,KAAxB,CAAb;AACAn/S,EAAAA,EAAE,CAACuwD,MAAH,GAAYxoF,IAAI,CAAC08U,KAAjB;AACAzkT,EAAAA,EAAE,CAACt7B,MAAH,GAAYqD,IAAI,CAAC48U,OAAjB;AACD;;;;;;;;;ACrBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS7pO,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,QAAMl+D,IAAI,GAAG,mBAAQnmK,IAAR,CAAb;AAAA,QACMkS,KAAK,GAAGlS,IAAI,CAACx5F,IAAL,KAAcmxU,oBAD5B;AAAA,QAEMsC,KAAK,GAAGj6O,IAAI,CAACpoG,IAAL,IAAaooG,IAAI,CAACpoG,IAAL,CAAUqiV,KAFrC;AAAA,QAGMb,OAAO,GAAGp5O,IAAI,CAACo5O,OAHrB;AAKA,MAAI99I,MAAM,GAAGt7F,IAAI,CAACs7F,MAAL,IAAe6qE,IAAI,KAAKwP,gBAAxB,IAAqCxP,IAAI,KAAKuP,gBAA3D;AAAA,MACIx7J,GADJ;AAAA,MACSh1F,EADT;AAAA,MACa8wM,KADb;AAAA,MACoBm2G,GADpB;AAAA,MACyBrkV,IADzB;AAAA,MAC+Bu0V,SAD/B;AAAA,MAC0CC,QAD1C;AAGA,QAAM/8E,MAAM,GAAG4G,IAAI,KAAK8pE,eAAT,IAAqB30I,MAArB,IAA+B2+I,KAA9C,CATmC,CAWnC;;AACA,QAAM1oU,KAAK,GAAG,mBAAUyuF,IAAI,CAACpoG,IAAf,EAAqBs6G,KAArB,EAA4BmyN,KAA5B,CAAd,CAZmC,CAcnC;;AACAn/S,EAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,0BAAS;AACtB1c,IAAAA,GAAG,EAAI+mB,KAAK,CAAC/mB,GAAN,KAAcw1G,IAAI,CAACx1G,GAAL,GAAW,oBAASw1G,IAAI,CAACx1G,GAAd,CAAX,GAAgCixH,SAA9C,CADe;AAEtBsrG,IAAAA,KAAK,EAAEx1M,KAAK,CAACw1M,KAFS;AAGtBn1B,IAAAA,KAAK,EAAE,CAAC1/E;AAHc,GAAT,CAAV,CAAL;AAKA,QAAMqqO,OAAO,GAAG,eAAIr3T,EAAJ,CAAhB,CApBmC,CAsBnC;;AACAA,EAAAA,EAAE,GAAG8wM,KAAK,GAAGquG,KAAK,CAACn9T,GAAN,CAAU,yBAAQ;AAAC6/M,IAAAA,KAAK,EAAEw1H;AAAR,GAAR,CAAV,CAAb,CAvBmC,CAyBnC;;AACAr3T,EAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,sBAAK;AAClBk/P,IAAAA,OAAO,EAAM,yBAAWpmK,IAAX,CADK;AAElBihK,IAAAA,WAAW,EAAE,0BAAYjhK,IAAI,CAACihK,WAAjB,EAA8BojE,KAA9B,CAFK;AAGlB51S,IAAAA,IAAI,EAAS,mBAAKuxE,IAAI,CAACvxE,IAAV,EAAgB41S,KAAhB,CAHK;AAIlB9rK,IAAAA,OAAO,EAAM;AAACikL,MAAAA,QAAQ,EAAE;AAAX,KAJK;AAKlB/yI,IAAAA,MAAM,EAAO46H,KAAK,CAAC9yE,MAAN,EALK;AAMlBtzD,IAAAA,MAAM,EAAOomI,KAAK,CAACjpI,OAAN,CAAc6C,MAAd,GAAuBomI,KAAK,CAACqF,SAAN,CAAgB,QAAhB,CAAvB,GAAmD,IAN9C;AAOlBr9U,IAAAA,KAAK,EAAQg4U,KAAK,CAACoY,QAAN,EAPK;AAQlB11H,IAAAA,KAAK,EAAQ,eAAI7hM,EAAJ;AARK,GAAL,CAAV,CAAL;AAUA,QAAMw3T,OAAO,GAAG,eAAIx3T,EAAJ,CAAhB,CApCmC,CAsCnC;;AACAA,EAAAA,EAAE,GAAGinT,GAAG,GAAG9H,KAAK,CAACn9T,GAAN,CAAU,wBAAO,qBAC1B84F,IAAI,CAACjsG,MADqB,EACbisG,IAAI,CAACx5F,IADQ,EACF2/P,IADE,EACInmK,IAAI,CAACgtK,KADT,EACgBq3D,KADhB,EAE1B;AAAC3mU,IAAAA,GAAG,EAAE,KAAN;AAAaqpN,IAAAA,KAAK,EAAE21H;AAApB,GAF0B,CAAP,CAAV,CAAX,CAvCmC,CA4CnC;;AACAx3T,EAAAA,EAAE,CAACt7B,MAAH,CAAUq0M,MAAV,GAAmBomI,KAAK,CAACtwU,MAAN,EAAnB,CA7CmC,CA+CnC;;AACA,MAAIisG,IAAI,CAACwvE,SAAT,EAAoB;AAClBxvE,IAAAA,IAAI,CAACwvE,SAAL,CAAenlL,OAAf,CAAuB6iB,CAAC,IAAI;AAC1B,YAAMk6F,EAAE,GAAG,wBAAel6F,CAAf,EAAkBm3T,KAAlB,CAAX;AAAA,YACMzpE,EAAE,GAAGxzJ,EAAE,CAACiC,QADd;;AAEA,UAAIuxJ,EAAE,CAAC+hF,SAAH,IAAgB/hF,EAAE,CAACtuC,OAAvB,EAAgC;AAC9B,6BAAM,+CAAN;AACD;;AACD,UAAI,CAACsuC,EAAE,CAACzuC,KAAR,EAAeggH,GAAG,CAACviV,MAAJ,CAAW8T,GAAX,GAAiB,IAAjB,CANW,CAMY;;AACtC0pG,MAAAA,EAAE,CAACx9G,MAAH,CAAUm9N,KAAV,GAAkB,eAAI7hM,EAAJ,CAAlB;AACAm/S,MAAAA,KAAK,CAACn9T,GAAN,CAAUge,EAAE,GAAGkiF,EAAf;AACD,KATD;AAUD,GA3DkC,CA6DnC;;;AACA,MAAIpH,IAAI,CAACzvG,IAAT,EAAe;AACb20B,IAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,2BAAU;AACvB3W,MAAAA,IAAI,EAAG8zU,KAAK,CAACwN,UAAN,CAAiB7xO,IAAI,CAACzvG,IAAtB,CADgB;AAEvBw2N,MAAAA,KAAK,EAAE,eAAI7hM,EAAJ;AAFgB,KAAV,CAAV,CAAL;AAID;;AAED,QAAM03T,SAAS,GAAG,eAAI13T,EAAJ,CAAlB,CArEmC,CAuEnC;;AACA,MAAI+0T,KAAK,IAAI3+I,MAAb,EAAqB;AACnBA,IAAAA,MAAM,GAAG+oI,KAAK,CAACn9T,GAAN,CAAU,4BAAW;AAC5Bo0L,MAAAA,MAAM,EAAI+oI,KAAK,CAACiS,cAAN,CAAqBt2O,IAAI,CAACs7F,MAA1B,CADkB;AAE5B2/E,MAAAA,OAAO,EAAGopD,KAAK,CAACppD,OAFY;AAG5BxiB,MAAAA,IAAI,EAAMikF,OAHkB;AAI5B31H,MAAAA,KAAK,EAAK61H;AAJkB,KAAX,CAAV,CAAT;AAMAP,IAAAA,SAAS,GAAG,eAAI/gJ,MAAJ,CAAZ;AACD,GAhFkC,CAkFnC;;;AACA,QAAM+jE,KAAK,GAAGglE,KAAK,CAACn9T,GAAN,CAAU,uBAAM;AAACuxP,IAAAA,IAAI,EAAEikF,OAAP;AAAgB31H,IAAAA,KAAK,EAAEs1H,SAAS,IAAIO;AAApC,GAAN,CAAV,CAAd;AACAN,EAAAA,QAAQ,GAAG,eAAIj9E,KAAJ,CAAX,CApFmC,CAsFnC;;AACA,MAAIntJ,KAAJ,EAAW;AACT;AACA,QAAIqtJ,MAAJ,EAAY;AAAErlJ,MAAAA,GAAG,GAAGmqN,KAAK,CAACyF,SAAZ;AAAuB5vN,MAAAA,GAAG,CAACvpG,GAAJ;AAAW,UAAI2qL,MAAJ,EAAYphF,GAAG,CAACvpG,GAAJ;AAAY;;AAExE0zT,IAAAA,KAAK,CAACwY,SAAN,CAAgBD,SAAhB,EAA2BP,SAAS,IAAIC,QAAxC,EAAkDC,OAAlD;AACAtC,IAAAA,KAAK,GAAG,oBAAWj6O,IAAX,EAAiBqkO,KAAjB,EAAwB9yT,KAAxB,CAAH,CAA2C;AAA3C,MACCguP,MAAM,GAAG,sBAAav/J,IAAb,EAAmBqkO,KAAnB,EAA0B9yT,KAA1B,CAAH,CAAoC;AAApC,MACN8yT,KAAK,CAAC57R,KAAN,CAAYu3D,IAAZ,CAFN,CALS,CAOgB;;AACzBqkO,IAAAA,KAAK,CAACyY,QAAN;;AAEA,QAAIv9E,MAAJ,EAAY;AAAE,UAAIjkE,MAAJ,EAAYphF,GAAG,CAAC1zH,IAAJ,CAAS80M,MAAT;AAAkBphF,MAAAA,GAAG,CAAC1zH,IAAJ,CAAS64Q,KAAT;AAAkB;AAC/D,GAlGkC,CAoGnC;;;AACA,MAAI+5E,OAAJ,EAAa;AACXkD,IAAAA,QAAQ,GAAGS,YAAY,CAAC3D,OAAD,EAAUkD,QAAV,EAAoBjY,KAApB,CAAvB;AACD,GAvGkC,CAyGnC;;;AACA,QAAMh7D,MAAM,GAAGg7D,KAAK,CAACn9T,GAAN,CAAU,wBAAO;AAAC6/M,IAAAA,KAAK,EAAEu1H;AAAR,GAAP,CAAV,CAAf;AAAA,QACMU,KAAK,GAAG3Y,KAAK,CAACn9T,GAAN,CAAU,uBAAM;AAAC6/M,IAAAA,KAAK,EAAE,eAAIsiD,MAAJ;AAAR,GAAN,EAA4B5tJ,SAA5B,EAAuC4oN,KAAK,CAACpmI,MAAN,EAAvC,CAAV,CADd,CA1GmC,CA6GnC;AACA;;AACA,MAAIj+F,IAAI,CAACl4G,IAAL,IAAa,IAAjB,EAAuB;AACrBA,IAAAA,IAAI,GAAGk4G,IAAI,CAACl4G,IAAZ;AACAu8U,IAAAA,KAAK,CAAC6X,OAAN,CAAcp0V,IAAd,EAAoB,IAAI8zV,kBAAJ,CAAcvX,KAAd,EAAqBruG,KAArB,EAA4BqzC,MAA5B,EAAoC2zE,KAApC,CAApB;AACA,QAAIh9O,IAAI,CAAC54G,EAAT,EAAa44G,IAAI,CAAC54G,EAAL,CAAQiD,OAAR,CAAgBjD,EAAE,IAAI;AACjC,UAAIA,EAAE,CAACw/N,MAAH,IAAax/N,EAAE,CAACsyE,MAAhB,IAA0BtyE,EAAE,CAACugV,MAAjC,EAAyC;AACvC,6BAAM,qCAAN;AACD;;AACD,4BAAavgV,EAAb,EAAiBi9U,KAAjB,EAAwBv8U,IAAxB;AACD,KALY;AAMd;AACF;;AAED,SAASi1V,YAAT,CAAsB3D,OAAtB,EAA+B/8R,MAA/B,EAAuCgoR,KAAvC,EAA8C;AAC5C,QAAM7sS,MAAM,GAAG4hT,OAAO,CAAC5hT,MAAvB;AAAA,QACM6nO,KAAK,GAAG+5E,OAAO,CAAC/5E,KADtB;AAAA,QAEMlnQ,GAAG,GAAGihV,OAAO,CAACnhE,UAFpB;AAIA,QAAMruR,MAAM,GAAG;AACbquR,IAAAA,UAAU,EAAE,oBAAS9/Q,GAAT,IAAgBksU,KAAK,CAACqF,SAAN,CAAgBvxU,GAAG,CAACohF,MAApB,CAAhB,GAA8CphF,GAD7C;AAEbq/B,IAAAA,MAAM,EAAE,oBAASA,MAAT,IAAmB6sS,KAAK,CAACqF,SAAN,CAAgBlyS,MAAM,CAAC+hD,MAAvB,CAAnB,GAAoD/hD,MAF/C;AAGbuvL,IAAAA,KAAK,EAAG1qK;AAHK,GAAf;;AAMA,MAAI+8R,OAAO,CAAC37I,KAAZ,EAAmB;AACjB7zM,IAAAA,MAAM,CAAC2G,IAAP,GAAc8zU,KAAK,CAACwN,UAAN,CAAiB;AAAC91N,MAAAA,KAAK,EAAEq9N,OAAO,CAAC37I;AAAhB,KAAjB,CAAd;AACD;;AAED,MAAI4hE,KAAJ,EAAW;AACT,UAAMqkC,GAAG,GAAGrkC,KAAK,CAAC2Y,SAAlB;AACApuR,IAAAA,MAAM,CAACuuR,cAAP,GAAwB,oBAASurB,GAAT,IAAgB2gC,KAAK,CAACqF,SAAN,CAAgBhmC,GAAG,CAACnqN,MAApB,CAAhB,GAA8C,CAACmqN,GAAvE;AACA95S,IAAAA,MAAM,CAACsuR,UAAP,GAAoBmsD,KAAK,CAACsB,QAAN,CAAetmE,KAAK,CAACjjQ,KAArB,CAApB;AACAxS,IAAAA,MAAM,CAACwuR,WAAP,GAAqB/Y,KAAK,CAAC7G,MAA3B;AACD;;AAED,SAAO,eAAI6rE,KAAK,CAACn9T,GAAN,CAAU,yBAAQtd,MAAR,CAAV,CAAJ,CAAP;AACD;;;;;;;;;ACnKD;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;AAEe,kBAASo2G,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,QAAM14U,MAAM,GAAG04U,KAAK,CAAC14U,MAAN,CAAa0vR,MAA5B;AAAA,QACMtnR,MAAM,GAAGisG,IAAI,CAACjsG,MAAL,IAAe,EAD9B;AAAA,QAEMmZ,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAFV;AAAA,QAGMsxV,YAAY,GAAGlpV,MAAM,CAACsnR,MAAP,IAAiB,EAHtC;AAAA,QAIMvzR,IAAI,GAAGm1V,YAAY,CAACn1V,IAAb,IAAqB2zH,SAJlC;AAAA,QAKMwlJ,WAAW,GAAGg8E,YAAY,CAACh8E,WALjC;AAAA,QAMM+L,KAAK,GAAGiwE,YAAY,CAACjwE,KAN3B;AAAA,QAOMtkB,MAAM,GAAG,EAPf;;AASA,MAAItsP,KAAK,GAAG,CAAZ;AAAA,MAAe8gV,WAAf;AAAA,MAA4BtzV,MAA5B;AAAA,MAAoCyxK,QAApC,CAVmC,CAYnC;;AACAq8K,0BAAartV,OAAb,CAAqBN,CAAC,IAAIi2G,IAAI,CAACj2G,CAAD,CAAJ,IACrB2+P,MAAM,CAAC3+P,CAAD,CAAN,GAAYi2G,IAAI,CAACj2G,CAAD,CAAhB,EAAqBqS,KAAK,GAAGA,KAAK,IAAI4jG,IAAI,CAACj2G,CAAD,CADrB,IAC4B,CADtD;;AAGA,MAAI,CAACqS,KAAL,EAAY,qBAAM,iCAAN,EAhBuB,CAkBnC;;AACA,QAAMoK,IAAI,GAAG22U,UAAU,CAACn9O,IAAD,EAAOqkO,KAAK,CAAC+Y,SAAN,CAAgBhhV,KAAhB,CAAP,CAAvB,CAnBmC,CAqBnC;;AACA,QAAMkpN,KAAK,GAAG;AACZz+N,IAAAA,KAAK,EAAGm5G,IAAI,CAACn5G,KAAL,IAAc,IADV;AAEZ6hQ,IAAAA,MAAM,EAAEA,MAFI;AAGZliP,IAAAA,IAAI,EAAIA,IAHI;AAIZu1Q,IAAAA,KAAK,EAAGv1Q,IAAI,KAAK,QAAT,IAAsB0G,CAAC,CAAC8qU,UAAF;AAJlB,GAAd;AAMA,QAAMiB,OAAO,GAAG,gBAAI5U,KAAK,CAACn9T,GAAN,CAAU,yBAAQ,IAAR,EAAc,CAACo+M,KAAD,CAAd,CAAV,CAAJ,CAAhB,CA5BmC,CA8BnC;;AACA,QAAM+3H,WAAW,GAAG;AAAC//D,IAAAA,KAAK,EAAE;AAAC5wR,MAAAA,CAAC,EAAE;AAACnD,QAAAA,KAAK,EAAE;AAAR,OAAJ;AAAgB0hB,MAAAA,CAAC,EAAE;AAAC1hB,QAAAA,KAAK,EAAE;AAAR;AAAnB;AAAR,GAApB,CA/BmC,CAiCnC;;AACA,QAAM+zV,QAAQ,GAAG,gBAAIjZ,KAAK,CAACn9T,GAAN,CAAU,+BAActd,MAAM,GAAG;AACpD4c,IAAAA,IAAI,EAAKA,IAD2C;AAEpDpK,IAAAA,KAAK,EAAIioU,KAAK,CAACsB,QAAN,CAAevpU,KAAf,CAF2C;AAGpDkiE,IAAAA,KAAK,EAAI+lQ,KAAK,CAACiS,cAAN,CAAqBppU,CAAC,CAAC,WAAD,CAAtB,CAH2C;AAIpDqvD,IAAAA,KAAK,EAAI8nQ,KAAK,CAACvmI,QAAN,CAAe5wL,CAAC,CAAC,aAAD,CAAhB,CAJ2C;AAKpDvc,IAAAA,MAAM,EAAG0zU,KAAK,CAACiS,cAAN,CAAqBt2O,IAAI,CAACrvG,MAA1B,CAL2C;AAMpDs+N,IAAAA,OAAO,EAAEo1G,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAACu9O,WAApB,CAN2C;AAOpDvsI,IAAAA,UAAU,EAAEqzH,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAACgxG,UAApB,CAPwC;AAQpDrB,IAAAA,eAAe,EAAE00H,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAAC8I,MAApB;AARmC,GAAvB,CAAV,CAAJ,CAAjB,CAlCmC,CA6CnC;;AACA,MAAItiG,IAAI,KAAK6qP,mBAAb,EAAuB;AACrBh2F,IAAAA,QAAQ,GAAG,CACT,6BAAer7D,IAAf,EAAqB5jG,KAArB,EAA4BzQ,MAA5B,EAAoCoI,MAAM,CAACgc,QAA3C,CADS,EAET,mCAAqBiwF,IAArB,EAA2Br0G,MAA3B,EAAmCoI,MAAM,CAAC6mF,MAA1C,EAAkD0iQ,QAAlD,CAFS,CAAX,CADqB,CAKrB;;AACA1zV,IAAAA,MAAM,CAAC00E,KAAP,GAAe10E,MAAM,CAAC00E,KAAP,IAAgB+lQ,KAAK,CAACqF,SAAN,CAC5B,kBAAiB,kBAAMx8T,CAAC,CAACirU,cAAF,EAAN,CAA0B,SADf,CAA/B;AAGD,GATD,CAWA;AAXA,OAYK,IAAI3xU,IAAI,KAAK0hP,mBAAb,EAAuB;AAC1B7sF,MAAAA,QAAQ,GAAG,CACT,qCAAuBr7D,IAAvB,EAA6B5jG,KAA7B,EAAoCzQ,MAApC,EAA4CoI,MAAM,CAACgc,QAAnD,EAA6DutU,QAA7D,CADS,EAET,mCAAqBt9O,IAArB,EAA2Br0G,MAA3B,EAAmCoI,MAAM,CAAC6mF,MAA1C,EAAkD0iQ,QAAlD,CAFS,CAAX;AAID,KALI,CAOL;AAPK,SAQA;AACH;AACAJ,QAAAA,WAAW,GAAG,4CAAmBl9O,IAAnB,EAAyBr0G,MAAzB,CAAd;AACA0vK,QAAAA,QAAQ,GAAG,CACT,iCAAmBr7D,IAAnB,EAAyBr0G,MAAzB,EAAiCoI,MAAjC,EAAyCupV,QAAzC,EAAmD,kBAAMJ,WAAW,CAACnjV,OAAlB,CAAnD,CADS,CAAX,CAHG,CAMH;;AACAnQ,QAAAA,MAAM,CAACoE,IAAP,GAAcwvV,cAAc,CAACx9O,IAAD,EAAOqkO,KAAP,EAAchpK,QAAQ,CAAC,CAAD,CAAR,CAAYn8B,KAA1B,CAA5B;AACD,OA1EkC,CA4EnC;;;AACAm8B,EAAAA,QAAQ,GAAG,CACT,yBAAW;AACT8qG,IAAAA,IAAI,EAAEqqE,sBADG;AAET54U,IAAAA,IAAI,EAAEqhV,OAFG;AAGTllV,IAAAA,MAAM,EAAEspV,WAHC;AAITn+M,IAAAA,KAAK,EAAEm8B,QAJE;AAKTigC,IAAAA,MAAM,EAAE4hJ,WALC;AAMTj8E,IAAAA;AANS,GAAX,CADS,CAAX,CA7EmC,CAwFnC;;AACA,MAAI37C,KAAK,CAACz+N,KAAV,EAAiB;AACfw0K,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,0BAAYw5G,IAAZ,EAAkBr0G,MAAlB,EAA0BoI,MAAM,CAAClN,KAAjC,EAAwCoyV,OAAxC,CAAd;AACD,GA3FkC,CA6FnC;;;AACA,SAAO,mBACL,yBAAW;AACT9yE,IAAAA,IAAI,EAASyP,iBADJ;AAETh+Q,IAAAA,IAAI,EAASqhV,OAFJ;AAGTllV,IAAAA,MAAM,EAAO,wBAAa0pV,iBAAiB,CAACvwU,CAAD,EAAI8yF,IAAJ,EAAUr0G,MAAV,CAA9B,EAAiDsxV,YAAjD,EAA+D7S,eAA/D,CAHJ;AAITlrM,IAAAA,KAAK,EAAQm8B,QAJJ;AAKTgrG,IAAAA,IAAI,EAASn5P,CAAC,CAAC,MAAD,CALL;AAMTo5P,IAAAA,WAAW,EAAEp5P,CAAC,CAAC,aAAD,CANL;AAOT4wP,IAAAA,MAAM,EAAO5wP,CAAC,CAAC,QAAD,CAPL;AAQTplB,IAAAA,IARS;AASTm5Q,IAAAA,WATS;AAUT+L,IAAAA;AAVS,GAAX,CADK,EAaLq3D,KAbK,CAAP;AAeD;;AAED,SAAS8Y,UAAT,CAAoBn9O,IAApB,EAA0Bo9O,SAA1B,EAAqC;AACnC,MAAI52U,IAAI,GAAGw5F,IAAI,CAACx5F,IAAL,IAAa4vQ,kBAAxB;;AAEA,MAAI,CAACp2K,IAAI,CAACx5F,IAAN,IAAck3U,UAAU,CAAC19O,IAAD,CAAV,KAAqB,CAAnC,KAAyCA,IAAI,CAACjpG,IAAL,IAAaipG,IAAI,CAACk6J,MAA3D,CAAJ,EAAwE;AACtE1zP,IAAAA,IAAI,GAAG,6BAAa42U,SAAb,IAA0B/rF,mBAA1B,GACH,+BAAe+rF,SAAf,IAA4Bl1F,mBAA5B,GACAkuB,kBAFJ;AAGD;;AAED,SAAO5vQ,IAAI,KAAK6qP,mBAAT,GAAoB7qP,IAApB,GACH,+BAAe42U,SAAf,IAA4Bl1F,mBAA5B,GACAmJ,mBAFJ;AAGD;;AAED,SAASqsF,UAAT,CAAoB19O,IAApB,EAA0B;AACxB,SAAO03O,wBAAa5kV,MAAb,CAAoB,CAACwrE,KAAD,EAAQ93D,IAAR,KAAiB83D,KAAK,IAAI0hC,IAAI,CAACx5F,IAAD,CAAJ,GAAa,CAAb,GAAiB,CAArB,CAA1C,EAAmE,CAAnE,CAAP;AACD;;AAED,SAASi3U,iBAAT,CAA2BvwU,CAA3B,EAA8B8yF,IAA9B,EAAoCr0G,MAApC,EAA4C;AAC1C,QAAMoI,MAAM,GAAG;AAACupR,IAAAA,KAAK,EAAE,EAAR;AAAY7nM,IAAAA,MAAM,EAAE;AAApB,GAAf;AAEA,yBAAY1hF,MAAZ,EAAoB;AAClBykQ,IAAAA,MAAM,EAAQtrP,CAAC,CAAC,QAAD,CADG;AAElBha,IAAAA,MAAM,EAAQga,CAAC,CAAC,QAAD,CAFG;AAGlBlK,IAAAA,OAAO,EAAOkK,CAAC,CAAC,SAAD,CAHG;AAIlB0rQ,IAAAA,YAAY,EAAE1rQ,CAAC,CAAC,cAAD,CAJG;AAKlBw6N,IAAAA,YAAY,EAAEx6N,CAAC,CAAC,cAAD,CALG;AAMlBnW,IAAAA,IAAI,EAAUmW,CAAC,CAAC,WAAD,CANG;AAOlBgtP,IAAAA,MAAM,EAAQhtP,CAAC,CAAC,aAAD,CAPG;AAQlBmtP,IAAAA,WAAW,EAAG1uQ,MAAM,CAAC0uQ,WARH;AASlBsD,IAAAA,UAAU,EAAIhyQ,MAAM,CAACgyQ,UATH;AAUlBjxQ,IAAAA,CAAC,EAAawgB,CAAC,CAAC,SAAD,CAVG;AAWlBjC,IAAAA,CAAC,EAAaiC,CAAC,CAAC,SAAD,CAXG;AAalB;AACA47F,IAAAA,MAAM,EAAQ9I,IAAI,CAAC8I,MAdD;AAelBkoG,IAAAA,UAAU,EAAIhxG,IAAI,CAACgxG;AAfD,GAApB;AAkBA,SAAOj9M,MAAP;AACD;;AAED,SAASypV,cAAT,CAAwBx9O,IAAxB,EAA8BqkO,KAA9B,EAAqCnlM,KAArC,EAA4C;AAC1C,QAAMlxI,IAAI,GAAG,kBAAM6wD,UAAU,CAAC,MAAD,EAASmhD,IAAT,EAAek/B,KAAf,CAAhB,CAAb;AAAA,QACMm7H,WAAW,GAAG,kBAAMx7M,UAAU,CAAC,aAAD,EAAgBmhD,IAAhB,EAAsBk/B,KAAtB,CAAhB,CADpB;AAAA,QAEMkkI,QAAQ,GAAG,kBAAMu6E,WAAW,CAACz+M,KAAK,CAAC,CAAD,CAAL,CAASnrI,MAAV,EAAkBswU,KAAlB,EAAyB0S,0BAAzB,CAAjB,CAFjB;AAIA,SAAO,oCACJ,iBAAgB/oV,IAAK,KAAIqsQ,WAAY,KAAI+I,QAAS,GAD9C,EAELihE,KAFK,CAAP;AAID;;AAED,SAASxlR,UAAT,CAAoB/2D,IAApB,EAA0Bk4G,IAA1B,EAAgCk/B,KAAhC,EAAuC;AACrC,SAAOl/B,IAAI,CAACl4G,IAAD,CAAJ,GACF,UAASk4G,IAAI,CAACl4G,IAAD,CAAO,UADlB,GAEH,4BAAYA,IAAZ,EAAkBo3I,KAAK,CAAC,CAAD,CAAL,CAASnrI,MAA3B,CAFJ;AAGD;;AAED,SAAS4pV,WAAT,CAAqB5pV,MAArB,EAA6BswU,KAA7B,EAAoCr3D,KAApC,EAA2C;AACzC,SAAO,4BAAY,UAAZ,EAAwBj5Q,MAAxB,KAAmC,yBAAS,UAAT,EAAqBswU,KAArB,EAA4Br3D,KAA5B,CAA1C;AACD;;;;;;;;;AClMD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,MAAM4wE,SAAS,GAAI,kBAAiB/oE,eAAK,wBAAuBC,gBAAM,QAAtE;;AAEe,kBAAS90K,IAAT,EAAeqkO,KAAf,EAAsB;AACnCrkO,EAAAA,IAAI,GAAG,wBAASA,IAAT,IAAiB;AAACf,IAAAA,IAAI,EAAEe;AAAP,GAAjB,GAAgCA,IAAvC;;AAEA,QAAM9yF,CAAC,GAAG,uBAAO8yF,IAAP,EAAaqkO,KAAK,CAAC14U,MAAN,CAAa9E,KAA1B,CAAV;AAAA,QACMkN,MAAM,GAAGisG,IAAI,CAACjsG,MAAL,IAAe,EAD9B;AAAA,QAEMglV,UAAU,GAAGhlV,MAAM,CAACm+G,KAAP,IAAgB,EAFnC;AAAA,QAGMpqH,IAAI,GAAGixV,UAAU,CAACjxV,IAAX,IAAmB2zH,SAHhC;AAAA,QAIMwlJ,WAAW,GAAG83E,UAAU,CAAC93E,WAJ/B;AAAA,QAKM+L,KAAK,GAAG+rE,UAAU,CAAC/rE,KALzB;AAAA,QAMM3xG,QAAQ,GAAG,EANjB,CAHmC,CAWnC;;;AACA,QAAMiqD,KAAK,GAAG,EAAd;AAAA,QACM2zH,OAAO,GAAG,gBAAI5U,KAAK,CAACn9T,GAAN,CAAU,yBAAQ,IAAR,EAAc,CAACo+M,KAAD,CAAd,CAAV,CAAJ,CADhB,CAZmC,CAenC;;AACAjqD,EAAAA,QAAQ,CAAC70K,IAAT,CAAcq3V,UAAU,CAAC79O,IAAD,EAAO9yF,CAAP,EAAU4wU,WAAW,CAAC99O,IAAD,CAArB,EAA6Bi5O,OAA7B,CAAxB,EAhBmC,CAkBnC;;AACA,MAAIj5O,IAAI,CAACk8K,QAAT,EAAmB;AACjB7gH,IAAAA,QAAQ,CAAC70K,IAAT,CAAcu3V,aAAa,CAAC/9O,IAAD,EAAO9yF,CAAP,EAAUnZ,MAAM,CAACmoR,QAAjB,EAA2B+8D,OAA3B,CAA3B;AACD,GArBkC,CAuBnC;;;AACA,SAAO,mBACL,yBAAW;AACT9yE,IAAAA,IAAI,EAASsP,gBADJ;AAET79Q,IAAAA,IAAI,EAASqhV,OAFJ;AAGTllV,IAAAA,MAAM,EAAOiqV,WAAW,CAAC9wU,CAAD,EAAI6rU,UAAJ,CAHf;AAIT75M,IAAAA,KAAK,EAAQm8B,QAJJ;AAKTgrG,IAAAA,IAAI,EAASn5P,CAAC,CAAC,MAAD,CALL;AAMTo5P,IAAAA,WAAW,EAAEp5P,CAAC,CAAC,aAAD,CANL;AAOT4wP,IAAAA,MAAM,EAAO5wP,CAAC,CAAC,QAAD,CAPL;AAQTplB,IAAAA,IARS;AASTm5Q,IAAAA,WATS;AAUT+L,IAAAA;AAVS,GAAX,CADK,EAaLq3D,KAbK,CAAP;AAeD,EAED;AACA;;;AACA,SAASyZ,WAAT,CAAqB99O,IAArB,EAA2B;AACzB,QAAMjsG,MAAM,GAAGisG,IAAI,CAACjsG,MAApB;AACA,SAAQA,MAAM,IAAIA,MAAM,CAAClN,KAAlB,IAA4B,sBAAO;AACxCiB,IAAAA,IAAI,EAAEk4G,IAAI,CAACl4G,IAD6B;AAExCm5Q,IAAAA,WAAW,EAAEjhK,IAAI,CAACihK,WAFsB;AAGxC+L,IAAAA,KAAK,EAAEhtK,IAAI,CAACgtK;AAH4B,GAAP,EAIhCj5Q,MAJgC,CAAnC;AAKD;;AAED,SAASiqV,WAAT,CAAqB9wU,CAArB,EAAwB6rU,UAAxB,EAAoC;AAClC,QAAMhlV,MAAM,GAAG;AAACupR,IAAAA,KAAK,EAAE,EAAR;AAAY7nM,IAAAA,MAAM,EAAE;AAApB,GAAf;AAEA,yBAAY1hF,MAAZ,EAAoB;AAClBykQ,IAAAA,MAAM,EAAOtrP,CAAC,CAAC,QAAD,CADI;AAElBovL,IAAAA,MAAM,EAAOpvL,CAAC,CAAC,QAAD,CAFI;AAGlB4xL,IAAAA,KAAK,EAAQ;AAACvlH,MAAAA,MAAM,EAAEo/P;AAAT,KAHK;AAIlBjuG,IAAAA,KAAK,EAAQ;AAACnxJ,MAAAA,MAAM,EAAEqkQ;AAAT,KAJK;AAKlBrhR,IAAAA,KAAK,EAAQrvD,CAAC,CAAC,OAAD,CALI;AAMlBmsE,IAAAA,KAAK,EAAQnsE,CAAC,CAAC,OAAD,CANI;AAOlBha,IAAAA,MAAM,EAAOga,CAAC,CAAC,QAAD,CAAD,IAAe,CAPV;AAQlBlK,IAAAA,OAAO,EAAMkK,CAAC,CAAC,iBAAD;AARI,GAApB;AAWA,SAAO,wBAAanZ,MAAb,EAAqBglV,UAArB,EAAiC3O,eAAjC,CAAP;AACD;;AAED,SAASyT,UAAT,CAAoB79O,IAApB,EAA0B9yF,CAA1B,EAA6B6rU,UAA7B,EAAyCE,OAAzC,EAAkD;AAChD,QAAM98S,IAAI,GAAG;AAAC5yC,IAAAA,KAAK,EAAE;AAAR,GAAb;AAAA,QACM01G,IAAI,GAAGe,IAAI,CAACf,IADlB;AAAA,QAEMlrG,MAAM,GAAG;AACPupR,IAAAA,KAAK,EAAE;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADA;AAEPs5C,IAAAA,MAAM,EAAE;AAACsnK,MAAAA,OAAO,EAAE;AAACxzP,QAAAA,KAAK,EAAE;AAAR;AAAV,KAFD;AAGPsiR,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHC,GAFf;AAQA,yBAAYpoC,MAAZ,EAAoB;AAClBkrG,IAAAA,IAAI,EAAQA,IADM;AAElB6/F,IAAAA,KAAK,EAAO;AAACvlH,MAAAA,MAAM,EAAE;AAAT,KAFM;AAGlBmxJ,IAAAA,KAAK,EAAO;AAACnxJ,MAAAA,MAAM,EAAE;AAAT,KAHM;AAIlBhd,IAAAA,KAAK,EAAO;AAACgd,MAAAA,MAAM,EAAE;AAAT,KAJM;AAKlBw9E,IAAAA,QAAQ,EAAI,KALM;AAMlB1kJ,IAAAA,EAAE,EAAUnF,CAAC,CAAC,IAAD,CANK;AAOlB7B,IAAAA,EAAE,EAAU6B,CAAC,CAAC,IAAD,CAPK;AAQlBnW,IAAAA,IAAI,EAAQmW,CAAC,CAAC,OAAD,CARK;AASlB22P,IAAAA,IAAI,EAAQ32P,CAAC,CAAC,MAAD,CATK;AAUlBk2P,IAAAA,QAAQ,EAAIl2P,CAAC,CAAC,UAAD,CAVK;AAWlBs3P,IAAAA,SAAS,EAAGt3P,CAAC,CAAC,WAAD,CAXK;AAYlBw3P,IAAAA,UAAU,EAAEx3P,CAAC,CAAC,YAAD,CAZK;AAalB82P,IAAAA,UAAU,EAAE92P,CAAC,CAAC,YAAD;AAbK,GAApB,EAcG;AAAE;AACH4xL,IAAAA,KAAK,EAAO5xL,CAAC,CAAC,OAAD,CADZ;AAEDw9N,IAAAA,KAAK,EAAOx9N,CAAC,CAAC,OAAD,CAFZ;AAGD6pJ,IAAAA,QAAQ,EAAI7pJ,CAAC,CAAC,UAAD;AAHZ,GAdH;AAoBA,SAAO,wBAAU;AACf1G,IAAAA,IAAI,EAAEuxU,mBADS;AAEf5xE,IAAAA,IAAI,EAAE0qE,oBAFS;AAGf7jE,IAAAA,KAAK,EAAEiqE,0BAHQ;AAIfr/U,IAAAA,IAAI,EAAEqhV,OAJS;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;AAED,SAASgF,aAAT,CAAuB/9O,IAAvB,EAA6B9yF,CAA7B,EAAgC6rU,UAAhC,EAA4CE,OAA5C,EAAqD;AACnD,QAAM98S,IAAI,GAAG;AAAC5yC,IAAAA,KAAK,EAAE;AAAR,GAAb;AAAA,QACM01G,IAAI,GAAGe,IAAI,CAACk8K,QADlB;AAAA,QAEMnoR,MAAM,GAAG;AACPupR,IAAAA,KAAK,EAAE;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADA;AAEPs5C,IAAAA,MAAM,EAAE;AAACsnK,MAAAA,OAAO,EAAE;AAACxzP,QAAAA,KAAK,EAAE;AAAR;AAAV,KAFD;AAGPsiR,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHC,GAFf;AAQA,yBAAYpoC,MAAZ,EAAoB;AAClBkrG,IAAAA,IAAI,EAAQA,IADM;AAElB6/F,IAAAA,KAAK,EAAO;AAACvlH,MAAAA,MAAM,EAAE;AAAT,KAFM;AAGlBmxJ,IAAAA,KAAK,EAAO;AAACnxJ,MAAAA,MAAM,EAAE;AAAT,KAHM;AAIlBhd,IAAAA,KAAK,EAAO;AAACgd,MAAAA,MAAM,EAAE;AAAT,KAJM;AAKlBw9E,IAAAA,QAAQ,EAAI,KALM;AAMlB1kJ,IAAAA,EAAE,EAAUnF,CAAC,CAAC,IAAD,CANK;AAOlB7B,IAAAA,EAAE,EAAU6B,CAAC,CAAC,IAAD,CAPK;AAQlBnW,IAAAA,IAAI,EAAQmW,CAAC,CAAC,eAAD,CARK;AASlB22P,IAAAA,IAAI,EAAQ32P,CAAC,CAAC,cAAD,CATK;AAUlBk2P,IAAAA,QAAQ,EAAIl2P,CAAC,CAAC,kBAAD,CAVK;AAWlBs3P,IAAAA,SAAS,EAAGt3P,CAAC,CAAC,mBAAD,CAXK;AAYlBw3P,IAAAA,UAAU,EAAEx3P,CAAC,CAAC,oBAAD,CAZK;AAalB82P,IAAAA,UAAU,EAAE92P,CAAC,CAAC,oBAAD;AAbK,GAApB,EAcG;AAAE;AACH4xL,IAAAA,KAAK,EAAO5xL,CAAC,CAAC,OAAD,CADZ;AAEDw9N,IAAAA,KAAK,EAAOx9N,CAAC,CAAC,OAAD,CAFZ;AAGD6pJ,IAAAA,QAAQ,EAAI7pJ,CAAC,CAAC,UAAD;AAHZ,GAdH;AAoBA,SAAO,wBAAU;AACf1G,IAAAA,IAAI,EAAGuxU,mBADQ;AAEf5xE,IAAAA,IAAI,EAAG2qE,wBAFQ;AAGf9jE,IAAAA,KAAK,EAAEkqE,6BAHQ;AAIft/U,IAAAA,IAAI,EAAGqhV,OAJQ;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;;;;;;;;AC7JD;;AACA;;AACA;;AACA;;AACA;;;;AAEe,SAASkF,SAAT,CAAmB1oV,IAAnB,EAAyB8uU,KAAzB,EAAgC;AAC7C,QAAM51G,UAAU,GAAG,EAAnB;;AAEA,MAAIl5N,IAAI,CAACi6K,SAAT,EAAoB;AAClBj6K,IAAAA,IAAI,CAACi6K,SAAL,CAAenlL,OAAf,CAAuB+8G,EAAE,IAAI;AAC3BqnH,MAAAA,UAAU,CAACjoO,IAAX,CAAgB,wBAAe4gH,EAAf,EAAmBi9N,KAAnB,CAAhB;AACD,KAFD;AAGD;;AAED,MAAI9uU,IAAI,CAACnO,EAAT,EAAa;AACXmO,IAAAA,IAAI,CAACnO,EAAL,CAAQiD,OAAR,CAAgBjD,EAAE,IAAI;AACpB,4BAAaA,EAAb,EAAiBi9U,KAAjB,EAAwB9uU,IAAI,CAACzN,IAA7B;AACD,KAFD;AAGD;;AAEDu8U,EAAAA,KAAK,CAAC6R,eAAN,CAAsB3gV,IAAI,CAACzN,IAA3B,EAAiCo2V,OAAO,CAAC3oV,IAAD,EAAO8uU,KAAP,EAAc51G,UAAd,CAAxC;AACD;AAED;AACA;AACA;;;AACA,SAASyvH,OAAT,CAAiB3oV,IAAjB,EAAuB8uU,KAAvB,EAA8BnqN,GAA9B,EAAmC;AACjC,QAAMjqG,MAAM,GAAG,EAAf;AACA,MAAIosC,MAAM,GAAG,IAAb;AAAA,MACIwqK,MAAM,GAAG,KADb;AAAA,MAEIn5B,QAAQ,GAAG,KAFf;AAAA,MAGI/c,QAHJ;AAAA,MAGcpqL,CAHd;AAAA,MAGiBkO,CAHjB;AAAA,MAGoBxK,CAHpB;AAAA,MAGuB+zF,CAHvB;;AAKA,MAAIzoF,IAAI,CAAC5E,MAAT,EAAiB;AACf;AACA,QAAI,qBAAU4E,IAAI,CAAC5E,MAAf,KAA0B,qBAAU4E,IAAI,CAACuzG,MAAf,CAA9B,EAAsD;AACpD;AACA74F,MAAAA,MAAM,CAACzpB,IAAP,CAAY89G,IAAI,CAAC+/N,KAAD,EAAQ9uU,IAAR,CAAhB;AACA0a,MAAAA,MAAM,CAACzpB,IAAP,CAAY61D,MAAM,GAAG88K,OAAO,EAA5B;AACD,KAJD,MAIO;AACL;AACAlpN,MAAAA,MAAM,CAACzpB,IAAP,CAAY61D,MAAM,GAAG88K,OAAO,CAAC;AAC3B6zG,QAAAA,OAAO,EAAEz3U,IAAI,CAAC5E,MADa;AAE3Bs8U,QAAAA,OAAO,EAAE13U,IAAI,CAACuzG;AAFa,OAAD,CAA5B;AAID;AACF,GAbD,MAaO,IAAIvzG,IAAI,CAACotG,GAAT,EAAc;AACnB;AACA,QAAI,qBAAUptG,IAAI,CAACotG,GAAf,KAAuB,qBAAUptG,IAAI,CAACuzG,MAAf,CAA3B,EAAmD;AACjD;AACA74F,MAAAA,MAAM,CAACzpB,IAAP,CAAY89G,IAAI,CAAC+/N,KAAD,EAAQ9uU,IAAR,CAAhB;AACA0a,MAAAA,MAAM,CAACzpB,IAAP,CAAY61D,MAAM,GAAG88K,OAAO,EAA5B;AACD,KAJD,MAIO;AACL;AACAlpN,MAAAA,MAAM,CAACzpB,IAAP,CAAY61D,MAAM,GAAG88K,OAAO,CAAC;AAC3B+zG,QAAAA,QAAQ,EAAE33U,IAAI,CAACotG,GADY;AAE3BsqO,QAAAA,OAAO,EAAE13U,IAAI,CAACuzG;AAFa,OAAD,CAA5B;AAID;AACF,GAbM,MAaA,IAAIvzG,IAAI,CAAC8mD,MAAT,EAAiB;AACtB;AACAA,IAAAA,MAAM,GAAGs0H,QAAQ,GAAG,qBAAMp7K,IAAI,CAAC8mD,MAAX,EACjBrsD,GADiB,CACboD,CAAC,IAAI,eAAIixU,KAAK,CAACG,OAAN,CAAcpxU,CAAd,EAAiB6c,MAArB,CADQ,CAApB;AAEAA,IAAAA,MAAM,CAACzpB,IAAP,CAAY,IAAZ,EAJsB,CAIH;AACpB,GAtCgC,CAwCjC;;;AACA,OAAKD,CAAC,GAAC,CAAF,EAAKkO,CAAC,GAACylH,GAAG,CAACr0H,MAAhB,EAAwBU,CAAC,GAACkO,CAA1B,EAA6B,EAAElO,CAA/B,EAAkC;AAChC0D,IAAAA,CAAC,GAAGiwH,GAAG,CAAC3zH,CAAD,CAAP;AACAy3F,IAAAA,CAAC,GAAG/zF,CAAC,CAACo/G,QAAN;;AAEA,QAAI,CAAChtD,MAAD,IAAW,CAAC2hC,CAAC,CAAC3hC,MAAlB,EAA0B;AACxBpsC,MAAAA,MAAM,CAACzpB,IAAP,CAAY61D,MAAM,GAAG88K,OAAO,EAA5B;AACD;;AACDlpN,IAAAA,MAAM,CAACzpB,IAAP,CAAYyD,CAAZ;AAEA,QAAI+zF,CAAC,CAAC2+P,SAAN,EAAiBjvJ,QAAQ,GAAG,IAAX;AACjB,QAAI1vG,CAAC,CAACipI,QAAF,IAAc,CAACv5B,QAAnB,EAA6Bm5B,MAAM,GAAG,IAAT;AAE7B,QAAI7oI,CAAC,CAAC3hC,MAAN,EAAcA,MAAM,GAAGpyD,CAAT,CAAd,KACK,IAAI+zF,CAAC,CAACsuI,OAAN,EAAejwK,MAAM,GAAG,IAAT;AACrB;;AAED,MAAIs0H,QAAJ,EAAc;AACZl8K,IAAAA,CAAC,GAAGk8K,QAAQ,CAAC9qL,MAAT,GAAkB,CAAtB;AACAoqB,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,uBAAM;AAChBm2M,MAAAA,MAAM,EAAES,MADQ;AAEhBE,MAAAA,KAAK,EAAEtyN,CAAC,GAAGk8K,QAAH,GAAcA,QAAQ,CAAC,CAAD;AAFd,KAAN,CAAZ;;AAIA,QAAIk2C,MAAM,IAAIpyN,CAAd,EAAiB;AACf;AACAwb,MAAAA,MAAM,CAAC8Z,MAAP,CAAc,CAAd,EAAiB,CAAjB,EAAoBovM,OAAO,EAA3B;AACD;AACF;;AAED,MAAI,CAAC98K,MAAL,EAAapsC,MAAM,CAACzpB,IAAP,CAAY2yO,OAAO,EAAnB;AACblpN,EAAAA,MAAM,CAACzpB,IAAP,CAAY,uBAAM,EAAN,CAAZ;AACA,SAAOypB,MAAP;AACD;;AAED,SAASkpN,OAAT,CAAiBxoO,MAAjB,EAAyB;AACvB,QAAM5G,CAAC,GAAG,yBAAQ,EAAR,EAAY4G,MAAZ,CAAV;AACA5G,EAAAA,CAAC,CAACs/G,QAAF,GAAa;AAAChtD,IAAAA,MAAM,EAAE;AAAT,GAAb;AACA,SAAOtyD,CAAP;AACD;;AAED,SAASu6G,IAAT,CAAc+/N,KAAd,EAAqB9uU,IAArB,EAA2B;AACzB,SAAO,sBAAK;AACVotG,IAAAA,GAAG,EAAKptG,IAAI,CAACotG,GAAL,GAAW0hO,KAAK,CAACvmI,QAAN,CAAevoM,IAAI,CAACotG,GAApB,CAAX,GAAsC8Y,SADpC;AAEVgxG,IAAAA,KAAK,EAAGl3N,IAAI,CAACk3N,KAAL,GAAa43G,KAAK,CAACvmI,QAAN,CAAevoM,IAAI,CAACk3N,KAApB,CAAb,GAA0ChxG,SAFxC;AAGV9qH,IAAAA,MAAM,EAAE4E,IAAI,CAAC5E,MAAL,GAAc0zU,KAAK,CAACvmI,QAAN,CAAevoM,IAAI,CAAC5E,MAApB,CAAd,GAA4C8qH,SAH1C;AAIV3S,IAAAA,MAAM,EAAEu7N,KAAK,CAACiS,cAAN,CAAqB/gV,IAAI,CAACuzG,MAA1B;AAJE,GAAL,CAAP;AAMD;;;;;;;;;AClHD;;AACA;;AACA;;AACA;;AAEA,MAAMksF,GAAG,GAAGwjE,MAAM,IAAIA,MAAM,KAAKuc,iBAAX,IAAqBvc,MAAM,KAAKoc,cAAtD,EAEA;;;AACO,MAAMupE,OAAO,GAAG,CAAC3lF,MAAD,EAAS/qQ,CAAT,EAAY6G,CAAZ,KAAkB,qBAASkkQ,MAAT,IACrC4lF,aAAa,CAAC5lF,MAAM,CAACj/K,MAAR,EAAgB9rF,CAAhB,EAAmB6G,CAAnB,CADwB,GAErCkkQ,MAAM,KAAKqc,eAAX,IAAmBrc,MAAM,KAAKoc,cAA9B,GAAoCnnR,CAApC,GAAwC6G,CAFrC,EAIP;;;;;AACO,MAAM+pV,GAAG,GAAG,CAAC7lF,MAAD,EAAS/qQ,CAAT,EAAY6G,CAAZ,KAAkB,qBAASkkQ,MAAT,IACjC8lF,MAAM,CAAC9lF,MAAM,CAACj/K,MAAR,EAAgB9rF,CAAhB,EAAmB6G,CAAnB,CAD2B,GAEjC0gM,GAAG,CAACwjE,MAAD,CAAH,GAAc/qQ,CAAd,GAAkB6G,CAFf,EAIP;;;;;AACO,MAAMiqV,GAAG,GAAG,CAAC/lF,MAAD,EAAS/qQ,CAAT,EAAY6G,CAAZ,KAAkB,qBAASkkQ,MAAT,IACjCgmF,MAAM,CAAChmF,MAAM,CAACj/K,MAAR,EAAgB9rF,CAAhB,EAAmB6G,CAAnB,CAD2B,GAEjC0gM,GAAG,CAACwjE,MAAD,CAAH,GAAclkQ,CAAd,GAAkB7G,CAFf;;;;AAIA,MAAMgxV,KAAK,GAAG,CAACjmF,MAAD,EAAS/qQ,CAAT,EAAY6G,CAAZ,KAAkB,qBAASkkQ,MAAT,IACnCkmF,SAAS,CAAClmF,MAAM,CAACj/K,MAAR,EAAgB9rF,CAAhB,EAAmB6G,CAAnB,CAD0B,GAEnCkkQ,MAAM,KAAKoc,cAAX,GAAiB;AAACrrR,EAAAA,KAAK,EAAEkE;AAAR,CAAjB,GAA8B;AAAClE,EAAAA,KAAK,EAAE+K;AAAR,CAF3B;;;;AAIA,MAAMqqV,OAAO,GAAG,CAACnmF,MAAD,EAAS/qQ,CAAT,EAAY6G,CAAZ,KAAkB,qBAASkkQ,MAAT,IACrComF,WAAW,CAACpmF,MAAM,CAACj/K,MAAR,EAAgB9rF,CAAhB,EAAmB6G,CAAnB,CAD0B,GAErCkkQ,MAAM,KAAKsc,gBAAX,GAAmB;AAACvrR,EAAAA,KAAK,EAAEkE;AAAR,CAAnB,GAAgC;AAAClE,EAAAA,KAAK,EAAE+K;AAAR,CAF7B;;;;AAIP,MAAMgqV,MAAM,GAAG,CAACO,OAAD,EAAUpxV,CAAV,EAAa6G,CAAb,KAAmBwqV,KAAK,CACpC,GAAED,OAAQ,SAAQjqE,cAAI,QAAOiqE,OAAQ,SAAQ9pE,iBAAO,GADhB,EACoBtnR,CADpB,EACuB6G,CADvB,CAAvC;;AAIA,MAAMkqV,MAAM,GAAG,CAACK,OAAD,EAAUpxV,CAAV,EAAa6G,CAAb,KAAmBwqV,KAAK,CACpC,GAAED,OAAQ,SAAQjqE,cAAI,QAAOiqE,OAAQ,SAAQ9pE,iBAAO,GADhB,EACoBtnR,CADpB,EACuB6G,CADvB,CAAvC;;AAIA,MAAM8pV,aAAa,GAAG,CAACS,OAAD,EAAUpxV,CAAV,EAAa6G,CAAb,KAAmByqV,MAAM,CAC5C,GAAEF,OAAQ,SAAQhqE,eAAK,QAAOgqE,OAAQ,SAAQjqE,cAAI,GADN,EACUnnR,CADV,EACa6G,CADb,CAA/C;;AAIA,MAAMoqV,SAAS,GAAG,CAACG,OAAD,EAAUpxV,CAAV,EAAa6G,CAAb,KAAmByqV,MAAM,CACxC,GAAEF,OAAQ,SAAQjqE,cAAI,GADkB,EACdnnR,CADc,EACX6G,CADW,CAA3C;;AAIA,MAAMsqV,WAAW,GAAG,CAACC,OAAD,EAAUpxV,CAAV,EAAa6G,CAAb,KAAmByqV,MAAM,CAC1C,GAAEF,OAAQ,SAAQ/pE,gBAAM,GADkB,EACdrnR,CADc,EACX6G,CADW,CAA7C;;AAIA,MAAMwqV,KAAK,GAAG,CAAC5qU,IAAD,EAAOzmB,CAAP,EAAU6G,CAAV,KAAgB;AAC5B;AACA7G,EAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAY,mBAAQA,CAAR,CAAZ,GAAyBA,CAA7B;AACA6G,EAAAA,CAAC,GAAGA,CAAC,IAAI,IAAL,GAAY,mBAAQA,CAAR,CAAZ,GAAyBA,CAA7B;;AAEA,MAAI0qV,QAAQ,CAACvxV,CAAD,CAAR,IAAeuxV,QAAQ,CAAC1qV,CAAD,CAA3B,EAAgC;AAC9B;AACA7G,IAAAA,CAAC,GAAGA,CAAC,GAAIA,CAAC,CAAC8rF,MAAF,IAAY,2BAAY9rF,CAAC,CAAClE,KAAd,CAAhB,GAAwC,IAA7C;AACA+K,IAAAA,CAAC,GAAGA,CAAC,GAAIA,CAAC,CAACilF,MAAF,IAAY,2BAAYjlF,CAAC,CAAC/K,KAAd,CAAhB,GAAwC,IAA7C;AACA,WAAO;AAACgwF,MAAAA,MAAM,EAAG,GAAErlE,IAAK,OAAMzmB,CAAE,QAAO6G,CAAE;AAAlC,KAAP;AACD,GALD,MAKO;AACL;AACA,WAAO,CAAC,sBAAO;AAAC4f,MAAAA;AAAD,KAAP,EAAezmB,CAAf,CAAD,EAAoB3H,MAApB,CAA2BwO,CAAC,IAAI,EAAhC,CAAP;AACD;AACF,CAdD;;AAgBA,MAAM0qV,QAAQ,GAAG7S,GAAG,IAClBA,GAAG,IAAI,IAAP,IAAe7iV,MAAM,CAACof,IAAP,CAAYyjU,GAAZ,EAAiBtmV,MAAjB,KAA4B,CAD7C;;AAIA,MAAMk5V,MAAM,GAAG,CAAC7qU,IAAD,EAAOzmB,CAAP,EAAU6G,CAAV,MAAiB;AAC9BilF,EAAAA,MAAM,EAAG,GAAErlE,IAAK,OAAM+qU,MAAM,CAACxxV,CAAD,CAAI,QAAOwxV,MAAM,CAAC3qV,CAAD,CAAI;AADnB,CAAjB,CAAf;;AAIO,MAAM4qV,QAAQ,GAAG,CAACL,OAAD,EAAU50V,CAAV,EAAaqK,CAAb,EAAgB+D,CAAhB,EAAmB9D,CAAnB,MAA0B;AAChDglF,EAAAA,MAAM,EAAE,CAAClhF,CAAC,IAAI,IAAL,GAAa,GAAEwmV,OAAQ,SAAQhqE,eAAK,QAAOoqE,MAAM,CAAC5mV,CAAD,CAAI,MAArD,GAA6D,EAA9D,KACC/D,CAAC,IAAI,IAAL,GAAa,GAAEuqV,OAAQ,SAAQ9pE,iBAAO,QAAOkqE,MAAM,CAAC3qV,CAAD,CAAI,MAAvD,GAA+D,EADhE,KAECC,CAAC,IAAI,IAAL,GAAa,GAAEsqV,OAAQ,SAAQ/pE,gBAAM,QAAOmqE,MAAM,CAAC1qV,CAAD,CAAI,MAAtD,GAA8D,EAF/D,KAGCtK,CAAC,IAAI,IAAL,GAAa,GAAE40V,OAAQ,SAAQjqE,cAAI,QAAOqqE,MAAM,CAACh1V,CAAD,CAAI,MAApD,GAA4D,EAH7D,IAIA;AALwC,CAA1B,CAAjB;;;;AAQP,MAAMg1V,MAAM,GAAGxmV,CAAC,IAAI,qBAASA,CAAT,IAChBA,CAAC,CAAC8gF,MADc,GAEhB9gF,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,2BAAYA,CAAZ,CAFvB;;AAIO,MAAM0iR,IAAI,GAAG,CAACn8Q,IAAD,EAAOzV,KAAP,KAAiBA,KAAK,KAAK,CAAV,GAAc,CAAd,GAAkB,qBAASyV,IAAT,IACnD;AAACu6E,EAAAA,MAAM,EAAG,IAAGv6E,IAAI,CAACu6E,MAAO,OAAMhwF,KAAM;AAArC,CADmD,GAEnD;AAACA,EAAAA,KAAK,EAAEyV,IAAI,GAAGzV;AAAf,CAFG;;;;AAIA,MAAM0iM,KAAK,GAAG,CAAC1iM,KAAD,EAAQgoC,IAAR,KAAiB;AACpC,QAAMxnC,CAAC,GAAGR,KAAK,CAACgwF,MAAhB;AACA,SAAOxvF,CAAC,IAAIA,CAAC,CAACq7B,QAAF,CAAW,QAAX,CAAL,GACH;AAACm0D,IAAAA,MAAM,EAAExvF,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,IAAiB2hC,IAAI,CAACgoD;AAA/B,GADG,GAEHhwF,KAFJ;AAGD,CALM;;;;;;;;;;;AC1FP;;AACA;;AACA;;AACA;;AAEA,SAAS41V,QAAT,CAAkB7hR,IAAlB,EAAwB3xE,MAAxB,EAAgCyzV,UAAhC,EAA4CpyE,KAA5C,EAAmD;AACjD,MAAIqyE,SAAJ;;AAEA,MAAI1zV,MAAM,IAAI,8BAAeA,MAAf,EAAuB2xE,IAAvB,CAAd,EAA4C;AAC1C,WAAO3xE,MAAM,CAAC2xE,IAAD,CAAb;AACD,GAFD,MAGK,IAAI,8BAAe8hR,UAAf,EAA2B9hR,IAA3B,CAAJ,EAAsC;AACzC,WAAO8hR,UAAU,CAAC9hR,IAAD,CAAjB;AACD,GAFI,MAGA,IAAIA,IAAI,CAACypC,UAAL,CAAgB,OAAhB,CAAJ,EAA8B;AACjC,YAAQzpC,IAAR;AACE,WAAK,YAAL;AACE+hR,QAAAA,SAAS,GAAG,MAAZ;AACA;;AACF,WAAK,WAAL;AACA,WAAK,eAAL;AACA,WAAK,iBAAL;AACEA,QAAAA,SAAS,GAAG/hR,IAAI,CAAC,CAAD,CAAJ,CAAQ5yE,WAAR,KAAwB4yE,IAAI,CAAC1tE,KAAL,CAAW,CAAX,CAApC;AAPJ;;AASA,WAAOo9Q,KAAK,CAACgqE,0BAAD,CAAL,CAAuBqI,SAAvB,CAAP;AACD,GAXI,MAYA,IAAI/hR,IAAI,CAACypC,UAAL,CAAgB,OAAhB,CAAJ,EAA8B;AACjC,YAAQzpC,IAAR;AACE,WAAK,YAAL;AACE+hR,QAAAA,SAAS,GAAG,MAAZ;AACA;;AACF,WAAK,WAAL;AACA,WAAK,eAAL;AACEA,QAAAA,SAAS,GAAG/hR,IAAI,CAAC,CAAD,CAAJ,CAAQ5yE,WAAR,KAAwB4yE,IAAI,CAAC1tE,KAAL,CAAW,CAAX,CAApC;AANJ;;AAQA,WAAOo9Q,KAAK,CAAC+pE,0BAAD,CAAL,CAAuBsI,SAAvB,CAAP;AACD;;AAED,SAAO,IAAP;AACD;;AAED,SAAS32U,IAAT,CAAc6+L,OAAd,EAAuB;AACrB,QAAMv3M,GAAG,GAAG,EAAZ;;AACA,OAAK,MAAMgX,GAAX,IAAkBugM,OAAlB,EAA2B;AACzB,QAAI,CAACvgM,GAAL,EAAU;;AACV,SAAK,MAAMxc,GAAX,IAAkBwc,GAAlB,EAAuBhX,GAAG,CAACxF,GAAD,CAAH,GAAW,CAAX;AACxB;;AACD,SAAOlB,MAAM,CAACof,IAAP,CAAY1Y,GAAZ,CAAP;AACD;;AAEc,kBAASgwG,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,MAAI14U,MAAM,GAAG04U,KAAK,CAAC14U,MAAnB;AAAA,MACIqhR,KAAK,GAAGrhR,MAAM,CAACqhR,KADnB;AAAA,MAEIl9Q,IAAI,GAAGnE,MAAM,CAACmE,IAFlB;AAAA,MAGIoqO,IAAI,GAAGmqG,KAAK,CAAC+Y,SAAN,CAAgBp9O,IAAI,CAAC5jG,KAArB,MAAgC,MAAhC,IAA0CzQ,MAAM,CAAC2zV,QAH5D;AAAA,MAII9mF,MAAM,GAAGx4J,IAAI,CAACw4J,MAJlB;AAAA,MAKIplC,EALJ;AAAA,MAKQqkC,EALR;AAAA,MAKYjtQ,GALZ;;AAOA,MAAI,oBAASguQ,MAAT,CAAJ,EAAsB;AACpB,UAAM+mF,MAAM,GAAG72U,IAAI,CAAC,CACZ/c,MAAM,CAAC6zV,KADK,EACE7zV,MAAM,CAAC8zV,KADT,CAAD,CAAnB;AAAA,UAGMC,UAAU,GAAGh3U,IAAI,CAAC,CAChB/c,MAAM,CAACg0V,OADS,EACAh0V,MAAM,CAACi0V,UADP,EAEhBj0V,MAAM,CAACk0V,QAFS,EAECl0V,MAAM,CAACm0V,SAFR,CAAD,CAHvB;AAQA1sH,IAAAA,EAAE,GAAG,EAAL;;AACA,SAAK5oO,GAAL,IAAY+0V,MAAZ,EAAoB;AAClBnsH,MAAAA,EAAE,CAAC5oO,GAAD,CAAF,GAAU,mBACRguQ,MADQ,EAER2mF,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAAC6zV,KAAb,EAAoB1vV,IAApB,EAA0Bk9Q,KAA1B,CAFA,EAGRmyE,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAAC8zV,KAAb,EAAoB3vV,IAApB,EAA0Bk9Q,KAA1B,CAHA,CAAV;AAKD;;AAEDvV,IAAAA,EAAE,GAAG,EAAL;;AACA,SAAKjtQ,GAAL,IAAYk1V,UAAZ,EAAwB;AACtBjoF,MAAAA,EAAE,CAACjtQ,GAAD,CAAF,GAAU,wBACRguQ,MAAM,CAACj/K,MADC,EAER4lQ,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAACg0V,OAAb,EAAsB7vV,IAAtB,EAA4Bk9Q,KAA5B,CAFA,EAGRmyE,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAACi0V,UAAb,EAAyB9vV,IAAzB,EAA+Bk9Q,KAA/B,CAHA,EAIRmyE,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAACk0V,QAAb,EAAuB/vV,IAAvB,EAA6Bk9Q,KAA7B,CAJA,EAKRmyE,QAAQ,CAAC30V,GAAD,EAAMmB,MAAM,CAACm0V,SAAb,EAAwBhwV,IAAxB,EAA8Bk9Q,KAA9B,CALA,CAAV;AAOD;AACF,GA5BD,MA4BO;AACL55C,IAAAA,EAAE,GAAIolC,MAAM,KAAKoc,cAAX,IAAkBpc,MAAM,KAAKuc,iBAA9B,GAAwCppR,MAAM,CAAC6zV,KAA/C,GAAuD7zV,MAAM,CAAC8zV,KAAnE;AACAhoF,IAAAA,EAAE,GAAG9rQ,MAAM,CAAC,SAAS6sQ,MAAM,CAAC,CAAD,CAAN,CAAUz0N,WAAV,EAAT,GAAmCy0N,MAAM,CAAC5oQ,KAAP,CAAa,CAAb,CAApC,CAAX;AACD;;AAED,MAAInE,MAAM,GAAI2nO,EAAE,IAAIqkC,EAAN,IAAYv9B,IAAb,GACT,sBAAO,EAAP,EAAWpqO,IAAX,EAAiBsjO,EAAjB,EAAqBqkC,EAArB,EAAyBv9B,IAAzB,CADS,GAETpqO,IAFJ;AAIA,SAAOrE,MAAP;AACD;;;;;;;;;AChGD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASu0G,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4C;AACzD,QAAM/rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM6sQ,MAAM,GAAGx4J,IAAI,CAACw4J,MADpB;;AAGA,MAAI8kB,KAAJ,EAAW7nM,MAAX;AACA,QAAM1hF,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADF;AAEbs5C,IAAAA,MAAM,EAAEA,MAAM,GAAG;AAACsnK,MAAAA,OAAO,EAAExnK;AAAV,KAFJ;AAGbs2L,IAAAA,IAAI,EAAE;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHO,GAAf;AAMA,yBAAYpoC,MAAZ,EAAoB;AAClBmmQ,IAAAA,MAAM,EAAYhtP,CAAC,CAAC,aAAD,CADD;AAElBowP,IAAAA,SAAS,EAASpwP,CAAC,CAAC,WAAD,CAFD;AAGlBywP,IAAAA,UAAU,EAAQzwP,CAAC,CAAC,YAAD,CAHD;AAIlB2wP,IAAAA,gBAAgB,EAAE3wP,CAAC,CAAC,kBAAD,CAJD;AAKlBmtP,IAAAA,WAAW,EAAOntP,CAAC,CAAC,aAAD,CALD;AAMlBitP,IAAAA,aAAa,EAAKjtP,CAAC,CAAC,eAAD;AAND,GAApB;AASA,QAAM6yU,IAAI,GAAG/+J,QAAQ,CAAChhF,IAAD,EAAO,CAAP,CAArB;AACA,QAAMggP,IAAI,GAAGh/J,QAAQ,CAAChhF,IAAD,EAAO,CAAP,CAArB;AAEAs9K,EAAAA,KAAK,CAAC5wR,CAAN,GAAU+oF,MAAM,CAAC/oF,CAAP,GAAW,mBAAI8rQ,MAAJ,EAAYunF,IAAZ,EAAkB5jT,eAAlB,CAArB;AACAmhP,EAAAA,KAAK,CAACj4M,EAAN,GAAWoQ,MAAM,CAACpQ,EAAP,GAAY,mBAAImzL,MAAJ,EAAYwnF,IAAZ,CAAvB;AAEA1iE,EAAAA,KAAK,CAACryQ,CAAN,GAAUwqE,MAAM,CAACxqE,CAAP,GAAW,mBAAIutP,MAAJ,EAAYunF,IAAZ,EAAkB5jT,eAAlB,CAArB;AACAmhP,EAAAA,KAAK,CAACrkL,EAAN,GAAWxjB,MAAM,CAACwjB,EAAP,GAAY,mBAAIu/J,MAAJ,EAAYwnF,IAAZ,CAAvB;AAEA,SAAO,wBAAU;AACfx5U,IAAAA,IAAI,EAAEqxU,mBADS;AAEf1xE,IAAAA,IAAI,EAAE+pE,qBAFS;AAGft4U,IAAAA,IAAI,EAAEqhV,OAHS;AAIfllV,IAAAA;AAJe,GAAV,EAKJglV,UALI,CAAP;AAMD;;AAED,SAAS/3J,QAAT,CAAkBhhF,IAAlB,EAAwBq0B,GAAxB,EAA6B;AAC3B,SAAO;AAACj4H,IAAAA,KAAK,EAAE4jG,IAAI,CAAC5jG,KAAb;AAAoB2rB,IAAAA,KAAK,EAAEssG;AAA3B,GAAP;AACD;;;;;;;;;AC/CD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASr0B,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4C/+G,IAA5C,EAAkD;AAC/D,QAAMhtN,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM6sQ,MAAM,GAAGx4J,IAAI,CAACw4J,MADpB;AAAA,QAEMynF,MAAM,GAAGjgP,IAAI,CAACkgP,SAFpB;AAAA,QAGMlhV,IAAI,GAAG,uBAAQw5P,MAAR,EAAgB,CAAhB,EAAmB,CAAC,CAApB,CAHb;AAAA,QAIMtlQ,MAAM,GAAGwmR,WAAW,CAAC15K,IAAI,CAAC9sG,MAAN,EAAc8L,IAAd,CAJ1B;;AAMA,MAAIs+Q,KAAJ,EAAWzR,IAAX,EAAiBp2L,MAAjB;AACA,QAAM1hF,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADF;AAEbs5C,IAAAA,MAAM,EAAEA,MAAM,GAAG;AAACsnK,MAAAA,OAAO,EAAExnK;AAAV,KAFJ;AAGbs2L,IAAAA,IAAI,EAAEA,IAAI,GAAG;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHA,GAAf;AAMA,yBAAYpoC,MAAZ,EAAoB;AAClBmmQ,IAAAA,MAAM,EAAYhtP,CAAC,CAAC,WAAD,CADD;AAElBowP,IAAAA,SAAS,EAASpwP,CAAC,CAAC,SAAD,CAFD;AAGlBywP,IAAAA,UAAU,EAAQzwP,CAAC,CAAC,UAAD,CAHD;AAIlB2wP,IAAAA,gBAAgB,EAAE3wP,CAAC,CAAC,gBAAD,CAJD;AAKlBitP,IAAAA,aAAa,EAAKjtP,CAAC,CAAC,aAAD,CALD;AAMlBmtP,IAAAA,WAAW,EAAOntP,CAAC,CAAC,WAAD;AAND,GAApB;AASA,QAAMizU,OAAO,GAAG;AACd/jV,IAAAA,KAAK,EAAG4jG,IAAI,CAAC5jG,KADC;AAEd2/G,IAAAA,KAAK,EAAG+6N,gBAFM;AAGd58G,IAAAA,IAAI,EAAIA,IAAI,CAACA,IAHC;AAId43C,IAAAA,KAAK,EAAG53C,IAAI,CAAC43C,KAJC;AAKd5+Q,IAAAA,MAAM,EAAEgnO,IAAI,CAAChnO,MALC;AAMdN,IAAAA,KAAK,EAAGsa,CAAC,CAAC,WAAD;AANK,GAAhB;AASA,QAAM8iO,EAAE,GAAG,mBAAIwoB,MAAJ,EAAY;AAACj/K,IAAAA,MAAM,EAAE;AAAT,GAAZ,EAAgC;AAACA,IAAAA,MAAM,EAAE;AAAT,GAAhC,CAAX;AAEA,QAAM6mQ,SAAS,GAAGH,MAAM,GACpB;AAAC7jV,IAAAA,KAAK,EAAE6jV,MAAR;AAAgBl4T,IAAAA,KAAK,EAAE,CAAvB;AAA0BozP,IAAAA,IAAI,EAAEn8Q,IAAhC;AAAsC9L,IAAAA,MAAM,EAAEA;AAA9C,GADoB,GAEpB;AAAC3J,IAAAA,KAAK,EAAE,CAAR;AAAW2J,IAAAA,MAAM,EAAEA;AAAnB,GAFJ;AAIA,QAAMmtV,OAAO,GAAGJ,MAAM,GAClB;AAAC7jV,IAAAA,KAAK,EAAE6jV,MAAR;AAAgBl4T,IAAAA,KAAK,EAAE,CAAvB;AAA0BozP,IAAAA,IAAI,EAAEn8Q,IAAhC;AAAsC9L,IAAAA,MAAM,EAAEA;AAA9C,GADkB,GAElB,sBAAO88O,EAAP,EAAW;AAACmrC,IAAAA,IAAI,EAAEn8Q,IAAP;AAAa9L,IAAAA,MAAM,EAAEA;AAArB,GAAX,CAFJ;AAIAoqR,EAAAA,KAAK,CAAC5wR,CAAN,GAAU+oF,MAAM,CAAC/oF,CAAP,GAAW,mBAAI8rQ,MAAJ,EAAY2nF,OAAZ,EAAqBC,SAArB,CAArB;AACA9iE,EAAAA,KAAK,CAACryQ,CAAN,GAAUwqE,MAAM,CAACxqE,CAAP,GAAW,mBAAIutP,MAAJ,EAAY2nF,OAAZ,EAAqBC,SAArB,CAArB;AACA9iE,EAAAA,KAAK,CAACj4M,EAAN,GAAWoQ,MAAM,CAACpQ,EAAP,GAAY,mBAAImzL,MAAJ,EAAY6nF,OAAZ,CAAvB;AACA/iE,EAAAA,KAAK,CAACrkL,EAAN,GAAWxjB,MAAM,CAACwjB,EAAP,GAAY,mBAAIu/J,MAAJ,EAAY6nF,OAAZ,CAAvB;AACAx0E,EAAAA,IAAI,CAACn/Q,CAAL,GAAS,mBAAI8rQ,MAAJ,EAAY2nF,OAAZ,CAAT;AACAt0E,EAAAA,IAAI,CAAC5gQ,CAAL,GAAS,mBAAIutP,MAAJ,EAAY2nF,OAAZ,CAAT;AAEA,SAAO,wBAAU;AACf35U,IAAAA,IAAI,EAAEqxU,mBADS;AAEf1xE,IAAAA,IAAI,EAAEgqE,mBAFS;AAGf3lV,IAAAA,GAAG,EAAGssV,gBAHS;AAIfl/U,IAAAA,IAAI,EAAEqhV,OAJS;AAKfllV,IAAAA;AALe,GAAV,EAMHglV,UANG,CAAP;AAOD;;AAED,SAASr/D,WAAT,CAAqBxmR,MAArB,EAA6B8L,IAA7B,EAAoC;AAClC,MAAIA,IAAI,KAAK,CAAb,EAAgB,CACd;AACD,GAFD,MAEO,IAAI,CAAC,wBAAS9L,MAAT,CAAL,EAAuB;AAC5BA,IAAAA,MAAM,GAAG,qBAAS8L,IAAT,IACL;AAACu6E,MAAAA,MAAM,EAAG,IAAGv6E,IAAI,CAACu6E,MAAO,QAAOrmF,MAAM,IAAI,CAAE;AAA5C,KADK,GAEL8L,IAAI,IAAI9L,MAAM,IAAI,CAAd,CAFR;AAGD,GAJM,MAIA;AACL,QAAIu+G,KAAK,GAAGv+G,MAAM,GAAG,sBAAO,EAAP,EAAWA,MAAX,CAArB;;AACA,WAAOu+G,KAAK,CAAC0pK,IAAN,IAAc,IAArB,EAA2B;AACzB,UAAI,CAAC,wBAAS1pK,KAAK,CAAC0pK,IAAf,CAAL,EAA2B;AACzB1pK,QAAAA,KAAK,CAAC0pK,IAAN,GAAa,qBAASn8Q,IAAT,EAAe;AAAf,UACT;AAACu6E,UAAAA,MAAM,EAAG,IAAGk4B,KAAK,CAAC0pK,IAAK,QAAOn8Q,IAAI,CAACu6E,MAAO;AAA3C,SADS,GAETk4B,KAAK,CAAC0pK,IAAN,GAAan8Q,IAFjB;AAGA,eAAO9L,MAAP;AACD,OALD,MAKO;AACLu+G,QAAAA,KAAK,GAAGA,KAAK,CAAC0pK,IAAN,GAAa,sBAAO,EAAP,EAAW1pK,KAAK,CAAC0pK,IAAjB,CAArB;AACD;AACF;;AACD1pK,IAAAA,KAAK,CAAC0pK,IAAN,GAAan8Q,IAAb;AACD;;AAED,SAAO9L,MAAP;AACD;;;;;;;;;AC3FD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS8sG,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4CjrV,IAA5C,EAAkDksO,IAAlD,EAAwD;AACrE,QAAMhtN,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM6sQ,MAAM,GAAGx4J,IAAI,CAACw4J,MADpB;AAAA,QAEMx5P,IAAI,GAAG,uBAAQw5P,MAAR,EAAgB,CAAC,CAAjB,EAAoB,CAApB,CAFb;;AAIA,MAAI8kB,KAAJ,EAAWzR,IAAX,EAAiBp2L,MAAjB;AACA,QAAM1hF,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AAACvgC,MAAAA,OAAO,EAAE5gN;AAAV,KADF;AAEbs5C,IAAAA,MAAM,EAAEA,MAAM,GAAG;AAACsnK,MAAAA,OAAO,EAAExnK;AAAV,KAFJ;AAGbs2L,IAAAA,IAAI,EAAEA,IAAI,GAAG;AAAC9uB,MAAAA,OAAO,EAAE5gN;AAAV;AAHA,GAAf;AAMA,yBAAYpoC,MAAZ,EAAoB;AAClBmmQ,IAAAA,MAAM,EAAYhtP,CAAC,CAAC,WAAD,CADD;AAElBowP,IAAAA,SAAS,EAASpwP,CAAC,CAAC,SAAD,CAFD;AAGlBywP,IAAAA,UAAU,EAAQzwP,CAAC,CAAC,UAAD,CAHD;AAIlB2wP,IAAAA,gBAAgB,EAAE3wP,CAAC,CAAC,gBAAD,CAJD;AAKlBitP,IAAAA,aAAa,EAAKjtP,CAAC,CAAC,aAAD,CALD;AAMlBmtP,IAAAA,WAAW,EAAOntP,CAAC,CAAC,WAAD;AAND,GAApB;AASA,QAAMozU,QAAQ,GAAG,mBAAQtyV,IAAR,CAAjB;AACAsyV,EAAAA,QAAQ,CAACnlE,IAAT,GAAgBn8Q,IAAhB;AAEA,QAAMmhV,OAAO,GAAG;AACd/jV,IAAAA,KAAK,EAAG4jG,IAAI,CAAC5jG,KADC;AAEd2/G,IAAAA,KAAK,EAAG+6N,gBAFM;AAGd58G,IAAAA,IAAI,EAAIA,IAAI,CAACA,IAHC;AAId43C,IAAAA,KAAK,EAAG53C,IAAI,CAAC43C,KAJC;AAKd5+Q,IAAAA,MAAM,EAAEgnO,IAAI,CAAChnO,MALC;AAMdN,IAAAA,KAAK,EAAGsa,CAAC,CAAC,WAAD;AANK,GAAhB;AASAuoE,EAAAA,MAAM,CAACxqE,CAAP,GAAWqyQ,KAAK,CAACryQ,CAAN,GAAU,mBAAIutP,MAAJ,EAAYr8N,eAAZ,EAAkBgkT,OAAlB,CAArB;AACA1qQ,EAAAA,MAAM,CAACwjB,EAAP,GAAYqkL,KAAK,CAACrkL,EAAN,GAAW,mBAAIu/J,MAAJ,EAAY8nF,QAAZ,CAAvB;AACAz0E,EAAAA,IAAI,CAACn/Q,CAAL,GAAS,mBAAI8rQ,MAAJ,EAAY2nF,OAAZ,CAAT;AAEA1qQ,EAAAA,MAAM,CAAC/oF,CAAP,GAAW4wR,KAAK,CAAC5wR,CAAN,GAAU,mBAAI8rQ,MAAJ,EAAYr8N,eAAZ,EAAkBgkT,OAAlB,CAArB;AACA1qQ,EAAAA,MAAM,CAACpQ,EAAP,GAAYi4M,KAAK,CAACj4M,EAAN,GAAW,mBAAImzL,MAAJ,EAAY8nF,QAAZ,CAAvB;AACAz0E,EAAAA,IAAI,CAAC5gQ,CAAL,GAAS,mBAAIutP,MAAJ,EAAY2nF,OAAZ,CAAT;AAEA,SAAO,wBAAU;AACf35U,IAAAA,IAAI,EAAEqxU,mBADS;AAEf1xE,IAAAA,IAAI,EAAEkqE,mBAFS;AAGf7lV,IAAAA,GAAG,EAAGssV,gBAHS;AAIfl/U,IAAAA,IAAI,EAAEqhV,OAJS;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;;;;;;;;ACxDD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,SAASwH,SAAT,CAAmBnkV,KAAnB,EAA0BusF,SAA1B,EAAqCl7F,CAArC,EAAwC6G,CAAxC,EAA2CtB,CAA3C,EAA8C;AAC5C,SAAO;AACLumF,IAAAA,MAAM,EAAE,kBAAkBn9E,KAAlB,GAA0B,MAA1B,GACJ,SADI,GACQA,KADR,GACgB,mBADhB,GAEJusF,SAFI,GAEQ,GAFR,GAEcl7F,CAFd,GAEkB,GAFlB,GAEwB6G,CAFxB,GAE4B,GAF5B,GAEkCtB,CAFlC,GAEsC;AAHzC,GAAP;AAKD;;AAEc,kBAASgtG,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4CjrV,IAA5C,EAAkDksO,IAAlD,EAAwD;AACrE,QAAMhtN,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM6sQ,MAAM,GAAGx4J,IAAI,CAACw4J,MADpB;AAAA,QAEMp8P,KAAK,GAAG4jG,IAAI,CAAC5jG,KAFnB;AAAA,QAGM4C,IAAI,GAAG,uBAAQw5P,MAAR,EAAgB,CAAC,CAAjB,EAAoB,CAApB,CAHb;AAAA,QAIM5iN,KAAK,GAAG,kBAAM1oC,CAAC,CAAC,YAAD,CAAP,CAJd;AAAA,QAKMszU,WAAW,GAAG,kBAAMtzU,CAAC,CAAC,kBAAD,CAAP,CALpB;AAAA,QAMMuzU,UAAU,GAAGvzU,CAAC,CAAC,YAAD,CANpB;AAAA,QAOMwzU,aAAa,GAAGxzU,CAAC,CAAC,eAAD,CAPvB;;AASA,MAAIyzU,OAAO,GAAG/qS,KAAK,KAAK,CAAV,IAAe,CAAC,CAACA,KAA/B;AAAA,MACI6/B,MADJ;AAGA,QAAM6qQ,QAAQ,GAAG,mBAAQtyV,IAAR,CAAjB;AACAsyV,EAAAA,QAAQ,CAACnlE,IAAT,GAAgBn8Q,IAAhB;AACAshV,EAAAA,QAAQ,CAACptV,MAAT,GAAkB,mBAAQga,CAAC,CAAC,cAAD,CAAD,IAAqB,CAA7B,CAAlB;AACAozU,EAAAA,QAAQ,CAACptV,MAAT,CAAgBioR,IAAhB,GAAuBn8Q,IAAvB;AAEA,QAAMmhV,OAAO,GAAG;AACd/jV,IAAAA,KAAK,EAAGA,KADM;AAEd2/G,IAAAA,KAAK,EAAG+6N,gBAFM;AAGd58G,IAAAA,IAAI,EAAI,GAHM;AAIdhnO,IAAAA,MAAM,EAAE,6BAAagnO,IAAI,CAAChnO,MAAlB,EAA0Bga,CAAC,CAAC,aAAD,CAA3B;AAJM,GAAhB;AAOA,QAAM4xL,KAAK,GAAG,mBAAI05D,MAAJ,EACZmoF,OAAO,GACHJ,SAAS,CAACnkV,KAAD,EAAQw5C,KAAR,EAAe,QAAf,EAAyB,SAAzB,EAAoC,UAApC,CADN,GAEH;AAACrsD,IAAAA,KAAK,EAAE;AAAR,GAHQ,EAIZ,uBAAQivQ,MAAR,EAAgB,MAAhB,EAAwB,OAAxB,CAJY,CAAd;AAOA,QAAMzhG,QAAQ,GAAG,mBAAIyhG,MAAJ,EACf,qBAAMA,MAAN,EAAc,QAAd,EAAwB,KAAxB,CADe,EAEfmoF,OAAO,GACHJ,SAAS,CAACnkV,KAAD,EAAQw5C,KAAR,EAAe,OAAf,EAAwB,UAAxB,EAAoC,UAApC,CADN,GAEH;AAACrsD,IAAAA,KAAK,EAAE;AAAR,GAJW,CAAjB;AAOA,QAAMq3V,UAAU,GAAGL,SAAS,CAACnkV,KAAD,EAAQw5C,KAAR,EAAgB,KAAI4qS,WAAY,GAAhC,EAAoCA,WAApC,EAAiD,CAAjD,CAA5B;AACAG,EAAAA,OAAO,GAAGA,OAAO,IAAIH,WAArB;AAEA,QAAMljE,KAAK,GAAG;AACZvgC,IAAAA,OAAO,EAAE5gN,eADG;AAEZzvC,IAAAA,CAAC,EAAE,mBAAI8rQ,MAAJ,EAAY2nF,OAAZ,EAAqBG,QAArB,CAFS;AAGZr1U,IAAAA,CAAC,EAAE,mBAAIutP,MAAJ,EAAY2nF,OAAZ,EAAqBG,QAArB;AAHS,GAAd;AAMA,QAAMvsV,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KADM;AAEb7nM,IAAAA,MAAM,EAAEA,MAAM,GAAG;AACfsnK,MAAAA,OAAO,EAAExnK,cADM;AAEf0pB,MAAAA,IAAI,EAAE;AAAC8c,QAAAA,KAAK,EAAE26N;AAAR,OAFS;AAGfhqV,MAAAA,CAAC,EAAE4wR,KAAK,CAAC5wR,CAHM;AAIfue,MAAAA,CAAC,EAAEqyQ,KAAK,CAACryQ,CAJM;AAKf6zL,MAAAA,KALe;AAMf/nC,MAAAA;AANe,KAFJ;AAUb80G,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN,eADL;AAEJzvC,MAAAA,CAAC,EAAE4wR,KAAK,CAAC5wR,CAFL;AAGJue,MAAAA,CAAC,EAAEqyQ,KAAK,CAACryQ;AAHL;AAVO,GAAf;AAiBA,yBAAYlX,MAAZ,EAAoB;AAClBse,IAAAA,EAAE,EAAE,CAACouU,UAAD,IAAeE,OAAf,GAAyB,mBAAInoF,MAAJ,EAAYooF,UAAZ,CAAzB,GAAmD,IADrC;AAElBv1U,IAAAA,EAAE,EAAE,CAACq1U,aAAD,IAAkBC,OAAlB,GAA4B,mBAAInoF,MAAJ,EAAYooF,UAAZ,CAA5B,GAAsD;AAFxC,GAApB;AAKA,yBAAY7sV,MAAZ,EAAoB;AAClB22O,IAAAA,KAAK,EAAQx9N,CAAC,CAAC,YAAD,CADI;AAElBnW,IAAAA,IAAI,EAASmW,CAAC,CAAC,YAAD,CAFI;AAGlB8vP,IAAAA,WAAW,EAAE9vP,CAAC,CAAC,cAAD,CAHI;AAIlB22P,IAAAA,IAAI,EAAS32P,CAAC,CAAC,WAAD,CAJI;AAKlBk2P,IAAAA,QAAQ,EAAKl2P,CAAC,CAAC,eAAD,CALI;AAMlBw3P,IAAAA,UAAU,EAAGx3P,CAAC,CAAC,iBAAD,CANI;AAOlBs3P,IAAAA,SAAS,EAAIt3P,CAAC,CAAC,gBAAD,CAPI;AAQlBqvD,IAAAA,KAAK,EAAQrvD,CAAC,CAAC,YAAD,CARI;AASlB82P,IAAAA,UAAU,EAAG92P,CAAC,CAAC,iBAAD;AATI,GAApB,EAUG;AACD4xL,IAAAA,KAAK,EAAQ2hJ,UADZ;AAED1pL,IAAAA,QAAQ,EAAK2pL;AAFZ,GAVH;;AAeA,QAAMrhF,KAAK,GAAKnyP,CAAC,CAAC,YAAD,CAAjB;;AACA,MAAIksU,OAAO,GAAGlsU,CAAC,CAAC,cAAD,CAAf,CAtFqE,CAwFrE;;;AACAksU,EAAAA,OAAO,GAAGA,OAAO,IAAI/5E,KAAX,GAAmB;AAC3B4Y,IAAAA,UAAU,EAAE/qQ,CAAC,CAAC,iBAAD,CADc;AAE3BsqB,IAAAA,MAAM,EAAE4hT,OAFmB;AAG3B37I,IAAAA,KAAK,EAAE,aAHoB;AAI3B4hE,IAAAA,KAAK,EAAEA,KAAK,GAAG;AAACjjQ,MAAAA,KAAD;AAAQo8P,MAAAA,MAAR;AAAgBwf,MAAAA,SAAS,EAAE3Y;AAA3B,KAAH,GAAuC;AAJxB,GAAnB,GAKN5jJ,SALJ;;AAOA,MAAIhmC,MAAM,CAACqpH,KAAP,KAAiBA,KAArB,EAA4B;AAC1BrpH,IAAAA,MAAM,CAACqpH,KAAP,GAAe,qBAAMrpH,MAAM,CAACqpH,KAAb,EAAoBA,KAApB,CAAf;AACD;;AACD,MAAIrpH,MAAM,CAACshF,QAAP,KAAoBA,QAAxB,EAAkC;AAChCthF,IAAAA,MAAM,CAACshF,QAAP,GAAkB,qBAAMthF,MAAM,CAACshF,QAAb,EAAuBA,QAAvB,CAAlB;AACD;;AAED,SAAO,wBAAU;AACfvwJ,IAAAA,IAAI,EAAGuxU,mBADQ;AAEf5xE,IAAAA,IAAI,EAAGiqE,oBAFQ;AAGfpjE,IAAAA,KAAK,EAAE+pE,0BAHQ;AAIfvsV,IAAAA,GAAG,EAAIssV,gBAJQ;AAKfl/U,IAAAA,IAAI,EAAGqhV,OALQ;AAMfllV,IAAAA,MANe;AAOfqlV,IAAAA;AAPe,GAAV,EAQJL,UARI,CAAP;AASD;;;;;;;;;ACjID;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS/4O,IAAT,EAAer0G,MAAf,EAAuBotV,UAAvB,EAAmCE,OAAnC,EAA4C;AACzD,QAAM/rU,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CAAV;AAAA,QACM6sQ,MAAM,GAAGx4J,IAAI,CAACw4J,MADpB;AAAA,QAEMx5P,IAAI,GAAG,uBAAQw5P,MAAR,EAAgB,CAAC,CAAjB,EAAoB,CAApB,CAFb;;AAIA,MAAI8kB,KAAJ,EAAW7nM,MAAX;AACA,QAAM1hF,MAAM,GAAG;AACbupR,IAAAA,KAAK,EAAEA,KAAK,GAAG;AACbvgC,MAAAA,OAAO,EAAE5gN,eADI;AAEbmgK,MAAAA,MAAM,EAAE,mBAAQpvL,CAAC,CAAC,aAAD,EAAgB,IAAhB,CAAT,CAFK;AAGb4xL,MAAAA,KAAK,EAAE;AAACvlH,QAAAA,MAAM,EAAEo/P;AAAT;AAHM,KADF;AAMbljQ,IAAAA,MAAM,EAAEA,MAAM,GAAG,sBAAO,EAAP,EAAW6nM,KAAX,EAAkB;AACjCvgC,MAAAA,OAAO,EAAExnK,cADwB;AAEjC0pB,MAAAA,IAAI,EAAE,mBAAQe,IAAI,CAACn5G,KAAb;AAF2B,KAAlB,CANJ;AAUbglR,IAAAA,IAAI,EAAE;AACJ9uB,MAAAA,OAAO,EAAE5gN;AADL;AAVO,GAAf;AAeA,QAAM0kT,QAAQ,GAAG;AACftnQ,IAAAA,MAAM,EAAG,eAAcymB,IAAI,CAAC5jG,KAAM,OAAM,2BAAW,CAAX,EAAc,CAAd,EAAiB,GAAjB,CAAsB;AAD/C,GAAjB;AAIAq5E,EAAAA,MAAM,CAAC/oF,CAAP,GAAW,mBAAI8rQ,MAAJ,EAAYqoF,QAAZ,CAAX;AACAprQ,EAAAA,MAAM,CAACxqE,CAAP,GAAW,mBAAIutP,MAAJ,EAAYqoF,QAAZ,CAAX;AACAvjE,EAAAA,KAAK,CAAC5yC,KAAN,GAAc,mBAAI8tB,MAAJ,EAAYr8N,eAAZ,EAAkB,oBAAKn9B,IAAL,EAAW,EAAX,CAAlB,CAAd;AACAs+Q,EAAAA,KAAK,CAACvmH,QAAN,GAAiB,mBAAIyhG,MAAJ,EAAY,qBAAMA,MAAN,EAAcuc,iBAAd,EAAsBH,cAAtB,CAAZ,EAAwC;AAACrrR,IAAAA,KAAK,EAAEwrR;AAAR,GAAxC,CAAjB;AACAt/L,EAAAA,MAAM,CAACi1J,KAAP,GAAe4yC,KAAK,CAAC5yC,KAArB;AACAj1J,EAAAA,MAAM,CAACshF,QAAP,GAAkBumH,KAAK,CAACvmH,QAAxB;AAEA,yBAAYhjK,MAAZ,EAAoB;AAClBgD,IAAAA,IAAI,EAASmW,CAAC,CAAC,YAAD,CADI;AAElB8vP,IAAAA,WAAW,EAAE9vP,CAAC,CAAC,cAAD,CAFI;AAGlB22P,IAAAA,IAAI,EAAS32P,CAAC,CAAC,WAAD,CAHI;AAIlBk2P,IAAAA,QAAQ,EAAKl2P,CAAC,CAAC,eAAD,CAJI;AAKlBs3P,IAAAA,SAAS,EAAIt3P,CAAC,CAAC,gBAAD,CALI;AAMlBw3P,IAAAA,UAAU,EAAGx3P,CAAC,CAAC,iBAAD,CANI;AAOlBqvD,IAAAA,KAAK,EAAQrvD,CAAC,CAAC,YAAD,CAPI;AAQlB82P,IAAAA,UAAU,EAAG92P,CAAC,CAAC,iBAAD;AARI,GAApB,EASG;AAAE;AACH4xL,IAAAA,KAAK,EAAQ5xL,CAAC,CAAC,YAAD,CADb;AAEDw9N,IAAAA,KAAK,EAAQx9N,CAAC,CAAC,YAAD,CAFb;AAGD6pJ,IAAAA,QAAQ,EAAK7pJ,CAAC,CAAC,eAAD;AAHb,GATH;AAeA4zU,EAAAA,UAAU,CAAC5zU,CAAD,EAAIsrP,MAAJ,EAAYzkQ,MAAZ,EAAoBglV,UAApB,CAAV;AACAhlV,EAAAA,MAAM,CAAC0hF,MAAP,CAAcqpH,KAAd,GAAsB,qBAAM/qM,MAAM,CAAC0hF,MAAP,CAAcqpH,KAApB,EAA2Bw+E,KAAK,CAACx+E,KAAjC,CAAtB;AACA/qM,EAAAA,MAAM,CAAC0hF,MAAP,CAAci1J,KAAd,GAAsB,qBAAM32O,MAAM,CAAC0hF,MAAP,CAAci1J,KAApB,EAA2B4yC,KAAK,CAAC5yC,KAAjC,CAAtB;AACA32O,EAAAA,MAAM,CAAC0hF,MAAP,CAAcshF,QAAd,GAAyB,qBAAMhjK,MAAM,CAAC0hF,MAAP,CAAcshF,QAApB,EAA8BumH,KAAK,CAACvmH,QAApC,CAAzB;AAEA,SAAO,wBAAU;AACfvwJ,IAAAA,IAAI,EAAGuxU,mBADQ;AAEf5xE,IAAAA,IAAI,EAAGmqE,oBAFQ;AAGftjE,IAAAA,KAAK,EAAEgqE,0BAHQ;AAIfp/U,IAAAA,IAAI,EAAGqhV,OAJQ;AAKfllV,IAAAA;AALe,GAAV,EAMJglV,UANI,CAAP;AAOD;;AAED,SAAS+H,UAAT,CAAoB5zU,CAApB,EAAuBsrP,MAAvB,EAA+BzkQ,MAA/B,EAAuCglV,UAAvC,EAAmD;AACjD,QAAMhgE,IAAI,GAAG,CAACxvR,KAAD,EAAQ2X,GAAR,KAAgB3X,KAAK,IAAI,IAAT,IACxBwK,MAAM,CAAC0hF,MAAP,CAAcv0E,GAAd,IAAqB,qBAAM,mBAAQ3X,KAAR,CAAN,EAAsBwK,MAAM,CAAC0hF,MAAP,CAAcv0E,GAAd,CAAtB,CAArB,EAAgE,KADxC,IAEzB,CAAC,eAAIA,GAAJ,EAAS63U,UAAT,CAAD,GAAwB,IAAxB,GAA+B,KAFnC;;AAIA,QAAMgI,KAAK,GAAGhoE,IAAI,CAAC7rQ,CAAC,CAAC,QAAD,CAAF,EAAc,GAAd,CAAlB;AAAA,QACM8zU,KAAK,GAAGjoE,IAAI,CAAC7rQ,CAAC,CAAC,QAAD,CAAF,EAAc,GAAd,CADlB;AAGAnZ,EAAAA,MAAM,CAACupR,KAAP,CAAavE,IAAb,GAAoBioE,KAAK,KAAKD,KAAV,GAChB,mBAAQC,KAAR,CADgB,GAEhB,mBAAIxoF,MAAJ,EAAY,mBAAQwoF,KAAR,CAAZ,EAA4B,mBAAQD,KAAR,CAA5B,CAFJ;AAGD;;;;;;;;;ACjFD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAS/gP,IAAT,EAAeqkO,KAAf,EAAsB;AACnC,QAAM14U,MAAM,GAAG,yBAAWq0G,IAAX,EAAiBqkO,KAAjB,CAAf;AAAA,QACMtwU,MAAM,GAAGisG,IAAI,CAACjsG,MAAL,IAAe,EAD9B;AAAA,QAEMktV,UAAU,GAAGltV,MAAM,CAACjE,IAAP,IAAe,EAFlC;AAAA,QAGMhI,IAAI,GAAGm5V,UAAU,CAACn5V,IAAX,IAAmB2zH,SAHhC;AAAA,QAIMwlJ,WAAW,GAAGggF,UAAU,CAAChgF,WAJ/B;AAAA,QAKM+L,KAAK,GAAGi0E,UAAU,CAACj0E,KALzB;AAAA,QAMM9/P,CAAC,GAAG,uBAAO8yF,IAAP,EAAar0G,MAAb,CANV;AAAA,QAOMuuO,IAAI,GAAG,yBAAShtN,CAAT,CAPb,CADmC,CAUnC;;;AACA,QAAMo4M,KAAK,GAAG;AACZlpN,IAAAA,KAAK,EAAG4jG,IAAI,CAAC5jG,KADD;AAEZmwM,IAAAA,KAAK,EAAG,CAAC,CAACr/L,CAAC,CAAC,OAAD,CAFC;AAGZ0tE,IAAAA,MAAM,EAAE,CAAC,CAAC1tE,CAAC,CAAC,QAAD,CAHC;AAIZsrQ,IAAAA,IAAI,EAAI,CAAC,CAACtrQ,CAAC,CAAC,MAAD,CAJC;AAKZyuL,IAAAA,MAAM,EAAE,CAAC,CAACzuL,CAAC,CAAC,QAAD,CALC;AAMZrmB,IAAAA,KAAK,EAAGm5G,IAAI,CAACn5G,KAAL,IAAc;AANV,GAAd;AAQA,QAAMoyV,OAAO,GAAG,gBAAI5U,KAAK,CAACn9T,GAAN,CAAU,yBAAQ,EAAR,EAAY,CAACo+M,KAAD,CAAZ,CAAV,CAAJ,CAAhB,CAnBmC,CAqBnC;;AACA,QAAM47H,QAAQ,GAAG,gBAAI7c,KAAK,CAACn9T,GAAN,CAAU,2BAAU;AACvC9K,IAAAA,KAAK,EAAIioU,KAAK,CAACsB,QAAN,CAAe3lO,IAAI,CAAC5jG,KAApB,CAD8B;AAEvC01Q,IAAAA,KAAK,EAAIuyD,KAAK,CAACvmI,QAAN,CAAeo8B,IAAI,CAAC43C,KAApB,CAF8B;AAGvCxzM,IAAAA,KAAK,EAAI+lQ,KAAK,CAACiS,cAAN,CAAqBt2O,IAAI,CAAC0vJ,SAA1B,CAH8B;AAIvC/+P,IAAAA,MAAM,EAAG0zU,KAAK,CAACiS,cAAN,CAAqBt2O,IAAI,CAACrvG,MAA1B,CAJ8B;AAKvCs+N,IAAAA,OAAO,EAAEo1G,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAACu9O,WAApB,CAL8B;AAMvCvsI,IAAAA,UAAU,EAAEqzH,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAACgxG,UAApB,CAN2B;AAOvCrB,IAAAA,eAAe,EAAE00H,KAAK,CAACvmI,QAAN,CAAe99F,IAAI,CAAC8I,MAApB;AAPsB,GAAV,CAAV,CAAJ,CAAjB,CAtBmC,CAgCnC;;AACA,QAAMuyD,QAAQ,GAAG,EAAjB;AACA,MAAIrtK,IAAJ,CAlCmC,CAoCnC;;AACA,MAAIs3N,KAAK,CAACkzD,IAAV,EAAgB;AACdn9G,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,uBAASw5G,IAAT,EAAer0G,MAAf,EAAuBoI,MAAM,CAACykR,IAA9B,EAAoC0oE,QAApC,EAA8ChnH,IAA9C,CAAd;AACD,GAvCkC,CAyCnC;;;AACA,MAAI5U,KAAK,CAAC/Y,KAAV,EAAiB;AACfv+M,IAAAA,IAAI,GAAGkf,CAAC,CAAC,UAAD,CAAR;AACAmuJ,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,wBAAUw5G,IAAV,EAAgBr0G,MAAhB,EAAwBoI,MAAM,CAACw4M,KAA/B,EAAsC20I,QAAtC,EAAgDlzV,IAAhD,EAAsDksO,IAAtD,CAAd;AACD,GA7CkC,CA+CnC;;;AACA,MAAI5U,KAAK,CAAC1qI,MAAV,EAAkB;AAChB5sF,IAAAA,IAAI,GAAGs3N,KAAK,CAAC/Y,KAAN,GAAcv+M,IAAd,GAAqB,CAA5B;AACAqtK,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,yBAAWw5G,IAAX,EAAiBr0G,MAAjB,EAAyBoI,MAAM,CAAC6mF,MAAhC,EAAwCsmQ,QAAxC,EAAkDlzV,IAAlD,EAAwDksO,IAAxD,CAAd;AACD,GAnDkC,CAqDnC;;;AACA,MAAI5U,KAAK,CAAC3pB,MAAV,EAAkB;AAChBtgC,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,yBAAWw5G,IAAX,EAAiBr0G,MAAjB,EAAyBoI,MAAM,CAAC4nM,MAAhC,EAAwCs9I,OAAxC,CAAd;AACD,GAxDkC,CA0DnC;;;AACA,MAAI3zH,KAAK,CAACz+N,KAAV,EAAiB;AACfw0K,IAAAA,QAAQ,CAAC70K,IAAT,CAAc,wBAAUw5G,IAAV,EAAgBr0G,MAAhB,EAAwBoI,MAAM,CAAClN,KAA/B,EAAsCoyV,OAAtC,CAAd;AACD,GA7DkC,CA+DnC;;;AACA,SAAO,mBACL,yBAAW;AACT9yE,IAAAA,IAAI,EAASqP,eADJ;AAET59Q,IAAAA,IAAI,EAASqhV,OAFJ;AAGTllV,IAAAA,MAAM,EAAO,wBAAaotV,eAAe,CAACj0U,CAAD,EAAI8yF,IAAJ,CAA5B,EAAuCihP,UAAvC,EAAmD7W,eAAnD,CAHJ;AAITlrM,IAAAA,KAAK,EAAQm8B,QAJJ;AAKTgrG,IAAAA,IAAI,EAASn5P,CAAC,CAAC,MAAD,CALL;AAMTo5P,IAAAA,WAAW,EAAEp5P,CAAC,CAAC,aAAD,CANL;AAOT4wP,IAAAA,MAAM,EAAO5wP,CAAC,CAAC,QAAD,CAPL;AAQTplB,IAAAA,IARS;AASTm5Q,IAAAA,WATS;AAUT+L,IAAAA;AAVS,GAAX,CADK,EAaLq3D,KAbK,CAAP;AAeD;;AAED,SAAS8c,eAAT,CAAyBj0U,CAAzB,EAA4B8yF,IAA5B,EAAkC;AAChC,QAAMjsG,MAAM,GAAG;AAACupR,IAAAA,KAAK,EAAE,EAAR;AAAY7nM,IAAAA,MAAM,EAAE;AAApB,GAAf;AAEA,yBAAY1hF,MAAZ,EAAoB;AAClBykQ,IAAAA,MAAM,EAAQtrP,CAAC,CAAC,QAAD,CADG;AAElBha,IAAAA,MAAM,EAAQga,CAAC,CAAC,QAAD,CAAD,IAAe,CAFX;AAGlB8zK,IAAAA,QAAQ,EAAM,kBAAMhhF,IAAI,CAACghF,QAAX,EAAqB,CAArB,CAHI;AAIlB43F,IAAAA,YAAY,EAAE1rQ,CAAC,CAAC,cAAD,CAJG;AAKlBwrQ,IAAAA,SAAS,EAAKxrQ,CAAC,CAAC,WAAD,CALG;AAMlByrQ,IAAAA,SAAS,EAAKzrQ,CAAC,CAAC,WAAD,CANG;AAOlB6a,IAAAA,KAAK,EAAS;AAACwxD,MAAAA,MAAM,EAAG,mBAAkBymB,IAAI,CAAC5jG,KAAM;AAAvC,KAPI;AAQlB4qM,IAAAA,SAAS,EAAK95L,CAAC,CAAC,WAAD,CARG;AAUlB;AACA47F,IAAAA,MAAM,EAAQ9I,IAAI,CAAC8I,MAXD;AAYlBkoG,IAAAA,UAAU,EAAIhxG,IAAI,CAACgxG;AAZD,GAApB;AAeA,SAAOj9M,MAAP;AACD;;;;;;;;;ACnHD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAASisG,IAAT,EAAeqkO,KAAf,EAAsB+c,YAAtB,EAAoC;AACjD,QAAMhmJ,OAAO,GAAG,qBAAMp7F,IAAI,CAACo7F,OAAX,CAAhB;AAAA,QACMstD,MAAM,GAAG,qBAAM1oJ,IAAI,CAAC0oJ,MAAX,CADf,CADiD,CAIjD;;AACA,MAAI,CAAC04F,YAAL,EAAmBhmJ,OAAO,CAAC/wM,OAAR,CAAgB6iB,CAAC,IAAI,qBAAYA,CAAZ,EAAem3T,KAAf,CAArB,EAL8B,CAOjD;;AACA,uBAAMrkO,IAAI,CAACoxM,WAAX,EAAwB/mT,OAAxB,CAAgC6iB,CAAC,IAAI,yBAAgBA,CAAhB,EAAmBm3T,KAAnB,CAArC,EARiD,CAUjD;;AACA37E,EAAAA,MAAM,CAACr+P,OAAP,CAAe6iB,CAAC,IAAI,sBAAUA,CAAV,EAAam3T,KAAb,CAApB,EAXiD,CAajD;;AACA,uBAAMrkO,IAAI,CAACzqG,IAAX,EAAiBlL,OAAjB,CAAyB6iB,CAAC,IAAI,mBAAUA,CAAV,EAAam3T,KAAb,CAA9B,EAdiD,CAgBjD;;AACA37E,EAAAA,MAAM,CAACr+P,OAAP,CAAe6iB,CAAC,IAAI,uBAAWA,CAAX,EAAcm3T,KAAd,CAApB,EAjBiD,CAmBjD;;AACA,GAAC+c,YAAY,IAAIhmJ,OAAjB,EAA0B/wM,OAA1B,CAAkC6iB,CAAC,IAAI,4BAAmBA,CAAnB,EAAsBm3T,KAAtB,CAAvC,EApBiD,CAsBjD;;AACA,uBAAMrkO,IAAI,CAAC1vG,IAAX,EAAiBjG,OAAjB,CAAyB6iB,CAAC,IAAI,mBAAUA,CAAV,EAAam3T,KAAb,CAA9B,EAvBiD,CAyBjD;;AACA,uBAAMrkO,IAAI,CAACk/B,KAAX,EAAkB70I,OAAlB,CAA0B6iB,CAAC,IAAI,mBAAUA,CAAV,EAAam3T,KAAb,CAA/B,EA1BiD,CA4BjD;;AACA,uBAAMrkO,IAAI,CAACi7K,OAAX,EAAoB5wR,OAApB,CAA4B6iB,CAAC,IAAI,qBAAYA,CAAZ,EAAem3T,KAAf,CAAjC,EA7BiD,CA+BjD;;AACA,MAAIrkO,IAAI,CAACn5G,KAAT,EAAgB,oBAAWm5G,IAAI,CAACn5G,KAAhB,EAAuBw9U,KAAvB,EAhCiC,CAkCjD;;AACAA,EAAAA,KAAK,CAACgd,YAAN;AAEA,SAAOhd,KAAP;AACD;;;;;;;;;ACjDD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,MAAMid,UAAU,GAAGthP,IAAI,IAAI,wBACzB;AACEs9K,EAAAA,KAAK,EAAE;AACL5wR,IAAAA,CAAC,EAAE;AAACnD,MAAAA,KAAK,EAAE;AAAR,KADE;AAEL0hB,IAAAA,CAAC,EAAE;AAAC1hB,MAAAA,KAAK,EAAE;AAAR;AAFE,GADT;AAKEksF,EAAAA,MAAM,EAAE;AACNhnF,IAAAA,KAAK,EAAE;AAAC8qF,MAAAA,MAAM,EAAE;AAAT,KADD;AAEN/8D,IAAAA,MAAM,EAAE;AAAC+8D,MAAAA,MAAM,EAAE;AAAT;AAFF;AALV,CADyB,EAWzBymB,IAXyB,CAA3B;;AAce,SAASuhP,SAAT,CAAmBvhP,IAAnB,EAAyBqkO,KAAzB,EAAgC;AAC7C,QAAM14U,MAAM,GAAG04U,KAAK,CAAC14U,MAArB,CAD6C,CAG7C;;AACA,QAAMu+L,IAAI,GAAG,gBAAIm6I,KAAK,CAACn6I,IAAN,GAAam6I,KAAK,CAACn9T,GAAN,CAAU,sBAAV,CAAjB,CAAb,CAJ6C,CAM7C;;AACA,QAAMk0L,OAAO,GAAGomJ,cAAc,CAACxhP,IAAD,EAAOr0G,MAAP,CAA9B;AACAyvM,EAAAA,OAAO,CAAC/wM,OAAR,CAAgB6iB,CAAC,IAAI,qBAAYA,CAAZ,EAAem3T,KAAf,CAArB,EAR6C,CAU7C;;AACAA,EAAAA,KAAK,CAAC/9D,WAAN,GAAoBtmK,IAAI,CAACsmK,WAAL,IAAoB36Q,MAAM,CAAC26Q,WAA/C;AACA+9D,EAAAA,KAAK,CAAC0F,WAAN,GAAoBp+U,MAAM,CAACu0L,MAA3B;AACAmkJ,EAAAA,KAAK,CAACppD,OAAN,GAAgBopD,KAAK,CAACiS,cAAN,CAAqB3qV,MAAM,CAAC0vR,MAAP,IAAiB1vR,MAAM,CAAC0vR,MAAP,CAAc//E,MAApD,CAAhB;AACA+oI,EAAAA,KAAK,CAAC/zH,MAAN,GAAe3kN,MAAM,CAAC2kN,MAAtB,CAd6C,CAgB7C;;AACA,QAAM/+L,KAAK,GAAG8yT,KAAK,CAACn9T,GAAN,CAAU,0BAAV,CAAd,CAjB6C,CAmB7C;;AACA,QAAMnT,MAAM,GAAGswU,KAAK,CAACn9T,GAAN,CAAU,wBAAO,qBAC9Bo6U,UAAU,CAACthP,IAAI,CAACjsG,MAAN,CADoB,EACL4jV,oBADK,EACMjiE,gBADN,EAE9B11K,IAAI,CAACgtK,KAFyB,EAElBq3D,KAFkB,EAEX;AAACt9G,IAAAA,KAAK,EAAE,gBAAIx1M,KAAJ;AAAR,GAFW,CAAP,CAAV,CAAf,CApB6C,CAyB7C;;AACA,QAAM0sL,MAAM,GAAGomI,KAAK,CAACn9T,GAAN,CAAU,4BAAW;AAClCo0L,IAAAA,MAAM,EAAI+oI,KAAK,CAACiS,cAAN,CAAqBt2O,IAAI,CAACs7F,MAA1B,CADwB;AAElC2/E,IAAAA,OAAO,EAAGopD,KAAK,CAACppD,OAFkB;AAGlCuB,IAAAA,QAAQ,EAAE6nD,KAAK,CAACqF,SAAN,CAAgB,UAAhB,CAHwB;AAIlCjxE,IAAAA,IAAI,EAAMvuE,IAJwB;AAKlC68B,IAAAA,KAAK,EAAK,gBAAIhzN,MAAJ;AALwB,GAAX,CAAV,CAAf;AAOAswU,EAAAA,KAAK,CAACyF,SAAN,CAAgBn5T,GAAhB,GAjC6C,CAmC7C;;AACA0zT,EAAAA,KAAK,CAACwY,SAAN,CAAgB,gBAAI9oV,MAAJ,CAAhB,EAA6B,gBAAIkqM,MAAJ,CAA7B,EAA0C,IAA1C;AACA,sBAAUj+F,IAAV,EAAgBqkO,KAAhB,EAAuBjpI,OAAvB;AACAipI,EAAAA,KAAK,CAACyF,SAAN,CAAgBtjV,IAAhB,CAAqBy3M,MAArB,EAtC6C,CAwC7C;;AACA,MAAI/4K,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,uBAAM;AAACuxP,IAAAA,IAAI,EAAEvuE,IAAP;AAAa68B,IAAAA,KAAK,EAAE,gBAAI9oB,MAAJ;AAApB,GAAN,CAAV,CAAT;AACA/4K,EAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,wBAAO;AAAC6/M,IAAAA,KAAK,EAAE,gBAAI7hM,EAAJ;AAAR,GAAP,CAAV,CAAL;AACAA,EAAAA,EAAE,GAAGm/S,KAAK,CAACn9T,GAAN,CAAU,uBAAM;AAAC6/M,IAAAA,KAAK,EAAE,gBAAI7hM,EAAJ;AAAR,GAAN,CAAV,CAAL,CA3C6C,CA6C7C;;AACAm/S,EAAAA,KAAK,CAAC6X,OAAN,CAAc,MAAd,EAAsB,IAAIN,kBAAJ,CAAcvX,KAAd,EAAqB9yT,KAArB,EAA4BA,KAA5B,EAAmC2T,EAAnC,CAAtB;AAEA,SAAOm/S,KAAP;AACD;;AAED,SAASod,YAAT,CAAsB35V,IAAtB,EAA4ByB,KAA5B,EAAmC;AACjC,SAAOA,KAAK,IAAIA,KAAK,CAACgwF,MAAf,GACH;AAAEzxF,IAAAA,IAAF;AAAQ2tF,IAAAA,MAAM,EAAElsF,KAAK,CAACgwF;AAAtB,GADG,GAEH;AAAEzxF,IAAAA,IAAF;AAAQyB,IAAAA;AAAR,GAFJ;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASi4V,cAAT,CAAwBxhP,IAAxB,EAA8Br0G,MAA9B,EAAsC;AACpC,QAAMuhB,CAAC,GAAGplB,IAAI,IAAI,kBAAMk4G,IAAI,CAACl4G,IAAD,CAAV,EAAkB6D,MAAM,CAAC7D,IAAD,CAAxB,CAAlB;AAAA,QACMszM,OAAO,GAAG,CACRqmJ,YAAY,CAAC,YAAD,EAAev0U,CAAC,CAAC,YAAD,CAAhB,CADJ,EAERu0U,YAAY,CAAC,UAAD,EAAa,uBAAcv0U,CAAC,CAAC,UAAD,CAAf,CAAb,CAFJ,EAGRu0U,YAAY,CAAC,SAAD,EAAY,sBAAav0U,CAAC,CAAC,SAAD,CAAd,CAAZ,CAHJ,EAIRu0U,YAAY,CAAC,OAAD,EAAUv0U,CAAC,CAAC,OAAD,CAAD,IAAc,CAAxB,CAJJ,EAKRu0U,YAAY,CAAC,QAAD,EAAWv0U,CAAC,CAAC,QAAD,CAAD,IAAe,CAA1B,CALJ,CADhB;AAAA,QAQMw0U,GAAG,GAAGtmJ,OAAO,CAACtoM,MAAR,CAAe,CAAC+3B,CAAD,EAAI9gC,CAAJ,MAAW8gC,CAAC,CAAC9gC,CAAC,CAACjC,IAAH,CAAD,GAAYiC,CAAZ,EAAe8gC,CAA1B,CAAf,EAA6C,EAA7C,CARZ;AAAA,QASM76B,GAAG,GAAG,EATZ,CADoC,CAYpC;;;AACA,uBAAMgwG,IAAI,CAACo7F,OAAX,EAAoB/wM,OAApB,CAA4BN,CAAC,IAAI;AAC/B,QAAI,8BAAe23V,GAAf,EAAoB33V,CAAC,CAACjC,IAAtB,CAAJ,EAAiC;AAC/B;AACAiC,MAAAA,CAAC,GAAG,sBAAO23V,GAAG,CAAC33V,CAAC,CAACjC,IAAH,CAAV,EAAoBiC,CAApB,CAAJ;AACD,KAHD,MAGO;AACL;AACAqxM,MAAAA,OAAO,CAAC50M,IAAR,CAAauD,CAAb;AACD;;AACDiG,IAAAA,GAAG,CAACjG,CAAC,CAACjC,IAAH,CAAH,GAAciC,CAAd;AACD,GATD,EAboC,CAwBpC;;AACA,uBAAM4B,MAAM,CAACyvM,OAAb,EAAsB/wM,OAAtB,CAA8BN,CAAC,IAAI;AACjC,QAAI,CAAC,8BAAeiG,GAAf,EAAoBjG,CAAC,CAACjC,IAAtB,CAAD,IAAgC,CAAC,8BAAe45V,GAAf,EAAoB33V,CAAC,CAACjC,IAAtB,CAArC,EAAkE;AAChE;AACAszM,MAAAA,OAAO,CAAC50M,IAAR,CAAauD,CAAb;AACD;AACF,GALD;AAOA,SAAOqxM,OAAP;AACD;;;;;;;;;ACnID;;AAEA;;AAIA;;AAKA;;AACA;;AAEA;;;;AAKe,SAAS+2I,KAAT,CAAexmV,MAAf,EAAuBuxE,OAAvB,EAAgC;AAC7C,OAAKvxE,MAAL,GAAcA,MAAM,IAAI,EAAxB;AACA,OAAKuxE,OAAL,GAAeA,OAAO,IAAI,EAA1B;AAEA,OAAKoxQ,QAAL,GAAgB,EAAhB;AACA,OAAKvyN,KAAL,GAAa,EAAb;AACA,OAAKq/E,OAAL,GAAe,EAAf;AACA,OAAKumJ,OAAL,GAAe,EAAf;AACA,OAAKj5F,MAAL,GAAc,EAAd;AACA,OAAKxoE,MAAL,GAAc,EAAd;AACA,OAAK3qL,IAAL,GAAY,EAAZ;AAEA,OAAKs9R,OAAL,GAAe,EAAf;AACA,OAAKhgQ,OAAL,GAAe,EAAf;AACA,OAAKi3S,SAAL,GAAiB,EAAjB;AACA,OAAKC,WAAL,GAAmB,IAAnB;AACA,OAAKz5H,MAAL,GAAc,IAAd;AAEA,OAAKsxI,GAAL,GAAW,CAAX;AACA,OAAKC,MAAL,GAAc,CAAd;AACA,OAAKC,QAAL,GAAgB,CAAC,CAAD,CAAhB;AAEA,OAAKC,OAAL,GAAe,EAAf;AACA,OAAKC,OAAL,GAAe,EAAf;AACA,OAAKC,OAAL,GAAe,EAAf;AACA,OAAKC,SAAL,GAAiB,EAAjB;AACD;;AAED,SAASC,QAAT,CAAkB9d,KAAlB,EAAyB;AACvB,OAAK14U,MAAL,GAAc04U,KAAK,CAAC14U,MAApB;AACA,OAAKuxE,OAAL,GAAemnQ,KAAK,CAACnnQ,OAArB;AACA,OAAK+9M,OAAL,GAAeopD,KAAK,CAACppD,OAArB;AAEA,OAAKl/J,KAAL,GAAazyH,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAACtoN,KAApB,CAAb;AACA,OAAKq/E,OAAL,GAAe9xM,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAACjpI,OAApB,CAAf;AACA,OAAKumJ,OAAL,GAAer4V,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAACsd,OAApB,CAAf;AACA,OAAKj5F,MAAL,GAAcp/P,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAAC37E,MAApB,CAAd;AACA,OAAKxoE,MAAL,GAAc52L,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAACnkJ,MAApB,CAAd;AACA,OAAK3qL,IAAL,GAAYjM,MAAM,CAAC60L,MAAP,CAAckmJ,KAAK,CAAC9uU,IAApB,CAAZ;AAEA,OAAKs9R,OAAL,GAAe,EAAf;AACA,OAAKhgQ,OAAL,GAAe,EAAf;AACA,OAAKi3S,SAAL,GAAiB,EAAjB;AAEA,OAAK8X,GAAL,GAAW,CAAX;AACA,OAAKC,MAAL,GAAc,EAAExd,KAAK,CAACyd,QAAN,CAAe,CAAf,CAAhB;AACA,OAAKA,QAAL,GAAgBzd,KAAK,CAACyd,QAAtB;AAEA,OAAKC,OAAL,GAAe1d,KAAK,CAAC0d,OAAN,CAAcnyV,KAAd,EAAf;AACA,OAAKoyV,OAAL,GAAe3d,KAAK,CAAC2d,OAAN,CAAcpyV,KAAd,EAAf;AACA,OAAKqyV,OAAL,GAAe5d,KAAK,CAAC4d,OAAN,CAAcryV,KAAd,EAAf;AACA,OAAKsyV,SAAL,GAAiB7d,KAAK,CAAC6d,SAAvB;AACD;;AAED/P,KAAK,CAACxrV,SAAN,GAAkBw7V,QAAQ,CAACx7V,SAAT,GAAqB;AACrC8hD,EAAAA,KAAK,CAACu3D,IAAD,EAAO;AACV,WAAO,oBAAWA,IAAX,EAAiB,IAAjB,CAAP;AACD,GAHoC;;AAKrCyrH,EAAAA,IAAI,GAAG;AACL,WAAO,IAAI02H,QAAJ,CAAa,IAAb,CAAP;AACD,GAPoC;;AASrC5N,EAAAA,UAAU,GAAG;AACX,WAAO,KAAKsN,MAAL,GAAc,CAArB;AACD,GAXoC;;AAarC1F,EAAAA,SAAS,GAAG;AACV,SAAK/nS,MAAL;AACA,WAAO;AACLkyN,MAAAA,WAAW,EAAE,KAAKA,WADb;AAELwjE,MAAAA,SAAS,EAAI,KAAKA,SAFb;AAGLj3C,MAAAA,OAAO,EAAM,KAAKA,OAHb;AAILhgQ,MAAAA,OAAO,EAAM,KAAKA,OAJb;AAKLy7S,MAAAA,QAAQ,EAAK,KAAKA,QALb;AAMLvE,MAAAA,WAAW,EAAE,KAAKA,WANb;AAOLz5H,MAAAA,MAAM,EAAO,KAAKA;AAPb,KAAP;AASD,GAxBoC;;AA0BrC92M,EAAAA,EAAE,GAAG;AACH,WAAO,CAAC,KAAKqoV,MAAL,GAAc,KAAKA,MAAL,GAAc,GAA5B,GAAkC,CAAnC,IAAwC,KAAKD,GAAL,EAA/C;AACD,GA5BoC;;AA8BrC16U,EAAAA,GAAG,CAACge,EAAD,EAAK;AACN,SAAK4kT,SAAL,CAAetjV,IAAf,CAAoB0+B,EAApB;AACAA,IAAAA,EAAE,CAAC1rB,EAAH,GAAQ,KAAKA,EAAL,EAAR,CAFM,CAGN;;AACA,QAAI0rB,EAAE,CAACusT,IAAP,EAAa;AACXvsT,MAAAA,EAAE,CAACusT,IAAH,CAAQpnV,OAAR,CAAgB87U,GAAG,IAAI;AAAEA,QAAAA,GAAG,CAACsF,IAAJ,GAAWvmT,EAAE,CAAC1rB,EAAd;AAAmB,OAA5C;AACA0rB,MAAAA,EAAE,CAACusT,IAAH,GAAU,IAAV;AACD;;AACD,WAAOvsT,EAAP;AACD,GAvCoC;;AAyCrC4oT,EAAAA,KAAK,CAAC5oT,EAAD,EAAK;AACR,UAAMk9T,IAAI,GAAGl9T,EAAE,YAAYssT,WAAd,GAAsB,eAAItsT,EAAJ,CAAtB,GAAgCA,EAA7C;AACA,WAAO,KAAKhe,GAAL,CAAS,uBAAM;AAAC3d,MAAAA,KAAK,EAAE64V;AAAR,KAAN,CAAT,CAAP;AACD,GA5CoC;;AA8CrCtP,EAAAA,SAAS,CAAC3jK,MAAD,EAAS;AAChB,SAAK0jH,OAAL,CAAarsS,IAAb,CAAkB2oL,MAAlB;AACAA,IAAAA,MAAM,CAAC31K,EAAP,GAAY,KAAKA,EAAL,EAAZ;AACA,WAAO21K,MAAP;AACD,GAlDoC;;AAoDrCslK,EAAAA,SAAS,CAACh/P,MAAD,EAAS;AAChB,SAAK5iD,OAAL,CAAarsC,IAAb,CAAkBivF,MAAlB;AACA,WAAOA,MAAP;AACD,GAvDoC;;AAyDrC;AACArhC,EAAAA,MAAM,GAAG;AACP,QAAItsD,IAAJ,EAAUosL,EAAV,CADO,CAGP;;AACA,QAAI,KAAKgW,IAAT,EAAe,KAAKA,IAAL,CAAUA,IAAV,GAAiB,IAAjB,CAJR,CAMP;;AACA,SAAKpiM,IAAL,IAAa,KAAKszM,OAAlB,EAA2B;AACzB,WAAKA,OAAL,CAAatzM,IAAb,EAAmByxF,MAAnB,GAA4BzxF,IAA5B;AACD,KATM,CAWP;;;AACA,SAAKA,IAAL,IAAa,KAAK4gQ,MAAlB,EAA0B;AACxB,WAAKA,MAAL,CAAY5gQ,IAAZ,EAAkBsU,KAAlB,GAA0BtU,IAA1B;AACD,KAdM,CAgBP;;;AACA,aAASu6V,QAAT,CAAkBn9T,EAAlB,EAAsBp9B,IAAtB,EAA4B0e,IAA5B,EAAkC;AAChC,UAAIjR,IAAJ,EAAUqR,IAAV;;AACA,UAAIse,EAAJ,EAAQ;AACN3vB,QAAAA,IAAI,GAAG2vB,EAAE,CAAC3vB,IAAH,KAAY2vB,EAAE,CAAC3vB,IAAH,GAAU,EAAtB,CAAP;AACAqR,QAAAA,IAAI,GAAGrR,IAAI,CAACzN,IAAD,CAAJ,KAAeyN,IAAI,CAACzN,IAAD,CAAJ,GAAa,EAA5B,CAAP;AACA8e,QAAAA,IAAI,CAACpgB,IAAL,CAAUggB,IAAV;AACD;AACF;;AACD,SAAK1e,IAAL,IAAa,KAAKyN,IAAlB,EAAwB;AACtB2+K,MAAAA,EAAE,GAAG,KAAK3+K,IAAL,CAAUzN,IAAV,CAAL;AACAu6V,MAAAA,QAAQ,CAACnuK,EAAE,CAAC3iK,KAAJ,EAAYzpB,IAAZ,EAAkB,OAAlB,CAAR;AACAu6V,MAAAA,QAAQ,CAACnuK,EAAE,CAACjkK,MAAJ,EAAYnoB,IAAZ,EAAkB,QAAlB,CAAR;AACAu6V,MAAAA,QAAQ,CAACnuK,EAAE,CAACvjL,MAAJ,EAAY7I,IAAZ,EAAkB,QAAlB,CAAR;;AACA,WAAK,MAAMi0H,KAAX,IAAoBm4D,EAAE,CAAC7nL,KAAvB,EAA8B;AAC5Bg2V,QAAAA,QAAQ,CAACnuK,EAAE,CAAC7nL,KAAH,CAAS0vH,KAAT,CAAD,EAAkBj0H,IAAlB,EAAwB,WAAWi0H,KAAnC,CAAR;AACD;AACF;;AAED,WAAO,IAAP;AACD,GA9FoC;;AAgGrC;AAEA8gO,EAAAA,SAAS,CAAC9oV,MAAD,EAASkqM,MAAT,EAAiBszD,MAAjB,EAAyB;AAChC,SAAKywF,OAAL,CAAax7V,IAAb,CAAkB,eAAI,KAAK0gB,GAAL,CAAS,uBAAM;AAAC6/M,MAAAA,KAAK,EAAEhzN;AAAR,KAAN,CAAT,CAAJ,CAAlB;;AACA,SAAKguV,OAAL,CAAav7V,IAAb,CAAkBy3M,MAAlB;;AACA,SAAKgkJ,OAAL,CAAaz7V,IAAb,CAAkB+qQ,MAAM,GAAG,eAAI,KAAKu8E,KAAL,CAAWv8E,MAAX,CAAJ,CAAH,GAA6B,IAArD;;AACA,SAAK2wF,SAAL,CAAe17V,IAAf,CAAoB,CAAC,CAArB;AACD,GAvGoC;;AAyGrCs2V,EAAAA,QAAQ,GAAG;AACT,SAAKkF,OAAL,CAAarxU,GAAb;;AACA,SAAKoxU,OAAL,CAAapxU,GAAb;;AACA,SAAKsxU,OAAL,CAAatxU,GAAb;;AACA,SAAKuxU,SAAL,CAAevxU,GAAf;AACD,GA9GoC;;AAgHrCstL,EAAAA,MAAM,GAAG;AACP,WAAO,oBAAK,KAAK8jJ,OAAV,CAAP;AACD,GAlHoC;;AAoHrChuV,EAAAA,MAAM,GAAG;AACP,WAAO,oBAAK,KAAKiuV,OAAV,CAAP;AACD,GAtHoC;;AAwHrCzwF,EAAAA,MAAM,GAAG;AACP,WAAO,oBAAK,KAAK0wF,OAAV,CAAP;AACD,GA1HoC;;AA4HrCxF,EAAAA,QAAQ,GAAG;AACT,UAAM5xT,CAAC,GAAG,KAAKq3T,SAAf;AACA,WAAO,EAAEr3T,CAAC,CAACA,CAAC,CAAChlC,MAAF,GAAS,CAAV,CAAV;AACD,GA/HoC;;AAiIrC;AAEA8rV,EAAAA,QAAQ,CAAC51N,KAAD,EAAQj0H,IAAR,EAAc;AACpB,QAAI,wBAASi0H,KAAT,CAAJ,EAAqB,OAAO,oBAASA,KAAT,EAAgBj0H,IAAhB,CAAP;;AACrB,QAAI,CAACi0H,KAAK,CAACxiC,MAAX,EAAmB;AACjB,2BAAM,kCAAkC,2BAAYwiC,KAAZ,CAAxC;AACD;;AAED,UAAMhyH,CAAC,GAAGgyH,KAAK,CAACxiC,MAAhB;AACA,QAAIrnF,CAAC,GAAG,KAAK6pH,KAAL,CAAWhyH,CAAX,CAAR;;AAEA,QAAI,CAACmI,CAAL,EAAQ;AACN,YAAMtI,MAAM,GAAG;AAAC9B,QAAAA,IAAI,EAAE,KAAK4hV,SAAL,CAAe3/U,CAAf;AAAP,OAAf;AACA,UAAIjC,IAAJ,EAAU8B,MAAM,CAACisO,EAAP,GAAY/tO,IAAZ;AACV,WAAKi0H,KAAL,CAAWhyH,CAAX,IAAgBmI,CAAC,GAAG,eAAI,KAAKgV,GAAL,CAAS,uBAAMtd,MAAN,CAAT,CAAJ,CAApB;AACD;;AACD,WAAOsI,CAAP;AACD,GAlJoC;;AAoJrC2/U,EAAAA,UAAU,CAACj/I,GAAD,EAAM;AACd,QAAIr5G,MAAM,GAAG,KAAb;;AAEA,UAAM+oQ,KAAK,GAAGp1U,CAAC,IAAI,oBAASA,CAAT,KACdqsE,MAAM,GAAG,IAAT,EAAe,KAAKmwP,SAAL,CAAex8T,CAAC,CAACqsE,MAAjB,CADD,IAEf,kBAAOrsE,CAAP,KAAaqsE,MAAM,GAAG,IAAT,EAAe,KAAK8hQ,OAAL,CAAanuU,CAAC,CAACjgB,IAAf,CAA5B,IACAigB,CAHJ;;AAKA,UAAMm3B,MAAM,GAAG,qBAAMuuJ,GAAG,CAAC72E,KAAV,EAAiB/rH,GAAjB,CAAqBsyV,KAArB,CAAf;AAAA,UACMjlJ,MAAM,GAAG,qBAAMzK,GAAG,CAAC6K,KAAV,EAAiBztM,GAAjB,CAAqBsyV,KAArB,CADf;AAGA,WAAO/oQ,MAAM,GACT,eAAI,KAAKryE,GAAL,CAAS,yBAAQ;AAACm9B,MAAAA,MAAM,EAAEA,MAAT;AAAiBg5J,MAAAA,MAAM,EAAEA;AAAzB,KAAR,CAAT,CAAJ,CADS,GAET,sBAAWh5J,MAAX,EAAmBg5J,MAAnB,CAFJ;AAGD,GAlKoC;;AAoKrCy0I,EAAAA,MAAM,CAACztS,MAAD,EAAS+5J,IAAT,EAAe;AACnB,QAAI7kH,MAAM,GAAG,KAAb;;AAEA,UAAM+oQ,KAAK,GAAGp1U,CAAC,IAAI,oBAASA,CAAT,KACdqsE,MAAM,GAAG,IAAT,EAAe,eAAIgpQ,GAAG,CAACr1U,CAAC,CAACqsE,MAAH,CAAP,CADD,IAEfrsE,CAFJ;;AAIA,UAAMq1U,GAAG,GAAG,KAAKnnJ,OAAjB;AACA/2J,IAAAA,MAAM,GAAG,qBAAMA,MAAN,EAAcr0C,GAAd,CAAkBsyV,KAAlB,CAAT;AAEA,WAAO/oQ,MAAM,GACT,eAAI,KAAKryE,GAAL,CAAS,qBAAI;AAACm9B,MAAAA,MAAM,EAAEA,MAAT;AAAiB+5J,MAAAA,IAAI,EAAEA;AAAvB,KAAJ,CAAT,CAAJ,CADS,GAET,kBAAO/5J,MAAP,EAAe+5J,IAAf,CAFJ;AAGD,GAjLoC;;AAmLrCg4I,EAAAA,OAAO,CAAC7lV,IAAD,EAAO;AACZ,QAAI,CAACA,IAAL,EAAW,OAAOA,IAAP,CADC,CAGZ;;AACA,UAAM9C,CAAC,GAAG,qBAAU8C,IAAI,CAAC20B,EAAf,EAAmB30B,IAAI,CAACwrH,KAAxB,CAAV;AAAA,UACK7pG,CAAC,GAAG3hB,IAAI,CAACktM,KAAL,IAAcs0I,eADvB;AAGA,WAAO7/T,CAAC,CAACqnE,MAAF,GACH,eAAI,KAAKryE,GAAL,CAAS,yBAAQ;AACnBm9B,MAAAA,MAAM,EAAE52C,CADW;AAEnB4vM,MAAAA,MAAM,EAAE,KAAKqsI,SAAL,CAAex3T,CAAC,CAACqnE,MAAjB;AAFW,KAAR,CAAT,CAAJ,CADG,GAKH,sBAAW9rF,CAAX,EAAcykB,CAAd,CALJ;AAMD,GAhMoC;;AAkMrC;AAEAy5F,EAAAA,KAAK,CAACtvD,MAAD,EAAS71C,IAAT,EAAe;AAClB,UAAMhc,GAAG,GAAG6xD,MAAM,GAAG,GAAT,GAAe71C,IAA3B;;AACA,QAAI,CAAC,KAAK05K,MAAL,CAAY11L,GAAZ,CAAL,EAAuB;AACrB,YAAMgP,EAAE,GAAG,KAAKA,EAAL,EAAX;AACA,WAAKq5R,OAAL,CAAarsS,IAAb,CAAkB;AAChBgT,QAAAA,EAAE,EAAEA,EADY;AAEhB6iD,QAAAA,MAAM,EAAEA,MAFQ;AAGhB71C,QAAAA,IAAI,EAAEA;AAHU,OAAlB;AAKA,WAAK05K,MAAL,CAAY11L,GAAZ,IAAmBgP,EAAnB;AACD;;AACD,WAAO,KAAK0mL,MAAL,CAAY11L,GAAZ,CAAP;AACD,GAhNoC;;AAkNrC;AAEAg4V,EAAAA,YAAY,CAAC16V,IAAD,EAAO;AACjB,WAAO,8BAAe,KAAKszM,OAApB,EAA6BtzM,IAA7B,CAAP;AACD,GAtNoC;;AAwNrCwpV,EAAAA,SAAS,CAACxpV,IAAD,EAAOyB,KAAP,EAAc;AACrB,QAAI,KAAKi5V,YAAL,CAAkB16V,IAAlB,CAAJ,EAA6B;AAC3B,2BAAM,4BAA4B,2BAAYA,IAAZ,CAAlC;AACD;;AACD,UAAMo9B,EAAE,GAAG37B,KAAK,YAAYioV,WAAjB,GAAyBjoV,KAAzB,GAAiC,KAAK2d,GAAL,CAAS,oBAAS3d,KAAT,CAAT,CAA5C;AACA,WAAO,KAAK6xM,OAAL,CAAatzM,IAAb,IAAqBo9B,EAA5B;AACD,GA9NoC;;AAgOrCukT,EAAAA,SAAS,CAAC3hV,IAAD,EAAO;AACd,QAAI,CAAC,KAAKszM,OAAL,CAAatzM,IAAb,CAAL,EAAyB;AACvB,2BAAM,+BAA+B,2BAAYA,IAAZ,CAArC;AACD;;AACD,WAAO,KAAKszM,OAAL,CAAatzM,IAAb,CAAP;AACD,GArOoC;;AAuOrC4hV,EAAAA,SAAS,CAAC3/U,CAAD,EAAI;AACX,QAAI,KAAKqxM,OAAL,CAAarxM,CAAb,CAAJ,EAAqB;AACnB,aAAO,eAAI,KAAKqxM,OAAL,CAAarxM,CAAb,CAAJ,CAAP;AACD,KAFD,MAEO,IAAI,CAAC,8BAAe,KAAK43V,OAApB,EAA6B53V,CAA7B,CAAL,EAAsC;AAC3C,WAAK43V,OAAL,CAAa53V,CAAb,IAAkB,KAAKmd,GAAL,CAAS,oBAAS,IAAT,CAAT,CAAlB;AACD;;AACD,WAAO,eAAI,KAAKy6U,OAAL,CAAa53V,CAAb,CAAJ,CAAP;AACD,GA9OoC;;AAgPrCs3V,EAAAA,YAAY,GAAG;AACb,UAAMz2D,IAAI,GAAGthS,MAAM,CAACof,IAAP,CAAY,KAAKi5U,OAAjB,CAAb;;AACA,SAAK,IAAIp7V,CAAC,GAAC,CAAN,EAASkO,CAAC,GAACm2R,IAAI,CAAC/kS,MAArB,EAA6BU,CAAC,GAACkO,CAA/B,EAAkC,EAAElO,CAApC,EAAuC;AACrC,YAAMwD,CAAC,GAAG6gS,IAAI,CAACrkS,CAAD,CAAd;AAAA,YACMtB,CAAC,GAAG,oCAAgB8E,CAAhB,EAAmB,IAAnB,CADV;AAAA,YAEMm7B,EAAE,GAAG,KAAKy8T,OAAL,CAAa53V,CAAb,CAFX;AAGAm7B,MAAAA,EAAE,CAACt7B,MAAH,GAAY3E,CAAC,CAAC4kV,OAAd;AACA3kT,MAAAA,EAAE,CAACuwD,MAAH,GAAYxwF,CAAC,CAAC0kV,KAAd;AACD;AACF,GAzPoC;;AA2PrC7rI,EAAAA,QAAQ,CAAC99F,IAAD,EAAO;AACb,WAAOA,IAAI,IAAIA,IAAI,CAACzmB,MAAb,GAAsB,KAAKmwP,SAAL,CAAe1pO,IAAI,CAACzmB,MAApB,CAAtB,GAAoDymB,IAA3D;AACD,GA7PoC;;AA+PrCs2O,EAAAA,cAAc,CAACt2O,IAAD,EAAO;AACnB,WAAQ,CAACA,IAAD,IAAS,CAAC,wBAASA,IAAT,CAAX,GAA6BA,IAA7B,GACH,KAAK0pO,SAAL,CAAe1pO,IAAI,CAACzmB,MAAL,IAAekpQ,cAAc,CAACziP,IAAD,CAA5C,CADJ;AAED,GAlQoC;;AAoQrCq7O,EAAAA,OAAO,CAACzwD,IAAD,EAAO9iS,IAAP,EAAa;AAClB,UAAM8B,MAAM,GAAG;AAACqD,MAAAA,IAAI,EAAE,oCAAgB29R,IAAhB,EAAsB,IAAtB;AAAP,KAAf;AACA,QAAI9iS,IAAJ,EAAU8B,MAAM,CAACqD,IAAP,CAAYy+U,KAAZ,GAAoB5jV,IAApB;AACV,WAAO,eAAI,KAAKof,GAAL,CAAS,4BAAWtd,MAAX,CAAT,CAAJ,CAAP;AACD,GAxQoC;;AA0QrC2nV,EAAAA,UAAU,CAACzpV,IAAD,EAAO8oI,IAAP,EAAa;AACrB,QAAI,CAAC,KAAK09M,QAAV,EAAoB;AAClB,2BAAM,4CAA4C,2BAAYxmV,IAAZ,CAAlD;AACD;;AACD,SAAKwmV,QAAL,CAAc9nV,IAAd,CAAmB,sBAAO;AAAC+yF,MAAAA,MAAM,EAAEzxF;AAAT,KAAP,EAAuB8oI,IAAvB,CAAnB;AACD,GA/QoC;;AAiRrC;AAEA8xN,EAAAA,YAAY,CAAC56V,IAAD,EAAO0nL,SAAP,EAAkB;AAC5B,QAAI,8BAAe,KAAKk5E,MAApB,EAA4B5gQ,IAA5B,CAAJ,EAAuC;AACrC,2BAAM,yCAAyC,2BAAYA,IAAZ,CAA/C;AACD;;AACD,SAAK4gQ,MAAL,CAAY5gQ,IAAZ,IAAoB,KAAKof,GAAL,CAASsoK,SAAT,CAApB;AACD,GAxRoC;;AA0RrCqlK,EAAAA,QAAQ,CAAC/sV,IAAD,EAAO8B,MAAP,EAAe;AACrB,SAAK84V,YAAL,CAAkB56V,IAAlB,EAAwB,uBAAM8B,MAAN,CAAxB;AACD,GA5RoC;;AA8RrC2sV,EAAAA,aAAa,CAACzuV,IAAD,EAAO8B,MAAP,EAAe;AAC1B,SAAK84V,YAAL,CAAkB56V,IAAlB,EAAwB,4BAAW8B,MAAX,CAAxB;AACD,GAhSoC;;AAkSrCg8U,EAAAA,QAAQ,CAAC99U,IAAD,EAAO;AACb,QAAI,CAAC,KAAK4gQ,MAAL,CAAY5gQ,IAAZ,CAAL,EAAwB;AACtB,2BAAM,8BAA8B,2BAAYA,IAAZ,CAApC;AACD;;AACD,WAAO,KAAK4gQ,MAAL,CAAY5gQ,IAAZ,CAAP;AACD,GAvSoC;;AAySrC69U,EAAAA,QAAQ,CAAC79U,IAAD,EAAO;AACb,WAAO,eAAI,KAAK89U,QAAL,CAAc99U,IAAd,CAAJ,CAAP;AACD,GA3SoC;;AA6SrCs1V,EAAAA,SAAS,CAACt1V,IAAD,EAAO;AACd,WAAO,KAAK89U,QAAL,CAAc99U,IAAd,EAAoB8B,MAApB,CAA2B4c,IAAlC;AACD,GA/SoC;;AAiTrCw0U,EAAAA,aAAa,CAAClzV,IAAD,EAAO;AAClB,WAAO,KAAK69U,QAAL,CAAc79U,IAAd,CAAP;AACD,GAnToC;;AAqTrCy1S,EAAAA,cAAc,CAACz1S,IAAD,EAAO;AACnB,WAAO,KAAKs1V,SAAL,CAAet1V,IAAf,CAAP;AACD,GAvToC;;AAyTrC;AAEAo0V,EAAAA,OAAO,CAACp0V,IAAD,EAAO66V,SAAP,EAAkB;AACvB,QAAI,8BAAe,KAAKptV,IAApB,EAA0BzN,IAA1B,CAAJ,EAAqC;AACnC,2BAAM,8BAA8B,2BAAYA,IAAZ,CAApC;AACD;;AACD,WAAQ,KAAKyN,IAAL,CAAUzN,IAAV,IAAkB66V,SAA1B;AACD,GAhUoC;;AAkUrCne,EAAAA,OAAO,CAAC18U,IAAD,EAAO;AACZ,QAAI,CAAC,KAAKyN,IAAL,CAAUzN,IAAV,CAAL,EAAsB;AACpB,2BAAM,8BAA8B,2BAAYA,IAAZ,CAApC;AACD;;AACD,WAAO,KAAKyN,IAAL,CAAUzN,IAAV,CAAP;AACD,GAvUoC;;AAyUrCouV,EAAAA,eAAe,CAACpuV,IAAD,EAAO0D,OAAP,EAAgB;AAC7B,QAAI,8BAAe,KAAK+J,IAApB,EAA0BzN,IAA1B,CAAJ,EAAqC;AACnC,2BAAM,8BAA8B,2BAAYA,IAAZ,CAApC;AACD;;AACD,WAAO,KAAKo0V,OAAL,CAAap0V,IAAb,EAAmB8zV,mBAAUC,WAAV,CAAsB,IAAtB,EAA4BrwV,OAA5B,CAAnB,CAAP;AACD;;AA9UoC,CAAvC;;AAiVA,SAASi3V,cAAT,CAAwBziP,IAAxB,EAA8B;AAC5B,SAAO,CAAC,uBAAQA,IAAR,IAAgB4iP,WAAhB,GAA8BC,YAA/B,EAA6C7iP,IAA7C,CAAP;AACD;;AAED,SAAS4iP,WAAT,CAAqBl8V,KAArB,EAA4B;AAC1B,QAAM+N,CAAC,GAAG/N,KAAK,CAACb,MAAhB;AACA,MAAI+kS,IAAI,GAAG,GAAX;;AAEA,OAAK,IAAIrkS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAACkO,CAAlB,EAAqB,EAAElO,CAAvB,EAA0B;AACxB,UAAMgD,KAAK,GAAG7C,KAAK,CAACH,CAAD,CAAnB;AACAqkS,IAAAA,IAAI,IAAI,CAACrkS,CAAC,GAAG,CAAJ,GAAQ,GAAR,GAAc,EAAf,KACH,wBAASgD,KAAT,IACEA,KAAK,CAACgwF,MAAN,IAAgBkpQ,cAAc,CAACl5V,KAAD,CADhC,GAEC,2BAAYA,KAAZ,CAHE,CAAR;AAID;;AACD,SAAOqhS,IAAI,GAAG,GAAd;AACD;;AAED,SAASi4D,YAAT,CAAsB77U,GAAtB,EAA2B;AACzB,MAAI4jR,IAAI,GAAG,GAAX;AAAA,MACIrkS,CAAC,GAAG,CADR;AAAA,MAEIiE,GAFJ;AAAA,MAESjB,KAFT;;AAIA,OAAKiB,GAAL,IAAYwc,GAAZ,EAAiB;AACfzd,IAAAA,KAAK,GAAGyd,GAAG,CAACxc,GAAD,CAAX;AACAogS,IAAAA,IAAI,IAAI,CAAC,EAAErkS,CAAF,GAAM,CAAN,GAAU,GAAV,GAAgB,EAAjB,IACJ,2BAAYiE,GAAZ,CADI,GACe,GADf,IAEH,wBAASjB,KAAT,IACEA,KAAK,CAACgwF,MAAN,IAAgBkpQ,cAAc,CAACl5V,KAAD,CADhC,GAEC,2BAAYA,KAAZ,CAJE,CAAR;AAKD;;AACD,SAAOqhS,IAAI,GAAG,GAAd;AACD;;;;;;;;;AC1bD;AACA;AACA;AACA;AACA;AACe,oBAAW;AACxB,QAAMk4D,WAAW,GAAG,YAApB;AAAA,QACMC,iBAAiB,GAAG,EAD1B;AAAA,QAEMC,kBAAkB,GAAG,CAF3B;AAAA,QAGMC,YAAY,GAAG,SAHrB;AAAA,QAIM9vG,KAAK,GAAG,MAJd;AAAA,QAKM8C,IAAI,GAAG,MALb;AAAA,QAMMitG,SAAS,GAAG,MANlB;AAQA,SAAO;AACL;AACA58E,IAAAA,WAAW,EAAE,oBAFR;AAIL;AACAtjQ,IAAAA,OAAO,EAAE,CALJ;AAOL;AACA;AACAw5Q,IAAAA,QAAQ,EAAE,KATL;AAWL;AACA;AACArc,IAAAA,UAAU,EAAE,IAbP;AAeL;AACA;AACAjgF,IAAAA,MAAM,EAAE;AACN41I,MAAAA,QAAQ,EAAE;AAACI,QAAAA,KAAK,EAAE,CAAC,OAAD;AAAR;AADJ,KAjBH;AAqBL;AACA;AACA;AACAhkN,IAAAA,KAAK,EAAE,IAxBF;AA0BL;AACA;AACAumJ,IAAAA,IAAI,EAAE,IA5BD;AA6BLnxD,IAAAA,GAAG,EAAE;AACHvwM,MAAAA,IAAI,EAAEksV;AADH,KA7BA;AAgCL55I,IAAAA,IAAI,EAAE;AACJtyM,MAAAA,IAAI,EAAEksV;AADF,KAhCD;AAmCL1hV,IAAAA,KAAK,EAAE,IAnCF;AAoCLuZ,IAAAA,IAAI,EAAE;AACJo/O,MAAAA,MAAM,EAAE+oF,YADJ;AAEJ5oF,MAAAA,WAAW,EAAE2oF;AAFT,KApCD;AAwCLpuV,IAAAA,IAAI,EAAE;AACJslQ,MAAAA,MAAM,EAAE+oF;AADJ,KAxCD;AA2CL79G,IAAAA,IAAI,EAAE;AACJruO,MAAAA,IAAI,EAAEksV;AADF,KA3CD;AA8CLlgF,IAAAA,IAAI,EAAE;AACJ7I,MAAAA,MAAM,EAAE/mB;AADJ,KA9CD;AAiDLplP,IAAAA,KAAK,EAAE;AACLmsQ,MAAAA,MAAM,EAAE+oF;AADH,KAjDF;AAoDLnzI,IAAAA,MAAM,EAAE;AACN/4M,MAAAA,IAAI,EAAEksV,YADA;AAENj1V,MAAAA,IAAI,EAAE;AAFA,KApDH;AAwDLixG,IAAAA,IAAI,EAAE;AACJloG,MAAAA,IAAI,EAAEo8O,KADF;AAEJ0wB,MAAAA,IAAI,EAAEi/E,WAFF;AAGJ1/E,MAAAA,QAAQ,EAAE;AAHN,KAxDD;AA6DLjM,IAAAA,KAAK,EAAE;AACLpgQ,MAAAA,IAAI,EAAEksV,YADD;AAELj1V,MAAAA,IAAI,EAAEg1V;AAFD,KA7DF;AAkEL;AACAh2E,IAAAA,KAAK,EAAE;AACL;AACA,qBAAe;AACbj2Q,QAAAA,IAAI,EAAEo8O,KADO;AAEb0wB,QAAAA,IAAI,EAAEi/E,WAFO;AAGb1/E,QAAAA,QAAQ,EAAE;AAHG,OAFV;AAOL;AACA,qBAAe;AACbrsQ,QAAAA,IAAI,EAAEo8O,KADO;AAEb0wB,QAAAA,IAAI,EAAEi/E,WAFO;AAGb1/E,QAAAA,QAAQ,EAAE,EAHG;AAIbsB,QAAAA,UAAU,EAAE;AAJC,OARV;AAcL;AACA,qBAAe;AACb3tQ,QAAAA,IAAI,EAAEo8O,KADO;AAEb0wB,QAAAA,IAAI,EAAEi/E,WAFO;AAGb1/E,QAAAA,QAAQ,EAAE,EAHG;AAIbsB,QAAAA,UAAU,EAAE;AAJC,OAfV;AAqBL;AACA,wBAAkB;AAChB3tQ,QAAAA,IAAI,EAAEo8O,KADU;AAEhB0wB,QAAAA,IAAI,EAAEi/E,WAFU;AAGhB1/E,QAAAA,QAAQ,EAAE;AAHM,OAtBb;AA2BL;AACAt7D,MAAAA,KAAK,EAAE;AACL95M,QAAAA,IAAI,EAAE+0V,iBADD;AAEL1oF,QAAAA,WAAW,EAAE2oF,kBAFR;AAGLj1V,QAAAA,KAAK,EAAE;AAHF,OA5BF;AAiCLi+O,MAAAA,MAAM,EAAE;AACNh+O,QAAAA,IAAI,EAAE+0V,iBADA;AAEN1oF,QAAAA,WAAW,EAAE2oF;AAFP,OAjCH;AAqCL3jV,MAAAA,MAAM,EAAE;AACNrR,QAAAA,IAAI,EAAE+0V,iBADA;AAEN1oF,QAAAA,WAAW,EAAE2oF,kBAFP;AAGNj1V,QAAAA,KAAK,EAAE;AAHD,OArCH;AA0CL;AACA89J,MAAAA,IAAI,EAAE;AACJ90J,QAAAA,IAAI,EAAE,aADF;AAEJmjQ,QAAAA,MAAM,EAAEgpF;AAFJ;AA3CD,KAnEF;AAoHL;AACAr8V,IAAAA,KAAK,EAAE;AACL2xQ,MAAAA,MAAM,EAAE,KADH;AAELl8D,MAAAA,MAAM,EAAE,QAFH;AAGLppM,MAAAA,MAAM,EAAE,CAHH;AAILiwV,MAAAA,eAAe,EAAE;AAJZ,KArHF;AA4HL;AACArzV,IAAAA,IAAI,EAAE;AACJ4oR,MAAAA,SAAS,EAAE,CADP;AAEJC,MAAAA,SAAS,EAAE,GAFP;AAGJyqE,MAAAA,YAAY,EAAE,GAHV;AAIJznJ,MAAAA,MAAM,EAAE,IAJJ;AAKJ0nJ,MAAAA,WAAW,EAAE,CALT;AAMJC,MAAAA,WAAW,EAAErtG,IANT;AAOJuiC,MAAAA,IAAI,EAAE,KAPF;AAQJ+qE,MAAAA,SAAS,EAAE,CARP;AASJC,MAAAA,SAAS,EAAEN,SATP;AAUJtoQ,MAAAA,MAAM,EAAE,IAVJ;AAWJ6oQ,MAAAA,UAAU,EAAE,CAXR;AAYJpK,MAAAA,UAAU,EAAE,GAZR;AAaJE,MAAAA,WAAW,EAAE,CAbT;AAcJmK,MAAAA,YAAY,EAAE,CAdV;AAeJn3I,MAAAA,KAAK,EAAE,IAfH;AAgBJo3I,MAAAA,SAAS,EAAE1tG,IAhBP;AAiBJ2tG,MAAAA,UAAU,EAAE,CAjBR;AAkBJC,MAAAA,SAAS,EAAE,IAlBP;AAmBJvD,MAAAA,QAAQ,EAAE,CAnBN;AAoBJwD,MAAAA,SAAS,EAAE,CApBP;AAqBJlrE,MAAAA,YAAY,EAAE;AArBV,KA7HD;AAqJL;AACA0mE,IAAAA,QAAQ,EAAE;AACRsE,MAAAA,UAAU,EAAE,CAAC;AADL,KAtJL;AA0JL;AACAr0D,IAAAA,UAAU,EAAE;AACV/oR,MAAAA,IAAI,EAAE;AADI,KA3JP;AA+JL;AACA60Q,IAAAA,MAAM,EAAE;AACN7iB,MAAAA,MAAM,EAAE,OADF;AAENx1P,MAAAA,OAAO,EAAE,CAFH;AAGN+gV,MAAAA,SAAS,EAAE,MAHL;AAINC,MAAAA,aAAa,EAAE,EAJT;AAKNC,MAAAA,UAAU,EAAE,CALN;AAMNhM,MAAAA,eAAe,EAAE,UANX;AAONC,MAAAA,iBAAiB,EAAE,UAPb;AAQNC,MAAAA,cAAc,EAAE,GARV;AASNE,MAAAA,iBAAiB,EAAE,EATb;AAUN6L,MAAAA,mBAAmB,EAAEhB,SAVf;AAWNiB,MAAAA,mBAAmB,EAAE,CAXf;AAYN3K,MAAAA,mBAAmB,EAAE,CAZf;AAaNiH,MAAAA,UAAU,EAAE,MAbN;AAcNC,MAAAA,aAAa,EAAE,QAdT;AAeNrH,MAAAA,UAAU,EAAE,GAfN;AAgBNE,MAAAA,WAAW,EAAE,CAhBP;AAiBN6K,MAAAA,YAAY,EAAE,IAjBR;AAkBNC,MAAAA,WAAW,EAAE,EAlBP;AAmBNC,MAAAA,UAAU,EAAE,QAnBN;AAoBNC,MAAAA,UAAU,EAAE,GApBN;AAqBN9K,MAAAA,YAAY,EAAE,CArBR;AAsBN+K,MAAAA,iBAAiB,EAAE,GAtBb;AAuBNzK,MAAAA,mBAAmB,EAAE,aAvBf;AAwBNC,MAAAA,qBAAqB,EAAE/jG,IAxBjB;AAyBNwuG,MAAAA,UAAU,EAAE,GAzBN;AA0BNC,MAAAA,WAAW,EAAE,KA1BP;AA2BN9rE,MAAAA,YAAY,EAAE,CA3BR;AA4BNt9E,MAAAA,MAAM,EAAE;AACNpoM,QAAAA,MAAM,EAAE,EADF;AAENg1R,QAAAA,SAAS,EAAE,YAFL;AAGNxuP,QAAAA,IAAI,EAAI;AAAEwuP,UAAAA,SAAS,EAAE;AAAb,SAHF;AAINvuP,QAAAA,KAAK,EAAG;AAAEuuP,UAAAA,SAAS,EAAE;AAAb;AAJF;AA5BF,KAhKH;AAoML;AACAngQ,IAAAA,KAAK,EAAE;AACLkwI,MAAAA,QAAQ,EAAE;AACR50D,QAAAA,MAAM,EAAE;AADA,OADL;AAILkuI,MAAAA,OAAO,EAAE;AACPluI,QAAAA,MAAM,EAAE;AADD,OAJJ;AAOLshP,MAAAA,OAAO,EAAE;AACPthP,QAAAA,MAAM,EAAE;AADD,OAPJ;AAULuhP,MAAAA,IAAI,EAAE;AACJvhP,QAAAA,MAAM,EAAE;AADJ,OAVD;AAaL0jJ,MAAAA,SAAS,EAAE;AACT1jJ,QAAAA,MAAM,EAAE,YADC;AAETu8F,QAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ;AAFC,OAbN;AAiBLkQ,MAAAA,MAAM,EAAE,CACN,QADM,EAEN,QAFM,EAGN,aAHM,EAIN,OAJM,EAKN,SALM,EAMN,gBANM,EAON,eAPM,EAQN,eARM;AAjBH;AArMF,GAAP;AAkOD;;;;;;;;;AChPD;;AACA;;AACA;;AACA;;;;AAEe,kBAAS9vG,IAAT,EAAer0G,MAAf,EAAuBuxE,OAAvB,EAAgC;AAC7C,MAAI,CAAC,wBAAS8iC,IAAT,CAAL,EAAqB;AACnB,yBAAM,6CAAN;AACD;;AAEDr0G,EAAAA,MAAM,GAAG,2BAAY,sBAAZ,EAAwBA,MAAxB,EAAgCq0G,IAAI,CAACr0G,MAArC,CAAT;AACA,SAAO,mBAAUq0G,IAAV,EAAgB,IAAImyO,cAAJ,CAAUxmV,MAAV,EAAkBuxE,OAAlB,CAAhB,EAA4Ci/Q,SAA5C,EAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZD;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AAiBA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;;AAyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAxBA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAMA;;AAIA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAIA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAmBA;;AASA;;AAIA;;AAIA;;AAQA;;AAIA;;AAIA;;;;;;AAnFA;AAcA,sBAAO1tH,wBAAP,EAAmBrnH,EAAnB,EAAuBy9O,GAAvB,EAA4B9wV,MAA5B,EAAoC+wV,GAApC,EAAyCz9H,KAAzC,EAAgD38B,IAAhD,EAAsDq6J,GAAtD,EAA2Dt3B,OAA3D,EAAoEu3B,SAApE,EAA+EC,EAA/E,GAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AIjBA;;;;AAEe,kBAASp6T,CAAT,EAAY;AACzB,MAAIj2B,IAAI,GAAG,EAAX;AAAA,MACIqpF,CAAC,GAAG,IADR;AAAA,MAEI3pF,CAAC,GAAG,CAFR;AAAA,MAGIG,CAAC,GAAGo2B,CAAC,CAAChlC,MAHV;AAAA,MAIIkE,CAAC,GAAG,EAJR;AAAA,MAKIxD,CALJ;AAAA,MAKOiK,CALP;AAAA,MAKUwC,CALV;AAOA63B,EAAAA,CAAC,GAAGA,CAAC,GAAG,EAAR;;AAEA,WAASrkC,IAAT,GAAgB;AACdoO,IAAAA,IAAI,CAACpO,IAAL,CAAUuD,CAAC,GAAG8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAd;AACAzG,IAAAA,CAAC,GAAG,EAAJ;AACAxD,IAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;;AAED,OAAKjK,CAAC,GAACiK,CAAC,GAAC,CAAT,EAAYA,CAAC,GAACiE,CAAd,EAAiB,EAAEjE,CAAnB,EAAsB;AACpBwC,IAAAA,CAAC,GAAG63B,CAAC,CAACr6B,CAAD,CAAL;;AACA,QAAIwC,CAAC,KAAK,IAAV,EAAgB;AACdjJ,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY9+B,CAAZ,EAAeiK,CAAf,CAAL;AACAzG,MAAAA,CAAC,IAAI8gC,CAAC,CAACxF,SAAF,CAAY,EAAE70B,CAAd,EAAiB,EAAEA,CAAnB,CAAL;AACAjK,MAAAA,CAAC,GAAGiK,CAAJ;AACD,KAJD,MAIO,IAAIwC,CAAC,KAAKirF,CAAV,EAAa;AAClBz3F,MAAAA,IAAI;AACJy3F,MAAAA,CAAC,GAAG,IAAJ;AACA3pF,MAAAA,CAAC,GAAG,CAAC,CAAL;AACD,KAJM,MAIA,IAAI2pF,CAAJ,EAAO;AACZ;AACD,KAFM,MAEA,IAAI13F,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIzM,CAAC,KAAK+N,CAAN,IAAWtB,CAAC,KAAK,GAArB,EAA0B;AAC/BzM,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACAytF,MAAAA,CAAC,GAAGjrF,CAAJ;AACD,KAHM,MAGA,IAAIA,CAAC,KAAK,GAAN,IAAa,CAACsB,CAAlB,EAAqB;AAC1B,UAAI9D,CAAC,GAAGjK,CAAR,EAAW;AACTC,QAAAA,IAAI;AACL,OAFD,MAEO;AACLD,QAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF,KANM,MAMA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAIxC,CAAC,GAAGjK,CAAR,EAAWC,IAAI;AACf8N,MAAAA,CAAC,GAAG/N,CAAC,GAAGiK,CAAC,GAAG,CAAZ;AACD,KAHM,MAGA,IAAIwC,CAAC,KAAK,GAAV,EAAe;AACpB,UAAI,CAACsB,CAAL,EAAQ,oBAAM,uCAAuCu2B,CAA7C;AACR,UAAIv2B,CAAC,GAAG,CAAR,EAAW9N,IAAI;AACf8N,MAAAA,CAAC,GAAG,CAAJ;AACA/N,MAAAA,CAAC,GAAGiK,CAAC,GAAG,CAAR;AACD;AACF;;AAED,MAAI8D,CAAJ,EAAO,oBAAM,0CAA0Cu2B,CAAhD;AACP,MAAIozD,CAAJ,EAAO,oBAAM,wCAAwCpzD,CAA9C;;AAEP,MAAIr6B,CAAC,GAAGjK,CAAR,EAAW;AACTiK,IAAAA,CAAC;AACDhK,IAAAA,IAAI;AACL;;AAED,SAAOoO,IAAP;AACD;;;;;;;;;AC9DD;;AACA;;AACA;;;;AAEe,kBAASmnH,KAAT,EAAgBj0H,IAAhB,EAAsB0yM,GAAtB,EAA2B;AACxC,QAAM5lM,IAAI,GAAG,8BAAgBmnH,KAAhB,CAAb;AACAA,EAAAA,KAAK,GAAGnnH,IAAI,CAAC/O,MAAL,KAAgB,CAAhB,GAAoB+O,IAAI,CAAC,CAAD,CAAxB,GAA8BmnH,KAAtC;AACA,SAAO,uBACL,CAACy+E,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,eAAnB,EAA2B7lM,IAA3B,CADK,EAEL,CAACmnH,KAAD,CAFK,EAGLj0H,IAAI,IAAIi0H,KAHH,CAAP;AAKD;;;;;;;;;ACZD;;AACA;;;;AAEA,IAAI2+E,KAAK,GAAG,EAAZ;AAEO,IAAIlhM,EAAE,GAAG,oBAAM,IAAN,CAAT;;AAEA,IAAIgtH,QAAQ,GAAG,uBAAS,UAASt5G,CAAT,EAAY;AAAE,SAAOA,CAAP;AAAW,CAAlC,EAAoCwtL,KAApC,EAA2C,UAA3C,CAAf;;AAEA,IAAIv+J,IAAI,GAAG,uBAAS,YAAW;AAAE,SAAO,CAAP;AAAW,CAAjC,EAAmCu+J,KAAnC,EAA0C,MAA1C,CAAX;;AAEA,IAAInlH,GAAG,GAAG,uBAAS,YAAW;AAAE,SAAO,CAAP;AAAW,CAAjC,EAAmCmlH,KAAnC,EAA0C,KAA1C,CAAV;;AAEA,IAAIC,MAAM,GAAG,uBAAS,YAAW;AAAE,SAAO,IAAP;AAAc,CAApC,EAAsCD,KAAtC,EAA6C,MAA7C,CAAb;;AAEA,IAAIE,KAAK,GAAG,uBAAS,YAAW;AAAE,SAAO,KAAP;AAAe,CAArC,EAAuCF,KAAvC,EAA8C,OAA9C,CAAZ;;;;;;;;;;;AIfP;;AACA;;;;AAEA,MAAMO,UAAU,GAAGzwM,GAAG,IAAIA,GAAG,KAAK,WAAlC;;AAEO,SAAS0wM,WAAT,CAAqB,GAAGC,OAAxB,EAAiC;AACtC,SAAOA,OAAO,CAACroM,MAAR,CAAe,CAAC8Z,GAAD,EAAMyvC,MAAN,KAAiB;AACrC,SAAK,IAAI7xD,GAAT,IAAgB6xD,MAAhB,EAAwB;AACtB,UAAI7xD,GAAG,KAAK,SAAZ,EAAuB;AACrB;AACA;AACA;AACAoiB,QAAAA,GAAG,CAACwuL,OAAJ,GAAcC,UAAU,CAACzuL,GAAG,CAACwuL,OAAL,EAAc/+I,MAAM,CAAC++I,OAArB,CAAxB;AACD,OALD,MAKO;AACL;AACA;AACA;AACA;AACA,YAAI7mM,CAAC,GAAG/J,GAAG,KAAK,QAAR,GAAmB;AAAC8wM,UAAAA,MAAM,EAAE;AAAT,SAAnB,GACJ9wM,GAAG,KAAK,OAAR,GAAkB,IAAlB,GACA,IAFJ;AAGA+wM,QAAAA,WAAW,CAAC3uL,GAAD,EAAMpiB,GAAN,EAAW6xD,MAAM,CAAC7xD,GAAD,CAAjB,EAAwB+J,CAAxB,CAAX;AACD;AACF;;AACD,WAAOqY,GAAP;AACD,GAnBM,EAmBJ,EAnBI,CAAP;AAoBD;;AAEM,SAAS2uL,WAAT,CAAqBtrL,MAArB,EAA6BzlB,GAA7B,EAAkCjB,KAAlC,EAAyC8iL,OAAzC,EAAkD;AACvD,MAAI,CAAC4uB,UAAU,CAACzwM,GAAD,CAAf,EAAsB;AAEtB,MAAIqZ,CAAJ,EAAOqO,CAAP;;AACA,MAAI,uBAAS3oB,KAAT,KAAmB,CAAC,sBAAQA,KAAR,CAAxB,EAAwC;AACtC2oB,IAAAA,CAAC,GAAG,uBAASjC,MAAM,CAACzlB,GAAD,CAAf,IAAwBylB,MAAM,CAACzlB,GAAD,CAA9B,GAAuCylB,MAAM,CAACzlB,GAAD,CAAN,GAAc,EAAzD;;AACA,SAAKqZ,CAAL,IAAUta,KAAV,EAAiB;AACf,UAAI8iL,OAAO,KAAKA,OAAO,KAAK,IAAZ,IAAoBA,OAAO,CAACxoK,CAAD,CAAhC,CAAX,EAAiD;AAC/C03L,QAAAA,WAAW,CAACrpL,CAAD,EAAIrO,CAAJ,EAAOta,KAAK,CAACsa,CAAD,CAAZ,CAAX;AACD,OAFD,MAEO,IAAIo3L,UAAU,CAACp3L,CAAD,CAAd,EAAmB;AACxBqO,QAAAA,CAAC,CAACrO,CAAD,CAAD,GAAOta,KAAK,CAACsa,CAAD,CAAZ;AACD;AACF;AACF,GATD,MASO;AACLoM,IAAAA,MAAM,CAACzlB,GAAD,CAAN,GAAcjB,KAAd;AACD;AACF;;AAED,SAAS8xM,UAAT,CAAoB5tM,CAApB,EAAuB6G,CAAvB,EAA0B;AACxB,MAAI7G,CAAC,IAAI,IAAT,EAAe,OAAO6G,CAAP;AAEf,QAAMtE,GAAG,GAAG,EAAZ;AAAA,QAAgB4c,GAAG,GAAG,EAAtB;;AAEA,WAAS1F,GAAT,CAAagG,CAAb,EAAgB;AACd,QAAI,CAACld,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAR,EAAkB;AAChBkI,MAAAA,GAAG,CAACkd,CAAC,CAACplB,IAAH,CAAH,GAAc,CAAd;AACA8kB,MAAAA,GAAG,CAACpmB,IAAJ,CAAS0mB,CAAT;AACD;AACF;;AAED5Y,EAAAA,CAAC,CAACjK,OAAF,CAAU6c,GAAV;AACAzZ,EAAAA,CAAC,CAACpD,OAAF,CAAU6c,GAAV;AACA,SAAO0F,GAAP;AACD;;;;;;;;;;;;;;;;AG7DD;;AACA;;AACA;;;;AAEA,SAASre,GAAT,CAAayQ,IAAb,EAAmB;AACjB,SAAO,UAAStS,CAAT,EAAY;AAAE,WAAOsS,IAAI,GAAG1S,IAAI,CAACiC,GAAL,CAAS7B,CAAT,CAAd;AAA4B,GAAjD;AACD;;AAED,SAAS6J,GAAT,CAAayI,IAAb,EAAmB;AACjB,SAAO,UAAStS,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAACiK,GAAL,CAASyI,IAAI,GAAGtS,CAAhB,CAAP;AAA4B,GAAjD;AACD;;AAED,SAAS8uM,MAAT,CAAgBxoM,CAAhB,EAAmB;AACjB,SAAO,UAAStG,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACiT,GAAL,CAAS7S,CAAC,GAAGsG,CAAb,CAAX,CAAtB;AAAoD,GAAzE;AACD;;AAED,SAASyoM,MAAT,CAAgBzoM,CAAhB,EAAmB;AACjB,SAAO,UAAStG,CAAT,EAAY;AAAE,WAAOJ,IAAI,CAAC0S,IAAL,CAAUtS,CAAV,IAAeJ,IAAI,CAAC4S,KAAL,CAAW5S,IAAI,CAACiT,GAAL,CAAS7S,CAAT,CAAX,CAAf,GAAyCsG,CAAhD;AAAoD,GAAzE;AACD;;AAED,SAASgK,GAAT,CAAay/B,QAAb,EAAuB;AACrB,SAAO,UAAS/vC,CAAT,EAAY;AACjB,WAAOA,CAAC,GAAG,CAAJ,GAAQ,CAACJ,IAAI,CAAC0Q,GAAL,CAAS,CAACtQ,CAAV,EAAa+vC,QAAb,CAAT,GAAkCnwC,IAAI,CAAC0Q,GAAL,CAAStQ,CAAT,EAAY+vC,QAAZ,CAAzC;AACD,GAFD;AAGD;;AAED,SAASi/J,GAAT,CAAaC,MAAb,EAAqBz/G,KAArB,EAA4B0/G,IAA5B,EAAkCC,MAAlC,EAA0C;AACxC,MAAIC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAb;AAAA,MACIjsI,EAAE,GAAGksI,IAAI,CAAC,mBAAKD,MAAL,CAAD,CADb;AAAA,MAEII,EAAE,GAAG,CAACrsI,EAAE,GAAGosI,EAAN,IAAY5/G,KAFrB;AAIA,SAAO,CACL2/G,MAAM,CAACC,EAAE,GAAGC,EAAN,CADD,EAELF,MAAM,CAACnsI,EAAE,GAAGqsI,EAAN,CAFD,CAAP;AAID;;AAEM,SAASC,SAAT,CAAmBL,MAAnB,EAA2Bz/G,KAA3B,EAAkC;AACvC,SAAOw/G,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgB+/G,iBAAhB,EAA0Bz1E,mBAA1B,CAAV;AACD;;AAEM,SAAS01E,MAAT,CAAgBP,MAAhB,EAAwBz/G,KAAxB,EAA+B;AACpC,MAAIl9E,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAX;AACA,SAAOD,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgB3lF,GAAG,CAACyI,IAAD,CAAnB,EAA2BzQ,GAAG,CAACyQ,IAAD,CAA9B,CAAV;AACD;;AAEM,SAASm9L,MAAT,CAAgBR,MAAhB,EAAwBz/G,KAAxB,EAA+Bz/C,QAA/B,EAAyC;AAC9C,SAAOi/J,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBl/E,GAAG,CAACy/B,QAAD,CAAnB,EAA+Bz/B,GAAG,CAAC,IAAEy/B,QAAH,CAAlC,CAAV;AACD;;AAEM,SAAS2/J,SAAT,CAAmBT,MAAnB,EAA2Bz/G,KAA3B,EAAkCiqC,QAAlC,EAA4C;AACjD,SAAOu1E,GAAG,CAACC,MAAD,EAASz/G,KAAT,EAAgBs/G,MAAM,CAACr1E,QAAD,CAAtB,EAAkCs1E,MAAM,CAACt1E,QAAD,CAAxC,CAAV;AACD;;AAED,SAASk2E,IAAT,CAAcV,MAAd,EAAsBW,MAAtB,EAA8BlgM,KAA9B,EAAqCw/L,IAArC,EAA2CC,MAA3C,EAAmD;AACjD,MAAIC,EAAE,GAAGF,IAAI,CAACD,MAAM,CAAC,CAAD,CAAP,CAAb;AAAA,MACIjsI,EAAE,GAAGksI,IAAI,CAAC,mBAAKD,MAAL,CAAD,CADb;AAAA,MAEIY,EAAE,GAAGD,MAAM,IAAI,IAAV,GAAiBV,IAAI,CAACU,MAAD,CAArB,GAAgC,CAACR,EAAE,GAAGpsI,EAAN,IAAY,CAFrD;AAIA,SAAO,CACLmsI,MAAM,CAACU,EAAE,GAAG,CAACT,EAAE,GAAGS,EAAN,IAAYngM,KAAlB,CADD,EAELy/L,MAAM,CAACU,EAAE,GAAG,CAAC7sI,EAAE,GAAG6sI,EAAN,IAAYngM,KAAlB,CAFD,CAAP;AAID;;AAEM,SAASogM,UAAT,CAAoBb,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C;AAChD,SAAOigM,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwB6/L,iBAAxB,EAAkCz1E,mBAAlC,CAAX;AACD;;AAEM,SAASi2E,OAAT,CAAiBd,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwC;AAC7C,MAAI4C,IAAI,GAAG1S,IAAI,CAAC0S,IAAL,CAAU28L,MAAM,CAAC,CAAD,CAAhB,CAAX;AACA,SAAOU,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwB7F,GAAG,CAACyI,IAAD,CAA3B,EAAmCzQ,GAAG,CAACyQ,IAAD,CAAtC,CAAX;AACD;;AAEM,SAAS09L,OAAT,CAAiBf,MAAjB,EAAyBW,MAAzB,EAAiClgM,KAAjC,EAAwCqgC,QAAxC,EAAkD;AACvD,SAAO4/J,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBY,GAAG,CAACy/B,QAAD,CAA3B,EAAuCz/B,GAAG,CAAC,IAAEy/B,QAAH,CAA1C,CAAX;AACD;;AAEM,SAASkgK,UAAT,CAAoBhB,MAApB,EAA4BW,MAA5B,EAAoClgM,KAApC,EAA2C+pH,QAA3C,EAAqD;AAC1D,SAAOk2E,IAAI,CAACV,MAAD,EAASW,MAAT,EAAiBlgM,KAAjB,EAAwBo/L,MAAM,CAACr1E,QAAD,CAA9B,EAA0Cs1E,MAAM,CAACt1E,QAAD,CAAhD,CAAX;AACD;;;;;;;;;AEhFD;;;;AAEe,kBAASj5G,CAAT,EAAY;AACzB,SAAOA,CAAC,IAAI,IAAL,GAAa,sBAAQA,CAAR,IAAaA,CAAb,GAAiB,CAACA,CAAD,CAA9B,GAAqC,EAA5C;AACD;;;;;;;;;AGJD;;AACA;;AACA;;AACA;;;;;;;;AAEA,MAAMkwL,UAAU,GAAG,YAAnB;;AAEe,kBAAS/4J,MAAT,EAAiBg5J,MAAjB,EAAyB7C,GAAzB,EAA8B;AAC3CA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;AACA6C,EAAAA,MAAM,GAAG,oBAAMA,MAAN,KAAiB,EAA1B;AAEA,QAAM3hM,GAAG,GAAG,EAAZ;AAAA,QAAgBrS,GAAG,GAAG,EAAtB;AAAA,QAA0Bi0M,IAAI,GAAG,EAAjC;AAAA,QACMrf,GAAG,GAAGuc,GAAG,CAAC39J,UAAJ,IAAkBA,UAD9B;AAGA,sBAAMwH,MAAN,EAAch6C,OAAd,CAAsB,CAAC6H,CAAD,EAAI3L,CAAJ,KAAU;AAC9B,QAAI2L,CAAC,IAAI,IAAT,EAAe;AACfwJ,IAAAA,GAAG,CAAClV,IAAJ,CAAS62M,MAAM,CAAC92M,CAAD,CAAN,KAAc62M,UAAd,GAA2B,CAAC,CAA5B,GAAgC,CAAzC;AACA/zM,IAAAA,GAAG,CAAC7C,IAAJ,CAAS0L,CAAC,GAAG,yBAAWA,CAAX,IAAgBA,CAAhB,GAAoB,oBAAMA,CAAN,EAAS,IAAT,EAAesoM,GAAf,CAAjC;AACA,KAAC,8BAAetoM,CAAf,KAAqB,EAAtB,EAA0B7H,OAA1B,CAAkC6iB,CAAC,IAAIowL,IAAI,CAACpwL,CAAD,CAAJ,GAAU,CAAjD;AACD,GALD;AAOA,SAAO7jB,GAAG,CAACxD,MAAJ,KAAe,CAAf,GACH,IADG,GAEH,uBAASo4L,GAAG,CAAC50L,GAAD,EAAMqS,GAAN,CAAZ,EAAwBpS,MAAM,CAACof,IAAP,CAAY40L,IAAZ,CAAxB,CAFJ;AAGD;;AAED,MAAMjP,OAAO,GAAG,CAAC9oH,CAAD,EAAI9sE,CAAJ,KAAU,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAAS8sE,CAAC,IAAI,IAAf,KAAwB9sE,CAAC,IAAI,IAA7B,GAAoC,CAAC,CAArC,GACtB,CAAC8sE,CAAC,GAAG9sE,CAAJ,IAASA,CAAC,IAAI,IAAf,KAAwB8sE,CAAC,IAAI,IAA7B,GAAoC,CAApC,GACA,CAAE9sE,CAAC,GAAGA,CAAC,YAAY4jE,IAAb,GAAoB,CAAC5jE,CAArB,GAAyBA,CAA9B,EAAmC8sE,CAAC,GAAGA,CAAC,YAAYlJ,IAAb,GAAoB,CAACkJ,CAArB,GAAyBA,CAAjE,MAAyEA,CAAzE,IAA8E9sE,CAAC,KAAKA,CAApF,GAAwF,CAAC,CAAzF,GACAA,CAAC,KAAKA,CAAN,IAAW8sE,CAAC,KAAKA,CAAjB,GAAqB,CAArB,GACA,CAJJ;;AAMA,MAAM1oC,UAAU,GAAG,CAACwH,MAAD,EAASg5J,MAAT,KAAoBh5J,MAAM,CAACx+C,MAAP,KAAkB,CAAlB,GACnC03M,QAAQ,CAACl5J,MAAM,CAAC,CAAD,CAAP,EAAYg5J,MAAM,CAAC,CAAD,CAAlB,CAD2B,GAEnCG,QAAQ,CAACn5J,MAAD,EAASg5J,MAAT,EAAiBh5J,MAAM,CAACx+C,MAAxB,CAFZ;;AAIA,MAAM03M,QAAQ,GAAG,CAACxhF,KAAD,EAAQ0hF,KAAR,KAAkB,UAAShwM,CAAT,EAAY6G,CAAZ,EAAe;AAChD,SAAO+5L,OAAO,CAACtyE,KAAK,CAACtuH,CAAD,CAAN,EAAWsuH,KAAK,CAACznH,CAAD,CAAhB,CAAP,GAA8BmpM,KAArC;AACD,CAFD;;AAIA,MAAMD,QAAQ,GAAG,CAACn5J,MAAD,EAASg5J,MAAT,EAAiB5oM,CAAjB,KAAuB;AACtC4oM,EAAAA,MAAM,CAAC72M,IAAP,CAAY,CAAZ,EADsC,CACtB;;AAChB,SAAO,UAASiH,CAAT,EAAY6G,CAAZ,EAAe;AACpB,QAAIpC,CAAJ;AAAA,QAAOc,CAAC,GAAG,CAAX;AAAA,QAAczM,CAAC,GAAG,CAAC,CAAnB;;AACA,WAAOyM,CAAC,KAAK,CAAN,IAAW,EAAEzM,CAAF,GAAMkO,CAAxB,EAA2B;AACzBvC,MAAAA,CAAC,GAAGmyC,MAAM,CAAC99C,CAAD,CAAV;AACAyM,MAAAA,CAAC,GAAGq7L,OAAO,CAACn8L,CAAC,CAACzE,CAAD,CAAF,EAAOyE,CAAC,CAACoC,CAAD,CAAR,CAAX;AACD;;AACD,WAAOtB,CAAC,GAAGqqM,MAAM,CAAC92M,CAAD,CAAjB;AACD,GAPD;AAQD,CAVD;;;;;;;;;ACxCA;;;;AAEe,kBAAS2mB,CAAT,EAAY;AACzB,SAAO,yBAAWA,CAAX,IAAgBA,CAAhB,GAAoB,YAAW;AAAE,WAAOA,CAAP;AAAW,GAAnD;AACD;;;;;;;;;AMJD;;;;AAEA,IAAI6wL,IAAI,GAAG,EAAX;;AAEe,kBAASxsL,KAAT,EAAgB;AAC7B,MAAIvK,GAAG,GAAG,EAAV;AAAA,MACIhX,GADJ;AAAA,MAEIkkB,IAFJ;;AAIA,WAASroB,GAAT,CAAarB,GAAb,EAAkB;AAChB,WAAO,6BAAewc,GAAf,EAAoBxc,GAApB,KAA4Bwc,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAAhD;AACD;;AAED/tM,EAAAA,GAAG,GAAG;AACJhC,IAAAA,IAAI,EAAE,CADF;AAEJ0sM,IAAAA,KAAK,EAAE,CAFH;AAGJ9M,IAAAA,MAAM,EAAE5mL,GAHJ;AAIJnb,IAAAA,GAAG,EAAEA,GAJD;;AAKJxC,IAAAA,GAAG,CAACmB,GAAD,EAAM;AACP,aAAOqB,GAAG,CAACrB,GAAD,CAAH,GAAWwc,GAAG,CAACxc,GAAD,CAAd,GAAsBixH,SAA7B;AACD,KAPG;;AAQJvyH,IAAAA,GAAG,CAACsB,GAAD,EAAMjB,KAAN,EAAa;AACd,UAAI,CAACsC,GAAG,CAACrB,GAAD,CAAR,EAAe;AACb,UAAEwF,GAAG,CAAChC,IAAN;AACA,YAAIgZ,GAAG,CAACxc,GAAD,CAAH,KAAauzM,IAAjB,EAAuB,EAAE/tM,GAAG,CAAC0qM,KAAN;AACxB;;AACD1zL,MAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWjB,KAAX;AACA,aAAO,IAAP;AACD,KAfG;;AAgBJyC,IAAAA,MAAM,CAACxB,GAAD,EAAM;AACV,UAAIqB,GAAG,CAACrB,GAAD,CAAP,EAAc;AACZ,UAAEwF,GAAG,CAAChC,IAAN;AACA,UAAEgC,GAAG,CAAC0qM,KAAN;AACA1zL,QAAAA,GAAG,CAACxc,GAAD,CAAH,GAAWuzM,IAAX;AACD;;AACD,aAAO,IAAP;AACD,KAvBG;;AAwBJC,IAAAA,KAAK,GAAG;AACNhuM,MAAAA,GAAG,CAAChC,IAAJ,GAAWgC,GAAG,CAAC0qM,KAAJ,GAAY,CAAvB;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAa5mL,GAAG,GAAG,EAAnB;AACD,KA3BG;;AA4BJkN,IAAAA,IAAI,CAAChH,CAAD,EAAI;AACN,UAAI5mB,SAAS,CAACT,MAAd,EAAsB;AACpBquB,QAAAA,IAAI,GAAGhH,CAAP;AACA,eAAOld,GAAP;AACD,OAHD,MAGO;AACL,eAAOkkB,IAAP;AACD;AACF,KAnCG;;AAoCJ09K,IAAAA,KAAK,GAAG;AACN,UAAI32H,IAAI,GAAG,EAAX;AAAA,UACIjtE,IAAI,GAAG,CADX;AAAA,UAEIxD,GAFJ;AAAA,UAESjB,KAFT;;AAGA,WAAKiB,GAAL,IAAYwc,GAAZ,EAAiB;AACfzd,QAAAA,KAAK,GAAGyd,GAAG,CAACxc,GAAD,CAAX;;AACA,YAAIjB,KAAK,KAAKw0M,IAAV,KAAmB,CAAC7pL,IAAD,IAAS,CAACA,IAAI,CAAC3qB,KAAD,CAAjC,CAAJ,EAA+C;AAC7C0xE,UAAAA,IAAI,CAACzwE,GAAD,CAAJ,GAAYjB,KAAZ;AACA,YAAEyE,IAAF;AACD;AACF;;AACDgC,MAAAA,GAAG,CAAChC,IAAJ,GAAWA,IAAX;AACAgC,MAAAA,GAAG,CAAC0qM,KAAJ,GAAY,CAAZ;AACA1qM,MAAAA,GAAG,CAAC49L,MAAJ,GAAc5mL,GAAG,GAAGi0D,IAApB;AACD;;AAlDG,GAAN;AAqDA,MAAI1pD,KAAJ,EAAWjoB,MAAM,CAACof,IAAP,CAAY6I,KAAZ,EAAmBlnB,OAAnB,CAA2B,UAASG,GAAT,EAAc;AAClDwF,IAAAA,GAAG,CAAC9G,GAAJ,CAAQsB,GAAR,EAAa+mB,KAAK,CAAC/mB,GAAD,CAAlB;AACD,GAFU;AAIX,SAAOwF,GAAP;AACD;;;;;;;;;ACvED;;;;AAEe,kBAAS+3B,KAAT,EAAgBx+B,KAAhB,EAAuBo/F,SAAvB,EAAkCjvD,IAAlC,EAAwCC,KAAxC,EAA+C8sH,MAA/C,EAAuD;AACpE,MAAI,CAAC99D,SAAD,IAAcA,SAAS,KAAK,CAAhC,EAAmC,OAAO89D,MAAP;AAEnC,MAAIh5J,CAAC,GAAGs6B,KAAK,CAAC,CAAD,CAAb;AAAA,MACIzzB,CAAC,GAAG,mBAAKyzB,KAAL,CADR;AAAA,MAEI99B,CAAC,GAAG,CAAC0+F,SAFT;AAAA,MAGItwF,CAHJ;AAAA,MAGO9D,CAHP,CAHoE,CAQpE;;AACA,MAAID,CAAC,GAAG7G,CAAR,EAAW;AACT4K,IAAAA,CAAC,GAAG5K,CAAJ;AAAOA,IAAAA,CAAC,GAAG6G,CAAJ;AAAOA,IAAAA,CAAC,GAAG+D,CAAJ;AACf,GAXmE,CAapE;;;AACAA,EAAAA,CAAC,GAAG/L,IAAI,CAACiT,GAAL,CAAShW,KAAK,GAAGkE,CAAjB,CAAJ;AACA8G,EAAAA,CAAC,GAAGjI,IAAI,CAACiT,GAAL,CAASjL,CAAC,GAAG/K,KAAb,CAAJ,CAfoE,CAiBpE;;AACA,SAAO8O,CAAC,GAAG9D,CAAJ,IAAS8D,CAAC,IAAIpO,CAAd,GAAkByvC,IAAlB,GAAyBnlC,CAAC,IAAItK,CAAL,GAAS0vC,KAAT,GAAiB8sH,MAAjD;AACD;;;;;;;;;AQrBD;;AACA;;AACA;;AACA;;;;AAEe,kBAASpiH,MAAT,EAAiB+5J,IAAjB,EAAuB5D,GAAvB,EAA4B;AACzC,MAAIn2J,MAAJ,EAAY;AACVA,IAAAA,MAAM,GAAG+5J,IAAI,GACT,oBAAM/5J,MAAN,EAAcr0C,GAAd,CAAkBkC,CAAC,IAAIA,CAAC,CAACpI,OAAF,CAAU,QAAV,EAAoB,IAApB,CAAvB,CADS,GAET,oBAAMu6C,MAAN,CAFJ;AAGD;;AAED,QAAMp+C,GAAG,GAAGo+C,MAAM,IAAIA,MAAM,CAACx+C,MAA7B;AAAA,QACMo4L,GAAG,GAAGuc,GAAG,IAAIA,GAAG,CAACnxM,GAAX,IAAkBoxM,eAD9B;AAAA,QAEMzqM,GAAG,GAAGkC,CAAC,IAAI+rL,GAAG,CAACmgB,IAAI,GAAG,CAAClsM,CAAD,CAAH,GAAS,8BAAgBA,CAAhB,CAAd,CAFpB;;AAGA,MAAIsY,EAAJ;;AAEA,MAAI,CAACvkB,GAAL,EAAU;AACRukB,IAAAA,EAAE,GAAG,YAAW;AAAE,aAAO,EAAP;AAAY,KAA9B;AACD,GAFD,MAEO,IAAIvkB,GAAG,KAAK,CAAZ,EAAe;AACpB,UAAMoD,GAAG,GAAG2G,GAAG,CAACq0C,MAAM,CAAC,CAAD,CAAP,CAAf;;AACA75B,IAAAA,EAAE,GAAG,UAAS0C,CAAT,EAAY;AAAE,aAAO,KAAK7jB,GAAG,CAAC6jB,CAAD,CAAf;AAAqB,KAAxC;AACD,GAHM,MAGA;AACL,UAAM7jB,GAAG,GAAGg7C,MAAM,CAACr0C,GAAP,CAAWA,GAAX,CAAZ;;AACAwa,IAAAA,EAAE,GAAG,UAAS0C,CAAT,EAAY;AACf,UAAInjB,CAAC,GAAG,KAAKV,GAAG,CAAC,CAAD,CAAH,CAAO6jB,CAAP,CAAb;AAAA,UAAwB3mB,CAAC,GAAG,CAA5B;;AACA,aAAO,EAAEA,CAAF,GAAMN,GAAb,EAAkB8D,CAAC,IAAI,MAAMV,GAAG,CAAC9C,CAAD,CAAH,CAAO2mB,CAAP,CAAX;;AAClB,aAAOnjB,CAAP;AACD,KAJD;AAKD;;AAED,SAAO,uBAASygB,EAAT,EAAa65B,MAAb,EAAqB,KAArB,CAAP;AACD;;;;;;;;;AChCD;;;;AAEe,kBAAS39C,KAAT,EAAgB23M,IAAhB,EAAsB;AACnC,QAAMpB,EAAE,GAAGv2M,KAAK,CAAC,CAAD,CAAhB;AAAA,QACMw2M,EAAE,GAAG,mBAAKx2M,KAAL,CADX;AAAA,QAEMwL,CAAC,GAAG,CAACmsM,IAFX;AAGA,SAAO,CAACnsM,CAAD,GAAK+qM,EAAL,GAAU/qM,CAAC,KAAK,CAAN,GAAUgrM,EAAV,GAAeD,EAAE,GAAG/qM,CAAC,IAAIgrM,EAAE,GAAGD,EAAT,CAAtC;AACD;;;;;;;;;ACPD;;;;AAEA,MAAMqB,gBAAgB,GAAG,KAAzB,EAEA;;AACe,kBAASC,OAAT,EAAkB;AAC/BA,EAAAA,OAAO,GAAG,CAACA,OAAD,IAAYD,gBAAtB;AAEA,MAAI/iC,IAAJ,EAAU77E,IAAV,EAAgB1xF,IAAhB;;AAEA,QAAMgwM,KAAK,GAAG,MAAM;AAClBziC,IAAAA,IAAI,GAAG,EAAP;AACA77E,IAAAA,IAAI,GAAG,EAAP;AACA1xF,IAAAA,IAAI,GAAG,CAAP;AACD,GAJD;;AAMA,QAAMynF,MAAM,GAAG,CAACjrF,GAAD,EAAMjB,KAAN,KAAgB;AAC7B,QAAI,EAAEyE,IAAF,GAASuwM,OAAb,EAAsB;AACpB7+G,MAAAA,IAAI,GAAG67E,IAAP;AACAA,MAAAA,IAAI,GAAG,EAAP;AACAvtK,MAAAA,IAAI,GAAG,CAAP;AACD;;AACD,WAAQutK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KAApB;AACD,GAPD;;AASAy0M,EAAAA,KAAK;AAEL,SAAO;AACLA,IAAAA,KADK;AAELnyM,IAAAA,GAAG,EAAErB,GAAG,IAAI,6BAAI+wK,IAAJ,EAAU/wK,GAAV,KAAkB,6BAAIk1F,IAAJ,EAAUl1F,GAAV,CAFzB;AAGLnB,IAAAA,GAAG,EAAEmB,GAAG,IAAI,6BAAI+wK,IAAJ,EAAU/wK,GAAV,IAAiB+wK,IAAI,CAAC/wK,GAAD,CAArB,GACN,6BAAIk1F,IAAJ,EAAUl1F,GAAV,IAAiBirF,MAAM,CAACjrF,GAAD,EAAMk1F,IAAI,CAACl1F,GAAD,CAAV,CAAvB,GACAixH,SALD;AAMLvyH,IAAAA,GAAG,EAAE,CAACsB,GAAD,EAAMjB,KAAN,KAAgB,6BAAIgyK,IAAJ,EAAU/wK,GAAV,IACd+wK,IAAI,CAAC/wK,GAAD,CAAJ,GAAYjB,KADE,GAEfksF,MAAM,CAACjrF,GAAD,EAAMjB,KAAN;AARP,GAAP;AAUD;;;;;;;;;AGrCD;;;;AAEe,kBAAS63G,GAAT,EAAcv7G,MAAd,EAAsBg5M,OAAtB,EAA+BC,KAA/B,EAAsC;AACnD,MAAI9rM,CAAC,GAAG6rM,OAAO,IAAI,GAAnB;AAAA,MACI90M,CAAC,GAAGq3G,GAAG,GAAG,EADd;AAAA,MAEI3sG,CAAC,GAAG5O,MAAM,GAAGkE,CAAC,CAAClE,MAFnB;AAIA,SAAO4O,CAAC,IAAI,CAAL,GAAS1K,CAAT,GACH+0M,KAAK,KAAK,MAAV,GAAmB,qBAAO9rM,CAAP,EAAUyB,CAAV,IAAe1K,CAAlC,GACA+0M,KAAK,KAAK,QAAV,GAAqB,qBAAO9rM,CAAP,EAAU,CAAC,EAAEyB,CAAC,GAAC,CAAJ,CAAX,IAAqB1K,CAArB,GAAyB,qBAAOiJ,CAAP,EAAU1G,IAAI,CAACoC,IAAL,CAAU+F,CAAC,GAAC,CAAZ,CAAV,CAA9C,GACA1K,CAAC,GAAG,qBAAOiJ,CAAP,EAAUyB,CAAV,CAHR;AAID;;;;;;;;;ACXD;;;;AAEA;AACA;AACA;AACA;AACe,kBAAS/N,KAAT,EAAgB;AAC7B,SAAOA,KAAK,IAAK,mBAAKA,KAAL,IAAcA,KAAK,CAAC,CAAD,CAA7B,IAAqC,CAA5C;AACD;;;;;;;;;ACRD;;AACA;;AACA;;;;AAEe,SAASq4M,CAAT,CAAWryM,CAAX,EAAc;AAC3B,SAAO,sBAAQA,CAAR,IAAa,MAAMA,CAAC,CAACsD,GAAF,CAAM+uM,CAAN,CAAN,GAAiB,GAA9B,GACH,uBAASryM,CAAT,KAAe,uBAASA,CAAT,CAAf,GACA;AACA;AACA87C,EAAAA,IAAI,CAACE,SAAL,CAAeh8C,CAAf,EAAkB5C,OAAlB,CAA0B,QAA1B,EAAmC,SAAnC,EAA8CA,OAA9C,CAAsD,QAAtD,EAAgE,SAAhE,CAHA,GAIA4C,CALJ;AAMD;;;;;;;;;AEXD;;AACA;;;;AAEA,SAASsyM,aAAT,CAAuB9xL,CAAvB,EAA0B;AACxB,SAAO,uBAASA,CAAT,IAAcA,CAAd,GAAkB,qBAAOA,CAAP,IAAYA,CAAZ,GAAgBmvD,IAAI,CAAC5zB,KAAL,CAAWv7B,CAAX,CAAzC;AACD;;AAEc,kBAASA,CAAT,EAAY+xL,MAAZ,EAAoB;AACjCA,EAAAA,MAAM,GAAGA,MAAM,IAAID,aAAnB;AACA,SAAO9xL,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,EAAnB,GAAwB,IAAxB,GAA+B+xL,MAAM,CAAC/xL,CAAD,CAA5C;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AKVD;;AAMA;;AASA;;AASA;;AAKA;;AAWA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;ACpFA7mB,KAAK,CAACM,SAAN,CAAgBy3M,IAAhB,IAAsB90M,MAAM,CAACub,cAAP,CAAsBxe,KAAK,CAACM,SAA5B,EAAsC,MAAtC,EAA6C;AAAC4+B,EAAAA,YAAY,EAAC,CAAC,CAAf;AAAiBh8B,EAAAA,KAAK,EAAC,SAASgL,CAAT,GAAY;AAAC,QAAItK,CAAC,GAACkH,KAAK,CAAC7K,SAAS,CAAC,CAAD,CAAV,CAAL,GAAoB,CAApB,GAAsBqN,MAAM,CAACrN,SAAS,CAAC,CAAD,CAAV,CAAlC;AAAiD,WAAO2D,CAAC,GAAC5D,KAAK,CAACM,SAAN,CAAgBmM,MAAhB,CAAuBzN,IAAvB,CAA4B,IAA5B,EAAiC,UAASoI,CAAT,EAAWxI,CAAX,EAAa;AAAC,aAAOoB,KAAK,CAACuH,OAAN,CAAc3I,CAAd,IAAiBwI,CAAC,CAACjH,IAAF,CAAOI,KAAP,CAAa6G,CAAb,EAAe8G,CAAC,CAAClP,IAAF,CAAOJ,CAAP,EAASgF,CAAC,GAAC,CAAX,CAAf,CAAjB,GAA+CwD,CAAC,CAACjH,IAAF,CAAOvB,CAAP,CAA/C,EAAyDwI,CAAhE;AAAkE,KAAjH,EAAkH,EAAlH,CAAD,GAAuHpH,KAAK,CAACM,SAAN,CAAgBiJ,KAAhB,CAAsBvK,IAAtB,CAA2B,IAA3B,CAA/H;AAAgK,GAArP;AAAsP+hO,EAAAA,QAAQ,EAAC,CAAC;AAAhQ,CAA7C,CAAtB,EAAuU/gO,KAAK,CAACM,SAAN,CAAgBu+V,OAAhB,IAAyB57V,MAAM,CAACub,cAAP,CAAsBxe,KAAK,CAACM,SAA5B,EAAsC,SAAtC,EAAgD;AAAC4+B,EAAAA,YAAY,EAAC,CAAC,CAAf;AAAiBh8B,EAAAA,KAAK,EAAC,UAASgL,CAAT,EAAW;AAAC,WAAOlO,KAAK,CAACM,SAAN,CAAgBqJ,GAAhB,CAAoBpJ,KAApB,CAA0B,IAA1B,EAA+BN,SAA/B,EAA0C83M,IAA1C,EAAP;AAAwD,GAA3F;AAA4FgpB,EAAAA,QAAQ,EAAC,CAAC;AAAtG,CAAhD,CAAhW;;;ACAA,IAAIjsN,KAAK,GAAI,YAAW;AACxB;;AAEA,WAASgqV,WAAT,CAAqBn+U,GAArB,EAA0BR,IAA1B,EAAgC;AAC9B,WAAOA,IAAI,IAAI,IAAR,IAAgBQ,GAAG,YAAYR,IAAtC;AACD;;AAED,MAAI4+U,SAAJ;;AACA,MAAI;AACFA,IAAAA,SAAS,GAAGr6V,GAAZ;AACD,GAFD,CAEE,OAAMmiB,CAAN,EAAS;AACT;AACA;AACAk4U,IAAAA,SAAS,GAAG,YAAW,CAAE,CAAzB;AACD;;AAED,MAAIC,SAAJ;;AACA,MAAI;AACFA,IAAAA,SAAS,GAAGl+U,GAAZ;AACD,GAFD,CAEE,OAAM+F,CAAN,EAAS;AACTm4U,IAAAA,SAAS,GAAG,YAAW,CAAE,CAAzB;AACD;;AAED,MAAIC,aAAJ;;AACA,MAAI;AACFA,IAAAA,aAAa,GAAGp2V,OAAhB;AACD,GAFD,CAEE,OAAMge,CAAN,EAAS;AACTo4U,IAAAA,aAAa,GAAG,YAAW,CAAE,CAA7B;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,WAASnqV,KAAT,CAAe8iM,MAAf,EAAuBsnJ,QAAvB,EAAiCvrV,KAAjC,EAAwCrT,SAAxC,EAAmD6+V,oBAAnD,EAAyE;AACvE,QAAI,OAAOD,QAAP,KAAoB,QAAxB,EAAkC;AAChCvrV,MAAAA,KAAK,GAAGurV,QAAQ,CAACvrV,KAAjB;AACArT,MAAAA,SAAS,GAAG4+V,QAAQ,CAAC5+V,SAArB;AACA6+V,MAAAA,oBAAoB,GAAGD,QAAQ,CAACC,oBAAhC;AACAD,MAAAA,QAAQ,GAAGA,QAAQ,CAACA,QAApB;AACD,KANsE,CAOvE;AACA;;;AACA,QAAIE,UAAU,GAAG,EAAjB;AACA,QAAIC,WAAW,GAAG,EAAlB;AAEA,QAAIC,SAAS,GAAG,OAAO5kP,MAAP,IAAiB,WAAjC;AAEA,QAAI,OAAOwkP,QAAP,IAAmB,WAAvB,EACEA,QAAQ,GAAG,IAAX;AAEF,QAAI,OAAOvrV,KAAP,IAAgB,WAApB,EACEA,KAAK,GAAG3L,QAAR,CAlBqE,CAoBvE;;AACA,aAASu3V,MAAT,CAAgB3nJ,MAAhB,EAAwBjkM,KAAxB,EAA+B;AAC7B;AACA,UAAIikM,MAAM,KAAK,IAAf,EACE,OAAO,IAAP;AAEF,UAAIjkM,KAAK,KAAK,CAAd,EACE,OAAOikM,MAAP;AAEF,UAAI/1B,KAAJ;AACA,UAAIg2B,KAAJ;;AACA,UAAI,OAAOD,MAAP,IAAiB,QAArB,EAA+B;AAC7B,eAAOA,MAAP;AACD;;AAED,UAAIknJ,WAAW,CAAClnJ,MAAD,EAASmnJ,SAAT,CAAf,EAAoC;AAClCl9K,QAAAA,KAAK,GAAG,IAAIk9K,SAAJ,EAAR;AACD,OAFD,MAEO,IAAID,WAAW,CAAClnJ,MAAD,EAASonJ,SAAT,CAAf,EAAoC;AACzCn9K,QAAAA,KAAK,GAAG,IAAIm9K,SAAJ,EAAR;AACD,OAFM,MAEA,IAAIF,WAAW,CAAClnJ,MAAD,EAASqnJ,aAAT,CAAf,EAAwC;AAC7Cp9K,QAAAA,KAAK,GAAG,IAAIo9K,aAAJ,CAAkB,UAAUn2V,OAAV,EAAmBC,MAAnB,EAA2B;AACnD6uM,UAAAA,MAAM,CAACzoM,IAAP,CAAY,UAASjM,KAAT,EAAgB;AAC1B4F,YAAAA,OAAO,CAACy2V,MAAM,CAACr8V,KAAD,EAAQyQ,KAAK,GAAG,CAAhB,CAAP,CAAP;AACD,WAFD,EAEG,UAAS2P,GAAT,EAAc;AACfva,YAAAA,MAAM,CAACw2V,MAAM,CAACj8U,GAAD,EAAM3P,KAAK,GAAG,CAAd,CAAP,CAAN;AACD,WAJD;AAKD,SANO,CAAR;AAOD,OARM,MAQA,IAAImB,KAAK,CAAC0qV,SAAN,CAAgB5nJ,MAAhB,CAAJ,EAA6B;AAClC/1B,QAAAA,KAAK,GAAG,EAAR;AACD,OAFM,MAEA,IAAI/sK,KAAK,CAAC2qV,UAAN,CAAiB7nJ,MAAjB,CAAJ,EAA8B;AACnC/1B,QAAAA,KAAK,GAAG,IAAIhnD,MAAJ,CAAW+8E,MAAM,CAAC5hJ,MAAlB,EAA0B0pS,gBAAgB,CAAC9nJ,MAAD,CAA1C,CAAR;AACA,YAAIA,MAAM,CAAC3yJ,SAAX,EAAsB48H,KAAK,CAAC58H,SAAN,GAAkB2yJ,MAAM,CAAC3yJ,SAAzB;AACvB,OAHM,MAGA,IAAInwC,KAAK,CAAC6qV,QAAN,CAAe/nJ,MAAf,CAAJ,EAA4B;AACjC/1B,QAAAA,KAAK,GAAG,IAAI7rG,IAAJ,CAAS4hI,MAAM,CAACgoJ,OAAP,EAAT,CAAR;AACD,OAFM,MAEA,IAAIN,SAAS,IAAI5kP,MAAM,CAAC2lG,QAAP,CAAgBzI,MAAhB,CAAjB,EAA0C;AAC/C,YAAIl9F,MAAM,CAACmlP,WAAX,EAAwB;AACtB;AACAh+K,UAAAA,KAAK,GAAGnnE,MAAM,CAACmlP,WAAP,CAAmBjoJ,MAAM,CAACp4M,MAA1B,CAAR;AACD,SAHD,MAGO;AACL;AACAqiL,UAAAA,KAAK,GAAG,IAAInnE,MAAJ,CAAWk9F,MAAM,CAACp4M,MAAlB,CAAR;AACD;;AACDo4M,QAAAA,MAAM,CAAC5iI,IAAP,CAAY6sG,KAAZ;AACA,eAAOA,KAAP;AACD,OAVM,MAUA,IAAIi9K,WAAW,CAAClnJ,MAAD,EAASn5M,KAAT,CAAf,EAAgC;AACrCojL,QAAAA,KAAK,GAAG5+K,MAAM,CAAC60L,MAAP,CAAc8f,MAAd,CAAR;AACD,OAFM,MAEA;AACL,YAAI,OAAOt3M,SAAP,IAAoB,WAAxB,EAAqC;AACnCu3M,UAAAA,KAAK,GAAG50M,MAAM,CAACyvI,cAAP,CAAsBklE,MAAtB,CAAR;AACA/1B,UAAAA,KAAK,GAAG5+K,MAAM,CAAC60L,MAAP,CAAc+f,KAAd,CAAR;AACD,SAHD,MAIK;AACHh2B,UAAAA,KAAK,GAAG5+K,MAAM,CAAC60L,MAAP,CAAcx3L,SAAd,CAAR;AACAu3M,UAAAA,KAAK,GAAGv3M,SAAR;AACD;AACF;;AAED,UAAI4+V,QAAJ,EAAc;AACZ,YAAIl5V,KAAK,GAAGo5V,UAAU,CAAC9hU,OAAX,CAAmBs6K,MAAnB,CAAZ;;AAEA,YAAI5xM,KAAK,IAAI,CAAC,CAAd,EAAiB;AACf,iBAAOq5V,WAAW,CAACr5V,KAAD,CAAlB;AACD;;AACDo5V,QAAAA,UAAU,CAACj/V,IAAX,CAAgBy3M,MAAhB;AACAynJ,QAAAA,WAAW,CAACl/V,IAAZ,CAAiB0hL,KAAjB;AACD;;AAED,UAAIi9K,WAAW,CAAClnJ,MAAD,EAASmnJ,SAAT,CAAf,EAAoC;AAClCnnJ,QAAAA,MAAM,CAAC5zM,OAAP,CAAe,UAASd,KAAT,EAAgBiB,GAAhB,EAAqB;AAClC,cAAI27V,QAAQ,GAAGP,MAAM,CAACp7V,GAAD,EAAMwP,KAAK,GAAG,CAAd,CAArB;;AACA,cAAIosV,UAAU,GAAGR,MAAM,CAACr8V,KAAD,EAAQyQ,KAAK,GAAG,CAAhB,CAAvB;;AACAkuK,UAAAA,KAAK,CAACh/K,GAAN,CAAUi9V,QAAV,EAAoBC,UAApB;AACD,SAJD;AAKD;;AACD,UAAIjB,WAAW,CAAClnJ,MAAD,EAASonJ,SAAT,CAAf,EAAoC;AAClCpnJ,QAAAA,MAAM,CAAC5zM,OAAP,CAAe,UAASd,KAAT,EAAgB;AAC7B,cAAI88V,UAAU,GAAGT,MAAM,CAACr8V,KAAD,EAAQyQ,KAAK,GAAG,CAAhB,CAAvB;;AACAkuK,UAAAA,KAAK,CAAChhK,GAAN,CAAUm/U,UAAV;AACD,SAHD;AAID;;AAED,WAAK,IAAI9/V,CAAT,IAAc03M,MAAd,EAAsB;AACpB,YAAI1yL,KAAJ;;AACA,YAAI2yL,KAAJ,EAAW;AACT3yL,UAAAA,KAAK,GAAGjiB,MAAM,CAACs9L,wBAAP,CAAgCsX,KAAhC,EAAuC33M,CAAvC,CAAR;AACD;;AAED,YAAIglB,KAAK,IAAIA,KAAK,CAACriB,GAAN,IAAa,IAA1B,EAAgC;AAC9B;AACD;;AACDg/K,QAAAA,KAAK,CAAC3hL,CAAD,CAAL,GAAWq/V,MAAM,CAAC3nJ,MAAM,CAAC13M,CAAD,CAAP,EAAYyT,KAAK,GAAG,CAApB,CAAjB;AACD;;AAED,UAAI1Q,MAAM,CAAC01L,qBAAX,EAAkC;AAChC,YAAI+sD,OAAO,GAAGziP,MAAM,CAAC01L,qBAAP,CAA6Bif,MAA7B,CAAd;;AACA,aAAK,IAAI13M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwlP,OAAO,CAAClmP,MAA5B,EAAoCU,CAAC,EAArC,EAAyC;AACvC;AACA;AACA,cAAIupN,MAAM,GAAGi8B,OAAO,CAACxlP,CAAD,CAApB;AACA,cAAI+/V,UAAU,GAAGh9V,MAAM,CAACs9L,wBAAP,CAAgCqX,MAAhC,EAAwC6R,MAAxC,CAAjB;;AACA,cAAIw2I,UAAU,IAAI,CAACA,UAAU,CAAC1mK,UAA1B,IAAwC,CAAC4lK,oBAA7C,EAAmE;AACjE;AACD;;AACDt9K,UAAAA,KAAK,CAAC4nC,MAAD,CAAL,GAAgB81I,MAAM,CAAC3nJ,MAAM,CAAC6R,MAAD,CAAP,EAAiB91M,KAAK,GAAG,CAAzB,CAAtB;;AACA,cAAI,CAACssV,UAAU,CAAC1mK,UAAhB,EAA4B;AAC1Bt2L,YAAAA,MAAM,CAACub,cAAP,CAAsBqjK,KAAtB,EAA6B4nC,MAA7B,EAAqC;AACnClwB,cAAAA,UAAU,EAAE;AADuB,aAArC;AAGD;AACF;AACF;;AAED,UAAI4lK,oBAAJ,EAA0B;AACxB,YAAIe,gBAAgB,GAAGj9V,MAAM,CAAC21L,mBAAP,CAA2Bgf,MAA3B,CAAvB;;AACA,aAAK,IAAI13M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGggW,gBAAgB,CAAC1gW,MAArC,EAA6CU,CAAC,EAA9C,EAAkD;AAChD,cAAIigW,YAAY,GAAGD,gBAAgB,CAAChgW,CAAD,CAAnC;AACA,cAAI+/V,UAAU,GAAGh9V,MAAM,CAACs9L,wBAAP,CAAgCqX,MAAhC,EAAwCuoJ,YAAxC,CAAjB;;AACA,cAAIF,UAAU,IAAIA,UAAU,CAAC1mK,UAA7B,EAAyC;AACvC;AACD;;AACD1X,UAAAA,KAAK,CAACs+K,YAAD,CAAL,GAAsBZ,MAAM,CAAC3nJ,MAAM,CAACuoJ,YAAD,CAAP,EAAuBxsV,KAAK,GAAG,CAA/B,CAA5B;AACA1Q,UAAAA,MAAM,CAACub,cAAP,CAAsBqjK,KAAtB,EAA6Bs+K,YAA7B,EAA2C;AACzC5mK,YAAAA,UAAU,EAAE;AAD6B,WAA3C;AAGD;AACF;;AAED,aAAO1X,KAAP;AACD;;AAED,WAAO09K,MAAM,CAAC3nJ,MAAD,EAASjkM,KAAT,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAmB,EAAAA,KAAK,CAACsrV,cAAN,GAAuB,SAASA,cAAT,CAAwBxoJ,MAAxB,EAAgC;AACrD,QAAIA,MAAM,KAAK,IAAf,EACE,OAAO,IAAP;;AAEF,QAAIjrM,CAAC,GAAG,YAAY,CAAE,CAAtB;;AACAA,IAAAA,CAAC,CAACrM,SAAF,GAAcs3M,MAAd;AACA,WAAO,IAAIjrM,CAAJ,EAAP;AACD,GAPD,CAnNwB,CA4NxB;;;AAEA,WAAS0zV,UAAT,CAAoBx0U,CAApB,EAAuB;AACrB,WAAO5oB,MAAM,CAAC3C,SAAP,CAAiBuP,QAAjB,CAA0B7Q,IAA1B,CAA+B6sB,CAA/B,CAAP;AACD;;AACD/W,EAAAA,KAAK,CAACurV,UAAN,GAAmBA,UAAnB;;AAEA,WAASV,QAAT,CAAkB9zU,CAAlB,EAAqB;AACnB,WAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBw0U,UAAU,CAACx0U,CAAD,CAAV,KAAkB,eAAlD;AACD;;AACD/W,EAAAA,KAAK,CAAC6qV,QAAN,GAAiBA,QAAjB;;AAEA,WAASH,SAAT,CAAmB3zU,CAAnB,EAAsB;AACpB,WAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBw0U,UAAU,CAACx0U,CAAD,CAAV,KAAkB,gBAAlD;AACD;;AACD/W,EAAAA,KAAK,CAAC0qV,SAAN,GAAkBA,SAAlB;;AAEA,WAASC,UAAT,CAAoB5zU,CAApB,EAAuB;AACrB,WAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBw0U,UAAU,CAACx0U,CAAD,CAAV,KAAkB,iBAAlD;AACD;;AACD/W,EAAAA,KAAK,CAAC2qV,UAAN,GAAmBA,UAAnB;;AAEA,WAASC,gBAAT,CAA0Bl3J,EAA1B,EAA8B;AAC5B,QAAI1lM,KAAK,GAAG,EAAZ;AACA,QAAI0lM,EAAE,CAACzmM,MAAP,EAAee,KAAK,IAAI,GAAT;AACf,QAAI0lM,EAAE,CAAC83J,UAAP,EAAmBx9V,KAAK,IAAI,GAAT;AACnB,QAAI0lM,EAAE,CAAC+3J,SAAP,EAAkBz9V,KAAK,IAAI,GAAT;AAClB,WAAOA,KAAP;AACD;;AACDgS,EAAAA,KAAK,CAAC4qV,gBAAN,GAAyBA,gBAAzB;AAEA,SAAO5qV,KAAP;AACC,CA5PW,EAAZ;;AA8PA,IAAI,OAAO1W,MAAP,KAAkB,QAAlB,IAA8BA,MAAM,CAACC,OAAzC,EAAkD;AAChDD,EAAAA,MAAM,CAACC,OAAP,GAAiByW,KAAjB;AACD;;AChQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7CM,SAAU,WAAV,CAAsB,EAAtB,EAAiD;AACrD,SAAO,CAAC,CAAC,EAAE,CAAC,EAAZ;AACD;;AAEK,SAAU,YAAV,CAAuB,EAAvB,EAAkD;AACtD,SAAO,CAAC,CAAC,EAAE,CAAC,GAAZ;AACD;;AAEK,SAAU,YAAV,CAAuB,EAAvB,EAAkD;AACtD,SAAO,CAAC,CAAC,EAAE,CAAC,GAAZ;AACD;;AAEK,SAAU,WAAV,CAAyB,EAAzB,EAAoD,EAApD,EAAuE;AAC3E,MAAI,YAAY,CAAC,EAAD,CAAhB,EAAsB;AACpB,IAAA,WAAW,CAAC,EAAE,CAAC,GAAJ,EAAS,EAAT,CAAX;AACD,GAFD,MAEO,IAAI,YAAY,CAAC,EAAD,CAAhB,EAAsB;AAC3B,SAAK,MAAM,KAAX,IAAoB,EAAE,CAAC,GAAvB,EAA4B;AAC1B,MAAA,WAAW,CAAC,KAAD,EAAQ,EAAR,CAAX;AACD;AACF,GAJM,MAIA,IAAI,WAAW,CAAC,EAAD,CAAf,EAAqB;AAC1B,SAAK,MAAM,KAAX,IAAoB,EAAE,CAAC,EAAvB,EAA2B;AACzB,MAAA,WAAW,CAAC,KAAD,EAAQ,EAAR,CAAX;AACD;AACF,GAJM,MAIA;AACL,IAAA,EAAE,CAAC,EAAD,CAAF;AACD;AACF;;AAEK,SAAU,2BAAV,CACJ,EADI,EAEJ,UAFI,EAEmB;AAEvB,MAAI,YAAY,CAAC,EAAD,CAAhB,EAAsB;AACpB,WAAO;AAAC,MAAA,GAAG,EAAE,2BAA2B,CAAC,EAAE,CAAC,GAAJ,EAAS,UAAT;AAAjC,KAAP;AACD,GAFD,MAEO,IAAI,YAAY,CAAC,EAAD,CAAhB,EAAsB;AAC3B,WAAO;AAAC,MAAA,GAAG,EAAE,EAAE,CAAC,GAAH,CAAO,GAAP,CAAW,CAAC,IAAI,2BAA2B,CAAC,CAAD,EAAI,UAAJ,CAA3C;AAAN,KAAP;AACD,GAFM,MAEA,IAAI,WAAW,CAAC,EAAD,CAAf,EAAqB;AAC1B,WAAO;AAAC,MAAA,EAAE,EAAE,EAAE,CAAC,EAAH,CAAM,GAAN,CAAU,CAAC,IAAI,2BAA2B,CAAC,CAAD,EAAI,UAAJ,CAA1C;AAAL,KAAP;AACD,GAFM,MAEA;AACL,WAAO,UAAU,CAAC,EAAD,CAAjB;AACD;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,MAAM,SAAS,GAAG,sBAAlB;;AACA,MAAM,SAAS,GAAG,cAAlB;AAEP;;;;;;;;;;AAOM,SAAU,IAAV,CAAoD,GAApD,EAA4D,KAA5D,EAA+E;AACnF,QAAM,IAAI,GAAQ,EAAlB;;AACA,OAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,QAAI,8BAAe,GAAf,EAAoB,IAApB,CAAJ,EAA+B;AAC7B,MAAA,IAAI,CAAC,IAAD,CAAJ,GAAa,GAAG,CAAC,IAAD,CAAhB;AACD;AACF;;AACD,SAAO,IAAP;AACD;AAED;;;;;;AAIM,SAAU,IAAV,CAAoD,GAApD,EAA4D,KAA5D,EAA+E;AACnF,QAAM,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,GAAR,CAAV;;AACA,OAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,WAAO,IAAI,CAAC,IAAD,CAAX;AACD;;AACD,SAAO,IAAP;AACD;AAED;;;;;AAGA,GAAG,CAAC,SAAJ,CAAc,QAAd,IAA0B,YAAA;AACxB,SAAO,OAAO,CAAC,GAAG,IAAJ,EAAU,GAAV,CAAc,CAAC,IAAI,sCAAgB,CAAhB,CAAnB,EAAuC,IAAvC,CAA4C,GAA5C,CAAgD,GAA9D;AACD,CAFD;AAIA;;;;;AAGO,MAAM,SAAS,GAAG,gCAAlB;AAEP;;;;;;AAGM,SAAU,IAAV,CAAe,CAAf,EAAqB;AACzB,MAAI,wBAAS,CAAT,CAAJ,EAAiB;AACf,WAAO,CAAP;AACD;;AAED,QAAM,GAAG,GAAG,wBAAS,CAAT,IAAc,CAAd,GAAkB,sCAAgB,CAAhB,CAA9B,CALyB,CAOzB;;AACA,MAAI,GAAG,CAAC,MAAJ,GAAa,GAAjB,EAAsB;AACpB,WAAO,GAAP;AACD,GAVwB,CAYzB;;;AACA,MAAI,CAAC,GAAG,CAAR;;AACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,GAAG,CAAC,MAAxB,EAAgC,CAAC,EAAjC,EAAqC;AACnC,UAAM,IAAI,GAAG,GAAG,CAAC,UAAJ,CAAe,CAAf,CAAb;AACA,IAAA,CAAC,GAAG,CAAC,CAAC,IAAI,CAAN,IAAW,CAAX,GAAe,IAAnB;AACA,IAAA,CAAC,GAAG,CAAC,GAAG,CAAR,CAHmC,CAGxB;AACZ;;AACD,SAAO,CAAP;AACD;;AAEK,SAAU,aAAV,CAAwB,CAAxB,EAA8B;AAClC,SAAO,CAAC,KAAK,KAAN,IAAe,CAAC,KAAK,IAA5B;AACD;;AAEK,SAAU,QAAV,CAAsB,KAAtB,EAA2C,IAA3C,EAAkD;AACtD,SAAO,KAAK,CAAC,OAAN,CAAc,IAAd,IAAsB,CAAC,CAA9B;AACD;AAED;;;;;AAGM,SAAU,IAAV,CAAkB,GAAlB,EAAqC,CAArC,EAA2E;AAC/E,MAAI,CAAC,GAAG,CAAR;;AACA,OAAK,MAAM,CAAC,CAAD,EAAI,CAAJ,CAAX,IAAqB,GAAG,CAAC,OAAJ,EAArB,EAAoC;AAClC,QAAI,CAAC,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAC,EAAR,CAAL,EAAkB;AAChB,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;AAED;;;;;AAGM,SAAU,KAAV,CAAmB,GAAnB,EAAsC,CAAtC,EAA4E;AAChF,MAAI,CAAC,GAAG,CAAR;;AACA,OAAK,MAAM,CAAC,CAAD,EAAI,CAAJ,CAAX,IAAqB,GAAG,CAAC,OAAJ,EAArB,EAAoC;AAClC,QAAI,CAAC,CAAC,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAC,EAAR,CAAN,EAAmB;AACjB,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;AAOD;;;;;AAGM,SAAU,SAAV,CAAuB,IAAvB,EAAgC,GAAG,GAAnC,EAAiE;AACrE,OAAK,MAAM,CAAX,IAAgB,GAAhB,EAAqB;AACnB,IAAA,UAAU,CAAC,IAAD,EAAO,CAAC,KAAA,IAAD,IAAA,CAAC,KAAA,KAAA,CAAD,GAAA,CAAA,GAAK,EAAZ,CAAV;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAAS,UAAT,CAAoB,IAApB,EAA+B,GAA/B,EAAuC;AACrC,OAAK,MAAM,QAAX,IAAuB,IAAI,CAAC,GAAD,CAA3B,EAAkC;AAChC,+BAAY,IAAZ,EAAkB,QAAlB,EAA4B,GAAG,CAAC,QAAD,CAA/B,EAA2C,IAA3C;AACD;AACF;;AAEK,SAAU,MAAV,CAAoB,MAApB,EAA0C,CAA1C,EAAyE;AAC7E,QAAM,OAAO,GAAQ,EAArB;AACA,QAAM,CAAC,GAAG,EAAV;AACA,MAAI,CAAJ;;AACA,OAAK,MAAM,GAAX,IAAkB,MAAlB,EAA0B;AACxB,IAAA,CAAC,GAAG,CAAC,CAAC,GAAD,CAAL;;AACA,QAAI,CAAC,IAAI,CAAT,EAAY;AACV;AACD;;AACD,IAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP;AACA,IAAA,OAAO,CAAC,IAAR,CAAa,GAAb;AACD;;AACD,SAAO,OAAP;AACD;AAID;;;;;AAGM,SAAU,OAAV,CAAqB,IAArB,EAAoC,KAApC,EAAkD;AACtD,QAAM,QAAQ,GAAG,IAAI,CAAC,IAAD,CAArB;AACA,QAAM,SAAS,GAAG,IAAI,CAAC,KAAD,CAAtB;;AACA,MAAI,QAAQ,CAAC,MAAT,KAAoB,SAAS,CAAC,MAAlC,EAA0C;AACxC,WAAO,KAAP;AACD;;AACD,OAAK,MAAM,GAAX,IAAkB,QAAlB,EAA4B;AAC1B,QAAI,IAAI,CAAC,GAAD,CAAJ,KAAc,KAAK,CAAC,GAAD,CAAvB,EAA8B;AAC5B,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAEK,SAAU,QAAV,CAAsB,CAAtB,EAAiC,CAAjC,EAA0C;AAC9C,MAAI,CAAC,CAAC,IAAF,KAAW,CAAC,CAAC,IAAjB,EAAuB;AACrB,WAAO,KAAP;AACD;;AACD,OAAK,MAAM,CAAX,IAAgB,CAAhB,EAAmB;AACjB,QAAI,CAAC,CAAC,CAAC,GAAF,CAAM,CAAN,CAAL,EAAe;AACb,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAEK,SAAU,eAAV,CAA6B,CAA7B,EAAgD,CAAhD,EAAiE;AACrE,OAAK,MAAM,GAAX,IAAkB,CAAlB,EAAqB;AACnB,QAAI,CAAC,CAAC,GAAF,CAAM,GAAN,CAAJ,EAAgB;AACd,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAEK,SAAU,eAAV,CAA0B,CAA1B,EAAgD;AACpD,QAAM,QAAQ,GAAG,IAAI,GAAJ,EAAjB;;AACA,OAAK,MAAM,CAAX,IAAgB,CAAhB,EAAmB;AACjB,UAAM,UAAU,GAAG,+BAAgB,CAAhB,CAAnB,CADiB,CAEjB;;AACA,UAAM,oBAAoB,GAAG,UAAU,CAAC,GAAX,CAAe,CAAC,CAAD,EAAI,CAAJ,KAAW,CAAC,KAAK,CAAN,GAAU,CAAV,GAAc,IAAI,CAAC,GAA7C,CAA7B;AACA,UAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAArB,CAAyB,CAAC,CAAD,EAAI,CAAJ,KAAU,oBAAoB,CAAC,KAArB,CAA2B,CAA3B,EAA8B,CAAC,GAAG,CAAlC,EAAqC,IAArC,CAA0C,EAA1C,CAAnC,CAAzB;;AACA,SAAK,MAAM,CAAX,IAAgB,gBAAhB,EAAkC;AAChC,MAAA,QAAQ,CAAC,GAAT,CAAa,CAAb;AACD;AACF;;AACD,SAAO,QAAP;AACD;AAED;;;;;;AAIM,SAAU,iBAAV,CAA4B,CAA5B,EAAoD,CAApD,EAA0E;AAC9E,MAAI,CAAC,KAAK,SAAN,IAAmB,CAAC,KAAK,SAA7B,EAAwC;AACtC,WAAO,IAAP;AACD;;AACD,SAAO,eAAe,CAAC,eAAe,CAAC,CAAD,CAAhB,EAAqB,eAAe,CAAC,CAAD,CAApC,CAAtB;AACD;;AAEK,SAAU,OAAV,CAAkB,GAAlB,EAA6B;AACjC,SAAO,IAAI,CAAC,GAAD,CAAJ,CAAU,MAAV,KAAqB,CAA5B;AACD,EAED;;;AACO,MAAM,IAAI,GAAG,MAAM,CAAC,IAApB;;AAEA,MAAM,IAAI,GAAG,MAAM,CAAC,MAApB;;;AAED,SAAU,OAAV,CAAqB,CAArB,EAA0C;AAC9C,QAAM,QAAQ,GAA8B,EAA5C;;AACA,OAAK,MAAM,CAAX,IAAgB,CAAhB,EAAmB;AACjB,QAAI,8BAAe,CAAf,EAAkB,CAAlB,CAAJ,EAA0B;AACxB,MAAA,QAAQ,CAAC,IAAT,CAAc;AACZ,QAAA,GAAG,EAAE,CADO;AAEZ,QAAA,KAAK,EAAE,CAAC,CAAC,CAAD;AAFI,OAAd;AAID;AACF;;AACD,SAAO,QAAP;AACD;;AAMK,SAAU,SAAV,CAAoB,CAApB,EAA0B;AAC9B,SAAO,CAAC,KAAK,IAAN,IAAc,CAAC,KAAK,KAA3B;AACD;AAED;;;;;AAGM,SAAU,OAAV,CAAkB,CAAlB,EAA2B;AAC/B;AACA,QAAM,aAAa,GAAG,CAAC,CAAC,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAtB,CAF+B,CAI/B;;AACA,SAAO,CAAC,CAAC,CAAC,KAAF,CAAQ,MAAR,IAAkB,GAAlB,GAAwB,EAAzB,IAA+B,aAAtC;AACD;;AAEK,SAAU,WAAV,CAAyB,EAAzB,EAAoD,EAApD,EAA2F;AAC/F,MAAI,2BAAa,EAAb,CAAJ,EAAsB;AACpB,WAAO,OAAO,WAAW,CAAC,EAAE,CAAC,GAAJ,EAAS,EAAT,CAAlB,GAAiC,GAAxC;AACD,GAFD,MAEO,IAAI,2BAAa,EAAb,CAAJ,EAAsB;AAC3B,WAAO,MAAM,EAAE,CAAC,GAAH,CAAO,GAAP,CAAY,GAAD,IAAgC,WAAW,CAAC,GAAD,EAAM,EAAN,CAAtD,EAAiE,IAAjE,CAAsE,QAAtE,CAAN,GAAwF,GAA/F;AACD,GAFM,MAEA,IAAI,0BAAY,EAAZ,CAAJ,EAAqB;AAC1B,WAAO,MAAM,EAAE,CAAC,EAAH,CAAM,GAAN,CAAW,EAAD,IAA+B,WAAW,CAAC,EAAD,EAAK,EAAL,CAApD,EAA8D,IAA9D,CAAmE,QAAnE,CAAN,GAAqF,GAA5F;AACD,GAFM,MAEA;AACL,WAAO,EAAE,CAAC,EAAD,CAAT;AACD;AACF;AAED;;;;;AAGM,SAAU,oBAAV,CAA+B,GAA/B,EAAyC,YAAzC,EAA+D;AACnE,MAAI,YAAY,CAAC,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,WAAO,IAAP;AACD;;AACD,QAAM,IAAI,GAAG,YAAY,CAAC,KAAb,EAAb,CAJmE,CAI/B;;AACpC,MAAI,IAAI,IAAI,GAAR,IAAe,oBAAoB,CAAC,GAAG,CAAC,IAAD,CAAJ,EAAY,YAAZ,CAAvC,EAAkE;AAChE,WAAO,GAAG,CAAC,IAAD,CAAV;AACD;;AACD,SAAO,OAAO,CAAC,GAAD,CAAd;AACD;;AAEK,SAAU,SAAV,CAAoB,CAApB,EAA6B;AACjC,SAAO,CAAC,CAAC,MAAF,CAAS,CAAT,EAAY,WAAZ,KAA4B,CAAC,CAAC,MAAF,CAAS,CAAT,CAAnC;AACD;AAED;;;;;;;AAKM,SAAU,mBAAV,CAA8B,IAA9B,EAA4C,KAAK,GAAG,OAApD,EAA2D;AAC/D,QAAM,MAAM,GAAG,+BAAgB,IAAhB,CAAf;AACA,QAAM,QAAQ,GAAG,EAAjB;;AACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,IAAI,MAAM,CAAC,MAA5B,EAAoC,CAAC,EAArC,EAAyC;AACvC,UAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAP,CAAa,CAAb,EAAgB,CAAhB,EAAmB,GAAnB,CAAuB,qBAAvB,EAAoC,IAApC,CAAyC,IAAzC,CAA8C,GAAjE;AACA,IAAA,QAAQ,CAAC,IAAT,CAAc,GAAG,KAAK,GAAG,MAAM,EAA/B;AACD;;AACD,SAAO,QAAQ,CAAC,IAAT,CAAc,MAAd,CAAP;AACD;AAED;;;;;;;;AAMM,SAAU,mBAAV,CAA8B,IAA9B,EAA4C,KAAA,GAA4C,OAAxF,EAA+F;AACnG,SAAO,GAAG,KAAK,IAAI,2BAAY,+BAAgB,IAAhB,EAAsB,IAAtB,CAA2B,GAA3B,CAAZ,CAA4C,GAA/D;AACD;;AAED,SAAS,gBAAT,CAA0B,MAA1B,EAAwC;AACtC,SAAO,MAAM,CAAC,OAAP,CAAe,iBAAf,EAAkC,MAAlC,CAAP;AACD;AAED;;;;;;AAIM,SAAU,kBAAV,CAA6B,IAA7B,EAAyC;AAC7C,SAAO,GAAG,+BAAgB,IAAhB,EAAsB,GAAtB,CAA0B,gBAA1B,EAA4C,IAA5C,CAAiD,KAAjD,CAAuD,EAAjE;AACD;AAED;;;;;;;;;AAOM,SAAU,UAAV,CAAqB,MAArB,EAAqC,IAArC,EAAmD,WAAnD,EAAsE;AAC1E,SAAO,MAAM,CAAC,OAAP,CAAe,IAAI,MAAJ,CAAW,IAAI,CAAC,OAAL,CAAa,uBAAb,EAAsC,MAAtC,CAAX,EAA0D,GAA1D,CAAf,EAA+E,WAA/E,CAAP;AACD;AAED;;;;;;AAIM,SAAU,mBAAV,CAA8B,IAA9B,EAA0C;AAC9C,SAAO,GAAG,+BAAgB,IAAhB,EAAsB,IAAtB,CAA2B,GAA3B,CAA+B,EAAzC;AACD;AAED;;;;;AAGM,SAAU,eAAV,CAA0B,IAA1B,EAAsC;AAC1C,MAAI,CAAC,IAAL,EAAW;AACT,WAAO,CAAP;AACD;;AACD,SAAO,+BAAgB,IAAhB,EAAsB,MAA7B;AACD;AAED;;;;;AAGM,SAAU,eAAV,CAA6B,GAAG,IAAhC,EAAkD;AACtD,OAAK,MAAM,GAAX,IAAkB,IAAlB,EAAwB;AACtB,QAAI,GAAG,KAAK,SAAZ,EAAuB;AACrB,aAAO,GAAP;AACD;AACF;;AACD,SAAO,SAAP;AACD,EAED;;;AACA,IAAI,SAAS,GAAG,EAAhB;AAEA;;;;;;AAKM,SAAU,QAAV,CAAmB,MAAnB,EAAkC;AACtC,QAAM,EAAE,GAAG,EAAE,SAAb;AACA,SAAO,MAAM,GAAG,MAAM,CAAC,MAAD,CAAN,GAAiB,EAApB,GAAyB,EAAtC;AACD;AAED;;;;;AAGM,SAAU,cAAV,GAAwB;AAC5B,EAAA,SAAS,GAAG,EAAZ;AACD;;AAEK,SAAU,aAAV,CAAwB,IAAxB,EAAoC;AACxC,SAAO,eAAe,CAAC,IAAD,CAAf,GAAwB,IAAxB,GAA+B,KAAK,IAAI,EAA/C;AACD;;AAEK,SAAU,eAAV,CAA0B,IAA1B,EAAsC;AAC1C,SAAO,IAAI,CAAC,OAAL,CAAa,IAAb,MAAuB,CAA9B;AACD;AAED;;;;;AAGM,SAAU,cAAV,CAAyB,KAAzB,EAAsC;AAC1C,MAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,WAAO,SAAP;AACD;;AACD,SAAO,CAAE,KAAK,GAAG,GAAT,GAAgB,GAAjB,IAAwB,GAA/B;AACD;AAED;;;;;AAGM,SAAU,SAAV,CAAoB,KAApB,EAA0C;AAC9C,MAAI,wBAAS,KAAT,CAAJ,EAAqB;AACnB,WAAO,IAAP;AACD;;AACD,SAAO,CAAC,KAAK,CAAC,KAAD,CAAN,IAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,KAAD,CAAX,CAArC;AACD;;;;;;;;;;;ACpYD;;AAsIO,MAAM,2BAA2B,GAMpC;AACF,EAAA,WAAW,EAAE;AACX,IAAA,IAAI,EAAE,QADK;AAEX,IAAA,MAAM,EAAE;AAFG,GADX;AAKF,EAAA,UAAU,EAAE;AACV,IAAA,IAAI,EAAE,QADI;AAEV,IAAA,MAAM,EAAE;AAFE,GALV;AASF,EAAA,aAAa,EAAE;AACb,IAAA,IAAI,EAAE,QADO;AAEb,IAAA,MAAM,EAAE;AAFK,GATb;AAaF,EAAA,UAAU,EAAE;AACV,IAAA,IAAI,EAAE,QADI;AAEV,IAAA,MAAM,EAAE;AAFE,GAbV;AAiBF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,QADG;AAET,IAAA,MAAM,EAAE;AAFC,GAjBT;AAqBF,EAAA,aAAa,EAAE;AACb,IAAA,IAAI,EAAE,QADO;AAEb,IAAA,MAAM,EAAE;AAFK,GArBb;AAyBF,EAAA,cAAc,EAAE;AACd,IAAA,IAAI,EAAE,QADQ;AAEd,IAAA,MAAM,EAAE;AAFM,GAzBd;AA6BF,EAAA,eAAe,EAAE;AACf,IAAA,IAAI,EAAE,QADS;AAEf,IAAA,MAAM,EAAE;AAFO,GA7Bf;AAiCF,EAAA,YAAY,EAAE;AACZ,IAAA,IAAI,EAAE,QADM;AAEZ,IAAA,MAAM,EAAE;AAFI,GAjCZ;AAqCF,EAAA,WAAW,EAAE,IArCX;AAsCF,EAAA,YAAY,EAAE,IAtCZ;AAuCF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,MADG;AAET,IAAA,MAAM,EAAE;AAFC,GAvCT;AA2CF,EAAA,QAAQ,EAAE;AACR,IAAA,IAAI,EAAE,MADE;AAER,IAAA,MAAM,EAAE;AAFA,GA3CR;AA+CF,EAAA,cAAc,EAAE;AACd,IAAA,IAAI,EAAE,MADQ;AAEd,IAAA,MAAM,EAAE;AAFM,GA/Cd;AAmDF,EAAA,WAAW,EAAE;AACX,IAAA,IAAI,EAAE,MADK;AAEX,IAAA,MAAM,EAAE;AAFG,GAnDX;AAuDF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,MADG;AAET,IAAA,MAAM,EAAE;AAFC,GAvDT;AA2DF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,OADG;AAET,IAAA,MAAM,EAAE;AAFC,GA3DT;AA+DF,EAAA,QAAQ,EAAE;AACR,IAAA,IAAI,EAAE,OADE;AAER,IAAA,MAAM,EAAE;AAFA,GA/DR;AAmEF,EAAA,cAAc,EAAE;AACd,IAAA,IAAI,EAAE,OADQ;AAEd,IAAA,MAAM,EAAE;AAFM,GAnEd;AAuEF,EAAA,WAAW,EAAE;AACX,IAAA,IAAI,EAAE,OADK;AAEX,IAAA,MAAM,EAAE;AAFG,GAvEX;AA2EF,EAAA,QAAQ,EAAE,IA3ER;AA4EF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,OADG;AAET,IAAA,MAAM,EAAE;AAFC,GA5ET;AAgFF,EAAA,UAAU,EAAE;AACV,IAAA,IAAI,EAAE,OADI;AAEV,IAAA,MAAM,EAAE;AAFE,GAhFV;AAoFF,EAAA,KAAK,EAAE,IApFL,CAoFU;;AApFV,CANG;;;AAiGD,SAAU,sBAAV,CAA6D,CAA7D,EAAmE;AACvE,SAAO,CAAC,IAAI,CAAC,CAAC,WAAD,CAAb;AACD;;AAgEM,MAAM,UAAU,GAAe,CAAC,QAAD,EAAW,MAAX,EAAmB,QAAnB,EAA6B,OAA7B,EAAsC,OAAtC,CAA/B;AAEP;;;;;AAGO,MAAM,kBAAkB,GAAmD;AAChF,EAAA,IAAI,EAAE,MAD0E;AAEhF,EAAA,OAAO,EAAE,MAFuE;AAGhF,EAAA,SAAS,EAAE,MAHqE;AAIhF,EAAA,QAAQ,EAAE,MAJsE;AAKhF,EAAA,cAAc,EAAE,MALgE;AAMhF,EAAA,WAAW,EAAE,MANmE;AAOhF,EAAA,SAAS,EAAE,MAPqE;AAQhF,EAAA,SAAS,EAAE,MARqE;AAUhF,EAAA,MAAM,EAAE,MAVwE;AAYhF,EAAA,YAAY,EAAE,MAZkE;AAchF,EAAA,IAAI,EAAE,MAd0E;AAehF,EAAA,WAAW,EAAE,MAfmE;AAgBhF,EAAA,MAAM,EAAE,MAhBwE;AAiBhF,EAAA,SAAS,EAAE,MAjBqE;AAkBhF,EAAA,WAAW,EAAE,MAlBmE;AAmBhF,EAAA,UAAU,EAAE,MAnBoE;AAoBhF,EAAA,gBAAgB,EAAE,MApB8D;AAqBhF,EAAA,aAAa,EAAE,MArBiE;AAsBhF,EAAA,WAAW,EAAE,MAtBmE;AAuBhF,EAAA,MAAM,EAAE,MAvBwE;AAwBhF,EAAA,UAAU,EAAE,MAxBoE;AAyBhF,EAAA,UAAU,EAAE,MAzBoE;AA0BhF,EAAA,UAAU,EAAE,MA1BoE;AA2BhF,EAAA,aAAa,EAAE,MA3BiE;AA4BhF,EAAA,UAAU,EAAE,MA5BoE;AA6BhF,EAAA,UAAU,EAAE,MA7BoE;AA8BhF,EAAA,UAAU,EAAE,MA9BoE;AA+BhF,EAAA,gBAAgB,EAAE,MA/B8D;AAgChF,EAAA,SAAS,EAAE,MAhCqE;AAiChF,EAAA,aAAa,EAAE,MAjCiE;AAkChF,EAAA,cAAc,EAAE,MAlCgE;AAmChF,EAAA,eAAe,EAAE,MAnC+D;AAoChF,EAAA,UAAU,EAAE,MApCoE;AAqChF,EAAA,eAAe,EAAE,MArC+D;AAsChF,EAAA,WAAW,EAAE,MAtCmE;AAuChF,EAAA,YAAY,EAAE,MAvCkE;AAwChF,EAAA,YAAY,EAAE,MAxCkE;AAyChF,EAAA,YAAY,EAAE,MAzCkE;AA0ChF,EAAA,MAAM,EAAE,MA1CwE;AA2ChF,EAAA,eAAe,EAAE,MA3C+D;AA4ChF,EAAA,SAAS,EAAE,MA5CqE;AA6ChF,EAAA,SAAS,EAAE,MA7CqE;AA8ChF,EAAA,MAAM,EAAE,MA9CwE;AA+ChF,EAAA,QAAQ,EAAE,MA/CsE;AAgDhF,EAAA,OAAO,EAAE,MAhDuE;AAiDhF,EAAA,SAAS,EAAE,MAjDqE;AAkDhF,EAAA,QAAQ,EAAE,MAlDsE;AAmDhF,EAAA,cAAc,EAAE,MAnDgE;AAoDhF,EAAA,WAAW,EAAE,MApDmE;AAqDhF,EAAA,UAAU,EAAE,MArDoE;AAsDhF,EAAA,WAAW,EAAE,MAtDmE;AAuDhF,EAAA,SAAS,EAAE,MAvDqE;AAwDhF,EAAA,KAAK,EAAE,MAxDyE;AAyDhF,EAAA,QAAQ,EAAE,MAzDsE;AA0DhF,EAAA,SAAS,EAAE,MA1DqE;AA2DhF,EAAA,KAAK,EAAE,MA3DyE;AA4DhF,EAAA,UAAU,EAAE,MA5DoE;AA6DhF,EAAA,WAAW,EAAE,MA7DmE;AA8DhF,EAAA,UAAU,EAAE,MA9DoE;AA+DhF,EAAA,aAAa,EAAE,MA/DiE;AAgEhF,EAAA,UAAU,EAAE,MAhEoE;AAiEhF,EAAA,SAAS,EAAE,MAjEqE;AAkEhF,EAAA,aAAa,EAAE,MAlEiE;AAmEhF,EAAA,cAAc,EAAE,MAnEgE;AAoEhF,EAAA,eAAe,EAAE,MApE+D;AAqEhF,EAAA,UAAU,EAAE,MArEoE;AAsEhF,EAAA,eAAe,EAAE,MAtE+D;AAuEhF,EAAA,YAAY,EAAE,MAvEkE;AAwEhF,EAAA,YAAY,EAAE,MAxEkE;AAyEhF,EAAA,MAAM,EAAE,MAzEwE;AA0EhF,EAAA,MAAM,EAAE,MA1EwE;AA4EhF,EAAA,MAAM,EAAE,MA5EwE;AA6EhF,EAAA,KAAK,EAAE,MA7EyE;AA8EhF,EAAA,QAAQ,EAAE,MA9EsE;AA+EhF,EAAA,SAAS,EAAE,MA/EqE;AAgFhF,EAAA,SAAS,EAAE,MAhFqE;AAiFhF,EAAA,SAAS,EAAE,MAjFqE;AAkFhF,EAAA,MAAM,EAAE,MAlFwE;AAmFhF,EAAA,MAAM,EAAE,MAnFwE,CAmFjE;;AAnFiE,CAA3E;;AAsHA,MAAM,4BAA4B,GAAgC;AACvE,EAAA,MAAM,EAAE,CAD+D;AAGvE,EAAA,IAAI,EAAE,CAHiE;AAIvE,EAAA,YAAY,EAAE,CAJyD;AAKvE,EAAA,WAAW,EAAE,CAL0D;AAMvE,EAAA,MAAM,EAAE,CAN+D;AAOvE,EAAA,SAAS,EAAE,CAP4D;AAQvE,EAAA,WAAW,EAAE,CAR0D;AASvE,EAAA,UAAU,EAAE,CAT2D;AAUvE,EAAA,gBAAgB,EAAE,CAVqD;AAWvE,EAAA,aAAa,EAAE,CAXwD;AAYvE,EAAA,WAAW,EAAE,CAZ0D;AAavE,EAAA,MAAM,EAAE,CAb+D;AAcvE,EAAA,UAAU,EAAE,CAd2D;AAevE,EAAA,IAAI,EAAE,CAfiE;AAgBvE,EAAA,OAAO,EAAE,CAhB8D;AAiBvE,EAAA,SAAS,EAAE,CAjB4D;AAkBvE,EAAA,QAAQ,EAAE,CAlB6D;AAmBvE,EAAA,cAAc,EAAE,CAnBuD;AAoBvE,EAAA,WAAW,EAAE,CApB0D;AAqBvE,EAAA,SAAS,EAAE,CArB4D;AAsBvE,EAAA,UAAU,EAAE,CAtB2D;AAuBvE,EAAA,UAAU,EAAE,CAvB2D;AAwBvE,EAAA,aAAa,EAAE,CAxBwD;AAyBvE,EAAA,UAAU,EAAE,CAzB2D;AA0BvE,EAAA,UAAU,EAAE,CA1B2D;AA2BvE,EAAA,UAAU,EAAE,CA3B2D;AA4BvE,EAAA,gBAAgB,EAAE,CA5BqD;AA6BvE,EAAA,SAAS,EAAE,CA7B4D;AA8BvE,EAAA,aAAa,EAAE,CA9BwD;AA+BvE,EAAA,cAAc,EAAE,CA/BuD;AAgCvE,EAAA,eAAe,EAAE,CAhCsD;AAiCvE,EAAA,UAAU,EAAE,CAjC2D;AAkCvE,EAAA,eAAe,EAAE,CAlCsD;AAmCvE,EAAA,WAAW,EAAE,CAnC0D;AAoCvE,EAAA,YAAY,EAAE,CApCyD;AAqCvE,EAAA,YAAY,EAAE,CArCyD;AAsCvE,EAAA,YAAY,EAAE,CAtCyD;AAuCvE,EAAA,MAAM,EAAE,CAvC+D;AAwCvE,EAAA,eAAe,EAAE,CAxCsD;AAyCvE,EAAA,SAAS,EAAE,CAzC4D;AA0CvE,EAAA,SAAS,EAAE,CA1C4D;AA2CvE,EAAA,MAAM,EAAE,CA3C+D;AA4CvE,EAAA,QAAQ,EAAE,CA5C6D;AA6CvE,EAAA,QAAQ,EAAE,CA7C6D;AA8CvE,EAAA,OAAO,EAAE,CA9C8D;AA+CvE,EAAA,SAAS,EAAE,CA/C4D;AAgDvE,EAAA,SAAS,EAAE,CAhD4D;AAiDvE,EAAA,QAAQ,EAAE,CAjD6D;AAkDvE,EAAA,cAAc,EAAE,CAlDuD;AAmDvE,EAAA,SAAS,EAAE,CAnD4D;AAoDvE,EAAA,WAAW,EAAE,CApD0D;AAqDvE,EAAA,UAAU,EAAE,CArD2D;AAsDvE,EAAA,WAAW,EAAE,CAtD0D;AAuDvE,EAAA,SAAS,EAAE,CAvD4D;AAwDvE,EAAA,KAAK,EAAE,CAxDgE;AAyDvE,EAAA,QAAQ,EAAE,CAzD6D;AA0DvE,EAAA,SAAS,EAAE,CA1D4D;AA2DvE,EAAA,KAAK,EAAE,CA3DgE;AA4DvE,EAAA,UAAU,EAAE,CA5D2D;AA6DvE,EAAA,WAAW,EAAE,CA7D0D;AA8DvE,EAAA,UAAU,EAAE,CA9D2D;AA+DvE,EAAA,aAAa,EAAE,CA/DwD;AAgEvE,EAAA,UAAU,EAAE,CAhE2D;AAiEvE,EAAA,SAAS,EAAE,CAjE4D;AAkEvE,EAAA,aAAa,EAAE,CAlEwD;AAmEvE,EAAA,cAAc,EAAE,CAnEuD;AAoEvE,EAAA,eAAe,EAAE,CApEsD;AAqEvE,EAAA,UAAU,EAAE,CArE2D;AAsEvE,EAAA,eAAe,EAAE,CAtEsD;AAuEvE,EAAA,YAAY,EAAE,CAvEyD;AAwEvE,EAAA,YAAY,EAAE,CAxEyD;AAyEvE,EAAA,MAAM,EAAE,CAzE+D;AA0EvE,EAAA,MAAM,EAAE,CA1E+D;AA2EvE,EAAA,SAAS,EAAE,CA3E4D;AA4EvE,EAAA,MAAM,EAAE,CA5E+D;AA6EvE,EAAA,MAAM,EAAE;AA7E+D,CAAlE;;AAgFP,MAAM,qBAAqB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACtB,4BADsB,CAAA,EACM;AAC/B,EAAA,KAAK,EAAE,CADwB;AAE/B,EAAA,SAAS,EAAE,CAFoB;AAG/B,EAAA,QAAQ,EAAE;AAHqB,CADN,CAA3B;;AAOM,SAAU,cAAV,CAAyB,IAAzB,EAAqC;AACzC,SAAO,CAAC,CAAC,qBAAqB,CAAC,IAAD,CAA9B;AACD,EAED;;;AACO,MAAM,eAAe,GAAG,gBAAK,qBAAL,CAAxB;;;;;;;;;;;;;;;;ACjhBP;;AAEA;;AAEA;;;AAGO,MAAM,IAAI,GAAG;AAClB,EAAA,GAAG,EAAE,KADa;AAElB,EAAA,IAAI,EAAE,MAFY;AAGlB,EAAA,GAAG,EAAE,KAHa;AAIlB,EAAA,KAAK,EAAE,OAJW;AAKlB,EAAA,IAAI,EAAE,MALY;AAMlB,EAAA,KAAK,EAAE,OANW;AAOlB,EAAA,IAAI,EAAE,MAPY;AAQlB,EAAA,IAAI,EAAE,MARY;AASlB,EAAA,IAAI,EAAE,MATY;AAUlB,EAAA,IAAI,EAAE,MAVY;AAWlB,EAAA,KAAK,EAAE,OAXW;AAYlB,EAAA,MAAM,EAAE,QAZU;AAalB,EAAA,MAAM,EAAE,QAbU;AAclB,EAAA,QAAQ,EAAE;AAdQ,CAAb;;AAiBA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAjB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAjB;;AACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAnB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAnB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAlB;;AACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAnB;;AACA,MAAM,MAAM,GAAG,IAAI,CAAC,MAApB;;AACA,MAAM,MAAM,GAAG,IAAI,CAAC,MAApB;;AACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAtB;;;AAID,SAAU,MAAV,CAAiB,CAAjB,EAA0B;AAC9B,SAAO,CAAC,IAAI,IAAZ;AACD;;AAEK,SAAU,UAAV,CAAqB,CAArB,EAA4C;AAChD,SAAO,oBAAS,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,CAAT,EAAoC,CAApC,CAAP;AACD;;AAEK,SAAU,eAAV,CAA0B,CAA1B,EAAiD;AACrD,SAAO,oBAAS,CAAC,MAAD,EAAS,KAAT,EAAgB,OAAhB,EAAyB;AAAM;AAA/B,GAAT,EAAyF,CAAzF,CAAP;AACD;;AAEM,MAAM,eAAe,GAAG,gBAAK,IAAL,CAAxB;;;AAwOD,SAAU,SAAV,CAAoB,IAApB,EAAsD;AAC1D,SAAO,IAAI,CAAC,MAAD,CAAX;AACD;;AAED,MAAM,oBAAoB,GAAG,qBAAM,eAAN,CAA7B;;AAEM,SAAU,eAAV,CAA0B,IAA1B,EAAuC;AAC3C,QAAM,QAAQ,GAAG,SAAS,CAAC,IAAD,CAAT,GAAkB,IAAI,CAAC,IAAvB,GAA8B,IAA/C;AACA,SAAO,QAAQ,IAAI,oBAAnB;AACD;;AAEM,MAAM,aAAa,GAAG,CAC3B,QAD2B,EAE3B,aAF2B,EAG3B,YAH2B,EAI3B,kBAJ2B,EAK3B,eAL2B,EAM3B,YAN2B,EAO3B,kBAP2B,CAAtB;;AAUA,MAAM,WAAW,GAAG,CAAC,MAAD,EAAS,aAAT,CAApB;;AAEA,MAAM,kBAAkB,GAAG,CAAC,GAAG,aAAJ,EAAmB,GAAG,WAAtB,CAA3B;;AAEP,MAAM,yBAAyB,GAAiC;AAC9D,EAAA,KAAK,EAAE,CADuD;AAE9D,EAAA,MAAM,EAAE,CAFsD;AAG9D,EAAA,OAAO,EAAE,CAHqD;AAI9D,EAAA,KAAK,EAAE,CAJuD;AAK9D,EAAA,OAAO,EAAE,CALqD;AAM9D,EAAA,MAAM,EAAE,CANsD;AAO9D,EAAA,YAAY,EAAE,CAPgD;AAQ9D,EAAA,oBAAoB,EAAE;AARwC,CAAhE;AAWO,MAAM,8BAA8B,GAAG,gBAAK,yBAAL,CAAvC;;AAEA,MAAM,2CAA2C,GAEpD;AACF,EAAA,IAAI,EAAE,CAAC,MAAD,EAAS,OAAT,CADJ;AAEF,EAAA,GAAG,EAAE,CAAC,YAAD,EAAe,oBAAf,EAAqC,kBAArC,CAFH;AAGF,EAAA,IAAI,EAAE,CAAC,YAAD,EAAe,oBAAf,EAAqC,kBAArC,CAHJ;AAIF,EAAA,IAAI,EAAE,CAAC,OAAD,CAJJ;AAKF,EAAA,IAAI,EAAE,CAAC,UAAD,EAAa,WAAb;AALJ,CAFG;;AAUA,MAAM,iBAAiB,GAAe;AAC3C,EAAA,KAAK,EAAE,SADoC;AAE3C,EAAA,OAAO,EAAE,QAFkC;AAG3C,EAAA,YAAY,EAAE;AAH6B,CAAtC;;AA2EA,MAAM,uBAAuB,GAG/B;AACH,EAAA,UAAU,EAAE,CAAC,sBAAD,EAAyB,yBAAzB,CADT;AAEH,EAAA,QAAQ,EAAE,CAAC,qBAAD,EAAwB,sBAAxB;AAFP,CAHE;;AA6JP,MAAM,sBAAsB,GAAG,CAA/B;AAEO,MAAM,gBAAgB,GAAe;AAC1C,EAAA,UAAU,EAAE,CAD8B;AAE1C,EAAA,kBAAkB,EAAE,sBAFsB;AAG1C,EAAA,oBAAoB,EAAE;AAHoB,CAArC;;AAMA,MAAM,iBAAiB,GAAe;AAC3C,EAAA,UAAU,EAAE,CAD+B;AAE3C,EAAA,kBAAkB,EAAE,sBAFuB;AAG3C,EAAA,oBAAoB,EAAE;AAHqB,CAAtC;;AAgBA,MAAM,iBAAiB,GAAe;AAC3C,EAAA,SAAS,EAAE;AADgC,CAAtC;;;AAID,SAAU,WAAV,CAAsB,CAAtB,EAAqD;AACzD,SAAO,SAAS,CAAC,CAAD,CAAT,GAAe,CAAC,CAAC,IAAjB,GAAwB,CAA/B;AACD;;;;;;;;;ACnhBK,SAAU,UAAV,CAAqB,IAArB,EAAmC;AACvC,SAAO,UAAU,IAAjB;AACD;;;;;;;;;AClED;;AAIA;;AAMM,MAAO,uBAAP,CAA8B;AAClC,EAAA,WAAA,CACS,IADT,EAES,GAFT,EAW+C;AAVtC,SAAA,IAAA,GAAA,IAAA;AACA,SAAA,GAAA,GAAA,GAAA;AAUL;;AAEG,EAAA,eAAe,CAAC,IAAD,EAAsC;AAC1D,QAAI,sBAAW,IAAX,CAAJ,EAAsB;AACpB,aAAO,uBAAY,IAAI,CAAC,IAAjB,MAA2B,KAAK,IAAvC;AACD;;AACD,WAAO,KAAP;AACD;;AApBiC;;;;;;;;;;;;;;;;ACVpC;;AACA;;AAEA,MAAM,kBAAkB,GAAsB;AAC5C,EAAA,MAAM,EAAE,CADoC;AAE5C,EAAA,MAAM,EAAE,CAFoC;AAG5C,EAAA,OAAO,EAAE,CAHmC;AAI5C,EAAA,KAAK,EAAE,CAJqC;AAK5C,EAAA,QAAQ,EAAE,CALkC;AAM5C,EAAA,OAAO,EAAE,CANmC;AAO5C,EAAA,GAAG,EAAE,CAPuC;AAQ5C,EAAA,IAAI,EAAE,CARsC;AAS5C,EAAA,MAAM,EAAE,CAToC;AAU5C,EAAA,GAAG,EAAE,CAVuC;AAW5C,EAAA,OAAO,EAAE,CAXmC;AAY5C,EAAA,EAAE,EAAE,CAZwC;AAa5C,EAAA,EAAE,EAAE,CAbwC;AAc5C,EAAA,GAAG,EAAE,CAduC;AAe5C,EAAA,GAAG,EAAE,CAfuC;AAgB5C,EAAA,MAAM,EAAE,CAhBoC;AAiB5C,EAAA,KAAK,EAAE,CAjBqC;AAkB5C,EAAA,MAAM,EAAE,CAlBoC;AAmB5C,EAAA,GAAG,EAAE,CAnBuC;AAoB5C,EAAA,KAAK,EAAE,CApBqC;AAqB5C,EAAA,MAAM,EAAE,CArBoC;AAsB5C,EAAA,QAAQ,EAAE,CAtBkC;AAuB5C,EAAA,SAAS,EAAE;AAvBiC,CAA9C;AA0BO,MAAM,yBAAyB,GAAG;AACvC,EAAA,KAAK,EAAE,CADgC;AAEvC,EAAA,GAAG,EAAE,CAFkC;AAGvC,EAAA,GAAG,EAAE;AAHkC,CAAlC;;;AAkBD,SAAU,WAAV,CAAsB,CAAtB,EAA2C;AAC/C,SAAO,CAAC,CAAC,CAAF,IAAO,CAAC,CAAC,CAAC,CAAC,QAAD,CAAjB;AACD;;AAEK,SAAU,WAAV,CAAsB,CAAtB,EAA2C;AAC/C,SAAO,CAAC,CAAC,CAAF,IAAO,CAAC,CAAC,CAAC,CAAC,QAAD,CAAjB;AACD;;AAEM,MAAM,aAAa,GAAG,gBAAK,kBAAL,CAAtB;;;AAED,SAAU,aAAV,CAAwB,CAAxB,EAAyD;AAC7D,SAAO,wBAAS,CAAT,KAAe,CAAC,CAAC,kBAAkB,CAAC,CAAD,CAA1C;AACD;;AAEM,MAAM,YAAY,GAAwB,CAAC,OAAD,EAAU,OAAV,EAAmB,SAAnB,EAA8B,UAA9B,CAA1C;;;AAED,SAAU,qBAAV,CAAgC,SAAhC,EAA8D;AAClE,SAAO,wBAAS,SAAT,KAAuB,oBAAS,YAAT,EAAuB,SAAvB,CAA9B;AACD;;AAEK,SAAU,UAAV,CAAqB,SAArB,EAAmD;AACvD,SAAO,wBAAS,SAAT,KAAuB,oBAAS,CAAC,KAAD,EAAQ,KAAR,CAAT,EAAyB,SAAzB,CAA9B;AACD;AAED;;;AACO,MAAM,OAAO,GAAwB,CAAC,OAAD,EAAU,KAAV,EAAiB,UAAjB,EAA6B,OAA7B,EAAsC,SAAtC,CAArC;AAEP;;;;;AAGO,MAAM,iBAAiB,GAAkB,CAAC,MAAD,EAAS,SAAT,EAAoB,QAApB,EAA8B,IAA9B,EAAoC,IAApC,EAA0C,KAA1C,EAAiD,KAAjD,CAAzC;;AAEA,MAAM,sBAAsB,GAAG,qBAAM,iBAAN,CAA/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEP;;AATA;;;;AAaA;AACO,MAAM,GAAG,GAAG,KAAZ;;AACA,MAAM,MAAM,GAAG,QAAf;;AAEA,MAAM,KAAK,GAAG,OAAd,EAEP;;;AACO,MAAM,CAAC,GAAG,GAAV;;AACA,MAAM,CAAC,GAAG,GAAV;;AACA,MAAM,EAAE,GAAG,IAAX;;AACA,MAAM,EAAE,GAAG,IAAX,EAEP;;;AACO,MAAM,MAAM,GAAG,QAAf;;AACA,MAAM,OAAO,GAAG,SAAhB;;AACA,MAAM,KAAK,GAAG,OAAd;;AACA,MAAM,MAAM,GAAG,QAAf,EAEP;;;AACO,MAAM,QAAQ,GAAG,UAAjB;;AACA,MAAM,SAAS,GAAG,WAAlB;;AACA,MAAM,SAAS,GAAG,WAAlB;;AACA,MAAM,UAAU,GAAG,YAAnB,EAEP;;;AACO,MAAM,KAAK,GAAG,OAAd;;AAEA,MAAM,IAAI,GAAG,MAAb;;AAEA,MAAM,MAAM,GAAG,QAAf;;AAEA,MAAM,KAAK,GAAG,OAAd;;AACA,MAAM,IAAI,GAAG,MAAb;;AAEA,MAAM,KAAK,GAAG,OAAd;;AAEA,MAAM,OAAO,GAAG,SAAhB;;AACA,MAAM,WAAW,GAAG,aAApB;;AAEA,MAAM,aAAa,GAAG,eAAtB;;AAEA,MAAM,WAAW,GAAG,aAApB;;AACA,MAAM,UAAU,GAAG,YAAnB,EAEP;;;AACO,MAAM,IAAI,GAAG,MAAb;;AACA,MAAM,KAAK,GAAG,OAAd;;AACA,MAAM,MAAM,GAAG,QAAf;;AACA,MAAM,GAAG,GAAG,KAAZ;;AAEA,MAAM,OAAO,GAAG,SAAhB;;AACA,MAAM,IAAI,GAAG,MAAb;;AAEA,MAAM,GAAG,GAAG,KAAZ;;AACA,MAAM,WAAW,GAAG,aAApB;;AAEP,MAAM,sBAAsB,GAAG;AAC7B,EAAA,CAAC,EAAE,CAD0B;AAE7B,EAAA,CAAC,EAAE,CAF0B;AAG7B,EAAA,EAAE,EAAE,CAHyB;AAI7B,EAAA,EAAE,EAAE;AAJyB,CAA/B;AASA,MAAM,4BAA4B,GAAG;AACnC,EAAA,KAAK,EAAE,CAD4B;AAEnC,EAAA,MAAM,EAAE,CAF2B;AAGnC,EAAA,MAAM,EAAE,CAH2B;AAInC,EAAA,OAAO,EAAE;AAJ0B,CAArC;;AASM,SAAU,sBAAV,CAAiC,CAAjC,EAA2C;AAC/C,SAAO,CAAC,IAAI,4BAAZ;AACD;;AAED,MAAM,0BAA0B,GAAG;AACjC,EAAA,SAAS,EAAE,CADsB;AAEjC,EAAA,UAAU,EAAE,CAFqB;AAGjC,EAAA,QAAQ,EAAE,CAHuB;AAIjC,EAAA,SAAS,EAAE;AAJsB,CAAnC;;AASM,SAAU,6BAAV,CAAwC,OAAxC,EAAmE;AACvE,UAAQ,OAAR;AACE,SAAK,QAAL;AACE,aAAO,GAAP;;AACF,SAAK,SAAL;AACE,aAAO,IAAP;;AACF,SAAK,SAAL;AACE,aAAO,GAAP;;AACF,SAAK,UAAL;AACE,aAAO,IAAP;AARJ;AAUD;;AAEK,SAAU,oBAAV,CAA+B,CAA/B,EAAyC;AAC7C,SAAO,CAAC,IAAI,0BAAZ;AACD;;AAEM,MAAM,oBAAoB,GAAG,gBAAK,0BAAL,CAA7B;;AAEP,MAAM,kBAAkB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACnB,sBADmB,CAAA,EAEnB,4BAFmB,CAAA,EAInB,0BAJmB,CAAA,EAIO;AAE7B;AACA,EAAA,KAAK,EAAE,CAHsB;AAI7B,EAAA,IAAI,EAAE,CAJuB;AAK7B,EAAA,MAAM,EAAE,CALqB;AAO7B;AACA,EAAA,OAAO,EAAE,CARoB;AAS7B,EAAA,WAAW,EAAE,CATgB;AAU7B,EAAA,aAAa,EAAE,CAVc;AAY7B,EAAA,WAAW,EAAE,CAZgB;AAa7B,EAAA,UAAU,EAAE,CAbiB;AAc7B,EAAA,IAAI,EAAE,CAduB;AAe7B,EAAA,KAAK,EAAE,CAfsB;AAgB7B,EAAA,KAAK,EAAE,CAhBsB;AAkB7B;AACA,EAAA,KAAK,EAAE,CAnBsB;AAoB7B,EAAA,IAAI,EAAE,CApBuB;AAqB7B,EAAA,MAAM,EAAE,CArBqB;AAsB7B,EAAA,GAAG,EAAE,CAtBwB;AAuB7B,EAAA,OAAO,EAAE,CAvBoB;AAwB7B,EAAA,IAAI,EAAE,CAxBuB;AAyB7B,EAAA,GAAG,EAAE,CAzBwB;AA0B7B,EAAA,WAAW,EAAE;AA1BgB,CAJP,CAAxB;;AAmCM,SAAU,cAAV,CAAyB,OAAzB,EAAyC;AAC7C,SAAO,OAAO,KAAK,KAAZ,IAAqB,OAAO,KAAK,IAAjC,IAAyC,OAAO,KAAK,MAA5D;AACD;;AAID,MAAM,mBAAmB,GAA0C;AACjE,EAAA,GAAG,EAAE,CAD4D;AAEjE,EAAA,MAAM,EAAE,CAFyD;AAGjE,EAAA,KAAK,EAAE;AAH0D,CAAnE;AAMO,MAAM,cAAc,GAAG,gBAAK,mBAAL,CAAvB;;AAEP,MAAM,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACd,kBADc,CAAA,EAEd,mBAFc,CAAnB;AAKO,MAAM,QAAQ,GAAG,gBAAK,aAAL,CAAjB;;AAEP,MAAM;AAAC,EAAA,KAAK,EAAE,EAAR;AAAY,EAAA,MAAM,EAAE,EAApB;AAAwB,EAAA,OAAO,EAAE;AAAjC,IAAsE,aAA5E;AAAA,MAAgD,wBAAwB,GAAA,mBAAI,aAAJ,EAAlE,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAkE,CAAxE;AACA,MAAM;AAAC,EAAA,GAAG,EAAE,EAAN;AAAU,EAAA,MAAM,EAAE,EAAlB;AAAsB,EAAA,KAAK,EAAE;AAA7B,IAAqE,wBAA3E;AAAA,MAA0C,6BAA6B,GAAA,mBAAI,wBAAJ,EAAjE,CAAA,KAAA,EAAA,QAAA,EAAA,OAAA,CAAiE,CAAvE;AACA;;;;;;;;;AASO,MAAM,mBAAmB,GAAG,gBAAK,wBAAL,CAA5B;;AAIA,MAAM,wBAAwB,GAAG,gBAAK,6BAAL,CAAjC;;;AAID,SAAU,sBAAV,CAAiC,GAAjC,EAA4C;AAChD,SAAO,CAAC,CAAC,6BAA6B,CAAC,GAAD,CAAtC;AACD;;AAEK,SAAU,SAAV,CAAoB,GAApB,EAA+B;AACnC,SAAO,CAAC,CAAC,aAAa,CAAC,GAAD,CAAtB;AACD;;AAIM,MAAM,uBAAuB,GAA4B,CAAC,EAAD,EAAK,EAAL,EAAS,SAAT,EAAoB,UAApB,EAAgC,MAAhC,EAAwC,OAAxC,CAAzD;;;AAED,SAAU,uBAAV,CAAkC,CAAlC,EAA4C;AAChD,QAAM,IAAI,GAAG,mBAAmB,CAAC,CAAD,CAAhC;AACA,SAAO,IAAI,KAAK,CAAhB;AACD;AAgBD;;;;;AAGM,SAAU,mBAAV,CAAiD,OAAjD,EAA2D;AAC/D,UAAQ,OAAR;AACE,SAAK,EAAL;AACE,aAAO,CAAP;;AACF,SAAK,EAAL;AACE,aAAO,CAAP;;AACF,SAAK,SAAL;AACE,aAAO,QAAP;;AACF,SAAK,UAAL;AACE,aAAO,SAAP;;AACF,SAAK,MAAL;AACE,aAAO,KAAP;;AACF,SAAK,OAAL;AACE,aAAO,MAAP;AAZJ;;AAcA,SAAO,OAAP;AACD;;AAgBK,SAAU,oBAAV,CAA+B,OAA/B,EAA8E;AAClF,MAAI,sBAAsB,CAAC,OAAD,CAA1B,EAAqC;AACnC,YAAQ,OAAR;AACE,WAAK,KAAL;AACE,eAAO,YAAP;;AACF,WAAK,MAAL;AACE,eAAO,UAAP;;AACF,WAAK,MAAL;AACE,eAAO,aAAP;;AACF,WAAK,OAAL;AACE,eAAO,aAAP;AARJ;AAUD;;AACD,SAAO,OAAP;AACD;AAED;;;;;AAGM,SAAU,wBAAV,CAAsD,OAAtD,EAAgE;AACpE,UAAQ,OAAR;AACE,SAAK,CAAL;AACE,aAAO,EAAP;;AACF,SAAK,CAAL;AACE,aAAO,EAAP;;AACF,SAAK,QAAL;AACE,aAAO,SAAP;;AACF,SAAK,SAAL;AACE,aAAO,UAAP;;AACF,SAAK,KAAL;AACE,aAAO,MAAP;;AACF,SAAK,MAAL;AACE,aAAO,OAAP;AAZJ;;AAcA,SAAO,SAAP;AACD;;AAEK,SAAU,cAAV,CAAyB,OAAzB,EAAyC;AAC7C,UAAQ,OAAR;AACE,SAAK,CAAL;AACA,SAAK,EAAL;AACE,aAAO,OAAP;;AACF,SAAK,CAAL;AACA,SAAK,EAAL;AACE,aAAO,QAAP;AANJ;;AAQA,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,gBAAV,CAA2B,OAA3B,EAA2C;AAC/C,UAAQ,OAAR;AACE,SAAK,CAAL;AACE,aAAO,SAAP;;AACF,SAAK,CAAL;AACE,aAAO,SAAP;;AACF,SAAK,EAAL;AACE,aAAO,UAAP;;AACF,SAAK,EAAL;AACE,aAAO,UAAP;;AACF,SAAK,KAAL;AACE,aAAO,aAAP;;AACF,SAAK,MAAL;AACE,aAAO,cAAP;;AACF,SAAK,MAAL;AACE,aAAO,cAAP;;AACF,SAAK,OAAL;AACE,aAAO,eAAP;AAhBJ;;AAkBA,SAAO,SAAP;AACD,EAED;;;AACO,MAAM,aAAa,GAAG,gBAAK,kBAAL,CAAtB,EAEP;;;AACA,MAAM;AACJ,EAAA,CAAC,EAAE,EADC;AAEJ,EAAA,CAAC,EAAE,EAFC;AAGJ;AACA,EAAA,EAAE,EAAE,GAJA;AAKJ,EAAA,EAAE,EAAE,GALA;AAMJ,EAAA,QAAQ,EAAE,SANN;AAOJ,EAAA,SAAS,EAAE,UAPP;AAQJ,EAAA,SAAS,EAAE,UARP;AASJ,EAAA,UAAU,EAAE,WATR;AAUJ,EAAA,KAAK,EAAE,MAVH;AAWJ,EAAA,MAAM,EAAE,OAXJ;AAYJ,EAAA,MAAM,EAAE,OAZJ;AAaJ,EAAA,OAAO,EAAE;AAbL,IAgBF,kBAhBJ;AAAA,MAcE;AACG,yBAAyB,GAAA,mBAC1B,kBAD0B,EAfxB,CAAA,GAAA,EAAA,GAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAewB,CAf9B;AAkBO,MAAM,oBAAoB,GAAG,gBAAK,yBAAL,CAA7B;;AAGA,MAAM,4BAA4B,GAAG;AAC1C,EAAA,CAAC,EAAE,CADuC;AAE1C,EAAA,CAAC,EAAE;AAFuC,CAArC;;AAIA,MAAM,uBAAuB,GAAG,gBAAK,4BAAL,CAAhC;;;AAGD,SAAU,MAAV,CAAiB,OAAjB,EAAiC;AACrC,SAAO,OAAO,IAAI,4BAAlB;AACD;;AAEM,MAAM,kCAAkC,GAAG;AAChD,EAAA,KAAK,EAAE,CADyC;AAEhD,EAAA,MAAM,EAAE;AAFwC,CAA3C;;AAKA,MAAM,6BAA6B,GAAG,gBAAK,kCAAL,CAAtC;;;AAGD,SAAU,uBAAV,CAAkC,QAAlC,EAA8D;AAClE,SAAO,QAAQ,KAAK,OAAb,GAAuB,CAAvB,GAA2B,CAAlC;AACD,EAED;;;AACA,MAAM;AACJ;AACA;AACA;AACA,EAAA,IAAI,EAAE,EAJF;AAKJ,EAAA,OAAO,EAAE,GALL;AAMJ,EAAA,IAAI,EAAE,GANF;AAOJ,EAAA,GAAG,EAAE,EAPD;AAQJ,EAAA,WAAW,EAAE,GART;AASJ;AACA,EAAA,MAAM,EAAE,GAVJ;AAWJ,EAAA,GAAG,EAAE,EAXD;AAYJ,EAAA,KAAK,EAAE;AAZH,IAcF,yBAdJ;AAAA,MAaK,+BAA+B,GAAA,mBAChC,yBADgC,EAb9B,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,CAa8B,CAbpC;AAeO,MAAM,0BAA0B,GAAG,gBAAK,+BAAL,CAAnC;;;AAGD,SAAU,yBAAV,CAAoC,OAApC,EAAoD;AACxD,SAAO,CAAC,CAAC,yBAAyB,CAAC,OAAD,CAAlC;AACD;AAED;;;;;AAGM,SAAU,aAAV,CAAwB,OAAxB,EAAwD;AAC5D,UAAQ,OAAR;AACE,SAAK,KAAL;AACA,SAAK,IAAL;AACA,SAAK,MAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACA,SAAK,OAAL;AACA,SAAK,WAAL;AACA,SAAK,UAAL;AACE,aAAO,IAAP;;AACF,SAAK,WAAL;AACA,SAAK,aAAL;AACA,SAAK,KAAL;AACE,aAAO,KAAP;AAbJ;AAeD,EAED;;;AACA,MAAM,mBAAmB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACpB,4BADoB,CAAA,EAEpB,kCAFoB,CAAA,EAGpB,+BAHoB,CAAzB;AAMA;;AACO,MAAM,cAAc,GAAG,gBAAK,mBAAL,CAAvB;;;AAGD,SAAU,cAAV,CAAyB,OAAzB,EAAyC;AAC7C,SAAO,CAAC,CAAC,mBAAmB,CAAC,OAAD,CAA5B;AACD;AAID;;;;;;;;AAMM,SAAU,WAAV,CAAsB,OAAtB,EAAwC,IAAxC,EAAkD;AACtD,SAAO,gBAAgB,CAAC,OAAD,CAAhB,CAA0B,IAA1B,CAAP;AACD;;AAED,MAAM,SAAS,GAA2B;AACxC;AACA,EAAA,GAAG,EAAE,QAFmC;AAGxC,EAAA,IAAI,EAAE,QAHkC;AAIxC,EAAA,GAAG,EAAE,QAJmC;AAKxC,EAAA,MAAM,EAAE,QALgC;AAMxC,EAAA,QAAQ,EAAE,QAN8B;AAOxC,EAAA,KAAK,EAAE,QAPiC;AAQxC,EAAA,IAAI,EAAE,QARkC;AASxC,EAAA,IAAI,EAAE,QATkC;AAUxC,EAAA,KAAK,EAAE,QAViC;AAWxC,EAAA,IAAI,EAAE,QAXkC;AAYxC,EAAA,MAAM,EAAE,QAZgC;AAaxC,EAAA,KAAK,EAAE,QAbiC;AAcxC,EAAA,IAAI,EAAE,QAdkC;AAexC,EAAA,IAAI,EAAE;AAfkC,CAA1C;AAkBA,MAAM;AAAC,EAAA,QAAQ,EAAE;AAAX,IAA+C,SAArD;AAAA,MAAwB,yBAAyB,GAAA,mBAAI,SAAJ,EAA3C,CAAA,UAAA,CAA2C,CAAjD;AAEA;;;;;;AAKA,SAAS,gBAAT,CAA0B,OAA1B,EAA0C;AACxC,UAAQ,OAAR;AACE,SAAK,KAAL;AACA,SAAK,IAAL;AACA,SAAK,MAAL,CAHF,CAIE;;AAEA,SAAK,WAAL;AACA,SAAK,MAAL;AACA,SAAK,GAAL;AACA,SAAK,OAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL,CAXF,CAWc;;AACZ,SAAK,OAAL;AACA,SAAK,WAAL;AACA,SAAK,aAAL;AACA,SAAK,WAAL,CAfF,CAiBE;;AAEA,SAAK,KAAL;AACA,SAAK,GAAL,CApBF,CAoBY;;AACV,SAAK,MAAL;AACE,aAAO,SAAP;;AACF,SAAK,CAAL;AACA,SAAK,CAAL;AACA,SAAK,QAAL;AACA,SAAK,SAAL;AACE;AACA,aAAO,yBAAP;;AACF,SAAK,EAAL;AACA,SAAK,EAAL;AACA,SAAK,SAAL;AACA,SAAK,UAAL;AACE,aAAO;AACL,QAAA,IAAI,EAAE,QADD;AAEL,QAAA,GAAG,EAAE,QAFA;AAGL,QAAA,KAAK,EAAE,QAHF;AAIL,QAAA,IAAI,EAAE,QAJD;AAKL,QAAA,IAAI,EAAE,QALD;AAML,QAAA,MAAM,EAAE,QANH;AAOL,QAAA,KAAK,EAAE,QAPF;AAQL,QAAA,MAAM,EAAE,QARH;AASL,QAAA,IAAI,EAAE,QATD;AAUL,QAAA,IAAI,EAAE,QAVD;AAWL,QAAA,KAAK,EAAE;AAXF,OAAP;;AAaF,SAAK,IAAL;AACE,aAAO;AACL,QAAA,KAAK,EAAE,QADF;AAEL,QAAA,IAAI,EAAE,QAFD;AAGL,QAAA,IAAI,EAAE,QAHD;AAIL,QAAA,MAAM,EAAE,QAJH;AAKL,QAAA,MAAM,EAAE,QALH;AAML,QAAA,GAAG,EAAE,QANA;AAOL,QAAA,IAAI,EAAE,QAPD;AAQL,QAAA,IAAI,EAAE,QARD;AASL,QAAA,KAAK,EAAE;AATF,OAAP;;AAWF,SAAK,UAAL;AACE,aAAO;AACL,QAAA,IAAI,EAAE,QADD;AAEL,QAAA,KAAK,EAAE,QAFF;AAGL,QAAA,IAAI,EAAE,QAHD;AAIL,QAAA,IAAI,EAAE,QAJD;AAKL,QAAA,MAAM,EAAE,QALH;AAML,QAAA,MAAM,EAAE,QANH;AAOL,QAAA,GAAG,EAAE,QAPA;AAQL,QAAA,QAAQ,EAAE;AARL,OAAP;;AAUF,SAAK,KAAL;AACE,aAAO;AAAC,QAAA,KAAK,EAAE,QAAR;AAAkB,QAAA,QAAQ,EAAE;AAA5B,OAAP;;AACF,SAAK,IAAL;AACE,aAAO;AAAC,QAAA,IAAI,EAAE;AAAP,OAAP;;AACF,SAAK,KAAL;AACE,aAAO;AAAC,QAAA,KAAK,EAAE,QAAR;AAAkB,QAAA,MAAM,EAAE,QAA1B;AAAoC,QAAA,IAAI,EAAE;AAA1C,OAAP;;AACF,SAAK,GAAL;AACE,aAAO;AAAC,QAAA,KAAK,EAAE;AAAR,OAAP;;AACF,SAAK,KAAL;AACE,aAAO;AAAC,QAAA,IAAI,EAAE,QAAP;AAAiB,QAAA,GAAG,EAAE;AAAtB,OAAP;;AACF,SAAK,MAAL;AACE,aAAO;AAAC,QAAA,IAAI,EAAE,QAAP;AAAiB,QAAA,GAAG,EAAE;AAAtB,OAAP;;AACF,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAO;AAAC,QAAA,GAAG,EAAE;AAAN,OAAP;AAnFJ;AAqFD;;AAEK,SAAU,SAAV,CAAoB,OAApB,EAAoC;AACxC,UAAQ,OAAR;AACE,SAAK,CAAL;AACA,SAAK,CAAL;AACA,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACA,SAAK,WAAL;AACA,SAAK,OAAL;AACA,SAAK,WAAL;AACA,SAAK,aAAL,CAVF,CAYE;;AACA,SAAK,EAAL;AACA,SAAK,EAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAO,SAAP;;AAEF,SAAK,KAAL;AACA,SAAK,GAAL;AACA,SAAK,MAAL;AACA,SAAK,KAAL;AACA,SAAK,UAAL,CAvBF,CAwBE;;AACA,SAAK,IAAL;AACA,SAAK,OAAL;AACA,SAAK,IAAL;AACA,SAAK,GAAL;AACA,SAAK,WAAL;AACE,aAAO,UAAP;AAEF;;AACA,SAAK,KAAL;AACA,SAAK,IAAL;AACA,SAAK,MAAL;AACE,aAAO,UAAP;AAEF;;AAEA,SAAK,QAAL;AACA,SAAK,SAAL;AACA,SAAK,SAAL;AACA,SAAK,UAAL;AACA,SAAK,MAAL;AACA,SAAK,GAAL;AACA,SAAK,KAAL;AACE,aAAO,SAAP;AA/CJ;AAiDD;;;;;;;;;;;;;;ACxmBD;;AACA;;AAeA;;AAEA;;AA0EA;;;AAGM,SAAU,WAAV,CAAsB,GAAtB,EAA2C;AAC/C,MAAI,yBAAU,GAAV,CAAJ,EAAoB;AAClB,IAAA,GAAG,GAAG,8BAAa,GAAb,EAAkB,SAAlB,CAAN;AACD;;AACD,SACE,QACA,gBAAK,GAAL,EACG,GADH,CACO,CAAC,IAAK,iBAAiB,CAAC,GAAG,CAAC,CAAD,CAAJ,CAAjB,GAA4B,mBAAQ,IAAI,CAAC,IAAI,MAAM,CAAC,OAAP,CAAe,GAAG,CAAC,CAAD,CAAlB,CAAsB,EAAvC,CAA5B,GAAyE,mBAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAD,CAAG,EAAvB,CADtF,EAEG,IAFH,CAEQ,EAFR,CAFF;AAMD;AAED;;;;;AAGM,SAAU,SAAV,CAAoB,GAApB,EAAuD;AAC3D,SAAO,GAAG,KAAK,IAAR,IAAiB,WAAW,CAAC,GAAD,CAAX,IAAoB,CAAC,GAAG,CAAC,MAAjD;AACD;AAED;;;;;AAGM,SAAU,QAAV,CAAmB,GAAnB,EAAsD;AAC1D,SAAO,GAAG,KAAK,QAAR,IAAqB,WAAW,CAAC,GAAD,CAAX,IAAoB,GAAG,CAAC,MAAJ,KAAe,IAA/D;AACD;;AAEK,SAAU,WAAV,CAAsB,GAAtB,EAAyD;AAC7D,SAAO,wBAAS,GAAT,CAAP;AACD;;AAEK,SAAU,iBAAV,CAA4B,MAA5B,EAA6C;AACjD,SAAO,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAG,WAAH,CAAb;AACD;;AAEK,SAAU,WAAV,CAAsB,OAAtB,EAAuC;AAC3C,UAAQ,OAAR;AACE,SAAK,YAAL;AACA,SAAK,eAAL;AACA,SAAK,aAAL;AACA,SAAK,cAAL;AACA,SAAK,aAAL;AACA,SAAK,eAAL;AACA,SAAK,oBAAL;AACA,SAAK,gBAAL;AACA,SAAK,oBAAL;AACA,SAAK,sBAAL,CAVF,CAWE;AACA;;AACA,SAAK,cAAL;AACE,aAAO,CAAP;AAAU;;AACZ,SAAK,mBAAL;AACE,aAAO,CAAP;AAAU;;AACZ;AACE,aAAO,EAAP;AAlBJ;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChJD;;AAWA;;AAjBA;;;AAoBM,SAAU,WAAV,CAAsB,IAAtB,EAA2D;AAC/D,SAAO,yBAAyB,IAAI,CAAC,SAAL,CAC9B,IAD8B,CAE/B,yJAFD;AAGD,EAED;;;AACO,MAAM,cAAc,GAAG,+DAAvB;;;AAED,SAAU,sBAAV,CAAiC,IAAjC,EAAyD;AAC7D,QAAM,KAAK,GAAG,IAAI,IAAI,OAAR,GAAkB,OAAlB,GAA4B,QAA1C;AACA,SAAO,GAAG,KAAK,6DAAf;AACD;;AAEK,SAAU,sCAAV,CAAiD,IAAjD,EAAyE;AAC7E,QAAM,KAAK,GAAG,IAAI,IAAI,OAAR,GAAkB,OAAlB,GAA4B,QAA1C;AACA,QAAM,YAAY,GAAG,IAAI,IAAI,OAAR,GAAkB,GAAlB,GAAwB,GAA7C;AACA,SAAO,GAAG,KAAK,4DAA4D,YAAY,IAAvF;AACD;;AAEK,SAAU,WAAV,CAAsB,OAAtB,EAAoD;AACxD,SAAO,OAAO,GACV,iBAAiB,OAAO,+BAA+B,6BAAe,OAAf,CAAuB,GADpE,GAEV,gDAFJ;AAGD,EAED;;;AACM,SAAU,kCAAV,CAA6C,OAA7C,EAA6D;AACjE,SAAO,mDAAmD,OAAO,wBAAjE;AACD;;AAEK,SAAU,sBAAV,CAAiC,OAAjC,EAAmD,SAAnD,EAAkG;AACtG,SAAO,mDAAmD,OAAO,wCAAwC,SAAS,KAAlH;AACD;;AAEK,SAAU,8BAAV,CAAyC,IAAzC,EAAqD;AACzD,SAAO,gDAAgD,IAAI,SAA3D;AACD;;AAEK,SAAU,qBAAV,CAAgC,IAAhC,EAAmD;AACvD,SAAO,+BAA+B,IAAI,OAA1C;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAAwC;AAC5C,SAAO,kCAAkC,IAAI,IAA7C;AACD;;AAEM,MAAM,yBAAyB,GACpC,2FADK;;AAGA,MAAM,8BAA8B,GACzC,iGADK;;;AAED,SAAU,gBAAV,CAA2B,IAA3B,EAAuC;AAC3C,SACE,iCAAiC,IAAI,gCAArC,GACA,oDAFF;AAID,EAED;;;AACM,SAAU,mBAAV,CAA8B,KAA9B,EAA2C;AAC/C,SAAO,2BAA2B,KAAK,IAAvC;AACD;;AAEK,SAAU,yBAAV,CAAoC,IAApC,EAA4D;AAChE,SAAO,+CAA+C,IAAI,0BAA1D;AACD,EAED;;;AACO,MAAM,wBAAwB,GACnC,8GADK,EAGP;;;;AACM,SAAU,iBAAV,CAA4B,CAA5B,EAAqC;AACzC,SAAO,uBAAuB,CAAC,IAA/B;AACD;;AAEK,SAAU,cAAV,CAAyB,KAAzB,EAAwC,KAAxC,EAAuD,QAAvD,EAAuE;AAC3E,SAAO,6BAA6B,KAAK,QAAQ,QAAQ,4CAA4C,KAAK,GAA1G;AACD,EAED;;;AACM,SAAU,uBAAV,CAAkC,SAAlC,EAAgD;AACpD,SAAO,kCAAkC,qBAAU,SAAV,CAAoB,GAA7D;AACD;;AAEM,MAAM,kBAAkB,GAC7B,sIADK,EAGP;;;;AAEM,SAAU,0BAAV,CAAqC,OAArC,EAAqD;AACzD,SAAO,wFAAwF,OAAO,eAAtG;AACD;;AAEK,SAAU,kBAAV,CAA6B,QAA7B,EAAgD;AACpD,SAAO,kBAAkB,QAAQ,CAAC,IAAT,CAAc,GAAd,CAAkB,YAAY,QAAQ,CAAC,MAAT,KAAoB,CAApB,GAAwB,IAAxB,GAA+B,KAAK,aAA3F;AACD;;AACK,SAAU,oBAAV,CAA+B,GAA/B,EAA0F;AAC9F,QAAM;AAAC,IAAA,gBAAD;AAAmB,IAAA;AAAnB,MAAiC,GAAvC;AACA,SAAO,6BAA6B,qBAAU,gBAAV,CAA2B,wCAAwC,qBACrG,UADqG,CAEtG,GAFD;AAGD;;AAEM,MAAM,wBAAwB,GAAG,6EAAjC;;;AAED,SAAU,mBAAV,CACJ,OADI,EAEJ,IAFI,EAGJ,KAHI,EAGuB;AAE3B,SAAO,WAAW,OAAO,SAAS,IAAI,0BAA0B,qBAAU,KAAV,CAAgB,IAAhF;AACD;;AAEK,SAAU,gBAAV,CAA2B,IAA3B,EAAqC;AACzC,SAAO,uBAAuB,IAAI,IAAlC;AACD;;AAEK,SAAU,iCAAV,CAA4C,IAA5C,EAAwD,SAAxD,EAAqF;AACzF,SAAO,uBAAuB,IAAI,qBAAqB,SAAS,kCAAhE;AACD;;AAEK,SAAU,gBAAV,CAA2B,SAA3B,EAA0D;AAC9D,SAAO,iCAAiC,SAAS,IAAjD;AACD;;AAEK,SAAU,gBAAV,CAA2B,OAA3B,EAA6C,OAA7C,EAA0D;AAC9D,SAAO,6BAA6B,OAAO,aAAa,OAAO,YAA/D;AACD;;AACK,SAAU,aAAV,CAAwB,IAAxB,EAAuD,GAAvD,EAA8F;AAClG,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,MAAiB,GAAvB;AACA,SAAO,kBAAkB,IAAI,yBAC3B,IAAI,IAAI,MAAR,GAAiB,iBAAjB,GAAqC,IAAI,GAAG,MAAH,GAAY,QACvD,GAFA;AAGD;;AAEK,SAAU,aAAV,CAAwB,QAAxB,EAAyD,OAAzD,EAAyE;AAC7E,SAAO,YAAY,qBACjB,QADiB,CAElB,kBAAkB,OAAO,sEAF1B;AAGD;;AACK,SAAU,iBAAV,CAA4B,OAA5B,EAA8C,IAA9C,EAA0D,UAA1D,EAAwF;AAC5F,SAAO,GAAG,OAAO,uBAAuB,IAAI,kCAAkC,UAAU,YAAxF;AACD;;AAEM,MAAM,sBAAsB,GACjC,kGADK;;;AAGD,SAAU,mBAAV,CAA8B,OAA9B,EAAgD,WAAhD,EAA6F,IAA7F,EAA0G;AAC9G,SAAO,GAAG,OAAO,wCAAwC,WAAW,IAAI,IAAI,GAAG,SAAS,IAAI,EAAhB,GAAqB,EAAE,GAAnG;AACD;;AAEK,SAAU,sBAAV,CAAiC,OAAjC,EAAgD;AACpD,SAAO,GAAG,OAAO,2BAA2B,OAAO,mCAAnD;AACD;;AAEK,SAAU,4BAAV,CAAuC,OAAvC,EAAsD;AAC1D,SAAO,GAAG,OAAO,4DAAjB;AACD;;AAEK,SAAU,mBAAV,CAA8B,QAA9B,EAAsD;AAC1D,SAAO,6BAA6B,QAAQ,CAAC,IAAT,CAAc,OAAd,CAAsB,IAAI,QAAQ,CAAC,MAAT,GAAkB,CAAlB,GAAsB,KAAtB,GAA8B,IAAI,kBAAhG;AACD;;AAEK,SAAU,2BAAV,CAAsC,OAAtC,EAAwD,IAAxD,EAAkE;AACtE,SAAO,2BAA2B,OAAO,gBAAgB,IAAI,mDAC3D,IAAI,KAAK,SAAT,GAAqB,OAArB,GAA+B,WACjC,GAFA;AAGD,EAED;;;AACM,SAAU,aAAV,CAAwB,KAAxB,EAAwC,KAAxC,EAAsD;AAC1D,QAAM,QAAQ,GAAG,KAAK,IAAI,KAAT,GAAiB,WAAjB,GAA+B,KAAK,GAAG,IAAH,GAAU,IAA/D;AACA,SAAO,kEAAkE,QAAQ,sDAAjF;AACD;;AAEK,SAAU,gBAAV,CAA2B,QAA3B,EAA6C,MAA7C,EAA2D;AAC/D,SAAO,qBAAqB,QAAQ,sBAAsB,MAAM,IAAhE;AACD,EAED;;;AACO,MAAM,4CAA4C,GACvD,wEADK;;AAGA,MAAM,qBAAqB,GAAG,kLAA9B;;;AAED,SAAU,kCAAV,CAA6C,IAA7C,EAAyD;AAC7D,SAAO,kCAAkC,IAAI,2BAA7C;AACD;;AAEK,SAAU,uCAAV,CAAkD,QAAlD,EAAiF;AACrF,SAAO,2DAA2D,qBAAU,QAAV,CAAmB,IAArF;AACD;;AAEK,SAAU,sCAAV,CAAiD,SAAjD,EAA8E;AAClF,SAAO,2CAA2C,SAAS,0EAA3D;AACD;;AAEK,SAAU,8BAAV,CAAyC,QAAzC,EAAwE;AAC5E,SAAO,+DAA+D,qBAAU,QAAV,CAAmB,IAAzF;AACD;;AAEK,SAAU,gCAAV,CAA2C,IAA3C,EAAqD;AACzD,SAAO,2CAA2C,IAAI,IAAtD;AACD;;AAEK,SAAU,2BAAV,CAAsC,OAAtC,EAAwD,SAAxD,EAA8E,gBAA9E,EAAyG;AAC7G,SAAO,YAAY,OAAO,yBAAyB,SAAS,0BAA0B,gBAAgB,kBAAtG;AACD;;AAEK,SAAU,4BAAV,CAAuC,SAAvC,EAA6D,gBAA7D,EAAwF;AAC5F,SAAO,gCAAgC,SAAS,0BAA0B,gBAAgB,kBAA1F;AACD;;AAEK,SAAU,iCAAV,CAA4C,SAA5C,EAAkE,QAAlE,EAAoF,OAApF,EAAoG;AACxG,SAAO,GAAG,OAAO,aAAa,QAAQ,yCAAyC,SAAS,SAAxF;AACD;;AAEK,SAAU,wBAAV,CAAmC,IAAnC,EAA+C,SAA/C,EAAmE;AACvE,SAAO,eAAe,SAAS,8BAA8B,IAAI,IAAjE;AACD;;AAEK,SAAU,WAAV,CAAsB,OAAtB,EAAiD;AACrD,SAAO,iBAAiB,OAAO,4BAA4B,OAAO,KAAK,OAAZ,GAAsB,GAAtB,GAA4B,GAAG,iBAA1F;AACD;;AAEK,SAAU,wBAAV,CACJ,QADI,EAEJ,UAFI,EAGJ,EAHI,EAIJ,EAJI,EAIC;AAEL,SAAO,eAAe,UAAU,CAAC,QAAX,EAAqB,cAAc,QAAQ,CAAC,QAAT,EAAmB,MAAM,qBAAU,EAAV,CAAa,QAAQ,qBACrG,EADqG,CAEtG,YAAY,qBAAU,EAAV,CAAa,GAF1B;AAGD;;AAEK,SAAU,8BAAV,CAA4C,QAA5C,EAAiE,UAAjE,EAAkG,EAAlG,EAAyG,EAAzG,EAA8G;AAClH,SAAO,eAAe,UAAU,CAAC,QAAX,EAAqB,cAAc,QAAQ,CAAC,QAAT,EAAmB,MAAM,qBAAU,EAAV,CAAa,QAAQ,qBACrG,EADqG,CAEtG,wCAFD;AAGD;;AAEK,SAAU,qCAAV,CAAgD,OAAhD,EAAgE;AACpE,SAAO,4CAA4C,OAAO,2EAA1D;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAA6C;AACjD,SAAO,0BAA0B,qBAC/B,IAD+B,CAEhC,2EAFD;AAGD;;AAEM,MAAM,kBAAkB,GAC7B,2FADK;;AAGA,MAAM,qCAAqC,GAChD,2KADK;;AAGA,MAAM,iDAAiD,GAC5D,oQADK;;AAGA,MAAM,+BAA+B,GAC1C,yKADK,EAGP;;;AACO,MAAM,wBAAwB,GAAG,2BAAjC,EAEP;;;;AACM,SAAU,qBAAV,CAAgC,OAAhC,EAAgD;AACpD,SAAO,iBAAiB,OAAO,0BAA0B,OAAO,KAAhE;AACD;;AAEK,SAAU,yBAAV,CAAoC,SAApC,EAAwD;AAC5D,SAAO,kCAAkC,SAAS,IAAlD;AACD;;AAEK,SAAU,0BAAV,CAAqC,SAArC,EAAkE;AACtE,SAAO,6EAA6E,SAAS,KAA7F;AACD,EAED;;;AACM,SAAU,eAAV,CAA0B,QAA1B,EAA4C,KAA5C,EAAkE;AACtE,SAAO,WAAW,QAAQ,KAAK,qBAAU,KAAV,CAAgB,GAA/C;AACD;;AAEK,SAAU,UAAV,CAAqB,CAArB,EAA+C;AACnD,SAAO,8BAA8B,qBAAU,CAAV,CAAY,8CAAjD;AACD;;AAEK,SAAU,mCAAV,CAA8C,MAA9C,EAAsE,MAAtE,EAA4F;AAChG,SAAO,GAAG,MAAM,GAAG,SAAH,GAAe,EAAE,GAAG,MAAM,IAAI,MAAV,GAAmB,MAAnB,GAA4B,EAAE,GAAG,MAAM,GAAG,SAAH,GAAe,EAAE,GAC1F,MAAM,IAAI,MAAV,GAAmB,MAAnB,GAA4B,KAC9B,sCAFA;AAGD;;AAEK,SAAU,mCAAV,CACJ,MADI,EAEJ,MAFI,EAGJ,IAHI,EAG0B;AAE9B,SAAO,GAAG,MAAM,6BAA6B,MAAM,QAAQ,IAAI,GAA/D;AACD;;AAEK,SAAU,4CAAV,CACJ,SADI,EAEJ,aAFI,EAEwB;AAE5B,SAAO,mEAAmE,SAAS,KAAK,aAAa,8BAArG;AACD;;AAEK,SAAU,yBAAV,CAAoC,MAApC,EAA4D,IAA5D,EAA0F;AAC9F,SAAO,2CAA2C,IAAI,mBAAmB,MAAM,GAA/E;AACD;;AAEK,SAAU,qBAAV,CAAgC,QAAhC,EAAmE;AACvE,SAAO,kCAAkC,QAAQ,GAAjD;AACD,EAED;;;AACM,SAAU,wBAAV,CAAmC,OAAnC,EAAmD;AACvD,SAAO,WAAW,OAAO,gCAAzB;AACD;;AAEK,SAAU,+BAAV,CAA0C,OAA1C,EAA0D;AAC9D,SAAO,cAAc,OAAO,mCAA5B;AACD;;;;;;;;;;;;;;;ACvVD;;;;;;;;;;AAJA;;;;AAOA;;;AAGA,MAAM,IAAI,GAAG,sBAAO,cAAP,CAAb;AACA,IAAI,OAAO,GAAoB,IAA/B;AAEA;;;;AAGM,MAAO,WAAP,CAAkB;AAAxB,EAAA,WAAA,GAAA;AACS,SAAA,KAAA,GAAe,EAAf;AACA,SAAA,KAAA,GAAe,EAAf;AACA,SAAA,MAAA,GAAgB,EAAhB;AAwBR;;AAtBQ,EAAA,KAAK,GAAA;AACV,WAAO,IAAP;AACD;;AAEM,EAAA,IAAI,CAAC,GAAG,IAAJ,EAAwB;AACjC,SAAK,KAAL,CAAW,IAAX,CAAgB,GAAG,IAAnB;AACA,WAAO,IAAP;AACD;;AAEM,EAAA,IAAI,CAAC,GAAG,IAAJ,EAAwB;AACjC,SAAK,KAAL,CAAW,IAAX,CAAgB,GAAG,IAAnB;AACA,WAAO,IAAP;AACD;;AAEM,EAAA,KAAK,CAAC,GAAG,IAAJ,EAAwB;AAClC,SAAK,MAAL,CAAY,IAAZ,CAAiB,GAAG,IAApB;AACA,WAAO,IAAP;AACD;;AAEM,EAAA,KAAK,CAAC,GAAG,IAAJ,EAAwB;AAClC,UAAM,KAAK,CAAC,GAAG,IAAJ,CAAX;AACD;;AA1BqB;;;;AA6BlB,SAAU,IAAV,CAAe,CAAf,EAA+C;AACnD,SAAO,MAAK;AACV,IAAA,OAAO,GAAG,IAAI,WAAJ,EAAV;AACA,IAAA,CAAC,CAAC,OAAD,CAAD;AACA,IAAA,KAAK;AACN,GAJD;AAKD;AAED;;;;;AAGM,SAAU,GAAV,CAAc,SAAd,EAAwC;AAC5C,EAAA,OAAO,GAAG,SAAV;AACA,SAAO,OAAP;AACD;AAED;;;;;AAGM,SAAU,KAAV,GAAe;AACnB,EAAA,OAAO,GAAG,IAAV;AACA,SAAO,OAAP;AACD;;AAEK,SAAU,IAAV,CAAe,GAAG,IAAlB,EAAsC;AAC1C,EAAA,OAAO,CAAC,IAAR,CAAa,GAAG,IAAhB;AACD;;AAEK,SAAU,IAAV,CAAe,GAAG,IAAlB,EAAsC;AAC1C,EAAA,OAAO,CAAC,IAAR,CAAa,GAAG,IAAhB;AACD;;AAEK,SAAU,KAAV,CAAgB,GAAG,IAAnB,EAAuC;AAC3C,EAAA,OAAO,CAAC,KAAR,CAAc,GAAG,IAAjB;AACD;;;;;;;;;;;;;AC7ED;;AACA;;AACA;;AACA;;;;;;AALA;AA4HM,SAAU,UAAV,CAAqB,CAArB,EAA2B;AAC/B,MAAI,CAAC,IAAI,wBAAS,CAAT,CAAT,EAAsB;AACpB,SAAK,MAAM,IAAX,IAAmB,wBAAnB,EAAmC;AACjC,UAAI,IAAI,IAAI,CAAZ,EAAe;AACb,eAAO,IAAP;AACD;AACF;AACF;;AACD,SAAO,KAAP;AACD;;AAEM,MAAM,MAAM,GAAG,CACpB,SADoB,EAEpB,UAFoB,EAGpB,OAHoB,EAIpB,OAJoB,EAKpB,KALoB,EAMpB,MANoB,EAOpB,MAPoB,EAQpB,QARoB,EASpB,WAToB,EAUpB,SAVoB,EAWpB,UAXoB,EAYpB,UAZoB,CAAf;;AAcA,MAAM,YAAY,GAAG,MAAM,CAAC,GAAP,CAAW,CAAC,IAAI,CAAC,CAAC,MAAF,CAAS,CAAT,EAAY,CAAZ,CAAhB,CAArB;;AAEA,MAAM,IAAI,GAAG,CAAC,QAAD,EAAW,QAAX,EAAqB,SAArB,EAAgC,WAAhC,EAA6C,UAA7C,EAAyD,QAAzD,EAAmE,UAAnE,CAAb;;AACA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAL,CAAS,CAAC,IAAI,CAAC,CAAC,MAAF,CAAS,CAAT,EAAY,CAAZ,CAAd,CAAnB;;;AAEP,SAAS,gBAAT,CAA0B,CAA1B,EAA4C;AAC1C,MAAI,qBAAU,CAAV,CAAJ,EAAkB;AAChB,IAAA,CAAC,GAAG,CAAC,CAAL;AACD;;AAED,MAAI,wBAAS,CAAT,CAAJ,EAAiB;AACf,QAAI,CAAC,GAAG,CAAR,EAAW;AACT,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,eAAZ,CAA4B,SAA5B,EAAuC,CAAvC,CAAT;AACD,KAHc,CAIf;;;AACA,WAAO,CAAC,GAAG,CAAX;AACD,GAND,MAMO;AACL;AACA,UAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,eAAZ,CAA4B,SAA5B,EAAuC,CAAvC,CAAV,CAAN;AACD;AACF;;AAED,SAAS,cAAT,CAAwB,CAAxB,EAA0C;AACxC,MAAI,qBAAU,CAAV,CAAJ,EAAkB;AAChB,IAAA,CAAC,GAAG,CAAC,CAAL;AACD;;AAED,MAAI,wBAAS,CAAT,CAAJ,EAAiB;AACf;AACA,WAAO,CAAC,GAAG,CAAX;AACD,GAHD,MAGO;AACL,UAAM,MAAM,GAAG,CAAC,CAAC,WAAF,EAAf;AACA,UAAM,UAAU,GAAG,MAAM,CAAC,OAAP,CAAe,MAAf,CAAnB;;AACA,QAAI,UAAU,KAAK,CAAC,CAApB,EAAuB;AACrB,aAAO,UAAP,CADqB,CACF;AACpB;;AACD,UAAM,MAAM,GAAG,MAAM,CAAC,MAAP,CAAc,CAAd,EAAiB,CAAjB,CAAf;AACA,UAAM,eAAe,GAAG,YAAY,CAAC,OAAb,CAAqB,MAArB,CAAxB;;AACA,QAAI,eAAe,KAAK,CAAC,CAAzB,EAA4B;AAC1B,aAAO,eAAP;AACD,KAVI,CAYL;;;AACA,UAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,eAAZ,CAA4B,OAA5B,EAAqC,CAArC,CAAV,CAAN;AACD;AACF;;AAED,SAAS,YAAT,CAAsB,CAAtB,EAAwC;AACtC,MAAI,qBAAU,CAAV,CAAJ,EAAkB;AAChB,IAAA,CAAC,GAAG,CAAC,CAAL;AACD;;AAED,MAAI,wBAAS,CAAT,CAAJ,EAAiB;AACf;AACA;AACA,WAAO,CAAC,GAAG,CAAX;AACD,GAJD,MAIO;AACL,UAAM,MAAM,GAAG,CAAC,CAAC,WAAF,EAAf;AACA,UAAM,QAAQ,GAAG,IAAI,CAAC,OAAL,CAAa,MAAb,CAAjB;;AACA,QAAI,QAAQ,KAAK,CAAC,CAAlB,EAAqB;AACnB,aAAO,QAAP,CADmB,CACF;AAClB;;AACD,UAAM,MAAM,GAAG,MAAM,CAAC,MAAP,CAAc,CAAd,EAAiB,CAAjB,CAAf;AACA,UAAM,aAAa,GAAG,UAAU,CAAC,OAAX,CAAmB,MAAnB,CAAtB;;AACA,QAAI,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACxB,aAAO,aAAP;AACD,KAVI,CAWL;;;AACA,UAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,eAAZ,CAA4B,KAA5B,EAAmC,CAAnC,CAAV,CAAN;AACD;AACF;AAED;;;;;;;AAKA,SAAS,aAAT,CAAuB,CAAvB,EAAmD,SAAnD,EAAqE;AACnE,QAAM,KAAK,GAAwB,EAAnC;;AAEA,MAAI,SAAS,IAAI,CAAC,CAAC,GAAF,KAAU,SAA3B,EAAsC;AACpC,QAAI,gBAAK,CAAL,EAAQ,MAAR,GAAiB,CAArB,EAAwB;AACtB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,UAAZ,CAAuB,CAAvB,CAAT;AACA,MAAA,CAAC,GAAG,qBAAU,CAAV,CAAJ;AACA,aAAO,CAAC,CAAC,GAAT;AACD;AACF;;AAED,MAAI,CAAC,CAAC,IAAF,KAAW,SAAf,EAA0B;AACxB,IAAA,KAAK,CAAC,IAAN,CAAW,CAAC,CAAC,IAAb;AACD,GAFD,MAEO;AACL;AACA;AACA,IAAA,KAAK,CAAC,IAAN,CAAW,IAAX;AACD;;AAED,MAAI,CAAC,CAAC,KAAF,KAAY,SAAhB,EAA2B;AACzB,UAAM,KAAK,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,KAAH,CAAjB,GAA6B,CAAC,CAAC,KAAtD;AACA,IAAA,KAAK,CAAC,IAAN,CAAW,KAAX;AACD,GAHD,MAGO,IAAI,CAAC,CAAC,OAAF,KAAc,SAAlB,EAA6B;AAClC,UAAM,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAH,CAAnB,GAAiC,CAAC,CAAC,OAA5D;AACA,IAAA,KAAK,CAAC,IAAN,CAAW,wBAAS,OAAT,IAAoB,OAAO,GAAG,CAA9B,GAAkC,OAAO,GAAG,IAAvD;AACD,GAHM,MAGA;AACL,IAAA,KAAK,CAAC,IAAN,CAAW,CAAX,EADK,CACU;AAChB;;AAED,MAAI,CAAC,CAAC,IAAF,KAAW,SAAf,EAA0B;AACxB,IAAA,KAAK,CAAC,IAAN,CAAW,CAAC,CAAC,IAAb;AACD,GAFD,MAEO,IAAI,CAAC,CAAC,GAAF,KAAU,SAAd,EAAyB;AAC9B;AACA;AACA,UAAM,GAAG,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,GAAH,CAAf,GAAyB,CAAC,CAAC,GAAhD;AACA,IAAA,KAAK,CAAC,IAAN,CAAW,wBAAS,GAAT,IAAgB,GAAG,GAAG,CAAtB,GAA0B,GAAG,GAAG,IAA3C;AACD,GALM,MAKA;AACL,IAAA,KAAK,CAAC,IAAN,CAAW,CAAX,EADK,CACU;AAChB,GAtCkE,CAwCnE;AACA;;;AACA,OAAK,MAAM,QAAX,IAAuB,CAAC,OAAD,EAAU,SAAV,EAAqB,SAArB,EAAgC,cAAhC,CAAvB,EAAiF;AAC/E,UAAM,IAAI,GAAG,CAAC,CAAC,QAAD,CAAd;AACA,IAAA,KAAK,CAAC,IAAN,CAAW,OAAO,IAAP,KAAgB,WAAhB,GAA8B,CAA9B,GAAkC,IAA7C;AACD;;AAED,SAAO,KAAP;AACD;AAED;;;;;;;;AAMM,SAAU,cAAV,CAAyB,CAAzB,EAAoC;AACxC,QAAM,KAAK,GAAwB,aAAa,CAAC,CAAD,EAAI,IAAJ,CAAhD;AAEA,QAAM,MAAM,GAAG,KAAK,CAAC,IAAN,CAAW,IAAX,CAAf;;AAEA,MAAI,CAAC,CAAC,GAAN,EAAW;AACT,WAAO,OAAO,MAAM,GAApB;AACD,GAFD,MAEO;AACL,WAAO,YAAY,MAAM,GAAzB;AACD;AACF;AAED;;;;;;;;AAMM,SAAU,kBAAV,CAA6B,CAA7B,EAA4C;AAChD,QAAM,KAAK,GAAwB,aAAa,CAAC,CAAD,EAAI,KAAJ,CAAhD;AAEA,QAAM,MAAM,GAAG,KAAK,CAAC,IAAN,CAAW,IAAX,CAAf;;AAEA,MAAI,CAAC,CAAC,GAAN,EAAW;AACT,WAAO,OAAO,MAAM,GAApB;AACD,GAFD,MAEO;AACL,WAAO,YAAY,MAAM,GAAzB;AACD;AACF;AAED;;;;;;AAIM,SAAU,mBAAV,CAA8B,CAA9B,EAAyC;AAC7C,QAAM,KAAK,GAAwB,aAAa,CAAC,CAAD,EAAI,IAAJ,CAAhD;;AAEA,MAAI,CAAC,CAAC,GAAN,EAAW;AACT,WAAO,CAAC,IAAI,IAAJ,CAAS,IAAI,CAAC,GAAL,CAAS,GAAI,KAAb,CAAT,CAAR;AACD,GAFD,MAEO;AACL,WAAO,CAAC,IAAI,IAAJ,CAAS,GAAI,KAAb,CAAR;AACD;AACF;;;;;;;;;;;;;;;;;;;;;ACpUD;;AACA;;AACA;;AACA;;;;AAEA;AACO,MAAM,2BAA2B,GAAG;AACzC,EAAA,IAAI,EAAE,CADmC;AAEzC,EAAA,OAAO,EAAE,CAFgC;AAGzC,EAAA,KAAK,EAAE,CAHkC;AAIzC,EAAA,IAAI,EAAE,CAJmC;AAKzC,EAAA,GAAG,EAAE,CALoC;AAMzC,EAAA,SAAS,EAAE,CAN8B;AAOzC,EAAA,IAAI,EAAE,CAPmC;AAQzC,EAAA,KAAK,EAAE,CARkC;AASzC,EAAA,OAAO,EAAE,CATgC;AAUzC,EAAA,OAAO,EAAE,CAVgC;AAWzC,EAAA,YAAY,EAAE;AAX2B,CAApC;;AAgBA,MAAM,cAAc,GAAG,gBAAK,2BAAL,CAAvB;;;AAED,SAAU,qBAAV,CAAgC,QAAhC,EAAgD;AACpD,SAAO,CAAC,CAAC,2BAA2B,CAAC,QAAD,CAApC;AACD;;AAEM,MAAM,yBAAyB,GAAG;AACvC,EAAA,OAAO,EAAE,CAD8B;AAEvC,EAAA,UAAU,EAAE,CAF2B;AAGvC,EAAA,QAAQ,EAAE,CAH6B;AAIvC,EAAA,OAAO,EAAE,CAJ8B;AAKvC,EAAA,MAAM,EAAE,CAL+B;AAMvC,EAAA,YAAY,EAAE,CANyB;AAOvC,EAAA,OAAO,EAAE,CAP8B;AAQvC,EAAA,QAAQ,EAAE,CAR6B;AASvC,EAAA,UAAU,EAAE,CAT2B;AAUvC,EAAA,UAAU,EAAE,CAV2B;AAWvC,EAAA,eAAe,EAAE;AAXsB,CAAlC;;AAkBA,MAAM,0BAA0B,GAAG;AACxC,EAAA,WAAW,EAAE,CAD2B;AAExC,EAAA,gBAAgB,EAAE,CAFsB;AAIxC,EAAA,SAAS,EAAE,CAJ6B;AAKxC,EAAA,aAAa,EAAE,CALyB;AAMxC,EAAA,kBAAkB,EAAE,CANoB;AAOxC,EAAA,yBAAyB,EAAE,CAPa;AAQxC,EAAA,gCAAgC,EAAE,CARM;AAUxC,EAAA,QAAQ,EAAE,CAV8B;AAWxC,EAAA,WAAW,EAAE,CAX2B;AAYxC,EAAA,gBAAgB,EAAE,CAZsB;AAaxC,EAAA,uBAAuB,EAAE,CAbe;AAcxC,EAAA,8BAA8B,EAAE,CAdQ;AAgBxC,EAAA,aAAa,EAAE,CAhByB;AAkBxC,EAAA,YAAY,EAAE,CAlB0B;AAoBxC,EAAA,SAAS,EAAE,CApB6B;AAqBxC,EAAA,cAAc,EAAE,CArBwB;AAsBxC,EAAA,qBAAqB,EAAE,CAtBiB;AAuBxC,EAAA,4BAA4B,EAAE,CAvBU;AAyBxC,EAAA,OAAO,EAAE,CAzB+B;AA0BxC,EAAA,aAAa,EAAE,CA1ByB;AA2BxC,EAAA,mBAAmB,EAAE,CA3BmB;AA4BxC,EAAA,0BAA0B,EAAE,CA5BY;AA8BxC,EAAA,QAAQ,EAAE,CA9B8B;AA+BxC,EAAA,eAAe,EAAE,CA/BuB;AAgCxC,EAAA,sBAAsB,EAAE,CAhCgB;AAkCxC,EAAA,YAAY,EAAE,CAlC0B;AAmCxC,EAAA,mBAAmB,EAAE,CAnCmB;AAqCxC,EAAA,cAAc,EAAE,CArCwB;AAuCxC,EAAA,mBAAmB,EAAE;AAvCmB,CAAnC;;AA4CA,MAAM,wBAAwB,GAAG;AACtC,EAAA,cAAc,EAAE,CADsB;AAEtC,EAAA,mBAAmB,EAAE,CAFiB;AAItC,EAAA,YAAY,EAAE,CAJwB;AAKtC,EAAA,gBAAgB,EAAE,CALoB;AAMtC,EAAA,qBAAqB,EAAE,CANe;AAOtC,EAAA,4BAA4B,EAAE,CAPQ;AAQtC,EAAA,mCAAmC,EAAE,CARC;AAUtC,EAAA,WAAW,EAAE,CAVyB;AAWtC,EAAA,cAAc,EAAE,CAXsB;AAYtC,EAAA,mBAAmB,EAAE,CAZiB;AAatC,EAAA,0BAA0B,EAAE,CAbU;AActC,EAAA,iCAAiC,EAAE,CAdG;AAgBtC,EAAA,gBAAgB,EAAE,CAhBoB;AAkBtC,EAAA,eAAe,EAAE,CAlBqB;AAoBtC,EAAA,YAAY,EAAE,CApBwB;AAqBtC,EAAA,iBAAiB,EAAE,CArBmB;AAsBtC,EAAA,wBAAwB,EAAE,CAtBY;AAuBtC,EAAA,+BAA+B,EAAE,CAvBK;AAyBtC,EAAA,UAAU,EAAE,CAzB0B;AA0BtC,EAAA,gBAAgB,EAAE,CA1BoB;AA2BtC,EAAA,sBAAsB,EAAE,CA3Bc;AA4BtC,EAAA,6BAA6B,EAAE,CA5BO;AA8BtC,EAAA,WAAW,EAAE,CA9ByB;AA+BtC,EAAA,kBAAkB,EAAE,CA/BkB;AAgCtC,EAAA,yBAAyB,EAAE,CAhCW;AAkCtC,EAAA,eAAe,EAAE,CAlCqB;AAmCtC,EAAA,sBAAsB,EAAE,CAnCc;AAqCtC,EAAA,iBAAiB,EAAE,CArCmB;AAuCtC,EAAA,sBAAsB,EAAE;AAvCc,CAAjC;;;AAiDD,SAAU,aAAV,CAAwB,CAAxB,EAAiC;AACrC,SAAO,CAAC,CAAC,UAAF,CAAa,KAAb,CAAP;AACD;;AAEK,SAAU,gBAAV,CAA2B,CAA3B,EAAyC;AAC7C,SAAO,CAAC,CAAC,MAAF,CAAS,CAAT,CAAP;AACD,EA6CD;;;AACO,MAAM,mBAAmB,GAAqB;AACnD,gBAAc,QADqC;AAEnD,qBAAmB;AAFgC,CAA9C;;;AAKD,SAAU,gBAAV,CAA2B,QAA3B,EAA6C;AACjD,QAAM,KAAK,GAA0B,EAArC;;AAEA,OAAK,MAAM,IAAX,IAAmB,cAAnB,EAAmC;AACjC,QAAI,gBAAgB,CAAC,QAAD,EAAW,IAAX,CAApB,EAAsC;AACpC,MAAA,KAAK,CAAC,IAAN,CAAW,IAAX;AACD;AACF;;AAED,SAAO,KAAP;AACD;AAED;;;AACM,SAAU,gBAAV,CAA2B,YAA3B,EAAmD,QAAnD,EAAqE;AACzE,QAAM,KAAK,GAAG,YAAY,CAAC,OAAb,CAAqB,QAArB,CAAd;;AAEA,MAAI,KAAK,GAAG,CAAZ,EAAe;AACb,WAAO,KAAP;AACD,GALwE,CAOzE;;;AACA,MAAI,KAAK,GAAG,CAAR,IAAa,QAAQ,KAAK,SAA1B,IAAuC,YAAY,CAAC,MAAb,CAAoB,KAAK,GAAG,CAA5B,MAAmC,GAA9E,EAAmF;AACjF,WAAO,KAAP;AACD,GAVwE,CAYzE;;;AACA,MAAI,YAAY,CAAC,MAAb,GAAsB,KAAK,GAAG,CAA9B,IAAmC,QAAQ,KAAK,KAAhD,IAAyD,YAAY,CAAC,MAAb,CAAoB,KAAK,GAAG,CAA5B,MAAmC,GAAhG,EAAqG;AACnG,WAAO,KAAP;AACD;;AACD,MAAI,KAAK,GAAG,CAAR,IAAa,QAAQ,KAAK,MAA1B,IAAoC,YAAY,CAAC,MAAb,CAAoB,KAAK,GAAG,CAA5B,MAAmC,GAA3E,EAAgF;AAC9E,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD;AAED;;;;;AAGM,SAAU,SAAV,CAAoB,YAApB,EAA4C,KAA5C,EAA2D;AAAC,EAAA;AAAD,IAAwB;AAAC,EAAA,GAAG,EAAE;AAAN,CAAnF,EAA+F;AACnG,QAAM,QAAQ,GAAG,+BAAoB,KAApB,CAAjB;AAEA,QAAM,GAAG,GAAG,aAAa,CAAC,YAAD,CAAb,GAA8B,KAA9B,GAAsC,EAAlD;;AAEA,WAAS,IAAT,CAAc,QAAd,EAAgC;AAC9B,QAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B;AACA,aAAO,IAAI,GAAG,WAAW,QAAQ,MAAjC;AACD,KAHD,MAGO;AACL,aAAO,GAAG,GAAG,GAAG,QAAQ,IAAI,QAAQ,GAApC;AACD;AACF;;AAED,MAAI,YAAJ;AAEA,QAAM,QAAQ,GAAiB,EAA/B;;AAEA,OAAK,MAAM,IAAX,IAAmB,cAAnB,EAAmC;AACjC,QAAI,gBAAgB,CAAC,YAAD,EAAe,IAAf,CAApB,EAA0C;AACxC,MAAA,QAAQ,CAAC,IAAD,CAAR,GAAiB,IAAI,CAAC,IAAD,CAArB;AACA,MAAA,YAAY,GAAG,IAAf;AACD;AACF;;AAED,MAAI,GAAJ,EAAS;AACP,IAAA,QAAQ,CAAC,YAAD,CAAR,IAA0B,IAA1B;AACD;;AAED,SAAO,kCAAmB,QAAnB,CAAP;AACD;;AAEK,SAAU,2BAAV,CAAsC,QAAtC,EAAwD;AAC5D,MAAI,CAAC,QAAL,EAAe;AACb,WAAO,SAAP;AACD;;AAED,QAAM,aAAa,GAAG,gBAAgB,CAAC,QAAD,CAAtC;AACA,SAAO,qBAAqB,sCAAU,aAAV,CAAwB,KAAK,sCAAU,mBAAV,CAA8B,GAAvF;AACD;AAED;;;;;AAGM,SAAU,gBAAV,CAA2B,QAA3B,EAA+C,KAA/C,EAA8D,UAA9D,EAAiF;AACrF,MAAI,CAAC,QAAL,EAAe;AACb,WAAO,SAAP;AACD;;AAED,QAAM,IAAI,GAAG,2BAA2B,CAAC,QAAD,CAAxC,CALqF,CAOrF;AACA;AACA;;AACA,QAAM,GAAG,GAAG,UAAU,IAAI,aAAa,CAAC,QAAD,CAAvC;AAEA,SAAO,GAAG,GAAG,GAAG,KAAH,GAAW,MAAM,UAAU,KAAK,KAAK,IAAI,GAAtD;AACD;;AAEK,SAAU,iBAAV,CAA4B,QAA5B,EAA+D;AACnE,MAAI,CAAC,QAAL,EAAe;AACb,WAAO,SAAP;AACD;;AAED,MAAI,MAAJ;;AACA,MAAI,wBAAS,QAAT,CAAJ,EAAwB;AACtB,IAAA,MAAM,GAAG;AACP,MAAA,IAAI,EAAE;AADC,KAAT;AAGD,GAJD,MAIO,IAAI,wBAAS,QAAT,CAAJ,EAAwB;AAC7B,IAAA,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,QADC,CAAA,EAEA,QAAQ,CAAC,IAAT,GAAgB;AAAC,MAAA,IAAI,EAAE,QAAQ,CAAC;AAAhB,KAAhB,GAAwC,EAFxC,CAAN;AAID;;AAED,MAAI,aAAa,CAAC,MAAM,CAAC,IAAR,CAAjB,EAAgC;AAC9B,IAAA,MAAM,CAAC,GAAP,GAAa,IAAb;AACA,IAAA,MAAM,CAAC,IAAP,GAAc,gBAAgB,CAAC,MAAM,CAAC,IAAR,CAA9B;AACD;;AAED,SAAO,MAAP;AACD;;AAEK,SAAU,gBAAV,CAA2B,EAA3B,EAAwD;AAC5D,QAAM,EAAA,GAAiB,iBAAiB,CAAC,EAAD,CAAxC;AAAA,QAAM;AAAC,IAAA;AAAD,MAAI,EAAV;AAAA,QAAe,IAAI,GAAA,mBAAA,EAAA,EAAb,CAAA,KAAA,CAAa,CAAnB;;AAEA,MAAI,IAAI,CAAC,IAAT,EAAe;AACb,WACE,CAAC,GAAG,GAAG,KAAH,GAAW,EAAf,IACA,gBAAK,IAAL,EACG,GADH,CACO,CAAC,IAAI,mBAAQ,GAAG,CAAC,KAAK,MAAN,GAAe,EAAf,GAAoB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAD,CAAG,EAAjD,CADZ,EAEG,IAFH,CAEQ,EAFR,CAFF;AAMD,GAPD,MAOO;AACL;AACA,WACE,CAAC,GAAG,GAAG,KAAH,GAAW,EAAf,IACA,UADA,GAEA,gBAAK,IAAL,EACG,GADH,CACO,CAAC,IAAI,mBAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,CAAD,CAAG,EAAxB,CADZ,EAEG,IAFH,CAEQ,EAFR,CAHF;AAOD;AACF;;;;;;;;;;;;;;ACxSD;;AAGA;;AAwCM,SAAU,WAAV,CAAsB,CAAtB,EAA4B;AAChC,SAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAD,CAAf;AACD;;AAgCK,SAAU,aAAV,CAAwB,KAAxB,EAAsC;AAC1C,SAAO,CAAC,CAAC,KAAK,CAAC,MAAD,CAAd;AACD;;AAqEK,SAAU,sBAAV,CAAiC,MAAjC,EAAiD;AACrD,MAAI,CAAC,uBAAQ,MAAR,CAAL,EAAsB;AACpB,WAAO,YAAY,MAAZ,IAAsB,EAAE,UAAU,MAAZ,CAA7B;AACD;;AACD,SAAO,KAAP;AACD;;AAEK,SAAU,qBAAV,CAAgC,MAAhC,EAAgD;AACpD,MAAI,CAAC,uBAAQ,MAAR,CAAL,EAAsB;AACpB,WAAO,YAAY,MAAZ,IAAsB,UAAU,MAAvC;AACD;;AACD,SAAO,KAAP;AACD;;AAEK,SAAU,eAAV,CAA0B,MAA1B,EAA0C;AAC9C,MAAI,CAAC,uBAAQ,MAAR,CAAL,EAAsB;AACpB,WAAO,WAAW,MAAX,IAAqB,UAAU,MAAtC;AACD;;AACD,SAAO,KAAP;AACD;;AA4ED,MAAM,oBAAoB,GAA2B;AACnD,EAAA,IAAI,EAAE,CAD6C;AAEnD,EAAA,WAAW,EAAE,CAFsC;AAGnD,EAAA,QAAQ,EAAE,CAHyC;AAInD,EAAA,mBAAmB,EAAE,CAJ8B;AAKnD,EAAA,KAAK,EAAE,CAL4C;AAMnD,EAAA,OAAO,EAAE,CAN0C;AAOnD,EAAA,IAAI,EAAE,CAP6C;AAQnD,EAAA,WAAW,EAAE,CARsC;AASnD,EAAA,MAAM,EAAE,CAT2C;AAUnD,EAAA,SAAS,EAAE,CAVwC;AAWnD,EAAA,WAAW,EAAE,CAXsC;AAYnD,EAAA,aAAa,EAAE,CAZoC;AAanD,EAAA,UAAU,EAAE,CAbuC;AAcnD,EAAA,gBAAgB,EAAE,CAdiC;AAenD,EAAA,UAAU,EAAE,CAfuC;AAgBnD,EAAA,YAAY,EAAE,CAhBqC;AAiBnD,EAAA,gBAAgB,EAAE,CAjBiC;AAkBnD,EAAA,UAAU,EAAE,CAlBuC;AAmBnD,EAAA,QAAQ,EAAE,CAnByC;AAoBnD,EAAA,QAAQ,EAAE,CApByC;AAqBnD,EAAA,WAAW,EAAE,CArBsC;AAsBnD,EAAA,WAAW,EAAE,CAtBsC;AAuBnD,EAAA,IAAI,EAAE,CAvB6C;AAwBnD,EAAA,KAAK,EAAE,CAxB4C;AAyBnD,EAAA,WAAW,EAAE,CAzBsC;AA0BnD,EAAA,OAAO,EAAE,CA1B0C;AA2BnD,EAAA,MAAM,EAAE,CA3B2C;AA4BnD,EAAA,KAAK,EAAE,CA5B4C;AA6BnD,EAAA,QAAQ,EAAE,CA7ByC;AA8BnD,EAAA,IAAI,EAAE,CA9B6C;AA+BnD,EAAA,GAAG,EAAE,CA/B8C;AAgCnD,EAAA,EAAE,EAAE,CAhC+C;AAiCnD,EAAA,EAAE,EAAE,CAjC+C;AAkCnD,EAAA,QAAQ,EAAE,CAlCyC;AAmCnD,EAAA,KAAK,EAAE,CAnC4C;AAoCnD,EAAA,MAAM,EAAE,CApC2C;AAqCnD,EAAA,KAAK,EAAE,CArC4C;AAsCnD,EAAA,KAAK,EAAE,CAtC4C;AAuCnD,EAAA,IAAI,EAAE,CAvC6C;AAwCnD,EAAA,QAAQ,EAAE,CAxCyC;AAyCnD,EAAA,UAAU,EAAE,CAzCuC;AA0CnD,EAAA,SAAS,EAAE,CA1CwC;AA2CnD,EAAA,SAAS,EAAE,CA3CwC;AA4CnD,EAAA,UAAU,EAAE,CA5CuC;AA6CnD,EAAA,MAAM,EAAE,CA7C2C;AA8CnD,EAAA,IAAI,EAAE,CA9C6C;AA+CnD,EAAA,OAAO,EAAE,CA/C0C;AAgDnD,EAAA,YAAY,EAAE,CAhDqC;AAiDnD,EAAA,mBAAmB,EAAE,CAjD8B;AAkDnD,EAAA,oBAAoB,EAAE,CAlD6B;AAmDnD,EAAA,sBAAsB,EAAE,CAnD2B;AAoDnD,EAAA,uBAAuB,EAAE,CApD0B;AAqDnD,EAAA,MAAM,EAAE,CArD2C;AAsDnD,EAAA,KAAK,EAAE,CAtD4C;AAuDnD,EAAA,MAAM,EAAE,CAvD2C,CAyDnD;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAlEmD,CAArD;AAqEO,MAAM,eAAe,GAAG,gBAAK,oBAAL,CAAxB;;AAEA,MAAM,aAAa,GAAuB;AAC/C,EAAA,GAAG,EAAE,CAD0C;AAE/C,EAAA,IAAI,EAAE,CAFyC;AAG/C,EAAA,KAAK,EAAE,CAHwC;AAI/C,EAAA,KAAK,EAAE,CAJwC;AAK/C,EAAA,IAAI,EAAE,CALyC;AAM/C,EAAA,IAAI,EAAE,CANyC;AAO/C,EAAA,IAAI,EAAE,CAPyC;AAQ/C,EAAA,IAAI,EAAE,CARyC;AAS/C,EAAA,KAAK,EAAE,CATwC;AAU/C,EAAA,MAAM,EAAE,CAVuC;AAW/C,EAAA,IAAI,EAAE,CAXyC;AAY/C,EAAA,KAAK,EAAE;AAZwC,CAA1C,EAeP;;;AACO,MAAM,wBAAwB,GAAG,CACtC,cADsC,EAEtC,qBAFsC,EAGtC,sBAHsC,EAItC,wBAJsC,EAKtC,yBALsC,CAAjC;;;;;;;;;;;;;;;;;;;;;;ACpXP;;AACA;;AAGA;;AACA;;AAmCM,SAAU,oBAAV,CAA+B,SAA/B,EAAuE;AAC3E,SAAO,SAAS,KAAA,IAAT,IAAA,SAAS,KAAA,KAAA,CAAT,GAAS,KAAA,CAAT,GAAA,SAAS,CAAG,WAAH,CAAhB;AACD;;AAuBK,SAAU,qBAAV,CAAgC,SAAhC,EAA8C;AAClD,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,KAAV,KAAoB,SAA7D;AACD;;AASK,SAAU,kBAAV,CAA6B,SAA7B,EAA2C;AAC/C,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,EAAV,KAAiB,SAA1D;AACD;;AASK,SAAU,mBAAV,CAA8B,SAA9B,EAA4C;AAChD,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,GAAV,KAAkB,SAA3D;AACD;;AASK,SAAU,kBAAV,CAA6B,SAA7B,EAA2C;AAC/C,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,EAAV,KAAiB,SAA1D;AACD;;AASK,SAAU,mBAAV,CAA8B,SAA9B,EAA4C;AAChD,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,GAAV,KAAkB,SAA3D;AACD;;AAYK,SAAU,qBAAV,CAAgC,SAAhC,EAA8C;AAClD,MAAI,SAAS,IAAI,SAAS,CAAC,KAA3B,EAAkC;AAChC,QAAI,uBAAQ,SAAS,CAAC,KAAlB,KAA4B,SAAS,CAAC,KAAV,CAAgB,MAAhB,KAA2B,CAA3D,EAA8D;AAC5D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,uBAAY,SAAS,CAAC,KAAtB,CAAJ,EAAkC;AACvC,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAiBK,SAAU,qBAAV,CAAgC,SAAhC,EAA8C;AAClD,SACE,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,KAAmC,uBAAQ,SAAS,CAAC,KAAlB,KAA4B,uBAAQ,SAAS,CAAC,EAAlB,CAA/D,CADF,CACwF;AADxF;AAGD;;AAEK,SAAU,qBAAV,CAAgC,SAAhC,EAA8C;AAClD,SAAO,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,KAAzB,IAAkC,SAAS,CAAC,KAAV,KAAoB,SAA7D;AACD;;AAEK,SAAU,gBAAV,CACJ,SADI,EACgB;AASpB,SACE,qBAAqB,CAAC,SAAD,CAArB,IACA,qBAAqB,CAAC,SAAD,CADrB,IAEA,qBAAqB,CAAC,SAAD,CAFrB,IAGA,kBAAkB,CAAC,SAAD,CAHlB,IAIA,kBAAkB,CAAC,SAAD,CAJlB,IAKA,mBAAmB,CAAC,SAAD,CALnB,IAMA,mBAAmB,CAAC,SAAD,CAPrB;AASD;;AAED,SAAS,kBAAT,CAA4B,CAA5B,EAAiF,QAAjF,EAAmG;AACjG,SAAO,2BAAU,CAAV,EAAa;AAAC,IAAA,QAAD;AAAW,IAAA,QAAQ,EAAE;AAArB,GAAb,CAAP;AACD;;AAED,SAAS,mBAAT,CAA6B,IAA7B,EAA6E,QAA7E,EAA+F;AAC7F,SAAO,IAAI,CAAC,GAAL,CAAS,CAAC,IAAI,kBAAkB,CAAC,CAAD,EAAI,QAAJ,CAAhC,CAAP;AACD,EAED;;;AACM,SAAU,qBAAV,CAAgC,SAAhC,EAA2D,UAAU,GAAG,IAAxE,EAA4E;;;AAChF,QAAM;AAAC,IAAA;AAAD,MAAU,SAAhB;AACA,QAAM,QAAQ,GAAA,CAAA,EAAA,GAAG,iCAAkB,SAAS,CAAC,QAA5B,CAAH,MAAwC,IAAxC,IAAwC,EAAA,KAAA,KAAA,CAAxC,GAAwC,KAAA,CAAxC,GAAwC,EAAA,CAAE,IAAxD;AACA,QAAM,SAAS,GAAG,QAAQ,GACtB;AACA;AACA;AACA,YAAU,yBAAkB,QAAlB,EAA4B,KAA5B,CAAV,GAA+C,GAJzB,GAKtB,yBAAQ,SAAR,EAAmB;AAAC,IAAA,IAAI,EAAE;AAAP,GAAnB,CALJ;;AAOA,MAAI,qBAAqB,CAAC,SAAD,CAAzB,EAAsC;AACpC,WAAO,SAAS,GAAG,KAAZ,GAAoB,kBAAkB,CAAC,SAAS,CAAC,KAAX,EAAkB,QAAlB,CAA7C;AACD,GAFD,MAEO,IAAI,kBAAkB,CAAC,SAAD,CAAtB,EAAmC;AACxC,UAAM,KAAK,GAAG,SAAS,CAAC,EAAxB;AACA,WAAO,GAAG,SAAS,IAAI,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAA1D;AACD,GAHM,MAGA,IAAI,kBAAkB,CAAC,SAAD,CAAtB,EAAmC;AACxC,UAAM,KAAK,GAAG,SAAS,CAAC,EAAxB;AACA,WAAO,GAAG,SAAS,IAAI,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAA1D;AACD,GAHM,MAGA,IAAI,mBAAmB,CAAC,SAAD,CAAvB,EAAoC;AACzC,UAAM,KAAK,GAAG,SAAS,CAAC,GAAxB;AACA,WAAO,GAAG,SAAS,KAAK,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAA3D;AACD,GAHM,MAGA,IAAI,mBAAmB,CAAC,SAAD,CAAvB,EAAoC;AACzC,UAAM,KAAK,GAAG,SAAS,CAAC,GAAxB;AACA,WAAO,GAAG,SAAS,KAAK,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAA3D;AACD,GAHM,MAGA,IAAI,qBAAqB,CAAC,SAAD,CAAzB,EAAsC;AAC3C,WAAO,YAAY,mBAAmB,CAAC,SAAS,CAAC,KAAX,EAAkB,QAAlB,CAAnB,CAA+C,IAA/C,CAAoD,GAApD,CAAwD,MAAM,SAAS,UAA1F;AACD,GAFM,MAEA,IAAI,qBAAqB,CAAC,SAAD,CAAzB,EAAsC;AAC3C,WAAO,mBAAmB,CAAC,SAAD,EAAY,SAAS,CAAC,KAAtB,CAA1B;AACD,GAFM,MAEA,IAAI,qBAAqB,CAAC,SAAD,CAAzB,EAAsC;AAC3C,UAAM;AAAC,MAAA;AAAD,QAAU,SAAhB;AACA,UAAM,KAAK,GAAG,uBAAY,KAAZ,IAAqB;AAAC,MAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AAAxB,KAArB,GAAsD,KAAK,CAAC,CAAD,CAAzE;AACA,UAAM,KAAK,GAAG,uBAAY,KAAZ,IAAqB;AAAC,MAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AAAxB,KAArB,GAAsD,KAAK,CAAC,CAAD,CAAzE;;AAEA,QAAI,KAAK,KAAK,IAAV,IAAkB,KAAK,KAAK,IAA5B,IAAoC,UAAxC,EAAoD;AAClD,aACE,aACA,SADA,GAEA,KAFA,GAGA,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAHlB,GAIA,IAJA,GAKA,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CALlB,GAMA,IAPF;AASD;;AAED,UAAM,KAAK,GAAG,EAAd;;AACA,QAAI,KAAK,KAAK,IAAd,EAAoB;AAClB,MAAA,KAAK,CAAC,IAAN,CAAW,GAAG,SAAS,OAAO,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAAjE;AACD;;AACD,QAAI,KAAK,KAAK,IAAd,EAAoB;AAClB,MAAA,KAAK,CAAC,IAAN,CAAW,GAAG,SAAS,OAAO,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAiB,EAAjE;AACD;;AAED,WAAO,KAAK,CAAC,MAAN,GAAe,CAAf,GAAmB,KAAK,CAAC,IAAN,CAAW,MAAX,CAAnB,GAAwC,MAA/C;AACD;AAED;;;AACA,QAAM,IAAI,KAAJ,CAAU,4BAA4B,IAAI,CAAC,SAAL,CAAe,SAAf,CAAyB,EAA/D,CAAN;AACD;;AAEK,SAAU,mBAAV,CAA8B,SAA9B,EAAiD,KAAK,GAAG,IAAzD,EAA6D;AACjE,MAAI,KAAJ,EAAW;AACT,WAAO,WAAW,SAAS,kBAAkB,SAAS,GAAtD;AACD,GAFD,MAEO;AACL,WAAO,YAAY,SAAS,mBAAmB,SAAS,GAAxD;AACD;AACF;;AAEK,SAAU,kBAAV,CAA6B,CAA7B,EAAyC;;;AAC7C,MAAI,gBAAgB,CAAC,CAAD,CAAhB,IAAuB,CAAC,CAAC,QAA7B,EAAuC;AACrC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,CADL,CAAA,EACM;AACJ,MAAA,QAAQ,EAAA,CAAA,EAAA,GAAE,iCAAkB,CAAC,CAAC,QAApB,CAAF,MAA+B,IAA/B,IAA+B,EAAA,KAAA,KAAA,CAA/B,GAA+B,KAAA,CAA/B,GAA+B,EAAA,CAAE;AADrC,KADN,CAAA;AAID;;AACD,SAAO,CAAP;AACD;;;;;;;;;;;AC1QD;;AAEA;;;AAGO,MAAM,IAAI,GAAG;AAClB,EAAA,YAAY,EAAE,cADI;AAElB,EAAA,OAAO,EAAE,SAFS;AAGlB,EAAA,QAAQ,EAAE,UAHQ;AAIlB,EAAA,OAAO,EAAE,SAJS;AAKlB,EAAA,OAAO,EAAE;AALS,CAAb;;;AAUD,SAAU,MAAV,CAAiB,CAAjB,EAAuB;AAC3B,SAAO,CAAC,IAAI,IAAZ;AACD;;AAEM,MAAM,YAAY,GAAG,IAAI,CAAC,YAA1B;;AACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAtB;;AACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AAEA,MAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AAIA,MAAM,KAAK,GAAG,gBAAK,IAAL,CAAd;AAEP;;;;;;;;AAKM,SAAU,WAAV,CAAsB,IAAtB,EAAyC;AAC7C,MAAI,IAAJ,EAAU;AACR,IAAA,IAAI,GAAG,IAAI,CAAC,WAAL,EAAP;;AACA,YAAQ,IAAR;AACE,WAAK,GAAL;AACA,WAAK,YAAL;AACE,eAAO,cAAP;;AACF,WAAK,GAAL;AACA,WAAK,QAAL;AACE,eAAO,UAAP;;AACF,WAAK,GAAL;AACA,WAAK,OAAL;AACE,eAAO,SAAP;;AACF,WAAK,GAAL;AACA,WAAK,OAAL;AACE,eAAO,SAAP;;AACF,WAAK,OAAL;AACE,eAAO,SAAP;AAdJ;AAgBD,GAnB4C,CAoB7C;;;AACA,SAAO,SAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;AChDD;;AACA;;AAGA;;AAEA;;AACA;;;;;;AAEO,MAAM,SAAS,GAAG;AACvB;AACA,EAAA,MAAM,EAAE,QAFe;AAGvB,EAAA,GAAG,EAAE,KAHkB;AAIvB,EAAA,GAAG,EAAE,KAJkB;AAKvB,EAAA,IAAI,EAAE,MALiB;AAMvB,EAAA,MAAM,EAAE,QANe;AAQvB,EAAA,QAAQ,EAAE,UARa;AASvB,EAAA,UAAU,EAAE,YATW;AAWvB;AACA,EAAA,IAAI,EAAE,MAZiB;AAavB,EAAA,GAAG,EAAE,KAbkB;AAevB;AACA,EAAA,QAAQ,EAAE,UAhBa;AAiBvB,EAAA,QAAQ,EAAE,UAjBa;AAkBvB,EAAA,SAAS,EAAE,WAlBY;AAmBvB,EAAA,WAAW,EAAE,aAnBU;AAqBvB;AACA,EAAA,OAAO,EAAE,SAtBc;AAuBvB,EAAA,KAAK,EAAE,OAvBgB;AAwBvB,EAAA,IAAI,EAAE;AAxBiB,CAAlB;AA8BP;;;;;;AAIA,MAAM,oBAAoB,GAAmF;AAC3G,EAAA,MAAM,EAAE,SADmG;AAE3G,EAAA,GAAG,EAAE,SAFsG;AAG3G,EAAA,GAAG,EAAE,SAHsG;AAI3G,EAAA,IAAI,EAAE,SAJqG;AAK3G,EAAA,MAAM,EAAE,SALmG;AAM3G,EAAA,QAAQ,EAAE,SANiG;AAO3G,EAAA,UAAU,EAAE,SAP+F;AAQ3G,EAAA,IAAI,EAAE,MARqG;AAS3G,EAAA,GAAG,EAAE,MATsG;AAU3G,EAAA,OAAO,EAAE,SAVkG;AAW3G,iBAAe,aAX4F;AAY3G,EAAA,KAAK,EAAE,kBAZoG;AAa3G,EAAA,IAAI,EAAE,kBAbqG;AAc3G,EAAA,QAAQ,EAAE,cAdiG;AAe3G,EAAA,QAAQ,EAAE,cAfiG;AAgB3G,EAAA,SAAS,EAAE;AAhBgG,CAA7G;AAmBO,MAAM,WAAW,GAAG,gBAAK,oBAAL,CAApB;AAEP;;;;;;AAGM,SAAU,eAAV,CAA0B,UAA1B,EAAiD,UAAjD,EAAsE;AAC1E,QAAM,cAAc,GAAG,oBAAoB,CAAC,UAAD,CAA3C;AACA,QAAM,cAAc,GAAG,oBAAoB,CAAC,UAAD,CAA3C;AACA,SACE,cAAc,KAAK,cAAnB,IACC,cAAc,KAAK,kBAAnB,IAAyC,cAAc,KAAK,MAD7D,IAEC,cAAc,KAAK,kBAAnB,IAAyC,cAAc,KAAK,MAH/D;AAKD;AAED;;;;;AAGA,MAAM,sBAAsB,GAA8B;AACxD;AACA,EAAA,MAAM,EAAE,CAFgD;AAGxD,EAAA,GAAG,EAAE,CAHmD;AAIxD,EAAA,GAAG,EAAE,CAJmD;AAKxD,EAAA,IAAI,EAAE,CALkD;AAMxD,EAAA,MAAM,EAAE,CANgD;AAOxD,EAAA,QAAQ,EAAE,CAP8C;AAQxD,EAAA,UAAU,EAAE,CAR4C;AASxD;AACA,EAAA,IAAI,EAAE,CAVkD;AAWxD,EAAA,GAAG,EAAE,CAXmD;AAYxD;AACA,EAAA,KAAK,EAAE,EAbiD;AAcxD,EAAA,IAAI,EAAE,EAdkD;AAexD;AACA,EAAA,OAAO,EAAE,CAhB+C;AAiBxD,iBAAe,CAjByC;AAkBxD,EAAA,QAAQ,EAAE,CAlB8C;AAmBxD,EAAA,QAAQ,EAAE,CAnB8C;AAoBxD,EAAA,SAAS,EAAE;AApB6C,CAA1D;AAuBA;;;;AAGM,SAAU,mBAAV,CAA8B,SAA9B,EAAkD;AACtD,SAAO,sBAAsB,CAAC,SAAD,CAA7B;AACD;;AAEM,MAAM,+BAA+B,GAAgB,CAAC,QAAD,EAAW,KAAX,EAAkB,KAAlB,EAAyB,MAAzB,EAAiC,QAAjC,EAA2C,MAA3C,EAAmD,KAAnD,CAArD;;AACP,MAAM,8BAA8B,GAAG,qBAAM,+BAAN,CAAvC;AAEO,MAAM,mBAAmB,GAAgB,CAAC,QAAD,EAAW,KAAX,EAAkB,KAAlB,EAAyB,MAAzB,EAAiC,QAAjC,CAAzC;;AAEP,MAAM,yBAAyB,GAAG,qBAAM,mBAAN,CAAlC;;AAEM,SAAU,cAAV,CAAyB,IAAzB,EAAwC;AAC5C,SAAO,IAAI,IAAI,yBAAf;AACD;;AAEM,MAAM,6BAA6B,GAAgB,CAAC,UAAD,EAAa,UAAb,EAAyB,WAAzB,CAAnD;;AACP,MAAM,4BAA4B,GAAG,qBAAM,6BAAN,CAArC;AAEO,MAAM,wBAAwB,GAAgB,+BAA+B,CAAC,MAAhC,CAAuC,CAC1F,UAD0F,EAE1F,UAF0F,EAG1F,WAH0F,EAI1F,YAJ0F,EAK1F,UAL0F,CAAvC,CAA9C;;AAOP,MAAM,uBAAuB,GAAG,qBAAM,wBAAN,CAAhC;AAEO,MAAM,sBAAsB,GAAgB,CAAC,SAAD,EAAY,aAAZ,EAA2B,OAA3B,EAAoC,MAApC,CAA5C;;AACP,MAAM,qBAAqB,GAAG,qBAAM,sBAAN,CAA9B;AAEO,MAAM,gBAAgB,GAAgB,CAAC,MAAD,EAAS,KAAT,CAAtC;;;AAED,SAAU,iBAAV,CAA4B,IAA5B,EAA2C;AAC/C,SAAO,IAAI,IAAI,qBAAf;AACD;;AAEK,SAAU,mBAAV,CACJ,IADI,EACW;AAEf,SAAO,IAAI,IAAI,uBAAf;AACD;;AAEK,SAAU,wBAAV,CACJ,IADI,EACW;AAEf,SAAO,IAAI,IAAI,8BAAf;AACD;;AAEK,SAAU,sBAAV,CAAiC,IAAjC,EAAgD;AACpD,SAAO,IAAI,IAAI,4BAAf;AACD;;AA4MM,MAAM,kBAAkB,GAAgB;AAC7C,EAAA,YAAY,EAAE,GAD+B;AAG7C,EAAA,mBAAmB,EAAE,GAHwB;AAI7C,EAAA,oBAAoB,EAAE,CAJuB;AAM7C,EAAA,WAAW,EAAE,CANgC;AAQ7C,EAAA,WAAW,EAAE,CARgC;AAS7C,EAAA,WAAW,EAAE,EATgC;AAW7C,EAAA,UAAU,EAAE,GAXiC;AAY7C,EAAA,UAAU,EAAE,GAZiC;AAc7C;AACA,EAAA,OAAO,EAAE,CAfoC;AAiB7C,EAAA,cAAc,EAAE,CAjB6B;AAkB7C,EAAA,cAAc,EAAE,CAlB6B;AAmB7C,EAAA,aAAa,EAAE,CAnB8B;AAoB7C,EAAA,aAAa,EAAE;AApB8B,CAAxC;;;AAkDD,SAAU,gBAAV,CAA2B,MAA3B,EAAoE;AACxE,SAAO,CAAC,wBAAS,MAAT,CAAD,IAAqB,CAAC,CAAC,MAAM,CAAC,MAAD,CAApC;AACD;;AAEK,SAAU,iBAAV,CAA4B,MAA5B,EAA0C;AAC9C,SAAO,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAG,WAAH,CAAb;AACD;;AAmBK,SAAU,iBAAV,CAA4B,MAA5B,EAA0C;AAC9C,SAAO,MAAM,IAAI,MAAM,CAAC,WAAD,CAAvB;AACD;;AAoMD,MAAM,oBAAoB,GAAsB;AAC9C,EAAA,IAAI,EAAE,CADwC;AAE9C,EAAA,MAAM,EAAE,CAFsC;AAG9C,EAAA,SAAS,EAAE,CAHmC;AAI9C,EAAA,KAAK,EAAE,CAJuC;AAK9C,EAAA,KAAK,EAAE,CALuC;AAM9C,EAAA,MAAM,EAAE,CANsC;AAO9C,EAAA,IAAI,EAAE,CAPwC;AAQ9C;AACA,EAAA,OAAO,EAAE,CATqC;AAU9C,EAAA,KAAK,EAAE,CAVuC;AAW9C;AACA,EAAA,KAAK,EAAE,CAZuC;AAa9C,EAAA,IAAI,EAAE,CAbwC;AAc9C;AACA,EAAA,IAAI,EAAE,CAfwC;AAgB9C,EAAA,QAAQ,EAAE,CAhBoC;AAiB9C,EAAA,QAAQ,EAAE,CAjBoC;AAkB9C,EAAA,WAAW,EAAE,CAlBiC;AAmB9C,EAAA,IAAI,EAAE,CAnBwC;AAoB9C;AACA,EAAA,OAAO,EAAE,CArBqC;AAsB9C,EAAA,YAAY,EAAE,CAtBgC;AAuB9C,EAAA,YAAY,EAAE;AAvBgC,CAAhD;AA0BO,MAAM,gBAAgB,GAAG,gBAAK,oBAAL,CAAzB;;AAEP,MAAM;AAAC,EAAA,IAAD;AAAO,EAAA,MAAP;AAAe,EAAA,KAAf;AAAsB,EAAA;AAAtB,IAAoF,oBAA1F;AAAA,MAAuC,+CAA+C,GAAA,mBAAI,oBAAJ,EAAhF,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,CAAgF,CAAtF;AAEO,MAAM,2CAA2C,GAAG,gBAAK,+CAAL,CAApD;;AAEA,MAAM,gBAAgB,GAAG,sBAAsB,EAA/C;;;AAED,SAAU,wBAAV,CAAmC,SAAnC,EAAyD,QAAzD,EAA8E;AAClF,UAAQ,QAAR;AACE,SAAK,MAAL;AACA,SAAK,QAAL;AACA,SAAK,SAAL;AACA,SAAK,OAAL;AACE,aAAO,IAAP;;AACF,SAAK,QAAL;AACA,SAAK,aAAL;AACE,aAAO,CAAC,oBAAS,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,CAAT,EAAwC,SAAxC,CAAR;;AACF,SAAK,MAAL;AACE,aAAO,CAAC,oBAAS,CAAC,OAAD,EAAU,MAAV,EAAkB,UAAlB,EAA8B,SAA9B,CAAT,EAAmD,SAAnD,CAAR;;AACF,SAAK,OAAL;AACE,aAAO,wBAAwB,CAAC,SAAD,CAAxB,IAAuC,SAAS,KAAK,MAArD,IAA+D,SAAS,KAAK,OAApF;;AACF,SAAK,SAAL;AACE,aAAO,wBAAwB,CAAC,SAAD,CAAxB,IAAuC,oBAAS,CAAC,OAAD,EAAU,MAAV,CAAT,EAA4B,SAA5B,CAA9C;;AACF,SAAK,cAAL;AACA,SAAK,OAAL;AACE,aAAO,oBAAS,CAAC,OAAD,EAAU,MAAV,CAAT,EAA4B,SAA5B,CAAP;;AACF,SAAK,cAAL;AACE,aAAO,SAAS,KAAK,MAArB;;AACF,SAAK,WAAL;AACA,SAAK,OAAL;AACE,aAAO,wBAAwB,CAAC,SAAD,CAA/B;;AACF,SAAK,MAAL;AACE,aAAO,wBAAwB,CAAC,SAAD,CAAxB,IAAuC,SAAS,KAAK,UAArD,IAAmE,SAAS,KAAK,WAAxF;;AACF,SAAK,UAAL;AACE,aAAO,SAAS,KAAK,KAArB;;AACF,SAAK,MAAL;AACE,aAAO,SAAS,KAAK,KAArB;;AACF,SAAK,UAAL;AACE,aAAO,SAAS,KAAK,QAArB;;AACF,SAAK,MAAL;AACE,aACE,mBAAmB,CAAC,SAAD,CAAnB,IACA,CAAC,oBACC,CACE,KADF,EAEE,MAFF,EAGE,KAHF,EAIE,WAJF,EAKE,UALF,CAKa;AALb,OADD,EAQC,SARD,CAFH;AAhCJ;AA8CD;AAED;;;;;AAGM,SAAU,mCAAV,CAA8C,OAA9C,EAAgE,QAAhE,EAAqF;AACzF,UAAQ,QAAR;AACE,SAAK,aAAL;AACA,SAAK,QAAL;AACA,SAAK,WAAL;AACE,UAAI,CAAC,4BAAe,OAAf,CAAL,EAA8B;AAC5B,eAAO,GAAG,CAAC,OAAJ,CAAY,kCAAZ,CAA+C,OAA/C,CAAP;AACD;;AACD,aAAO,SAAP;;AACF,SAAK,OAAL;AACA,SAAK,MAAL;AACA,SAAK,MAAL;AACA,SAAK,QAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACA,SAAK,UAAL;AACA,SAAK,UAAL;AACA,SAAK,MAAL;AACA,SAAK,SAAL;AACA,SAAK,cAAL;AACA,SAAK,cAAL;AACA,SAAK,SAAL;AACA,SAAK,OAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAO,SAAP;AAAkB;AAxBtB;AA0BD;;AAEK,SAAU,wBAAV,CAAmC,aAAnC,EAA6D,YAA7D,EAA+E;AACnF,MAAI,oBAAS,CAAC,aAAD,EAAU,aAAV,CAAT,EAA6B,YAA7B,CAAJ,EAAgD;AAC9C,WAAO,aAAa,KAAK,SAAlB,IAA+B,iBAAiB,CAAC,aAAD,CAAvD;AACD,GAFD,MAEO,IAAI,YAAY,KAAK,cAArB,EAA+B;AACpC,WAAO,oBAAS,CAAC,SAAS,CAAC,IAAX,EAAiB,SAAS,CAAC,GAA3B,EAAgC,SAAhC,CAAT,EAAqD,aAArD,CAAP;AACD,GAFM,MAEA,IAAI,YAAY,KAAK,kBAArB,EAAmC;AACxC,WAAO,oBACL,CACE,SAAS,CAAC,GADZ,EAEE,SAAS,CAAC,GAFZ,EAGE,SAAS,CAAC,IAHZ,EAIE,SAAS,CAAC,MAJZ,EAKE,SAAS,CAAC,QALZ,EAME,SAAS,CAAC,QANZ,EAOE,SAAS,CAAC,SAPZ,EAQE,SAAS,CAAC,MARZ,EASE,SATF,CADK,EAYL,aAZK,CAAP;AAcD;;AAED,SAAO,IAAP;AACD;;AAEK,SAAU,uBAAV,CAAkC,OAAlC,EAAoD,SAApD,EAAwE;AAC5E,MAAI,CAAC,OAAO,CAAC,cAAR,CAAuB,OAAvB,CAAL,EAAsC;AACpC,WAAO,KAAP;AACD;;AACD,UAAQ,OAAR;AACE,SAAK,OAAO,CAAC,CAAb;AACA,SAAK,OAAO,CAAC,CAAb;AACA,SAAK,OAAO,CAAC,KAAb;AACA,SAAK,OAAO,CAAC,MAAb;AACE,aAAO,wBAAwB,CAAC,SAAD,CAAxB,IAAuC,oBAAS,CAAC,MAAD,EAAS,OAAT,CAAT,EAA4B,SAA5B,CAA9C;;AACF,SAAK,OAAO,CAAC,IAAb,CANF,CAMqB;;AACnB,SAAK,OAAO,CAAC,WAAb;AACA,SAAK,OAAO,CAAC,OAAb;AACA,SAAK,OAAO,CAAC,WAAb;AACA,SAAK,OAAO,CAAC,aAAb;AACA,SAAK,OAAO,CAAC,KAAb;AACE;AACA;AACA,aACE,wBAAwB,CAAC,SAAD,CAAxB,IACA,sBAAsB,CAAC,SAAD,CADtB,IAEA,oBAAS,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAAT,EAAuC,SAAvC,CAHF;;AAKF,SAAK,OAAO,CAAC,KAAb;AACA,SAAK,OAAO,CAAC,IAAb;AACA,SAAK,OAAO,CAAC,MAAb;AACE,aAAO,SAAS,KAAK,MAArB;AAA6B;;AAC/B,SAAK,OAAO,CAAC,UAAb;AACE,aAAO,SAAS,KAAK,SAAd,IAA2B,sBAAsB,CAAC,SAAD,CAAxD;;AACF,SAAK,OAAO,CAAC,KAAb;AACE,aAAO,SAAS,KAAK,SAArB;AAAgC;AA1BpC;AA4BD;;AAEK,SAAU,qBAAV,CAAgC,OAAhC,EAAkD,YAAlD,EAAoE;AACxE,SAAO,gBAAgB,CAAC,yBAAyB,CAAC,OAAD,EAAU,YAAV,CAA1B,CAAvB;AACD,EAMD;;;AACA,SAAS,sBAAT,GAA+B;;;AAC7B,QAAM,KAAK,GAAmB,EAA9B;;AACA,OAAK,MAAM,OAAX,IAAsB,gBAAtB,EAAgC;AAC9B,SAAK,MAAM,YAAX,IAA2B,WAA3B,EAAkC;AAChC,WAAK,MAAM,SAAX,IAAwB,WAAxB,EAAqC;AACnC,cAAM,GAAG,GAAG,yBAAyB,CAAC,OAAD,EAAU,YAAV,CAArC;;AACA,YAAI,uBAAuB,CAAC,OAAD,EAAU,SAAV,CAAvB,IAA+C,wBAAwB,CAAC,SAAD,EAAY,YAAZ,CAA3E,EAAsG;AACpG,UAAA,KAAK,CAAC,GAAD,CAAL,GAAU,CAAA,EAAA,GAAG,KAAK,CAAC,GAAD,CAAR,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,EAA3B;AACA,UAAA,KAAK,CAAC,GAAD,CAAL,CAAW,IAAX,CAAgB,SAAhB;AACD;AACF;AACF;AACF;;AACD,SAAO,KAAP;AACD;;AAED,SAAS,yBAAT,CAAmC,OAAnC,EAAqD,YAArD,EAAuE;AACrE,SAAO,OAAO,GAAG,GAAV,GAAgB,YAAvB;AACD;;;;;;;;;;;;;;;;;ACv0BD;;AACA;;AACA;;AACA;;AACA;;AAqBA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAGM,SAAU,kCAAV,CACJ,MADI,EAGH;AAED,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,UAAV;AAAsB,IAAA,OAAtB;AAA+B,IAAA,KAA/B;AAAsC,IAAA;AAAtC,MAAgD,MAAtD;AACA,QAAM,GAAG,GAAG,QAAQ,CAAC,MAAD,CAApB,CAHC,CAKD;;AACA,OACE;AACA,8BAAW,UAAX,KACA,CAAC,sCAAsB,UAAU,CAAC,SAAjC,CADD,IAEA;AACA,EAAA,KAHA,IAIA,qCAAyB,KAAK,CAAC,GAAN,CAAU,MAAV,CAAzB,CAJA,IAKA,KAAK,CAAC,GAAN,CAAU,MAAV,MAAsB,KAPxB,EAQE;AACA,WAAO,uBAAuB,CAAC;AAC7B,MAAA,QAAQ,EAAE,UADmB;AAE7B,MAAA,OAF6B;AAG7B,MAAA,OAH6B;AAI7B,MAAA,GAJ6B;AAK7B,MAAA;AAL6B,KAAD,CAA9B;AAOD;;AACD,SAAO,GAAP;AACD;;AAEK,SAAU,uBAAV,CAAkC;AACtC,EAAA,QADsC;AAEtC,EAAA,OAFsC;AAGtC,EAAA,OAHsC;AAItC,EAAA,GAJsC;AAKtC,EAAA;AALsC,CAAlC,EAYL;AACC,MAAI,sBAAW,OAAO,CAAC,IAAnB,CAAJ,EAA8B;AAC5B;AACA,WAAO,GAAP;AACD;;AAED,QAAM,OAAO,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAhB;;AACA,MAAI,OAAO,KAAK,IAAhB,EAAsB;AACpB;AACA,WAAO,GAAP;AACD;;AAED,SAAO,CAAC,wBAAwB,CAAC,QAAD,EAAW,OAAX,CAAzB,EAA8C,GAA9C,CAAP;AACD;;AAEK,SAAU,wBAAV,CAAmC,QAAnC,EAA+D,OAA/D,EAA8G;AAClH,QAAM,IAAI,GAAG,qBAAqB,CAAC,QAAD,EAAW,IAAX,CAAlC;AAEA,QAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB,CAHkH,CAGtB;;AAC5F,QAAM,YAAY,GAChB,WAAW,KAAK,GAAhB,GACI;AAAC,IAAA,KAAK,EAAE;AAAC,MAAA,KAAK,EAAE;AAAR;AAAR,GADJ,GAEI;AACA;AAAC,IAAA,KAAK,EAAE;AAAR,GAJN;AAMA,SAAA,MAAA,CAAA,MAAA,CAAA;AAAQ,IAAA;AAAR,GAAA,EAAiB,YAAjB,CAAA;AACD;;AAEK,SAAU,qBAAV,CAAgC,KAAhC,EAAqE,OAAO,GAAG,IAA/E,EAAmF;AACvF,SAAO,oCAAoB,wBAAS,KAAT,IAAkB,KAAlB,GAA0B,yBAAQ,KAAR,EAAe;AAAC,IAAA,IAAI,EAAE;AAAP,GAAf,CAA9C,EAA+E,CAAC,OAAhF,CAAP;AACD;;AAEK,SAAU,cAAV,CAAyB,QAAzB,EAAmD;AACvD,QAAM;AAAC,IAAA;AAAD,MAAU,QAAhB;;AACA,MAAI,0BAAW,KAAX,CAAJ,EAAuB;AACrB,WAAO,8BAAe,KAAf,CAAP;AACD;;AACD,SAAO,GAAG,IAAI,CAAC,SAAL,CAAe,KAAf,CAAqB,EAA/B;AACD;;AAEK,SAAU,0BAAV,CACJ,QADI,EAEJ,SAFI,EAGJ,GAHI,EAIJ,MAJI,EAI2D;AAE/D,QAAM,GAAG,GAAe,EAAxB;;AAEA,MAAI,SAAJ,EAAe;AACb,IAAA,GAAG,CAAC,KAAJ,GAAY,SAAZ;AACD;;AAED,MAAI,4BAAmB,QAAnB,CAAJ,EAAkC;AAChC,UAAM;AAAC,MAAA;AAAD,QAAU,QAAhB;;AACA,QAAI,0BAAW,KAAX,CAAJ,EAAuB;AACrB,MAAA,GAAG,CAAC,MAAJ,GAAa,8BAAe,KAAf,CAAb;AACD,KAFD,MAEO,IAAI,uBAAY,KAAZ,CAAJ,EAAwB;AAC7B,MAAA,GAAG,CAAC,MAAJ,GAAa,KAAK,CAAC,MAAnB;AACD,KAFM,MAEA;AACL,MAAA,GAAG,CAAC,KAAJ,GAAY,KAAZ;AACD;AACF,GATD,MASO;AACL,IAAA,GAAG,CAAC,KAAJ,GAAY,yBAAQ,QAAR,EAAkB,GAAlB,CAAZ;AACD;;AAED,MAAI,MAAJ,EAAY;AACV,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAiB,MAAvB;;AACA,QAAI,MAAJ,EAAY;AACV,MAAA,GAAG,CAAC,MAAJ,GAAa,MAAb;AACD;;AACD,QAAI,IAAJ,EAAU;AACR,MAAA,GAAG,CAAC,IAAJ,GAAW,IAAX;AACD;AACF;;AACD,SAAO,GAAP;AACD;AAED;;;;;AAGM,SAAU,qBAAV,CAAgC;AACpC,EAAA,SADoC;AAEpC,EAAA,eAFoC;AAGpC,EAAA,gBAHoC;AAIpC,EAAA,MAJoC;AAKpC,EAAA,WALoC;AAMpC,EAAA,IAAI,GAAG;AAN6B,CAAhC,EAcL;AACC,QAAM,IAAI,GAAG,IAAI,IAAJ,IAAY,IAAI,GAAG,CAAnB,GAAuB,OAAvB,GAAiC,SAA9C;AACA,QAAM,KAAK,GAAG,yBAAQ,eAAR,EAAyB;AAAC,IAAA,IAAD;AAAO,IAAA,MAAM,EAAE;AAAf,GAAzB,CAAd;AACA,QAAM,GAAG,GACP,gBAAgB,KAAK,SAArB,GACI,yBAAQ,gBAAR,EAA0B;AAAC,IAAA;AAAD,GAA1B,CADJ,GAEI,yBAAQ,eAAR,EAAyB;AAAC,IAAA,MAAM,EAAE,KAAT;AAAgB,IAAA;AAAhB,GAAzB,CAHN;AAKA,QAAM,GAAG,GAAe,EAAxB;;AAEA,MAAI,IAAI,KAAK,CAAT,IAAc,IAAI,KAAK,CAA3B,EAA8B;AAC5B,IAAA,GAAG,CAAC,KAAJ,GAAY,SAAZ;AACA,UAAM,GAAG,GAAG,IAAI,KAAK,CAAT,GAAa,KAAb,GAAqB,GAAjC;AACA,IAAA,GAAG,CAAC,KAAJ,GAAY,GAAZ;AACD,GAJD,MAIO;AACL,UAAM,KAAK,GAAG,GAAG,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,GAAG,EAAvD;AACA,IAAA,GAAG,CAAC,MAAJ,GAAa,UAAU,SAAS,MAAM,KAAK,GAA3C;AACD;;AAED,MAAI,MAAJ,EAAY;AACV,IAAA,GAAG,CAAC,MAAJ,GAAa,MAAb;AACD;;AACD,SAAO,GAAP;AACD;AAsBD;;;;;AAGM,SAAU,QAAV,CAAmB;AACvB,EAAA,OADuB;AAEvB,EAAA,UAFuB;AAGvB,EAAA,WAHuB;AAIvB,EAAA,OAJuB;AAKvB,EAAA,MALuB;AAMvB,EAAA,SANuB;AAOvB,EAAA,KAPuB;AAQvB,EAAA,KARuB;AASvB,EAAA,MATuB;AAUvB,EAAA,UAVuB;AAWvB,EAAA;AAXuB,CAAnB,EAYW;SAAA,CACf;;;AACA,MAAI,UAAJ,EAAgB;AACd;AAEA,QAAI,mCAAkB,UAAlB,CAAJ,EAAmC;AACjC,UAAI,iCAAgB,UAAhB,CAAJ,EAAiC;AAC/B,QAAA,IAAI,GACF,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAA,IAAA,GACA,yBAAQ;AACN,UAAA,OADM;AAEN,UAAA,QAAQ,EAAE,UAFJ;AAGN,UAAA,SAAS,EAAE,WAHL;AAIN,UAAA,OAJM;AAKN,UAAA,KALM;AAMN,UAAA,MANM;AAON,UAAA,UAAU,EAAE;AAPN,SAAR,CAFF;AAWA,cAAM;AAAC,UAAA,GAAD;AAAM,UAAA,QAAN;AAAgB,UAAA;AAAhB,YAAwB,UAA9B;;AAEA,YAAI,oBAAU,GAAV,KAAmB,IAAI,IAAI,QAAR,IAAoB,IAAI,KAAK,cAApD,EAA+D;AAC7D;AACA;AACA,cAAI,KAAK,IAAI,KAAK,CAAC,MAAnB,EAA2B;AACzB;AACA,mBAAO,0BAA0B,CAAC,UAAD,EAAa,SAAb,EAAwB;AAAC,cAAA,SAAS,EAAE;AAAZ,aAAxB,EAA4C;AAAC,cAAA;AAAD,aAA5C,CAAjC;AACD;;AACD,cAAI,IAAJ,EAAU;AACR;AACA;AACA,mBAAO,qBAAqB,CAAC;AAAC,cAAA,SAAD;AAAY,cAAA,eAAe,EAAE,UAA7B;AAAyC,cAAA,IAAzC;AAA+C,cAAA;AAA/C,aAAD,CAA5B;AACD;;AACD,iBAAO,0BAA0B,CAC/B,UAD+B,EAE/B,SAF+B,EAG/B,kCAAiB,UAAjB,EAA6B,OAA7B,IAAwC;AAAC,YAAA,SAAS,EAAE;AAAZ,WAAxC,GAA+D,EAHhC,EAI/B;AACE,YAAA;AADF,WAJ+B,CAAjC;AAQD,SApBD,MAoBO,IAAI,mBAAS,GAAT,CAAJ,EAAmB;AACxB,cAAI,4BAAW,WAAX,CAAJ,EAA6B;AAC3B,mBAAO,qBAAqB,CAAC;AAC3B,cAAA,SAD2B;AAE3B,cAAA,eAAe,EAAE,UAFU;AAG3B,cAAA,gBAAgB,EAAE,WAHS;AAI3B,cAAA,IAJ2B;AAK3B,cAAA;AAL2B,aAAD,CAA5B;AAOD,WARD,MAQO;AACL,kBAAM,QAAQ,GAAG,OAAO,KAAK,UAAZ,GAAgB,WAAhB,GAAqB,WAAtC;AACA,YAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,wBAAZ,CAAqC,QAArC,CAAT;AACD;AACF;AACF;;AAED,YAAM,SAAS,GAAG,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,GAAP,CAAW,MAAX,CAAlB;AACA,aAAO,0BAA0B,CAC/B,UAD+B,EAE/B,SAF+B,EAG/B,8BAAkB,SAAlB,IAA+B;AAAC,QAAA,SAAS,EAAE;AAAZ,OAA/B,GAAsD,EAHvB,EAG2B;AAC1D;AACE,QAAA,MADF;AAEE;AACA,QAAA,IAAI,EAAE,SAAS,KAAK,MAAd,GAAsB,CAAA,EAAA,GAAC,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAA,IAAA,GAAQ,UAAU,CAAC,IAApB,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA4B,GAAlD,GAAwD;AAHhE,OAJ+B,CAAjC;AAUD,KA9DD,MA8DO,IAAI,4BAAW,UAAX,CAAJ,EAA4B;AACjC,YAAM,KAAK,GAAG,UAAU,CAAC,KAAzB;AACA,YAAM,YAAY,GAAG,MAAM,GAAG;AAAC,QAAA;AAAD,OAAH,GAAc,EAAzC;AAEA,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,2BAA2B,CAAC,OAAD,EAAU,KAAV,CAAtC,CAAA,EAA2D,YAA3D,CAAA;AACD,KAtEa,CAwEd;AACA;;AACD;;AAED,MAAI,0BAAW,UAAX,CAAJ,EAA4B;AAC1B,IAAA,UAAU,GAAG,UAAU,EAAvB;AACD;;AAED,MAAI,UAAJ,EAAgB;AACd;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,UADL,CAAA,EAGM,MAAM,GAAG;AAAC,MAAA;AAAD,KAAH,GAAc,EAH1B,CAAA;AAKD;;AACD,SAAO,UAAP;AACD;AAED;;;;;AAGM,SAAU,2BAAV,CAAsC,OAAtC,EAAwD,KAAxD,EAAgF;AACpF,MAAI,oBAAS,CAAC,GAAD,EAAM,IAAN,CAAT,EAAsB,OAAtB,KAAkC,KAAK,KAAK,OAAhD,EAAyD;AACvD,WAAO;AAAC,MAAA,KAAK,EAAE;AAAC,QAAA,KAAK,EAAE;AAAR;AAAR,KAAP;AACD,GAFD,MAEO,IAAI,oBAAS,CAAC,GAAD,EAAM,IAAN,CAAT,EAAsB,OAAtB,KAAkC,KAAK,KAAK,QAAhD,EAA0D;AAC/D,WAAO;AAAC,MAAA,KAAK,EAAE;AAAC,QAAA,KAAK,EAAE;AAAR;AAAR,KAAP;AACD;;AACD,SAAO,8BAAiB,KAAjB,CAAP;AACD;;;;;;;;;;;;;;;;;;AClVD;;AACA;;AACA;;AAUA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AAEM,SAAU,kBAAV,CAA6B,UAA7B,EAA+C;AACnD,SAAO,UAAU,IAAI,UAAU,KAAK,QAA7B,IAAyC,UAAU,KAAK,MAA/D;AACD;;AAED,SAAS,gBAAT,CAA0B,UAA1B,EAA8C,KAA9C,EAA6D,MAA7D,EAA2F;AACzF,SAAO,GAAG,UAAU,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,IAAI,CAAC,SAAL,CAAe,MAAf,CAAsB,EAA9B,GAAmC,EAAE,GAA3E;AACD;;AAEM,MAAM,mBAAmB,GAAG,UAA5B;;;AAED,SAAU,eAAV,CAA0B;AAC9B,EAAA,eAD8B;AAE9B,EAAA,MAF8B;AAG9B,EAAA,UAH8B;AAI9B,EAAA,IAJ8B;AAK9B,EAAA,cAL8B;AAM9B,EAAA;AAN8B,CAA1B,EAcL;;;AACC,MAAI,kBAAkB,CAAC,UAAD,CAAtB,EAAoC;AAClC,WAAO,gBAAgB,CAAC;AACtB,MAAA,eADsB;AAEtB,MAAA,MAFsB;AAGtB,MAAA,UAHsB;AAItB,MAAA,IAJsB;AAKtB,MAAA;AALsB,KAAD,CAAvB;AAOD;;AAED,QAAM,KAAK,GAAG,aAAa,CAAC,eAAD,EAAkB,IAAlB,EAAwB,cAAxB,CAA3B;;AAEA,MAAI,gDAA+B,eAA/B,CAAJ,EAAqD;AACnD,UAAM,MAAM,GAAG,oBAAoB,CACjC,KADiC,EAEjC,4BAAW,eAAX,IAA6B,CAAA,EAAA,GAAC,iCAAkB,eAAe,CAAC,QAAlC,CAAD,MAA4C,IAA5C,IAA4C,EAAA,KAAA,KAAA,CAA5C,GAA4C,KAAA,CAA5C,GAA4C,EAAA,CAAE,IAA3E,GAAkF,SAFjD,EAGjC,MAHiC,EAIjC,MAAM,CAAC,UAJ0B,EAKjC,iCAAgB,eAAhB,KAAoC,CAAA,CAAA,EAAA,GAAA,eAAe,CAAC,KAAhB,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,IAAvB,MAAgC,iBAAU,GAL7C,CAAnC;AAOA,WAAO,MAAM,GAAG;AAAC,MAAA;AAAD,KAAH,GAAc,SAA3B;AACD;;AAED,EAAA,MAAM,GAAG,YAAY,CAAC,gCAAe,eAAf,CAAD,EAAkC,MAAlC,EAA0C,MAA1C,CAArB;;AACA,MAAI,4BAAW,eAAX,KAA+B,oBAAU,eAAe,CAAC,GAA1B,CAAnC,EAAmE;AACjE,UAAM,QAAQ,GAAG,yBAAQ,eAAR,EAAyB;AAAC,MAAA,IAAD;AAAO,MAAA,SAAS,EAAE;AAAlB,KAAzB,CAAjB;AACA,WAAO;AACL,MAAA,MAAM,EAAE,mBAAmB,CAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,EAA0B,UAA1B,EAAsC,MAAtC;AADtB,KAAP;AAGD,GALD,MAKO,IAAI,MAAM,IAAI,gCAAe,eAAf,MAAoC,cAAlD,EAAkE;AACvE,WAAO;AACL,MAAA,MAAM,EAAE,GAAG,UAAU,CAAC,KAAD,EAAQ,MAAR,CAAe;AAD/B,KAAP;AAGD,GAJM,MAIA;AACL,WAAO;AAAC,MAAA,MAAM,EAAE,WAAW,KAAK,OAAO,KAAK,SAAS,KAAK;AAAnD,KAAP;AACD;AACF;;AAED,SAAS,aAAT,CACE,eADF,EAEE,IAFF,EAGE,cAHF,EAGyB;AAEvB,MAAI,4BAAW,eAAX,CAAJ,EAAiC;AAC/B,QAAI,cAAJ,EAAoB;AAClB,aAAO,GAAG,yBAAQ,eAAR,EAAyB;AAAC,QAAA,IAAD;AAAO,QAAA,MAAM,EAAE;AAAf,OAAzB,CAA+C,IAAI,yBAAQ,eAAR,EAAyB;AACpF,QAAA,IADoF;AAEpF,QAAA,MAAM,EAAE;AAF4E,OAAzB,CAG3D,EAHF;AAID,KALD,MAKO;AACL,aAAO,yBAAQ,eAAR,EAAyB;AAAC,QAAA;AAAD,OAAzB,CAAP;AACD;AACF,GATD,MASO;AACL,WAAO,8BAAe,eAAf,CAAP;AACD;AACF;;AAEK,SAAU,gBAAV,CAA2B;AAC/B,EAAA,eAD+B;AAE/B,EAAA,MAF+B;AAG/B,EAAA,UAH+B;AAI/B,EAAA,IAJ+B;AAK/B,EAAA,cAL+B;AAM/B,EAAA,MAN+B;AAO/B,EAAA;AAP+B,CAA3B,EAgBL;AACC,EAAA,KAAK,GAAG,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAA,KAAA,GAAS,aAAa,CAAC,eAAD,EAAkB,IAAlB,EAAwB,cAAxB,CAA9B;;AAEA,MAAI,4BAAW,eAAX,KAA+B,oBAAU,eAAe,CAAC,GAA1B,CAAnC,EAAmE;AACjE,UAAM,QAAQ,GAAG,yBAAQ,eAAR,EAAyB;AAAC,MAAA,IAAD;AAAO,MAAA,SAAS,EAAE;AAAlB,KAAzB,CAAjB;AACA,WAAO;AACL,MAAA,MAAM,EAAE,mBAAmB,CAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,EAA0B,UAA1B,EAAsC,MAAtC;AADtB,KAAP;AAGD;;AACD,SAAO;AAAC,IAAA,MAAM,EAAE,gBAAgB,CAAC,UAAD,EAAa,KAAb,EAAoB,MAApB;AAAzB,GAAP;AACD;;AAEK,SAAU,WAAV,CACJ,eADI,EAEJ,IAFI,EAGJ,MAHI,EAIJ,UAJI,EAKJ,MALI,EAMJ,oBANI,CAM0B;AAN1B;;;AAQJ,MAAI,kBAAkB,CAAC,UAAD,CAAtB,EAAoC;AAClC,WAAO,SAAP,CADkC,CAChB;AACnB;;AAED,MAAI,gDAA+B,eAA/B,CAAJ,EAAqD;AACnD,UAAM,QAAQ,GAAG,4BAAW,eAAX,IAA6B,CAAA,EAAA,GAAC,iCAAkB,eAAe,CAAC,QAAlC,CAAD,MAA4C,IAA5C,IAA4C,EAAA,KAAA,KAAA,CAA5C,GAA4C,KAAA,CAA5C,GAA4C,EAAA,CAAE,IAA3E,GAAkF,SAAnG;AAEA,WAAO,UAAU,CAAC,MAAD,EAAmB,QAAnB,EAA6B,MAA7B,EAAqC,oBAArC,CAAjB;AACD;;AAED,SAAO,YAAY,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAAnB;AACD;;AAEK,SAAU,eAAV,CACJ,UADI,EAEJ,eAFI,EAGJ,SAHI,EAGgB;AAEpB,MAAI,UAAU,KAAK,uBAAY,UAAZ,KAA2B,UAAU,KAAK,QAA1C,IAAsD,UAAU,KAAK,MAA1E,CAAd,EAAiG;AAC/F,WAAO,UAAP;AACD;;AACD,MAAI,gDAA+B,eAA/B,KAAmD,SAAS,KAAK,MAAjE,IAA2E,SAAS,KAAK,KAA7F,EAAoG;AAClG,WAAO,MAAP;AACD;;AACD,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,YAAV,CAAuB,IAAvB,EAAmC,eAAnC,EAA4E,MAA5E,EAA0F;AAC9F;AACA,MAAI,wBAAS,eAAT,CAAJ,EAA+B;AAC7B,WAAO,eAAP;AACD;;AAED,MAAI,IAAI,KAAK,kBAAb,EAA2B;AACzB;AACA,WAAO,MAAM,CAAC,YAAd;AACD;;AACD,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,UAAV,CAAqB,eAArB,EAA8C,QAA9C,EAAkE,MAAlE,EAAkF,oBAAlF,EAA+G;AACnH,MAAI,eAAJ,EAAqB;AACnB,WAAO,eAAP;AACD;;AAED,MAAI,QAAJ,EAAc;AACZ,WAAO;AACL,MAAA,MAAM,EAAE,2CAA4B,QAA5B;AADH,KAAP;AAGD;;AAED,SAAO,oBAAoB,GAAG,SAAH,GAAe,MAAM,CAAC,UAAjD;AACD;;AAED,SAAS,UAAT,CAAoB,KAApB,EAAmC,MAAnC,EAAiD;AAC/C,SAAO,UAAU,KAAK,MAAM,MAAM,IAAI,EAAE,IAAxC;AACD;;AAED,SAAS,mBAAT,CAA6B,KAA7B,EAA4C,MAA5C,EAA4E,UAA5E,EAAgG,MAAhG,EAA8G;;;AAC5G,MAAI,kBAAkB,CAAC,UAAD,CAAtB,EAAoC;AAClC,WAAO,gBAAgB,CAAC,UAAD,EAAa,KAAb,EAAoB,MAApB,CAAvB;AACD;;AAED,SAAO,UAAU,CAAC,KAAD,EAAM,CAAA,EAAA,GAAG,wBAAS,MAAT,IAAmB,MAAnB,GAA4B,SAA/B,MAAyC,IAAzC,IAAyC,EAAA,KAAA,KAAA,CAAzC,GAAyC,EAAzC,GAA6C,MAAM,CAAC,YAA1D,CAAjB;AACD;;AAEK,SAAU,mBAAV,CACJ,UADI,EAEJ,QAFI,EAGJ,MAHI,EAIJ,UAJI,EAKJ,MALI,EAKU;AAEd,QAAM,KAAK,GAAG,mBAAmB,CAAC,UAAD,EAAa,MAAb,EAAqB,UAArB,EAAiC,MAAjC,CAAjC;AACA,QAAM,GAAG,GAAG,mBAAmB,CAAC,QAAD,EAAW,MAAX,EAAmB,UAAnB,EAA+B,MAA/B,CAA/B;AACA,SAAO,GAAG,oCAAoB,UAApB,EAAgC,KAAhC,CAAsC,eAAe,KAAK,OAAO,mBAAmB,OAAO,GAAG,EAAxG;AACD;AAED;;;;;AAGM,SAAU,oBAAV,CACJ,KADI,EAEJ,QAFI,EAGJ,MAHI,EAIJ,aAJI,EAImB;AACvB,UALI,EAKe;AAEnB,MAAI,CAAC,QAAD,IAAa,MAAjB,EAAyB;AACvB;AACA,IAAA,MAAM,GAAG,wBAAS,MAAT,IAAmB,MAAnB,GAA4B,aAArC,CAFuB,CAE6B;;AACpD,WAAO,GAAG,UAAU,GAAG,KAAH,GAAW,MAAM,UAAU,KAAK,MAAM,MAAM,IAAhE;AACD,GAJD,MAIO;AACL,WAAO,gCAAiB,QAAjB,EAA2B,KAA3B,EAAkC,UAAlC,CAAP;AACD;AACF;;;;;;;;;;;;;ACjPD;;AA2BO,MAAM,eAAe,GAAG,KAAxB;;AA4CP,MAAM,qBAAqB,GAAG;AAC5B,EAAA,CAAC,EAAE,CADyB;AAE5B,EAAA,CAAC,EAAE,CAFyB;AAG5B,EAAA,KAAK,EAAE,CAHqB;AAI5B,EAAA,IAAI,EAAE,CAJsB;AAK5B,EAAA,MAAM,EAAE,CALoB;AAM5B,EAAA,WAAW,EAAE,CANe;AAO5B,EAAA,IAAI,EAAE,CAPsB;AAQ5B,EAAA,KAAK,EAAE,CARqB;AAS5B,EAAA,WAAW,EAAE,CATe;AAU5B,EAAA,aAAa,EAAE,CAVa;AAW5B,EAAA,OAAO,EAAE,CAXmB;AAY5B,EAAA,IAAI,EAAE;AAZsB,CAA9B;;AAiBM,SAAU,eAAV,CAA0B,CAA1B,EAAmC;AACvC,SAAO,CAAC,IAAI,qBAAZ;AACD;;AAoBK,SAAU,gBAAV,CAA8B,IAA9B,EAA2C;AAC/C,SAAO,CAAC,CAAC,IAAF,IAAU,CAAC,CAAC,IAAI,CAAC,UAAD,CAAvB;AACD;;AAEK,SAAU,WAAV,CAAyB,IAAzB,EAAsC;AAC1C,SAAO,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,IAAD,CAAJ,KAAe,OAAf,IAA0B,CAAC,CAAC,IAAI,CAAC,OAAD,CAA3C,CAAP;AACD;;AAEK,SAAU,WAAV,CAAyB,IAAzB,EAAsC;AAC1C,SAAO,CAAC,CAAC,IAAF,IAAU,uBAAQ,IAAR,CAAjB;AACD;;;;;;;;;;;ACxCK,SAAU,cAAV,CAA0C,CAA1C,EAA+E;AACnF,SAAO,SAAS,CAAT,IAAc,YAAY,CAAjC;AACD;;AAcK,SAAU,eAAV,CAA2C,UAA3C,EAAoE;AACxE,SAAO,CAAC,CAAC,UAAF,IAAgB,YAAY,UAAnC;AACD;;AA6BK,SAAU,WAAV,CAAsB,IAAtB,EAAoC;AACxC,SAAO,WAAW,IAAlB;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChID;;AACA;;AAEA;;AACA;;AAyCA;;AACA;;AAGA;;AAKA;;AAEA;;AAGA;;AACA;;AAEA;;AASA;;AACA;;AASA;;;;;;AAqFM,SAAU,sBAAV,CAAoC,CAApC,EAAqD;AACzD,SAAO,CAAC,CAAC,WAAD,CAAR;AACD;;AA+EK,SAAU,WAAV,CAAsB,KAAtB,EAAwC;AAC5C,SAAO,KAAK,IAAI,CAAC,wBAAS,KAAT,CAAV,IAA6B,YAAY,KAAhD;AACD;;AAwDK,SAAU,cAAV,CAAyB,QAAzB,EAAmD;AACvD,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA,QAAR;AAAkB,IAAA,GAAlB;AAAuB,IAAA;AAAvB,MAAoC,QAA1C;AACA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,QAAQ,GAAG;AAAC,IAAA;AAAD,GAAH,GAAgB,EAD9B,CAAA,EAEM,GAAG,GAAG;AAAC,IAAA;AAAD,GAAH,GAAW,EAFpB,CAAA,EAGM,SAAS,GAAG;AAAC,IAAA;AAAD,GAAH,GAAiB,EAHhC,CAAA,EAGmC;AACjC,IAAA;AADiC,GAHnC,CAAA;AAMD;;AAyDK,SAAU,kBAAV,CAA8C,QAA9C,EAAmE;AACvE,SAAO,eAAe,CAAC,QAAD,CAAf,IAA6B,UAAU,QAA9C;AACD;;AA6HK,SAAU,OAAV,CAAkB;AACtB,EAAA,OADsB;AAEtB,EAAA,QAFsB;AAGtB,EAAA,SAHsB;AAItB,EAAA,OAAO,EAAE,IAJa;AAKtB,EAAA,KALsB;AAMtB,EAAA,MANsB;AAOtB,EAAA;AAPsB,CAAlB,EAgBL;AACC,MAAI,iBAAiB,CAAC,QAAD,CAAjB,IAA+B,QAAQ,CAAC,IAAT,KAAkB,SAArD,EAAgE;AAC9D,WAAO,QAAQ,CAAC,IAAhB;AACD;;AACD,MAAI,UAAU,CAAC,QAAD,CAAd,EAA0B;AACxB,UAAM;AAAC,MAAA,QAAD;AAAW,MAAA;AAAX,QAAkB,QAAxB;;AAEA,QAAI,QAAQ,IAAI,CAAC,SAAjB,EAA4B;AAC1B,UAAI,UAAJ,EAAgB;AACd,eAAO,2BAAc,sBAAd,EAAsC,IAAtC,EAA4C,MAA5C,CAAP;AACD,OAFD,MAEO;AACL,eAAO,2BAAgB,IAAI,CAAC,IAArB,IAA6B,2BAAc,cAAd,EAA8B,IAA9B,EAAoC,MAApC,CAA7B,GAA2E,CAAlF;AACD;AACF,KAND,MAMO,IAAI,oBAAU,GAAV,CAAJ,EAAoB;AACzB,aAAO,2BAAgB,IAAI,CAAC,IAArB,KAA8B,CAAC,UAA/B,GAA4C,CAA5C,GAAgD,GAAvD;AACD;AACF;;AACD,MAAI,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,YAAP,MAAwB,OAAxB,IAAmC,UAAvC,EAAmD;AACjD,WAAO,GAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,OAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,SAHI,EAIJ,KAJI,EAKJ,OALI,EAMJ,MANI,EAMU;AAEd,MAAI,oBAAU,QAAQ,CAAC,GAAnB,KAA4B,QAAQ,CAAC,QAAT,IAAqB,eAAe,CAAC,QAAD,CAApC,IAAkD,QAAQ,CAAC,IAAT,KAAkB,UAApG,EAAiH;AAC/G,WAAO,CAAC,CAAC,OAAO,CAAC;AAAC,MAAA,OAAD;AAAU,MAAA,QAAV;AAAoB,MAAA,SAApB;AAA+B,MAAA,KAA/B;AAAsC,MAAA,OAAtC;AAA+C,MAAA;AAA/C,KAAD,CAAhB;AACD;;AACD,SAAO,KAAP;AACD;;AA0CK,SAAU,gBAAV,CACJ,UADI,EACU;AAEd,SAAO,CAAC,CAAC,UAAF,IAAgB,eAAe,UAAtC;AACD;AAED;;;;;AAGM,SAAU,sBAAV,CACJ,UADI,EACqB;AAEzB,QAAM,SAAS,GAAG,UAAU,IAAI,UAAU,CAAC,WAAD,CAA1C;AACA,SAAO,CAAC,CAAC,SAAF,IAAe,CAAC,uBAAQ,SAAR,CAAhB,IAAsC,UAAU,CAAC,SAAD,CAAvD;AACD;;AAEK,SAAU,6BAAV,CACJ,UADI,EACqB;AAEzB,QAAM,SAAS,GAAG,UAAU,IAAI,UAAU,CAAC,WAAD,CAA1C;AACA,SAAO,CAAC,CAAC,SAAF,IAAe,CAAC,uBAAQ,SAAR,CAAhB,IAAsC,iBAAiB,CAAC,SAAD,CAA9D;AACD;;AAEK,SAAU,sBAAV,CACJ,UADI,EACqB;AAEzB,QAAM,SAAS,GAAG,UAAU,IAAI,UAAU,CAAC,WAAD,CAA1C;AACA,SAAO,CAAC,CAAC,SAAF,KAAgB,uBAAQ,SAAR,KAAsB,UAAU,CAAC,SAAD,CAAhD,CAAP;AACD;;AAEK,SAAU,UAAV,CACJ,UADI,EAC0D;AAE9D;AACA,SAAO,CAAC,CAAC,UAAF,KAAiB,CAAC,CAAC,UAAU,CAAC,OAAD,CAAZ,IAAyB,UAAU,CAAC,WAAD,CAAV,KAA4B,OAAtE,CAAP;AACD;;AAEK,SAAU,cAAV,CAA0C,UAA1C,EAAmE;AACvE,SAAO,UAAU,IAAI,UAAU,CAAC,MAAD,CAA/B;AACD;;AAEK,SAAU,UAAV,CACJ,UADI,EAC0D;AAE9D,SAAO,CAAC,CAAC,UAAF,IAAgB,WAAW,UAAlC;AACD;;AAEK,SAAU,2BAAV,CAAuD,EAAvD,EAAwE;AAC5E;AACA,SAAQ,eAAe,CAAC,EAAD,CAAf,IAAuB,YAAY,CAAC,EAAD,CAApC,IAA6C,gBAAgB,CAAC,EAAD,CAApE;AACD;;AAEK,SAAU,6BAAV,CAAyD,EAAzD,EAA0E;AAC9E;AACA,SAAO,cAAc,CAAC,EAAD,CAAd,KAAuB,cAAvB,IAAyC,gBAAgB,CAAC,EAAD,CAAhE;AACD;;AAEK,SAAU,gBAAV,CAA4C,EAA5C,EAA6D;AACjE,SAAO,UAAU,CAAC,EAAD,CAAV,IAAkB,wBAAS,EAAE,CAAC,KAAZ,CAAzB;AACD;;AAEK,SAAU,iBAAV,CACJ,UADI,EACqB;AAEzB,SAAO,UAAU,CAAC,UAAD,CAAV,IAA0B,UAAU,CAAC,UAAD,CAA3C;AACD;;AAEK,SAAU,eAAV,CAA2C,UAA3C,EAAoE;AACxE,SAAO,CAAC,CAAC,UAAF,KAAkB,WAAW,UAAX,IAAyB,UAAU,UAApC,IAAmD,UAAU,CAAC,WAAD,CAAV,KAA4B,OAAhG,CAAP;AACD;;AAEK,SAAU,UAAV,CAAsC,UAAtC,EAA+D;AACnE,SAAO,UAAU,IAAI,WAAW,UAAzB,IAAuC,WAAW,UAAzD;AACD;;AAEK,SAAU,eAAV,CAA2C,UAA3C,EAAoE;AACxE,SAAO,CAAC,CAAC,UAAF,KAAiB,WAAW,UAAX,IAAyB,UAAU,UAApD,CAAP;AACD;;AAEK,SAAU,yBAAV,CACJ,UADI,EACqB;AAEzB,SAAO,UAAU,KAAK,UAAU,UAAV,IAAwB,WAAW,UAAnC,IAAiD,YAAY,UAAlE,CAAjB;AACD;;AAEK,SAAU,yBAAV,CACJ,UADI,EACqB;AAEzB,SAAO,CAAC,CAAC,UAAF,IAAgB,YAAY,UAAnC;AACD;;AAEK,SAAU,qBAAV,CACJ,UADI,EACqB;AAEzB,SAAO,CAAC,CAAC,UAAF,KAAiB,YAAY,UAAZ,IAA0B,gBAAgB,UAA3D,CAAP;AACD;;AAoBD,SAAS,YAAT,CACE,QADF,EACsE;AAEpE,SAAO,QAAQ,QAAf;AACD;AAED;;;;;AAGM,SAAU,OAAV,CACJ,QADI,EAEJ,GAAA,GAAsB,EAFlB,EAEoB;;;AAExB,MAAI,KAAK,GAAG,QAAQ,CAAC,KAArB;AACA,QAAM,MAAM,GAAG,GAAG,CAAC,MAAnB;AACA,MAAI,MAAM,GAAG,GAAG,CAAC,MAAjB;AAEA,MAAI,WAAW,GAAG,EAAlB,CANwB,CAMF;;AAEtB,MAAI,OAAO,CAAC,QAAD,CAAX,EAAuB;AACrB,IAAA,KAAK,GAAG,yBAAc,OAAd,CAAR;AACD,GAFD,MAEO;AACL,QAAI,EAAJ;;AAEA,QAAI,CAAC,GAAG,CAAC,IAAT,EAAe;AACb,UAAI,YAAY,CAAC,QAAD,CAAhB,EAA4B;AAC1B,QAAA,EAAE,GAAG,QAAQ,CAAC,EAAd;AACD,OAFD,MAEO;AACL,cAAM;AAAC,UAAA,GAAD;AAAM,UAAA,SAAN;AAAiB,UAAA;AAAjB,YAA6B,QAAnC;;AACA,YAAI,oBAAU,GAAV,CAAJ,EAAoB;AAClB,UAAA,EAAE,GAAG,sBAAY,GAAZ,CAAL;AACA,UAAA,MAAM,GAAG,CAAA,CAAA,EAAA,GAAC,GAAG,CAAC,SAAL,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAAlB,KAAwB,CAAA,EAAA,GAAC,GAAG,CAAC,MAAL,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,EAAX,GAAe,EAAvC,CAAT;AACD,SAHD,MAGO,IAAI,SAAJ,EAAe;AACpB,cAAI,4BAAY,SAAZ,CAAJ,EAA4B;AAC1B,YAAA,WAAW,GAAG,KAAK,KAAK,IAAxB;AACA,YAAA,KAAK,GAAG,UAAU,SAAS,CAAC,MAAM,EAAlC;AACD,WAHD,MAGO,IAAI,4BAAY,SAAZ,CAAJ,EAA4B;AACjC,YAAA,WAAW,GAAG,KAAK,KAAK,IAAxB;AACA,YAAA,KAAK,GAAG,UAAU,SAAS,CAAC,MAAM,EAAlC;AACD,WAHM,MAGA;AACL,YAAA,EAAE,GAAG,MAAM,CAAC,SAAD,CAAX;AACD;AACF,SAVM,MAUA,IAAI,QAAJ,EAAc;AACnB,UAAA,EAAE,GAAG,gCAAiB,QAAjB,CAAL;AACA,UAAA,MAAM,GAAG,CAAE,CAAC,oBAAS,CAAC,OAAD,EAAU,KAAV,CAAT,EAA2B,GAAG,CAAC,SAA/B,CAAD,IAA8C,GAAG,CAAC,SAAnD,IAAiE,EAAlE,KAAwE,CAAA,EAAA,GAAC,GAAG,CAAC,MAAL,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,EAAX,GAAe,EAAvF,CAAT;AACD;AACF;AACF;;AAED,QAAI,EAAJ,EAAQ;AACN,MAAA,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,KAAK,EAAjB,GAAsB,EAAnC;AACD;AACF;;AAED,MAAI,MAAJ,EAAY;AACV,IAAA,KAAK,GAAG,GAAG,KAAK,IAAI,MAAM,EAA1B;AACD;;AAED,MAAI,MAAJ,EAAY;AACV,IAAA,KAAK,GAAG,GAAG,MAAM,IAAI,KAAK,EAA1B;AACD;;AAED,MAAI,GAAG,CAAC,KAAR,EAAe;AACb,WAAO,+BAAoB,KAApB,CAAP;AACD,GAFD,MAEO,IAAI,GAAG,CAAC,IAAR,EAAc;AACnB;AACA,WAAO,+BAAoB,KAApB,EAA2B,GAAG,CAAC,IAA/B,IAAuC,WAA9C;AACD,GAHM,MAGA;AACL;AACA,WAAO,8BAAmB,KAAnB,IAA4B,WAAnC;AACD;AACF;;AAEK,SAAU,UAAV,CAAqB,GAArB,EAAmE;AACvE,UAAQ,GAAG,CAAC,IAAZ;AACE,SAAK,SAAL;AACA,SAAK,SAAL;AACA,SAAK,SAAL;AACE,aAAO,IAAP;;AACF,SAAK,cAAL;AACE,aAAO,UAAU,CAAC,GAAD,CAAV,IAAmB,CAAC,CAAC,GAAG,CAAC,GAAhC;;AACF,SAAK,UAAL;AACE,aAAO,KAAP;AARJ;;AAUA,QAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,GAAG,CAAC,IAAjC,CAAV,CAAN;AACD;;AAEK,SAAU,YAAV,CAAuB,QAAvB,EAAqD;AACzD,SAAO,CAAC,UAAU,CAAC,QAAD,CAAlB;AACD;;AAEK,SAAU,OAAV,CAAkB,QAAlB,EAA+C;AACnD,SAAO,QAAQ,CAAC,SAAT,KAAuB,OAA9B;AACD;;AAIK,SAAU,oBAAV,CAA+B,QAA/B,EAA+D,MAA/D,EAA6E;;;AACjF,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA,GAAR;AAAa,IAAA,QAAb;AAAuB,IAAA;AAAvB,MAAoC,QAA1C;;AACA,MAAI,SAAS,KAAK,OAAlB,EAA2B;AACzB,WAAO,MAAM,CAAC,UAAd;AACD,GAFD,MAEO,IAAI,oBAAU,GAAV,CAAJ,EAAoB;AACzB,WAAO,GAAG,KAAK,WAAf;AACD,GAFM,MAEA,IAAI,QAAJ,EAAc;AACnB,UAAM,IAAI,GAAA,CAAA,EAAA,GAAG,iCAAkB,QAAlB,CAAH,MAA8B,IAA9B,IAA8B,EAAA,KAAA,KAAA,CAA9B,GAA8B,KAAA,CAA9B,GAA8B,EAAA,CAAE,IAA1C;;AACA,QAAI,IAAJ,EAAU;AACR,aAAO,GAAG,KAAK,KAAK,gCAAiB,IAAjB,EAAuB,IAAvB,CAA4B,GAA5B,CAAgC,GAApD;AACD;AACF,GALM,MAKA,IAAI,SAAJ,EAAe;AACpB,QAAI,4BAAY,SAAZ,CAAJ,EAA4B;AAC1B,aAAO,GAAG,KAAK,YAAY,SAAS,CAAC,MAAM,EAA3C;AACD,KAFD,MAEO,IAAI,4BAAY,SAAZ,CAAJ,EAA4B;AACjC,aAAO,GAAG,KAAK,YAAY,SAAS,CAAC,MAAM,EAA3C;AACD,KAFM,MAEA;AACL,aAAO,GAAG,qBAAU,SAAV,CAAoB,OAAO,KAAK,EAA1C;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAEK,SAAU,wBAAV,CAAmC,QAAnC,EAAiE;AACrE,QAAM;AAAC,IAAA,SAAD;AAAY,IAAA,GAAZ;AAAiB,IAAA,QAAjB;AAA2B,IAAA;AAA3B,MAAoC,QAA1C;;AACA,MAAI,4BAAY,SAAZ,CAAJ,EAA4B;AAC1B,WAAO,GAAG,KAAK,eAAe,SAAS,CAAC,MAAM,GAA9C;AACD,GAFD,MAEO,IAAI,4BAAY,SAAZ,CAAJ,EAA4B;AACjC,WAAO,GAAG,KAAK,eAAe,SAAS,CAAC,MAAM,GAA9C;AACD;;AAED,QAAM,cAAc,GAAG,iCAAkB,QAAlB,CAAvB;AAEA,QAAM,EAAE,GAAG,SAAS,KAAI,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,IAApB,CAAT,IAAsC,CAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,OAAhB,KAA2B,UAAjE,IAAiF,oBAAU,GAAV,KAAkB,KAA9G;;AACA,MAAI,EAAJ,EAAQ;AACN,WAAO,EAAE,CAAC,WAAH,KAAmB,GAAnB,GAAyB,KAAzB,GAAiC,GAAxC;AACD,GAFD,MAEO;AACL,WAAO,KAAP;AACD;AACF;;AAEM,MAAM,qBAAqB,GAAwB,CAAC,QAAD,EAAiC,MAAjC,KAAmD;AAC3G,UAAQ,MAAM,CAAC,UAAf;AACE,SAAK,OAAL;AACE,aAAO,QAAQ,CAAC,KAAhB;;AACF,SAAK,YAAL;AACE,aAAO,wBAAwB,CAAC,QAAD,CAA/B;;AACF;AACE,aAAO,oBAAoB,CAAC,QAAD,EAAW,MAAX,CAA3B;AANJ;AAQD,CATM;;;AAWP,IAAI,cAAc,GAAG,qBAArB;;AAEM,SAAU,iBAAV,CAA4B,SAA5B,EAA0D;AAC9D,EAAA,cAAc,GAAG,SAAjB;AACD;;AAEK,SAAU,mBAAV,GAA6B;AACjC,EAAA,iBAAiB,CAAC,qBAAD,CAAjB;AACD;;AAEK,SAAU,KAAV,CACJ,eADI,EAEJ,MAFI,EAGJ;AAAC,EAAA,cAAD;AAAiB,EAAA,cAAc,GAAG;AAAlC,CAHI,EAGwF;;;AAE5F,QAAM,KAAK,GAAA,CAAA,EAAA,GAAG,QAAQ,CAAC,eAAD,CAAX,MAA4B,IAA5B,IAA4B,EAAA,KAAA,KAAA,CAA5B,GAA4B,EAA5B,GAAgC,EAA3C;AACA,QAAM,UAAU,GAAG,KAAK,CAAC,KAAzB;;AAEA,MAAI,CAAC,UAAU,CAAC,eAAD,CAAf,EAAkC;AAChC,WAAO,UAAP;AACD;;AACD,QAAM,QAAQ,GAAG,eAAjB;AAEA,QAAM,GAAG,GAAG,cAAc,GAAG,YAAY,CAAC,QAAD,EAAW,MAAX,CAAf,GAAoC,SAA9D;;AAEA,MAAI,cAAJ,EAAoB;AAClB,WAAO,2BAAgB,UAAhB,EAA4B,QAAQ,CAAC,KAArC,EAA4C,GAA5C,CAAP;AACD,GAFD,MAEO;AACL,WAAA,CAAA,EAAA,GAAO,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAA,UAAA,GAAc,QAAQ,CAAC,KAA9B,MAAmC,IAAnC,IAAmC,EAAA,KAAA,KAAA,CAAnC,GAAmC,EAAnC,GAAuC,GAAvC;AACD;AACF;;AAEK,SAAU,QAAV,CAAmB,QAAnB,EAAyF;AAC7F,MAAI,yBAAyB,CAAC,QAAD,CAAzB,IAAuC,QAAQ,CAAC,IAApD,EAA0D;AACxD,WAAO,QAAQ,CAAC,IAAhB;AACD,GAFD,MAEO,IAAI,yBAAyB,CAAC,QAAD,CAAzB,IAAuC,QAAQ,CAAC,MAApD,EAA4D;AACjE,WAAO,QAAQ,CAAC,MAAhB;AACD,GAFM,MAEA,IAAI,4BAAgB,QAAhB,KAA6B,QAAQ,CAAC,MAA1C,EAAkD;AACvD,WAAO,QAAQ,CAAC,MAAhB;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,YAAV,CAAuB,QAAvB,EAAuD,MAAvD,EAAqE;AACzE,SAAO,cAAc,CAAC,QAAD,EAAW,MAAX,CAArB;AACD;;AAEK,SAAU,eAAV,CAA0B,QAA1B,EAAoE;;;AACxE,MAAI,qBAAqB,CAAC,QAAD,CAAzB,EAAqC;AACnC,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAuB,QAA7B;AACA,WAAO;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,KAAP;AACD,GAHD,MAGO;AACL,UAAM,KAAK,GAAA,CAAA,EAAA,GAAG,QAAQ,CAAC,QAAD,CAAX,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,EAApC;AACA,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAuB,KAA7B;AACA,WAAO;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,KAAP;AACD;AACF;;AAEK,SAAU,WAAV,CAAsB,QAAtB,EAAsD,OAAtD,EAAsE;AAC1E,MAAI,QAAQ,CAAC,QAAb,EAAuB;AACrB,WAAO,UAAP;AACD;;AACD,MAAI,oBAAU,QAAQ,CAAC,GAAnB,CAAJ,EAA6B;AAC3B,WAAO,cAAP;AACD;;AACD,UAAQ,wBAAU,OAAV,CAAR;AACE,SAAK,YAAL;AACE,aAAO,cAAP;;AACF,SAAK,UAAL;AACE,aAAO,SAAP;;AACF,SAAK,UAAL;AAAiB;AACf,aAAO,SAAP;;AACF;AACE,aAAO,cAAP;AARJ;AAUD;AAED;;;;;;AAKM,SAAU,WAAV,CAAuC,UAAvC,EAAgE;AACpE,MAAI,UAAU,CAAC,UAAD,CAAd,EAA4B;AAC1B,WAAO,UAAP;AACD,GAFD,MAEO,IAAI,sBAAsB,CAAC,UAAD,CAA1B,EAAwC;AAC7C,WAAO,UAAU,CAAC,SAAlB;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,kBAAV,CACJ,UADI,EACU;AAEd,MAAI,iBAAiB,CAAI,UAAJ,CAArB,EAAsC;AACpC,WAAO,UAAP;AACD,GAFD,MAEO,IAAI,6BAA6B,CAAC,UAAD,CAAjC,EAA+C;AACpD,WAAO,UAAU,CAAC,SAAlB;AACD;;AACD,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,cAAV,CAAyB,UAAzB,EAAyD,OAAzD,EAA2E,MAA3E,EAAyF;AAC7F,MAAI,wBAAS,UAAT,KAAwB,wBAAS,UAAT,CAAxB,IAAgD,yBAAU,UAAV,CAApD,EAA2E;AACzE,UAAM,aAAa,GAAG,wBAAS,UAAT,IAAuB,QAAvB,GAAkC,wBAAS,UAAT,IAAuB,QAAvB,GAAkC,SAA1F;AACA,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,OAAhC,EAAyC,aAAzC,EAAwD,UAAxD,CAAT;AACA,WAAO;AAAC,MAAA,KAAK,EAAE;AAAR,KAAP;AACD,GAL4F,CAO7F;;;AACA,MAAI,iBAAiB,CAAC,UAAD,CAArB,EAAmC;AACjC,WAAO,mBAAmB,CAAC,UAAD,EAAa,OAAb,EAAsB,MAAtB,CAA1B;AACD,GAFD,MAEO,IAAI,6BAA6B,CAAC,UAAD,CAAjC,EAA+C;AACpD,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,UADL,CAAA,EACe;AACb;AACA,MAAA,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAZ,EAAuB,OAAvB,EAAgC,MAAhC;AAFjB,KADf,CAAA;AAKD;;AACD,SAAO,UAAP;AACD;;AAEK,SAAU,mBAAV,CACJ,EADI,EAEJ,OAFI,EAGJ,MAHI,EAGU;AAEd,MAAI,qBAAqB,CAAC,EAAD,CAAzB,EAA+B;AAC7B,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAgC,EAAtC;AAAA,UAA8B,IAAI,GAAA,mBAAI,EAAJ,EAA5B,CAAA,QAAA,EAAA,YAAA,CAA4B,CAAlC;;AACA,QAAI,gCAAmB,UAAnB,KAAkC,CAAC,MAAM,CAAC,iBAA9C,EAAiE;AAC/D,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,0BAAZ,CAAuC,OAAvC,CAAT;AACA,aAAO,mBAAmB,CAAC,IAAD,EAAO,OAAP,EAAgB,MAAhB,CAA1B;AACD;AACF,GAND,MAMO;AACL,UAAM,SAAS,GAAG,yBAAyB,CAAC,EAAD,CAAzB,GACd,MADc,GAEd,yBAAyB,CAAC,EAAD,CAAzB,GACA,QADA,GAEA,4BAAgB,EAAhB,IACA,QADA,GAEA,IANJ;;AAOA,QAAI,SAAS,IAAI,EAAE,CAAC,SAAD,CAAnB,EAAgC;AAC9B,YAAM,EAAA,GAAoC,EAAE,CAAC,SAAD,CAA5C;AAAA,YAAM;AAAC,QAAA,MAAD;AAAS,QAAA;AAAT,UAAmB,EAAzB;AAAA,YAA8B,QAAQ,GAAA,mBAAA,EAAA,EAAhC,CAAA,QAAA,EAAA,YAAA,CAAgC,CAAtC;;AACA,UAAI,gCAAmB,UAAnB,KAAkC,CAAC,MAAM,CAAC,iBAA9C,EAAiE;AAC/D,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,0BAAZ,CAAuC,OAAvC,CAAT;AACA,eAAO,mBAAmB,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,EAAL,CAAA,EAAO;AAAE,WAAC,SAAD,GAAa;AAAf,SAAP,CAAA,EAAiC,OAAjC,EAA0C,MAA1C,CAA1B;AACD;AACF;AACF;;AAED,MAAI,UAAU,CAAC,EAAD,CAAd,EAAoB;AAClB,WAAO,YAAY,CAAC,EAAD,EAAK,OAAL,CAAnB;AACD;;AACD,SAAO,YAAY,CAAC,EAAD,CAAnB;AACD;;AAED,SAAS,YAAT,CAAsB,QAAtB,EAAwC;AACtC,MAAI,IAAI,GAAG,QAAQ,CAAC,MAAD,CAAnB;;AACA,MAAI,IAAJ,EAAU;AACR,WAAO,QAAP;AACD;;AACD,QAAM;AAAC,IAAA;AAAD,MAAU,QAAhB;AACA,EAAA,IAAI,GAAG,wBAAS,KAAT,IAAkB,cAAlB,GAAmC,wBAAS,KAAT,IAAkB,SAAlB,GAA8B,0BAAW,KAAX,IAAoB,UAApB,GAAiC,SAAzG;AAEA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,QAAX,CAAA,EAAmB;AAAE,IAAA;AAAF,GAAnB,CAAA;AACD;;AAEK,SAAU,YAAV,CAAuB,EAAvB,EAAkD,OAAlD,EAAkE;AACtE,QAAM;AAAC,IAAA,SAAD;AAAY,IAAA,QAAZ;AAAsB,IAAA,GAAtB;AAA2B,IAAA;AAA3B,MAAoC,EAA1C;AACA,QAAM,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,EAAP,CAAd,CAFsE,CAItE;;AACA,MAAI,SAAS,IAAI,CAAC,8BAAc,SAAd,CAAd,IAA0C,CAAC,4BAAY,SAAZ,CAA3C,IAAqE,CAAC,4BAAY,SAAZ,CAA1E,EAAkG;AAChG,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,SAA7B,CAAT;AACA,WAAO,QAAQ,CAAC,SAAhB;AACD,GARqE,CAUtE;;;AACA,MAAI,QAAJ,EAAc;AACZ,IAAA,QAAQ,CAAC,QAAT,GAAoB,iCAAkB,QAAlB,CAApB;AACD;;AAED,MAAI,KAAJ,EAAW;AACT,IAAA,QAAQ,CAAC,KAAT,GAAiB,GAAG,KAAK,EAAzB;AACD,GAjBqE,CAmBtE;;;AACA,MAAI,oBAAU,GAAV,CAAJ,EAAoB;AAClB,IAAA,QAAQ,CAAC,GAAT,GAAe,YAAY,CAAC,GAAD,EAAM,OAAN,CAA3B;AACD;;AAED,MAAI,mBAAS,GAAT,KAAiB,CAAC,qBAAO,OAAP,CAAtB,EAAuC;AACrC,IAAA,GAAG,CAAC,IAAJ,CAAS,WAAW,OAAO,wCAA3B;AACD,GA1BqE,CA4BtE;;;AACA,MAAI,eAAe,CAAC,QAAD,CAAnB,EAA+B;AAC7B,UAAM;AAAC,MAAA;AAAD,QAAS,QAAf;AACA,UAAM,QAAQ,GAAG,uBAAY,IAAZ,CAAjB;;AACA,QAAI,IAAI,KAAK,QAAb,EAAuB;AACrB;AACA,MAAA,QAAQ,CAAC,IAAT,GAAgB,QAAhB;AACD;;AACD,QAAI,IAAI,KAAK,cAAb,EAA6B;AAC3B,UAAI,sCAAsB,SAAtB,CAAJ,EAAsC;AACpC,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iCAAZ,CAA8C,IAA9C,EAAoD,SAApD,CAAT;AACA,QAAA,QAAQ,CAAC,IAAT,GAAgB,cAAhB;AACD;AACF;AACF,GAbD,MAaO,IAAI,CAAC,sCAAwB,OAAxB,CAAL,EAAuC;AAC5C;AACA,UAAM,OAAO,GAAG,WAAW,CAAC,QAAD,EAAiC,OAAjC,CAA3B;AACA,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,OAA7B,EAAsC,OAAtC,CAAT;AAEA,IAAA,QAAQ,CAAC,MAAD,CAAR,GAAmB,OAAnB;AACD;;AAED,MAAI,eAAe,CAAC,QAAD,CAAnB,EAA+B;AAC7B,UAAM;AAAC,MAAA,UAAD;AAAa,MAAA;AAAb,QAAwB,oBAAoB,CAAC,QAAD,EAAW,OAAX,CAAlD;;AACA,QAAI,CAAC,UAAL,EAAiB;AACf,MAAA,GAAG,CAAC,IAAJ,CAAS,OAAT;AACD;AACF;;AAED,MAAI,kBAAkB,CAAC,QAAD,CAAlB,IAAgC,wBAAS,QAAQ,CAAC,IAAlB,CAApC,EAA6D;AAC3D,UAAM;AAAC,MAAA;AAAD,QAAS,QAAf;;AACA,QAAI,2BAAgB,IAAhB,CAAJ,EAA2B;AACzB,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,QADL,CAAA,EACa;AACX,QAAA,IAAI,EAAE;AAAC,UAAA,QAAQ,EAAE;AAAX;AADK,OADb,CAAA;AAID;;AACD,UAAM,GAAG,GAAG,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAZ;;AACA,QAAI,IAAI,CAAC,MAAL,CAAY,CAAZ,MAAmB,GAAnB,IAA0B,2BAAgB,GAAhB,CAA9B,EAAoD;AAClD,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,QADL,CAAA,EACa;AACX,QAAA,IAAI,EAAE;AAAC,UAAA,QAAQ,EAAE,GAAX;AAAgB,UAAA,KAAK,EAAE;AAAvB;AADK,OADb,CAAA;AAID;AACF;;AAED,MAAI,4BAAgB,QAAhB,CAAJ,EAA+B;AAC7B,UAAM;AAAC,MAAA;AAAD,QAAW,QAAjB;AACA,UAAM;AAAC,MAAA;AAAD,QAAoB,MAA1B;AAAA,UAAkB,IAAI,GAAA,mBAAI,MAAJ,EAAhB,CAAA,QAAA,CAAgB,CAAtB;;AACA,QAAI,MAAJ,EAAY;AACV,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,QADL,CAAA,EACa;AACX,QAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,IADC,CAAA,EACG;AACP,UAAA,WAAW,EAAE,MAAM,CAAC,WAAP,IAAsB,MAD5B;AAEP,UAAA,WAAW,EAAE,MAAM,CAAC,WAAP,IAAsB;AAF5B,SADH;AADK,OADb,CAAA;AAQD;AACF;;AAED,SAAO,QAAP;AACD;;AAEK,SAAU,YAAV,CAAuB,GAAvB,EAA4D,OAA5D,EAA6E;AACjF,MAAI,yBAAU,GAAV,CAAJ,EAAoB;AAClB,WAAO;AAAC,MAAA,OAAO,EAAE,sBAAY,OAAZ;AAAV,KAAP;AACD,GAFD,MAEO,IAAI,GAAG,KAAK,QAAZ,EAAsB;AAC3B,WAAO;AACL,MAAA,MAAM,EAAE;AADH,KAAP;AAGD,GAJM,MAIA,IAAI,CAAC,GAAG,CAAC,OAAL,IAAgB,CAAC,GAAG,CAAC,IAAzB,EAA+B;AACpC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,GAAX,CAAA,EAAc;AAAE,MAAA,OAAO,EAAE,sBAAY,OAAZ;AAAX,KAAd,CAAA;AACD,GAFM,MAEA;AACL,WAAO,GAAP;AACD;AACF;;AAED,MAAM,UAAU,GAAG;AAAC,EAAA,UAAU,EAAE;AAAb,CAAnB;;AACM,SAAU,oBAAV,CACJ,QADI,EAEJ,OAFI,EAEY;AAEhB,QAAM,IAAI,GAAG,QAAQ,CAAC,IAAtB;;AAEA,MAAI,IAAI,KAAK,SAAT,IAAsB,OAAO,KAAK,OAAtC,EAA+C;AAC7C,WAAO;AACL,MAAA,UAAU,EAAE,KADP;AAEL,MAAA,OAAO,EAAE,WAAW,OAAO;AAFtB,KAAP;AAID;;AAED,UAAQ,OAAR;AACE,SAAK,YAAL;AACA,SAAK,eAAL;AACA,SAAK,cAAL;AACE,UAAI,YAAY,CAAC,QAAD,CAAhB,EAA4B;AAC1B,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE,GAAG,CAAC,OAAJ,CAAY,4BAAZ,CAAyC,OAAzC;AAFJ,SAAP;AAID;;AACD,aAAO,UAAP;;AAEF,SAAK,UAAL;AACA,SAAK,UAAL;AACA,SAAK,cAAL;AACA,SAAK,aAAL;AACA,SAAK,eAAL;AACA,SAAK,aAAL;AACA,SAAK,eAAL;AACA,SAAK,YAAL;AACA,SAAK,gBAAL;AACA,SAAK,aAAL;AACA,SAAK,YAAL;AACA,SAAK,cAAL;AACA,SAAK,cAAL;AACA,SAAK,eAAL;AACA,SAAK,oBAAL;AACE,aAAO,UAAP;;AAEF,SAAK,kBAAL;AACA,SAAK,mBAAL;AACA,SAAK,iBAAL;AACA,SAAK,kBAAL;AACE,UAAI,IAAI,KAAK,kBAAb,EAA2B;AACzB,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE,WAAW,OAAO,uDAAuD,QAAQ,CAAC,IAAI;AAF1F,SAAP;AAID;;AACD,aAAO,UAAP;;AAEF,SAAK,gBAAL;AACA,SAAK,oBAAL;AACA,SAAK,sBAAL;AACA,SAAK,oBAAL;AACA,SAAK,aAAL;AACA,SAAK,eAAL;AACA,SAAK,gBAAL;AACA,SAAK,WAAL;AACA,SAAK,WAAL;AACE,UAAI,IAAI,KAAK,SAAT,IAAsB,CAAC,QAAQ,CAAC,MAAD,CAAnC,EAA6C;AAC3C,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE,WAAW,OAAO;AAFtB,SAAP;AAID;;AACD,aAAO,UAAP;;AAEF,SAAK,mBAAL;AACE,UAAI,CAAC,oBAAS,CAAC,SAAD,EAAY,SAAZ,CAAT,EAAiC,QAAQ,CAAC,IAA1C,CAAL,EAAsD;AACpD,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE;AAFJ,SAAP;AAID;;AACD,aAAO,UAAP;;AAEF,SAAK,cAAL;AACE,UAAI,CAAC,oBAAS,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,CAAT,EAA4C,QAAQ,CAAC,IAArD,CAAL,EAAiE;AAC/D,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE;AAFJ,SAAP;AAID;;AACD,aAAO,UAAP;;AAEF,SAAK,cAAL;AACE,UAAI,QAAQ,CAAC,IAAT,KAAkB,SAAlB,IAA+B,EAAE,UAAU,QAAZ,CAAnC,EAA0D;AACxD,eAAO;AACL,UAAA,UAAU,EAAE,KADP;AAEL,UAAA,OAAO,EAAE;AAFJ,SAAP;AAID;;AACD,aAAO,UAAP;AAnFJ;AAqFD;AAED;;;;;;AAIM,SAAU,8BAAV,CAAyC,eAAzC,EAAqF;AACzF,QAAM;AAAC,IAAA;AAAD,MAAe,eAAe,CAAC,eAAD,CAApC;AACA,SAAO,UAAU,KAAK,MAAf,IAA0B,CAAC,UAAD,IAAe,cAAc,CAAC,eAAD,CAA9D;AACD;AAED;;;;;AAGM,SAAU,cAAV,CAAyB,GAAzB,EAAsD;AAC1D,SAAO,GAAG,KAAK,GAAG,CAAC,MAAD,CAAH,KAAgB,UAAhB,IAA+B,UAAU,CAAC,GAAD,CAAV,IAAmB,CAAC,CAAC,GAAG,CAAC,QAA7D,CAAV;AACD;AAED;;;;;;AAIM,SAAU,SAAV,CACJ,CADI,EAEJ;AACE,EAAA,QADF;AAEE,EAAA,IAFF;AAGE,EAAA,QAHF;AAIE,EAAA;AAJF,CAFI,EAYH;;;AAED,QAAM,IAAI,GAAG,QAAQ,KAAA,CAAA,EAAA,GAAI,iCAAkB,QAAlB,CAAJ,MAA+B,IAA/B,IAA+B,EAAA,KAAA,KAAA,CAA/B,GAA+B,KAAA,CAA/B,GAA+B,EAAA,CAAE,IAAjC,CAArB;AACA,MAAI,MAAM,GAAG,IAAI,IAAI,IAAI,KAAK,UAA9B;AAEA,MAAI,IAAJ;;AACA,MAAI,uBAAY,CAAZ,CAAJ,EAAoB;AAClB,IAAA,IAAI,GAAG,CAAC,CAAC,MAAT;AACD,GAFD,MAEO,IAAI,0BAAW,CAAX,CAAJ,EAAmB;AACxB,IAAA,MAAM,GAAG,IAAT;AACA,IAAA,IAAI,GAAG,8BAAe,CAAf,CAAP;AACD,GAHM,MAGA,IAAI,wBAAS,CAAT,KAAe,wBAAS,CAAT,CAAnB,EAAgC;AACrC,QAAI,MAAJ,EAAY;AACV,MAAA,IAAI,GAAG,YAAY,IAAI,CAAC,SAAL,CAAe,CAAf,CAAiB,GAApC;;AAEA,UAAI,qCAAsB,IAAtB,CAAJ,EAAiC;AAC/B;AACA,YAAK,wBAAS,CAAT,KAAe,CAAC,GAAG,KAApB,IAA+B,wBAAS,CAAT,KAAe,KAAK,CAAC,IAAI,CAAC,KAAL,CAAW,CAAX,CAAD,CAAvD,EAAyE;AACvE,UAAA,IAAI,GAAG,8BAAe;AAAC,aAAC,IAAD,GAAQ;AAAT,WAAf,CAAP;AACD;AACF;AACF;AACF;;AACD,MAAI,IAAJ,EAAU;AACR,WAAO,QAAQ,IAAI,MAAZ,GAAqB,QAAQ,IAAI,GAAjC,GAAuC,IAA9C;AACD,GAzBA,CA0BD;;;AACA,SAAO,0BAA0B,GAAG,SAAH,GAAe,IAAI,CAAC,SAAL,CAAe,CAAf,CAAhD;AACD;AAED;;;;;AAGM,SAAU,UAAV,CACJ,eADI,EAEJ,MAFI,EAE4C;AAEhD,QAAM;AAAC,IAAA;AAAD,MAAS,eAAf;AACA,SAAO,MAAM,CAAC,GAAP,CAAW,CAAC,IAAG;AACpB,UAAM,IAAI,GAAG,SAAS,CAAC,CAAD,EAAI;AACxB,MAAA,QAAQ,EAAE,UAAU,CAAC,eAAD,CAAV,GAA8B,eAAe,CAAC,QAA9C,GAAyD,SAD3C;AAExB,MAAA,IAFwB;AAGxB,MAAA,0BAA0B,EAAE;AAHJ,KAAJ,CAAtB,CADoB,CAMpB;;AACA,QAAI,IAAI,KAAK,SAAb,EAAwB;AACtB,aAAO;AAAC,QAAA,MAAM,EAAE;AAAT,OAAP;AACD,KATmB,CAUpB;;;AACA,WAAO,CAAP;AACD,GAZM,CAAP;AAaD;AAED;;;;;AAGM,SAAU,gBAAV,CAA2B,QAA3B,EAAuD,OAAvD,EAAuE;AAC3E,MAAI,CAAC,oBAAU,QAAQ,CAAC,GAAnB,CAAL,EAA8B;AAC5B,IAAA,OAAO,CAAC,IAAR,CAAa,8CAAb;AACA,WAAO,KAAP;AACD,GAJ0E,CAM3E;AACA;;;AACA,SAAO,6BAAe,OAAf,KAA2B,oBAAS,CAAC,SAAD,EAAY,SAAZ,CAAT,EAAkC,QAAkC,CAAC,IAArE,CAAlC;AACD;;;;;;;;;;;;AChzCD;;AAEA;;AAyDM,SAAU,kBAAV,CACJ,WADI,EACoB;AAOxB,QAAM;AACJ;AACA,IAAA,MAFI;AAGJ,IAAA,KAHI;AAIJ,IAAA,MAJI;AAKJ,IAAA,MALI;AAOJ;AACA,IAAA,KARI;AAUJ;AACA,IAAA,aAXI;AAYJ,IAAA,YAZI;AAaJ,IAAA,gBAbI;AAcJ,IAAA,iBAdI;AAeJ,IAAA,kBAfI;AAgBJ,IAAA,kBAhBI;AAiBJ,IAAA;AAjBI,MAqBF,WArBJ;AAAA,QAmBE;AACG,EAAA,IAAI,GAAA,mBACL,WADK,EApBH,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,iBAAA,CAoBG,CApBT;AAuBA,QAAM,eAAe,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,IADgB,CAAA,EAEf,KAAK,GAAG;AAAC,IAAA,IAAI,EAAE;AAAP,GAAH,GAAmB,EAFT,CAArB,CA9BwB,CAmCxB;;AACA,QAAM,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACP,MAAM,GAAG;AAAC,IAAA;AAAD,GAAH,GAAc,EADb,CAAA,EAEP,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,EAFX,CAAA,EAGP,MAAM,GAAG;AAAC,IAAA;AAAD,GAAH,GAAc,EAHb,CAAA,EAIP,MAAM,GAAG;AAAC,IAAA;AAAD,GAAH,GAAc,EAJb,CAAb,CApCwB,CA2CxB;;AACA,QAAM,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACR,aAAa,GAAG;AAAC,IAAA;AAAD,GAAH,GAAqB,EAD1B,CAAA,EAER,YAAY,GAAG;AAAC,IAAA;AAAD,GAAH,GAAoB,EAFxB,CAAA,EAGR,gBAAgB,GAAG;AAAC,IAAA;AAAD,GAAH,GAAwB,EAHhC,CAAA,EAIR,iBAAiB,GAAG;AAAC,IAAA;AAAD,GAAH,GAAyB,EAJlC,CAAA,EAKR,kBAAkB,GAAG;AAAC,IAAA;AAAD,GAAH,GAA0B,EALpC,CAAA,EAMR,kBAAkB,GAAG;AAAC,IAAA;AAAD,GAAH,GAA0B,EANpC,CAAA,EAOR,eAAe,GAAG;AAAC,IAAA;AAAD,GAAH,GAAuB,EAP9B,CAAd;AAUA,QAAM,kBAAkB,GAAG,gBAAK,eAAL,EAAsB,CAAC,OAAD,EAAU,UAAV,EAAsB,IAAtB,EAA4B,IAA5B,EAAkC,OAAlC,CAAtB,CAA3B;AAEA,SAAO;AAAC,IAAA,eAAD;AAAkB,IAAA,kBAAlB;AAAsC,IAAA,OAAtC;AAA+C,IAAA;AAA/C,GAAP;AACD;;AAEK,SAAU,MAAV,CAAiB,CAAjB,EAAuB;AAC3B,SAAO,wBAAS,CAAT,KAAgB,uBAAQ,CAAR,KAAc,wBAAS,CAAC,CAAC,CAAD,CAAV,CAArC;AACD;;;;;;;;;;;;;;;;;;;;;;ACzHD;;AAEA;;AAIA;;AACA;;AACA;;AAKO,MAAM,mBAAmB,GAAG,UAA5B;;;AAED,SAAU,gBAAV,CAA8B,KAA9B,EAAkD;AACtD,MAAI,uBAAY,KAAZ,CAAJ,EAAwB;AACtB,WAAO,KAAP;AACD;;AACD,SAAO,KAAK,KAAK,SAAV,GAAsB;AAAC,IAAA;AAAD,GAAtB,GAAgC,SAAvC;AACD;;AAEK,SAAU,wBAAV,CAAmC,GAAnC,EAA8D;AAClE,MAAI,uBAAY,GAAZ,CAAJ,EAAsB;AACpB,WAAO,GAAG,CAAC,MAAX;AACD;;AACD,SAAO,2BAAY,GAAG,CAAC,KAAhB,CAAP;AACD;;AAEK,SAAU,mBAAV,CAA8B,CAA9B,EAAgD;AACpD,MAAI,uBAAY,CAAZ,CAAJ,EAAoB;AAClB,WAAO,CAAC,CAAC,MAAT;AACD;;AACD,SAAO,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmB,2BAAY,CAAZ,CAA1B;AACD;;AAEK,SAAU,eAAV,CAA0B,CAA1B,EAA4C,KAA5C,EAA8D,SAA9D,EAA6F;AACjG,OAAK,MAAM,QAAX,IAAuB,SAAvB,EAAkC;AAChC,UAAM,KAAK,GAAG,aAAa,CAAC,QAAD,EAAW,KAAK,CAAC,OAAjB,EAA0B,KAAK,CAAC,MAAhC,CAA3B;;AACA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,MAAA,CAAC,CAAC,QAAD,CAAD,GAAc,gBAAgB,CAAC,KAAD,CAA9B;AACD;AACF;;AACD,SAAO,CAAP;AACD;;AAEK,SAAU,SAAV,CAAoB,IAApB,EAAiC;;;AACrC,SAAO,GAAG,MAAH,CAAU,IAAI,CAAC,IAAf,EAAmB,CAAA,EAAA,GAAE,IAAI,CAAC,KAAP,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAAnC,CAAP;AACD;;AAEK,SAAU,mBAAV,CACJ,OADI,EAEJ,IAFI,EAGJ,MAHI,EAIJ,GAAA,GAGI,EAPA,EAOE;AAEN,QAAM;AAAC,IAAA,SAAD;AAAY,IAAA;AAAZ,MAA8B,GAApC;;AACA,MAAI,SAAS,IAAI,IAAI,CAAC,SAAD,CAAJ,KAAoB,SAArC,EAAgD;AAC9C,WAAO,IAAI,CAAC,SAAD,CAAX;AACD,GAFD,MAEO,IAAI,IAAI,CAAC,OAAD,CAAJ,KAAkB,SAAtB,EAAiC;AACtC,WAAO,IAAI,CAAC,OAAD,CAAX;AACD,GAFM,MAEA,IAAI,cAAc,KAAK,CAAC,SAAD,IAAc,SAAS,KAAK,OAAjC,CAAlB,EAA6D;AAClE,WAAO,SAAP;AACD;;AAED,SAAO,aAAa,CAAC,OAAD,EAAU,IAAV,EAAgB,MAAhB,EAAwB,GAAxB,CAApB;AACD;AAED;;;;;;AAIM,SAAU,aAAV,CACJ,OADI,EAEJ,IAFI,EAGJ,MAHI,EAIJ;AAAC,EAAA;AAAD,IAA6C,EAJzC,EAI2C;AAE/C,SAAO,4BACL;AACA,EAAA,SAAS,GAAG,kBAAkB,CAAC,OAAD,EAAU,IAAV,EAAgB,MAAM,CAAC,KAAvB,CAArB,GAAqD,SAFzD,EAGL,kBAAkB,CAAC,OAAD,EAAU,IAAV,EAAgB,MAAM,CAAC,KAAvB,CAHb,EAIL;AACA,EAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAN,CAAN,CAAkB,SAAlB,CAAH,GAAkC,SALtC,EAOL,MAAM,CAAC,IAAI,CAAC,IAAN,CAAN,CAAkB,OAAlB,CAPK,EAO8B;AAEnC;AACA;AACA,EAAA,SAAS,GAAG,MAAM,CAAC,IAAP,CAAY,SAAZ,CAAH,GAA4B,MAAM,CAAC,IAAP,CAAY,OAAZ,CAXhC,CAW4D;AAX5D,GAAP;AAaD;;AAEK,SAAU,kBAAV,CACJ,IADI,EAEJ,IAFI,EAGJ,gBAHI,EAG8B;AAElC,SAAO,cAAc,CAAC,IAAD,EAAO,SAAS,CAAC,IAAD,CAAhB,EAAwB,gBAAxB,CAArB;AACD;;AAEK,SAAU,cAAV,CACJ,CADI,EAEJ,MAFI,EAGJ,gBAHI,EAG8B;AAElC,EAAA,MAAM,GAAG,qBAAM,MAAN,CAAT;AACA,MAAI,KAAJ;;AACA,OAAK,MAAM,KAAX,IAAoB,MAApB,EAA4B;AAC1B,UAAM,WAAW,GAAG,gBAAgB,CAAC,KAAD,CAApC;;AAEA,QAAI,WAAW,IAAI,WAAW,CAAC,CAAD,CAAX,KAA6B,SAAhD,EAA2D;AACzD,MAAA,KAAK,GAAG,WAAW,CAAC,CAAD,CAAnB;AACD;AACF;;AACD,SAAO,KAAP;AACD;AAED;;;;;AAGM,SAAU,UAAV,CACJ,QADI,EAEJ,cAFI,EAE2B;AAE/B,SAAO,qBAAM,QAAN,EAAgB,MAAhB,CACL,CAAC,CAAD,EAAI,eAAJ,KAAuB;;;AACrB,IAAA,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAa,yBAAQ,eAAR,EAAyB,cAAzB,CAAb;AACA,IAAA,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAY,CAAA,EAAA,GAAC,eAAe,CAAC,IAAjB,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,WAArC;AACA,WAAO,CAAP;AACD,GALI,EAML;AAAC,IAAA,KAAK,EAAE,EAAR;AAAY,IAAA,KAAK,EAAE;AAAnB,GANK,CAAP;AAQD;;AAIK,SAAU,mBAAV,CAA8B,EAA9B,EAAmE,EAAnE,EAAsG;AAC1G,QAAM,MAAM,GAAG,CAAC,GAAG,EAAJ,CAAf;AAEA,EAAA,EAAE,CAAC,OAAH,CAAW,SAAS,IAAG;AACrB,SAAK,MAAM,SAAX,IAAwB,MAAxB,EAAgC;AAC9B;AACA,UAAI,qBAAU,SAAV,EAAqB,SAArB,CAAJ,EAAqC;AACnC;AACD;AACF;;AACD,IAAA,MAAM,CAAC,IAAP,CAAY,SAAZ;AACD,GARD;AASA,SAAO,MAAP;AACD;;AAEK,SAAU,UAAV,CAAqB,MAArB,EAA+C,MAA/C,EAAuE;AAC3E,MAAI,qBAAU,MAAV,EAAkB,MAAlB,KAA6B,CAAC,MAAlC,EAA0C;AACxC;AACA,WAAO,MAAP;AACD,GAHD,MAGO,IAAI,CAAC,MAAL,EAAa;AAClB;AACA,WAAO,MAAP;AACD,GAHM,MAGA;AACL,WAAO,CAAC,GAAG,qBAAM,MAAN,CAAJ,EAAmB,GAAG,qBAAM,MAAN,CAAtB,EAAqC,IAArC,CAA0C,IAA1C,CAAP;AACD;AACF;;AAEK,SAAU,mBAAV,CAA8B,EAA9B,EAAgE,EAAhE,EAAgG;AACpG,QAAM,KAAK,GAAG,EAAE,CAAC,KAAjB;AACA,QAAM,KAAK,GAAG,EAAE,CAAC,KAAjB;;AAEA,MAAI,KAAK,IAAI,IAAT,IAAiB,KAAK,KAAK,IAA/B,EAAqC;AACnC,WAAO;AACL,MAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,MAAA,KAAK,EAAE;AAFF,KAAP;AAID,GALD,MAKO,IAAI,CAAC,mBAAO,KAAP,KAAiB,uBAAY,KAAZ,CAAlB,MAA0C,mBAAO,KAAP,KAAiB,uBAAY,KAAZ,CAA3D,CAAJ,EAAoF;AACzF,WAAO;AACL,MAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,MAAA,KAAK,EAAE,UAAU,CAAC,KAAD,EAAQ,KAAR;AAFZ,KAAP;AAID,GALM,MAKA,IAAI,mBAAO,KAAP,KAAiB,uBAAY,KAAZ,CAArB,EAAyC;AAC9C,WAAO;AACL,MAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,MAAA,KAAK,EAAE;AAFF,KAAP;AAID,GALM,MAKA,IAAI,mBAAO,KAAP,KAAiB,uBAAY,KAAZ,CAArB,EAAyC;AAC9C,WAAO;AACL,MAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,MAAA,KAAK,EAAE;AAFF,KAAP;AAID,GALM,MAKA,IAAI,CAAC,mBAAO,KAAP,CAAD,IAAkB,CAAC,uBAAY,KAAZ,CAAnB,IAAyC,CAAC,mBAAO,KAAP,CAA1C,IAA2D,CAAC,uBAAY,KAAZ,CAAhE,EAAoF;AACzF,WAAO;AACL,MAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,MAAA,KAAK,EAAE,mBAAmB,CAAC,KAAD,EAAQ,KAAR;AAFrB,KAAP;AAID;AACD;;;AACA,QAAM,IAAI,KAAJ,CAAU,4BAAV,CAAN;AACD;;;;;;;;;;;;;;;;;;;ACvMD;;AACA;;AACA;;AACA;;AAwCA;;AAkDA;;AAIA;;AACA;;AACA;;;;;;AA4OM,SAAU,eAAV,CAA2C,QAA3C,EAA2E,OAA3E,EAA2F;AAC/F,QAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,OAAD,CAAvC;;AACA,MAAI,UAAJ,EAAgB;AACd,QAAI,uBAAQ,UAAR,CAAJ,EAAyB;AACvB,aAAO,gBAAK,UAAL,EAAiB,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAxC,CAAP;AACD,KAFD,MAEO;AACL,aAAO,4BAAW,UAAX,KAA0B,wCAA8B,UAA9B,CAAjC;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAEK,SAAU,WAAV,CAAsB,QAAtB,EAAsD;AAC1D,SAAO,gBAAK,iBAAL,EAAe,OAAO,IAAG;AAC9B,QAAI,eAAe,CAAC,QAAD,EAAW,OAAX,CAAnB,EAAwC;AACtC,YAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;;AACA,UAAI,uBAAQ,UAAR,CAAJ,EAAyB;AACvB,eAAO,gBAAK,UAAL,EAAiB,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAxC,CAAP;AACD,OAFD,MAEO;AACL,cAAM,QAAQ,GAAG,6BAAY,UAAZ,CAAjB;AACA,eAAO,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAA9B;AACD;AACF;;AACD,WAAO,KAAP;AACD,GAXM,CAAP;AAYD;;AAEK,SAAU,6BAAV,CAAwC,WAAxC,EAAoE,MAApE,EAAkF;AACtF,QAAM,OAAO,GAAa,EAA1B;AACA,QAAM,IAAI,GAAmB,EAA7B;AACA,QAAM,SAAS,GAAwB,EAAvC;AACA,QAAM,SAAS,GAAyB,EAAxC;AACA,QAAM,QAAQ,GAAqB,EAAnC;AAEA,EAAA,OAAO,CAAC,WAAD,EAAc,CAAC,UAAD,EAAa,OAAb,KAAwB;AAC3C;AACA,QAAI,4BAAW,UAAX,CAAJ,EAA4B;AAC1B,YAAM;AAAC,QAAA,KAAD;AAAQ,QAAA,SAAS,EAAE,KAAnB;AAA0B,QAAA,GAA1B;AAA+B,QAAA;AAA/B,UAAyD,UAA/D;AAAA,YAAkD,SAAS,GAAA,mBAAI,UAAJ,EAArD,CAAA,OAAA,EAAA,WAAA,EAAA,KAAA,EAAA,UAAA,CAAqD,CAA3D;;AACA,UAAI,KAAK,IAAI,QAAT,IAAqB,GAAzB,EAA8B;AAC5B,cAAM,KAAK,GAAG,0BAAS,UAAT,CAAd;AACA,cAAM,cAAc,GAAG,KAAK,IAAI,KAAK,CAAC,KAAtC;AACA,YAAI,QAAQ,GAAG,yBAAQ,UAAR,EAAoB;AAAC,UAAA,KAAK,EAAE;AAAR,SAApB,CAAf;AACA,cAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEX,cAAc,GAAG,EAAH,GAAQ;AAAC,UAAA,KAAK,EAAE,uBAAM,UAAN,EAAkB,MAAlB,EAA0B;AAAC,YAAA,cAAc,EAAE;AAAjB,WAA1B;AAAR,SAFX,CAAA,EAGZ,SAHY,CAAA,EAGH;AACZ;AACA,UAAA,KAAK,EAAE;AAFK,SAHG,CAAjB;;AAQA,YAAI,KAAJ,EAAW;AACT,cAAI,EAAJ;;AAEA,cAAI,4BAAY,KAAZ,CAAJ,EAAwB;AACtB,YAAA,EAAE,GAAG,QAAL;AACA,YAAA,QAAQ,GAAG,yBAAQ;AAAC,cAAA,EAAE,EAAE,QAAL;AAAe,cAAA,KAAK,EAAE,KAAK,CAAC;AAA5B,aAAR,EAA6C;AAAC,cAAA,KAAK,EAAE;AAAR,aAA7C,CAAX;AACA,YAAA,WAAW,CAAC,KAAZ,GAAoB,GAAG,QAAQ,IAAI,KAAK,EAAxC;AACD,WAJD,MAIO,IAAI,4BAAY,KAAZ,CAAJ,EAAwB;AAC7B,YAAA,EAAE,GAAG,QAAL;AACA,YAAA,QAAQ,GAAG,yBAAQ;AAAC,cAAA,EAAE,EAAE,QAAL;AAAe,cAAA,KAAK,EAAE,KAAK,CAAC;AAA5B,aAAR,EAA6C;AAAC,cAAA,KAAK,EAAE;AAAR,aAA7C,CAAX;AACA,YAAA,WAAW,CAAC,KAAZ,GAAoB,GAAG,QAAQ,IAAI,KAAK,EAAxC;AACD,WAJM,MAIA,IAAI,KAAK,KAAK,SAAV,IAAuB,KAAK,KAAK,UAAjC,IAA+C,KAAK,KAAK,WAA7D,EAA0E;AAC/E,YAAA,EAAE,GAAG,KAAL;AACD;;AAED,cAAI,EAAJ,EAAQ;AACN,kBAAM,cAAc,GAAuB;AACzC,cAAA,EADyC;AAEzC,cAAA,EAAE,EAAE;AAFqC,aAA3C;;AAIA,gBAAI,KAAJ,EAAW;AACT,cAAA,cAAc,CAAC,KAAf,GAAuB,KAAvB;AACD;;AACD,YAAA,SAAS,CAAC,IAAV,CAAe,cAAf;AACD;AACF,SAzBD,MAyBO;AACL,UAAA,OAAO,CAAC,IAAR,CAAa,QAAb;;AACA,cAAI,iCAAgB,UAAhB,KAA+B,oBAAU,GAAV,CAAnC,EAAmD;AACjD,YAAA,IAAI,CAAC,IAAL,CAAU;AAAC,cAAA,GAAD;AAAM,cAAA,KAAN;AAAa,cAAA,EAAE,EAAE;AAAjB,aAAV,EADiD,CAEjD;;AACA,YAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,UAAR,EAAoB;AAAC,cAAA,SAAS,EAAE;AAAZ,aAApB,CAAb;;AACA,gBAAI,kCAAiB,UAAjB,EAA6B,OAA7B,CAAJ,EAA2C;AACzC,cAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,UAAR,EAAoB;AAAC,gBAAA,SAAS,EAAE;AAAZ,eAApB,CAAb;AACD,aANgD,CAOjD;;;AACA,gBAAI,qBAAO,OAAP,CAAJ,EAAqB;AACnB,oBAAM,gBAAgB,GAA8B;AAClD,gBAAA,KAAK,EAAE,QAAQ,GAAG;AADgC,eAApD;AAGA,cAAA,QAAQ,CAAC,OAAO,GAAG,GAAX,CAAR,GAA0B,gBAA1B;AACD;;AACD,YAAA,WAAW,CAAC,GAAZ,GAAkB,QAAlB;;AACA,gBAAI,CAAC,sCAAwB,OAAxB,CAAL,EAAuC;AACrC,cAAA,WAAW,CAAC,MAAD,CAAX,GAAsB,kBAAtB;AACD;AACF,WAlBD,MAkBO,IAAI,QAAJ,EAAc;AACnB,YAAA,SAAS,CAAC,IAAV,CAAe;AACb,cAAA,QADa;AAEb,cAAA,KAFa;AAGb,cAAA,EAAE,EAAE;AAHS,aAAf,EADmB,CAOnB;;AACA,kBAAM,UAAU,GAAG,iCAAgB,UAAhB,KAA+B,UAAU,CAAC,IAAX,KAAoB,cAAnD,IAA+D,MAAlF;;AACA,gBAAI,UAAJ,EAAgB;AACd,kBAAI,OAAO,KAAK,aAAZ,IAAoB,OAAO,KAAK,gBAApC,EAA6C;AAC3C,gBAAA,WAAW,CAAC,YAAD,CAAX,GAA4B,UAA5B;AACD,eAFD,MAEO,IAAI,wCAA0B,OAA1B,CAAJ,EAAwC;AAC7C,gBAAA,WAAW,CAAC,QAAD,CAAX,GAAqB,MAAA,CAAA,MAAA,CAAA;AACnB,kBAAA;AADmB,iBAAA,EAEhB,WAAW,CAAC,QAAD,CAFK,CAArB;AAID,eALM,MAKA,IAAI,qBAAO,OAAP,CAAJ,EAAqB;AAC1B,gBAAA,WAAW,CAAC,MAAD,CAAX,GAAmB,MAAA,CAAA,MAAA,CAAA;AACjB,kBAAA;AADiB,iBAAA,EAEd,WAAW,CAAC,MAAD,CAFG,CAAnB;AAID;AACF;AACF;AACF,SAlF2B,CAmF5B;;;AACA,QAAA,QAAQ,CAAC,OAAD,CAAR,GAAoB,WAApB;AACD,OArFD,MAqFO;AACL,QAAA,OAAO,CAAC,IAAR,CAAa,KAAb;AACA,QAAA,QAAQ,CAAC,OAAD,CAAR,GAAoB,WAAW,CAAC,OAAD,CAA/B;AACD;AACF,KA3FD,MA2FO;AACL;AACA,MAAA,QAAQ,CAAC,OAAD,CAAR,GAAoB,WAAW,CAAC,OAAD,CAA/B;AACD;AACF,GAjGM,CAAP;AAmGA,SAAO;AACL,IAAA,IADK;AAEL,IAAA,SAFK;AAGL,IAAA,SAHK;AAIL,IAAA,OAJK;AAKL,IAAA;AALK,GAAP;AAOD;;AAEK,SAAU,qBAAV,CAAgC,QAAhC,EAA4D,OAA5D,EAA8E,IAA9E,EAAwF;AAC5F,QAAM,aAAa,GAAG,0BAAY,OAAZ,EAAqB,IAArB,CAAtB;;AACA,MAAI,CAAC,aAAL,EAAoB;AAClB,WAAO,KAAP;AACD,GAFD,MAEO,IAAI,aAAa,KAAK,QAAtB,EAAgC;AACrC,UAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,KAAK,WAAZ,GAAiB,UAAjB,GAAqB,UAAtB,CAAhC,CADqC,CAGrC;AACA;;AACA,QAAI,4BAAW,eAAX,KAA+B,4BAAW,QAAQ,CAAC,OAAD,CAAnB,CAA/B,IAAgE,mBAAS,eAAe,CAAC,GAAzB,CAApE,EAAmG;AACjG,aAAO,IAAP;AACD,KAFD,MAEO;AACL,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAEK,SAAU,YAAV,CAAuB,QAAvB,EAAmD,OAAnD,EAAqE,MAArE,EAAmF;AACvF,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AAEA,SAAO,gBAAK,QAAL,EAAe,MAAf,CAAsB,CAAC,kBAAD,EAAuC,OAAvC,KAA2D;AACtF,QAAI,CAAC,wBAAU,OAAV,CAAL,EAAyB;AACvB;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sBAAZ,CAAmC,OAAnC,CAAT;AACA,aAAO,kBAAP;AACD;;AAED,UAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;;AACA,QAAI,OAAO,KAAK,OAAZ,IAAuB,IAAI,KAAK,KAAhC,IAAyC,CAAC,QAAQ,CAAC,KAAvD,EAA8D;AAC5D,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,wBAArB;AACA,MAAA,OAAO,GAAG,cAAV;AACD;;AAED,QAAI,CAAC,qBAAqB,CAAC,QAAD,EAAW,OAAX,EAAoB,IAApB,CAA1B,EAAqD;AACnD;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,OAAhC,EAAyC,IAAzC,CAAT;AACA,aAAO,kBAAP;AACD,KAjBqF,CAmBtF;;;AACA,QAAI,OAAO,KAAK,aAAZ,IAAoB,IAAI,KAAK,MAAjC,EAAyC;AACvC,YAAM,QAAQ,GAAG,6BAAY,QAAQ,CAAC,OAAD,CAApB,CAAjB;;AACA,UAAI,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAQ,KAAA,CAAR,GAAA,QAAQ,CAAE,SAAd,EAAyB;AACvB,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sBAArB;AACA,eAAO,kBAAP;AACD;AACF,KA1BqF,CA4BtF;;;AAEA,QAAI,OAAO,KAAK,cAAZ,KAAsB,OAAO,CAAC,MAAR,GAAiB,UAAU,QAA3B,GAAsC,YAAY,QAAxE,CAAJ,EAAuF;AACrF,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,UAA1B,EAAsC;AAAC,QAAA,IAAI,EAAE,UAAU,QAAjB;AAA2B,QAAA,MAAM,EAAE,YAAY;AAA/C,OAAtC,CAAT;AACA,aAAO,kBAAP;AACD;;AAED,QACE,OAAO,KAAK,eAAZ,IACC,OAAO,KAAK,cAAZ,IAAqB,CAAC,uBAAQ,UAAR,CAAtB,IAA6C,CAAC,4BAAW,UAAX,CAD/C,IAEC,OAAO,KAAK,gBAAZ,IAAuB,uBAAQ,UAAR,CAH1B,EAIE;AACA,UAAI,UAAJ,EAAgB;AACd;AACC,QAAA,kBAAkB,CAAC,OAAD,CAAlB,GAAsC,qBAAM,UAAN,EAAkB,MAAlB,CACrC,CAAC,IAAD,EAA2B,QAA3B,KAAyD;AACvD,cAAI,CAAC,4BAAW,QAAX,CAAL,EAA2B;AACzB,YAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,QAA1B,EAAoC,OAApC,CAAT;AACD,WAFD,MAEO;AACL,YAAA,IAAI,CAAC,IAAL,CAAU,8BAAa,QAAb,EAAuB,OAAvB,CAAV;AACD;;AACD,iBAAO,IAAP;AACD,SARoC,EASrC,EATqC,CAAtC;AAWF;AACF,KAnBD,MAmBO;AACL,UAAI,OAAO,KAAK,gBAAZ,IAAuB,UAAU,KAAK,IAA1C,EAAgD;AAC9C;AACA,QAAA,kBAAkB,CAAC,OAAD,CAAlB,GAA8B,IAA9B;AACD,OAHD,MAGO,IACL,CAAC,4BAAW,UAAX,CAAD,IACA,CAAC,4BAAW,UAAX,CADD,IAEA,CAAC,4BAAW,UAAX,CAFD,IAGA,CAAC,kCAAiB,UAAjB,CAHD,IAIA,CAAC,uBAAY,UAAZ,CALI,EAML;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,UAA1B,EAAsC,OAAtC,CAAT;AACA,eAAO,kBAAP;AACD;;AACD,MAAA,kBAAkB,CAAC,OAAD,CAAlB,GAA8B,gCAAe,UAAf,EAAyC,OAAzC,EAAkD,MAAlD,CAA9B;AACD;;AACD,WAAO,kBAAP;AACD,GAvEM,EAuEJ,EAvEI,CAAP;AAwED;;AAEK,SAAU,SAAV,CAAqC,QAArC,EAAmE;AACvE,QAAM,GAAG,GAAkB,EAA3B;;AACA,OAAK,MAAM,OAAX,IAAsB,gBAAK,QAAL,CAAtB,EAAsC;AACpC,QAAI,eAAe,CAAC,QAAD,EAAW,OAAX,CAAnB,EAAwC;AACtC,YAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;AACA,YAAM,eAAe,GAAG,qBAAM,UAAN,CAAxB;;AACA,WAAK,MAAM,GAAX,IAAkB,eAAlB,EAAmC;AACjC,YAAI,4BAAW,GAAX,CAAJ,EAAqB;AACnB,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAT;AACD,SAFD,MAEO,IAAI,wCAA0B,GAA1B,CAAJ,EAAoC;AACzC,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,SAAb;AACD;AACF;AACF;AACF;;AACD,SAAO,GAAP;AACD;;AAEK,SAAU,OAAV,CACJ,OADI,EAEJ,CAFI,EAGJ,OAHI,EAGS;AAEb,MAAI,CAAC,OAAL,EAAc;AACZ;AACD;;AAED,OAAK,MAAM,OAAX,IAAsB,gBAAK,OAAL,CAAtB,EAAqC;AACnC,UAAM,EAAE,GAAG,OAAO,CAAC,OAAD,CAAlB;;AACA,QAAI,uBAAQ,EAAR,CAAJ,EAAiB;AACf,WAAK,MAAM,UAAX,IAAyB,EAAzB,EAA6B;AAC3B,QAAA,CAAC,CAAC,IAAF,CAAO,OAAP,EAAgB,UAAhB,EAA4B,OAA5B;AACD;AACF,KAJD,MAIO;AACL,MAAA,CAAC,CAAC,IAAF,CAAO,OAAP,EAAgB,EAAhB,EAAoB,OAApB;AACD;AACF;AACF;;AAEK,SAAU,MAAV,CACJ,OADI,EAEJ,CAFI,EAGJ,IAHI,EAIJ,OAJI,EAIS;AAEb,MAAI,CAAC,OAAL,EAAc;AACZ,WAAO,IAAP;AACD;;AAED,SAAO,gBAAK,OAAL,EAAc,MAAd,CAAqB,CAAC,CAAD,EAAI,OAAJ,KAAe;AACzC,UAAM,GAAG,GAAG,OAAO,CAAC,OAAD,CAAnB;;AACA,QAAI,uBAAQ,GAAR,CAAJ,EAAkB;AAChB,aAAO,GAAG,CAAC,MAAJ,CAAW,CAAC,EAAD,EAAQ,UAAR,KAAkC;AAClD,eAAO,CAAC,CAAC,IAAF,CAAO,OAAP,EAAgB,EAAhB,EAAoB,UAApB,EAAgC,OAAhC,CAAP;AACD,OAFM,EAEJ,CAFI,CAAP;AAGD,KAJD,MAIO;AACL,aAAO,CAAC,CAAC,IAAF,CAAO,OAAP,EAAgB,CAAhB,EAAmB,GAAnB,EAAwB,OAAxB,CAAP;AACD;AACF,GATM,EASJ,IATI,CAAP;AAUD;AAED;;;;;AAGM,SAAU,kBAAV,CAA6B,IAA7B,EAAyC,QAAzC,EAAmE;AACvE,SAAO,gBAAK,QAAL,EAAe,MAAf,CAAsB,CAAC,OAAD,EAAU,OAAV,KAAqB;AAChD,YAAQ,OAAR;AACE;AACA,WAAK,UAAL;AACA,WAAK,UAAL;AACA,WAAK,aAAL;AACA,WAAK,oBAAL;AACA,WAAK,YAAL;AACA,WAAK,WAAL;AACA,WAAK,WAAL;AACA,WAAK,cAAL;AACA,WAAK,eAAL;AACA,WAAK,eAAL;AACA,WAAK,gBAAL,CAZF,CAaE;;AAEA,WAAK,iBAAL;AACA,WAAK,kBAAL;AACA,WAAK,kBAAL;AACA,WAAK,mBAAL,CAlBF,CAmBE;AAEA;;AACA,WAAK,aAAL;AACA,WAAK,cAAL;AACA,WAAK,cAAL,CAxBF,CAyBE;AAEA;;AACA,WAAK,gBAAL;AACE,eAAO,OAAP;;AAEF,WAAK,cAAL;AACE;AACA,YAAI,IAAI,KAAK,MAAT,IAAmB,IAAI,KAAK,OAAhC,EAAyC;AACvC,iBAAO,OAAP;AACD;;AACH;;AAEA,WAAK,eAAL;AACA,WAAK,YAAL;AAAU;AACR,gBAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;;AACA,cAAI,uBAAQ,UAAR,KAAuB,4BAAW,UAAX,CAA3B,EAAmD;AACjD,iBAAK,MAAM,QAAX,IAAuB,qBAAM,UAAN,CAAvB,EAA0C;AACxC,kBAAI,CAAC,QAAQ,CAAC,SAAd,EAAyB;AACvB,gBAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,QAAR,EAAkB,EAAlB,CAAb;AACD;AACF;AACF;;AACD,iBAAO,OAAP;AACD;;AAED,WAAK,aAAL;AACE,YAAI,IAAI,KAAK,OAAb,EAAsB;AACpB;AACA,iBAAO,OAAP;AACD;;AACH;AAEA;;AACA,WAAK,cAAL;AACA,WAAK,aAAL;AACA,WAAK,eAAL;AACA,WAAK,gBAAL;AACA,WAAK,oBAAL;AACA,WAAK,sBAAL;AACA,WAAK,mBAAL;AACA,WAAK,oBAAL;AAAkB;AAChB;AACA;AAEA,gBAAM,QAAQ,GAAG,6BAAoB,QAAQ,CAAC,OAAD,CAA5B,CAAjB;;AACA,cAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAA1B,EAAqC;AACnC,YAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,QAAR,EAAkB,EAAlB,CAAb;AACD;;AACD,iBAAO,OAAP;AACD;AA3EH;AA6ED,GA9EM,EA8EJ,EA9EI,CAAP;AA+ED;;;;;;;;;;;;;;;;;AC5sBD;;AAEA;;AAWA;;AACA;;AACA;;AAEA;;AACA;;;;;;AA6BM,SAAU,gCAAV,CACJ,WADI,EACoB;AAQxB,QAAM;AAAC,IAAA;AAAD,MAAiC,WAAvC;AAAA,QAAmB,gBAAgB,GAAA,mBAAI,WAAJ,EAA7B,CAAA,SAAA,CAA6B,CAAnC;;AACA,MAAI,CAAC,OAAL,EAAc;AACZ,WAAO;AAAC,MAAA,gBAAgB,EAAE;AAAnB,KAAP;AACD;;AAED,MAAI,gCAAJ;AAIA,MAAI,mCAAJ;;AAKA,MAAI,uBAAQ,OAAR,CAAJ,EAAsB;AACpB,SAAK,MAAM,CAAX,IAAgB,OAAhB,EAAyB;AACvB,UAAI,CAAC,CAAC,SAAN,EAAiB;AACf,YAAI,CAAC,gCAAL,EAAuC;AACrC,UAAA,gCAAgC,GAAG,EAAnC;AACD;;AACA,QAAA,gCAAwD,CAAC,IAAzD,CAA8D,CAA9D;AACF,OALD,MAKO;AACL,YAAI,CAAC,mCAAL,EAA0C;AACxC,UAAA,mCAAmC,GAAG,EAAtC;AACD;;AACA,QAAA,mCAA2D,CAAC,IAA5D,CAAiE,CAAjE;AACF;AACF;;AAED,QAAI,gCAAJ,EAAsC;AACnC,MAAA,gBAAgC,CAAC,OAAjC,GAA2C,gCAA3C;AACF;AACF,GAlBD,MAkBO;AACL,QAAI,OAAO,CAAC,WAAD,CAAX,EAA0B;AACvB,MAAA,gBAAgC,CAAC,OAAjC,GAA2C,OAA3C;AACF,KAFD,MAEO;AACL,MAAA,mCAAmC,GAAG,OAAtC;AACD;AACF;;AAED,MAAI,uBAAQ,mCAAR,KAAgD,mCAAmC,CAAC,MAApC,KAA+C,CAAnG,EAAsG;AACpG,IAAA,mCAAmC,GAAG,mCAAmC,CAAC,CAAD,CAAzE;AACD;;AACD,SAAO;AAAC,IAAA,mCAAD;AAAsC,IAAA;AAAtC,GAAP;AACD;;AAEK,SAAU,uBAAV,CACJ,cADI,EAEJ,wBAFI,EAGJ,6BAHI,EAIJ,aAAa,GAAG,IAJZ,EAIgB;AAEpB,MAAI,aAAa,6BAAjB,EAAgD;AAC9C,WAAO;AAAC,MAAA,OAAO,EAAE,6BAA6B,CAAC;AAAxC,KAAP;AACD;;AAED,QAAM,kBAAkB,GAA6B,cAAc,CAAC,GAAf,CACnD,CAAC;AAAC,IAAA,WAAD;AAAc,IAAA;AAAd,GAAD,KAAuD;AACrD,UAAM,SAAS,GAAG,aAAa,GAAG,OAAO,wBAAwB,CAAC,KAAK,EAAxC,GAA6C,EAA5E;AACA,WAAO;AACL,MAAA,KAAK,EAAE,WAAW,GAAG,wBAAwB,CAAC,KADzC;AAEL,MAAA,IAAI,EAAE,wBAAwB,CAAC,IAF1B;AAGL,MAAA,KAAK,EAAE,uBAAY,WAAZ,IAA2B;AAAC,QAAA,MAAM,EAAE,WAAW,GAAG,IAAI,MAAM,CAAC,SAAD,CAAW;AAA5C,OAA3B,GAA8E,WAAW,GAAG;AAH9F,KAAP;AAKD,GARkD,CAArD;AAWA,SAAO;AACL,IAAA,OAAO,EAAE,CACP,GAAG,kBADI,EAEP;AACA,OAAI,yBAAU,6BAAV,CAHG;AADJ,GAAP;AAOD;;AAEK,SAAU,QAAV,CAAmB,wBAAnB,EAAqE;AACzE,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,KAAP;AAAc,IAAA;AAAd,MAAuB,wBAA7B;AACA,SAAO,IAAI,IAAI,IAAI,CAAC,KAAL,KAAe,SAAvB,GAAmC,SAAnC,GAA+C,2BAAgB,KAAhB,EAAuB,KAAvB,CAAtD;AACD;;AAEK,SAAU,iCAAV,CACJ,gBADI,EAEJ,cAFI,EAGJ,wBAHI,EAIJ,cAJI,EAKJ,mBALI,EAKkB;AAEtB,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,MAAgB,wBAAtB;AAEA,SAAO,CAAC;AACN,IAAA,QADM;AAEN,IAAA,IAFM;AAGN,IAAA,cAHM;AAIN,IAAA,iBAAiB,GAAG,SAJd;AAKN,IAAA,IALM;AAMN,IAAA,aAAa,GAAG;AANV,GAAD,KAcF;AACH,UAAM,KAAK,GAAG,QAAQ,CAAC,wBAAD,CAAtB;AAEA,WAAO,eAAe,CAAI,gBAAJ,EAAsB,QAAtB,EAAgC,mBAAhC,EAAqD,IAArD,EAA2D;AAC/E,MAAA,IAD+E;AAE/E,MAAA,QAAQ,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACN,SAAC,cAAD,GAAgB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACd,UAAA,KAAK,EAAE,cAAc,GAAG,GAAjB,GAAuB,wBAAwB,CAAC,KADzC;AAEd,UAAA,IAAI,EAAE,wBAAwB,CAAC;AAFjB,SAAA,EAGV,KAAK,KAAK,SAAV,GAAsB;AAAC,UAAA;AAAD,SAAtB,GAAgC,EAHtB,CAAA,EAIV,KAAK,KAAK,SAAV,GAAsB;AAAC,UAAA;AAAD,SAAtB,GAAgC,EAJtB,CAAA,EAKV,IAAI,KAAK,SAAT,GAAqB;AAAC,UAAA;AAAD,SAArB,GAA8B,EALpB;AADV,OAAA,EAQF,wBAAS,iBAAT,IACA;AACE,SAAC,cAAc,GAAG,GAAlB,GAAwB;AACtB,UAAA,KAAK,EAAE,iBAAiB,GAAG,GAApB,GAA0B,wBAAwB,CAAC;AADpC;AAD1B,OADA,GAMA,EAdE,CAAA,EAeH,cAfG,CAAA,EAgBH,aAhBG;AAFuE,KAA3D,CAAtB;AAqBD,GAtCD;AAuCD;;AAEK,SAAU,eAAV,CACJ,OADI,EAEJ,IAFI,EAGJ,mBAHI,EAIJ,IAJI,EAKJ,YALI,EAK4B;AAEhC,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,KAAP;AAAc,IAAA;AAAd,MAAyB,OAA/B;AAEA,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;;AAEA,MAAI,OAAO,CAAC,IAAD,CAAP,IAAkB,OAAO,CAAC,IAAD,CAAP,KAAkB,SAAlB,IAA+B,mBAAmB,CAAC,IAAD,CAAxE,EAAiF;AAC/E,WAAO,iCAEA,eAAY;AACf,MAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACE,mBAAmB,CAAC,IAAD,CADrB,CAAA,EAEE,IAAI,GAAG;AAAC,QAAA;AAAD,OAAH,GAAY,EAFlB,CAAA,EAGE,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EAHpB,CAAA,EAIE,OAAO,GAAG;AAAC,QAAA;AAAD,OAAH,GAAe,EAJxB,CAAA,EAKE,qBAAU,YAAY,CAAC,IAAvB,IAA+B,YAAY,CAAC,IAA5C,GAAmD;AAAC,QAAA,IAAI,EAAE,YAAY,CAAC;AAApB,OALrD,CAAA,EAK+E;AACjF,QAAA,KAAK,EAAE,GAAG,IAAI,IAAI,IAAI;AAD2D,OAL/E,CAAA,EAOE,yBAAU,OAAO,CAAC,IAAD,CAAjB,IAA2B,EAA3B,GAAiC,OAAO,CAAC,IAAD,CAP1C,CAAA,EAQE,IAAI,KAAK,KAAT,GAAiB;AAAC,QAAA;AAAD,OAAjB,GAA0B,EAR5B;AADW,MAFZ,CAAP;AAeD;;AACD,SAAO,EAAP;AACD;;AAEK,SAAU,2BAAV,CACJ,IADI,EAEJ,MAFI,EAGJ,aAHI,EAGY;AAQhB,QAAM;AAAC,IAAA;AAAD,MAAa,IAAnB;AACA,QAAM,cAAc,GAAc,MAAM,KAAK,UAAX,GAAwB,GAAxB,GAA8B,GAAhE;AAEA,QAAM,wBAAwB,GAAG,QAAQ,CAAC,cAAD,CAAzC,CAXgB,CAWuE;;AACvF,QAAM,yBAAyB,GAAG,QAAQ,CAAC,cAAc,GAAG,GAAlB,CAA1C;AACA,QAAM,6BAA6B,GAAG,QAAQ,CAAC,cAAc,GAAG,OAAlB,CAA9C;AACA,QAAM,8BAA8B,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAlB,CAA/C;AAEA,SAAO;AACL,IAAA,wBAAwB,EAAE,6BAA6B,CAAC,wBAAD,EAA2B,aAA3B,CADlD;AAEL,IAAA,yBAAyB,EAAE,6BAA6B,CAAC,yBAAD,EAA4B,aAA5B,CAFnD;AAGL,IAAA,6BAA6B,EAAE,6BAA6B,CAAC,6BAAD,EAAgC,aAAhC,CAHvD;AAIL,IAAA,8BAA8B,EAAE,6BAA6B,CAAC,8BAAD,EAAiC,aAAjC,CAJxD;AAKL,IAAA;AALK,GAAP;AAOD;;AAED,SAAS,6BAAT,CACE,wBADF,EAEE,aAFF,EAEkB;AAEhB,MAAI,wBAAwB,IAAI,wBAAwB,CAAC,SAAzD,EAAoE;AAClE,UAAM;AAAC,MAAA;AAAD,QAAiD,wBAAvD;AAAA,UAAqB,8BAA8B,GAAA,mBAAI,wBAAJ,EAA7C,CAAA,WAAA,CAA6C,CAAnD;;AACA,QAAI,SAAS,KAAK,aAAlB,EAAiC;AAC/B,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,4CAAZ,CAAyD,SAAzD,EAAoE,aAApE,CAAT;AACD;;AACD,WAAO,8BAAP;AACD,GAND,MAMO;AACL,WAAO,wBAAP;AACD;AACF;;AAEK,SAAU,mBAAV,CACJ,IADI,EAEJ,aAFI,EAEY;AAEhB,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,MAAmB,IAAzB;AACA,QAAM;AAAC,IAAA,CAAD;AAAI,IAAA;AAAJ,MAAS,QAAf;;AAEA,MAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,QAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,YAAM,UAAU,GAAG,4BAAW,CAAX,KAAiB,CAAC,CAAC,SAAtC;AACA,YAAM,UAAU,GAAG,4BAAW,CAAX,KAAiB,CAAC,CAAC,SAAtC;;AAEA,UAAI,CAAC,UAAD,IAAe,UAAU,KAAK,aAAlC,EAAiD;AAC/C,eAAO,UAAP;AACD,OAFD,MAEO,IAAI,CAAC,UAAD,IAAe,UAAU,KAAK,aAAlC,EAAiD;AACtD,eAAO,YAAP;AACD,OAFM,MAEA,IAAI,UAAU,KAAK,aAAf,IAAgC,UAAU,KAAK,aAAnD,EAAkE;AACvE,cAAM,IAAI,KAAJ,CAAU,oCAAV,CAAN;AACD,OAFM,MAEA;AACL,YAAI,qBAAU,IAAV,KAAmB,IAAI,CAAC,MAA5B,EAAoC;AAClC,iBAAO,IAAI,CAAC,MAAZ;AACD,SAHI,CAKL;;;AACA,eAAO,UAAP;AACD;AACF,KArBiC,CAuBlC;;;AACA,WAAO,YAAP;AACD,GAzBD,MAyBO,IAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AACzC;AACA,WAAO,UAAP;AACD,GAHM,MAGA;AACL;AACA,UAAM,IAAI,KAAJ,CAAU,sCAAsC,aAAtC,GAAsD,GAAhE,CAAN;AACD;AACF;;;;;;;;;;;;;AC5SD;;AACA;;AAEA;;AACA;;AACA;;AAIA;;AACA;;;;;;AAYO,MAAM,OAAO,GAAG,SAAhB;;AAGA,MAAM,aAAa,GAAG,CAAC,KAAD,EAAQ,QAAR,EAAkB,UAAlB,EAA8B,MAA9B,EAAsC,OAAtC,CAAtB;;AA2CA,MAAM,iBAAiB,GAAG,IAAI,6BAAJ,CAA4B,OAA5B,EAAqC,gBAArC,CAA1B;;;AAED,SAAU,cAAV,CAAyB,MAAzB,EAAmD;AACvD,MAAI,wBAAS,MAAT,CAAJ,EAAsB;AACpB,WAAO,OAAP;AACD,GAHsD,CAIvD;;;AACA,SAAO,MAAP;AACD;;AAEK,SAAU,gBAAV,CACJ,IADI,EAEJ;AAAC,EAAA;AAAD,CAFI,EAEsB;aAAA,CAE1B;;;AACA,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,QAAQ,EAAE,SAAjB;AAA4B,IAAA,SAA5B;AAAuC,IAAA,UAAU,EAAE;AAAnD,MAAuE,IAA7E;AAAA,QAAgE,SAAS,GAAA,mBAAI,IAAJ,EAAnE,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAmE,CAAzE;AACA,QAAM,OAAO,GAAe,qBAAU,IAAV,IAAkB,IAAlB,GAAyB;AAAC,IAAA,IAAI,EAAE;AAAP,GAArD,CAJ0B,CAM1B;;AACA,MAAI,SAAJ,EAAe;AACb,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAAZ,CAAkC,SAAlC,CAAT;AACD;;AAED,QAAM,MAAM,GAAA,CAAA,EAAA,GAAG,OAAO,CAAC,MAAX,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,EAAjB,GAAqB,MAAM,CAAC,OAAP,CAAe,MAAhD;AACA,QAAM,SAAS,GAAG,iCAChB,MADgB,EAEhB,OAFgB,EAEA;AAChB,EAAA,MAHgB,CAAlB;AAMA,QAAM,WAAW,GAAG,cAAc,CAAC,MAAD,CAAlC;AACA,QAAM;AACJ,IAAA,SADI;AAEJ,IAAA,wBAFI;AAGJ,IAAA,cAHI;AAIJ,IAAA,OAJI;AAKJ,IAAA,SALI;AAMJ,IAAA,6BANI;AAOJ,IAAA,WAPI;AAQJ,IAAA,SARI;AASJ,IAAA;AATI,MAUF,SAAS,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAVb;AAYA,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,MAA8D,6BAApE;AAAA,QAAuB,yCAAyC,GAAA,mBAAI,6BAAJ,EAA1D,CAAA,OAAA,EAAA,MAAA,CAA0D,CAAhE;;AAEA,QAAM,eAAe,GAAI,cAAD,IAAqC;AAC3D,WAAO,gDACL,OADK,EAEL,cAFK,EAGL,wBAHK,EAIL,cAJK,EAKL,MAAM,CAAC,OALF,CAAP;AAOD,GARD;;AAUA,QAAM,iBAAiB,GAAG,eAAe,CAAC,yCAAD,CAAzC;AACA,QAAM,cAAc,GAAG,eAAe,CAAC,6BAAD,CAAtC;AACA,QAAM,kBAAkB,GAAG,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,yCAAL,CAAA,EAAoD,IAAI,GAAG;AAAC,IAAA;AAAD,GAAH,GAAY,EAApE,CAAA,CAA1C;AAEA,QAAM,0BAA0B,GAAqB,sCACnD,CACE;AAAC,IAAA,WAAW,EAAE,WAAW,KAAK,SAAhB,GAA4B,gBAA5B,GAA+C,MAA7D;AAAqE,IAAA,WAAW,EAAE;AAAlF,GADF,EAEE;AAAC,IAAA,WAAW,EAAE,YAAd;AAA4B,IAAA,WAAW,EAAE;AAAzC,GAFF,EAGE;AAAC,IAAA,WAAW,EAAE,UAAd;AAA0B,IAAA,WAAW,EAAE;AAAvC,GAHF,EAIE;AAAC,IAAA,WAAW,EAAE,YAAd;AAA4B,IAAA,WAAW,EAAE;AAAzC,GAJF,EAKE;AAAC,IAAA,WAAW,EAAE,WAAW,KAAK,SAAhB,GAA4B,gBAA5B,GAA+C,MAA7D;AAAqE,IAAA,WAAW,EAAE;AAAlF,GALF,CADmD,EAQnD,wBARmD,EASnD,6BATmD,CAArD,CA/C0B,CA2D1B;;AAEA,QAAM,OAAO,GAAY;AAAC,IAAA,IAAI,EAAE,MAAP;AAAe,IAAA,KAAK,EAAE,OAAtB;AAA+B,IAAA,OAAO,EAAE,CAAxC;AAA2C,IAAA,MAAM,EAAE,WAAnD;AAAgE,IAAA,OAAO,EAAE;AAAzE,GAAzB;AACA,QAAM,sBAAsB,GAC1B,WAAW,KAAK,SAAhB,GACI,0BADJ,CAC+B;AAD/B,IAEI;AACA,wCACE,CACE;AAAC,IAAA,WAAW,EAAE,gBAAd;AAAgC,IAAA,WAAW,EAAE;AAA7C,GADF,EAEE;AAAC,IAAA,WAAW,EAAE,gBAAd;AAAgC,IAAA,WAAW,EAAE;AAA7C,GAFF,CADF,EAKE,wBALF,EAME,6BANF,CAJN;AAaA,QAAM,aAAa,GAAG,CACpB,GAAG,iBAAiB,CAAC;AACnB,IAAA,QAAQ,EAAE,MADS;AAEnB,IAAA,IAAI,EAAE;AAAC,MAAA,IAAI,EAAE,MAAP;AAAe,MAAA,OAAO,EAAE;AAAxB,KAFa;AAGnB,IAAA,cAAc,EAAE,eAHG;AAInB,IAAA,iBAAiB,EAAE,WAJA;AAKnB,IAAA,IAAI,EAAE,KALa;AAMnB,IAAA,aAAa,EAAE;AANI,GAAD,CADA,EASpB,GAAG,iBAAiB,CAAC;AACnB,IAAA,QAAQ,EAAE,MADS;AAEnB,IAAA,IAAI,EAAE;AAAC,MAAA,IAAI,EAAE,MAAP;AAAe,MAAA,OAAO,EAAE;AAAxB,KAFa;AAGnB,IAAA,cAAc,EAAE,WAHG;AAInB,IAAA,iBAAiB,EAAE,eAJA;AAKnB,IAAA,IAAI,EAAE,KALa;AAMnB,IAAA,aAAa,EAAE;AANI,GAAD,CATA,EAiBpB,GAAG,iBAAiB,CAAC;AACnB,IAAA,QAAQ,EAAE,OADS;AAEnB,IAAA,IAAI,EAAE,OAFa;AAGnB,IAAA,cAAc,EAAE,eAHG;AAInB,IAAA,IAAI,EAAE,KAJa;AAKnB,IAAA,aAAa,EAAE;AALI,GAAD,CAjBA,EAwBpB,GAAG,iBAAiB,CAAC;AACnB,IAAA,QAAQ,EAAE,OADS;AAEnB,IAAA,IAAI,EAAE,OAFa;AAGnB,IAAA,cAAc,EAAE,eAHG;AAInB,IAAA,IAAI,EAAE,KAJa;AAKnB,IAAA,aAAa,EAAE;AALI,GAAD,CAxBA,CAAtB,CA3E0B,CA4G1B;AAEA;;AACA,QAAM,SAAS,GAAyB,CACtC,IAAI,WAAW,KAAK,OAAhB,GAA0B,aAA1B,GAA0C,EAA9C,CADsC,EAEtC,GAAG,cAAc,CAAC;AAChB,IAAA,QAAQ,EAAE,KADM;AAEhB,IAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AAAG,MAAA,IAAI,EAAE;AAAT,KAAA,EAAoB,SAAS,GAAG;AAAC,MAAA,IAAI,EAAE;AAAP,KAAH,GAAuB,EAApD,CAAA,EAAuD;AAAE,MAAA,MAAM,EAAE,SAAV;AAAqB,MAAA,OAAO,EAAE;AAA9B,KAAvD,CAFY;AAGhB,IAAA,cAAc,EAAE,WAHA;AAIhB,IAAA,iBAAiB,EAAE,WAJH;AAKhB,IAAA,IAAI,EAAE,KALU;AAMhB,IAAA,aAAa,EAAE;AANC,GAAD,CAFqB,EAUtC,GAAG,kBAAkB,CAAC;AACpB,IAAA,QAAQ,EAAE,QADU;AAEpB,IAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACF,MAAA,IAAI,EAAE,MADJ;AAEF,MAAA,OAAO,EAAE;AAFP,KAAA,EAGE,wBAAS,MAAM,CAAC,OAAP,CAAe,MAAxB,KAAmC,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB,KAAzD,GAAiE;AAAC,MAAA,KAAK,EAAE,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB;AAA9B,KAAjE,GAAwG,EAH1G,CAAA,EAIE,SAAS,GAAG;AAAC,MAAA,IAAI,EAAE;AAAP,KAAH,GAAuB,EAJlC,CAAA,EAIqC;AACvC,MAAA,MAAM,EAAE,WAD+B;AAEvC,MAAA,mBAAmB,EAAE;AAFkB,KAJrC,CAFgB;AAUpB,IAAA,cAAc,EAAE,SAVI;AAWpB,IAAA,aAAa,EAAE;AAXK,GAAD,CAViB,CAAxC,CA/G0B,CAwI1B;;AAEA,MAAI,oBAAJ;;AAEA,MAAI,WAAW,KAAK,SAApB,EAA+B;AAC7B,UAAM,YAAY,GAAG,oBAAoB,wBAAwB,CAAC,KAAK,IAAvE;AACA,UAAM,YAAY,GAAG,oBAAoB,wBAAwB,CAAC,KAAK,IAAvE;AACA,UAAM,OAAO,GAAG,IAAI,YAAY,MAAM,YAAY,GAAlD;AACA,UAAM,gBAAgB,GAAG,GAAG,YAAY,MAAM,MAAM,MAAM,OAAO,EAAjE;AACA,UAAM,gBAAgB,GAAG,GAAG,YAAY,MAAM,MAAM,MAAM,OAAO,EAAjE;AACA,UAAM,SAAS,GAAG,UAAU,wBAAwB,CAAC,KAAK,IAA1D;AAEA,UAAM,sBAAsB,GAA2B;AACrD,MAAA,aAAa,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,KAA1B,CADoB;AAErD,MAAA;AAFqD,KAAvD;AAKA,QAAI,mBAAmB,GAAwB,SAA/C;;AACA,QAAI,WAAW,KAAK,OAApB,EAA6B;AAC3B,MAAA,mBAAmB,GAAG;AACpB,QAAA,SAAS,EAAE,CACT;AACE,UAAA,MAAM,EAAE,IAAI,gBAAgB,OAAO,SAAS,SAAS,SAAS,OAAO,gBAAgB;AADvF,SADS,EAIT;AACE,UAAA,SAAS,EAAE,CACT;AACE,YAAA,EAAE,EAAE,KADN;AAEE,YAAA,KAAK,EAAE,wBAAwB,CAAC,KAFlC;AAGE,YAAA,EAAE,EAAE,mBAAmB,wBAAwB,CAAC;AAHlD,WADS,EAMT;AACE,YAAA,EAAE,EAAE,KADN;AAEE,YAAA,KAAK,EAAE,wBAAwB,CAAC,KAFlC;AAGE,YAAA,EAAE,EAAE,mBAAmB,wBAAwB,CAAC;AAHlD,WANS,EAWT;AACA;AACE,YAAA,EAAE,EAAE,KADN;AAEE,YAAA,KAAK,EAAE,eAAe,wBAAwB,CAAC,KAFjD;AAGE,YAAA,EAAE,EAAE,eAAe,wBAAwB,CAAC;AAH9C,WAZS,EAiBT;AACE,YAAA,EAAE,EAAE,KADN;AAEE,YAAA,KAAK,EAAE,eAAe,wBAAwB,CAAC,KAFjD;AAGE,YAAA,EAAE,EAAE,eAAe,wBAAwB,CAAC;AAH9C,WAjBS,EAsBT,GAAG,SAtBM,CADb;AAyBE,UAAA;AAzBF,SAJS,CADS;AAiCpB,QAAA,KAAK,EAAE;AAjCa,OAAtB;AAmCD;;AAED,UAAM;AAAC,MAAA;AAAD,QAAiE,yCAAvE;AAAA,UAAmB,gDAAgD,GAAA,mBAAI,yCAAJ,EAA7D,CAAA,SAAA,CAA6D,CAAnE;AAEA,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA;AAAR,QAAgB,wBAAtB;AACA,UAAM,KAAK,GAAG,uBAAS,wBAAT,CAAd;AAEA,UAAM,mBAAmB,GAAG,8BAAoC,OAApC,EAA6C,UAA7C,EAAyD,MAAM,CAAC,OAAhE,EAAyE,IAAzE,EAA+E;AACzG,MAAA,SAAS,EAAE,CAAC;AAAC,QAAA,MAAM,EAAE,IAAI,SAAS,MAAM,gBAAgB,SAAS,SAAS,MAAM,gBAAgB;AAApF,OAAD,CAD8F;AAEzG,MAAA,IAAI,EAAE,OAFmG;AAGzG,MAAA,QAAQ,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACN,SAAC,cAAD,GAAgB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACd,UAAA,KAAK,EAAE,wBAAwB,CAAC,KADlB;AAEd,UAAA,IAAI,EAAE,wBAAwB,CAAC;AAFjB,SAAA,EAGV,KAAK,KAAK,SAAV,GAAsB;AAAC,UAAA;AAAD,SAAtB,GAAgC,EAHtB,CAAA,EAIV,KAAK,KAAK,SAAV,GAAsB;AAAC,UAAA;AAAD,SAAtB,GAAgC,EAJtB,CAAA,EAKV,IAAI,KAAK,SAAT,GAAqB;AAAC,UAAA;AAAD,SAArB,GAA8B,EALpB;AADV,OAAA,EAQH,gDARG,CAAA,EASF,mCAAmC,GAAG;AAAC,QAAA,OAAO,EAAE;AAAV,OAAH,GAAoD,EATrF;AAHiG,KAA/E,EAczB,CAdyB,CAA5B;;AAgBA,QAAI,mBAAmB,IAAI,mBAA3B,EAAgD;AAC9C,MAAA,oBAAoB,GAAG;AACrB,QAAA,SAAS,EAAE,CAAC,sBAAD,CADU;AAErB,QAAA,KAAK,EAAE,CAAC,mBAAD,EAAsB,mBAAtB;AAFc,OAAvB;AAID,KALD,MAKO,IAAI,mBAAJ,EAAyB;AAC9B,MAAA,oBAAoB,GAAG,mBAAvB;AACA,MAAA,oBAAoB,CAAC,SAArB,CAA+B,OAA/B,CAAuC,sBAAvC;AACD,KAHM,MAGA,IAAI,mBAAJ,EAAyB;AAC9B,MAAA,oBAAoB,GAAG,mBAAvB;AACA,MAAA,oBAAoB,CAAC,SAArB,CAA+B,OAA/B,CAAuC,sBAAvC;AACD;AACF;;AAED,MAAI,oBAAJ,EAA0B;AACxB;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,SADL,CAAA,EACc;AACZ,MAAA,KAAK,EAAE,CACL,oBADK,EAEL;AACE;AACA,QAAA,SAFF;AAGE,QAAA,KAAK,EAAE;AAHT,OAFK;AADK,KADd,CAAA;AAWD;;AACD,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,SADL,CAAA,EACc;AACZ,IAAA,SAAS,EAAE,CAAA,CAAA,EAAA,GAAC,SAAS,CAAC,SAAX,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,EAAxB,EAA4B,MAA5B,CAAmC,SAAnC,CADC;AAEZ,IAAA,KAAK,EAAE;AAFK,GADd,CAAA;AAKD;;AAED,SAAS,kBAAT,CAA4B,kBAA5B,EAAsD;AACpD,SAAO,CACL;AACE,IAAA,EAAE,EAAE,IADN;AAEE,IAAA,KAAK,EAAE,kBAFT;AAGE,IAAA,EAAE,EAAE,eAAe;AAHrB,GADK,EAML;AACE,IAAA,EAAE,EAAE,IADN;AAEE,IAAA,KAAK,EAAE,kBAFT;AAGE,IAAA,EAAE,EAAE,eAAe;AAHrB,GANK,CAAP;AAYD;;AAED,SAAS,SAAT,CACE,IADF,EAEE,MAFF,EAGE,MAHF,EAGgB;AAEd,QAAM,MAAM,GAAG,kCAAoB,IAApB,EAA0B,OAA1B,CAAf;AACA,QAAM;AAAC,IAAA,wBAAD;AAA2B,IAAA;AAA3B,MAA6C,0CAA4B,IAA5B,EAAkC,MAAlC,EAA0C,OAA1C,CAAnD;AACA,QAAM,mBAAmB,GAAW,wBAAwB,CAAC,KAA7D;AAEA,QAAM,WAAW,GAAG,cAAc,CAAC,MAAD,CAAlC;AAEA,QAAM,wBAAwB,GAAyB,CACrD,GAAG,kBAAkB,CAAC,mBAAD,CADgC,EAErD;AACE,IAAA,EAAE,EAAE,QADN;AAEE,IAAA,KAAK,EAAE,mBAFT;AAGE,IAAA,EAAE,EAAE,aAAa;AAHnB,GAFqD,EAOrD;AACE,IAAA,EAAE,EAAE,KADN;AAEE,IAAA,KAAK,EAAE,mBAFT;AAGE,IAAA,EAAE,EAAE,CAAC,WAAW,KAAK,SAAhB,GAA4B,gBAA5B,GAA+C,MAAhD,IAA0D;AAHhE,GAPqD,EAYrD;AACE,IAAA,EAAE,EAAE,KADN;AAEE,IAAA,KAAK,EAAE,mBAFT;AAGE,IAAA,EAAE,EAAE,CAAC,WAAW,KAAK,SAAhB,GAA4B,gBAA5B,GAA+C,MAAhD,IAA0D;AAHhE,GAZqD,CAAvD;AAmBA,QAAM,uBAAuB,GAC3B,WAAW,KAAK,SAAhB,IAA6B,WAAW,KAAK,OAA7C,GACI,EADJ,GAEI,CACE;AACA;AACE,IAAA,SAAS,EAAE,oBAAoB,mBAAmB,yBAAyB,mBAAmB,IADhG;AAEE,IAAA,EAAE,EAAE,SAAS;AAFf,GAFF,EAME;AACE,IAAA,SAAS,EAAE,wBAAwB,mBAAmB,mBAAmB,mBAAmB,QAAQ,MAAM,gBAAgB,mBAAmB,KAD/I;AAEE,IAAA,EAAE,EAAE,mBAAmB;AAFzB,GANF,EAUE;AACE,IAAA,SAAS,EAAE,wBAAwB,mBAAmB,mBAAmB,mBAAmB,QAAQ,MAAM,gBAAgB,mBAAmB,KAD/I;AAEE,IAAA,EAAE,EAAE,mBAAmB;AAFzB,GAVF,CAHN;AAmBA,QAA6F,EAAA,GAAA,IAAI,CAAC,QAAlG;AAAA,QAAO,EAAA,GAAC,cAAR;AAAA,QAAyB,2BAA2B,GAAA,EAAA,CAAA,EAAA,CAApD;AAAA,QAAyD,gCAAgC,GAAA,mBAAA,EAAA,EAAnF,CAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAmF,CAAzF;AACA,QAAM;AAAC,IAAA,mCAAD;AAAsC,IAAA;AAAtC,MAA0D,+CAC9D,gCAD8D,CAAhE;AAIA,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,SAAP;AAAkB,IAAA,SAAlB;AAA6B,IAAA,OAA7B;AAAsC,IAAA,QAAQ,EAAE;AAAhD,MAAiF,8CACrF,gBADqF,EAErF,MAFqF,CAAvF;AAKA,QAAM,WAAW,GAAgB,MAAM,KAAK,UAAX,GAAwB,YAAxB,GAAuC,UAAxE;AACA,QAAM,SAAS,GAAgB,MAA/B;AAEA,QAAM,SAAS,GAAgB,CAC7B,GAAG,IAD0B,EAE7B,GAAG,SAF0B,EAG7B;AACE,IAAA,SAAS,EAAE,CAAC,GAAG,SAAJ,EAAe,GAAG,wBAAlB,CADb;AAEE,IAAA;AAFF,GAH6B,EAO7B,GAAG,uBAP0B,CAA/B;AAUA,SAAO;AACL,IAAA,SADK;AAEL,IAAA,OAFK;AAGL,IAAA,SAHK;AAIL,IAAA,wBAJK;AAKL,IAAA,cALK;AAML,IAAA,6BANK;AAOL,IAAA,WAPK;AAQL,IAAA,SARK;AASL,IAAA;AATK,GAAP;AAWD;;;;;;;;;;;;;ACzaD;;AAWA;;AACA;;AACA;;AAOA;;AACA;;AACA;;;;;;AAWO,MAAM,QAAQ,GAAG,UAAjB;;AAQA,MAAM,cAAc,GAAG,CAAC,OAAD,EAAU,MAAV,CAAvB;;AAyEA,MAAM,kBAAkB,GAAG,IAAI,6BAAJ,CAA4B,QAA5B,EAAsC,iBAAtC,CAA3B;;;AAED,SAAU,iBAAV,CACJ,IADI,EAEJ;AAAC,EAAA;AAAD,CAFI,EAEsB;AAE1B,QAAM;AACJ,IAAA,SADI;AAEJ,IAAA,wBAFI;AAGJ,IAAA,cAHI;AAIJ,IAAA,6BAJI;AAKJ,IAAA,WALI;AAMJ,IAAA,OANI;AAOJ,IAAA,SAPI;AAQJ,IAAA;AARI,MASF,cAAc,CAAC,IAAD,EAAO,QAAP,EAAiB,MAAjB,CATlB;AAWA,QAAM,gBAAgB,GAAG,+CACvB,OADuB,EAEvB,cAFuB,EAGvB,wBAHuB,EAIvB,6BAJuB,EAKvB,MAAM,CAAC,QALgB,CAAzB;AAQA,QAAM,IAAI,GAAY;AAAC,IAAA,IAAI,EAAE,MAAP;AAAe,IAAA,MAAM,EAAE;AAAvB,GAAtB;AAEA,QAAM,KAAK,GAAG,CACZ,GAAG,gBAAgB,CAAC;AAClB,IAAA,QAAQ,EAAE,OADQ;AAElB,IAAA,IAAI,EAAE,IAFY;AAGlB,IAAA,cAAc,EAAE,OAHE;AAIlB,IAAA,IAAI,EAAE,KAJY;AAKlB,IAAA,aAAa,EAAE;AALG,GAAD,CADP,EAQZ,GAAG,gBAAgB,CAAC;AAClB,IAAA,QAAQ,EAAE,OADQ;AAElB,IAAA,IAAI,EAAE,IAFY;AAGlB,IAAA,cAAc,EAAE,OAHE;AAIlB,IAAA,IAAI,EAAE,KAJY;AAKlB,IAAA,aAAa,EAAE;AALG,GAAD,CARP,EAeZ,GAAG,gBAAgB,CAAC;AAClB,IAAA,QAAQ,EAAE,MADQ;AAElB,IAAA,IAAI,EAAE;AACJ,MAAA,IAAI,EAAE,MADF;AAEJ,MAAA,mBAAmB,EAAE;AAFjB,KAFY;AAMlB,IAAA,cAAc,EAAE,OANE;AAOlB,IAAA,iBAAiB,EAAE,OAPD;AAQlB,IAAA,aAAa,EAAE;AARG,GAAD,CAfP,CAAd;AA2BA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,SADL,CAAA,EACc;AACZ,IAAA;AADY,GADd,CAAA,EAGM,KAAK,CAAC,MAAN,GAAe,CAAf,GAAmB;AAAC,IAAA;AAAD,GAAnB,GAA4B,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,KAAK,CAAC,CAAD,CAAV,CAHlC,CAAA;AAKD;;AAED,SAAS,0BAAT,CACE,IADF,EAEE,aAFF,EAEqC;AAKnC,QAAM;AAAC,IAAA;AAAD,MAAa,IAAnB;;AAEA,MAAI,sBAAsB,CAAC,QAAD,CAA1B,EAAsC;AACpC,WAAO;AACL,MAAA,MAAM,EAAE,iCAAoB,IAApB,EAA0B,aAA1B,CADH;AAEL,MAAA,SAAS,EAAE;AAFN,KAAP;AAID;;AAED,QAAM,0BAA0B,GAAY,uCAAuC,CAAC,QAAD,CAAnF;AACA,QAAM,qBAAqB,GAAY,kCAAkC,CAAC,QAAD,CAAzE;AACA,QAAM,CAAC,GAAG,QAAQ,CAAC,CAAnB;AACA,QAAM,CAAC,GAAG,QAAQ,CAAC,CAAnB;;AAEA,MAAI,0BAAJ,EAAgC;AAC9B;AAEA,QAAI,qBAAJ,EAA2B;AACzB,YAAM,IAAI,KAAJ,CAAU,GAAG,aAAa,kEAA1B,CAAN;AACD;;AAED,UAAM,EAAE,GAAG,QAAQ,CAAC,EAApB;AACA,UAAM,EAAE,GAAG,QAAQ,CAAC,EAApB;;AAEA,QAAI,mCAAkB,EAAlB,KAAyB,mCAAkB,EAAlB,CAA7B,EAAoD;AAClD;AACA,YAAM,IAAI,KAAJ,CAAU,GAAG,aAAa,6BAA1B,CAAN;AACD,KAHD,MAGO,IAAI,mCAAkB,EAAlB,CAAJ,EAA2B;AAChC,UAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,YAAT;AAAuB,UAAA,SAAS,EAAE;AAAlC,SAAP;AACD,OAHD,MAGO;AACL;AACA,cAAM,IAAI,KAAJ,CAAU,4CAA4C,aAAa,EAAnE,CAAN;AACD;AACF,KARM,MAQA,IAAI,mCAAkB,EAAlB,CAAJ,EAA2B;AAChC;AACA,UAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,UAAT;AAAqB,UAAA,SAAS,EAAE;AAAhC,SAAP;AACD,OAHD,MAGO;AACL;AACA,cAAM,IAAI,KAAJ,CAAU,4CAA4C,aAAa,EAAnE,CAAN;AACD;AACF;;AACD,UAAM,IAAI,KAAJ,CAAU,gBAAV,CAAN;AACD,GAhCD,MAgCO;AACL;AAEA,UAAM,MAAM,GAAG,QAAQ,CAAC,MAAxB;AACA,UAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;AACA,UAAM,MAAM,GAAG,QAAQ,CAAC,MAAxB;AACA,UAAM,OAAO,GAAG,QAAQ,CAAC,OAAzB;;AAEA,QAAI,mCAAkB,OAAlB,KAA8B,CAAC,mCAAkB,MAAlB,CAAnC,EAA8D;AAC5D;AACA,YAAM,IAAI,KAAJ,CAAU,GAAG,aAAa,qCAA1B,CAAN;AACD;;AAED,QAAI,mCAAkB,OAAlB,KAA8B,CAAC,mCAAkB,MAAlB,CAAnC,EAA8D;AAC5D;AACA,YAAM,IAAI,KAAJ,CAAU,GAAG,aAAa,qCAA1B,CAAN;AACD;;AAED,QAAI,mCAAkB,MAAlB,KAA6B,mCAAkB,MAAlB,CAAjC,EAA4D;AAC1D;AACA,YAAM,IAAI,KAAJ,CAAU,GAAG,aAAa,+DAA1B,CAAN;AACD,KAHD,MAGO,IAAI,mCAAkB,MAAlB,CAAJ,EAA+B;AACpC,UAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,YAAT;AAAuB,UAAA,SAAS,EAAE;AAAlC,SAAP;AACD,OAHD,MAGO;AACL;AACA,cAAM,IAAI,KAAJ,CAAU,+DAAV,CAAN;AACD;AACF,KARM,MAQA,IAAI,mCAAkB,MAAlB,CAAJ,EAA+B;AACpC,UAAI,6CAA4B,CAA5B,CAAJ,EAAoC;AAClC;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,UAAT;AAAqB,UAAA,SAAS,EAAE;AAAhC,SAAP;AACD,OAHD,MAGO;AACL;AACA,cAAM,IAAI,KAAJ,CAAU,+DAAV,CAAN;AACD;AACF;;AACD,UAAM,IAAI,KAAJ,CAAU,gBAAV,CAAN;AACD;AACF;;AAED,SAAS,sBAAT,CAAgC,QAAhC,EAA+D;AAC7D,SACE,CAAC,mCAAkB,QAAQ,CAAC,CAA3B,KAAiC,mCAAkB,QAAQ,CAAC,CAA3B,CAAlC,KACA,CAAC,mCAAkB,QAAQ,CAAC,EAA3B,CADD,IAEA,CAAC,mCAAkB,QAAQ,CAAC,EAA3B,CAFD,IAGA,CAAC,mCAAkB,QAAQ,CAAC,MAA3B,CAHD,IAIA,CAAC,mCAAkB,QAAQ,CAAC,OAA3B,CAJD,IAKA,CAAC,mCAAkB,QAAQ,CAAC,MAA3B,CALD,IAMA,CAAC,mCAAkB,QAAQ,CAAC,OAA3B,CAPH;AASD;;AAED,SAAS,uCAAT,CAAiD,QAAjD,EAAgF;AAC9E,SAAO,mCAAkB,QAAQ,CAAC,EAA3B,KAAkC,mCAAkB,QAAQ,CAAC,EAA3B,CAAzC;AACD;;AAED,SAAS,kCAAT,CAA4C,QAA5C,EAA2E;AACzE,SACE,mCAAkB,QAAQ,CAAC,MAA3B,KACA,mCAAkB,QAAQ,CAAC,OAA3B,CADA,IAEA,mCAAkB,QAAQ,CAAC,MAA3B,CAFA,IAGA,mCAAkB,QAAQ,CAAC,OAA3B,CAJF;AAMD;;AAEK,SAAU,cAAV,CAIJ,IAJI,EAKJ,aALI,EAMJ,MANI,EAMU;SAAA,CAoBd;;;AACA,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,QAAP;AAAiB,IAAA,SAAjB;AAA4B,IAAA,UAAU,EAAE;AAAxC,MAA4D,IAAlE;AAAA,QAAqD,SAAS,GAAA,mBAAI,IAAJ,EAAxD,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAwD,CAA9D;AACA,QAAM,OAAO,GAAO,qBAAU,IAAV,IAAkB,IAAlB,GAA0B;AAAC,IAAA,IAAI,EAAE;AAAP,GAA9C,CAtBc,CAwBd;;AACA,MAAI,SAAJ,EAAe;AACb,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAAZ,CAAkC,aAAlC,CAAT;AACD;;AAED,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAsB,0BAA0B,CAAC,IAAD,EAAO,aAAP,CAAtD;AACA,QAAM;AACJ,IAAA,wBADI;AAEJ,IAAA,yBAFI;AAGJ,IAAA,6BAHI;AAIJ,IAAA,8BAJI;AAKJ,IAAA;AALI,MAMF,yCAA4B,IAA5B,EAAkC,MAAlC,EAA0C,aAA1C,CANJ;AAQA,QAAM;AACJ,IAAA,yBADI;AAEJ,IAAA,uBAFI;AAGJ,IAAA,cAHI;AAIJ,IAAA;AAJI,MAKF,iCAAiC,CACnC,OADmC,EAEnC,wBAFmC,EAGnC,yBAHmC,EAInC,6BAJmC,EAKnC,8BALmC,EAMnC,SANmC,EAOnC,aAPmC,EAQnC,MARmC,CALrC;;AAgBA,QAMI,EAAA,GAAA,QANJ;AAAA,QACE,EAAA,GAAC,cADH;AAAA,QACoB,2BAA2B,GAAA,EAAA,CAAA,EAAA,CAD/C;AAAA,QAEE,EAAA,GAAC,cAAc,KAAK,GAAnB,GAAyB,IAAzB,GAAgC,IAFnC;AAAA,QAE0C,4BAA4B,GAAA,EAAA,CAAA,EAAA,CAFtE;AAAA,QAGE,EAAA,GAAC,cAAc,KAAK,GAAnB,GAAyB,QAAzB,GAAoC,QAHvC;AAAA,QAGkD,gCAAgC,GAAA,EAAA,CAAA,EAAA,CAHlF;AAAA,QAIE,EAAA,GAAC,cAAc,KAAK,GAAnB,GAAyB,SAAzB,GAAqC,SAJxC;AAAA,QAIoD,iCAAiC,GAAA,EAAA,CAAA,EAAA,CAJrF;AAAA,QAKK,gCAAgC,GAAA,mBAAA,EAAA,EAL/B,CAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,EAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,EAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,EAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAK+B,CALrC;;AAQA,QAAM;AACJ,IAAA,IADI;AAEJ,IAAA,SAFI;AAGJ,IAAA,SAAS,EAAE,YAHP;AAIJ,IAAA,OAAO,EAAE,UAJL;AAKJ,IAAA,QAAQ,EAAE;AALN,MAMF,6CAA8B,gCAA9B,EAAgE,MAAhE,CANJ;AAQA,QAAM,SAAS,GAAyB,CAAC,GAAG,YAAJ,EAAkB,GAAG,yBAArB,CAAxC;AACA,QAAM,OAAO,GAAa,SAAS,KAAK,KAAd,GAAsB,EAAtB,GAA2B,UAArD;AAEA,QAAM,eAAe,GAA0B,qCAC7C,cAD6C,EAE7C,wBAF6C,EAG7C,6BAH6C,EAI7C,yBAJ6C,CAA/C;AAOA,SAAO;AACL,IAAA,SAAS,EAAE,CACT,IAAG,CAAA,EAAA,GAAC,SAAS,CAAC,SAAX,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,EAA3B,CADS,EAET,GAAG,IAFM,EAGT,GAAG,SAHM,EAIT,IAAI,SAAS,CAAC,MAAV,KAAqB,CAArB,GAAyB,EAAzB,GAA8B,CAAC;AAAC,MAAA,SAAD;AAAY,MAAA;AAAZ,KAAD,CAAlC,CAJS,EAKT,GAAG,uBALM,CADN;AAQL,IAAA,OARK;AASL,IAAA,wBATK;AAUL,IAAA,cAVK;AAWL,IAAA,6BAXK;AAYL,IAAA,WAAW,EAAE,MAAM,KAAK,UAAX,GAAwB,YAAxB,GAAuC,UAZ/C;AAaL,IAAA,OAbK;AAcL,IAAA,SAdK;AAeL,IAAA;AAfK,GAAP;AAiBD;;AAED,SAAS,iCAAT,CAIE,OAJF,EAKE,wBALF,EAME,yBANF,EAOE,6BAPF,EAQE,8BARF,EASE,SATF,EAUE,aAVF,EAWE,MAXF,EAWgB;AAOd,MAAI,yBAAyB,GAAyB,EAAtD;AACA,MAAI,uBAAuB,GAAyB,EAApD;AACA,QAAM,mBAAmB,GAAW,wBAAwB,CAAC,KAA7D;AAEA,MAAI,cAAJ;AACA,MAAI,yBAAyB,GAAG,KAAhC;;AAEA,MAAI,SAAS,KAAK,KAAlB,EAAyB;AACvB,UAAM,MAAM,GAAmB,OAAO,CAAC,MAAR,GAC3B,OAAO,CAAC,MADmB,GAE3B,OAAO,CAAC,MAAR,GACA,OAAO,CAAC,MAAR,KAAmB,KAAnB,GACE,QADF,GAEE,MAHF,GAIA,MAAM,CAAC,QAAP,CAAgB,MANpB;AAOA,UAAM,MAAM,GAAmB,OAAO,CAAC,MAAR,GAAiB,OAAO,CAAC,MAAzB,GAAkC,MAAM,KAAK,MAAX,GAAoB,QAApB,GAA+B,KAAhG;;AAEA,QAAK,MAAM,KAAK,QAAZ,MAA2B,MAAM,KAAK,KAAtC,CAAJ,EAAkD;AAChD,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mCAAZ,CAAgD,MAAhD,EAAwD,MAAxD,EAAgE,aAAhE,CAAT;AACD;;AAED,QAAI,MAAM,KAAK,QAAX,IAAuB,MAAM,KAAK,OAAtC,EAA+C;AAC7C,MAAA,yBAAyB,GAAG,CAC1B;AAAC,QAAA,EAAE,EAAE,MAAL;AAAa,QAAA,KAAK,EAAE,mBAApB;AAAyC,QAAA,EAAE,EAAE,YAAY;AAAzD,OAD0B,EAE1B;AAAC,QAAA,EAAE,EAAE,MAAL;AAAa,QAAA,KAAK,EAAE,mBAApB;AAAyC,QAAA,EAAE,EAAE,YAAY;AAAzD,OAF0B,CAA5B;AAKA,MAAA,uBAAuB,GAAG,CACxB;AACE,QAAA,SAAS,EAAE,iBAAiB,mBAAmB,sBAAsB,mBAAmB,IAD1F;AAEE,QAAA,EAAE,EAAE,WAAW;AAFjB,OADwB,EAKxB;AACE,QAAA,SAAS,EAAE,iBAAiB,mBAAmB,sBAAsB,mBAAmB,IAD1F;AAEE,QAAA,EAAE,EAAE,WAAW;AAFjB,OALwB,CAA1B;AAWA,MAAA,cAAc,GAAG,CACf;AAAC,QAAA,WAAW,EAAE,SAAd;AAAyB,QAAA,WAAW,EAAE,qBAAU,MAAV;AAAtC,OADe,EAEf;AAAC,QAAA,WAAW,EAAE,QAAd;AAAwB,QAAA,WAAW,EAAE,cAAc,CAAC,MAAD,EAAS,MAAT,EAAiB,GAAjB;AAAnD,OAFe,EAGf;AAAC,QAAA,WAAW,EAAE,QAAd;AAAwB,QAAA,WAAW,EAAE,cAAc,CAAC,MAAD,EAAS,MAAT,EAAiB,GAAjB;AAAnD,OAHe,CAAjB;AAKA,MAAA,yBAAyB,GAAG,IAA5B;AACD,KAvBD,MAuBO;AACL,UAAI,OAAO,CAAC,MAAR,IAAkB,OAAO,CAAC,MAA9B,EAAsC;AACpC,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,yBAAZ,CAAsC,OAAO,CAAC,MAA9C,EAAsD,aAAtD,CAAT;AACD;;AAED,UAAI,QAAJ;AACA,UAAI,aAAJ;AACA,UAAI,aAAJ;;AACA,UAAI,MAAM,KAAK,IAAf,EAAqB;AACnB,QAAA,QAAQ,GAAG,MAAX;AACA,QAAA,aAAa,GAAG,KAAhB;AACA,QAAA,aAAa,GAAG,KAAhB;AACD,OAJD,MAIO;AACL,QAAA,QAAQ,GAAG,QAAX;AACA,QAAA,aAAa,GAAG,IAAhB;AACA,QAAA,aAAa,GAAG,IAAhB;AACD;;AAED,MAAA,yBAAyB,GAAG,CAC1B;AAAC,QAAA,EAAE,EAAE,aAAL;AAAoB,QAAA,KAAK,EAAE,mBAA3B;AAAgD,QAAA,EAAE,EAAE,WAAW;AAA/D,OAD0B,EAE1B;AAAC,QAAA,EAAE,EAAE,aAAL;AAAoB,QAAA,KAAK,EAAE,mBAA3B;AAAgD,QAAA,EAAE,EAAE,WAAW;AAA/D,OAF0B,EAG1B;AAAC,QAAA,EAAE,EAAE,QAAL;AAAe,QAAA,KAAK,EAAE,mBAAtB;AAA2C,QAAA,EAAE,EAAE,YAAY;AAA3D,OAH0B,CAA5B;AAMA,MAAA,cAAc,GAAG,CACf;AACE,QAAA,WAAW,EAAE,QADf;AAEE,QAAA,WAAW,EAAE,uBAAM;AAAC,UAAA,KAAK,EAAE,mBAAR;AAA6B,UAAA,SAAS,EAAE,aAAxC;AAAuD,UAAA,IAAI,EAAE;AAA7D,SAAN,EAAoF,MAApF,EAA4F;AACvG,UAAA,cAAc,EAAE;AADuF,SAA5F;AAFf,OADe,EAOf;AACE,QAAA,WAAW,EAAE,QADf;AAEE,QAAA,WAAW,EAAE,uBAAM;AAAC,UAAA,KAAK,EAAE,mBAAR;AAA6B,UAAA,SAAS,EAAE,aAAxC;AAAuD,UAAA,IAAI,EAAE;AAA7D,SAAN,EAAoF,MAApF,EAA4F;AACvG,UAAA,cAAc,EAAE;AADuF,SAA5F;AAFf,OAPe,EAaf;AACE,QAAA,WAAW,EAAE,SADf;AAEE,QAAA,WAAW,EAAE,uBAAM;AAAC,UAAA,KAAK,EAAE,mBAAR;AAA6B,UAAA,SAAS,EAAE,QAAxC;AAAkD,UAAA,IAAI,EAAE;AAAxD,SAAN,EAA+E,MAA/E,EAAuF;AAClG,UAAA,cAAc,EAAE;AADkF,SAAvF;AAFf,OAbe,CAAjB;AAoBD;AACF,GAlFD,MAkFO;AACL,QAAI,OAAO,CAAC,MAAR,IAAkB,OAAO,CAAC,MAA9B,EAAsC;AACpC,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mCAAZ,CAAgD,OAAO,CAAC,MAAxD,EAAgE,OAAO,CAAC,MAAxE,CAAT;AACD;;AAED,QAAI,SAAS,KAAK,wBAAlB,EAA4C;AAC1C,MAAA,cAAc,GAAG,EAAjB;AACA,MAAA,uBAAuB,GAAG,CACxB;AAAC,QAAA,SAAS,EAAE,UAAU,yBAAyB,CAAC,KAAK,IAArD;AAA2D,QAAA,EAAE,EAAE,WAAW;AAA1E,OADwB,EAExB;AAAC,QAAA,SAAS,EAAE,UAAU,mBAAmB,IAAzC;AAA+C,QAAA,EAAE,EAAE,WAAW;AAA9D,OAFwB,CAA1B;AAID,KAND,MAMO,IAAI,SAAS,KAAK,kBAAlB,EAAsC;AAC3C,MAAA,cAAc,GAAG,CAAC;AAAC,QAAA,WAAW,EAAE,EAAd;AAAkB,QAAA,WAAW,EAAE;AAA/B,OAAD,CAAjB;AACA,MAAA,uBAAuB,GAAG,CACxB;AACE,QAAA,SAAS,EAAE,UAAU,mBAAmB,eAAe,6BAA6B,CAAC,KAAK,IAD5F;AAEE,QAAA,EAAE,EAAE,WAAW;AAFjB,OADwB,CAA1B;;AAOA,UAAI,8BAAJ,EAAoC;AAClC,QAAA,uBAAuB,CAAC,IAAxB,CAA6B;AAC3B,UAAA,SAAS,EAAE,UAAU,mBAAmB,eAAe,8BAA8B,CAAC,KAAK,IADhE;AAE3B,UAAA,EAAE,EAAE,WAAW;AAFY,SAA7B;AAID,OALD,MAKO;AACL,QAAA,uBAAuB,CAAC,IAAxB,CAA6B;AAC3B,UAAA,SAAS,EAAE,UAAU,mBAAmB,eAAe,6BAA6B,CAAC,KAAK,IAD/D;AAE3B,UAAA,EAAE,EAAE,WAAW;AAFY,SAA7B;AAID;AACF;;AAED,SAAK,MAAM,sBAAX,IAAqC,uBAArC,EAA8D;AAC5D,MAAA,cAAc,CAAC,IAAf,CAAoB;AAClB,QAAA,WAAW,EAAE,sBAAsB,CAAC,EAAvB,CAA0B,SAA1B,CAAoC,CAApC,EAAuC,CAAvC,CADK;AAElB,QAAA,WAAW,EAAE,sBAAW,sBAAW,sBAAsB,CAAC,SAAlC,EAA6C,SAA7C,EAAwD,EAAxD,CAAX,EAAwE,IAAxE,EAA8E,EAA9E;AAFK,OAApB;AAID;AACF;;AACD,SAAO;AAAC,IAAA,uBAAD;AAA0B,IAAA,yBAA1B;AAAqD,IAAA,cAArD;AAAqE,IAAA;AAArE,GAAP;AACD;;AAED,SAAS,cAAT,CAAwB,MAAxB,EAAgD,MAAhD,EAAwE,SAAxE,EAA4F;AAC1F,SAAO,qBAAU,MAAV,IAAoB,GAApB,GAA0B,SAA1B,GAAsC,GAAtC,GAA4C,MAAnD;AACD;;;;;;;;;;ACviBD;;AAIA;;AACA;;AACA;;;;;;AAMO,MAAM,SAAS,GAAG,WAAlB;;AAGA,MAAM,eAAe,GAAG,CAAC,MAAD,EAAS,SAAT,CAAxB;;AAwEA,MAAM,mBAAmB,GAAG,IAAI,6BAAJ,CAA4B,SAA5B,EAAuC,kBAAvC,CAA5B;;;AAED,SAAU,kBAAV,CACJ,IADI,EAEJ;AAAC,EAAA;AAAD,CAFI,EAEsB;AAE1B,QAAM;AACJ,IAAA,SADI;AAEJ,IAAA,wBAFI;AAGJ,IAAA,cAHI;AAIJ,IAAA,6BAJI;AAKJ,IAAA,OALI;AAMJ,IAAA,SANI;AAOJ,IAAA;AAPI,MAQF,8BAAe,IAAf,EAAqB,SAArB,EAAgC,MAAhC,CARJ;AASA,QAAM,YAAY,GAAiB,OAAnC;AAEA,QAAM,iBAAiB,GAAG,+CACxB,YADwB,EAExB,cAFwB,EAGxB,wBAHwB,EAIxB,6BAJwB,EAKxB,MAAM,CAAC,SALiB,CAA1B;AAQA,QAAM,IAAI,GAAG,IAAI,CAAC,QAAL,CAAc,CAAd,KAAoB,SAApB,IAAiC,IAAI,CAAC,QAAL,CAAc,CAAd,KAAoB,SAAlE;AAEA,MAAI,QAAQ,GAAY;AAAC,IAAA,IAAI,EAAE,IAAI,GAAG,MAAH,GAAY;AAAvB,GAAxB;AACA,MAAI,WAAW,GAAY;AAAC,IAAA,IAAI,EAAE,IAAI,GAAG,MAAH,GAAY;AAAvB,GAA3B;AACA,QAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,YAAY,CAAC,WAAb,GAA2B;AAAC,IAAA,WAAW,EAAE,YAAY,CAAC;AAA3B,GAA3B,GAAqE,EAD1D,CAAA,EAEX,YAAY,CAAC,OAAb,IAAwB,YAAY,CAAC,WAArC,GAAmD;AAAC,IAAA,OAAO,EAAE,YAAY,CAAC;AAAvB,GAAnD,GAAqF,EAF1E,CAAjB;;AAKA,MAAI,IAAJ,EAAU;AACR,IAAA,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,QADG,CAAA,EAEH,WAFG,CAAA,EAEQ;AACd,MAAA,mBAAmB,EAAE;AADP,KAFR,CAAR;AAKA,IAAA,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,WADM,CAAA,EAEN,WAFM,CAAX;AAID,GAVD,MAUO,IAAI,YAAY,CAAC,WAAjB,EAA8B;AACnC,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAAZ,CAAkC,aAAlC,CAAT;AACD,GAFM,MAEA,IAAI,YAAY,CAAC,OAAjB,EAA0B;AAC/B,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAAZ,CAAkC,SAAlC,CAAT;AACD;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,SADL,CAAA,EACc;AACZ,IAAA,SADY;AAEZ,IAAA,KAAK,EAAE,CACL,GAAG,iBAAiB,CAAC;AACnB,MAAA,QAAQ,EAAE,MADS;AAEnB,MAAA,IAAI,EAAE,QAFa;AAGnB,MAAA,cAAc,EAAE,OAHG;AAInB,MAAA,iBAAiB,EAAE,OAJA;AAKnB,MAAA,aAAa,EAAE;AALI,KAAD,CADf,EAQL,GAAG,iBAAiB,CAAC;AACnB,MAAA,QAAQ,EAAE,SADS;AAEnB,MAAA,IAAI,EAAE,WAFa;AAGnB,MAAA,cAAc,EAAE,OAHG;AAInB,MAAA,IAAI,EAAE,KAJa;AAKnB,MAAA,aAAa,EAAE;AALI,KAAD,CARf,EAeL,GAAG,iBAAiB,CAAC;AACnB,MAAA,QAAQ,EAAE,SADS;AAEnB,MAAA,IAAI,EAAE,WAFa;AAGnB,MAAA,cAAc,EAAE,OAHG;AAInB,MAAA,IAAI,EAAE,KAJa;AAKnB,MAAA,aAAa,EAAE;AALI,KAAD,CAff;AAFK,GADd,CAAA;AA2BD;;;;;;;;;;;ACjKD;;AACA;;AACA;;AACA;;AAQA;;AAmBA;;;AAGA,MAAM,qBAAqB,GAKvB,EALJ;;AAOM,SAAU,GAAV,CAAc,IAAd,EAA4B,GAA5B,EAA6D,KAA7D,EAAqF;AACzF,QAAM,UAAU,GAAG,IAAI,6BAAJ,CAA4B,IAA5B,EAAkC,GAAlC,CAAnB;AACA,EAAA,qBAAqB,CAAC,IAAD,CAArB,GAA8B;AAAC,IAAA,UAAD;AAAa,IAAA;AAAb,GAA9B;AACD;;AAEK,SAAU,MAAV,CAAiB,IAAjB,EAA6B;AACjC,SAAO,qBAAqB,CAAC,IAAD,CAA5B;AACD;;AAOK,SAAU,oBAAV,GAA8B;AAClC,SAAO,gBAAK,qBAAL,CAAP;AACD;;AAQD,GAAG,CAAC,gBAAD,EAAU,yBAAV,EAA4B,sBAA5B,CAAH;AACA,GAAG,CAAC,kBAAD,EAAW,2BAAX,EAA8B,wBAA9B,CAAH;AACA,GAAG,CAAC,oBAAD,EAAY,6BAAZ,EAAgC,0BAAhC,CAAH;;;;;;;;ACNO,MAAM,qBAAqB,GAA2B,CAC3D,6BAD2D,EAE3D,6BAF2D,EAG3D,2BAH2D,EAI3D,2BAJ2D,EAK3D,mBAL2D,CAAtD;;;;;;;;;;ACtDP;;AAGO,MAAM,qBAAqB,GAAG,CACnC,MADmC,EAEnC,OAFmC,EAGnC,MAHmC,EAInC,QAJmC,EAKnC,YALmC,EAMnC,aANmC,EAOnC,SAPmC,CAA9B;;AAmBA,MAAM,wBAAwB,GAMjC;AACF,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE,QADG;AAET,IAAA,MAAM,EAAE;AAFC,GADT;AAKF,EAAA,mBAAmB,EAAE;AACnB,IAAA,IAAI,EAAE,UADa;AAEnB,IAAA,MAAM,EAAE;AAFW,GALnB;AASF,EAAA,UAAU,EAAE;AACV,IAAA,IAAI,EAAE,QADI;AAEV,IAAA,MAAM,EAAE;AAFE,GATV;AAaF,EAAA,WAAW,EAAE;AACX,IAAA,IAAI,EAAE,QADK;AAEX,IAAA,MAAM,EAAE;AAFG,GAbX;AAiBF,EAAA,eAAe,EAAE;AACf,IAAA,IAAI,EAAE,SADS;AAEf,IAAA,MAAM,EAAE;AAFO,GAjBf;AAqBF,EAAA,iBAAiB,EAAE;AACjB,IAAA,IAAI,EAAE,SADW;AAEjB,IAAA,MAAM,EAAE;AAFS,GArBjB;AAyBF,EAAA,UAAU,EAAE;AACV,IAAA,IAAI,EAAE,OADI;AAEV,IAAA,MAAM,EAAE;AAFE;AAzBV,CANG;;AAsNA,MAAM,mBAAmB,GAAiB;AAC/C,EAAA,2BAA2B,EAAE,GADkB;AAE/C,EAAA,2BAA2B,EAAE,GAFkB;AAG/C,EAAA,yBAAyB,EAAE,GAHoB;AAI/C,EAAA,yBAAyB,EAAE,EAJoB;AAK/C,EAAA,iBAAiB,EAAE;AAL4B,CAA1C;;AAQA,MAAM,4BAA4B,GAAoC;AAC3E,EAAA,IAAI,EAAE,CADqE;AAE3E,EAAA,UAAU,EAAE,CAF+D;AAG3E,EAAA,aAAa,EAAE,CAH4D;AAI3E,EAAA,OAAO,EAAE,CAJkE;AAK3E,EAAA,YAAY,EAAE,CAL6D;AAM3E,EAAA,WAAW,EAAE,CAN8D;AAO3E,EAAA,SAAS,EAAE,CAPgE;AAQ3E,EAAA,SAAS,EAAE,CARgE;AAS3E,EAAA,MAAM,EAAE,CATmE;AAU3E,EAAA,UAAU,EAAE,CAV+D;AAW3E,EAAA,cAAc,EAAE,CAX2D;AAY3E,EAAA,eAAe,EAAE,CAZ0D;AAa3E,EAAA,mBAAmB,EAAE,CAbsD;AAc3E,EAAA,mBAAmB,EAAE,CAdsD;AAe3E,EAAA,iBAAiB,EAAE,CAfwD;AAgB3E,EAAA,SAAS,EAAE,CAhBgE;AAiB3E,EAAA,UAAU,EAAE,CAjB+D;AAkB3E,EAAA,aAAa,EAAE,CAlB4D;AAmB3E,EAAA,UAAU,EAAE,CAnB+D;AAoB3E,EAAA,SAAS,EAAE,CApBgE;AAqB3E,EAAA,aAAa,EAAE,CArB4D;AAsB3E,EAAA,cAAc,EAAE,CAtB2D;AAuB3E,EAAA,eAAe,EAAE,CAvB0D;AAwB3E,EAAA,UAAU,EAAE,CAxB+D;AAyB3E,EAAA,WAAW,EAAE,CAzB8D;AA0B3E,EAAA,YAAY,EAAE,CA1B6D;AA2B3E,EAAA,YAAY,EAAE,CA3B6D;AA4B3E,EAAA,YAAY,EAAE,CA5B6D;AA6B3E,EAAA,eAAe,EAAE,CA7B0D;AA8B3E,EAAA,OAAO,EAAE,CA9BkE;AA+B3E,EAAA,OAAO,EAAE,CA/BkE;AAgC3E,EAAA,MAAM,EAAE,CAhCmE;AAiC3E,EAAA,MAAM,EAAE,CAjCmE;AAkC3E,EAAA,OAAO,EAAE,CAlCkE;AAmC3E,EAAA,UAAU,EAAE,CAnC+D;AAoC3E,EAAA,WAAW,EAAE,CApC8D;AAqC3E,EAAA,UAAU,EAAE,CArC+D;AAsC3E,EAAA,gBAAgB,EAAE,CAtCyD;AAuC3E,EAAA,eAAe,EAAE,CAvC0D;AAwC3E,EAAA,WAAW,EAAE,CAxC8D;AAyC3E,EAAA,YAAY,EAAE,CAzC6D;AA0C3E,EAAA,aAAa,EAAE,CA1C4D;AA2C3E,EAAA,UAAU,EAAE,CA3C+D;AA4C3E,EAAA,iBAAiB,EAAE,CA5CwD;AA6C3E,EAAA,iBAAiB,EAAE,CA7CwD;AA8C3E,EAAA,UAAU,EAAE,CA9C+D;AA+C3E,EAAA,SAAS,EAAE,CA/CgE;AAgD3E,EAAA,WAAW,EAAE,CAhD8D;AAiD3E,EAAA,KAAK,EAAE,CAjDoE;AAkD3E,EAAA,UAAU,EAAE,CAlD+D;AAmD3E,EAAA,WAAW,EAAE,CAnD8D;AAoD3E,EAAA,aAAa,EAAE,CApD4D;AAqD3E,EAAA,UAAU,EAAE,CArD+D;AAsD3E,EAAA,SAAS,EAAE,CAtDgE;AAuD3E,EAAA,aAAa,EAAE,CAvD4D;AAwD3E,EAAA,cAAc,EAAE,CAxD2D;AAyD3E,EAAA,eAAe,EAAE,CAzD0D;AA0D3E,EAAA,UAAU,EAAE,CA1D+D;AA2D3E,EAAA,eAAe,EAAE,CA3D0D;AA4D3E,EAAA,YAAY,EAAE,CA5D6D;AA6D3E,EAAA,WAAW,EAAE,CA7D8D;AA8D3E,EAAA,YAAY,EAAE,CA9D6D;AA+D3E,EAAA,IAAI,EAAE,CA/DqE;AAgE3E,EAAA,MAAM,EAAE,CAhEmE;AAiE3E,EAAA,MAAM,EAAE;AAjEmE,CAAtE;;AAoEA,MAAM,iBAAiB,GAAG,gBAAK,4BAAL,CAA1B;;;;;;;;;;;;ACnUP;;AAMO,MAAM,YAAY,GAAG,SAArB;;AA+SA,MAAM,aAAa,GAAoB;AAC5C,EAAA,MAAM,EAAE;AACN,IAAA,EAAE,EAAE,OADE;AAEN,IAAA,MAAM,EAAE,CAAC,YAAD,CAFF;AAGN,IAAA,OAAO,EAAE,QAHH;AAIN,IAAA,KAAK,EAAE,KAJD;AAKN,IAAA,KAAK,EAAE;AALD,GADoC;AAQ5C,EAAA,KAAK,EAAE;AACL,IAAA,EAAE,EAAE,OADC;AAEL,IAAA,MAAM,EAAE,CAAC,YAAD,CAFH;AAGL,IAAA,MAAM,EAAE,gBAHH;AAIL,IAAA,OAAO,EAAE,QAJJ;AAKL,IAAA,KAAK,EAAE,KALF;AAML,IAAA,KAAK,EAAE;AANF,GARqC;AAgB5C,EAAA,QAAQ,EAAE;AACR,IAAA,EAAE,EAAE,iDADI;AAER,IAAA,SAAS,EAAE,CAAC,GAAD,EAAM,GAAN,CAFH;AAGR,IAAA,SAAS,EAAE,iDAHH;AAIR,IAAA,IAAI,EAAE,QAJE;AAKR,IAAA,IAAI,EAAE;AAAC,MAAA,IAAI,EAAE,MAAP;AAAe,MAAA,WAAW,EAAE,KAA5B;AAAmC,MAAA,MAAM,EAAE;AAA3C,KALE;AAMR,IAAA,OAAO,EAAE,QAND;AAOR,IAAA,KAAK,EAAE;AAPC;AAhBkC,CAAvC;;;AA2BD,SAAU,eAAV,CAA0B,IAA1B,EAAmC;AACvC,SAAO,CAAC,CAAC,IAAF,KAAW,IAAI,KAAK,QAAT,IAAqB,CAAC,CAAC,IAAI,CAAC,MAAvC,CAAP;AACD;;AAEK,SAAU,qBAAV,CAAgC,IAAhC,EAAyC;AAC7C,SAAO,eAAe,CAAC,IAAD,CAAf,IAAyB,wBAAS,IAAT,CAAhC;AACD;;;;;;;;;;;;ACtRK,SAAU,eAAV,CAA0B,IAA1B,EAAwC;AAC5C,SAAO,aAAa,CAAC,IAAD,CAAb,IAAuB,aAAa,CAAC,IAAD,CAApC,IAA8C,YAAY,CAAC,IAAD,CAAjE;AACD;;AAEK,SAAU,YAAV,CAAuB,IAAvB,EAAqC;AACzC,SAAO,YAAY,IAAnB;AACD;;AAEK,SAAU,aAAV,CAAwB,IAAxB,EAAsC;AAC1C,SAAO,aAAa,IAApB;AACD;;AAEK,SAAU,aAAV,CAAwB,IAAxB,EAAsC;AAC1C,SAAO,aAAa,IAApB;AACD;;;;;;;;;;;;AC9ED;;AAOA;;AAEA;;AACA;;AAgDM,SAAU,MAAV,CAAiB,IAAjB,EAA6D;AACjE,SAAO,wBAAS,IAAT,KAAkB,IAAI,CAAC,MAAD,CAAJ,KAAiB,SAA1C;AACD;;AAuCK,SAAU,aAAV,CAAwB,CAAxB,EAA8B;AAClC,SAAO,CAAC,CAAC,MAAD,CAAD,IAAa,CAAC,CAAC,OAAD,CAAd,IAA2B,CAAC,CAAC,QAAD,CAAnC;AACD;;AAsIM,MAAM,eAAe,GAAG,EAAxB;;AAuCP,MAAM,wBAAwB,GAAoD;AAChF,EAAA,KAAK,EAAE,CADyE;AAEhF,EAAA,MAAM,EAAE,CAFwE;AAGhF,EAAA,MAAM,EAAE,CAHwE;AAIhF,EAAA,OAAO,EAAE,CAJuE;AAKhF,EAAA,OAAO,EAAE;AALuE,CAAlF;AAQA,MAAM,6BAA6B,GAAG,gBAAK,wBAAL,CAAtC;;AAIM,SAAU,wBAAV,CACJ,IADI,EAEJ,QAFI,EAGJ,MAHI,EAG2B;;;AAE/B,QAAM,iBAAiB,GAAG,MAAM,CAAC,QAAD,CAAhC;AACA,QAAM,MAAM,GAAwC,EAApD,CAH+B,CAK/B;;AACA,QAAM;AAAC,IAAA,OAAO,EAAE,aAAV;AAAyB,IAAA;AAAzB,MAAoC,iBAA1C;;AACA,MAAI,aAAa,KAAK,SAAtB,EAAiC;AAC/B,IAAA,MAAM,CAAC,OAAP,GAAiB,aAAjB;AACD;;AAED,MAAI,OAAO,KAAK,SAAhB,EAA2B;AACzB,QAAK,wBAAY,IAAZ,KAAqB,CAAC,2BAAe,IAAI,CAAC,KAApB,CAAvB,IAAsD,0BAAa,IAAb,CAA1D,EAA8E;AAC5E,MAAA,MAAM,CAAC,OAAP,GAAiB,OAAjB;AACD;AACF;;AAED,MAAI,2BAAc,IAAd,CAAJ,EAAyB;AACvB,IAAA,MAAM,CAAC,OAAP,GAAiB,CAAjB;AACD,GAnB8B,CAqB/B;;;AACA,OAAK,MAAM,IAAX,IAAmB,6BAAnB,EAAkD;AAChD,QAAI,IAAI,CAAC,IAAD,CAAJ,KAAe,SAAnB,EAA8B;AAC5B,UAAI,IAAI,KAAK,SAAb,EAAwB;AACtB,cAAM,OAAO,GAA4B,IAAI,CAAC,IAAD,CAA7C;AAEA,QAAA,MAAM,CAAC,IAAD,CAAN,GAAe,wBAAS,OAAT,IACX,OADW,GAEX;AACE,UAAA,GAAG,EAAA,CAAA,EAAA,GAAE,OAAO,CAAC,GAAV,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,aADtB;AAEE,UAAA,MAAM,EAAA,CAAA,EAAA,GAAE,OAAO,CAAC,MAAV,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB;AAF5B,SAFJ;AAMD,OATD,MASO;AACJ,QAAA,MAAM,CAAC,IAAD,CAAN,GAAuB,IAAI,CAAC,IAAD,CAA3B;AACF;AACF;AACF;;AAED,SAAO,MAAP;AACD;;;;;;;;;;;;;;;;;;;;ACzUD;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAWA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAyDM,SAAU,2BAAV,CAAsC,UAAtC,EAA8D,OAA9D,EAAyF;;;AAC7F,SAAA,CAAA,EAAA,GAAO,UAAU,CAAC,OAAD,CAAjB,MAA0B,IAA1B,IAA0B,EAAA,KAAA,KAAA,CAA1B,GAA0B,EAA1B,GAA8B,UAAU,CAAC,OAAO,KAAK,OAAZ,GAAsB,iBAAtB,GAA0C,kBAA3C,CAAxC,CAD6F,CACW;AACzG;;AAEK,SAAU,yBAAV,CAAoC,UAApC,EAA4D,OAA5D,EAAuF;AAC3F,QAAM,IAAI,GAAG,yBAAyB,CAAC,UAAD,EAAa,OAAb,CAAtC;AACA,SAAO,kBAAO,IAAP,IAAe,IAAI,CAAC,IAApB,GAA2B,YAAlC;AACD;;AAEK,SAAU,yBAAV,CAAoC,UAApC,EAA4D,OAA5D,EAAuF;;;AAC3F,QAAM,IAAI,GAAA,CAAA,EAAA,GAAG,UAAU,CAAC,OAAD,CAAb,MAAsB,IAAtB,IAAsB,EAAA,KAAA,KAAA,CAAtB,GAAsB,EAAtB,GAA0B,UAAU,CAAC,OAAO,KAAK,OAAZ,GAAsB,eAAtB,GAAwC,gBAAzC,CAA9C,CAD2F,CACe;;AAC1G,SAAO,2BAAgB,IAAhB,EAAsB;AAAC,IAAA,IAAI,EAAE,UAAU,CAAC;AAAlB,GAAtB,CAAP;AACD;;AAEM,MAAM,YAAY,GAAG,EAArB;;AAEA,MAAM,iBAAiB,GAAe;AAC3C,EAAA,eAAe,EAAE,GAD0B;AAE3C,EAAA,gBAAgB,EAAE,GAFyB;AAG3C,EAAA,IAAI,EAAE;AAHqC,CAAtC;;;AAMD,SAAU,UAAV,CAAqB,WAArB,EAAwD;AAC5D,SAAO,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,QAAD,CAAnC;AACD;;AAkJM,MAAM,aAAa,GAAW;AACnC,EAAA,UAAU,EAAE,OADuB;AAGnC,EAAA,OAAO,EAAE,CAH0B;AAInC,EAAA,UAAU,EAAE,WAJuB;AAKnC,EAAA,UAAU,EAAE,kBALuB;AAOnC,EAAA,IAAI,EAAE,iBAP6B;AASnC,EAAA,IAAI,EAAE,IAAI,CAAC,iBATwB;AAWnC,EAAA,GAAG,EAAE,EAX8B;AAYnC,EAAA,IAAI,EAAE,EAZ6B;AAanC,EAAA,GAAG,EAAE,IAAI,CAAC,gBAbyB;AAcnC,EAAA,MAAM,EAAE,EAd2B;AAenC,EAAA,QAAQ,EAAE,EAfyB;AAgBnC,EAAA,KAAK,EAAE,EAhB4B;AAiBnC,EAAA,IAAI,EAAE,EAjB6B;AAkBnC,EAAA,KAAK,EAAE,EAlB4B;AAmBnC,EAAA,IAAI,EAAE,IAAI,CAAC,iBAnBwB;AAoBnC,EAAA,IAAI,EAAE;AAAC,IAAA,KAAK,EAAE;AAAR,GApB6B;AAqBnC,EAAA,MAAM,EAAE,EArB2B;AAsBnC,EAAA,IAAI,EAAE;AAAC,IAAA,KAAK,EAAE;AAAR,GAtB6B;AAuBnC,EAAA,IAAI,EAAE,IAAI,CAAC,iBAvBwB;AAwBnC,EAAA,KAAK,EAAE,EAxB4B;AA0BnC,EAAA,OAAO,EAAE;AACP,IAAA,IAAI,EAAE,EADC;AAEP,IAAA,MAAM,EAAE,GAFD;AAGP,IAAA,GAAG,EAAE,EAHE;AAIP,IAAA,MAAM,EAAE;AAAC,MAAA,KAAK,EAAE;AAAR,KAJD;AAKP,IAAA,QAAQ,EAAE,EALH;AAMP,IAAA,IAAI,EAAE,EANC;AAOP,IAAA,KAAK,EAAE;AAPA,GA1B0B;AAoCnC,EAAA,QAAQ,EAAE;AACR,IAAA,MAAM,EAAE,MADA;AAER,IAAA,IAAI,EAAE,IAFE;AAGR,IAAA,KAAK,EAAE;AAHC,GApCyB;AA0CnC,EAAA,SAAS,EAAE;AACT,IAAA,IAAI,EAAE;AACJ,MAAA,OAAO,EAAE;AADL,KADG;AAIT,IAAA,OAAO,EAAE;AAJA,GA1CwB;AAiDnC,EAAA,KAAK,EAAE,yBAjD4B;AAmDnC,EAAA,UAAU,EAAE,EAnDuB;AAqDnC,EAAA,MAAM,EAAE,2BArD2B;AAsDnC,EAAA,MAAM,EAAE;AAAC,IAAA,YAAY,EAAE,EAAf;AAAmB,IAAA,YAAY,EAAE;AAAjC,GAtD2B;AAuDnC,EAAA,YAAY,EAAE,EAvDqB;AAwDnC,EAAA,SAAS,EAAE,EAxDwB;AAyDnC,EAAA,WAAW,EAAE,EAzDsB;AA2DnC,EAAA,SAAS,EAAE,wBA3DwB;AA4DnC,EAAA,KAAK,EAAE,EA5D4B;AA8DnC,EAAA,KAAK,EAAE,EA9D4B;AAgEnC,EAAA,KAAK,EAAE;AAAC,IAAA,OAAO,EAAE;AAAV,GAhE4B;AAiEnC,EAAA,MAAM,EAAE;AAAC,IAAA,OAAO,EAAE;AAAV;AAjE2B,CAA9B,EAoEP;;;AACA,MAAM,KAAK,GAAG,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CAAd;AAaO,MAAM,iBAAiB,GAAG;AAC/B,EAAA,IAAI,EAAE,EADyB;AAE/B,EAAA,UAAU,EAAE,EAFmB;AAG/B,EAAA,UAAU,EAAE,EAHmB;AAI/B,EAAA,UAAU,EAAE,EAJmB;AAK/B,EAAA,aAAa,EAAE;AALgB,CAA1B;;AAQA,MAAM,aAAa,GAAG;AAC3B,EAAA,IAAI,EAAE,KAAK,CAAC,CAAD,CADgB;AAE3B,EAAA,MAAM,EAAE,KAAK,CAAC,CAAD,CAFc;AAG3B,EAAA,GAAG,EAAE,KAAK,CAAC,CAAD,CAHiB;AAI3B,EAAA,IAAI,EAAE,KAAK,CAAC,CAAD,CAJgB;AAK3B,EAAA,KAAK,EAAE,KAAK,CAAC,CAAD,CALe;AAM3B,EAAA,MAAM,EAAE,KAAK,CAAC,CAAD,CANc;AAO3B,EAAA,MAAM,EAAE,KAAK,CAAC,CAAD,CAPc;AAQ3B,EAAA,IAAI,EAAE,KAAK,CAAC,CAAD,CARgB;AAS3B,EAAA,KAAK,EAAE,KAAK,CAAC,CAAD,CATe;AAU3B,EAAA,KAAK,EAAE,MAVoB;AAW3B,EAAA,KAAK,EAAE,MAXoB;AAY3B,EAAA,KAAK,EAAE,MAZoB;AAa3B,EAAA,KAAK,EAAE,MAboB;AAc3B,EAAA,KAAK,EAAE,MAdoB;AAe3B,EAAA,KAAK,EAAE,MAfoB;AAgB3B,EAAA,KAAK,EAAE,MAhBoB;AAiB3B,EAAA,KAAK,EAAE,MAjBoB;AAkB3B,EAAA,KAAK,EAAE,MAlBoB;AAmB3B,EAAA,KAAK,EAAE,MAnBoB;AAoB3B,EAAA,MAAM,EAAE,MApBmB;AAqB3B,EAAA,MAAM,EAAE,MArBmB;AAsB3B,EAAA,MAAM,EAAE,MAtBmB;AAuB3B,EAAA,MAAM,EAAE,MAvBmB;AAwB3B,EAAA,MAAM,EAAE,MAxBmB;AAyB3B,EAAA,MAAM,EAAE;AAzBmB,CAAtB;;;AA4BD,SAAU,iBAAV,CAA4B,KAAA,GAA+B,EAA3D,EAA6D;AACjE,SAAO;AACL,IAAA,OAAO,EAAE,CACP;AACE,MAAA,IAAI,EAAE,OADR;AAEE,MAAA,KAAK,EAAE,wBAAS,KAAT,IAAiB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,aAAL,CAAA,EAAuB,KAAvB,CAAjB,GAAiD;AAF1D,KADO,CADJ;AAOL,IAAA,IAAI,EAAE;AAAC,MAAA,KAAK,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAAR,KAPD;AAQL,IAAA,IAAI,EAAE;AAAC,MAAA,KAAK,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAAR,KARD;AASL,IAAA,IAAI,EAAE;AACJ,MAAA,KAAK,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AADH,KATD;AAYL,IAAA,KAAK,EAAE;AACL,qBAAe;AACb,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADO,OADV;AAIL,qBAAe;AACb,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADO,OAJV;AAOL,qBAAe;AACb,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADO,OAPV;AAUL,wBAAkB;AAChB,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADU,OAVb;AAaL,MAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADJ;AAbD,KAZF;AA6BL,IAAA,IAAI,EAAE;AACJ,MAAA,WAAW,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT,OADT;AAEJ,MAAA,SAAS,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT,OAFP;AAGJ,MAAA,SAAS,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAHP,KA7BD;AAkCL,IAAA,KAAK,EAAE;AACL,MAAA,QAAQ,EAAE,CACR;AAAC,QAAA,MAAM,EAAE;AAAT,OADQ,EAER;AAAC,QAAA,MAAM,EAAE;AAAT,OAFQ,EAGR;AAAC,QAAA,MAAM,EAAE;AAAT,OAHQ,EAIR;AAAC,QAAA,MAAM,EAAE;AAAT,OAJQ,EAKR;AAAC,QAAA,MAAM,EAAE;AAAT,OALQ,EAMR;AAAC,QAAA,MAAM,EAAE;AAAT,OANQ,EAOR;AAAC,QAAA,MAAM,EAAE;AAAT,OAPQ,EAQR;AAAC,QAAA,MAAM,EAAE;AAAT,OARQ,EASR;AAAC,QAAA,MAAM,EAAE;AAAT,OATQ,EAUR;AAAC,QAAA,MAAM,EAAE;AAAT,OAVQ;AADL;AAlCF,GAAP;AAiDD;;AAEK,SAAU,oBAAV,CAA+B,QAA/B,EAAiE;AACrE,SAAO;AACL,IAAA,OAAO,EAAE,CACP;AACE,MAAA,IAAI,EAAE,UADR;AAEE,MAAA,KAAK,EAAE,wBAAS,QAAT,IAAoB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,iBAAL,CAAA,EAA2B,QAA3B,CAApB,GAA2D;AAFpE,KADO,CADJ;AAOL,IAAA,IAAI,EAAE;AACJ,MAAA,QAAQ,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AADN,KAPD;AAUL,IAAA,KAAK,EAAE;AACL,qBAAe;AACb,QAAA,QAAQ,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADG,OADV;AAIL,qBAAe;AACb,QAAA,QAAQ,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADG,OAJV;AAOL,qBAAe;AACb,QAAA,QAAQ,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADG,OAPV;AAUL,wBAAkB;AAChB,QAAA,QAAQ,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AADM;AAVb;AAVF,GAAP;AAyBD;;AAEK,SAAU,UAAV,CAAqB,IAArB,EAAiC;AACrC,SAAO;AACL,IAAA,IAAI,EAAE;AAAC,MAAA;AAAD,KADD;AAEL,IAAA,KAAK,EAAE;AACL,qBAAe;AAAC,QAAA;AAAD,OADV;AAEL,qBAAe;AAAC,QAAA;AAAD,OAFV;AAGL,qBAAe;AAAC,QAAA;AAAD,OAHV;AAIL,wBAAkB;AAAC,QAAA;AAAD;AAJb;AAFF,GAAP;AASD;;AAEK,SAAU,UAAV,CAAqB,MAAA,GAAiB,EAAtC,EAAwC;AAC5C,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA,IAAR;AAAc,IAAA;AAAd,MAAyC,MAA/C;AAAA,QAAiC,UAAU,GAAA,mBAAI,MAAJ,EAArC,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAqC,CAA3C;AAEA,SAAO,2BACL,EADK,EAEL,aAFK,EAGL,IAAI,GAAG,UAAU,CAAC,IAAD,CAAb,GAAsB,EAHrB,EAIL,KAAK,GAAG,iBAAiB,CAAC,KAAD,CAApB,GAA8B,EAJ9B,EAKL,QAAQ,GAAG,oBAAoB,CAAC,QAAD,CAAvB,GAAoC,EALvC,EAML,UAAU,IAAI,EANT,CAAP;AAQD;;AAED,MAAM,WAAW,GAAG,CAAC,MAAD,EAAS,GAAG,oBAAZ,CAApB;AAEA,MAAM,yBAAyB,GAAqB,CAClD,OADkD,EAElD,UAFkD,EAGlD,YAHkD,EAIlD,SAJkD,EAKlD,OALkD,EAMlD,QANkD,EAOlD,cAPkD,EAQlD,YARkD,EASlD,YATkD,EAUlD,QAVkD,EAYlD,kBAZkD,EAalD,cAbkD,EAclD,cAdkD,EAelD,WAfkD,EAiBlD,WAjBkD,EAkBlD,YAlBkD,EAmBlD,eAnBkD,EAoBlD,mBApBkD,EAqBlD,eArBkD,EAuBlD,WAvBkD,EAwBlD,YAxBkD,EAyBlD,eAzBkD,EA0BlD,mBA1BkD,EA2BlD,eA3BkD,EA6BlD,OA7BkD,EA8BlD,WA9BkD,EA+BlD,SA/BkD,CA+BxB;AA/BwB,CAApD;AAkCA,MAAM,+CAA+C,GAAA,MAAA,CAAA,MAAA,CAAA;AACnD,EAAA,IAAI,EAAE,CAAC,iBAAD,EAAoB,kBAApB,EAAwC,eAAxC,EAAyD,gBAAzD,EAA2E,MAA3E;AAD6C,CAAA,EAEhD,gDAFgD,CAArD;;AAKM,SAAU,sBAAV,CAAiC,MAAjC,EAA+C;AACnD,EAAA,MAAM,GAAG,qBAAU,MAAV,CAAT;;AAEA,OAAK,MAAM,IAAX,IAAmB,yBAAnB,EAA8C;AAC5C,WAAO,MAAM,CAAC,IAAD,CAAb;AACD;;AAED,MAAI,MAAM,CAAC,IAAX,EAAiB;AACf;AACA,SAAK,MAAM,IAAX,IAAmB,MAAM,CAAC,IAA1B,EAAgC;AAC9B,UAAI,kCAAuB,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAvB,CAAJ,EAA+C;AAC7C,eAAO,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAP;AACD;AACF;AACF;;AAED,MAAI,MAAM,CAAC,MAAX,EAAmB;AACjB,SAAK,MAAM,IAAX,IAAmB,4BAAnB,EAA0C;AACxC,aAAO,MAAM,CAAC,MAAP,CAAc,IAAd,CAAP;AACD;AACF,GApBkD,CAsBnD;;;AACA,MAAI,MAAM,CAAC,IAAX,EAAiB;AACf,SAAK,MAAM,IAAX,IAAmB,mCAAnB,EAAmD;AACjD,aAAO,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAP;AACD;;AAED,QAAI,MAAM,CAAC,IAAP,CAAY,OAAZ,IAAuB,wBAAS,MAAM,CAAC,IAAP,CAAY,OAArB,CAA3B,EAA0D;AACxD,aAAO,MAAM,CAAC,IAAP,CAAY,OAAnB;AACD;AACF;;AAED,OAAK,MAAM,QAAX,IAAuB,WAAvB,EAAoC;AAClC;AACA,SAAK,MAAM,IAAX,IAAmB,mCAAnB,EAAmD;AACjD,aAAO,MAAM,CAAC,QAAD,CAAN,CAAiB,IAAjB,CAAP;AACD,KAJiC,CAMlC;;;AACA,UAAM,yBAAyB,GAAG,+CAA+C,CAAC,QAAD,CAAjF;;AACA,QAAI,yBAAJ,EAA+B;AAC7B,WAAK,MAAM,IAAX,IAAmB,yBAAnB,EAA8C;AAC5C,eAAO,MAAM,CAAC,QAAD,CAAN,CAAiB,IAAjB,CAAP;AACD;AACF,KAZiC,CAclC;AACA;AACA;;;AACA,IAAA,2BAA2B,CAAC,MAAD,EAAS,QAAT,CAA3B;AACD;;AAED,OAAK,MAAM,CAAX,IAAgB,0CAAhB,EAAwC;AACtC;AACA,WAAO,MAAM,CAAC,CAAD,CAAb;AACD;;AAED,EAAA,mBAAmB,CAAC,MAAD,CAAnB,CA1DmD,CA4DnD;;AACA,OAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;AACzB,QAAI,wBAAS,MAAM,CAAC,IAAD,CAAf,KAA0B,mBAAQ,MAAM,CAAC,IAAD,CAAd,CAA9B,EAAqD;AACnD,aAAO,MAAM,CAAC,IAAD,CAAb;AACD;AACF;;AAED,SAAO,mBAAQ,MAAR,IAAkB,SAAlB,GAA8B,MAArC;AACD;AAED;;;;;;;;;AAOA,SAAS,mBAAT,CAA6B,MAA7B,EAA2C;AACzC,QAAM;AAAC,IAAA,eAAD;AAAkB,IAAA,kBAAlB;AAAsC,IAAA;AAAtC,MAAkD,+BAAmB,MAAM,CAAC,KAA1B,CAAxD,CADyC,CAGzC;;AACA,MAAI,CAAC,mBAAQ,eAAR,CAAL,EAA+B;AAC7B,IAAA,MAAM,CAAC,KAAP,CAAa,aAAb,IAA2B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACtB,MAAM,CAAC,KAAP,CAAa,aAAb,CADsB,CAAA,EAEtB,eAFsB,CAEN;AAFM,KAA3B;AAID;;AACD,MAAI,CAAC,mBAAQ,kBAAR,CAAL,EAAkC;AAChC,IAAA,MAAM,CAAC,KAAP,CAAa,gBAAb,IAA8B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,MAAM,CAAC,KAAP,CAAa,gBAAb,CADyB,CAAA,EAEzB,kBAFyB,CAA9B;AAID,GAfwC,CAiBzC;;;AACA,MAAI,CAAC,mBAAQ,QAAR,CAAL,EAAwB;AACtB,IAAA,MAAM,CAAC,KAAP,GAAe,QAAf;AACD,GAFD,MAEO;AACL,WAAO,MAAM,CAAC,KAAd;AACD;AACF;;AAED,SAAS,2BAAT,CACE,MADF,EAEE,IAFF,EAEgC;AAC9B,MAHF,EAIE,iBAJF,EAI4B;AAE1B,QAAM,UAAU,GAAe,iBAAiB,GAAG,MAAM,CAAC,IAAD,CAAN,CAAa,iBAAb,CAAH,GAAqC,MAAM,CAAC,IAAD,CAA3F;;AAEA,MAAI,IAAI,KAAK,MAAb,EAAqB;AACnB,IAAA,MAAM,GAAG,MAAT,CADmB,CACF;AAClB;;AAED,QAAM,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,UADM,CAAA,EAEL,MAAM,CAAC,KAAP,CAAa,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAA,MAAA,GAAU,IAAvB,CAFK,CAAX,CAR0B,CAa1B;;AACA,MAAI,CAAC,mBAAQ,KAAR,CAAL,EAAqB;AACnB,IAAA,MAAM,CAAC,KAAP,CAAa,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAA,MAAA,GAAU,IAAvB,IAA+B,KAA/B;AACD;;AAED,MAAI,CAAC,iBAAL,EAAwB;AACtB;AACA,WAAO,MAAM,CAAC,IAAD,CAAb;AACD;AACF;;;;;;;;;ACtlBK,SAAU,WAAV,CAAsB,IAAtB,EAAoC;AACxC,SAAO,WAAW,IAAlB;AACD;;;;;;;;;;AC9CD;;AA0DM,SAAU,YAAV,CAAuB,IAAvB,EAAqC;AACzC,SAAO,YAAY,IAAnB;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAA4C;AAChD,SAAO,CAAC,uBAAQ,IAAI,CAAC,MAAb,CAAD,IAAyB,IAAI,CAAC,MAAL,CAAY,OAAZ,CAAhC;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CD;;AAQA;;AACA;;AACA;;AAEA;;;;;;;;;;;AC5BA;;AAEA;;AAQA;;AACA;;AACA;;AACA;;;;;;AAEM,MAAgB,UAAhB,CAA0B;AAQvB,EAAA,GAAG,CAAC,IAAD,EAA+C,MAA/C,EAAwD;AAChE,QAAI,wBAAY,IAAZ,CAAJ,EAAuB;AACrB,aAAO,KAAK,QAAL,CAAc,IAAd,EAAoB,MAApB,CAAP;AACD,KAFD,MAEO,IAAI,0BAAa,IAAb,CAAJ,EAAwB;AAC7B,aAAO,KAAK,SAAL,CAAe,IAAf,EAAqB,MAArB,CAAP;AACD,KAFM,MAEA,IAAI,2BAAc,IAAd,CAAJ,EAAyB;AAC9B,aAAO,KAAK,UAAL,CAAgB,IAAhB,EAAsB,MAAtB,CAAP;AACD,KAFM,MAEA,IAAI,2BAAc,IAAd,CAAJ,EAAyB;AAC9B,aAAO,KAAK,UAAL,CAAgB,IAAhB,EAAsB,MAAtB,CAAP;AACD,KAFM,MAEA,IAAI,0BAAa,IAAb,CAAJ,EAAwB;AAC7B,aAAO,KAAK,SAAL,CAAe,IAAf,EAAqB,MAArB,CAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAK,cAAL,CAAoB,IAApB,EAA0B,MAA1B,CAAP;AACD;AACF;;AAEM,EAAA,cAAc,CAAC,IAAD,EAAgB,MAAhB,EAAyB;AAC5C,QAAI,wBAAY,IAAZ,CAAJ,EAAuB;AACrB,aAAO,KAAK,QAAL,CAAc,IAAd,EAAoB,MAApB,CAAP;AACD,KAFD,MAEO,IAAI,sBAAW,IAAX,CAAJ,EAAsB;AAC3B,aAAO,KAAK,OAAL,CAAa,IAAb,EAAmB,MAAnB,CAAP;AACD;;AACD,UAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,IAAxB,CAAV,CAAN;AACD;;AAIS,EAAA,QAAQ,CAAC,IAAD,EAAW,MAAX,EAAoB;AACpC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP,MAAA,KAAK,EAAE,IAAI,CAAC,KAAL,CAAW,GAAX,CAAe,OAAO,IAAI,KAAK,cAAL,CAAoB,OAApB,EAA6B,MAA7B,CAA1B;AADA,KADT,CAAA;AAID;;AAES,EAAA,UAAU,CAClB,IADkB,EAElB,MAFkB,EAET;AAET,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP,MAAA,OAAO,EAAE,IAAI,CAAC,OAAL,CAAa,GAAb,CAAiB,OAAO,IAAI,KAAK,GAAL,CAAS,OAAT,EAAkB,MAAlB,CAA5B;AADF,KADT,CAAA;AAID;;AAES,EAAA,UAAU,CAClB,IADkB,EAElB,MAFkB,EAET;AAET,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP,MAAA,OAAO,EAAE,IAAI,CAAC,OAAL,CAAa,GAAb,CAAiB,OAAO,IAAI,KAAK,GAAL,CAAS,OAAT,EAAkB,MAAlB,CAA5B;AADF,KADT,CAAA;AAID;;AAES,EAAA,SAAS,CACjB,IADiB,EAEjB,MAFiB,EAER;AAET,UAAM;AAAC,MAAA;AAAD,QAAoB,IAA1B;AAAA,UAAkB,IAAI,GAAA,mBAAI,IAAJ,EAAhB,CAAA,QAAA,CAAgB,CAAtB;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP,MAAA,MAAM,EAAE,MAAM,CAAC,GAAP,CAAW,OAAO,IAAI,KAAK,GAAL,CAAS,OAAT,EAAkB,MAAlB,CAAtB;AADD,KADT,CAAA;AAID;;AAES,EAAA,QAAQ,CAAC,IAAD,EAAwC,MAAxC,EAAiD;AACjE,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEM,IAFN,CAAA,EAEkB;AAChB;AACA,MAAA,IAAI,EAAE,KAAK,GAAL,CAAS,IAAI,CAAC,IAAd,EAAoB,MAApB;AAFU,KAFlB,CAAA;AAMD;;AAES,EAAA,SAAS,CAAC,IAAD,EAAmB,MAAnB,EAA4B;AAC7C,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP;AACA,MAAA,IAAI,EAAE,KAAK,GAAL,CAAS,IAAI,CAAC,IAAd,EAA2B,MAA3B;AAFC,KADT,CAAA;AAKD;;AAzF6B;;;;;;;;;;;;;AChBhC;;AACA;;AACA;;AACA;;AAWA;;AACA;;AACA;;AAgBA;;AACA;;;;;;AAEA,MAAM,kBAAkB,GAAG;AACzB,EAAA,IAAI,EAAE,CADmB;AAEzB,EAAA,MAAM,EAAE,CAFiB;AAGzB,EAAA,SAAS,EAAE;AAHc,CAA3B;;AAQM,SAAU,aAAV,CAAwB,CAAxB,EAAiC;AACrC,SAAO,CAAC,IAAI,kBAAZ;AACD;;AA6BM,MAAM,eAAe,GAAG,IAAI,GAAJ,CAAc,CAAC,SAAD,EAAM,SAAN,EAAW,UAAX,EAAiB,UAAjB,EAAuB,WAAvB,EAA8B,YAA9B,EAAsC,YAAtC,EAA8C,UAA9C,EAAoD,UAApD,EAA0D,UAA1D,CAAd,CAAxB;;AACA,MAAM,sBAAsB,GAAG,IAAI,GAAJ,CAAc,CAAC,SAAD,EAAM,UAAN,EAAY,SAAZ,CAAd,CAA/B;;;AAEP,SAAS,uBAAT,CACE,QADF,EAEE,CAFF,EAEkB;;;AAEhB,QAAM,CAAC,GAAG,CAAC,KAAK,GAAN,GAAY,GAAZ,GAAkB,QAA5B;AAEA,QAAM,IAAI,GAAG,QAAQ,CAAC,CAAD,CAArB;AACA,QAAM,IAAI,GAAG,QAAQ,CAAC,CAAD,CAArB;;AAEA,MAAI,4BAAW,IAAX,KAAoB,4BAAW,IAAX,CAAxB,EAA0C;AACxC,QAAI,gCAAe,IAAf,MAAyB,cAAzB,IAA2C,gCAAe,IAAf,MAAyB,cAAxE,EAAwF;AACtF,UAAI,IAAI,CAAC,KAAT,EAAgB;AACd,eAAO,CAAP;AACD,OAFD,MAEO,IAAI,IAAI,CAAC,KAAT,EAAgB;AACrB,eAAO,CAAP;AACD;;AACD,YAAM,UAAU,GAAG,4BAAW,IAAX,KAAoB,CAAC,CAAC,IAAI,CAAC,SAA9C;AACA,YAAM,UAAU,GAAG,4BAAW,IAAX,KAAoB,CAAC,CAAC,IAAI,CAAC,SAA9C,CAPsF,CAQtF;;AACA,UAAI,UAAU,KAAK,UAAnB,EAA+B;AAC7B,eAAO,UAAU,GAAG,CAAH,GAAO,CAAxB;AACD,OAFD,MAEO;AACL,cAAM,MAAM,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,KAAR,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,KAAA,CAAb,GAAa,EAAA,CAAE,IAA3B;AACA,cAAM,MAAM,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,KAAR,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,KAAA,CAAb,GAAa,EAAA,CAAE,IAA3B;;AAEA,YAAI,MAAM,IAAI,MAAM,KAAK,QAAzB,EAAmC;AACjC,iBAAO,CAAP;AACD,SAFD,MAEO,IAAI,MAAM,IAAI,MAAM,KAAK,QAAzB,EAAmC;AACxC,iBAAO,CAAP;AACD;AACF;AACF,KArBD,MAqBO,IAAI,gCAAe,IAAf,MAAyB,cAA7B,EAA6C;AAClD,aAAO,CAAP;AACD,KAFM,MAEA,IAAI,gCAAe,IAAf,MAAyB,cAA7B,EAA6C;AAClD,aAAO,CAAP;AACD;AACF,GA3BD,MA2BO,IAAI,gCAAe,IAAf,MAAyB,cAA7B,EAA6C;AAClD,WAAO,CAAP;AACD,GAFM,MAEA,IAAI,gCAAe,IAAf,MAAyB,cAA7B,EAA6C;AAClD,WAAO,CAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAED,SAAS,mBAAT,CAA6B,OAA7B,EAAoE;AAClE,UAAQ,OAAR;AACE,SAAK,GAAL;AACE,aAAO,GAAP;;AACF,SAAK,GAAL;AACE,aAAO,GAAP;;AACF,SAAK,OAAL;AACE,aAAO,QAAP;;AACF,SAAK,QAAL;AACE,aAAO,OAAP;AARJ;AAUD,EAED;AACA;;;AACM,SAAU,KAAV,CACJ,CADI,EAEJ,QAFI,EAGJ,GAAA,GAEI,EALA,EAKE;AAEN,QAAM,IAAI,GAAG,qBAAU,CAAV,IAAe,CAAC,CAAC,IAAjB,GAAwB,CAArC,CAFM,CAGN;;AACA,MAAI,CAAC,eAAe,CAAC,GAAhB,CAAoB,IAApB,CAAL,EAAgC;AAC9B,WAAO,IAAP;AACD,GANK,CAQN;AACA;AAEA;AACA;;;AACA,QAAM,YAAY,GAAG,uBAAuB,CAAC,QAAD,EAAW,GAAX,CAAvB,IAA0C,uBAAuB,CAAC,QAAD,EAAW,OAAX,CAAtF;;AAEA,MAAI,CAAC,YAAL,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,QAAM,eAAe,GAAG,QAAQ,CAAC,YAAD,CAAhC;AACA,QAAM,YAAY,GAAG,4BAAW,eAAX,IAA8B,yBAAQ,eAAR,EAAyB,EAAzB,CAA9B,GAA6D,SAAlF;AAEA,MAAI,gBAAgB,GAAmC,mBAAmB,CAAC,YAAD,CAA1E;AACA,MAAI,YAAY,GAAG,QAAQ,CAAC,gBAAD,CAA3B;AAEA,MAAI,cAAc,GAAG,4BAAW,YAAX,IAA2B,yBAAQ,YAAR,EAAsB,EAAtB,CAA3B,GAAuD,SAA5E,CAzBM,CA2BN;;AACA,MAAI,cAAc,KAAK,YAAvB,EAAqC;AACnC,IAAA,cAAc,GAAG,SAAjB;AACA,IAAA,YAAY,GAAG,SAAf;AACA,IAAA,gBAAgB,GAAG,SAAnB;AACD,GAhCK,CAkCN;;;AACA,QAAM,OAAO,GAAG,8BAAqB,MAArB,CAA4B,CAAC,EAAD,EAAK,OAAL,KAAgB;AAC1D;AACA,QAAI,OAAO,KAAK,SAAZ,IAAyB,+BAAgB,QAAhB,EAA0B,OAA1B,CAA7B,EAAiE;AAC/D,YAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;;AACA,WAAK,MAAM,IAAX,IAAmB,qBAAM,UAAN,CAAnB,EAAsC;AACpC,cAAM,QAAQ,GAAG,6BAAY,IAAZ,CAAjB;;AACA,YAAI,QAAQ,CAAC,SAAb,EAAwB;AACtB;AACD,SAJmC,CAMpC;;;AACA,cAAM,CAAC,GAAG,yBAAQ,QAAR,EAAkB,EAAlB,CAAV;;AACA,aACE;AACA,SAAC,CAAD,IACA;AACA,QAAA,CAAC,KAAK,cAJR,EAKE;AACA,UAAA,EAAE,CAAC,IAAH,CAAQ;AAAC,YAAA,OAAD;AAAU,YAAA;AAAV,WAAR;AACD;AACF;AACF;;AACD,WAAO,EAAP;AACD,GAvBe,EAuBb,EAvBa,CAAhB,CAnCM,CA4DN;;;AACA,MAAI,MAAJ;;AACA,MAAI,eAAe,CAAC,KAAhB,KAA0B,SAA9B,EAAyC;AACvC,QAAI,yBAAU,eAAe,CAAC,KAA1B,CAAJ,EAAsC;AACpC,MAAA,MAAM,GAAG,eAAe,CAAC,KAAhB,GAAwB,MAAxB,GAAiC,IAA1C;AACD,KAFD,MAEO;AACL,MAAA,MAAM,GAAG,eAAe,CAAC,KAAzB;AACD;AACF,GAND,MAMO,IAAI,OAAO,CAAC,MAAR,GAAiB,CAAjB,IAAsB,sBAAsB,CAAC,GAAvB,CAA2B,IAA3B,CAA1B,EAA4D;AACjE;AACA,IAAA,MAAM,GAAG,MAAT;AACD;;AAED,MAAI,CAAC,MAAD,IAAW,CAAC,aAAa,CAAC,MAAD,CAA7B,EAAuC;AACrC,WAAO,IAAP;AACD;;AAED,MAAI,2BAAY,QAAZ,KAAyB,OAAO,CAAC,MAAR,KAAmB,CAAhD,EAAmD;AACjD,WAAO,IAAP;AACD,GA/EK,CAiFN;;;AACA,MAAI,eAAe,CAAC,KAAhB,IAAyB,eAAe,CAAC,KAAhB,CAAsB,IAA/C,IAAuD,eAAe,CAAC,KAAhB,CAAsB,IAAtB,KAA+B,iBAAU,MAApG,EAA4G;AAC1G,QAAI,GAAG,CAAC,sBAAR,EAAgC;AAC9B,aAAO,IAAP;AACD,KAFD,MAEO;AACL,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,yBAAZ,CAAsC,eAAe,CAAC,KAAhB,CAAsB,IAA5D,CAAT;AACD;AACF,GAxFK,CA0FN;;;AACA,MAAI,mCAAkB,QAAQ,CAAC,uCAAyB,YAAzB,CAAD,CAA1B,CAAJ,EAAyE;AACvE,QAAI,eAAe,CAAC,KAAhB,KAA0B,SAA9B,EAAyC;AACvC,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAAZ,CAAkC,YAAlC,CAAT;AACD;;AACD,WAAO,IAAP;AACD,GAhGK,CAkGN;;;AACA,MAAI,4BAAW,eAAX,KAA+B,eAAe,CAAC,SAA/C,IAA4D,CAAC,oBAAS,kBAAT,EAAkB,eAAe,CAAC,SAAlC,CAAjE,EAA+G;AAC7G,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,0BAAZ,CAAuC,eAAe,CAAC,SAAvD,CAAT;AACD;;AAED,SAAO;AACL,IAAA,cAAc,EAAE,YAAY,GAAG,gBAAH,GAAsB,SAD7C;AAEL,IAAA,YAAY,EAAE,cAFT;AAGL,IAAA,YAHK;AAIL,IAAA,MAAM,EAAE,eAAe,CAAC,MAAhB,KAA2B,IAA3B,GAAkC,KAAlC,GAA0C,sBAAW,IAAX,CAJ7C;AAKL,IAAA,OALK;AAML,IAAA;AANK,GAAP;AAQD;;;;;;;;;;;AC5PD;;AAGA;;AAEA;;AACA;;AACA;;AAKA,SAAS,gBAAT,CAA0B,OAA1B,EAA0C;AACxC,QAAM;AAAC,IAAA,KAAK,EAAE,MAAR;AAAgB,IAAA,IAAI,EAAE;AAAtB,MAAwC,OAA9C;AAAA,QAAsC,IAAI,GAAA,mBAAI,OAAJ,EAApC,CAAA,OAAA,EAAA,MAAA,CAAoC,CAA1C;AAEA,SAAO,gBAAK,IAAL,EAAW,MAAX,GAAoB,CAApB,GAAwB,IAAxB,GAA+B,IAAI,CAAC,IAA3C;AACD;;AAED,SAAS,0BAAT,CAAoC,MAApC,EAAkD;AAChD,OAAK,MAAM,IAAX,IAAmB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,OAAzB,CAAnB,EAA+D;AAC7D,QAAI,MAAM,CAAC,IAAD,CAAV,EAAkB;AAChB,MAAA,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,MADC,CAAA,EACK;AACT;AACA,SAAC,IAAD,GAAQ,gBAAK,MAAM,CAAC,IAAD,CAAX,EAAmB,CAAC,OAAD,EAAU,MAAV,CAAnB;AAFC,OADL,CAAN;AAKD;AACF;;AACD,SAAO,MAAP;AACD;;AAED,SAAS,eAAT,CAAyB,OAAzB,EAA2C,UAAA,GAAyB,EAApE,EAAwE,QAAxE,EAAkG;AAChG,MAAI,OAAO,CAAC,KAAR,KAAkB,aAAtB,EAAqC;AACnC,WAAO;AAAC,MAAA,OAAO,EAAE;AAAV,KAAP;AACD,GAFD,MAEO,IAAI,OAAO,CAAC,KAAZ,EAAmB;AACxB;AACA,WAAO,wBAAS,OAAO,CAAC,KAAjB,IAA0B,OAAO,CAAC,KAAlC,GAA0C,EAAjD;AACD,GAHM,MAGA,IAAI,OAAO,CAAC,KAAR,KAAkB,SAAtB,EAAiC;AACtC;AACA,WAAO,IAAP;AACD,GAHM,MAGA;AACL;AACA,QAAI,UAAU,CAAC,KAAX,IAAoB,QAAQ,CAAC,KAAjC,EAAwC;AACtC;AACA,aAAO,wBAAS,UAAU,CAAC,KAApB,IAA6B,UAAU,CAAC,KAAxC,GAAgD,EAAvD;AACD,KALI,CAML;;;AACA,WAAO,SAAP;AACD;AACF;;AAED,SAAS,cAAT,CAAwB,OAAxB,EAA0C,UAAA,GAAyB,EAAnE,EAAqE;AACnE,MAAI,OAAO,CAAC,IAAZ,EAAkB;AAChB;AACA,WAAO,OAAO,CAAC,IAAR,KAAiB,IAAjB,GAAwB,EAAxB,GAA6B,OAAO,CAAC,IAA5C;AACD,GAHD,MAGO,IAAI,OAAO,CAAC,IAAR,KAAiB,SAArB,EAAgC;AACrC;AACA,WAAO,IAAP;AACD,GAHM,MAGA;AACL;AACA,QAAI,UAAU,CAAC,IAAf,EAAqB;AACnB;AACA,aAAO,UAAU,CAAC,IAAX,KAAoB,IAApB,GAA2B,EAA3B,GAAgC,UAAU,CAAC,IAAlD;AACD,KALI,CAML;;;AACA,WAAO,SAAP;AACD;AACF;;AAEK,MAAO,qBAAP,CAA4B;AAAlC,EAAA,WAAA,GAAA;AACS,SAAA,IAAA,GAAO,cAAP;AAkGR;;AAhGQ,EAAA,eAAe,CAAC,IAAD,EAA6C,MAA7C,EAA2D;AAC/E,QAAI,sBAAW,IAAX,CAAJ,EAAsB;AACpB,YAAM;AAAC,QAAA,IAAD;AAAO,QAAA;AAAP,UAAmB,IAAzB;AACA,YAAM,OAAO,GAAG,qBAAU,IAAV,IAAkB,IAAlB,GAAyB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAzC;;AACA,cAAQ,OAAO,CAAC,IAAhB;AACE,aAAK,MAAL;AACA,aAAK,MAAL;AACA,aAAK,OAAL;AACE,iBAAO,CAAC,CAAC,eAAe,CAAC,OAAD,EAAU,MAAM,CAAC,OAAO,CAAC,IAAT,CAAhB,EAAgC,QAAhC,CAAxB;;AACF,aAAK,MAAL;AACE,iBACE;AACA,aAAC,CAAC,eAAe,CAAC,OAAD,EAAU,MAAM,CAAC,OAAO,CAAC,IAAT,CAAhB,EAAgC,QAAhC,CAAjB,IACA,CAAC,CAAC,cAAc,CAAC,OAAD,EAAU,MAAM,CAAC,OAAO,CAAC,IAAT,CAAhB;AAHlB;AANJ;AAYD;;AACD,WAAO,KAAP;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAgC,MAAhC,EAA0D,SAA1D,EAAyF;AACjG,UAAM;AAAC,MAAA;AAAD,QAAW,MAAjB;AACA,UAAM;AAAC,MAAA,SAAD;AAAY,MAAA,UAAZ;AAAwB,MAAA,QAAxB;AAAkC,MAAA;AAAlC,QAAwD,IAA9D;AAAA,UAAiD,SAAS,GAAA,mBAAI,IAAJ,EAApD,CAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,CAAoD,CAA1D;AACA,UAAM,OAAO,GAAY,qBAAU,IAAV,IAAkB,IAAlB,GAAyB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAlD;AAEA,UAAM,YAAY,GAAG,eAAe,CAAC,OAAD,EAAU,MAAM,CAAC,OAAO,CAAC,IAAT,CAAhB,EAAgC,QAAhC,CAApC;AACA,UAAM,WAAW,GAAG,OAAO,CAAC,IAAR,KAAiB,MAAjB,IAA2B,cAAc,CAAC,OAAD,EAAU,MAAM,CAAC,OAAO,CAAC,IAAT,CAAhB,CAA7D;AAEA,UAAM,KAAK,GAAyB,iCAE5B,SAAS,GAAG;AAAC,MAAA;AAAD,KAAH,GAAiB,KAAG;AACjC,MAAA,IAAI,EAAE,gBAAgB,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEhB,OAAO,CAAC,IAAR,KAAiB,MAAjB,IAA2B,OAAO,CAAC,OAAR,KAAoB,SAA/C,IAA4D,OAAO,CAAC,WAAR,KAAwB,SAApF,GACA;AAAC,QAAA,OAAO,EAAE;AAAV,OADA,GAEA,EAJgB,CAAA,EAKjB,OALiB,CAAA,CADW;AAQjC;AACA,MAAA,QAAQ,EAAE,gBAAK,QAAL,EAAe,CAAC,OAAD,CAAf;AATuB,MAFD,CAApC,CARiG,CAuBjG;AAEA;;AACA,UAAM,UAAU,GAAG,kBAAM,OAAN,EAAe,QAAf,CAAnB;AAEA,QAAI,eAAe,GAAG,QAAtB;;AACA,QAAI,UAAJ,EAAgB;AACd,YAAM;AAAC,QAAA,YAAY,EAAE,iBAAf;AAAkC,QAAA;AAAlC,UAA4C,UAAlD;AACA,MAAA,eAAe,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,QADU,CAAA,EACF;AACX,SAAC,iBAAD,GAAmB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACd,QAAQ,CAAC,iBAAD,CADM,CAAA,EAEb,MAAM,GAAG;AAAC,UAAA,KAAK,EAAE;AAAR,SAAH,GAAqB,EAFd;AADR,OADE,CAAf;AAOD;;AAED,QAAI,WAAJ,EAAiB;AACf,MAAA,KAAK,CAAC,IAAN,CAAU,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACJ,UAAU,GAAG;AAAC,QAAA;AAAD,OAAH,GAAkB,EADxB,CAAA,EAC2B;AACnC,QAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACF,UAAA,IAAI,EAAE;AADJ,SAAA,EAEC,gBAAK,OAAL,EAAc,CAAC,MAAD,EAAS,aAAT,EAAwB,SAAxB,EAAmC,SAAnC,CAAd,CAFD,CAAA,EAGC,WAHD,CAD+B;AAMnC,QAAA,QAAQ,EAAE;AANyB,OAD3B,CAAV;AASD;;AACD,QAAI,YAAJ,EAAkB;AAChB,MAAA,KAAK,CAAC,IAAN,CAAU,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACJ,UAAU,GAAG;AAAC,QAAA;AAAD,OAAH,GAAkB,EADxB,CAAA,EAC2B;AACnC,QAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACF,UAAA,IAAI,EAAE,OADJ;AAEF,UAAA,OAAO,EAAE,CAFP;AAGF,UAAA,MAAM,EAAE;AAHN,SAAA,EAIC,gBAAK,OAAL,EAAc,CAAC,MAAD,EAAS,SAAT,CAAd,CAJD,CAAA,EAKC,YALD,CAD+B;AAQnC,QAAA,QAAQ,EAAE;AARyB,OAD3B,CAAV;AAWD;;AAED,WAAO,SAAS,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAET,SAFS,CAAA,EAEA;AACZ,MAAA;AADY,KAFA,CAAA,EAGP,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAGF,MAHE,CAAA,EAGI;AACT,MAAA,MAAM,EAAE,0BAA0B,CAAC,MAAD;AADzB,KAHJ,CAHO,CAAhB;AAUD;;AAlG+B;;;;;;;;;;;;;ACrElC;;AACA;;AAEA;;AAGA;;AACA;;;;;;AAKM,MAAO,mBAAP,CAA0B;AAAhC,EAAA,WAAA,GAAA;AACS,SAAA,IAAA,GAAO,WAAP;AAgDR;;AA9CQ,EAAA,eAAe,CAAC,IAAD,EAAsC;;;AAC1D,QAAI,sBAAW,IAAX,KAAoB,IAAI,CAAC,QAA7B,EAAuC;AACrC,WAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,cAAM,GAAG,GAAG,IAAI,CAAC,QAAL,CAAc,OAAd,CAAZ;;AACA,YAAI,GAAG,IAAI,mCAAkB,GAAlB,CAAX,EAAmC;AACjC,cAAA,CAAA,EAAA,GAAI,GAAG,KAAA,IAAH,IAAA,GAAG,KAAA,KAAA,CAAH,GAAG,KAAA,CAAH,GAAA,GAAG,CAAE,KAAT,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAG,WAAH,CAAd,EAA+B;AAC7B,mBAAO,IAAP;AACD;AACF;AACF;AACF;;AACD,WAAO,KAAP;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAA4B;;;AACpC,UAAM,UAAU,GAAG,EAAnB;AACA,QAAI,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,IAAI,CAAC,QAAZ,CAAZ;;AAEA,SAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,YAAM,QAAQ,GAAG,6BAAe,OAAf,CAAjB;AACA,YAAM,GAAG,GAAG,QAAQ,CAAC,OAAD,CAApB;;AACA,UAAI,GAAG,IAAI,mCAAkB,GAAlB,CAAX,EAAmC;AACjC,YAAA,CAAA,EAAA,GAAI,GAAG,KAAA,IAAH,IAAA,GAAG,KAAA,KAAA,CAAH,GAAG,KAAA,CAAH,GAAA,GAAG,CAAE,KAAT,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAG,WAAH,CAAd,EAA+B;AAC7B,gBAAM;AAAC,YAAA;AAAD,cAA8B,GAApC;AAAA,gBAAiB,eAAe,GAAA,mBAAI,GAAJ,EAA1B,CAAA,OAAA,CAA0B,CAAhC;AAEA,gBAAM,EAAA,GAAwC,KAA9C;AAAA,gBAAM;AAAC,YAAA;AAAD,cAAU,EAAhB;AAAA,gBAAqB,qBAAqB,GAAA,mBAAA,EAAA,EAApC,CAAA,WAAA,CAAoC,CAA1C;AACA,UAAA,UAAU,CAAC,QAAD,CAAV,GAAuB;AAAC,YAAA,IAAI,EAAE,KAAK,CAAC,WAAD;AAAZ,WAAvB;AAEA,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qBAArB;AAEA,UAAA,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,QADG,CAAA,EACK;AACX,aAAC,OAAD,GAAS,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACJ,eADI,CAAA,EAEH,mBAAQ,qBAAR,IAAiC,EAAjC,GAAsC;AAAC,cAAA,KAAK,EAAE;AAAR,aAFnC;AADE,WADL,CAAR;AAOD;AACF;AACF;;AACD,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,UADL,CAAA,EAEK,IAFL,CAAA,EAES;AACP,MAAA;AADO,KAFT,CAAA;AAKD;;AAhD6B;;;;;;;;;;;;;;ACZhC;;AACA;;AAgBA;;AACA;;AACA;;;;;;AAWM,SAAU,sBAAV,CACJ,KADI,EAEJ,QAFI,EAEmB;AAEvB,MAAI,CAAC,QAAL,EAAe;AACb,WAAO,KAAP;AACD;;AAED,MAAI,2BAAe,KAAf,CAAJ,EAA2B;AACzB,WAAO,wBAAwB,CAAC,KAAD,EAAQ,QAAR,CAA/B;AACD;;AACD,SAAO,yBAAyB,CAAC,KAAD,EAAQ,QAAR,CAAhC;AACD;;AAEK,SAAU,yBAAV,CACJ,QADI,EAEJ,QAFI,EAEmB;AAEvB,MAAI,CAAC,QAAL,EAAe;AACb,WAAO,QAAP;AACD;;AAED,SAAO,wBAAwB,CAAC,QAAD,EAAW,QAAX,CAA/B;AACD;AAED;;;;;AAGA,SAAS,mBAAT,CAAgC,IAAhC,EAA+C,CAA/C,EAAqD,QAArD,EAA4E;AAC1E,QAAM,GAAG,GAAG,CAAC,CAAC,IAAD,CAAb;;AACA,MAAI,6BAAY,GAAZ,CAAJ,EAAsB;AACpB,QAAI,GAAG,CAAC,MAAJ,IAAc,QAAlB,EAA4B;AAC1B,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,CAAX,CAAA,EAAY;AAAE,SAAC,IAAD,GAAQ,QAAQ,CAAC,GAAG,CAAC,MAAL;AAAlB,OAAZ,CAAA;AACD,KAFD,MAEO;AACL,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,GAAG,CAAC,MAApC,CAAT;AACA,aAAO,SAAP;AACD;AACF;;AACD,SAAO,CAAP;AACD;AAED;;;;;AAIA,SAAS,yBAAT,CAAmC,QAAnC,EAA8D,QAA9D,EAAqF;AACnF,EAAA,QAAQ,GAAG,mBAAmB,CAAC,OAAD,EAAU,QAAV,EAAoB,QAApB,CAA9B;;AAEA,MAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B;AACA,WAAO,SAAP;AACD,GAHD,MAGO,IAAI,QAAQ,KAAK,IAAjB,EAAuB;AAC5B,WAAO,IAAP;AACD;;AAED,MAAI,oCAAmB,QAAnB,KAAgC,uBAAY,QAAQ,CAAC,IAArB,CAApC,EAAgE;AAC9D,UAAM,IAAI,GAAG,mBAAmB,CAAC,OAAD,EAAU,QAAQ,CAAC,IAAnB,EAAyB,QAAzB,CAAhC;AACA,IAAA,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,QADG,CAAA,EAEF,IAAI,GAAG;AAAC,MAAA;AAAD,KAAH,GAAY,EAFd,CAAR;AAID;;AAED,SAAO,QAAP;AACD;;AAED,SAAS,gCAAT,CAA0C,GAA1C,EAAkF,QAAlF,EAAyG;AACvG,MAAI,4BAAW,GAAX,CAAJ,EAAqB;AACnB,WAAO,yBAAyB,CAAC,GAAD,EAAM,QAAN,CAAhC;AACD,GAFD,MAEO;AACL,UAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAD,EAAU,GAAV,EAAe,QAAf,CAApC;;AACA,QAAI,QAAQ,KAAK,GAAb,IAAoB,CAAC,QAAQ,CAAC,IAAlC,EAAwC;AACtC,MAAA,QAAQ,CAAC,IAAT,GAAgB,SAAhB;AACD;;AACD,WAAO,QAAP;AACD;AACF;;AAED,SAAS,2BAAT,CAAqC,UAArC,EAAoE,QAApE,EAA2F;AACzF,MAAI,mCAAkB,UAAlB,CAAJ,EAAmC;AACjC,UAAM,EAAE,GAAG,gCAAgC,CAAC,UAAD,EAAa,QAAb,CAA3C;;AACA,QAAI,EAAJ,EAAQ;AACN,aAAO,EAAP;AACD,KAFD,MAEO,IAAI,kCAAoC,UAApC,CAAJ,EAAqD;AAC1D,aAAO;AAAC,QAAA,SAAS,EAAE,UAAU,CAAC;AAAvB,OAAP;AACD;AACF,GAPD,MAOO;AACL,QAAI,+CAA8B,UAA9B,CAAJ,EAA+C;AAC7C,YAAM,EAAE,GAAG,gCAAgC,CAAC,UAAU,CAAC,SAAZ,EAAuB,QAAvB,CAA3C;;AACA,UAAI,EAAJ,EAAQ;AACN,eAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACF,UADE,CAAA,EACQ;AACb,UAAA,SAAS,EAAE;AADE,SADR,CAAP;AAID,OALD,MAKO;AACL,cAAM;AAAC,UAAA;AAAD,YAA6C,UAAnD;AAAA,cAAqB,0BAA0B,GAAA,mBAAI,UAAJ,EAAzC,CAAA,WAAA,CAAyC,CAA/C;AACA,eAAO,0BAAP;AACD;AACF;;AACD,WAAO,UAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAID,SAAS,wBAAT,CACE,OADF,EAEE,QAFF,EAEyB;AAEvB,QAAM,GAAG,GAA+B,EAAxC;;AACA,OAAK,MAAM,OAAX,IAAsB,OAAtB,EAA+B;AAC7B,QAAI,8BAAe,OAAf,EAAwB,OAAxB,CAAJ,EAAsC;AACpC,YAAM,UAAU,GAA4C,OAAO,CAAC,OAAD,CAAnE;;AAEA,UAAI,uBAAQ,UAAR,CAAJ,EAAyB;AACvB;AACA,QAAA,GAAG,CAAC,OAAD,CAAH,GAAgB,UAAkC,CAAC;AAAD,SAC/C,GADa,CACT,EAAE,IAAI,2BAA2B,CAAC,EAAD,EAAK,QAAL,CADxB,EAEb,MAFa,CAEN,EAAE,IAAI,EAFA,CAAhB;AAGD,OALD,MAKO;AACL,cAAM,EAAE,GAAG,2BAA2B,CAAC,UAAD,EAAa,QAAb,CAAtC;;AACA,YAAI,EAAE,KAAK,SAAX,EAAsB;AACpB,UAAA,GAAG,CAAC,OAAD,CAAH,GAAe,EAAf;AACD;AACF;AACF;AACF;;AACD,SAAO,GAAP;AACD;;;;;;;;;AC/JD;;AACA;;AACA;;AAEA;;AAEA;;;;;;AAaM,MAAO,2BAAP,CAAkC;AAAxC,EAAA,WAAA,GAAA;AACS,SAAA,IAAA,GAAO,mBAAP;AAiCR;;AA/BQ,EAAA,eAAe,CAAC,IAAD,EAAsC;AAC1D,QAAI,sBAAW,IAAX,CAAJ,EAAsB;AACpB,YAAM;AAAC,QAAA,QAAD;AAAW,QAAA;AAAX,UAAmB,IAAzB;;AACA,UAAI,IAAI,KAAK,MAAb,EAAqB;AACnB,aAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,gBAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB;AACA,gBAAM,cAAc,GAAG,QAAQ,CAAC,WAAD,CAA/B;;AAEA,cAAI,QAAQ,CAAC,OAAD,CAAZ,EAAuB;AACrB,gBAAK,4BAAW,cAAX,KAA8B,CAAC,mBAAS,cAAc,CAAC,GAAxB,CAAhC,IAAiE,4BAAW,cAAX,CAArE,EAAiG;AAC/F,qBAAO,IAAP;AACD;AACF;AACF;AACF;AACF;;AACD,WAAO,KAAP;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAuB,MAAvB,EAAiD,SAAjD,EAAgF;AACxF,UAAM;AAAC,MAAA;AAAD,QAAa,IAAnB;AACA,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,CAAC,CAAC,QAAQ,CAAC,EAArC,EAAyC,CAAC,CAAC,QAAQ,CAAC,EAApD,CAAT;AAEA,WAAO,SAAS,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAET,IAFS,CAAA,EAEL;AACP,MAAA,IAAI,EAAE;AADC,KAFK,CAAA,EAKd,MALc,CAAhB;AAOD;;AAjCqC;;;;;;;;;;;;;ACnBxC;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AAUA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEM,MAAO,cAAP,SAA8B,eAA9B,CAAsF;AAA5F,EAAA,WAAA,GAAA;;AACU,SAAA,uBAAA,GAAyD,CAC/D,0BAD+D,EAE/D,4BAF+D,EAG/D,8BAH+D,EAI/D,IAAI,kCAAJ,EAJ+D,EAK/D,IAAI,8CAAJ,EAL+D,EAM/D,IAAI,8BAAJ,EAN+D,CAAzD;AAoST;;AA3RQ,EAAA,GAAG,CAAC,IAAD,EAAmE,MAAnE,EAA2F;AACnG;AACA,QAAI,sBAAW,IAAX,CAAJ,EAAsB;AACpB,YAAM,MAAM,GAAG,+BAAgB,IAAI,CAAC,QAArB,EAA+B,YAA/B,CAAf;AACA,YAAM,SAAS,GAAG,+BAAgB,IAAI,CAAC,QAArB,EAA+B,eAA/B,CAAlB;AACA,YAAM,QAAQ,GAAG,+BAAgB,IAAI,CAAC,QAArB,EAA+B,cAA/B,CAAjB;;AAEA,UAAI,MAAM,IAAI,SAAV,IAAuB,QAA3B,EAAqC;AACnC,eAAO,KAAK,cAAL,CAAoB,IAApB,EAA0B,MAA1B,CAAP;AACD;AACF;;AAED,WAAO,MAAM,GAAN,CAAU,IAAV,EAAgB,MAAhB,CAAP;AACD,GAvByF,CAyB1F;;;AACO,EAAA,OAAO,CAAC,IAAD,EAAiB,MAAjB,EAAyC;AACrD,UAAM;AAAC,MAAA,cAAD;AAAiB,MAAA;AAAjB,QAAqC,MAA3C;AAEA,UAAM,wBAAwB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IADyB,CAAA,EACrB;AACP,MAAA,QAAQ,EAAE,yCAA0B,IAAI,CAAC,QAA/B,EAAyC,MAAM,CAAC,QAAhD;AADH,KADqB,CAA9B;;AAKA,QAAI,cAAc,IAAI,gBAAtB,EAAwC;AACtC,aAAO,KAAK,qCAAL,CAA2C,wBAA3C,EAAqE,MAArE,CAAP;AACD;;AAED,UAAM,oBAAoB,GAAG,KAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB,CAA7B;;AAEA,SAAK,MAAM,cAAX,IAA6B,KAAK,uBAAlC,EAA2D;AACzD,UAAI,cAAc,CAAC,eAAf,CAA+B,wBAA/B,EAAyD,MAAM,CAAC,MAAhE,CAAJ,EAA6E;AAC3E,eAAO,cAAc,CAAC,GAAf,CAAmB,wBAAnB,EAA6C,MAA7C,EAAqD,oBAArD,CAAP;AACD;AACF;;AAED,WAAO,wBAAP;AACD;;AAES,EAAA,SAAS,CACjB,IADiB,EAEjB,MAFiB,EAEO;AAExB,QAAI,+BAAkB,IAAlB,CAAJ,EAA6B;AAC3B,aAAO,KAAK,cAAL,CAAoB,IAApB,EAA0B,MAA1B,CAAP;AACD,KAFD,MAEO;AACL,aAAO,KAAK,iBAAL,CAAuB,IAAvB,EAA6B,MAA7B,CAAP;AACD;AACF;;AAEO,EAAA,cAAc,CACpB,IADoB,EAEpB,MAFoB,EAEI;AAExB,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,IAAI,EAAE;AAAf,QAAqC,IAA3C;AAAA,UAAmC,IAAI,GAAA,mBAAI,IAAJ,EAAjC,CAAA,QAAA,EAAA,MAAA,CAAiC,CAAvC;AACA,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA,MAAN;AAAc,MAAA;AAAd,QAAuB,MAA7B;AAEA,UAAM;AAAC,MAAA,QAAQ,GAAG,EAAZ;AAAgB,MAAA,cAAc,GAAG;AAAjC,QAAuC,MAA7C;;AAEA,QAAI,GAAG,IAAI,MAAX,EAAmB;AACjB,aAAO,KAAK,SAAL,CAAc,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEd,IAFc,CAAA,EAEV;AACP,QAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACA,GAAG,GAAG;AAAC,UAAA;AAAD,SAAH,GAAW,EADd,CAAA,EAEA,MAAM,GAAG;AAAC,UAAA;AAAD,SAAH,GAAc,EAFpB,CADC;AAKP,QAAA,IAAI,EAAE;AACJ,UAAA,MAAM,EAAE;AAAC,YAAA;AAAD,WADJ;AAEJ,UAAA,IAAI,EAAE;AAFF;AALC,OAFU,CAAd,EAYL,MAZK,CAAP;AAcD,KAfD,MAeO;AACL,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EACS;AACP,QAAA,KAAK,EAAE,KAAK,CAAC,GAAN,CAAU,UAAU,IAAG;AAC5B,gBAAM,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACd,QADc,CAAA,EACN;AACX,YAAA,KAAK,EAAE;AADI,WADM,CAAnB;AAKA,gBAAM,SAAS,GAAG,CAAC,SAAS,CAAC,IAAV,IAAkB,EAAnB,IAAyB,cAAzB,GAA0C,gBAAgB,mBAAQ,UAAR,CAAmB,EAA/F;AAEA,gBAAM,KAAK,GAAG,KAAK,cAAL,CAAoB,SAApB,EAA6B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,MAAN,CAAA,EAAY;AAAE,YAAA,QAAQ,EAAE,aAAZ;AAA2B,YAAA,cAAc,EAAE;AAA3C,WAAZ,CAA7B,CAAd;AACA,UAAA,KAAK,CAAC,IAAN,GAAa,SAAb;AAEA,iBAAO,KAAP;AACD,SAZM;AADA,OADT,CAAA;AAgBD;AACF;;AAEO,EAAA,iBAAiB,CAAC,IAAD,EAA2B,MAA3B,EAAmD;;;AAC1E,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,IAAI,EAAE,SAAf;AAA0B,MAAA;AAA1B,QAA0D,IAAhE;AAAA,UAAyC,mBAAmB,GAAA,mBAAI,IAAJ,EAAtD,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,CAAsD,CAA5D;;AAEA,QAAI,CAAC,uBAAQ,MAAR,CAAD,IAAoB,IAAI,CAAC,OAA7B,EAAsC;AACpC;AACA,MAAA,IAAI,GAAG,gBAAK,IAAL,EAAW,CAAC,SAAD,CAAX,CAAP;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,yBAAZ,CAAsC,QAAtC,CAAT;AACD;;AAED,UAAM,MAAM,GAAqB,EAAjC;AAEA,UAAM;AAAC,MAAA,QAAQ,GAAG,EAAZ;AAAgB,MAAA,cAAc,GAAG;AAAjC,QAAuC,MAA7C;AAEA,UAAM,GAAG,GAAI,CAAC,uBAAQ,MAAR,CAAD,IAAoB,MAAM,CAAC,GAA5B,IAAoC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAZ,GAAkB,IAA3B,CAAhD;AACA,UAAM,MAAM,GAAI,CAAC,uBAAQ,MAAR,CAAD,IAAoB,MAAM,CAAC,MAA5B,IAAuC,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAZ,GAAqB,IAA9B,CAAtD;AAEA,UAAM,YAAY,GAAI,uBAAQ,MAAR,KAAmB,MAApB,IAA+B,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAZ,GAAqB,IAA9B,CAApD,CAhB0E,CAkB1E;;AACA,SAAK,MAAM,WAAX,IAA0B,YAA1B,EAAwC;AACtC,WAAK,MAAM,QAAX,IAAuB,GAAvB,EAA4B;AAC1B,aAAK,MAAM,WAAX,IAA0B,MAA1B,EAAkC;AAChC,gBAAM,aAAa,GAAG;AACpB,YAAA,MAAM,EAAE,WADY;AAEpB,YAAA,GAAG,EAAE,QAFe;AAGpB,YAAA,MAAM,EAAE,WAHY;AAIpB,YAAA,KAAK,EAAE,QAAQ,CAAC;AAJI,WAAtB;AAOA,gBAAM,SAAS,GACb,CAAC,SAAS,CAAC,IAAV,IAAkB,EAAnB,IACA,cADA,GAEA,SAFA,IAGC,uBAAQ,MAAR,IACG,GAAG,mBAAQ,WAAR,CAAoB,EAD1B,GAEG,CAAC,MAAM,CAAC,GAAP,GAAa,OAAO,mBAAQ,QAAR,CAAiB,EAArC,GAA0C,EAA3C,KACC,MAAM,CAAC,MAAP,GAAgB,UAAU,mBAAQ,WAAR,CAAoB,EAA9C,GAAmD,EADpD,CALJ,CADF;AASA,gBAAM,KAAK,GAAG,KAAK,GAAL,CAAS,SAAT,EAAkB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,MAAN,CAAA,EAAY;AAAE,YAAA,QAAQ,EAAE,aAAZ;AAA2B,YAAA,cAAc,EAAE;AAA3C,WAAZ,CAAlB,CAAd;AACA,UAAA,KAAK,CAAC,IAAN,GAAa,SAAb,CAlBgC,CAoBhC;;AACA,UAAA,MAAM,CAAC,IAAP,CAAY,gBAAK,KAAL,EAAY,CAAC,MAAD,CAAZ,CAAZ;AACD;AACF;AACF;;AAED,UAAM,OAAO,GAAG,uBAAQ,MAAR,IAAkB,IAAI,CAAC,OAAvB,GAAiC,MAAM,CAAC,MAAP,GAAgB,MAAM,CAAC,MAAP,CAAc,MAA9B,GAAuC,CAAxF;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAA,CAAA,EAAA,GAAE,SAAS,CAAC,IAAZ,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,IAD1B;AAEE,MAAA,KAAK,EAAE;AAFT,KAAA,EAGK,mBAHL,CAAA,EAGwB;AACtB,MAAA,OADsB;AAEtB,MAAA;AAFsB,KAHxB,CAAA;AAOD;;AAES,EAAA,QAAQ,CAChB,IADgB,EAEhB,MAFgB,EAEQ;AAExB,UAAM;AAAC,MAAA;AAAD,QAAU,IAAhB;;AAEA,QAAI,2BAAe,KAAf,KAAyB,IAAI,CAAC,OAAlC,EAA2C;AACzC;AACA,MAAA,IAAI,GAAG,gBAAK,IAAL,EAAW,CAAC,SAAD,CAAX,CAAP;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,yBAAZ,CAAsC,OAAtC,CAAT;AACD;;AAED,WAAO,MAAM,QAAN,CAAe,IAAf,EAAqB,MAArB,CAAP;AACD;;AAEO,EAAA,qCAAqC,CAC3C,IAD2C,EAE3C,MAF2C,EAEnB;AAExB,UAAM;AAAC,MAAA,QAAD;AAAW,MAAA;AAAX,QAAyB,IAA/B;AACA,UAAM;AAAC,MAAA,cAAD;AAAiB,MAAA,gBAAjB;AAAmC,MAAA;AAAnC,QAA6C,MAAnD;AACA,UAAM,gBAAgB,GAAG,eAAe,CAAC;AAAC,MAAA,gBAAD;AAAmB,MAAA;AAAnB,KAAD,CAAxC;AACA,UAAM,cAAc,GAAG,aAAa,CAAC;AACnC,MAAA,cADmC;AAEnC,MAAA,QAAQ,EAAE,yCAA0B,QAA1B,EAAoC,MAAM,CAAC,QAA3C;AAFyB,KAAD,CAApC;AAKA,WAAO,KAAK,OAAL,CAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEZ,IAFY,CAAA,EAGX,gBAAgB,GAAG;AAAC,MAAA,UAAU,EAAE;AAAb,KAAH,GAAoC,EAHzC,CAAA,EAIX,cAAc,GAAG;AAAC,MAAA,QAAQ,EAAE;AAAX,KAAH,GAAgC,EAJnC,CAAZ,EAML;AAAC,MAAA;AAAD,KANK,CAAP;AAQD;;AAEO,EAAA,cAAc,CAAC,IAAD,EAAwB,MAAxB,EAAgD;AACpE;AACA;AACA,UAAM,EAAA,GAAoC,IAAI,CAAC,QAA/C;AAAA,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA,MAAN;AAAc,MAAA;AAAd,QAAmB,EAAzB;AAAA,UAA8B,QAAQ,GAAA,mBAAA,EAAA,EAAhC,CAAA,KAAA,EAAA,QAAA,EAAA,OAAA,CAAgC,CAAtC,CAHoE,CAKpE;;AACA,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA,KAAP;AAAc,MAAA,UAAd;AAA0B,MAAA,MAA1B;AAAkC,MAAA,IAAlC;AAAwC,MAAA,SAAxC;AAAmD,MAAA,QAAQ,EAAE;AAA7D,QAAgF,IAAtF;AAAA,UAAyE,SAAS,GAAA,mBAAI,IAAJ,EAA5E,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,CAA4E,CAAlF;AAEA,UAAM;AAAC,MAAA,YAAD;AAAe,MAAA;AAAf,QAAyB,KAAK,wBAAL,CAA8B;AAAC,MAAA,GAAD;AAAM,MAAA,MAAN;AAAc,MAAA;AAAd,KAA9B,EAAoD,MAApD,CAA/B;AAEA,UAAM,WAAW,GAAG,yCAA0B,QAA1B,EAAoC,MAAM,CAAC,QAA3C,CAApB;AAEA,WAAO,KAAK,QAAL,CAAa,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEb,SAFa,CAAA,EAGb,MAHa,CAAA,EAGP;AAET;AACA,MAAA,KAAK,EAAE,YAHE;AAIT,MAAA,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACE,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EADpB,CAAA,EAEE,MAAM,GAAG;AAAC,QAAA;AAAD,OAAH,GAAc,EAFtB,CAAA,EAGE,IAAI,GAAG;AAAC,QAAA;AAAD,OAAH,GAAY,EAHlB,CAAA,EAIE,UAAU,GAAG;AAAC,QAAA;AAAD,OAAH,GAAkB,EAJ9B,CAAA,EAIiC;AACnC,QAAA,IADmC;AAEnC,QAAA,QAAQ,EAAE;AAFyB,OAJjC,CAAA,EAOE,SAAS,GAAG;AAAC,QAAA;AAAD,OAAH,GAAiB,EAP5B;AAJK,KAHO,CAAb,EAiBL,MAjBK,CAAP;AAmBD;;AAEO,EAAA,wBAAwB,CAC9B,MAD8B,EAM9B,MAN8B,EAMN;;;AAExB,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA,MAAN;AAAc,MAAA;AAAd,QAAuB,MAA7B;;AAEA,QAAI,GAAG,IAAI,MAAX,EAAmB;AACjB,UAAI,KAAJ,EAAW;AACT,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,CAAC,IAAI,GAAG,GAAG,CAAC,YAAD,CAAH,GAAW,EAAlB,CAAD,EAAwB,IAAI,MAAM,GAAG,CAAC,eAAD,CAAH,GAAc,EAAxB,CAAxB,CAAhC,CAAT;AACD;;AAED,YAAM,YAAY,GAAG,EAArB;AACA,YAAM,MAAM,GAAG,EAAf;;AAEA,WAAK,MAAM,OAAX,IAAsB,CAAC,YAAD,EAAM,eAAN,CAAtB,EAAqC;AACnC,cAAM,GAAG,GAAG,MAAM,CAAC,OAAD,CAAlB;;AACA,YAAI,GAAJ,EAAS;AACP,gBAAM;AAAC,YAAA,KAAD;AAAQ,YAAA,MAAR;AAAgB,YAAA,OAAhB;AAAyB,YAAA;AAAzB,cAAyD,GAA/D;AAAA,gBAA2C,gBAAgB,GAAA,mBAAI,GAAJ,EAArD,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAqD,CAA3D;AACA,UAAA,YAAY,CAAC,OAAD,CAAZ,GAAwB,gBAAxB;;AAEA,eAAK,MAAM,IAAX,IAAmB,CAAC,OAAD,EAAU,QAAV,EAAoB,SAApB,CAAnB,EAA4D;AAC1D,gBAAI,GAAG,CAAC,IAAD,CAAH,KAAc,SAAlB,EAA6B;AAC3B,cAAA,MAAM,CAAC,IAAD,CAAN,GAAY,CAAA,EAAA,GAAG,MAAM,CAAC,IAAD,CAAT,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,EAA/B;AACA,cAAA,MAAM,CAAC,IAAD,CAAN,CAAa,OAAb,IAAwB,GAAG,CAAC,IAAD,CAA3B;AACD;AACF;AACF;AACF;;AAED,aAAO;AAAC,QAAA,YAAD;AAAe,QAAA;AAAf,OAAP;AACD,KAxBD,MAwBO;AACL,YAAM;AAAC,QAAA,KAAD;AAAQ,QAAA,MAAR;AAAgB,QAAA,OAAhB;AAAyB,QAAA;AAAzB,UAAqD,KAA3D;AAAA,YAA2C,YAAY,GAAA,mBAAI,KAAJ,EAAjD,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAiD,CAAvD;AACA,aAAO;AACL,QAAA,YAAY,EAAE,sCAAuB,YAAvB,EAAqC,MAAM,CAAC,QAA5C,CADT;AAEL,QAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACA,KAAK,GAAG;AAAC,UAAA;AAAD,SAAH,GAAa,EADlB,CAAA,EAEA,MAAM,GAAG;AAAC,UAAA;AAAD,SAAH,GAAc,EAFpB,CAAA,EAGA,OAAO,GAAG;AAAC,UAAA;AAAD,SAAH,GAAe,EAHtB,CAAA,EAIA,OAAO,GAAG;AAAC,UAAA;AAAD,SAAH,GAAe,EAJtB;AAFD,OAAP;AASD;AACF;;AAEM,EAAA,QAAQ,CACb,IADa,EAEb,EAFa,EAEuD;AAEpE;QAFA;AAAC,MAAA,cAAD;AAAiB,MAAA;AAAjB,QAAiC;QAAK,WAAW,GAAA,mBAAA,EAAA,EAAjD,CAAA,gBAAA,EAAA,kBAAA,CAAiD;AAIjD,UAAM;AAAC,MAAA,QAAD;AAAW,MAAA;AAAX,QAAkC,IAAxC;AAAA,UAAgC,IAAI,GAAA,mBAAI,IAAJ,EAA9B,CAAA,UAAA,EAAA,YAAA,CAA8B,CAApC;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACP,WADO,CAAA,EACI;AACd,MAAA,cAAc,EAAE,aAAa,CAAC;AAAC,QAAA,cAAD;AAAiB,QAAA;AAAjB,OAAD,CADf;AAEd,MAAA,gBAAgB,EAAE,eAAe,CAAC;AAAC,QAAA,gBAAD;AAAmB,QAAA;AAAnB,OAAD;AAFnB,KADJ,CAAZ;AAKA,WAAO,MAAM,QAAN,CAAe,IAAf,EAAqB,MAArB,CAAP;AACD;;AApSyF;;;;AAuS5F,SAAS,aAAT,CAAuB,GAAvB,EAAoF;AAClF,QAAM;AAAC,IAAA,cAAD;AAAiB,IAAA;AAAjB,MAA6B,GAAnC;;AACA,MAAI,cAAc,IAAI,QAAtB,EAAgC;AAC9B,UAAM,SAAS,GAAG,gBAAK,cAAL,EAAqB,MAArB,CAA4B,CAAC,CAAD,EAAI,GAAJ,KAAW;AACvD,UAAI,QAAQ,CAAC,GAAD,CAAZ,EAAmB;AACjB,QAAA,CAAC,CAAC,IAAF,CAAO,GAAP;AACD;;AACD,aAAO,CAAP;AACD,KALiB,EAKf,EALe,CAAlB;;AAOA,QAAI,SAAS,CAAC,MAAV,GAAmB,CAAvB,EAA0B;AACxB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kBAAZ,CAA+B,SAA/B,CAAT;AACD;AACF;;AAED,QAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAA,cAAA,GAAkB,EADZ,CAAA,EAEN,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAA,QAAA,GAAY,EAFN,CAAZ;AAIA,SAAO,mBAAQ,MAAR,IAAkB,SAAlB,GAA8B,MAArC;AACD;;AAED,SAAS,eAAT,CAAyB,GAAzB,EAAoF;AAClF,QAAM;AAAC,IAAA,gBAAD;AAAmB,IAAA;AAAnB,MAAiC,GAAvC;;AACA,MAAI,gBAAgB,IAAI,UAAxB,EAAoC;AAClC,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,oBAAZ,CAAiC;AAAC,MAAA,gBAAD;AAAmB,MAAA;AAAnB,KAAjC,CAAT;AACD;;AACD,SAAO,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAA,UAAA,GAAc,gBAArB;AACD;;;;;;;;;;AClWD;;AACA;;AACA;;AACA;;AAaA;;AAEA;;;;;;AAEM,SAAU,SAAV,CACJ,IADI,EAEJ,MAFI,EAEW;AAEf,MAAI,MAAM,KAAK,SAAf,EAA0B;AACxB,IAAA,MAAM,GAAG,wBAAW,IAAI,CAAC,MAAhB,CAAT;AACD;;AAED,QAAM,cAAc,GAAG,oBAAoB,CAAC,IAAD,EAAO,MAAP,CAA3C;AAEA,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,MAAkB,IAAxB;AACA,QAAM,QAAQ,GAAG,iBAAiB,CAAC,cAAD,EAAiB;AAAC,IAAA,KAAD;AAAQ,IAAA,MAAR;AAAgB,IAAA,QAAQ,EAAE,IAAI,CAAC;AAA/B,GAAjB,EAA2D,MAA3D,CAAlC;AAEA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,cADL,CAAA,EAEM,QAAQ,GAAG;AAAC,IAAA;AAAD,GAAH,GAAgB,EAF9B,CAAA;AAID;;AAED,MAAM,UAAU,GAAG,IAAI,oBAAJ,EAAnB;AAEA;;;;AAGA,SAAS,oBAAT,CACE,IADF,EAEE,MAAA,GAAiB,EAFnB,EAEqB;AAEnB,SAAO,UAAU,CAAC,GAAX,CAAe,IAAf,EAAqB;AAAC,IAAA;AAAD,GAArB,CAAP;AACD;;AAED,SAAS,kBAAT,CAA4B,QAA5B,EAAmE;AACjE,SAAO,wBAAS,QAAT,IAAqB;AAAC,IAAA,IAAI,EAAE;AAAP,GAArB,GAAwC,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAA,QAAA,GAAY,EAA3D;AACD;AAED;;;;;AAGM,SAAU,iBAAV,CACJ,IADI,EAEJ,QAFI,EAGJ,MAHI,EAGW;AAEf,MAAI;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,MAAkB,QAAtB;AAEA,QAAM,eAAe,GAAG,sBAAW,IAAX,KAAoB,uBAAY,IAAZ,CAA5C;AACA,QAAM,eAAe,GAAmB,EAAxC;;AAEA,MAAI,CAAC,eAAL,EAAsB;AACpB;AACA,QAAI,KAAK,IAAI,WAAb,EAA0B;AACxB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sBAAZ,CAAmC,OAAnC,CAAT;AACA,MAAA,KAAK,GAAG,SAAR;AACD;;AACD,QAAI,MAAM,IAAI,WAAd,EAA2B;AACzB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sBAAZ,CAAmC,QAAnC,CAAT;AACA,MAAA,MAAM,GAAG,SAAT;AACD;AACF,GAVD,MAUO;AACL;AACA,QAAI,KAAK,IAAI,WAAT,IAAwB,MAAM,IAAI,WAAtC,EAAmD;AACjD,MAAA,eAAe,CAAC,IAAhB,GAAuB,KAAvB;AACA,MAAA,eAAe,CAAC,QAAhB,GAA2B,SAA3B;AACD,KAHD,MAGO,IAAI,KAAK,IAAI,WAAb,EAA0B;AAC/B,MAAA,eAAe,CAAC,IAAhB,GAAuB,OAAvB;AACA,MAAA,eAAe,CAAC,QAAhB,GAA2B,SAA3B;AACD,KAHM,MAGA,IAAI,MAAM,IAAI,WAAd,EAA2B;AAChC,MAAA,eAAe,CAAC,IAAhB,GAAuB,OAAvB;AACA,MAAA,eAAe,CAAC,QAAhB,GAA2B,SAA3B;AACD;AACF;;AAED,QAAM,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACZ,IAAA,IAAI,EAAE;AADM,GAAA,EAET,eAFS,CAAA,EAGR,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAR,CAArB,GAAyC,EAHvC,CAAA,EAIT,kBAAkB,CAAC,IAAI,CAAC,QAAN,CAJT,CAAd;;AAOA,MAAI,QAAQ,CAAC,IAAT,KAAkB,KAAlB,IAA2B,CAAC,eAAhC,EAAiD;AAC/C,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,cAArB;AACA,IAAA,QAAQ,CAAC,IAAT,GAAgB,KAAhB;AACD;;AAED,MAAI,KAAK,IAAI,WAAT,IAAwB,EAAE,QAAQ,CAAC,IAAT,IAAiB,KAAjB,IAA0B,QAAQ,CAAC,IAAT,IAAiB,OAA7C,CAA5B,EAAmF;AACjF,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sCAAZ,CAAmD,OAAnD,CAAT;AACD;;AACD,MAAI,MAAM,IAAI,WAAV,IAAyB,EAAE,QAAQ,CAAC,IAAT,IAAiB,KAAjB,IAA0B,QAAQ,CAAC,IAAT,IAAiB,OAA7C,CAA7B,EAAoF;AAClF,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sCAAZ,CAAmD,QAAnD,CAAT;AACD,GAhDc,CAkDf;;;AACA,MAAI,qBAAU,QAAV,EAAoB;AAAC,IAAA,IAAI,EAAE;AAAP,GAApB,CAAJ,EAAwC;AACtC,WAAO,SAAP;AACD;;AAED,SAAO,QAAP;AACD;;;;;;;;;;;ACpHD;;AAiEM,SAAU,SAAV,CAAoB,YAApB,EAA8C;AAClD,SAAO,YAAY,KAAK,KAAjB,IAA0B,YAAY,KAAK,OAA3C,IAAsD,YAAY,KAAK,OAA9E;AACD;;AAEK,SAAU,UAAV,CAAqB,QAArB,EAAkD;AACtD,SAAO,QAAQ,GAAI,OAAO,sCAAwB,QAAxB,CAAiC,EAA5C,GAA6D,KAA5E;AACD;;AA2BD,MAAM,oBAAoB,GAAiC,CACzD,YADyD,EAEzD,SAFyD,CAGzD;AAHyD,CAA3D;;AAMM,SAAU,yBAAV,CAAkE,CAAlE,EAAsE;AAC1E,SAAO,oBAAoB,CAAC,MAArB,CAA4B,CAAC,CAAD,EAAI,CAAJ,KAAS;AAC1C,QAAI,CAAC,IAAI,CAAC,CAAC,CAAD,CAAD,KAAS,SAAlB,EAA6B;AAC3B,MAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAC,CAAC,CAAD,CAAR;AACD;;AACD,WAAO,CAAP;AACD,GALM,EAKJ,EALI,CAAP;AAMD;;;;;;;;;;;;;;ACjHD;;AACA;;;;;;AAEA;;;;;;AAMM,MAAO,KAAP,CAAY;AAChB,EAAA,WAAA,CAA4B,QAAA,GAAuB,EAAnD,EAAuE,QAAA,GAAuB,EAA9F,EAAgG;AAApE,SAAA,QAAA,GAAA,QAAA;AAA2C,SAAA,QAAA,GAAA,QAAA;AAA6B;;AAE7F,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,KAAJ,CAAU,qBAAU,KAAK,QAAf,CAAV,EAAoC,qBAAU,KAAK,QAAf,CAApC,CAAP;AACD;;AAEM,EAAA,OAAO,GAAA;AACZ;AACA;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,KAAK,QADX,CAAA,EAEM,KAAK,QAFX,CAAA;AAID;;AAEM,EAAA,GAAG,CAAoB,GAApB,EAA0B;AAClC;AACA,WAAO,2BAAgB,KAAK,QAAL,CAAc,GAAd,CAAhB,EAAoC,KAAK,QAAL,CAAc,GAAd,CAApC,CAAP;AACD;;AAEM,EAAA,eAAe,CAAoB,GAApB,EAA0B;AAC9C;AACA,QAAI,KAAK,QAAL,CAAc,GAAd,MAAuB,SAA3B,EAAsC;AACpC,aAAO;AAAC,QAAA,QAAQ,EAAE,IAAX;AAAiB,QAAA,KAAK,EAAE,KAAK,QAAL,CAAc,GAAd;AAAxB,OAAP;AACD,KAFD,MAEO,IAAI,KAAK,QAAL,CAAc,GAAd,MAAuB,SAA3B,EAAsC;AAC3C,aAAO;AAAC,QAAA,QAAQ,EAAE,KAAX;AAAkB,QAAA,KAAK,EAAE,KAAK,QAAL,CAAc,GAAd;AAAzB,OAAP;AACD;;AACD,WAAO;AAAC,MAAA,QAAQ,EAAE,KAAX;AAAkB,MAAA,KAAK,EAAE;AAAzB,KAAP;AACD;;AAEM,EAAA,eAAe,CAAoB,GAApB,EAA4B,KAA5B,EAAiD;AACrE,QAAI,KAAK,CAAC,KAAN,KAAgB,SAApB,EAA+B;AAC7B,WAAK,GAAL,CAAS,GAAT,EAAc,KAAK,CAAC,KAApB,EAA2B,KAAK,CAAC,QAAjC;AACD;AACF;;AAEM,EAAA,GAAG,CAAoB,GAApB,EAA4B,KAA5B,EAAyC,QAAzC,EAA0D;AAClE,WAAO,KAAK,QAAQ,GAAG,UAAH,GAAgB,UAA7B,EAAyC,GAAzC,CAAP;AACA,SAAK,QAAQ,GAAG,UAAH,GAAgB,UAA7B,EAAyC,GAAzC,IAAgD,KAAhD;AACA,WAAO,IAAP;AACD;;AAEM,EAAA,gBAAgB,CAAc,GAAd,EAA4B,CAA5B,EAAuC;AAC5D;AACA,QAAI,CAAC,CAAC,QAAF,CAAW,GAAX,MAAoB,SAAxB,EAAmC;AACjC,WAAK,GAAL,CAAS,GAAT,EAAc,CAAC,CAAC,QAAF,CAAW,GAAX,CAAd,EAA+B,IAA/B;AACD,KAFD,MAEO,IAAI,CAAC,CAAC,QAAF,CAAW,GAAX,MAAoB,SAAxB,EAAmC;AACxC,WAAK,GAAL,CAAS,GAAT,EAAc,CAAC,CAAC,QAAF,CAAW,GAAX,CAAd,EAA+B,KAA/B;AACD;AACF;;AACM,EAAA,iBAAiB,CAAc,GAAd,EAA4B,CAA5B,EAAyC;AAC/D;AACA,QAAI,CAAC,CAAC,GAAD,CAAD,KAAW,SAAf,EAA0B;AACxB,WAAK,GAAL,CAAS,GAAT,EAAc,CAAC,CAAC,GAAD,CAAf,EAAsB,IAAtB;AACD;AACF;AAED;;;;;;AAIO,EAAA,OAAO,CAAC,KAAD,EAAgB;AAC5B,SAAK,MAAM,GAAX,IAAkB,gBAAK,KAAK,CAAC,OAAN,EAAL,CAAlB,EAAyC;AACvC,YAAM,GAAG,GAAG,KAAK,CAAC,eAAN,CAAsB,GAAtB,CAAZ;AACA,WAAK,eAAL,CAAqB,GAArB,EAA0B,GAA1B;AACD;AACF;;AAnEe;;;;AA2EZ,SAAU,YAAV,CAA0B,KAA1B,EAAkC;AACtC,SAAO;AACL,IAAA,QAAQ,EAAE,IADL;AAEL,IAAA;AAFK,GAAP;AAID;;AAEK,SAAU,YAAV,CAA0B,KAA1B,EAAkC;AACtC,SAAO;AACL,IAAA,QAAQ,EAAE,KADL;AAEL,IAAA;AAFK,GAAP;AAID;;AAIK,SAAU,mBAAV,CAAoC,OAApC,EAAqE;AACzE,SAAO,CACL,EADK,EAEL,EAFK,EAGL,QAHK,EAIL,UAJK,KAKU;AACf,UAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,KAAJ,EAAW,EAAE,CAAC,KAAd,CAApB;;AACA,QAAI,IAAI,GAAG,CAAX,EAAc;AACZ,aAAO,EAAP;AACD,KAFD,MAEO,IAAI,IAAI,GAAG,CAAX,EAAc;AACnB,aAAO,EAAP;AACD;;AACD,WAAO,iBAAiB,CAAO,EAAP,EAAW,EAAX,EAAe,QAAf,EAAyB,UAAzB,CAAxB;AACD,GAbD;AAcD;;AAEK,SAAU,iBAAV,CACJ,EADI,EAEJ,EAFI,EAGJ,QAHI,EAIJ,UAJI,EAI2B;AAE/B,MAAI,EAAE,CAAC,QAAH,IAAe,EAAE,CAAC,QAAtB,EAAgC;AAC9B,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,wBAAZ,CAAqC,QAArC,EAA+C,UAA/C,EAA2D,EAAE,CAAC,KAA9D,EAAqE,EAAE,CAAC,KAAxE,CAAT;AACD,GAJ8B,CAK/B;;;AACA,SAAO,EAAP;AACD;;AAEK,SAAU,uBAAV,CACJ,EADI,EAEJ,EAFI,EAGJ,QAHI,EAIJ,UAJI,EAKJ,UAAA,GAKmB,iBAVf,EAUgC;AAEpC,MAAI,EAAE,KAAK,SAAP,IAAoB,EAAE,CAAC,KAAH,KAAa,SAArC,EAAgD;AAC9C;AACA,WAAO,EAAP;AACD;;AAED,MAAI,EAAE,CAAC,QAAH,IAAe,CAAC,EAAE,CAAC,QAAvB,EAAiC;AAC/B,WAAO,EAAP;AACD,GAFD,MAEO,IAAI,EAAE,CAAC,QAAH,IAAe,CAAC,EAAE,CAAC,QAAvB,EAAiC;AACtC,WAAO,EAAP;AACD,GAFM,MAEA,IAAI,qBAAU,EAAE,CAAC,KAAb,EAAoB,EAAE,CAAC,KAAvB,CAAJ,EAAmC;AACxC,WAAO,EAAP;AACD,GAFM,MAEA;AACL,WAAO,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,QAAT,EAAmB,UAAnB,CAAjB;AACD;AACF;;;;;;;;;AC1JD;;AAkDA;;;;;AAKM,MAAO,aAAP,SAA6B,YAA7B,CAAyC;AAC7C,EAAA,WAAA,CACkB,QAAA,GAA2B,EAD7C,EAEkB,QAAA,GAA2B,EAF7C,EAGS,YAAA,GAAe,KAHxB,EAG6B;AAE3B,UAAM,QAAN,EAAgB,QAAhB;AAJgB,SAAA,QAAA,GAAA,QAAA;AACA,SAAA,QAAA,GAAA,QAAA;AACT,SAAA,YAAA,GAAA,YAAA;AAGR;;AAEM,EAAA,KAAK,GAAA;AACV,UAAM,KAAK,GAAG,MAAM,KAAN,EAAd;AACA,IAAA,KAAK,CAAC,YAAN,GAAqB,KAAK,YAA1B;AACA,WAAO,KAAP;AACD;;AAb4C;;;;;;;;;;;;;;;;;;ACiEzC,SAAU,SAAV,CAAoB,IAApB,EAAyD;AAC7D,SAAO,SAAS,IAAhB;AACD;;AAEK,SAAU,YAAV,CAAuB,IAAvB,EAA4D;AAChE,SAAO,YAAY,IAAnB;AACD;;AAEK,SAAU,WAAV,CAAsB,IAAtB,EAA2D;AAC/D,SAAO,UAAU,IAAV,IAAkB,CAAC,SAAS,CAAC,IAAD,CAA5B,IAAsC,CAAC,YAAY,CAAC,IAAD,CAAnD,IAA6D,CAAC,WAAW,CAAC,IAAD,CAAhF;AACD;;AAEK,SAAU,WAAV,CAAsB,IAAtB,EAA2D;AAC/D,SAAO,IAAI,KAAK,mBAAmB,CAAC,IAAD,CAAnB,IAA6B,iBAAiB,CAAC,IAAD,CAA9C,IAAwD,oBAAoB,CAAC,IAAD,CAAjF,CAAX;AACD;;AAEK,SAAU,mBAAV,CAA8B,IAA9B,EAAmE;AACvE,SAAO,cAAc,IAArB;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAAiE;AACrE,SAAO,YAAY,IAAnB;AACD;;AAEK,SAAU,oBAAV,CAA+B,IAA/B,EAAoE;AACxE,SAAO,eAAe,IAAtB;AACD;;AAIM,MAAM,IAAI,GAAG,MAAb;;AACA,MAAM,GAAG,GAAG,KAAZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpJP;;AACA;;AA6BM,SAAU,QAAV,CAAmB,CAAnB,EAA+B;AACnC,SAAO,YAAY,CAAnB;AACD;;AA8NK,SAAU,gBAAV,CAA2B,CAA3B,EAAgE;AACpE,SAAO,CAAA,CAAC,KAAA,IAAD,IAAA,CAAC,KAAA,KAAA,CAAD,GAAC,KAAA,CAAD,GAAA,CAAC,CAAG,MAAH,CAAD,MAAgB,SAAvB;AACD;;AAyGK,SAAU,QAAV,CAAmB,CAAnB,EAA+B;AACnC,SAAO,YAAY,CAAnB;AACD;;AAEK,SAAU,YAAV,CAAuB,IAAvB,EAAyD;AAC7D,SAAO,UAAU,IAAjB;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAA8D;AAClE,SAAO,eAAe,IAAtB;AACD;;AA6CK,SAAU,OAAV,CAAkB,CAAlB,EAA8B;AAClC,SAAO,WAAW,CAAlB;AACD;;AAgEK,SAAU,SAAV,CAAoB,CAApB,EAAgC;AACpC,SAAO,aAAa,CAApB;AACD;;AA+BK,SAAU,UAAV,CAAqB,CAArB,EAAiC;AACrC,SAAO,cAAc,CAArB;AACD;;AAsDK,SAAU,YAAV,CAAuB,CAAvB,EAAmC;AACvC,SAAO,gBAAgB,CAAvB;AACD;;AAiCK,SAAU,OAAV,CAAkB,CAAlB,EAA8B;AAClC,SAAO,WAAW,CAAlB;AACD;;AAEK,SAAU,QAAV,CAAmB,CAAnB,EAA+B;AACnC,SAAO,YAAY,CAAnB;AACD;;AAEK,SAAU,QAAV,CAAmB,CAAnB,EAA+B;AACnC,SAAO,YAAY,CAAnB;AACD;;AAEK,SAAU,eAAV,CAA0B,CAA1B,EAAsC;AAC1C,SAAO,mBAAmB,CAA1B;AACD;;AAEK,SAAU,SAAV,CAAoB,CAApB,EAAgC;AACpC,SAAO,aAAa,CAApB;AACD;;AACK,SAAU,WAAV,CAAsB,CAAtB,EAAkC;AACtC,SAAO,eAAe,CAAtB;AACD;;AAEK,SAAU,KAAV,CAAgB,CAAhB,EAA4B;AAChC,SAAO,SAAS,CAAhB;AACD;;AAEK,SAAU,QAAV,CAAmB,CAAnB,EAA+B;AACnC,SAAO,YAAY,CAAnB;AACD;;AAEK,SAAU,UAAV,CAAqB,CAArB,EAAiC;AACrC,SAAO,cAAc,CAArB;AACD;;AAEK,SAAU,WAAV,CAAsB,CAAtB,EAAkC;AACtC,SAAO,eAAe,CAAtB;AACD;;AAEK,SAAU,OAAV,CAAkB,CAAlB,EAA8B;AAClC,SAAO,WAAW,CAAlB;AACD;;AAEK,SAAU,MAAV,CAAiB,CAAjB,EAA6B;AACjC,SAAO,UAAU,CAAjB;AACD;;AAsBK,SAAU,kBAAV,CAA6B,SAA7B,EAAmD;AACvD,SAAO,SAAS,CAAC,GAAV,CAAc,CAAC,IAAG;AACvB,QAAI,QAAQ,CAAC,CAAD,CAAZ,EAAiB;AACf,aAAO;AACL,QAAA,MAAM,EAAE,0CAA4B,CAAC,CAAC,MAA9B,EAAsC,6BAAtC;AADH,OAAP;AAGD;;AACD,WAAO,CAAP;AACD,GAPM,CAAP;AAQD;;;;;;;;;AC9qBD;;AACA;;AASA;;AACA;;AAGA;;;;AAIM,SAAU,aAAV,CACJ,KADI,EAEJ,UAFI,EAGJ,SAHI,EAIJ,KAJI,EAI2B;AAE/B,QAAM,SAAS,GAAG,kCAAqB,UAArB,KAAoC,UAAU,CAAC,SAAjE;AACA,QAAM,QAAQ,GAAG,KAAK,CAAC,UAAD,CAAtB;;AACA,MAAI,SAAJ,EAAe;AACb,UAAM,UAAU,GAAG,qBAAM,SAAN,CAAnB;AACA,UAAM,YAAY,GAAG,UAAU,CAAC,GAAX,CAAe,CAAC,IAAG;AACtC,YAAM,iBAAiB,GAAG,KAAK,CAAC,CAAD,CAA/B;AACA,YAAM,IAAI,GAAG,wCAA4B,CAA5B,IACT,oCAAwB,KAAxB,EAAgC,CAA+B,CAAC,SAAhE,CADS,CACkE;AADlE,QAET,2BAAW,KAAX,EAAmB,CAA+B,CAAC,IAAnD,CAFJ,CAFsC,CAIwB;;AAC9D,aAAA,MAAA,CAAA,MAAA,CAAA;AACE,QAAA;AADF,OAAA,EAEK,iBAFL,CAAA;AAID,KAToB,CAArB;AAUA,WAAO;AACL,OAAC,SAAD,GAAa,CAAC,GAAG,YAAJ,EAAkB,IAAI,QAAQ,KAAK,SAAb,GAAyB,CAAC,QAAD,CAAzB,GAAsC,EAA1C,CAAlB;AADR,KAAP;AAGD,GAfD,MAeO;AACL,WAAO,QAAQ,KAAK,SAAb,GAAyB;AAAC,OAAC,SAAD,GAAa;AAAd,KAAzB,GAAmD,EAA1D;AACD;AACF;;;;;;;;;;AC7CD;;AAIA;;AACA;;AAEA;;AAEM,SAAU,IAAV,CAAe,KAAf,EAAiC,OAAA,GAAmD,MAApF,EAA0F;AAC9F,QAAM,UAAU,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAnB;AACA,SAAO,gCAAc,KAAd,EAAqB,UAArB,EAAiC,OAAjC,EAA0C,IAAI,IAAI,OAAO,CAAC,IAAD,EAAO,KAAK,CAAC,MAAb,CAAzD,CAAP;AACD;;AAEK,SAAU,OAAV,CACJ,UADI,EAEJ,MAFI,EAGJ,IAAA,GAAgC,OAH5B,EAGmC;AAEvC;AACA,MAAI,UAAJ,EAAgB;AACd,QAAI,4BAAW,UAAX,CAAJ,EAA4B;AAC1B,aAAO,8BAAiB,UAAU,CAAC,KAA5B,CAAP;AACD;;AACD,QAAI,mCAAkB,UAAlB,CAAJ,EAAmC;AACjC,YAAM;AAAC,QAAA,MAAD;AAAS,QAAA;AAAT,UAAuB,iCAAgB,UAAhB,CAA7B;AACA,aAAO,6BAAgB;AAAC,QAAA,eAAe,EAAE,UAAlB;AAA8B,QAAA,MAA9B;AAAsC,QAAA,UAAtC;AAAkD,QAAA,IAAlD;AAAwD,QAAA;AAAxD,OAAhB,CAAP;AACD;AACF;;AACD,SAAO,SAAP;AACD;;;;;;;;;;;AC9BD;;AACA;;AACA;;AACA;;AAYA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AAEM,SAAU,OAAV,CAAkB,KAAlB,EAAoC,GAAA,GAAgC,EAApE,EAAsE;AAC1E,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA,OAAX;AAAoB,IAAA,MAApB;AAA4B,IAAA;AAA5B,MAAqC,KAA3C;AACA,QAAM,UAAU,GAAG,QAAQ,CAAC,OAA5B;;AACA,MAAI,uBAAQ,UAAR,CAAJ,EAAyB;AACvB,WAAO;AAAC,MAAA,OAAO,EAAE,qBAAqB,CAAC;AAAC,QAAA,OAAO,EAAE;AAAV,OAAD,EAAwB,KAAxB,EAA+B,MAA/B,EAAuC,GAAvC;AAA/B,KAAP;AACD,GAFD,MAEO;AACL,UAAM,KAAK,GAAG,GAAG,CAAC,YAAJ,GAAmB,aAAnB,GAAmC,OAAjD;AACA,WAAO,gCAAc,KAAd,EAAqB,UAArB,EAAiC,SAAjC,EAA4C,IAAI,IAAG;AACxD;AACA,YAAM,wBAAwB,GAAG,mBAAQ,IAAR,EAAc,MAAd,EAAsB,KAAtB,CAAjC;;AACA,UAAI,wBAAJ,EAA8B;AAC5B,eAAO,wBAAP;AACD;;AAED,UAAI,IAAI,KAAK,IAAb,EAAmB;AACjB;AACA,eAAO,SAAP;AACD;;AAED,UAAI,WAAW,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAlB;;AAEA,UAAI,WAAW,KAAK,IAApB,EAA0B;AACxB,QAAA,WAAW,GAAG;AAAC,UAAA,OAAO,EAAE;AAAV,SAAd;AACD;;AAED,UAAI,wBAAS,WAAT,CAAJ,EAA2B;AACzB,eAAO;AAAC,UAAA,KAAK,EAAE;AAAR,SAAP;AACD,OAFD,MAEO,IAAI,wBAAS,WAAT,CAAJ,EAA2B;AAChC;AACA,YAAI,WAAW,CAAC,OAAZ,KAAwB,UAA5B,EAAwC;AACtC,iBAAO,qBAAqB,CAAC,QAAD,EAAW,KAAX,EAAkB,MAAlB,EAA0B,GAA1B,CAA5B;AACD,SAFD,MAEO;AACL,iBAAO;AAAC,YAAA,MAAM,EAAE;AAAT,WAAP;AACD;AACF;;AAED,aAAO,SAAP;AACD,KA9BM,CAAP;AA+BD;AACF;;AAEK,SAAU,WAAV,CACJ,QADI,EAEJ,KAFI,EAGJ,MAHI,EAIJ;AAAC,EAAA;AAAD,IAA2C,EAJvC,EAIyC;AAE7C,QAAM,MAAM,GAAG,EAAf;AACA,QAAM,IAAI,GAAG,YAAY,GAAG,aAAH,GAAmB,OAA5C;AACA,QAAM,MAAM,GAAqD,EAAjE;;AAEA,WAAS,GAAT,CAAa,IAAb,EAAsE,OAAtE,EAAsF;AACpF,UAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB;AAEA,UAAM,QAAQ,GAA0B,iCAAgB,IAAhB,IACpC,IADoC,GAErC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,IADN,CAAA,EACU;AACP,MAAA,IAAI,EAAE,QAAQ,CAAC,WAAD,CAAR,CAAsB,IADrB,CAC0B;;AAD1B,KADV,CAFH;AAOA,UAAM,GAAG,GAAG,qBAAM,uBAAM,QAAN,EAAgB,MAAhB,EAAwB;AAAC,MAAA,cAAc,EAAE;AAAjB,KAAxB,CAAN,EAAwD,IAAxD,CAA6D,IAA7D,CAAZ;AAEA,QAAI,KAAJ;;AAEA,QAAI,qBAAO,OAAP,CAAJ,EAAqB;AACnB,YAAM,QAAQ,GAAG,OAAO,KAAK,GAAZ,GAAkB,IAAlB,GAAyB,IAA1C;AACA,YAAM,SAAS,GAAG,6BAAY,QAAQ,CAAC,QAAD,CAApB,CAAlB;;AAEA,UAAI,mBAAS,QAAQ,CAAC,GAAlB,KAA0B,SAA9B,EAAyC;AACvC,cAAM,UAAU,GAAG,yBAAQ,QAAR,EAAkB;AAAC,UAAA;AAAD,SAAlB,CAAnB;AACA,cAAM,QAAQ,GAAG,yBAAQ,SAAR,EAAmB;AAAC,UAAA;AAAD,SAAnB,CAAjB;AACA,cAAM;AAAC,UAAA,MAAD;AAAS,UAAA;AAAT,YAAuB,iCAAgB,QAAhB,CAA7B;AACA,QAAA,KAAK,GAAG,iCAAoB,UAApB,EAAgC,QAAhC,EAA0C,MAA1C,EAAkD,UAAlD,EAA8D,MAA9D,CAAR;AACA,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,IAAnB;AACD,OAND,MAMO,IAAI,KAAK,IAAI,KAAK,CAAC,YAAN,KAAuB,OAAhC,IAA2C,KAAK,CAAC,MAAN,KAAiB,WAAhE,EAA6E;AAClF,cAAM;AAAC,UAAA,MAAD;AAAS,UAAA;AAAT,YAAuB,iCAAgB,QAAhB,CAA7B;AACA,QAAA,KAAK,GAAG,6BAAgB;AAAC,UAAA,eAAe,EAAE,QAAlB;AAA4B,UAAA,MAA5B;AAAoC,UAAA,UAApC;AAAgD,UAAA,IAAhD;AAAsD,UAAA,MAAtD;AAA8D,UAAA,cAAc,EAAE;AAA9E,SAAhB,EACL,MADH;AAED;AACF;;AAED,IAAA,KAAK,GAAG,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAA,KAAA,GAAS,mBAAQ,QAAR,EAAkB,MAAlB,EAA0B,IAA1B,EAAgC,MAAjD;AAEA,IAAA,MAAM,CAAC,IAAP,CAAY;AAAC,MAAA,OAAD;AAAU,MAAA,GAAV;AAAe,MAAA;AAAf,KAAZ;AACD;;AAED,yBAAQ,QAAR,EAAkB,CAAC,UAAD,EAAa,OAAb,KAAwB;AACxC,QAAI,4BAAW,UAAX,CAAJ,EAA4B;AAC1B,MAAA,GAAG,CAAC,UAAD,EAAa,OAAb,CAAH;AACD,KAFD,MAEO,IAAI,wCAAuB,UAAvB,CAAJ,EAAwC;AAC7C,MAAA,GAAG,CAAC,UAAU,CAAC,SAAZ,EAAuB,OAAvB,CAAH;AACD;AACF,GAND;AAQA,QAAM,GAAG,GAAG,EAAZ;;AACA,OAAK,MAAM;AAAC,IAAA,OAAD;AAAU,IAAA,GAAV;AAAe,IAAA;AAAf,GAAX,IAAoC,MAApC,EAA4C;AAC1C,QAAI,CAAC,MAAM,CAAC,OAAD,CAAP,IAAoB,CAAC,GAAG,CAAC,GAAD,CAA5B,EAAmC;AACjC,MAAA,GAAG,CAAC,2BAAY,GAAZ,CAAD,CAAH,GAAwB,KAAxB;AACD;AACF;;AAED,SAAO,GAAP;AACD;;AAEK,SAAU,qBAAV,CACJ,QADI,EAEJ,KAFI,EAGJ,MAHI,EAIJ;AAAC,EAAA;AAAD,IAA2C,EAJvC,EAIyC;AAE7C,QAAM,IAAI,GAAG,WAAW,CAAC,QAAD,EAAW,KAAX,EAAkB,MAAlB,EAA0B;AAAC,IAAA;AAAD,GAA1B,CAAxB;AAEA,QAAM,SAAS,GAAG,mBAAQ,IAAR,EAAc,GAAd,CAAkB,CAAC;AAAC,IAAA,GAAD;AAAM,IAAA;AAAN,GAAD,KAAkB,GAAG,GAAG,KAAK,KAAK,EAApD,CAAlB;AACA,SAAO,SAAS,CAAC,MAAV,GAAmB,CAAnB,GAAuB;AAAC,IAAA,MAAM,EAAE,IAAI,SAAS,CAAC,IAAV,CAAe,IAAf,CAAoB;AAAjC,GAAvB,GAA+D,SAAtE;AACD;;;;;;;;;;AC3ID;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEM,SAAU,IAAV,CAAe,KAAf,EAA+B;AACnC,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA;AAAV,MAAoB,KAA1B;AAEA,QAAM,UAAU,GAAG,iCAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,CAAnB,CAHmC,CAKnC;;AACA,MAAI,UAAU,KAAK,KAAnB,EAA0B;AACxB;AACA,WAAO,EAAP;AACD;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,UAAU,GAAG;AAAC,IAAA,IAAI,EAAE;AAAP,GAAH,GAAwB,EADxC,CAAA,EAEK,mBAAmB,CAAC,KAAD,CAFxB,CAAA,EAGK,WAAW,CAAC,KAAD,CAHhB,CAAA;AAKD;;AAED,SAAS,mBAAT,CAA6B,KAA7B,EAA6C;AAC3C,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,OAAP;AAAgB,IAAA;AAAhB,MAA0B,KAAhC;;AAEA,MAAI,MAAM,CAAC,IAAP,KAAgB,KAApB,EAA2B;AACzB,WAAO,EAAP;AACD;;AAED,QAAM,YAAY,GAAG,iCAAoB,qBAApB,EAA2C,OAA3C,EAAoD,MAApD,CAArB;;AAEA,MAAI,YAAY,IAAI,IAApB,EAA0B;AACxB,WAAO;AAAC,MAAA,mBAAmB,EAAE;AAAC,QAAA,KAAK,EAAE;AAAR;AAAtB,KAAP;AACD;;AAED,SAAO,IAAI,IAAI,mBAAR,GAAwB,EAAxB,GAA6B;AAAC,IAAA,mBAAmB,EAAE;AAAC,MAAA,KAAK,EAAE;AAAR;AAAtB,GAApC;AACD;;AAEK,SAAU,WAAV,CAAsB,KAAtB,EAAsC;AAC1C,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA,OAAX;AAAoB,IAAA,MAApB;AAA4B,IAAA;AAA5B,MAAqC,KAA3C;AACA,QAAM,UAAU,GAAG,QAAQ,CAAC,WAA5B;;AAEA,MAAI,UAAJ,EAAgB;AACd,WAAO,gCAAc,KAAd,EAAqB,UAArB,EAAiC,aAAjC,EAAgD,IAAI,IAAI,mBAAQ,IAAR,EAAc,KAAK,CAAC,MAApB,CAAxD,CAAP;AACD,GANyC,CAQ1C;AACA;;;AACA,QAAM,gBAAgB,GAAG,iCAAoB,aAApB,EAAmC,OAAnC,EAA4C,MAA5C,CAAzB;;AACA,MAAI,gBAAgB,IAAI,IAAxB,EAA8B;AAC5B,WAAO;AACL,MAAA,WAAW,EAAE,8BAAiB,gBAAjB;AADR,KAAP;AAGD;;AAED,MAAI,MAAM,CAAC,IAAP,KAAgB,KAApB,EAA2B;AACzB,WAAO,EAAP;AACD;;AAED,QAAM,IAAI,GAAG,0BAAY,QAAZ,EAAsB,KAAtB,EAA6B,MAA7B,CAAb;;AAEA,MAAI,mBAAQ,IAAR,CAAJ,EAAmB;AACjB,WAAO,SAAP;AACD;;AAED,SAAO;AACL,IAAA,WAAW,EAAE;AACX,MAAA,MAAM,EAAE,mBAAQ,IAAR,EACL,GADK,CACD,CAAC;AAAC,QAAA,GAAD;AAAM,QAAA;AAAN,OAAD,KAAkB,GAAG,GAAG,cAAc,KAAK,GAD1C,EAEL,IAFK,CAEA,YAFA;AADG;AADR,GAAP;AAOD;;;;;;;;;ACxED;;AAEA;;AACA;;;;;;AAEA;;;AAGM,SAAU,WAAV,CACJ,OADI,EAEJ,KAFI,EAGJ,GAAA,GAII,EAPA,EAOE;AAEN,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA;AAApB,MAA8B,KAApC;AACA,QAAM;AAAC,IAAA;AAAD,MAAc,GAApB;AACA,MAAI;AAAC,IAAA,UAAD;AAAa,IAAA;AAAb,MAA6B,GAAjC;;AAEA,MAAI,UAAU,KAAK,SAAnB,EAA8B;AAC5B;AACA,IAAA,YAAY,GAAG,YAAY,KAAA,IAAZ,IAAA,YAAY,KAAA,KAAA,CAAZ,GAAA,YAAA,GAAgB,iCAAoB,OAApB,EAA6B,OAA7B,EAAsC,MAAtC,EAA8C;AAAC,MAAA,SAAD;AAAY,MAAA,cAAc,EAAE;AAA5B,KAA9C,CAA/B;;AAEA,QAAI,YAAY,KAAK,SAArB,EAAgC;AAC9B,MAAA,UAAU,GAAG,8BAAiB,YAAjB,CAAb;AACD;AACF;;AAED,QAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;AAEA,SAAO,gCAAc,KAAd,EAAqB,UAArB,EAAiC,SAAS,KAAA,IAAT,IAAA,SAAS,KAAA,KAAA,CAAT,GAAA,SAAA,GAAa,OAA9C,EAAuD,IAAI,IAAG;AACnE,WAAO,GAAG,CAAC,QAAJ,CAAa;AAClB,MAAA,OADkB;AAElB,MAAA,UAAU,EAAE,IAFM;AAGlB,MAAA,OAHkB;AAIlB,MAAA,MAJkB;AAKlB,MAAA,SAAS,EAAE,KAAK,CAAC,SAAN,CAAgB,OAAhB,CALO;AAMlB,MAAA,KAAK,EAAE,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CANW;AAOlB,MAAA,KAAK,EAAE,IAPW;AAQlB,MAAA;AARkB,KAAb,CAAP;AAUD,GAXM,CAAP;AAYD;;;;;;;;;AChDD;;AACA;;AAEA;;AAEA;;;;;;AAEM,SAAU,KAAV,CAAgB,KAAhB,EAAkC,GAAA,GAAqC;AAAC,EAAA,MAAM,EAAE;AAAT,CAAvE,EAA0F;;;AAC9F,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA;AAApB,MAA8B,KAApC;AACA,QAAM;AAAC,IAAA,IAAI,EAAE;AAAP,MAAmB,OAAzB,CAF8F,CAI9F;;AACA,QAAM,MAAM,GAAA,CAAA,EAAA,GAAG,GAAG,CAAC,MAAP,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,iCAAoB,QAApB,EAA8B,OAA9B,EAAuC,MAAvC,CAA7B;AAEA,QAAM,mBAAmB,GAAG,oBAAS,CAAC,KAAD,EAAQ,OAAR,EAAiB,QAAjB,EAA2B,QAA3B,EAAqC,UAArC,CAAT,EAA2D,QAA3D,IACxB,aADwB,GAExB,SAFJ;AAIA,QAAM,WAAW,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GACf,iCAAoB,MAAM,KAAK,IAAX,GAAkB,OAAlB,GAA4B,SAAhD,EAA2D,OAA3D,EAAoE,MAApE,EAA4E;AAAC,IAAA,SAAS,EAAE;AAAZ,GAA5E,CADe,MACiF,IADjF,IACiF,EAAA,KAAA,KAAA,CADjF,GACiF,EADjF,GAEf;AACA,EAAA,MAAM,CAAC,IAAP,CAAY,MAAM,KAAK,IAAX,IAAmB,OAA/B,CAHe,MAGwB,IAHxB,IAGwB,EAAA,KAAA,KAAA,CAHxB,GAGwB,EAHxB,GAIf;AACA;AACA,EAAA,mBANF;AAQA,QAAM,aAAa,GAAA,CAAA,EAAA,GACjB,iCAAoB,MAAM,KAAK,KAAX,GAAmB,OAAnB,GAA6B,SAAjD,EAA4D,OAA5D,EAAqE,MAArE,EAA6E;AAAC,IAAA,SAAS,EAAE;AAAZ,GAA7E,CADiB,MACkF,IADlF,IACkF,EAAA,KAAA,KAAA,CADlF,GACkF,EADlF,GAEjB;AACA,EAAA,MAAM,CAAC,IAAP,CAAY,MAAM,KAAK,KAAX,IAAoB,OAAhC,CAHF;AAKA,QAAM,cAAc,GAAG,MAAM,GAAG,MAAH,GAAY,QAAzC;AAEA,QAAM,0BAA0B,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC1B,WAAW,GAAG;AAAC,IAAA,IAAI,EAAE,8BAAiB,WAAjB;AAAP,GAAH,GAA2C,EAD5B,CAAA,EAE1B,aAAa,GAAG;AAAC,IAAA,MAAM,EAAE,8BAAiB,aAAjB;AAAT,GAAH,GAA+C,EAFlC,CAAhC;;AAKA,MAAI,OAAO,CAAC,KAAR,KAAkB,MAAM,GAAG,OAAO,CAAC,IAAX,GAAkB,OAAO,CAAC,MAAlD,CAAJ,EAA+D;AAC7D,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,UAA1B,EAAsC;AAAC,MAAA,IAAI,EAAE,UAAU,OAAjB;AAA0B,MAAA,MAAM,EAAE,YAAY;AAA9C,KAAtC,CAAT;AACD;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,0BADL,CAAA,EAEK,8BAAY,OAAZ,EAAqB,KAArB,EAA4B;AAC7B,IAAA,SAAS,EAAE,cADkB;AAE7B,IAAA,YAAY,EAAE,MAAM,GAAG,WAAH,GAAiB;AAFR,GAA5B,CAFL,CAAA,EAMK,8BAAY,MAAZ,EAAoB,KAApB,EAA2B;AAC5B;AACA,IAAA,YAAY,EAAE,QAAQ,CAAC,IAAT,GAAgB,WAAhB,GAA8B;AAFhB,GAA3B,CANL,CAAA,EAUK,8BAAY,QAAZ,EAAsB,KAAtB,EAA6B;AAC9B;AACA,IAAA,YAAY,EAAE,QAAQ,CAAC,MAAT,GAAkB,aAAlB,GAAkC;AAFlB,GAA7B,CAVL,CAAA;AAeD;;;;;;;;;ACrDD;;AAGM,SAAU,SAAV,CAAoB,OAApB,EAAqE,OAArE,EAAqF;AACzF,QAAM,aAAa,GAAG,+BAAiB,OAAjB,CAAtB,CADyF,CAGzF;;AACA,QAAM,kBAAkB,GAAG,OAAO,CAAC,aAAD,CAAlC;;AACA,MAAI,kBAAJ,EAAwB;AACtB,WAAO,kBAAP;AACD;;AAED,SAAO,SAAP;AACD;;;;;;;;;;;ACjBD;;AASA;;AACA;;AACA;;AAEA;;AAGA;;AACA;;;;;;AAEA;;;AAGM,SAAU,aAAV,CACJ,OADI,EAEJ,KAFI,EAGJ;AACE,EAAA,UADF;AAEE,EAAA,SAFF;AAGE,EAAA;AAHF,CAHI,EAWH;AAED,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA,OAAX;AAAoB,IAAA,MAApB;AAA4B,IAAA;AAA5B,MAAqC,KAA3C;AAEA,QAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;AACA,QAAM,WAAW,GAAG,QAAQ,CAAC,uCAAyB,OAAzB,CAAD,CAA5B;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAlB;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAd;AAEA,QAAM,MAAM,GAAG,uBAAU,OAAV,EAAmB,OAAnB,CAAf,CATC,CAWD;;AACA,QAAM,UAAU,GAAG,uBAAuB,CAAC;AACzC,IAAA,KADyC;AAEzC,IAAA,UAFyC;AAGzC,IAAA,OAHyC;AAIzC,IAAA,SAJyC;AAKzC,IAAA;AALyC,GAAD,CAA1C;AAQA,QAAM,QAAQ,GACZ,CAAC,UAAD,IAAe,qBAAO,OAAP,CAAf,KAAmC,QAAQ,CAAC,QAAT,IAAqB,QAAQ,CAAC,SAAjE,IACI;AACA;AAAC,IAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAAR,GAFJ,GAGI,WAAW,CAAC;AACV,IAAA,OADU;AAEV,IAAA,UAFU;AAGV,IAAA,WAHU;AAIV,IAAA,OAJU;AAKV,IAAA,MALU;AAMV,IAAA,UANU;AAOV,IAAA,SAPU;AAQV,IAAA,KARU;AASV,IAAA,KATU;AAUV,IAAA,MAVU;AAWV,IAAA;AAXU,GAAD,CAJjB;AAkBA,SAAO,QAAQ,GAAG;AAAC,KAAC,SAAS,IAAI,OAAd,GAAwB;AAAzB,GAAH,GAAwC,SAAvD;AACD,EAED;AACA;;AAEA;;;;;AAGM,SAAU,WAAV,CACJ,MADI,EAIH;AAED,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,UAAV;AAAsB,IAAA,UAAtB;AAAkC,IAAA,SAAlC;AAA6C,IAAA,KAA7C;AAAoD,IAAA,MAApD;AAA4D,IAAA,OAA5D;AAAqE,IAAA;AAArE,MAA+E,MAArF,CAFC,CAID;;AACA,MAAI,mCAAkB,UAAlB,KAAiC,KAAjC,IAA0C,OAAO,KAAK,KAAK,CAAC,YAAhE,EAA8E;AAC5E,QAAI,4BAAW,UAAX,CAAJ,EAA4B;AAC1B,YAAM,IAAI,GAAG,yBAAQ;AACnB,QAAA,OADmB;AAEnB,QAAA,QAAQ,EAAE,UAFS;AAGnB,QAAA,UAHmB;AAInB,QAAA,OAJmB;AAKnB,QAAA,KALmB;AAMnB,QAAA;AANmB,OAAR,CAAb;;AAQA,UAAI,IAAI,KAAK,SAAb,EAAwB;AACtB,eAAO,GAAG,CAAC,qBAAJ,CAA0B;AAC/B,UAAA,SAD+B;AAE/B,UAAA,eAAe,EAAE,UAFc;AAG/B,UAAA,WAAW,EAAE,OAHkB;AAI/B,UAAA,IAJ+B;AAK/B,UAAA;AAL+B,SAA1B,CAAP;AAOD;AACF,KAnB2E,CAoB5E;;;AACA,WAAO,GAAG,CAAC,0BAAJ,CAA+B,UAA/B,EAA2C,SAA3C,EAAsD;AAAC,MAAA,MAAM,EAAE;AAAT,KAAtD,EAAuE;AAAC,MAAA;AAAD,KAAvE,CAAP;AACD;;AAED,SAAO,GAAG,CAAC,kCAAJ,CAAuC,MAAvC,CAAP;AACD;;AAEK,SAAU,uBAAV,CAAkC;AACtC,EAAA,KADsC;AAEtC,EAAA,UAFsC;AAGtC,EAAA,OAHsC;AAItC,EAAA,SAJsC;AAKtC,EAAA;AALsC,CAAlC,EAYL;AACC,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA;AAAV,MAAoB,KAA1B;AACA,SAAO,MAAK;AACV,UAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB;AACA,UAAM,SAAS,GAAG,mCAAqB,OAArB,CAAlB;AAEA,UAAM,oBAAoB,GAAG,iCAAoB,OAApB,EAA6B,OAA7B,EAAsC,MAAtC,EAA8C;AAAC,MAAA;AAAD,KAA9C,CAA7B;;AACA,QAAI,oBAAoB,KAAK,SAA7B,EAAwC;AACtC,aAAO,GAAG,CAAC,2BAAJ,CAAgC,OAAhC,EAAyC,oBAAzC,CAAP;AACD;;AAED,YAAQ,UAAR;AACE,WAAK,WAAL;AACA,WAAK,WAAL;AACE,YAAI,SAAJ,EAAe;AACb,gBAAM,SAAS,GAAG,KAAK,CAAC,GAAN,CAAU,MAAV,CAAlB;;AACA,cAAI,oBAAS,CAAC,iBAAU,GAAX,EAAgB,iBAAU,IAA1B,EAAgC,iBAAU,GAA1C,CAAT,EAAyD,SAAzD,CAAJ,EAAyE,CACvE;AACA;AACA;AACA;AACD,WALD,MAKO;AACL,gBAAI,KAAK,CAAC,4BAAN,EAAJ,EAA0C;AACxC,qBAAO;AACL,gBAAA,KAAK,EAAE,SADF;AAEL,gBAAA,KAAK,EAAE;AAFF,eAAP;AAID;AACF;AACF;;AAED,YAAI,UAAU,KAAK,WAAnB,EAAgC;AAC9B,iBAAO,WAAW,KAAK,GAAhB,GAAsB;AAAC,YAAA,KAAK,EAAE;AAAC,cAAA,KAAK,EAAE;AAAR;AAAR,WAAtB,GAAmD;AAAC,YAAA,KAAK,EAAE;AAAR,WAA1D;AACD,SAFD,MAEO;AACL;AACA,kBAAQ,WAAR;AACE,iBAAK,QAAL;AACE;AACA,qBAAO;AACL,gBAAA,MAAM,EAAE,OAAO,KAAK,CAAC,KAAN,CAAY,MAAM,IAAI,KAAK,CAAC,MAAN,CAAa,MAAM;AADnD,eAAP;;AAGF,iBAAK,OAAL;AACE,qBAAO;AAAC,gBAAA,MAAM,EAAE;AAAT,eAAP;;AACF,iBAAK,GAAL;AACE,qBAAO;AAAC,gBAAA,KAAK,EAAE;AAAC,kBAAA,KAAK,EAAE;AAAR;AAAR,eAAP;;AACF,iBAAK,GAAL;AACE,qBAAO;AAAC,gBAAA,KAAK,EAAE;AAAR,eAAP;AAXJ;AAaD;;AACD;;AACF,WAAK,KAAL;AAAY;AACV,gBAAM,OAAO,GAAG,KAAK,CAAC,6BAAe,OAAf,CAAD,CAArB;AACA,iBAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,OAAX,CAAA,EAAkB;AAAE,YAAA,IAAI,EAAE;AAAR,WAAlB,CAAA;AACD;AA1CH,KATU,CAqDV;;;AACA,WAAO,SAAP;AACD,GAvDD;AAwDD;;;;;;;;;ACzLD;;AAIA;;AAEA,MAAM,iBAAiB,GAAmC;AACxD,EAAA,IAAI,EAAE,GADkD;AAExD,EAAA,MAAM,EAAE,IAFgD;AAGxD,EAAA,KAAK,EAAE;AAHiD,CAA1D;AAMA,MAAM,mBAAmB,GAAG;AAC1B,EAAA,GAAG,EAAE,GADqB;AAE1B,EAAA,MAAM,EAAE,IAFkB;AAG1B,EAAA,MAAM,EAAE;AAHkB,CAA5B;;AAMM,SAAU,wBAAV,CACJ,OADI,EAEJ,OAFI,EAGJ,MAHI,EAIJ,YAAA,GAAiC,QAJ7B,EAIqC;AAEzC,MAAI,OAAO,KAAK,QAAZ,IAAwB,OAAO,KAAK,OAAxC,EAAiD;AAC/C,WAAO,mCAAqB,OAArB,CAAP;AACD;;AACD,QAAM,YAAY,GAAG,OAAO,KAAK,GAAZ,GAAkB,OAAlB,GAA4B,UAAjD;AACA,QAAM,KAAK,GAAG,iCAAoB,YAApB,EAAkC,OAAlC,EAA2C,MAA3C,CAAd;;AACA,MAAI,OAAO,KAAK,GAAhB,EAAqB;AACnB,WAAO,iBAAiB,CAAC,KAAK,KAAK,YAAY,KAAK,KAAjB,GAAyB,MAAzB,GAAkC,QAAvC,CAAN,CAAxB;AACD,GAFD,MAEO;AACL,WAAO,mBAAmB,CAAC,KAAK,IAAI,YAAV,CAA1B;AACD;AACF;;;;;;;;;;;ACnCD;;AACA;;AAGA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA;;;AAGM,SAAU,oBAAV,CACJ,OADI,EAEJ,KAFI,EAGJ;AACE,EAAA,UADF;AAEE,EAAA,WAFF;AAGE,EAAA;AAHF,CAHI,EAWH;AAED,MAAI,KAAJ,EAAW;AACT,WAAO,aAAa,CAAC,OAAD,EAAU,KAAV,EAAiB;AAAC,MAAA,UAAD;AAAa,MAAA;AAAb,KAAjB,CAApB;AACD;;AACD,SAAO,kCAAc,OAAd,EAAuB,KAAvB,EAA8B;AAAC,IAAA;AAAD,GAA9B,CAAP;AACD;;AAEK,SAAU,aAAV,CACJ,OADI,EAEJ,KAFI,EAGJ;AACE,EAAA,UADF;AAEE,EAAA;AAFF,CAHI,EASH;AAED,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA;AAAV,MAAoB,KAA1B;AACA,QAAM,QAAQ,GAAG,uCAAyB,OAAzB,CAAjB;AACA,QAAM,WAAW,GAAG,6BAAe,OAAf,CAApB;AAEA,QAAM,UAAU,GAAG,oBAAoB,CAAC,KAAD,EAAQ,WAAR,EAAqB,QAArB,CAAvC;AAEA,QAAM,SAAS,GAAG,UAAU,CAAC,WAAD,CAAV,GACd;AACA,+CAAyB,OAAzB,EAAkC,OAAlC,EAA2C,MAA3C,CAFc,GAGd;AACA,qCAAqB,OAArB,CAJJ;AAMA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,kCAAc,OAAd,EAAuB,KAAvB,EAA8B;AAAC,IAAA,UAAD;AAAa,IAAA;AAAb,GAA9B,CADL,CAAA,EAEK,UAFL,CAAA;AAID;AAED;;;;;;AAIA,SAAS,oBAAT,CACE,KADF,EAEE,UAFF,EAGE,OAHF,EAG6C;AAE3C,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA,IAAX;AAAiB,IAAA,OAAjB;AAA0B,IAAA,KAA1B;AAAiC,IAAA;AAAjC,MAA2C,KAAjD;AAEA,QAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB;AACA,QAAM,WAAW,GAAG,6BAAe,OAAf,CAApB;AACA,QAAM,SAAS,GAAG,mCAAqB,OAArB,CAAlB;AAEA,QAAM,UAAU,GAAG,QAAQ,CAAC,WAAD,CAA3B;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,WAAhB,CAAlB;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,WAAxB,CAAd;AAEA,QAAM,MAAM,GACV,OAAO,IAAI,QAAX,IAAuB,OAAO,IAAI,OAAlC,GACI,uBAAU,OAAV,EAAmB,KAAK,CAAC,OAAzB,CADJ,GAEI,uBAAU,WAAV,EAAuB,KAAK,CAAC,OAA7B,CAHN;;AAKA,MAAI,CAAC,UAAD,KAAgB,OAAO,KAAK,IAAZ,IAAoB,OAAO,KAAK,IAAhD,MAA0D,QAAQ,CAAC,QAAT,IAAqB,QAAQ,CAAC,SAAxF,CAAJ,EAAwG;AACtG;AACA,WAAO;AAAC,OAAC,SAAD,GAAa;AAAC,QAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAAR;AAAd,KAAP;AACD;;AAED,QAAM,QAAQ,GAAG,YAAY,CAAC;AAC5B,IAAA,OAD4B;AAE5B,IAAA,UAF4B;AAG5B,IAAA,WAAW,EAAE,QAAQ,CAAC,OAAD,CAHO;AAI5B,IAAA,OAJ4B;AAK5B,IAAA,MAL4B;AAM5B,IAAA,SAN4B;AAO5B,IAAA,KAP4B;AAQ5B,IAAA,KAR4B;AAS5B,IAAA,MAT4B;AAU5B,IAAA,UAAU,EAAE;AAVgB,GAAD,CAA7B;;AAaA,MAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B,WAAO;AAAC,OAAC,SAAD,GAAa;AAAd,KAAP;AACD,GArC0C,CAuC3C;AAEA;AACA;;;AAEA,SACE,eAAe,CAAC,OAAD,EAAU,OAAV,CAAf,IACA,eAAe,CAAC,OAAD,EAAU;AACvB,KAAC,OAAD,GAAW,gCAAmB,OAAnB,EAA4B,OAA5B,EAAqC,MAAM,CAAC,KAA5C,CADY;AAEvB,KAAC,WAAD,GAAe,gCAAmB,WAAnB,EAAgC,OAAhC,EAAyC,MAAM,CAAC,KAAhD;AAFQ,GAAV,CADf,IAKA,eAAe,CAAC,OAAD,EAAU,MAAM,CAAC,IAAD,CAAhB,CALf,IAMA,eAAe,CAAC,OAAD,EAAU,MAAM,CAAC,IAAjB,CANf,IAMyC;AACvC,KAAC,SAAD,GAAa,4CAAwB;AACnC,MAAA,KADmC;AAEnC,MAAA,UAFmC;AAGnC,MAAA,OAHmC;AAInC,MAAA,SAJmC;AAKnC,MAAA;AALmC,KAAxB;AAD0B,GAP3C;AAiBD;;AAEK,SAAU,YAAV,CAAuB;AAC3B,EAAA,OAD2B;AAE3B,EAAA,UAF2B;AAG3B,EAAA,WAH2B;AAI3B,EAAA,OAJ2B;AAK3B,EAAA,MAL2B;AAM3B,EAAA,SAN2B;AAO3B,EAAA,KAP2B;AAQ3B,EAAA,KAR2B;AAS3B,EAAA,MAT2B;AAU3B,EAAA;AAV2B,CAAvB,EAaL;AACC,MACE,mCAAkB,UAAlB,KACA,KADA,IAEA;AACA,EAAA,OAAO,CAAC,MAAR,CAAe,CAAf,MAAsB,KAAK,CAAC,YAAN,CAAmB,MAAnB,CAA0B,CAA1B,CAJxB,EAKE;AACA,WAAO,GAAG,CAAC,0BAAJ,CAA+B,UAA/B,EAA2C,SAA3C,EAAsD;AAAC,MAAA,MAAM,EAAE;AAAT,KAAtD,EAAyE;AAAC,MAAA;AAAD,KAAzE,CAAP;AACD;;AACD,SAAO,GAAG,CAAC,kCAAJ,CAAuC;AAC5C,IAAA,OAD4C;AAE5C,IAAA,UAAU,EAAE,WAFgC;AAG5C,IAAA,SAH4C;AAI5C,IAAA,KAJ4C;AAK5C,IAAA,KAL4C;AAM5C,IAAA,OAN4C;AAO5C,IAAA,MAP4C;AAQ5C,IAAA,MAR4C;AAS5C,IAAA;AAT4C,GAAvC,CAAP;AAWD;;AAED,SAAS,eAAT,CAAyB,OAAzB,EAAsE,OAAtE,EAAyF;AACvF,QAAM,WAAW,GAAG,6BAAe,OAAf,CAApB;AACA,QAAM,SAAS,GAAG,mCAAqB,OAArB,CAAlB;;AACA,MAAI,OAAO,CAAC,SAAD,CAAP,KAAuB,SAA3B,EAAsC;AACpC,WAAO;AAAC,OAAC,SAAD,GAAa,GAAG,CAAC,2BAAJ,CAAgC,OAAhC,EAAyC,OAAO,CAAC,SAAD,CAAhD;AAAd,KAAP;AACD,GAFD,MAEO,IAAI,OAAO,CAAC,OAAD,CAAP,KAAqB,SAAzB,EAAoC;AACzC,WAAO;AAAC,OAAC,SAAD,GAAa,GAAG,CAAC,2BAAJ,CAAgC,OAAhC,EAAyC,OAAO,CAAC,OAAD,CAAhD;AAAd,KAAP;AACD,GAFM,MAEA,IAAI,OAAO,CAAC,WAAD,CAAX,EAA0B;AAC/B,WAAO;AAAC,OAAC,WAAD,GAAe,GAAG,CAAC,2BAAJ,CAAgC,OAAhC,EAAyC,OAAO,CAAC,WAAD,CAAhD;AAAhB,KAAP;AACD;;AACD,SAAO,SAAP;AACD;;;;;;;;;;;ACjLD;;AACA;;AACA;;AASA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEM,SAAU,YAAV,CACJ,KADI,EAEJ,OAFI,EAGJ,IAHI,EAGkC;;;AAEtC,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA,QAAT;AAAmB,IAAA,OAAnB;AAA4B,IAAA;AAA5B,MAAqC,KAA3C;AAEA,QAAM,QAAQ,GAAG,uCAAyB,OAAzB,CAAjB;AACA,QAAM,WAAW,GAAG,6BAAe,OAAf,CAApB;AACA,QAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;AACA,QAAM,WAAW,GAAG,QAAQ,CAAC,QAAD,CAA5B;AAEA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAd;AACA,QAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,GAAN,CAAU,MAAV,CAAH,GAAuB,SAA9C;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAlB;AAEA,QAAM,MAAM,GAAG,OAAO,CAAC,MAAvB;AACA,QAAM,UAAU,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GACd,QAAQ,CAAC,WAAD,CADM,MACO,IADP,IACO,EAAA,KAAA,KAAA,CADP,GACO,EADP,GACW,QAAQ,CAAC,IADpB,MACwB,IADxB,IACwB,EAAA,KAAA,KAAA,CADxB,GACwB,EADxB,GAC4B,iCAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,EAA6C;AAAC,IAAA,SAAS,EAAE;AAAZ,GAA7C,CAD5C;AAGA,QAAM,SAAS,GAAG,IAAI,KAAK,KAAT,KAAmB,OAAO,KAAK,GAAZ,GAAkB,MAAM,KAAK,UAA7B,GAA0C,MAAM,KAAK,YAAxE,CAAlB,CAjBsC,CAmBtC;;AACA,MACE,4BAAW,UAAX,MACC,oBAAU,UAAU,CAAC,GAArB,KAA6B,mBAAS,UAAU,CAAC,GAApB,CAA7B,IAA0D,UAAU,CAAC,QAAX,IAAuB,CAAC,WADnF,KAEA,CAAC,UAFD,IAGA,CAAC,8BAAkB,SAAlB,CAJH,EAKE;AACA,UAAM,IAAI,GAAG,yBAAQ;AAAC,MAAA,OAAD;AAAU,MAAA,QAAQ,EAAE,UAApB;AAAgC,MAAA,KAAhC;AAAuC,MAAA,OAAvC;AAAgD,MAAA;AAAhD,KAAR,CAAb;AACA,UAAM,IAAI,GAAA,CAAA,EAAA,GAAG,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAAH,MAAgC,IAAhC,IAAgC,EAAA,KAAA,KAAA,CAAhC,GAAgC,KAAA,CAAhC,GAAgC,EAAA,CAAG,CAAH,CAA1C;AACA,UAAM,aAAa,GAAA,CAAA,EAAA,GAAG,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,GAAN,CAAU,WAAV,CAAH,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA6B,GAAhD,CAHA,CAGqD;;AAErD,WAAO,eAAe,CAAC;AACrB,MAAA,QAAQ,EAAE,UADW;AAErB,MAAA,SAAS,EAAE,WAFU;AAGrB,MAAA,OAHqB;AAIrB,MAAA,OAJqB;AAKrB,MAAA,SALqB;AAMrB,MAAA,IANqB;AAOrB,MAAA,aAPqB;AAQrB,MAAA,OAAO,EAAE,qBAAO,OAAP,IAAkB,iCAAoB,YAApB,EAAkC,OAAlC,EAA2C,MAA3C,CAAlB,GAAuE,SAR3D;AASrB,MAAA,OAAO,EAAE,KAAK,CAAC,GAAN,CAAU,SAAV,CATY;AAUrB,MAAA;AAVqB,KAAD,CAAtB;AAYD,GAtBD,MAsBO,IAAI,CAAE,mCAAkB,UAAlB,KAAiC,8BAAkB,SAAlB,CAAlC,IAAmE,SAApE,KAAkF,CAAC,WAAvF,EAAoG;AACzG,WAAO,eAAe,CAAC,IAAD,EAAO,UAAP,EAAmB,OAAnB,EAA4B,KAA5B,CAAtB;AACD,GAFM,MAEA;AACL,WAAO,kCAAc,OAAd,EAAuB,KAAvB,EAA8B;AAAC,MAAA,UAAU,EAAE,WAAb;AAA0B,MAAA,WAAW,EAAE;AAAvC,KAA9B,CAAP;AACD;AACF;;AACD,SAAS,cAAT,CACE,IADF,EAEE,WAFF,EAGE,SAHF,EAIE,KAJF,EAKE,MALF,EAME,IANF,EAMqB;AAEnB,MAAI,KAAJ,EAAW;AACT,UAAM,SAAS,GAAG,KAAK,CAAC,GAAN,CAAU,MAAV,CAAlB;;AACA,QAAI,SAAS,KAAK,OAAd,IAAyB,SAAS,KAAK,MAA3C,EAAmD;AACjD,UAAI,MAAM,CAAC,IAAD,CAAN,CAAa,gBAAb,KAAkC,SAAtC,EAAiD;AAC/C,eAAO;AAAC,UAAA,KAAK,EAAE,MAAM,CAAC,IAAD,CAAN,CAAa;AAArB,SAAP;AACD;;AACD,UAAI,SAAS,KAAK,iBAAU,KAA5B,EAAmC;AACjC,cAAM,UAAU,GAAG,KAAK,CAAC,GAAN,CAAU,OAAV,CAAnB;;AACA,YAAI,yBAAc,UAAd,KAA6B,wBAAS,UAAU,CAAC,IAApB,CAAjC,EAA4D;AAC1D,iBAAO;AAAC,YAAA,KAAK,EAAE,UAAU,CAAC,IAAX,GAAkB;AAA1B,WAAP;AACD;;AACD,eAAO;AAAC,UAAA,KAAK,EAAE,uBAAe;AAAvB,SAAP;AACD,OAND,MAMO;AACL;AACA,eAAO;AAAC,UAAA,KAAK,EAAE,SAAR;AAAmB,UAAA;AAAnB,SAAP;AACD;AACF,KAdD,MAcO;AACL;AACA,aAAO;AAAC,QAAA,KAAK,EAAE,MAAM,CAAC,IAAD,CAAN,CAAa;AAArB,OAAP;AACD;AACF,GAtBkB,CAuBnB;;;AAEA,QAAM,IAAI,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,WAAvC,CAAb;AAEA,QAAM,KAAK,GAAG,4BACZ;AACA,EAAA,MAAM,CAAC,IAAD,CAAN,CAAa,gBAFD,EAGZ,IAAI,GAAG,CAHK,CAAd;AAKA,SAAO,KAAK,KAAK,SAAV,GAAsB;AAAC,IAAA;AAAD,GAAtB,GAAgC,SAAvC;AACD;AAED;;;;;AAIA,SAAS,eAAT,CACE,IADF,EAEE,QAFF,EAGE,OAHF,EAIE,KAJF,EAIkB;;;AAEhB,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA,MAApB;AAA4B,IAAA;AAA5B,MAAqC,KAA3C;AACA,QAAM,MAAM,GAAG,OAAO,CAAC,MAAvB;AAEA,QAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAlB;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAd;AACA,QAAM,aAAa,GAAG,6BAAe,OAAf,CAAtB;AACA,QAAM,QAAQ,GAAG,uCAAyB,OAAzB,CAAjB,CARgB,CAUhB;;AACA,QAAM,gBAAgB,GAAI,MAAM,KAAK,YAAX,IAA2B,OAAO,KAAK,GAAxC,IAAiD,MAAM,KAAK,UAAX,IAAyB,OAAO,KAAK,GAA/G;AAEA,QAAM,oBAAoB,GAAG,iCAAoB,gBAAgB,GAAG,MAAH,GAAY,aAAhD,EAA+D,OAA/D,EAAwE,MAAxE,EAAgF;AAC3G,IAAA,SAAS,EAAE;AADgG,GAAhF,CAA7B,CAbgB,CAiBhB;;AACA,MAAI,UAAJ;;AACA,MAAI,QAAQ,CAAC,IAAT,IAAiB,oBAAoB,KAAK,SAA9C,EAAyD;AACvD,QAAI,gBAAJ,EAAsB;AACpB,MAAA,UAAU,GAAG,8BAAY,MAAZ,EAAoB,KAApB,EAA2B;AAAC,QAAA,SAAS,EAAE,aAAZ;AAA2B,QAAA,YAAY,EAAE;AAAzC,OAA3B,CAAb;AACD,KAFD,MAEO;AACL,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,gCAAZ,CAA6C,OAAO,CAAC,IAArD,CAAT;AACD;AACF,GAzBe,CA2BhB;;;AACA,QAAM,IAAI,GAAA,CAAA,EAAA,GAAI,mCAAkB,QAAlB,IAA8B,yBAAQ;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA,OAApB;AAA6B,IAAA,KAA7B;AAAoC,IAAA;AAApC,GAAR,CAA9B,GAAqF,SAAzF,MAAmG,IAAnG,IAAmG,EAAA,KAAA,KAAA,CAAnG,GAAmG,EAAnG,GAAuG,CAAjH;AACA,EAAA,UAAU,GAAG,UAAU,IAAI;AAAC,KAAC,aAAD,GAAiB,cAAc,CAAC,IAAD,EAAO,aAAP,EAAsB,SAAtB,EAAiC,KAAjC,EAAwC,MAAxC,EAAgD,IAAhD;AAAhC,GAA3B;AAEA;;;;;;;;AASA,QAAM,MAAM,GAAG,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,GAAP,CAAW,MAAX,CAAA,MAAuB,MAAvB,IAAiC,EAAE,UAAU,UAAU,CAAC,aAAD,CAAtB,CAAhD;AAEA,QAAM,SAAS,GAAG,6CAAyB,OAAzB,EAAkC,OAAlC,EAA2C,MAA3C,EAAmD,MAAM,GAAG,QAAH,GAAc,KAAvE,CAAlB;AACA,QAAM,MAAM,GAAG,uBAAU,OAAV,EAAmB,OAAnB,CAAf;AAEA,QAAM,MAAM,GAAG,GAAG,CAAC,kCAAJ,CAAuC;AACpD,IAAA,OADoD;AAEpD,IAAA,UAAU,EAAE,QAFwC;AAGpD,IAAA,OAHoD;AAIpD,IAAA,MAJoD;AAKpD,IAAA,SALoD;AAMpD,IAAA,KANoD;AAOpD,IAAA,KAPoD;AAQpD,IAAA,MARoD;AASpD,IAAA,UAAU,EAAE,4CAAwB;AAAC,MAAA,KAAD;AAAQ,MAAA,UAAU,EAAE,KAApB;AAA2B,MAAA,OAA3B;AAAoC,MAAA,SAApC;AAA+C,MAAA;AAA/C,KAAxB,CATwC;AAUpD,IAAA,IAAI,EAAE,MAAM,GAAG,GAAH,GAAS,CAAC,IAAI,IAAL,IAAa;AAVkB,GAAvC,CAAf;;AAaA,MAAI,aAAJ,EAAmB;AACjB,WAAA,MAAA,CAAA,MAAA,CAAA;AAAQ,OAAC,SAAD,GAAa;AAArB,KAAA,EAAgC,UAAhC,CAAA;AACD,GAFD,MAEO;AACL;AACA;AACA,UAAM,UAAU,GAAG,mCAAqB,QAArB,CAAnB;AACA,UAAM,OAAO,GAAG,UAAU,CAAC,aAAD,CAA1B;AACA,UAAM,UAAU,GAAG,MAAM,GAAE,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,OAAL,CAAA,EAAY;AAAE,MAAA;AAAF,KAAZ,CAAF,GAA0B,OAAnD;AACA,WAAO;AACL,OAAC,SAAD,GAAa,MADR;AAGL;AACA,OAAC,UAAD,GAAc,uBAAQ,MAAR,IACV,CAAC,MAAM,CAAC,CAAD,CAAP,EAAU,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,MAAM,CAAC,CAAD,CAAZ,CAAA,EAAe;AAAE,QAAA,MAAM,EAAE;AAAV,OAAf,CAAV,CADU,GAEX,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,MADN,CAAA,EACY;AACT,QAAA,MAAM,EAAE;AADC,OADZ;AANE,KAAP;AAWD;AACF;;AAED,SAAS,aAAT,CACE,OADF,EAEE,OAFF,EAGE,OAHF,EAIE,SAJF,EAKE,MALF,EAK4B;AAE1B,MAAI,qCAAuB,OAAvB,CAAJ,EAAqC;AACnC,WAAO,CAAP;AACD;;AAED,QAAM,aAAa,GAAG,OAAO,KAAK,GAAZ,IAAmB,OAAO,KAAK,IAA/B,GAAsC,CAAC,OAAD,GAAW,CAAjD,GAAqD,OAAO,GAAG,CAArF;;AAEA,MAAI,uBAAY,OAAZ,CAAJ,EAA0B;AACxB,UAAM,UAAU,GAAG,iCAAoB,MAApB,CAAnB;AACA,WAAO;AACL,MAAA,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,UAAT,GAAsB,EAAE,MAC3F,SAAS,GAAG,aACd,GAAG,UAAU,GAAG,MAAM,UAAT,GAAsB,EAAE;AAHhC,KAAP;AAKD,GAPD,MAOO;AACL,QAAI,uBAAY,MAAZ,CAAJ,EAAyB;AACvB,YAAM,yBAAyB,GAAG,SAAS,IAAI,OAAO,GAAG,CAAC,aAAJ,GAAoB,aAA/B,CAA3C;AACA,aAAO;AACL,QAAA,MAAM,EAAE,GAAG,yBAAyB,IAAI,EAAE,GAAG,OAAO,GAAG,KAAH,GAAW,yBAAyB,GAAG,KAAH,GAAW,EAAE,GACnG,MAAM,CAAC,MACT;AAHK,OAAP;AAKD;;AACD,IAAA,MAAM,GAAG,MAAM,IAAI,CAAnB;AACA,WAAO,SAAS,IAAI,OAAO,GAAG,CAAC,MAAD,GAAU,aAAb,GAA6B,CAAC,MAAD,GAAU,aAAlD,CAAhB;AACD;AACF;;AAEK,SAAU,eAAV,CAA0B;AAC9B,EAAA,QAD8B;AAE9B,EAAA,SAF8B;AAG9B,EAAA,OAH8B;AAI9B,EAAA,IAJ8B;AAK9B,EAAA,SAL8B;AAM9B,EAAA,OAN8B;AAO9B,EAAA,OAAO,GAAG,CAPoB;AAQ9B,EAAA,aAR8B;AAS9B,EAAA,OAT8B;AAU9B,EAAA;AAV8B,CAA1B,EAsBL;AACC,QAAM,QAAQ,GAAG,uCAAyB,OAAzB,CAAjB;AAEA,QAAM,SAAS,GAAG,mCAAqB,OAArB,CAAlB;AACA,QAAM,UAAU,GAAG,mCAAqB,QAArB,CAAnB;AAEA,QAAM,MAAM,GAAG,uBAAU,OAAV,EAAmB,OAAnB,CAAf;;AAEA,MAAI,oBAAU,QAAQ,CAAC,GAAnB,KAA2B,QAAQ,CAAC,QAAxC,EAAkD;AAChD,WAAO;AACL,OAAC,UAAD,GAAc,UAAU,CAAC;AACvB,QAAA,OADuB;AAEvB,QAAA,QAFuB;AAGvB,QAAA,SAHuB;AAIvB,QAAA,OAJuB;AAKvB,QAAA,IAAI,EAAE,CAAC,IAAI,IAAL,IAAa,CALI;AAMvB,QAAA,MAAM,EAAE,aAAa,CAAC,QAAD,EAAW,OAAX,EAAoB,OAApB,EAA6B,aAA7B,EAA4C,MAA5C,CANE;AAOvB,QAAA;AAPuB,OAAD,CADnB;AAUL,OAAC,SAAD,GAAa,UAAU,CAAC;AACtB,QAAA,OADsB;AAEtB,QAAA,QAFsB;AAGtB,QAAA,SAHsB;AAItB,QAAA,OAJsB;AAKtB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAL,IAAa,CALD;AAMtB,QAAA,MAAM,EAAE,aAAa,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,aAA5B,EAA2C,MAA3C,CANC;AAOtB,QAAA;AAPsB,OAAD;AAVlB,KAAP;AAoBD,GArBD,MAqBO,IAAI,mBAAS,QAAQ,CAAC,GAAlB,CAAJ,EAA4B;AACjC,UAAM,QAAQ,GAAG,GAAG,CAAC,0BAAJ,CACf,QADe,EAEf,SAFe,EAGf,EAHe,EAIf;AAAC,MAAA,MAAM,EAAE,aAAa,CAAC,QAAD,EAAW,OAAX,EAAoB,OAApB,EAA6B,aAA7B,EAA4C,MAA5C;AAAtB,KAJe,CAAjB;;AAOA,QAAI,4BAAW,SAAX,CAAJ,EAA2B;AACzB,aAAO;AACL,SAAC,UAAD,GAAc,QADT;AAEL,SAAC,SAAD,GAAa,GAAG,CAAC,0BAAJ,CACX,SADW,EAEX,SAFW,EAGX,EAHW,EAIX;AAAC,UAAA,MAAM,EAAE,aAAa,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,aAA5B,EAA2C,MAA3C;AAAtB,SAJW;AAFR,OAAP;AASD,KAVD,MAUO,IAAI,sBAAY,QAAQ,CAAC,GAArB,KAA6B,QAAQ,CAAC,GAAT,CAAa,IAA9C,EAAoD;AACzD,aAAO;AACL,SAAC,UAAD,GAAc,QADT;AAEL,SAAC,SAAD,GAAa;AACX,UAAA,MAAM,EAAE,UAAU,SAAS,MAAM,yBAAQ,QAAR,EAAkB;AAAC,YAAA,IAAI,EAAE;AAAP,WAAlB,CAAkC,MAAM,QAAQ,CAAC,GAAT,CAAa,IAAI,GAD/E;AAEX,UAAA,MAAM,EAAE,aAAa,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,aAA5B,EAA2C,MAA3C;AAFV;AAFR,OAAP;AAOD;AACF;;AACD,EAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,wBAAZ,CAAqC,QAArC,CAAT;AACA,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,UAAV,CAAqB;AACzB,EAAA,OADyB;AAEzB,EAAA,QAFyB;AAGzB,EAAA,SAHyB;AAIzB,EAAA,OAJyB;AAKzB,EAAA,IALyB;AAMzB,EAAA,MANyB;AAOzB,EAAA;AAPyB,CAArB,EAgBL;AACC,QAAM,CAAC,GAAG,GAAG,CAAC,qBAAJ,CAA0B;AAClC,IAAA,SADkC;AAElC,IAAA,eAAe,EAAE,QAFiB;AAGlC,IAAA,IAHkC;AAIlC,IAAA;AAJkC,GAA1B,CAAV;AAOA,SAAO,GAAG,CAAC,uBAAJ,CAA4B;AACjC,IAAA,QADiC;AAEjC,IAAA,OAFiC;AAGjC,IAAA,OAHiC;AAIjC,IAAA,GAAG,EAAE,CAJ4B;AAKjC,IAAA;AALiC,GAA5B,CAAP;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzWD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AAEA;;AACA;;AACA;;AAMA,MAAM,aAAa,GAAG,IAAI,GAAJ,CAAQ,CAAC,MAAD,CAAR,CAAtB;;AAEM,SAAU,eAAV,CAA0B,KAA1B,EAA4C,MAA5C,EAA0D;AAC9D,QAAM;AAAC,IAAA,IAAI,GAAG,SAAR;AAAmB,IAAA,MAAM,GAAG;AAA5B,MAAyC,MAAM,CAAC,KAAP,KAAiB,SAAjB,GAA6B,kBAAM,KAAN,CAA7B,GAA4C,EAA3F;AACA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,iBAAiB,CAAC,KAAK,CAAC,OAAP,EAAgB,MAAhB,CADtB,CAAA,EAEK,oBAAoB,CAAC,KAAD,EAAQ,MAAR,EAAgB,IAAhB,CAFzB,CAAA,EAGK,oBAAoB,CAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,CAHzB,CAAA,EAIK,8BAAY,SAAZ,EAAuB,KAAvB,CAJL,CAAA,EAKK,8BAAY,aAAZ,EAA2B,KAA3B,CALL,CAAA,EAMK,8BAAY,eAAZ,EAA6B,KAA7B,CANL,CAAA,EAOK,8BAAY,aAAZ,EAA2B,KAA3B,CAPL,CAAA,EAQK,8BAAY,YAAZ,EAA0B,KAA1B,CARL,CAAA,EASK,sBAAQ,KAAR,CATL,CAAA,EAUK,gBAAK,KAAL,EAAY,MAAZ,CAVL,CAAA,EAWK,gBAAK,KAAL,CAXL,CAAA;AAaD,EAED;;;AACA,SAAS,oBAAT,CAA8B,KAA9B,EAAgD,OAAhD,EAAkE,QAAlE,EAAqG;AACnG,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA,IAAT;AAAe,IAAA;AAAf,MAA0B,KAAhC;AAEA,QAAM,OAAO,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAhB;;AAEA,MAAI,OAAO,KAAK,MAAZ,IAAsB,QAAtB,IAAkC,CAAC,sBAAW,IAAX,CAAvC,EAAyD;AACvD;AACA;AACA,UAAM,IAAI,GAAG,yBAAyB,CAAC,KAAD,EAAQ;AAAC,MAAA,OAAO,EAAE,IAAV;AAAgB,MAAA,QAAQ,EAAE;AAA1B,KAAR,CAAtC;;AACA,QAAI,IAAJ,EAAU;AACR,aAAO;AACL,SAAC,OAAD,GAAW,CACT;AACA;AACA;AAAC,UAAA,IAAD;AAAO,UAAA,KAAK,EAAE;AAAd,SAHS,EAIT,GAAG,qBAAM,QAAN,CAJM;AADN,OAAP;AAQD;AACF;;AACD,SAAO,QAAQ,GAAG;AAAC,KAAC,OAAD,GAAW;AAAZ,GAAH,GAA2B,EAA1C;AACD;;AAED,SAAS,iBAAT,CAA2B,IAA3B,EAA0C,MAA1C,EAAwD;AACtD,SAAO,sBAAgB,MAAhB,CAAuB,CAAC,CAAD,EAAI,IAAJ,KAAY;AACxC,QAAI,CAAC,aAAa,CAAC,GAAd,CAAkB,IAAlB,CAAD,IAA4B,IAAI,CAAC,IAAD,CAAJ,KAAe,SAA3C,IAAwD,MAAM,CAAC,IAAD,CAAN,KAAiB,QAA7E,EAAuF;AACrF,MAAA,CAAC,CAAC,IAAD,CAAD,GAAU,8BAAiB,IAAI,CAAC,IAAD,CAArB,CAAV;AACD;;AACD,WAAO,CAAP;AACD,GALM,EAKJ,EALI,CAAP;AAMD;;AAED,SAAS,yBAAT,CACE,KADF,EAEE;AAAC,EAAA,OAAO,GAAG,KAAX;AAAkB,EAAA;AAAlB,CAFF,EAE4E;AAE1E,QAAM,WAAW,GAAG,QAAQ,CAAC,MAAT,CAAgB,CAAC,UAAD,EAAyB,OAAzB,KAAoC;AACtE,UAAM,cAAc,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAvB;;AACA,QAAI,cAAJ,EAAoB;AAClB,YAAM,SAAS,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAlB;AACA,YAAM,KAAK,GAAG,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAvB,CAAd,CAFkB,CAIlB;;AACA,UAAI,KAAK,IAAI,gCAAoB,SAApB,CAAb,EAA6C;AAC3C,QAAA,UAAU,CAAC,KAAD,CAAV,GAAoB,IAApB;AACD;AACF;;AACD,WAAO,UAAP;AACD,GAZmB,EAYjB,EAZiB,CAApB;AAcA,QAAM,MAAM,GAAG,gBAAK,WAAL,CAAf;;AACA,MAAI,MAAM,CAAC,MAAP,GAAgB,CAApB,EAAuB;AACrB,UAAM,EAAE,GAAG,OAAO,GAAG,IAAH,GAAU,IAA5B;AACA,WAAO,MAAM,CAAC,GAAP,CAAW,KAAK,IAAI,qCAAsB,KAAtB,EAA6B,OAA7B,CAApB,EAA2D,IAA3D,CAAgE,IAAI,EAAE,GAAtE,CAAP;AACD;;AACD,SAAO,SAAP;AACD;;;;;;;;;;ACtGD;;AAGA;;AACA;;AAEA;;AAEA;;AAEM,SAAU,OAAV,CAAkB,KAAlB,EAAkC;AACtC,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAoB,KAA1B;AAEA,QAAM,OAAO,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAhB;;AACA,MAAI,OAAJ,EAAa;AACX,UAAM,MAAM,GAAG,yBAAyB,CAAC,KAAD,EAAQ;AAAC,MAAA,QAAQ,EAAE;AAAX,KAAR,CAAxC;;AAEA,QAAI,MAAJ,EAAY;AACV,aAAO;AAAC,QAAA,OAAO,EAAE;AAAC,UAAA;AAAD;AAAV,OAAP;AACD;AACF;;AACD,SAAO,EAAP;AACD;;AAED,SAAS,yBAAT,CACE,KADF,EAEE;AAAC,EAAA,OAAO,GAAG,KAAX;AAAkB,EAAA;AAAlB,CAFF,EAE4E;AAE1E,QAAM,WAAW,GAAG,QAAQ,CAAC,MAAT,CAAgB,CAAC,UAAD,EAAyB,OAAzB,KAAoC;AACtE,UAAM,cAAc,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAvB;;AACA,QAAI,cAAJ,EAAoB;AAClB,YAAM,SAAS,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAlB;AACA,YAAM,KAAK,GAAG,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAvB,CAAd,CAFkB,CAIlB;;AACA,UAAI,KAAK,IAAI,gCAAoB,SAApB,CAAb,EAA6C;AAC3C,QAAA,UAAU,CAAC,KAAD,CAAV,GAAoB,IAApB;AACD;AACF;;AACD,WAAO,UAAP;AACD,GAZmB,EAYjB,EAZiB,CAApB;AAcA,QAAM,MAAM,GAAG,gBAAK,WAAL,CAAf;;AACA,MAAI,MAAM,CAAC,MAAP,GAAgB,CAApB,EAAuB;AACrB,UAAM,EAAE,GAAG,OAAO,GAAG,IAAH,GAAU,IAA5B;AACA,WAAO,MAAM,CAAC,GAAP,CAAW,KAAK,IAAI,qCAAsB,KAAtB,EAA6B,OAA7B,CAApB,EAA2D,IAA3D,CAAgE,IAAI,EAAE,GAAtE,CAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,cAAV,CAAyB,IAAzB,EAAuC,KAAvC,EAAmD;AACvD,MAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,WAAO;AAAC,OAAC,IAAD,GAAQ,8BAAiB,KAAjB;AAAT,KAAP;AACD;;AACD,SAAO,SAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;ACVA;;AACA;;AACA;;;;;;AAGA,MAAM,OAAO,GAAG,SAAhB;AAEA,MAAM,OAAO,GAAsB;AACjC,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,IAAR,KAAiB,UAAjB,IAA+B,OAAO,CAAC,OAA9C;AACD,GAHgC;AAKjC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AACxB;AACA;AACA,QAAI,OAAO,CAAC,MAAZ,EAAoB;AAClB,WAAK,MAAM,CAAX,IAAgB,OAAO,CAAC,MAAxB,EAAgC;AAC9B,QAAA,CAAC,CAAC,QAAF,GAAa,KAAK,CAAC,OAAN,CAAc,OAAd,CAAb;AACD;AACF;AACF,GAbgC;AAejC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,KAAjB,KAA0B;AAC/B,UAAM;AAAC,MAAA,CAAD;AAAI,MAAA;AAAJ,QAAS,OAAO,CAAC,OAAR,CAAgB,UAA/B;AACA,UAAM,QAAQ,GAAG,KAAK,CAAC,IAAvB;;AACA,QAAI,sBAAW,QAAX,CAAJ,EAA0B;AACxB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,8BAAZ,CAA2C,QAA3C,CAAT;AACA,aAAO,KAAP;AACD;;AAED,UAAM,OAAO,GAAG;AACd,MAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,CADQ;AAEd,MAAA,IAAI,EAAE,MAFQ;AAGd,MAAA,WAAW,EAAE,IAHC;AAId,MAAA,IAAI,EAAE;AAAC,QAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAAP,OAJQ;AAKd,MAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA;AACJ,UAAA,IAAI,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WADF;AAEJ,UAAA,WAAW,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WAFT;AAGJ,UAAA,MAAM,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WAHJ;AAIJ,UAAA,SAAS,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAJP,SAAA,EAKD,qBAAQ,KAAR,EAAe;AAAC,UAAA,YAAY,EAAE;AAAf,SAAf,CALC;AADA,OALM;AAcd,MAAA,SAAS,EAAE,CACT;AACE,QAAA,IAAI,EAAE,SADR;AAEE,QAAA,CAAC,EAAE;AAAC,UAAA,IAAI,EAAE,CAAC,IAAI,CAAC,CAAN,GAAU,oBAAV,GAAiC;AAAxC,SAFL;AAGE,QAAA,CAAC,EAAE;AAAC,UAAA,IAAI,EAAE,CAAC,IAAI,CAAC,CAAN,GAAU,oBAAV,GAAiC;AAAxC,SAHL;AAIE,QAAA,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAN,CAAuB,OAAvB,CAAD,EAAkC,KAAK,CAAC,gBAAN,CAAuB,QAAvB,CAAlC;AAJR,OADS;AAdG,KAAhB;AAwBA,QAAI,KAAK,GAAG,CAAZ;AACA,QAAI,MAAM,GAAG,KAAb;AACA,IAAA,KAAK,CAAC,OAAN,CAAc,CAAC,IAAD,EAAO,CAAP,KAAY;;;AACxB,YAAM,IAAI,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,IAAR,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAA1B;;AACA,UAAI,IAAI,KAAK,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,CAArB,EAAwB,IAArC,EAA2C;AACzC,QAAA,KAAK,GAAG,CAAR;AACD,OAFD,MAEO,IAAI,IAAI,CAAC,OAAL,CAAa,OAAb,KAAyB,CAA7B,EAAgC;AACrC,QAAA,MAAM,GAAG,IAAT;AACD;AACF,KAPD;;AASA,QAAI,CAAC,MAAL,EAAa;AACX,MAAA,KAAK,CAAC,MAAN,CAAa,KAAK,GAAG,CAArB,EAAwB,CAAxB,EAA2B,OAA3B;AACD;;AAED,WAAO,KAAP;AACD;AA/DgC,CAAnC;eAkEe;;;;;;;;;;ACxEf;;AAEA;;;AAGM,MAAgB,YAAhB,CAA4B;AAOhC,EAAA,WAAA,CAAY,MAAZ,EAAkD,SAAlD,EAAoE;AAAlB,SAAA,SAAA,GAAA,SAAA;AAN1C,SAAA,SAAA,GAA4B,EAA5B;AAEA,SAAA,OAAA,GAAwB,IAAxB;;AAKN,QAAI,MAAJ,EAAY;AACV,WAAK,MAAL,GAAc,MAAd;AACD;AACF;AAED;;;;;AAGO,EAAA,KAAK,GAAA;AACV,UAAM,IAAI,KAAJ,CAAU,mBAAV,CAAN;AACD;;AAiBD,MAAI,MAAJ,GAAU;AACR,WAAO,KAAK,OAAZ;AACD;AAED;;;;;AAGA,MAAI,MAAJ,CAAW,MAAX,EAA+B;AAC7B,SAAK,OAAL,GAAe,MAAf;;AACA,QAAI,MAAJ,EAAY;AACV,MAAA,MAAM,CAAC,QAAP,CAAgB,IAAhB;AACD;AACF;;AAED,MAAI,QAAJ,GAAY;AACV,WAAO,KAAK,SAAZ;AACD;;AAEM,EAAA,WAAW,GAAA;AAChB,WAAO,KAAK,SAAL,CAAe,MAAtB;AACD;;AAEM,EAAA,QAAQ,CAAC,KAAD,EAAsB,GAAtB,EAAkC;AAC/C;AACA,QAAI,KAAK,SAAL,CAAe,OAAf,CAAuB,KAAvB,IAAgC,CAAC,CAArC,EAAwC;AACtC,MAAA,OAAO,CAAC,IAAR,CAAa,sCAAb;AACA;AACD;;AAED,QAAI,GAAG,KAAK,SAAZ,EAAuB;AACrB,WAAK,SAAL,CAAe,MAAf,CAAsB,GAAtB,EAA2B,CAA3B,EAA8B,KAA9B;AACD,KAFD,MAEO;AACL,WAAK,SAAL,CAAe,IAAf,CAAoB,KAApB;AACD;AACF;;AAEM,EAAA,WAAW,CAAC,QAAD,EAAuB;AACvC,UAAM,GAAG,GAAG,KAAK,SAAL,CAAe,OAAf,CAAuB,QAAvB,CAAZ;;AACA,SAAK,SAAL,CAAe,MAAf,CAAsB,GAAtB,EAA2B,CAA3B;;AACA,WAAO,GAAP;AACD;AAED;;;;;AAGO,EAAA,MAAM,GAAA;AACX,QAAI,GAAG,GAAG,KAAK,OAAL,CAAa,WAAb,CAAyB,IAAzB,CAAV;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,SAAzB,EAAoC;AAClC;AACA,MAAA,KAAK,CAAC,OAAN,GAAgB,KAAK,OAArB;;AACA,WAAK,OAAL,CAAa,QAAb,CAAsB,KAAtB,EAA6B,GAAG,EAAhC;AACD;AACF;AAED;;;;;AAGO,EAAA,gBAAgB,CAAC,KAAD,EAAoB;AACzC,UAAM,MAAM,GAAG,KAAK,CAAC,MAArB;AACA,IAAA,MAAM,CAAC,WAAP,CAAmB,IAAnB;AACA,SAAK,MAAL,GAAc,MAAd;AACA,IAAA,KAAK,CAAC,MAAN,GAAe,IAAf;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,UAAM,MAAM,GAAG,KAAK,OAApB;AACA,UAAM,SAAS,GAAG,MAAM,CAAC,MAAzB,CAFmB,CAInB;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,SAAzB,EAAoC;AAClC,MAAA,KAAK,CAAC,MAAN,GAAe,MAAf;AACD,KAPkB,CASnB;;;AACA,SAAK,SAAL,GAAiB,EAAjB,CAVmB,CAUE;;AACrB,IAAA,MAAM,CAAC,WAAP,CAAmB,IAAnB;AACA,IAAA,MAAM,CAAC,MAAP,CAAc,WAAd,CAA0B,MAA1B,EAZmB,CAcnB;;AACA,SAAK,MAAL,GAAc,SAAd;AACA,IAAA,MAAM,CAAC,MAAP,GAAgB,IAAhB;AACD;;AApH+B;;;;AAuH5B,MAAO,UAAP,SAA0B,YAA1B,CAAsC;AAgB1C;;;;;AAKA,EAAA,WAAA,CACE,MADF,EAEE,MAFF,EAGkB,IAHlB,EAImB,SAJnB,EAI0C;AAExC,UAAM,MAAN,EAAc,MAAd;AAHgB,SAAA,IAAA,GAAA,IAAA;AACC,SAAA,SAAA,GAAA,SAAA;AAIjB,SAAK,OAAL,GAAe,KAAK,KAAL,GAAa,MAA5B;;AAEA,QAAI,KAAK,SAAL,IAAkB,EAAE,KAAK,KAAL,IAAc,KAAK,SAArB,CAAtB,EAAuD;AACrD,WAAK,SAAL,CAAe,KAAK,KAApB,IAA6B,CAA7B;AACD;AACF;;AA7BM,EAAA,KAAK,GAAA;AACV,UAAM,QAAQ,GAAG,IAAK,KAAK,WAAV,EAAjB;AACA,IAAA,QAAQ,CAAC,SAAT,GAAqB,WAAW,KAAK,SAArC;AACA,IAAA,QAAQ,CAAC,OAAT,GAAmB,KAAK,OAAxB;AACA,IAAA,QAAQ,CAAC,KAAT,GAAiB,WAAW,KAAK,KAAjC;AACA,IAAA,QAAQ,CAAC,IAAT,GAAgB,KAAK,IAArB;AACA,IAAA,QAAQ,CAAC,SAAT,GAAqB,KAAK,SAA1B;AACA,IAAA,QAAQ,CAAC,SAAT,CAAmB,QAAQ,CAAC,KAA5B,IAAqC,CAArC;AACA,WAAO,QAAP;AACD;;AAsBM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,QAAI,KAAK,KAAL,KAAe,SAAnB,EAA8B;AAC5B,WAAK,KAAL,GAAa,UAAU,qBAAU,EAAjC;AACD;;AACD,WAAO,KAAK,KAAZ;AACD;AAED;;;;;;;;;;;AASO,EAAA,SAAS,GAAA;AACd,SAAK,SAAL,CAAe,KAAK,KAApB;AACA,WAAO,KAAK,OAAZ;AACD;;AAEM,EAAA,UAAU,GAAA;AACf,WAAO,CAAC,CAAC,KAAK,SAAL,CAAe,KAAK,KAApB,CAAT;AACD;;AAEM,EAAA,SAAS,CAAC,MAAD,EAAe;AAC7B,SAAK,OAAL,GAAe,MAAf;AACD;;AAvEyC;;;;;;;;;;;;;AC5H5C;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAOM,MAAO,YAAP,SAA4B,sBAA5B,CAAwC;AAK5C,EAAA,WAAA,CAAY,MAAZ,EAA0C,OAA1C,EAA0E;AACxE,UAAM,MAAN;AADwC,SAAA,OAAA,GAAA,OAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,YAAJ,CAAiB,IAAjB,EAAuB,qBAAU,KAAK,OAAf,CAAvB,CAAP;AACD;;AAMM,SAAO,gBAAP,CAAwB,MAAxB,EAA8C,KAA9C,EAAmE;AACxE,UAAM,OAAO,GAAG,KAAK,CAAC,cAAN,CAAqB,CAAC,iBAAD,EAAuC,QAAvC,EAAiD,OAAjD,KAA4D;AAC/F,YAAM;AAAC,QAAA,KAAD;AAAQ,QAAA;AAAR,UAAoB,QAA1B;AAEA,YAAM,WAAW,GAAG,wBAAY,KAAZ,IAAqB,KAAK,CAAC,QAAN,CAAe,uCAAyB,OAAzB,CAAf,CAArB,GAAyE,SAA7F;AAEA,YAAM,IAAI,GACR,wBAAY,KAAZ,KAAsB,yBAAQ,OAAR,EAAiB,QAAjB,EAA2B,WAA3B,EAAwC,KAAK,CAAC,KAA9C,EAAqD,KAAK,CAAC,OAA3D,EAAoE,KAAK,CAAC,MAA1E,CADxB;;AAGA,UAAI,QAAJ,EAAc;AACZ,cAAM,EAAE,GAAG,yBAAQ,QAAR,EAAkB;AAAC,UAAA,KAAK,EAAE;AAAR,SAAlB,CAAX;AACA,QAAA,iBAAiB,CACf,gBAAK;AACH,UAAA,EADG;AAEH,UAAA,KAFG;AAGH,UAAA;AAHG,SAAL,CADe,CAAjB,GAMC,MAAA,CAAA,MAAA,CAAA;AACC,UAAA,EADD;AAEC,UAAA,KAFD;AAGC,UAAA;AAHD,SAAA,EAIK,IAAI,GAAG;AAAC,UAAA,IAAI,EAAE;AAAP,SAAH,GAAkB,EAJ3B,CAND;AAYD;;AACD,aAAO,iBAAP;AACD,KAxBe,EAwBb,EAxBa,CAAhB;;AA0BA,QAAI,mBAAQ,OAAR,CAAJ,EAAsB;AACpB,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,YAAJ,CAAiB,MAAjB,EAAyB,OAAzB,CAAP;AACD;;AAEM,SAAO,iBAAP,CAAyB,MAAzB,EAA+C,CAA/C,EAAmE;AACxE,UAAM,EAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAA2B,CAA3B,CAAN;AAAA,UAAM;AAAC,MAAA;AAAD,QAAS,EAAf;AAAA,UAAoB,KAAK,GAAA,mBAAA,EAAA,EAAnB,CAAA,UAAA,CAAmB,CAAzB;;AAEA,UAAM,kBAAkB,GAAG,iCAAkB,QAAlB,CAA3B;AAEA,UAAM,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,KADU,CAAA,EACL;AACR,MAAA,QAAQ,EAAE;AADF,KADK,CAAf;AAKA,WAAO,IAAI,YAAJ,CAAiB,MAAjB,EAAyB;AAC9B,OAAC,gBAAK,SAAL,CAAD,GAAmB;AADW,KAAzB,CAAP;AAGD;AAED;;;;;;AAIO,EAAA,KAAK,CAAC,KAAD,EAAoB;AAC9B,SAAK,OAAL,GAAY,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,OAAZ,CAAZ,CAD8B,CAG9B;;AACA,SAAK,MAAM,GAAX,IAAkB,KAAK,CAAC,OAAxB,EAAiC;AAC/B,UAAI,CAAC,KAAK,OAAL,CAAa,GAAb,CAAD,IAAsB,KAAK,CAAC,OAAN,CAAc,GAAd,EAAmB,IAA7C,EAAmD;AACjD;AACA,aAAK,OAAL,CAAa,GAAb,IAAoB,KAAK,CAAC,OAAN,CAAc,GAAd,CAApB;AACD;AACF;;AAED,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,MAAA,KAAK,CAAC,WAAN,CAAkB,KAAlB;AACA,MAAA,KAAK,CAAC,MAAN,GAAe,IAAf;AACD;;AAED,IAAA,KAAK,CAAC,MAAN;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,OAAV,EAAmB,GAAnB,CAAuB,CAAC,IAAI,CAAC,CAAC,EAA9B,CAAR,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,OAAV,EAAmB,GAAnB,CAAuB,CAAC,IAAI,CAAC,CAAC,KAA9B,CAAR,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,YAAY,gBAAK,KAAK,OAAV,CAAkB,EAArC;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,UAAU,GAA0B,EAA1C;;AAEA,SAAK,MAAM,CAAX,IAAgB,gBAAK,KAAK,OAAV,CAAhB,EAAoC;AAClC,YAAM;AAAC,QAAA,KAAD;AAAQ,QAAA,EAAR;AAAY,QAAA;AAAZ,UAAwB,CAA9B;;AACA,YAAM,EAAA,GAAyB,iCAAkB,QAAlB,CAA/B;AAAA,YAAM;AAAC,QAAA,IAAD;AAAO,QAAA;AAAP,UAAU,EAAhB;AAAA,YAAqB,MAAM,GAAA,mBAAA,EAAA,EAArB,CAAA,MAAA,EAAA,KAAA,CAAqB,CAA3B;;AAEA,MAAA,UAAU,CAAC,IAAX,CAAe,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACb,QAAA,KAAK,EAAE,8BAAmB,KAAnB,CADM;AAEb,QAAA,IAAI,EAAE;AAFO,OAAA,EAGT,IAAI,GAAG;AAAC,QAAA,KAAK,EAAE,gCAAiB,IAAjB;AAAR,OAAH,GAAqC,EAHhC,CAAA,EAIT,GAAG,GAAG;AAAC,QAAA,QAAQ,EAAE;AAAX,OAAH,GAAuB,EAJjB,CAAA,EAKV,MALU,CAAA,EAKJ;AACT,QAAA,EAAE,EAAE,CAAC,EAAD,EAAK,GAAG,EAAE,MAAV;AADK,OALI,CAAf;AAQD;;AAED,WAAO,UAAP;AACD;;AA/G2C;;;;;;;;;;;;;ACd9C;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAGO,MAAM,YAAY,GAAG,eAArB;;;AAqBD,MAAO,4BAAP,CAAmC;AAMvC,EAAA,WAAA,CAAY,GAAG,KAAf,EAA2C;AACzC,SAAK,KAAL,GAAa,KAAb;AACA,SAAK,UAAL,GAAkB,EAAlB;AACA,SAAK,QAAL,GAAgB,EAAhB;AACD;;AAVsC;;;AAazC,MAAM,OAAO,GAAsB;AACjC,EAAA,GAAG,EAAE,MAAK;AACR,WAAO,IAAP,CADQ,CACK;AACd,GAHgC;AAKjC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,KAA2B;;;AAChC,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,IAAI,GAAA,CAAA,EAAA,GAAG,OAAO,CAAC,OAAX,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAuB,OAAO,CAAC,OAAR,GAAkB,IAAI,4BAAJ,EAAnD;AACA,UAAM,MAAM,GAA8B,EAA1C;AACA,UAAM,SAAS,GAA4B,EAA3C;AAEA,UAAM,OAAO,GAAG,IAAI,GAAJ,EAAhB;;AACA,UAAM,UAAU,GAAG,CAAC,CAAD,EAAyB,KAAzB,KAAqD;AACtE,YAAM,MAAM,GAAG,KAAK,KAAK,QAAV,GAAqB,CAAC,CAAC,OAAvB,GAAiC,CAAC,CAAC,KAAlD;AACA,UAAI,EAAE,GAAG,mBAAQ,GAAG,IAAI,IAAI,MAAM,EAAzB,CAAT;;AACA,WAAK,IAAI,OAAO,GAAG,CAAnB,EAAsB,OAAO,CAAC,GAAR,CAAY,EAAZ,CAAtB,EAAuC,OAAO,EAA9C,EAAkD;AAChD,QAAA,EAAE,GAAG,mBAAQ,GAAG,IAAI,IAAI,MAAM,IAAI,OAAO,EAApC,CAAL;AACD;;AACD,MAAA,OAAO,CAAC,GAAR,CAAY,EAAZ;AACA,aAAO;AAAC,SAAC,KAAD,GAAS;AAAV,OAAP;AACD,KARD,CAPgC,CAiBhC;AACA;AACA;;;AACA,QAAI,CAAC,MAAM,CAAC,MAAR,IAAkB,CAAC,MAAM,CAAC,SAA9B,EAAyC;AACvC,YAAM,GAAG,GAAG,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,MAAM,CAAC,IAA9B,CAAZ;;AAEA,UAAI,MAAM,CAAC,IAAX,EAAiB;AACf,aAAK,MAAM,IAAX,IAAmB,qBAAM,MAAM,CAAC,IAAb,CAAnB,EAAuC;AACrC,eAAK,MAAM,GAAX,IAAkB,gBAAK,IAAL,CAAlB,EAA8B;AAC5B,gBAAI,qCAAuB,GAAvB,CAAJ,EAAiC;AAC/B,eAAC,MAAM,CAAC,SAAP,KAAqB,MAAM,CAAC,SAAP,GAAmB,EAAxC,CAAD,EAA8C,IAA9C,CAAmD,GAAnD;AACD,aAFD,MAEO;AACL,kBAAI,MAAM,CAAC,IAAP,KAAgB,UAApB,EAAgC;AAC9B,gBAAA,GAAG,CAAC,IAAJ,CAAS,sEAAT;AACA,gBAAA,MAAM,CAAC,SAAP,GAAmB,GAAG,CAAC,SAAvB;AACD,eAHD,MAGO;AACL,iBAAC,MAAM,CAAC,MAAP,KAAkB,MAAM,CAAC,MAAP,GAAgB,EAAlC,CAAD,EAAwC,IAAxC,CAA6C,GAA7C;AACD;AACF;AACF;AACF;AACF,OAfD,MAeO;AACL,QAAA,MAAM,CAAC,SAAP,GAAmB,GAAG,CAAC,SAAvB;AACA,QAAA,MAAM,CAAC,MAAP,GAAgB,GAAG,CAAC,MAApB;AACD;AACF,KA1C+B,CA4ChC;;;AACA,SAAK,MAAM,KAAX,IAAgB,CAAA,EAAA,GAAI,MAAM,CAAC,MAAX,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,EAAjB,GAAqB,EAArC,EAAyC;AACvC,YAAM,CAAC,GAAwB;AAAC,QAAA,IAAI,EAAE,GAAP;AAAY,QAAA;AAAZ,OAA/B;AACA,MAAA,CAAC,CAAC,OAAF,GAAS,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,UAAU,CAAC,CAAD,EAAI,MAAJ,CAAjB,CAAT;AACA,MAAA,IAAI,CAAC,KAAL,CAAW,IAAX,CAAgB,CAAhB;AACA,MAAA,IAAI,CAAC,QAAL,CAAc,KAAd,IAAuB,CAAvB;AACD;;AAED,SAAK,MAAM,OAAX,IAAkB,CAAA,EAAA,GAAI,MAAM,CAAC,SAAX,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,EAA1C,EAA8C;AAC5C,YAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAjB;;AACA,UAAI,QAAJ,EAAc;AACZ,YAAI,KAAK,GAAG,QAAQ,CAAC,KAArB;;AAEA,YAAI,QAAQ,CAAC,SAAb,EAAwB;AACtB,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,sBAAZ,CAAmC,OAAnC,EAA4C,QAAQ,CAAC,SAArD,CAAT;AACA;AACD,SAHD,MAGO,IAAI,CAAC,KAAL,EAAY;AACjB,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kCAAZ,CAA+C,OAA/C,CAAT;AACA;AACD;;AAED,YAAI,QAAQ,CAAC,QAAb,EAAuB;AACrB,UAAA,KAAK,GAAG,KAAK,CAAC,OAAN,CAAc,OAAd,CAAR,CADqB,CAErB;AACA;AACA;AACA;;AACA,gBAAM,SAAS,GAAG;AAChB,YAAA,QAAQ,EAAE,QAAQ,CAAC,QADH;AAEhB,YAAA,EAAE,EAAE,KAFY;AAGhB,YAAA,KAAK,EAAE,QAAQ,CAAC;AAHA,WAAlB;AAMA,UAAA,SAAS,CAAC,gBAAK,SAAL,CAAD,CAAT,GAA6B,SAA7B;AACD,SAxBW,CA0BZ;AACA;;;AACA,YAAI,CAAC,MAAM,CAAC,KAAD,CAAX,EAAoB;AAClB;AACA;AACA;AACA,cAAI,IAAI,GAAmB,GAA3B;;AACA,cAAI,OAAO,CAAC,IAAR,KAAiB,UAArB,EAAiC;AAC/B,kBAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,EAAiD,GAAjD,CAAqD,MAArD,CAAlB;;AACA,gBAAI,gCAAoB,SAApB,CAAJ,EAAoC;AAClC,cAAA,IAAI,GAAG,GAAP;AACD;AACF,WALD,MAKO,IAAI,QAAQ,CAAC,GAAb,EAAkB;AACvB,YAAA,IAAI,GAAG,MAAP;AACD;;AAED,gBAAM,CAAC,GAAwB;AAAC,YAAA,KAAD;AAAQ,YAAA,OAAR;AAAiB,YAAA;AAAjB,WAA/B;AACA,UAAA,CAAC,CAAC,OAAF,GAAS,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,UAAU,CAAC,CAAD,EAAI,MAAJ,CAAjB,CAAA,EAAiC,UAAU,CAAC,CAAD,EAAI,QAAJ,CAA3C,CAAT;AACA,UAAA,IAAI,CAAC,KAAL,CAAW,IAAX,CAAiB,MAAM,CAAC,KAAD,CAAN,GAAgB,CAAjC;AACA,UAAA,IAAI,CAAC,QAAL,CAAc,KAAd,IAAuB,IAAI,CAAC,UAAL,CAAgB,OAAhB,IAA2B,MAAM,CAAC,KAAD,CAAxD;AACD;AACF,OA/CD,MA+CO;AACL,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kCAAZ,CAA+C,OAA/C,CAAT;AACD;AACF;;AAED,QAAI,MAAM,CAAC,IAAX,EAAiB;AACf,YAAM,SAAS,GAAqD,CAAlD,IAAqE;AACrF,eAAO,IAAI,CAAC,KAAL,CAAW,GAAX,CAAe,CAAC,IAAK,CAAC,CAAC,CAAC,CAAC,OAAH,CAAD,KAAiB,SAAjB,GAA6B,CAAC,CAAC,CAAC,CAAC,OAAH,CAA9B,GAA4C,CAAC,CAAC,CAAC,CAAC,KAAH,CAAlE,CAAP;AACD,OAFD;;AAIA,UAAI,MAAM,CAAC,IAAP,KAAgB,UAApB,EAAgC;AAC9B,QAAA,OAAO,CAAC,IAAR,GAAe,SAAS,CAAC,MAAM,CAAC,IAAR,CAAxB;AACD,OAFD,MAEO;AACL,cAAM,IAAI,GAAG,qBAAM,MAAM,CAAC,IAAb,CAAb;AACA,QAAA,OAAO,CAAC,IAAR,GAAe,IAAI,CAAC,GAAL,CAAS,SAAT,CAAf;AACD;AACF;;AAED,QAAI,CAAC,mBAAQ,SAAR,CAAL,EAAyB;AACvB,MAAA,IAAI,CAAC,QAAL,GAAgB,IAAI,sBAAJ,CAAiB,IAAjB,EAAuB,SAAvB,CAAhB;AACD;AACF,GA/HgC;AAiIjC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,UAAjB,KAA+B;AACtC,UAAM,IAAI,GAAG,OAAO,CAAC,IAAR,GAAe,YAA5B;AACA,UAAM,SAAS,GAAG,UAAU,CAAC,MAAX,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAlC,CAAlB;AACA,WAAO,SAAS,CAAC,MAAV,GAAmB,CAAnB,GACH,UADG,GAEH,UAAU,CAAC,MAAX,CAAkB;AAChB,MAAA,IADgB;AAEhB,MAAA,KAAK,EAAE,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,GAAtB,CAA0B,IAAI,IAAG;AACtC,cAAM;AAAC,UAAA,OAAD;AAAU,UAAA;AAAV,YAAgC,IAAtC;AAAA,cAA8B,IAAI,GAAA,mBAAI,IAAJ,EAA5B,CAAA,SAAA,EAAA,WAAA,CAA4B,CAAlC;AACA,QAAA,IAAI,CAAC,KAAL,GAAa,8BAAmB,IAAI,CAAC,KAAxB,CAAb;AACA,eAAO,IAAP;AACD,OAJM;AAFS,KAAlB,CAFJ;AAUD;AA9IgC,CAAnC;eAiJe;;;;;;;;;;AC5Lf;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;AAEA,MAAM,aAAa,GAAsB;AACvC,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WACE,OAAO,CAAC,IAAR,KAAiB,QAAjB,IACA,OAAO,CAAC,OAAR,KAAoB,QADpB,IAEA,OAAO,CAAC,IAFR,IAGA,OAAO,CAAC,IAAR,KAAiB,QAHjB,IAIA,CAAC,gCAAgB,OAAO,CAAC,IAAxB,CALH;AAOD,GATsC;AAWvC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,EAAyB,OAAzB,KAAoC;AACzC;AACA;AACA,QAAI,CAAC,OAAO,CAAC,EAAb,EAAiB,OAAO,OAAO,CAAC,MAAf;AACjB,QAAI,CAAC,OAAO,CAAC,KAAb,EAAoB,OAAO,OAAO,CAAC,KAAf;AACrB,GAhBsC;AAkBvC,EAAA,eAAe,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AAC3C,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,OAArB;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,IAAR,IAAgB,OAAO,CAAC,IAAR,CAAa,CAAb,CAA7B,CAJ2C,CAIG;;AAC9C,UAAM,KAAK,GAAG,iBAAQ,GAAR,CAAY,OAAZ,IAAuB,0CAAvB,GAAoE,OAAlF;AAEA,IAAA,IAAI,CAAC,KAAL,CAAW,OAAX,CAAmB,CAAC,CAAD,EAAI,CAAJ,KAAS;;;AAC1B,YAAM,MAAM,GAAG,mBAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,EAA1B,CAAf;AACA,YAAM,SAAS,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,MAA/B,CAAlB;;AAEA,UAAI,CAAC,SAAS,CAAC,MAAf,EAAuB;AACrB,QAAA,OAAO,CAAC,OAAR,CAAe,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACb,UAAA,IAAI,EAAE;AADO,SAAA,EAET,IAAI,GAAG;AAAC,UAAA,IAAI,EAAE,4BAAa,IAAI,CAAC,CAAD,CAAjB;AAAP,SAAH,GAAmC;AAAC,UAAA,KAAK,EAAE;AAAR,SAF9B,CAAA,EAE4C;AACzD,UAAA,EAAE,EAAE,OAAO,CAAC,MAAR,GACA,CACE;AACE,YAAA,MAAM,EAAE,OAAO,CAAC,MADlB;AAEE,YAAA,MAAM,EAAE,+CAA+C,KAAK,IAAI,2BAAY,CAAC,CAAC,KAAd,CAAoB;AAFtF,WADF,CADA,GAOA,EARqD;AASzD,UAAA,IAAI,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAE,IAAI,CAAC,CAAC,CAAC,KAAH,CAAN,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,IAAI,CAAC,CAAC,CAAC,OAAH,CAAvB,MAAkC,IAAlC,IAAkC,EAAA,KAAA,KAAA,CAAlC,GAAkC,EAAlC,GAAsC;AATe,SAF5C,CAAf;AAaD;AACF,KAnBD;AAqBA,WAAO,OAAP;AACD,GA/CsC;AAiDvC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,OAArB;AACA,UAAM,MAAM,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,GAAG,OAAtC,EAA6C,CAA7C,CAAf;AACA,UAAM,MAAM,GAAG,IAAI,GAAG,qBAAtB;AACA,UAAM,MAAM,GAAG,IAAI,CAAC,KAAL,CAAW,GAAX,CAAe,CAAC,IAAI,mBAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,EAA1B,CAApB,CAAf;AACA,UAAM,KAAK,GAAG,MAAM,CAAC,GAAP,CAAW,CAAC,IAAI,GAAG,CAAC,WAApB,EAAiC,IAAjC,CAAsC,MAAtC,CAAd;;AAEA,QAAI,MAAM,CAAC,MAAX,EAAmB;AACjB,MAAA,MAAM,CAAC,MAAP,GAAgB,GAAG,KAAK,eAAe,MAAM,cAAc,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAiB,WAA5E;AACD;;AAED,WAAO,MAAM,CAAC,KAAd;AACA,WAAO,MAAM,CAAC,EAAd;AAEA,WAAO,OAAP;AACD;AAjEsC,CAAzC;eAoEe;;;;;;;;;;AC7Ef;;AAGO,MAAM,MAAM,GAAG,SAAf;;AAEP,MAAM,MAAM,GAAsB;AAChC,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,IAAR,KAAiB,OAAjB,IAA4B,CAAC,CAAC,OAAO,CAAC,MAA7C;AACD,GAH+B;AAKhC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,WAAO,OAAO,CAAC,MAAR,CAAe;AACpB,MAAA,IAAI,EAAE,OAAO,CAAC,IAAR,GAAe,MADD;AAEpB,MAAA,KAAK,EAAE,KAFa;AAGpB,MAAA,EAAE,EAAE,CAAC;AAAC,QAAA,MAAM,EAAE,OAAO,CAAC,MAAjB;AAAyB,QAAA,MAAM,EAAE,OAAO,CAAC;AAAzC,OAAD;AAHgB,KAAf,CAAP;AAKD,GAX+B;AAahC,EAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AAC7B,UAAM,GAAG,GAAG,OAAO,CAAC,IAAR,GAAe,OAA3B;AACA,UAAM,MAAM,GAAG,OAAO,CAAC,IAAR,GAAe,MAA9B;AAEA,WACE,GAAG,MAAM,aAAa,GAAG,IAAzB,IACC,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,GAAG,MAAM,kBAAxC,GAA6D,GAAG,MAAM,oBAAoB,gBAAS,KAAT,CAAe,KAD1G,IAEA,GAAG,MAAM,MAAM,GAAG,SAHpB;AAKD;AAtB+B,CAAlC;eAyBe;;;;;;;;;;AC7Bf;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAGA,MAAM,KAAK,GAAsB;AAC/B,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,KAAR,KAAkB,SAAlB,IAA+B,OAAO,CAAC,KAAR,KAAkB,KAAxD;AACD,GAH8B;AAK/B,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,KAA2B;AAChC,QAAI,MAAM,CAAC,KAAX,EAAkB;AAChB,MAAA,OAAO,CAAC,KAAR,GAAgB,wBAAS,MAAM,CAAC,KAAhB,IAAyB,iCAAc,MAAM,CAAC,KAArB,EAA4B,OAA5B,CAAzB,GAAgE,MAAM,CAAC,KAAvF;AACD;AACF,GAT8B;AAW/B,EAAA,eAAe,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AAC3C,QAAI,gBAAc,GAAd,CAAkB,OAAlB,CAAJ,EAAgC;AAC9B,WAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,OAAR,CAAgB,KAAnC,EAA0C;AACxC,cAAM,GAAG,GAAG,OAAO,CAAC,SAAR,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,mBAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAArC,CAAlC,CAAZ;;AACA,YAAI,GAAG,KAAK,CAAC,CAAb,EAAgB;AACd,UAAA,OAAO,CAAC,GAAD,CAAP,CAAa,EAAb,CAAgB,IAAhB,CAAqB;AAAC,YAAA,MAAM,EAAE,OAAO,CAAC,KAAjB;AAAwB,YAAA,MAAM,EAAE;AAAhC,WAArB;AACD;AACF;AACF;;AAED,WAAO,OAAP;AACD,GAtB8B;AAwB/B,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,aAAS,QAAT,CAAkB,GAAlB,EAA+B,MAA/B,EAA6C;AAC3C,UAAI,GAAG,KAAK,CAAC,CAAT,IAAc,OAAO,CAAC,GAAD,CAAP,CAAa,EAA/B,EAAmC;AACjC,QAAA,OAAO,CAAC,GAAD,CAAP,CAAa,EAAb,CAAgB,IAAhB,CAAqB;AAAC,UAAA,MAAM,EAAE,OAAO,CAAC,KAAjB;AAAwB,UAAA;AAAxB,SAArB;AACD;AACF,KALkC,CAOnC;;;AACA,QAAI,OAAO,CAAC,IAAR,KAAiB,UAArB,EAAiC;AAC/B,WAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,OAAR,CAAgB,KAAnC,EAA0C;AACxC,cAAM,IAAI,GAAG,OAAO,CAAC,SAAR,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,MAA/C,CAAb;AACA,QAAA,QAAQ,CAAC,IAAD,EAAO,QAAP,CAAR;;AAEA,YAAI,IAAI,KAAK,CAAC,CAAd,EAAiB;AACf,gBAAM,IAAI,GAAG,OAAO,CAAC,SAAR,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,IAA/C,CAAb;AACA,UAAA,QAAQ,CAAC,IAAD,EAAO,MAAP,CAAR;AACD;AACF;AACF,KAVD,MAUO;AACL,UAAI,IAAI,GAAG,OAAO,CAAC,SAAR,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,OAAO,CAAC,IAAR,GAAe,OAAjD,CAAX;AACA,MAAA,QAAQ,CAAC,IAAD,EAAO,MAAP,CAAR;;AAEA,UAAI,gBAAO,GAAP,CAAW,OAAX,CAAJ,EAAyB;AACvB,QAAA,IAAI,GAAG,OAAO,CAAC,SAAR,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,OAAO,CAAC,IAAR,GAAe,cAAjD,CAAP;AACA,QAAA,QAAQ,CAAC,IAAD,EAAO,OAAP,CAAR;AACD;AACF;;AAED,WAAO,OAAP;AACD;AArD8B,CAAjC;eAwDe;;;;;;;;;;;ACjEf;;AACA;;AACA;;AACA;;AACA;;AAIA;;;;;;AAEA,MAAM,aAAa,GAAsB;AACvC,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,IAAR,KAAiB,UAAjB,IAA+B,OAAO,CAAC,OAAR,KAAoB,QAAnD,IAA+D,OAAO,CAAC,IAAvE,IAA+E,OAAO,CAAC,IAAR,KAAiB,QAAvG;AACD,GAHsC;AAKvC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AACxB,UAAM,KAAK,GAA2B,OAAO,CAAC,MAAR,GAAiB,EAAvD;;AAEA,SAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,OAAR,CAAgB,KAAnC,EAA0C;AACxC,YAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AAEA,UAAI,CAAC,6BAAe,OAAf,CAAL,EAA8B;AAC5B;AACD;;AAED,YAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAd;AACA,YAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,GAAN,CAAU,MAAV,CAAH,GAAuB,SAA9C;;AAEA,UAAI,CAAC,KAAD,IAAU,CAAC,gCAAoB,SAApB,CAAf,EAA+C;AAC7C,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,yBAArB;AACA;AACD;;AAED,YAAM,MAAM,GAAG;AAAC,QAAA,SAAS,EAAE,OAAO,CAAC,IAApB;AAA0B,QAAA,KAAK,EAAE,IAAI,CAAC;AAAtC,OAAf;AACA,MAAA,KAAK,CAAC,GAAN,CAAU,iBAAV,EAA6B,MAA7B,EAAqC,IAArC;AACA,MAAA,KAAK,CAAC,IAAN,CAAW,IAAX;AACD;AACF,GA3BsC;AA6BvC,EAAA,eAAe,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AAC3C,UAAM,KAAK,GAAG,OAAO,CAAC,MAAR,CAAe,MAAf,CAAsB,IAAI,IAAI,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,IAA5C,EAAkD,MAAlD,KAA6D,CAA3F,CAAd,CAD2C,CAG3C;AACA;;AACA,QAAI,CAAC,KAAK,CAAC,MAAP,IAAiB,eAAe,CAAC,KAAD,CAAhC,IAA2C,KAAK,CAAC,MAAN,KAAiB,CAAhE,EAAmE;AACjE,aAAO,OAAP;AACD,KAP0C,CAS3C;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAM,OAAO,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,OAAO,CAAC,IAAvC,EAA6C,CAA7C,CAAhB;AACA,QAAI,MAAM,GAAG,OAAO,CAAC,MAArB;;AACA,QAAI,MAAM,CAAC,OAAP,CAAe,sBAAf,KAAwC,CAA5C,EAA+C;AAC7C,MAAA,OAAO,CAAC,MAAR,GAAiB,IAAI,KAAK,CAAC,GAAN,CAAU,IAAI,IAAI,GAAG,2BAAY,IAAI,CAAC,KAAjB,CAAuB,KAAK,IAAI,CAAC,OAAL,CAAa,IAAI,EAAlE,EAAsE,IAAtE,CAA2E,IAA3E,CAAgF,GAArG;AACD,KAFD,MAEO;AACL,WAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,cAAM,OAAO,GAAG,GAAG,2BAAY,IAAI,CAAC,KAAjB,CAAuB,KAAK,IAAI,CAAC,OAAL,CAAa,IAAI,EAAhE;;AACA,YAAI,MAAM,CAAC,OAAP,CAAe,OAAf,IAA0B,CAA9B,EAAiC;AAC/B,UAAA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAP,CAAiB,CAAjB,EAAoB,MAAM,CAAC,MAAP,GAAgB,CAApC,CAAsC,KAAK,OAAO,GAA9D;AACD;AACF;;AACD,MAAA,OAAO,CAAC,MAAR,GAAiB,MAAjB;AACD;;AAED,WAAO,OAAO,CAAC,MAAR,CAAe,KAAK,CAAC,GAAN,CAAU,IAAI,KAAK;AAAC,MAAA,IAAI,EAAE,IAAI,CAAC,OAAL,CAAa;AAApB,KAAL,CAAd,CAAf,CAAP;AACD,GA3DsC;AA6DvC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC;AACA,QAAI,KAAK,CAAC,MAAN,IAAgB,CAAC,eAAe,CAAC,KAAD,CAApC,EAA6C;AAC3C,WAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,MAA3B,EAAmC;AACjC,cAAM,MAAM,GAAQ,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,IAA5C,EAAkD,CAAlD,CAApB;AACA,QAAA,MAAM,CAAC,IAAP,GAAc,OAAd;AACA,eAAO,MAAM,CAAC,KAAd;AACA,eAAO,MAAM,CAAC,MAAd;AACD;AACF;;AAED,WAAO,OAAP;AACD;AAzEsC,CAAzC;eA4Ee;;;AAET,SAAU,MAAV,CAAiB,KAAjB,EAAmC,OAAnC,EAAmD;AACvD,QAAM,KAAK,GAAG,2BAAY,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAZ,CAAd;AACA,SAAO,UAAU,KAAK,GAAtB;AACD;;AAED,SAAS,eAAT,CAAyB,KAAzB,EAAqC;;;AACnC,SAAO,KAAK,CAAC,MAAN,IAAgB,yBAAa,KAAK,CAAC,MAAnB,CAAhB,KAA8C,CAAA,EAAA,GAAC,CAAC,KAAK,CAAC,MAAN,CAAa,MAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,eAAe,CAAC,KAAK,CAAC,MAAN,CAAa,MAAd,CAAtF,CAAP;AACD;;;;;;;;;;AC9FD;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAGA;;AACA;;;;;;AAGA,MAAM,cAAc,GAAsB;AACxC,EAAA,GAAG,EAAG,OAAD,IAAoD;AACvD,UAAM,IAAI,GAAG,OAAO,CAAC,OAAR,KAAoB,QAApB,IAAgC,OAAO,CAAC,IAAxC,IAAgD,gCAAgB,OAAO,CAAC,IAAxB,CAA7D;AACA,UAAM,OAAO,GAAG,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,MAAtB,KAAiC,CAAjC,IAAsC,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,CAAtB,EAAyB,KAAzB,KAAmC,uBAAzF;;AACA,QAAI,IAAI,IAAI,CAAC,OAAb,EAAsB;AACpB,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,8BAArB;AACD;;AAED,WAAO,IAAI,IAAI,OAAf;AACD,GATuC;AAWxC,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,EAAyB,OAAzB,KAAoC;WAAA,CACzC;AACA;;;AACA,QAAI,CAAC,OAAO,CAAC,EAAb,EAAiB,OAAO,OAAO,CAAC,MAAf;AACjB,QAAI,CAAC,OAAO,CAAC,KAAb,EAAoB,OAAO,OAAO,CAAC,KAAf;;AAEpB,QAAI,OAAO,CAAC,EAAR,IAAc,OAAO,CAAC,KAA1B,EAAiC;AAC/B,YAAM,YAAY,GAAG,2DAArB;;AACA,WAAK,MAAM,GAAX,IAAkB,OAAO,CAAC,MAA1B,EAAkC;AAChC,QAAA,GAAG,CAAC,MAAJ,GAAa,qBAAK,CAAA,EAAA,GAAC,GAAG,CAAC,MAAL,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,EAAX,GAAe,EAApB,CAAb;;AACA,YAAI,GAAG,CAAC,MAAJ,CAAW,OAAX,CAAmB,YAAnB,IAAmC,CAAvC,EAA0C;AACxC,UAAA,GAAG,CAAC,MAAJ,CAAW,IAAX,CAAgB,YAAhB;AACD;AACF;AACF;;AAED,UAAM,GAAG,GAAG,sCAAsB,OAAO,CAAC,IAA9B,IAAsC,OAAO,CAAC,IAAR,CAAa,MAAnD,GAA4D,OAAxE;AACA,UAAM,MAAM,GAAa,wBAAS,GAAT,IAAgB,iCAAc,GAAd,EAAmB,MAAnB,CAAhB,GAA6C,qBAAM,GAAN,CAAtE;AACA,IAAA,OAAO,CAAC,IAAR,GAAe;AAAC,MAAA,MAAM,EAAE;AAAC,QAAA,KAAK,EAAE;AAAR;AAAT,KAAf;AACD,GA9BuC;AAgCxC,EAAA,eAAe,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAyD,OAAzD,KAAoE;AACnF,UAAM,OAAO,GAAG,OAAO,CAAC,IAAxB;AACA,UAAM,MAAM,GAAG,sCAAsB,OAAO,CAAC,IAA9B,KAAwC,OAAO,CAAC,IAAR,CAAa,MAApE;;AACA,UAAM,QAAQ,GAAI,IAAD,IAAmB,CAAD,IAAc;AAC/C,YAAM,EAAE,GAAG,qBAAU,CAAV,CAAX;AACA,MAAA,EAAE,CAAC,QAAH,GAAc,IAAd;AACA,aAAO,EAAP;AACD,KAJD;;AAMA,SAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,OAAR,CAAgB,KAAnC,EAA0C;AACxC,UAAI,CAAC,IAAI,CAAC,SAAV,EAAqB;AACrB,YAAM,MAAM,GAAG,GAAG,mBAAQ,IAAI,CAAC,KAAb,CAAmB,SAArC;AACA,YAAM,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,EAAnC;AACA,YAAM,SAAS,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,MAA/B,CAAlB;;AAEA,UAAI,SAAS,CAAC,MAAV,KAAqB,CAAzB,EAA4B;AAC1B,cAAM,MAAM,GAAG,MAAM,CAAC,KAAP,CACZ,GADY,CACR,QAAQ,CAAC,GAAG,MAAM,UAAV,CADA,EAEZ,MAFY,CAEL,MAAM,CAAC,KAAP,CAAa,GAAb,CAAiB,QAAQ,CAAC,GAAG,MAAM,SAAV,CAAzB,CAFK,EAGZ,MAHY,CAGL,MAAM,CAAC,KAAP,CAAa,GAAb,CAAiB,QAAQ,CAAC,GAAG,MAAM,UAAV,CAAzB,CAHK,CAAf;AAKA,QAAA,OAAO,CAAC,OAAR,CAAe,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACb,UAAA,IAAI,EAAE;AADO,SAAA,EAET,CAAC,OAAO,CAAC,IAAT,GAAgB;AAAC,UAAA,KAAK,EAAE;AAAR,SAAhB,GAAgC,EAFvB,CAAA,EAE0B;AACvC,UAAA,EAAE,EAAE,CACF;AACA;AAAC,YAAA,MAAD;AAAS,YAAA,MAAM,EAAE,qDAAjB;AAAwE,YAAA,KAAK,EAAE;AAA/E,WAFE,EAGF;AAAC,YAAA,MAAM,EAAE,MAAM,CAAC,KAAhB;AAAuB,YAAA,MAAM,EAAE,kCAAkC,MAAM,EAAvE;AAA2E,YAAA,KAAK,EAAE;AAAlF,WAHE;AADmC,SAF1B,CAAf;AASD;AACF;;AAED,WAAO,OAAP;AACD,GAlEuC;AAoExC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,OAArB;AACA,UAAM,KAAK,GAAG,OAAO,CAAC,IAAR,CAAa,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,GAAG,OAApC,CAAd;AACA,UAAM,MAAM,GAAG,IAAI,GAAG,qBAAtB;AACA,UAAM,MAAM,GAAG,IAAI,CAAC,KAAL,CAAW,MAAX,CAAkB,CAAC,IAAI,CAAC,CAAC,SAAzB,EAAoC,GAApC,CAAwC,CAAC,IAAI,mBAAQ,GAAG,IAAI,IAAI,mBAAQ,CAAC,CAAC,KAAV,CAAgB,SAAnC,CAA7C,CAAf;AACA,UAAM,KAAK,GAAG,MAAM,CAAC,GAAP,CAAW,CAAC,IAAI,GAAG,CAAC,WAApB,EAAiC,IAAjC,CAAsC,MAAtC,CAAd;AACA,UAAM,MAAM,GAAG,GAAG,KAAK,eAAe,MAAM,cAAc,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAiB,WAA3E;;AAEA,QAAI,OAAO,CAAC,MAAR,IAAkB,MAAM,CAAC,MAAP,GAAgB,CAAtC,EAAyC;AACvC,MAAA,KAAK,CAAC,EAAN,CAAS,IAAT,CAAc;AACZ,QAAA,MAAM,EAAE,MAAM,CAAC,GAAP,CAAW,MAAM,KAAK;AAAC,UAAA;AAAD,SAAL,CAAjB,CADI;AAEZ,QAAA;AAFY,OAAd;AAID,KALD,MAKO,IAAI,MAAM,CAAC,MAAP,GAAgB,CAApB,EAAuB;AAC5B,MAAA,KAAK,CAAC,MAAN,GAAe,MAAf;AACA,aAAO,KAAK,CAAC,KAAb;AACA,aAAO,KAAK,CAAC,EAAb;AACD;;AAED,UAAM,MAAM,GAAG,OAAO,CAAC,IAAR,CAAa,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,GAAG,cAApC,CAAf;AACA,UAAM,MAAM,GAAG,sCAAsB,OAAO,CAAC,IAA9B,KAAuC,OAAO,CAAC,IAAR,CAAa,MAAnE;;AACA,QAAI,MAAJ,EAAY;AACV,UAAI,CAAC,OAAO,CAAC,MAAb,EAAqB,MAAM,CAAC,EAAP,CAAU,CAAV,EAAa,MAAb,GAAsB,MAAtB,CAArB,KACK,MAAM,CAAC,EAAP,CAAU,IAAV,CAAc,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,MAAM,CAAC,EAAP,CAAU,CAAV,CAAL,CAAA,EAAiB;AAAE,QAAA;AAAF,OAAjB,CAAd;AACN;;AAED,WAAO,OAAP;AACD;AAhGuC,CAA1C;eAmGe;;;AAET,SAAU,sBAAV,CACJ,KADI,EAEJ,OAFI,EAGJ,UAHI,EAGuB;;;AAE3B,QAAM,KAAK,GAAA,CAAA,EAAA,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAH,MAA0B,IAA1B,IAA0B,EAAA,KAAA,KAAA,CAA1B,GAA0B,KAAA,CAA1B,GAA0B,EAAA,CAAE,KAAvC;AACA,0BAAiB,KAAjB,EAAwB,OAAO,IAAG;;;AAChC,UAAM,IAAI,GAAA,CAAA,EAAA,GAAG,OAAO,CAAC,OAAR,CAAgB,QAAhB,CAAyB,KAAzB,CAAH,MAAkC,IAAlC,IAAkC,EAAA,KAAA,KAAA,CAAlC,GAAkC,EAAlC,GAAsC,OAAO,CAAC,OAAR,CAAgB,UAAhB,CAA2B,OAA3B,CAAhD;;AACA,QAAI,IAAI,IAAI,cAAc,CAAC,GAAf,CAAmB,OAAnB,CAAZ,EAAyC;AACvC,YAAM,gBAAgB,GAAA,CAAA,EAAA,GAAG,UAAU,CAAC,GAAX,CAAe,YAAf,CAAH,MAA+B,IAA/B,IAA+B,EAAA,KAAA,KAAA,CAA/B,GAA+B,EAA/B,GAAmC,EAAzD;AACA,MAAA,gBAAgB,CAAC,IAAjB,CAAsB,OAAO,CAAC,IAA9B;AACA,MAAA,UAAU,CAAC,GAAX,CAAe,YAAf,EAA6B,gBAA7B,EAA+C,KAA/C;AACA,MAAA,IAAI,CAAC,SAAL,GAAiB,IAAjB;AACD;AACF,GARD;AASD;;;;;;;;;ACjID;;AAEA;;AAEA;;AAEA;;;;;;AAGA,MAAM,MAAM,GAAG,mBAAf;AACA,MAAM,KAAK,GAAG,kBAAd;AAEA,MAAM,SAAS,GAAsB;AACnC,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,IAAR,KAAiB,UAAjB,IAA+B,OAAO,CAAC,SAA9C;AACD,GAHkC;AAKnC,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;;AACA,UAAM,SAAS,GAAG,gBAAe,GAAf,CAAmB,OAAnB,CAAlB;;AACA,UAAM,MAAM,GAAG,IAAI,GAAG,MAAtB;AACA,UAAM;AAAC,MAAA,CAAD;AAAI,MAAA;AAAJ,QAAS,OAAO,CAAC,OAAR,CAAgB,UAA/B;AACA,QAAI,MAAM,GAAG,iCAAc,OAAO,CAAC,SAAtB,EAAiC,OAAjC,CAAb;;AAEA,QAAI,CAAC,SAAL,EAAgB;AACd,MAAA,MAAM,GAAG,MAAM,CAAC,GAAP,CAAW,CAAC,KAAM,CAAC,CAAC,OAAF,CAAU,CAAV,EAAa,QAAb,GAAwB,IAAI,GAAG,eAAhC,EAAiD,CAAtD,CAAZ,CAAT;AACD;;AAED,IAAA,OAAO,CAAC,IAAR,CACE;AACE,MAAA,IAAI,EAAE,MADR;AAEE,MAAA,KAAK,EAAE,EAFT;AAGE,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,MAAM,CAAC,GAAP,CAAW,CAAC,IAAI,CAAC,CAAC,OAAF,CAAU,CAAV,CAAhB,CADV;AAEE,QAAA,MAAM,EACJ,6BACC,CAAC,KAAK,SAAN,GAAkB,kBAAkB,SAAS,GAAG,oBAAO,KAAP,EAAc,UAAd,CAAH,GAAsB,SAAS,CAAC,CAAC,OAAF,CAAU,MAAM,GAA1E,CAAlB,GAAmG,EADpG,KAEC,CAAC,KAAK,SAAN,GAAkB,kBAAkB,SAAS,GAAG,oBAAO,KAAP,EAAc,UAAd,CAAH,GAAsB,SAAS,CAAC,CAAC,OAAF,CAAU,MAAM,GAA1E,CAAlB,GAAmG,EAFpG,IAGA;AANJ,OADE;AAHN,KADF,EAeE;AACE,MAAA,IAAI,EAAE,IAAI,GAAG,KADf;AAEE,MAAA,KAAK,EAAE,EAFT;AAGE,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,MADV;AAEE,QAAA,MAAM,EAAE,OAAO,MAAM,oBAAoB,MAAM;AAFjD,OADE;AAHN,KAfF;;AA2BA,QAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,MAAA,OAAO,CAAC,KAAD,EAAQ,OAAR,EAAiB,CAAjB,EAAoB,OAApB,EAA6B,OAA7B,CAAP;AACD;;AAED,QAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,MAAA,OAAO,CAAC,KAAD,EAAQ,OAAR,EAAiB,CAAjB,EAAoB,QAApB,EAA8B,OAA9B,CAAP;AACD;;AAED,WAAO,OAAP;AACD;AApDkC,CAArC;eAuDe;;;AAEf,SAAS,OAAT,CACE,KADF,EAEE,OAFF,EAGE,IAHF,EAIE,IAJF,EAKE,OALF,EAKsB;;;AAEpB,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,QAAM,MAAM,GAAG,IAAI,GAAG,MAAtB;AACA,QAAM,KAAK,GAAG,IAAI,GAAG,KAArB;AACA,QAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AACA,QAAM,SAAS,GAAG,gBAAe,GAAf,CAAmB,OAAnB,CAAlB;;AACA,QAAM,MAAM,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,SAAS,GAAG,MAAH,GAAY,QAAlC,CAA/B,EAA4E,CAA5E,CAAf;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,gBAAN,CAAuB,IAAvB,EAA6B,MAA5C;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAlB;AACA,QAAM,SAAS,GAAG,SAAS,CAAC,GAAV,CAAc,MAAd,CAAlB;AACA,QAAM,IAAI,GAAG,SAAS,IAAI,OAAO,KAAK,UAAzB,GAA6B,GAA7B,GAAmC,EAAhD,CAXoB,CAWgC;;AACpD,QAAM,MAAM,GAAG,GAAG,MAAM,WAAW,OAAO,EAA1C;AACA,QAAM,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,OAAO,KAA1B,IAAmC,SAAS,GAAG,GAAG,MAAM,EAAZ,GAAiB,QAAQ,MAAM,GAA3E,CAAf;AACA,QAAM,KAAK,GAAG,CAAC,SAAD,GACV,WADU,GAEV,SAAS,KAAK,KAAd,GACA,QADA,GAEA,SAAS,KAAK,KAAd,GACA,QADA,GAEA,WANJ;AAOA,QAAM,MAAM,GACV,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,EAA7B,IACC,SAAS,IAAI,SAAS,KAAK,KAA3B,GAAmC,KAAK,CAAA,EAAA,GAAA,SAAS,CAAC,GAAV,CAAc,UAAd,CAAA,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,EAAzB,GAA6B,CAAC,EAAtE,GAA2E,EAD5E,IAEA,GAHF;AAKA,EAAA,MAAM,CAAC,EAAP,CAAU,IAAV,CAAe;AACb,IAAA,MAAM,EAAE;AAAC,MAAA,MAAM,EAAE;AAAT,KADK;AAEb,IAAA,MAAM,EAAE,SAAS,GAAG,MAAH,GAAY,cAAc,MAAM,QAAQ,MAAM;AAFlD,GAAf;AAID;;;;;;;;;ACxGD;;AACA;;AAEA;;AAEA;;AAEA;;;;;;AAGA,MAAM,MAAM,GAAG,cAAf;AACA,MAAM,KAAK,GAAG,aAAd;AAEA,MAAM,IAAI,GAAsB;AAC9B,EAAA,GAAG,EAAE,OAAO,IAAG;AACb,WAAO,OAAO,CAAC,IAAR,KAAiB,UAAjB,IAA+B,OAAO,CAAC,IAA9C;AACD,GAH6B;AAK9B,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,OAAjB,KAA4B;AACnC,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;;AACA,UAAM,SAAS,GAAG,gBAAe,GAAf,CAAmB,OAAnB,CAAlB;;AACA,UAAM,KAAK,GAAG,IAAI,GAAG,KAArB;AACA,UAAM;AAAC,MAAA,CAAD;AAAI,MAAA;AAAJ,QAAS,OAAO,CAAC,OAAR,CAAgB,UAA/B;AACA,UAAM,EAAE,GAAG,2BAAY,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAAZ,CAAX;AACA,UAAM,EAAE,GAAG,2BAAY,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAAZ,CAAX;AACA,QAAI,MAAM,GAAG,iCAAc,OAAO,CAAC,IAAtB,EAA4B,OAA5B,CAAb;;AAEA,QAAI,CAAC,SAAL,EAAgB;AACd,MAAA,MAAM,GAAG,MAAM,CAAC,GAAP,CAAW,CAAC,KAAM,CAAC,CAAC,QAAF,GAAa,IAAI,GAAG,eAArB,EAAsC,CAA3C,CAAZ,CAAT;AACD;;AAED,IAAA,OAAO,CAAC,IAAR,CACE;AACE,MAAA,IAAI,EAAE,IAAI,GAAG,MADf;AAEE,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,MADV;AAEE,QAAA,MAAM,EAAE,CAAC,SAAD,GACJ,0BADI,GAEJ,MACA,CAAC,EAAE,GAAG,aAAa,EAAE,YAAlB,GAAiC,EAApC,EAAwC,EAAE,GAAG,aAAa,EAAE,YAAlB,GAAiC,EAA3E,EACG,MADH,CACU,IAAI,IAAI,CAAC,CAAC,IADpB,EAEG,IAFH,CAEQ,IAFR,CADA,GAIA;AARN,OADE;AAFN,KADF,EAgBE;AACE,MAAA,IAAI,EAAE,KADR;AAEE,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,MADV;AAEE,QAAA,KAAK,EAAE,IAFT;AAGE,QAAA,MAAM,EAAE;AAHV,OADE;AAFN,KAhBF;;AA4BA,QAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,MAAA,OAAO,CAAC,KAAD,EAAQ,OAAR,EAAiB,CAAjB,EAAoB,OAApB,EAA6B,OAA7B,CAAP;AACD;;AAED,QAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,MAAA,OAAO,CAAC,KAAD,EAAQ,OAAR,EAAiB,CAAjB,EAAoB,QAApB,EAA8B,OAA9B,CAAP;AACD;;AAED,WAAO,OAAP;AACD;AAvD6B,CAAhC;eA0De;;;AAEf,SAAS,OAAT,CACE,KADF,EAEE,OAFF,EAGE,IAHF,EAIE,IAJF,EAKE,OALF,EAKsB;;;AAEpB,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,QAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AACA,QAAM,SAAS,GAAG,gBAAe,GAAf,CAAmB,OAAnB,CAAlB;;AACA,QAAM,MAAM,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAAI,CAAC,OAAL,CAAa,SAAS,GAAG,MAAH,GAAY,QAAlC,CAA/B,EAA4E,CAA5E,CAAf;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,gBAAN,CAAuB,IAAvB,EAA6B,MAA5C;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAlB;AACA,QAAM,SAAS,GAAG,SAAS,CAAC,GAAV,CAAc,MAAd,CAAlB;AACA,QAAM,IAAI,GAAG,SAAS,GAAG,oBAAO,KAAP,EAAc,OAAd,CAAH,GAA4B,MAAM,CAAC,IAAzD;AACA,QAAM,KAAK,GAAG,IAAI,GAAG,KAArB;AACA,QAAM,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,IAAI,OAAO,EAA1C;AACA,QAAM,MAAM,GAAG,CAAC,SAAD,GACX,YADW,GAEX,SAAS,KAAK,KAAd,GACA,SADA,GAEA,SAAS,KAAK,KAAd,GACA,SADA,GAEA,YANJ;AAOA,QAAM,MAAM,GACV,GAAG,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,EAAtC,IACC,SAAS,IAAI,SAAS,KAAK,KAA3B,GAAmC,KAAK,CAAA,EAAA,GAAA,SAAS,CAAC,GAAV,CAAc,UAAd,CAAA,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,EAAzB,GAA6B,CAAC,EAAtE,GAA2E,EAD5E,IAEA,GAHF;AAKA,EAAA,MAAM,CAAC,EAAP,CAAU,IAAV,CAAe;AACb,IAAA,MAAM,EAAE;AAAC,MAAA,MAAM,EAAE;AAAT,KADK;AAEb,IAAA,MAAM,EAAE,SAAS,GAAG,MAAH,GAAY,cAAc,MAAM,QAAQ,MAAM;AAFlD,GAAf;AAID;;;;;;;;;ACtGD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAWA,MAAM,SAAS,GAAwB,CAAC,gBAAD,EAAU,eAAV,EAAkB,eAAlB,EAA0B,gBAA1B,EAAmC,kBAAnC,EAA8C,aAA9C,EAAoD,eAApD,EAA4D,gBAA5D,EAAqE,cAArE,CAAvC;;AAEM,SAAU,gBAAV,CAA2B,OAA3B,EAAwD,EAAxD,EAA2F;AAC/F,OAAK,MAAM,CAAX,IAAgB,SAAhB,EAA2B;AACzB,QAAI,CAAC,CAAC,GAAF,CAAM,OAAN,CAAJ,EAAoB;AAClB,MAAA,EAAE,CAAC,CAAD,CAAF;AACD;AACF;AACF;;;;;;;;;;;;;;;;;;AC/BD;;AACA;;AACA;;AACA;;AAEA;;AAIA;;AAEA;;AACA;;AAEM,SAAU,YAAV,CACJ,IADI,EAEJ,MAAM,GAAG,IAFL,EAGJ,IAAA,GAAkD,kBAH9C,EAGsD;AAE1D,MAAI,uBAAQ,IAAR,CAAJ,EAAmB;AACjB,UAAM,SAAS,GAAG,IAAI,CAAC,GAAL,CAAS,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,MAAJ,EAAY,IAAZ,CAA1B,CAAlB;AACA,WAAO,MAAM,GAAG,IAAI,SAAS,CAAC,IAAV,CAAe,IAAf,CAAoB,GAA3B,GAAiC,SAA9C;AACD,GAHD,MAGO,IAAI,0BAAW,IAAX,CAAJ,EAAsB;AAC3B,QAAI,MAAJ,EAAY;AACV,aAAO,IAAI,CAAC,8BAAe,IAAf,CAAD,CAAX;AACD,KAFD,MAEO;AACL,aAAO,IAAI,CAAC,mCAAoB,IAApB,CAAD,CAAX;AACD;AACF;;AACD,SAAO,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAL,CAAe,IAAf,CAAD,CAAP,GAAgC,IAA7C;AACD;;AAEK,SAAU,4BAAV,CAAuC,KAAvC,EAAyD,OAAzD,EAA0E;AAC9E,0BAAiB,KAAjB,EAAwB,CAAC,OAAD,EAAU,WAAV,KAAyB;AAC/C,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,QAAI,UAAU,GAAG,WAAW,CAAC,UAAZ,CAAuB,KAAvB,EAA8B,OAA9B,CAAjB;AAEA,IAAA,OAAO,CAAC,IAAR,CAAa,GAAG,WAAW,CAAC,OAAZ,CAAoB,KAApB,EAA2B,OAA3B,CAAhB;AAEA,sCAAiB,OAAjB,EAA0B,UAAU,IAAG;AACrC,UAAI,UAAU,CAAC,OAAf,EAAwB;AACtB,QAAA,OAAO,GAAG,UAAU,CAAC,OAAX,CAAmB,KAAnB,EAA0B,OAA1B,EAAmC,OAAnC,CAAV;AACD;;AACD,UAAI,UAAU,CAAC,UAAf,EAA2B;AACzB,QAAA,UAAU,GAAG,UAAU,CAAC,UAAX,CAAsB,KAAtB,EAA6B,OAA7B,EAAsC,UAAtC,CAAb;AACD;AACF,KAPD;AASA,IAAA,OAAO,CAAC,IAAR,CAAa;AACX,MAAA,IAAI,EAAE,IAAI,GAAG,QADF;AAEX,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE;AAAC,UAAA,MAAM,EAAE,OAAO,CAAC,IAAR,GAAe;AAAxB,SADV;AAEE,QAAA,MAAM,EAAE,UAAU,2BAAY,OAAO,CAAC,IAAR,GAAe,OAA3B,CAAiC,KAAK,UAAU;AAFpE,OADE;AAFO,KAAb;AASD,GAxBD;AA0BA,SAAO,mBAAmB,CAAC,OAAD,CAA1B;AACD;;AAEK,SAAU,oBAAV,CAA+B,KAA/B,EAAkD,OAAlD,EAAmE;AACvE,MAAI,KAAK,CAAC,SAAN,CAAgB,SAAhB,IAA6B,gBAAK,KAAK,CAAC,SAAN,CAAgB,SAArB,EAAgC,MAAjE,EAAyE;AACvE,UAAM,IAAI,GAAG,2BAAY,KAAK,CAAC,OAAN,CAAc,MAAd,CAAZ,CAAb;AACA,IAAA,OAAO,CAAC,OAAR,CAAgB;AACd,MAAA,IAAI,EAAE,OADQ;AAEd,MAAA,KAAK,EAAE,EAFO;AAGd,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,iCAAc,WAAd,EAA2B,OAA3B,CADV;AAEE,QAAA,MAAM,EAAE,kCAAkC,IAAI;AAFhD,OADE;AAHU,KAAhB;AAUD;;AAED,SAAO,mBAAmB,CAAC,OAAD,CAA1B;AACD;;AAEK,SAAU,uBAAV,CAAkC,KAAlC,EAAoD,OAApD,EAAqE;AACzE,MAAI,aAAa,GAAG,KAApB;AACA,0BAAiB,KAAjB,EAAwB,CAAC,OAAD,EAAU,WAAV,KAAyB;AAC/C,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,KAAK,GAAG,2BAAY,IAAI,GAAG,OAAnB,CAAd;AACA,UAAM,KAAK,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,IAA/B,CAAd;;AACA,QAAI,KAAK,CAAC,MAAN,KAAiB,CAArB,EAAwB;AACtB,YAAM,OAAO,GAAG,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,OAA/B,GAAyC,OAAO,CAAC,OAAjE;AACA,YAAM,OAAO,GAAG,OAAO,CAAC,IAAR,KAAiB,OAAjB,GAA2B,SAA3B,GAAuC,GAAvD;AACA,MAAA,OAAO,CAAC,IAAR,CAAa;AACX,QAAA,IAAI,EAAE,OAAO,CAAC,IADH;AAEX,QAAA,MAAM,EAAE,GAAG,sBAAoB,IAAI,KAAK,KAAK,2BAAY,OAAZ,CAAoB,GAAG,OAAO;AAFhE,OAAb;AAID;;AACD,IAAA,aAAa,GAAG,IAAhB;;AAEA,QAAI,WAAW,CAAC,eAAhB,EAAiC;AAC/B,MAAA,OAAO,GAAG,WAAW,CAAC,eAAZ,CAA4B,KAA5B,EAAmC,OAAnC,EAA4C,OAA5C,CAAV;AACD;;AAED,sCAAiB,OAAjB,EAA0B,UAAU,IAAG;AACrC,UAAI,UAAU,CAAC,eAAf,EAAgC;AAC9B,QAAA,OAAO,GAAG,UAAU,CAAC,eAAX,CAA2B,KAA3B,EAAkC,OAAlC,EAA2C,OAA3C,CAAV;AACD;AACF,KAJD;AAKD,GAvBD;;AAyBA,MAAI,aAAJ,EAAmB;AACjB,UAAM,OAAO,GAAG,OAAO,CAAC,MAAR,CAAe,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,MAA/B,CAAhB;;AACA,QAAI,OAAO,CAAC,MAAR,KAAmB,CAAvB,EAA0B;AACxB,MAAA,OAAO,CAAC,OAAR,CAAgB;AACd,QAAA,IAAI,EAAE,MADQ;AAEd,QAAA,KAAK,EAAE,EAFO;AAGd,QAAA,EAAE,EAAE,CAAC;AAAC,UAAA,MAAM,EAAE,WAAT;AAAsB,UAAA,MAAM,EAAE;AAA9B,SAAD;AAHU,OAAhB;AAKD;AACF;;AAED,SAAO,mBAAmB,CAAC,OAAD,CAA1B;AACD;;AAEK,SAAU,yBAAV,CAAoC,KAApC,EAAsD,IAAtD,EAA6E;AACjF,QAAM,QAAQ,GAAG,CAAC,GAAG,IAAJ,CAAjB;AACA,0BAAiB,KAAjB,EAAwB,OAAO,IAAG;AAChC,UAAM,IAAI,GAAW;AAAC,MAAA,IAAI,EAAE,OAAO,CAAC,IAAR,GAAe;AAAtB,KAArB;;AACA,QAAI,OAAO,CAAC,IAAZ,EAAkB;AAChB,YAAM,MAAM,GAAG,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,GAAtB,CAA0B,IAAI,IAAG;AAC9C,cAAM;AAAC,UAAA;AAAD,YAAqB,IAA3B;AAAA,cAAmB,IAAI,GAAA,mBAAI,IAAJ,EAAjB,CAAA,SAAA,CAAiB,CAAvB;AACA,eAAO,IAAP;AACD,OAHc,CAAf;AAKA,YAAM,MAAM,GAAG,OAAO,CAAC,IAAR,CAAa,GAAb,CAAiB,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,KAAJ,CAAlC,CAAf;AACA,MAAA,IAAI,CAAC,MAAL,GACE,OAAO,CAAC,IAAR,KAAiB,UAAjB,GACI,CAAC;AAAC,QAAA,IAAI,EAAE,gBAAS,KAAT,EAAgB;AAAC,UAAA,MAAM,EAAE;AAAT,SAAhB,CAAP;AAAyC,QAAA,MAAzC;AAAiD,QAAA,MAAM,EAAE;AAAzD,OAAD,CADJ,GAEI,MAAM,CAAC,GAAP,CAAW,CAAC,KAAK;AAAC,QAAA,IAAI,EAAE,gBAAS,KAAT,EAAgB;AAAC,UAAA,MAAM,EAAE;AAAT,SAAhB,CAAP;AAAyC,QAAA,MAAzC;AAAiD,QAAA,MAAM,EAAE;AAAzD,OAAL,CAAZ,CAHN;AAID;;AACD,UAAM,QAAQ,GAAG,QAAQ,CAAC,MAAT,CAAgB,CAAC,IAAI,CAAC,CAAC,IAAF,KAAW,OAAO,CAAC,IAAR,GAAe,OAA/C,CAAjB;;AACA,QAAI,CAAC,QAAQ,CAAC,MAAd,EAAsB;AACpB,MAAA,QAAQ,CAAC,IAAT,CAAc,IAAd;AACD;AACF,GAlBD;AAoBA,SAAO,QAAP;AACD;;AAEK,SAAU,0BAAV,CAAqC,KAArC,EAAuD,KAAvD,EAAmE;AACvE,0BAAiB,KAAjB,EAAwB,CAAC,OAAD,EAAU,WAAV,KAAyB;AAC/C,IAAA,KAAK,GAAG,WAAW,CAAC,KAAZ,GAAoB,WAAW,CAAC,KAAZ,CAAkB,KAAlB,EAAyB,OAAzB,EAAkC,KAAlC,CAApB,GAA+D,KAAvE;AACA,sCAAiB,OAAjB,EAA0B,UAAU,IAAG;AACrC,UAAI,UAAU,CAAC,KAAf,EAAsB;AACpB,QAAA,KAAK,GAAG,UAAU,CAAC,KAAX,CAAiB,KAAjB,EAAwB,OAAxB,EAAiC,KAAjC,CAAR;AACD;AACF,KAJD;AAKD,GAPD;AASA,SAAO,KAAP;AACD;;AAEK,SAAU,2BAAV,CAAsC,KAAtC,EAAyD,KAAzD,EAAqE;AACzE,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,QAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,MAAA,KAAK,GAAG,0BAA0B,CAAC,KAAD,EAAQ,KAAR,CAAlC;AACD;AACF;;AAED,SAAO,KAAP;AACD;;AAEK,SAAU,4BAAV,CAAuC,KAAvC,EAAqD,MAArD,EAA4E;AAChF,QAAM,IAAI,GAAG,MAAM,CAAC,SAApB;AACA,QAAM,OAAO,GAAG,KAAK,CAAC,qBAAN,CAA4B,IAA5B,EAAkC,mBAAQ,IAAR,CAAlC,CAAhB;AACA,SAAO;AAAC,IAAA,MAAM,EAAE,oCAAwB,OAAxB,EAAiC,MAAjC;AAAT,GAAP;AACD;;AAED,SAAS,mBAAT,CAA6B,OAA7B,EAA8C;AAC5C,SAAO,OAAO,CAAC,GAAR,CAAY,CAAC,IAAG;AACrB,QAAI,CAAC,CAAC,EAAF,IAAQ,CAAC,CAAC,CAAC,EAAF,CAAK,MAAlB,EAA0B,OAAO,CAAC,CAAC,EAAT;AAC1B,WAAO,CAAP;AACD,GAHM,CAAP;AAID;;;;;;;;;;;ACpLD;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;;;AAEO,MAAM,KAAK,GAAG,QAAd;;AACA,MAAM,aAAa,GAAG,gBAAtB;;AAEP,MAAM,QAAQ,GAAkC;AAC9C,EAAA,OAAO,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AAC1B,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,QAAQ,GAAG,IAAI,GAAG,qBAAxB;;AACA,UAAM,SAAS,GAAG,gBAAO,GAAP,CAAW,OAAX,CAAlB;;AACA,UAAM,OAAO,GAAgB,EAA7B;AACA,UAAM,WAAW,GAAa,EAA9B;AACA,UAAM,aAAa,GAGb,EAHN;;AAKA,QAAI,OAAO,CAAC,SAAR,IAAqB,CAAC,SAA1B,EAAqC;AACnC,YAAM,UAAU,GAAG,2CAA2C,2BAAY,IAAI,GAAG,KAAnB,CAAyB,EAAvF;AACA,MAAA,MAAM,CAAC,OAAD,EAAU,CAAC,EAAD,EAAgB,GAAhB,KAA+B;;;AAC7C,cAAM,OAAO,GAAG,qBAAK,CAAA,EAAA,GAAC,GAAG,CAAC,OAAJ,CAAY,CAAZ,EAAe,MAAhB,MAAsB,IAAtB,IAAsB,EAAA,KAAA,KAAA,CAAtB,GAAsB,EAAtB,GAA2B,GAAG,CAAC,OAAJ,CAAY,CAAZ,EAAe,MAAf,GAAwB,EAAxD,CAAhB;;AACA,YAAI,OAAO,CAAC,OAAR,CAAgB,UAAhB,IAA8B,CAAlC,EAAqC;AACnC,UAAA,OAAO,CAAC,IAAR,CAAa,UAAb;AACD;;AACD,eAAO,EAAP;AACD,OANK,CAAN;AAOD;;AAED,IAAA,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,OAAtB,CAA8B,CAAC,IAAD,EAAO,CAAP,KAAY;AACxC,YAAM,OAAO,GAAG,IAAI,CAAC,OAArB;;AACA,UAAI,OAAO,KAAK,UAAZ,IAAiB,OAAO,KAAK,UAAjC,EAAoC;AAClC,uBAAK,6DAAL;AACA;AACD;;AAED,YAAM,IAAI,GAAG,OAAO,CAAC,IAAR,GAAe,OAAO,CAAC,IAAR,CAAa,CAAb,CAAf,GAAiC,IAA9C;AACA,YAAM,EAAE,GAAG,cAAc,CAAC,KAAD,EAAQ,OAAR,EAAiB,IAAjB,EAAuB,IAAvB,CAAzB;AACA,YAAM,KAAK,GAAG,IAAI,CAAC,OAAL,CAAa,IAA3B;AACA,YAAM,KAAK,GAAG,IAAI,CAAC,OAAL,CAAa,MAA3B;AACA,YAAM,SAAS,GAAG,2BAAY,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAZ,CAAlB;AACA,YAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,EAAiC,GAAjC,CAAqC,MAArC,CAAlB;AACA,YAAM,KAAK,GAAG,gCAAoB,SAApB,IAAiC,GAAjC,GAAuC,EAArD;AAEA,MAAA,OAAO,CAAC,IAAR,CAAa,GAAG,EAAhB;AACA,MAAA,WAAW,CAAC,IAAZ,CAAiB,KAAjB;AAEA,MAAA,aAAa,CAAC,IAAd,CAAmB;AACjB,QAAA,SAAS,EAAE,KAAK,CAAC,SAAN,CAAgB,OAAhB,CADM;AAEjB,QAAA,IAAI,EACF,aAAa,KAAK,OAAlB,GACA,IAAI,KAAK,UAAU,SAAS,KAAK,KAAK,YAAY,KAAK,GAAG,KAAK,SAD/D,GAEA,GAAG,KAAK,UAAU,SAAS,KAAK,KAAK,YAAY,KAAK,GAAG,KAAK;AAL/C,OAAnB;AAOD,KAzBD,EAtB0B,CAiD1B;AACA;;AACA,QAAI,CAAC,SAAL,EAAgB;AACd,MAAA,OAAO,CAAC,IAAR,CAAa;AACX,QAAA,IAAI,EAAE,IAAI,GAAG,aADF;AAEX,QAAA,KAAK,EAAE,EAFI;AAGX,QAAA,EAAE,EAAE,CACF;AACE,UAAA,MAAM,EAAE,aAAa,CAAC,GAAd,CAAkB,CAAC,KAAK;AAAC,YAAA,KAAK,EAAE,CAAC,CAAC;AAAV,WAAL,CAAnB,CADV;AAEE,UAAA,MAAM,EAAE,aAAa,CAAC,GAAd,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAzB,EAA+B,IAA/B,CAAoC,MAApC,IAA8C,MAAM,IAAI,GAAG,aAAa;AAFlF,SADE;AAHO,OAAb;AAUD,KA9DyB,CAgE1B;AACA;AACA;;;AACA,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM,MAAM,GAAG,SAAS,gBAAS,KAAT,CAAe,aAAa,QAAQ,UAA5D;AACA,WAAO,OAAO,CAAC,MAAR,CAAc,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACnB,MAAA,IAAI,EAAE,IAAI,GAAG;AADM,KAAA,EAEf,IAAI,GAAG;AAAC,MAAA,IAAI,EAAE,IAAI,MAAM,KAAK,4BAAa,IAAb,CAAkB;AAAxC,KAAH,GAAkD,EAFvC,CAAA,EAE0C;AAC7D,MAAA,EAAE,EAAE,CACF;AACE,QAAA,MAAM,EAAE,CAAC;AAAC,UAAA,MAAM,EAAE,WAAW,CAAC,IAAZ,CAAiB,MAAjB;AAAT,SAAD,CADV;AAEE,QAAA,MAAM,EAAE,WAAW,CAAC,IAAZ,CAAiB,MAAjB,IAA2B,OAAO,MAAM,MAAM,WAAW;AAFnE,OADE;AADyD,KAF1C,CAAd,CAAP;AAUD,GAhF6C;AAkF9C,EAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AAC7B,UAAM,GAAG,GAAG,OAAO,CAAC,IAAR,GAAe,OAA3B;AACA,WAAO,GAAG,GAAG,IAAN,IAAc,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,MAA/B,GAAwC,UAAU,gBAAS,KAAT,CAAe,GAA/E,CAAP;AACD,GArF6C;AAuF9C,EAAA,KAAK,EAAE,CAAC,KAAD,EAAQ,OAAR,EAAiB,KAAjB,KAA0B;AAC/B,UAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,UAAM;AAAC,MAAA,CAAD;AAAI,MAAA;AAAJ,QAAS,OAAO,CAAC,OAAR,CAAgB,UAA/B;AACA,UAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAF,CAAU,MAA9B;AACA,UAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAF,CAAU,MAA9B;AACA,UAAM,KAAK,GAAG,QAAQ,2BAAY,OAAO,CAAC,IAAR,GAAe,OAA3B,CAAiC,GAAvD,CAL+B,CAO/B;;AACA,QAAI,gBAAO,GAAP,CAAW,OAAX,CAAJ,EAAyB;AACvB,aAAO,KAAP;AACD;;AAED,UAAM,MAAM,GAAQ;AAClB,MAAA,CAAC,EAAE,CAAC,KAAK,SAAN,GAAkB;AAAC,QAAA,MAAM,EAAE,GAAG,MAAM;AAAlB,OAAlB,GAA6C;AAAC,QAAA,KAAK,EAAE;AAAR,OAD9B;AAElB,MAAA,CAAC,EAAE,CAAC,KAAK,SAAN,GAAkB;AAAC,QAAA,MAAM,EAAE,GAAG,MAAM;AAAlB,OAAlB,GAA6C;AAAC,QAAA,KAAK,EAAE;AAAR,OAF9B;AAGlB,MAAA,EAAE,EAAE,CAAC,KAAK,SAAN,GAAkB;AAAC,QAAA,MAAM,EAAE,GAAG,MAAM;AAAlB,OAAlB,GAA6C;AAAC,QAAA,KAAK,EAAE;AAAC,UAAA,KAAK,EAAE;AAAR;AAAR,OAH/B;AAIlB,MAAA,EAAE,EAAE,CAAC,KAAK,SAAN,GAAkB;AAAC,QAAA,MAAM,EAAE,GAAG,MAAM;AAAlB,OAAlB,GAA6C;AAAC,QAAA,KAAK,EAAE;AAAC,UAAA,KAAK,EAAE;AAAR;AAAR;AAJ/B,KAApB,CAZ+B,CAmB/B;AACA;AACA;AACA;;AACA,QAAI,OAAO,CAAC,OAAR,KAAoB,QAAxB,EAAkC;AAChC,WAAK,MAAM,GAAX,IAAkB,gBAAK,MAAL,CAAlB,EAAgC;AAC9B,QAAA,MAAM,CAAC,GAAD,CAAN,GAAc;AAEV,UAAA,IAAI,EAAE,GAAG,KAAK,cAAc,KAAK,gBAAgB,gBAAS,KAAT,CAAe;WAC7D,MAAM,CAAC,GAAD,EAHC,EAKZ;AAAC,UAAA,KAAK,EAAE;AAAR,SALY,CAAd;AAOD;AACF,KAjC8B,CAmC/B;AACA;AACA;;;AACA,UAAM,EAAA,GAAyC,OAAO,CAAC,IAAvD;AAAA,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA,WAAP;AAAoB,MAAA;AAApB,QAA0B,EAAhC;AAAA,UAAqC,MAAM,GAAA,mBAAA,EAAA,EAArC,CAAA,MAAA,EAAA,aAAA,EAAA,QAAA,CAAqC,CAA3C;AACA,UAAM,QAAQ,GAAG,gBAAK,MAAL,EAAa,MAAb,CAAoB,CAAC,GAAD,EAAM,CAAN,KAAW;AAC9C,MAAA,GAAG,CAAC,CAAD,CAAH,GAAS,CACP;AACE,QAAA,IAAI,EAAE,CAAC,CAAC,KAAK,SAAN,IAAmB,GAAG,MAAM,WAAW,MAAM,KAA9C,EAAqD,CAAC,KAAK,SAAN,IAAmB,GAAG,MAAM,WAAW,MAAM,KAAlG,EACH,MADG,CACI,CAAC,IAAI,CADT,EAEH,IAFG,CAEE,MAFF,CADR;AAIE,QAAA,KAAK,EAAE,MAAM,CAAC,CAAD;AAJf,OADO,EAOP;AAAC,QAAA,KAAK,EAAE;AAAR,OAPO,CAAT;AASA,aAAO,GAAP;AACD,KAXgB,EAWd,EAXc,CAAjB;AAaA,WAAO,CACL;AACE,MAAA,IAAI,EAAE,IAAI,GAAG,KAAP,GAAe,KADvB;AAEE,MAAA,IAAI,EAAE,MAFR;AAGE,MAAA,IAAI,EAAE,IAHR;AAIE,MAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE;AACL,UAAA,IAAI,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WADD;AAEL,UAAA,WAAW,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAFR,SADD;AAKN,QAAA,MAAM,EAAE;AALF;AAJV,KADK,EAaL,GAAG,KAbE,EAcL;AACE,MAAA,IAAI,EAAE,IAAI,GAAG,KADf;AAEE,MAAA,IAAI,EAAE,MAFR;AAGE,MAAA,IAAI,EAAE,IAHR;AAIE,MAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACC,MAAM,GAAG;AAAC,UAAA,MAAM,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAAT,SAAH,GAA+B,EADtC,CAAA,EACyC;AAC5C,UAAA,IAAI,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AADsC,SADzC,CADC;AAKN,QAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,MAAN,CAAA,EAAiB,QAAjB;AALA;AAJV,KAdK,CAAP;AA2BD;AAtK6C,CAAhD;eAwKe;AAEf;;;;;;AAGA,SAAS,cAAT,CACE,KADF,EAEE,OAFF,EAGE,IAHF,EAIE,IAJF,EAI8B;AAE5B,QAAM,OAAO,GAAG,IAAI,CAAC,OAArB;AACA,QAAM,KAAK,GAAG,IAAI,CAAC,OAAL,CAAa,MAA3B;AACA,QAAM,KAAK,GAAG,IAAI,CAAC,OAAL,CAAa,IAA3B;;AACA,QAAM,SAAS,GAAG,gBAAO,GAAP,CAAW,OAAX,CAAlB;;AACA,QAAM,SAAS,GAAG,2BAAY,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAZ,CAAlB;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAd;AACA,QAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,GAAN,CAAU,MAAV,CAAH,GAAuB,SAA9C;;AACA,QAAM,MAAM,GAAI,GAAD,IAAiB,SAAS,SAAS,KAAK,GAAG,GAA1D;;AACA,QAAM,IAAI,GAAG,KAAK,CAAC,gBAAN,CAAuB,OAAO,KAAK,UAAZ,GAAgB,OAAhB,GAA0B,QAAjD,EAA2D,MAAxE;AACA,QAAM,KAAK,GAAG,GAAG,OAAO,QAAxB;AAEA,QAAM,EAAE,GAAG,MAAM,CAAC,OAAD,EAAU,CAAC,GAAD,EAAiB,GAAjB,KAAgC;AACzD,WAAO,CACL,GAAG,GADE,EAEL;AAAC,MAAA,MAAM,EAAE,GAAG,CAAC,OAAJ,CAAY,CAAZ,CAAT;AAAyB,MAAA,MAAM,EAAE,IAAI,KAAK,KAAK,KAAK;AAApD,KAFK,EAGL;AAAC,MAAA,MAAM,EAAE,GAAT;AAAc,MAAA,MAAM,EAAE,IAAI,KAAK,cAAc,KAAK,QAAQ,IAAI;AAA9D,KAHK,CAG+D;AAH/D,KAAP;AAKD,GANgB,CAAjB,CAb4B,CAqB5B;AACA;AACA;;AACA,EAAA,EAAE,CAAC,IAAH,CAAQ;AACN,IAAA,MAAM,EAAE;AAAC,MAAA,MAAM,EAAE,OAAO,CAAC,IAAR,GAAe;AAAxB,KADF;AAEN,IAAA,MAAM,EAAE,gCAAoB,SAApB,IAAiC,IAAI,MAAM,CAAC,GAAG,KAAK,KAAT,CAAe,KAAK,MAAM,CAAC,GAAG,KAAK,KAAT,CAAe,GAApF,GAA0F;AAF5F,GAAR;AAKA,SAAO,SAAS,GACZ,CAAC;AAAC,IAAA,IAAI,EAAE,KAAP;AAAc,IAAA,EAAE,EAAE;AAAlB,GAAD,CADY,GAEZ;AAEI,IAAA,IAAI,EAAE;KACF,IAAI,GAAG;AAAC,IAAA,IAAI,EAAE,4BAAa,IAAb,EAAmB,IAAnB,EAAyB,MAAzB;AAAP,GAAH,GAA8C;AAAC,IAAA,KAAK,EAAE;AAAR,MAAY;AAClE,IAAA,EAAE,EAAE;AAD8D,IAHtE;AAOI,IAAA,IAAI,EAAE;KACF,IAAI,GAAG;AAAC,IAAA,IAAI,EAAE,4BAAa,IAAb;AAAP,GAAH,GAAgC,KAAG;AAC3C,IAAA,EAAE,EAAE,CACF;AACE,MAAA,MAAM,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT,OADV;AAEE,MAAA,MAAM,EAAE,GAAG,KAAK,WAAW,KAAK,uBAAuB,SAAS,KAAK,KAAK;AAF5E,KADE;AADuC,IAR/C,CAFJ;AAmBD;;AAED,SAAS,MAAT,CAAgB,OAAhB,EAAyD,EAAzD,EAAuG;AACrG,SAAO,OAAO,CAAC,MAAR,CAAe,MAAf,CAAsB,CAAC,EAAD,EAAK,GAAL,KAAY;AACvC,QAAI,CAAC,GAAG,CAAC,OAAT,EAAkB;AAChB,qBAAK,GAAG,GAAG,0DAAX;AACA,aAAO,EAAP;AACD;;AACD,WAAO,EAAE,CAAC,EAAD,EAAK,GAAL,CAAT;AACD,GANM,EAMJ,EANI,CAAP;AAOD;;;;;;;;;;AC1PD;;AACA;;AAEA;;AAEM,SAAU,oBAAV,CAA+B,KAA/B,EAAiD,OAAjD,EAAgG;AACpG,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,QAAM,QAAQ,GAAG,IAAI,GAAG,qBAAxB;AACA,QAAM,OAAO,GAAG,OAAO,CAAC,OAAxB;AACA,QAAM,KAAK,GAAG,0CAAd;AACA,QAAM,MAAM,GAAG,OAAO,CAAC,KAAR,CACZ,GADY,CACR,CAAC,IAAG;AACP,UAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,CAAC,CAAC,OAAjB,CAAjB,CADO,CAEP;;AACA,WAAO,QAAQ,IAAI,QAAQ,CAAC,GAArB,GACH,IAAI,KAAK,IAAI,2BAAY,KAAK,CAAC,OAAN,CAAc,CAAC,CAAC,OAAhB,EAAyB,EAAzB,CAAZ,CAAyC,KAAtD,GACE,GAAG,KAAK,IAAI,2BAAY,KAAK,CAAC,OAAN,CAAc,CAAC,CAAC,OAAhB,EAAyB;AAAC,MAAA,SAAS,EAAE;AAAZ,KAAzB,CAAZ,CAAyD,IAFpE,GAGH,GAAG,KAAK,IAAI,2BAAY,CAAC,CAAC,KAAd,CAAoB,GAHpC;AAID,GARY,EASZ,IATY,CASP,IATO,CAAf,CALoG,CAgBpG;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAM,MAAM,GAAG,SAAS,gBAAS,KAAT,CAAe,aAAa,QAAQ,UAA5D;AAEA,QAAM,MAAM,GAAa,OAAO,CAAC,MAAjC;AAEA,SAAO,CACL;AACE,IAAA,IAAI,EAAE,IAAI,GAAG,OADf;AAEE,IAAA,EAAE,EAAE,MAAM,GACN,CACE;AACE,MAAA,MADF;AAEE,MAAA,MAAM,EAAE,gDAAgD,MAAM,MAAM,MAAM,WAF5E;AAGE,MAAA,KAAK,EAAE;AAHT,KADF,CADM,GAQN;AAVN,GADK,CAAP;AAcD;;AAED,MAAM,KAAK,GAA+B;AACxC,EAAA,OAAO,EAAE,oBAD+B;AAGxC,EAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AAC7B,UAAM,GAAG,GAAG,OAAO,CAAC,IAAR,GAAe,OAA3B;AACA,WAAO,GAAG,GAAG,IAAN,IAAc,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,MAA/B,GAAwC,UAAU,gBAAS,KAAT,CAAe,GAA/E,CAAP;AACD;AANuC,CAA1C;eASe;;;;;;;;;;AC1Df;;AACA;;AAEA,MAAM,MAAM,GAAgC;AAC1C,EAAA,OAAO,EAAE,2BADiC;AAG1C,EAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,OAAR,KAAmB;AAC7B,UAAM,GAAG,GAAG,OAAO,CAAC,IAAR,GAAe,OAA3B;AACA,WAAO,GAAG,GAAG,IAAN,IAAc,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,MAA/B,GAAwC,UAAU,gBAAS,KAAT,CAAe,GAA/E,CAAP;AACD;AANyC,CAA5C;eASe;;;;;;;;;;;;;ACXf;;AACA;;AACA;;AASA;;AAGA;;AAEA;;AACA;;AACA;;;;AAGO,MAAM,KAAK,GAAG,QAAd;;AACA,MAAM,KAAK,GAAG,QAAd;;AACA,MAAM,MAAM,GAAG,SAAf;;AACA,MAAM,gBAAgB,GAAG,oBAAzB;;AACA,MAAM,oBAAoB,GAAG,oBAA7B;;AAqCP,MAAM,SAAS,GAA4B;AAAC,EAAA,MAAM,EAAN,eAAD;AAAS,EAAA,KAAK,EAAL,cAAT;AAAgB,EAAA,QAAQ,EAAR;AAAhB,CAA3C;;AAEM,SAAU,gBAAV,CACJ,KADI,EAEJ,EAFI,EAE+E;AAEnF,QAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,SAAnC;;AACA,MAAI,UAAJ,EAAgB;AACd,SAAK,MAAM,GAAX,IAAkB,gBAAK,UAAL,CAAlB,EAAoC;AAClC,YAAM,OAAO,GAAG,EAAE,CAAC,GAAD,EAAM,SAAS,CAAC,GAAG,CAAC,IAAL,CAAf,CAAlB;AACA,UAAI,OAAO,KAAK,IAAhB,EAAsB;AACvB;AACF;AACF;;AAED,SAAS,aAAT,CAAuB,KAAvB,EAAmC;AACjC,MAAI,MAAM,GAAG,KAAK,CAAC,MAAnB;;AACA,SAAO,MAAP,EAAe;AACb,QAAI,yBAAa,MAAb,CAAJ,EAA0B;AACxB;AACD;;AACD,IAAA,MAAM,GAAG,MAAM,CAAC,MAAhB;AACD;;AAED,SAAO,MAAP;AACD;;AAEK,SAAU,QAAV,CAAmB,KAAnB,EAAiC;AAAC,EAAA;AAAD,IAAW;AAAC,EAAA,MAAM,EAAE;AAAT,CAA5C,EAA0D;AAC9D,MAAI,IAAI,GAAG,MAAM,GAAG,2BAAY,KAAK,CAAC,IAAlB,CAAH,GAA6B,KAAK,CAAC,IAApD;AACA,QAAM,UAAU,GAAG,aAAa,CAAC,KAAD,CAAhC;;AACA,MAAI,UAAJ,EAAgB;AACd,UAAM;AAAC,MAAA;AAAD,QAAU,UAAhB;;AACA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAI,KAAK,CAAC,OAAD,CAAT,EAAoB;AAClB,QAAA,IAAI,IAAI,eAAe,OAAO,eAAe,2BAAY,UAAU,CAAC,OAAX,CAAmB,OAAnB,CAAZ,CAAwC,IAArF;AACD;AACF;AACF;;AACD,SAAO,IAAP;AACD;;AAEK,SAAU,mBAAV,CAA8B,KAA9B,EAA0C;AAC9C,MAAI,UAAU,GAAG,KAAjB;AACA,EAAA,gBAAgB,CAAC,KAAD,EAAQ,OAAO,IAAG;AAChC,IAAA,UAAU,GAAG,UAAU,IAAI,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,IAAtB,CAA2B,IAAI,IAAI,IAAI,CAAC,KAAL,KAAe,uBAAlD,CAA3B;AACD,GAFe,CAAhB;AAGA,SAAO,UAAP;AACD;;;;;;;;;AE3ED;;;;AAnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAIm+T,SAAJ,EACIj9Q,MADJ,EAEIhwD,KAFJ,EAGIxG,MAHJ,EAII0zU,SAJJ;AAMA,IAAIC,mBAAmB,GAAG,CAA1B;AAAA,IACIC,QAAQ,GAAG,CADf;AAAA,IAEIC,eAAe,GAAG,CAFtB;AAAA,IAGIC,YAAY,GAAG,CAHnB;AAAA,IAIIC,gBAAgB,GAAG,CAJvB;AAAA,IAKIC,mBAAmB,GAAG,CAL1B;AAAA,IAMIC,eAAe,GAAG,CANtB;AAAA,IAOIC,kBAAkB,GAAG,CAPzB;AAAA,IAQIC,sBAAsB,GAAG,CAR7B;AAUAV,SAAS,GAAG,EAAZ;AACAA,SAAS,CAACE,mBAAD,CAAT,GAAiC,SAAjC;AACAF,SAAS,CAACG,QAAD,CAAT,GAAsB,OAAtB;AACAH,SAAS,CAACI,eAAD,CAAT,GAA6B,YAA7B;AACAJ,SAAS,CAACK,YAAD,CAAT,GAA0B,SAA1B;AACAL,SAAS,CAACM,gBAAD,CAAT,GAA8B,MAA9B;AACAN,SAAS,CAACO,mBAAD,CAAT,GAAiC,SAAjC;AACAP,SAAS,CAACQ,eAAD,CAAT,GAA6B,YAA7B;AACAR,SAAS,CAACS,kBAAD,CAAT,GAAgC,QAAhC;AACAT,SAAS,CAACU,sBAAD,CAAT,GAAoC,mBAApC;AAEA,IAAIC,qBAAqB,GAAG,iBAA5B;AAAA,IACIC,sBAAsB,GAAG,kBAD7B;AAAA,IAEIC,oBAAoB,GAAG,gBAF3B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,gBAAgB,GAAG,YAJvB;AAAA,IAKIC,aAAa,GAAG,SALpB;AAAA,IAMIC,uBAAuB,GAAG,mBAN9B;AAAA,IAOIC,sBAAsB,GAAG,kBAP7B;AAAA,IAQIC,sBAAsB,GAAG,kBAR7B;AAAA,IASIC,cAAc,GAAG,UATrB;AAAA,IAUIC,qBAAqB,GAAG,iBAV5B,EAYA;;AACA,IAAIC,sBAAsB,GAAG,qBAA7B;AAAA,IACIC,uBAAuB,GAAG,mBAD9B;AAAA,IAEIC,uBAAuB,GAAG,mBAF9B;AAAA,IAGIC,2BAA2B,GAAG,uBAHlC;AAAA,IAIIC,yBAAyB,GAAG,0BAJhC;AAAA,IAKIC,oBAAoB,GAAG,yBAL3B;AAAA,IAMIC,oBAAoB,GAAG,4BAN3B;AAAA,IAOIC,yBAAyB,GAAG,uCAPhC;AAAA,IAQIC,yBAAyB,GAAG,gDARhC;AAAA,IASIC,8BAA8B,GAAG,sEATrC;AAWA,IAAIC,OAAO,GAAG,SAAd;AAAA,IACIC,QAAQ,GAAG,WADf,EAGA;;AACA,IAAIC,4BAA4B,GAAG,IAAIt6M,MAAJ,CAAW,szJAAX,CAAnC;AAAA,IACI;AACAu6M,2BAA2B,GAAG,IAAIv6M,MAAJ,CAAW,muLAAX,CAFlC,EAIA;AACA;AACA;AACA;;AAEA,SAASl0H,MAAT,CAAgB6R,SAAhB,EAA2B+K,OAA3B,EAAoC;AAClC;AACA,MAAI,CAAC/K,SAAL,EAAgB;AACd,UAAM,IAAI/Z,KAAJ,CAAU,aAAa8kB,OAAvB,CAAN;AACD;AACF;;AAED,SAAS8xT,cAAT,CAAwBtN,EAAxB,EAA4B;AAC1B,SAAQA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAA5B,CAD0B,CACS;AACpC;;AAED,SAASuN,UAAT,CAAoBvN,EAApB,EAAwB;AACtB,SAAO,yBAAyBzqS,OAAzB,CAAiCyqS,EAAjC,KAAwC,CAA/C;AACD;;AAED,SAASwN,YAAT,CAAsBxN,EAAtB,EAA0B;AACxB,SAAO,WAAWzqS,OAAX,CAAmByqS,EAAnB,KAA0B,CAAjC;AACD,EAED;;;AAEA,SAASyN,YAAT,CAAsBzN,EAAtB,EAA0B;AACxB,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAmCA,EAAE,KAAK,IAA1C,IAAoDA,EAAE,KAAK,IAA3D,IAAqEA,EAAE,KAAK,IAA5E,IACJA,EAAE,IAAI,MAAN,IAAgB,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,EAAiC,MAAjC,EAAyC,MAAzC,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,MAAjE,EAAyE,MAAzE,EAAiF,MAAjF,EAAyF,MAAzF,EAAiG,MAAjG,EAAyG,MAAzG,EAAiH,MAAjH,EAAyH,MAAzH,EAAiI,MAAjI,EAAyIzqS,OAAzI,CAAiJyqS,EAAjJ,KAAwJ,CAD3K;AAED,EAED;;;AAEA,SAAS0N,gBAAT,CAA0B1N,EAA1B,EAA8B;AAC5B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAmCA,EAAE,KAAK,MAA1C,IAAsDA,EAAE,KAAK,MAApE;AACD,EAED;;;AAEA,SAAS2N,iBAAT,CAA2B3N,EAA3B,EAA+B;AAC7B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAkC;AACtCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADhB,IACyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFhB,IAEyB;AAC7BA,EAAAA,EAAE,KAAK,IAHH,IAGY;AACfA,EAAAA,EAAE,IAAI,IAAP,IAAgBoN,4BAA4B,CAACtnT,IAA7B,CAAkCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAlC,CAJnB;AAKD;;AAED,SAAS4N,gBAAT,CAA0B5N,EAA1B,EAA8B;AAC5B,SAAQA,EAAE,KAAK,IAAR,IAAkBA,EAAE,KAAK,IAAzB,IAAkC;AACtCA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IADhB,IACyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAFhB,IAEyB;AAC7BA,EAAAA,EAAE,IAAI,IAAN,IAAcA,EAAE,IAAI,IAHhB,IAGyB;AAC7BA,EAAAA,EAAE,KAAK,IAJH,IAIY;AACfA,EAAAA,EAAE,IAAI,IAAP,IAAgBqN,2BAA2B,CAACvnT,IAA5B,CAAiCriB,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAjC,CALnB;AAMD,EAED;;;AAEA,IAAI6N,QAAQ,GAAG;AACb,QAAK,CADQ;AACL,QAAK,CADA;AACG,QAAK,CADR;AAEb,SAAM,CAFO;AAEJ,SAAM,CAFF;AAEK,SAAM,CAFX;AAEc,SAAM,CAFpB;AAEuB,SAAM,CAF7B;AAGb,UAAO,CAHM;AAGH,UAAO,CAHJ;AAGO,UAAO,CAHd;AAGiB,UAAO,CAHxB;AAG2B,UAAO,CAHlC;AAGqC,UAAO,CAH5C;AAIb,WAAQ,CAJK;AAIF,WAAQ,CAJN;AAIS,WAAQ,CAJjB;AAIoB,WAAQ,CAJ5B;AAI+B,WAAQ,CAJvC;AAI0C,WAAQ,CAJlD;AAIqD,WAAQ,CAJ7D;AAIgE,WAAQ,CAJxE;AAKb,YAAS,CALI;AAKD,YAAS,CALR;AAKW,YAAS,CALpB;AAKuB,YAAS,CALhC;AAKmC,YAAS,CAL5C;AAK+C,YAAS,CALxD;AAK2D,YAAS,CALpE;AAKuE,YAAS,CALhF;AAMb,aAAU,CANG;AAMA,aAAU,CANV;AAMa,aAAU,CANvB;AAM0B,aAAU,CANpC;AAMuC,aAAU,CANjD;AAOb,cAAW,CAPE;AAOC,cAAW,CAPZ;AAOe,cAAW,CAP1B;AAQb,eAAY,CARC;AAQE,eAAY,CARd;AASb,gBAAa,CATA;AASG,gBAAa;AAThB,CAAf;;AAYA,SAASC,WAAT,GAAuB;AACrB,MAAI9N,EAAJ;;AAEA,SAAO/hU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,QAAIwvU,YAAY,CAACzN,EAAD,CAAZ,IAAoB0N,gBAAgB,CAAC1N,EAAD,CAAxC,EAA8C;AAC5C,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;AACF;;AAED,SAAS8vU,aAAT,CAAuBxyN,MAAvB,EAA+B;AAC7B,MAAIpjH,CAAJ;AAAA,MAAON,GAAP;AAAA,MAAYmoU,EAAZ;AAAA,MAAgBxjC,IAAI,GAAG,CAAvB;AAEA3kS,EAAAA,GAAG,GAAI0jH,MAAM,KAAK,GAAZ,GAAmB,CAAnB,GAAuB,CAA7B;;AACA,OAAKpjH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,GAAhB,EAAqB,EAAEM,CAAvB,EAA0B;AACxB,QAAI8F,KAAK,GAAGxG,MAAR,IAAkB81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAhC,EAAiD;AAC/C+hU,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACAu+R,MAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD,KAHD,MAGO;AACL0xU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AACD,SAAOzpU,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AAED,SAASyxC,0BAAT,GAAsC;AACpC,MAAIjO,EAAJ,EAAQxjC,IAAR,EAAc0xC,GAAd,EAAmBC,GAAnB;AAEAnO,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAu+R,EAAAA,IAAI,GAAG,CAAP,CAJoC,CAMpC;;AACA,MAAIwjC,EAAE,KAAK,GAAX,EAAgB;AACdgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAOjvU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AACA,QAAI,CAACsvU,UAAU,CAACvN,EAAD,CAAf,EAAqB;AACnB;AACD;;AACDxjC,IAAAA,IAAI,GAAGA,IAAI,GAAG,EAAP,GAAY,mBAAmBjnQ,OAAnB,CAA2ByqS,EAAE,CAAC1jU,WAAH,EAA3B,CAAnB;AACD;;AAED,MAAIkgS,IAAI,GAAG,QAAP,IAAmBwjC,EAAE,KAAK,GAA9B,EAAmC;AACjCgO,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,GArBmC,CAuBpC;;;AACA,MAAI1wC,IAAI,IAAI,MAAZ,EAAoB;AAClB,WAAO/4R,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD;;AACD0xC,EAAAA,GAAG,GAAG,CAAE1xC,IAAI,GAAG,OAAR,IAAoB,EAArB,IAA2B,MAAjC;AACA2xC,EAAAA,GAAG,GAAG,CAAE3xC,IAAI,GAAG,OAAR,GAAmB,IAApB,IAA4B,MAAlC;AACA,SAAO/4R,MAAM,CAAC4sE,YAAP,CAAoB69P,GAApB,EAAyBC,GAAzB,CAAP;AACD;;AAED,SAASC,oBAAT,GAAgC;AAC9B,MAAIpO,EAAJ,EAAQ50T,EAAR;AAEA40T,EAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,EAAvB,CAAL;AACAmN,EAAAA,EAAE,GAAG3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAL,CAJ8B,CAM9B;;AACA,MAAIA,EAAE,KAAK,IAAX,EAAiB;AACf,QAAI/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD,MAAEjvU,KAAF;AACA+hU,IAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AACA,QAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC2N,iBAAiB,CAAC3N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5C,EAAgE;AAC9DohQ,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD9hU,IAAAA,EAAE,GAAG40T,EAAL;AACD;;AAED,SAAO/hU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AACA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAD,CAArB,EAA2B;AACzB;AACD;;AACD,MAAE/hU,KAAF;AACAmN,IAAAA,EAAE,IAAI3H,MAAM,CAAC4sE,YAAP,CAAoB2vP,EAApB,CAAN,CANqB,CAQrB;;AACA,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACf50T,MAAAA,EAAE,GAAGA,EAAE,CAACqsB,MAAH,CAAU,CAAV,EAAarsB,EAAE,CAAC3T,MAAH,GAAY,CAAzB,CAAL;;AACA,UAAIw2D,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC+vU,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD,QAAEjvU,KAAF;AACA+hU,MAAAA,EAAE,GAAG+N,aAAa,CAAC,GAAD,CAAlB;;AACA,UAAI,CAAC/N,EAAD,IAAOA,EAAE,KAAK,IAAd,IAAsB,CAAC4N,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA3C,EAA+D;AAC7DohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AACD9hU,MAAAA,EAAE,IAAI40T,EAAN;AACD;AACF;;AAED,SAAO50T,EAAP;AACD;;AAED,SAASijU,aAAT,GAAyB;AACvB,MAAIpqU,KAAJ,EAAW+7T,EAAX;AAEA/7T,EAAAA,KAAK,GAAGhG,KAAK,EAAb;;AACA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AACA,QAAI+hU,EAAE,KAAK,IAAX,EAAiB;AACf;AACA/hU,MAAAA,KAAK,GAAGgG,KAAR;AACA,aAAOmqU,oBAAoB,EAA3B;AACD;;AACD,QAAIR,gBAAgB,CAAC5N,EAAD,CAApB,EAA0B;AACxB,QAAE/hU,KAAF;AACD,KAFD,MAEO;AACL;AACD;AACF;;AAED,SAAOgwD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAAP;AACD;;AAED,SAASqwU,cAAT,GAA0B;AACxB,MAAIrqU,KAAJ,EAAWmH,EAAX,EAAegN,IAAf;AAEAnU,EAAAA,KAAK,GAAGhG,KAAR,CAHwB,CAKxB;;AACAmN,EAAAA,EAAE,GAAI6iD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAA9B,GAAsCmwU,oBAAoB,EAA1D,GAA+DC,aAAa,EAAjF,CANwB,CAQxB;AACA;;AACA,MAAIjjU,EAAE,CAAC3T,MAAH,KAAc,CAAlB,EAAqB;AACnB2gB,IAAAA,IAAI,GAAGkzT,eAAP;AACD,GAFD,MAEO,IAAIuC,QAAQ,CAAC/+M,cAAT,CAAwB1jH,EAAxB,CAAJ,EAAiC;AAAE;AACxCgN,IAAAA,IAAI,GAAGmzT,YAAP;AACD,GAFM,MAEA,IAAIngU,EAAE,KAAK,MAAX,EAAmB;AACxBgN,IAAAA,IAAI,GAAGozT,gBAAP;AACD,GAFM,MAEA,IAAIpgU,EAAE,KAAK,MAAP,IAAiBA,EAAE,KAAK,OAA5B,EAAqC;AAC1CgN,IAAAA,IAAI,GAAGgzT,mBAAP;AACD,GAFM,MAEA;AACLhzT,IAAAA,IAAI,GAAGkzT,eAAP;AACD;;AAED,SAAO;AACLlzT,IAAAA,IAAI,EAAEA,IADD;AAELjd,IAAAA,KAAK,EAAEiQ,EAFF;AAGLnH,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAED;;;AAEA,SAASswU,cAAT,GAA0B;AACxB,MAAItqU,KAAK,GAAGhG,KAAZ;AAAA,MACEu+R,IAAI,GAAGvuO,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CADT;AAAA,MAEEuwU,KAFF;AAAA,MAGEC,GAAG,GAAGxgR,MAAM,CAAChwD,KAAD,CAHd;AAAA,MAIEywU,GAJF;AAAA,MAKEC,GALF;AAAA,MAMEC,GANF;;AAQA,UAAQpyC,IAAR;AAEE;AACA,SAAK,IAAL,CAHF,CAGa;;AACX,SAAK,IAAL,CAJF,CAIa;;AACX,SAAK,IAAL,CALF,CAKa;;AACX,SAAK,IAAL,CANF,CAMa;;AACX,SAAK,IAAL,CAPF,CAOa;;AACX,SAAK,IAAL,CARF,CAQa;;AACX,SAAK,IAAL,CATF,CASa;;AACX,SAAK,IAAL,CAVF,CAUa;;AACX,SAAK,IAAL,CAXF,CAWa;;AACX,SAAK,IAAL,CAZF,CAYa;;AACX,SAAK,IAAL,CAbF,CAaa;;AACX,SAAK,IAAL;AAAW;AACT,QAAEv+R,KAAF;AACA,aAAO;AACLma,QAAAA,IAAI,EAAEszT,eADD;AAELvwU,QAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAFF;AAGLv4R,QAAAA,KAAK,EAAEA,KAHF;AAIL6F,QAAAA,GAAG,EAAE7L;AAJA,OAAP;;AAOF;AACEuwU,MAAAA,KAAK,GAAGvgR,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAR,CADF,CAGE;;AACA,UAAIuwU,KAAK,KAAK,IAAd,EAAoB;AAClB,gBAAQhyC,IAAR;AACE,eAAK,IAAL,CADF,CACa;;AACX,eAAK,IAAL,CAFF,CAEa;;AACX,eAAK,IAAL,CAHF,CAGa;;AACX,eAAK,IAAL,CAJF,CAIa;;AACX,eAAK,IAAL,CALF,CAKa;;AACX,eAAK,IAAL,CANF,CAMa;;AACX,eAAK,IAAL,CAPF,CAOa;;AACX,eAAK,IAAL,CARF,CAQa;;AACX,eAAK,IAAL,CATF,CASa;;AACX,eAAK,IAAL;AAAW;AACTv+R,YAAAA,KAAK,IAAI,CAAT;AACA,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAEsI,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,IAA4B/4R,MAAM,CAAC4sE,YAAP,CAAoBm+P,KAApB,CAF9B;AAGLvqU,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;;AAOF,eAAK,IAAL,CAnBF,CAmBa;;AACX,eAAK,IAAL;AAAW;AACTA,YAAAA,KAAK,IAAI,CAAT,CADF,CAGE;;AACA,gBAAIgwD,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,MAA6B,IAAjC,EAAuC;AACrC,gBAAEA,KAAF;AACD;;AACD,mBAAO;AACLma,cAAAA,IAAI,EAAEszT,eADD;AAELvwU,cAAAA,KAAK,EAAE8yD,MAAM,CAACzsD,KAAP,CAAayC,KAAb,EAAoBhG,KAApB,CAFF;AAGLgG,cAAAA,KAAK,EAAEA,KAHF;AAIL6F,cAAAA,GAAG,EAAE7L;AAJA,aAAP;AA3BJ;AAkCD;;AA9DL,GATwB,CA0ExB;;;AAEA2wU,EAAAA,GAAG,GAAG3gR,MAAM,CAACx2B,MAAP,CAAcx5B,KAAd,EAAqB,CAArB,CAAN;;AAEA,MAAI2wU,GAAG,KAAK,MAAZ,EAAoB;AAClB3wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEyzU,GAFF;AAGL3qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAtFuB,CAwFxB;;;AAEA0wU,EAAAA,GAAG,GAAGC,GAAG,CAACn3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAIk3S,GAAG,KAAK,KAAR,IAAiBA,GAAG,KAAK,KAAzB,IAAkCA,GAAG,KAAK,KAA9C,EAAqD;AACnD1wU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEwzU,GAFF;AAGL1qU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GApGuB,CAsGxB;;;AACAywU,EAAAA,GAAG,GAAGC,GAAG,CAACl3S,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAN;;AAEA,MAAKg3S,GAAG,KAAKC,GAAG,CAAC,CAAD,CAAX,IAAmB,SAASn5S,OAAT,CAAiBk5S,GAAjB,KAAyB,CAA7C,IAAoDC,GAAG,KAAK,IAAhE,EAAsE;AACpEzwU,IAAAA,KAAK,IAAI,CAAT;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEuzU,GAFF;AAGLzqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD,GAjHuB,CAmHxB;;;AAEA,MAAI,eAAes3B,OAAf,CAAuBk5S,GAAvB,KAA+B,CAAnC,EAAsC;AACpC,MAAExwU,KAAF;AACA,WAAO;AACLma,MAAAA,IAAI,EAAEszT,eADD;AAELvwU,MAAAA,KAAK,EAAEszU,GAFF;AAGLxqU,MAAAA,KAAK,EAAEA,KAHF;AAIL6F,MAAAA,GAAG,EAAE7L;AAJA,KAAP;AAMD;;AAED+vU,EAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,EAED;;;AAEA,SAAS2B,cAAT,CAAwB5qU,KAAxB,EAA+B;AAC7B,MAAIkwM,MAAM,GAAG,EAAb;;AAEA,SAAOl2M,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC81U,UAAU,CAACt/Q,MAAM,CAAChwD,KAAD,CAAP,CAAf,EAAgC;AAC9B;AACD;;AACDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAIk2M,MAAM,CAAC18M,MAAP,KAAkB,CAAtB,EAAyB;AACvBu2U,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAAC,OAAOohF,MAAR,EAAgB,EAAhB,CAFV;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD;;AAED,SAAS6wU,gBAAT,CAA0B7qU,KAA1B,EAAiC;AAC/B,MAAIkwM,MAAM,GAAG,MAAMlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAzB;;AACA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrB,QAAI,CAAC+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAjB,EAAkC;AAChC;AACD;;AACDk2M,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AAED,MAAI0vU,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjB,IAA+CqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAjE,EAA6F;AAC3F+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAE43H,QAAQ,CAACohF,MAAD,EAAS,CAAT,CAFV;AAGL46H,IAAAA,KAAK,EAAE,IAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAAS+wU,kBAAT,GAA8B;AAC5B,MAAI76H,MAAJ,EAAYlwM,KAAZ,EAAmB+7T,EAAnB;AAEAA,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAAC0uU,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAd,IAAqCozP,EAAE,KAAK,GAA7C,EACJ,oEADI,CAAN;AAGA/7T,EAAAA,KAAK,GAAGhG,KAAR;AACAk2M,EAAAA,MAAM,GAAG,EAAT;;AACA,MAAI6rH,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,GAAGlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAf;AACA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX,CAFc,CAId;AACA;;AACA,QAAIk2M,MAAM,KAAK,GAAf,EAAoB;AAClB,UAAI6rH,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B,UAAE/hU,KAAF;AACA,eAAO4wU,cAAc,CAAC5qU,KAAD,CAArB;AACD;;AACD,UAAIupU,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpB,eAAO8O,gBAAgB,CAAC7qU,KAAD,CAAvB;AACD,OAPiB,CASlB;;;AACA,UAAI+7T,EAAE,IAAIsN,cAAc,CAACtN,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAAxB,EAA4C;AAC1CohQ,QAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,WAAOI,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAX,EAAgB;AACd7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;;AACA,WAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACD;;AAED,MAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,IAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AAEA+hU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AACA,QAAI+hU,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;AAC5B7rH,MAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;;AACD,QAAIqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAAlB,EAA8C;AAC5C,aAAOqvU,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/Ck2M,QAAAA,MAAM,IAAIlmJ,MAAM,CAAChwD,KAAK,EAAN,CAAhB;AACD;AACF,KAJD,MAIO;AACL+vU,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;AACF;;AAED,MAAIS,iBAAiB,CAAC1/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAD,CAArB,EAAiD;AAC/C+vU,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEqzT,mBADD;AAELtwU,IAAAA,KAAK,EAAEgP,UAAU,CAACgqM,MAAD,CAFZ;AAGLlwM,IAAAA,KAAK,EAAEA,KAHF;AAIL6F,IAAAA,GAAG,EAAE7L;AAJA,GAAP;AAMD,EAED;;;AAEA,SAASgxU,iBAAT,GAA6B;AAC3B,MAAIj8N,GAAG,GAAG,EAAV;AAAA,MACEmjK,KADF;AAAA,MACSlyQ,KADT;AAAA,MACgB+7T,EADhB;AAAA,MACoBxjC,IADpB;AAAA,MAC0BuyC,KAAK,GAAG,KADlC;AAGA54D,EAAAA,KAAK,GAAGloN,MAAM,CAAChwD,KAAD,CAAd;AACAW,EAAAA,MAAM,CAAEu3Q,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,GAA9B,EACJ,yCADI,CAAN;AAGAlyQ,EAAAA,KAAK,GAAGhG,KAAR;AACA,IAAEA,KAAF;;AAEA,SAAOA,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AAEA,QAAI+hU,EAAE,KAAK7pD,KAAX,EAAkB;AAChBA,MAAAA,KAAK,GAAG,EAAR;AACA;AACD,KAHD,MAGO,IAAI6pD,EAAE,KAAK,IAAX,EAAiB;AACtBA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;;AACA,UAAI,CAAC+hU,EAAD,IAAO,CAAC0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAA5B,EAAgD;AAC9C,gBAAQozP,EAAR;AACE,eAAK,GAAL;AACA,eAAK,GAAL;AACE,gBAAI/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,GAAtB,EAA2B;AACzB,gBAAEA,KAAF;AACA+0G,cAAAA,GAAG,IAAIi7N,0BAA0B,EAAjC;AACD,aAHD,MAGO;AACLj7N,cAAAA,GAAG,IAAI+6N,aAAa,CAAC/N,EAAD,CAApB;AACD;;AACD;;AACF,eAAK,GAAL;AACEhtN,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,IAAP;AACA;;AACF,eAAK,GAAL;AACEA,YAAAA,GAAG,IAAI,MAAP;AACA;;AAEF;AACE,gBAAIw6N,YAAY,CAACxN,EAAD,CAAhB,EAAsB;AACpBxjC,cAAAA,IAAI,GAAG,WAAWjnQ,OAAX,CAAmByqS,EAAnB,CAAP,CADoB,CAGpB;;AACA,kBAAIxjC,IAAI,KAAK,CAAb,EAAgB;AACduyC,gBAAAA,KAAK,GAAG,IAAR;AACD;;AAED,kBAAI9wU,KAAK,GAAGxG,MAAR,IAAkB+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAAlC,EAAmD;AACjD8wU,gBAAAA,KAAK,GAAG,IAAR;AACAvyC,gBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB,CAFiD,CAIjD;AACA;;AACA,oBAAI,OAAOs3B,OAAP,CAAeyqS,EAAf,KAAsB,CAAtB,IACF/hU,KAAK,GAAGxG,MADN,IAEF+1U,YAAY,CAACv/Q,MAAM,CAAChwD,KAAD,CAAP,CAFd,EAE+B;AAC7Bu+R,kBAAAA,IAAI,GAAGA,IAAI,GAAG,CAAP,GAAW,WAAWjnQ,OAAX,CAAmB04B,MAAM,CAAChwD,KAAK,EAAN,CAAzB,CAAlB;AACD;AACF;;AACD+0G,cAAAA,GAAG,IAAIvvG,MAAM,CAAC4sE,YAAP,CAAoBmsN,IAApB,CAAP;AACD,aArBD,MAqBO;AACLxpL,cAAAA,GAAG,IAAIgtN,EAAP;AACD;;AACD;AAtDJ;AAwDD,OAzDD,MAyDO;AACL,YAAIA,EAAE,KAAK,IAAP,IAAe/xQ,MAAM,CAAChwD,KAAD,CAAN,KAAkB,IAArC,EAA2C;AACzC,YAAEA,KAAF;AACD;AACF;AACF,KAhEM,MAgEA,IAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7C;AACD,KAFM,MAEA;AACLomC,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAI7pD,KAAK,KAAK,EAAd,EAAkB;AAChB63D,IAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD;;AAED,SAAO;AACL90T,IAAAA,IAAI,EAAEuzT,kBADD;AAELxwU,IAAAA,KAAK,EAAE63G,GAFF;AAGL+7N,IAAAA,KAAK,EAAEA,KAHF;AAIL9qU,IAAAA,KAAK,EAAEA,KAJF;AAKL6F,IAAAA,GAAG,EAAE7L;AALA,GAAP;AAOD;;AAED,SAASixU,UAAT,CAAoBj1K,OAApB,EAA6Bl/J,KAA7B,EAAoC;AAClC,MAAIwnC,GAAG,GAAG03H,OAAV;;AAEA,MAAIl/J,KAAK,CAACw6B,OAAN,CAAc,GAAd,KAAsB,CAA1B,EAA6B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAgN,IAAAA,GAAG,GAAGA,GAAG,CACN7mC,OADG,CACK,wBADL,EAC+B,UAASssM,EAAT,EAAamnI,EAAb,EAAiB;AAClD,UAAIp8M,QAAQ,CAACo8M,EAAD,EAAK,EAAL,CAAR,IAAoB,QAAxB,EAAkC;AAChC,eAAO,GAAP;AACD;;AACDnB,MAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,KANG,EAOHpxU,OAPG,CAOK,iCAPL,EAOwC,GAPxC,CAAN;AAQD,GApBiC,CAsBlC;;;AACA,MAAI;AACF,QAAIo3H,MAAJ,CAAWvwF,GAAX;AACD,GAFD,CAEE,OAAO1rC,CAAP,EAAU;AACVm3U,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,CAAV;AACD,GA3BiC,CA6BlC;AACA;AACA;;;AACA,MAAI;AACF,WAAO,IAAIh6M,MAAJ,CAAWmnC,OAAX,EAAoBl/J,KAApB,CAAP;AACD,GAFD,CAEE,OAAOq0U,SAAP,EAAkB;AAClB,WAAO,IAAP;AACD;AACF;;AAED,SAASC,cAAT,GAA0B;AACxB,MAAIrP,EAAJ,EAAQhtN,GAAR,EAAas8N,WAAb,EAA0BC,UAA1B,EAAsCt9Q,IAAtC;AAEA+tQ,EAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;AACAW,EAAAA,MAAM,CAACohU,EAAE,KAAK,GAAR,EAAa,oDAAb,CAAN;AACAhtN,EAAAA,GAAG,GAAG/kD,MAAM,CAAChwD,KAAK,EAAN,CAAZ;AAEAqxU,EAAAA,WAAW,GAAG,KAAd;AACAC,EAAAA,UAAU,GAAG,KAAb;;AACA,SAAOtxU,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX;AACA+0G,IAAAA,GAAG,IAAIgtN,EAAP;;AACA,QAAIA,EAAE,KAAK,IAAX,EAAiB;AACfA,MAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAK,EAAN,CAAX,CADe,CAEf;;AACA,UAAIyvU,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AACtCohQ,QAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD;;AACD/5N,MAAAA,GAAG,IAAIgtN,EAAP;AACD,KAPD,MAOO,IAAI0N,gBAAgB,CAAC1N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAApB,EAAwC;AAC7CohQ,MAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,KAFM,MAEA,IAAIuC,WAAJ,EAAiB;AACtB,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACdsP,QAAAA,WAAW,GAAG,KAAd;AACD;AACF,KAJM,MAIA;AACL,UAAItP,EAAE,KAAK,GAAX,EAAgB;AACduP,QAAAA,UAAU,GAAG,IAAb;AACA;AACD,OAHD,MAGO,IAAIvP,EAAE,KAAK,GAAX,EAAgB;AACrBsP,QAAAA,WAAW,GAAG,IAAd;AACD;AACF;AACF;;AAED,MAAI,CAACC,UAAL,EAAiB;AACfvB,IAAAA,UAAU,CAAC,EAAD,EAAKjB,yBAAL,CAAV;AACD,GArCuB,CAuCxB;;;AACA96Q,EAAAA,IAAI,GAAG+gD,GAAG,CAACv7E,MAAJ,CAAW,CAAX,EAAcu7E,GAAG,CAACv7G,MAAJ,GAAa,CAA3B,CAAP;AACA,SAAO;AACL0D,IAAAA,KAAK,EAAE82D,IADF;AAELu9Q,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAASy8N,eAAT,GAA2B;AACzB,MAAIzP,EAAJ,EAAQhtN,GAAR,EAAaj4G,KAAb;AAEAi4G,EAAAA,GAAG,GAAG,EAAN;AACAj4G,EAAAA,KAAK,GAAG,EAAR;;AACA,SAAOkD,KAAK,GAAGxG,MAAf,EAAuB;AACrBuoU,IAAAA,EAAE,GAAG/xQ,MAAM,CAAChwD,KAAD,CAAX;;AACA,QAAI,CAAC2vU,gBAAgB,CAAC5N,EAAE,CAACpzP,UAAH,CAAc,CAAd,CAAD,CAArB,EAAyC;AACvC;AACD;;AAED,MAAE3uE,KAAF;;AACA,QAAI+hU,EAAE,KAAK,IAAP,IAAe/hU,KAAK,GAAGxG,MAA3B,EAAmC;AACjCu2U,MAAAA,UAAU,CAAC,EAAD,EAAKxB,sBAAL,EAA6BU,OAA7B,CAAV;AACD,KAFD,MAEO;AACLnyU,MAAAA,KAAK,IAAIilU,EAAT;AACAhtN,MAAAA,GAAG,IAAIgtN,EAAP;AACD;AACF;;AAED,MAAIjlU,KAAK,CAACO,MAAN,CAAa,WAAb,KAA6B,CAAjC,EAAoC;AAClC0yU,IAAAA,UAAU,CAAC,EAAD,EAAKlB,oBAAL,EAA2B/xU,KAA3B,CAAV;AACD;;AAED,SAAO;AACLI,IAAAA,KAAK,EAAEJ,KADF;AAELy0U,IAAAA,OAAO,EAAEx8N;AAFJ,GAAP;AAID;;AAED,SAAS08N,UAAT,GAAsB;AACpB,MAAIzrU,KAAJ,EAAWguD,IAAX,EAAiBl3D,KAAjB,EAAwBI,KAAxB;AAEAgwU,EAAAA,SAAS,GAAG,IAAZ;AACA2C,EAAAA,WAAW;AACX7pU,EAAAA,KAAK,GAAGhG,KAAR;AAEAg0D,EAAAA,IAAI,GAAGo9Q,cAAc,EAArB;AACAt0U,EAAAA,KAAK,GAAG00U,eAAe,EAAvB;AACAt0U,EAAAA,KAAK,GAAG+zU,UAAU,CAACj9Q,IAAI,CAAC92D,KAAN,EAAaJ,KAAK,CAACI,KAAnB,CAAlB;AAEA,SAAO;AACLq0U,IAAAA,OAAO,EAAEv9Q,IAAI,CAACu9Q,OAAL,GAAez0U,KAAK,CAACy0U,OADzB;AAELr0U,IAAAA,KAAK,EAAEA,KAFF;AAGLw0U,IAAAA,KAAK,EAAE;AACL11K,MAAAA,OAAO,EAAEhoG,IAAI,CAAC92D,KADT;AAELJ,MAAAA,KAAK,EAAEA,KAAK,CAACI;AAFR,KAHF;AAOL8I,IAAAA,KAAK,EAAEA,KAPF;AAQL6F,IAAAA,GAAG,EAAE7L;AARA,GAAP;AAUD;;AAED,SAAS2xU,gBAAT,CAA0Bp5H,KAA1B,EAAiC;AAC/B,SAAOA,KAAK,CAACp+L,IAAN,KAAekzT,eAAf,IACL90H,KAAK,CAACp+L,IAAN,KAAemzT,YADV,IAEL/0H,KAAK,CAACp+L,IAAN,KAAegzT,mBAFV,IAGL50H,KAAK,CAACp+L,IAAN,KAAeozT,gBAHjB;AAID;;AAED,SAASqE,OAAT,GAAmB;AACjB,MAAI7P,EAAJ;AAEA8N,EAAAA,WAAW;;AAEX,MAAI7vU,KAAK,IAAIxG,MAAb,EAAqB;AACnB,WAAO;AACL2gB,MAAAA,IAAI,EAAEizT,QADD;AAELpnU,MAAAA,KAAK,EAAEhG,KAFF;AAGL6L,MAAAA,GAAG,EAAE7L;AAHA,KAAP;AAKD;;AAED+hU,EAAAA,EAAE,GAAG/xQ,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAlB,CAAL;;AAEA,MAAI0vU,iBAAiB,CAAC3N,EAAD,CAArB,EAA2B;AACzB,WAAOsO,cAAc,EAArB;AACD,GAjBgB,CAmBjB;;;AACA,MAAItO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAAtB,IAA8BA,EAAE,KAAK,IAAzC,EAA+C;AAC7C,WAAOuO,cAAc,EAArB;AACD,GAtBgB,CAwBjB;;;AACA,MAAIvO,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,IAA1B,EAAgC;AAC9B,WAAOiP,iBAAiB,EAAxB;AACD,GA3BgB,CA8BjB;AACA;;;AACA,MAAIjP,EAAE,KAAK,IAAX,EAAiB;AACf,QAAIsN,cAAc,CAACr/Q,MAAM,CAAC2e,UAAP,CAAkB3uE,KAAK,GAAG,CAA1B,CAAD,CAAlB,EAAkD;AAChD,aAAO+wU,kBAAkB,EAAzB;AACD;;AACD,WAAOT,cAAc,EAArB;AACD;;AAED,MAAIjB,cAAc,CAACtN,EAAD,CAAlB,EAAwB;AACtB,WAAOgP,kBAAkB,EAAzB;AACD;;AAED,SAAOT,cAAc,EAArB;AACD;;AAED,SAASuB,GAAT,GAAe;AACb,MAAIt5H,KAAJ;AAEAA,EAAAA,KAAK,GAAG20H,SAAR;AACAltU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AAEAqhU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AAEA5xU,EAAAA,KAAK,GAAGu4M,KAAK,CAAC1sM,GAAd;AAEA,SAAO0sM,KAAP;AACD;;AAED,SAASpF,IAAT,GAAgB;AACd,MAAInrE,GAAJ;AAEAA,EAAAA,GAAG,GAAGhoI,KAAN;AAEAktU,EAAAA,SAAS,GAAG0E,OAAO,EAAnB;AACA5xU,EAAAA,KAAK,GAAGgoI,GAAR;AACD;;AAED,SAAS8pM,qBAAT,CAA+BpH,QAA/B,EAAyC;AACvC,MAAIzlT,IAAI,GAAG,IAAI2nT,YAAJ,CAAYgB,qBAAZ,CAAX;AACA3oT,EAAAA,IAAI,CAACylT,QAAL,GAAgBA,QAAhB;AACA,SAAOzlT,IAAP;AACD;;AAED,SAAS8sT,sBAAT,CAAgCnnI,QAAhC,EAA0Cv9J,IAA1C,EAAgDC,KAAhD,EAAuD;AACrD,MAAIroB,IAAI,GAAG,IAAI2nT,YAAJ,CAAahiI,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAK,IAAnC,GAA2CsjI,uBAA3C,GAAqEL,sBAAjF,CAAX;AACA5oT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAACooB,IAAL,GAAYA,IAAZ;AACApoB,EAAAA,IAAI,CAACqoB,KAAL,GAAaA,KAAb;AACA,SAAOroB,IAAP;AACD;;AAED,SAAS+sT,oBAAT,CAA8BnF,MAA9B,EAAsC9yU,IAAtC,EAA4C;AAC1C,MAAIkrB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYkB,oBAAZ,CAAX;AACA7oT,EAAAA,IAAI,CAAC4nT,MAAL,GAAcA,MAAd;AACA5nT,EAAAA,IAAI,CAAChrB,SAAL,GAAiBF,IAAjB;AACA,SAAOkrB,IAAP;AACD;;AAED,SAASgtT,2BAAT,CAAqCpqT,IAArC,EAA2CilT,UAA3C,EAAuDC,SAAvD,EAAkE;AAChE,MAAI9nT,IAAI,GAAG,IAAI2nT,YAAJ,CAAYmB,2BAAZ,CAAX;AACA9oT,EAAAA,IAAI,CAAC4C,IAAL,GAAYA,IAAZ;AACA5C,EAAAA,IAAI,CAAC6nT,UAAL,GAAkBA,UAAlB;AACA7nT,EAAAA,IAAI,CAAC8nT,SAAL,GAAiBA,SAAjB;AACA,SAAO9nT,IAAP;AACD;;AAED,SAASitT,gBAAT,CAA0Bz2U,IAA1B,EAAgC;AAC9B,MAAIwpB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYoB,gBAAZ,CAAX;AACA/oT,EAAAA,IAAI,CAACxpB,IAAL,GAAYA,IAAZ;AACA,SAAOwpB,IAAP;AACD;;AAED,SAASktT,aAAT,CAAuB55H,KAAvB,EAA8B;AAC5B,MAAItzL,IAAI,GAAG,IAAI2nT,YAAJ,CAAYqB,aAAZ,CAAX;AACAhpT,EAAAA,IAAI,CAAC/nB,KAAL,GAAaq7M,KAAK,CAACr7M,KAAnB;AACA+nB,EAAAA,IAAI,CAAC63K,GAAL,GAAW9sI,MAAM,CAACzsD,KAAP,CAAag1M,KAAK,CAACvyM,KAAnB,EAA0BuyM,KAAK,CAAC1sM,GAAhC,CAAX;;AACA,MAAI0sM,KAAK,CAACm5H,KAAV,EAAiB;AACf,QAAIzsT,IAAI,CAAC63K,GAAL,KAAa,IAAjB,EAAuB;AACrB73K,MAAAA,IAAI,CAAC63K,GAAL,GAAW,QAAX;AACD;;AACD73K,IAAAA,IAAI,CAACysT,KAAL,GAAan5H,KAAK,CAACm5H,KAAnB;AACD;;AACD,SAAOzsT,IAAP;AACD;;AAED,SAASmtT,sBAAT,CAAgCr/H,QAAhC,EAA0CxR,MAA1C,EAAkDkQ,QAAlD,EAA4D;AAC1D,MAAIxsL,IAAI,GAAG,IAAI2nT,YAAJ,CAAYuB,sBAAZ,CAAX;AACAlpT,EAAAA,IAAI,CAACotT,QAAL,GAAgBt/H,QAAQ,KAAK,GAA7B;AACA9tL,EAAAA,IAAI,CAACs8K,MAAL,GAAcA,MAAd;AACAt8K,EAAAA,IAAI,CAACwsL,QAAL,GAAgBA,QAAhB;AACA,MAAI,CAACxsL,IAAI,CAACotT,QAAV,EAAoB5gI,QAAQ,CAAC6gI,MAAT,GAAkB,IAAlB;AACpB,SAAOrtT,IAAP;AACD;;AAED,SAASstT,sBAAT,CAAgCl3H,UAAhC,EAA4C;AAC1C,MAAIp2L,IAAI,GAAG,IAAI2nT,YAAJ,CAAYwB,sBAAZ,CAAX;AACAnpT,EAAAA,IAAI,CAACo2L,UAAL,GAAkBA,UAAlB;AACA,SAAOp2L,IAAP;AACD;;AAED,SAASutT,cAAT,CAAwBC,IAAxB,EAA8Bt0U,GAA9B,EAAmCjB,KAAnC,EAA0C;AACxC,MAAI+nB,IAAI,GAAG,IAAI2nT,YAAJ,CAAYyB,cAAZ,CAAX;AACAppT,EAAAA,IAAI,CAAC9mB,GAAL,GAAWA,GAAX;AACA8mB,EAAAA,IAAI,CAAC/nB,KAAL,GAAaA,KAAb;AACA+nB,EAAAA,IAAI,CAACwtT,IAAL,GAAYA,IAAZ;AACA,SAAOxtT,IAAP;AACD;;AAED,SAASytT,qBAAT,CAA+B9nI,QAA/B,EAAyCoiI,QAAzC,EAAmD;AACjD,MAAI/nT,IAAI,GAAG,IAAI2nT,YAAJ,CAAY0B,qBAAZ,CAAX;AACArpT,EAAAA,IAAI,CAAC2lL,QAAL,GAAgBA,QAAhB;AACA3lL,EAAAA,IAAI,CAAC+nT,QAAL,GAAgBA,QAAhB;AACA/nT,EAAAA,IAAI,CAACq4F,MAAL,GAAc,IAAd;AACA,SAAOr4F,IAAP;AACD,EAED;;;AAEA,SAAS8qT,UAAT,CAAoBx3H,KAApB,EAA2Bo6H,aAA3B,EAA0C;AACxC,MAAIp0T,KAAJ;AAAA,MACExkB,IAAI,GAAGC,KAAK,CAACM,SAAN,CAAgBiJ,KAAhB,CAAsBvK,IAAtB,CAA2BiB,SAA3B,EAAsC,CAAtC,CADT;AAAA,MAEE4G,GAAG,GAAG8xU,aAAa,CAACl1U,OAAd,CACJ,QADI,EAEJ,UAASm1U,KAAT,EAAgB5yU,KAAhB,EAAuB;AACrBW,IAAAA,MAAM,CAACX,KAAK,GAAGjG,IAAI,CAACP,MAAd,EAAsB,oCAAtB,CAAN;AACA,WAAOO,IAAI,CAACiG,KAAD,CAAX;AACD,GALG,CAFR;AAWAue,EAAAA,KAAK,GAAG,IAAI9lB,KAAJ,CAAUoI,GAAV,CAAR;AACA0d,EAAAA,KAAK,CAACve,KAAN,GAAcA,KAAd;AACAue,EAAAA,KAAK,CAAC07P,WAAN,GAAoBp5Q,GAApB;AACA,QAAM0d,KAAN;AACD,EAED;;;AAEA,SAASs0T,eAAT,CAAyBt6H,KAAzB,EAAgC;AAC9B,MAAIA,KAAK,CAACp+L,IAAN,KAAeizT,QAAnB,EAA6B;AAC3B2C,IAAAA,UAAU,CAACx3H,KAAD,EAAQq2H,oBAAR,CAAV;AACD;;AAED,MAAIr2H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAnB,EAAwC;AACtCuC,IAAAA,UAAU,CAACx3H,KAAD,EAAQi2H,uBAAR,CAAV;AACD;;AAED,MAAIj2H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAnB,EAAuC;AACrCqC,IAAAA,UAAU,CAACx3H,KAAD,EAAQk2H,uBAAR,CAAV;AACD;;AAED,MAAIl2H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClC0C,IAAAA,UAAU,CAACx3H,KAAD,EAAQm2H,2BAAR,CAAV;AACD;;AAED,MAAIn2H,KAAK,CAACp+L,IAAN,KAAemzT,YAAnB,EAAiC;AAC/ByC,IAAAA,UAAU,CAACx3H,KAAD,EAAQo2H,yBAAR,CAAV;AACD,GAnB6B,CAqB9B;;;AACAoB,EAAAA,UAAU,CAACx3H,KAAD,EAAQg2H,sBAAR,EAAgCh2H,KAAK,CAACr7M,KAAtC,CAAV;AACD,EAED;AACA;;;AAEA,SAASy6E,MAAT,CAAgBz6E,KAAhB,EAAuB;AACrB,MAAIq7M,KAAK,GAAGs5H,GAAG,EAAf;;AACA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACr7M,KAAN,KAAgBA,KAAtD,EAA6D;AAC3D21U,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;AACF,EAED;;;AAEA,SAASjzF,KAAT,CAAepoH,KAAf,EAAsB;AACpB,SAAOgwU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAChwU,KAAV,KAAoBA,KAAjE;AACD,EAED;;;AAEA,SAAS41U,YAAT,CAAsBC,OAAtB,EAA+B;AAC7B,SAAO7F,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAAnB,IAAmCJ,SAAS,CAAChwU,KAAV,KAAoB61U,OAA9D;AACD,EAED;;;AAEA,SAASC,qBAAT,GAAiC;AAC/B,MAAItI,QAAQ,GAAG,EAAf;AAEA1qU,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClB,QAAIA,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,MAAAA,GAAG;AACHnH,MAAAA,QAAQ,CAACvwU,IAAT,CAAc,IAAd;AACD,KAHD,MAGO;AACLuwU,MAAAA,QAAQ,CAACvwU,IAAT,CAAc84U,0BAA0B,EAAxC;;AAEA,UAAI,CAAC3tN,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,QAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;AACF;;AAEDk6P,EAAAA,GAAG;AAEH,SAAOC,qBAAqB,CAACpH,QAAD,CAA5B;AACD,EAED;;;AAEA,SAASwI,sBAAT,GAAkC;AAChC,MAAI36H,KAAJ;AAEAv4M,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAGs5H,GAAG,EAAX,CAJgC,CAMhC;AACA;;AAEA,MAAIt5H,KAAK,CAACp+L,IAAN,KAAeuzT,kBAAf,IAAqCn1H,KAAK,CAACp+L,IAAN,KAAeqzT,mBAAxD,EAA6E;AAC3E,QAAIj1H,KAAK,CAACu4H,KAAV,EAAiB;AACff,MAAAA,UAAU,CAACx3H,KAAD,EAAQw2H,yBAAR,CAAV;AACD;;AACD,WAAOoD,aAAa,CAAC55H,KAAD,CAApB;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASi2U,mBAAT,GAA+B;AAC7B,MAAI56H,KAAJ,EAAWp6M,GAAX,EAAgBgP,EAAhB,EAAoBjQ,KAApB;AAEA8C,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAG20H,SAAR;;AAEA,MAAI30H,KAAK,CAACp+L,IAAN,KAAekzT,eAAnB,EAAoC;AAClClgU,IAAAA,EAAE,GAAG+lU,sBAAsB,EAA3B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASrlU,EAAT,EAAajQ,KAAb,CAArB;AACD;;AACD,MAAIq7M,KAAK,CAACp+L,IAAN,KAAeizT,QAAf,IAA2B70H,KAAK,CAACp+L,IAAN,KAAeszT,eAA9C,EAA+D;AAC7DoF,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD,GAFD,MAEO;AACLp6M,IAAAA,GAAG,GAAG+0U,sBAAsB,EAA5B;AACAv7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAz6E,IAAAA,KAAK,GAAG+1U,0BAA0B,EAAlC;AACA,WAAOT,cAAc,CAAC,MAAD,EAASr0U,GAAT,EAAcjB,KAAd,CAArB;AACD;AACF;;AAED,SAASk2U,sBAAT,GAAkC;AAChC,MAAI/3H,UAAU,GAAG,EAAjB;AAAA,MACE5J,QADF;AAAA,MACYh2M,IADZ;AAAA,MACkB0C,GADlB;AAAA,MACuBwF,GAAG,GAAG,EAD7B;AAAA,MAEEkG,QAAQ,GAAGrE,MAFb;AAIAxF,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACA2xE,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,SAAO,CAAC2tC,KAAK,CAAC,GAAD,CAAb,EAAoB;AAClBmsF,IAAAA,QAAQ,GAAG0hI,mBAAmB,EAA9B;;AAEA,QAAI1hI,QAAQ,CAACtzM,GAAT,CAAagc,IAAb,KAAsB6zT,gBAA1B,EAA4C;AAC1CvyU,MAAAA,IAAI,GAAGg2M,QAAQ,CAACtzM,GAAT,CAAa1C,IAApB;AACD,KAFD,MAEO;AACLA,MAAAA,IAAI,GAAGoO,QAAQ,CAAC4nM,QAAQ,CAACtzM,GAAT,CAAajB,KAAd,CAAf;AACD;;AAEDiB,IAAAA,GAAG,GAAG,MAAM1C,IAAZ;;AACA,QAAIwB,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAjB,CAAgC73H,IAAhC,CAAqC2K,GAArC,EAA0CxF,GAA1C,CAAJ,EAAoD;AAClD4xU,MAAAA,UAAU,CAAC,EAAD,EAAKf,8BAAL,CAAV;AACD,KAFD,MAEO;AACLrrU,MAAAA,GAAG,CAACxF,GAAD,CAAH,GAAW,IAAX;AACD;;AAEDk9M,IAAAA,UAAU,CAAClhN,IAAX,CAAgBs3M,QAAhB;;AAEA,QAAI,CAACnsF,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO46P,sBAAsB,CAACl3H,UAAD,CAA7B;AACD,EAED;;;AAEA,SAASg4H,oBAAT,GAAgC;AAC9B,MAAIzyU,IAAJ;AAEA+2E,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA/2E,EAAAA,IAAI,GAAG0yU,eAAe,EAAtB;AAEA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO/2E,IAAP;AACD,EAGD;;;AAEA,IAAI2yU,aAAa,GAAG;AAClB,QAAM;AADY,CAApB;;AAIA,SAASC,sBAAT,GAAkC;AAChC,MAAIr5T,IAAJ,EAAUo+L,KAAV,EAAiB33M,IAAjB;;AAEA,MAAI0kH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO+tN,oBAAoB,EAA3B;AACD;;AAED,MAAI/tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO0tN,qBAAqB,EAA5B;AACD;;AAED,MAAI1tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,WAAO8tN,sBAAsB,EAA7B;AACD;;AAEDj5T,EAAAA,IAAI,GAAG+yT,SAAS,CAAC/yT,IAAjB;AACAna,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;;AAGA,MAAImU,IAAI,KAAKkzT,eAAT,IAA4BkG,aAAa,CAACrG,SAAS,CAAChwU,KAAX,CAA7C,EAAgE;AAC9D0D,IAAAA,IAAI,GAAGsxU,gBAAgB,CAACL,GAAG,GAAG30U,KAAP,CAAvB;AACD,GAFD,MAEO,IAAIid,IAAI,KAAKuzT,kBAAT,IAA+BvzT,IAAI,KAAKqzT,mBAA5C,EAAiE;AACtE,QAAIN,SAAS,CAAC4D,KAAd,EAAqB;AACnBf,MAAAA,UAAU,CAAC7C,SAAD,EAAY6B,yBAAZ,CAAV;AACD;;AACDnuU,IAAAA,IAAI,GAAGuxU,aAAa,CAACN,GAAG,EAAJ,CAApB;AACD,GALM,MAKA,IAAI13T,IAAI,KAAKmzT,YAAb,EAA2B;AAChC,UAAM,IAAI70U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI/0T,IAAI,KAAKgzT,mBAAb,EAAkC;AACvC50H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAeq7M,KAAK,CAACr7M,KAAN,KAAgB,MAA/B;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIp+L,IAAI,KAAKozT,gBAAb,EAA+B;AACpCh1H,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAACr7M,KAAN,GAAc,IAAd;AACA0D,IAAAA,IAAI,GAAGuxU,aAAa,CAAC55H,KAAD,CAApB;AACD,GAJM,MAIA,IAAIjzF,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,IAAD,CAAvB,EAA+B;AACpC1kH,IAAAA,IAAI,GAAGuxU,aAAa,CAACV,UAAU,EAAX,CAApB;AACAt+H,IAAAA,IAAI;AACL,GAHM,MAGA;AACL0/H,IAAAA,eAAe,CAAChB,GAAG,EAAJ,CAAf;AACD;;AAED,SAAOjxU,IAAP;AACD,EAED;;;AAEA,SAAS6yU,cAAT,GAA0B;AACxB,MAAI15U,IAAI,GAAG,EAAX;AAEA49E,EAAAA,MAAM,CAAC,GAAD,CAAN;;AAEA,MAAI,CAAC2tC,KAAK,CAAC,GAAD,CAAV,EAAiB;AACf,WAAOtlH,KAAK,GAAGxG,MAAf,EAAuB;AACrBO,MAAAA,IAAI,CAACI,IAAL,CAAU84U,0BAA0B,EAApC;;AACA,UAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd;AACD;;AACD3tC,MAAAA,MAAM,CAAC,GAAD,CAAN;AACD;AACF;;AAEDA,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO59E,IAAP;AACD;;AAED,SAAS25U,wBAAT,GAAoC;AAClC,MAAIn7H,KAAJ;AACAv4M,EAAAA,KAAK,GAAGktU,SAAS,CAAClnU,KAAlB;AACAuyM,EAAAA,KAAK,GAAGs5H,GAAG,EAAX;;AAEA,MAAI,CAACF,gBAAgB,CAACp5H,KAAD,CAArB,EAA8B;AAC5Bs6H,IAAAA,eAAe,CAACt6H,KAAD,CAAf;AACD;;AAED,SAAO25H,gBAAgB,CAAC35H,KAAK,CAACr7M,KAAP,CAAvB;AACD;;AAED,SAASy2U,sBAAT,GAAkC;AAChCh8P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO+7P,wBAAwB,EAA/B;AACD;;AAED,SAASE,mBAAT,GAA+B;AAC7B,MAAIhzU,IAAJ;AAEA+2E,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA/2E,EAAAA,IAAI,GAAG0yU,eAAe,EAAtB;AAEA37P,EAAAA,MAAM,CAAC,GAAD,CAAN;AAEA,SAAO/2E,IAAP;AACD;;AAED,SAASizU,oCAAT,GAAgD;AAC9C,MAAIjzU,IAAJ,EAAU7G,IAAV,EAAgB03M,QAAhB;AAEA7wM,EAAAA,IAAI,GAAG4yU,sBAAsB,EAA7B;;AAEA,WAAS;AACP,QAAIluN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdmsF,MAAAA,QAAQ,GAAGkiI,sBAAsB,EAAjC;AACA/yU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHD,MAGO,IAAInsF,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBvrH,MAAAA,IAAI,GAAG05U,cAAc,EAArB;AACA7yU,MAAAA,IAAI,GAAGoxU,oBAAoB,CAACpxU,IAAD,EAAO7G,IAAP,CAA3B;AACD,KAHM,MAGA,IAAIurH,KAAK,CAAC,GAAD,CAAT,EAAgB;AACrBmsF,MAAAA,QAAQ,GAAGmiI,mBAAmB,EAA9B;AACAhzU,MAAAA,IAAI,GAAGwxU,sBAAsB,CAAC,GAAD,EAAMxxU,IAAN,EAAY6wM,QAAZ,CAA7B;AACD,KAHM,MAGA;AACL;AACD;AACF;;AAED,SAAO7wM,IAAP;AACD,EAED;;;AAEA,SAASkzU,sBAAT,GAAkC;AAChC,MAAIlzU,IAAI,GAAGizU,oCAAoC,EAA/C;;AAEA,MAAI3G,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAvB,EAAwC;AACtC,QAAKnoN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAzB,EAAkC;AAChC,YAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD;AACF;;AAED,SAAOtuU,IAAP;AACD,EAED;;;AAEA,SAASmzU,oBAAT,GAAgC;AAC9B,MAAIx7H,KAAJ,EAAW33M,IAAX;;AAEA,MAAIssU,SAAS,CAAC/yT,IAAV,KAAmBszT,eAAnB,IAAsCP,SAAS,CAAC/yT,IAAV,KAAmBmzT,YAA7D,EAA2E;AACzE1sU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD,GAFD,MAEO,IAAIxuN,KAAK,CAAC,IAAD,CAAL,IAAeA,KAAK,CAAC,IAAD,CAAxB,EAAgC;AACrC,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA,IAAI5pN,KAAK,CAAC,GAAD,CAAL,IAAcA,KAAK,CAAC,GAAD,CAAnB,IAA4BA,KAAK,CAAC,GAAD,CAAjC,IAA0CA,KAAK,CAAC,GAAD,CAAnD,EAA0D;AAC/DizF,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAjxU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACAnzU,IAAAA,IAAI,GAAG8xU,qBAAqB,CAACn6H,KAAK,CAACr7M,KAAP,EAAc0D,IAAd,CAA5B;AACD,GAJM,MAIA,IAAIkyU,YAAY,CAAC,QAAD,CAAZ,IAA0BA,YAAY,CAAC,MAAD,CAAtC,IAAkDA,YAAY,CAAC,QAAD,CAAlE,EAA8E;AACnF,UAAM,IAAIr6U,KAAJ,CAAUy2U,QAAV,CAAN;AACD,GAFM,MAEA;AACLtuU,IAAAA,IAAI,GAAGkzU,sBAAsB,EAA7B;AACD;;AAED,SAAOlzU,IAAP;AACD;;AAED,SAASozU,gBAAT,CAA0Bz7H,KAA1B,EAAiC;AAC/B,MAAI07H,IAAI,GAAG,CAAX;;AAEA,MAAI17H,KAAK,CAACp+L,IAAN,KAAeszT,eAAf,IAAkCl1H,KAAK,CAACp+L,IAAN,KAAemzT,YAArD,EAAmE;AACjE,WAAO,CAAP;AACD;;AAED,UAAQ/0H,KAAK,CAACr7M,KAAd;AACE,SAAK,IAAL;AACE+2U,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,YAAL;AACA,SAAK,IAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,IAAL;AACA,SAAK,IAAL;AACA,SAAK,KAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,CAAP;AACA;;AAEF,SAAK,GAAL;AACA,SAAK,GAAL;AACA,SAAK,GAAL;AACEA,MAAAA,IAAI,GAAG,EAAP;AACA;;AAEF;AACE;AAvDJ;;AA0DA,SAAOA,IAAP;AACD,EAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAASC,qBAAT,GAAiC;AAC/B,MAAIh7U,MAAJ,EAAYi7U,OAAZ,EAAqBvzU,IAArB,EAA2B23M,KAA3B,EAAkC07H,IAAlC,EAAwCvkU,KAAxC,EAA+C49B,KAA/C,EAAsDs9J,QAAtD,EAAgEv9J,IAAhE,EAAsEnzC,CAAtE;AAEAhB,EAAAA,MAAM,GAAGg0U,SAAT;AACA7/R,EAAAA,IAAI,GAAG0mS,oBAAoB,EAA3B;AAEAx7H,EAAAA,KAAK,GAAG20H,SAAR;AACA+G,EAAAA,IAAI,GAAGD,gBAAgB,CAACz7H,KAAD,CAAvB;;AACA,MAAI07H,IAAI,KAAK,CAAb,EAAgB;AACd,WAAO5mS,IAAP;AACD;;AACDkrK,EAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACApC,EAAAA,GAAG;AAEHsC,EAAAA,OAAO,GAAG,CAACj7U,MAAD,EAASg0U,SAAT,CAAV;AACA5/R,EAAAA,KAAK,GAAGymS,oBAAoB,EAA5B;AAEArkU,EAAAA,KAAK,GAAG,CAAC29B,IAAD,EAAOkrK,KAAP,EAAcjrK,KAAd,CAAR;;AAEA,SAAO,CAAC2mS,IAAI,GAAGD,gBAAgB,CAAC9G,SAAD,CAAxB,IAAuC,CAA9C,EAAiD;AAE/C;AACA,WAAQx9T,KAAK,CAAClW,MAAN,GAAe,CAAhB,IAAuBy6U,IAAI,IAAIvkU,KAAK,CAACA,KAAK,CAAClW,MAAN,GAAe,CAAhB,CAAL,CAAwBy6U,IAA9D,EAAqE;AACnE3mS,MAAAA,KAAK,GAAG59B,KAAK,CAAC4U,GAAN,EAAR;AACAsmL,MAAAA,QAAQ,GAAGl7L,KAAK,CAAC4U,GAAN,GAAYpnB,KAAvB;AACAmwC,MAAAA,IAAI,GAAG39B,KAAK,CAAC4U,GAAN,EAAP;AACA6vT,MAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,MAAAA,IAAI,GAAGmxU,sBAAsB,CAACnnI,QAAD,EAAWv9J,IAAX,EAAiBC,KAAjB,CAA7B;AACA59B,MAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,KAV8C,CAY/C;;;AACA23M,IAAAA,KAAK,GAAGs5H,GAAG,EAAX;AACAt5H,IAAAA,KAAK,CAAC07H,IAAN,GAAaA,IAAb;AACAvkU,IAAAA,KAAK,CAACvV,IAAN,CAAWo+M,KAAX;AACA47H,IAAAA,OAAO,CAACh6U,IAAR,CAAa+yU,SAAb;AACAtsU,IAAAA,IAAI,GAAGmzU,oBAAoB,EAA3B;AACArkU,IAAAA,KAAK,CAACvV,IAAN,CAAWyG,IAAX;AACD,GAtC8B,CAwC/B;;;AACA1G,EAAAA,CAAC,GAAGwV,KAAK,CAAClW,MAAN,GAAe,CAAnB;AACAoH,EAAAA,IAAI,GAAG8O,KAAK,CAACxV,CAAD,CAAZ;AACAi6U,EAAAA,OAAO,CAAC7vT,GAAR;;AACA,SAAOpqB,CAAC,GAAG,CAAX,EAAc;AACZi6U,IAAAA,OAAO,CAAC7vT,GAAR;AACA1jB,IAAAA,IAAI,GAAGmxU,sBAAsB,CAACriU,KAAK,CAACxV,CAAC,GAAG,CAAL,CAAL,CAAagD,KAAd,EAAqBwS,KAAK,CAACxV,CAAC,GAAG,CAAL,CAA1B,EAAmC0G,IAAnC,CAA7B;AACA1G,IAAAA,CAAC,IAAI,CAAL;AACD;;AAED,SAAO0G,IAAP;AACD,EAED;;;AAEA,SAASqyU,0BAAT,GAAsC;AACpC,MAAIryU,IAAJ,EAAUksU,UAAV,EAAsBC,SAAtB;AAEAnsU,EAAAA,IAAI,GAAGszU,qBAAqB,EAA5B;;AAEA,MAAI5uN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACdusN,IAAAA,GAAG;AACH/E,IAAAA,UAAU,GAAGmG,0BAA0B,EAAvC;AACAt7P,IAAAA,MAAM,CAAC,GAAD,CAAN;AACAo1P,IAAAA,SAAS,GAAGkG,0BAA0B,EAAtC;AAEAryU,IAAAA,IAAI,GAAGqxU,2BAA2B,CAACrxU,IAAD,EAAOksU,UAAP,EAAmBC,SAAnB,CAAlC;AACD;;AAED,SAAOnsU,IAAP;AACD,EAED;;;AAEA,SAAS0yU,eAAT,GAA2B;AACzB,MAAI1yU,IAAI,GAAGqyU,0BAA0B,EAArC;;AAEA,MAAI3tN,KAAK,CAAC,GAAD,CAAT,EAAgB;AACd,UAAM,IAAI7sH,KAAJ,CAAUy2U,QAAV,CAAN,CADc,CACa;AAC5B;;AAED,SAAOtuU,IAAP;AACD;;AAEc,kBAAS29R,IAAT,EAAe;AAC5BvuO,EAAAA,MAAM,GAAGuuO,IAAT;AACAv+R,EAAAA,KAAK,GAAG,CAAR;AACAxG,EAAAA,MAAM,GAAGw2D,MAAM,CAACx2D,MAAhB;AACA0zU,EAAAA,SAAS,GAAG,IAAZ;AAEA/5H,EAAAA,IAAI;AAEJ,MAAIvyM,IAAI,GAAG0yU,eAAe,EAA1B;;AAEA,MAAIpG,SAAS,CAAC/yT,IAAV,KAAmBizT,QAAvB,EAAiC;AAC/B,UAAM,IAAI30U,KAAJ,CAAU,kCAAV,CAAN;AACD;;AACD,SAAOmI,IAAP;AACD;;;;;;;;;AE39CD;;AAEe,kBAAS6zU,OAAT,EAAkB;AAE/B,WAASC,MAAT,CAAgBj5U,IAAhB,EAAsB1B,IAAtB,EAA4B+T,IAA5B,EAAkCqM,IAAlC,EAAwC;AACtC,QAAIQ,GAAG,GAAG85T,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAjB;;AACA,QAAI+T,IAAJ,EAAU;AACR6M,MAAAA,GAAG,GAAG7M,IAAI,GAAG,GAAP,GAAa6M,GAAb,GAAmB,GAAzB;AACA,UAAI7M,IAAI,CAACi3G,WAAL,CAAiB,MAAjB,EAAyB,CAAzB,MAAgC,CAApC,EAAuCpqG,GAAG,GAAG,MAAMA,GAAN,GAAY,GAAlB;AACxC;;AACD,WAAOA,GAAG,GAAG,GAAN,GAAYlf,IAAZ,IAAoB0e,IAAI,GAAG,CAAP,GAAW,EAAX,GAAgBA,IAAI,KAAK,CAAT,GACzC,IADyC,GAEzC,MAAMpgB,IAAI,CAACwJ,KAAL,CAAW,CAAX,EAAcI,GAAd,CAAkB8wU,OAAlB,EAA2B32U,IAA3B,CAAgC,GAAhC,CAAN,GAA6C,GAFxC,CAAP;AAGD;;AAED,WAASqgB,EAAT,CAAY1iB,IAAZ,EAAkBqS,IAAlB,EAAwBqM,IAAxB,EAA8B;AAC5B,WAAOpgB,IAAI,IAAI26U,MAAM,CAACj5U,IAAD,EAAO1B,IAAP,EAAa+T,IAAb,EAAmBqM,IAAnB,CAArB;AACD;;AAED,QAAMkwM,IAAI,GAAG,UAAb;AAAA,QACMsqH,MAAM,GAAG,QADf;AAAA,QAEMC,MAAM,GAAG,QAFf;AAIA,SAAO;AACL;AACA9vU,IAAAA,KAAK,EAAK,cAFL;AAGLC,IAAAA,QAAQ,EAAE,iBAHL;AAILmO,IAAAA,GAAG,EAAO,UAJL;AAKLkB,IAAAA,IAAI,EAAM,WALL;AAMLD,IAAAA,IAAI,EAAM,WANL;AAOLE,IAAAA,IAAI,EAAM,WAPL;AAQL7D,IAAAA,KAAK,EAAK,YARL;AASLnO,IAAAA,IAAI,EAAM,WATL;AAUL4R,IAAAA,GAAG,EAAO,UAVL;AAWL/R,IAAAA,GAAG,EAAO,UAXL;AAYL8F,IAAAA,KAAK,EAAK,YAZL;AAaLkC,IAAAA,GAAG,EAAO,UAbL;AAcL5J,IAAAA,GAAG,EAAO,UAdL;AAeLF,IAAAA,GAAG,EAAO,UAfL;AAgBLuQ,IAAAA,GAAG,EAAO,UAhBL;AAiBLzQ,IAAAA,MAAM,EAAI,aAjBL;AAkBLqG,IAAAA,KAAK,EAAK,YAlBL;AAmBLyN,IAAAA,GAAG,EAAO,UAnBL;AAoBL1R,IAAAA,IAAI,EAAM,WApBL;AAqBL4R,IAAAA,GAAG,EAAO,UArBL;AAuBL/T,IAAAA,KAAK,EAAE,UAASpG,IAAT,EAAe;AACpB,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,sCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,uCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,cAAYrzU,CAAC,CAAC,CAAD,CAAb,GAAiB,aAAjB,GAA+BA,CAAC,CAAC,CAAD,CAAhC,GAAoC,GAApC,GAAwCA,CAAC,CAAC,CAAD,CAAzC,GAA6C,IAApD;AACD,KA5BI;AA8BL;AACA+F,IAAAA,GAAG,EAAc,UA/BZ;AAgCLytO,IAAAA,GAAG,EAAc,UAhCZ;AAiCLigG,IAAAA,QAAQ,EAASxqH,IAjCZ;AAkCL7Z,IAAAA,IAAI,EAAaryL,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CAlCd;AAmCLhE,IAAAA,GAAG,EAAcloM,EAAE,CAAC,QAAD,EAAWksM,IAAX,EAAiB,CAAjB,CAnCd;AAoCLjT,IAAAA,IAAI,EAAaj5L,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CApCd;AAqCL1C,IAAAA,KAAK,EAAYxpM,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CArCd;AAsCL/S,IAAAA,KAAK,EAAYn5L,EAAE,CAAC,UAAD,EAAaksM,IAAb,EAAmB,CAAnB,CAtCd;AAuCL7S,IAAAA,OAAO,EAAUr5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CAvCd;AAwCL3S,IAAAA,OAAO,EAAUv5L,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CAxCd;AAyCLzS,IAAAA,YAAY,EAAKz5L,EAAE,CAAC,iBAAD,EAAoBksM,IAApB,EAA0B,CAA1B,CAzCd;AA0CLphN,IAAAA,IAAI,EAAakV,EAAE,CAAC,SAAD,EAAYksM,IAAZ,EAAkB,CAAlB,CA1Cd;AA2CLyqH,IAAAA,cAAc,EAAG32T,EAAE,CAAC,mBAAD,EAAsBksM,IAAtB,EAA4B,CAA5B,CA3Cd;AA4CL0qH,IAAAA,OAAO,EAAU52T,EAAE,CAAC,YAAD,EAAeksM,IAAf,EAAqB,CAArB,CA5Cd;AA6CL2qH,IAAAA,MAAM,EAAW72T,EAAE,CAAC,WAAD,EAAcksM,IAAd,EAAoB,CAApB,CA7Cd;AA8CL4qH,IAAAA,OAAO,EAAU92T,EAAE,CAAC,gBAAD,EAAmBksM,IAAnB,EAAyB,CAAzB,CA9Cd;AA+CL6qH,IAAAA,QAAQ,EAAS/2T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CA/Cd;AAgDL8qH,IAAAA,QAAQ,EAASh3T,EAAE,CAAC,aAAD,EAAgBksM,IAAhB,EAAsB,CAAtB,CAhDd;AAiDL+qH,IAAAA,UAAU,EAAOj3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CAjDd;AAkDLgrH,IAAAA,UAAU,EAAOl3T,EAAE,CAAC,eAAD,EAAkBksM,IAAlB,EAAwB,CAAxB,CAlDd;AAmDLirH,IAAAA,eAAe,EAAEn3T,EAAE,CAAC,oBAAD,EAAuBksM,IAAvB,EAA6B,CAA7B,CAnDd;AAqDL;AACA7wN,IAAAA,MAAM,EAAO2kB,EAAE,CAAC,QAAD,EAAW,IAAX,EAAiB,CAAC,CAAlB,CAtDV;AAuDLrgB,IAAAA,IAAI,EAASqgB,EAAE,CAAC,MAAD,EAAS,IAAT,CAvDV;AAwDLo3T,IAAAA,OAAO,EAAMp3T,EAAE,CAAC,SAAD,EAAY,IAAZ,CAxDV;AAyDLq3T,IAAAA,WAAW,EAAEr3T,EAAE,CAAC,aAAD,EAAgB,IAAhB,CAzDV;AA0DL5a,IAAAA,KAAK,EAAQ4a,EAAE,CAAC,OAAD,EAAU,IAAV,CA1DV;AA4DLxP,IAAAA,OAAO,EAAE,UAAS5U,IAAT,EAAe;AACtB,aAAO,MAAI06U,OAAO,CAAC16U,IAAI,CAAC,CAAD,CAAL,CAAX,GAAqB,qBAA5B;AACD,KA9DI;AAgEL;AACAmS,IAAAA,UAAU,EAAG,YAjER;AAkEL4oH,IAAAA,QAAQ,EAAK,UAlER;AAmEL78C,IAAAA,KAAK,EAAQ95D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CAnEV;AAoELz8P,IAAAA,KAAK,EAAQ/5D,EAAE,CAAC,aAAD,EAAgBw2T,MAAhB,EAAwB,CAAxB,CApEV;AAqEL37S,IAAAA,SAAS,EAAI7a,EAAE,CAAC,WAAD,EAAcw2T,MAAd,CArEV;AAsEL52U,IAAAA,KAAK,EAAQogB,EAAE,CAAC,OAAD,EAAUw2T,MAAV,CAtEV;AAuELl3U,IAAAA,OAAO,EAAM0gB,EAAE,CAAC,SAAD,EAAYw2T,MAAZ,CAvEV;AAwELx/N,IAAAA,IAAI,EAASh3F,EAAE,CAAC,MAAD,EAASw2T,MAAT,EAAiB,CAAjB,CAxEV;AA0EL;AACAj/I,IAAAA,MAAM,EAAGk/I,MA3EJ;AA4EL/sT,IAAAA,IAAI,EAAK1J,EAAE,CAAC,MAAD,EAASy2T,MAAT,CA5EN;AA8EL;AACAa,IAAAA,EAAE,EAAE,UAAS17U,IAAT,EAAe;AACf,UAAIA,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,mCAAN;AACrB,UAAIO,IAAI,CAACP,MAAL,GAAc,CAAlB,EAAqB,qBAAM,oCAAN;AACrB,YAAM4H,CAAC,GAAGrH,IAAI,CAAC4J,GAAL,CAAS8wU,OAAT,CAAV;AACA,aAAO,MAAIrzU,CAAC,CAAC,CAAD,CAAL,GAAS,GAAT,GAAaA,CAAC,CAAC,CAAD,CAAd,GAAkB,GAAlB,GAAsBA,CAAC,CAAC,CAAD,CAAvB,GAA2B,GAAlC;AACD;AApFE,GAAP;AAsFD;;;;;;;;;AC7GD;;AACA;;AACA;;;;AAEA,SAASs0U,WAAT,CAAqBh4U,CAArB,EAAwB;AACtB,QAAM0K,CAAC,GAAG1K,CAAC,IAAIA,CAAC,CAAClE,MAAF,GAAW,CAA1B;AACA,SAAO4O,CAAC,KACH1K,CAAC,CAAC,CAAD,CAAD,KAAO,GAAP,IAAcA,CAAC,CAAC0K,CAAD,CAAD,KAAO,GAAtB,IACC1K,CAAC,CAAC,CAAD,CAAD,KAAO,IAAP,IAAeA,CAAC,CAAC0K,CAAD,CAAD,KAAO,IAFnB,CAAD,GAGD1K,CAAC,CAAC6F,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAHC,GAGgB7F,CAHvB;AAID;;AAEc,kBAASywM,GAAT,EAAc;AAC3BA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;AAEA,QAAMk1I,SAAS,GAAGl1I,GAAG,CAACk1I,SAAJ,GAAgB,qBAAMl1I,GAAG,CAACk1I,SAAV,CAAhB,GAAuC,EAAzD;AAAA,QACMC,SAAS,GAAGn1I,GAAG,CAACm1I,SAAJ,GAAgB,qBAAMn1I,GAAG,CAACm1I,SAAV,CAAhB,GAAuC,EADzD;AAAA,QAEMrlL,SAAS,GAAGkwC,GAAG,CAAClwC,SAAJ,IAAiBm2K,kBAFnC;AAAA,QAGMwB,SAAS,GAAG,CAACznI,GAAG,CAACynI,SAAJ,IAAiBpB,kBAAlB,EAA6Bt1G,KAA7B,CAHlB;AAAA,QAIM22G,SAAS,GAAG1nI,GAAG,CAAC0nI,SAJtB;AAAA,QAKMC,QAAQ,GAAG3nI,GAAG,CAAC2nI,QALrB;AAAA,QAMMC,YAAY,GAAG,0BAAWF,SAAX,IACXA,SADW,GAEX1oU,EAAE,IAAK,GAAE0oU,SAAU,KAAI1oU,EAAG,IARpC;;AAUA,MAAI6oU,OAAO,GAAG,EAAd;AAAA,MACIh+R,MAAM,GAAG,EADb;AAAA,MAEIi+R,WAAW,GAAG,CAFlB;;AAIA,WAAS/2G,KAAT,CAAeg3G,GAAf,EAAoB;AAClB,QAAI,wBAASA,GAAT,CAAJ,EAAmB,OAAOA,GAAP;AACnB,UAAMvkJ,SAAS,GAAGwkJ,UAAU,CAACD,GAAG,CAAC/7T,IAAL,CAA5B;AACA,QAAIw3K,SAAS,IAAI,IAAjB,EAAuB,qBAAM,uBAAuBukJ,GAAG,CAAC/7T,IAAjC;AACvB,WAAOw3K,SAAS,CAACukJ,GAAD,CAAhB;AACD;;AAED,QAAMC,UAAU,GAAG;AACjBjK,IAAAA,OAAO,EAAE9jU,CAAC,IAAIA,CAAC,CAAC00L,GADC;AAGjBguF,IAAAA,UAAU,EAAE1iR,CAAC,IAAI;AACf,YAAM+E,EAAE,GAAG/E,CAAC,CAAC3M,IAAb;;AACA,UAAIw6U,WAAW,GAAG,CAAlB,EAAqB;AACnB,eAAO9oU,EAAP;AACD,OAFD,MAEO,IAAI,8BAAem2U,SAAf,EAA0Bn2U,EAA1B,CAAJ,EAAmC;AACxC,eAAO,qBAAM,yBAAyBA,EAA/B,CAAP;AACD,OAFM,MAEA,IAAI,8BAAe8wJ,SAAf,EAA0B9wJ,EAA1B,CAAJ,EAAmC;AACxC,eAAO8wJ,SAAS,CAAC9wJ,EAAD,CAAhB;AACD,OAFM,MAEA,IAAI,8BAAek2U,SAAf,EAA0Bl2U,EAA1B,CAAJ,EAAmC;AACxC,eAAOA,EAAP;AACD,OAFM,MAEA;AACL6oU,QAAAA,OAAO,CAAC7oU,EAAD,CAAP,GAAc,CAAd;AACA,eAAO4oU,YAAY,CAAC5oU,EAAD,CAAnB;AACD;AACF,KAjBgB;AAmBjBs/T,IAAAA,gBAAgB,EAAErkU,CAAC,IAAI;AACnB,YAAMrB,CAAC,GAAG,CAACqB,CAAC,CAACiqU,QAAb;AAAA,YACMxsT,CAAC,GAAGq5M,KAAK,CAAC92N,CAAC,CAACm5L,MAAH,CADf;AAEA,UAAIx6L,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,YAAMz3S,CAAC,GAAG0gM,KAAK,CAAC92N,CAAC,CAACqpM,QAAH,CAAf;;AACA,UAAI5rL,CAAC,KAAKiwT,QAAV,EAAoB;AAClB;AACA99R,QAAAA,MAAM,CAAC09R,WAAW,CAACl3S,CAAD,CAAZ,CAAN,GAAyB,CAAzB;AACD;;AACD,UAAIz3B,CAAJ,EAAOkvU,WAAW,IAAI,CAAf;AACP,aAAOpwT,CAAC,IAAI9e,CAAC,GAAG,MAAIy3B,CAAP,GAAW,MAAIA,CAAJ,GAAM,GAAtB,CAAR;AACD,KA9Bc;AAgCjB8tS,IAAAA,cAAc,EAAElkU,CAAC,IAAI;AACjB,UAAIA,CAAC,CAACykU,MAAF,CAAS1yT,IAAT,KAAkB,YAAtB,EAAoC;AAClC,6BAAM,0BAA0B/R,CAAC,CAACykU,MAAF,CAAS1yT,IAAzC;AACD;;AACD,YAAM0yT,MAAM,GAAGzkU,CAAC,CAACykU,MAAF,CAASpxU,IAAxB;AAAA,YACM1B,IAAI,GAAGqO,CAAC,CAACnO,SADf;AAAA,YAEMkkB,EAAE,GAAG,8BAAey3T,SAAf,EAA0B/I,MAA1B,KAAqC+I,SAAS,CAAC/I,MAAD,CAFzD;AAGA,UAAI,CAAC1uT,EAAL,EAAS,qBAAM,4BAA4B0uT,MAAlC;AACT,aAAO,0BAAW1uT,EAAX,IACHA,EAAE,CAACpkB,IAAD,CADC,GAEHokB,EAAE,GAAG,GAAL,GAAWpkB,IAAI,CAAC4J,GAAL,CAASu7N,KAAT,EAAgBphO,IAAhB,CAAqB,GAArB,CAAX,GAAuC,GAF3C;AAGD,KA3Cc;AA6CjBsuU,IAAAA,eAAe,EAAEhkU,CAAC,IACd,MAAMA,CAAC,CAACsiU,QAAF,CAAW/mU,GAAX,CAAeu7N,KAAf,EAAsBphO,IAAtB,CAA2B,GAA3B,CAAN,GAAwC,GA9C3B;AAgDjBuuU,IAAAA,gBAAgB,EAAEjkU,CAAC,IACf,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GAjDvC;AAmDjBq/R,IAAAA,eAAe,EAAEvkU,CAAC,IACd,MAAMA,CAAC,CAACwiM,QAAR,GAAmBs0B,KAAK,CAAC92N,CAAC,CAAC4kU,QAAH,CAAxB,GAAuC,GApD1B;AAsDjBT,IAAAA,qBAAqB,EAAEnkU,CAAC,IACpB,MAAM82N,KAAK,CAAC92N,CAAC,CAACyf,IAAH,CAAX,GACE,GADF,GACQq3M,KAAK,CAAC92N,CAAC,CAAC0kU,UAAH,CADb,GAEE,GAFF,GAEQ5tG,KAAK,CAAC92N,CAAC,CAAC2kU,SAAH,CAFb,GAGE,GA1DW;AA4DjBP,IAAAA,iBAAiB,EAAEpkU,CAAC,IAChB,MAAM82N,KAAK,CAAC92N,CAAC,CAACilC,IAAH,CAAX,GAAsBjlC,CAAC,CAACwiM,QAAxB,GAAmCs0B,KAAK,CAAC92N,CAAC,CAACklC,KAAH,CAAxC,GAAoD,GA7DvC;AA+DjBo/R,IAAAA,gBAAgB,EAAEtkU,CAAC,IACf,MAAMA,CAAC,CAACizM,UAAF,CAAa13M,GAAb,CAAiBu7N,KAAjB,EAAwBphO,IAAxB,CAA6B,GAA7B,CAAN,GAA0C,GAhE7B;AAkEjBquU,IAAAA,QAAQ,EAAE/jU,CAAC,IAAI;AACX6tU,MAAAA,WAAW,IAAI,CAAf;AACA,YAAMz+T,CAAC,GAAG0nN,KAAK,CAAC92N,CAAC,CAACjK,GAAH,CAAf;AACA83U,MAAAA,WAAW,IAAI,CAAf;AACA,aAAOz+T,CAAC,GAAG,GAAJ,GAAU0nN,KAAK,CAAC92N,CAAC,CAAClL,KAAH,CAAtB;AACD;AAvEc,GAAnB;;AA0EA,WAASu3U,OAAT,CAAiByB,GAAjB,EAAsB;AACpB,UAAM92U,MAAM,GAAG;AACbm/R,MAAAA,IAAI,EAAKr/D,KAAK,CAACg3G,GAAD,CADD;AAEbF,MAAAA,OAAO,EAAE/4U,MAAM,CAACof,IAAP,CAAY25T,OAAZ,CAFI;AAGbh+R,MAAAA,MAAM,EAAG/6C,MAAM,CAACof,IAAP,CAAY27B,MAAZ;AAHI,KAAf;AAKAg+R,IAAAA,OAAO,GAAG,EAAV;AACAh+R,IAAAA,MAAM,GAAG,EAAT;AACA,WAAO54C,MAAP;AACD;;AAEDq1U,EAAAA,OAAO,CAACmB,SAAR,GAAoBA,SAApB;AACAnB,EAAAA,OAAO,CAACx2K,SAAR,GAAoBA,SAApB;AAEA,SAAOw2K,OAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7HD;;AAgBA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;ACnBA;;AAEA,SAAS,OAAT,CAAiB,IAAjB,EAA0B;AACxB,QAAM,IAAI,GAAa,EAAvB;;AAEA,MAAI,IAAI,CAAC,IAAL,KAAc,YAAlB,EAAgC;AAC9B,WAAO,CAAC,IAAI,CAAC,IAAN,CAAP;AACD;;AAED,MAAI,IAAI,CAAC,IAAL,KAAc,SAAlB,EAA6B;AAC3B,WAAO,CAAC,IAAI,CAAC,KAAN,CAAP;AACD;;AAED,MAAI,IAAI,CAAC,IAAL,KAAc,kBAAlB,EAAsC;AACpC,IAAA,IAAI,CAAC,IAAL,CAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAN,CAApB;AACA,IAAA,IAAI,CAAC,IAAL,CAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAN,CAApB;AACD;;AAED,SAAO,IAAP;AACD;;AAED,SAAS,eAAT,CAAyB,IAAzB,EAAkC;AAChC,MAAI,IAAI,CAAC,MAAL,CAAY,IAAZ,KAAqB,kBAAzB,EAA6C;AAC3C,WAAO,eAAe,CAAC,IAAI,CAAC,MAAN,CAAtB;AACD;;AACD,SAAO,IAAI,CAAC,MAAL,CAAY,IAAZ,KAAqB,OAA5B;AACD;;AAEK,SAAU,kBAAV,CAA6B,UAA7B,EAA+C;AACnD,QAAM,GAAG,GAAG,2BAAM,UAAN,CAAZ;AACA,QAAM,UAAU,GAAG,IAAI,GAAJ,EAAnB;AACA,EAAA,GAAG,CAAC,KAAJ,CAAW,IAAD,IAAc;AACtB,QAAI,IAAI,CAAC,IAAL,KAAc,kBAAd,IAAoC,eAAe,CAAC,IAAD,CAAvD,EAA+D;AAC7D,MAAA,UAAU,CAAC,GAAX,CAAe,OAAO,CAAC,IAAD,CAAP,CAAc,KAAd,CAAoB,CAApB,EAAuB,IAAvB,CAA4B,GAA5B,CAAf;AACD;AACF,GAJD;AAMA,SAAO,UAAP;AACD;;;;;;;;;ACnCD;;AAEA;;AACA;;AACA;;AAEM,MAAO,UAAP,SAA0B,sBAA1B,CAAsC;AAO1C,EAAA,WAAA,CACE,MADF,EAEmB,KAFnB,EAGmB,MAHnB,EAGwD;AAEtD,UAAM,MAAN;AAHiB,SAAA,KAAA,GAAA,KAAA;AACA,SAAA,MAAA,GAAA,MAAA,CAAqC,CAItD;AACA;;AACA,SAAK,IAAL,GAAY,2BAAW,KAAK,KAAhB,EAAuB,KAAK,MAA5B,EAAoC,IAApC,CAAZ;AAEA,SAAK,gBAAL,GAAwB,qCAAmB,KAAK,IAAxB,CAAxB;AACD;;AAhBM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,UAAJ,CAAe,IAAf,EAAqB,KAAK,KAA1B,EAAiC,qBAAU,KAAK,MAAf,CAAjC,CAAP;AACD;;AAgBM,EAAA,eAAe,GAAA;AACpB,WAAO,KAAK,gBAAZ;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP,CADmB,CACO;AAC3B;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO;AACL,MAAA,IAAI,EAAE,QADD;AAEL,MAAA,IAAI,EAAE,KAAK;AAFN,KAAP;AAID;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,UAAU,KAAK,IAAI,EAA1B;AACD;;AAtCyC;;;;;;;;;;;;;;;;ACT5C;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AAEM,SAAU,kBAAV,CAA6B,KAA7B,EAA+C,OAA/C,EAA0E;;;AAC9E,QAAM,QAAQ,GAA+F,EAA7G;AACA,QAAM,eAAe,GAAG,KAAK,CAAC,MAAN,CAAa,SAArC;;AAEA,OAAK,MAAM,IAAX,IAAmB,gBAAK,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAA,OAAA,GAAW,EAAhB,CAAnB,EAAwC;AACtC,UAAM,MAAM,GAAG,qBAAU,OAAO,CAAC,IAAD,CAAjB,CAAf;AACA,UAAM,EAAA,GAA8B,eAAe,CAAC,MAAM,CAAC,IAAR,CAAnD;AAAA,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAkB,EAAxB;AAAA,UAA6B,GAAG,GAAA,mBAAA,EAAA,EAA1B,CAAA,QAAA,EAAA,WAAA,CAA0B,CAAhC,CAFsC,CAE4B;AAElE;AACA;AACA;AACA;;AACA,SAAK,MAAM,GAAX,IAAkB,GAAlB,EAAuB;AACrB;AACA;AACA,UAAK,GAAG,KAAK,WAAR,IAAuB,MAAM,CAAC,MAA/B,IAA2C,GAAG,KAAK,QAAR,IAAoB,MAAM,CAAC,SAA1E,EAAsF;AACpF;AACD;;AAED,UAAI,GAAG,KAAK,MAAZ,EAAoB;AAClB,QAAA,MAAM,CAAC,GAAD,CAAN,GAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,GAAG,CAAC,GAAD,CAAV,CAAA,EAAoB,MAAM,CAAC,GAAD,CAA1B,CAAX;AACD;;AAED,UAAI,MAAM,CAAC,GAAD,CAAN,KAAgB,SAAhB,IAA6B,MAAM,CAAC,GAAD,CAAN,KAAgB,IAAjD,EAAuD;AACrD,QAAA,MAAM,CAAC,GAAD,CAAN,GAAW,CAAA,EAAA,GAAG,GAAG,CAAC,GAAD,CAAN,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,EAAX,GAAe,MAAM,CAAC,GAAD,CAAhC;AACD;AACF;;AAED,UAAM,QAAQ,GAAG,mBAAQ,IAAR,CAAjB;AACA,UAAM,OAAO,GAAI,QAAQ,CAAC,QAAD,CAAR,GAAqB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACjC,MADiC,CAAA,EAC3B;AACT,MAAA,IAAI,EAAE,QADG;AAET,MAAA,MAAM,EAAE,wBAAS,MAAM,CAAC,EAAhB,IAAsB,iCAAc,MAAM,CAAC,EAArB,EAAyB,OAAzB,CAAtB,GAA0D,qBAAU,MAAM,CAAC,EAAjB;AAFzD,KAD2B,CAAtC;AAMA,sCAAiB,OAAjB,EAA0B,UAAU,IAAG;AACrC,UAAI,UAAU,CAAC,GAAX,CAAe,OAAf,KAA2B,UAAU,CAAC,KAA1C,EAAiD;AAC/C,QAAA,UAAU,CAAC,KAAX,CAAiB,KAAjB,EAAwB,OAAxB,EAAiC,MAAjC,EAAyC,OAAO,CAAC,IAAD,CAAhD;AACD;AACF,KAJD;AAKD;;AAED,SAAO,QAAP;AACD;;AAEK,SAAU,uBAAV,CACJ,KADI,EAEJ,UAFI,EAGJ,MAHI,EAIJ,KAAK,GAAG,OAJJ,EAIW;AAEf,QAAM,MAAM,GAAa,EAAzB;;AACA,WAAS,IAAT,CAAc,IAAd,EAA0B;AACxB,UAAM,KAAK,GAAG,mBAAQ,IAAR,CAAd;AACA,UAAM,OAAO,GAAG,KAAK,CAAC,qBAAN,CAA4B,KAA5B,EAAmC,IAAnC,CAAhB;AACA,UAAM,KAAK,GAAG,2BAAY,KAAK,GAAG,OAApB,CAAd;;AAEA,QAAI,OAAO,CAAC,OAAR,CAAgB,QAApB,EAA8B;AAC5B,YAAM,KAAK,GAAG,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAA,MAAA,GAAU,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,GAA7C;AACA,YAAM,MAAM,GAAG,OAAO,CAAC,OAAR,CAAgB,QAAhB,CAAyB,KAAzB,EAAf;;AACA,UAAI,KAAK,CAAC,MAAV,EAAkB;AAChB,QAAA,MAAM,CAAC,gBAAP,CAAwB,KAAxB;AACD,OAFD,MAEO;AACL,QAAA,KAAK,CAAC,MAAN,GAAe,MAAf;AACD;AACF;;AAED,QAAI,OAAO,CAAC,KAAR,KAAkB,MAAtB,EAA8B;AAC5B,MAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACD;;AAED,WACE,mBAAmB,KAAK,KAAK,KAAK,EAAlC,IAAwC,OAAO,CAAC,OAAR,KAAoB,QAApB,GAA+B,GAA/B,GAAqC,KAAK,2BAAY,OAAO,CAAC,OAApB,CAA4B,GAA9G,CADF;AAGD;;AAED,QAAM,YAAY,GAAG,uBAAY,UAAZ,EAAwB,IAAxB,CAArB;AACA,SACE,CAAC,MAAM,CAAC,MAAP,GAAgB,OAAO,MAAM,CAAC,GAAP,CAAW,CAAC,IAAI,eAAe,CAAC,IAAhC,EAAsC,IAAtC,CAA2C,MAA3C,CAAP,GAA4D,OAA5E,GAAsF,EAAvF,IAA6F,IAAI,YAAY,GAD/G;AAGD;;AAEK,SAAU,uBAAV,CAAkC,OAAlC,EAA+D,MAA/D,EAAsF;AAC1F,QAAM,QAAQ,GAAG,MAAM,CAAC,UAAD,CAAvB;AACA,MAAI,KAAK,GAAG,MAAM,CAAC,OAAD,CAAlB;;AAEA,MAAI,CAAC,QAAD,IAAa,CAAC,KAAlB,EAAyB;AACvB,IAAA,KAAK,GAAG,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,CAAtB,EAAyB,KAAjC;;AACA,QAAI,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,MAAtB,GAA+B,CAAnC,EAAsC;AACpC,qBACE,yFACE,kBAAkB,2BAAY,KAAZ,CAAkB,GAFxC;AAID;AACF,GARD,MAQO,IAAI,QAAQ,IAAI,CAAC,KAAjB,EAAwB;AAC7B,UAAM,SAAS,GAAG,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,MAAtB,CAA6B,CAAC,IAAI,CAAC,CAAC,OAAF,KAAc,QAAhD,CAAlB;;AACA,QAAI,CAAC,SAAS,CAAC,MAAX,IAAqB,SAAS,CAAC,MAAV,GAAmB,CAA5C,EAA+C;AAC7C,MAAA,KAAK,GAAG,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAsB,CAAtB,EAAyB,KAAjC;AACA,qBACE,CAAC,CAAC,SAAS,CAAC,MAAX,GAAoB,KAApB,GAA4B,WAA7B,IACE,YAAY,2BAAY,QAAZ,CAAqB,iCAAiC,2BAAY,MAAM,CAAC,SAAnB,CAA6B,IADjG,GAEE,kBAAkB,2BAAY,KAAZ,CAAkB,GAHxC;AAKD,KAPD,MAOO;AACL,MAAA,KAAK,GAAG,SAAS,CAAC,CAAD,CAAT,CAAa,KAArB;AACD;AACF;;AAED,SAAO,GAAG,OAAO,CAAC,IAAI,IAAI,2BAAY,KAAZ,CAAkB,GAA5C;AACD;;AAEK,SAAU,qBAAV,CAAgC,KAAhC,EAAkD,IAAlD,EAAkE;AACtE,0BAAiB,KAAjB,EAAwB,OAAO,IAAG;AAChC,UAAM,SAAS,GAAG,OAAO,CAAC,IAA1B;AACA,UAAM,UAAU,GAAG,KAAK,CAAC,OAAN,CAAc,UAAU,SAAS,EAAjC,CAAnB;AACA,IAAA,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,WAArB,CAAiC,UAAjC,IAA+C,OAAO,CAAC,YAAR,GAAuB,IAAI,oBAAJ,CACpE,IAAI,kBAAJ,CAAe,IAAf,EAAqB,KAArB,EAA4B;AAAC,MAAA;AAAD,KAA5B,CADoE,EAEpE,UAFoE,EAGpE,QAHoE,EAIpE,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,mBAJ+C,CAAtE;AAMD,GATD;AAUD;;;;;;;;;ACvID;;AAEA;;AACA;;AAGA;;AAEA;;;AAGA;AACM,SAAU,UAAV,CAAqB,KAArB,EAAmC,QAAnC,EAA4E,IAA5E,EAA+F;AACnG,SAAO,uBAAY,QAAZ,EAAuB,SAAD,IAAyB;AACpD,QAAI,wBAAS,SAAT,CAAJ,EAAyB;AACvB,aAAO,SAAP;AACD,KAFD,MAEO,IAAI,qCAAqB,SAArB,CAAJ,EAAqC;AAC1C,aAAO,oCAAwB,KAAxB,EAA+B,SAAS,CAAC,SAAzC,EAAoD,IAApD,CAAP;AACD,KAFM,MAEA;AACL;AACA,aAAO,sCAAsB,SAAtB,CAAP;AACD;AACF,GATM,CAAP;AAUD;;;;;;;;;;;;;ACtBD;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AAGA,SAAS,aAAT,CAAuB,KAAvB,EAAyE,MAAzE,EAAuF;AACrF,MAAI,CAAC,KAAL,EAAY;AACV,WAAO,SAAP;AACD;;AACD,MAAI,uBAAQ,KAAR,KAAkB,CAAC,mBAAO,KAAP,CAAvB,EAAsC;AACpC,WAAO,KAAK,CAAC,GAAN,CAAU,QAAQ,IAAI,8BAAa,QAAb,EAAuB,MAAvB,CAAtB,EAAsD,IAAtD,CAA2D,IAA3D,CAAP;AACD;;AACD,SAAO,KAAP;AACD;;AAED,SAAS,aAAT,CACE,IADF,EAEE,IAFF,EAGE,MAHF,EAIE,KAJF,EAI2C;;;AAEzC,EAAA,IAAI,CAAC,MAAL,GAAW,CAAA,EAAA,GAAG,IAAI,CAAC,MAAR,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAA7B;AACA,EAAA,IAAI,CAAC,MAAL,CAAY,IAAZ,IAAiB,CAAA,EAAA,GAAG,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAH,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,EAAzC;AACA,EAAA,IAAI,CAAC,MAAL,CAAY,IAAZ,EAAkB,MAAlB,GAAwB,CAAA,EAAA,GAAG,IAAI,CAAC,MAAL,CAAY,IAAZ,EAAkB,MAArB,MAA2B,IAA3B,IAA2B,EAAA,KAAA,KAAA,CAA3B,GAA2B,EAA3B,GAA+B,EAAvD,CAJyC,CAKzC;;AACC,EAAA,IAAI,CAAC,MAAL,CAAY,IAAZ,EAAkB,MAAlB,CAAyB,MAAzB,IAA2C,KAA3C;AACF;;AAEK,SAAU,YAAV,CACJ,QADI,EAEJ,IAFI,EAGJ,MAHI,EAIJ,GAAA,GAEI;AAAC,EAAA,MAAM,EAAE;AAAT,CANA,EAMe;;;AAEnB,QAAM,EAAA,GAA8D,QAAQ,CAAC,OAAT,EAApE;AAAA,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,MAAV;AAAkB,IAAA,KAAlB;AAAyB,IAAA,SAAzB;AAAoC,IAAA,KAApC;AAA2C,IAAA;AAA3C,MAAiD,EAAvD;AAAA,QAA4D,IAAI,GAAA,mBAAA,EAAA,EAA1D,CAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,CAA0D,CAAhE;;AAEA,MAAI,OAAJ,EAAa;AACX,WAAO,SAAP;AACD;;AAED,OAAK,MAAM,IAAX,IAAmB,IAAnB,EAAyB;AACvB,UAAM,QAAQ,GAAG,yBAAmB,IAAnB,CAAjB;AACA,UAAM,SAAS,GAAG,IAAI,CAAC,IAAD,CAAtB;;AAEA,QAAI,QAAQ,IAAI,QAAQ,KAAK,IAAzB,IAAiC,QAAQ,KAAK,MAAlD,EAA0D;AACxD;AACA,aAAO,IAAI,CAAC,IAAD,CAAX;AACD,KAHD,MAGO,IAAI,kCAAuB,SAAvB,CAAJ,EAAuC;AAC5C;AAEA,YAAM;AAAC,QAAA;AAAD,UAAmC,SAAzC;AAAA,YAAqB,gBAAgB,GAAA,mBAAI,SAAJ,EAA/B,CAAA,WAAA,CAA+B,CAArC;AACA,YAAM,UAAU,GAAG,qBAAM,SAAN,CAAnB;AAEA,YAAM,SAAS,GAAG,kCAA4B,IAA5B,CAAlB;;AACA,UAAI,SAAJ,EAAe;AACb,cAAM;AAAC,UAAA,MAAD;AAAS,UAAA;AAAT,YAAiB,SAAvB,CADa,CAEb;AACA;;AAEA,cAAM,KAAK,GAAG,CACZ,GAAG,UAAU,CAAC,GAAX,CAAe,CAAC,IAAG;AACpB,gBAAM;AAAC,YAAA;AAAD,cAA+B,CAArC;AAAA,gBAAgB,iBAAiB,GAAA,mBAAI,CAAJ,EAA3B,CAAA,MAAA,CAA2B,CAAjC;AACA,iBAAA,MAAA,CAAA,MAAA,CAAA;AACE,YAAA,IAAI,EAAE,2BAAW,IAAX,EAAiB,IAAjB;AADR,WAAA,EAEK,iBAFL,CAAA;AAID,SANE,CADS,EAQZ,gBARY,CAAd;AAUA,QAAA,aAAa,CAAC,IAAD,EAAO,IAAP,EAAa,MAAb,EAAqB,KAArB,CAAb;AACA,eAAO,IAAI,CAAC,IAAD,CAAX;AACD,OAjBD,MAiBO,IAAI,SAAS,KAAK,IAAlB,EAAwB;AAC7B;AACA,cAAM,SAAS,GAAc;AAC3B,UAAA,MAAM,EACJ,UAAU,CACP,GADH,CACO,CAAC,IAAG;AACP,kBAAM;AAAC,cAAA;AAAD,gBAA+B,CAArC;AAAA,kBAAgB,iBAAiB,GAAA,mBAAI,CAAJ,EAA3B,CAAA,MAAA,CAA2B,CAAjC;AACA,mBAAO,GAAG,2BAAW,IAAX,EAAiB,IAAjB,CAAsB,MAAM,sCAAyB,iBAAzB,CAA2C,KAAjF;AACD,WAJH,EAKG,IALH,CAKQ,EALR,IAKc,sCAAyB,gBAAzB;AAPW,SAA7B;AASA,QAAA,IAAI,CAAC,IAAD,CAAJ,GAAa,SAAb;AACD;AACF,KArCM,MAqCA,IAAI,uBAAY,SAAZ,CAAJ,EAA4B;AACjC,YAAM,SAAS,GAAG,kCAA4B,IAA5B,CAAlB;;AACA,UAAI,SAAJ,EAAe;AACb,cAAM;AAAC,UAAA,MAAD;AAAS,UAAA;AAAT,YAAiB,SAAvB;AACA,QAAA,aAAa,CAAC,IAAD,EAAO,IAAP,EAAa,MAAb,EAAqB,SAArB,CAAb;AACA,eAAO,IAAI,CAAC,IAAD,CAAX;AACD,OANgC,CAM/B;;AACH;AACF;;AAED,MAAI,IAAI,KAAK,MAAb,EAAqB;AACnB,QAAI,CAAC,IAAI,CAAC,IAAV,EAAgB;AACd,aAAO,SAAP;AACD,KAHkB,CAKnB;;;AACA,QAAI,IAAI,CAAC,MAAT,EAAiB;AACf;AACA,YAAM;AAAC,QAAA;AAAD,UAAS,IAAI,CAAC,MAApB;AACA,MAAA,IAAI,CAAC,MAAL,GAAW,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,IAAI,GAAG;AAAC,QAAA;AAAD,OAAH,GAAY,EADX,CAAX;;AAIA,UAAI,mBAAQ,IAAI,CAAC,MAAb,CAAJ,EAA0B;AACxB,eAAO,IAAI,CAAC,MAAZ;AACD;AACF;;AAED,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,KADF;AAEE,MAAA;AAFF,KAAA,EAGK,IAHL,CAAA,EAGS;AACP,MAAA,MAAM,EAAE,KADD;AAEP,MAAA,MAAM,EAAE,KAFD;AAGP,MAAA,IAAI,EAAE,KAHC;AAKP;AACA;AACA,MAAA,SAAS,EAAE,CAPJ;AAQP,MAAA,SAAS,EAAE,CARJ;AASP,MAAA,KAAK,EAAE,KATA;AAUP,MAAA,MAAM,EAAE,2BAAgB,MAAhB,EAAwB,CAAxB,CAVD,CAU4B;;AAV5B,KAHT,CAAA;AAeD,GAjCD,MAiCO;AACL;AAEA,QAAI,CAAC,GAAG,CAAC,MAAL,IAAe,QAAQ,CAAC,aAA5B,EAA2C;AACzC;AACA,aAAO,SAAP;AACD;;AAED,QAAI,SAAS,KAAK,SAAlB,EAA6B;AAC3B,UAAI,IAAI,GAAG,SAAX;;AACA,UAAI,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAL,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,KAAA,CAAX,GAAW,EAAA,CAAE,MAAb,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,KAAA,CAAnB,GAAmB,EAAA,CAAE,MAArB,KAA+B,uBAAY,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,MAAnB,CAA0B,IAAtC,CAAnC,EAAgF;AAC9E,QAAA,IAAI,GAAG,sBAAW,SAAX,EAAsB,aAAtB,EAAqC,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,MAAnB,CAA0B,IAA1B,CAA+B,MAApE,CAAP;AACD;;AACD,MAAA,aAAa,CAAC,IAAD,EAAO,QAAP,EAAiB,MAAjB,EAAyB;AAAC,QAAA,MAAM,EAAE;AAAT,OAAzB,CAAb;AACD;;AAED,QAAI,IAAI,CAAC,UAAL,KAAoB,IAAxB,EAA8B;AAC5B,aAAO,IAAI,CAAC,UAAZ;AACD,KAlBI,CAoBL;;;AACA,QAAI,IAAI,CAAC,MAAT,EAAiB;AACf,WAAK,MAAM,IAAX,IAAmB,gBAAnB,EAA+B;AAC7B,YAAI,CAAC,QAAQ,CAAC,WAAT,CAAqB,IAArB,CAAL,EAAiC;AAC/B,iBAAO,IAAI,CAAC,MAAL,CAAY,IAAZ,CAAP;AACD;AACF;;AACD,UAAI,mBAAQ,IAAI,CAAC,MAAb,CAAJ,EAA0B;AACxB,eAAO,IAAI,CAAC,MAAZ;AACD;AACF;;AAED,UAAM,WAAW,GAAG,aAAa,CAAC,KAAD,EAAQ,MAAR,CAAjC;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,KADF;AAEE,MAAA,MAFF;AAGE,MAAA,IAAI,EAAE;AAHR,KAAA,EAIM,WAAW,GAAG;AAAC,MAAA,KAAK,EAAE;AAAR,KAAH,GAA0B,EAJ3C,CAAA,EAKK,IALL,CAAA,EAMM,MAAM,CAAC,IAAP,KAAgB,KAAhB,GAAwB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAxB,GAAwC,EAN9C,CAAA,EAMiD;AAC/C,MAAA,MAAM,EAAE,2BAAgB,MAAhB,EAAwB,CAAxB,CADuC,CACZ;;AADY,KANjD,CAAA;AASD;AACF;AAED;;;;;;AAIM,SAAU,mBAAV,CAA8B,KAA9B,EAA0C;AAC9C,QAAM;AAAC,IAAA;AAAD,MAAS,KAAK,CAAC,SAArB;AACA,QAAM,OAAO,GAAgB,EAA7B;;AAEA,OAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,QAAI,IAAI,CAAC,OAAD,CAAR,EAAmB;AACjB,WAAK,MAAM,IAAX,IAAmB,IAAI,CAAC,OAAD,CAAvB,EAAkC;AAChC,YAAI,CAAC,IAAI,CAAC,GAAL,CAAS,SAAT,CAAD,IAAwB,CAAC,IAAI,CAAC,GAAL,CAAS,WAAT,CAA7B,EAAoD;AAClD;AAEA,gBAAM,QAAQ,GAAG,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,OAA9C;AACA,gBAAM,MAAM,GAAG,KAAK,CAAC,gBAAN,CAAuB,QAAvB,EAAiC,MAAhD;;AAEA,cAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,YAAA,OAAO,CAAC,IAAR,CAAa;AACX,cAAA,IAAI,EAAE,QADK;AAEX,cAAA,MAAM,EAAE;AAFG,aAAb;AAID;AACF;AACF;AACF;AACF;;AACD,SAAO,OAAP;AACD;;AAEK,SAAU,YAAV,CAAuB,cAAvB,EAA2D,MAA3D,EAAyE;AAC7E,QAAM;AAAC,IAAA,CAAC,GAAG,EAAL;AAAS,IAAA,CAAC,GAAG;AAAb,MAAmB,cAAzB;AACA,SAAO,CACL,GAAG,CAAC,CAAC,GAAF,CAAM,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,MAAJ,EAAY,MAAZ,CAAvB,CADE,EAEL,GAAG,CAAC,CAAC,GAAF,CAAM,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,MAAJ,EAAY,MAAZ,CAAvB,CAFE,EAGL,GAAG,CAAC,CAAC,GAAF,CAAM,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,MAAJ,EAAY,MAAZ,CAAvB,CAHE,EAIL,GAAG,CAAC,CAAC,GAAF,CAAM,CAAC,IAAI,YAAY,CAAC,CAAD,EAAI,MAAJ,EAAY,MAAZ,CAAvB,CAJE,EAKL,MALK,CAKE,CAAC,IAAI,CALP,CAAP,CAF6E,CAO3D;AACnB;;;;;;;;;AC5ND;;AAEO,MAAM,2BAA2B,GAAyD;AAC/F,EAAA,UAAU,EAAE,OADmF;AAE/F,EAAA,WAAW,EAAE,QAFkF;AAG/F,EAAA,UAAU,EAAE,OAHmF;AAI/F,EAAA,aAAa,EAAE,UAJgF;AAK/F,EAAA,UAAU,EAAE,OALmF;AAM/F,EAAA,SAAS,EAAE,MANoF;AAO/F,EAAA,aAAa,EAAE,UAPgF;AAQ/F,EAAA,cAAc,EAAE,WAR+E;AAS/F,EAAA,eAAe,EAAE,YAT8E;AAU/F,EAAA,UAAU,EAAE,OAVmF;AAW/F,EAAA,eAAe,EAAE,YAX8E;AAY/F,EAAA,WAAW,EAAE,QAZkF;AAa/F,EAAA,YAAY,EAAE;AAbiF,CAA1F;;AAgBA,MAAM,2BAA2B,GAAyD;AAC/F,EAAA,UAAU,EAAE,OADmF;AAE/F,EAAA,WAAW,EAAE,QAFkF;AAG/F,EAAA,UAAU,EAAE,OAHmF;AAI/F,EAAA,aAAa,EAAE,UAJgF;AAK/F,EAAA,UAAU,EAAE,OALmF;AAM/F,EAAA,SAAS,EAAE,MANoF;AAO/F,EAAA,aAAa,EAAE,UAPgF;AAQ/F,EAAA,cAAc,EAAE,WAR+E;AAS/F,EAAA,eAAe,EAAE,YAT8E;AAU/F,EAAA,UAAU,EAAE,OAVmF;AAW/F,EAAA,eAAe,EAAE,YAX8E;AAY/F,EAAA,WAAW,EAAE,QAZkF;AAa/F,EAAA,YAAY,EAAE;AAbiF,CAA1F;;AAgBA,MAAM,uBAAuB,GAAG,gBAAK,2BAAL,CAAhC;;AAEA,MAAM,uBAAuB,GAAG,gBAAK,2BAAL,CAAhC;;;;;;;;;;;;ACrCP;;AAIA;;AACA;;AACA;;AACA;;AAEA,SAAS,4BAAT,CACE,WADF,EAEE,MAFF,EAGE,OAHF,EAIE,MAJF,EAI4B;AAE1B;AACA,SAAO,MAAM,CAAC,MAAP,CAAc,KAAd,CAAoB,IAApB,EAA0B,CAC/B,EAD+B,EAE/B,GAAG,WAAW,CAAC,GAAZ,CAAgB,UAAU,IAAG;AAC9B,QAAI,UAAU,KAAK,YAAnB,EAAiC;AAC/B,YAAM,OAAO,GAAG,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,MAA7C;AACA,YAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,GAAZ,GAAkB,YAAlB,GAAiC,UAAlC,CAAN,IAAuD,EAA7E;AACA,YAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,GAAZ,GAAkB,SAAlB,GAA8B,WAA/B,CAAN,IAAqD,EAA3E;AAEA,YAAM,KAAK,GAAG,IAAI,GAAJ,CAAQ,CAAC,GAAG,gBAAK,aAAL,CAAJ,EAAyB,GAAG,gBAAK,aAAL,CAA5B,CAAR,CAAd;AAEA,YAAM,2BAA2B,GAAG,EAApC;;AACA,WAAK,MAAM,IAAX,IAAmB,KAAK,CAAC,MAAN,EAAnB,EAAmC;AACjC,QAAA,2BAA2B,CAAC,IAAD,CAA3B,GAAoC;AAClC;AACA,UAAA,MAAM,EAAE,GAAG,MAAM,CAAC,QAAD,CAAU,SAAS,OAAO,OAAO,iCAChD,aAAa,CAAC,IAAD,CADmC,CAEjD,MAAM,iCAAoB,aAAa,CAAC,IAAD,CAAjC,CAAwC;AAJb,SAApC;AAMD;;AAED,aAAO,2BAAP;AACD;;AAED,WAAO,MAAM,CAAC,UAAD,CAAb;AACD,GAtBE,CAF4B,CAA1B,CAAP;AA0BD;;AAIK,SAAU,cAAV,CACJ,OADI,EAEJ,SAFI,EAGJ,MAHI,EAIJ,MAJI,EAIU;AAEd,QAAM,oBAAoB,GACxB,SAAS,KAAK,MAAd,GACI,CAAC,cAAD,EAAiB,UAAjB,CADJ,GAEI,SAAS,KAAK,OAAd,GACA,CAAC,cAAD,EAAiB,WAAjB,CADA,GAEA,2BAAe,SAAf,IACA,CAAC,kBAAD,CADA,GAEA,SAAS,KAAK,MAAd,IAAwB,SAAS,KAAK,KAAtC,GACA,CAAC,cAAD,CADA,GAEA,EATN;AAWA,QAAM,WAAW,GAAG,OAAO,KAAK,GAAZ,GAAkB,OAAlB,GAA4B,OAAhD;AACA,QAAM,UAAU,GAAG,uBAAY,MAAZ,IAAsB,YAAtB,GAAqC,SAAS,qBAAU,MAAV,CAAjE,CAdc,CAcsE;;AAEpF,QAAM,iBAAiB,GAAG,CACxB;AACA;AACA,KAAG,oBAHqB,EAIxB,GAAG,oBAAoB,CAAC,GAArB,CAAyB,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,MAAF,CAAS,CAAT,CAA5C,CAJqB,CAA1B;AAOA,QAAM,aAAa,GAAG,CAAC,MAAD,EAAS,UAAT,EAAqB,WAArB,CAAtB;AAEA,SAAO;AACL,IAAA,gBAAgB,EAAE,4BAA4B,CAAC,iBAAD,EAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,CADzC;AAEL,IAAA,YAAY,EAAE,4BAA4B,CAAC,aAAD,EAAgB,MAAhB,EAAwB,OAAxB,EAAiC,MAAjC,CAFrC;AAGL,IAAA,eAAe,EAAE,kBAAkB,CAAC,CAAC,GAAG,aAAJ,EAAmB,GAAG,iBAAtB,CAAD,EAA2C,MAA3C;AAH9B,GAAP;AAKD;;AAEK,SAAU,kBAAV,CAA6B,eAA7B,EAAwD,MAAxD,EAAsE;;;AAC1E,QAAM,OAAO,GAAG,CAAC,EAAD,CAAhB;;AACA,OAAK,MAAM,UAAX,IAAyB,eAAzB,EAA0C;AACxC;AACA,QAAI,KAAK,GAAA,CAAA,EAAA,GAAG,MAAM,CAAC,UAAD,CAAT,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,KAAhC;;AACA,QAAI,KAAJ,EAAW;AACT,MAAA,KAAK,GAAG,qBAAM,KAAN,CAAR;;AACA,WAAK,MAAM,CAAX,IAAgB,KAAhB,EAAuB;AACrB,QAAA,OAAO,CAAC,IAAR,CAAa,MAAM,CAAC,KAAP,CAAa,CAAb,CAAb;AACD;AACF;AACF;;AACD,SAAO,MAAM,CAAC,MAAP,CAAc,KAAd,CAAoB,IAApB,EAA0B,OAA1B,CAAP;AACD;;AACK,SAAU,aAAV,CACJ,QADI,EAEJ,MAFI,EAGJ,KAHI,EAIJ,WAAA,GAAoC,EAJhC,EAIkC;;;AAEtC,QAAM,WAAW,GAAG,4BAAe,QAAf,EAAyB,KAAzB,EAAgC,MAAM,CAAC,KAAvC,CAApB;;AAEA,MAAI,WAAW,KAAK,SAApB,EAA+B;AAC7B,WAAO;AACL,MAAA,UAAU,EAAE,OADP;AAEL,MAAA,WAAW,EAAE;AAFR,KAAP;AAID;;AAED,OAAK,MAAM,UAAX,IAAyB,CAAC,kBAAD,EAAqB,cAArB,EAAqC,iBAArC,CAAzB,EAAkF;AAChF,QAAI,CAAA,CAAA,EAAA,GAAA,WAAW,CAAC,UAAD,CAAX,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,KAAA,CAAvB,GAAuB,EAAA,CAAG,QAAH,CAAvB,MAAwC,SAA5C,EAAuD;AACrD,aAAO;AAAC,QAAA,UAAD;AAAa,QAAA,WAAW,EAAE,WAAW,CAAC,UAAD,CAAX,CAAwB,QAAxB;AAA1B,OAAP;AACD;AACF;;AACD,SAAO,EAAP;AACD;;;;;;;;;;;;;;;;;;;;;;ACrHD;;AAEA;;AACA;;AACA;;AAYA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AAeO,MAAM,SAAS,GAElB;AACF,EAAA,KAAK,EAAE,CAAC;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,GAAD,KAAsB,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAD3B;AAGF,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA,MAAlB;AAA0B,IAAA;AAA1B,GAAD,KAAoC;AAC1C,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAuB,IAA7B;AACA,WAAO,yBAAY,eAAZ,EAA6B,eAAe,CAAC,IAA7C,EAAmD,MAAnD,EAA2D,UAA3D,EAAuE,MAAvE,EAA+E,IAA/E,CAAP;AACD,GANC;AAQF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,eAAP;AAAwB,IAAA;AAAxB,GAAD,KAAuC;AACjD,UAAM;AAAC,MAAA;AAAD,QAAe,IAArB;AACA,WAAO,6BAAgB,UAAhB,EAA4B,eAA5B,EAA6C,SAA7C,CAAP;AACD,GAXC;AAaF,EAAA,IAAI,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA,IAAlB;AAAwB,IAAA;AAAxB,GAAD,KAAuC;;;AAC3C,QAAI,4BAAW,eAAX,KAA+B,mBAAS,eAAe,CAAC,GAAzB,CAAnC,EAAkE;AAChE,aAAO,KAAP;AACD,KAFD,MAEO;AACL,aAAA,CAAA,EAAA,GAAO,IAAI,CAAC,IAAZ,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,WAAW,CAAC,SAAD,EAAY,eAAZ,CAA/B;AACD;AACF,GAnBC;AAqBF,EAAA,SAAS,EAAE,CAAC;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,GAAD,KAAsB,SAAS,CAAC,KAAD,EAAQ,OAAR,CArBxC;AAuBF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,UAAP;AAAmB,IAAA,MAAnB;AAA2B,IAAA;AAA3B,GAAD,KACV,IAAI,CAAC,UAAL,IAAmB,iBAAiB,CAAC,UAAD,EAAa,MAAb,EAAqB,OAArB,CAxBpC;AA0BF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA;AAAD,GAAD,KAAkB,UA1B5B;AA4BF,EAAA,aAAa,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,UAAP;AAAmB,IAAA,MAAnB;AAA2B,IAAA;AAA3B,GAAD,KACb,IAAI,CAAC,aAAL,IAAsB,oBAAoB,CAAC,UAAD,EAAa,MAAb,EAAqB,OAArB,CA7B1C;AA+BF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,eAAP;AAAwB,IAAA;AAAxB,GAAD,KAAqC;AAAA,QAAA,EAAA;;AAAA,WAAA,CAAA,EAAA,GAAC,IAAI,CAAC,UAAN,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,iBAAiB,CAAC,eAAe,CAAC,IAAjB,EAAuB,OAAvB,CAArC;AAAoE,GA/BnH;AAiCF,EAAA,YAAY,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,eAAP;AAAwB,IAAA;AAAxB,GAAD,KAAuC;AAAA,QAAA,EAAA;;AAAA,WAAA,CAAA,EAAA,GACnD,IAAI,CAAC,YAD8C,MAClC,IADkC,IAClC,EAAA,KAAA,KAAA,CADkC,GAClC,EADkC,GAC9B,mBAAmB,CAAC,eAAe,CAAC,IAAjB,EAAuB,SAAvB,CADW;AACsB,GAlCzE;AAoCF;AACA,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA;AAAD,GAAD,KAAc,MArCpB;AAuCF,EAAA,SAAS,EAAE,CAAC;AAAC,IAAA,OAAD;AAAU,IAAA,KAAV;AAAiB,IAAA,IAAjB;AAAuB,IAAA,eAAvB;AAAwC,IAAA;AAAxC,GAAD,KAAuD;;;AAChE,UAAM,QAAQ,GAAG,OAAO,KAAK,GAAZ,GAAkB,OAAlB,GAA4B,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,SAA1E;AACA,UAAM,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,gBAAN,CAAuB,QAAvB,CAAH,GAAsC,SAA3D;AACA,WAAA,CAAA,EAAA,GAAO,IAAI,CAAC,SAAZ,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,gBAAgB,CAAC;AAAC,MAAA,eAAD;AAAkB,MAAA,SAAlB;AAA6B,MAAA,IAA7B;AAAmC,MAAA,MAAM,EAAE,IAAI,CAAC;AAAhD,KAAD,CAAzC;AACD,GA3CC;AA6CF,EAAA,KAAK,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,KAAP;AAAc,IAAA;AAAd,GAAD,KAA2B;AAChC,QAAI,IAAI,CAAC,KAAL,KAAe,SAAnB,EAA8B;AAC5B,aAAO,IAAI,CAAC,KAAZ;AACD;;AACD,UAAM,aAAa,GAAG,gBAAgB,CAAC,KAAD,EAAQ,OAAR,CAAtC;;AACA,QAAI,aAAa,KAAK,SAAtB,EAAiC;AAC/B,aAAO,aAAP;AACD;;AACD,UAAM,QAAQ,GAAG,KAAK,CAAC,aAAN,CAAoB,OAApB,CAAjB;AACA,UAAM,QAAQ,GAAG,OAAO,KAAK,GAAZ,GAAkB,IAAlB,GAAyB,IAA1C;AACA,UAAM,SAAS,GAAG,KAAK,CAAC,QAAN,CAAe,QAAf,CAAlB,CAVgC,CAYhC;;AACA,WAAO,iCACL,QAAQ,GAAG,CAAC,gCAAe,QAAf,CAAD,CAAH,GAAgC,EADnC,EAEL,4BAAW,SAAX,IAAwB,CAAC,gCAAe,SAAf,CAAD,CAAxB,GAAsD,EAFjD,CAAP;AAID,GA9DC;AAgEF,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,GAAD,KAA6B,MAAM,CAAC,IAAD,EAAO,eAAP,CAhEzC;AAkEF,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA,IAAD;AAAO,IAAA,eAAP;AAAwB,IAAA;AAAxB,GAAD,KAAkC;AAAA,QAAA,EAAA;;AAAA,WAAA,CAAA,EAAA,GAAC,IAAI,CAAC,MAAN,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,aAAa,CAAC,IAAD,EAAO,eAAP,CAA7B;AAAoD;AAlE5F,CAFG,EAuEP;;AACA;;;;;;;AAKM,SAAU,WAAV,CAAsB,SAAtB,EAA4C,QAA5C,EAAsF;AAC1F,SAAO,CAAC,8BAAkB,SAAlB,CAAD,IAAiC,4BAAW,QAAX,CAAjC,IAAyD,CAAC,oBAAU,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAQ,KAAA,CAAR,GAAA,QAAQ,CAAE,GAApB,CAAjE;AACD;;AAEK,SAAU,SAAV,CAAoB,KAApB,EAAsC,OAAtC,EAAmE;AACvE,QAAM,WAAW,GAAyB,OAAO,KAAK,GAAZ,GAAkB,GAAlB,GAAwB,GAAlE;;AACA,MAAI,KAAK,CAAC,iBAAN,CAAwB,WAAxB,CAAJ,EAA0C;AACxC,WAAO,KAAK,CAAC,SAAN,CAAgB,WAAhB,CAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,aAAV,CACJ,KADI,EAEJ,IAFI,EAGJ,OAHI,EAIJ,eAJI,EAKJ,WALI,EAKqB;AAEzB,QAAM,UAAU,GAAG,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,UAAzB,CAFyB,CAGzB;;AACA,MAAI,UAAU,KAAK,SAAnB,EAA8B;AAC5B,WAAO,uBAAY,UAAZ,IAA0B,UAA1B,GAAuC,0BAAe,UAAf,CAA9C;AACD,GAFD,MAEO;AACL;AACA,UAAM;AAAC,MAAA,WAAW,EAAE;AAAd,QAAuB,2BAAc,YAAd,EAA4B,KAAK,CAAC,MAAlC,EAA0C,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,KAAhD,EAAuD,WAAvD,CAA7B;;AACA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,aAAO,0BAAe,KAAf,CAAP;AACD,KAFD,MAEO;AACL;AACA,UAAI,OAAO,KAAK,UAAZ,IAAiB,oBAAS,CAAC,aAAD,EAAU,aAAV,CAAT,EAA6B,eAAe,CAAC,IAA7C,CAArB,EAAyE;AACvE,eAAO,GAAP;AACD,OAJI,CAKL;;;AACA,aAAO,SAAP;AACD;AACF;AACF;;AAEK,SAAU,kBAAV,CAA6B,KAA7B,EAA6C;AACjD,SAAO,MAAM,KAAK,CAAC,MAAM,uBAAzB;AACD;;AAEK,SAAU,oBAAV,CACJ,KADI,EAEJ,MAFI,EAGJ,OAHI,EAIJ,mBAJI,EAIyB;AAE7B,MAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,QAAI,OAAO,KAAK,GAAhB,EAAqB;AACnB,UAAI,uBAAY,KAAZ,CAAJ,EAAwB;AACtB,cAAM,CAAC,GAAG,kBAAkB,CAAC,KAAD,CAA5B;AACA,cAAM,WAAW,GAAG,uBAAY,MAAZ,IAAsB,IAAI,MAAM,CAAC,MAAM,aAAvC,GAAuD,MAAM,KAAK,KAAtF;AACA,eAAO;AACL,UAAA,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,sBAAhD,GACA,IAAI,CAAC,oBAAoB,CAAC,SAAS,WAAW;AAH3C,SAAP;AAKD;;AAED,UAAK,KAAK,KAAL,IAAc,KAAK,GAAG,GAAvB,IAAgC,MAAM,KAAN,IAAe,KAAK,GAAG,GAA3D,EAAiE;AAC/D,eAAO,QAAP;AACD;;AAED,UAAI,uBAAY,MAAZ,CAAJ,EAAyB;AACvB,cAAM,EAAE,GAAG,KAAK,IAAI,EAAT,IAAe,OAAO,KAAtB,GAA8B,KAA9B,GAAsC,KAAjD;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE;AAA/B,SAAP;AACD;;AAED,aAAO,CAAC,KAAK,IAAI,EAAT,IAAe,OAAO,KAAvB,OAAmC,MAAM,KAAK,KAA9C,IAAuD,QAAvD,GAAkE,KAAzE;AACD,KArBD,MAqBO;AACL,UAAI,uBAAY,KAAZ,CAAJ,EAAwB;AACtB,cAAM,CAAC,GAAG,kBAAkB,CAAC,KAAD,CAA5B;AACA,cAAM,YAAY,GAAG,uBAAY,MAAZ,IAAsB,IAAI,MAAM,CAAC,MAAM,cAAvC,GAAwD,MAAM,KAAK,MAAxF;AACA,cAAM,MAAM,GAAG,mBAAmB,GAAG,UAAH,GAAgB,MAAlD;AACA,eAAO;AACL,UAAA,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,MAAM,aAAa,CAAC,OAAO,CAAC,gBAAgB,YAAY;AAD1H,SAAP;AAGD;;AAED,UAAI,KAAK,IAAI,EAAT,IAAe,OAAO,KAAtB,IAAgC,OAAO,KAAP,IAAgB,KAAK,IAAI,GAA7D,EAAmE;AACjE,eAAO,mBAAmB,GAAG,QAAH,GAAc,IAAxC;AACD;;AAED,UAAI,uBAAY,MAAZ,CAAJ,EAAyB;AACvB,cAAM,EAAE,GAAG,MAAM,KAAN,IAAe,KAAK,IAAI,GAAxB,GAA8B,KAA9B,GAAsC,KAAjD;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE;AAA/B,SAAP;AACD;;AAED,aAAO,CAAC,MAAM,KAAN,IAAe,KAAK,IAAI,GAAzB,OAAmC,MAAM,KAAK,MAA9C,IAAwD,KAAxD,GAAgE,QAAvE;AACD;AACF;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,iBAAV,CACJ,KADI,EAEJ,MAFI,EAGJ,OAHI,EAGc;AAElB,MAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,WAAO,SAAP;AACD;;AAED,QAAM,GAAG,GAAG,OAAO,KAAK,GAAxB;AACA,QAAM,UAAU,GAAG,GAAG,GAAG,CAAH,GAAO,EAA7B;AACA,QAAM,UAAU,GAAG,GAAG,GAAG,QAAH,GAAc,MAApC;;AAEA,MAAI,uBAAY,KAAZ,CAAJ,EAAwB;AACtB,UAAM,CAAC,GAAG,kBAAkB,CAAC,KAAD,CAA5B;AACA,UAAM,YAAY,GAAG,uBAAY,MAAZ,IAAsB,IAAI,MAAM,CAAC,MAAM,SAAS,UAAU,IAA1D,GAAiE,MAAM,KAAK,UAAjG;AACA,WAAO;AACL,MAAA,MAAM,EACJ,IAAI,UAAU,GAAG,MAAM,CAAN,GAAU,QAAb,GAAwB,CAAC,mBAAmB,GAAG,GAAG,IAAH,GAAU,UAAU,IAAjF,GACA,IAAI,UAAU,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,UAAU,SAAS,YAAY;AAHrE,KAAP;AAKD;;AAED,MAAI,CAAC,KAAK,GAAG,UAAT,IAAuB,GAAvB,KAA+B,CAAnC,EAAsC;AACpC;AACA,WAAO,GAAG,GAAG,IAAH,GAAU,QAApB;AACD;;AAED,MAAI,uBAAY,MAAZ,CAAJ,EAAyB;AACvB,UAAM,EAAE,GAAG,UAAU,GAAG,KAAb,IAAsB,KAAK,GAAG,MAAM,UAApC,GAAiD,KAAjD,GAAyD,KAApE;AACA,UAAM,YAAY,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,KAAK,UAAU,GAA1D;AACA,WAAO;AACL,MAAA,MAAM,EAAE,GAAG,YAAY;AADlB,KAAP;AAGD;;AAED,MAAI,CAAC,UAAU,GAAG,KAAb,IAAsB,KAAK,GAAG,MAAM,UAArC,OAAsD,MAAM,KAAK,UAAjE,CAAJ,EAAkF;AAChF,WAAO,MAAP;AACD;;AAED,SAAO,OAAP;AACD;;AAEK,SAAU,iBAAV,CAA4B,IAA5B,EAAwC,OAAxC,EAAqE;AACzE,MAAI,OAAO,KAAK,GAAZ,IAAmB,oBAAS,CAAC,cAAD,EAAiB,UAAjB,CAAT,EAAuC,IAAvC,CAAvB,EAAqE;AACnE,WAAO,IAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,mBAAV,CAA8B,IAA9B,EAA0C,SAA1C,EAA8D;AAClE;AACA,MAAI,IAAI,KAAK,SAAb,EAAwB;AACtB,QAAI,SAAS,KAAK,KAAlB,EAAyB;AACvB,aAAO,QAAP;AACD;;AACD,WAAO,IAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,aAAV,CAAwB,OAAxB,EAAqD;AACzD,SAAO,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,MAApC;AACD;;AAEK,SAAU,gBAAV,CAA2B;AAC/B,EAAA,eAD+B;AAE/B,EAAA,SAF+B;AAG/B,EAAA,IAH+B;AAI/B,EAAA,MAAM,EAAE;AAJuB,CAA3B,EAUL;;;AACC,MAAI,CAAC,IAAD,IAAS,CAAC,8BAAkB,SAAlB,CAAV,IAA0C,SAAS,KAAK,KAA5D,EAAmE;AACjE,QAAI,4BAAW,eAAX,CAAJ,EAAiC;AAC/B,UAAI,oBAAU,eAAe,CAAC,GAA1B,CAAJ,EAAoC;AAClC;AACA,eAAO;AAAC,UAAA,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM;AAA5B,SAAP;AACD;;AAED,UACE,eAAe,CAAC,QAAhB,IACA,oBAAS,CAAC,OAAD,EAAU,OAAV,EAAmB,KAAnB,EAA0B,SAA1B,CAAT,EAA6C,CAAA,EAAA,GAAE,iCAAkB,eAAe,CAAC,QAAlC,CAAF,MAA6C,IAA7C,IAA6C,EAAA,KAAA,KAAA,CAA7C,GAA6C,KAAA,CAA7C,GAA6C,EAAA,CAAE,IAA5F,CAFF,EAGE;AACA,eAAO,SAAP;AACD;AACF;;AAED,WAAO;AAAC,MAAA,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM;AAA5B,KAAP;AACD;;AAED,SAAO,SAAP;AACD;;AAEK,SAAU,gBAAV,CAA2B,KAA3B,EAA6C,OAA7C,EAA+D;AACnE,QAAM,QAAQ,GAAG,OAAO,KAAK,GAAZ,GAAkB,IAAlB,GAAyB,IAA1C;AACA,QAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAjB;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,QAAN,CAAe,QAAf,CAAlB;AAEA,QAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAZ,GAAoB,SAA3C;AACA,QAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,KAAb,GAAqB,SAA7C;;AAEA,MAAI,MAAM,IAAI,MAAd,EAAsB;AACpB,WAAO,wBAAW,MAAX,EAAmB,MAAnB,CAAP;AACD,GAFD,MAEO,IAAI,MAAJ,EAAY;AACjB,WAAO,MAAP;AACD,GAFM,MAEA,IAAI,MAAJ,EAAY;AACjB,WAAO,MAAP;AACD,GAFM,MAEA,IAAI,MAAM,KAAK,SAAf,EAA0B;AAC/B;AACA,WAAO,MAAP;AACD,GAHM,MAGA,IAAI,MAAM,KAAK,SAAf,EAA0B;AAC/B;AACA,WAAO,MAAP;AACD;;AAED,SAAO,SAAP;AACD;;AAEK,SAAU,MAAV,CAAiB,IAAjB,EAA6B,eAA7B,EAA8E;AAClF,QAAM,IAAI,GAAG,IAAI,CAAC,MAAlB;;AAEA,MAAI,uBAAQ,IAAR,CAAJ,EAAmB;AACjB,WAAO,4BAAW,eAAX,EAA4B,IAA5B,CAAP;AACD,GAFD,MAEO,IAAI,uBAAY,IAAZ,CAAJ,EAAuB;AAC5B,WAAO,IAAP;AACD;;AAED,SAAO,SAAP;AACD;;AAEK,SAAU,aAAV,CAAwB,IAAxB,EAAoC,QAApC,EAA8E;AAClF,MAAI,IAAI,KAAK,MAAT,IAAmB,4BAAW,QAAX,CAAvB,EAA6C;AAC3C,WAAO,CAAP;AACD;;AACD,SAAO,CAAP;AACD;;;;;;;;;;AChWD;;AAEA;;AACA;;AAEA;;AAEA;;AACA;;AAEM,MAAO,aAAP,SAA6B,sBAA7B,CAAyC;AAO7C,EAAA,WAAA,CAAY,MAAZ,EAAmD,SAAnD,EAAgF;AAC9E,UAAM,MAAN;AADiD,SAAA,SAAA,GAAA,SAAA;AAGjD,SAAK,gBAAL,GAAwB,qCAAmB,KAAK,SAAL,CAAe,SAAlC,CAAxB;AACD;;AARM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,aAAJ,CAAkB,IAAlB,EAAwB,qBAAU,KAAK,SAAf,CAAxB,CAAP;AACD;;AAQM,SAAO,oBAAP,CAA4B,MAA5B,EAAkD,KAAlD,EAAuE;AAC5E;AACA,IAAA,KAAK,CAAC,eAAN,CAAsB,CAAC,QAAD,EAAkC,OAAlC,KAA+D;AACnF,UAAI,CAAC,iCAAgB,QAAhB,CAAL,EAAgC;AAC9B;AACD;;AACD,UAAI,uBAAY,QAAQ,CAAC,IAArB,CAAJ,EAAgC;AAC9B,cAAM;AAAC,UAAA,KAAD;AAAQ,UAAA;AAAR,YAAoB,QAA1B;AACA,cAAM,IAAI,GAA6C,QAAQ,CAAC,IAAhE,CAF8B,CAG9B;;AACA,cAAM,SAAS,GACb,IAAI,CACD,GADH,CACO,CAAC,SAAD,EAAY,CAAZ,KAAiB;AACpB,iBAAO,GAAG,sCAAsB;AAAC,YAAA,KAAD;AAAQ,YAAA,QAAR;AAAkB,YAAA,KAAK,EAAE;AAAzB,WAAtB,CAA0D,MAAM,CAAC,KAA3E;AACD,SAHH,EAIG,IAJH,CAIQ,EAJR,IAIc,IAAI,CAAC,MALrB;AAOA,QAAA,MAAM,GAAG,IAAI,aAAJ,CAAkB,MAAlB,EAA0B;AACjC,UAAA,SADiC;AAEjC,UAAA,EAAE,EAAE,mBAAmB,CAAC,QAAD,EAAW,OAAX,EAAoB;AAAC,YAAA,KAAK,EAAE;AAAR,WAApB;AAFU,SAA1B,CAAT;AAID;AACF,KApBD;AAqBA,WAAO,MAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,EAAhB,CAAR,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,KAAK,gBAAZ;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO;AACL,MAAA,IAAI,EAAE,SADD;AAEL,MAAA,IAAI,EAAE,KAAK,SAAL,CAAe,SAFhB;AAGL,MAAA,EAAE,EAAE,KAAK,SAAL,CAAe;AAHd,KAAP;AAKD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,aAAa,gBAAK,KAAK,SAAV,CAAoB,EAAxC;AACD;;AAzD4C;;;;AA4DzC,SAAU,mBAAV,CAA8B,QAA9B,EAA+D,OAA/D,EAA0F,GAA1F,EAA8G;AAClH,SAAO,yBAAQ,QAAR,EAAgB,MAAA,CAAA,MAAA,CAAA;AAAG,IAAA,MAAM,EAAE,OAAX;AAAoB,IAAA,MAAM,EAAE;AAA5B,GAAA,EAA8C,GAAG,KAAA,IAAH,IAAA,GAAG,KAAA,KAAA,CAAH,GAAA,GAAA,GAAO,EAArD,CAAhB,CAAP;AACD;;;;;;;;;;;ACrED;;AAGA;;;AAGM,SAAU,gBAAV,CAA2B,OAA3B,EAAkD,MAAlD,EAAgE;AACpE,MAAI,oBAAS,CAAC,KAAD,EAAQ,QAAR,CAAT,EAA4B,MAA5B,CAAJ,EAAyC;AACvC,WAAO,QAAP;AACD,GAFD,MAEO,IAAI,oBAAS,CAAC,MAAD,EAAS,OAAT,CAAT,EAA4B,MAA5B,CAAJ,EAAyC;AAC9C,WAAO,KAAP;AACD;;AACD,SAAO,OAAO,KAAK,KAAZ,GAAoB,KAApB,GAA4B,QAAnC;AACD;;AAEK,SAAU,iBAAV,CACJ,IADI,EAEJ,aAFI,EAGJ,MAHI,EAIJ,OAJI,EAIiB;AAErB,QAAM,oBAAoB,GACxB,OAAO,KAAK,KAAZ,GAAoB,MAAM,CAAC,SAA3B,GAAuC,OAAO,KAAK,QAAZ,GAAuB,MAAM,CAAC,YAA9B,GAA6C,MAAM,CAAC,WAD7F;AAGA,SAAO,2BAAgB,CAAC,CAAA,aAAa,KAAA,IAAb,IAAA,aAAa,KAAA,KAAA,CAAb,GAAa,KAAA,CAAb,GAAA,aAAa,CAAE,MAAf,KAAyB,EAA1B,EAA8B,IAA9B,CAAhB,EAAqD,oBAAoB,CAAC,IAAD,CAAzE,EAAiF,MAAM,CAAC,MAAP,CAAc,IAAd,CAAjF,CAAP;AACD;;AAEK,SAAU,mBAAV,CACJ,UADI,EAEJ,aAFI,EAGJ,MAHI,EAIJ,OAJI,EAIiB;AAErB,QAAM,KAAK,GAAG,EAAd;;AACA,OAAK,MAAM,IAAX,IAAmB,UAAnB,EAA+B;AAC7B,UAAM,KAAK,GAAG,iBAAiB,CAAC,IAAD,EAAO,aAAP,EAAsB,MAAtB,EAA8B,OAA9B,CAA/B;;AACA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,MAAA,KAAK,CAAC,IAAD,CAAL,GAAc,KAAd;AACD;AACF;;AACD,SAAO,KAAP;AACD;;;;;;;;ACvCM,MAAM,eAAe,GAAoB,CAAC,KAAD,EAAQ,QAAR,CAAzC;;AAGA,MAAM,YAAY,GAAiB,CAAC,QAAD,EAAW,QAAX,CAAnC;;;;;;;;;;;;;;;;;;ACLP;;AACA;;AACA;;AAEA;;AAOA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAzBA;;;AAkCA;AACM,SAAU,kBAAV,CAA6B,KAA7B,EAA2C,OAA3C,EAAgE;AACpE,QAAM,KAAK,GAAG,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,KAArD;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,MAAN,GAAe,KAAK,CAAC,MAArB,GAA8B,SAA7C;AACA,QAAM,aAAa,GAAG,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,aAAvC,GAClB,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,aADrB,GAElB,SAFJ;AAIA,QAAM;AAAC,IAAA,WAAD;AAAc,IAAA,UAAU,EAAE,EAA1B;AAA8B,IAAA;AAA9B,MAA6C,iCACjD,CAAC,aAAD,EAAgB,YAAhB,EAA8B,aAA9B,CADiD,EAEjD,aAFiD,EAGjD,MAHiD,EAIjD,OAJiD,CAAnD;AAMA,QAAM,aAAa,GAAG,8BAAiB,OAAjB,EAA0B,WAA1B,CAAtB;AAEA,QAAM,UAAU,GAAG,0BAAe,EAAf,CAAnB;AAEA,SAAO;AACL,IAAA,IAAI,EAAE,GAAG,OAAO,QADX;AAEL,IAAA,IAAI,EAAE,OAFD;AAGL,IAAA,IAAI,EAAE,GAAG,aAAa,QAHjB;AAIL,IAAA,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACH,MAAA,IAAI,EAAE;AADH,KAAA,EAEC,OAAO,KAAK,KAAZ,GAAoB;AAAC,MAAA,MAAM,EAAE;AAAT,KAApB,GAAuC,EAFxC,CAAA,EAE2C;AAC9C,MAAA,KAAK,EAAE;AADuC,KAF3C,CAAA,EAIA,0BAA0B,CAAC,UAAD,EAAa,aAAb,CAJ1B,CAAA,EAKA,uBAAuB,CAAC,aAAD,EAAgB,UAAhB,EAA4B,WAA5B,CALvB,CAAA,EAMA,wBAAwB,CAAC,MAAD,EAAS,aAAT,EAAwB,OAAxB,EAAiC,+BAAjC,EAA0D,mCAA1D,CANxB;AAJA,GAAP;AAaD;;AAEK,SAAU,uBAAV,CAAkC,aAAlC,EAAgE,KAAhE,EAA+E,MAAA,GAAsB,QAArG,EAA6G;AACjH,UAAQ,MAAR;AACE,SAAK,OAAL;AACE,aAAO;AAAC,QAAA,KAAK,EAAE;AAAR,OAAP;;AACF,SAAK,KAAL;AACE,aAAO;AAAC,QAAA,KAAK,EAAE;AAAR,OAAP;AAJJ;;AAOA,QAAM,KAAK,GAAG,mCAAkB,KAAlB,EAAyB,aAAa,KAAK,KAAlB,GAA0B,MAA1B,GAAmC,KAA5D,EAAmE,aAAa,KAAK,KAAlB,GAA0B,GAA1B,GAAgC,GAAnG,CAAd;AACA,SAAO,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,EAAzB;AACD;;AAEK,SAAU,0BAAV,CAAqC,KAArC,EAAoD,OAApD,EAAyE;AAC7E,QAAM,QAAQ,GAAG,sCAAqB,KAArB,EAA4B,OAAO,KAAK,KAAZ,GAAoB,MAApB,GAA6B,KAAzD,EAAgE,OAAO,KAAK,KAAZ,GAAoB,GAApB,GAA0B,GAA1F,EAA+F,IAA/F,CAAjB;AACA,SAAO,QAAQ,GAAG;AAAC,IAAA;AAAD,GAAH,GAAgB,EAA/B;AACD;;AAEK,SAAU,oBAAV,CAA+B,KAA/B,EAA6C,OAA7C,EAAmE;AACvE,QAAM,YAAY,GAAG,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,CAArB;AACA,QAAM,MAAM,GAAG,EAAf;;AACA,OAAK,MAAM,UAAX,IAAyB,uBAAzB,EAAuC;AACrC,QAAI,YAAY,CAAC,UAAD,CAAhB,EAA8B;AAC5B,WAAK,MAAM,eAAX,IAA8B,YAAY,CAAC,UAAD,CAA1C,EAAwD;AACtD,cAAM,KAAK,GAAG,mBAAmB,CAAC,KAAD,EAAQ,OAAR,EAAiB,UAAjB,EAA6B,YAA7B,EAA2C,eAA3C,CAAjC;;AACA,YAAI,KAAK,IAAI,IAAb,EAAmB;AACjB,UAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACD;AACF;AACF;AACF;;AACD,SAAO,MAAP;AACD;;AAED,SAAS,OAAT,CAAiB,aAAjB,EAAuD,OAAvD,EAA6E;;;AAC3E,QAAM;AAAC,IAAA;AAAD,MAAS,aAAf;;AACA,MAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,WAAO;AACL,MAAA,KAAK,EAAE,yBAAQ,IAAR,EAAc;AAAC,QAAA,IAAI,EAAE;AAAP,OAAd,CADF;AAEL,MAAA,KAAK,EAAA,CAAA,EAAA,GAAE,IAAI,CAAC,KAAP,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB;AAFhB,KAAP;AAID,GALD,MAKO,IAAI,uBAAQ,IAAR,CAAJ,EAAmB;AACxB,WAAO;AACL,MAAA,KAAK,EAAE,oCAAoB,aAApB,EAAmC,OAAnC,EAA4C;AAAC,QAAA,IAAI,EAAE;AAAP,OAA5C,CADF;AAEL,MAAA,KAAK,EAAE;AAFF,KAAP;AAID,GALM,MAKA;AACL,WAAO;AACL,MAAA,KAAK,EAAE,yBAAQ,aAAR,EAAuB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAvB,CADF;AAEL,MAAA,KAAK,EAAE,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAA,IAAA,GAAQ;AAFV,KAAP;AAID;AACF;;AAEK,SAAU,kBAAV,CAA6B,aAA7B,EAAmE,OAAnE,EAA0F,MAA1F,EAAwG;AAC5G,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA,UAAT;AAAqB,IAAA,UAArB;AAAiC,IAAA,WAAjC;AAA8C,IAAA,WAA9C;AAA2D,IAAA;AAA3D,MAAwE,iCAC5E,CAAC,QAAD,EAAW,YAAX,EAAyB,YAAzB,EAAuC,aAAvC,EAAsD,aAAtD,EAAqE,WAArE,CAD4E,EAE5E,aAF4E,EAG5E,MAH4E,EAI5E,OAJ4E,CAA9E;AAOA,QAAM,aAAa,GAAG,6BAAgB;AAAC,IAAA,eAAe,EAAE,aAAlB;AAAiC,IAAA,MAAjC;AAAyC,IAAA,UAAzC;AAAqD,IAAA,IAAI,EAAE,QAA3D;AAAqE,IAAA;AAArE,GAAhB,EACnB,MADH;AAEA,QAAM,aAAa,GAAG,8BAAiB,OAAjB,EAA0B,WAA1B,CAAtB;AAEA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,IAAA,IAAI,EAAE;AACJ,MAAA,MAAM,EAAE,SAAS,GACb,sBACE,sBAAW,SAAX,EAAsB,aAAtB,EAAqC,aAArC,CADF,EAEE,aAFF,EAGE,yBAAQ,aAAR,EAAuB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAvB,CAHF,CADa,GAMb;AAPA;AADR,GAAA,EAUM,OAAO,KAAK,KAAZ,GAAoB;AAAC,IAAA,MAAM,EAAE;AAAT,GAApB,GAAuC,EAV7C,CAAA,EAUgD;AAC9C,IAAA,KAAK,EAAE,aADuC;AAE9C,IAAA,KAAK,EAAE;AAFuC,GAVhD,CAAA,EAaK,0BAA0B,CAAC,UAAD,EAAa,aAAb,CAb/B,CAAA,EAcK,uBAAuB,CAAC,aAAD,EAAgB,UAAhB,EAA4B,WAA5B,CAd5B,CAAA,EAeK,wBAAwB,CAAC,MAAD,EAAS,aAAT,EAAwB,OAAxB,EAAiC,+BAAjC,EAA0D,mCAA1D,CAf7B,CAAA;AAiBD;;AAEK,SAAU,mBAAV,CACJ,KADI,EAEJ,OAFI,EAGJ,UAHI,EAIJ,YAJI,EAKJ,eALI,EAK4B;AAEhC,MAAI,eAAJ,EAAqB;AACnB,QAAI,KAAK,GAAG,IAAZ;AACA,UAAM;AAAC,MAAA;AAAD,QAAkB,YAAxB;AACA,UAAM,MAAM,GAAG,KAAK,CAAC,MAAN,GAAe,KAAK,CAAC,MAArB,GAA8B,SAA7C;;AACA,QAAI,aAAa,IAAI,eAAe,CAAC,MAArC,EAA6C;AAC3C,YAAM;AAAC,QAAA;AAAD,UAAgB,iCAAoB,CAAC,aAAD,CAApB,EAAqC,aAArC,EAAoD,MAApD,EAA4D,OAA5D,CAAtB,CAD2C,CAG3C;;AACA,UACG,OAAO,KAAK,KAAZ,IAAqB,CAAC,oBAAS,CAAC,KAAD,EAAQ,QAAR,CAAT,EAA4B,WAA5B,CAAvB,IACC,OAAO,KAAK,QAAZ,IAAwB,CAAC,oBAAS,CAAC,MAAD,EAAS,OAAT,CAAT,EAA4B,WAA5B,CAF5B,EAGE;AACA,QAAA,KAAK,GAAG,kBAAkB,CAAC,aAAD,EAAgB,OAAhB,EAAyB,MAAzB,CAA1B;AACD;AACF;;AAED,UAAM,oBAAoB,GAAG,yBAAa,KAAb,KAAuB,CAAC,2BAAe,KAAK,CAAC,KAArB,CAArD;AAEA,UAAM,IAAI,GAAG,eAAe,CAAC,IAA7B;AAEA,UAAM,OAAO,GAAG,CAAA,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,MAAN,IAAe,CAA/B;;AACA,QAAI,KAAK,IAAI,OAAb,EAAsB;AACpB,YAAM,WAAW,GAAG,OAAO,KAAK,KAAZ,GAAoB,QAApB,GAA+B,OAAnD;AAEA,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,QAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,GAAG,OAAO,IAAI,UAAU,EAAtC,CADR;AAEE,QAAA,IAAI,EAAE,OAFR;AAGE,QAAA,IAAI,EAAE,GAAG,OAAO,IAAI,UAAU;AAHhC,OAAA,EAKM,YAAY,CAAC,aAAb,GACA;AACE,QAAA,IAAI,EAAE;AAAC,UAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,OAAO,GAAG,SAAxB;AAAP,SADR;AAEE,QAAA,IAAI,EAAE,OAAO,CAAC,aAAD,EAAgB,OAAhB;AAFf,OADA,GAKA,EAVN,CAAA,EAWM,OAAO,IAAI,oBAAX,GACA;AACE,QAAA,IAAI,EAAE;AAAC,UAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,gBAAgB,OAAO,EAArC;AAAP;AADR,OADA,GAIA,EAfN,CAAA,EAiBM,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EAjBxB,CAAA,EAkBM,eAAe,CAAC,UAAhB,GACA;AACE,QAAA,MAAM,EAAE;AACN,UAAA,MAAM,EAAE;AACN,aAAC,WAAD,GAAe,eAAe,CAAC;AADzB;AADF;AADV,OADA,GAQA,EA1BN,CAAA,EA2BM,OAAO,GAAG;AAAC,QAAA;AAAD,OAAH,GAAY,EA3BzB,CAAA;AA6BD;AACF;;AACD,SAAO,IAAP;AACD;;AAED,MAAM,iBAAiB,GAAG;AACxB,EAAA,MAAM,EAAE;AACN,IAAA,KAAK,EAAE,CADD;AAEN,IAAA,GAAG,EAAE;AAFC,GADgB;AAKxB,EAAA,GAAG,EAAE;AACH,IAAA,KAAK,EAAE,CADJ;AAEH,IAAA,GAAG,EAAE;AAFF;AALmB,CAA1B;;AAWM,SAAU,kBAAV,CAA6B,WAA7B,EAAuD,aAAvD,EAAmF;AACvF,SAAO,iBAAiB,CAAC,aAAD,CAAjB,CAAiC,WAAjC,CAAP;AACD;;AAEK,SAAU,uBAAV,CACJ,oBADI,EAEJ,MAFI,EAEU;AAEd,QAAM,SAAS,GAAG,EAAlB;;AAEA,OAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAM,eAAe,GAAG,oBAAoB,CAAC,OAAD,CAA5C;;AACA,QAAI,eAAe,KAAA,IAAf,IAAA,eAAe,KAAA,KAAA,CAAf,GAAe,KAAA,CAAf,GAAA,eAAe,CAAE,aAArB,EAAoC;AAClC,YAAM;AAAC,QAAA,WAAD;AAAc,QAAA;AAAd,UAA6B,iCACjC,CAAC,aAAD,EAAgB,aAAhB,CADiC,EAEjC,eAAe,CAAC,aAFiB,EAGjC,MAHiC,EAIjC,OAJiC,CAAnC;AAOA,YAAM,aAAa,GAAG,8BAAiB,OAAjB,EAA0B,WAA1B,CAAtB;AACA,YAAM,IAAI,GAAG,kBAAkB,CAAC,WAAD,EAAc,aAAd,CAA/B;;AACA,UAAI,IAAI,KAAK,SAAb,EAAwB;AACtB,QAAA,SAAS,CAAC,aAAD,CAAT,GAA2B,IAA3B;AACD;AACF;AACF;;AAED,SAAO,mBAAQ,SAAR,IAAqB,SAArB,GAAiC,SAAxC;AACD;;AAEK,SAAU,wBAAV,CACJ,MADI,EAEJ,aAFI,EAGJ,OAHI,EAIJ,UAJI,EAKJ,aALI,EAK+D;AAEnE,QAAM,KAAK,GAAG,EAAd;;AACA,OAAK,MAAM,IAAX,IAAmB,UAAnB,EAA+B;AAC7B,QAAI,CAAC,aAAa,CAAC,IAAD,CAAlB,EAA0B;AACxB;AACD;;AAED,UAAM,KAAK,GAAG,+BAAkB,IAAlB,EAAwB,aAAxB,EAAuC,MAAvC,EAA+C,OAA/C,CAAd;;AACA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,MAAA,KAAK,CAAC,aAAa,CAAC,IAAD,CAAd,CAAL,GAA6B,KAA7B;AACD;AACF;;AACD,SAAO,KAAP;AACD;;;;;;;;;;;ACpRD;;AACA;;AACA;;AACA;;AACA;;AAIM,SAAU,qBAAV,CAAgC,KAAhC,EAA4C;AAChD,SAAO,CACL,GAAG,WAAW,CAAC,KAAD,EAAQ,OAAR,CADT,EAEL,GAAG,WAAW,CAAC,KAAD,EAAQ,QAAR,CAFT,EAGL,GAAG,WAAW,CAAC,KAAD,EAAQ,YAAR,CAHT,EAIL,GAAG,WAAW,CAAC,KAAD,EAAQ,aAAR,CAJT,CAAP;AAMD;;AAEK,SAAU,WAAV,CAAsB,KAAtB,EAAoC,QAApC,EAA4D;AAChE,QAAM,OAAO,GAAG,QAAQ,KAAK,OAAb,GAAuB,GAAvB,GAA6B,GAA7C;AACA,QAAM,IAAI,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,GAA3B,CAA+B,QAA/B,CAAb;;AACA,MAAI,CAAC,IAAD,IAAS,IAAI,KAAK,QAAtB,EAAgC;AAC9B,WAAO,EAAP;AACD,GAL+D,CAOhE;;;AACA,QAAM,IAAI,GAAG,KAAK,CAAC,gBAAN,CAAuB,QAAvB,EAAiC,MAA9C;;AAEA,MAAI,IAAI,KAAK,MAAb,EAAqB;AACnB,UAAM,cAAc,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAvB;;AAEA,QAAI,cAAJ,EAAoB;AAClB,YAAM,IAAI,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAb;AACA,YAAM,KAAK,GAAG,cAAc,CAAC,GAAf,CAAmB,OAAnB,CAAd;;AAEA,UAAI,8BAAkB,IAAlB,KAA2B,yBAAc,KAAd,CAA/B,EAAqD;AACnD,cAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAlB;;AAEA,YAAI,yBAAa,KAAK,CAAC,MAAnB,CAAJ,EAAgC;AAC9B;AACA;AACA;AACA,gBAAM,aAAa,GAAG,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,OAA7C;;AACA,cAAI,aAAa,CAAC,KAAd,CAAoB,OAApB,MAAiC,aAArC,EAAoD;AAClD,mBAAO,CAAC,UAAU,CAAC,SAAD,EAAY,KAAZ,CAAX,CAAP;AACD;AACF;;AAED,eAAO,CACL,UAAU,CAAC,SAAD,EAAY,KAAZ,CADL,EAEL;AACE,UAAA,IADF;AAEE,UAAA,MAAM,EAAE,QAAQ,CAAC,SAAD,EAAY,cAAZ,EAA4B,WAAW,SAAS,WAAhD;AAFlB,SAFK,CAAP;AAOD;AACF;AACD;;;AACA,UAAM,IAAI,KAAJ,CAAU,wDAAV,CAAN;AACD,GA/BD,MA+BO,IAAI,IAAI,IAAI,WAAZ,EAAyB;AAC9B,UAAM,OAAO,GAAG,IAAI,CAAC,QAAL,CAAc,OAAd,CAAhB;AACA,UAAM,IAAI,GAAG,OAAO,GAAG,oBAAH,GAA0B,oBAA9C;AACA,UAAM,YAAY,GAAG,yCAA4B,KAAK,CAAC,MAAN,CAAa,IAAzC,EAA+C,OAAO,GAAG,OAAH,GAAa,QAAnE,CAArB;AACA,UAAM,QAAQ,GAAG,YAAY,IAAI,OAAO,IAAI,MAAM,YAAY,EAA9D;AACA,WAAO,CAAC;AAAC,MAAA,IAAD;AAAO,MAAA,IAAI,EAAE,QAAb;AAAuB,MAAA,EAAE,EAAE,CAAC;AAAC,QAAA,MAAM,EAAE,QAAT;AAAmB,QAAA,MAAM,EAAE;AAA3B,OAAD;AAA3B,KAAD,CAAP;AACD,GANM,MAMA;AACL,WAAO,CACL;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE;AAFT,KADK,CAAP;AAMD;AACF;;AAED,SAAS,UAAT,CAAoB,SAApB,EAAuC,KAAvC,EAAyD;AACvD,SAAO;AACL,IAAA,IAAI,EAAE,SAAS,GAAG,OADb;AAEL,IAAA,KAAK,EAAE,KAAK,CAAC;AAFR,GAAP;AAID;;AAEK,SAAU,QAAV,CAAmB,SAAnB,EAAsC,cAAtC,EAAsE,WAAtE,EAAyF;AAC7F,QAAM,IAAI,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAb;AACA,QAAM,OAAO,GAAG,cAAc,CAAC,GAAf,CAAmB,SAAnB,CAAhB;AACA,QAAM,YAAY,GAAG,2BAAgB,cAAc,CAAC,GAAf,CAAmB,cAAnB,CAAhB,EAAoD,OAApD,CAArB;AAEA,MAAI,YAAY,GAAG,cAAc,CAAC,GAAf,CAAmB,cAAnB,CAAnB;AACA,EAAA,YAAY,GACV,IAAI,KAAK,MAAT,GACI;AACA,EAAA,YAAY,KAAK,SAAjB,GACE,YADF,GAEE,OAJN,GAKI;AACA;AACA,GARN;AASA,SAAO,aAAa,WAAW,KAAK,YAAY,KAAK,YAAY,OAAO,SAAS,OAAjF;AACD;;;;;;;;;AChFK,SAAU,6BAAV,CAAwC,cAAxC,EAAsE;AAC1E,SAAO,cAAc,KAAK,YAAnB,GAAkC,OAAlC,GAA4C,cAAc,KAAK,aAAnB,GAAmC,QAAnC,GAA8C,cAAjG;AACD;;;;;;;;;ACjBD;;AACA;;AACA;;AAGM,SAAU,gBAAV,CAA2B,QAA3B,EAAyD,KAAzD,EAAyE;AAC7E,SAAO,gBAAK,QAAL,EAAe,MAAf,CAAsB,CAAC,MAAD,EAAS,OAAT,KAAqC;AAChE,UAAM,QAAQ,GAAG,QAAQ,CAAC,OAAD,CAAzB;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MADL,CAAA,EAEK,2BAAc,KAAd,EAAqB,QAArB,EAA+B,OAA/B,EAAyC,CAAD,IAA8B,uBAAY,CAAZ,IAAiB,CAAjB,GAAqB;AAAC,MAAA,KAAK,EAAE,CAAC,CAAC;AAAV,KAA3F,CAFL,CAAA;AAID,GANM,EAMJ,EANI,CAAP;AAOD;;;;;;;;;;AChBD;;AACA;;AAEA;;;;;;AAEM,SAAU,mBAAV,CAA8B,OAA9B,EAAqD,KAArD,EAAiE;AACrE,MAAI,yBAAa,KAAb,KAAuB,yBAAa,KAAb,CAA3B,EAAgD;AAC9C,WAAO,QAAP;AACD,GAFD,MAEO,IAAI,0BAAc,KAAd,CAAJ,EAA0B;AAC/B,WAAO,qBAAO,OAAP,IAAkB,aAAlB,GAAkC,QAAzC;AACD;AACD;;;AACA,QAAM,IAAI,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAEK,SAAU,iBAAV,CAA4B,OAA5B,EAA8C,OAA9C,EAAmE;AACvE,QAAM,mBAAmB,GAAG,OAAO,CAAC,KAAR,CAAc,OAAd,CAA5B;AACA,QAAM,KAAK,GAAG,qBAAO,OAAP,IAAkB,MAAlB,GAA2B,QAAzC;;AAEA,MAAI,mBAAmB,KAAK,aAA5B,EAA2C;AACzC,QAAI,OAAO,CAAC,KAAD,CAAP,CAAe,OAAf,MAA4B,QAAhC,EAA0C;AACxC,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qCAAZ,CAAkD,OAAlD,CAAT;AACD;;AACD,WAAO,aAAP;AACD;;AAED,SAAO,OAAO,CAAC,KAAD,CAAP,CAAe,OAAf,KAA2B,QAAlC;AACD;;;;;;;;;ACzBD;;AACA;;AACA;;AAQA,MAAM,+BAA+B,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChC,oCADgC,CAAA,EACJ;AAC/B,EAAA,OAAO,EAAE,CADsB;AAE/B,EAAA,SAAS,EAAE,CAFoB;AAG/B,EAAA,UAAU,EAAE,CAHmB;AAI/B;AACA,EAAA,OAAO,EAAE,CALsB;AAM/B,EAAA,KAAK,EAAE,CANwB;AAO/B,EAAA,MAAM,EAAE,CAPuB;AAQ/B,EAAA,IAAI,EAAE,CARyB;AAS/B,EAAA,IAAI,EAAE,CATyB;AAU/B,EAAA,WAAW,EAAE,CAVkB;AAW/B,EAAA,UAAU,EAAE,CAXmB;AAY/B;AACA,EAAA,MAAM,EAAE;AAbuB,CADI,CAArC;AAiBO,MAAM,2BAA2B,GAAG,gBAAK,+BAAL,CAApC;;;AAED,MAAO,eAAP,SAA+B,YAA/B,CAA0D;;;;;;;;;;;;;;;;AC9BhE;;AACA;;AACA;;AAWA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAaO,MAAM,iBAAiB,GAE1B;AACF,EAAA,OADE;AAEF,EAAA,QAFE;AAGF,EAAA,MAHE;AAIF,EAAA;AAJE,CAFG;;;AASD,SAAU,OAAV,CACJ,WADI,EAEJ;AACE,EAAA,eADF;AAGE,EAAA,KAHF;AAIE,EAAA,OAJF;AAKE,EAAA,UALF;AAME,EAAA;AANF,CAFI,EASiB;;;AAErB,MAAI,UAAU,KAAK,QAAnB,EAA6B;AAC3B,WAAO,SAAP;AACD;;AAED,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA,MAApB;AAA4B,IAAA;AAA5B,MAAoC,KAA1C;AACA,QAAM,MAAM,GAAG,OAAO,CAAC,MAAR,IAAkB,IAAI,KAAK,OAA1C;AAEA,MAAI,GAAG,GAAG,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,6BAAgB,EAAhB,EAAoB,KAApB,EAA2B,wBAA3B,CADK,CAAA,EAEL,MAAM,CAAC,KAAP,CAAa,KAAb,EAAoB;AAAC,IAAA;AAAD,GAApB,CAFK,CAAV,CATqB,CAYG;;AAExB,QAAM,OAAO,GAAA,CAAA,EAAA,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAV,CAAd,MAAgC,IAAhC,IAAgC,EAAA,KAAA,KAAA,CAAhC,GAAgC,EAAhC,GAAoC,OAAO,CAAC,OAAzD;;AAEA,MAAI,GAAG,CAAC,IAAR,EAAc;AACZ;AACA,QAAI,OAAO,KAAK,MAAZ,IAAuB,MAAM,IAAI,OAAO,KAAK,cAAjD,EAAyD;AACvD,aAAO,GAAG,CAAC,IAAX;AACD,KAFD,MAEO;AACL,UAAI,GAAG,CAAC,IAAJ,CAAS,OAAT,CAAJ,EAAuB;AACrB;AACA,YAAI,UAAU,CAAC,GAAX,CAAe,iBAAf,CAAJ,EAAuC;AACrC,iBAAO,GAAG,CAAC,IAAX;AACD,SAFD,MAEO;AACL,UAAA,GAAG,CAAC,IAAJ,GAAW,8BAAgB,CAAA,EAAA,GAAC,MAAM,CAAC,MAAP,CAAc,mBAAf,MAAkC,IAAlC,IAAkC,EAAA,KAAA,KAAA,CAAlC,GAAkC,EAAlC,GAAsC,OAAtD,CAAX;AACA,UAAA,GAAG,CAAC,WAAJ,GAAkB,8BAAiB,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAA,OAAA,GAAW,CAA5B,CAAlB;AACD;AACF,OARD,MAQO,IAAI,uBAAQ,GAAG,CAAC,IAAZ,CAAJ,EAAuB;AAC5B,cAAM,IAAI,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GACR,sBAAsB,CAAA,CAAA,EAAA,GAAC,QAAQ,CAAC,IAAV,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,QAAQ,CAAC,KAA3B,CADd,MAC+C,IAD/C,IAC+C,EAAA,KAAA,KAAA,CAD/C,GAC+C,EAD/C,GACmD,OAAO,CAAC,IAD3D,MAC+D,IAD/D,IAC+D,EAAA,KAAA,KAAA,CAD/D,GAC+D,EAD/D,GACoE,MAAM,IAAI,OAAO,CAAC,KADhG;;AAEA,YAAI,IAAJ,EAAU;AACR,UAAA,GAAG,CAAC,IAAJ,GAAW,8BAAiB,IAAjB,CAAX;AACD;AACF;AACF;AACF;;AAED,MAAI,GAAG,CAAC,MAAR,EAAgB;AACd,QAAI,OAAO,KAAK,QAAZ,IAAyB,CAAC,MAAD,IAAW,OAAO,KAAK,cAApD,EAA4D;AAC1D,aAAO,GAAG,CAAC,MAAX;AACD,KAFD,MAEO;AACL,UAAI,GAAG,CAAC,MAAJ,CAAW,OAAX,CAAJ,EAAyB;AACvB;AACA,eAAO,GAAG,CAAC,MAAX;AACD,OAHD,MAGO,IAAI,uBAAQ,GAAG,CAAC,MAAZ,CAAJ,EAAyB;AAC9B,cAAM,MAAM,GAAG,2BACb,sBAAsB,CAAoB,QAAQ,CAAC,MAAT,IAAmB,QAAQ,CAAC,KAAhD,CADT,EAEb,OAAO,CAAC,MAFK,EAGb,MAAM,GAAG,OAAO,CAAC,KAAX,GAAmB,SAHZ,CAAf;;AAKA,YAAI,MAAJ,EAAY;AACV,UAAA,GAAG,CAAC,MAAJ,GAAa;AAAC,YAAA,KAAK,EAAE;AAAR,WAAb;AACD;AACF;AACF;AACF;;AAED,MAAI,OAAO,KAAK,gBAAhB,EAAyB;AACvB,UAAM,SAAS,GAAG,4BAAW,eAAX,KAA+B,iBAAiB,CAAC,KAAD,EAAQ,UAAR,EAAoB,eAApB,CAAlE;;AAEA,QAAI,SAAJ,EAAe;AACb,MAAA,GAAG,CAAC,OAAJ,GAAc;AACX,QAAA,IAAI,EAAE;SAAc,8BAAiB,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAA,OAAA,GAAW,CAA5B,EADT,EAEZ,8BAAiB,MAAM,CAAC,MAAP,CAAc,iBAA/B,CAFY,CAAd;AAID,KALD,MAKO,IAAI,OAAJ,EAAa;AAClB,MAAA,GAAG,CAAC,OAAJ,GAAc,8BAAiB,OAAjB,CAAd;AACD;AACF;;AAED,EAAA,GAAG,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,GAAP,CAAA,EAAe,WAAf,CAAH;AAEA,SAAO,mBAAQ,GAAR,IAAe,SAAf,GAA2B,GAAlC;AACD;;AAEK,SAAU,QAAV,CAAmB,YAAnB,EAAsC;AAAC,EAAA,KAAD;AAAQ,EAAA;AAAR,CAAtC,EAA6E;AACjF,MAAI,UAAU,KAAK,UAAnB,EAA+B;AAC7B,WAAO,SAAP;AACD;;AAED,MAAI,GAAG,GAAsB,EAA7B;AAEA,QAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,QAAN,CAAe,OAAhB,CAAX,IAAuC,KAAK,CAAC,OAAN,CAAc,OAArE;;AACA,MAAI,OAAJ,EAAa;AACX;AACA,IAAA,GAAG,CAAC,OAAJ,GAAc,8BAAiB,OAAjB,CAAd;AACD;;AAED,EAAA,GAAG,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,GAAP,CAAA,EAAe,YAAf,CAAH;AACA,SAAO,mBAAQ,GAAR,IAAe,SAAf,GAA2B,GAAlC;AACD;;AAEK,SAAU,MAAV,CAAiB,mBAAjB,EAA2C;AAAC,EAAA,eAAD;AAAkB,EAAA,KAAlB;AAAyB,EAAA,OAAzB;AAAkC,EAAA;AAAlC,CAA3C,EAA4G;AAChH,QAAM,MAAM,GAAG,KAAK,CAAC,MAAN,CAAa,OAAb,KAAyB,EAAxC;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,MAArB;AAEA,QAAM,SAAS,GAAG,4BAAW,eAAX,IAA8B,iBAAiB,CAAC,KAAD,EAAQ,UAAR,EAAoB,eAApB,CAA/C,GAAsF,SAAxG;AACA,QAAM,OAAO,GAAG,SAAS,GAAG,CAAC;AAAC,IAAA,IAAI,EAAE,SAAP;AAAkB,IAAA,KAAK,EAAE;AAAzB,GAAD,EAA8B;AAAC,IAAA,KAAK,EAAE,MAAM,CAAC,MAAP,CAAc;AAAtB,GAA9B,CAAH,GAA6E,SAAtG;AAEA,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAuB,MAA7B;AAEA,QAAM,IAAI,GAAG,gCAAmB,UAAnB,IACT,8BAAiB;AACf,IAAA,eADe;AAEf,IAAA,KAAK,EAAE,aAFQ;AAGf,IAAA,MAHe;AAIf,IAAA,UAJe;AAKf,IAAA;AALe,GAAjB,CADS,GAQT,SARJ;AAUA,QAAM,UAAU,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,OAAO,GAAG;AAAC,IAAA;AAAD,GAAH,GAAe,EADZ,CAAA,EAEV,IAAI,GAAG;AAAC,IAAA;AAAD,GAAH,GAAY,EAFN,CAAA,EAGX,mBAHW,CAAhB;AAMA,SAAO,mBAAQ,UAAR,IAAsB,SAAtB,GAAkC,UAAzC;AACD;;AAEK,SAAU,OAAV,CAAkB,WAAlB,EAAoC;AAAC,EAAA;AAAD,CAApC,EAAoE;AACxE,QAAM,UAAU,GAAG,UAAU,CAAC,GAAX,CAAe,YAAf,CAAnB;AACA,SAAO,CAAA,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAU,KAAA,CAAV,GAAA,UAAU,CAAE,MAAZ,IAAoB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAL,CAAA,EAAgB;AAAE,IAAA,IAAI,EAAE;AAAC,MAAA,KAAK,EAAE;AAAR;AAAR,GAAhB,CAApB,GAAsE,WAA7E;AACD;;AAED,SAAS,WAAT,CAAqB,UAArB,EAA4D;AAC1D,SAAO,iBAAiB,CAAS,UAAT,EAAqB,CAAC,CAAD,EAAY,cAAZ,KAA+B,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,cAAc,CAAC,KAA3B,CAApD,CAAxB;AACD;;AAEK,SAAU,sBAAV,CACJ,UADI,EACqD;AAEzD,SAAO,iBAAiB,CAAI,UAAJ,EAAgB,CAAC,CAAD,EAAO,cAAP,KAAmD;AACzF,WAAO,2BAAmB,CAAnB,EAAsB,cAAc,CAAC,KAArC,CAAP;AACD,GAFuB,CAAxB;AAGD;;AAED,SAAS,iBAAT,CACE,UADF,EAEE,OAFF,EAEkE;AAEhE,MAAI,wCAAuB,UAAvB,CAAJ,EAAwC;AACtC,WAAO,qBAAM,UAAU,CAAC,SAAjB,EAA4B,MAA5B,CAAmC,OAAnC,EAA4C,UAAU,CAAC,KAAvD,CAAP;AACD,GAFD,MAEO,IAAI,4BAAW,UAAX,CAAJ,EAA4B;AACjC,WAAO,UAAU,CAAC,KAAlB;AACD;;AACD,SAAO,SAAP;AACD;;AAED,SAAS,iBAAT,CAA2B,KAA3B,EAA6C,UAA7C,EAA0E,QAA1E,EAAyG;AACvG,QAAM,UAAU,GAAG,UAAU,CAAC,GAAX,CAAe,YAAf,CAAnB;AACA,MAAI,EAAC,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAU,KAAA,CAAV,GAAA,UAAU,CAAE,MAAb,CAAJ,EAAyB,OAAO,SAAP;AAEzB,QAAM,KAAK,GAAG,2BAAY,QAAQ,CAAC,KAArB,CAAd;AACA,SAAO,UAAU,CACd,GADI,CACA,IAAI,IAAG;AACV,UAAM,KAAK,GAAG,2BAAY,mBAAQ,IAAR,IAAgB,gBAA5B,CAAd;AACA,WAAO,iBAAiB,KAAK,UAAU,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,wBAAjF;AACD,GAJI,EAKJ,IALI,CAKC,MALD,CAAP;AAMD;;;;;;;;;;;;;;;;;;ACnND;;AACA;;AACA;;AAKA;;AAEA;;AACA;;AACA;;AAIA;;AAwBO,MAAM,WAAW,GAEpB;AACF,EAAA,SAAS,EAAE,CAAC;AAAC,IAAA;AAAD,GAAD,KAAiB,SAD1B;AAGF,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA,MAAlB;AAA0B,IAAA;AAA1B,GAAD,KAAsC;AAC5C,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAuB,MAA7B;AACA,WAAO,yBAAY,eAAZ,EAA6B,eAAe,CAAC,IAA7C,EAAmD,MAAnD,EAA2D,UAA3D,EAAuE,MAAvE,EAA+E,KAA/E,CAAP;AACD,GANC;AAQF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA,MAAD;AAAS,IAAA,eAAT;AAA0B,IAAA;AAA1B,GAAD,KAAyC;AACnD,UAAM;AAAC,MAAA;AAAD,QAAe,MAArB;AACA,WAAO,6BAAgB,UAAhB,EAA4B,eAA5B,EAA6C,SAA7C,CAAP;AACD,GAXC;AAaF,EAAA,cAAc,EAAE,MAAM,IAAG;;;AACvB,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAyB,MAA/B;AACA,WAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAO,MAAM,CAAC,cAAd,MAA4B,IAA5B,IAA4B,EAAA,KAAA,KAAA,CAA5B,GAA4B,EAA5B,GAAgC,YAAY,CAAC,cAA7C,MAA2D,IAA3D,IAA2D,EAAA,KAAA,KAAA,CAA3D,GAA2D,EAA3D,GAA+D,qBAAqB,CAAC,MAAD,CAApF;AACD,GAhBC;AAkBF,EAAA,YAAY,EAAE,CAAC;AAAC,IAAA,MAAD;AAAS,IAAA,YAAT;AAAuB,IAAA;AAAvB,GAAD,KAAsC;AAAA,QAAA,EAAA,EAAA,EAAA;;AAAA,WAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAClD,MAAM,CAAC,YAD2C,MAC/B,IAD+B,IAC/B,EAAA,KAAA,KAAA,CAD+B,GAC/B,EAD+B,GAC3B,YAAY,CAAC,YADc,MACF,IADE,IACF,EAAA,KAAA,KAAA,CADE,GACF,EADE,GACE,mBAAmB,CAAC,SAAD,CADrB;AACgC,GAnBlF;AAqBF,EAAA,UAAU,EAAE,CAAC;AAAC,IAAA,MAAD;AAAS,IAAA,OAAT;AAAkB,IAAA,OAAlB;AAA2B,IAAA;AAA3B,GAAD,KAAyC;AAAA,QAAA,EAAA;;AAAA,WAAA,CAAA,EAAA,GACnD,MAAM,CAAC,UAD4C,MAClC,IADkC,IAClC,EAAA,KAAA,KAAA,CADkC,GAClC,EADkC,GAC9B,iBAAiB,CAAC,OAAO,CAAC,IAAT,EAAe,OAAf,EAAwB,QAAQ,CAAC,KAAjC,EAAwC,OAAO,CAAC,KAAhD,CADa;AACyC,GAtB5F;AAwBF,EAAA,KAAK,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA;AAAlB,GAAD,KAA+B,uBAAc,eAAd,EAA+B,MAA/B,EAAuC;AAAC,IAAA,cAAc,EAAE;AAAjB,GAAvC,CAxBpC;AA0BF,EAAA,IAAI,EAAE,CAAC;AAAC,IAAA,UAAD;AAAa,IAAA,SAAb;AAAwB,IAAA;AAAxB,GAAD,KAAqC;AACzC,QAAI,6BAAe,OAAf,KAA2B,qCAAyB,SAAzB,CAA/B,EAAoE;AAClE,UAAI,UAAU,KAAK,UAAnB,EAA+B;AAC7B,eAAO,SAAP;AACD;AACF,KAJD,MAIO,IAAI,UAAU,KAAK,QAAnB,EAA6B;AAClC,aAAO,SAAP;AACD;;AACD,WAAO,UAAP;AACD,GAnCC;AAqCF,EAAA,MAAM,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA;AAAlB,GAAD,KAA+B,MAAM,CAAC,MAAD,EAAS,eAAT;AArC3C,CAFG;;;AA0CD,SAAU,MAAV,CAAiB,MAAjB,EAAiC,eAAjC,EAAkF;AACtF,QAAM,IAAI,GAAG,MAAM,CAAC,MAApB;;AAEA,MAAI,uBAAQ,IAAR,CAAJ,EAAmB;AACjB,WAAO,4BAAW,eAAX,EAA4B,IAA5B,CAAP;AACD,GAFD,MAEO,IAAI,uBAAY,IAAZ,CAAJ,EAAuB;AAC5B,WAAO,IAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,iBAAV,CACJ,IADI,EAEJ,OAFI,EAGJ,eAHI,EAIJ,SAJI,EAI8B;;;AAElC,MAAI,OAAO,KAAK,OAAhB,EAAyB;AACvB;AACA,UAAM,KAAK,GAAA,CAAA,EAAA,GAAG,oCAA+B,eAA/B,CAAH,MAAkD,IAAlD,IAAkD,EAAA,KAAA,KAAA,CAAlD,GAAkD,EAAlD,GAAsD,SAAjE;;AACA,QAAI,KAAJ,EAAW;AACT,aAAO,KAAP;AACD;AACF;;AAED,UAAQ,IAAR;AACE,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,QAAL;AACE,aAAO,QAAP;;AACF,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAO,QAAP;;AACF,SAAK,KAAL;AACA,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,MAAL;AACA,SAAK,UAAL;AACA,SAAK,MAAL;AACA,SAAK,MAAL;AACE,aAAO,QAAP;AAjBJ;AAmBD;;AAEK,SAAU,UAAV,CAAqB,UAArB,EAA2C;AAC/C,MAAI,UAAU,KAAK,UAAnB,EAA+B;AAC7B,WAAO,EAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,aAAV,CAAwB,MAAxB,EAKL;AACC,QAAM;AAAC,IAAA;AAAD,MAAW,MAAjB;AAEA,SAAO,2BAAgB,MAAM,CAAC,IAAvB,EAA6B,WAAW,CAAC,MAAD,CAAxC,CAAP;AACD;;AAEK,SAAU,WAAV,CAAsB;AAC1B,EAAA,OAD0B;AAE1B,EAAA,QAF0B;AAG1B,EAAA;AAH0B,CAAtB,EAQL;AACC;AAEA,MAAI,6BAAe,OAAf,CAAJ,EAA6B;AAC3B,QAAI,oBAAS,CAAC,SAAD,EAAY,OAAZ,EAAqB,KAArB,CAAT,EAAsC,QAAtC,CAAJ,EAAqD;AACnD,aAAO,QAAP;AACD;;AAED,QAAI,qCAAyB,SAAzB,CAAJ,EAAyC;AACvC,aAAO,UAAP;AACD;AACF;;AACD,SAAO,QAAP;AACD;;AAEK,SAAU,YAAV,CAAuB;AAC3B,EAAA,YAD2B;AAE3B,EAAA,UAF2B;AAG3B,EAAA,MAH2B;AAI3B,EAAA;AAJ2B,CAAvB,EAUL;;;AACC,SAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GACL,MAAM,CAAC,SADF,MACW,IADX,IACW,EAAA,KAAA,KAAA,CADX,GACW,EADX,GAEL,YAAY,CAAC,UAAU,GAAG,mBAAH,GAAyB,iBAApC,CAFP,MAE6D,IAF7D,IAE6D,EAAA,KAAA,KAAA,CAF7D,GAE6D,EAF7D,GAGL,gBAAgB,CAAC,MAAD,EAAS,UAAT,CAHlB;AAKD;;AAEK,SAAU,gBAAV,CAA2B,MAA3B,EAAiD,UAAjD,EAAuE;AAC3E,UAAQ,MAAR;AACE,SAAK,KAAL;AACA,SAAK,QAAL;AACE,aAAO,YAAP;;AAEF,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACA,SAAK,SAAL;AAAgB;AACd,aAAO,SAAP;AAAkB;;AACpB;AACE;AACA;AACA,aAAO,UAAU,KAAK,UAAf,GAA4B,YAA5B,GAA2C,SAAlD;AAbJ;AAeD;;AAEK,SAAU,qBAAV,CAAgC;AACpC,EAAA,YADoC;AAEpC,EAAA,KAFoC;AAGpC,EAAA,SAHoC;AAIpC,EAAA,MAJoC;AAKpC,EAAA;AALoC,CAAhC,EAYL;AACC,QAAM;AACJ,IAAA,2BADI;AAEJ,IAAA,2BAFI;AAGJ,IAAA,yBAHI;AAIJ,IAAA;AAJI,MAKF,YALJ;;AAMA,MAAI,qCAAyB,SAAzB,CAAJ,EAAyC;AACvC,QAAI,SAAS,KAAK,YAAlB,EAAgC;AAC9B,UAAI,MAAM,KAAK,KAAX,IAAoB,MAAM,KAAK,QAAnC,EAA6C;AAC3C,eAAO,oBAAoB,CAAC,KAAD,EAAQ,OAAR,EAAiB,2BAAjB,EAA8C,2BAA9C,CAA3B;AACD,OAFD,MAEO;AACL,eAAO,2BAAP;AACD;AACF,KAND,MAMO;AACL;AACA,aAAO,oBAAoB,CAAC,KAAD,EAAQ,QAAR,EAAkB,yBAAlB,EAA6C,yBAA7C,CAA3B;AACD;AACF;;AACD,SAAO,SAAP;AACD;;AAED,SAAS,oBAAT,CAA8B,KAA9B,EAA4C,QAA5C,EAA0E,GAA1E,EAAuF,GAAvF,EAAkG;AAChG,QAAM,UAAU,GAAG,KAAK,CAAC,gBAAN,CAAuB,QAAvB,EAAiC,MAApD;AACA,SAAO;AAAC,IAAA,MAAM,EAAE,SAAS,UAAU,KAAK,GAAG,KAAK,GAAG;AAA5C,GAAP;AACD;;AAEK,SAAU,mBAAV,CAA8B,SAA9B,EAAkD;AACtD,MAAI,oBAAS,CAAC,UAAD,EAAa,WAAb,EAA0B,KAA1B,CAAT,EAA2C,SAA3C,CAAJ,EAA2D;AACzD,WAAO,QAAP;AACD;;AACD,SAAO,SAAP;AACD;;;;;;;;;;;ACxPD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEM,SAAU,WAAV,CAAsB,KAAtB,EAAkC;AACtC,QAAM,eAAe,GAAG,wBAAY,KAAZ,IAAqB,eAAe,CAAC,KAAD,CAApC,GAA8C,kBAAkB,CAAC,KAAD,CAAxF;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,OAAhB,GAA0B,eAA1B;AACA,SAAO,eAAP;AACD;;AAED,SAAS,eAAT,CAAyB,KAAzB,EAAyC;AACvC,QAAM;AAAC,IAAA;AAAD,MAAa,KAAnB;AAEA,QAAM,eAAe,GAAyB,EAA9C;;AAEA,OAAK,MAAM,OAAX,IAAsB,CAAC,cAAD,EAAQ,GAAG,6BAAX,CAAtB,EAAyD;AACvD,UAAM,GAAG,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAZ;;AAEA,QAAI,CAAC,GAAD,IAAQ,CAAC,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAb,EAA+C;AAC7C;AACD;;AAED,QAAI,OAAO,KAAK,cAAZ,IAAqB,4BAAW,GAAX,CAArB,IAAwC,GAAG,CAAC,IAAJ,KAAa,aAAzD,EAAkE;AAChE;AACD;;AAED,IAAA,eAAe,CAAC,OAAD,CAAf,GAA2B,qBAAqB,CAAC,KAAD,EAAQ,OAAR,CAAhD;AACD;;AAED,SAAO,eAAP;AACD;;AAED,SAAS,qBAAT,CAA+B,KAA/B,EAAiD,OAAjD,EAAiF;AAC/E,QAAM,KAAK,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAd;;AACA,MAAI,KAAK,CAAC,IAAN,KAAe,OAAnB,EAA4B;AAC1B,QAAI,OAAO,KAAK,OAAhB,EAAyB;AACvB;AACA,aAAO;AAAC,QAAA,MAAM,EAAE;AAAT,OAAP;AACD,KAHD,MAGO,IAAI,OAAO,KAAK,MAAhB,EAAwB;AAC7B,aAAO;AAAC,QAAA,WAAW,EAAE;AAAd,OAAP;AACD;AACF;;AAED,MAAI,OAAO,KAAK,OAAhB,EAAyB;AACvB,WAAO,KAAK,CAAC,OAAN,CAAc,MAAd,GAAuB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAvB,GAAuC;AAAC,MAAA,MAAM,EAAE;AAAT,KAA9C;AACD;;AACD,SAAO;AAAC,KAAC,OAAD,GAAW;AAAZ,GAAP;AACD;;AAED,SAAS,UAAT,CACE,KADF,EAEE,QAFF,EAGE,MAHF,EAIE,QAJF,EAI4B;AAE1B,UAAQ,QAAR;AACE,SAAK,SAAL;AACE,aAAO,MAAM,KAAK,SAAlB;AAA6B;;AAE/B,SAAK,QAAL;AACE;AACA,aAAO,CAAC,EAAC,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAE,MAAT,CAAR;;AACF,SAAK,OAAL;AACE;AACA,UAAI,QAAQ,KAAK,OAAb,IAAwB,KAAK,MAAK,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAQ,KAAA,CAAR,GAAA,QAAQ,CAAE,KAAf,CAAjC,EAAuD;AACrD,eAAO,IAAP;AACD;;AAXL,GAF0B,CAe1B;;;AACA,SAAO,KAAK,KAAK,CAAC,MAAM,IAAI,EAAX,EAAe,QAAf,CAAjB;AACD;;AAEK,SAAU,qBAAV,CAAgC,KAAhC,EAAkD,OAAlD,EAAkF;;;AACtF,MAAI,MAAM,GAAG,KAAK,CAAC,MAAN,CAAa,OAAb,CAAb;AAEA,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,QAAV;AAAoB,IAAA;AAApB,MAA8B,KAApC;AACA,QAAM,YAAY,GAAG,MAAM,CAAC,MAA5B;AACA,QAAM,UAAU,GAAG,IAAI,0BAAJ,CAAoB,EAApB,EAAwB,qBAAqB,CAAC,KAAD,EAAQ,OAAR,CAA7C,CAAnB;AACA,uCAAuB,KAAvB,EAA8B,OAA9B,EAAuC,UAAvC;AAEA,QAAM,OAAO,GAAG,MAAM,KAAK,SAAX,GAAuB,CAAC,MAAxB,GAAiC,YAAY,CAAC,OAA9D;AACA,EAAA,UAAU,CAAC,GAAX,CAAe,SAAf,EAA0B,OAA1B,EAAmC,MAAM,KAAK,SAA9C;;AACA,MAAI,OAAJ,EAAa;AACX,WAAO,UAAP;AACD;;AAED,EAAA,MAAM,GAAG,MAAM,IAAI,EAAnB;AAEA,QAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,EAAiC,GAAjC,CAAqC,MAArC,CAAlB;AACA,QAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB;AACA,QAAM,QAAQ,GAAG,4BAAW,eAAX,IAA6B,CAAA,EAAA,GAAC,iCAAkB,eAAe,CAAC,QAAlC,CAAD,MAA4C,IAA5C,IAA4C,EAAA,KAAA,KAAA,CAA5C,GAA4C,KAAA,CAA5C,GAA4C,EAAA,CAAE,IAA3E,GAAkF,SAAnG;AAEA,QAAM,MAAM,GAAG,MAAM,CAAC,MAAP,IAAiB,MAAM,CAAC,MAAP,CAAc,MAA/B,IAAyC,OAAxD;AACA,QAAM,UAAU,GAAG,+BAAc;AAAC,IAAA,MAAD;AAAS,IAAA,OAAT;AAAkB,IAAA,QAAlB;AAA4B,IAAA;AAA5B,GAAd,CAAnB;AAEA,QAAM,SAAS,GAAG,8BAAa;AAAC,IAAA,MAAD;AAAS,IAAA,UAAT;AAAqB,IAAA,MAArB;AAA6B,IAAA;AAA7B,GAAb,CAAlB;AAEA,QAAM,UAAU,GAAqB;AACnC,IAAA,MADmC;AAEnC,IAAA,OAFmC;AAGnC,IAAA,KAHmC;AAInC,IAAA,OAJmC;AAKnC,IAAA,QALmC;AAMnC,IAAA,eANmC;AAOnC,IAAA,YAPmC;AAQnC,IAAA,MARmC;AASnC,IAAA,SATmC;AAUnC,IAAA,MAVmC;AAWnC,IAAA,UAXmC;AAYnC,IAAA;AAZmC,GAArC;;AAeA,OAAK,MAAM,QAAX,IAAuB,sCAAvB,EAAoD;AAClD,UAAM,KAAK,GAAG,QAAQ,IAAI,uBAAZ,GAA0B,wBAAY,QAAZ,EAAsB,UAAtB,CAA1B,GAA8D,MAAM,CAAC,QAAD,CAAlF;;AACA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,YAAM,QAAQ,GAAG,UAAU,CAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,EAA0B,KAAK,CAAC,QAAN,CAAe,OAAf,CAA1B,CAA3B;;AACA,UAAI,QAAQ,IAAI,MAAM,CAAC,MAAP,CAAc,QAAd,MAA4B,SAA5C,EAAuD;AACrD,QAAA,UAAU,CAAC,GAAX,CAAe,QAAf,EAAyB,KAAzB,EAAgC,QAAhC;AACD;AACF;AACF;;AAED,QAAM,cAAc,GAAA,CAAA,EAAA,GAAG,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAE,QAAX,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAA3C;AACA,QAAM,UAAU,GAAG,UAAU,CAAC,GAAX,CAAe,YAAf,CAAnB;AACA,QAAM,YAAY,GAAiB,EAAnC;AAEA,QAAM,kBAAkB,GAAuB;AAAC,IAAA,eAAD;AAAkB,IAAA,KAAlB;AAAyB,IAAA,OAAzB;AAAkC,IAAA,UAAlC;AAA8C,IAAA;AAA9C,GAA/C;;AAEA,OAAK,MAAM,IAAX,IAAmB,CAAC,QAAD,EAAW,QAAX,EAAqB,OAArB,EAA8B,SAA9B,EAAyC,UAAzC,EAAqD,SAArD,CAAnB,EAAoF;AAClF,UAAM,kBAAkB,GAAG,6BAAgB,CAAA,EAAA,GAAC,cAAc,CAAC,IAAD,CAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,EAAzC,EAA6C,KAA7C,CAA3B;AAEA,UAAM,KAAK,GACT,IAAI,IAAI,yBAAR,GACI,0BAAkB,IAAlB,EAAwB,kBAAxB,EAA4C,kBAA5C,CADJ,CACoE;AADpE,MAEI,kBAHN,CAHkF,CAMxD;;AAE1B,QAAI,KAAK,KAAK,SAAV,IAAuB,CAAC,mBAAQ,KAAR,CAA5B,EAA4C;AAC1C,MAAA,YAAY,CAAC,IAAD,CAAZ,GAAkB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,CAAA,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAU,KAAA,CAAV,GAAA,UAAU,CAAE,MAAZ,KAAsB,4BAAW,eAAX,CAAtB,GACA;AAAC,QAAA,IAAI,EAAE,GAAG,mBAAQ,eAAe,CAAC,KAAxB,CAA8B,WAAW,IAAI;AAAvD,OADA,GAEA,EAHY,CAAA,EAIZ,CAAA,UAAU,KAAA,IAAV,IAAA,UAAU,KAAA,KAAA,CAAV,GAAU,KAAA,CAAV,GAAA,UAAU,CAAE,MAAZ,IAAqB;AAAC,QAAA,WAAW,EAAE,CAAC,CAAC;AAAhB,OAArB,GAAmD,EAJvC,CAAA,EAI0C;AAC1D,QAAA,MAAM,EAAE;AADkD,OAJ1C,CAAlB;AAOD;AACF;;AAED,MAAI,CAAC,mBAAQ,YAAR,CAAL,EAA4B;AAC1B,IAAA,UAAU,CAAC,GAAX,CAAe,QAAf,EAAyB,YAAzB,EAAuC,CAAC,EAAC,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAE,QAAT,CAAxC;AACD;;AAED,SAAO,UAAP;AACD;;AAED,SAAS,kBAAT,CAA4B,KAA5B,EAAwC;AACtC,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA;AAAV,MAAqB,KAAK,CAAC,SAAjC;;AAEA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,WAAW,CAAC,KAAD,CAAX;;AAEA,SAAK,MAAM,OAAX,IAAsB,gBAAK,KAAK,CAAC,SAAN,CAAgB,OAArB,CAAtB,EAAqD;AACnD,MAAA,OAAO,CAAC,MAAR,CAAe,OAAf,IAA0B,gCAAkB,KAAK,CAAC,SAAN,CAAgB,OAAlC,EAA2C,OAA3C,CAA1B;;AAEA,UAAI,OAAO,CAAC,MAAR,CAAe,OAAf,MAA4B,QAAhC,EAA0C;AACxC;AACA;AAEA,QAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,oBAAoB,CAAC,OAAO,CAAC,OAAD,CAAR,EAAmB,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAwB,OAAxB,CAAnB,CAAvC;;AAEA,YAAI,CAAC,OAAO,CAAC,OAAD,CAAZ,EAAuB;AACrB;AACA;AACA,UAAA,OAAO,CAAC,MAAR,CAAe,OAAf,IAA0B,aAA1B;AACA,iBAAO,OAAO,CAAC,OAAD,CAAd;AACD;AACF;AACF;AACF;;AAED,OAAK,MAAM,OAAX,IAAsB,gBAAK,OAAL,CAAtB,EAAqC;AACnC,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,UAAI,CAAC,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAwB,OAAxB,CAAL,EAAuC;AACrC;AACA;AACD;;AAED,UAAI,OAAO,CAAC,MAAR,CAAe,OAAf,MAA4B,QAAhC,EAA0C;AACxC;AACA,eAAO,KAAK,CAAC,SAAN,CAAgB,OAAhB,CAAwB,OAAxB,CAAP;AACD;AACF;AACF;;AAED,SAAO,OAAP;AACD;;AAEK,SAAU,oBAAV,CAA+B,YAA/B,EAA8D,WAA9D,EAA0F;;;AAC9F,MAAI,CAAC,YAAL,EAAmB;AACjB,WAAO,WAAW,CAAC,KAAZ,EAAP;AACD;;AACD,QAAM,YAAY,GAAG,YAAY,CAAC,eAAb,CAA6B,QAA7B,CAArB;AACA,QAAM,WAAW,GAAG,WAAW,CAAC,eAAZ,CAA4B,QAA5B,CAApB;;AAEA,MAAI,YAAY,CAAC,QAAb,IAAyB,WAAW,CAAC,QAArC,IAAiD,YAAY,CAAC,KAAb,KAAuB,WAAW,CAAC,KAAxF,EAA+F;AAC7F;AACA;AACA,WAAO,SAAP;AACD;;AAED,MAAI,UAAU,GAAG,KAAjB,CAb8F,CAc9F;;AACA,OAAK,MAAM,IAAX,IAAmB,sCAAnB,EAAgD;AAC9C,UAAM,uBAAuB,GAAG,oCAC9B,YAAY,CAAC,eAAb,CAA6B,IAA7B,CAD8B,EAE9B,WAAW,CAAC,eAAZ,CAA4B,IAA5B,CAF8B,EAG9B,IAH8B,EAI9B,QAJ8B,EAM9B;AACA,KAAC,EAAD,EAAoB,EAApB,KAA8C;AAC5C,cAAQ,IAAR;AACE,aAAK,YAAL;AACE,iBAAO,eAAe,CAAC,EAAD,EAAK,EAAL,CAAtB;;AACF,aAAK,OAAL;AACE,iBAAO,iCAAoB,EAApB,EAAwB,EAAxB,CAAP;;AACF,aAAK,MAAL;AACE;AACA,UAAA,UAAU,GAAG,IAAb;AACA,iBAAO,yBAAa,QAAb,CAAP;AARJ;;AAUA,aAAO,8BAA6C,EAA7C,EAAiD,EAAjD,EAAqD,IAArD,EAA2D,QAA3D,CAAP;AACD,KAnB6B,CAAhC;AAqBA,IAAA,YAAY,CAAC,eAAb,CAA6B,IAA7B,EAAmC,uBAAnC;AACD;;AACD,MAAI,UAAJ,EAAgB;AACd,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAI,YAAY,CAAC,QAAjB,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,KAAA,CAAzB,GAAyB,EAAA,CAAE,MAA3B,MAAiC,IAAjC,IAAiC,EAAA,KAAA,KAAA,CAAjC,GAAiC,KAAA,CAAjC,GAAiC,EAAA,CAAE,QAAnC,EAA6C;AAC3C,sCAAqB,YAAY,CAAC,QAAlC,EAA4C,CAAC,QAAD,EAAW,UAAX,CAA5C;AACD;;AACD,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAI,YAAY,CAAC,QAAjB,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,KAAA,CAAzB,GAAyB,EAAA,CAAE,MAA3B,MAAiC,IAAjC,IAAiC,EAAA,KAAA,KAAA,CAAjC,GAAiC,KAAA,CAAjC,GAAiC,EAAA,CAAE,QAAnC,EAA6C;AAC3C,sCAAqB,YAAY,CAAC,QAAlC,EAA4C,CAAC,QAAD,EAAW,UAAX,CAA5C;AACD;AACF;;AAED,SAAO,YAAP;AACD;;AAED,SAAS,eAAT,CAAyB,GAAzB,EAAgD,GAAhD,EAAqE;AACnE,MAAI,GAAG,CAAC,KAAJ,KAAc,QAAlB,EAA4B;AAC1B;AACA,WAAO,GAAP;AACD;;AACD,SAAO,GAAP;AACD;;;;;;;;;;;;ACzQD;;AACA;;AACA;;AAGA;;AAEA,SAAS,eAAT,CACE,MADF,EAEE,IAFF,EAGE,MAHF,EAIE,KAJF,EAIkC;;;AAEhC,EAAA,MAAM,CAAC,MAAP,GAAa,CAAA,EAAA,GAAG,MAAM,CAAC,MAAV,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,EAAjC;AACA,EAAA,MAAM,CAAC,MAAP,CAAc,IAAd,IAAmB,CAAA,EAAA,GAAG,MAAM,CAAC,MAAP,CAAc,IAAd,CAAH,MAAsB,IAAtB,IAAsB,EAAA,KAAA,KAAA,CAAtB,GAAsB,EAAtB,GAA0B,EAA7C;AACA,EAAA,MAAM,CAAC,MAAP,CAAc,IAAd,EAAoB,MAApB,GAA0B,CAAA,EAAA,GAAG,MAAM,CAAC,MAAP,CAAc,IAAd,EAAoB,MAAvB,MAA6B,IAA7B,IAA6B,EAAA,KAAA,KAAA,CAA7B,GAA6B,EAA7B,GAAiC,EAA3D,CAJgC,CAKhC;;AACC,EAAA,MAAM,CAAC,MAAP,CAAc,IAAd,EAAoB,MAApB,CAA2B,MAA3B,IAA6C,KAA7C;AACF;;AAEK,SAAU,eAAV,CAA0B,KAA1B,EAAsC;AAC1C,QAAM,oBAAoB,GAAG,KAAK,CAAC,SAAN,CAAgB,OAA7C;AACA,QAAM,cAAc,GAAsC,EAA1D;;AAEA,OAAK,MAAM,OAAX,IAAsB,gBAAK,oBAAL,CAAtB,EAAkD;AAChD,UAAM,cAAc,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAvB;AACA,UAAM,UAAU,GAAG,qBAAU,cAAc,CAAC,GAAf,CAAmB,SAAnB,CAAV,CAAnB;;AACA,QAAI,cAAc,CAAC,UAAD,CAAlB,EAAgC;AAC9B,WAAK,MAAM,qBAAX,IAAoC,cAAc,CAAC,UAAD,CAAlD,EAAgE;AAC9D,cAAM,MAAM,GAAG,iCAAqB,qBAArB,EAA4C,oBAAoB,CAAC,OAAD,CAAhE,CAAf;;AACA,YAAI,CAAC,MAAL,EAAa;AACX;AACA,UAAA,cAAc,CAAC,UAAD,CAAd,CAA2B,IAA3B,CAAgC,oBAAoB,CAAC,OAAD,CAApD;AACD;AACF;AACF,KARD,MAQO;AACL,MAAA,cAAc,CAAC,UAAD,CAAd,GAA6B,CAAC,oBAAoB,CAAC,OAAD,CAApB,CAA8B,KAA9B,EAAD,CAA7B;AACD;AACF;;AAED,QAAM,OAAO,GAAG,gBAAK,cAAL,EACb,IADa,GAEb,GAFa,CAET,CAAC,IAAI,cAAc,CAAC,CAAD,EAAI,KAAK,CAAC,MAAV,CAFV,EAGb,MAHa,CAGN,CAAC,IAAI,CAAC,KAAK,SAHL,CAAhB;AAKA,SAAO,OAAP;AACD;;AAEK,SAAU,cAAV,CAAyB,UAAzB,EAAsD,MAAtD,EAAoE;;;AACxE,QAAM,EAAA,GAA8C,UAAU,CAAC,OAAX,EAApD;AAAA,QAAM;AAAC,IAAA,OAAD;AAAU,IAAA,SAAV;AAAqB,IAAA;AAArB,MAA+B,EAArC;AAAA,QAA0C,MAAM,GAAA,mBAAA,EAAA,EAA1C,CAAA,SAAA,EAAA,WAAA,EAAA,YAAA,CAA0C,CAAhD;;AAEA,MAAI,OAAJ,EAAa;AACX,WAAO,SAAP;AACD;;AAED,MAAI,MAAM,CAAC,IAAP,KAAgB,KAAhB,IAAyB,MAAM,CAAC,IAAP,IAAe,SAA5C,EAAuD;AACrD,IAAA,MAAM,CAAC,IAAP,GAAc,KAAd;AACD;;AAED,MAAA,CAAA,EAAA,GAAI,MAAM,CAAC,MAAX,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,KAAA,CAAjB,GAAiB,EAAA,CAAE,OAAnB,EAA4B;AAC1B,UAAM,GAAG,GAAG,MAAM,CAAC,MAAP,CAAc,OAAd,CAAsB,MAAlC;;AACA,QAAI,GAAG,CAAC,IAAJ,IAAY,GAAG,CAAC,IAAJ,CAAS,OAAT,MAAsB,aAAlC,IAAmD,CAAC,GAAG,CAAC,MAAxD,IAAkE,CAAC,MAAM,CAAC,MAA9E,EAAsF;AACpF;AACA,MAAA,GAAG,CAAC,MAAJ,GAAa;AAAC,QAAA,KAAK,EAAE;AAAR,OAAb;AACD,KALyB,CAO1B;;;AACA,SAAK,MAAM,QAAX,IAAuB,6BAAvB,EAA8C;AAC5C,UAAI,MAAM,CAAC,QAAD,CAAV,EAAsB;AACpB,eAAO,GAAG,CAAC,QAAD,CAAV;AACD;AACF;AACF;;AAED,MAAI,CAAC,MAAM,CAAC,KAAZ,EAAmB;AACjB;AACA,WAAO,MAAM,CAAC,KAAd;AACD;;AAED,MAAI,SAAS,KAAK,SAAlB,EAA6B;AAC3B,QAAI,IAAI,GAAG,SAAX;;AACA,QAAI,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,MAAP,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,KAAA,CAAb,GAAa,EAAA,CAAE,MAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,MAAvB,KAAiC,uBAAY,MAAM,CAAC,MAAP,CAAc,MAAd,CAAqB,MAArB,CAA4B,IAAxC,CAArC,EAAoF;AAClF,MAAA,IAAI,GAAG,sBAAW,SAAX,EAAsB,aAAtB,EAAqC,MAAM,CAAC,MAAP,CAAc,MAAd,CAAqB,MAArB,CAA4B,IAA5B,CAAiC,MAAtE,CAAP;AACD;;AACD,IAAA,eAAe,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,EAA2B;AAAC,MAAA,MAAM,EAAE;AAAT,KAA3B,CAAf;AACD;;AAED,OAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;AACzB,UAAM,SAAS,GAAG,MAAM,CAAC,IAAD,CAAxB;;AACA,QAAI,uBAAY,SAAZ,CAAJ,EAA4B;AAC1B,YAAM,SAAS,GAAG,iCAAyB,IAAzB,CAAlB;;AACA,UAAI,SAAJ,EAAe;AACb,cAAM;AAAC,UAAA,MAAD;AAAS,UAAA;AAAT,YAAiB,SAAvB;AACA,QAAA,eAAe,CAAC,MAAD,EAAS,IAAT,EAAe,MAAf,EAAuB,SAAvB,CAAf;AACA,eAAO,MAAM,CAAC,IAAD,CAAb;AACD;AACF;AACF;;AAED,SAAO,MAAP;AACD;;;;;;;;;;;ACrGD;;AACA;;AACA;;AAEM,SAAU,mBAAV,CAA8B,KAA9B,EAA0C;AAC9C,MAAI,yBAAa,KAAb,KAAuB,0BAAc,KAAd,CAA3B,EAAiD;AAC/C,WAAO,sCAAsC,CAAC,KAAD,CAA7C;AACD,GAFD,MAEO;AACL,WAAO,0BAA0B,CAAC,KAAD,CAAjC;AACD;AACF;;AAEK,SAAU,sCAAV,CAAiD,KAAjD,EAA6D;AACjE,SAAO,KAAK,CAAC,QAAN,CAAe,MAAf,CAAsB,CAAC,WAAD,EAAc,KAAd,KAAuB;AAClD,WAAO,WAAW,CAAC,MAAZ,CAAmB,KAAK,CAAC,mBAAN,EAAnB,CAAP;AACD,GAFM,EAEJ,0BAA0B,CAAC,KAAD,CAFtB,CAAP;AAGD;;AAEK,SAAU,0BAAV,CAAqC,KAArC,EAAiD;AACrD,QAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAlC;;AACA,MAAI,CAAC,SAAD,IAAc,SAAS,CAAC,MAA5B,EAAoC;AAClC,WAAO,EAAP;AACD;;AAED,QAAM,UAAU,GAAG,SAAS,CAAC,OAAV,EAAnB;AACA,QAAM;AAAC,IAAA;AAAD,MAAS,UAAf,CAPqD,CAO1B;;AAE3B,MAAI,CAAC,SAAS,CAAC,IAAf,EAAqB;AACnB;AACA,WAAO;AAEH,MAAA;OAEG;AAAC,MAAA,SAAS,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAAZ,QAEA,WANA,CAAP;AASD,GAXD,MAWO;AACL;AACA,UAAM,IAAI,GAAc;AACtB,MAAA,MAAM,EAAE,IAAI,SAAS,CAAC,IAAV,CAAe,GAAf,CAAmB,GAAG,IAAI,GAAG,CAAC,MAA9B,EAAsC,IAAtC,CAA2C,IAA3C,CAAgD;AADtC,KAAxB;AAIA,UAAM,IAAI,GAAa,SAAS,CAAC,IAAV,CAAe,MAAf,CAAsB,CAAC,OAAD,EAAU,IAAV,KAAkB;AAC7D,YAAM,MAAM,GAAW,uBAAY,IAAZ,IAAoB,IAAI,CAAC,MAAzB,GAAkC,SAAS,KAAK,CAAC,gBAAN,CAAuB,IAAvB,CAA4B,IAA9F;;AACA,UAAI,CAAC,oBAAS,OAAT,EAAkB,MAAlB,CAAL,EAAgC;AAC9B;AACA,QAAA,OAAO,CAAC,IAAR,CAAa,MAAb;AACD;;AACD,aAAO,OAAP;AACD,KAPsB,EAOpB,EAPoB,CAAvB;;AASA,QAAI,IAAI,CAAC,MAAL,IAAe,CAAnB,EAAsB;AACpB,YAAM,IAAI,KAAJ,CAAU,+CAAV,CAAN;AACD;;AAED,WAAO;AAEH,MAAA;AACA,MAAA;AACA,MAAA,GAAG,EAAE;AACH,QAAA,MAAM,EAAE,IAAI,CAAC,MAAL,GAAc,CAAd,GAAkB,IAAI,IAAI,CAAC,IAAL,CAAU,IAAV,CAAe,GAArC,GAA2C,IAAI,CAAC,CAAD;AADpD;OAGF,WAPA,CAAP;AAUD;AACF;;;;;;;;AC1CM,MAAM,qBAAqB,GAAyB,CACzD,MADyD,EAEzD,WAFyD,EAGzD,YAHyD,EAIzD,QAJyD,EAKzD,QALyD,EAMzD,WANyD,EAOzD,UAPyD,EAQzD,UARyD,EASzD,aATyD,EAUzD,UAVyD,EAWzD,UAXyD,EAYzD,OAZyD,EAazD,UAbyD,EAczD,QAdyD,EAezD,OAfyD,EAgBzD,SAhByD,EAiBzD,MAjByD,CAApD;;;;;;;;;;ACxBP;;AAEM,MAAO,mBAAP,SAAmC,YAAnC,CAAsD;AAG1D,EAAA,WAAA,CACE,IADF,EAES,mBAFT,EAGS,IAHT,EAIS,IAJT,EAIqC;AAEnC,UAAK,MAAA,CAAA,MAAA,CAAA,EAAA,EACC,mBADD,CAAL,EAC4B;AAC1B;AAAC,MAAA;AAAD,KAFF,CAES;AAFT;AAJO,SAAA,mBAAA,GAAA,mBAAA;AACA,SAAA,IAAA,GAAA,IAAA;AACA,SAAA,IAAA,GAAA,IAAA;AANF,SAAA,MAAA,GAAS,KAAT;AAYN;AAED;;;;;AAGA,MAAW,KAAX,GAAgB;AACd,WAAO,CAAC,CAAC,KAAK,IAAd;AACD;;AApByD;;;;;;;;;;;ACJ5D;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEM,SAAU,eAAV,CAA0B,KAA1B,EAAsC;AAC1C,EAAA,KAAK,CAAC,SAAN,CAAgB,UAAhB,GAA6B,wBAAY,KAAZ,IAAqB,mBAAmB,CAAC,KAAD,CAAxC,GAAkD,uBAAuB,CAAC,KAAD,CAAtG;AACD;;AAED,SAAS,mBAAT,CAA6B,KAA7B,EAA6C;;;AAC3C,MAAI,KAAK,CAAC,aAAV,EAAyB;AACvB,UAAM,IAAI,GAAG,KAAK,CAAC,mBAAnB;AACA,UAAM,GAAG,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,KAAL,IAAc,IAAd,IAAsB,IAAI,CAAC,SAAL,IAAkB,IAA7C,CAAN,CAAZ;AACA,UAAM,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAN,CAAuB,OAAvB,CAAD,EAAkC,KAAK,CAAC,gBAAN,CAAuB,QAAvB,CAAlC,CAAH,GAAyE,SAAzF;AACA,UAAM,IAAI,GAAG,GAAG,GAAG,aAAa,CAAC,KAAD,CAAhB,GAA0B,SAA1C;AAEA,WAAO,IAAI,8BAAJ,CACL,KAAK,CAAC,cAAN,CAAqB,IAArB,CADK,EACqB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAErB,CAAA,EAAA,GAAC,KAAK,CAAC,MAAN,CAAa,UAAd,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA4B,EAFP,CAAA,EAGpB,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAA,IAAA,GAAQ,EAHY,CADrB,EAML,IANK,EAOL,IAPK,CAAP;AASD;;AAED,SAAO,SAAP;AACD;;AAED,SAAS,aAAT,CAAuB,KAAvB,EAAuC;AACrC,QAAM,IAAI,GAA2B,EAArC;AAEA,QAAM;AAAC,IAAA;AAAD,MAAa,KAAnB;;AAEA,OAAK,MAAM,aAAX,IAA4B,CAC1B,CAAC,kBAAD,EAAY,iBAAZ,CAD0B,EAE1B,CAAC,mBAAD,EAAa,kBAAb,CAF0B,CAA5B,EAGG;AACD,QAAI,oCAAmB,QAAQ,CAAC,aAAa,CAAC,CAAD,CAAd,CAA3B,KAAkD,oCAAmB,QAAQ,CAAC,aAAa,CAAC,CAAD,CAAd,CAA3B,CAAtD,EAAsG;AACpG,MAAA,IAAI,CAAC,IAAL,CAAU;AACR,QAAA,MAAM,EAAE,KAAK,CAAC,OAAN,CAAc,WAAW,IAAI,CAAC,MAAM,EAApC;AADA,OAAV;AAGD;AACF;;AAED,MAAI,KAAK,CAAC,eAAN,CAAsB,cAAtB,KAAgC,KAAK,CAAC,aAAN,CAAoB,cAApB,EAA2B,IAA3B,KAAoC,aAAxE,EAAiF;AAC/E,IAAA,IAAI,CAAC,IAAL,CAAU;AACR,MAAA,MAAM,EAAE,KAAK,CAAC,OAAN,CAAc,WAAW,IAAI,CAAC,MAAM,EAApC;AADA,KAAV;AAGD;;AAED,MAAI,IAAI,CAAC,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACA,IAAA,IAAI,CAAC,IAAL,CAAU,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAV;AACD;;AAED,SAAO,IAAP;AACD;;AAED,SAAS,iBAAT,CAA2B,KAA3B,EAAuD,MAAvD,EAAkF;AAChF,QAAM,mBAAmB,GAAG,iBAAM,iCAAN,EAA6B,IAAI,IAAG;AAC9D;AACA,QAAI,CAAC,8BAAe,KAAK,CAAC,QAArB,EAA+B,IAA/B,CAAD,IAAyC,CAAC,8BAAe,MAAM,CAAC,QAAtB,EAAgC,IAAhC,CAA9C,EAAqF;AACnF,aAAO,IAAP;AACD,KAJ6D,CAK9D;;;AACA,QACE,8BAAe,KAAK,CAAC,QAArB,EAA+B,IAA/B,KACA,8BAAe,MAAM,CAAC,QAAtB,EAAgC,IAAhC,CADA,IAEA;AACA,yBAAU,KAAK,CAAC,GAAN,CAAU,IAAV,CAAV,MAA+B,qBAAU,MAAM,CAAC,GAAP,CAAW,IAAX,CAAV,CAJjC,EAKE;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD,GAf2B,CAA5B;AAiBA,QAAM,IAAI,GAAG,qBAAU,KAAK,CAAC,IAAhB,MAA0B,qBAAU,MAAM,CAAC,IAAjB,CAAvC;;AACA,MAAI,IAAJ,EAAU;AACR,QAAI,mBAAJ,EAAyB;AACvB,aAAO,KAAP;AACD,KAFD,MAEO,IAAI,qBAAU,KAAK,CAAC,QAAhB,MAA8B,qBAAU,EAAV,CAAlC,EAAiD;AACtD,aAAO,MAAP;AACD,KAFM,MAEA,IAAI,qBAAU,MAAM,CAAC,QAAjB,MAA+B,qBAAU,EAAV,CAAnC,EAAkD;AACvD,aAAO,KAAP;AACD;AACF,GA3B+E,CA6BhF;;;AACA,SAAO,IAAP;AACD;;AAED,SAAS,uBAAT,CAAiC,KAAjC,EAA6C;AAC3C,MAAI,KAAK,CAAC,QAAN,CAAe,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,WAAO,SAAP;AACD;;AAED,MAAI,iBAAJ,CAL2C,CAO3C;;AACA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,eAAe,CAAC,KAAD,CAAf;AACD,GAV0C,CAY3C;;;AACA,QAAM,QAAQ,GAAG,iBAAM,KAAK,CAAC,QAAZ,EAAsB,KAAK,IAAG;AAC7C,UAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAnC;;AACA,QAAI,CAAC,UAAL,EAAiB;AACf;AACA,aAAO,IAAP;AACD,KAHD,MAGO,IAAI,CAAC,iBAAL,EAAwB;AAC7B;AACA,MAAA,iBAAiB,GAAG,UAApB;AACA,aAAO,IAAP;AACD,KAJM,MAIA;AACL,YAAM,KAAK,GAAG,iBAAiB,CAAC,iBAAD,EAAoB,UAApB,CAA/B;;AACA,UAAI,KAAJ,EAAW;AACT,QAAA,iBAAiB,GAAG,KAApB;AACD;;AACD,aAAO,CAAC,CAAC,KAAT;AACD;AACF,GAhBgB,CAAjB,CAb2C,CA+B3C;;AACA,MAAI,iBAAiB,IAAI,QAAzB,EAAmC;AACjC;AACA,UAAM,IAAI,GAAG,KAAK,CAAC,cAAN,CAAqB,IAArB,CAAb;AACA,UAAM,eAAe,GAAG,IAAI,8BAAJ,CACtB,IADsB,EAEtB,iBAAiB,CAAC,mBAFI,EAGtB,iBAAiB,CAAC,IAHI,EAItB,qBAAU,iBAAiB,CAAC,IAA5B,CAJsB,CAAxB,CAHiC,CAUjC;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,YAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAnC;;AACA,UAAI,UAAJ,EAAgB;AACd,YAAI,UAAU,CAAC,KAAf,EAAsB;AACpB,UAAA,eAAe,CAAC,IAAhB,CAAqB,IAArB,CAA0B,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,IAAxD;AACD;;AACD,QAAA,KAAK,CAAC,gBAAN,CAAuB,UAAU,CAAC,GAAX,CAAe,MAAf,CAAvB,EAA+C,IAA/C;AACA,QAAA,UAAU,CAAC,MAAX,GAAoB,IAApB;AACD;AACF;;AAED,WAAO,eAAP;AACD;;AAED,SAAO,SAAP;AACD;;;;;;;;;;;;AC7JD;;AACA;;AAEA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAAS,YAAT,CAAsB,KAAtB,EAA6C,QAA7C,EAA8E,OAA9E,EAAgG,MAAhG,EAA8G;;;AAC5G,MAAI,kCAAiB,QAAjB,EAA2B,OAA3B,CAAJ,EAAyC;AACvC;AAEA,UAAM,KAAK,GAAG,wBAAY,KAAZ,IAAoB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,KAAK,CAAC,IAAN,CAAW,OAAX,CAAD,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,KAAK,CAAC,MAAN,CAAa,OAAb,CAAxB,MAA6C,IAA7C,IAA6C,EAAA,KAAA,KAAA,CAA7C,GAA6C,EAA7C,GAAiD,EAArE,GAA0E,EAAxF;AAEA,UAAM,UAAU,GAAG,yBAAQ,QAAR,EAAkB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAlB,CAAnB;AACA,UAAM,QAAQ,GAAG,yBAAQ,QAAR,EAAkB;AAAC,MAAA,IAAI,EAAE,OAAP;AAAgB,MAAA,SAAS,EAAE;AAA3B,KAAlB,CAAjB;AAEA,WAAO;AACL,MAAA,SAAS,EAAE,yBAAQ,QAAR,EAAkB;AAAC,QAAA,SAAS,EAAE,OAAZ;AAAqB,QAAA,KAAK,EAAE;AAA5B,OAAlB,CADN;AAEL,MAAA,OAAO,EAAE,iCAAoB,UAApB,EAAgC,QAAhC,EAA0C,KAAK,CAAC,MAAhD,EAAwD,KAAK,CAAC,UAA9D,EAA0E,MAA1E;AAFJ,KAAP;AAID;;AACD,SAAO,EAAP;AACD;;AAED,SAAS,MAAT,CAAgB,GAAhB,EAAgC,KAAhC,EAA6C;AAC3C,SAAO,GAAG,sBAAY,GAAZ,CAAgB,IAAI,KAAK,EAAnC;AACD;;AAED,SAAS,mBAAT,CAA6B,KAA7B,EAA2C,GAA3C,EAAsD;AACpD,SAAO;AACL,IAAA,MAAM,EAAE,KAAK,CAAC,OAAN,CAAc,GAAG,GAAG,OAApB,CADH;AAEL,IAAA,YAAY,EAAE,KAAK,CAAC,OAAN,CAAc,GAAG,GAAG,SAApB;AAFT,GAAP;AAID;;AAEK,SAAU,gBAAV,CAA2B,KAA3B,EAAyC,KAAzC,EAAwD,GAAxD,EAAgF;;;AACpF,QAAM,aAAa,GAAA,CAAA,EAAA,GAAG,8BAAa,GAAb,EAAkB,SAAlB,CAAH,MAA+B,IAA/B,IAA+B,EAAA,KAAA,KAAA,CAA/B,GAA+B,EAA/B,GAAmC,EAAtD;AACA,QAAM,GAAG,GAAG,MAAM,CAAC,aAAD,EAAgB,KAAhB,CAAlB;AACA,SAAO,KAAK,CAAC,OAAN,CAAc,GAAG,GAAG,OAApB,CAAP;AACD;;AAED,SAAS,cAAT,CAAwB,CAAxB,EAA+D;AAC7D,SAAO,QAAQ,CAAf;AACD;;AAED,SAAS,kBAAT,CAA4B,CAA5B,EAAqE,GAArE,EAA+F,KAA/F,EAA2G;AACzG,MAAI,EAAJ;AACA,MAAI,IAAJ;;AAEA,MAAI,cAAc,CAAC,CAAD,CAAlB,EAAuB;AACrB,IAAA,EAAE,GAAG,wBAAS,CAAC,CAAC,EAAX,IAAiB,CAAC,CAAC,CAAC,EAAH,EAAO,GAAG,CAAC,CAAC,EAAE,MAAd,CAAjB,GAAyC,CAAC,CAAC,CAAC,EAAF,CAAK,CAAL,CAAD,EAAU,CAAC,CAAC,EAAF,CAAK,CAAL,CAAV,CAA9C;AACD,GAFD,MAEO;AACL,IAAA,EAAE,GAAG,CAAC,yBAAQ,CAAR,EAAW;AAAC,MAAA,KAAK,EAAE;AAAR,KAAX,CAAD,EAA4B,yBAAQ,CAAR,EAAW;AAAC,MAAA,SAAS,EAAE,KAAZ;AAAmB,MAAA,KAAK,EAAE;AAA1B,KAAX,CAA5B,CAAL;AACD;;AAED,QAAM,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,8BAAa,GAAb,EAAkB,SAAlB,CAAP,CAAnB;AACA,QAAM,GAAG,GAAG,MAAM,CAAC,aAAD,EAAgB,CAAC,CAAC,KAAlB,CAAlB;AACA,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAyB,mBAAmB,CAAC,KAAD,EAAQ,GAAR,CAAlD;;AAEA,MAAI,4BAAkB,aAAa,CAAC,MAAhC,CAAJ,EAA6C;AAC3C,UAAM,GAAG,GAAG,aAAa,CAAC,MAA1B;AACA,UAAM,OAAO,GAAG,GAAG,CAAC,SAApB;AACA,IAAA,IAAI,GAAG,oCAAwB,KAAK,CAAC,qBAAN,CAA4B,mBAAQ,OAAR,CAA5B,EAA8C,OAA9C,CAAxB,EAAgF,GAAhF,CAAP;AACA,WAAO,aAAa,CAAC,MAArB,CAJ2C,CAId;AAC9B;;AAED,QAAM,YAAY,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AAChB,IAAA,GAAG,EAAE,aADW;AAEhB,IAAA,KAAK,EAAE,CAAC,CAAC,KAFO;AAGhB,IAAA,EAAE,EAAE,CAAC,EAAD;AAHY,GAAA,EAIZ,MAAM,GAAG;AAAC,IAAA;AAAD,GAAH,GAAc,EAJR,CAAA,EAKZ,YAAY,GAAG;AAAC,IAAA;AAAD,GAAH,GAAoB,EALpB,CAAA,EAMZ,IAAI,GAAG;AAAC,IAAA;AAAD,GAAH,GAAY,EANJ,CAAlB;AASA,SAAO;AAAC,IAAA,GAAD;AAAM,IAAA;AAAN,GAAP;AACD;;AAkBK,MAAO,OAAP,SAAuB,sBAAvB,CAAmC;AAKvC,EAAA,WAAA,CAAY,MAAZ,EAA0C,IAA1C,EAAkE;AAChE,UAAM,MAAN;AADwC,SAAA,IAAA,GAAA,IAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,OAAJ,CAAY,IAAZ,EAAkB,qBAAU,KAAK,IAAf,CAAlB,CAAP;AACD;;AAMM,SAAO,gBAAP,CAAwB,MAAxB,EAA8C,KAA9C,EAAmE;AACxE,UAAM,IAAI,GAAG,KAAK,CAAC,cAAN,CAAqB,CAAC,iBAAD,EAAwC,QAAxC,EAAkD,OAAlD,KAA6D;AAC7F,UAAI,iCAAgB,QAAhB,KAA6B,oBAAU,QAAQ,CAAC,GAAnB,CAAjC,EAA0D;AACxD,cAAM;AAAC,UAAA,GAAD;AAAM,UAAA;AAAN,YAAsB,kBAAkB,CAAC,QAAD,EAAW,QAAQ,CAAC,GAApB,EAAyB,KAAzB,CAA9C;AACA,QAAA,iBAAiB,CAAC,GAAD,CAAjB,GAAsB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACjB,YADiB,CAAA,EAEjB,iBAAiB,CAAC,GAAD,CAFA,CAAA,EAGjB,YAAY,CAAC,KAAD,EAAQ,QAAR,EAAkB,OAAlB,EAA2B,KAAK,CAAC,MAAjC,CAHK,CAAtB;AAKD;;AACD,aAAO,iBAAP;AACD,KAVY,EAUV,EAVU,CAAb;;AAYA,QAAI,mBAAQ,IAAR,CAAJ,EAAmB;AACjB,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,OAAJ,CAAY,MAAZ,EAAoB,IAApB,CAAP;AACD;AAED;;;;;;AAIO,SAAO,iBAAP,CAAyB,MAAzB,EAA+C,CAA/C,EAAgE,KAAhE,EAA4E;AACjF,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA;AAAN,QAAsB,kBAAkB,CAAC,CAAD,EAAI,CAAC,CAAC,GAAN,EAAW,KAAX,CAA9C;AACA,WAAO,IAAI,OAAJ,CAAY,MAAZ,EAAoB;AACzB,OAAC,GAAD,GAAO;AADkB,KAApB,CAAP;AAGD;AAED;;;;;;AAIO,EAAA,KAAK,CAAC,KAAD,EAAiB,YAAjB,EAA+D;AACzE,SAAK,MAAM,GAAX,IAAkB,gBAAK,KAAK,CAAC,IAAX,CAAlB,EAAoC;AAClC,UAAI,GAAG,IAAI,KAAK,IAAhB,EAAsB;AACpB,QAAA,YAAY,CAAC,KAAK,CAAC,IAAN,CAAW,GAAX,EAAgB,MAAjB,EAAyB,KAAK,IAAL,CAAU,GAAV,EAAe,MAAxC,CAAZ,CADoB,CAEpB;;AACA,aAAK,IAAL,CAAU,GAAV,EAAe,EAAf,GAAoB,kBAAO,CAAC,GAAG,KAAK,IAAL,CAAU,GAAV,EAAe,EAAnB,EAAuB,GAAG,KAAK,CAAC,IAAN,CAAW,GAAX,EAAgB,EAA1C,CAAP,EAAsD,UAAtD,CAApB;AACD,OAJD,MAIO;AACL,aAAK,IAAL,CAAU,GAAV,IAAiB,KAAK,CAAC,IAAN,CAAW,GAAX,CAAjB;AACD;AACF;;AAED,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,MAAA,KAAK,CAAC,WAAN,CAAkB,KAAlB;AACA,MAAA,KAAK,CAAC,MAAN,GAAe,IAAf;AACD;;AACD,IAAA,KAAK,CAAC,MAAN;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CACL,gBAAK,KAAK,IAAV,EACG,GADH,CACO,CAAC,IAAI,CAAC,CAAC,EADd,EAEG,IAFH,CAEQ,CAFR,CADK,CAAP;AAKD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,IAAV,EAAgB,GAAhB,CAAoB,CAAC,IAAI,CAAC,CAAC,KAA3B,CAAR,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,OAAO,gBAAK,KAAK,IAAV,CAAe,EAA7B;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO,gBAAK,KAAK,IAAV,EAAgB,OAAhB,CAAwB,GAAG,IAAG;AACnC,YAAM,SAAS,GAAkB,EAAjC;AAEA,YAAM,CAAC,KAAD,EAAQ,GAAG,WAAX,IAA0B,GAAG,CAAC,EAApC;AACA,YAAM,EAAA,GAAsB,GAAG,CAAC,GAAhC;AAAA,YAAM;AAAC,QAAA;AAAD,UAAO,EAAb;AAAA,YAAkB,MAAM,GAAA,mBAAA,EAAA,EAAlB,CAAA,QAAA,CAAkB,CAAxB;AACA,YAAM,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACZ,QAAA,IAAI,EAAE,KADM;AAEZ,QAAA,KAAK,EAAE,8BAAmB,GAAG,CAAC,KAAvB,CAFK;AAGZ,QAAA,EAAE,EAAE,KAHQ;AAIZ,QAAA,MAAM,EAAE,GAAG,CAAC;AAJA,OAAA,EAKR,CAAC,4BAAkB,MAAlB,CAAD,GAA6B;AAAC,QAAA;AAAD,OAA7B,GAAwC;AAAC,QAAA,MAAM,EAAE;AAAT,OALhC,CAAA,EAMR,GAAG,CAAC,IAAJ,GAAW;AAAC,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE,QAAQ,GAAG,CAAC,IAAI;AAAzB;AAAP,OAAX,GAAmD,EAN3C,CAAA,EAOT,MAPS,CAAd;;AAUA,UAAI,CAAC,MAAD,IAAW,GAAG,CAAC,YAAnB,EAAiC;AAC/B,QAAA,SAAS,CAAC,IAAV,CAAe;AACb,UAAA,IAAI,EAAE,QADO;AAEb,UAAA,KAAK,EAAE,8BAAmB,GAAG,CAAC,KAAvB,CAFM;AAGb,UAAA,MAAM,EAAE,GAAG,CAAC;AAHC,SAAf;AAKA,QAAA,QAAQ,CAAC,MAAT,GAAkB;AAAC,UAAA,MAAM,EAAE,GAAG,CAAC;AAAb,SAAlB;AACD;;AAED,MAAA,SAAS,CAAC,IAAV,CAAe,QAAf;;AAEA,WAAK,MAAM,EAAX,IAAiB,WAAjB,EAA8B;AAC5B,aAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,CAApB,EAAuB,CAAC,EAAxB,EAA4B;AAC1B,UAAA,SAAS,CAAC,IAAV,CAAe;AACb,YAAA,IAAI,EAAE,SADO;AAEb,YAAA,IAAI,EAAE,yBAAQ;AAAC,cAAA,KAAK,EAAE,KAAK,CAAC,CAAD;AAAb,aAAR,EAA2B;AAAC,cAAA,IAAI,EAAE;AAAP,aAA3B,CAFO;AAGb,YAAA,EAAE,EAAE,EAAE,CAAC,CAAD;AAHO,WAAf;AAKD;AACF;;AAED,UAAI,GAAG,CAAC,OAAR,EAAiB;AACf,QAAA,SAAS,CAAC,IAAV,CAAe;AACb,UAAA,IAAI,EAAE,SADO;AAEb,UAAA,IAAI,EAAE,GAAG,CAAC,OAFG;AAGb,UAAA,EAAE,EAAE,GAAG,CAAC;AAHK,SAAf;AAKD;;AACD,aAAO,SAAP;AACD,KA5CM,CAAP;AA6CD;;AA5HsC;;;;;;;;;;;ACpGzC;;AAUA;;AAEA;;AAEM,MAAO,UAAP,SAA0B,sBAA1B,CAAsC;AAO1C,EAAA,WAAA,CAAY,IAAZ,EAAsB;AACpB,UAAM,IAAN,EADoB,CACP;;AAEb,IAAA,IAAI,GAAG,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAA,IAAA,GAAQ;AAAC,MAAA,IAAI,EAAE;AAAP,KAAf;AACA,QAAI,MAAJ;;AAEA,QAAI,CAAC,uBAAY,IAAZ,CAAL,EAAwB;AACtB,MAAA,MAAM,GAAG,IAAI,CAAC,MAAL,GAAa,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,gBAAK,IAAI,CAAC,MAAV,EAAkB,CAAC,OAAD,CAAlB,CAAL,CAAb,GAAmD,EAA5D;AACD;;AAED,QAAI,wBAAa,IAAb,CAAJ,EAAwB;AACtB,WAAK,KAAL,GAAa;AAAC,QAAA,MAAM,EAAE,IAAI,CAAC;AAAd,OAAb;AACD,KAFD,MAEO,IAAI,qBAAU,IAAV,CAAJ,EAAqB;AAC1B,WAAK,KAAL,GAAa;AAAC,QAAA,GAAG,EAAE,IAAI,CAAC;AAAX,OAAb;;AAEA,UAAI,CAAC,MAAM,CAAC,IAAZ,EAAkB;AAChB;AACA;AACA,YAAI,gBAAgB,GAAG,kBAAkB,IAAlB,CAAuB,IAAI,CAAC,GAA5B,EAAiC,CAAjC,CAAvB;;AACA,YAAI,CAAC,oBAAS,CAAC,MAAD,EAAS,KAAT,EAAgB,KAAhB,EAAuB,KAAvB,EAA8B,UAA9B,CAAT,EAAoD,gBAApD,CAAL,EAA4E;AAC1E,UAAA,gBAAgB,GAAG,MAAnB;AACD,SANe,CAQhB;;;AACA,QAAA,MAAM,CAAC,IAAP,GAAc,gBAAd;AACD;AACF,KAdM,MAcA,IAAI,6BAAkB,IAAlB,CAAJ,EAA6B;AAClC;AACA,WAAK,KAAL,GAAa;AAAC,QAAA,MAAM,EAAE,CAAC;AAAC,UAAA,IAAI,EAAE;AAAP,SAAD;AAAT,OAAb;AACD,KAHM,MAGA,IAAI,uBAAY,IAAZ,KAAqB,uBAAY,IAAZ,CAAzB,EAA4C;AACjD,WAAK,KAAL,GAAa,EAAb;AACD,KA/BmB,CAiCpB;;;AACA,SAAK,UAAL,GAAkB,uBAAY,IAAZ,CAAlB,CAlCoB,CAoCpB;;AACA,QAAI,IAAI,CAAC,IAAT,EAAe;AACb,WAAK,KAAL,GAAa,IAAI,CAAC,IAAlB;AACD;;AAED,QAAI,MAAM,IAAI,CAAC,mBAAQ,MAAR,CAAf,EAAgC;AAC9B,WAAK,KAAL,CAAW,MAAX,GAAoB,MAApB;AACD;AACF;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,SAAP,CADmB,CACD;AACnB;;AAED,MAAI,IAAJ,GAAQ;AACN,WAAO,KAAK,KAAZ;AACD;;AAEM,EAAA,OAAO,GAAA;AACZ,WAAO,CAAC,CAAC,KAAK,KAAd;AACD;;AAED,MAAI,WAAJ,GAAe;AACb,WAAO,KAAK,UAAZ;AACD;;AACD,MAAI,QAAJ,GAAY;AACV,WAAO,KAAK,KAAZ;AACD;;AAED,MAAI,QAAJ,CAAa,IAAb,EAAyB;AACvB,SAAK,KAAL,GAAa,IAAb;AACD;;AAED,MAAI,MAAJ,CAAW,MAAX,EAA+B;AAC7B,UAAM,IAAI,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAEM,EAAA,MAAM,GAAA;AACX,UAAM,IAAI,KAAJ,CAAU,+CAAV,CAAN;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,UAAM,IAAI,KAAJ,CAAU,qBAAV,CAAN;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE,KAAK;AADb,KAAA,EAEK,KAAK,KAFV,CAAA,EAEe;AACb,MAAA,SAAS,EAAE;AADE,KAFf,CAAA;AAKD;;AAlGyC;;;;;;;;;;;;;ACd5C;;AACA;;AACA;;AAEA;;;AAGM,SAAU,KAAV,CAAgB,IAAhB,EAAkC;AACtC,EAAA,OAAO,CAAC,GAAR,CACE,GAAI,IAAI,CAAC,WAAL,CAAyB,IAAI,GAAG,IAAI,CAAC,SAAL,GAAiB,IAAI,IAAI,CAAC,SAAS,GAAnC,GAAyC,EAAE,OAAO,IAAI,CAAC,QAAL,CAAc,GAAd,CAAkB,CAAC,IAAG;AAC1G,WAAO,GAAI,CAAC,CAAC,WAAF,CAAsB,IAAI,GAAG,CAAC,CAAC,SAAF,GAAc,KAAK,CAAC,CAAC,SAAS,GAA9B,GAAoC,EAAE,EAA9E;AACD,GAFqF,CAEpF,EAHJ;AAKA,EAAA,OAAO,CAAC,GAAR,CAAY,IAAZ;AACA,EAAA,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB;AACD;AAED;;;;;;;AAKM,SAAU,IAAV,CAAe,KAAf,EAA6C;AACjD;AACA,EAAA,UAAU,CAAC,KAAD,CAAV;AAEA,QAAM,KAAK,GAAgF,EAA3F;AACA,QAAM,KAAK,GAAuB,EAAlC;;AAEA,WAAS,KAAT,CAAe,IAAf,EAAiC;AAC/B,QAAI,EAAE,GAAG,IAAI,CAAC,YAAD,CAAb;;AACA,QAAI,EAAE,KAAK,SAAX,EAAsB;AACpB,MAAA,EAAE,GAAG,qBAAL;AACA,MAAA,IAAI,CAAC,YAAD,CAAJ,GAAqB,EAArB;AACD;;AACD,WAAO,EAAP;AACD;;AAED,WAAS,QAAT,CAAkB,IAAlB,EAAoC;;;AAClC,UAAM,GAAG,GAAG,CAAE,IAAI,CAAC,WAAL,CAAyB,IAAzB,CAA8B,KAA9B,CAAoC,CAApC,EAAuC,CAAC,CAAxC,CAAF,CAAZ;;AAEA,QAAI,IAAI,CAAC,SAAT,EAAoB;AAClB,MAAA,GAAG,CAAC,IAAJ,CAAS,MAAM,IAAI,CAAC,SAAS,MAA7B;AACD,KAFD,MAEO,IAAI,IAAI,YAAY,kBAApB,EAAgC;AACrC,UAAI,IAAI,CAAC,IAAL,CAAU,IAAV,IAAkB,IAAI,CAAC,IAAL,CAAU,GAAhC,EAAqC;AACnC,QAAA,GAAG,CAAC,IAAJ,CAAS,MAAM,CAAA,EAAA,GAAA,IAAI,CAAC,IAAL,CAAU,IAAV,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,IAAI,CAAC,IAAL,CAAU,GAAG,MAA9C;AACD;AACF;;AAED,UAAM,GAAG,GAAG,IAAI,CAAC,eAAL,EAAZ;;AACA,QAAI,GAAG,KAAA,IAAH,IAAA,GAAG,KAAA,KAAA,CAAH,GAAG,KAAA,CAAH,GAAA,GAAG,CAAE,IAAT,EAAe;AACb,MAAA,GAAG,CAAC,IAAJ,CAAS,iDAAiD,CAAC,GAAG,IAAI,CAAC,eAAL,EAAJ,EAA4B,IAA5B,CAAiC,IAAjC,CAAsC,EAAhG;AACD;;AACD,UAAM,IAAI,GAAG,IAAI,CAAC,cAAL,EAAb;;AACA,QAAI,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,IAAV,EAAgB;AACd,MAAA,GAAG,CAAC,IAAJ,CAAS,kDAAkD,CAAC,GAAG,IAAI,CAAC,cAAL,EAAJ,EAA2B,IAA3B,CAAgC,IAAhC,CAAqC,EAAhG;AACD;;AACD,QAAI,IAAI,YAAY,oBAApB,EAAgC;AAC9B,MAAA,GAAG,CAAC,IAAJ,CAAS,uDAAuD,IAAI,CAAC,UAAL,EAAiB,EAAjF;AACD;;AACD,WAAO,GAAG,CAAC,IAAJ,CAAS,OAAT,CAAP;AACD;;AAED,WAAS,SAAT,CAAmB,IAAnB,EAAqC;;;AACnC,UAAM,EAAE,GAAG,KAAK,CAAC,IAAD,CAAhB;AACA,IAAA,KAAK,CAAC,EAAD,CAAL,GAAY;AACV,MAAA,EAAE,EAAE,EADM;AAEV,MAAA,KAAK,EAAE,QAAQ,CAAC,IAAD,CAFL;AAGV,MAAA,IAAI,EACF,IAAI,YAAY,kBAAhB,GACG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,IAAI,CAAC,IAAL,CAAU,GAAX,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,IAAI,CAAC,IAAL,CAAU,IAA5B,MAAgC,IAAhC,IAAgC,EAAA,KAAA,KAAA,CAAhC,GAAgC,EAAhC,GAAoC,IAAI,CAAC,SAD5C,GAEI,MAAM,CAAC,IAAI,CAAC,IAAL,EAAD,CAAN,CAAoB,OAApB,CAA4B,IAA5B,EAAkC,EAAlC;AANI,KAAZ;;AASA,SAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,IAAN,CAAW,CAAC,EAAD,EAAK,KAAK,CAAC,KAAD,CAAV,CAAX;AACA,MAAA,SAAS,CAAC,KAAD,CAAT;AACD;AACF;;AAED,OAAK,MAAM,CAAX,IAAgB,KAAhB,EAAuB;AACrB,IAAA,SAAS,CAAC,CAAD,CAAT;AACD;;AAED,QAAM,GAAG,GAAG;;;IAGV,mBAAQ,KAAR,EACC,GADD,CAEE,CAAC;AAAC,IAAA,GAAD;AAAM,IAAA;AAAN,GAAD,KAAkB,MAAM,GAAG;eAClB,KAAK,CAAC,KAAK;kBACR,KAAK,CAAC,EAAE,UAAU,KAAK,CAAC,IAAI;IAJ1C,EAOC,IAPD,CAOM,IAPN,CAOW;;IAEX,KAAK,CAAC,GAAN,CAAU,CAAC,CAAC,MAAD,EAAS,MAAT,CAAD,KAAsB,IAAI,MAAM,SAAS,MAAM,GAAzD,EAA8D,IAA9D,CAAmE,GAAnE,CAAuE;EAZzE;AAeA,EAAA,OAAO,CAAC,GAAR,CAAY,GAAZ;AAEA,SAAO,GAAP;AACD;AAED;;;;;AAGM,SAAU,UAAV,CAAqB,KAArB,EAAmD;AACvD,OAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,SAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,UAAI,KAAK,CAAC,MAAN,KAAiB,IAArB,EAA2B;AACzB,QAAA,OAAO,CAAC,KAAR,CAAc,iCAAd,EAAiD,IAAjD,EAAuD,KAAvD;AACA,eAAO,KAAP;AACD;AACF;;AAED,QAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAN,CAAf,EAAgC;AAC9B,aAAO,KAAP;AACD;AACF;;AAED,SAAO,IAAP;AACD;;;;;;;;;ACxHD;;AACA;;AAEM,MAAO,aAAP,SAA6B,sBAA7B,CAAyC;AAK7C,EAAA,WAAA,CAAY,MAAZ,EAA0C,MAA1C,EAAwE;AACtE,UAAM,MAAN;AADwC,SAAA,MAAA,GAAA,MAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,aAAJ,CAAkB,IAAlB,EAAwB,KAAK,MAA7B,CAAP;AACD;;AAMM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,SAAP,CADmB,CACD;AACnB;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,aAAa,gBAAK,KAAK,MAAV,CAAiB,EAArC;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE;AADR,KAAA,EAEM,KAAK,MAAL,KAAgB,IAAhB,GAAuB,EAAvB,GAA4B,KAAK,MAFvC,CAAA;AAID;;AA1B4C;;;;;;;;;;;ACJ/C;;AAEA;;AAEM,MAAO,YAAP,SAA4B,sBAA5B,CAAwC;AAK5C,EAAA,WAAA,CAAY,MAAZ,EAA0C,MAA1C,EAAgE;AAC9D,UAAM,MAAN;AADwC,SAAA,MAAA,GAAA,MAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,YAAJ,CAAiB,IAAjB,EAAuB,KAAK,MAA5B,CAAP;AACD;;AAMM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;;;AACnB,WAAO,IAAI,GAAJ,CAAQ,CAAA,CAAA,EAAA,GAAC,KAAK,MAAL,CAAY,EAAb,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,MAAnB,CAAR,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,QAAQ,gBAAK,KAAK,MAAV,CAAiB,EAAhC;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE;AADR,KAAA,EAEK,KAAK,MAFV,CAAA;AAID;;AA1B2C;;;;;;;;;;;;ACH9C;;AACA;;AACA;;AAEA;;;AAGM,SAAU,gBAAV,CAA2B,IAA3B,EAA6C;AACjD,SAAO,IAAI,YAAY,kBAAhB,IAA8B,IAAI,YAAY,wBAA9C,IAA+D,IAAI,YAAY,sBAAtF;AACD;AAED;;;;;;AAIA,MAAe,aAAf,CAA4B;AAE1B,EAAA,WAAA,GAAA;AACE,SAAK,QAAL,GAAgB,KAAhB;AACD,GAJyB,CAK1B;;;AACO,EAAA,UAAU,GAAA;AACf,SAAK,QAAL,GAAgB,IAAhB;AACD;;AAED,MAAI,WAAJ,GAAe;AACb,WAAO,KAAK,QAAZ;AACD;;AAZyB;AAe5B;;;;;;AAIM,MAAgB,iBAAhB,SAA0C,aAA1C,CAAuD;AAG3D,EAAA,WAAA,GAAA;AACE;AACA,SAAK,SAAL,GAAiB,KAAjB;AACD;;AAEM,EAAA,WAAW,GAAA;AAChB,SAAK,SAAL,GAAiB,IAAjB;AACD;;AAED,MAAI,YAAJ,GAAgB;AACd,WAAO,KAAK,SAAZ;AACD;;AAED,MAAI,KAAJ,GAAS;AACP,WAAO;AAAC,MAAA,YAAY,EAAE,KAAK,YAApB;AAAkC,MAAA,WAAW,EAAE,KAAK;AAApD,KAAP;AACD;;AAED,MAAI,KAAJ,CAAU;AAAC,IAAA,YAAD;AAAe,IAAA;AAAf,GAAV,EAAqD;AACnD,QAAI,YAAJ,EAAkB;AAChB,WAAK,WAAL;AACD;;AACD,QAAI,WAAJ,EAAiB;AACf,WAAK,UAAL;AACD;AACF;AAID;;;;;AAGO,EAAA,KAAK,GAAA,CACV;AACD;;AAEM,EAAA,sBAAsB,CAAC,IAAD,EAAmB;AAC9C,QAAI,gBAAgB,CAAC,IAAD,CAApB,EAA4B;AAC1B,aAAO,KAAP;AACD;;AACD,UAAM,IAAI,GAAG,IAAI,CAAC,MAAlB;AACA,UAAM;AAAC,MAAA;AAAD,QAAiB,KAAK,GAAL,CAAS,IAAT,CAAvB;;AACA,QAAI,YAAJ,EAAkB;AAChB,WAAK,sBAAL,CAA4B,IAA5B;AACD;;AACD,WAAO,KAAK,WAAZ;AACD;;AAhD0D;AAmD7D;;;;;;;AAGM,MAAgB,gBAAhB,SAAyC,aAAzC,CAAsD;;;;;;;;;;;ACzF5D;;AACA;;AAOA;;AACA;;AAEA;;AACA;;AAEA;;;;;;AAIA,SAAS,YAAT,CAAsB,IAAtB,EAAyC,OAAzC,EAA2D,QAA3D,EAAuF,KAAvF,EAA4G;AAC1G,QAAM,WAAW,GAAG,wBAAY,KAAZ,IAAqB,KAAK,CAAC,QAAN,CAAe,uCAAyB,OAAzB,CAAf,CAArB,GAAyE,SAA7F;;AAEA,MACE,iCAAgB,QAAhB,KACA,wBAAY,KAAZ,CADA,IAEA,yBAAQ,OAAR,EAAiB,QAAjB,EAA2B,WAA3B,EAAwC,KAAK,CAAC,KAA9C,EAAqD,KAAK,CAAC,OAA3D,EAAoE,KAAK,CAAC,MAA1E,CAHF,EAIE;AACA,IAAA,IAAI,CAAC,GAAL,CAAS,yBAAQ,QAAR,EAAkB,EAAlB,CAAT;AACA,IAAA,IAAI,CAAC,GAAL,CAAS,yBAAQ,QAAR,EAAkB;AAAC,MAAA,MAAM,EAAE;AAAT,KAAlB,CAAT;;AAEA,QAAI,QAAQ,CAAC,GAAT,IAAgB,kCAAiB,QAAjB,EAA2B,OAA3B,CAApB,EAAyD;AACvD,MAAA,IAAI,CAAC,GAAL,CAAS,yBAAQ,QAAR,EAAkB;AAAC,QAAA,SAAS,EAAE;AAAZ,OAAlB,CAAT;AACD;AACF,GAXD,MAWO,IAAI,mCAAqB,OAArB,CAAJ,EAAmC;AACxC,UAAM,UAAU,GAAG,4CAA8B,OAA9B,CAAnB;AACA,IAAA,IAAI,CAAC,GAAL,CAAS,KAAK,CAAC,OAAN,CAAc,UAAd,CAAT;AACD,GAHM,MAGA;AACL,IAAA,IAAI,CAAC,GAAL,CAAS,yBAAQ,QAAR,CAAT;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAAS,aAAT,CAAuB,cAAvB,EAAiD,aAAjD,EAAwE;;;AACtE,OAAK,MAAM,KAAX,IAAoB,gBAAK,aAAL,CAApB,EAAyC;AACvC;AACA,UAAM,GAAG,GAAG,aAAa,CAAC,KAAD,CAAzB;;AACA,SAAK,MAAM,EAAX,IAAiB,gBAAK,GAAL,CAAjB,EAA4B;AAC1B,UAAI,KAAK,IAAI,cAAb,EAA6B;AAC3B;AACA,QAAA,cAAc,CAAC,KAAD,CAAd,CAAsB,EAAtB,IAA4B,IAAI,GAAJ,CAAQ,CAAC,IAAG,CAAA,EAAA,GAAC,cAAc,CAAC,KAAD,CAAd,CAAsB,EAAtB,CAAD,MAA0B,IAA1B,IAA0B,EAAA,KAAA,KAAA,CAA1B,GAA0B,EAA1B,GAA8B,EAAjC,CAAD,EAAuC,GAAG,GAAG,CAAC,EAAD,CAA7C,CAAR,CAA5B;AACD,OAHD,MAGO;AACL,QAAA,cAAc,CAAC,KAAD,CAAd,GAAwB;AAAC,WAAC,EAAD,GAAM,GAAG,CAAC,EAAD;AAAV,SAAxB;AACD;AACF;AACF;AACF;;AAEK,MAAO,aAAP,SAA6B,sBAA7B,CAAyC;AAK7C;;;;AAIA,EAAA,WAAA,CAAY,MAAZ,EAA0C,UAA1C,EAA2E,QAA3E,EAA6F;AAC3F,UAAM,MAAN;AADwC,SAAA,UAAA,GAAA,UAAA;AAAiC,SAAA,QAAA,GAAA,QAAA;AAE1E;;AAVM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,aAAJ,CAAkB,IAAlB,EAAwB,IAAI,GAAJ,CAAQ,KAAK,UAAb,CAAxB,EAAkD,qBAAU,KAAK,QAAf,CAAlD,CAAP;AACD;;AAUD,MAAI,OAAJ,GAAW;AACT,WAAO,KAAK,UAAZ;AACD;;AAEM,SAAO,gBAAP,CAAwB,MAAxB,EAA8C,KAA9C,EAA8D;AACnE,QAAI,WAAW,GAAG,KAAlB;AACA,IAAA,KAAK,CAAC,eAAN,CAAsB,EAAE,IAAG;AACzB,UAAI,EAAE,CAAC,SAAP,EAAkB;AAChB,QAAA,WAAW,GAAG,IAAd;AACD;AACF,KAJD;AAMA,UAAM,IAAI,GAAa,EAAvB;AACA,UAAM,IAAI,GAAG,IAAI,GAAJ,EAAb;;AAEA,QAAI,CAAC,WAAL,EAAkB;AAChB;AACA,aAAO,IAAP;AACD;;AAED,IAAA,KAAK,CAAC,eAAN,CAAsB,CAAC,QAAD,EAAW,OAAX,KAAsB;;;AAC1C,YAAM;AAAC,QAAA,SAAD;AAAY,QAAA;AAAZ,UAAqB,QAA3B;;AACA,UAAI,SAAJ,EAAe;AACb,YAAI,SAAS,KAAK,OAAlB,EAA2B;AACzB,UAAA,IAAI,CAAC,GAAD,CAAJ,GAAS,CAAA,EAAA,GAAG,IAAI,CAAC,GAAD,CAAP,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAAzB;AACA,UAAA,IAAI,CAAC,GAAD,CAAJ,CAAU,OAAV,IAAqB,IAAI,GAAJ,CAAQ,CAAC,yBAAQ,QAAR,EAAkB;AAAC,YAAA,KAAK,EAAE;AAAR,WAAlB,CAAD,CAAR,CAArB;AACD,SAHD,MAGO;AACL,cAAI,4BAAY,SAAZ,KAA0B,4BAAY,SAAZ,CAA9B,EAAsD;AACpD,kBAAM,EAAE,GAAG,4BAAY,SAAZ,IAAyB,QAAzB,GAAoC,QAA/C;AACA,kBAAM,QAAQ,GAAG,SAAS,CAAC,EAAD,CAA1B;AACA,YAAA,IAAI,CAAC,QAAD,CAAJ,GAAc,CAAA,EAAA,GAAG,IAAI,CAAC,QAAD,CAAP,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,EAAjB,GAAqB,EAAnC;AACA,YAAA,IAAI,CAAC,QAAD,CAAJ,CAAe,EAAf,IAAqB,IAAI,GAAJ,CAAQ,CAAC,yBAAQ;AAAC,cAAA,EAAD;AAAK,cAAA,KAAK,EAAE;AAAZ,aAAR,EAA+B;AAAC,cAAA,KAAK,EAAE;AAAR,aAA/B,CAAD,CAAR,CAArB;AACD,WALD,MAKO;AACL,YAAA,IAAI,CAAC,KAAD,CAAJ,GAAW,CAAA,EAAA,GAAG,IAAI,CAAC,KAAD,CAAP,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAA7B;AACA,YAAA,IAAI,CAAC,KAAD,CAAJ,CAAY,SAAZ,IAAyB,IAAI,GAAJ,CAAQ,CAAC,yBAAQ,QAAR,EAAkB;AAAC,cAAA,KAAK,EAAE;AAAR,aAAlB,CAAD,CAAR,CAAzB;AACD,WATI,CAWL;;;AACA,cAAI,6BAAe,OAAf,KAA2B,KAAK,CAAC,WAAN,CAAkB,OAAlB,MAA+B,cAA9D,EAA8E;AAC5E,YAAA,IAAI,CAAC,KAAD,CAAJ,GAAW,CAAA,EAAA,GAAG,IAAI,CAAC,KAAD,CAAP,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAA7B;AACA,YAAA,IAAI,CAAC,KAAD,CAAJ,CAAY,KAAZ,IAAqB,IAAI,GAAJ,CAAQ,CAAC,yBAAQ;AAAC,cAAA,KAAD;AAAQ,cAAA,SAAS,EAAE;AAAnB,aAAR,EAAmC;AAAC,cAAA,KAAK,EAAE;AAAR,aAAnC,CAAD,CAAR,CAArB;AACA,YAAA,IAAI,CAAC,KAAD,CAAJ,CAAY,KAAZ,IAAqB,IAAI,GAAJ,CAAQ,CAAC,yBAAQ;AAAC,cAAA,KAAD;AAAQ,cAAA,SAAS,EAAE;AAAnB,aAAR,EAAmC;AAAC,cAAA,KAAK,EAAE;AAAR,aAAnC,CAAD,CAAR,CAArB;AACD;AACF;AACF,OAtBD,MAsBO;AACL,QAAA,YAAY,CAAC,IAAD,EAAO,OAAP,EAAgB,QAAhB,EAA0B,KAA1B,CAAZ;AACD;AACF,KA3BD;;AA6BA,QAAI,IAAI,CAAC,IAAL,GAAY,gBAAK,IAAL,EAAW,MAAvB,KAAkC,CAAtC,EAAyC;AACvC,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,aAAJ,CAAkB,MAAlB,EAA0B,IAA1B,EAAgC,IAAhC,CAAP;AACD;;AAEM,SAAO,iBAAP,CAAyB,MAAzB,EAA+C,CAA/C,EAAoE;;;AACzE,UAAM,IAAI,GAAG,IAAI,GAAJ,EAAb;AACA,UAAM,IAAI,GAAa,EAAvB;;AAEA,SAAK,MAAM,CAAX,IAAgB,CAAC,CAAC,SAAlB,EAA6B;AAC3B,YAAM;AAAC,QAAA,EAAD;AAAK,QAAA,KAAL;AAAY,QAAA;AAAZ,UAAkB,CAAxB;;AACA,UAAI,EAAJ,EAAQ;AACN,YAAI,EAAE,KAAK,OAAX,EAAoB;AAClB,UAAA,IAAI,CAAC,GAAD,CAAJ,GAAS,CAAA,EAAA,GAAG,IAAI,CAAC,GAAD,CAAP,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAAzB;AACA,UAAA,IAAI,CAAC,GAAD,CAAJ,CAAU,OAAV,IAAqB,IAAI,GAAJ,CAAQ,CAAC,EAAE,GAAG,EAAH,GAAQ,yBAAQ,CAAR,EAAW;AAAC,YAAA,KAAK,EAAE;AAAR,WAAX,CAAX,CAAR,CAArB;AACD,SAHD,MAGO;AACL,UAAA,IAAI,CAAC,KAAD,CAAJ,GAAW,CAAA,EAAA,GAAG,IAAI,CAAC,KAAD,CAAP,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAA7B;AACA,UAAA,IAAI,CAAC,KAAD,CAAJ,CAAY,EAAZ,IAAkB,IAAI,GAAJ,CAAQ,CAAC,EAAE,GAAG,EAAH,GAAQ,yBAAQ,CAAR,EAAW;AAAC,YAAA,KAAK,EAAE;AAAR,WAAX,CAAX,CAAR,CAAlB;AACD;AACF;AACF;;AAED,SAAK,MAAM,CAAX,IAAY,CAAA,EAAA,GAAI,CAAC,CAAC,OAAN,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,EAA7B,EAAiC;AAC/B,MAAA,IAAI,CAAC,GAAL,CAAS,CAAT;AACD;;AAED,QAAI,IAAI,CAAC,IAAL,GAAY,gBAAK,IAAL,EAAW,MAAvB,KAAkC,CAAtC,EAAyC;AACvC,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,aAAJ,CAAkB,MAAlB,EAA0B,IAA1B,EAAgC,IAAhC,CAAP;AACD;;AAEM,EAAA,KAAK,CAAC,KAAD,EAAqB;AAC/B,QAAI,oBAAS,KAAK,UAAd,EAA0B,KAAK,CAAC,UAAhC,CAAJ,EAAiD;AAC/C,MAAA,aAAa,CAAC,KAAK,QAAN,EAAgB,KAAK,CAAC,QAAtB,CAAb;AACA,aAAO,IAAP;AACD,KAHD,MAGO;AACL,MAAA,GAAG,CAAC,KAAJ,CAAU,oCAAV;AACA,aAAO,KAAP;AACD;AACF;;AAEM,EAAA,aAAa,CAAC,MAAD,EAA0B;AAC5C,IAAA,MAAM,CAAC,OAAP,CAAe,KAAK,UAAL,CAAgB,GAA/B,EAAoC,KAAK,UAAzC;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,GAAG,KAAK,UAAT,EAAqB,GAAG,gBAAK,KAAK,QAAV,CAAxB,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,UAAM,GAAG,GAAG,IAAI,GAAJ,EAAZ;;AAEA,SAAK,MAAM,KAAX,IAAoB,gBAAK,KAAK,QAAV,CAApB,EAAyC;AACvC,WAAK,MAAM,EAAX,IAAiB,gBAAK,KAAK,QAAL,CAAc,KAAd,CAAL,CAAjB,EAA6C;AAC3C,cAAM,CAAC,GAAG,KAAK,QAAL,CAAc,KAAd,EAAqB,EAArB,CAAV;;AACA,YAAI,CAAC,CAAC,IAAF,KAAW,CAAf,EAAkB;AAChB,UAAA,GAAG,CAAC,GAAJ,CAAQ,GAAG,EAAE,IAAI,KAAK,EAAtB;AACD,SAFD,MAEO;AACL,UAAA,CAAC,CAAC,OAAF,CAAU,GAAG,CAAC,GAAd,EAAmB,GAAnB;AACD;AACF;AACF;;AAED,WAAO,GAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,aAAa,gBAAK;AAAC,MAAA,UAAU,EAAE,KAAK,UAAlB;AAA8B,MAAA,QAAQ,EAAE,KAAK;AAA7C,KAAL,CAA4D,EAAhF;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,GAAG,GAAkB,EAA3B;AACA,UAAM,MAAM,GAAa,EAAzB;AACA,UAAM,EAAE,GAAa,EAArB;;AAEA,SAAK,MAAM,KAAX,IAAoB,gBAAK,KAAK,QAAV,CAApB,EAAyC;AACvC,WAAK,MAAM,EAAX,IAAiB,gBAAK,KAAK,QAAL,CAAc,KAAd,CAAL,CAAjB,EAA6C;AAC3C,aAAK,MAAM,KAAX,IAAoB,KAAK,QAAL,CAAc,KAAd,EAAqB,EAArB,CAApB,EAA8C;AAC5C,UAAA,EAAE,CAAC,IAAH,CAAQ,KAAR;AACA,UAAA,GAAG,CAAC,IAAJ,CAAS,EAAT;AACA,UAAA,MAAM,CAAC,IAAP,CAAY,KAAK,KAAK,GAAV,GAAgB,IAAhB,GAAuB,8BAAmB,KAAnB,CAAnC;AACD;AACF;AACF;;AAED,UAAM,MAAM,GAAyB;AACnC,MAAA,IAAI,EAAE,WAD6B;AAEnC,MAAA,OAAO,EAAE,CAAC,GAAG,KAAK,UAAT,EAAqB,GAArB,CAAyB,wBAAzB,CAF0B;AAGnC,MAAA,GAHmC;AAInC,MAAA,MAJmC;AAKnC,MAAA;AALmC,KAArC;AAQA,WAAO,MAAP;AACD;;AAhK4C;;;;;;;;;;;ACxD/C;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;;;;;AAeA;;;AAGM,MAAO,SAAP,SAAyB,sBAAzB,CAAqC;AASzC;;;;;AAKA,EAAA,WAAA,CACE,MADF,EAEkB,KAFlB,EAGkB,IAHlB,EAIS,IAJT,EAIqB;AAEnB,UAAM,MAAN;AAJgB,SAAA,KAAA,GAAA,KAAA;AACA,SAAA,IAAA,GAAA,IAAA;AACT,SAAA,IAAA,GAAA,IAAA;;AAIP,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,YAAM,QAAQ,GAAG,KAAK,CAAC,KAAN,CAAY,OAAZ,CAAjB;;AACA,UAAI,QAAJ,EAAc;AACZ,cAAM;AAAC,UAAA,GAAD;AAAM,UAAA;AAAN,YAAc,QAApB;AACA,aAAK,OAAL,IAAa,MAAA,CAAA,MAAA,CAAA;AACX,UAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,GAAG,OAAO,SAAxB,CADK;AAEX,UAAA,MAAM,EAAE,CAAC,yBAAQ,QAAR,CAAD,EAAoB,IAAI,oBAAU,GAAV,IAAiB,CAAC,yBAAQ,QAAR,EAAkB;AAAC,YAAA,SAAS,EAAE;AAAZ,WAAlB,CAAD,CAAjB,GAA2D,EAA/D,CAApB;AAFG,SAAA,EAGP,uBAAY,IAAZ,IACA;AAAC,UAAA,SAAS,EAAE;AAAZ,SADA,GAEA,uBAAQ,IAAR,IACA;AAAC,UAAA,cAAc,EAAE,oCAAoB,QAApB,EAA8B,OAA9B;AAAjB,SADA,GAEA,EAPO,CAAb;AASD;AACF;;AACD,SAAK,UAAL,GAAkB,KAAK,CAAC,KAAxB;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,QAAI,GAAG,GAAG,OAAV;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAI,KAAK,OAAL,CAAJ,EAAmB;AACjB,QAAA,GAAG,IAAI,IAAI,OAAO,CAAC,MAAR,CAAe,CAAf,CAAiB,IAAI,gBAAK,KAAK,OAAL,CAAL,CAAmB,EAAnD;AACD;AACF;;AAED,WAAO,GAAP;AACD;;AAED,MAAI,MAAJ,GAAU;;;AACR,UAAM,CAAC,GAAa,EAApB;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAA,CAAA,EAAA,GAAI,KAAK,OAAL,CAAJ,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,KAAA,CAAjB,GAAiB,EAAA,CAAE,MAAnB,EAA2B;AACzB,QAAA,CAAC,CAAC,IAAF,CAAO,GAAG,KAAK,OAAL,EAAc,MAAxB;AACD;AACF;;AACD,WAAO,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,UAAM,SAAS,GAAG,IAAI,GAAJ,CAAgB,KAAK,MAArB,CAAlB;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAI,KAAK,OAAL,CAAJ,EAAmB;AACjB,YAAI,KAAK,OAAL,EAAc,SAAlB,EAA6B;AAC3B,UAAA,SAAS,CAAC,GAAV,CAAc,KAAK,OAAL,EAAc,SAAd,CAAwB,KAAtC;AACD;;AACD,YAAI,KAAK,OAAL,EAAc,cAAlB,EAAkC;AAChC,UAAA,SAAS,CAAC,GAAV,CAAc,KAAK,OAAL,EAAc,cAA5B;AACD;AACF;AACF;;AAED,WAAO,SAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP,CADmB,CACO;AAC3B;AAED;;;;;AAGO,EAAA,SAAS,GAAA;AACd,WAAO,KAAK,IAAZ;AACD;;AAEO,EAAA,iCAAiC,GAAA;AACvC,UAAM,8BAA8B,GAAmC,EAAvE;;AAEA,SAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,YAAM,mBAAmB,GAAG,KAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,OAAjC,CAA5B;;AACA,UAAI,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,MAAhD,EAAwD;AACtD;AACA,cAAM,IAAI,GAAG,mBAAmB,CAAC,GAApB,CAAwB,MAAxB,CAAb;AACA,cAAM,KAAK,GAAG,mBAAmB,CAAC,GAApB,CAAwB,OAAxB,CAAd;;AAEA,YAAI,8BAAkB,IAAlB,KAA2B,yBAAc,KAAd,CAA/B,EAAqD;AACnD,gBAAM,MAAM,GAAG,4BAAe,KAAK,UAApB,EAAgC,OAAhC,CAAf;AACA,gBAAM,KAAK,GAAG,gCAAmB,MAAnB,CAAd;;AACA,cAAI,KAAJ,EAAW;AACT,YAAA,8BAA8B,CAAC,OAAD,CAA9B,GAA0C,KAA1C;AACD,WAFD,MAEO;AACL,YAAA,GAAG,CAAC,IAAJ,CAAS,qBAAqB,OAAO,+BAArC;AACD;AACF;AACF;AACF;;AAED,WAAO,8BAAP;AACD;;AAEO,EAAA,2BAA2B,CACjC,OADiC,EAEjC,eAFiC,EAGjC,8BAHiC,EAG6B;AAE9D,UAAM,YAAY,GAAG;AAAC,MAAA,GAAG,EAAE,GAAN;AAAW,MAAA,MAAM,EAAE;AAAnB,MAAwB,OAAxB,CAArB;AAEA,UAAM,MAAM,GAAa,EAAzB;AACA,UAAM,GAAG,GAAkB,EAA3B;AACA,UAAM,EAAE,GAAa,EAArB;;AAEA,QAAI,8BAA8B,IAAI,8BAA8B,CAAC,YAAD,CAApE,EAAoF;AAClF,UAAI,eAAJ,EAAqB;AACnB;AACA,QAAA,MAAM,CAAC,IAAP,CAAY,YAAY,8BAA8B,CAAC,YAAD,CAAc,EAApE;AAEA,QAAA,GAAG,CAAC,IAAJ,CAAS,KAAT;AACD,OALD,MAKO;AACL;AACA,QAAA,MAAM,CAAC,IAAP,CAAY,8BAA8B,CAAC,YAAD,CAA1C;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,UAAT;AACD,OAViF,CAWlF;;;AACA,MAAA,EAAE,CAAC,IAAH,CAAQ,YAAY,8BAA8B,CAAC,YAAD,CAAc,EAAhE;AACD;;AAED,UAAM;AAAC,MAAA,SAAD;AAAY,MAAA;AAAZ,QAA8B,KAAK,OAAL,CAApC;;AACA,QAAI,SAAJ,EAAe;AACb,YAAM;AAAC,QAAA,EAAE,GAAG,qBAAN;AAAuB,QAAA;AAAvB,UAAgC,SAAtC;AACA,MAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,EAAT;AACA,MAAA,EAAE,CAAC,IAAH,CAAQ,yBAAQ,SAAR,EAAmB;AAAC,QAAA,KAAK,EAAE;AAAR,OAAnB,CAAR;AACD,KALD,MAKO,IAAI,cAAJ,EAAoB;AACzB,MAAA,MAAM,CAAC,IAAP,CAAY,cAAZ;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,KAAT;AACA,MAAA,EAAE,CAAC,IAAH,CAAQ,cAAR;AACD;;AAED,WAAO;AACL,MAAA,IAAI,EAAE,KAAK,OAAL,EAAc,IADf;AAEL;AACA,MAAA,MAAM,EAAE,eAAe,KAAA,IAAf,IAAA,eAAe,KAAA,KAAA,CAAf,GAAA,eAAA,GAAmB,KAAK,IAH3B;AAIL,MAAA,SAAS,EAAE;AAEP,QAAA,IAAI,EAAE;AACN,QAAA,OAAO,EAAE,KAAK,OAAL,EAAc;SACnB,MAAM,CAAC,MAAP,GACA;AACE,QAAA,MADF;AAEE,QAAA,GAFF;AAGE,QAAA;AAHF,OADA,GAMA,GAVG;AAJN,KAAP;AAkBD;;AAEO,EAAA,uBAAuB,CAAC,8BAAD,EAA+D;;;AAC5F,UAAM;AAAC,MAAA;AAAD,QAAY,KAAK,KAAL,CAAW,MAA7B;AACA,UAAM;AAAC,MAAA;AAAD,QAAkB,KAAK,KAAL,CAAW,SAAnC;AACA,UAAM,IAAI,GAAa,EAAvB;AAEA,UAAM,aAAa,GAAgC,EAAnD;;AACA,SAAK,MAAM,aAAX,IAA4B,0BAA5B,EAA6C;AAC3C,WAAK,MAAM,UAAX,IAAyB,uBAAzB,EAAuC;AACrC,cAAM,OAAO,GAAA,CAAA,EAAA,GAAI,aAAa,CAAC,aAAD,CAAb,IAAgC,aAAa,CAAC,aAAD,CAAb,CAA6B,UAA7B,CAApC,MAA6E,IAA7E,IAA6E,EAAA,KAAA,KAAA,CAA7E,GAA6E,EAA7E,GAAiF,EAA9F;;AACA,aAAK,MAAM,MAAX,IAAqB,OAArB,EAA8B;AAC5B,cAAI,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAP,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,KAAA,CAAX,GAAW,EAAA,CAAE,MAAb,IAAsB,CAA1B,EAA6B;AAC3B,YAAA,aAAa,CAAC,aAAD,CAAb,GAA+B,IAA/B;AACA;AACD;AACF;AACF;;AAED,UAAI,aAAa,CAAC,aAAD,CAAjB,EAAkC;AAChC,cAAM,WAAW,GAAG,gBAAgB,KAAK,KAAL,CAAW,IAAI,KAAnD;AAEA,cAAM,IAAI,GACR,aAAa,KAAK,KAAlB,GACI,OAAO,GACL;AAAC,UAAA,MAAM,EAAE,QAAQ,WAAW,MAAM,OAAO;AAAzC,SADK,GAEL,CAHN,GAII,OAAO,GACP;AAAC,UAAA,MAAM,EAAE,OAAO,WAAW,KAAK,OAAO;AAAvC,SADO,GAEP;AAAC,UAAA,MAAM,EAAE;AAAT,SAPN;AASA,QAAA,IAAI,CAAC,IAAL,CAAU;AACR,UAAA,IAAI,EAAE,GAAG,KAAK,KAAL,CAAW,IAAI,IAAI,aAAa,EADjC;AAER,UAAA,SAAS,EAAE,CACT;AACE,YAAA,IAAI,EAAE,UADR;AAEE,YAAA,KAAK,EAAE,CAFT;AAGE,YAAA;AAHF,WADS;AAFH,SAAV;AAUD;AACF;;AAED,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA;AAAN,QAAgB,aAAtB;;AAEA,QAAI,GAAG,IAAI,MAAX,EAAmB;AACjB,MAAA,IAAI,CAAC,OAAL,CAAa,KAAK,2BAAL,CAAiC,OAAjC,EAA0C,IAA1C,EAAgD,8BAAhD,CAAb;AACD;;AAED,WAAO,IAAP;AACD;;AAEM,EAAA,QAAQ,GAAA;;;AACb,UAAM,IAAI,GAAa,EAAvB;AACA,QAAI,eAAe,GAAG,IAAtB;AACA,UAAM,8BAA8B,GAAG,KAAK,iCAAL,EAAvC;AAEA,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,GAAT;AAAc,MAAA;AAAd,QAAuB,IAA7B;;AAEA,QAAI,MAAM,IAAI,GAAV,KAAkB,8BAA8B,CAAC,CAA/B,IAAoC,8BAA8B,CAAC,CAArF,CAAJ,EAA6F;AAC3F;AACA,MAAA,eAAe,GAAG,SAAS,KAAK,MAAL,CAAY,IAAI,IAAI,KAAK,GAAL,CAAS,IAAI,EAA5D;AAEA,YAAM,MAAM,GAAa,GAAG,MAAH,CAAS,CAAA,EAAA,GAChC,8BAA8B,CAAC,CADC,MACA,IADA,IACA,EAAA,KAAA,KAAA,CADA,GACA,EADA,GACI,EADb,EACe,CAAA,EAAA,GACtC,8BAA8B,CAAC,CADO,MACN,IADM,IACN,EAAA,KAAA,KAAA,CADM,GACN,EADM,GACF,EAFb,CAAzB;AAIA,YAAM,GAAG,GAAG,MAAM,CAAC,GAAP,CAAW,MAAmB,UAA9B,CAAZ;AAEA,MAAA,IAAI,CAAC,IAAL,CAAU;AACR,QAAA,IAAI,EAAE,eADE;AAER,QAAA,MAAM,EAAE,KAAK,IAFL;AAGR,QAAA,SAAS,EAAE,CACT;AACE,UAAA,IAAI,EAAE,WADR;AAEE,UAAA,OAAO,EAAE,KAAK,MAFhB;AAGE,UAAA,MAHF;AAIE,UAAA;AAJF,SADS;AAHH,OAAV;AAYD;;AAED,SAAK,MAAM,OAAX,IAAsB,CAAC,eAAD,EAAS,YAAT,CAAtB,EAAqC;AACnC,UAAI,KAAK,OAAL,CAAJ,EAAmB;AACjB,QAAA,IAAI,CAAC,IAAL,CAAU,KAAK,2BAAL,CAAiC,OAAjC,EAA0C,eAA1C,EAA2D,8BAA3D,CAAV;AACD;AACF;;AAED,QAAI,KAAJ,EAAW;AACT,YAAM,SAAS,GAAG,KAAK,uBAAL,CAA6B,8BAA7B,CAAlB;;AACA,UAAI,SAAJ,EAAe;AACb,QAAA,IAAI,CAAC,IAAL,CAAU,GAAG,SAAb;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AA9QwC;;;;;;;;;;;;;;AChC3C;;AAEA;;AACA;;AACA;;AAOA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA;;;AAGA,SAAS,OAAT,CAAiB,OAAjB,EAAgC;AAC9B,MACG,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAsB,OAAO,CAAC,OAAO,CAAC,MAAR,GAAiB,CAAlB,CAAP,KAAgC,GAAvD,IACC,OAAO,CAAC,CAAD,CAAP,KAAe,GAAf,IAAsB,OAAO,CAAC,OAAO,CAAC,MAAR,GAAiB,CAAlB,CAAP,KAAgC,GAFzD,EAGE;AACA,WAAO,OAAO,CAAC,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAP;AACD;;AACD,SAAO,OAAP;AACD;AAED;;;;;;AAIA,SAAS,eAAT,CAAyB,KAAzB,EAAwC,KAAxC,EAAqD;AACnD,QAAM,CAAC,GAAG,+BAAoB,KAApB,CAAV;;AACA,MAAI,KAAK,KAAK,QAAd,EAAwB;AACtB,WAAO,YAAY,CAAC,GAApB;AACD,GAFD,MAEO,IAAI,KAAK,KAAK,SAAd,EAAyB;AAC9B,WAAO,aAAa,CAAC,GAArB;AACD,GAFM,MAEA,IAAI,KAAK,KAAK,QAAd,EAAwB;AAC7B,WAAO,YAAY,CAAC,GAApB;AACD,GAFM,MAEA,IAAI,KAAK,KAAK,MAAd,EAAsB;AAC3B,WAAO,UAAU,CAAC,GAAlB;AACD,GAFM,MAEA,IAAI,KAAK,KAAK,SAAd,EAAyB;AAC9B,WAAO,CAAP;AACD,GAFM,MAEA,IAAI,KAAK,CAAC,OAAN,CAAc,OAAd,MAA2B,CAA/B,EAAkC;AACvC,UAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAN,CAAY,CAAZ,EAAe,KAAK,CAAC,MAArB,CAAD,CAAzB;AACA,WAAO,aAAa,CAAC,KAAK,SAAS,IAAnC;AACD,GAHM,MAGA,IAAI,KAAK,CAAC,OAAN,CAAc,MAAd,MAA0B,CAA9B,EAAiC;AACtC,UAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAN,CAAY,CAAZ,EAAe,KAAK,CAAC,MAArB,CAAD,CAAzB;AACA,WAAO,YAAY,CAAC,KAAK,SAAS,IAAlC;AACD,GAHM,MAGA;AACL,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iBAAZ,CAA8B,KAA9B,CAAT;AACA,WAAO,IAAP;AACD;AACF;;AAEK,SAAU,8BAAV,CAAyC,SAAzC,EAAmE;AACvE,QAAM,QAAQ,GAAiB,EAA/B;AACA,4BAAY,SAAS,CAAC,MAAtB,EAA8B,MAAM,IAAG;;;AACrC,QAAI,iCAAiB,MAAjB,CAAJ,EAA8B;AAC5B;AACA,UAAI,GAAG,GAAqD,IAA5D,CAF4B,CAI5B;AACA;AACA;;AACA,UAAI,sCAAsB,MAAtB,CAAJ,EAAmC;AACjC,QAAA,GAAG,GAAG,MAAM,CAAC,KAAb;AACD,OAFD,MAEO,IAAI,sCAAsB,MAAtB,CAAJ,EAAmC;AACxC,QAAA,GAAG,GAAG,MAAM,CAAC,KAAP,CAAa,CAAb,CAAN;AACD,OAFM,MAEA,IAAI,sCAAsB,MAAtB,CAAJ,EAAmC;AACxC,QAAA,GAAG,GAAG,CAAA,CAAA,EAAA,GAAC,MAAM,CAAC,KAAR,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,MAAM,CAAC,IAAD,CAAvB,EAA+B,CAA/B,CAAN;AACD,OAb2B,CAa1B;;;AACF,UAAI,GAAJ,EAAS;AACP,YAAI,0BAAW,GAAX,CAAJ,EAAqB;AACnB,UAAA,QAAQ,CAAC,MAAM,CAAC,KAAR,CAAR,GAAyB,MAAzB;AACD,SAFD,MAEO,IAAI,wBAAS,GAAT,CAAJ,EAAmB;AACxB,UAAA,QAAQ,CAAC,MAAM,CAAC,KAAR,CAAR,GAAyB,QAAzB;AACD,SAFM,MAEA,IAAI,wBAAS,GAAT,CAAJ,EAAmB;AACxB,UAAA,QAAQ,CAAC,MAAM,CAAC,KAAR,CAAR,GAAyB,QAAzB;AACD;AACF;;AAED,UAAI,MAAM,CAAC,QAAX,EAAqB;AACnB,QAAA,QAAQ,CAAC,MAAM,CAAC,KAAR,CAAR,GAAyB,MAAzB;AACD;AACF;AACF,GA7BD;AA+BA,SAAO,QAAP;AACD;AAED;;;;;AAGM,SAAU,uBAAV,CAAkC,KAAlC,EAA8C;AAClD,QAAM,QAAQ,GAAiB,EAA/B;;AAEA,WAAS,GAAT,CAAa,QAAb,EAA4C;AAC1C,QAAI,gDAA+B,QAA/B,CAAJ,EAA8C;AAC5C,MAAA,QAAQ,CAAC,QAAQ,CAAC,KAAV,CAAR,GAA2B,MAA3B;AACD,KAFD,MAEO,IACL,QAAQ,CAAC,IAAT,KAAkB,cAAlB,IACA,2BAAW,QAAQ,CAAC,SAApB,CAFK,CAE0B;AAF1B,MAGL;AACA,QAAA,QAAQ,CAAC,QAAQ,CAAC,KAAV,CAAR,GAA2B,QAA3B;AACD,OALM,MAKA,IAAI,2BAAgB,QAAQ,CAAC,KAAzB,IAAkC,CAAtC,EAAyC;AAC9C;AACA;AACA,UAAI,EAAE,QAAQ,CAAC,KAAT,IAAkB,QAApB,CAAJ,EAAmC;AACjC,QAAA,QAAQ,CAAC,QAAQ,CAAC,KAAV,CAAR,GAA2B,SAA3B;AACD;AACF,KANM,MAMA,IAAI,iCAAgB,QAAhB,KAA6B,uBAAY,QAAQ,CAAC,IAArB,CAA7B,IAA2D,2BAAgB,QAAQ,CAAC,IAAT,CAAc,KAA9B,IAAuC,CAAtG,EAAyG;AAC9G;AACA,UAAI,EAAE,QAAQ,CAAC,IAAT,CAAc,KAAd,IAAuB,QAAzB,CAAJ,EAAwC;AACtC,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAT,CAAc,KAAf,CAAR,GAAgC,SAAhC;AACD;AACF;AACF;;AAED,MAAI,wBAAY,KAAZ,KAAsB,yBAAa,KAAb,CAA1B,EAA+C;AAC7C;AACA,IAAA,KAAK,CAAC,eAAN,CAAsB,CAAC,QAAD,EAAW,OAAX,KAAsB;AAC1C,UAAI,iCAAgB,QAAhB,CAAJ,EAA+B;AAC7B,QAAA,GAAG,CAAC,QAAD,CAAH;AACD,OAFD,MAEO;AACL,cAAM,WAAW,GAAG,kCAAoB,OAApB,CAApB;AACA,cAAM,YAAY,GAAG,KAAK,CAAC,QAAN,CAAe,WAAf,CAArB;AACA,QAAA,GAAG,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACE,QADF,CAAA,EACU;AACX,UAAA,IAAI,EAAE,YAAY,CAAC;AADR,SADV,CAAA,CAAH;AAID;AACF,KAXD;AAYD,GAvCiD,CAyClD;;;AACA,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA,OAAP;AAAgB,MAAA;AAAhB,QAA4B,KAAlC;;AACA,QACE,sBAAW,IAAX,KACA;AACA,KAAC,KAAK,CAAC,QAAN,CAAe,KAHlB,EAIE;AACA,YAAM,gBAAgB,GAAG,OAAO,CAAC,MAAR,KAAmB,YAAnB,GAAkC,GAAlC,GAAwC,GAAjE;AACA,YAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAD,CAApC;;AACA,UACE,4BAAW,mBAAX,KACA,mBAAmB,CAAC,IAApB,KAA6B,cAD7B,IAEA,EAAE,mBAAmB,CAAC,KAApB,IAA6B,QAA/B,CAHF,EAIE;AACA,QAAA,QAAQ,CAAC,mBAAmB,CAAC,KAArB,CAAR,GAAsC,QAAtC;AACD;AACF;AACF;;AAED,SAAO,QAAP;AACD;AAED;;;;;AAGM,SAAU,wBAAV,CAAmC,KAAnC,EAA+C;AACnD,QAAM,QAAQ,GAAiB,EAA/B;;AAEA,MAAI,wBAAY,KAAZ,KAAsB,KAAK,CAAC,SAAN,CAAgB,SAA1C,EAAqD;AACnD,SAAK,MAAM,IAAX,IAAmB,gBAAK,KAAK,CAAC,SAAN,CAAgB,SAArB,CAAnB,EAAoD;AAClD,YAAM,OAAO,GAAG,KAAK,CAAC,SAAN,CAAgB,SAAhB,CAA0B,IAA1B,CAAhB;;AACA,WAAK,MAAM,IAAX,IAAmB,OAAO,CAAC,OAAR,CAAgB,KAAnC,EAA0C;AACxC,YAAI,CAAC,IAAI,CAAC,OAAN,IAAiB,2BAAgB,IAAI,CAAC,KAArB,IAA8B,CAAnD,EAAsD;AACpD,UAAA,QAAQ,CAAC,IAAI,CAAC,KAAN,CAAR,GAAuB,SAAvB;AACD;AACF;AACF;AACF;;AAED,SAAO,QAAP;AACD;;AAEK,MAAO,SAAP,SAAyB,sBAAzB,CAAqC;AAOzC,EAAA,WAAA,CAAY,MAAZ,EAAkC,KAAlC,EAA8C;AAC5C,UAAM,MAAN;AAEA,SAAK,MAAL,GAAc,KAAd;AACD;;AARM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,SAAJ,CAAc,IAAd,EAAoB,qBAAU,KAAK,MAAf,CAApB,CAAP;AACD;;AAQM,EAAA,IAAI,GAAA;AACT,WAAO,SAAS,gBAAK,KAAK,MAAV,CAAiB,EAAjC;AACD;AAED;;;;;AAGO,SAAO,YAAP,CAAoB,MAApB,EAA0C,KAA1C,EAAwD,aAAxD,EAAoF;AACzF;AACA,QAAI,QAAQ,GAAG,EAAf;AACA,UAAM,IAAI,GAAG,KAAK,CAAC,IAAnB;;AACA,QAAI,CAAC,uBAAY,IAAZ,CAAD,IAAsB,IAAtB,IAA8B,IAAI,CAAC,MAAnC,IAA6C,IAAI,CAAC,MAAL,CAAY,KAA7D,EAAoE;AAClE,MAAA,QAAQ,GAAG,IAAI,CAAC,MAAL,CAAY,KAAvB;AACD;;AAED,WAAO,KAAK,iBAAL,CAAuB,MAAvB,EAA+B,QAA/B,EAAyC,EAAzC,EAA6C,aAA7C,CAAP;AACD;AAED;;;;;AAGO,SAAO,iBAAP,CACL,MADK,EAEL,QAFK,EAGL,QAHK,EAIL,aAJK,EAIuB;AAE5B;AACA,SAAK,MAAM,KAAX,IAAoB,gBAAK,QAAL,CAApB,EAAoC;AAClC,YAAM,QAAQ,GAAG,aAAa,CAAC,eAAd,CAA8B,KAA9B,CAAjB;;AACA,UAAI,QAAQ,CAAC,KAAT,KAAmB,SAAvB,EAAkC;AAChC;AACA,YACE,QAAQ,CAAC,QAAT,IACA,QAAQ,CAAC,KAAT,KAAmB,QAAQ,CAAC,KAAD,CAD3B,IAEA,QAAQ,CAAC,KAAT,KAAmB,SAFnB,IAGA,QAAQ,CAAC,KAAD,CAAR,KAAoB,SAJtB,EAKE;AACA,iBAAO,QAAQ,CAAC,KAAD,CAAf;AACD,SAPD,MAOO;AACL,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,cAAZ,CAA2B,KAA3B,EAAkC,QAAQ,CAAC,KAAD,CAA1C,EAAmD,QAAQ,CAAC,KAA5D,CAAT;AACD;AACF;AACF;;AAED,SAAK,MAAM,KAAX,IAAoB,gBAAK,QAAL,CAApB,EAAoC;AAClC,YAAM,QAAQ,GAAG,aAAa,CAAC,GAAd,CAAkB,KAAlB,CAAjB;;AACA,UAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B;AACA,YAAI,QAAQ,KAAK,QAAQ,CAAC,KAAD,CAAzB,EAAkC;AAChC,iBAAO,QAAQ,CAAC,KAAD,CAAf;AACD,SAFD,MAEO;AACL,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,cAAZ,CAA2B,KAA3B,EAAkC,QAAQ,CAAC,KAAD,CAA1C,EAAmD,QAAnD,CAAT;AACD;AACF;AACF;;AAED,UAAM,KAAK,GAAG,IAAI,YAAJ,CAAU,QAAV,EAAoB,QAApB,CAAd,CAhC4B,CAkC5B;;AACA,IAAA,aAAa,CAAC,OAAd,CAAsB,KAAtB,EAnC4B,CAqC5B;;AACA,UAAM,CAAC,GAAiB,EAAxB;;AACA,SAAK,MAAM,GAAX,IAAkB,gBAAK,KAAK,CAAC,OAAN,EAAL,CAAlB,EAAyC;AACvC,YAAM,GAAG,GAAG,KAAK,CAAC,GAAN,CAAU,GAAV,CAAZ;;AACA,UAAI,GAAG,KAAK,IAAZ,EAAkB;AAChB,QAAA,CAAC,CAAC,GAAD,CAAD,GAAS,GAAT;AACD;AACF;;AAED,QAAI,gBAAK,CAAL,EAAQ,MAAR,KAAmB,CAAnB,IAAwB,aAAa,CAAC,YAA1C,EAAwD;AACtD,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,SAAJ,CAAc,MAAd,EAAsB,CAAtB,CAAP;AACD;;AAED,MAAW,KAAX,GAAgB;AACd,WAAO,KAAK,MAAZ;AACD;;AAEM,EAAA,KAAK,CAAC,KAAD,EAAiB;AAC3B,SAAK,MAAL,GAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,MAAZ,CAAA,EAAuB,KAAK,CAAC,KAA7B,CAAX;AACA,IAAA,KAAK,CAAC,MAAN;AACD;AAED;;;;;AAGO,EAAA,mBAAmB,GAAA;AACxB,UAAM,WAAW,GAAiB,EAAlC;;AACA,SAAK,MAAM,KAAX,IAAoB,gBAAK,KAAK,MAAV,CAApB,EAAuC;AACrC,YAAM,CAAC,GAAG,KAAK,MAAL,CAAY,KAAZ,CAAV;;AACA,UAAI,2BAAgB,KAAhB,MAA2B,CAA/B,EAAkC;AAChC,QAAA,WAAW,CAAC,KAAD,CAAX,GAAqB,CAArB;AACD;AACF;;AACD,WAAO,WAAP;AACD,GAhHwC,CAkHzC;;;AACO,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,MAAV,CAAR,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,MAAV,CAAR,CAAP;AACD;;AAEM,EAAA,kBAAkB,CAAC,UAAU,GAAG,KAAd,EAAmB;AAC1C,WAAO,gBAAK,KAAK,MAAV,EACJ,MADI,CACG,KAAK,IAAK,UAAU,GAAG,2BAAgB,KAAhB,IAAyB,CAA5B,GAAgC,IADvD,EAEJ,GAFI,CAEA,KAAK,IAAG;AACX,YAAM,IAAI,GAAG,eAAe,CAAC,KAAD,EAAQ,KAAK,MAAL,CAAY,KAAZ,CAAR,CAA5B;;AACA,UAAI,CAAC,IAAL,EAAW;AACT,eAAO,IAAP;AACD;;AAED,YAAM,OAAO,GAAuB;AAClC,QAAA,IAAI,EAAE,SAD4B;AAElC,QAAA,IAFkC;AAGlC,QAAA,EAAE,EAAE,+BAAoB,KAApB,CAH8B,CAGH;;AAHG,OAApC;AAKA,aAAO,OAAP;AACD,KAdI,EAeJ,MAfI,CAeG,CAAC,IAAI,CAAC,KAAK,IAfd,CAAP;AAgBD;;AA5IwC;;;;;;;;;;;AC7L3C;;AAEA;;AAEM,MAAO,cAAP,SAA8B,sBAA9B,CAA0C;AACvC,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,cAAJ,CAAmB,IAAnB,CAAP;AACD;;AAED,EAAA,WAAA,CAAY,MAAZ,EAAgC;AAC9B,UAAM,MAAN;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,CAAC,uBAAD,CAAR,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,YAAP;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO;AAAC,MAAA,IAAI,EAAE,YAAP;AAAqB,MAAA,EAAE,EAAE;AAAzB,KAAP;AACD;;AAvB6C;;;;;;;;;;;ACHhD;;AAEA;;AAIA;;AAEA;;;AAGM,MAAO,0BAAP,SAA0C,sBAA1C,CAAsD;AAK1D,EAAA,WAAA,CAAY,MAAZ,EAAmD,SAAnD,EAAoF;AAClF,UAAM,MAAN;AADiD,SAAA,SAAA,GAAA,SAAA;AAElD;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,0BAAJ,CAA+B,IAA/B,EAAqC,qBAAU,KAAK,SAAf,CAArC,CAAP;AACD;;AAMM,EAAA,aAAa,CAAC,MAAD,EAAiB;AACnC,SAAK,SAAL,CAAe,OAAf,GAAyB,kBAAO,KAAK,SAAL,CAAe,OAAf,CAAuB,MAAvB,CAA8B,MAA9B,CAAP,EAA8C,CAAC,IAAI,CAAnD,CAAzB;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,UAAM,GAAG,GAAG,IAAI,GAAJ,EAAZ;;AAEA,QAAI,KAAK,SAAL,CAAe,OAAnB,EAA4B;AAC1B,WAAK,SAAL,CAAe,OAAf,CAAuB,OAAvB,CAA+B,GAAG,CAAC,GAAnC,EAAwC,GAAxC;AACD;;AACD,SAAK,SAAL,CAAe,aAAf,CACG,GADH,CACO,CAAC,IAAI,CAAC,CAAC,KADd,EAEG,MAFH,CAEU,CAAC,IAAI,CAAC,KAAK,SAFrB,EAGG,OAHH,CAGW,GAAG,CAAC,GAHf,EAGoB,GAHpB;AAKA,WAAO,GAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,aAAf,CAA6B,GAA7B,CAAiC,KAAK,cAAtC,CAAR,CAAP;AACD;;AAEO,EAAA,cAAc,CAAC,qBAAD,EAA6C;;;AACjE,WAAA,CAAA,EAAA,GAAO,qBAAqB,CAAC,EAA7B,MAA+B,IAA/B,IAA+B,EAAA,KAAA,KAAA,CAA/B,GAA+B,EAA/B,GAAmC,yBAAQ,qBAAR,CAAnC;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,0BAA0B,gBAAK,KAAK,SAAV,CAAoB,EAArD;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,MAAM,GAAa,EAAzB;AACA,UAAM,GAAG,GAAkB,EAA3B;AACA,UAAM,EAAE,GAAa,EAArB;;AACA,SAAK,MAAM,aAAX,IAA4B,KAAK,SAAL,CAAe,aAA3C,EAA0D;AACxD,MAAA,GAAG,CAAC,IAAJ,CAAS,aAAa,CAAC,EAAvB;AACA,MAAA,EAAE,CAAC,IAAH,CAAQ,KAAK,cAAL,CAAoB,aAApB,CAAR;AACA,MAAA,MAAM,CAAC,IAAP,CAAY,aAAa,CAAC,KAAd,KAAwB,SAAxB,GAAoC,IAApC,GAA2C,aAAa,CAAC,KAArE;AACD;;AAED,UAAM,OAAO,GAAG,KAAK,SAAL,CAAe,OAA/B;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE,eADR;AAEE,MAAA,EAFF;AAGE,MAAA,GAHF;AAIE,MAAA;AAJF,KAAA,EAKM,OAAO,KAAK,SAAZ,GAAwB;AAAC,MAAA;AAAD,KAAxB,GAAoC,EAL1C,CAAA;AAOD;;AA1DyD;;;;;;;;;;;ACX5D;;AACA;;AAIA;;AACA;;AAEA;;AAEA,SAAS,gBAAT,CAA0B,KAA1B,EAA0C;AACxC,SAAO,KAAK,CAAC,KAAN,CAAY,OAAZ,CAAoB,MAApB,CAA2B,CAAC,MAAD,EAAS,EAAT,KAAe;AAC/C,UAAM,QAAQ,GAAG,EAAE,CAAC,QAApB;;AAEA,UAAM,MAAM,GAAG,yBAAQ,QAAR,CAAf;;AACA,QAAI,MAAJ,EAAY;AACV,MAAA,MAAM,CAAC,IAAP,CAAY,MAAZ;AACD;;AACD,WAAO,MAAP;AACD,GARM,EAQJ,EARI,CAAP;AASD;;AA8CD,SAAS,cAAT,CAAwB,EAAxB,EAA6C;AAC3C,SAAO,uBAAQ,EAAR,KAAe,EAAE,CAAC,KAAH,CAAS,CAAC,IAAI,wBAAS,CAAT,CAAd,CAAf,IAA6C,EAAE,CAAC,MAAH,GAAY,CAAhE;AACD;;AAEK,MAAO,SAAP,SAAyB,sBAAzB,CAAqC;AAOzC,EAAA,WAAA,CAAY,MAAZ,EAAkC,KAAlC,EAAuD;AACrD,UAAM,MAAN;AAEA,SAAK,MAAL,GAAc,KAAd;AACD;;AARM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,SAAJ,CAAc,IAAd,EAAoB,qBAAU,KAAK,MAAf,CAApB,CAAP;AACD;;AAQM,SAAO,iBAAP,CAAyB,MAAzB,EAA+C,cAA/C,EAA6E;AAClF,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA,OAAR;AAAiB,MAAA,EAAjB;AAAqB,MAAA,MAAM,GAAG;AAA9B,QAAwC,cAA9C;AAEA,UAAM,UAAU,GAAa,EAA7B;AACA,UAAM,SAAS,GAAgB,EAA/B;;AACA,QAAI,cAAc,CAAC,IAAf,KAAwB,SAA5B,EAAuC;AACrC,WAAK,MAAM,SAAX,IAAwB,cAAc,CAAC,IAAvC,EAA6C;AAC3C,QAAA,UAAU,CAAC,IAAX,CAAgB,SAAS,CAAC,KAA1B;AACA,QAAA,SAAS,CAAC,IAAV,CAAe,2BAAgB,SAAS,CAAC,KAA1B,EAAiC,WAAjC,CAAf;AACD;AACF;;AACD,UAAM,IAAI,GAAe;AACvB,MAAA,KAAK,EAAE,UADgB;AAEvB,MAAA,KAAK,EAAE;AAFgB,KAAzB;AAIA,QAAI,YAAJ;;AACA,QAAI,cAAc,CAAC,EAAD,CAAlB,EAAwB;AACtB,MAAA,YAAY,GAAG,EAAf;AACD,KAFD,MAEO,IAAI,wBAAS,EAAT,CAAJ,EAAkB;AACvB,MAAA,YAAY,GAAG,CAAC,EAAD,EAAK,EAAE,GAAG,MAAV,CAAf;AACD,KAFM,MAEA;AACL,MAAA,YAAY,GAAG,CAAC,cAAc,CAAC,KAAf,GAAuB,QAAxB,EAAkC,cAAc,CAAC,KAAf,GAAuB,MAAzD,CAAf;AACD;;AAED,WAAO,IAAI,SAAJ,CAAc,MAAd,EAAsB;AAC3B,MAAA,UAAU,EAAE,KADe;AAE3B,MAAA,OAF2B;AAG3B,MAAA,MAH2B;AAI3B,MAAA,IAJ2B;AAK3B,MAAA,OAAO,EAAE,EALkB;AAM3B,MAAA,EAAE,EAAE;AANuB,KAAtB,CAAP;AAQD;;AAEM,SAAO,gBAAP,CAAwB,MAAxB,EAA8C,KAA9C,EAA8D;AACnE,UAAM,eAAe,GAAG,KAAK,CAAC,KAA9B;AACA,UAAM;AAAC,MAAA;AAAD,QAAa,KAAnB;;AAEA,QAAI,CAAC,eAAL,EAAsB;AACpB,aAAO,IAAP;AACD;;AAED,UAAM;AAAC,MAAA,cAAD;AAAiB,MAAA,YAAjB;AAA+B,MAAA,MAA/B;AAAuC,MAAA;AAAvC,QAAiD,eAAvD;AAEA,QAAI,iBAAJ;;AACA,QAAI,cAAJ,EAAoB;AAClB,YAAM,IAAI,GAAG,QAAQ,CAAC,cAAD,CAArB;AACA,MAAA,iBAAiB,GAAG,6BAAY,IAAZ,CAApB,CAFkB,CAEiD;AACpE;;AAED,UAAM,OAAO,GAAG,gBAAgB,CAAC,KAAD,CAAhC;AACA,UAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,KAAhC;AAEA,QAAI,IAAJ;;AACA,QAAI,uBAAQ,QAAR,KAAqB,4BAAW,QAAX,CAAzB,EAA+C;AAC7C,MAAA,IAAI,GAAG,wBAAW,QAAX,CAAP;AACD,KAFD,MAEO;AACL;AACA;AACA,MAAA,IAAI,GAAG,OAAO,CAAC,MAAR,CACL,CAAC,CAAD,EAAI,KAAJ,KAAa;AACX,QAAA,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAa,KAAb;AACA,QAAA,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAa,YAAY,KAAK,GAAjB,GAAuB,YAAvB,GAAsC,WAAnD;AACA,eAAO,CAAP;AACD,OALI,EAML;AAAC,QAAA,KAAK,EAAE,EAAR;AAAY,QAAA,KAAK,EAAE;AAAnB,OANK,CAAP;AAQD;;AAED,WAAO,IAAI,SAAJ,CAAc,MAAd,EAAsB;AAC3B,MAAA,iBAD2B;AAE3B,MAAA,UAAU,EAAE,KAAK,CAAC,OAAN,CAAc,YAAd,CAFe;AAG3B,MAAA,OAAO,EAAE,EAHkB;AAI3B,MAAA,OAJ2B;AAK3B,MAAA,IAL2B;AAM3B,MAAA,MAN2B;AAO3B,MAAA,MAP2B;AAQ3B,MAAA,EAAE,EAAE,CACF,KAAK,CAAC,OAAN,CAAc,YAAd,EAA4B;AAAC,QAAA,MAAM,EAAE,OAAT;AAAkB,QAAA,KAAK,EAAE;AAAzB,OAA5B,CADE,EAEF,KAAK,CAAC,OAAN,CAAc,YAAd,EAA4B;AAAC,QAAA,MAAM,EAAE,KAAT;AAAgB,QAAA,KAAK,EAAE;AAAvB,OAA5B,CAFE;AARuB,KAAtB,CAAP;AAaD;;AAED,MAAI,KAAJ,GAAS;AACP,WAAO,KAAK,MAAZ;AACD;;AAEM,EAAA,aAAa,CAAC,MAAD,EAAiB;AACnC,SAAK,MAAL,CAAY,OAAZ,CAAoB,IAApB,CAAyB,GAAG,MAA5B;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,UAAM,GAAG,GAAG,IAAI,GAAJ,EAAZ;AAEA,IAAA,GAAG,CAAC,GAAJ,CAAQ,KAAK,MAAL,CAAY,UAApB;AAEA,SAAK,gBAAL,GAAwB,OAAxB,CAAgC,GAAG,CAAC,GAApC,EAAyC,GAAzC;;AACA,SAAK,MAAL,CAAY,OAAZ,CAAoB,OAApB,CAA4B,GAAG,CAAC,GAAhC,EAAqC,GAArC;;AACA,SAAK,MAAL,CAAY,IAAZ,CAAiB,KAAjB,CAAuB,OAAvB,CAA+B,GAAG,CAAC,GAAnC,EAAwC,GAAxC;;AAEA,WAAO,GAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,MAAL,CAAY,EAApB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,SAAS,gBAAK,KAAK,MAAV,CAAiB,EAAjC;AACD;;AAEO,EAAA,gBAAgB,GAAA;AACtB,UAAM;AAAC,MAAA,iBAAD;AAAoB,MAAA,MAApB;AAA4B,MAAA;AAA5B,QAAuC,KAAK,MAAlD;;AACA,QAAI,iBAAJ,EAAuB;AACrB,UAAI,iBAAiB,CAAC,GAAtB,EAA2B;AACzB,YAAI,MAAJ,EAAY;AACV;AACA;AACA,iBAAO,CAAC,yBAAQ,iBAAR,EAA2B;AAAC,YAAA,SAAS,EAAE;AAAZ,WAA3B,CAAD,CAAP;AACD;;AACD,eAAO,CACL;AACA,iCAAQ,iBAAR,EAA2B,EAA3B,CAFK,EAGL,yBAAQ,iBAAR,EAA2B;AAAC,UAAA,SAAS,EAAE;AAAZ,SAA3B,CAHK,CAAP;AAKD;;AACD,aAAO,CAAC,yBAAQ,iBAAR,CAAD,CAAP;AACD;;AACD,WAAO,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAA,OAAA,GAAW,EAAlB;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,SAAS,GAAkB,EAAjC;AACA,UAAM;AAAC,MAAA,OAAD;AAAU,MAAA,iBAAV;AAA6B,MAAA,UAAU,EAAE,KAAzC;AAAgD,MAAA,OAAhD;AAAyD,MAAA,IAAzD;AAA+D,MAAA,MAA/D;AAAuE,MAAA,MAAvE;AAA+E,MAAA;AAA/E,QAAqF,KAAK,MAAhG,CAFa,CAIb;;AACA,QAAI,MAAM,IAAI,iBAAd,EAAiC;AAC/B,YAAM;AAAC,QAAA,IAAI,GAAG,GAAR;AAAa,QAAA;AAAb,UAAoB,iBAA1B;;AACA,UAAI,GAAJ,EAAS;AACP;AACA;AACA,QAAA,SAAS,CAAC,IAAV,CAAe;AACb,UAAA,IAAI,EAAE,SADO;AAEb,UAAA,IAAI,EACF,GAAG,IAAI,GAAP,GACA,yBAAQ,iBAAR,EAA2B;AAAC,YAAA,IAAI,EAAE;AAAP,WAA3B,CADA,GAEA,IAAI,IAAI,IAAI,GAFZ,GAGA,yBAAQ,iBAAR,EAA2B;AAAC,YAAA,IAAI,EAAE,OAAP;AAAgB,YAAA,SAAS,EAAE;AAA3B,WAA3B,CANW;AAOb,UAAA,EAAE,EAAE,yBAAQ,iBAAR,EAA2B;AAAC,YAAA,SAAS,EAAE,KAAZ;AAAmB,YAAA,KAAK,EAAE;AAA1B,WAA3B;AAPS,SAAf;AASD;;AAED,MAAA,SAAS,CAAC,IAAV,CAAe;AACb,QAAA,IAAI,EAAE,QADO;AAEb,QAAA,KAFa;AAGb,QAAA,OAAO,EAAE,CAAC,GAAG,OAAJ,EAAa,GAAG,OAAhB,CAHI;AAIb,QAAA,GAAG,EAAE,yBAAQ,iBAAR,EAA2B;AAAC,UAAA,SAAS,EAAE;AAAZ,SAA3B,CAJQ;AAKb,QAAA,MAAM,EAAE,OALK;AAMb,QAAA,KAAK,EAAE;AANM,OAAf;AAQD,KA7BY,CA+Bb;;;AACA,IAAA,SAAS,CAAC,IAAV,CAAe;AACb,MAAA,IAAI,EAAE,OADO;AAEb,MAAA,OAAO,EAAE,CAAC,GAAG,KAAK,gBAAL,EAAJ,EAA6B,GAAG,OAAhC,CAFI;AAGb,MAAA,KAHa;AAIb,MAAA,IAJa;AAKb,MAAA,EALa;AAMb,MAAA;AANa,KAAf;AASA,WAAO,SAAP;AACD;;AA3LwC;;;;;;;;;;;ACtE3C;;AACA;;AAGA;;AAGA;;AAEA;;;AAGM,MAAO,mBAAP,SAAmC,sBAAnC,CAA+C;AAKnD,EAAA,WAAA,CAAY,MAAZ,EAAmD,SAAnD,EAA6E;AAC3E,UAAM,MAAN;AADiD,SAAA,SAAA,GAAA,SAAA;AAElD;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,mBAAJ,CAAwB,IAAxB,EAA8B,qBAAU,KAAK,SAAf,CAA9B,CAAP;AACD;;AAMM,EAAA,aAAa,CAAC,MAAD,EAAiB;AACnC,SAAK,SAAL,CAAe,OAAf,GAAyB,kBAAO,KAAK,SAAL,CAAe,OAAf,CAAuB,MAAvB,CAA8B,MAA9B,CAAP,EAA8C,CAAC,IAAI,CAAnD,CAAzB;AACD;;AAEM,EAAA,eAAe,GAAA;;;AACpB,UAAM,GAAG,GAAG,IAAI,GAAJ,EAAZ;AAEA,KAAA,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA3B,EAA+B,OAA/B,CAAuC,GAAG,CAAC,GAA3C,EAAgD,GAAhD;AACA,KAAA,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,IAAhB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,EAAxB,EAA4B,OAA5B,CAAoC,CAAC,IAAI,GAAG,CAAC,GAAJ,CAAQ,CAAC,CAAC,KAAV,CAAzC;AAEA,SAAK,SAAL,CAAe,MAAf,CACG,GADH,CACO,CAAC,IAAI,CAAC,CAAC,KADd,EAEG,MAFH,CAEU,CAAC,IAAI,CAAC,KAAK,SAFrB,EAGG,OAHH,CAGW,GAAG,CAAC,GAHf,EAGoB,GAHpB;AAKA,WAAO,GAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,MAAf,CAAsB,GAAtB,CAA0B,KAAK,cAA/B,CAAR,CAAP;AACD;;AAEO,EAAA,cAAc,CAAC,cAAD,EAA+B;;;AACnD,WAAA,CAAA,EAAA,GAAO,cAAc,CAAC,EAAtB,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA4B,yBAAQ,cAAR,CAA5B;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,mBAAmB,gBAAK,KAAK,SAAV,CAAoB,EAA9C;AACD;;AAEM,EAAA,QAAQ,GAAA;;;AACb,UAAM,MAAM,GAAa,EAAzB;AACA,UAAM,GAAG,GAAmC,EAA5C;AACA,UAAM,EAAE,GAAa,EAArB;AACA,UAAM,MAAM,GAAG,EAAf;;AAEA,SAAK,MAAM,MAAX,IAAqB,KAAK,SAAL,CAAe,MAApC,EAA4C;AAC1C,MAAA,GAAG,CAAC,IAAJ,CAAS,MAAM,CAAC,EAAhB;AACA,MAAA,EAAE,CAAC,IAAH,CAAQ,KAAK,cAAL,CAAoB,MAApB,CAAR;AACA,MAAA,MAAM,CAAC,IAAP,CAAY,MAAM,CAAC,KAAP,KAAiB,SAAjB,GAA6B,IAA7B,GAAoC,MAAM,CAAC,KAAvD;AACA,MAAA,MAAM,CAAC,IAAP,CAAY,MAAM,CAAC,KAAP,KAAiB,SAAjB,GAA6B,IAA7B,GAAoC,MAAM,CAAC,KAAvD;AACD;;AAED,UAAM,KAAK,GAAG,KAAK,SAAL,CAAe,KAA7B;AACA,UAAM,OAAO,GAAG,KAAK,SAAL,CAAe,OAA/B;;AAEA,QAAI,KAAK,IAAI,KAAK,CAAC,CAAD,CAAL,KAAa,IAAtB,IAA8B,KAAK,CAAC,CAAD,CAAL,KAAa,IAA3C,IAAmD,GAAG,CAAC,KAAJ,CAAU,CAAC,IAAI,8BAAc,CAAd,CAAf,CAAvD,EAAyF;AACvF;AACA,aAAO,MAAA,CAAA,MAAA,CAAA;AACL,QAAA,IAAI,EAAE,eADD;AAEL,QAAA,EAFK;AAGL,QAAA,GAAG,EAAE,GAHA;AAIL,QAAA;AAJK,OAAA,EAKD,OAAO,KAAK,SAAZ,GAAwB;AAAC,QAAA;AAAD,OAAxB,GAAoC,EALnC,CAAP;AAOD;;AAED,UAAM,UAAU,GAAa,EAA7B;AACA,UAAM,SAAS,GAAgB,EAA/B;;AACA,QAAI,KAAK,SAAL,CAAe,IAAf,KAAwB,SAA5B,EAAuC;AACrC,WAAK,MAAM,SAAX,IAAwB,KAAK,SAAL,CAAe,IAAvC,EAA6C;AAC3C,QAAA,UAAU,CAAC,IAAX,CAAgB,SAAS,CAAC,KAA1B;AACA,QAAA,SAAS,CAAC,IAAV,CAAc,CAAA,EAAA,GAAC,SAAS,CAAC,KAAX,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,WAAlC;AACD;AACF;;AACD,UAAM,IAAI,GAAiB;AACzB,MAAA,KAAK,EAAE,UADkB;AAEzB,MAAA,KAAK,EAAE;AAFkB,KAA3B;AAIA,UAAM,WAAW,GAAG,KAAK,SAAL,CAAe,WAAnC;AAEA,WAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACL,MAAA,IAAI,EAAE,QADD;AAEL,MAAA,MAFK;AAGL,MAAA,EAHK;AAIL,MAAA,GAJK;AAKL,MAAA,MALK;AAML,MAAA;AANK,KAAA,EAOD,WAAW,KAAK,SAAhB,GAA4B;AAAC,MAAA;AAAD,KAA5B,GAA4C,EAP3C,CAAA,EAQD,OAAO,KAAK,SAAZ,GAAwB;AAAC,MAAA;AAAD,KAAxB,GAAoC,EARnC,CAAA,EASD,KAAK,KAAK,SAAV,GAAsB;AAAC,MAAA;AAAD,KAAtB,GAAgC,EAT/B,CAAP;AAWD;;AA3FkD;;;;;;;;;;;;ACbrD;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAaA;;;AAGM,MAAO,WAAP,SAA2B,4BAA3B,CAA4C;AACzC,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB,CAD2B,CAE3B;;AACA,QAAI,IAAI,YAAY,sBAApB,EAA+B;AAC7B,UAAI,iCAAiB,MAAjB,CAAJ,EAA8B;AAC5B,eAAO,KAAK,KAAZ;AACD;;AAED,UAAI,MAAM,CAAC,WAAP,KAAuB,CAA3B,EAA8B;AAC5B;AACA,aAAK,WAAL;AACA,eAAO,KAAK,KAAZ;AACD;;AAED,UAAI,MAAM,YAAY,sBAAtB,EAAiC;AAC/B,aAAK,UAAL;AACA,QAAA,MAAM,CAAC,KAAP,CAAa,IAAb;AACD,OAHD,MAGO;AACL;AACA,YAAI,6BAAkB,MAAM,CAAC,cAAP,EAAlB,EAA2C,IAAI,CAAC,eAAL,EAA3C,CAAJ,EAAwE;AACtE,eAAK,WAAL;AACA,iBAAO,KAAK,KAAZ;AACD;;AACD,aAAK,UAAL;AACA,QAAA,IAAI,CAAC,cAAL;AACD;AACF;;AACD,SAAK,WAAL;AACA,WAAO,KAAK,KAAZ;AACD;;AA9B+C;AAiClD;;;;;;;;;AAKM,MAAO,mBAAP,SAAmC,2BAAnC,CAAmD;AAChD,EAAA,UAAU,CAAC,MAAD,EAAuB,KAAvB,EAA4C;AAC3D,UAAM,UAAU,GAAG,KAAK,CAAC,KAAN,EAAnB;;AACA,SAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,MAAA,MAAM,CAAC,WAAP,CAAmB,IAAnB;AACA,MAAA,IAAI,CAAC,MAAL,GAAc,UAAd;AACA,MAAA,IAAI,CAAC,MAAL;AACD;AACF;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,GAAd,CAAkB,CAAC,IAAI,CAAC,CAAC,IAAF,EAAvB,CAAf;AACA,UAAM,OAAO,GAA4B,EAAzC;;AAEA,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,MAAM,CAAC,MAA3B,EAAmC,CAAC,EAApC,EAAwC;AACtC,UAAI,OAAO,CAAC,MAAM,CAAC,CAAD,CAAP,CAAP,KAAuB,SAA3B,EAAsC;AACpC,QAAA,OAAO,CAAC,MAAM,CAAC,CAAD,CAAP,CAAP,GAAqB,CAAC,IAAI,CAAC,QAAL,CAAc,CAAd,CAAD,CAArB;AACD,OAFD,MAEO;AACL,QAAA,OAAO,CAAC,MAAM,CAAC,CAAD,CAAP,CAAP,CAAmB,IAAnB,CAAwB,IAAI,CAAC,QAAL,CAAc,CAAd,CAAxB;AACD;AACF;;AAED,SAAK,MAAM,CAAX,IAAgB,gBAAK,OAAL,CAAhB,EAA+B;AAC7B,UAAI,OAAO,CAAC,CAAD,CAAP,CAAW,MAAX,GAAoB,CAAxB,EAA2B;AACzB,aAAK,UAAL;AACA,aAAK,UAAL,CAAgB,IAAhB,EAAsB,OAAO,CAAC,CAAD,CAA7B;AACD;AACF;;AACD,SAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,WAAK,GAAL,CAAS,KAAT;AACD;;AACD,WAAO,KAAK,WAAZ;AACD;;AAhCsD;AAmCzD;;;;;;;;;AAKM,MAAO,oBAAP,SAAoC,4BAApC,CAAqD;AAClD,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,QAAI,IAAI,YAAY,oBAAhB,IAA8B,IAAI,CAAC,WAAL,KAAqB,CAAnD,IAAwD,IAAI,YAAY,gBAA5E,EAAuF;AACrF;AACA,aAAO,KAAK,KAAZ;AACD,KAHD,MAGO;AACL,WAAK,UAAL;AACA,MAAA,IAAI,CAAC,MAAL;AACD;;AACD,WAAO,KAAK,KAAZ;AACD;;AAVwD;AAa3D;;;;;;;;;;;;;AASM,MAAO,wBAAP,SAAwC,4BAAxC,CAAyD;AAA/D,EAAA,WAAA,GAAA;;AACU,SAAA,MAAA,GAAS,IAAI,GAAJ,EAAT;AACA,SAAA,IAAA,GAAqB,IAArB;AAmBT;;AAlBQ,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,SAAK,WAAL;;AACA,QAAI,IAAI,YAAY,sBAApB,EAAkC;AAChC,YAAM,OAAO,GAAG,IAAI,CAAC,cAAL,EAAhB;;AACA,UAAI,2BAAgB,OAAhB,EAAyB,KAAK,MAA9B,CAAJ,EAA2C;AACzC,aAAK,UAAL;AACA,aAAK,IAAL,CAAU,MAAV;AACD,OAHD,MAGO;AACL,aAAK,MAAL,GAAc,IAAI,GAAJ,CAAQ,CAAC,GAAG,KAAK,MAAT,EAAiB,GAAG,OAApB,CAAR,CAAd;AACD;;AACD,WAAK,IAAL,GAAY,IAAZ;AACD;;AACD,WAAO,KAAK,KAAZ;AACD;;AAEM,EAAA,KAAK,GAAA;AACV,SAAK,MAAL,CAAY,KAAZ;AACD;;AApB4D;AAuB/D;;;;;;;AAGM,MAAO,cAAP,SAA8B,4BAA9B,CAA+C;AAC5C,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,SAAK,WAAL;AACA,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB;AACA,UAAM,gBAAgB,GAAG,MAAM,CAAC,QAAP,CAAgB,MAAhB,CAAuB,CAAC,IAAI,CAAC,YAAY,sBAAzC,CAAzB;AACA,UAAM,WAAW,GAAG,gBAAgB,CAAC,GAAjB,EAApB;;AACA,SAAK,MAAM,QAAX,IAAuB,gBAAvB,EAAyC;AACvC,WAAK,UAAL;AACA,MAAA,WAAW,CAAC,KAAZ,CAAkB,QAAlB;AACD;;AACD,WAAO,KAAK,KAAZ;AACD;;AAXkD;AAcrD;;;;;;;AAGA,SAAS,YAAT,CAAsB,KAAtB,EAAsC;AACpC,WAAS,KAAT,CAAe,IAAf,EAAiC;AAC/B,QAAI,EAAE,IAAI,YAAY,gBAAlB,CAAJ,EAAkC;AAChC,YAAM,IAAI,GAAG,IAAI,CAAC,KAAL,EAAb;;AAEA,UAAI,IAAI,YAAY,oBAApB,EAAgC;AAC9B,cAAM,OAAO,GAAG,+BAAqB,IAAI,CAAC,SAAL,EAArC;AACA,QAAA,IAAI,CAAC,SAAL,CAAe,OAAf;AAEA,QAAA,KAAK,CAAC,KAAN,CAAY,SAAZ,CAAsB,IAAtB,CAA2B,WAA3B,CAAuC,OAAvC,IAAkD,IAAlD;AACD,OALD,MAKO,IACL,IAAI,YAAY,wBAAhB,IACA,IAAI,YAAY,gBADhB,IAEA,IAAI,YAAY,2BAFhB,IAGA,IAAI,YAAY,yCAJX,EAKL;AACA,QAAA,IAAI,CAAC,aAAL,CAAmB,KAAK,CAAC,MAAzB;AACD;;AACD,WAAK,MAAM,CAAX,IAAgB,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAAhB,EAA8C;AAC5C,QAAA,CAAC,CAAC,MAAF,GAAW,IAAX;AACD;;AAED,aAAO,CAAC,IAAD,CAAP;AACD;;AAED,WAAO,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAAP;AACD;;AACD,SAAO,KAAP;AACD;AAED;;;;;;AAIM,SAAU,aAAV,CAAwB,IAAxB,EAA0C;AAC9C,MAAI,IAAI,YAAY,gBAApB,EAA+B;AAC7B,QAAI,IAAI,CAAC,WAAL,OAAuB,CAAvB,IAA4B,EAAE,IAAI,CAAC,QAAL,CAAc,CAAd,aAA4B,oBAA9B,CAAhC,EAA2E;AACzE;AACA,YAAM,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,CAAd,CAAd;;AAEA,UACE,KAAK,YAAY,wBAAjB,IACA,KAAK,YAAY,gBADjB,IAEA,KAAK,YAAY,2BAFjB,IAGA,KAAK,YAAY,yCAJnB,EAKE;AACA,QAAA,KAAK,CAAC,aAAN,CAAoB,IAAI,CAAC,MAAzB;AACD;;AAED,MAAA,KAAK,CAAC,cAAN;AACA,MAAA,aAAa,CAAC,IAAD,CAAb;AACD,KAfD,MAeO;AACL;AAEA,YAAM,SAAS,GAAG,IAAI,CAAC,KAAL,CAAW,SAAX,CAAqB,IAArB,CAA0B,IAA5C;AACA,MAAA,mBAAmB,CAAC,SAAD,CAAnB,CAJK,CAML;;AACA,YAAM,MAAM,GAAG,YAAY,CAAC,IAAD,CAA3B;AACA,YAAM,IAAI,GAAmB,IAAI,CAAC,QAAL,CAAc,GAAd,CAAkB,MAAlB,EAA0B,IAA1B,EAA7B;;AACA,WAAK,MAAM,CAAX,IAAgB,IAAhB,EAAsB;AACpB,QAAA,CAAC,CAAC,MAAF,GAAW,SAAX;AACD;AACF;AACF,GA7BD,MA6BO;AACL,IAAA,IAAI,CAAC,QAAL,CAAc,GAAd,CAAkB,aAAlB;AACD;AACF;;AAED,SAAS,mBAAT,CAA6B,IAA7B,EAA+C;AAC7C,MAAI,IAAI,YAAY,oBAAhB,IAA8B,IAAI,CAAC,IAAL,KAAc,UAAhD,EAAsD;AACpD,QAAI,IAAI,CAAC,WAAL,OAAuB,CAA3B,EAA8B;AAC5B,YAAM,KAAK,GAAG,IAAI,CAAC,QAAL,CAAc,CAAd,CAAd;;AACA,UAAI,EAAE,KAAK,YAAY,gBAAnB,CAAJ,EAAmC;AACjC,QAAA,KAAK,CAAC,cAAN;AACA,QAAA,mBAAmB,CAAC,IAAD,CAAnB;AACD;AACF;AACF;AACF;AAED;;;;;AAGM,MAAO,4BAAP,SAA4C,2BAA5C,CAA4D;AAChE,EAAA,WAAA,GAAA;AACE;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,QAAI,IAAI,YAAY,oBAAhB,IAA8B,CAAC,IAAI,CAAC,UAAL,EAAnC,EAAsD;AACpD,WAAK,UAAL;AACA,MAAA,IAAI,CAAC,MAAL;AACD;;AAED,SAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,WAAK,GAAL,CAAS,KAAT;AACD;;AAED,WAAO,KAAK,WAAZ;AACD;;AAhB+D;;;;AAmB5D,MAAO,gCAAP,SAAgD,2BAAhD,CAAgE;AAEpE,EAAA,WAAA,CAAY,KAAZ,EAAwB;AACtB;AACA,SAAK,mBAAL,GAA2B,KAAK,IAAI,oCAAoB,KAApB,CAApC;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,QAAI,IAAI,YAAY,0BAApB,EAAoC;AAClC;AACA;AACA,UACE,EACE,KAAK,mBAAL,KACC,iCAAiB,IAAI,CAAC,MAAtB,KAAiC,IAAI,CAAC,MAAL,YAAuB,wBAAxD,IAAyE,IAAI,CAAC,MAAL,YAAuB,sBADjG,CADF,CADF,EAKE;AACA,aAAK,UAAL;AACA,QAAA,IAAI,CAAC,MAAL;AACD;AACF;;AAED,SAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,WAAK,GAAL,CAAS,KAAT;AACD;;AAED,WAAO,KAAK,WAAZ;AACD;;AA3BmE;AA8BtE;;;;;;;;;AAKM,MAAO,UAAP,SAA0B,4BAA1B,CAA2C;AACxC,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB;AACA,UAAM,gBAAgB,GAAG,CAAC,GAAG,MAAM,CAAC,QAAX,CAAzB;AACA,UAAM,aAAa,GAAG,MAAM,CAAC,QAAP,CAAgB,MAAhB,CAAwB,KAAD,IAA+B,KAAK,YAAY,sBAAvE,CAAtB;;AAEA,QAAI,MAAM,CAAC,WAAP,KAAuB,CAAvB,IAA4B,aAAa,CAAC,MAAd,IAAwB,CAAxD,EAA2D;AACzD,YAAM,WAAW,GAAU,EAA3B;AACA,YAAM,gBAAgB,GAAG,IAAI,GAAJ,EAAzB;;AACA,WAAK,MAAM,SAAX,IAAwB,aAAxB,EAAuC;AACrC,cAAM,KAAK,GAAG,SAAS,CAAC,KAAxB;;AACA,aAAK,MAAM,CAAX,IAAgB,gBAAK,KAAL,CAAhB,EAA6B;AAC3B,cAAI,EAAE,CAAC,IAAI,WAAP,CAAJ,EAAyB;AACvB,YAAA,WAAW,CAAC,CAAD,CAAX,GAAiB,KAAK,CAAC,CAAD,CAAtB;AACD,WAFD,MAEO,IAAI,WAAW,CAAC,CAAD,CAAX,KAAmB,KAAK,CAAC,CAAD,CAA5B,EAAiC;AACtC,YAAA,gBAAgB,CAAC,GAAjB,CAAqB,CAArB;AACD;AACF;AACF;;AAED,WAAK,MAAM,KAAX,IAAoB,gBAApB,EAAsC;AACpC,eAAO,WAAW,CAAC,KAAD,CAAlB;AACD;;AAED,UAAI,CAAC,mBAAQ,WAAR,CAAL,EAA2B;AACzB,aAAK,UAAL;AACA,cAAM,eAAe,GAAG,IAAI,sBAAJ,CAAc,MAAd,EAAsB,WAAtB,CAAxB;;AACA,aAAK,MAAM,SAAX,IAAwB,gBAAxB,EAA0C;AACxC,cAAI,SAAS,YAAY,sBAAzB,EAAoC;AAClC,iBAAK,MAAM,GAAX,IAAkB,gBAAK,WAAL,CAAlB,EAAqC;AACnC,qBAAO,SAAS,CAAC,KAAV,CAAgB,GAAhB,CAAP;AACD;AACF;;AAED,UAAA,MAAM,CAAC,WAAP,CAAmB,SAAnB;AACA,UAAA,SAAS,CAAC,MAAV,GAAmB,eAAnB,CARwC,CAUxC;;AACA,cAAI,SAAS,YAAY,sBAArB,IAAkC,gBAAK,SAAS,CAAC,KAAf,EAAsB,MAAtB,KAAiC,CAAvE,EAA0E;AACxE,YAAA,SAAS,CAAC,MAAV;AACD;AACF;AACF;AACF;;AAED,SAAK,WAAL;AACA,WAAO,KAAK,KAAZ;AACD;;AA/C8C;;;;AAkD3C,MAAO,eAAP,SAA+B,4BAA/B,CAAgD;AAC7C,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB;AACA,UAAM,WAAW,GAAG,MAAM,CAAC,QAAP,CAAgB,MAAhB,CAAwB,KAAD,IAAmC,KAAK,YAAY,wBAA3E,CAApB,CAF2B,CAI3B;AACA;AACA;;AACA,UAAM,iBAAiB,GAA0B,EAAjD,CAP2B,CAS3B;;AACA,SAAK,MAAM,GAAX,IAAkB,WAAlB,EAA+B;AAC7B,YAAM,QAAQ,GAAG,gBAAK,GAAG,CAAC,OAAT,CAAjB;;AACA,UAAI,EAAE,QAAQ,IAAI,iBAAd,CAAJ,EAAsC;AACpC,QAAA,iBAAiB,CAAC,QAAD,CAAjB,GAA8B,EAA9B;AACD;;AACD,MAAA,iBAAiB,CAAC,QAAD,CAAjB,CAA4B,IAA5B,CAAiC,GAAjC;AACD,KAhB0B,CAkB3B;;;AACA,SAAK,MAAM,KAAX,IAAoB,gBAAK,iBAAL,CAApB,EAA6C;AAC3C,YAAM,aAAa,GAAG,iBAAiB,CAAC,KAAD,CAAvC;;AACA,UAAI,aAAa,CAAC,MAAd,GAAuB,CAA3B,EAA8B;AAC5B,cAAM,UAAU,GAAG,aAAa,CAAC,GAAd,EAAnB;;AACA,aAAK,MAAM,GAAX,IAAkB,aAAlB,EAAiC;AAC/B,cAAI,UAAU,CAAC,KAAX,CAAiB,GAAjB,CAAJ,EAA2B;AACzB,YAAA,MAAM,CAAC,WAAP,CAAmB,GAAnB;AACA,YAAA,GAAG,CAAC,MAAJ,GAAa,UAAb;AACA,YAAA,GAAG,CAAC,MAAJ;AAEA,iBAAK,UAAL;AACD;AACF;AACF;AACF;;AAED,SAAK,WAAL;AACA,WAAO,KAAK,KAAZ;AACD;;AAtCmD;AAyCtD;;;;;;;AAGM,MAAO,SAAP,SAAyB,4BAAzB,CAA0C;AAC9C,EAAA,WAAA,CAAoB,KAApB,EAAgC;AAC9B;AADkB,SAAA,KAAA,GAAA,KAAA;AAEnB;;AACM,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB;AACA,UAAM,UAAU,GAAG,EACjB,iCAAiB,MAAjB,KACA,MAAM,YAAY,kBADlB,IAEA,MAAM,YAAY,sBAFlB,IAGA,MAAM,YAAY,0BAJD,CAAnB;AAOA,UAAM,cAAc,GAAc,EAAlC;AACA,UAAM,aAAa,GAAc,EAAjC;;AAEA,SAAK,MAAM,KAAX,IAAoB,MAAM,CAAC,QAA3B,EAAqC;AACnC,UAAI,KAAK,YAAY,YAArB,EAA8B;AAC5B,YAAI,UAAU,IAAI,CAAC,6BAAkB,MAAM,CAAC,cAAP,EAAlB,EAA2C,KAAK,CAAC,eAAN,EAA3C,CAAnB,EAAwF;AACtF,UAAA,cAAc,CAAC,IAAf,CAAoB,KAApB;AACD,SAFD,MAEO;AACL,UAAA,aAAa,CAAC,IAAd,CAAmB,KAAnB;AACD;AACF;AACF;;AAED,QAAI,cAAc,CAAC,MAAf,GAAwB,CAA5B,EAA+B;AAC7B,YAAM,WAAW,GAAG,cAAc,CAAC,GAAf,EAApB;;AACA,WAAK,MAAM,GAAX,IAAkB,cAAlB,EAAkC;AAChC,QAAA,WAAW,CAAC,KAAZ,CAAkB,GAAlB,EAAuB,KAAK,KAAL,CAAW,YAAX,CAAwB,IAAxB,CAA6B,KAAK,KAAlC,CAAvB;AACD;;AACD,WAAK,UAAL;;AACA,UAAI,MAAM,YAAY,YAAtB,EAA+B;AAC7B,QAAA,MAAM,CAAC,KAAP,CAAa,WAAb,EAA0B,KAAK,KAAL,CAAW,YAAX,CAAwB,IAAxB,CAA6B,KAAK,KAAlC,CAA1B;AACD,OAFD,MAEO;AACL,QAAA,WAAW,CAAC,cAAZ;AACD;AACF;;AACD,QAAI,aAAa,CAAC,MAAd,GAAuB,CAA3B,EAA8B;AAC5B,YAAM,YAAY,GAAG,aAAa,CAAC,GAAd,EAArB;;AACA,WAAK,MAAM,GAAX,IAAkB,aAAlB,EAAiC;AAC/B,QAAA,YAAY,CAAC,KAAb,CAAmB,GAAnB,EAAwB,KAAK,KAAL,CAAW,YAAX,CAAwB,IAAxB,CAA6B,KAAK,KAAlC,CAAxB;AACD;;AACD,WAAK,UAAL;AACD;;AACD,SAAK,WAAL;AACA,WAAO,KAAK,KAAZ;AACD;;AA/C6C;AAkDhD;;;;;;;;;;;AAOM,MAAO,YAAP,SAA4B,4BAA5B,CAA6C;AAC1C,EAAA,GAAG,CAAC,IAAD,EAAmB;AAC3B,UAAM,MAAM,GAAG,IAAI,CAAC,MAApB;AACA,UAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAX,CAAjB;AACA,UAAM,cAAc,GAAG,gBAAK,QAAL,EAAe,KAAK,IAAI,KAAK,YAAY,oBAAzC,CAAvB;;AAEA,QAAI,CAAC,cAAD,IAAmB,MAAM,CAAC,WAAP,MAAwB,CAA/C,EAAkD;AAChD,WAAK,WAAL;AACA,aAAO,KAAK,KAAZ;AACD;;AAED,UAAM,aAAa,GAAmB,EAAtC,CAV2B,CAY3B;AACA;;AACA,QAAI,UAAJ;;AAEA,SAAK,MAAM,KAAX,IAAoB,QAApB,EAA8B;AAC5B,UAAI,KAAK,YAAY,oBAArB,EAAiC;AAC/B,YAAI,UAAU,GAAG,KAAjB;;AAEA,eAAO,UAAU,CAAC,WAAX,OAA6B,CAApC,EAAuC;AACrC,gBAAM,QAAQ,GAAG,UAAU,CAAC,QAAX,CAAoB,CAApB,CAAjB;;AACA,cAAI,QAAQ,YAAY,oBAAxB,EAAoC;AAClC,YAAA,UAAU,GAAG,QAAb;AACD,WAFD,MAEO;AACL;AACD;AACF;;AAED,QAAA,aAAa,CAAC,IAAd,CAAmB,GAAG,UAAU,CAAC,QAAjC;;AAEA,YAAI,UAAJ,EAAgB;AACd;AACA;AACA;AAEA;AACA,UAAA,MAAM,CAAC,WAAP,CAAmB,KAAnB;AACA,UAAA,KAAK,CAAC,MAAN,GAAe,UAAU,CAAC,MAA1B;AAEA,UAAA,UAAU,CAAC,MAAX,CAAkB,WAAlB,CAA8B,UAA9B;AACA,UAAA,UAAU,CAAC,MAAX,GAAoB,UAApB;AAEA,eAAK,UAAL;AACD,SAbD,MAaO;AACL,UAAA,UAAU,GAAG,UAAb;AACD;AACF,OA9BD,MA8BO;AACL,QAAA,aAAa,CAAC,IAAd,CAAmB,KAAnB;AACD;AACF;;AAED,QAAI,aAAa,CAAC,MAAlB,EAA0B;AACxB,WAAK,UAAL;;AACA,WAAK,MAAM,KAAX,IAAoB,aAApB,EAAmC;AACjC,QAAA,KAAK,CAAC,MAAN,CAAa,WAAb,CAAyB,KAAzB;AACA,QAAA,KAAK,CAAC,MAAN,GAAe,UAAf;AACD;AACF;;AAED,SAAK,WAAL;AACA,WAAO,KAAK,KAAZ;AACD;;AA/DgD;;;;;;;;;;;;;ACjdnD;;AAGA;;AAEA;;AACA;;;;;;AAEO,MAAM,kBAAkB,GAAG,QAA3B;;AACA,MAAM,qBAAqB,GAAG,CAA9B;AAEP;;;;;;AAGA,SAAS,SAAT,CAAmB,KAAnB,EAAwC;AACtC,QAAM,MAAM,GAAmB,EAA/B;;AACA,WAAS,MAAT,CAAgB,IAAhB,EAAkC;AAChC,QAAI,IAAI,CAAC,WAAL,OAAuB,CAA3B,EAA8B;AAC5B,MAAA,MAAM,CAAC,IAAP,CAAY,IAAZ;AACD,KAFD,MAEO;AACL,WAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,QAAA,MAAM,CAAC,KAAD,CAAN;AACD;AACF;AACF;;AAED,OAAK,MAAM,KAAX,IAAoB,KAApB,EAA2B;AACzB,IAAA,MAAM,CAAC,KAAD,CAAN;AACD;;AACD,SAAO,MAAP;AACD;;AAEK,SAAU,MAAV,CAAiB,CAAjB,EAA2B;AAC/B,SAAO,CAAP;AACD;AAED;;;;;;;;;AAOA,SAAS,YAAT,CAAsB,SAAtB,EAAuE,KAAvE,EAA4F;AAC1F,QAAM,KAAK,GAAG,KAAK,CAAC,GAAN,CAAU,IAAI,IAAG;AAC7B,QAAI,SAAS,YAAY,4BAAzB,EAA4C;AAC1C,YAAM,QAAQ,GAAG,SAAS,CAAC,sBAAV,CAAiC,IAAjC,CAAjB;AACA,MAAA,SAAS,CAAC,KAAV;AACA,aAAO,QAAP;AACD,KAJD,MAIO;AACL,aAAO,SAAS,CAAC,GAAV,CAAc,IAAd,CAAP;AACD;AACF,GARa,CAAd;AASA,SAAO,KAAK,CAAC,IAAN,CAAW,MAAX,CAAP;AACD;;AAED,SAAS,0BAAT,CAAoC,aAApC,EAAkE,KAAlE,EAA8E;AAC5E,MAAI,KAAK,GAAG,aAAa,CAAC,OAA1B;AACA,QAAM,YAAY,GAAiB,IAAI,GAAJ,EAAnC;AAEA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,4BAAf,EAAD,EAAgD,KAAhD,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,gCAAf,CAAgD,KAAhD,CAAD,EAAyD,KAAzD,CAA7B,EAL4E,CAO5E;;AACA,EAAA,KAAK,GAAG,KAAK,CAAC,MAAN,CAAa,CAAC,IAAI,CAAC,CAAC,WAAF,KAAkB,CAApC,CAAR;AAEA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,oBAAf,EAAD,EAAwC,SAAS,CAAC,KAAD,CAAjD,CAA7B;AAEA,EAAA,KAAK,GAAG,KAAK,CAAC,MAAN,CAAa,CAAC,IAAI,CAAC,CAAC,WAAF,KAAkB,CAApC,CAAR;AAEA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,WAAf,EAAD,EAA+B,SAAS,CAAC,KAAD,CAAxC,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,SAAf,CAAyB,KAAzB,CAAD,EAAkC,SAAS,CAAC,KAAD,CAA3C,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,wBAAf,EAAD,EAA4C,SAAS,CAAC,KAAD,CAArD,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,UAAf,EAAD,EAA8B,SAAS,CAAC,KAAD,CAAvC,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,eAAf,EAAD,EAAmC,SAAS,CAAC,KAAD,CAA5C,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,cAAf,EAAD,EAAkC,SAAS,CAAC,KAAD,CAA3C,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,mBAAf,EAAD,EAAuC,KAAvC,CAA7B;AACA,EAAA,YAAY,CAAC,GAAb,CAAiB,YAAY,CAAC,IAAI,UAAU,CAAC,YAAf,EAAD,EAAgC,SAAS,CAAC,KAAD,CAAzC,CAA7B;AAEA,EAAA,aAAa,CAAC,OAAd,GAAwB,KAAxB;AAEA,SAAO,YAAY,CAAC,GAAb,CAAiB,IAAjB,CAAP;AACD;AAED;;;;;AAGM,SAAU,gBAAV,CAA2B,IAA3B,EAAgD,KAAhD,EAA4D;AAChE;AACA,yBAAW,IAAI,CAAC,OAAhB;AAEA,MAAI,gBAAgB,GAAG,CAAvB;AACA,MAAI,iBAAiB,GAAG,CAAxB;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,qBAApB,EAA2C,CAAC,EAA5C,EAAgD;AAC9C,QAAI,CAAC,0BAA0B,CAAC,IAAD,EAAO,KAAP,CAA/B,EAA8C;AAC5C;AACD;;AACD,IAAA,gBAAgB;AACjB,GAZ+D,CAchE;;;AACA,EAAA,IAAI,CAAC,OAAL,CAAa,GAAb,CAAiB,UAAU,CAAC,aAA5B;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,qBAApB,EAA2C,CAAC,EAA5C,EAAgD;AAC9C,QAAI,CAAC,0BAA0B,CAAC,IAAD,EAAO,KAAP,CAA/B,EAA8C;AAC5C;AACD;;AACD,IAAA,iBAAiB;AAClB,GAtB+D,CAwBhE;;;AACA,yBAAW,IAAI,CAAC,OAAhB;;AAEA,MAAI,IAAI,CAAC,GAAL,CAAS,gBAAT,EAA2B,iBAA3B,MAAkD,qBAAtD,EAA6E;AAC3E,IAAA,GAAG,CAAC,IAAJ,CAAS,6BAA6B,qBAAqB,YAA3D;AACD;AACF;;;;;;;;;ACjHD;;;;AAIM,MAAO,gBAAP,CAAuB;AAC3B,EAAA,WAAA,CAAY,aAAZ,EAAuC;AACrC,IAAA,MAAM,CAAC,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;AACpC,MAAA,UAAU,EAAE,IADwB;AAEpC,MAAA,GAAG,EAAE;AAF+B,KAAtC;AAID;;AAIM,SAAO,QAAP,CAAgB,MAAhB,EAAgC,UAAhC,EAAkD;AACvD,WAAO,IAAI,gBAAJ,CAAqB,MAAM,MAAM,CAAC,UAAD,CAAjC,CAAP;AACD;;AAZ0B;;;;;;;;;;;;;;;;;;;ACP7B;;AACA;;AAQA;;AACA;;AACA;;AAYA;;AAEA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AAYA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAIM,SAAU,gBAAV,CAA2B,KAA3B,EAAuC;AAC3C,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,IAAA,oBAAoB,CAAC,KAAD,CAApB;AACD,GAFD,MAEO;AACL,IAAA,uBAAuB,CAAC,KAAD,CAAvB;AACD;AACF;;AAED,SAAS,oBAAT,CAA8B,KAA9B,EAA8C;AAC5C,QAAM,oBAAoB,GAAwB,KAAK,CAAC,SAAN,CAAgB,MAAlE;;AAEA,OAAK,MAAM,OAAX,IAAsB,IAAI,CAAC,IAAL,CAAU,oBAAV,CAAtB,EAAuD;AACrD,UAAM,OAAO,GAAG,qBAAqB,CAAC,KAAD,EAAQ,OAAR,CAArC;AACA,UAAM,cAAc,GAAG,oBAAoB,CAAC,OAAD,CAA3C;AACA,IAAA,cAAc,CAAC,eAAf,CAA+B,SAA/B,EAA0C,OAA1C;AACA,IAAA,oBAAoB,CAAC,KAAD,EAAQ,OAAR,CAApB;;AAEA,QAAI,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,SAAzB,EAAoC;AAClC;AACA,UAAI,WAAW,GAAU,KAAzB;;AACA,aAAO,CAAC,yBAAa,WAAb,CAAD,IAA8B,WAAW,CAAC,MAAjD,EAAyD;AACvD,QAAA,WAAW,GAAG,WAAW,CAAC,MAA1B;AACD;;AAED,YAAM,OAAO,GAAG,WAAW,CAAC,SAAZ,CAAsB,OAAtB,CAA8B,KAA9B,CAAoC,OAApC,CAAhB;;AAEA,UAAI,OAAO,KAAK,QAAhB,EAA0B;AACxB,aAAK,MAAM,MAAX,IAAqB,OAAO,CAAC,KAA7B,EAAoC;AAClC;AACA,cAAI,2BAAgB,MAAhB,CAAJ,EAA6B;AAC3B;AACA,YAAA,MAAM,CAAC,IAAP,GAAc,+BAAqB,MAAM,CAAC,IAAP,CAAY,OAAZ,CAAoB,4BAApB,EAAwC,EAAxC,CAAnC;AACD;AACF;AACF;AACF;AACF;AACF;;AAED,SAAS,uBAAT,CAAiC,KAAjC,EAA6C;AAC3C,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,gBAAgB,CAAC,KAAD,CAAhB;AACD;;AAED,QAAM,oBAAoB,GAAwB,KAAK,CAAC,SAAN,CAAgB,MAAlE;;AAEA,OAAK,MAAM,OAAX,IAAsB,IAAI,CAAC,IAAL,CAAU,oBAAV,CAAtB,EAAuD;AACrD,QAAI,OAAJ;AACA,QAAI,eAAe,GAAoB,IAAvC;;AAEA,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,YAAM,cAAc,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAvB;;AACA,UAAI,cAAJ,EAAoB;AAClB,YAAI,OAAO,KAAK,SAAhB,EAA2B;AACzB,UAAA,OAAO,GAAG,cAAc,CAAC,eAAf,CAA+B,SAA/B,CAAV;AACD,SAFD,MAEO;AACL,UAAA,OAAO,GAAG,oCACR,OADQ,EAER,cAAc,CAAC,eAAf,CAA+B,SAA/B,CAFQ,EAGR,SAHQ,EAIR,OAJQ,EAKR,iBALQ,CAAV;AAOD;;AAED,cAAM,EAAE,GAAG,cAAc,CAAC,GAAf,CAAmB,iBAAnB,CAAX;;AACA,YAAI,eAAe,IAAI,EAAnB,IAAyB,eAAe,CAAC,SAAhB,KAA8B,EAAE,CAAC,SAA9D,EAAyE;AACvE,UAAA,GAAG,CAAC,IAAJ,CAAS,8EAAT;AACD;;AACD,QAAA,eAAe,GAAG,EAAlB;AACD;AACF;;AAED,IAAA,oBAAoB,CAAC,OAAD,CAApB,CAA8B,eAA9B,CAA8C,SAA9C,EAAyD,OAAzD;;AAEA,QAAI,eAAJ,EAAqB;AACnB,MAAA,oBAAoB,CAAC,OAAD,CAApB,CAA8B,GAA9B,CAAkC,iBAAlC,EAAqD,eAArD,EAAsE,IAAtE;AACD;AACF;AACF;AAED;;;;;;AAIA,SAAS,2BAAT,CACE,MADF,EAEE,QAFF,EAGE,SAHF,EAIE,WAJF,EAI0B;AAExB,MAAI,MAAM,KAAK,cAAf,EAA+B;AAC7B,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA;AAAR,QAAkB,wBAAwB,CAAC,QAAD,EAAW,SAAX,CAAhD;;AACA,QAAI,CAAC,KAAL,EAAY;AACV,MAAA,GAAG,CAAC,IAAJ,CAAS,MAAT;AACA,aAAO,SAAP;AACD;AACF,GAND,MAMO,IAAI,MAAM,KAAK,SAAX,IAAwB,WAAW,CAAC,qBAAxC,EAA+D;AACpE;AACA,UAAM;AAAC,MAAA;AAAD,QAAU,wBAAwB,CAAC,QAAD,EAAW,SAAX,CAAxC;;AACA,QAAI,KAAJ,EAAW;AACT,aAAO,cAAP;AACD;AACF;;AAED,SAAO,MAAP;AACD;;AAEK,SAAU,qBAAV,CAAgC,KAAhC,EAAkD,OAAlD,EAAuE;AAC3E,QAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,EAAiC,GAAjC,CAAqC,MAArC,CAAlB;AACA,QAAM;AAAC,IAAA;AAAD,MAAa,KAAnB;AAEA,QAAM,MAAM,GAAG,2BAA2B,CACxC,KAAK,CAAC,WAAN,CAAkB,OAAlB,CADwC,EAExC,KAAK,CAAC,aAAN,CAAoB,OAApB,CAFwC,EAGxC,SAHwC,EAIxC,KAAK,CAAC,MAAN,CAAa,KAJ2B,CAA1C;;AAMA,MAAI,MAAM,KAAK,KAAK,CAAC,WAAN,CAAkB,OAAlB,CAAf,EAA2C;AACzC,IAAA,KAAK,CAAC,eAAN,CAAsB,OAAtB,IAA8B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,KAAK,CAAC,eAAN,CAAsB,OAAtB,CADyB,CAAA,EACK;AACjC,MAAA;AADiC,KADL,CAA9B;AAID,GAf0E,CAiB3E;;;AACA,MAAI,OAAO,KAAK,GAAZ,IAAmB,oCAAmB,QAAQ,CAAC,EAA5B,CAAvB,EAAwD;AACtD,QAAI,oCAAmB,QAAQ,CAAC,CAA5B,CAAJ,EAAoC;AAClC,aAAO,oCACL,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,GAA3B,CADnB,EAEL,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAFnB,EAGL,QAHK,EAIL,OAJK,EAKL,iBALK,CAAP;AAOD,KARD,MAQO;AACL,aAAO,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAA/B;AACD;AACF,GAZD,MAYO,IAAI,OAAO,KAAK,GAAZ,IAAmB,oCAAmB,QAAQ,CAAC,EAA5B,CAAvB,EAAwD;AAC7D,QAAI,oCAAmB,QAAQ,CAAC,CAA5B,CAAJ,EAAoC;AAClC,aAAO,oCACL,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,GAA3B,CADnB,EAEL,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAFnB,EAGL,QAHK,EAIL,OAJK,EAKL,iBALK,CAAP;AAOD,KARD,MAQO;AACL,aAAO,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAA/B;AACD;AACF;;AACD,SAAO,wBAAwB,CAAC,SAAD,EAAY,MAAZ,EAAoB,KAApB,EAA2B,OAA3B,CAA/B;AACD;;AAED,SAAS,qBAAT,CACE,MADF,EAEE,IAFF,EAGE,QAHF,EAGoB;AAElB,SAAO,MAAM,CAAC,GAAP,CAAW,CAAC,IAAG;AACpB,UAAM,IAAI,GAAG,2BAAU,CAAV,EAAa;AAAC,MAAA,QAAD;AAAW,MAAA;AAAX,KAAb,CAAb;AACA,WAAO;AAAC,MAAA,MAAM,EAAE,UAAU,IAAI;AAAvB,KAAP;AACD,GAHM,CAAP;AAID;;AAED,SAAS,2BAAT,CACE,MADF,EAEE,IAFF,EAGE,QAHF,EAGqC;SAAA,CAEnC;;;AACA,QAAM,kBAAkB,GAAA,CAAA,EAAA,GAAG,iCAAkB,QAAlB,CAAH,MAA8B,IAA9B,IAA8B,EAAA,KAAA,KAAA,CAA9B,GAA8B,KAAA,CAA9B,GAA8B,EAAA,CAAE,IAAxD;;AACA,MAAI,IAAI,KAAK,UAAT,IAAuB,kBAA3B,EAA+C;AAC7C,WAAO,qBAAqB,CAAC,MAAD,EAAS,IAAT,EAAe,kBAAf,CAA5B;AACD;;AAED,SAAO,CAAC,MAAD,CAAP,CARmC,CAQuB;AAC3D;;AAED,SAAS,wBAAT,CACE,SADF,EAEE,MAFF,EAGE,KAHF,EAIE,OAJF,EAIqC;AAEnC,QAAM;AAAC,IAAA;AAAD,MAAa,KAAnB;AACA,QAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB;AAEA,QAAM;AAAC,IAAA;AAAD,MAAS,eAAf;AACA,QAAM,QAAQ,GAAG,eAAe,CAAC,UAAD,CAAhC;;AAEA,MAAI,8BAAkB,MAAlB,CAAJ,EAA+B;AAC7B,UAAM,aAAa,GAAG,wBAAwB,CAAC,SAAD,EAAY,SAAZ,EAAuB,KAAvB,EAA8B,OAA9B,CAA9C;AAEA,UAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,SAAR,EAAmB,IAAnB,EAAyB,QAAzB,CAA7C;AAEA,WAAO,yBAAa,CAAC,GAAG,aAAa,CAAC,KAAlB,EAAyB,GAAG,SAA5B,CAAb,CAAP;AACD,GAND,MAMO,IAAI,uBAAY,MAAZ,CAAJ,EAAyB;AAC9B,WAAO,yBAAa,CAAC,MAAD,CAAb,CAAP;AACD,GAFM,MAEA,IAAI,MAAM,IAAI,MAAM,KAAK,cAArB,IAAuC,CAAC,8BAAkB,MAAlB,CAA5C,EAAuE;AAC5E,WAAO,yBAAa,2BAA2B,CAAC,MAAD,EAAS,IAAT,EAAe,QAAf,CAAxC,CAAP;AACD;;AAED,QAAM,KAAK,GAAG,KAAK,CAAC,KAApB;;AACA,MAAI,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC,YAA/B,EAA6C;AAC3C,QAAI,KAAK,CAAC,MAAN,KAAiB,WAArB,EAAkC;AAChC,aAAO,yBAAa,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,CAAb,CAAP;AACD;;AAED,UAAM,IAAI,GAAG,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAb;AACA,WAAO,yBAAa,CAClB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB;AAAC,QAAA,MAAM,EAAE;AAAT,OAAvB;AAFT,KADkB,EAKlB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB;AAAC,QAAA,MAAM,EAAE;AAAT,OAAvB;AAFT,KALkB,CAAb,CAAP;AAUD;;AAED,QAAM,IAAI,GACR,6BAAe,OAAf,KAA2B,4BAAW,eAAX,CAA3B,GAAyD,UAAU,CAAC,KAAD,EAAQ,OAAR,EAAiB,SAAjB,CAAnE,GAAiG,SADnG;;AAGA,MAAI,4BAAW,eAAX,CAAJ,EAAiC;AAC/B,UAAM,CAAC,GAAG,2BAA2B,CAAC,CAAC,eAAe,CAAC,KAAjB,CAAD,EAA0B,IAA1B,EAAgC,QAAhC,CAArC;AACA,WAAO,yBAAa,CAAb,CAAP;AACD;;AAED,QAAM,QAAQ,GAAG,eAAjB,CA/CmC,CA+CD;;AAClC,MAAI,MAAM,KAAK,cAAf,EAA+B;AAC7B,UAAM,IAAI,GAAG,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAb;AACA,UAAM;AAAC,MAAA;AAAD,QAAU,eAAhB;AACA,WAAO,yBAAa,CAClB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,yBAAQ;AAAC,QAAA,KAAD;AAAQ,QAAA,SAAS,EAAE;AAAnB,OAAR;AAFT,KADkB,EAKlB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,yBAAQ;AAAC,QAAA,KAAD;AAAQ,QAAA,SAAS,EAAE;AAAnB,OAAR;AAFT,KALkB,CAAb,CAAP;AAUD,GAbD,MAaO,IAAI,oBAAU,QAAQ,CAAC,GAAnB,CAAJ,EAA6B;AAClC,QAAI,8BAAkB,SAAlB,CAAJ,EAAkC;AAChC,UAAI,SAAS,KAAK,aAAlB,EAAiC;AAC/B;AACA,eAAO,yBAAa,EAAb,CAAP;AACD,OAJ+B,CAMhC;AACA;;;AACA,aAAO,yBAAa,CAClB;AACE;AACA;AACA,QAAA,IAAI,EAAE,IAAI,CAAC,SAAL,CAAe,IAAf,IAAuB,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAvB,GAAqD,KAAK,CAAC,eAAN,CAAsB,SAAtB,CAH7D;AAIE;AACA,QAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB,kCAAiB,QAAjB,EAA2B,OAA3B,IAAsC;AAAC,UAAA,SAAS,EAAE;AAAZ,SAAtC,GAA6D,EAApF,CALT;AAME;AACA,QAAA,IAAI,EACF,IAAI,KAAK,IAAT,IAAiB,CAAC,wBAAS,IAAT,CAAlB,GACI;AACE,UAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB,EAAvB,CADT;AAEE,UAAA,EAAE,EAAE,KAFN,CAEY;;AAFZ,SADJ,GAKI;AAbR,OADkB,CAAb,CAAP;AAiBD,KAzBD,MAyBO;AACL;AACA,YAAM;AAAC,QAAA;AAAD,UAAQ,QAAd;;AACA,UAAI,oBAAU,GAAV,CAAJ,EAAoB;AAClB,cAAM,SAAS,GAAG,4BAAiB,KAAjB,EAAwB,QAAQ,CAAC,KAAjC,EAAwC,GAAxC,CAAlB;AACA,eAAO,yBAAa,CAClB,IAAI,wBAAJ,CAAqB,MAAK;AACxB,gBAAM,MAAM,GAAG,KAAK,CAAC,aAAN,CAAoB,SAApB,CAAf;AACA,iBAAO,IAAI,MAAM,WAAW,MAAM,QAAlC;AACD,SAHD,CADkB,CAAb,CAAP;AAMD,OARD,MAQO;AACL,eAAO,yBAAa,CAClB;AACE,UAAA,IAAI,EAAE,KAAK,CAAC,eAAN,CAAsB,UAAtB,CADR;AAEE,UAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB,EAAvB;AAFT,SADkB,CAAb,CAAP;AAMD;AACF;AACF,GA9CM,MA8CA,IACL,QAAQ,CAAC,QAAT,IACA,IAAI,CAAC,QAAL,CAAc,CAAC,MAAD,EAAS,KAAT,CAAd,EAA+B,SAA/B,CADA,IAEA,yBACE,OADF,EAEE,QAFF,EAGE,wBAAY,KAAZ,IAAqB,KAAK,CAAC,QAAN,CAAe,uCAAyB,OAAzB,CAAf,CAArB,GAAyE,SAH3E,EAIE,KAAK,CAAC,KAJR,EAKE,KAAK,CAAC,OALR,EAME,KAAK,CAAC,MANR,CAHK,EAWL;AACA,UAAM,IAAI,GAAG,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAb;AACA,WAAO,yBAAa,CAClB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAFT,KADkB,EAKlB;AACE,MAAA,IADF;AAEE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,EAAuB;AAAC,QAAA,MAAM,EAAE;AAAT,OAAvB;AAFT,KALkB,CAAb,CAAP;AAUD,GAvBM,MAuBA,IAAI,IAAJ,EAAU;AACf,WAAO,yBAAa,CAClB;AACE;AACA;AACA,MAAA,IAAI,EAAE,IAAI,CAAC,SAAL,CAAe,IAAf,IAAuB,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAAvB,GAAqD,KAAK,CAAC,eAAN,CAAsB,SAAtB,CAH7D;AAIE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,CAJT;AAKE,MAAA,IAAI,EAAE;AALR,KADkB,CAAb,CAAP;AASD,GAVM,MAUA;AACL,WAAO,yBAAa,CAClB;AACE,MAAA,IAAI,EAAE,KAAK,CAAC,eAAN,CAAsB,UAAtB,CADR;AAEE,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAFT,KADkB,CAAb,CAAP;AAMD;AACF;;AAED,SAAS,kBAAT,CAA4B,IAA5B,EAA6D,gBAA7D,EAAsF;AACpF,QAAM;AAAC,IAAA,EAAD;AAAK,IAAA,KAAL;AAAY,IAAA;AAAZ,MAAqB,IAA3B;AACA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE;AACA,IAAA,EAAE,EAAE,EAAE,KAAA,IAAF,IAAA,EAAE,KAAA,KAAA,CAAF,GAAA,EAAA,GAAO,gBAAgB,GAAG,KAAH,GAAW;AAFxC,GAAA,EAIM,KAAK,GAAG;AAAC,IAAA,KAAK,EAAE,IAAI,CAAC,kBAAL,CAAwB,KAAxB;AAAR,GAAH,GAA6C,EAJxD,CAAA,EAMM,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,EANxB,CAAA;AAQD;;AAED,SAAS,oBAAT,CAA8B,KAA9B,EAAgD,OAAhD,EAAqE;;;AACnE,QAAM,KAAK,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAd;AACA,QAAM,IAAI,GAAG,KAAK,CAAC,eAAN,CAAsB,OAAtB,EAA+B,MAA5C;AACA,QAAM,GAAG,GAAA,CAAA,EAAA,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAH,MAA0B,IAA1B,IAA0B,EAAA,KAAA,KAAA,CAA1B,GAA0B,KAAA,CAA1B,GAA0B,EAAA,CAAE,GAArC;AACA,QAAM,MAAM,GAAG,8BAAkB,IAAlB,KAA2B,IAA1C;AACA,QAAM,MAAM,GAAG,sBAAY,GAAZ,KAAoB,4BAAkB,GAAG,CAAC,MAAtB,CAApB,IAAqD,GAAG,CAAC,MAAxE;;AAEA,MAAI,MAAM,IAAI,MAAd,EAAsB;AACpB;AACA;AACA;AACA,IAAA,KAAK,CAAC,GAAN,CAAU,iBAAV,EAA6B,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAA,MAAA,GAAU,MAAvC,EAA+C,IAA/C;AACD;AACF;;AAEK,SAAU,UAAV,CACJ,KADI,EAEJ,OAFI,EAGJ,SAHI,EAGgB;AAEpB,MAAI,CAAC,8BAAkB,SAAlB,CAAL,EAAmC;AACjC,WAAO,SAAP;AACD,GAJmB,CAMpB;;;AACA,QAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAjB;AACA,QAAM,IAAI,GAAG,QAAQ,CAAC,IAAtB,CARoB,CAUpB;;AACA,MAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,WAAO;AACL,MAAA,EAAE,EAAE,KADC;AAEL,MAAA,KAAK,EAAE,oCAAoB,QAApB,EAA8B,OAA9B,CAFF;AAGL,MAAA,KAAK,EAAE;AAHF,KAAP;AAKD;;AAED,QAAM;AAAC,IAAA;AAAD,MAAU,KAAhB;AACA,QAAM,eAAe,GAAG,KAAK,GACzB,CAAC,IAAI,KAAK,CAAC,YAAN,GAAqB,CAAC,KAAK,CAAC,YAAP,CAArB,GAA4C,EAAhD,CAAD,EAAsD,GAAG,KAAK,CAAC,OAAN,CAAc,GAAd,CAAkB,CAAC,IAAI,CAAC,CAAC,QAAF,CAAW,KAAlC,CAAzD,CADyB,GAEzB,SAFJ,CApBoB,CAwBpB;;AACA,MAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,UAAM,gBAAgB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,IAAI,CAAC,KAApC,CAAnC;AACA,WAAO,kBAAkB,CAAC,IAAD,EAAO,gBAAP,CAAzB;AACD,GAHD,MAGO,IAAI,4BAAiB,IAAjB,CAAJ,EAA4B;AACjC,UAAM;AAAC,MAAA,QAAD;AAAW,MAAA;AAAX,QAAoB,IAA1B;AACA,UAAM,gBAAgB,GAAG,KAAK,CAAC,QAAN,CAAe,QAAf,CAAzB;AACA,UAAM;AAAC,MAAA,SAAD;AAAY,MAAA;AAAZ,QAAqB,gBAA3B;AAEA,UAAM,gBAAgB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,QAAL,CAAc,eAAd,EAA+B,KAA/B,CAAnC;;AAEA,QAAI,4BAAY,SAAZ,KAA0B,4BAAY,SAAZ,CAA9B,EAAsD;AACpD,aAAO,kBAAkB,CACvB;AACE,QAAA,KAAK,EAAE,yBAAQ,gBAAR,CADT;AAEE,QAAA;AAFF,OADuB,EAKvB,gBALuB,CAAzB;AAOD,KARD,MAQO,IAAI,8BAAc,SAAd,KAA4B,CAAC,SAAjC,EAA4C;AACjD,aAAO,kBAAkB,CACvB;AACE,QAAA,EAAE,EAAE,SADN;AAEE,QAAA,KAFF;AAGE,QAAA;AAHF,OADuB,EAMvB,gBANuB,CAAzB;AAQD;AACF,GAzBM,MAyBA,IAAI,IAAI,KAAK,YAAb,EAA2B;AAChC,WAAO;AACL,MAAA,EAAE,EAAE,KADC;AAEL,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd,CAFF;AAGL,MAAA,KAAK,EAAE;AAHF,KAAP;AAKD,GANM,MAMA,IAAI,IAAI,CAAC,QAAL,CAAc,CAAC,WAAD,EAAc;AAAU;AAAxB,GAAd,EAAgE,IAAhE,CAAJ,EAA2E;AAChF,WAAO,IAAP;AACD,GA7DmB,CA+DpB;;;AACA,SAAO,SAAP;AACD;AAED;;;;;;;;;AAOM,SAAU,wBAAV,CACJ,QADI,EAEJ,SAFI,EAEgB;AAEpB,QAAM;AAAC,IAAA,SAAD;AAAY,IAAA;AAAZ,MAAoB,QAA1B;;AAEA,MAAI,CAAC,SAAL,EAAgB;AACd,WAAO;AACL,MAAA,KAAK,EAAE,KADF;AAEL,MAAA,MAAM,EAAE,GAAG,CAAC,OAAJ,CAAY,uCAAZ,CAAoD,QAApD;AAFH,KAAP;AAID;;AAED,MAAI,wBAAS,SAAT,KAAuB,CAAC,kCAAuB,SAAvB,CAA5B,EAA+D;AAC7D,WAAO;AACL,MAAA,KAAK,EAAE,KADF;AAEL,MAAA,MAAM,EAAE,GAAG,CAAC,OAAJ,CAAY,sCAAZ,CAAmD,SAAnD;AAFH,KAAP;AAID;;AAED,MAAI,IAAI,KAAK,cAAb,EAA6B;AAC3B,QAAI,SAAS,KAAK,KAAlB,EAAyB;AACvB,aAAO;AACL,QAAA,KAAK,EAAE,KADF;AAEL,QAAA,MAAM,EAAE,GAAG,CAAC,OAAJ,CAAY,8BAAZ,CAA2C,QAA3C;AAFH,OAAP;AAID;AACF;;AAED,SAAO;AAAC,IAAA,KAAK,EAAE;AAAR,GAAP;AACD;AAED;;;;;AAGA,SAAS,iBAAT,CACE,EADF,EAEE,EAFF,EAGE,QAHF,EAIE,UAJF,EAIqB;AAEnB,MAAI,EAAE,CAAC,QAAH,IAAe,EAAE,CAAC,QAAtB,EAAgC;AAC9B,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,8BAAZ,CAA2C,QAA3C,EAAqD,UAArD,EAAiE,EAAE,CAAC,KAApE,EAA2E,EAAE,CAAC,KAA9E,CAAT;AACD,GAJkB,CAKnB;;;AACA,SAAO;AAAC,IAAA,QAAQ,EAAE,EAAE,CAAC,QAAd;AAAwB,IAAA,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAP,EAAc,GAAG,EAAE,CAAC,KAApB;AAA/B,GAAP;AACD;AAED;;;;;AAGM,SAAU,YAAV,CAAuB,OAAvB,EAAkD;AACtD,QAAM,aAAa,GAAG,IAAI,CAAC,MAAL,CACpB,OAAO,CAAC,GAAR,CAAY,MAAM,IAAG;AACnB;AACA,QAAI,2BAAgB,MAAhB,CAAJ,EAA6B;AAC3B,YAAM;AAAC,QAAA,IAAI,EAAE;AAAP,UAAmC,MAAzC;AAAA,YAAoB,iBAAiB,GAAA,mBAAI,MAAJ,EAA/B,CAAA,MAAA,CAA+B,CAArC;AACA,aAAO,iBAAP;AACD;;AACD,WAAO,MAAP;AACD,GAPD,CADoB,EASpB,IAAI,CAAC,IATe,CAAtB;AAYA,QAAM,KAAK,GAAkB,IAAI,CAAC,MAAL,CAC3B,OAAO,CACJ,GADH,CACO,CAAC,IAAG;AACP,QAAI,2BAAgB,CAAhB,CAAJ,EAAwB;AACtB,YAAM,CAAC,GAAG,CAAC,CAAC,IAAZ;;AACA,UAAI,CAAC,KAAK,SAAN,IAAmB,CAAC,IAAI,CAAC,SAAL,CAAe,CAAf,CAAxB,EAA2C;AACzC,YAAI,QAAQ,CAAR,IAAa,CAAC,CAAC,EAAF,KAAS,OAA1B,EAAmC;AACjC;AACA,iBAAO,CAAC,CAAC,KAAT;AACD;;AACD,YAAI,CAAC,CAAC,KAAF,KAAY,WAAhB,EAA6B;AAC3B;AACA,iBAAO,CAAC,CAAC,KAAT;AACD;AACF;;AACD,aAAO,CAAP;AACD;;AACD,WAAO,SAAP;AACD,GAjBH,EAkBG,MAlBH,CAkBU,CAAC,IAAI,CAAC,KAAK,SAlBrB,CAD2B,EAoB3B,IAAI,CAAC,IApBsB,CAA7B;;AAuBA,MAAI,aAAa,CAAC,MAAd,KAAyB,CAA7B,EAAgC;AAC9B,WAAO,SAAP;AACD,GAFD,MAEO,IAAI,aAAa,CAAC,MAAd,KAAyB,CAA7B,EAAgC;AACrC,UAAM,MAAM,GAAG,OAAO,CAAC,CAAD,CAAtB;;AACA,QAAI,2BAAgB,MAAhB,KAA2B,KAAK,CAAC,MAAN,GAAe,CAA9C,EAAiD;AAC/C,UAAI,IAAI,GAAG,KAAK,CAAC,CAAD,CAAhB;;AACA,UAAI,KAAK,CAAC,MAAN,GAAe,CAAnB,EAAsB;AACpB,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kBAArB;AACA,QAAA,IAAI,GAAG,IAAP;AACD,OAHD,MAGO;AACL;AACA,YAAI,wBAAS,IAAT,KAAkB,WAAW,IAAjC,EAAuC;AACrC,gBAAM,SAAS,GAAG,IAAI,CAAC,KAAvB;;AACA,cAAI,MAAM,CAAC,KAAP,KAAiB,SAArB,EAAgC;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,KAAL,GAAa;AAAC,cAAA,KAAK,EAAE,IAAI,CAAC;AAAb,aAAb,GAAmC,IAA1C;AACD;AACF;AACF;;AACD,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MADL,CAAA,EACW;AACT,QAAA;AADS,OADX,CAAA;AAID;;AACD,WAAO,MAAP;AACD,GA5DqD,CA8DtD;;;AACA,QAAM,gBAAgB,GAAG,IAAI,CAAC,MAAL,CACvB,KAAK,CAAC,GAAN,CAAU,CAAC,IAAG;AACZ,QAAI,IAAI,CAAC,SAAL,CAAe,CAAf,KAAqB,EAAE,QAAQ,CAAV,CAArB,IAAqC,CAAC,CAAC,EAAF,IAAQ,oCAAjD,EAA4E;AAC1E,aAAO,CAAP;AACD;;AACD,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iBAAZ,CAA8B,CAA9B,CAAT;AACA,WAAO,IAAP;AACD,GAND,CADuB,EAQvB,IAAI,CAAC,IARkB,CAAzB;AAWA,MAAI,IAAJ;;AAEA,MAAI,gBAAgB,CAAC,MAAjB,KAA4B,CAAhC,EAAmC;AACjC,IAAA,IAAI,GAAG,gBAAgB,CAAC,CAAD,CAAvB;AACD,GAFD,MAEO,IAAI,gBAAgB,CAAC,MAAjB,GAA0B,CAA9B,EAAiC;AACtC,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kBAArB;AACA,IAAA,IAAI,GAAG,IAAP;AACD;;AAED,QAAM,OAAO,GAAG,IAAI,CAAC,MAAL,CACd,OAAO,CAAC,GAAR,CAAY,CAAC,IAAG;AACd,QAAI,2BAAgB,CAAhB,CAAJ,EAAwB;AACtB,aAAO,CAAC,CAAC,IAAT;AACD;;AACD,WAAO,IAAP;AACD,GALD,CADc,EAOd,CAAC,IAAI,CAPS,CAAhB;;AAUA,MAAI,OAAO,CAAC,MAAR,KAAmB,CAAnB,IAAwB,OAAO,CAAC,CAAD,CAAP,KAAe,IAA3C,EAAiD;AAC/C;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA;AACV,MAAA,IAAI,EAAE,OAAO,CAAC,CAAD,CADH;AAEV,MAAA,MAAM,EAAE,aAAa,CAAC,GAAd,CAAkB,CAAC,IAAK,CAA4B,CAAC,KAArD;AAFE,KAAA,EAGN,IAAI,GAAG;AAAC,MAAA;AAAD,KAAH,GAAY,EAHV,CAAZ;AAMA,WAAO,MAAP;AACD;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA;AAAQ,IAAA,MAAM,EAAE;AAAhB,GAAA,EAAmC,IAAI,GAAG;AAAC,IAAA;AAAD,GAAH,GAAY,EAAnD,CAAA;AACD;AAED;;;;;;AAIM,SAAU,kBAAV,CAA6B,MAA7B,EAA6C;AACjD,MAAI,2BAAgB,MAAhB,KAA2B,wBAAS,MAAM,CAAC,KAAhB,CAA/B,EAAuD;AACrD,WAAO,MAAM,CAAC,KAAd;AACD,GAFD,MAEO,IAAI,kCAAuB,MAAvB,CAAJ,EAAoC;AACzC,QAAI,KAAJ;;AACA,SAAK,MAAM,cAAX,IAA6B,MAAM,CAAC,MAApC,EAA4C;AAC1C,UAAI,2BAAgB,cAAhB,KAAmC,wBAAS,cAAc,CAAC,KAAxB,CAAvC,EAAuE;AACrE,YAAI,CAAC,KAAL,EAAY;AACV,UAAA,KAAK,GAAG,cAAc,CAAC,KAAvB;AACD,SAFD,MAEO,IAAI,KAAK,KAAK,cAAc,CAAC,KAA7B,EAAoC;AACzC,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,qCAArB;AACA,iBAAO,KAAP;AACD;AACF;AACF;;AACD,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iDAArB;AACA,WAAO,KAAP;AACD,GAdM,MAcA,IAAI,iCAAsB,MAAtB,CAAJ,EAAmC;AACxC,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,+BAArB;AACA,UAAM,KAAK,GAAG,MAAM,CAAC,MAAP,CAAc,CAAd,CAAd;AACA,WAAO,wBAAS,KAAT,IAAkB,KAAlB,GAA0B,SAAjC;AACD;;AAED,SAAO,SAAP;AACD;;AAEK,SAAU,cAAV,CAAyB,KAAzB,EAAuC,OAAvC,EAA4D;AAChE,QAAM,cAAc,GAAmB,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAvC;AAEA,QAAM,OAAO,GAAG,cAAc,CAAC,GAAf,CAAmB,SAAnB,EAA8B,GAA9B,CAAmC,MAAD,IAA6B;AAC7E;AACA;AACA;AAEA,QAAI,2BAAgB,MAAhB,CAAJ,EAA6B;AAC3B,MAAA,MAAM,CAAC,IAAP,GAAc,KAAK,CAAC,gBAAN,CAAuB,MAAM,CAAC,IAA9B,CAAd;AACD;;AACD,WAAO,MAAP;AACD,GATe,CAAhB,CAHgE,CAchE;;AACA,SAAO,YAAY,CAAC,OAAD,CAAnB;AACD;;;;;;;;;;;;;ACvrBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEM,SAAU,cAAV,CAAyB,KAAzB,EAAqC;AACzC,MAAI,yBAAa,KAAb,KAAuB,0BAAc,KAAd,CAA3B,EAAiD;AAC/C;AACA,WAAO,KAAK,CAAC,QAAN,CAAe,MAAf,CAAsB,CAAC,MAAD,EAAS,KAAT,KAAkB;AAC7C,aAAO,MAAM,CAAC,MAAP,CAAc,cAAc,CAAC,KAAD,CAA5B,CAAP;AACD,KAFM,EAEJ,sBAAsB,CAAC,KAAD,CAFlB,CAAP;AAGD,GALD,MAKO;AACL;AACA;AACA,WAAO,sBAAsB,CAAC,KAAD,CAA7B;AACD;AACF;;AAEK,SAAU,sBAAV,CAAiC,KAAjC,EAA6C;AACjD,SAAO,gBAAK,KAAK,CAAC,SAAN,CAAgB,MAArB,EAA6B,MAA7B,CAAoC,CAAC,MAAD,EAAoB,OAApB,KAA6C;AACtF,UAAM,cAAc,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAvB;;AACA,QAAI,cAAc,CAAC,MAAnB,EAA2B;AACzB;AACA,aAAO,MAAP;AACD;;AAED,UAAM,KAAK,GAAG,cAAc,CAAC,OAAf,EAAd;AACA,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA,IAAP;AAAa,MAAA,eAAb;AAA8B,MAAA,OAAO,EAAE,EAAvC;AAA2C,MAAA,KAAK,EAAE,EAAlD;AAAsD,MAAA;AAAtD,QAAqF,KAA3F;AAAA,UAAwE,eAAe,GAAA,mBAAI,KAAJ,EAAjF,CAAA,MAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAiF,CAAvF;AACA,UAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAP,EAAc,IAAd,EAAoB,OAApB,CAAhC;AAEA,QAAI,SAAJ;;AACA,QAAI,eAAJ,EAAqB;AACnB,MAAA,SAAS,GAAG,4CAA6B,KAA7B,EAAoC,eAApC,CAAZ;AACD;;AAED,UAAM,MAAM,GAAG,4BAAe,KAAf,EAAsB,OAAtB,CAAf;AAEA,IAAA,MAAM,CAAC,IAAP,CAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACT,MAAA,IADS;AAET,MAAA;AAFS,KAAA,EAGL,MAAM,GAAG;AAAC,MAAA;AAAD,KAAH,GAAc,EAHf,CAAA,EAIL,SAAS,GAAG;AAAC,MAAA;AAAD,KAAH,GAAiB,EAJrB,CAAA,EAIwB;AACjC,MAAA;AADiC,KAJxB,CAAA,EAML,OAAO,KAAK,SAAZ,GAAwB;AAAC,MAAA,OAAO,EAAE;AAAV,KAAxB,GAAoD,EAN/C,CAAA,EAON,eAPM,CAAX;AAUA,WAAO,MAAP;AACD,GA7BM,EA6BJ,EA7BI,CAAP;AA8BD;;AAEK,SAAU,kBAAV,CAA6B,UAA7B,EAAkD,SAAlD,EAAqE,OAArE,EAAqF;AACzF;AACA,MAAI,qBAAO,OAAP,CAAJ,EAAqB;AACnB,QAAI,yBAAc,UAAd,CAAJ,EAA+B;AAC7B;AACA,aAAO;AACL,QAAA,IAAI,EAAE;AAAC,UAAA,MAAM,EAAE,SAAS,GAAG;AAArB;AADD,OAAP;AAGD;AACF;;AACD,SAAO,UAAP;AACD;;;;;;;;;AC/DD;;AAIA;;AAEA;;AAcM,MAAO,cAAP,SAA8B,YAA9B,CAAwD;AAG5D,EAAA,WAAA,CAAY,IAAZ,EAA0B,gBAA1B,EAA+D;AAC7D,UACE,EADF,EACM;AACJ;AAAC,MAAA;AAAD,KAFF,CAES;AAFT;AAHK,SAAA,MAAA,GAAS,KAAT;AAOL,SAAK,eAAL,CAAqB,MAArB,EAA6B,gBAA7B;AACD;AAED;;;;;AAGO,EAAA,4BAA4B,GAAA;AACjC,QAAI,KAAK,GAAL,CAAS,MAAT,MAAqB,KAAzB,EAAgC;AAC9B,aAAO,IAAP;AACD;;AACD,WAAO,gBAAK,KAAK,GAAL,CAAS,SAAT,CAAL,EAA0B,CAAC,IAAI,uBAAQ,CAAR,KAAc,CAAC,CAAC,MAAF,KAAa,CAA3B,IAAgC,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAxC,IAA6C,CAAC,CAAC,CAAD,CAAD,IAAQ,CAApF,CAAP;AACD;;AAnB2D;;;;;;;;;;;;;;;ACpB9D;;AACA;;AACA;;AAqBA;;AACA;;AACA;;AAEA;;AAWA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;;;;;AAEO,MAAM,gBAAgB,GAAoB,CAAC,OAAD,EAAU,QAAV,CAA1C;;;AAEP,SAAS,cAAT,CAAwB,OAAxB,EAA6C;AAC3C,SAAO,OAAO,KAAK,GAAZ,GAAkB,OAAlB,GAA4B,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,SAAhE;AACD;;AAEK,SAAU,mBAAV,CAA8B,KAA9B,EAA8C;AAClD,QAAM,oBAAoB,GAAwB,KAAK,CAAC,SAAN,CAAgB,MAAlE,CADkD,CAGlD;;AACA,OAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAM,cAAc,GAAG,oBAAoB,CAAC,OAAD,CAA3C;;AACA,QAAI,CAAC,cAAL,EAAqB;AACnB;AACD;;AAED,UAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAD,EAAU,KAAV,CAA9C;AAEA,IAAA,cAAc,CAAC,eAAf,CAA+B,OAA/B,EAAwC,iBAAxC;AACD;AACF;;AAED,SAAS,gBAAT,CAA0B,KAA1B,EAA4C,OAA5C,EAA8D;AAC5D,QAAM,QAAQ,GAAG,KAAK,CAAC,QAAN,CAAe,OAAf,CAAjB;;AAEA,MAAI,QAAQ,IAAI,QAAQ,CAAC,GAArB,IAA4B,oBAAU,QAAQ,CAAC,GAAnB,CAAhC,EAAyD;AACvD,UAAM,SAAS,GAAG,4BAAiB,KAAjB,EAAwB,QAAQ,CAAC,KAAjC,EAAwC,QAAQ,CAAC,GAAjD,CAAlB,CADuD,CAGvD;;AACA,UAAM,QAAQ,GAAG,cAAc,CAAC,OAAD,CAA/B;AACA,UAAM,UAAU,GAAG,KAAK,CAAC,OAAN,CAAc,QAAd,CAAnB;AACA,WAAO,IAAI,wBAAJ,CAAqB,MAAK;AAC/B,YAAM,WAAW,GAAG,KAAK,CAAC,aAAN,CAAoB,SAApB,CAApB;AACA,YAAM,QAAQ,GAAG,IAAI,WAAW,WAAW,WAAW,aAAa,WAAW,OAA9E;AACA,aAAO,GAAG,KAAK,CAAC,aAAN,CAAoB,UAApB,CAA+B,OAAO,QAAQ,GAAxD;AACD,KAJM,CAAP;AAKD;;AACD,SAAO,SAAP;AACD;AAED;;;;;AAGM,SAAU,oBAAV,CAA+B,OAA/B,EAAsD,KAAtD,EAAsE;AAC1E,QAAM,cAAc,GAAG,KAAK,CAAC,eAAN,CAAsB,OAAtB,CAAvB;AACA,QAAM;AAAC,IAAA;AAAD,MAAS,KAAf;AAEA,QAAM,eAAe,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAxB;AACA,QAAM,SAAS,GAAG,eAAe,CAAC,GAAhB,CAAoB,MAApB,CAAlB,CAL0E,CAO1E;AACA;;AACA,OAAK,MAAM,QAAX,IAAuB,gBAAvB,EAAyC;AACvC,QAAI,cAAc,CAAC,QAAD,CAAd,KAA6B,SAAjC,EAA4C;AAC1C,YAAM,oBAAoB,GAAG,qCAAyB,SAAzB,EAAoC,QAApC,CAA7B;AACA,YAAM,sBAAsB,GAAG,gDAAoC,OAApC,EAA6C,QAA7C,CAA/B;;AACA,UAAI,CAAC,oBAAL,EAA2B;AACzB,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iCAAZ,CAA8C,SAA9C,EAAyD,QAAzD,EAAmE,OAAnE,CAAT;AACD,OAFD,MAEO,IAAI,sBAAJ,EAA4B;AACjC;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,sBAAT;AACD,OAHM,MAGA;AACL,gBAAQ,QAAR;AACE,eAAK,OAAL;AACE,gBAAI,uBAAQ,cAAc,CAAC,KAAvB,KAAiC,qBAAO,OAAP,CAArC,EAAsD;AACpD,qBAAO,yBACL,cAAc,CAAC,KAAf,CAAqB,GAArB,CAAyB,CAAC,IAAG;AAC3B,oBAAI,CAAC,KAAK,OAAN,IAAiB,CAAC,KAAK,QAA3B,EAAqC;AACnC;AAEA;AAEA,wBAAM,UAAU,GAAG,KAAK,CAAC,OAAN,CAAc,CAAd,CAAnB;AACA,wBAAM,aAAa,GAAG,KAAK,CAAC,aAAN,CAAoB,IAApB,CAAyB,KAAzB,CAAtB;AACA,yBAAO,yBAAiB,QAAjB,CAA0B,aAA1B,EAAyC,UAAzC,CAAP;AACD;;AACD,uBAAO,CAAP;AACD,eAXD,CADK,CAAP;AAcD;;AACD,mBAAO,yBAAa,cAAc,CAAC,KAA5B,CAAP;;AACF,eAAK,QAAL;AACE,mBAAO,yBAAa,WAAW,CAAC,cAAc,CAAC,QAAD,CAAf,CAAxB,CAAP;AApBJ;AAsBD;AACF;AACF;;AAED,MAAI,OAAO,KAAK,UAAZ,IAAiB,OAAO,KAAK,UAAjC,EAAoC;AAClC,UAAM,WAAW,GAAG,OAAO,KAAK,UAAZ,GAAgB,OAAhB,GAA0B,QAA9C;AACA,UAAM,SAAS,GAAG,IAAI,CAAC,WAAD,CAAtB;;AACA,QAAI,kBAAO,SAAP,CAAJ,EAAuB;AACrB,UAAI,8BAAkB,SAAlB,CAAJ,EAAkC;AAChC,eAAO,yBAAa;AAAC,UAAA,IAAI,EAAE,SAAS,CAAC;AAAjB,SAAb,CAAP;AACD,OAFD,MAEO;AACL,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,WAAxB,CAAT;AACD;AACF;AACF;;AAED,SAAO,yBAAa,YAAY,CAAC,OAAD,EAAU,KAAV,CAAzB,CAAP;AACD;;AAED,SAAS,WAAT,CAAqB,MAArB,EAA+C;AAC7C,MAAI,6BAAiB,MAAjB,CAAJ,EAA8B;AAC5B,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,MAAM,EAAE,MAAM,CAAC;AADjB,KAAA,EAEK,IAAI,CAAC,IAAL,CAAU,MAAV,EAAkB,CAAC,MAAD,CAAlB,CAFL,CAAA;AAID;;AACD,SAAO;AAAC,IAAA,MAAM,EAAE;AAAT,GAAP;AACD;;AAED,SAAS,YAAT,CAAsB,OAAtB,EAA6C,KAA7C,EAA6D;AAC3D,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,MAAP;AAAe,IAAA,IAAf;AAAqB,IAAA;AAArB,MAAiC,KAAvC;AAEA,QAAM,aAAa,GAAG,KAAK,CAAC,aAAN,CAAoB,IAApB,CAAyB,KAAzB,CAAtB;AAEA,QAAM;AAAC,IAAA;AAAD,MAAS,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAf;AAEA,QAAM,eAAe,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAxB;AACA,QAAM,SAAS,GAAG,eAAe,CAAC,GAAhB,CAAoB,MAApB,CAAlB;AAEA,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAsB,KAAK,CAAC,eAAN,CAAsB,OAAtB,CAA5B;;AAEA,UAAQ,OAAR;AACE,SAAK,UAAL;AACA,SAAK,UAAL;AAAQ;AACN;AACA,YAAI,IAAI,CAAC,QAAL,CAAc,CAAC,OAAD,EAAU,MAAV,CAAd,EAAiC,SAAjC,CAAJ,EAAiD;AAC/C,cAAI,OAAO,KAAK,UAAZ,IAAiB,CAAC,IAAI,CAAC,KAA3B,EAAkC;AAChC,kBAAM,CAAC,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,OAAvC,CAAV;;AACA,gBAAI,kBAAO,CAAP,CAAJ,EAAe;AACb,qBAAO,CAAP;AACD;AACF,WALD,MAKO,IAAI,OAAO,KAAK,UAAZ,IAAiB,CAAC,IAAI,CAAC,MAA3B,EAAmC;AACxC,kBAAM,CAAC,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,QAAvC,CAAV;;AACA,gBAAI,kBAAO,CAAP,CAAJ,EAAe;AACb,qBAAO,CAAP;AACD;AACF;AACF,SAdK,CAgBN;AACA;;;AAEA,cAAM,QAAQ,GAAG,cAAc,CAAC,OAAD,CAA/B;AACA,cAAM,UAAU,GAAG,KAAK,CAAC,OAAN,CAAc,QAAd,CAAnB;;AAEA,YAAI,OAAO,KAAK,UAAZ,IAAiB,gCAAoB,SAApB,CAArB,EAAqD;AACnD;AACA,iBAAO,CAAC,yBAAiB,QAAjB,CAA0B,aAA1B,EAAyC,UAAzC,CAAD,EAAuD,CAAvD,CAAP;AACD,SAHD,MAGO;AACL,iBAAO,CAAC,CAAD,EAAI,yBAAiB,QAAjB,CAA0B,aAA1B,EAAyC,UAAzC,CAAJ,CAAP;AACD;AACF;;AAED,SAAK,aAAL;AAAW;AACT;AACA,cAAM,IAAI,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,EAAgC,GAAhC,CAAoC,MAApC,CAAb;AACA,cAAM,QAAQ,GAAG,YAAY,CAAC,IAAD,EAAO,IAAP,EAAa,MAAb,CAA7B;AACA,cAAM,QAAQ,GAAG,YAAY,CAAC,IAAD,EAAO,IAAP,EAAa,KAAb,EAAoB,MAApB,CAA7B;;AACA,YAAI,mCAAuB,SAAvB,CAAJ,EAAuC;AACrC,iBAAO,gBAAgB,CACrB,QADqB,EAErB,QAFqB,EAGrB,gCAAgC,CAAC,SAAD,EAAY,MAAZ,EAAoB,MAApB,EAA4B,OAA5B,CAHX,CAAvB;AAKD,SAND,MAMO;AACL,iBAAO,CAAC,QAAD,EAAW,QAAX,CAAP;AACD;AACF;;AAED,SAAK,cAAL;AACE,aAAO,CAAC,CAAD,EAAI,IAAI,CAAC,EAAL,GAAU,CAAd,CAAP;;AAEF,SAAK,cAAL;AACE;AACA;AACA,aAAO,CAAC,CAAD,EAAI,GAAJ,CAAP;;AAEF,SAAK,eAAL;AAAa;AACX;AACA,eAAO,CACL,CADK,EAEL,IAAI,wBAAJ,CAAqB,MAAK;AACxB,gBAAM,CAAC,GAAG,KAAK,CAAC,aAAN,CAAoB,OAApB,CAAV;AACA,gBAAM,CAAC,GAAG,KAAK,CAAC,aAAN,CAAoB,QAApB,CAAV;AACA,iBAAO,OAAO,CAAC,IAAI,CAAC,KAApB;AACD,SAJD,CAFK,CAAP;AAQD;;AAED,SAAK,oBAAL;AACE;AACA,aAAO,CAAC,MAAM,CAAC,KAAP,CAAa,cAAd,EAA8B,MAAM,CAAC,KAAP,CAAa,cAA3C,CAAP;;AACF,SAAK,mBAAL;AACE,aAAO,CACL;AACA,OAAC,CAAD,EAAI,CAAJ,CAFK,EAGL,CAAC,CAAD,EAAI,CAAJ,CAHK,EAIL,CAAC,CAAD,EAAI,CAAJ,CAJK,EAKL,CAAC,CAAD,EAAI,CAAJ,CALK,EAML,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CANK,CAAP;;AAQF,SAAK,cAAL;AACE,aAAO,QAAP;;AACF,SAAK,cAAL;AACA,SAAK,aAAL;AACA,SAAK,eAAL;AACE,UAAI,SAAS,KAAK,SAAlB,EAA6B;AAC3B;AACA,eAAO,IAAI,KAAK,SAAT,GAAqB,UAArB,GAAkC,SAAzC;AACD,OAHD,MAGO;AACL,YAAI,SAAS,KAAK,SAAlB,EAA6B;AAC3B,iBAAO,WAAP;AACD,SAFD,MAEO;AACL,iBAAO,IAAI,KAAK,MAAT,IAAmB,IAAI,KAAK,UAA5B,GAAyC,SAAzC,GAAqD,MAA5D;AACD;AACF;;AACH,SAAK,gBAAL;AACA,SAAK,oBAAL;AACA,SAAK,sBAAL;AACE;AACA,aAAO,CAAC,MAAM,CAAC,KAAP,CAAa,UAAd,EAA0B,MAAM,CAAC,KAAP,CAAa,UAAvC,CAAP;AAnGJ;AAqGA;;;AACA,QAAM,IAAI,KAAJ,CAAU,qCAAqC,OAAO,EAAtD,CAAN;AACD;;AAEK,SAAU,gCAAV,CACJ,SADI,EAEJ,MAFI,EAGJ,MAHI,EAIJ,OAJI,EAIY;AAEhB,UAAQ,SAAR;AACE,SAAK,UAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,aAApB;;AACF,SAAK,UAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,aAApB;;AACF,SAAK,WAAL;AACE,UAAI,MAAM,KAAK,SAAX,IAAwB,uBAAQ,MAAR,CAA5B,EAA6C;AAC3C,eAAO,MAAM,CAAC,MAAP,GAAgB,CAAvB;AACD,OAFD,MAEO;AACL,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,+BAAZ,CAA4C,OAA5C,CAAT,EADK,CAEL;;AACA,eAAO,CAAP;AACD;;AAZL;AAcD;AAED;;;;;;;;;AAOM,SAAU,gBAAV,CACJ,QADI,EAEJ,QAFI,EAGJ,WAHI,EAGe;AAEnB;AACA,QAAM,CAAC,GAAG,MAAK;AACb,UAAM,IAAI,GAAG,iCAAoB,QAApB,CAAb;AACA,UAAM,IAAI,GAAG,iCAAoB,QAApB,CAAb;AACA,UAAM,IAAI,GAAG,IAAI,IAAI,MAAM,IAAI,QAAQ,WAAW,OAAlD;AACA,WAAO,YAAY,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,GAAnD;AACD,GALD;;AAMA,MAAI,uBAAY,QAAZ,CAAJ,EAA2B;AACzB,WAAO,IAAI,wBAAJ,CAAqB,CAArB,CAAP;AACD,GAFD,MAEO;AACL,WAAO;AAAC,MAAA,MAAM,EAAE,CAAC;AAAV,KAAP;AACD;AACF;;AAED,SAAS,YAAT,CAAsB,IAAtB,EAAkC,IAAlC,EAA6D,MAA7D,EAA2E;AACzE,MAAI,IAAJ,EAAU;AACR,QAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,aAAO;AAAC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,UAAU,YAAY,CAAC,IAAD,EAAO,KAAP,EAAc,MAAd,CAAqB;AAAlE,OAAP;AACD,KAFD,MAEO;AACL,aAAO,CAAP;AACD;AACF;;AACD,UAAQ,IAAR;AACE,SAAK,KAAL;AACA,SAAK,MAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,WAApB;;AACF,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,cAApB;;AACF,SAAK,MAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,WAApB;;AACF,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,QAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,OAApB;AAbJ;AAeA;AACA;;;AACA,QAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,MAAhC,EAAwC,IAAxC,CAAV,CAAN;AACD;;AAEM,MAAM,yBAAyB,GAAG,IAAlC;;;AAEP,SAAS,YAAT,CAAsB,IAAtB,EAAkC,IAAlC,EAA0D,KAA1D,EAA4E,MAA5E,EAA0F;AACxF,QAAM,aAAa,GAAG;AACpB,IAAA,CAAC,EAAE,gBAAgB,CAAC,KAAD,EAAQ,GAAR,CADC;AAEpB,IAAA,CAAC,EAAE,gBAAgB,CAAC,KAAD,EAAQ,GAAR;AAFC,GAAtB;;AAKA,UAAQ,IAAR;AACE,SAAK,KAAL;AACA,SAAK,MAAL;AAAa;AACX,YAAI,MAAM,CAAC,KAAP,CAAa,WAAb,KAA6B,SAAjC,EAA4C;AAC1C,iBAAO,MAAM,CAAC,KAAP,CAAa,WAApB;AACD;;AACD,cAAM,GAAG,GAAG,SAAS,CAAC,IAAD,EAAO,aAAP,EAAsB,MAAM,CAAC,IAA7B,CAArB;;AAEA,YAAI,wBAAS,GAAT,CAAJ,EAAmB;AACjB,iBAAO,GAAG,GAAG,CAAb;AACD,SAFD,MAEO;AACL,iBAAO,IAAI,wBAAJ,CAAqB,MAAM,GAAG,GAAG,CAAC,MAAM,MAAxC,CAAP;AACD;AACF;;AACD,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,cAApB;;AACF,SAAK,MAAL;AACE,aAAO,MAAM,CAAC,KAAP,CAAa,WAApB;;AACF,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,QAAL;AAAe;AACb,YAAI,MAAM,CAAC,KAAP,CAAa,OAAjB,EAA0B;AACxB,iBAAO,MAAM,CAAC,KAAP,CAAa,OAApB;AACD;;AAED,cAAM,SAAS,GAAG,SAAS,CAAC,IAAD,EAAO,aAAP,EAAsB,MAAM,CAAC,IAA7B,CAA3B;;AACA,YAAI,wBAAS,SAAT,CAAJ,EAAyB;AACvB,iBAAO,IAAI,CAAC,GAAL,CAAS,yBAAyB,GAAG,SAArC,EAAgD,CAAhD,CAAP;AACD,SAFD,MAEO;AACL,iBAAO,IAAI,wBAAJ,CAAqB,MAAM,OAAO,yBAAyB,MAAM,SAAS,CAAC,MAAM,MAAjF,CAAP;AACD;AACF;AAjCH;AAmCA;AACA;;;AACA,QAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,MAAhC,EAAwC,IAAxC,CAAV,CAAN;AACD;AAED;;;;;AAGA,SAAS,SAAT,CACE,IADF,EAEE,aAFF,EAGE,UAHF,EAGwB;AAEtB,QAAM,SAAS,GAAG,kBAAO,IAAI,CAAC,KAAZ,IAAqB,IAAI,CAAC,KAAL,CAAW,IAAhC,GAAuC,uCAA0B,UAA1B,EAAsC,OAAtC,CAAzD;AACA,QAAM,UAAU,GAAG,kBAAO,IAAI,CAAC,MAAZ,IAAsB,IAAI,CAAC,MAAL,CAAY,IAAlC,GAAyC,uCAA0B,UAA1B,EAAsC,QAAtC,CAA5D;;AAEA,MAAI,aAAa,CAAC,CAAd,IAAmB,aAAa,CAAC,CAArC,EAAwC;AACtC,WAAO,IAAI,wBAAJ,CAAqB,MAAK;AAC/B,YAAM,KAAK,GAAG,CACZ,aAAa,CAAC,CAAd,GAAkB,aAAa,CAAC,CAAd,CAAgB,MAAlC,GAA2C,SAD/B,EAEZ,aAAa,CAAC,CAAd,GAAkB,aAAa,CAAC,CAAd,CAAgB,MAAlC,GAA2C,UAF/B,CAAd;AAIA,aAAO,OAAO,KAAK,CAAC,IAAN,CAAW,IAAX,CAAgB,GAA9B;AACD,KANM,CAAP;AAOD;;AAED,SAAO,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,UAApB,CAAP;AACD;;;;;;;;;;;;;;;;;;;;ACxaD;;AACA;;AACA;;AASA;;AASA;;AAEA;;AAaA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAGA;;;;;;AAEM,SAAU,kBAAV,CAA6B,KAA7B,EAA2C,QAA3C,EAAwF;AAC5F,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,IAAA,sBAAsB,CAAC,KAAD,EAAQ,QAAR,CAAtB;AACD,GAFD,MAEO;AACL,IAAA,yBAAyB,CAAC,KAAD,EAAQ,QAAR,CAAzB;AACD;AACF;;AAED,SAAS,sBAAT,CAAgC,KAAhC,EAAkD,QAAlD,EAA+F;AAC7F,QAAM,oBAAoB,GAAwB,KAAK,CAAC,SAAN,CAAgB,MAAlE;AACA,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA,QAAT;AAAmB,IAAA,OAAnB;AAA4B,IAAA;AAA5B,MAA+C,KAArD;;AAEA,OAAK,MAAM,OAAX,IAAsB,eAAK,oBAAL,CAAtB,EAAkD;AAChD,UAAM,cAAc,GAAG,eAAe,CAAC,OAAD,CAAtC;AACA,UAAM,cAAc,GAAG,oBAAoB,CAAC,OAAD,CAA3C;AACA,UAAM,eAAe,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAxB;AACA,UAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB;AAEA,UAAM,cAAc,GAAG,cAAc,CAAC,QAAD,CAArC;AACA,UAAM,SAAS,GAAG,eAAe,CAAC,GAAhB,CAAoB,MAApB,CAAlB;AACA,UAAM,YAAY,GAAG,eAAe,CAAC,GAAhB,CAAoB,SAApB,CAArB;AACA,UAAM,iBAAiB,GAAG,eAAe,CAAC,GAAhB,CAAoB,cAApB,CAA1B;AAEA,UAAM,oBAAoB,GAAG,qCAAyB,SAAzB,EAAoC,QAApC,CAA7B;AACA,UAAM,sBAAsB,GAAG,gDAAoC,OAApC,EAA6C,QAA7C,CAA/B;;AAEA,QAAI,cAAc,KAAK,SAAvB,EAAkC;AAChC;AACA,UAAI,CAAC,oBAAL,EAA2B;AACzB,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,iCAAZ,CAA8C,SAA9C,EAAyD,QAAzD,EAAmE,OAAnE,CAAT;AACD,OAFD,MAEO,IAAI,sBAAJ,EAA4B;AACjC;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,sBAAT;AACD;AACF;;AACD,QAAI,oBAAoB,IAAI,sBAAsB,KAAK,SAAvD,EAAkE;AAChE,UAAI,cAAc,KAAK,SAAvB,EAAkC;AAChC;AACA,QAAA,cAAc,CAAC,iBAAf,CAAiC,QAAjC,EAA2C,cAA3C;AACD,OAHD,MAGO;AACL,cAAM,KAAK,GACT,QAAQ,IAAI,UAAZ,GACI,UAAU,CAAC,QAAD,CAAV,CAAqB;AACnB,UAAA,KADmB;AAEnB,UAAA,OAFmB;AAGnB,UAAA,eAHmB;AAInB,UAAA,SAJmB;AAKnB,UAAA,YALmB;AAMnB,UAAA,iBANmB;AAOnB,UAAA,MAAM,EAAE,cAAc,CAAC,MAPJ;AAQnB,UAAA,OARmB;AASnB,UAAA;AATmB,SAArB,CADJ,GAYI,MAAM,CAAC,KAAP,CAAa,QAAb,CAbN;;AAcA,YAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,UAAA,cAAc,CAAC,GAAf,CAAmB,QAAnB,EAA6B,KAA7B,EAAoC,KAApC;AACD;AACF;AACF;AACF;AACF;;AAcM,MAAM,UAAU,GAEnB;AACF,EAAA,IAAI,EAAE,CAAC;AAAC,IAAA,KAAD;AAAQ,IAAA;AAAR,GAAD,KAA+B,4BAAW,eAAX,IAA8B,IAAI,CAAC,KAAD,EAAQ,eAAR,CAAlC,GAA6D,SADhG;AAGF,EAAA,WAAW,EAAE,CAAC;AAAC,IAAA,OAAD;AAAU,IAAA;AAAV,GAAD,KAAgC,WAAW,CAAC,OAAD,EAAU,eAAe,CAAC,IAA1B,CAHtD;AAKF,EAAA,IAAI,EAAE,CAAC;AAAC,IAAA,SAAD;AAAY,IAAA,OAAZ;AAAqB,IAAA;AAArB,GAAD,KAA2C,IAAI,CAAC,SAAD,EAAY,OAAZ,EAAqB,eAArB,CALnD;AAOF,EAAA,OAAO,EAAE,CAAC;AAAC,IAAA,OAAD;AAAU,IAAA,SAAV;AAAqB,IAAA,eAArB;AAAsC,IAAA,OAAtC;AAA+C,IAAA;AAA/C,GAAD,KACP,OAAO,CAAC,OAAD,EAAU,SAAV,EAAqB,MAAM,CAAC,KAA5B,EAAmC,eAAnC,EAAoD,OAApD,EAA6D,MAAM,CAAC,GAApE,CARP;AAUF,EAAA,YAAY,EAAE,CAAC;AAAC,IAAA,YAAD;AAAe,IAAA,OAAf;AAAwB,IAAA,OAAxB;AAAiC,IAAA;AAAjC,GAAD,KACZ,YAAY,CAAC,YAAD,EAAe,OAAf,EAAwB,OAAO,CAAC,IAAhC,EAAsC,MAAM,CAAC,KAA7C,CAXZ;AAaF,EAAA,YAAY,EAAE,CAAC;AAAC,IAAA,YAAD;AAAe,IAAA,OAAf;AAAwB,IAAA,SAAxB;AAAmC,IAAA,OAAnC;AAA4C,IAAA,iBAA5C;AAA+D,IAAA;AAA/D,GAAD,KACZ,YAAY,CAAC,YAAD,EAAe,OAAf,EAAwB,SAAxB,EAAmC,OAAO,CAAC,IAA3C,EAAiD,iBAAjD,EAAoE,MAAM,CAAC,KAA3E,CAdZ;AAgBF,EAAA,OAAO,EAAE,CAAC;AAAC,IAAA,eAAD;AAAkB,IAAA,SAAlB;AAA6B,IAAA,OAA7B;AAAsC,IAAA;AAAtC,GAAD,KAAkD;AACzD,UAAM,IAAI,GAAG,4BAAW,eAAX,IAA8B,eAAe,CAAC,IAA9C,GAAqD,SAAlE;AACA,WAAO,OAAO,CAAC,SAAD,EAAY,IAAZ,EAAkB,OAAlB,EAA2B,MAAM,CAAC,KAAlC,CAAd;AACD,GAnBC;AAoBF,EAAA,IAAI,EAAE,CAAC;AAAC,IAAA,OAAD;AAAU,IAAA,eAAV;AAA2B,IAAA,MAA3B;AAAmC,IAAA,OAAnC;AAA4C,IAAA;AAA5C,GAAD,KACJ,IAAI,CAAC,OAAD,EAAU,eAAV,EAA2B,MAA3B,EAAmC,OAAnC,EAA4C,SAA5C;AArBJ,CAFG,EA0BP;;;;AACM,SAAU,eAAV,CAA0B,KAA1B,EAAsC;AAC1C,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,oCAAoB,KAApB;AACD,GAFD,MAEO;AACL,IAAA,yBAAyB,CAAC,KAAD,EAAQ,OAAR,CAAzB;AACD;AACF;;AAEK,SAAU,yBAAV,CAAoC,KAApC,EAAkD,QAAlD,EAA+F;AACnG,QAAM,oBAAoB,GAAwB,KAAK,CAAC,SAAN,CAAgB,MAAlE;;AAEA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,QAAI,QAAQ,KAAK,OAAjB,EAA0B;AACxB,MAAA,eAAe,CAAC,KAAD,CAAf;AACD,KAFD,MAEO;AACL,MAAA,kBAAkB,CAAC,KAAD,EAAQ,QAAR,CAAlB;AACD;AACF;;AAED,OAAK,MAAM,OAAX,IAAsB,eAAK,oBAAL,CAAtB,EAAkD;AAChD,QAAI,iBAAJ;;AAEA,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,YAAM,cAAc,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAvB;;AACA,UAAI,cAAJ,EAAoB;AAClB,cAAM,sBAAsB,GAAG,cAAc,CAAC,eAAf,CAA+B,QAA/B,CAA/B;AACA,QAAA,iBAAiB,GAAG,oCAClB,iBADkB,EAElB,sBAFkB,EAGlB,QAHkB,EAIlB,OAJkB,EAKlB,gCAAkC,CAAC,EAAD,EAAK,EAAL,KAAW;AAC3C,kBAAQ,QAAR;AACE,iBAAK,OAAL;AACE;AACA,kBAAI,EAAE,CAAC,IAAH,IAAW,EAAE,CAAC,IAAlB,EAAwB;AACtB,uBAAO,EAAE,CAAC,IAAH,GAAU,EAAE,CAAC,IAApB;AACD;;AACD,qBAAO,CAAP;AACF;AAPF;;AASA,iBAAO,CAAP;AACD,SAXD,CALkB,CAApB;AAkBD;AACF;;AACD,IAAA,oBAAoB,CAAC,OAAD,CAApB,CAA8B,eAA9B,CAA8C,QAA9C,EAAwD,iBAAxD;AACD;AACF;;AAEK,SAAU,IAAV,CAAe,KAAf,EAA6B,QAA7B,EAA4D;AAChE,QAAM,GAAG,GAAG,QAAQ,CAAC,GAArB;;AACA,MAAI,oBAAU,GAAV,CAAJ,EAAoB;AAClB,UAAM,SAAS,GAAG,4BAAiB,KAAjB,EAAwB,QAAQ,CAAC,KAAjC,EAAwC,GAAxC,CAAlB;AACA,WAAO,IAAI,wBAAJ,CAAqB,MAAK;AAC/B,aAAO,KAAK,CAAC,aAAN,CAAoB,SAApB,CAAP;AACD,KAFM,CAAP;AAGD,GALD,MAKO,IAAI,mBAAS,GAAT,KAAiB,sBAAY,GAAZ,CAAjB,IAAqC,GAAG,CAAC,IAAJ,KAAa,SAAtD,EAAiE;AACtE;AACA,WAAO;AACL,MAAA,IAAI,EAAE,GAAG,CAAC;AADL,KAAP;AAGD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,WAAV,CAAsB,OAAtB,EAAwC,IAAxC,EAAkD;AACtD,MAAI,mBAAS,CAAC,cAAD,EAAQ,aAAR,EAAc,eAAd,CAAT,EAAgC,OAAhC,KAA4C,IAAI,KAAK,SAAzD,EAAoE;AAClE,WAAO,KAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,IAAV,CACJ,SADI,EAEJ,OAFI,EAGJ,eAHI,EAGkD;;;AAEtD,MAAI,CAAA,CAAA,EAAA,GAAA,6BAAY,eAAZ,CAAA,MAA4B,IAA5B,IAA4B,EAAA,KAAA,KAAA,CAA5B,GAA4B,KAAA,CAA5B,GAA4B,EAAA,CAAE,GAA9B,KAAqC,IAAI,CAAC,QAAL,CAAc,CAAC,iBAAU,IAAX,EAAiB,iBAAU,GAA3B,CAAd,EAA+C,SAA/C,CAAzC,EAAoG;AAClG,WAAO,SAAP;AACD;;AACD,SAAO,OAAO,IAAI,qCAAX,GAA0C,IAA1C,GAAiD,SAAxD;AACD;;AAEK,SAAU,OAAV,CACJ,OADI,EAEJ,SAFI,EAGJ,WAHI,EAIJ,eAJI,EAKJ,OALI,EAMJ,SANI,EAMiB;AAErB,MAAI,OAAO,IAAI,qCAAf,EAA6C;AAC3C,QAAI,qCAAyB,SAAzB,CAAJ,EAAyC;AACvC,UAAI,WAAW,CAAC,iBAAZ,KAAkC,SAAtC,EAAiD;AAC/C,eAAO,WAAW,CAAC,iBAAnB;AACD;;AAED,YAAM;AAAC,QAAA,IAAD;AAAO,QAAA;AAAP,UAAiB,OAAvB;;AACA,UAAI,IAAI,KAAK,KAAT,IAAkB,EAAE,4BAAW,eAAX,MAAgC,eAAe,CAAC,GAAhB,IAAuB,eAAe,CAAC,QAAvE,CAAF,CAAtB,EAA2G;AACzG,YAAK,MAAM,KAAK,UAAX,IAAyB,OAAO,KAAK,GAAtC,IAA+C,MAAM,KAAK,YAAX,IAA2B,OAAO,KAAK,GAA1F,EAAgG;AAC9F,iBAAO,SAAS,CAAC,kBAAjB;AACD;AACF;AACF;;AAED,QAAI,SAAS,KAAK,iBAAU,KAA5B,EAAmC;AACjC,aAAO,WAAW,CAAC,YAAnB;AACD;AACF;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,YAAV,CAAuB,YAAvB,EAAyD,OAAzD,EAA2E,IAA3E,EAAuF,WAAvF,EAA+G;AACnH,MAAI,YAAY,KAAK,SAArB,EAAgC;AAC9B;AACA,WAAO,SAAP;AACD;;AAED,MAAI,OAAO,IAAI,qCAAf,EAA6C;AAC3C;AACA;AAEA;AAEA,UAAM;AAAC,MAAA,gBAAD;AAAmB,MAAA,mBAAnB;AAAwC,MAAA;AAAxC,QAAgE,WAAtE;AAEA,WAAO,0BAAgB,gBAAhB,EAAkC,IAAI,KAAK,KAAT,GAAiB,mBAAjB,GAAuC,oBAAzE,CAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,YAAV,CACJ,YADI,EAEJ,OAFI,EAGJ,SAHI,EAIJ,IAJI,EAKJ,iBALI,EAMJ,WANI,EAMoB;AAExB,MAAI,YAAY,KAAK,SAArB,EAAgC;AAC9B;AACA,WAAO,SAAP;AACD;;AAED,MAAI,OAAO,IAAI,qCAAf,EAA6C;AAC3C;AACA;AACA,QAAI,SAAS,KAAK,iBAAU,IAA5B,EAAkC;AAChC,YAAM;AAAC,QAAA;AAAD,UAAqB,WAA3B;AAEA,aAAO,0BACL,gBADK;AAEL;;;;AAIA,6BAAY,iBAAZ,IAAiC;AAAC,QAAA,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM;AAApC,OAAjC,GAA6E,iBAAiB,GAAG,CAN5F,CAAP;AAQD;AACF;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,OAAV,CAAkB,SAAlB,EAAwC,IAAxC,EAA4D,OAA5D,EAA8E,WAA9E,EAAsG;AAC1G,MAAI,OAAO,KAAK,GAAZ,IAAmB,WAAW,CAAC,QAAZ,KAAyB,SAAhD,EAA2D;AACzD,QAAI,gCAAoB,SAApB,KAAkC,IAAI,KAAK,YAA/C,EAA6D;AAC3D,UAAI,uBAAY,WAAW,CAAC,QAAxB,CAAJ,EAAuC;AACrC,eAAO;AAAC,UAAA,MAAM,EAAE,IAAI,WAAW,CAAC,QAAZ,CAAqB,MAAM;AAAxC,SAAP;AACD,OAFD,MAEO;AACL,eAAO,CAAC,WAAW,CAAC,QAApB;AACD;AACF;;AACD,WAAO,WAAW,CAAC,QAAnB;AACD;;AAED,MAAI,gCAAoB,SAApB,KAAkC,IAAI,KAAK,YAA/C,EAA6D;AAC3D;AACA;AACA,WAAO,IAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAEK,SAAU,IAAV,CACJ,OADI,EAEJ,QAFI,EAGJ,eAHI,EAIJ,OAJI,EAKJ,SALI,EAKgB;AAEpB;AACA,QAAM,eAAe,GAAG,CAAC,CAAC,eAAF,IAAqB,eAAe,KAAK,cAAjE;;AACA,MAAI,eAAJ,EAAqB;AACnB,QAAI,gCAAoB,SAApB,CAAJ,EAAoC;AAClC,UAAI,uBAAQ,eAAR,CAAJ,EAA8B;AAC5B,cAAM,KAAK,GAAG,eAAe,CAAC,CAAD,CAA7B;AACA,cAAM,IAAI,GAAG,eAAe,CAAC,eAAe,CAAC,MAAhB,GAAyB,CAA1B,CAA5B;;AAEA,YAAI,KAAK,IAAI,CAAT,IAAc,IAAI,IAAI,CAA1B,EAA6B;AAC3B;AACA,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AACD;AACF,GAjBmB,CAmBpB;AAEA;AACA;AACA;AACA;;;AACA,MAAI,OAAO,KAAK,MAAZ,IAAsB,QAAQ,CAAC,IAAT,KAAkB,cAAxC,IAA0D,CAAC,mCAAuB,SAAvB,CAA/D,EAAkG;AAChG,WAAO,IAAP;AACD,GA3BmB,CA6BpB;AACA;;;AACA,MACE,EAAE,4BAAW,QAAX,KAAwB,QAAQ,CAAC,GAAnC,KACA,IAAI,CAAC,QAAL,CAAc,CAAC,GAAG,gCAAJ,EAA6B,GAAG,sCAAhC,CAAd,EAA8E,OAA9E,CAFF,EAGE;AACA,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAiB,OAAvB;;AACA,QAAI,mBAAS,CAAC,KAAD,EAAQ,MAAR,EAAgB,MAAhB,EAAwB,OAAxB,CAAT,EAA2C,IAA3C,CAAJ,EAAsD;AACpD,UAAK,MAAM,KAAK,YAAX,IAA2B,OAAO,KAAK,GAAxC,IAAiD,MAAM,KAAK,UAAX,IAAyB,OAAO,KAAK,GAA1F,EAAgG;AAC9F,eAAO,KAAP;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD;;;;;;;;;AC9XD;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAIA;;;;AAIA;AACM,SAAU,SAAV,CACJ,cADI,EAEJ,OAFI,EAGJ,QAHI,EAIJ,IAJI,EAIM;AAEV,QAAM,gBAAgB,GAAG,WAAW,CAAC,OAAD,EAAU,QAAV,EAAoB,IAApB,CAApC;AACA,QAAM;AAAC,IAAA;AAAD,MAAS,cAAf;;AAEA,MAAI,CAAC,6BAAe,OAAf,CAAL,EAA8B;AAC5B;AACA,WAAO,IAAP;AACD;;AACD,MAAI,IAAI,KAAK,SAAb,EAAwB;AACtB;AACA,QAAI,CAAC,oCAAwB,OAAxB,EAAiC,IAAjC,CAAL,EAA6C;AAC3C,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,2BAAZ,CAAwC,OAAxC,EAAiD,IAAjD,EAAuD,gBAAvD,CAAT;AACA,aAAO,gBAAP;AACD,KALqB,CAOtB;;;AACA,QAAI,4BAAW,QAAX,KAAwB,CAAC,qCAAyB,IAAzB,EAA+B,QAAQ,CAAC,IAAxC,CAA7B,EAA4E;AAC1E,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,4BAAZ,CAAyC,IAAzC,EAA+C,gBAA/C,CAAT;AACA,aAAO,gBAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAED,SAAO,gBAAP;AACD;AAED;;;AAGA;;;AACA,SAAS,WAAT,CAAqB,OAArB,EAAuC,QAAvC,EAAwF,IAAxF,EAAkG;;;AAChG,UAAQ,QAAQ,CAAC,IAAjB;AACE,SAAK,SAAL;AACA,SAAK,SAAL;AACE,UAAI,6BAAe,OAAf,KAA2B,wBAAU,OAAV,MAAuB,UAAtD,EAAkE;AAChE,YAAI,OAAO,KAAK,OAAZ,IAAuB,QAAQ,CAAC,IAAT,KAAkB,SAA7C,EAAwD;AACtD,UAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,2BAAZ,CAAwC,OAAxC,EAAiD,SAAjD,CAAT;AACD;;AACD,eAAO,SAAP;AACD;;AAED,UAAI,OAAO,IAAI,sCAAf,EAA6C;AAC3C,YAAI,IAAI,CAAC,QAAL,CAAc,CAAC,MAAD,EAAS,KAAT,EAAgB,OAAhB,EAAyB,MAAzB,CAAd,EAAgD,IAAhD,CAAJ,EAA2D;AACzD;AACA;AACA,iBAAO,MAAP;AACD;AACF,OAND,MAMO,IAAI,IAAI,KAAK,KAAT,IAAkB,OAAO,IAAI,4CAAjC,EAAqE;AAC1E,eAAO,MAAP;AACD;;AAED,UAAI,QAAQ,CAAC,IAAT,KAAkB,SAAlB,IAAgC,2CAA0B,QAA1B,MAAmC,CAAA,EAAA,GAAI,QAAQ,CAAC,IAAb,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,KAAA,CAAjB,GAAiB,EAAA,CAAE,QAAtD,CAApC,EAAqG;AACnG,eAAO,MAAP;AACD,OApBH,CAqBE;;;AACA,aAAO,OAAP;;AAEF,SAAK,UAAL;AACE,UAAI,6BAAe,OAAf,CAAJ,EAA6B;AAC3B,eAAO,MAAP;AACD,OAFD,MAEO,IAAI,wBAAU,OAAV,MAAuB,UAA3B,EAAuC;AAC5C,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,2BAAZ,CAAwC,OAAxC,EAAiD,UAAjD,CAAT,EAD4C,CAE5C;;AACA,eAAO,SAAP;AACD,OAJM,MAIA,IAAI,4BAAW,QAAX,KAAwB,QAAQ,CAAC,QAAjC,IAA6C,iCAAkB,QAAQ,CAAC,QAA3B,EAAqC,GAAtF,EAA2F;AAChG,eAAO,KAAP;AACD;;AACD,aAAO,MAAP;;AAEF,SAAK,cAAL;AACE,UAAI,6BAAe,OAAf,CAAJ,EAA6B;AAC3B,YAAI,4BAAW,QAAX,KAAwB,oBAAU,QAAQ,CAAC,GAAnB,CAA5B,EAAqD;AACnD,iBAAO,aAAP;AACD;;AAED,eAAO,QAAP;AACD,OAND,MAMO,IAAI,wBAAU,OAAV,MAAuB,UAA3B,EAAuC;AAC5C,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,2BAAZ,CAAwC,OAAxC,EAAiD,cAAjD,CAAT,EAD4C,CAE5C;;AACA,eAAO,SAAP;AACD;;AAED,aAAO,QAAP;;AAEF,SAAK,SAAL;AACE,aAAO,SAAP;AAtDJ;AAyDA;;;AACA,QAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,QAAQ,CAAC,IAAtC,CAAV,CAAN;AACD;;;;;;;;;;ACjHD;;AACA;;AACA;;AACA;;AAMA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEM,SAAU,WAAV,CAAsB,KAAtB,EAAoC;AAAC,EAAA;AAAD,IAAyC,EAA7E,EAA+E;AACnF,EAAA,cAAc,CAAC,KAAD,CAAd;AACA,gCAAiB,KAAjB;;AACA,OAAK,MAAM,IAAX,IAAmB,kDAAnB,EAAgE;AAC9D,wCAAmB,KAAnB,EAA0B,IAA1B;AACD;;AACD,MAAI,CAAC,WAAL,EAAkB;AAChB;AACA,qCAAgB,KAAhB;AACD;AACF;;AAEK,SAAU,cAAV,CAAyB,KAAzB,EAAqC;AACzC,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,IAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,GAAyB,kBAAkB,CAAC,KAAD,CAA3C;AACD,GAFD,MAEO;AACL,IAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,GAAyB,qBAAqB,CAAC,KAAD,CAA9C;AACD;AACF;AAED;;;;;AAGA,SAAS,kBAAT,CAA4B,KAA5B,EAA4C;AAC1C,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA;AAAX,MAAmB,KAAzB;AAEA,SAAO,wBAAe,MAAf,CAAsB,CAAC,eAAD,EAAuC,OAAvC,KAAgE;AAC3F,UAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB,CAD2F,CACa;AAExG;;AACA,QAAI,eAAe,IAAI,IAAI,KAAK,cAA5B,IAAwC,OAAO,KAAK,cAApD,IAA6D,eAAe,CAAC,IAAhB,KAAyB,aAA1F,EAAmG;AACjG,aAAO,eAAP;AACD;;AACD,QAAI,cAAc,GAAG,eAAe,IAAI,eAAe,CAAC,OAAD,CAAvD;;AAEA,QAAI,eAAe,IAAI,cAAc,KAAK,IAAtC,IAA8C,cAAc,KAAK,KAArE,EAA4E;AAC1E,MAAA,cAAc,GAAG,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAA,cAAA,GAAkB,EAAnC;AAEA,YAAM,KAAK,GAAG,sBAAU,cAAV,EAA0B,OAA1B,EAAmC,eAAnC,EAAoD,IAApD,CAAd;AACA,MAAA,eAAe,CAAC,OAAD,CAAf,GAA2B,IAAI,yBAAJ,CAAmB,KAAK,CAAC,SAAN,CAAgB,OAAO,GAAG,EAA1B,EAA8B,IAA9B,CAAnB,EAAwD;AACjF,QAAA,KAAK,EAAE,KAD0E;AAEjF,QAAA,QAAQ,EAAE,cAAc,CAAC,IAAf,KAAwB;AAF+C,OAAxD,CAA3B;AAID;;AAED,WAAO,eAAP;AACD,GApBM,EAoBJ,EApBI,CAAP;AAqBD;;AAED,MAAM,mBAAmB,GAAG,gCAC1B,CAAC,GAAD,EAAiB,GAAjB,KAAoC,gCAAoB,GAApB,IAA2B,gCAAoB,GAApB,CADrC,CAA5B;;AAIA,SAAS,qBAAT,CAA+B,KAA/B,EAA2C;;;AACzC,QAAM,eAAe,GAAyB,KAAK,CAAC,SAAN,CAAgB,MAAhB,GAAyB,EAAvE;AAEA,QAAM,0BAA0B,GAAuD,EAAvF;AACA,QAAM,OAAO,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhC,CAJyC,CAMzC;;AACA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,cAAc,CAAC,KAAD,CAAd,CADkC,CAGlC;;AACA,SAAK,MAAM,OAAX,IAAsB,gBAAK,KAAK,CAAC,SAAN,CAAgB,MAArB,CAAtB,EAAoD;AAClD;AACA,MAAA,OAAO,CAAC,KAAR,CAAc,OAAd,IAAsB,CAAA,EAAA,GAAG,OAAO,CAAC,KAAR,CAAc,OAAd,CAAH,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,EAAzB,GAA6B,kCAAoB,OAApB,EAA6B,KAA7B,CAAnD;;AAEA,UAAI,OAAO,CAAC,KAAR,CAAc,OAAd,MAA2B,QAA/B,EAAyC;AACvC,cAAM,iBAAiB,GAAG,0BAA0B,CAAC,OAAD,CAApD;AACA,cAAM,cAAc,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,EAAgC,eAAhC,CAAgD,MAAhD,CAAvB;;AAEA,YAAI,iBAAJ,EAAuB;AACrB,cAAI,4BAAgB,iBAAiB,CAAC,KAAlC,EAAyC,cAAc,CAAC,KAAxD,CAAJ,EAAoE;AAClE;AACA,YAAA,0BAA0B,CAAC,OAAD,CAA1B,GAAsC,oCACpC,iBADoC,EAEpC,cAFoC,EAGpC,MAHoC,EAIpC,OAJoC,EAKpC,mBALoC,CAAtC;AAOD,WATD,MASO;AACL;AACA,YAAA,OAAO,CAAC,KAAR,CAAc,OAAd,IAAyB,aAAzB,CAFK,CAGL;;AACA,mBAAO,0BAA0B,CAAC,OAAD,CAAjC;AACD;AACF,SAhBD,MAgBO;AACL,UAAA,0BAA0B,CAAC,OAAD,CAA1B,GAAsC,cAAtC;AACD;AACF;AACF;AACF,GAxCwC,CA0CzC;;;AACA,OAAK,MAAM,OAAX,IAAsB,gBAAK,0BAAL,CAAtB,EAAwD;AACtD;AACA,UAAM,IAAI,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhB,EAAyB,IAAzB,CAAb;AACA,UAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAD,CAAnD;AACA,IAAA,eAAe,CAAC,OAAD,CAAf,GAA2B,IAAI,yBAAJ,CAAmB,IAAnB,EAAyB,gBAAzB,CAA3B,CAJsD,CAMtD;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,YAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAnB;;AACA,UAAI,UAAJ,EAAgB;AACd,QAAA,KAAK,CAAC,WAAN,CAAkB,UAAU,CAAC,GAAX,CAAe,MAAf,CAAlB,EAA0C,IAA1C;AACA,QAAA,UAAU,CAAC,MAAX,GAAoB,IAApB;AACD;AACF;AACF;;AAED,SAAO,eAAP;AACD;;;;;;;;;;;;;;;AC7HD;;AASA;;AAGA;;AACA;;AAEA;;AACA;;AACA;;AAQA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAIA;;AACA;;AAEA;;AACA;;AAMA;;AAEA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AAEA;;;;;;AAyCM,MAAO,OAAP,CAAc;AAGlB,EAAA,WAAA,GAAA;AACE,SAAK,OAAL,GAAe,EAAf;AACD;;AAEM,EAAA,MAAM,CAAC,OAAD,EAAkB,OAAlB,EAAiC;AAC5C,SAAK,OAAL,CAAa,OAAb,IAAwB,OAAxB;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAa;AACrB,WAAO,KAAK,OAAL,CAAa,IAAb,MAAuB,SAA9B;AACD;;AAEM,EAAA,GAAG,CAAC,IAAD,EAAa;AACrB;AACA;AACA,WAAO,KAAK,OAAL,CAAa,IAAb,KAAsB,IAAI,KAAK,KAAK,OAAL,CAAa,IAAb,CAAtC,EAA0D;AACxD,MAAA,IAAI,GAAG,KAAK,OAAL,CAAa,IAAb,CAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAvBiB;AA0BpB;;;;;;;;;;;;;AAUM,SAAU,WAAV,CAAsB,KAAtB,EAAkC;AACtC,SAAO,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,IAAP,MAAgB,MAAvB;AACD;;AAEK,SAAU,YAAV,CAAuB,KAAvB,EAAmC;AACvC,SAAO,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,IAAP,MAAgB,OAAvB;AACD;;AAEK,SAAU,aAAV,CAAwB,KAAxB,EAAoC;AACxC,SAAO,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,IAAP,MAAgB,QAAvB;AACD;;AAEK,SAAU,YAAV,CAAuB,KAAvB,EAAmC;AACvC,SAAO,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,IAAP,MAAgB,OAAvB;AACD;;AAEK,MAAgB,KAAhB,CAAqB;AAyBzB,EAAA,WAAA,CACE,IADF,EAEkB,IAFlB,EAGkB,MAHlB,EAIE,eAJF,EAKkB,MALlB,EAME,OANF,EAOkB,IAPlB,EAOuC;;;AALrB,SAAA,IAAA,GAAA,IAAA;AACA,SAAA,MAAA,GAAA,MAAA;AAEA,SAAA,MAAA,GAAA,MAAA;AAEA,SAAA,IAAA,GAAA,IAAA;AATO,SAAA,QAAA,GAAoB,EAApB;AA8ZzB;;;;AAGO,SAAA,gBAAA,GAAoB,IAAD,IAAsB;AAC9C;AAEA;AACA,UAAI,IAAI,CAAC,IAAL,IAAa,IAAI,CAAC,IAAL,CAAU,IAA3B,EAAiC;AAC/B,QAAA,IAAI,CAAC,IAAL,CAAU,IAAV,GAAiB,KAAK,gBAAL,CAAsB,IAAI,CAAC,IAAL,CAAU,IAAhC,CAAjB;AACD,OAN6C,CAQ9C;;;AACA,UAAI,IAAI,CAAC,IAAL,IAAa,IAAI,CAAC,IAAL,CAAU,KAAvB,IAAgC,IAAI,CAAC,IAAL,CAAU,KAAV,CAAgB,IAApD,EAA0D;AACxD,QAAA,IAAI,CAAC,IAAL,CAAU,KAAV,CAAgB,IAAhB,GAAuB,KAAK,gBAAL,CAAsB,IAAI,CAAC,IAAL,CAAU,KAAV,CAAgB,IAAtC,CAAvB;AACD;;AAED,aAAO,IAAP;AACD,KAdM;;AAtZL,SAAK,MAAL,GAAc,MAAd;AACA,SAAK,MAAL,GAAc,MAAd,CAHqC,CAKrC;;AACA,SAAK,IAAL,GAAS,CAAA,EAAA,GAAG,IAAI,CAAC,IAAR,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,eAAzB;AACA,SAAK,KAAL,GAAa,mBAAO,IAAI,CAAC,KAAZ,IAAqB;AAAC,MAAA,IAAI,EAAE,IAAI,CAAC;AAAZ,KAArB,GAA2C,IAAI,CAAC,KAA7D,CAPqC,CASrC;;AACA,SAAK,YAAL,GAAoB,MAAM,GAAG,MAAM,CAAC,YAAV,GAAyB,IAAI,OAAJ,EAAnD;AACA,SAAK,iBAAL,GAAyB,MAAM,GAAG,MAAM,CAAC,iBAAV,GAA8B,IAAI,OAAJ,EAA7D;AACA,SAAK,aAAL,GAAqB,MAAM,GAAG,MAAM,CAAC,aAAV,GAA0B,IAAI,OAAJ,EAArD;AAEA,SAAK,IAAL,GAAY,IAAI,CAAC,IAAjB;AAEA,SAAK,WAAL,GAAmB,IAAI,CAAC,WAAxB;AACA,SAAK,UAAL,GAAkB,mCAAkB,CAAA,EAAA,GAAC,IAAI,CAAC,SAAN,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,EAArC,CAAlB;AACA,SAAK,MAAL,GAAc,IAAI,KAAK,OAAT,IAAoB,IAAI,KAAK,MAA7B,GAAsC,EAAtC,GAA2C,oCAAyB,IAAzB,EAA+B,IAA/B,EAAqC,MAArC,CAAzD;AAEA,SAAK,SAAL,GAAiB;AACf,MAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,SAAP,CAAiB,IAAjB,CAAsB,OAAzB,GAAmC,EAD9C;AAEJ,QAAA,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,SAAP,CAAiB,IAAjB,CAAsB,WAAzB,GAAuC,EAFtD;AAGJ,QAAA,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAAC,SAAP,CAAiB,IAAjB,CAAsB,mBAAzB,GAA+C,EAHtE;AAIJ;AACA,QAAA,SAAS,EAAE,uBAAY,IAAZ,KAAsB,MAAM,IAAI,MAAM,CAAC,SAAP,CAAiB,IAAjB,CAAsB,SAAhC,IAA6C,IAAI,CAAC,IAAL,KAAc;AALxF,OADS;AAQf,MAAA,UAAU,EAAE,IAAI,YAAJ,EARG;AASf,MAAA,aAAa,EAAE;AAAC,QAAA,GAAG,EAAE,EAAN;AAAU,QAAA,MAAM,EAAE,EAAlB;AAAsB,QAAA,KAAK,EAAE;AAA7B,OATA;AAUf,MAAA,IAAI,EAAE,IAVS;AAWf,MAAA,OAAO,EAAA,MAAA,CAAA,MAAA,CAAA;AACL,QAAA,KAAK,EAAE,EADF;AAEL,QAAA,IAAI,EAAE,EAFD;AAGL,QAAA,MAAM,EAAE;AAHH,OAAA,EAID,OAAO,GAAG,qBAAU,OAAV,CAAH,GAAwB,EAJ9B,CAXQ;AAiBf,MAAA,SAAS,EAAE,IAjBI;AAkBf,MAAA,MAAM,EAAE,IAlBO;AAmBf,MAAA,UAAU,EAAE,IAnBG;AAoBf,MAAA,IAAI,EAAE,EApBS;AAqBf,MAAA,OAAO,EAAE;AArBM,KAAjB;AAuBD;;AAED,MAAW,KAAX,GAAgB;AACd,WAAO,KAAK,gBAAL,CAAsB,OAAtB,CAAP;AACD;;AAED,MAAW,MAAX,GAAiB;AACf,WAAO,KAAK,gBAAL,CAAsB,QAAtB,CAAP;AACD;;AAEM,EAAA,KAAK,GAAA;AACV,SAAK,UAAL;AAEA,SAAK,eAAL,GAHU,CAGc;;AACxB,SAAK,8BAAL;AAEA,SAAK,eAAL;AACA,SAAK,eAAL;AACA,SAAK,SAAL,GARU,CAQQ;;AAClB,SAAK,mBAAL,GATU,CASkB;;AAC5B,SAAK,YAAL,GAVU,CAUW;;AACrB,SAAK,cAAL,GAXU,CAWa;AACxB;;AAMM,EAAA,UAAU,GAAA;AACf,6BAAY,IAAZ;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,iCAAgB,IAAhB;AACD;AAID;;;;;;;AAKQ,EAAA,8BAA8B,GAAA;AACpC,QAAI,KAAK,OAAL,CAAa,OAAb,MAA0B,OAA9B,EAAuC;AACrC,WAAK,YAAL,CAAkB,KAAK,OAAL,CAAa,OAAb,CAAlB,EAAyC,OAAzC;AACD;;AACD,QAAI,KAAK,OAAL,CAAa,QAAb,MAA2B,QAA/B,EAAyC;AACvC,WAAK,YAAL,CAAkB,KAAK,OAAL,CAAa,QAAb,CAAlB,EAA0C,QAA1C;AACD;AACF;;AAMM,EAAA,YAAY,GAAA;AACjB,4BAAY,IAAZ;AACD;;AAOM,EAAA,kBAAkB,GAAA;;;AACvB,QAAI,KAAK,IAAL,KAAc,MAAd,IAAwB,KAAK,IAAL,KAAc,OAA1C,EAAmD;AACjD,aAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAO,KAAK,IAAZ,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,KAAA,CAAhB,GAAgB,EAAA,CAAE,KAAlB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,MAA3B;AACD;;AACD,WAAO,SAAP;AACD;;AAEO,EAAA,sBAAsB,CAAC,IAAD,EAAqB;AACjD;AACA,UAAM;AAAC,MAAA,KAAK,EAAE;AAAR,QAA0B,IAAhC;AAAA,UAAoB,QAAQ,GAAA,mBAAI,IAAJ,EAAtB,CAAA,OAAA,CAAsB,CAA5B;AAEA,UAAM,CAAC,GAAkB,EAAzB;;AACA,SAAK,MAAM,QAAX,IAAuB,gBAAK,QAAL,CAAvB,EAAuC;AACrC,YAAM,KAAK,GAAG,QAAQ,CAAC,QAAD,CAAtB;;AACA,UAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,QAAA,CAAC,CAAC,QAAD,CAAD,GAAc,8BAAiB,KAAjB,CAAd;AACD;AACF;;AAED,WAAO,CAAP;AACD;;AAEM,EAAA,wBAAwB,CAAC,UAAD,EAAoB;AACjD,QAAI,WAAW,GAAkB,EAAjC;;AACA,QAAI,KAAK,IAAT,EAAe;AACb,MAAA,WAAW,GAAG,KAAK,sBAAL,CAA4B,KAAK,IAAjC,CAAd;AACD;;AAED,QAAI,CAAC,UAAL,EAAiB;AACf;AACA,UAAI,KAAK,WAAT,EAAsB;AACpB,QAAA,WAAW,CAAC,aAAD,CAAX,GAA6B,8BAAiB,KAAK,WAAtB,CAA7B;AACD,OAJc,CAMf;AACA;;;AACA,UAAI,KAAK,IAAL,KAAc,MAAd,IAAwB,KAAK,IAAL,KAAc,OAA1C,EAAmD;AACjD,eAAA,MAAA,CAAA,MAAA,CAAA;AACE,UAAA,KAAK,EAAE,KAAK,gBAAL,CAAsB,OAAtB,CADT;AAEE,UAAA,MAAM,EAAE,KAAK,gBAAL,CAAsB,QAAtB;AAFV,SAAA,EAGM,WAAW,KAAA,IAAX,IAAA,WAAW,KAAA,KAAA,CAAX,GAAA,WAAA,GAAe,EAHrB,CAAA;AAKD;AACF;;AAED,WAAO,mBAAQ,WAAR,IAAuB,SAAvB,GAAmC,WAA1C;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,QAAI,CAAC,KAAK,MAAV,EAAkB;AAChB,aAAO,SAAP;AACD;;AAED,UAAM,EAAA,GAAuB,KAAK,MAAlC;AAAA,UAAM;AAAC,MAAA;AAAD,QAAQ,EAAd;AAAA,UAAmB,MAAM,GAAA,mBAAA,EAAA,EAAnB,CAAA,SAAA,CAAmB,CAAzB;AAEA,UAAM;AAAC,MAAA,SAAD;AAAY,MAAA;AAAZ,QAAsB,IAA5B;AACA,UAAM,SAAS,GAAG,wCAAwB,SAAS,CAAC,aAAlC,EAAiD,MAAjD,CAAlB;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,OAAO,EAAE;AADX,KAAA,EAEK,KAAK,qBAAL,EAFL,CAAA,EAGK,MAHL,CAAA,EAIM,SAAS,GAAG;AAAC,MAAA;AAAD,KAAH,GAAiB,EAJhC,CAAA;AAMD;;AAES,EAAA,qBAAqB,GAAA;AAC7B,WAAO,EAAP;AACD;;AAIM,EAAA,mBAAmB,GAAA;AACxB,UAAM;AAAC,MAAA;AAAD,QAAkB,KAAK,SAA7B;AACA,QAAI,WAAW,GAAG,EAAlB;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,UAAI,aAAa,CAAC,OAAD,CAAb,CAAuB,KAA3B,EAAkC;AAChC,QAAA,WAAW,CAAC,IAAZ,CAAiB,mCAAmB,IAAnB,EAAyB,OAAzB,CAAjB;AACD;AACF;;AAED,SAAK,MAAM,OAAX,IAAsB,0BAAtB,EAAuC;AACrC,MAAA,WAAW,GAAG,WAAW,CAAC,MAAZ,CAAmB,qCAAqB,IAArB,EAA2B,OAA3B,CAAnB,CAAd;AACD;;AACD,WAAO,WAAP;AACD;;AAIM,EAAA,YAAY,GAAA;AACjB,WAAO,4BAAa,KAAK,SAAL,CAAe,IAA5B,EAAkC,KAAK,MAAvC,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,gCAAgB,IAAhB,CAAP;AACD;;AAEM,EAAA,mBAAmB,GAAA;AACxB,WAAO,oCAAoB,IAApB,CAAP;AACD;;AAEM,EAAA,aAAa,GAAA;;;AAClB,UAAM,EAAA,GAAA,CAAA,EAAA,GAAiC,KAAK,KAAtC,MAA2C,IAA3C,IAA2C,EAAA,KAAA,KAAA,CAA3C,GAA2C,EAA3C,GAAgD,EAAtD;AAAA,UAAM;AAAC,MAAA;AAAD,QAAS,EAAf;AAAA,UAAoB,eAAe,GAAA,mBAAA,EAAA,EAA7B,CAAA,UAAA,CAA6B,CAAnC;;AAEA,UAAM,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,+BAAmB,KAAK,MAAL,CAAY,KAA/B,EAAsC,OADhC,CAAA,EAEN,eAFM,CAAA,EAGL,QAAQ,GAAG;AAAC,MAAA,MAAM,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAAT,KAAH,GAAkC,EAHrC,CAAX;;AAMA,QAAI,KAAK,CAAC,IAAV,EAAgB;AACd,UAAI,oBAAS,CAAC,MAAD,EAAS,OAAT,CAAT,EAA4B,KAAK,IAAjC,CAAJ,EAA4C;AAC1C;AACA,YAAI,oBAAsB,CAAC,QAAD,EAAW,SAAX,CAAtB,EAA6C,KAAK,CAAC,MAAnD,CAAJ,EAAgE;AAC9D,UAAA,KAAK,CAAC,KAAN,GAAW,CAAA,EAAA,GAAG,KAAK,CAAC,KAAT,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,OAA7B;AACD;AACF,OALD,MAKO;AACL;AAEA;AACA;AACA,QAAA,KAAK,CAAC,MAAN,GAAY,CAAA,EAAA,GAAG,KAAK,CAAC,MAAT,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,OAA/B;AACD;;AAED,aAAO,mBAAQ,KAAR,IAAiB,SAAjB,GAA6B,KAApC;AACD;;AACD,WAAO,SAAP;AACD;AAED;;;;;AAGO,EAAA,aAAa,CAAC,OAAA,GAAuB,EAAxB,EAA0B;AAC5C,UAAM,KAAK,GAAgB,EAA3B;AAEA,IAAA,OAAO,GAAG,OAAO,CAAC,MAAR,CAAe,KAAK,eAAL,EAAf,CAAV;;AAEA,QAAI,OAAO,CAAC,MAAR,GAAiB,CAArB,EAAwB;AACtB,MAAA,KAAK,CAAC,OAAN,GAAgB,OAAhB;AACD;;AAED,UAAM,MAAM,GAAG,KAAK,cAAL,EAAf;;AACA,QAAI,MAAJ,EAAY;AACV,MAAA,KAAK,CAAC,MAAN,GAAe,MAAf;AACD;;AAED,IAAA,KAAK,CAAC,KAAN,GAAc,GAAG,MAAH,CAAU,KAAK,mBAAL,EAAV,EAAsC,KAAK,aAAL,EAAtC,CAAd,CAd4C,CAgB5C;AACA;;AACA,UAAM,MAAM,GAAG,CAAC,KAAK,MAAN,IAAgB,YAAY,CAAC,KAAK,MAAN,CAA5B,GAA4C,+BAAe,IAAf,CAA5C,GAAmE,EAAlF;;AACA,QAAI,MAAM,CAAC,MAAP,GAAgB,CAApB,EAAuB;AACrB,MAAA,KAAK,CAAC,MAAN,GAAe,MAAf;AACD;;AAED,UAAM,IAAI,GAAG,KAAK,YAAL,EAAb;;AACA,QAAI,IAAI,CAAC,MAAL,GAAc,CAAlB,EAAqB;AACnB,MAAA,KAAK,CAAC,IAAN,GAAa,IAAb;AACD;;AAED,UAAM,OAAO,GAAG,KAAK,eAAL,EAAhB;;AACA,QAAI,OAAO,CAAC,MAAR,GAAiB,CAArB,EAAwB;AACtB,MAAA,KAAK,CAAC,OAAN,GAAgB,OAAhB;AACD;;AAED,WAAO,KAAP;AACD;;AAEM,EAAA,OAAO,CAAC,IAAD,EAAa;AACzB,WAAO,mBAAQ,CAAC,KAAK,IAAL,GAAY,KAAK,IAAL,GAAY,GAAxB,GAA8B,EAA/B,IAAqC,IAA7C,CAAP;AACD;AAED;;;;;;;AAKO,EAAA,eAAe,CAAC,IAAD,EAAqB;;;AACzC,UAAM,QAAQ,GAAG,KAAK,OAAL,CAAa,IAAb,CAAjB,CADyC,CAGzC;AACA;;AACA,UAAM,SAAS,GAAG,KAAK,SAAL,CAAe,IAAf,CAAoB,mBAAtC;AACA,IAAA,SAAS,CAAC,QAAD,CAAT,GAAsB,CAAA,CAAA,EAAA,GAAC,SAAS,CAAC,QAAD,CAAV,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAxB,IAA6B,CAAnD;AAEA,WAAO,QAAP;AACD;;AAEM,EAAA,gBAAgB,CAAC,cAAD,EAA+B;AACpD,QAAI,YAAY,CAAC,KAAK,MAAN,CAAhB,EAA+B;AAC7B,YAAM,QAAQ,GAAG,+CAA8B,cAA9B,CAAjB;AACA,YAAM,OAAO,GAAG,sCAAwB,QAAxB,CAAhB;AACA,YAAM,cAAc,GAAG,KAAK,SAAL,CAAe,MAAf,CAAsB,OAAtB,CAAvB;;AAEA,UAAI,cAAc,IAAI,CAAC,cAAc,CAAC,MAAtC,EAA8C;AAC5C;AACA,cAAM,IAAI,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAb;AACA,cAAM,KAAK,GAAG,cAAc,CAAC,GAAf,CAAmB,OAAnB,CAAd;;AAEA,YAAI,8BAAkB,IAAlB,KAA2B,yBAAc,KAAd,CAA/B,EAAqD;AACnD,gBAAM,SAAS,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAlB;AACA,gBAAM,MAAM,GAAG,4BAAe,IAAf,EAAqB,OAArB,CAAf;AACA,gBAAM,KAAK,GAAG,gCAAmB,MAAnB,CAAd;;AACA,cAAI,KAAJ,EAAW;AACT,kBAAM,QAAQ,GAAG,yBAAQ;AAAC,cAAA,SAAS,EAAE,UAAZ;AAAwB,cAAA;AAAxB,aAAR,EAAwC;AAAC,cAAA,IAAI,EAAE;AAAP,aAAxC,CAAjB;AACA,mBAAO;AACL,cAAA,MAAM,EAAE,yBAAS,SAAT,EAAoB,cAApB,EAAoC,QAApC;AADH,aAAP;AAGD,WALD,MAKO;AACL,YAAA,GAAG,CAAC,IAAJ,CAAS,qBAAqB,OAAO,+BAArC;AACA,mBAAO,IAAP;AACD;AACF;AACF;AACF;;AAED,WAAO;AACL,MAAA,MAAM,EAAE,KAAK,aAAL,CAAmB,GAAnB,CAAuB,KAAK,OAAL,CAAa,cAAb,CAAvB;AADH,KAAP;AAGD;AAED;;;;;AAGO,EAAA,gBAAgB,CAAC,IAAD,EAAa;AAClC,UAAM,IAAI,GAAG,KAAK,SAAL,CAAe,IAAf,CAAoB,WAApB,CAAgC,IAAhC,CAAb;;AAEA,QAAI,CAAC,IAAL,EAAW;AACT;AACA;AACA,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,CAAC,SAAL,EAAP;AACD;;AAEM,EAAA,aAAa,CAAC,aAAD,EAAsB;AACxC,WAAO,KAAK,aAAL,CAAmB,GAAnB,CAAuB,aAAvB,CAAP;AACD;;AAEM,EAAA,YAAY,CAAC,OAAD,EAAkB,OAAlB,EAAiC;AAClD,SAAK,aAAL,CAAmB,MAAnB,CAA0B,OAA1B,EAAmC,OAAnC;AACD;;AAEM,EAAA,WAAW,CAAC,OAAD,EAAkB,OAAlB,EAAiC;AACjD,SAAK,YAAL,CAAkB,MAAlB,CAAyB,OAAzB,EAAkC,OAAlC;AACD;;AAEM,EAAA,gBAAgB,CAAC,OAAD,EAAkB,OAAlB,EAAiC;AACtD,SAAK,iBAAL,CAAuB,MAAvB,CAA8B,OAA9B,EAAuC,OAAvC;AACD;AAED;;;;;AAGO,EAAA,SAAS,CAAC,iBAAD,EAA2C,KAA3C,EAA0D;AACxE,QAAI,KAAJ,EAAW;AACT;AACA;AACA;AACA,aAAO,KAAK,OAAL,CAAa,iBAAb,CAAP;AACD,KANuE,CAQxE;AACA;;;AACA,SACE;AACC,4BAAU,iBAAV,KAAgC,6BAAe,iBAAf,CAAhC,IAAqE,KAAK,SAAL,CAAe,MAAf,CAAsB,iBAAtB,CAAtE,IACA;AACA,SAAK,YAAL,CAAkB,GAAlB,CAAsB,KAAK,OAAL,CAAa,iBAAb,CAAtB,CAJF,EAKE;AACA,aAAO,KAAK,YAAL,CAAkB,GAAlB,CAAsB,KAAK,OAAL,CAAa,iBAAb,CAAtB,CAAP;AACD;;AACD,WAAO,SAAP;AACD;AAED;;;;;AAGO,EAAA,cAAc,CAAC,KAAD,EAAgB;AACnC,QAAI,KAAJ,EAAW;AACT;AACA;AACA;AACA,aAAO,KAAK,OAAL,CAAa,YAAb,CAAP;AACD;;AAED,QACG,KAAK,SAAL,CAAe,UAAf,IAA6B,CAAC,KAAK,SAAL,CAAe,UAAf,CAA0B,MAAzD,IACA,KAAK,iBAAL,CAAuB,GAAvB,CAA2B,KAAK,OAAL,CAAa,YAAb,CAA3B,CAFF,EAGE;AACA,aAAO,KAAK,iBAAL,CAAuB,GAAvB,CAA2B,KAAK,OAAL,CAAa,YAAb,CAA3B,CAAP;AACD;;AACD,WAAO,SAAP;AACD;AAqBD;;;;;AAGO,EAAA,iBAAiB,CAAC,OAAD,EAAsB;AAC5C;AACA,QAAI,CAAC,KAAK,SAAL,CAAe,MAApB,EAA4B;AAC1B,YAAM,IAAI,KAAJ,CACJ,gIADI,CAAN;AAGD;;AAED,UAAM,mBAAmB,GAAG,KAAK,SAAL,CAAe,MAAf,CAAsB,OAAtB,CAA5B;;AACA,QAAI,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,MAAhD,EAAwD;AACtD,aAAO,mBAAP;AACD;;AACD,WAAO,KAAK,MAAL,GAAc,KAAK,MAAL,CAAY,iBAAZ,CAA8B,OAA9B,CAAd,GAAuD,SAA9D;AACD;AAED;;;;;AAGO,EAAA,qBAAqB,CAAC,YAAD,EAAuB,QAAvB,EAAuC;AACjE,QAAI,GAAG,GAAG,KAAK,SAAL,CAAe,SAAf,CAAyB,YAAzB,CAAV;;AACA,QAAI,CAAC,GAAD,IAAQ,KAAK,MAAjB,EAAyB;AACvB,MAAA,GAAG,GAAG,KAAK,MAAL,CAAY,qBAAZ,CAAkC,YAAlC,EAAgD,QAAhD,CAAN;AACD;;AACD,QAAI,CAAC,GAAL,EAAU;AACR,YAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,iBAAZ,CAA8B,QAA9B,CAAV,CAAN;AACD;;AACD,WAAO,GAAP;AACD;AAED;;;;;AAGO,EAAA,sBAAsB,GAAA;;;AAC3B,WACE,CAAA,CAAA,EAAA,GAAA,KAAK,SAAL,CAAe,IAAf,CAAoB,CAApB,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,IAAF,CAAO,CAAC,IAAI,CAAC,CAAC,kBAAF,EAAZ,CAArB,MAAuD,CAAA,EAAA,GACvD,KAAK,SAAL,CAAe,IAAf,CAAoB,CADmC,MAClC,IADkC,IAClC,EAAA,KAAA,KAAA,CADkC,GAClC,KAAA,CADkC,GAClC,EAAA,CAAE,IAAF,CAAO,CAAC,IAAI,CAAC,CAAC,kBAAF,EAAZ,CADrB,CADF;AAID;;AAhfwB;AAmf3B;;;;;AACM,MAAgB,cAAhB,SAAuC,KAAvC,CAA4C;AAGhD;AACO,EAAA,OAAO,CAAC,OAAD,EAA4B,GAAA,GAAsB,EAAlD,EAAoD;AAChE,UAAM,QAAQ,GAAG,KAAK,QAAL,CAAc,OAAd,CAAjB;;AAEA,QAAI,CAAC,QAAL,EAAe;AACb,aAAO,SAAP;AACD;;AAED,WAAO,yBAAQ,QAAR,EAAkB,GAAlB,CAAP;AACD;;AAIM,EAAA,cAAc,CAAO,CAAP,EAA2D,IAA3D,EAAkE;AACrF,WAAO,sBACL,KAAK,UAAL,EADK,EAEL,CAAC,GAAD,EAAS,EAAT,EAAyB,CAAzB,KAAuC;AACrC,YAAM,QAAQ,GAAG,6BAAY,EAAZ,CAAjB;;AACA,UAAI,QAAJ,EAAc;AACZ,eAAO,CAAC,CAAC,GAAD,EAAM,QAAN,EAAgB,CAAhB,CAAR;AACD;;AACD,aAAO,GAAP;AACD,KARI,EASL,IATK,CAAP;AAWD;;AAEM,EAAA,eAAe,CAAC,CAAD,EAAgD,CAAhD,EAAuD;AAC3E,2BACE,KAAK,UAAL,EADF,EAEE,CAAC,EAAD,EAAiB,CAAjB,KAA+B;AAC7B,YAAM,QAAQ,GAAG,6BAAY,EAAZ,CAAjB;;AACA,UAAI,QAAJ,EAAc;AACZ,QAAA,CAAC,CAAC,QAAD,EAAW,CAAX,CAAD;AACD;AACF,KAPH,EAQE,CARF;AAUD;;AAzC+C;;;;;;;;;;;;;AChpBlD;;AACA;;AAEA;;;AAGM,MAAO,oBAAP,SAAoC,sBAApC,CAAgD;AAKpD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAqE;;;AACnE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFmE,CAE5B;;AACvC,UAAM,WAAW,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,EAAlB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAC,SAAD,EAAY,SAAZ,CAAzC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,CAAA,CAAA,EAAA,GAAC,WAAW,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,OAAnB,EAA0B,CAAA,EAAA,GAAE,WAAW,CAAC,CAAD,CAAb,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,SAA9C,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,oBAAJ,CAAyB,IAAzB,EAA+B,qBAAU,KAAK,SAAf,CAA/B,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,OAAhB,EAAyB,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAAzB,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,oBAAoB,gBAAK,KAAK,SAAV,CAAoB,EAA/C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,EAAA,GAAqB,KAAK,SAAhC;AAAA,UAAM;AAAC,MAAA;AAAD,QAAQ,EAAd;AAAA,UAAmB,IAAI,GAAA,mBAAA,EAAA,EAAjB,CAAA,SAAA,CAAiB,CAAvB;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA;AACV,MAAA,IAAI,EAAE,KADI;AAEV,MAAA,KAAK,EAAE;AAFG,KAAA,EAGP,IAHO,CAAZ;AAKA,WAAO,MAAP;AACD;;AAhCmD;;;;;;;;;;;ACPtD;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEM,MAAO,iBAAP,SAAiC,sBAAjC,CAA6C;AAKjD,EAAA,WAAA,CAAY,MAAZ,EAAkD,MAAlD,EAAqF;AACnF,UAAM,MAAN;AADgD,SAAA,MAAA,GAAA,MAAA;AAEjD;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,iBAAJ,CAAsB,IAAtB,EAA0B,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,MAAX,CAA1B,CAAP;AACD;;AAMM,SAAO,IAAP,CAAY,MAAZ,EAAkC,KAAlC,EAAkD;AACvD,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,IAAT;AAAe,MAAA;AAAf,QAA0B,KAAhC;AAEA,UAAM,OAAO,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAhB;;AACA,QAAI,OAAO,KAAK,QAAhB,EAA0B;AACxB,aAAO,IAAP;AACD;;AAED,UAAM,MAAM,GAAG,KAAK,CAAC,cAAN,CAAqB,CAAC,UAAD,EAA0C,QAA1C,EAAoD,OAApD,KAA+D;AACjG,YAAM,cAAc,GAAG,6BAAe,OAAf,KAA2B,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAlD;;AACA,UAAI,cAAJ,EAAoB;AAClB,cAAM,SAAS,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAlB,CADkB,CAGlB;AACA;AACA;;AACA,YAAI,gCAAoB,SAApB,KAAkC,QAAQ,CAAC,SAAT,KAAuB,OAAzD,IAAoE,CAAC,sBAAW,IAAX,CAAzE,EAA2F;AACzF,UAAA,UAAU,CAAC,QAAQ,CAAC,KAAV,CAAV,GAA6B,QAA7B,CADyF,CAC3C;AAC/C;AACF;;AACD,aAAO,UAAP;AACD,KAbc,EAaZ,EAbY,CAAf;;AAeA,QAAI,CAAC,gBAAK,MAAL,EAAa,MAAlB,EAA0B;AACxB,aAAO,IAAP;AACD;;AAED,WAAO,IAAI,iBAAJ,CAAsB,MAAtB,EAA8B,MAA9B,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,gBAAK,KAAK,MAAV,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP,CADmB,CACO;AAC3B;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,iBAAiB,gBAAK,KAAK,MAAV,CAAiB,EAAzC;AACD;AAED;;;;;AAGO,EAAA,QAAQ,GAAA;AACb,UAAM,OAAO,GAAG,gBAAK,KAAK,MAAV,EAAkB,MAAlB,CAAyB,CAAC,WAAD,EAAc,KAAd,KAAuB;AAC9D,YAAM,QAAQ,GAAG,KAAK,MAAL,CAAY,KAAZ,CAAjB;AACA,YAAM,GAAG,GAAG,yBAAS,QAAT,EAAmB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAnB,CAAZ;;AAEA,UAAI,QAAQ,KAAK,IAAjB,EAAuB;AACrB,YAAI,QAAQ,CAAC,IAAT,KAAkB,UAAtB,EAAkC;AAChC,UAAA,WAAW,CAAC,IAAZ,CAAiB,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,KAAxE;AACD,SAFD,MAEO,IAAI,QAAQ,CAAC,IAAT,KAAkB,cAAtB,EAAsC;AAC3C,UAAA,WAAW,CAAC,IAAZ,CAAiB,WAAW,GAAG,GAA/B;AACA,UAAA,WAAW,CAAC,IAAZ,CAAiB,aAAa,GAAG,GAAjC;AACD,SAHM,MAGA,CACL;AACD;AACF;;AACD,aAAO,WAAP;AACD,KAfe,EAeb,EAfa,CAAhB;AAiBA,WAAO,OAAO,CAAC,MAAR,GAAiB,CAAjB,GACH;AACE,MAAA,IAAI,EAAE,QADR;AAEE,MAAA,IAAI,EAAE,OAAO,CAAC,IAAR,CAAa,MAAb;AAFR,KADG,GAKH,IALJ;AAMD;;AA9EgD;;;;;;;;;;;ACRnD;;AACA;;AAEA;;;AAGM,MAAO,oBAAP,SAAoC,sBAApC,CAAgD;AAKpD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAqE;AACnE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFmE,CAE5B;;AACvC,UAAM;AAAC,MAAA,OAAD;AAAU,MAAA,EAAE,GAAG;AAAf,QAAqB,KAAK,SAAhC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,OAAO,CAAC,GAAR,CAAY,CAAC,CAAD,EAAI,CAAJ,KAAS;AAAA,UAAA,EAAA;;AAAA,aAAA,CAAA,EAAA,GAAC,EAAE,CAAC,CAAD,CAAH,MAAM,IAAN,IAAM,EAAA,KAAA,KAAA,CAAN,GAAM,EAAN,GAAU,CAAV;AAAW,KAAhC,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,oBAAJ,CAAyB,KAAK,MAA9B,EAAsC,qBAAU,KAAK,SAAf,CAAtC,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,OAAvB,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,oBAAoB,gBAAK,KAAK,SAAV,CAAoB,EAA/C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM;AAAC,MAAA,OAAO,EAAE,MAAV;AAAkB,MAAA;AAAlB,QAAwB,KAAK,SAAnC;AAEA,UAAM,MAAM,GAAuB;AACjC,MAAA,IAAI,EAAE,SAD2B;AAEjC,MAAA,MAFiC;AAGjC,MAAA;AAHiC,KAAnC;AAKA,WAAO,MAAP;AACD;;AAjCmD;;;;;;;;;;;ACNtD;;AACA;;AAEA;;;AAGM,MAAO,iBAAP,SAAiC,sBAAjC,CAA6C;AAKjD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAkE;;;AAChE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFgE,CAEzB;;AACvC,UAAM,WAAW,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,EAAlB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAC,SAAD,EAAY,SAAZ,CAAzC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,CAAA,CAAA,EAAA,GAAC,WAAW,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,KAAnB,EAAwB,CAAA,EAAA,GAAE,WAAW,CAAC,CAAD,CAAb,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,OAA5C,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,iBAAJ,CAAsB,IAAtB,EAA4B,qBAAU,KAAK,SAAf,CAA5B,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,IAAvB,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,iBAAiB,gBAAK,KAAK,SAAV,CAAoB,EAA5C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA;AAAP,QAAa,KAAK,SAAxB;AACA,UAAM,MAAM,GAAoB;AAC9B,MAAA,IAAI,EAAE,MADwB;AAE9B,MAAA,MAAM,EAAE,IAFsB;AAG9B,MAAA;AAH8B,KAAhC;AAKA,WAAO,MAAP;AACD;;AAhCgD;;;;;;;;;;;ACPnD;;AACA;;AACA;;AACA;;AACA;;AAGA;;AAEM,MAAO,WAAP,SAA2B,sBAA3B,CAAuC;AA0C3C,EAAA,WAAA,CACE,MADF,EAEU,MAFV,EAGU,OAHV,EAIU,MAJV,EAIyB;AAEvB,UAAM,MAAN;AAJQ,SAAA,MAAA,GAAA,MAAA;AACA,SAAA,OAAA,GAAA,OAAA;AACA,SAAA,MAAA,GAAA,MAAA;AAGT;;AAhDM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,WAAJ,CAAgB,IAAhB,EAAsB,qBAAU,KAAK,MAAf,CAAtB,EAA8C,KAAK,OAAnD,EAA4D,KAAK,MAAjE,CAAP;AACD;;AAEM,SAAO,QAAP,CAAgB,MAAhB,EAAsC,KAAtC,EAAsD;AAC3D,QAAI,KAAK,CAAC,SAAN,CAAgB,UAAhB,IAA8B,CAAC,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,KAA9D,EAAqE;AACnE,aAAO,MAAP;AACD;;AAED,QAAI,cAAc,GAAG,CAArB;;AAEA,SAAK,MAAM,WAAX,IAA0B,CACxB,CAAC,kBAAD,EAAY,iBAAZ,CADwB,EAExB,CAAC,mBAAD,EAAa,kBAAb,CAFwB,CAA1B,EAGoC;AAClC,YAAM,IAAI,GAAG,WAAW,CAAC,GAAZ,CAAgB,OAAO,IAAG;AACrC,cAAM,GAAG,GAAG,oCAAmB,KAAK,CAAC,QAAN,CAAe,OAAf,CAAnB,CAAZ;AACA,eAAO,4BAAW,GAAX,IACH,GAAG,CAAC,KADD,GAEH,4BAAW,GAAX,IACA;AAAC,UAAA,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK;AAAnB,SADA,GAEA,4BAAW,GAAX,IACA;AAAC,UAAA,IAAI,EAAE,GAAG,GAAG,CAAC,OAAD,CAAS;AAAtB,SADA,GAEA,SANJ;AAOD,OATY,CAAb;;AAWA,UAAI,IAAI,CAAC,CAAD,CAAJ,IAAW,IAAI,CAAC,CAAD,CAAnB,EAAwB;AACtB,QAAA,MAAM,GAAG,IAAI,WAAJ,CAAgB,MAAhB,EAAwB,IAAxB,EAA8B,IAA9B,EAAoC,KAAK,CAAC,OAAN,CAAc,WAAW,cAAc,EAAE,EAAzC,CAApC,CAAT;AACD;AACF;;AAED,QAAI,KAAK,CAAC,eAAN,CAAsB,cAAtB,CAAJ,EAAkC;AAChC,YAAM,QAAQ,GAAG,KAAK,CAAC,aAAN,CAAoB,cAApB,CAAjB;;AACA,UAAI,QAAQ,CAAC,IAAT,KAAkB,aAAtB,EAA+B;AAC7B,QAAA,MAAM,GAAG,IAAI,WAAJ,CAAgB,MAAhB,EAAwB,IAAxB,EAA8B,QAAQ,CAAC,KAAvC,EAA8C,KAAK,CAAC,OAAN,CAAc,WAAW,cAAc,EAAE,EAAzC,CAA9C,CAAT;AACD;AACF;;AAED,WAAO,MAAP;AACD;;AAWM,EAAA,eAAe,GAAA;;;AACpB,UAAM,MAAM,GAAG,CAAA,CAAA,EAAA,GAAC,KAAK,MAAN,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAAhB,EAAoB,MAApB,CAA2B,kBAA3B,CAAf;AACA,WAAO,IAAI,GAAJ,CAAQ,CAAC,IAAI,KAAK,OAAL,GAAe,CAAC,KAAK,OAAN,CAAf,GAAgC,EAApC,CAAD,EAA0C,GAAG,MAA7C,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,WAAW,KAAK,OAAO,IAAI,KAAK,MAAM,IAAI,gBAAK,KAAK,MAAV,CAAiB,EAAlE;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE;AADR,KAAA,EAEM,KAAK,MAAL,GAAc;AAAC,MAAA,MAAM,EAAE,KAAK;AAAd,KAAd,GAAsC,EAF5C,CAAA,EAGM,KAAK,OAAL,GAAe;AAAC,MAAA,OAAO,EAAE,KAAK;AAAf,KAAf,GAAyC,EAH/C,CAAA,EAGkD;AAChD,MAAA,MAAM,EAAE,KAAK;AADmC,KAHlD,CAAA;AAMD;;AAvE0C;;;;;;;;;;;ACT7C;;AACA;;AACA;;AACA;;AAGA;;AAEM,MAAO,YAAP,SAA4B,sBAA5B,CAAwC;AAK5C,EAAA,WAAA,CACE,MADF,EAEU,UAFV,EAGU,MAHV,EAIU,EAJV,EAI8B;AAE5B,UAAM,MAAN;AAJQ,SAAA,UAAA,GAAA,UAAA;AACA,SAAA,MAAA,GAAA,MAAA;AACA,SAAA,EAAA,GAAA,EAAA;AAGT;;AAXM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,YAAJ,CAAiB,IAAjB,EAAuB,KAAK,UAA5B,EAAwC,qBAAU,KAAK,MAAf,CAAxC,EAAgE,qBAAU,KAAK,EAAf,CAAhE,CAAP;AACD;;AAWM,SAAO,QAAP,CAAgB,MAAhB,EAAsC,KAAtC,EAAsD;AAC3D,QAAI,CAAC,KAAK,CAAC,cAAN,EAAL,EAA6B;AAC3B,aAAO,MAAP;AACD;;AAED,SAAK,MAAM,WAAX,IAA0B,CACxB,CAAC,kBAAD,EAAY,iBAAZ,CADwB,EAExB,CAAC,mBAAD,EAAa,kBAAb,CAFwB,CAA1B,EAGoC;AAClC,YAAM,IAAI,GAAG,WAAW,CAAC,GAAZ,CAAgB,OAAO,IAAG;AACrC,cAAM,GAAG,GAAG,oCAAmB,KAAK,CAAC,QAAN,CAAe,OAAf,CAAnB,CAAZ;AACA,eAAO,4BAAW,GAAX,IACH,GAAG,CAAC,KADD,GAEH,4BAAW,GAAX,IACA;AAAC,UAAA,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK;AAAnB,SADA,GAEA,4BAAW,GAAX,IACA;AAAC,UAAA,IAAI,EAAE,GAAG,GAAG,CAAC,OAAD,CAAS;AAAtB,SADA,GAEA,SANJ;AAOD,OATY,CAAb;AAWA,YAAM,MAAM,GAAG,WAAW,CAAC,CAAD,CAAX,KAAmB,mBAAnB,GAAgC,GAAhC,GAAsC,EAArD;;AAEA,UAAI,IAAI,CAAC,CAAD,CAAJ,IAAW,IAAI,CAAC,CAAD,CAAnB,EAAwB;AACtB,QAAA,MAAM,GAAG,IAAI,YAAJ,CAAiB,MAAjB,EAAyB,KAAK,CAAC,cAAN,EAAzB,EAAiD,IAAjD,EAAuD,CAC9D,KAAK,CAAC,OAAN,CAAc,MAAM,MAApB,CAD8D,EAE9D,KAAK,CAAC,OAAN,CAAc,MAAM,MAApB,CAF8D,CAAvD,CAAT;AAID;AACF;;AAED,WAAO,MAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,KAAK,MAAL,CAAY,MAAZ,CAAmB,kBAAnB,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,EAAb,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,YAAY,KAAK,UAAU,IAAI,gBAAK,KAAK,MAAV,CAAiB,IAAI,gBAAK,KAAK,EAAV,CAAa,EAAxE;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO;AACL,MAAA,IAAI,EAAE,UADD;AAEL,MAAA,UAAU,EAAE,KAAK,UAFZ;AAGL,MAAA,MAAM,EAAE,KAAK,MAHR;AAIL,MAAA,EAAE,EAAE,KAAK;AAJJ,KAAP;AAMD;;AAlE2C;;;;;;;;;;;ACH9C;;AACA;;AACA;;AACA;;AAEA;;AAEM,MAAO,UAAP,SAA0B,sBAA1B,CAAsC;AAK1C,EAAA,WAAA,CAAY,MAAZ,EAAmD,SAAnD,EAA6E;AAC3E,UAAM,MAAN;AADiD,SAAA,SAAA,GAAA,SAAA;AAElD;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,UAAJ,CAAe,IAAf,EAAqB,qBAAU,KAAK,SAAf,CAArB,CAAP;AACD;;AAMM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,MAAhB,EAAwB,KAAK,SAAL,CAAe,GAAvC,EAA4C,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAA5C,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,MAAhB,CAAR,CAAP;AACD;;AAEO,EAAA,eAAe,CAAC,OAAD,EAAwB;AAC7C,UAAM;AAAC,MAAA,KAAK,GAAG,CAAT;AAAY,MAAA,IAAZ;AAAkB,MAAA;AAAlB,QAA0B,OAAhC;AACA,UAAM,MAAM,GAAG,CAAC,KAAD,EAAQ,IAAR,EAAc,IAAI,IAAI,GAAG,CAAC,IAAD,CAAH,GAAY,EAApB,CAAd,EAAuC,IAAvC,CAA4C,GAA5C,CAAf;AAEA,WAAO;AAAC,MAAA,MAAM,EAAE,YAAY,MAAM;AAA3B,KAAP;AACD;;AAEM,SAAO,iBAAP,CAAyB,MAAzB,EAA+C,eAA/C,EAA+E;AACpF,WAAO,IAAI,UAAJ,CAAe,MAAf,EAAuB,eAAvB,CAAP;AACD;;AAEM,SAAO,gBAAP,CAAwB,MAAxB,EAA8C,KAA9C,EAA8D;AACnE,UAAM,QAAQ,GAAG,KAAK,CAAC,QAAvB;AACA,UAAM,IAAI,GAAG,QAAQ,CAAC,CAAtB;AACA,UAAM,IAAI,GAAG,QAAQ,CAAC,CAAtB;;AAEA,QAAI,4BAAW,IAAX,KAAoB,4BAAW,IAAX,CAAxB,EAA0C;AACxC,YAAM,cAAc,GAAG,IAAI,CAAC,MAAL,GAAc,IAAd,GAAqB,IAAI,CAAC,MAAL,GAAc,IAAd,GAAqB,SAAjE;;AACA,UAAI,cAAc,KAAK,SAAvB,EAAkC;AAChC,eAAO,SAAP;AACD;;AACD,YAAM,UAAU,GAAG,IAAI,CAAC,MAAL,GAAc,IAAd,GAAqB,IAAI,CAAC,MAAL,GAAc,IAAd,GAAqB,SAA7D;AACA,YAAM;AAAC,QAAA,MAAD;AAAS,QAAA,KAAT;AAAgB,QAAA,KAAhB;AAAuB,QAAA;AAAvB,UAAkC,cAAc,CAAC,MAAvD;AACA,YAAM,aAAa,GAAG,kCAAmB,KAAK,CAAC,IAAzB,EAA+B,QAA/B,CAAtB;AAEA,aAAO,IAAI,UAAJ,CAAe,MAAf,EAAqB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AAC1B,QAAA,MAAM,EAAE,cAAc,CAAC,KADG;AAE1B,QAAA,GAAG,EAAE,UAAU,CAAC;AAFU,OAAA,EAGtB,MAAM,GAAG;AAAC,QAAA;AAAD,OAAH,GAAc,EAHE,CAAA,EAItB,KAAK,KAAK,SAAV,GAAsB;AAAC,QAAA;AAAD,OAAtB,GAAgC,EAJV,CAAA,EAKtB,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EALI,CAAA,EAMtB,OAAO,KAAK,SAAZ,GAAwB;AAAC,QAAA;AAAD,OAAxB,GAAoC,EANd,CAAA,EAOtB,aAAa,CAAC,MAAd,GAAuB;AAAC,QAAA,OAAO,EAAE;AAAV,OAAvB,GAAkD,EAP5B,CAArB,CAAP;AASD;;AACD,WAAO,IAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,UAAU,gBAAK,KAAK,SAAV,CAAoB,EAArC;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,GAAT;AAAc,MAAA,OAAd;AAAuB,MAAA,MAAvB;AAA+B,MAAA,OAA/B;AAAwC,MAAA,KAAxC;AAA+C,MAAA,KAAK,GAAG,CAAC,IAAD,EAAO,IAAP;AAAvD,QAAuF,KAAK,SAAlG;AAEA,UAAM,eAAe,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACnB,MAAA,IAAI,EAAE,QADa;AAEnB,MAAA,KAAK,EAAE,MAFY;AAGnB,MAAA;AAHmB,KAAA,EAIf,OAAO,GAAG;AAAC,MAAA,OAAO,EAAE,iCAAiB,OAAjB,IAA4B,KAAK,eAAL,CAAqB,OAArB,CAA5B,GAA4D;AAAtE,KAAH,GAAoF,EAJ5E,CAAA,EAI+E;AAClG,MAAA,MAAM,EAAE;AAD0F,KAJ/E,CAAA,EAMf,OAAO,GAAG;AAAC,MAAA;AAAD,KAAH,GAAe,EANP,CAAA,EAMU;AAC7B,MAAA,KAAK,EAAE,CAAC,MAAD,IAAW,MAAM,KAAK,OAAtB,GAAgC,KAAhC,GAAwC;AADlB,KANV,CAArB;;AAUA,QAAI,MAAM,IAAI,MAAM,KAAK,OAAzB,EAAkC;AAChC,YAAM,cAAc,GAAA,MAAA,CAAA,MAAA,CAAA;AAClB,QAAA,IAAI,EAAE,QADY;AAElB,QAAA,EAAE,EAAE,CAAC,WAAW,MAAM,QAAlB,CAFc;AAGlB,QAAA,GAAG,EAAE,CAAC,MAAD,CAHa;AAIlB,QAAA,MAAM,EAAE,CAAC,MAAD,CAJU;AAKlB,QAAA,KALkB;AAMlB,QAAA,WAAW,EAAE;AANK,OAAA,EAOd,OAAO,GAAG;AAAC,QAAA;AAAD,OAAH,GAAe,EAPR,CAApB;AASA,YAAM,eAAe,GAAuB;AAC1C,QAAA,IAAI,EAAE,SADoC;AAE1C,QAAA,IAAI,EAAE,SAAS,MAAM,6BAA6B,MAAM,kBAAkB,MAAM,EAFtC;AAG1C,QAAA,EAAE,EAAE;AAHsC,OAA5C;AAKA,aAAO,CAAC,eAAD,EAAkB,cAAlB,EAAkC,eAAlC,CAAP;AACD,KAhBD,MAgBO;AACL,aAAO,CAAC,eAAD,CAAP;AACD;AACF;;AA3FyC;;;;;;;;;;;;;ACX5C;;AACA;;AAEA;;;AAGM,MAAO,kBAAP,SAAkC,sBAAlC,CAA8C;AAKlD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAmE;;;AACjE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFiE,CAE1B;;AACvC,UAAM,WAAW,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,EAAlB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAC,SAAD,EAAY,SAAZ,CAAzC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,CAAA,CAAA,EAAA,GAAC,WAAW,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,SAAS,CAAC,EAA7B,EAA+B,CAAA,EAAA,GAAE,WAAW,CAAC,CAAD,CAAb,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,SAAS,CAAC,KAA7D,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,kBAAJ,CAAuB,IAAvB,EAA6B,qBAAU,KAAK,SAAf,CAA7B,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,KAAhB,EAAuB,KAAK,SAAL,CAAe,EAAtC,EAA0C,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAA1C,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,kBAAkB,gBAAK,KAAK,SAAV,CAAoB,EAA7C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,EAAA,GAAuB,KAAK,SAAlC;AAAA,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA;AAAR,QAAU,EAAhB;AAAA,UAAqB,IAAI,GAAA,mBAAA,EAAA,EAAnB,CAAA,OAAA,EAAA,IAAA,CAAmB,CAAzB;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA;AACV,MAAA,IAAI,EAAE,OADI;AAEV,MAAA,CAAC,EAAE,EAFO;AAGV,MAAA,CAAC,EAAE;AAHO,KAAA,EAIP,IAJO,CAAZ;AAMA,WAAO,MAAP;AACD;;AAjCiD;;;;;;;;;;;ACPpD;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;AAEM,MAAO,UAAP,SAA0B,sBAA1B,CAAsC;AAK1C,EAAA,WAAA,CAAY,MAAZ,EAAkD,SAAlD,EAA8F,SAA9F,EAA+G;AAC7G,UAAM,MAAN;AADgD,SAAA,SAAA,GAAA,SAAA;AAA4C,SAAA,SAAA,GAAA,SAAA;AAE7F;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,UAAJ,CAAe,IAAf,EAAqB,qBAAU,KAAK,SAAf,CAArB,EAAgD,KAAK,SAArD,CAAP;AACD;;AAMM,SAAO,IAAP,CAAY,MAAZ,EAAkC,KAAlC,EAAgD,SAAhD,EAA4E,OAA5E,EAA2F;AAChG,UAAM,OAAO,GAAG,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArC;AACA,UAAM;AAAC,MAAA;AAAD,QAAS,SAAf;AACA,QAAI,cAAc,GAAG,IAArB;;AAEA,QAAI,6BAAa,IAAb,CAAJ,EAAwB;AACtB,UAAI,UAAU,GAAG,uBAAW,IAAI,CAAC,IAAhB,EAAsB,OAAtB,CAAjB;;AAEA,UAAI,CAAC,UAAL,EAAiB;AACf,QAAA,UAAU,GAAG,IAAI,kBAAJ,CAAe,IAAI,CAAC,IAApB,CAAb;AACA,QAAA,OAAO,CAAC,IAAR,CAAa,UAAb;AACD;;AAED,YAAM,cAAc,GAAG,KAAK,CAAC,OAAN,CAAc,UAAU,OAAO,EAA/B,CAAvB;AACA,MAAA,cAAc,GAAG,IAAI,oBAAJ,CAAe,UAAf,EAA2B,cAA3B,EAA2C,QAA3C,EAAqD,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,mBAA1E,CAAjB;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,WAArB,CAAiC,cAAjC,IAAmD,cAAnD;AACD,KAXD,MAWO,IAAI,kCAAkB,IAAlB,CAAJ,EAA6B;AAClC,YAAM,OAAO,GAAG,IAAI,CAAC,SAArB;AACA,MAAA,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA;AAAI,QAAA,EAAE,EAAE;AAAR,OAAA,EAAoB,SAApB,CAAT;AACA,MAAA,cAAc,GAAG,KAAK,CAAC,qBAAN,CAA4B,mBAAQ,OAAR,CAA5B,EAA8C,OAA9C,EAAuD,YAAxE;;AACA,UAAI,CAAC,cAAL,EAAqB;AACnB,cAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,OAA7B,CAAV,CAAN;AACD;AACF;;AAED,WAAO,IAAI,UAAJ,CAAe,MAAf,EAAuB,SAAvB,EAAkC,cAAc,CAAC,SAAf,EAAlC,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,MAAhB,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAf,GAAoB,qBAAM,KAAK,SAAL,CAAe,EAArB,CAApB,GAA+C,KAAK,SAAL,CAAe,IAAf,CAAoB,MAA3E,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,UAAU,gBAAK;AAAC,MAAA,SAAS,EAAE,KAAK,SAAjB;AAA4B,MAAA,SAAS,EAAE,KAAK;AAA5C,KAAL,CAA4D,EAA7E;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,QAAI,OAAJ;;AAEA,QAAI,KAAK,SAAL,CAAe,IAAf,CAAoB,MAAxB,EAAgC;AAC9B;AACA,MAAA,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA;AACL,QAAA,MAAM,EAAE,KAAK,SAAL,CAAe,IAAf,CAAoB;AADvB,OAAA,EAED,KAAK,SAAL,CAAe,EAAf,GAAoB;AAAC,QAAA,EAAE,EAAE,qBAAM,KAAK,SAAL,CAAe,EAArB;AAAL,OAApB,GAAqD,EAFpD,CAAP;AAID,KAND,MAMO;AACL;AACA,UAAI,MAAM,GAAG,KAAK,SAAL,CAAe,EAA5B;;AACA,UAAI,CAAC,wBAAS,MAAT,CAAL,EAAuB;AACrB,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,kBAArB;AACA,QAAA,MAAM,GAAG,SAAT;AACD;;AAED,MAAA,OAAO,GAAG;AACR,QAAA,EAAE,EAAE,CAAC,MAAD;AADI,OAAV;AAGD;;AAED,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE,QADR;AAEE,MAAA,IAAI,EAAE,KAAK,SAFb;AAGE,MAAA,GAAG,EAAE,KAAK,SAAL,CAAe,IAAf,CAAoB,GAH3B;AAIE,MAAA,MAAM,EAAE,CAAC,KAAK,SAAL,CAAe,MAAhB;AAJV,KAAA,EAKK,OALL,CAAA,EAMM,KAAK,SAAL,CAAe,OAAf,GAAyB;AAAC,MAAA,OAAO,EAAE,KAAK,SAAL,CAAe;AAAzB,KAAzB,GAA6D,EANnE,CAAA;AAQD;;AA/EyC;;;;;;;;;;;;;ACR5C;;AACA;;AAEA;;;AAGM,MAAO,qBAAP,SAAqC,sBAArC,CAAiD;AAKrD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAsE;;;AACpE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFoE,CAE7B;;AACvC,UAAM,WAAW,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,EAAlB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAC,SAAD,EAAY,SAAZ,CAAzC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,CAAA,CAAA,EAAA,GAAC,WAAW,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,MAAnB,EAAyB,CAAA,EAAA,GAAE,WAAW,CAAC,CAAD,CAAb,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,OAA7C,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,qBAAJ,CAA0B,IAA1B,EAAgC,qBAAU,KAAK,SAAf,CAAhC,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,QAAhB,EAA0B,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAA1B,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,qBAAqB,gBAAK,KAAK,SAAV,CAAoB,EAAhD;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,EAAA,GAAsB,KAAK,SAAjC;AAAA,UAAM;AAAC,MAAA;AAAD,QAAS,EAAf;AAAA,UAAoB,IAAI,GAAA,mBAAA,EAAA,EAAlB,CAAA,UAAA,CAAkB,CAAxB;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA;AACV,MAAA,IAAI,EAAE,UADI;AAEV,MAAA,KAAK,EAAE;AAFG,KAAA,EAGP,IAHO,CAAZ;AAKA,WAAO,MAAP;AACD;;AAhCoD;;;;;;;;;;;;;ACNvD;;AACA;;AAEA;;;AAGM,MAAO,uBAAP,SAAuC,sBAAvC,CAAmD;AAKvD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAwE;;;AACtE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAExC,SAAK,SAAL,GAAiB,qBAAU,SAAV,CAAjB,CAFsE,CAE/B;;AACvC,UAAM,WAAW,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,EAAlB,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,EAApB,GAAwB,CAAC,SAAD,EAAY,SAAZ,CAAzC;AACA,SAAK,SAAL,CAAe,EAAf,GAAoB,CAAA,CAAA,EAAA,GAAC,WAAW,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,SAAS,CAAC,EAA7B,EAA+B,CAAA,EAAA,GAAE,WAAW,CAAC,CAAD,CAAb,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,SAAS,CAAC,UAA7D,CAApB;AACD;;AATM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,uBAAJ,CAA4B,IAA5B,EAAkC,qBAAU,KAAK,SAAf,CAAlC,CAAP;AACD;;AASM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,UAAhB,EAA4B,KAAK,SAAL,CAAe,EAA3C,EAA+C,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAA/C,CAAR,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,CAAQ,KAAK,SAAL,CAAe,EAAvB,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,uBAAuB,gBAAK,KAAK,SAAV,CAAoB,EAAlD;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM,EAAA,GAA4B,KAAK,SAAvC;AAAA,UAAM;AAAC,MAAA,UAAD;AAAa,MAAA;AAAb,QAAe,EAArB;AAAA,UAA0B,IAAI,GAAA,mBAAA,EAAA,EAAxB,CAAA,YAAA,EAAA,IAAA,CAAwB,CAA9B;AACA,UAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA;AACV,MAAA,IAAI,EAAE,YADI;AAEV,MAAA,CAAC,EAAE,EAFO;AAGV,MAAA,CAAC,EAAE;AAHO,KAAA,EAIP,IAJO,CAAZ;AAMA,WAAO,MAAP;AACD;;AAjCsD;;;;;;;;;;;ACPzD;;AAEA;;AAEA;;;AAGM,MAAO,kBAAP,SAAkC,sBAAlC,CAA8C;AAKlD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAmE;AACjE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,kBAAJ,CAAuB,IAAvB,EAA6B,qBAAU,KAAK,SAAf,CAA7B,CAAP;AACD;;AAMM,EAAA,aAAa,CAAC,MAAD,EAA0B;;;AAC5C,SAAK,SAAL,CAAe,OAAf,GAAyB,kBAAO,CAAA,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA3B,EAA+B,MAA/B,CAAsC,MAAtC,CAAP,EAAsD,CAAC,IAAI,CAA3D,CAAzB;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,SAAP,CADmB,CACD;AACnB;;AAEM,EAAA,eAAe,GAAA;;;AACpB,WAAO,IAAI,GAAJ,CAAQ,CAAC,KAAK,SAAL,CAAe,KAAhB,EAAuB,KAAK,SAAL,CAAe,KAAtC,EAA6C,IAAG,CAAA,EAAA,GAAC,KAAK,SAAL,CAAe,OAAhB,MAAuB,IAAvB,IAAuB,EAAA,KAAA,KAAA,CAAvB,GAAuB,EAAvB,GAA2B,EAA9B,CAA7C,CAAR,CAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,kBAAkB,gBAAK,KAAK,SAAV,CAAoB,EAA7C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA,KAAR;AAAe,MAAA,OAAf;AAAwB,MAAA,KAAxB;AAA+B,MAAA;AAA/B,QAAqC,KAAK,SAAhD;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE,OADR;AAEE,MAAA,KAAK,EAAE,KAFT;AAGE,MAAA;AAHF,KAAA,EAIM,KAAK,KAAK,SAAV,GAAsB;AAAC,MAAA;AAAD,KAAtB,GAAgC,EAJtC,CAAA,EAKM,EAAE,KAAK,SAAP,GAAmB;AAAC,MAAA;AAAD,KAAnB,GAA0B,EALhC,CAAA,EAMM,OAAO,KAAK,SAAZ,GAAwB;AAAC,MAAA;AAAD,KAAxB,GAAoC,EAN1C,CAAA;AAQD;;AAnCiD;;;;;;;;;;;ACNpD;;AACA;;AAEA;;;AAGM,MAAO,mBAAP,SAAmC,sBAAnC,CAA+C;AAKnD,EAAA,WAAA,CAAY,MAAZ,EAA0C,SAA1C,EAAoE;AAClE,UAAM,MAAN;AADwC,SAAA,SAAA,GAAA,SAAA;AAEzC;;AANM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,mBAAJ,CAAwB,IAAxB,EAA8B,qBAAU,KAAK,SAAf,CAA9B,CAAP;AACD;;AAMM,EAAA,eAAe,GAAA;AACpB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAI,GAAJ,EAAP;AACD;;AAEM,EAAA,IAAI,GAAA;AACT,WAAO,mBAAmB,gBAAK,KAAK,SAAV,CAAoB,EAA9C;AACD;;AAEM,EAAA,QAAQ,GAAA;AACb,WAAO;AACL,MAAA,IAAI,EAAE,QADD;AAEL,MAAA,IAAI,EAAE,KAAK,SAAL,CAAe;AAFhB,KAAP;AAID;;AA1BkD;;;;;;;;;;;;ACRrD;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAAS,YAAT,CAAsB,IAAtB,EAAoC;AAClC;AACA,MAAI,YAAY,GAAG,CAAnB;AAEA;;;;AAGA,WAAS,QAAT,CAAkB,IAAlB,EAAsC,UAAtC,EAAwD;;;AACtD,QAAI,IAAI,YAAY,kBAApB,EAAgC;AAC9B;AACA;AACA,UAAI,CAAC,IAAI,CAAC,WAAN,IAAqB,CAAC,qBAAU,IAAI,CAAC,IAAf,CAA1B,EAAgD;AAC9C,QAAA,IAAI,CAAC,IAAL,CAAU,UAAV;AACA,cAAM,OAAO,GAAW;AACtB,UAAA,IAAI,EAAE,IADgB;AAEtB,UAAA,MAAM,EAAE,UAAU,CAAC,IAFG;AAGtB,UAAA,SAAS,EAAE;AAHW,SAAxB;AAKA,QAAA,UAAU,GAAG,OAAb;AACD;AACF;;AAED,QAAI,IAAI,YAAY,sBAApB,EAA+B;AAC7B,UAAI,IAAI,CAAC,MAAL,YAAuB,kBAAvB,IAAqC,CAAC,UAAU,CAAC,MAArD,EAA6D;AAC3D;AACA,QAAA,UAAU,CAAC,MAAX,GAAiB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,CAAA,EAAA,GAAC,UAAU,CAAC,MAAZ,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAsB,EADV,CAAA,EACa;AAC5B,UAAA,KAAK,EAAE,IAAI,CAAC,mBAAL;AADqB,SADb,CAAjB,CAF2D,CAO3D;;AACA,QAAA,UAAU,CAAC,SAAX,CAAqB,IAArB,CAA0B,GAAG,IAAI,CAAC,kBAAL,CAAwB,IAAxB,CAA7B;AACD,OATD,MASO;AACL;AACA,QAAA,UAAU,CAAC,SAAX,CAAqB,IAArB,CAA0B,GAAG,IAAI,CAAC,kBAAL,EAA7B;AACD;AACF;;AAED,QAAI,IAAI,YAAY,gBAApB,EAA+B;AAC7B,UAAI,CAAC,UAAU,CAAC,IAAhB,EAAsB;AACpB,QAAA,UAAU,CAAC,IAAX,GAAkB,QAAQ,YAAY,EAAE,EAAxC;AACD;;AAED,UAAI,CAAC,UAAU,CAAC,MAAZ,IAAsB,UAAU,CAAC,SAAX,CAAqB,MAArB,GAA8B,CAAxD,EAA2D;AACzD,QAAA,IAAI,CAAC,IAAL,CAAU,UAAV;AACA,QAAA,IAAI,CAAC,IAAL,GAAY,UAAU,CAAC,IAAvB;AACD,OAHD,MAGO;AACL,QAAA,IAAI,CAAC,IAAL,GAAY,UAAU,CAAC,MAAvB;AACD;;AAED,WAAK,MAAM,CAAX,IAAgB,IAAI,CAAC,QAAL,EAAhB,EAAiC;AAC/B,QAAA,IAAI,CAAC,IAAL,CAAU,CAAV;AACD,OAd4B,CAgB7B;;;AACA;AACD;;AAED,QACE,IAAI,YAAY,wBAAhB,IACA,IAAI,YAAY,sBADhB,IAEA,IAAI,YAAY,gCAFhB,IAGA,IAAI,YAAY,kBAHhB,IAIA,IAAI,YAAY,wBAJhB,IAKA,IAAI,YAAY,sBALhB,IAMA,IAAI,YAAY,oBANhB,IAOA,IAAI,YAAY,wBAPhB,IAQA,IAAI,YAAY,kBARhB,IASA,IAAI,YAAY,2BAThB,IAUA,IAAI,YAAY,yCAVhB,IAWA,IAAI,YAAY,uBAXhB,IAYA,IAAI,YAAY,6BAZhB,IAaA,IAAI,YAAY,6BAbhB,IAcA,IAAI,YAAY,yBAdhB,IAeA,IAAI,YAAY,+BAfhB,IAgBA,IAAI,YAAY,mCAhBhB,IAiBA,IAAI,YAAY,0BAjBhB,IAkBA,IAAI,YAAY,2BAlBhB,IAmBA,IAAI,YAAY,yBApBlB,EAqBE;AACA,MAAA,UAAU,CAAC,SAAX,CAAqB,IAArB,CAA0B,IAAI,CAAC,QAAL,EAA1B;AACD;;AAED,QACE,IAAI,YAAY,YAAhB,IACA,IAAI,YAAY,sBADhB,IAEA,IAAI,YAAY,kBAFhB,IAGA,IAAI,YAAY,gBAJlB,EAKE;AACA,MAAA,UAAU,CAAC,SAAX,CAAqB,IAArB,CAA0B,GAAG,IAAI,CAAC,QAAL,EAA7B;AACD;;AAED,QAAI,IAAI,YAAY,oBAApB,EAAgC;AAC9B,UAAI,UAAU,CAAC,MAAX,IAAqB,UAAU,CAAC,SAAX,CAAqB,MAArB,KAAgC,CAAzD,EAA4D;AAC1D,QAAA,IAAI,CAAC,SAAL,CAAe,UAAU,CAAC,MAA1B;AACD,OAFD,MAEO,IAAI,IAAI,CAAC,MAAL,YAAuB,oBAA3B,EAAuC;AAC5C;AACA;AACA,QAAA,IAAI,CAAC,SAAL,CAAe,UAAU,CAAC,IAA1B;AACD,OAJM,MAIA;AACL,YAAI,CAAC,UAAU,CAAC,IAAhB,EAAsB;AACpB,UAAA,UAAU,CAAC,IAAX,GAAkB,QAAQ,YAAY,EAAE,EAAxC;AACD,SAHI,CAKL;AACA;;;AACA,QAAA,IAAI,CAAC,SAAL,CAAe,UAAU,CAAC,IAA1B,EAPK,CASL;;AACA,YAAI,IAAI,CAAC,WAAL,OAAuB,CAA3B,EAA8B;AAC5B,UAAA,IAAI,CAAC,IAAL,CAAU,UAAV;AACA,gBAAM,OAAO,GAAW;AACtB,YAAA,IAAI,EAAE,IADgB;AAEtB,YAAA,MAAM,EAAE,UAAU,CAAC,IAFG;AAGtB,YAAA,SAAS,EAAE;AAHW,WAAxB;AAKA,UAAA,UAAU,GAAG,OAAb;AACD;AACF;AACF;;AAED,YAAQ,IAAI,CAAC,WAAL,EAAR;AACE,WAAK,CAAL;AACE;AACA,YAAI,IAAI,YAAY,oBAAhB,KAA+B,CAAC,UAAU,CAAC,MAAZ,IAAsB,UAAU,CAAC,SAAX,CAAqB,MAArB,GAA8B,CAAnF,CAAJ,EAA2F;AACzF;AACA,UAAA,IAAI,CAAC,IAAL,CAAU,UAAV;AACD;;AACD;;AACF,WAAK,CAAL;AACE,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAL,CAAc,CAAd,CAAD,EAAmB,UAAnB,CAAR;AACA;;AACF;AAAS;AACP,cAAI,CAAC,UAAU,CAAC,IAAhB,EAAsB;AACpB,YAAA,UAAU,CAAC,IAAX,GAAkB,QAAQ,YAAY,EAAE,EAAxC;AACD;;AAED,cAAI,MAAM,GAAG,UAAU,CAAC,IAAxB;;AACA,cAAI,CAAC,UAAU,CAAC,MAAZ,IAAsB,UAAU,CAAC,SAAX,CAAqB,MAArB,GAA8B,CAAxD,EAA2D;AACzD,YAAA,IAAI,CAAC,IAAL,CAAU,UAAV;AACD,WAFD,MAEO;AACL,YAAA,MAAM,GAAG,UAAU,CAAC,MAApB;AACD;;AAED,eAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,kBAAM,OAAO,GAAW;AACtB,cAAA,IAAI,EAAE,IADgB;AAEtB,cAAA,MAAM,EAAE,MAFc;AAGtB,cAAA,SAAS,EAAE;AAHW,aAAxB;AAKA,YAAA,QAAQ,CAAC,KAAD,EAAQ,OAAR,CAAR;AACD;;AACD;AACD;AAhCH;AAkCD;;AAED,SAAO,QAAP;AACD;AAED;;;;;AAGM,SAAU,iBAAV,CAA4B,IAA5B,EAA2C;AAC/C,QAAM,IAAI,GAAa,EAAvB;AACA,QAAM,QAAQ,GAAG,YAAY,CAAC,IAAD,CAA7B;;AAEA,OAAK,MAAM,KAAX,IAAoB,IAAI,CAAC,QAAzB,EAAmC;AACjC,IAAA,QAAQ,CAAC,KAAD,EAAQ;AACd,MAAA,MAAM,EAAE,IAAI,CAAC,IADC;AAEd,MAAA,IAAI,EAAE,IAFQ;AAGd,MAAA,SAAS,EAAE;AAHG,KAAR,CAAR;AAKD;;AAED,SAAO,IAAP;AACD;AAED;;;;;;;;;AAOM,SAAU,gBAAV,CAA2B,aAA3B,EAAyD,QAAzD,EAAsF;;;AAC1F,QAAM,IAAI,GAAa,EAAvB,CAD0F,CAG1F;AACA;;AAEA,QAAM,QAAQ,GAAG,YAAY,CAAC,IAAD,CAA7B;AAEA,MAAI,WAAW,GAAG,CAAlB;;AAEA,OAAK,MAAM,IAAX,IAAmB,aAAa,CAAC,OAAjC,EAA0C;AACxC;AACA,QAAI,CAAC,IAAI,CAAC,OAAL,EAAL,EAAqB;AACnB,MAAA,IAAI,CAAC,QAAL,GAAgB,UAAU,WAAW,EAAE,EAAvC;AACD;;AAED,UAAM,OAAO,GAAW,IAAI,CAAC,QAAL,EAAxB;AAEA,IAAA,QAAQ,CAAC,IAAD,EAAO,OAAP,CAAR;AACD,GAnByF,CAqB1F;;;AACA,OAAK,MAAM,CAAX,IAAgB,IAAhB,EAAsB;AACpB,QAAI,CAAC,CAAC,SAAF,CAAY,MAAZ,KAAuB,CAA3B,EAA8B;AAC5B,aAAO,CAAC,CAAC,SAAT;AACD;AACF,GA1ByF,CA4B1F;;;AACA,MAAI,OAAO,GAAG,CAAd;;AACA,OAAK,MAAM,CAAC,CAAD,EAAI,CAAJ,CAAX,IAAqB,IAAI,CAAC,OAAL,EAArB,EAAqC;AACnC,QAAI,CAAA,CAAA,EAAA,GAAC,CAAC,CAAC,SAAH,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,EAAZ,GAAgB,EAAhB,EAAoB,MAApB,KAA+B,CAA/B,IAAoC,CAAC,CAAC,CAAC,MAA3C,EAAmD;AACjD,MAAA,IAAI,CAAC,MAAL,CAAY,OAAO,EAAnB,EAAuB,CAAvB,EAA0B,IAAI,CAAC,MAAL,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,CAA1B;AACD;AACF,GAlCyF,CAoC1F;;;AACA,OAAK,MAAM,CAAX,IAAgB,IAAhB,EAAsB;AACpB,SAAK,MAAM,CAAX,IAAY,CAAA,EAAA,GAAI,CAAC,CAAC,SAAN,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,EAA/B,EAAmC;AACjC,UAAI,CAAC,CAAC,IAAF,KAAW,QAAf,EAAyB;AACvB,QAAA,CAAC,CAAC,IAAF,GAAS,aAAa,CAAC,WAAd,CAA0B,CAAC,CAAC,IAA5B,EAAkC,SAAlC,EAAT;AACD;AACF;AACF,GA3CyF,CA6C1F;;;AACA,OAAK,MAAM,CAAX,IAAgB,IAAhB,EAAsB;AACpB,QAAI,CAAC,CAAC,IAAF,IAAU,QAAd,EAAwB;AACtB,MAAA,CAAC,CAAC,MAAF,GAAW,QAAQ,CAAC,CAAC,CAAC,IAAH,CAAnB;AACD;AACF;;AAED,SAAO,IAAP;AACD;;;;;;;;;;AC9QD;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAGM,SAAU,aAAV,CAAwB,MAAxB,EAAsD;AAC1D,MAAI,MAAM,KAAK,KAAX,IAAoB,MAAM,KAAK,MAA/B,IAAyC,uBAAY,MAAZ,CAA7C,EAAkE;AAChE;AACA,WAAO,QAAP;AACD;;AACD,SAAO,QAAP;AACD;;AAEK,SAAU,iBAAV,CAA4B,KAA5B,EAA6C;AACjD,OAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,IAAA,gBAAgB,CAAC,KAAD,EAAQ,OAAR,CAAhB;AACD;;AAED,EAAA,cAAc,CAAC,KAAD,EAAQ,GAAR,CAAd;AACA,EAAA,cAAc,CAAC,KAAD,EAAQ,GAAR,CAAd;AACD;;AAED,SAAS,gBAAT,CAA0B,KAA1B,EAA6C,OAA7C,EAAkE;;;AAChE,QAAM;AAAC,IAAA,KAAD;AAAQ,IAAA,MAAR;AAAgB,IAAA,KAAhB;AAAuB,IAAA;AAAvB,MAAoC,KAA1C;;AACA,MAAI,KAAK,CAAC,eAAN,CAAsB,OAAtB,CAAJ,EAAoC;AAClC,UAAM,QAAQ,GAAG,KAAK,CAAC,OAAD,CAAtB;AACA,UAAM,WAAW,GAAG,+BAAkB,OAAlB,EAA2B,IAA3B,EAAiC,MAAjC,EAAyC,OAAzC,CAApB;AACA,QAAI,KAAK,GAAG,uBAAc,QAAd,EAAwB,MAAxB,EAAgC;AAC1C,MAAA,cAAc,EAAE,IAD0B;AAE1C,MAAA,cAAc,EAAE,WAAW,KAAK,SAAhB,IAA6B,CAAC,CAAC;AAFL,KAAhC,CAAZ;;AAKA,QAAI,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,KAA3C,EAAkD;AAChD;AACA,MAAA,KAAK,GAAG,uBAAQ,KAAR,IAAiB,KAAK,CAAC,IAAN,CAAW,IAAX,CAAjB,GAAoC,KAA5C,CAFgD,CAIhD;;AACA,MAAA,KAAK,IAAI,QAAQ,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,KAAxD;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,aAAhB,CAA8B,OAA9B,EAAuC,KAAvC,GAA+C,IAA/C;AACD;;AAED,UAAM,WAAW,GAAG,+BAAkB,aAAlB,EAAiC,QAAjC,EAA2C,MAA3C,EAAmD,OAAnD,CAApB;AAEA,UAAM,MAAM,GAAA,CAAA,EAAA,GAAG,QAAQ,CAAC,MAAZ,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAsB,EAAlC;AACA,UAAM,MAAM,GAAG,2BAAgB,MAAM,CAAC,MAAvB,EAA+B,MAAM,CAAC,MAAP,CAAc,MAA7C,EAAqD,IAArD,CAAf;AACA,UAAM,UAAU,GAAG,oBAAS,CAAC,QAAD,EAAW,OAAX,CAAT,EAA8B,WAA9B,IAA6C,QAA7C,GAAwD,QAA3E;AAEA,IAAA,SAAS,CAAC,aAAV,CAAwB,OAAxB,IAAmC;AACjC,MAAA,KADiC;AAEjC,MAAA,aAAa,EAAE,QAFkB;AAGjC,OAAC,UAAD,GAAc,OAAO,KAAK,OAAZ,GAAsB,EAAtB,GAA2B,CAAC,mBAAmB,CAAC,KAAD,EAAQ,OAAR,EAAiB,MAAjB,CAApB;AAHR,KAAnC;AAKD;AACF;;AAED,SAAS,mBAAT,CAA6B,KAA7B,EAAgD,OAAhD,EAAwE,MAAxE,EAAuF;AACrF,QAAM,QAAQ,GAAG,OAAO,KAAK,KAAZ,GAAoB,QAApB,GAA+B,OAAhD;AAEA,SAAO;AACL,IAAA,MADK;AAEL,IAAA,UAAU,EAAE,KAAK,CAAC,KAAN,CAAY,SAAZ,CAAsB,UAAtB,CAAiC,GAAjC,CAAqC,QAArC,IAAiD,KAAK,CAAC,KAAN,CAAY,gBAAZ,CAA6B,QAA7B,CAAjD,GAA0F,SAFjG;AAGL,IAAA,IAAI,EAAE;AAHD,GAAP;AAKD;;AAED,SAAS,cAAT,CAAwB,KAAxB,EAA2C,OAA3C,EAA6D;;;AAC3D,QAAM;AAAC,IAAA;AAAD,MAAU,KAAhB;;AACA,MAAI,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAAJ,EAAmC;AACjC,UAAM;AAAC,MAAA,aAAD;AAAgB,MAAA;AAAhB,QAA2B,KAAK,CAAC,SAAvC;AACA,IAAA,OAAO,CAAC,IAAR,CAAa,OAAb,IAAwB,gCAAkB,OAAlB,EAA2B,OAA3B,CAAxB;;AAEA,QAAI,OAAO,CAAC,IAAR,CAAa,OAAb,MAA0B,QAA9B,EAAwC;AACtC;AACA,YAAM,aAAa,GAAG,OAAO,KAAK,GAAZ,GAAkB,QAAlB,GAA6B,KAAnD;AAEA,YAAM,YAAY,GAAG,aAAa,CAAC,aAAD,CAAlC;;AACA,WAAK,MAAM,aAAX,IAA4B,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAA5B,EAA2D;AACzD,cAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,GAAd,CAAkB,QAAlB,CAAD,CAAhC;AACA,QAAA,YAAY,CAAC,UAAD,CAAZ,GAAwB,CAAA,EAAA,GAAG,YAAY,CAAC,UAAD,CAAf,MAA2B,IAA3B,IAA2B,EAAA,KAAA,KAAA,CAA3B,GAA2B,EAA3B,GAA+B,CAAC,mBAAmB,CAAC,KAAD,EAAQ,aAAR,EAAuB,KAAvB,CAApB,CAAvD,CAFyD,CAIzD;;AACA,cAAM,QAAQ,GAAG,4BAAa,aAAb,EAA4B,MAA5B,EAAoC,KAAK,CAAC,MAA1C,EAAkD;AAAC,UAAA,MAAM,EAAE;AAAT,SAAlD,CAAjB;;AACA,YAAI,QAAJ,EAAc;AACZ;AACA,UAAA,YAAY,CAAC,UAAD,CAAZ,CAAyB,CAAzB,EAA4B,IAA5B,CAAiC,IAAjC,CAAsC,QAAtC;AACD;;AACD,QAAA,aAAa,CAAC,aAAd,GAA8B,IAA9B;AACD;AACF,KAjBD,MAiBO,CACL;AACD;AACF;AACF;;;;;;;;;;;;;ACnGD;;AACA;;AACA;;AACA;;AACA;;AAGA;;AAEA;;AAEM,SAAU,oBAAV,CAA+B,KAA/B,EAA2C;AAC/C,EAAA,uBAAuB,CAAC,KAAD,CAAvB;AAEA,EAAA,gCAAgC,CAAC,KAAD,EAAQ,OAAR,CAAhC;AACA,EAAA,gCAAgC,CAAC,KAAD,EAAQ,QAAR,CAAhC;AACD;;AAEM,MAAM,qBAAqB,GAAG,qBAA9B;;;AAED,SAAU,qBAAV,CAAgC,KAAhC,EAAkD;AACtD,EAAA,uBAAuB,CAAC,KAAD,CAAvB,CADsD,CAGtD;;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,MAAN,CAAa,OAAb,KAAyB,CAAzB,GAA6B,OAA7B,GAAuC,YAAzD,CAJsD,CAMtD;;AACA,QAAM,UAAU,GAAG,KAAK,CAAC,MAAN,CAAa,OAAb,KAAyB,SAAzB,GAAqC,QAArC,GAAgD,aAAnE;AAEA,EAAA,gCAAgC,CAAC,KAAD,EAAQ,SAAR,CAAhC;AACA,EAAA,gCAAgC,CAAC,KAAD,EAAQ,UAAR,CAAhC;AACD;;AAEK,SAAU,uBAAV,CAAkC,KAAlC,EAA8C;AAClD,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,KAAK,CAAC,eAAN;AACD;AACF;AAED;;;;;AAGA,SAAS,gCAAT,CAA0C,KAA1C,EAAwD,cAAxD,EAAsF;AACpF;;;;;;;AAOA,QAAM,QAAQ,GAAG,8CAA8B,cAA9B,CAAjB;AACA,QAAM,OAAO,GAAG,sCAAwB,QAAxB,CAAhB;AACA,QAAM,OAAO,GAAG,KAAK,CAAC,SAAN,CAAgB,OAAhC;AACA,QAAM,cAAc,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAvC;AAEA,MAAI,UAAJ,CAboF,CAcpF;;AACA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,UAAM,SAAS,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,eAA3B,CAA2C,QAA3C,CAAlB;AACA,UAAM,YAAY,GAAG,OAAO,CAAC,KAAR,CAAc,OAAd,CAArB;;AACA,QAAI,YAAY,KAAK,aAAjB,IAAkC,SAAS,CAAC,KAAV,KAAoB,MAA1D,EAAkE;AAChE;AACA;AACA,MAAA,UAAU,GAAG,SAAb;AACA;AACD;;AAED,QAAI,UAAJ,EAAgB;AACd,UAAI,YAAY,KAAK,aAAjB,IAAkC,UAAU,CAAC,KAAX,KAAqB,SAAS,CAAC,KAArE,EAA4E;AAC1E;AACA;AACA,QAAA,UAAU,GAAG,SAAb;AACA;AACD;;AACD,MAAA,UAAU,GAAG,oCAAqD,UAArD,EAAiE,SAAjE,EAA4E,QAA5E,EAAsF,EAAtF,CAAb;AACD,KARD,MAQO;AACL,MAAA,UAAU,GAAG,SAAb;AACD;AACF;;AAED,MAAI,UAAJ,EAAgB;AACd;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,MAAA,KAAK,CAAC,YAAN,CAAmB,KAAK,CAAC,OAAN,CAAc,QAAd,CAAnB,EAA4C,KAAK,CAAC,OAAN,CAAc,cAAd,CAA5C;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,GAA3B,CAA+B,QAA/B,EAAyC,QAAzC,EAAmD,KAAnD;AACD;;AACD,IAAA,cAAc,CAAC,eAAf,CAA+B,cAA/B,EAA+C,UAA/C;AACD,GAPD,MAOO;AACL,IAAA,cAAc,CAAC,eAAf,CAA+B,cAA/B,EAA+C;AAC7C,MAAA,QAAQ,EAAE,KADmC;AAE7C,MAAA,KAAK,EAAE;AAFsC,KAA/C;AAID;AACF;;AAEK,SAAU,mBAAV,CAA8B,KAA9B,EAA8C;AAClD,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,MAAoB,KAA1B;;AACA,OAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,UAAM,QAAQ,GAAG,6BAAe,OAAf,CAAjB;;AAEA,QAAI,IAAI,CAAC,QAAD,CAAR,EAAoB;AAClB,YAAM,aAAa,GAAG,IAAI,CAAC,QAAD,CAA1B;AACA,MAAA,SAAS,CAAC,UAAV,CAAqB,GAArB,CAAyB,QAAzB,EAAmC,kBAAO,aAAP,IAAwB,MAAxB,GAAiC,aAApE,EAAmF,IAAnF;AACD,KAHD,MAGO;AACL,YAAM,WAAW,GAAG,eAAe,CAAC,KAAD,EAAQ,QAAR,CAAnC;AACA,MAAA,SAAS,CAAC,UAAV,CAAqB,GAArB,CAAyB,QAAzB,EAAmC,WAAnC,EAAgD,KAAhD;AACD;AACF;AACF;;AAED,SAAS,eAAT,CAAyB,KAAzB,EAA2C,QAA3C,EAAuE;AACrE,QAAM,OAAO,GAAG,QAAQ,KAAK,OAAb,GAAuB,GAAvB,GAA6B,GAA7C;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,MAArB;AACA,QAAM,cAAc,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,CAAvB;;AAEA,MAAI,cAAJ,EAAoB;AAClB,UAAM,SAAS,GAAG,cAAc,CAAC,GAAf,CAAmB,MAAnB,CAAlB;AACA,UAAM,KAAK,GAAG,cAAc,CAAC,GAAf,CAAmB,OAAnB,CAAd;;AAEA,QAAI,8BAAkB,SAAlB,CAAJ,EAAkC;AAChC,YAAM,IAAI,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,QAAvC,CAAb;;AACA,UAAI,yBAAc,KAAd,KAAwB,kBAAO,IAAP,CAA5B,EAA0C;AACxC;AACA,eAAO,MAAP;AACD,OAHD,MAGO;AACL,eAAO,IAAP;AACD;AACF,KARD,MAQO;AACL,aAAO,yCAA4B,MAAM,CAAC,IAAnC,EAAyC,QAAzC,CAAP;AACD;AACF,GAfD,MAeO,IAAI,KAAK,CAAC,aAAN,IAAuB,KAAK,CAAC,IAAN,KAAe,KAA1C,EAAiD;AACtD;AACA,WAAO,yCAA4B,MAAM,CAAC,IAAnC,EAAyC,QAAzC,CAAP;AACD,GAHM,MAGA;AACL,UAAM,IAAI,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,QAAvC,CAAb;AACA,WAAO,kBAAO,IAAP,IAAe,IAAI,CAAC,IAApB,GAA2B,IAAlC;AACD;AACF;;;;;;;;;;ACxID;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEM,SAAU,kBAAV,CACJ,QADI,EAEJ,IAFI,EAGJ,GAHI,EAGgB;AAEpB,SAAO,yBAAQ,IAAR,EAAY,MAAA,CAAA,MAAA,CAAA;AAAG,IAAA,MAAM,EAAE,MAAM,yBAAQ,QAAR,CAAiB;AAAlC,GAAA,EAA0C,GAAG,KAAA,IAAH,IAAA,GAAG,KAAA,KAAA,CAAH,GAAA,GAAA,GAAO,EAAjD,CAAZ,CAAP;AACD;;AAEK,MAAO,UAAP,SAA0B,qBAA1B,CAAwC;AAO5C,EAAA,WAAA,CAAY,IAAZ,EAAuC,MAAvC,EAAsD,eAAtD,EAA+E,MAA/E,EAA6F;AAC3F,UAAM,IAAN,EAAY,OAAZ,EAAqB,MAArB,EAA6B,eAA7B,EAA8C,MAA9C,EAAsD,IAAI,CAAC,OAA3D;AAEA,SAAK,KAAL,GAAa,4BAAW,IAAI,CAAC,IAAhB,EAAsB,IAAtB,EAA4B,KAAK,OAAL,CAAa,OAAb,CAA5B,EAAmD,SAAnD,EAA8D,MAA9D,CAAb;AACA,SAAK,QAAL,GAAgB,CAAC,KAAK,KAAN,CAAhB;AAEA,SAAK,KAAL,GAAa,KAAK,SAAL,CAAe,IAAI,CAAC,KAApB,EAA2B,MAA3B,CAAb;AACD;;AAEO,EAAA,SAAS,CACf,KADe,EAEf,MAFe,EAED;AAEd;AACA,QAAI,CAAC,2BAAe,KAAf,CAAL,EAA4B;AAC1B,aAAO;AAAC,QAAA,KAAK,EAAE,gCAAe,KAAf,EAAsB,OAAtB,EAA+B,MAA/B;AAAR,OAAP;AACD;;AAED,WAAO,sBACL,KADK,EAEL,CAAC,eAAD,EAAkB,QAAlB,EAAmD,OAAnD,KAAuE;AACrE,UAAI,CAAC,oBAAS,CAAC,YAAD,EAAM,eAAN,CAAT,EAAwB,OAAxB,CAAL,EAAuC;AACrC;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,mBAAZ,CAAgC,OAAhC,EAAyC,OAAzC,CAAT;AACA,eAAO,eAAP;AACD;;AAED,UAAI,QAAQ,CAAC,KAAT,KAAmB,SAAvB,EAAkC;AAChC,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,aAAZ,CAA0B,QAA1B,EAAoC,OAApC,CAAT;AACA,eAAO,eAAP;AACD,OAVoE,CAYrE;;;AACA,MAAA,eAAe,CAAC,OAAD,CAAf,GAA2B,gCAAe,QAAf,EAAyB,OAAzB,EAAkC,MAAlC,CAA3B;AACA,aAAO,eAAP;AACD,KAjBI,EAkBL,EAlBK,CAAP;AAoBD;;AAEM,EAAA,eAAe,CAAC,OAAD,EAAiB;AACrC,WAAO,CAAC,CAAC,KAAK,KAAL,CAAW,OAAX,CAAT;AACD;;AAEM,EAAA,QAAQ,CAAC,OAAD,EAAiB;AAC9B,WAAO,KAAK,KAAL,CAAW,OAAX,CAAP;AACD;;AAEM,EAAA,SAAS,GAAA;AACd,SAAK,SAAL,CAAe,IAAf,GAAsB,sBAAU,IAAV,CAAtB;AACA,SAAK,KAAL,CAAW,SAAX;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,yCAAwB,IAAxB;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB;AACA;AACA;AACA,SAAK,KAAL,CAAW,eAAX;AACA,SAAK,SAAL,CAAe,SAAf,GAA2B,KAAK,KAAL,CAAW,SAAX,CAAqB,SAAhD;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,SAAK,KAAL,CAAW,cAAX;AACD;;AAEM,EAAA,mBAAmB,GAAA;AACxB,SAAK,KAAL,CAAW,mBAAX;AAEA,mCAAkB,IAAlB;AACD;;AAEM,EAAA,gCAAgC,CAAC,OAAD,EAAqB;AAC1D,WAAO,KAAK,KAAL,CAAW,gCAAX,CAA4C,OAA5C,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,SAAK,KAAL,CAAW,eAAX;AACA,WAAO,EAAP;AACD;;AAEM,EAAA,qBAAqB,CAAC,IAAD,EAAwB;AAClD,WAAO,KAAK,KAAL,CAAW,qBAAX,CAAiC,IAAjC,CAAP;AACD;;AAEO,EAAA,qBAAqB,GAAA;;;AAC3B,UAAM,YAAY,GAAa,EAA/B;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,WAAK,MAAM,UAAX,IAAyB,uBAAzB,EAAuC;AACrC,cAAM,qBAAqB,GAAG,KAAK,SAAL,CAAe,aAAf,CAA6B,OAA7B,CAA9B;AACA,cAAM,eAAe,GAAG,qBAAqB,CAAC,UAAD,CAA7C;AAEA,cAAM;AAAC,UAAA;AAAD,YAAkB,qBAAxB;;AACA,YAAI,aAAJ,EAAmB;AACjB,gBAAM,WAAW,GAAG,+BAAkB,aAAlB,EAAiC,aAAjC,EAAgD,KAAK,MAArD,EAA6D,OAA7D,CAApB;;AAEA,cAAI,oBAAS,CAAC,OAAD,EAAU,QAAV,CAAT,EAA8B,WAA9B,CAAJ,EAAgD;AAC9C,kBAAM,aAAa,GAAG,8BAAiB,OAAjB,EAA0B,WAA1B,CAAtB;AACA,YAAA,YAAY,CAAC,WAAb,GAAwB,CAAA,EAAA,GAAG,YAAY,CAAC,WAAhB,MAA2B,IAA3B,IAA2B,EAAA,KAAA,KAAA,CAA3B,GAA2B,EAA3B,GAA+B,EAAvD;AACA,YAAA,YAAY,CAAC,WAAb,CAAyB,aAAzB,IAA0C,KAA1C;AACD;AACF;;AAED,YAAI,eAAe,KAAA,IAAf,IAAA,eAAe,KAAA,KAAA,CAAf,GAAe,KAAA,CAAf,GAAA,eAAe,CAAG,CAAH,CAAnB,EAA0B;AACxB;AACA,gBAAM,QAAQ,GAAG,OAAO,KAAK,KAAZ,GAAoB,QAApB,GAA+B,OAAhD;AACA,gBAAM,QAAQ,GAAG,UAAU,KAAK,QAAf,GAA0B,YAA1B,GAAyC,YAA1D;;AACA,cAAI,OAAO,KAAK,OAAZ,IAAuB,CAAC,KAAK,KAAL,CAAW,SAAX,CAAqB,UAArB,CAAgC,GAAhC,CAAoC,QAApC,CAA5B,EAA2E;AACzE;AACA,YAAA,YAAY,CAAC,QAAD,CAAZ,GAAsB,CAAA,EAAA,GAAG,YAAY,CAAC,QAAD,CAAf,MAAyB,IAAzB,IAAyB,EAAA,KAAA,KAAA,CAAzB,GAAyB,EAAzB,GAA6B,EAAnD;AACA,YAAA,YAAY,CAAC,QAAD,CAAZ,CAAuB,OAAvB,IAAkC,GAAlC;AACD;;AAED,cAAI,qBAAqB,CAAC,KAA1B,EAAiC;AAC/B,YAAA,YAAY,CAAC,MAAb,GAAmB,CAAA,EAAA,GAAG,YAAY,CAAC,MAAhB,MAAsB,IAAtB,IAAsB,EAAA,KAAA,KAAA,CAAtB,GAAsB,EAAtB,GAA0B,EAA7C;AACA,YAAA,YAAY,CAAC,MAAb,CAAoB,OAAO,KAAK,KAAZ,GAAoB,UAApB,GAAiC,aAArD,IAAsE,EAAtE;AACD;AACF;AACF;AACF;;AACD,WAAO,YAAP;AACD;;AAES,EAAA,qBAAqB,GAAA;AAC7B,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAgB,KAAK,KAA3B;AAEA,UAAM,OAAO,GAAG,MAAM,GAAG,KAAK,oBAAL,EAAH,GAAiC,GAAG,GAAG,CAAH,GAAO,SAAjE;AAEA,QAAI,KAAK,GAAgB,KAAzB,CAL6B,CAO7B;AACA;;AACA,QAAI,CAAC,GAAD,IAAQ,KAAK,SAAL,CAAe,OAAf,CAAuB,KAAvB,CAA6B,CAA7B,KAAmC,aAA/C,EAA8D;AAC5D,MAAA,KAAK,GAAG,MAAR;AACD,KAFD,MAEO,IAAI,CAAC,MAAD,IAAW,KAAK,SAAL,CAAe,OAAf,CAAuB,KAAvB,CAA6B,CAA7B,KAAmC,aAAlD,EAAiE;AACtE,MAAA,KAAK,GAAG,MAAR;AACD;;AAED,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,KAAK,qBAAL,EADL,CAAA,EAGM,OAAO,GAAG;AAAC,MAAA;AAAD,KAAH,GAAe,EAH5B,CAAA,EAG+B;AAC7B,MAAA,MAAM,EAAE,MADqB;AAE7B,MAAA;AAF6B,KAH/B,CAAA;AAOD;;AAEM,EAAA,qBAAqB,GAAA;AAC1B;AACA,WAAO,KAAK,KAAL,CAAW,qBAAX,EAAP;AACD;;AAEO,EAAA,oBAAoB,GAAA;AAC1B,QAAI,KAAK,MAAL,IAAe,KAAK,MAAL,YAAuB,UAA1C,EAAsD;AACpD;AACA;AACA;AACA,aAAO,SAAP;AACD,KALD,MAKO;AACL;AACA,YAAM,mBAAmB,GAAG,KAAK,OAAL,CAAa,eAAb,CAA5B;AACA,aAAO;AAAC,QAAA,MAAM,EAAE,gBAAgB,mBAAmB;AAA5C,OAAP;AACD;AACF;;AAEM,EAAA,aAAa,CAAC,OAAD,EAAqB;AACvC,QAAI,KAAK,MAAL,IAAe,KAAK,MAAL,YAAuB,UAA1C,EAAsD;AACpD;AACA;AACA;AACA,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,KAAK,eAAL,CAAqB,QAArB,IACA;AACE,QAAA,MAAM,EAAE;AACN,UAAA,MAAM,EAAE;AACN;AACA;AACA,YAAA,OAAO,EAAE;AAAC,cAAA,KAAK,EAAE,yBAAQ,KAAK,KAAL,CAAW,MAAnB,EAA2B;AAAC,gBAAA,MAAM,EAAE;AAAT,eAA3B;AAAR;AAHH;AADF;AADV,OADA,GAUA,EAXN,CAAA,EAYK,MAAM,aAAN,CAAoB,OAApB,CAZL,CAAA;AAcD;;AACD,WAAO,MAAM,aAAN,CAAoB,OAApB,CAAP;AACD;AAED;;;;;AAGQ,EAAA,+BAA+B,GAAA;AACrC,UAAM,MAAM,GAAa,EAAzB;AACA,UAAM,GAAG,GAAkB,EAA3B;AACA,UAAM,EAAE,GAAa,EAArB;;AAEA,QAAI,KAAK,KAAL,YAAsB,UAA1B,EAAsC;AACpC,UAAI,KAAK,KAAL,CAAW,eAAX,CAA2B,QAA3B,CAAJ,EAA0C;AACxC,cAAM,KAAK,GAAG,yBAAQ,KAAK,KAAL,CAAW,KAAX,CAAiB,MAAzB,CAAd;AACA,QAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,UAAT;AACA,QAAA,EAAE,CAAC,IAAH,CAAQ,YAAY,KAAK,EAAzB;AACD;AACF,KAPD,MAOO;AACL,WAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,cAAM,mBAAmB,GAAG,KAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,OAA5B,CAA5B;;AACA,YAAI,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,MAAhD,EAAwD;AACtD,gBAAM,IAAI,GAAG,mBAAmB,CAAC,GAApB,CAAwB,MAAxB,CAAb;AACA,gBAAM,KAAK,GAAG,mBAAmB,CAAC,GAApB,CAAwB,OAAxB,CAAd;;AAEA,cAAI,8BAAkB,IAAlB,KAA2B,yBAAc,KAAd,CAA/B,EAAqD;AACnD,kBAAM,MAAM,GAAG,4BAAe,KAAK,KAApB,EAA2B,OAA3B,CAAf;AACA,kBAAM,KAAK,GAAG,gCAAmB,MAAnB,CAAd;;AACA,gBAAI,KAAJ,EAAW;AACT,cAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACA,cAAA,GAAG,CAAC,IAAJ,CAAS,UAAT;AACA,cAAA,EAAE,CAAC,IAAH,CAAQ,YAAY,KAAK,EAAzB;AACD,aAJD,MAIO;AACL,cAAA,GAAG,CAAC,IAAJ,CAAS,qBAAqB,OAAO,+BAArC;AACD;AACF;AACF;AACF;AACF;;AACD,WAAO;AAAC,MAAA,MAAD;AAAS,MAAA,GAAT;AAAc,MAAA;AAAd,KAAP;AACD;;AAEO,EAAA,aAAa,GAAA;AACnB,UAAM;AAAC,MAAA,IAAD;AAAO,MAAA;AAAP,QAAe,KAAK,SAAL,CAAe,IAAf,CAAoB,SAAzC;AACA,UAAM;AAAC,MAAA,GAAD;AAAM,MAAA;AAAN,QAAgB,KAAK,KAA3B;AACA,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA,GAAT;AAAc,MAAA;AAAd,QAAoB,KAAK,+BAAL,EAA1B;AACA,UAAM,OAAO,GAAa,EAA1B;;AAEA,SAAK,MAAM,OAAX,IAAsB,uBAAtB,EAAsC;AACpC,YAAM,QAAQ,GAAG,KAAK,KAAL,CAAW,OAAX,CAAjB;;AACA,UAAI,QAAJ,EAAc;AACZ,QAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,QAAR,CAAb;AAEA,cAAM;AAAC,UAAA,GAAD;AAAM,UAAA;AAAN,YAAc,QAApB;;AAEA,YAAI,oBAAU,GAAV,CAAJ,EAAoB;AAClB,UAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,QAAR,EAAkB;AAAC,YAAA,SAAS,EAAE;AAAZ,WAAlB,CAAb;AACD;;AAED,YAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,gBAAM;AAAC,YAAA,KAAD;AAAQ,YAAA,EAAE,GAAG;AAAb,cAAgC,IAAtC;AACA,gBAAM,UAAU,GAAG,kBAAkB,CAAC,QAAD,EAAW,IAAX,CAArC;;AACA,cAAI,GAAG,IAAI,MAAX,EAAmB;AACjB;AACA;AACA;AACA,YAAA,MAAM,CAAC,IAAP,CAAY,UAAZ;AACA,YAAA,GAAG,CAAC,IAAJ,CAAS,KAAT;AACA,YAAA,EAAE,CAAC,IAAH,CAAQ,UAAR;AACD,WAPD,MAOO;AACL,YAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;AACA,YAAA,GAAG,CAAC,IAAJ,CAAS,EAAT;AACA,YAAA,EAAE,CAAC,IAAH,CAAQ,UAAR;AACD;AACF,SAfD,MAeO,IAAI,uBAAQ,IAAR,CAAJ,EAAmB;AACxB,gBAAM,UAAU,GAAG,oCAAoB,QAApB,EAA8B,OAA9B,CAAnB;AACA,UAAA,MAAM,CAAC,IAAP,CAAY,UAAZ;AACA,UAAA,GAAG,CAAC,IAAJ,CAAS,KAAT;AACA,UAAA,EAAE,CAAC,IAAH,CAAQ,UAAR;AACD;AACF;AACF;;AAED,UAAM,KAAK,GAAG,CAAC,CAAC,GAAF,IAAS,CAAC,CAAC,MAAzB;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IADF;AAEE,MAAA,IAFF;AAGE,MAAA;AAHF,KAAA,EAIM,KAAK,IAAI,MAAM,CAAC,MAAP,GAAgB,CAAzB,GACA;AACE,MAAA,SAAS,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EADf,CAAA,EAEH,MAAM,CAAC,MAAP,GAAgB;AAAC,QAAA,MAAD;AAAS,QAAA,GAAT;AAAc,QAAA;AAAd,OAAhB,GAAoC,EAFjC;AADX,KADA,GAOA,EAXN,CAAA;AAaD;;AAEO,EAAA,eAAe,CAAC,OAAD,EAAsB;AAC3C,UAAM;AAAC,MAAA;AAAD,QAAU,IAAhB;AACA,UAAM,QAAQ,GAAG,KAAK,CAAC,OAAD,CAAtB;;AAEA,QAAI,QAAJ,EAAc;AACZ,UAAI,uBAAY,QAAQ,CAAC,IAArB,CAAJ,EAAgC;AAC9B,eAAO,CAAC,kBAAkB,CAAC,QAAD,EAAW,QAAQ,CAAC,IAApB,EAA0B;AAAC,UAAA,IAAI,EAAE;AAAP,SAA1B,CAAnB,CAAP;AACD,OAFD,MAEO,IAAI,uBAAQ,QAAQ,CAAC,IAAjB,CAAJ,EAA4B;AACjC,eAAO,CAAC,oCAAoB,QAApB,EAA8B,OAA9B,EAAuC;AAAC,UAAA,IAAI,EAAE;AAAP,SAAvC,CAAD,CAAP;AACD;;AACD,aAAO,CAAC,yBAAQ,QAAR,EAAkB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAlB,CAAD,CAAP;AACD;;AACD,WAAO,EAAP;AACD;;AAEO,EAAA,cAAc,CAAC,OAAD,EAAsB;AAC1C,UAAM;AAAC,MAAA;AAAD,QAAU,IAAhB;AACA,UAAM,QAAQ,GAAG,KAAK,CAAC,OAAD,CAAtB;;AACA,QAAI,QAAJ,EAAc;AACZ,YAAM;AAAC,QAAA;AAAD,UAAS,QAAf;AACA,YAAM,KAAK,GAAG,CAAC,uBAAY,IAAZ,IAAoB,IAAI,CAAC,KAAzB,GAAiC,CAAC,uBAAQ,IAAR,CAAD,IAAkB,IAApD,KAA6D,WAA3E;AACA,aAAO,CAAC,KAAD,CAAP;AACD;;AACD,WAAO,EAAP;AACD;;AAEO,EAAA,kBAAkB,GAAA;AACxB,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA;AAAR,QAAkB,IAAxB;;AACA,QAAI,KAAK,CAAC,KAAV,EAAiB;AACf;AACA,aAAO,mCAAmB,KAAK,CAAC,KAAzB,EAAgC,OAAhC,EAAyC,MAAzC,CAAP;AACD;;AAED,UAAM,iBAAiB,GAAG;AACxB,MAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,QAAR,CADmB;AAExB,MAAA,MAAM,EAAE,CAAC,MAAD,EAAS,OAAT;AAFgB,KAA1B;;AAKA,SAAK,MAAM,OAAX,IAAsB,0BAAtB,EAAuC;AACrC,UAAI,KAAK,CAAC,OAAD,CAAT,EAAoB;AAClB,cAAM,WAAW,GAAG,+BAAkB,aAAlB,EAAiC,KAAK,CAAC,OAAD,CAAtC,EAAiD,MAAjD,EAAyD,OAAzD,CAApB;;AACA,YAAI,oBAAS,iBAAiB,CAAC,OAAD,CAA1B,EAAqC,WAArC,CAAJ,EAAuD;AACrD;AACA,iBAAO,mCAAmB,KAAK,CAAC,OAAD,CAAxB,EAAmC,OAAnC,EAA4C,MAA5C,CAAP;AACD;AACF;AACF;;AACD,WAAO,SAAP;AACD;;AAEM,EAAA,aAAa,GAAA;AAClB,UAAM;AAAC,MAAA;AAAD,QAAU,IAAhB,CADkB,CAGlB;AACA;;AACA,UAAM,SAAS,GAAG,KAAK,SAAL,CAAe,IAAf,CAAoB,SAAtC;AACA,UAAM,IAAI,GAAG,iCAAkB,SAAlB,CAAb;AAEA,UAAM,WAAW,GAAG,KAAK,CAAC,wBAAN,CAA+B,KAA/B,CAApB;AAEA,UAAM,KAAK,GAAG,KAAK,kBAAL,MAA6B,KAAK,CAAC,aAAN,EAA3C;AACA,UAAM,KAAK,GAAG,KAAK,CAAC,kBAAN,EAAd;AAEA,UAAM,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACb,MAAA,IAAI,EAAE,KAAK,OAAL,CAAa,MAAb,CADO;AAEb,MAAA,IAAI,EAAE;AAFO,KAAA,EAGT,KAAK,GAAG;AAAC,MAAA;AAAD,KAAH,GAAa,EAHT,CAAA,EAIT,KAAK,GAAG;AAAC,MAAA;AAAD,KAAH,GAAa,EAJT,CAAA,EAIY;AACzB,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,KAAK,aAAL;AADH,OADmB;AAIzB;AACA,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,wBAAe,GAAf,CAAmB,CAAC,IAAI,KAAK,eAAL,CAAqB,CAArB,CAAxB,EAAiD,IAAjD,EADH;AAEJ,QAAA,KAAK,EAAE,wBAAe,GAAf,CAAmB,CAAC,IAAI,KAAK,cAAL,CAAoB,CAApB,CAAxB,EAAgD,IAAhD;AAFH;AALmB,KAJZ,CAAA,EAaT,IAAI,CAAC,MAAL,GAAc,CAAd,GAAkB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAlB,GAAiC,EAbxB,CAAA,EAcT,WAAW,GAAG;AAAC,MAAA,MAAM,EAAE;AAAC,QAAA,MAAM,EAAE;AAAT;AAAT,KAAH,GAAqC,EAdvC,CAAA,EAeV,KAAK,CAAC,aAAN,CAAoB,qCAAqB,IAArB,EAA2B,EAA3B,CAApB,CAfU,CAAf;AAkBA,WAAO,CAAC,SAAD,CAAP;AACD;;AAES,EAAA,UAAU,GAAA;AAClB,WAAO,KAAK,KAAZ;AACD;;AA9X2C;;;;;;;;;;;ACnC9C;;AACA;;AAEA;;AAEA;;AAEM,SAAU,0BAAV,CACJ,MADI,EAEJ,KAFI,EAEuB;AAE3B,QAAM;AAAC,IAAA,GAAD;AAAM,IAAA;AAAN,MAAgB,KAAtB;;AACA,MAAI,GAAG,IAAI,MAAX,EAAmB;AACjB,QAAI,SAAS,GAAG,IAAhB,CADiB,CAEjB;;AACA,SAAK,MAAM,QAAX,IAAuB,CAAC,GAAD,EAAM,MAAN,CAAvB,EAAsC;AACpC,UAAI,uBAAY,QAAQ,CAAC,IAArB,CAAJ,EAAgC;AAC9B,cAAM;AAAC,UAAA,KAAD;AAAQ,UAAA,EAAE,GAAG;AAAb,YAAgC,QAAQ,CAAC,IAA/C;AACA,QAAA,MAAM,GAAG,SAAS,GAAG,IAAI,yCAAJ,CAA+B,MAA/B,EAAuC;AAC1D,UAAA,aAAa,EAAE,CACb;AACE,YAAA,EADF;AAEE,YAAA,KAFF;AAGE,YAAA,EAAE,EAAE,+BAAmB,QAAnB,EAA6B,QAAQ,CAAC,IAAtC,EAA4C;AAAC,cAAA,KAAK,EAAE;AAAR,aAA5C;AAHN,WADa,CAD2C;AAQ1D,UAAA,OAAO,EAAE,CAAC,yBAAQ,QAAR,CAAD;AARiD,SAAvC,CAArB;AAUD;AACF;;AACD,WAAO,SAAP;AACD;;AACD,SAAO,IAAP;AACD;;;;;;;;;;;ACjCD;;AACA;;AAYA;;AACA;;AAoBA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAMA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEM,SAAU,UAAV,CAAqB,IAArB,EAAiC,OAAjC,EAAsD;;;AAC1D,OAAK,MAAM,KAAX,IAAoB,OAApB,EAA6B;AAC3B,UAAM,SAAS,GAAG,KAAK,CAAC,IAAxB,CAD2B,CAG3B;;AACA,QAAI,IAAI,CAAC,IAAL,IAAa,KAAK,CAAC,OAAN,EAAb,IAAgC,IAAI,CAAC,IAAL,KAAc,KAAK,CAAC,QAAxD,EAAkE;AAChE;AACD,KAN0B,CAQ3B;;;AACA,QAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAD,CAAJ,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAE,IAAhB,MAAoB,CAAA,EAAA,GAAI,SAAS,CAAC,MAAd,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,KAAA,CAApB,GAAoB,EAAA,CAAE,OAA1C,CAAJ,EAAuD;AACrD;AACD,KAX0B,CAa3B;;;AACA,QACE,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAD,CAAJ,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAE,OAAhB,MAAuB,CAAA,EAAA,GAAI,SAAS,CAAC,MAAd,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,KAAA,CAApB,GAAoB,EAAA,CAAE,OAA7C,CAAD,KACA,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAD,CAAJ,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAE,OAAhB,OAAuB,CAAA,EAAA,GAAK,SAAS,CAAC,MAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,OAA9C,CAFF,EAGE;AACA;AACD;;AACD,QAAI,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAD,CAAJ,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAE,IAAhB,MAAoB,CAAA,EAAA,GAAI,SAAS,CAAC,MAAd,MAAoB,IAApB,IAAoB,EAAA,KAAA,KAAA,CAApB,GAAoB,KAAA,CAApB,GAAoB,EAAA,CAAE,IAA1C,CAAD,KAAoD,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAD,CAAJ,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAc,EAAA,CAAE,IAAhB,OAAoB,CAAA,EAAA,GAAK,SAAS,CAAC,MAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqB,EAAA,CAAE,IAA3C,CAAxD,EAAyG;AACvG;AACD;;AAED,QAAI,wBAAa,IAAb,KAAsB,wBAAa,SAAb,CAA1B,EAAmD;AACjD,UAAI,qBAAU,IAAI,CAAC,MAAf,EAAuB,SAAS,CAAC,MAAjC,CAAJ,EAA8C;AAC5C,eAAO,KAAP;AACD;AACF,KAJD,MAIO,IAAI,qBAAU,IAAV,KAAmB,qBAAU,SAAV,CAAvB,EAA6C;AAClD,UAAI,IAAI,CAAC,GAAL,KAAa,SAAS,CAAC,GAA3B,EAAgC;AAC9B,eAAO,KAAP;AACD;AACF,KAJM,MAIA,IAAI,uBAAY,IAAZ,CAAJ,EAAuB;AAC5B,UAAI,IAAI,CAAC,IAAL,KAAc,KAAK,CAAC,QAAxB,EAAkC;AAChC,eAAO,KAAP;AACD;AACF;AACF;;AACD,SAAO,IAAP;AACD;;AAED,SAAS,SAAT,CAAmB,KAAnB,EAAiC,OAAjC,EAAsD;AACpD,MAAI,KAAK,CAAC,IAAN,IAAc,CAAC,KAAK,CAAC,MAAzB,EAAiC;AAC/B;AAEA,QAAI,KAAK,CAAC,IAAN,KAAe,IAAnB,EAAyB;AACvB;AACA,YAAM,MAAM,GAAG,IAAI,kBAAJ,CAAe;AAAC,QAAA,MAAM,EAAE;AAAT,OAAf,CAAf;AACA,MAAA,OAAO,CAAC,IAAR,CAAa,MAAb;AACA,aAAO,MAAP;AACD;;AAED,UAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,IAAP,EAAa,OAAb,CAAjC;;AAEA,QAAI,cAAJ,EAAoB;AAClB,UAAI,CAAC,uBAAY,KAAK,CAAC,IAAlB,CAAL,EAA8B;AAC5B,QAAA,cAAc,CAAC,IAAf,CAAoB,MAApB,GAA6B,qBAAU,EAAV,EAAc,KAAK,CAAC,IAAN,CAAW,MAAzB,EAAiC,cAAc,CAAC,IAAf,CAAoB,MAArD,CAA7B;AACD,OAHiB,CAKlB;;;AACA,UAAI,CAAC,cAAc,CAAC,OAAf,EAAD,IAA6B,KAAK,CAAC,IAAN,CAAW,IAA5C,EAAkD;AAChD,QAAA,cAAc,CAAC,QAAf,GAA0B,KAAK,CAAC,IAAN,CAAW,IAArC;AACD;;AAED,aAAO,cAAP;AACD,KAXD,MAWO;AACL,YAAM,MAAM,GAAG,IAAI,kBAAJ,CAAe,KAAK,CAAC,IAArB,CAAf;AACA,MAAA,OAAO,CAAC,IAAR,CAAa,MAAb;AACA,aAAO,MAAP;AACD;AACF,GA5BD,MA4BO;AACL;AACA,WAAO,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,IAAvB,CAA4B,SAA5B,GACH,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,IAAvB,CAA4B,SADzB,GAEH,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,IAAvB,CAA4B,IAFhC;AAGD;AACF;AAED;;;;;AAGM,SAAU,mBAAV,CAA8B,IAA9B,EAAkD,KAAlD,EAAgE,aAAhE,EAA4F;;;AAChG,MAAI,aAAa,GAAG,CAApB;;AAEA,OAAK,MAAM,CAAX,IAAgB,KAAK,CAAC,UAAtB,EAAkC;AAChC,QAAI,WAAW,GAAe,SAA9B;AACA,QAAI,aAAJ;;AAEA,QAAI,4BAAY,CAAZ,CAAJ,EAAoB;AAClB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,wBAAJ,CAAkB,IAAlB,EAAwB,CAAxB,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHD,MAGO,IAAI,yBAAS,CAAT,CAAJ,EAAiB;AACtB,YAAM,QAAQ,GAAG,iDAA+B,CAA/B,CAAjB;AACA,MAAA,aAAa,GAAG,IAAI,GAAA,CAAA,EAAA,GAAG,uBAAU,iBAAV,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,QAAtC,EAAgD,aAAhD,CAAH,MAAiE,IAAjE,IAAiE,EAAA,KAAA,KAAA,CAAjE,GAAiE,EAAjE,GAAqE,IAAzF;AAEA,MAAA,IAAI,GAAG,IAAI,kBAAJ,CAAe,IAAf,EAAqB,KAArB,EAA4B,CAAC,CAAC,MAA9B,CAAP;AACD,KALM,MAKA,IAAI,sBAAM,CAAN,CAAJ,EAAc;AACnB,MAAA,aAAa,GAAG,IAAI,GAAG,aAAQ,iBAAR,CAA0B,IAA1B,EAAgC,CAAhC,EAAmC,KAAnC,CAAvB;AACA,MAAA,WAAW,GAAG,QAAd;AACD,KAHM,MAGA,IAAI,2BAAW,CAAX,CAAJ,EAAmB;AACxB,MAAA,WAAW,GAAG,MAAd;AACA,YAAM,QAAQ,GAAG,aAAa,CAAC,eAAd,CAA8B,CAAC,CAAC,KAAhC,CAAjB,CAFwB,CAGxB;;AACA,UAAI,QAAQ,CAAC,KAAT,KAAmB,SAAvB,EAAkC;AAChC,QAAA,IAAI,GAAG,IAAI,sBAAJ,CAAc,IAAd,EAAoB;AAAC,WAAC,CAAC,CAAC,KAAH,GAAW;AAAZ,SAApB,CAAP;AACA,QAAA,aAAa,CAAC,GAAd,CAAkB,CAAC,CAAC,KAApB,EAA2B,WAA3B,EAAwC,KAAxC;AACD;;AACD,MAAA,aAAa,GAAG,IAAI,GAAG,uBAAa,iBAAb,CAA+B,IAA/B,EAAqC,CAArC,CAAvB;AACD,KATM,MASA,IAAI,4BAAY,CAAZ,CAAJ,EAAoB;AACzB,MAAA,aAAa,GAAG,IAAI,GAAG,yBAAc,iBAAd,CAAgC,IAAhC,EAAsC,CAAtC,CAAvB;AACA,MAAA,WAAW,GAAG,QAAd;;AACA,UAAI,oCAAoB,KAApB,CAAJ,EAAgC;AAC9B,QAAA,IAAI,GAAG,IAAI,0BAAJ,CAAmB,IAAnB,CAAP;AACD;AACF,KANM,MAMA,IAAI,yBAAS,CAAT,CAAJ,EAAiB;AACtB,MAAA,aAAa,GAAG,IAAI,GAAG,mBAAW,IAAX,CAAgB,IAAhB,EAAsB,KAAtB,EAA6B,CAA7B,EAAgC,aAAa,EAA7C,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,yBAAS,CAAT,CAAJ,EAAiB;AACtB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,2BAAJ,CAAwB,IAAxB,EAA8B,CAA9B,CAAvB;AACA,MAAA,WAAW,GAAG,QAAd;AACD,KAHM,MAGA,IAAI,gCAAgB,CAAhB,CAAJ,EAAwB;AAC7B,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,yCAAJ,CAA+B,IAA/B,EAAqC,CAArC,CAAvB;AACA,MAAA,WAAW,GAAG,QAAd;AACD,KAHM,MAGA,IAAI,wBAAQ,CAAR,CAAJ,EAAgB;AACrB,MAAA,aAAa,GAAG,IAAI,GAAG,iBAAU,iBAAV,CAA4B,IAA5B,EAAkC,CAAlC,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,uBAAO,CAAP,CAAJ,EAAe;AACpB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,uBAAJ,CAAsB,IAAtB,EAA4B,CAA5B,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,0BAAU,CAAV,CAAJ,EAAkB;AACvB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,6BAAJ,CAAyB,IAAzB,EAA+B,CAA/B,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,wBAAQ,CAAR,CAAJ,EAAgB;AACrB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,yBAAJ,CAAuB,IAAvB,EAA6B,CAA7B,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,yBAAS,CAAT,CAAJ,EAAiB;AACtB,MAAA,IAAI,GAAG,IAAI,2BAAJ,CAAwB,IAAxB,EAA8B,CAA9B,CAAP;AACD,KAFM,MAEA,IAAI,yBAAS,CAAT,CAAJ,EAAiB;AACtB,MAAA,aAAa,GAAG,IAAI,GAAG,mBAAW,iBAAX,CAA6B,IAA7B,EAAmC,CAAnC,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,0BAAU,CAAV,CAAJ,EAAkB;AACvB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,6BAAJ,CAAyB,IAAzB,EAA+B,CAA/B,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,2BAAW,CAAX,CAAJ,EAAmB;AACxB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,+BAAJ,CAA0B,IAA1B,EAAgC,CAAhC,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,6BAAa,CAAb,CAAJ,EAAqB;AAC1B,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,mCAAJ,CAA4B,IAA5B,EAAkC,CAAlC,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA,IAAI,wBAAQ,CAAR,CAAJ,EAAgB;AACrB,MAAA,aAAa,GAAG,IAAI,GAAG,IAAI,yBAAJ,CAAuB,IAAvB,EAA6B,CAA7B,CAAvB;AACA,MAAA,WAAW,GAAG,SAAd;AACD,KAHM,MAGA;AACL,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,uBAAZ,CAAoC,CAApC,CAAT;AACA;AACD;;AAED,QAAI,aAAa,IAAI,WAAW,KAAK,SAArC,EAAgD;AAC9C,WAAK,MAAM,KAAX,IAAgB,CAAA,EAAA,GAAI,aAAa,CAAC,cAAd,EAAJ,MAAkC,IAAlC,IAAkC,EAAA,KAAA,KAAA,CAAlC,GAAkC,EAAlC,GAAsC,EAAtD,EAA0D;AACxD,QAAA,aAAa,CAAC,GAAd,CAAkB,KAAlB,EAAyB,WAAzB,EAAsC,KAAtC;AACD;AACF;AACF;;AAED,SAAO,IAAP;AACD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDM,SAAU,SAAV,CAAoB,KAApB,EAAgC;;;AACpC,MAAI,IAAI,GAAG,SAAS,CAAC,KAAD,EAAQ,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAA7B,CAApB;AAEA,QAAM;AAAC,IAAA,WAAD;AAAc,IAAA;AAAd,MAAqC,KAAK,CAAC,SAAN,CAAgB,IAA3D;AACA,QAAM,aAAa,GAAG,KAAK,CAAC,MAAN,GAAe,KAAK,CAAC,MAAN,CAAa,SAAb,CAAuB,IAAvB,CAA4B,aAA5B,CAA0C,KAA1C,EAAf,GAAmE,IAAI,eAAJ,EAAzF;AACA,QAAM,IAAI,GAAG,KAAK,CAAC,IAAnB;;AAEA,MAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB;AACA,QAAI,+BAAoB,IAApB,CAAJ,EAA+B;AAC7B,MAAA,IAAI,GAAG,IAAI,sBAAJ,CAAiB,IAAjB,EAAuB,IAAI,CAAC,QAA5B,CAAP;AACD,KAFD,MAEO,IAAI,gCAAqB,IAArB,CAAJ,EAAgC;AACrC,MAAA,IAAI,GAAG,IAAI,wBAAJ,CAAkB,IAAlB,EAAwB,IAAI,CAAC,SAA7B,CAAP;AACD,KANoB,CAOrB;;;AACA,IAAA,aAAa,CAAC,YAAd,GAA6B,IAA7B;AACD,GATD,MASO,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,MAAN,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAE,KAAd,MAAwB,IAA5B,EAAkC;AACvC;AACA,IAAA,aAAa,CAAC,YAAd,GAA6B,IAA7B;AACD;;AAED,EAAA,IAAI,GAAA,CAAA,EAAA,GAAG,uBAAU,YAAV,CAAuB,IAAvB,EAA6B,KAA7B,EAAoC,aAApC,CAAH,MAAqD,IAArD,IAAqD,EAAA,KAAA,KAAA,CAArD,GAAqD,EAArD,GAAyD,IAA7D,CArBoC,CAuBpC;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,EAAA,IAAI,GAAG,IAAI,0BAAJ,CAAmB,IAAnB,CAAP,CA9BoC,CAgCpC;AACA;;AACA,QAAM,aAAa,GAAG,KAAK,CAAC,MAAN,IAAgB,yBAAa,KAAK,CAAC,MAAnB,CAAtC;;AACA,MAAI,wBAAY,KAAZ,KAAsB,yBAAa,KAAb,CAA1B,EAA+C;AAC7C,QAAI,aAAJ,EAAmB;AACjB,MAAA,IAAI,GAAA,CAAA,EAAA,GAAG,aAAQ,gBAAR,CAAyB,IAAzB,EAA+B,KAA/B,CAAH,MAAwC,IAAxC,IAAwC,EAAA,KAAA,KAAA,CAAxC,GAAwC,EAAxC,GAA4C,IAAhD;AACD;AACF;;AAED,MAAI,KAAK,CAAC,UAAN,CAAiB,MAAjB,GAA0B,CAA9B,EAAiC;AAC/B,IAAA,IAAI,GAAG,mBAAmB,CAAC,IAAD,EAAO,KAAP,EAAc,aAAd,CAA1B;AACD,GA3CmC,CA6CpC;;;AACA,QAAM,iBAAiB,GAAG,2CAAyB,KAAzB,CAA1B;AACA,QAAM,gBAAgB,GAAG,0CAAwB,KAAxB,CAAzB;AACA,EAAA,IAAI,GAAA,CAAA,EAAA,GAAG,uBAAU,iBAAV,CAA4B,IAA5B,EAAkC,EAAlC,EAAoC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,iBAAN,CAAA,EAA4B,gBAA5B,CAApC,EAAmF,aAAnF,CAAH,MAAoG,IAApG,IAAoG,EAAA,KAAA,KAAA,CAApG,GAAoG,EAApG,GAAwG,IAA5G;;AAEA,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,IAAA,IAAI,GAAG,qBAAY,QAAZ,CAAqB,IAArB,EAA2B,KAA3B,CAAP;AACA,IAAA,IAAI,GAAG,uBAAa,QAAb,CAAsB,IAAtB,EAA4B,KAA5B,CAAP;AACD;;AAED,MAAI,wBAAY,KAAZ,KAAsB,yBAAa,KAAb,CAA1B,EAA+C;AAC7C,QAAI,CAAC,aAAL,EAAoB;AAClB,MAAA,IAAI,GAAA,CAAA,EAAA,GAAG,aAAQ,gBAAR,CAAyB,IAAzB,EAA+B,KAA/B,CAAH,MAAwC,IAAxC,IAAwC,EAAA,KAAA,KAAA,CAAxC,GAAwC,EAAxC,GAA4C,IAAhD;AACD;;AAED,IAAA,IAAI,GAAA,CAAA,EAAA,GAAG,uBAAa,gBAAb,CAA8B,IAA9B,EAAoC,KAApC,CAAH,MAA6C,IAA7C,IAA6C,EAAA,KAAA,KAAA,CAA7C,GAA6C,EAA7C,GAAiD,IAArD;AACA,IAAA,IAAI,GAAG,yBAAc,oBAAd,CAAmC,IAAnC,EAAyC,KAAzC,CAAP;AACD,GA9DmC,CAgEpC;;;AACA,QAAM,OAAO,GAAG,KAAK,CAAC,OAAN,CAAc,SAAd,CAAhB;AACA,QAAM,GAAG,GAAG,IAAI,oBAAJ,CAAe,IAAf,EAAqB,OAArB,EAA8B,SAA9B,EAAmC,mBAAnC,CAAZ;AACA,EAAA,WAAW,CAAC,OAAD,CAAX,GAAuB,GAAvB;AACA,EAAA,IAAI,GAAG,GAAP;;AAEA,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,UAAM,GAAG,GAAG,yBAAc,gBAAd,CAA+B,IAA/B,EAAqC,KAArC,CAAZ;;AACA,QAAI,GAAJ,EAAS;AACP,MAAA,IAAI,GAAG,GAAP;;AAEA,UAAI,oCAAoB,KAApB,CAAJ,EAAgC;AAC9B,QAAA,IAAI,GAAG,IAAI,0BAAJ,CAAmB,IAAnB,CAAP;AACD;AACF;;AACD,IAAA,IAAI,GAAA,CAAA,EAAA,GAAG,mBAAW,gBAAX,CAA4B,IAA5B,EAAkC,KAAlC,CAAH,MAA2C,IAA3C,IAA2C,EAAA,KAAA,KAAA,CAA3C,GAA2C,EAA3C,GAA+C,IAAnD;AACA,IAAA,IAAI,GAAA,CAAA,EAAA,GAAG,iBAAU,gBAAV,CAA2B,IAA3B,EAAiC,KAAjC,CAAH,MAA0C,IAA1C,IAA0C,EAAA,KAAA,KAAA,CAA1C,GAA0C,EAA1C,GAA8C,IAAlD;AACD;;AAED,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,IAAA,IAAI,GAAA,CAAA,EAAA,GAAG,iCAAkB,IAAlB,CAAuB,IAAvB,EAA6B,KAA7B,CAAH,MAAsC,IAAtC,IAAsC,EAAA,KAAA,KAAA,CAAtC,GAAsC,EAAtC,GAA0C,IAA9C;AACD,GArFmC,CAuFpC;;;AACA,QAAM,QAAQ,GAAG,KAAK,CAAC,OAAN,CAAc,UAAd,CAAjB;AACA,QAAM,IAAI,GAAG,IAAI,oBAAJ,CAAe,IAAf,EAAqB,QAArB,EAA+B,UAA/B,EAAqC,mBAArC,CAAb;AACA,EAAA,WAAW,CAAC,QAAD,CAAX,GAAwB,IAAxB;AACA,EAAA,IAAI,GAAG,IAAP;;AAEA,MAAI,wBAAY,KAAZ,CAAJ,EAAwB;AACtB,sCAAsB,KAAtB,EAA6B,IAA7B;AACD,GA/FmC,CAiGpC;;;AACA,MAAI,SAAS,GAAG,IAAhB;;AACA,MAAI,yBAAa,KAAb,CAAJ,EAAyB;AACvB,UAAM,SAAS,GAAG,KAAK,CAAC,OAAN,CAAc,OAAd,CAAlB,CADuB,CAGvB;AACA;;AACA,IAAA,IAAI,GAAA,CAAA,EAAA,GAAG,oDAA2B,IAA3B,EAAiC,KAAK,CAAC,KAAvC,CAAH,MAAgD,IAAhD,IAAgD,EAAA,KAAA,KAAA,CAAhD,GAAgD,EAAhD,GAAoD,IAAxD;AAEA,IAAA,SAAS,GAAG,IAAI,gBAAJ,CAAc,IAAd,EAAoB,KAApB,EAA2B,SAA3B,EAAsC,IAAI,CAAC,SAAL,EAAtC,CAAZ;AACA,IAAA,WAAW,CAAC,SAAD,CAAX,GAAyB,SAAzB;AACD;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,KAAK,CAAC,SAAN,CAAgB,IADrB,CAAA,EACyB;AACvB,IAAA,WADuB;AAEvB,IAAA,mBAFuB;AAGvB,IAAA,GAHuB;AAIvB,IAAA,IAJuB;AAKvB,IAAA,SALuB;AAMvB,IAAA;AANuB,GADzB,CAAA;AASD;;;;;;;;;AC7ZD;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEM,MAAO,WAAP,SAA2B,YAA3B,CAAgC;AAGpC,EAAA,WAAA,CAAY,IAAZ,EAAwC,MAAxC,EAAuD,eAAvD,EAAgF,MAAhF,EAA8F;;;AAC5F,UAAM,IAAN,EAAY,QAAZ,EAAsB,MAAtB,EAA8B,eAA9B,EAA+C,MAA/C,EAAuD,IAAI,CAAC,OAA5D;;AAEA,QAAI,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAL,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAE,IAAd,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,KAAA,CAAlB,GAAkB,EAAA,CAAE,CAApB,MAA0B,QAA1B,IAAsC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAL,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAE,IAAd,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,KAAA,CAAlB,GAAkB,EAAA,CAAE,CAApB,MAA0B,QAApE,EAA8E;AAC5E,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,wBAArB;AACD;;AAED,SAAK,QAAL,GAAgB,KAAK,WAAL,CAAiB,IAAjB,EAAuB,GAAvB,CAA2B,CAAC,KAAD,EAAQ,CAAR,KAAa;AACtD,aAAO,4BAAW,KAAX,EAAkB,IAAlB,EAAwB,KAAK,OAAL,CAAa,YAAY,CAAzB,CAAxB,EAAqD,SAArD,EAAgE,MAAhE,CAAP;AACD,KAFe,CAAhB;AAGD;;AAEM,EAAA,SAAS,GAAA;AACd,SAAK,SAAL,CAAe,IAAf,GAAsB,sBAAU,IAAV,CAAtB;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,SAAN;AACD;AACF;;AAEM,EAAA,eAAe,GAAA;AACpB;AACA;AACA;AACA,SAAK,SAAL,CAAe,SAAf,GAA2B,EAA3B;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,eAAN;;AACA,WAAK,MAAM,GAAX,IAAkB,gBAAK,KAAK,CAAC,SAAN,CAAgB,SAArB,CAAlB,EAAmD;AACjD,aAAK,SAAL,CAAe,SAAf,CAAyB,GAAzB,IAAgC,KAAK,CAAC,SAAN,CAAgB,SAAhB,CAA0B,GAA1B,CAAhC;AACD;AACF;AACF;;AAEM,EAAA,cAAc,GAAA;AACnB,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,cAAN;AACD;AACF;;AAEM,EAAA,mBAAmB,GAAA;AACxB,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,mBAAN;AACD,KAHuB,CAKxB;;AACD;;AAEO,EAAA,WAAW,CAAC,IAAD,EAA2B;AAC5C,QAAI,yBAAc,IAAd,CAAJ,EAAyB;AACvB,aAAO,IAAI,CAAC,OAAZ;AACD,KAFD,MAEO,IAAI,yBAAc,IAAd,CAAJ,EAAyB;AAC9B,aAAO,IAAI,CAAC,OAAZ;AACD;;AACD,WAAO,IAAI,CAAC,MAAZ;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,uCAAsB,IAAtB;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAP;AACD;;AAEM,EAAA,gCAAgC,CAAC,OAAD,EAAqB;AAC1D,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,EAAD,EAAK,KAAL,KAAe,KAAK,CAAC,gCAAN,CAAuC,EAAvC,CAApC,EAAgF,OAAhF,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,SAAK,QAAL,CAAc,OAAd,CAAsB,KAAK,IAAI,KAAK,CAAC,eAAN,EAA/B;AACA,WAAO,EAAP;AACD;;AAEM,EAAA,qBAAqB,GAAA;AAC1B,UAAM,aAAa,GAAG,qCAAsB,IAAtB,CAAtB;;AAEA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,aAAa,CAAC,IAAd,CAAmB,GAAG,KAAK,CAAC,qBAAN,EAAtB;AACD;;AAED,WAAO,aAAP;AACD;;AAEM,EAAA,qBAAqB,CAAC,IAAD,EAAwB;AAClD,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,EAAD,EAAK,KAAL,KAAe,KAAK,CAAC,qBAAN,CAA4B,EAA5B,CAApC,EAAqE,IAArE,CAAP;AACD;;AAEM,EAAA,aAAa,GAAA;AAClB;AACA,WAAO,KAAK,QAAL,CAAc,GAAd,CAAkB,KAAK,IAAG;AAC/B,YAAM,KAAK,GAAG,KAAK,CAAC,aAAN,EAAd;AACA,YAAM,KAAK,GAAG,KAAK,CAAC,kBAAN,EAAd;AACA,YAAM,WAAW,GAAG,KAAK,CAAC,wBAAN,CAA+B,KAA/B,CAApB;AAEA,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,QAAA,IAAI,EAAE,OADR;AAEE,QAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AAFR,OAAA,EAGM,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EAHxB,CAAA,EAIM,KAAK,GAAG;AAAC,QAAA;AAAD,OAAH,GAAa,EAJxB,CAAA,EAKM,WAAW,GAAG;AAAC,QAAA,MAAM,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT;AAAT,OAAH,GAAqC,EALtD,CAAA,EAMK,KAAK,CAAC,aAAN,EANL,CAAA;AAQD,KAbM,CAAP;AAcD;;AAES,EAAA,qBAAqB,GAAA;AAC7B,UAAM,OAAO,GAAG,KAAK,MAAL,CAAY,OAA5B;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,OAAO,IAAI,IAAX,GAAkB;AAAC,MAAA,OAAO,EAAE;AAAV,KAAlB,GAAuC,EAD7C,CAAA,EACgD;AAC9C,MAAA,MAAM,EAAE,MADsC;AAE9C;AACA,MAAA,KAAK,EAAE;AAHuC,KADhD,CAAA;AAMD;;AAnHmC;;;;;;;;;;;ACZtC;;AASA;;AACA;;AACA;;AAEA,SAAS,aAAT,CAAuB,CAAvB,EAA6B;AAC3B,SAAO,CAAC,KAAK,KAAN,IAAe,CAAC,KAAK,IAA5B;AACD;;AASD,MAAM,+BAA+B,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACnC,EAAA,OAAO,EAAE,CAD0B;AAEnC,EAAA,SAAS,EAAE,CAFwB;AAGnC,EAAA,KAAK,EAAE;AAH4B,CAAA,EAIhC,kCAJgC,CAAA,EAIJ;AAC/B,EAAA,SAAS,EAAE,CADoB;AAE/B,EAAA,MAAM,EAAE;AAFuB,CAJI,CAArC;AASO,MAAM,yBAAyB,GAAG,gBAAK,+BAAL,CAAlC;;;AAED,MAAO,aAAP,SAA6B,YAA7B,CAAsD;AAC1D,EAAA,WAAA,CACkB,QAAA,GAAwC,EAD1D,EAEkB,QAAA,GAAwC,EAF1D,EAGS,aAAA,GAAgB,KAHzB,EAG8B;AAE5B;AAJgB,SAAA,QAAA,GAAA,QAAA;AACA,SAAA,QAAA,GAAA,QAAA;AACT,SAAA,aAAA,GAAA,aAAA;AAGR;;AAEM,EAAA,KAAK,GAAA;AACV,WAAO,IAAI,aAAJ,CAAkB,qBAAU,KAAK,QAAf,CAAlB,EAA4C,qBAAU,KAAK,QAAf,CAA5C,EAAsE,KAAK,aAA3E,CAAP;AACD;;AAEM,EAAA,WAAW,CAAC,IAAD,EAAe;AAC/B;AAEA,QAAI,IAAI,KAAK,MAAb,EAAqB;AACnB;AACA,aAAO,IAAP;AACD;;AAED,QAAI,IAAI,KAAK,MAAT,IAAmB,IAAI,KAAK,OAAhC,EAAyC;AACvC,aAAO,CAAC,CAAC,KAAK,GAAL,CAAS,IAAT,CAAT;AACD,KAV8B,CAW/B;;;AACA,WAAO,CAAC,aAAa,CAAC,KAAK,GAAL,CAAS,IAAT,CAAD,CAArB;AACD;;AAEM,EAAA,kBAAkB,GAAA;AACvB,WAAO,uBAAY,KAAK,QAAL,CAAc,MAA1B,CAAP;AACD;;AA9ByD;;;;;;;;;;;ACpC5D;;AACA;;AACA;;AAGM,SAAU,MAAV,CAAiB,KAAjB,EAAmC,OAAnC,EAAkE,mBAAlE,EAA0F;;;AAC9F,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA;AAAX,MAAqB,KAA3B;AAEA,QAAM,eAAe,GAAA,CAAA,EAAA,GACnB,oCAA2B,QAAQ,CAAC,OAAD,CAAnC,CADmB,MAC0B,IAD1B,IAC0B,EAAA,KAAA,KAAA,CAD1B,GAC0B,EAD1B,GAC8B,oCAAmB,QAAQ,CAAC,uCAAyB,OAAzB,CAAD,CAA3B,CADnD;AAEA,QAAM,IAAI,GAAG,KAAK,CAAC,IAAN,CAAW,OAAX,KAAuB,EAApC;AACA,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAuB,IAA7B;;AAEA,MAAI,gCAAmB,UAAnB,CAAJ,EAAoC;AAClC,WAAA,MAAA,CAAA,MAAA,CAAA;AACE,MAAA,IAAI,EAAE,8BAAiB;AACrB,QAAA,eADqB;AAErB,QAAA,KAAK,EAAE,aAFc;AAGrB,QAAA,MAHqB;AAIrB,QAAA,UAJqB;AAKrB,QAAA;AALqB,OAAjB;AADR,KAAA,EAQK,mBARL,CAAA;AAUD;;AAED,SAAO,mBAAP;AACD;;;;;;;;;;AC1BD;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEM,SAAU,aAAV,CAAwB,KAAxB,EAAwC;AAC5C,SAAO,iCAAwB,MAAxB,CAA+B,CAAC,IAAD,EAAO,OAAP,KAAkB;AACtD,QAAI,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,OAAvB,CAAJ,EAAqC;AACnC,MAAA,IAAI,CAAC,OAAD,CAAJ,GAAgB,CAAC,SAAS,CAAC,OAAD,EAAU,KAAV,CAAV,CAAhB;AACD;;AACD,WAAO,IAAP;AACD,GALM,EAKJ,EALI,CAAP;AAMD;;AAED,MAAM,eAAe,GAAmC;AACtD,EAAA,MAAM,EAAE,KAD8C;AAEtD,EAAA,GAAG,EAAE,QAFiD;AAGtD,EAAA,IAAI,EAAE,OAHgD;AAItD,EAAA,KAAK,EAAE;AAJ+C,CAAxD;;AAOM,SAAU,cAAV,CAAyB,KAAzB,EAA0C;;;AAC9C,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,MAAkB,KAAK,CAAC,SAA9B;AACA,QAAM,SAAS,GAA+B;AAAC,IAAA,GAAG,EAAE,CAAN;AAAS,IAAA,MAAM,EAAE,CAAjB;AAAoB,IAAA,KAAK,EAAE,CAA3B;AAA8B,IAAA,IAAI,EAAE;AAApC,GAA9C;;AAEA,OAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,IAAA,KAAK,CAAC,mBAAN;;AAEA,SAAK,MAAM,OAAX,IAAsB,gBAAK,KAAK,CAAC,SAAN,CAAgB,IAArB,CAAtB,EAAkD;AAChD,MAAA,OAAO,CAAC,IAAR,CAAa,OAAb,IAAwB,gCAAkB,KAAK,CAAC,SAAN,CAAgB,OAAlC,EAA2C,OAA3C,CAAxB;;AACA,UAAI,OAAO,CAAC,IAAR,CAAa,OAAb,MAA0B,QAA9B,EAAwC;AACtC;AACA;AAEA,QAAA,IAAI,CAAC,OAAD,CAAJ,GAAgB,mBAAmB,CAAC,IAAI,CAAC,OAAD,CAAL,EAAgB,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAAhB,CAAnC;;AAEA,YAAI,CAAC,IAAI,CAAC,OAAD,CAAT,EAAoB;AAClB;AACA;AACA,UAAA,OAAO,CAAC,IAAR,CAAa,OAAb,IAAwB,aAAxB;AACA,iBAAO,IAAI,CAAC,OAAD,CAAX;AACD;AACF;AACF;AACF,GAvB6C,CAyB9C;;;AACA,OAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,SAAK,MAAM,KAAX,IAAoB,KAAK,CAAC,QAA1B,EAAoC;AAClC,UAAI,CAAC,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAAL,EAAoC;AAClC;AACA;AACD;;AAED,UAAI,OAAO,CAAC,IAAR,CAAa,OAAb,MAA0B,aAA9B,EAA6C;AAC3C;AACA,QAAA,IAAI,CAAC,OAAD,CAAJ,GAAgB,CAAA,CAAA,EAAA,GAAC,IAAI,CAAC,OAAD,CAAL,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAAlB,EAAsB,MAAtB,CAA6B,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAA7B,CAAhB,CAF2C,CAI3C;;AACA,aAAK,MAAM,aAAX,IAA4B,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAA5B,EAA2D;AACzD,gBAAM;AAAC,YAAA,KAAK,EAAE,MAAR;AAAgB,YAAA;AAAhB,cAA4B,aAAa,CAAC,eAAd,CAA8B,QAA9B,CAAlC;;AACA,cAAI,uBAAY,MAAZ,CAAJ,EAAyB;AACvB;AACD;;AAED,cAAI,SAAS,CAAC,MAAD,CAAT,GAAoB,CAApB,IAAyB,CAAC,QAA9B,EAAwC;AACtC;AACA,kBAAM,cAAc,GAAG,eAAe,CAAC,MAAD,CAAtC;;AACA,gBAAI,SAAS,CAAC,MAAD,CAAT,GAAoB,SAAS,CAAC,cAAD,CAAjC,EAAmD;AACjD,cAAA,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA4B,cAA5B,EAA4C,KAA5C;AACD;AACF;;AACD,UAAA,SAAS,CAAC,MAAD,CAAT,GAbyD,CAezD;AACD;AACF,OA5BiC,CA8BlC;;;AACA,aAAO,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,OAArB,CAAP;AACD,KAjC4C,CAmC7C;;;AACA,QAAI,OAAO,CAAC,IAAR,CAAa,OAAb,MAA0B,aAA1B,IAA2C,IAAI,CAAC,OAAD,CAA/C,IAA4D,IAAI,CAAC,OAAD,CAAJ,CAAc,MAAd,GAAuB,CAAvF,EAA0F;AACxF,WAAK,MAAM,QAAX,IAAuB,IAAI,CAAC,OAAD,CAA3B,EAAsC;AACpC,YAAI,CAAC,CAAC,QAAQ,CAAC,GAAT,CAAa,MAAb,CAAF,IAA0B,CAAC,QAAQ,CAAC,QAAT,CAAkB,IAAjD,EAAuD;AACrD,UAAA,QAAQ,CAAC,QAAT,CAAkB,IAAlB,GAAyB,KAAzB;AACD;AACF;AACF;AACF;AACF;;AAED,SAAS,mBAAT,CACE,eADF,EAEE,cAFF,EAE0C;AAExC,MAAI,eAAJ,EAAqB;AACnB;AACA,QAAI,eAAe,CAAC,MAAhB,KAA2B,cAAc,CAAC,MAA9C,EAAsD;AACpD,aAAO,SAAP,CADoD,CAClC;AACnB;;AACD,UAAM,MAAM,GAAG,eAAe,CAAC,MAA/B;;AACA,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,MAApB,EAA4B,CAAC,EAA7B,EAAiC;AAC/B,YAAM,MAAM,GAAG,eAAe,CAAC,CAAD,CAA9B;AACA,YAAM,KAAK,GAAG,cAAc,CAAC,CAAD,CAA5B;;AAEA,UAAI,CAAC,CAAC,MAAF,KAAa,CAAC,CAAC,KAAnB,EAA0B;AACxB,eAAO,SAAP;AACD,OAFD,MAEO,IAAI,MAAM,IAAI,KAAd,EAAqB;AAC1B,cAAM,YAAY,GAAG,MAAM,CAAC,eAAP,CAAuB,QAAvB,CAArB;AACA,cAAM,WAAW,GAAG,KAAK,CAAC,eAAN,CAAsB,QAAtB,CAApB;;AAEA,YAAI,YAAY,CAAC,QAAb,IAAyB,WAAW,CAAC,QAArC,IAAiD,YAAY,CAAC,KAAb,KAAuB,WAAW,CAAC,KAAxF,EAA+F;AAC7F;AAEA;AACA,iBAAO,SAAP;AACD,SALD,MAKO;AACL,UAAA,eAAe,CAAC,CAAD,CAAf,GAAqB,kBAAkB,CAAC,MAAD,EAAS,KAAT,CAAvC;AACD;AACF;AACF;AACF,GA1BD,MA0BO;AACL;AACA,WAAO,cAAc,CAAC,GAAf,CAAmB,aAAa,IAAI,aAAa,CAAC,KAAd,EAApC,CAAP;AACD;;AACD,SAAO,eAAP;AACD;;AAED,SAAS,kBAAT,CAA4B,MAA5B,EAAmD,KAAnD,EAAuE;AACrE,OAAK,MAAM,IAAX,IAAmB,oCAAnB,EAA8C;AAC5C,UAAM,uBAAuB,GAAG,oCAC9B,MAAM,CAAC,eAAP,CAAuB,IAAvB,CAD8B,EAE9B,KAAK,CAAC,eAAN,CAAsB,IAAtB,CAF8B,EAG9B,IAH8B,EAI9B,MAJ8B,EAM9B;AACA,KAAC,EAAD,EAAoB,EAApB,KAAyC;AACvC,cAAQ,IAAR;AACE,aAAK,OAAL;AACE,iBAAO,iCAAoB,EAApB,EAAwB,EAAxB,CAAP;;AACF,aAAK,WAAL;AACE,iBAAO;AACL,YAAA,QAAQ,EAAE,EAAE,CAAC,QADR;AAEL,YAAA,KAAK,EAAE,2BAAgB,EAAE,CAAC,KAAnB,EAA0B,EAAE,CAAC,KAA7B;AAFF,WAAP;AAJJ;;AASA,aAAO,8BAA2C,EAA3C,EAA+C,EAA/C,EAAmD,IAAnD,EAAyD,MAAzD,CAAP;AACD,KAlB6B,CAAhC;AAoBA,IAAA,MAAM,CAAC,eAAP,CAAuB,IAAvB,EAA6B,uBAA7B;AACD;;AACD,SAAO,MAAP;AACD;;AAED,SAAS,UAAT,CACE,KADF,EAEE,QAFF,EAGE,IAHF,EAIE,KAJF,EAKE,OALF,EAK+B;AAE7B,MAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B,WAAO,IAAI,KAAK,SAAhB,CAD0B,CACC;AAC5B;;AAED,EAAA,IAAI,GAAG,IAAI,IAAI,EAAf;;AAEA,UAAQ,QAAR;AACE,SAAK,YAAL;AACA,SAAK,YAAL;AACE,aAAO,KAAK,MAAM,uBAAY,IAAI,CAAC,UAAjB,IAA+B,IAAI,CAAC,UAApC,GAAiD,0BAAe,IAAI,CAAC,UAApB,CAAvD,CAAZ;;AACF,SAAK,QAAL;AACE,aAAO,CAAC,CAAC,IAAI,CAAC,MAAd;AACF;;AACA,SAAK,QAAL;AACE;AACA,aAAO,CAAC,CAAC,IAAI,CAAC,QAAP,IAAmB,CAAC,CAAC,IAAI,CAAC,UAAjC;;AACF,SAAK,OAAL;AACE;AACA,UAAI,KAAK,KAAK,kCAAiB,KAAjB,EAAwB,OAAxB,CAAd,EAAgD;AAC9C,eAAO,IAAP;AACD;;AAdL,GAR6B,CAwB7B;;;AACA,SAAO,KAAK,KAAK,IAAI,CAAC,QAAD,CAArB;AACD;AAED;;;;;AAGA,MAAM,0BAA0B,GAAG,IAAI,GAAJ,CAAQ,CACzC,MADyC,EAEzC,WAFyC,EAGzC;AACA,QAJyC,EAKzC,YALyC,EAMzC,QANyC,EAOzC,WAPyC,EAQzC,WARyC,EASzC,UATyC,EAUzC,aAVyC,CAAR,CAAnC;;AAaA,SAAS,SAAT,CAAmB,OAAnB,EAAkD,KAAlD,EAAkE;;;AAChE,MAAI,IAAI,GAAG,KAAK,CAAC,IAAN,CAAW,OAAX,CAAX;AAEA,QAAM,aAAa,GAAG,IAAI,wBAAJ,EAAtB;AAEA,QAAM,eAAe,GAAG,oCAAmB,KAAK,CAAC,QAAN,CAAe,OAAf,CAAnB,CAAxB;AAIA,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA;AAAP,MAAiB,KAAvB;AAEA,QAAM,MAAM,GACV,CAAA,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,MAAN,MAAY,CAAA,EAAA,GACZ,MAAM,CAAC,OAAO,KAAK,GAAZ,GAAkB,OAAlB,GAA4B,OAA7B,CADM,MAC+B,IAD/B,IAC+B,EAAA,KAAA,KAAA,CAD/B,GAC+B,KAAA,CAD/B,GAC+B,EAAA,CAAE,MAD7C,MACmD,CAAA,EAAA,GACnD,MAAM,CAAC,IAD4C,MACxC,IADwC,IACxC,EAAA,KAAA,KAAA,CADwC,GACxC,KAAA,CADwC,GACxC,EAAA,CAAE,MAFb,KAGA,+BAAc,OAAd,CAJF;AAMA,QAAM,SAAS,GAAG,KAAK,CAAC,iBAAN,CAAwB,OAAxB,EAAiC,GAAjC,CAAqC,MAArC,CAAlB;AAEA,QAAM,WAAW,GAAG,4BAAe,OAAf,EAAwB,SAAxB,EAAmC,MAAnC,EAA2C,KAAK,CAAC,MAAjD,CAApB;AAEA,QAAM,OAAO,GAAG,IAAI,KAAK,SAAT,GAAqB,CAAC,IAAtB,GAA6B,2BAAc,SAAd,EAAyB,MAAzB,EAAiC,IAAI,KAAA,IAAJ,IAAA,IAAI,KAAA,KAAA,CAAJ,GAAI,KAAA,CAAJ,GAAA,IAAI,CAAE,KAAvC,EAA8C,WAA9C,EAA2D,WAAxG;AACA,EAAA,aAAa,CAAC,GAAd,CAAkB,SAAlB,EAA6B,OAA7B,EAAsC,IAAI,KAAK,SAA/C;;AACA,MAAI,OAAJ,EAAa;AACX,WAAO,aAAP;AACD;;AAED,EAAA,IAAI,GAAG,IAAI,IAAI,EAAf;AAEA,QAAM,UAAU,GAAG,+BAAc,KAAd,EAAqB,IAArB,EAA2B,OAA3B,EAAoC,eAApC,EAAqD,WAArD,CAAnB;AAEA,QAAM,UAAU,GAAmB;AACjC,IAAA,eADiC;AAEjC,IAAA,IAFiC;AAGjC,IAAA,OAHiC;AAIjC,IAAA,KAJiC;AAKjC,IAAA,SALiC;AAMjC,IAAA,MANiC;AAOjC,IAAA,UAPiC;AAQjC,IAAA,IARiC;AASjC,IAAA;AATiC,GAAnC,CA/BgE,CA0ChE;;AACA,OAAK,MAAM,QAAX,IAAuB,oCAAvB,EAAkD;AAChD,UAAM,KAAK,GACT,QAAQ,IAAI,qBAAZ,GAAwB,sBAAU,QAAV,EAAoB,UAApB,CAAxB,GAA0D,0BAAe,QAAf,IAA2B,IAAI,CAAC,QAAD,CAA/B,GAA4C,SADxG;AAGA,UAAM,QAAQ,GAAG,KAAK,KAAK,SAA3B;AAEA,UAAM,QAAQ,GAAG,UAAU,CAAC,KAAD,EAAQ,QAAR,EAAkB,IAAlB,EAAwB,KAAxB,EAA+B,OAA/B,CAA3B;;AAEA,QAAI,QAAQ,IAAI,QAAhB,EAA0B;AACxB,MAAA,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA4B,KAA5B,EAAmC,QAAnC;AACD,KAFD,MAEO;AACL,YAAM;AAAC,QAAA,WAAW,GAAG,SAAf;AAA0B,QAAA,UAAU,GAAG;AAAvC,UACJ,0BAAe,QAAf,KAA4B,QAAQ,KAAK,QAAzC,GACI,2BAAc,QAAd,EAAwB,KAAK,CAAC,MAA9B,EAAsC,IAAI,CAAC,KAA3C,EAAkD,WAAlD,CADJ,GAEI,EAHN;AAIA,YAAM,cAAc,GAAG,WAAW,KAAK,SAAvC;;AAEA,UAAI,QAAQ,IAAI,CAAC,cAAjB,EAAiC;AAC/B;AACA,QAAA,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA4B,KAA5B,EAAmC,QAAnC;AACD,OAHD,MAGO,KACL;AACA;AACA,QAAE,UAAU,KAAK,cAAjB,KACA;AACC,MAAA,0BAA0B,CAAC,GAA3B,CAA+B,QAA/B,KAA4C,cAF7C,IAGA;AACA,wCAA4B,WAA5B,CAJA,IAI4C;AAC5C,6BAAY,WAAZ,CARK,EASL;AACA;AACA,QAAA,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA4B,WAA5B,EAAyC,KAAzC;AACD;AACF;AACF,GA7E+D,CA+EhE;;;AACA,QAAM,YAAY,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,QAAR,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,EAAtC;;AACA,QAAM,UAAU,GAAG,iBAAW,MAAX,CAAkB,CAAC,CAAD,EAAkB,IAAlB,KAA0B;;;AAC7D,QAAI,CAAC,aAAa,CAAC,WAAd,CAA0B,IAA1B,CAAL,EAAsC;AACpC;AACA,aAAO,CAAP;AACD;;AAED,UAAM,gBAAgB,GAAG,6BAAgB,CAAA,EAAA,GAAC,YAAY,CAAC,IAAD,CAAb,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAAvC,EAA2C,KAA3C,CAAzB;AAEA,UAAM,KAAK,GAAG,IAAI,KAAK,QAAT,GAAoB,MAAM,CAAC,MAAP,CAAc,KAAd,EAAqB,OAArB,EAA8B,gBAA9B,CAApB,GAAsE,gBAApF;;AAEA,QAAI,KAAK,KAAK,SAAV,IAAuB,CAAC,mBAAQ,KAAR,CAA5B,EAA4C;AAC1C,MAAA,CAAC,CAAC,IAAD,CAAD,GAAU;AAAC,QAAA,MAAM,EAAE;AAAT,OAAV;AACD;;AACD,WAAO,CAAP;AACD,GAdkB,EAchB,EAdgB,CAAnB,CAjFgE,CAiGhE;;;AACA,MAAI,CAAC,mBAAQ,UAAR,CAAL,EAA0B;AACxB,IAAA,aAAa,CAAC,GAAd,CAAkB,QAAlB,EAA4B,UAA5B,EAAwC,CAAC,CAAC,IAAI,CAAC,QAAP,IAAmB,IAAI,CAAC,UAAL,KAAoB,SAA/E;AACD;;AAED,SAAO,aAAP;AACD;;;;;;;;;ACjUD;;AACA;;AAEA;;AACA;;;;;;AAEM,SAAU,cAAV,CAAyB;AAAC,EAAA,QAAD;AAAW,EAAA;AAAX,CAAzB,EAA+F;AACnG,OAAK,MAAM,OAAX,IAAsB,gCAAtB,EAA+C;AAC7C,UAAM,QAAQ,GAAG,6BAAe,OAAf,CAAjB;;AACA,QAAI,kBAAO,IAAI,CAAC,QAAD,CAAX,CAAJ,EAA4B;AAC1B,UAAI,6CAA4B,QAAQ,CAAC,OAAD,CAApC,CAAJ,EAAoD;AAClD,eAAO,IAAI,CAAC,QAAD,CAAX;AACA,QAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,QAAxB,CAAT;AACD;AACF;AACF;;AAED,SAAO,IAAP;AACD;;;;;;;;;ACjBD;;AACA;;AAEA;;AACA;;AACA;;AAiBA;;AACA;;AACA;;;;;;AAEM,SAAU,WAAV,CACJ,IADI,EAEJ,QAFI,EAGJ,MAHI,EAIJ;AAAC,EAAA;AAAD,CAJI,EAI6B;AAEjC,QAAM,OAAO,GAAY,qBAAU,IAAV,IAAiB,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,IAAL,CAAjB,GAA8B;AAAC,IAAA,IAAI,EAAE;AAAP,GAAvD,CAFiC,CAIjC;;AACA,QAAM,eAAe,GAAG,iCAAoB,QAApB,EAA8B,OAA9B,EAAuC,MAAvC,CAAxB;AACA,EAAA,OAAO,CAAC,MAAR,GAAiB,MAAM,CAAC,OAAO,CAAC,IAAT,EAAe,QAAf,EAAyB,eAAzB,CAAvB;;AACA,MAAI,eAAe,KAAK,SAApB,IAAiC,eAAe,KAAK,OAAO,CAAC,MAAjE,EAAyE;AACvE,IAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,gBAAZ,CAA6B,OAAO,CAAC,MAArC,EAA6C,eAA7C,CAAT;AACD;;AAED,MAAI,OAAO,CAAC,IAAR,KAAiB,KAAjB,IAA0B,OAAO,CAAC,MAAtC,EAA8C;AAC5C,UAAM,eAAe,GAAG,iCAAoB,iBAApB,EAAuC,OAAvC,EAAgD,MAAhD,CAAxB;;AACA,QAAI,eAAe,KAAK,SAAxB,EAAmC;AACjC,YAAM,QAAQ,GACX,OAAO,CAAC,MAAR,KAAmB,YAAnB,IAAmC,QAAQ,CAAC,EAA7C,IAAqD,OAAO,CAAC,MAAR,KAAmB,UAAnB,IAAiC,QAAQ,CAAC,EAA/F,GACI,CAAC,cAAD,CADJ,GAEI,8BAA4B,OAAO,CAAC,MAApC,CAHN;;AAKA,WAAK,MAAM,OAAX,IAAsB,QAAtB,EAAgC;AAC9B,QAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,eAAnB;AACD;;AAED,UAAI,OAAO,CAAC,eAAR,KAA4B,SAAhC,EAA2C;AACzC,eAAO,OAAO,CAAC,eAAf,CADyC,CACT;AACjC;AACF;AACF,GA3BgC,CA6BjC;;;AACA,QAAM,gBAAgB,GAAG,iCAAoB,SAApB,EAA+B,OAA/B,EAAwC,MAAxC,CAAzB;;AACA,MAAI,gBAAgB,KAAK,SAAzB,EAAoC;AAClC,IAAA,OAAO,CAAC,OAAR,GAAkB,OAAO,CAAC,OAAO,CAAC,IAAT,EAAe,QAAf,CAAzB;AACD;;AAED,QAAM,eAAe,GAAG,OAAO,CAAC,MAAhC;;AACA,MAAI,eAAe,KAAK,SAAxB,EAAmC;AACjC,IAAA,OAAO,CAAC,MAAR,GAAiB,SAAS,GAAG,KAAH,GAAW,MAAM,CAAC,OAAD,EAAU,MAAV,CAA3C;AACD,GAtCgC,CAwCjC;;;AACA,QAAM,eAAe,GAAG,iCAAoB,QAApB,EAA8B,OAA9B,EAAuC,MAAvC,CAAxB;;AACA,MAAI,eAAe,KAAK,SAAxB,EAAmC;AACjC,IAAA,OAAO,CAAC,MAAR,GAAiB,MAAM,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,CAAvB;AACD;;AAED,SAAO,OAAP;AACD;;AAED,SAAS,MAAT,CAAgB,OAAhB,EAAkC,QAAlC,EAA8D,MAA9D,EAA4E;AAC1E,MAAI,QAAQ,CAAC,IAAT,IAAiB,OAAO,CAAC,IAAzB,IAAiC,iCAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,CAArC,EAAmF;AACjF,WAAO,SAAP;AACD;;AACD,SAAO,OAAO,CAAC,MAAf;AACD;;AAED,SAAS,OAAT,CAAiB,IAAjB,EAA6B,QAA7B,EAAuD;AACrD,MAAI,oBAAS,CAAC,WAAD,EAAQ,UAAR,EAAc,YAAd,EAAsB,YAAtB,CAAT,EAAwC,IAAxC,CAAJ,EAAmD;AACjD;AACA,QAAI,CAAC,2BAAY,QAAZ,CAAL,EAA4B;AAC1B,aAAO,GAAP;AACD;AACF;;AACD,SAAO,SAAP;AACD;;AAED,SAAS,MAAT,CAAgB,OAAhB,EAAkC,MAAlC,EAAgD;AAC9C,QAAM,YAAY,GAAG,2BAAc,QAAd,EAAwB,OAAxB,EAAiC,MAAjC,CAArB;AACA,QAAM,IAAI,GAAG,OAAO,CAAC,IAArB;AACA,SAAO,2BAAgB,YAAhB,EAA8B,IAAI,KAAK,WAAT,IAAkB,IAAI,KAAK,UAA3B,IAAmC,IAAI,KAAK,UAA1E,CAAP;AACD;;AAED,SAAS,MAAT,CAAgB,IAAhB,EAA4B,QAA5B,EAAwD,eAAxD,EAAoF;AAClF,UAAQ,IAAR;AACE,SAAK,WAAL;AACA,SAAK,YAAL;AACA,SAAK,YAAL;AACA,SAAK,UAAL;AACA,SAAK,UAAL;AACA,SAAK,WAAL;AACE;AACA,aAAO,SAAP;AARJ;;AAWA,QAAM;AAAC,IAAA,CAAD;AAAI,IAAA,CAAJ;AAAO,IAAA,EAAP;AAAW,IAAA;AAAX,MAAiB,QAAvB;;AAEA,UAAQ,IAAR;AACE,SAAK,SAAL;AACE,UAAI,4BAAW,CAAX,MAAkB,mBAAS,CAAC,CAAC,GAAX,KAAoB,4BAAW,CAAX,KAAiB,CAAC,CAAC,SAAnB,IAAgC,CAAC,CAAC,CAAC,SAAzE,CAAJ,EAA0F;AACxF,eAAO,UAAP;AACD;;AACD,UAAI,4BAAW,CAAX,MAAkB,mBAAS,CAAC,CAAC,GAAX,KAAoB,4BAAW,CAAX,KAAiB,CAAC,CAAC,SAAnB,IAAgC,CAAC,CAAC,CAAC,SAAzE,CAAJ,EAA0F;AACxF,eAAO,YAAP;AACD;;AACD,UAAI,EAAE,IAAI,EAAV,EAAc;AACZ;AACA,YAAI,eAAJ,EAAqB;AACnB,iBAAO,eAAP;AACD,SAJW,CAMZ;;;AACA,YAAI,CAAC,EAAL,EAAS;AACP,cAAK,4BAAW,CAAX,KAAiB,CAAC,CAAC,IAAF,KAAW,kBAA5B,IAA4C,CAAC,oBAAU,CAAC,CAAC,GAAZ,CAA9C,IAAmE,kCAAiB,CAAjB,CAAvE,EAA4F;AAC1F,mBAAO,YAAP;AACD;AACF,SAXW,CAaZ;;;AACA,YAAI,CAAC,EAAL,EAAS;AACP,cAAK,4BAAW,CAAX,KAAiB,CAAC,CAAC,IAAF,KAAW,kBAA5B,IAA4C,CAAC,oBAAU,CAAC,CAAC,GAAZ,CAA9C,IAAmE,kCAAiB,CAAjB,CAAvE,EAA4F;AAC1F,mBAAO,UAAP;AACD;AACF;AACF;;AAEH;;AACA,SAAK,UAAL;AACE;AACA;AACA,UAAI,EAAE,IAAI,EAAE,4BAAW,CAAX,KAAiB,mBAAS,CAAC,CAAC,GAAX,CAAnB,CAAN,IAA6C,EAA7C,IAAmD,EAAE,4BAAW,CAAX,KAAiB,mBAAS,CAAC,CAAC,GAAX,CAAnB,CAAvD,EAA4F;AAC1F,eAAO,SAAP;AACD;;AAEH;;AACA,SAAK,UAAL;AACE;AACA,UAAI,EAAJ,EAAQ;AACN,YAAI,4BAAW,CAAX,KAAiB,mBAAS,CAAC,CAAC,GAAX,CAArB,EAAsC;AACpC,iBAAO,YAAP;AACD,SAFD,MAEO;AACL,iBAAO,UAAP;AACD;AACF,OAND,MAMO,IAAI,EAAJ,EAAQ;AACb,YAAI,4BAAW,CAAX,KAAiB,mBAAS,CAAC,CAAC,GAAX,CAArB,EAAsC;AACpC,iBAAO,UAAP;AACD,SAFD,MAEO;AACL,iBAAO,YAAP;AACD;AACF,OANM,MAMA,IAAI,IAAI,KAAK,UAAb,EAAmB;AACxB,YAAI,CAAC,IAAI,CAAC,CAAV,EAAa;AACX,iBAAO,UAAP;AACD,SAFD,MAEO,IAAI,CAAC,IAAI,CAAC,CAAV,EAAa;AAClB,iBAAO,YAAP;AACD;AACF;;AAEH;;AACA,SAAK,UAAL;AACA,SAAK,UAAL;AAAW;AACT;AACA,cAAM,aAAa,GAAG,6CAA4B,CAA5B,CAAtB;AACA,cAAM,aAAa,GAAG,6CAA4B,CAA5B,CAAtB;;AACA,YAAI,aAAa,IAAI,CAAC,aAAtB,EAAqC;AACnC,iBAAO,IAAI,KAAK,MAAT,GAAkB,YAAlB,GAAiC,UAAxC;AACD,SAFD,MAEO,IAAI,CAAC,aAAD,IAAkB,aAAtB,EAAqC;AAC1C,iBAAO,IAAI,KAAK,MAAT,GAAkB,UAAlB,GAA+B,YAAtC;AACD,SAFM,MAEA,IAAI,aAAa,IAAI,aAArB,EAAoC;AACzC,gBAAM,IAAI,GAAG,CAAb,CADyC,CACA;;AACzC,gBAAM,IAAI,GAAG,CAAb;AAEA,gBAAM,WAAW,GAAG,IAAI,CAAC,IAAL,KAAc,cAAlC;AACA,gBAAM,WAAW,GAAG,IAAI,CAAC,IAAL,KAAc,cAAlC,CALyC,CAOzC;;AACA,cAAI,WAAW,IAAI,CAAC,WAApB,EAAiC;AAC/B,mBAAO,IAAI,KAAK,MAAT,GAAkB,UAAlB,GAA+B,YAAtC;AACD,WAFD,MAEO,IAAI,CAAC,WAAD,IAAgB,WAApB,EAAiC;AACtC,mBAAO,IAAI,KAAK,MAAT,GAAkB,YAAlB,GAAiC,UAAxC;AACD;;AAED,cAAI,CAAC,IAAI,CAAC,SAAN,IAAmB,IAAI,CAAC,SAA5B,EAAuC;AACrC,mBAAO,IAAI,KAAK,MAAT,GAAkB,UAAlB,GAA+B,YAAtC;AACD,WAFD,MAEO,IAAI,IAAI,CAAC,SAAL,IAAkB,CAAC,IAAI,CAAC,SAA5B,EAAuC;AAC5C,mBAAO,IAAI,KAAK,MAAT,GAAkB,YAAlB,GAAiC,UAAxC;AACD;;AAED,cAAI,eAAJ,EAAqB;AACnB;AACA,mBAAO,eAAP;AACD;;AAED,iBAAO,UAAP;AACD,SA1BM,MA0BA;AACL;AACA,cAAI,eAAJ,EAAqB;AACnB;AACA,mBAAO,eAAP;AACD;;AAED,iBAAO,SAAP;AACD;AACF;AAzGH;;AA2GA,SAAO,UAAP;AACD;;;;;;;;;AC/ND;;;;;;AAEO,MAAM,GAAG,GAAiB;AAC/B,EAAA,MAAM,EAAE,KADuB;AAE/B,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,IAAI,EAAE,QAJyB;AAK/B,MAAA,MAAM,EAAE,QALuB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CATL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CAVL,CAAA,EAaK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,QAA3B,EAAqC,KAArC,CAbL,CAAA,EAcK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,OAA3B,EAAoC,KAApC,CAdL,CAAA;AAgBD;AAnB8B,CAA1B;;;;;;;;;;ACFP;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAEhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,MAAM,EAAE,SAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,oBAAP,CAA4B,GAA5B,EAAiC,KAAjC,EAAwC;AACzC,MAAA,UAAU,EAAE,WAD6B;AAEzC,MAAA,WAAW,EAAE,WAF4B;AAGzC,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,MAAd,KAAyB;AAHS,KAAxC,CATL,CAAA,EAcK,MAAM,CAAC,oBAAP,CAA4B,GAA5B,EAAiC,KAAjC,EAAwC;AACzC,MAAA,UAAU,EAAE,WAD6B;AAEzC,MAAA,WAAW,EAAE,WAF4B;AAGzC,MAAA,KAAK,EAAE,KAAK,CAAC,OAAN,CAAc,MAAd,KAAyB;AAHS,KAAxC,CAdL,CAAA,EAmBK,MAAM,CAAC,OAAP,CAAe,KAAf,CAnBL,CAAA;AAqBD;AAxB+B,CAA3B;;;;;;;;;;ACFP;;;;;;AAEO,MAAM,GAAG,GAAiB;AAC/B,EAAA,MAAM,EAAE,MADuB;AAE/B,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,MAAM,EAAE,QAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,KAAhC,CATL,CAAA,EAUK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,KAAhC,CAVL,CAAA;AAYD;AAf8B,CAA1B;;;;;;;;;;ACHP;;AACA;;AAIA;;;;;;AAEO,MAAM,QAAQ,GAAiB;AACpC,EAAA,MAAM,EAAE,OAD4B;AAEpC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,IAAI,EAAE,QAJyB;AAK/B,MAAA,MAAM,EAAE,QALuB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA;AAUD,GAbmC;AAcpC,EAAA,qBAAqB,EAAG,KAAD,IAAgD;AACrE,UAAM;AAAC,MAAA;AAAD,QAAa,KAAnB;AACA,UAAM,QAAQ,GAAG,QAAQ,CAAC,KAA1B;AAEA,UAAM,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA;AACb,MAAA,IAAI,EAAE,UADO;AAEb,MAAA,UAAU,EAAE,KAAK,CAAC,cAAN;AAFC,KAAA,EAIT,QAAQ,IAAI,4BAAW,QAAX,CAAZ,IAAoC,QAAQ,CAAC,IAAT,KAAkB,aAAtD,GACA;AAAC,MAAA,KAAK,EAAE,yBAAQ,QAAR,EAAkB;AAAC,QAAA,IAAI,EAAE;AAAP,OAAlB;AAAR,KADA,GAEA,EANS,CAAf;AAQA,WAAO,CAAC,SAAD,CAAP;AACD;AA3BmC,CAA/B;;;;;;;;;;ACNP;;;;;;AAEO,MAAM,KAAK,GAAiB;AACjC,EAAA,MAAM,EAAE,OADyB;AAEjC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,QAHwB;AAI/B,MAAA,MAAM,EAAE,QAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,OAAhC,CATL,CAAA,EAUK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,OAAhC,CAVL,CAAA,EAWK,MAAM,CAAC,IAAP,CAAY,KAAZ,EAAmB,KAAnB,CAXL,CAAA;AAaD;AAhBgC,CAA5B;;;;;;;;;;ACFP;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAEhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,IAAI,EAAE,QAJyB;AAK/B,MAAA,MAAM,EAAE,QALuB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CATL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CAVL,CAAA,EAWK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,EAAkC;AACnC,MAAA,SAAS,EAAE,aADwB,CACV;;AADU,KAAlC,CAXL,CAAA,EAcK,MAAM,CAAC,OAAP,CAAe,KAAf,CAdL,CAAA;AAgBD;AAnB+B,CAA3B;;AAsBA,MAAM,KAAK,GAAiB;AACjC,EAAA,MAAM,EAAE,OADyB;AAEjC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,IAAI,EAAE,SAJyB;AAK/B,MAAA,MAAM,EAAE,QALuB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CATL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CAVL,CAAA,EAWK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,CAXL,CAAA,EAYK,MAAM,CAAC,OAAP,CAAe,KAAf,CAZL,CAAA;AAcD;AAjBgC,CAA5B;;;;;;;;;;;ACtBP;;;;;;AAEA,SAAS,WAAT,CAAqB,KAArB,EAAuC,UAAvC,EAAuE;AACrE,QAAM;AAAC,IAAA;AAAD,MAAW,KAAjB;AAEA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,IAAA,KAAK,EAAE,QADwB;AAE/B,IAAA,QAAQ,EAAE,QAFqB;AAG/B,IAAA,KAAK,EAAE,SAHwB;AAI/B,IAAA,IAAI,EAAE,SAJyB;AAK/B,IAAA,MAAM,EAAE,QALuB;AAM/B,IAAA,KAAK,EAAE;AANwB,GAA9B,CADL,CAAA,EASK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,IAAA,UAAU,EAAE;AAAb,GAAjC,CATL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,IAAA,UAAU,EAAE;AAAb,GAAjC,CAVL,CAAA,EAWK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,CAXL,CAAA,EAYK,MAAM,CAAC,WAAP,CAAmB,OAAnB,EAA4B,KAA5B,CAZL,CAAA,EAaK,WAAW,CAAC,KAAD,EAAQ,MAAR,EAAgB,UAAhB,CAbhB,CAAA;AAeD;;AAEK,SAAU,WAAV,CAAsB,KAAtB,EAAwC,MAAxC,EAAwD,UAAxD,EAAwF;AAC5F,MAAI,UAAJ,EAAgB;AACd,WAAO;AAAC,MAAA,KAAK,EAAE;AAAC,QAAA,KAAK,EAAE;AAAR;AAAR,KAAP;AACD;;AACD,SAAO,MAAM,CAAC,WAAP,CAAmB,OAAnB,EAA4B,KAA5B,CAAP;AACD;;AAEM,MAAM,KAAK,GAAiB;AACjC,EAAA,MAAM,EAAE,QADyB;AAEjC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAO,WAAW,CAAC,KAAD,CAAlB;AACD;AAJgC,CAA5B;;AAOA,MAAM,MAAM,GAAiB;AAClC,EAAA,MAAM,EAAE,QAD0B;AAElC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAO,WAAW,CAAC,KAAD,EAAQ,QAAR,CAAlB;AACD;AAJiC,CAA7B;;AAOA,MAAM,MAAM,GAAiB;AAClC,EAAA,MAAM,EAAE,QAD0B;AAElC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAO,WAAW,CAAC,KAAD,EAAQ,QAAR,CAAlB;AACD;AAJiC,CAA7B;;;;;;;;;;AC7CP;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAEhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,MAAM,EAAE,QAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,MAAhC,CATL,CAAA,EAUK,MAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,GAA3B,EAAgC,MAAhC,CAVL,CAAA;AAYD;AAf+B,CAA3B;;;;;;;;;;ACFP;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAEhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,UAAM;AAAC,MAAA;AAAD,QAAY,KAAlB;AACA,UAAM,MAAM,GAAG,OAAO,CAAC,MAAvB;;AAEA,QAAI,CAAC,KAAK,CAAC,QAAN,CAAe,CAAhB,IAAqB,CAAC,KAAK,CAAC,QAAN,CAAe,CAArC,IAA0C,CAAC,KAAK,CAAC,QAAN,CAAe,QAA1D,IAAsE,CAAC,KAAK,CAAC,QAAN,CAAe,SAA1F,EAAqG;AACnG;AACA,aAAO,EAAP;AACD;;AAED,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,MAAM,EAAE,QAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,oBAAP,CAA4B,GAA5B,EAAiC,KAAjC,EAAwC;AACzC,MAAA,UAAU,EAAE,MAAM,KAAK,YAAX,GAA0B,WAA1B,GAAwC,KADX;AAEzC,MAAA,WAAW,EAAE,WAF4B;AAGzC,MAAA,KAAK,EAAE,MAAM,KAAK,UAHuB,CAGZ;;AAHY,KAAxC,CATL,CAAA,EAcK,MAAM,CAAC,oBAAP,CAA4B,GAA5B,EAAiC,KAAjC,EAAwC;AACzC,MAAA,UAAU,EAAE,MAAM,KAAK,UAAX,GAAwB,WAAxB,GAAsC,KADT;AAEzC,MAAA,WAAW,EAAE,WAF4B;AAGzC,MAAA,KAAK,EAAE,MAAM,KAAK,YAHuB,CAGV;;AAHU,KAAxC,CAdL,CAAA,EAmBK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,EAAkC;AACnC,MAAA,SAAS,EAAE,aADwB,CACV;;AADU,KAAlC,CAnBL,CAAA;AAuBD;AAlC+B,CAA3B;;;;;;;;;;ACDP;;AAGA;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAGhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAqB,KAA3B;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,SADwB;AAE/B,MAAA,QAAQ,EAAE,SAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,IAAI,EAAE,QAJyB;AAK/B,MAAA,MAAM,EAAE,QALuB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EASK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CATL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE;AAAb,KAAjC,CAVL,CAAA,EAWK,MAAM,CAAC,IAAP,CAAY,KAAZ,CAXL,CAAA,EAYK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,EAAkC;AACnC,MAAA,SAAS,EAAE,UADwB,CACb;;AADa,KAAlC,CAZL,CAAA,EAeK,MAAM,CAAC,WAAP,CAAmB,OAAnB,EAA4B,KAA5B,CAfL,CAAA,EAgBK,MAAM,CAAC,cAAP,CAAsB,OAAtB,EAA+B,KAAK,CAAC,KAAK,CAAC,OAAP,EAAgB,QAAhB,EAA0B,MAA1B,CAApC,CAhBL,CAAA,EAiBK,MAAM,CAAC,cAAP,CAAsB,UAAtB,EAAkC,QAAQ,CAAC,KAAK,CAAC,OAAP,EAAgB,QAAhB,EAA0B,MAA1B,CAA1C,CAjBL,CAAA,EAkBK,MAAM,CAAC,aAAP,CAAqB,QAArB,EAA+B,KAA/B,EAAsC;AAAC,MAAA,UAAU,EAAE,IAAb;AAAmB,MAAA,UAAU,EAAE;AAA/B,KAAtC,CAlBL,CAAA,EAmBK,MAAM,CAAC,aAAP,CAAqB,OAArB,EAA8B,KAA9B,EAAqC;AAAC,MAAA,UAAU,EAAE,IAAb;AAAmB,MAAA,UAAU,EAAE;AAA/B,KAArC,CAnBL,CAAA;AAqBD;AA3B+B,CAA3B;;;AA8BP,SAAS,KAAT,CAAe,OAAf,EAAiC,QAAjC,EAA6D,MAA7D,EAA2E;AACzE,QAAM,CAAC,GAAG,iCAAoB,OAApB,EAA6B,OAA7B,EAAsC,MAAtC,CAAV;;AACA,MAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,WAAO,QAAP;AACD,GAJwE,CAKzE;;;AACA,SAAO,SAAP;AACD;;AAED,SAAS,QAAT,CAAkB,OAAlB,EAAoC,QAApC,EAAgE,MAAhE,EAA8E;AAC5E,QAAM,CAAC,GAAG,iCAAoB,UAApB,EAAgC,OAAhC,EAAyC,MAAzC,CAAV;;AACA,MAAI,CAAC,KAAK,SAAV,EAAqB;AACnB,WAAO,QAAP;AACD,GAJ2E,CAK5E;;;AACA,SAAO,SAAP;AACD;;;;;;;;;ACrDD;;AACA;;AACA;;AACA;;AAGA;;;;;;AAEO,MAAM,IAAI,GAAiB;AAChC,EAAA,MAAM,EAAE,MADwB;AAGhC,EAAA,WAAW,EAAG,KAAD,IAAqB;AAChC,UAAM;AAAC,MAAA,MAAD;AAAS,MAAA;AAAT,QAAoB,KAA1B;AACA,UAAM,MAAM,GAAG,OAAO,CAAC,MAAvB;AAEA,UAAM,aAAa,GAAG,MAAM,KAAK,YAAX,GAA0B,OAA1B,GAAoC,QAA1D;AACA,UAAM,kBAAkB,GAAG,MAAM,KAAK,YAAX,GAA0B,QAA1B,GAAqC,OAAhE;AAEA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAC,eAAP,CAAuB,KAAvB,EAA8B;AAC/B,MAAA,KAAK,EAAE,QADwB;AAE/B,MAAA,QAAQ,EAAE,QAFqB;AAG/B,MAAA,KAAK,EAAE,SAHwB;AAI/B,MAAA,MAAM,EAAE,QAJuB;AAK/B,MAAA,IAAI,EAAE,QALyB;AAM/B,MAAA,KAAK,EAAE;AANwB,KAA9B,CADL,CAAA,EAUK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE,KAAb;AAAoB,MAAA,SAAS,EAAE;AAA/B,KAAjC,CAVL,CAAA,EAWK,MAAM,CAAC,aAAP,CAAqB,GAArB,EAA0B,KAA1B,EAAiC;AAAC,MAAA,UAAU,EAAE,KAAb;AAAoB,MAAA,SAAS,EAAE;AAA/B,KAAjC,CAXL,CAAA,EAcK,MAAM,CAAC,WAAP,CAAmB,MAAnB,EAA2B,KAA3B,EAAkC;AACnC,MAAA,YAAY,EAAE,WAAW,CAAC,KAAD,CADU;AAEnC,MAAA,SAAS,EAAE;AAFwB,KAAlC,CAdL,CAAA,EAiBI;AACF,OAAC,kBAAD,GAAsB,8BAAiB,iCAAoB,WAApB,EAAiC,OAAjC,EAA0C,MAA1C,CAAjB;AADpB,KAjBJ,CAAA;AAoBD;AA9B+B,CAA3B;;;AAiCP,SAAS,WAAT,CAAqB,KAArB,EAAqC;;;AACnC,QAAM;AAAC,IAAA,MAAD;AAAS,IAAA;AAAT,MAAoB,KAA1B;AACA,QAAM;AAAC,IAAA;AAAD,MAAW,OAAjB;AAEA,QAAM,aAAa,GAAG,MAAM,KAAK,YAAX,GAA0B,OAA1B,GAAoC,QAA1D;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,iBAAN,CAAwB,MAAM,KAAK,YAAX,GAA0B,GAA1B,GAAgC,GAAxD,CAAd;AAEA,QAAM,gBAAgB,GAAA,CAAA,EAAA,GACpB,iCAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,EAA6C;AAAC,IAAA,SAAS,EAAE;AAAZ,GAA7C,CADoB,MACoD,IADpD,IACoD,EAAA,KAAA,KAAA,CADpD,GACoD,EADpD,GACwD,MAAM,CAAC,IAAP,CAAY,QAD1F;;AAGA,MAAI,gBAAgB,KAAK,SAAzB,EAAoC;AAClC,WAAO,gBAAP;AACD,GAFD,MAEO;AACL,UAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,GAAN,CAAU,OAAV,CAAH,GAAwB,SAAhD;;AACA,QAAI,UAAU,IAAI,yBAAc,UAAd,CAAd,IAA2C,wBAAS,UAAU,CAAC,IAApB,CAA/C,EAA0E;AACxE,aAAQ,UAAU,CAAC,IAAX,GAAkB,CAAnB,GAAwB,CAA/B;AACD;;AAED,UAAM,eAAe,GAAG,uCAA0B,MAAM,CAAC,IAAjC,EAAuC,aAAvC,CAAxB;AAEA,WAAQ,eAAe,GAAG,CAAnB,GAAwB,CAA/B;AACD;AACF;;;;;;;;;;AChED;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,MAAM,YAAY,GAA+B;AAC/C,EAAA,GAAG,EAAH,QAD+C;AAE/C,EAAA,IAAI,EAAJ,UAF+C;AAG/C,EAAA,GAAG,EAAH,QAH+C;AAI/C,EAAA,MAAM,EAAN,aAJ+C;AAK/C,EAAA,QAAQ,EAAR,kBAL+C;AAM/C,EAAA,KAAK,EAAL,YAN+C;AAO/C,EAAA,IAAI,EAAJ,UAP+C;AAQ/C,EAAA,KAAK,EAAL,YAR+C;AAS/C,EAAA,IAAI,EAAJ,UAT+C;AAU/C,EAAA,IAAI,EAAJ,UAV+C;AAW/C,EAAA,MAAM,EAAN,aAX+C;AAY/C,EAAA,IAAI,EAAJ,UAZ+C;AAa/C,EAAA,IAAI,EAAJ,UAb+C;AAc/C,EAAA,KAAK,EAAL;AAd+C,CAAjD;;AAiBM,SAAU,eAAV,CAA0B,KAA1B,EAA0C;AAC9C,MAAI,oBAAS,CAAC,UAAD,EAAO,UAAP,EAAa,WAAb,CAAT,EAA8B,KAAK,CAAC,IAApC,CAAJ,EAA+C;AAC7C,WAAO,aAAa,CAAC,KAAD,CAApB;AACD,GAFD,MAEO,IAAI,oBAAS,CAAC,SAAD,CAAT,EAAgB,KAAK,CAAC,IAAtB,CAAJ,EAAiC;AACtC,WAAO,cAAc,CAAC,KAAD,CAArB;AACD,GAFM,MAEA;AACL,WAAO,aAAa,CAAC,KAAD,CAApB;AACD;AACF;;AAED,MAAM,mBAAmB,GAAG,eAA5B;;AAEA,SAAS,aAAT,CAAuB,KAAvB,EAAuC;AACrC,QAAM,OAAO,GAAG,kCAAmB,KAAK,CAAC,IAAzB,EAA+B,KAAK,CAAC,QAArC,CAAhB;AAEA,QAAM,SAAS,GAAG,aAAa,CAAC,KAAD,EAAQ;AACrC;AACA,IAAA,UAAU,EAAE,OAAO,CAAC,MAAR,GAAiB,CAAjB,GAAqB,mBAArB,GAA2C;AAFlB,GAAR,CAA/B;;AAKA,MAAI,OAAO,CAAC,MAAR,GAAiB,CAArB,EAAwB;AACtB;AACA;AAEA,WAAO,CACL;AACE,MAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,WAAd,CADR;AAEE,MAAA,IAAI,EAAE,OAFR;AAGE,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE;AACL,UAAA,IAAI,EAAE,mBAAmB,GAAG,KAAK,CAAC,eAAN,CAAsB,UAAtB,CADvB;AAEL,UAAA,IAAI,EAAE,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAFD;AAGL,UAAA,OAAO,EAAE;AAHJ;AADH,OAHR;AAUE,MAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE;AACN,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAC,cAAA,KAAK,EAAE;AAAR;AAAR,WADD;AAEN,UAAA,MAAM,EAAE;AAAC,YAAA,KAAK,EAAE;AAAC,cAAA,KAAK,EAAE;AAAR;AAAR;AAFF;AADF,OAVV;AAgBE,MAAA,KAAK,EAAE;AAhBT,KADK,CAAP;AAoBD,GAxBD,MAwBO;AACL,WAAO,SAAP;AACD;AACF;;AAED,MAAM,kBAAkB,GAAG,cAA3B;AAEA;;;;;;AAKA,SAAS,cAAT,CAAwB,KAAxB,EAAwC;AACtC;AACA,QAAM,eAAe,GAAG,+BAAyB,IAAzB,CAA8B,IAAI,IAAI,iCAAoB,IAApB,EAA0B,KAAK,CAAC,OAAhC,EAAyC,KAAK,CAAC,MAA/C,CAAtC,CAAxB,CAFsC,CAItC;;;AACA,MAAI,KAAK,CAAC,KAAN,IAAe,CAAC,KAAK,CAAC,QAAN,CAAe,MAAf,CAAhB,IAA0C,eAA9C,EAA+D;AAC7D;AACA,UAAM,CAAC,IAAD,IAAS,aAAa,CAAC,KAAD,EAAQ;AAAC,MAAA,UAAU,EAAE;AAAb,KAAR,CAA5B,CAF6D,CAI7D;;AACA,UAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,KAAK,CAAC,KAAN,CAAY,YAA5B,CAAnB;;AACA,UAAM,UAAU,GAAG,CAAC,GAAA,GAAsB,EAAvB,KAA8B,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,KAAN,CAAY,YAA1B,EAAwC,GAAxC,CAAjD,CAN6D,CAO7D;;;AACA,UAAM,eAAe,GAAG,CAAC,IAAD,EAAsB,IAAtB,KAAkD;AACxE,YAAM,aAAa,GAAG,CACpB,UAAU,CAAC;AAAC,QAAA,MAAM,EAAE,KAAT;AAAgB,QAAA,MAAM,EAAE,OAAxB;AAAiC,QAAA;AAAjC,OAAD,CADU,EAEpB,UAAU,CAAC;AAAC,QAAA,MAAM,EAAE,KAAT;AAAgB,QAAA,MAAM,EAAE,OAAxB;AAAiC,QAAA;AAAjC,OAAD,CAFU,EAGpB,UAAU,CAAC;AAAC,QAAA,MAAM,EAAE,KAAT;AAAgB,QAAA,MAAM,EAAE,KAAxB;AAA+B,QAAA;AAA/B,OAAD,CAHU,EAIpB,UAAU,CAAC;AAAC,QAAA,MAAM,EAAE,KAAT;AAAgB,QAAA,MAAM,EAAE,KAAxB;AAA+B,QAAA;AAA/B,OAAD,CAJU,CAAtB;AAMA,aAAO,GAAG,IAAI,IAAI,aAAa,CAAC,GAAd,CAAkB,KAAK,IAAI,UAAU,UAAU,KAAK,KAAK,GAAzD,EAA8D,IAA9D,CAAmE,GAAnE,CAAuE,GAAzF;AACD,KARD;;AAUA,QAAI,WAAJ;AACA,QAAI,gBAAJ,CAnB6D,CAqB7D;;AACA,QAAI,KAAK,CAAC,KAAN,CAAY,YAAZ,KAA6B,GAAjC,EAAsC;AACpC;AACA;AACA,MAAA,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,gBAAK,IAAI,CAAC,MAAL,CAAY,MAAjB,EAAyB,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,EAAkB,QAAlB,EAA4B,GAAG,8BAA/B,CAAzB,CADM,CAAA,EAC4E;AACrF,QAAA,CAAC,EAAE;AAAC,UAAA,MAAM,EAAE,eAAe,CAAC,KAAD,EAAQ,OAAR;AAAxB,SADkF;AAErF,QAAA,EAAE,EAAE;AAAC,UAAA,MAAM,EAAE,eAAe,CAAC,KAAD,EAAQ,OAAR;AAAxB,SAFiF;AAGrF,QAAA,IAAI,EAAE;AAAC,UAAA,KAAK,EAAE;AAAR;AAH+E,OAD5E,CAAX,CAHoC,CASpC;;AACA,MAAA,gBAAgB,GAAG;AACjB,QAAA,CAAC,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WAAR;AAAsB,UAAA,IAAI,EAAE,CAAC;AAA7B,SADc;AAEjB,QAAA,MAAM,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAAR;AAFS,OAAnB,CAVoC,CAcpC;AACA;;AACA,MAAA,IAAI,CAAC,MAAL,CAAY,MAAZ,GAAkB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,gBAAK,IAAI,CAAC,MAAL,CAAY,MAAjB,EAAyB,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,CAAzB,CADa,CAAA,EAC8B;AAC9C,QAAA,MAAM,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAAR;AADsC,OAD9B,CAAlB;AAID,KApBD,MAoBO;AACL,MAAA,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,gBAAK,IAAI,CAAC,MAAL,CAAY,MAAjB,EAAyB,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,EAAkB,OAAlB,CAAzB,CADM,CAAA,EAC8C;AACvD,QAAA,CAAC,EAAE;AAAC,UAAA,MAAM,EAAE,eAAe,CAAC,KAAD,EAAQ,OAAR;AAAxB,SADoD;AAEvD,QAAA,EAAE,EAAE;AAAC,UAAA,MAAM,EAAE,eAAe,CAAC,KAAD,EAAQ,OAAR;AAAxB,SAFmD;AAGvD,QAAA,IAAI,EAAE;AAAC,UAAA,KAAK,EAAE;AAAR;AAHiD,OAD9C,CAAX;AAMA,MAAA,gBAAgB,GAAG;AACjB,QAAA,CAAC,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR,WAAR;AAAsB,UAAA,IAAI,EAAE,CAAC;AAA7B,SADc;AAEjB,QAAA,KAAK,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAAR;AAFU,OAAnB;AAIA,MAAA,IAAI,CAAC,MAAL,CAAY,MAAZ,GAAkB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,gBAAK,IAAI,CAAC,MAAL,CAAY,MAAjB,EAAyB,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,CAAzB,CADa,CAAA,EAC8B;AAC9C,QAAA,KAAK,EAAE;AAAC,UAAA,KAAK,EAAE;AAAC,YAAA,KAAK,EAAE;AAAR;AAAR;AADuC,OAD9B,CAAlB;AAID,KAzD4D,CA2D7D;;;AACA,SAAK,MAAM,GAAX,IAAkB,8BAAlB,EAA4C;AAC1C,YAAM,WAAW,GAAG,2BAAc,GAAd,EAAmB,KAAK,CAAC,OAAzB,EAAkC,KAAK,CAAC,MAAxC,CAApB,CAD0C,CAE1C;;AACA,UAAI,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,GAAnB,CAAJ,EAA6B;AAC3B,QAAA,WAAW,CAAC,GAAD,CAAX,GAAmB,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,GAAnB,CAAnB;AACA,eAAO,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,GAAnB,CAAP;AACD,OAHD,MAGO,IAAI,WAAJ,EAAiB;AACtB,QAAA,WAAW,CAAC,GAAD,CAAX,GAAmB,8BAAiB,WAAjB,CAAnB;AACD,OARyC,CAS1C;;;AACA,UAAI,WAAJ,EAAiB;AACf,QAAA,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,GAAnB,IAA0B;AAAC,UAAA,KAAK,EAAE;AAAR,SAA1B;AACD;AACF,KAzE4D,CA2E7D;;;AACA,UAAM,YAAY,GAAG,KAAK,CAAC,QAAN,CAAe,KAAK,CAAC,KAAN,CAAY,cAA3B,CAArB;AACA,UAAM,OAAO,GAAa,yBAAQ,YAAR,IAAwB,CAAC,yBAAQ,YAAR,CAAD,CAAxB,GAAkD,EAA5E;;AAEA,QAAI,CAAA,YAAY,KAAA,IAAZ,IAAA,YAAY,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAA,YAAY,CAAE,GAAd,MAAqB,YAAY,KAAA,IAAZ,IAAA,YAAY,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAA,YAAY,CAAE,QAAnC,CAAJ,EAAiD;AAC/C,MAAA,OAAO,CAAC,IAAR,CAAa,yBAAQ,YAAR,EAAsB;AAAC,QAAA,SAAS,EAAE;AAAZ,OAAtB,CAAb;AACD;;AAED,UAAM,gBAAgB,GAAG,CACvB,QADuB,EAEvB,aAFuB,EAGvB,YAHuB,EAIvB,WAJuB,EAKvB,YALuB,EAMvB,kBANuB,EAOvB,kBAPuB,EAQvB,eARuB,CAAzB,CAnF6D,CA8F7D;;AACA,IAAA,WAAW,GAAG,gBAAgB,CAAC,MAAjB,CAAwB,CAAC,MAAD,EAAS,IAAT,KAAiB;AACrD,UAAI,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,IAAnB,CAAJ,EAA8B;AAC5B,eAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,MAAX,CAAA,EAAiB;AAAE,WAAC,IAAD,GAAQ,IAAI,CAAC,MAAL,CAAY,MAAZ,CAAmB,IAAnB;AAAV,SAAjB,CAAA;AACD,OAFD,MAEO;AACL,cAAM,WAAW,GAAG,2BAAc,IAAd,EAAoB,KAAK,CAAC,OAA1B,EAAmC,KAAK,CAAC,MAAzC,CAApB;;AACA,YAAI,WAAW,KAAK,SAApB,EAA+B;AAC7B,iBAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAW,MAAX,CAAA,EAAiB;AAAE,aAAC,IAAD,GAAQ,8BAAiB,WAAjB;AAAV,WAAjB,CAAA;AACD,SAFD,MAEO;AACL,iBAAO,MAAP;AACD;AACF;AACF,KAXa,EAWX,WAXW,CAAd,CA/F6D,CA4G7D;;AACA,QAAI,WAAW,CAAC,MAAhB,EAAwB;AACtB,MAAA,WAAW,CAAC,gBAAZ,GAA+B;AAAC,QAAA,KAAK,EAAE;AAAR,OAA/B;AACA,MAAA,WAAW,CAAC,YAAZ,GAA2B;AAAC,QAAA,KAAK,EAAE;AAAR,OAA3B;AACD;;AAED,WAAO,CACL;AACE,MAAA,IAAI,EAAE,OADR;AAEE,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE;AACL,UAAA,IAAI,EAAE,KAAK,CAAC,eAAN,CAAsB,UAAtB,CADD;AAEL,UAAA,IAAI,EAAE,kBAAkB,GAAG,KAAK,CAAC,eAAN,CAAsB,UAAtB,CAFtB;AAGL,UAAA,OAHK;AAIL,UAAA,SAAS,EAAE;AACT,YAAA,MAAM,EAAE,CACN,UAAU,CAAC;AAAC,cAAA,MAAM,EAAE;AAAT,aAAD,CADJ,EAEN,UAAU,CAAC;AAAC,cAAA,MAAM,EAAE;AAAT,aAAD,CAFJ,EAGN,UAAU,CAAC;AAAC,cAAA,MAAM,EAAE;AAAT,aAAD,CAHJ,EAIN,UAAU,CAAC;AAAC,cAAA,MAAM,EAAE;AAAT,aAAD,CAJJ,CADC;AAOT,YAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB;AAPI;AAJN;AADH,OAFR;AAkBE,MAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE;AADF,OAlBV;AAqBE,MAAA,KAAK,EAAE,CACL;AACE,QAAA,IAAI,EAAE,OADR;AAEE,QAAA,MAAM,EAAE;AAAC,UAAA,MAAM,EAAE;AAAT,SAFV;AAGE,QAAA,KAAK,EAAE,CAAC,IAAD;AAHT,OADK;AArBT,KADK,CAAP;AA+BD,GAjJD,MAiJO;AACL,WAAO,aAAa,CAAC,KAAD,CAApB;AACD;AACF;;AAEK,SAAU,OAAV,CAAkB,KAAlB,EAAkC;AACtC,QAAM;AAAC,IAAA,QAAD;AAAW,IAAA,KAAX;AAAkB,IAAA,IAAlB;AAAwB,IAAA,OAAxB;AAAiC,IAAA;AAAjC,MAA2C,KAAjD;AACA,QAAM,KAAK,GAAG,QAAQ,CAAC,KAAvB;;AACA,MACG,CAAC,uBAAQ,KAAR,CAAD,IAAmB,4BAAW,KAAX,CAAnB,IAAwC,yBAAc,KAAK,CAAC,KAApB,CAAzC,IACC,CAAC,KAAD,IAAU,yBAAc,iCAAoB,OAApB,EAA6B,OAA7B,EAAsC,MAAtC,CAAd,CAFb,EAGE;AACA,WAAO,SAAP;AACD,GALD,MAKO,IAAI,CAAC,uBAAQ,KAAR,KAAkB,4BAAW,KAAX,CAAnB,KAAyC,CAAC,KAA9C,EAAqD;AAC1D;AACA,WAAO,wBAAW,KAAX,EAAkB;AAAC,MAAA,IAAI,EAAE;AAAP,KAAlB,CAAP;AACD,GAHM,MAGA,IAAI,sBAAW,IAAX,CAAJ,EAAsB;AAC3B;AACA,UAAM,gBAAgB,GAAG,OAAO,CAAC,MAAR,KAAmB,YAAnB,GAAkC,GAAlC,GAAwC,GAAjE;AACA,UAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAD,CAApC;;AACA,QAAI,4BAAW,mBAAX,CAAJ,EAAqC;AACnC,YAAM,CAAC,GAAG,mBAAmB,CAAC,IAA9B;;AAEA,UAAI,uBAAQ,CAAR,CAAJ,EAAgB;AACd,eAAO;AACL,UAAA,KAAK,EAAE,yBAAQ,mBAAR,EAA6B;AAAC,YAAA,MAAM,EAAE,gBAAT;AAA2B,YAAA,MAAM,EAAE,YAAnC;AAAiD,YAAA,IAAI,EAAE;AAAvD,WAA7B;AADF,SAAP;AAGD,OAJD,MAIO,IAAI,uBAAY,CAAZ,CAAJ,EAAoB;AACzB,eAAO;AACL,UAAA,KAAK,EAAE,yBACL;AACE;AACA;AACA,YAAA,SAAS,EAAE,2BAAY,KAAK,CAAC,QAAlB,IAA8B,CAAC,CAAC,EAAhC,GAAqC,SAHlD;AAIE,YAAA,KAAK,EAAE,CAAC,CAAC;AAJX,WADK,EAOL;AAAC,YAAA,IAAI,EAAE;AAAP,WAPK;AADF,SAAP;AAWD,OAZM,MAYA,IAAI,4BAAiB,CAAjB,CAAJ,EAAyB;AAC9B,cAAM,cAAc,GAAG,KAAK,CAAC,QAAN,CAAe,CAAC,CAAC,QAAjB,CAAvB;AACA,eAAO;AACL,UAAA,KAAK,EAAE,yBAAQ,cAAR,EAAwB;AAAC,YAAA,IAAI,EAAE;AAAP,WAAxB,CADF;AAEL,UAAA,KAAK,EAAE,CAAC,CAAC;AAFJ,SAAP;AAID,OANM,MAMA,IAAI,CAAC,KAAK,IAAV,EAAgB;AACrB,eAAO,SAAP;AACD,OAFM,MAEA;AACL,eAAO;AACL,UAAA,KAAK,EAAE,yBAAQ,mBAAR,EAA6B;AAClC;AACA,YAAA,SAAS,EAAE,KAAK,CAAC,KAAN,IAAe,KAAK,CAAC,KAAN,CAAY,MAA3B,GAAoC,KAApC,GAA4C,SAFrB;AAGlC,YAAA,IAAI,EAAE;AAH4B,WAA7B;AADF,SAAP;AAOD;AACF;;AACD,WAAO,SAAP;AACD;;AACD,SAAO,SAAP;AACD;;AAED,SAAS,aAAT,CACE,KADF,EAEE,GAAA,GAEI;AAAC,EAAA,UAAU,EAAE;AAAb,CAJN,EAIsB;AAEpB,QAAM;AAAC,IAAA,IAAD;AAAO,IAAA,OAAP;AAAgB,IAAA;AAAhB,MAA0B,KAAhC;AAEA,QAAM,IAAI,GAAG,2BAAgB,OAAO,CAAC,IAAxB,EAA8B,SAAS,CAAC,KAAD,CAAvC,EAAgD,cAAc,CAAC,KAAD,CAA9D,CAAb;AACA,QAAM,KAAK,GAAG,uBAAU,OAAV,CAAd;AACA,QAAM,GAAG,GAAG,KAAK,CAAC,QAAN,CAAe,GAA3B;AACA,QAAM,IAAI,GAAG,OAAO,CAAC,KAAD,CAApB;AACA,QAAM,WAAW,GAAG,eAAe,CAAC,KAAD,CAAnC;AACA,QAAM,IAAI,GAAG,iCAAoB,MAApB,EAA4B,OAA5B,EAAqC,MAArC,CAAb;AAEA,QAAM,qBAAqB,GAAG,YAAY,CAAC,IAAD,CAAZ,CAAmB,qBAAnB,GAC1B,YAAY,CAAC,IAAD,CAAZ,CAAmB,qBAAnB,CAAyC,KAAzC,CAD0B,GAE1B,IAFJ;AAIA,SAAO;AAEH,IAAA,IAAI,EAAE,KAAK,CAAC,OAAN,CAAc,OAAd;AACN,IAAA,IAAI,EAAE,YAAY,CAAC,IAAD,CAAZ,CAAmB;KACrB,IAAI,GAAG;AAAC,IAAA,IAAI,EAAE;AAAP,GAAH,GAAkB,KACtB,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,KAClB,GAAG,GAAG;AAAC,IAAA,GAAG,EAAE,GAAG,CAAC;AAAV,GAAH,GAAsB,KACzB,IAAI,GAAG;AAAC,IAAA;AAAD,GAAH,GAAY,KAChB,WAAW,GAAG,WAAH,GAAiB,KAC5B,IAAI,KAAK,KAAT,GAAiB;AAAC,IAAA;AAAD,GAAjB,GAA0B,KAAG;AACjC,IAAA,IAAI,EAAE;AAAC,MAAA,IAAI,EAAE,GAAG,CAAC,UAAJ,GAAiB,KAAK,CAAC,eAAN,CAAsB,UAAtB;AAAxB,KAD2B;AAEjC,IAAA,MAAM,EAAE;AACN,MAAA,MAAM,EAAE,YAAY,CAAC,IAAD,CAAZ,CAAmB,WAAnB,CAA+B,KAA/B;AADF;AAFyB,MAK7B,qBAAqB,GACrB;AACE,IAAA,SAAS,EAAE;AADb,GADqB,GAIrB,GAlBD,CAAP;AAqBD;AAED;;;;;;;AAKA,SAAS,SAAT,CAAmB,KAAnB,EAAmC;AACjC,QAAM,MAAM,GAAG,KAAK,CAAC,iBAAN,CAAwB,GAAxB,CAAf;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,iBAAN,CAAwB,GAAxB,CAAf;AACA,SAAQ,MAAM,IAAI,MAAM,CAAC,GAAP,CAAW,iBAAX,CAAX,IAA8C,MAAM,IAAI,MAAM,CAAC,GAAP,CAAW,iBAAX,CAAxD,GAAyF,IAAzF,GAAgG,SAAvG;AACD;AAED;;;;;;AAIA,SAAS,cAAT,CAAwB,KAAxB,EAAwC;AACtC,QAAM,UAAU,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAnC;AACA,SAAO,UAAU,IAAI,CAAC,UAAU,CAAC,KAA1B,GAAkC,IAAlC,GAAyC,SAAhD;AACD;AAED;;;;;AAGA,SAAS,eAAT,CAAyB,KAAzB,EAAyC;AACvC,MAAI,CAAC,KAAK,CAAC,SAAN,CAAgB,SAArB,EAAgC,OAAO,IAAP;AAChC,QAAM,SAAS,GAAG,gBAAK,KAAK,CAAC,SAAN,CAAgB,SAArB,EAAgC,MAAlD;AACA,MAAI,WAAW,GAAG,SAAlB;AACA,MAAI,MAAM,GAAG,KAAK,CAAC,MAAnB;;AACA,SAAO,MAAM,IAAI,WAAW,KAAK,CAAjC,EAAoC;AAClC,IAAA,WAAW,GAAG,gBAAK,MAAM,CAAC,SAAP,CAAiB,SAAtB,EAAiC,MAA/C;AACA,IAAA,MAAM,GAAG,MAAM,CAAC,MAAhB;AACD;;AACD,SAAO,WAAW,GAAG;AAAC,IAAA,WAAW,EAAE,SAAS,GAAG;AAA1B,GAAH,GAAkC,IAApD;AACD;;;;;;;;;AC7XD;;AAYA;;AASA;;AACA;;AAGA;;AAKA;;AACA;;AAGA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AAMA;;;;;;AAEA;;;AAGM,MAAO,SAAP,SAAyB,qBAAzB,CAAuC;AAiB3C,EAAA,WAAA,CACE,IADF,EAEE,MAFF,EAGE,eAHF,EAIE,eAAA,GAAoC,EAJtC,EAKE,MALF,EAKgB;;;AAEd,UAAM,IAAN,EAAY,MAAZ,EAAoB,MAApB,EAA4B,eAA5B,EAA6C,MAA7C,EAAqD,SAArD,EAAgE,yBAAc,IAAd,IAAsB,IAAI,CAAC,IAA3B,GAAkC,SAAlG;AApBc,SAAA,eAAA,GAA8B,EAA9B;AAIN,SAAA,aAAA,GAA2B,EAA3B;AAEA,SAAA,gBAAA,GAAgC,EAAhC;AAEH,SAAA,mBAAA,GAAkC,EAAlC;AAES,SAAA,SAAA,GAAgC,EAAhC;AACT,SAAA,QAAA,GAAoB,EAApB;AAWL,UAAM,IAAI,GAAG,qBAAU,IAAI,CAAC,IAAf,IAAuB,IAAI,CAAC,IAAL,CAAU,IAAjC,GAAwC,IAAI,CAAC,IAA1D;AAEA,SAAK,OAAL,GAAe,wBAAY,IAAI,CAAC,IAAjB,EAAqB,CAAA,EAAA,GAAE,IAAI,CAAC,QAAP,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,EAAf,GAAmB,EAAxC,EAA4C,MAA5C,EAAoD;AACjE,MAAA,SAAS,EAAE,IAAI,CAAC,IAAL,IAAa,gCAAqB,IAAI,CAAC,IAA1B;AADyC,KAApD,CAAf;AAGA,UAAM,QAAQ,GAAI,KAAK,QAAL,GAAgB,6BAAY,CAAA,EAAA,GAAC,IAAI,CAAC,QAAN,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAA9B,EAAkC,KAAK,OAAvC,EAAgD,MAAhD,CAAlC;AAEA,SAAK,IAAL,GAAY,0BAAe;AACzB,MAAA,QAAQ,EAAE,QADe;AAEzB,MAAA,IAAI,EAAE,yBAAc,IAAd,IACH,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,eADN,CAAA,EAEO,IAAI,CAAC,KAAL,GAAa;AAAC,QAAA,KAAK,EAAE,IAAI,CAAC;AAAb,OAAb,GAAmC,EAF1C,CAAA,EAGO,IAAI,CAAC,MAAL,GAAc;AAAC,QAAA,MAAM,EAAE,IAAI,CAAC;AAAd,OAAd,GAAsC,EAH7C,CADG,GAMF;AARqB,KAAf,CAAZ,CAXc,CAsBd;;AACA,SAAK,KAAL,GAAa,kBAAM,IAAN,EAAY,QAAZ,CAAb;AACA,SAAK,eAAL,GAAuB,KAAK,UAAL,CAAgB,IAAhB,EAAsB,QAAtB,CAAvB;AAEA,SAAK,aAAL,GAAqB,KAAK,QAAL,CAAc,QAAd,CAArB;AACA,SAAK,gBAAL,GAAwB,KAAK,UAAL,CAAgB,QAAhB,CAAxB;AACA,SAAK,mBAAL,GAA2B,IAAI,CAAC,UAAhC,CA5Bc,CA8Bd;;AACA,SAAK,SAAL,GAAiB,IAAI,CAAC,SAAtB;AACD;;AAED,MAAW,aAAX,GAAwB;AACtB,UAAM;AAAC,MAAA;AAAD,QAAa,IAAnB;AACA,UAAM,cAAc,GAAG,KAAK,IAAL,KAAc,cAArC;;AACA,UAAM,cAAc,GAAG,QAAQ,IAAI,8BAAqB,IAArB,CAA0B,OAAO,IAAI,mCAAkB,QAAQ,CAAC,OAAD,CAA1B,CAArC,CAAnC;;AACA,WAAO,cAAc,IAAI,cAAzB;AACD;AAED;;;;;;AAIO,EAAA,WAAW,CAAC,OAAD,EAAsB;AACtC,UAAM,KAAK,GAAG,KAAK,eAAL,CAAqB,OAArB,CAAd;AACA,WAAO,KAAK,GAAG,KAAK,CAAC,MAAT,GAAkB,SAA9B;AACD;;AAEM,EAAA,IAAI,CAAC,OAAD,EAAiB;AAC1B,WAAO,KAAK,aAAL,CAAmB,OAAnB,CAAP;AACD;;AAEM,EAAA,MAAM,CAAC,OAAD,EAAiB;AAC5B,WAAO,KAAK,gBAAL,CAAsB,OAAtB,CAAP;AACD;;AAEO,EAAA,UAAU,CAAC,IAAD,EAAa,QAAb,EAAuC;AACvD,WAAO,wBAAe,MAAf,CAAsB,CAAC,MAAD,EAAS,OAAT,KAAoB;;;AAC/C,YAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB;;AAGA,UAAI,eAAJ,EAAqB;AACnB,QAAA,MAAM,CAAC,OAAD,CAAN,GAAe,CAAA,EAAA,GAAG,eAAe,CAAC,KAAnB,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA4B,EAA3C;AACD;;AACD,aAAO,MAAP;AACD,KARM,EAQJ,EARI,CAAP;AASD;;AAEO,EAAA,QAAQ,CAAC,QAAD,EAA2B;AACzC,WAAO,iCAAwB,MAAxB,CAA+B,CAAC,KAAD,EAAQ,OAAR,KAAmB;AACvD;AAEA;AACA,YAAM,UAAU,GAAG,QAAQ,CAAC,OAAD,CAA3B;;AACA,UACE,mCAAkB,UAAlB,KACC,OAAO,KAAK,UAAZ,IAAiB,mCAAkB,QAAQ,CAAC,EAA3B,CADlB,IAEC,OAAO,KAAK,UAAZ,IAAiB,mCAAkB,QAAQ,CAAC,EAA3B,CAHpB,EAIE;AACA,cAAM,QAAQ,GAAG,mCAAkB,UAAlB,IAAgC,UAAU,CAAC,IAA3C,GAAkD,SAAnE;AAEA,QAAA,KAAK,CAAC,OAAD,CAAL,GAAiB,QAAQ,GAAE,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,QAAL,CAAF,GAAmB,QAA5C,CAHA,CAGsD;AACvD;;AACD,aAAO,KAAP;AACD,KAfM,EAeJ,EAfI,CAAP;AAgBD;;AAEO,EAAA,UAAU,CAAC,QAAD,EAA2B;AAC3C,WAAO,oCAA2B,MAA3B,CAAkC,CAAC,OAAD,EAAU,OAAV,KAAqB;AAC5D,YAAM,eAAe,GAAG,oCAAmB,QAAQ,CAAC,OAAD,CAA3B,CAAxB;;AAEA,UAAI,eAAe,IAAI,4BAAc,OAAd,CAAvB,EAA+C;AAC7C,cAAM,MAAM,GAAG,eAAe,CAAC,MAA/B;AACA,QAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,MAAM,GAAE,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,MAAL,CAAF,GAAiB,MAA1C,CAF6C,CAEK;AACnD;;AAED,aAAO,OAAP;AACD,KATM,EASJ,EATI,CAAP;AAUD;;AAEM,EAAA,SAAS,GAAA;AACd,SAAK,SAAL,CAAe,IAAf,GAAsB,uBAAU,IAAV,CAAtB;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,qCAAoB,IAApB;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,SAAK,SAAL,CAAe,SAAf,GAA2B,gCAAmB,IAAnB,EAAyB,KAAK,SAA9B,CAA3B;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,SAAK,SAAL,CAAe,IAAf,GAAsB,4BAAgB,IAAhB,CAAtB;AACD;;AAEM,EAAA,mBAAmB,GAAA;AACxB,SAAK,SAAL,CAAe,IAAf,GAAsB,0BAAc,IAAd,CAAtB;AACD;;AAEM,EAAA,gCAAgC,CAAC,OAAD,EAAe;AACpD,WAAO,wCAAwB,IAAxB,EAA8B,OAA9B,CAAP;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,CAAC,GAAG,mCAAoB,IAApB,CAAJ,EAA+B,GAAG,6CAA6B,IAA7B,EAAmC,EAAnC,CAAlC,CAAP;AACD;;AAEM,EAAA,qBAAqB,CAAC,IAAD,EAAwB;AAClD,WAAO,0CAA0B,IAA1B,EAAgC,IAAhC,CAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAP;AACD;;AAEM,EAAA,qBAAqB,GAAA;AAC1B,WAAO,sCAAsB,IAAtB,CAAP;AACD;;AAEM,EAAA,aAAa,GAAA;;;AAClB,QAAI,KAAK,GAAA,CAAA,EAAA,GAAG,KAAK,SAAL,CAAe,IAAlB,MAAsB,IAAtB,IAAsB,EAAA,KAAA,KAAA,CAAtB,GAAsB,EAAtB,GAA0B,EAAnC,CADkB,CAGlB;AACA;AACA;;AACA,QAAI,CAAC,KAAK,MAAN,IAAgB,CAAC,yBAAa,KAAK,MAAlB,CAArB,EAAgD;AAC9C,MAAA,KAAK,GAAG,2CAA2B,IAA3B,EAAiC,KAAjC,CAAR;AACD;;AAED,WAAO,KAAK,CAAC,GAAN,CAAU,KAAK,gBAAf,CAAP;AACD;;AAES,EAAA,UAAU,GAAA;AAClB,WAAO,KAAK,QAAZ;AACD;;AAED,MAAW,IAAX,GAAe;AACb,WAAO,KAAK,OAAL,CAAa,IAApB;AACD;;AAEM,EAAA,eAAe,CAAC,OAAD,EAAiB;AACrC,WAAO,UAAU,CAAC,eAAX,CAA2B,KAAK,QAAhC,EAA0C,OAA1C,CAAP;AACD;;AAEM,EAAA,QAAQ,CAAC,OAAD,EAA0B;AACvC,UAAM,UAAU,GAAG,KAAK,QAAL,CAAc,OAAd,CAAnB;AACA,WAAO,6BAAoB,UAApB,CAAP;AACD;;AAEM,EAAA,aAAa,CAAC,OAAD,EAA0B;AAC5C,UAAM,QAAQ,GAAG,KAAK,QAAL,CAAc,OAAd,CAAjB;;AACA,QAAI,iCAAgB,QAAhB,CAAJ,EAA+B;AAC7B,aAAO,QAAP;AACD;;AACD,WAAO,IAAP;AACD;;AAxM0C;;;;;;;;;;;ACzD7C;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEM,MAAO,UAAP,SAA0B,YAA1B,CAA+B;AAKnC,EAAA,WAAA,CACE,IADF,EAEE,MAFF,EAGE,eAHF,EAIE,eAJF,EAKE,MALF,EAKgB;AAEd,UAAM,IAAN,EAAY,OAAZ,EAAqB,MAArB,EAA6B,eAA7B,EAA8C,MAA9C,EAAsD,IAAI,CAAC,OAA3D,EAAoE,IAAI,CAAC,IAAzE;AAEA,UAAM,UAAU,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,eADW,CAAA,EAEV,IAAI,CAAC,KAAL,GAAa;AAAC,MAAA,KAAK,EAAE,IAAI,CAAC;AAAb,KAAb,GAAmC,EAFzB,CAAA,EAGV,IAAI,CAAC,MAAL,GAAc;AAAC,MAAA,MAAM,EAAE,IAAI,CAAC;AAAd,KAAd,GAAsC,EAH5B,CAAhB;AAMA,SAAK,QAAL,GAAgB,IAAI,CAAC,KAAL,CAAW,GAAX,CAAe,CAAC,KAAD,EAAQ,CAAR,KAAa;AAC1C,UAAI,uBAAY,KAAZ,CAAJ,EAAwB;AACtB,eAAO,IAAI,UAAJ,CAAe,KAAf,EAAsB,IAAtB,EAA4B,KAAK,OAAL,CAAa,WAAW,CAAxB,CAA5B,EAAwD,UAAxD,EAAoE,MAApE,CAAP;AACD,OAFD,MAEO,IAAI,sBAAW,KAAX,CAAJ,EAAuB;AAC5B,eAAO,IAAI,eAAJ,CAAc,KAAd,EAAqB,IAArB,EAA2B,KAAK,OAAL,CAAa,WAAW,CAAxB,CAA3B,EAAuD,UAAvD,EAAmE,MAAnE,CAAP;AACD;;AAED,YAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,KAAxB,CAAV,CAAN;AACD,KARe,CAAhB;AASD;;AAEM,EAAA,SAAS,GAAA;AACd,SAAK,SAAL,CAAe,IAAf,GAAsB,uBAAU,IAAV,CAAtB;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,SAAN;AACD;AACF;;AAEM,EAAA,eAAe,GAAA;AACpB,sCAAqB,IAArB;AACD;;AAEM,EAAA,eAAe,GAAA;AACpB;AACA;AACA;AACA,SAAK,SAAL,CAAe,SAAf,GAA2B,EAA3B;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,eAAN;;AACA,WAAK,MAAM,GAAX,IAAkB,gBAAK,KAAK,CAAC,SAAN,CAAgB,SAArB,CAAlB,EAAmD;AACjD,aAAK,SAAL,CAAe,SAAf,CAAyB,GAAzB,IAAgC,KAAK,CAAC,SAAN,CAAgB,SAAhB,CAA0B,GAA1B,CAAhC;AACD;AACF;AACF;;AAEM,EAAA,cAAc,GAAA;AACnB,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,CAAC,cAAN;AACD;AACF;;AAEM,EAAA,mBAAmB,GAAA;AACxB,+BAAe,IAAf;AACD;;AAEM,EAAA,gCAAgC,CAAC,OAAD,EAAqB;AAC1D,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,EAAD,EAAK,KAAL,KAAe,KAAK,CAAC,gCAAN,CAAuC,EAAvC,CAApC,EAAgF,OAAhF,CAAP;AACD,GAnEkC,CAqEnC;;;AACO,EAAA,eAAe,GAAA;AACpB,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,OAAD,EAAU,KAAV,KAAmB;AAC7C,aAAO,OAAO,CAAC,MAAR,CAAe,KAAK,CAAC,eAAN,EAAf,CAAP;AACD,KAFM,EAEJ,mCAAoB,IAApB,CAFI,CAAP;AAGD;;AAEM,EAAA,qBAAqB,GAAA;AAC1B,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,OAAD,EAAU,KAAV,KAAmB;AAC7C,aAAO,OAAO,CAAC,MAAR,CAAe,KAAK,CAAC,qBAAN,EAAf,CAAP;AACD,KAFM,EAEJ,sCAAsB,IAAtB,CAFI,CAAP;AAGD;;AAEM,EAAA,qBAAqB,CAAC,IAAD,EAAwB;AAClD,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,EAAD,EAAK,KAAL,KAAe,KAAK,CAAC,qBAAN,CAA4B,EAA5B,CAApC,EAAqE,IAArE,CAAP;AACD;;AAEM,EAAA,aAAa,GAAA;AAClB,QAAI,KAAK,GAAG,MAAM,aAAN,EAAZ;;AACA,QAAI,KAAJ,EAAW;AACT,aAAO,KAAP;AACD,KAJiB,CAKlB;;;AACA,SAAK,MAAM,KAAX,IAAoB,KAAK,QAAzB,EAAmC;AACjC,MAAA,KAAK,GAAG,KAAK,CAAC,aAAN,EAAR;;AACA,UAAI,KAAJ,EAAW;AACT,eAAO,KAAP;AACD;AACF;;AACD,WAAO,SAAP;AACD;;AAEM,EAAA,cAAc,GAAA;AACnB,WAAO,IAAP;AACD;;AAEM,EAAA,aAAa,GAAA;AAClB,WAAO,4CACL,IADK,EAEL,KAAK,QAAL,CAAc,OAAd,CAAsB,KAAK,IAAG;AAC5B,aAAO,KAAK,CAAC,aAAN,EAAP;AACD,KAFD,CAFK,CAAP;AAMD;;AAEM,EAAA,eAAe,GAAA;AACpB,WAAO,KAAK,QAAL,CAAc,MAAd,CAAqB,CAAC,OAAD,EAAU,KAAV,KAAmB;AAC7C,aAAO,OAAO,CAAC,MAAR,CAAe,KAAK,CAAC,eAAN,EAAf,CAAP;AACD,KAFM,EAEJ,gCAAgB,IAAhB,CAFI,CAAP;AAGD;;AAtHkC;;;;;;;;;;;ACfrC;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEM,SAAU,UAAV,CACJ,IADI,EAEJ,MAFI,EAGJ,eAHI,EAIJ,QAJI,EAKJ,MALI,EAKU;AAEd,MAAI,uBAAY,IAAZ,CAAJ,EAAuB;AACrB,WAAO,IAAI,iBAAJ,CAAe,IAAf,EAAqB,MAArB,EAA6B,eAA7B,EAA8C,MAA9C,CAAP;AACD,GAFD,MAEO,IAAI,uBAAY,IAAZ,CAAJ,EAAuB;AAC5B,WAAO,IAAI,iBAAJ,CAAe,IAAf,EAAqB,MAArB,EAA6B,eAA7B,EAA8C,QAA9C,EAAwD,MAAxD,CAAP;AACD,GAFM,MAEA,IAAI,sBAAW,IAAX,CAAJ,EAAsB;AAC3B,WAAO,IAAI,eAAJ,CAAc,IAAd,EAAoB,MAApB,EAA4B,eAA5B,EAA6C,QAA7C,EAAuD,MAAvD,CAAP;AACD,GAFM,MAEA,IAAI,2BAAgB,IAAhB,CAAJ,EAA2B;AAChC,WAAO,IAAI,mBAAJ,CAAgB,IAAhB,EAAsB,MAAtB,EAA8B,eAA9B,EAA+C,MAA/C,CAAP;AACD;;AACD,QAAM,IAAI,KAAJ,CAAU,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,IAAxB,CAAV,CAAN;AACD;;;;;;;;;ACzBD;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAQA;;AACA;;AACA;;AACA;;;;;;AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BM,SAAU,OAAV,CAAkB,SAAlB,EAA2C,GAAA,GAAsB,EAAjE,EAAmE;AACvE;AACA,MAAI,GAAG,CAAC,MAAR,EAAgB;AACd;AACA,IAAA,GAAG,CAAC,GAAJ,CAAQ,GAAG,CAAC,MAAZ;AACD;;AAED,MAAI,GAAG,CAAC,UAAR,EAAoB;AAClB;AACA,IAAA,UAAU,CAAC,iBAAX,CAA6B,GAAG,CAAC,UAAjC;AACD;;AAED,MAAI;AACF;AACA,UAAM,MAAM,GAAG,wBAAW,2BAAY,GAAG,CAAC,MAAhB,EAAwB,SAAS,CAAC,MAAlC,CAAX,CAAf,CAFE,CAIF;AAEA;AACA;;AACA,UAAM,IAAI,GAAG,0BAAU,SAAV,EAAqB,MAArB,CAAb,CARE,CAUF;AAEA;AACA;;AACA,UAAM,KAAK,GAAU,4BAAW,IAAX,EAAiB,IAAjB,EAAuB,EAAvB,EAA2B,SAA3B,EAAsC,MAAtC,CAArB,CAdE,CAgBF;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAA,KAAK,CAAC,KAAN,GA5BE,CA8BF;AAEA;;AACA,oCAAiB,KAAK,CAAC,SAAN,CAAgB,IAAjC,EAAuC,KAAvC,EAjCE,CAmCF;;AACA,UAAM,MAAM,GAAG,qBAAqB,CAClC,KADkC,EAElC,qBAAqB,CAAC,SAAD,EAAY,IAAI,CAAC,QAAjB,EAA2B,MAA3B,EAAmC,KAAnC,CAFa,EAGlC,SAAS,CAAC,QAHwB,EAIlC,SAAS,CAAC,QAJwB,CAApC;AAOA,WAAO;AACL,MAAA,IAAI,EAAE,MADD;AAEL,MAAA,UAAU,EAAE;AAFP,KAAP;AAID,GA/CD,SA+CU;AACR;AACA,QAAI,GAAG,CAAC,MAAR,EAAgB;AACd,MAAA,GAAG,CAAC,KAAJ;AACD,KAJO,CAKR;;;AACA,QAAI,GAAG,CAAC,UAAR,EAAoB;AAClB,MAAA,UAAU,CAAC,mBAAX;AACD;AACF;AACF;;AAED,SAAS,qBAAT,CACE,SADF,EAEE,QAFF,EAGE,MAHF,EAIE,KAJF,EAIc;AAEZ,QAAM,KAAK,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,GAA3B,CAA+B,OAA/B,CAAd;AACA,QAAM,MAAM,GAAG,KAAK,CAAC,SAAN,CAAgB,UAAhB,CAA2B,GAA3B,CAA+B,QAA/B,CAAf;;AACA,MAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC1B,IAAA,QAAQ,GAAG;AAAC,MAAA,IAAI,EAAE;AAAP,KAAX;;AACA,QAAI,KAAK,CAAC,sBAAN,EAAJ,EAAoC;AAClC,MAAA,QAAQ,CAAC,MAAT,GAAkB,IAAlB;AACD;AACF,GALD,MAKO,IAAI,wBAAS,QAAT,CAAJ,EAAwB;AAC7B,IAAA,QAAQ,GAAG;AAAC,MAAA,IAAI,EAAE;AAAP,KAAX;AACD;;AACD,MAAI,KAAK,IAAI,MAAT,IAAmB,yBAAU,QAAQ,CAAC,IAAnB,CAAvB,EAAiD;AAC/C,QAAI,KAAK,KAAK,MAAV,IAAoB,MAAM,KAAK,MAAnC,EAA2C;AACzC,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,WAAZ,EAAT;AACA,MAAA,QAAQ,CAAC,IAAT,GAAgB,KAAhB;AACD,KAHD,MAGO,IAAI,KAAK,KAAK,MAAV,IAAoB,MAAM,KAAK,MAAnC,EAA2C;AAChD;AAEA;AACA,YAAM,QAAQ,GAAG,KAAK,KAAK,MAAV,GAAmB,OAAnB,GAA6B,QAA9C,CAJgD,CAKhD;;AACA,MAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,OAAJ,CAAY,WAAZ,CAAwB,sCAAwB,QAAxB,CAAxB,CAAT,EANgD,CAQhD;;AACA,YAAM,eAAe,GAAG,QAAQ,KAAK,OAAb,GAAuB,QAAvB,GAAkC,OAA1D;AACA,MAAA,QAAQ,CAAC,IAAT,GAAgB,0BAAW,eAAX,CAAhB;AACD;AACF;;AAED,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,gBAAK,QAAL,EAAe,MAAf,KAA0B,CAA1B,IAA+B,QAAQ,CAAC,IAAxC,GACA,QAAQ,CAAC,IAAT,KAAkB,KAAlB,GACE,EADF,GAEE;AAAC,IAAA,QAAQ,EAAE,QAAQ,CAAC;AAApB,GAHF,GAIA;AAAC,IAAA;AAAD,GALN,CAAA,EAMK,yCAA0B,MAA1B,CANL,CAAA,EAOK,yCAA0B,SAA1B,CAPL,CAAA;AASD;AAED;;;;;;;;AAMA,SAAS,qBAAT,CACE,KADF,EAEE,kBAFF,EAGE,QAAA,GAAqB,EAHvB,EAIE,QAJF,EAIkB;AAEhB;AACA,QAAM,QAAQ,GAAG,KAAK,CAAC,MAAN,GAAe,oCAAuB,KAAK,CAAC,MAA7B,CAAf,GAAsD,SAAvE;AAEA,QAAM,IAAI,GAAG,GAAG,MAAH,CACX,KAAK,CAAC,qBAAN,CAA4B,EAA5B,CADW,EAEX;AACA,kCAAiB,KAAK,CAAC,SAAN,CAAgB,IAAjC,EAAuC,QAAvC,CAHW,CAAb;AAMA,QAAM,WAAW,GAAG,KAAK,CAAC,mBAAN,EAApB;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,aAAN,EAAd;AACA,QAAM,KAAK,GAAG,KAAK,CAAC,kBAAN,EAAd;AACA,QAAM,WAAW,GAAG,KAAK,CAAC,wBAAN,CAA+B,IAA/B,CAApB;AAEA,MAAI,aAAa,GAAG,KAAK,CAAC,qBAAN,EAApB,CAhBgB,CAkBhB;;AACA,EAAA,aAAa,GAAG,aAAa,CAAC,MAAd,CAAqB,MAAM,IAAG;AAC5C,QAAI,CAAC,MAAM,CAAC,IAAP,KAAgB,OAAhB,IAA2B,MAAM,CAAC,IAAP,KAAgB,QAA5C,KAAyD,MAAM,CAAC,KAAP,KAAiB,SAA9E,EAAyF;AACvF,MAAA,kBAAkB,CAAC,MAAM,CAAC,IAAR,CAAlB,GAAkC,CAAC,MAAM,CAAC,KAA1C;AACA,aAAO,KAAP;AACD;;AACD,WAAO,IAAP;AACD,GANe,CAAhB;AAQA,SAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AACE,IAAA,OAAO,EAAE;AADX,GAAA,EAEM,KAAK,CAAC,WAAN,GAAoB;AAAC,IAAA,WAAW,EAAE,KAAK,CAAC;AAApB,GAApB,GAAuD,EAF7D,CAAA,EAGK,kBAHL,CAAA,EAIM,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,EAJxB,CAAA,EAKM,KAAK,GAAG;AAAC,IAAA;AAAD,GAAH,GAAa,EALxB,CAAA,EAMM,WAAW,GAAG;AAAC,IAAA,MAAM,EAAE;AAAC,MAAA,MAAM,EAAE;AAAT;AAAT,GAAH,GAAqC,EANtD,CAAA,EAMyD;AACvD,IAAA;AADuD,GANzD,CAAA,EAQM,WAAW,CAAC,MAAZ,GAAqB,CAArB,GAAyB;AAAC,IAAA,WAAW,EAAE;AAAd,GAAzB,GAAsD,EAR5D,CAAA,EASK,KAAK,CAAC,aAAN,CAAoB,CAAC,GAAG,aAAJ,EAAmB,GAAG,KAAK,CAAC,gCAAN,CAAuC,EAAvC,CAAtB,CAApB,CATL,CAAA,EAUM,QAAQ,GAAG;AAAC,IAAA,MAAM,EAAE;AAAT,GAAH,GAAwB,EAVtC,CAAA,EAWM,QAAQ,GAAG;AAAC,IAAA;AAAD,GAAH,GAAgB,EAX9B,CAAA;AAaD;;;;;;;;;AC7OD;;AAEA;;AAGA,MAAM,sBAAN,SAAqC,eAArC,CAA4F;AACnF,EAAA,OAAO,CAAC,IAAD,EAAkC;AAAC,IAAA;AAAD,GAAlC,EAA4D;AACxE,QAAI,IAAI,CAAC,QAAT,EAAmB;AACjB,YAAM;AAAC,QAAA,QAAQ,EAAE,WAAX;AAAwB,QAAA,SAAS,EAAE;AAAnC,UAAoD,IAA1D;AACA,YAAM;AAAC,QAAA,IAAD;AAAO,QAAA,SAAP;AAAkB,QAAA,SAAlB;AAA6B,QAAA,OAA7B;AAAsC,QAAA;AAAtC,UAAkD,6CAA8B,WAA9B,EAA2C,MAA3C,CAAxD;AAEA,YAAM,SAAS,GAAG,CAChB,IAAI,aAAa,GAAG,aAAH,GAAmB,EAApC,CADgB,EAEhB,GAAG,IAFa,EAGhB,GAAG,SAHa,EAIhB,IAAI,SAAS,CAAC,MAAV,KAAqB,CAArB,GAAyB,EAAzB,GAA8B,CAAC;AAAC,QAAA,SAAD;AAAY,QAAA;AAAZ,OAAD,CAAlC,CAJgB,CAAlB;AAOA,aAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,IADL,CAAA,EAEM,SAAS,CAAC,MAAV,GAAmB,CAAnB,GAAuB;AAAC,QAAA;AAAD,OAAvB,GAAqC,EAF3C,CAAA,EAE8C;AAC5C,QAAA;AAD4C,OAF9C,CAAA;AAKD,KAhBD,MAgBO;AACL,aAAO,IAAP;AACD;AACF;;AArByF;;AAwB5F,MAAM,SAAS,GAAG,IAAI,sBAAJ,EAAlB;AAEA;;;;AAGM,SAAU,iBAAV,CAA4B,IAA5B,EAAkD,MAAlD,EAAgE;AACpE,SAAO,SAAS,CAAC,GAAV,CAAc,IAAd,EAAoB;AAAC,IAAA;AAAD,GAApB,CAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCD;;AACA;;AAIA;;AAGA;;;;AALA,MAAM,OAAO,GAAG,iBAAI,OAApB;;;;;ACHA;;GAEG;AACH,mBAAwB,GAAW;IAC/B,IAAM,KAAK,GAAG,yCAAyC,CAAC;IAClD,IAAA,gCAAiD,EAAhD,eAAO,EAAE,eAAO,CAAiC;IACxD,OAAO,EAAC,OAAO,EAAE,OAA+B,EAAE,OAAO,SAAA,EAAC,CAAC;AAC/D,CAAC;AAJD,4BAIC;;;;;;;;;ACPD,IAAIh5U,IAAI,GAAG,aAAX;AACA,IAAIb,OAAO,GAAG,OAAd;AACA,IAAIq/Q,WAAW,GAAG,wDAAlB;AACA,IAAI21D,QAAQ,GAAG,CACd,MADc,EAEd,WAFc,EAGd,QAHc,EAId,OAJc,CAAf;AAMA,IAAI4qB,OAAO,GAAG,cAAd;AACA,IAAIC,MAAM,GAAG;AACZh/V,EAAAA,IAAI,EAAE,yBADM;AAEZ66G,EAAAA,GAAG,EAAE;AAFO,CAAb;AAIA,IAAIokP,YAAY,GAAG,CAClB;AACCj/V,EAAAA,IAAI,EAAE,UADP;AAEC66G,EAAAA,GAAG,EAAE;AAFN,CADkB,EAKlB;AACC76G,EAAAA,IAAI,EAAE,qBADP;AAEC66G,EAAAA,GAAG,EAAE;AAFN,CALkB,EASlB;AACC76G,EAAAA,IAAI,EAAE,cADP;AAEC66G,EAAAA,GAAG,EAAE;AAFN,CATkB,EAalB;AACC76G,EAAAA,IAAI,EAAE,gBADP;AAEC66G,EAAAA,GAAG,EAAE;AAFN,CAbkB,CAAnB;AAkBA,IAAIqkP,IAAI,GAAG,sBAAX;AACA,IAAIviW,OAAM,GAAG,6BAAb;AACA,IAAIwiW,KAAK,GAAG,0BAAZ;AACA,IAAIC,QAAQ,GAAG,0BAAf;AACA,IAAIrkJ,KAAK,GAAG,+BAAZ;AACA,IAAIskJ,UAAU,GAAG;AAChB3gV,EAAAA,IAAI,EAAE,KADU;AAEhBm8F,EAAAA,GAAG,EAAE;AAFW,CAAjB;AAIA,IAAIyI,KAAK,GAAG,CACX,KADW,EAEX,OAFW,CAAZ;AAIA,IAAIg8O,OAAO,GAAG;AACbC,EAAAA,QAAQ,EAAE,YADG;AAEbn7N,EAAAA,KAAK,EAAE,WAFM;AAGb0lE,EAAAA,KAAK,EAAE,uCAHM;AAIb,eAAa,0DAJA;AAKb,gBAAc,iCALD;AAMb,eAAa,kGANA;AAOb01J,EAAAA,cAAc,EAAE,0BAPH;AAQbC,EAAAA,UAAU,EAAE,WARC;AASbC,EAAAA,KAAK,EAAE,gEATM;AAUbn1V,EAAAA,KAAK,EAAE,uFAVM;AAWbumT,EAAAA,OAAO,EAAE,qBAXI;AAYb6uC,EAAAA,UAAU,EAAE,gBAZC;AAab3+O,EAAAA,MAAM,EAAE,uBAbK;AAcb4+O,EAAAA,IAAI,EAAE;AAdO,CAAd;AAgBA,IAAIC,eAAe,GAAG;AACrB,yBAAuB,QADF;AAErB,iCAA+B,QAFV;AAGrB,gCAA8B,QAHT;AAIrB,kBAAgB,UAJK;AAKrBC,EAAAA,YAAY,EAAE,QALO;AAMrB,cAAY,QANS;AAOrB57I,EAAAA,MAAM,EAAE,UAPa;AAQrB,+BAA6B,QARR;AASrB,0BAAwB,QATH;AAUrB67I,EAAAA,UAAU,EAAE,QAVS;AAWrBxyB,EAAAA,IAAI,EAAE,SAXe;AAYrB,eAAa,QAZQ;AAarB,0BAAwB;AAbH,CAAtB;AAeA,IAAIyyB,gBAAgB,GAAG;AACtBzyB,EAAAA,IAAI,EAAE,GADgB;AAEtB,eAAa;AAFS,CAAvB;AAIA,IAAI0yB,KAAK,GAAG;AACXtjW,EAAAA,MAAM,EAAE,sBADG;AAEXujW,EAAAA,OAAO,EAAE,CACR,YADQ,EAER,UAFQ,EAGR,QAHQ;AAFE,CAAZ;AAQA,IAAIC,GAAG,GAAG;AACTngW,EAAAA,IAAI,EAAEA,IADG;AAETb,EAAAA,OAAO,EAAEA,OAFA;AAGTq/Q,EAAAA,WAAW,EAAEA,WAHJ;AAIT21D,EAAAA,QAAQ,EAAEA,QAJD;AAKT4qB,EAAAA,OAAO,EAAEA,OALA;AAMTC,EAAAA,MAAM,EAAEA,MANC;AAOTC,EAAAA,YAAY,EAAEA,YAPL;AAQTC,EAAAA,IAAI,EAAEA,IARG;AASTviW,EAAAA,MAAM,EAAEA,OATC;AAUTwiW,EAAAA,KAAK,EAAEA,KAVE;AAWTC,EAAAA,QAAQ,EAAEA,QAXD;AAYTrkJ,EAAAA,KAAK,EAAEA,KAZE;AAaTskJ,EAAAA,UAAU,EAAEA,UAbH;AAcT/7O,EAAAA,KAAK,EAAEA,KAdE;AAeTg8O,EAAAA,OAAO,EAAEA,OAfA;AAgBTO,EAAAA,eAAe,EAAEA,eAhBR;AAiBTG,EAAAA,gBAAgB,EAAEA,gBAjBT;AAkBTC,EAAAA,KAAK,EAAEA;AAlBE,CAAV;AAqBA,MAAMG,UAAU,GAAG,MAAnB;AACA,MAAMC,QAAQ,GAAG,MAAjB;AACA,MAAMC,SAAS,GAAG;AACdjoF,EAAAA,UAAU,EAAE,MADE;AAEdt5Q,EAAAA,KAAK,EAAE;AAAEk1P,IAAAA,KAAK,EAAEmsG;AAAT,GAFO;AAGdl7E,EAAAA,KAAK,EAAE;AACH,mBAAe;AACXj2Q,MAAAA,IAAI,EAAEmxV;AADK,KADZ;AAIH,mBAAe;AACXnxV,MAAAA,IAAI,EAAEmxV;AADK;AAJZ,GAHO;AAWdp4V,EAAAA,IAAI,EAAE;AACFwzV,IAAAA,WAAW,EAAE4E,UADX;AAEF1E,IAAAA,SAAS,EAAE2E,QAFT;AAGFxE,IAAAA,SAAS,EAAEuE;AAHT;AAXQ,CAAlB;;AAkBA,MAAMG,SAAS,GAAG,SAAlB;AACA,MAAMC,UAAU,GAAG;AACfnoF,EAAAA,UAAU,EAAE,MADG;AAEf74D,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAEsxV;AAAR,GAFU;AAGfh/I,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAEsxV;AAAR,GAHS;AAIfvtU,EAAAA,IAAI,EAAE;AAAEo/O,IAAAA,MAAM,EAAEmuF,SAAV;AAAqBhuF,IAAAA,WAAW,EAAE;AAAlC,GAJS;AAKfzlQ,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEmuF;AAAV,GALS;AAMfjjH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAEsxV;AAAR,GANS;AAOft6V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEmuF;AAAV,GAPQ;AAQfv4I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAEsxV,SAAR;AAAmBhuF,IAAAA,WAAW,EAAE,GAAhC;AAAqCrsQ,IAAAA,IAAI,EAAE;AAA3C,GARO;AASf8B,EAAAA,IAAI,EAAE;AACFszV,IAAAA,YAAY,EAAE,GADZ;AAEF5qE,IAAAA,IAAI,EAAE,IAFJ;AAGFgrE,IAAAA,SAAS,EAAE,SAHT;AAIF+E,IAAAA,WAAW,EAAE,CAJX;AAKFhF,IAAAA,SAAS,EAAE,GALT;AAMFG,IAAAA,YAAY,EAAE,EANZ;AAOFpD,IAAAA,QAAQ,EAAE,CAPR;AAQFwD,IAAAA,SAAS,EAAE;AART,GATS;AAmBfxE,EAAAA,QAAQ,EAAE;AACN9mE,IAAAA,IAAI,EAAE,KADA;AAENgwE,IAAAA,SAAS,EAAE;AAFL,GAnBK;AAuBfntE,EAAAA,MAAM,EAAE;AACJqlE,IAAAA,aAAa,EAAE,QADX;AAEJ+H,IAAAA,aAAa,EAAE,EAFX;AAGJlE,IAAAA,UAAU,EAAE,EAHR;AAIJD,IAAAA,UAAU,EAAE;AAJR,GAvBO;AA6Bfv8T,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CACN,SADM,EAEN,SAFM,EAGN,SAHM,EAIN,SAJM,EAKN,SALM,EAMN,SANM,EAON,SAPM,EAQN,SARM,EASN,SATM,EAUN,SAVM;AADP;AA7BQ,CAAnB;;AA6CA,MAAMywL,WAAW,GAAG,SAApB;AACA,MAAMC,SAAS,GAAG,SAAlB;AACA,MAAMC,eAAe,GAAG,MAAxB;AACA,MAAMC,eAAe,GAAG,MAAxB;AACA,MAAMC,eAAe,GAAG,SAAxB;AACA,MAAMC,UAAU,GAAG,MAAnB;AACA,MAAMC,oBAAoB,GAAG;AACzB1hJ,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAE2xV;AAAR,GADoB;AAEzBr/I,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAE2xV;AAAR,GAFmB;AAGzB54V,EAAAA,IAAI,EAAE;AACFwzV,IAAAA,WAAW,EAAEqF,SADX;AAEFnwE,IAAAA,IAAI,EAAE,IAFJ;AAGFgrE,IAAAA,SAAS,EAAEmF,SAHT;AAIFpF,IAAAA,SAAS,EAAE,CAJT;AAKF0F,IAAAA,UAAU,EAAEL,eALV;AAMFH,IAAAA,aAAa,EAAE,EANb;AAOFS,IAAAA,UAAU,EAAEL,eAPV;AAQFlF,IAAAA,SAAS,EAAEgF,SART;AASFrI,IAAAA,QAAQ,EAAE,EATR;AAUF6I,IAAAA,aAAa,EAAE,EAVb;AAWFvwE,IAAAA,YAAY,EAAE,EAXZ;AAYF8qE,IAAAA,YAAY,EAAE;AAZZ,GAHmB;AAiBzBpE,EAAAA,QAAQ,EAAE;AACN9mE,IAAAA,IAAI,EAAE;AADA,GAjBe;AAoBzBrY,EAAAA,UAAU,EAAE2oF,eApBa;AAqBzB52O,EAAAA,KAAK,EAAE;AACHn7G,IAAAA,IAAI,EAAE+xV;AADH,GArBkB;AAwBzBztE,EAAAA,MAAM,EAAE;AACJ4tE,IAAAA,UAAU,EAAEF,UADR;AAEJN,IAAAA,aAAa,EAAE,EAFX;AAGJzlV,IAAAA,OAAO,EAAE,CAHL;AAIJuhV,IAAAA,UAAU,EAAE,EAJR;AAKJD,IAAAA,UAAU,EAAE,QALR;AAMJ4E,IAAAA,UAAU,EAAEH,UANR;AAOJI,IAAAA,aAAa,EAAE,EAPX;AAQJvwE,IAAAA,YAAY,EAAE;AARV,GAxBiB;AAkCzB99P,EAAAA,IAAI,EAAE;AACFo/O,IAAAA,MAAM,EAAEwuF,WADN;AAEFruF,IAAAA,WAAW,EAAE;AAFX,GAlCmB;AAsCzBzlQ,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEwuF,WAAV;AAAuBruF,IAAAA,WAAW,EAAE;AAApC,GAtCmB;AAuCzBj1B,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAE2xV;AAAR,GAvCmB;AAwCzB3gU,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CACN,SADM,EAEN,SAFM,EAGN,SAHM,EAIN,SAJM,EAKN,SALM,EAMN,SANM,EAON,SAPM,EAQN,SARM,EASN,SATM,EAUN,SAVM,EAWN,SAXM,EAYN,SAZM,CADP;AAeH8uF,IAAAA,SAAS,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CAfR;AAgBH49F,IAAAA,OAAO,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C;AAhBN,GAxCkB;AA0DzB78I,EAAAA,KAAK,EAAE;AACH+2D,IAAAA,MAAM,EAAE,IADL;AAEH9wQ,IAAAA,KAAK,EAAE;AAFJ,GA1DkB;AA8DzBA,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEwuF;AAAV,GA9DkB;AA+DzBU,EAAAA,GAAG,EAAE;AACDC,IAAAA,UAAU,EAAE,CADX;AAEDtyV,IAAAA,IAAI,EAAE2xV,WAFL;AAGDxuF,IAAAA,MAAM,EAAE;AAHP,GA/DoB;AAoEzBrzQ,EAAAA,KAAK,EAAE;AACHy1M,IAAAA,MAAM,EAAE,OADL;AAEH8mE,IAAAA,QAAQ,EAAE,EAFP;AAGHsB,IAAAA,UAAU,EAAE,GAHT;AAIHxxQ,IAAAA,MAAM,EAAE;AAJL;AApEkB,CAA7B;;AA4EA,MAAMo2V,WAAW,GAAG,MAApB;AACA,MAAMC,YAAY,GAAG;AACjBr3O,EAAAA,KAAK,EAAE;AACHn7G,IAAAA,IAAI,EAAE;AADH,GADU;AAIjBuwM,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAEuyV;AAAR,GAJY;AAKjBjgJ,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAEuyV;AAAR,GALW;AAMjBxuU,EAAAA,IAAI,EAAE;AAAEo/O,IAAAA,MAAM,EAAEovF;AAAV,GANW;AAOjB10V,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEovF;AAAV,GAPW;AAQjBlkH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAEuyV;AAAR,GARW;AASjBv7V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEovF;AAAV,GATU;AAUjBx5I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAEuyV,WAAR;AAAqBt7V,IAAAA,IAAI,EAAE;AAA3B,GAVS;AAWjB8B,EAAAA,IAAI,EAAE;AACF6rM,IAAAA,MAAM,EAAE,KADN;AAEF68E,IAAAA,IAAI,EAAE,IAFJ;AAGFgrE,IAAAA,SAAS,EAAE,SAHT;AAIF+E,IAAAA,WAAW,EAAE,CAJX;AAKFU,IAAAA,UAAU,EAAE,SALV;AAMFvF,IAAAA,YAAY,EAAE,CANZ;AAOFC,IAAAA,SAAS,EAAE,SAPT;AAQFrD,IAAAA,QAAQ,EAAE,IARR;AASF6I,IAAAA,aAAa,EAAE,EATb;AAUFK,IAAAA,eAAe,EAAE;AAVf,GAXW;AAuBjBnuE,EAAAA,MAAM,EAAE;AACJqlE,IAAAA,aAAa,EAAE,QADX;AAEJ+H,IAAAA,aAAa,EAAE,EAFX;AAGJlE,IAAAA,UAAU,EAAE;AAHR,GAvBS;AA4BjBx8T,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CACN,SADM,EAEN,SAFM,EAGN,SAHM,EAIN,SAJM,EAKN,SALM,EAMN,SANM,EAON,SAPM,EAQN,SARM,EASN,SATM,EAUN,SAVM;AADP;AA5BU,CAArB;;AA4CA,MAAMwxL,gBAAgB,GAAG,EAAzB;AACA,MAAMC,kBAAkB,GAAG,QAA3B;AACA,MAAMC,SAAS,GAAG,2BAAlB;AACA,MAAMlB,aAAa,GAAG,IAAtB;AACA,MAAMmB,eAAe,GAAG,QAAxB;AACA,MAAMC,WAAW,GAAG,SAApB,EACA;AACA;AACA;;AACA,MAAMC,SAAS,GAAG,gCAAlB;AACA,MAAMN,eAAe,GAAG,QAAxB;AACA,MAAML,aAAa,GAAG,EAAtB;AACA,MAAMY,YAAY,GAAG;AACjB,gBAAc,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CADG;AAEjB,YAAU,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,CAFO;AAGjB,kBAAgB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CAHC;AAIjB,WAAS,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE;AAJQ,CAArB;AAMA,MAAMC,YAAY,GAAG;AACjB7pF,EAAAA,UAAU,EAAE,SADK;AAEjBt5Q,EAAAA,KAAK,EAAE;AACHy1M,IAAAA,MAAM,EAAE,OADL;AAEHy/C,IAAAA,KAAK,EAAE,SAFJ;AAGH8nB,IAAAA,IAAI,EAAEimF,SAHH;AAIH1mF,IAAAA,QAAQ,EAAEqmF,gBAJP;AAKH/kF,IAAAA,UAAU,EAAEglF;AALT,GAFU;AASjBpiJ,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAE8yV;AAAR,GATY;AAUjBxgJ,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAE8yV;AAAR,GAVW;AAWjB/uU,EAAAA,IAAI,EAAE;AAAEo/O,IAAAA,MAAM,EAAE2vF,WAAV;AAAuBxvF,IAAAA,WAAW,EAAE;AAApC,GAXW;AAYjBzlQ,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAE2vF;AAAV,GAZW;AAajBzkH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAE8yV;AAAR,GAbW;AAcjB97V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAE2vF;AAAV,GAdU;AAejB/5I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAE8yV,WAAR;AAAqB77V,IAAAA,IAAI,EAAE;AAA3B,GAfS;AAgBjB8B,EAAAA,IAAI,EAAE;AACF65V,IAAAA,SADE;AAEFlB,IAAAA,aAFE;AAGFmB,IAAAA,eAHE;AAIFE,IAAAA,SAJE;AAKFX,IAAAA,aALE;AAMFK,IAAAA;AANE,GAhBW;AAwBjBhK,EAAAA,KAAK,EAAE;AACHiE,IAAAA,UAAU,EAAE,CADT;AAEHC,IAAAA,YAAY,EAAE,CAFX;AAGHpD,IAAAA,QAAQ,EAAE;AAHP,GAxBU;AA6BjBb,EAAAA,KAAK,EAAE;AACHiB,IAAAA,aAAa,EAAE,QADZ;AAEH/nE,IAAAA,SAAS,EAAE,EAFR;AAGHD,IAAAA,SAAS,EAAE,EAHR;AAIH4nE,IAAAA,QAAQ,EAAE,CAJP;AAKH2J,IAAAA,UAAU,EAAE,MALT;AAMHC,IAAAA,UAAU,EAAE,CANT;AAOHC,IAAAA,MAAM,EAAE,CAAC,EAPN;AAQHC,IAAAA,MAAM,EAAE,CAAC;AARN,GA7BU;AAuCjB/uE,EAAAA,MAAM,EAAE;AACJsuE,IAAAA,SADI;AAEJlB,IAAAA,aAFI;AAGJnE,IAAAA,UAAU,EAAE,QAHR;AAIJwF,IAAAA,SAJI;AAKJX,IAAAA,aALI;AAMJK,IAAAA;AANI,GAvCS;AA+CjBzhU,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE8xL,YAAY,CAAC,YAAD,CADnB;AAEHhjG,IAAAA,SAAS,EAAEgjG,YAAY,CAAC,cAAD,CAFpB;AAGHpF,IAAAA,OAAO,EAAEoF,YAAY,CAAC,QAAD,CAHlB;AAIHx4G,IAAAA,OAAO,EAAEw4G,YAAY,CAAC,QAAD,CAJlB;AAKHnF,IAAAA,IAAI,EAAEmF,YAAY,CAAC,QAAD;AALf;AA/CU,CAArB;;AAwDA,MAAMM,WAAW,GAAG,SAApB;AACA,MAAMC,WAAW,GAAG,SAApB;AACA,MAAMC,WAAW,GAAG;AAChBpqF,EAAAA,UAAU,EAAE,SADI;AAEhB74D,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAEszV;AAAR,GAFW;AAGhBhhJ,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAEszV;AAAR,GAHU;AAIhBvvU,EAAAA,IAAI,EAAE;AAAEo/O,IAAAA,MAAM,EAAEmwF;AAAV,GAJU;AAKhBz1V,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEmwF;AAAV,GALU;AAMhBjlH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAEszV;AAAR,GANU;AAOhBt8V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEmwF;AAAV,GAPS;AAQhBv6I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAEszV,WAAR;AAAqBr8V,IAAAA,IAAI,EAAE;AAA3B,GARQ;AAShB8B,EAAAA,IAAI,EAAE;AACFwzV,IAAAA,WAAW,EAAEgH,WADX;AAEFjH,IAAAA,WAAW,EAAE,GAFX;AAGFE,IAAAA,SAAS,EAAE,GAHT;AAIF0F,IAAAA,UAAU,EAAEqB,WAJV;AAKF3G,IAAAA,SAAS,EAAE2G,WALT;AAMFxG,IAAAA,SAAS,EAAE,GANT;AAOFoF,IAAAA,UAAU,EAAEoB;AAPV,GATU;AAkBhBhL,EAAAA,QAAQ,EAAE;AACN9mE,IAAAA,IAAI,EAAE;AADA,GAlBM;AAqBhBgnE,EAAAA,KAAK,EAAE;AACHhnE,IAAAA,IAAI,EAAE,IADH;AAEH8nE,IAAAA,QAAQ,EAAE;AAFP,GArBS;AAyBhBb,EAAAA,KAAK,EAAE;AACH9jJ,IAAAA,MAAM,EAAE,KADL;AAEH68E,IAAAA,IAAI,EAAE,IAFH;AAGH8nE,IAAAA,QAAQ,EAAE;AAHP,GAzBS;AA8BhBjlE,EAAAA,MAAM,EAAE;AACJotE,IAAAA,aAAa,EAAE,EADX;AAEJzlV,IAAAA,OAAO,EAAE,CAFL;AAGJuhV,IAAAA,UAAU,EAAE,EAHR;AAIJD,IAAAA,UAAU,EAAE;AAJR,GA9BQ;AAoChBv8T,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CACN,SADM,EAEN,SAFM,EAGN,SAHM,EAIN,SAJM,EAKN,SALM,EAMN,SANM,EAON,SAPM,EAQN,SARM,EASN,SATM,EAUN,SAVM;AADP;AApCS,CAApB;;AAoDA,MAAMuyL,WAAW,GAAG,SAApB;AACA,MAAMC,QAAQ,GAAG;AACbtqF,EAAAA,UAAU,EAAE,MADC;AAEb74D,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAEyzV;AAAR,GAFQ;AAGbnhJ,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAEyzV;AAAR,GAHO;AAIb1vU,EAAAA,IAAI,EAAE;AAAEo/O,IAAAA,MAAM,EAAEswF;AAAV,GAJO;AAKb51V,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEswF;AAAV,GALO;AAMbplH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAEyzV;AAAR,GANO;AAObz8V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEswF;AAAV,GAPM;AAQb16I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAEyzV;AAAR,GARK;AASb16V,EAAAA,IAAI,EAAE;AACFuzV,IAAAA,WAAW,EAAE,GADX;AAEF7qE,IAAAA,IAAI,EAAE,IAFJ;AAGFkrE,IAAAA,YAAY,EAAE,CAHZ;AAIFpD,IAAAA,QAAQ,EAAE,CAJR;AAKFwD,IAAAA,SAAS,EAAE,GALT;AAMF0F,IAAAA,eAAe,EAAE;AANf,GATO;AAiBblK,EAAAA,QAAQ,EAAE;AACN9mE,IAAAA,IAAI,EAAE;AADA,GAjBG;AAoBbgnE,EAAAA,KAAK,EAAE;AACH+D,IAAAA,SAAS,EAAE;AADR,GApBM;AAuBb9D,EAAAA,KAAK,EAAE;AACHiL,IAAAA,QAAQ,EAAE,CAAC,CAAD,CADP;AAEHnH,IAAAA,SAAS,EAAE;AAFR,GAvBM;AA2BbloE,EAAAA,MAAM,EAAE;AACJotE,IAAAA,aAAa,EAAE,EADX;AAEJzlV,IAAAA,OAAO,EAAE,CAFL;AAGJshV,IAAAA,UAAU,EAAE;AAHR,GA3BK;AAgCbv8T,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E;AADP;AAhCM,CAAjB;;AAqCA,MAAM0yL,WAAW,GAAG,SAApB;AACA,MAAMC,WAAW,GAAG,SAApB;AACA,MAAMC,iBAAiB,GAAG,SAA1B;AACA,MAAMhnF,IAAI,GAAG,MAAb;AACA,MAAMinF,WAAW,GAAG,MAApB;AACA,MAAMC,UAAU,GAAG,MAAnB;AACA,MAAMvH,SAAS,GAAG,SAAlB;AACA,MAAMwH,eAAe,GAAG,EAAxB;AACA,MAAMC,cAAc,GAAG;AACnB,iBAAe,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CADI;AAEnB,iBAAe,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CAFI;AAGnB,iBAAe,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CAHI;AAInB,mBAAiB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CAJE;AAKnB,oBAAkB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CALC;AAMnB,kBAAgB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CANG;AAOnB,kBAAgB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CAPG;AAQnB,gBAAc,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E,CARK;AASnB,eAAa,CAAC,SAAD,EAAY,SAAZ,CATM;AAUnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,CAVD;AAWnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,CAXD;AAYnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,CAZD;AAanB,oBAAkB,CAAC,SAAD,EAAY,SAAZ,CAbC;AAcnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,CAdD;AAenB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,CAfD;AAgBnB,uBAAqB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,CAhBF;AAiBnB,uBAAqB,CAAC,SAAD,EAAY,UAAZ,EAAwB,SAAxB,EAAmC,SAAnC,CAjBF;AAkBnB,qBAAmB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,CAlBA;AAmBnB,uBAAqB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,CAnBF;AAoBnB,uBAAqB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,CApBF;AAqBnB,qBAAmB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,CArBA;AAsBnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CAtBD;AAuBnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CAvBD;AAwBnB,oBAAkB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CAxBC;AAyBnB,sBAAoB,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,EAA8E,SAA9E;AAzBD,CAAvB;AA2BA,MAAMC,mBAAmB,GAAG;AACxB/qF,EAAAA,UAAU,EAAE0qF,iBADY;AAExBhkW,EAAAA,KAAK,EAAE;AACHy1M,IAAAA,MAAM,EAAE,OADL;AAEH8mE,IAAAA,QAAQ,EAAE4nF,eAFP;AAGHnnF,IAAAA,IAAI,EAAEA;AAHH,GAFiB;AAOxB27E,EAAAA,KAAK,EAAE;AACH7jJ,IAAAA,MAAM,EAAE,IADL;AAEH2nJ,IAAAA,WAAW,EAAEsH,WAFV;AAGHvH,IAAAA,WAAW,EAAE,CAHV;AAIH7qE,IAAAA,IAAI,EAAE,KAJH;AAKHiwE,IAAAA,aAAa,EAAE,EALZ;AAMHkB,IAAAA,SAAS,EAAEmB,WANR;AAOHrH,IAAAA,UAAU,EAAE,CAPT;AAQHE,IAAAA,SAAS,EAAEiH,WARR;AASHtK,IAAAA,QAAQ,EAAE,CATP;AAUH6I,IAAAA,aAAa,EAAE,EAVZ;AAWHvwE,IAAAA,YAAY,EAAE,EAXX;AAYHkxE,IAAAA,SAAS,EAAEjmF;AAZR,GAPiB;AAqBxB47E,EAAAA,KAAK,EAAE;AACH9jJ,IAAAA,MAAM,EAAE,KADL;AAEH0nJ,IAAAA,WAAW,EAAE,CAFV;AAGH7qE,IAAAA,IAAI,EAAE,IAHH;AAIHgrE,IAAAA,SAAS,EAAEA,SAJR;AAKHD,IAAAA,SAAS,EAAE,CALR;AAMHkF,IAAAA,aAAa,EAAE,EANZ;AAOHkB,IAAAA,SAAS,EAAEmB,WAPR;AAQHpH,IAAAA,YAAY,EAAE,CARX;AASHn3I,IAAAA,KAAK,EAAE,KATJ;AAUH48I,IAAAA,aAAa,EAAE,EAVZ;AAWHvwE,IAAAA,YAAY,EAAE,EAXX;AAYHkxE,IAAAA,SAAS,EAAEjmF,IAZR;AAaHqmF,IAAAA,UAAU,EAAE,CAbT;AAcHE,IAAAA,MAAM,EAAE,CAAC,EAdN;AAeHD,IAAAA,MAAM,EAAE;AAfL,GArBiB;AAsCxB9uE,EAAAA,MAAM,EAAE;AACJotE,IAAAA,aAAa,EAAE,EADX;AAEJkB,IAAAA,SAAS,EAAEmB,WAFP;AAGJvG,IAAAA,UAAU,EAAE,GAHR;AAIJ4E,IAAAA,aAAa,EAAE,EAJX;AAKJvwE,IAAAA,YAAY,EAAE,EALV;AAMJkxE,IAAAA,SAAS,EAAEjmF,IANP;AAOJrL,IAAAA,MAAM,EAAE,OAPJ;AAQJtlQ,IAAAA,MAAM,EAAE;AARJ,GAtCgB;AAgDxB6jR,EAAAA,IAAI,EAAE;AACF7c,IAAAA,MAAM,EAAE;AADN,GAhDkB;AAmDxBnyO,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAEgzL,cAAc,CAAC,kBAAD,CADrB;AAEHlkG,IAAAA,SAAS,EAAEkkG,cAAc,CAAC,kBAAD,CAFtB;AAGHtG,IAAAA,OAAO,EAAEsG,cAAc,CAAC,kBAAD,CAHpB;AAIH15G,IAAAA,OAAO,EAAE05G,cAAc,CAAC,gBAAD,CAJpB;AAKHrG,IAAAA,IAAI,EAAEqG,cAAc,CAAC,aAAD;AALjB,GAnDiB;AA0DxB5hJ,EAAAA,IAAI,EAAE;AACFtyM,IAAAA,IAAI,EAAE4zV;AADJ,GA1DkB;AA6DxBvlH,EAAAA,IAAI,EAAE;AACFruO,IAAAA,IAAI,EAAE4zV;AADJ,GA7DkB;AAgExB7vU,EAAAA,IAAI,EAAE;AACFihO,IAAAA,KAAK,EAAE4uG,WADL;AAEFzwF,IAAAA,MAAM,EAAEywF,WAFN;AAGFtwF,IAAAA,WAAW,EAAE;AAHX,GAhEkB;AAqExBlD,EAAAA,KAAK,EAAE;AACHpb,IAAAA,KAAK,EAAE4uG,WADJ;AAEHzwF,IAAAA,MAAM,EAAEywF,WAFL;AAGHtwF,IAAAA,WAAW,EAAE,CAHV;AAIHrsQ,IAAAA,IAAI,EAAE;AAJH,GArEiB;AA2ExB4G,EAAAA,IAAI,EAAE;AACFslQ,IAAAA,MAAM,EAAEywF,WADN;AAEFtwF,IAAAA,WAAW,EAAE;AAFX,GA3EkB;AA+ExBvyD,EAAAA,KAAK,EAAE;AACH+2D,IAAAA,MAAM,EAAE;AADL,GA/EiB;AAkFxB5/J,EAAAA,IAAI,EAAE;AACF4kK,IAAAA,IAAI,EAAEknF,UADJ;AAEFhvG,IAAAA,KAAK,EAAE4uG,WAFL;AAGFvnF,IAAAA,QAAQ,EAAE,EAHR;AAIFtkE,IAAAA,KAAK,EAAE,QAJL;AAKF4lE,IAAAA,UAAU,EAAE,GALV;AAMF12Q,IAAAA,IAAI,EAAE;AANJ,GAlFkB;AA0FxBg/Q,EAAAA,KAAK,EAAE;AACHo8E,IAAAA,GAAG,EAAE;AACDryV,MAAAA,IAAI,EAAE4zV,WADL;AAEDzwF,MAAAA,MAAM,EAAE;AAFP;AADF,GA1FiB;AAgGxB5yD,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAE4zV;AAAR,GAhGmB;AAiGxB58V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEywF;AAAV,GAjGiB;AAkGxB76I,EAAAA,MAAM,EAAE;AAAE/4M,IAAAA,IAAI,EAAE4zV,WAAR;AAAqB38V,IAAAA,IAAI,EAAE;AAA3B;AAlGgB,CAA5B;AAqGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMm9V,WAAW,GAAG,SAApB;AACA,MAAMC,WAAW,GAAG,MAApB;AACA,MAAMtI,WAAW,GAAG,mBAApB;AACA,MAAMuI,iBAAiB,GAAG;AACtB/jJ,EAAAA,GAAG,EAAE;AAAEvwM,IAAAA,IAAI,EAAEo0V;AAAR,GADiB;AAEtB9hJ,EAAAA,IAAI,EAAE;AAAEtyM,IAAAA,IAAI,EAAEo0V;AAAR,GAFgB;AAGtBv2V,EAAAA,IAAI,EAAE;AAAEslQ,IAAAA,MAAM,EAAEixF;AAAV,GAHgB;AAItB/lH,EAAAA,IAAI,EAAE;AAAEruO,IAAAA,IAAI,EAAEo0V;AAAR,GAJgB;AAKtBp9V,EAAAA,KAAK,EAAE;AAAEmsQ,IAAAA,MAAM,EAAEixF;AAAV,GALe;AAMtBr7I,EAAAA,MAAM,EAAE;AAAEoqD,IAAAA,MAAM,EAAEixF;AAAV,GANc;AAOtBn/G,EAAAA,MAAM,EAAE;AAAEj1O,IAAAA,IAAI,EAAEo0V;AAAR,GAPc;AAQtBhrF,EAAAA,UAAU,EAAE,MARU;AAStBn9P,EAAAA,OAAO,EAAE;AACLw2B,IAAAA,GAAG,EAAE,EADA;AAELG,IAAAA,KAAK,EAAE,EAFF;AAGLF,IAAAA,MAAM,EAAE,EAHH;AAILC,IAAAA,IAAI,EAAE;AAJD,GATa;AAetBszO,EAAAA,KAAK,EAAE;AACH,mBAAe;AACXnJ,MAAAA,IAAI,EAAEi/E,WADK;AAEX1/E,MAAAA,QAAQ,EAAE;AAFC,KADZ;AAKH,mBAAe;AACXS,MAAAA,IAAI,EAAEi/E,WADK;AAEX1/E,MAAAA,QAAQ,EAAE;AAFC,KALZ;AASH,mBAAe;AACXS,MAAAA,IAAI,EAAEi/E,WADK;AAEX1/E,MAAAA,QAAQ,EAAE;AAFC;AATZ,GAfe;AA6BtBv8Q,EAAAA,KAAK,EAAE;AACHg9Q,IAAAA,IAAI,EAAEi/E,WADH;AAEH1/E,IAAAA,QAAQ,EAAE,EAFP;AAGHsB,IAAAA,UAAU,EAAE,MAHT;AAIHr5P,IAAAA,EAAE,EAAE,CAAC,CAJF;AAKHixL,IAAAA,MAAM,EAAE;AALL,GA7Be;AAoCtBxsM,EAAAA,IAAI,EAAE;AACF0zV,IAAAA,SAAS,EAAE4H,WADT;AAEFzH,IAAAA,SAAS,EAAEyH,WAFT;AAGFzvJ,IAAAA,MAAM,EAAE,KAHN;AAIF68E,IAAAA,IAAI,EAAE;AAJJ,GApCgB;AA0CtBzwP,EAAAA,KAAK,EAAE;AACHkwI,IAAAA,QAAQ,EAAE,CACN,SADM,EAEN,SAFM,EAGN,SAHM,EAIN,SAJM,EAKN,SALM,EAMN,SANM,EAON,SAPM,EAQN,SARM,EASN,SATM,EAUN,SAVM,EAWN,SAXM,EAYN,SAZM,CADP;AAeH0sL,IAAAA,OAAO,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB;AAfN;AA1Ce,CAA1B;;AA6DA,MAAM2G,SAAS,GAAGrD,GAAG,CAAChhW,OAAtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnqBA;eACe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDf;;;;AAEA,MAAM,KAAK,GAAG,oBAAd;AAEO,MAAM,eAAe,GAAG;AAC7B;;;AAGA,EAAA,OAAO,EAAE,EAJoB;;AAM7B;;;AAGA,EAAA,OAAO,EAAE,EAToB;;AAW7B;;;AAGA,EAAA,EAAE,EAAE,KAdyB;;AAgB7B;;;AAGA,EAAA,OAAO,EAAE,oBAnBoB;;AAqB7B;;;;;AAKA,EAAA,KAAK,EAAE,OA1BsB;;AA4B7B;;;AAGA,EAAA,mBAAmB,EAAE,KA/BQ;;AAiC7B;;;;;AAKA,EAAA,QAAQ,EAAE,UAtCmB;;AAwC7B;;;AAGA,EAAA,QAAQ,EAAE;AA3CmB,CAAxB;AAgDP;;;;;;;;AAKM,SAAU,UAAV,CAAqB,KAArB,EAA+B;AACnC,SAAO,MAAM,CAAC,KAAD,CAAN,CAAc,OAAd,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC,OAArC,CAA6C,IAA7C,EAAmD,MAAnD,CAAP;AACD;;AAEK,SAAU,kBAAV,CAA6B,EAA7B,EAAuC;AAC3C;AACA,MAAI,CAAC,sBAAsB,IAAtB,CAA2B,EAA3B,CAAL,EAAqC;AACnC,UAAM,IAAI,KAAJ,CAAU,iBAAV,CAAN;AACD;;AAED,SAAO,eAAa,QAAb,GAAwB,OAAxB,CAAgC,KAAhC,EAAuC,EAAvC,CAAP;AACD;;;;;;;;;;;ACpED;;;;;;;;;;;;;AAEA;;;;;;AAMM,SAAU,WAAV,CAAsB,KAAtB,EAAkC,WAAlC,EAAuE,QAAvE,EAAuF;AAC3F,MAAI,uBAAQ,KAAR,CAAJ,EAAoB;AAClB,WAAO,IAAI,KAAK,CAAC,GAAN,CAAW,CAAD,IAAO,WAAW,CAAC,wBAAS,CAAT,IAAc,CAAd,GAAkB,SAAS,CAAC,CAAD,EAAI,QAAJ,CAA5B,CAA5B,EAAwE,IAAxE,CAA6E,IAA7E,CAAkF,GAA7F;AACD;;AAED,MAAI,wBAAS,KAAT,CAAJ,EAAqB;AACnB,QAAI,OAAO,GAAG,EAAd;;AAEA,UAAM,EAAA,GAA0B,KAAhC;AAAA,UAAM;AAAC,MAAA,KAAD;AAAQ,MAAA;AAAR,QAAa,EAAnB;AAAA,UAAwB,IAAI,GAAA,MAAA,CAAA,EAAA,EAAtB,CAAA,OAAA,EAAA,OAAA,CAAsB,CAA5B;;AAEA,QAAI,KAAJ,EAAW;AACT,MAAA,OAAO,IAAI,OAAO,WAAW,CAAC,KAAD,CAAO,OAApC;AACD;;AAED,QAAI,KAAJ,EAAW;AACT,MAAA,OAAO,IAAI,aAAa,WAAW,CAAC,KAAD,CAAO,IAA1C;AACD;;AAED,UAAM,IAAI,GAAG,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAb;;AACA,QAAI,IAAI,CAAC,MAAL,GAAc,CAAlB,EAAqB;AACnB,MAAA,OAAO,IAAI,SAAX;;AACA,WAAK,MAAM,GAAX,IAAkB,IAAlB,EAAwB;AACtB,YAAI,GAAG,GAAI,IAAY,CAAC,GAAD,CAAvB,CADsB,CAGtB;;AACA,YAAI,GAAG,KAAK,SAAZ,EAAuB;AACrB;AACD;;AAED,YAAI,wBAAS,GAAT,CAAJ,EAAmB;AACjB,UAAA,GAAG,GAAG,SAAS,CAAC,GAAD,EAAM,QAAN,CAAf;AACD;;AAED,QAAA,OAAO,IAAI,uBAAuB,WAAW,CAAC,GAAD,CAAK,2BAA2B,WAAW,CAAC,GAAD,CAAK,YAA7F;AACD;;AACD,MAAA,OAAO,IAAI,UAAX;AACD;;AAED,WAAO,OAAO,IAAI,IAAlB,CAjCmB,CAiCK;AACzB;;AAED,SAAO,WAAW,CAAC,KAAD,CAAlB;AACD;;AAEK,SAAU,QAAV,CAAmB,QAAnB,EAAmC;AACvC,QAAM,KAAK,GAAU,EAArB;AAEA,SAAO,UAAqB,GAArB,EAAkC,KAAlC,EAA4C;AACjD,QAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,KAAK,IAA3C,EAAiD;AAC/C,aAAO,KAAP;AACD;;AACD,UAAM,GAAG,GAAG,KAAK,CAAC,OAAN,CAAc,IAAd,IAAsB,CAAlC;AACA,IAAA,KAAK,CAAC,MAAN,GAAe,GAAf;;AACA,QAAI,KAAK,CAAC,MAAN,GAAe,QAAnB,EAA6B;AAC3B,aAAO,UAAP;AACD;;AACD,QAAI,KAAK,CAAC,OAAN,CAAc,KAAd,KAAwB,CAA5B,EAA+B;AAC7B,aAAO,YAAP;AACD;;AACD,IAAA,KAAK,CAAC,IAAN,CAAW,KAAX;AACA,WAAO,KAAP;AACD,GAdD;AAeD;AAED;;;;;AAGM,SAAU,SAAV,CAAoB,GAApB,EAA8B,QAA9B,EAA8C;AAClD,SAAO,IAAI,CAAC,SAAL,CAAe,GAAf,EAAoB,QAAQ,CAAC,QAAD,CAA5B,CAAP;AACD;;;;;;;;;AC7ED;;;;;;;;AAQM,SAAU,iBAAV,CACJ,KADI,EAEJ,UAFI,EAGJ,OAHI,EAIJ,OAJI,EAIW;AAEf,MAAI,CAAC,GAAG,KAAK,CAAC,OAAN,GAAgB,OAAxB;;AACA,MAAI,CAAC,GAAG,UAAU,CAAC,KAAf,GAAuB,MAAM,CAAC,UAAlC,EAA8C;AAC5C,IAAA,CAAC,GAAG,CAAC,KAAK,CAAC,OAAP,GAAiB,OAAjB,GAA2B,UAAU,CAAC,KAA1C;AACD;;AAED,MAAI,CAAC,GAAG,KAAK,CAAC,OAAN,GAAgB,OAAxB;;AACA,MAAI,CAAC,GAAG,UAAU,CAAC,MAAf,GAAwB,MAAM,CAAC,WAAnC,EAAgD;AAC9C,IAAA,CAAC,GAAG,CAAC,KAAK,CAAC,OAAP,GAAiB,OAAjB,GAA2B,UAAU,CAAC,MAA1C;AACD;;AAED,SAAO;AAAC,IAAA,CAAD;AAAI,IAAA;AAAJ,GAAP;AACD;;;;;;;;;ACvBD;;AACA;;AACA;;AAEA;;;AAGM,MAAO,OAAP,CAAc;AAgBlB;;;;;AAKA,EAAA,WAAA,CAAY,OAAZ,EAA6B;AAC3B,SAAK,OAAL,GAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,yBAAP,CAAA,EAA2B,OAA3B,CAAZ;AACA,UAAM,SAAS,GAAG,KAAK,OAAL,CAAa,EAA/B,CAF2B,CAI3B;;AACA,SAAK,IAAL,GAAY,KAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB,CAAZ,CAL2B,CAO3B;;AACA,QAAI,CAAC,KAAK,OAAL,CAAa,mBAAd,IAAqC,CAAC,QAAQ,CAAC,cAAT,CAAwB,KAAK,OAAL,CAAa,OAArC,CAA1C,EAAyF;AACvF,YAAM,KAAK,GAAG,QAAQ,CAAC,aAAT,CAAuB,OAAvB,CAAd;AACA,MAAA,KAAK,CAAC,YAAN,CAAmB,IAAnB,EAAyB,KAAK,OAAL,CAAa,OAAtC;AACA,MAAA,KAAK,CAAC,SAAN,GAAkB,kCAAmB,SAAnB,CAAlB;AAEA,YAAM,IAAI,GAAG,QAAQ,CAAC,IAAtB;;AACA,UAAI,IAAI,CAAC,UAAL,CAAgB,MAAhB,GAAyB,CAA7B,EAAgC;AAC9B,QAAA,IAAI,CAAC,YAAL,CAAkB,KAAlB,EAAyB,IAAI,CAAC,UAAL,CAAgB,CAAhB,CAAzB;AACD,OAFD,MAEO;AACL,QAAA,IAAI,CAAC,WAAL,CAAiB,KAAjB;AACD;AACF,KAnB0B,CAqB3B;AACA;;;AACA,SAAK,EAAL,GAAU,QAAQ,CAAC,cAAT,CAAwB,SAAxB,CAAV;;AACA,QAAI,CAAC,KAAK,EAAV,EAAc;AACZ,WAAK,EAAL,GAAU,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAV;AACA,WAAK,EAAL,CAAQ,YAAR,CAAqB,IAArB,EAA2B,SAA3B;AACA,WAAK,EAAL,CAAQ,SAAR,CAAkB,GAAlB,CAAsB,YAAtB;AAEA,MAAA,QAAQ,CAAC,IAAT,CAAc,WAAd,CAA0B,KAAK,EAA/B;AACD;AACF;AAED;;;;;AAGQ,EAAA,cAAc,CAAC,OAAD,EAAe,KAAf,EAAkC,IAAlC,EAA6C,KAA7C,EAAuD;AAC3E;AAEA;AACA,QAAI,KAAK,IAAI,IAAT,IAAiB,KAAK,KAAK,EAA/B,EAAmC;AACjC,WAAK,EAAL,CAAQ,SAAR,CAAkB,MAAlB,CAAyB,SAAzB,EAAoC,GAAG,KAAK,OAAL,CAAa,KAAK,QAAzD;AACA;AACD,KAP0E,CAS3E;;;AACA,SAAK,EAAL,CAAQ,SAAR,GAAoB,8BAAY,KAAZ,EAAmB,KAAK,OAAL,CAAa,QAAhC,EAA0C,KAAK,OAAL,CAAa,QAAvD,CAApB,CAV2E,CAY3E;;AACA,SAAK,EAAL,CAAQ,SAAR,CAAkB,GAAlB,CAAsB,SAAtB,EAAiC,GAAG,KAAK,OAAL,CAAa,KAAK,QAAtD;AAEA,UAAM;AAAC,MAAA,CAAD;AAAI,MAAA;AAAJ,QAAS,iCACb,KADa,EAEb,KAAK,EAAL,CAAQ,qBAAR,EAFa,EAGb,KAAK,OAAL,CAAa,OAHA,EAIb,KAAK,OAAL,CAAa,OAJA,CAAf;AAOA,SAAK,EAAL,CAAQ,YAAR,CAAqB,OAArB,EAA8B,QAAQ,CAAC,aAAa,CAAC,IAArD;AACD;;AAhFiB;;;;;;;;;;;;;;;APTpB;;AAIA;;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAHA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAJA,MAAM,OAAO,GAAG,iBAAI,OAApB;;;AAQA;;;;;;AAMc,kBAAW,IAAX,EAAuB,GAAvB,EAAoC;AAChD,QAAM,OAAO,GAAG,IAAI,gBAAJ,CAAY,GAAZ,CAAhB;AAEA,EAAA,IAAI,CAAC,OAAL,CAAa,OAAO,CAAC,IAArB,EAA2B,GAA3B;AAEA,SAAO,OAAP;AACD;;;;;;;;;AQxBD;;;AAGc,kBAAW,MAAX,EAA2B,GAA3B,EAAwC,IAAxC,EAAyD;AACrE,QAAM,MAAM,GAAG,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAf;AACA,QAAM,IAAI,GAAG,KAAb;AACA,QAAM,IAAI,GAAG,GAAb;AACA,QAAM;AAAE,IAAA;AAAF,MAAa,IAAI,GAAJ,CAAQ,GAAR,CAAnB,CAJqE,CAKrE;;AACA,MAAI,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,IAAT,CAAb;;AAEA,WAAS,MAAT,CAAgB,GAAhB,EAAiC;AAC/B,QAAI,GAAG,CAAC,MAAJ,KAAe,MAAnB,EAA2B;AACzB,MAAA,KAAK,GAAG,CAAR;AACA,MAAA,MAAM,CAAC,mBAAP,CAA2B,SAA3B,EAAsC,MAAtC,EAA8C,KAA9C;AACD;AACF;;AACD,EAAA,MAAM,CAAC,gBAAP,CAAwB,SAAxB,EAAmC,MAAnC,EAA2C,KAA3C,EAdqE,CAgBrE;AACA;;AACA,WAAS,IAAT,GAAa;AACX,QAAI,KAAK,IAAI,CAAb,EAAgB;AACd;AACD;;AACD,IAAA,MAAM,CAAC,WAAP,CAAmB,IAAnB,EAAyB,MAAzB;AACA,IAAA,UAAU,CAAC,IAAD,EAAO,IAAP,CAAV;AACA,IAAA,KAAK,IAAI,CAAT;AACD;;AACD,EAAA,UAAU,CAAC,IAAD,EAAO,IAAP,CAAV;AACD;;;;;;;;ALhCD;eACe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AtLDf;;AAEA;AACA,IAAI,CAAC,MAAM,CAAC,SAAP,CAAiB,UAAtB,EAAkC;AAChC;AACA,EAAA,MAAM,CAAC,SAAP,CAAiB,UAAjB,GAA8B,UAAU,MAAV,EAAkB,GAAlB,EAAqB;AACjD,WAAO,KAAK,MAAL,CAAY,CAAC,GAAD,IAAQ,GAAG,GAAG,CAAd,GAAkB,CAAlB,GAAsB,CAAC,GAAnC,EAAwC,MAAM,CAAC,MAA/C,MAA2D,MAAlE;AACD,GAFD;AAGD;;AAEK,SAAU,KAAV,CAAgB,CAAhB,EAAyB;AAC7B,SAAO,CAAC,CAAC,UAAF,CAAa,SAAb,KAA2B,CAAC,CAAC,UAAF,CAAa,UAAb,CAA3B,IAAuD,CAAC,CAAC,UAAF,CAAa,IAAb,CAA9D;AACD;;AAIK,SAAU,SAAV,CAAuB,IAAvB,EAAgC,GAAG,GAAnC,EAAiE;AACrE,OAAK,MAAM,CAAX,IAAgB,GAAhB,EAAqB;AACnB,IAAA,UAAU,CAAC,IAAD,EAAO,CAAP,CAAV;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAAS,UAAT,CAAoB,IAApB,EAA+B,GAA/B,EAAuC;AACrC,OAAK,MAAM,QAAX,IAAuB,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAvB,EAAyC;AACvC,2BAAY,IAAZ,EAAkB,QAAlB,EAA4B,GAAG,CAAC,QAAD,CAA/B,EAA2C,IAA3C;AACD;AACF;;;;;;;;;;;;;A4L3BD;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;AAIO,MAAM,IAAI,GAAG,UAAb;;AACA,IAAI,QAAQ,GAAG,cAAf,EAEP;;;AACA,MAAM,CAAC,GAAI,OAAO,MAAP,KAAkB,WAAlB,GAAgC,MAAhC,GAAyC,SAApD;;AACA,IAAI,QAAQ,KAAK,SAAb,KAAsB,CAAA,EAAA,GAAI,CAAC,KAAA,IAAD,IAAA,CAAC,KAAA,KAAA,CAAD,GAAC,KAAA,CAAD,GAAA,CAAC,CAAG,IAAH,CAAL,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAG,OAArC,CAAJ,EAAkD;AAChD,qBAAA,QAAQ,GAAG,CAAC,CAAC,IAAD,CAAZ;AACD;;AASM,MAAM,eAAe,GAAG;AAAE,EAAA,MAAM,EAAE;AAAE,IAAA,GAAG,EAAE,IAAP;AAAa,IAAA,GAAG,EAAE;AAAlB,GAAV;AAAoC,EAAA,MAAM,EAAE,IAA5C;AAAkD,EAAA,QAAQ,EAAE,IAA5D;AAAkE,EAAA,MAAM,EAAE;AAA1E,CAAxB;;AASP,MAAM,IAAI,GAAG;AACX,EAAA,qBAAqB,EAAE,uBADZ;AAEX,EAAA,eAAe,EAAE,oBAFN;AAGX,EAAA,aAAa,EAAE,qBAHJ;AAIX,EAAA,UAAU,EAAE,aAJD;AAKX,EAAA,aAAa,EAAE,aALJ;AAMX,EAAA,UAAU,EAAE;AAND,CAAb;AAkCA,MAAM,KAAK,GAA8B;AACvC,EAAA,IAAI,EAAE,MADiC;AAEvC,eAAa;AAF0B,CAAzC;AAKA,MAAM,OAAO,GAAG;AACd,EAAA,IAAI,EAAE,IAAI,CAAC,OADG;AAEd,eAAa,QAAQ,GAAG,QAAQ,CAAC,OAAZ,GAAsB;AAF7B,CAAhB;AAKA,MAAM,YAAY,GAA+D;AAC/E,EAAA,IAAI,EAAG,MAAD,IAAoB,MADqD;AAE/E,eAAa,CAAC,MAAD,EAAS,MAAT,KAAoB,QAAQ,CAAC,OAAT,CAAiB,MAAjB,EAAmC;AAAE,IAAA,MAAM,EAAE;AAAV,GAAnC,EAAmE;AAFrB,CAAjF;AAKA,MAAM,WAAW,GAAG;;;;;OAApB;;AAoBA,SAAS,gBAAT,CAA0B,CAA1B,EAAuE;AACrE,SAAO,OAAO,CAAP,KAAa,UAApB;AACD;;AAED,SAAS,UAAT,CAAoB,MAApB,EAAoC,YAApC,EAA0D,YAA1D,EAAgF,IAAhF,EAA0F;AACxF,QAAM,MAAM,GAAG,eAAe,YAAY,uCAA1C;AACA,QAAM,MAAM,GAAG,gBAAgB,YAAY,gBAA3C;AACA,QAAM,GAAG,GAAG,MAAM,CAAC,IAAP,CAAY,EAAZ,CAAZ;AACA,EAAA,GAAG,CAAC,QAAJ,CAAa,KAAb,CAAmB,MAAM,GAAG,MAAT,GAAkB,MAArC;AACA,EAAA,GAAG,CAAC,QAAJ,CAAa,KAAb,GAAqB,GAAG,KAAK,CAAC,IAAD,CAAM,cAAnC;AACD;AAED;;;;;;;AAKM,SAAU,SAAV,CAAoB,IAApB,EAA6C,YAA7C,EAAgE;SAAA,CACpE;;;AACA,MAAI,IAAI,CAAC,OAAT,EAAkB;AAChB,UAAM,MAAM,GAAG,kCAAa,IAAI,CAAC,OAAlB,CAAf;;AACA,QAAI,YAAY,IAAI,YAAY,KAAK,MAAM,CAAC,OAA5C,EAAqD;AACnD,MAAA,OAAO,CAAC,IAAR,CACE,8CAA8C,KAAK,CAAC,MAAM,CAAC,OAAR,CAAgB,4BACjE,CAAA,EAAA,GAAA,KAAK,CAAC,YAAD,CAAL,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,YACzB,GAHF;AAKD;;AAED,UAAM,IAAI,GAAG,MAAM,CAAC,OAApB;;AAEA,QAAI,CAAC,uBAAU,OAAO,CAAC,IAAD,CAAjB,EAAyB,IAAI,MAAM,CAAC,OAAP,CAAe,KAAf,CAAqB,CAArB,CAAuB,EAApD,CAAL,EAA8D;AAC5D,MAAA,OAAO,CAAC,IAAR,CACE,uBAAuB,KAAK,CAAC,IAAD,CAAM,IAAI,MAAM,CAAC,OAAO,gCAAgC,KAAK,CAAC,IAAD,CAAM,QAAQ,OAAO,CAAC,IAAD,CAAM,GADtH;AAGD;;AAED,WAAO,IAAP;AACD,GArBmE,CAuBpE;;;AACA,MACE,UAAU,IAAV,IACA,cAAc,IADd,IAEA,WAAW,IAFX,IAGA,aAAa,IAHb,IAIA,aAAa,IAJb,IAKA,WAAW,IALX,IAMA,YAAY,IAPd,EAQE;AACA,WAAO,WAAP;AACD;;AAED,MAAI,WAAW,IAAX,IAAmB,aAAa,IAAhC,IAAwC,YAAY,IAApD,IAA4D,UAAU,IAA1E,EAAgF;AAC9E,WAAO,MAAP;AACD;;AAED,SAAO,YAAY,KAAA,IAAZ,IAAA,YAAY,KAAA,KAAA,CAAZ,GAAA,YAAA,GAAgB,MAAvB;AACD;;AAED,SAAS,QAAT,CAAkB,CAAlB,EAA4C;AAC1C,SAAO,CAAC,EAAE,CAAC,IAAI,UAAU,CAAjB,CAAR;AACD;AAED;;;;;;;;;;AAQc,SAAgB,KAAhB,CACZ,EADY,EAEZ,IAFY,EAGZ,IAAA,GAAqB,EAHT,EAGW;;;;AAEvB,UAAM,MAAM,GAAW,QAAQ,CAAC,IAAI,CAAC,MAAN,CAAR,GAAwB,IAAI,CAAC,MAA7B,GAAsC,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,MAAjB,CAA7D,EAEA;;AACA,UAAM,UAAU,GAAG,wBAAS,IAAT,IAAiB,IAAI,CAAC,KAAL,CAAW,MAAM,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAjB,CAAjB,GAAuD,IAA1E;AAEA,UAAM,YAAY,GAAG,MAAM,QAAQ,CAAA,CAAA,EAAA,GAChC,UAAU,CAAC,QAAX,IAAwB,UAAU,CAAC,QAAX,CAA4B,cAA5B,CADQ,MACoC,IADpC,IACoC,EAAA,KAAA,KAAA,CADpC,GACoC,EADpC,GACwC,EADxC,EAEjC,MAFiC,CAAnC;AAIA,UAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAD,EAAO,MAAP,CAAjC;AAEA,UAAM,UAAU,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,qBAAU,UAAV,EAAsB,YAAtB,CADW,CAAA,EACwB;AACtC,MAAA,MAAM,EAAE,2BAAW,CAAA,EAAA,GAAC,UAAU,CAAC,MAAZ,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAsB,EAAjC,EAAmC,CAAA,EAAA,GAAE,YAAY,CAAC,MAAf,MAAqB,IAArB,IAAqB,EAAA,KAAA,KAAA,CAArB,GAAqB,EAArB,GAAyB,EAA5D;AAD8B,KADxB,CAAhB;AAKA,WAAO,MAAM,MAAM,CAAC,EAAD,EAAK,UAAL,EAAiB,UAAjB,EAA6B,MAA7B,CAAnB;;AACD;;AAED,SAAe,QAAf,CAAwB,GAAxB,EAA2C,MAA3C,EAAyD;;;;AACvD,UAAM,MAAM,GAAW,wBAAS,GAAG,CAAC,MAAb,IAAuB,IAAI,CAAC,KAAL,CAAW,MAAM,MAAM,CAAC,IAAP,CAAY,GAAG,CAAC,MAAhB,CAAjB,CAAvB,GAAkE,CAAA,EAAA,GAAC,GAAG,CAAC,MAAL,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,EAAX,GAAe,EAAxG;AACA,UAAM,KAAK,GAA4B,wBAAS,GAAG,CAAC,KAAb,IAAsB,IAAI,CAAC,KAAL,CAAW,MAAM,MAAM,CAAC,IAAP,CAAY,GAAG,CAAC,KAAhB,CAAjB,CAAtB,GAAiE,GAAG,CAAC,KAA5G;AACA,WAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACM,GADN,CAAA,EAEM,KAAK,GAAG;AAAE,MAAA;AAAF,KAAH,GAAe,EAF1B,CAAA,EAGM,MAAM,GAAG;AAAE,MAAA;AAAF,KAAH,GAAgB,EAH5B,CAAA;;AAKD;;AAED,SAAe,MAAf,CACE,EADF,EAEE,IAFF,EAGE,IAAA,GAA4B,EAH9B,EAIE,MAJF,EAIgB;;;;AAEd,UAAM,MAAM,GAAG,IAAI,CAAC,KAAL,GAAa,2BAAY,MAAM,CAAC,IAAI,CAAC,KAAN,CAAlB,EAA8B,CAAA,EAAA,GAAE,IAAI,CAAC,MAAP,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,EAA/C,CAAb,GAAkE,IAAI,CAAC,MAAtF;AAEA,UAAM,OAAO,GAAG,yBAAU,IAAI,CAAC,OAAf,IAA0B,IAAI,CAAC,OAA/B,GAAyC,qBAAmB,EAAnB,EAAuB,eAAvB,EAAsC,CAAA,EAAA,GAAE,IAAI,CAAC,OAAP,MAAc,IAAd,IAAc,EAAA,KAAA,KAAA,CAAd,GAAc,EAAd,GAAkB,EAAxD,CAAzD;AACA,UAAM,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAR,CAAA,EAAiB,IAAI,CAAC,IAAtB,CAAV;AAEA,UAAM,QAAQ,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,QAAR,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,QAAlC;AACA,UAAM,QAAQ,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,QAAR,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,EAAhB,GAAoB,IAAI,CAAC,IAAvC;AACA,UAAM,gBAAgB,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,gBAAR,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,EAAxB,GAA4B,eAAlD;;AAEA,QAAI,IAAI,CAAC,YAAL,KAAsB,KAA1B,EAAiC;AAC/B;AACA,YAAM,EAAE,GAAG,kBAAX;;AACA,UAAI,CAAC,QAAQ,CAAC,cAAT,CAAwB,EAAxB,CAAL,EAAkC;AAChC,cAAM,KAAK,GAAG,QAAQ,CAAC,aAAT,CAAuB,OAAvB,CAAd;AACA,QAAA,KAAK,CAAC,EAAN,GAAW,EAAX;AACA,QAAA,KAAK,CAAC,SAAN,GACE,IAAI,CAAC,YAAL,KAAsB,SAAtB,IAAmC,IAAI,CAAC,YAAL,KAAsB,IAAzD,GACI,CAAC,mBAAU,IAAV,IAAA,mBAAU,KAAA,CAAV,GAAA,cAAA,GAAc,EAAf,EAAmB,QAAnB,EADJ,GAEI,IAAI,CAAC,YAHX;AAKA,QAAA,QAAQ,CAAC,IAAT,CAAc,WAAd,CAA0B,KAA1B;AACD;AACF;;AAED,UAAM,IAAI,GAAG,SAAS,CAAC,IAAD,EAAO,IAAI,CAAC,IAAZ,CAAtB;AAEA,QAAI,MAAM,GAAW,YAAY,CAAC,IAAD,CAAZ,CAAmB,IAAnB,EAAyB,MAAzB,CAArB;;AAEA,QAAI,IAAI,KAAK,WAAb,EAA0B;AACxB,UAAI,MAAM,CAAC,OAAX,EAAoB;AAClB,cAAM,MAAM,GAAG,kCAAa,MAAM,CAAC,OAApB,CAAf;;AAEA,YAAI,CAAC,uBAAU,OAAO,CAAC,IAAlB,EAAwB,IAAI,MAAM,CAAC,OAAP,CAAe,KAAf,CAAqB,CAArB,CAAuB,EAAnD,CAAL,EAA6D;AAC3D,UAAA,OAAO,CAAC,IAAR,CAAa,+BAA+B,MAAM,CAAC,OAAO,6BAA6B,OAAO,CAAC,IAAI,GAAnG;AACD;AACF;AACF;;AAED,UAAM,GAAG,GAAG,OAAO,EAAP,KAAc,QAAd,GAAyB,QAAQ,CAAC,aAAT,CAAuB,EAAvB,CAAzB,GAAsD,EAAlE;;AACA,QAAI,CAAC,GAAL,EAAU;AACR,YAAM,KAAK,CAAC,GAAG,EAAE,iBAAN,CAAX;AACD;;AAED,IAAA,GAAG,CAAC,SAAJ,CAAc,GAAd,CAAkB,YAAlB;;AACA,QAAI,OAAJ,EAAa;AACX,MAAA,GAAG,CAAC,SAAJ,CAAc,GAAd,CAAkB,aAAlB;AACD;;AACD,IAAA,GAAG,CAAC,SAAJ,GAAgB,EAAhB,EAAoB;;AAEpB,UAAM,KAAK,GAAG,IAAI,CAAC,KAAnB;;AACA,QAAI,KAAJ,EAAW;AACT,UAAI,KAAK,YAAY,QAArB,EAA+B;AAC7B,QAAA,MAAM,GAAG,KAAK,CAAC,MAAD,CAAd;AACD,OAFD,MAEO;AACL,QAAA,MAAM,GAAG,+BAAW,MAAX,EAAmB,KAAnB,EAA0B,IAA1B,EAAgC,KAAhC,EAAuC,WAAhD;AACD;AACF,MAED;;;AACA,QAAI,IAAI,CAAC,YAAT,EAAuB;AACrB,MAAA,IAAI,CAAC,YAAL,CAAkB,IAAI,CAAC,YAAvB;AACD;;AAED,QAAI,IAAI,CAAC,gBAAT,EAA2B;AACzB,MAAA,IAAI,CAAC,gBAAL,CAAsB,IAAI,CAAC,gBAA3B;AACD,MAED;AACA;;;AACA,UAAM,OAAO,GAAG,IAAI,CAAC,KAAL,CAAW,MAAX,EAAmB,IAAI,KAAK,WAAT,GAAuB,EAAvB,GAA4B,MAA/C,CAAhB;AAEA,UAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAT,CAAc,OAAd,EAAuB;AAClC,MAAA,MADkC;AAElC,MAAA,QAFkC;AAGlC,MAAA;AAHkC,KAAvB,CAAb;;AAMA,QAAI,IAAI,CAAC,OAAL,KAAiB,KAArB,EAA4B;AAC1B,UAAI,OAAJ;;AACA,UAAI,gBAAgB,CAAC,IAAI,CAAC,OAAN,CAApB,EAAoC;AAClC,QAAA,OAAO,GAAG,IAAI,CAAC,OAAf;AACD,OAFD,MAEO;AACL;AACA,QAAA,OAAO,GAAG,IAAI,oBAAJ,CAAY,IAAI,CAAC,OAAL,KAAiB,IAAjB,GAAwB,EAAxB,GAA6B,IAAI,CAAC,OAA9C,EAAuD,IAAjE;AACD;;AAED,MAAA,IAAI,CAAC,OAAL,CAAa,OAAb;AACD;;AAED,QAAI;AAAE,MAAA;AAAF,QAAY,IAAhB;;AAEA,QAAI,KAAK,KAAK,SAAd,EAAyB;AACvB,MAAA,KAAK,GAAG,IAAI,KAAK,MAAjB;AACD;;AAED,QAAI,KAAJ,EAAW;AACT,YAAM;AAAE,QAAA,QAAF;AAAY,QAAA;AAAZ,UAA2B,OAAO,KAAP,KAAiB,SAAjB,GAA6B,EAA7B,GAAkC,KAAnE;AAEA,MAAA,IAAI,CAAC,KAAL,CAAW,QAAX,EAAqB,SAArB;AACD;;AAED,QAAI,IAAJ,EAAU;AACR,UAAI,IAAI,CAAC,KAAL,IAAc,IAAlB,EAAwB;AACtB,QAAA,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,KAAhB;AACD;;AACD,UAAI,IAAI,CAAC,MAAL,IAAe,IAAnB,EAAyB;AACvB,QAAA,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,MAAjB;AACD;;AACD,UAAI,IAAI,CAAC,OAAL,IAAgB,IAApB,EAA0B;AACxB,QAAA,IAAI,CAAC,OAAL,CAAa,IAAI,CAAC,OAAlB;AACD;AACF;;AAED,UAAM,IAAI,CAAC,UAAL,CAAgB,EAAhB,EAAoB,QAApB,EAAN;AAEA,QAAI,oBAAJ;;AAEA,QAAI,OAAO,KAAK,KAAhB,EAAuB;AACrB,UAAI,OAAO,GAAG,GAAd;;AAEA,UAAI,IAAI,CAAC,YAAL,KAAsB,KAA1B,EAAiC;AAC/B,cAAM,OAAO,GAAG,QAAQ,CAAC,aAAT,CAAuB,SAAvB,CAAhB;AACA,QAAA,OAAO,CAAC,KAAR,GAAgB,IAAI,CAAC,qBAArB;AACA,QAAA,GAAG,CAAC,MAAJ,CAAW,OAAX;AAEA,QAAA,OAAO,GAAG,OAAV;AACA,cAAM,OAAO,GAAG,QAAQ,CAAC,aAAT,CAAuB,SAAvB,CAAhB;AACA,QAAA,OAAO,CAAC,SAAR,GAAoB,WAApB;AAEA,QAAA,OAAO,CAAC,MAAR,CAAe,OAAf;;AAEA,QAAA,oBAAoB,GAAI,EAAD,IAAmB;AACxC,cAAI,CAAC,OAAO,CAAC,QAAR,CAAiB,EAAE,CAAC,MAApB,CAAL,EAAyC;AACvC,YAAA,OAAO,CAAC,eAAR,CAAwB,MAAxB;AACD;AACF,SAJD;;AAKA,QAAA,QAAQ,CAAC,gBAAT,CAA0B,OAA1B,EAAmC,oBAAnC;AACD;;AAED,YAAM,IAAI,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAb;AACA,MAAA,OAAO,CAAC,MAAR,CAAe,IAAf;AACA,MAAA,IAAI,CAAC,SAAL,CAAe,GAAf,CAAmB,cAAnB,EAxBqB,CA0BrB;;AACA,UAAI,OAAO,KAAK,IAAZ,IAAoB,OAAO,CAAC,MAAR,KAAmB,KAA3C,EAAkD;AAChD,aAAK,MAAM,GAAX,IAAkB,CAAC,KAAD,EAAQ,KAAR,CAAlB,EAA2C;AACzC,cAAI,OAAO,KAAK,IAAZ,IAAoB,OAAO,CAAC,MAAR,KAAmB,IAAvC,IAAgD,OAAO,CAAC,MAAR,CAAoD,GAApD,CAApD,EAA8G;AAC5G,kBAAM,gBAAgB,GAAI,IAAkC,CAAC,GAAG,GAAG,CAAC,WAAJ,EAAiB,SAArB,CAA5D;AACA,kBAAM,UAAU,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAnB;AAEA,YAAA,UAAU,CAAC,IAAX,GAAkB,gBAAlB;AACA,YAAA,UAAU,CAAC,IAAX,GAAkB,GAAlB;AACA,YAAA,UAAU,CAAC,MAAX,GAAoB,QAApB;AACA,YAAA,UAAU,CAAC,QAAX,GAAsB,GAAG,gBAAgB,IAAI,GAAG,EAAhD,CAP4G,CAQ5G;;AACA,YAAA,UAAU,CAAC,gBAAX,CAA4B,WAA5B,EAAyC,UAAsB,CAAtB,EAAuB;;AAC9D,gBAAA,CAAC,CAAC,cAAF;AACA,sBAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAL,CAAgB,GAAhB,EAAqB,IAAI,CAAC,WAA1B,CAAlB;AACA,qBAAK,IAAL,GAAY,GAAZ;AACD;AAAA,aAJD;AAMA,YAAA,IAAI,CAAC,MAAL,CAAY,UAAZ;AACD;AACF;AACF,OA/CoB,CAiDrB;;;AACA,UAAI,OAAO,KAAK,IAAZ,IAAoB,OAAO,CAAC,MAAR,KAAmB,KAA3C,EAAkD;AAChD,cAAM,cAAc,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAvB;AAEA,QAAA,cAAc,CAAC,IAAf,GAAsB,IAAI,CAAC,aAA3B;AACA,QAAA,cAAc,CAAC,IAAf,GAAsB,GAAtB;AACA,QAAA,cAAc,CAAC,gBAAf,CAAgC,OAAhC,EAAyC,UAAgB,CAAhB,EAAiB;;;AACxD,UAAA,UAAU,CAAC,yCAAU,IAAV,CAAD,EAAgB,CAAA,EAAA,GAAE,IAAI,CAAC,YAAP,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAAvC,EAAyC,CAAA,EAAA,GAAE,IAAI,CAAC,YAAP,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAAhE,EAAoE,IAApE,CAAV;AACA,UAAA,CAAC,CAAC,cAAF;AACD,SAHD;AAKA,QAAA,IAAI,CAAC,MAAL,CAAY,cAAZ;AACD,OA7DoB,CA+DrB;;;AACA,UAAI,IAAI,KAAK,WAAT,KAAyB,OAAO,KAAK,IAAZ,IAAoB,OAAO,CAAC,QAAR,KAAqB,KAAlE,CAAJ,EAA8E;AAC5E,cAAM,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAApB;AAEA,QAAA,WAAW,CAAC,IAAZ,GAAmB,IAAI,CAAC,eAAxB;AACA,QAAA,WAAW,CAAC,IAAZ,GAAmB,GAAnB;AACA,QAAA,WAAW,CAAC,gBAAZ,CAA6B,OAA7B,EAAsC,UAAgB,CAAhB,EAAiB;;;AACrD,UAAA,UAAU,CAAC,yCAAU,MAAV,CAAD,EAAkB,CAAA,EAAA,GAAE,IAAI,CAAC,YAAP,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAAzC,EAA2C,CAAA,EAAA,GAAE,IAAI,CAAC,YAAP,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,EAAlE,EAAsE,MAAtE,CAAV;AACA,UAAA,CAAC,CAAC,cAAF;AACD,SAHD;AAKA,QAAA,IAAI,CAAC,MAAL,CAAY,WAAZ;AACD,OA3EoB,CA6ErB;;;AACA,UAAI,OAAO,KAAK,IAAZ,IAAoB,OAAO,CAAC,MAAR,KAAmB,KAA3C,EAAkD;AAChD,cAAM,SAAS,GAAA,CAAA,EAAA,GAAG,IAAI,CAAC,SAAR,MAAiB,IAAjB,IAAiB,EAAA,KAAA,KAAA,CAAjB,GAAiB,EAAjB,GAAqB,gCAApC;AACA,cAAM,UAAU,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAnB;AAEA,QAAA,UAAU,CAAC,IAAX,GAAkB,IAAI,CAAC,aAAvB;AACA,QAAA,UAAU,CAAC,IAAX,GAAkB,GAAlB;AACA,QAAA,UAAU,CAAC,gBAAX,CAA4B,OAA5B,EAAqC,UAAgB,CAAhB,EAAiB;AACpD,6BAAK,MAAL,EAAa,SAAb,EAAwB;AACtB,YAAA,MAAM,EAAE,MADc;AAEtB,YAAA,IAFsB;AAGtB,YAAA,QAHsB;AAItB,YAAA,IAAI,EAAE,yCAAU,IAAV;AAJgB,WAAxB;AAMA,UAAA,CAAC,CAAC,cAAF;AACD,SARD;AAUA,QAAA,IAAI,CAAC,MAAL,CAAY,UAAZ;AACD;AACF;;AAED,aAAS,QAAT,GAAiB;AACf,UAAI,oBAAJ,EAA0B;AACxB,QAAA,QAAQ,CAAC,mBAAT,CAA6B,OAA7B,EAAsC,oBAAtC;AACD;;AACD,MAAA,IAAI,CAAC,QAAL;AACD;;AAED,WAAO;AAAE,MAAA,IAAF;AAAQ,MAAA,IAAR;AAAc,MAAA,MAAd;AAAsB,MAAA;AAAtB,KAAP;;AACD;;AC/bD;AACA;AACA;AACA;AACA;AAEA;AACA;;AACA,IAAI+3L,qBAAqB,GAAG11L,MAAM,CAAC01L,qBAAnC;AACA,IAAI9hE,cAAc,GAAG5zH,MAAM,CAAC3C,SAAP,CAAiBu2H,cAAtC;AACA,IAAIquO,gBAAgB,GAAGjiW,MAAM,CAAC3C,SAAP,CAAiB6/L,oBAAxC;;AAEA,SAASglK,QAAT,CAAkB3+V,GAAlB,EAAuB;AACtB,MAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,KAAK4uH,SAA5B,EAAuC;AACtC,UAAM,IAAIgS,SAAJ,CAAc,uDAAd,CAAN;AACA;;AAED,SAAOnkI,MAAM,CAACuD,GAAD,CAAb;AACA;;AAED,SAAS4+V,eAAT,GAA2B;AAC1B,MAAI;AACH,QAAI,CAACniW,MAAM,CAACE,MAAZ,EAAoB;AACnB,aAAO,KAAP;AACA,KAHE,CAKH;AAEA;;;AACA,QAAIkiW,KAAK,GAAG,IAAI75V,MAAJ,CAAW,KAAX,CAAZ,CARG,CAQ6B;;AAChC65V,IAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,IAAX;;AACA,QAAIpiW,MAAM,CAAC21L,mBAAP,CAA2BysK,KAA3B,EAAkC,CAAlC,MAAyC,GAA7C,EAAkD;AACjD,aAAO,KAAP;AACA,KAZE,CAcH;;;AACA,QAAIC,KAAK,GAAG,EAAZ;;AACA,SAAK,IAAIplW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,EAAzB,EAA6B;AAC5BolW,MAAAA,KAAK,CAAC,MAAM95V,MAAM,CAAC4sE,YAAP,CAAoBl4E,CAApB,CAAP,CAAL,GAAsCA,CAAtC;AACA;;AACD,QAAIqlW,MAAM,GAAGtiW,MAAM,CAAC21L,mBAAP,CAA2B0sK,KAA3B,EAAkC37V,GAAlC,CAAsC,UAAUyE,CAAV,EAAa;AAC/D,aAAOk3V,KAAK,CAACl3V,CAAD,CAAZ;AACA,KAFY,CAAb;;AAGA,QAAIm3V,MAAM,CAACzhW,IAAP,CAAY,EAAZ,MAAoB,YAAxB,EAAsC;AACrC,aAAO,KAAP;AACA,KAxBE,CA0BH;;;AACA,QAAI0hW,KAAK,GAAG,EAAZ;AACA,2BAAuBzhW,KAAvB,CAA6B,EAA7B,EAAiCC,OAAjC,CAAyC,UAAUyhW,MAAV,EAAkB;AAC1DD,MAAAA,KAAK,CAACC,MAAD,CAAL,GAAgBA,MAAhB;AACA,KAFD;;AAGA,QAAIxiW,MAAM,CAACof,IAAP,CAAYpf,MAAM,CAACE,MAAP,CAAc,EAAd,EAAkBqiW,KAAlB,CAAZ,EAAsC1hW,IAAtC,CAA2C,EAA3C,MACF,sBADF,EAC0B;AACzB,aAAO,KAAP;AACA;;AAED,WAAO,IAAP;AACA,GArCD,CAqCE,OAAOwf,GAAP,EAAY;AACb;AACA,WAAO,KAAP;AACA;AACD;;AAEDllB,MAAM,CAACC,OAAP,GAAiB+mW,eAAe,KAAKniW,MAAM,CAACE,MAAZ,GAAqB,UAAUszC,MAAV,EAAkBuf,MAAlB,EAA0B;AAC9E,MAAIzkD,IAAJ;AACA,MAAI6+L,EAAE,GAAG+0J,QAAQ,CAAC1uT,MAAD,CAAjB;AACA,MAAIivM,OAAJ;;AAEA,OAAK,IAAIhiP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGzD,SAAS,CAACT,MAA9B,EAAsCkE,CAAC,EAAvC,EAA2C;AAC1C6N,IAAAA,IAAI,GAAGtO,MAAM,CAAChD,SAAS,CAACyD,CAAD,CAAV,CAAb;;AAEA,SAAK,IAAIS,GAAT,IAAgBoN,IAAhB,EAAsB;AACrB,UAAIslH,cAAc,CAAC73H,IAAf,CAAoBuS,IAApB,EAA0BpN,GAA1B,CAAJ,EAAoC;AACnCisM,QAAAA,EAAE,CAACjsM,GAAD,CAAF,GAAUoN,IAAI,CAACpN,GAAD,CAAd;AACA;AACD;;AAED,QAAIw0L,qBAAJ,EAA2B;AAC1B+sD,MAAAA,OAAO,GAAG/sD,qBAAqB,CAACpnL,IAAD,CAA/B;;AACA,WAAK,IAAIrR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwlP,OAAO,CAAClmP,MAA5B,EAAoCU,CAAC,EAArC,EAAyC;AACxC,YAAIglW,gBAAgB,CAAClmW,IAAjB,CAAsBuS,IAAtB,EAA4Bm0O,OAAO,CAACxlP,CAAD,CAAnC,CAAJ,EAA6C;AAC5CkwM,UAAAA,EAAE,CAACs1C,OAAO,CAACxlP,CAAD,CAAR,CAAF,GAAiBqR,IAAI,CAACm0O,OAAO,CAACxlP,CAAD,CAAR,CAArB;AACA;AACD;AACD;AACD;;AAED,SAAOkwM,EAAP;AACA,CAzBD;;AChEA;;AAEAntM,MAAM,CAACub,cAAP,CAAsBngB,OAAtB,EAA+B,YAA/B,EAA6C;AAC3C6E,EAAAA,KAAK,EAAE;AADoC,CAA7C;AAGA7E,OAAO,CAACqnW,UAAR,GAAqBA,UAArB;;AAEA,IAAIC,aAAa,GAAGttR,OAAO,CAAC,eAAD,CAA3B;;AAEA,IAAIutR,cAAc,GAAGC,sBAAsB,CAACF,aAAD,CAA3C;;AAEA,SAASE,sBAAT,CAAgCllV,GAAhC,EAAqC;AAAE,SAAOA,GAAG,IAAIA,GAAG,CAACsiL,UAAX,GAAwBtiL,GAAxB,GAA8B;AAAEsvK,IAAAA,OAAO,EAAEtvK;AAAX,GAArC;AAAwD;;AAE/F,SAASmlV,kBAAT,CAA4Bp/V,GAA5B,EAAiC;AAAE,MAAI1G,KAAK,CAACuH,OAAN,CAAcb,GAAd,CAAJ,EAAwB;AAAE,SAAK,IAAIxG,CAAC,GAAG,CAAR,EAAW6lW,IAAI,GAAG/lW,KAAK,CAAC0G,GAAG,CAAClH,MAAL,CAA5B,EAA0CU,CAAC,GAAGwG,GAAG,CAAClH,MAAlD,EAA0DU,CAAC,EAA3D,EAA+D;AAAE6lW,MAAAA,IAAI,CAAC7lW,CAAD,CAAJ,GAAUwG,GAAG,CAACxG,CAAD,CAAb;AAAmB;;AAAC,WAAO6lW,IAAP;AAAc,GAA7H,MAAmI;AAAE,WAAO/lW,KAAK,CAACuR,IAAN,CAAW7K,GAAX,CAAP;AAAyB;AAAE;AAEnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS6gO,IAAT,CAAc7gO,GAAd,EAAmB;AACjB,SAAOA,GAAG,CAACA,GAAG,CAAClH,MAAJ,GAAa,CAAd,CAAV;AACD;;AAED,SAASwmW,WAAT,CAAqB/sF,GAArB,EAA0B;AACxB,MAAIA,GAAG,CAACgtF,KAAR,EAAe;AACb,WAAOhtF,GAAG,CAACgtF,KAAX;AACD,GAHuB,CAKxB;;;AACA,OAAK,IAAI/lW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGotB,QAAQ,CAAC44U,WAAT,CAAqB1mW,MAAzC,EAAiDU,CAAC,EAAlD,EAAsD;AACpD,QAAIotB,QAAQ,CAAC44U,WAAT,CAAqBhmW,CAArB,EAAwBimW,SAAxB,KAAsCltF,GAA1C,EAA+C;AAC7C,aAAO3rP,QAAQ,CAAC44U,WAAT,CAAqBhmW,CAArB,CAAP;AACD;AACF;AACF;;AAED,IAAImtB,SAAS,GAAG,OAAOP,MAAP,KAAkB,WAAlC;AACA,IAAIs5U,KAAK,GAAG,iBAAyB,aAAzB,IAA0C,aAAtD,EAA6E;;AAC7E,IAAIC,MAAM,GAAG,iBAAyB,MAAtC;;AAEA,IAAIC,KAAK,GAAG,YAAY;AACtB,MAAIj5U,SAAJ,EAAe;AACb,QAAIya,GAAG,GAAGxa,QAAQ,CAACyB,aAAT,CAAuB,KAAvB,CAAV;AACA+Y,IAAAA,GAAG,CAAC4pS,SAAJ,GAAgB,uCAAhB;AACA,WAAO5pS,GAAG,CAACy+T,oBAAJ,CAAyB,GAAzB,EAA8B/mW,MAA9B,KAAyC,CAAhD;AACD;AACF,CANW,EAAZ;;AAQA,SAASgnW,YAAT,GAAwB;AACtB,MAAIvtF,GAAG,GAAG3rP,QAAQ,CAACyB,aAAT,CAAuB,OAAvB,CAAV;AACAkqP,EAAAA,GAAG,CAAC94P,IAAJ,GAAW,UAAX;AACA84P,EAAAA,GAAG,CAAC7d,YAAJ,CAAiB,aAAjB,EAAgC,EAAhC;AACA6d,EAAAA,GAAG,CAACoO,WAAJ,CAAgB/5P,QAAQ,CAACm5U,cAAT,CAAwB,EAAxB,CAAhB;AACA,GAACn5U,QAAQ,CAACw/S,IAAT,IAAiBx/S,QAAQ,CAACi5U,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAlB,EAA4Dl/E,WAA5D,CAAwEpO,GAAxE;AACA,SAAOA,GAAP;AACD;;AAED,SAASysF,UAAT,GAAsB;AACpB,MAAIgB,IAAI,GAAGzmW,SAAS,CAACT,MAAV,GAAmB,CAAnB,IAAwBS,SAAS,CAAC,CAAD,CAAT,KAAiBm1H,SAAzC,GAAqDn1H,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAA/E;AAAA,MACI0mW,WAAW,GAAGD,IAAI,CAACE,MADvB;AAAA,MAEIA,MAAM,GAAGD,WAAW,KAAKvxO,SAAhB,GAA4B,CAACgxO,KAAD,IAAU,CAACC,MAAvC,GAAgDM,WAF7D;AAAA,MAGIE,cAAc,GAAGH,IAAI,CAACvvO,SAH1B;AAAA,MAIIA,SAAS,GAAG0vO,cAAc,KAAKzxO,SAAnB,GAA+B/nG,SAAS,IAAIi5U,KAAb,GAAqB,IAArB,GAA4B,KAA3D,GAAmEO,cAJnF;;AAMA,OAAKC,QAAL,GAAgBF,MAAhB,CAPoB,CAOI;;AACxB,OAAKX,KAAL,GAAa7wO,SAAb;AACA,OAAKmzM,IAAL,GAAY,EAAZ;AACA,OAAKpxM,SAAL,GAAiBA,SAAjB;AACA,OAAKm6G,GAAL,GAAW,CAAX;AACD;;AAED,CAAC,GAAGs0H,cAAc,CAAC31K,OAAnB,EAA4By1K,UAAU,CAACplW,SAAvC,EAAkD;AAChDymW,EAAAA,QAAQ,EAAE,SAASA,QAAT,GAAoB;AAC5B,WAAOf,WAAW,CAACz+H,IAAI,CAAC,KAAKghG,IAAN,CAAL,CAAlB;AACD,GAH+C;AAIhDy+B,EAAAA,MAAM,EAAE,SAASA,MAAT,GAAkB;AACxB,QAAI5iW,KAAK,GAAG,IAAZ;;AAEA,QAAI,KAAK6iW,QAAT,EAAmB;AACjB,YAAM,IAAIxoW,KAAJ,CAAU,8BAAV,CAAN;AACD;;AACD,QAAI4uB,SAAJ,EAAe;AACb,WAAKk7S,IAAL,CAAU,CAAV,IAAei+B,YAAY,EAA3B;AACD,KAFD,MAEO;AACL;AACA,WAAKP,KAAL,GAAa;AACXiB,QAAAA,QAAQ,EAAE,EADC;AAEXC,QAAAA,UAAU,EAAE,SAASA,UAAT,CAAoBzqF,IAApB,EAA0B;AACpC;AACA;AACAt4Q,UAAAA,KAAK,CAAC6hW,KAAN,CAAYiB,QAAZ,CAAqB/mW,IAArB,CAA0B;AAAEinW,YAAAA,OAAO,EAAE1qF;AAAX,WAA1B;AACD;AANU,OAAb;AAQD;;AACD,SAAKuqF,QAAL,GAAgB,IAAhB;AACD,GAxB+C;AAyBhDL,EAAAA,MAAM,EAAE,SAASA,MAAT,CAAgBt6V,IAAhB,EAAsB;AAC5B,QAAI,KAAKglO,GAAL,KAAa,CAAjB,EAAoB;AAClB,YAAM,IAAI7yO,KAAJ,CAAU,qFAAqF6N,IAArF,GAA4F,uDAA5F,GAAsJA,IAAtJ,GAA6J,GAAvK,CAAN;AACD;;AACD,SAAKw6V,QAAL,GAAgB,CAAC,CAACx6V,IAAlB;AACD,GA9B+C;AA+BhD+6V,EAAAA,OAAO,EAAE,SAASA,OAAT,CAAiB3qF,IAAjB,EAAuB;AAC9B;AACA;AACA,QAAI;AACF,UAAIupF,KAAK,GAAG,KAAKc,QAAL,EAAZ;AACAd,MAAAA,KAAK,CAACkB,UAAN,CAAiBzqF,IAAjB,EAAuBA,IAAI,CAACp/O,OAAL,CAAa,SAAb,MAA4B,CAAC,CAA7B,GAAiC,CAAjC,GAAqC2oU,KAAK,CAACiB,QAAN,CAAe1nW,MAA3E;AACD,KAHD,CAGE,OAAOZ,CAAP,EAAU;AACV,UAAIwnW,KAAJ,EAAW;AACT;AACA/jW,QAAAA,OAAO,CAACC,IAAR,CAAa,+BAAb,EAA8Co6Q,IAA9C,EAFS,CAE4C;AACtD;AACF;AACF,GA3C+C;AA4ChDn8C,EAAAA,MAAM,EAAE,SAASA,MAAT,CAAgBm8C,IAAhB,EAAsB;AAE5B,QAAIrvP,SAAJ,EAAe;AACb;AACA,UAAI,KAAKy5U,QAAL,IAAiB,KAAKC,QAAL,GAAgBI,UAArC,EAAiD;AAC/C,aAAKE,OAAL,CAAa3qF,IAAb;AACD,OAFD,CAGA;AACA;AACA;AACA;AANA,WAOK;AACD,cAAIA,IAAI,CAACp/O,OAAL,CAAa,SAAb,MAA4B,CAAC,CAAjC,EAAoC;AAClC,gBAAI27O,GAAG,GAAG1xC,IAAI,CAAC,KAAKghG,IAAN,CAAd;AACAtvD,YAAAA,GAAG,CAACyH,YAAJ,CAAiBpzP,QAAQ,CAACm5U,cAAT,CAAwB/pF,IAAxB,CAAjB,EAAgDzD,GAAG,CAAC6I,UAApD;AACD,WAHD,MAGO;AACLv6C,YAAAA,IAAI,CAAC,KAAKghG,IAAN,CAAJ,CAAgBlhD,WAAhB,CAA4B/5P,QAAQ,CAACm5U,cAAT,CAAwB/pF,IAAxB,CAA5B;AACD;AACF;AACJ,KAjBD,MAiBO;AACL;AACA,WAAKupF,KAAL,CAAWkB,UAAX,CAAsBzqF,IAAtB,EAA4BA,IAAI,CAACp/O,OAAL,CAAa,SAAb,MAA4B,CAAC,CAA7B,GAAiC,CAAjC,GAAqC,KAAK2oU,KAAL,CAAWiB,QAAX,CAAoB1nW,MAArF;AACD;;AAED,SAAK8xO,GAAL;;AACA,QAAIjkN,SAAS,IAAI,KAAKikN,GAAL,GAAW,KAAKn6G,SAAhB,KAA8B,CAA/C,EAAkD;AAChD,WAAKoxM,IAAL,CAAUpoU,IAAV,CAAeqmW,YAAY,EAA3B;AACD;;AACD,WAAO,KAAKl1H,GAAL,GAAW,CAAlB;AACD,GAzE+C;AA2EhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA3rO,EAAAA,MAAM,EAAE,SAAS2hW,OAAT,CAAiBthW,KAAjB,EAAwB;AAC9B;AACA,WAAO,KAAKvC,OAAL,CAAauC,KAAb,EAAoB,EAApB,CAAP;AACD,GAhH+C;AAiHhDupD,EAAAA,KAAK,EAAE,SAASA,KAAT,GAAiB;AACtB,QAAIliC,SAAJ,EAAe;AACb,WAAKk7S,IAAL,CAAUvkU,OAAV,CAAkB,UAAUi1Q,GAAV,EAAe;AAC/B,eAAOA,GAAG,CAACwN,UAAJ,CAAe7F,WAAf,CAA2B3H,GAA3B,CAAP;AACD,OAFD;AAGA,WAAKsvD,IAAL,GAAY,EAAZ;AACA,WAAK09B,KAAL,GAAa,IAAb;AACA,WAAK30H,GAAL,GAAW,CAAX,CANa,CAOb;AACD,KARD,MAQO;AACL;AACA,WAAK20H,KAAL,CAAWiB,QAAX,GAAsB,EAAtB;AACD;;AACD,SAAKD,QAAL,GAAgB,KAAhB;AACD,GA/H+C;AAgIhDM,EAAAA,KAAK,EAAE,SAASA,KAAT,GAAiB;AACtB,QAAI,CAACl6U,SAAL,EAAgB;AACd,aAAO,KAAK44U,KAAL,CAAWiB,QAAlB;AACD;;AACD,QAAIxgW,GAAG,GAAG,EAAV;AACA,SAAK6hU,IAAL,CAAUvkU,OAAV,CAAkB,UAAUi1Q,GAAV,EAAe;AAC/B,aAAOvyQ,GAAG,CAACg9B,MAAJ,CAAWnjC,KAAX,CAAiBmG,GAAjB,EAAsB,CAACA,GAAG,CAAClH,MAAL,EAAa,CAAb,EAAgBC,MAAhB,CAAuBqmW,kBAAkB,CAAC9lW,KAAK,CAACuR,IAAN,CAAWy0V,WAAW,CAAC/sF,GAAD,CAAX,CAAiBiuF,QAA5B,CAAD,CAAzC,CAAtB,CAAP;AACD,KAFD;AAGA,WAAOxgW,GAAP;AACD;AAzI+C,CAAlD;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA,IAAI8gW,aAAa,GAAGnvR,OAAO,CAAC,iBAAD,CAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAE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,iBAAyB,YAAzB,IAAyC,CAACC,YAA9C,EAA4D;AAC1DH,MAAAA,cAAc,CAACE,SAAD,EAAYE,UAAZ,EAAwBhC,SAAxB,CAAd;AACD;;AACD,QAAIgC,UAAU,IAAI,IAAlB,EAAwB;AACtB,UAAID,YAAJ,EAAkB;AAChBF,QAAAA,UAAU,IAAIC,SAAS,GAAG,GAAZ,GAAkBE,UAAlB,GAA+B,GAA7C;AACD,OAFD,MAEO;AACLH,QAAAA,UAAU,IAAIrB,gBAAgB,CAACsB,SAAD,CAAhB,GAA8B,GAA5C;AACAD,QAAAA,UAAU,IAAI,CAAC,GAAGhB,qBAAqB,CAACj5K,OAA1B,EAAmCk6K,SAAnC,EAA8CE,UAA9C,EAA0DhC,SAA1D,IAAuE,GAArF;AACD;AACF;AACF;;AACD,SAAO6B,UAAU,IAAI,IAArB;AACD;;ACjKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChCA;AACA,IAAII,gBAAgB,GAAG,QAAvB;AACA,IAAIC,SAAS,GAAG,MAAhB;AACA,IAAIzzK,KAAK,GAAG,EAAZ;;AAEA,SAAS0zK,aAAT,CAAuBl/O,KAAvB,EAA8B;AAC5B,SAAO,MAAMA,KAAK,CAACjnH,WAAN,EAAb;AACD;;AAED,SAASomW,kBAAT,CAA4BhpW,IAA5B,EAAkC;AAChC,MAAIq1L,KAAK,CAACjgE,cAAN,CAAqBp1H,IAArB,CAAJ,EAAgC;AAC9B,WAAOq1L,KAAK,CAACr1L,IAAD,CAAZ;AACD;;AAED,MAAIipW,KAAK,GAAGjpW,IAAI,CAACgC,OAAL,CAAa6mW,gBAAb,EAA+BE,aAA/B,CAAZ;AACA,SAAQ1zK,KAAK,CAACr1L,IAAD,CAAL,GAAc8oW,SAAS,CAAC18U,IAAV,CAAe68U,KAAf,IAAwB,MAAMA,KAA9B,GAAsCA,KAA5D;AACD;;eAEcD;;;AClBf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"Auto-Content-Generation.fbc17b4e.map","sourceRoot":"..","sourcesContent":["// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Platform} from './platforms/platform';\n\n// Expects flags from URL in the format ?tfjsflags=FLAG1:1,FLAG2:true.\nconst TENSORFLOWJS_FLAGS_PREFIX = 'tfjsflags';\n\ntype FlagValue = number|boolean;\nexport type Flags = {\n  [featureName: string]: FlagValue\n};\nexport type FlagRegistryEntry = {\n  evaluationFn: () => FlagValue;\n  setHook?: (value: FlagValue) => void;\n};\n\n/**\n * The environment contains evaluated flags as well as the registered platform.\n * This is always used as a global singleton and can be retrieved with\n * `tf.env()`.\n */\n/** @doc {heading: 'Environment'} */\nexport class Environment {\n  private flags: Flags = {};\n  private flagRegistry: {[flagName: string]: FlagRegistryEntry} = {};\n\n  private urlFlags: Flags = {};\n\n  platformName: string;\n  platform: Platform;\n\n  // tslint:disable-next-line: no-any\n  constructor(public global: any) {\n    this.populateURLFlags();\n  }\n\n  setPlatform(platformName: string, platform: Platform) {\n    if (this.platform != null) {\n      console.warn(\n          `Platform ${this.platformName} has already been set. ` +\n          `Overwriting the platform with ${platform}.`);\n    }\n    this.platformName = platformName;\n    this.platform = platform;\n  }\n\n  registerFlag(\n      flagName: string, evaluationFn: () => FlagValue,\n      setHook?: (value: FlagValue) => void) {\n    this.flagRegistry[flagName] = {evaluationFn, setHook};\n\n    // Override the flag value from the URL. This has to happen here because the\n    // environment is initialized before flags get registered.\n    if (this.urlFlags[flagName] != null) {\n      const flagValue = this.urlFlags[flagName];\n      console.warn(\n          `Setting feature override from URL ${flagName}: ${flagValue}.`);\n      this.set(flagName, flagValue);\n    }\n  }\n\n  get(flagName: string): FlagValue {\n    if (flagName in this.flags) {\n      return this.flags[flagName];\n    }\n\n    this.flags[flagName] = this.evaluateFlag(flagName);\n\n    return this.flags[flagName];\n  }\n\n  getNumber(flagName: string): number {\n    return this.get(flagName) as number;\n  }\n\n  getBool(flagName: string): boolean {\n    return this.get(flagName) as boolean;\n  }\n\n  getFlags(): Flags {\n    return this.flags;\n  }\n  // For backwards compatibility.\n  get features(): Flags {\n    return this.flags;\n  }\n\n  set(flagName: string, value: FlagValue): void {\n    if (this.flagRegistry[flagName] == null) {\n      throw new Error(\n          `Cannot set flag ${flagName} as it has not been registered.`);\n    }\n    this.flags[flagName] = value;\n    if (this.flagRegistry[flagName].setHook != null) {\n      this.flagRegistry[flagName].setHook(value);\n    }\n  }\n\n  private evaluateFlag(flagName: string): FlagValue {\n    if (this.flagRegistry[flagName] == null) {\n      throw new Error(\n          `Cannot evaluate flag '${flagName}': no evaluation function found.`);\n    }\n    return this.flagRegistry[flagName].evaluationFn();\n  }\n\n  setFlags(flags: Flags) {\n    this.flags = Object.assign({}, flags);\n  }\n\n  reset() {\n    this.flags = {};\n    this.urlFlags = {};\n    this.populateURLFlags();\n  }\n\n  private populateURLFlags(): void {\n    if (typeof this.global === 'undefined' ||\n        typeof this.global.location === 'undefined' ||\n        typeof this.global.location.search === 'undefined') {\n      return;\n    }\n\n    const urlParams = getQueryParams(this.global.location.search);\n    if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) {\n      const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(',');\n      keyValues.forEach(keyValue => {\n        const [key, value] = keyValue.split(':') as [string, string];\n        this.urlFlags[key] = parseValue(key, value);\n      });\n    }\n  }\n}\n\nexport function getQueryParams(queryString: string): {[key: string]: string} {\n  const params = {};\n  queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => {\n    decodeParam(params, t[0], t[1]);\n    return t.join('=');\n  });\n  return params;\n}\n\nfunction decodeParam(\n    params: {[key: string]: string}, name: string, value?: string) {\n  params[decodeURIComponent(name)] = decodeURIComponent(value || '');\n}\n\nfunction parseValue(flagName: string, value: string): FlagValue {\n  value = value.toLowerCase();\n  if (value === 'true' || value === 'false') {\n    return value === 'true';\n  } else if (`${+ value}` === value) {\n    return +value;\n  }\n  throw new Error(\n      `Could not parse value flag value ${value} for flag ${flagName}.`);\n}\n\n/**\n * Returns the current environment (a global singleton).\n *\n * The environment object contains the evaluated feature values as well as the\n * active platform.\n */\n/** @doc {heading: 'Environment'} */\nexport function env() {\n  return ENV;\n}\n\nexport let ENV: Environment = null;\nexport function setEnvironmentGlobal(environment: Environment) {\n  ENV = environment;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {NamedGradientMap} from './tape';\nimport {Tensor} from './tensor';\nimport {DataType, RecursiveArray} from './types';\n\nconst kernelRegistry: Map<string, KernelConfig> = new Map();\nconst gradRegistry: Map<string, GradConfig> = new Map();\n\nexport type DataId = object;\n\ntype AttributeValue =\n    number|number[]|boolean|boolean[]|string|string[]|NamedAttrMap;\n\n/** These are extra non-tensor/primitive params passed to kernel functions. */\nexport type Attribute = AttributeValue|RecursiveArray<AttributeValue>;\n\n/** Specifies the code to run when executing a kernel. */\nexport type KernelFunc = (params: {\n  inputs: NamedTensorInfoMap,\n  backend: {},\n  attrs?: NamedAttrMap,\n}) => TensorInfo|TensorInfo[];\n\n/** The function to run when computing a gradient during backprop. */\nexport type GradFunc =\n    (dy: Tensor|Tensor[], saved: Tensor[], attrs: NamedAttrMap) =>\n        NamedGradientMap;\n\n/** Function that gets called after the backend initializes. */\nexport type KernelSetupFunc = (backend: {}) => void;\n/** Function that gets called right before the backend is disposed. */\nexport type KernelDisposeFunc = KernelSetupFunc;\n\n/** Config object for registering a kernel in the global registry. */\nexport interface KernelConfig {\n  kernelName: string;\n  backendName: string;\n  kernelFunc: KernelFunc;\n  setupFunc?: KernelSetupFunc;\n  disposeFunc?: KernelDisposeFunc;\n}\n\n/** Config object for registering a gradient in the global registry. */\nexport interface GradConfig {\n  kernelName: string;\n  inputsToSave?: string[];\n  // When saveAllInputs is true, all inputs will be saved. Only use this flag\n  // if inputs is an array of Tensors.\n  saveAllInputs?: boolean;\n  outputsToSave?: boolean[];\n  gradFunc: GradFunc;\n}\n\n/** Holds metadata for a given tensor. */\nexport interface TensorInfo {\n  dataId: DataId;\n  shape: number[];\n  dtype: DataType;\n}\n\nexport interface NamedTensorInfoMap {\n  [name: string]: TensorInfo;\n}\n\nexport interface NamedAttrMap {\n  [name: string]: Attribute;\n}\n\n/**\n * Returns the kernel function (code) associated with the provided names.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n */\nexport function getKernel(\n    kernelName: string, backendName: string): KernelConfig {\n  const key = makeKey(kernelName, backendName);\n  return kernelRegistry.get(key);\n}\n\n/**\n * Returns the registered gradient info associated with the provided kernel.\n * @param kernelName The official TF kernel name.\n */\nexport function getGradient(kernelName: string): GradConfig {\n  return gradRegistry.get(kernelName);\n}\n\nexport function getKernelsForBackend(backendName: string): KernelConfig[] {\n  const it = kernelRegistry.entries();\n  const result: KernelConfig[] = [];\n\n  while (true) {\n    const {done, value} = it.next();\n    if (done) {\n      break;\n    }\n    const [key, config] = value;\n    const [backend, ] = key.split('_');\n    if (backend === backendName) {\n      result.push(config);\n    }\n  }\n  return result;\n}\n\n/**\n * Registers the function (forward pass) for the kernel in a global registry.\n *\n * @param config A config object with the following properties:\n * - `kernelName` The official name of the kernel.\n * - `backendName` The official name of the backend.\n * - `kernelFunc` The function to run during the forward pass of the kernel.\n * - `setupFunc` Optional. Gets called once, after the backend initializes.\n * - `disposeFunc` Optional. Gets called once, right before the backend is\n * disposed.\n */\nexport function registerKernel(config: KernelConfig) {\n  const {kernelName, backendName} = config;\n  const key = makeKey(kernelName, backendName);\n  if (kernelRegistry.has(key)) {\n    throw new Error(\n        `The kernel '${kernelName}' for backend ` +\n        `'${backendName}' is already registered`);\n  }\n  kernelRegistry.set(key, config);\n}\n\n/**\n * Registers a gradient function for a given kernel in the global registry,\n * to be used during the back-propagation of that kernel.\n *\n * @param config An object with the following properties:\n * - `kernelName` The name of the kernel that the gradient function is for.\n * - `gradFunc` The function to run during back-propagation.\n */\nexport function registerGradient(config: GradConfig) {\n  const {kernelName} = config;\n  if (gradRegistry.has(kernelName)) {\n    console.warn(`Overriding the gradient for '${kernelName}'`);\n  }\n  gradRegistry.set(kernelName, config);\n}\n\n/**\n * Removes the kernel function from the registry.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n *\n */\nexport function unregisterKernel(\n    kernelName: string, backendName: string): void {\n  const key = makeKey(kernelName, backendName);\n  if (!kernelRegistry.has(key)) {\n    throw new Error(\n        `The kernel '${kernelName}' for backend ` +\n        `'${backendName}' is not registered`);\n  }\n  kernelRegistry.delete(key);\n}\n\n/** Removes the registered gradient from the global registry. */\nexport function unregisterGradient(kernelName: string): void {\n  if (!gradRegistry.has(kernelName)) {\n    throw new Error(\n        `The gradient '${kernelName}' for backend is not registered`);\n  }\n  gradRegistry.delete(kernelName);\n}\n\nfunction makeKey(kernelName: string, backendName: string) {\n  return `${backendName}_${kernelName}`;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from './environment';\n\nimport {DataType, DataTypeMap, FlatVector, NumericDataType, RecursiveArray, TensorLike, TypedArray} from './types';\n\n/**\n * Shuffles the array in-place using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1, 2, 3, 4, 5];\n * tf.util.shuffle(a);\n * console.log(a);\n * ```\n *\n * @param array The array to shuffle in-place.\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\n// tslint:disable-next-line:no-any\nexport function shuffle(array: any[]|Uint32Array|Int32Array|\n                        Float32Array): void {\n  let counter = array.length;\n  let temp = 0;\n  let index = 0;\n  // While there are elements in the array\n  while (counter > 0) {\n    // Pick a random index\n    index = (Math.random() * counter) | 0;\n    // Decrease counter by 1\n    counter--;\n    // And swap the last element with it\n    temp = array[counter];\n    array[counter] = array[index];\n    array[index] = temp;\n  }\n}\n\n/** Clamps a value to a specified range. */\nexport function clamp(min: number, x: number, max: number): number {\n  return Math.max(min, Math.min(x, max));\n}\n\nexport function nearestLargerEven(val: number): number {\n  return val % 2 === 0 ? val : val + 1;\n}\n\nexport function sum(arr: number[]): number {\n  let sum = 0;\n  for (let i = 0; i < arr.length; i++) {\n    sum += arr[i];\n  }\n  return sum;\n}\n\n/**\n * Returns a sample from a uniform [a, b) distribution.\n *\n * @param a The minimum support (inclusive).\n * @param b The maximum support (exclusive).\n * @return A pseudorandom number on the half-open interval [a,b).\n */\nexport function randUniform(a: number, b: number) {\n  const r = Math.random();\n  return (b * r) + (1 - r) * a;\n}\n\n/** Returns the squared Euclidean distance between two vectors. */\nexport function distSquared(a: FlatVector, b: FlatVector): number {\n  let result = 0;\n  for (let i = 0; i < a.length; i++) {\n    const diff = Number(a[i]) - Number(b[i]);\n    result += diff * diff;\n  }\n  return result;\n}\n\n/**\n * Asserts that the expression is true. Otherwise throws an error with the\n * provided message.\n *\n * ```js\n * const x = 2;\n * tf.util.assert(x === 2, 'x is not 2');\n * ```\n *\n * @param expr The expression to assert (as a boolean).\n * @param msg A function that returns the message to report when throwing an\n *     error. We use a function for performance reasons.\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\nexport function assert(expr: boolean, msg: () => string) {\n  if (!expr) {\n    throw new Error(typeof msg === 'string' ? msg : msg());\n  }\n}\n\nexport function assertShapesMatch(\n    shapeA: number[], shapeB: number[], errorMessagePrefix = ''): void {\n  assert(\n      arraysEqual(shapeA, shapeB),\n      () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n}\n\nexport function assertNonNull(a: TensorLike): void {\n  assert(\n      a != null,\n      () => `The input to the tensor constructor must be a non-null value.`);\n}\n\n// NOTE: We explicitly type out what T extends instead of any so that\n// util.flatten on a nested array of number doesn't try to infer T as a\n// number[][], causing us to explicitly type util.flatten<number>().\n/**\n *  Flattens an arbitrarily nested array.\n *\n * ```js\n * const a = [[1, 2], [3, 4], [5, [6, [7]]]];\n * const flat = tf.util.flatten(a);\n * console.log(flat);\n * ```\n *\n *  @param arr The nested array to flatten.\n *  @param result The destination array which holds the elements.\n *  @param skipTypedArray If true, avoids flattening the typed arrays. Defaults\n *      to false.\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\nexport function\nflatten<T extends number|boolean|string|Promise<number>|TypedArray>(\n    arr: T|RecursiveArray<T>, result: T[] = [], skipTypedArray = false): T[] {\n  if (result == null) {\n    result = [];\n  }\n  if (Array.isArray(arr) || isTypedArray(arr) && !skipTypedArray) {\n    for (let i = 0; i < arr.length; ++i) {\n      flatten(arr[i], result, skipTypedArray);\n    }\n  } else {\n    result.push(arr as T);\n  }\n  return result;\n}\n\n/**\n * Returns the size (number of elements) of the tensor given its shape.\n *\n * ```js\n * const shape = [3, 4, 2];\n * const size = tf.util.sizeFromShape(shape);\n * console.log(size);\n * ```\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\nexport function sizeFromShape(shape: number[]): number {\n  if (shape.length === 0) {\n    // Scalar.\n    return 1;\n  }\n  let size = shape[0];\n  for (let i = 1; i < shape.length; i++) {\n    size *= shape[i];\n  }\n  return size;\n}\n\nexport function isScalarShape(shape: number[]): boolean {\n  return shape.length === 0;\n}\n\nexport function arraysEqual(n1: FlatVector, n2: FlatVector) {\n  if (n1 === n2) {\n    return true;\n  }\n  if (n1 == null || n2 == null) {\n    return false;\n  }\n\n  if (n1.length !== n2.length) {\n    return false;\n  }\n  for (let i = 0; i < n1.length; i++) {\n    if (n1[i] !== n2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function isInt(a: number): boolean {\n  return a % 1 === 0;\n}\n\nexport function tanh(x: number): number {\n  // tslint:disable-next-line:no-any\n  if ((Math as any).tanh != null) {\n    // tslint:disable-next-line:no-any\n    return (Math as any).tanh(x);\n  }\n  if (x === Infinity) {\n    return 1;\n  } else if (x === -Infinity) {\n    return -1;\n  } else {\n    const e2x = Math.exp(2 * x);\n    return (e2x - 1) / (e2x + 1);\n  }\n}\n\nexport function sizeToSquarishShape(size: number): [number, number] {\n  const width = Math.ceil(Math.sqrt(size));\n  return [width, Math.ceil(size / width)];\n}\n\n/**\n * Creates a new array with randomized indicies to a given quantity.\n *\n * ```js\n * const randomTen = tf.util.createShuffledIndices(10);\n * console.log(randomTen);\n * ```\n *\n * @param number Quantity of how many shuffled indicies to create.\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\nexport function createShuffledIndices(n: number): Uint32Array {\n  const shuffledIndices = new Uint32Array(n);\n  for (let i = 0; i < n; ++i) {\n    shuffledIndices[i] = i;\n  }\n  shuffle(shuffledIndices);\n  return shuffledIndices;\n}\n\nexport function rightPad(a: string, size: number): string {\n  if (size <= a.length) {\n    return a;\n  }\n  return a + ' '.repeat(size - a.length);\n}\n\nexport function repeatedTry(\n    checkFn: () => boolean, delayFn = (counter: number) => 0,\n    maxCounter?: number): Promise<void> {\n  return new Promise<void>((resolve, reject) => {\n    let tryCount = 0;\n\n    const tryFn = () => {\n      if (checkFn()) {\n        resolve();\n        return;\n      }\n\n      tryCount++;\n\n      const nextBackoff = delayFn(tryCount);\n\n      if (maxCounter != null && tryCount >= maxCounter) {\n        reject();\n        return;\n      }\n      setTimeout(tryFn, nextBackoff);\n    };\n\n    tryFn();\n  });\n}\n\n/**\n * Given the full size of the array and a shape that may contain -1 as the\n * implicit dimension, returns the inferred shape where -1 is replaced.\n * E.g. For shape=[2, -1, 3] and size=24, it will return [2, 4, 3].\n *\n * @param shape The shape, which may contain -1 in some dimension.\n * @param size The full size (number of elements) of the array.\n * @return The inferred shape where -1 is replaced with the inferred size.\n */\nexport function inferFromImplicitShape(\n    shape: number[], size: number): number[] {\n  let shapeProd = 1;\n  let implicitIdx = -1;\n\n  for (let i = 0; i < shape.length; ++i) {\n    if (shape[i] >= 0) {\n      shapeProd *= shape[i];\n    } else if (shape[i] === -1) {\n      if (implicitIdx !== -1) {\n        throw Error(\n            `Shapes can only have 1 implicit size. ` +\n            `Found -1 at dim ${implicitIdx} and dim ${i}`);\n      }\n      implicitIdx = i;\n    } else if (shape[i] < 0) {\n      throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`);\n    }\n  }\n\n  if (implicitIdx === -1) {\n    if (size > 0 && size !== shapeProd) {\n      throw Error(`Size(${size}) must match the product of shape ${shape}`);\n    }\n    return shape;\n  }\n\n  if (shapeProd === 0) {\n    throw Error(\n        `Cannot infer the missing size in [${shape}] when ` +\n        `there are 0 elements`);\n  }\n  if (size % shapeProd !== 0) {\n    throw Error(\n        `The implicit shape can't be a fractional number. ` +\n        `Got ${size} / ${shapeProd}`);\n  }\n\n  const newShape = shape.slice();\n  newShape[implicitIdx] = size / shapeProd;\n  return newShape;\n}\n\nexport function parseAxisParam(\n    axis: number|number[], shape: number[]): number[] {\n  const rank = shape.length;\n\n  // Normalize input\n  axis = axis == null ? shape.map((s, i) => i) : [].concat(axis);\n\n  // Check for valid range\n  assert(\n      axis.every(ax => ax >= -rank && ax < rank),\n      () =>\n          `All values in axis param must be in range [-${rank}, ${rank}) but ` +\n          `got axis ${axis}`);\n\n  // Check for only integers\n  assert(\n      axis.every(ax => isInt(ax)),\n      () => `All values in axis param must be integers but ` +\n          `got axis ${axis}`);\n\n  // Handle negative axis.\n  return axis.map(a => a < 0 ? rank + a : a);\n}\n\n/** Reduces the shape by removing all dimensions of shape 1. */\nexport function squeezeShape(shape: number[], axis?: number[]):\n    {newShape: number[], keptDims: number[]} {\n  const newShape: number[] = [];\n  const keptDims: number[] = [];\n  const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0;\n  const axes = (axis == null || isEmptyArray) ?\n      null :\n      parseAxisParam(axis, shape).sort();\n  let j = 0;\n  for (let i = 0; i < shape.length; ++i) {\n    if (axes != null) {\n      if (axes[j] === i && shape[i] !== 1) {\n        throw new Error(\n            `Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`);\n      }\n      if ((axes[j] == null || axes[j] > i) && shape[i] === 1) {\n        newShape.push(shape[i]);\n        keptDims.push(i);\n      }\n      if (axes[j] <= i) {\n        j++;\n      }\n    }\n    if (shape[i] !== 1) {\n      newShape.push(shape[i]);\n      keptDims.push(i);\n    }\n  }\n  return {newShape, keptDims};\n}\n\nexport function getTypedArrayFromDType<D extends NumericDataType>(\n    dtype: D, size: number): DataTypeMap[D] {\n  let values = null;\n  if (dtype == null || dtype === 'float32') {\n    values = new Float32Array(size);\n  } else if (dtype === 'int32') {\n    values = new Int32Array(size);\n  } else if (dtype === 'bool') {\n    values = new Uint8Array(size);\n  } else {\n    throw new Error(`Unknown data type ${dtype}`);\n  }\n  return values as DataTypeMap[D];\n}\n\nexport function getArrayFromDType<D extends DataType>(\n    dtype: D, size: number): DataTypeMap[D] {\n  let values = null;\n  if (dtype == null || dtype === 'float32') {\n    values = new Float32Array(size);\n  } else if (dtype === 'int32') {\n    values = new Int32Array(size);\n  } else if (dtype === 'bool') {\n    values = new Uint8Array(size);\n  } else if (dtype === 'string') {\n    values = new Array<'string'>(size);\n  } else {\n    throw new Error(`Unknown data type ${dtype}`);\n  }\n  return values as DataTypeMap[D];\n}\n\nexport function checkConversionForErrors<D extends DataType>(\n    vals: DataTypeMap[D]|number[], dtype: D): void {\n  for (let i = 0; i < vals.length; i++) {\n    const num = vals[i] as number;\n    if (isNaN(num) || !isFinite(num)) {\n      throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`);\n    }\n  }\n}\n\n/** Returns true if the dtype is valid. */\nexport function isValidDtype(dtype: DataType): boolean {\n  return dtype === 'bool' || dtype === 'complex64' || dtype === 'float32' ||\n      dtype === 'int32' || dtype === 'string';\n}\n\n/**\n * Returns true if the new type can't encode the old type without loss of\n * precision.\n */\nexport function hasEncodingLoss(oldType: DataType, newType: DataType): boolean {\n  if (newType === 'complex64') {\n    return false;\n  }\n  if (newType === 'float32' && oldType !== 'complex64') {\n    return false;\n  }\n  if (newType === 'int32' && oldType !== 'float32' && oldType !== 'complex64') {\n    return false;\n  }\n  if (newType === 'bool' && oldType === 'bool') {\n    return false;\n  }\n  return true;\n}\n\nexport function isTypedArray(a: {}): a is Float32Array|Int32Array|Uint8Array {\n  return a instanceof Float32Array || a instanceof Int32Array ||\n      a instanceof Uint8Array;\n}\n\nexport function bytesPerElement(dtype: DataType): number {\n  if (dtype === 'float32' || dtype === 'int32') {\n    return 4;\n  } else if (dtype === 'complex64') {\n    return 8;\n  } else if (dtype === 'bool') {\n    return 1;\n  } else {\n    throw new Error(`Unknown dtype ${dtype}`);\n  }\n}\n\n/**\n * Returns the approximate number of bytes allocated in the string array - 2\n * bytes per character. Computing the exact bytes for a native string in JS is\n * not possible since it depends on the encoding of the html page that serves\n * the website.\n */\nexport function bytesFromStringArray(arr: Uint8Array[]): number {\n  if (arr == null) {\n    return 0;\n  }\n  let bytes = 0;\n  arr.forEach(x => bytes += x.length);\n  return bytes;\n}\n\n/** Returns true if the value is a string. */\nexport function isString(value: {}): value is string {\n  return typeof value === 'string' || value instanceof String;\n}\n\nexport function isBoolean(value: {}): boolean {\n  return typeof value === 'boolean';\n}\n\nexport function isNumber(value: {}): boolean {\n  return typeof value === 'number';\n}\n\nexport function inferDtype(values: TensorLike): DataType {\n  if (Array.isArray(values)) {\n    return inferDtype(values[0]);\n  }\n  if (values instanceof Float32Array) {\n    return 'float32';\n  } else if (values instanceof Int32Array || values instanceof Uint8Array) {\n    return 'int32';\n  } else if (isNumber(values)) {\n    return 'float32';\n  } else if (isString(values)) {\n    return 'string';\n  } else if (isBoolean(values)) {\n    return 'bool';\n  }\n  return 'float32';\n}\n\nexport function isFunction(f: Function) {\n  return !!(f && f.constructor && f.call && f.apply);\n}\n\nexport function nearestDivisor(size: number, start: number): number {\n  for (let i = start; i < size; ++i) {\n    if (size % i === 0) {\n      return i;\n    }\n  }\n  return size;\n}\n\nexport function computeStrides(shape: number[]): number[] {\n  const rank = shape.length;\n  if (rank < 2) {\n    return [];\n  }\n\n  // Last dimension has implicit stride of 1, thus having D-1 (instead of D)\n  // strides.\n  const strides = new Array(rank - 1);\n  strides[rank - 2] = shape[rank - 1];\n  for (let i = rank - 3; i >= 0; --i) {\n    strides[i] = strides[i + 1] * shape[i + 1];\n  }\n  return strides;\n}\n\nexport function toTypedArray(\n    a: TensorLike, dtype: DataType, debugMode: boolean): TypedArray {\n  if (dtype === 'string') {\n    throw new Error('Cannot convert a string[] to a TypedArray');\n  }\n  if (Array.isArray(a)) {\n    a = flatten(a);\n  }\n  if (debugMode) {\n    checkConversionForErrors(a as number[], dtype);\n  }\n  if (noConversionNeeded(a, dtype)) {\n    return a as TypedArray;\n  }\n  if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n    return new Float32Array(a as number[]);\n  } else if (dtype === 'int32') {\n    return new Int32Array(a as number[]);\n  } else if (dtype === 'bool') {\n    const bool = new Uint8Array((a as number[]).length);\n    for (let i = 0; i < bool.length; ++i) {\n      if (Math.round((a as number[])[i]) !== 0) {\n        bool[i] = 1;\n      }\n    }\n    return bool;\n  } else {\n    throw new Error(`Unknown data type ${dtype}`);\n  }\n}\n\nfunction createNestedArray(offset: number, shape: number[], a: TypedArray) {\n  const ret = new Array();\n  if (shape.length === 1) {\n    const d = shape[0];\n    for (let i = 0; i < d; i++) {\n      ret[i] = a[offset + i];\n    }\n  } else {\n    const d = shape[0];\n    const rest = shape.slice(1);\n    const len = rest.reduce((acc, c) => acc * c);\n    for (let i = 0; i < d; i++) {\n      ret[i] = createNestedArray(offset + i * len, rest, a);\n    }\n  }\n  return ret;\n}\n\n// Provide a nested array of TypedArray in given shape.\nexport function toNestedArray(shape: number[], a: TypedArray) {\n  if (shape.length === 0) {\n    // Scalar type should return a single number.\n    return a[0];\n  }\n  const size = shape.reduce((acc, c) => acc * c);\n  if (size === 0) {\n    // A tensor with shape zero should be turned into empty list.\n    return [];\n  }\n  if (size !== a.length) {\n    throw new Error(`[${shape}] does not match the input size.`);\n  }\n\n  return createNestedArray(0, shape, a);\n}\n\nfunction noConversionNeeded(a: TensorLike, dtype: DataType): boolean {\n  return (a instanceof Float32Array && dtype === 'float32') ||\n      (a instanceof Int32Array && dtype === 'int32') ||\n      (a instanceof Uint8Array && dtype === 'bool');\n}\n\nexport function makeOnesTypedArray<D extends DataType>(\n    size: number, dtype: D): DataTypeMap[D] {\n  const array = makeZerosTypedArray(size, dtype);\n  for (let i = 0; i < array.length; i++) {\n    array[i] = 1;\n  }\n  return array;\n}\n\nexport function makeZerosTypedArray<D extends DataType>(\n    size: number, dtype: D): DataTypeMap[D] {\n  if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n    return new Float32Array(size) as DataTypeMap[D];\n  } else if (dtype === 'int32') {\n    return new Int32Array(size) as DataTypeMap[D];\n  } else if (dtype === 'bool') {\n    return new Uint8Array(size) as DataTypeMap[D];\n  } else {\n    throw new Error(`Unknown data type ${dtype}`);\n  }\n}\n\n/**\n * Returns the current high-resolution time in milliseconds relative to an\n * arbitrary time in the past. It works across different platforms (node.js,\n * browsers).\n *\n * ```js\n * console.log(tf.util.now());\n * ```\n */\n/** @doc {heading: 'Util', namespace: 'util'} */\nexport function now(): number {\n  return env().platform.now();\n}\n\nexport function assertNonNegativeIntegerDimensions(shape: number[]) {\n  shape.forEach(dimSize => {\n    assert(\n        Number.isInteger(dimSize) && dimSize >= 0,\n        () =>\n            `Tensor must have a shape comprised of positive integers but got ` +\n            `shape [${shape}].`);\n  });\n}\n\n/**\n * Returns a platform-specific implementation of\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n *\n * If `fetch` is defined on the global object (`window`, `process`, etc.),\n * `tf.util.fetch` returns that function.\n *\n * If not, `tf.util.fetch` returns a platform-specific solution.\n *\n * ```js\n * const resource = await tf.util.fetch('https://unpkg.com/@tensorflow/tfjs');\n * // handle response\n * ```\n */\n/** @doc {heading: 'Util'} */\nexport function fetch(\n    path: string, requestInits?: RequestInit): Promise<Response> {\n  return env().platform.fetch(path, requestInits);\n}\n\n/**\n * Encodes the provided string into bytes using the provided encoding scheme.\n *\n * @param s The string to encode.\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n */\n/** @doc {heading: 'Util'} */\nexport function encodeString(s: string, encoding = 'utf-8'): Uint8Array {\n  encoding = encoding || 'utf-8';\n  return env().platform.encode(s, encoding);\n}\n\n/**\n * Decodes the provided bytes into a string using the provided encoding scheme.\n * @param bytes The bytes to decode.\n *\n * @param encoding The encoding scheme. Defaults to utf-8.\n */\n/** @doc {heading: 'Util'} */\nexport function decodeString(bytes: Uint8Array, encoding = 'utf-8'): string {\n  encoding = encoding || 'utf-8';\n  return env().platform.decode(bytes, encoding);\n}\n\n/**\n * Computes flat index for a given location (multidimentionsal index) in a\n * Tensor/multidimensional array.\n *\n * @param locs Location in the tensor.\n * @param rank Rank of the tensor.\n * @param strides Tensor strides.\n */\nexport function locToIndex(\n    locs: number[], rank: number, strides: number[]): number {\n  if (rank === 0) {\n    return 0;\n  } else if (rank === 1) {\n    return locs[0];\n  }\n  let index = locs[locs.length - 1];\n  for (let i = 0; i < locs.length - 1; ++i) {\n    index += strides[i] * locs[i];\n  }\n  return index;\n}\n\n/**\n * Computes the location (multidimensional index) in a tensor/multidimentional\n * array for a given flat index.\n *\n * @param index Index in flat array.\n * @param rank Rank of tensor.\n * @param strides Strides of tensor.\n */\nexport function indexToLoc(\n    index: number, rank: number, strides: number[]): number[] {\n  if (rank === 0) {\n    return [];\n  } else if (rank === 1) {\n    return [index];\n  }\n  const locs: number[] = new Array(rank);\n  for (let i = 0; i < locs.length - 1; ++i) {\n    locs[i] = Math.floor(index / strides[i]);\n    index -= locs[i] * strides[i];\n  }\n  locs[locs.length - 1] = index;\n  return locs;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {BackendTimer} from './backends/backend';\nimport {Tensor} from './tensor';\nimport {NamedTensorMap} from './tensor_types';\nimport {DataType, DataTypeMap, TypedArray} from './types';\nimport * as util from './util';\n\nexport class Profiler {\n  constructor(private backendTimer: BackendTimer, private logger?: Logger) {\n    if (logger == null) {\n      this.logger = new Logger();\n    }\n  }\n\n  profileKernel(kernelName: string, inputs: NamedTensorMap, f: () => Tensor[]):\n      Tensor[] {\n    let outputs: Tensor[];\n    const holdResultWrapperFn = () => {\n      outputs = f();\n    };\n    const timer = this.backendTimer.time(holdResultWrapperFn);\n\n    outputs.forEach(r => {\n      // Dangling promise here because we don't want to propagate up\n      // asynchronicity.\n      r.data().then(vals => {\n        checkComputationForErrors(vals, r.dtype, kernelName);\n\n        timer.then(timing => {\n          let extraInfo = '';\n          if (timing.getExtraProfileInfo != null) {\n            extraInfo = timing.getExtraProfileInfo();\n          }\n\n          this.logger.logKernelProfile(\n              kernelName, r, vals, timing.kernelMs, inputs, extraInfo);\n        });\n      });\n    });\n\n    return outputs;\n  }\n}\n\nexport function checkComputationForErrors<D extends DataType>(\n    vals: DataTypeMap[D], dtype: D, kernelName: string): boolean {\n  if (dtype !== 'float32') {\n    // Only floating point computations will generate NaN values\n    return false;\n  }\n  for (let i = 0; i < vals.length; i++) {\n    const num = vals[i] as number;\n    if (isNaN(num) || !isFinite(num)) {\n      // Throwing custom exception so behavior is testable.\n      console.warn(`Found ${num} in the result of '${kernelName}'`);\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class Logger {\n  logKernelProfile(\n      name: string, result: Tensor, vals: TypedArray,\n      timeMs: number|{error: string}, inputs: NamedTensorMap,\n      extraInfo?: string) {\n    const time = typeof timeMs === 'number' ? util.rightPad(`${timeMs}ms`, 9) :\n                                              timeMs['error'];\n    const paddedName = util.rightPad(name, 25);\n    const rank = result.rank;\n    const size = result.size;\n    const shape = util.rightPad(result.shape.toString(), 14);\n    let inputShapesDescription = '';\n\n    for (const name in inputs) {\n      const input = inputs[name];\n      // The input might be a non-tensor (e.g HTMLImageElement), in which case\n      // we claim the output shape as input shape.\n      const inputShape = input.shape || result.shape;\n      const inputRank = inputShape.length;\n      inputShapesDescription +=\n          `${name}: ${inputRank}D ${inputRank > 0 ? inputShape : ''} `;\n    }\n\n    console.log(\n        `%c${paddedName}\\t%c${time}\\t%c${rank}D ${shape}\\t%c${size}\\t%c${\n            inputShapesDescription}\\t%c${extraInfo}`,\n        'font-weight:bold', 'color:red', 'color:blue', 'color: orange',\n        'color: green', 'color: steelblue');\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {DataType, TypedArray} from './types';\nimport {computeStrides, isString, rightPad, sizeFromShape} from './util';\n\n// Maximum number of values before we decide to show ellipsis.\nconst FORMAT_LIMIT_NUM_VALS = 20;\n// Number of first and last values to show when displaying a, b,...,y, z.\nconst FORMAT_NUM_FIRST_LAST_VALS = 3;\n// Number of significant digits to show.\nconst FORMAT_NUM_SIG_DIGITS = 7;\n\nexport function tensorToString(\n    vals: TypedArray|string[], shape: number[], dtype: DataType,\n    verbose: boolean) {\n  const strides = computeStrides(shape);\n  const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides);\n  const rank = shape.length;\n  const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol);\n  const lines = ['Tensor'];\n  if (verbose) {\n    lines.push(`  dtype: ${dtype}`);\n    lines.push(`  rank: ${rank}`);\n    lines.push(`  shape: [${shape}]`);\n    lines.push(`  values:`);\n  }\n  lines.push(valsLines.map(l => '    ' + l).join('\\n'));\n  return lines.join('\\n');\n}\n\nfunction computeMaxSizePerColumn(\n    vals: TypedArray|string[], shape: number[], dtype: DataType,\n    strides: number[]): number[] {\n  const n = sizeFromShape(shape);\n  const numCols = strides[strides.length - 1];\n  const padPerCol = new Array(numCols).fill(0);\n  const rank = shape.length;\n  const valuesOrTuples =\n      dtype === 'complex64' ? createComplexTuples(vals) : vals;\n\n  if (rank > 1) {\n    for (let row = 0; row < n / numCols; row++) {\n      const offset = row * numCols;\n      for (let j = 0; j < numCols; j++) {\n        padPerCol[j] = Math.max(\n            padPerCol[j],\n            valToString(valuesOrTuples[offset + j], 0, dtype).length);\n      }\n    }\n  }\n  return padPerCol;\n}\n\nfunction valToString(\n    val: number|string|[number, number], pad: number, dtype: DataType) {\n  let valStr: string;\n  if (Array.isArray(val)) {\n    valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ` +\n        `${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`;\n  } else if (isString(val)) {\n    valStr = `'${val}'`;\n  } else if (dtype === 'bool') {\n    valStr = boolNumToString(val);\n  } else {\n    valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString();\n  }\n\n  return rightPad(valStr, pad);\n}\n\nfunction boolNumToString(v: number): string {\n  return v === 0 ? 'false' : 'true';\n}\n\nfunction subTensorToString(\n    vals: TypedArray|string[], shape: number[], dtype: DataType,\n    strides: number[], padPerCol: number[], isLast = true): string[] {\n  const storagePerElement = dtype === 'complex64' ? 2 : 1;\n\n  const size = shape[0];\n  const rank = shape.length;\n  if (rank === 0) {\n    if (dtype === 'complex64') {\n      const complexTuple = createComplexTuples(vals);\n      return [valToString(complexTuple[0], 0, dtype)];\n    }\n    if (dtype === 'bool') {\n      return [boolNumToString(vals[0] as number)];\n    }\n    return [vals[0].toString()];\n  }\n\n  if (rank === 1) {\n    if (size > FORMAT_LIMIT_NUM_VALS) {\n      const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement;\n\n      let firstVals = Array.from<number|string|[number, number]>(\n          vals.slice(0, firstValsSize));\n      let lastVals = Array.from<number|string|[number, number]>(vals.slice(\n          (size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement,\n          size * storagePerElement));\n      if (dtype === 'complex64') {\n        firstVals = createComplexTuples(firstVals);\n        lastVals = createComplexTuples(lastVals);\n      }\n      return [\n        '[' +\n        firstVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n            .join(', ') +\n        ', ..., ' +\n        lastVals\n            .map(\n                (x, i) => valToString(\n                    x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype))\n            .join(', ') +\n        ']'\n      ];\n    }\n    const displayVals: Array<number|string|[number, number]> =\n        dtype === 'complex64' ? createComplexTuples(vals) :\n                                Array.from<number|string>(vals);\n\n    return [\n      '[' +\n      displayVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n          .join(', ') +\n      ']'\n    ];\n  }\n\n  // The array is rank 2 or more.\n  const subshape = shape.slice(1);\n  const substrides = strides.slice(1);\n  const stride = strides[0] * storagePerElement;\n  const lines: string[] = [];\n  if (size > FORMAT_LIMIT_NUM_VALS) {\n    for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) {\n      const start = i * stride;\n      const end = start + stride;\n      lines.push(...subTensorToString(\n          vals.slice(start, end), subshape, dtype, substrides, padPerCol,\n          false /* isLast */));\n    }\n    lines.push('...');\n    for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) {\n      const start = i * stride;\n      const end = start + stride;\n      lines.push(...subTensorToString(\n          vals.slice(start, end), subshape, dtype, substrides, padPerCol,\n          i === size - 1 /* isLast */));\n    }\n  } else {\n    for (let i = 0; i < size; i++) {\n      const start = i * stride;\n      const end = start + stride;\n      lines.push(...subTensorToString(\n          vals.slice(start, end), subshape, dtype, substrides, padPerCol,\n          i === size - 1 /* isLast */));\n    }\n  }\n  const sep = rank === 2 ? ',' : '';\n  lines[0] = '[' + lines[0] + sep;\n  for (let i = 1; i < lines.length - 1; i++) {\n    lines[i] = ' ' + lines[i] + sep;\n  }\n  let newLineSep = ',\\n';\n  for (let i = 2; i < rank; i++) {\n    newLineSep += '\\n';\n  }\n  lines[lines.length - 1] =\n      ' ' + lines[lines.length - 1] + ']' + (isLast ? '' : newLineSep);\n  return lines;\n}\n\nfunction createComplexTuples(vals: Array<{}>|\n                             TypedArray): Array<[number, number]> {\n  const complexTuples: Array<[number, number]> = [];\n  for (let i = 0; i < vals.length; i += 2) {\n    complexTuples.push([vals[i], vals[i + 1]] as [number, number]);\n  }\n  return complexTuples;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {tensorToString} from './tensor_format';\nimport {ArrayMap, BackendValues, DataType, DataTypeMap, DataValues, NumericDataType, Rank, ShapeMap, SingleValueMap, TensorLike, TensorLike1D, TensorLike3D, TensorLike4D, TypedArray} from './types';\nimport * as util from './util';\nimport {computeStrides, toNestedArray} from './util';\n\nexport interface TensorData<D extends DataType> {\n  dataId?: DataId;\n  values?: DataTypeMap[D];\n}\n\n// This interface mimics KernelBackend (in backend.ts), which would create a\n// circular dependency if imported.\nexport interface Backend {}\n\n/**\n * A mutable object, similar to `tf.Tensor`, that allows users to set values\n * at locations before converting to an immutable `tf.Tensor`.\n *\n * See `tf.buffer` for creating a tensor buffer.\n */\n/** @doc {heading: 'Tensors', subheading: 'Classes'} */\nexport class TensorBuffer<R extends Rank, D extends DataType = 'float32'> {\n  size: number;\n  shape: ShapeMap[R];\n  strides: number[];\n  values: DataTypeMap[D];\n\n  constructor(shape: ShapeMap[R], public dtype: D, values?: DataTypeMap[D]) {\n    this.shape = shape.slice() as ShapeMap[R];\n    this.size = util.sizeFromShape(shape);\n\n    if (values != null) {\n      const n = values.length;\n      util.assert(\n          n === this.size,\n          () => `Length of values '${n}' does not match the size ` +\n              `inferred by the shape '${this.size}'.`);\n    }\n    if (dtype === 'complex64') {\n      throw new Error(\n          `complex64 dtype TensorBuffers are not supported. Please create ` +\n          `a TensorBuffer for the real and imaginary parts separately and ` +\n          `call tf.complex(real, imag).`);\n    }\n    this.values = values || util.getArrayFromDType(dtype, this.size);\n    this.strides = computeStrides(shape);\n  }\n\n  /**\n   * Sets a value in the buffer at a given location.\n   *\n   * @param value The value to set.\n   * @param locs  The location indices.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Creation'} */\n  set(value: SingleValueMap[D], ...locs: number[]): void {\n    if (locs.length === 0) {\n      locs = [0];\n    }\n    util.assert(\n        locs.length === this.rank,\n        () => `The number of provided coordinates (${locs.length}) must ` +\n            `match the rank (${this.rank})`);\n\n    const index = this.locToIndex(locs);\n    this.values[index] = value as number;\n  }\n\n  /**\n   * Returns the value in the buffer at the provided location.\n   *\n   * @param locs The location indices.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Creation'} */\n  get(...locs: number[]): SingleValueMap[D] {\n    if (locs.length === 0) {\n      locs = [0];\n    }\n    let i = 0;\n    for (const loc of locs) {\n      if (loc < 0 || loc >= this.shape[i]) {\n        const msg = `Requested out of range element at ${locs}. ` +\n            `  Buffer shape=${this.shape}`;\n        throw new Error(msg);\n      }\n      i++;\n    }\n    let index = locs[locs.length - 1];\n    for (let i = 0; i < locs.length - 1; ++i) {\n      index += this.strides[i] * locs[i];\n    }\n    return this.values[index] as SingleValueMap[D];\n  }\n\n  locToIndex(locs: number[]): number {\n    if (this.rank === 0) {\n      return 0;\n    } else if (this.rank === 1) {\n      return locs[0];\n    }\n    let index = locs[locs.length - 1];\n    for (let i = 0; i < locs.length - 1; ++i) {\n      index += this.strides[i] * locs[i];\n    }\n    return index;\n  }\n\n  indexToLoc(index: number): number[] {\n    if (this.rank === 0) {\n      return [];\n    } else if (this.rank === 1) {\n      return [index];\n    }\n    const locs: number[] = new Array(this.shape.length);\n    for (let i = 0; i < locs.length - 1; ++i) {\n      locs[i] = Math.floor(index / this.strides[i]);\n      index -= locs[i] * this.strides[i];\n    }\n    locs[locs.length - 1] = index;\n    return locs;\n  }\n\n  get rank() {\n    return this.shape.length;\n  }\n\n  /**\n   * Creates an immutable `tf.Tensor` object from the buffer.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Creation'} */\n  toTensor(): Tensor<R> {\n    return trackerFn().makeTensor(this.values, this.shape, this.dtype) as\n        Tensor<R>;\n  }\n}\n\nexport interface TensorTracker {\n  makeTensor(\n      values: DataValues, shape: number[], dtype: DataType,\n      backend?: Backend): Tensor;\n  makeVariable(\n      initialValue: Tensor, trainable?: boolean, name?: string,\n      dtype?: DataType): Variable;\n  incRef(a: Tensor, backend: Backend): void;\n  disposeTensor(t: Tensor): void;\n  disposeVariable(v: Variable): void;\n  read(dataId: DataId): Promise<BackendValues>;\n  readSync(dataId: DataId): BackendValues;\n}\n\n/**\n * The Tensor class calls into this handler to delegate chaining operations.\n */\nexport interface OpHandler {\n  cast<T extends Tensor>(x: T, dtype: DataType): T;\n  buffer<R extends Rank, D extends DataType>(\n      shape: ShapeMap[R], dtype: D,\n      values?: DataTypeMap[D]): TensorBuffer<R, D>;\n  print<T extends Tensor>(x: T, verbose: boolean): void;\n  reshape<R2 extends Rank>(x: Tensor, shape: ShapeMap[R2]): Tensor<R2>;\n  expandDims<R2 extends Rank>(x: Tensor, axis: number): Tensor<R2>;\n  cumsum<T extends Tensor>(\n      x: Tensor, axis: number, exclusive: boolean, reverse: boolean): T;\n  squeeze<T extends Tensor>(x: Tensor, axis?: number[]): T;\n  clone<T extends Tensor>(x: T): T;\n  gather<T extends Tensor>(x: T, indices: Tensor|TensorLike, axis: number): T;\n  matMul<T extends Tensor>(\n      a: T, b: T|TensorLike, transposeA: boolean, transposeB: boolean): T;\n  dot(t1: Tensor, t2: Tensor|TensorLike): Tensor;\n  norm(\n      x: Tensor, ord: number|'euclidean'|'fro', axis: number|number[],\n      keepDims: boolean): Tensor;\n  slice<R extends Rank, T extends Tensor<R>>(\n      x: T, begin: number|number[], size?: number|number[]): T;\n  split<T extends Tensor>(\n      x: T, numOrSizeSplits: number[]|number, axis?: number): T[];\n  reverse<T extends Tensor>(x: T, axis?: number|number[]): T;\n  concat<T extends Tensor>(tensors: Array<T|TensorLike>, axis: number): T;\n  stack<T extends Tensor>(tensors: Array<T|TensorLike>, axis: number): Tensor;\n  unstack<T extends Tensor>(value: T, axis: number): Tensor[];\n  all<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean): T;\n  any<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean): T;\n  logSumExp<T extends Tensor>(\n      x: Tensor, axis: number|number[], keepDims: boolean): T;\n  sum<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean): T;\n  prod<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean):\n      T;\n  mean<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean):\n      T;\n  min<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean): T;\n  max<T extends Tensor>(x: Tensor, axis: number|number[], keepDims: boolean): T;\n  argMin<T extends Tensor>(x: Tensor, axis: number): T;\n  argMax<T extends Tensor>(x: Tensor, axis: number): T;\n  addStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  atan2<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  sub<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  subStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  pow<T extends Tensor>(base: T, exp: Tensor|TensorLike): T;\n  powStrict<T extends Tensor>(base: T, exp: Tensor|TensorLike): T;\n  mul<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  mulStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  floorDiv<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  divStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  mod<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  modStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  minimum<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  minimumStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  maximum<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  maximumStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  squaredDifferenceStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  logicalNot<T extends Tensor>(x: T): T;\n  logicalAnd<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  logicalOr<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  logicalXor<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  where<T extends Tensor>(condition: Tensor|TensorLike, a: T, b: T|TensorLike):\n      T;\n  notEqual<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  notEqualStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  less<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  lessStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  equal<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  equalStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  lessEqual<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  lessEqualStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  greater<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  greaterStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  greaterEqual<T extends Tensor>(a: Tensor, b: Tensor|TensorLike): T;\n  greaterEqualStrict<T extends Tensor>(a: T, b: T|TensorLike): T;\n  neg<T extends Tensor>(x: T): T;\n  ceil<T extends Tensor>(x: T): T;\n  floor<T extends Tensor>(x: T): T;\n  sign<T extends Tensor>(x: T): T;\n  isNaN<T extends Tensor>(x: T): T;\n  isInf<T extends Tensor>(x: T): T;\n  isFinite<T extends Tensor>(x: T): T;\n  round<T extends Tensor>(x: T): T;\n  exp<T extends Tensor>(x: T): T;\n  expm1<T extends Tensor>(x: T): T;\n  log<T extends Tensor>(x: T): T;\n  log1p<T extends Tensor>(x: T): T;\n  sqrt<T extends Tensor>(x: T): T;\n  rsqrt<T extends Tensor>(x: T): T;\n  square<T extends Tensor>(x: T): T;\n  reciprocal<T extends Tensor>(x: T): T;\n  abs<T extends Tensor>(x: T): T;\n  clipByValue<T extends Tensor>(\n      x: T, clipValueMin: number, clipValueMax: number): T;\n  sigmoid<T extends Tensor>(x: T): T;\n  logSigmoid<T extends Tensor>(x: T): T;\n  softplus<T extends Tensor>(x: T): T;\n  zerosLike<T extends Tensor>(x: T): T;\n  onesLike<T extends Tensor>(x: T): T;\n  sin<T extends Tensor>(x: T): T;\n  cos<T extends Tensor>(x: T): T;\n  tan<T extends Tensor>(x: T): T;\n  asin<T extends Tensor>(x: T): T;\n  acos<T extends Tensor>(x: T): T;\n  atan<T extends Tensor>(x: T): T;\n  sinh<T extends Tensor>(x: T): T;\n  cosh<T extends Tensor>(x: T): T;\n  tanh<T extends Tensor>(x: T): T;\n  asinh<T extends Tensor>(x: T): T;\n  acosh<T extends Tensor>(x: T): T;\n  atanh<T extends Tensor>(x: T): T;\n  erf<T extends Tensor>(x: T): T;\n  step<T extends Tensor>(x: T, alpha: number): T;\n  relu<T extends Tensor>(x: T): T;\n  relu6<T extends Tensor>(x: T): T;\n  elu<T extends Tensor>(x: T): T;\n  selu<T extends Tensor>(x: T): T;\n  leakyRelu<T extends Tensor>(x: T, alpha: number): T;\n  prelu<T extends Tensor>(x: T, alpha: T|TensorLike): T;\n  softmax<T extends Tensor>(logits: T, dim: number): T;\n  logSoftmax<T extends Tensor>(logits: T, axis: number): T;\n  image: {\n    resizeBilinear<T extends Tensor3D|Tensor4D>(\n        images: T, size: [number, number], alignCorners: boolean): T;\n    resizeNearestNeighbor<T extends Tensor3D|Tensor4D>(\n        images: T, size: [number, number], alignCorners: boolean): T;\n  };\n  conv1d<T extends Tensor2D|Tensor3D>(\n      x: T, filter: Tensor3D|TensorLike3D, stride: number,\n      pad: 'valid'|'same'|number, dataFormat: 'NWC'|'NCW', dilation: number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  conv2d<T extends Tensor3D|Tensor4D>(\n      x: T, filter: Tensor4D|TensorLike4D, strides: [number, number]|number,\n      pad: 'valid'|'same'|number, dataFormat: 'NHWC'|'NCHW',\n      dilations: [number, number]|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  conv2dTranspose<T extends Tensor3D|Tensor4D>(\n      x: T, filter: Tensor4D|TensorLike4D,\n      outputShape: [number, number, number, number]|[number, number, number],\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  depthwiseConv2d<T extends Tensor3D|Tensor4D>(\n      x: T, filter: Tensor4D|TensorLike4D, strides: [number, number]|number,\n      pad: 'valid'|'same'|number, dataFormat: 'NHWC'|'NCHW',\n      dilations: [number, number]|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  separableConv2d<T extends Tensor3D|Tensor4D>(\n      x: T|TensorLike, depthwiseFilter: Tensor4D|TensorLike4D,\n      pointwiseFilter: Tensor4D|TensorLike, strides: [number, number]|number,\n      pad: 'valid'|'same', dilation: [number, number]|number,\n      dataFormat: 'NHWC'|'NCHW'): T;\n  maxPool<T extends Tensor3D|Tensor4D>(\n      x: T, filterSize: [number, number]|number,\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  avgPool<T extends Tensor3D|Tensor4D>(\n      x: T, filterSize: [number, number]|number,\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T;\n  pool<T extends Tensor3D|Tensor4D>(\n      input: T, windowShape: [number, number]|number, poolingType: 'avg'|'max',\n      padding: 'valid'|'same'|number, diationRate?: [number, number]|number,\n      strides?: [number, number]|number): T;\n  localResponseNormalization<T extends Tensor3D|Tensor4D>(\n      x: T, depthRadius: number, bias: number, alpha: number, beta: number): T;\n  unsortedSegmentSum<T extends Tensor>(\n      x: T, segmentIds: Tensor1D|TensorLike1D, numSegments: number): T;\n  batchToSpaceND<T extends Tensor>(\n      x: T, blockShape: number[], crops: number[][]): T;\n  spaceToBatchND<T extends Tensor>(\n      x: T, blockShape: number[], paddings: number[][]): T;\n  topk<T extends Tensor>(x: T, k: number, sorted: boolean):\n      {values: T, indices: T};\n  stridedSlice(\n      x: Tensor, begin: number[], end: number[], strides: number[],\n      beginMask: number, endMask: number, ellipsisMask: number,\n      newAxisMask: number, shrinkAxisMask: number): Tensor;\n  depthToSpace(x: Tensor4D, blockSize: number, dataFormat: string): Tensor4D;\n  spectral: {\n    fft(x: Tensor): Tensor; ifft(x: Tensor): Tensor; rfft(x: Tensor): Tensor;\n    irfft(x: Tensor): Tensor\n  };\n}\n\n// For tracking tensor creation and disposal.\nlet trackerFn: () => TensorTracker = null;\n// Used by chaining methods to call into ops.\nlet opHandler: OpHandler = null;\n// Used to warn about deprecated methods.\nlet deprecationWarningFn: (msg: string) => void = null;\n// This here so that we can use this method on dev branches and keep the\n// functionality at master.\n// tslint:disable-next-line:no-unused-expression\n[deprecationWarningFn];\n\n/**\n * An external consumer can register itself as the tensor tracker. This way\n * the Tensor class can notify the tracker for every tensor created and\n * disposed.\n */\nexport function setTensorTracker(fn: () => TensorTracker) {\n  trackerFn = fn;\n}\n\n/**\n * An external consumer can register itself as the op handler. This way the\n * Tensor class can have chaining methods that call into ops via the op\n * handler.\n */\nexport function setOpHandler(handler: OpHandler) {\n  opHandler = handler;\n}\n\n/**\n * Sets the deprecation warning function to be used by this file. This way the\n * Tensor class can be a leaf but still use the environment.\n */\nexport function setDeprecationWarningFn(fn: (msg: string) => void) {\n  deprecationWarningFn = fn;\n}\n\n/**\n * We wrap data id since we use weak map to avoid memory leaks.\n * Since we have our own memory management, we have a reference counter\n * mapping a tensor to its data, so there is always a pointer (even if that\n * data is otherwise garbage collectable).\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/\n * Global_Objects/WeakMap\n */\nexport type DataId = object;  // object instead of {} to force non-primitive.\n\n// Declare this namespace to make Tensor class augmentation work in google3.\nexport declare namespace Tensor {}\n/**\n * A `tf.Tensor` object represents an immutable, multidimensional array of\n * numbers that has a shape and a data type.\n *\n * See `tf.tensor` for details on how to create a `tf.Tensor`.\n */\n/** @doc {heading: 'Tensors', subheading: 'Classes'} */\nexport class Tensor<R extends Rank = Rank> {\n  /** Unique id of this tensor. */\n  readonly id: number;\n  /**\n   * Id of the bucket holding the data for this tensor. Multiple arrays can\n   * point to the same bucket (e.g. when calling array.reshape()).\n   */\n  dataId: DataId;\n  /** The shape of the tensor. */\n  readonly shape: ShapeMap[R];\n  /** Number of elements in the tensor. */\n  readonly size: number;\n  /** The data type for the array. */\n  readonly dtype: DataType;\n  /** The rank type for the array (see `Rank` enum). */\n  readonly rankType: R;\n\n  /** Whether this tensor has been globally kept. */\n  kept = false;\n  /** The id of the scope this tensor is being tracked in. */\n  scopeId: number;\n\n  /**\n   * Number of elements to skip in each dimension when indexing. See\n   * https://docs.scipy.org/doc/numpy/reference/generated/\\\n   * numpy.ndarray.strides.html\n   */\n  readonly strides: number[];\n\n  constructor(shape: ShapeMap[R], dtype: DataType, dataId: DataId, id: number) {\n    this.shape = shape.slice() as ShapeMap[R];\n    this.dtype = dtype || 'float32';\n    this.size = util.sizeFromShape(shape);\n    this.strides = computeStrides(shape);\n    this.dataId = dataId;\n    this.id = id;\n    this.rankType = (this.rank < 5 ? this.rank.toString() : 'higher') as R;\n  }\n\n  /** Flatten a Tensor to a 1D array. */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  flatten(): Tensor1D {\n    this.throwIfDisposed();\n    return this.as1D();\n  }\n\n  /** Converts a size-1 `tf.Tensor` to a `tf.Scalar`. */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  asScalar(): Scalar {\n    this.throwIfDisposed();\n    util.assert(this.size === 1, () => 'The array must have only 1 element.');\n    return this.reshape<Rank.R0>([]);\n  }\n\n  /** Converts a `tf.Tensor` to a `tf.Tensor1D`. */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  as1D(): Tensor1D {\n    this.throwIfDisposed();\n    return this.reshape<Rank.R1>([this.size]);\n  }\n\n  /**\n   * Converts a `tf.Tensor` to a `tf.Tensor2D`.\n   *\n   * @param rows Number of rows in `tf.Tensor2D`.\n   * @param columns Number of columns in `tf.Tensor2D`.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  as2D(rows: number, columns: number): Tensor2D {\n    this.throwIfDisposed();\n    return this.reshape<Rank.R2>([rows, columns]);\n  }\n\n  /**\n   * Converts a `tf.Tensor` to a `tf.Tensor3D`.\n   *\n   * @param rows Number of rows in `tf.Tensor3D`.\n   * @param columns Number of columns in `tf.Tensor3D`.\n   * @param depth Depth of `tf.Tensor3D`.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  as3D(rows: number, columns: number, depth: number): Tensor3D {\n    this.throwIfDisposed();\n    return this.reshape<Rank.R3>([rows, columns, depth]);\n  }\n\n  /**\n   * Converts a `tf.Tensor` to a `tf.Tensor4D`.\n   *\n   * @param rows Number of rows in `tf.Tensor4D`.\n   * @param columns Number of columns in `tf.Tensor4D`.\n   * @param depth Depth of `tf.Tensor4D`.\n   * @param depth2 4th dimension of `tf.Tensor4D`.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  as4D(rows: number, columns: number, depth: number, depth2: number): Tensor4D {\n    this.throwIfDisposed();\n    return this.reshape<Rank.R4>([rows, columns, depth, depth2]);\n  }\n\n  /**\n   * Converts a `tf.Tensor` to a `tf.Tensor5D`.\n   *\n   * @param rows Number of rows in `tf.Tensor5D`.\n   * @param columns Number of columns in `tf.Tensor5D`.\n   * @param depth Depth of `tf.Tensor5D`.\n   * @param depth2 4th dimension of `tf.Tensor5D`.\n   * @param depth3 5th dimension of 'tf.Tensor5D'\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  as5D(\n      rows: number, columns: number, depth: number, depth2: number,\n      depth3: number): Tensor5D {\n    this.throwIfDisposed();\n    return this.reshape<Rank.R5>([rows, columns, depth, depth2, depth3]);\n  }\n\n  /**\n   * Casts a `tf.Tensor` to a specified dtype.\n   *\n   * @param dtype Data-type to cast the tensor to.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  asType<T extends this>(this: T, dtype: DataType): T {\n    this.throwIfDisposed();\n    return opHandler.cast(this, dtype);\n  }\n\n  get rank(): number {\n    return this.shape.length;\n  }\n\n  /**\n   * Returns a promise of `tf.TensorBuffer` that holds the underlying data.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  async buffer<D extends DataType = 'float32'>(): Promise<TensorBuffer<R, D>> {\n    const vals = await this.data<D>();\n    return opHandler.buffer(this.shape, this.dtype as D, vals);\n  }\n\n  /** Returns a `tf.TensorBuffer` that holds the underlying data. */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  bufferSync<D extends DataType = 'float32'>(): TensorBuffer<R, D> {\n    return opHandler.buffer(this.shape, this.dtype as D, this.dataSync());\n  }\n\n  /**\n   * Returns the tensor data as a nested array. The transfer of data is done\n   * asynchronously.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  async array(): Promise<ArrayMap[R]> {\n    const vals = await this.data();\n    return toNestedArray(this.shape, vals) as ArrayMap[R];\n  }\n\n  /**\n   * Returns the tensor data as a nested array. The transfer of data is done\n   * synchronously.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  arraySync(): ArrayMap[R] {\n    return toNestedArray(this.shape, this.dataSync()) as ArrayMap[R];\n  }\n\n  /**\n   * Asynchronously downloads the values from the `tf.Tensor`. Returns a\n   * promise of `TypedArray` that resolves when the computation has finished.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  async data<D extends DataType = NumericDataType>(): Promise<DataTypeMap[D]> {\n    this.throwIfDisposed();\n    const data = trackerFn().read(this.dataId);\n    if (this.dtype === 'string') {\n      const bytes = await data as Uint8Array[];\n      try {\n        return bytes.map(b => util.decodeString(b)) as DataTypeMap[D];\n      } catch {\n        throw new Error(\n            'Failed to decode the string bytes into utf-8. ' +\n            'To get the original bytes, call tensor.bytes().');\n      }\n    }\n    return data as Promise<DataTypeMap[D]>;\n  }\n\n  /**\n   * Synchronously downloads the values from the `tf.Tensor`. This blocks the\n   * UI thread until the values are ready, which can cause performance issues.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  dataSync<D extends DataType = NumericDataType>(): DataTypeMap[D] {\n    this.throwIfDisposed();\n    const data = trackerFn().readSync(this.dataId);\n    if (this.dtype === 'string') {\n      try {\n        return (data as Uint8Array[]).map(b => util.decodeString(b)) as\n            DataTypeMap[D];\n      } catch {\n        throw new Error(\n            'Failed to decode the string bytes into utf-8. ' +\n            'To get the original bytes, call tensor.bytes().');\n      }\n    }\n    return data as DataTypeMap[D];\n  }\n\n  /** Returns the underlying bytes of the tensor's data. */\n  async bytes(): Promise<Uint8Array[]|Uint8Array> {\n    this.throwIfDisposed();\n    const data = await trackerFn().read(this.dataId);\n    if (this.dtype === 'string') {\n      return data as Uint8Array[];\n    } else {\n      return new Uint8Array((data as TypedArray).buffer);\n    }\n  }\n\n  /**\n   * Disposes `tf.Tensor` from memory.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  dispose(): void {\n    if (this.isDisposed) {\n      return;\n    }\n    trackerFn().disposeTensor(this);\n    this.isDisposedInternal = true;\n  }\n\n  protected isDisposedInternal = false;\n  get isDisposed(): boolean {\n    return this.isDisposedInternal;\n  }\n\n  private throwIfDisposed() {\n    if (this.isDisposed) {\n      throw new Error(`Tensor is disposed.`);\n    }\n  }\n\n  /** Casts the array to type `float32` */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  toFloat<T extends this>(this: T): T {\n    return this.asType('float32');\n  }\n\n  /** Casts the array to type `int32` */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  toInt() {\n    return this.asType('int32');\n  }\n\n  /** Casts the array to type `bool` */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  toBool() {\n    return this.asType('bool');\n  }\n\n  /**\n   * Prints the `tf.Tensor`. See `tf.print` for details.\n   *\n   * @param verbose Whether to print verbose information about the tensor,\n   *    including dtype and size.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  print(verbose = false): void {\n    return opHandler.print(this, verbose);\n  }\n\n  /**\n   * Reshapes the tensor into the provided shape.\n   * See `tf.reshape` for more details.\n   *\n   * @param newShape An array of integers defining the output tensor shape.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  reshape<R2 extends Rank>(newShape: ShapeMap[R2]): Tensor<R2> {\n    this.throwIfDisposed();\n    return opHandler.reshape(this, newShape);\n  }\n\n  /**\n   * Reshapes the tensor into the shape of the provided tensor.\n   *\n   * @param x The tensor of required shape.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  reshapeAs<T extends Tensor>(x: T): T {\n    this.throwIfDisposed();\n    return this.reshape(x.shape) as T;\n  }\n\n  /**\n   * Returns a `tf.Tensor` that has expanded rank, by inserting a dimension\n   * into the tensor's shape. See `tf.expandDims` for details.\n   *\n   * @param axis The dimension index at which to insert shape of 1. Defaults to\n   *     0 (the first dimension).\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  expandDims<R2 extends Rank>(axis = 0): Tensor<R2> {\n    return opHandler.expandDims(this, axis);\n  }\n\n  /**\n   * Returns the cumulative sum of the `tf.Tensor` along `axis`.\n   *\n   * @param axis The axis along which to sum. Optional. Defaults to 0.\n   * @param exclusive Whether to perform exclusive cumulative sum. Defaults to\n   *    false. If set to true then the sum of each tensor entry does not\n   * include its own value, but only the values previous to it along the\n   * specified axis.\n   * @param reverse Whether to sum in the opposite direction. Defaults to\n   *    false.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  cumsum<T extends Tensor>(axis = 0, exclusive = false, reverse = false): T {\n    return opHandler.cumsum(this, axis, exclusive, reverse);\n  }\n\n  /**\n   * Returns a `tf.Tensor` with dimensions of size 1 removed from the shape.\n   * See `tf.squeeze` for more details.\n   *\n   * @param axis A list of numbers. If specified, only squeezes the\n   *    dimensions listed. The dimension index starts at 0. It is an error to\n   *    squeeze a dimension that is not 1.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  squeeze<T extends Tensor>(axis?: number[]): T {\n    this.throwIfDisposed();\n    return opHandler.squeeze(this, axis);\n  }\n\n  /** Returns a copy of the tensor. See `tf.clone` for details. */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  clone<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.clone(this);\n  }\n\n  /**\n   * Returns a human-readable description of the tensor. Useful for logging.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  toString(verbose = false): string {\n    const vals = this.dataSync();\n    return tensorToString(vals, this.shape, this.dtype, verbose);\n  }\n\n  // Below is chain API that is not exposed to docs to avoid repetition. To\n  // expose a method, move it above this comment and add @doc and jsdoc.\n\n  gather<T extends this>(this: T, indices: Tensor|TensorLike, axis = 0): T {\n    this.throwIfDisposed();\n    return opHandler.gather(this, indices, axis);\n  }\n\n  matMul<T extends Tensor>(\n      this: T, b: T|TensorLike, transposeA = false, transposeB = false): T {\n    this.throwIfDisposed();\n    return opHandler.matMul(this, b, transposeA, transposeB);\n  }\n  dot(b: Tensor|TensorLike): Tensor {\n    this.throwIfDisposed();\n    return opHandler.dot(this, b);\n  }\n  norm(\n      ord: number|'euclidean'|'fro' = 'euclidean', axis: number|number[] = null,\n      keepDims = false): Tensor {\n    this.throwIfDisposed();\n    return opHandler.norm(this, ord, axis, keepDims);\n  }\n  slice<T extends Tensor<R>>(\n      this: T, begin: number|number[], size?: number|number[]): T {\n    this.throwIfDisposed();\n    return opHandler.slice(this, begin, size);\n  }\n  reverse<T extends Tensor>(this: T, axis?: number|number[]): T {\n    this.throwIfDisposed();\n    return opHandler.reverse(this, axis);\n  }\n  concat<T extends Tensor>(this: T, x: T|Array<T|TensorLike>, axis = 0): T {\n    this.throwIfDisposed();\n    if (x instanceof Tensor) {\n      x = [x];\n    }\n    return opHandler.concat([this, ...x], axis);\n  }\n  split<T extends Tensor>(this: T, numOrSizeSplits: number[]|number, axis = 0):\n      T[] {\n    this.throwIfDisposed();\n    return opHandler.split(this, numOrSizeSplits, axis);\n  }\n  stack(x: Tensor, axis = 0): Tensor {\n    return opHandler.stack([this, x], axis);\n  }\n  unstack(axis = 0): Tensor[] {\n    return opHandler.unstack(this, axis);\n  }\n  /**\n   * @deprecated Use `tf.batchNorm` instead, and note the positional argument\n   *     change of scale, offset, and varianceEpsilon.\n   */\n  batchNormalization(\n      mean: Tensor<R>|Tensor1D|TensorLike,\n      variance: Tensor<R>|Tensor1D|TensorLike, varianceEpsilon = .001,\n      scale?: Tensor<R>|Tensor1D|TensorLike,\n      offset?: Tensor<R>|Tensor1D|TensorLike): Tensor<R> {\n    deprecationWarningFn(\n        'tf.batchNormalization() is going away. ' +\n        'Use tf.batchNorm() instead, and note the positional argument change ' +\n        'of scale, offset, and varianceEpsilon');\n    return this.batchNorm(mean, variance, offset, scale, varianceEpsilon);\n  }\n\n  // Reduction ops.\n  all<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.all(this, axis, keepDims);\n  }\n  any<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.any(this, axis, keepDims);\n  }\n  logSumExp<T extends Tensor>(axis: number|number[] = null, keepDims = false):\n      T {\n    this.throwIfDisposed();\n    return opHandler.logSumExp(this, axis, keepDims);\n  }\n  sum<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.sum(this, axis, keepDims);\n  }\n  prod<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.prod(this, axis, keepDims);\n  }\n  mean<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.mean(this, axis, keepDims);\n  }\n  min<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.min(this, axis, keepDims);\n  }\n  max<T extends Tensor>(axis: number|number[] = null, keepDims = false): T {\n    this.throwIfDisposed();\n    return opHandler.max(this, axis, keepDims);\n  }\n  argMin<T extends Tensor>(axis: number = null): T {\n    this.throwIfDisposed();\n    return opHandler.argMin(this, axis);\n  }\n  argMax<T extends Tensor>(axis: number = null): T {\n    this.throwIfDisposed();\n    return opHandler.argMax(this, axis);\n  }\n\n  // Transformations\n  cast<T extends this>(dtype: DataType): T {\n    this.throwIfDisposed();\n    return opHandler.cast(this as T, dtype);\n  }\n\n  // Binary ops.\n  addStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.addStrict(this, x);\n  }\n  atan2<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.atan2(this, x);\n  }\n  sub<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.sub(this, x);\n  }\n  subStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.subStrict(this, x);\n  }\n  pow<T extends Tensor>(this: T, exp: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.pow(this, exp);\n  }\n  powStrict(exp: Tensor|TensorLike): Tensor<R> {\n    this.throwIfDisposed();\n    return opHandler.powStrict(this, exp);\n  }\n  mul<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.mul(this, x);\n  }\n  mulStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.mulStrict(this, x);\n  }\n  floorDiv<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.floorDiv(this, x);\n  }\n  divStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.divStrict(this, x);\n  }\n  minimum<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.minimum(this, x);\n  }\n  minimumStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.minimumStrict(this, x);\n  }\n  maximum<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.maximum(this, x);\n  }\n  maximumStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.maximumStrict(this, x);\n  }\n  mod<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.mod(this, x);\n  }\n  modStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.modStrict(this, x);\n  }\n  squaredDifferenceStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.squaredDifferenceStrict(this, x);\n  }\n\n  // Compare ops.\n\n  notEqual<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.notEqual(this, x);\n  }\n  notEqualStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.notEqualStrict(this, x);\n  }\n  less<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.less(this, x);\n  }\n  lessStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.lessStrict(this, x);\n  }\n  equal<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.equal(this, x);\n  }\n  equalStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.equalStrict(this, x);\n  }\n  lessEqual<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.lessEqual(this, x);\n  }\n  lessEqualStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.lessEqualStrict(this, x);\n  }\n  greater<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.greater(this, x);\n  }\n  greaterStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.greaterStrict(this, x);\n  }\n  greaterEqual<T extends Tensor>(x: Tensor|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.greaterEqual(this, x);\n  }\n  greaterEqualStrict<T extends this>(this: T, x: T|TensorLike): T {\n    this.throwIfDisposed();\n    return opHandler.greaterEqualStrict(this, x);\n  }\n\n  // Compare ops.\n  logicalAnd(x: Tensor|TensorLike): Tensor {\n    this.throwIfDisposed();\n    return opHandler.logicalAnd(this, x);\n  }\n  logicalOr(x: Tensor|TensorLike): Tensor {\n    this.throwIfDisposed();\n    return opHandler.logicalOr(this, x);\n  }\n  logicalNot<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.logicalNot(this);\n  }\n  logicalXor(x: Tensor|TensorLike): Tensor {\n    this.throwIfDisposed();\n    return opHandler.logicalXor(this, x);\n  }\n  where(condition: Tensor|TensorLike, x: Tensor|TensorLike): Tensor {\n    this.throwIfDisposed();\n    return opHandler.where(condition, this, x);\n  }\n\n  // Unary ops.\n  neg<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.neg(this);\n  }\n  ceil<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.ceil(this);\n  }\n  floor<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.floor(this);\n  }\n  sign<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.sign(this);\n  }\n  isNaN<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.isNaN(this);\n  }\n  isInf<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.isInf(this);\n  }\n  isFinite<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.isFinite(this);\n  }\n  exp<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.exp(this);\n  }\n  expm1<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.expm1(this);\n  }\n  log<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.log(this);\n  }\n  log1p<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.log1p(this);\n  }\n  sqrt<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.sqrt(this);\n  }\n  rsqrt<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.rsqrt(this);\n  }\n  square<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.square(this);\n  }\n  reciprocal<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.reciprocal(this);\n  }\n  abs<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.abs(this);\n  }\n  clipByValue(min: number, max: number): Tensor<R> {\n    this.throwIfDisposed();\n    return opHandler.clipByValue(this, min, max);\n  }\n  relu<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.relu(this);\n  }\n  relu6<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.relu6(this);\n  }\n  elu<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.elu(this);\n  }\n  selu<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.selu(this);\n  }\n  leakyRelu(alpha = 0.2): Tensor<R> {\n    this.throwIfDisposed();\n    return opHandler.leakyRelu(this, alpha);\n  }\n  prelu(alpha: Tensor<R>|TensorLike): Tensor<R> {\n    this.throwIfDisposed();\n    return opHandler.prelu(this, alpha);\n  }\n  sigmoid<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.sigmoid(this);\n  }\n  logSigmoid<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.logSigmoid(this);\n  }\n  softplus<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.softplus(this);\n  }\n  zerosLike<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.zerosLike(this);\n  }\n  onesLike<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.onesLike(this);\n  }\n  sin<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.sin(this);\n  }\n  cos<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.cos(this);\n  }\n  tan<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.tan(this);\n  }\n  asin<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.asin(this);\n  }\n  acos<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.acos(this);\n  }\n  atan<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.atan(this);\n  }\n  sinh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.sinh(this);\n  }\n  cosh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.cosh(this);\n  }\n  tanh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.tanh(this);\n  }\n  asinh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.asinh(this);\n  }\n  acosh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.acosh(this);\n  }\n  atanh<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.atanh(this);\n  }\n  erf<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.erf(this);\n  }\n  round<T extends Tensor>(this: T): T {\n    this.throwIfDisposed();\n    return opHandler.round(this);\n  }\n  step<T extends Tensor>(this: T, alpha = 0.0): T {\n    this.throwIfDisposed();\n    return opHandler.step(this, alpha);\n  }\n  softmax<T extends this>(this: T, dim = -1): T {\n    this.throwIfDisposed();\n    return opHandler.softmax(this, dim);\n  }\n  logSoftmax<T extends this>(this: T, axis = -1): T {\n    this.throwIfDisposed();\n    return opHandler.logSoftmax(this, axis);\n  }\n\n  // Image ops.\n  resizeBilinear<T extends Tensor3D|Tensor4D>(\n      this: T, newShape2D: [number, number], alignCorners = false): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.image.resizeBilinear(this, newShape2D, alignCorners);\n  }\n\n  resizeNearestNeighbor<T extends Tensor3D|Tensor4D>(\n      this: T, newShape2D: [number, number], alignCorners = false): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.image.resizeNearestNeighbor(\n        this, newShape2D, alignCorners);\n  }\n\n  // Convolutions.\n  conv1d<T extends Tensor2D|Tensor3D>(\n      this: T, filter: Tensor3D|TensorLike3D, stride: number,\n      pad: 'valid'|'same'|number, dataFormat: 'NWC'|'NCW' = 'NWC', dilation = 1,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.conv1d(\n        this, filter, stride, pad, dataFormat, dilation, dimRoundingMode);\n  }\n  conv2d<T extends Tensor3D|Tensor4D>(\n      this: T, filter: Tensor4D|TensorLike4D, strides: [number, number]|number,\n      pad: 'valid'|'same'|number, dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n      dilations: [number, number]|number = [1, 1],\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.conv2d(\n        this, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n  }\n  conv2dTranspose<T extends Tensor3D|Tensor4D>(\n      this: T, filter: Tensor4D|TensorLike4D,\n      outputShape: [number, number, number, number]|[number, number, number],\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.conv2dTranspose(\n        this, filter, outputShape, strides, pad, dimRoundingMode);\n  }\n  depthwiseConv2D<T extends Tensor3D|Tensor4D>(\n      this: T, filter: Tensor4D|TensorLike4D, strides: [number, number]|number,\n      pad: 'valid'|'same'|number, dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n      dilations: [number, number]|number = [1, 1],\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.depthwiseConv2d(\n        this, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n  }\n\n  separableConv2d<T extends Tensor3D|Tensor4D>(\n      this: T|TensorLike, depthwiseFilter: Tensor4D|TensorLike4D,\n      pointwiseFilter: Tensor4D|TensorLike, strides: [number, number]|number,\n      pad: 'valid'|'same', dilation: [number, number]|number = [1, 1],\n      dataFormat: 'NHWC'|'NCHW' = 'NHWC'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.separableConv2d(\n        this, depthwiseFilter, pointwiseFilter, strides, pad, dilation,\n        dataFormat);\n  }\n\n  // Pooling.\n  avgPool<T extends Tensor3D|Tensor4D>(\n      this: T, filterSize: [number, number]|number,\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.avgPool(this, filterSize, strides, pad, dimRoundingMode);\n  }\n  maxPool<T extends Tensor3D|Tensor4D>(\n      this: T, filterSize: [number, number]|number,\n      strides: [number, number]|number, pad: 'valid'|'same'|number,\n      dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.maxPool(this, filterSize, strides, pad, dimRoundingMode);\n  }\n  localResponseNormalization<T extends Tensor3D|Tensor4D>(\n      this: T, radius = 5, bias = 1, alpha = 1, beta = 0.5): T {\n    return opHandler.localResponseNormalization(\n        this, radius, bias, alpha, beta);\n  }\n  pool<T extends Tensor3D|Tensor4D>(\n      this: T, windowShape: [number, number]|number, poolingType: 'max'|'avg',\n      padding: 'valid'|'same'|number, dilationRate?: [number, number]|number,\n      strides?: [number, number]|number): T {\n    (this as Tensor).throwIfDisposed();\n    return opHandler.pool(\n        this, windowShape, poolingType, padding, dilationRate, strides);\n  }\n\n  variable(trainable = true, name?: string, dtype?: DataType): Variable<R> {\n    this.throwIfDisposed();\n    return trackerFn().makeVariable(this, trainable, name, dtype) as\n        Variable<R>;\n  }\n\n  unsortedSegmentSum<T extends Tensor>(\n      this: T, segmentIds: Tensor1D|TensorLike1D, numSegments: number): T {\n    this.throwIfDisposed();\n    return opHandler.unsortedSegmentSum(this, segmentIds, numSegments);\n  }\n\n  batchToSpaceND<T extends Tensor>(\n      this: T, blockShape: number[], crops: number[][]): T {\n    this.throwIfDisposed();\n    return opHandler.batchToSpaceND(this, blockShape, crops);\n  }\n\n  spaceToBatchND<T extends Tensor>(\n      this: T, blockShape: number[], paddings: number[][]): T {\n    this.throwIfDisposed();\n    return opHandler.spaceToBatchND(this, blockShape, paddings);\n  }\n\n  topk<T extends Tensor>(this: T, k = 1, sorted = true):\n      {values: T, indices: T} {\n    this.throwIfDisposed();\n    return opHandler.topk(this, k, sorted);\n  }\n\n  stridedSlice(\n      this: Tensor, begin: number[], end: number[], strides: number[],\n      beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0,\n      shrinkAxisMask = 0): Tensor {\n    this.throwIfDisposed();\n    return opHandler.stridedSlice(\n        this, begin, end, strides, beginMask, endMask, ellipsisMask,\n        newAxisMask, shrinkAxisMask);\n  }\n\n  depthToSpace(this: Tensor4D, blockSize: number, dataFormat: 'NHWC'|'NCHW'):\n      Tensor4D {\n    this.throwIfDisposed();\n    return opHandler.depthToSpace(this, blockSize, dataFormat);\n  }\n\n  fft(this: Tensor): Tensor {\n    this.throwIfDisposed();\n    return opHandler.spectral.fft(this);\n  }\n\n  ifft(this: Tensor): Tensor {\n    this.throwIfDisposed();\n    return opHandler.spectral.ifft(this);\n  }\n\n  rfft(this: Tensor): Tensor {\n    this.throwIfDisposed();\n    return opHandler.spectral.rfft(this);\n  }\n\n  irfft(this: Tensor): Tensor {\n    this.throwIfDisposed();\n    return opHandler.spectral.irfft(this);\n  }\n}\nObject.defineProperty(Tensor, Symbol.hasInstance, {\n  value: (instance: Tensor) => {\n    return !!instance && instance.dataId != null && instance.shape != null &&\n        instance.dtype != null;\n  }\n});\n\nexport interface NumericTensor<R extends Rank = Rank> extends Tensor<R> {\n  dtype: NumericDataType;\n  dataSync<D extends DataType = NumericDataType>(): DataTypeMap[D];\n  data<D extends DataType = NumericDataType>(): Promise<DataTypeMap[D]>;\n}\n\nexport interface StringTensor<R extends Rank = Rank> extends Tensor<R> {\n  dtype: 'string';\n  dataSync<D extends DataType = 'string'>(): DataTypeMap[D];\n  data<D extends DataType = 'string'>(): Promise<DataTypeMap[D]>;\n}\n\n/** @doclink Tensor */\nexport type Scalar = Tensor<Rank.R0>;\n/** @doclink Tensor */\nexport type Tensor1D = Tensor<Rank.R1>;\n/** @doclink Tensor */\nexport type Tensor2D = Tensor<Rank.R2>;\n/** @doclink Tensor */\nexport type Tensor3D = Tensor<Rank.R3>;\n/** @doclink Tensor */\nexport type Tensor4D = Tensor<Rank.R4>;\n/** @doclink Tensor */\nexport type Tensor5D = Tensor<Rank.R5>;\n/** @doclink Tensor */\nexport type Tensor6D = Tensor<Rank.R6>;\n\n/**\n * A mutable `tf.Tensor`, useful for persisting state, e.g. for training.\n */\n/** @doc {heading: 'Tensors', subheading: 'Classes'} */\nexport class Variable<R extends Rank = Rank> extends Tensor<R> {\n  name: string;\n\n  constructor(\n      initialValue: Tensor<R>, public trainable: boolean, name: string,\n      tensorId: number) {\n    super(\n        initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId);\n    this.name = name;\n  }\n\n  /**\n   * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have\n   * the same shape and dtype as the old `tf.Tensor`.\n   *\n   * @param newValue New tensor to be assigned to this variable.\n   */\n  /** @doc {heading: 'Tensors', subheading: 'Classes'} */\n  assign(newValue: Tensor<R>): void {\n    if (newValue.dtype !== this.dtype) {\n      throw new Error(\n          `dtype of the new value (${newValue.dtype}) and ` +\n          `previous value (${this.dtype}) must match`);\n    }\n    if (!util.arraysEqual(newValue.shape, this.shape)) {\n      throw new Error(\n          `shape of the new value (${newValue.shape}) and ` +\n          `previous value (${this.shape}) must match`);\n    }\n    trackerFn().disposeTensor(this);\n    this.dataId = newValue.dataId;\n    trackerFn().incRef(this, null /* backend */);\n  }\n\n  dispose(): void {\n    trackerFn().disposeVariable(this);\n    this.isDisposedInternal = true;\n  }\n}\n\nObject.defineProperty(Variable, Symbol.hasInstance, {\n  value: (instance: Variable) => {\n    return instance instanceof Tensor && instance.assign != null &&\n        instance.assign instanceof Function;\n  }\n});\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/** @docalias number[] */\nexport interface ShapeMap {\n  R0: number[];\n  R1: [number];\n  R2: [number, number];\n  R3: [number, number, number];\n  R4: [number, number, number, number];\n  R5: [number, number, number, number, number];\n  R6: [number, number, number, number, number, number];\n}\n\n/** @docalias number[] */\nexport interface ArrayMap {\n  R0: number;\n  R1: number[];\n  R2: number[][];\n  R3: number[][][];\n  R4: number[][][][];\n  R5: number[][][][][];\n  R6: number[][][][][][];\n}\n\nexport interface DataTypeMap {\n  float32: Float32Array;\n  int32: Int32Array;\n  bool: Uint8Array;\n  complex64: Float32Array;\n  string: string[];\n}\n\nexport interface SingleValueMap {\n  bool: boolean;\n  int32: number;\n  float32: number;\n  complex64: number;\n  string: string;\n}\n\n/** @docalias 'float32'|'int32'|'bool'|'complex64'|'string' */\nexport type DataType = keyof DataTypeMap;\nexport type NumericDataType = 'float32'|'int32'|'bool'|'complex64';\nexport type TypedArray = Float32Array|Int32Array|Uint8Array;\n/** Tensor data used in tensor creation and user-facing API. */\nexport type DataValues = DataTypeMap[DataType];\n/** The underlying tensor data that gets stored in a backend. */\nexport type BackendValues = Float32Array|Int32Array|Uint8Array|Uint8Array[];\n\nexport enum Rank {\n  R0 = 'R0',\n  R1 = 'R1',\n  R2 = 'R2',\n  R3 = 'R3',\n  R4 = 'R4',\n  R5 = 'R5',\n  R6 = 'R6'\n}\n\nexport type FlatVector = boolean[]|number[]|TypedArray;\nexport type RegularArray<T> =\n    T[]|T[][]|T[][][]|T[][][][]|T[][][][][]|T[][][][][][];\n\n// tslint:disable-next-line:no-any\nexport interface RecursiveArray<T extends any> {\n  [index: number]: T|RecursiveArray<T>;\n}\n\n// Looks for upcasting types. Used, for example, in operations with mixed dtype\n// inputs.\nenum UpcastInt32AndMap {\n  'float32' = 'float32',\n  'int32' = 'int32',\n  'bool' = 'int32',\n  'complex64' = 'complex64'\n}\n\nenum UpcastBoolAndMap {\n  'float32' = 'float32',\n  'int32' = 'int32',\n  'bool' = 'bool',\n  'complex64' = 'complex64'\n}\n\nenum UpcastFloat32AndMap {\n  'float32' = 'float32',\n  'int32' = 'float32',\n  'bool' = 'float32',\n  'complex64' = 'complex64'\n}\n\nenum UpcastComplex64AndMap {\n  'float32' = 'complex64',\n  'int32' = 'complex64',\n  'bool' = 'complex64',\n  'complex64' = 'complex64'\n}\n\nconst upcastTypeMap = {\n  'float32': UpcastFloat32AndMap,\n  'int32': UpcastInt32AndMap,\n  'bool': UpcastBoolAndMap,\n  'complex64': UpcastComplex64AndMap\n};\n\nexport function upcastType(typeA: DataType, typeB: DataType): DataType {\n  if (typeA === 'string' || typeB === 'string') {\n    if (typeA === 'string' && typeB === 'string') {\n      return 'string';\n    }\n    throw new Error(`Can not upcast ${typeA} with ${typeB}`);\n  }\n  return upcastTypeMap[typeA][typeB];\n}\n\n/** Returns the output type after summation. */\nexport function sumOutType(type: DataType): DataType {\n  return upcastType(type, 'int32');\n}\n\n/** @docalias TypedArray|Array */\nexport type TensorLike =\n    TypedArray|number|boolean|string|RecursiveArray<number|number[]|TypedArray>|\n    RecursiveArray<boolean>|RecursiveArray<string>|Uint8Array[];\nexport type ScalarLike = number|boolean|string|Uint8Array;\n/** @docalias TypedArray|Array */\nexport type TensorLike1D = TypedArray|number[]|boolean[]|string[]|Uint8Array[];\n/** @docalias TypedArray|Array */\nexport type TensorLike2D = TypedArray|number[]|number[][]|boolean[]|boolean[][]|\n    string[]|string[][]|Uint8Array[]|Uint8Array[][];\n/** @docalias TypedArray|Array */\nexport type TensorLike3D = TypedArray|number[]|number[][][]|boolean[]|\n    boolean[][][]|string[]|string[][][]|Uint8Array[]|Uint8Array[][][];\n/** @docalias TypedArray|Array */\nexport type TensorLike4D = TypedArray|number[]|number[][][][]|boolean[]|\n    boolean[][][][]|string[]|string[][][][]|Uint8Array[]|Uint8Array[][][][];\n/** @docalias TypedArray|Array */\nexport type TensorLike5D =\n    TypedArray|number[]|number[][][][][]|boolean[]|boolean[][][][][]|string[]|\n    string[][][][][]|Uint8Array[]|Uint8Array[][][][][];\n/** @docalias TypedArray|Array */\nexport type TensorLike6D =\n    TypedArray|number[]|number[][][][][][]|boolean[]|boolean[][][][][][]|\n    string[]|string[][][][][][]|Uint8Array[]|Uint8Array[][][][][];\n\n/** Type for representing image dat in Uint8Array type. */\nexport interface PixelData {\n  width: number;\n  height: number;\n  data: Uint8Array;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from './tensor';\nimport {TensorContainer, TensorContainerArray} from './tensor_types';\nimport {upcastType} from './types';\nimport {assert} from './util';\n\nexport function makeTypesMatch<T extends Tensor>(a: T, b: T): [T, T] {\n  if (a.dtype === b.dtype) {\n    return [a, b];\n  }\n  const dtype = upcastType(a.dtype, b.dtype);\n  return [a.cast(dtype), b.cast(dtype)];\n}\n\nexport function assertTypesMatch(a: Tensor, b: Tensor): void {\n  assert(\n      a.dtype === b.dtype,\n      () => `The dtypes of the first(${a.dtype}) and` +\n          ` second(${b.dtype}) input must match`);\n}\n\nexport function isTensorInList(tensor: Tensor, tensorList: Tensor[]): boolean {\n  return tensorList.some(x => x.id === tensor.id);\n}\n\n/**\n * Extracts any `Tensor`s found within the provided object.\n *\n * @param container an object that may be a `Tensor` or may directly contain\n *   `Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. In general it\n *   is safe to pass any object here, except that `Promise`s are not\n *   supported.\n * @returns An array of `Tensors` found within the passed object. If the\n *   argument is simply a `Tensor', a list containing that `Tensor` is\n *   returned. If the object is not a `Tensor` or does not\n *   contain `Tensors`, an empty list is returned.\n */\nexport function getTensorsInContainer(result: TensorContainer): Tensor[] {\n  const list: Tensor[] = [];\n  const seen = new Set<{}|void>();\n  walkTensorContainer(result, list, seen);\n  return list;\n}\n\nfunction walkTensorContainer(\n    container: TensorContainer, list: Tensor[], seen: Set<{}|void>): void {\n  if (container == null) {\n    return;\n  }\n  if (container instanceof Tensor) {\n    list.push(container);\n    return;\n  }\n  if (!isIterable(container)) {\n    return;\n  }\n  // Iteration over keys works also for arrays.\n  const iterable = container as TensorContainerArray;\n  for (const k in iterable) {\n    const val = iterable[k];\n    if (!seen.has(val)) {\n      seen.add(val);\n      walkTensorContainer(val, list, seen);\n    }\n  }\n}\n\n// tslint:disable-next-line:no-any\nfunction isIterable(obj: any): boolean {\n  return Array.isArray(obj) || typeof obj === 'object';\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {BackendTimingInfo, DataMover, KernelBackend} from './backends/backend';\nimport {Environment, setEnvironmentGlobal} from './environment';\nimport {getGradient, getKernel, getKernelsForBackend, GradFunc, NamedAttrMap, TensorInfo} from './kernel_registry';\nimport {Profiler} from './profiler';\nimport {backpropagateGradients, getFilteredNodesXToY, TapeNode} from './tape';\nimport {DataId, setTensorTracker, Tensor, TensorTracker, Variable} from './tensor';\nimport {GradSaveFunc, NamedTensorMap, NamedVariableMap, TensorContainer} from './tensor_types';\nimport {getTensorsInContainer} from './tensor_util';\nimport {BackendValues, DataType, DataValues} from './types';\nimport * as util from './util';\nimport {bytesFromStringArray, makeOnesTypedArray, now, sizeFromShape} from './util';\n\n/**\n * A function that computes an output. The save function is for saving tensors\n * computed in the forward pass, that we need in the backward pass.\n */\nexport type ForwardFunc<T> = (backend: KernelBackend, save?: GradSaveFunc) => T;\n\n/**\n * @docalias (a: Tensor, b: Tensor,..., save?: Function) => {\n *   value: Tensor,\n *   gradFunc: (dy: Tensor, saved?: NamedTensorMap) => Tensor | Tensor[]\n * }\n */\nexport type CustomGradientFunc<T extends Tensor> =\n    (...inputs: Array<Tensor|GradSaveFunc>) => {\n      value: T;\n      gradFunc: (dy: T, saved: Tensor[]) => Tensor | Tensor[];\n    };\n\nexport type MemoryInfo = {\n  numTensors: number; numDataBuffers: number; numBytes: number;\n  unreliable?: boolean; reasons: string[];\n};\n\ntype KernelProfile = {\n  name: string; bytesAdded: number; totalBytesSnapshot: number;\n  tensorsAdded: number;\n  totalTensorsSnapshot: number;\n  inputShapes: number[][];\n  outputShapes: number[][];\n};\n\nexport type ProfileInfo = {\n  newBytes: number; newTensors: number; peakBytes: number;\n  kernels: KernelProfile[];\n  result: TensorContainer;\n};\n\nexport interface TimingInfo extends BackendTimingInfo {\n  wallMs: number;\n}\n\n/** @docalias Function */\nexport type ScopeFn<T extends TensorContainer> = () => T;\n\ninterface ScopeState {\n  track: Tensor[];\n  name: string;\n  id: number;\n}\n\nclass EngineState {\n  // Public since optimizers will use it.\n  registeredVariables: NamedVariableMap = {};\n\n  nextTapeNodeId = 0;\n  numBytes = 0;\n  numTensors = 0;\n  numStringTensors = 0;\n  numDataBuffers = 0;\n\n  activeTape: TapeNode[];\n  // Number of nested tf.grad() statements when computing higher-order\n  // gradients. E.g. `1` for first-order gradients and `2` for second-order\n  // gradients. Used to track if the tape should be removed after a backprop.\n  gradientDepth = 0;\n  // Number of nested kernel calls. When kernel depth is greater than 1, we turn\n  // off the tape.\n  kernelDepth = 0;\n\n  // Keep Tensors that parallel the tapes.\n  activeScope: ScopeState;\n  scopeStack: ScopeState[] = [];\n  /**\n   * Keeps track of the number of data moves during a kernel execution. We\n   * maintain a stack since kernels can call other kernels, recursively.\n   */\n  numDataMovesStack: number[] = [];\n  nextScopeId = 0;\n\n  tensorInfo = new WeakMap<DataId, {\n    backend: KernelBackend,\n    bytes: number,\n    dtype: DataType,\n    shape: number[],\n    refCount: number\n  }>();\n\n  profiling = false;\n  activeProfile: ProfileInfo =\n      {newBytes: 0, newTensors: 0, peakBytes: 0, kernels: [], result: null};\n\n  dispose() {\n    for (const variableName in this.registeredVariables) {\n      this.registeredVariables[variableName].dispose();\n    }\n  }\n}\n\nexport class Engine implements TensorTracker, DataMover {\n  state: EngineState;\n  backendName: string;\n  registry: {[id: string]: KernelBackend} = {};\n  registryFactory: {\n    [id: string]: {\n      factory: () => KernelBackend | Promise<KernelBackend>,\n      priority: number\n    }\n  } = {};\n\n  private profiler: Profiler;\n  private backendInstance: KernelBackend;\n  private pendingBackendInit: Promise<boolean>;\n  private pendingBackendInitId = 0;\n\n  constructor(public ENV: Environment) {\n    this.state = new EngineState();\n  }\n\n  async ready(): Promise<void> {\n    if (this.pendingBackendInit != null) {\n      return this.pendingBackendInit.then(() => {});\n    }\n    if (this.backendInstance != null) {\n      return;\n    }\n    const sortedBackends = this.getSortedBackends();\n\n    for (let i = 0; i < sortedBackends.length; i++) {\n      const backendName = sortedBackends[i];\n      const success = await this.initializeBackend(backendName).success;\n      if (success) {\n        await this.setBackend(backendName);\n        return;\n      }\n    }\n\n    throw new Error(\n        `Could not initialize any backends, all backend initializations ` +\n        `failed.`);\n  }\n\n  get backend(): KernelBackend {\n    if (this.pendingBackendInit != null) {\n      throw new Error(\n          `Backend '${this.backendName}' has not yet been initialized. Make ` +\n          `sure to await tf.ready() or await tf.setBackend() before calling ` +\n          `other methods`);\n    }\n    if (this.backendInstance == null) {\n      const {name, asyncInit} = this.initializeBackendsAndReturnBest();\n      if (asyncInit) {\n        throw new Error(\n            `The highest priority backend '${name}' has not yet been ` +\n            `initialized. Make sure to await tf.ready() or ` +\n            `await tf.setBackend() before calling other methods`);\n      }\n      this.setBackend(name);\n    }\n    return this.backendInstance;\n  }\n\n  backendNames(): string[] {\n    return Object.keys(this.registryFactory);\n  }\n\n  findBackend(backendName: string): KernelBackend {\n    if (!(backendName in this.registry)) {\n      // If the backend hasn't been initialized but we have a registry entry for\n      // it, initialize it and return it.\n      if (backendName in this.registryFactory) {\n        const {asyncInit} = this.initializeBackend(backendName);\n        if (asyncInit) {\n          // Backend is not ready yet.\n          return null;\n        }\n      } else {\n        return null;\n      }\n    }\n    return this.registry[backendName];\n  }\n\n  findBackendFactory(backendName: string):\n      () => KernelBackend | Promise<KernelBackend> {\n    if (!(backendName in this.registryFactory)) {\n      return null;\n    }\n    return this.registryFactory[backendName].factory;\n  }\n\n  registerBackend(\n      backendName: string,\n      factory: () => KernelBackend | Promise<KernelBackend>,\n      priority = 1): boolean {\n    if (backendName in this.registryFactory) {\n      console.warn(\n          `${backendName} backend was already registered. ` +\n          `Reusing existing backend factory.`);\n      return false;\n    }\n    this.registryFactory[backendName] = {factory, priority};\n    return true;\n  }\n\n  async setBackend(backendName: string): Promise<boolean> {\n    if (this.registryFactory[backendName] == null) {\n      throw new Error(`Backend name '${backendName}' not found in registry`);\n    }\n    this.backendName = backendName;\n    if (this.registry[backendName] == null) {\n      this.backendInstance = null;\n      const {success, asyncInit} = this.initializeBackend(backendName);\n      const result = asyncInit ? await success : success;\n      if (!result) {\n        return false;\n      }\n    }\n    this.backendInstance = this.registry[backendName];\n    this.setupRegisteredKernels();\n    // Reset the profiler.\n    this.profiler = new Profiler(this.backendInstance);\n\n    return true;\n  }\n\n  private setupRegisteredKernels(): void {\n    const kernels = getKernelsForBackend(this.backendName);\n    kernels.forEach(kernel => {\n      if (kernel.setupFunc != null) {\n        kernel.setupFunc(this.backendInstance);\n      }\n    });\n  }\n\n  private disposeRegisteredKernels(backendName: string): void {\n    const kernels = getKernelsForBackend(backendName);\n    kernels.forEach(kernel => {\n      if (kernel.disposeFunc != null) {\n        kernel.disposeFunc(this.registry[backendName]);\n      }\n    });\n  }\n\n  /**\n   * Initializes a backend by looking up the backend name in the factory\n   * registry and calling the factory method. Returns a boolean representing\n   * whether the initialization of the backend suceeded. Throws an error if\n   * there is no backend in the factory registry.\n   */\n  private initializeBackend(backendName: string):\n      {success: boolean|Promise<boolean>, asyncInit: boolean} {\n    const registryFactoryEntry = this.registryFactory[backendName];\n    if (registryFactoryEntry == null) {\n      throw new Error(\n          `Cannot initialize backend ${backendName}, no registration found.`);\n    }\n\n    try {\n      const backend = registryFactoryEntry.factory();\n      // Test if the factory returns a promise.\n      if (Promise.resolve(backend) === backend) {\n        const promiseId = ++this.pendingBackendInitId;\n        const success =\n            backend\n                .then(backendInstance => {\n                  // Outdated promise. Another backend was set in the meantime.\n                  if (promiseId < this.pendingBackendInitId) {\n                    return false;\n                  }\n                  this.registry[backendName] = backendInstance;\n                  this.pendingBackendInit = null;\n                  return true;\n                })\n                .catch(err => {\n                  // Outdated promise. Another backend was set in the meantime.\n                  if (promiseId < this.pendingBackendInitId) {\n                    return false;\n                  }\n                  this.pendingBackendInit = null;\n                  console.warn(\n                      `Initialization of backend ${backendName} failed`);\n                  console.warn(err.stack || err.message);\n                  return false;\n                });\n        this.pendingBackendInit = success;\n        return {success, asyncInit: true};\n      } else {\n        this.registry[backendName] = backend as KernelBackend;\n        return {success: true, asyncInit: false};\n      }\n    } catch (err) {\n      console.warn(`Initialization of backend ${backendName} failed`);\n      console.warn(err.stack || err.message);\n      return {success: false, asyncInit: false};\n    }\n  }\n\n  removeBackend(backendName: string): void {\n    if (!(backendName in this.registryFactory)) {\n      throw new Error(`${backendName} backend not found in registry`);\n    }\n    if (this.backendName === backendName && this.pendingBackendInit != null) {\n      // There is a pending promise of the backend we want to remove. Make it\n      // obsolete.\n      this.pendingBackendInitId++;\n    }\n\n    if (backendName in this.registry) {\n      this.disposeRegisteredKernels(backendName);\n      this.registry[backendName].dispose();\n      delete this.registry[backendName];\n    }\n\n    delete this.registryFactory[backendName];\n\n    // Unset the backend if it is active.\n    if (this.backendName === backendName) {\n      this.pendingBackendInit = null;\n      this.backendName = null;\n      this.backendInstance = null;\n    }\n  }\n\n  private getSortedBackends(): string[] {\n    if (Object.keys(this.registryFactory).length === 0) {\n      throw new Error('No backend found in registry.');\n    }\n    return Object.keys(this.registryFactory).sort((a: string, b: string) => {\n      // Highest priority comes first.\n      return this.registryFactory[b].priority -\n          this.registryFactory[a].priority;\n    });\n  }\n\n  private initializeBackendsAndReturnBest():\n      {name: string, asyncInit: boolean} {\n    const sortedBackends = this.getSortedBackends();\n\n    for (let i = 0; i < sortedBackends.length; i++) {\n      const backendName = sortedBackends[i];\n      const {success, asyncInit} = this.initializeBackend(backendName);\n      if (asyncInit || success) {\n        return {name: backendName, asyncInit};\n      }\n    }\n    throw new Error(\n        `Could not initialize any backends, all backend initializations ` +\n        `failed.`);\n  }\n\n  moveData(destBackend: KernelBackend, dataId: DataId) {\n    const info = this.state.tensorInfo.get(dataId);\n    const srcBackend = info.backend;\n    const values = this.readSync(dataId);\n    // Delete the tensor from the old backend and move it to the new\n    // backend.\n    srcBackend.disposeData(dataId);\n    info.backend = destBackend;\n    destBackend.move(dataId, values, info.shape, info.dtype);\n    if (this.shouldCheckForMemLeaks()) {\n      // Track the number of moves during a kernel execution to correctly\n      // detect memory leaks.\n      this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++;\n    }\n  }\n\n  tidy<T extends TensorContainer>(nameOrFn: string|ScopeFn<T>, fn?: ScopeFn<T>):\n      T {\n    let name: string = null;\n    if (fn == null) {\n      // Called with only 1 argument.\n      if (typeof nameOrFn !== 'function') {\n        throw new Error('Please provide a function to tidy()');\n      }\n      fn = nameOrFn;\n    } else {\n      // Called with 2 arguments.\n      if (typeof nameOrFn !== 'string' && !(nameOrFn instanceof String)) {\n        throw new Error(\n            'When calling with two arguments, the first argument ' +\n            'to tidy() must be a string');\n      }\n      if (typeof fn !== 'function') {\n        throw new Error(\n            'When calling with two arguments, the 2nd argument ' +\n            'to tidy() must be a function');\n      }\n      name = nameOrFn as string;\n      // TODO(nsthorat,smilkov): Do operation logging and performance\n      // profiling.\n    }\n    let result: T;\n    return this.scopedRun(\n        () => this.startScope(name), () => this.endScope(result), () => {\n          result = fn();\n          if (result instanceof Promise) {\n            console.error('Cannot return a Promise inside of tidy.');\n          }\n          return result;\n        });\n  }\n\n  private scopedRun<T>(start: () => void, end: () => void, f: () => T): T {\n    start();\n    try {\n      const res = f();\n      end();\n      return res;\n    } catch (ex) {\n      end();\n      throw ex;\n    }\n  }\n\n  private static nextTensorId = 0;\n  private nextTensorId(): number {\n    return Engine.nextTensorId++;\n  }\n\n  private static nextVariableId = 0;\n  private nextVariableId(): number {\n    return Engine.nextVariableId++;\n  }\n\n  /**\n   * This method is called instead of the public-facing tensor.clone() when\n   * saving a tensor for backwards pass. It makes sure to add the clone\n   * operation to the tape regardless of being called inside a kernel\n   * execution.\n   *\n   * This method will go away once all kernels are modularized since we won't\n   * need to turn off the tape inside runKernel().\n   */\n  private clone(x: Tensor): Tensor {\n    const y = this.makeTensorFromDataId(x.dataId, x.shape, x.dtype);\n    const inputs = {x};\n    const grad = (dy: Tensor) => ({x: () => dy.toFloat()});\n    const saved: Tensor[] = [];\n    this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {});\n    return y;\n  }\n\n  /**\n   * Execute a kernel with the given name and return the output tensor.\n   *\n   * @param kernelName The name of the kernel to execute.\n   * @param inputs A map of input names to tensors.\n   * @param attrs A map of attribute names to their values. An attribute is a\n   *     primitive (non-tensor) input to the kernel.\n   * @param inputsToSave A list of tensors, inputs to save for the backprop\n   *     computation.\n   * @param outputsToSave A list of booleans, specifying which output to save\n   *     for the backprop computation. These are booleans since the output\n   * tensors are not visible to the user.\n   */\n  runKernel(\n      kernelName: string, inputs: NamedTensorMap, attrs: NamedAttrMap,\n      inputsToSave?: Tensor[], outputsToSave?: boolean[]): Tensor|Tensor[] {\n    const forwardFunc: null = null;\n    const backwardsFunc: null = null;\n    // Call runKernel as a stop-gap until we modularize all kernels.\n    // Once we modularize all kernels, we will remove the existing\n    // `runKernelFunc`.\n    return this.runKernelFunc(\n        forwardFunc, inputs, backwardsFunc, kernelName, attrs, inputsToSave,\n        outputsToSave);\n  }\n\n  private shouldCheckForMemLeaks(): boolean {\n    return this.ENV.getBool('IS_TEST');\n  }\n\n  private checkKernelForMemLeak(\n      kernelName: string, numDataIdsBefore: number,\n      outInfos: TensorInfo[]): void {\n    const numDataIdsAfter = this.backend.numDataIds();\n\n    // Count the number of data ids associated with the result of the kernel.\n    let numOutputDataIds = 0;\n    outInfos.forEach(info => {\n      // Complex numbers allocate 3 data ids, one for 'real', one for\n      // 'imaginary', and one for the container that holds the former two.\n      numOutputDataIds += (info.dtype === 'complex64' ? 3 : 1);\n    });\n\n    // Account for the number of moves during kernel execution. A \"data move\"\n    // can happen in the middle of a kernel execution, placing a new (key,value)\n    // pair in the data storage. Since data moves have net zero effect (we\n    // always remove the data from the old backend), we have to cancel them out\n    // when detecting memory leaks.\n    const numMoves =\n        this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1];\n    const dataIdsLeaked =\n        numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves;\n    if (dataIdsLeaked > 0) {\n      throw new Error(\n          `Backend '${this.backendName}' has an internal memory leak ` +\n          `(${dataIdsLeaked} data ids) after running '${kernelName}'`);\n    }\n  }\n\n  /**\n   * @deprecated Use `runKernel` for newly added kernels. Keep using this method\n   *     only for kernels that are not yet fully modularized.\n   */\n  runKernelFunc<T extends Tensor|Tensor[], I extends NamedTensorMap>(\n      forwardFunc: ForwardFunc<T>, inputs: I,\n      backwardsFunc?: (dy: T, saved: Tensor[]) => {[P in keyof I]: () => I[P]},\n      kernelName?: string, attrs?: NamedAttrMap, inputsToSave?: Tensor[],\n      outputsToSave?: boolean[]): T {\n    let outputs: Tensor[];\n    let saved: Tensor[] = [];\n    const isTapeOn = this.isTapeOn();\n    if (kernelName == null) {\n      kernelName =\n          this.state.activeScope != null ? this.state.activeScope.name : '';\n    }\n\n    const startingBytecount = this.state.numBytes;\n    const startingNumTensors = this.state.numTensors;\n\n    if (this.shouldCheckForMemLeaks()) {\n      this.state.numDataMovesStack.push(0);\n    }\n\n    let kernelFunc: () => Tensor[];\n    const kernel = getKernel(kernelName, this.backendName);\n    let out: TensorInfo|TensorInfo[];\n    if (kernel != null) {\n      kernelFunc = () => {\n        const numDataIdsBefore = this.backend.numDataIds();\n        out = kernel.kernelFunc({inputs, attrs, backend: this.backend});\n        const outInfos = Array.isArray(out) ? out : [out];\n        if (this.shouldCheckForMemLeaks()) {\n          this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos);\n        }\n        const outTensors = outInfos.map(\n            ({dataId, shape, dtype}) =>\n                this.makeTensorFromDataId(dataId, shape, dtype));\n\n        // Save the inputs and outputs.\n        // Do not save unless we are recording to the tape. Otherwise it would\n        // cause a mem leak since we would never run backprop, which disposes\n        // the kept tensors.\n        if (isTapeOn) {\n          let tensorsToSave =\n              this.getTensorsForGradient(kernelName, inputs, outTensors);\n          if (tensorsToSave == null) {\n            // Fallback for ops that call runKernelFunc and pass in\n            // inputsToSave and outputsToSave. Currently this is the set of ops\n            // with kernel support in the WASM backend. Once those ops and\n            // respective gradients are modularised we can remove this path.\n            if (outputsToSave == null) {\n              outputsToSave = [];\n            }\n            const outsToSave = outTensors.filter((_, i) => outputsToSave[i]);\n            tensorsToSave = (inputsToSave || []).slice().concat(outsToSave);\n          }\n          saved = this.saveTensorsForBackwardMode(tensorsToSave);\n        }\n        return outTensors;\n      };\n    } else {\n      const saveFunc: GradSaveFunc = (tensors) => {\n        // Do not save unless we are recording to the tape. Otherwise it would\n        // cause a mem leak since we would never run backprop, which disposes\n        // the kept tensors.\n        if (!isTapeOn) {\n          return;\n        }\n        saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n      };\n\n      kernelFunc = () => {\n        const numDataIdsBefore = this.backend.numDataIds();\n        out = this.tidy(() => forwardFunc(this.backend, saveFunc));\n        const outs = (Array.isArray(out) ? out : [out]) as Tensor[];\n        if (this.shouldCheckForMemLeaks()) {\n          this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outs);\n        }\n        return outs;\n      };\n    }\n\n    // Stop recording to a tape when running a kernel.\n    this.scopedRun(\n        () => this.state.kernelDepth++, () => this.state.kernelDepth--, () => {\n          if (!this.ENV.getBool('DEBUG')) {\n            outputs = kernelFunc();\n          } else {\n            outputs = this.profiler.profileKernel(\n                kernelName, inputs, () => kernelFunc());\n          }\n        });\n\n    if (isTapeOn) {\n      this.addTapeNode(\n          kernelName, inputs, outputs, backwardsFunc, saved, attrs);\n    }\n\n    if (this.state.profiling) {\n      this.state.activeProfile.kernels.push({\n        name: kernelName,\n        bytesAdded: this.state.numBytes - startingBytecount,\n        totalBytesSnapshot: this.state.numBytes,\n        tensorsAdded: this.state.numTensors - startingNumTensors,\n        totalTensorsSnapshot: this.state.numTensors,\n        inputShapes: Object.keys(inputs).map(key => inputs[key].shape),\n        outputShapes: outputs.map(item => item.shape)\n      });\n    }\n    return (Array.isArray(out) ? outputs : outputs[0]) as T;\n  }\n\n  /**\n   * Saves tensors used in forward mode for use in backward mode.\n   *\n   * @param tensors the list of tensors to save.\n   */\n  private saveTensorsForBackwardMode(tensors: Tensor[]): Tensor[] {\n    const saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n    return saved;\n  }\n\n  /**\n   * Returns a list of tensors to save for a given gradient calculation.\n   *\n   * Returns undefined if their is no registered gradient for this kernel in the\n   * gradient registry.\n   *\n   * @param kernelName name of kernel to look up gradient for.\n   * @param inputs a map of input tensors.\n   * @param outputs an array of output tensors from forward mode of kernel.\n   */\n  private getTensorsForGradient(\n      kernelName: string, inputs: NamedTensorMap,\n      outputs: Tensor[]): Tensor[]|null {\n    const gradConfig = getGradient(kernelName);\n    if (gradConfig != null) {\n      const inputsToSave: string[] = gradConfig.inputsToSave || [];\n      const outputsToSave: boolean[] = gradConfig.outputsToSave || [];\n\n      // If saveAllInputs is true, all inputs will be saved. Otherwise, inputs\n      // specified in inputsToSave will be saved.\n      let inputTensorsToSave: Tensor[];\n      if (gradConfig.saveAllInputs) {\n        util.assert(\n            Array.isArray(inputs),\n            () => 'saveAllInputs is true, expected inputs to be an array.');\n\n        inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]);\n      } else {\n        inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]);\n      }\n\n      const outputTensorsToSave: Tensor[] =\n          outputs.filter((_, i) => outputsToSave[i]);\n\n      return inputTensorsToSave.concat(outputTensorsToSave);\n    }\n    // TODO(yassogba) throw exception here once all runkernelFunc calls with\n    // inputsToSave/outputsToSave are removed\n    return null;\n  }\n\n  /**\n   * Internal method used by public APIs for tensor creation. Makes a new\n   * tensor with the provided shape, dtype and values. It always\n   * creates a new data id and writes the values to the underlying backend.\n   */\n  makeTensor(\n      values: DataValues, shape: number[], dtype: DataType,\n      backend?: KernelBackend): Tensor {\n    if (values == null) {\n      throw new Error('Values passed to engine.makeTensor() are null');\n    }\n    dtype = dtype || 'float32';\n    backend = backend || this.backend;\n    let backendVals = values as BackendValues;\n    if (dtype === 'string' && util.isString(values[0])) {\n      backendVals = (values as string[]).map(d => util.encodeString(d));\n    }\n    const dataId = backend.write(backendVals, shape, dtype);\n    const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n    this.incRef(t, backend);\n\n    // Count bytes for string tensors.\n    if (dtype === 'string') {\n      const info = this.state.tensorInfo.get(dataId);\n      const newBytes = bytesFromStringArray(backendVals as Uint8Array[]);\n      this.state.numBytes += newBytes - info.bytes;\n      info.bytes = newBytes;\n    }\n    return t;\n  }\n\n  /**\n   * Internal method used by backends. Makes a new tensor\n   * that is a wrapper around an existing data id. It doesn't create\n   * a new data id, only increments the ref count used in memory tracking.\n   */\n  makeTensorFromDataId(\n      dataId: DataId, shape: number[], dtype: DataType,\n      backend?: KernelBackend): Tensor {\n    dtype = dtype || 'float32';\n    const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n    this.incRef(t, backend);\n    return t;\n  }\n\n  makeVariable(\n      initialValue: Tensor, trainable = true, name?: string,\n      dtype?: DataType): Variable {\n    name = name || this.nextVariableId().toString();\n    if (dtype != null && dtype !== initialValue.dtype) {\n      initialValue = initialValue.asType(dtype);\n    }\n    const v = new Variable(initialValue, trainable, name, this.nextTensorId());\n    if (this.state.registeredVariables[v.name] != null) {\n      throw new Error(`Variable with name ${v.name} was already registered`);\n    }\n    this.state.registeredVariables[v.name] = v;\n    this.incRef(v, this.backend);\n    return v;\n  }\n\n  incRef(a: Tensor, backend: KernelBackend): void {\n    const refCount = this.state.tensorInfo.has(a.dataId) ?\n        this.state.tensorInfo.get(a.dataId).refCount :\n        0;\n    this.state.numTensors++;\n    if (a.dtype === 'string') {\n      this.state.numStringTensors++;\n    }\n    if (refCount === 0) {\n      this.state.numDataBuffers++;\n\n      // Bytes for complex numbers are counted by their components. Bytes for\n      // string tensors are counted when writing values.\n      let bytes = 0;\n      if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n        bytes = a.size * util.bytesPerElement(a.dtype);\n      }\n      this.state.tensorInfo.set(a.dataId, {\n        backend: backend || this.backend,\n        dtype: a.dtype,\n        shape: a.shape,\n        bytes,\n        refCount: 0\n      });\n      this.state.numBytes += bytes;\n    }\n    this.state.tensorInfo.get(a.dataId).refCount++;\n    if (!(a instanceof Variable)) {\n      this.track(a);\n    }\n  }\n\n  disposeTensor(a: Tensor): void {\n    if (!this.state.tensorInfo.has(a.dataId)) {\n      return;\n    }\n\n    this.state.numTensors--;\n    if (a.dtype === 'string') {\n      this.state.numStringTensors--;\n    }\n    const info = this.state.tensorInfo.get(a.dataId);\n    const refCount = info.refCount;\n    if (refCount <= 1) {\n      // Don't count bytes for complex numbers as they are counted by their\n      // components.\n      if (a.dtype !== 'complex64') {\n        this.state.numBytes -= info.bytes;\n      }\n      this.state.numDataBuffers--;\n      info.backend.disposeData(a.dataId);\n      this.state.tensorInfo.delete(a.dataId);\n    } else {\n      this.state.tensorInfo.get(a.dataId).refCount--;\n    }\n    // TODO(nsthorat): Construct an error and save the stack trace for\n    // debugging when in debug mode. Creating a stack trace is too expensive\n    // to do unconditionally.\n  }\n\n  disposeVariables(): void {\n    for (const varName in this.state.registeredVariables) {\n      const v = this.state.registeredVariables[varName];\n      this.disposeVariable(v);\n    }\n  }\n\n  disposeVariable(v: Variable): void {\n    this.disposeTensor(v);\n    if (this.state.registeredVariables[v.name] != null) {\n      delete this.state.registeredVariables[v.name];\n    }\n  }\n\n  memory(): MemoryInfo {\n    const info = this.backend.memory() as MemoryInfo;\n    info.numTensors = this.state.numTensors;\n    info.numDataBuffers = this.state.numDataBuffers;\n    info.numBytes = this.state.numBytes;\n    if (this.state.numStringTensors > 0) {\n      info.unreliable = true;\n      if (info.reasons == null) {\n        info.reasons = [];\n      }\n      info.reasons.push(\n          'Memory usage by string tensors is approximate ' +\n          '(2 bytes per character)');\n    }\n    return info;\n  }\n\n  async profile(query: () => TensorContainer): Promise<ProfileInfo> {\n    this.state.profiling = true;\n\n    const startBytes = this.state.numBytes;\n    const startNumTensors = this.state.numTensors;\n\n    this.state.activeProfile.kernels = [];\n    this.state.activeProfile.result = query();\n\n    this.state.profiling = false;\n\n    this.state.activeProfile.peakBytes = Math.max(\n        ...this.state.activeProfile.kernels.map(d => d.totalBytesSnapshot));\n    this.state.activeProfile.newBytes = this.state.numBytes - startBytes;\n    this.state.activeProfile.newTensors =\n        this.state.numTensors - startNumTensors;\n    return this.state.activeProfile;\n  }\n\n  isTapeOn(): boolean {\n    return this.state.gradientDepth > 0 && this.state.kernelDepth === 0;\n  }\n\n  private addTapeNode(\n      kernelName: string, inputs: NamedTensorMap, outputs: Tensor[],\n      gradientsFunc: GradFunc, saved: Tensor[], attrs: NamedAttrMap): void {\n    const tapeNode: TapeNode =\n        {id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved};\n\n    const gradConfig = getGradient(kernelName);\n    if (gradConfig != null) {\n      gradientsFunc = gradConfig.gradFunc;\n    }\n    if (gradientsFunc != null) {\n      tapeNode.gradient = (dys: Tensor[]) => {\n        // TODO(smilkov): To optimize back-prop, pass dys that are not used in\n        // the backprop graph to the user as null instead of zeros\n        dys = dys.map((dy, i) => {\n          if (dy == null) {\n            const output = outputs[i];\n            const vals = util.makeZerosTypedArray(output.size, output.dtype);\n            return this.makeTensor(vals, output.shape, output.dtype);\n          }\n          return dy;\n        });\n        // Grad functions of ops with single outputs expect a dy, while ops\n        // with multiple outputs expect dys (array of dy).\n        return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs);\n      };\n    }\n    this.state.activeTape.push(tapeNode);\n  }\n\n  keep<T extends Tensor>(result: T): T {\n    result.kept = true;\n    return result;\n  }\n\n  private startTape() {\n    if (this.state.gradientDepth === 0) {\n      this.state.activeTape = [];\n    }\n    this.state.gradientDepth++;\n  }\n\n  private endTape() {\n    this.state.gradientDepth--;\n  }\n\n  /**\n   * Start a scope. Use this with endScope() to achieve the same functionality\n   * as scope() without the need for a function closure.\n   */\n  startScope(name?: string) {\n    const scopeInfo: ScopeState = {\n      track: [],\n      name: 'unnamed scope',\n      id: this.state.nextScopeId++\n    };\n    if (name) {\n      scopeInfo.name = name;\n    }\n    this.state.scopeStack.push(scopeInfo);\n    this.state.activeScope = scopeInfo;\n  }\n\n  /**\n   * End a scope. Use this with startScope() to achieve the same functionality\n   * as scope() without the need for a function closure.\n   */\n  endScope(result?: TensorContainer) {\n    const tensorsToTrackInParent = getTensorsInContainer(result);\n    const tensorsToTrackInParentSet =\n        new Set(tensorsToTrackInParent.map(t => t.id));\n\n    // Dispose the arrays tracked in this scope.\n    for (let i = 0; i < this.state.activeScope.track.length; i++) {\n      const tensor = this.state.activeScope.track[i];\n      if (!tensor.kept && !tensorsToTrackInParentSet.has(tensor.id)) {\n        tensor.dispose();\n      }\n    }\n\n    const oldScope = this.state.scopeStack.pop();\n    this.state.activeScope = this.state.scopeStack.length === 0 ?\n        null :\n        this.state.scopeStack[this.state.scopeStack.length - 1];\n\n    // Track the current result in the parent scope.\n    tensorsToTrackInParent.forEach(tensor => {\n      // Only track the tensor if was allocated in the inner scope and is not\n      // globally kept.\n      if (!tensor.kept && tensor.scopeId === oldScope.id) {\n        this.track(tensor);\n      }\n    });\n  }\n\n  /**\n   * Returns gradients of `f` with respect to each of the `xs`. The gradients\n   * returned are of the same length as `xs`, but some might be null if `f`\n   * was not a function of that `x`. It also takes optional dy to multiply the\n   * gradient, which defaults to `1`.\n   */\n  gradients<T extends Tensor>(\n      f: () => T, xs: Tensor[], dy?: T,\n      allowNoGradients = false): {value: T, grads: Tensor[]} {\n    util.assert(\n        xs.length > 0, () => 'gradients() received an empty list of xs.');\n    if (dy != null && dy.dtype !== 'float32') {\n      throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`);\n    }\n\n    const y = this.scopedRun(\n        () => this.startTape(), () => this.endTape(),\n        () => this.tidy('forward', f));\n\n    util.assert(\n        y instanceof Tensor,\n        () => 'The result y returned by f() must be a tensor.');\n    // Filter out the nodes that don't connect x => y.\n    const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y);\n    if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) {\n      throw new Error(\n          'Cannot compute gradient of y=f(x) with respect to x. Make sure ' +\n          'that the f you passed encloses all operations that lead from x ' +\n          'to y.');\n    }\n\n    return this.tidy('backward', () => {\n      const accumulatedGradientMap: {[tensorId: number]: Tensor} = {};\n      accumulatedGradientMap[y.id] = (dy == null) ? ones(y.shape) : dy;\n\n      // Backprop gradients through the filtered nodes.\n      backpropagateGradients(\n          accumulatedGradientMap, filteredTape,\n          // Pass the tidy function to avoid circular dep with `tape.ts`.\n          f => this.tidy(f as ScopeFn<Tensor>));\n      const grads = xs.map(x => accumulatedGradientMap[x.id]);\n\n      if (this.state.gradientDepth === 0) {\n        // This means that we are not computing higher-order gradients\n        // and can clean up the tape.\n        this.state.activeTape.forEach(node => {\n          for (const tensor of node.saved) {\n            tensor.dispose();\n          }\n        });\n        this.state.activeTape = null;\n      }\n      return {value: y, grads};\n    });\n  }\n\n  customGrad<T extends Tensor>(f: CustomGradientFunc<T>):\n      (...args: Array<Tensor|GradSaveFunc>) => T {\n    util.assert(\n        util.isFunction(f),\n        () => 'The f passed in customGrad(f) must be a function.');\n    return (...inputs: Tensor[]): T => {\n      util.assert(\n          inputs.every(t => t instanceof Tensor),\n          () => 'The args passed in customGrad(f)(x1, x2,...) must all be ' +\n              'tensors');\n\n      let res: {\n        value: T,\n        gradFunc: (dy: T, saved: Tensor[]) => Tensor | Tensor[],\n      };\n      const inputMap: NamedTensorMap = {};\n      inputs.forEach((input, i) => {\n        inputMap[i] = input;\n      });\n      return this.runKernelFunc(\n          (_, save) => {\n            res = f(...[...inputs, save]);\n            util.assert(\n                res.value instanceof Tensor,\n                () => 'The function f passed in customGrad(f) must return an ' +\n                    'object where `obj.value` is a tensor');\n            util.assert(\n                util.isFunction(res.gradFunc),\n                () => 'The function f passed in customGrad(f) must return an ' +\n                    'object where `obj.gradFunc` is a function.');\n            return res.value;\n          },\n          inputMap,\n          (dy: T, saved: Tensor[]) => {\n            const gradRes = res.gradFunc(dy, saved);\n            const grads: Tensor[] =\n                Array.isArray(gradRes) ? gradRes : [gradRes];\n            util.assert(\n                grads.length === inputs.length,\n                () => 'The function f passed in customGrad(f) must return an ' +\n                    'object where `obj.gradFunc` is a function that returns ' +\n                    'the same number of tensors as inputs passed to f(...).');\n            util.assert(\n                grads.every(t => t instanceof Tensor),\n                () => 'The function f passed in customGrad(f) must return an ' +\n                    'object where `obj.gradFunc` is a function that returns ' +\n                    'a list of only tensors.');\n            const gradMap: {[key: string]: () => Tensor} = {};\n            grads.forEach((grad, i) => {\n              gradMap[i] = () => grad;\n            });\n            return gradMap;\n          });\n    };\n  }\n\n  readSync(dataId: DataId): BackendValues {\n    // Route the read to the correct backend.\n    const info = this.state.tensorInfo.get(dataId);\n    return info.backend.readSync(dataId);\n  }\n  read(dataId: DataId): Promise<BackendValues> {\n    // Route the read to the correct backend.\n    const info = this.state.tensorInfo.get(dataId);\n    return info.backend.read(dataId);\n  }\n\n  async time(query: () => void): Promise<TimingInfo> {\n    const start = now();\n    const timingInfo = await this.backend.time(query) as TimingInfo;\n    timingInfo.wallMs = now() - start;\n    return timingInfo;\n  }\n\n  /**\n   * Tracks a Tensor in the current scope to be automatically cleaned up\n   * when the current scope ends, and returns the value.\n   *\n   * @param result The Tensor to track in the current scope.\n   */\n  private track<T extends Tensor>(result: T): T {\n    if (this.state.activeScope != null) {\n      result.scopeId = this.state.activeScope.id;\n      this.state.activeScope.track.push(result);\n    }\n\n    return result;\n  }\n\n  get registeredVariables(): NamedVariableMap {\n    return this.state.registeredVariables;\n  }\n\n  /**\n   * Resets the engine state. Removes all backends but does not remove\n   * registered backend factories.\n   */\n  reset(): void {\n    // Make any pending promise obsolete.\n    this.pendingBackendInitId++;\n\n    this.state.dispose();\n    this.ENV.reset();\n    this.state = new EngineState();\n\n    for (const backendName in this.registry) {\n      this.disposeRegisteredKernels(backendName);\n      this.registry[backendName].dispose();\n      delete this.registry[backendName];\n    }\n    this.backendName = null;\n    this.backendInstance = null;\n    this.pendingBackendInit = null;\n  }\n}\n\nfunction ones(shape: number[]): Tensor {\n  const values = makeOnesTypedArray(sizeFromShape(shape), 'float32');\n  return ENGINE.makeTensor(values, shape, 'float32');\n}\n\nlet GLOBAL: {_tfengine: Engine};\nfunction getGlobalNamespace(): {_tfengine: Engine} {\n  if (GLOBAL == null) {\n    // tslint:disable-next-line:no-any\n    let ns: any;\n    if (typeof (window) !== 'undefined') {\n      ns = window;\n    } else if (typeof (global) !== 'undefined') {\n      ns = global;\n    } else if (typeof (process) !== 'undefined') {\n      ns = process;\n    } else if (typeof (self) !== 'undefined') {\n      ns = self;\n    } else {\n      throw new Error('Could not find a global object');\n    }\n    GLOBAL = ns;\n  }\n  return GLOBAL;\n}\n\nfunction getOrMakeEngine(): Engine {\n  const ns = getGlobalNamespace();\n  if (ns._tfengine == null) {\n    const environment = new Environment(ns);\n    ns._tfengine = new Engine(environment);\n  }\n  setEnvironmentGlobal(ns._tfengine.ENV);\n\n  // Tell the current tensor interface that the global engine is responsible\n  // for tracking.\n  setTensorTracker(() => ns._tfengine);\n  return ns._tfengine;\n}\n\nexport const ENGINE = getOrMakeEngine();\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from './tensor';\nimport {NamedTensorMap} from './tensor_types';\nimport * as util from './util';\n\nexport interface TapeNode {\n  id: number;\n  kernelName: string;\n  outputs: Tensor[];\n  inputs: NamedTensorMap;\n  // Optional params, defined only for ops with gradient impl.\n  gradient?: (dys: Tensor[]) => NamedGradientMap;\n  saved?: Tensor[];\n}\n\nexport type NamedGradientMap = {\n  [inputName: string]: () => Tensor;\n};\n\n/**\n * Computes a list of TapeNodes that connect x to y, filtering everything else\n * out and preserving the order of the original tape elements.\n *\n * @param tape The tape elements to filter.\n * @param xs The input Tensors.\n * @param y The output Tensor.\n */\nexport function getFilteredNodesXToY(\n    tape: TapeNode[], xs: Tensor[], y: Tensor): TapeNode[] {\n  // Forward pass to compute all the nodes and Tensors that are transitively a\n  // function of x.\n  const tensorsFromX: {[tensorId: number]: boolean} = {};\n  const nodesFromX: {[nodeId: number]: boolean} = {};\n  for (let i = 0; i < xs.length; i++) {\n    tensorsFromX[xs[i].id] = true;\n  }\n\n  for (let i = 0; i < tape.length; i++) {\n    const node = tape[i];\n    const nodeInputs = node.inputs;\n    for (const inputName in nodeInputs) {\n      const input = nodeInputs[inputName];\n\n      let anyInputFromX = false;\n      for (let j = 0; j < xs.length; j++) {\n        if (tensorsFromX[input.id]) {\n          node.outputs.forEach(output => tensorsFromX[output.id] = true);\n          anyInputFromX = true;\n          nodesFromX[node.id] = true;\n          break;\n        }\n      }\n\n      if (anyInputFromX) {\n        break;\n      }\n    }\n  }\n\n  // Backward pass to find all of the nodes and Tensors that lead to y.\n  const tensorsLeadToY: {[tensorId: number]: boolean} = {};\n  tensorsLeadToY[y.id] = true;\n  const nodesToY: {[nodeId: number]: boolean} = {};\n\n  for (let i = tape.length - 1; i >= 0; i--) {\n    const node = tape[i];\n    const nodeInputs = node.inputs;\n\n    // If any of the outputs lead to y, mark all of the inputs as leading to y.\n    for (let j = 0; j < node.outputs.length; j++) {\n      if (tensorsLeadToY[node.outputs[j].id]) {\n        for (const inputName in nodeInputs) {\n          tensorsLeadToY[nodeInputs[inputName].id] = true;\n          nodesToY[node.id] = true;\n        }\n        break;\n      }\n    }\n  }\n\n  // Return the paths that come from x and lead to y.\n  const filteredTape: TapeNode[] = [];\n  for (let i = 0; i < tape.length; i++) {\n    const node = tape[i];\n\n    if (nodesFromX[node.id] && nodesToY[node.id]) {\n      // Prune the inputs from the node that aren't a function of x.\n      const prunedInputs: {[inputName: string]: Tensor} = {};\n      for (const inputName in node.inputs) {\n        const nodeInput = node.inputs[inputName];\n        if (tensorsFromX[nodeInput.id]) {\n          prunedInputs[inputName] = nodeInput;\n        }\n      }\n\n      // Copy the node and overwrite inputsAndArgs to the pruned version.\n      const prunedNode = Object.assign({}, node);\n      prunedNode.inputs = prunedInputs;\n      prunedNode.outputs = node.outputs;\n\n      filteredTape.push(prunedNode);\n    }\n  }\n\n  return filteredTape;\n}\n\n/**\n * Backpropagate gradients through the filtered TapeNodes.\n *\n * @param tensorAccumulatedGradientMap A map of Tensor to its gradient. This map\n * is mutated by this method.\n * @param filteredTape The filtered TapeNodes to backprop through.\n */\nexport function backpropagateGradients(\n    tensorAccumulatedGradientMap: {[tensorId: number]: Tensor},\n    filteredTape: TapeNode[], tidy: (f: Function) => Tensor) {\n  // Walk the tape backward and keep a map of Tensor to its gradient.\n  for (let i = filteredTape.length - 1; i >= 0; i--) {\n    const node = filteredTape[i];\n\n    const dys: Tensor[] = [];\n    node.outputs.forEach(o => {\n      const gradTensor = tensorAccumulatedGradientMap[o.id];\n      if (gradTensor != null) {\n        dys.push(gradTensor);\n      } else {\n        // This particular output is not in the back-propagation subgraph, so it\n        // does not affect the final output, thus we put null for its dy.\n        dys.push(null);\n      }\n    });\n\n    if (node.gradient == null) {\n      throw new Error(\n          `Cannot compute gradient: gradient function not found ` +\n          `for ${node.kernelName}.`);\n    }\n\n    // Backprop dy through this node and accumulate gradients over the inputs.\n    const inputGradients = node.gradient(dys);\n\n    for (const inputName in node.inputs) {\n      if (!(inputName in inputGradients)) {\n        throw new Error(\n            `Cannot backprop through input ${inputName}. ` +\n            `Available gradients found: ${Object.keys(inputGradients)}.`);\n      }\n\n      // Call the gradient function.\n      const dx = tidy(() => inputGradients[inputName]());\n      if (dx.dtype !== 'float32') {\n        throw new Error(\n            `Error in gradient for op ${\n                node.kernelName}. The gradient of input ` +\n            `${inputName} must have 'float32' dtype, but has '${dx.dtype}'`);\n      }\n      const x = node.inputs[inputName];\n      if (!util.arraysEqual(dx.shape, x.shape)) {\n        throw new Error(\n            `Error in gradient for op ${\n                node.kernelName}. The gradient of input ` +\n            `'${inputName}' has shape '${dx.shape}', which does not match ` +\n            `the shape of the input '${x.shape}'`);\n      }\n\n      if (tensorAccumulatedGradientMap[x.id] == null) {\n        tensorAccumulatedGradientMap[x.id] = dx;\n      } else {\n        const curGradient = tensorAccumulatedGradientMap[x.id];\n        tensorAccumulatedGradientMap[x.id] = curGradient.add(dx);\n        curGradient.dispose();\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport function isMobile(): boolean {\n  // tslint:disable-next-line:no-any\n  const a = navigator.userAgent || navigator.vendor || (window as any).opera;\n  // tslint:disable-next-line:max-line-length\n  return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n             .test(a) ||\n      // tslint:disable-next-line:max-line-length\n      /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n          .test(a.substr(0, 4));\n}\n\nexport function isBrowser(): boolean {\n  return (typeof window !== 'undefined' && window.document != null) ||\n      //@ts-ignore\n      (typeof WorkerGlobalScope !== 'undefined');\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as device_util from './device_util';\nimport {env} from './environment';\n\nconst ENV = env();\n\n/**\n * This file contains environment-related flag registrations.\n */\n\n/** Whether to enable debug mode. */\nENV.registerFlag('DEBUG', () => false, debugValue => {\n  if (debugValue) {\n    console.warn(\n        'Debugging mode is ON. The output of every math call will ' +\n        'be downloaded to CPU and checked for NaNs. ' +\n        'This significantly impacts performance.');\n  }\n});\n\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_BROWSER', () => device_util.isBrowser());\n\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag(\n    'IS_NODE',\n    () => (typeof process !== 'undefined') &&\n        (typeof process.versions !== 'undefined') &&\n        (typeof process.versions.node !== 'undefined'));\n\n/** Whether this browser is Chrome. */\nENV.registerFlag(\n    'IS_CHROME',\n    () => typeof navigator !== 'undefined' && navigator != null &&\n        navigator.userAgent != null && /Chrome/.test(navigator.userAgent) &&\n        /Google Inc/.test(navigator.vendor));\n\n/**\n * True when the environment is \"production\" where we disable safety checks\n * to gain performance.\n */\nENV.registerFlag('PROD', () => false);\n\n/**\n * Whether to do sanity checks when inferring a shape from user-provided\n * values, used when creating a new tensor.\n */\nENV.registerFlag(\n    'TENSORLIKE_CHECK_SHAPE_CONSISTENCY', () => ENV.getBool('DEBUG'));\n\n/** Whether deprecation warnings are enabled. */\nENV.registerFlag('DEPRECATION_WARNINGS_ENABLED', () => true);\n\n/** True if running unit tests. */\nENV.registerFlag('IS_TEST', () => false);\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nconst contexts: {[key: string]: WebGLRenderingContext} = {};\n\nconst WEBGL_ATTRIBUTES: WebGLContextAttributes = {\n  alpha: false,\n  antialias: false,\n  premultipliedAlpha: false,\n  preserveDrawingBuffer: false,\n  depth: false,\n  stencil: false,\n  failIfMajorPerformanceCaveat: true\n};\n\nexport function setWebGLContext(\n    webGLVersion: number, gl: WebGLRenderingContext) {\n  contexts[webGLVersion] = gl;\n}\n\nexport function getWebGLContext(webGLVersion: number): WebGLRenderingContext {\n  if (!(webGLVersion in contexts)) {\n    contexts[webGLVersion] = getWebGLRenderingContext(webGLVersion);\n  }\n  const gl = contexts[webGLVersion];\n  if (gl.isContextLost()) {\n    delete contexts[webGLVersion];\n    return getWebGLContext(webGLVersion);\n  }\n\n  gl.disable(gl.DEPTH_TEST);\n  gl.disable(gl.STENCIL_TEST);\n  gl.disable(gl.BLEND);\n  gl.disable(gl.DITHER);\n  gl.disable(gl.POLYGON_OFFSET_FILL);\n  gl.disable(gl.SAMPLE_COVERAGE);\n  gl.enable(gl.SCISSOR_TEST);\n  gl.enable(gl.CULL_FACE);\n  gl.cullFace(gl.BACK);\n\n  return contexts[webGLVersion];\n}\n\nfunction createCanvas(webGLVersion: number) {\n  if (typeof OffscreenCanvas !== 'undefined' && webGLVersion === 2) {\n    return new OffscreenCanvas(300, 150);\n  } else if (typeof document !== 'undefined') {\n    return document.createElement('canvas');\n  } else {\n    throw new Error('Cannot create a canvas in this context');\n  }\n}\n\nfunction getWebGLRenderingContext(webGLVersion: number): WebGLRenderingContext {\n  if (webGLVersion !== 1 && webGLVersion !== 2) {\n    throw new Error('Cannot get WebGL rendering context, WebGL is disabled.');\n  }\n  const canvas = createCanvas(webGLVersion);\n\n  canvas.addEventListener('webglcontextlost', (ev: Event) => {\n    ev.preventDefault();\n    delete contexts[webGLVersion];\n  }, false);\n  if (webGLVersion === 1) {\n    return (canvas.getContext('webgl', WEBGL_ATTRIBUTES) ||\n            canvas.getContext('experimental-webgl', WEBGL_ATTRIBUTES)) as\n        WebGLRenderingContext;\n  }\n  return canvas.getContext('webgl2', WEBGL_ATTRIBUTES) as WebGLRenderingContext;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../environment';\n\nimport {DataId, Tensor} from '../../tensor';\nimport {BackendValues, DataType} from '../../types';\nimport * as util from '../../util';\n\nexport enum PackingScheme {\n  /**\n   * All values in a single texel are densely packed without any constraints.\n   *\n   * This is how the shader encodes a tensor with shape = [2, 3, 4]\n   * (indices are [batch, row, col]).\n   *\n   * 000|001   010|011   020|021\n   * -------   -------   -------\n   * 002|003   012|013   022|023\n   *\n   * 100|101   110|111   120|121\n   * -------   -------   -------\n   * 102|103   112|113   122|123\n   *\n   */\n  DENSE,\n\n  /**\n   * Single texels contain only values from the same batch, and from adjacent\n   * rows and columns.\n   *\n   * This is how the shader encodes a tensor with shape = [2, 3, 5]\n   * (indices are [batch, row, col]).\n   *\n   * 000|001   002|003   004|xxx   020|021   022|023   024|xxx\n   * -------   -------   -------   -------   -------   -------\n   * 010|011   012|013   014|xxx   xxx|xxx   xxx|xxx   xxx|xxx\n   *\n   * 100|101   102|103   104|xxx   120|121   122|123   124|xxx\n   * -------   -------   -------   -------   -------   -------\n   * 110|111   112|113   114|xxx   xxx|xxx   xxx|xxx   xxx|xxx\n   *\n   */\n  SHARED_BATCH\n}\n\nexport enum TextureUsage {\n  RENDER,\n  UPLOAD,\n  PIXELS,\n  DOWNLOAD\n}\n\nexport enum PhysicalTextureType {\n  UNPACKED_FLOAT16,\n  UNPACKED_FLOAT32,\n  PACKED_4X1_UNSIGNED_BYTE,\n  PACKED_2X2_FLOAT32,\n  PACKED_2X2_FLOAT16\n}\n\nexport interface TextureData {\n  // Required.\n  shape: number[];\n  dtype: DataType;\n\n  // Optional.\n  values?: BackendValues;\n  texture?: WebGLTexture;\n  // For complex numbers, the real and imaginary parts are stored as their own\n  // individual tensors, with a parent joining the two with the\n  // complexTensors field. When this is defined, texture will be null.\n  complexTensors?: {real: Tensor, imag: Tensor};\n  /** [rows, columns] shape of the texture. */\n  texShape?: [number, number];\n  usage?: TextureUsage;\n  isPacked?: boolean;\n\n  // Available when the tensor has been sliced.\n  slice?: {\n    // Offset in the 'flat index' space.\n    flatOffset: number;\n    // Used for counting how many sliced tensors point to the same texture.\n    origDataId: DataId;\n  };\n}\n\nexport function getUnpackedMatrixTextureShapeWidthHeight(\n    rows: number, columns: number): [number, number] {\n  return [columns, rows];\n}\n\nexport function getUnpackedArraySizeFromMatrixSize(\n    matrixSize: number, channelsPerTexture: number): number {\n  return matrixSize * channelsPerTexture;\n}\n\nexport function getColorMatrixTextureShapeWidthHeight(\n    rows: number, columns: number): [number, number] {\n  return [columns * 4, rows];\n}\n\n/**\n * Get shape for densely packed RGBA texture.\n */\nexport function getDenseTexShape(shape: number[]): [number, number] {\n  const size = util.sizeFromShape(shape);\n  const texelsNeeded = Math.ceil(size / 4);\n  return util.sizeToSquarishShape(texelsNeeded);\n}\n\nexport function getMatrixSizeFromUnpackedArraySize(\n    unpackedSize: number, channelsPerTexture: number): number {\n  if (unpackedSize % channelsPerTexture !== 0) {\n    throw new Error(\n        `unpackedSize (${unpackedSize}) must be a multiple of ` +\n        `${channelsPerTexture}`);\n  }\n  return unpackedSize / channelsPerTexture;\n}\n\nexport function decodeMatrixFromUnpackedColorRGBAArray(\n    unpackedArray: Float32Array, matrix: Float32Array, channels: number) {\n  const requiredSize = unpackedArray.length * channels / 4;\n  if (matrix.length < requiredSize) {\n    throw new Error(\n        `matrix length (${matrix.length}) must be >= ${requiredSize}`);\n  }\n  let dst = 0;\n  for (let src = 0; src < unpackedArray.length; src += 4) {\n    for (let c = 0; c < channels; c++) {\n      matrix[dst++] = unpackedArray[src + c];\n    }\n  }\n}\n\nexport function getPackedMatrixTextureShapeWidthHeight(\n    rows: number, columns: number): [number, number] {\n  return [\n    Math.max(1, Math.ceil(columns / 2)), Math.max(1, Math.ceil(rows / 2))\n  ];\n}\n\nexport function getPackedRGBAArraySizeFromMatrixShape(\n    rows: number, columns: number): number {\n  const [w, h] = getPackedMatrixTextureShapeWidthHeight(rows, columns);\n  return w * h * 4;\n}\n\nexport interface TextureConfig {\n  internalFormatFloat: number;\n  textureFormatFloat: number;\n  internalFormatPackedHalfFloat: number;\n  internalFormatHalfFloat: number;\n  internalFormatPackedFloat: number;\n\n  // The format to use during a gl.readPixels call.\n  downloadTextureFormat: number;\n  // How many channels need to be unpacked after a gl.readPixels call.\n  downloadUnpackNumChannels: number;\n\n  defaultNumChannels: number;\n  textureTypeHalfFloat: number;\n  textureTypeFloat: number;\n}\n\nexport function getTextureConfig(\n    // tslint:disable-next-line:no-any\n    gl: WebGLRenderingContext, textureHalfFloatExtension?: any): TextureConfig {\n  // tslint:disable-next-line:no-any\n  const glany = gl as any;\n\n  let internalFormatFloat: number;\n  let internalFormatHalfFloat: number;\n  let internalFormatPackedHalfFloat: number;\n  let internalFormatPackedFloat: number;\n  let textureFormatFloat: number;\n\n  let downloadTextureFormat: number;\n  let downloadUnpackNumChannels: number;\n\n  let defaultNumChannels: number;\n  let textureTypeHalfFloat: number;\n  let textureTypeFloat: number;\n\n  if (env().getNumber('WEBGL_VERSION') === 2) {\n    internalFormatFloat = glany.R32F;\n    internalFormatHalfFloat = glany.R16F;\n    internalFormatPackedHalfFloat = glany.RGBA16F;\n    internalFormatPackedFloat = glany.RGBA32F;\n    textureFormatFloat = glany.RED;\n    downloadUnpackNumChannels = 4;\n    defaultNumChannels = 1;\n    textureTypeHalfFloat = glany.HALF_FLOAT;\n    textureTypeFloat = glany.FLOAT;\n  } else {\n    internalFormatFloat = gl.RGBA;\n    internalFormatHalfFloat = gl.RGBA;\n    internalFormatPackedHalfFloat = gl.RGBA;\n    internalFormatPackedFloat = glany.RGBA;\n    textureFormatFloat = gl.RGBA;\n    downloadUnpackNumChannels = 4;\n    defaultNumChannels = 4;\n    textureTypeHalfFloat = textureHalfFloatExtension != null ?\n        textureHalfFloatExtension.HALF_FLOAT_OES :\n        null;\n    textureTypeFloat = gl.FLOAT;\n  }\n  downloadTextureFormat = gl.RGBA;\n\n  return {\n    internalFormatFloat,\n    internalFormatHalfFloat,\n    internalFormatPackedHalfFloat,\n    internalFormatPackedFloat,\n    textureFormatFloat,\n    downloadTextureFormat,\n    downloadUnpackNumChannels,\n    defaultNumChannels,\n    textureTypeHalfFloat,\n    textureTypeFloat\n  };\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../environment';\n\nimport * as util from '../../util';\n\nimport {getWebGLContext} from './canvas_util';\nimport {getTextureConfig} from './tex_util';\n\nexport function callAndCheck<T>(\n    gl: WebGLRenderingContext, debugMode: boolean, func: () => T): T {\n  const returnValue = func();\n  if (debugMode) {\n    checkWebGLError(gl);\n  }\n  return returnValue;\n}\n\nfunction checkWebGLError(gl: WebGLRenderingContext) {\n  const error = gl.getError();\n  if (error !== gl.NO_ERROR) {\n    throw new Error('WebGL Error: ' + getWebGLErrorMessage(gl, error));\n  }\n}\n\n// https://en.wikipedia.org/wiki/Half-precision_floating-point_format\nconst MIN_FLOAT16 = 5.96e-8;\nconst MAX_FLOAT16 = 65504;\n\nexport function canBeRepresented(num: number): boolean {\n  if (env().getBool('WEBGL_RENDER_FLOAT32_ENABLED') || num === 0 ||\n      (MIN_FLOAT16 < Math.abs(num) && Math.abs(num) < MAX_FLOAT16)) {\n    return true;\n  }\n  return false;\n}\n\nexport function getWebGLErrorMessage(\n    gl: WebGLRenderingContext, status: number): string {\n  switch (status) {\n    case gl.NO_ERROR:\n      return 'NO_ERROR';\n    case gl.INVALID_ENUM:\n      return 'INVALID_ENUM';\n    case gl.INVALID_VALUE:\n      return 'INVALID_VALUE';\n    case gl.INVALID_OPERATION:\n      return 'INVALID_OPERATION';\n    case gl.INVALID_FRAMEBUFFER_OPERATION:\n      return 'INVALID_FRAMEBUFFER_OPERATION';\n    case gl.OUT_OF_MEMORY:\n      return 'OUT_OF_MEMORY';\n    case gl.CONTEXT_LOST_WEBGL:\n      return 'CONTEXT_LOST_WEBGL';\n    default:\n      return `Unknown error code ${status}`;\n  }\n}\n\nexport function getExtensionOrThrow(\n    gl: WebGLRenderingContext, debug: boolean, extensionName: string): {} {\n  return throwIfNull<{}>(\n      gl, debug, () => gl.getExtension(extensionName),\n      'Extension \"' + extensionName + '\" not supported on this browser.');\n}\n\nexport function createVertexShader(\n    gl: WebGLRenderingContext, debug: boolean,\n    vertexShaderSource: string): WebGLShader {\n  const vertexShader: WebGLShader = throwIfNull<WebGLShader>(\n      gl, debug, () => gl.createShader(gl.VERTEX_SHADER),\n      'Unable to create vertex WebGLShader.');\n  callAndCheck(\n      gl, debug, () => gl.shaderSource(vertexShader, vertexShaderSource));\n  callAndCheck(gl, debug, () => gl.compileShader(vertexShader));\n  if (gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS) === false) {\n    console.log(gl.getShaderInfoLog(vertexShader));\n    throw new Error('Failed to compile vertex shader.');\n  }\n  return vertexShader;\n}\n\nexport function createFragmentShader(\n    gl: WebGLRenderingContext, debug: boolean,\n    fragmentShaderSource: string): WebGLShader {\n  const fragmentShader: WebGLShader = throwIfNull<WebGLShader>(\n      gl, debug, () => gl.createShader(gl.FRAGMENT_SHADER),\n      'Unable to create fragment WebGLShader.');\n  callAndCheck(\n      gl, debug, () => gl.shaderSource(fragmentShader, fragmentShaderSource));\n  callAndCheck(gl, debug, () => gl.compileShader(fragmentShader));\n  if (gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS) === false) {\n    logShaderSourceAndInfoLog(\n        fragmentShaderSource, gl.getShaderInfoLog(fragmentShader));\n    throw new Error('Failed to compile fragment shader.');\n  }\n  return fragmentShader;\n}\n\nconst lineNumberRegex = /ERROR: [0-9]+:([0-9]+):/g;\nfunction logShaderSourceAndInfoLog(\n    shaderSource: string, shaderInfoLog: string) {\n  const lineNumberRegexResult = lineNumberRegex.exec(shaderInfoLog);\n  if (lineNumberRegexResult == null) {\n    console.log(`Couldn't parse line number in error: ${shaderInfoLog}`);\n    console.log(shaderSource);\n    return;\n  }\n\n  const lineNumber = +lineNumberRegexResult[1];\n\n  const shaderLines = shaderSource.split('\\n');\n  const pad = shaderLines.length.toString().length + 2;\n  const linesWithLineNumbers = shaderLines.map(\n      (line, lineNumber) =>\n          util.rightPad((lineNumber + 1).toString(), pad) + line);\n  let maxLineLength = 0;\n  for (let i = 0; i < linesWithLineNumbers.length; i++) {\n    maxLineLength = Math.max(linesWithLineNumbers[i].length, maxLineLength);\n  }\n\n  const beforeErrorLines = linesWithLineNumbers.slice(0, lineNumber - 1);\n  const errorLine = linesWithLineNumbers.slice(lineNumber - 1, lineNumber);\n  const afterErrorLines = linesWithLineNumbers.slice(lineNumber);\n\n  console.log(beforeErrorLines.join('\\n'));\n  console.log(shaderInfoLog.split('\\n')[0]);\n  console.log(\n      `%c ${util.rightPad(errorLine[0], maxLineLength)}`,\n      'border:1px solid red; background-color:#e3d2d2; color:#a61717');\n  console.log(afterErrorLines.join('\\n'));\n}\n\nexport function createProgram(\n    gl: WebGLRenderingContext, debug: boolean): WebGLProgram {\n  return throwIfNull<WebGLProgram>(\n      gl, debug, () => gl.createProgram(), 'Unable to create WebGLProgram.');\n}\n\nexport function linkProgram(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram) {\n  callAndCheck(gl, debug, () => gl.linkProgram(program));\n  if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) {\n    console.log(gl.getProgramInfoLog(program));\n    throw new Error('Failed to link vertex and fragment shaders.');\n  }\n}\n\nexport function validateProgram(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram) {\n  callAndCheck(gl, debug, () => gl.validateProgram(program));\n  if (gl.getProgramParameter(program, gl.VALIDATE_STATUS) === false) {\n    console.log(gl.getProgramInfoLog(program));\n    throw new Error('Shader program validation failed.');\n  }\n}\n\nexport function createStaticVertexBuffer(\n    gl: WebGLRenderingContext, debug: boolean,\n    data: Float32Array): WebGLBuffer {\n  const buffer: WebGLBuffer = throwIfNull<WebGLBuffer>(\n      gl, debug, () => gl.createBuffer(), 'Unable to create WebGLBuffer');\n  callAndCheck(gl, debug, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer));\n  callAndCheck(\n      gl, debug, () => gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW));\n  return buffer;\n}\n\nexport function createStaticIndexBuffer(\n    gl: WebGLRenderingContext, debug: boolean, data: Uint16Array): WebGLBuffer {\n  const buffer: WebGLBuffer = throwIfNull<WebGLBuffer>(\n      gl, debug, () => gl.createBuffer(), 'Unable to create WebGLBuffer');\n  callAndCheck(gl, debug, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer));\n  callAndCheck(\n      gl, debug,\n      () => gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.STATIC_DRAW));\n  return buffer;\n}\n\nexport function getNumChannels(): number {\n  if (env().getNumber('WEBGL_VERSION') === 2) {\n    return 1;\n  }\n  return 4;\n}\n\nexport function createTexture(\n    gl: WebGLRenderingContext, debug: boolean): WebGLTexture {\n  return throwIfNull<WebGLTexture>(\n      gl, debug, () => gl.createTexture(), 'Unable to create WebGLTexture.');\n}\n\nexport function validateTextureSize(width: number, height: number) {\n  const maxTextureSize = env().getNumber('WEBGL_MAX_TEXTURE_SIZE');\n  if ((width <= 0) || (height <= 0)) {\n    const requested = `[${width}x${height}]`;\n    throw new Error('Requested texture size ' + requested + ' is invalid.');\n  }\n  if ((width > maxTextureSize) || (height > maxTextureSize)) {\n    const requested = `[${width}x${height}]`;\n    const max = `[${maxTextureSize}x${maxTextureSize}]`;\n    throw new Error(\n        'Requested texture size ' + requested +\n        ' greater than WebGL maximum on this browser / GPU ' + max + '.');\n  }\n}\n\nexport function createFramebuffer(\n    gl: WebGLRenderingContext, debug: boolean): WebGLFramebuffer {\n  return throwIfNull<WebGLFramebuffer>(\n      gl, debug, () => gl.createFramebuffer(),\n      'Unable to create WebGLFramebuffer.');\n}\n\nexport function bindVertexBufferToProgramAttribute(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram,\n    attribute: string, buffer: WebGLBuffer, arrayEntriesPerItem: number,\n    itemStrideInBytes: number, itemOffsetInBytes: number): boolean {\n  const loc = gl.getAttribLocation(program, attribute);\n  if (loc === -1) {\n    // The GPU compiler decided to strip out this attribute because it's unused,\n    // thus no need to bind.\n    return false;\n  }\n  callAndCheck(gl, debug, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer));\n  callAndCheck(\n      gl, debug,\n      () => gl.vertexAttribPointer(\n          loc, arrayEntriesPerItem, gl.FLOAT, false, itemStrideInBytes,\n          itemOffsetInBytes));\n  callAndCheck(gl, debug, () => gl.enableVertexAttribArray(loc));\n  return true;\n}\n\nexport function bindTextureUnit(\n    gl: WebGLRenderingContext, debug: boolean, texture: WebGLTexture,\n    textureUnit: number) {\n  validateTextureUnit(gl, textureUnit);\n  callAndCheck(gl, debug, () => gl.activeTexture(gl.TEXTURE0 + textureUnit));\n  callAndCheck(gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n}\n\nexport function unbindTextureUnit(\n    gl: WebGLRenderingContext, debug: boolean, textureUnit: number) {\n  validateTextureUnit(gl, textureUnit);\n  callAndCheck(gl, debug, () => gl.activeTexture(gl.TEXTURE0 + textureUnit));\n  callAndCheck(gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\n\nexport function getProgramUniformLocationOrThrow(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram,\n    uniformName: string): WebGLUniformLocation {\n  return throwIfNull<WebGLUniformLocation>(\n      gl, debug, () => gl.getUniformLocation(program, uniformName),\n      'uniform \"' + uniformName + '\" not present in program.');\n}\n\nexport function getProgramUniformLocation(\n    gl: WebGLRenderingContext, program: WebGLProgram,\n    uniformName: string): WebGLUniformLocation {\n  return gl.getUniformLocation(program, uniformName);\n}\n\nexport function bindTextureToProgramUniformSampler(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram,\n    texture: WebGLTexture, uniformSamplerLocation: WebGLUniformLocation,\n    textureUnit: number) {\n  callAndCheck(\n      gl, debug, () => bindTextureUnit(gl, debug, texture, textureUnit));\n  callAndCheck(\n      gl, debug, () => gl.uniform1i(uniformSamplerLocation, textureUnit));\n}\n\nexport function bindCanvasToFramebuffer(\n    gl: WebGLRenderingContext, debug: boolean) {\n  callAndCheck(gl, debug, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null));\n  callAndCheck(\n      gl, debug, () => gl.viewport(0, 0, gl.canvas.width, gl.canvas.height));\n  callAndCheck(\n      gl, debug, () => gl.scissor(0, 0, gl.canvas.width, gl.canvas.height));\n}\n\nexport function bindColorTextureToFramebuffer(\n    gl: WebGLRenderingContext, debug: boolean, texture: WebGLTexture,\n    framebuffer: WebGLFramebuffer) {\n  callAndCheck(\n      gl, debug, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer));\n  callAndCheck(\n      gl, debug,\n      () => gl.framebufferTexture2D(\n          gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0));\n}\n\nexport function unbindColorTextureFromFramebuffer(\n    gl: WebGLRenderingContext, debug: boolean, framebuffer: WebGLFramebuffer) {\n  callAndCheck(\n      gl, debug, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer));\n  callAndCheck(\n      gl, debug,\n      () => gl.framebufferTexture2D(\n          gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0));\n}\n\nexport function validateFramebuffer(gl: WebGLRenderingContext) {\n  const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n  if (status !== gl.FRAMEBUFFER_COMPLETE) {\n    throw new Error(\n        'Error binding framebuffer: ' + getFramebufferErrorMessage(gl, status));\n  }\n}\n\nexport function getFramebufferErrorMessage(\n    gl: WebGLRenderingContext, status: number): string {\n  switch (status) {\n    case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n      return 'FRAMEBUFFER_INCOMPLETE_ATTACHMENT';\n    case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n      return 'FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT';\n    case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n      return 'FRAMEBUFFER_INCOMPLETE_DIMENSIONS';\n    case gl.FRAMEBUFFER_UNSUPPORTED:\n      return 'FRAMEBUFFER_UNSUPPORTED';\n    default:\n      return `unknown error ${status}`;\n  }\n}\n\nfunction throwIfNull<T>(\n    gl: WebGLRenderingContext, debug: boolean, returnTOrNull: () => T | null,\n    failureMessage: string): T {\n  const tOrNull: T|null = callAndCheck(gl, debug, () => returnTOrNull());\n  if (tOrNull == null) {\n    throw new Error(failureMessage);\n  }\n  return tOrNull;\n}\n\nfunction validateTextureUnit(gl: WebGLRenderingContext, textureUnit: number) {\n  const maxTextureUnit = gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1;\n  const glTextureUnit = textureUnit + gl.TEXTURE0;\n  if (glTextureUnit < gl.TEXTURE0 || glTextureUnit > maxTextureUnit) {\n    const textureUnitRange = `[gl.TEXTURE0, gl.TEXTURE${maxTextureUnit}]`;\n    throw new Error(`textureUnit must be in ${textureUnitRange}.`);\n  }\n}\n\nexport function getBatchDim(shape: number[], dimsToSkip = 2): number {\n  return util.sizeFromShape(shape.slice(0, shape.length - dimsToSkip));\n}\n\nexport function getRowsCols(shape: number[]): [number, number] {\n  if (shape.length === 0) {\n    throw Error('Cannot get rows and columns of an empty shape array.');\n  }\n\n  return [\n    shape.length > 1 ? shape[shape.length - 2] : 1, shape[shape.length - 1]\n  ];\n}\n\nexport function getShapeAs3D(shape: number[]): [number, number, number] {\n  let shapeAs3D: [number, number, number] = [1, 1, 1];\n  const isScalar = shape.length === 0 || (shape.length === 1 && shape[0] === 1);\n  if (!isScalar) {\n    shapeAs3D =\n        [getBatchDim(shape), ...getRowsCols(shape)] as [number, number, number];\n  }\n  return shapeAs3D;\n}\n\nexport function getTextureShapeFromLogicalShape(\n    logShape: number[], isPacked = false): [number, number] {\n  let maxTexSize = env().getNumber('WEBGL_MAX_TEXTURE_SIZE');\n  if (isPacked) {\n    maxTexSize = maxTexSize * 2;\n\n    // This logic ensures we accurately count the number of packed texels needed\n    // to accommodate the tensor. We can only pack values in the same texel if\n    // they are from adjacent pairs of rows/cols within the same batch. So if a\n    // tensor has 3 rows, we pretend it has 4 rows in order to account for the\n    // fact that the texels containing the third row are half empty.\n    logShape = logShape.map(\n        (d, i) => i >= logShape.length - 2 ?\n            util.nearestLargerEven(logShape[i]) :\n            logShape[i]);\n\n    // Packed texture height is at least 2 (the channel height of a single\n    // texel).\n    if (logShape.length === 1) {\n      logShape = [2, logShape[0]];\n    }\n  }\n\n  // If logical shape is 2, we don't squeeze, since we want to match physical.\n  if (logShape.length !== 2) {\n    const squeezeResult = util.squeezeShape(logShape);\n    logShape = squeezeResult.newShape;\n  }\n\n  let size = util.sizeFromShape(logShape);\n  if (logShape.length <= 1 && size <= maxTexSize) {\n    return [1, size];\n  } else if (\n      logShape.length === 2 && logShape[0] <= maxTexSize &&\n      logShape[1] <= maxTexSize) {\n    return logShape as [number, number];\n  } else if (\n      logShape.length === 3 && logShape[0] * logShape[1] <= maxTexSize &&\n      logShape[2] <= maxTexSize) {\n    return [logShape[0] * logShape[1], logShape[2]];\n  } else if (\n      logShape.length === 3 && logShape[0] <= maxTexSize &&\n      logShape[1] * logShape[2] <= maxTexSize) {\n    return [logShape[0], logShape[1] * logShape[2]];\n  } else if (\n      logShape.length === 4 &&\n      logShape[0] * logShape[1] * logShape[2] <= maxTexSize &&\n      logShape[3] <= maxTexSize) {\n    return [logShape[0] * logShape[1] * logShape[2], logShape[3]];\n  } else if (\n      logShape.length === 4 && logShape[0] <= maxTexSize &&\n      logShape[1] * logShape[2] * logShape[3] <= maxTexSize) {\n    return [logShape[0], logShape[1] * logShape[2] * logShape[3]];\n  } else {\n    if (isPacked) {\n      // For packed textures size equals the number of channels required to\n      // accommodate the texture data. However in order to squarify such that\n      // inner dimensions stay even, we rewrite size to equal the number of\n      // texels. Then in the return statement we rehydrate the squarified\n      // dimensions to channel units.\n\n      const batchDim = getBatchDim(logShape);\n      let rows = 2, cols = 2;\n      if (logShape.length) {\n        [rows, cols] = getRowsCols(logShape);\n      }\n      size = batchDim * (rows / 2) * (cols / 2);\n      return util.sizeToSquarishShape(size).map(d => d * 2) as [number, number];\n    }\n    return util.sizeToSquarishShape(size);\n  }\n}\n\nfunction isEven(n: number): boolean {\n  return n % 2 === 0;\n}\n\n/**\n * This determines whether reshaping a packed texture requires rearranging\n * the data within the texture, assuming 2x2 packing.\n */\nexport function isReshapeFree(shape1: number[], shape2: number[]): boolean {\n  shape1 = shape1.slice(-2);\n  shape2 = shape2.slice(-2);\n\n  if (util.arraysEqual(shape1, shape2)) {\n    return true;\n  }\n\n  if (!shape1.length || !shape2.length) {  // One of the shapes is a scalar.\n    return true;\n  }\n\n  if (shape1[0] === 0 || shape1[1] === 0 || shape2[0] === 0 ||\n      shape2[1] === 0) {\n    return true;\n  }\n\n  if (shape1.length !== shape2.length) {  // One of the shapes is a vector.\n    const shape1Cols = shape1.slice(-1)[0];\n    const shape2Cols = shape2.slice(-1)[0];\n    if (shape1Cols === shape2Cols) {\n      return true;\n    }\n\n    if (isEven(shape1Cols) && isEven(shape2Cols) &&\n        (shape1[0] === 1 || shape2[0] === 1)) {\n      return true;\n    }\n  }\n  return shape1[1] === shape2[1] && isEven(shape1[0]) && isEven(shape2[0]);\n}\n\n// We cache webgl params because the environment gets reset between\n// unit tests and we don't want to constantly query the WebGLContext for\n// MAX_TEXTURE_SIZE.\nlet MAX_TEXTURE_SIZE: number;\nlet MAX_TEXTURES_IN_SHADER: number;\n\nexport function getWebGLMaxTextureSize(webGLVersion: number): number {\n  if (MAX_TEXTURE_SIZE == null) {\n    const gl = getWebGLContext(webGLVersion);\n    MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n  }\n  return MAX_TEXTURE_SIZE;\n}\n\nexport function resetMaxTextureSize() {\n  MAX_TEXTURE_SIZE = null;\n}\nexport function resetMaxTexturesInShader() {\n  MAX_TEXTURES_IN_SHADER = null;\n}\n\nexport function getMaxTexturesInShader(webGLVersion: number): number {\n  if (MAX_TEXTURES_IN_SHADER == null) {\n    const gl = getWebGLContext(webGLVersion);\n    MAX_TEXTURES_IN_SHADER = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n  }\n  // We cap at 16 to avoid spurious runtime \"memory exhausted\" error.\n  return Math.min(16, MAX_TEXTURES_IN_SHADER);\n}\n\nexport function getWebGLDisjointQueryTimerVersion(webGLVersion: number):\n    number {\n  if (webGLVersion === 0) {\n    return 0;\n  }\n\n  let queryTimerVersion: number;\n  const gl = getWebGLContext(webGLVersion);\n\n  if (hasExtension(gl, 'EXT_disjoint_timer_query_webgl2') &&\n      webGLVersion === 2) {\n    queryTimerVersion = 2;\n  } else if (hasExtension(gl, 'EXT_disjoint_timer_query')) {\n    queryTimerVersion = 1;\n  } else {\n    queryTimerVersion = 0;\n  }\n  return queryTimerVersion;\n}\n\nexport function hasExtension(gl: WebGLRenderingContext, extensionName: string) {\n  const ext = gl.getExtension(extensionName);\n  return ext != null;\n}\n\nexport function isWebGLVersionEnabled(webGLVersion: 1|2) {\n  try {\n    const gl = getWebGLContext(webGLVersion);\n    if (gl != null) {\n      return true;\n    }\n  } catch (e) {\n    return false;\n  }\n  return false;\n}\n\nexport function isCapableOfRenderingToFloatTexture(webGLVersion: number):\n    boolean {\n  if (webGLVersion === 0) {\n    return false;\n  }\n\n  const gl = getWebGLContext(webGLVersion);\n\n  if (webGLVersion === 1) {\n    if (!hasExtension(gl, 'OES_texture_float')) {\n      return false;\n    }\n  } else {\n    if (!hasExtension(gl, 'EXT_color_buffer_float')) {\n      return false;\n    }\n  }\n\n  const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl);\n  return isFrameBufferComplete;\n}\n\n/**\n * Check if we can download values from a float/half-float texture.\n *\n * Note that for performance reasons we use binding a texture to a framebuffer\n * as a proxy for ability to download float values later using readPixels. The\n * texture params of this texture will not match those in readPixels exactly\n * but if we are unable to bind some kind of float texture to the frameBuffer\n * then we definitely will not be able to read float values from it.\n */\nexport function isDownloadFloatTextureEnabled(webGLVersion: number): boolean {\n  if (webGLVersion === 0) {\n    return false;\n  }\n\n  const gl = getWebGLContext(webGLVersion);\n\n  if (webGLVersion === 1) {\n    if (!hasExtension(gl, 'OES_texture_float')) {\n      return false;\n    }\n    if (!hasExtension(gl, 'WEBGL_color_buffer_float')) {\n      return false;\n    }\n  } else {\n    if (hasExtension(gl, 'EXT_color_buffer_float')) {\n      return createFloatTextureAndBindToFramebuffer(gl);\n    }\n\n    const COLOR_BUFFER_HALF_FLOAT = 'EXT_color_buffer_half_float';\n    if (hasExtension(gl, COLOR_BUFFER_HALF_FLOAT)) {\n      const textureHalfFloatExtension =\n          gl.getExtension(COLOR_BUFFER_HALF_FLOAT);\n      return createHalfFloatTextureAndBindToFramebuffer(\n          gl, textureHalfFloatExtension);\n    }\n\n    return false;\n  }\n\n  const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl);\n  return isFrameBufferComplete;\n}\n\nfunction createFloatTextureAndBindToFramebuffer(gl: WebGLRenderingContext):\n    boolean {\n  const texConfig = getTextureConfig(gl);\n\n  const texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_2D, texture);\n\n  const width = 1;\n  const height = 1;\n  gl.texImage2D(\n      gl.TEXTURE_2D, 0, texConfig.internalFormatFloat, width, height, 0,\n      texConfig.textureFormatFloat, texConfig.textureTypeFloat, null);\n\n  const frameBuffer = gl.createFramebuffer();\n  gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n  gl.framebufferTexture2D(\n      gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n\n  const isFrameBufferComplete =\n      gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n\n  gl.bindTexture(gl.TEXTURE_2D, null);\n  gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n  gl.deleteTexture(texture);\n  gl.deleteFramebuffer(frameBuffer);\n\n  return isFrameBufferComplete;\n}\n\nfunction createHalfFloatTextureAndBindToFramebuffer(\n    // tslint:disable-next-line:no-any\n    gl: WebGLRenderingContext, textureHalfFloatExtension: any): boolean {\n  const texConfig = getTextureConfig(gl, textureHalfFloatExtension);\n  const texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_2D, texture);\n\n  const width = 1;\n  const height = 1;\n  gl.texImage2D(\n      gl.TEXTURE_2D, 0, texConfig.internalFormatHalfFloat, width, height, 0,\n      texConfig.textureFormatFloat, texConfig.textureTypeHalfFloat, null);\n\n  const frameBuffer = gl.createFramebuffer();\n  gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n  gl.framebufferTexture2D(\n      gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n\n  const isFrameBufferComplete =\n      gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n\n  gl.bindTexture(gl.TEXTURE_2D, null);\n  gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n  gl.deleteTexture(texture);\n  gl.deleteFramebuffer(frameBuffer);\n\n  return isFrameBufferComplete;\n}\n\nexport function isWebGLFenceEnabled(webGLVersion: number) {\n  if (webGLVersion !== 2) {\n    return false;\n  }\n  const gl = getWebGLContext(webGLVersion);\n\n  // tslint:disable-next-line:no-any\n  const isEnabled = (gl as any).fenceSync != null;\n  return isEnabled;\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as device_util from '../../device_util';\nimport {env} from '../../environment';\n\nimport * as webgl_util from './webgl_util';\n\nconst ENV = env();\n\n/**\n * This file contains WebGL-specific flag registrations.\n */\n\n/**\n * True if WebGL is supported.\n */\nENV.registerFlag('HAS_WEBGL', () => ENV.getNumber('WEBGL_VERSION') > 0);\n\n/** 0: No WebGL, 1: WebGL 1.0, 2: WebGL 2.0. */\nENV.registerFlag('WEBGL_VERSION', () => {\n  if (webgl_util.isWebGLVersionEnabled(2)) {\n    return 2;\n  } else if (webgl_util.isWebGLVersionEnabled(1)) {\n    return 1;\n  }\n  return 0;\n});\n\nENV.registerFlag(\n    'WEBGL_BUFFER_SUPPORTED', () => ENV.get('WEBGL_VERSION') === 2);\n\n/** Whether the WebGL backend will sometimes forward ops to the CPU. */\nENV.registerFlag('WEBGL_CPU_FORWARD', () => true);\n\n/** Whether the WebGL backend will always use f16 textures for rendering. */\nENV.registerFlag('WEBGL_FORCE_F16_TEXTURES', () => false);\n\n/** Whether to turn all packing related flags on. */\nENV.registerFlag('WEBGL_PACK', () => ENV.getBool('HAS_WEBGL'));\n\n/** Whether we will pack the batchnormalization op. */\nENV.registerFlag('WEBGL_PACK_NORMALIZATION', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack the clip op. */\nENV.registerFlag('WEBGL_PACK_CLIP', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack the depthwise conv op. */\n// TODO: https://github.com/tensorflow/tfjs/issues/1679\nENV.registerFlag('WEBGL_PACK_DEPTHWISECONV', () => false);\n\n/** Whether we will pack binary ops. */\nENV.registerFlag(\n    'WEBGL_PACK_BINARY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack unary ops. */\nENV.registerFlag(\n    'WEBGL_PACK_UNARY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack array ops. */\nENV.registerFlag(\n    'WEBGL_PACK_ARRAY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack image ops. */\nENV.registerFlag(\n    'WEBGL_PACK_IMAGE_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will pack reduce ops. */\nENV.registerFlag('WEBGL_PACK_REDUCE', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether packed WebGL kernels lazily unpack their outputs. */\nENV.registerFlag('WEBGL_LAZILY_UNPACK', () => ENV.getBool('WEBGL_PACK'));\n\n/** Whether we will use the im2col algorithm to speed up convolutions. */\nENV.registerFlag('WEBGL_CONV_IM2COL', () => ENV.getBool('WEBGL_PACK'));\n\n/** The maximum texture dimension. */\nENV.registerFlag(\n    'WEBGL_MAX_TEXTURE_SIZE',\n    () => webgl_util.getWebGLMaxTextureSize(ENV.getNumber('WEBGL_VERSION')));\n\n/** The maximum texture dimension. */\nENV.registerFlag(\n    'WEBGL_MAX_TEXTURES_IN_SHADER',\n    () => webgl_util.getMaxTexturesInShader(ENV.getNumber('WEBGL_VERSION')));\n\n/**\n * The disjoint_query_timer extension version.\n * 0: disabled, 1: EXT_disjoint_timer_query, 2:\n * EXT_disjoint_timer_query_webgl2.\n * In Firefox with WebGL 2.0,\n * EXT_disjoint_timer_query_webgl2 is not available, so we must use the\n * WebGL 1.0 extension.\n */\nENV.registerFlag('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION', () => {\n  const webGLVersion = ENV.getNumber('WEBGL_VERSION');\n\n  if (webGLVersion === 0) {\n    return 0;\n  }\n  return webgl_util.getWebGLDisjointQueryTimerVersion(webGLVersion);\n});\n\n/**\n * Whether the timer object from the disjoint_query_timer extension gives\n * timing information that is reliable.\n */\nENV.registerFlag(\n    'WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE',\n    () => ENV.getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') > 0 &&\n        !device_util.isMobile());\n\n/**\n * Whether the device is physically capable of rendering to float32 textures.\n */\nENV.registerFlag(\n    'WEBGL_RENDER_FLOAT32_CAPABLE',\n    () => webgl_util.isCapableOfRenderingToFloatTexture(\n        ENV.getNumber('WEBGL_VERSION')));\n\n/**\n * Whether rendering to float32 textures is enabled. If disabled, renders to\n * float16 textures.\n */\nENV.registerFlag('WEBGL_RENDER_FLOAT32_ENABLED', () => {\n  return ENV.getBool('WEBGL_FORCE_F16_TEXTURES') ?\n      false :\n      ENV.getBool('WEBGL_RENDER_FLOAT32_CAPABLE');\n});\n\n/**\n * Whether downloading float textures is enabled (16 or 32 bit). If disabled,\n * uses IEEE 754 encoding of the float32 values to 4 uint8 when downloading.\n */\nENV.registerFlag(\n    'WEBGL_DOWNLOAD_FLOAT_ENABLED',\n    () => webgl_util.isDownloadFloatTextureEnabled(\n        ENV.getNumber('WEBGL_VERSION')));\n\n/** Whether the fence API is available. */\nENV.registerFlag(\n    'WEBGL_FENCE_API_ENABLED',\n    () => webgl_util.isWebGLFenceEnabled(ENV.getNumber('WEBGL_VERSION')));\n\n/**\n * Tensors with size <= than this will be uploaded as uniforms, not textures.\n */\nENV.registerFlag('WEBGL_SIZE_UPLOAD_UNIFORM', () => {\n  // Use uniform uploads only when 32bit floats are supported. In\n  // 16bit\n  // environments there are problems with comparing a 16bit texture value\n  // with a 32bit uniform value.\n  const useUniforms = ENV.getBool('WEBGL_RENDER_FLOAT32_ENABLED');\n  return useUniforms ? 4 : 0;\n});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {KernelBackend} from './backends/backend';\nimport {ENGINE, Engine, MemoryInfo, ProfileInfo, ScopeFn, TimingInfo} from './engine';\nimport {env} from './environment';\n\nimport {Platform} from './platforms/platform';\nimport {setDeprecationWarningFn, Tensor} from './tensor';\nimport {TensorContainer} from './tensor_types';\nimport {getTensorsInContainer} from './tensor_util';\n\n/**\n * Enables production mode which disables correctness checks in favor of\n * performance.\n */\n/** @doc {heading: 'Environment'} */\nexport function enableProdMode(): void {\n  env().set('PROD', true);\n}\n\n/**\n * Enables debug mode which will log information about all executed kernels:\n * the elapsed time of the kernel execution, as well as the rank, shape, and\n * size of the output tensor.\n *\n * Debug mode will significantly slow down your application as it will\n * download the result of every operation to the CPU. This should not be used in\n * production. Debug mode does not affect the timing information of the kernel\n * execution as we do not measure download time in the kernel execution time.\n *\n * See also: `tf.profile`, `tf.memory`.\n */\n/** @doc {heading: 'Environment'} */\nexport function enableDebugMode(): void {\n  env().set('DEBUG', true);\n}\n\n/** Globally disables deprecation warnings */\nexport function disableDeprecationWarnings(): void {\n  env().set('DEPRECATION_WARNINGS_ENABLED', false);\n  console.warn(`TensorFlow.js deprecation warnings have been disabled.`);\n}\n\n/** Warn users about deprecated functionality. */\nexport function deprecationWarn(msg: string) {\n  if (env().getBool('DEPRECATION_WARNINGS_ENABLED')) {\n    console.warn(\n        msg + ' You can disable deprecation warnings with ' +\n        'tf.disableDeprecationWarnings().');\n  }\n}\nsetDeprecationWarningFn(deprecationWarn);\n\n/**\n * Dispose all variables kept in backend engine.\n */\n/** @doc {heading: 'Environment'} */\nexport function disposeVariables(): void {\n  ENGINE.disposeVariables();\n}\n\n/**\n * It returns the global engine that keeps track of all tensors and backends.\n */\n/** @doc {heading: 'Environment'} */\nexport function engine(): Engine {\n  return ENGINE;\n}\n\n/**\n * Returns memory info at the current time in the program. The result is an\n * object with the following properties:\n *\n * - `numBytes`: Number of bytes allocated (undisposed) at this time.\n * - `numTensors`: Number of unique tensors allocated.\n * - `numDataBuffers`: Number of unique data buffers allocated\n *   (undisposed) at this time, which is ≤ the number of tensors\n *   (e.g. `a.reshape(newShape)` makes a new Tensor that shares the same\n *   data buffer with `a`).\n * - `unreliable`: True if the memory usage is unreliable. See `reasons` when\n *    `unreliable` is true.\n * - `reasons`: `string[]`, reasons why the memory is unreliable, present if\n *    `unreliable` is true.\n *\n * WebGL Properties:\n * - `numBytesInGPU`: Number of bytes allocated (undisposed) in the GPU only at\n *     this time.\n */\n/** @doc {heading: 'Performance', subheading: 'Memory'} */\nexport function memory(): MemoryInfo {\n  return ENGINE.memory();\n}\n\n/**\n * Executes the provided function `f()` and returns a promise that resolves\n * with information about the function's memory use:\n * - `newBytes`: the number of new bytes allocated\n * - `newTensors`: the number of new tensors created\n * - `peakBytes`: the peak number of bytes allocated\n * - `kernels`: an array of objects for each kernel involved that reports\n * their input and output shapes, number of bytes used, and number of new\n * tensors created.\n *\n * ```js\n * const profile = await tf.profile(() => {\n *   const x = tf.tensor1d([1, 2, 3]);\n *   let x2 = x.square();\n *   x2.dispose();\n *   x2 = x.square();\n *   x2.dispose();\n *   return x;\n * });\n *\n * console.log(`newBytes: ${profile.newBytes}`);\n * console.log(`newTensors: ${profile.newTensors}`);\n * console.log(`byte usage over all kernels: ${profile.kernels.map(k =>\n * k.totalBytesSnapshot)}`);\n * ```\n *\n */\n/** @doc {heading: 'Performance', subheading: 'Profile'} */\nexport function profile(f: () => TensorContainer): Promise<ProfileInfo> {\n  return ENGINE.profile(f);\n}\n\n/**\n * Executes the provided function `fn` and after it is executed, cleans up all\n * intermediate tensors allocated by `fn` except those returned by `fn`.\n * `fn` must not return a Promise (async functions not allowed). The returned\n * result can be a complex object.\n *\n * Using this method helps avoid memory leaks. In general, wrap calls to\n * operations in `tf.tidy` for automatic memory cleanup.\n *\n * NOTE: Variables do *not* get cleaned up when inside a tidy(). If you want to\n * dispose variables, please use `tf.disposeVariables` or call dispose()\n * directly on variables.\n *\n * ```js\n * // y = 2 ^ 2 + 1\n * const y = tf.tidy(() => {\n *   // a, b, and one will be cleaned up when the tidy ends.\n *   const one = tf.scalar(1);\n *   const a = tf.scalar(2);\n *   const b = a.square();\n *\n *   console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n *   // The value returned inside the tidy function will return\n *   // through the tidy, in this case to the variable y.\n *   return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * y.print();\n * ```\n *\n * @param nameOrFn The name of the closure, or the function to execute.\n *     If a name is provided, the 2nd argument should be the function.\n *     If debug mode is on, the timing and the memory usage of the function\n *     will be tracked and displayed on the console using the provided name.\n * @param fn The function to execute.\n */\n/** @doc {heading: 'Performance', subheading: 'Memory'} */\nexport function tidy<T extends TensorContainer>(\n    nameOrFn: string|ScopeFn<T>, fn?: ScopeFn<T>): T {\n  return ENGINE.tidy(nameOrFn, fn);\n}\n\n/**\n * Disposes any `tf.Tensor`s found within the provided object.\n *\n * @param container an object that may be a `tf.Tensor` or may directly\n *     contain `tf.Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. If\n *     the object is not a `tf.Tensor` or does not contain `Tensors`, nothing\n *     happens. In general it is safe to pass any object here, except that\n *     `Promise`s are not supported.\n */\n/** @doc {heading: 'Performance', subheading: 'Memory'} */\nexport function dispose(container: TensorContainer) {\n  const tensors = getTensorsInContainer(container);\n  tensors.forEach(tensor => tensor.dispose());\n}\n\n/**\n * Keeps a `tf.Tensor` generated inside a `tf.tidy` from being disposed\n * automatically.\n *\n * ```js\n * let b;\n * const y = tf.tidy(() => {\n *   const one = tf.scalar(1);\n *   const a = tf.scalar(2);\n *\n *   // b will not be cleaned up by the tidy. a and one will be cleaned up\n *   // when the tidy ends.\n *   b = tf.keep(a.square());\n *\n *   console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n *   // The value returned inside the tidy function will return\n *   // through the tidy, in this case to the variable y.\n *   return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * console.log('y:');\n * y.print();\n * console.log('b:');\n * b.print();\n * ```\n *\n * @param result The tensor to keep from being disposed.\n */\n/** @doc {heading: 'Performance', subheading: 'Memory'} */\nexport function keep<T extends Tensor>(result: T): T {\n  return ENGINE.keep(result);\n}\n\n/**\n * Executes `f()` and returns a promise that resolves with timing\n * information.\n *\n * The result is an object with the following properties:\n *\n * - `wallMs`: Wall execution time.\n * - `kernelMs`: Kernel execution time, ignoring data transfer. If using the\n * WebGL backend and the query timer extension is not available, this will\n * return an error object.\n * - On `WebGL` The following additional properties exist:\n *   - `uploadWaitMs`: CPU blocking time on texture uploads.\n *   - `downloadWaitMs`: CPU blocking time on texture downloads (readPixels).\n *\n * ```js\n * const x = tf.randomNormal([20, 20]);\n * const time = await tf.time(() => x.matMul(x));\n *\n * console.log(`kernelMs: ${time.kernelMs}, wallTimeMs: ${time.wallMs}`);\n * ```\n *\n * @param f The function to execute and time.\n */\n/** @doc {heading: 'Performance', subheading: 'Timing'} */\nexport function time(f: () => void): Promise<TimingInfo> {\n  return ENGINE.time(f);\n}\n\n/**\n * Sets the backend (cpu, webgl, wasm, etc) responsible for creating tensors and\n * executing operations on those tensors. Returns a promise that resolves\n * to a boolean if the backend initialization was successful.\n *\n * Note this disposes the current backend, if any, as well as any tensors\n * associated with it. A new backend is initialized, even if it is of the\n * same type as the previous one.\n *\n * @param backendName The name of the backend. Currently supports\n *     `'webgl'|'cpu'` in the browser, `'tensorflow'` under node.js\n *     (requires tfjs-node), and `'wasm'` (requires tfjs-backend-wasm).\n */\n/** @doc {heading: 'Backends'} */\nexport function setBackend(backendName: string): Promise<boolean> {\n  return ENGINE.setBackend(backendName);\n}\n\n/**\n * Returns a promise that resolves when the currently selected backend (or the\n * highest priority one) has initialized. Await this promise when you are using\n * a backend that has async initialization.\n */\n/** @doc {heading: 'Backends'} */\nexport function ready(): Promise<void> {\n  return ENGINE.ready();\n}\n\n/**\n * Returns the current backend name (cpu, webgl, etc). The backend is\n * responsible for creating tensors and executing operations on those tensors.\n */\n/** @doc {heading: 'Backends'} */\nexport function getBackend(): string {\n  return ENGINE.backendName;\n}\n\n/**\n * Removes a backend and the registered factory.\n */\n/** @doc {heading: 'Backends'} */\nexport function removeBackend(name: string): void {\n  ENGINE.removeBackend(name);\n}\n\n/**\n * Finds the backend registered under the provided name. Returns null if the\n * name is not in the registry, or the registration hasn't finished yet.\n */\nexport function findBackend(name: string): KernelBackend {\n  return ENGINE.findBackend(name);\n}\n\n/**\n * Finds the backend factory registered under the provided name. Returns a\n * function that produces a new backend when called. Returns null if the name\n * is not in the registry.\n */\nexport function findBackendFactory(name: string): () =>\n    KernelBackend | Promise<KernelBackend> {\n  return ENGINE.findBackendFactory(name);\n}\n\n/**\n * Registers a global backend. The registration should happen when importing\n * a module file (e.g. when importing `backend_webgl.ts`), and is used for\n * modular builds (e.g. custom tfjs bundle with only webgl support).\n *\n * @param factory The backend factory function. When called, it should\n * return a backend instance, or a promise of an instance.\n * @param priority The priority of the backend (higher = more important).\n *     In case multiple backends are registered, the priority is used to find\n *     the best backend. Defaults to 1.\n * @return False if there is already a registered backend under this name, true\n *     if not.\n */\n/** @doc {heading: 'Backends'} */\nexport function registerBackend(\n    name: string, factory: () => KernelBackend | Promise<KernelBackend>,\n    priority = 1): boolean {\n  return ENGINE.registerBackend(name, factory, priority);\n}\n\n/**\n * Gets the current backend. If no backends have been initialized, this will\n * attempt to initialize the best backend. Will throw an error if the highest\n * priority backend has async initialization, in which case, you should call\n * 'await tf.ready()' before running other code.\n */\n/** @doc {heading: 'Backends'} */\nexport function backend(): KernelBackend {\n  return ENGINE.backend;\n}\n\n/**\n * Sets the global platform.\n *\n * @param platformName The name of this platform.\n * @param platform A platform implementation.\n */\nexport function setPlatform(platformName: string, platform: Platform) {\n  env().setPlatform(platformName, platform);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from './environment';\n\nexport function warn(...msg: Array<{}>): void {\n  if (!env().getBool('IS_TEST')) {\n    console.warn(...msg);\n  }\n}\n\nexport function log(...msg: Array<{}>): void {\n  if (!env().getBool('IS_TEST')) {\n    console.log(...msg);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from './engine';\nimport {env} from './environment';\nimport {Tensor} from './tensor';\nimport {DataType, TensorLike} from './types';\nimport {assert, flatten, inferDtype, isTypedArray, toTypedArray} from './util';\n\nexport function inferShape(val: TensorLike, dtype?: DataType): number[] {\n  let firstElem: typeof val = val;\n\n  if (isTypedArray(val)) {\n    return dtype === 'string' ? [] : [val.length];\n  }\n  if (!Array.isArray(val)) {\n    return [];  // Scalar.\n  }\n  const shape: number[] = [];\n\n  while (Array.isArray(firstElem) ||\n         isTypedArray(firstElem) && dtype !== 'string') {\n    shape.push(firstElem.length);\n    firstElem = firstElem[0];\n  }\n  if (Array.isArray(val) &&\n      env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')) {\n    deepAssertShapeConsistency(val, shape, []);\n  }\n\n  return shape;\n}\n\nfunction deepAssertShapeConsistency(\n    val: TensorLike, shape: number[], indices: number[]) {\n  indices = indices || [];\n  if (!(Array.isArray(val)) && !isTypedArray(val)) {\n    assert(\n        shape.length === 0,\n        () => `Element arr[${indices.join('][')}] is a primitive, ` +\n            `but should be an array/TypedArray of ${shape[0]} elements`);\n    return;\n  }\n  assert(\n      shape.length > 0,\n      () => `Element arr[${indices.join('][')}] should be a primitive, ` +\n          `but is an array of ${val.length} elements`);\n  assert(\n      val.length === shape[0],\n      () => `Element arr[${indices.join('][')}] should have ${shape[0]} ` +\n          `elements, but has ${val.length} elements`);\n  const subShape = shape.slice(1);\n  for (let i = 0; i < val.length; ++i) {\n    deepAssertShapeConsistency(val[i], subShape, indices.concat(i));\n  }\n}\n\nfunction assertDtype(\n    expectedDtype: DataType|'numeric', actualDType: DataType, argName: string,\n    functionName: string) {\n  if (expectedDtype == null) {\n    return;\n  }\n  if (expectedDtype !== 'numeric' && expectedDtype !== actualDType ||\n      expectedDtype === 'numeric' && actualDType === 'string') {\n    throw new Error(\n        `Argument '${argName}' passed to '${functionName}' must ` +\n        `be ${expectedDtype} tensor, but got ${actualDType} tensor`);\n  }\n}\n\nexport function convertToTensor<T extends Tensor>(\n    x: T|TensorLike, argName: string, functionName: string,\n    parseAsDtype: DataType|'numeric' = 'numeric'): T {\n  if (x instanceof Tensor) {\n    assertDtype(parseAsDtype, x.dtype, argName, functionName);\n    return x;\n  }\n  let inferredDtype = inferDtype(x);\n  // If the user expects a bool/int/float, use that info to update the\n  // inferredDtype when it is not a string.\n  if (inferredDtype !== 'string' &&\n      ['bool', 'int32', 'float32'].indexOf(parseAsDtype) >= 0) {\n    inferredDtype = parseAsDtype as DataType;\n  }\n  assertDtype(parseAsDtype, inferredDtype, argName, functionName);\n\n  if ((x == null) ||\n      (!isTypedArray(x) && !Array.isArray(x) && typeof x !== 'number' &&\n       typeof x !== 'boolean' && typeof x !== 'string')) {\n    const type = x == null ? 'null' : (x as {}).constructor.name;\n    throw new Error(\n        `Argument '${argName}' passed to '${functionName}' must be a ` +\n        `Tensor or TensorLike, but got '${type}'`);\n  }\n  const inferredShape = inferShape(x, inferredDtype);\n  if (!isTypedArray(x) && !Array.isArray(x)) {\n    x = [x] as number[];\n  }\n  const skipTypedArray = true;\n  const values = inferredDtype !== 'string' ?\n      toTypedArray(x, inferredDtype as DataType, env().getBool('DEBUG')) :\n      flatten(x as string[], [], skipTypedArray) as string[];\n  return ENGINE.makeTensor(values, inferredShape, inferredDtype) as T;\n}\n\nexport function convertToTensorArray<T extends Tensor>(\n    arg: Array<T|TensorLike>, argName: string, functionName: string,\n    parseAsDtype: DataType|'numeric' = 'numeric'): T[] {\n  if (!Array.isArray(arg)) {\n    throw new Error(\n        `Argument ${argName} passed to ${functionName} must be a ` +\n        '`Tensor[]` or `TensorLike[]`');\n  }\n  const tensors = arg as T[];\n  return tensors.map(\n      (t, i) => convertToTensor(t, `${argName}[${i}]`, functionName),\n      parseAsDtype);\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as util from '../util';\n\n/**\n * Returns true if the axis specifies the inner most dimensions of the\n * array.\n */\nexport function axesAreInnerMostDims(axes: number[], rank: number): boolean {\n  for (let i = 0; i < axes.length; ++i) {\n    if (axes[axes.length - i - 1] !== rank - 1 - i) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function combineLocations(\n    outputLoc: number[], reduceLoc: number[], axes: number[]): number[] {\n  const rank = outputLoc.length + reduceLoc.length;\n  const loc = [];\n  let outIdx = 0;\n  let reduceIdx = 0;\n    for (let dim = 0; dim < rank; dim++) {\n    if (axes.indexOf(dim) === -1) {\n      loc.push(outputLoc[outIdx++]);\n    } else {\n      loc.push(reduceLoc[reduceIdx++]);\n    }\n  }\n  return loc;\n}\n\nexport function computeOutAndReduceShapes(\n    aShape: number[], axes: number[]): [number[], number[]] {\n  const outShape = [];\n  const rank = aShape.length;\n  for (let dim = 0; dim < rank; dim++) {\n    if (axes.indexOf(dim) === -1) {\n      outShape.push(aShape[dim]);\n    }\n  }\n  const reduceShape = axes.map(dim => aShape[dim]);\n  return [outShape, reduceShape];\n}\n\nexport function expandShapeToKeepDim(\n    shape: number[], axes: number[]): number[] {\n  const reduceSubShape = axes.map(x => 1);\n  return combineLocations(shape, reduceSubShape, axes);\n}\n\nexport function assertAxesAreInnerMostDims(\n    msg: string, axes: number[], rank: number): void {\n  util.assert(\n      axesAreInnerMostDims(axes, rank),\n      () => `${msg} supports only inner-most axes for now. ` +\n          `Got axes ${axes} and rank-${rank} input.`);\n}\n\n/**\n * Returns the axes permutation to be used with `tf.transpose`, if such\n * permutation is necessary. Otherwise it returns null. This method is used by\n * operations that operate only on inner-most axes.\n */\nexport function getAxesPermutation(axes: number[], rank: number): number[]|\n    null {\n  if (axesAreInnerMostDims(axes, rank)) {\n    return null;\n  }\n  const result: number[] = [];\n  for (let i = 0; i < rank; ++i) {\n    if (axes.indexOf(i) === -1) {\n      result.push(i);\n    }\n  }\n  axes.forEach(axis => result.push(axis));\n  return result;\n}\n\n/** Returns the axes permutation that undoes the original permutation. */\nexport function getUndoAxesPermutation(axes: number[]): number[] {\n  return axes.map((axis, i) => [i, axis])\n      .sort((a, b) => a[1] - b[1])\n      .map(x => x[0]);\n}\n\nexport function getInnerMostAxes(numAxes: number, rank: number): number[] {\n  const res: number[] = [];\n  for (let i = rank - numAxes; i < rank; ++i) {\n    res.push(i);\n  }\n  return res;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as util from '../util';\n\nexport function assertParamsConsistent(shapes: number[][], axis: number) {\n  const rank = shapes[0].length;\n  shapes.forEach((shape, i) => {\n    util.assert(\n        shape.length === rank,\n        () =>\n            `Error in concat${rank}D: rank of tensors[${i}] must be the same ` +\n            `as the rank of the rest (${rank})`);\n  });\n\n  util.assert(\n      axis >= 0 && axis < rank,\n      () => `Error in concat${rank}D: axis must be between 0 and ${rank - 1}.`);\n\n  const firstShape = shapes[0];\n  shapes.forEach((shape, i) => {\n    for (let r = 0; r < rank; r++) {\n      util.assert(\n          (r === axis) || (shape[r] === firstShape[r]),\n          () => `Error in concat${rank}D: Shape of tensors[${i}] (${shape}) ` +\n              `does not match the shape of the rest (${firstShape}) ` +\n              `along the non-concatenated axis ${i}.`);\n    }\n  });\n}\n\nexport function computeOutShape(shapes: number[][], axis: number): number[] {\n  const outputShape = shapes[0].slice();\n  for (let i = 1; i < shapes.length; i++) {\n    outputShape[axis] += shapes[i][axis];\n  }\n  return outputShape;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {ENGINE} from '../engine';\n\n/**\n * Used for wrapping functions that perform math operations on\n * Tensors. The function will be wrapped in a named scope that cleans all\n * memory usage after the function is done.\n */\nexport function op<T extends Function>(f: {[name: string]: T}): T {\n  const keys = Object.keys(f);\n  if (keys.length !== 1) {\n    throw new Error(\n        `Please provide an object with a single key ` +\n        `(operation name) mapping to a function. Got an object with ` +\n        `${keys.length} keys.`);\n  }\n\n  let opName = keys[0];\n  const fn = f[opName];\n\n  // Strip the underscore from the end of the function name.\n  if (opName.endsWith('_')) {\n    opName = opName.substring(0, opName.length - 1);\n  }\n\n  // tslint:disable-next-line:no-any\n  const f2 = (...args: any[]) => {\n    ENGINE.startScope(opName);\n    try {\n      const result = fn(...args);\n      if (result instanceof Promise) {\n        console.error('Cannot return a Promise inside of tidy.');\n      }\n      ENGINE.endScope(result);\n      return result;\n    } catch (ex) {\n      ENGINE.endScope(null);\n      throw ex;\n    }\n  };\n  Object.defineProperty(f2, 'name', {value: opName, configurable: true});\n\n  // tslint:disable-next-line:no-any\n  return f2 as any as T;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {op} from './operation';\n\n/**\n * Converts two real numbers to a complex number.\n *\n * Given a tensor `real` representing the real part of a complex number, and a\n * tensor `imag` representing the imaginary part of a complex number, this\n * operation returns complex numbers elementwise of the form [r0, i0, r1, i1],\n * where r represents the real part and i represents the imag part.\n *\n * The input tensors real and imag must have the same shape.\n *\n * ```js\n * const real = tf.tensor1d([2.25, 3.25]);\n * const imag = tf.tensor1d([4.75, 5.75]);\n * const complex = tf.complex(real, imag);\n *\n * complex.print();\n * ```\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction complex_<T extends Tensor>(real: T|TensorLike, imag: T|TensorLike): T {\n  const $real = convertToTensor(real, 'real', 'complex');\n  const $imag = convertToTensor(imag, 'imag', 'complex');\n  util.assertShapesMatch(\n      $real.shape, $imag.shape,\n      `real and imag shapes, ${$real.shape} and ${$imag.shape}, ` +\n          `must match in call to tf.complex().`);\n\n  return ENGINE.runKernelFunc(\n      backend => backend.complex($real, $imag), {$real, $imag});\n}\n\n/**\n * Returns the real part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the real part of each element in input considered as a complex number.\n *\n * If the input is real, it simply makes a clone.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.real(x).print();\n * ```\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction real_<T extends Tensor>(input: T|TensorLike): T {\n  const $input = convertToTensor(input, 'input', 'real');\n\n  return ENGINE.runKernelFunc(backend => backend.real($input), {$input});\n}\n\n/**\n * Returns the imaginary part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the imaginary part of each element in input considered as a complex number.\n * If input is real, a tensor of all zeros is returned.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.imag(x).print();\n * ```\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction imag_<T extends Tensor>(input: T|TensorLike): T {\n  const $input = convertToTensor(input, 'input', 'imag');\n\n  return ENGINE.runKernelFunc(backend => backend.imag($input), {$input});\n}\n\nexport const complex = op({complex_});\nexport const real = op({real_});\nexport const imag = op({imag_});\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {env} from '../environment';\n\nimport {Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, Tensor6D, Variable} from '../tensor';\nimport {convertToTensor, inferShape} from '../tensor_util_env';\nimport {TensorLike, TensorLike1D, TensorLike2D, TensorLike3D, TensorLike4D, TensorLike5D, TensorLike6D, TypedArray} from '../types';\nimport {DataType, Rank, ShapeMap} from '../types';\nimport {assert, assertNonNegativeIntegerDimensions, assertNonNull, flatten, inferDtype, isTypedArray, makeOnesTypedArray, makeZerosTypedArray, sizeFromShape, toTypedArray} from '../util';\nimport {complex, imag, real} from './complex_ops';\nimport {op} from './operation';\n\n/**\n * Creates a `tf.Tensor` with the provided values, shape and dtype.\n *\n * ```js\n * // Pass an array of values to create a vector.\n * tf.tensor([1, 2, 3, 4]).print();\n * ```\n *\n * ```js\n * // Pass a nested array of values to make a matrix or a higher\n * // dimensional tensor.\n * tf.tensor([[1, 2], [3, 4]]).print();\n * ```\n *\n * ```js\n * // Pass a flat array and specify a shape yourself.\n * tf.tensor([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`. If the values are strings,\n *     they will be encoded as utf-8 and kept as `Uint8Array[]`.\n * @param shape The shape of the tensor. Optional. If not provided,\n *   it is inferred from `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor<R extends Rank>(\n    values: TensorLike, shape?: ShapeMap[R], dtype?: DataType): Tensor<R> {\n  const inferredShape = inferShape(values, dtype);\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor<R>;\n}\n\n/** This is shared code across all tensor creation methods. */\nfunction makeTensor(\n    values: TensorLike, shape: number[], inferredShape: number[],\n    dtype?: DataType): Tensor {\n  if (dtype == null) {\n    dtype = inferDtype(values);\n  }\n  if (dtype === 'complex64') {\n    throw new Error(\n        `Cannot construct a complex64 tensor directly. ` +\n        `Please use tf.complex(real, imag).`);\n  }\n  if (!isTypedArray(values) && !Array.isArray(values) &&\n      typeof values !== 'number' && typeof values !== 'boolean' &&\n      typeof values !== 'string') {\n    throw new Error(\n        'values passed to tensor(values) must be a number/boolean/string or ' +\n        'an array of numbers/booleans/strings, or a TypedArray');\n  }\n  if (shape != null) {\n    assertNonNegativeIntegerDimensions(shape);\n\n    const providedSize = sizeFromShape(shape);\n    const inferredSize = sizeFromShape(inferredShape);\n    assert(\n        providedSize === inferredSize,\n        () =>\n            `Based on the provided shape, [${shape}], the tensor should have ` +\n            `${providedSize} values but has ${inferredSize}`);\n\n    for (let i = 0; i < inferredShape.length; ++i) {\n      const inferred = inferredShape[i];\n      const flatDimsDontMatch = i === inferredShape.length - 1 ?\n          inferred !== sizeFromShape(shape.slice(i)) :\n          true;\n      assert(\n          inferredShape[i] === shape[i] || !flatDimsDontMatch,\n          () => `Error creating a new Tensor. Inferred shape ` +\n              `(${inferredShape}) does not match the provided ` +\n              `shape (${shape}). `);\n    }\n  }\n\n  if (!isTypedArray(values) && !Array.isArray(values)) {\n    values = [values] as number[];\n  }\n\n  shape = shape || inferredShape;\n  values = dtype !== 'string' ?\n      toTypedArray(values, dtype, env().getBool('DEBUG')) :\n      flatten(values as string[], [], true) as string[];\n  return ENGINE.makeTensor(values as TypedArray, shape, dtype);\n}\n\n/**\n * Creates rank-0 `tf.Tensor` (scalar) with the provided value and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.scalar` as it makes the code more readable.\n *\n * ```js\n * tf.scalar(3.14).print();\n * ```\n *\n * @param value The value of the scalar.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction scalar(\n    value: number|boolean|string|Uint8Array, dtype?: DataType): Scalar {\n  if (((isTypedArray(value) && dtype !== 'string') || Array.isArray(value)) &&\n      dtype !== 'complex64') {\n    throw new Error(\n        'Error creating a new Scalar: value must be a primitive ' +\n        '(number|boolean|string)');\n  }\n  if (dtype === 'string' && isTypedArray(value) &&\n      !(value instanceof Uint8Array)) {\n    throw new Error(\n        'When making a scalar from encoded string, ' +\n        'the value must be `Uint8Array`.');\n  }\n  const shape: number[] = [];\n  const inferredShape: number[] = [];\n  return makeTensor(value, shape, inferredShape, dtype) as Scalar;\n}\n\n/**\n * Creates rank-1 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor1d` as it makes the code more readable.\n *\n * ```js\n * tf.tensor1d([1, 2, 3]).print();\n * ```\n *\n * @param values The values of the tensor. Can be array of numbers,\n *     or a `TypedArray`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor1d(values: TensorLike1D, dtype?: DataType): Tensor1D {\n  assertNonNull(values);\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 1) {\n    throw new Error('tensor1d() requires values to be a flat/TypedArray');\n  }\n  const shape: number[] = null;\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor1D;\n}\n\n/**\n * Creates rank-2 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor2d` as it makes the code more readable.\n *\n *  ```js\n * // Pass a nested array.\n * tf.tensor2d([[1, 2], [3, 4]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n *     `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor2d(\n    values: TensorLike2D, shape?: [number, number],\n    dtype?: DataType): Tensor2D {\n  assertNonNull(values);\n  if (shape != null && shape.length !== 2) {\n    throw new Error('tensor2d() requires shape to have two numbers');\n  }\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 2 && inferredShape.length !== 1) {\n    throw new Error(\n        'tensor2d() requires values to be number[][] or flat/TypedArray');\n  }\n  if (inferredShape.length === 1 && shape == null) {\n    throw new Error(\n        'tensor2d() requires shape to be provided when `values` ' +\n        'are a flat/TypedArray');\n  }\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor2D;\n}\n\n/**\n * Creates rank-3 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor3d` as it makes the code more readable.\n *\n *  ```js\n * // Pass a nested array.\n * tf.tensor3d([[[1], [2]], [[3], [4]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor3d([1, 2, 3, 4], [2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided,  it is inferred from\n *     `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor3d(\n    values: TensorLike3D, shape?: [number, number, number],\n    dtype?: DataType): Tensor3D {\n  assertNonNull(values);\n  if (shape != null && shape.length !== 3) {\n    throw new Error('tensor3d() requires shape to have three numbers');\n  }\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 3 && inferredShape.length !== 1) {\n    throw new Error(\n        'tensor3d() requires values to be number[][][] or flat/TypedArray');\n  }\n  if (inferredShape.length === 1 && shape == null) {\n    throw new Error(\n        'tensor3d() requires shape to be provided when `values` ' +\n        'are a flat array');\n  }\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor3D;\n}\n\n/**\n * Creates rank-4 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor4d` as it makes the code more readable.\n *\n *  ```js\n * // Pass a nested array.\n * tf.tensor4d([[[[1], [2]], [[3], [4]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n *   it is inferred from `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor4d(\n    values: TensorLike4D, shape?: [number, number, number, number],\n    dtype?: DataType): Tensor4D {\n  assertNonNull(values);\n  if (shape != null && shape.length !== 4) {\n    throw new Error('tensor4d() requires shape to have four numbers');\n  }\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 4 && inferredShape.length !== 1) {\n    throw new Error(\n        'tensor4d() requires values to be number[][][][] or flat/TypedArray');\n  }\n  if (inferredShape.length === 1 && shape == null) {\n    throw new Error(\n        'tensor4d() requires shape to be provided when `values` ' +\n        'are a flat array');\n  }\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor4D;\n}\n\n/**\n * Creates rank-5 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor5d` as it makes the code more readable.\n *\n *  ```js\n * // Pass a nested array.\n * tf.tensor5d([[[[[1], [2]], [[3], [4]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n *   it is inferred from `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor5d(\n    values: TensorLike5D, shape?: [number, number, number, number, number],\n    dtype?: DataType): Tensor5D {\n  assertNonNull(values);\n  if (shape != null && shape.length !== 5) {\n    throw new Error('tensor5d() requires shape to have five numbers');\n  }\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 5 && inferredShape.length !== 1) {\n    throw new Error(\n        'tensor5d() requires values to be ' +\n        'number[][][][][] or flat/TypedArray');\n  }\n  if (inferredShape.length === 1 && shape == null) {\n    throw new Error(\n        'tensor5d() requires shape to be provided when `values` ' +\n        'are a flat array');\n  }\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor5D;\n}\n\n/**\n * Creates rank-6 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor6d` as it makes the code more readable.\n *\n *  ```js\n * // Pass a nested array.\n * tf.tensor6d([[[[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor6d([1, 2, 3, 4, 5, 6, 7, 8], [1, 1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n *     or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n *   it is inferred from `values`.\n * @param dtype The data type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction tensor6d(\n    values: TensorLike6D,\n    shape?: [number, number, number, number, number, number],\n    dtype?: DataType): Tensor6D {\n  assertNonNull(values);\n  if (shape != null && shape.length !== 6) {\n    throw new Error('tensor6d() requires shape to have six numbers');\n  }\n  const inferredShape = inferShape(values, dtype);\n  if (inferredShape.length !== 6 && inferredShape.length !== 1) {\n    throw new Error(\n        'tensor6d() requires values to be number[][][][][][] or ' +\n        'flat/TypedArray');\n  }\n  if (inferredShape.length === 1 && shape == null) {\n    throw new Error(\n        'tensor6d() requires shape to be provided when `values` ' +\n        'are a flat array');\n  }\n  shape = shape ||\n      inferredShape as [number, number, number, number, number, number];\n  return makeTensor(values, shape, inferredShape, dtype) as Tensor6D;\n}\n\n/**\n * Creates a new variable with the provided initial value.\n * ```js\n * const x = tf.variable(tf.tensor([1, 2, 3]));\n * x.assign(tf.tensor([4, 5, 6]));\n *\n * x.print();\n * ```\n *\n * @param initialValue Initial value for the tensor.\n * @param trainable If true, optimizers are allowed to update it.\n * @param name Name of the variable. Defaults to a unique id.\n * @param dtype If set, initialValue will be converted to the given type.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction variable<R extends Rank>(\n    initialValue: Tensor<R>, trainable = true, name?: string,\n    dtype?: DataType): Variable<R> {\n  return ENGINE.makeVariable(initialValue, trainable, name, dtype) as\n      Variable<R>;\n}\n\n/**\n * Creates a `tf.Tensor` with all elements set to 1.\n *\n * ```js\n * tf.ones([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n *     'float'.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction ones<R extends Rank>(\n    shape: ShapeMap[R], dtype: DataType = 'float32'): Tensor<R> {\n  if (dtype === 'complex64') {\n    const real = ones(shape, 'float32');\n    const imag = zeros(shape, 'float32');\n    return complex(real, imag);\n  }\n  const values = makeOnesTypedArray(sizeFromShape(shape), dtype);\n  return ENGINE.makeTensor(values, shape, dtype) as Tensor<R>;\n}\n\n/**\n * Creates a `tf.Tensor` with all elements set to 0.\n *\n * ```js\n * tf.zeros([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Can\n *     be 'float32', 'int32' or 'bool'. Defaults to 'float'.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction zeros<R extends Rank>(\n    shape: ShapeMap[R], dtype: DataType = 'float32'): Tensor<R> {\n  if (dtype === 'complex64') {\n    const real = zeros(shape, 'float32');\n    const imag = zeros(shape, 'float32');\n    return complex(real, imag);\n  }\n  const values = makeZerosTypedArray(sizeFromShape(shape), dtype);\n  return ENGINE.makeTensor(values, shape, dtype) as Tensor<R>;\n}\n\n/**\n * Creates a `tf.Tensor` filled with a scalar value.\n *\n * ```js\n * tf.fill([2, 2], 4).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param value The scalar value to fill the tensor with.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n * 'float'.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction fill<R extends Rank>(\n    shape: ShapeMap[R], value: number|string, dtype?: DataType): Tensor<R> {\n  return ENGINE.runKernelFunc(backend => backend.fill(shape, value, dtype), {});\n}\n\n/**\n * Creates a `tf.Tensor` with all elements set to 1 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.onesLike(x).print();\n * ```\n * @param x A tensor.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction onesLike_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'onesLike');\n  if ($x.dtype === 'complex64') {\n    const r = onesLike(real($x));\n    const i = zerosLike(imag($x));\n    return complex(r, i);\n  }\n  const der = (dy: T, saved: Tensor[]) => ({x: () => zerosLike(dy)});\n  return ENGINE.runKernelFunc(\n             backend => backend.onesLike($x), {x: $x}, der, 'OnesLike') as T;\n}\n\n/**\n * Creates a `tf.Tensor` with all elements set to 0 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.zerosLike(x).print();\n * ```\n *\n * @param x The tensor of required shape.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction zerosLike_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'zerosLike');\n  const der = (dy: T, saved: Tensor[]) => ({x: () => zerosLike(dy)});\n  return ENGINE.runKernelFunc(\n             backend => backend.zerosLike($x), {x: $x}, der, 'ZerosLike') as T;\n}\n\n/**\n * Return an evenly spaced sequence of numbers over the given interval.\n *\n * ```js\n * tf.linspace(0, 9, 10).print();\n * ```\n * @param start The start value of the sequence.\n * @param stop The end value of the sequence.\n * @param num The number of values to generate.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction linspace(start: number, stop: number, num: number): Tensor1D {\n  if (num <= 0) {\n    throw new Error('The number of values should be positive.');\n  }\n  return ENGINE.runKernelFunc(\n      backend => backend.linspace(start, stop, num), {});\n}\n\n/**\n * Creates a new `tf.Tensor1D` filled with the numbers in the range provided.\n *\n * The tensor is a is half-open interval meaning it includes start, but\n * excludes stop. Decrementing ranges and negative step values are also\n * supported.\n *\n * ```js\n * tf.range(0, 9, 2).print();\n * ```\n *\n * @param start An integer start value\n * @param stop An integer stop value\n * @param step An integer increment (will default to 1 or -1)\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction range(\n    start: number, stop: number, step = 1,\n    dtype: 'float32'|'int32' = 'float32'): Tensor1D {\n  if (step === 0) {\n    throw new Error('Cannot have a step of zero');\n  }\n\n  const sameStartStop = start === stop;\n  const increasingRangeNegativeStep = start < stop && step < 0;\n  const decreasingRangePositiveStep = stop < start && step > 1;\n\n  if (sameStartStop || increasingRangeNegativeStep ||\n      decreasingRangePositiveStep) {\n    return zeros([0], dtype);\n  }\n\n  const numElements = Math.abs(Math.ceil((stop - start) / step));\n  const values = makeZerosTypedArray(numElements, dtype);\n\n  if (stop < start && step === 1) {\n    // Auto adjust the step's sign if it hasn't been set\n    // (or was set to 1)\n    step = -1;\n  }\n\n  values[0] = start;\n  for (let i = 1; i < values.length; i++) {\n    values[i] = values[i - 1] + step;\n  }\n\n  return tensor1d(values, dtype);\n}\n\nexport {\n  fill,\n  linspace,\n  ones,\n  range,\n  scalar,\n  tensor,\n  tensor1d,\n  tensor2d,\n  tensor3d,\n  tensor4d,\n  tensor5d,\n  tensor6d,\n  variable,\n  zeros\n};\n\nexport const onesLike = op({onesLike_});\nexport const zerosLike = op({zerosLike_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D} from '../tensor';\nimport {convertToTensor, convertToTensorArray} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assert, sizeFromShape} from '../util';\nimport {parseAxisParam} from '../util';\nimport {assertParamsConsistent, computeOutShape} from './concat_util';\nimport {op} from './operation';\nimport {tensor} from './tensor_ops';\n\n/**\n * Concatenates a list of`tf.Tensor1D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(3) = |r1, g1, b1|\n * B: shape(2) = |r2, g2|\n * C = tf.concat1d([A, B]) == |r1, g1, b1, r2, g2|\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @return The concatenated array.\n */\nfunction concat1d_(tensors: Array<Tensor1D|TensorLike>): Tensor1D {\n  return concat(tensors, 0 /* axis */);\n}\n\n/**\n * Concatenates a list of`tf.Tensor2D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 3) = | r1, g1, b1 |\n *                  | r2, g2, b2 |\n *\n * B: shape(2, 3) = | r3, g3, b3 |\n *                  | r4, g4, b4 |\n *\n * C = tf.concat2d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 3) = | r1, g1, b1 |\n *                  | r2, g2, b2 |\n *                  | r3, g3, b3 |\n *                  | r4, g4, b4 |\n *\n * if axis = 1:\n * C = shape(2, 6) = | r1, g1, b1, r3, g3, b3 |\n *                   | r2, g2, b2, r4, g4, b4 |\n *\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concatenate along.\n * @return The concatenated array.\n */\nfunction concat2d_(\n    tensors: Array<Tensor2D|TensorLike>, axis: number): Tensor2D {\n  return concat(tensors, axis);\n}\n\n/**\n * Concatenates a list of `tf.Tensor3D`s along an axis.\n * See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 1, 3) = | r1, g1, b1 |\n *                     | r2, g2, b2 |\n *\n * B: shape(2, 1, 3) = | r3, g3, b3 |\n *                     | r4, g4, b4 |\n *\n * C = tf.concat3d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 1, 3) = | r1, g1, b1 |\n *                     | r2, g2, b2 |\n *                     | r3, g3, b3 |\n *                     | r4, g4, b4 |\n *\n * if axis = 1:\n * C: shape(2, 2, 3) = | r1, g1, b1, r3, g3, b3 |\n *                     | r2, g2, b2, r4, g4, b4 |\n *\n * if axis = 2:\n * C = shape(2, 1, 6) = | r1, g1, b1, r3, g3, b3 |\n *                      | r2, g2, b2, r4, g4, b4 |\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat3d_(\n    tensors: Array<Tensor3D|TensorLike>, axis: number): Tensor3D {\n  return concat(tensors, axis);\n}\n\n/**\n * Concatenates a list of `tf.Tensor4D`s along an axis.\n * See `concat` for details.\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat4d_(\n    tensors: Array<Tensor4D|TensorLike>, axis: number): Tensor4D {\n  return concat(tensors, axis);\n}\n\n/**\n * Concatenates a list of `tf.Tensor`s along a given axis.\n *\n * The tensors ranks and types must match, and their sizes must match in all\n * dimensions except `axis`.\n *\n * Also available are stricter rank-specific methods that assert that\n * `tensors` are of the given rank:\n *   - `tf.concat1d`\n *   - `tf.concat2d`\n *   - `tf.concat3d`\n *   - `tf.concat4d`\n *\n * Except `tf.concat1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * a.concat(b).print();  // or a.concat(b)\n * ```\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.concat([a, b, c]).print();\n * ```\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [10, 20]]);\n * const b = tf.tensor2d([[3, 4], [30, 40]]);\n * const axis = 1;\n * tf.concat([a, b], axis).print();\n * ```\n * @param tensors A list of tensors to concatenate.\n * @param axis The axis to concate along. Defaults to 0 (the first dim).\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction concat_<T extends Tensor>(tensors: Array<T|TensorLike>, axis = 0): T {\n  assert(tensors.length >= 1, () => 'Pass at least one tensor to concat');\n  let $tensors = convertToTensorArray(tensors, 'tensors', 'concat');\n  if ($tensors[0].dtype === 'complex64') {\n    $tensors.forEach(tensor => {\n      if (tensor.dtype !== 'complex64') {\n        throw new Error(`Cannot concatenate complex64 tensors with a tensor\n          with dtype ${tensor.dtype}. `);\n      }\n    });\n  }\n\n  axis = parseAxisParam(axis, $tensors[0].shape)[0];\n  const outShape = computeOutShape($tensors.map(t => t.shape), axis);\n  if (sizeFromShape(outShape) === 0) {\n    return tensor([], outShape) as T;\n  }\n  // Keep only non-empty tensors (ignore tensors with 0 in their shape).\n  $tensors = $tensors.filter(t => t.size > 0);\n  if ($tensors.length === 1) {\n    return $tensors[0];\n  }\n\n  const shapes = $tensors.map(t => t.shape);\n  assertParamsConsistent(shapes, axis);\n  const der = (dy: T) => {\n    const sizeSplits = shapes.map(s => s[axis]);\n    const derTensors = split(dy, sizeSplits, axis);\n    return derTensors.map(t => () => t) as {};\n  };\n  const inputs = $tensors as {};\n  const attr = {axis};\n  return ENGINE.runKernelFunc(\n      backend => backend.concat($tensors, axis) as T, inputs, der, 'Concat',\n      attr);\n}\n\n/**\n * Splits a `tf.Tensor` into sub tensors.\n *\n * If `numOrSizeSplits` is a number, splits `x` along dimension `axis`\n * into `numOrSizeSplits` smaller tensors.\n * Requires that `numOrSizeSplits` evenly divides `x.shape[axis]`.\n *\n * If `numOrSizeSplits` is a number array, splits `x` into\n * `numOrSizeSplits.length` pieces. The shape of the `i`-th piece has the\n * same size as `x` except along dimension `axis` where the size is\n * `numOrSizeSplits[i]`.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [2, 4]);\n * const [a, b] = tf.split(x, 2, 1);\n * a.print();\n * b.print();\n *\n * const [c, d, e] = tf.split(x, [1, 2, 1], 1);\n * c.print();\n * d.print();\n * e.print();\n * ```\n *\n * @param x The input tensor to split.\n * @param numOrSizeSplits Either an integer indicating the number of\n * splits along the axis or an array of integers containing the sizes of\n * each output tensor along the axis. If a number then it must evenly divide\n * `x.shape[axis]`; otherwise the sum of sizes must match `x.shape[axis]`.\n * @param axis The dimension along which to split. Defaults to 0 (the first\n * dim).\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction split_<T extends Tensor>(\n    x: T|TensorLike, numOrSizeSplits: number[]|number, axis = 0): T[] {\n  const $x = convertToTensor(x, 'x', 'split');\n\n  axis = parseAxisParam(axis, $x.shape)[0];\n  let splitSizes: number[];\n  if (typeof (numOrSizeSplits) === 'number') {\n    assert(\n        $x.shape[axis] % numOrSizeSplits === 0,\n        () => 'Number of splits must evenly divide the axis.');\n    splitSizes =\n        new Array(numOrSizeSplits).fill($x.shape[axis] / numOrSizeSplits);\n  } else {\n    assert(\n        $x.shape[axis] === numOrSizeSplits.reduce((a, b) => a + b),\n        () => 'The sum of sizes must match the size of the axis dimension.');\n    splitSizes = numOrSizeSplits;\n  }\n  const der = (dy: T[]) => ({$x: () => concat(dy, axis)});\n  return ENGINE.runKernelFunc(\n      backend => backend.split($x, splitSizes, axis), {$x}, der);\n}\n\nexport const concat = op({concat_});\nexport const concat1d = op({concat1d_});\nexport const concat2d = op({concat2d_});\nexport const concat3d = op({concat3d_});\nexport const concat4d = op({concat4d_});\nexport const split = op({split_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor4D, TensorBuffer} from '../tensor';\nimport {convertToTensor, convertToTensorArray} from '../tensor_util_env';\nimport {DataType, DataTypeMap, Rank, ShapeMap, TensorLike, TensorLike4D} from '../types';\nimport * as util from '../util';\nimport {getAxesPermutation, getInnerMostAxes} from './axis_util';\nimport {concat} from './concat_split';\nimport {op} from './operation';\n\n/**\n * Reshapes a `tf.Tensor` to a given shape.\n *\n * Given an input tensor, returns a new tensor with the same values as the\n * input tensor with shape `shape`.\n *\n * If one component of shape is the special value -1, the size of that\n * dimension is computed so that the total size remains constant. In\n * particular, a shape of [-1] flattens into 1-D. At most one component of\n * shape can be -1.\n *\n * If shape is 1-D or higher, then the operation returns a tensor with shape\n * shape filled with the values of tensor. In this case, the number of\n * elements implied by shape must be the same as the number of elements in\n * tensor.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.reshape([2, 2]).print();\n * ```\n *\n * @param x The input tensor to be reshaped.\n * @param shape An array of integers defining the output tensor shape.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction reshape_<R2 extends Rank>(\n    x: Tensor|TensorLike, shape: ShapeMap[R2]): Tensor<R2> {\n  const $x = convertToTensor(x, 'x', 'reshape', null);\n  shape = util.inferFromImplicitShape(shape, $x.size) as ShapeMap[R2];\n  util.assert(\n      $x.size === util.sizeFromShape(shape),\n      () => 'new shape and old shape must have the same number of elements.');\n\n  const grad = (dy: Tensor<R2>) => {\n    return {x: () => dy.reshape($x.shape)};\n  };\n  const attrs = {shape};\n  return ENGINE.runKernelFunc(\n      backend => backend.reshape($x, shape), {x: $x}, grad, 'Reshape', attrs);\n}\n\n/**\n * Removes dimensions of size 1 from the shape of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4], [1, 1, 4]);\n * x.squeeze().print();\n * ```\n *\n * @param x The input tensor to be squeezed.\n * @param axis An optional list of numbers. If specified, only\n *     squeezes the dimensions listed. The dimension index starts at 0. It\n * is an error to squeeze a dimension that is not 1.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction squeeze_<T extends Tensor>(x: Tensor|TensorLike, axis?: number[]): T {\n  const $x = convertToTensor(x, 'x', 'squeeze');\n  return reshape($x, util.squeezeShape($x.shape, axis).newShape) as T;\n}\n\n/**\n * Casts a `tf.Tensor` to a new dtype.\n *\n * ```js\n * const x = tf.tensor1d([1.5, 2.5, 3]);\n * tf.cast(x, 'int32').print();\n * ```\n * @param x The input tensor to be casted.\n * @param dtype The dtype to cast the input tensor to.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction cast_<T extends Tensor>(x: T|TensorLike, dtype: DataType): T {\n  const $x = convertToTensor(x, 'x', 'cast');\n\n  // Sanity checks.\n  if (!util.isValidDtype(dtype)) {\n    throw new Error(`Failed to cast to unknown dtype ${dtype}`);\n  }\n  if (dtype === 'string' && $x.dtype !== 'string' ||\n      dtype !== 'string' && $x.dtype === 'string') {\n    throw new Error('Only strings can be casted to strings');\n  }\n\n  const grad = (dy: T) => {\n    return {x: () => dy.clone()};\n  };\n  const attrs = {dtype};\n  return ENGINE.runKernelFunc(\n      backend => backend.cast($x, dtype), {x: $x}, grad, 'Cast', attrs);\n}\n\n/**\n * Stacks a list of rank-`R` `tf.Tensor`s into one rank-`(R+1)` `tf.Tensor`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.stack([a, b, c]).print();\n * ```\n *\n * @param tensors A list of tensor objects with the same shape and dtype.\n * @param axis The axis to stack along. Defaults to 0 (the first dim).\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction stack_<T extends Tensor>(\n    tensors: Array<T|TensorLike>, axis = 0): Tensor {\n  const $tensors = convertToTensorArray(tensors, 'tensors', 'stack');\n\n  util.assert(\n      $tensors.length >= 1, () => 'Pass at least one tensor to tf.stack');\n  if ($tensors.length === 1) {\n    return $tensors[0].expandDims(axis);\n  }\n  const rank = $tensors[0].rank;\n  const shape = $tensors[0].shape;\n  const dtype = $tensors[0].dtype;\n\n  util.assert(axis <= rank, () => 'Axis must be <= rank of the tensor');\n\n  $tensors.forEach(t => {\n    util.assertShapesMatch(\n        shape, t.shape,\n        'All tensors passed to stack must have matching shapes');\n  });\n\n  $tensors.forEach(t => {\n    util.assert(\n        dtype === t.dtype,\n        () => 'All tensors passed to stack must have matching dtypes');\n  });\n  const expandedTensors = $tensors.map(t => t.expandDims(axis));\n  return concat(expandedTensors, axis);\n}\n\n/**\n * This operation reshapes the \"batch\" dimension 0 into `M + 1` dimensions of\n * shape `blockShape + [batch]`, interleaves these blocks back into the grid\n * defined by the spatial dimensions `[1, ..., M]`, to obtain a result with\n * the same rank as the input. The spatial dimensions of this intermediate\n * result are then optionally cropped according to `crops` to produce the\n * output. This is the reverse of `tf.spaceToBatchND`. See below for a precise\n * description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [4, 1, 1, 1]);\n * const blockShape = [2, 2];\n * const crops = [[0, 0], [0, 0]];\n *\n * x.batchToSpaceND(blockShape, crops).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param crops A 2-D array.  Must have shape `[M, 2]`, all values must be >= 0.\n * `crops[i] = [cropStart, cropEnd]` specifies the amount to crop from input\n * dimension `i + 1`, which corresponds to spatial dimension `i`. It is required\n * that `cropStart[i] + cropEnd[i] <= blockShape[i] * inputShape[i + 1]`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Reshape `x` to `reshaped` of shape: `[blockShape[0], ...,\n * blockShape[M-1], batch / prod(blockShape), x.shape[1], ...,\n * x.shape[N-1]]`\n *\n * 2. Permute dimensions of `reshaped`to produce `permuted` of shape `[batch /\n * prod(blockShape),x.shape[1], blockShape[0], ..., x.shape[M],\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 3. Reshape `permuted` to produce `reshapedPermuted` of shape `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0], ..., x.shape[M] *\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 4. Crop the start and end of dimensions `[1, ..., M]` of `reshapedPermuted`\n * according to `crops` to produce the output of shape: `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0] - crops[0,0] - crops[0,1],\n * ..., x.shape[M] * blockShape[M-1] - crops[M-1,0] -\n * crops[M-1,1],x.shape[M+1], ..., x.shape[N-1]]`\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction batchToSpaceND_<T extends Tensor>(\n    x: T|TensorLike, blockShape: number[], crops: number[][]): T {\n  const $x = convertToTensor(x, 'x', 'batchToSpaceND');\n  const prod = blockShape.reduce((a, b) => a * b);\n\n  util.assert(\n      $x.rank >= 1 + blockShape.length,\n      () => `input rank is ${$x.rank} but should be > than blockShape.length ${\n          blockShape.length}`);\n\n  util.assert(\n      crops.length === blockShape.length,\n      () => `crops.length is ${\n          crops.length} but should be equal to blockShape.length  ${\n          blockShape.length}`);\n\n  util.assert(\n      $x.shape[0] % prod === 0,\n      () => `input tensor batch is ${\n                $x.shape[0]} but is not divisible by the product of ` +\n          `the elements of blockShape ${blockShape.join(' * ')} === ${prod}`);\n\n  const grad = (dy: T) => {\n    return {$x: () => dy.spaceToBatchND(blockShape, crops)};\n  };\n\n  return ENGINE.runKernelFunc(\n      backend => backend.batchToSpaceND($x, blockShape, crops), {$x}, grad);\n}\n\n/**\n * This operation divides \"spatial\" dimensions `[1, ..., M]` of the input into\n * a grid of blocks of shape `blockShape`, and interleaves these blocks with\n * the \"batch\" dimension (0) such that in the output, the spatial\n * dimensions `[1, ..., M]` correspond to the position within the grid,\n * and the batch dimension combines both the position within a spatial block\n * and the original batch position. Prior to division into blocks,\n * the spatial dimensions of the input are optionally zero padded\n * according to `paddings`. See below for a precise description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]);\n * const blockShape = [2, 2];\n * const paddings = [[0, 0], [0, 0]];\n *\n * x.spaceToBatchND(blockShape, paddings).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param paddings A 2-D array. Must have shape `[M, 2]`, all values must be >=\n *     0. `paddings[i] = [padStart, padEnd]` specifies the amount to zero-pad\n * from input dimension `i + 1`, which corresponds to spatial dimension `i`. It\n * is required that\n * `(inputShape[i + 1] + padStart + padEnd) % blockShape[i] === 0`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Zero-pad the start and end of dimensions `[1, ..., M]` of the input\n * according to `paddings` to produce `padded` of shape paddedShape.\n *\n * 2. Reshape `padded` to `reshapedPadded` of shape:\n * `[batch] + [paddedShape[1] / blockShape[0], blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1], blockShape[M-1]] + remainingShape`\n *\n * 3. Permute dimensions of `reshapedPadded` to produce `permutedReshapedPadded`\n * of shape: `blockShape + [batch] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n *\n * 4. Reshape `permutedReshapedPadded` to flatten `blockShape` into the\n * batch dimension, producing an output tensor of shape:\n * `[batch * prod(blockShape)] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction spaceToBatchND_<T extends Tensor>(\n    x: T|TensorLike, blockShape: number[], paddings: number[][]): T {\n  const $x = convertToTensor(x, 'x', 'spaceToBatchND');\n\n  util.assert(\n      $x.rank >= 1 + blockShape.length,\n      () => `input rank ${$x.rank} should be > than [blockShape] ${\n          blockShape.length}`);\n\n  util.assert(\n      paddings.length === blockShape.length,\n      () => `paddings.shape[0] ${\n          paddings.length} must be equal to [blockShape] ${blockShape.length}`);\n\n  util.assert(\n      $x.shape.reduce(\n          (a, b, i) => {\n            if (i > 0 && i <= blockShape.length) {\n              return a &&\n                  ((b + paddings[i - 1][0] + paddings[i - 1][1]) %\n                       blockShape[i - 1] ===\n                   0);\n            }\n            return a;\n          },\n          true),\n      () => `input spatial dimensions ${$x.shape.slice(1)} with paddings ${\n          paddings.toString()} must be divisible by blockShapes ${\n          blockShape.toString()}`);\n\n  const grad = (dy: T) => {\n    return {$x: () => dy.batchToSpaceND(blockShape, paddings)};\n  };\n\n  return ENGINE.runKernelFunc(\n      backend => backend.spaceToBatchND($x, blockShape, paddings), {$x}, grad);\n}\n\n/**\n * Unstacks a `tf.Tensor` of rank-`R` into a list of rank-`(R-1)` `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * tf.unstack(a).forEach(tensor => tensor.print());\n * ```\n *\n * @param x A tensor object.\n * @param axis The axis to unstack along. Defaults to 0 (the first dim).\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction unstack_(x: Tensor|TensorLike, axis = 0): Tensor[] {\n  axis = axis || 0;\n  const $x = convertToTensor(x, 'x', 'unstack');\n  util.assert(\n      axis >= -$x.shape.length && axis < $x.shape.length,\n      () =>\n          `Axis = ${axis} is not in [-${$x.shape.length}, ${$x.shape.length})`);\n  if (axis < 0) {\n    axis += $x.shape.length;\n  }\n  const grad = (dy: Tensor[]) => {\n    return {x: () => stack(dy, axis)};\n  };\n  const attrs = {axis};\n  return ENGINE.runKernelFunc(\n      backend => backend.unstack($x, axis), {x: $x}, grad, 'Unpack', attrs);\n}\n\n/**\n * Computes the cumulative sum of a `tf.Tensor` along `axis`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4]);\n * x.cumsum().print();\n * ```\n * ```js\n * const x = tf.tensor([[1, 2], [3, 4]]);\n * x.cumsum().print();\n * ```\n *\n * @param x The input tensor to be summed.\n * @param axis The axis along which to sum. Optional. Defaults to 0.\n * @param exclusive Whether to perform exclusive cumulative sum. Optional.\n *     Defaults to false. If set to true then the sum of each tensor entry\n *     does not include its own value, but only the values previous to it\n *     along the specified axis.\n * @param reverse Whether to sum in the opposite direction. Optional.\n *     Defaults to false.\n */\n/** @doc {heading: 'Operations', subheading: 'Scan'} */\nfunction cumsum_<T extends Tensor>(\n    x: Tensor|TensorLike, axis = 0, exclusive = false, reverse = false): T {\n  const $x = convertToTensor(x, 'x', 'cumsum');\n\n  axis = axis | 0;\n  const permutation = getAxesPermutation([axis], $x.rank);\n  let permutedX = $x;\n  if (permutation != null) {\n    permutedX = $x.transpose(permutation);\n  }\n  const permutedAxis = getInnerMostAxes(1, $x.rank)[0];\n\n  const grad = (dy: T) => {\n    return {permutedX: () => dy.cumsum(axis, exclusive, !reverse)};\n  };\n  let value = ENGINE.runKernelFunc(\n                  backend => backend.cumsum(\n                      permutedX, permutedAxis, exclusive, reverse),\n                  {permutedX}, grad) as T;\n\n  if (permutation != null) {\n    value = value.transpose(permutation);\n  }\n  return value;\n}\n\n/**\n * Returns a `tf.Tensor` that has expanded rank, by inserting a dimension\n * into the tensor's shape.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const axis = 1;\n * x.expandDims(axis).print();\n * ```\n *\n * @param x The input tensor whose dimensions to be expanded.\n * @param axis The dimension index at which to insert shape of `1`. Defaults\n *     to 0 (the first dimension).\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction expandDims_<R2 extends Rank>(\n    x: Tensor|TensorLike, axis = 0): Tensor<R2> {\n  const parseAs: DataType = null;\n  const $x = convertToTensor(x, 'x', 'expandDims', parseAs);\n\n  util.assert(axis <= $x.rank, () => 'Axis must be <= rank of the tensor');\n  const newShape = $x.shape.slice();\n  if (axis < 0) {\n    // Negative value is counted from the tail of rank.\n    util.assert(\n        -($x.rank + 1) <= axis,\n        () => `Axis must be in the interval [${- ($x.rank + 1)}, ${$x.rank}]`);\n    axis = $x.rank + axis + 1;\n  }\n  newShape.splice(axis, 0, 1);\n  return reshape($x, newShape as ShapeMap[R2]);\n}\n\n/**\n * Rearranges data from depth into blocks of spatial data. More specifically,\n * this op outputs a copy of the input tensor where values from the `depth`\n * dimension are moved in spatial blocks to the `height` and `width` dimensions.\n * The attr `blockSize` indicates the input block size and how the data is\n * moved.\n *\n *  - Chunks of data of size `blockSize * blockSize` from depth are rearranged\n * into non-overlapping blocks of size `blockSize x blockSize`\n *\n *  - The width the output tensor is `inputWidth * blockSize`, whereas the\n * height is `inputHeight * blockSize`\n *\n *  - The Y, X coordinates within each block of the output image are determined\n * by the high order component of the input channel index\n *\n *  - The depth of the input tensor must be divisible by `blockSize *\n * blockSize`\n *\n * The `dataFormat` attr specifies the layout of the input and output tensors\n * with the following options: \"NHWC\": [ `batch, height, width, channels` ]\n * \"NCHW\": [ `batch, channels, height, width` ]\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 1, 1, 4]);\n * const blockSize = 2;\n * const dataFormat = \"NHWC\";\n *\n * tf.depthToSpace(x, blockSize, dataFormat).print();\n * ```\n *\n * @param x The input tensor of rank 4\n * @param blockSIze  An `int` that is `>= 2`. The size of the spatial block\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to \"NHWC\"\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction depthToSpace_(\n    x: Tensor4D|TensorLike4D, blockSize: number,\n    dataFormat: 'NHWC'|'NCHW' = 'NHWC'): Tensor4D {\n  const $x = convertToTensor(x, 'x', 'depthToSpace') as Tensor4D;\n\n  const inputHeight = (dataFormat === 'NHWC') ? $x.shape[1] : $x.shape[2];\n  const inputWidth = (dataFormat === 'NHWC') ? $x.shape[2] : $x.shape[3];\n  const inputDepth = (dataFormat === 'NHWC') ? $x.shape[3] : $x.shape[1];\n\n  util.assert(\n      inputHeight * blockSize >= 0,\n      () => `Negative dimension size caused by overflow when multiplying\n      ${inputHeight} and ${blockSize}  for depthToSpace with input shape\n      ${$x.shape}`);\n\n  util.assert(\n      inputWidth * blockSize >= 0,\n      () => `Negative dimension size caused by overflow when multiplying\n      ${inputWidth} and ${blockSize} for depthToSpace with input shape\n          ${$x.shape}`);\n\n  util.assert(\n      (inputDepth % (blockSize * blockSize) === 0),\n      () => `Dimension size must be evenly divisible by ${\n          blockSize * blockSize} but is ${\n          inputDepth} for depthToSpace with input shape ${$x.shape}`);\n\n  return ENGINE.runKernelFunc(\n      backend => backend.depthToSpace($x, blockSize, dataFormat), {$x});\n}\n\n/**\n * Computes the difference between two lists of numbers.\n *\n * Given a Tensor `x` and a Tensor `y`, this operation returns a Tensor `out`\n * that represents all values that are in `x` but not in `y`. The returned\n * Tensor `out` is sorted in the same order that the numbers appear in `x`\n * (duplicates are preserved). This operation also returns a Tensor indices that\n * represents the position of each out element in `x`. In other words:\n *\n * `out[i] = x[idx[i]] for i in [0, 1, ..., out.length - 1]`\n *\n * ```js\n * const x = [1, 2, 3, 4, 5, 6];\n * const y = [1, 3, 5];\n *\n * const [out, indices] = await tf.setdiff1dAsync(x, y);\n * out.print(); // [2, 4, 6]\n * indices.print(); // [1, 3, 5]\n * ```\n *\n * @param x 1-D Tensor. Values to keep.\n * @param y 1-D Tensor. Must have the same type as x. Values to exclude in the\n *     output.\n * @returns Promise of Tensor tuple [out, indices].\n *  out: Tensor with the same type as x.\n *  indices: A Tensor of type int32.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nasync function setdiff1dAsync_(\n    x: Tensor|TensorLike, y: Tensor|TensorLike): Promise<[Tensor, Tensor]> {\n  const $x = convertToTensor(x, 'x', 'setdiff1d');\n  const $y = convertToTensor(y, 'y', 'setdiff1d');\n\n  util.assert(\n      $x.dtype === $y.dtype,\n      () => `x and y should have the same dtype, but got x (${\n          $x.dtype}) and y (${$y.dtype}).`);\n\n  util.assert(\n      $x.rank === 1, () => `x should be 1D tensor, but got x (${$x.shape}).`);\n\n  util.assert(\n      $y.rank === 1, () => `y should be 1D tensor, but got y (${$y.shape}).`);\n\n  const xVals = await $x.data();\n  const yVals = await $y.data();\n  const ySet = new Set(yVals);\n\n  let outputSize = 0;\n  for (let i = 0; i < xVals.length; i++) {\n    if (!ySet.has(xVals[i])) {\n      outputSize++;\n    }\n  }\n\n  const buffer = new TensorBuffer([outputSize], $x.dtype);\n  const indices = new TensorBuffer([outputSize], 'int32');\n  for (let i = 0, p = 0; i < xVals.length; i++) {\n    if (!ySet.has(xVals[i])) {\n      buffer.values[p] = xVals[i];\n      indices.values[p] = i;\n      p++;\n    }\n  }\n  return [buffer.toTensor(), indices.toTensor()];\n}\n\n/**\n * Creates an empty `tf.TensorBuffer` with the specified `shape` and `dtype`.\n *\n * The values are stored in CPU as `TypedArray`. Fill the buffer using\n * `buffer.set()`, or by modifying directly `buffer.values`.\n *\n * When done, call `buffer.toTensor()` to get an immutable `tf.Tensor` with\n * those values.\n *\n * ```js\n * // Create a buffer and set values at particular indices.\n * const buffer = tf.buffer([2, 2]);\n * buffer.set(3, 0, 0);\n * buffer.set(5, 1, 0);\n *\n * // Convert the buffer back to a tensor.\n * buffer.toTensor().print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The dtype of the buffer. Defaults to 'float32'.\n * @param values The values of the buffer as `TypedArray`. Defaults to\n * zeros.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nexport function buffer<R extends Rank, D extends DataType = 'float32'>(\n    shape: ShapeMap[R], dtype: D = 'float32' as D,\n    values?: DataTypeMap[D]): TensorBuffer<R, D> {\n  dtype = dtype || 'float32' as D;\n  util.assertNonNegativeIntegerDimensions(shape);\n  return new TensorBuffer<R, D>(shape, dtype, values);\n}\n\n/**\n * Prints information about the `tf.Tensor` including its data.\n *\n * ```js\n * const verbose = true;\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print(verbose);\n * ```\n * @param x The tensor to be printed.\n * @param verbose Whether to print verbose information about the ` Tensor`,\n * including dtype and size.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction print<T extends Tensor>(x: T, verbose = false): void {\n  console.log(x.toString(verbose));\n}\n\nexport {\n  print  // Not wrapped in op() since no need to increase stack trace.\n};\n\nexport const batchToSpaceND = op({batchToSpaceND_});\nexport const cast = op({cast_});\nexport const cumsum = op({cumsum_});\nexport const depthToSpace = op({depthToSpace_});\nexport const expandDims = op({expandDims_});\nexport const reshape = op({reshape_});\nexport const spaceToBatchND = op({spaceToBatchND_});\nexport const squeeze = op({squeeze_});\nexport const stack = op({stack_});\nexport const unstack = op({unstack_});\nexport const setdiff1dAsync = setdiff1dAsync_;\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Gets the new shape of the input Tensor after it's been reshaped\n * to:\n * [blockShape[0], ..., blockShape[M-1], batch / prod(blockShape),\n * inputShape[1], ..., inputShape[N-1]]\n *\n * See step 1: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshaped(\n    inputShape: number[], blockShape: number[], prod: number,\n    batchToSpace = true): number[] {\n  let reshaped: number[] = [];\n  if (batchToSpace) {\n    reshaped = reshaped.concat(blockShape.slice(0));\n    reshaped.push(inputShape[0] / prod);\n    reshaped = reshaped.concat(inputShape.slice(1));\n  } else {\n    reshaped = reshaped.concat(inputShape[0]);\n    const spatialLength = blockShape.length;\n    for (let i = 0; i < spatialLength; ++i) {\n      reshaped =\n          reshaped.concat([inputShape[i + 1] / blockShape[i], blockShape[i]]);\n    }\n    reshaped = reshaped.concat(inputShape.slice(spatialLength + 1));\n  }\n  return reshaped;\n}\n\n/**\n * Gets the permutation that will transpose the dimensions of the\n * reshaped tensor to shape:\n *\n * [batch / prod(block_shape),inputShape[1], blockShape[0], ...,\n * inputShape[M], blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * see step 2: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getPermuted(\n    reshapedRank: number, blockShapeRank: number,\n    batchToSpace = true): number[] {\n  const permuted = [];\n  if (batchToSpace) {\n    permuted.push(blockShapeRank);\n    for (let i = blockShapeRank + 1; i < reshapedRank; ++i) {\n      if (i <= 2 * blockShapeRank) {\n        permuted.push(i);\n        permuted.push(i - (blockShapeRank + 1));\n      } else {\n        permuted.push(i);\n      }\n    }\n  } else {\n    const permutedBeforeBatch = [];\n    const permutedAfterBatch = [];\n    for (let i = 1; i < reshapedRank; ++i) {\n      if (i >= blockShapeRank * 2 + 1 || i % 2 === 1) {\n        permutedAfterBatch.push(i);\n      } else {\n        permutedBeforeBatch.push(i);\n      }\n    }\n    permuted.push(...permutedBeforeBatch);\n    permuted.push(0);\n    permuted.push(...permutedAfterBatch);\n  }\n  return permuted;\n}\n\n/**\n * Gets the shape of the reshaped and permuted input Tensor before any cropping\n * is applied.  The new shape will be:\n *\n * [batch / prod(blockShape),inputShape[1] * blockShape[0], ...,\n * inputShape[M] * blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 3: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshapedPermuted(\n    inputShape: number[], blockShape: number[], prod: number,\n    batchToSpace = true): number[] {\n  const reshapedPermuted = [];\n\n  if (batchToSpace) {\n    reshapedPermuted.push(inputShape[0] / prod);\n  } else {\n    reshapedPermuted.push(inputShape[0] * prod);\n  }\n\n  for (let i = 1; i < inputShape.length; ++i) {\n    if (i <= blockShape.length) {\n      if (batchToSpace) {\n        reshapedPermuted.push(blockShape[i - 1] * inputShape[i]);\n      } else {\n        reshapedPermuted.push(inputShape[i] / blockShape[i - 1]);\n      }\n    } else {\n      reshapedPermuted.push(inputShape[i]);\n    }\n  }\n\n  return reshapedPermuted;\n}\n\n/**\n * Converts the crops argument into the beginning coordinates of a slice\n * operation.\n */\nexport function getSliceBeginCoords(\n    crops: number[][], blockShape: number): number[] {\n  const sliceBeginCoords = [0];\n  for (let i = 0; i < blockShape; ++i) {\n    sliceBeginCoords.push(crops[i][0]);\n  }\n  return sliceBeginCoords;\n}\n\n/**\n * Converts the crops argument into the size of a slice operation.  When\n * combined with getSliceBeginCoords this function allows the reshaped and\n * permuted Tensor to be cropped to its final output shape of:\n *\n * inputShape[1] * blockShape[0] - crops[0,0] - crops[0,1], ...,\n * inputShape[M] * blockShape[M-1] -crops[M-1,0] -\n * crops[M-1,1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 4: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getSliceSize(\n    uncroppedShape: number[], crops: number[][], blockShape: number): number[] {\n  const sliceSize = uncroppedShape.slice(0, 1);\n  for (let i = 0; i < blockShape; ++i) {\n    sliceSize.push(uncroppedShape[i + 1] - crops[i][0] - crops[i][1]);\n  }\n\n  return sliceSize;\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Allow UpperCamelCase variable names\n// tslint:disable: variable-name\n// Unfortunately just enabling PascalCase per file (tslint:enable:\n// allow-pascal-case) doesn't work.\nimport {NamedTensorInfoMap, TensorInfo} from './kernel_registry';\nimport {PixelData} from './types';\n\nexport const Add = 'Add';\nexport type AddInputs = BinaryInputs;\n\nexport const AddN = 'AddN';\nexport type AddNInputs = TensorInfo[];\n\nexport type BinaryInputs = Pick<NamedTensorInfoMap, 'a'|'b'>;\n\nexport const Div = 'Div';\nexport type DivInputs = BinaryInputs;\n\nexport const FusedBatchNorm = 'FusedBatchNorm';\nexport type FusedBatchNormInputs =\n    Pick<NamedTensorInfoMap, 'x'|'scale'|'offset'|'mean'|'variance'>;\nexport interface FusedBatchNormAttrs {\n  varianceEpsilon: number;\n}\n\nexport const SquaredDifference = 'SquaredDifference';\nexport type SquaredDifferenceInputs = BinaryInputs;\n\nexport const Square = 'Square';\nexport type SquareInputs = Pick<NamedTensorInfoMap, 'x'>;\n\nexport const Transpose = 'Transpose';\nexport type TransposeInputs = Pick<NamedTensorInfoMap, 'x'>;\nexport interface TransposeAttrs {\n  perm: number[];\n}\n\nexport const NonMaxSuppressionV5 = 'NonMaxSuppressionV5';\nexport type NonMaxSuppressionV5Inputs =\n    Pick<NamedTensorInfoMap, 'boxes'|'scores'>;\nexport interface NonMaxSuppressionV5Attrs {\n  maxOutputSize: number;\n  iouThreshold: number;\n  scoreThreshold: number;\n  softNmsSigma: number;\n}\n\nexport const BroadcastTo = 'BroadcastTo';\nexport type BroadcastToInputs = Pick<NamedTensorInfoMap, 'x'>;\nexport interface BroadCastToAttrs {\n  shape: number[];\n  inputShape: number[];  // for gradient\n}\n\nexport const OneHot = 'OneHot';\nexport type OneHotInputs = Pick<NamedTensorInfoMap, 'indices'>;\nexport interface OneHotAttrs {\n  depth: number;\n  onValue: number;\n  offValue: number;\n}\n\nexport const Identity = 'Identity';\nexport type IdentityInputs = Pick<NamedTensorInfoMap, 'x'>;\n\nexport const Tile = 'Tile';\nexport type TileInputs = Pick<NamedTensorInfoMap, 'x'>;\nexport interface TileAttrs {\n  reps: number[];\n}\n\nexport const PadV2 = 'PadV2';\nexport type PadV2Inputs = Pick<NamedTensorInfoMap, 'x'>;\nexport interface PadV2Attrs {\n  paddings: Array<[number, number]>;\n  constantValue: number;\n}\n\n/**\n * TensorFlow.js-only kernels\n */\nexport const FromPixels = 'FromPixels';\nexport interface FromPixelsInputs {\n  pixels: PixelData|ImageData|HTMLImageElement|HTMLCanvasElement|\n      HTMLVideoElement;\n}\nexport interface FromPixelsAttrs {\n  numChannels: number;\n}\n\nexport const MaxPoolWithArgmax = 'MaxPoolWithArgmax';\nexport type MaxPoolWithArgmaxInputs = Pick<NamedTensorInfoMap, 'x'>;\nexport interface MaxPoolWithArgmaxAttrs {\n  filterSize: [number, number]|number;\n  strides: [number, number]|number;\n  pad: 'valid'|'same'|number;\n  includeBatchInIndex: boolean;\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {Add, AddInputs} from '../kernel_names';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Adds two `tf.Tensor`s element-wise, A + B. Supports broadcasting.\n *\n * We also expose `tf.addStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print();  // or tf.add(a, b)\n * ```\n *\n * ```js\n * // Broadcast add a with b.\n * const a = tf.scalar(5);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print();  // or tf.add(a, b)\n * ```\n * @param a The first `tf.Tensor` to add.\n * @param b The second `tf.Tensor` to add. Must have the same type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction add_<T extends Tensor>(a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'add');\n  let $b = convertToTensor(b, 'b', 'add');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const forward: ForwardFunc<Tensor> = (backend, save) => {\n    const res = backend.add($a, $b);\n    save([$a, $b]);\n    return res;\n  };\n\n  const inputs: AddInputs = {a: $a, b: $b};\n\n  return ENGINE.runKernelFunc(\n             forward, inputs as {} as NamedTensorMap, null /* gradient */,\n             Add) as T;\n}\n\nexport const add = op({add_});\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Returns the dimensions in the input shape that are broadcasted to\n * produce the provided output shape.\n *\n * The returned dimensions are 0-indexed and sorted. An example:\n * inShape = [4, 1, 3]\n * outShape = [5, 4, 3, 3]\n * result = [1]. Dimension 1 (2nd dimension of input) gets broadcasted 1 => 3.\n */\nexport function getBroadcastDims(\n    inShape: number[], outShape: number[]): number[] {\n  const inRank = inShape.length;\n  const dims: number[] = [];\n  for (let i = 0; i < inRank; i++) {\n    const dim = inRank - 1 - i;\n    const a = inShape[dim] || 1;\n    const b = outShape[outShape.length - 1 - i] || 1;\n    if (b > 1 && a === 1) {\n      dims.unshift(dim);\n    }\n  }\n  return dims;\n}\n\n/**\n * Returns the axes in the output space that should be reduced to produce\n * the input space.\n */\nexport function getReductionAxes(\n    inShape: number[], outShape: number[]): number[] {\n  const result: number[] = [];\n  for (let i = 0; i < outShape.length; i++) {\n    const inDim = inShape[inShape.length - i - 1];\n    const outAxis = outShape.length - i - 1;\n    const outDim = outShape[outAxis];\n    if (inDim == null || (inDim === 1 && outDim > 1)) {\n      result.unshift(outAxis);\n    }\n  }\n  return result;\n}\n\nexport function assertAndGetBroadcastShape(\n    shapeA: number[], shapeB: number[]): number[] {\n  const result: number[] = [];\n  const l = Math.max(shapeA.length, shapeB.length);\n\n  for (let i = 0; i < l; i++) {\n    let a = shapeA[shapeA.length - i - 1];\n    if (a == null) {\n      a = 1;\n    }\n    let b = shapeB[shapeB.length - i - 1];\n    if (b == null) {\n      b = 1;\n    }\n    if (a === 1) {\n      result.unshift(b);\n    } else if (b === 1) {\n      result.unshift(a);\n    } else if (a !== b) {\n      const errMsg = `Operands could not be broadcast together with shapes ` +\n          `${shapeA} and ${shapeB}.`;\n      throw Error(errMsg);\n    } else {\n      result.unshift(a);\n    }\n  }\n  return result;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {op} from './operation';\nimport {scalar, zerosLike} from './tensor_ops';\n\n/**\n * Computes `-1 * x` element-wise.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, -2, 0], [2, 2]);\n *\n * x.neg().print();  // or tf.neg(x)\n * ```\n *\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction neg_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'neg');\n\n  const grad = (dy: T) => {\n    return {x: () => dy.neg()};\n  };\n\n  const attrs = {};\n  const inputsToSave = [$x];\n  return ENGINE.runKernelFunc(\n      backend => backend.neg($x), {x: $x}, grad, 'Neg', attrs, inputsToSave);\n}\n\n/**\n * Computes ceiling of input `tf.Tensor` element-wise: `ceil(x)`\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.ceil().print();  // or tf.ceil(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction ceil_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'ceil');\n\n  // TODO(manrajgrover): Return null for gradients when backprop supports it.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.ceil($x), {$x}, grad);\n}\n\n/**\n * Computes floor of input `tf.Tensor` element-wise: `floor(x)`.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.floor().print();  // or tf.floor(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction floor_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'floor');\n\n  // TODO(nsthorat): Let gradients be null for cases where we want to stop\n  // backpropgation.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.floor($x), {$x}, grad);\n}\n\n/**\n * Returns an element-wise indication of the sign of a number.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3, NaN, 0]);\n *\n * x.sign().print();  // or tf.sign(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction sign_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'sign');\n\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.sign($x), {$x}, grad);\n}\n\n/**\n * RReturns which elements of x are NaN.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isNaN().print();  // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction isNaN_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'isNaN');\n\n  // TODO(nsthorat): Let gradients be null for cases where we want to stop\n  // backpropgation.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.isNaN($x), {$x}, grad);\n}\n\n/**\n * Returns which elements of x are Infinity or -Infinity.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isInf().print();  // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction isInf_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'isInf');\n\n  // TODO(nsthorat): Let gradients be null for cases where we want to stop\n  // backpropgation.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.isInf($x), {$x}, grad);\n}\n\n/**\n * Returns which elements of x are finite.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isFinite().print();  // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction isFinite_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'isFinite');\n\n  // TODO(nsthorat): Let gradients be null for cases where we want to stop\n  // backpropgation.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.isFinite($x), {$x}, grad);\n}\n\n/**\n * Computes round of input `tf.Tensor` element-wise: `round(x)`.\n * It implements banker's rounding.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.round().print();  // or tf.round(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction round_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'round');\n\n  // TODO(nsthorat): Let gradients be null for cases where we want to stop\n  // backpropgation.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.round($x), {$x}, grad);\n}\n\n/**\n * Computes exponential of the input `tf.Tensor` element-wise. `e ^ x`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.exp().print();  // or tf.exp(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction exp_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'exp');\n\n  const bck = (dy: T, saved: Tensor[]) => {\n    return {x: () => dy.mulStrict(saved[0] as T)};\n  };\n  const attrs = {};\n  const inputsToSave: Tensor[] = [];\n  const outputsToSave = [true];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.exp($x);\n    save([y]);\n    return y;\n  }, {x: $x}, bck, 'Exp', attrs, inputsToSave, outputsToSave);\n}\n\n/**\n * Computes exponential of the input `tf.Tensor` minus one element-wise.\n * `e ^ x - 1`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.expm1().print();  // or tf.expm1(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction expm1_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'expm1');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.mul($x.exp())} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.expm1($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes natural logarithm of the input `tf.Tensor` element-wise: `ln(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E]);\n *\n * x.log().print();  // or tf.log(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction log_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'log');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => dy.div($x.toFloat())} as {x: () => T};\n  };\n\n  const attrs = {};\n  const inputsToSave = [$x];\n\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.log($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Log', attrs, inputsToSave);\n}\n\n/**\n * Computes natural logarithm of the input `tf.Tensor` plus one\n * element-wise: `ln(1 + x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E - 1]);\n *\n * x.log1p().print();  // or tf.log1p(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction log1p_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'log1p');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div($x.add(1))} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.log1p($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes square root of the input `tf.Tensor` element-wise: `y = sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.sqrt().print();  // or tf.sqrt(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction sqrt_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'sqrt');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div($x.toFloat().sqrt().mul(2))} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.sqrt($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes reciprocal of square root of the input `tf.Tensor` element-wise:\n * `y = 1 / sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.rsqrt().print();  // or tf.rsqrt(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction rsqrt_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'rsqrt');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => dy.div($x.pow(1.5).mul(2)).neg() as T};\n  };\n  const inputsToSave = [$x];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.rsqrt($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Rsqrt', {} /* attrs */, inputsToSave);\n}\n\n/**\n * Computes reciprocal of x element-wise: `1 / x`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, 2]);\n *\n * x.reciprocal().print();  // or tf.reciprocal(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction reciprocal_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'reciprocal');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div($x.square().neg())} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.reciprocal($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes absolute value element-wise: `abs(x)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.abs().print();  // or tf.abs(x)\n * ```\n * @param x The input `tf.Tensor`.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction abs_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'abs');\n\n  if ($x.dtype === 'complex64') {\n    return ENGINE.runKernelFunc(backend => backend.complexAbs($x), {$x});\n  }\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => dy.mul($x.toFloat().step(-1))} as {x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.abs($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Abs');\n}\n\n/**\n * Clips values element-wise. `max(min(x, clipValueMax), clipValueMin)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.clipByValue(-2, 3).print();  // or tf.clipByValue(x, -2, 3)\n * ```\n * @param x The input tensor.\n * @param clipValueMin Lower-bound of range to be clipped to.\n * @param clipValueMax Upper-bound of range to be clipped to.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction clipByValue_<T extends Tensor>(\n    x: T|TensorLike, clipValueMin: number, clipValueMax: number): T {\n  const $x = convertToTensor(x, 'x', 'clipByValue');\n  util.assert(\n      (clipValueMin <= clipValueMax),\n      () => `Error in clip: min (${clipValueMin}) must be ` +\n          `less than or equal to max (${clipValueMax}).`);\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      x: () => dy.where(\n                   $x.greaterEqual(clipValueMin)\n                       .logicalAnd($x.lessEqual(clipValueMax)),\n                   zerosLike(dy)) as T,\n    };\n  };\n  const inputsToSave = [$x];\n  const attr = {min: clipValueMin, max: clipValueMax};\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.clip($x, clipValueMin, clipValueMax);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'ClipByValue', attr, inputsToSave);\n}\n\n/**\n * Computes sigmoid element-wise, `1 / (1 + exp(-x))`\n *\n * ```js\n * const x = tf.tensor1d([0, -1, 2, -3]);\n *\n * x.sigmoid().print();  // or tf.sigmoid(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction sigmoid_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'sigmoid');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [y] = saved;\n    return {x: () => dy.mul(y.mul(scalar(1).sub(y)))} as {x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.sigmoid($x);\n    save([y]);\n    return y;\n  }, {x: $x}, grad, 'Sigmoid');\n}\n\n/**\n * Computes log sigmoid of the input `tf.Tensor` element-wise:\n * `logSigmoid(x)`. For numerical stability, we use `-tf.softplus(-x)`.\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.logSigmoid().print();  // or tf.logSigmoid(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction logSigmoid_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'logSigmoid');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.mul($x.neg().sigmoid())} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.softplus($x.neg()).neg();\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes softplus of the input `tf.Tensor` element-wise: `log(exp(x) + 1)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.softplus().print();  // or tf.softplus(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction softplus_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'softplus');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.mul($x.sigmoid())} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.softplus($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes sin of the input Tensor element-wise: `sin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.sin().print();  // or tf.sin(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction sin_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'sin');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => $x.toFloat().cos().mul(dy)} as {x: () => T};\n  };\n  const inputsToSave = [$x];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.sin($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Sin', {} /* attrs */, inputsToSave);\n}\n\n/**\n * Computes cos of the input `tf.Tensor` element-wise: `cos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.cos().print();  // or tf.cos(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction cos_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'cos');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => $x.toFloat().sin().neg().mul(dy)} as {x: () => T};\n  };\n  const inputsToSave = [$x];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.cos($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Cos', {} /* attrs */, inputsToSave);\n}\n\n/**\n * Computes tan of the input `tf.Tensor` element-wise, `tan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.tan().print();  // or tf.tan(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction tan_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'tan');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div($x.cos().square())} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.tan($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes asin of the input `tf.Tensor` element-wise: `asin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asin().print();  // or tf.asin(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction asin_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'asin');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      $x: () => dy.divStrict(scalar(1).sub($x.toFloat().square()).sqrt() as T)\n    };\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.asin($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes acos of the input `tf.Tensor` element-wise: `acos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.acos().print();  // or tf.acos(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction acos_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'acos');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      $x: () =>\n          dy.divStrict(scalar(1).sub($x.toFloat().square()).sqrt() as T).neg()\n    };\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.acos($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes atan of the input `tf.Tensor` element-wise: `atan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.atan().print();  // or tf.atan(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction atan_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'atan');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div($x.toFloat().square().add(1))} as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.atan($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes hyperbolic sin of the input `tf.Tensor` element-wise: `sinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.sinh().print();  // or tf.sinh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction sinh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'sinh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => $x.toFloat().cosh().mulStrict(dy) as T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.sinh($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes hyperbolic cos of the input `tf.Tensor` element-wise: `cosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.cosh().print();  // or tf.cosh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction cosh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'cosh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => $x.toFloat().sinh().mulStrict(dy) as T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.cosh($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes hyperbolic tangent of the input `tf.Tensor` element-wise: `tanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, 70]);\n *\n * x.tanh().print();  // or tf.tanh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction tanh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'tanh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [y] = saved;\n    return {x: () => scalar(1).sub(y.square()).mulStrict(dy) as T};\n  };\n  const outputsToSave = [true];\n  return ENGINE.runKernelFunc(\n      (backend, save) => {\n        const y = backend.tanh($x);\n        save([y]);\n        return y;\n      },\n      {x: $x}, grad, 'Tanh', {} /* attrs */, null /* inputsToSave */,\n      outputsToSave);\n}\n\n/**\n * Computes inverse hyperbolic sin of the input `tf.Tensor` element-wise:\n * `asinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asinh().print();  // or tf.asinh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction asinh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'asinh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      $x: () => dy.divStrict(scalar(1).add($x.toFloat().square()).sqrt() as T)\n    };\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.asinh($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes the inverse hyperbolic cos of the input `tf.Tensor` element-wise:\n * `acosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([10, 1, 3, 5.7]);\n *\n * x.acosh().print();  // or tf.acosh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction acosh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'acosh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.divStrict($x.toFloat().square().sub(1).sqrt() as T)};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.acosh($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes inverse hyperbolic tan of the input `tf.Tensor` element-wise:\n * `atanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.atanh().print();  // or tf.atanh(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction atanh_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'atanh');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => dy.div(scalar(1).sub($x.toFloat().square()))} as\n        {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.atanh($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes gause error function of the input `tf.Tensor` element-wise:\n * `erf(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.erf().print(); // or tf.erf(x);\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction erf_<T extends Tensor>(x: T|TensorLike): T {\n  let $x = convertToTensor(x, 'x', 'erf');\n  util.assert(\n      $x.dtype === 'int32' || $x.dtype === 'float32',\n      () => 'Input dtype must be `int32` or `float32`.');\n\n  if ($x.dtype === 'int32') {\n    $x = $x.toFloat();\n  }\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      $x: () => dy.mul($x.square().neg().exp().mul(2 / Math.sqrt(Math.PI)))\n    } as {$x: () => T};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.erf($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes step of the input `tf.Tensor` element-wise: `x > 0 ? 1 : alpha * x`\n *\n * ```js\n * const x = tf.tensor1d([0, 2, -1, -3]);\n *\n * x.step(.5).print();  // or tf.step(x, .5)\n * ```\n * @param x The input tensor.\n * @param alpha The gradient when input is negative.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction step_<T extends Tensor>(x: T|TensorLike, alpha = 0.0): T {\n  const $x = convertToTensor(x, 'x', 'step');\n\n  // TODO(manrajgrover): Return null for gradients when backprop supports\n  // it.\n  const grad = (dy: T) => {\n    return {$x: () => zerosLike(dy)};\n  };\n  return ENGINE.runKernelFunc(backend => backend.step($x, alpha), {$x}, grad);\n}\n\nexport const abs = op({abs_});\nexport const acos = op({acos_});\nexport const acosh = op({acosh_});\nexport const asin = op({asin_});\nexport const asinh = op({asinh_});\nexport const atan = op({atan_});\nexport const atanh = op({atanh_});\nexport const ceil = op({ceil_});\nexport const clipByValue = op({clipByValue_});\nexport const cos = op({cos_});\nexport const cosh = op({cosh_});\nexport const erf = op({erf_});\nexport const exp = op({exp_});\nexport const expm1 = op({expm1_});\nexport const floor = op({floor_});\nexport const log = op({log_});\nexport const log1p = op({log1p_});\nexport const logSigmoid = op({logSigmoid_});\nexport const neg = op({neg_});\nexport const reciprocal = op({reciprocal_});\nexport const round = op({round_});\nexport const rsqrt = op({rsqrt_});\nexport const sigmoid = op({sigmoid_});\nexport const sign = op({sign_});\nexport const isNaN = op({isNaN_});\nexport const isInf = op({isInf_});\nexport const isFinite = op({isFinite_});\nexport const sin = op({sin_});\nexport const sinh = op({sinh_});\nexport const softplus = op({softplus_});\nexport const sqrt = op({sqrt_});\nexport const step = op({step_});\nexport const tan = op({tan_});\nexport const tanh = op({tanh_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {add} from './add';\nimport * as broadcast_util from './broadcast_util';\nimport {op} from './operation';\nimport {scalar, zerosLike} from './tensor_ops';\nimport {neg} from './unary_ops';\n\n/**\n * Adds two `tf.Tensor`s element-wise, A + B.\n *\n * Inputs must be the same shape. For broadcasting support, use add() instead.\n *\n * @param a The first Tensor to add element-wise.\n * @param b The second Tensor to add element-wise.\n */\nfunction addStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'addStrict');\n  const $b = convertToTensor(b, 'b', 'addStrict');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in addStrict: ');\n  return $a.add($b);\n}\n\n/**\n * Subtracts two `tf.Tensor`s element-wise, A - B. Supports broadcasting.\n *\n * We also expose `tf.subStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.sub(b).print();  // or tf.sub(a, b)\n * ```\n *\n * ```js\n * // Broadcast subtract a with b.\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.scalar(5);\n *\n * a.sub(b).print();  // or tf.sub(a, b)\n * ```\n * @param a The first `tf.Tensor` to subtract from.\n * @param b The second `tf.Tensor` to be subtracted. Must have the same dtype as\n * `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction sub_<T extends Tensor>(a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'sub');\n  let $b = convertToTensor(b, 'b', 'sub');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  const der = (dy: Tensor) => {\n    const derA = () => {\n      let res = dy;\n      const reduceAxes = broadcast_util.getReductionAxes($a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape($a.shape);\n    };\n    const derB = () => {\n      let res = dy;\n      const reduceAxes = broadcast_util.getReductionAxes($b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.neg().reshape($b.shape);\n    };\n    return {a: derA, b: derB};\n  };\n  return ENGINE.runKernelFunc(\n             backend => backend.subtract($a, $b), {a: $a, b: $b}, der, 'Sub') as\n      T;\n}\n\n/**\n * Subtracts two `tf.Tensor`s element-wise, A - B. Inputs must\n * be the same shape.\n *\n * For broadcasting support, use `tf.sub` instead.\n *\n * @param a The first Tensor to subtract element-wise.\n * @param b The second Tensor to subtract element-wise.\n */\nfunction subStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'subStrict');\n  const $b = convertToTensor(b, 'b', 'subStrict');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in subStrict: ');\n  return $a.sub($b);\n}\n\n/**\n * Computes the power of one `tf.Tensor` to another. Supports broadcasting.\n *\n * Given a `tf.Tensor` x and a `tf.Tensor` y, this operation computes x^y for\n * corresponding elements in x and y. The result's dtype will be the upcasted\n * type of the `base` and `exp` dtypes.\n *\n * ```js\n * const a = tf.tensor([[2, 3], [4, 5]])\n * const b = tf.tensor([[1, 2], [3, 0]]).toInt();\n *\n * a.pow(b).print();  // or tf.pow(a, b)\n * ```\n *\n * ```js\n * const a = tf.tensor([[1, 2], [3, 4]])\n * const b = tf.tensor(2).toInt();\n *\n * a.pow(b).print();  // or tf.pow(a, b)\n * ```\n * We also expose `powStrict` which has the same signature as this op and\n * asserts that `base` and `exp` are the same shape (does not broadcast).\n *\n * @param base The base `tf.Tensor` to pow element-wise.\n * @param exp The exponent `tf.Tensor` to pow element-wise.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction pow_<T extends Tensor>(\n    base: Tensor|TensorLike, exp: Tensor|TensorLike): T {\n  let $base = convertToTensor(base, 'base', 'pow');\n  let $exp = convertToTensor(exp, 'exp', 'pow');\n  [$base, $exp] = makeTypesMatch($base, $exp);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($base.shape, $exp.shape);\n  const grad = (dy: Tensor, saved: Tensor[]) => {\n    const [$base, $exp, y] = saved;\n    const derBase = () => {\n      const expFloat = $exp.toFloat();\n      let res = dy.mul(expFloat.mul($base.pow(expFloat.sub(scalar(1)))));\n      const reduceAxes = broadcast_util.getReductionAxes($base.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape($base.shape) as T;\n    };\n    const derExp = () => {\n      const condition = $base.greater(0);\n      const logBase = $base.log().where(condition, zerosLike($base));\n      let res = dy.mul(y.mul(logBase));\n      const reduceAxes = broadcast_util.getReductionAxes($exp.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape($exp.shape);\n    };\n    return {a: derBase, b: derExp};\n  };\n\n  const attrs = {};\n  const inputsToSave = [$base, $exp];\n  const outputsToSave = [true];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.pow($base, $exp);\n    save([$base, $exp, y]);\n    return y;\n  }, {a: $base, b: $exp}, grad, 'Pow', attrs, inputsToSave, outputsToSave) as T;\n}\n\n/**\n * Computes the power of one `tf.Tensor` to another. Inputs must\n * be the same shape.\n *\n * For broadcasting support, use `tf.pow` instead.\n *\n * @param base The base tensor to pow element-wise.\n * @param exp The exponent tensor to pow element-wise.\n */\nfunction powStrict_<T extends Tensor>(base: T, exp: Tensor): T {\n  util.assertShapesMatch(base.shape, exp.shape, 'Error in powStrict: ');\n  return base.pow(exp);\n}\n\n/**\n * Multiplies two `tf.Tensor`s element-wise, A * B. Supports broadcasting.\n *\n * We also expose `tf.mulStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([2, 3, 4, 5]);\n *\n * a.mul(b).print();  // or tf.mul(a, b)\n * ```\n *\n * ```js\n * // Broadcast mul a with b.\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.scalar(5);\n *\n * a.mul(b).print();  // or tf.mul(a, b)\n * ```\n * @param a The first tensor to multiply.\n * @param b The second tensor to multiply. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction mul_<T extends Tensor>(a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'mul');\n  let $b = convertToTensor(b, 'b', 'mul');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => {\n      const res = dy.mul($b.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes($a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return res.sum(reduceAxes).reshape($a.shape);\n      }\n      return res;\n    };\n    const derB = () => {\n      const res = dy.mul($a.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes($b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return res.sum(reduceAxes).reshape($b.shape);\n      }\n      return res;\n    };\n    return {a: derA, b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.multiply($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, der, 'Mul') as T;\n}\n\n/**\n * Multiplies two `tf.Tensor`s element-wise, A * B.\n *\n * Inputs must be the same shape. For broadcasting support, use `tf.mul`.\n *\n * @param a The first tensor to multiply.\n * @param b The first tensor to multiply. Must have the same\n *    dtype as `a`.\n */\nfunction mulStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'mul');\n  const $b = convertToTensor(b, 'b', 'mul');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in multiplyStrict: ');\n  return $a.mul($b);\n}\n\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n * The result is rounded with floor function.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.floorDiv(b).print();  // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.floorDiv(b).print();  // or tf.floorDiv(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction floorDiv_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'floorDiv');\n  let $b = convertToTensor(b, 'b', 'floorDiv');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => {\n      const res = dy.div($b.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes($a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return res.sum(reduceAxes).reshape($a.shape);\n      }\n      return res;\n    };\n    const derB = () => {\n      let res = dy.mul($a.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes($b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes).reshape($b.shape);\n      }\n      const tmp = $b.square();\n      return res.div(tmp.toFloat()).neg();\n    };\n    return {a: derA, b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.floorDiv($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, der, 'FloorDiv') as T;\n}\n\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Inputs must\n * be the same shape.\n *\n * @param a The first tensor as the numerator for element-wise division.\n * @param b The second tensor as the denominator for element-wise division.\n */\nfunction divStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'div');\n  const $b = convertToTensor(b, 'b', 'div');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in divideStrict: ');\n  return $a.div($b);\n}\n\n/**\n * Returns the mod of a and b element-wise.\n * `floor(x / y) * y + mod(x, y) = x`\n * Supports broadcasting.\n *\n * We also expose `tf.modStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.mod(b).print();  // or tf.mod(a, b)\n * ```\n *\n * ```js\n * // Broadcast a mod b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.mod(b).print();  // or tf.mod(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction mod_<T extends Tensor>(a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'mod');\n  let $b = convertToTensor(b, 'b', 'mod');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => {\n      const reduceAxes = broadcast_util.getReductionAxes($a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return dy.sum(reduceAxes).reshape($a.shape);\n      }\n      return dy;\n    };\n    const derB = () => {\n      const res = dy.mul($a.div($b).floor().neg());\n      const reduceAxes = broadcast_util.getReductionAxes($b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return res.sum(reduceAxes).reshape($b.shape);\n      }\n      return res;\n    };\n    return {$a: derA, $b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.mod($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {$a, $b}, der) as T;\n}\n\n/**\n * Returns the mod of a and b (`a < b ? a : b`) element-wise. Inputs must\n * be the same shape. For broadcasting support, use mod().\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n */\nfunction modStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'modStrict');\n  const $b = convertToTensor(b, 'b', 'modStrict');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in modStrict: ');\n  return $a.mod($b);\n}\n\n/**\n * Returns the min of a and b (`a < b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `minimumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.minimum(b).print();  // or tf.minimum(a, b)\n * ```\n *\n * ```js\n * // Broadcast minimum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.minimum(b).print();  // or tf.minimum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction minimum_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'minimum');\n  let $b = convertToTensor(b, 'b', 'minimum');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  if ($a.dtype === 'bool') {\n    $a = $a.toInt();\n    $b = $b.toInt();\n  }\n\n  broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => dy.mul($a.lessEqual($b).toFloat());\n    const derB = () => dy.mul($a.greater($b).toFloat());\n    return {a: derA, b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.minimum($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, der, 'Minimum') as T;\n}\n\n/**\n * Returns the min of a and b (`a < b ? a : b`) element-wise. Inputs must\n * be the same shape. For broadcasting support, use minimum().\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n */\nfunction minimumStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'minimumStrict');\n  const $b = convertToTensor(b, 'b', 'minimumStrict');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in minimumStrict: ');\n  return $a.minimum($b);\n}\n\n/**\n * Returns the max of a and b (`a > b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `tf.maximumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.maximum(b).print();  // or tf.maximum(a, b)\n * ```\n *\n * ```js\n * // Broadcast maximum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.maximum(b).print();  // or tf.maximum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction maximum_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'maximum');\n  let $b = convertToTensor(b, 'b', 'maximum');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  if ($a.dtype === 'bool') {\n    $a = $a.toInt();\n    $b = $b.toInt();\n  }\n\n  broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => dy.mul($a.greaterEqual($b).toFloat());\n    const derB = () => dy.mul($a.less($b).toFloat());\n    return {a: derA, b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.maximum($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, der, 'Maximum') as T;\n}\n\n/**\n * Returns the max of a and b (`a > b ? a : b`) element-wise. Inputs must\n * be the same shape. For broadcasting support, use maximum().\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n */\nfunction maximumStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'maximumStrict');\n  const $b = convertToTensor(b, 'b', 'maximumStrict');\n  util.assertShapesMatch($a.shape, $b.shape, 'Error in maximumStrict: ');\n  return $a.maximum($b);\n}\n\n/**\n * Returns (a - b) * (a - b) element-wise.\n *\n * Inputs must be the same shape. For broadcasting support, use\n * `tf.squaredDifference` instead.\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n */\nfunction squaredDifferenceStrict_<T extends Tensor>(\n    a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'squaredDifferenceStrict');\n  const $b = convertToTensor(b, 'b', 'squaredDifferenceStrict');\n  util.assertShapesMatch(\n      $a.shape, $b.shape, 'Error in squaredDifferenceStrict: ');\n  return $a.squaredDifference($b);\n}\n\n/**\n * Computes arctangent of `tf.Tensor`s a / b element-wise: `atan2(a, b)`.\n * Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1.0, 1.0, -1.0, .7]);\n * const b = tf.tensor1d([2.0, 13.0, 3.5, .21]);\n *\n * tf.atan2(a, b).print()\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n *\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction atan2_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'atan2');\n  let $b = convertToTensor(b, 'b', 'atan2');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const outShape =\n      broadcast_util.assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const derA = () => {\n      const d = add($a.square(), $b.square());\n      let res = dy.mul($b.div(d));\n      const reduceAxes = broadcast_util.getReductionAxes($a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape($a.shape);\n    };\n    const derB = () => {\n      const d = add($a.square(), $b.square());\n      let res = neg(dy.mul($a.div(d)));\n      const reduceAxes = broadcast_util.getReductionAxes($b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape($b.shape);\n    };\n    return {$a: derA, $b: derB};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.atan2($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {$a, $b}, der) as T;\n}\n\nexport const addStrict = op({addStrict_});\nexport const atan2 = op({atan2_});\nexport const divStrict = op({divStrict_});\nexport const floorDiv = op({floorDiv_});\nexport const maximum = op({maximum_});\nexport const maximumStrict = op({maximumStrict_});\nexport const minimum = op({minimum_});\nexport const minimumStrict = op({minimumStrict_});\nexport const mod = op({mod_});\nexport const modStrict = op({modStrict_});\nexport const mul = op({mul_});\nexport const mulStrict = op({mulStrict_});\nexport const pow = op({pow_});\nexport const powStrict = op({powStrict_});\nexport const squaredDifferenceStrict = op({squaredDifferenceStrict_});\nexport const sub = op({sub_});\nexport const subStrict = op({subStrict_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {Div, DivInputs} from '../kernel_names';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {floorDiv} from './binary_ops';\nimport {op} from './operation';\n\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n *\n * We also expose `tf.divStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.div(b).print();  // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.div(b).print();  // or tf.div(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction div_<T extends Tensor>(a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'div');\n  let $b = convertToTensor(b, 'b', 'div');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  if ($a.dtype === 'int32' && $b.dtype === 'int32') {\n    return floorDiv($a, $b);\n  }\n\n  const forward: ForwardFunc<Tensor> = (backend, save) => {\n    const res = backend.realDivide($a, $b);\n    save([$a, $b]);\n    return res;\n  };\n\n  const inputs: DivInputs = {a: $a, b: $b};\n  const attrs = {};\n\n  return ENGINE.runKernelFunc(\n             forward, inputs as {} as NamedTensorMap, null /* gradient */, Div,\n             attrs) as T;\n}\n\nexport const div = op({div_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor} from '../tensor';\nimport {computeStrides} from '../util';\n\n/**\n * Validate gather nd inputs.\n *\n * @param tensor The tensor contains the source values.\n * @param indices The tensor contains the indices to slice the source.\n *\n * @returns [resultShape, numUpdates, sliceSize, strides]\n */\nexport function prepareAndValidate(\n    tensor: Tensor, indices: Tensor): [number[], number, number, number[]] {\n  if (tensor.rank < 1) {\n    throw new Error(\n        'tf.gatherND() expects the input to be rank 1 or higher,' +\n        ` but the rank was ${tensor.rank}.`);\n  }\n  if (indices.rank < 1) {\n    throw new Error(\n        'tf.gatherND() expects the indices to be rank 1 or higher,' +\n        ` but the rank was ${indices.rank}.`);\n  }\n  if (indices.dtype !== 'int32') {\n    throw new Error(\n        'tf.gatherND() expects the indices to be int32 type,' +\n        ` but the dtype was ${indices.dtype}.`);\n  }\n  if (indices.shape[indices.rank - 1] > tensor.rank) {\n    throw new Error(\n        'index innermost dimension length must be <= tensor rank; saw: ' +\n        `${indices.shape[indices.rank - 1]} vs. ${tensor.rank}`);\n  }\n\n  if (tensor.size === 0) {\n    throw new Error(\n        'Requested more than 0 entries, but input is empty.' +\n        ` Input shape: ${tensor.shape}.`);\n  }\n\n  const indicesShape = indices.shape;\n  const sliceRank = indicesShape[indicesShape.length - 1];\n\n  // The result shape is\n  //   indices.shape[:-1] + params.shape[indices.shape[-1]:]\n  let nResult = 1;\n  for (let i = 0; i < indicesShape.length - 1; ++i) {\n    nResult *= indicesShape[i];\n  }\n\n  const inputShape = tensor.shape;\n\n  const resultShape = indicesShape.slice();\n  resultShape.pop();\n\n  let sliceSize = 1;\n  for (let i = sliceRank; i < tensor.rank; ++i) {\n    sliceSize *= inputShape[i];\n    resultShape.push(inputShape[i]);\n  }\n\n  const strides =\n      [...computeStrides(tensor.shape).map(stride => stride / sliceSize),\n       1].slice(0, sliceRank);\n\n  return [resultShape, nResult, sliceSize, strides];\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Inputs of size above this threshold will be parallelized by calling multiple\n * shader programs.\n */\nimport {nearestDivisor} from '../util';\n\nexport const PARALLELIZE_THRESHOLD = 30;\n\nexport interface ReduceInfo {\n  windowSize: number;\n  batchSize: number;\n  inSize: number;\n}\n\nexport function computeOptimalWindowSize(inSize: number): number {\n  if (inSize <= PARALLELIZE_THRESHOLD) {\n    return inSize;\n  }\n  return nearestDivisor(inSize, Math.floor(Math.sqrt(inSize)));\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {TensorInfo} from '../kernel_registry';\nimport {Tensor} from '../tensor';\nimport {computeStrides, sizeFromShape} from '../util';\n\n/**\n * Check whether updates.shape = indices.shape[:batchDim] +\n * shape[sliceDim:]\n *\n * @param x The input tensor.\n */\nexport function validateUpdateShape(\n    shape: number[], indices: Tensor, updates: Tensor) {\n  const sliceDim = (indices.rank > 1) ? indices.shape[indices.rank - 1] : 1;\n  const batchDim = (indices.rank > 1) ? indices.rank - 1 : 1;\n\n  const shapeError = 'Must have updates.shape = indices.shape[:batchDim] + ' +\n      `shape[sliceDim:], got updates.shape: ${updates.shape}` +\n      `, indices.shape: ${indices.shape}, shape: ${shape}` +\n      `, sliceDim: ${sliceDim}, and batchDim: ${batchDim}.`;\n\n  if (updates.rank < batchDim) {\n    throw new Error(shapeError + ` update.rank < ${batchDim}. `);\n  }\n  if (shape.length < sliceDim + (updates.rank - batchDim)) {\n    throw new Error(\n        shapeError +\n        ` Output shape length < ${sliceDim + (updates.rank - batchDim)}`);\n  }\n  if (updates.rank !== batchDim + shape.length - sliceDim) {\n    throw new Error(\n        shapeError + ` update.rank != ${batchDim + shape.length - sliceDim}`);\n  }\n  for (let d = 0; d < batchDim; ++d) {\n    if (updates.shape[d] !== indices.shape[d]) {\n      throw new Error(\n          shapeError +\n          ` updates.shape[${d}] (${updates.shape[d]}) != indices.shape[${d}] (${\n              indices.shape[d]}).`);\n    }\n  }\n  for (let d = 0; d < updates.rank - batchDim; ++d) {\n    if (updates.shape[d + batchDim] !== shape[d + sliceDim]) {\n      throw new Error(\n          shapeError +\n          ` updates.shape[${d + batchDim}] (${\n              updates.shape[d + batchDim]}) != shape[${d + batchDim}] (${\n              shape[d + batchDim]})`);\n    }\n  }\n}\n\nexport interface ScatterShapeInfo {\n  sliceRank: number;\n  numUpdates: number;\n  sliceSize: number;\n  strides: number[];\n  outputSize: number;\n}\n/**\n * Validate scatter nd inputs.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n */\nexport function validateInput(\n    updates: Tensor, indices: Tensor, shape: number[]) {\n  if (indices.rank < 1) {\n    throw new Error(\n        'tf.scatterND() expects the indices to be rank 1 or higher,' +\n        ` but the rank was ${indices.rank}.`);\n  }\n  if (updates.rank < 1) {\n    throw new Error(\n        'tf.scatterND() expects the updates to be rank 1 or higher,' +\n        ` but the rank was ${updates.rank}.`);\n  }\n  if (indices.dtype !== 'int32') {\n    throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${\n        indices.dtype}`);\n  }\n  if (shape.length < 1) {\n    throw new Error(\n        `Output rank must be greater or equal to 1, but got shape: ${shape}`);\n  }\n\n  if (shape.length === 0) {\n    if (indices.size === 0) {\n      throw new Error(`Indices specified for empty output. indices shape: ${\n          indices.shape}`);\n    }\n    if (updates.size === 0) {\n      throw new Error(`Updates specified for empty output. updates shape: ${\n          updates.shape}`);\n    }\n  }\n\n  validateUpdateShape(shape, indices, updates);\n}\n\n/**\n * Calculate the shape information for the output.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n *\n * @returns ScatterShapeInfo\n */\nexport function calculateShapes(\n    updates: TensorInfo, indices: TensorInfo,\n    shape: number[]): ScatterShapeInfo {\n  // Calculate the number of dimensions in indices\n  const indicesRank = indices.shape.length;\n  const sliceRank = (indicesRank > 1) ? indices.shape[indicesRank - 1] : 1;\n\n  // Calculate the number of elements that make up each slice of our updated\n  // tensor. This allows us to work with flattened tensors and copy over whole\n  // slices at a time.\n  const totalNd = shape.length;\n\n  let sliceSize = 1;\n  for (let i = sliceRank; i < totalNd; ++i) {\n    sliceSize *= shape[i];\n  }\n\n  const safeSliceDim = (sliceRank < 1) ? 1 : sliceRank;\n  const numUpdates = sizeFromShape(indices.shape) / safeSliceDim;\n\n  const strides = [...computeStrides(shape.slice(0, sliceRank)), 1];\n  const outputSize = sizeFromShape(shape);\n  return {sliceRank, numUpdates, sliceSize, strides, outputSize};\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport * as util from '../util';\n\nexport function assertParamsValid(\n    input: Tensor, begin: number[], size: number[]): void {\n  util.assert(\n      input.rank === begin.length,\n      () => `Error in slice${input.rank}D: Length of begin ${begin} must ` +\n          `match the rank of the array (${input.rank}).`);\n  util.assert(\n      input.rank === size.length,\n      () => `Error in slice${input.rank}D: Length of size ${size} must ` +\n          `match the rank of the array (${input.rank}).`);\n\n  for (let i = 0; i < input.rank; ++i) {\n    util.assert(\n        begin[i] + size[i] <= input.shape[i],\n        () => `Error in slice${input.rank}D: begin[${i}] + size[${i}] ` +\n            `(${begin[i] + size[i]}) would overflow input.shape[${i}] (${\n                  input.shape[i]})`);\n  }\n}\n\n/** Converts a binary mask to an array of axes. Used in stridedSlice(). */\nexport function maskToAxes(mask: number): number[] {\n  const axes = [];\n  let axis = 0;\n  while (mask > 0) {\n    if (mask & 1) {\n      axes.push(axis);\n    }\n    mask /= 2;\n    axis++;\n  }\n  return axes;\n}\n\n/** Computes the output shape given the strided slice params. */\nexport function computeOutShape(\n    begin: number[], end: number[], strides: number[]): number[] {\n  const size = [];\n  for (let axis = 0; axis < begin.length; axis++) {\n    size[axis] = Math.ceil((end[axis] - begin[axis]) / strides[axis]);\n  }\n  return size;\n}\n\nexport function startForAxis(\n    beginMask: number, startIndices: number[], strides: number[],\n    inputShape: number[], axis: number): number {\n  // Begin with the specified index\n  let start = startIndices[axis];\n  const stride = strides[axis] || 1;\n\n  // Check the axis bit from right of beginMask or the begin index is not set\n  // for the axis.\n  if (beginMask & 1 << axis || start == null) {\n    if (stride > 0) {\n      // Forward iteration - use the first element. These values will get\n      // clamped below (Note: We could have set them to 0 and axis_size-1, but\n      // use lowest() and max() to maintain symmetry with StopForAxis())\n      start = Number.MIN_SAFE_INTEGER;\n    } else {\n      // Backward iteration - use the last element.\n      start = Number.MAX_SAFE_INTEGER;\n    }\n  }\n\n  // Handle negative indices\n  const axisSize = inputShape[axis];\n  if (start < 0) {\n    start += axisSize;\n  }\n\n  // Clamping\n  start = util.clamp(0, start, axisSize - 1);\n\n  return start;\n}\n\nexport function stopForAxis(\n    endMask: number, stopIndices: number[], strides: number[],\n    inputShape: number[], axis: number): number {\n  // Begin with the specified index\n  let stop = stopIndices[axis];\n  const stride = strides[axis] || 1;\n\n  // Check the axis bit from right of endMask or if the stop index is not set\n  // for this axis.\n  if (endMask & (1 << axis) || stop == null) {\n    if (stride > 0) {\n      // Forward iteration - use the last element. These values will get\n      // clamped below\n      stop = Number.MAX_SAFE_INTEGER;\n    } else {\n      // Backward iteration - use the first element.\n      stop = Number.MIN_SAFE_INTEGER;\n    }\n  }\n\n  // Handle negative indices\n  const axisSize = inputShape[axis];\n  if (stop < 0) {\n    stop += axisSize;\n  }\n\n  // Clamping\n  // Because the end index points one past the last element, we need slightly\n  // different clamping ranges depending on the direction.\n  if (stride > 0) {\n    // Forward iteration\n    stop = util.clamp(0, stop, axisSize);\n  } else {\n    // Backward iteration\n    stop = util.clamp(-1, stop, axisSize - 1);\n  }\n\n  return stop;\n}\n\n/**\n * Returns true if the slice occupies a continous set of elements in the\n * 'flat' space.\n */\nexport function isSliceContinous(\n    shape: number[], begin: number[], size: number[]) {\n  // Index of the first axis that has size > 1.\n  let firstNonOneAxis = size.length;\n  for (let i = 0; i < size.length; i++) {\n    if (size[i] > 1) {\n      firstNonOneAxis = i;\n      break;\n    }\n  }\n\n  for (let i = firstNonOneAxis + 1; i < size.length; i++) {\n    if (begin[i] > 0 || size[i] !== shape[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function computeFlatOffset(begin: number[], strides: number[]): number {\n  let flatOffset = begin.length > 0 ? begin[begin.length - 1] : 1;\n  for (let i = 0; i < begin.length - 1; i++) {\n    flatOffset += begin[i] * strides[i];\n  }\n  return flatOffset;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {CustomGradientFunc, ENGINE} from './engine';\nimport {Scalar, Tensor, Variable} from './tensor';\nimport {NamedTensorMap} from './tensor_types';\nimport {convertToTensor, convertToTensorArray} from './tensor_util_env';\nimport {TensorLike} from './types';\nimport * as util from './util';\n\n/**\n * Provided `f(x)`, returns another function `g(x, dy?)`, which gives the\n * gradient of `f(x)` with respect to `x`.\n *\n * If `dy` is provided, the gradient of `f(x).mul(dy).sum()` with respect to\n * `x` is computed instead. `f(x)` must take a single tensor `x` and return a\n * single tensor `y`. If `f()` takes multiple inputs, use `tf.grads` instead.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.grad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * g(x).print();\n * ```\n *\n * ```js\n * // f(x) = x ^ 3\n * const f = x => x.pow(tf.scalar(3, 'int32'));\n * // f'(x) = 3x ^ 2\n * const g = tf.grad(f);\n * // f''(x) = 6x\n * const gg = tf.grad(g);\n *\n * const x = tf.tensor1d([2, 3]);\n * gg(x).print();\n * ```\n *\n * @param f The function f(x), to compute gradient for.\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction grad(f: (x: Tensor) => Tensor): (\n    x: TensorLike|Tensor, dy?: TensorLike|Tensor) => Tensor {\n  util.assert(\n      util.isFunction(f), () => 'The f passed in grad(f) must be a function');\n  return (x: TensorLike|Tensor, dy?: TensorLike|Tensor): Tensor => {\n    // x can be of any dtype, thus null as the last argument.\n    const $x = convertToTensor(x, 'x', 'tf.grad', null);\n    const $dy: Tensor =\n        (dy != null) ? convertToTensor(dy, 'dy', 'tf.grad') : null;\n    return ENGINE.tidy(() => {\n      const {value, grads} = ENGINE.gradients(() => f($x), [$x], $dy);\n      if ($dy != null) {\n        util.assertShapesMatch(\n            value.shape, $dy.shape,\n            'The shape of dy passed in grad(f)(x, dy) must match the shape ' +\n                'returned by f(x)');\n      }\n      checkGrads(grads);\n      return grads[0];\n    });\n  };\n}\n\n/**\n * Provided `f(x1, x2,...)`, returns another function `g([x1, x2,...], dy?)`,\n * which gives an array of gradients of `f()` with respect to each input\n * [`x1`,`x2`,...].\n *\n * If `dy` is passed when calling `g()`, the gradient of\n * `f(x1,...).mul(dy).sum()` with respect to each input is computed instead.\n * The provided `f` must take one or more tensors and return a single tensor\n * `y`. If `f()` takes a single input, we recommend using `tf.grad` instead.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df / da = b, df / db = a\n * const g = tf.grads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const [da, db] = g([a, b]);\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n *\n * @param f The function `f(x1, x2,...)` to compute gradients for.\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction grads(f: (...args: Tensor[]) => Tensor): (\n    args: Array<Tensor|TensorLike>, dy?: Tensor|TensorLike) => Tensor[] {\n  util.assert(\n      util.isFunction(f), () => 'The f passed in grads(f) must be a function');\n  return (args: Array<Tensor|TensorLike>, dy?: Tensor|TensorLike): Tensor[] => {\n    util.assert(\n        Array.isArray(args),\n        () => 'The args passed in grads(f)(args) must be an array ' +\n            'of `Tensor`s or `TensorLike`s');\n    // args can be of any dtype, thus null as the last argument.\n    const $args = convertToTensorArray(args, 'args', 'tf.grads', null);\n    const $dy: Tensor =\n        (dy != null) ? convertToTensor(dy, 'dy', 'tf.grads') : null;\n    return ENGINE.tidy(() => {\n      const {value, grads} = ENGINE.gradients(() => f(...$args), $args, $dy);\n      if ($dy != null) {\n        util.assertShapesMatch(\n            value.shape, $dy.shape,\n            'The shape of dy passed in grads(f)([x1,...], dy) must ' +\n                'match the shape returned by f([x1,...])');\n      }\n      checkGrads(grads);\n      return grads;\n    });\n  };\n}\n\n/**\n * Like `tf.grad`, but also returns the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grad: The gradient of `f(x)` w.r.t `x` (result of `tf.grad`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.valueAndGrad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * const {value, grad} = g(x);\n *\n * console.log('value');\n * value.print();\n * console.log('grad');\n * grad.print();\n * ```\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction valueAndGrad<I extends Tensor, O extends Tensor>(f: (x: I) => O): (\n    x: I, dy?: O) => {\n  value: O;\n  grad: I;\n} {\n  util.assert(\n      util.isFunction(f),\n      () => 'The f passed in valueAndGrad(f) must be a function');\n  return (x: I, dy?: O) => {\n    util.assert(\n        x instanceof Tensor,\n        () => 'The x passed in valueAndGrad(f)(x) must be a tensor');\n    util.assert(\n        dy == null || dy instanceof Tensor,\n        () => 'The dy passed in valueAndGrad(f)(x, dy) must be a tensor');\n    const {grads, value} = ENGINE.gradients(() => f(x), [x], dy);\n    checkGrads(grads);\n    return {grad: grads[0] as I, value};\n  };\n}\n\n/**\n * Like `tf.grads`, but returns also the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grads: The gradients of `f()` w.r.t each input (result of `tf.grads`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df/da = b, df/db = a\n * const g = tf.valueAndGrads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const {value, grads} = g([a, b]);\n *\n * const [da, db] = grads;\n *\n * console.log('value');\n * value.print();\n *\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction valueAndGrads<O extends Tensor>(f: (...args: Tensor[]) => O): (\n    args: Tensor[], dy?: O) => {\n  grads: Tensor[];\n  value: O;\n} {\n  util.assert(\n      util.isFunction(f),\n      () => 'The f passed in valueAndGrads(f) must be a function');\n  return (args: Tensor[], dy?: O) => {\n    util.assert(\n        Array.isArray(args) && args.every(arg => arg instanceof Tensor),\n        () => 'The args passed in valueAndGrads(f)(args) must be array of ' +\n            'tensors');\n    util.assert(\n        dy == null || dy instanceof Tensor,\n        () => 'The dy passed in valueAndGrads(f)(args, dy) must be a tensor');\n    const res = ENGINE.gradients(() => f(...args), args, dy);\n    if (dy != null) {\n      util.assertShapesMatch(\n          res.value.shape, dy.shape,\n          'The shape of dy passed in valueAndGrads(f)([x1,...], dy) must ' +\n              'match the shape returned by f([x1,...])');\n    }\n    checkGrads(res.grads);\n    return res;\n  };\n}\n\n/**\n * Computes and returns the gradient of f(x) with respect to the list of\n * trainable variables provided by `varList`. If no list is provided, it\n * defaults to all trainable variables.\n *\n * ```js\n * const a = tf.variable(tf.tensor1d([3, 4]));\n * const b = tf.variable(tf.tensor1d([5, 6]));\n * const x = tf.tensor1d([1, 2]);\n *\n * // f(a, b) = a * x ^ 2 + b * x\n * const f = () => a.mul(x.square()).add(b.mul(x)).sum();\n * // df/da = x ^ 2, df/db = x\n * const {value, grads} = tf.variableGrads(f);\n *\n * Object.keys(grads).forEach(varName => grads[varName].print());\n * ```\n *\n * @param f The function to execute. f() should return a scalar.\n * @param varList The list of variables to compute the gradients with respect\n *     to. Defaults to all trainable variables.\n * @returns An object with the following keys and values:\n *   - `value`: The value of the function `f`.\n *   - `grads`: A map from the names of the variables to the gradients.\n *     If the `varList` argument is provided explicitly and contains a subset of\n *     non-trainable variables, this map in the return value will contain keys\n *     that map the names of the non-trainable variables to `null`.\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction variableGrads(f: () => Scalar, varList?: Variable[]):\n    {value: Scalar, grads: NamedTensorMap} {\n  util.assert(\n      util.isFunction(f),\n      () => 'The f passed in variableGrads(f) must be a function');\n  util.assert(\n      varList == null ||\n          Array.isArray(varList) && varList.every(v => v instanceof Variable),\n      () =>\n          'The varList passed in variableGrads(f, varList) must be an array ' +\n          'of variables');\n\n  const specifiedVarList = varList != null;\n  if (!specifiedVarList) {\n    // Get all of the trainable variables.\n    varList = [];\n    for (const varName in ENGINE.registeredVariables) {\n      varList.push(ENGINE.registeredVariables[varName]);\n    }\n  }\n\n  const specifiedNonTrainable: Variable[] =\n      specifiedVarList ? varList.filter(variable => !variable.trainable) : null;\n\n  // Prune non-trainable variables.\n  const originalVarCount = varList.length;\n  varList = varList.filter(variable => variable.trainable);\n  util.assert(\n      varList.length > 0,\n      () => `variableGrads() expects at least one of the input variables to ` +\n          `be trainable, but none of the ${originalVarCount} variables is ` +\n          `trainable.`);\n\n  const allowNoGradients = true;\n  const {value, grads} = ENGINE.gradients(f, varList, null, allowNoGradients);\n\n  util.assert(\n      grads.some(g => g != null),\n      () => 'Cannot find a connection between any variable and the result of ' +\n          'the loss function y=f(x). Please make sure the operations that ' +\n          'use variables are inside the function f passed to minimize().');\n  util.assert(\n      value.rank === 0,\n      () => `The f passed in variableGrads(f) must return a scalar, but it ` +\n          `returned a rank-${value.rank} tensor`);\n\n  const namedGrads: NamedTensorMap = {};\n  varList.forEach((v, i) => {\n    if (grads[i] != null) {\n      namedGrads[v.name] = grads[i];\n    }\n  });\n  if (specifiedNonTrainable != null) {\n    // If varList is explicitly provided and contains non-trainable values,\n    // add them to the returned gradients with `null` values.\n    specifiedNonTrainable.forEach(v => namedGrads[v.name] = null);\n  }\n  return {value, grads: namedGrads};\n}\n\n/**\n * Overrides the gradient computation of a function `f`.\n *\n * Takes a function\n * `f(...inputs, save) => {value: Tensor, gradFunc: (dy, saved) => Tensor[]}`\n * and returns another function `g(...inputs)` which takes the same inputs as\n * `f`. When called, `g` returns `f().value`. In backward mode, custom gradients\n * with respect to each input of `f` are computed using `f().gradFunc`.\n *\n * The `save` function passsed to `f` should be used for saving tensors needed\n * in the gradient. And the `saved` passed to the `gradFunc` is a\n * `NamedTensorMap`, which contains those saved tensor.\n *\n * ```js\n * const customOp = tf.customGrad((x, save) => {\n *   // Save x to make sure it's available later for the gradient.\n *   save([x]);\n *   // Override gradient of our custom x ^ 2 op to be dy * abs(x);\n *   return {\n *     value: x.square(),\n *     // Note `saved.x` which points to the `x` we saved earlier.\n *     gradFunc: (dy, saved) => [dy.mul(saved[0].abs())]\n *   };\n * });\n *\n * const x = tf.tensor1d([-1, -2, 3]);\n * const dx = tf.grad(x => customOp(x));\n *\n * console.log(`f(x):`);\n * customOp(x).print();\n * console.log(`f'(x):`);\n * dx(x).print();\n * ```\n *\n * @param f The function to evaluate in forward mode, which should return\n *     `{value: Tensor, gradFunc: (dy, saved) => Tensor[]}`, where `gradFunc`\n *     returns the custom gradients of `f` with respect to its inputs.\n */\n/** @doc {heading: 'Training', subheading: 'Gradients'} */\nfunction customGrad<T extends Tensor>(f: CustomGradientFunc<T>):\n    (...args: Tensor[]) => T {\n  return ENGINE.customGrad(f);\n}\n\nfunction checkGrads(grads: Tensor[]) {\n  const numNullGradients = grads.filter(g => g == null).length;\n  if (numNullGradients > 0) {\n    throw new Error(\n        `Cannot compute gradient of y=f(x) with respect to x. Make sure that\n    the f you passed encloses all operations that lead from x to y.`);\n  }\n}\n\nexport {\n  customGrad,\n  variableGrads,\n  valueAndGrad,\n  valueAndGrads,\n  grad,\n  grads,\n};\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {customGrad} from '../gradients';\nimport {Tensor} from '../tensor';\nimport {GradSaveFunc} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Computes the softmax normalized vector given the logits.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.softmax().print();  // or tf.softmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.softmax().print();  // or tf.softmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n *     which indicates the last dimension.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction softmax_<T extends Tensor>(logits: T|TensorLike, dim = -1): T {\n  const $logits = convertToTensor(logits, 'logits', 'softmax', 'float32');\n\n  if (dim === -1) {\n    dim = $logits.rank - 1;\n  }\n  if (dim !== $logits.rank - 1) {\n    throw Error(\n        'Softmax along a non-last dimension is not yet supported. ' +\n        `Logits was rank ${$logits.rank} and dim was ${dim}`);\n  }\n\n  const inputsToSave: Tensor[] = [];\n  const outputsToSave = [true];\n\n  return ENGINE.runKernelFunc(\n      (backend, save) => {\n        const y = backend.softmax($logits, dim);\n        save([y]);\n        return y;\n      },\n      {logits: $logits},\n      (dy: T, saved: Tensor[]) => {\n        const [y] = saved;\n        const dyTimesY = dy.mul(y);\n        const keepDims = true;\n\n        return {\n          logits: () => dyTimesY.sub(dyTimesY.sum([dim], keepDims).mul(y))\n        };\n      },\n      'Softmax', {dim}, inputsToSave, outputsToSave);\n}\n\n/**\n * Computes the log softmax.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.logSoftmax().print();  // or tf.logSoftmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.logSoftmax().print();  // or tf.logSoftmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param axis The dimension softmax would be performed on. Defaults to `-1`\n *     which indicates the last dimension.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction logSoftmax_<T extends Tensor>(logits: T|TensorLike, axis = -1): T {\n  const $logits = convertToTensor(logits, 'logits', 'logSoftmax');\n\n  if (axis === -1) {\n    axis = $logits.rank - 1;\n  }\n  if (axis !== $logits.rank - 1) {\n    throw Error(\n        'Log Softmax along a non-last dimension is not yet supported. ' +\n        `Logits was rank ${$logits.rank} and axis was ${axis}`);\n  }\n\n  const customOp = customGrad((logits: Tensor, save: GradSaveFunc) => {\n    const keepDims = true;\n    const xMax = logits.max(axis, true);\n    const shifted = logits.sub(xMax);\n    const value =\n        shifted.toFloat().sub(shifted.exp().sum(axis, keepDims).log());\n    save([value]);\n    const gradFunc = (dy: T, saved: Tensor[]) => {\n      const [value] = saved;\n      const softmax = value.exp();\n      return dy.sub(dy.sum(axis, keepDims).mul(softmax));\n    };\n\n    return {value, gradFunc};\n  });\n\n  return customOp($logits) as T;\n}\n\nexport const softmax = op({softmax_});\nexport const logSoftmax = op({logSoftmax_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {op} from './operation';\n\n/**\n * Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.\n *\n * The returned `tf.Tensor`'s dimension `i` will correspond to the input\n * dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,\n * where `n` is the rank of the input `tf.Tensor`. Hence by default, this\n * operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);\n *\n * a.transpose().print();  // or tf.transpose(a)\n * ```\n *\n * @param x The tensor to transpose.\n * @param perm The permutation of the dimensions of a.\n */\n/** @doc {heading: 'Operations', subheading: 'Matrices'} */\nfunction transpose_<T extends Tensor>(x: T|TensorLike, perm?: number[]): T {\n  const $x = convertToTensor(x, 'x', 'transpose');\n\n  if (perm == null) {\n    perm = $x.shape.map((s, i) => i).reverse();\n  }\n  util.assert(\n      $x.rank === perm.length,\n      () => `Error in transpose: rank of input ${$x.rank} ` +\n          `must match length of perm ${perm}.`);\n  perm.forEach(axis => {\n    util.assert(\n        axis >= 0 && axis < $x.rank,\n        () => `All entries in 'perm' must be between 0 and ${$x.rank - 1}` +\n            ` but got ${perm}`);\n  });\n\n  if ($x.rank <= 1) {\n    return $x.clone();\n  }\n\n  const attrs = {perm};\n  return ENGINE.runKernelFunc(\n      backend => backend.transpose($x, perm), {x: $x}, null /* gradient */,\n      'Transpose', attrs);\n}\n\nexport const transpose = op({transpose_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo, Conv3DInfo} from '../ops/conv_util';\nimport {FusedBatchMatMulConfig, FusedConv2DConfig} from '../ops/fused_util';\nimport {Backend, DataId, Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D} from '../tensor';\nimport {BackendValues, DataType, Rank, ShapeMap} from '../types';\n\nexport const EPSILON_FLOAT32 = 1e-7;\nexport const EPSILON_FLOAT16 = 1e-4;\n\n// Required information for all backends.\nexport interface BackendTimingInfo {\n  kernelMs: number|{error: string};\n  getExtraProfileInfo?(): string;  // a field for additional timing information\n                                   // e.g. packing / unpacking for WebGL backend\n}\n\nexport interface TensorStorage {\n  read(dataId: DataId): Promise<BackendValues>;\n  readSync(dataId: DataId): BackendValues;\n  disposeData(dataId: DataId): void;\n  write(values: BackendValues, shape: number[], dtype: DataType): DataId;\n  move(dataId: DataId, values: BackendValues, shape: number[], dtype: DataType):\n      void;\n  memory(): {unreliable: boolean;};  // Backend-specific information.\n  /** Returns number of data ids currently in the storage. */\n  numDataIds(): number;\n}\n\n/** Convenient class for storing tensor-related data. */\nexport class DataStorage<T> {\n  private data = new WeakMap<DataId, T>();\n  private dataIdsCount = 0;\n\n  constructor(private backend: KernelBackend, private dataMover: DataMover) {}\n\n  get(dataId: DataId) {\n    if (!this.data.has(dataId)) {\n      this.dataMover.moveData(this.backend, dataId);\n    }\n    return this.data.get(dataId);\n  }\n\n  set(dataId: DataId, value: T): void {\n    this.dataIdsCount++;\n    this.data.set(dataId, value);\n  }\n\n  has(dataId: DataId): boolean {\n    return this.data.has(dataId);\n  }\n\n  delete(dataId: DataId): boolean {\n    this.dataIdsCount--;\n    return this.data.delete(dataId);\n  }\n\n  numDataIds(): number {\n    return this.dataIdsCount;\n  }\n}\n\nexport interface DataMover {\n  /**\n   * To be called by backends whenever they see a dataId that they don't own.\n   * Upon calling this method, the mover will fetch the tensor from another\n   * backend and register it with the current active backend.\n   */\n  moveData(backend: KernelBackend, dataId: DataId): void;\n}\n\nexport interface BackendTimer {\n  time(f: () => void): Promise<BackendTimingInfo>;\n}\n\n/**\n * The interface that defines the kernels that should be implemented when\n * adding a new backend. New backends don't need to implement every one of the\n * methods, this can be done gradually (throw an error for unimplemented\n * methods).\n */\nexport class KernelBackend implements TensorStorage, Backend, BackendTimer {\n  time(f: () => void): Promise<BackendTimingInfo> {\n    return notYetImplemented('time');\n  }\n  read(dataId: object): Promise<BackendValues> {\n    return notYetImplemented('read');\n  }\n  readSync(dataId: object): BackendValues {\n    return notYetImplemented('readSync');\n  }\n  numDataIds(): number {\n    return notYetImplemented('numDataIds');\n  }\n  disposeData(dataId: object): void {\n    return notYetImplemented('disposeData');\n  }\n  write(values: BackendValues, shape: number[], dtype: DataType): DataId {\n    return notYetImplemented('write');\n  }\n  move(dataId: DataId, values: BackendValues, shape: number[], dtype: DataType):\n      void {\n    return notYetImplemented('move');\n  }\n  memory(): {unreliable: boolean; reasons?: string[]} {\n    return notYetImplemented('memory');\n  }\n  /** Returns the highest precision for floats in bits (e.g. 16 or 32) */\n  floatPrecision(): 16|32 {\n    return notYetImplemented('floatPrecision');\n  }\n  /** Returns the smallest representable number.  */\n  epsilon(): number {\n    return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n  }\n\n  batchMatMul(\n      a: Tensor3D, b: Tensor3D, transposeA: boolean,\n      transposeB: boolean): Tensor3D {\n    return notYetImplemented('batchMatMul');\n  }\n\n  fusedBatchMatMul(\n      {a, b, transposeA, transposeB, bias, activation, preluActivationWeights}:\n          FusedBatchMatMulConfig): Tensor3D {\n    return notYetImplemented('fusedBatchMatMul');\n  }\n\n  slice<T extends Tensor>(x: T, begin: number[], size: number[]): T {\n    return notYetImplemented('slice');\n  }\n  stridedSlice<T extends Tensor>(\n      x: T, begin: number[], end: number[], strides: number[]): T {\n    return notYetImplemented('stridedSlice');\n  }\n  unstack(x: Tensor, axis: number): Tensor[] {\n    return notYetImplemented('unstack');\n  }\n  reverse<T extends Tensor>(a: T, axis: number[]): T {\n    return notYetImplemented('reverse');\n  }\n\n  concat(tensors: Tensor[], axis: number): Tensor {\n    return notYetImplemented('concat');\n  }\n\n  neg<T extends Tensor>(a: T): T {\n    return notYetImplemented('neg');\n  }\n\n  add(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('add');\n  }\n  addN<T extends Tensor>(tensors: T[]): T {\n    return notYetImplemented('addN');\n  }\n  subtract(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('subtract');\n  }\n  multiply(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('multiply');\n  }\n  realDivide(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('realDivide');\n  }\n  floorDiv(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('floorDiv');\n  }\n\n  sum(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('sum');\n  }\n  prod(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('prod');\n  }\n\n  unsortedSegmentSum<T extends Tensor>(\n      x: T, segmentIds: Tensor1D, numSegments: number): Tensor {\n    return notYetImplemented('unsortedSegmentSum');\n  }\n\n  argMin(x: Tensor, axis: number): Tensor {\n    return notYetImplemented('argMin');\n  }\n  argMax(x: Tensor, axis: number): Tensor {\n    return notYetImplemented('argMax');\n  }\n\n  equal(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('equal');\n  }\n  notEqual(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('notEqual');\n  }\n\n  less(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('less');\n  }\n  lessEqual(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('lessEqual');\n  }\n\n  greater(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('greater');\n  }\n  greaterEqual(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('greaterEqual');\n  }\n\n  logicalNot<T extends Tensor>(a: T): T {\n    return notYetImplemented('logicalNot');\n  }\n  logicalAnd(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('logicalAnd');\n  }\n  logicalOr(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('logicalOr');\n  }\n\n  where(condition: Tensor): Tensor2D {\n    return notYetImplemented('where');\n  }\n  select(condition: Tensor, a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('select');\n  }\n\n  topk<T extends Tensor>(x: T, k: number, sorted: boolean): [T, T] {\n    return notYetImplemented('topk');\n  }\n\n  min(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('min');\n  }\n  minimum(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('minimum');\n  }\n\n  mod(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('mod');\n  }\n\n  max(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('max');\n  }\n  maximum(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('maximum');\n  }\n\n  all(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('all');\n  }\n  any(x: Tensor, axes: number[]): Tensor {\n    return notYetImplemented('any');\n  }\n\n  squaredDifference(a: Tensor, b: Tensor): Tensor {\n    return notYetImplemented('squaredDifference');\n  }\n\n  ceil<T extends Tensor>(x: T): T {\n    return notYetImplemented('ceil');\n  }\n  floor<T extends Tensor>(x: T): T {\n    return notYetImplemented('floor');\n  }\n  round<T extends Tensor>(x: T): T {\n    return notYetImplemented('round');\n  }\n\n  sign<T extends Tensor>(x: T): T {\n    return notYetImplemented('sign');\n  }\n\n  isNaN<T extends Tensor>(x: T): T {\n    return notYetImplemented('isNaN');\n  }\n  isInf<T extends Tensor>(x: T): T {\n    return notYetImplemented('isInf');\n  }\n  isFinite<T extends Tensor>(x: T): T {\n    return notYetImplemented('isFinite');\n  }\n\n  pow<T extends Tensor>(a: T, b: Tensor): T {\n    return notYetImplemented('pow');\n  }\n  exp<T extends Tensor>(x: T): T {\n    return notYetImplemented('exp');\n  }\n  expm1<T extends Tensor>(x: T): T {\n    return notYetImplemented('expm1');\n  }\n  softmax<T extends Tensor>(x: T, dim: number): T {\n    return notYetImplemented('softmax');\n  }\n  log<T extends Tensor>(x: T): T {\n    return notYetImplemented('log');\n  }\n  log1p<T extends Tensor>(x: T): T {\n    return notYetImplemented('log1p');\n  }\n  sqrt<T extends Tensor>(x: T): T {\n    return notYetImplemented('sqrt');\n  }\n  rsqrt<T extends Tensor>(x: T): T {\n    return notYetImplemented('rsqrt');\n  }\n  square<T extends Tensor>(x: T): T {\n    return notYetImplemented('square');\n  }\n  reciprocal<T extends Tensor>(x: T): T {\n    return notYetImplemented('reciprocal');\n  }\n  relu<T extends Tensor>(x: T): T {\n    return notYetImplemented('relu');\n  }\n  relu6<T extends Tensor>(x: T): T {\n    return notYetImplemented('relu6');\n  }\n  prelu<T extends Tensor>(x: T, a: T): T {\n    return notYetImplemented('prelu');\n  }\n  elu<T extends Tensor>(x: T): T {\n    return notYetImplemented('elu');\n  }\n  eluDer<T extends Tensor>(dy: T, y: T): T {\n    return notYetImplemented('eluDer');\n  }\n  selu<T extends Tensor>(x: T): T {\n    return notYetImplemented('selu');\n  }\n  int<T extends Tensor>(x: T): T {\n    return notYetImplemented('int');\n  }\n\n  clip<T extends Tensor>(x: T, min: number, max: number): T {\n    return notYetImplemented('clip');\n  }\n\n  abs<T extends Tensor>(x: T): T {\n    return notYetImplemented('abs');\n  }\n  complexAbs<T extends Tensor>(x: T): T {\n    return notYetImplemented('complexAbs');\n  }\n\n  sigmoid<T extends Tensor>(x: T): T {\n    return notYetImplemented('sigmoid');\n  }\n\n  softplus<T extends Tensor>(x: T): T {\n    return notYetImplemented('softplus');\n  }\n\n  sin<T extends Tensor>(x: T): T {\n    return notYetImplemented('sin');\n  }\n  cos<T extends Tensor>(x: T): T {\n    return notYetImplemented('cos');\n  }\n  tan<T extends Tensor>(x: T): T {\n    return notYetImplemented('tan');\n  }\n\n  asin<T extends Tensor>(x: T): T {\n    return notYetImplemented('asin');\n  }\n  acos<T extends Tensor>(x: T): T {\n    return notYetImplemented('acos');\n  }\n  atan<T extends Tensor>(x: T): T {\n    return notYetImplemented('atan');\n  }\n  atan2<T extends Tensor>(a: T, b: T): T {\n    return notYetImplemented('atan2');\n  }\n\n  sinh<T extends Tensor>(x: T): T {\n    return notYetImplemented('sinh');\n  }\n  cosh<T extends Tensor>(x: T): T {\n    return notYetImplemented('cosh');\n  }\n  tanh<T extends Tensor>(x: T): T {\n    return notYetImplemented('tanh');\n  }\n\n  asinh<T extends Tensor>(x: T): T {\n    return notYetImplemented('asinh');\n  }\n  acosh<T extends Tensor>(x: T): T {\n    return notYetImplemented('acosh');\n  }\n  atanh<T extends Tensor>(x: T): T {\n    return notYetImplemented('atanh');\n  }\n\n  erf<T extends Tensor>(x: T): T {\n    return notYetImplemented('erf');\n  }\n\n  step<T extends Tensor>(x: T, alpha: number): T {\n    return notYetImplemented('step');\n  }\n\n  fusedConv2d(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    return notYetImplemented('fusedConv2d');\n  }\n\n  conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    return notYetImplemented('conv2d');\n  }\n  conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    return notYetImplemented('conv2dDerInput');\n  }\n  conv2dDerFilter(x: Tensor4D, dY: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    return notYetImplemented('conv2dDerFilter');\n  }\n\n  fusedDepthwiseConv2D(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    return notYetImplemented('fusedDepthwiseConv2D');\n  }\n\n  depthwiseConv2D(input: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    return notYetImplemented('depthwiseConv2D');\n  }\n  depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    return notYetImplemented('depthwiseConv2DDerInput');\n  }\n  depthwiseConv2DDerFilter(x: Tensor4D, dY: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    return notYetImplemented('depthwiseConv2DDerFilter');\n  }\n  conv3d(x: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('conv3d');\n  }\n  conv3dDerInput(dy: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo):\n      Tensor5D {\n    return notYetImplemented('conv3dDerInput');\n  }\n  conv3dDerFilter(x: Tensor5D, dY: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('conv3dDerFilter');\n  }\n  maxPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    return notYetImplemented('maxPool');\n  }\n  maxPoolBackprop(dy: Tensor4D, x: Tensor4D, y: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    return notYetImplemented('maxPoolBackprop');\n  }\n  avgPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    return notYetImplemented('avgPool');\n  }\n  avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    return notYetImplemented('avgPoolBackprop');\n  }\n  avgPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('avgPool3d');\n  }\n  avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('avgPool3dBackprop');\n  }\n  maxPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('maxPool3d');\n  }\n  maxPool3dBackprop(\n      dy: Tensor5D, x: Tensor5D, y: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    return notYetImplemented('maxPool3dBackprop');\n  }\n\n  reshape<T extends Tensor, R extends Rank>(x: T, shape: ShapeMap[R]):\n      Tensor<R> {\n    return notYetImplemented('reshape');\n  }\n  cast<T extends Tensor>(x: T, dtype: DataType): T {\n    return notYetImplemented('cast');\n  }\n\n  tile<T extends Tensor>(x: T, reps: number[]): T {\n    return notYetImplemented('tile');\n  }\n\n  pad<T extends Tensor>(\n      x: T, paddings: Array<[number, number]>, constantValue: number): T {\n    return notYetImplemented('pad');\n  }\n\n  transpose<T extends Tensor>(x: T, perm: number[]): T {\n    return notYetImplemented('transpose');\n  }\n\n  gather<T extends Tensor>(x: T, indices: Tensor1D, axis: number): T {\n    return notYetImplemented('gather');\n  }\n\n  gatherND(x: Tensor, indices: Tensor): Tensor {\n    return notYetImplemented('gatherND');\n  }\n\n  scatterND<R extends Rank>(\n      indices: Tensor, updates: Tensor, shape: ShapeMap[R]): Tensor<R> {\n    return notYetImplemented('scatterND');\n  }\n\n  batchToSpaceND<T extends Tensor>(\n      x: T, blockShape: number[], crops: number[][]): T {\n    return notYetImplemented('batchToSpaceND');\n  }\n\n  spaceToBatchND<T extends Tensor>(\n      x: T, blockShape: number[], paddings: number[][]): T {\n    return notYetImplemented('spaceToBatchND');\n  }\n\n  resizeBilinear(\n      x: Tensor4D, newHeight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    return notYetImplemented('resizeBilinear');\n  }\n\n  resizeBilinearBackprop(dy: Tensor4D, x: Tensor4D, alignCorners: boolean):\n      Tensor4D {\n    return notYetImplemented('resizeBilinearBackprop');\n  }\n\n  resizeNearestNeighbor(\n      x: Tensor4D, newHEight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    return notYetImplemented('resizeNearestNeighbor');\n  }\n\n  resizeNearestNeighborBackprop(\n      dy: Tensor4D, x: Tensor4D, alignCorners: boolean): Tensor4D {\n    return notYetImplemented('resizeNearestNeighborBackprop');\n  }\n\n  batchNormalization(\n      x: Tensor4D, mean: Tensor4D|Tensor1D, variance: Tensor4D|Tensor1D,\n      varianceEpsilon: number, scale?: Tensor4D|Tensor1D,\n      offset?: Tensor4D|Tensor1D): Tensor4D {\n    return notYetImplemented('batchNormalization');\n  }\n\n  localResponseNormalization4D(\n      x: Tensor4D, radius: number, bias: number, alpha: number,\n      beta: number): Tensor4D {\n    return notYetImplemented('localResponseNormalization4D');\n  }\n\n  LRNGrad(\n      dy: Tensor4D, inputImage: Tensor4D, outputImage: Tensor4D, radius: number,\n      bias: number, alpha: number, beta: number): Tensor4D {\n    return notYetImplemented('LRNGrad');\n  }\n\n  multinomial(\n      logits: Tensor2D, normalized: boolean, numSamples: number,\n      seed: number): Tensor2D {\n    return notYetImplemented('multinomial');\n  }\n\n  oneHot(indices: Tensor1D, depth: number, onValue: number, offValue: number):\n      Tensor2D {\n    return notYetImplemented('oneHot');\n  }\n\n  cumsum(x: Tensor, axis: number, exclusive: boolean, reverse: boolean):\n      Tensor {\n    return notYetImplemented('cumsum');\n  }\n\n  nonMaxSuppression(\n      boxes: Tensor2D, scores: Tensor1D, maxOutputSize: number,\n      iouThreshold: number, scoreThreshold?: number): Tensor1D {\n    return notYetImplemented('nonMaxSuppression');\n  }\n\n  fft(x: Tensor2D): Tensor2D {\n    return notYetImplemented('fft');\n  }\n  ifft(x: Tensor2D): Tensor2D {\n    return notYetImplemented('ifft');\n  }\n  complex<T extends Tensor>(real: T, imag: T): T {\n    return notYetImplemented('complex');\n  }\n  real<T extends Tensor>(input: T): T {\n    return notYetImplemented('real');\n  }\n  imag<T extends Tensor>(input: T): T {\n    return notYetImplemented('imag');\n  }\n\n  cropAndResize(\n      image: Tensor4D, boxes: Tensor2D, boxIndex: Tensor1D,\n      cropSize: [number, number], method: 'bilinear'|'nearest',\n      extrapolationValue: number): Tensor4D {\n    return notYetImplemented('cropAndResize');\n  }\n\n  depthToSpace(x: Tensor4D, blockSize: number, dataFormat: string): Tensor4D {\n    return notYetImplemented('depthToSpace');\n  }\n\n  // Aligns with the \"SplitV\" kernel in TensorFlow.\n  split<T extends Tensor>(value: T, sizeSplits: number[], axis: number): T[] {\n    return notYetImplemented('split');\n  }\n\n  sparseToDense<R extends Rank>(\n      sparseIndices: Tensor, sparseValues: Tensor, outputShape: ShapeMap[R],\n      defaultValue: Scalar): Tensor<R> {\n    return notYetImplemented('sparseToDense');\n  }\n\n  diag(x: Tensor): Tensor {\n    return notYetImplemented('diag');\n  }\n\n  fill<R extends Rank>(\n      shape: ShapeMap[R], value: number|string, dtype?: DataType): Tensor<R> {\n    return notYetImplemented('fill');\n  }\n\n  onesLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    return notYetImplemented('onesLike');\n  }\n\n  zerosLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    return notYetImplemented('zerosLike');\n  }\n\n  linspace(start: number, stop: number, num: number): Tensor1D {\n    return notYetImplemented('linspace');\n  }\n\n  dispose(): void {\n    return notYetImplemented('dispose');\n  }\n}\n\nfunction notYetImplemented(kernelName: string): never {\n  throw new Error(\n      `'${kernelName}' not yet implemented or not found in the registry. ` +\n      `Did you forget to import the kernel?`);\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as util from '../util';\n\ntype PadType = 'SAME'|'VALID'|'NUMBER';\n\nexport type PadInfo = {\n  top: number,\n  left: number,\n  right: number,\n  bottom: number,\n  type: PadType\n};\n\nexport type PadInfo3D = {\n  top: number,\n  left: number,\n  right: number,\n  bottom: number,\n  front: number,\n  back: number,\n  type: PadType\n};\n\n/**\n * Information about the forward pass of a convolution/pooling operation.\n * It includes input and output shape, strides, filter size and padding\n * information.\n */\nexport type Conv2DInfo = {\n  batchSize: number,\n  inHeight: number,\n  inWidth: number,\n  inChannels: number,\n  outHeight: number,\n  outWidth: number,\n  outChannels: number,\n  dataFormat: 'channelsFirst'|'channelsLast',\n  strideHeight: number,\n  strideWidth: number,\n  dilationHeight: number,\n  dilationWidth: number,\n  filterHeight: number,\n  filterWidth: number,\n  effectiveFilterHeight: number,\n  effectiveFilterWidth: number,\n  padInfo: PadInfo,\n  inShape: [number, number, number, number],\n  outShape: [number, number, number, number],\n  filterShape: [number, number, number, number]\n};\n\nexport function computePool2DInfo(\n    inShape: [number, number, number, number],\n    filterSize: [number, number]|number, strides: number|[number, number],\n    dilations: number|[number, number], pad: 'same'|'valid'|number,\n    roundingMode?: 'floor'|'round'|'ceil',\n    dataFormat: 'channelsFirst'|'channelsLast' = 'channelsLast'): Conv2DInfo {\n  const [filterHeight, filterWidth] = parseTupleParam(filterSize);\n\n  let filterShape: [number, number, number, number];\n  if (dataFormat === 'channelsLast') {\n    filterShape = [filterHeight, filterWidth, inShape[3], inShape[3]];\n  } else if (dataFormat === 'channelsFirst') {\n    filterShape = [filterHeight, filterWidth, inShape[1], inShape[1]];\n  } else {\n    throw new Error(`Unknown dataFormat ${dataFormat}`);\n  }\n\n  return computeConv2DInfo(\n      inShape, filterShape, strides, dilations, pad, roundingMode, false,\n      dataFormat);\n}\n\n/**\n * Computes the information for a forward pass of a pooling3D operation.\n */\nexport function computePool3DInfo(\n    inShape: [number, number, number, number, number],\n    filterSize: number|[number, number, number],\n    strides: number|[number, number, number],\n    dilations: number|[number, number, number], pad: 'same'|'valid'|number,\n    roundingMode?: 'floor'|'round'|'ceil',\n    dataFormat: 'NDHWC'|'NCDHW' = 'NDHWC'): Conv3DInfo {\n  const [filterDepth, filterHeight, filterWidth] = parse3TupleParam(filterSize);\n\n  let filterShape: [number, number, number, number, number];\n  let $dataFormat: 'channelsFirst'|'channelsLast';\n  if (dataFormat === 'NDHWC') {\n    $dataFormat = 'channelsLast';\n    filterShape =\n        [filterDepth, filterHeight, filterWidth, inShape[4], inShape[4]];\n  } else if (dataFormat === 'NCDHW') {\n    $dataFormat = 'channelsFirst';\n    filterShape =\n        [filterDepth, filterHeight, filterWidth, inShape[1], inShape[1]];\n  } else {\n    throw new Error(`Unknown dataFormat ${dataFormat}`);\n  }\n\n  return computeConv3DInfo(\n      inShape, filterShape, strides, dilations, pad, false, $dataFormat,\n      roundingMode);\n}\n\n/**\n * Computes the information for a forward pass of a convolution/pooling\n * operation.\n */\nexport function computeConv2DInfo(\n    inShape: [number, number, number, number],\n    filterShape: [number, number, number, number],\n    strides: number|[number, number], dilations: number|[number, number],\n    pad: 'same'|'valid'|number, roundingMode?: 'floor'|'round'|'ceil',\n    depthwise = false,\n    dataFormat: 'channelsFirst'|'channelsLast' = 'channelsLast'): Conv2DInfo {\n  let [batchSize, inHeight, inWidth, inChannels] = [-1, -1, -1, -1];\n  if (dataFormat === 'channelsLast') {\n    [batchSize, inHeight, inWidth, inChannels] = inShape;\n  } else if (dataFormat === 'channelsFirst') {\n    [batchSize, inChannels, inHeight, inWidth] = inShape;\n  } else {\n    throw new Error(`Unknown dataFormat ${dataFormat}`);\n  }\n\n  const [filterHeight, filterWidth, , filterChannels] = filterShape;\n  const [strideHeight, strideWidth] = parseTupleParam(strides);\n  const [dilationHeight, dilationWidth] = parseTupleParam(dilations);\n\n  const effectiveFilterHeight =\n      getEffectiveFilterSize(filterHeight, dilationHeight);\n  const effectiveFilterWidth =\n      getEffectiveFilterSize(filterWidth, dilationWidth);\n  const {padInfo, outHeight, outWidth} = getPadAndOutInfo(\n      pad, inHeight, inWidth, strideHeight, strideWidth, effectiveFilterHeight,\n      effectiveFilterWidth, roundingMode);\n\n  const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n\n  let outShape: [number, number, number, number];\n  if (dataFormat === 'channelsFirst') {\n    outShape = [batchSize, outChannels, outHeight, outWidth];\n  } else if (dataFormat === 'channelsLast') {\n    outShape = [batchSize, outHeight, outWidth, outChannels];\n  }\n\n  return {\n    batchSize,\n    dataFormat,\n    inHeight,\n    inWidth,\n    inChannels,\n    outHeight,\n    outWidth,\n    outChannels,\n    padInfo,\n    strideHeight,\n    strideWidth,\n    filterHeight,\n    filterWidth,\n    effectiveFilterHeight,\n    effectiveFilterWidth,\n    dilationHeight,\n    dilationWidth,\n    inShape,\n    outShape,\n    filterShape\n  };\n}\n\n/**\n * Information about the forward pass of a 3D convolution/pooling operation.\n * It includes input and output shape, strides, filter size and padding\n * information.\n */\nexport type Conv3DInfo = {\n  batchSize: number,\n  inDepth: number,\n  inHeight: number,\n  inWidth: number,\n  inChannels: number,\n  outDepth: number,\n  outHeight: number,\n  outWidth: number,\n  outChannels: number,\n  dataFormat: 'channelsFirst'|'channelsLast',\n  strideDepth: number,\n  strideHeight: number,\n  strideWidth: number,\n  dilationDepth: number,\n  dilationHeight: number,\n  dilationWidth: number,\n  filterDepth: number,\n  filterHeight: number,\n  filterWidth: number,\n  effectiveFilterDepth: number,\n  effectiveFilterHeight: number,\n  effectiveFilterWidth: number,\n  padInfo: PadInfo3D,\n  inShape: [number, number, number, number, number],\n  outShape: [number, number, number, number, number],\n  filterShape: [number, number, number, number, number]\n};\n\n/**\n * Computes the information for a forward pass of a 3D convolution/pooling\n * operation.\n */\nexport function computeConv3DInfo(\n    inShape: [number, number, number, number, number],\n    filterShape: [number, number, number, number, number],\n    strides: number|[number, number, number],\n    dilations: number|[number, number, number], pad: 'same'|'valid'|number,\n    depthwise = false,\n    dataFormat: 'channelsFirst'|'channelsLast' = 'channelsLast',\n    roundingMode?: 'floor'|'round'|'ceil'): Conv3DInfo {\n  let [batchSize, inDepth, inHeight, inWidth, inChannels] =\n      [-1, -1, -1, -1, -1];\n  if (dataFormat === 'channelsLast') {\n    [batchSize, inDepth, inHeight, inWidth, inChannels] = inShape;\n  } else if (dataFormat === 'channelsFirst') {\n    [batchSize, inChannels, inDepth, inHeight, inWidth] = inShape;\n  } else {\n    throw new Error(`Unknown dataFormat ${dataFormat}`);\n  }\n\n  const [filterDepth, filterHeight, filterWidth, , filterChannels] =\n      filterShape;\n  const [strideDepth, strideHeight, strideWidth] = parse3TupleParam(strides);\n  const [dilationDepth, dilationHeight, dilationWidth] =\n      parse3TupleParam(dilations);\n\n  const effectiveFilterDepth =\n      getEffectiveFilterSize(filterDepth, dilationDepth);\n  const effectiveFilterHeight =\n      getEffectiveFilterSize(filterHeight, dilationHeight);\n  const effectiveFilterWidth =\n      getEffectiveFilterSize(filterWidth, dilationWidth);\n  const {padInfo, outDepth, outHeight, outWidth} = get3DPadAndOutInfo(\n      pad, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth,\n      effectiveFilterDepth, effectiveFilterHeight, effectiveFilterWidth,\n      roundingMode);\n\n  const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n\n  let outShape: [number, number, number, number, number];\n  if (dataFormat === 'channelsFirst') {\n    outShape = [batchSize, outChannels, outDepth, outHeight, outWidth];\n  } else if (dataFormat === 'channelsLast') {\n    outShape = [batchSize, outDepth, outHeight, outWidth, outChannels];\n  }\n\n  return {\n    batchSize,\n    dataFormat,\n    inDepth,\n    inHeight,\n    inWidth,\n    inChannels,\n    outDepth,\n    outHeight,\n    outWidth,\n    outChannels,\n    padInfo,\n    strideDepth,\n    strideHeight,\n    strideWidth,\n    filterDepth,\n    filterHeight,\n    filterWidth,\n    effectiveFilterDepth,\n    effectiveFilterHeight,\n    effectiveFilterWidth,\n    dilationDepth,\n    dilationHeight,\n    dilationWidth,\n    inShape,\n    outShape,\n    filterShape\n  };\n}\n\nfunction computeOutputShape2D(\n    inShape: [number, number], fieldSize: number, stride: number,\n    zeroPad?: number, roundingMode?: 'floor'|'round'|'ceil'): [number, number] {\n  if (zeroPad == null) {\n    zeroPad = computeDefaultPad(inShape, fieldSize, stride);\n  }\n  const inputRows = inShape[0];\n  const inputCols = inShape[1];\n\n  const outputRows = conditionalRound(\n      (inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n  util.assert(\n      util.isInt(outputRows),\n      () => `The output # of rows (${outputRows}) must be an integer. ` +\n          `Change the stride and/or zero pad parameters`);\n\n  const outputCols = conditionalRound(\n      (inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n  util.assert(\n      util.isInt(outputCols),\n      () => `The output # of columns (${outputCols}) must be an integer. ` +\n          `Change the stride and/or zero pad parameters`);\n\n  return [outputRows, outputCols];\n}\n\nfunction computeOutputShape4D(\n    inShape: [number, number, number, number], fieldSize: number,\n    outChannels: number, stride: number, zeroPad?: number,\n    roundingMode?: 'floor'|'round'|'ceil'): [number, number, number, number] {\n  if (zeroPad == null) {\n    zeroPad = computeDefaultPad(inShape, fieldSize, stride);\n  }\n  const inputDepth = inShape[0];\n  const inputRows = inShape[1];\n  const inputCols = inShape[2];\n\n  const outputDepths = conditionalRound(\n      (inputDepth - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n  util.assert(\n      util.isInt(outputDepths),\n      () => `The output # of depths (${outputDepths}) must be an integer. ` +\n          `Change the stride and/or zero pad parameters`);\n\n  const outputRows = conditionalRound(\n      (inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n  util.assert(\n      util.isInt(outputRows),\n      () => `The output # of rows (${outputRows}) must be an integer. ` +\n          `Change the stride and/or zero pad parameters`);\n\n  const outputCols = conditionalRound(\n      (inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n  util.assert(\n      util.isInt(outputCols),\n      () => `The output # of columns (${outputCols}) must be an integer. ` +\n          `Change the stride and/or zero pad parameters`);\n\n  return [outputDepths, outputRows, outputCols, outChannels];\n}\n\nexport function computeDefaultPad(\n    inputShape: [number, number]|[number, number, number, number],\n    fieldSize: number, stride: number, dilation = 1): number {\n  const effectiveFieldSize = getEffectiveFilterSize(fieldSize, dilation);\n  return Math.floor(\n      (inputShape[0] * (stride - 1) - stride + effectiveFieldSize) / 2);\n}\n\nfunction parseTupleParam(param: number|number[]): [number, number, number] {\n  if (typeof param === 'number') {\n    return [param, param, param];\n  }\n  if (param.length === 2) {\n    return [param[0], param[1], 1];\n  }\n  return param as [number, number, number];\n}\n\nfunction parse3TupleParam(param: number|[number, number, number]):\n    [number, number, number] {\n  return typeof param === 'number' ? [param, param, param] : param;\n}\n\n/* See https://www.tensorflow.org/api_docs/python/tf/nn/atrous_conv2d\n * Atrous convolution is equivalent to standard convolution with upsampled\n * filters with effective_filter_height =\n * filter_height + (filter_height - 1) * (dilation - 1)\n * and effective_filter_width =\n * filter_width + (filter_width - 1) * (dilation - 1),\n * produced by inserting dilation - 1 zeros along consecutive elements across\n * the filters' spatial dimensions.\n * When there is a dilation, this converts a filter dimension to the\n * effective filter dimension, so it can be used in a standard convolution.\n */\nfunction getEffectiveFilterSize(filterSize: number, dilation: number) {\n  if (dilation <= 1) {\n    return filterSize;\n  }\n\n  return filterSize + (filterSize - 1) * (dilation - 1);\n}\n\nfunction getPadAndOutInfo(\n    pad: 'same'|'valid'|number, inHeight: number, inWidth: number,\n    strideHeight: number, strideWidth: number, filterHeight: number,\n    filterWidth: number, roundingMode?: 'floor'|'round'|'ceil'):\n    {padInfo: PadInfo, outHeight: number, outWidth: number} {\n  let padInfo: PadInfo;\n  let outHeight: number;\n  let outWidth: number;\n\n  if (typeof pad === 'number') {\n    const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n    padInfo = {top: pad, bottom: pad, left: pad, right: pad, type: padType};\n    const outShape = computeOutputShape2D(\n        [inHeight, inWidth], filterHeight, strideHeight, pad, roundingMode);\n    outHeight = outShape[0];\n    outWidth = outShape[1];\n  } else if (pad === 'same') {\n    outHeight = Math.ceil(inHeight / strideHeight);\n    outWidth = Math.ceil(inWidth / strideWidth);\n    const padAlongHeight =\n        Math.max(0, (outHeight - 1) * strideHeight + filterHeight - inHeight);\n    const padAlongWidth =\n        Math.max(0, (outWidth - 1) * strideWidth + filterWidth - inWidth);\n    const top = Math.floor(padAlongHeight / 2);\n    const bottom = padAlongHeight - top;\n    const left = Math.floor(padAlongWidth / 2);\n    const right = padAlongWidth - left;\n    padInfo = {top, bottom, left, right, type: 'SAME'};\n  } else if (pad === 'valid') {\n    padInfo = {top: 0, bottom: 0, left: 0, right: 0, type: 'VALID'};\n    outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight);\n    outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth);\n  } else {\n    throw Error(`Unknown padding parameter: ${pad}`);\n  }\n  return {padInfo, outHeight, outWidth};\n}\n\nfunction get3DPadAndOutInfo(\n    pad: 'same'|'valid'|number, inDepth: number, inHeight: number,\n    inWidth: number, strideDepth: number, strideHeight: number,\n    strideWidth: number, filterDepth: number, filterHeight: number,\n    filterWidth: number, roundingMode?: 'floor'|'round'|'ceil'): {\n  padInfo: PadInfo3D,\n  outDepth: number,\n  outHeight: number,\n  outWidth: number\n} {\n  let padInfo: PadInfo3D;\n  let outDepth: number;\n  let outHeight: number;\n  let outWidth: number;\n\n  if (typeof pad === 'number') {\n    const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n    padInfo = {\n      top: pad,\n      bottom: pad,\n      left: pad,\n      right: pad,\n      front: pad,\n      back: pad,\n      type: padType\n    };\n    const outShape = computeOutputShape4D(\n        [inDepth, inHeight, inWidth, 1], filterDepth, 1, strideDepth, pad,\n        roundingMode);\n    outDepth = outShape[0];\n    outHeight = outShape[1];\n    outWidth = outShape[2];\n  } else if (pad === 'same') {\n    outDepth = Math.ceil(inDepth / strideDepth);\n    outHeight = Math.ceil(inHeight / strideHeight);\n    outWidth = Math.ceil(inWidth / strideWidth);\n    const padAlongDepth = (outDepth - 1) * strideDepth + filterDepth - inDepth;\n    const padAlongHeight =\n        (outHeight - 1) * strideHeight + filterHeight - inHeight;\n    const padAlongWidth = (outWidth - 1) * strideWidth + filterWidth - inWidth;\n    const front = Math.floor(padAlongDepth / 2);\n    const back = padAlongDepth - front;\n    const top = Math.floor(padAlongHeight / 2);\n    const bottom = padAlongHeight - top;\n    const left = Math.floor(padAlongWidth / 2);\n    const right = padAlongWidth - left;\n\n    padInfo = {top, bottom, left, right, front, back, type: 'SAME'};\n  } else if (pad === 'valid') {\n    padInfo = {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0,\n      front: 0,\n      back: 0,\n      type: 'VALID'\n    };\n    outDepth = Math.ceil((inDepth - filterDepth + 1) / strideDepth);\n    outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight);\n    outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth);\n  } else {\n    throw Error(`Unknown padding parameter: ${pad}`);\n  }\n  return {padInfo, outDepth, outHeight, outWidth};\n}\n\n/**\n * Rounds a value depending on the rounding mode\n * @param value\n * @param roundingMode\n */\nfunction conditionalRound(\n    value: number, roundingMode?: 'floor'|'round'|'ceil') {\n  if (!roundingMode) {\n    return value;\n  }\n  switch (roundingMode) {\n    case 'round':\n      // used for Caffe Conv\n      return Math.round(value);\n    case 'ceil':\n      // used for Caffe Pool\n      return Math.ceil(value);\n    case 'floor':\n      return Math.floor(value);\n    default:\n      throw new Error(`Unknown roundingMode ${roundingMode}`);\n  }\n}\n\nexport function tupleValuesAreOne(param: number|number[]): boolean {\n  const [dimA, dimB, dimC] = parseTupleParam(param);\n  return dimA === 1 && dimB === 1 && dimC === 1;\n}\n\nexport function eitherStridesOrDilationsAreOne(\n    strides: number|number[], dilations: number|number[]): boolean {\n  return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations);\n}\n\n/**\n * Convert Conv2D dataFormat from 'NHWC'|'NCHW' to\n *    'channelsLast'|'channelsFirst'\n * @param dataFormat in 'NHWC'|'NCHW' mode\n * @return dataFormat in 'channelsLast'|'channelsFirst' mode\n * @throws unknown dataFormat\n */\nexport function convertConv2DDataFormat(dataFormat: 'NHWC'|'NCHW'):\n    'channelsLast'|'channelsFirst' {\n  if (dataFormat === 'NHWC') {\n    return 'channelsLast';\n  } else if (dataFormat === 'NCHW') {\n    return 'channelsFirst';\n  } else {\n    throw new Error(`Unknown dataFormat ${dataFormat}`);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {scalar, tensor1d, zeros} from '../ops/tensor_ops';\nimport {Tensor} from '../tensor';\nimport {Rank} from '../types';\nimport {DataType, ShapeMap} from '../types';\nimport {hasEncodingLoss, makeZerosTypedArray} from '../util';\n\nimport {KernelBackend} from './backend';\n\n// Utilities needed by backend consumers of tf-core.\nexport * from '../ops/axis_util';\nexport * from '../ops/broadcast_util';\nexport * from '../ops/concat_util';\nexport * from '../ops/conv_util';\nexport {Activation, FusedConv2DConfig} from '../ops/fused_util';\nexport * from '../ops/reduce_util';\nexport {BackendValues, TypedArray, upcastType, PixelData} from '../types';\nexport {MemoryInfo, TimingInfo} from '../engine';\n\nexport function castTensor<T extends Tensor>(\n    x: T, dtype: DataType, backend: KernelBackend): T {\n  if (dtype === 'complex64') {\n    if (x.dtype === 'complex64') {\n      return x.clone();\n    }\n    const zerosTensor = zeros(x.shape);\n    const floatX = x.toFloat();\n    const result = backend.complex(floatX, zerosTensor);\n    zerosTensor.dispose();\n    floatX.dispose();\n    return result as T;\n  }\n\n  if (!hasEncodingLoss(x.dtype, dtype)) {\n    // We don't change the underlying data, since we cast to higher\n    // precision.\n    return ENGINE.makeTensorFromDataId(x.dataId, x.shape, dtype) as T;\n  }\n  if (x.dtype === 'complex64') {\n    const real = backend.real(x);\n    const result = real.cast(dtype);\n    real.dispose();\n    return result;\n  }\n  if (dtype === 'int32') {\n    return backend.int(x);\n  } else if (dtype === 'bool') {\n    const zero = scalar(0, x.dtype);\n    const result = backend.notEqual(x, zero) as T;\n    zero.dispose();\n    return result;\n  } else {\n    throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`);\n  }\n}\n\nexport function reshapeTensor<T extends Tensor, R extends Rank>(\n    x: T, shape: ShapeMap[R]): Tensor<R> {\n  return ENGINE.makeTensorFromDataId(x.dataId, shape, x.dtype) as Tensor<R>;\n}\n\nexport function linspaceImpl(start: number, stop: number, num: number) {\n  const step = (stop - start) / (num - 1);\n\n  const values = makeZerosTypedArray(num, 'float32');\n  values[0] = start;\n  for (let i = 1; i < values.length; i++) {\n    values[i] = values[i - 1] + step;\n  }\n\n  return tensor1d(values, 'float32');\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {TypedArray} from '../types';\n/**\n * Merges real and imaginary Float32Arrays into a single complex Float32Array.\n *\n * The memory layout is interleaved as follows:\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n * complex: [r0, i0, r1, i1, r2, i2]\n *\n * This is the inverse of splitRealAndImagArrays.\n *\n * @param real The real values of the complex tensor values.\n * @param imag The imag values of the complex tensor values.\n * @returns A complex tensor as a Float32Array with merged values.\n */\nexport function mergeRealAndImagArrays(\n    real: Float32Array, imag: Float32Array): Float32Array {\n  if (real.length !== imag.length) {\n    throw new Error(\n        `Cannot merge real and imag arrays of different lengths. real:` +\n        `${real.length}, imag: ${imag.length}.`);\n  }\n  const result = new Float32Array(real.length * 2);\n  for (let i = 0; i < result.length; i += 2) {\n    result[i] = real[i / 2];\n    result[i + 1] = imag[i / 2];\n  }\n  return result;\n}\n\n/**\n * Splits a complex Float32Array into real and imag parts.\n *\n * The memory layout is interleaved as follows:\n * complex: [r0, i0, r1, i1, r2, i2]\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n *\n * This is the inverse of mergeRealAndImagArrays.\n *\n * @param complex The complex tensor values.\n * @returns An object with real and imag Float32Array components of the complex\n *     tensor.\n */\nexport function splitRealAndImagArrays(complex: Float32Array):\n    {real: Float32Array, imag: Float32Array} {\n  const real = new Float32Array(complex.length / 2);\n  const imag = new Float32Array(complex.length / 2);\n  for (let i = 0; i < complex.length; i += 2) {\n    real[i / 2] = complex[i];\n    imag[i / 2] = complex[i + 1];\n  }\n  return {real, imag};\n}\n\n/**\n * Extracts even indexed complex values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithEvenIndex(complex: Float32Array):\n    {real: Float32Array, imag: Float32Array} {\n  const len = Math.ceil(complex.length / 4);\n  const real = new Float32Array(len);\n  const imag = new Float32Array(len);\n  for (let i = 0; i < complex.length; i += 4) {\n    real[Math.floor(i / 4)] = complex[i];\n    imag[Math.floor(i / 4)] = complex[i + 1];\n  }\n  return {real, imag};\n}\n\n/**\n * Extracts odd indexed comple values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithOddIndex(complex: Float32Array):\n    {real: Float32Array, imag: Float32Array} {\n  const len = Math.floor(complex.length / 4);\n  const real = new Float32Array(len);\n  const imag = new Float32Array(len);\n  for (let i = 2; i < complex.length; i += 4) {\n    real[Math.floor(i / 4)] = complex[i];\n    imag[Math.floor(i / 4)] = complex[i + 1];\n  }\n  return {real, imag};\n}\n\n/**\n * Get the map representing a complex value in the given array.\n * @param complex The complex tensor values.\n * @param index An index of the target complex value.\n */\nexport function getComplexWithIndex(\n    complex: Float32Array, index: number): {real: number, imag: number} {\n  const real = complex[index * 2];\n  const imag = complex[index * 2 + 1];\n  return {real, imag};\n}\n\n/**\n * Insert a given complex value into the TypedArray.\n * @param data The array in which the complex value is inserted.\n * @param c The complex value to be inserted.\n * @param index An index of the target complex value.\n */\nexport function assignToTypedArray(\n    data: TypedArray, real: number, imag: number, index: number) {\n  data[index * 2] = real;\n  data[index * 2 + 1] = imag;\n}\n\n/**\n * Make the list of exponent terms used by FFT.\n */\nexport function exponents(\n    n: number, inverse: boolean): {real: Float32Array, imag: Float32Array} {\n  const real = new Float32Array(n / 2);\n  const imag = new Float32Array(n / 2);\n  for (let i = 0; i < Math.ceil(n / 2); i++) {\n    const x = (inverse ? 2 : -2) * Math.PI * (i / n);\n    real[i] = Math.cos(x);\n    imag[i] = Math.sin(x);\n  }\n  return {real, imag};\n}\n\n/**\n * Make the exponent term used by FFT.\n */\nexport function exponent(\n    k: number, n: number, inverse: boolean): {real: number, imag: number} {\n  const x = (inverse ? 2 : -2) * Math.PI * (k / n);\n  const real = Math.cos(x);\n  const imag = Math.sin(x);\n  return {real, imag};\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Inserts a value into a sorted array. This method allows duplicate, meaning it\n * allows inserting duplicate value, in which case, the element will be inserted\n * at the lowest index of the value.\n * @param arr The array to modify.\n * @param element The element to insert.\n * @param comparator Optional. If no comparator is specified, elements are\n * compared using array_util.defaultComparator, which is suitable for Strings\n * and Numbers in ascending arrays. If the array contains multiple instances of\n * the target value, the left-most instance will be returned. To provide a\n * comparator, it should take 2 arguments to compare and return a negative,\n * zero, or a positive number.\n */\nexport function binaryInsert<T>(\n    arr: T[], element: T, comparator?: (a: T, b: T) => number) {\n  const index = binarySearch(arr, element, comparator);\n  const insertionPoint = index < 0 ? -(index + 1) : index;\n  arr.splice(insertionPoint, 0, element);\n}\n\n/**\n * Searches the array for the target using binary search, returns the index\n * of the found element, or position to insert if element not found. If no\n * comparator is specified, elements are compared using array_\n * util.defaultComparator, which is suitable for Strings and Numbers in\n * ascending arrays. If the array contains multiple instances of the target\n * value, the left-most instance will be returned.\n * @param arr The array to be searched in.\n * @param target The target to be searched for.\n * @param comparator Should take 2 arguments to compare and return a negative,\n *    zero, or a positive number.\n * @return Lowest index of the target value if found, otherwise the insertion\n *    point where the target should be inserted, in the form of\n *    (-insertionPoint - 1).\n */\nexport function binarySearch<T>(\n    arr: T[], target: T, comparator?: (a: T, b: T) => number) {\n  return binarySearch_(arr, target, comparator || defaultComparator);\n}\n\n/**\n * Compares its two arguments for order.\n * @param a The first element to be compared.\n * @param b The second element to be compared.\n * @return A negative number, zero, or a positive number as the first\n *     argument is less than, equal to, or greater than the second.\n */\nfunction defaultComparator<T>(a: T, b: T): number {\n  return a > b ? 1 : a < b ? -1 : 0;\n}\n\nfunction binarySearch_<T>(\n    arr: T[], target: T, comparator: (a: T, b: T) => number) {\n  let left = 0;\n  let right = arr.length;\n  let middle = 0;\n  let found = false;\n  while (left < right) {\n    middle = left + ((right - left) >>> 1);\n    const compareResult = comparator(target, arr[middle]);\n    if (compareResult > 0) {\n      left = middle + 1;\n    } else {\n      right = middle;\n      // If compareResult is 0, the value is found. We record it is found,\n      // and then keep looking because there may be duplicate.\n      found = !compareResult;\n    }\n  }\n\n  return found ? left : -left - 1;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Implementation of the NonMaxSuppression kernel shared between webgl and cpu.\n */\n\nimport {scalar, tensor1d} from '../ops/tensor_ops';\nimport {Tensor1D} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {TypedArray} from '../types';\n\nimport {binaryInsert} from './array_util';\n\ninterface Candidate {\n  score: number;\n  boxIndex: number;\n  suppressBeginIndex: number;\n}\n\nexport function nonMaxSuppressionV3(\n    boxes: TypedArray, scores: TypedArray, maxOutputSize: number,\n    iouThreshold: number, scoreThreshold: number): Tensor1D {\n  const dummySoftNmsSigma = 0.0;\n\n  return nonMaxSuppressionImpl_(\n             boxes, scores, maxOutputSize, iouThreshold, scoreThreshold,\n             dummySoftNmsSigma)\n             .selectedIndices as Tensor1D;\n}\n\nexport function nonMaxSuppressionV5(\n    boxes: TypedArray, scores: TypedArray, maxOutputSize: number,\n    iouThreshold: number, scoreThreshold: number,\n    softNmsSigma: number): NamedTensorMap {\n  // For NonMaxSuppressionV5Op, we always return a second output holding\n  // corresponding scores.\n  const returnScoresTensor = true;\n\n  const result = nonMaxSuppressionImpl_(\n      boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma,\n      returnScoresTensor);\n\n  result.numValidOutputs.dispose();\n\n  return {\n    selectedIndices: result.selectedIndices,\n    selectedScores: result.selectedScores\n  };\n}\n\nfunction nonMaxSuppressionImpl_(\n    boxes: TypedArray, scores: TypedArray, maxOutputSize: number,\n    iouThreshold: number, scoreThreshold: number, softNmsSigma: number,\n    returnScoresTensor = false, padToMaxOutputSize = false): NamedTensorMap {\n  // The list is sorted in ascending order, so that we can always pop the\n  // candidate with the largest score in O(1) time.\n  const candidates =\n      Array.from(scores)\n          .map((score, boxIndex) => ({score, boxIndex, suppressBeginIndex: 0}))\n          .filter(c => c.score > scoreThreshold)\n          .sort(ascendingComparator);\n\n  // If softNmsSigma is 0, the outcome of this algorithm is exactly same as\n  // before.\n  const scale = softNmsSigma > 0 ? (-0.5 / softNmsSigma) : 0.0;\n\n  const selectedIndices: number[] = [];\n  const selectedScores: number[] = [];\n\n  while (selectedIndices.length < maxOutputSize && candidates.length > 0) {\n    const candidate = candidates.pop();\n    const {score: originalScore, boxIndex, suppressBeginIndex} = candidate;\n\n    if (originalScore < scoreThreshold) {\n      break;\n    }\n\n    // Overlapping boxes are likely to have similar scores, therefore we\n    // iterate through the previously selected boxes backwards in order to\n    // see if candidate's score should be suppressed. We use\n    // suppressBeginIndex to track and ensure a candidate can be suppressed\n    // by a selected box no more than once. Also, if the overlap exceeds\n    // iouThreshold, we simply ignore the candidate.\n    let ignoreCandidate = false;\n    for (let j = selectedIndices.length - 1; j >= suppressBeginIndex; --j) {\n      const iou = intersectionOverUnion(boxes, boxIndex, selectedIndices[j]);\n\n      if (iou >= iouThreshold) {\n        ignoreCandidate = true;\n        break;\n      }\n\n      candidate.score =\n          candidate.score * suppressWeight(iouThreshold, scale, iou);\n\n      if (candidate.score <= scoreThreshold) {\n        break;\n      }\n    }\n\n    // At this point, if `candidate.score` has not dropped below\n    // `scoreThreshold`, then we know that we went through all of the\n    // previous selections and can safely update `suppressBeginIndex` to the\n    // end of the selected array. Then we can re-insert the candidate with\n    // the updated score and suppressBeginIndex back in the candidate list.\n    // If on the other hand, `candidate.score` has dropped below the score\n    // threshold, we will not add it back to the candidates list.\n    candidate.suppressBeginIndex = selectedIndices.length;\n\n    if (!ignoreCandidate) {\n      // Candidate has passed all the tests, and is not suppressed, so\n      // select the candidate.\n      if (candidate.score === originalScore) {\n        selectedIndices.push(boxIndex);\n        selectedScores.push(candidate.score);\n      } else if (candidate.score > scoreThreshold) {\n        // Candidate's score is suppressed but is still high enough to be\n        // considered, so add back to the candidates list.\n        binaryInsert(candidates, candidate, ascendingComparator);\n      }\n    }\n  }\n\n  // NonMaxSuppressionV4 feature: padding output to maxOutputSize.\n  const numValidOutputs = selectedIndices.length;\n  if (padToMaxOutputSize) {\n    selectedIndices.fill(0, numValidOutputs);\n    selectedScores.fill(0.0, numValidOutputs);\n  }\n\n  return {\n    selectedIndices: tensor1d(selectedIndices, 'int32'),\n    selectedScores: tensor1d(selectedScores, 'float32'),\n    numValidOutputs: scalar(numValidOutputs, 'int32')\n  };\n}\n\nfunction intersectionOverUnion(boxes: TypedArray, i: number, j: number) {\n  const iCoord = boxes.subarray(i * 4, i * 4 + 4);\n  const jCoord = boxes.subarray(j * 4, j * 4 + 4);\n  const yminI = Math.min(iCoord[0], iCoord[2]);\n  const xminI = Math.min(iCoord[1], iCoord[3]);\n  const ymaxI = Math.max(iCoord[0], iCoord[2]);\n  const xmaxI = Math.max(iCoord[1], iCoord[3]);\n  const yminJ = Math.min(jCoord[0], jCoord[2]);\n  const xminJ = Math.min(jCoord[1], jCoord[3]);\n  const ymaxJ = Math.max(jCoord[0], jCoord[2]);\n  const xmaxJ = Math.max(jCoord[1], jCoord[3]);\n  const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n  const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n  if (areaI <= 0 || areaJ <= 0) {\n    return 0.0;\n  }\n  const intersectionYmin = Math.max(yminI, yminJ);\n  const intersectionXmin = Math.max(xminI, xminJ);\n  const intersectionYmax = Math.min(ymaxI, ymaxJ);\n  const intersectionXmax = Math.min(xmaxI, xmaxJ);\n  const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *\n      Math.max(intersectionXmax - intersectionXmin, 0.0);\n  return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\n// A Gaussian penalty function, this method always returns values in [0, 1].\n// The weight is a function of similarity, the more overlap two boxes are, the\n// smaller the weight is, meaning highly overlapping boxe will be significantly\n// penalized. On the other hand, a non-overlapping box will not be penalized.\nfunction suppressWeight(iouThreshold: number, scale: number, iou: number) {\n  const weight = Math.exp(scale * iou * iou);\n  return iou <= iouThreshold ? weight : 0.0;\n}\n\nfunction ascendingComparator(c1: Candidate, c2: Candidate) {\n  // For objects with same scores, we make the object with the larger index go\n  // first. In an array that pops from the end, this means that the object with\n  // the smaller index will be popped first. This ensures the same output as\n  // the TensorFlow python version.\n  return (c1.score - c2.score) ||\n      ((c1.score === c2.score) && (c2.boxIndex - c1.boxIndex));\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\n\n/** Shared implementation of the split kernel across WebGL and CPU. */\nexport function split<T extends Tensor>(\n    x: T, sizeSplits: number[], axis: number): T[] {\n  const begin = new Array(x.rank).fill(0);\n  const size = x.shape.slice();\n  return sizeSplits.map(s => {\n    size[axis] = s;\n    const slice = x.slice(begin, size);\n    begin[axis] += s;\n    return slice;\n  });\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * An implementation of the tile kernel shared between webgl and cpu for string\n * tensors only.\n */\n\nimport {buffer} from '../ops/array_ops';\nimport {Tensor, TensorBuffer} from '../tensor';\nimport {DataType, Rank} from '../types';\n\nexport function tile<R extends Rank>(\n    xBuf: TensorBuffer<R, DataType>, reps: number[]): Tensor<R> {\n  const newShape: number[] = new Array(xBuf.rank);\n  for (let i = 0; i < newShape.length; i++) {\n    newShape[i] = xBuf.shape[i] * reps[i];\n  }\n  const result = buffer(newShape, xBuf.dtype);\n  for (let i = 0; i < result.values.length; ++i) {\n    const newLoc = result.indexToLoc(i);\n\n    const originalLoc: number[] = new Array(xBuf.rank);\n    for (let j = 0; j < originalLoc.length; j++) {\n      originalLoc[j] = newLoc[j] % xBuf.shape[j];\n    }\n\n    const originalIndex = xBuf.locToIndex(originalLoc);\n\n    result.values[i] = xBuf.values[originalIndex];\n  }\n  return result.toTensor() as Tensor<R>;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/** An implementation of the TopK kernel shared between webgl and cpu. */\n\nimport {tensor} from '../ops/tensor_ops';\nimport {Tensor} from '../tensor';\nimport {NumericDataType, TypedArray} from '../types';\nimport {getTypedArrayFromDType} from '../util';\n\nexport function topkImpl<T extends Tensor>(\n    x: TypedArray, xShape: number[], xDtype: NumericDataType, k: number,\n    sorted: boolean): [T, T] {\n  // Reshape into a 2d tensor [batch, lastDim] and compute topk along lastDim.\n  const lastDim = xShape[xShape.length - 1];\n  const [batch, size] = [x.length / lastDim, lastDim];\n  const allTopKVals = getTypedArrayFromDType(xDtype, batch * k);\n  const allTopKIndices = getTypedArrayFromDType('int32', batch * k);\n\n  for (let b = 0; b < batch; b++) {\n    const offset = b * size;\n    const vals = x.subarray(offset, offset + size);\n    const valAndInd: Array<{value: number, index: number}> = [];\n    for (let i = 0; i < vals.length; i++) {\n      valAndInd.push({value: vals[i], index: i});\n    }\n    valAndInd.sort((a, b) => b.value - a.value);\n\n    const outOffset = b * k;\n    const topKVals = allTopKVals.subarray(outOffset, outOffset + k);\n    const topKIndices = allTopKIndices.subarray(outOffset, outOffset + k);\n    for (let i = 0; i < k; i++) {\n      topKVals[i] = valAndInd[i].value;\n      topKIndices[i] = valAndInd[i].index;\n    }\n  }\n  // Reshape back to the original input shape, except that the last\n  // dimension is k.\n  const outputShape = xShape.slice();\n  outputShape[outputShape.length - 1] = k;\n  return [\n    tensor(allTopKVals, outputShape, xDtype) as T,\n    tensor(allTopKIndices, outputShape, 'int32') as T\n  ];\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/** An implementation of the Where kernel shared between cpu and webgl */\n\nimport {buffer} from '../ops/array_ops';\nimport {Tensor2D} from '../tensor';\nimport {TypedArray} from '../types';\n\nexport function whereImpl(condShape: number[], condVals: TypedArray): Tensor2D {\n  const indices = [];\n  for (let i = 0; i < condVals.length; i++) {\n    if (condVals[i]) {\n      indices.push(i);\n    }\n  }\n\n  const inBuffer = buffer(condShape, 'int32');\n\n  const out = buffer([indices.length, condShape.length], 'int32');\n  for (let i = 0; i < indices.length; i++) {\n    const loc = inBuffer.indexToLoc(indices[i]);\n    const offset = i * condShape.length;\n    out.values.set(loc, offset);\n  }\n  return out.toTensor() as Tensor2D;\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class AddNProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(outputShape: number[], shapes: number[][]) {\n    this.outputShape = outputShape;\n    this.variableNames = shapes.map((_, i) => `T${i}`);\n\n    const snippets: string[] = [];\n    // Get target elements from every input tensor.\n    this.variableNames.forEach(variable => {\n      snippets.push(`float v${variable} = get${variable}AtOutCoords();`);\n    });\n\n    // Calculate the sum of all elements.\n    const operation = this.variableNames\n                          .map(variable => {\n                            return `v${variable}`;\n                          })\n                          .join(' + ');\n\n    this.userCode = `\n      void main() {\n        ${snippets.join('\\n        ')}\n\n        float result = ${operation};\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class AddNPackedProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[] = [];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(outputShape: number[], shapes: number[][]) {\n    this.outputShape = outputShape;\n    this.variableNames = shapes.map((_, i) => `T${i}`);\n\n    const snippets: string[] = [];\n    // Get target elements from every input tensor.\n    this.variableNames.forEach(variable => {\n      snippets.push(`vec4 v${variable} = get${variable}AtOutCoords();`);\n    });\n\n    // Calculate the sum of all elements.\n    const operation = this.variableNames\n                          .map(variable => {\n                            return `v${variable}`;\n                          })\n                          .join(' + ');\n\n    this.userCode = `\n      void main() {\n        ${snippets.join('\\n        ')}\n\n        vec4 result = ${operation};\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ReduceInfo} from '../../ops/reduce_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ArgMinMaxProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(reduceInfo: ReduceInfo, op: 'max'|'min', firstPass: boolean) {\n    const windowSize = reduceInfo.windowSize;\n    const batchSize = reduceInfo.batchSize;\n    const inSize = reduceInfo.inSize;\n    const outSize = Math.ceil(inSize / windowSize);\n    if (!firstPass) {\n      this.variableNames.push('bestIndicesA');\n    }\n    this.outputShape = [batchSize, outSize];\n    const compOp = (op === 'max') ? '>' : '<';\n    const indexSnippet = firstPass ?\n        'inOffset + i;' :\n        'round(getBestIndicesA(batch, inOffset + i));';\n\n    this.userCode = `\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * ${windowSize};\n\n        int bestIndex = inOffset;\n        float bestValue = getA(batch, bestIndex);\n\n        for (int i = 0; i < ${windowSize}; i++) {\n          int inIdx = ${indexSnippet};\n          float candidate = getA(batch, inIdx);\n          if (candidate ${compOp} bestValue) {\n            bestValue = candidate;\n            bestIndex = inIdx;\n          }\n        }\n        setOutput(float(bestIndex));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport function getVecChannels(name: string, rank: number): string[] {\n  return ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, rank).map(d => `${name}.${d}`);\n}\n\nexport function getChannels(name: string, rank: number): string[] {\n  if (rank === 1) {\n    return [name];\n  }\n  return getVecChannels(name, rank);\n}\n\nexport function getSourceCoords(rank: number, dims: string[]): string {\n  if (rank === 1) {\n    return 'rc';\n  }\n\n  let coords = '';\n  for (let i = 0; i < rank; i++) {\n    coords += dims[i];\n    if (i < rank - 1) {\n      coords += ',';\n    }\n  }\n  return coords;\n}","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {env} from '../../environment';\n\nexport type GLSL = {\n  version: string,\n  attribute: string,\n  varyingVs: string,\n  varyingFs: string,\n  texture2D: string,\n  output: string,\n  defineOutput: string,\n  defineSpecialNaN: string,\n  defineSpecialInf: string,\n  defineRound: string\n};\n\nexport function getGlslDifferences(): GLSL {\n  let version: string;\n  let attribute: string;\n  let varyingVs: string;\n  let varyingFs: string;\n  let texture2D: string;\n  let output: string;\n  let defineOutput: string;\n  let defineSpecialNaN: string;\n  let defineSpecialInf: string;\n  let defineRound: string;\n\n  if (env().getNumber('WEBGL_VERSION') === 2) {\n    version = '#version 300 es';\n    attribute = 'in';\n    varyingVs = 'out';\n    varyingFs = 'in';\n    texture2D = 'texture';\n    output = 'outputColor';\n    defineOutput = 'out vec4 outputColor;';\n\n    // Use custom isnan definition to work across differences between\n    // implementations on various platforms. While this should happen in ANGLE\n    // we still see differences between android and windows (on chrome) when\n    // using isnan directly.\n    defineSpecialNaN = `\n      bool isnan_custom(float val) {\n        return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n      }\n\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan_custom(val.x),\n          isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n      }\n\n      #define isnan(value) isnan_custom(value)\n    `;\n    // In webgl 2 we do not need to specify a custom isinf so there is no\n    // need for a special INFINITY constant.\n    defineSpecialInf = ``;\n    defineRound = `\n      #define round(value) newRound(value)\n      int newRound(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 newRound(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    `;\n  } else {\n    version = '';\n    attribute = 'attribute';\n    varyingVs = 'varying';\n    varyingFs = 'varying';\n    texture2D = 'texture2D';\n    output = 'gl_FragColor';\n    defineOutput = '';\n    // WebGL1 has no built in isnan so we define one here.\n    defineSpecialNaN = `\n      #define isnan(value) isnan_custom(value)\n      bool isnan_custom(float val) {\n        return (val > 0. || val < 1. || val == 0.) ? false : true;\n      }\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n      }\n    `;\n    defineSpecialInf = `\n      uniform float INFINITY;\n\n      bool isinf(float val) {\n        return abs(val) == INFINITY;\n      }\n      bvec4 isinf(vec4 val) {\n        return equal(abs(val), vec4(INFINITY));\n      }\n    `;\n    defineRound = `\n      int round(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 round(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    `;\n  }\n\n  return {\n    version,\n    attribute,\n    varyingVs,\n    varyingFs,\n    texture2D,\n    output,\n    defineOutput,\n    defineSpecialNaN,\n    defineSpecialInf,\n    defineRound\n  };\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as util from '../../util';\n\n/**\n * Produces GLSL code that derives logical coordinates from a flat\n * index. The code performs integer division with each stride and decrements\n * the index until the index equals the final dimension coordinate.\n */\nexport function getLogicalCoordinatesFromFlatIndex(\n    coords: string[], shape: number[], index = 'index'): string {\n  const strides = util.computeStrides(shape);\n  return strides\n      .map((stride, i) => {\n        const line1 = `int ${coords[i]} = ${index} / ${stride}`;\n        const line2 = i === strides.length - 1 ?\n            `int ${coords[i + 1]} = ${index} - ${coords[i]} * ${stride}` :\n            `index -= ${coords[i]} * ${stride}`;\n        return `${line1}; ${line2};`;\n      })\n      .join('');\n}\n\nfunction buildVec(x: string[]): string {\n  if (x.length === 1) {\n    return `${x[0]}`;\n  }\n  return `vec${x.length}(${x.join(',')})`;\n}\n\n/**\n * Produces GLSL code that computes the dot product of the input x and y\n * vectors. Handles splitting inputs into increments of vec4s when necessary.\n */\nexport function dotify(x: string[], y: string[]): string {\n  if (x.length !== y.length) {\n    throw new Error(\n        `Vectors to be dotted must be of the same length -` +\n        `got ${x.length} and ${y.length}`);\n  }\n\n  const slices: string[] = [];\n  const nearestVec4 = Math.floor(x.length / 4);\n  const nearestVec4Remainder = x.length % 4;\n\n  for (let i = 0; i < nearestVec4; i++) {\n    const xSlice = x.slice(i * 4, i * 4 + 4);\n    const ySlice = y.slice(i * 4, i * 4 + 4);\n    slices.push(`${buildVec(xSlice)}, ${buildVec(ySlice)}`);\n  }\n\n  if (nearestVec4Remainder !== 0) {\n    let xSlice = x.slice(nearestVec4 * 4);\n    let ySlice = y.slice(nearestVec4 * 4);\n    if (xSlice.length === 1) {\n      xSlice = xSlice.map(d => `float(${d})`);\n      ySlice = ySlice.map(d => `float(${d})`);\n    }\n    slices.push(`${buildVec(xSlice)}, ${buildVec(ySlice)}`);\n  }\n\n  return slices.map((d, i) => `dot(${d})`).join('+');\n}\n\n/**\n * Produces GLSL that computes the flat index from 3D coordinates.\n */\nexport function getFlatIndexFrom3D(shape: [number, number, number]): string {\n  const strides = util.computeStrides(shape).map(d => d.toString());\n\n  return `\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * ${strides[0]} + coords.y * ${strides[1]} + coords.z;\n  }\n`;\n}\n\nexport const ENCODE_FLOAT_SNIPPET = `\n  const float FLOAT_MAX = 1.70141184e38;\n  const float FLOAT_MIN = 1.17549435e-38;\n\n  lowp vec4 encode_float(highp float v) {\n    if (isnan(v)) {\n      return vec4(255, 255, 255, 255);\n    }\n\n    highp float av = abs(v);\n\n    if(av < FLOAT_MIN) {\n      return vec4(0.0, 0.0, 0.0, 0.0);\n    } else if(v > FLOAT_MAX) {\n      return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n    } else if(v < -FLOAT_MAX) {\n      return vec4(0.0, 0.0,  128.0, 255.0) / 255.0;\n    }\n\n    highp vec4 c = vec4(0,0,0,0);\n\n    highp float e = floor(log2(av));\n    highp float m = exp2(fract(log2(av))) - 1.0;\n\n    c[2] = floor(128.0 * m);\n    m -= c[2] / 128.0;\n    c[1] = floor(32768.0 * m);\n    m -= c[1] / 32768.0;\n    c[0] = floor(8388608.0 * m);\n\n    highp float ebias = e + 127.0;\n    c[3] = floor(ebias / 2.0);\n    ebias -= c[3] * 2.0;\n    c[2] += floor(ebias) * 128.0;\n\n    c[3] += 128.0 * step(0.0, -v);\n\n    return c / 255.0;\n  }\n`;","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getBroadcastDims} from '../../ops/broadcast_util';\nimport * as util from '../../util';\nimport {getGlslDifferences, GLSL} from './glsl_version';\nimport * as shader_util from './shader_compiler_util';\n\nexport type ShapeInfo = {\n  logicalShape: number[],\n  texShape: [number, number],\n  isUniform: boolean,\n  isPacked: boolean,\n  flatOffset: number\n};\n\nexport type InputInfo = {\n  name: string,\n  shapeInfo: ShapeInfo\n};\n\nexport function makeShader(\n    inputsInfo: InputInfo[], outputShape: ShapeInfo, userCode: string,\n    usesPackedTextures: boolean): string {\n  const prefixSnippets: string[] = [];\n  inputsInfo.forEach(x => {\n    const size = util.sizeFromShape(x.shapeInfo.logicalShape);\n\n    // Snippet when we decided to upload the values as uniform.\n    if (x.shapeInfo.isUniform) {\n      prefixSnippets.push(\n          `uniform float ${x.name}${size > 1 ? `[${size}]` : ''};`);\n    } else {\n      prefixSnippets.push(`uniform sampler2D ${x.name};`);\n      prefixSnippets.push(`uniform int offset${x.name};`);\n    }\n  });\n  const inputPrefixSnippet = prefixSnippets.join('\\n');\n\n  const inputSamplingSnippet =\n      inputsInfo\n          .map(x => getInputSamplingSnippet(x, outputShape, usesPackedTextures))\n          .join('\\n');\n  const outTexShape = outputShape.texShape;\n  const glsl = getGlslDifferences();\n  const floatTextureSampleSnippet = getFloatTextureSampleSnippet(glsl);\n  let outputSamplingSnippet: string;\n  let floatTextureSetOutputSnippet: string;\n  let shaderPrefix = getShaderPrefix(glsl);\n\n  if (outputShape.isPacked) {\n    outputSamplingSnippet =\n        getPackedOutputSamplingSnippet(outputShape.logicalShape, outTexShape);\n    floatTextureSetOutputSnippet = getFloatTextureSetRGBASnippet(glsl);\n  } else {\n    outputSamplingSnippet =\n        getOutputSamplingSnippet(outputShape.logicalShape, outTexShape);\n    floatTextureSetOutputSnippet = getFloatTextureSetRSnippet(glsl);\n  }\n\n  if (usesPackedTextures) {\n    shaderPrefix += SHADER_PACKED_PREFIX;\n  }\n\n  const source = [\n    shaderPrefix, floatTextureSampleSnippet, floatTextureSetOutputSnippet,\n    inputPrefixSnippet, outputSamplingSnippet, inputSamplingSnippet, userCode\n  ].join('\\n');\n  return source;\n}\n\nfunction getSamplerFromInInfo(inInfo: InputInfo): string {\n  const shape = inInfo.shapeInfo.logicalShape;\n  switch (shape.length) {\n    case 0:\n      return getSamplerScalar(inInfo);\n    case 1:\n      return getSampler1D(inInfo);\n    case 2:\n      return getSampler2D(inInfo);\n    case 3:\n      return getSampler3D(inInfo);\n    case 4:\n      return getSampler4D(inInfo);\n    case 5:\n      return getSampler5D(inInfo);\n    case 6:\n      return getSampler6D(inInfo);\n    default:\n      throw new Error(\n          `${shape.length}-D input sampling` +\n          ` is not yet supported`);\n  }\n}\n\nfunction getPackedSamplerFromInInfo(inInfo: InputInfo): string {\n  const shape = inInfo.shapeInfo.logicalShape;\n  switch (shape.length) {\n    case 0:\n      return getPackedSamplerScalar(inInfo);\n    case 1:\n      return getPackedSampler1D(inInfo);\n    case 2:\n      return getPackedSampler2D(inInfo);\n    case 3:\n      return getPackedSampler3D(inInfo);\n    default:\n      return getPackedSamplerND(inInfo);\n  }\n}\n\nfunction getInputSamplingSnippet(\n    inInfo: InputInfo, outShapeInfo: ShapeInfo,\n    usesPackedTextures = false): string {\n  let res = '';\n  if (usesPackedTextures) {\n    res += getPackedSamplerFromInInfo(inInfo);\n  } else {\n    res += getSamplerFromInInfo(inInfo);\n  }\n\n  const inShape = inInfo.shapeInfo.logicalShape;\n  const outShape = outShapeInfo.logicalShape;\n  if (inShape.length <= outShape.length) {\n    if (usesPackedTextures) {\n      res += getPackedSamplerAtOutputCoords(inInfo, outShapeInfo);\n    } else {\n      res += getSamplerAtOutputCoords(inInfo, outShapeInfo);\n    }\n  }\n  return res;\n}\n\nfunction getPackedOutputSamplingSnippet(\n    outShape: number[], outTexShape: [number, number]): string {\n  switch (outShape.length) {\n    case 0:\n      return getOutputScalarCoords();\n    case 1:\n      return getOutputPacked1DCoords(outShape as [number], outTexShape);\n    case 2:\n      return getOutputPacked2DCoords(outShape as [number, number], outTexShape);\n    case 3:\n      return getOutputPacked3DCoords(\n          outShape as [number, number, number], outTexShape);\n    default:\n      return getOutputPackedNDCoords(outShape, outTexShape);\n  }\n}\n\nfunction getOutputSamplingSnippet(\n    outShape: number[], outTexShape: [number, number]): string {\n  switch (outShape.length) {\n    case 0:\n      return getOutputScalarCoords();\n    case 1:\n      return getOutput1DCoords(outShape as [number], outTexShape);\n    case 2:\n      return getOutput2DCoords(outShape as [number, number], outTexShape);\n    case 3:\n      return getOutput3DCoords(\n          outShape as [number, number, number], outTexShape);\n    case 4:\n      return getOutput4DCoords(\n          outShape as [number, number, number, number], outTexShape);\n    case 5:\n      return getOutput5DCoords(\n          outShape as [number, number, number, number, number], outTexShape);\n    case 6:\n      return getOutput6DCoords(\n          outShape as [number, number, number, number, number, number],\n          outTexShape);\n    default:\n      throw new Error(\n          `${outShape.length}-D output sampling is not yet supported`);\n  }\n}\n\nfunction getFloatTextureSampleSnippet(glsl: GLSL): string {\n  return `\n    float sampleTexture(sampler2D textureSampler, vec2 uv) {\n      return ${glsl.texture2D}(textureSampler, uv).r;\n    }\n  `;\n}\n\nfunction getFloatTextureSetRSnippet(glsl: GLSL): string {\n  return `\n    void setOutput(float val) {\n      ${glsl.output} = vec4(val, 0, 0, 0);\n    }\n  `;\n}\n\nfunction getFloatTextureSetRGBASnippet(glsl: GLSL): string {\n  return `\n    void setOutput(vec4 val) {\n      ${glsl.output} = val;\n    }\n  `;\n}\n\nfunction getShaderPrefix(glsl: GLSL): string {\n  const SHADER_PREFIX = `${glsl.version}\n    precision highp float;\n    precision highp int;\n    precision highp sampler2D;\n    ${glsl.varyingFs} vec2 resultUV;\n    ${glsl.defineOutput}\n    const vec2 halfCR = vec2(0.5, 0.5);\n\n    struct ivec5\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n    };\n\n    struct ivec6\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n      int v;\n    };\n\n    uniform float NAN;\n    ${glsl.defineSpecialNaN}\n    ${glsl.defineSpecialInf}\n    ${glsl.defineRound}\n\n    int imod(int x, int y) {\n      return x - y * (x / y);\n    }\n\n    int idiv(int a, int b, float sign) {\n      int res = a / b;\n      int mod = imod(a, b);\n      if (sign < 0. && mod != 0) {\n        res -= 1;\n      }\n      return res;\n    }\n\n    //Based on the work of Dave Hoskins\n    //https://www.shadertoy.com/view/4djSRW\n    #define HASHSCALE1 443.8975\n    float random(float seed){\n      vec2 p = resultUV * seed;\n      vec3 p3  = fract(vec3(p.xyx) * HASHSCALE1);\n      p3 += dot(p3, p3.yzx + 19.19);\n      return fract((p3.x + p3.y) * p3.z);\n    }\n\n    ${SAMPLE_1D_SNIPPET}\n    ${SAMPLE_2D_SNIPPET}\n    ${SAMPLE_3D_SNIPPET}\n  `;\n\n  return SHADER_PREFIX;\n}\n\nconst SAMPLE_1D_SNIPPET = `\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n  int texelIndex = index / 2;\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`;\n\nconst SAMPLE_2D_SNIPPET = `\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n  int texNumC, int row, int col) {\n  int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`;\n\nconst SAMPLE_3D_SNIPPET = `\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n    int texelsInBatch, int texelsInLogicalRow, int b,\n    int row, int col) {\n  int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`;\n\nconst SHADER_PACKED_PREFIX = `\n  float getChannel(vec4 frag, vec2 innerDims) {\n    vec2 modCoord = mod(innerDims, 2.);\n    return modCoord.x == 0. ?\n      (modCoord.y == 0. ? frag.r : frag.g) :\n      (modCoord.y == 0. ? frag.b : frag.a);\n  }\n  float getChannel(vec4 frag, int dim) {\n    float modCoord = mod(float(dim), 2.);\n    return modCoord == 0. ? frag.r : frag.g;\n  }\n`;\n\nfunction getOutputScalarCoords() {\n  return `\n    int getOutputCoords() {\n      return 0;\n    }\n  `;\n}\n\nfunction getOutputPacked1DCoords(\n    shape: [number], texShape: [number, number]): string {\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  if (packedTexShape[0] === 1) {\n    return `\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * ${packedTexShape[1]}.0);\n      }\n    `;\n  }\n\n  if (packedTexShape[1] === 1) {\n    return `\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * ${packedTexShape[0]}.0);\n      }\n    `;\n  }\n\n  return `\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\n      return 2 * (resTexRC.x * ${packedTexShape[1]} + resTexRC.y);\n    }\n  `;\n}\n\nfunction getOutput1DCoords(\n    shape: [number], texShape: [number, number]): string {\n  if (texShape[0] === 1) {\n    return `\n      int getOutputCoords() {\n        return int(resultUV.x * ${texShape[1]}.0);\n      }\n    `;\n  }\n  if (texShape[1] === 1) {\n    return `\n      int getOutputCoords() {\n        return int(resultUV.y * ${texShape[0]}.0);\n      }\n    `;\n  }\n  return `\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${texShape[0]}, ${texShape[1]}));\n      return resTexRC.x * ${texShape[1]} + resTexRC.y;\n    }\n  `;\n}\n\nfunction getOutputPacked3DCoords(\n    shape: [number, number, number], texShape: [number, number]): string {\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  const texelsInLogicalRow = Math.ceil(shape[2] / 2);\n  const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[1] / 2);\n\n  return `\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\n      int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y;\n\n      int b = index / ${texelsInBatch};\n      index -= b * ${texelsInBatch};\n\n      int r = 2 * (index / ${texelsInLogicalRow});\n      int c = imod(index, ${texelsInLogicalRow}) * 2;\n\n      return ivec3(b, r, c);\n    }\n  `;\n}\n\nfunction getOutput3DCoords(\n    shape: [number, number, number], texShape: [number, number]): string {\n  const coordsFromIndexSnippet =\n      shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd'], shape);\n\n  return `\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${texShape[0]}, ${texShape[1]}));\n      int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n      ${coordsFromIndexSnippet}\n      return ivec3(r, c, d);\n    }\n  `;\n}\n\nfunction getOutputPackedNDCoords(\n    shape: number[], texShape: [number, number]): string {\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n\n  const texelsInLogicalRow = Math.ceil(shape[shape.length - 1] / 2);\n  const texelsInBatch =\n      texelsInLogicalRow * Math.ceil(shape[shape.length - 2] / 2);\n  let texelsInBatchN = texelsInBatch;\n  let batches = ``;\n  let coords = 'b, r, c';\n\n  for (let b = 2; b < shape.length - 1; b++) {\n    texelsInBatchN *= shape[shape.length - b - 1];\n    batches = `\n      int b${b} = index / ${texelsInBatchN};\n      index -= b${b} * ${texelsInBatchN};\n    ` + batches;\n    coords = `b${b}, ` + coords;\n  }\n\n  return `\n    ivec${shape.length} getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\n      int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y;\n\n      ${batches}\n\n      int b = index / ${texelsInBatch};\n      index -= b * ${texelsInBatch};\n\n      int r = 2 * (index / ${texelsInLogicalRow});\n      int c = imod(index, ${texelsInLogicalRow}) * 2;\n\n      return ivec${shape.length}(${coords});\n    }\n  `;\n}\n\nfunction getOutput4DCoords(\n    shape: [number, number, number, number],\n    texShape: [number, number]): string {\n  const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(\n      ['r', 'c', 'd', 'd2'], shape);\n\n  return `\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(${texShape[0]}, ${texShape[1]}));\n      int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n      ${coordsFromIndexSnippet}\n      return ivec4(r, c, d, d2);\n    }\n  `;\n}\n\nfunction getOutput5DCoords(\n    shape: [number, number, number, number, number],\n    texShape: [number, number]): string {\n  const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(\n      ['r', 'c', 'd', 'd2', 'd3'], shape);\n\n  return `\n    ivec5 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx * vec2(${texShape[0]},\n                             ${texShape[1]}));\n\n      int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n\n      ${coordsFromIndexSnippet}\n\n      ivec5 outShape = ivec5(r, c, d, d2, d3);\n      return outShape;\n    }\n  `;\n}\n\nfunction getOutput6DCoords(\n    shape: [number, number, number, number, number, number],\n    texShape: [number, number]): string {\n  const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(\n      ['r', 'c', 'd', 'd2', 'd3', 'd4'], shape);\n\n  return `\n    ivec6 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(${texShape[0]}, ${texShape[1]}));\n      int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n\n      ${coordsFromIndexSnippet}\n\n      ivec6 result = ivec6(r, c, d, d2, d3, d4);\n      return result;\n    }\n  `;\n}\n\nfunction getOutputPacked2DCoords(\n    shape: [number, number], texShape: [number, number]): string {\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  if (util.arraysEqual(shape, texShape)) {\n    return `\n      ivec2 getOutputCoords() {\n        return 2 * ivec2(resultUV.yx * vec2(${packedTexShape[0]}, ${\n        packedTexShape[1]}));\n      }\n    `;\n  }\n\n  // texels needed to accommodate a logical row\n  const texelsInLogicalRow = Math.ceil(shape[1] / 2);\n\n  /**\n   * getOutputCoords\n   *\n   * resTexRC: The rows and columns of the texels. If you move over one\n   * texel to the right in the packed texture, you are moving over one column\n   * (not two).\n   *\n   * index: The texel index\n   */\n  return `\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\n\n      int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y;\n      int r = 2 * (index / ${texelsInLogicalRow});\n      int c = imod(index, ${texelsInLogicalRow}) * 2;\n\n      return ivec2(r, c);\n    }\n  `;\n}\n\nfunction getOutput2DCoords(\n    shape: [number, number], texShape: [number, number]): string {\n  if (util.arraysEqual(shape, texShape)) {\n    return `\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2(${texShape[0]}, ${texShape[1]}));\n      }\n    `;\n  }\n  if (shape[1] === 1) {\n    return `\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(${texShape[0]}, ${texShape[1]}));\n        int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    `;\n  }\n  if (shape[0] === 1) {\n    return `\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(${texShape[0]}, ${texShape[1]}));\n        int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n        return ivec2(0, index);\n      }\n    `;\n  }\n  return `\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${texShape[0]}, ${texShape[1]}));\n      int index = resTexRC.x * ${texShape[1]} + resTexRC.y;\n      int r = index / ${shape[1]};\n      int c = index - r * ${shape[1]};\n      return ivec2(r, c);\n    }\n  `;\n}\n\nfunction getFlatOffsetUniformName(texName: string): string {\n  return `offset${texName}`;\n}\n\nfunction getPackedSamplerScalar(inputInfo: InputInfo): string {\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const glsl = getGlslDifferences();\n  return `\n    vec4 ${funcName}() {\n      return ${glsl.texture2D}(${texName}, halfCR);\n    }\n  `;\n}\n\nfunction getSamplerScalar(inputInfo: InputInfo): string {\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  if (inputInfo.shapeInfo.isUniform) {\n    return `float ${funcName}() {return ${texName};}`;\n  }\n  const [texNumR, texNumC] = inputInfo.shapeInfo.texShape;\n  if (texNumR === 1 && texNumC === 1) {\n    return `\n      float ${funcName}() {\n        return sampleTexture(${texName}, halfCR);\n      }\n    `;\n  }\n\n  const [tNumR, tNumC] = inputInfo.shapeInfo.texShape;\n  const offset = getFlatOffsetUniformName(texName);\n  return `\n    float ${funcName}() {\n      vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, ${offset});\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n}\n\nfunction getPackedSampler1D(inputInfo: InputInfo): string {\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const texShape = inputInfo.shapeInfo.texShape;\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  const glsl = getGlslDifferences();\n\n  return `\n    vec4 ${funcName}(int index) {\n      vec2 uv = packedUVfrom1D(\n        ${packedTexShape[0]}, ${packedTexShape[1]}, index);\n      return ${glsl.texture2D}(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler1D(inputInfo: InputInfo): string {\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int index) {\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const texShape = inputInfo.shapeInfo.texShape;\n  const tNumR = texShape[0];\n  const tNumC = texShape[1];\n\n  if (tNumC === 1 && tNumR === 1) {\n    return `\n      float ${funcName}(int index) {\n        return sampleTexture(${texName}, halfCR);\n      }\n    `;\n  }\n  const offset = getFlatOffsetUniformName(texName);\n  if (tNumC === 1) {\n    return `\n      float ${funcName}(int index) {\n        vec2 uv = vec2(0.5, (float(index + ${offset}) + 0.5) / ${tNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n  if (tNumR === 1) {\n    return `\n      float ${funcName}(int index) {\n        vec2 uv = vec2((float(index + ${offset}) + 0.5) / ${tNumC}.0, 0.5);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n  return `\n    float ${funcName}(int index) {\n      vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, index + ${offset});\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n}\n\nfunction getPackedSampler2D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const texShape = inputInfo.shapeInfo.texShape;\n\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n  const glsl = getGlslDifferences();\n  if (texShape != null && util.arraysEqual(shape, texShape)) {\n    return `\n      vec4 ${funcName}(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0);\n\n        return ${glsl.texture2D}(${texName}, uv);\n      }\n    `;\n  }\n\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  const valuesPerRow = Math.ceil(shape[1] / 2);\n\n  return `\n    vec4 ${funcName}(int row, int col) {\n      vec2 uv = packedUVfrom2D(${valuesPerRow}, ${packedTexShape[0]}, ${\n      packedTexShape[1]}, row, col);\n      return ${glsl.texture2D}(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler2D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const texShape = inputInfo.shapeInfo.texShape;\n\n  if (texShape != null && util.arraysEqual(shape, texShape)) {\n    const texNumR = texShape[0];\n    const texNumC = texShape[1];\n    return `\n    float ${funcName}(int row, int col) {\n      vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n  }\n\n  const {newShape, keptDims} = util.squeezeShape(shape);\n  const squeezedShape = newShape;\n  if (squeezedShape.length < shape.length) {\n    const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n    const params = ['row', 'col'];\n    return `\n      ${getSamplerFromInInfo(newInputInfo)}\n      float ${funcName}(int row, int col) {\n        return ${funcName}(${getSqueezedParams(params, keptDims)});\n      }\n    `;\n  }\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col) {\n        int index = round(dot(vec2(row, col), vec2(${shape[1]}, 1)));\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n  const offset = getFlatOffsetUniformName(texName);\n  if (texNumC === 1) {\n    // index is used directly as physical (no risk of float16 overflow).\n    return `\n    float ${funcName}(int row, int col) {\n      float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1));\n      vec2 uv = vec2(0.5, (index + 0.5) / ${texNumR}.0);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n  }\n  if (texNumR === 1) {\n    // index is used directly as physical (no risk of float16 overflow).\n    return `\n    float ${funcName}(int row, int col) {\n      float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1));\n      vec2 uv = vec2((index + 0.5) / ${texNumC}.0, 0.5);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n  }\n\n  return `\n  float ${funcName}(int row, int col) {\n    // Explicitly use integer operations as dot() only works on floats.\n    int index = row * ${shape[1]} + col + ${offset};\n    vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\n    return sampleTexture(${texName}, uv);\n  }\n`;\n}\n\nfunction getPackedSampler3D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const texShape = inputInfo.shapeInfo.texShape;\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n\n  if (shape[0] === 1) {\n    const squeezedShape = shape.slice(1);\n    const keptDims = [1, 2];\n    const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n    const params = ['b', 'row', 'col'];\n    return `\n        ${getPackedSamplerFromInInfo(newInputInfo)}\n        vec4 ${funcName}(int b, int row, int col) {\n          return ${funcName}(${getSqueezedParams(params, keptDims)});\n        }\n      `;\n  }\n\n  const texNumR = packedTexShape[0];\n  const texNumC = packedTexShape[1];\n\n  const valuesPerRow = Math.ceil(shape[2] / 2);\n  const texelsInBatch = valuesPerRow * Math.ceil(shape[1] / 2);\n  const glsl = getGlslDifferences();\n\n  return `\n    vec4 ${funcName}(int b, int row, int col) {\n      vec2 uv = packedUVfrom3D(\n        ${texNumR}, ${texNumC}, ${texelsInBatch}, ${valuesPerRow}, b, row, col);\n      return ${glsl.texture2D}(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler3D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const stride0 = shape[1] * shape[2];\n  const stride1 = shape[2];\n\n  const {newShape, keptDims} = util.squeezeShape(shape);\n  const squeezedShape = newShape;\n  if (squeezedShape.length < shape.length) {\n    const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n    const params = ['row', 'col', 'depth'];\n    return `\n        ${getSamplerFromInInfo(newInputInfo)}\n        float ${funcName}(int row, int col, int depth) {\n          return ${funcName}(${getSqueezedParams(params, keptDims)});\n        }\n      `;\n  }\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth) {\n        int index = round(dot(vec3(row, col, depth),\n                          vec3(${stride0}, ${stride1}, 1)));\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const texShape = inputInfo.shapeInfo.texShape;\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n  const flatOffset = inputInfo.shapeInfo.flatOffset;\n  if (texNumC === stride0 && flatOffset == null) {\n    // texC is used directly as physical (no risk of float16 overflow).\n    return `\n        float ${funcName}(int row, int col, int depth) {\n          float texR = float(row);\n          float texC = dot(vec2(col, depth), vec2(${stride1}, 1));\n          vec2 uv = (vec2(texC, texR) + halfCR) /\n                     vec2(${texNumC}.0, ${texNumR}.0);\n          return sampleTexture(${texName}, uv);\n        }\n      `;\n  }\n\n  if (texNumC === stride1 && flatOffset == null) {\n    // texR is used directly as physical (no risk of float16 overflow).\n    return `\n    float ${funcName}(int row, int col, int depth) {\n      float texR = dot(vec2(row, col), vec2(${shape[1]}, 1));\n      float texC = float(depth);\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n  }\n\n  const offset = getFlatOffsetUniformName(texName);\n  return `\n      float ${funcName}(int row, int col, int depth) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * ${stride0} + col * ${stride1} + depth + ${offset};\n        vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\n        return sampleTexture(${texName}, uv);\n      }\n  `;\n}\n\nfunction getPackedSamplerND(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const rank = shape.length;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const texShape = inputInfo.shapeInfo.texShape;\n  const packedTexShape =\n      [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n  const texNumR = packedTexShape[0];\n  const texNumC = packedTexShape[1];\n\n  const valuesPerRow = Math.ceil(shape[rank - 1] / 2);\n  let texelsInBatch = valuesPerRow * Math.ceil(shape[rank - 2] / 2);\n  let params = `int b, int row, int col`;\n  let index = `b * ${texelsInBatch} + (row / 2) * ${valuesPerRow} + (col / 2)`;\n  for (let b = 2; b < rank - 1; b++) {\n    params = `int b${b}, ` + params;\n    texelsInBatch *= shape[rank - b - 1];\n    index = `b${b} * ${texelsInBatch} + ` + index;\n  }\n  const glsl = getGlslDifferences();\n  return `\n    vec4 ${funcName}(${params}) {\n      int index = ${index};\n      int texR = index / ${texNumC};\n      int texC = index - texR * ${texNumC};\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}, ${texNumR});\n      return ${glsl.texture2D}(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler4D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const stride2 = shape[3];\n  const stride1 = shape[2] * stride2;\n  const stride0 = shape[1] * stride1;\n\n  const {newShape, keptDims} = util.squeezeShape(shape);\n  if (newShape.length < shape.length) {\n    const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n    const params = ['row', 'col', 'depth', 'depth2'];\n    return `\n      ${getSamplerFromInInfo(newInputInfo)}\n      float ${funcName}(int row, int col, int depth, int depth2) {\n        return ${funcName}(${getSqueezedParams(params, keptDims)});\n      }\n    `;\n  }\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2) {\n        int index = round(dot(vec4(row, col, depth, depth2),\n                          vec4(${stride0}, ${stride1}, ${stride2}, 1)));\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const flatOffset = inputInfo.shapeInfo.flatOffset;\n  const texShape = inputInfo.shapeInfo.texShape;\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n\n  if (texNumC === stride0 && flatOffset == null) {\n    // texC is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2) {\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3(${stride1}, ${stride2}, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n  if (texNumC === stride2 && flatOffset == null) {\n    // texR is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3(${shape[1] * shape[2]}, ${shape[2]}, 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n\n  const offset = getFlatOffsetUniformName(texName);\n  return `\n    float ${funcName}(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${stride0} + col * ${stride1} +\n          depth * ${stride2} + depth2;\n      vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index + ${offset});\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler5D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n  const stride3 = shape[4];\n  const stride2 = shape[3] * stride3;\n  const stride1 = shape[2] * stride2;\n  const stride0 = shape[1] * stride1;\n\n  const {newShape, keptDims} = util.squeezeShape(shape);\n  if (newShape.length < shape.length) {\n    const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n    const params = ['row', 'col', 'depth', 'depth2', 'depth3'];\n    return `\n      ${getSamplerFromInInfo(newInputInfo)}\n      float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\n        return ${funcName}(${getSqueezedParams(params, keptDims)});\n      }\n    `;\n  }\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\n        float index = dot(\n          vec4(row, col, depth, depth2),\n          vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) +\n          depth3;\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const flatOffset = inputInfo.shapeInfo.flatOffset;\n  const texShape = inputInfo.shapeInfo.texShape;\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n\n  if (texNumC === stride0 && flatOffset == null) {\n    // texC is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n                         vec4(${stride1}, ${stride2}, ${stride3}, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n\n  if (texNumC === stride3 && flatOffset == null) {\n    // texR is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\n        float texR = dot(\n          vec4(row, col, depth, depth2),\n          vec4(${shape[1] * shape[2] * shape[3]},\n               ${shape[2] * shape[3]}, ${shape[3]}, 1));\n        int texC = depth3;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n\n  const offset = getFlatOffsetUniformName(texName);\n  return `\n    float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} +\n          depth2 * ${stride3} + depth3 + ${offset};\n      vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n}\n\nfunction getSampler6D(inputInfo: InputInfo): string {\n  const shape = inputInfo.shapeInfo.logicalShape;\n  const texName = inputInfo.name;\n  const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n\n  const {newShape, keptDims} = util.squeezeShape(shape);\n  if (newShape.length < shape.length) {\n    const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n    const params = ['row', 'col', 'depth', 'depth2', 'depth3', 'depth4'];\n    return `\n      ${getSamplerFromInInfo(newInputInfo)}\n      float ${funcName}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        return ${funcName}(${getSqueezedParams(params, keptDims)});\n      }\n    `;\n  }\n\n  const stride4 = shape[5];\n  const stride3 = shape[4] * stride4;\n  const stride2 = shape[3] * stride3;\n  const stride1 = shape[2] * stride2;\n  const stride0 = shape[1] * stride1;\n\n  if (inputInfo.shapeInfo.isUniform) {\n    // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n        int index = round(dot(\n          vec4(row, col, depth, depth2),\n          vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) +\n          dot(\n            vec2(depth3, depth4),\n            vec2(${stride4}, 1)));\n        ${getUniformSampler(inputInfo)}\n      }\n    `;\n  }\n\n  const flatOffset = inputInfo.shapeInfo.flatOffset;\n  const texShape = inputInfo.shapeInfo.texShape;\n  const texNumR = texShape[0];\n  const texNumC = texShape[1];\n  if (texNumC === stride0 && flatOffset == null) {\n    // texC is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n          vec4(${stride1}, ${stride2}, ${stride3}, ${stride4})) +\n               float(depth4);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n  if (texNumC === stride4 && flatOffset == null) {\n    // texR is used directly as physical (no risk of float16 overflow).\n    return `\n      float ${funcName}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        float texR = dot(vec4(row, col, depth, depth2),\n          vec4(${shape[1] * shape[2] * shape[3] * shape[4]},\n               ${shape[2] * shape[3] * shape[4]},\n               ${shape[3] * shape[4]},\n               ${shape[4]})) + float(depth3);\n        int texC = depth4;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${texNumC}.0, ${texNumR}.0);\n        return sampleTexture(${texName}, uv);\n      }\n    `;\n  }\n  const offset = getFlatOffsetUniformName(texName);\n  return `\n    float ${funcName}(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} +\n          depth2 * ${stride3} + depth3 * ${stride4} + depth4 + ${offset};\n      vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\n      return sampleTexture(${texName}, uv);\n    }\n  `;\n}\n\nfunction getUniformSampler(inputInfo: InputInfo): string {\n  const texName = inputInfo.name;\n  const inSize = util.sizeFromShape(inputInfo.shapeInfo.logicalShape);\n\n  if (inSize < 2) {\n    return `return ${texName};`;\n  }\n  return `\n    for (int i = 0; i < ${inSize}; i++) {\n      if (i == index) {\n        return ${texName}[i];\n      }\n    }\n  `;\n}\n\nfunction getPackedSamplerAtOutputCoords(\n    inputInfo: InputInfo, outShapeInfo: ShapeInfo) {\n  const texName = inputInfo.name;\n  const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1);\n  const funcName = 'get' + texFuncSnippet + 'AtOutCoords';\n  const inRank = inputInfo.shapeInfo.logicalShape.length;\n  const outRank = outShapeInfo.logicalShape.length;\n\n  const broadcastDims = getBroadcastDims(\n      inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape);\n\n  const type = getCoordsDataType(outRank);\n  const rankDiff = outRank - inRank;\n  let coordsSnippet: string;\n  const fields = ['x', 'y', 'z', 'w', 'u', 'v'];\n\n  if (inRank === 0) {\n    coordsSnippet = '';\n  } else if (outRank < 2 && broadcastDims.length >= 1) {\n    coordsSnippet = 'coords = 0;';\n  } else {\n    coordsSnippet =\n        broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`)\n            .join('\\n');\n  }\n  let unpackedCoordsSnippet = '';\n  if (outRank < 2 && inRank > 0) {\n    unpackedCoordsSnippet = 'coords';\n  } else {\n    unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape\n                                .map((s, i) => `coords.${fields[i + rankDiff]}`)\n                                .join(', ');\n  }\n\n  let output = `return outputValue;`;\n  const inSize = util.sizeFromShape(inputInfo.shapeInfo.logicalShape);\n  const isInputScalar = inSize === 1;\n  const outSize = util.sizeFromShape(outShapeInfo.logicalShape);\n  const isOutputScalar = outSize === 1;\n\n  if (inRank === 1 && !isInputScalar && !isOutputScalar) {\n    output = `\n      return vec4(outputValue.xy, outputValue.xy);\n    `;\n  } else if (isInputScalar && !isOutputScalar) {\n    if (outRank === 1) {\n      output = `\n        return vec4(outputValue.x, outputValue.x, 0., 0.);\n      `;\n    } else {\n      output = `\n        return vec4(outputValue.x);\n      `;\n    }\n  } else if (broadcastDims.length) {\n    const rows = inRank - 2;\n    const cols = inRank - 1;\n\n    if (broadcastDims.indexOf(rows) > -1 && broadcastDims.indexOf(cols) > -1) {\n      output = `return vec4(outputValue.x);`;\n    } else if (broadcastDims.indexOf(rows) > -1) {\n      output = `return vec4(outputValue.x, outputValue.y, ` +\n          `outputValue.x, outputValue.y);`;\n    } else if (broadcastDims.indexOf(cols) > -1) {\n      output = `return vec4(outputValue.xx, outputValue.zz);`;\n    }\n  }\n\n  return `\n    vec4 ${funcName}() {\n      ${type} coords = getOutputCoords();\n      ${coordsSnippet}\n      vec4 outputValue = get${texFuncSnippet}(${unpackedCoordsSnippet});\n      ${output}\n    }\n  `;\n}\n\nfunction getSamplerAtOutputCoords(\n    inputInfo: InputInfo, outShapeInfo: ShapeInfo) {\n  const texName = inputInfo.name;\n  const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1);\n  const funcName = 'get' + texFuncSnippet + 'AtOutCoords';\n  const outTexShape = outShapeInfo.texShape;\n  const inTexShape = inputInfo.shapeInfo.texShape;\n  const inRank = inputInfo.shapeInfo.logicalShape.length;\n  const outRank = outShapeInfo.logicalShape.length;\n\n  if (!inputInfo.shapeInfo.isUniform && inRank === outRank &&\n      inputInfo.shapeInfo.flatOffset == null &&\n      util.arraysEqual(inTexShape, outTexShape)) {\n    return `\n      float ${funcName}() {\n        return sampleTexture(${texName}, resultUV);\n      }\n    `;\n  }\n\n  const type = getCoordsDataType(outRank);\n  const broadcastDims = getBroadcastDims(\n      inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape);\n  const rankDiff = outRank - inRank;\n  let coordsSnippet: string;\n  const fields = ['x', 'y', 'z', 'w', 'u', 'v'];\n\n  if (inRank === 0) {\n    coordsSnippet = '';\n  } else if (outRank < 2 && broadcastDims.length >= 1) {\n    coordsSnippet = 'coords = 0;';\n  } else {\n    coordsSnippet =\n        broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`)\n            .join('\\n');\n  }\n  let unpackedCoordsSnippet = '';\n  if (outRank < 2 && inRank > 0) {\n    unpackedCoordsSnippet = 'coords';\n  } else {\n    unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape\n                                .map((s, i) => `coords.${fields[i + rankDiff]}`)\n                                .join(', ');\n  }\n\n  return `\n    float ${funcName}() {\n      ${type} coords = getOutputCoords();\n      ${coordsSnippet}\n      return get${texFuncSnippet}(${unpackedCoordsSnippet});\n    }\n  `;\n}\n\nexport function getCoordsDataType(rank: number): string {\n  if (rank <= 1) {\n    return 'int';\n  } else if (rank === 2) {\n    return 'ivec2';\n  } else if (rank === 3) {\n    return 'ivec3';\n  } else if (rank === 4) {\n    return 'ivec4';\n  } else if (rank === 5) {\n    return 'ivec5';\n  } else if (rank === 6) {\n    return 'ivec6';\n  } else {\n    throw Error(`GPU for rank ${rank} is not yet supported`);\n  }\n}\n\n/** Returns a new input info (a copy) that has a squeezed logical shape. */\nfunction squeezeInputInfo(\n    inInfo: InputInfo, squeezedShape: number[]): InputInfo {\n  // Deep copy.\n  const newInputInfo: InputInfo = JSON.parse(JSON.stringify(inInfo));\n  newInputInfo.shapeInfo.logicalShape = squeezedShape;\n  return newInputInfo;\n}\n\nfunction getSqueezedParams(params: string[], keptDims: number[]): string {\n  return keptDims.map(d => params[d]).join(', ');\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {assert} from '../../util';\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class ArgMinMaxPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(\n      shape: number[], windowSize: number, op: 'max'|'min',\n      firstPass: boolean) {\n    assert(\n        shape.length > 2,\n        () => `Packed arg${\n            op.charAt(0).toUpperCase() +\n            op.slice(1)} supports only inputs with rank above 2.`);\n    const inSize = shape[shape.length - 1];\n    const outSize = Math.ceil(inSize / windowSize);\n    this.outputShape = shape.slice(0, -1);\n    if (outSize > 1) {\n      this.outputShape.push(outSize);\n    }\n    if (!firstPass) {\n      this.variableNames.push('bestIndicesA');\n    }\n    const outShape = this.outputShape;\n    const rank = outShape.length;\n    const dtype = getCoordsDataType(rank);\n    const coords = getChannels('coords', rank);\n\n    let sourceLocSetup;\n    let sourceRank;\n    if (outSize === 1) {\n      sourceRank = rank + 1;\n      const sourceLocDType = getCoordsDataType(sourceRank);\n      sourceLocSetup = `\n        ${sourceLocDType} sourceLocR = ${sourceLocDType}(${coords.join()}, 0);\n        ++${coords[rank - 1]};\n        ${sourceLocDType} sourceLocG = ${sourceLocDType}(${coords.join()}, 0);\n        ++${coords[rank - 2]};\n        ${sourceLocDType} sourceLocA = ${sourceLocDType}(${coords.join()}, 0);\n        --${coords[rank - 1]};\n        ${sourceLocDType} sourceLocB = ${sourceLocDType}(${coords.join()}, 0);\n        --${coords[rank - 2]};`;\n    } else {\n      sourceRank = rank;\n      sourceLocSetup = `\n        ${dtype} sourceLocR = coords;\n        ++${coords[rank - 1]};\n        ${dtype} sourceLocG = coords;\n        ++${coords[rank - 2]};\n        ${dtype} sourceLocA = coords;\n        --${coords[rank - 1]};\n        ${dtype} sourceLocB = coords;\n        --${coords[rank - 2]};`;\n    }\n    const channels = ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, sourceRank);\n    const inChannel = '.' + channels[sourceRank - 1];  // e.g. \".b\" for rank 3.\n    const intChannels = channels.map(x => 'int ' + x);\n    const srcRCoords =\n        getChannels('sourceLocR', sourceRank - 1).concat('inIdx.r');\n    const srcGCoords =\n        getChannels('sourceLocG', sourceRank - 1).concat('inIdx.g');\n    const srcBCoords =\n        getChannels('sourceLocB', sourceRank - 1).concat('inIdx.b');\n    const srcACoords =\n        getChannels('sourceLocA', sourceRank - 1).concat('inIdx.a');\n\n    const compOp = (op === 'max') ? 'greaterThan' : 'lessThan';\n    const fetchCandidateIdx = firstPass ? '' : `\n          inIdx = round(vec4(getBestIndicesAChannel(${srcRCoords.join()}),\n                             getBestIndicesAChannel(${srcGCoords.join()}),\n                             getBestIndicesAChannel(${srcBCoords.join()}),\n                             getBestIndicesAChannel(${srcACoords.join()})));`;\n\n    const fetchValue = `vec4(\n            getAChannel(${srcRCoords.join()}),\n            hasNextCol ? getAChannel(${srcGCoords.join()}) : 0.,\n            hasNextRow ? getAChannel(${srcBCoords.join()}) : 0.,\n            hasNextRow && hasNextCol ? getAChannel(${srcACoords.join()}) : 0.)`;\n\n    const getBestIndicesAChannelSnippet = firstPass ? '' : `\n      float getBestIndicesAChannel(${intChannels.join()}) {\n        return getChannel(getBestIndicesA(${channels.join()}),\n                                          vec2(${channels.slice(-2).join()}));\n      }`;\n\n    this.userCode = `\n      float getAChannel(${intChannels.join()}) {\n        return getChannel(getA(${channels.join()}),\n                               vec2(${channels.slice(-2).join()}));\n      }\n      ${getBestIndicesAChannelSnippet}\n      void main() {\n        ${dtype} coords = getOutputCoords();\n        bool hasNextCol = ${coords[rank - 1]} < ${outShape[rank - 1] - 1};\n        bool hasNextRow = ${coords[rank - 2]} < ${outShape[rank - 2] - 1};\n        ${sourceLocSetup}\n        ivec4 srcIdx = ivec4(sourceLocR${inChannel}, sourceLocG${inChannel},\n          sourceLocB${inChannel}, sourceLocA${inChannel}) * ${windowSize};\n        ivec4 inIdx = srcIdx;\n        vec4 bestIndex = vec4(inIdx);\n        vec4 bestValue = ${fetchValue};\n\n        for (int i = 0; i < ${windowSize}; i++) {\n          inIdx = srcIdx;\n          ${fetchCandidateIdx}\n          vec4 candidate = ${fetchValue};\n          bvec4 nan = isnan(candidate);\n          bvec4 replace = bvec4(\n            vec4(${compOp}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n          bestValue = vec4(replace.x  ? candidate.x : bestValue.x,\n                           replace.y  ? candidate.y : bestValue.y,\n                           replace.z  ? candidate.z : bestValue.z,\n                           replace.w  ? candidate.w : bestValue.w);\n          bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n          srcIdx++;\n        }\n        setOutput(bestIndex);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class AvgPool2DBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.inShape;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n\n    const avgMultiplier = 1 / (filterHeight * filterWidth);\n\n    this.userCode = `\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n      const float avgMultiplier = float(${avgMultiplier});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${effectiveFilterHeight};\n            wR += ${dilationHeight}) {\n          float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n          if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < ${effectiveFilterWidth};\n            wC+= ${dilationWidth}) {\n            float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n            if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n\n            dotProd += dyValue * avgMultiplier;\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class AvgPool3DBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv3DInfo) {\n    this.outputShape = convInfo.inShape;\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n\n    const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth);\n\n    this.userCode = `\n      const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n      const float avgMultiplier = float(${avgMultiplier});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n        // dx(xD, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < ${effectiveFilterDepth};\n            wD += ${dilationDepth}) {\n          float dyD = float(dyDCorner + wD) / ${strideDepth}.0;\n\n          if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < ${effectiveFilterHeight};\n              wR += ${dilationHeight}) {\n            float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n            if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < ${effectiveFilterWidth};\n                wC += ${dilationWidth}) {\n              float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n              if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n              dotProd += dyValue * avgMultiplier;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as broadcast_util from '../../ops/broadcast_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class BatchNormProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      xShape: number[], meanShape: number[], varianceShape: number[],\n      offsetShape: number[]|null, scaleShape: number[]|null,\n      varianceEpsilon: number) {\n    this.variableNames = ['x', 'mean', 'variance'];\n    broadcast_util.assertAndGetBroadcastShape(xShape, meanShape);\n    broadcast_util.assertAndGetBroadcastShape(xShape, varianceShape);\n\n    let offsetSnippet = '0.0';\n    if (offsetShape != null) {\n      broadcast_util.assertAndGetBroadcastShape(xShape, offsetShape);\n      this.variableNames.push('offset');\n      offsetSnippet = 'getOffsetAtOutCoords()';\n    }\n\n    let scaleSnippet = '1.0';\n    if (scaleShape != null) {\n      broadcast_util.assertAndGetBroadcastShape(xShape, scaleShape);\n      this.variableNames.push('scale');\n      scaleSnippet = 'getScaleAtOutCoords()';\n    }\n\n    this.outputShape = xShape;\n    this.userCode = `\n      void main() {\n        float x = getXAtOutCoords();\n        float mean = getMeanAtOutCoords();\n        float variance = getVarianceAtOutCoords();\n        float offset = ${offsetSnippet};\n        float scale = ${scaleSnippet};\n        float inv = scale * inversesqrt(variance + float(${varianceEpsilon}));\n        setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as broadcast_util from '../../ops/broadcast_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class BatchNormPackedProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(\n      xShape: number[], meanShape: number[], varianceShape: number[],\n      offsetShape: number[]|null, scaleShape: number[]|null,\n      varianceEpsilon: number) {\n    this.variableNames = ['x', 'mean', 'variance'];\n    broadcast_util.assertAndGetBroadcastShape(xShape, meanShape);\n    broadcast_util.assertAndGetBroadcastShape(xShape, varianceShape);\n\n    let offsetSnippet = 'vec4(0.0)';\n    if (offsetShape != null) {\n      broadcast_util.assertAndGetBroadcastShape(xShape, offsetShape);\n      this.variableNames.push('offset');\n      offsetSnippet = 'getOffsetAtOutCoords()';\n    }\n\n    let scaleSnippet = 'vec4(1.0)';\n    if (scaleShape != null) {\n      broadcast_util.assertAndGetBroadcastShape(xShape, scaleShape);\n      this.variableNames.push('scale');\n      scaleSnippet = 'getScaleAtOutCoords()';\n    }\n\n    this.outputShape = xShape;\n    this.userCode = `\n      void main() {\n        vec4 offset = ${offsetSnippet};\n        vec4 scale = ${scaleSnippet};\n\n        vec4 x = getXAtOutCoords();\n        vec4 mean = getMeanAtOutCoords();\n        vec4 variance = getVarianceAtOutCoords();\n\n        vec4 inv = scale * inversesqrt(variance + vec4(${varianceEpsilon}));\n\n        setOutput((x - mean) * inv + offset);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as broadcast_util from '../../ops/broadcast_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\n// (Ar + Ai)(Br + Bi) =\n// ArBr + ArBi + AiBr + AiBi = ArBr - AB + ArBi + AiBr\n// Yr = ArBr - AB\n// Yi = ArBi + AiBr\nexport const COMPLEX_MULTIPLY = {\n  REAL: 'return areal * breal - aimag * bimag;',\n  IMAG: 'return areal * bimag + aimag * breal;'\n};\n\nexport class BinaryOpComplexProgram implements GPGPUProgram {\n  variableNames = ['AReal', 'AImag', 'BReal', 'BImag'];\n  userCode: string;\n  outputShape: number[];\n\n  constructor(op: string, aShape: number[], bShape: number[]) {\n    this.outputShape =\n        broadcast_util.assertAndGetBroadcastShape(aShape, bShape);\n\n    this.userCode = `\n      float binaryOpComplex(\n          float areal, float aimag, float breal, float bimag) {\n        ${op}\n      }\n\n      void main() {\n        float areal = getARealAtOutCoords();\n        float aimag = getAImagAtOutCoords();\n        float breal = getBRealAtOutCoords();\n        float bimag = getBImagAtOutCoords();\n        setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as broadcast_util from '../../ops/broadcast_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nconst CHECK_NAN_SNIPPET = `\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n`;\n\nexport const ADD = 'return a + b;';\nexport const SUB = 'return a - b;';\nexport const MUL = 'return a * b;';\n\n// Without the equality check div produces 0.9999 for a = b, which when\n// floored can cause errors.\nexport const DIV = `\nif (a == b) {\n  return 1.0;\n};\nreturn a / b;`;\n\n// We use native integer division to deal with floating point imprecision. Since\n// we implement floor division and glsl implements truncated division, we\n// correct for this by subtracting 1 from result when the result is negative and\n// there is a remainder.\nexport const INT_DIV = `\n  float s = sign(a) * sign(b);\n  int ia = round(a);\n  int ib = round(b);\n  if (ib != 0) {\n    // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n    return float(idiv(ia, ib, s));\n  } else {\n    return NAN;\n  }\n`;\n\nexport const POW = `\nif(a < 0.0 && floor(b) < b){\n  return NAN;\n}\nif (b == 0.0) {\n  return 1.0;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n    pow(abs(a), b) : sign(a) * pow(abs(a), b);\n`;\nexport const SQUARED_DIFFERENCE = 'return (a - b) * (a - b);';\n\nexport const EQUAL = `return float(a == b);`;\n\nexport const NOT_EQUAL = `return float(a != b);`;\n\nexport const LESS = `return float(a < b);`;\n\nexport const LESS_EQUAL = `return float(a <= b);`;\n\nexport const GREATER = `return float(a > b);`;\n\nexport const GREATER_EQUAL = `return float(a >= b);`;\n\nexport const LOGICAL_AND = `return float(a >= 1.0 && b >= 1.0);`;\n\nexport const LOGICAL_OR = `return float(a >= 1.0 || b >= 1.0);`;\n\nexport const MAX = CHECK_NAN_SNIPPET + `\n  return max(a, b);\n`;\nexport const MIN = CHECK_NAN_SNIPPET + `\n  return min(a, b);\n`;\nexport const MOD = `if (b == 0.0) return NAN;\n  return mod(a, b);`;\n\nexport const ATAN2 = CHECK_NAN_SNIPPET + `\n  return atan(a, b);\n`;\n\nexport const ELU_DER = `return (b >= 1.0) ? a : a * (b + 1.0);`;\n\nexport const PRELU = `return (a < 0.) ? b * a : a;`;\n\nexport class BinaryOpProgram implements GPGPUProgram {\n  variableNames = ['A', 'B'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(op: string, aShape: number[], bShape: number[]) {\n    this.outputShape =\n        broadcast_util.assertAndGetBroadcastShape(aShape, bShape);\n    this.userCode = `\n      float binaryOperation(float a, float b) {\n        ${op}\n      }\n\n      void main() {\n        float a = getAAtOutCoords();\n        float b = getBAtOutCoords();\n        setOutput(binaryOperation(a, b));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as broadcast_util from '../../ops/broadcast_util';\nimport {sizeFromShape} from '../../util';\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nconst CHECK_NAN_SNIPPET = `\n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n`;\n\n// We do the same as in ./binaryop_gpu, with vec4 and ivec4.\n// On Linux, the vectorized implementation produces NaNs when a and b are 0.\nexport const DIV = `\n  // vec4 one = vec4(equal(a, b));\n  // return one + (vec4(1.0) - one) * a / b;\n  vec4 result = a / b;\n  if(a.x == b.x) {\n    result.x = 1.;\n  }\n  if(a.y == b.y) {\n    result.y = 1.;\n  }\n  if(a.z == b.z) {\n    result.z = 1.;\n  }\n  if(a.w == b.w) {\n    result.w = 1.;\n  }\n\n  return result;\n`;\n\nexport const INT_DIV = `\n  ivec4 ia = round(a);\n  ivec4 ib = round(b);\n  bvec4 cond = notEqual(ib, ivec4(0));\n  ivec4 result = ivec4(0);\n  vec4 s = sign(a) * sign(b);\n\n  // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n  if (cond[0]) {\n    result[0] = idiv(ia[0], ib[0], s[0]);\n  }\n  if (cond[1]) {\n    result[1] = idiv(ia[1], ib[1], s[1]);\n  }\n  if (cond[2]) {\n    result[2] = idiv(ia[2], ib[2], s[2]);\n  }\n  if (cond[3]) {\n    result[3] = idiv(ia[3], ib[3], s[3]);\n  }\n  return vec4(result);\n`;\n\nexport const POW = `\n  // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n  vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n  vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n  vec4 result = multiplier * pow(abs(a), b);\n\n  // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n  bvec4 isExpZero = equal(b, vec4(0.0));\n  result.r = isExpZero.r ? 1.0 : result.r;\n  result.g = isExpZero.g ? 1.0 : result.g;\n  result.b = isExpZero.b ? 1.0 : result.b;\n  result.a = isExpZero.a ? 1.0 : result.a;\n\n  vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n  ` +\n    CHECK_NAN_SNIPPET + `\n  return result;\n`;\n\nexport const PRELU = `\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;\n\nexport const ELU_DER = `\n  vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n  return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`;\n\nexport const ATAN2 = `\n  vec4 result = atan(a, b);\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  ` +\n    CHECK_NAN_SNIPPET + `\n  return result;\n`;\n\nexport const EQUAL = `\n  return vec4(equal(a, b));\n`;\n\nexport const NOT_EQUAL = `\n  return vec4(notEqual(a, b));\n`;\n\nexport const LESS = `\n  return vec4(lessThan(a, b));\n`;\n\nexport const LESS_EQUAL = `\n  return vec4(lessThanEqual(a, b));\n`;\n\nexport const GREATER = `\n  return vec4(greaterThan(a, b));\n`;\n\nexport const GREATER_EQUAL = `\n  return vec4(greaterThanEqual(a, b));\n`;\n\nexport const LOGICAL_AND = `\n  return vec4(\n    vec4(greaterThanEqual(a, vec4(1.0))) *\n    vec4(greaterThanEqual(b, vec4(1.0))));\n`;\n\nexport const LOGICAL_OR = `\n  return min(\n    vec4(greaterThanEqual(a, vec4(1.0))) +\n    vec4(greaterThanEqual(b, vec4(1.0))),\n    vec4(1.0));\n`;\n\nexport const MAX = `\n  vec4 result = vec4(max(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  ` +\n    CHECK_NAN_SNIPPET + `\n  return result;\n`;\n\nexport const MIN = `\n  vec4 result = vec4(min(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  ` +\n    CHECK_NAN_SNIPPET + `\n  return result;\n`;\n\nexport const MOD = `\n  vec4 result = mod(a, b);\n  vec4 isNaN = vec4(equal(b, vec4(0.0)));\n  ` +\n    CHECK_NAN_SNIPPET + `\n  return result;\n`;\n\nexport class BinaryOpPackedProgram implements GPGPUProgram {\n  variableNames = ['A', 'B'];\n  outputShape: number[];\n  userCode: string;\n  supportsBroadcasting = true;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(\n      op: string, aShape: number[], bShape: number[],\n      checkOutOfBounds = false) {\n    this.outputShape =\n        broadcast_util.assertAndGetBroadcastShape(aShape, bShape);\n    const rank = this.outputShape.length;\n    let checkOutOfBoundsString = '';\n    if (checkOutOfBounds) {\n      if (rank === 0 || sizeFromShape(this.outputShape) === 1) {\n        checkOutOfBoundsString = `\n          result.y = 0.;\n          result.z = 0.;\n          result.w = 0.;\n        `;\n      } else {\n        const dtype = getCoordsDataType(rank);\n        checkOutOfBoundsString = `\n          ${dtype} coords = getOutputCoords();\n        `;\n        if (rank === 1) {\n          checkOutOfBoundsString += `\n            result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n            result.z = 0.;\n            result.w = 0.;\n          `;\n        } else {\n          const channels = getChannels('coords', rank);\n          checkOutOfBoundsString += `\n            bool nextRowOutOfBounds =\n              (${channels[rank - 2]} + 1) >= ${this.outputShape[rank - 2]};\n            bool nextColOutOfBounds =\n              (${channels[rank - 1]} + 1) >= ${this.outputShape[rank - 1]};\n            result.y = nextColOutOfBounds ? 0. : result.y;\n            result.z = nextRowOutOfBounds ? 0. : result.z;\n            result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n          `;\n        }\n      }\n    }\n\n    this.userCode = `\n      vec4 binaryOperation(vec4 a, vec4 b) {\n        ${op}\n      }\n\n      void main() {\n        vec4 a = getAAtOutCoords();\n        vec4 b = getBAtOutCoords();\n\n        vec4 result = binaryOperation(a, b);\n        ${checkOutOfBoundsString}\n\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ClipProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n\n  // Caching uniform locations for speed.\n  minLoc: WebGLUniformLocation;\n  maxLoc: WebGLUniformLocation;\n\n  constructor(aShape: number[]) {\n    this.outputShape = aShape;\n    this.userCode = `\n      uniform float minVal;\n      uniform float maxVal;\n\n      void main() {\n        float value = getAAtOutCoords();\n        if (isnan(value)) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, minVal, maxVal));\n      }\n    `;\n  }\n\n  getCustomSetupFunc(min: number, max: number) {\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.minLoc == null) {\n        this.minLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'minVal');\n        this.maxLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'maxVal');\n      }\n      gpgpu.gl.uniform1f(this.minLoc, min);\n      gpgpu.gl.uniform1f(this.maxLoc, max);\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ClipPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  packedInputs = true;\n  packedOutput = true;\n  userCode: string;\n  outputShape: number[];\n\n  // Caching uniform locations for speed.\n  minLoc: WebGLUniformLocation;\n  maxLoc: WebGLUniformLocation;\n\n  constructor(aShape: number[]) {\n    this.outputShape = aShape;\n    this.userCode = `\n      uniform float minVal;\n      uniform float maxVal;\n\n      void main() {\n        vec4 value = getAAtOutCoords();\n\n        if (any(isnan(value))) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n      }\n    `;\n  }\n\n  getCustomSetupFunc(min: number, max: number) {\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.minLoc == null) {\n        this.minLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'minVal');\n        this.maxLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'maxVal');\n      }\n      gpgpu.gl.uniform1f(this.minLoc, min);\n      gpgpu.gl.uniform1f(this.maxLoc, max);\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ComplexAbsProgram implements GPGPUProgram {\n  variableNames = ['real', 'imag'];\n  userCode: string;\n  outputShape: number[];\n\n  constructor(shape: number[]) {\n    this.outputShape = shape;\n    this.userCode = `\n      void main() {\n        float re = abs(getRealAtOutCoords());\n        float im = abs(getImagAtOutCoords());\n        float mx = max(re, im);\n\n        // sadly the length function in glsl is not underflow-safe\n        // (at least not on Intel GPUs). So the safe solution is\n        // to ensure underflow-safety in all cases.\n        setOutput(\n          mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n        );\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as concat_util from '../../ops/concat_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ConcatProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[] = [];\n  userCode: string;\n\n  // Concats 2d tensors along axis=1. See comments in MathBackendWebGL.concat().\n  constructor(shapes: Array<[number, number]>) {\n    this.outputShape = concat_util.computeOutShape(shapes, 1 /* axis */);\n    this.variableNames = shapes.map((_, i) => `T${i}`);\n\n    const offsets: number[] = new Array(shapes.length - 1);\n    offsets[0] = shapes[0][1];\n    for (let i = 1; i < offsets.length; i++) {\n      offsets[i] = offsets[i - 1] + shapes[i][1];\n    }\n\n    const snippets = [`if (yC < ${offsets[0]}) setOutput(getT0(yR, yC));`];\n    for (let i = 1; i < offsets.length; i++) {\n      const shift = offsets[i - 1];\n      snippets.push(\n          `else if (yC < ${offsets[i]}) ` +\n          `setOutput(getT${i}(yR, yC-${shift}));`);\n    }\n    const lastIndex = offsets.length;\n    const lastShift = offsets[offsets.length - 1];\n    snippets.push(`else setOutput(getT${lastIndex}(yR, yC-${lastShift}));`);\n\n    this.userCode = `\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int yR = coords.x;\n        int yC = coords.y;\n\n        ${snippets.join('\\n        ')}\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as concat_util from '../../ops/concat_util';\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class ConcatPackedProgram implements GPGPUProgram {\n  variableNames: string[];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(shapes: number[][], axis: number) {\n    this.outputShape = concat_util.computeOutShape(shapes, axis);\n    const shape = this.outputShape;\n    const rank = shape.length;\n    const dtype = getCoordsDataType(rank);\n    const coords = getChannels('coords', rank);\n    const channels = ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, rank);\n    this.variableNames = shapes.map((_, i) => `T${i}`);\n\n    const offsets: number[] = new Array(shapes.length - 1);\n    offsets[0] = shapes[0][axis];\n    for (let i = 1; i < offsets.length; i++) {\n      offsets[i] = offsets[i - 1] + shapes[i][axis];\n    }\n\n    const channel = channels[axis];\n    const lastChannels = channels.slice(-2);\n    const allChannels = channels.join();\n\n    let getValueSnippet = `if (${channel} < ${offsets[0]}) {\n        return getChannel(\n            getT0(${allChannels}), vec2(${lastChannels.join()}));\n        }`;\n    for (let i = 1; i < offsets.length; i++) {\n      const shift = offsets[i - 1];\n      // Note: the >= comparison below may seem unnecessary given the check\n      // above but is needed to workaround branch execution issues on some\n      // devices. It makes all the conditions exclusive without relying on\n      // execution order.\n      getValueSnippet += `\n        if (${channel} < ${offsets[i]}  && ${channel} >= ${offsets[i - 1]}) {\n          return getChannel(\n            getT${i}(${shiftedChannels(channels, channel, shift)}),\n            vec2(${shiftedChannels(lastChannels, channel, shift)}));\n        }`;\n    }\n    const lastIndex = offsets.length;\n    const shift = offsets[offsets.length - 1];\n    getValueSnippet += `\n        return getChannel(\n          getT${lastIndex}(${shiftedChannels(channels, channel, shift)}),\n          vec2(${shiftedChannels(lastChannels, channel, shift)}));`;\n\n    this.userCode = `\n      float getValue(${channels.map(x => 'int ' + x)}) {\n        ${getValueSnippet}\n      }\n\n      void main() {\n        ${dtype} coords = getOutputCoords();\n        vec4 result = vec4(getValue(${coords}), 0., 0., 0.);\n\n        ${coords[rank - 1]} = ${coords[rank - 1]} + 1;\n        if (${coords[rank - 1]} < ${shape[rank - 1]}) {\n          result.g = getValue(${coords});\n        }\n\n        ${coords[rank - 2]} = ${coords[rank - 2]} + 1;\n        if (${coords[rank - 2]} < ${shape[rank - 2]}) {\n          result.a = getValue(${coords});\n        }\n\n        ${coords[rank - 1]} = ${coords[rank - 1]} - 1;\n        if (${coords[rank - 2]} < ${shape[rank - 2]} &&\n            ${coords[rank - 1]} < ${shape[rank - 1]}) {\n          result.b = getValue(${coords});\n        }\n        setOutput(result);\n      }\n    `;\n  }\n}\n\n/**\n * Return an expression for coordinates into a vector where a given channel\n * will be offset by [shift].\n *\n * @param channels the channels to consider\n * @param channel the channel we want shifted\n * @param shift  the amount to subtract from the channel.\n *\n * @returns a string of the form 'x, y-[shift], z' where any one channel can\n * have the shift applied.\n */\nfunction shiftedChannels(channels: string[], channel: string, shift: number) {\n  const channelIdx = channels.indexOf(channel);\n  const res = channels.map((c, idx) => {\n    if (idx === channelIdx) {\n      return `${c} - ${shift}`;\n    } else {\n      return c;\n    }\n  });\n  return res.join();\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class Conv2DDerFilterProgram implements GPGPUProgram {\n  variableNames = ['x', 'dy'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.filterShape;\n\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int d2 = coords.w;\n\n        // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int b = 0; b < ${convInfo.batchSize}; b++) {\n          for (int yR = 0; yR < ${convInfo.outHeight}; yR++) {\n            int xR = wR + yR * ${strideHeight} - ${padTop};\n\n            if (xR < 0 || xR >= ${convInfo.inHeight}) {\n              continue;\n            }\n\n            for (int yC = 0; yC < ${convInfo.outWidth}; yC++) {\n              int xC = wC + yC * ${strideWidth} - ${padLeft};\n\n              if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                continue;\n              }\n\n              if (${isChannelsLast}) {\n                float dyValue = getDy(b, yR, yC, d2);\n                float xValue = getX(b, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              } else {\n                float dyValue = getDy(b, d2, yR, yC);\n                float xValue = getX(b, d1, xR, xC);\n                dotProd += (xValue * dyValue);\n              }\n\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class Conv2DDerInputProgram implements GPGPUProgram {\n  variableNames = ['dy', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.inShape;\n\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n\n    const padTop = filterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n\n    const rowDim = isChannelsLast ? 1 : 2;\n    const colDim = isChannelsLast ? 2 : 3;\n    const channelDim = isChannelsLast ? 3 : 1;\n\n    this.userCode = `\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[${channelDim}];\n\n        ivec2 dyCorner = ivec2(coords[${rowDim}], coords[${colDim}]) - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${filterHeight}; wR++) {\n          float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n          if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = ${filterHeight} - 1 - wR;\n\n          for (int wC = 0; wC < ${filterWidth}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n            if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = ${filterWidth} - 1 - wC;\n\n            for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) {\n\n              if (${isChannelsLast}) {\n                float xValue = getDy(batch, idyR, idyC, d2);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              } else {\n                float xValue = getDy(batch, d2, idyR, idyC);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class Conv3DDerFilterProgram implements GPGPUProgram {\n  variableNames = ['x', 'dy'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv3DInfo) {\n    this.outputShape = convInfo.filterShape;\n\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const padFront = convInfo.padInfo.front;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n\n    this.userCode = `\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int wF = coords.x;\n        int wR = coords.y;\n        int wC = coords.z;\n        int d1 = coords.w;\n        int d2 = coords.u;\n\n        float dotProd = 0.0;\n\n        for (int b = 0; b < ${convInfo.batchSize}; b++) {\n          for (int yF = 0; yF < ${convInfo.outDepth}; yF++) {\n            int xF = wF + yF * ${strideDepth} - ${padFront};\n\n            if (xF < 0 || xF >= ${convInfo.inDepth}) {\n              continue;\n            }\n\n            for (int yR = 0; yR < ${convInfo.outHeight}; yR++) {\n              int xR = wR + yR * ${strideHeight} - ${padTop};\n\n              if (xR < 0 || xR >= ${convInfo.inHeight}) {\n                continue;\n              }\n\n              for (int yC = 0; yC < ${convInfo.outWidth}; yC++) {\n                int xC = wC + yC * ${strideWidth} - ${padLeft};\n\n                if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                  continue;\n                }\n\n                float dyValue = getDy(b, yF, yR, yC, d2);\n                float xValue = getX(b, xF, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class Conv3DDerInputProgram implements GPGPUProgram {\n  variableNames = ['dy', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv3DInfo) {\n    this.outputShape = convInfo.inShape;\n\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n\n    const padFront = filterDepth - 1 - convInfo.padInfo.front;\n    const padTop = filterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n\n    this.userCode = `\n      const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.u;\n\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyFCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        float dotProd = 0.0;\n        for (int wF = 0; wF < ${filterDepth}; wF++) {\n          float dyF = float(dyFCorner + wF) / ${strideDepth}.0;\n\n          if (dyF < 0.0 || dyF >= ${convInfo.outDepth}.0 || fract(dyF) > 0.0) {\n            continue;\n          }\n          int idyF = int(dyF);\n\n          int wFPerm = ${filterDepth} - 1 - wF;\n\n          for (int wR = 0; wR < ${filterHeight}; wR++) {\n            float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n            if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 ||\n              fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            int wRPerm = ${filterHeight} - 1 - wR;\n\n            for (int wC = 0; wC < ${filterWidth}; wC++) {\n              float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n              if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              int wCPerm = ${filterWidth} - 1 - wC;\n\n              for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) {\n                float xValue = getDy(batch, idyF, idyR, idyC, d2);\n                float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class DepthwiseConv2DDerFilterProgram implements GPGPUProgram {\n  variableNames = ['x', 'dy'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.filterShape;\n\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const channelMul = convInfo.outChannels / convInfo.inChannels;\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int dm = coords.w;\n        int d2 = d1 * ${channelMul} + dm;\n\n        float dotProd = 0.0;\n\n        // TO DO: Vec4 over the batch size\n        for (int b = 0; b < ${convInfo.batchSize}; b++) {\n          for (int yR = 0; yR < ${convInfo.outHeight}; yR++) {\n            int xR = wR + yR * ${strideHeight} - ${padTop};\n\n            if (xR < 0 || xR >= ${convInfo.inHeight}) {\n              continue;\n            }\n\n            for (int yC = 0; yC < ${convInfo.outWidth}; yC++) {\n              int xC = wC + yC * ${strideWidth} - ${padLeft};\n\n              if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                continue;\n              }\n\n              float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class DepthwiseConv2DDerInputProgram implements GPGPUProgram {\n  variableNames = ['dy', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.inShape;\n\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n\n    const padTop = filterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n    const channelMul = convInfo.outChannels / convInfo.inChannels;\n\n    this.userCode = `\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n        ivec2 dyCorner = coords.yz - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        float dotProd = 0.0;\n\n        for (int wR = 0; wR < ${filterHeight}; wR++) {\n          float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n          if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = ${filterHeight} - 1 - wR;\n\n          for (int wC = 0; wC < ${filterWidth}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n            if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = ${filterWidth} - 1 - wC;\n\n            // TO DO: Vec4 over the channelMul\n            for (int dm = 0; dm < ${channelMul}; dm++) {\n              int d2 = d1 * ${channelMul} + dm;\n              float xValue = getDy(batch, idyR, idyC, d2);\n              float wValue = getW(wRPerm, wCPerm, d1, dm);\n              dotProd += xValue * wValue;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class Conv2DProgram implements GPGPUProgram {\n  variableNames = ['x', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      convInfo: Conv2DInfo, addBias = false, activation: string = null,\n      hasPreluActivationWeights = false) {\n    this.outputShape = convInfo.outShape;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n\n    const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4;\n    const inputDepthVec4Remainder = convInfo.inChannels % 4;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n\n    const rowDim = isChannelsLast ? 1 : 2;\n    const colDim = isChannelsLast ? 2 : 3;\n    const channelDim = isChannelsLast ? 3 : 1;\n\n    let activationSnippet = '', applyActivationSnippet = '';\n    if (activation) {\n      if (hasPreluActivationWeights) {\n        activationSnippet = `float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          ${activation}\n        }`;\n      } else {\n        activationSnippet = `\n          float activation(float x) {\n            ${activation}\n          }\n        `;\n      }\n\n      applyActivationSnippet = `result = activation(result);`;\n    }\n\n    const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n    if (addBias) {\n      this.variableNames.push('bias');\n    }\n\n    if (hasPreluActivationWeights) {\n      this.variableNames.push('preluActivationWeights');\n    }\n\n    this.userCode = `\n      ${activationSnippet}\n\n      const ivec2 strides = ivec2(${strideHeight}, ${strideWidth});\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d2 = coords[${channelDim}];\n\n        ivec2 xRCCorner =\n            ivec2(coords[${rowDim}], coords[${colDim}]) * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${filterHeight}; wR++) {\n          int xR = xRCorner + wR * ${dilationHeight};\n\n          if (xR < 0 || xR >= ${convInfo.inHeight}) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${filterWidth}; wC++) {\n            int xC = xCCorner + wC * ${dilationWidth};\n\n            if (xC < 0 || xC >= ${convInfo.inWidth}) {\n              continue;\n            }\n\n            for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) {\n              vec4 wValues = vec4(\n                getW(wR, wC, d1, d2),\n                getW(wR, wC, d1 + 1, d2),\n                getW(wR, wC, d1 + 2, d2),\n                getW(wR, wC, d1 + 3, d2)\n              );\n\n              if (${isChannelsLast}) {\n                vec4 xValues = vec4(\n                  getX(batch, xR, xC, d1),\n                  getX(batch, xR, xC, d1 + 1),\n                  getX(batch, xR, xC, d1 + 2),\n                  getX(batch, xR, xC, d1 + 3)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec4 xValues = vec4(\n                  getX(batch, d1, xR, xC),\n                  getX(batch, d1 + 1, xR, xC),\n                  getX(batch, d1 + 2, xR, xC),\n                  getX(batch, d1 + 3, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n\n            if (${inputDepthVec4Remainder === 1}) {\n\n              if (${isChannelsLast}) {\n                dotProd +=\n                    getX(batch, xR, xC, ${inputDepthNearestVec4}) *\n                    getW(wR, wC, ${inputDepthNearestVec4}, d2);\n              } else {\n                dotProd +=\n                    getX(batch, ${inputDepthNearestVec4}, xR, xC) *\n                    getW(wR, wC, ${inputDepthNearestVec4}, d2);\n              }\n\n            } else if (${inputDepthVec4Remainder === 2}) {\n              vec2 wValues = vec2(\n                getW(wR, wC, ${inputDepthNearestVec4}, d2),\n                getW(wR, wC, ${inputDepthNearestVec4} + 1, d2)\n              );\n\n              if (${isChannelsLast}) {\n                vec2 xValues = vec2(\n                  getX(batch, xR, xC, ${inputDepthNearestVec4}),\n                  getX(batch, xR, xC, ${inputDepthNearestVec4} + 1)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec2 xValues = vec2(\n                  getX(batch, ${inputDepthNearestVec4}, xR, xC),\n                  getX(batch, ${inputDepthNearestVec4} + 1, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            } else if (${inputDepthVec4Remainder === 3}) {\n              vec3 wValues = vec3(\n                getW(wR, wC, ${inputDepthNearestVec4}, d2),\n                getW(wR, wC, ${inputDepthNearestVec4} + 1, d2),\n                getW(wR, wC, ${inputDepthNearestVec4} + 2, d2)\n              );\n\n              if (${isChannelsLast}) {\n                vec3 xValues = vec3(\n                  getX(batch, xR, xC, ${inputDepthNearestVec4}),\n                  getX(batch, xR, xC, ${inputDepthNearestVec4} + 1),\n                  getX(batch, xR, xC, ${inputDepthNearestVec4} + 2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec3 xValues = vec3(\n                  getX(batch, ${inputDepthNearestVec4}, xR, xC),\n                  getX(batch, ${inputDepthNearestVec4} + 1, xR, xC),\n                  getX(batch, ${inputDepthNearestVec4} + 2, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            }\n          }\n        }\n\n        float result = dotProd;\n        ${addBiasSnippet}\n        ${applyActivationSnippet}\n        setOutput(result);\n      }\n    `;\n  }\n}\n\nexport class Conv3DProgram implements GPGPUProgram {\n  variableNames = ['x', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv3DInfo) {\n    this.outputShape = convInfo.outShape;\n    const padFront = convInfo.padInfo.front;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n\n    const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4;\n    const inputDepthVec4Remainder = convInfo.inChannels % 4;\n\n    this.userCode = `\n      const ivec3 strides = ivec3(${strideDepth}, ${strideHeight}, ${\n        strideWidth});\n      const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d2 = coords.u;\n\n        ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xFCorner = xFRCCorner.x;\n        int xRCorner = xFRCCorner.y;\n        int xCCorner = xFRCCorner.z;\n\n        // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n        // y(yF, yR, yC, d2). ? = to be determined. : = across all\n        // values in that axis.\n        float dotProd = 0.0;\n        for (int wF = 0; wF < ${filterDepth}; wF++) {\n          int xF = xFCorner + wF * ${dilationDepth};\n\n          if (xF < 0 || xF >= ${convInfo.inDepth}) {\n            continue;\n          }\n\n          for (int wR = 0; wR < ${filterHeight}; wR++) {\n            int xR = xRCorner + wR * ${dilationHeight};\n\n            if (xR < 0 || xR >= ${convInfo.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${filterWidth}; wC++) {\n              int xC = xCCorner + wC * ${dilationWidth};\n\n              if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                continue;\n              }\n\n              for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) {\n                vec4 xValues = vec4(\n                  getX(batch, xF, xR, xC, d1),\n                  getX(batch, xF, xR, xC, d1 + 1),\n                  getX(batch, xF, xR, xC, d1 + 2),\n                  getX(batch, xF, xR, xC, d1 + 3)\n                );\n                vec4 wValues = vec4(\n                  getW(wF, wR, wC, d1, d2),\n                  getW(wF, wR, wC, d1 + 1, d2),\n                  getW(wF, wR, wC, d1 + 2, d2),\n                  getW(wF, wR, wC, d1 + 3, d2)\n                );\n\n                dotProd += dot(xValues, wValues);\n              }\n\n              if (${inputDepthVec4Remainder === 1}) {\n                dotProd +=\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4}) *\n                  getW(wF, wR, wC, ${inputDepthNearestVec4}, d2);\n              } else if (${inputDepthVec4Remainder === 2}) {\n                vec2 xValues = vec2(\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4}),\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1)\n                );\n                vec2 wValues = vec2(\n                  getW(wF, wR, wC, ${inputDepthNearestVec4}, d2),\n                  getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else if (${inputDepthVec4Remainder === 3}) {\n                vec3 xValues = vec3(\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4}),\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1),\n                  getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 2)\n                );\n                vec3 wValues = vec3(\n                  getW(wF, wR, wC, ${inputDepthNearestVec4}, d2),\n                  getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2),\n                  getW(wF, wR, wC, ${inputDepthNearestVec4} + 2, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class DepthwiseConv2DProgram implements GPGPUProgram {\n  variableNames = ['x', 'W'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      convInfo: Conv2DInfo, addBias = false, activation: string = null,\n      hasPreluActivation = false) {\n    this.outputShape = convInfo.outShape;\n\n    const xNumRows = convInfo.inHeight;\n    const xNumCols = convInfo.inWidth;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const channelMul = convInfo.outChannels / convInfo.inChannels;\n\n    let activationSnippet = '', applyActivationSnippet = '';\n    if (activation) {\n      if (hasPreluActivation) {\n        activationSnippet = `float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          ${activation}\n        }`;\n      } else {\n        activationSnippet = `\n          float activation(float x) {\n            ${activation}\n          }\n        `;\n      }\n\n      applyActivationSnippet = `result = activation(result);`;\n    }\n\n    const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n    if (addBias) {\n      this.variableNames.push('bias');\n    }\n\n    if (hasPreluActivation) {\n      this.variableNames.push('preluActivationWeights');\n    }\n\n    this.userCode = `\n      ${activationSnippet}\n\n      const ivec2 strides = ivec2(${strideHeight}, ${strideWidth});\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / ${channelMul};\n        int q = d2 - d1 * ${channelMul};\n\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n        for (int wR = 0; wR < ${filterHeight}; wR++) {\n          int xR = xRCorner + wR * ${dilationHeight};\n\n          if (xR < 0 || xR >= ${xNumRows}) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${filterWidth}; wC++) {\n            int xC = xCCorner + wC * ${dilationWidth};\n\n            if (xC < 0 || xC >= ${xNumCols}) {\n              continue;\n            }\n\n            float xVal = getX(batch, xR, xC, d1);\n            float wVal = getW(wR, wC, d1, q);\n            dotProd += xVal * wVal;\n          }\n        }\n\n        float result = dotProd;\n        ${addBiasSnippet}\n        ${applyActivationSnippet}\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport * as util from '../../util';\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class DepthwiseConvPacked2DProgram implements GPGPUProgram {\n  variableNames = ['x', 'W'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      convInfo: Conv2DInfo, addBias = false, activation: string = null,\n      hasPreluActivation = false) {\n    this.outputShape = convInfo.outShape;\n\n    const xNumRows = convInfo.inHeight;\n    const xNumCols = convInfo.inWidth;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const texelsAcross = filterWidth;\n\n    let mainLoop = `int xR; int xC; int xCOffset;`;\n\n    for (let r = 0; r < filterHeight; r++) {\n      for (let c = 0; c < filterWidth; c++) {\n        mainLoop += `\n          vec4 xTexelR${r}C${c * 2} = vec4(0.);\n          vec4 wR${r}C${c} = vec4(0.);\n          vec4 xR${r}C${c} = vec4(0.);`;\n      }\n    }\n\n    /**\n     * This vectorized implementation works by gathering the values needed for\n     * each output channel's dot product into vec4's and then multiplying them\n     * all together (this happens in the final double for-loop below). Most of\n     * the main loop consists of constructing these vec4's with the minimum\n     * number of texture2D calls, which means making use of all four returned\n     * values from a texture2D call at once.\n     */\n    for (let r = 0; r < filterHeight; r++) {\n      for (let texelC = 0; texelC < texelsAcross; texelC++) {\n        const c = texelC * 2;\n\n        mainLoop += `\n          xR = xRCorner + ${r * dilationHeight};\n          xC = xCCorner + ${c * dilationWidth};\n        `;\n\n        if (strideWidth === 1) {\n          if (c < filterWidth) {\n            // If padding is odd, the outer texels have to be composed.\n            if (padLeft % 2 === 1) {\n              // TODO: Ensure vec4 previous does not result in redundant sample,\n              // and avoid setting xTexelRC's that exceed the boundary in the\n              // first place rather than resetting them to vec4(0)).\n\n              // To compute xCOffset:\n              // - If padding is odd, we must add 1 to ensure we ask for an\n              // even-numbered row.\n              // - We subtract 2 to access the previous texel.\n\n              mainLoop += `\n                xCOffset = xC + 1;\n                if(xR >= 0 && xR < ${xNumRows} && xCOffset >= 0 && xCOffset < ${\n                  xNumCols}) {\n                  xTexelR${r}C${c} = getX(batch, xR, xCOffset, d1);\n\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if(xCOffset + 1 >= ${xNumCols}) {\n                    xTexelR${r}C${c}.zw = vec2(0.);\n                  }\n                } else {\n                  xTexelR${r}C${c} = vec4(0.);\n                }\n\n                xCOffset = xC + 1 - 2;\n                if(xR >= 0 && xR < ${xNumRows} && xCOffset >= 0 && xCOffset < ${\n                  xNumCols}) {\n                  vec4 previous = getX(batch, xR, xCOffset, d1);\n\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if(xCOffset + 1 >= ${xNumCols}) {\n                    previous.zw = vec2(0.);\n                  }\n\n                  xR${r}C${c} = vec4(previous.zw, xTexelR${r}C${c}.xy);\n                } else {\n                  xR${r}C${c} = vec4(0, 0, xTexelR${r}C${c}.xy);\n                }\n              `;\n            } else {\n              // Padding is even, so xRC corresponds to a single texel.\n              mainLoop += `\n                if(xR >= 0 && xR < ${xNumRows} && xC >= 0 && xC < ${xNumCols}) {\n                  xTexelR${r}C${c} = getX(batch, xR, xC, d1);\n                } else {\n                  xTexelR${r}C${c} = vec4(0.);\n                }\n\n                xR${r}C${c} = xTexelR${r}C${c};\n              `;\n            }\n\n            if (c + 1 < filterWidth) {\n              // If dilation is even, the second entry should match the first\n              // (either both are composed or both are single samples). But if\n              // dilation is odd, then the second entry should be the opposite\n              // of the first (if the first is composed, the second is a single\n              // sample, and vice versa.)\n\n              const nextTexelOffset = padLeft % 2 === 0 ?\n                  util.nearestLargerEven(dilationWidth) :\n                  dilationWidth;\n\n              if ((dilationWidth % 2 === 0 && padLeft % 2 === 1) ||\n                  (dilationWidth % 2 !== 0 && padLeft % 2 !== 1)) {\n                mainLoop += `\n                  xCOffset = xC + ${padLeft % 2} + ${nextTexelOffset};\n\n                  if(xR >= 0 && xR < ${xNumRows} &&\n                    xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                    xTexelR${r}C${c + 2} = getX(batch, xR, xCOffset, d1);\n                  }\n                `;\n\n                // If dilation > 1 then the xRC's will not be able to share any\n                // values, so each xRC will require two unique calls to getX.\n                if (dilationWidth > 1) {\n                  mainLoop += `\n                    xCOffset -= 2;\n                    if(xR >= 0 && xR < ${xNumRows} &&\n                      xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                      xTexelR${r}C${c} = getX(batch, xR, xCOffset, d1);\n                    } else {\n                      xTexelR${r}C${c} = vec4(0.);\n                    }\n                  `;\n                }\n\n                mainLoop += `\n                  xR${r}C${c + 1} = vec4(\n                    xTexelR${r}C${c}.zw, xTexelR${r}C${c + 2}.xy);\n                `;\n              } else {\n                mainLoop += `\n                  xCOffset = xC + ${nextTexelOffset};\n\n                  if(xR >= 0 && xR < ${xNumRows} &&\n                    xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                    xTexelR${r}C${c + 2} = getX(batch, xR, xCOffset, d1);\n                  }\n\n                  xR${r}C${c + 1} = xTexelR${r}C${c + 2};\n                `;\n              }\n            }\n          }\n        } else {  // stride > 1\n          if (c < filterWidth) {\n            mainLoop += `\n              if(xR >= 0 && xR < ${xNumRows}) {\n            `;\n\n            // Depending on whether padLeft is even or odd, we want either the\n            // xy or zw channels from X texels for xR${r}C${c}. If padLeft is\n            // even, xR${r}C${c + 1} is simply the zw channels of texels we've\n            // already sampled. But if padLeft is odd, xR${r}C{$c + 1}.zw will\n            // need to come from the xy channels of a new texel, hence the `vec4\n            // final` initialized below.\n            if (padLeft % 2 === 1) {\n              mainLoop += `\n                xCOffset = xC + 1 - ${strideWidth};\n                if(xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                  xTexelR${r}C${c} = getX(batch, xR, xCOffset, d1);\n                } else {\n                  xTexelR${r}C${c} = vec4(0.);\n                }\n\n                if(xC + 1 >= 0 && xC + 1 < ${xNumCols}) {\n                  xTexelR${r}C${c + 2} = getX(batch, xR, xC + 1, d1);\n                } else {\n                  xTexelR${r}C${c + 2} = vec4(0.);\n                }\n\n                xR${r}C${c} = vec4(\n                  xTexelR${r}C${c}.zw, xTexelR${r}C${c + 2}.zw);\n              `;\n\n              if (c + 1 < filterWidth) {\n                mainLoop += `\n                  vec4 final = vec4(0.);\n                  xCOffset = xC + 1 + ${strideWidth};\n                  if(xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                    final = getX(batch, xR, xCOffset, d1);\n                  }\n                  xR${r}C${c + 1} = vec4(xTexelR${r}C${c + 2}.xy, final.xy);\n                `;\n              }\n            } else {\n              mainLoop += `\n                if(xC >= 0 && xC < ${xNumCols}) {\n                  xTexelR${r}C${c} = getX(batch, xR, xC, d1);\n                } else {\n                  xTexelR${r}C${c} = vec4(0.);\n                }\n\n                xCOffset = xC + ${strideWidth};\n                if(xCOffset >= 0 && xCOffset < ${xNumCols}) {\n                  xTexelR${r}C${c + 2} = getX(batch, xR, xCOffset, d1);\n                } else {\n                  xTexelR${r}C${c + 2} = vec4(0.);\n                }\n\n                xR${r}C${c} = vec4(\n                  xTexelR${r}C${c}.xy, xTexelR${r}C${c + 2}.xy);\n              `;\n\n              if (c + 1 < filterWidth) {\n                mainLoop += `\n                  xR${r}C${c + 1} = vec4(\n                    xTexelR${r}C${c}.zw, xTexelR${r}C${c + 2}.zw);\n                `;\n              }\n            }\n\n            mainLoop += `}`;\n          }\n        }\n\n        if (c < filterWidth) {\n          mainLoop += `\n            vec4 wTexelR${r}C${c} = getW(${r}, ${c}, d1, q);\n            wR${r}C${c} = vec4(wTexelR${r}C${c}.xz, wTexelR${r}C${c}.xz);\n          `;\n\n          if (c + 1 < filterWidth) {\n            mainLoop += `\n              vec4 wTexelR${r}C${c + 1} = getW(${r}, ${c + 1}, d1, q);\n              wR${r}C${c + 1} =\n                vec4(wTexelR${r}C${c + 1}.xz, wTexelR${r}C${c + 1}.xz);`;\n          }\n        }\n      }\n    }\n\n    for (let r = 0; r < filterHeight; r++) {\n      for (let c = 0; c < filterWidth; c++) {\n        mainLoop += `dotProd += xR${r}C${c} * wR${r}C${c};`;\n      }\n    }\n\n    let activationSnippet = '', applyActivationSnippet = '';\n    if (activation) {\n      if (hasPreluActivation) {\n        activationSnippet = `vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          ${activation}\n        }`;\n      } else {\n        activationSnippet = `vec4 activation(vec4 x) {\n          ${activation}\n        }`;\n      }\n\n      applyActivationSnippet = `result = activation(result);`;\n    }\n\n    const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n    if (addBias) {\n      this.variableNames.push('bias');\n    }\n\n    if (hasPreluActivation) {\n      this.variableNames.push('preluActivationWeights');\n    }\n\n    this.userCode = `\n      ${activationSnippet}\n\n      const ivec2 strides = ivec2(${strideHeight}, ${strideWidth});\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2;\n        int q = 0;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        vec4 dotProd = vec4(0.);\n\n        ${mainLoop}\n\n        vec4 result = dotProd;\n        ${addBiasSnippet}\n        ${applyActivationSnippet}\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class CropAndResizeProgram implements GPGPUProgram {\n  variableNames = ['Image', 'Boxes', 'BoxInd'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      imageShape: [number, number, number, number], boxShape: [number, number],\n      cropSize: [number, number], method: 'bilinear'|'nearest',\n      extrapolationValue: number) {\n    const [batch, imageHeight, imageWidth, depth] = imageShape;\n    const [numBoxes, ] = boxShape;\n    const [cropHeight, cropWidth] = cropSize;\n    this.outputShape = [numBoxes, cropHeight, cropWidth, depth];\n    const methodId = method === 'bilinear' ? 1 : 0;\n\n    const [inputHeightFloat, inputWidthFloat] =\n        [`${imageHeight - 1}.0`, `${imageWidth - 1}.0`];\n\n    const [heightRatio, heightScale, inY] = cropHeight > 1 ?\n        [\n          `${(imageHeight - 1) / (cropHeight - 1)}`,\n          '(y2-y1) * height_ratio',\n          `y1*${inputHeightFloat} + float(y)*(height_scale)`,\n        ] :\n        [\n          '0.0',\n          '0.0',\n          `0.5 * (y1+y2) * ${inputHeightFloat}`,\n        ];\n    const [widthRatio, widthScale, inX] = cropWidth > 1 ?\n        [\n          `${(imageWidth - 1) / (cropWidth - 1)}`,\n          '(x2-x1) * width_ratio',\n          `x1*${inputWidthFloat} + float(x)*(width_scale)`,\n        ] :\n        [\n          '0.0',\n          '0.0',\n          `0.5 * (x1+x2) * ${inputWidthFloat}`,\n        ];\n\n    // Reference implementation\n    // tslint:disable-next-line:max-line-length\n    // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/crop_and_resize_op_gpu.cu.cc\n    this.userCode = `\n      const float height_ratio = float(${heightRatio});\n      const float width_ratio = float(${widthRatio});\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int y = coords[1];\n        int x = coords[2];\n        int d = coords[3];\n\n        // get box vals\n        float y1 = getBoxes(b,0);\n        float x1 = getBoxes(b,1);\n        float y2 = getBoxes(b,2);\n        float x2 = getBoxes(b,3);\n\n        // get image in batch index\n        int bInd = round(getBoxInd(b));\n        if(bInd < 0 || bInd >= ${batch}) {\n          return;\n        }\n\n        float height_scale = ${heightScale};\n        float width_scale = ${widthScale};\n\n        float in_y = ${inY};\n        if( in_y < 0.0 || in_y > ${inputHeightFloat} ) {\n          setOutput(float(${extrapolationValue}));\n          return;\n        }\n        float in_x = ${inX};\n        if( in_x < 0.0 || in_x > ${inputWidthFloat} ) {\n          setOutput(float(${extrapolationValue}));\n          return;\n        }\n\n        vec2 sourceFracIndexCR = vec2(in_x,in_y);\n        if(${methodId} == 1) {\n          // Compute the four integer indices.\n          ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n          ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n          float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n          float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n          float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n          float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n          vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n          float top = topLeft + (topRight - topLeft) * fracCR.x;\n          float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n          float newValue = top + (bottom - top) * fracCR.y;\n          setOutput(newValue);\n        } else {\n          // Compute the coordinators of nearest neighbor point.\n          ivec2 sourceNearestCR = ivec2(floor(\n            sourceFracIndexCR + vec2(0.5,0.5)));\n          float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n          setOutput(newValue);\n        }\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class CumSumProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(shape: number[], exclusive: boolean, reverse: boolean) {\n    this.outputShape = shape;\n    const rank = shape.length;\n    const finalDim = shape[shape.length - 1];\n    const comparator = reverse ? '<' : '>';\n\n    this.userCode = `\n      int getIndex(int i) {\n        ${reverse ? `return ${finalDim} -i - 1;` : 'return i;'}\n      }\n\n      void main() {\n        ${getCoordsDataType(rank)} coords = getOutputCoords();\n        int end = ${getFinalCoord(rank, 'coords')};\n        float val = 0.0;\n        for (int i = ${finalDim} - 1; i >= 0; i -= 1) {\n          int idx = getIndex(i);\n          if (idx ${comparator} end) {\n            continue;\n          }\n          if (idx == end && ${exclusive}) {\n            continue;\n          }\n          ${getFinalCoord(rank, 'coords')} = idx;\n          val += getX(${getCoords(rank, 'coords')});\n        }\n        setOutput(val);\n      }\n    `;\n  }\n}\n\nfunction getCoords(rank: number, name: string): string {\n  if (rank === 1) {\n    return `${name}`;\n  } else if (rank === 2) {\n    return `${name}.x, ${name}.y`;\n  } else if (rank === 3) {\n    return `${name}.x, ${name}.y, ${name}.z`;\n  } else if (rank === 4) {\n    return `${name}.x, ${name}.y, ${name}.z, ${name}.w`;\n  } else {\n    throw Error(`Cumulative sum for rank ${rank} is not yet supported`);\n  }\n}\n\nfunction getFinalCoord(rank: number, name: string): string {\n  if (rank === 1) {\n    return `${name}`;\n  } else if (rank === 2) {\n    return `${name}.y`;\n  } else if (rank === 3) {\n    return `${name}.z`;\n  } else if (rank === 4) {\n    return `${name}.w`;\n  } else {\n    throw Error(`Cumulative sum for rank ${rank} is not yet supported`);\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nimport {getDenseTexShape, PackingScheme} from './tex_util';\n\nexport class DecodeMatrixProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: [number, number, number];\n  packedInputs = false;\n  packedOutput = true;\n  outPackingScheme = PackingScheme.DENSE;\n\n  constructor(outputShape: [number, number, number]) {\n    const texShape = getDenseTexShape(outputShape);\n    const glsl = getGlslDifferences();\n    this.outputShape = outputShape;\n\n    this.userCode = `\n      ivec3 outCoordsFromFlatIndex(int index) {\n        ${\n        shader_util.getLogicalCoordinatesFromFlatIndex(\n            ['r', 'c', 'd'], outputShape)}\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n          vec2(${texShape[0]}, ${texShape[1]}));\n        int index = 4 * (resTexRC.x * ${texShape[1]} + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getA(rc.x, rc.y, rc.z);\n        }\n\n        ${glsl.output} = result;\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nimport {getDenseTexShape, PackingScheme} from './tex_util';\n\nexport class DecodeMatrixPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: [number, number, number];\n  outPackingScheme = PackingScheme.DENSE;\n\n  constructor(outputShape: [number, number, number]) {\n    const texShape = getDenseTexShape(outputShape);\n    const glsl = getGlslDifferences();\n    this.outputShape = outputShape;\n\n    this.userCode = `\n      ivec3 outCoordsFromFlatIndex(int index) {\n        ${\n        shader_util.getLogicalCoordinatesFromFlatIndex(\n            ['r', 'c', 'd'], outputShape)}\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n          vec2(${texShape[0]}, ${texShape[1]}));\n        int index = 4 * (resTexRC.x * ${texShape[1]} + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n        }\n\n        ${glsl.output} = result;\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class DepthToSpaceProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[] = [];\n  userCode: string;\n  blockSize: number;\n  dataFormat: string;\n\n  constructor(\n      outputShape: number[], blockSize: number, dataFormat: 'NHWC'|'NCHW') {\n    this.outputShape = outputShape;\n    this.blockSize = blockSize;\n    this.dataFormat = dataFormat;\n    this.userCode = `\n    void main() {\n      ivec4 coords = getOutputCoords();\n      int b = coords[0];\n      int h = ${this.getHeightCoordString()};\n      int w = ${this.getWidthCoordString()};\n      int d = ${this.getDepthCoordString()};\n\n      int in_h = h / ${blockSize};\n      int offset_h = imod(h, ${blockSize});\n      int in_w = w / ${blockSize};\n      int offset_w = imod(w, ${blockSize});\n      int offset_d = (offset_h * ${blockSize} + offset_w) *\n        ${this.getOutputDepthSize()};\n      int in_d = d + offset_d;\n\n      float result = ${this.getInputSamplingString()};\n      setOutput(result);\n    }\n  `;\n  }\n\n  private getHeightCoordString(): string {\n    if (this.dataFormat === 'NHWC') {\n      return `coords[1]`;\n    } else {\n      return `coords[2]`;\n    }\n  }\n\n  private getWidthCoordString(): string {\n    if (this.dataFormat === 'NHWC') {\n      return `coords[2]`;\n    } else {\n      return `coords[3]`;\n    }\n  }\n\n  private getDepthCoordString(): string {\n    if (this.dataFormat === 'NHWC') {\n      return `coords[3]`;\n    } else {\n      return `coords[1]`;\n    }\n  }\n\n  private getOutputDepthSize(): number {\n    if (this.dataFormat === 'NHWC') {\n      return this.outputShape[3];\n    } else {\n      return this.outputShape[1];\n    }\n  }\n\n  private getInputSamplingString(): string {\n    if (this.dataFormat === 'NHWC') {\n      return `getX(b, in_h, in_w, in_d)`;\n    } else {\n      return `getX(b, in_d, in_h, in_w)`;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class DiagProgram implements GPGPUProgram {\n  variableNames = ['X'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(size: number) {\n    this.outputShape = [size, size];\n    this.userCode = `\n      void main() {\n          ivec2 coords = getOutputCoords();\n          float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n          setOutput(val);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport {ENCODE_FLOAT_SNIPPET} from './shader_compiler_util';\nimport {TextureUsage} from './tex_util';\n\nexport class EncodeFloatProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n  outTexUsage = TextureUsage.DOWNLOAD;\n\n  constructor(outputShape: number[]) {\n    const glsl = getGlslDifferences();\n    this.outputShape = outputShape;\n    this.userCode = `\n      ${ENCODE_FLOAT_SNIPPET}\n\n      void main() {\n        float x = getAAtOutCoords();\n        ${glsl.output} = encode_float(x);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport {ENCODE_FLOAT_SNIPPET} from './shader_compiler_util';\nimport {TextureUsage} from './tex_util';\n\nexport class EncodeFloatPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n  packedInputs = true;\n  packedOutput = false;\n  outTexUsage = TextureUsage.DOWNLOAD;\n\n  constructor(outputShape: [number, number, number]) {\n    const glsl = getGlslDifferences();\n    this.outputShape = outputShape;\n    this.userCode = `\n      ${ENCODE_FLOAT_SNIPPET}\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n        float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n        ${glsl.output} = encode_float(x);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\n\nexport class EncodeMatrixProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n\n  constructor(\n      outputShape: [number, number, number], texShape: [number, number],\n      inputIsUnsignedByte = false) {\n    const glsl = getGlslDifferences();\n    const [height, width] = texShape;\n    this.outputShape = outputShape;\n\n    let output = `result`;\n    if (inputIsUnsignedByte) {\n      output = `floor(result * 255. + 0.5)`;\n    }\n\n    this.userCode = `\n      ${shader_util.getFlatIndexFrom3D(outputShape)}\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n\n        int flatIndex = getFlatIndex(coords);\n        int offset = imod(flatIndex, 4);\n\n        flatIndex = idiv(flatIndex, 4, 1.);\n        \n        int r = flatIndex / ${width};\n        int c = imod(flatIndex, ${width});\n        vec2 uv = (vec2(c, r) + halfCR) / vec2(${width}.0, ${height}.0);\n        vec4 values = ${glsl.texture2D}(A, uv);\n\n        float result;\n\n        if(offset == 0) {\n          result = values[0];\n        } else if(offset == 1) {\n          result = values[1];\n        } else if(offset == 2) {\n          result = values[2];\n        } else {\n          result = values[3];\n        }\n\n        ${glsl.output} = vec4(${output}, 0., 0., 0.);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\n\n/*\nThis is how the shader encodes a tensor with shape = [2, 3, 5]\n(indices are [batch, row, col]).\n\n000|001   002|003   004|xxx   020|021   022|023   024|xxx\n-------   -------   -------   -------   -------   -------\n010|011   012|013   014|xxx   xxx|xxx   xxx|xxx   xxx|xxx\n\n100|101   102|103   104|xxx   120|121   122|123   124|xxx\n-------   -------   -------   -------   -------   -------\n110|111   112|113   114|xxx   xxx|xxx   xxx|xxx   xxx|xxx\n\nSingle texels contain only values from the same batch, and from adjacent rows\nand columns.\n */\n\nexport class EncodeMatrixPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n  packedInputs = false;\n  packedOutput = true;\n\n  constructor(\n      outputShape: [number, number, number], texShape: [number, number],\n      inputIsUnsignedByte = false) {\n    const glsl = getGlslDifferences();\n    const [height, width] = texShape;\n    this.outputShape = outputShape;\n\n    let mainLoop = '';\n    let output = 'result';\n    if (inputIsUnsignedByte) {\n      output = 'floor(result * 255. + 0.5)';\n    }\n\n    for (let row = 0; row <= 1; row++) {\n      for (let col = 0; col <= 1; col++) {\n        const channel = row * 2 + col;\n\n        mainLoop += `\n          localCoords = coords;\n          if(localCoords[2] + ${col} < ${outputShape[2]}) {\n            localCoords[2] += ${col};\n            if(localCoords[1] + ${row} < ${outputShape[1]}) {\n              localCoords[1] += ${row};\n\n              flatIndex = getFlatIndex(localCoords);\n              offset = imod(flatIndex, 4);\n\n              flatIndex = idiv(flatIndex, 4, 1.);\n\n              r = flatIndex / ${width};\n              c = imod(flatIndex, ${width});\n              uv = (vec2(c, r) + halfCR) / vec2(${width}.0, ${height}.0);\n              values = ${glsl.texture2D}(A, uv);\n\n              if(offset == 0) {\n                result[${channel}] = values[0];\n              } else if(offset == 1) {\n                result[${channel}] = values[1];\n              } else if(offset == 2) {\n                result[${channel}] = values[2];\n              } else {\n                result[${channel}] = values[3];\n              }\n            }\n          }\n        `;\n      }\n    }\n\n    this.userCode = `\n      ${shader_util.getFlatIndexFrom3D(outputShape)}\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n\n        vec4 result = vec4(0.);\n        int flatIndex, r, c, offset;\n        ivec3 localCoords;\n        vec2 uv;\n        vec4 values;\n\n        ${mainLoop}\n\n        ${glsl.output} = ${output};\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport const COMPLEX_FFT = {\n  REAL: 'return real * expR - imag * expI;',\n  IMAG: 'return real * expI + imag * expR;'\n};\n\nexport class FFTProgram implements GPGPUProgram {\n  variableNames = ['real', 'imag'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(op: string, inputShape: [number, number], inverse: boolean) {\n    const innerDim = inputShape[1];\n    this.outputShape = inputShape;\n\n    const exponentMultiplierSnippet =\n        inverse ? `2.0 * ${Math.PI}` : `-2.0 * ${Math.PI}`;\n    const resultDenominator = inverse ? `${innerDim}.0` : '1.0';\n\n    this.userCode = `\n      const float exponentMultiplier = ${exponentMultiplierSnippet};\n\n      float unaryOpComplex(float real, float expR, float imag, float expI) {\n        ${op}\n      }\n\n      float mulMatDFT(int batch, int index) {\n        float indexRatio = float(index) / float(${innerDim});\n        float exponentMultiplierTimesIndexRatio =\n            exponentMultiplier * indexRatio;\n\n        float result = 0.0;\n\n        for (int i = 0; i < ${innerDim}; i++) {\n          // x = (-2|2 * PI / N) * index * i;\n          float x = exponentMultiplierTimesIndexRatio * float(i);\n          float expR = cos(x);\n          float expI = sin(x);\n          float real = getReal(batch, i);\n          float imag = getImag(batch, i);\n\n          result +=\n              unaryOpComplex(real, expR, imag, expI) / ${resultDenominator};\n        }\n\n        return result;\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        setOutput(mulMatDFT(coords[0], coords[1]));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class FillProgram implements GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[] = [];\n  userCode: string;\n\n  valueLoc: WebGLUniformLocation;\n\n  constructor(shape: number[], value: number) {\n    this.variableNames = ['x'];\n    this.outputShape = shape;\n\n    this.userCode = `\n      uniform float value;\n      void main() {\n        // Input can be obtained from uniform value.\n        setOutput(value);\n      }\n    `;\n  }\n\n  getCustomSetupFunc(value: number) {\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.valueLoc == null) {\n        this.valueLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'value');\n      }\n      gpgpu.gl.uniform1f(this.valueLoc, value);\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class GatherProgram implements GPGPUProgram {\n  variableNames = ['A', 'indices'];\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n\n  constructor(aShape: number[], indicesLength: number, axis: number) {\n    const outputShape: number[] = aShape.slice();\n    outputShape[axis] = indicesLength;\n    this.outputShape = outputShape;\n    this.rank = outputShape.length;\n    const dtype = getCoordsDataType(this.rank);\n    const sourceCoords = getSourceCoords(aShape, axis);\n\n    this.userCode = `\n      void main() {\n        ${dtype} resRC = getOutputCoords();\n        setOutput(getA(${sourceCoords}));\n      }\n    `;\n  }\n}\n\nfunction getSourceCoords(aShape: number[], axis: number): string {\n  const rank = aShape.length;\n  if (rank > 4) {\n    throw Error(`Gather for rank ${rank} is not yet supported`);\n  }\n  if (rank === 1) {\n    return `int(getIndices(resRC))`;\n  }\n\n  const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w'];\n\n  const sourceCoords = [];\n  for (let i = 0; i < aShape.length; i++) {\n    if (i === axis) {\n      sourceCoords.push(`int(getIndices(${currentCoords[i]}))`);\n    } else {\n      sourceCoords.push(`${currentCoords[i]}`);\n    }\n  }\n  return sourceCoords.join();\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class GatherNDProgram implements GPGPUProgram {\n  variableNames = ['x', 'indices'];\n  outputShape: number[];\n  userCode: string;\n  constructor(\n      private sliceDim: number, private strides: number[], shape: number[]) {\n    this.outputShape = shape;\n    const stridesType = getCoordsDataType(strides.length);\n    const dtype = getCoordsDataType(shape.length);\n    const strideString = this.sliceDim > 1 ? 'strides[j]' : 'strides';\n    this.userCode = `\n        ${stridesType} strides = ${stridesType}(${this.strides});\n         void main() {\n          ${dtype} coords = getOutputCoords();\n          int flattenIndex = 0;\n          for (int j = 0; j < ${this.sliceDim}; j++) {\n            int index = round(getIndices(coords[0], j));\n            flattenIndex += index * ${strideString};\n          }\n          setOutput(getX(flattenIndex, coords[1]));\n        }\n      `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {PixelData, TypedArray} from '../../types';\n\nimport {getGlslDifferences} from './glsl_version';\nimport * as tex_util from './tex_util';\nimport {TextureConfig} from './tex_util';\nimport * as webgl_util from './webgl_util';\n\nexport function createVertexShader(\n    gl: WebGLRenderingContext, debug: boolean): WebGLShader {\n  const glsl = getGlslDifferences();\n  const vertexShaderSource = `${glsl.version}\n    precision highp float;\n    ${glsl.attribute} vec3 clipSpacePos;\n    ${glsl.attribute} vec2 uv;\n    ${glsl.varyingVs} vec2 resultUV;\n\n    void main() {\n      gl_Position = vec4(clipSpacePos, 1);\n      resultUV = uv;\n    }`;\n  return webgl_util.createVertexShader(gl, debug, vertexShaderSource);\n}\n\nexport function createVertexBuffer(\n    gl: WebGLRenderingContext, debug: boolean): WebGLBuffer {\n  // [x y z u v] * [upper-left, lower-left, upper-right, lower-right]\n  const vertexArray = new Float32Array(\n      [-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]);\n  return webgl_util.createStaticVertexBuffer(gl, debug, vertexArray);\n}\n\nexport function createIndexBuffer(\n    gl: WebGLRenderingContext, debug: boolean): WebGLBuffer {\n  // OpenGL (and WebGL) have \"CCW == front\" winding\n  const triangleVertexIndices = new Uint16Array([0, 1, 2, 2, 1, 3]);\n  return webgl_util.createStaticIndexBuffer(gl, debug, triangleVertexIndices);\n}\n\nfunction createAndConfigureTexture(\n    gl: WebGLRenderingContext, debug: boolean, width: number, height: number,\n    internalFormat: number, textureFormat: number,\n    textureType: number): WebGLTexture {\n  webgl_util.validateTextureSize(width, height);\n  const texture = webgl_util.createTexture(gl, debug);\n\n  const tex2d = gl.TEXTURE_2D;\n  webgl_util.callAndCheck(gl, debug, () => gl.bindTexture(tex2d, texture));\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE));\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE));\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST));\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST));\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texImage2D(\n          tex2d, 0, internalFormat, width, height, 0, textureFormat,\n          textureType, null));\n  webgl_util.callAndCheck(gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, null));\n  return texture;\n}\n\nexport function createFloat32MatrixTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLTexture {\n  const [width, height] =\n      tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n  return createAndConfigureTexture(\n      gl, debug, width, height, textureConfig.internalFormatFloat,\n      textureConfig.textureFormatFloat, gl.FLOAT);\n}\n\nexport function createFloat16MatrixTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLTexture {\n  const [width, height] =\n      tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n  return createAndConfigureTexture(\n      gl, debug, width, height, textureConfig.internalFormatHalfFloat,\n      textureConfig.textureFormatFloat, textureConfig.textureTypeHalfFloat);\n}\n\nexport function createUnsignedBytesMatrixTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLTexture {\n  const [width, height] =\n      tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n  return createAndConfigureTexture(\n      gl, debug, width, height, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE);\n}\n\nexport function createPackedMatrixTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLTexture {\n  const [width, height] =\n      tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n  return createAndConfigureTexture(\n      gl, debug, width, height, textureConfig.internalFormatPackedFloat,\n      gl.RGBA, gl.FLOAT);\n}\n\nexport function createFloat16PackedMatrixTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLTexture {\n  const [width, height] =\n      tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n  return createAndConfigureTexture(\n      gl, debug, width, height, textureConfig.internalFormatPackedHalfFloat,\n      gl.RGBA, textureConfig.textureTypeHalfFloat);\n}\n\nexport function bindVertexProgramAttributeStreams(\n    gl: WebGLRenderingContext, debug: boolean, program: WebGLProgram,\n    vertexBuffer: WebGLBuffer): boolean {\n  const posOffset = 0;               // x is the first buffer element\n  const uvOffset = 3 * 4;            // uv comes after [x y z]\n  const stride = (3 * 4) + (2 * 4);  // xyz + uv, each entry is 4-byte float.\n  webgl_util.callAndCheck(\n      gl, debug, () => gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer));\n  const success = webgl_util.bindVertexBufferToProgramAttribute(\n      gl, debug, program, 'clipSpacePos', vertexBuffer, 3, stride, posOffset);\n  return success &&\n      webgl_util.bindVertexBufferToProgramAttribute(\n          gl, debug, program, 'uv', vertexBuffer, 2, stride, uvOffset);\n}\n\nexport function uploadDenseMatrixToTexture(\n    gl: WebGLRenderingContext, debug: boolean, texture: WebGLTexture,\n    width: number, height: number, data: TypedArray,\n    textureConfig: TextureConfig) {\n  webgl_util.callAndCheck(\n      gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n\n  let dataForUpload: TypedArray, texelDataType: number, internalFormat: number;\n  if (data instanceof Uint8Array) {\n    dataForUpload = new Uint8Array(width * height * 4);\n    texelDataType = gl.UNSIGNED_BYTE;\n    internalFormat = gl.RGBA;\n  } else {\n    dataForUpload = new Float32Array(width * height * 4);\n    texelDataType = gl.FLOAT;\n    internalFormat = textureConfig.internalFormatPackedFloat;\n  }\n\n  dataForUpload.set(data);\n\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.texImage2D(\n          gl.TEXTURE_2D, 0, internalFormat, width, height, 0, gl.RGBA,\n          texelDataType, dataForUpload));\n\n  webgl_util.callAndCheck(gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\n\nexport function uploadPixelDataToTexture(\n    gl: WebGLRenderingContext, debug: boolean, texture: WebGLTexture,\n    pixels: PixelData|ImageData|HTMLImageElement|HTMLCanvasElement|\n    HTMLVideoElement) {\n  webgl_util.callAndCheck(\n      gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n  if ((pixels as PixelData).data instanceof Uint8Array) {\n    webgl_util.callAndCheck(\n        gl, debug,\n        () => gl.texImage2D(\n            gl.TEXTURE_2D, 0, gl.RGBA, pixels.width, pixels.height, 0, gl.RGBA,\n            gl.UNSIGNED_BYTE, (pixels as PixelData).data));\n  } else {\n    webgl_util.callAndCheck(\n        gl, debug,\n        () => gl.texImage2D(\n            gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE,\n            pixels as ImageData | HTMLImageElement | HTMLCanvasElement |\n                HTMLVideoElement));\n  }\n\n  webgl_util.callAndCheck(gl, debug, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\n\nexport function createBufferFromOutputTexture(\n    gl2: WebGL2RenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig): WebGLBuffer {\n  // Create and bind the buffer.\n  const buffer = gl2.createBuffer();\n  webgl_util.callAndCheck(\n      gl2, debug, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer));\n\n  // Initialize the buffer to the size of the texture in bytes.\n  const bytesPerFloat = 4;\n  const valuesPerTexel = 4;\n  const bufferSizeBytes = bytesPerFloat * valuesPerTexel * rows * columns;\n\n  webgl_util.callAndCheck(\n      gl2, debug,\n      () => gl2.bufferData(\n          gl2.PIXEL_PACK_BUFFER, bufferSizeBytes, gl2.STREAM_READ));\n\n  // Enqueue a command on the GPU command queue to copy of texture into the\n  // buffer.\n  webgl_util.callAndCheck(\n      gl2, debug,\n      () => gl2.readPixels(0, 0, columns, rows, gl2.RGBA, gl2.FLOAT, 0));\n\n  webgl_util.callAndCheck(\n      gl2, debug, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null));\n\n  return buffer;\n}\n\nexport function downloadFloat32MatrixFromBuffer(\n    gl: WebGLRenderingContext, buffer: WebGLBuffer,\n    size: number): Float32Array {\n  const gl2 = gl as WebGL2RenderingContext;\n\n  const downloadTarget = new Float32Array(size);\n\n  gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer);\n  gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget);\n  gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null);\n\n  return downloadTarget;\n}\n\nexport function downloadByteEncodedFloatMatrixFromOutputTexture(\n    gl: WebGLRenderingContext, debug: boolean, rows: number, columns: number,\n    textureConfig: TextureConfig) {\n  const [w, h] =\n      tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n\n  const numChannels = 4;\n  const downloadTarget = new Uint8Array(\n      tex_util.getUnpackedArraySizeFromMatrixSize(rows * columns, numChannels));\n\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.readPixels(\n          0, 0, w, h, textureConfig.downloadTextureFormat, gl.UNSIGNED_BYTE,\n          downloadTarget));\n\n  // By wrapping the buffer in a Float32Array, we use native browser IEEE 754\n  // decoding of the 4 bytes that back each 32 bit float.\n  return new Float32Array(downloadTarget.buffer);\n}\n\nexport function downloadPackedMatrixFromBuffer(\n    gl: WebGLRenderingContext, buffer: WebGLBuffer, batch: number, rows: number,\n    cols: number, physicalRows: number, physicalCols: number,\n    textureConfig: TextureConfig): Float32Array {\n  const gl2 = gl as WebGL2RenderingContext;\n\n  const downloadTarget =\n      new Float32Array(tex_util.getPackedRGBAArraySizeFromMatrixShape(\n          physicalRows, physicalCols));\n\n  gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer);\n  gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget);\n  gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null);\n\n  return downloadTarget;\n}\n\nexport function downloadMatrixFromPackedOutputTexture(\n    gl: WebGLRenderingContext, debug: boolean, physicalRows: number,\n    physicalCols: number): Float32Array {\n  const packedRGBA = new Float32Array(physicalRows * physicalCols * 4);\n  webgl_util.callAndCheck(\n      gl, debug,\n      () => gl.readPixels(\n          0, 0, physicalCols, physicalRows, gl.RGBA, gl.FLOAT, packedRGBA));\n\n  return packedRGBA;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../environment';\n\nimport {PixelData, TypedArray} from '../../types';\nimport * as util from '../../util';\n\nimport {getWebGLContext, setWebGLContext} from './canvas_util';\nimport * as gpgpu_util from './gpgpu_util';\nimport * as tex_util from './tex_util';\nimport {TextureConfig} from './tex_util';\nimport {WebGL1DisjointQueryTimerExtension, WebGL2DisjointQueryTimerExtension} from './webgl_types';\nimport * as webgl_util from './webgl_util';\n\nexport interface FenceContext {\n  query: WebGLQuery|WebGLSync;\n  isFencePassed(): boolean;\n}\n\nexport class GPGPUContext {\n  gl: WebGLRenderingContext;\n  textureFloatExtension: {};\n  textureHalfFloatExtension: {};\n  colorBufferFloatExtension: {};\n  colorBufferHalfFloatExtension: {};\n  disjointQueryTimerExtension: WebGL2DisjointQueryTimerExtension|\n      WebGL1DisjointQueryTimerExtension;\n  vertexBuffer: WebGLBuffer;\n  indexBuffer: WebGLBuffer;\n  framebuffer: WebGLFramebuffer;\n  outputTexture: WebGLTexture|null = null;\n  program: WebGLProgram|null = null;\n  private disposed = false;\n  private disjoint: boolean;\n  private textureConfig: TextureConfig;\n\n  constructor(gl?: WebGLRenderingContext) {\n    const glVersion = env().getNumber('WEBGL_VERSION');\n    if (gl != null) {\n      this.gl = gl;\n      setWebGLContext(glVersion, gl);\n    } else {\n      this.gl = getWebGLContext(glVersion);\n    }\n    // WebGL 2.0 enables texture floats without an extension.\n    let COLOR_BUFFER_FLOAT = 'WEBGL_color_buffer_float';\n    const COLOR_BUFFER_HALF_FLOAT = 'EXT_color_buffer_half_float';\n    if (env().getNumber('WEBGL_VERSION') === 1) {\n      const TEXTURE_FLOAT = 'OES_texture_float';\n      const TEXTURE_HALF_FLOAT = 'OES_texture_half_float';\n\n      this.textureFloatExtension =\n          webgl_util.getExtensionOrThrow(this.gl, this.debug, TEXTURE_FLOAT);\n      if (webgl_util.hasExtension(this.gl, TEXTURE_HALF_FLOAT)) {\n        this.textureHalfFloatExtension = webgl_util.getExtensionOrThrow(\n            this.gl, this.debug, TEXTURE_HALF_FLOAT);\n      } else if (env().get('WEBGL_FORCE_F16_TEXTURES')) {\n        throw new Error(\n            'GL context does not support half float textures, yet the ' +\n            'environment flag WEBGL_FORCE_F16_TEXTURES is set to true.');\n      }\n\n      this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT);\n      if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) {\n        this.colorBufferHalfFloatExtension = webgl_util.getExtensionOrThrow(\n            this.gl, this.debug, COLOR_BUFFER_HALF_FLOAT);\n      } else if (env().get('WEBGL_FORCE_F16_TEXTURES')) {\n        throw new Error(\n            'GL context does not support color renderable half floats, yet ' +\n            'the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.');\n      }\n    } else {\n      COLOR_BUFFER_FLOAT = 'EXT_color_buffer_float';\n      if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_FLOAT)) {\n        this.colorBufferFloatExtension =\n            this.gl.getExtension(COLOR_BUFFER_FLOAT);\n      } else if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) {\n        this.colorBufferHalfFloatExtension =\n            this.gl.getExtension(COLOR_BUFFER_HALF_FLOAT);\n      } else {\n        throw new Error('GL context does not support color renderable floats');\n      }\n    }\n\n    this.vertexBuffer = gpgpu_util.createVertexBuffer(this.gl, this.debug);\n    this.indexBuffer = gpgpu_util.createIndexBuffer(this.gl, this.debug);\n    this.framebuffer = webgl_util.createFramebuffer(this.gl, this.debug);\n\n    this.textureConfig =\n        tex_util.getTextureConfig(this.gl, this.textureHalfFloatExtension);\n  }\n\n  private get debug(): boolean {\n    return env().getBool('DEBUG');\n  }\n\n  public dispose() {\n    if (this.disposed) {\n      return;\n    }\n    if (this.program != null) {\n      console.warn(\n          'Disposing a GPGPUContext that still has a bound WebGLProgram.' +\n          ' This is probably a resource leak, delete the program with ' +\n          'GPGPUContext.deleteProgram before disposing.');\n    }\n    if (this.outputTexture != null) {\n      console.warn(\n          'Disposing a GPGPUContext that still has a bound output matrix ' +\n          'texture.  This is probably a resource leak, delete the output ' +\n          'matrix texture with GPGPUContext.deleteMatrixTexture before ' +\n          'disposing.');\n    }\n    const gl = this.gl;\n    webgl_util.callAndCheck(gl, this.debug, () => gl.finish());\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.deleteFramebuffer(this.framebuffer));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.bindBuffer(gl.ARRAY_BUFFER, null));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.deleteBuffer(this.indexBuffer));\n    this.disposed = true;\n  }\n\n  public createFloat32MatrixTexture(rows: number, columns: number):\n      WebGLTexture {\n    this.throwIfDisposed();\n    return gpgpu_util.createFloat32MatrixTexture(\n        this.gl, this.debug, rows, columns, this.textureConfig);\n  }\n\n  public createFloat16MatrixTexture(rows: number, columns: number):\n      WebGLTexture {\n    this.throwIfDisposed();\n    return gpgpu_util.createFloat16MatrixTexture(\n        this.gl, this.debug, rows, columns, this.textureConfig);\n  }\n\n  public createUnsignedBytesMatrixTexture(rows: number, columns: number):\n      WebGLTexture {\n    this.throwIfDisposed();\n    return gpgpu_util.createUnsignedBytesMatrixTexture(\n        this.gl, this.debug, rows, columns, this.textureConfig);\n  }\n\n  public uploadPixelDataToTexture(\n      texture: WebGLTexture,\n      pixels: PixelData|ImageData|HTMLImageElement|HTMLCanvasElement) {\n    this.throwIfDisposed();\n    gpgpu_util.uploadPixelDataToTexture(this.gl, this.debug, texture, pixels);\n  }\n\n  public uploadDenseMatrixToTexture(\n      texture: WebGLTexture, width: number, height: number, data: TypedArray) {\n    this.throwIfDisposed();\n    gpgpu_util.uploadDenseMatrixToTexture(\n        this.gl, this.debug, texture, width, height, data, this.textureConfig);\n  }\n\n  public createFloat16PackedMatrixTexture(rows: number, columns: number):\n      WebGLTexture {\n    this.throwIfDisposed();\n    return gpgpu_util.createFloat16PackedMatrixTexture(\n        this.gl, this.debug, rows, columns, this.textureConfig);\n  }\n\n  public createPackedMatrixTexture(rows: number, columns: number):\n      WebGLTexture {\n    this.throwIfDisposed();\n    return gpgpu_util.createPackedMatrixTexture(\n        this.gl, this.debug, rows, columns, this.textureConfig);\n  }\n\n  public deleteMatrixTexture(texture: WebGLTexture) {\n    this.throwIfDisposed();\n    if (this.outputTexture === texture) {\n      webgl_util.unbindColorTextureFromFramebuffer(\n          this.gl, this.debug, this.framebuffer);\n      this.outputTexture = null;\n    }\n    webgl_util.callAndCheck(\n        this.gl, this.debug, () => this.gl.deleteTexture(texture));\n  }\n\n  public downloadByteEncodedFloatMatrixFromOutputTexture(\n      texture: WebGLTexture, rows: number, columns: number): Float32Array {\n    return this.downloadMatrixDriver(\n        texture,\n        () => gpgpu_util.downloadByteEncodedFloatMatrixFromOutputTexture(\n            this.gl, this.debug, rows, columns, this.textureConfig));\n  }\n\n  public downloadPackedMatrixFromBuffer(\n      buffer: WebGLBuffer, batch: number, rows: number, columns: number,\n      physicalRows: number, physicalCols: number): Float32Array {\n    return gpgpu_util.downloadPackedMatrixFromBuffer(\n        this.gl, buffer, batch, rows, columns, physicalRows, physicalCols,\n        this.textureConfig);\n  }\n\n  public downloadFloat32MatrixFromBuffer(buffer: WebGLBuffer, size: number):\n      Float32Array {\n    return gpgpu_util.downloadFloat32MatrixFromBuffer(this.gl, buffer, size);\n  }\n\n  public createBufferFromTexture(\n      texture: WebGLTexture, rows: number, columns: number): WebGLBuffer {\n    this.bindTextureToFrameBuffer(texture);\n    const result = gpgpu_util.createBufferFromOutputTexture(\n        this.gl as WebGL2RenderingContext, this.debug, rows, columns,\n        this.textureConfig);\n    this.unbindTextureToFrameBuffer();\n    return result;\n  }\n\n  public createAndWaitForFence(): Promise<void> {\n    const fenceContext = this.createFence(this.gl);\n    return this.pollFence(fenceContext);\n  }\n\n  private createFence(gl: WebGLRenderingContext): FenceContext {\n    let query: WebGLQuery|WebGLSync;\n    let isFencePassed: () => boolean;\n\n    if (env().getBool('WEBGL_FENCE_API_ENABLED')) {\n      const gl2 = gl as WebGL2RenderingContext;\n\n      const sync = gl2.fenceSync(gl2.SYNC_GPU_COMMANDS_COMPLETE, 0);\n      gl.flush();\n\n      isFencePassed = () => {\n        const status = gl2.clientWaitSync(sync, 0, 0);\n        return status === gl2.ALREADY_SIGNALED ||\n            status === gl2.CONDITION_SATISFIED;\n      };\n\n      query = sync;\n    } else if (\n        env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') > 0) {\n      query = this.beginQuery();\n      this.endQuery();\n      isFencePassed = () => this.isQueryAvailable(\n          query,\n          env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION'));\n    } else {\n      // If we have no way to fence, return true immediately. This will fire in\n      // WebGL 1.0 when there is no disjoint query timer. In this case, because\n      // the fence passes immediately, we'll immediately ask for a download of\n      // the texture, which will cause the UI thread to hang.\n      isFencePassed = () => true;\n    }\n\n    return {query, isFencePassed};\n  }\n\n  public downloadMatrixFromPackedTexture(\n      texture: WebGLTexture, physicalRows: number,\n      physicalCols: number): Float32Array {\n    return this.downloadMatrixDriver(\n        texture,\n        () => gpgpu_util.downloadMatrixFromPackedOutputTexture(\n            this.gl, this.debug, physicalRows, physicalCols));\n  }\n\n  private vertexAttrsAreBound = false;\n\n  public createProgram(fragmentShaderSource: string): WebGLProgram {\n    this.throwIfDisposed();\n    const gl = this.gl;\n    const fragmentShader: WebGLShader =\n        webgl_util.createFragmentShader(gl, this.debug, fragmentShaderSource);\n    const vertexShader: WebGLShader =\n        gpgpu_util.createVertexShader(gl, this.debug);\n    const program: WebGLProgram = webgl_util.createProgram(\n        gl,\n        this.debug,\n    );\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.attachShader(program, vertexShader));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.attachShader(program, fragmentShader));\n    webgl_util.linkProgram(gl, this.debug, program);\n    if (this.debug) {\n      webgl_util.validateProgram(gl, this.debug, program);\n    }\n    if (!this.vertexAttrsAreBound) {\n      this.setProgram(program);\n      this.vertexAttrsAreBound = gpgpu_util.bindVertexProgramAttributeStreams(\n          gl, this.debug, this.program, this.vertexBuffer);\n    }\n    return program;\n  }\n\n  public deleteProgram(program: WebGLProgram) {\n    this.throwIfDisposed();\n    if (program === this.program) {\n      this.program = null;\n    }\n    if (program != null) {\n      webgl_util.callAndCheck(\n          this.gl, this.debug, () => this.gl.deleteProgram(program));\n    }\n  }\n\n  public setProgram(program: WebGLProgram|null) {\n    this.throwIfDisposed();\n    this.program = program;\n    if ((this.program != null) && this.debug) {\n      webgl_util.validateProgram(this.gl, this.debug, this.program);\n    }\n    webgl_util.callAndCheck(\n        this.gl, this.debug, () => this.gl.useProgram(program));\n  }\n\n  public getUniformLocation(\n      program: WebGLProgram, uniformName: string,\n      shouldThrow = true): WebGLUniformLocation {\n    this.throwIfDisposed();\n    if (shouldThrow) {\n      return webgl_util.getProgramUniformLocationOrThrow(\n          this.gl, this.debug, program, uniformName);\n    } else {\n      return webgl_util.getProgramUniformLocation(\n          this.gl, program, uniformName);\n    }\n  }\n\n  public getAttributeLocation(program: WebGLProgram, attribute: string):\n      number {\n    this.throwIfDisposed();\n    return webgl_util.callAndCheck(\n        this.gl, this.debug,\n        () => this.gl.getAttribLocation(program, attribute));\n  }\n\n  public getUniformLocationNoThrow(program: WebGLProgram, uniformName: string):\n      WebGLUniformLocation {\n    this.throwIfDisposed();\n    return this.gl.getUniformLocation(program, uniformName);\n  }\n\n  public setInputMatrixTexture(\n      inputMatrixTexture: WebGLTexture, uniformLocation: WebGLUniformLocation,\n      textureUnit: number) {\n    this.throwIfDisposed();\n    this.throwIfNoProgram();\n    webgl_util.bindTextureToProgramUniformSampler(\n        this.gl, this.debug, this.program, inputMatrixTexture, uniformLocation,\n        textureUnit);\n  }\n\n  public setOutputMatrixTexture(\n      outputMatrixTexture: WebGLTexture, rows: number, columns: number) {\n    this.setOutputMatrixTextureDriver(outputMatrixTexture, columns, rows);\n  }\n\n  public setOutputPackedMatrixTexture(\n      outputPackedMatrixTexture: WebGLTexture, rows: number, columns: number) {\n    this.throwIfDisposed();\n    const [width, height] =\n        tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n    this.setOutputMatrixTextureDriver(outputPackedMatrixTexture, width, height);\n  }\n\n  public setOutputMatrixWriteRegion(\n      startRow: number, numRows: number, startColumn: number,\n      numColumns: number) {\n    this.setOutputMatrixWriteRegionDriver(\n        startColumn, startRow, numColumns, numRows);\n  }\n\n  public setOutputPackedMatrixWriteRegion(\n      startRow: number, numRows: number, startColumn: number,\n      numColumns: number) {\n    throw new Error('setOutputPackedMatrixWriteRegion not implemented.');\n  }\n\n  public debugValidate() {\n    if (this.program != null) {\n      webgl_util.validateProgram(this.gl, this.debug, this.program);\n    }\n    webgl_util.validateFramebuffer(this.gl);\n  }\n\n  public executeProgram() {\n    this.throwIfDisposed();\n    this.throwIfNoProgram();\n    const gl = this.gl;\n    if (this.debug) {\n      this.debugValidate();\n    }\n    webgl_util.callAndCheck(\n        gl, this.debug,\n        () => gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0));\n  }\n\n  public blockUntilAllProgramsCompleted() {\n    this.throwIfDisposed();\n    webgl_util.callAndCheck(this.gl, this.debug, () => this.gl.finish());\n  }\n\n  private getQueryTimerExtension(): WebGL1DisjointQueryTimerExtension\n      |WebGL2DisjointQueryTimerExtension {\n    if (this.disjointQueryTimerExtension == null) {\n      this.disjointQueryTimerExtension =\n          webgl_util.getExtensionOrThrow(\n              this.gl, this.debug,\n              env().getNumber(\n                  'WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2 ?\n                  'EXT_disjoint_timer_query_webgl2' :\n                  'EXT_disjoint_timer_query') as\n              WebGL1DisjointQueryTimerExtension |\n          WebGL2DisjointQueryTimerExtension;\n    }\n    return this.disjointQueryTimerExtension;\n  }\n\n  private getQueryTimerExtensionWebGL2(): WebGL2DisjointQueryTimerExtension {\n    return this.getQueryTimerExtension();\n  }\n\n  private getQueryTimerExtensionWebGL1(): WebGL1DisjointQueryTimerExtension {\n    return this.getQueryTimerExtension() as WebGL1DisjointQueryTimerExtension;\n  }\n\n  beginQuery(): WebGLQuery {\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2) {\n      const gl2 = this.gl as WebGL2RenderingContext;\n      const ext = this.getQueryTimerExtensionWebGL2();\n\n      const query = gl2.createQuery();\n      gl2.beginQuery(ext.TIME_ELAPSED_EXT, query);\n      return query;\n    }\n    const ext = this.getQueryTimerExtensionWebGL1();\n    const query = ext.createQueryEXT() as WebGLQuery;\n    ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query);\n    return query;\n  }\n\n  endQuery() {\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2) {\n      const gl2 = this.gl as WebGL2RenderingContext;\n      const ext = this.getQueryTimerExtensionWebGL2();\n      gl2.endQuery(ext.TIME_ELAPSED_EXT);\n      return;\n    }\n    const ext = this.getQueryTimerExtensionWebGL1();\n    ext.endQueryEXT(ext.TIME_ELAPSED_EXT);\n  }\n\n  public async waitForQueryAndGetTime(query: WebGLQuery): Promise<number> {\n    await util.repeatedTry(\n        () => this.disposed ||  // while testing contexts are created / disposed\n                                // in rapid succession, so without this check we\n                                // may poll for the query timer indefinitely\n            this.isQueryAvailable(\n                query,\n                env().getNumber(\n                    'WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION')));\n    return this.getQueryTime(\n        query, env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION'));\n  }\n\n  private getQueryTime(query: WebGLQuery, queryTimerVersion: number): number {\n    if (queryTimerVersion === 0) {\n      return null;\n    }\n\n    if (queryTimerVersion === 2) {\n      const gl2 = this.gl as WebGL2RenderingContext;\n\n      const timeElapsedNanos = gl2.getQueryParameter(query, gl2.QUERY_RESULT);\n      // Return milliseconds.\n      return timeElapsedNanos / 1000000;\n    } else {\n      const ext = this.getQueryTimerExtensionWebGL1();\n\n      const timeElapsedNanos =\n          ext.getQueryObjectEXT(query, ext.QUERY_RESULT_EXT);\n      // Return milliseconds.\n      return timeElapsedNanos / 1000000;\n    }\n  }\n\n  private isQueryAvailable(query: WebGLQuery, queryTimerVersion: number):\n      boolean {\n    if (queryTimerVersion === 0) {\n      return true;\n    }\n\n    if (queryTimerVersion === 2) {\n      const gl2 = this.gl as WebGL2RenderingContext;\n      const ext = this.getQueryTimerExtensionWebGL2();\n\n      const available =\n          gl2.getQueryParameter(query, gl2.QUERY_RESULT_AVAILABLE);\n      if (this.disjoint == null) {\n        this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT);\n      }\n\n      return available && !this.disjoint;\n    } else {\n      const ext = this.getQueryTimerExtensionWebGL1();\n\n      const available =\n          ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT);\n      if (this.disjoint == null) {\n        this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT);\n      }\n\n      return available && !this.disjoint;\n    }\n  }\n\n  pollFence(fenceContext: FenceContext) {\n    return new Promise<void>(resolve => {\n      this.addItemToPoll(() => fenceContext.isFencePassed(), () => resolve());\n    });\n  }\n\n  private itemsToPoll: PollItem[] = [];\n\n  pollItems(): void {\n    // Find the last query that has finished.\n    const index = linearSearchLastTrue(this.itemsToPoll.map(x => x.isDoneFn));\n    for (let i = 0; i <= index; ++i) {\n      const {resolveFn} = this.itemsToPoll[i];\n      resolveFn();\n    }\n    this.itemsToPoll = this.itemsToPoll.slice(index + 1);\n  }\n\n  private addItemToPoll(isDoneFn: () => boolean, resolveFn: () => void) {\n    this.itemsToPoll.push({isDoneFn, resolveFn});\n    if (this.itemsToPoll.length > 1) {\n      // We already have a running loop that polls.\n      return;\n    }\n    // Start a new loop that polls.\n    util.repeatedTry(() => {\n      this.pollItems();\n      // End the loop if no more items to poll.\n      return this.itemsToPoll.length === 0;\n    });\n  }\n\n  private bindTextureToFrameBuffer(texture: WebGLTexture) {\n    this.throwIfDisposed();\n    webgl_util.bindColorTextureToFramebuffer(\n        this.gl, this.debug, texture, this.framebuffer);\n    if (this.debug) {\n      webgl_util.validateFramebuffer(this.gl);\n    }\n  }\n\n  private unbindTextureToFrameBuffer() {\n    if (this.outputTexture != null) {\n      webgl_util.bindColorTextureToFramebuffer(\n          this.gl, this.debug, this.outputTexture, this.framebuffer);\n      if (this.debug) {\n        webgl_util.validateFramebuffer(this.gl);\n      }\n    } else {\n      webgl_util.unbindColorTextureFromFramebuffer(\n          this.gl, this.debug, this.framebuffer);\n    }\n  }\n\n  private downloadMatrixDriver(\n      texture: WebGLTexture,\n      downloadAndDecode: () => Float32Array): Float32Array {\n    this.bindTextureToFrameBuffer(texture);\n    const result = downloadAndDecode();\n    this.unbindTextureToFrameBuffer();\n\n    return result;\n  }\n\n  private setOutputMatrixTextureDriver(\n      outputMatrixTextureMaybePacked: WebGLTexture, width: number,\n      height: number) {\n    this.throwIfDisposed();\n    const gl = this.gl;\n    webgl_util.bindColorTextureToFramebuffer(\n        gl, this.debug, outputMatrixTextureMaybePacked, this.framebuffer);\n    if (this.debug) {\n      webgl_util.validateFramebuffer(gl);\n    }\n    this.outputTexture = outputMatrixTextureMaybePacked;\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.viewport(0, 0, width, height));\n    webgl_util.callAndCheck(\n        gl, this.debug, () => gl.scissor(0, 0, width, height));\n  }\n\n  private setOutputMatrixWriteRegionDriver(\n      x: number, y: number, width: number, height: number) {\n    this.throwIfDisposed();\n    webgl_util.callAndCheck(\n        this.gl, this.debug, () => this.gl.scissor(x, y, width, height));\n  }\n\n  private throwIfDisposed() {\n    if (this.disposed) {\n      throw new Error('Attempted to use disposed GPGPUContext.');\n    }\n  }\n\n  private throwIfNoProgram() {\n    if (this.program == null) {\n      throw new Error('No GPU program is currently set.');\n    }\n  }\n}\n\ntype PollItem = {\n  isDoneFn: () => boolean,\n  resolveFn: () => void\n};\n\n/**\n * Finds the index of the last true element using linear search.\n * Note: We can't do binary search because Chrome expects us to explicitly\n * test all fences before download:\n * https://github.com/tensorflow/tfjs/issues/1145\n */\nexport function linearSearchLastTrue(arr: Array<() => boolean>): number {\n  let i = 0;\n  for (; i < arr.length; ++i) {\n    const isDone = arr[i]();\n    if (!isDone) {\n      break;\n    }\n  }\n  return i - 1;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../environment';\nimport {Tensor} from '../../tensor';\nimport {TypedArray} from '../../types';\nimport * as util from '../../util';\n\nimport {GPGPUContext} from './gpgpu_context';\nimport * as shader_compiler from './shader_compiler';\nimport {InputInfo, ShapeInfo} from './shader_compiler';\nimport {PackingScheme, TextureData, TextureUsage} from './tex_util';\n\nexport interface GPGPUProgram {\n  variableNames: string[];\n  outputShape: number[];\n  userCode: string;\n  /** If true, this program expects packed input textures. Defaults to false. */\n  packedInputs?: boolean;\n  /** If true, this program produces a packed texture. Defaults to false. */\n  packedOutput?: boolean;\n  /**\n   * Affects what type of texture we allocate for the output. Defaults to\n   * `TextureUsage.RENDER`.\n   */\n  outTexUsage?: TextureUsage;\n  /**\n   * The type of scheme to use when packing texels for the output values.\n   * See `PackingScheme` for details. Defaults to `PackingScheme.SHARED_BATCH`.\n   */\n  outPackingScheme?: PackingScheme;\n}\n\nexport interface GPGPUBinary {\n  webGLProgram: WebGLProgram;\n  program: GPGPUProgram;\n  uniformLocations: {[name: string]: WebGLUniformLocation};\n  source: string;\n  inShapeInfos: ShapeInfo[];\n  outShapeInfo: ShapeInfo;\n  infLoc: WebGLUniformLocation;\n  nanLoc: WebGLUniformLocation;\n}\n\nexport interface TensorData {\n  shape: number[];\n  texData: TextureData;\n  isUniform: boolean;\n  // Available when we decide to upload as uniform instead of texture.\n  uniformValues?: TypedArray;\n}\n\nexport function compileProgram<T extends Tensor, K extends Tensor>(\n    gpgpu: GPGPUContext, program: GPGPUProgram, inputs: TensorData[],\n    output: TensorData): GPGPUBinary {\n  const userCode = program.userCode;\n  const inputInfos: InputInfo[] = inputs.map((input, i) => {\n    const shapeInfo: ShapeInfo = {\n      logicalShape: input.shape,\n      texShape: input.isUniform ? null : input.texData.texShape,\n      isUniform: input.isUniform,\n      isPacked: input.isUniform ? false : input.texData.isPacked,\n      flatOffset: null\n    };\n    if (input.texData != null && input.texData.slice != null &&\n        input.texData.slice.flatOffset > 0) {\n      shapeInfo.flatOffset = input.texData.slice.flatOffset;\n    }\n    return {name: program.variableNames[i], shapeInfo};\n  });\n  const inShapeInfos = inputInfos.map(x => x.shapeInfo);\n  const outShapeInfo: ShapeInfo = {\n    logicalShape: output.shape,\n    texShape: output.texData.texShape,\n    isUniform: false,\n    isPacked: output.texData.isPacked,\n    flatOffset: null\n  };\n  const source = shader_compiler.makeShader(\n      inputInfos, outShapeInfo, userCode, program.packedInputs);\n\n  const webGLProgram = gpgpu.createProgram(source);\n\n  // Add special uniforms (NAN, INFINITY)\n  let infLoc: WebGLUniformLocation = null;\n  const nanLoc = gpgpu.getUniformLocation(webGLProgram, 'NAN', false);\n  if (env().getNumber('WEBGL_VERSION') === 1) {\n    infLoc = gpgpu.getUniformLocation(webGLProgram, 'INFINITY', false);\n  }\n\n  // Add user-defined uniforms\n  const uniformLocations: {[name: string]: WebGLUniformLocation} = {};\n  for (let i = 0; i < program.variableNames.length; i++) {\n    const varName = program.variableNames[i];\n    const shouldThrow = false;\n    uniformLocations[varName] =\n        gpgpu.getUniformLocation(webGLProgram, varName, shouldThrow);\n    uniformLocations[`offset${varName}`] =\n        gpgpu.getUniformLocation(webGLProgram, `offset${varName}`, shouldThrow);\n  }\n\n  return {\n    program,\n    source,\n    webGLProgram,\n    uniformLocations,\n    inShapeInfos,\n    outShapeInfo,\n    infLoc,\n    nanLoc,\n  };\n}\n\nfunction validateBinaryAndProgram(\n    shapeInfos: ShapeInfo[], inputs: TensorData[]) {\n  if (shapeInfos.length !== inputs.length) {\n    throw Error(\n        `Binary was compiled with ${shapeInfos.length} inputs, but ` +\n        `was executed with ${inputs.length} inputs`);\n  }\n\n  shapeInfos.forEach((s, i) => {\n    const shapeA = s.logicalShape;\n    const input = inputs[i];\n    const shapeB = input.shape;\n\n    if (!util.arraysEqual(shapeA, shapeB)) {\n      throw Error(\n          `Binary was compiled with different shapes than ` +\n          `the current args. Shapes ${shapeA} and ${shapeB} must match`);\n    }\n    // The input is uploaded as uniform.\n    if (s.isUniform && input.isUniform) {\n      return;\n    }\n\n    const texShapeA = s.texShape;\n    const texShapeB = input.isUniform ? null : input.texData.texShape;\n    if (!util.arraysEqual(texShapeA, texShapeB)) {\n      throw Error(\n          `Binary was compiled with different texture shapes than the` +\n          ` current args. Shape ${texShapeA} and ${texShapeB} must match`);\n    }\n  });\n}\n\nexport function runProgram<T extends Tensor, K extends Tensor>(\n    gpgpu: GPGPUContext, binary: GPGPUBinary, inputs: TensorData[],\n    output: TensorData,\n    customSetup?: (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) =>\n        void): void {\n  validateBinaryAndProgram(binary.inShapeInfos, inputs);\n  validateBinaryAndProgram([binary.outShapeInfo], [output]);\n\n  const outTex = output.texData.texture;\n  const outTexShape = output.texData.texShape;\n  if (output.texData.isPacked) {\n    gpgpu.setOutputPackedMatrixTexture(outTex, outTexShape[0], outTexShape[1]);\n  } else {\n    gpgpu.setOutputMatrixTexture(outTex, outTexShape[0], outTexShape[1]);\n  }\n  gpgpu.setProgram(binary.webGLProgram);\n\n  // Set special uniforms (NAN, INFINITY)\n  if (env().getNumber('WEBGL_VERSION') === 1) {\n    if (binary.infLoc !== null) {\n      gpgpu.gl.uniform1f(binary.infLoc, Infinity);\n    }\n  }\n  if (binary.nanLoc !== null) {\n    gpgpu.gl.uniform1f(binary.nanLoc, NaN);\n  }\n\n  // Set user-defined inputs\n  inputs.forEach((input, i) => {\n    const varName = binary.program.variableNames[i];\n    const varLoc = binary.uniformLocations[varName];\n    const varOffsetLoc = binary.uniformLocations[`offset${varName}`];\n\n    if (varLoc == null) {\n      // The compiler inferred that this variable is not used in this shader.\n      return;\n    }\n\n    if (input.isUniform) {\n      // Upload the values of the tensor as uniform.\n      if (util.sizeFromShape(input.shape) < 2) {\n        gpgpu.gl.uniform1f(varLoc, input.uniformValues[0]);\n      } else {\n        let vals = input.uniformValues;\n        if (!(vals instanceof Float32Array)) {\n          vals = new Float32Array(vals);\n        }\n        gpgpu.gl.uniform1fv(varLoc, vals);\n      }\n      return;\n    }\n\n    // If the input was sliced, upload the flat offset index.\n    if (input.texData.slice != null && varOffsetLoc != null) {\n      gpgpu.gl.uniform1i(varOffsetLoc, input.texData.slice.flatOffset);\n    }\n\n    gpgpu.setInputMatrixTexture(input.texData.texture, varLoc, i);\n  });\n\n  if (customSetup != null) {\n    customSetup(gpgpu, binary.webGLProgram);\n  }\n  gpgpu.executeProgram();\n}\n\nexport function makeShaderKey(\n    program: GPGPUProgram, inputs: TensorData[], output: TensorData): string {\n  let keyInputs = '';\n  inputs.concat(output).forEach(x => {\n    const hasOffset = x.texData != null && x.texData.slice != null &&\n        x.texData.slice.flatOffset > 0;\n    const texShape = x.isUniform ? 'uniform' : x.texData.texShape;\n    keyInputs += `${x.shape}_${texShape}_${hasOffset}`;\n  });\n  const keyUserCode = program.userCode;\n  let key = program.constructor.name;\n  // Fast string concat. See https://jsperf.com/string-concatenation/14.\n  key += '_' + keyInputs + '_' + keyUserCode;\n  return key;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport {getGlslDifferences} from './glsl_version';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class Im2ColPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      outputShape: number[], inputShape: number[], convInfo: Conv2DInfo) {\n    this.outputShape = outputShape;\n\n    const {\n      filterWidth,\n      inChannels,\n      strideWidth,\n      strideHeight,\n      padInfo,\n      outWidth,\n      dilationWidth,\n      dilationHeight,\n      dataFormat\n    } = convInfo;\n    const {left, top} = padInfo;\n    const itemsPerBlockRow = inChannels * filterWidth;\n    const glsl = getGlslDifferences();\n    const isChannelsLast = dataFormat === 'channelsLast';\n    const rowDim = isChannelsLast ? 0 : 1;\n    const colDim = isChannelsLast ? 1 : 2;\n\n    let unrolled = ``;\n\n    for (let row = 0; row <= 1; row++) {\n      for (let col = 0; col <= 1; col++) {\n        unrolled += `\n          blockIndex = rc.y + ${col};\n          pos = rc.x + ${row};\n\n          if(blockIndex < ${outputShape[1]} && pos < ${outputShape[0]}) {\n            offsetY = int(blockIndex / (${outWidth})) * ${strideHeight} - ${\n            top};\n            d0 = offsetY + ${dilationHeight} * (pos / ${itemsPerBlockRow});\n\n            if(d0 < ${inputShape[rowDim]} && d0 >= 0) {\n\n              offsetX = int(mod(float(blockIndex), ${outWidth}.) * ${\n            strideWidth}. - ${left}.);\n              d1 = offsetX + ${dilationWidth} * (int(mod(float(pos), ${\n            itemsPerBlockRow}.) / ${inChannels}.));\n\n              if(d1 < ${inputShape[colDim]} && d1 >= 0) {\n\n                ch = int(mod(float(pos), ${inChannels}.));\n\n                if (${isChannelsLast}) {\n                  innerDims = vec2(d1, ch);\n                  result[${row * 2 + col}] = getChannel(\n                    getA(d0, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                } else {\n                  innerDims = vec2(d0, d1);\n                  result[${row * 2 + col}] = getChannel(\n                    getA(ch, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                }\n              }\n            }\n          }\n        `;\n      }\n    }\n\n    this.userCode = `\n      void main() {\n        ivec2 rc = getOutputCoords();\n\n        vec4 result = vec4(0);\n\n        int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n        vec2 innerDims;\n\n        ${unrolled}\n\n        ${glsl.output} = result;\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class LRNProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      xShape: number[], radius: number, bias: number, alpha: number,\n      beta: number) {\n    const rad = radius;\n    const maxD = xShape[3] - 1;\n    this.outputShape = xShape;\n\n    // optimize pow(bias + alpha * sum, -beta)\n    // src: https://github.com/tensorflow/tensorflow/..\n    // blob/26033a1644a9c4a5fbe3170ab2e864b6a4ccd4ca/..\n    // tensorflow/core/kernels/mkl_lrn_op.cc#L320\n    let powOperator;\n    const basis = `float(${bias}) + float(${alpha}) * sum`;\n    if (beta === 0.5) {\n      powOperator = `inversesqrt(${basis})`;\n    } else if (beta === 1.0) {\n      powOperator = `1.0/(${basis})`;\n    } else {\n      powOperator = `exp(log(${basis}) * float(-${beta}));`;\n    }\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n        int d = coords[3];\n        float x = getX(b, r, c, d);\n        float sum = 0.0;\n        for (int j = -${rad}; j <= ${rad}; j++) {\n          int idx = d + j;\n          if (idx >= 0 && idx <=  ${maxD}) {\n            float z = getX(b, r, c, idx);\n            sum += z * z;\n          }\n        }\n        float val = x * ${powOperator};\n        setOutput(val);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class LRNGradProgram implements GPGPUProgram {\n  variableNames = ['inputImage', 'outputImage', 'dy'];\n  outputShape: number[] = [];\n  userCode: string;\n  depthRadius: number;\n  bias: number;\n  alpha: number;\n  beta: number;\n  depth: number;\n\n  constructor(\n      inputShape: number[], depthRadius: number, bias: number, alpha: number,\n      beta: number) {\n    this.outputShape = inputShape;\n    this.depth = inputShape[3];\n    this.depthRadius = depthRadius;\n    this.bias = bias;\n    this.alpha = alpha;\n    this.beta = beta;\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n\n        float result = 0.0;\n        for (int d = 0; d < ${this.depth}; ++d) {\n          int depthBegin = int(max(0.0, float(d - ${depthRadius})));\n          int depthEnd = int(min(float(${this.depth}),\n              float(d + ${depthRadius} + 1)));\n\n          const int MIN_DEPTH_BEGIN = 0;\n          const int MAX_DEPTH_END = ${this.depth};\n\n          float norm = 0.0;\n          for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd) {\n              norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n            }\n            else {\n              break;\n            }\n          }\n\n          norm = float(${alpha}) * norm + float(${bias});\n\n          for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd){\n              float dyi = -2.0 * float(${alpha})\n                * float(${beta})\n                * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n                / norm;\n              if (k == d) {\n                dyi += pow(norm, -1.0 * ${beta});\n              }\n              if (k == coords[3]) {\n                dyi *= getDy(b, r, c, d);\n                result += dyi;\n              }\n            }\n            else {\n              break;\n            }\n          }\n      }\n      setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class LRNPackedProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[] = [];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(\n      xShape: number[], radius: number, bias: number, alpha: number,\n      beta: number) {\n    const rad = radius;\n    const maxD = xShape[3] - 1;\n    this.outputShape = xShape;\n\n    // optimize pow(bias + alpha * sum, -beta)\n    // src: https://github.com/tensorflow/tensorflow/..\n    // blob/26033a1644a9c4a5fbe3170ab2e864b6a4ccd4ca/..\n    // tensorflow/core/kernels/mkl_lrn_op.cc#L320\n    let powOperator;\n    const basis = `float(${bias}) + float(${alpha}) * sum`;\n    if (beta === 0.5) {\n      powOperator = `inversesqrt(${basis})`;\n    } else if (beta === 1.0) {\n      powOperator = `1.0/(${basis})`;\n    } else {\n      powOperator = `exp(log(${basis}) * float(-${beta}));`;\n    }\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords.x;\n        int r = coords.y;\n        int c = coords.z;\n        int d = coords.w;\n\n        bool hasNextCol = d < ${this.outputShape[3]};\n        bool hasNextRow = c < ${this.outputShape[2]};\n\n        vec4 sum = vec4(0.);\n        vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n        vec4 xAtOutputCoords = vec4(\n          getChannel(xFragAtOutputCoords, vec2(c, d)),\n          hasNextCol ?\n            getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n          hasNextRow ?\n            getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n        );\n\n        int firstChannel = d - ${rad};\n        vec2 cache = vec2(0.);\n        if(firstChannel >= 0){\n          vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n          cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n            if(hasNextRow){\n              cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n            }\n        }\n\n        ivec2 depth = ivec2(d, d + 1);\n        for (int j = - ${rad}; j <= ${rad}; j++) {\n          ivec2 idx = depth + j;\n          bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n          bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${maxD}));\n\n          bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n          bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n          if(depthInRange || depthPlusOneInRange){\n            vec4 z = vec4(0.);\n            vec4 xFragAtCurrentDepth;\n            z.xz = cache.xy;\n            if(depthPlusOneInRange && hasNextCol){\n              xFragAtCurrentDepth = idx.y != d ?\n                getX(b, r, c, idx.y) : xFragAtOutputCoords;\n              z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n              if(hasNextRow){\n                z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n              }\n            }\n            cache.xy = z.yw;\n            sum += z * z;\n          }\n        }\n        vec4 result = xAtOutputCoords * ${powOperator};\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class MaxPool2DBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy', 'maxPos'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv2DInfo) {\n    this.outputShape = convInfo.inShape;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n\n    const lastIndex = effectiveFilterHeight * effectiveFilterWidth - 1;\n    this.userCode = `\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${effectiveFilterHeight};\n          wR += ${dilationHeight}) {\n          float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n          if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < ${effectiveFilterWidth}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n            if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n            int maxPosValue = ${lastIndex} - int(getMaxPos(b, idyR, idyC, d));\n\n            // Get the current value, check it against the value from the\n            // position matrix.\n            int curPosValue = wR * ${effectiveFilterWidth} + wC;\n            float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n            dotProd += dyValue * mask;\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n\nexport class MaxPool3DBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy', 'maxPos'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(convInfo: Conv3DInfo) {\n    this.outputShape = convInfo.inShape;\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n\n    const lastIndex =\n        effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1;\n    this.userCode = `\n      const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n        // dx(xD, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < ${effectiveFilterDepth};\n           wD += ${dilationDepth}) {\n          float dyD = float(dyDCorner + wD) / ${strideDepth}.0;\n\n          if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < ${effectiveFilterHeight};\n              wR += ${dilationHeight}) {\n            float dyR = float(dyRCorner + wR) / ${strideHeight}.0;\n\n            if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < ${effectiveFilterWidth};\n                wC += ${dilationWidth}) {\n              float dyC = float(dyCCorner + wC) / ${strideWidth}.0;\n\n              if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n              int maxPosValue = ${lastIndex} -\n                  int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n              // Get the current value, check it against the value from the\n              // position matrix.\n              int curPosValue =\n                  wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} +\n                  wR * ${effectiveFilterWidth} + wC;\n              float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n              dotProd += dyValue * mask;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class MatMulPackedProgram implements GPGPUProgram {\n  variableNames = ['matrixA', 'matrixB'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      aShape: [number, number, number], outputShape: [number, number, number],\n      transposeA = false, transposeB = false, addBias = false,\n      activation: string = null, hasPreluActivation = false) {\n    this.outputShape = outputShape;\n\n    const sharedDim = transposeA ? aShape[1] : aShape[2];\n    const sharedDimensionPacked = Math.ceil(sharedDim / 2);\n\n    const aSample = transposeA ? 'i * 2, rc.y' : 'rc.y, i * 2';\n    const bSample = transposeB ? 'rc.z, i * 2' : 'i * 2, rc.z';\n    const aSwizzle = transposeA ? ['a.xxyy', 'a.zzww'] : ['a.xxzz', 'a.yyww'];\n    const bSwizzle = transposeB ? ['b.xzxz', 'b.ywyw'] : ['b.xyxy', 'b.zwzw'];\n\n    let activationSnippet = '', applyActivationSnippet = '';\n    if (activation) {\n      if (hasPreluActivation) {\n        activationSnippet = `vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          ${activation}\n        }`;\n      } else {\n        activationSnippet = `vec4 activation(vec4 x) {\n          ${activation}\n        }`;\n      }\n\n      applyActivationSnippet = `result = activation(result);`;\n    }\n\n    const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n    if (addBias) {\n      this.variableNames.push('bias');\n    }\n\n    if (hasPreluActivation) {\n      this.variableNames.push('preluActivationWeights');\n    }\n\n    this.userCode = `\n      ${activationSnippet}\n\n      const float sharedDimension = ${sharedDimensionPacked}.0;\n\n      vec4 dot2x2ARowBCol(ivec3 rc) {\n        vec4 result = vec4(0);\n        for (int i = 0; i < ${sharedDimensionPacked}; i++) {\n          vec4 a = getMatrixA(rc.x, ${aSample});\n          vec4 b = getMatrixB(rc.x, ${bSample});\n\n          // These swizzled products need to be separately added.\n          // See: https://github.com/tensorflow/tfjs/issues/1735\n          result += (${aSwizzle[0]} * ${bSwizzle[0]});\n          result += (${aSwizzle[1]} * ${bSwizzle[1]});\n        }\n        return result;\n      }\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n        vec4 result = dot2x2ARowBCol(rc);\n\n        ${addBiasSnippet}\n\n        ${applyActivationSnippet}\n\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class MultinomialProgram implements GPGPUProgram {\n  variableNames = ['probs'];\n  outputShape: number[];\n  userCode: string;\n\n  // Caching uniform location for speed.\n  seedLoc: WebGLUniformLocation;\n\n  constructor(batchSize: number, numOutcomes: number, numSamples: number) {\n    this.outputShape = [batchSize, numSamples];\n\n    this.userCode = `\n      uniform float seed;\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n\n        float r = random(seed);\n        float cdf = 0.0;\n\n        for (int i = 0; i < ${numOutcomes - 1}; i++) {\n          cdf += getProbs(batch, i);\n\n          if (r < cdf) {\n            setOutput(float(i));\n            return;\n          }\n        }\n\n        // If no other event happened, last event happened.\n        setOutput(float(${numOutcomes - 1}));\n      }\n    `;\n  }\n\n  getCustomSetupFunc(seed: number) {\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.seedLoc == null) {\n        this.seedLoc = gpgpu.getUniformLocation(webGLProgram, 'seed');\n      }\n      gpgpu.gl.uniform1f(this.seedLoc, seed);\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class OneHotProgram implements GPGPUProgram {\n  variableNames = ['indices'];\n  outputShape: number[];\n  userCode: string;\n\n  // Caching uniform location for speed.\n  seedLoc: WebGLUniformLocation;\n\n  constructor(\n      numIndices: number, depth: number, onValue: number, offValue: number) {\n    this.outputShape = [numIndices, depth];\n\n    this.userCode = `\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int index = round(getIndices(coords.x));\n        setOutput(mix(float(${offValue}), float(${onValue}),\n                      float(index == coords.y)));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class PackProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n  packedInputs = false;\n  packedOutput = true;\n\n  constructor(\n      outputShape:\n          number[]) {  // TODO(https://github.com/tensorflow/tfjs/issues/893):\n                       // Only input / output 3D tensors.\n    this.outputShape = outputShape;\n    const rank = outputShape.length;\n\n    if (rank === 0) {\n      this.userCode = `\n        void main() {\n          setOutput(vec4(getA(), 0., 0., 0.));\n        }\n      `;\n    } else {\n      const channels = getChannels('rc', rank);\n      const dtype = getCoordsDataType(rank);\n      const outOfBoundsCondition =\n          getOutOfBoundsCondition(rank, outputShape, channels);\n      const setup = getSetup(\n          rank, outputShape[outputShape.length - 1],\n          outputShape[outputShape.length - 2], channels);\n      const output = getOutput(outputShape, channels);\n\n      this.userCode = `\n        void main() {\n          ${dtype} rc = getOutputCoords();\n\n          if(${outOfBoundsCondition}) {\n            setOutput(vec4(0));\n          } else {\n            ${setup}\n\n            setOutput(vec4(${output}));\n          }\n        }\n      `;\n    }\n  }\n}\n\nfunction getSourceCoordsArr(rank: number, dims: string[]): string[] {\n  const coords = [];\n\n  for (let row = 0; row <= 1; row++) {\n    for (let col = 0; col <= 1; col++) {\n      let coord = `${row === 0 ? 'r' : 'rp1'}, ${col === 0 ? 'c' : 'cp1'}`;\n\n      for (let d = 2; d < rank; d++) {\n        coord = `${dims[dims.length - 1 - d]},` + coord;\n      }\n\n      coords.push(coord);\n    }\n  }\n  return coords;\n}\n\nfunction getOutOfBoundsCondition(\n    rank: number, shape: number[], dims: string[]): string {\n  if (rank === 1) {\n    return `rc > ${shape[0]}`;\n  }\n\n  let cond = '';\n  for (let i = rank - 2; i < rank; i++) {\n    cond += `${dims[i]} >= ${shape[i]}`;\n    if (i < rank - 1) {\n      cond += '||';\n    }\n  }\n\n  return cond;\n}\n\nfunction getSetup(\n    rank: number, cols: number, rows: number, dims: string[]): string {\n  if (rank === 1) {\n    return '';\n  }\n\n  const innerDims = dims.slice(-2);\n\n  return `\n    int r = ${innerDims[0]};\n    int c = ${innerDims[1]};\n    int rp1 = r + 1;\n    int cp1 = c + 1;\n\n    bool cEdge = cp1 >= ${cols};\n    bool rEdge = rp1 >= ${rows};\n  `;\n}\n\nfunction getOutput(shape: number[], dims: string[]): string {\n  const rank = shape.length;\n  const sourceCoords = getSourceCoordsArr(rank, dims);\n  if (rank === 1) {\n    return `getA(rc),\n            rc + 1 >= ${shape[0]} ? 0. : getA(rc + 1),\n            0, 0`;\n  }\n\n  return `getA(${sourceCoords[0]}),\n          cEdge ? 0. : getA(${sourceCoords[1]}),\n          rEdge ? 0. : getA(${sourceCoords[2]}),\n          rEdge || cEdge ? 0. : getA(${sourceCoords[3]})`;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class PadProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      xShape: number[], paddings: Array<[number, number]>,\n      constantValue: number) {\n    this.outputShape = paddings.map(\n        (p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n    const rank = xShape.length;\n    const type = getCoordsDataType(rank);\n\n    const start = paddings.map(p => p[0]).join(',');\n    const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n    const unpackedCoords =\n        ['coords[0]', 'coords[1]', 'coords[2]', 'coords[3]'].slice(0, rank);\n\n    if (rank === 1) {\n      this.userCode = `\n        int start = ${start};\n        int end = ${end};\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start || outC >= end) {\n            setOutput(float(${constantValue}));\n          } else {\n            setOutput(getX(outC - start));\n          }\n        }\n      `;\n      return;\n    }\n    this.userCode = `\n      ${type} start = ${type}(${start});\n      ${type} end = ${type}(${end});\n\n      void main() {\n        ${type} outC = getOutputCoords();\n        if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n          setOutput(float(${constantValue}));\n        } else {\n          ${type} coords = outC - start;\n          setOutput(getX(${unpackedCoords}));\n        }\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class PadPackedProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      xShape: number[], paddings: Array<[number, number]>,\n      constantValue: number) {\n    this.outputShape = paddings.map(\n        (p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n    const rank = xShape.length;\n    const dtype = getCoordsDataType(rank);\n\n    const start = paddings.map(p => p[0]).join(',');\n    const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n    const coords = getChannels('rc', rank);\n    const source = getChannels('source', rank);\n    const cLimit = `${coords[rank - 1]} < ${this.outputShape[rank - 1]}`;\n    const innerDims =\n        rank === 1 ? 'source' : `vec2(${source.slice(-2).join()})`;\n\n    const componentSetup = [\n      `${dtype} rc = outputLoc;`, `${coords[rank - 1]} += 1;\n       if(${cLimit}) {\n      `,\n      rank === 1 ? '' : `}\n       rc = outputLoc;\n       ${coords[rank - 2]} += 1;\n       if(${coords[rank - 2]} < ${this.outputShape[rank - 2]}) {`,\n      rank === 1 ? '' : `  ${coords[rank - 1]} += 1;\n         if(${cLimit}) {`\n    ];\n\n    const paddingArea = rank === 1 ?\n        'rc < start || rc >= end' :\n        'any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))';\n    let mainLoop = '';\n    for (let i = 0, j = rank === 1 ? 2 : 4; i < j; i++) {\n      mainLoop += `\n        ${componentSetup[i]}\n        if (${paddingArea}) {\n          result[${i}] = float(${constantValue});\n        } else {\n          ${dtype} source = rc - start;\n          result[${i}] = getChannel(getX(${source.join()}), ${innerDims});\n        }\n      `;\n    }\n    mainLoop += (rank === 1 ? `} ` : `}}`);\n\n    this.userCode = `\n      const ${dtype} start = ${dtype}(${start});\n      const ${dtype} end = ${dtype}(${end});\n\n      void main() {\n        ${dtype} outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        ${mainLoop}\n        setOutput(result);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport {Conv3DInfo} from '../../ops/conv_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class Pool2DProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      convInfo: Conv2DInfo, poolType: 'max'|'avg', computePositions: boolean,\n      flattenPositions = false, includeBatchInIndex = false) {\n    if (poolType === 'avg' && computePositions) {\n      throw new Error('Cannot compute positions for average pool.');\n    }\n\n    const filterWidth = convInfo.filterWidth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    this.outputShape = convInfo.outShape;\n\n    const isAvgPool = poolType === 'avg';\n    const batchFlattenPositionStr = `((batch  * ${convInfo.inHeight} + xR) * ${\n        convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`;\n    const flattenPositionStr =\n        `(xR * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`;\n\n    let initializationValue = '0.0';\n    if (!isAvgPool) {\n      // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n      initializationValue = '-1.0 / 1e-20';\n    }\n\n    if (computePositions) {\n      const compareOp = '>=';\n\n      this.userCode = `\n        const ivec2 strides = ivec2(${strideHeight}, ${strideWidth});\n        const ivec2 pads = ivec2(${padTop}, ${padLeft});\n\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int batch = coords[0];\n          int d = coords[3];\n\n          ivec2 xRCCorner = coords.yz * strides - pads;\n          int xRCorner = xRCCorner.x;\n          int xCCorner = xRCCorner.y;\n\n          // max/min x(?, ?, d) to get y(yR, yC, d).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n          float avgValue = 0.0;\n\n          for (int wR = 0; wR < ${effectiveFilterHeight};\n              wR += ${dilationHeight}) {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= ${convInfo.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${effectiveFilterWidth};\n                wC += ${dilationWidth}) {\n              int xC = xCCorner + wC;\n\n              if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                continue;\n              }\n\n              float value = getX(batch, xR, xC, d);\n\n              // If a min / max value has already been found, use it. If not,\n              // use the current value.\n              float currMinMaxValue = mix(\n                  value, minMaxValue, minMaxValueFound);\n              if (value ${compareOp} currMinMaxValue) {\n                minMaxValue = value;\n                minMaxValueFound = 1.0;\n                minMaxPosition = ${\n          flattenPositions ? (includeBatchInIndex ? batchFlattenPositionStr :\n                                                    flattenPositionStr) :\n                             `wR * ${effectiveFilterWidth} + wC`};\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      `;\n      return;\n    }\n\n    const compareOp = 'max';\n\n    let returnValue = `${poolType}(${poolType}(${poolType}(` +\n        'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n    if (poolType === 'avg') {\n      returnValue = `avgValue / count`;\n    }\n\n    const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4;\n    const filterWidthVec4Remainder = filterWidth % 4;\n\n    const updateSnippet = `\n      if (${isAvgPool}) {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = ${compareOp}(values, minMaxValue);\n      }\n    `;\n\n    this.userCode = `\n      const ivec2 strides = ivec2(${strideHeight}, ${strideWidth});\n      const ivec2 pads = ivec2(${padTop}, ${padLeft});\n      const float initializationValue = ${initializationValue};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xR, int xC, int d) {\n        if (xC < 0 || xC >= ${convInfo.inWidth}) {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xR, xC, d);\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d = coords[3];\n\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // max/min x(?, ?, d) to get y(yR, yC, d).\n        // ? = to be determined\n        vec4 minMaxValue = vec4(${initializationValue});\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wR = 0; wR < ${effectiveFilterHeight};\n            wR += ${dilationHeight}) {\n          int xR = xRCorner + wR;\n\n          if (xR < 0 || xR >= ${convInfo.inHeight}) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) {\n            int xC = xCCorner + wC * ${dilationWidth};\n\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${dilationWidth}, d),\n              getValue(batch, xR, xC + 2 * ${dilationWidth}, d),\n              getValue(batch, xR, xC + 3 * ${dilationWidth}, d)\n            );\n\n            ${updateSnippet}\n          }\n\n          int xC = xCCorner + ${filterWidthNearestVec4};\n          if (${filterWidthVec4Remainder === 1}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              initializationValue,\n              initializationValue,\n              initializationValue\n            );\n\n            ${updateSnippet}\n          } else if (${filterWidthVec4Remainder === 2}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${dilationWidth}, d),\n              initializationValue,\n              initializationValue\n            );\n\n            ${updateSnippet}\n          } else if (${filterWidthVec4Remainder === 3}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${dilationWidth}, d),\n              getValue(batch, xR, xC + 2 * ${dilationWidth}, d),\n              initializationValue\n            );\n\n            ${updateSnippet}\n          }\n        }\n        setOutput(${returnValue});\n      }\n    `;\n  }\n}\n\nexport class Pool3DProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      convInfo: Conv3DInfo, poolType: 'max'|'avg', computePositions: boolean,\n      flattenPositions = false, includeBatchInIndex = false) {\n    if (poolType === 'avg' && computePositions) {\n      throw new Error('Cannot compute positions for average pool.');\n    }\n\n    const filterWidth = convInfo.filterWidth;\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n\n    const padFront = convInfo.padInfo.front;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n    this.outputShape = convInfo.outShape;\n\n    const isAvgPool = poolType === 'avg';\n\n    let initializationValue = '0.0';\n    if (!isAvgPool) {\n      // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n      initializationValue = '-1.0 / 1e-20';\n    }\n\n    if (computePositions) {\n      const compareOp = '>=';\n\n      this.userCode = `\n        const ivec3 strides =\n            ivec3(${strideDepth}, ${strideHeight}, ${strideWidth});\n        const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n\n        void main() {\n          ivec5 coords = getOutputCoords();\n          int batch = coords.x;\n          int ch = coords.u;\n\n          ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n          int xDCorner = xCorner.x;\n          int xRCorner = xCorner.y;\n          int xCCorner = xCorner.z;\n\n          // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n\n          for (int wD = 0; wD < ${effectiveFilterDepth};\n              wD += ${dilationDepth}) {\n            int xD = xDCorner + wD;\n\n            if (xD < 0 || xD >= ${convInfo.inDepth}) {\n              continue;\n            }\n\n            for (int wR = 0; wR < ${effectiveFilterHeight};\n                wR += ${dilationHeight}) {\n              int xR = xRCorner + wR;\n\n              if (xR < 0 || xR >= ${convInfo.inHeight}) {\n                continue;\n              }\n\n              for (int wC = 0; wC < ${effectiveFilterWidth};\n                  wC += ${dilationWidth}) {\n                int xC = xCCorner + wC;\n\n                if (xC < 0 || xC >= ${convInfo.inWidth}) {\n                  continue;\n                }\n\n                float value = getX(batch, xD, xR, xC, ch);\n\n                // If a min / max value has already been found, use it. If not,\n                // use the current value.\n                float currMinMaxValue = mix(\n                    value, minMaxValue, minMaxValueFound);\n                if (value ${compareOp} currMinMaxValue) {\n                  minMaxValue = value;\n                  minMaxValueFound = 1.0;\n                  minMaxPosition = ${\n          flattenPositions ?\n              (includeBatchInIndex ?\n                   `(((batch * ${convInfo.inDepth} + xD) * ${\n                       convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${\n                       convInfo.inChannels} + ch` :\n                   `((xD * ${convInfo.inHeight} + xR) * ${\n                       convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch`) :\n              `wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} +\n                      wR * ${effectiveFilterWidth} + wC`};\n                }\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      `;\n      return;\n    }\n\n    const compareOp = 'max';\n\n    let returnValue = `${poolType}(${poolType}(${poolType}(` +\n        'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n    if (poolType === 'avg') {\n      returnValue = `avgValue / count`;\n    }\n\n    const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4;\n    const filterWidthVec4Remainder = filterWidth % 4;\n\n    const updateSnippet = `\n      if (${isAvgPool}) {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = ${compareOp}(values, minMaxValue);\n      }\n    `;\n\n    this.userCode = `\n      const ivec3 strides =\n        ivec3(${strideDepth}, ${strideHeight}, ${strideWidth});\n      const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft});\n      const float initializationValue = ${initializationValue};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xD, int xR, int xC, int ch) {\n        if (xC < 0 || xC >= ${convInfo.inWidth}) {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xD, xR, xC, ch);\n      }\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xDCorner = xCorner.x;\n        int xRCorner = xCorner.y;\n        int xCCorner = xCorner.z;\n\n        // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n        // ? = to be determined\n        vec4 minMaxValue = vec4(${initializationValue});\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wD = 0; wD < ${effectiveFilterDepth};\n            wD += ${dilationDepth}) {\n          int xD = xDCorner + wD;\n\n          if (xD < 0 || xD >= ${convInfo.inDepth}) {\n            continue;\n          }\n\n          for (int wR = 0; wR < ${effectiveFilterHeight};\n            wR += ${dilationHeight}) {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= ${convInfo.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) {\n              int xC = xCCorner + wC * ${dilationWidth};\n\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${dilationWidth}, ch),\n                getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch),\n                getValue(batch, xD, xR, xC + 3 * ${dilationWidth}, ch)\n              );\n\n              ${updateSnippet}\n            }\n\n            int xC = xCCorner + ${filterWidthNearestVec4};\n            if (${filterWidthVec4Remainder === 1}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                initializationValue,\n                initializationValue,\n                initializationValue\n              );\n\n              ${updateSnippet}\n            } else if (${filterWidthVec4Remainder === 2}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${dilationWidth}, ch),\n                initializationValue,\n                initializationValue\n              );\n\n              ${updateSnippet}\n            } else if (${filterWidthVec4Remainder === 3}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${dilationWidth}, ch),\n                getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch),\n                initializationValue\n              );\n\n              ${updateSnippet}\n            }\n          }\n          setOutput(${returnValue});\n        }\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ReduceInfo} from '../../ops/reduce_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ReduceProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      reduceInfo: ReduceInfo,\n      reduceType: 'all'|'any'|'max'|'min'|'sum'|'prod') {\n    const windowSize = reduceInfo.windowSize;\n    const batchSize = reduceInfo.batchSize;\n    const inSize = reduceInfo.inSize;\n    const outSize = Math.ceil(inSize / windowSize);\n    this.outputShape = [batchSize, outSize];\n\n    let initializationValue = '0.0';\n    let compareOp = ``;\n\n    if (reduceType === 'prod') {\n      initializationValue = '1.0';\n    } else if (reduceType === 'min') {\n      // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n      initializationValue = '1.0 / 1e-20';\n      compareOp = `min`;\n    } else if (reduceType === 'max') {\n      // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n      initializationValue = '-1.0 / 1e-20';\n      compareOp = `max`;\n    }\n\n    let returnValue = `${reduceType}(${reduceType}(${reduceType}(` +\n        'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n\n    if (reduceType === 'sum') {\n      returnValue = `sumValue`;\n    } else if (reduceType === 'prod') {\n      returnValue = `prodValue`;\n    } else if (reduceType === 'all') {\n      returnValue = `allValue`;\n    } else if (reduceType === 'any') {\n      returnValue = `anyValue`;\n    }\n\n    const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4;\n    const windowSizeVec4Remainder = windowSize % 4;\n\n    let updateSnippet = `\n      if (${reduceType === 'sum'}) {\n        sumValue += dot(values, ones);\n      } else if (${reduceType === 'prod'}) {\n        vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n        prodValue *= tmp[0] * tmp[1];\n      } else {\n        minMaxValue = ${compareOp}(values, minMaxValue);\n      }\n    `;\n\n    let vecType = `vec4`;\n\n    if (reduceType === 'all') {\n      initializationValue = '1.0';\n      updateSnippet = `\n        bool reducedAllValue = all(values);\n        float floatedReducedAllValue = float(reducedAllValue);\n        allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n      `;\n      vecType = `bvec4`;\n    } else if (reduceType === 'any') {\n      initializationValue = '0.0';\n      updateSnippet = `\n        bool reducedAnyValue = any(values);\n        float floatedReducedAnyValue = float(reducedAnyValue);\n        anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n      `;\n      vecType = `bvec4`;\n    }\n\n    let checkOutOfBounds = '';\n    if (inSize % windowSize > 0) {\n      checkOutOfBounds = `\n        if (inIdx < 0 || inIdx >= ${inSize}) {\n          return initializationValue;\n        }\n      `;\n    }\n    this.userCode = `\n      const float initializationValue = ${initializationValue};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        ${checkOutOfBounds}\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * ${windowSize};\n\n        vec4 minMaxValue = vec4(${initializationValue});\n        float prodValue = 1.0;\n        float sumValue = 0.0;\n        float allValue = 1.0;\n        float anyValue = 0.0;\n\n        for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) {\n          int inIdx = inOffset + i;\n          ${vecType} values = ${vecType}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          ${updateSnippet}\n        }\n\n        int inIdx = inOffset + ${windowSizeNearestVec4};\n        if (${windowSizeVec4Remainder === 1}) {\n          ${vecType} values = ${vecType}(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          ${updateSnippet}\n        } else if (${windowSizeVec4Remainder === 2}) {\n          ${vecType} values = ${vecType}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          ${updateSnippet}\n        } else if (${windowSizeVec4Remainder === 3}) {\n          ${vecType} values = ${vecType}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          ${updateSnippet}\n        }\n        setOutput(${returnValue});\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\n\nexport class ReshapePackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(outputShape: [number, number, number], inputShape: [\n    number, number, number\n  ]) {\n    this.outputShape = outputShape;\n\n    let mainLoop = ``;\n    for (let i = 0; i < 4; i++) {\n      let thisRC = `thisRC = rc;`;\n      if (i % 2 === 1) {\n        thisRC += `thisRC.z += 1;`;\n      }\n      if (i > 1) {\n        thisRC += `thisRC.y += 1;`;\n      }\n\n      mainLoop += `\n        ${thisRC}\n        ${i > 0 ? `if(thisRC.y < rows && thisRC.z < cols){` : ''}\n          int flatIndex = getFlatIndex(thisRC);\n\n          ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n          vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n          result[${i}] =\n            getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n        ${i > 0 ? '}' : ''}\n      `;\n    }\n\n    this.userCode = `\n      ${getReshapedInputCoords(inputShape)}\n      ${shader_util.getFlatIndexFrom3D(outputShape)}\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0.);\n\n        ivec3 thisRC;\n        int rows = ${outputShape[1]};\n        int cols = ${outputShape[2]};\n\n        ${mainLoop}\n\n        setOutput(result);\n      }\n    `;\n  }\n}\n\nfunction getReshapedInputCoords(shape: [number, number, number]): string {\n  const coordsFromIndexSnippet =\n      shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd'], shape);\n\n  return `\n    ivec3 inputCoordsFromReshapedOutCoords(int index) {\n      ${coordsFromIndexSnippet}\n      return ivec3(r, c, d);\n    }\n  `;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor4D} from '../../tensor';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ResizeBilinearBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(dy: Tensor4D, x: Tensor4D, alignCorners: boolean) {\n    this.outputShape = x.shape;\n    const [, xHeight, xWidth, ] = x.shape;\n    const [, yHeight, yWidth] = dy.shape;\n\n    // In the backwards pass, we want to find the pixels that were generated for\n    // each pixel in the input image the forward pass and add the corresponding\n    // coefficient from dy to the gradient (with some interpolation).\n\n    const effectiveXSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n      (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n    ];\n\n    const effectiveYSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n      (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n    ];\n\n    const heightScale = effectiveXSize[0] / effectiveYSize[0];\n    const widthScale = effectiveXSize[1] / effectiveYSize[1];\n\n    const invHeightScale = 1 / heightScale;\n    const invWidthScale = 1 / widthScale;\n\n    // This defines the size of the window of values around a particular\n    // index in dy that we want to search for contributions to dx.\n    const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n    const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(${heightScale});\n        const float widthScale = float(${widthScale});\n\n        const float invHeightScale = float(${invHeightScale});\n        const float invWidthScale = float(${invWidthScale});\n\n        const int winHeight = int(${winHeight});\n        const int winWidth = int(${winWidth});\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(startRLerp - float(winHeight / 2));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(startCLerp - float(winWidth / 2));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= ${yHeight}) {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= ${yWidth}) {\n              continue;\n            }\n\n            float dxR = float(dyR) * heightScale;\n            int topDxRIndex = int(floor(dxR));\n            int bottomDxRIndex = int(min(ceil(dxR), ${xHeight - 1}.0));\n            float dxRLerp = dxR - float(topDxRIndex);\n            float inverseDxRLerp = 1.0 - dxRLerp;\n\n            float dxC = float(dyC) * widthScale;\n            int leftDxCIndex = int(floor(dxC));\n            int rightDxCIndex = int(min(ceil(dxC), ${xWidth - 1}.0));\n            float dxCLerp = dxC - float(leftDxCIndex);\n            float inverseDxCLerp = 1.0 - dxCLerp;\n\n            if (r == topDxRIndex && c == leftDxCIndex) {\n              // topLeft\n              accumulator +=\n                getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n            }\n\n            if (r == topDxRIndex && c == rightDxCIndex) {\n              // topRight\n              accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == leftDxCIndex) {\n              // bottomLeft\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == rightDxCIndex) {\n              // bottomRight\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ResizeBilinearProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      inputShape: [number, number, number, number], newHeight: number,\n      newWidth: number, alignCorners: boolean) {\n    const [batch, oldHeight, oldWidth, depth] = inputShape;\n    this.outputShape = [batch, newHeight, newWidth, depth];\n\n    const effectiveInSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n      (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n    ];\n\n    const effectiveOutSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n      (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n    ];\n\n    this.userCode = `\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          ${effectiveInSize[0] / effectiveOutSize[0]},\n          ${effectiveInSize[1] / effectiveOutSize[1]});\n      const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the four integer indices.\n        ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n        ivec2 sourceCeilRC = ivec2(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n        float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n        float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n        float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n        vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n        float top = topLeft + (topRight - topLeft) * fracRC.y;\n        float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n        float newValue = top + (bottom - top) * fracRC.x;\n\n        setOutput(newValue);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ResizeBilinearPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      inputShape: [number, number, number, number], newHeight: number,\n      newWidth: number, alignCorners: boolean) {\n    const [batch, oldHeight, oldWidth, depth] = inputShape;\n    this.outputShape = [batch, newHeight, newWidth, depth];\n\n    const effectiveInSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n      (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n    ];\n\n    const effectiveOutSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n      (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n    ];\n\n    this.userCode = `\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          ${effectiveInSize[0] / effectiveOutSize[0]},\n          ${effectiveInSize[1] / effectiveOutSize[1]},\n          ${effectiveInSize[1] / effectiveOutSize[1]});\n      const vec3 inputShapeRC = vec3(${oldHeight}.0, ${oldWidth}.0,\n                                     ${oldWidth}.0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the four integer indices.\n        ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n        ivec3 sourceCeilRC = ivec3(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < ${depth - 1};\n        bool hasNextRow = coords.z < ${newWidth - 1};\n\n        // In parallel, construct four corners for all four components in\n        // packed 2x2 cell.\n        vec4 topLeft = vec4(\n          getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 bottomLeft = vec4(\n          getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 topRight = vec4(\n          getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec4 bottomRight = vec4(\n          getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n        vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n        vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n        vec4 newValue = mix(top, bottom, fracRC.x);\n\n        setOutput(newValue);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor4D} from '../../tensor';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ResizeNearestNeigborBackpropProgram implements GPGPUProgram {\n  variableNames = ['dy'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(dy: Tensor4D, x: Tensor4D, alignCorners: boolean) {\n    this.outputShape = x.shape;\n    const [, xHeight, xWidth, ] = x.shape;\n    const [, yHeight, yWidth] = dy.shape;\n\n    // In the backwards pass, we want to find the pixels that were generated for\n    // each pixel in the input image the forward pass and add the corresponding\n    // coefficient from dy to the gradient (with some interpolation).\n\n    const effectiveXSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n      (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n    ];\n\n    const effectiveYSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n      (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n    ];\n\n    const heightScale = effectiveXSize[0] / effectiveYSize[0];\n    const widthScale = effectiveXSize[1] / effectiveYSize[1];\n\n    const invHeightScale = 1 / heightScale;\n    const invWidthScale = 1 / widthScale;\n\n    // This defines the size of the window of values around a particular\n    // index in dy that we want to search for contributions to dx.\n    const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n    const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n\n    this.userCode = `\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(${heightScale});\n        const float widthScale = float(${widthScale});\n\n        const float invHeightScale = float(${invHeightScale});\n        const float invWidthScale = float(${invWidthScale});\n\n        const int winHeight = int(${winHeight});\n        const int winWidth = int(${winWidth});\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= ${yHeight}) {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= ${yWidth}) {\n              continue;\n            }\n\n            float sourceFracRow =\n              float(${effectiveXSize[0]}) *\n                (float(dyR) / float(${effectiveYSize[0]}));\n\n            float sourceFracCol =\n                float(${effectiveXSize[1]}) *\n                  (float(dyC) / float(${effectiveYSize[1]}));\n\n            int sourceNearestRow = int(min(\n                float(int(${xHeight}) - 1),\n                ${alignCorners} ? float(round(sourceFracRow)) :\n                                  float(floor(sourceFracRow))));\n\n            int sourceNearestCol = int(min(\n                float(int(${xWidth}) - 1),\n                ${alignCorners} ? float(round(sourceFracCol)) :\n                                  float(floor(sourceFracCol))));\n\n            if (r == sourceNearestRow && c == sourceNearestCol) {\n              accumulator += getDy(b, dyR, dyC, d);\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class ResizeNearestNeighborProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[] = [];\n  userCode: string;\n\n  constructor(\n      inputShape: [number, number, number, number], newHeight: number,\n      newWidth: number, alignCorners: boolean) {\n    const [batch, oldHeight, oldWidth, depth] = inputShape;\n    this.outputShape = [batch, newHeight, newWidth, depth];\n\n    const effectiveInSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n      (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n    ];\n\n    const effectiveOutSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n      (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n    ];\n\n    // When align corners is false, we rounds the value with floor.\n    const roundBase = alignCorners ? '0.5' : '0.0';\n\n    this.userCode = `\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          ${effectiveInSize[0] / effectiveOutSize[0]},\n          ${effectiveInSize[1] / effectiveOutSize[1]});\n      const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec2 sourceNearestRC = ivec2(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${roundBase})));\n\n        float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n        setOutput(newValue);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class ReverseProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(xShape: number[], axis: number[]) {\n    const rank = xShape.length;\n    if (rank > 4) {\n      throw new Error(\n          `WebGL backend: Reverse of rank-${rank} tensor is not yet supported`);\n    }\n    this.outputShape = xShape;\n\n    if (rank === 1) {\n      this.userCode = `\n        void main() {\n          int coord = getOutputCoords();\n          setOutput(getX(${xShape[0]} - coord - 1));\n        }\n      `;\n      return;\n    }\n    const getInCoord = (i: number) => {\n      if (axis.indexOf(i) !== -1 && xShape[i] !== 1) {\n        return `${xShape[i]} - coords[${i}] - 1`;\n      }\n      return `coords[${i}]`;\n    };\n    const inCoords = xShape.map((_, i) => getInCoord(i)).join(',');\n    const type = getCoordsDataType(rank);\n\n    this.userCode = `\n      void main() {\n        ${type} coords = getOutputCoords();\n        setOutput(getX(${inCoords}));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getChannels} from '../packing_util';\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class ReversePackedProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(xShape: number[], axis: number[]) {\n    const rank = xShape.length;\n    if (rank > 4) {\n      throw new Error(\n          `WebGL backend: Reverse of rank-${rank} tensor is not yet supported`);\n    }\n    this.outputShape = xShape;\n    const channels = getChannels('rc', rank);\n    const nextColumn =\n        `${channels[rank - 1]} + 1 < ${this.outputShape[rank - 1]}`;\n    const nextRow = `${channels[rank - 2]} + 1 < ${this.outputShape[rank - 2]}`;\n    const type = getCoordsDataType(rank);\n    if (rank === 1) {\n      this.userCode = `\n        void main(){\n          int rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = getChannel(getX(${xShape[0]} - rc - 1),\n            ${xShape[0]} - rc - 1);\n          if(${nextColumn}){\n              result.g = getChannel(getX(${xShape[0]} - (rc  + 1) - 1),\n                ${xShape[0]} - (rc  + 1) - 1);\n          }\n          setOutput(result);\n        }\n      `;\n    } else {\n      this.userCode = `\n        void main() {\n          ${type} rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = ${getR(channels.slice())};\n          if(${nextColumn}){\n            result.g = ${getG(channels.slice())};\n          }\n          if(${nextRow}) {\n            result.b = ${getB(channels.slice())};\n            if(${nextColumn}) {\n              result.a = ${getA(channels.slice())};\n            }\n          }\n          setOutput(result);\n        }\n    `;\n    }\n\n    function getR(channels: string[]): string {\n      return getChannel(channels);\n    }\n\n    function getG(channels: string[]): string {\n      channels[rank - 1] = '(' + channels[rank - 1] + ` + 1)`;\n      return getChannel(channels);\n    }\n\n    function getB(channels: string[]): string {\n      channels[rank - 2] = '(' + channels[rank - 2] + ` + 1)`;\n      return getChannel(channels);\n    }\n\n    function getA(channels: string[]): string {\n      channels[rank - 1] = '(' + channels[rank - 1] + ` + 1)`;\n      channels[rank - 2] = '(' + channels[rank - 2] + ` + 1)`;\n      return getChannel(channels);\n    }\n\n    function getChannel(channels: string[]): string {\n      const inCoordsArray = xShape.map((_, i) => getInCoord(i, channels));\n      const inCoords = inCoordsArray.join(',');\n      const innerDims = inCoordsArray.slice(-2).join(',');\n      return `getChannel(getX(${inCoords}), vec2(${innerDims}))`;\n    }\n\n    function getInCoord(i: number, channels1: string[]): string {\n      if (axis.indexOf(i) !== -1 && xShape[i] !== 1) {\n        return `${xShape[i]} - ${channels1[i]} - 1`;\n      } else {\n        return `${channels1[i]}`;\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class ScatterProgram implements GPGPUProgram {\n  variableNames = ['updates', 'indices', 'defaultValue'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      updateSize: number, sliceDim: number, indicesRank: number,\n      updatesRank: number, strides: number[], shape: number[],\n      summingDupeIndex = true) {\n    this.outputShape = shape;\n    const stridesType = getCoordsDataType(strides.length);\n    const dtype = getCoordsDataType(shape.length);\n    let indicesString = '';\n    if (indicesRank === 1) {\n      indicesString = 'i';\n    } else if (indicesRank === 2) {\n      indicesString = 'i, j';\n    }\n    const indicesSnippet = `getIndices(${indicesString})`;\n\n    let updatesString = '';\n    if (updatesRank === 1) {\n      updatesString = 'i';\n    } else if (updatesRank === 2) {\n      updatesString = 'i, coords[1]';\n    }\n    const updatesSnippet = `getUpdates(${updatesString})`;\n\n    const strideString = sliceDim > 1 ? 'strides[j]' : 'strides';\n    this.userCode = `\n        ${stridesType} strides = ${stridesType}(${strides});\n\n        void main() {\n          ${dtype} coords = getOutputCoords();\n          float sum = 0.0;\n          bool found = false;\n          for (int i = 0; i < ${updateSize}; i++) {\n            int flattenedIndex = 0;\n            for (int j = 0; j < ${sliceDim}; j++) {\n              int index = round(${indicesSnippet});\n              flattenedIndex += index * ${strideString};\n            }\n            if (flattenedIndex == coords[0]) {\n              sum += ${updatesSnippet};\n              found = true;\n            }\n          }\n          setOutput(mix(getDefaultValue(), sum, float(found)));\n        }\n      `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {SegOpInfo} from '../../ops/segment_util';\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class SegmentOpProgram implements GPGPUProgram {\n  variableNames = ['x', 'segmentIds'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(segOpInfo: SegOpInfo, segOpType: 'unsortedSegmentSum') {\n    const windowSize = segOpInfo.windowSize;\n    const batchSize = segOpInfo.batchSize;\n    const inSize = segOpInfo.inSize;\n    const numSegments = segOpInfo.numSegments;\n    const outSize = numSegments * Math.ceil(inSize / windowSize);\n    this.outputShape = [batchSize, outSize];\n\n    const initializationValue = '0.0';\n    const returnValue = `sumValue`;\n\n    const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4;\n    const windowSizeVec4Remainder = windowSize % 4;\n\n    const updateSnippet = `\n        sumValue += dot(values, segFilter);\n    `;\n\n    let checkValueOutOfBounds = '';\n    if (inSize % windowSize > 0) {\n      checkValueOutOfBounds = `\n        if (inIdx < 0 || inIdx >= ${inSize}) {\n          return initializationValue;\n        }\n      `;\n    }\n\n    let checkSegmentIdOutOfBounds = '';\n    if (inSize % windowSize > 0) {\n      checkSegmentIdOutOfBounds = `\n        if (inIdx < 0 || inIdx >= ${inSize}) {\n          return -1.0;\n        }\n      `;\n    }\n\n    this.userCode = `\n      const float initializationValue = ${initializationValue};\n\n      float getValue(int batch, int inIdx) {\n        ${checkValueOutOfBounds}\n        return getX(batch, inIdx);\n      }\n\n      float getSegmentIdAtIndex(int inIdx) {\n        ${checkSegmentIdOutOfBounds}\n        return getSegmentIds(inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = int(floor(float(outIdx) / float(\n          ${numSegments})) * float(${windowSize}));\n        int currentSeg = int(mod(float(outIdx), float(${numSegments})));\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n          );\n\n          ${updateSnippet}\n        }\n\n        int inIdx = inOffset + ${windowSizeNearestVec4};\n        if (${windowSizeVec4Remainder === 1}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            0,\n            0,\n            0\n          );\n\n          ${updateSnippet}\n        } else if (${windowSizeVec4Remainder === 2}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n              0,\n              0\n          );\n\n          ${updateSnippet}\n        } else if (${windowSizeVec4Remainder === 3}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            0\n          );\n\n          ${updateSnippet}\n        }\n        setOutput(${returnValue});\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class SelectProgram implements GPGPUProgram {\n  variableNames = ['c', 'a', 'b'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(cRank: number, shape: number[], rank: number) {\n    this.outputShape = shape;\n\n    let cCoords;\n    let abCoords;\n    if (rank > 4) {\n      throw Error(`Where for rank ${rank} is not yet supported`);\n    }\n\n    if (rank === 1) {\n      abCoords = `resRC`;\n      cCoords = `resRC`;\n    } else {\n      const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w'];\n      const cCoordVars = [];\n      const abCoordVars = [];\n      for (let i = 0; i < shape.length; i++) {\n        abCoordVars.push(`${currentCoords[i]}`);\n        if (i < cRank) {\n          cCoordVars.push(`${currentCoords[i]}`);\n        }\n      }\n      cCoords = cCoordVars.join();\n      abCoords = abCoordVars.join();\n    }\n\n    const dtype = getCoordsDataType(rank);\n\n    this.userCode = `\n      void main() {\n        ${dtype} resRC = getOutputCoords();\n        float cVal = getC(${cCoords});\n        if (cVal >= 1.0) {\n          setOutput(getA(${abCoords}));\n        } else {\n          setOutput(getB(${abCoords}));\n        }\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class SliceProgram implements GPGPUProgram {\n  variableNames = ['source'];\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n\n  // Caching uniform location for speed.\n  startLoc: WebGLUniformLocation;\n\n  constructor(destSize: number[]) {\n    this.outputShape = destSize;\n    this.rank = destSize.length;\n\n    const dtype = getCoordsDataType(this.rank);\n    const uniformPart = `uniform int start[${this.rank}];`;\n    const sourceCoords = getCoords(this.rank);\n\n    let body: string;\n    const coordSum = destSize.map((_, i) => {\n      return `sourceLoc.${coords[i]} = start[${i}] + coords.${coords[i]};`;\n    });\n    body = `\n        ${dtype} sourceLoc;\n        ${dtype} coords = getOutputCoords();\n        ${coordSum.join('\\n')}\n      `;\n    this.userCode = `\n      ${uniformPart}\n      void main() {\n        ${body}\n        setOutput(getSource(${sourceCoords}));\n      }\n    `;\n  }\n\n  getCustomSetupFunc(start: number[]) {\n    if (start.length !== this.rank) {\n      throw Error(\n          `The rank (${this.rank}) of the program must match the ` +\n          `length of start (${start.length})`);\n    }\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.startLoc == null) {\n        this.startLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'start');\n        if (this.startLoc == null) {\n          // This means the compiler has optimized and realized it doesn't need\n          // the uniform.\n          return;\n        }\n      }\n      gpgpu.gl.uniform1iv(this.startLoc, start);\n    };\n  }\n}\n\nconst coords = ['x', 'y', 'z', 'w', 'u', 'v'];\n\nfunction getCoords(rank: number): string {\n  if (rank === 1) {\n    return 'sourceLoc';\n  } else if (rank <= 6) {\n    return coords.slice(0, rank).map(x => 'sourceLoc.' + x).join(',');\n  } else {\n    throw Error(`Slicing for rank ${rank} is not yet supported`);\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getChannels} from '../packing_util';\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class SlicePackedProgram implements GPGPUProgram {\n  variableNames = ['source'];\n  packedInputs = true;\n  packedOutput = true;\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n\n  // Caching uniform location for speed.\n  startLoc: WebGLUniformLocation;\n\n  constructor(destSize: number[]) {\n    this.outputShape = destSize;\n    this.rank = destSize.length;\n\n    const dtype = getCoordsDataType(this.rank);\n    const coords = getChannels('coords', this.rank);\n    const sourceLoc = getChannels('sourceLoc', this.rank);\n\n    const innerDims =\n        this.rank === 1 ? 'sourceLoc' : `vec2(${sourceLoc.slice(-2).join()})`;\n    const getChannel =\n        `getChannel(getSource(${sourceLoc.join()}), ${innerDims})`;\n    const upperRow = `\n      result.x = ${getChannel};\n      if (++${coords[this.rank - 1]} < ${destSize[this.rank - 1]}) {\n        ++${sourceLoc[this.rank - 1]};\n        result.y = ${getChannel};\n        --${sourceLoc[this.rank - 1]};\n      }\n    `;\n    const lowerRow = this.rank === 1 ? '' : `\n      --${coords[this.rank - 1]};\n      if (++${coords[this.rank - 2]} < ${destSize[this.rank - 2]}) {\n        ++${sourceLoc[this.rank - 2]};\n        result.z = ${getChannel};\n        if (++${coords[this.rank - 1]} < ${destSize[this.rank - 1]}) {\n          ++${sourceLoc[this.rank - 1]};\n          result.w = ${getChannel};\n        }\n      }\n    `;\n\n    const sourceLocSetup = this.rank <= 4 ?\n        `sourceLoc = coords +\n            ${dtype}(${destSize.map((_, i) => `start[${i}]`).join()});` :\n        destSize.map((_, i) => `${sourceLoc[i]} = ${coords[i]} + start[${i}];`)\n            .join('\\n');\n    this.userCode = `\n      uniform int start[${this.rank}];\n      void main() {\n        ${dtype} coords = getOutputCoords();\n        ${dtype} sourceLoc;\n        ${sourceLocSetup}\n        vec4 result = vec4(0.);\n        ${upperRow}\n        ${lowerRow}\n        setOutput(result);\n      }\n    `;\n  }\n\n  getCustomSetupFunc(start: number[]) {\n    if (start.length !== this.rank) {\n      throw Error(\n          `The rank (${this.rank}) of the program must match the ` +\n          `length of start (${start.length})`);\n    }\n    return (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => {\n      if (this.startLoc == null) {\n        this.startLoc = gpgpu.getUniformLocationNoThrow(webGLProgram, 'start');\n        if (this.startLoc == null) {\n          // This means the compiler has optimized and realized it doesn't need\n          // the uniform.\n          return;\n        }\n      }\n      gpgpu.gl.uniform1iv(this.startLoc, start);\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class StridedSliceProgram implements GPGPUProgram {\n  variableNames = ['x'];\n  outputShape: number[];\n  userCode: string;\n\n  constructor(\n      begin: number[], strides: number[], size: number[]) {\n    this.outputShape = size;\n    const rank = size.length;\n    const inputDtype = getCoordsDataType(size.length);\n    const dtype = getCoordsDataType(size.length);\n\n    let newCoords = '';\n    if (rank === 1) {\n      newCoords = 'coords * strides + begin';\n    } else {\n      let outputAxis = 0;\n      newCoords =\n          size.map((_, i) => {\n                outputAxis++;\n                return size.length === 1 ?\n                    `coords * strides[${i}] + begin[${i}]` :\n                    `coords[${outputAxis - 1}] * strides[${i}] + begin[${i}]`;\n              })\n              .join(',');\n    }\n\n    this.userCode = `\n      ${inputDtype} begin = ${inputDtype}(${begin});\n      ${inputDtype} strides = ${inputDtype}(${strides});\n\n      void main() {\n        ${dtype} coords = getOutputCoords();\n        setOutput(getX(${newCoords}));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../environment';\n\nimport {GPGPUContext} from './gpgpu_context';\nimport {PhysicalTextureType, TextureUsage} from './tex_util';\n\nexport class TextureManager {\n  private numUsedTextures = 0;\n  private numFreeTextures = 0;\n  private freeTextures: {[shape: string]: WebGLTexture[]} = {};\n  private logEnabled = false;\n  private usedTextures: {[shape: string]: WebGLTexture[]} = {};\n\n  constructor(private gpgpu: GPGPUContext) {}\n\n  acquireTexture(\n      shapeRC: [number, number], usage: TextureUsage,\n      isPacked: boolean): WebGLTexture {\n    const physicalTexType = getPhysicalFromLogicalTextureType(usage, isPacked);\n\n    const shapeKey = getKeyFromTextureShape(shapeRC, physicalTexType, isPacked);\n    if (!(shapeKey in this.freeTextures)) {\n      this.freeTextures[shapeKey] = [];\n    }\n    if (!(shapeKey in this.usedTextures)) {\n      this.usedTextures[shapeKey] = [];\n    }\n\n    if (this.freeTextures[shapeKey].length > 0) {\n      this.numFreeTextures--;\n      this.numUsedTextures++;\n      this.log();\n      const newTexture = this.freeTextures[shapeKey].shift();\n      this.usedTextures[shapeKey].push(newTexture);\n      return newTexture;\n    }\n    this.numUsedTextures++;\n    this.log();\n\n    let newTexture: WebGLTexture;\n    if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT32) {\n      newTexture = this.gpgpu.createPackedMatrixTexture(shapeRC[0], shapeRC[1]);\n    } else if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT16) {\n      newTexture =\n          this.gpgpu.createFloat16PackedMatrixTexture(shapeRC[0], shapeRC[1]);\n    } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT32) {\n      newTexture =\n          this.gpgpu.createFloat32MatrixTexture(shapeRC[0], shapeRC[1]);\n    } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT16) {\n      newTexture =\n          this.gpgpu.createFloat16MatrixTexture(shapeRC[0], shapeRC[1]);\n\n    } else if (\n        physicalTexType === PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE) {\n      newTexture =\n          this.gpgpu.createUnsignedBytesMatrixTexture(shapeRC[0], shapeRC[1]);\n    }\n    this.usedTextures[shapeKey].push(newTexture);\n\n    return newTexture;\n  }\n\n  releaseTexture(\n      texture: WebGLTexture, shape: [number, number],\n      logicalTexType: TextureUsage, isPacked: boolean): void {\n    if (this.freeTextures == null) {\n      // Already disposed.\n      return;\n    }\n    const physicalTexType =\n        getPhysicalFromLogicalTextureType(logicalTexType, isPacked);\n    const shapeKey = getKeyFromTextureShape(shape, physicalTexType, isPacked);\n    if (!(shapeKey in this.freeTextures)) {\n      this.freeTextures[shapeKey] = [];\n    }\n    this.freeTextures[shapeKey].push(texture);\n    this.numFreeTextures++;\n    this.numUsedTextures--;\n    const texList = this.usedTextures[shapeKey];\n    const texIndex = texList.indexOf(texture);\n    if (texIndex < 0) {\n      throw new Error(\n          'Cannot release a texture that was never provided by this ' +\n          'texture manager');\n    }\n    texList.splice(texIndex, 1);\n    this.log();\n  }\n\n  private log() {\n    if (!this.logEnabled) {\n      return;\n    }\n    const total = this.numFreeTextures + this.numUsedTextures;\n    console.log(\n        'Free/Used', `${this.numFreeTextures} / ${this.numUsedTextures}`,\n        `(${total})`);\n  }\n\n  getNumUsedTextures(): number {\n    return this.numUsedTextures;\n  }\n\n  getNumFreeTextures(): number {\n    return this.numFreeTextures;\n  }\n\n  dispose() {\n    if (this.freeTextures == null) {\n      // Already disposed.\n      return;\n    }\n    for (const texShape in this.freeTextures) {\n      this.freeTextures[texShape].forEach(tex => {\n        this.gpgpu.deleteMatrixTexture(tex);\n      });\n    }\n    for (const texShape in this.usedTextures) {\n      this.usedTextures[texShape].forEach(tex => {\n        this.gpgpu.deleteMatrixTexture(tex);\n      });\n    }\n    this.freeTextures = null;\n    this.usedTextures = null;\n    this.numUsedTextures = 0;\n    this.numFreeTextures = 0;\n  }\n}\n\nfunction getPhysicalTextureForRendering(isPacked: boolean):\n    PhysicalTextureType {\n  if (env().getBool('WEBGL_RENDER_FLOAT32_ENABLED')) {\n    if (isPacked) {\n      return PhysicalTextureType.PACKED_2X2_FLOAT32;\n    }\n    return PhysicalTextureType.UNPACKED_FLOAT32;\n  }\n\n  if (isPacked) {\n    return PhysicalTextureType.PACKED_2X2_FLOAT16;\n  }\n  return PhysicalTextureType.UNPACKED_FLOAT16;\n}\n\nfunction getPhysicalFromLogicalTextureType(\n    logicalTexType: TextureUsage, isPacked: boolean): PhysicalTextureType {\n  if (logicalTexType === TextureUsage.UPLOAD) {\n    return PhysicalTextureType.PACKED_2X2_FLOAT32;\n  } else if (logicalTexType === TextureUsage.RENDER || logicalTexType == null) {\n    return getPhysicalTextureForRendering(isPacked);\n  } else if (\n      logicalTexType === TextureUsage.DOWNLOAD ||\n      logicalTexType === TextureUsage.PIXELS) {\n    return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE;\n  }\n  throw new Error(`Unknown logical texture type ${logicalTexType}`);\n}\n\nfunction getKeyFromTextureShape(\n    shapeRowsCol: [number, number], physicalTexType: PhysicalTextureType,\n    isPacked: boolean): string {\n  return `${shapeRowsCol[0]}_${shapeRowsCol[1]}_${physicalTexType}_${isPacked}`;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class TileProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n\n  constructor(aShape: number[], reps: number[]) {\n    const outputShape: number[] = new Array(aShape.length);\n    for (let i = 0; i < outputShape.length; i++) {\n      outputShape[i] = aShape[i] * reps[i];\n    }\n    this.outputShape = outputShape;\n    this.rank = outputShape.length;\n    const dtype = getCoordsDataType(this.rank);\n    const sourceCoords = getSourceCoords(aShape);\n\n    this.userCode = `\n      void main() {\n        ${dtype} resRC = getOutputCoords();\n        setOutput(getA(${sourceCoords}));\n      }\n    `;\n  }\n}\n\nfunction getSourceCoords(aShape: number[]): string {\n  const rank = aShape.length;\n  if (rank > 5) {\n    throw Error(`Tile for rank ${rank} is not yet supported`);\n  }\n  if (rank === 1) {\n    return `imod(resRC, ${aShape[0]})`;\n  }\n\n  const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w', 'resRC.u'];\n\n  const sourceCoords = [];\n  for (let i = 0; i < aShape.length; i++) {\n    sourceCoords.push(`imod(${currentCoords[i]}, ${aShape[i]})`);\n  }\n  return sourceCoords.join();\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const ERF_P = 0.3275911;\nexport const ERF_A1 = 0.254829592;\nexport const ERF_A2 = -0.284496736;\nexport const ERF_A3 = 1.421413741;\nexport const ERF_A4 = -1.453152027;\nexport const ERF_A5 = 1.061405429;\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const SELU_SCALEALPHA = 1.7580993408473768599402175208123;\nexport const SELU_SCALE = 1.0507009873554804934193349852946;\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as erf_util from '../../ops/erf_util';\nimport * as selu_util from '../../ops/selu_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport class UnaryOpProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n\n  constructor(aShape: number[], opSnippet: string) {\n    this.outputShape = aShape;\n    this.userCode = `\n      float unaryOperation(float x) {\n        ${opSnippet}\n      }\n\n      void main() {\n        float x = getAAtOutCoords();\n        float y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    `;\n  }\n}\n\nconst CHECK_NAN_SNIPPET = `if (isnan(x)) return x;`;\n\nexport const LINEAR = `return x;`;\n\nexport const ABS = `return abs(x);`;\n\nexport const RELU = CHECK_NAN_SNIPPET + `\n  return (x < 0.0) ? 0.0 : x;\n`;\n\nexport const RELU6 = CHECK_NAN_SNIPPET + `\n  return (x < 0.0) ? 0.0 : min(6.0, x);\n`;\n\nexport const ELU = `return (x >= 0.0) ? x : (exp(x) - 1.0);`;\n\nexport const SELU = `\n  // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n  // see: https://arxiv.org/abs/1706.02515\n  float scaleAlpha = ${selu_util.SELU_SCALEALPHA};\n  float scale = ${selu_util.SELU_SCALE};\n  return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`;\n\nexport function STEP(alpha = 0.0) {\n  return CHECK_NAN_SNIPPET + `\n    return x > 0.0 ? 1.0 : float(${alpha});\n  `;\n}\n\nexport const NEG = `return -x;`;\n\nexport const CEIL = `return ceil(x);`;\n\nexport const FLOOR = `return floor(x);`;\n\nexport const SIGN = `\n  if (isnan(x)) { return 0.0; }\n  return sign(x);\n`;\n\nexport const IS_NAN = `return float(isnan(x));`;\n\nexport const IS_INF = `return float(isinf(x));`;\n\nexport const IS_FINITE = `return float(!isnan(x) && !isinf(x));`;\n\nexport const ROUND = `\n  // OpenGL ES does not support round function.\n  // The algorithm is based on banker's rounding.\n  float base = floor(x);\n  if ((x - base) < 0.5) {\n    return floor(x);\n  } else if ((x - base) > 0.5) {\n    return ceil(x);\n  } else {\n    if (mod(base, 2.0) == 0.0) {\n      return base;\n    } else {\n      return base + 1.0;\n    }\n  }\n`;\n\nexport const EXP = `return exp(x);`;\n\nexport const EXPM1 = `return exp(x) - 1.0;`;\n\nexport const LOG = `if (x < 0.0) return NAN;\n  return log(x);`;\n\nexport const LOG1P = `return log(1.0 + x);`;\n\nexport const SQRT = `return sqrt(x);`;\n\nexport const RSQRT = `return inversesqrt(x);`;\n\nexport const SIGMOID = `return 1.0 / (1.0 + exp(-1.0 * x));`;\n\n/**\n * mirrors the implementation of tf.nn.softplus: https://goo.gl/vkcvwX\n *\n * epsilon is the difference between 1.0 and the next representable\n * float. For a single precision 32 bit float this should be 2^-23, see:\n * https://math.byu.edu/~schow/work/IEEEFloatingPoint.htm\n *\n * too_large = (x > -threshold) is value above which exp(x) may overflow\n * but softplus(x) == x is within machine epsilon\n *\n * too_small = (x < threshold) is value below which exp(x) may underflow,\n * but softplus(x) == exp(x) is within machine epsilon.\n */\nexport const SOFTPLUS = `\n  float epsilon = 1.1920928955078125e-7;\n  float threshold = log(epsilon) + 2.0;\n\n  bool too_large = x > -threshold;\n  bool too_small = x < threshold;\n\n  float result;\n  float exp_x = exp(x);\n\n  if (too_large){\n    result = x;\n  }\n  else if (too_small){\n    result = exp_x;\n  }\n  else{\n    result = log(exp_x + 1.0);\n  }\n  return result;\n`;\n\nexport const SIN = CHECK_NAN_SNIPPET + `\n  return sin(x);\n`;\n\nexport const COS = CHECK_NAN_SNIPPET + `\n  return cos(x);\n`;\n\nexport const TAN = `return tan(x);`;\n\nexport const ASIN = CHECK_NAN_SNIPPET + `\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return asin(x);\n`;\n\nexport const ACOS = CHECK_NAN_SNIPPET + `\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return acos(x);\n`;\n\nexport const ATAN = CHECK_NAN_SNIPPET + `\n  return atan(x);\n`;\n\nexport const SINH = `\n  float e2x = exp(x);\n  return (e2x - 1.0 / e2x) / 2.0;\n`;\n\nexport const COSH = `\n  float e2x = exp(-x);\n  return (e2x + 1.0 / e2x) / 2.0;\n`;\n\nexport const TANH = `\n  float e2x = exp(-2.0 * abs(x));\n  return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`;\n\nexport const ASINH = CHECK_NAN_SNIPPET + `return log(x + sqrt(x * x + 1.0));`;\n\nexport const ACOSH = CHECK_NAN_SNIPPET + `\n  if (x < 1.0) return NAN;\n  return log(x + sqrt(x * x - 1.0));`;\n\nexport const ATANH = CHECK_NAN_SNIPPET + `\n  if ((x < -1.0) || (x > 1.0)) return NAN;\n  return (log(1.0 + x) - log(1.0 - x)) / 2.0;`;\n\nexport const ERF = `\n  // Error function is calculated approximately with elementary function.\n  // See \"Handbook of Mathematical Functions with Formulas,\n  // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n  float p = ${erf_util.ERF_P};\n  float a1 = ${erf_util.ERF_A1};\n  float a2 = ${erf_util.ERF_A2};\n  float a3 = ${erf_util.ERF_A3};\n  float a4 = ${erf_util.ERF_A4};\n  float a5 = ${erf_util.ERF_A5};\n\n  float sign = sign(x);\n  x = abs(x);\n  float t = 1.0 / (1.0 + p * x);\n  return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`;\n\nexport const SQUARE = `return x * x;`;\n\nexport const RECIPROCAL = `return 1.0 / x;`;\n\nexport const LOGICAL_NOT = `return float(!(x >= 1.0));`;\n\nexport const TO_INT = `return float(int(x));`;\n\nexport const CLONE = 'return x;';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\n\nexport const LINEAR = `return x;`;\n\nexport const LOG = `\n  vec4 result = log(x);\n  vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n  result.r = isNaN.r == 1.0 ? NAN : result.r;\n  result.g = isNaN.g == 1.0 ? NAN : result.g;\n  result.b = isNaN.b == 1.0 ? NAN : result.b;\n  result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n  return result;\n`;\n\nexport const RELU = `\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n`;\n\nexport const RELU6 = `\n  vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n`;\n\nexport const ELU = `\n  vec4 result;\n\n  result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n  result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n  result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n  result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n  return result;\n`;\n\nexport class UnaryOpPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(aShape: number[], opSnippet: string) {\n    this.outputShape = aShape;\n    this.userCode = `\n      vec4 unaryOperation(vec4 x) {\n        ${opSnippet}\n      }\n\n      void main() {\n        vec4 x = getAAtOutCoords();\n        vec4 y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getChannels, getSourceCoords} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class UnpackProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  packedInputs = true;\n  packedOutput = false;\n  outputShape: number[];\n  userCode: string;\n\n  constructor(outputShape: number[]) {\n    this.outputShape = outputShape;\n    const rank = outputShape.length;\n\n    const channels = getChannels('rc', rank);\n    const dtype = getCoordsDataType(rank);\n    const sourceCoords = getSourceCoords(rank, channels);\n    const innerDims = channels.slice(-2);\n    const coords = rank <= 1 ? 'rc' : `vec2(${innerDims.join(',')})`;\n\n    this.userCode = `\n      void main() {\n        ${dtype} rc = getOutputCoords();\n        vec4 packedInput = getA(${sourceCoords});\n\n        setOutput(getChannel(packedInput, ${coords}));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n// Import webgl flags.\nimport './flags_webgl';\n\nimport * as device_util from '../../device_util';\nimport {ENGINE, MemoryInfo, TimingInfo} from '../../engine';\nimport {env} from '../../environment';\nimport {tidy} from '../../globals';\nimport {TensorInfo} from '../../kernel_registry';\nimport {warn} from '../../log';\nimport {buffer} from '../../ops/array_ops';\nimport * as array_ops_util from '../../ops/array_ops_util';\nimport * as axis_util from '../../ops/axis_util';\nimport {complex, imag, real} from '../../ops/complex_ops';\nimport {computeOutShape} from '../../ops/concat_util';\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\nimport {div} from '../../ops/div';\nimport {Activation, FusedBatchMatMulConfig, FusedConv2DConfig} from '../../ops/fused_util';\nimport * as gather_nd_util from '../../ops/gather_nd_util';\nimport * as reduce_util from '../../ops/reduce_util';\nimport * as scatter_nd_util from '../../ops/scatter_nd_util';\nimport * as segment_util from '../../ops/segment_util';\nimport * as slice_util from '../../ops/slice_util';\nimport {softmax} from '../../ops/softmax';\nimport {range, scalar, tensor} from '../../ops/tensor_ops';\nimport {transpose} from '../../ops/transpose';\nimport {DataId, Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D} from '../../tensor';\nimport {BackendValues, DataType, DataTypeMap, NumericDataType, Rank, RecursiveArray, ShapeMap, sumOutType, TypedArray, upcastType} from '../../types';\nimport * as util from '../../util';\nimport {getArrayFromDType, getTypedArrayFromDType, inferDtype, sizeFromShape} from '../../util';\nimport {DataStorage, EPSILON_FLOAT16, EPSILON_FLOAT32, KernelBackend} from '../backend';\nimport * as backend_util from '../backend_util';\nimport {mergeRealAndImagArrays} from '../complex_util';\nimport {nonMaxSuppressionV3} from '../non_max_suppression_impl';\nimport {split} from '../split_shared';\nimport {tile} from '../tile_impl';\nimport {topkImpl} from '../topk_impl';\nimport {whereImpl} from '../where_impl';\n\nimport {AddNProgram} from './addn_gpu';\nimport {AddNPackedProgram} from './addn_packed_gpu';\nimport {ArgMinMaxProgram} from './argminmax_gpu';\nimport {ArgMinMaxPackedProgram} from './argminmax_packed_gpu';\nimport {AvgPool2DBackpropProgram, AvgPool3DBackpropProgram} from './avg_pool_backprop_gpu';\nimport {BatchNormProgram} from './batchnorm_gpu';\nimport {BatchNormPackedProgram} from './batchnorm_packed_gpu';\nimport * as binaryop_complex_gpu from './binaryop_complex_gpu';\nimport {BinaryOpComplexProgram} from './binaryop_complex_gpu';\nimport * as binaryop_gpu from './binaryop_gpu';\nimport {BinaryOpProgram} from './binaryop_gpu';\nimport * as binaryop_packed_gpu from './binaryop_packed_gpu';\nimport {BinaryOpPackedProgram} from './binaryop_packed_gpu';\nimport {getWebGLContext} from './canvas_util';\nimport {ClipProgram} from './clip_gpu';\nimport {ClipPackedProgram} from './clip_packed_gpu';\nimport {ComplexAbsProgram} from './complex_abs_gpu';\nimport {ConcatProgram} from './concat_gpu';\nimport {ConcatPackedProgram} from './concat_packed_gpu';\nimport {Conv2DDerFilterProgram, Conv2DDerInputProgram, Conv3DDerFilterProgram, Conv3DDerInputProgram} from './conv_backprop_gpu';\nimport {DepthwiseConv2DDerFilterProgram, DepthwiseConv2DDerInputProgram} from './conv_backprop_gpu_depthwise';\nimport {Conv2DProgram, Conv3DProgram} from './conv_gpu';\nimport {DepthwiseConv2DProgram} from './conv_gpu_depthwise';\nimport {DepthwiseConvPacked2DProgram} from './conv_packed_gpu_depthwise';\nimport {CropAndResizeProgram} from './crop_and_resize_gpu';\nimport {CumSumProgram} from './cumsum_gpu';\nimport {DecodeMatrixProgram} from './decode_matrix_gpu';\nimport {DecodeMatrixPackedProgram} from './decode_matrix_packed_gpu';\nimport {DepthToSpaceProgram} from './depth_to_space_gpu';\nimport {DiagProgram} from './diag_gpu';\nimport {EncodeFloatProgram} from './encode_float_gpu';\nimport {EncodeFloatPackedProgram} from './encode_float_packed_gpu';\nimport {EncodeMatrixProgram} from './encode_matrix_gpu';\nimport {EncodeMatrixPackedProgram} from './encode_matrix_packed_gpu';\nimport * as fft_gpu from './fft_gpu';\nimport {FFTProgram} from './fft_gpu';\nimport {FillProgram} from './fill_gpu';\nimport {GatherProgram} from './gather_gpu';\nimport {GatherNDProgram} from './gather_nd_gpu';\nimport {GPGPUContext} from './gpgpu_context';\nimport * as gpgpu_math from './gpgpu_math';\nimport {GPGPUBinary, GPGPUProgram, TensorData} from './gpgpu_math';\nimport {Im2ColPackedProgram} from './im2col_packed_gpu';\nimport {LRNProgram} from './lrn_gpu';\nimport {LRNGradProgram} from './lrn_grad_gpu';\nimport {LRNPackedProgram} from './lrn_packed_gpu';\nimport {MaxPool2DBackpropProgram, MaxPool3DBackpropProgram} from './max_pool_backprop_gpu';\nimport {MatMulPackedProgram} from './mulmat_packed_gpu';\nimport {MultinomialProgram} from './multinomial_gpu';\nimport {OneHotProgram} from './onehot_gpu';\nimport {PackProgram} from './pack_gpu';\nimport {PadProgram} from './pad_gpu';\nimport {PadPackedProgram} from './pad_packed_gpu';\nimport {Pool2DProgram, Pool3DProgram} from './pool_gpu';\nimport {ReduceProgram} from './reduce_gpu';\nimport {ReshapePackedProgram} from './reshape_packed_gpu';\nimport {ResizeBilinearBackpropProgram} from './resize_bilinear_backprop_gpu';\nimport {ResizeBilinearProgram} from './resize_bilinear_gpu';\nimport {ResizeBilinearPackedProgram} from './resize_bilinear_packed_gpu';\nimport {ResizeNearestNeigborBackpropProgram} from './resize_nearest_neighbor_backprop_gpu';\nimport {ResizeNearestNeighborProgram} from './resize_nearest_neighbor_gpu';\nimport {ReverseProgram} from './reverse_gpu';\nimport {ReversePackedProgram} from './reverse_packed_gpu';\nimport {ScatterProgram} from './scatter_gpu';\nimport {SegmentOpProgram} from './segment_gpu';\nimport {SelectProgram} from './select_gpu';\nimport {SliceProgram} from './slice_gpu';\nimport {SlicePackedProgram} from './slice_packed_gpu';\nimport {StridedSliceProgram} from './strided_slice_gpu';\nimport * as tex_util from './tex_util';\nimport {TextureData, TextureUsage} from './tex_util';\nimport {TextureManager} from './texture_manager';\nimport {TileProgram} from './tile_gpu';\nimport * as unary_op from './unaryop_gpu';\nimport {UnaryOpProgram} from './unaryop_gpu';\nimport * as unary_packed_op from './unaryop_packed_gpu';\nimport {UnaryOpPackedProgram} from './unaryop_packed_gpu';\nimport {UnpackProgram} from './unpack_gpu';\nimport * as webgl_util from './webgl_util';\n\ntype KernelInfo = {\n  name: string; query: Promise<number>;\n};\n\nexport type TimerNode = RecursiveArray<KernelInfo>|KernelInfo;\nexport interface CPUTimerQuery {\n  startMs: number;\n  endMs?: number;\n}\n\nexport interface WebGLMemoryInfo extends MemoryInfo {\n  numBytesInGPU: number;\n  unreliable: boolean;\n}\n\nexport interface WebGLTimingInfo extends TimingInfo {\n  uploadWaitMs: number;\n  downloadWaitMs: number;\n}\n\nconst binaryCaches: {[webGLVersion: string]: {[key: string]: GPGPUBinary}} = {};\n\nexport function getBinaryCache(webGLVersion: number) {\n  if (webGLVersion in binaryCaches) {\n    return binaryCaches[webGLVersion];\n  }\n  binaryCaches[webGLVersion] = {};\n  return binaryCaches[webGLVersion];\n}\n\nfunction mapActivationToShaderProgram(\n    activation: Activation, packed = false): string {\n  if (activation === 'linear') {\n    if (packed) {\n      return unary_packed_op.LINEAR;\n    }\n    return unary_op.LINEAR;\n  } else if (activation === 'relu') {\n    if (packed) {\n      return unary_packed_op.RELU;\n    }\n    return unary_op.RELU;\n  } else if (activation === 'elu') {\n    if (packed) {\n      return unary_packed_op.ELU;\n    }\n    return unary_op.ELU;\n  } else if (activation === 'relu6') {\n    if (packed) {\n      return unary_packed_op.RELU6;\n    }\n    return unary_op.RELU6;\n  } else if (activation === 'prelu') {\n    if (packed) {\n      return binaryop_packed_gpu.PRELU;\n    }\n    return binaryop_gpu.PRELU;\n  }\n  throw new Error(`Activation ${\n      activation} has not been implemented for the WebGL backend.`);\n}\n\n// Empirically determined constant used to determine size threshold for handing\n// off execution to the CPU.\nconst CPU_HANDOFF_SIZE_THRESHOLD = 128;\n\n// Empirically determined constant used to decide the number of MB on GPU\n// before we warn about high memory use. The MB are this constant * screen area\n// * dpi / 1024 / 1024.\nconst BEFORE_PAGING_CONSTANT = 600;\nfunction numMBBeforeWarning(): number {\n  if (env().global.screen == null) {\n    return 1024;  // 1 GB.\n  }\n  return (env().global.screen.height * env().global.screen.width *\n          window.devicePixelRatio) *\n      BEFORE_PAGING_CONSTANT / 1024 / 1024;\n}\n\n// Empirically determined minimal shared dimension in matmul before we forward\n// to a.mul(b).sum() in order to take advantage of GPU parallelism. See\n// https://github.com/tensorflow/tfjs-core/pull/1379 for benchmarks.\nexport const MATMUL_SHARED_DIM_THRESHOLD = 1000;\n\nexport class MathBackendWebGL extends KernelBackend {\n  texData: DataStorage<TextureData>;\n  gpgpu: GPGPUContext;\n\n  // Maps data ids that have a pending read operation, to list of subscribers.\n  private pendingRead = new WeakMap<DataId, Array<(arr: TypedArray) => void>>();\n  // List of data ids that are scheduled for disposal, but are waiting on a\n  // pending read operation.\n  private pendingDisposal = new WeakSet<DataId>();\n  // Used to count the number of 'shallow' sliced tensors that point to the\n  // same data id.\n  private dataRefCount = new WeakMap<DataId, number>();\n  private numBytesInGPU = 0;\n\n  private canvas: HTMLCanvasElement|OffscreenCanvas;\n\n  private programTimersStack: TimerNode[];\n  private activeTimers: TimerNode[];\n  // Accumulated time spent (including blocking) in uploading data to webgl.\n  private uploadWaitMs = 0;\n  // Accumulated time spent (including blocking in downloading data from webgl.\n  private downloadWaitMs = 0;\n  private cpuBackend: KernelBackend;\n\n  // Number of bits of precision of this backend.\n  private floatPrecisionValue: 32|16;\n\n  private textureManager: TextureManager;\n  private binaryCache: {[key: string]: GPGPUBinary};\n  private gpgpuCreatedLocally: boolean;\n  private numMBBeforeWarning: number;\n  private warnedAboutMemory = false;\n\n  constructor(gpgpu?: GPGPUContext) {\n    super();\n    if (!env().getBool('HAS_WEBGL')) {\n      throw new Error('WebGL is not supported on this device');\n    }\n\n    if (gpgpu == null) {\n      const gl = getWebGLContext(env().getNumber('WEBGL_VERSION'));\n      this.binaryCache = getBinaryCache(env().getNumber('WEBGL_VERSION'));\n      this.gpgpu = new GPGPUContext(gl);\n      this.canvas = gl.canvas;\n      this.gpgpuCreatedLocally = true;\n    } else {\n      this.gpgpu = gpgpu;\n      this.binaryCache = {};\n      this.gpgpuCreatedLocally = false;\n      this.canvas = gpgpu.gl.canvas;\n    }\n    this.textureManager = new TextureManager(this.gpgpu);\n    this.numMBBeforeWarning = numMBBeforeWarning();\n\n    this.texData = new DataStorage(this, ENGINE);\n  }\n\n  numDataIds() {\n    return this.texData.numDataIds() +\n        (this.cpuBackend ? this.cpuBackend.numDataIds() : 0) -\n        this.pendingDeletes;\n  }\n\n  write(values: BackendValues, shape: number[], dtype: DataType): DataId {\n    if (env().getBool('DEBUG')) {\n      this.checkNumericalProblems(values);\n    }\n    if (dtype === 'complex64' && values != null) {\n      throw new Error(\n          `Cannot write to a complex64 dtype. ` +\n          `Please use tf.complex(real, imag).`);\n    }\n    const dataId = {};\n    this.texData.set(\n        dataId, {shape, dtype, values, usage: TextureUsage.UPLOAD});\n    return dataId;\n  }\n\n  move(dataId: DataId, values: BackendValues, shape: number[], dtype: DataType):\n      void {\n    if (env().getBool('DEBUG')) {\n      this.checkNumericalProblems(values);\n    }\n    if (dtype === 'complex64') {\n      throw new Error(\n          `Cannot write to a complex64 dtype. ` +\n          `Please use tf.complex(real, imag).`);\n    }\n    this.texData.set(\n        dataId, {shape, dtype, values, usage: TextureUsage.UPLOAD});\n  }\n\n  readSync(dataId: DataId): BackendValues {\n    const texData = this.texData.get(dataId);\n    const {values, dtype, complexTensors, slice, shape, isPacked} = texData;\n    if (slice != null) {\n      let program;\n      if (isPacked) {\n        program = new UnaryOpPackedProgram(shape, unary_op.CLONE);\n      } else {\n        program = new UnaryOpProgram(shape, unary_op.CLONE);\n      }\n      const res =\n          this.runWebGLProgram(program, [{dataId, shape, dtype}], dtype);\n      const data = this.readSync(res.dataId);\n      this.disposeData(res.dataId);\n      return data;\n    }\n    if (values != null) {\n      return this.convertAndCacheOnCPU(dataId);\n    }\n    if (dtype === 'string') {\n      return values;\n    }\n    const shouldTimeProgram = this.activeTimers != null;\n    let start: number;\n    if (shouldTimeProgram) {\n      start = util.now();\n    }\n\n    let result: Float32Array;\n    if (dtype === 'complex64') {\n      const realValues = complexTensors.real.dataSync() as Float32Array;\n      const imagValues = complexTensors.imag.dataSync() as Float32Array;\n      result = mergeRealAndImagArrays(realValues, imagValues);\n    } else {\n      result = this.getValuesFromTexture(dataId);\n    }\n\n    if (shouldTimeProgram) {\n      this.downloadWaitMs += util.now() - start;\n    }\n    return this.convertAndCacheOnCPU(dataId, result);\n  }\n\n  async read(dataId: DataId): Promise<BackendValues> {\n    if (this.pendingRead.has(dataId)) {\n      const subscribers = this.pendingRead.get(dataId);\n      return new Promise<TypedArray>(resolve => subscribers.push(resolve));\n    }\n    const texData = this.texData.get(dataId);\n    const {values, shape, slice, dtype, complexTensors, isPacked} = texData;\n\n    if (slice != null) {\n      let program;\n      if (isPacked) {\n        program = new UnaryOpPackedProgram(shape, unary_op.CLONE);\n      } else {\n        program = new UnaryOpProgram(shape, unary_op.CLONE);\n      }\n      const res =\n          this.runWebGLProgram(program, [{dataId, shape, dtype}], dtype);\n      const data = this.read(res.dataId);\n      this.disposeData(res.dataId);\n      return data;\n    }\n\n    if (values != null) {\n      return this.convertAndCacheOnCPU(dataId);\n    }\n\n    if (!env().getBool('WEBGL_DOWNLOAD_FLOAT_ENABLED') &&\n        env().getNumber('WEBGL_VERSION') === 2) {\n      throw new Error(\n          `tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and ` +\n          `WEBGL_VERSION=2 not yet supported.`);\n    }\n\n    let buffer = null;\n    let tmpDownloadTarget: TensorInfo;\n\n    if (dtype !== 'complex64' && env().get('WEBGL_BUFFER_SUPPORTED')) {\n      // Possibly copy the texture into a buffer before inserting a fence.\n      tmpDownloadTarget = this.decode(dataId);\n      const tmpData = this.texData.get(tmpDownloadTarget.dataId);\n\n      buffer = this.gpgpu.createBufferFromTexture(\n          tmpData.texture, ...tex_util.getDenseTexShape(shape));\n    }\n\n    this.pendingRead.set(dataId, []);\n\n    if (dtype !== 'complex64') {\n      // Create a fence and wait for it to resolve.\n      await this.gpgpu.createAndWaitForFence();\n    }\n\n    // Download the values from the GPU.\n    let vals: Float32Array;\n    if (dtype === 'complex64') {\n      const ps = await Promise.all(\n          [complexTensors.real.data(), complexTensors.imag.data()]);\n      const realValues = ps[0];\n      const imagValues = ps[1];\n      vals = mergeRealAndImagArrays(\n          realValues as Float32Array, imagValues as Float32Array);\n    } else if (buffer == null) {\n      vals = this.getValuesFromTexture(dataId);\n    } else {\n      const size = util.sizeFromShape(shape);\n      vals = this.gpgpu.downloadFloat32MatrixFromBuffer(buffer, size);\n    }\n    if (tmpDownloadTarget != null) {\n      this.disposeData(tmpDownloadTarget.dataId);\n    }\n    const dTypeVals = this.convertAndCacheOnCPU(dataId, vals);\n\n    const subscribers = this.pendingRead.get(dataId);\n    this.pendingRead.delete(dataId);\n\n    // Notify all pending reads.\n    subscribers.forEach(resolve => resolve(dTypeVals));\n    if (this.pendingDisposal.has(dataId)) {\n      this.pendingDisposal.delete(dataId);\n      this.disposeData(dataId);\n      this.pendingDeletes--;\n    }\n    return dTypeVals;\n  }\n\n  private checkNumericalProblems(values: BackendValues): void {\n    if (values == null) {\n      return;\n    }\n    for (let i = 0; i < values.length; i++) {\n      const num = values[i] as number;\n      if (!webgl_util.canBeRepresented(num)) {\n        if (env().getBool('WEBGL_RENDER_FLOAT32_CAPABLE')) {\n          throw Error(\n              `The value ${num} cannot be represented with your ` +\n              `current settings. Consider enabling float32 rendering: ` +\n              `'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`);\n        }\n        throw Error(`The value ${num} cannot be represented on this device.`);\n      }\n    }\n  }\n\n  private getValuesFromTexture(dataId: DataId): Float32Array {\n    const {shape, dtype, isPacked} = this.texData.get(dataId);\n    const size = util.sizeFromShape(shape);\n    if (env().getBool('WEBGL_DOWNLOAD_FLOAT_ENABLED')) {\n      const tmpTarget = this.decode(dataId);\n      const tmpData = this.texData.get(tmpTarget.dataId);\n      const vals = this.gpgpu\n                       .downloadMatrixFromPackedTexture(\n                           tmpData.texture, ...tex_util.getDenseTexShape(shape))\n                       .subarray(0, size);\n\n      this.disposeData(tmpTarget.dataId);\n\n      return vals;\n    }\n\n    const shouldUsePackedProgram =\n        env().getBool('WEBGL_PACK') && isPacked === true;\n    const outputShape =\n        shouldUsePackedProgram ? webgl_util.getShapeAs3D(shape) : shape;\n    const program = shouldUsePackedProgram ?\n        new EncodeFloatPackedProgram(outputShape as [number, number, number]) :\n        new EncodeFloatProgram(outputShape);\n    const output = this.runWebGLProgram(\n        program, [{shape: outputShape, dtype, dataId}], 'float32');\n    const tmpData = this.texData.get(output.dataId);\n    const vals =\n        this.gpgpu\n            .downloadByteEncodedFloatMatrixFromOutputTexture(\n                tmpData.texture, tmpData.texShape[0], tmpData.texShape[1])\n            .subarray(0, size);\n    this.disposeData(output.dataId);\n\n    return vals;\n  }\n\n  async time(f: () => void): Promise<WebGLTimingInfo> {\n    const oldActiveTimers = this.activeTimers;\n    const newActiveTimers: TimerNode[] = [];\n\n    let outerMostTime = false;\n    if (this.programTimersStack == null) {\n      this.programTimersStack = newActiveTimers;\n      outerMostTime = true;\n    } else {\n      this.activeTimers.push(newActiveTimers);\n    }\n    this.activeTimers = newActiveTimers;\n\n    f();\n\n    // needing to split these up because util.flatten only accepts certain types\n    const flattenedActiveTimerQueries =\n        util.flatten(this.activeTimers.map((d: KernelInfo) => d.query))\n            .filter(d => d != null);\n    const flattenedActiveTimerNames =\n        util.flatten(this.activeTimers.map((d: KernelInfo) => d.name))\n            .filter(d => d != null);\n\n    this.activeTimers = oldActiveTimers;\n\n    if (outerMostTime) {\n      this.programTimersStack = null;\n    }\n\n    const res: WebGLTimingInfo = {\n      uploadWaitMs: this.uploadWaitMs,\n      downloadWaitMs: this.downloadWaitMs,\n      kernelMs: null,\n      wallMs: null  // will be filled by the engine\n    };\n\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n      const kernelMs = await Promise.all(flattenedActiveTimerQueries);\n\n      res['kernelMs'] = util.sum(kernelMs);\n      res['getExtraProfileInfo'] = () =>\n          kernelMs.map((d, i) => ({name: flattenedActiveTimerNames[i], ms: d}))\n              .map(d => `${d.name}: ${d.ms}`)\n              .join(', ');\n    } else {\n      res['kernelMs'] = {\n        error: 'WebGL query timers are not supported in this environment.'\n      };\n    }\n\n    this.uploadWaitMs = 0;\n    this.downloadWaitMs = 0;\n    return res;\n  }\n  memory(): WebGLMemoryInfo {\n    return {unreliable: false, numBytesInGPU: this.numBytesInGPU} as\n        WebGLMemoryInfo;\n  }\n\n  private startTimer(): WebGLQuery|CPUTimerQuery {\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n      return this.gpgpu.beginQuery();\n    }\n    return {startMs: util.now(), endMs: null};\n  }\n\n  private endTimer(query: WebGLQuery|CPUTimerQuery): WebGLQuery|CPUTimerQuery {\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n      this.gpgpu.endQuery();\n      return query;\n    }\n    (query as CPUTimerQuery).endMs = util.now();\n    return query;\n  }\n\n  private async getQueryTime(query: WebGLQuery|CPUTimerQuery): Promise<number> {\n    if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n      return this.gpgpu.waitForQueryAndGetTime(query as WebGLQuery);\n    }\n    const timerQuery = query as CPUTimerQuery;\n    return timerQuery.endMs - timerQuery.startMs;\n  }\n\n  private pendingDeletes = 0;\n\n  disposeData(dataId: DataId): void {\n    if (this.pendingDisposal.has(dataId)) {\n      return;\n    }\n    if (this.pendingRead.has(dataId)) {\n      this.pendingDisposal.add(dataId);\n      this.pendingDeletes++;\n      return;\n    }\n    // No-op if already disposed.\n    if (!this.texData.has(dataId)) {\n      return;\n    }\n\n    this.releaseGPUData(dataId);\n    const {complexTensors} = this.texData.get(dataId);\n    if (complexTensors != null) {\n      complexTensors.real.dispose();\n      complexTensors.imag.dispose();\n    }\n    this.texData.delete(dataId);\n  }\n\n  private releaseGPUData(dataId: DataId): void {\n    const {texture, dtype, texShape, usage, isPacked, slice} =\n        this.texData.get(dataId);\n    const key = slice && slice.origDataId || dataId;\n    const refCount = this.dataRefCount.get(key);\n    if (refCount > 1) {\n      this.dataRefCount.set(key, refCount - 1);\n    } else {\n      this.dataRefCount.delete(key);\n      if (texture != null) {\n        this.numBytesInGPU -= this.computeBytes(texShape, dtype);\n        this.textureManager.releaseTexture(texture, texShape, usage, isPacked);\n      }\n    }\n    const texData = this.texData.get(dataId);\n    texData.texture = null;\n    texData.texShape = null;\n    texData.isPacked = false;\n    texData.slice = null;\n  }\n\n  getTexture(dataId: DataId): WebGLTexture {\n    this.uploadToGPU(dataId);\n    return this.texData.get(dataId).texture;\n  }\n\n  /**\n   * Returns internal information for the specific data bucket. Used in unit\n   * tests.\n   */\n  getDataInfo(dataId: DataId): TextureData {\n    return this.texData.get(dataId);\n  }\n\n  private getCPUBackend(): KernelBackend|null {\n    if (!env().getBool('WEBGL_CPU_FORWARD')) {\n      return null;\n    }\n\n    if (this.cpuBackend == null) {\n      this.cpuBackend = ENGINE.findBackend('cpu');\n    }\n\n    return this.cpuBackend;\n  }\n\n  /*\n  Tests whether all the inputs to an op are small and on the CPU. This heuristic\n  determines when it would be faster to execute a kernel on the CPU. WebGL\n  kernels opt into running this check and forwarding when appropriate.\n  TODO(https://github.com/tensorflow/tfjs/issues/872): Develop a more\n  sustainable strategy for optimizing backend execution of ops.\n   */\n  shouldExecuteOnCPU(\n      inputs: TensorInfo[],\n      sizeThreshold = CPU_HANDOFF_SIZE_THRESHOLD): boolean {\n    return this.getCPUBackend() != null &&\n        inputs.every(\n            input => this.texData.get(input.dataId).texture == null &&\n                util.sizeFromShape(input.shape) < sizeThreshold);\n  }\n\n  getGPGPUContext(): GPGPUContext {\n    return this.gpgpu;\n  }\n\n  complex<T extends Tensor>(real: T, imag: T): T {\n    const result = this.makeOutput(real.shape, 'complex64');\n    const resultData = this.texData.get(result.dataId);\n    // The backend owns the reference to the underlying real and imaginary\n    // clones. These will explicitly get disposed when the complex tensor is\n    // disposed.\n    resultData.complexTensors = {\n      real: ENGINE.keep(real.clone()),\n      imag: ENGINE.keep(imag.clone())\n    };\n\n    return result as T;\n  }\n  real<T extends Tensor>(input: T): T {\n    const resultData = this.texData.get(input.dataId);\n    return resultData.complexTensors.real.clone() as T;\n  }\n  imag<T extends Tensor>(input: T): T {\n    const resultData = this.texData.get(input.dataId);\n    return resultData.complexTensors.imag.clone() as T;\n  }\n\n  slice<T extends Tensor>(x: T, begin: number[], size: number[]): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.slice(x, begin, size);\n    }\n    // Short-circuit computation if the slice is zero-sized.\n    if (util.sizeFromShape(size) === 0) {\n      return tensor([], size, x.dtype) as T;\n    }\n    const {isPacked} = this.texData.get(x.dataId);\n    const isContinous = slice_util.isSliceContinous(x.shape, begin, size);\n    if (isPacked || !isContinous) {\n      const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n          new SlicePackedProgram(size) :\n          new SliceProgram(size);\n      const customSetup = program.getCustomSetupFunc(begin);\n      return this.compileAndRun(program, [x], null, customSetup);\n    }\n    this.uploadToGPU(x.dataId);\n    return this.shallowSlice(x, begin, size) as T;\n  }\n\n  private shallowSlice(x: Tensor, begin: number[], size: number[]): Tensor {\n    const xTexData = this.texData.get(x.dataId);\n    const t = this.makeOutput(size, x.dtype);\n    const newTexData = this.texData.get(t.dataId);\n    // Copy texture data from the original tensor.\n    Object.assign(newTexData, xTexData);\n    newTexData.shape = size;\n    newTexData.dtype = x.dtype;\n    let flatOffset = slice_util.computeFlatOffset(begin, x.strides);\n    if (xTexData.slice) {\n      // We are slicing an already sliced tensor, so we have to accumulate\n      // the offset.\n      flatOffset += xTexData.slice.flatOffset;\n    }\n    newTexData.slice = {\n      flatOffset,\n      // Point to the original dataId, which is used to do ref counting.\n      origDataId: xTexData.slice && xTexData.slice.origDataId || x.dataId\n    };\n\n    // Increase the ref count for that data bucket.\n    const refCount = this.dataRefCount.get(newTexData.slice.origDataId) || 1;\n    this.dataRefCount.set(newTexData.slice.origDataId, refCount + 1);\n\n    return t;\n  }\n\n  stridedSlice<T extends Tensor>(\n      x: T, begin: number[], end: number[], strides: number[]): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.stridedSlice(x, begin, end, strides);\n    }\n\n    const outShape = slice_util.computeOutShape(begin, end, strides);\n\n    if (outShape.some(axis => axis === 0)) {\n      return tensor([], outShape) as T;\n    }\n\n    const program = new StridedSliceProgram(begin, strides, outShape);\n    return this.compileAndRun(program, [x]);\n  }\n\n  reverse<T extends Tensor>(x: T, axis: number[]): T {\n    const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n        new ReversePackedProgram(x.shape, axis) :\n        new ReverseProgram(x.shape, axis);\n    return this.compileAndRun(program, [x]);\n  }\n\n  concat(tensors: Tensor[], axis: number): Tensor {\n    if (tensors[0].dtype === 'complex64') {\n      const reals = tensors.map((t) => real(t));\n      const imags = tensors.map((t) => imag(t));\n      return complex(this.concat(reals, axis), this.concat(imags, axis));\n    }\n    if (this.shouldExecuteOnCPU(tensors)) {\n      return this.cpuBackend.concat(tensors, axis);\n    }\n\n    if (tensors.length === 1) {\n      return tensors[0];\n    }\n    if (tensors.length > env().getNumber('WEBGL_MAX_TEXTURES_IN_SHADER')) {\n      const midIndex = Math.floor(tensors.length / 2);\n      const leftSide = this.concat(tensors.slice(0, midIndex), axis);\n      const rightSide = this.concat(tensors.slice(midIndex), axis);\n      return this.concat([leftSide, rightSide], axis);\n    }\n    if (env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') && tensors[0].rank > 1) {\n      const program = new ConcatPackedProgram(tensors.map(t => t.shape), axis);\n      return this.compileAndRun(program, tensors);\n    }\n    // Any concat of n-dimensional tensors across any axis can be reduced to\n    // a concatenation of two-dimensional tensors across the axis 1 by first\n    // partitioning the axes of the original tensors into those less than the\n    // axis to be concatenated and the rest. Then reshape the tensors\n    // into a two-dimensional tensor by collapsing these two sets of axes and\n    // concatenate the resulting matrices across the axis 1, finally reshaping\n    // the result to have the proper shape.\n    const outShape = computeOutShape(tensors.map(t => t.shape), axis);\n    const tensors2D =\n        tensors.map(t => t.as2D(-1, sizeFromShape(t.shape.slice(axis))));\n    const program = new ConcatProgram(tensors2D.map(t => t.shape));\n    const res: Tensor = this.compileAndRun(program, tensors2D);\n    return res.reshape(outShape);\n  }\n\n  neg<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.neg(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.NEG, x.dtype) as T;\n    }\n    const program = new UnaryOpProgram(x.shape, unary_op.NEG);\n    return this.compileAndRun(program, [x]);\n  }\n\n  batchMatMul(\n      a: Tensor3D, b: Tensor3D, transposeA: boolean,\n      transposeB: boolean): Tensor3D {\n    const outerShapeA = transposeA ? a.shape[2] : a.shape[1];\n    const outerShapeB = transposeB ? b.shape[1] : b.shape[2];\n    const sharedDim = transposeA ? a.shape[1] : a.shape[2];\n    const [batch, , ] = a.shape;\n\n    // Since the matrices are vectors, it is faster to call mul().sum()\n    // because sum() is O(sqrt(N)) due to divide-and-conquer.\n    if ((outerShapeA === 1 || outerShapeB === 1) &&\n        sharedDim > MATMUL_SHARED_DIM_THRESHOLD) {\n      if (transposeA) {\n        a = transpose(a, [0, 2, 1]);\n      }\n      if (transposeB) {\n        b = transpose(b, [0, 2, 1]);\n      }\n\n      const a3D = outerShapeB === 1 ? a : a.as3D(batch, sharedDim, 1);\n      const axis = outerShapeB === 1 ? 2 : 1;\n      const b3D = outerShapeB === 1 ? b.as3D(batch, 1, sharedDim) : b;\n      return this.multiply(a3D, b3D).sum(axis, true /* keepDims */);\n    }\n\n    const dtype = upcastType(a.dtype, b.dtype);\n\n    const program = new MatMulPackedProgram(\n        a.shape, [batch, outerShapeA, outerShapeB], transposeA, transposeB);\n    return this.compileAndRun<Tensor3D>(program, [a, b], dtype);\n  }\n\n  fusedBatchMatMul(\n      {a, b, transposeA, transposeB, bias, activation, preluActivationWeights}:\n          FusedBatchMatMulConfig): Tensor3D {\n    const outerShapeA = transposeA ? a.shape[2] : a.shape[1];\n    const outerShapeB = transposeB ? b.shape[1] : b.shape[2];\n    const [batch, , ] = a.shape;\n\n    const dtype = upcastType(a.dtype, b.dtype);\n\n    const hasBias = bias != null;\n    const hasPreluActivationWeights = preluActivationWeights != null;\n    const fusedActivation =\n        activation ? mapActivationToShaderProgram(activation, true) : null;\n    const program = new MatMulPackedProgram(\n        a.shape, [batch, outerShapeA, outerShapeB], transposeA, transposeB,\n        hasBias, fusedActivation, hasPreluActivationWeights);\n    const inputs: TensorInfo[] = [a, b];\n    if (bias) {\n      inputs.push(bias);\n    }\n    if (preluActivationWeights) {\n      inputs.push(preluActivationWeights);\n    }\n    return this.compileAndRun<Tensor3D>(program, inputs, dtype);\n  }\n\n  multiply(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64') {\n      const aData = this.texData.get(a.dataId);\n      const bData = this.texData.get(b.dataId);\n\n      const realProgram = new BinaryOpComplexProgram(\n          binaryop_complex_gpu.COMPLEX_MULTIPLY.REAL, a.shape, b.shape);\n      const imagProgram = new BinaryOpComplexProgram(\n          binaryop_complex_gpu.COMPLEX_MULTIPLY.IMAG, a.shape, b.shape);\n\n      const inputs = [\n        this.makeComplexComponentTensorInfo(a, aData.complexTensors.real),\n        this.makeComplexComponentTensorInfo(a, aData.complexTensors.imag),\n        this.makeComplexComponentTensorInfo(b, bData.complexTensors.real),\n        this.makeComplexComponentTensorInfo(b, bData.complexTensors.imag)\n      ];\n      const real = this.compileAndRun<Tensor>(realProgram, inputs);\n      const imag = this.compileAndRun<Tensor>(imagProgram, inputs);\n\n      const complex = this.complex(real, imag);\n      real.dispose();\n      imag.dispose();\n      return complex;\n    }\n\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.multiply(a, b);\n    }\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_gpu.MUL, a.dtype);\n    }\n    const program = new BinaryOpProgram(binaryop_gpu.MUL, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], a.dtype);\n  }\n\n  batchNormalization(\n      x: Tensor4D, mean: Tensor4D|Tensor1D, variance: Tensor4D|Tensor1D,\n      varianceEpsilon: number, scale?: Tensor4D|Tensor1D,\n      offset?: Tensor4D|Tensor1D): Tensor4D {\n    const inputs = [x, mean, variance];\n\n    let offsetShape = null;\n    if (offset != null) {\n      offsetShape = offset.shape;\n      inputs.push(offset);\n    }\n\n    let scaleShape = null;\n    if (scale != null) {\n      scaleShape = scale.shape;\n      inputs.push(scale);\n    }\n\n    if (env().getBool('WEBGL_PACK_NORMALIZATION')) {\n      const batchNormPackedProgram = new BatchNormPackedProgram(\n          x.shape, mean.shape, variance.shape, offsetShape, scaleShape,\n          varianceEpsilon);\n      return this.compileAndRun<Tensor4D>(batchNormPackedProgram, inputs);\n    }\n\n    const batchNormProgram = new BatchNormProgram(\n        x.shape, mean.shape, variance.shape, offsetShape, scaleShape,\n        varianceEpsilon);\n    return this.compileAndRun(batchNormProgram, inputs);\n  }\n\n  localResponseNormalization4D(\n      x: Tensor4D, radius: number, bias: number, alpha: number,\n      beta: number): Tensor4D {\n    const program = env().getBool('WEBGL_PACK_NORMALIZATION') ?\n        new LRNPackedProgram(x.shape, radius, bias, alpha, beta) :\n        new LRNProgram(x.shape, radius, bias, alpha, beta);\n    return this.compileAndRun(program, [x]);\n  }\n\n  LRNGrad(\n      dy: Tensor4D, inputImage: Tensor4D, outputImage: Tensor4D,\n      depthRadius: number, bias: number, alpha: number,\n      beta: number): Tensor4D {\n    const program =\n        new LRNGradProgram(inputImage.shape, depthRadius, bias, alpha, beta);\n    return this.compileAndRun(program, [inputImage, outputImage, dy]);\n  }\n\n  tile<T extends Tensor>(x: T, reps: number[]): T {\n    if (x.dtype === 'string') {\n      const data = this.readSync(x.dataId) as Uint8Array[];\n      const decodedData = data.map(d => util.decodeString(d));\n      const buf = buffer(x.shape, x.dtype, decodedData);\n      return tile(buf, reps) as T;\n    }\n    const program = new TileProgram(x.shape, reps);\n    return this.compileAndRun(program, [x]);\n  }\n\n  pad<T extends Tensor>(\n      x: T, paddings: Array<[number, number]>, constantValue: number): T {\n    const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n        new PadPackedProgram(x.shape, paddings, constantValue) :\n        new PadProgram(x.shape, paddings, constantValue);\n    return this.compileAndRun(program, [x]);\n  }\n\n  gather<T extends Tensor>(x: T, indices: Tensor1D, axis: number): T {\n    if (this.shouldExecuteOnCPU([x, indices])) {\n      return this.cpuBackend.gather(x, indices, axis);\n    }\n    const program = new GatherProgram(x.shape, indices.size, axis);\n    return this.compileAndRun(program, [x, indices]);\n  }\n\n  batchToSpaceND<T extends Tensor>(\n      x: T, blockShape: number[], crops: number[][]): T {\n    util.assert(\n        x.rank <= 4,\n        () => 'batchToSpaceND for rank > 4 with a WebGL backend not ' +\n            'implemented yet');\n    const prod = blockShape.reduce((a, b) => a * b);\n\n    const reshaped = array_ops_util.getReshaped(x.shape, blockShape, prod);\n    const permuted =\n        array_ops_util.getPermuted(reshaped.length, blockShape.length);\n    const reshapedPermuted =\n        array_ops_util.getReshapedPermuted(x.shape, blockShape, prod);\n    const sliceBeginCoords =\n        array_ops_util.getSliceBeginCoords(crops, blockShape.length);\n    const sliceSize =\n        array_ops_util.getSliceSize(reshapedPermuted, crops, blockShape.length);\n\n    return transpose(x.reshape(reshaped), permuted)\n               .reshape(reshapedPermuted)\n               .slice(sliceBeginCoords, sliceSize) as T;\n  }\n\n  spaceToBatchND<T extends Tensor>(\n      x: T, blockShape: number[], paddings: Array<[number, number]>): T {\n    util.assert(\n        x.rank <= 4,\n        () => 'spaceToBatchND for rank > 4 with a WebGL backend not ' +\n            'implemented yet');\n\n    const prod = blockShape.reduce((a, b) => a * b);\n\n    const completePaddings: Array<[number, number]> = [[0, 0]];\n    completePaddings.push(...paddings);\n    for (let i = 1 + blockShape.length; i < x.shape.length; ++i) {\n      completePaddings.push([0, 0]);\n    }\n\n    const paddedX = x.pad(completePaddings);\n\n    const reshapedPaddedShape =\n        array_ops_util.getReshaped(paddedX.shape, blockShape, prod, false);\n\n    const permutedReshapedPaddedPermutation = array_ops_util.getPermuted(\n        reshapedPaddedShape.length, blockShape.length, false);\n\n    const flattenShape = array_ops_util.getReshapedPermuted(\n        paddedX.shape, blockShape, prod, false);\n\n    return transpose(\n               paddedX.reshape(reshapedPaddedShape),\n               permutedReshapedPaddedPermutation)\n               .reshape(flattenShape) as T;\n  }\n\n  private reduce(\n      x: Tensor2D, reduceType: 'all'|'any'|'max'|'min'|'sum'|'prod',\n      dtype: DataType): Tensor2D {\n    const batchSize = x.shape[0];\n    const inSize = x.shape[1];\n    const windowSize = reduce_util.computeOptimalWindowSize(inSize);\n    const reduceInfo = {windowSize, inSize, batchSize};\n    const program = new ReduceProgram(reduceInfo, reduceType);\n    const output = this.compileAndRun<Tensor2D>(program, [x], dtype);\n    // No need to run another GPGPU program.\n    if (output.shape[1] === 1) {\n      return output;\n    }\n    return this.reduce(output, reduceType, dtype);\n  }\n\n  private argReduce(\n      x: Tensor2D, reduceType: 'max'|'min',\n      bestIndicesA: Tensor2D = null): Tensor2D {\n    let batchSize = x.shape[0];\n    let inSize = x.shape[1];\n    if (bestIndicesA != null) {\n      batchSize = bestIndicesA.shape[0];\n      inSize = bestIndicesA.shape[1];\n    }\n    const windowSize = reduce_util.computeOptimalWindowSize(inSize);\n    const reduceInfo = {windowSize, inSize, batchSize};\n    const program =\n        new ArgMinMaxProgram(reduceInfo, reduceType, bestIndicesA == null);\n    const inputs = [x];\n    if (bestIndicesA != null) {\n      inputs.push(bestIndicesA);\n    }\n    const output = this.compileAndRun<Tensor2D>(program, inputs, 'int32');\n    // No need to run another GPGPU program.\n    if (output.shape[1] === 1) {\n      return output;\n    }\n    return this.argReduce(x, reduceType, output);\n  }\n\n  private argReducePacked(\n      x: Tensor, reduceType: 'max'|'min', bestIndicesA: Tensor = null): Tensor {\n    const inShape = bestIndicesA != null ? bestIndicesA.shape : x.shape;\n    const inSize = inShape[inShape.length - 1];\n    const windowSize = reduce_util.computeOptimalWindowSize(inSize);\n    const program = new ArgMinMaxPackedProgram(\n        inShape, windowSize, reduceType, bestIndicesA == null);\n    const inputs = bestIndicesA == null ? [x] : [x, bestIndicesA];\n    const output = this.compileAndRun<Tensor>(program, inputs, 'int32');\n    if (output.rank === x.rank) {\n      return this.argReducePacked(x, reduceType, output);\n    }\n    return output;\n  }\n\n  sum(x: Tensor, axes: number[]): Tensor {\n    axis_util.assertAxesAreInnerMostDims('sum', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    const outputDType = sumOutType(x.dtype);\n    return this.reduce(a2D, 'sum', outputDType).reshape(outShape);\n  }\n\n  prod(x: Tensor, axes: number[]): Tensor {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.prod(x, axes);\n    }\n\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    const outputDType = sumOutType(x.dtype);\n    return this.reduce(a2D, 'prod', outputDType).reshape(outShape);\n  }\n\n  unsortedSegmentSum<T extends Tensor>(\n      x: T, segmentIds: Tensor1D, numSegments: number): Tensor {\n    let axis = 0;\n    const permutation = axis_util.getAxesPermutation([axis], x.rank);\n    let permutedX = x;\n    if (permutation != null) {\n      permutedX = transpose(x, permutation);\n      axis = axis_util.getInnerMostAxes(1, x.rank)[0];\n    }\n\n    const outShape =\n        segment_util.computeOutShape(permutedX.shape, axis, numSegments);\n    const inSize = util.sizeFromShape([permutedX.shape[axis]]);\n    const a2D = permutedX.as2D(-1, inSize);\n    const outputDType = sumOutType(x.dtype);\n    let result =\n        this.segOpCompute(\n                a2D, 'unsortedSegmentSum', segmentIds, outputDType, numSegments)\n            .reshape(outShape);\n    if (permutation != null) {\n      result = transpose(result, axis_util.getUndoAxesPermutation(permutation));\n    }\n    return result;\n  }\n\n  private segOpCompute(\n      x: Tensor2D, segOpType: 'unsortedSegmentSum', segmentIds: Tensor1D,\n      dtype: DataType, numSegments: number): Tensor2D {\n    const batchSize = x.shape[0];\n    const inSize = x.shape[1];\n    const windowSize =\n        segment_util.segOpComputeOptimalWindowSize(inSize, numSegments);\n    const segOpInfo = {windowSize, inSize, batchSize, numSegments};\n    const program = new SegmentOpProgram(segOpInfo, segOpType);\n    const output =\n        this.compileAndRun<Tensor2D>(program, [x, segmentIds], dtype);\n    // No need to run another GPGPU program.\n    if (output.shape[1] === numSegments) {\n      return output;\n    }\n    segmentIds = range(0, numSegments).tile([inSize / windowSize]);\n    return this.segOpCompute(output, segOpType, segmentIds, dtype, numSegments);\n  }\n\n  private argMinMaxReduce(x: Tensor, axis: number, reduceType: 'min'|'max'):\n      Tensor {\n    const axes = [axis];\n    axis_util.assertAxesAreInnerMostDims(\n        'arg' + reduceType.charAt(0).toUpperCase() + reduceType.slice(1), axes,\n        x.rank);\n    if (!env().getBool('WEBGL_PACK_REDUCE') || x.rank <= 2) {\n      const [outShape, reduceShape] =\n          axis_util.computeOutAndReduceShapes(x.shape, axes);\n      const inSize = util.sizeFromShape(reduceShape);\n      const a2D = x.as2D(-1, inSize);\n      return this.argReduce(a2D, reduceType).reshape(outShape);\n    }\n    return this.argReducePacked(x, reduceType);\n  }\n\n  argMin(x: Tensor, axis: number): Tensor {\n    return this.argMinMaxReduce(x, axis, 'min');\n  }\n\n  argMax(x: Tensor, axis: number): Tensor {\n    return this.argMinMaxReduce(x, axis, 'max');\n  }\n\n  cumsum(x: Tensor, axis: number, exclusive: boolean, reverse: boolean):\n      Tensor {\n    if (axis !== x.rank - 1) {\n      throw new Error(\n          `WebGL cumsum shader expects an inner-most axis=${x.rank - 1} ` +\n          `but got axis=${axis}`);\n    }\n    const program = new CumSumProgram(x.shape, exclusive, reverse);\n    return this.compileAndRun(program, [x]);\n  }\n\n  equal(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.EQUAL, 'bool');\n    }\n    const program = new BinaryOpProgram(binaryop_gpu.EQUAL, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  notEqual(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.NOT_EQUAL, 'bool');\n    }\n    const program =\n        new BinaryOpProgram(binaryop_gpu.NOT_EQUAL, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  less(a: Tensor, b: Tensor): Tensor {\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.less(a, b);\n    }\n\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.LESS, 'bool');\n    }\n\n    const program = new BinaryOpProgram(binaryop_gpu.LESS, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  lessEqual(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.LESS_EQUAL, 'bool');\n    }\n    const program =\n        new BinaryOpProgram(binaryop_gpu.LESS_EQUAL, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  greater(a: Tensor, b: Tensor): Tensor {\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.greater(a, b);\n    }\n\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.GREATER, 'bool');\n    }\n\n    const program = new BinaryOpProgram(binaryop_gpu.GREATER, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  greaterEqual(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(\n          a, b, binaryop_packed_gpu.GREATER_EQUAL, 'bool');\n    }\n    const program =\n        new BinaryOpProgram(binaryop_gpu.GREATER_EQUAL, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  logicalNot<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.LOGICAL_NOT);\n    return this.compileAndRun(program, [x]);\n  }\n\n  logicalAnd(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.LOGICAL_AND, 'bool');\n    }\n    const program =\n        new BinaryOpProgram(binaryop_gpu.LOGICAL_AND, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  logicalOr(a: Tensor, b: Tensor): Tensor {\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_packed_gpu.LOGICAL_OR, 'bool');\n    }\n    const program =\n        new BinaryOpProgram(binaryop_gpu.LOGICAL_OR, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b], 'bool');\n  }\n\n  select(condition: Tensor, a: Tensor, b: Tensor): Tensor {\n    const program = new SelectProgram(condition.rank, a.shape, a.rank);\n    return this.compileAndRun(\n        program, [condition, a, b], upcastType(a.dtype, b.dtype));\n  }\n\n  where(condition: Tensor): Tensor2D {\n    warn(\n        'tf.where() in webgl locks the UI thread. ' +\n        'Call tf.whereAsync() instead');\n    const condVals = condition.dataSync();\n    return whereImpl(condition.shape, condVals);\n  }\n\n  topk<T extends Tensor>(x: T, k: number, sorted: boolean): [T, T] {\n    const xVals = x.dataSync();\n    return topkImpl(xVals, x.shape, x.dtype as NumericDataType, k, sorted);\n  }\n\n  min(x: Tensor, axes: number[]): Tensor {\n    axis_util.assertAxesAreInnerMostDims('min', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    return this.reduce(a2D, 'min', a2D.dtype).reshape(outShape);\n  }\n\n  minimum(a: Tensor, b: Tensor): Tensor {\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.minimum(a, b);\n    }\n\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(binaryop_packed_gpu.MIN, a.shape, b.shape) :\n        new BinaryOpProgram(binaryop_gpu.MIN, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b]);\n  }\n\n  mod(a: Tensor, b: Tensor): Tensor {\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(binaryop_packed_gpu.MOD, a.shape, b.shape) :\n        new BinaryOpProgram(binaryop_gpu.MOD, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b]);\n  }\n\n  max(x: Tensor, axes: number[]): Tensor {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.max(x, axes);\n    }\n\n    axis_util.assertAxesAreInnerMostDims('max', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    return this.reduce(a2D, 'max', a2D.dtype).reshape(outShape);\n  }\n\n  maximum(a: Tensor, b: Tensor): Tensor {\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.maximum(a, b);\n    }\n\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(binaryop_packed_gpu.MAX, a.shape, b.shape) :\n        new BinaryOpProgram(binaryop_gpu.MAX, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b]);\n  }\n\n  all(x: Tensor, axes: number[]): Tensor {\n    axis_util.assertAxesAreInnerMostDims('all', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    return this.reduce(a2D, 'all', a2D.dtype).reshape(outShape);\n  }\n\n  any(x: Tensor, axes: number[]): Tensor {\n    axis_util.assertAxesAreInnerMostDims('any', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const inSize = util.sizeFromShape(reduceShape);\n    const a2D = x.as2D(-1, inSize);\n    return this.reduce(a2D, 'any', a2D.dtype).reshape(outShape);\n  }\n\n  floorDiv(a: Tensor, b: Tensor): Tensor {\n    const op = binaryop_gpu.INT_DIV;\n    const outputDtype = 'int32';\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(\n          a, b, binaryop_packed_gpu.INT_DIV, outputDtype);\n    }\n    const program = new BinaryOpProgram(op, a.shape, b.shape);\n    return this.compileAndRun<Tensor>(program, [a, b], outputDtype);\n  }\n\n  add(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64' && b.dtype === 'complex64') {\n      return this.complexSeparableBinaryOp(a, b, binaryop_gpu.ADD);\n    }\n\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.add(a, b);\n    }\n\n    const dtype = upcastType(a.dtype, b.dtype);\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_gpu.ADD, dtype);\n    }\n    const program = new BinaryOpProgram(binaryop_gpu.ADD, a.shape, b.shape);\n    return this.compileAndRun<Tensor>(program, [a, b], dtype);\n  }\n\n  private packedUnaryOp(x: TensorInfo, op: string, dtype: DataType) {\n    const program = new UnaryOpPackedProgram(x.shape, op);\n    return this.compileAndRun<Tensor>(program, [x], dtype);\n  }\n\n  private packedBinaryOp(\n      a: TensorInfo, b: TensorInfo, op: string, dtype: DataType,\n      checkOutOfBounds = false) {\n    const program =\n        new BinaryOpPackedProgram(op, a.shape, b.shape, checkOutOfBounds);\n    return this.compileAndRun<Tensor>(program, [a, b], dtype);\n  }\n\n  /**\n   * Computes a complex binary operation that can be decomposed into a simple\n   * binary operation on both the real and imagary parts.\n   */\n  private complexSeparableBinaryOp(a: Tensor, b: Tensor, op: string): Tensor {\n    const aData = this.texData.get(a.dataId);\n    const bData = this.texData.get(b.dataId);\n\n    const [real, imag] = [\n      [aData.complexTensors.real, bData.complexTensors.real],\n      [aData.complexTensors.imag, bData.complexTensors.imag]\n    ].map(complexParts => {\n      const [aPart, bPart] = complexParts;\n\n      const aHandle = this.makeComplexComponentTensorInfo(a, aPart);\n      const bHandle = this.makeComplexComponentTensorInfo(b, bPart);\n\n      const program = new BinaryOpProgram(op, a.shape, b.shape);\n      return this.compileAndRun<Tensor>(\n          program, [aHandle, bHandle], upcastType(aPart.dtype, bPart.dtype));\n    });\n\n    const complex = this.complex(real, imag);\n    real.dispose();\n    imag.dispose();\n    return complex;\n  }\n\n  // Returns a TensorInfo with the complex shape and the dataId of the\n  // underlying part. We need to do this because a reshaped complex tensor is\n  // not reflected in its parts.\n  private makeComplexComponentTensorInfo(\n      complexTensor: Tensor, complexPart: Tensor): TensorInfo {\n    return {\n      dataId: complexPart.dataId,\n      dtype: complexPart.dtype,\n      shape: complexTensor.shape\n    };\n  }\n\n  addN<T extends Tensor>(tensors: T[]): T {\n    if (tensors.length === 1) {\n      return tensors[0];\n    }\n\n    // Limit the number of uploaded textures for optimization.\n    if (tensors.length > env().get('WEBGL_MAX_TEXTURES_IN_SHADER')) {\n      const midIndex = Math.floor(tensors.length / 2);\n      const leftSide = this.addN(tensors.slice(0, midIndex));\n      const rightSide = this.addN(tensors.slice(midIndex));\n      return this.addN([leftSide, rightSide]);\n    }\n\n    const dtype =\n        tensors.map(t => t.dtype).reduce((d1, d2) => upcastType(d1, d2));\n    const shapes = tensors.map(t => t.shape);\n    // We can make sure shapes are identical in op level.\n    const usePackedOp = env().getBool('WEBGL_PACK');\n    const program = usePackedOp ?\n        new AddNPackedProgram(tensors[0].shape, shapes) :\n        new AddNProgram(tensors[0].shape, shapes);\n    return this.compileAndRun<T>(program, tensors, dtype);\n  }\n\n  subtract(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64' && b.dtype === 'complex64') {\n      return this.complexSeparableBinaryOp(a, b, binaryop_gpu.SUB);\n    }\n\n    if (this.shouldExecuteOnCPU([a, b])) {\n      return this.cpuBackend.subtract(a, b);\n    }\n    const dtype = upcastType(a.dtype, b.dtype);\n    if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n      return this.packedBinaryOp(a, b, binaryop_gpu.SUB, a.dtype);\n    }\n    const program = new BinaryOpProgram(binaryop_gpu.SUB, a.shape, b.shape);\n    return this.compileAndRun<Tensor>(program, [a, b], dtype);\n  }\n\n  pow<T extends Tensor>(a: T, b: Tensor): T {\n    const usePackedOp = env().getBool('WEBGL_PACK_BINARY_OPERATIONS');\n    const program = usePackedOp ?\n        new BinaryOpPackedProgram(binaryop_packed_gpu.POW, a.shape, b.shape) :\n        new BinaryOpProgram(binaryop_gpu.POW, a.shape, b.shape);\n    const dtype = upcastType(a.dtype, b.dtype);\n    return this.compileAndRun<T>(program, [a, b], dtype);\n  }\n\n  ceil<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.ceil(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.CEIL, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.CEIL);\n    return this.compileAndRun(program, [x]);\n  }\n\n  floor<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.floor(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.FLOOR, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.FLOOR);\n    return this.compileAndRun(program, [x]);\n  }\n\n  sign<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SIGN);\n    return this.compileAndRun(program, [x]);\n  }\n\n  isNaN<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.IS_NAN);\n    return this.compileAndRun(program, [x], 'bool');\n  }\n  isInf<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.IS_INF);\n    return this.compileAndRun(program, [x], 'bool');\n  }\n  isFinite<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.IS_FINITE);\n    return this.compileAndRun(program, [x], 'bool');\n  }\n\n  round<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ROUND);\n    return this.compileAndRun(program, [x]);\n  }\n\n  exp<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.exp(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.EXP, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.EXP);\n    return this.compileAndRun(program, [x]);\n  }\n\n  expm1<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.expm1(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.EXPM1, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.EXPM1);\n    return this.compileAndRun(program, [x]);\n  }\n\n  softmax<T extends Tensor>(logits: T, dim: number): T {\n    const axes = util.parseAxisParam([dim], logits.shape);\n    const maxLogit = this.max(logits, axes);\n    const expandedShape = axis_util.expandShapeToKeepDim(maxLogit.shape, axes);\n    const a = this.subtract(logits, maxLogit.reshape(expandedShape));\n    const b = this.exp(a);\n    const sumExp = this.sum(b, axes).reshape(expandedShape);\n\n    // TODO(annxingyuan): Call divImpl rather than op as part of softmax kernel\n    // modularization.\n    return div(b, sumExp);\n  }\n\n  log<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.log(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_packed_op.LOG, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.LOG);\n    return this.compileAndRun(program, [x]);\n  }\n\n  log1p<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.LOG1P);\n    return this.compileAndRun(program, [x]);\n  }\n\n  sqrt<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SQRT);\n    return this.compileAndRun(program, [x]);\n  }\n\n  rsqrt<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.rsqrt(x);\n    }\n    const program = new UnaryOpProgram(x.shape, unary_op.RSQRT);\n    return this.compileAndRun(program, [x]);\n  }\n\n  reciprocal<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.RECIPROCAL);\n    return this.compileAndRun(program, [x]);\n  }\n\n  relu<T extends Tensor>(x: T): T {\n    let program: UnaryOpProgram|UnaryOpPackedProgram;\n    if (env().getBool('WEBGL_PACK')) {\n      program = new UnaryOpPackedProgram(x.shape, unary_packed_op.RELU);\n    } else {\n      program = new UnaryOpProgram(x.shape, unary_op.RELU);\n    }\n    return this.compileAndRun(program, [x]);\n  }\n\n  relu6<T extends Tensor>(x: T): T {\n    let program: UnaryOpProgram|UnaryOpPackedProgram;\n    if (env().getBool('WEBGL_PACK')) {\n      program = new UnaryOpPackedProgram(x.shape, unary_packed_op.RELU6);\n    } else {\n      program = new UnaryOpProgram(x.shape, unary_op.RELU6);\n    }\n    return this.compileAndRun(program, [x]);\n  }\n\n  prelu<T extends Tensor>(x: T, alpha: T): T {\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(\n            binaryop_packed_gpu.PRELU, x.shape, alpha.shape) :\n        new BinaryOpProgram(binaryop_gpu.PRELU, x.shape, alpha.shape);\n    return this.compileAndRun(program, [x, alpha]);\n  }\n\n  elu<T extends Tensor>(x: T): T {\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_packed_op.ELU, x.dtype) as T;\n    }\n    const program = new UnaryOpProgram(x.shape, unary_op.ELU);\n    return this.compileAndRun(program, [x]);\n  }\n\n  eluDer<T extends Tensor>(dy: T, y: T): T {\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(\n            binaryop_packed_gpu.ELU_DER, dy.shape, y.shape) :\n        new BinaryOpProgram(binaryop_gpu.ELU_DER, dy.shape, y.shape);\n    return this.compileAndRun(program, [dy, y]);\n  }\n\n  selu<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SELU);\n    return this.compileAndRun(program, [x]);\n  }\n\n  int<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.TO_INT);\n    return this.compileAndRun(program, [x], 'int32');\n  }\n\n  clip<T extends Tensor>(x: T, min: number, max: number): T {\n    let program;\n    if (env().getBool('WEBGL_PACK_CLIP')) {\n      program = new ClipPackedProgram(x.shape);\n    } else {\n      program = new ClipProgram(x.shape);\n    }\n    const customSetup = program.getCustomSetupFunc(min, max);\n    return this.compileAndRun(program, [x], null, customSetup);\n  }\n\n  abs<T extends Tensor>(x: T): T {\n    if (this.shouldExecuteOnCPU([x])) {\n      return this.cpuBackend.abs(x);\n    }\n\n    if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n      return this.packedUnaryOp(x, unary_op.ABS, x.dtype) as T;\n    }\n\n    const program = new UnaryOpProgram(x.shape, unary_op.ABS);\n    return this.compileAndRun(program, [x]);\n  }\n\n  complexAbs<T extends Tensor>(x: T): T {\n    const xData = this.texData.get(x.dataId);\n\n    const program = new ComplexAbsProgram(x.shape);\n    const inputs = [\n      this.makeComplexComponentTensorInfo(x, xData.complexTensors.real),\n      this.makeComplexComponentTensorInfo(x, xData.complexTensors.imag),\n    ];\n\n    return this.compileAndRun<Tensor>(program, inputs) as T;\n  }\n\n  sigmoid<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SIGMOID);\n    return this.compileAndRun(program, [x]);\n  }\n\n  softplus<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SOFTPLUS);\n    return this.compileAndRun(program, [x]);\n  }\n\n  sin<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SIN);\n    return this.compileAndRun(program, [x]);\n  }\n\n  cos<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.COS);\n    return this.compileAndRun(program, [x]);\n  }\n\n  tan<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.TAN);\n    return this.compileAndRun(program, [x]);\n  }\n\n  asin<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ASIN);\n    return this.compileAndRun(program, [x]);\n  }\n\n  acos<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ACOS);\n    return this.compileAndRun(program, [x]);\n  }\n\n  atan<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ATAN);\n    return this.compileAndRun(program, [x]);\n  }\n\n  atan2<T extends Tensor>(a: T, b: T): T {\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(binaryop_packed_gpu.ATAN2, a.shape, b.shape) :\n        new BinaryOpProgram(binaryop_gpu.ATAN2, a.shape, b.shape);\n    return this.compileAndRun(program, [a, b]);\n  }\n\n  sinh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.SINH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  cosh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.COSH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  tanh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.TANH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  asinh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ASINH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  acosh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ACOSH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  atanh<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ATANH);\n    return this.compileAndRun(program, [x]);\n  }\n\n  erf<T extends Tensor>(x: T): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.ERF);\n    return this.compileAndRun(program, [x]);\n  }\n\n  step<T extends Tensor>(x: T, alpha: number): T {\n    const program = new UnaryOpProgram(x.shape, unary_op.STEP(alpha));\n    return this.compileAndRun(program, [x]);\n  }\n\n  private conv2dByMatMul(\n      x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo, bias?: Tensor,\n      activation?: Activation, preluActivationWeights?: Tensor): Tensor4D {\n    // Reshapes conv2D input to 2D tensors, uses matMul and then reshape the\n    // result from 2D to 4D.\n    const xShape = x.shape;\n    const xTexData = this.texData.get(x.dataId);\n    const sharedMatMulDim = convInfo.inChannels;\n    const outerShapeX = xShape[0] * xShape[1] * xShape[2];\n    const outerShapeFilter = convInfo.outChannels;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n    const transposeA = false;\n    const transposeB = false;\n\n    // TODO: Once reduction ops are packed, batchMatMul will always be packed\n    // and we can remove this condition.\n    const batchMatMulWillBeUnpacked =\n        (outerShapeX === 1 || outerShapeFilter === 1) &&\n        sharedMatMulDim > MATMUL_SHARED_DIM_THRESHOLD;\n    const reshapeWillBeExpensive = xShape[2] % 2 !== 0 && !!xTexData.isPacked;\n\n    if (batchMatMulWillBeUnpacked || !env().getBool('WEBGL_LAZILY_UNPACK') ||\n        !env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ||\n        !reshapeWillBeExpensive) {\n      const targetShape = isChannelsLast ? xShape[0] * xShape[1] * xShape[2] :\n                                           xShape[0] * xShape[2] * xShape[3];\n      const xReshaped = this.reshape(x, [1, targetShape, convInfo.inChannels]);\n      const filterReshaped =\n          this.reshape(filter, [1, convInfo.inChannels, convInfo.outChannels]);\n\n      return this.reshape<Rank.R4>(\n          this.fusedBatchMatMul({\n            a: xReshaped as Tensor3D,\n            b: filterReshaped as Tensor3D,\n            transposeA,\n            transposeB,\n            bias,\n            activation,\n            preluActivationWeights\n          }),\n          convInfo.outShape);\n    }\n\n    // Following optimization is specific to packed |x| with odd row count\n    // (For example, in channelLast mode, 'row count' refers to x.shape[2]):\n    // we avoid expensive packed 2x2 reshape by padding row count to next,\n    // even number. When x.shape[2] is odd, the result of packed batchMatMul is\n    // the same (has the same texture layout and and values in the texture) as\n    // it is for even x.shape[2] + 1. We make the odd-rows tensor to look like\n    // even-rows tensor before the operation and, after the batchMatMul,\n    // fix the even-rows result to have odd number of rows.\n    const targetShape = isChannelsLast ?\n        xShape[0] * xShape[1] * (xShape[2] + 1) :\n        xShape[0] * xShape[2] * (xShape[3] + 1);\n    const xReshaped: TensorInfo = {\n      dataId: x.dataId,\n      shape: [1, targetShape, convInfo.inChannels],\n      dtype: x.dtype\n    };\n    // xTexData.shape gets referenced from GPGPUBinary.inShapeInfos.\n    // Decrementing row count, after batchMatMul->...->compileProgram leads to\n    // invalid row count within the reference in GPGPUBinary.inShapeInfos.\n    // Alternative fix would be to provide a copy to GPGPUBinary.inShapeInfos\n    // in compileProgram method, but that would affect compilation of all\n    // programs - instead, provide a copy here, with even row count, before\n    // calling batchMatMul->...->compileProgram and after that, the original\n    // xTexData.shape is restored.\n    const originalXTexDataShape = xTexData.shape;\n    xTexData.shape = xTexData.shape.slice();\n    xTexData.shape[xTexData.shape.length - 2]++;\n    util.assert(\n        webgl_util.isReshapeFree(xTexData.shape, xReshaped.shape),\n        () => `packed reshape ${xTexData.shape} to ${\n            xReshaped.shape} isn't free`);\n    const filterReshaped =\n        this.reshape(filter, [1, convInfo.inChannels, convInfo.outChannels]);\n\n    const pointwiseConv = this.fusedBatchMatMul({\n      a: xReshaped as Tensor3D,\n      b: filterReshaped as Tensor3D,\n      transposeA,\n      transposeB,\n      bias,\n      activation,\n      preluActivationWeights\n    });\n    const pointwiseConvTexData = this.texData.get(pointwiseConv.dataId);\n    util.assert(\n        pointwiseConvTexData.isPacked,\n        () => 'batchMatMul result is expected to be packed');\n    // Restore the input shape to original.\n    xTexData.shape = originalXTexDataShape;\n    // Set the output shape - there is no need for expensive reshape as data\n    // layout is already correct.\n    pointwiseConvTexData.shape = convInfo.outShape;\n    return ENGINE.makeTensorFromDataId(\n               pointwiseConv.dataId, convInfo.outShape, pointwiseConv.dtype) as\n        Tensor4D;\n  }\n\n  private conv2dWithIm2Row(\n      x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo, bias?: Tensor,\n      activation?: Activation, preluActivationWeights?: Tensor): Tensor4D {\n    // Rearranges conv2d input so each block to be convolved over forms the\n    // column of a new matrix with shape [filterWidth * filterHeight *\n    // inChannels, outHeight * outWidth]. The filter is also rearranged so each\n    // output channel forms a row of a new matrix with shape [outChannels,\n    // filterWidth * filterHeight * inChannels]. The convolution is then\n    // computed by multiplying these matrices and reshaping the result.\n    const {\n      filterWidth,\n      filterHeight,\n      inChannels,\n      outWidth,\n      outHeight,\n      dataFormat\n    } = convInfo;\n\n    const isChannelsLast = dataFormat === 'channelsLast';\n\n    const sharedDim = filterWidth * filterHeight * inChannels;\n    const numCols = outHeight * outWidth;\n    const x2ColShape = [sharedDim, numCols];\n    const transposeA = true;\n    const transposeB = false;\n\n    const xSqueezed = x.squeeze([0]);\n    const w2Row = filter.reshape([1, sharedDim, -1]);\n\n    const im2ColProgram =\n        new Im2ColPackedProgram(x2ColShape, xSqueezed.shape, convInfo);\n    const im2Col: Tensor3D =\n        this.compileAndRun<Tensor2D>(im2ColProgram, [xSqueezed]).reshape([\n          1, x2ColShape[0], x2ColShape[1]\n        ]);\n\n    const hasBias = bias != null;\n    const hasPreluActivationWeights = preluActivationWeights != null;\n    const fusedActivation =\n        activation ? mapActivationToShaderProgram(activation, true) : null;\n    const matmulProgram = new MatMulPackedProgram(\n        im2Col.shape, [1, numCols, convInfo.outChannels], transposeA,\n        transposeB, hasBias, fusedActivation, hasPreluActivationWeights);\n    const inputs: TensorInfo[] = [im2Col, w2Row];\n    if (bias) {\n      inputs.push(bias);\n    }\n    if (hasPreluActivationWeights) {\n      inputs.push(preluActivationWeights);\n    }\n    const product = this.compileAndRun<Tensor4D>(matmulProgram, inputs);\n\n    if (isChannelsLast) {\n      return product.reshape([1, outHeight, outWidth, convInfo.outChannels]);\n    } else {\n      return product.reshape([1, convInfo.outChannels, outHeight, outWidth]);\n    }\n  }\n\n  fusedConv2d(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 &&\n        convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 &&\n        convInfo.strideHeight === 1 && convInfo.strideWidth === 1 &&\n        (convInfo.padInfo.type === 'SAME' ||\n         convInfo.padInfo.type === 'VALID')) {\n      return this.conv2dByMatMul(\n          input, filter, convInfo, bias, activation, preluActivationWeights);\n    }\n    if (env().getBool('WEBGL_CONV_IM2COL') && input.shape[0] === 1) {\n      return this.conv2dWithIm2Row(\n          input, filter, convInfo, bias, activation, preluActivationWeights);\n    }\n\n    const hasBias = bias != null;\n    const hasPreluActivationWeights = preluActivationWeights != null;\n    const fusedActivation =\n        activation ? mapActivationToShaderProgram(activation, false) : null;\n    const program = new Conv2DProgram(\n        convInfo, hasBias, fusedActivation, hasPreluActivationWeights);\n    const inputs: TensorInfo[] = [input, filter];\n    if (bias) {\n      inputs.push(bias);\n    }\n    if (preluActivationWeights) {\n      inputs.push(preluActivationWeights);\n    }\n    return this.compileAndRun(program, inputs);\n  }\n\n  conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 &&\n        convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 &&\n        convInfo.strideHeight === 1 && convInfo.strideWidth === 1 &&\n        (convInfo.padInfo.type === 'SAME' ||\n         convInfo.padInfo.type === 'VALID')) {\n      return this.conv2dByMatMul(x, filter, convInfo);\n    }\n    if (env().getBool('WEBGL_CONV_IM2COL') && x.shape[0] === 1) {\n      return this.conv2dWithIm2Row(x, filter, convInfo);\n    }\n    const program = new Conv2DProgram(convInfo);\n    return this.compileAndRun(program, [x, filter]);\n  }\n\n  conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    const program = new Conv2DDerInputProgram(convInfo);\n    return this.compileAndRun(program, [dy, filter]);\n  }\n\n  conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    const program = new Conv2DDerFilterProgram(convInfo);\n    return this.compileAndRun(program, [x, dy]);\n  }\n\n  fusedDepthwiseConv2D(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    const shouldPackDepthwiseConv = env().getBool('WEBGL_PACK_DEPTHWISECONV') &&\n        convInfo.strideWidth <= 2 &&\n        convInfo.outChannels / convInfo.inChannels === 1;\n    const fusedActivation = activation ?\n        mapActivationToShaderProgram(activation, shouldPackDepthwiseConv) :\n        null;\n    const inputs: Tensor[] = [input, filter];\n\n    const hasBias = bias != null;\n    const hasPreluActivationWeights = preluActivationWeights != null;\n    if (hasBias) {\n      inputs.push(bias);\n    }\n    if (hasPreluActivationWeights) {\n      inputs.push(preluActivationWeights);\n    }\n\n    let program: DepthwiseConv2DProgram|DepthwiseConvPacked2DProgram;\n    if (shouldPackDepthwiseConv) {\n      program = new DepthwiseConvPacked2DProgram(\n          convInfo, hasBias, fusedActivation, hasPreluActivationWeights);\n      return this.compileAndRun(program, inputs);\n    }\n\n    program = new DepthwiseConv2DProgram(\n        convInfo, hasBias, fusedActivation, hasPreluActivationWeights);\n    return this.compileAndRun(program, inputs);\n  }\n\n  depthwiseConv2D(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    let program: DepthwiseConv2DProgram|DepthwiseConvPacked2DProgram;\n    if (env().getBool('WEBGL_PACK_DEPTHWISECONV') &&\n        convInfo.strideWidth <= 2 &&\n        convInfo.outChannels / convInfo.inChannels === 1) {\n      program = new DepthwiseConvPacked2DProgram(convInfo);\n      return this.compileAndRun(program, [x, filter]);\n    }\n\n    program = new DepthwiseConv2DProgram(convInfo);\n    return this.compileAndRun(program, [x, filter]);\n  }\n\n  depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    const program = new DepthwiseConv2DDerInputProgram(convInfo);\n    return this.compileAndRun(program, [dy, filter]);\n  }\n\n  depthwiseConv2DDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    const program = new DepthwiseConv2DDerFilterProgram(convInfo);\n    return this.compileAndRun(program, [x, dy]);\n  }\n\n  conv3d(x: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const program = new Conv3DProgram(convInfo);\n    return this.compileAndRun(program, [x, filter]);\n  }\n\n  conv3dDerInput(dy: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo):\n      Tensor5D {\n    const program = new Conv3DDerInputProgram(convInfo);\n    return this.compileAndRun(program, [dy, filter]);\n  }\n\n  conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const program = new Conv3DDerFilterProgram(convInfo);\n    return this.compileAndRun(program, [x, dy]);\n  }\n\n  maxPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    const program = new Pool2DProgram(convInfo, 'max', false);\n    return this.compileAndRun(program, [x]);\n  }\n\n  avgPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    const program = new Pool2DProgram(convInfo, 'avg', false);\n    return this.compileAndRun(program, [x], 'float32');\n  }\n\n  maxPoolBackprop(dy: Tensor4D, x: Tensor4D, y: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    const getPositions = true;\n    const maxPoolPositionsProgram =\n        new Pool2DProgram(convInfo, 'max', getPositions);\n    const maxPoolPositions: Tensor4D =\n        this.compileAndRun(maxPoolPositionsProgram, [x]);\n\n    const maxPoolBackPropProgram = new MaxPool2DBackpropProgram(convInfo);\n    const result = this.compileAndRun(\n        maxPoolBackPropProgram, [dy, maxPoolPositions], x.dtype);\n    maxPoolPositions.dispose();\n    return result as Tensor4D;\n  }\n\n  avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    const avgPoolBackpropProgram = new AvgPool2DBackpropProgram(convInfo);\n    return this.compileAndRun(avgPoolBackpropProgram, [dy], x.dtype);\n  }\n\n  cast<T extends Tensor>(x: T, dtype: DataType): T {\n    return backend_util.castTensor(x, dtype, this);\n  }\n\n  unstack(x: Tensor, axis: number): Tensor[] {\n    const num = x.shape[axis];\n    const outShape: number[] = new Array(x.rank - 1);\n    let outIndex = 0;\n    for (let i = 0; i < x.rank; i++) {\n      if (i !== axis) {\n        outShape[outIndex++] = x.shape[i];\n      }\n    }\n\n    const begin = new Array(x.rank).fill(0);\n    const size = x.shape.slice();\n    size[axis] = 1;\n    const res = new Array(num);\n    for (let i = 0; i < res.length; i++) {\n      begin[axis] = i;\n      res[i] = this.slice(x, begin, size).reshape(outShape);\n    }\n    return res;\n  }\n\n  avgPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const program = new Pool3DProgram(convInfo, 'avg', false);\n    return this.compileAndRun(program, [x], 'float32');\n  }\n\n  avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const avgPool3dBackpropProgram = new AvgPool3DBackpropProgram(convInfo);\n    return this.compileAndRun(avgPool3dBackpropProgram, [dy], x.dtype);\n  }\n\n  maxPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const program = new Pool3DProgram(convInfo, 'max', false);\n    return this.compileAndRun(program, [x], 'float32');\n  }\n\n  maxPool3dBackprop(\n      dy: Tensor5D, x: Tensor5D, y: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const getPositions = true;\n    const maxPool3dPositionsProgram =\n        new Pool3DProgram(convInfo, 'max', getPositions);\n    const maxPool3dPositions: Tensor5D =\n        this.compileAndRun(maxPool3dPositionsProgram, [x]);\n    const maxPool3dBackPropProgram = new MaxPool3DBackpropProgram(convInfo);\n    const result = this.compileAndRun(\n        maxPool3dBackPropProgram, [dy, maxPool3dPositions], x.dtype);\n    maxPool3dPositions.dispose();\n    return result as Tensor5D;\n  }\n\n  reshape<R extends Rank>(x: Tensor, shape: ShapeMap[R]): Tensor<R> {\n    const texData = this.texData.get(x.dataId);\n    if (texData.isPacked && !webgl_util.isReshapeFree(x.shape, shape) &&\n        !(texData.texture !== null &&\n          webgl_util.isReshapeFree(texData.shape, shape))) {\n      const info = this.packedReshape(x, shape);\n      return ENGINE.makeTensorFromDataId(info.dataId, info.shape, info.dtype) as\n          Tensor<R>;\n    }\n    return backend_util.reshapeTensor(x, shape);\n  }\n\n  resizeBilinear(\n      x: Tensor4D, newHeight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    const program = env().getBool('WEBGL_PACK_IMAGE_OPERATIONS') ?\n        new ResizeBilinearPackedProgram(\n            x.shape, newHeight, newWidth, alignCorners) :\n        new ResizeBilinearProgram(x.shape, newHeight, newWidth, alignCorners);\n    return this.compileAndRun(program, [x], 'float32');\n  }\n\n  resizeBilinearBackprop(dy: Tensor4D, x: Tensor4D, alignCorners: boolean):\n      Tensor4D {\n    const program = new ResizeBilinearBackpropProgram(dy, x, alignCorners);\n\n    return this.compileAndRun(program, [dy]);\n  }\n\n  resizeNearestNeighbor(\n      x: Tensor4D, newHeight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    const program = new ResizeNearestNeighborProgram(\n        x.shape, newHeight, newWidth, alignCorners);\n    return this.compileAndRun(program, [x]);\n  }\n\n  resizeNearestNeighborBackprop(\n      dy: Tensor4D, x: Tensor4D, alignCorners: boolean): Tensor4D {\n    const program =\n        new ResizeNearestNeigborBackpropProgram(dy, x, alignCorners);\n    return this.compileAndRun(program, [dy]);\n  }\n\n  multinomial(\n      logits: Tensor2D, normalized: boolean, numSamples: number,\n      seed: number): Tensor2D {\n    const probs = normalized ? logits : softmax(logits);\n    const batchSize = probs.shape[0];\n    const numOutcomes = probs.shape[1];\n    const program = new MultinomialProgram(batchSize, numOutcomes, numSamples);\n    const customSetup = program.getCustomSetupFunc(seed);\n    return this.compileAndRun(program, [probs], 'int32', customSetup);\n  }\n\n  oneHot(indices: Tensor1D, depth: number, onValue: number, offValue: number):\n      Tensor2D {\n    const program = new OneHotProgram(indices.size, depth, onValue, offValue);\n    return this.compileAndRun(program, [indices]);\n  }\n\n  diag(x: Tensor): Tensor {\n    const program = new DiagProgram(x.size);\n    return this.compileAndRun(program, [x]);\n  }\n\n  nonMaxSuppression(\n      boxes: Tensor2D, scores: Tensor1D, maxOutputSize: number,\n      iouThreshold: number, scoreThreshold: number): Tensor1D {\n    warn(\n        'tf.nonMaxSuppression() in webgl locks the UI thread. ' +\n        'Call tf.nonMaxSuppressionAsync() instead');\n    const boxesVals = boxes.dataSync();\n    const scoresVals = scores.dataSync();\n    return nonMaxSuppressionV3(\n        boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n  }\n\n  cropAndResize(\n      image: Tensor4D, boxes: Tensor2D, boxIndex: Tensor1D,\n      cropSize: [number, number], method: 'bilinear'|'nearest',\n      extrapolationValue: number): Tensor4D {\n    const program = new CropAndResizeProgram(\n        image.shape, boxes.shape, cropSize, method, extrapolationValue);\n    return this.compileAndRun(program, [image, boxes, boxIndex], 'float32');\n  }\n\n  depthToSpace(x: Tensor4D, blockSize: number, dataFormat: 'NHWC'|'NCHW'):\n      Tensor4D {\n    util.assert(\n        blockSize > 1,\n        () =>\n            `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`);\n\n    const batchSize = x.shape[0];\n    const inputHeight = (dataFormat === 'NHWC') ? x.shape[1] : x.shape[2];\n    const inputWidth = (dataFormat === 'NHWC') ? x.shape[2] : x.shape[3];\n    const inputDepth = (dataFormat === 'NHWC') ? x.shape[3] : x.shape[1];\n\n    const outputHeight = inputHeight * blockSize;\n    const outputWidth = inputWidth * blockSize;\n    const outputDepth = inputDepth / (blockSize * blockSize);\n\n    const outputShape = (dataFormat === 'NHWC') ?\n        [batchSize, outputHeight, outputWidth, outputDepth] :\n        [batchSize, outputDepth, outputHeight, outputWidth];\n\n    const program = new DepthToSpaceProgram(outputShape, blockSize, dataFormat);\n    return this.compileAndRun(program, [x]);\n  }\n\n  split<T extends Tensor>(x: T, sizeSplits: number[], axis: number): T[] {\n    return split(x, sizeSplits, axis);\n  }\n\n  scatterND<R extends Rank>(\n      indices: Tensor, updates: Tensor, shape: ShapeMap[R]): Tensor<R> {\n    const {sliceRank, numUpdates, sliceSize, strides, outputSize} =\n        scatter_nd_util.calculateShapes(updates, indices, shape);\n\n    const flattenShape = [outputSize / sliceSize, sliceSize];\n    const flattenIndices = indices.reshape([numUpdates, sliceRank]);\n    const flattenX = updates.reshape([numUpdates, sliceSize]);\n\n    if (outputSize === 0) {\n      return backend_util.reshapeTensor(tensor([]), shape);\n    }\n    const defaultValue = scalar(0);\n    const program = new ScatterProgram(\n        numUpdates, sliceRank, flattenIndices.rank, flattenX.rank, strides,\n        flattenShape);\n    const res: Tensor =\n        this.compileAndRun(program, [flattenX, flattenIndices, defaultValue]);\n    return res.reshape(shape);\n  }\n\n  sparseToDense<R extends Rank>(\n      sparseIndices: Tensor, sparseValues: Tensor, outputShape: ShapeMap[R],\n      defaultValue: Scalar): Tensor<R> {\n    const {sliceRank, numUpdates, strides, outputSize} =\n        scatter_nd_util.calculateShapes(\n            sparseValues, sparseIndices, outputShape);\n\n    const sumDupeIndices = false;\n    const program = new ScatterProgram(\n        numUpdates, sliceRank, sparseIndices.rank, sparseValues.rank, strides,\n        [outputSize, 1], sumDupeIndices);\n    const res: Tensor = this.compileAndRun(\n        program, [sparseValues, sparseIndices, defaultValue]);\n    return res.reshape(outputShape);\n  }\n\n  fft(x: Tensor2D): Tensor2D {\n    const inverse = false;\n    return this.fftImpl(x, inverse);\n  }\n\n  ifft(x: Tensor2D): Tensor2D {\n    const inverse = true;\n    return this.fftImpl(x, inverse);\n  }\n\n  private fftImpl(x: Tensor2D, inverse: boolean): Tensor2D {\n    const xData = this.texData.get(x.dataId);\n\n    const realProgram =\n        new FFTProgram(fft_gpu.COMPLEX_FFT.REAL, x.shape, inverse);\n    const imagProgram =\n        new FFTProgram(fft_gpu.COMPLEX_FFT.IMAG, x.shape, inverse);\n    const inputs = [\n      this.makeComplexComponentTensorInfo(x, xData.complexTensors.real),\n      this.makeComplexComponentTensorInfo(x, xData.complexTensors.imag),\n    ];\n\n    const real = this.compileAndRun<Tensor>(realProgram, inputs);\n    const imag = this.compileAndRun<Tensor>(imagProgram, inputs);\n    const complex = this.complex(real, imag).as2D(x.shape[0], x.shape[1]);\n    real.dispose();\n    imag.dispose();\n    return complex;\n  }\n\n  gatherND(x: Tensor, indices: Tensor): Tensor {\n    const indicesShape = indices.shape;\n    const sliceRank = indicesShape[indicesShape.length - 1];\n\n    const [resultShape, numSlices, sliceSize, strides] =\n        gather_nd_util.prepareAndValidate(x, indices);\n\n    const flattenIndices = indices.reshape([numSlices, sliceRank]);\n    const flattenX = x.reshape([x.size / sliceSize, sliceSize]);\n    const program =\n        new GatherNDProgram(sliceRank, strides, [numSlices, sliceSize]);\n    const res: Tensor = this.compileAndRun(program, [flattenX, flattenIndices]);\n    return res.reshape(resultShape);\n  }\n\n  fill<R extends Rank>(\n      shape: ShapeMap[R], value: number|string, dtype?: DataType): Tensor<R> {\n    dtype = dtype || inferDtype(value);\n\n    if (dtype === 'string') {\n      // String type should be handled in CPU memory.\n      const values = getArrayFromDType(dtype, sizeFromShape(shape));\n      values.fill(value as string);\n      return ENGINE.makeTensor(values, shape, dtype, this) as Tensor<R>;\n    } else {\n      const program = new FillProgram(shape, value as number);\n      const customSetup = program.getCustomSetupFunc(value as number);\n      return this.compileAndRun(program, [], dtype, customSetup);\n    }\n  }\n\n  onesLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    if (x.dtype === 'string') {\n      throw new Error('onesLike is not supported under string dtype');\n    } else {\n      // TODO(cais, smilkov): Add WebGL shader for onesLike:\n      //   https://github.com/tensorflow/tfjs/issues/1293\n      return this.fill(x.shape, 1, x.dtype);\n    }\n  }\n\n  zerosLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    return this.fill(x.shape, x.dtype === 'string' ? '' : 0, x.dtype);\n  }\n\n  linspace(start: number, stop: number, num: number): Tensor1D {\n    // TODO: Use CPU implementation due to the precision problem in Safari.\n    return backend_util.linspaceImpl(start, stop, num);\n  }\n\n  makeTensorInfo(shape: number[], dtype: DataType): TensorInfo {\n    const dataId = this.write(null /* values */, shape, dtype);\n    this.texData.get(dataId).usage = null;\n    return {dataId, shape, dtype};\n  }\n\n  private makeOutput<T extends Tensor>(shape: number[], dtype: DataType): T {\n    const {dataId} = this.makeTensorInfo(shape, dtype);\n    return ENGINE.makeTensorFromDataId(dataId, shape, dtype, this) as T;\n  }\n\n  private unpackTensor(input: TensorInfo): TensorInfo {\n    const program = new UnpackProgram(input.shape);\n    return this.runWebGLProgram(program, [input], input.dtype);\n  }\n\n  private packTensor(input: TensorInfo): TensorInfo {\n    const program = new PackProgram(input.shape);\n    const preventEagerUnpackingOutput = true;\n    return this.runWebGLProgram(\n        program, [input], input.dtype, null /* customSetup */,\n        preventEagerUnpackingOutput);\n  }\n\n  private packedReshape(input: TensorInfo, afterShape: number[]): TensorInfo {\n    const input3DShape = [\n      webgl_util.getBatchDim(input.shape),\n      ...webgl_util.getRowsCols(input.shape)\n    ] as [number, number, number];\n    const input3D: TensorInfo = {\n      dtype: input.dtype,\n      shape: input3DShape,\n      dataId: input.dataId\n    };\n    const afterShapeAs3D = [\n      webgl_util.getBatchDim(afterShape), ...webgl_util.getRowsCols(afterShape)\n    ] as [number, number, number];\n\n    const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape);\n    const preventEagerUnpackingOfOutput = true;\n    const output = this.runWebGLProgram(\n        program, [input3D], input.dtype, null /* customSetup */,\n        preventEagerUnpackingOfOutput);\n    return {dataId: output.dataId, shape: afterShape, dtype: output.dtype};\n  }\n\n  private decode(dataId: DataId): TensorInfo {\n    const texData = this.texData.get(dataId);\n    const {isPacked, shape, dtype} = texData;\n    const shapeAs3D =\n        webgl_util.getShapeAs3D(shape) as [number, number, number];\n    let program;\n    if (isPacked) {\n      program = new DecodeMatrixPackedProgram(shapeAs3D);\n    } else {\n      program = new DecodeMatrixProgram(shapeAs3D);\n    }\n    const preventEagerUnpackingOfOutput = true;\n    const out = this.runWebGLProgram(\n        program, [{shape: shapeAs3D, dtype, dataId}], dtype,\n        null /* customSetup */, preventEagerUnpackingOfOutput);\n    return {dtype, shape, dataId: out.dataId};\n  }\n\n  runWebGLProgram(\n      program: GPGPUProgram, inputs: TensorInfo[], outputDtype: DataType,\n      customSetup?: (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => void,\n      preventEagerUnpackingOfOutput = false): TensorInfo {\n    const output = this.makeTensorInfo(program.outputShape, outputDtype);\n    const outData = this.texData.get(output.dataId);\n    if (program.packedOutput) {\n      outData.isPacked = true;\n    }\n    if (program.outPackingScheme === tex_util.PackingScheme.DENSE) {\n      const texelShape = tex_util.getDenseTexShape(program.outputShape);\n      // For a densely packed output, we explicitly set texShape\n      // so it doesn't get assigned later according to our typical packing\n      // scheme wherein a single texel can only contain values from adjacent\n      // rows/cols.\n      outData.texShape = texelShape.map(d => d * 2) as [number, number];\n    }\n    if (program.outTexUsage != null) {\n      outData.usage = program.outTexUsage;\n    }\n    if (sizeFromShape(output.shape) === 0) {\n      // Short-circuit the computation since the result is empty (has 0 in its\n      // shape).\n      outData.values = getTypedArrayFromDType(output.dtype as 'float32', 0);\n      return output;\n    }\n\n    const dataToDispose: TensorInfo[] = [];\n    const inputsData: TensorData[] = inputs.map(input => {\n      if (input.dtype === 'complex64') {\n        throw new Error(\n            `GPGPUProgram does not support complex64 input. For complex64 ` +\n            `dtypes, please separate the program into real and imaginary ` +\n            `parts.`);\n      }\n\n      let texData = this.texData.get(input.dataId);\n\n      if (texData.texture == null) {\n        if (!program.packedInputs &&\n            util.sizeFromShape(input.shape) <=\n                env().getNumber('WEBGL_SIZE_UPLOAD_UNIFORM')) {\n          // Upload small tensors that live on the CPU as uniforms, not as\n          // textures. Do this only when the environment supports 32bit floats\n          // due to problems when comparing 16bit floats with 32bit floats.\n          // TODO(https://github.com/tensorflow/tfjs/issues/821): Make it\n          // possible for packed shaders to sample from uniforms.\n          return {\n            shape: input.shape,\n            texData: null,\n            isUniform: true,\n            uniformValues: texData.values as TypedArray\n          };\n        }\n\n        // This ensures that if a packed program's inputs have not yet been\n        // uploaded to the GPU, they get uploaded as packed right off the bat.\n        if (program.packedInputs) {\n          texData.isPacked = true;\n          texData.shape = input.shape;\n        }\n      } else if (!!texData.isPacked !== !!program.packedInputs) {\n        input = texData.isPacked ? this.unpackTensor(input) :\n                                   this.packTensor(input);\n        dataToDispose.push(input);\n        texData = this.texData.get(input.dataId);\n      } else if (\n          texData.isPacked &&\n          !webgl_util.isReshapeFree(texData.shape, input.shape)) {\n        // This is a special case where a texture exists for a tensor\n        // but the shapes are incompatible (due to packing constraints) because\n        // the tensor did not have a chance to go through the packed reshape\n        // shader. This only happens when we reshape the *same* tensor to form\n        // *distinct* inputs to an op, e.g. dotting a vector with itself. This\n        // case will disappear once packed uploading is the default.\n\n        const savedInput = input;\n        const targetShape = input.shape;\n\n        input.shape = texData.shape;\n        input = this.packedReshape(input as Tensor, targetShape);\n        dataToDispose.push(input);\n        texData = this.texData.get(input.dataId);\n\n        savedInput.shape = targetShape;\n      }\n\n      this.uploadToGPU(input.dataId);\n      return {shape: input.shape, texData, isUniform: false};\n    });\n\n    this.uploadToGPU(output.dataId);\n    const outputData:\n        TensorData = {shape: output.shape, texData: outData, isUniform: false};\n    const key = gpgpu_math.makeShaderKey(program, inputsData, outputData);\n    const binary = this.getAndSaveBinary(key, () => {\n      return gpgpu_math.compileProgram(\n          this.gpgpu, program, inputsData, outputData);\n    });\n    const shouldTimeProgram = this.activeTimers != null;\n    let query: WebGLQuery|CPUTimerQuery;\n    if (shouldTimeProgram) {\n      query = this.startTimer();\n    }\n\n    gpgpu_math.runProgram(\n        this.gpgpu, binary, inputsData, outputData, customSetup);\n\n    dataToDispose.forEach(info => this.disposeData(info.dataId));\n\n    if (shouldTimeProgram) {\n      query = this.endTimer(query);\n      this.activeTimers.push(\n          {name: program.constructor.name, query: this.getQueryTime(query)});\n    }\n\n    if (!env().getBool('WEBGL_LAZILY_UNPACK') && outData.isPacked &&\n        preventEagerUnpackingOfOutput === false) {\n      const unpacked = this.unpackTensor(output);\n      this.disposeData(output.dataId);\n      return unpacked;\n    }\n    return output;\n  }\n\n  compileAndRun<K extends TensorInfo>(\n      program: GPGPUProgram, inputs: TensorInfo[], outputDtype?: DataType,\n      customSetup?: (gpgpu: GPGPUContext, webGLProgram: WebGLProgram) => void,\n      preventEagerUnpackingOfOutput = false): K {\n    outputDtype = outputDtype || inputs[0].dtype;\n    const outInfo = this.runWebGLProgram(\n        program, inputs, outputDtype, customSetup,\n        preventEagerUnpackingOfOutput);\n    return ENGINE.makeTensorFromDataId(\n               outInfo.dataId, outInfo.shape, outInfo.dtype) as {} as K;\n  }\n\n  private getAndSaveBinary(key: string, getBinary: () => GPGPUBinary):\n      GPGPUBinary {\n    if (!(key in this.binaryCache)) {\n      this.binaryCache[key] = getBinary();\n    }\n    return this.binaryCache[key];\n  }\n\n  getTextureManager(): TextureManager {\n    return this.textureManager;\n  }\n\n  private disposed = false;\n\n  dispose() {\n    if (this.disposed) {\n      return;\n    }\n    // Avoid disposing the compiled webgl programs during unit testing because\n    // it slows down test execution.\n    if (!env().getBool('IS_TEST')) {\n      const allKeys = Object.keys(this.binaryCache);\n      allKeys.forEach(key => {\n        this.gpgpu.deleteProgram(this.binaryCache[key].webGLProgram);\n        delete this.binaryCache[key];\n      });\n    }\n    this.textureManager.dispose();\n    if (this.canvas != null &&\n        (typeof (HTMLCanvasElement) !== 'undefined' &&\n         this.canvas instanceof HTMLCanvasElement)) {\n      this.canvas.remove();\n    } else {\n      this.canvas = null;\n    }\n    if (this.gpgpuCreatedLocally) {\n      this.gpgpu.program = null;\n      this.gpgpu.dispose();\n    }\n    this.disposed = true;\n  }\n\n  floatPrecision(): 16|32 {\n    if (this.floatPrecisionValue == null) {\n      this.floatPrecisionValue = tidy(() => {\n        if (!env().get('WEBGL_RENDER_FLOAT32_ENABLED')) {\n          // Momentarily switching DEBUG flag to false so we don't throw an\n          // error trying to upload a small value.\n          const debugFlag = env().getBool('DEBUG');\n          env().set('DEBUG', false);\n          const underflowCheckValue = this.abs(scalar(1e-8)).dataSync()[0];\n          env().set('DEBUG', debugFlag);\n\n          if (underflowCheckValue > 0) {\n            return 32;\n          }\n        }\n        return 16;\n      });\n    }\n    return this.floatPrecisionValue;\n  }\n  /** Returns the smallest representable number.  */\n  epsilon(): number {\n    return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n  }\n\n  private uploadToGPU(dataId: DataId): void {\n    const texData = this.texData.get(dataId);\n    const {shape, dtype, values, texture, usage, isPacked} = texData;\n\n    if (texture != null) {\n      // Array is already on GPU. No-op.\n      return;\n    }\n    const shouldTimeProgram = this.activeTimers != null;\n    let start: number;\n    if (shouldTimeProgram) {\n      start = util.now();\n    }\n\n    let texShape = texData.texShape;\n    if (texShape == null) {\n      texShape = webgl_util.getTextureShapeFromLogicalShape(shape, isPacked);\n      texData.texShape = texShape;\n    }\n\n    if (values != null) {\n      const shapeAs3D = webgl_util.getShapeAs3D(shape);\n\n      let program;\n      let width = texShape[1], height = texShape[0];\n      const isByteArray = values instanceof Uint8Array;\n\n      if (isPacked) {\n        [width, height] = tex_util.getPackedMatrixTextureShapeWidthHeight(\n            texShape[0], texShape[1]);\n        program = new EncodeMatrixPackedProgram(\n            shapeAs3D, [height, width], isByteArray);\n      } else {\n        program =\n            new EncodeMatrixProgram(shapeAs3D, [height, width], isByteArray);\n      }\n\n      const tempDenseInputHandle = this.makeTensorInfo([height, width], dtype);\n      if (isByteArray) {\n        this.texData.get(tempDenseInputHandle.dataId).usage =\n            TextureUsage.PIXELS;\n      } else {\n        this.texData.get(tempDenseInputHandle.dataId).usage =\n            TextureUsage.UPLOAD;\n      }\n      this.gpgpu.uploadDenseMatrixToTexture(\n          this.getTexture(tempDenseInputHandle.dataId), width, height,\n          values as TypedArray);\n\n      // We want the output to remain packed regardless of the value of\n      // WEBGL_PACK.\n      const preventEagerUnpacking = true;\n      const encodedOutputTarget = this.runWebGLProgram(\n          program, [tempDenseInputHandle], dtype, null, preventEagerUnpacking);\n\n      // Have the original texture assume the identity of the encoded output.\n      const outputTexData = this.texData.get(encodedOutputTarget.dataId);\n      texData.texture = outputTexData.texture;\n      texData.texShape = outputTexData.texShape;\n      texData.isPacked = outputTexData.isPacked;\n      texData.usage = outputTexData.usage;\n\n      this.disposeData(tempDenseInputHandle.dataId);\n      this.texData.delete(encodedOutputTarget.dataId);\n\n      // Once uploaded, don't store the values on cpu.\n      texData.values = null;\n      if (shouldTimeProgram) {\n        this.uploadWaitMs += util.now() - start;\n      }\n    } else {\n      const newTexture = this.acquireTexture(texShape, usage, dtype, isPacked);\n      texData.texture = newTexture;\n    }\n  }\n\n  private convertAndCacheOnCPU(dataId: DataId, float32Values?: Float32Array):\n      TypedArray {\n    const texData = this.texData.get(dataId);\n    const {dtype} = texData;\n\n    this.releaseGPUData(dataId);\n\n    if (float32Values != null) {\n      texData.values = float32ToTypedArray(float32Values, dtype as 'float32');\n    }\n    return texData.values as TypedArray;\n  }\n\n  private acquireTexture(\n      texShape: [number, number], texType: TextureUsage, dtype: DataType,\n      isPacked: boolean): WebGLTexture {\n    this.numBytesInGPU += this.computeBytes(texShape, dtype);\n    if (!this.warnedAboutMemory &&\n        this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) {\n      const mb = (this.numBytesInGPU / 1024 / 1024).toFixed(2);\n      this.warnedAboutMemory = true;\n      console.warn(\n          `High memory usage in GPU: ${mb} MB, ` +\n          `most likely due to a memory leak`);\n    }\n    return this.textureManager.acquireTexture(texShape, texType, isPacked);\n  }\n\n  private computeBytes(shape: [number, number], dtype: DataType) {\n    return shape[0] * shape[1] * util.bytesPerElement(dtype);\n  }\n}\n\nif (device_util.isBrowser()) {\n  ENGINE.registerBackend(\n      'webgl', () => new MathBackendWebGL(), 2 /* priority */);\n}\n\nfunction float32ToTypedArray<D extends NumericDataType>(\n    a: Float32Array, dtype: D): DataTypeMap[D] {\n  if (dtype === 'float32' || dtype === 'complex64') {\n    return a as DataTypeMap[D];\n  } else if (dtype === 'int32' || dtype === 'bool') {\n    const result = (dtype === 'int32') ? new Int32Array(a.length) :\n                                         new Uint8Array(a.length);\n    for (let i = 0; i < result.length; ++i) {\n      result[i] = Math.round(a[i]);\n    }\n    return result as DataTypeMap[D];\n  } else {\n    throw new Error(`Unknown dtype ${dtype}`);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {nearestDivisor} from '../util';\n\nimport {PARALLELIZE_THRESHOLD} from './reduce_util';\n\nexport interface SegOpInfo {\n  windowSize: number;\n  batchSize: number;\n  inSize: number;\n  numSegments: number;\n}\n\nexport function segOpComputeOptimalWindowSize(\n    inSize: number, numSegments: number): number {\n  let done = false;\n  let res;\n\n  if (inSize <= PARALLELIZE_THRESHOLD) {\n    res = inSize;\n    done = true;\n  } else {\n    res = nearestDivisor(inSize, Math.floor(Math.sqrt(inSize)));\n  }\n\n  while (!done) {\n    if (res > numSegments || res === inSize) {\n      done = true;\n    } else {\n      res = nearestDivisor(inSize, res + 1);\n    }\n  }\n  return res;\n}\n\nexport function computeOutShape(\n    aShape: number[], axis: number, numSegments: number): number[] {\n  const outShape = [];\n  const rank = aShape.length;\n  for (let dim = 0; dim < rank; dim++) {\n    if (dim !== axis) {\n      outShape.push(aShape[dim]);\n    } else {\n      outShape.push(numSegments);\n    }\n  }\n  return outShape;\n}\n\nexport interface GatherOpShapeInfo {\n  batchSize: number;\n  sliceSize: number;\n  dimSize: number;\n  outputShape: number[];\n}\nexport function collectGatherOpShapeInfo(\n    x: Tensor, indices: Tensor, axis: number): GatherOpShapeInfo {\n  const dimSize = x.shape[axis];\n\n  const outputShape: number[] = [];\n  let batchSize = 1;\n  let sliceSize = 1;\n  for (let i = 0; i < axis; i++) {\n    outputShape.push(x.shape[i]);\n    batchSize *= x.shape[i];\n  }\n\n  for (let i = 0; i < indices.rank; i++) {\n    outputShape.push(indices.shape[i]);\n  }\n\n  for (let i = axis + 1; i < x.rank; i++) {\n    outputShape.push(x.shape[i]);\n    sliceSize *= x.shape[i];\n  }\n\n  return {batchSize, sliceSize, dimSize, outputShape};\n}\n","// A port of an algorithm by Johannes Baagøe <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n  var me = this, mash = Mash();\n\n  me.next = function() {\n    var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n    me.s0 = me.s1;\n    me.s1 = me.s2;\n    return me.s2 = t - (me.c = t | 0);\n  };\n\n  // Apply the seeding algorithm from Baagoe.\n  me.c = 1;\n  me.s0 = mash(' ');\n  me.s1 = mash(' ');\n  me.s2 = mash(' ');\n  me.s0 -= mash(seed);\n  if (me.s0 < 0) { me.s0 += 1; }\n  me.s1 -= mash(seed);\n  if (me.s1 < 0) { me.s1 += 1; }\n  me.s2 -= mash(seed);\n  if (me.s2 < 0) { me.s2 += 1; }\n  mash = null;\n}\n\nfunction copy(f, t) {\n  t.c = f.c;\n  t.s0 = f.s0;\n  t.s1 = f.s1;\n  t.s2 = f.s2;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new Alea(seed),\n      state = opts && opts.state,\n      prng = xg.next;\n  prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n  prng.double = function() {\n    return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n  };\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nfunction Mash() {\n  var n = 0xefc8249d;\n\n  var mash = function(data) {\n    data = data.toString();\n    for (var i = 0; i < data.length; i++) {\n      n += data.charCodeAt(i);\n      var h = 0.02519603282416938 * n;\n      n = h >>> 0;\n      h -= n;\n      h *= n;\n      n = h >>> 0;\n      h -= n;\n      n += h * 0x100000000; // 2^32\n    }\n    return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n  };\n\n  return mash;\n}\n\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.alea = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n\n  // Set up generator function.\n  me.next = function() {\n    var t = me.x ^ (me.x << 11);\n    me.x = me.y;\n    me.y = me.z;\n    me.z = me.w;\n    return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n  };\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor128 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var t = (me.x ^ (me.x >>> 2));\n    me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n    return (me.d = (me.d + 362437 | 0)) +\n       (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n  };\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n  me.v = 0;\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    if (k == strseed.length) {\n      me.d = me.x << 10 ^ me.x >>> 4;\n    }\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  t.v = f.v;\n  t.d = f.d;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorwow = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    // Update xor generator.\n    var X = me.x, i = me.i, t, v, w;\n    t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n    t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n    t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n    t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n    t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n    X[i] = v;\n    me.i = (i + 1) & 7;\n    return v;\n  };\n\n  function init(me, seed) {\n    var j, w, X = [];\n\n    if (seed === (seed | 0)) {\n      // Seed state array using a 32-bit integer.\n      w = X[0] = seed;\n    } else {\n      // Seed state using a string.\n      seed = '' + seed;\n      for (j = 0; j < seed.length; ++j) {\n        X[j & 7] = (X[j & 7] << 15) ^\n            (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n      }\n    }\n    // Enforce an array length of 8, not all zeroes.\n    while (X.length < 8) X.push(0);\n    for (j = 0; j < 8 && X[j] === 0; ++j);\n    if (j == 8) w = X[7] = -1; else w = X[j];\n\n    me.x = X;\n    me.i = 0;\n\n    // Discard an initial 256 values.\n    for (j = 256; j > 0; --j) {\n      me.next();\n    }\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.x = f.x.slice();\n  t.i = f.i;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.x) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorshift7 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated.  For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1);                        // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897);   // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C.  This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    var w = me.w,\n        X = me.X, i = me.i, t, v;\n    // Update Weyl generator.\n    me.w = w = (w + 0x61c88647) | 0;\n    // Update xor generator.\n    v = X[(i + 34) & 127];\n    t = X[i = ((i + 1) & 127)];\n    v ^= v << 13;\n    t ^= t << 17;\n    v ^= v >>> 15;\n    t ^= t >>> 12;\n    // Update Xor generator array state.\n    v = X[i] = v ^ t;\n    me.i = i;\n    // Result is the combination.\n    return (v + (w ^ (w >>> 16))) | 0;\n  };\n\n  function init(me, seed) {\n    var t, v, i, j, w, X = [], limit = 128;\n    if (seed === (seed | 0)) {\n      // Numeric seeds initialize v, which is used to generates X.\n      v = seed;\n      seed = null;\n    } else {\n      // String seeds are mixed into v and X one character at a time.\n      seed = seed + '\\0';\n      v = 0;\n      limit = Math.max(limit, seed.length);\n    }\n    // Initialize circular array and weyl value.\n    for (i = 0, j = -32; j < limit; ++j) {\n      // Put the unicode characters into the array, and shuffle them.\n      if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n      // After 32 shuffles, take v as the starting w value.\n      if (j === 0) w = v;\n      v ^= v << 10;\n      v ^= v >>> 15;\n      v ^= v << 4;\n      v ^= v >>> 13;\n      if (j >= 0) {\n        w = (w + 0x61c88647) | 0;     // Weyl.\n        t = (X[j & 127] ^= (v + w));  // Combine xor and weyl to init array.\n        i = (0 == t) ? i + 1 : 0;     // Count zeroes.\n      }\n    }\n    // We have detected all zeroes; make the key nonzero.\n    if (i >= 128) {\n      X[(seed && seed.length || 0) & 127] = -1;\n    }\n    // Run the generator 512 times to further mix the state before using it.\n    // Factoring this as a function slows the main generator, so it is just\n    // unrolled here.  The weyl generator is not advanced while warming up.\n    i = 127;\n    for (j = 4 * 128; j > 0; --j) {\n      v = X[(i + 34) & 127];\n      t = X[i = ((i + 1) & 127)];\n      v ^= v << 13;\n      t ^= t << 17;\n      v ^= v >>> 15;\n      t ^= t >>> 12;\n      X[i] = v ^ t;\n    }\n    // Storing state as object members is faster than using closure variables.\n    me.w = w;\n    me.X = X;\n    me.i = i;\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.i = f.i;\n  t.w = f.w;\n  t.X = f.X.slice();\n  return t;\n};\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.X) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor4096 = impl;\n}\n\n})(\n  this,                                     // window object or global\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var b = me.b, c = me.c, d = me.d, a = me.a;\n    b = (b << 25) ^ (b >>> 7) ^ c;\n    c = (c - d) | 0;\n    d = (d << 24) ^ (d >>> 8) ^ a;\n    a = (a - b) | 0;\n    me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n    me.c = c = (c - d) | 0;\n    me.d = (d << 16) ^ (c >>> 16) ^ a;\n    return me.a = (a - b) | 0;\n  };\n\n  /* The following is non-inverted tyche, which has better internal\n   * bit diffusion, but which is about 25% slower than tyche-i in JS.\n  me.next = function() {\n    var a = me.a, b = me.b, c = me.c, d = me.d;\n    a = (me.a + me.b | 0) >>> 0;\n    d = me.d ^ a; d = d << 16 ^ d >>> 16;\n    c = me.c + d | 0;\n    b = me.b ^ c; b = b << 12 ^ d >>> 20;\n    me.a = a = a + b | 0;\n    d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n    me.c = c = c + d | 0;\n    b = b ^ c;\n    return me.b = (b << 7 ^ b >>> 25);\n  }\n  */\n\n  me.a = 0;\n  me.b = 0;\n  me.c = 2654435769 | 0;\n  me.d = 1367130551;\n\n  if (seed === Math.floor(seed)) {\n    // Integer seed.\n    me.a = (seed / 0x100000000) | 0;\n    me.b = seed | 0;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 20; k++) {\n    me.b ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.a = f.a;\n  t.b = f.b;\n  t.c = f.c;\n  t.d = f.d;\n  return t;\n};\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.tychei = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n","/*\nCopyright 2014 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\nvar global = this,\n    width = 256,        // each RC4 output is 0 <= x < 256\n    chunks = 6,         // at least six RC4 outputs for each double\n    digits = 52,        // there are 52 significant digits in a double\n    rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n    significance = math.pow(2, digits),\n    overflow = significance * 2,\n    mask = width - 1,\n    nodecrypto;         // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n  var key = [];\n  options = (options == true) ? { entropy: true } : (options || {});\n\n  // Flatten the seed string or build one from local entropy if needed.\n  var shortseed = mixkey(flatten(\n    options.entropy ? [seed, tostring(pool)] :\n    (seed == null) ? autoseed() : seed, 3), key);\n\n  // Use the seed to initialize an ARC4 generator.\n  var arc4 = new ARC4(key);\n\n  // This function returns a random double in [0, 1) that contains\n  // randomness in every bit of the mantissa of the IEEE 754 value.\n  var prng = function() {\n    var n = arc4.g(chunks),             // Start with a numerator n < 2 ^ 48\n        d = startdenom,                 //   and denominator d = 2 ^ 48.\n        x = 0;                          //   and no 'extra last byte'.\n    while (n < significance) {          // Fill up all significant digits by\n      n = (n + x) * width;              //   shifting numerator and\n      d *= width;                       //   denominator and generating a\n      x = arc4.g(1);                    //   new least-significant-byte.\n    }\n    while (n >= overflow) {             // To avoid rounding up, before adding\n      n /= 2;                           //   last byte, shift everything\n      d /= 2;                           //   right using integer math until\n      x >>>= 1;                         //   we have exactly the desired bits.\n    }\n    return (n + x) / d;                 // Form the number within [0, 1).\n  };\n\n  prng.int32 = function() { return arc4.g(4) | 0; }\n  prng.quick = function() { return arc4.g(4) / 0x100000000; }\n  prng.double = prng;\n\n  // Mix the randomness into accumulated entropy.\n  mixkey(tostring(arc4.S), pool);\n\n  // Calling convention: what to return as a function of prng, seed, is_math.\n  return (options.pass || callback ||\n      function(prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) { copy(state, arc4); }\n          // Only provide the .state method if requested via options.state.\n          prng.state = function() { return copy(arc4, {}); }\n        }\n\n        // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n        if (is_math_call) { math[rngname] = prng; return seed; }\n\n        // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(\n  prng,\n  shortseed,\n  'global' in options ? options.global : (this == math),\n  options.state);\n}\nmath['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation.  The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4.  Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n  var t, keylen = key.length,\n      me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n  // The empty key [] is treated as [0].\n  if (!keylen) { key = [keylen++]; }\n\n  // Set up S using the standard key scheduling algorithm.\n  while (i < width) {\n    s[i] = i++;\n  }\n  for (i = 0; i < width; i++) {\n    s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n    s[j] = t;\n  }\n\n  // The \"g\" method returns the next (count) outputs as one number.\n  (me.g = function(count) {\n    // Using instance members instead of closure state nearly doubles speed.\n    var t, r = 0,\n        i = me.i, j = me.j, s = me.S;\n    while (count--) {\n      t = s[i = mask & (i + 1)];\n      r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n    }\n    me.i = i; me.j = j;\n    return r;\n    // For robust unpredictability, the function call below automatically\n    // discards an initial batch of values.  This is called RC4-drop[256].\n    // See http://google.com/search?q=rsa+fluhrer+response&btnI\n  })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n  t.i = f.i;\n  t.j = f.j;\n  t.S = f.S.slice();\n  return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n  var result = [], typ = (typeof obj), prop;\n  if (depth && typ == 'object') {\n    for (prop in obj) {\n      try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n    }\n  }\n  return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n  var stringseed = seed + '', smear, j = 0;\n  while (j < stringseed.length) {\n    key[mask & j] =\n      mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n  }\n  return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n  try {\n    var out;\n    if (nodecrypto && (out = nodecrypto.randomBytes)) {\n      // The use of 'out' to remember randomBytes makes tight minified code.\n      out = out(width);\n    } else {\n      out = new Uint8Array(width);\n      (global.crypto || global.msCrypto).getRandomValues(out);\n    }\n    return tostring(out);\n  } catch (e) {\n    var browser = global.navigator,\n        plugins = browser && browser.plugins;\n    return [+new Date, global, plugins, global.screen, tostring(pool)];\n  }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n  return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool.  Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n  module.exports = seedrandom;\n  // When in node.js, try using crypto package for autoseeding.\n  try {\n    nodecrypto = require('crypto');\n  } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n  define(function() { return seedrandom; });\n}\n\n// End anonymous scope, and pass initial values.\n})(\n  [],     // pool: entropy pool starts empty\n  Math    // math: package containing random, pow, and seedrandom\n);\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random();       // 0 <= x < 1.  Every bit is random.\n// var x = random.quick(); // 0 <= x < 1.  32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three.  It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures.  Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {AddNInputs} from '../kernel_names';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {op} from './operation';\n\n/**\n * Adds a list of `tf.Tensor`s element-wise, each with the same shape and dtype.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n *\n * tf.addN([a, b, c]).print();\n * ```\n * @param tensors A list of tensors with the same shape and dtype.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction addN_<T extends Tensor>(tensors: Array<T|TensorLike>): T {\n  util.assert(\n      Array.isArray(tensors),\n      () => 'The argument passed to tf.addN() must be a list of tensors');\n  util.assert(\n      tensors.length >= 1,\n      () => `Must pass at least one tensor to tf.addN(), but got ` +\n          `${tensors.length}`);\n\n  const $tensors =\n      tensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'addN'));\n\n  const firstTensor = $tensors[0];\n  $tensors.forEach(t => {\n    if (t.dtype !== firstTensor.dtype) {\n      throw new Error(\n          'All tensors passed to tf.addN() must have the same dtype');\n    }\n  });\n\n  $tensors.forEach(t => {\n    if (!util.arraysEqual(t.shape, firstTensor.shape)) {\n      throw new Error(\n          'All tensors passed to tf.addN() must have the same shape');\n    }\n  });\n\n  const forward: ForwardFunc<Tensor> = (backend, save) =>\n      backend.addN($tensors);\n\n  const inputs: AddNInputs = $tensors;\n\n  return ENGINE.runKernelFunc(\n             forward, inputs as {} as NamedTensorMap, null /* grad */,\n             'AddN') as T;\n}\n\nexport const addN = op({addN_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {deprecationWarn} from '../globals';\nimport {Tensor, Tensor4D} from '../tensor';\nimport {Rank} from '../types';\n\nexport function warnDeprecation(): void {\n  deprecationWarn(\n      'tf.batchNormalization() is going away. ' +\n      'Use tf.batchNorm() instead, and note the positional argument change ' +\n      'of scale, offset, and varianceEpsilon');\n}\n\nexport function xAs4D<R extends Rank>(x: Tensor<R>) {\n  let x4D: Tensor4D;\n  if (x.rank === 0 || x.rank === 1) {\n    x4D = x.as4D(1, 1, 1, x.size);\n  } else if (x.rank === 2) {\n    x4D = x.as4D(1, 1, x.shape[0], x.shape[1]);\n  } else if (x.rank === 3) {\n    x4D = x.as4D(1, x.shape[0], x.shape[1], x.shape[2]);\n  } else {\n    x4D = x as Tensor4D;\n  }\n\n  return x4D;\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {FusedBatchNormAttrs, FusedBatchNormInputs} from '../kernel_names';\nimport {NamedAttrMap} from '../kernel_registry';\nimport {Tensor, Tensor1D, Tensor4D} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {Rank, TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {warnDeprecation, xAs4D} from './batchnorm_util';\nimport {op} from './operation';\n\n/**\n * @deprecated Please use `tf.batchNorm` instead and note the positional\n *     argument change of scale, offset, and varianceEpsilon.\n */\nfunction batchNormalization_<R extends Rank>(\n    x: Tensor<R>|TensorLike, mean: Tensor<R>|Tensor1D|TensorLike,\n    variance: Tensor<R>|Tensor1D|TensorLike, varianceEpsilon = .001,\n    scale?: Tensor<R>|Tensor1D|TensorLike,\n    offset?: Tensor<R>|Tensor1D|TensorLike): Tensor<R> {\n  warnDeprecation();\n  return batchNorm_(x, mean, variance, offset, scale, varianceEpsilon);\n}\n\n/**\n * Batch normalization.\n *\n * As described in\n * [http://arxiv.org/abs/1502.03167](http://arxiv.org/abs/1502.03167).\n *\n * Mean, variance, scale, and offset can be of two shapes:\n *   - The same shape as the input.\n *   - In the common case, the depth dimension is the last dimension of x, so\n *     the values would be an `tf.Tensor1D` of shape [depth].\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that parameters passed are of given rank\n *   - `tf.batchNorm2d`\n *   - `tf.batchNorm3d`\n *   - `tf.batchNorm4d`\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction batchNorm_<R extends Rank>(\n    x: Tensor<R>|TensorLike, mean: Tensor<R>|Tensor1D|TensorLike,\n    variance: Tensor<R>|Tensor1D|TensorLike,\n    offset?: Tensor<R>|Tensor1D|TensorLike,\n    scale?: Tensor<R>|Tensor1D|TensorLike,\n    varianceEpsilon?: number): Tensor<R> {\n  if (varianceEpsilon == null) {\n    varianceEpsilon = 0.001;\n  }\n  const $x = convertToTensor(x, 'x', 'batchNorm');\n  const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n  const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n  let $scale: Tensor<R>|Tensor1D;\n  if (scale != null) {\n    $scale = convertToTensor(scale, 'scale', 'batchNorm');\n  }\n  let $offset: Tensor<R>|Tensor1D;\n  if (offset != null) {\n    $offset = convertToTensor(offset, 'offset', 'batchNorm');\n  }\n\n  util.assert(\n      $mean.rank === $variance.rank,\n      () => 'Batch normalization gradient requires mean and variance to have ' +\n          'equal ranks.');\n  util.assert(\n      $offset == null || $mean.rank === $offset.rank,\n      () => 'Batch normalization gradient requires mean and offset to have ' +\n          'equal ranks.');\n  util.assert(\n      $scale == null || $mean.rank === $scale.rank,\n      () => 'Batch normalization gradient requires mean and scale to have ' +\n          'equal ranks.');\n\n  const forward: ForwardFunc<Tensor> = (backend, save) => {\n    const x4D: Tensor4D = xAs4D($x);\n\n    const res = backend.batchNormalization(\n        x4D, as1DOr4D($mean), as1DOr4D($variance), varianceEpsilon,\n        as1DOr4D($scale), as1DOr4D($offset));\n\n    save([$x, $mean, $variance, $scale]);\n\n    return res;\n  };\n\n  const inputs: FusedBatchNormInputs =\n      {x: $x, scale: $scale, offset: $offset, mean: $mean, variance: $variance};\n\n  const attrs: FusedBatchNormAttrs = {varianceEpsilon};\n\n  const res = ENGINE.runKernelFunc(\n      forward, inputs as {} as NamedTensorMap, null /* gradient */,\n      'FusedBatchNorm', attrs as {} as NamedAttrMap);\n\n  return res.reshape($x.shape);\n}\n\nfunction as1DOr4D(x: Tensor): Tensor4D|Tensor1D {\n  if (x == null) {\n    return null;\n  }\n  if (x.rank === 0) {\n    return x.as1D();\n  } else if (x.rank === 1) {\n    return x as Tensor1D;\n  } else if (x.rank === 2) {\n    return x.as4D(1, 1, x.shape[0], x.shape[1]);\n  } else if (x.rank === 3) {\n    return x.as4D(1, x.shape[0], x.shape[1], x.shape[2]);\n  }\n  return x as Tensor4D;\n}\n\n// todo(yassogba): Remove batchNormalization since it is deprecated.\nexport const batchNormalization = op({batchNormalization_});\nexport const batchNorm = op({batchNorm_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor1D, Tensor2D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {batchNorm} from './batchnorm';\nimport {warnDeprecation} from './batchnorm_util';\nimport {op} from './operation';\n\n/**\n * Batch normalization, strictly for 2D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm2d_(\n    x: Tensor2D|TensorLike, mean: Tensor2D|Tensor1D|TensorLike,\n    variance: Tensor2D|Tensor1D|TensorLike,\n    offset?: Tensor2D|Tensor1D|TensorLike, scale?: Tensor2D|Tensor1D|TensorLike,\n    varianceEpsilon?: number): Tensor2D {\n  const $x = convertToTensor(x, 'x', 'batchNorm');\n  const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n  const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n  let $scale: Tensor2D|Tensor1D;\n  if (scale != null) {\n    $scale = convertToTensor(scale, 'scale', 'batchNorm');\n  }\n  let $offset: Tensor2D|Tensor1D;\n  if (offset != null) {\n    $offset = convertToTensor(offset, 'offset', 'batchNorm');\n  }\n  util.assert(\n      $x.rank === 2,\n      () => `Error in batchNorm3D: x must be rank 3 but got rank ` +\n          `${$x.rank}.`);\n  util.assert(\n      $mean.rank === 2 || $mean.rank === 1,\n      () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but ` +\n          `got rank ${$mean.rank}.`);\n  util.assert(\n      $variance.rank === 2 || $variance.rank === 1,\n      () => `Error in batchNorm2D: variance must be rank 2 or rank 1 ` +\n          `but got rank ${$variance.rank}.`);\n  if ($scale != null) {\n    util.assert(\n        $scale.rank === 2 || $scale.rank === 1,\n        () => `Error in batchNorm2D: scale must be rank 2 or rank 1 ` +\n            `but got rank ${$scale.rank}.`);\n  }\n  if ($offset != null) {\n    util.assert(\n        $offset.rank === 2 || $offset.rank === 1,\n        () => `Error in batchNorm2D: offset must be rank 2 or rank 1 ` +\n            `but got rank ${$offset.rank}.`);\n  }\n\n  return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\n\n/**\n * @deprecated Please use `tf.batchNorm2d` instead and note the positional\n *     argument change of scale, offset, and varianceEpsilon.\n */\nfunction batchNormalization2d_(\n    x: Tensor2D|TensorLike, mean: Tensor2D|Tensor1D|TensorLike,\n    variance: Tensor2D|Tensor1D|TensorLike, varianceEpsilon = .001,\n    scale?: Tensor2D|Tensor1D|TensorLike,\n    offset?: Tensor2D|Tensor1D|TensorLike): Tensor2D {\n  warnDeprecation();\n  return batchNorm2d_(x, mean, variance, offset, scale, varianceEpsilon);\n}\n\n// todo(yassogba): Remove batchNormalization2d since it is deprecated.\nexport const batchNormalization2d = op({batchNormalization2d_});\nexport const batchNorm2d = op({batchNorm2d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor1D, Tensor3D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {batchNorm} from './batchnorm';\nimport {warnDeprecation} from './batchnorm_util';\nimport {op} from './operation';\n\n/**\n * Batch normalization, strictly for 3D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm3d_(\n    x: Tensor3D|TensorLike, mean: Tensor3D|Tensor1D|TensorLike,\n    variance: Tensor3D|Tensor1D|TensorLike,\n    offset?: Tensor3D|Tensor1D|TensorLike, scale?: Tensor3D|Tensor1D|TensorLike,\n    varianceEpsilon?: number): Tensor3D {\n  const $x = convertToTensor(x, 'x', 'batchNorm');\n  const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n  const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n  let $scale: Tensor3D|Tensor1D;\n  if (scale != null) {\n    $scale = convertToTensor(scale, 'scale', 'batchNorm');\n  }\n  let $offset: Tensor3D|Tensor1D;\n  if (offset != null) {\n    $offset = convertToTensor(offset, 'offset', 'batchNorm');\n  }\n  util.assert(\n      $x.rank === 3,\n      () => `Error in batchNorm3D: x must be rank 3 but got rank ` +\n          `${$x.rank}.`);\n  util.assert(\n      $mean.rank === 3 || $mean.rank === 1,\n      () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but ` +\n          `got rank ${$mean.rank}.`);\n  util.assert(\n      $variance.rank === 3 || $variance.rank === 1,\n      () => `Error in batchNorm3D: variance must be rank 3 or rank 1 ` +\n          `but got rank ${$variance.rank}.`);\n  if ($scale != null) {\n    util.assert(\n        $scale.rank === 3 || $scale.rank === 1,\n        () => `Error in batchNorm3D: scale must be rank 3 or rank 1 ` +\n            `but got rank ${$scale.rank}.`);\n  }\n  if ($offset != null) {\n    util.assert(\n        $offset.rank === 3 || $offset.rank === 1,\n        () => `Error in batchNorm3D: offset must be rank 3 or rank 1 ` +\n            `but got rank ${$offset.rank}.`);\n  }\n\n  return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\n\n/**\n * @deprecated Please use `tf.batchNorm3d` instead and note the positional\n *     argument change of scale, offset, and varianceEpsilon.\n */\nfunction batchNormalization3d_(\n    x: Tensor3D|TensorLike, mean: Tensor3D|Tensor1D|TensorLike,\n    variance: Tensor3D|Tensor1D|TensorLike, varianceEpsilon = .001,\n    scale?: Tensor3D|Tensor1D|TensorLike,\n    offset?: Tensor3D|Tensor1D|TensorLike): Tensor3D {\n  warnDeprecation();\n  return batchNorm3d_(x, mean, variance, offset, scale, varianceEpsilon);\n}\n\n// todo(yassogba): Remove batchNormalization3d since it is deprecated.\nexport const batchNormalization3d = op({batchNormalization3d_});\nexport const batchNorm3d = op({batchNorm3d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor1D, Tensor4D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {batchNorm} from './batchnorm';\nimport {warnDeprecation} from './batchnorm_util';\nimport {op} from './operation';\n\n/**\n * Batch normalization, strictly for 4D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm4d_(\n    x: Tensor4D|TensorLike, mean: Tensor4D|Tensor1D|TensorLike,\n    variance: Tensor4D|Tensor1D|TensorLike,\n    offset?: Tensor4D|Tensor1D|TensorLike, scale?: Tensor4D|Tensor1D|TensorLike,\n    varianceEpsilon?: number): Tensor4D {\n  const $x = convertToTensor(x, 'x', 'batchNorm');\n  const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n  const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n  let $scale: Tensor4D|Tensor1D;\n  if (scale != null) {\n    $scale = convertToTensor(scale, 'scale', 'batchNorm');\n  }\n  let $offset: Tensor4D|Tensor1D;\n  if (offset != null) {\n    $offset = convertToTensor(offset, 'offset', 'batchNorm');\n  }\n  util.assert(\n      $x.rank === 4,\n      () => `Error in batchNorm4D: x must be rank 4 but got rank ` +\n          `${$x.rank}.`);\n  util.assert(\n      $mean.rank === 4 || $mean.rank === 1,\n      () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but ` +\n          `got rank ${$mean.rank}.`);\n  util.assert(\n      $variance.rank === 4 || $variance.rank === 1,\n      () => `Error in batchNorm4D: variance must be rank 4 or rank 1 ` +\n          `but got rank ${$variance.rank}.`);\n  if ($scale != null) {\n    util.assert(\n        $scale.rank === 4 || $scale.rank === 1,\n        () => `Error in batchNorm4D: scale must be rank 4 or rank 1 ` +\n            `but got rank ${$scale.rank}.`);\n  }\n  if ($offset != null) {\n    util.assert(\n        $offset.rank === 4 || $offset.rank === 1,\n        () => `Error in batchNorm4D: offset must be rank 4 or rank 1 ` +\n            `but got rank ${$offset.rank}.`);\n  }\n  return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\n\n/**\n * @deprecated Please use `tf.batchNorm4d` instead and note the positional\n *     argument change of scale, offset, and varianceEpsilon.\n */\nfunction batchNormalization4d_(\n    x: Tensor4D|TensorLike, mean: Tensor4D|Tensor1D|TensorLike,\n    variance: Tensor4D|Tensor1D|TensorLike, varianceEpsilon = .001,\n    scale?: Tensor4D|Tensor1D|TensorLike,\n    offset?: Tensor4D|Tensor1D|TensorLike): Tensor4D {\n  warnDeprecation();\n  return batchNorm4d_(x, mean, variance, offset, scale, varianceEpsilon);\n}\n\n// todo(yassogba): Remove batchNormalization4d since it is deprecated.\nexport const batchNormalization4d = op({batchNormalization4d_});\nexport const batchNorm4d = op({batchNorm4d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {KernelBackend} from '../backends/backend';\nimport {ENGINE} from '../engine';\nimport {BroadcastTo, BroadCastToAttrs, BroadcastToInputs} from '../kernel_names';\nimport {NamedAttrMap} from '../kernel_registry';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {Rank, ShapeMap, TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Broadcast an array to a compatible shape NumPy-style.\n *\n * The tensor's shape is compared to the broadcast shape from end to beginning.\n * Ones are prepended to the tensor's shape until is has the same length as\n * the broadcast shape. If input.shape[i]==shape[i], the (i+1)-th axis is\n * already broadcast-compatible. If input.shape[i]==1 and shape[i]==N, then\n * the input tensor is tiled N times along that axis (using tf.tile).\n *\n * @param input The tensor that is to be broadcasted.\n * @param shape The input is to be broadcast to this shape.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction broadcastTo_<R extends Rank>(\n    x: Tensor|TensorLike, shape: ShapeMap[R]): Tensor<R> {\n  let input = convertToTensor(x, 'broadcastTo', 'x');\n  const xShape = input.shape;\n\n  if (shape.some(d => !(d > 0) || d % 1 !== 0)) {\n    throw new Error(`broadcastTo(): Invalid broadcast shape [${shape}].`);\n  }\n\n  if (shape.length < input.rank) {\n    throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${\n        input.rank}.`);\n  }\n\n  if (shape.length > input.rank) {\n    const newShape = input.shape.slice();\n    while (newShape.length < shape.length) {\n      newShape.unshift(1);\n    }\n    input = input.reshape(newShape);\n  }\n\n  const inputShape = input.shape;\n  const reps: number[] = Array.from(shape);\n  for (let i = shape.length - 1; i >= 0; i--) {\n    if (inputShape[i] === shape[i]) {\n      reps[i] = 1;\n    } else if (input.shape[i] !== 1) {\n      throw new Error(\n          `broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`);\n    }\n  }\n  const axes = reps.map((n, i) => n > 1 ? i : -1).filter(i => i >= 0);\n\n  if (axes.length === 0) {\n    return input.clone() as Tensor<R>;\n  }\n\n  const forward = (backend: KernelBackend) => backend.tile(input, reps);\n  const keepDims = true;\n  const backward = (dy: Tensor) => ({x: () => dy.sum(axes, keepDims)});\n\n  const inputs: BroadcastToInputs = {x: input};\n  const attrs: BroadCastToAttrs = {shape, inputShape};\n\n  return ENGINE.runKernelFunc(\n             forward, inputs as unknown as NamedTensorMap, backward,\n             BroadcastTo, attrs as unknown as NamedAttrMap) as Tensor<R>;\n}\n\nexport const broadcastTo = op({broadcastTo_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Identity} from '../kernel_names';\n\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Creates a new tensor with the same values and shape as the specified\n * tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n *\n * x.clone().print();\n * ```\n *\n * @param x The tensor to clone.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction clone_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'clone', null);\n  const forward = () =>\n      ENGINE.makeTensorFromDataId($x.dataId, $x.shape, $x.dtype) as T;\n\n  // Note this op is called tf.identity in python. Hence the kernel name used\n  // here.\n  return ENGINE.runKernelFunc(forward, {x: $x}, null /* grad */, Identity);\n}\n\nexport const clone = op({clone_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {whereImpl} from '../backends/where_impl';\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor2D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assert, assertShapesMatch} from '../util';\nimport {assertAndGetBroadcastShape} from './broadcast_util';\nimport {op} from './operation';\nimport {zerosLike} from './tensor_ops';\n\n/**\n * Returns the truth value of `NOT x` element-wise.\n *\n * ```js\n * const a = tf.tensor1d([false, true], 'bool');\n *\n * a.logicalNot().print();\n * ```\n *\n * @param x The input tensor. Must be of dtype 'bool'.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction logicalNot_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'logicalNot', 'bool');\n  return ENGINE.runKernelFunc(backend => backend.logicalNot($x), {$x});\n}\n\n/**\n * Returns the truth value of `a AND b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalAnd(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction logicalAnd_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'logicalAnd', 'bool');\n  const $b = convertToTensor(b, 'b', 'logicalAnd', 'bool');\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc(\n             backend => backend.logicalAnd($a, $b), {a: $a, b: $b},\n             null /* grad */, 'LogicalAnd') as T;\n}\n\n/**\n * Returns the truth value of `a OR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalOr(b).print();\n * ```\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction logicalOr_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'logicalOr', 'bool');\n  const $b = convertToTensor(b, 'b', 'logicalOr', 'bool');\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc(backend => backend.logicalOr($a, $b), {$a, $b}) as\n      T;\n}\n\n/**\n * Returns the truth value of `a XOR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalXor(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction logicalXor_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'logicalXor', 'bool');\n  const $b = convertToTensor(b, 'b', 'logicalXor', 'bool');\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  // x ^ y = (x | y) & ~(x & y)\n  return logicalOr(a, b).logicalAnd(logicalAnd(a, b).logicalNot()) as T;\n}\n\n/**\n * Returns the elements, either `a` or `b` depending on the `condition`.\n *\n * If the condition is true, select from `a`, otherwise select from `b`.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const a = tf.tensor1d([1 , 2, 3]);\n * const b = tf.tensor1d([-1, -2, -3]);\n *\n * a.where(cond, b).print();\n * ```\n *\n * @param condition The input condition. Must be of dtype bool.\n * @param a If `condition` is rank 1, `a` may have a higher rank but\n *     its first dimension must match the size of `condition`.\n * @param b A tensor with the same shape and type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction where_<T extends Tensor>(\n    condition: Tensor|TensorLike, a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'where');\n  const $b = convertToTensor(b, 'b', 'where');\n  const $condition = convertToTensor(condition, 'condition', 'where', 'bool');\n\n  assertShapesMatch($a.shape, $b.shape, 'Error in where: ');\n\n  if ($condition.rank === 1) {\n    // If condition rank is 1, then the first dimension must match the size of\n    // condition.\n    assert(\n        $condition.shape[0] === $a.shape[0],\n        () => 'The first dimension of `a` must match the size of `condition`.');\n  } else {\n    // A must have the same shape as condition.\n    assertShapesMatch($condition.shape, $b.shape, 'Error in where: ');\n  }\n\n  // TODO(julianoks): Return null for condition gradient\n  // when backprop supports it.\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$condition] = saved;\n    return {\n      $condition: () => zerosLike($condition).toFloat(),\n      $a: () => dy.mul($condition.cast(dy.dtype)),\n      $b: () => dy.mul($condition.logicalNot().cast(dy.dtype))\n    } as {$a: () => T, $b: () => T, $condition: () => T};\n  };\n\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.select($condition, $a, $b);\n    save([$condition]);\n    return res;\n  }, {$condition, $a, $b}, grad) as T;\n}\n\n/**\n * Returns the coordinates of true elements of condition.\n *\n * The coordinates are returned in a 2-D tensor where the first dimension (rows)\n * represents the number of true elements, and the second dimension (columns)\n * represents the coordinates of the true elements. Keep in mind, the shape of\n * the output tensor can vary depending on how many true values there are in\n * input. Indices are output in row-major order. The resulting tensor has the\n * shape `[numTrueElems, condition.rank]`.\n *\n * This is analogous to calling the python `tf.where(cond)` without an x or y.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const result = await tf.whereAsync(cond);\n * result.print();\n * ```\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nasync function whereAsync_(condition: Tensor|TensorLike): Promise<Tensor2D> {\n  const $condition =\n      convertToTensor(condition, 'condition', 'whereAsync', 'bool');\n  const vals = await $condition.data();\n  const res = whereImpl($condition.shape, vals);\n  if (condition !== $condition) {\n    $condition.dispose();\n  }\n  return res;\n}\n\nexport const logicalAnd = op({logicalAnd_});\nexport const logicalNot = op({logicalNot_});\nexport const logicalOr = op({logicalOr_});\nexport const logicalXor = op({logicalXor_});\nexport const where = op({where_});\nexport const whereAsync = whereAsync_;\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {div} from './div';\nimport {where} from './logical_ops';\nimport {op} from './operation';\nimport {zerosLike} from './tensor_ops';\n\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting. Return 0\n * if denominator is 0.\n *\n * We also expose `tf.divStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n * const c = tf.tensor1d([0, 0, 0, 0]);\n *\n * a.divNoNan(b).print();  // or tf.divNoNan(a, b)\n * a.divNoNan(c).print();  // or tf.divNoNan(a, c)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n * const c = tf.scalar(0);\n *\n * a.divNoNan(b).print();  // or tf.divNoNan(a, b)\n * a.divNoNan(c).print();  // or tf.divNoNan(a, c)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction divNoNan_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  // TODO: Make this into its own kernel.\n  let $a = convertToTensor(a, 'a', 'div');\n  let $b = convertToTensor(b, 'b', 'div');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const divResult = div($a, $b);\n  const zeros = zerosLike(divResult);\n  const bEqualsZero = $b.equal(zeros);\n  return where(bEqualsZero, zeros, divResult) as T;\n}\n\nexport const divNoNan = op({divNoNan_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {Tile, TileAttrs, TileInputs} from '../kernel_names';\nimport {NamedAttrMap} from '../kernel_registry';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {DataType, TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {op} from './operation';\n\n/**\n * Construct a tensor by repeating it the number of times given by reps.\n *\n * This operation creates a new tensor by replicating `input` `reps`\n * times. The output tensor's i'th dimension has `input.shape[i] *\n * reps[i]` elements, and the values of `input` are replicated\n * `reps[i]` times along the i'th dimension. For example, tiling\n * `[a, b, c, d]` by `[2]` produces `[a, b, c, d, a, b, c, d]`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n *\n * a.tile([2]).print();    // or a.tile([2])\n * ```\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.tile([1, 2]).print();  // or a.tile([1, 2])\n * ```\n * @param x The tensor to tile.\n * @param reps Determines the number of replications per dimension.\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction tile_<T extends Tensor>(x: T|TensorLike, reps: number[]): T {\n  const parseAs: DataType = null;\n  const $x = convertToTensor(x, 'x', 'tile', parseAs);\n  util.assert(\n      $x.rank === reps.length,\n      () => `Error in transpose: rank of input ${$x.rank} ` +\n          `must match length of reps ${reps}.`);\n\n  const forward: ForwardFunc<T> = (backend, save) => {\n    const res = backend.tile($x, reps);\n    save([$x]);\n    return res;\n  };\n\n  const inputsToSave = [$x];\n  const inputs: TileInputs = {x: $x};\n  const attrs: TileAttrs = {reps};\n\n  return ENGINE.runKernelFunc(\n      forward, inputs as unknown as NamedTensorMap, null /* grad */, Tile,\n      attrs as unknown as NamedAttrMap, inputsToSave);\n}\n\nexport const tile = op({tile_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor2D} from '../tensor';\nimport {DataType} from '../types';\n\nimport {buffer, expandDims} from './array_ops';\nimport {op} from './operation';\nimport {tile} from './tile';\n\n/**\n * Create an identity matrix.\n *\n * @param numRows Number of rows.\n * @param numColumns Number of columns. Defaults to `numRows`.\n * @param batchShape If provided, will add the batch shape to the beginning\n *   of the shape of the returned `tf.Tensor` by repeating the identity\n *   matrix.\n * @param dtype Data type.\n * @returns Identity matrix of the specified size and data type, possibly\n *   with batch repetition if `batchShape` is specified.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction eye_(\n    numRows: number, numColumns?: number,\n    batchShape?:\n        [\n          number\n        ]|[number,\n           number]|[number, number, number]|[number, number, number, number],\n    dtype: DataType = 'float32'): Tensor2D {\n  if (numColumns == null) {\n    numColumns = numRows;\n  }\n  const buff = buffer([numRows, numColumns], dtype);\n  const n = numRows <= numColumns ? numRows : numColumns;\n  for (let i = 0; i < n; ++i) {\n    buff.set(1, i, i);\n  }\n  const out = buff.toTensor().as2D(numRows, numColumns);\n  if (batchShape == null) {\n    return out;\n  } else {\n    if (batchShape.length === 1) {\n      return tile(expandDims(out, 0), [batchShape[0], 1, 1]);\n    } else if (batchShape.length === 2) {\n      return tile(\n          expandDims(expandDims(out, 0), 0),\n          [batchShape[0], batchShape[1], 1, 1]);\n    } else if (batchShape.length === 3) {\n      return tile(\n          expandDims(expandDims(expandDims(out, 0), 0), 0),\n          [batchShape[0], batchShape[1], batchShape[2], 1, 1]);\n    } else {\n      throw new Error(\n          `eye() currently supports only 1D and 2D ` +\n          // tslint:disable-next-line:no-any\n          `batchShapes, but received ${(batchShape as any).length}D.`);\n    }\n  }\n}\n\nexport const eye = op({eye_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor1D, Tensor2D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * Creates a `tf.Tensor` with values drawn from a multinomial distribution.\n *\n * ```js\n * const probs = tf.tensor([.75, .25]);\n * tf.multinomial(probs, 3).print();\n * ```\n *\n * @param logits 1D array with unnormalized log-probabilities, or\n *     2D array of shape `[batchSize, numOutcomes]`. See the `normalized`\n *     parameter.\n * @param numSamples Number of samples to draw for each row slice.\n * @param seed The seed number.\n * @param normalized Whether the provided `logits` are normalized true\n *     probabilities (sum to 1). Defaults to false.\n * @return 1D array of shape `[numSamples]`, or 2D array of shape\n *     `[batchSize, numSamples]`, depending on the rank of the input.\n */\n/** @doc {heading: 'Tensors', subheading: 'Random'} */\nfunction multinomial_(\n    logits: Tensor1D|Tensor2D|TensorLike, numSamples: number, seed?: number,\n    normalized = false): Tensor1D|Tensor2D {\n  const $logits = convertToTensor(logits, 'logits', 'multinomial');\n  const numOutcomes = $logits.size;\n  const origRank = $logits.rank;\n  if (numOutcomes < 2) {\n    throw new Error(\n        `Error in multinomial: you need at least 2 outcomes, but got ` +\n        `${numOutcomes}.`);\n  }\n  if (origRank > 2) {\n    throw new Error(`Rank of probabilities must be 1 or 2, but is ${origRank}`);\n  }\n  seed = seed || Math.random();\n  const logits2D = origRank === 1 ? $logits.as2D(1, -1) : $logits as Tensor2D;\n  const res = ENGINE.runKernelFunc(\n      backend => backend.multinomial(logits2D, normalized, numSamples, seed),\n      {logits2D});\n  return origRank === 1 ? res.as1D() : res;\n}\n\nexport const multinomial = op({multinomial_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {OneHot, OneHotAttrs, OneHotInputs} from '../kernel_names';\nimport {NamedAttrMap} from '../kernel_registry';\nimport {Tensor, Tensor1D} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Creates a one-hot `tf.Tensor`. The locations represented by `indices` take\n * value `onValue` (defaults to 1), while all other locations take value\n * `offValue` (defaults to 0). If `indices` is rank `R`, the output has rank\n * `R+1` with the last axis of size `depth`.\n *\n * ```js\n * tf.oneHot(tf.tensor1d([0, 1], 'int32'), 3).print();\n * ```\n *\n * @param indices `tf.Tensor` of indices with dtype `int32`.\n * @param depth The depth of the one hot dimension.\n * @param onValue A number used to fill in the output when the index matches\n * the location.\n * @param offValue A number used to fill in the output when the index does\n *     not match the location.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction oneHot_(\n    indices: Tensor|TensorLike, depth: number, onValue = 1,\n    offValue = 0): Tensor {\n  if (depth < 2) {\n    throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`);\n  }\n  let $indices = convertToTensor(indices, 'indices', 'oneHot', 'int32');\n  const outShape = [...$indices.shape, depth];\n  $indices = $indices.flatten();\n\n  const forward: ForwardFunc<Tensor> = (backend, save) => {\n    save([$indices]);\n    return backend.oneHot($indices as Tensor1D, depth, onValue, offValue);\n  };\n\n  const inputs: OneHotInputs = {indices: $indices};\n  const attrs: OneHotAttrs = {depth, onValue, offValue};\n\n  const result = ENGINE.runKernelFunc(\n      forward, inputs as unknown as NamedTensorMap, null /* grad */, OneHot,\n      attrs as unknown as NamedAttrMap);\n  return result.reshape(outShape);\n}\n\nexport const oneHot = op({oneHot_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {PadV2, PadV2Attrs, PadV2Inputs} from '../kernel_names';\nimport {NamedAttrMap} from '../kernel_registry';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\n\n/**\n * Pads a `tf.Tensor` with a given value and paddings.\n *\n * This operation currently only implements the `CONSTANT` mode.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `paddings` is of given length.\n *   - `tf.pad1d`\n *   - `tf.pad2d`\n *   - `tf.pad3d`\n *   - `tf.pad4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.pad([[1, 2]]).print();\n * ```\n * @param x The tensor to pad.\n * @param paddings An array of length `R` (the rank of the tensor), where\n * each element is a length-2 tuple of ints `[padBefore, padAfter]`,\n * specifying how much to pad along each dimension of the tensor.\n * @param constantValue The pad value to use. Defaults to 0.\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction pad_<T extends Tensor>(\n    x: T|TensorLike, paddings: Array<[number, number]>, constantValue = 0): T {\n  const $x = convertToTensor(x, 'x', 'pad');\n  if ($x.rank === 0) {\n    throw new Error('pad(scalar) is not defined. Pass non-scalar to pad');\n  }\n  const forward: ForwardFunc<T> = (backend, save) => {\n    save([$x]);\n    return backend.pad($x, paddings, constantValue);\n  };\n\n  const attrs: PadV2Attrs = {paddings, constantValue};\n  const inputs: PadV2Inputs = {x: $x};\n  return ENGINE.runKernelFunc(\n      forward, inputs as unknown as NamedTensorMap, null /* grad */, PadV2,\n      attrs as unknown as NamedAttrMap);\n}\n\nexport const pad = op({pad_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor1D} from '../tensor';\nimport {TensorLike} from '../types';\nimport {assert} from '../util';\nimport {op} from './operation';\nimport {pad} from './pad';\n\n/**\n * Pads a `tf.Tensor1D` with a given value and paddings. See `pad` for details.\n */\nfunction pad1d_(\n    x: Tensor1D|TensorLike, paddings: [number, number],\n    constantValue = 0): Tensor1D {\n  assert(\n      paddings.length === 2,\n      () => 'Invalid number of paddings. Must be length of 2.');\n  return pad(x, [paddings], constantValue);\n}\n\nexport const pad1d = op({pad1d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor2D} from '../tensor';\nimport {TensorLike} from '../types';\nimport {assert} from '../util';\nimport {op} from './operation';\nimport {pad} from './pad';\n\n/**\n * Pads a `tf.Tensor2D` with a given value and paddings. See `pad` for details.\n */\nfunction pad2d_(\n    x: Tensor2D|TensorLike, paddings: [[number, number], [number, number]],\n    constantValue = 0): Tensor2D {\n  assert(\n      paddings.length === 2 && paddings[0].length === 2 &&\n          paddings[1].length === 2,\n      () => 'Invalid number of paddings. Must be length of 2 each.');\n  return pad(x, paddings, constantValue);\n}\n\nexport const pad2d = op({pad2d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor3D} from '../tensor';\nimport {TensorLike} from '../types';\nimport {assert} from '../util';\nimport {op} from './operation';\nimport {pad} from './pad';\n\n/**\n * Pads a `tf.Tensor3D` with a given value and paddings. See `pad` for details.\n */\nfunction pad3d_(\n    x: Tensor3D|TensorLike,\n    paddings: [[number, number], [number, number], [number, number]],\n    constantValue = 0): Tensor3D {\n  assert(\n      paddings.length === 3 && paddings[0].length === 2 &&\n          paddings[1].length === 2 && paddings[2].length === 2,\n      () => 'Invalid number of paddings. Must be length of 2 each.');\n  return pad(x, paddings, constantValue);\n}\n\nexport const pad3d = op({pad3d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor4D} from '../tensor';\nimport {TensorLike} from '../types';\nimport {assert} from '../util';\nimport {op} from './operation';\nimport {pad} from './pad';\n\n/**\n * Pads a `tf.Tensor4D` with a given value and paddings. See `pad` for details.\n */\nfunction pad4d_(\n    x: Tensor4D|TensorLike,\n    paddings:\n        [\n          [number, number], [number, number], [number, number], [number, number]\n        ],\n    constantValue = 0): Tensor4D {\n  assert(\n      paddings.length === 4 && paddings[0].length === 2 &&\n          paddings[1].length === 2 && paddings[2].length === 2 &&\n          paddings[3].length === 2,\n      () => 'Invalid number of paddings. Must be length of 2 each.');\n  return pad(x, paddings, constantValue);\n}\n\nexport const pad4d = op({pad4d_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {DataType, Rank, ShapeMap} from '../types';\nimport {sizeFromShape} from '../util';\n\nimport {op} from './operation';\n\n/**\n * Creates a `tf.Tensor` with values sampled from a random number generator\n * function defined by the user.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param randFunction A random number generator function which is called\n * for each element in the output tensor.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n */\nfunction rand_<R extends Rank>(\n    shape: ShapeMap[R], randFunction: () => number,\n    dtype?: DataType): Tensor<R> {\n  const size = sizeFromShape(shape);\n  let values = null;\n  if (dtype == null || dtype === 'float32') {\n    values = new Float32Array(size);\n  } else if (dtype === 'int32') {\n    values = new Int32Array(size);\n  } else if (dtype === 'bool') {\n    values = new Uint8Array(size);\n  } else {\n    throw new Error(`Unknown data type ${dtype}`);\n  }\n  for (let i = 0; i < size; i++) {\n    values[i] = randFunction();\n  }\n  return ENGINE.makeTensor(values, shape, dtype) as Tensor<R>;\n}\n\nexport const rand = op({rand_});\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from './engine';\nimport {inferShape} from './tensor_util_env';\nimport {RecursiveArray, TensorLike, TypedArray} from './types';\nimport {arraysEqual, flatten, isString, isTypedArray} from './util';\n\nconst TEST_EPSILON_FLOAT32 = 1e-3;\nexport const TEST_EPSILON_FLOAT16 = 1e-1;\n\nexport function expectArraysClose(\n    actual: TypedArray|number|RecursiveArray<number>,\n    expected: TypedArray|number|RecursiveArray<number>, epsilon?: number) {\n  if (epsilon == null) {\n    epsilon = testEpsilon();\n  }\n  return expectArraysPredicate(\n      actual, expected, (a, b) => areClose(a as number, b as number, epsilon));\n}\n\nexport function testEpsilon() {\n  return ENGINE.backend.floatPrecision() === 32 ? TEST_EPSILON_FLOAT32 :\n                                                  TEST_EPSILON_FLOAT16;\n}\n\nfunction expectArraysPredicate(\n    actual: TensorLike, expected: TensorLike,\n    predicate: (a: {}, b: {}) => boolean) {\n  let checkClassType = true;\n  if (isTypedArray(actual) || isTypedArray(expected)) {\n    checkClassType = false;\n  }\n  if (isTypedArray(actual) && isTypedArray(expected)) {\n    checkClassType = true;\n  }\n  if (checkClassType) {\n    const aType = actual.constructor.name;\n    const bType = expected.constructor.name;\n\n    if (aType !== bType) {\n      throw new Error(\n          `Arrays are of different type. Actual: ${aType}. ` +\n          `Expected: ${bType}`);\n    }\n  }\n\n  if (Array.isArray(actual) && Array.isArray(expected)) {\n    const actualShape = inferShape(actual);\n    const expectedShape = inferShape(expected);\n    if (!arraysEqual(actualShape, expectedShape)) {\n      throw new Error(\n          `Arrays have different shapes. ` +\n          `Actual: [${actualShape}]. Expected: [${expectedShape}]`);\n    }\n  }\n\n  const actualFlat =\n      isTypedArray(actual) ? actual : flatten(actual as RecursiveArray<number>);\n  const expectedFlat = isTypedArray(expected) ?\n      expected :\n      flatten(expected as RecursiveArray<number>);\n\n  if (actualFlat.length !== expectedFlat.length) {\n    throw new Error(\n        `Arrays have different lengths actual: ${actualFlat.length} vs ` +\n        `expected: ${expectedFlat.length}.\\n` +\n        `Actual:   ${actualFlat}.\\n` +\n        `Expected: ${expectedFlat}.`);\n  }\n  for (let i = 0; i < expectedFlat.length; ++i) {\n    const a = actualFlat[i];\n    const e = expectedFlat[i];\n\n    if (!predicate(a, e)) {\n      throw new Error(\n          `Arrays differ: actual[${i}] = ${a}, expected[${i}] = ${e}.\\n` +\n          `Actual:   ${actualFlat}.\\n` +\n          `Expected: ${expectedFlat}.`);\n    }\n  }\n}\n\nexport interface DoneFn {\n  (): void;\n  fail: (message?: Error|string) => void;\n}\n\nexport function expectPromiseToFail(fn: () => Promise<{}>, done: DoneFn): void {\n  fn().then(() => done.fail(), () => done());\n}\n\nexport function expectArraysEqual(actual: TensorLike, expected: TensorLike) {\n  const exp = typeof expected === 'string' || typeof expected === 'number' ||\n          typeof expected === 'boolean' ?\n      [expected] as number[] :\n      expected as number[];\n  if (isString(actual) || isString((actual as string[])[0]) ||\n      isString(expected) || isString((expected as string[])[0])) {\n    // tslint:disable-next-line: triple-equals\n    return expectArraysPredicate(actual, exp, (a, b) => a == b);\n  }\n  return expectArraysPredicate(\n      actual, expected, (a, b) => areClose(a as number, b as number, 0));\n}\n\nexport function expectNumbersClose(a: number, e: number, epsilon?: number) {\n  if (epsilon == null) {\n    epsilon = testEpsilon();\n  }\n  if (!areClose(a, e, epsilon)) {\n    throw new Error(`Numbers differ: actual === ${a}, expected === ${e}`);\n  }\n}\n\nfunction areClose(a: number, e: number, epsilon: number): boolean {\n  if (!isFinite(a) && !isFinite(e)) {\n    return true;\n  }\n  if (isNaN(a) || isNaN(e) || Math.abs(a - e) > epsilon) {\n    return false;\n  }\n  return true;\n}\n\nexport function expectValuesInRange(\n    actual: TypedArray|number[], low: number, high: number) {\n  for (let i = 0; i < actual.length; i++) {\n    if (actual[i] < low || actual[i] > high) {\n      throw new Error(\n          `Value out of range:${actual[i]} low: ${low}, high: ${high}`);\n    }\n  }\n}\n\nexport function expectArrayBuffersEqual(\n    actual: ArrayBuffer, expected: ArrayBuffer) {\n  // Safari & Jasmine don't like comparing ArrayBuffers directly. Wrapping in\n  // a Float32Array solves this issue.\n  expect(new Float32Array(actual)).toEqual(new Float32Array(expected));\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as seedrandom from 'seedrandom';\n\nimport {expectNumbersClose, testEpsilon} from '../test_util';\nimport {TypedArray} from '../types';\n\nexport interface RandomBase {\n  nextValue(): number;\n}\n\nexport interface RandomGamma {\n  nextValue(): number;\n}\n\nexport interface RandNormalDataTypes {\n  float32: Float32Array;\n  int32: Int32Array;\n}\n\nexport interface RandGammaDataTypes {\n  float32: Float32Array;\n  int32: Int32Array;\n}\n\n// https://en.wikipedia.org/wiki/Marsaglia_polar_method\nexport class MPRandGauss implements RandomBase {\n  private mean: number;\n  private stdDev: number;\n  private nextVal: number;\n  private dtype?: keyof RandNormalDataTypes;\n  private truncated?: boolean;\n  private upper?: number;\n  private lower?: number;\n  private random: seedrandom.prng;\n\n  constructor(\n      mean: number, stdDeviation: number, dtype?: keyof RandNormalDataTypes,\n      truncated?: boolean, seed?: number) {\n    this.mean = mean;\n    this.stdDev = stdDeviation;\n    this.dtype = dtype;\n    this.nextVal = NaN;\n    this.truncated = truncated;\n    if (this.truncated) {\n      this.upper = this.mean + this.stdDev * 2;\n      this.lower = this.mean - this.stdDev * 2;\n    }\n    const seedValue = seed ? seed : Math.random();\n    this.random = seedrandom.alea(seedValue.toString());\n  }\n\n  /** Returns next sample from a Gaussian distribution. */\n  public nextValue(): number {\n    if (!isNaN(this.nextVal)) {\n      const value = this.nextVal;\n      this.nextVal = NaN;\n      return value;\n    }\n\n    let resultX: number, resultY: number;\n    let isValid = false;\n    while (!isValid) {\n      let v1: number, v2: number, s: number;\n      do {\n        v1 = 2 * this.random() - 1;\n        v2 = 2 * this.random() - 1;\n        s = v1 * v1 + v2 * v2;\n      } while (s >= 1 || s === 0);\n\n      const mul = Math.sqrt(-2.0 * Math.log(s) / s);\n      resultX = this.mean + this.stdDev * v1 * mul;\n      resultY = this.mean + this.stdDev * v2 * mul;\n\n      if (!this.truncated || this.isValidTruncated(resultX)) {\n        isValid = true;\n      }\n    }\n\n    if (!this.truncated || this.isValidTruncated(resultY)) {\n      this.nextVal = this.convertValue(resultY);\n    }\n    return this.convertValue(resultX);\n  }\n\n  /** Handles proper rounding for non-floating-point numbers. */\n  private convertValue(value: number): number {\n    if (this.dtype == null || this.dtype === 'float32') {\n      return value;\n    }\n    return Math.round(value);\n  }\n\n  /** Returns true if less than 2-standard-deviations from the mean. */\n  private isValidTruncated(value: number): boolean {\n    return value <= this.upper && value >= this.lower;\n  }\n}\n\n// Marsaglia, George, and Wai Wan Tsang. 2000. \"A Simple Method for Generating\n// Gamma Variables.\"\nexport class RandGamma implements RandomGamma {\n  private alpha: number;\n  private beta: number;\n  private d: number;\n  private c: number;\n  private dtype?: keyof RandGammaDataTypes;\n  private randu: seedrandom.prng;\n  private randn: MPRandGauss;\n\n  constructor(\n      alpha: number, beta: number, dtype: keyof RandGammaDataTypes,\n      seed?: number) {\n    this.alpha = alpha;\n    this.beta = 1 / beta;  // convert rate to scale parameter\n    this.dtype = dtype;\n\n    const seedValue = seed ? seed : Math.random();\n    this.randu = seedrandom.alea(seedValue.toString());\n    this.randn = new MPRandGauss(0, 1, dtype, false, this.randu());\n\n    if (alpha < 1) {\n      this.d = alpha + (2 / 3);\n    } else {\n      this.d = alpha - (1 / 3);\n    }\n    this.c = 1 / Math.sqrt(9 * this.d);\n  }\n\n  /** Returns next sample from a gamma distribution. */\n  public nextValue(): number {\n    let x2: number, v0: number, v1: number, x: number, u: number, v: number;\n    while (true) {\n      do {\n        x = this.randn.nextValue();\n        v = 1 + (this.c * x);\n      } while (v <= 0);\n      v *= v * v;\n      x2 = x * x;\n      v0 = 1 - (0.331 * x2 * x2);\n      v1 = (0.5 * x2) + (this.d * (1 - v + Math.log(v)));\n      u = this.randu();\n      if (u < v0 || Math.log(u) < v1) {\n        break;\n      }\n    }\n    v = (1 / this.beta) * this.d * v;\n    if (this.alpha < 1) {\n      v *= Math.pow(this.randu(), 1 / this.alpha);\n    }\n    return this.convertValue(v);\n  }\n  /** Handles proper rounding for non-floating-point numbers. */\n  private convertValue(value: number): number {\n    if (this.dtype === 'float32') {\n      return value;\n    }\n    return Math.round(value);\n  }\n}\n\nexport class UniformRandom implements RandomBase {\n  private min: number;\n  private range: number;\n  private random: seedrandom.prng;\n  private dtype?: keyof RandNormalDataTypes;\n\n  constructor(\n      min = 0, max = 1, dtype?: keyof RandNormalDataTypes,\n      seed?: string|number) {\n    this.min = min;\n    this.range = max - min;\n    this.dtype = dtype;\n    if (seed == null) {\n      seed = Math.random();\n    }\n    if (typeof seed === 'number') {\n      seed = seed.toString();\n    }\n\n    if (!this.canReturnFloat() && this.range <= 1) {\n      throw new Error(\n          `The difference between ${min} - ${max} <= 1 and dtype is not float`);\n    }\n    this.random = seedrandom.alea(seed);\n  }\n\n  /** Handles proper rounding for non floating point numbers. */\n  private canReturnFloat = () =>\n      (this.dtype == null || this.dtype === 'float32');\n\n  private convertValue(value: number): number {\n    if (this.canReturnFloat()) {\n      return value;\n    }\n    return Math.round(value);\n  }\n\n  nextValue() {\n    return this.convertValue(this.min + this.range * this.random());\n  }\n}\n\nexport function jarqueBeraNormalityTest(values: TypedArray|number[]) {\n  // https://en.wikipedia.org/wiki/Jarque%E2%80%93Bera_test\n  const n = values.length;\n  const s = skewness(values);\n  const k = kurtosis(values);\n  const jb = n / 6 * (Math.pow(s, 2) + 0.25 * Math.pow(k - 3, 2));\n  // JB test requires 2-degress of freedom from Chi-Square @ 0.95:\n  // http://www.itl.nist.gov/div898/handbook/eda/section3/eda3674.htm\n  const CHI_SQUARE_2DEG = 5.991;\n  if (jb > CHI_SQUARE_2DEG) {\n    throw new Error(`Invalid p-value for JB: ${jb}`);\n  }\n}\n\nexport function expectArrayInMeanStdRange(\n    actual: TypedArray|number[], expectedMean: number, expectedStdDev: number,\n    epsilon?: number) {\n  if (epsilon == null) {\n    epsilon = testEpsilon();\n  }\n  const actualMean = mean(actual);\n  expectNumbersClose(actualMean, expectedMean, epsilon);\n  expectNumbersClose(\n      standardDeviation(actual, actualMean), expectedStdDev, epsilon);\n}\n\nfunction mean(values: TypedArray|number[]) {\n  let sum = 0;\n  for (let i = 0; i < values.length; i++) {\n    sum += values[i];\n  }\n  return sum / values.length;\n}\n\nfunction standardDeviation(values: TypedArray|number[], mean: number) {\n  let squareDiffSum = 0;\n  for (let i = 0; i < values.length; i++) {\n    const diff = values[i] - mean;\n    squareDiffSum += diff * diff;\n  }\n  return Math.sqrt(squareDiffSum / values.length);\n}\n\nfunction kurtosis(values: TypedArray|number[]) {\n  // https://en.wikipedia.org/wiki/Kurtosis\n  const valuesMean = mean(values);\n  const n = values.length;\n  let sum2 = 0;\n  let sum4 = 0;\n  for (let i = 0; i < n; i++) {\n    const v = values[i] - valuesMean;\n    sum2 += Math.pow(v, 2);\n    sum4 += Math.pow(v, 4);\n  }\n  return (1 / n) * sum4 / Math.pow((1 / n) * sum2, 2);\n}\n\nfunction skewness(values: TypedArray|number[]) {\n  // https://en.wikipedia.org/wiki/Skewness\n  const valuesMean = mean(values);\n  const n = values.length;\n  let sum2 = 0;\n  let sum3 = 0;\n  for (let i = 0; i < n; i++) {\n    const v = values[i] - valuesMean;\n    sum2 += Math.pow(v, 2);\n    sum3 += Math.pow(v, 3);\n  }\n  return (1 / n) * sum3 / Math.pow((1 / (n - 1)) * sum2, 3 / 2);\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {Rank, ShapeMap} from '../types';\n\nimport {buffer} from './array_ops';\nimport {op} from './operation';\nimport {RandGamma} from './rand_util';\n\n/**\n * Creates a `tf.Tensor` with values sampled from a gamma distribution.\n *\n * ```js\n * tf.randomGamma([2, 2], 1).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param alpha The shape parameter of the gamma distribution.\n * @param beta The inverse scale parameter of the gamma distribution. Defaults\n *     to 1.\n * @param dtype The data type of the output. Defaults to float32.\n * @param seed The seed for the random number generator.\n */\n/** @doc {heading: 'Tensors', subheading: 'Random'} */\nfunction randomGamma_<R extends Rank>(\n    shape: ShapeMap[R], alpha: number, beta = 1,\n    dtype: 'float32'|'int32' = 'float32', seed?: number): Tensor<R> {\n  if (beta == null) {\n    beta = 1;\n  }\n  if (dtype == null) {\n    dtype = 'float32';\n  }\n  if (dtype !== 'float32' && dtype !== 'int32') {\n    throw new Error(`Unsupported data type ${dtype}`);\n  }\n  const rgamma = new RandGamma(alpha, beta, dtype, seed);\n  const res = buffer(shape, dtype);\n  for (let i = 0; i < res.values.length; i++) {\n    res.values[i] = rgamma.nextValue();\n  }\n  return res.toTensor();\n}\n\nexport const randomGamma = op({randomGamma_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {DataType, Rank, ShapeMap} from '../types';\n\nimport {buffer} from './array_ops';\nimport {op} from './operation';\nimport {MPRandGauss} from './rand_util';\n\n/**\n * Creates a `tf.Tensor` with values sampled from a normal distribution.\n *\n * ```js\n * tf.randomNormal([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output.\n * @param seed The seed for the random number generator.\n */\n/** @doc {heading: 'Tensors', subheading: 'Random'} */\nfunction randomNormal_<R extends Rank>(\n    shape: ShapeMap[R], mean = 0, stdDev = 1, dtype?: 'float32'|'int32',\n    seed?: number): Tensor<R> {\n  if (dtype != null && (dtype as DataType) === 'bool') {\n    throw new Error(`Unsupported data type ${dtype}`);\n  }\n  const randGauss =\n      new MPRandGauss(mean, stdDev, dtype, false /* truncated */, seed);\n  const res = buffer(shape, dtype);\n  for (let i = 0; i < res.values.length; i++) {\n    res.values[i] = randGauss.nextValue();\n  }\n  return res.toTensor();\n}\n\nexport const randomNormal = op({randomNormal_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {DataType, Rank, ShapeMap} from '../types';\n\nimport {buffer} from './array_ops';\nimport {op} from './operation';\nimport {UniformRandom} from './rand_util';\n\n/**\n * Creates a `tf.Tensor` with values sampled from a uniform distribution.\n *\n * The generated values follow a uniform distribution in the range [minval,\n * maxval). The lower bound minval is included in the range, while the upper\n * bound maxval is excluded.\n *\n * ```js\n * tf.randomUniform([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param minval The lower bound on the range of random values to generate.\n *   Defaults to 0.\n * @param maxval The upper bound on the range of random values to generate.\n *   Defaults to 1.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n */\n/** @doc {heading: 'Tensors', subheading: 'Random'} */\nfunction randomUniform_<R extends Rank>(\n    shape: ShapeMap[R], minval = 0, maxval = 1, dtype: DataType = 'float32',\n    seed?: number|string): Tensor<R> {\n  const res = buffer(shape, dtype);\n  const random = new UniformRandom(minval, maxval, null, seed);\n  for (let i = 0; i < res.values.length; i++) {\n    res.values[i] = random.nextValue();\n  }\n  return res.toTensor();\n}\n\nexport const randomUniform = op({randomUniform_});\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * Computes square of `x` element-wise: `x ^ 2`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.sqrt(2), -1]);\n *\n * x.square().print();  // or tf.square(x)\n * ```\n * @param x The input Tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction square_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'square');\n  const attrs = {};\n  const inputsToSave = [$x];\n  const outputsToSave: boolean[] = [];\n  return ENGINE.runKernelFunc((backend, save) => {\n    save([$x]);\n    return backend.square($x);\n  }, {x: $x}, null /* grad */, 'Square', attrs, inputsToSave, outputsToSave);\n}\n\nexport const square = op({square_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {SquaredDifference, SquaredDifferenceInputs} from '../kernel_names';\nimport {Tensor} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {assertAndGetBroadcastShape} from './broadcast_util';\nimport {op} from './operation';\nimport {scalar} from './tensor_ops';\n\n/**\n * Returns (a - b) * (a - b) element-wise.\n * Supports broadcasting.\n *\n * We also expose `tf.squaredDifferenceStrict` which has the same signature as\n * this op and asserts that `a` and `b` are the same shape (does not\n * broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.squaredDifference(b).print();  // or tf.squaredDifference(a, b)\n * ```\n *\n * ```js\n * // Broadcast squared difference  a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.squaredDifference(b).print();  // or tf.squaredDifference(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Arithmetic'} */\nfunction squaredDifference_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'squaredDifference');\n  let $b = convertToTensor(b, 'b', 'squaredDifference');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n  const der = (dy: Tensor, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    const two = scalar(2);\n    const derA = () => dy.mul($a.sub($b).mul(two));\n    const derB = () => dy.mul($b.sub($a).mul(two));\n    return {a: derA, b: derB};\n  };\n  const forward: ForwardFunc<Tensor> = (backend, save) => {\n    const res = backend.squaredDifference($a, $b);\n    save([$a, $b]);\n    return res;\n  };\n\n  const inputs: SquaredDifferenceInputs = {a: $a, b: $b};\n  const attrs = {};\n\n  const inputsToSave = [$a, $b];\n  const outputToSave: boolean[] = [];\n  return ENGINE.runKernelFunc(\n             forward, inputs as unknown as NamedTensorMap, der,\n             SquaredDifference, attrs, inputsToSave, outputToSave) as T;\n}\n\nexport const squaredDifference = op({squaredDifference_});\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {DataType, Rank, ShapeMap} from '../types';\n\nimport {buffer} from './array_ops';\nimport {op} from './operation';\nimport {MPRandGauss} from './rand_util';\n\n/**\n * Creates a `tf.Tensor` with values sampled from a truncated normal\n * distribution.\n *\n * ```js\n * tf.truncatedNormal([2, 2]).print();\n * ```\n *\n * The generated values follow a normal distribution with specified mean and\n * standard deviation, except that values whose magnitude is more than 2\n * standard deviations from the mean are dropped and re-picked.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output tensor.\n * @param seed The seed for the random number generator.\n */\n/** @doc {heading: 'Tensors', subheading: 'Creation'} */\nfunction truncatedNormal_<R extends Rank>(\n    shape: ShapeMap[R], mean = 0, stdDev = 1, dtype?: 'float32'|'int32',\n    seed?: number): Tensor<R> {\n  if (dtype != null && (dtype as DataType) === 'bool') {\n    throw new Error(`Unsupported data type $ { dtype }`);\n  }\n  const randGauss =\n      new MPRandGauss(mean, stdDev, dtype, true /* truncated */, seed);\n  const res = buffer(shape, dtype);\n  for (let i = 0; i < res.values.length; i++) {\n    res.values[i] = randGauss.nextValue();\n  }\n  return res.toTensor();\n}\n\nexport const truncatedNormal = op({truncatedNormal_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assertShapesMatch} from '../util';\nimport {assertAndGetBroadcastShape} from './broadcast_util';\nimport {op} from './operation';\nimport {zerosLike} from './tensor_ops';\n\n/**\n * Returns the truth value of (a != b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.notEqualStrict` which has the same signature as this op\n * and asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([0, 2, 3]);\n *\n * a.notEqual(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction notEqual_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'notEqual');\n  let $b = convertToTensor(b, 'b', 'notEqual');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n  return ENGINE.runKernelFunc(\n             backend => backend.notEqual($a, $b), {a: $a, b: $b},\n             null /* grad */, 'NotEqual') as T;\n}\n\n/**\n * Strict version of `tf.notEqual` that forces `a` and `b` to be of the same\n * shape.\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same shape and dtype as\n *     `a`.\n */\nfunction notEqualStrict_<T extends Tensor>(\n    a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'notEqualStrict');\n  const $b = convertToTensor(b, 'b', 'notEqualStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in notEqualStrict: ');\n  return $a.notEqual($b);\n}\n\n/**\n * Returns the truth value of (a < b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.lessStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.less(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction less_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'less');\n  let $b = convertToTensor(b, 'b', 'less');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc(\n             backend => backend.less($a, $b), {a: $a, b: $b}, null /* grad */,\n             'Less') as T;\n}\n\n/**\n * Strict version of `tf.less` that forces `a` and `b` to be of the same\n * shape.\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same shape and dtype as\n *     `a`.\n */\nfunction lessStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'lessStrict');\n  const $b = convertToTensor(b, 'b', 'lessStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in lessStrict: ');\n  return $a.less($b);\n}\n\n/**\n * Returns the truth value of (a == b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.equalStrict` which has the same signature as this op\n * and asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.equal(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction equal_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'equal');\n  let $b = convertToTensor(b, 'b', 'equal');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc(backend => backend.equal($a, $b), {$a, $b}) as T;\n}\n\nfunction equalStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'equalStrict');\n  const $b = convertToTensor(b, 'b', 'equalStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in equalStrict: ');\n  return $a.equal($b);\n}\n\n/**\n * Returns the truth value of (a <= b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.lessEqualStrict` which has the same signature as this op\n * and asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.lessEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction lessEqual_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'lessEqual');\n  let $b = convertToTensor(b, 'b', 'lessEqual');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.lessEqual($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, null /* grad */, 'LessEqual') as T;\n}\n\nfunction lessEqualStrict_<T extends Tensor>(\n    a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'lessEqualStrict');\n  const $b = convertToTensor(b, 'b', 'lessEqualStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in lessEqualStrict: ');\n  return $a.lessEqual($b);\n}\n\n/**\n * Returns the truth value of (a > b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.greaterStrict` which has the same signature as this\n * op and asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greater(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction greater_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'greater');\n  let $b = convertToTensor(b, 'b', 'greater');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  return ENGINE.runKernelFunc(\n             backend => backend.greater($a, $b), {a: $a, b: $b},\n             null /* grad */, 'Greater') as T;\n}\n\nfunction greaterStrict_<T extends Tensor>(a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'greaterStrict');\n  const $b = convertToTensor(b, 'b', 'greaterStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in greaterStrict: ');\n  return $a.greater($b);\n}\n\n/**\n * Returns the truth value of (a >= b) element-wise. Supports broadcasting.\n *\n * We also expose `tf.greaterEqualStrict` which has the same signature as this\n * op and asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greaterEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n */\n/** @doc {heading: 'Operations', subheading: 'Logical'} */\nfunction greaterEqual_<T extends Tensor>(\n    a: Tensor|TensorLike, b: Tensor|TensorLike): T {\n  let $a = convertToTensor(a, 'a', 'greaterEqual');\n  let $b = convertToTensor(b, 'b', 'greaterEqual');\n  [$a, $b] = makeTypesMatch($a, $b);\n  assertAndGetBroadcastShape($a.shape, $b.shape);\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$a, $b] = saved;\n    return {a: () => zerosLike($a), b: () => zerosLike($b)};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.greaterEqual($a, $b);\n    save([$a, $b]);\n    return res;\n  }, {a: $a, b: $b}, grad, 'GreaterEqual') as T;\n}\n\nfunction greaterEqualStrict_<T extends Tensor>(\n    a: T|TensorLike, b: T|TensorLike): T {\n  const $a = convertToTensor(a, 'a', 'greaterEqualStrict');\n  const $b = convertToTensor(b, 'b', 'greaterEqualStrict');\n  assertShapesMatch($a.shape, $b.shape, 'Error in greaterEqualStrict: ');\n  return $a.greaterEqual($b);\n}\n\nexport const equal = op({equal_});\nexport const equalStrict = op({equalStrict_});\nexport const greater = op({greater_});\nexport const greaterEqual = op({greaterEqual_});\nexport const greaterEqualStrict = op({greaterEqualStrict_});\nexport const greaterStrict = op({greaterStrict_});\nexport const less = op({less_});\nexport const lessEqual = op({lessEqual_});\nexport const lessEqualStrict = op({lessEqualStrict_});\nexport const lessStrict = op({lessStrict_});\nexport const notEqual = op({notEqual_});\nexport const notEqualStrict = op({notEqualStrict_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor1D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assert, isInt, parseAxisParam} from '../util';\nimport {expandDims} from './array_ops';\nimport {getUndoAxesPermutation} from './axis_util';\nimport {maximum} from './binary_ops';\nimport {greaterEqual} from './compare';\nimport {logicalAnd, where} from './logical_ops';\nimport {op} from './operation';\nimport {collectGatherOpShapeInfo} from './segment_util';\nimport {ones, scalar, zerosLike} from './tensor_ops';\n\n/**\n * Computes the sum along segments of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const segmentIds = tf.tensor1d([1, 2, 0, 1], 'int32');\n * const numSegments = 3;\n *\n * x.unsortedSegmentSum(segmentIds, numSegments).print()\n * //or tf.unsortedSegmentSum(x, segmentIds, numSegments)\n * ```\n * @param x The `tf.Tensor` that will be summed along its segments.\n * @param segmentIds A `tf.Tensor1D` whose rank is equal to the rank of `x`'s\n * dimension along the `axis`.  Maps each element of `x` to a segment.\n * @param numSegments The number of distinct `segmentIds`.\n */\n/** @doc {heading: 'Operations', subheading: 'Segment'} */\nfunction unsortedSegmentSum_<T extends Tensor>(\n    x: T|TensorLike, segmentIds: Tensor1D|TensorLike, numSegments: number): T {\n  const $x = convertToTensor(x, 'x', 'unsortedSegmentSum');\n  const $segmentIds =\n      convertToTensor(segmentIds, 'segmentIds', 'unsortedSegmentSum', 'int32');\n  assert(isInt(numSegments), () => 'numSegments must be of dtype int');\n\n  const gradFunc = (dy: T, saved: Tensor[]) => {\n    const [$segmentIds] = saved;\n    const derX = () => {\n      return gatherDropNegatives(dy, $segmentIds as Tensor1D);\n    };\n    return {$x: derX};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.unsortedSegmentSum($x, $segmentIds, numSegments);\n    save([$segmentIds]);\n    return res;\n  }, {$x}, gradFunc) as T;\n}\n\n/**\n * Gather slices from tensor `x`'s axis `axis` according to `indices`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const indices = tf.tensor1d([1, 3, 3], 'int32');\n *\n * x.gather(indices).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const indices = tf.tensor1d([1, 1, 0], 'int32');\n *\n * x.gather(indices).print();\n * ```\n * @param x The input tensor whose slices to be gathered.\n * @param indices The indices of the values to extract.\n * @param axis The axis over which to select values. Defaults to 0.\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction gather_<T extends Tensor>(\n    x: T|TensorLike, indices: Tensor|TensorLike, axis = 0): T {\n  const $x = convertToTensor(x, 'x', 'gather');\n  const $indices = convertToTensor(indices, 'indices', 'gather', 'int32');\n  axis = parseAxisParam(axis, $x.shape)[0];\n  const shapeInfo = collectGatherOpShapeInfo($x, $indices, axis);\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$indices] = saved;\n    const derX = () => {\n      const paramsShape = $x.shape;\n      const indicesSize = $indices.size;\n\n      const outerShape = paramsShape.slice(0, axis);\n      const outerDims = outerShape.length;\n      const innerShape = paramsShape.slice(axis, paramsShape.length).slice(1);\n      const innerDims = innerShape.length;\n\n      const outerAxesIndices = arrayRange(0, outerDims);\n      const innerAxesIndices =\n          arrayRange(outerDims + 1, outerDims + 1 + innerDims);\n\n      const valuesShape = arrayConcat([outerShape, [indicesSize], innerShape]);\n\n      const values = dy.reshape(valuesShape);\n      const reshapedIndices = $indices.reshape([indicesSize]);\n\n      const transposeDims =\n          arrayConcat([[outerDims], outerAxesIndices, innerAxesIndices]);\n      const valuesTranspose = values.transpose(transposeDims);\n      let paramsGrad = unsortedSegmentSum(\n          valuesTranspose, reshapedIndices as Tensor1D, $x.shape[axis]);\n\n      const invertTransposeDims = getUndoAxesPermutation(transposeDims);\n      paramsGrad = paramsGrad.transpose(invertTransposeDims);\n\n      return paramsGrad as T;\n    };\n    return {x: derX, indices: () => $indices};\n  };\n  return (ENGINE.runKernelFunc(\n              (backend, save) => {\n                const res = backend.gather($x, $indices.flatten(), axis);\n                save([$indices]);\n                return res;\n              },\n              {x: $x, indices: $indices}, grad, 'Gather', {axis}))\n             .reshape(shapeInfo.outputShape) as T;\n}\n\nfunction arrayRange(start: number, stop: number): number[] {\n  const result = [];\n  for (let i = start; i < stop; ++i) {\n    result.push(i);\n  }\n  return result;\n}\n\nfunction arrayConcat(arrays: number[][]): number[] {\n  const result = [];\n  for (let i = 0; i < arrays.length; ++i) {\n    for (let j = 0; j < arrays[i].length; ++j) {\n      result.push(arrays[i][j]);\n    }\n  }\n  return result;\n}\n\nfunction gatherDropNegatives<T extends Tensor>(x: T, indices: Tensor1D) {\n  // Helper function for unsorted segment ops. Gathers params for\n  // positive segment ids and gathers 0 for inputs with negative segment id.\n  // Mirrors _GatherDropNegatives from tensorflow/python/ops/math_grad.py\n  const zeroClippedIndices = maximum(indices, zerosLike(indices));\n  const gathered = gather(x, zeroClippedIndices as Tensor1D);\n  let isPositive = greaterEqual(indices, scalar(0, 'int32'));\n  const numIters = gathered.rank - isPositive.rank;\n  for (let i = 0; i < numIters; ++i) {\n    isPositive = expandDims(isPositive, i + 1);\n  }\n  isPositive = logicalAnd(isPositive, ones(gathered.shape, 'bool'));\n  const zeroSlice = zerosLike(gathered);\n  return where(isPositive, gathered, zeroSlice);\n}\n\nexport const gather = op({gather_});\nexport const unsortedSegmentSum = op({unsortedSegmentSum_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {whereAsync} from './logical_ops';\nimport {gather} from './segment_ops';\n\n/**\n * Apply boolean mask to tensor.\n *\n * ```js\n * const tensor = tf.tensor2d([1, 2, 3, 4, 5, 6], [3, 2]);\n * const mask = tf.tensor1d([1, 0, 1], 'bool');\n * const result = await tf.booleanMaskAsync(tensor, mask);\n * result.print();\n * ```\n *\n * @param tensor N-D tensor.\n * @param mask K-D boolean tensor, K <= N and K must be known statically.\n * @param axis A 0-D int Tensor representing the axis in tensor to mask from.\n *     By default, axis is 0 which will mask from the first dimension.\n *     Otherwise K + axis <= N.\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nasync function booleanMaskAsync_(\n    tensor: Tensor|TensorLike, mask: Tensor|TensorLike,\n    axis?: number): Promise<Tensor> {\n  const $tensor = convertToTensor(tensor, 'tensor', 'boolMask');\n  const $mask = convertToTensor(mask, 'mask', 'boolMask', 'bool');\n\n  const axisFrom = axis == null ? 0 : axis;\n  const maskDim = $mask.rank;\n  const tensorShape = $tensor.shape;\n\n  util.assert(maskDim > 0, () => 'mask cannot be scalar');\n  util.assertShapesMatch(\n      tensorShape.slice(axisFrom, axisFrom + maskDim), $mask.shape,\n      `mask's shape must match the first K dimensions of tensor's shape,`);\n\n  let leadingSize = 1;\n  for (let i = axisFrom; i < axisFrom + maskDim; i++) {\n    leadingSize *= tensorShape[i];\n  }\n  const targetTensorShape =\n      tensorShape.slice(0, axisFrom)\n          .concat([leadingSize], tensorShape.slice(axisFrom + maskDim));\n  const reshapedTensor = $tensor.reshape(targetTensorShape);\n  const reshapedMask = $mask.reshape([-1]);\n  const positivePositions = await whereAsync(reshapedMask);\n  const indices = positivePositions.squeeze([1]);\n\n  const res = gather(reshapedTensor, indices, axisFrom);\n\n  // Ensure no memory leak.\n  if (tensor !== $tensor) {\n    $tensor.dispose();\n  }\n  if (mask !== $mask) {\n    $mask.dispose();\n  }\n  indices.dispose();\n  reshapedTensor.dispose();\n  reshapedMask.dispose();\n  positivePositions.dispose();\n\n  return res;\n}\n\nexport const booleanMaskAsync = booleanMaskAsync_;\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor2D, Tensor3D, Tensor4D, Tensor5D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport {op} from './operation';\n\n/**\n * Computes a 1D convolution over the input x.\n *\n * @param x The input tensor, of rank 3 or rank 2, of shape\n *     `[batch, width, inChannels]`. If rank 2, batch of 1 is assumed.\n * @param filter The filter, rank 3, of shape\n *     `[filterWidth, inDepth, outDepth]`.\n * @param stride The number of entries by which the filter is moved right at\n *     each step.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dataFormat An optional string from \"NWC\", \"NCW\". Defaults to \"NWC\",\n *     the data is stored in the order of [batch, in_width, in_channels]. Only\n *     \"NWC\" is currently supported.\n * @param dilation The dilation rate in which we sample input values in\n *     atrous convolution. Defaults to `1`. If it is greater than 1, then\n *     stride must be `1`.\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction conv1d_<T extends Tensor2D|Tensor3D>(\n    x: T|TensorLike, filter: Tensor3D|TensorLike, stride: number,\n    pad: 'valid'|'same'|number, dataFormat: 'NWC'|'NCW' = 'NWC', dilation = 1,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'conv1d');\n  const $filter = convertToTensor(filter, 'filter', 'conv1d');\n\n  let x3D = $x as Tensor3D;\n  let reshapedTo3D = false;\n  if ($x.rank === 2) {\n    reshapedTo3D = true;\n    x3D = $x.as3D(1, $x.shape[0], $x.shape[1]);\n  }\n\n  util.assert(\n      x3D.rank === 3,\n      () => `Error in conv1d: input must be rank 3, but got rank ${x3D.rank}.`);\n  util.assert(\n      $filter.rank === 3,\n      () => `Error in conv1d: filter must be rank 3, but got rank ` +\n          `${$filter.rank}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in conv1d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  util.assert(\n      x3D.shape[2] === $filter.shape[1],\n      () => `Error in conv1d: depth of input (${x3D.shape[2]}) must match ` +\n          `input depth for filter ${$filter.shape[1]}.`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(stride, dilation),\n      () => 'Error in conv1D: Either stride or dilation must be 1. ' +\n          `Got stride ${stride} and dilation '${dilation}'`);\n  util.assert(\n      dataFormat === 'NWC',\n      () => `Error in conv1d: got dataFormat of ${\n          dataFormat} but only NWC is currently supported.`);\n\n  const filter4D =\n      $filter.as4D(1, $filter.shape[0], $filter.shape[1], $filter.shape[2]);\n  const input4D = x3D.as4D(x3D.shape[0], 1, x3D.shape[1], x3D.shape[2]);\n  const strides: [number, number] = [1, stride];\n  const dilations: [number, number] = [1, dilation];\n\n  const conv2dDataFormat = 'NHWC';\n\n  const res = conv2d(\n      input4D, filter4D, strides, pad, conv2dDataFormat, dilations,\n      dimRoundingMode);\n\n  if (reshapedTo3D) {\n    return res.as2D(res.shape[2], res.shape[3]) as T;\n  }\n  return res.as3D(res.shape[0], res.shape[2], res.shape[3]) as T;\n}\n\n/**\n * Computes a 2D convolution over the input x.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n *     `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels].\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction conv2d_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filter: Tensor4D|TensorLike,\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n    dilations: [number, number]|number = [1, 1],\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'conv2d');\n  const $filter = convertToTensor(filter, 'filter', 'conv2d');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in conv2d: input must be rank 4, but got rank ${x4D.rank}.`);\n  util.assert(\n      $filter.rank === 4,\n      () => `Error in conv2d: filter must be rank 4, but got rank ` +\n          `${$filter.rank}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in conv2d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n  const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n  util.assert(\n      inDepth === $filter.shape[2],\n      () => `Error in conv2d: depth of input (${inDepth}) must match ` +\n          `input depth for filter ${$filter.shape[2]}.`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n\n  const $dataFormat = conv_util.convertConv2DDataFormat(dataFormat);\n  const convInfo = conv_util.computeConv2DInfo(\n      x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode, false,\n      $dataFormat);\n\n  const grad = (dy: Tensor4D, saved: Tensor[]) => {\n    const [$filter, x4D] = saved as [Tensor4D, Tensor4D];\n    util.assert(\n        conv_util.tupleValuesAreOne(dilations),\n        () => 'Error in gradient of conv2D: dilation rates greater than 1 ' +\n            `are not yet supported in gradients. Got dilations '${dilations}'`);\n\n    return {\n      x: () => conv2dDerInput(x4D.shape, dy, $filter, strides, pad, dataFormat),\n      filter: () =>\n          conv2dDerFilter(x4D, dy, $filter.shape, strides, pad, dataFormat)\n    };\n  };\n\n  const inputsToSave = [$filter, x4D];\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.conv2d(x4D, $filter, convInfo);\n    save([$filter, x4D]);\n\n    return res;\n  }, {x: x4D, filter: $filter}, grad, 'Conv2D', convInfo, inputsToSave);\n\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the derivative of the input of a 2D convolution.\n *\n * @param xShape The shape of the input: [batch, height, width, inDepth].\n * If length of 3, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 4 or rank 3 of shape\n *   `[batch, outHeight, outWidth, outDepth]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n *     `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels].\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\nfunction conv2dDerInput_<T extends Tensor3D|Tensor4D>(\n    xShape: [number, number, number, number]|[number, number, number], dy: T,\n    filter: Tensor4D, strides: [number, number]|number,\n    pad: 'valid'|'same'|number, dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  util.assert(\n      xShape.length === dy.rank,\n      () => `Length of inShape ` +\n          `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n\n  let xShape4D = xShape as [number, number, number, number];\n  let dy4D = dy as Tensor4D;\n  let reshapedTo4D = false;\n  if (dy.rank === 3) {\n    reshapedTo4D = true;\n    dy4D = dy.as4D(1, dy.shape[0], dy.shape[1], dy.shape[2]);\n    xShape4D = [1, xShape[0], xShape[1], xShape[2]];\n  }\n\n  util.assert(\n      xShape4D.length === 4,\n      () =>\n          `Error in conv2dDerInput: inShape must be length 4, but got length ` +\n          `${xShape4D.length}.`);\n  util.assert(\n      dy4D.rank === 4,\n      () => `Error in conv2dDerInput: dy must be rank 4, but got ` +\n          `rank ${dy4D.rank}`);\n  util.assert(\n      filter.rank === 4,\n      () => `Error in conv2dDerInput: filter must be rank 4, but got ` +\n          `rank ${filter.rank}`);\n  const inDepth = dataFormat === 'NHWC' ? xShape4D[3] : xShape4D[1];\n  const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n  util.assert(\n      inDepth === filter.shape[2],\n      () => `Error in conv2dDerInput: depth of input (${inDepth}) must ` +\n          `match input depth for filter ${filter.shape[2]}.`);\n  util.assert(\n      outDepth === filter.shape[3],\n      () => `Error in conv2dDerInput: depth of output (${outDepth}) must ` +\n          `match output depth for filter ${filter.shape[3]}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in conv2dDerInput: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const dilations = 1;\n\n  const grad = (ddx: Tensor4D, saved: Tensor[]) => {\n    const [filter, dy4D] = saved;\n    return {\n      dy4D: () => conv2d(\n          ddx, filter as Tensor4D, strides, pad, dataFormat, dilations,\n          dimRoundingMode),\n      filter: () => conv2dDerFilter(\n          ddx, dy4D as Tensor4D, (filter as Tensor4D).shape, strides, pad,\n          dataFormat, dimRoundingMode)\n    };\n  };\n\n  const $dataFormat = conv_util.convertConv2DDataFormat(dataFormat);\n  const convInfo = conv_util.computeConv2DInfo(\n      xShape4D, filter.shape, strides, dilations, pad, dimRoundingMode, false,\n      $dataFormat);\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.conv2dDerInput(dy4D, filter, convInfo);\n    save([filter, dy4D]);\n    return res;\n  }, {dy4D, filter}, grad);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the derivative of the filter of a 2D convolution.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     [batch, height, width, inChannels]. If rank 3, batch of 1 is assumed.\n * @param dy The dy image, of rank 4 or rank 3, of shape\n *     [batch, height, width, outDepth]. If rank 3, batch of 1 is assumed.\n * @param filterShape The shape of the filter, length 4,\n *     [filterHeight, filterWidth, inDepth, outDepth].\n * @param strides The strides of the convolution: [strideHeight,\n * strideWidth].\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels].\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. The\n *     rounding mode used when computing output dimensions if pad is a\n *     number. If none is provided, it will not round and error if the output\n *     is of fractional size.\n */\nfunction conv2dDerFilter_<T extends Tensor3D|Tensor4D>(\n    x: T, dy: T, filterShape: [number, number, number, number],\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n    dimRoundingMode?: 'floor'|'round'|'ceil'): Tensor4D {\n  let x4D = x as Tensor4D;\n  if (x.rank === 3) {\n    x4D = x.as4D(1, x.shape[0], x.shape[1], x.shape[2]);\n  }\n  let dy4D = dy as Tensor4D;\n  if (dy4D.rank === 3) {\n    dy4D = dy.as4D(1, dy.shape[0], dy.shape[1], dy.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in conv2dDerFilter: input must be rank 4, but got shape ` +\n          `${x4D.shape}.`);\n  util.assert(\n      dy4D.rank === 4,\n      () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ` +\n          `${dy4D.shape}.`);\n  util.assert(\n      filterShape.length === 4,\n      () => `Error in conv2dDerFilter: filterShape must be length 4, but got ` +\n          `${filterShape}.`);\n  const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n  const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n  util.assert(\n      inDepth === filterShape[2],\n      () => `Error in conv2dDerFilter: depth of input ${inDepth}) must ` +\n          `match input depth in filter (${filterShape[2]}.`);\n  util.assert(\n      outDepth === filterShape[3],\n      () => `Error in conv2dDerFilter: depth of dy (${outDepth}) must ` +\n          `match output depth for filter (${filterShape[3]}).`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in conv2dDerFilter: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const dilations = 1;\n  const $dataFormat = conv_util.convertConv2DDataFormat(dataFormat);\n  const convInfo = conv_util.computeConv2DInfo(\n      x4D.shape, filterShape, strides, dilations, pad, dimRoundingMode, false,\n      $dataFormat);\n  return ENGINE.runKernelFunc(\n      backend => backend.conv2dDerFilter(x4D, dy4D, convInfo), {x4D, dy4D});\n}\n\n/**\n * Computes the transposed 2D convolution of an image, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 4 or rank 3, of shape\n *   `[batch, height, width, inDepth]`. If rank 3, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n *     `[filterHeight, filterWidth, outDepth, inDepth]`.\n *     `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 4 or rank 3:\n *     `[batch, height, width, outDepth]`. If rank 3, batch of 1 is assumed.\n * @param strides The strides of the original convolution:\n *     `[strideHeight, strideWidth]`.\n * @param pad  The type of padding algorithm used in the non-transpose version\n *    of the op.\n * @param dimRoundingMode The rounding mode used when computing output\n *    dimensions if pad is a number. If none is provided, it will not round\n *    and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction conv2dTranspose_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filter: Tensor4D|TensorLike,\n    outputShape: [number, number, number, number]|[number, number, number],\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'conv2dTranspose');\n  const $filter = convertToTensor(filter, 'filter', 'conv2dTranspose');\n\n  return conv2dDerInput_(\n      outputShape, $x, $filter, strides, pad, 'NHWC', dimRoundingMode);\n}\n\n/**\n * Depthwise 2D convolution.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n *     https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n *     `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n *   - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *   - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction depthwiseConv2d_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filter: Tensor4D|TensorLike,\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dataFormat: 'NHWC'|'NCHW' = 'NHWC',\n    dilations: [number, number]|number = [1, 1],\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'depthwiseConv2d');\n  const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in depthwiseConv2d: input must be rank 4, but got ` +\n          `rank ${x4D.rank}.`);\n  util.assert(\n      $filter.rank === 4,\n      () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ` +\n          `${$filter.rank}.`);\n  util.assert(\n      x4D.shape[3] === $filter.shape[2],\n      () => `Error in depthwiseConv2d: number of input channels ` +\n          `(${x4D.shape[3]}) must match the inChannels dimension in ` +\n          `filter ${$filter.shape[2]}.`);\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () =>\n          'Error in depthwiseConv2d: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in depthwiseConv2d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computeConv2DInfo(\n      x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode,\n      true /* depthwise */);\n\n  const grad = (dy: Tensor4D, saved: Tensor[]) => {\n    util.assert(\n        conv_util.tupleValuesAreOne(dilations),\n        () => 'Error in gradient of depthwiseConv2d: dilation rates ' +\n            `greater than 1 are not yet supported. Got dilations ` +\n            `'${dilations}'`);\n    const [x4D, $filter] = saved;\n    return {\n      x: () => depthwiseConv2dDerInput(\n          (x4D as Tensor4D).shape, dy, $filter as Tensor4D, convInfo),\n      filter: () => depthwiseConv2dDerFilter(\n          x4D as Tensor4D, dy, ($filter as Tensor4D).shape, convInfo),\n    };\n  };\n\n  const inputsToSave = [x4D, $filter];\n  const res = ENGINE.runKernelFunc(\n      (backend, save) => {\n        const res = backend.depthwiseConv2D(x4D, $filter, convInfo);\n        save([x4D, $filter]);\n        return res;\n      },\n      {x: x4D, filter: $filter}, grad, 'DepthwiseConv2dNative', convInfo,\n      inputsToSave);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * 2-D convolution with separable filters.\n *\n * Performs a depthwise convolution that acts separately on channels followed\n * by a pointwise convolution that mixes channels. Note that this is\n * separability between dimensions [1, 2] and 3, not spatial separability\n * between dimensions 1 and 2.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d](\n *     https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param depthwiseFilter The depthwise filter tensor, rank 4, of shape\n *     `[filterHeight, filterWidth, inChannels, channelMultiplier]`. This is\n *     the filter used in the first step.\n * @param pointwiseFilter The pointwise filter tensor, rank 4, of shape\n *     `[1, 1, inChannels * channelMultiplier, outChannels]`. This is\n *     the filter used in the second step.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n *   - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *   - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels]. Only \"NHWC\" is currently supported.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction separableConv2d_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, depthwiseFilter: Tensor4D|TensorLike,\n    pointwiseFilter: Tensor4D|TensorLike, strides: [number, number]|number,\n    pad: 'valid'|'same', dilation: [number, number]|number = [1, 1],\n    dataFormat: 'NHWC'|'NCHW' = 'NHWC'): T {\n  const $x = convertToTensor(x, 'x', 'separableConv2d');\n  const $depthwiseFilter =\n      convertToTensor(depthwiseFilter, 'depthwiseFilter', 'separableConv2d');\n  const $pointwiseFilter =\n      convertToTensor(pointwiseFilter, 'pointwiseFilter', 'separableConv2d');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n\n  if (dataFormat === 'NCHW') {\n    throw new Error(\n        'separableConv2d currently does not support dataFormat NCHW; only ' +\n        'NHWC is supported');\n  }\n\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in separableConv2d: input must be rank 4, but got ` +\n          `rank ${x4D.rank}.`);\n  util.assert(\n      $depthwiseFilter.rank === 4,\n      () => `Error in separableConv2d: depthwise filter must be rank 4, but ` +\n          `got rank ${$depthwiseFilter.rank}.`);\n  util.assert(\n      $pointwiseFilter.rank === 4,\n      () => `Error in separableConv2d: pointwise filter must be rank 4, but ` +\n          `got rank ${$depthwiseFilter.rank}.`);\n  util.assert(\n      $pointwiseFilter.shape[0] === 1,\n      () =>\n          `Error in separableConv2d: the first dimension of pointwise filter ` +\n          ` must be 1, but got ${$pointwiseFilter.shape[0]}.`);\n  util.assert(\n      $pointwiseFilter.shape[1] === 1,\n      () => `Error in separableConv2d: the second dimension of pointwise ` +\n          `filter must be 1, but got ${$pointwiseFilter.shape[1]}.`);\n\n  const inChannels = $depthwiseFilter.shape[2];\n  const channelMultiplier = $depthwiseFilter.shape[3];\n  util.assert(\n      $pointwiseFilter.shape[2] === inChannels * channelMultiplier,\n      () =>\n          `Error in separableConv2d: the third dimension of pointwise filter ` +\n          `must be ${inChannels * channelMultiplier}, ` +\n          `but got ${$pointwiseFilter.shape[2]}.`);\n\n  const depthwise = depthwiseConv2d(\n      x4D, $depthwiseFilter, strides, pad, dataFormat, dilation);\n  const pointwiseStride = 1;\n  const res =\n      conv2d(depthwise, $pointwiseFilter, pointwiseStride, 'valid', dataFormat);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\nfunction parseTupleParam(\n    param: number|[number, number]|[number, number, number]):\n    [number, number, number] {\n  if (typeof param === 'number') {\n    return [param, param, param];\n  }\n  if (param.length === 2) {\n    return [param[0], param[1], 1];\n  }\n  return param;\n}\n\nfunction tupleValuesAreOne(\n    param: number|[number, number]|[number, number, number]): boolean {\n  const [dimA, dimB, dimC] = parseTupleParam(param);\n  return dimA === 1 && dimB === 1 && dimC === 1;\n}\n\nfunction eitherStridesOrDilationsAreOne(\n    strides: number|[number, number]|[number, number, number],\n    dilations: number|[number, number]|[number, number, number]): boolean {\n  return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations);\n}\n\nfunction depthwiseConv2dDerInput_<T extends Tensor3D|Tensor4D>(\n    xShape: [number, number, number, number]|[number, number, number], dy: T,\n    filter: Tensor4D, convInfo: conv_util.Conv2DInfo): T {\n  let dy4D = dy as Tensor4D;\n  let reshapedTo4D = false;\n  if (dy.rank === 3) {\n    reshapedTo4D = true;\n    dy4D = dy.as4D(1, dy.shape[0], dy.shape[1], dy.shape[2]);\n  }\n  const res = ENGINE.runKernelFunc(\n      backend => backend.depthwiseConv2DDerInput(dy4D, filter, convInfo),\n      {dy4D});\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\nfunction depthwiseConv2dDerFilter_<T extends Tensor3D|Tensor4D>(\n    x: T, dy: T, filterShape: [number, number, number, number],\n    convInfo: conv_util.Conv2DInfo): Tensor4D {\n  let x4D = x as Tensor4D;\n  if (x.rank === 3) {\n    x4D = x.as4D(1, x.shape[0], x.shape[1], x.shape[2]);\n  }\n  let dy4D = dy as Tensor4D;\n  if (dy4D.rank === 3) {\n    dy4D = dy.as4D(1, dy.shape[0], dy.shape[1], dy.shape[2]);\n  }\n  return ENGINE.runKernelFunc(\n      backend => backend.depthwiseConv2DDerFilter(x4D, dy4D, convInfo),\n      {x4D, dy4D});\n}\n\n/**\n * Computes a 3D convolution over the input x.\n *\n * @param x The input tensor, of rank 5 or rank 4, of shape\n *     `[batch, depth, height, width, channels]`. If rank 4,\n * batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n *     `[filterDepth, filterHeight, filterWidth, inChannels, outChannels]`.\n *      inChannels must match between input and filter.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dataFormat: An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n *     \"NDHWC\". Specify the data format of the input and output data. With the\n *     default format \"NDHWC\", the data is stored in the order of: [batch,\n *     depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationDepth, dilationHeight,\n *     dilationWidth]` in which we sample input values across the height\n *     and width dimensions in atrous convolution. Defaults to `[1, 1, 1]`.\n *     If `dilations` is a single number, then\n *     `dilationDepth == dilationHeight == dilationWidth`. If it is greater\n *     than 1, then all values of `strides` must be 1.\n */\n\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction conv3d_<T extends Tensor4D|Tensor5D>(\n    x: T|TensorLike, filter: Tensor5D|TensorLike,\n    strides: [number, number, number]|number, pad: 'valid'|'same',\n    dataFormat: 'NDHWC'|'NCDHW' = 'NDHWC',\n    dilations: [number, number, number]|number = [1, 1, 1]): T {\n  const $x = convertToTensor(x, 'x', 'conv3d');\n  const $filter = convertToTensor(filter, 'filter', 'conv3d');\n\n  let x5D = $x as Tensor5D;\n  let reshapedTo5D = false;\n\n  if ($x.rank === 4) {\n    reshapedTo5D = true;\n    x5D = $x.as5D(1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]);\n  }\n  util.assert(\n      x5D.rank === 5,\n      () => `Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`);\n  util.assert(\n      $filter.rank === 5,\n      () => `Error in conv3d: filter must be rank 5, but got rank ` +\n          `${$filter.rank}.`);\n  util.assert(\n      x5D.shape[4] === $filter.shape[3],\n      () => `Error in conv3d: depth of input (${x5D.shape[4]}) must match ` +\n          `input depth for filter ${$filter.shape[3]}.`);\n  util.assert(\n      eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in conv3D: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  util.assert(\n      dataFormat === 'NDHWC',\n      () => `Error in conv3d: got dataFormat of ${\n          dataFormat} but only NDHWC is currently supported.`);\n\n  const convInfo = conv_util.computeConv3DInfo(\n      x5D.shape, $filter.shape, strides, dilations, pad);\n\n  const grad = (dy: Tensor5D, saved: Tensor[]) => {\n    util.assert(\n        tupleValuesAreOne(dilations),\n        () =>\n            'Error in gradient of conv3D: dilation rates greater than 1 are ' +\n            `not yet supported in gradients. Got dilations '${dilations}'`);\n    const [x5D, $filter] = saved;\n    return {\n      x: () => conv3dDerInput_(\n          (x5D as Tensor5D).shape, dy, $filter as Tensor5D, strides, pad),\n      $filter: () => conv3dDerFilter_(\n          x5D as Tensor5D, dy, ($filter as Tensor5D).shape, strides, pad)\n    };\n  };\n\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.conv3d(x5D, $filter, convInfo);\n    save([x5D, $filter]);\n    return res;\n  }, {x: x5D, $filter}, grad);\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the derivative of the input of a 3D convolution.\n *\n * @param xShape The shape of the input: [batch, depth, height, width,\n * in_channels]. If length of 4, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 5 or rank 4 of shape\n *   `[batch, outDepth, outHeight, outWidth, in_channels]`.\n * If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n *     `[filterDepth, filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n */\nfunction conv3dDerInput_<T extends Tensor4D|Tensor5D>(\n    xShape:\n        [number, number, number, number,\n         number]|[number, number, number, number],\n    dy: T, filter: Tensor5D, strides: [number, number, number]|number,\n    pad: 'valid'|'same'): T {\n  util.assert(\n      xShape.length === dy.rank,\n      () => `Length of inShape ` +\n          `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n\n  let xShape5D = xShape as [number, number, number, number, number];\n  let dy5D = dy as Tensor5D;\n  let reshapedTo5D = false;\n  if (dy.rank === 4) {\n    reshapedTo5D = true;\n    dy5D = dy.as5D(1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]);\n    xShape5D = [1, xShape[0], xShape[1], xShape[2], xShape[3]];\n  }\n\n  const inDepth = xShape5D[4];\n  const outDepth = dy5D.shape[4];\n  util.assert(\n      xShape5D.length === 5,\n      () =>\n          `Error in conv3dDerInput: inShape must be length 5, but got length ` +\n          `${xShape5D.length}.`);\n  util.assert(\n      dy5D.rank === 5,\n      () => `Error in conv3dDerInput: dy must be rank 5, but got ` +\n          `rank ${dy5D.rank}`);\n  util.assert(\n      filter.rank === 5,\n      () => `Error in conv3dDerInput: filter must be rank 5, but got ` +\n          `rank ${filter.rank}`);\n  util.assert(\n      inDepth === filter.shape[3],\n      () => `Error in conv3dDerInput: depth of input (${inDepth}) must ` +\n          `match input depth for filter ${filter.shape[3]}.`);\n  util.assert(\n      outDepth === filter.shape[4],\n      () => `Error in conv3dDerInput: depth of output (${outDepth}) must ` +\n          `match output depth for filter ${filter.shape[4]}.`);\n\n  const dilations = 1;\n\n  const convInfo = conv_util.computeConv3DInfo(\n      xShape5D, filter.shape, strides, dilations, pad);\n  const res = ENGINE.runKernelFunc(\n      backend => backend.conv3dDerInput(dy5D, filter, convInfo), {dy5D});\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the derivative of the filter of a 3D convolution.\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n *     [batch, depth, height, width, inChannels]. If rank 4, batch of 1 is\n *     assumed.\n * @param dy The dy image, of rank 5 or rank 4, of shape\n *     [batch, depth, height, width, outDepth]. If rank 4, batch of 1 is\n *     assumed.\n * @param filterShape The shape of the filter, length 5,\n *     [filterDepth, filterHeight, filterWidth, inDepth, outDepth].\n * @param strides The strides of the convolution: [strideDepth, strideHeight,\n * strideWidth].\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n */\nfunction conv3dDerFilter_<T extends Tensor4D|Tensor5D>(\n    x: T, dy: T, filterShape: [number, number, number, number, number],\n    strides: [number, number, number]|number, pad: 'valid'|'same'): Tensor5D {\n  let x5D = x as Tensor5D;\n  if (x.rank === 4) {\n    x5D = x.as5D(1, x.shape[0], x.shape[1], x.shape[2], x.shape[3]);\n  }\n  let dy5D = dy as Tensor5D;\n  if (dy5D.rank === 4) {\n    dy5D = dy.as5D(1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]);\n  }\n  util.assert(\n      x5D.rank === 5,\n      () => `Error in conv3dDerFilter: input must be rank 5, but got shape ` +\n          `${x5D.shape}.`);\n  util.assert(\n      dy5D.rank === 5,\n      () => `Error in conv3dDerFilter: dy must be rank 5, but got shape ` +\n          `${dy5D.shape}.`);\n  util.assert(\n      filterShape.length === 5,\n      () => `Error in conv3dDerFilter: filterShape must be length 5, but got ` +\n          `${filterShape}.`);\n  util.assert(\n      x5D.shape[4] === filterShape[3],\n      () => `Error in conv3dDerFilter: depth of input ${x5D.shape[4]}) must ` +\n          `match input depth in filter (${filterShape[3]}.`);\n  util.assert(\n      dy5D.shape[4] === filterShape[4],\n      () => `Error in conv3dDerFilter: depth of dy (${dy5D.shape[4]}) must ` +\n          `match output depth for filter (${filterShape[4]}).`);\n\n  const dilations = 1;\n\n  const convInfo = conv_util.computeConv3DInfo(\n      x5D.shape, filterShape, strides, dilations, pad);\n  return ENGINE.runKernelFunc(\n      backend => backend.conv3dDerFilter(x5D, dy5D, convInfo), {x5D, dy5D});\n}\n\n/**\n * Computes the transposed 3D convolution of a volume, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 5 or rank 4, of shape\n *   `[batch, depth, height, width, inDepth]`. If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n *     `[depth, filterHeight, filterWidth, outDepth, inDepth]`.\n *     `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 5 or rank 4:\n *     `[batch, depth, height, width, outDepth]`. If rank 3, batch of 1 is\n *    assumed.\n * @param strides The strides of the original convolution:\n *     `[strideDepth, strideHeight, strideWidth]`.\n * @param pad  The type of padding algorithm used in the non-transpose version\n *    of the op.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction conv3dTranspose_<T extends Tensor4D|Tensor5D>(\n    x: T|TensorLike, filter: Tensor5D|TensorLike,\n    outputShape:\n        [number, number, number, number,\n         number]|[number, number, number, number],\n    strides: [number, number, number]|number, pad: 'valid'|'same'): T {\n  const $x = convertToTensor(x, 'x', 'conv3dTranspose');\n  const $filter = convertToTensor(filter, 'filter', 'conv3dTranspose');\n\n  return conv3dDerInput_(outputShape, $x, $filter, strides, pad);\n}\n\nexport const conv1d = op({conv1d_});\nexport const conv2d = op({conv2d_});\nexport const conv3d = op({conv3d_});\nexport const conv2dDerFilter = op({conv2dDerFilter_});\nexport const conv2dDerInput = op({conv2dDerInput_});\nexport const depthwiseConv2d = op({depthwiseConv2d_});\nexport const depthwiseConv2dDerInput = op({depthwiseConv2dDerInput_});\nexport const depthwiseConv2dDerFilter = op({depthwiseConv2dDerFilter_});\nexport const separableConv2d = op({separableConv2d_});\nexport const conv2dTranspose = op({conv2dTranspose_});\nexport const conv3dTranspose = op({conv3dTranspose_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor1D, Tensor2D, Tensor3D} from '../tensor';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {op} from './operation';\n\n/**\n * Computes the dot product of two matrices, A * B. These must be matrices.\n *\n * ```js\n * const a = tf.tensor2d([1, 2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.matMul(b).print();  // or tf.matMul(a, b)\n * ```\n * @param a First matrix in dot product operation.\n * @param b Second matrix in dot product operation.\n * @param transposeA If true, `a` is transposed before multiplication.\n * @param transposeB If true, `b` is transposed before multiplication.\n */\n/** @doc {heading: 'Operations', subheading: 'Matrices'} */\nfunction matMul_<T extends Tensor>(\n    a: T|TensorLike, b: T|TensorLike, transposeA = false,\n    transposeB = false): T {\n  let $a = convertToTensor(a, 'a', 'matMul');\n  let $b = convertToTensor(b, 'b', 'matMul');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const innerShapeA =\n      transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1];\n  const innerShapeB =\n      transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2];\n\n  const outerShapeA =\n      transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2];\n  const outerShapeB =\n      transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1];\n\n  const outerDimsA = $a.shape.slice(0, -2);\n  const outerDimsB = $b.shape.slice(0, -2);\n  const batchDimA = util.sizeFromShape(outerDimsA);\n  const batchDimB = util.sizeFromShape(outerDimsB);\n\n  util.assert(\n      $a.rank >= 2 && $b.rank >= 2 && $a.rank === $b.rank,\n      () => `Error in matMul: inputs must have the same rank of at least 2, ` +\n          `got ranks ${$a.rank} and ${$b.rank}.`);\n\n  util.assert(\n      util.arraysEqual(outerDimsA, outerDimsB),\n      () => `Error in matMul: outer dimensions (${outerDimsA}) and (` +\n          `${outerDimsB}) of Tensors with shapes ${$a.shape} and ` +\n          `${$b.shape} must match.`);\n\n  util.assert(\n      innerShapeA === innerShapeB,\n      () => `Error in matMul: inner shapes (${innerShapeA}) and (` +\n          `${innerShapeB}) of Tensors with shapes ${$a.shape} and ` +\n          `${$b.shape} and transposeA=${transposeA}` +\n          ` and transposeB=${transposeB} must match.`);\n\n  const outShape = $a.shape.slice(0, -2).concat([outerShapeA, outerShapeB]);\n\n  const a3D = transposeA ? $a.as3D(batchDimA, innerShapeA, outerShapeA) :\n                           $a.as3D(batchDimA, outerShapeA, innerShapeA);\n  const b3D = transposeB ? $b.as3D(batchDimB, outerShapeB, innerShapeB) :\n                           $b.as3D(batchDimB, innerShapeB, outerShapeB);\n\n  const grad = (dy: Tensor3D, saved: Tensor[]) => {\n    const [a3D, b3D] = saved as Tensor3D[];\n    if (!transposeA && !transposeB) {\n      return {\n        a: () => dy.matMul(b3D, false, true),\n        b: () => a3D.matMul(dy, true, false)\n      };\n    } else if (!transposeA && transposeB) {\n      return {\n        a: () => dy.matMul(b3D, false, false),\n        b: () => dy.matMul(a3D, true, false)\n      };\n    } else if (transposeA && !transposeB) {\n      return {\n        a: () => b3D.matMul(dy, false, true),\n        b: () => a3D.matMul(dy, false, false)\n      };\n    } else {\n      return {\n        a: () => b3D.matMul(dy, true, true),\n        b: () => dy.matMul(a3D, true, true)\n      };\n    }\n  };\n\n  const attrs = {transposeA, transposeB};\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.batchMatMul(a3D, b3D, transposeA, transposeB);\n    save([a3D, b3D]);\n    return res;\n  }, {a: a3D, b: b3D}, grad, 'BatchMatMul', attrs);\n  return res.reshape(outShape) as T;\n}\n\n/**\n * Computes the outer product of two vectors, `v1` and `v2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([3, 4, 5]);\n *\n * tf.outerProduct(a, b).print();\n * ```\n * @param v1 The first vector in the outer product operation.\n * @param v2 The second vector in the outer product operation.\n */\n/** @doc {heading: 'Operations', subheading: 'Matrices'} */\nfunction outerProduct_(\n    v1: Tensor1D|TensorLike, v2: Tensor1D|TensorLike): Tensor2D {\n  const $v1 = convertToTensor(v1, 'v1', 'outerProduct');\n  const $v2 = convertToTensor(v2, 'v2', 'outerProduct');\n\n  util.assert(\n      $v1.rank === 1 && $v2.rank === 1,\n      () => `Error in outerProduct: inputs must be rank 1, but got ranks ` +\n          `${$v1.rank} and ${$v2.rank}.`);\n\n  return $v1.as2D(-1, 1).matMul($v2.as2D(1, -1));\n}\n\n/**\n * Computes the dot product of two matrices and/or vectors, `t1` and `t2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor2d([[1, 2], [3, 4]]);\n * const c = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n *\n * a.dot(b).print();  // or tf.dot(a, b)\n * b.dot(a).print();\n * b.dot(c).print();\n * ```\n * @param t1 The first tensor in the dot operation.\n * @param t2 The second tensor in the dot operation.\n */\n/** @doc {heading: 'Operations', subheading: 'Matrices'} */\nfunction dot_(t1: Tensor|TensorLike, t2: Tensor|TensorLike): Tensor {\n  const $t1 = convertToTensor(t1, 't1', 'dot');\n  const $t2 = convertToTensor(t2, 't2', 'dot');\n  util.assert(\n      ($t1.rank === 1 || $t1.rank === 2) && ($t2.rank === 1 || $t2.rank === 2),\n      () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ` +\n          `${$t1.rank} and ${$t2.rank}.`);\n\n  const t1Inner = ($t1.rank === 1 ? $t1.size : $t1.shape[1]);\n  const t2Inner = ($t2.rank === 1 ? $t2.size : $t2.shape[0]);\n\n  util.assert(\n      t1Inner === t2Inner,\n      () => `Error in dot: inner dimensions of inputs must match, but got ` +\n          `${t1Inner} and ${t2Inner}.`);\n\n  if ($t1.rank === 1 && $t2.rank === 1) {\n    return $t1.as2D(1, -1).matMul($t2.as2D(-1, 1)).asScalar();\n  } else if ($t1.rank === 1 && $t2.rank === 2) {\n    return $t1.as2D(1, -1).matMul($t2.as2D($t2.shape[0], $t2.shape[1])).as1D();\n  } else if ($t1.rank === 2 && $t2.rank === 1) {\n    return $t1.matMul($t2.as2D(-1, 1)).as1D();\n  } else {\n    return $t1.matMul($t2.as2D($t2.shape[0], $t2.shape[1]));\n  }\n}\n\nexport const matMul = op({matMul_});\nexport const dot = op({dot_});\nexport const outerProduct = op({outerProduct_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {op} from './operation';\n\n/**\n * Reverses a `tf.Tensor1D`.\n *\n * @param x The input tensor.\n */\nfunction reverse1d_(x: Tensor1D|TensorLike): Tensor1D {\n  const $x = convertToTensor(x, 'x', 'reverse');\n  util.assert(\n      $x.rank === 1,\n      () => `Error in reverse1D: x must be rank 1 but got rank ${$x.rank}.`);\n  return reverse($x, 0);\n}\n\n/**\n * Reverses a `tf.Tensor2D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n *     range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse2d_(x: Tensor2D|TensorLike, axis?: number|number[]): Tensor2D {\n  const $x = convertToTensor(x, 'x', 'reverse');\n  util.assert(\n      $x.rank === 2,\n      () => `Error in reverse2D: x must be rank 2 but got rank ${$x.rank}.`);\n  return reverse($x, axis);\n}\n\n/**\n * Reverses a `tf.Tensor3D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n *     range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse3d_(x: Tensor3D|TensorLike, axis?: number|number[]): Tensor3D {\n  const $x = convertToTensor(x, 'x', 'reverse');\n  util.assert(\n      $x.rank === 3,\n      () => `Error in reverse3D: x must be rank 3 but got rank ${$x.rank}.`);\n  return reverse($x, axis);\n}\n\n/**\n * Reverses a `tf.Tensor4D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n *     range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse4d_(x: Tensor4D|TensorLike, axis?: number|number[]): Tensor4D {\n  const $x = convertToTensor(x, 'x', 'reverse');\n  util.assert(\n      $x.rank === 4,\n      () => `Error in reverse4D: x must be rank 4 but got rank ${$x.rank}.`);\n  return reverse($x, axis);\n}\n\n/**\n * Reverses a `tf.Tensor` along a specified axis.\n *\n * Also available are stricter rank-specific methods that assert that `x` is\n * of the given rank:\n *   - `tf.reverse1d`\n *   - `tf.reverse2d`\n *   - `tf.reverse3d`\n *   - `tf.reverse4d`\n *\n * Except `tf.reverse1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.reverse().print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.reverse(axis).print();\n * ```\n * @param x The input tensor to be reversed.\n * @param axis The set of dimensions to reverse. Must be in the\n *     range [-rank(x), rank(x)). Defaults to all axes.\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction reverse_<T extends Tensor>(\n    x: T|TensorLike, axis?: number|number[]): T {\n  const $x = convertToTensor(x, 'x', 'reverse');\n\n  if ($x.rank === 0) {\n    return $x.clone();\n  }\n  const axes = util.parseAxisParam(axis, $x.shape);\n  const grad = (dy: T) => {\n    return {$x: () => dy.reverse(axes)};\n  };\n  const res =\n      ENGINE.runKernelFunc(backend => backend.reverse($x, axes), {$x}, grad);\n  return res.reshapeAs($x);\n}\n\nexport const reverse = op({reverse_});\nexport const reverse1d = op({reverse1d_});\nexport const reverse2d = op({reverse2d_});\nexport const reverse3d = op({reverse3d_});\nexport const reverse4d = op({reverse4d_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor3D, Tensor4D, Tensor5D} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {batchToSpaceND, spaceToBatchND} from './array_ops';\nimport * as conv_util from './conv_util';\nimport {op} from './operation';\n\n/**\n * Computes the 2D max pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in dilated pooling. Defaults to `[1, 1]`. If `dilations` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\nfunction maxPoolImpl_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, dilations: [number, number]|number,\n    pad: 'valid'|'same'|number, dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'maxPool');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in maxPool: input must be rank 4 but got rank ${x4D.rank}.`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in maxPool: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n  const convInfo = conv_util.computePool2DInfo(\n      x4D.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n  if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n      util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n    return $x.clone();\n  }\n\n  const grad = (dy: Tensor4D, saved: Tensor[]) => {\n    const [x4D, y] = saved;\n    return {\n      x: () => maxPoolBackprop(\n          dy, x4D as Tensor4D, y as Tensor4D, filterSize, strides, dilations,\n          pad)\n    };\n  };\n\n  const inputsToSave = [x4D];\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.maxPool(x4D, convInfo);\n    save([x4D, y]);\n    return y;\n  }, {x: x4D}, grad, 'MaxPool', convInfo, inputsToSave);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the 2D max pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction maxPool_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  return maxPoolImpl_(x, filterSize, strides, 1, pad, dimRoundingMode);\n}\n\n/**\n * Computes the 2D average pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in dilated pooling. Defaults to `[1, 1]`. If `dilations` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param pad The type of padding algorithm:\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *         https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\nfunction avgPoolImpl_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, dilations: [number, number]|number,\n    pad: 'valid'|'same'|number, dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $x = convertToTensor(x, 'x', 'avgPool', 'float32');\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in avgPool: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in avgPool: x must be rank 4 but got rank ${x4D.rank}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in avgPool: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool2DInfo(\n      x4D.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n  if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n      util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n    return $x.clone();\n  }\n\n  const grad = (dy: Tensor4D) => {\n    return {\n      x: () => avgPoolBackprop(dy, x4D, filterSize, strides, dilations, pad)\n    };\n  };\n\n  let res = ENGINE.runKernelFunc(\n      backend => backend.avgPool(x4D, convInfo), {x: x4D}, grad, 'AvgPool',\n      convInfo);\n  res = res.cast($x.dtype);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the 2D average pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm:\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *         https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction avgPool_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  return avgPoolImpl_(x, filterSize, strides, 1, pad, dimRoundingMode);\n}\n\n/**\n * Performs an N-D pooling operation\n *\n * @param input The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param windowShape The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param poolingType The type of pooling, either 'max' or 'avg'.\n * @param pad The type of padding algorithm:\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *         https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in dilated pooling. Defaults to `[1, 1]`. If `dilationRate` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction pool_<T extends Tensor3D|Tensor4D>(\n    input: T|TensorLike, windowShape: [number, number]|number,\n    poolingType: 'avg'|'max', pad: 'valid'|'same'|number,\n    dilations?: [number, number]|number, strides?: [number, number]|number) {\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  if (strides == null) {\n    strides = 1;\n  }\n  if (pad === 0) {\n    pad = 'valid';\n  }\n  const $x = convertToTensor(input, 'x', 'maxPool');\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in pool: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  const convInfo = conv_util.computePool2DInfo(\n      x4D.shape, windowShape, strides, dilations, pad);\n  const dilation: [number, number] =\n      [convInfo.dilationHeight, convInfo.dilationWidth];\n\n  // The following implementation does batchToSpace(pool(spaceToBatch(x)))\n  // whenever dilation > 1 since the TF kernels do not support dilation > 1.\n  // tslint:disable-next-line:max-line-length\n  // https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L1037\n\n  let basePadding: number[][];\n  if (pad === 'same') {\n    basePadding = withSpaceToBatchBasePaddings(\n        [convInfo.filterHeight, convInfo.filterWidth], dilation);\n  } else {\n    basePadding = [[0, 0], [0, 0]];\n  }\n  const isDilationOne = dilation[0] === 1 && dilation[1] === 1;\n  const [adjustedPadding, adjustedCrops] = requiredSpaceToBatchPaddings(\n      [convInfo.inHeight, convInfo.inWidth], dilation, basePadding);\n  const convertedPad = isDilationOne ? pad : 'valid';\n  const convertedX =\n      isDilationOne ? x4D : spaceToBatchND(x4D, dilation, adjustedPadding);\n  const forwardOp = poolingType === 'avg' ?\n      () => avgPoolImpl_(\n          convertedX, windowShape, strides, 1 /* dilation */, convertedPad) :\n      () => maxPoolImpl_(\n          convertedX, windowShape, strides, 1 /* dilation */, convertedPad);\n  const y = forwardOp();\n  const res = isDilationOne ? y : batchToSpaceND(y, dilation, adjustedCrops);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the backprop of a 2D max pool.\n *\n * @param dy The dy error, of rank 4 or rank 3 of shape\n *     [batchSize, height, width, channels]. If rank 3, batch of 1 is\n * assumed.\n * @param input The original input image, of rank 4, of shape\n *     [batchSize, height, width, channels].\n * @param output The original output image, of rank 4, of shape\n *     [batchSize, outHeight, outWidth, channels].\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. The\n *     rounding mode used when computing output dimensions if pad is a\n *     number. If none is provided, it will not round and error if the output\n *     is of fractional size.\n */\nfunction maxPoolBackprop(\n    dy: Tensor4D|TensorLike, input: Tensor4D|TensorLike,\n    output: Tensor4D|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, dilations: [number, number]|number,\n    pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): Tensor4D {\n  const $dy = convertToTensor(dy, 'dy', 'maxPoolBackprop');\n  const $input = convertToTensor(input, 'input', 'maxPoolBackprop');\n  const $output = convertToTensor(output, 'output', 'maxPoolBackprop');\n  util.assert(\n      $input.rank === $dy.rank,\n      () => `Rank of input (${$input.rank}) does not match rank of dy ` +\n          `(${$dy.rank})`);\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () =>\n          'Error in maxPoolBackProp: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n\n  util.assert(\n      $dy.rank === 4,\n      () => `Error in maxPoolBackprop: dy must be rank 4 but got rank ` +\n          `${$dy.rank}.`);\n  util.assert(\n      $input.rank === 4,\n      () => `Error in maxPoolBackprop: input must be rank 4 but got rank ` +\n          `${$input.rank}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in maxPoolBackprop: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool2DInfo(\n      $input.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n  const res = ENGINE.runKernelFunc(\n      backend => backend.maxPoolBackprop($dy, $input, $output, convInfo),\n      {$dy, $input});\n  return res;\n}\n\n/**\n * Computes the backprop of an 2D avg pool.\n *\n * @param dy The dy error, of rank 4 or rank 3 of shape\n *     [batchSize, height, width, channels]. If rank 3, batch of 1 is\n * assumed.\n * @param input The input image, of rank 4 or rank 3 of shape\n *     [batchSize, height, width, channels]. If rank 3, batch of 1 is\n * assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n */\nfunction avgPoolBackprop<T extends Tensor3D|Tensor4D>(\n    dy: T|TensorLike, input: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number, dilations: [number, number]|number,\n    pad: 'valid'|'same'|number): T {\n  const $dy = convertToTensor(dy, 'dy', 'avgPoolBackprop');\n  const $input = convertToTensor(input, 'input', 'avgPoolBackprop');\n  util.assert(\n      $input.rank === $dy.rank,\n      () => `Rank of input (${$input.rank}) does not match rank of dy (${\n          $dy.rank})`);\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () =>\n          'Error in avgPoolBackprop: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n\n  let input4D = $input as Tensor4D;\n  let dy4D = $dy as Tensor4D;\n  let reshapedTo4D = false;\n  if ($input.rank === 3) {\n    reshapedTo4D = true;\n    input4D = $input.as4D(1, $input.shape[0], $input.shape[1], $input.shape[2]);\n    dy4D = $dy.as4D(1, $dy.shape[0], $dy.shape[1], $dy.shape[2]);\n  }\n\n  util.assert(\n      dy4D.rank === 4,\n      () => `Error in avgPoolBackprop: dy must be rank 4 but got rank ` +\n          `${dy4D.rank}.`);\n  util.assert(\n      input4D.rank === 4,\n      () => `Error in avgPoolBackprop: input must be rank 4 but got rank ` +\n          `${input4D.rank}.`);\n\n  const convInfo = conv_util.computePool2DInfo(\n      input4D.shape, filterSize, strides, dilations, pad);\n  const res = ENGINE.runKernelFunc(\n      backend => backend.avgPoolBackprop(dy4D, input4D, convInfo),\n      {dy4D, input4D});\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n// Helper function to compute crops and paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/array_ops.py#L2184\nfunction requiredSpaceToBatchPaddings(\n    inputShape: [number, number], blockShape: [number, number],\n    basePadding: number[][]) {\n  const padStart = basePadding.map(b => b[0]);\n  const origPadEnd = basePadding.map(b => b[1]);\n  const fullInputShape = inputShape.concat(padStart, origPadEnd);\n  const padEndExtra = blockShape.map((b, i) => (b - fullInputShape[i] % b) % b);\n  const padEnd = origPadEnd.map((s, i) => s + padEndExtra[i]);\n  const paddings = blockShape.map((_, i) => [padStart[i], padEnd[i]]);\n  const crops = blockShape.map((_, i) => [0, padEndExtra[i]]);\n  return [paddings, crops];\n}\n\n// Helper function to compute base paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L524\nfunction withSpaceToBatchBasePaddings(\n    filterShape: [number, number], dilation: [number, number]) {\n  // Spatial dimensions of the filters and the upsampled filters in which we\n  // introduce (rate - 1) zeros between consecutive filter values.\n  const dilatedFilterShape = filterShape.map((s, i) => {\n    return s + (s - 1) * (dilation[i] - 1);\n  });\n  const padExtraShape = dilatedFilterShape.map(s => s - 1);\n\n  // When padding is odd, we pad more at end, following the same\n  // convention as conv2d.\n  const padExtraStart = padExtraShape.map(s => Math.floor(s / 2));\n  const padExtraEnd = padExtraShape.map((s, i) => s - padExtraStart[i]);\n  return padExtraShape.map((_, i) => {\n    return [padExtraStart[i], padExtraEnd[i]];\n  });\n}\n\n/**\n * Computes the 3D average pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.avgPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n *     `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n *     `[filterDepth, filterHeight, filterWidth]`.\n *     If `filterSize` is a single number,\n *     then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n *     `[strideDepth, strideHeight, strideWidth]`.\n *     If `strides` is a single number,\n *     then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1*1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n *     \"NDHWC\". Specify the data format of the input and output data. With the\n *     default format \"NDHWC\", the data is stored in the order of: [batch,\n *     depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param dilations The dilation rates:\n *     `[dilationDepth, dilationHeight, dilationWidth]`\n *     in which we sample input values across the depth, height and width\n *     dimensions in dilated pooling.\n *     Defaults to `[1, 1, 1]`. If `dilations` is a single number,\n *     then `dilationDepth == dilationHeight == dilationWidth`.\n *     If it is greater than 1, then all values of `strides` must be 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction avgPool3d_<T extends Tensor4D|Tensor5D>(\n    x: T|TensorLike,\n    filterSize: [number, number, number]|number,\n    strides: [number, number, number]|number,\n    pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil',\n    dataFormat: 'NDHWC'|'NCDHW' = 'NDHWC',\n    dilations?: [number, number, number]|number,\n    ): T {\n  const $x = convertToTensor(x, 'x', 'avgPool3d', 'float32');\n\n  let x5D = $x as Tensor5D;\n  let reshapedTo5D = false;\n  if ($x.rank === 4) {\n    reshapedTo5D = true;\n    x5D = $x.as5D(1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]);\n  }\n\n  if (dilations == null) {\n    dilations = [1, 1, 1];\n  }\n  util.assert(\n      x5D.rank === 5,\n      () => `Error in avgPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n  util.assert(\n      dataFormat === 'NDHWC',\n      () => `Error in avgPool3d: Only NDHWC is currently supported, ` +\n          `but got dataFormat of ${dataFormat}`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in avgPool3d: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in avgPool3d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool3DInfo(\n      x5D.shape, filterSize, strides, dilations, pad, dimRoundingMode,\n      dataFormat);\n\n  const grad = (dy: Tensor5D) => {\n    return {\n      x: () => avgPool3dBackprop(\n          dy, x5D, filterSize, strides, dilations, pad, dimRoundingMode)\n    };\n  };\n\n  let res = ENGINE.runKernelFunc(\n      backend => backend.avgPool3d(x5D, convInfo), {x: x5D}, grad);\n  res = res.cast(x5D.dtype);\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n\n  return res as T;\n}\n\n/**\n * Computes the backprop of a 3d avg pool.\n *\n * @param dy The dy error, of rank 5 of shape\n *     [batchSize, depth, height, width, channels].\n * assumed.\n * @param input The original input image, of rank 5 or rank4 of shape\n *     [batchSize, depth, height, width, channels].\n * @param filterSize The filter size:\n *     `[filterDepth, filterHeight, filterWidth]`.\n *     `filterSize` is a single number,\n *     then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n *     `[strideDepth, strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates:\n *     `[dilationDepth, dilationHeight, dilationWidth]`\n *     in which we sample input values across the depth, height and width\n *     dimensions in dilated pooling.\n *     Defaults to `[1, 1, 1]`. If `dilations` is a single number,\n *     then `dilationDepth == dilationHeight == dilationWidth`.\n *     If it is greater than 1, then all values of `strides` must be 1.\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. The\n *     rounding mode used when computing output dimensions if pad is a\n *     number. If none is provided, it will not round and error if the output\n *     is of fractional size.\n */\nfunction avgPool3dBackprop<T extends Tensor4D|Tensor5D>(\n    dy: T|TensorLike, input: T|TensorLike,\n    filterSize: [number, number, number]|number,\n    strides: [number, number, number]|number,\n    dilations: [number, number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $dy = convertToTensor(dy, 'dy', 'avgPool3dBackprop');\n  const $input = convertToTensor(input, 'input', 'avgPool3dBackprop');\n\n  let dy5D = $dy as Tensor5D;\n  let input5D = $input as Tensor5D;\n  let reshapedTo5D = false;\n  if ($input.rank === 4) {\n    reshapedTo5D = true;\n    dy5D = $dy.as5D(1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]);\n    input5D = $input.as5D(\n        1, $input.shape[0], $input.shape[1], $input.shape[2], $input.shape[3]);\n  }\n\n  util.assert(\n      dy5D.rank === 5,\n      () => `Error in avgPool3dBackprop: dy must be rank 5 but got rank ` +\n          `${dy5D.rank}.`);\n  util.assert(\n      input5D.rank === 5,\n      () => `Error in avgPool3dBackprop: input must be rank 5 but got rank ` +\n          `${input5D.rank}.`);\n  if (dilations == null) {\n    dilations = [1, 1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in avgPool3dBackprop: Either strides or dilations ' +\n          `must be 1. Got strides ${strides} and dilations '${dilations}'`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in maxPool3dBackprop: pad must be an integer when ` +\n            `using, dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool3DInfo(\n      input5D.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n  const res = ENGINE.runKernelFunc(\n      backend => backend.avgPool3dBackprop(dy5D, input5D, convInfo),\n      {dy5D, input5D});\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n\n  return res as T;\n}\n\n/**\n * Computes the 3D max pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.maxPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n *     `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n *     `[filterDepth, filterHeight, filterWidth]`.\n *     If `filterSize` is a single number,\n *     then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n *     `[strideDepth, strideHeight, strideWidth]`.\n *     If `strides` is a single number,\n *     then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1*1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n *     \"NDHWC\". Specify the data format of the input and output data. With the\n *     default format \"NDHWC\", the data is stored in the order of: [batch,\n *     depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param dilations The dilation rates:\n *     `[dilationDepth, dilationHeight, dilationWidth]`\n *     in which we sample input values across the depth, height and width\n *     dimensions in dilated pooling.\n *     Defaults to `[1, 1, 1]`. If `dilations` is a single number,\n *     then `dilationDepth == dilationHeight == dilationWidth`.\n *     If it is greater than 1, then all values of `strides` must be 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction maxPool3d_<T extends Tensor4D|Tensor5D>(\n    x: T|TensorLike, filterSize: [number, number, number]|number,\n    strides: [number, number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil',\n    dataFormat: 'NDHWC'|'NCDHW' = 'NDHWC',\n    dilations?: [number, number, number]|number): T {\n  const $x = convertToTensor(x, 'x', 'maxPool3d');\n\n  let x5D = $x as Tensor5D;\n  let reshapedTo5D = false;\n  if ($x.rank === 4) {\n    reshapedTo5D = true;\n    x5D = $x.as5D(1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]);\n  }\n\n  if (dilations == null) {\n    dilations = [1, 1, 1];\n  }\n  util.assert(\n      x5D.rank === 5,\n      () => `Error in maxPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n  util.assert(\n      dataFormat === 'NDHWC',\n      () => `Error in maxPool3d: Only NDHWC is currently supported, ` +\n          `but got dataFormat of ${dataFormat}`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in maxPool3d: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in maxPool3d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool3DInfo(\n      x5D.shape, filterSize, strides, dilations, pad, dimRoundingMode,\n      dataFormat);\n\n  const grad = (dy: Tensor5D, saved: Tensor[]) => {\n    const [x5D, y] = saved;\n    return {\n      x: () => maxPool3dBackprop(\n          dy, x5D as Tensor5D, y as Tensor5D, filterSize, strides, dilations,\n          pad, dimRoundingMode)\n    };\n  };\n\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.maxPool3d(x5D, convInfo);\n    save([x5D, y]);\n    return y;\n  }, {x: x5D}, grad);\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n\n  return res as T;\n}\n\n/**\n * Computes the backprop of a 3d max pool.\n *\n * @param dy The dy error, of rank 5 of shape\n *     [batchSize, depth, height, width, channels].\n * assumed.\n * @param input The original input image, of rank 5 or rank 4 of shape\n *     [batchSize, depth, height, width, channels].\n * @param output The original output image, of rank 5 of shape\n *     [batchSize, outDepth, outHeight, outWidth, channels].\n * @param filterSize The filter size:\n *     `[filterDepth, filterHeight, filterWidth]`.\n *     `filterSize` is a single number,\n *     then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n *     `[strideDepth, strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates:\n *     `[dilationDepth, dilationHeight, dilationWidth]`\n *     in which we sample input values across the depth, height and width\n *     dimensions in dilated pooling.\n *     Defaults to `[1, 1, 1]`. If `dilations` is a single number,\n *     then `dilationDepth == dilationHeight == dilationWidth`.\n *     If it is greater than 1, then all values of `strides` must be 1.\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n *     used in the forward prop of the op.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. The\n *     rounding mode used when computing output dimensions if pad is a\n *     number. If none is provided, it will not round and error if the output\n *     is of fractional size.\n */\nfunction maxPool3dBackprop<T extends Tensor4D|Tensor5D>(\n    dy: T|TensorLike, input: T|TensorLike, output: T|TensorLike,\n    filterSize: [number, number, number]|number,\n    strides: [number, number, number]|number,\n    dilations: [number, number, number]|number, pad: 'valid'|'same'|number,\n    dimRoundingMode?: 'floor'|'round'|'ceil'): T {\n  const $dy = convertToTensor(dy, 'dy', 'maxPool3dBackprop');\n  const $input = convertToTensor(input, 'input', 'maxPool3dBackprop');\n  const $output = convertToTensor(output, 'output', 'maxPool3dBackprop');\n\n  let dy5D = $dy as Tensor5D;\n  let input5D = $input as Tensor5D;\n  let output5D = $output as Tensor5D;\n  let reshapedTo5D = false;\n  if ($input.rank === 4) {\n    reshapedTo5D = true;\n    dy5D = $dy.as5D(1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]);\n    input5D = $input.as5D(\n        1, $input.shape[0], $input.shape[1], $input.shape[2], $input.shape[3]);\n    output5D = $output.as5D(\n        1, $output.shape[0], $output.shape[1], $output.shape[2],\n        $output.shape[3]);\n  }\n\n  util.assert(\n      dy5D.rank === 5,\n      () => `Error in maxPool3dBackprop: dy must be rank 5 but got rank ` +\n          `${dy5D.rank}.`);\n  util.assert(\n      input5D.rank === 5,\n      () => `Error in maxPool3dBackprop: input must be rank 5 but got rank ` +\n          `${input5D.rank}.`);\n  util.assert(\n      output5D.rank === 5,\n      () => `Error in maxPool3dBackprop: output must be rank 5 but got rank ` +\n          `${output5D.rank}.`);\n  if (dilations == null) {\n    dilations = [1, 1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in maxPool3dBackprop: Either strides or dilations ' +\n          `must be 1. Got strides ${strides} and dilations '${dilations}'`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in maxPool3dBackprop: pad must be an integer when ` +\n            `using, dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computePool3DInfo(\n      input5D.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n  const res = ENGINE.runKernelFunc(\n      backend => backend.maxPool3dBackprop(dy5D, input5D, output5D, convInfo),\n      {dy5D, input5D});\n\n  if (reshapedTo5D) {\n    return res.as4D(res.shape[1], res.shape[2], res.shape[3], res.shape[4]) as\n        T;\n  }\n\n  return res as T;\n}\n\n/**\n * Computes the 2D max pooling of an image with Argmax index.\n * The indices in argmax are flattened, so that a maximum value at position `[b,\n * y, x, c]` becomes flattened index: `(y * width + x) * channels + c` if\n * include_batch_in_index is False; `((b * height + y) * width + x) * channels\n * +c` if include_batch_in_index is True.\n *\n * The indices returned are always in `[0, height) x [0, width)` before\n * flattening.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n *     `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n *     `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n *     \"NDHWC\". Specify the data format of the input and output data. With the\n *     default format \"NDHWC\", the data is stored in the order of: [batch,\n *     depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param pad The type of padding algorithm.\n *    - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *    - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *    - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param includeBatchIndex Defaults to False. Whether to include batch\n *    dimension in flattened index of argmax.\n */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\n/** @doc {heading: 'Operations', subheading: 'Convolution'} */\nfunction maxPoolWithArgmax_<T extends Tensor4D>(\n    x: T|TensorLike, filterSize: [number, number]|number,\n    strides: [number, number]|number,\n    pad: 'valid'|'same'|number, includeBatchInIndex = false): NamedTensorMap {\n  const $x = convertToTensor(x, 'x', 'maxPoolWithArgmax');\n\n  const attrs = {filterSize, strides, pad, includeBatchInIndex};\n\n  const result =\n      ENGINE.runKernel('MaxPoolWithArgmax', {x: $x}, attrs) as Tensor[];\n\n  return {result: result[0], indexes: result[1]};\n}\n\nexport const maxPool = op({maxPool_});\nexport const avgPool = op({avgPool_});\nexport const pool = op({pool_});\nexport const maxPool3d = op({maxPool3d_});\nexport const avgPool3d = op({avgPool3d_});\nexport const maxPoolWithArgmax = op({maxPoolWithArgmax_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {Rank, TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {op} from './operation';\nimport {pad} from './pad';\nimport * as slice_util from './slice_util';\n\n/**\n * Extracts a 1D slice from 1D array starting at coordinates `begin` and is\n * of length `size`. See `slice` for details.\n */\nfunction slice1d_(\n    x: Tensor1D|TensorLike, begin: number, size: number): Tensor1D {\n  const $x = convertToTensor(x, 'x', 'slice1d');\n  util.assert(\n      $x.rank === 1,\n      () =>\n          `slice1d expects a rank-1 tensor, but got a rank-${$x.rank} tensor`);\n  return slice($x, [begin], [size]);\n}\n\n/**\n * Extracts a 2D slice from a 2D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice2d_(\n    x: Tensor2D|TensorLike, begin: [number, number],\n    size: [number, number]): Tensor2D {\n  const $x = convertToTensor(x, 'x', 'slice2d');\n  util.assert(\n      $x.rank === 2,\n      () =>\n          `slice2d expects a rank-2 tensor, but got a rank-${$x.rank} tensor`);\n  return slice($x, begin, size);\n}\n\n/**\n * Extracts a 3D slice from a 3D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice3d_(\n    x: Tensor3D|TensorLike, begin: [number, number, number],\n    size: [number, number, number]): Tensor3D {\n  const $x = convertToTensor(x, 'x', 'slice3d');\n  util.assert(\n      $x.rank === 3,\n      () =>\n          `slice3d expects a rank-3 tensor, but got a rank-${$x.rank} tensor`);\n  return slice($x, begin, size);\n}\n\n/**\n * Extracts a 4D slice from a 4D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice4d_(\n    x: Tensor4D|TensorLike, begin: [number, number, number, number],\n    size: [number, number, number, number]): Tensor4D {\n  const $x = convertToTensor(x, 'x', 'slice4d');\n  util.assert(\n      $x.rank === 4,\n      () =>\n          `slice4d expects a rank-4 tensor, but got a rank-${$x.rank} tensor`);\n  return slice($x, begin, size);\n}\n\n/**\n * Extracts a slice from a `tf.Tensor` starting at coordinates `begin`\n * and is of size `size`.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `x` is of the given rank:\n *   - `tf.slice1d`\n *   - `tf.slice2d`\n *   - `tf.slice3d`\n *   - `tf.slice4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.slice([1], [2]).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * x.slice([1, 0], [1, 2]).print();\n * ```\n * @param x The input `tf.Tensor` to slice from.\n * @param begin The coordinates to start the slice from. The length can be\n *     less than the rank of x - the rest of the axes will have implicit 0 as\n *     start. Can also be a single number, in which case it specifies the\n *     first axis.\n * @param size The size of the slice. The length can be less than the rank of\n *     x - the rest of the axes will have implicit -1. A value of -1 requests\n *     the rest of the dimensions in the axis. Can also be a single number,\n *     in which case it specifies the size of the first axis.\n */\n/** @doc {heading: 'Tensors', subheading: 'Slicing and Joining'} */\nfunction slice_<R extends Rank, T extends Tensor<R>>(\n    x: T|TensorLike, begin: number|number[], size?: number|number[]): T {\n  const $x = convertToTensor(x, 'x', 'slice');\n\n  if ($x.rank === 0) {\n    throw new Error('Slicing scalar is not possible');\n  }\n  // The following logic allows for more ergonomic calls.\n  let begin_: number[];\n  if (typeof begin === 'number') {\n    begin_ = [begin, ...new Array($x.rank - 1).fill(0)];\n  } else if (begin.length < $x.rank) {\n    begin_ = begin.concat(new Array($x.rank - begin.length).fill(0));\n  } else {\n    begin_ = begin.slice();\n  }\n  begin_.forEach(d => {\n    util.assert(\n        d !== -1, () => 'slice() does not support negative begin indexing.');\n  });\n  let size_: number[];\n  if (size == null) {\n    size_ = new Array($x.rank).fill(-1);\n  } else if (typeof size === 'number') {\n    size_ = [size, ...new Array($x.rank - 1).fill(-1)];\n  } else if (size.length < $x.rank) {\n    size_ = size.concat(new Array($x.rank - size.length).fill(-1));\n  } else {\n    size_ = size;\n  }\n  size_ = size_.map((d, i) => {\n    if (d >= 0) {\n      return d;\n    } else {\n      util.assert(\n          d === -1,\n          () => `Negative size values should be exactly -1 but got ` +\n              `${d} for the slice() size at index ${i}.`);\n      return $x.shape[i] - begin_[i];\n    }\n  });\n  slice_util.assertParamsValid($x, begin_, size_);\n  const inputShape = $x.shape;\n  const grad = (dy: T) => {\n    // Create an Nx2 padding where the first column represents how many\n    // zeros are prepended (at start) for each dimension, and the second\n    // column indicates how many zeros are appended (at end).\n\n    // The number of zeros to append is the shape of the input\n    // elementwise-subtracted by both the begin vector and sizes vector.\n    const paddings: Array<[number, number]> = [];\n    for (let i = 0; i < dy.rank; i++) {\n      paddings.push([begin_[i], inputShape[i] - begin_[i] - size_[i]]);\n    }\n    return {x: () => pad(dy, paddings)};\n  };\n  const attrs = {begin: begin_, size: size_};\n  return ENGINE.runKernelFunc(\n      backend => backend.slice($x, begin_, size_), {x: $x}, grad, 'Slice',\n      attrs);\n}\n\nexport const slice = op({slice_});\nexport const slice1d = op({slice1d_});\nexport const slice2d = op({slice2d_});\nexport const slice3d = op({slice3d_});\nexport const slice4d = op({slice4d_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {customGrad} from '../gradients';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport * as axis_util from './axis_util';\nimport {op} from './operation';\nimport {ones, scalar, zerosLike} from './tensor_ops';\n\n/**\n * Computes the log(sum(exp(elements across the reduction dimensions)).\n *\n * Reduces the input along the dimensions given in `axis`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.logSumExp().print();  // or tf.logSumExp(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.logSumExp(axis).print();  // or tf.logSumExp(a, axis)\n * ```\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. If null (the default),\n *     reduces all dimensions.\n * @param keepDims If true, retains reduced dimensions with length\n *     of 1. Defaults to false.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction logSumExp_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  const $x = convertToTensor(x, 'x', 'logSumExp');\n\n  const axes = util.parseAxisParam(axis, $x.shape);\n  const xMax = $x.max(axes, true /* keepDims */);\n  const a = $x.sub(xMax);\n  const b = a.exp();\n  const c = b.sum(axes);\n  const d = c.log();\n  const res = xMax.reshape(d.shape).add(d);\n\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(res.shape, axes);\n    return res.reshape(newShape) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the sum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If axes has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.sum().print();  // or tf.sum(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.sum(axis).print();  // or tf.sum(x, axis)\n * ```\n *\n * @param x The input tensor to compute the sum over. If the dtype is `bool`\n *   it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction sum_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'sum');\n\n  if ($x.dtype === 'bool') {\n    $x = $x.toInt();\n  }\n  const axes = util.parseAxisParam(axis, $x.shape);\n\n  // Use a custom gradient to bypass 2 gradient backprops since sum is used\n  // extremely often.\n  const customOp = customGrad((x: Tensor) => {\n    const permutation = axis_util.getAxesPermutation(axes, x.rank);\n    let reductionAxes = axes;\n    let permutedX = x;\n    if (permutation != null) {\n      permutedX = x.transpose(permutation);\n      reductionAxes = axis_util.getInnerMostAxes(reductionAxes.length, x.rank);\n    }\n\n    const gradFunc = (dy: Tensor) => {\n      const expandedDyShape = x.shape.slice();\n      axes.forEach(axis => {\n        expandedDyShape[axis] = 1;\n      });\n      const expandedDy = dy.reshape(expandedDyShape);\n      const derX = expandedDy.mul(ones(x.shape, 'float32'));\n      return derX;\n    };\n\n    const gradInputs = (dy: Tensor) => {\n      return {x: () => gradFunc(dy)};\n    };\n\n    const attrs = {axes: reductionAxes};\n    let value = ENGINE.runKernelFunc(\n        backend => backend.sum(permutedX, reductionAxes), {x: permutedX},\n        gradInputs, 'Sum', attrs);\n\n    if (keepDims) {\n      const newShape = axis_util.expandShapeToKeepDim(value.shape, axes);\n      value = value.reshape(newShape);\n    }\n\n    return {value, gradFunc};\n  });\n\n  return customOp($x) as T;\n}\n\n/**\n * Computes the product of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.prod().print();  // or tf.prod(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.prod(axis).print();  // or tf.prod(x, axis)\n * ```\n *\n * @param x The input tensor to compute the product over. If the dtype is `bool`\n *   it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction prod_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'prod');\n\n  if ($x.dtype === 'bool') {\n    $x = $x.toInt();\n  }\n  const axes = util.parseAxisParam(axis, $x.shape);\n\n  const permutation = axis_util.getAxesPermutation(axes, $x.rank);\n  let reductionAxes = axes;\n  let permutedX = $x;\n  if (permutation != null) {\n    permutedX = $x.transpose(permutation);\n    reductionAxes = axis_util.getInnerMostAxes(reductionAxes.length, $x.rank);\n  }\n  let value = ENGINE.runKernelFunc(\n      backend => backend.prod(permutedX, reductionAxes), {permutedX});\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(value.shape, axes);\n    value = value.reshape(newShape);\n  }\n\n  return value as T;\n}\n/**\n * Computes the mean of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces `x` along the dimensions given in `axis`. Unless `keepDims` is\n * true, the rank of the `tf.Tensor` is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and a `tf.Tensor` with\n * a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.mean().print();  // or tf.mean(a)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.mean(axis).print();  // or tf.mean(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction mean_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  const $x = convertToTensor(x, 'x', 'mean');\n\n  const axes = util.parseAxisParam(axis, $x.shape);\n  const shapes = axis_util.computeOutAndReduceShapes($x.shape, axes);\n  const reduceShape = shapes[1];\n  const reduceSize = util.sizeFromShape(reduceShape);\n\n  // Use a custom gradient to bypass 2 gradient backprops since mean is used\n  // extremely often.\n  const customOp = customGrad((x: Tensor) => {\n    const reduceSizeScalar = scalar(reduceSize);\n    // Cast if needed.\n    const xReduce =\n        reduceSizeScalar.dtype === x.dtype ? x : x.cast(reduceSizeScalar.dtype);\n    const res = xReduce.div(reduceSizeScalar);\n    const value = res.sum(axis, keepDims);\n\n    const gradFunc = (dy: Tensor) => {\n      const expandedDyShape = x.shape.slice();\n      axes.forEach(axis => {\n        expandedDyShape[axis] = 1;\n      });\n      const expandedDy = dy.reshape(expandedDyShape);\n      const derX = expandedDy.mul(ones(x.shape, 'float32')).div(reduceSize);\n      return derX;\n    };\n    return {value, gradFunc};\n  });\n\n  return customOp($x) as T;\n}\n\n/**\n * Gradient helper function for the min and max operations.\n */\nfunction gradForMinAndMax<T extends Tensor>(\n    dy: T, y: T, xOrig: Tensor, origAxes: number[], permutedAxes: number[]) {\n  if (y.rank < xOrig.rank) {\n    y = y.reshape(axis_util.expandShapeToKeepDim(y.shape, origAxes)) as T;\n  }\n  if (dy.rank < xOrig.rank) {\n    dy = dy.reshape(axis_util.expandShapeToKeepDim(dy.shape, origAxes)) as T;\n  }\n  return {\n    x: () => {\n      const dx = dy.mul(xOrig.equal(y).cast(dy.dtype));\n      return permutedAxes == null ? dx : dx.transpose(permutedAxes);\n    }\n  };\n}\n\n/**\n * Computes the minimum value from the input.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axes`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axes` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.min().print();  // or tf.min(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.min(axis).print();  // or tf.min(x, axis)\n * ```\n *\n * @param x The input Tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction min_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'min');\n  const xOrig = $x;\n\n  const origAxes = util.parseAxisParam(axis, $x.shape);\n  let axes = origAxes;\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n\n  const grad = (dy: T, saved: Tensor[]) =>\n      gradForMinAndMax(dy, saved[1], saved[0], origAxes, permutedAxes);\n\n  const inputsToSave = [$x];\n  const outputsToSave: boolean[] = [true];\n  let res = ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.min($x, axes);\n    save([xOrig, y]);\n    return y as T;\n  }, {x: $x}, grad, 'Min', {axes}, inputsToSave, outputsToSave);\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(res.shape, origAxes);\n    res = res.reshape(newShape) as T;\n  }\n  return res;\n}\n\n/**\n * Computes the maximum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and an\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.max().print();  // or tf.max(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.max(axis).print();  // or tf.max(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction max_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'max');\n  const xOrig = $x;\n\n  const origAxes = util.parseAxisParam(axis, $x.shape);\n  let axes = origAxes;\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n\n  const grad = (dy: T, saved: Tensor[]) =>\n      gradForMinAndMax(dy, saved[1], saved[0], origAxes, permutedAxes);\n\n  const inputsToSave = [$x];\n  const outputsToSave: boolean[] = [true];\n  let res = ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.max($x, axes);\n    save([xOrig, y]);\n    return y;\n  }, {x: $x}, grad, 'Max', {axes}, inputsToSave, outputsToSave);\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(res.shape, origAxes);\n    res = res.reshape(newShape) as T;\n  }\n  return res as T;\n}\n\n/**\n * Returns the indices of the minimum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMin().print();  // or tf.argMin(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMin(axis).print();  // or tf.argMin(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n *\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction argMin_<T extends Tensor>(x: Tensor|TensorLike, axis = 0): T {\n  let $x = convertToTensor(x, 'x', 'argMin');\n\n  if (axis == null) {\n    axis = 0;\n  }\n  let axes = util.parseAxisParam(axis, $x.shape);\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {$x: () => zerosLike($x)};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.argMin($x, axes[0]);\n    save([$x]);\n    return res;\n  }, {$x}, grad) as T;\n}\n\n/**\n * Returns the indices of the maximum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMax().print();  // or tf.argMax(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMax(axis).print();  // or tf.argMax(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction argMax_<T extends Tensor>(x: Tensor|TensorLike, axis = 0): T {\n  let $x = convertToTensor(x, 'x', 'argMax');\n\n  if (axis == null) {\n    axis = 0;\n  }\n  let axes = util.parseAxisParam(axis, $x.shape);\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => zerosLike($x)};\n  };\n  const attrs = {axis: axes[0]};\n  const inputsToSave = [$x];\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.argMax($x, axes[0]);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'ArgMax', attrs, inputsToSave) as T;\n}\n\n/**\n * Computes the logical and of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and an\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.all().print();  // or tf.all(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.all(axis).print();  // or tf.all(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction all_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'all', 'bool');\n\n  const origAxes = util.parseAxisParam(axis, $x.shape);\n  let axes = origAxes;\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n  const res = ENGINE.runKernelFunc(backend => backend.all($x, axes), {$x});\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(res.shape, origAxes);\n    return res.reshape(newShape) as T;\n  }\n  return res as T;\n}\n\n/**\n * Computes the logical or of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and an\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.any().print();  // or tf.any(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.any(axis).print();  // or tf.any(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n *     all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Reduction'} */\nfunction any_<T extends Tensor>(\n    x: Tensor|TensorLike, axis: number|number[] = null, keepDims = false): T {\n  let $x = convertToTensor(x, 'x', 'any', 'bool');\n\n  const origAxes = util.parseAxisParam(axis, $x.shape);\n  let axes = origAxes;\n  const permutedAxes = axis_util.getAxesPermutation(axes, $x.rank);\n  if (permutedAxes != null) {\n    $x = $x.transpose(permutedAxes);\n    axes = axis_util.getInnerMostAxes(axes.length, $x.rank);\n  }\n  const res = ENGINE.runKernelFunc(backend => backend.any($x, axes), {$x});\n  if (keepDims) {\n    const newShape = axis_util.expandShapeToKeepDim(res.shape, origAxes);\n    return res.reshape(newShape) as T;\n  }\n  return res as T;\n}\n\n/**\n * Calculates the mean and variance of `x`. The mean and variance are\n * calculated by aggregating the contents of `x` across `axes`. If `x` is\n * 1-D and `axes = [0]` this is just the mean and variance of a vector.\n *\n * @param x The input tensor.\n * @param axis The dimension(s) along with to compute mean and\n *     variance. By default it reduces all dimensions.\n * @param keepDims If true, the moments have the same dimensionality as the\n *     input.\n * @return An object with two keys: `mean` and `variance`.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction moments_(\n    x: Tensor|TensorLike, axis: number|number[] = null,\n    keepDims = false): {mean: Tensor, variance: Tensor} {\n  x = convertToTensor(x, 'x', 'moments');\n  const axes = util.parseAxisParam(axis, x.shape);\n  const mean = x.mean(axes, keepDims);\n  let keepDimsShape = mean.shape;\n  if (!keepDims) {\n    keepDimsShape = axis_util.expandShapeToKeepDim(mean.shape, axes);\n  }\n  const devSquared = x.toFloat().sub(mean.reshape(keepDimsShape)).square();\n  const variance = devSquared.mean(axes, keepDims);\n  return {mean, variance};\n}\n\nexport const all = op({all_});\n// tslint:disable-next-line:variable-name\nexport const any = op({any_});\nexport const argMax = op({argMax_});\nexport const argMin = op({argMin_});\nexport const logSumExp = op({logSumExp_});\nexport const max = op({max_});\nexport const mean = op({mean_});\nexport const min = op({min_});\nexport const moments = op({moments_});\nexport const sum = op({sum_});\nexport const prod = op({prod_});\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {maximum} from './binary_ops';\nimport {getReductionAxes} from './broadcast_util';\nimport {where} from './logical_ops';\nimport {op} from './operation';\nimport {SELU_SCALE, SELU_SCALEALPHA} from './selu_util';\nimport {scalar, zerosLike} from './tensor_ops';\n\n/**\n * Computes rectified linear element-wise: `max(x, 0)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.relu().print();  // or tf.relu(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n *     `int32'.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction relu_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'relu');\n\n  if ($x.dtype === 'bool') {\n    return $x.toInt();\n  }\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {x: () => dy.mulStrict($x.step().toFloat() as T)};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.relu($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Relu');\n}\n\n/**\n * Computes rectified linear 6 element-wise: `min(max(x, 0), 6)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 8]);\n *\n * x.relu6().print();  // or tf.relu6(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n *     `int32'.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction relu6_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'relu6');\n\n  if ($x.dtype === 'bool') {\n    return $x.toInt();\n  }\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    const mask = $x.lessEqual(6).mul($x.step());\n    return {x: () => dy.mulStrict(mask.toFloat() as T)};\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.relu6($x);\n    save([$x]);\n    return res;\n  }, {x: $x}, grad, 'Relu6');\n}\n\n/**\n * Computes exponential linear element-wise: `x > 0 ? e ^ x - 1 : 0`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 1, -3, 2]);\n *\n * x.elu().print();  // or tf.elu(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction elu_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'elu');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [y] = saved;\n    return {\n      $x: () =>\n          ENGINE.runKernelFunc(backend => backend.eluDer(dy, y), {dy, y}) as T\n    };\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.elu($x);\n    save([y]);\n    return y;\n  }, {$x}, grad);\n}\n\n/**\n * Computes scaled exponential linear element-wise.\n *\n * `x < 0 ? scale * alpha * (exp(x) - 1) : x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.selu().print();  // or tf.selu(x)\n * ```\n * @param x The input tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction selu_<T extends Tensor>(x: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'selu');\n\n  const grad = (dy: T, saved: Tensor[]) => {\n    const [$x] = saved;\n    return {\n      $x: () => {\n        const mask = $x.greater(scalar(0));\n\n        const scaleAlpha = scalar(SELU_SCALEALPHA);\n        const scale = scalar(SELU_SCALE);\n\n        const greaterThanZeroDer = dy.mul(scale);\n        const lessEqualZeroDer = dy.mul(scaleAlpha).mul($x.toFloat().exp());\n\n        return where(mask, greaterThanZeroDer, lessEqualZeroDer) as T;\n      }\n    };\n  };\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.selu($x);\n    save([$x]);\n    return res;\n  }, {$x}, grad);\n}\n\n/**\n * Computes leaky rectified linear element-wise.\n *\n * See\n * [http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf](\n *     http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf)\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.leakyRelu(0.1).print();  // or tf.leakyRelu(x, 0.1)\n * ```\n * @param x The input tensor.\n * @param alpha The scaling factor for negative values, defaults to 0.2.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction leakyRelu_<T extends Tensor>(x: T|TensorLike, alpha = 0.2): T {\n  const $x = convertToTensor(x, 'x', 'leakyRelu');\n  return maximum(scalar(alpha).mul($x), $x);\n}\n\n/**\n * Computes leaky rectified linear element-wise with parametric alphas.\n *\n * `x < 0 ? alpha * x : f(x) = x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n * const alpha = tf.scalar(0.1);\n *\n * x.prelu(alpha).print();  // or tf.prelu(x, alpha)\n * ```\n * @param x The input tensor.\n * @param alpha Scaling factor for negative values.\n */\n/** @doc {heading: 'Operations', subheading: 'Basic math'} */\nfunction prelu_<T extends Tensor>(x: T|TensorLike, alpha: T|TensorLike): T {\n  const $x = convertToTensor(x, 'x', 'prelu');\n  const $alpha = convertToTensor(alpha, 'alpha', 'prelu');\n\n  const grad = (dy: Tensor, saved: Tensor[]) => {\n    const [$x, $alpha] = saved;\n    const mask = $x.greater(0);\n\n    return {\n      x: () => where(mask, dy, dy.mul($alpha)) as T,\n      alpha: () => {\n        let res = where(mask, zerosLike(dy), dy.mul($x));\n        const reduceAxes = getReductionAxes($alpha.shape, dy.shape);\n        if (reduceAxes.length > 0) {\n          res = res.sum(reduceAxes);\n        }\n        return res.reshape($alpha.shape) as T;\n      }\n    };\n  };\n\n  return ENGINE.runKernelFunc((backend, save) => {\n    const res = backend.prelu($x, $alpha);\n    save([$x, $alpha]);\n    return res;\n  }, {x: $x, alpha: $alpha}, grad, 'Prelu') as T;\n}\n\nexport const elu = op({elu_});\nexport const leakyRelu = op({leakyRelu_});\nexport const prelu = op({prelu_});\nexport const relu = op({relu_});\nexport const relu6 = op({relu6_});\nexport const selu = op({selu_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor, Tensor3D, Tensor4D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {op} from './operation';\n\n/**\n * Normalizes the activation of a local neighborhood across or within\n * channels.\n *\n * @param x The input tensor. The 4-D input tensor is treated as a 3-D array\n *     of 1D vectors (along the last dimension), and each vector is\n *     normalized independently.\n * @param depthRadius The number of adjacent channels in the 1D normalization\n *     window.\n * @param bias A constant bias term for the basis.\n * @param alpha A scale factor, usually positive.\n * @param beta An exponent.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction localResponseNormalization_<T extends Tensor3D|Tensor4D>(\n    x: T|TensorLike, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5): T {\n  const $x = convertToTensor(x, 'x', 'localResponseNormalization');\n  util.assert(\n      $x.rank === 4 || $x.rank === 3,\n      () => `Error in localResponseNormalization: x must be rank 3 or 4 but got\n               rank ${$x.rank}.`);\n  util.assert(\n      util.isInt(depthRadius),\n      () => `Error in localResponseNormalization: depthRadius must be an ` +\n          `integer but got depthRadius ${depthRadius}.`);\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  const backward = (dy: Tensor4D, saved: Tensor[]) => {\n    const [x4D, y] = saved;\n    return {\n      x4D: () => ENGINE.runKernelFunc(\n          backend => backend.LRNGrad(\n              dy, x4D as Tensor4D, y as Tensor4D, depthRadius, bias, alpha,\n              beta),\n          {})\n    };\n  };\n  const res = ENGINE.runKernelFunc((backend, save) => {\n    const y = backend.localResponseNormalization4D(\n        x4D, depthRadius, bias, alpha, beta);\n    save([x4D, y]);\n    return y;\n  }, {x4D}, backward);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  } else {\n    return res as T;\n  }\n}\n\nexport const localResponseNormalization = op({localResponseNormalization_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {parseAxisParam} from '../util';\n\nimport * as axis_util from './axis_util';\nimport {op} from './operation';\nimport {scalar} from './tensor_ops';\n\n/**\n * Computes the norm of scalar, vectors, and matrices.\n * This function can compute several different vector norms (the 1-norm, the\n * Euclidean or 2-norm, the inf-norm, and in general the p-norm for p > 0)\n * and matrix norms (Frobenius, 1-norm, and inf-norm).\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.norm().print();  // or tf.norm(x)\n * ```\n *\n * @param x The input array.\n * @param ord Optional. Order of the norm. Supported norm types are\n * following:\n *\n *  | ord        | norm for matrices         | norm for vectors\n *  |------------|---------------------------|---------------------\n *  |'euclidean' |Frobenius norm             |2-norm\n *  |'fro'       |Frobenius norm\t           |\n *  |Infinity    |max(sum(abs(x), axis=1))   |max(abs(x))\n *  |-Infinity   |min(sum(abs(x), axis=1))   |min(abs(x))\n *  |1           |max(sum(abs(x), axis=0))   |sum(abs(x))\n *  |2           |                           |sum(abs(x)^2)^1/2*\n *\n * @param axis Optional. If axis is null (the default), the input is\n * considered a vector and a single vector norm is computed over the entire\n * set of values in the Tensor, i.e. norm(x, ord) is equivalent\n * to norm(x.reshape([-1]), ord). If axis is a integer, the input\n * is considered a batch of vectors, and axis determines the axis in x\n * over which to compute vector norms. If axis is a 2-tuple of integer it is\n * considered a batch of matrices and axis determines the axes in NDArray\n * over which to compute a matrix norm.\n * @param keepDims Optional. If true, the norm have the same dimensionality\n * as the input.\n */\n/** @doc {heading: 'Operations', subheading: 'Matrices'} */\nfunction norm_(\n    x: Tensor|TensorLike, ord: number|'euclidean'|'fro' = 'euclidean',\n    axis: number|number[] = null, keepDims = false): Tensor {\n  x = convertToTensor(x, 'x', 'norm');\n\n  const norm = normImpl(x, ord, axis);\n  let keepDimsShape = norm.shape;\n  if (keepDims) {\n    const axes = parseAxisParam(axis, x.shape);\n    keepDimsShape = axis_util.expandShapeToKeepDim(norm.shape, axes);\n  }\n  return norm.reshape(keepDimsShape);\n}\n\nfunction normImpl(\n    x: Tensor, p: number|string, axis: number|number[] = null): Tensor {\n  if (x.rank === 0) {\n    return x.abs();\n  }\n\n  // consider vector when no axis is specified\n  if (x.rank !== 1 && axis === null) {\n    return normImpl(x.reshape([-1]), p, axis);\n  }\n\n  // vector\n  if (x.rank === 1 || typeof axis === 'number' ||\n      Array.isArray(axis) && axis.length === 1) {\n    if (p === 1) {\n      return x.abs().sum(axis);\n    }\n    if (p === Infinity) {\n      return x.abs().max(axis);\n    }\n    if (p === -Infinity) {\n      return x.abs().min(axis);\n    }\n    if (p === 'euclidean' || p === 2) {\n      // norm(x, 2) = sum(abs(xi) ^ 2) ^ 1/2\n      return x.abs().pow(scalar(2, 'int32')).sum(axis).sqrt();\n    }\n\n    throw new Error(`Error in norm: invalid ord value: ${p}`);\n  }\n\n  // matrix (assumption axis[0] < axis[1])\n  if (Array.isArray(axis) && axis.length === 2) {\n    if (p === 1) {\n      return x.abs().sum(axis[0]).max(axis[1] - 1);\n    }\n    if (p === Infinity) {\n      return x.abs().sum(axis[1]).max(axis[0]);\n    }\n    if (p === -Infinity) {\n      return x.abs().sum(axis[1]).min(axis[0]);\n    }\n    if (p === 'fro' || p === 'euclidean') {\n      // norm(x) = sqrt(sum(pow(x, 2)))\n      return x.square().sum(axis).sqrt();\n    }\n\n    throw new Error(`Error in norm: invalid ord value: ${p}`);\n  }\n\n  throw new Error(`Error in norm: invalid axis: ${axis}`);\n}\n\nexport const norm = op({norm_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Scalar, Tensor1D, Tensor2D} from '../tensor';\nimport {convertToTensor, convertToTensorArray} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * @docalias (data: Tensor2D, c: Tensor2D, h: Tensor2D): [Tensor2D, Tensor2D]\n */\nexport type LSTMCellFunc = {\n  (data: Tensor2D, c: Tensor2D, h: Tensor2D): [Tensor2D, Tensor2D];\n};\n\n/**\n * Computes the next states and outputs of a stack of LSTMCells.\n *\n * Each cell output is used as input to the next cell.\n *\n * Returns `[cellState, cellOutput]`.\n *\n * Derived from tf.contrib.rn.MultiRNNCell.\n *\n * @param lstmCells Array of LSTMCell functions.\n * @param data The input to the cell.\n * @param c Array of previous cell states.\n * @param h Array of previous cell outputs.\n */\n/** @doc {heading: 'Operations', subheading: 'RNN'} */\nfunction multiRNNCell_(\n    lstmCells: LSTMCellFunc[], data: Tensor2D|TensorLike,\n    c: Array<Tensor2D|TensorLike>,\n    h: Array<Tensor2D|TensorLike>): [Tensor2D[], Tensor2D[]] {\n  const $data = convertToTensor(data, 'data', 'multiRNNCell');\n  const $c = convertToTensorArray(c, 'c', 'multiRNNCell');\n  const $h = convertToTensorArray(h, 'h', 'multiRNNCell');\n\n  let input = $data;\n  const newStates = [];\n  for (let i = 0; i < lstmCells.length; i++) {\n    const output = lstmCells[i](input, $c[i], $h[i]);\n    newStates.push(output[0]);\n    newStates.push(output[1]);\n    input = output[1];\n  }\n  const newC: Tensor2D[] = [];\n  const newH: Tensor2D[] = [];\n  for (let i = 0; i < newStates.length; i += 2) {\n    newC.push(newStates[i]);\n    newH.push(newStates[i + 1]);\n  }\n  return [newC, newH];\n}\n\n/**\n * Computes the next state and output of a BasicLSTMCell.\n *\n * Returns `[newC, newH]`.\n *\n * Derived from tf.contrib.rnn.BasicLSTMCell.\n *\n * @param forgetBias Forget bias for the cell.\n * @param lstmKernel The weights for the cell.\n * @param lstmBias The bias for the cell.\n * @param data The input to the cell.\n * @param c Previous cell state.\n * @param h Previous cell output.\n */\n/** @doc {heading: 'Operations', subheading: 'RNN'} */\nfunction basicLSTMCell_(\n    forgetBias: Scalar|TensorLike, lstmKernel: Tensor2D|TensorLike,\n    lstmBias: Tensor1D|TensorLike, data: Tensor2D|TensorLike,\n    c: Tensor2D|TensorLike, h: Tensor2D|TensorLike): [Tensor2D, Tensor2D] {\n  const $forgetBias =\n      convertToTensor(forgetBias, 'forgetBias', 'basicLSTMCell');\n  const $lstmKernel =\n      convertToTensor(lstmKernel, 'lstmKernel', 'basicLSTMCell');\n  const $lstmBias = convertToTensor(lstmBias, 'lstmBias', 'basicLSTMCell');\n  const $data = convertToTensor(data, 'data', 'basicLSTMCell');\n  const $c = convertToTensor(c, 'c', 'basicLSTMCell');\n  const $h = convertToTensor(h, 'h', 'basicLSTMCell');\n\n  const combined = $data.concat($h, 1);\n  const weighted = combined.matMul($lstmKernel);\n  const res: Tensor2D = weighted.add($lstmBias);\n\n  // i = input_gate, j = new_input, f = forget_gate, o = output_gate\n  const batchSize = res.shape[0];\n  const sliceCols = res.shape[1] / 4;\n  const sliceSize: [number, number] = [batchSize, sliceCols];\n  const i = res.slice([0, 0], sliceSize);\n  const j = res.slice([0, sliceCols], sliceSize);\n  const f = res.slice([0, sliceCols * 2], sliceSize);\n  const o = res.slice([0, sliceCols * 3], sliceSize);\n\n  const newC = i.sigmoid().mulStrict(j.tanh()).addStrict(\n      $c.mulStrict($forgetBias.add(f).sigmoid() as Tensor2D));\n  const newH = newC.tanh().mulStrict(o.sigmoid());\n  return [newC, newH];\n}\n\nexport const basicLSTMCell = op({basicLSTMCell_});\nexport const multiRNNCell = op({multiRNNCell_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Scalar, Tensor} from '../tensor';\nimport {assertTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\nimport {pow} from './binary_ops';\nimport {op} from './operation';\nimport {scalar} from './tensor_ops';\n\n/**\n * Compute the moving average of a variable.\n *\n * Without zeroDebias, the moving average operation is defined by:\n *   `v += delta`\n * where\n *   `delta = (1 - decay) * (x - v)`\n *\n * With zeroDebias (default), the `delta` term is scaled to debias the\n * effect of the (assumed) zero-initialization of `v`.\n *   `delta /= (1 - decay ^ step)`\n *\n * For more details on the zero-debiasing algorithm, see:\n *   https://arxiv.org/abs/1412.6980\n *\n * Note that this function is completely stateless and does not keep track of\n * step count. The step count needs to be maintained by the caller and passed\n * in as `step`.\n *\n * @param v The current moving average value.\n * @param x New input value, must have the same shape and dtype as `v`.\n * @param decay The decay factor. Typical values are 0.95 and 0.99.\n * @param step Step count.\n * @param zeroDebias: Whether zeroDebias is to be performed (default: `true`).\n * @returns The new moving average value.\n */\n/** @doc {heading: 'Operations', subheading: 'Moving Average'} */\nfunction movingAverage_<T extends Tensor>(\n    v: T|TensorLike, x: T|TensorLike, decay: number|Scalar,\n    step?: number|Scalar, zeroDebias = true): T {\n  const $v = convertToTensor(v, 'v', 'movingAverage');\n  const $x = convertToTensor(x, 'x', 'movingAverage');\n  const $decay = convertToTensor(decay, 'decay', 'movingAverage');\n\n  assertTypesMatch($v, $x);\n  util.assert(\n      util.arraysEqual($v.shape, $x.shape), () => 'Shape mismatch in v and x');\n\n  const one = scalar(1);\n  const oneMinusDecay = one.sub($decay);\n\n  let update = $x.sub($v).mul(oneMinusDecay);\n  if (zeroDebias) {\n    util.assert(\n        step != null, () => 'When using zeroDebias: true, step is required.');\n    const $step = convertToTensor(step, 'step', 'movingAverage');\n    update = update.div(one.sub(pow($decay, $step)));\n  }\n  return $v.add(update);\n}\n\nexport const movingAverage = op({movingAverage_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\n\nimport {op} from './operation';\nimport {slice} from './slice';\nimport {computeOutShape, maskToAxes, startForAxis, stopForAxis} from './slice_util';\n\n/**\n * Extracts a strided slice of a tensor.\n *\n * Roughly speaking, this op extracts a slice of size (end-begin)/stride from\n * the given input tensor (x). Starting at the location specified by begin the\n * slice continues by adding stride to the index until all dimensions are not\n * less than end. Note that a stride can be negative, which causes a reverse\n * slice.\n *\n * ```js\n * const t = tf.tensor3d([1, 1, 1 ,2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6],\n *    [3, 2, 3]);\n * t.stridedSlice([1, 0, 0], [2, 1, 3], [1, 1, 1]).print()  // [[[3, 3, 3]]]\n * t.stridedSlice([1, 0, 0], [2, 2, 3], [1, 1, 1]).print()  // [[[3, 3, 3],\n *                                                     // [4, 4, 4]]]\n * t.stridedSlice([1, -1, 0], [2, -3, 3], [1, -1, 1]).print() // [[[4, 4, 4],\n *                                                     // [3, 3, 3]]]\n * ```\n *\n * @param x The tensor to stride slice.\n * @param begin The coordinates to start the slice from.\n * @param end: The coordinates to end the slice at.\n * @param strides: The size of the slice.\n * @param beginMask: If the ith bit of beginMask is set, begin[i] is ignored\n *      and the fullest possible range in that dimension is used instead.\n * @param endMask: If the ith bit of endMask is set, end[i] is ignored\n *      and the fullest possible range in that dimension is used instead.\n * @param shrinkAxisMask: a bitmask where bit i implies that\n * the ith specification should shrink the dimensionality. begin and end must\n * imply a slice of size 1 in the dimension.\n */\n/** @doc {heading: 'Operations', subheading: 'Slicing and Joining'} */\nfunction stridedSlice_(\n    x: Tensor|TensorLike, begin: number[], end: number[], strides?: number[],\n    beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0,\n    shrinkAxisMask = 0): Tensor {\n  if (strides == null) {\n    strides = new Array(begin.length);\n  }\n  if (ellipsisMask !== 0) {\n    throw new Error('ellipsis mask is not yet supported');\n  }\n  let $x = convertToTensor(x, 'x', 'stridedSlice');\n\n  // Expand the dims of x based on the newAxisMask.\n  const expandAxes = maskToAxes(newAxisMask);\n  const newShape = $x.shape.slice();\n  expandAxes.forEach(axis => {\n    begin[axis] = 0;\n    end[axis] = 1;\n    newShape.splice(axis, 0, 1);\n  });\n  $x = $x.reshape(newShape);\n\n  // Normalize the start, end and strides.\n  for (let axis = 0; axis < $x.rank; axis++) {\n    begin[axis] = startForAxis(beginMask, begin, strides, $x.shape, axis);\n    end[axis] = stopForAxis(endMask, end, strides, $x.shape, axis);\n    strides[axis] = strides[axis] || 1;\n  }\n\n  const shrinkAxes = maskToAxes(shrinkAxisMask);\n  // Adjust the ends based on the shrink mask.\n  shrinkAxes.forEach(axis => {\n    end[axis] = begin[axis] + 1;\n    strides[axis] = 1;\n  });\n\n  // Figure out the output shape.\n  const size = computeOutShape(begin, end, strides);\n  // Remove the axes based on shrinkMask.\n  const outShape = size.filter((_, axis) => shrinkAxes.indexOf(axis) === -1);\n\n  const nonStrided = strides.every(v => v === 1);\n  if (nonStrided) {\n    return slice($x, begin, size).reshape(outShape);\n  }\n  const res = ENGINE.runKernelFunc(\n      backend => backend.stridedSlice($x, begin, end, strides), {$x});\n  return res.reshape(outShape);\n}\n\nexport const stridedSlice = op({stridedSlice_});\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {NumericTensor, Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * Finds the values and indices of the `k` largest entries along the last\n * dimension.\n *\n * If the input is a vector (rank=1), finds the k largest entries in the vector\n * and outputs their values and indices as vectors. Thus values[j] is the j-th\n * largest entry in input, and its index is indices[j].\n * For higher rank inputs, computes the top k entries along the last dimension.\n *\n * If two elements are equal, the lower-index element appears first.\n *\n * ```js\n * const a = tf.tensor2d([[1, 5], [4, 3]]);\n * const {values, indices} = tf.topk(a);\n * values.print();\n * indices.print();\n * ```\n * @param x 1-D or higher `tf.Tensor` with last dimension being at least `k`.\n * @param k Number of top elements to look for along the last dimension.\n * @param sorted If true, the resulting `k` elements will be sorted by the\n *     values in descending order.\n */\n/** @doc {heading: 'Operations', subheading: 'Evaluation'} */\nfunction topk_<T extends Tensor>(\n    x: T|TensorLike, k = 1, sorted = true): {values: T, indices: T} {\n  const $x = convertToTensor(x, 'x', 'topk');\n  if ($x.rank === 0) {\n    throw new Error('topk() expects the input to be of rank 1 or higher');\n  }\n  const lastDim = $x.shape[$x.shape.length - 1];\n  if (k > lastDim) {\n    throw new Error(\n        `'k' passed to topk() must be <= the last dimension (${lastDim}) ` +\n        `but got ${k}`);\n  }\n\n  const [values, indices] =\n      ENGINE.runKernelFunc(b => b.topk($x as NumericTensor, k, sorted), {$x});\n  return {values, indices} as {values: T, indices: T};\n}\n\nexport const topk = op({topk_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {Rank, ShapeMap, TensorLike} from '../types';\nimport {op} from './operation';\nimport * as scatter_nd_util from './scatter_nd_util';\n\n/**\n * Creates a new tensor by applying sparse updates to individual\n * values or slices within a zero tensor of the given shape tensor according to\n * indices. This operator is the inverse of the `tf.gatherND` operator which\n * extracts values or slices from a given tensor.\n *\n * ```js\n * const indices = tf.tensor2d([4, 3, 1, 7], [4, 1], 'int32');\n * const updates = tf.tensor1d([9, 10, 11, 12]);\n * const shape = [8];\n * tf.scatterND(indices, updates, shape).print() //[0, 11, 0, 10, 9, 0, 0, 12]\n * ```\n *\n * @param indices The tensor contains the indices into the output tensor.\n * @param updates The tensor contains the value for the indices.\n * @param shape: The shape of the output tensor.\n */\n/** @doc {heading: 'Operations', subheading: 'Slicing and Joining'} */\nfunction scatterND_<R extends Rank>(\n    indices: Tensor|TensorLike, updates: Tensor|TensorLike,\n    shape: ShapeMap[R]): Tensor<R> {\n  const $indices = convertToTensor(indices, 'indices', 'scatterND', 'int32');\n  const $updates = convertToTensor(updates, 'updates', 'scatterND');\n  scatter_nd_util.validateInput($updates, $indices, shape);\n\n  return ENGINE.runKernelFunc(\n      backend => backend.scatterND($indices, $updates, shape),\n      {indices: $indices, updates: $updates}, null /* backward */, 'ScatterNd',\n      {shape});\n}\n\nexport const scatterND = op({scatterND_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {complex, imag, real} from '../ops/complex_ops';\nimport {op} from '../ops/operation';\nimport {Tensor, Tensor2D} from '../tensor';\nimport {assert} from '../util';\nimport {scalar, zeros} from './tensor_ops';\n\n/**\n * Fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the inner-most\n * dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.fft().print();  // tf.spectral.fft(x).print();\n * ```\n * @param input The complex input to compute an fft over.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction fft_(input: Tensor): Tensor {\n  assert(\n      input.dtype === 'complex64',\n      () => `The dtype for tf.spectral.fft() must be complex64 ` +\n          `but got ${input.dtype}.`);\n\n  // Collapse all outer dimensions to a single batch dimension.\n  const innerDimensionSize = input.shape[input.shape.length - 1];\n  const batch = input.size / innerDimensionSize;\n  const input2D = input.as2D(batch, innerDimensionSize);\n\n  const ret = ENGINE.runKernelFunc(backend => backend.fft(input2D), {input});\n\n  return ret.reshape(input.shape);\n}\n\n/**\n * Inverse fast Fourier transform.\n *\n * Computes the inverse 1-dimensional discrete Fourier transform over the\n * inner-most dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.ifft().print();  // tf.spectral.ifft(x).print();\n * ```\n * @param input The complex input to compute an ifft over.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction ifft_(input: Tensor): Tensor {\n  assert(\n      input.dtype === 'complex64',\n      () => `The dtype for tf.spectral.ifft() must be complex64 ` +\n          `but got ${input.dtype}.`);\n\n  // Collapse all outer dimensions to a single batch dimension.\n  const innerDimensionSize = input.shape[input.shape.length - 1];\n  const batch = input.size / innerDimensionSize;\n  const input2D = input.as2D(batch, innerDimensionSize);\n\n  const ret = ENGINE.runKernelFunc(backend => backend.ifft(input2D), {input});\n\n  return ret.reshape(input.shape);\n}\n\n/**\n * Real value input fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n *\n * real.rfft().print();\n * ```\n * @param input The real value input to compute an rfft over.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction rfft_(input: Tensor, fftLength?: number): Tensor {\n  assert(\n      input.dtype === 'float32',\n      () => `The dtype for rfft() must be real value but got ${input.dtype}`);\n\n  let innerDimensionSize = input.shape[input.shape.length - 1];\n  const batch = input.size / innerDimensionSize;\n\n  let adjustedInput: Tensor;\n  if (fftLength != null && fftLength < innerDimensionSize) {\n    // Need to crop\n    const begin = input.shape.map(v => 0);\n    const size = input.shape.map(v => v);\n    size[input.shape.length - 1] = fftLength;\n    adjustedInput = input.slice(begin, size);\n    innerDimensionSize = fftLength;\n  } else if (fftLength != null && fftLength > innerDimensionSize) {\n    // Need to pad with zeros\n    const zerosShape = input.shape.map(v => v);\n    zerosShape[input.shape.length - 1] = fftLength - innerDimensionSize;\n    adjustedInput = input.concat(zeros(zerosShape), input.shape.length - 1);\n    innerDimensionSize = fftLength;\n  } else {\n    adjustedInput = input;\n  }\n\n  // Complement the input with zero imaginary numbers.\n  const zerosInput = adjustedInput.zerosLike();\n  const complexInput =\n      complex(adjustedInput, zerosInput).as2D(batch, innerDimensionSize);\n\n  const ret = fft(complexInput);\n\n  // Exclude complex conjugations. These conjugations are put symmetrically.\n  const half = Math.floor(innerDimensionSize / 2) + 1;\n  const realValues = real(ret);\n  const imagValues = imag(ret);\n  const realComplexConjugate = realValues.split(\n      [half, innerDimensionSize - half], realValues.shape.length - 1);\n  const imagComplexConjugate = imagValues.split(\n      [half, innerDimensionSize - half], imagValues.shape.length - 1);\n\n  const outputShape = adjustedInput.shape.slice();\n  outputShape[adjustedInput.shape.length - 1] = half;\n\n  return complex(realComplexConjugate[0], imagComplexConjugate[0])\n      .reshape(outputShape);\n}\n\n/**\n * Inversed real value input fast Fourier transform.\n *\n * Computes the 1-dimensional inversed discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([0, 0, 0]);\n * const x = tf.complex(real, imag);\n *\n * x.irfft().print();\n * ```\n * @param input The real value input to compute an irfft over.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction irfft_(input: Tensor): Tensor {\n  const innerDimensionSize = input.shape[input.shape.length - 1];\n  const batch = input.size / innerDimensionSize;\n\n  if (innerDimensionSize <= 2) {\n    const complexInput = input.as2D(batch, innerDimensionSize);\n    const ret = ifft(complexInput);\n    return real(ret);\n  } else {\n    // The length of unique components of the DFT of a real-valued signal\n    // is 2 * (input_len - 1)\n    const outputShape = [batch, 2 * (innerDimensionSize - 1)];\n    const realInput = real(input).as2D(batch, innerDimensionSize);\n    const imagInput = imag(input).as2D(batch, innerDimensionSize);\n\n    const realConjugate =\n        realInput.slice([0, 1], [batch, innerDimensionSize - 2]).reverse(1);\n    const imagConjugate: Tensor2D =\n        imagInput.slice([0, 1], [batch, innerDimensionSize - 2])\n            .reverse(1)\n            .mul(scalar(-1));\n\n    const r = realInput.concat(realConjugate, 1);\n    const i = imagInput.concat(imagConjugate, 1);\n    const complexInput = complex(r, i).as2D(outputShape[0], outputShape[1]);\n    const ret = ifft(complexInput);\n    return real(ret);\n  }\n}\n\nexport const fft = op({fft_});\nexport const ifft = op({ifft_});\nexport const rfft = op({rfft_});\nexport const irfft = op({irfft_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport * as sparse_to_dense from '../ops/sparse_to_dense_util';\nimport {Scalar, Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {Rank, ScalarLike, ShapeMap, TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * Converts a sparse representation into a dense tensor.\n *\n * Builds an array dense with shape outputShape such that:\n *\n * // If sparseIndices is scalar\n * dense[i] = (i == sparseIndices ? sparseValues : defaultValue)\n *\n * // If sparseIndices is a vector, then for each i\n * dense[sparseIndices[i]] = sparseValues[i]\n *\n * // If sparseIndices is an n by d matrix, then for each i in [0, n)\n * dense[sparseIndices[i][0], ..., sparseIndices[i][d-1]] = sparseValues[i]\n * All other values in dense are set to defaultValue. If sparseValues is a\n * scalar, all sparse indices are set to this single value.\n *\n * If indices are repeated the final value is summed over all values for those\n * indices.\n *\n * ```js\n * const indices = tf.tensor1d([4, 5, 6, 1, 2, 3], 'int32');\n * const values = tf.tensor1d([10, 11, 12, 13, 14, 15], 'float32');\n * const shape = [8];\n * tf.sparseToDense(indices, values, shape).print();\n * ```\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape Shape of the dense output tensor. the type is inferred.\n * @param defaultValue Scalar. Value to set for indices not specified in\n * sparseIndices. Defaults to zero.\n */\n/** @doc {heading: 'Operations', subheading: 'Normalization'} */\nfunction sparseToDense_<R extends Rank>(\n    sparseIndices: Tensor|TensorLike, sparseValues: Tensor|TensorLike,\n    outputShape: ShapeMap[R], defaultValue: Scalar|ScalarLike = 0): Tensor<R> {\n  const $sparseIndices =\n      convertToTensor(sparseIndices, 'sparseIndices', 'sparseToDense', 'int32');\n  const $sparseValues =\n      convertToTensor(sparseValues, 'sparseValues', 'sparseToDense');\n  const $defaultValue = convertToTensor(\n      defaultValue, 'defaultValue', 'sparseToDense', $sparseValues.dtype);\n\n  sparse_to_dense.validateInput(\n      $sparseIndices, $sparseValues, outputShape, $defaultValue);\n\n  return ENGINE.runKernelFunc(\n      backend => backend.sparseToDense(\n          $sparseIndices, $sparseValues, outputShape, $defaultValue),\n      {$sparseIndices, $sparseValues, $defaultValue});\n}\n\nexport const sparseToDense = op({sparseToDense_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor} from '../tensor';\n\n/**\n * Validate sparseToDense inputs.\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape number[]. Shape of the dense output tensor.\n * @param validateIndices boolean. indice validation is not supported, error\n * will be thrown if it is set.\n */\nexport function validateInput(\n    sparseIndices: Tensor, sparseValues: Tensor, outputShape: number[],\n    defaultValues: Tensor) {\n  if (sparseIndices.dtype !== 'int32') {\n    throw new Error(\n        'tf.sparseToDense() expects the indices to be int32 type,' +\n        ` but the dtype was ${sparseIndices.dtype}.`);\n  }\n  if (sparseIndices.rank > 2) {\n    throw new Error(\n        'sparseIndices should be a scalar, vector, or matrix,' +\n        ` but got shape ${sparseIndices.shape}.`);\n  }\n\n  const numElems = sparseIndices.rank > 0 ? sparseIndices.shape[0] : 1;\n  const numDims = sparseIndices.rank > 1 ? sparseIndices.shape[1] : 1;\n\n  if (outputShape.length !== numDims) {\n    throw new Error(\n        'outputShape has incorrect number of elements:,' +\n        ` ${outputShape.length}, should be: ${numDims}.`);\n  }\n\n  const numValues = sparseValues.size;\n  if (!(sparseValues.rank === 0 ||\n        sparseValues.rank === 1 && numValues === numElems)) {\n    throw new Error(\n        'sparseValues has incorrect shape ' +\n        `${sparseValues.shape}, should be [] or [${numElems}]`);\n  }\n\n  if (sparseValues.dtype !== defaultValues.dtype) {\n    throw new Error('sparseValues.dtype must match defaultValues.dtype');\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {op} from './operation';\n\n/**\n * Gather slices from input tensor into a Tensor with shape specified by\n * `indices`.\n *\n * `indices` is an K-dimensional integer tensor, best thought of as a\n * (K-1)-dimensional tensor of indices into input, where each element defines a\n * slice of input:\n * output[\\\\(i_0, ..., i_{K-2}\\\\)] = input[indices[\\\\(i_0, ..., i_{K-2}\\\\)]]\n *\n * Whereas in `tf.gather`, `indices` defines slices into the first dimension of\n * input, in `tf.gatherND`, `indices` defines slices into the first N dimensions\n * of input, where N = indices.shape[-1].\n *\n * The last dimension of indices can be at most the rank of input:\n * indices.shape[-1] <= input.rank\n *\n * The last dimension of `indices` corresponds to elements\n * (if indices.shape[-1] == input.rank) or slices\n * (if indices.shape[-1] < input.rank) along dimension indices.shape[-1] of\n * input.\n * The output tensor has shape\n * indices.shape[:-1] + input.shape[indices.shape[-1]:]\n *\n * Note that on CPU, if an out of bound index is found, an error is returned. On\n * GPU, if an out of bound index is found, a 0 is stored in the corresponding\n * output value.\n *\n * ```js\n * const indices = tf.tensor2d([0, 1, 1, 0], [2,2], 'int32');\n * const input = tf.tensor2d([9, 10, 11, 12], [2, 2]);\n * tf.gatherND(input, indices).print() // [10, 11]\n * ```\n *\n * @param x The tensor from which to gather values.\n * @param indices Index tensor, must be of type int32.\n */\n/** @doc {heading: 'Operations', subheading: 'Slicing and Joining'} */\nfunction gatherND_(x: Tensor|TensorLike, indices: Tensor|TensorLike): Tensor {\n  const $indices = convertToTensor(indices, 'indices', 'gatherND', 'int32');\n  const $x = convertToTensor(x, 'x', 'gatherND');\n  return ENGINE.runKernelFunc(\n      backend => backend.gatherND($x, $indices), {x: $x, indices: $indices},\n      null /* backward */, 'GatherNd');\n}\nexport const gatherND = op({gatherND_});\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {op} from './operation';\n\n/**\n * Returns a diagonal tensor with a given diagonal values.\n *\n * Given a diagonal, this operation returns a tensor with the diagonal and\n * everything else padded with zeros.\n *\n * Assume the input has dimensions `[D1,..., Dk]`, then the output is a tensor\n * of rank 2k with dimensions `[D1,..., Dk, D1,..., Dk]`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * tf.diag(x).print()\n * ```\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4, 5, 6, 6, 8], [4, 2])\n *\n * tf.diag(x).print()\n * ```\n * @param x The input tensor.\n */\nfunction diag_(x: Tensor): Tensor {\n  const $x = convertToTensor(x, 'x', 'diag').flatten();\n  const outShape = [...x.shape, ...x.shape];\n  return ENGINE.runKernelFunc(backend => backend.diag($x), {$x})\n      .reshape(outShape);\n}\n\nexport const diag = op({diag_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {getNoiseShape} from './dropout_util';\nimport {op} from './operation';\nimport {randomUniform} from './random_uniform';\n\n/**\n * Computes dropout.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 2, 1]);\n * const rate = 0.75;\n * const output = tf.dropout(x, rate);\n * output.print();\n * ```\n *\n * @param x A floating point Tensor or TensorLike.\n * @param rate A float in the range [0, 1). The probability that each element\n *   of x is discarded.\n * @param noiseShape An array of numbers of type int32, representing the\n * shape for randomly generated keep/drop flags. If the noiseShape has null\n * value, it will be automatically replaced with the x's relative dimension\n * size. Optional.\n * @param seed Used to create random seeds. Optional.\n * @returns A Tensor of the same shape of x.\n */\n/** @doc {heading: 'Operations', subheading: 'Dropout'} */\nfunction dropout_(\n    x: Tensor|TensorLike, rate: number, noiseShape?: number[],\n    seed?: number|string): Tensor {\n  const $x = convertToTensor(x, 'x', 'dropout');\n\n  util.assert(\n      $x.dtype === 'float32',\n      () => `x has to be a floating point tensor since it's going to be ` +\n          `scaled, but got a ${$x.dtype} tensor instead.`);\n  util.assert(\n      rate >= 0 && rate < 1,\n      () => `rate must be a float in the range [0, 1), but got ${rate}.`);\n\n  if (rate === 0) {\n    return x instanceof Tensor ? $x.clone() : $x;\n  }\n\n  const $noiseShape = getNoiseShape($x, noiseShape);\n  const keepProb = 1 - rate;\n  const multiplier = randomUniform($noiseShape, 0, 1, 'float32', seed)\n                         .add(keepProb)\n                         .floor()\n                         .div(keepProb);\n\n  return $x.mul(multiplier);\n}\n\nexport const dropout = op({dropout_});\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport * as util from '../util';\n\n/**\n * Normalize noise shape based on provided tensor and noise shape.\n *\n * @param x Tensor.\n * @param noiseShape The shape for the randomly generated keep/drop flags, as\n *   an array of numbers. Optional.\n * @returns Normalized noise shape.\n */\nexport function getNoiseShape(x: Tensor, noiseShape?: number[]): number[] {\n  if (noiseShape == null) {\n    return x.shape.slice();\n  }\n  if (util.arraysEqual(x.shape, noiseShape)) {\n    return noiseShape;\n  }\n  if (x.shape.length === noiseShape.length) {\n    const newDimension: number[] = [];\n    for (let i = 0; i < x.shape.length; i++) {\n      if (noiseShape[i] == null && x.shape[i] != null) {\n        newDimension.push(x.shape[i]);\n      } else {\n        newDimension.push(noiseShape[i]);\n      }\n    }\n    return newDimension;\n  }\n\n  return noiseShape;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {op} from '../ops/operation';\nimport {Tensor, Tensor1D} from '../tensor';\n\nimport {mul} from './binary_ops';\nimport {concat} from './concat_split';\nimport {slice} from './slice';\nimport {rfft} from './spectral_ops';\nimport {fill, tensor1d, tensor2d} from './tensor_ops';\n\n/**\n * Generate a Hann window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hannWindow(10).print();\n * ```\n * @param The length of window\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hannWindow_(windowLength: number): Tensor1D {\n  return cosineWindow(windowLength, 0.5, 0.5);\n}\n\n/**\n * Generate a hamming window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hammingWindow(10).print();\n * ```\n * @param The length of window\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hammingWindow_(windowLength: number): Tensor1D {\n  return cosineWindow(windowLength, 0.54, 0.46);\n}\n\n/**\n * Expands input into frames of frameLength.\n * Slides a window size with frameStep.\n *\n * ```js\n * tf.signal.frame([1, 2, 3], 2, 1).print();\n * ```\n * @param signal The input tensor to be expanded\n * @param frameLength Length of each frame\n * @param frameStep The frame hop size in samples.\n * @param padEnd Whether to pad the end of signal with padValue.\n * @param padValue An number to use where the input signal does\n *     not exist when padEnd is True.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction frame_(\n    signal: Tensor1D, frameLength: number, frameStep: number, padEnd = false,\n    padValue = 0): Tensor {\n  let start = 0;\n  const output: Tensor[] = [];\n  while (start + frameLength <= signal.size) {\n    output.push(slice(signal, start, frameLength));\n    start += frameStep;\n  }\n\n  if (padEnd) {\n    while (start < signal.size) {\n      const padLen = (start + frameLength) - signal.size;\n      const pad = concat(\n          [slice(signal, start, frameLength - padLen),\n           fill([padLen], padValue)]);\n      output.push(pad);\n      start += frameStep;\n    }\n  }\n\n  if (output.length === 0) {\n    return tensor2d([], [0, frameLength]);\n  }\n\n  return concat(output).as2D(output.length, frameLength);\n}\n\n/**\n * Computes the Short-time Fourier Transform of signals\n * See: https://en.wikipedia.org/wiki/Short-time_Fourier_transform\n *\n * ```js\n * const input = tf.tensor1d([1, 1, 1, 1, 1])\n * tf.signal.stft(input, 3, 1).print();\n * ```\n * @param signal 1-dimensional real value tensor.\n * @param frameLength The window length of samples.\n * @param frameStep The number of samples to step.\n * @param fftLength The size of the FFT to apply.\n * @param windowFn A callable that takes a window length and returns 1-d tensor.\n */\n/**\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction stft_(\n    signal: Tensor1D, frameLength: number, frameStep: number,\n    fftLength?: number,\n    windowFn: (length: number) => Tensor1D = hannWindow): Tensor {\n  if (fftLength == null) {\n    fftLength = enclosingPowerOfTwo(frameLength);\n  }\n  const framedSignal = frame(signal, frameLength, frameStep);\n  const windowedSignal = mul(framedSignal, windowFn(frameLength));\n  const output: Tensor[] = [];\n  for (let i = 0; i < framedSignal.shape[0]; i++) {\n    output.push(rfft(windowedSignal.slice([i, 0], [1, frameLength]),\n      fftLength));\n  }\n  return concat(output);\n}\n\nfunction enclosingPowerOfTwo(value: number) {\n  // Return 2**N for integer N such that 2**N >= value.\n  return Math.floor(Math.pow(2, Math.ceil(Math.log(value) / Math.log(2.0))));\n}\n\nfunction cosineWindow(windowLength: number, a: number, b: number): Tensor1D {\n  const even = 1 - windowLength % 2;\n  const newValues = new Float32Array(windowLength);\n  for (let i = 0; i < windowLength; ++i) {\n    const cosArg = (2.0 * Math.PI * i) / (windowLength + even - 1);\n    newValues[i] = a - b * Math.cos(cosArg);\n  }\n  return tensor1d(newValues, 'float32');\n}\n\nexport const hannWindow = op({hannWindow_});\nexport const hammingWindow = op({hammingWindow_});\nexport const frame = op({frame_});\nexport const stft = op({stft_});\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assert, assertShapesMatch, getTypedArrayFromDType} from '../util';\nimport {tensor} from './tensor_ops';\n\n/**\n * Returns whether the targets are in the top K predictions.\n *\n * ```js\n * const predictions = tf.tensor2d([[20, 10, 40, 30], [30, 50, -20, 10]]);\n * const targets = tf.tensor1d([2, 0]);\n * const precision = await tf.inTopKAsync(predictions, targets);\n * precision.print();\n * ```\n * @param predictions 2-D or higher `tf.Tensor` with last dimension being\n *     at least `k`.\n * @param targets 1-D or higher `tf.Tensor`.\n * @param k Optional Number of top elements to look at for computing precision,\n *     default to 1.\n */\n/** @doc {heading: 'Operations', subheading: 'Evaluation'} */\nasync function inTopKAsync_<T extends Tensor, U extends Tensor>(\n    predictions: T|TensorLike, targets: U|TensorLike, k = 1): Promise<U> {\n  const $predictions = convertToTensor(predictions, 'predictions', 'inTopK');\n  const $targets = convertToTensor(targets, 'targets', 'inTopK');\n\n  assert(\n      $predictions.rank > 1,\n      () => 'inTopK() expects the predictions to be of rank 2 or higher, ' +\n          `but got ${$predictions.rank}`);\n  assert(\n      $predictions.rank - 1 === $targets.rank,\n      () => `predictions rank should be 1 larger than ` +\n          `targets rank, but got predictions rank ` +\n          `${$predictions.rank} and targets rank ${$targets.rank}`);\n  assertShapesMatch(\n      $predictions.shape.slice(0, $predictions.shape.length - 1),\n      $targets.shape,\n      `predictions's shape should be align with the targets' shape, ` +\n          'except the last dimension.');\n  const lastDim = $predictions.shape[$predictions.shape.length - 1];\n  assert(\n      k > 0 && k <= lastDim,\n      () => `'k' passed to inTopK() must be > 0 && <= the predictions last ` +\n          `dimension (${lastDim}), but got ${k}`);\n\n  const predictionsVals = await $predictions.data();\n  const targetsVals = await $targets.data();\n\n  // Reshape predictionsVals into a 2d tensor [batch, lastDim]\n  // and look up topK along lastDim.\n  const [batch, size] = [predictionsVals.length / lastDim, lastDim];\n  const precision = getTypedArrayFromDType('bool', batch);\n\n  for (let b = 0; b < batch; b++) {\n    const offset = b * size;\n    const vals = predictionsVals.subarray(offset, offset + size);\n    const valAndInd: Array<{value: number, index: number}> = [];\n    for (let i = 0; i < vals.length; i++) {\n      valAndInd.push({value: vals[i], index: i});\n    }\n    valAndInd.sort((a, b) => b.value - a.value);\n\n    precision[b] = 0;\n    for (let i = 0; i < k; i++) {\n      if (valAndInd[i].index === targetsVals[b]) {\n        precision[b] = 1;\n        break;\n      }\n    }\n  }\n\n  if (predictions !== $predictions) {\n    $predictions.dispose();\n  }\n  if (targets !== $targets) {\n    $targets.dispose();\n  }\n\n  // Output precision has the same shape as targets.\n  return tensor(precision, $targets.shape, 'bool') as U;\n}\n\nexport const inTopKAsync = inTopKAsync_;\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {customGrad} from '../gradients';\nimport {Tensor} from '../tensor';\nimport {GradSaveFunc} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assertShapesMatch} from '../util';\nimport {expandShapeToKeepDim} from './axis_util';\nimport {minimum} from './binary_ops';\nimport {op} from './operation';\nimport {ones, scalar} from './tensor_ops';\n\nexport enum Reduction {\n  NONE,\n  MEAN,\n  SUM,\n  SUM_BY_NONZERO_WEIGHTS\n}\n\n/**\n * Computes the weighted loss between two tensors.\n *\n * @param losses Tensor of shape `[batch_size, d1, ... dN]`.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `losses`, and must be broadcastable to `losses` (i.e., all\n *    dimensions must be either `1`, or the same as the corresponding\n *    `losses` dimension).\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction computeWeightedLoss_<T extends Tensor, O extends Tensor>(\n    losses: T|TensorLike, weights?: Tensor|TensorLike,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $losses = convertToTensor(losses, 'losses', 'computeWeightedLoss');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'computeWeightedLoss');\n  }\n\n  const weightedLoss = ($weights == null) ? $losses : $losses.mul($weights);\n\n  if (reduction === Reduction.NONE) {\n    return weightedLoss as O;\n  }\n  if (reduction === Reduction.SUM) {\n    return weightedLoss.sum();\n  }\n  if (reduction === Reduction.MEAN) {\n    if ($weights == null) {\n      return weightedLoss.mean();\n    } else {\n      const broadcastFactor = $losses.size / $weights.size;\n      const result = weightedLoss.sum().div($weights.sum());\n      return broadcastFactor > 1 ? result.div(scalar(broadcastFactor)) :\n                                   result as O;\n    }\n  }\n  if (reduction === Reduction.SUM_BY_NONZERO_WEIGHTS) {\n    if ($weights == null) {\n      return weightedLoss.sum().div(scalar($losses.size));\n    } else {\n      const broadcastedWeights = $weights.mul(ones($losses.shape));\n\n      const numNonZeros =\n          broadcastedWeights.notEqual(scalar(0)).sum().toFloat();\n      return weightedLoss.sum().div(numNonZeros);\n    }\n  }\n\n  throw Error(`Unknown reduction: ${reduction}`);\n}\n\n/**\n * Computes the absolute difference loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction absoluteDifference_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike,\n    weights?: Tensor|TensorLike,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $labels = convertToTensor(labels, 'labels', 'absoluteDifference');\n  const $predictions =\n      convertToTensor(predictions, 'predictions', 'absoluteDifference');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'absoluteDifference');\n  }\n  assertShapesMatch(\n      $labels.shape, $predictions.shape, 'Error in absoluteDifference: ');\n\n  const losses = $labels.sub($predictions).abs();\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes the mean squared error between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction meanSquaredError_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike,\n    weights?: Tensor|TensorLike,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $labels = convertToTensor(labels, 'labels', 'meanSquaredError');\n  const $predictions =\n      convertToTensor(predictions, 'predictions', 'meanSquaredError');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'meanSquaredError');\n  }\n  assertShapesMatch(\n      $labels.shape, $predictions.shape, 'Error in meanSquaredError: ');\n\n  const losses = $labels.squaredDifference($predictions);\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes the cosine distance loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param axis The dimension along which the cosine distance is computed.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction cosineDistance_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike, axis: number,\n    weights?: Tensor|TensorLike,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $labels = convertToTensor(labels, 'labels', 'cosineDistance');\n  const $predictions =\n      convertToTensor(predictions, 'predictions', 'cosineDistance');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'cosineDistance');\n  }\n  assertShapesMatch(\n      $labels.shape, $predictions.shape, 'Error in cosineDistance: ');\n\n  const one = scalar(1);\n  const losses = one.sub($labels.mul($predictions).sum(axis, true));\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes the Hinge loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction hingeLoss_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike,\n    weights?: Tensor|TensorLike,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  let $labels = convertToTensor(labels, 'labels', 'hingeLoss');\n  const $predictions = convertToTensor(predictions, 'predictions', 'hingeLoss');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'hingeLoss');\n  }\n  assertShapesMatch($labels.shape, $predictions.shape, 'Error in hingeLoss: ');\n\n  const one = scalar(1);\n  // Convert binary labels to (-1, 1)\n  $labels = scalar(2).mul($labels).sub(one);\n  const losses = one.sub($labels.mul($predictions)).relu();\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes the log loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param epsilon A small increment to avoid taking log of zero\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction logLoss_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike,\n    weights?: Tensor|TensorLike, epsilon = 1e-7,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $labels = convertToTensor(labels, 'labels', 'logLoss');\n  const $predictions = convertToTensor(predictions, 'predictions', 'logLoss');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'logLoss');\n  }\n  assertShapesMatch($labels.shape, $predictions.shape, 'Error in logLoss: ');\n\n  const one = scalar(1);\n  const epsilonScalar = scalar(epsilon);\n  const losses = $labels.mul($predictions.add(epsilonScalar).log())\n                     .neg()\n                     .sub(one.sub($labels).mul(\n                         one.sub($predictions).add(epsilonScalar).log()));\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\nfunction sigmoidCrossEntropyWithLogits_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, logits: T|TensorLike): O {\n  const $labels =\n      convertToTensor(labels, 'labels', 'sigmoidCrossEntropyWithLogits');\n  const $logits =\n      convertToTensor(logits, 'logits', 'sigmoidCrossEntropyWithLogits');\n  assertShapesMatch(\n      $labels.shape, $logits.shape, 'Error in sigmoidCrossEntropyWithLogits: ');\n\n  /**\n   * Implementation Details:\n   *\n   * For brevity, let `x = logits`, `z = labels`.  The logistic loss is\n   *     z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))\n   *   = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))\n   *   = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))\n   *   = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))\n   *   = (1 - z) * x + log(1 + exp(-x))\n   *   = x - x * z + log(1 + exp(-x))\n   *\n   *   For x < 0, to avoid overflow in exp(-x), we reformulate the above\n   *     x - x * z + log(1 + exp(-x))\n   *   = log(exp(x)) - x * z + log(1 + exp(-x))\n   *   = - x * z + log(1 + exp(x))\n   *\n   * Hence, to ensure stability and avoid overflow, the implementation uses\n   * this equivalent formulation:\n   *     max(x, 0) - x * z + log(1 + exp(-abs(x)))\n   */\n  const maxOutput = $logits.relu();\n  const outputXTarget = $logits.mul($labels);\n  const sigmoidOutput = $logits.abs().neg().exp().log1p();\n\n  return maxOutput.sub(outputXTarget).add(sigmoidOutput);\n}\n\n/**\n * Computes the sigmoid cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n *   newMulticlassLabels = multiclassLabels * (1 - labelSmoothing)\n *                         + 0.5 * labelSmoothing\n *\n * @param multiClassLabels The ground truth output tensor of shape\n * [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' } */\nfunction sigmoidCrossEntropy_<T extends Tensor, O extends Tensor>(\n    multiClassLabels: T|TensorLike, logits: T|TensorLike,\n    weights?: Tensor|TensorLike, labelSmoothing = 0,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  let $multiClassLabels = convertToTensor(\n      multiClassLabels, 'multiClassLabels', 'sigmoidCrossEntropy');\n  const $logits = convertToTensor(logits, 'logits', 'sigmoidCrossEntropy');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'sigmoidCrossEntropy');\n  }\n  assertShapesMatch(\n      $multiClassLabels.shape, $logits.shape, 'Error in sigmoidCrossEntropy: ');\n\n  if (labelSmoothing > 0) {\n    const labelSmoothingScalar = scalar(labelSmoothing);\n    const one = scalar(1);\n    const half = scalar(0.5);\n\n    $multiClassLabels = $multiClassLabels.mul(one.sub(labelSmoothingScalar))\n                            .add(half.mul(labelSmoothingScalar));\n  }\n  const losses = sigmoidCrossEntropyWithLogits_($multiClassLabels, $logits);\n\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes the huber loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n *    'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n *    `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n *    must be either `1`, or the same as the corresponding `losses`\n *    dimension).\n * @param delta Point where huber loss changes from quadratic to linear.\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`.\n */\n/** @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'} */\nfunction huberLoss_<T extends Tensor, O extends Tensor>(\n    labels: T|TensorLike, predictions: T|TensorLike,\n    weights?: Tensor|TensorLike, delta = 1.0,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  const $labels = convertToTensor(labels, 'labels', 'huberLoss');\n  const $predictions = convertToTensor(predictions, 'predictions', 'huberLoss');\n  let $weights: Tensor = null;\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'huberLoss');\n  }\n  assertShapesMatch($labels.shape, $predictions.shape, 'Error in huberLoss: ');\n\n  const deltaScalar = scalar(delta);\n  const error = $predictions.sub($labels).abs();\n  const quadratic = minimum(error, deltaScalar);\n  const linear = error.sub(quadratic);\n\n  const losses =\n      scalar(0.5).mul(quadratic.square()).add(deltaScalar.mul(linear));\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\n/**\n * Computes softmax cross entropy between logits and labels.\n *\n * Measures the probability error in discrete classification tasks in which\n * the classes are mutually exclusive (each entry is in exactly one class).\n * For example, each CIFAR-10 image is labeled with one and only one label: an\n * image can be a dog or a truck, but not both.\n *\n * `NOTE`: While the classes are mutually exclusive, their probabilities need\n * not be. All that is required is that each row of labels is a valid\n * probability distribution. If they are not, the computation of the gradient\n * will be incorrect.\n *\n * `WARNING`: This op expects unscaled logits, since it performs a softmax on\n * logits internally for efficiency. Do not call this op with the output of\n * softmax, as it will produce incorrect results.\n *\n * logits and labels must have the same shape, e.g. [batch_size, num_classes]\n * and the same dtype.\n * @param labels The labels array.\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n *     which indicates the last dimension.\n */\nfunction softmaxCrossEntropyWithLogits_<T extends Tensor, O extends Tensor>(\n    labels: T, logits: T, dim = -1): O {\n  if (dim === -1) {\n    dim = logits.rank - 1;\n  }\n\n  if (dim !== logits.rank - 1) {\n    throw Error(\n        `Softmax cross entropy along a non-last dimension is not yet ` +\n        `supported. Labels / logits was rank ${logits.rank} ` +\n        `and dim was ${dim}`);\n  }\n  // Use a custom gradient for numerical stability.\n  const customOp =\n      customGrad((labels: Tensor, logits: Tensor, save: GradSaveFunc) => {\n        // Reference:\n        //   1. http://cs231n.github.io/linear-classify/#softmax\n        //   2. https://blog.feedly.com/tricks-of-the-trade-logsumexp/\n        const keepDims = true;\n        const lse = logits.logSumExp([dim], keepDims);\n        const logResult = logits.toFloat().sub(lse);\n        save([labels, logResult]);\n\n        const costVector = logResult.mul(labels).neg();\n        const value: O = costVector.sum([dim]);\n\n        const gradFunc = (dy: O, saved: Tensor[]) => {\n          const [labels, logResult] = saved;\n          const dyShape = expandShapeToKeepDim(dy.shape, [dim]);\n          return [\n            dy.reshape(dyShape).mul(labels.toFloat().sub(logResult.exp())),\n            dy.reshape(dyShape).mul(logResult.exp().sub(labels.toFloat())),\n          ];\n        };\n        return {value, gradFunc};\n      });\n\n  return customOp(labels, logits);\n}\n\n/**\n * Computes the softmax cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n *   newOnehotLabels = onehotLabels * (1 - labelSmoothing)\n *                         + labelSmoothing / numClasses\n *\n * @param onehotLabels One hot encoded labels\n *    [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or 1, and must be\n *    broadcastable to `loss`  of shape [batch_size]\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n *    `Reduction`\n */\n/** @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' } */\nfunction softmaxCrossEntropy_<T extends Tensor, O extends Tensor>(\n    onehotLabels: T|TensorLike, logits: T|TensorLike,\n    weights?: Tensor|TensorLike, labelSmoothing = 0,\n    reduction = Reduction.SUM_BY_NONZERO_WEIGHTS): O {\n  let $onehotLabels =\n      convertToTensor(onehotLabels, 'onehotLabels', 'softmaxCrossEntropy');\n  const $logits = convertToTensor(logits, 'logits', 'softmaxCrossEntropy');\n  let $weights: Tensor = null;\n\n  if (weights != null) {\n    $weights = convertToTensor(weights, 'weights', 'softmaxCrossEntropy');\n  }\n\n  assertShapesMatch(\n      $onehotLabels.shape, $logits.shape, 'Error in softmaxCrossEntropy: ');\n\n  if (labelSmoothing > 0) {\n    const labelSmoothingScalar = scalar(labelSmoothing);\n    const one = scalar(1);\n    const numClasses = scalar($onehotLabels.shape[1]);\n\n    $onehotLabels = $onehotLabels.mul(one.sub(labelSmoothingScalar))\n                        .add(labelSmoothingScalar.div(numClasses));\n  }\n\n  const losses = softmaxCrossEntropyWithLogits_($onehotLabels, $logits);\n\n  return computeWeightedLoss(losses, $weights, reduction);\n}\n\nexport const absoluteDifference = op({absoluteDifference_});\nexport const computeWeightedLoss = op({computeWeightedLoss_});\nexport const cosineDistance = op({cosineDistance_});\nexport const hingeLoss = op({hingeLoss_});\nexport const huberLoss = op({huberLoss_});\nexport const logLoss = op({logLoss_});\nexport const meanSquaredError = op({meanSquaredError_});\nexport const sigmoidCrossEntropy = op({sigmoidCrossEntropy_});\nexport const softmaxCrossEntropy = op({softmaxCrossEntropy_});\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Linear algebra ops.\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose} from '../globals';\nimport {Tensor, Tensor1D, Tensor2D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport {assert} from '../util';\nimport {squeeze, stack, unstack} from './array_ops';\nimport {sub} from './binary_ops';\nimport {split} from './concat_split';\nimport {eye} from './eye';\nimport {logicalAnd, where} from './logical_ops';\nimport {norm} from './norm';\nimport {op} from './operation';\nimport {sum} from './reduction_ops';\nimport {range, scalar, tensor2d, zeros} from './tensor_ops';\n\n/**\n * Copy a tensor setting everything outside a central band in each innermost\n * matrix to zero.\n *\n * The band part is computed as follows: Assume input has `k` dimensions\n * `[I, J, K, ..., M, N]`, then the output is a tensor with the same shape where\n * `band[i, j, k, ..., m, n] = in_band(m, n) * input[i, j, k, ..., m, n]`.\n * The indicator function\n * `in_band(m, n) = (num_lower < 0 || (m-n) <= num_lower))`\n * `&& (num_upper < 0 || (n-m) <= num_upper)`\n *\n * ```js\n * const x = tf.tensor2d([[ 0,  1,  2, 3],\n *                        [-1,  0,  1, 2],\n *                        [-2, -1,  0, 1],\n *                        [-3, -2, -1, 0]]);\n * let y = tf.linalg.bandPart(x, 1, -1);\n * y.print(); // [[ 0,  1,  2, 3],\n *            //  [-1,  0,  1, 2],\n *            //  [ 0, -1,  0, 1],\n *            //  [ 0, 0 , -1, 0]]\n * let z = tf.linalg.bandPart(x, 2, 1);\n * z.print(); // [[ 0,  1,  0, 0],\n *            //  [-1,  0,  1, 0],\n *            //  [-2, -1,  0, 1],\n *            //  [ 0, -2, -1, 0]]\n * ```\n *\n * @param x Rank `k` tensor\n * @param numLower Number of subdiagonals to keep.\n *   If negative, keep entire lower triangle.\n * @param numUpper Number of subdiagonals to keep.\n *   If negative, keep entire upper triangle.\n * @returns Rank `k` tensor of the same shape as input.\n *   The extracted banded tensor.\n */\n/**\n * @doc {heading:'Operations',\n *       subheading:'Linear Algebra',\n *       namespace:'linalg'}\n */\nfunction bandPart_<T extends Tensor>(\n    a: T|TensorLike, numLower: number, numUpper: number): T {\n  if (numLower % 1 !== 0) {\n    throw new Error(\n        `bandPart(): numLower must be an integer, got ${numLower}.`);\n  }\n  if (numUpper % 1 !== 0) {\n    throw new Error(\n        `bandPart(): numUpper must be an integer, got ${numUpper}.`);\n  }\n\n  const $a = convertToTensor(a, 'a', 'bandPart');\n\n  if ($a.rank < 2) {\n    throw new Error(`bandPart(): Rank must be at least 2, got ${$a.rank}.`);\n  }\n\n  const shape = $a.shape, [M, N] = $a.shape.slice(-2);\n\n  if (!(numLower <= M)) {\n    throw new Error(\n        `bandPart(): numLower (${numLower})` +\n        ` must not be greater than the number of rows (${M}).`);\n  }\n  if (!(numUpper <= N)) {\n    throw new Error(\n        `bandPart(): numUpper (${numUpper})` +\n        ` must not be greater than the number of columns (${N}).`);\n  }\n\n  if (numLower < 0) {\n    numLower = M;\n  }\n  if (numUpper < 0) {\n    numUpper = N;\n  }\n\n  const i = range(0, M, 1, 'int32').reshape([-1, 1]),\n        j = range(0, N, 1, 'int32'), ij = sub(i, j);\n\n  const inBand = logicalAnd(\n      ij.lessEqual(scalar(+numLower, 'int32')),\n      ij.greaterEqual(scalar(-numUpper, 'int32')));\n\n  const zero = zeros([M, N], $a.dtype);\n\n  return stack(unstack($a.reshape([-1, M, N]))\n                   .map(mat => where(inBand, mat, zero)))\n             .reshape(shape) as T;\n}\n\n/**\n * Gram-Schmidt orthogonalization.\n *\n * ```js\n * const x = tf.tensor2d([[1, 2], [3, 4]]);\n * let y = tf.linalg.gramSchmidt(x);\n * y.print();\n * console.log('Othogonalized:');\n * y.dot(y.transpose()).print();  // should be nearly the identity matrix.\n * console.log('First row direction maintained:');\n * const data = await y.array();\n * console.log(data[0][1] / data[0][0]);  // should be nearly 2.\n * ```\n *\n * @param xs The vectors to be orthogonalized, in one of the two following\n *   formats:\n *   - An Array of `tf.Tensor1D`.\n *   - A `tf.Tensor2D`, i.e., a matrix, in which case the vectors are the rows\n *     of `xs`.\n *   In each case, all the vectors must have the same length and the length\n *   must be greater than or equal to the number of vectors.\n * @returns The orthogonalized and normalized vectors or matrix.\n *   Orthogonalization means that the vectors or the rows of the matrix\n *   are orthogonal (zero inner products). Normalization means that each\n *   vector or each row of the matrix has an L2 norm that equals `1`.\n */\n/**\n * @doc {heading:'Operations',\n *       subheading:'Linear Algebra',\n *       namespace:'linalg'}\n */\nfunction gramSchmidt_(xs: Tensor1D[]|Tensor2D): Tensor1D[]|Tensor2D {\n  let inputIsTensor2D: boolean;\n  if (Array.isArray(xs)) {\n    inputIsTensor2D = false;\n    assert(\n        xs != null && xs.length > 0,\n        () => 'Gram-Schmidt process: input must not be null, undefined, or ' +\n            'empty');\n    const dim = xs[0].shape[0];\n    for (let i = 1; i < xs.length; ++i) {\n      assert(\n          xs[i].shape[0] === dim,\n          () =>\n              'Gram-Schmidt: Non-unique lengths found in the input vectors: ' +\n              `(${(xs as Tensor1D[])[i].shape[0]} vs. ${dim})`);\n    }\n  } else {\n    inputIsTensor2D = true;\n    xs = split(xs, xs.shape[0], 0).map(x => squeeze(x, [0]));\n  }\n\n  assert(\n      xs.length <= xs[0].shape[0],\n      () => `Gram-Schmidt: Number of vectors (${\n                (xs as Tensor1D[]).length}) exceeds ` +\n          `number of dimensions (${(xs as Tensor1D[])[0].shape[0]}).`);\n\n  const ys: Tensor1D[] = [];\n  const xs1d = xs;\n  for (let i = 0; i < xs.length; ++i) {\n    ys.push(ENGINE.tidy(() => {\n      let x = xs1d[i];\n      if (i > 0) {\n        for (let j = 0; j < i; ++j) {\n          const proj = sum(ys[j].mulStrict(x)).mul(ys[j]);\n          x = x.sub(proj);\n        }\n      }\n      return x.div(norm(x, 'euclidean'));\n    }));\n  }\n\n  if (inputIsTensor2D) {\n    return stack(ys, 0) as Tensor2D;\n  } else {\n    return ys;\n  }\n}\n\n/**\n * Compute QR decomposition of m-by-n matrix using Householder transformation.\n *\n * Implementation based on\n *   [http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf]\n * (http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf)\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [3, 4]]);\n * let [q, r] = tf.linalg.qr(a);\n * console.log('Q');\n * q.print();\n * console.log('R');\n * r.print();\n * console.log('Orthogonalized');\n * q.dot(q.transpose()).print()  // should be nearly the identity matrix.\n * console.log('Reconstructed');\n * q.dot(r).print(); // should be nearly [[1, 2], [3, 4]];\n * ```\n *\n * @param x The `tf.Tensor` to be QR-decomposed. Must have rank >= 2. Suppose\n *   it has the shape `[..., M, N]`.\n * @param fullMatrices An optional boolean parameter. Defaults to `false`.\n *   If `true`, compute full-sized `Q`. If `false` (the default),\n *   compute only the leading N columns of `Q` and `R`.\n * @returns An `Array` of two `tf.Tensor`s: `[Q, R]`. `Q` is a unitary matrix,\n *   i.e., its columns all have unit norm and are mutually orthogonal.\n *   If `M >= N`,\n *     If `fullMatrices` is `false` (default),\n *       - `Q` has a shape of `[..., M, N]`,\n *       - `R` has a shape of `[..., N, N]`.\n *     If `fullMatrices` is `true` (default),\n *       - `Q` has a shape of `[..., M, M]`,\n *       - `R` has a shape of `[..., M, N]`.\n *   If `M < N`,\n *     - `Q` has a shape of `[..., M, M]`,\n *     - `R` has a shape of `[..., M, N]`.\n * @throws If the rank of `x` is less than 2.\n */\n/**\n * @doc {heading:'Operations',\n *       subheading:'Linear Algebra',\n *       namespace:'linalg'}\n */\nfunction qr_(x: Tensor, fullMatrices = false): [Tensor, Tensor] {\n  if (x.rank < 2) {\n    throw new Error(\n        `qr() requires input tensor to have a rank >= 2, but got rank ${\n            x.rank}`);\n  } else if (x.rank === 2) {\n    return qr2d(x as Tensor2D, fullMatrices);\n  } else {\n    // Rank > 2.\n    // TODO(cais): Below we split the input into individual 2D tensors,\n    //   perform QR decomposition on them and then stack the results back\n    //   together. We should explore whether this can be parallelized.\n    const outerDimsProd = x.shape.slice(0, x.shape.length - 2)\n                              .reduce((value, prev) => value * prev);\n    const x2ds = unstack(\n        x.reshape([\n          outerDimsProd, x.shape[x.shape.length - 2],\n          x.shape[x.shape.length - 1]\n        ]),\n        0);\n    const q2ds: Tensor2D[] = [];\n    const r2ds: Tensor2D[] = [];\n    x2ds.forEach(x2d => {\n      const [q2d, r2d] = qr2d(x2d as Tensor2D, fullMatrices);\n      q2ds.push(q2d);\n      r2ds.push(r2d);\n    });\n    const q = stack(q2ds, 0).reshape(x.shape);\n    const r = stack(r2ds, 0).reshape(x.shape);\n    return [q, r];\n  }\n}\n\nfunction qr2d(x: Tensor2D, fullMatrices = false): [Tensor2D, Tensor2D] {\n  return ENGINE.tidy(() => {\n    if (x.shape.length !== 2) {\n      throw new Error(\n          `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`);\n    }\n\n    const m = x.shape[0];\n    const n = x.shape[1];\n\n    let q = eye(m);     // Orthogonal transform so far.\n    let r = x.clone();  // Transformed matrix so far.\n\n    const one2D = tensor2d([[1]], [1, 1]);\n    let w: Tensor2D = one2D.clone();\n\n    const iters = m >= n ? n : m;\n    for (let j = 0; j < iters; ++j) {\n      // This tidy within the for-loop ensures we clean up temporary\n      // tensors as soon as they are no longer needed.\n      const rTemp = r;\n      const wTemp = w;\n      const qTemp = q;\n      [w, r, q] = ENGINE.tidy((): [Tensor2D, Tensor2D, Tensor2D] => {\n        // Find H = I - tau * w * w', to put zeros below R(j, j).\n        const rjEnd1 = r.slice([j, j], [m - j, 1]);\n        const normX = rjEnd1.norm();\n        const rjj = r.slice([j, j], [1, 1]);\n\n        // The sign() function returns 0 on 0, which causes division by zero.\n        const s = tensor2d([[-1]]).where(rjj.greater(0), tensor2d([[1]]));\n\n        const u1 = rjj.sub(s.mul(normX));\n        const wPre = rjEnd1.div(u1);\n        if (wPre.shape[0] === 1) {\n          w = one2D.clone();\n        } else {\n          w = one2D.concat(\n              wPre.slice([1, 0], [wPre.shape[0] - 1, wPre.shape[1]]) as\n                  Tensor2D,\n              0);\n        }\n        const tau = s.matMul(u1).div(normX).neg() as Tensor2D;\n\n        // -- R := HR, Q := QH.\n        const rjEndAll = r.slice([j, 0], [m - j, n]);\n        const tauTimesW: Tensor2D = tau.mul(w);\n        const wT: Tensor2D = w.transpose();\n        if (j === 0) {\n          r = rjEndAll.sub(tauTimesW.matMul(wT.matMul(rjEndAll)));\n        } else {\n          const rTimesTau: Tensor2D =\n              rjEndAll.sub(tauTimesW.matMul(wT.matMul(rjEndAll)));\n          r = r.slice([0, 0], [j, n]).concat(rTimesTau, 0);\n        }\n        const tawTimesWT: Tensor2D = tauTimesW.transpose();\n        const qAllJEnd = q.slice([0, j], [m, q.shape[1] - j]);\n        if (j === 0) {\n          q = qAllJEnd.sub(qAllJEnd.matMul(w).matMul(tawTimesWT));\n        } else {\n          const qTimesTau: Tensor2D =\n              qAllJEnd.sub(qAllJEnd.matMul(w).matMul(tawTimesWT));\n          q = q.slice([0, 0], [m, j]).concat(qTimesTau, 1);\n        }\n        return [w, r, q];\n      });\n      dispose([rTemp, wTemp, qTemp]);\n    }\n\n    if (!fullMatrices && m > n) {\n      q = q.slice([0, 0], [m, n]);\n      r = r.slice([0, 0], [n, n]);\n    }\n\n    return [q, r];\n  }) as [Tensor2D, Tensor2D];\n}\n\nexport const bandPart = op({bandPart_});\nexport const gramSchmidt = op({gramSchmidt_});\nexport const qr = op({qr_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {nonMaxSuppressionV3, nonMaxSuppressionV5} from '../backends/non_max_suppression_impl';\nimport {ENGINE, ForwardFunc} from '../engine';\nimport {Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D} from '../tensor';\nimport {NamedTensorMap} from '../tensor_types';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {op} from './operation';\n\n/**\n * Bilinear resize a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n *     images to. Each channel is resized individually.\n * @param alignCorners Defaults to False. If true, rescale\n *     input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n *     corners of images and resized images. If false, rescale by\n *     `new_height / height`. Treat similarly the width dimension.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction resizeBilinear_<T extends Tensor3D|Tensor4D>(\n    images: T|TensorLike, size: [number, number], alignCorners = false): T {\n  const $images = convertToTensor(images, 'images', 'resizeBilinear');\n  util.assert(\n      $images.rank === 3 || $images.rank === 4,\n      () => `Error in resizeBilinear: x must be rank 3 or 4, but got ` +\n          `rank ${$images.rank}.`);\n  util.assert(\n      size.length === 2,\n      () => `Error in resizeBilinear: new shape must 2D, but got shape ` +\n          `${size}.`);\n\n  let batchImages = $images as Tensor4D;\n  let reshapedTo4D = false;\n  if ($images.rank === 3) {\n    reshapedTo4D = true;\n    batchImages =\n        $images.as4D(1, $images.shape[0], $images.shape[1], $images.shape[2]);\n  }\n\n  const [newHeight, newWidth] = size;\n  const forward: ForwardFunc<Tensor4D> = (backend, save) => {\n    save([batchImages]);\n    return backend.resizeBilinear(\n        batchImages, newHeight, newWidth, alignCorners);\n  };\n\n  const backward = (dy: Tensor4D, saved: Tensor[]) => {\n    return {\n      x: () => ENGINE.runKernelFunc(\n          backend => backend.resizeBilinearBackprop(\n              dy, saved[0] as Tensor4D, alignCorners),\n          {})\n    };\n  };\n\n  const res = ENGINE.runKernelFunc(\n      forward, {x: batchImages}, backward, 'ResizeBilinear',\n      {alignCorners, newHeight, newWidth});\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * NearestNeighbor resize a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n *     images to. Each channel is resized individually.\n * @param alignCorners Defaults to False. If true, rescale\n *     input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n *     corners of images and resized images. If false, rescale by\n *     `new_height / height`. Treat similarly the width dimension.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction resizeNearestNeighbor_<T extends Tensor3D|Tensor4D>(\n    images: T|TensorLike, size: [number, number], alignCorners = false): T {\n  const $images = convertToTensor(images, 'images', 'resizeNearestNeighbor');\n  util.assert(\n      $images.rank === 3 || $images.rank === 4,\n      () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got ` +\n          `rank ${$images.rank}.`);\n  util.assert(\n      size.length === 2,\n      () =>\n          `Error in resizeNearestNeighbor: new shape must 2D, but got shape ` +\n          `${size}.`);\n  util.assert(\n      $images.dtype === 'float32' || $images.dtype === 'int32',\n      () => '`images` must have `int32` or `float32` as dtype');\n\n  let batchImages = $images as Tensor4D;\n  let reshapedTo4D = false;\n  if ($images.rank === 3) {\n    reshapedTo4D = true;\n    batchImages =\n        $images.as4D(1, $images.shape[0], $images.shape[1], $images.shape[2]);\n  }\n  const [newHeight, newWidth] = size;\n\n  const forward: ForwardFunc<Tensor4D> = (backend, save) => {\n    save([batchImages]);\n    return backend.resizeNearestNeighbor(\n        batchImages, newHeight, newWidth, alignCorners);\n  };\n\n  const backward = (dy: Tensor4D, saved: Tensor[]) => {\n    return {\n      batchImages: () => ENGINE.runKernelFunc(\n          backend => backend.resizeNearestNeighborBackprop(\n              dy, saved[0] as Tensor4D, alignCorners),\n          {})\n    };\n  };\n\n  const res = ENGINE.runKernelFunc(forward, {batchImages}, backward);\n\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n *     `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n *     the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n *     boxes overlap too much with respect to IOU. Must be between [0, 1].\n *     Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n *     on score. Defaults to -inf, which means any score is accepted.\n * @return A 1D tensor with the selected box indices.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction nonMaxSuppression_(\n    boxes: Tensor2D|TensorLike, scores: Tensor1D|TensorLike,\n    maxOutputSize: number, iouThreshold = 0.5,\n    scoreThreshold = Number.NEGATIVE_INFINITY): Tensor1D {\n  const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n  const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n\n  const inputs = nonMaxSuppSanityCheck(\n      $boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n  maxOutputSize = inputs.maxOutputSize;\n  iouThreshold = inputs.iouThreshold;\n  scoreThreshold = inputs.scoreThreshold;\n\n  const attrs = {maxOutputSize, iouThreshold, scoreThreshold};\n  return ENGINE.runKernelFunc(\n      b => b.nonMaxSuppression(\n          $boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold),\n      {boxes: $boxes, scores: $scores}, null /* grad */, 'NonMaxSuppressionV3',\n      attrs);\n}\n\n/** This is the async version of `nonMaxSuppression` */\nasync function nonMaxSuppressionAsync_(\n    boxes: Tensor2D|TensorLike, scores: Tensor1D|TensorLike,\n    maxOutputSize: number, iouThreshold = 0.5,\n    scoreThreshold = Number.NEGATIVE_INFINITY): Promise<Tensor1D> {\n  const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n  const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n\n  const inputs = nonMaxSuppSanityCheck(\n      $boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n  maxOutputSize = inputs.maxOutputSize;\n  iouThreshold = inputs.iouThreshold;\n  scoreThreshold = inputs.scoreThreshold;\n\n  const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n  const boxesVals = boxesAndScores[0];\n  const scoresVals = boxesAndScores[1];\n\n  const res = nonMaxSuppressionV3(\n      boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n  if ($boxes !== boxes) {\n    $boxes.dispose();\n  }\n  if ($scores !== scores) {\n    $scores.dispose();\n  }\n  return res;\n}\n\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This op also supports a Soft-NMS mode (c.f.\n * Bodla et al, https://arxiv.org/abs/1704.04503) where boxes reduce the score\n * of other overlapping boxes, therefore favoring different regions of the image\n * with high scores. To enable this Soft-NMS mode, set the `softNmsSigma`\n * parameter to be larger than 0.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n *     `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n *     the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n *     boxes overlap too much with respect to IOU. Must be between [0, 1].\n *     Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n *     on score. Defaults to -inf, which means any score is accepted.\n * @param softNmsSigma A float representing the sigma parameter for Soft NMS.\n *     When sigma is 0, it falls back to nonMaxSuppression.\n * @return A map with the following properties:\n *     - selectedIndices: A 1D tensor with the selected box indices.\n *     - selectedScores: A 1D tensor with the corresponding scores for each\n *       selected box.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction nonMaxSuppressionWithScore_(\n    boxes: Tensor2D|TensorLike, scores: Tensor1D|TensorLike,\n    maxOutputSize: number, iouThreshold = 0.5,\n    scoreThreshold = Number.NEGATIVE_INFINITY,\n    softNmsSigma = 0.0): NamedTensorMap {\n  const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n  const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n\n  const inputs = nonMaxSuppSanityCheck(\n      $boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold,\n      softNmsSigma);\n  maxOutputSize = inputs.maxOutputSize;\n  iouThreshold = inputs.iouThreshold;\n  scoreThreshold = inputs.scoreThreshold;\n  softNmsSigma = inputs.softNmsSigma;\n\n  const attrs = {maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma};\n\n  const result = ENGINE.runKernel(\n                     'NonMaxSuppressionV5', {boxes: $boxes, scores: $scores},\n                     attrs) as Tensor[];\n\n  return {selectedIndices: result[0], selectedScores: result[1]};\n}\n\n/** This is the async version of `nonMaxSuppressionWithScore` */\nasync function nonMaxSuppressionWithScoreAsync_(\n    boxes: Tensor2D|TensorLike, scores: Tensor1D|TensorLike,\n    maxOutputSize: number, iouThreshold = 0.5,\n    scoreThreshold = Number.NEGATIVE_INFINITY,\n    softNmsSigma = 0.0): Promise<NamedTensorMap> {\n  const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n  const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n\n  const inputs = nonMaxSuppSanityCheck(\n      $boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold,\n      softNmsSigma);\n  maxOutputSize = inputs.maxOutputSize;\n  iouThreshold = inputs.iouThreshold;\n  scoreThreshold = inputs.scoreThreshold;\n  softNmsSigma = inputs.softNmsSigma;\n\n  const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n  const boxesVals = boxesAndScores[0];\n  const scoresVals = boxesAndScores[1];\n\n  const res = nonMaxSuppressionV5(\n      boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold,\n      softNmsSigma);\n\n  if ($boxes !== boxes) {\n    $boxes.dispose();\n  }\n  if ($scores !== scores) {\n    $scores.dispose();\n  }\n  return res;\n}\n\nfunction nonMaxSuppSanityCheck(\n    boxes: Tensor2D, scores: Tensor1D, maxOutputSize: number,\n    iouThreshold: number, scoreThreshold: number, softNmsSigma?: number): {\n  maxOutputSize: number,\n  iouThreshold: number,\n  scoreThreshold: number,\n  softNmsSigma: number\n} {\n  if (iouThreshold == null) {\n    iouThreshold = 0.5;\n  }\n  if (scoreThreshold == null) {\n    scoreThreshold = Number.NEGATIVE_INFINITY;\n  }\n  if (softNmsSigma == null) {\n    softNmsSigma = 0.0;\n  }\n\n  const numBoxes = boxes.shape[0];\n  maxOutputSize = Math.min(maxOutputSize, numBoxes);\n\n  util.assert(\n      0 <= iouThreshold && iouThreshold <= 1,\n      () => `iouThreshold must be in [0, 1], but was '${iouThreshold}'`);\n  util.assert(\n      boxes.rank === 2,\n      () => `boxes must be a 2D tensor, but was of rank '${boxes.rank}'`);\n  util.assert(\n      boxes.shape[1] === 4,\n      () =>\n          `boxes must have 4 columns, but 2nd dimension was ${boxes.shape[1]}`);\n  util.assert(scores.rank === 1, () => 'scores must be a 1D tensor');\n  util.assert(\n      scores.shape[0] === numBoxes,\n      () => `scores has incompatible shape with boxes. Expected ${numBoxes}, ` +\n          `but was ${scores.shape[0]}`);\n  util.assert(\n      0 <= softNmsSigma && softNmsSigma <= 1,\n      () => `softNmsSigma must be in [0, 1], but was '${softNmsSigma}'`);\n  return {maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma};\n}\n\n/**\n * Extracts crops from the input image tensor and resizes them using bilinear\n * sampling or nearest neighbor sampling (possibly with aspect ratio change)\n * to a common output size specified by crop_size.\n *\n * @param image 4d tensor of shape `[batch,imageHeight,imageWidth, depth]`,\n *     where imageHeight and imageWidth must be positive, specifying the\n *     batch of images from which to take crops\n * @param boxes 2d float32 tensor of shape `[numBoxes, 4]`. Each entry is\n *     `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the normalized\n *     coordinates of the box in the boxInd[i]'th image in the batch\n * @param boxInd 1d int32 tensor of shape `[numBoxes]` with values in range\n *     `[0, batch)` that specifies the image that the `i`-th box refers to.\n * @param cropSize 1d int32 tensor of 2 elements `[cropHeigh, cropWidth]`\n *     specifying the size to which all crops are resized to.\n * @param method Optional string from `'bilinear' | 'nearest'`,\n *     defaults to bilinear, which specifies the sampling method for resizing\n * @param extrapolationValue A threshold for deciding when to remove boxes based\n *     on score. Defaults to 0.\n * @return A 4D tensor of the shape `[numBoxes,cropHeight,cropWidth,depth]`\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction cropAndResize_(\n    image: Tensor4D|TensorLike,\n    boxes: Tensor2D|TensorLike,\n    boxInd: Tensor1D|TensorLike,\n    cropSize: [number, number],\n    method?: 'bilinear'|'nearest',\n    extrapolationValue?: number,\n    ): Tensor4D {\n  const $image = convertToTensor(image, 'image', 'cropAndResize');\n  const $boxes = convertToTensor(boxes, 'boxes', 'cropAndResize', 'float32');\n  const $boxInd = convertToTensor(boxInd, 'boxInd', 'cropAndResize', 'int32');\n  method = method || 'bilinear';\n  extrapolationValue = extrapolationValue || 0;\n\n  const numBoxes = $boxes.shape[0];\n\n  util.assert(\n      $image.rank === 4,\n      () => 'Error in cropAndResize: image must be rank 4,' +\n          `but got rank ${$image.rank}.`);\n  util.assert(\n      $boxes.rank === 2 && $boxes.shape[1] === 4,\n      () => `Error in cropAndResize: boxes must be have size [${numBoxes},4] ` +\n          `but had shape ${$boxes.shape}.`);\n  util.assert(\n      $boxInd.rank === 1 && $boxInd.shape[0] === numBoxes,\n      () => `Error in cropAndResize: boxInd must be have size [${numBoxes}] ` +\n          `but had shape ${$boxes.shape}.`);\n  util.assert(\n      cropSize.length === 2,\n      () => `Error in cropAndResize: cropSize must be of length 2, but got ` +\n          `length ${cropSize.length}.`);\n  util.assert(\n      cropSize[0] >= 1 && cropSize[1] >= 1,\n      () => `cropSize must be atleast [1,1], but was ${cropSize}`);\n  util.assert(\n      method === 'bilinear' || method === 'nearest',\n      () => `method must be bilinear or nearest, but was ${method}`);\n\n  const forward: ForwardFunc<Tensor4D> = (backend, save) =>\n      backend.cropAndResize(\n          $image, $boxes, $boxInd, cropSize, method, extrapolationValue);\n\n  const res = ENGINE.runKernelFunc(\n      forward, {images: $image, boxes: $boxes, boxInd: $boxInd}, null /* der */,\n      'CropAndResize', {method, extrapolationValue, cropSize});\n  return res;\n}\n\nexport const resizeBilinear = op({resizeBilinear_});\nexport const resizeNearestNeighbor = op({resizeNearestNeighbor_});\nexport const nonMaxSuppression = op({nonMaxSuppression_});\nexport const nonMaxSuppressionAsync = nonMaxSuppressionAsync_;\nexport const nonMaxSuppressionWithScore = op({nonMaxSuppressionWithScore_});\nexport const nonMaxSuppressionWithScoreAsync = nonMaxSuppressionWithScoreAsync_;\nexport const cropAndResize = op({cropAndResize_});\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor, Tensor3D, Tensor4D} from '../tensor';\n\nimport {Conv2DInfo} from './conv_util';\n\nexport type Activation = 'linear'|'relu'|'prelu'|'elu'|'relu6';\n\nexport type FusedBatchMatMulConfig = {\n  a: Tensor3D,\n  b: Tensor3D,\n  transposeA: boolean,\n  transposeB: boolean,\n  bias?: Tensor,\n  activation?: Activation,\n  preluActivationWeights?: Tensor\n};\n\nexport type FusedConv2DConfig = {\n  input: Tensor4D,\n  filter: Tensor4D,\n  convInfo: Conv2DInfo,\n  bias?: Tensor,\n  activation?: Activation,\n  preluActivationWeights?: Tensor\n};\n\n// Whether we should call fused ops.\nexport const shouldFuse = (gradientDepth: number, activation: Activation) => {\n  const gradientMode = gradientDepth > 0;\n  return !gradientMode || activation === 'linear';\n};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {conv2dDerFilter, conv2dDerInput, depthwiseConv2dDerFilter, depthwiseConv2dDerInput} from '../ops/conv';\nimport * as conv_util from '../ops/conv_util';\nimport {op} from '../ops/operation';\nimport {Tensor, Tensor3D, Tensor4D} from '../tensor';\nimport {makeTypesMatch} from '../tensor_util';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {add} from './add';\nimport * as broadcast_util from './broadcast_util';\nimport {conv2d as unfusedConv2d, depthwiseConv2d as unfusedDepthwiseConv2d} from './conv';\nimport {Activation, shouldFuse} from './fused_util';\nimport {matMul as unfusedMatMul} from './matmul';\nimport {elu, prelu, relu, relu6} from './relu_ops';\n\n// Returns gradient for fused activation.\nconst getFusedDyActivation =\n    (dy: Tensor, y: Tensor, activation: Activation): Tensor => {\n      if (activation == null || activation === 'linear') {\n        return dy;\n      }\n      if (activation === 'relu') {\n        return dy.mul(y.step());\n      }\n      throw new Error(\n          `Gradient for activation ${activation} has not been ` +\n          `implemented yet.`);\n    };\n\n// Returns gradient for fused bias.\nconst getFusedBiasGradient = (bias: Tensor, dyActivation: Tensor): Tensor => {\n  let res = dyActivation;\n  const reduceAxes =\n      broadcast_util.getReductionAxes(bias.shape, dyActivation.shape);\n  if (reduceAxes.length > 0) {\n    res = res.sum(reduceAxes);\n  }\n  return res.reshape(bias.shape);\n};\n\nconst applyActivation =\n    (x: Tensor, activation: Activation, preluActivationWeights?: Tensor):\n        Tensor => {\n          if (activation === 'linear') {\n            return x;\n          } else if (activation === 'relu') {\n            return relu(x);\n          } else if (activation === 'elu') {\n            return elu(x);\n          } else if (activation === 'relu6') {\n            return relu6(x);\n          } else if (activation === 'prelu') {\n            return prelu(x, preluActivationWeights);\n          }\n          throw new Error(`Unknown fused activation ${activation}.`);\n        };\n\n/**\n * Computes the dot product of two matrices with optional activation and bias.\n *\n * ```js\n * const a = tf.tensor2d([-1, -2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const bias = tf.tensor2d([1, 2], [1, 2]);\n *\n * tf.fused.matMul({a, b, bias, activation: 'relu'}).print();\n * ```\n *\n * @param obj An object with the following properties:\n * - `a` First matrix in dot product operation.\n * - `b` Second matrix in dot product operation.\n * - `transposeA` If true, `a` is transposed before multiplication.\n * - `transposeB` If true, `b` is transposed before multiplication.\n * - `bias` Matrix to be added to the result.\n * - `activation` Name of activation kernel (defaults to `linear`).\n * - `preluActivationWeights` Tensor of prelu weights.\n */\nfunction fusedMatMul_<T extends Tensor>({\n  a,\n  b,\n  transposeA = false,\n  transposeB = false,\n  bias,\n  activation = 'linear',\n  preluActivationWeights\n}: {\n  a: T|TensorLike,\n  b: T|TensorLike,\n  transposeA?: boolean,\n  transposeB?: boolean,\n  bias?: Tensor|TensorLike,\n  activation?: Activation,\n  preluActivationWeights?: Tensor\n}): T {\n  if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n    let result = unfusedMatMul(a, b, transposeA, transposeB);\n    if (bias != null) {\n      result = add(result, bias);\n    }\n\n    return applyActivation(result, activation, preluActivationWeights) as T;\n  }\n\n  let $a = convertToTensor(a, 'a', 'fused matMul');\n  let $b = convertToTensor(b, 'b', 'fused matMul');\n  [$a, $b] = makeTypesMatch($a, $b);\n\n  const innerShapeA =\n      transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1];\n  const innerShapeB =\n      transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2];\n\n  const outerShapeA =\n      transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2];\n  const outerShapeB =\n      transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1];\n\n  const outerDimsA = $a.shape.slice(0, -2);\n  const outerDimsB = $b.shape.slice(0, -2);\n  const batchDimA = util.sizeFromShape(outerDimsA);\n  const batchDimB = util.sizeFromShape(outerDimsB);\n\n  util.assert(\n      $a.rank >= 2 && $b.rank >= 2 && $a.rank === $b.rank,\n      () =>\n          `Error in fused matMul: inputs must have the same rank of at least ` +\n          `2, got ranks ${$a.rank} and ${$b.rank}.`);\n\n  util.assert(\n      util.arraysEqual(outerDimsA, outerDimsB),\n      () => `Error in fused matMul: outer dimensions (${outerDimsA}) and (` +\n          `${outerDimsB}) of Tensors with shapes ${$a.shape} and ` +\n          `${$b.shape} must match.`);\n\n  util.assert(\n      innerShapeA === innerShapeB,\n      () => `Error in fused matMul: inner shapes (${innerShapeA}) and (` +\n          `${innerShapeB}) of Tensors with shapes ${$a.shape} and ` +\n          `${$b.shape} and transposeA=${transposeA}` +\n          ` and transposeB=${transposeB} must match.`);\n\n  const outShape = $a.shape.slice(0, -2).concat([outerShapeA, outerShapeB]);\n\n  const a3D = transposeA ? $a.as3D(batchDimA, innerShapeA, outerShapeA) :\n                           $a.as3D(batchDimA, outerShapeA, innerShapeA);\n  const b3D = transposeB ? $b.as3D(batchDimB, outerShapeB, innerShapeB) :\n                           $b.as3D(batchDimB, innerShapeB, outerShapeB);\n\n  let $bias: Tensor;\n  if (bias != null) {\n    $bias = convertToTensor(bias, 'bias', 'fused matMul');\n    [$bias] = makeTypesMatch($bias, $a);\n\n    broadcast_util.assertAndGetBroadcastShape(outShape, $bias.shape);\n  }\n\n  let $preluActivationWeights: Tensor;\n  if (preluActivationWeights != null) {\n    $preluActivationWeights = convertToTensor(\n        preluActivationWeights, 'prelu weights', 'fused matMul');\n  }\n\n  const grad = (dy: Tensor3D, saved: Tensor[]) => {\n    const [a3D, b3D, y] = saved;\n    const dyActivation = getFusedDyActivation(dy, y, activation);\n\n    let biasGradient = {};\n    if (bias != null) {\n      biasGradient = {bias: () => getFusedBiasGradient($bias, dyActivation)};\n    }\n\n    if (!transposeA && !transposeB) {\n      return Object.assign(\n          {\n            a: () => dyActivation.matMul(b3D as Tensor3D, false, true),\n            b: () => a3D.matMul(dyActivation, true, false)\n          },\n          biasGradient);\n    } else if (!transposeA && transposeB) {\n      return Object.assign(\n          {\n            a: () => dyActivation.matMul(b3D as Tensor3D, false, false),\n            b: () => dyActivation.matMul(a3D as Tensor3D, true, false)\n          },\n          biasGradient);\n    } else if (transposeA && !transposeB) {\n      return Object.assign(\n          {\n            a: () => b3D.matMul(dyActivation, false, true),\n            b: () => a3D.matMul(dyActivation, false, false)\n          },\n          biasGradient);\n    } else {\n      return Object.assign(\n          {\n            a: () => b3D.matMul(dyActivation, true, true),\n            b: () => dyActivation.matMul(a3D as Tensor3D, true, true)\n          },\n          biasGradient);\n    }\n  };\n\n  const inputs:\n      {a: Tensor, b: Tensor,\n       bias?: Tensor,\n       preluActivationWeights?: Tensor} = {a: a3D, b: b3D};\n  if (bias != null) {\n    inputs.bias = $bias;\n  }\n  if (preluActivationWeights != null) {\n    inputs.preluActivationWeights = $preluActivationWeights;\n  }\n\n  const inputsToSave = [a3D, b3D];\n  const outputsToSave = [true];\n\n  const res = ENGINE.runKernelFunc(\n      (backend, save) => {\n        const y = backend.fusedBatchMatMul({\n          a: a3D,\n          b: b3D,\n          transposeA,\n          transposeB,\n          bias: $bias,\n          activation,\n          preluActivationWeights: $preluActivationWeights\n        });\n        save([a3D, b3D, y]);\n        return y;\n      },\n      inputs, grad, '_FusedMatMul', {transposeA, transposeB, activation},\n      inputsToSave, outputsToSave);\n  return res.reshape(outShape) as T;\n}\n\n/**\n * Computes a 2D convolution over the input x, optionally fused with adding a\n * bias and applying an activation.\n *\n * ```js\n * const inputDepth = 2;\n * const inShape = [2, 2, 2, inputDepth];\n * const outputDepth = 2;\n * const fSize = 1;\n * const pad = 0;\n * const strides = 1;\n *\n * const x = tf.tensor4d( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n * 16], inShape);\n * const w = tf.tensor4d([-1, 1, -2, 0.5], [fSize, fSize, inputDepth,\n * outputDepth]);\n *\n * tf.fused.conv2d({ x, filter: w, strides, pad, dataFormat: 'NHWC',\n * dilations: [1, 1], bias: tf.scalar(5), activation: 'relu' }).print();\n * ```\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n *     `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n *   - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *   - `valid` output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`) to be\n *     applied\n *      after biasAdd.\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n *     of a `prelu` activation, typically the same shape as `x`.\n */\nfunction fusedConv2d_<T extends Tensor3D|Tensor4D>({\n  x,\n  filter,\n  strides,\n  pad,\n  dataFormat = 'NHWC',\n  dilations = [1, 1],\n  dimRoundingMode,\n  bias,\n  activation = 'linear',\n  preluActivationWeights\n}: {\n  x: T|TensorLike,\n  filter: Tensor4D|TensorLike,\n  strides: [number, number]|number,\n  pad: 'valid'|'same'|number,\n  dataFormat?: 'NHWC'|'NCHW',\n  dilations?: [number, number]|number,\n  dimRoundingMode?: 'floor'|'round'|'ceil',\n  bias?: Tensor|TensorLike,\n  activation?: Activation,\n  preluActivationWeights?: Tensor\n}): T {\n  activation = activation || 'linear';\n  if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n    let result = unfusedConv2d(\n        x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n    if (bias != null) {\n      result = add(result, bias);\n    }\n\n    return applyActivation(result, activation, preluActivationWeights) as T;\n  }\n\n  const $x = convertToTensor(x, 'x', 'conv2d');\n  const $filter = convertToTensor(filter, 'filter', 'conv2d');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in fused conv2d: input must be rank 4, but got rank ` +\n          `${x4D.rank}.`);\n  util.assert(\n      $filter.rank === 4,\n      () => `Error in fused conv2d: filter must be rank 4, but got rank ` +\n          `${$filter.rank}.`);\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in fused conv2d: pad must be an integer when using, ` +\n            `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  util.assert(\n      x4D.shape[3] === $filter.shape[2],\n      () => `Error in conv2d: depth of input (${x4D.shape[3]}) must match ` +\n          `input depth for filter ${$filter.shape[2]}.`);\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n          `Got strides ${strides} and dilations '${dilations}'`);\n  util.assert(\n      dataFormat === 'NHWC',\n      () => `Error in conv2d: got dataFormat of ${\n          dataFormat} but only NHWC is currently supported.`);\n\n  const convInfo = conv_util.computeConv2DInfo(\n      x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode);\n\n  let $bias: Tensor;\n  if (bias != null) {\n    $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n    [$bias] = makeTypesMatch($bias, $x);\n\n    broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n  }\n\n  let $preluActivationWeights: Tensor;\n  if (preluActivationWeights != null) {\n    $preluActivationWeights = convertToTensor(\n        preluActivationWeights, 'prelu weights', 'fused conv2d');\n  }\n\n  const grad = (dy: Tensor4D, saved: Tensor[]) => {\n    const [$filter, x4D, y] = saved as [Tensor4D, Tensor4D, Tensor4D];\n\n    const dyActivation = getFusedDyActivation(dy, y, activation) as Tensor4D;\n\n    util.assert(\n        conv_util.tupleValuesAreOne(dilations),\n        () => 'Error in gradient of fused conv2D: ' +\n            `dilation rates greater than 1 ` +\n            `are not yet supported in gradients. Got dilations '${dilations}'`);\n\n    let biasGradient = {};\n    if (bias != null) {\n      biasGradient = {bias: () => getFusedBiasGradient($bias, dyActivation)};\n    }\n\n    return Object.assign(\n        {\n          x: () =>\n              conv2dDerInput(x4D.shape, dyActivation, $filter, strides, pad),\n          filter: () =>\n              conv2dDerFilter(x4D, dyActivation, $filter.shape, strides, pad)\n        },\n        biasGradient);\n  };\n\n  const inputs: {\n    x: Tensor,\n    filter: Tensor,\n    bias?: Tensor,\n    preluActivationWeights?: Tensor\n  } = {x: x4D, filter: $filter};\n  if (bias != null) {\n    inputs.bias = $bias;\n  }\n  if (preluActivationWeights != null) {\n    inputs.preluActivationWeights = $preluActivationWeights;\n  }\n\n  const inputsToSave = [$filter, x4D];\n  const outputsToSave = [true];  // Save the only output.\n  const res = ENGINE.runKernelFunc(\n      (backend, save) => {\n        const res = backend.fusedConv2d({\n          input: x4D,\n          filter: $filter,\n          convInfo,\n          bias: $bias,\n          activation,\n          preluActivationWeights: $preluActivationWeights\n        });\n        save([$filter, x4D, res]);\n        return res;\n      },\n      inputs, grad, 'FusedConv2D', {convInfo, activation}, inputsToSave,\n      outputsToSave);\n\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n\n  return res as T;\n}\n\n/**\n * Computes depthwise 2D convolution, optionally fused with adding a\n * bias and applying an activation.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n *     https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n *     `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n *     `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n *   - `same` and stride 1: output will be of same size as input,\n *       regardless of filter size.\n *   - `valid`: output will be smaller than input if filter is larger\n *       than 1x1.\n *   - For more info, see this guide:\n *     [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n *          https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n *     in which we sample input values across the height and width dimensions\n *     in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n *     number, then `dilationHeight == dilationWidth`. If it is greater than\n *     1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n *     \"NHWC\". Specify the data format of the input and output data. With the\n *     default format \"NHWC\", the data is stored in the order of: [batch,\n *     height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode The rounding mode used when computing output\n *     dimensions if pad is a number. If none is provided, it will not round\n *     and error if the output is of fractional size.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`).\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n *     of a `prelu` activation, typically the same shape as `x`.\n */\nfunction fusedDepthwiseConv2d_<T extends Tensor3D|Tensor4D>({\n  x,\n  filter,\n  strides,\n  pad,\n  dataFormat = 'NHWC',\n  dilations = [1, 1],\n  dimRoundingMode,\n  bias,\n  activation = 'linear',\n  preluActivationWeights\n}: {\n  x: T|TensorLike,\n  filter: Tensor4D|TensorLike,\n  strides: [number, number]|number,\n  pad: 'valid'|'same'|number,\n  dataFormat?: 'NHWC'|'NCHW',\n  dilations?: [number, number]|number,\n  dimRoundingMode?: 'floor'|'round'|'ceil',\n  bias?: Tensor|TensorLike,\n  activation?: Activation,\n  preluActivationWeights?: Tensor\n}): T {\n  if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n    let result = unfusedDepthwiseConv2d(\n        x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n    if (bias != null) {\n      result = add(result, bias);\n    }\n\n    return applyActivation(result, activation, preluActivationWeights) as T;\n  }\n\n  const $x = convertToTensor(x, 'x', 'depthwiseConv2d');\n  const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d');\n\n  let x4D = $x as Tensor4D;\n  let reshapedTo4D = false;\n  if ($x.rank === 3) {\n    reshapedTo4D = true;\n    x4D = $x.as4D(1, $x.shape[0], $x.shape[1], $x.shape[2]);\n  }\n  util.assert(\n      x4D.rank === 4,\n      () => `Error in fused depthwiseConv2d: input must be rank 4, but got ` +\n          `rank ${x4D.rank}.`);\n  util.assert(\n      $filter.rank === 4,\n      () => `Error in fused depthwiseConv2d: filter must be rank 4, ` +\n          `but got rank ${$filter.rank}.`);\n  util.assert(\n      x4D.shape[3] === $filter.shape[2],\n      () => `Error in fused depthwiseConv2d: number of input channels ` +\n          `(${x4D.shape[3]}) must match the inChannels dimension in ` +\n          `filter ${$filter.shape[2]}.`);\n  if (dilations == null) {\n    dilations = [1, 1];\n  }\n  util.assert(\n      conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n      () =>\n          'Error in fused depthwiseConv2d: Either strides or dilations must ' +\n          `be 1. Got strides ${strides} and dilations '${dilations}'`);\n\n  if (dimRoundingMode != null) {\n    util.assert(\n        util.isInt(pad as number),\n        () => `Error in fused depthwiseConv2d: pad must be an integer when ` +\n            `using dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n  }\n\n  const convInfo = conv_util.computeConv2DInfo(\n      x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode,\n      true /* depthwise */);\n\n  let $bias: Tensor;\n  if (bias != null) {\n    $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n    [$bias] = makeTypesMatch($bias, $x);\n\n    broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n  }\n\n  let $preluActivationWeights: Tensor;\n  if (preluActivationWeights != null) {\n    $preluActivationWeights = convertToTensor(\n        preluActivationWeights, 'prelu weights', 'fused depthwiseConv2d');\n  }\n\n  const grad = (dy: Tensor4D, saved: Tensor[]) => {\n    util.assert(\n        conv_util.tupleValuesAreOne(dilations),\n        () => 'Error in gradient of fused depthwiseConv2d: dilation rates ' +\n            `greater than 1 are not yet supported. Got dilations ` +\n            `'${dilations}'`);\n    const [$filter, x4D, y] = saved;\n\n    const dyActivation = getFusedDyActivation(dy, y, activation) as Tensor4D;\n\n    let biasGradient = {};\n    if (bias != null) {\n      biasGradient = {bias: () => getFusedBiasGradient($bias, dyActivation)};\n    }\n\n    return Object.assign(\n        {\n          x: () => depthwiseConv2dDerInput(\n              (x4D as Tensor4D).shape, dyActivation, $filter as Tensor4D,\n              convInfo),\n          filter: () => depthwiseConv2dDerFilter(\n              x4D as Tensor4D, dyActivation, ($filter as Tensor4D).shape,\n              convInfo),\n        },\n        biasGradient);\n  };\n\n  const inputs: {\n    x: Tensor,\n    filter: Tensor,\n    bias?: Tensor,\n    preluActivationWeights?: Tensor\n  } = {x: x4D, filter: $filter};\n  if (bias != null) {\n    inputs.bias = $bias;\n  }\n  if (preluActivationWeights != null) {\n    inputs.preluActivationWeights = $preluActivationWeights;\n  }\n\n  const inputsToSave = [$filter, x4D];\n  const outputsToSave = [true];\n  const res = ENGINE.runKernelFunc(\n      (backend, save) => {\n        const res = backend.fusedDepthwiseConv2D({\n          input: x4D,\n          filter: $filter,\n          convInfo,\n          bias: $bias,\n          activation,\n          preluActivationWeights: $preluActivationWeights\n        });\n        save([$filter, x4D, res]);\n        return res;\n      },\n      inputs, grad, 'FusedDepthwiseConv2D', {convInfo, activation},\n      inputsToSave, outputsToSave);\n  if (reshapedTo4D) {\n    return res.as3D(res.shape[1], res.shape[2], res.shape[3]) as T;\n  }\n  return res as T;\n}\n\nexport const matMul = op({fusedMatMul_});\nexport const conv2d = op({fusedConv2d_});\nexport const depthwiseConv2d = op({fusedDepthwiseConv2d_});\n\nexport {Activation};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {TensorInfo} from '../../kernel_registry';\nimport {assert} from '../../util';\n\nexport function assertNotComplex(\n    tensor: TensorInfo|TensorInfo[], opName: string): void {\n  if (!Array.isArray(tensor)) {\n    tensor = [tensor];\n  }\n  tensor.forEach(t => {\n    if (t != null) {\n      assert(\n          t.dtype !== 'complex64',\n          () => `${opName} does not support complex64 tensors.`);\n    }\n  });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Conv2DInfo} from '../../ops/conv_util';\nimport * as ops from '../../ops/ops';\nimport {buffer} from '../../ops/ops';\nimport {TensorBuffer} from '../../tensor';\nimport {DataType, Rank, TypedArray} from '../../types';\n\nexport function pool(\n    xValues: TypedArray, xShape: number[], dtype: DataType, strides: number[],\n    convInfo: Conv2DInfo, poolType: 'max'|'avg'): TensorBuffer<Rank, DataType> {\n  const strideHeight = convInfo.strideHeight;\n  const strideWidth = convInfo.strideWidth;\n  const dilationHeight = convInfo.dilationHeight;\n  const dilationWidth = convInfo.dilationWidth;\n  const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n  const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n  const padTop = convInfo.padInfo.top;\n  const padLeft = convInfo.padInfo.left;\n\n  const initialValue =\n      (poolType === 'max' ? Number.NEGATIVE_INFINITY :\n                            Number.POSITIVE_INFINITY);\n\n  const output = ops.buffer(convInfo.outShape, dtype);\n  const outputVals = output.values;\n\n  const outputBatchStrides =\n      convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3];\n  const outputRowStrides = convInfo.outShape[2] * convInfo.outShape[3];\n  const outputColStrides = convInfo.outShape[3];\n\n  for (let b = 0; b < convInfo.batchSize; ++b) {\n    const outputBatchOffset = b * outputBatchStrides;\n    const inputBatchOffset = b * strides[0];\n    for (let d = 0; d < convInfo.inChannels; ++d) {\n      for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n        const xRCorner = yR * strideHeight - padTop;\n        const xRMin = Math.max(0, xRCorner);\n        const xRMax =\n            Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner);\n        const outputRowOffset = outputBatchOffset + yR * outputRowStrides;\n        for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n          const xCCorner = yC * strideWidth - padLeft;\n          const xCMin = Math.max(0, xCCorner);\n          const xCMax =\n              Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner);\n          let minMaxValue = initialValue;\n          let avgValue = 0;\n          let count = 0;\n          for (let xR = xRMin; xR < xRMax; xR += dilationHeight) {\n            const xROffset = inputBatchOffset + xR * strides[1];\n            for (let xC = xCMin; xC < xCMax; xC += dilationWidth) {\n              const xCOffset = xROffset + xC * strides[2];\n              const pixel = xValues[xCOffset + d];\n              if ((poolType === 'max' && pixel > minMaxValue)) {\n                minMaxValue = pixel;\n              } else if (poolType === 'avg') {\n                avgValue += pixel;\n                count++;\n              }\n            }\n            if (isNaN(minMaxValue)) {\n              break;\n            }\n          }\n          const outputOffset = outputRowOffset + yC * outputColStrides + d;\n          outputVals[outputOffset] =\n              poolType === 'avg' ? avgValue / count : minMaxValue;\n        }\n      }\n    }\n  }\n  return output;\n}\n\nexport function maxPoolPositions(\n    xValues: TypedArray, xShape: number[], dtype: DataType,\n    convInfo: Conv2DInfo, flattenPositions = false,\n    includeBatchInIndex = false): TensorBuffer<Rank, 'int32'> {\n  const maxPositions = ops.buffer(convInfo.outShape, 'int32');\n  const strideHeight = convInfo.strideHeight;\n  const strideWidth = convInfo.strideWidth;\n  const dilationHeight = convInfo.dilationHeight;\n  const dilationWidth = convInfo.dilationWidth;\n  const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n  const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n  const padTop = convInfo.padInfo.top;\n  const padLeft = convInfo.padInfo.left;\n\n  const xBuf = buffer(xShape, dtype, xValues);\n  for (let b = 0; b < convInfo.batchSize; ++b) {\n    for (let d = 0; d < convInfo.inChannels; ++d) {\n      for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n        const xRCorner = yR * strideHeight - padTop;\n        let xRMin = xRCorner;\n        while (xRMin < 0) {\n          xRMin += dilationHeight;\n        }\n        // const xRMin = Math.max(0, xRCorner);\n        const xRMax =\n            Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner);\n        for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n          const xCCorner = yC * strideWidth - padLeft;\n          let xCMin = xCCorner;\n          while (xCMin < 0) {\n            xCMin += dilationWidth;\n          }\n          const xCMax =\n              Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner);\n          let maxValue = Number.NEGATIVE_INFINITY;\n          let maxPosition = -1;\n\n          for (let xR = xRMin; xR < xRMax; xR += dilationHeight) {\n            const wR = xR - xRCorner;\n            for (let xC = xCMin; xC < xCMax; xC += dilationWidth) {\n              const wC = xC - xCCorner;\n              const pixel = xBuf.get(b, xR, xC, d);\n              if (pixel > maxValue) {\n                maxValue = pixel as number;\n                if (flattenPositions) {\n                  maxPosition = includeBatchInIndex ?\n                      ((b * convInfo.inHeight + xR) * convInfo.inWidth + xC) *\n                              convInfo.inChannels +\n                          d :\n                      (xR * convInfo.inWidth + xC) * convInfo.inChannels + d;\n                } else {\n                  maxPosition = wR * effectiveFilterWidth + wC;\n                }\n              }\n            }\n          }\n          maxPositions.set(maxPosition, b, yR, yC, d);\n        }\n      }\n    }\n  }\n  return maxPositions;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as seedrandom from 'seedrandom';\n\nimport {ENGINE} from '../../engine';\nimport {env} from '../../environment';\nimport {warn} from '../../log';\nimport * as array_ops_util from '../../ops/array_ops_util';\nimport * as axis_util from '../../ops/axis_util';\nimport * as broadcast_util from '../../ops/broadcast_util';\nimport {complex, imag, real} from '../../ops/complex_ops';\nimport * as concat_util from '../../ops/concat_util';\nimport {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util';\nimport {div} from '../../ops/div';\nimport * as erf_util from '../../ops/erf_util';\nimport {Activation, FusedBatchMatMulConfig, FusedConv2DConfig} from '../../ops/fused_util';\nimport * as gather_nd_util from '../../ops/gather_nd_util';\nimport * as ops from '../../ops/ops';\nimport {buffer, scalar, tensor, tensor4d} from '../../ops/ops';\nimport * as scatter_nd_util from '../../ops/scatter_nd_util';\nimport * as selu_util from '../../ops/selu_util';\nimport {computeFlatOffset, computeOutShape, isSliceContinous} from '../../ops/slice_util';\nimport {transpose} from '../../ops/transpose';\nimport {DataId, Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer} from '../../tensor';\nimport {BackendValues, DataType, DataValues, NumericDataType, Rank, ShapeMap, TypedArray, upcastType} from '../../types';\nimport * as util from '../../util';\nimport {getArrayFromDType, inferDtype, now, sizeFromShape} from '../../util';\nimport {BackendTimingInfo, DataStorage, EPSILON_FLOAT32, KernelBackend} from '../backend';\nimport * as backend_util from '../backend_util';\nimport * as complex_util from '../complex_util';\nimport {nonMaxSuppressionV3} from '../non_max_suppression_impl';\nimport {split} from '../split_shared';\nimport {tile} from '../tile_impl';\nimport {topkImpl} from '../topk_impl';\nimport {whereImpl} from '../where_impl';\n\nimport {assertNotComplex} from './cpu_util';\nimport {maxPoolPositions, pool} from './pool_utils';\n\nfunction mapActivation(\n    backend: MathBackendCPU, x: Tensor, activation: Activation,\n    preluActivationWeights?: Tensor): Tensor {\n  if (activation === 'linear') {\n    return backend.linear(x);\n  } else if (activation === 'relu') {\n    return backend.relu(x);\n  } else if (activation === 'elu') {\n    return backend.elu(x);\n  } else if (activation === 'relu6') {\n    return backend.relu6(x);\n  } else if (activation === 'prelu') {\n    return backend.prelu(x, preluActivationWeights);\n  }\n  throw new Error(\n      `Activation ${activation} has not been implemented for the CPU backend.`);\n}\n\nexport interface TensorData<D extends DataType> {\n  values?: BackendValues;\n  dtype: D;\n  // For complex numbers, the real and imaginary parts are stored as their own\n  // individual tensors, with a parent joining the two with the\n  // complexTensors field.\n  // TODO(smilkov): Replace Tensor with TensorInfo when you modularize ops\n  // that work with complex tensors.\n  complexTensors?: {real: Tensor, imag: Tensor};\n}\n\nexport class MathBackendCPU extends KernelBackend {\n  public blockSize = 48;\n\n  data: DataStorage<TensorData<DataType>>;\n  private firstUse = true;\n\n  constructor() {\n    super();\n    this.data = new DataStorage(this, ENGINE);\n  }\n\n  write(values: BackendValues, shape: number[], dtype: DataType): DataId {\n    if (this.firstUse) {\n      this.firstUse = false;\n      if (env().get('IS_NODE')) {\n        warn(\n            '\\n============================\\n' +\n            'Hi there 👋. Looks like you are running TensorFlow.js in ' +\n            'Node.js. To speed things up dramatically, install our node ' +\n            'backend, which binds to TensorFlow C++, by running ' +\n            'npm i @tensorflow/tfjs-node, ' +\n            'or npm i @tensorflow/tfjs-node-gpu if you have CUDA. ' +\n            'Then call require(\\'@tensorflow/tfjs-node\\'); (-gpu ' +\n            'suffix for CUDA) at the start of your program. ' +\n            'Visit https://github.com/tensorflow/tfjs-node for more details.' +\n            '\\n============================');\n      }\n    }\n    const dataId = {};\n    this.data.set(dataId, {values, dtype});\n    return dataId;\n  }\n\n  move(dataId: DataId, values: BackendValues, shape: number[], dtype: DataType):\n      void {\n    this.data.set(dataId, {values, dtype});\n  }\n\n  numDataIds(): number {\n    return this.data.numDataIds();\n  }\n\n  async read(dataId: DataId): Promise<BackendValues> {\n    return this.readSync(dataId);\n  }\n  readSync(dataId: DataId): BackendValues {\n    const {dtype, complexTensors} = this.data.get(dataId);\n    if (dtype === 'complex64') {\n      const realValues =\n          this.readSync(complexTensors.real.dataId) as Float32Array;\n      const imagValues =\n          this.readSync(complexTensors.imag.dataId) as Float32Array;\n      return complex_util.mergeRealAndImagArrays(realValues, imagValues);\n    }\n    return this.data.get(dataId).values;\n  }\n\n  private bufferSync<R extends Rank>(t: Tensor<R>): TensorBuffer<R> {\n    const data = this.readSync(t.dataId);\n    let decodedData = data as DataValues;\n    if (t.dtype === 'string') {\n      try {\n        // Decode the bytes into string.\n        decodedData = (data as Uint8Array[]).map(d => util.decodeString(d));\n      } catch {\n        throw new Error('Failed to decode encoded string bytes into utf-8');\n      }\n    }\n    return buffer(t.shape, t.dtype, decodedData) as TensorBuffer<R>;\n  }\n\n  private makeOutput<T extends Tensor>(\n      values: BackendValues, shape: number[], dtype: DataType): T {\n    const dataId = this.write(values, shape, dtype);\n    return ENGINE.makeTensorFromDataId(dataId, shape, dtype, this) as T;\n  }\n\n  disposeData(dataId: DataId): void {\n    if (this.data.has(dataId)) {\n      const {complexTensors} = this.data.get(dataId);\n      if (complexTensors != null) {\n        complexTensors.real.dispose();\n        complexTensors.imag.dispose();\n      }\n      this.data.delete(dataId);\n    }\n  }\n\n  async time(f: () => void): Promise<BackendTimingInfo> {\n    const start = now();\n    f();\n    const kernelMs = now() - start;\n    return {kernelMs};\n  }\n\n  memory() {\n    return {\n      // Unreliable due to automatic gc. The numbers above are cumulative.\n      unreliable: true,\n      reasons:\n          ['The reported memory is an upper bound. Due to automatic garbage ' +\n           'collection, the true allocated memory may be less.']\n    };\n  }\n\n  complex<T extends Tensor>(real: T, imag: T): T {\n    const result = this.makeOutput(null, real.shape, 'complex64');\n\n    const resultData = this.data.get(result.dataId);\n    // The backend owns the reference to the underlying real and imaginary\n    // clones. These will explicitly get disposed when the complex tensor is\n    // disposed.\n    resultData.complexTensors = {\n      real: ENGINE.keep(real.clone()),\n      imag: ENGINE.keep(imag.clone())\n    };\n\n    return result as T;\n  }\n  real<T extends Tensor>(input: T): T {\n    const resultData = this.data.get(input.dataId);\n    return resultData.complexTensors.real.clone() as T;\n  }\n  imag<T extends Tensor>(input: T): T {\n    const resultData = this.data.get(input.dataId);\n    return resultData.complexTensors.imag.clone() as T;\n  }\n\n  slice<T extends Tensor>(x: T, begin: number[], size: number[]): T {\n    assertNotComplex(x, 'slice');\n\n    const isContinous = isSliceContinous(x.shape, begin, size);\n    if (isContinous) {\n      const flatOffset = computeFlatOffset(begin, x.strides);\n      const length = util.sizeFromShape(size);\n      const vals = this.readSync(x.dataId) as TypedArray;\n      return tensor(\n                 vals.subarray(flatOffset, flatOffset + length), size,\n                 x.dtype) as T;\n    }\n\n    const buffer = ops.buffer(size, x.dtype);\n    const xBuf = this.bufferSync(x);\n    for (let i = 0; i < buffer.size; ++i) {\n      const loc = buffer.indexToLoc(i);\n      const xLoc = loc.map((idx, j) => idx + begin[j]);\n      buffer.values[i] = xBuf.get(...xLoc);\n    }\n    return buffer.toTensor() as T;\n  }\n\n  stridedSlice<T extends Tensor>(\n      x: T, begin: number[], end: number[], strides: number[]): T {\n    assertNotComplex(x, 'stridedSlice');\n\n    const outShape = computeOutShape(begin, end, strides);\n\n    if (outShape.some(axis => axis === 0)) {\n      return ops.tensor([], outShape) as T;\n    }\n\n    const buffer = ops.buffer(outShape, x.dtype);\n    const xBuf = this.bufferSync(x);\n    for (let i = 0; i < buffer.size; i++) {\n      const loc = buffer.indexToLoc(i);\n\n      const newLoc: number[] = new Array(loc.length);\n      for (let j = 0; j < newLoc.length; j++) {\n        newLoc[j] = loc[j] * strides[j] + begin[j];\n      }\n      buffer.set(xBuf.get(...newLoc), ...loc);\n    }\n\n    return buffer.toTensor() as T;\n  }\n\n  diag(x: Tensor): Tensor {\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    const buffer = ops.buffer([x.size, x.size], x.dtype);\n    const vals = buffer.values;\n    for (let i = 0; i < xVals.length; i++) {\n      vals[i * x.size + i] = xVals[i];\n    }\n    return buffer.toTensor();\n  }\n\n  unstack(x: Tensor, axis: number): Tensor[] {\n    const num = x.shape[axis];\n    const outShape: number[] = new Array(x.rank - 1);\n    let outIndex = 0;\n    for (let i = 0; i < x.rank; i++) {\n      if (i !== axis) {\n        outShape[outIndex++] = x.shape[i];\n      }\n    }\n\n    const begin = new Array(x.rank).fill(0);\n    const size = x.shape.slice();\n    size[axis] = 1;\n    const res = new Array(num);\n    for (let i = 0; i < res.length; i++) {\n      begin[axis] = i;\n      res[i] = this.slice(x, begin, size).reshape(outShape);\n    }\n    return res;\n  }\n\n  reverse<T extends Tensor>(x: T, axis: number[]): T {\n    assertNotComplex(x, 'reverse');\n\n    const buffer = ops.buffer(x.shape, x.dtype);\n    const xBuf = this.bufferSync(x);\n\n    for (let i = 0; i < buffer.size; i++) {\n      const outLoc = buffer.indexToLoc(i);\n      const inLoc = outLoc.slice();\n      axis.forEach(ax => inLoc[ax] = x.shape[ax] - 1 - inLoc[ax]);\n      buffer.set(xBuf.get(...inLoc), ...outLoc);\n    }\n\n    return buffer.toTensor() as T;\n  }\n\n  concat(tensors: Tensor[], axis: number): Tensor {\n    if (tensors[0].dtype === 'complex64') {\n      const reals = tensors.map((t) => real(t));\n      const imags = tensors.map((t) => imag(t));\n      return complex(this.concat(reals, axis), this.concat(imags, axis));\n    }\n    const tensors2D = tensors.map(t => {\n      const innerSize = util.sizeFromShape(t.shape.slice(axis));\n      return t.as2D(-1, innerSize);\n    });\n    const outShape =\n        concat_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis */);\n    const values =\n        ops.buffer(outShape as [number, number], tensors[0].dtype as 'float32')\n            .values;\n    if (tensors2D[0].shape[0] === 1) {\n      // Use built-in TypedArray.set() method for speed.\n      let offset = 0;\n      tensors2D.forEach(t => {\n        values.set(this.readSync(t.dataId) as TypedArray, offset);\n        offset += t.size;\n      });\n    } else {\n      let colOffset = 0;\n      tensors2D.forEach(t => {\n        const tVals = this.readSync(t.dataId) as TypedArray;\n        let tIdx = 0;\n        for (let row = 0; row < t.shape[0]; ++row) {\n          const resIdx = row * outShape[1] + colOffset;\n          for (let col = 0; col < t.shape[1]; ++col) {\n            values[resIdx + col] = tVals[tIdx++];\n          }\n        }\n        colOffset += t.shape[1];\n      });\n    }\n    const finalOutShape =\n        concat_util.computeOutShape(tensors.map(t => t.shape), axis);\n    return tensor(values, finalOutShape, tensors[0].dtype);\n  }\n\n  neg<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'neg');\n\n    return this.multiply(ops.scalar(-1), x) as T;\n  }\n\n  add(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64' || b.dtype === 'complex64') {\n      return this.broadcastedBinaryComplexOp(\n          a.cast('complex64'), b.cast('complex64'),\n          (aReal, aImag, bReal, bImag) => {\n            return {real: aReal + bReal, imag: aImag + bImag};\n          });\n    }\n\n    return this.broadcastedBinaryOp(\n        a, b, upcastType(a.dtype, b.dtype),\n        (aValue, bValue) => aValue + bValue);\n  }\n\n  addN<T extends Tensor>(tensors: T[]): T {\n    assertNotComplex(tensors, 'addN');\n\n    const vals = tensors.map(t => this.readSync(t.dataId) as TypedArray);\n    const result = ops.buffer(tensors[0].shape, tensors[0].dtype as 'float32');\n    const resultVals = result.values;\n    for (let i = 0; i < tensors.length; i++) {\n      const currVals = vals[i];\n      for (let j = 0; j < resultVals.length; j++) {\n        resultVals[j] += currVals[j];\n      }\n    }\n    return result.toTensor() as T;\n  }\n\n  softmax<T extends Tensor>(logits: T, dim: number): T {\n    const axes = util.parseAxisParam([dim], logits.shape);\n    const maxLogit = this.max(logits, axes);\n    const expandedShape = axis_util.expandShapeToKeepDim(maxLogit.shape, axes);\n    const a = this.subtract(logits, maxLogit.reshape(expandedShape));\n    const b = this.exp(a);\n    const sumExp = this.sum(b, axes).reshape(expandedShape);\n\n    // TODO(annxingyuan): Call divImpl rather than op as part of softmax kernel\n    // modularization.\n    return div(b, sumExp);\n  }\n\n  subtract(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64' || b.dtype === 'complex64') {\n      return this.broadcastedBinaryComplexOp(\n          a.cast('complex64'), b.cast('complex64'),\n          (aReal, aImag, bReal, bImag) => {\n            return {real: aReal - bReal, imag: aImag - bImag};\n          });\n    }\n\n    return this.broadcastedBinaryOp(\n        a, b, upcastType(a.dtype, b.dtype),\n        (aValue, bValue) => aValue - bValue);\n  }\n\n  pow<T extends Tensor>(a: T, b: Tensor): T {\n    assertNotComplex([a, b], 'pow');\n\n    return this.broadcastedBinaryOp(\n               a, b, a.dtype, (aValue, bValue) => Math.pow(aValue, bValue)) as\n        T;\n  }\n\n  batchMatMul(\n      a: Tensor3D, b: Tensor3D, transposeA: boolean,\n      transposeB: boolean): Tensor3D {\n    assertNotComplex([a, b], 'matMul');\n\n    const sharedDim = transposeA ? a.shape[1] : a.shape[2];\n    const leftDim = transposeA ? a.shape[2] : a.shape[1];\n    const rightDim = transposeB ? b.shape[1] : b.shape[2];\n    const batchDim = a.shape[0];\n\n    const aValues = this.readSync(a.dataId) as TypedArray;\n    const bValues = this.readSync(b.dataId) as TypedArray;\n    const [aBatch, aOuterStep, aInnerStep] = transposeA ?\n        [a.strides[0], 1, a.strides[1]] :\n        [a.strides[0], a.strides[1], 1];\n    const [bInnerStep, bOuterStep, bBatch] = transposeB ?\n        [1, b.strides[1], b.strides[0]] :\n        [b.strides[1], 1, b.strides[0]];\n\n    const size = leftDim * rightDim;\n    const result = buffer([batchDim, leftDim, rightDim], a.dtype);\n    const resVals = result.values as TypedArray;\n    const blockSize = this.blockSize;\n\n    for (let b = 0; b < batchDim; b++) {\n      for (let i0 = 0; i0 < leftDim; i0 += blockSize) {\n        for (let j0 = 0; j0 < rightDim; j0 += blockSize) {\n          for (let k0 = 0; k0 < sharedDim; k0 += blockSize) {\n            // for when blockSize doesn't evenly divide the input\n            const iBlock = Math.min(i0 + blockSize, leftDim);\n            const jBlock = Math.min(j0 + blockSize, rightDim);\n            const kBlock = Math.min(k0 + blockSize, sharedDim);\n\n            for (let i = i0; i < iBlock; i++) {\n              for (let j = j0; j < jBlock; j++) {\n                let sum = 0.0;\n\n                for (let k = k0; k < kBlock; k++) {\n                  sum += aValues[b * aBatch + i * aOuterStep + k * aInnerStep] *\n                      bValues[k * bInnerStep + j * bOuterStep + b * bBatch];\n                }\n                resVals[b * size + (i * rightDim + j)] += sum;\n              }\n            }\n          }\n        }\n      }\n    }\n    return result.toTensor() as Tensor3D;\n  }\n\n  fusedBatchMatMul(\n      {a, b, transposeA, transposeB, bias, activation, preluActivationWeights}:\n          FusedBatchMatMulConfig): Tensor3D {\n    let result = this.batchMatMul(a, b, transposeA, transposeB);\n    if (bias) {\n      result = this.add(result, bias) as Tensor3D;\n    }\n    if (activation) {\n      result =\n          mapActivation(this, result, activation, preluActivationWeights) as\n          Tensor3D;\n    }\n    return result;\n  }\n\n  multiply(a: Tensor, b: Tensor): Tensor {\n    if (a.dtype === 'complex64' || b.dtype === 'complex64') {\n      return this.broadcastedBinaryComplexOp(\n          a.cast('complex64'), b.cast('complex64'),\n          (aReal, aImag, bReal, bImag) => {\n            return {\n              real: aReal * bReal - aImag * bImag,\n              imag: aReal * bImag + aImag * bReal\n            };\n          });\n    }\n\n    return this.broadcastedBinaryOp(\n        a, b, upcastType(a.dtype, b.dtype),\n        (aValue, bValue) => aValue * bValue);\n  }\n\n  floorDiv(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'floorDiv');\n\n    const op = (a: number, b: number) => Math.floor(a / b);\n    const outputDtype = 'int32';\n    return this.broadcastedBinaryOp(a, b, outputDtype, op);\n  }\n\n  sum(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'sum');\n\n    axis_util.assertAxesAreInnerMostDims('sum', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const resultDtype = upcastType(x.dtype, 'int32');\n    const result = ops.zeros(outShape, resultDtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let sum = 0;\n      for (let j = 0; j < reduceSize; ++j) {\n        sum += aVals[offset + j];\n      }\n      vals[i] = sum;\n    }\n    return result;\n  }\n\n  prod(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'sum');\n\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const resultDtype = upcastType(x.dtype, 'int32');\n    const result = ops.zeros(outShape, resultDtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let prod = 1;\n      for (let j = 0; j < reduceSize; ++j) {\n        prod *= aVals[offset + j];\n      }\n      vals[i] = prod;\n    }\n    return result;\n  }\n\n  unsortedSegmentSum<T extends Tensor>(\n      x: T, segmentIds: Tensor1D, numSegments: number): Tensor {\n    assertNotComplex(x, 'unsortedSegmentSum');\n\n    const res = [];\n\n    // Reshape the segment id's so that they can be broadcast with\n    // x. The new shape should be [segmentIds.shape, 1, ..., 1]\n    const numIters = x.rank - segmentIds.rank;\n    for (let i = 0; i < numIters; ++i) {\n      segmentIds = segmentIds.expandDims(i + 1);\n    }\n\n    for (let i = 0; i < numSegments; ++i) {\n      const segmentId = ops.scalar(i, 'int32');\n      const mask = ops.equal(segmentId, segmentIds).asType('float32');\n      const sum = mask.mul(x).sum(0);\n      res.push(sum);\n    }\n\n    return ops.stack(res);\n  }\n\n  argMin(x: Tensor, axis: number): Tensor {\n    assertNotComplex(x, 'argMin');\n\n    const axes = [axis];\n    axis_util.assertAxesAreInnerMostDims('argMin', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, 'int32');\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let min = aVals[offset];\n      let minIndex = 0;\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        if (value < min) {\n          min = value;\n          minIndex = j;\n        }\n      }\n      vals[i] = minIndex;\n    }\n    return result;\n  }\n\n  argMax(x: Tensor, axis: number): Tensor {\n    assertNotComplex(x, 'argMax');\n\n    const axes = [axis];\n    axis_util.assertAxesAreInnerMostDims('argMax', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, 'int32');\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let max = aVals[offset];\n      let maxIndex = 0;\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        if (value > max) {\n          max = value;\n          maxIndex = j;\n        }\n      }\n      vals[i] = maxIndex;\n    }\n    return result;\n  }\n\n  cumsum(x: Tensor, axis: number, exclusive: boolean, reverse: boolean):\n      Tensor {\n    assertNotComplex(x, 'cumsum');\n\n    if (axis !== x.rank - 1) {\n      throw new Error(\n          `backend.cumsum in CPU expects an inner-most axis=${x.rank - 1} ` +\n          `but got axis=${axis}`);\n    }\n    const resultDtype = upcastType(x.dtype, 'int32');\n    const result = ops.zeros(x.shape, resultDtype);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    const finalDim = x.shape[x.rank - 1];\n    const indexAdjuster = reverse ?\n        (i: number, j: number) => i + finalDim - j - 1 :\n        (i: number, j: number) => i + j;\n    for (let i = 0; i < aVals.length; i += finalDim) {\n      for (let j = 0; j < finalDim; j++) {\n        const idx = indexAdjuster(i, j);\n        if (j === 0) {\n          vals[idx] = exclusive ? 0 : aVals[idx];\n        } else {\n          const prevIdx = indexAdjuster(i, j - 1);\n          vals[idx] = exclusive ? aVals[prevIdx] + vals[prevIdx] :\n                                  aVals[idx] + vals[prevIdx];\n        }\n      }\n    }\n    return result;\n  }\n\n  equal(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'equal');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal === bVal) ? 1 : 0;\n    });\n  }\n\n  notEqual(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'notEqual');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal !== bVal) ? 1 : 0;\n    });\n  }\n\n  less(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'less');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal < bVal) ? 1 : 0;\n    });\n  }\n\n  lessEqual(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'lessEqual');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal <= bVal) ? 1 : 0;\n    });\n  }\n\n  greater(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'greater');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal > bVal) ? 1 : 0;\n    });\n  }\n\n  greaterEqual(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'greaterEqual');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return (aVal >= bVal) ? 1 : 0;\n    });\n  }\n\n  logicalNot<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'logicalNot');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Uint8Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = values[i] ? 0 : 1;\n    }\n    return this.makeOutput(newValues, x.shape, 'bool');\n  }\n\n  logicalAnd(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'logicalAnd');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return aVal && bVal;\n    });\n  }\n\n  logicalOr(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'logicalOr');\n\n    return this.broadcastedBinaryOp(a, b, 'bool', (aVal, bVal) => {\n      return aVal || bVal;\n    });\n  }\n\n  select(condition: Tensor, a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([condition, a, b], 'select');\n\n    const values = this.readSync(condition.dataId) as TypedArray;\n    const aValues = this.readSync(a.dataId) as TypedArray;\n    const bValues = this.readSync(b.dataId) as TypedArray;\n    const result = ops.zeros(a.shape, upcastType(a.dtype, b.dtype));\n    const newValues = this.readSync(result.dataId) as TypedArray;\n    let index = 0;\n    const offset = condition.rank === 0 || condition.rank > 1 || a.rank === 1 ?\n        1 :\n        util.sizeFromShape(a.shape.slice(1));\n\n    for (let i = 0; i < values.length; i++) {\n      for (let j = 0; j < offset; j++) {\n        if (values[i] === 1) {\n          newValues[index++] = aValues[i];\n        } else {\n          newValues[index++] = bValues[i];\n        }\n      }\n    }\n\n    return result;\n  }\n\n  where(condition: Tensor): Tensor2D {\n    assertNotComplex([condition], 'where');\n\n    const condVals = this.readSync(condition.dataId) as TypedArray;\n    return whereImpl(condition.shape, condVals);\n  }\n\n  topk<T extends Tensor>(x: T, k: number, sorted: boolean): [T, T] {\n    assertNotComplex(x, 'topk');\n\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    return topkImpl(xVals, x.shape, x.dtype as NumericDataType, k, sorted);\n  }\n\n  min(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'min');\n\n    axis_util.assertAxesAreInnerMostDims('min', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, x.dtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let min = aVals[offset];\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        if (value < min) {\n          min = value;\n        }\n      }\n      vals[i] = min;\n    }\n    return result;\n  }\n\n  minimum(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'minimum');\n\n    return this.broadcastedBinaryOp(\n        a, b, a.dtype, (aVal, bVal) => Math.min(aVal, bVal));\n  }\n\n  mod(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'mod');\n\n    return this.broadcastedBinaryOp(a, b, a.dtype, (aVal, bVal) => {\n      const rem = aVal % bVal;\n      if ((aVal < 0 && bVal < 0) || (aVal >= 0 && bVal >= 0)) {\n        return rem;\n      } else {\n        return (rem + bVal) % bVal;\n      }\n    });\n  }\n\n  max(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'max');\n\n    axis_util.assertAxesAreInnerMostDims('max', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, x.dtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let max = aVals[offset];\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        if (value > max) {\n          max = value;\n        }\n      }\n      vals[i] = max;\n    }\n    return result;\n  }\n\n  maximum(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'maximum');\n\n    return this.broadcastedBinaryOp(\n        a, b, a.dtype, (aVal, bVal) => Math.max(aVal, bVal));\n  }\n\n  all(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'all');\n\n    axis_util.assertAxesAreInnerMostDims('all', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, x.dtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let all = aVals[offset];\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        all = all && value;\n      }\n      vals[i] = all;\n    }\n    return result;\n  }\n\n  any(x: Tensor, axes: number[]): Tensor {\n    assertNotComplex(x, 'any');\n\n    axis_util.assertAxesAreInnerMostDims('any', axes, x.rank);\n    const [outShape, reduceShape] =\n        axis_util.computeOutAndReduceShapes(x.shape, axes);\n    const result = ops.zeros(outShape, x.dtype);\n    const reduceSize = util.sizeFromShape(reduceShape);\n    const vals = this.readSync(result.dataId) as TypedArray;\n\n    const aVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < vals.length; ++i) {\n      const offset = i * reduceSize;\n      let anyVal = aVals[offset];\n      for (let j = 0; j < reduceSize; ++j) {\n        const value = aVals[offset + j];\n        anyVal = anyVal || value;\n      }\n      vals[i] = anyVal;\n    }\n    return result;\n  }\n\n  squaredDifference(a: Tensor, b: Tensor): Tensor {\n    assertNotComplex([a, b], 'squaredDifference');\n\n    return this.broadcastedBinaryOp(a, b, a.dtype, (aVal, bVal) => {\n      const diff = aVal - bVal;\n      return diff * diff;\n    });\n  }\n\n  ceil<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'ceil');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = Math.ceil(values[i]);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  floor<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'floor');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = Math.floor(values[i]);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  sign<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'x');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      if (values[i] < 0) {\n        newValues[i] = -1;\n      } else if (values[i] > 0) {\n        newValues[i] = 1;\n      } else {\n        newValues[i] = 0;\n      }\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  isNaN<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'x');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Uint8Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      if (Number.isNaN(values[i])) {\n        newValues[i] = 1;\n      }\n    }\n    return this.makeOutput(newValues, x.shape, 'bool');\n  }\n\n  isInf<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'x');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Uint8Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      if (Math.abs(values[i]) === Infinity) {\n        newValues[i] = 1;\n      }\n    }\n    return this.makeOutput(newValues, x.shape, 'bool');\n  }\n\n  isFinite<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'x');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Uint8Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      if (Number.isFinite(values[i])) {\n        newValues[i] = 1;\n      }\n    }\n    return this.makeOutput(newValues, x.shape, 'bool');\n  }\n\n  round<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'round');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      // The algorithm is based on banker's rounding.\n      const base = Math.floor(values[i]);\n      if (values[i] - base < 0.5) {\n        newValues[i] = Math.floor(values[i]);\n      } else if (values[i] - base > 0.5) {\n        newValues[i] = Math.ceil(values[i]);\n      } else {\n        if (base % 2.0 === 0.0) {\n          newValues[i] = base;\n        } else {\n          newValues[i] = base + 1.0;\n        }\n      }\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  exp<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'exp');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = Math.exp(values[i]);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  expm1<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'expm1');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = Math.expm1(values[i]);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  log<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'log');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      newValues[i] = Math.log(value);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  log1p<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'log1p');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      newValues[i] = Math.log1p(value);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  sqrt<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'sqrt');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      newValues[i] = Math.sqrt(value);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  rsqrt<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'rsqrt');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      newValues[i] = 1 / Math.sqrt(value);\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  reciprocal<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'reciprocal');\n\n    const values = this.readSync(x.dataId) as TypedArray;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      newValues[i] = 1 / values[i];\n    }\n    return this.makeOutput(newValues, x.shape, 'float32');\n  }\n\n  linear<T extends Tensor>(x: T): T {\n    return x;\n  }\n\n  relu<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'relu');\n\n    const res = ops.zeros(x.shape, x.dtype);\n    const resVals = this.readSync(res.dataId) as TypedArray;\n    const inVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < inVals.length; ++i) {\n      resVals[i] = Math.max(0, inVals[i]);\n    }\n    return res as T;\n  }\n\n  relu6<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'relu');\n\n    const res = ops.zeros(x.shape, x.dtype);\n    const resVals = this.readSync(res.dataId) as TypedArray;\n    const inVals = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < inVals.length; ++i) {\n      resVals[i] = Math.min(Math.max(0, inVals[i]), 6);\n    }\n    return res as T;\n  }\n\n  prelu<T extends Tensor>(x: T, a: T): T {\n    assertNotComplex([x, a], 'prelu');\n\n    return this.broadcastedBinaryOp(\n               x, a, x.dtype,\n               (xValue, aValue) => xValue < 0 ? aValue * xValue : xValue) as T;\n  }\n\n  elu<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'elu');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      const v = values[i];\n      if (v >= 0) {\n        resultValues[i] = v;\n      } else {\n        resultValues[i] = (Math.exp(v) - 1);\n      }\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  eluDer<T extends Tensor>(dy: T, y: T): T {\n    assertNotComplex([dy, y], 'eluDer');\n\n    const resultValues = new Float32Array(y.size);\n    const values = this.readSync(y.dataId) as TypedArray;\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      const v = values[i];\n      if (v >= 1) {\n        resultValues[i] = dyValues[i];\n      } else {\n        resultValues[i] = dyValues[i] * (v + 1);\n      }\n    }\n    return this.makeOutput(resultValues, y.shape, 'float32');\n  }\n\n  selu<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'selu');\n\n    // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n    // see: https://arxiv.org/abs/1706.02515\n    const scaleAlpha = selu_util.SELU_SCALEALPHA;\n    const scale = selu_util.SELU_SCALE;\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      const v = values[i];\n      if (v >= 0) {\n        resultValues[i] = scale * v;\n      } else {\n        resultValues[i] = scaleAlpha * (Math.exp(v) - 1);\n      }\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  clip<T extends Tensor>(x: T, min: number, max: number): T {\n    assertNotComplex(x, 'clip');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      const v = values[i];\n      resultValues[i] = v > max ? max : (v < min ? min : v);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  abs<T extends Tensor>(x: T): T {\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.abs(values[i]);\n    }\n\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  complexAbs<T extends Tensor>(x: T): T {\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n\n    for (let i = 0; i < x.size; ++i) {\n      const real = values[i * 2];\n      const imag = values[i * 2 + 1];\n      resultValues[i] = Math.hypot(real, imag);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  int<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'int');\n\n    const resultValues = new Int32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = values[i];\n    }\n    return this.makeOutput(resultValues, x.shape, 'int32');\n  }\n\n  sigmoid<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'sigmoid');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = 1 / (1 + Math.exp(-values[i]));\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  softplus<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'softplus');\n\n    // mirrors the implementation of tf.nn.softplus: https://goo.gl/vkcvwX\n\n    // epsilon is the difference between 1.0 and the next representable float.\n    // For a single precision 32 bit float this should be 2^-23, see:\n    // https://math.byu.edu/~schow/work/IEEEFloatingPoint.htm\n    const epsilon = 1.1920928955078125e-7;\n    const threshold = Math.log(epsilon) + 2.0;\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n\n    for (let i = 0; i < values.length; ++i) {\n      // Value above which exp(x) may overflow, but softplus(x) == x\n      // is within machine epsilon.\n      const tooLarge = values[i] > -threshold;\n\n      // Value below which exp(x) may underflow, but softplus(x) == exp(x)\n      // is within machine epsilon.\n      const tooSmall = values[i] < threshold;\n\n      const expX = Math.exp(values[i]);\n      let result;\n\n      if (tooSmall) {\n        result = expX;\n      } else if (tooLarge) {\n        result = values[i];\n      } else {\n        result = Math.log(1.0 + expX);\n      }\n      resultValues[i] = result;\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  sin<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'sin');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.sin(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  cos<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'cos');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.cos(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  tan<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'tan');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.tan(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  asin<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'asin');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.asin(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  acos<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'acos');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.acos(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  atan<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'atan');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.atan(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  atan2<T extends Tensor>(a: T, b: T): T {\n    assertNotComplex([a, b], 'atan2');\n\n    return this.broadcastedBinaryOp(\n               a, b, a.dtype, (aValue, bValue) => Math.atan2(aValue, bValue)) as\n        T;\n  }\n\n  sinh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'sinh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.sinh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  cosh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'cosh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.cosh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  tanh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'tanh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = util.tanh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  asinh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'asinh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.asinh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  acosh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'acosh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.acosh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  atanh<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'atanh');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      resultValues[i] = Math.atanh(values[i]);\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  erf<T extends Tensor>(x: T): T {\n    assertNotComplex(x, 'erf');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    const p = erf_util.ERF_P;\n    const a1 = erf_util.ERF_A1;\n    const a2 = erf_util.ERF_A2;\n    const a3 = erf_util.ERF_A3;\n    const a4 = erf_util.ERF_A4;\n    const a5 = erf_util.ERF_A5;\n    for (let i = 0; i < values.length; ++i) {\n      const sign = Math.sign(values[i]);\n      const v = Math.abs(values[i]);\n      const t = 1.0 / (1.0 + p * v);\n      resultValues[i] = sign *\n          (1.0 -\n           (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t *\n               Math.exp(-v * v));\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  step<T extends Tensor>(x: T, alpha = 0): T {\n    assertNotComplex(x, 'step');\n\n    const resultValues = new Float32Array(x.size);\n    const values = this.readSync(x.dataId) as TypedArray;\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      if (isNaN(value)) {\n        resultValues[i] = NaN;\n      } else {\n        resultValues[i] = value > 0 ? 1 : alpha;\n      }\n    }\n    return this.makeOutput(resultValues, x.shape, 'float32');\n  }\n\n  fusedConv2d(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    let result = this.conv2d(input, filter, convInfo);\n\n    if (bias) {\n      result = this.add(result, bias) as Tensor4D;\n    }\n    if (activation) {\n      result =\n          mapActivation(this, result, activation, preluActivationWeights) as\n          Tensor4D;\n    }\n    return result;\n  }\n\n  conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    assertNotComplex([x, filter], 'conv2d');\n\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const padLeft = convInfo.padInfo.left;\n    const padTop = convInfo.padInfo.top;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n\n    const y = ops.buffer(convInfo.outShape, x.dtype as 'float32');\n\n    const xBatchStride = x.strides[0];\n    const xRowStride = isChannelsLast ? x.strides[1] : x.strides[2];\n    const xColStride = isChannelsLast ? x.strides[2] : 1;\n    const xChannelStride = isChannelsLast ? 1 : x.strides[1];\n    const yBatchStride = y.strides[0];\n    const yRowStride = isChannelsLast ? y.strides[1] : y.strides[2];\n    const yColStride = isChannelsLast ? y.strides[2] : 1;\n    const yChannelStride = isChannelsLast ? 1 : y.strides[1];\n\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    const wVals = this.readSync(filter.dataId) as TypedArray;\n    const yVals = y.values;\n\n    for (let b = 0; b < convInfo.batchSize; ++b) {\n      const xOffset1 = b * xBatchStride;\n      const yOffset1 = b * yBatchStride;\n      for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n        const yOffset2 = yOffset1 + yR * yRowStride;\n        const xRCorner = yR * convInfo.strideHeight - padTop;\n        for (let wR = 0; wR < filterHeight; wR++) {\n          const xR = xRCorner + wR * dilationHeight;\n          if (xR < 0 || xR >= convInfo.inHeight) {\n            continue;\n          }\n          const wOffset1 = wR * filter.strides[0];\n          const xOffset2 = xOffset1 + xR * xRowStride;\n          for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n            const yOffset3 = yOffset2 + yC * yColStride;\n            const xCCorner = yC * convInfo.strideWidth - padLeft;\n            for (let wC = 0; wC < filterWidth; wC++) {\n              const xC = xCCorner + wC * dilationWidth;\n              if (xC < 0 || xC >= convInfo.inWidth) {\n                continue;\n              }\n              const wOffset2 = wOffset1 + wC * filter.strides[1];\n              const xOffset3 = xOffset2 + xC * xColStride;\n              let wOffset3 = wOffset2;\n              for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n                const xVal = xVals[xOffset3 + d1 * xChannelStride];\n                for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n                  yVals[yOffset3 + d2 * yChannelStride] +=\n                      xVal * wVals[wOffset3 + d2];\n                }\n                wOffset3 += convInfo.outChannels;\n              }\n            }\n          }\n        }\n      }\n    }\n    return y.toTensor() as Tensor4D;\n  }\n\n  conv3d(x: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const padFront = convInfo.padInfo.front;\n    const padLeft = convInfo.padInfo.left;\n    const padTop = convInfo.padInfo.top;\n    const y = ops.buffer<Rank.R5>(convInfo.outShape, x.dtype as 'float32');\n\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    const wVals = this.readSync(filter.dataId) as TypedArray;\n    const yVals = y.values;\n\n    for (let b = 0; b < convInfo.batchSize; ++b) {\n      const xOffset1 = b * x.strides[0];\n      const yOffset1 = b * y.strides[0];\n      for (let yF = 0; yF < convInfo.outDepth; ++yF) {\n        const yOffset2 = yOffset1 + yF * y.strides[1];\n        const xFCorner = yF * convInfo.strideDepth - padFront;\n        for (let wF = 0; wF < filterDepth; wF++) {\n          const xF = xFCorner + wF * dilationDepth;\n          if (xF < 0 || xF >= convInfo.inDepth) {\n            continue;\n          }\n          const wOffset1 = wF * filter.strides[0];\n          const xOffset2 = xOffset1 + xF * x.strides[1];\n\n          for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n            const yOffset3 = yOffset2 + yR * y.strides[2];\n            const xRCorner = yR * convInfo.strideHeight - padTop;\n            for (let wR = 0; wR < filterHeight; wR++) {\n              const xR = xRCorner + wR * dilationHeight;\n              if (xR < 0 || xR >= convInfo.inHeight) {\n                continue;\n              }\n              const wOffset2 = wOffset1 + wR * filter.strides[1];\n              const xOffset3 = xOffset2 + xR * x.strides[2];\n              for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n                const yOffset4 = yOffset3 + yC * convInfo.outChannels;\n                const xCCorner = yC * convInfo.strideWidth - padLeft;\n                for (let wC = 0; wC < filterWidth; wC++) {\n                  const xC = xCCorner + wC * dilationWidth;\n                  if (xC < 0 || xC >= convInfo.inWidth) {\n                    continue;\n                  }\n                  const wOffset3 = wOffset2 + wC * filter.strides[2];\n                  const xOffset4 = xOffset3 + xC * convInfo.inChannels;\n                  let wOffset4 = wOffset3;\n                  for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n                    const xVal = xVals[xOffset4 + d1];\n                    for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n                      yVals[yOffset4 + d2] += xVal * wVals[wOffset4 + d2];\n                    }\n                    wOffset4 += convInfo.outChannels;\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return y.toTensor();\n  }\n\n  conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    assertNotComplex([dy, filter], 'conv2dDerInput');\n\n    const dx = ops.buffer<Rank.R4>(convInfo.inShape, 'float32');\n    const dxValues = dx.values;\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    const fltValues = this.readSync(filter.dataId) as TypedArray;\n    const [fltS0, fltS1, fltS2] = filter.strides;\n    const {\n      batchSize,\n      filterHeight,\n      filterWidth,\n      inChannels,\n      inHeight,\n      inWidth,\n      outChannels,\n      outHeight,\n      outWidth,\n      strideHeight,\n      strideWidth,\n      dataFormat\n    } = convInfo;\n    const topPad = filterHeight - 1 - convInfo.padInfo.top;\n    const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n\n    const isChannelsLast = dataFormat === 'channelsLast';\n    const xBatchStride = dx.strides[0];\n    const xRowStride = isChannelsLast ? dx.strides[1] : dx.strides[2];\n    const xColStride = isChannelsLast ? dx.strides[2] : 1;\n    const xChannelStride = isChannelsLast ? 1 : dx.strides[1];\n    const yBatchStride = dy.strides[0];\n    const yRowStride = isChannelsLast ? dy.strides[1] : dy.strides[2];\n    const yColStride = isChannelsLast ? dy.strides[2] : 1;\n    const yChannelStride = isChannelsLast ? 1 : dy.strides[1];\n\n    for (let b = 0; b < batchSize; ++b) {\n      for (let d1 = 0; d1 < inChannels; ++d1) {\n        for (let xR = 0; xR < inHeight; ++xR) {\n          const xRCorner = xR - topPad;\n          const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n          const yRMax =\n              Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n\n          for (let xC = 0; xC < inWidth; ++xC) {\n            const xCCorner = xC - leftPad;\n            const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n            const yCMax =\n                Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n\n            let dotProd = 0;\n            for (let yR = xRMin; yR < yRMax; ++yR) {\n              const wR = yR * strideHeight - xRCorner;\n\n              for (let yC = xCMin; yC < yCMax; ++yC) {\n                const wC = yC * strideWidth - xCCorner;\n                const dyOffset =\n                    yBatchStride * b + yRowStride * yR + yColStride * yC;\n                const fltOffset = fltS0 * (filterHeight - 1 - wR) +\n                    fltS1 * (filterWidth - 1 - wC) + fltS2 * d1;\n\n                for (let d2 = 0; d2 < outChannels; ++d2) {\n                  const pixel = dyValues[dyOffset + yChannelStride * d2];\n                  const weight = fltValues[fltOffset + d2];\n                  dotProd += pixel * weight;\n                }\n              }\n            }\n            const dxOffset = xBatchStride * b + xRowStride * xR +\n                xColStride * xC + xChannelStride * d1;\n            dxValues[dxOffset] = dotProd;\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  conv3dDerInput(dy: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo):\n      Tensor5D {\n    const dx = ops.buffer<Rank.R5>(convInfo.inShape, 'float32');\n    const dxValues = dx.values;\n    const [dxS0, dxS1, dxS2, dxS3] = dx.strides;\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    const [dyS0, dyS1, dyS2, dyS3] = dy.strides;\n    const fltValues = this.readSync(filter.dataId) as TypedArray;\n    const [fltS0, fltS1, fltS2, fltS3] = filter.strides;\n    const {\n      batchSize,\n      filterDepth,\n      filterHeight,\n      filterWidth,\n      inChannels,\n      inDepth,\n      inHeight,\n      inWidth,\n      outChannels,\n      outDepth,\n      outHeight,\n      outWidth,\n      strideDepth,\n      strideHeight,\n      strideWidth\n    } = convInfo;\n    const frontPad = filterDepth - 1 - convInfo.padInfo.front;\n    const topPad = filterHeight - 1 - convInfo.padInfo.top;\n    const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n\n    for (let b = 0; b < batchSize; ++b) {\n      for (let d1 = 0; d1 < inChannels; ++d1) {\n        // Frames of depth\n        for (let xF = 0; xF < inDepth; ++xF) {\n          const xFCorner = xF - frontPad;\n          const xFMin = Math.max(0, Math.ceil(xFCorner / strideDepth));\n          const yFMax =\n              Math.min(outDepth, (filterDepth + xFCorner) / strideDepth);\n\n          // Rows as per standard 2d matrix notation\n          for (let xR = 0; xR < inHeight; ++xR) {\n            const xRCorner = xR - topPad;\n            const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n            const yRMax =\n                Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n            // Columns as per standard 2d matrix notation\n            for (let xC = 0; xC < inWidth; ++xC) {\n              const xCCorner = xC - leftPad;\n              const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n              const yCMax =\n                  Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n\n              let dotProd = 0;\n              for (let yF = xFMin; yF < yFMax; ++yF) {\n                const wF = yF * strideDepth - xFCorner;\n\n                for (let yR = xRMin; yR < yRMax; ++yR) {\n                  const wR = yR * strideHeight - xRCorner;\n\n                  for (let yC = xCMin; yC < yCMax; ++yC) {\n                    const wC = yC * strideWidth - xCCorner;\n                    const dyOffset =\n                        dyS0 * b + dyS1 * yF + dyS2 * yR + dyS3 * yC;\n                    const fltOffset = fltS0 * (filterDepth - 1 - wF) +\n                        fltS1 * (filterHeight - 1 - wR) +\n                        fltS2 * (filterWidth - 1 - wC) + fltS3 * d1;\n\n                    for (let d2 = 0; d2 < outChannels; ++d2) {\n                      const pixel = dyValues[dyOffset + d2];\n                      const weight = fltValues[fltOffset + d2];\n                      dotProd += pixel * weight;\n                    }\n                  }\n                }\n              }\n              dxValues[dxS0 * b + dxS1 * xF + dxS2 * xR + dxS3 * xC + d1] =\n                  dotProd;\n            }\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    assertNotComplex([x, dy], 'conv2dDerFilter');\n\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n    const dW = ops.buffer<Rank.R4>(convInfo.filterShape, 'float32');\n\n    const leftPad = convInfo.padInfo.left;\n    const topPad = convInfo.padInfo.top;\n    const xBuf = this.bufferSync(x);\n    const dyBuf = this.bufferSync(dy);\n    for (let wR = 0; wR < filterHeight; ++wR) {\n      const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n      const yRMax = Math.min(\n          convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight);\n\n      for (let wC = 0; wC < filterWidth; ++wC) {\n        const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n        const yCMax = Math.min(\n            convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth);\n\n        for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n          for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n            // Need to convolve.\n            let dotProd = 0;\n            for (let b = 0; b < convInfo.batchSize; ++b) {\n              for (let yR = yRMin; yR < yRMax; ++yR) {\n                const xR = wR + yR * strideHeight - topPad;\n                for (let yC = yCMin; yC < yCMax; ++yC) {\n                  const xC = wC + yC * strideWidth - leftPad;\n                  if (isChannelsLast) {\n                    dotProd +=\n                        xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2);\n                  } else {\n                    dotProd +=\n                        xBuf.get(b, d1, xR, xC) * dyBuf.get(b, d2, yR, yC);\n                  }\n                }\n              }\n            }\n            dW.set(dotProd, wR, wC, d1, d2);\n          }\n        }\n      }\n    }\n    return dW.toTensor();\n  }\n\n  conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n\n    const dw = ops.buffer<Rank.R5>(convInfo.filterShape, 'float32');\n    const dwValues = dw.values;\n    const [dwS0, dwS1, dwS2, dwS3] = dw.strides;\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    const [dyS0, dyS1, dyS2, dyS3] = dy.strides;\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const [xS0, xS1, xS2, xS3] = x.strides;\n\n    const frontPad = convInfo.padInfo.front;\n    const leftPad = convInfo.padInfo.left;\n    const topPad = convInfo.padInfo.top;\n\n    for (let wF = 0; wF < filterDepth; ++wF) {\n      const yFMin = Math.max(0, Math.ceil((frontPad - wF) / strideDepth));\n      const yFMax = Math.min(\n          convInfo.outDepth, (convInfo.inDepth + frontPad - wF) / strideDepth);\n      const wOffset1 = wF * dwS0;\n\n      for (let wR = 0; wR < filterHeight; ++wR) {\n        const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n        const yRMax = Math.min(\n            convInfo.outHeight,\n            (convInfo.inHeight + topPad - wR) / strideHeight);\n        const wOffset2 = wR * dwS1 + wOffset1;\n\n        for (let wC = 0; wC < filterWidth; ++wC) {\n          const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n          const yCMax = Math.min(\n              convInfo.outWidth,\n              (convInfo.inWidth + leftPad - wC) / strideWidth);\n          const wOffset3 = wC * dwS2 + wOffset2;\n\n          for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n            const wOffset4 = d1 * dwS3 + wOffset3;\n\n            for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n              let dotProd = 0;\n              for (let b = 0; b < convInfo.batchSize; ++b) {\n                const xOffset1 = b * xS0;\n                const yOffset1 = b * dyS0;\n\n                for (let yF = yFMin; yF < yFMax; ++yF) {\n                  const xF = wF + yF * strideDepth - frontPad;\n                  const xOffset2 = xF * xS1 + xOffset1;\n                  const yOffset2 = yF * dyS1 + yOffset1;\n\n                  for (let yR = yRMin; yR < yRMax; ++yR) {\n                    const xR = wR + yR * strideHeight - topPad;\n                    const xOffset3 = xR * xS2 + xOffset2;\n                    const yOffset3 = yR * dyS2 + yOffset2;\n\n                    for (let yC = yCMin; yC < yCMax; ++yC) {\n                      const xC = wC + yC * strideWidth - leftPad;\n                      const xOffset4 = xC * xS3 + xOffset3;\n                      const yOffset4 = yC * dyS3 + yOffset3;\n\n                      dotProd +=\n                          xValues[xOffset4 + d1] * dyValues[yOffset4 + d2];\n                    }\n                  }\n                }\n              }\n              dwValues[wOffset4 + d2] = dotProd;\n            }\n          }\n        }\n      }\n    }\n    return dw.toTensor();\n  }\n\n  fusedDepthwiseConv2D(\n      {input, filter, convInfo, bias, activation, preluActivationWeights}:\n          FusedConv2DConfig): Tensor4D {\n    let result = this.depthwiseConv2D(input, filter, convInfo);\n\n    if (bias) {\n      result = this.add(result, bias) as Tensor4D;\n    }\n    if (activation) {\n      result =\n          mapActivation(this, result, activation, preluActivationWeights) as\n          Tensor4D;\n    }\n    return result;\n  }\n\n  depthwiseConv2D(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    assertNotComplex([x, filter], 'depthwiseConv2D');\n\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const padLeft = convInfo.padInfo.left;\n    const padTop = convInfo.padInfo.top;\n    const chMul = convInfo.outChannels / convInfo.inChannels;\n    const y = ops.buffer(convInfo.outShape, x.dtype as 'float32');\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    const wVals = this.readSync(filter.dataId) as TypedArray;\n    const yVals = y.values;\n\n    for (let b = 0; b < convInfo.batchSize; ++b) {\n      const xOffset1 = b * x.strides[0];\n      const yOffset1 = b * y.strides[0];\n      for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n        const yOffset2 = yOffset1 + yR * y.strides[1];\n        const xRCorner = yR * convInfo.strideHeight - padLeft;\n        for (let wR = 0; wR < filterHeight; ++wR) {\n          const xR = xRCorner + wR * dilationHeight;\n          if (xR < 0 || xR >= convInfo.inHeight) {\n            continue;\n          }\n          const wOffset1 = wR * filter.strides[0];\n          const xOffset2 = xOffset1 + xR * x.strides[1];\n          for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n            const yOffset3 = yOffset2 + yC * y.strides[2];\n            const xCCorner = yC * convInfo.strideWidth - padTop;\n            for (let wC = 0; wC < filterWidth; ++wC) {\n              const xC = xCCorner + wC * dilationWidth;\n              if (xC < 0 || xC >= convInfo.inWidth) {\n                continue;\n              }\n              const wOffset2 = wOffset1 + wC * filter.strides[1];\n              const xOffset3 = xOffset2 + xC * convInfo.inChannels;\n              let yOffset4 = yOffset3;\n              let wOffset3 = wOffset2;\n              for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n                const xVal = xVals[xOffset3 + d1];\n                for (let q = 0; q < chMul; ++q) {\n                  yVals[yOffset4 + q] += xVal * wVals[wOffset3 + q];\n                }\n                yOffset4 += chMul;\n                wOffset3 += chMul;\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return y.toTensor() as Tensor4D;\n  }\n\n  depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    assertNotComplex([dy, filter], 'depthwiseConv2DDerInput');\n\n    const dx = ops.buffer<Rank.R4>(convInfo.inShape, 'float32');\n    const dxValues = dx.values;\n    const [dxS0, dxS1, dxS2] = dx.strides;\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    const [dyS0, dyS1, dyS2] = dy.strides;\n    const fltValues = this.readSync(filter.dataId) as TypedArray;\n    const [fltS0, fltS1, fltS2] = filter.strides;\n    const {\n      batchSize,\n      filterHeight,\n      filterWidth,\n      inChannels,\n      inHeight,\n      inWidth,\n      outChannels,\n      outHeight,\n      outWidth,\n      strideHeight,\n      strideWidth\n    } = convInfo;\n    const topPad = filterHeight - 1 - convInfo.padInfo.top;\n    const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n    const chMul = outChannels / inChannels;\n\n    for (let b = 0; b < batchSize; ++b) {\n      for (let d1 = 0; d1 < inChannels; ++d1) {\n        for (let xR = 0; xR < inHeight; ++xR) {\n          const xRCorner = xR - topPad;\n          const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n          const yRMax =\n              Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n\n          for (let xC = 0; xC < inWidth; ++xC) {\n            const xCCorner = xC - leftPad;\n            const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n            const yCMax =\n                Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n\n            let dotProd = 0;\n            for (let yR = xRMin; yR < yRMax; ++yR) {\n              const wR = yR * strideHeight - xRCorner;\n\n              for (let yC = xCMin; yC < yCMax; ++yC) {\n                const wC = yC * strideWidth - xCCorner;\n                const dyOffset = dyS0 * b + dyS1 * yR + dyS2 * yC;\n                const fltOffset = fltS0 * (filterHeight - 1 - wR) +\n                    fltS1 * (filterWidth - 1 - wC) + fltS2 * d1;\n\n                for (let dm = 0; dm < chMul; ++dm) {\n                  const d2 = d1 * chMul + dm;\n                  const pixel = dyValues[dyOffset + d2];\n                  const weight = fltValues[fltOffset + dm];\n                  dotProd += pixel * weight;\n                }\n              }\n            }\n            dxValues[dxS0 * b + dxS1 * xR + dxS2 * xC + d1] = dotProd;\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  depthwiseConv2DDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    assertNotComplex([x, dy], 'depthwiseConv2DDerFilter');\n\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dW = ops.buffer<Rank.R4>(convInfo.filterShape, 'float32');\n\n    const leftPad = convInfo.padInfo.left;\n    const topPad = convInfo.padInfo.top;\n    const chMul = convInfo.outChannels / convInfo.inChannels;\n\n    const xBuf = this.bufferSync(x);\n    const dyBuf = this.bufferSync(dy);\n    for (let wR = 0; wR < filterHeight; ++wR) {\n      const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n      const yRMax = Math.min(\n          convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight);\n\n      for (let wC = 0; wC < filterWidth; ++wC) {\n        const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n        const yCMax = Math.min(\n            convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth);\n\n        for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n          const d1 = Math.trunc(d2 / chMul);\n          const dm = d2 % chMul;\n\n          let dotProd = 0;\n          for (let b = 0; b < convInfo.batchSize; ++b) {\n            for (let yR = yRMin; yR < yRMax; ++yR) {\n              const xR = wR + yR * strideHeight - topPad;\n              for (let yC = yCMin; yC < yCMax; ++yC) {\n                const xC = wC + yC * strideWidth - leftPad;\n                dotProd += xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2);\n              }\n            }\n          }\n          dW.set(dotProd, wR, wC, d1, dm);\n        }\n      }\n    }\n    return dW.toTensor();\n  }\n\n  tile<T extends Tensor>(x: T, reps: number[]): T {\n    assertNotComplex(x, 'tile');\n    return tile(this.bufferSync(x), reps) as T;\n  }\n\n  pad<T extends Tensor>(\n      x: T, paddings: Array<[number, number]>, constantValue: number): T {\n    assertNotComplex(x, 'pad');\n\n    const outShape = paddings.map(\n        (p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n    const start = paddings.map(p => p[0]);\n    const xBuffer = this.bufferSync(x);\n    const buffer = ops.buffer(outShape, x.dtype as 'float32');\n    if (constantValue !== 0) {\n      buffer.values.fill(constantValue);\n    }\n\n    for (let i = 0; i < x.size; i++) {\n      const coords = xBuffer.indexToLoc(i);\n      const outCoords = coords.map((c, i) => c + start[i]);\n      buffer.set(xBuffer.get(...coords), ...outCoords);\n    }\n    return buffer.toTensor() as T;\n  }\n\n  gather<T extends Tensor>(x: T, indices: Tensor1D, axis: number): T {\n    assertNotComplex([x, indices], 'gather');\n\n    const newShape: number[] = x.shape.slice();\n    const indicesValues = this.readSync(indices.dataId) as TypedArray;\n    newShape[axis] = indicesValues.length;\n    const result = buffer(newShape, x.dtype);\n    const xBuf = this.bufferSync(x);\n\n    for (let i = 0; i < result.size; ++i) {\n      const newLoc = result.indexToLoc(i);\n\n      const originalLoc: number[] = newLoc.slice();\n      originalLoc[axis] = indicesValues[newLoc[axis]];\n\n      const originalIndex = xBuf.locToIndex(originalLoc);\n      result.values[i] = xBuf.values[originalIndex];\n    }\n    return result.toTensor() as T;\n  }\n\n  batchToSpaceND<T extends Tensor>(\n      x: T, blockShape: number[], crops: number[][]): T {\n    assertNotComplex([x], 'batchToSpaceND');\n\n    const prod = blockShape.reduce((a, b) => a * b);\n\n    const reshaped = array_ops_util.getReshaped(x.shape, blockShape, prod);\n    const permuted =\n        array_ops_util.getPermuted(reshaped.length, blockShape.length);\n    const reshapedPermuted =\n        array_ops_util.getReshapedPermuted(x.shape, blockShape, prod);\n    const sliceBeginCoords =\n        array_ops_util.getSliceBeginCoords(crops, blockShape.length);\n    const sliceSize =\n        array_ops_util.getSliceSize(reshapedPermuted, crops, blockShape.length);\n\n    return transpose(x.reshape(reshaped), permuted)\n               .reshape(reshapedPermuted)\n               .slice(sliceBeginCoords, sliceSize) as T;\n  }\n\n  spaceToBatchND<T extends Tensor>(\n      x: T, blockShape: number[], paddings: Array<[number, number]>): T {\n    assertNotComplex([x], 'spaceToBatchND');\n\n    const prod = blockShape.reduce((a, b) => a * b);\n\n    const completePaddings: Array<[number, number]> = [[0, 0]];\n    completePaddings.push(...paddings);\n    for (let i = 1 + blockShape.length; i < x.shape.length; ++i) {\n      completePaddings.push([0, 0]);\n    }\n\n    const paddedX = x.pad(completePaddings);\n\n    const reshapedPaddedShape =\n        array_ops_util.getReshaped(paddedX.shape, blockShape, prod, false);\n    const permutedReshapedPaddedPermutation = array_ops_util.getPermuted(\n        reshapedPaddedShape.length, blockShape.length, false);\n    const flattenShape = array_ops_util.getReshapedPermuted(\n        paddedX.shape, blockShape, prod, false);\n\n    return transpose(\n               paddedX.reshape(reshapedPaddedShape),\n               permutedReshapedPaddedPermutation)\n               .reshape(flattenShape) as T;\n  }\n\n  maxPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    assertNotComplex(x, 'maxPool');\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    return pool(xValues, x.shape, x.dtype, x.strides, convInfo, 'max')\n               .toTensor() as Tensor4D;\n  }\n\n  maxPoolBackprop(dy: Tensor4D, x: Tensor4D, y: Tensor4D, convInfo: Conv2DInfo):\n      Tensor4D {\n    assertNotComplex([x, y], 'maxPoolBackprop');\n\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const maxPosBuf = buffer(\n        convInfo.outShape, x.dtype,\n        maxPoolPositions(xValues, x.shape, x.dtype, convInfo).values);\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const dx = ops.buffer<Rank.R4>(x.shape, 'float32');\n\n    const dyBuf = this.bufferSync(dy);\n\n    for (let b = 0; b < convInfo.batchSize; ++b) {\n      for (let d = 0; d < convInfo.inChannels; ++d) {\n        for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) {\n          for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) {\n            // Shader code begins.\n            const dyRCorner = dxR - padTop;\n            const dyCCorner = dxC - padLeft;\n            let dotProd = 0;\n            for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) {\n              const dyR = (dyRCorner + wR) / strideHeight;\n              if (dyR < 0 || dyR >= convInfo.outHeight ||\n                  Math.floor(dyR) !== dyR) {\n                continue;\n              }\n              for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) {\n                const dyC = (dyCCorner + wC) / strideWidth;\n                if (dyC < 0 || dyC >= convInfo.outWidth ||\n                    Math.floor(dyC) !== dyC) {\n                  continue;\n                }\n                const maxPos = effectiveFilterHeight * effectiveFilterWidth -\n                    1 - (maxPosBuf.get(b, dyR, dyC, d) as number);\n                const curPos = wR * effectiveFilterWidth + wC;\n\n                const mask = maxPos === curPos ? 1 : 0;\n                if (mask === 0) {\n                  continue;\n                }\n\n                const pixel = dyBuf.get(b, dyR, dyC, d);\n                dotProd += pixel * mask;\n              }\n            }\n            dx.set(dotProd, b, dxR, dxC, d);\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    assertNotComplex([dy, x], 'avgPoolBackprop');\n\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const dx = ops.buffer<Rank.R4>(x.shape, 'float32');\n\n    const avgMultiplier = 1 / (filterHeight * filterWidth);\n\n    const dyBuf = this.bufferSync(dy);\n\n    for (let b = 0; b < convInfo.batchSize; ++b) {\n      for (let d = 0; d < convInfo.inChannels; ++d) {\n        for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) {\n          for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) {\n            // Shader code begins.\n            const dyRCorner = dxR - padTop;\n            const dyCCorner = dxC - padLeft;\n            let dotProd = 0;\n            for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) {\n              const dyR = (dyRCorner + wR) / strideHeight;\n              if (dyR < 0 || dyR >= convInfo.outHeight ||\n                  Math.floor(dyR) !== dyR) {\n                continue;\n              }\n              for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) {\n                const dyC = (dyCCorner + wC) / strideWidth;\n                if (dyC < 0 || dyC >= convInfo.outWidth ||\n                    Math.floor(dyC) !== dyC) {\n                  continue;\n                }\n\n                const pixel = dyBuf.get(b, dyR, dyC, d);\n                dotProd += pixel;\n              }\n            }\n            dx.set(dotProd * avgMultiplier, b, dxR, dxC, d);\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  private pool3d(x: Tensor5D, convInfo: Conv3DInfo, poolType: 'max'|'avg'):\n      Tensor5D {\n    assertNotComplex(x, 'pool3d');\n\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padFront = convInfo.padInfo.front;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n\n    const initialValue =\n        (poolType === 'max' ? Number.NEGATIVE_INFINITY :\n                              Number.POSITIVE_INFINITY);\n\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const output = ops.buffer(convInfo.outShape, x.dtype);\n    const outputVals = output.values;\n\n    const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] *\n        convInfo.outShape[3] * convInfo.outShape[4];\n    const outputDepthStrides =\n        convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4];\n    const outputRowStrides = convInfo.outShape[3] * convInfo.outShape[4];\n    const outputColStrides = convInfo.outShape[4];\n\n    for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n      const outputBatchOffset = batch * outputBatchStrides;\n      const inputBatchOffset = batch * x.strides[0];\n      for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n        for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) {\n          const xDepthCorner = yDepth * strideDepth - padFront;\n          let xDepthMin = xDepthCorner;\n          while (xDepthMin < 0) {\n            xDepthMin += dilationDepth;\n          }\n          const xDepthMax =\n              Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner);\n          const outputDepthOffset =\n              outputBatchOffset + yDepth * outputDepthStrides;\n          for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) {\n            const xRowCorner = yRow * strideHeight - padTop;\n            let xRowMin = xRowCorner;\n            while (xRowMin < 0) {\n              xRowMin += dilationHeight;\n            }\n            const xRowMax =\n                Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner);\n            const outputRowOffset = outputDepthOffset + yRow * outputRowStrides;\n            for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) {\n              const xColCorner = yCol * strideWidth - padLeft;\n              let xColMin = xColCorner;\n              while (xColMin < 0) {\n                xColMin += dilationWidth;\n              }\n              const xColMax =\n                  Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner);\n              // Shader code begins\n              const outputColOffset = outputRowOffset + yCol * outputColStrides;\n              let minMaxValue = initialValue;\n              let avgValue = 0;\n              let count = 0;\n              for (let xDepth = xDepthMin; xDepth < xDepthMax;\n                   xDepth += dilationDepth) {\n                const xDepthOffset = inputBatchOffset + xDepth * x.strides[1];\n                for (let xRow = xRowMin; xRow < xRowMax;\n                     xRow += dilationHeight) {\n                  const xRowOffset = xDepthOffset + xRow * x.strides[2];\n                  for (let xCol = xColMin; xCol < xColMax;\n                       xCol += dilationWidth) {\n                    const xColOffset = xRowOffset + xCol * x.strides[3];\n                    const pixel = xValues[xColOffset + channel];\n                    if ((poolType === 'max' && pixel > minMaxValue)) {\n                      minMaxValue = pixel;\n                    } else if (poolType === 'avg') {\n                      avgValue += pixel;\n                      count++;\n                    }\n                    if (isNaN(minMaxValue)) {\n                      break;\n                    }\n                  }\n                  if (isNaN(minMaxValue)) {\n                    break;\n                  }\n                }\n                if (isNaN(minMaxValue)) {\n                  break;\n                }\n              }\n              const outputOffset = outputColOffset + channel;\n              outputVals[outputOffset] =\n                  poolType === 'avg' ? avgValue / count : minMaxValue;\n            }\n          }\n        }\n      }\n    }\n    return output.toTensor() as Tensor5D;\n  }\n\n  avgPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    assertNotComplex(x, 'avgPool3d');\n\n    return this.pool3d(x, convInfo, 'avg').toFloat();\n  }\n\n  avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    assertNotComplex([dy, x], 'avgPool3dBackprop');\n\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const filterDepth = convInfo.filterDepth;\n    const filterHeight = convInfo.filterHeight;\n    const filterWidth = convInfo.filterWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const dx = ops.buffer<Rank.R5>(x.shape, 'float32');\n\n    const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth);\n\n    const dyBuf = this.bufferSync(dy);\n\n    for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n      for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n        for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) {\n          for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) {\n            for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) {\n              // Shader code begins.\n              const dyDepthCorner = dxDepth - padFront;\n              const dyRowCorner = dxRow - padTop;\n              const dyColCorner = dxCol - padLeft;\n              let dotProd = 0;\n              for (let wDepth = 0; wDepth < effectiveFilterDepth;\n                   wDepth += dilationDepth) {\n                const dyDepth = (dyDepthCorner + wDepth) / strideDepth;\n                if (dyDepth < 0 || dyDepth >= convInfo.outDepth ||\n                    Math.floor(dyDepth) !== dyDepth) {\n                  continue;\n                }\n                for (let wRow = 0; wRow < effectiveFilterHeight;\n                     wRow += dilationHeight) {\n                  const dyRow = (dyRowCorner + wRow) / strideHeight;\n                  if (dyRow < 0 || dyRow >= convInfo.outHeight ||\n                      Math.floor(dyRow) !== dyRow) {\n                    continue;\n                  }\n                  for (let wCol = 0; wCol < effectiveFilterWidth;\n                       wCol += dilationWidth) {\n                    const dyCol = (dyColCorner + wCol) / strideWidth;\n                    if (dyCol < 0 || dyCol >= convInfo.outWidth ||\n                        Math.floor(dyCol) !== dyCol) {\n                      continue;\n                    }\n\n                    const pixel =\n                        dyBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n                    dotProd += pixel;\n                  }\n                }\n              }\n              dx.set(\n                  dotProd * avgMultiplier, batch, dxDepth, dxRow, dxCol,\n                  channel);\n            }\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  maxPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    assertNotComplex(x, 'maxPool3d');\n\n    return this.pool3d(x, convInfo, 'max').toFloat();\n  }\n\n  private maxPool3dPositions(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    const maxPositions = ops.buffer(convInfo.outShape, 'int32');\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padFront = convInfo.padInfo.front;\n    const padTop = convInfo.padInfo.top;\n    const padLeft = convInfo.padInfo.left;\n\n    const xBuf = this.bufferSync(x);\n    for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n      for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n        for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) {\n          const xDepthCorner = yDepth * strideDepth - padFront;\n          let xDepthMin = xDepthCorner;\n          while (xDepthMin < 0) {\n            xDepthMin += dilationDepth;\n          }\n          const xDepthMax =\n              Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner);\n          for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) {\n            const xRowCorner = yRow * strideHeight - padTop;\n            let xRowMin = xRowCorner;\n            while (xRowMin < 0) {\n              xRowMin += dilationHeight;\n            }\n            const xRowMax =\n                Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner);\n            for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) {\n              const xColCorner = yCol * strideWidth - padLeft;\n              let xColMin = xColCorner;\n              while (xColMin < 0) {\n                xColMin += dilationWidth;\n              }\n              const xColMax =\n                  Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner);\n\n              // Shader code begins\n              let maxValue = Number.NEGATIVE_INFINITY;\n              let maxPosition = -1;\n\n              for (let xDepth = xDepthMin; xDepth < xDepthMax;\n                   xDepth += dilationDepth) {\n                const wDepth = xDepth - xDepthCorner;\n                for (let xRow = xRowMin; xRow < xRowMax;\n                     xRow += dilationHeight) {\n                  const wRow = xRow - xRowCorner;\n                  for (let xCol = xColMin; xCol < xColMax;\n                       xCol += dilationWidth) {\n                    const wCol = xCol - xColCorner;\n                    const pixel = xBuf.get(batch, xDepth, xRow, xCol, channel);\n                    if (pixel >= maxValue) {\n                      maxValue = pixel;\n                      maxPosition = wDepth * effectiveFilterHeight *\n                              effectiveFilterWidth +\n                          wRow * effectiveFilterHeight + wCol;\n                    }\n                  }\n                }\n              }\n\n              maxPositions.set(maxPosition, batch, yDepth, yRow, yCol, channel);\n            }\n          }\n        }\n      }\n    }\n    return maxPositions.toTensor() as Tensor5D;\n  }\n\n  maxPool3dBackprop(\n      dy: Tensor5D, x: Tensor5D, y: Tensor5D, convInfo: Conv3DInfo): Tensor5D {\n    assertNotComplex([x, y], 'maxPool3dBackprop');\n\n    const maxPositions = this.maxPool3dPositions(x, convInfo);\n    const strideDepth = convInfo.strideDepth;\n    const strideHeight = convInfo.strideHeight;\n    const strideWidth = convInfo.strideWidth;\n    const dilationDepth = convInfo.dilationDepth;\n    const dilationHeight = convInfo.dilationHeight;\n    const dilationWidth = convInfo.dilationWidth;\n    const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n    const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n    const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n    const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n    const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n    const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n    const dx = ops.buffer<Rank.R5>(x.shape, 'float32');\n\n    const maxPosBuf = this.bufferSync(maxPositions);\n    const dyBuf = this.bufferSync(dy);\n\n    for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n      for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n        for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) {\n          for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) {\n            for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) {\n              // Shader code begins\n              const dyDepthCorner = dxDepth - padFront;\n              const dyRowCorner = dxRow - padTop;\n              const dyColCorner = dxCol - padLeft;\n              let dotProd = 0;\n              for (let wDepth = 0; wDepth < effectiveFilterDepth;\n                   wDepth += dilationDepth) {\n                const dyDepth = (dyDepthCorner + wDepth) / strideDepth;\n                if (dyDepth < 0 || dyDepth >= convInfo.outDepth ||\n                    Math.floor(dyDepth) !== dyDepth) {\n                  continue;\n                }\n                for (let wRow = 0; wRow < effectiveFilterHeight;\n                     wRow += dilationHeight) {\n                  const dyRow = (dyRowCorner + wRow) / strideHeight;\n                  if (dyRow < 0 || dyRow >= convInfo.outHeight ||\n                      Math.floor(dyRow) !== dyRow) {\n                    continue;\n                  }\n                  for (let wCol = 0; wCol < effectiveFilterWidth;\n                       wCol += dilationWidth) {\n                    const dyCol = (dyColCorner + wCol) / strideWidth;\n                    if (dyCol < 0 || dyCol >= convInfo.outWidth ||\n                        Math.floor(dyCol) !== dyCol) {\n                      continue;\n                    }\n\n                    const maxPos = effectiveFilterDepth *\n                            effectiveFilterHeight * effectiveFilterWidth -\n                        1 -\n                        maxPosBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n                    const curPos =\n                        wDepth * effectiveFilterHeight * effectiveFilterWidth +\n                        wRow * effectiveFilterWidth + wCol;\n\n                    const mask = maxPos === curPos ? 1 : 0;\n                    if (mask === 0) {\n                      continue;\n                    }\n\n                    const pixel =\n                        dyBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n                    dotProd += pixel * mask;\n                  }\n                }\n              }\n              dx.set(dotProd, batch, dxDepth, dxRow, dxCol, channel);\n            }\n          }\n        }\n      }\n    }\n    return dx.toTensor();\n  }\n\n  cast<T extends Tensor>(x: T, dtype: DataType): T {\n    return backend_util.castTensor(x, dtype, this);\n  }\n\n  reshape<R extends Rank>(x: Tensor, shape: ShapeMap[R]): Tensor<R> {\n    return backend_util.reshapeTensor(x, shape);\n  }\n\n  avgPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D {\n    assertNotComplex(x, 'avgPool');\n    assertNotComplex(x, 'maxPool');\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    return pool(xValues, x.shape, x.dtype, x.strides, convInfo, 'avg')\n               .toTensor()\n               .toFloat() as Tensor4D;\n  }\n\n  resizeBilinear(\n      x: Tensor4D, newHeight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    assertNotComplex(x, 'resizeBilinear');\n\n    const [batch, oldHeight, oldWidth, numChannels] = x.shape;\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const result = new Float32Array(\n        util.sizeFromShape([batch, newHeight, newWidth, numChannels]));\n\n    const effectiveInputSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n      (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n    ];\n\n    const effectiveOutputSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n      (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n    ];\n    let outputIdx = 0;\n    const effectiveRowSizeRatio =\n        effectiveInputSize[0] / effectiveOutputSize[0];\n    const effectiveColSizeRatio =\n        effectiveInputSize[1] / effectiveOutputSize[1];\n    for (let b = 0; b < batch; b++) {\n      for (let r = 0; r < newHeight; r++) {\n        const sourceFracRow = effectiveRowSizeRatio * r;\n        const sourceRowFloor = Math.floor(sourceFracRow);\n        const rowFrac = sourceFracRow - sourceRowFloor;\n        const sourceRowCeil = Math.min(oldHeight - 1, Math.ceil(sourceFracRow));\n        const topRowOffset = b * x.strides[0] + sourceRowFloor * x.strides[1];\n        const botRowOffset = b * x.strides[0] + sourceRowCeil * x.strides[1];\n        for (let c = 0; c < newWidth; c++) {\n          const sourceFracCol = effectiveColSizeRatio * c;\n          const sourceColFloor = Math.floor(sourceFracCol);\n          const colFrac = sourceFracCol - sourceColFloor;\n          const sourceColCeil =\n              Math.min(oldWidth - 1, Math.ceil(sourceFracCol));\n          const topLeftOffest = topRowOffset + sourceColFloor * x.strides[2];\n          const botLeftOffset = botRowOffset + sourceColFloor * x.strides[2];\n          const topRightOffset = topRowOffset + sourceColCeil * x.strides[2];\n          const botRightOffest = botRowOffset + sourceColCeil * x.strides[2];\n          for (let d = 0; d < numChannels; d++) {\n            // Begin shader.\n\n            // Compute the fractional index of the source.\n            const topLeft = xValues[topLeftOffest + d];\n            const bottomLeft = xValues[botLeftOffset + d];\n            const topRight = xValues[topRightOffset + d];\n            const bottomRight = xValues[botRightOffest + d];\n\n            const top = topLeft + (topRight - topLeft) * colFrac;\n            const bottom = bottomLeft + (bottomRight - bottomLeft) * colFrac;\n            const newValue = top + (bottom - top) * rowFrac;\n\n            result[outputIdx++] = newValue;\n          }\n        }\n      }\n    }\n    return ops.tensor(result, [batch, newHeight, newWidth, numChannels]);\n  }\n\n  resizeBilinearBackprop(dy: Tensor4D, x: Tensor4D, alignCorners: boolean) {\n    assertNotComplex([dy, x], 'resizeBilinearBackprop');\n\n    const [batch, xHeight, xWidth, depth] = x.shape;\n    const [, yHeight, yWidth] = dy.shape;\n\n    const output = new Float32Array(batch * xHeight * xWidth * depth);\n\n    // In the backwards pass, we want to find the pixels that were generated\n    // for each pixel in the input image the forward pass and add the\n    // corresponding coefficient from dy to the gradient (with some\n    // interpolation).\n\n    const effectiveXSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n      (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n    ];\n\n    const effectiveYSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n      (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n    ];\n\n    const heightScale = effectiveXSize[0] / effectiveYSize[0];\n    const widthScale = effectiveXSize[1] / effectiveYSize[1];\n\n    // Reference implementation\n    // tslint:disable-next-line:max-line-length\n    // https://github.com/tensorflow/tensorflow/blob/3039375c86a5bbc9610c7725dcaa95d635f87ba2/tensorflow/core/kernels/resize_bilinear_op.cc#L275\n\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    let offset = 0;\n    for (let b = 0; b < batch; b++) {\n      const bOffset = b * x.strides[0];\n      for (let r = 0; r < yHeight; r++) {\n        const dxR = r * heightScale;\n        const topDxRIndex = Math.floor(dxR);\n        const bottomDxRIndex = Math.min(Math.ceil(dxR), xHeight - 1);\n\n        const topDxROffset = bOffset + topDxRIndex * x.strides[1];\n        const bottomDxROffset = bOffset + bottomDxRIndex * x.strides[1];\n\n        const dxRLerp = dxR - topDxRIndex;\n        const inverseDxRLerp = 1.0 - dxRLerp;\n        for (let c = 0; c < yWidth; c++) {\n          const dxC = c * widthScale;\n          const leftDxCIndex = Math.floor(dxC);\n          const rightDxCIndex = Math.min(Math.ceil(dxC), xWidth - 1);\n          const dxCLerp = dxC - leftDxCIndex;\n          const inverseDxCLerp = 1.0 - dxCLerp;\n\n          const topLeftRCOffset = topDxROffset + leftDxCIndex * x.strides[2];\n          const topRightRCOffset = topDxROffset + rightDxCIndex * x.strides[2];\n          const bottomLeftRCOffset =\n              bottomDxROffset + leftDxCIndex * x.strides[2];\n          const bottomRightRCOffset =\n              bottomDxROffset + rightDxCIndex * x.strides[2];\n\n          const inverseDxRLerpTimesInverseDxCLerp =\n              inverseDxRLerp * inverseDxCLerp;\n          const inverseDxRLerpTimesDxCLerp = inverseDxRLerp * dxCLerp;\n          const dxRLerpTimesInverseDxCLerp = dxRLerp * inverseDxCLerp;\n          const dxRLerpTimesDxCLerp = dxRLerp * dxCLerp;\n          for (let d = 0; d < depth; d++) {\n            const dyVal = dyValues[offset++];\n            output[topLeftRCOffset + d] +=\n                dyVal * inverseDxRLerpTimesInverseDxCLerp;\n            output[topRightRCOffset + d] += dyVal * inverseDxRLerpTimesDxCLerp;\n            output[bottomLeftRCOffset + d] +=\n                dyVal * dxRLerpTimesInverseDxCLerp;\n            output[bottomRightRCOffset + d] += dyVal * dxRLerpTimesDxCLerp;\n          }\n        }\n      }\n    }\n    return ops.tensor4d(output, [batch, xWidth, xHeight, depth], x.dtype);\n  }\n\n  resizeNearestNeighbor(\n      x: Tensor4D, newHeight: number, newWidth: number,\n      alignCorners: boolean): Tensor4D {\n    assertNotComplex(x, 'resizeNearestNeighbor');\n\n    const [batch, oldHeight, oldWidth, numChannels] = x.shape;\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const output = new Float32Array(batch * newHeight * newWidth * numChannels);\n\n    const effectiveInputSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n      (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n    ];\n\n    const effectiveOutputSize: [number, number] = [\n      (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n      (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n    ];\n\n    const effectiveRowSizeRatio =\n        effectiveInputSize[0] / effectiveOutputSize[0];\n    const effectiveColSizeRatio =\n        effectiveInputSize[1] / effectiveOutputSize[1];\n\n    let outputOffset = 0;\n    for (let b = 0; b < batch; b++) {\n      const batchOffset = b * x.strides[0];\n      for (let r = 0; r < newHeight; r++) {\n        const sourceFracRow = effectiveRowSizeRatio * r;\n        const sourceNearestRow = Math.min(\n            oldHeight - 1,\n            alignCorners ? Math.round(sourceFracRow) :\n                           Math.floor(sourceFracRow));\n        const rowOffset = batchOffset + sourceNearestRow * x.strides[1];\n        for (let c = 0; c < newWidth; c++) {\n          const sourceFracCol = effectiveColSizeRatio * c;\n          const sourceNearestCol = Math.min(\n              oldWidth - 1,\n              alignCorners ? Math.round(sourceFracCol) :\n                             Math.floor(sourceFracCol));\n          const colOffset = rowOffset + sourceNearestCol * x.strides[2];\n          for (let d = 0; d < numChannels; d++) {\n            // Begin shader.\n            // Compute the fractional index of the source.\n            const newVal = xValues[colOffset + d];\n            output[outputOffset++] = newVal;\n          }\n        }\n      }\n    }\n    return ops.tensor(\n        output, [batch, newHeight, newWidth, numChannels], x.dtype);\n  }\n\n  resizeNearestNeighborBackprop(\n      dy: Tensor4D, x: Tensor4D, alignCorners: boolean) {\n    assertNotComplex([dy, x], 'resizeNearestNeighborBackprop');\n\n    const [batch, xHeight, xWidth, depth] = x.shape;\n    const [, yHeight, yWidth] = dy.shape;\n\n    const output = new Float32Array(batch * xHeight * xWidth * depth);\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n\n    // In the backwards pass, we want to find the pixels that were generated\n    // for each pixel in the input image the forward pass\n\n    const effectiveXSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n      (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n    ];\n\n    const effectiveYSize: [number, number] = [\n      (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n      (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n    ];\n\n    const heightScale = effectiveXSize[0] / effectiveYSize[0];\n    const widthScale = effectiveXSize[1] / effectiveYSize[1];\n\n    const invHeightScale = 1 / heightScale;\n    const invWidthScale = 1 / widthScale;\n\n    // This defines the size of the window of values around a particular\n    // index in dy that we want to search for contributions to dx.\n    const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n    const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n\n    // Loop over the output space.\n    for (let b = 0; b < batch; b++) {\n      const batchOffset = b * x.strides[0];\n      for (let r = 0; r < xHeight; r++) {\n        const rowOffset = batchOffset + r * x.strides[1];\n\n        // Compute bounds for where in dy we will look\n        const startRLerp = Math.floor(r * invHeightScale);\n        const startDyR = Math.floor(startRLerp - (winHeight / 2));\n        for (let c = 0; c < xWidth; c++) {\n          const colOffset = rowOffset + c * x.strides[2];\n\n          // Compute bounds for where in dy we will look\n          const startCLerp = Math.floor(c * invWidthScale);\n          const startDyC = Math.floor(startCLerp - (winWidth / 2));\n\n          for (let d = 0; d < depth; d++) {\n            let accum = 0;\n            // loop over dy\n\n            for (let dyRIndex = 0; dyRIndex < winHeight; dyRIndex++) {\n              const dyR = dyRIndex + startDyR;\n              // Guard against the window exceeding the bounds of dy\n              if (dyR < 0 || dyR >= yHeight) {\n                continue;\n              }\n\n              const dyROffset = batchOffset + dyR * dy.strides[1];\n              const sourceFracRow = dyR * heightScale;\n              const sourceNearestRow = Math.min(\n                  xHeight - 1,\n                  alignCorners ? Math.round(sourceFracRow) :\n                                 Math.floor(sourceFracRow));\n              if (r !== sourceNearestRow) {\n                continue;\n              }\n              for (let dyCIndex = 0; dyCIndex < winWidth; dyCIndex++) {\n                const dyC = dyCIndex + startDyC;\n                // Guard against the window exceeding the bounds of dy\n                if (dyC < 0 || dyC >= yWidth) {\n                  continue;\n                }\n\n                const dyCOffset = dyROffset + dyC * dy.strides[2];\n                const sourceFracCol = dyC * widthScale;\n                const sourceNearestCol = Math.min(\n                    xWidth - 1,\n                    alignCorners ? Math.round(sourceFracCol) :\n                                   Math.floor(sourceFracCol));\n\n                if (c === sourceNearestCol) {\n                  accum += dyValues[dyCOffset + d];\n                }\n              }\n            }\n            output[colOffset + d] = accum;\n          }\n        }\n      }\n    }\n    return ops.tensor4d(output, x.shape, x.dtype);\n  }\n\n  batchNormalization(\n      x: Tensor4D, mean: Tensor4D|Tensor1D, variance: Tensor4D|Tensor1D,\n      varianceEpsilon: number, scale?: Tensor4D|Tensor1D,\n      offset?: Tensor4D|Tensor1D): Tensor4D {\n    assertNotComplex([x, mean, variance, scale, offset], 'batchNorm');\n\n    const xVals = this.readSync(x.dataId) as TypedArray;\n    const mVals = this.readSync(mean.dataId) as TypedArray;\n    const varVals = this.readSync(variance.dataId) as TypedArray;\n    const sVals = scale ? this.readSync(scale.dataId) as TypedArray :\n                          new Float32Array([1]);\n    const offVals = offset ? this.readSync(offset.dataId) as TypedArray :\n                             new Float32Array([0]);\n    const outVals = new Float32Array(xVals.length);\n\n    const offValsLength = offVals.length;\n    const sValsLength = sVals.length;\n    const varValsLength = varVals.length;\n    const mValsLength = mVals.length;\n\n    let offi = 0;\n    let mi = 0;\n    let si = 0;\n    let vi = 0;\n    for (let i = 0; i < xVals.length; ++i) {\n      outVals[i] = offVals[offi++] +\n          (xVals[i] - mVals[mi++]) * sVals[si++] /\n              Math.sqrt(varVals[vi++] + varianceEpsilon);\n      if (offi >= offValsLength) {\n        offi = 0;\n      }\n      if (mi >= mValsLength) {\n        mi = 0;\n      }\n      if (si >= sValsLength) {\n        si = 0;\n      }\n      if (vi >= varValsLength) {\n        vi = 0;\n      }\n    }\n    return tensor4d(outVals, x.shape);\n  }\n\n  localResponseNormalization4D(\n      x: Tensor4D, depthRadius: number, bias: number, alpha: number,\n      beta: number): Tensor4D {\n    assertNotComplex(x, 'localResponseNormalization4D');\n\n    const channels = x.shape[3];\n    const maxD = channels - 1;\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const size = x.size;\n    const result = new Float32Array(size);\n\n    function sumAcrossChannels(offset: number) {\n      const currentChannel = offset % channels;\n      let beginSumOffset =\n          offset - currentChannel + Math.max(0, currentChannel - depthRadius);\n      const endSumOffset = offset - currentChannel +\n          Math.min(currentChannel + depthRadius, maxD);\n\n      let sum = 0.0;\n      for (; beginSumOffset <= endSumOffset; beginSumOffset++) {\n        const z = xValues[beginSumOffset];\n        sum += z * z;\n      }\n      return sum;\n    }\n\n    for (let offset = 0; offset < size; offset++) {\n      const sum = sumAcrossChannels(offset);\n      const val = xValues[offset] * Math.pow(bias + alpha * sum, -beta);\n      result[offset] = val;\n    }\n\n    return ops.tensor4d(result, x.shape);\n  }\n\n  LRNGrad(\n      dy: Tensor4D, inputImage: Tensor4D, outputImage: Tensor4D,\n      depthRadius: number, bias: number, alpha: number,\n      beta: number): Tensor4D {\n    assertNotComplex(dy, 'LRNGrad');\n    const channels = dy.shape[3];\n    const dyValues = this.readSync(dy.dataId) as TypedArray;\n    const inputImageValues = this.readSync(inputImage.dataId) as TypedArray;\n    const outputImageValues = this.readSync(outputImage.dataId) as TypedArray;\n    const result = new Float32Array(dy.size);\n    const size = dy.size;\n\n    for (let offset = 0; offset < size; offset++) {\n      const currentChannel = offset % channels;\n      const depthBegin =\n          (offset - currentChannel) + Math.max(0, currentChannel - depthRadius);\n      const depthEnd = (offset - currentChannel) +\n          Math.min(channels, currentChannel + depthRadius + 1);\n\n      let norm = 0;\n      for (let k = depthBegin; k < depthEnd; k++) {\n        norm += Math.pow(inputImageValues[k], 2);\n      }\n      norm = alpha * norm + bias;\n\n      for (let k = depthBegin; k < depthEnd; k++) {\n        let dyi = -2 * alpha * beta * inputImageValues[k] *\n            outputImageValues[offset] / norm;\n        if (offset === k) {\n          dyi += Math.pow(norm, -beta);\n        }\n        dyi *= dyValues[offset];\n        result[k] += dyi;\n      }\n    }\n    return ops.tensor4d(result, dy.shape);\n  }\n\n  multinomial(\n      logits: Tensor2D, normalized: boolean, numSamples: number,\n      seed: number): Tensor2D {\n    assertNotComplex(logits, 'multinomial');\n\n    const probabilities = normalized ? logits : ops.softmax(logits);\n    const batchSize = probabilities.shape[0];\n    const numEvents = probabilities.shape[1];\n    const res = ops.zeros<Rank.R2>([batchSize, numSamples], 'int32');\n    const resVals = this.readSync(res.dataId) as TypedArray;\n    const probVals = this.readSync(probabilities.dataId) as TypedArray;\n\n    for (let b = 0; b < batchSize; ++b) {\n      const offset = b * numEvents;\n      // The cdf won't include the last event. It will be implicit if no other\n      // event happened.\n      const cdf = new Float32Array(numEvents - 1);\n      cdf[0] = probVals[offset];\n      for (let event = 1; event < cdf.length; ++event) {\n        cdf[event] = cdf[event - 1] + probVals[offset + event];\n      }\n\n      const random = seedrandom.alea(seed.toString());\n      const outOffset = b * numSamples;\n      for (let sampleId = 0; sampleId < numSamples; ++sampleId) {\n        const r = random();\n\n        // Assume last event happened by default.\n        resVals[outOffset + sampleId] = cdf.length;\n\n        for (let event = 0; event < cdf.length; event++) {\n          if (r < cdf[event]) {\n            resVals[outOffset + sampleId] = event;\n            break;\n          }\n        }\n      }\n    }\n    return res;\n  }\n\n  oneHot(indices: Tensor1D, depth: number, onValue: number, offValue: number):\n      Tensor2D {\n    assertNotComplex(indices, 'oneHot');\n\n    const res = new Float32Array(indices.size * depth);\n    res.fill(offValue);\n    const indicesVal = this.readSync(indices.dataId) as TypedArray;\n\n    for (let event = 0; event < indices.size; ++event) {\n      if (indicesVal[event] >= 0 && indicesVal[event] < depth) {\n        res[event * depth + indicesVal[event]] = onValue;\n      }\n    }\n    return ops.tensor2d(res, [indices.size, depth], 'int32');\n  }\n\n  nonMaxSuppression(\n      boxes: Tensor2D, scores: Tensor1D, maxOutputSize: number,\n      iouThreshold: number, scoreThreshold: number): Tensor1D {\n    assertNotComplex(boxes, 'nonMaxSuppression');\n\n    const boxesVals = this.readSync(boxes.dataId) as TypedArray;\n    const scoresVals = this.readSync(scores.dataId) as TypedArray;\n    return nonMaxSuppressionV3(\n        boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n  }\n\n  fft(x: Tensor2D): Tensor2D {\n    return this.fftBatch(x, false);\n  }\n\n  ifft(x: Tensor2D): Tensor2D {\n    return this.fftBatch(x, true);\n  }\n\n  /**\n   * Calculate FFT of inner most elements of batch tensor.\n   */\n  private fftBatch(x: Tensor2D, inverse: boolean): Tensor2D {\n    const batch = x.shape[0];\n    const innerDim = x.shape[1];\n    // Collects real and imaginary values separately.\n    const realResult = ops.buffer(x.shape, 'float32');\n    const imagResult = ops.buffer(x.shape, 'float32');\n\n    const real = ops.real(x).as2D(batch, innerDim);\n    const imag = ops.imag(x).as2D(batch, innerDim);\n\n    for (let b = 0; b < batch; b++) {\n      // TODO: Support slice ops for complex type.\n      const r = real.slice([b, 0], [1, innerDim]);\n      const i = imag.slice([b, 0], [1, innerDim]);\n      const input = ops.complex(r, i);\n      // Run FFT by batch element.\n      const res =\n          this.readSync(this.fftImpl(input, inverse).dataId) as Float32Array;\n      for (let d = 0; d < innerDim; d++) {\n        const c = complex_util.getComplexWithIndex(res, d);\n        realResult.values[b * innerDim + d] = c.real;\n        imagResult.values[b * innerDim + d] = c.imag;\n      }\n    }\n\n    const t = ops.complex(realResult.toTensor(), imagResult.toTensor());\n    return t.as2D(batch, innerDim);\n  }\n\n  private fftImpl(x: Tensor2D, inverse: boolean): Tensor2D {\n    const x1D = x.as1D();\n\n    const n = x1D.size;\n\n    if (this.isExponentOf2(n)) {\n      let result = this.fftRadix2(x1D, n, inverse).as2D(x.shape[0], x.shape[1]);\n      if (inverse) {\n        result = ops.complex(\n                     ops.real(result).div(scalar(n)),\n                     ops.imag(result).div(scalar(n))) as Tensor2D;\n      }\n      return result;\n    } else {\n      const data = this.readSync(x.dataId) as TypedArray;\n      const rawOutput =\n          this.fourierTransformByMatmul(data, n, inverse) as Float32Array;\n      const output = complex_util.splitRealAndImagArrays(rawOutput);\n      return ops.complex(output.real, output.imag).as2D(x.shape[0], x.shape[1]);\n    }\n  }\n\n  private isExponentOf2(size: number): boolean {\n    return (size & size - 1) === 0;\n  }\n\n  // FFT using Cooley-Tukey algorithm on radix 2 dimensional input.\n  private fftRadix2(input: Tensor1D, size: number, inverse: boolean): Tensor1D {\n    if (size === 1) {\n      return input;\n    }\n    const data = this.readSync(input.dataId) as TypedArray as Float32Array;\n    const half = size / 2;\n    const evenComplex = complex_util.complexWithEvenIndex(data);\n    let evenTensor = ops.complex(evenComplex.real, evenComplex.imag).as1D();\n    const oddComplex = complex_util.complexWithOddIndex(data);\n    let oddTensor = ops.complex(oddComplex.real, oddComplex.imag).as1D();\n\n    // Recursive call for half part of original input.\n    evenTensor = this.fftRadix2(evenTensor, half, inverse);\n    oddTensor = this.fftRadix2(oddTensor, half, inverse);\n\n    const e = complex_util.exponents(size, inverse);\n    const exponent = ops.complex(e.real, e.imag).mul(oddTensor);\n\n    const addPart = evenTensor.add(exponent);\n    const subPart = evenTensor.sub(exponent);\n\n    const realTensor = ops.real(addPart).concat(ops.real(subPart));\n    const imagTensor = ops.imag(addPart).concat(ops.imag(subPart));\n\n    return ops.complex(realTensor, imagTensor).as1D();\n  }\n\n  // Calculate fourier transform by multplying sinusoid matrix.\n  private fourierTransformByMatmul(\n      data: TypedArray, size: number, inverse: boolean): TypedArray {\n    const ret = new Float32Array(size * 2);\n    // TODO: Use matmul instead once it supports complex64 type.\n    for (let r = 0; r < size; r++) {\n      let real = 0.0;\n      let imag = 0.0;\n      for (let c = 0; c < size; c++) {\n        const e = complex_util.exponent(r * c, size, inverse);\n        const term = complex_util.getComplexWithIndex(data as Float32Array, c);\n        real += term.real * e.real - term.imag * e.imag;\n        imag += term.real * e.imag + term.imag * e.real;\n      }\n      if (inverse) {\n        real /= size;\n        imag /= size;\n      }\n      complex_util.assignToTypedArray(ret, real, imag, r);\n    }\n    return ret;\n  }\n\n  depthToSpace(x: Tensor4D, blockSize: number, dataFormat: 'NHWC'|'NCHW'):\n      Tensor4D {\n    util.assert(\n        dataFormat === 'NHWC',\n        () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${\n            dataFormat}`);\n    util.assert(\n        blockSize > 1,\n        () =>\n            `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`);\n\n    const batchSize = x.shape[0];\n    const inputHeight = x.shape[1];\n    const inputWidth = x.shape[2];\n    const inputDepth = x.shape[3];\n\n    const outputHeight = inputHeight * blockSize;\n    const outputWidth = inputWidth * blockSize;\n    const outputDepth = inputDepth / (blockSize * blockSize);\n\n    const xValues = this.readSync(x.dataId) as TypedArray;\n    const result =\n        new Float32Array(batchSize * outputHeight * outputWidth * outputDepth);\n\n    let outputIdx = 0;\n    for (let b = 0; b < batchSize; ++b) {\n      for (let h = 0; h < outputHeight; ++h) {\n        const inH = Math.floor(h / blockSize);\n        const offsetH = (h % blockSize);\n        for (let w = 0; w < outputWidth; ++w) {\n          const inW = Math.floor(w / blockSize);\n          const offsetW = (w % blockSize);\n          const offsetD = (offsetH * blockSize + offsetW) * outputDepth;\n          for (let d = 0; d < outputDepth; ++d) {\n            const inD = d + offsetD;\n            const inputIdx =\n                inD + inputDepth * (inW + inputWidth * (inH + inputHeight * b));\n            result[outputIdx++] = xValues[inputIdx];\n          }\n        }\n      }\n    }\n    return ops.tensor4d(\n        result, [batchSize, outputHeight, outputWidth, outputDepth]);\n  }\n\n  private broadcastedBinaryOp(\n      a: Tensor, b: Tensor, dtype: DataType,\n      op: (a: number, b: number) => number): Tensor {\n    const newShape =\n        broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape);\n    const result = ops.buffer(newShape, dtype);\n    const aVals = this.readSync(a.dataId) as TypedArray;\n    const bVals = this.readSync(b.dataId) as TypedArray;\n    const aBroadcastDims = broadcast_util.getBroadcastDims(a.shape, newShape);\n    const bBroadcastDims = broadcast_util.getBroadcastDims(b.shape, newShape);\n\n    const resVals = result.values;\n    if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n      for (let i = 0; i < resVals.length; ++i) {\n        resVals[i] = op(aVals[i % aVals.length], bVals[i % bVals.length]);\n      }\n    } else {\n      const aBuf = this.bufferSync(a);\n      const bBuf = this.bufferSync(b);\n      for (let i = 0; i < resVals.length; ++i) {\n        const loc = result.indexToLoc(i);\n\n        const aLoc = loc.slice(-a.rank);\n        aBroadcastDims.forEach(d => aLoc[d] = 0);\n        const aIndex = aBuf.locToIndex(aLoc);\n\n        const bLoc = loc.slice(-b.rank);\n        bBroadcastDims.forEach(d => bLoc[d] = 0);\n        const bIndex = bBuf.locToIndex(bLoc);\n\n        resVals[i] = op(aVals[aIndex], bVals[bIndex]);\n      }\n    }\n    return result.toTensor();\n  }\n\n  private broadcastedBinaryComplexOp(\n      a: Tensor, b: Tensor,\n      op:\n          (aReal: number, aImag: number, bReal: number,\n           bImag: number) => {real: number, imag: number}): Tensor {\n    const newShape =\n        broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape);\n    const realResult = ops.buffer(newShape, 'float32');\n    const imagResult = ops.buffer(newShape, 'float32');\n\n    const aVals = this.readSync(a.dataId) as TypedArray;\n    const bVals = this.readSync(b.dataId) as TypedArray;\n    const aBroadcastDims = broadcast_util.getBroadcastDims(a.shape, newShape);\n    const bBroadcastDims = broadcast_util.getBroadcastDims(b.shape, newShape);\n\n    const realVals = realResult.values;\n    const imagVals = imagResult.values;\n\n    if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n      for (let i = 0; i < realVals.length; i++) {\n        const aIdx = i % aVals.length;\n        const bIdx = i % bVals.length;\n\n        const result =\n            op(aVals[aIdx * 2], aVals[aIdx * 2 + 1], bVals[bIdx * 2],\n               bVals[bIdx * 2 + 1]);\n\n        realVals[i] = result.real;\n        imagVals[i] = result.imag;\n      }\n    } else {\n      const aRealBuf =\n          this.bufferSync(this.data.get(a.dataId).complexTensors.real);\n      const bRealBuf =\n          this.bufferSync(this.data.get(b.dataId).complexTensors.real);\n      for (let i = 0; i < realVals.length; i++) {\n        const loc = realResult.indexToLoc(i);\n\n        const aLoc = loc.slice(-a.rank);\n        aBroadcastDims.forEach(d => aLoc[d] = 0);\n        const aIndex = aRealBuf.locToIndex(aLoc);\n\n        const bLoc = loc.slice(-b.rank);\n        bBroadcastDims.forEach(d => bLoc[d] = 0);\n        const bIndex = bRealBuf.locToIndex(bLoc);\n\n        const opResult =\n            op(aVals[aIndex * 2], aVals[aIndex * 2 + 1], bVals[bIndex * 2],\n               bVals[bIndex * 2 + 1]);\n\n        realVals[i] = opResult.real;\n        imagVals[i] = opResult.imag;\n      }\n    }\n    return this.complex(realResult.toTensor(), imagResult.toTensor());\n  }\n\n  split<T extends Tensor>(x: T, sizeSplits: number[], axis: number): T[] {\n    return split(x, sizeSplits, axis);\n  }\n\n  dispose() {}\n\n  floatPrecision(): 16|32 {\n    return 32;\n  }\n  /** Returns the smallest representable number.  */\n  epsilon(): number {\n    return EPSILON_FLOAT32;\n  }\n\n  cropAndResize(\n      images: Tensor4D,\n      boxes: Tensor2D,\n      boxIndex: Tensor1D,\n      cropSize: [number, number],\n      method: string,\n      extrapolationValue: number,\n  ) {\n    const [batch, imageHeight, imageWidth, numChannels] = images.shape;\n    const numBoxes = boxes.shape[0];\n\n    const [cropHeight, cropWidth] = cropSize;\n    const output =\n        ops.buffer([numBoxes, cropHeight, cropWidth, numChannels], 'float32');\n\n    const boxVals = this.readSync(boxes.dataId) as TypedArray;\n    const boxIndVals = this.readSync(boxIndex.dataId) as TypedArray;\n    const imageVals = this.readSync(images.dataId) as TypedArray;\n\n    const inStride = images.strides;   // to calculate flat indexes into image\n    const outStride = output.strides;  // to calculate flat indexes into output\n\n    // Reference implementation\n    // tslint:disable-next-line:max-line-length\n    // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/crop_and_resize_op.cc\n    for (let b = 0; b < numBoxes; b++) {\n      const startInd = b * 4;\n      const y1 = boxVals[startInd];\n      const x1 = boxVals[startInd + 1];\n      const y2 = boxVals[startInd + 2];\n      const x2 = boxVals[startInd + 3];\n\n      const bInd: number = boxIndVals[b];\n      if (bInd >= batch) {\n        continue;\n      }\n\n      const heightScale = (cropHeight > 1) ?\n          (y2 - y1) * (imageHeight - 1) / (cropHeight - 1) :\n          0;\n      const widthScale =\n          (cropWidth > 1) ? (x2 - x1) * (imageWidth - 1) / (cropWidth - 1) : 0;\n\n      for (let y = 0; y < cropHeight; y++) {\n        const yInd: number = (cropHeight > 1) ?\n            y1 * (imageHeight - 1) + y * (heightScale) :\n            0.5 * (y1 + y2) * (imageHeight - 1);\n\n        if (yInd < 0 || yInd > imageHeight - 1) {\n          for (let x = 0; x < cropWidth; x++) {\n            for (let c = 0; c < numChannels; c++) {\n              const ind =\n                  c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n              output.values[ind] = extrapolationValue;\n            }\n          }\n          continue;\n        }\n\n        if (method === 'bilinear') {\n          const topInd = Math.floor(yInd);\n          const bottomInd = Math.ceil(yInd);\n          const yLerp = yInd - topInd;\n\n          for (let x = 0; x < cropWidth; x++) {\n            const xInd = (cropWidth > 1) ?\n                x1 * (imageWidth - 1) + x * widthScale :\n                0.5 * (x1 + x2) * (imageWidth - 1);\n\n            if (xInd < 0 || xInd > imageWidth - 1) {\n              for (let c = 0; c < numChannels; c++) {\n                const ind =\n                    c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n                output.values[ind] = extrapolationValue;\n              }\n              continue;\n            }\n\n            const leftInd = Math.floor(xInd);\n            const rightInd = Math.ceil(xInd);\n            const xLerp = xInd - leftInd;\n\n            for (let c = 0; c < numChannels; c++) {\n              let ind = c + leftInd * inStride[2] + topInd * inStride[1] +\n                  bInd * inStride[0];\n              const topLeft = imageVals[ind];\n\n              ind = c + rightInd * inStride[2] + topInd * inStride[1] +\n                  bInd * inStride[0];\n              const topRight = imageVals[ind];\n\n              ind = c + leftInd * inStride[2] + bottomInd * inStride[1] +\n                  bInd * inStride[0];\n              const bottomLeft = imageVals[ind];\n\n              ind = c + rightInd * inStride[2] + bottomInd * inStride[1] +\n                  bInd * inStride[0];\n              const bottomRight = imageVals[ind];\n\n              const top = topLeft + (topRight - topLeft) * xLerp;\n              const bottom = bottomLeft + (bottomRight - bottomLeft) * xLerp;\n\n              ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n              output.values[ind] = top + ((bottom - top) * yLerp);\n            }\n          }\n        } else {  // method == \"nearest\"\n          for (let x = 0; x < cropWidth; ++x) {\n            const xInd = (cropWidth > 1) ?\n                x1 * (imageWidth - 1) + x * widthScale :\n                0.5 * (x1 + x2) * (imageWidth - 1);\n\n            if (xInd < 0 || xInd > imageWidth - 1) {\n              for (let c = 0; c < numChannels; c++) {\n                const ind =\n                    c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n                output.values[ind] = extrapolationValue;\n              }\n              continue;\n            }\n\n            const closestX = Math.round(xInd);\n            const closestY = Math.round(yInd);\n            for (let c = 0; c < numChannels; c++) {\n              const inInd = c + closestX * inStride[2] +\n                  closestY * inStride[1] + bInd * inStride[0];\n              const outInd =\n                  c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n              output.values[outInd] = imageVals[inInd];\n            }\n          }\n        }\n      }\n    }\n    return output.toTensor() as Tensor4D;\n  }\n\n  sparseToDense<R extends Rank>(\n      sparseIndices: Tensor, sparseValues: Tensor, outputShape: ShapeMap[R],\n      defaultValue: Scalar): Tensor<R> {\n    const {sliceRank, numUpdates, sliceSize, strides, outputSize} =\n        scatter_nd_util.calculateShapes(\n            sparseValues, sparseIndices, outputShape);\n    const sumDupeIndices = false;\n    return this.scatter(\n        sparseIndices, sparseValues, outputShape, outputSize, sliceSize,\n        numUpdates, sliceRank, strides, defaultValue, sumDupeIndices);\n  }\n\n  gatherND(x: Tensor, indices: Tensor): Tensor {\n    const indicesShape = indices.shape;\n    const sliceRank = indicesShape[indicesShape.length - 1];\n\n    const [resultShape, numSlices, sliceSize, strides] =\n        gather_nd_util.prepareAndValidate(x, indices);\n    if (numSlices === 0) {\n      return tensor([], resultShape, x.dtype);\n    }\n\n    const buffer = new TensorBuffer([numSlices, sliceSize], x.dtype);\n    const indicesData = this.readSync(indices.dataId) as TypedArray;\n    const xData = this.readSync(x.dataId) as TypedArray;\n\n    for (let i = 0; i < numSlices; i++) {\n      const index = [];\n      let flattenIndex = 0;\n      for (let j = 0; j < sliceRank; j++) {\n        const dim = indicesData[i * sliceRank + j];\n        flattenIndex += dim * strides[j];\n        index.push(dim);\n      }\n      if (flattenIndex < 0 || flattenIndex >= x.size / sliceSize) {\n        throw new Error(\n            `Invalid indices: ${index} does not index into ${x.shape}`);\n      }\n\n      for (let k = 0; k < sliceSize; k++) {\n        buffer.values[i * sliceSize + k] = xData[flattenIndex * sliceSize + k];\n      }\n    }\n    return buffer.toTensor().reshape(resultShape);\n  }\n\n  scatterND<R extends Rank>(\n      indices: Tensor, updates: Tensor, shape: ShapeMap[R]): Tensor<R> {\n    const {sliceRank, numUpdates, sliceSize, strides, outputSize} =\n        scatter_nd_util.calculateShapes(updates, indices, shape);\n    const defaultValue = scalar(0);\n    const sumDupeIndices = true;\n    return this.scatter(\n        indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank,\n        strides, defaultValue, sumDupeIndices);\n  }\n\n  fill<R extends Rank>(\n      shape: ShapeMap[R], value: number|string, dtype?: DataType): Tensor<R> {\n    dtype = dtype || inferDtype(value);\n    const values = getArrayFromDType(dtype, sizeFromShape(shape)) as TypedArray;\n    values.fill(value as number);\n    return ENGINE.makeTensor(values, shape, dtype, this) as Tensor<R>;\n  }\n\n  onesLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    if (x.dtype === 'string') {\n      throw new Error('onesLike is not supported for string tensors');\n    } else {\n      return this.fill(x.shape, 1, x.dtype);\n    }\n  }\n\n  zerosLike<R extends Rank>(x: Tensor<R>): Tensor<R> {\n    const values =\n        getArrayFromDType(x.dtype, sizeFromShape(x.shape)) as TypedArray;\n    return this.makeOutput(values, x.shape, x.dtype);\n  }\n\n  linspace(start: number, stop: number, num: number): Tensor1D {\n    return backend_util.linspaceImpl(start, stop, num);\n  }\n\n  private scatter<R extends Rank>(\n      indices: Tensor, updates: Tensor, shape: ShapeMap[R], outputSize: number,\n      sliceSize: number, numUpdates: number, sliceRank: number,\n      strides: number[], defaultValue: Scalar,\n      sumDupeIndices: boolean): Tensor<R> {\n    const flattenShape = [outputSize / sliceSize, sliceSize];\n\n    const indicesData = this.readSync(indices.dataId) as TypedArray;\n    const updatesData = this.readSync(updates.dataId) as TypedArray;\n\n    if (outputSize === 0) {\n      return tensor([], shape, updates.dtype);\n    }\n\n    const buffer = new TensorBuffer(flattenShape, updates.dtype as 'float32');\n    buffer.values.fill((this.readSync(defaultValue.dataId) as TypedArray)[0]);\n\n    for (let i = 0; i < numUpdates; i++) {\n      const index = [];\n      let flattenIndex = 0;\n      for (let j = 0; j < sliceRank; j++) {\n        const dim = indicesData[i * sliceRank + j];\n        index.push(dim);\n        flattenIndex += dim * strides[j];\n      }\n\n      if (flattenIndex < 0 || flattenIndex >= outputSize / sliceSize) {\n        throw new Error(\n            `Invalid indices: ${index} does not index into ${shape}`);\n      }\n\n      for (let k = 0; k < sliceSize; k++) {\n        if (sumDupeIndices) {\n          buffer.values[flattenIndex * sliceSize + k] +=\n              updatesData[i * sliceSize + k];\n        } else {\n          buffer.values[flattenIndex * sliceSize + k] = updates.rank === 0 ?\n              updatesData[0] :\n              updatesData[i * sliceSize + k];\n        }\n      }\n    }\n    return buffer.toTensor().reshape(shape);\n  }\n}\n\nENGINE.registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */);\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as backend_util from '../../../backends/backend_util';\nimport {BinaryInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {DataType, NumericDataType, TypedArray} from '../../../types';\nimport * as util from '../../../util';\nimport {MathBackendCPU} from '../backend_cpu';\nimport {assertNotComplex} from '../cpu_util';\n\nexport function createBinaryKernelConfig(\n    name: string,\n    op: (\n        aShape: number[], bShape: number[], aVals: TypedArray,\n        bVals: TypedArray,\n        dtype: DataType) => [TypedArray, number[]]): KernelConfig {\n  return {\n    kernelName: name,\n    backendName: 'cpu',\n    kernelFunc: ({inputs, backend}) => {\n      const {a, b} = inputs as BinaryInputs;\n      const cpuBackend = backend as MathBackendCPU;\n      assertNotComplex([a, b], name);\n\n      const aVals = cpuBackend.data.get(a.dataId).values as TypedArray;\n      const bVals = cpuBackend.data.get(b.dataId).values as TypedArray;\n\n      const [resultData, resultShape] =\n          op(a.shape, b.shape, aVals, bVals, a.dtype);\n\n      const dataId = cpuBackend.write(resultData, resultShape, a.dtype);\n      return {dataId, shape: resultShape, dtype: a.dtype};\n    }\n  };\n}\n\nexport function createBinaryKernelImpl(op: (a: number, b: number) => number) {\n  return (aShape: number[], bShape: number[], aVals: TypedArray,\n          bVals: TypedArray, dtype: DataType): [TypedArray, number[]] => {\n    const newShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n\n    const resultRank = newShape.length;\n    const resultStrides = util.computeStrides(newShape);\n    const resultSize = util.sizeFromShape(newShape);\n\n    const result =\n        util.getTypedArrayFromDType(dtype as NumericDataType, resultSize);\n\n    const aRank = aShape.length;\n    const bRank = bShape.length;\n\n    const aStrides = util.computeStrides(aShape);\n    const bStrides = util.computeStrides(bShape);\n\n    const aBroadcastDims = backend_util.getBroadcastDims(aShape, newShape);\n    const bBroadcastDims = backend_util.getBroadcastDims(bShape, newShape);\n\n    if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n      for (let i = 0; i < result.length; ++i) {\n        result[i] = op(aVals[i % aVals.length], bVals[i % bVals.length]);\n      }\n    } else {\n      for (let i = 0; i < result.length; ++i) {\n        const loc = util.indexToLoc(i, resultRank, resultStrides);\n\n        const aLoc = loc.slice(-aRank);\n        aBroadcastDims.forEach(d => aLoc[d] = 0);\n        const aIndex = util.locToIndex(aLoc, aRank, aStrides);\n\n        const bLoc = loc.slice(-bRank);\n        bBroadcastDims.forEach(d => bLoc[d] = 0);\n        const bIndex = util.locToIndex(bLoc, bRank, bStrides);\n\n        result[i] = op(aVals[aIndex], bVals[bIndex]);\n      }\n    }\n\n    return [result, newShape];\n  };\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {createBinaryKernelImpl} from '../utils/kernel_utils';\n\nexport const divImpl = createBinaryKernelImpl((a: number, b: number) => a / b);\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Div} from '../../../kernel_names';\nimport {createBinaryKernelConfig} from '../utils/kernel_utils';\nimport {divImpl} from './Div_impl';\n\nexport const divConfig = createBinaryKernelConfig(Div, divImpl);\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {MaxPoolWithArgmax, MaxPoolWithArgmaxAttrs, MaxPoolWithArgmaxInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport * as conv_util from '../../../ops/conv_util';\nimport {TypedArray} from '../../../types';\nimport {MathBackendCPU} from '../backend_cpu';\nimport {assertNotComplex} from '../cpu_util';\n\nimport {maxPoolWithArgmaxImpl} from './MaxPoolWithArgmax_impl';\n\nexport const maxPoolWithArgmaxConfig: KernelConfig = {\n  kernelName: MaxPoolWithArgmax,\n  backendName: 'cpu',\n  kernelFunc: ({inputs, attrs, backend}) => {\n    const {x} = inputs as MaxPoolWithArgmaxInputs;\n    const {filterSize, strides, pad, includeBatchInIndex} =\n        attrs as {} as MaxPoolWithArgmaxAttrs;\n    const cpuBackend = backend as MathBackendCPU;\n    assertNotComplex(x, 'MaxPoolWithArgmax');\n\n    const values = cpuBackend.data.get(x.dataId).values as TypedArray;\n    const convInfo = conv_util.computePool2DInfo(\n        x.shape as [number, number, number, number], filterSize, strides,\n        [1, 1], pad);\n    const [pooled, indexes] = maxPoolWithArgmaxImpl(\n        values, x.shape, x.dtype, includeBatchInIndex, convInfo);\n\n    const pooledDataId =\n        cpuBackend.write(pooled as Float32Array, convInfo.outShape, x.dtype);\n    const indexesDataId =\n        cpuBackend.write(indexes as Int32Array, convInfo.outShape, x.dtype);\n    return [\n      {dataId: pooledDataId, shape: convInfo.outShape, dtype: x.dtype},\n      {dataId: indexesDataId, shape: convInfo.outShape, dtype: 'int32'}\n    ];\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Conv2DInfo} from '../../../ops/conv_util';\nimport {DataType, TypedArray} from '../../../types';\nimport {computeStrides} from '../../../util';\nimport {maxPoolPositions, pool} from '../pool_utils';\nexport function maxPoolWithArgmaxImpl(\n    xValues: TypedArray, xShape: number[], dtype: DataType,\n    includeBatchInIndex: boolean, convInfo: Conv2DInfo) {\n  const strides = computeStrides(xShape);\n  const maxPools = pool(xValues, xShape, dtype, strides, convInfo, 'max');\n  const maxPositions = maxPoolPositions(\n      xValues, xShape, dtype, convInfo, true, includeBatchInIndex);\n\n  return [maxPools.values, maxPositions.values];\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {NonMaxSuppressionV5, NonMaxSuppressionV5Attrs, NonMaxSuppressionV5Inputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {TypedArray} from '../../../types';\nimport {nonMaxSuppressionV5} from '../../non_max_suppression_impl';\n\nimport {MathBackendCPU} from '../backend_cpu';\nimport {assertNotComplex} from '../cpu_util';\n\nexport const nonMaxSuppressionV5Config: KernelConfig = {\n  kernelName: NonMaxSuppressionV5,\n  backendName: 'cpu',\n  kernelFunc: ({inputs, backend, attrs}) => {\n    const {boxes, scores} = inputs as NonMaxSuppressionV5Inputs;\n    const {maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma} =\n        attrs as unknown as NonMaxSuppressionV5Attrs;\n\n    const cpuBackend = backend as MathBackendCPU;\n\n    assertNotComplex(boxes, 'NonMaxSuppressionWithScore');\n\n    const boxesVals = cpuBackend.data.get(boxes.dataId).values as TypedArray;\n    const scoresVals = cpuBackend.data.get(scores.dataId).values as TypedArray;\n\n    const maxOutputSizeVal = maxOutputSize;\n    const iouThresholdVal = iouThreshold;\n    const scoreThresholdVal = scoreThreshold;\n    const softNmsSigmaVal = softNmsSigma;\n\n    const {selectedIndices, selectedScores} = nonMaxSuppressionV5(\n        boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal,\n        scoreThresholdVal, softNmsSigmaVal);\n\n    return [selectedIndices, selectedScores];\n  }\n};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Square, SquareInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {MathBackendCPU} from '../backend_cpu';\nimport {assertNotComplex} from '../cpu_util';\n\nexport const squareConfig: KernelConfig = {\n  kernelName: Square,\n  backendName: 'cpu',\n  kernelFunc: ({inputs, backend}) => {\n    const {x} = inputs as SquareInputs;\n    const cpuBackend = backend as MathBackendCPU;\n    assertNotComplex(x, 'square');\n\n    const values = cpuBackend.data.get(x.dataId).values as Float32Array;\n    const newValues = new Float32Array(values.length);\n    for (let i = 0; i < values.length; ++i) {\n      const value = values[i];\n      newValues[i] = value * value;\n    }\n    const dataId = cpuBackend.write(newValues, x.shape, x.dtype);\n    return {dataId, shape: x.shape, dtype: x.dtype};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {SquaredDifference} from '../../../kernel_names';\nimport {createBinaryKernelImpl} from '../utils/kernel_utils';\nimport {createBinaryKernelConfig} from '../utils/kernel_utils';\n\nconst squaredDifferenceImpl = createBinaryKernelImpl((aVal, bVal) => {\n  const diff = aVal - bVal;\n  return diff * diff;\n});\n\nexport const squaredDifferenceConfig =\n    createBinaryKernelConfig(SquaredDifference, squaredDifferenceImpl);\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {DataType, NumericDataType, TypedArray} from '../../../types';\nimport * as util from '../../../util';\n\nexport function transposeImpl(\n    xVals: TypedArray, xShape: number[], dtype: DataType, perm: number[],\n    newShape: number[]): TypedArray {\n  const xSize = util.sizeFromShape(xShape);\n  const xRank = xShape.length;\n  const xStrides = util.computeStrides(xShape);\n  const newStrides = util.computeStrides(newShape);\n\n  const result = util.getTypedArrayFromDType(\n      dtype as NumericDataType, util.sizeFromShape(newShape));\n\n  for (let i = 0; i < xSize; ++i) {\n    const loc = util.indexToLoc(i, xRank, xStrides);\n\n    // Permute location.\n    const newLoc: number[] = new Array(loc.length);\n    for (let i = 0; i < newLoc.length; i++) {\n      newLoc[i] = loc[perm[i]];\n    }\n\n    const newIndex = util.locToIndex(newLoc, xRank, newStrides);\n    result[newIndex] = xVals[i];\n  }\n  return result;\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// We explicitly import the modular kernels so they get registered in the\n// global registry when we compile the library. A modular build would replace\n// the contents of this file and import only the kernels that are needed.\nimport {KernelConfig, registerKernel} from '../../kernel_registry';\n\nimport {divConfig} from './kernels/Div';\nimport {maxPoolWithArgmaxConfig} from './kernels/MaxPoolWithArgmax';\nimport {nonMaxSuppressionV5Config} from './kernels/NonMaxSuppressionV5';\nimport {squareConfig} from './kernels/Square';\nimport {squaredDifferenceConfig} from './kernels/SquaredDifference';\nimport {transposeConfig} from './kernels/Transpose';\n\n// List all kernel configs here\nconst kernelConfigs: KernelConfig[] = [\n  nonMaxSuppressionV5Config, squareConfig, squaredDifferenceConfig, divConfig,\n  transposeConfig, maxPoolWithArgmaxConfig\n];\n\nfor (const kernelConfig of kernelConfigs) {\n  registerKernel(kernelConfig);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Transpose, TransposeAttrs, TransposeInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {TypedArray} from '../../../types';\nimport {MathBackendCPU} from '../backend_cpu';\nimport {assertNotComplex} from '../cpu_util';\n\nimport {transposeImpl} from './Transpose_impl';\n\nexport const transposeConfig: KernelConfig = {\n  kernelName: Transpose,\n  backendName: 'cpu',\n  kernelFunc: ({inputs, attrs, backend}) => {\n    const {x} = inputs as TransposeInputs;\n    const {perm} = attrs as {} as TransposeAttrs;\n    const cpuBackend = backend as MathBackendCPU;\n\n    assertNotComplex(x, 'transpose');\n\n    const xRank = x.shape.length;\n\n    const newShape: number[] = new Array(xRank);\n    for (let i = 0; i < newShape.length; i++) {\n      newShape[i] = x.shape[perm[i]];\n    }\n\n    const values = cpuBackend.data.get(x.dataId).values as TypedArray;\n    const result = transposeImpl(values, x.shape, x.dtype, perm, newShape);\n\n    const dataId = cpuBackend.write(result, newShape, x.dtype);\n    return {dataId, shape: newShape, dtype: x.dtype};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Div, DivInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {divImpl} from './Div_impl';\n\nexport const divConfig: KernelConfig = {\n  kernelName: Div,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, backend}) => {\n    const {a, b} = inputs as DivInputs;\n\n    const webglBackend = backend as MathBackendWebGL;\n\n    return divImpl(a, b, webglBackend);\n  }\n};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../../environment';\nimport {FromPixels, FromPixelsAttrs, FromPixelsInputs} from '../../../kernel_names';\nimport {KernelFunc, TensorInfo} from '../../../kernel_registry';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {TextureUsage} from '../tex_util';\n\nimport {FromPixelsProgram} from './FromPixels_utils/from_pixels_gpu';\nimport {FromPixelsPackedProgram} from './FromPixels_utils/from_pixels_packed_gpu';\n\nexport const fromPixelsConfig: KernelConfig = {\n  kernelName: FromPixels,\n  backendName: 'webgl',\n  kernelFunc: fromPixels as {} as KernelFunc,\n};\n\nlet fromPixels2DContext: CanvasRenderingContext2D;\n\nfunction fromPixels(args: {\n  inputs: FromPixelsInputs,\n  backend: MathBackendWebGL,\n  attrs: FromPixelsAttrs\n}): TensorInfo {\n  const {inputs, backend, attrs} = args;\n  let {pixels} = inputs;\n  const {numChannels} = attrs;\n\n  const isVideo = typeof (HTMLVideoElement) !== 'undefined' &&\n      pixels instanceof HTMLVideoElement;\n  const isImage = typeof (HTMLImageElement) !== 'undefined' &&\n      pixels instanceof HTMLImageElement;\n  const [width, height] = isVideo ?\n      [\n        (pixels as HTMLVideoElement).videoWidth,\n        (pixels as HTMLVideoElement).videoHeight\n      ] :\n      [pixels.width, pixels.height];\n\n  const texShape: [number, number] = [height, width];\n  const outShape = [height, width, numChannels];\n\n  if (isImage || isVideo) {\n    if (fromPixels2DContext == null) {\n      fromPixels2DContext = document.createElement('canvas').getContext('2d');\n    }\n\n    fromPixels2DContext.canvas.width = width;\n    fromPixels2DContext.canvas.height = height;\n    fromPixels2DContext.drawImage(\n        pixels as HTMLVideoElement | HTMLImageElement, 0, 0, width, height);\n    pixels = fromPixels2DContext.canvas;\n  }\n\n  const tempPixelHandle = backend.makeTensorInfo(texShape, 'int32');\n  // This is a byte texture with pixels.\n  backend.texData.get(tempPixelHandle.dataId).usage = TextureUsage.PIXELS;\n  backend.gpgpu.uploadPixelDataToTexture(\n      backend.getTexture(tempPixelHandle.dataId), pixels as ImageData);\n  const program = env().getBool('WEBGL_PACK') ?\n      new FromPixelsPackedProgram(outShape) :\n      new FromPixelsProgram(outShape);\n  const res = backend.runWebGLProgram(program, [tempPixelHandle], 'int32');\n  backend.disposeData(tempPixelHandle.dataId);\n  return res;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from '../../glsl_version';\nimport {GPGPUProgram} from '../../gpgpu_math';\n\nexport class FromPixelsProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n\n  constructor(outputShape: number[]) {\n    const glsl = getGlslDifferences();\n    const [height, width, ] = outputShape;\n    this.outputShape = outputShape;\n    this.userCode = `\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${width}.0, ${height}.0);\n\n        vec4 values = ${glsl.texture2D}(A, uv);\n        float value;\n        if (depth == 0) {\n          value = values.r;\n        } else if (depth == 1) {\n          value = values.g;\n        } else if (depth == 2) {\n          value = values.b;\n        } else if (depth == 3) {\n          value = values.a;\n        }\n\n        setOutput(floor(value * 255.0 + 0.5));\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getGlslDifferences} from '../../glsl_version';\nimport {GPGPUProgram} from '../../gpgpu_math';\n\nexport class FromPixelsPackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  userCode: string;\n  outputShape: number[];\n  packedInputs = false;\n  packedOutput = true;\n\n  constructor(outputShape: number[]) {\n    const glsl = getGlslDifferences();\n    const [height, width, ] = outputShape;\n    this.outputShape = outputShape;\n    this.userCode = `\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n\n        vec4 result = vec4(0.);\n\n        for(int row=0; row<=1; row++) {\n          for(int col=0; col<=1; col++) {\n            texC = coords[1] + row;\n            depth = coords[2] + col;\n\n            vec2 uv = (vec2(texC, texR) + halfCR) /\n                       vec2(${width}.0, ${height}.0);\n            vec4 values = ${glsl.texture2D}(A, uv);\n            float value;\n            if (depth == 0) {\n              value = values.r;\n            } else if (depth == 1) {\n              value = values.g;\n            } else if (depth == 2) {\n              value = values.b;\n            } else if (depth == 3) {\n              value = values.a;\n            }\n\n            result[row * 2 + col] = floor(value * 255.0 + 0.5);\n          }\n        }\n\n        ${glsl.output} = result;\n      }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {MaxPoolWithArgmax, MaxPoolWithArgmaxAttrs, MaxPoolWithArgmaxInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport * as conv_util from '../../../ops/conv_util';\nimport * as util from '../../../util';\nimport {MathBackendWebGL} from '../backend_webgl';\n\nimport {maxPoolWithArgmaxImpl} from './MaxPoolWithArgmax_impl';\n\nexport const maxPoolWithArgmaxConfig: KernelConfig = {\n  kernelName: MaxPoolWithArgmax,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, attrs, backend}) => {\n    const {x} = inputs as MaxPoolWithArgmaxInputs;\n    const {filterSize, strides, pad, includeBatchInIndex} =\n        attrs as {} as MaxPoolWithArgmaxAttrs;\n    const webglBackend = backend as MathBackendWebGL;\n\n    util.assert(\n        x.shape.length === 4,\n        () => `Error in maxPool: input must be rank 4 but got rank ${\n            x.shape.length}.`);\n    const dilations: [number, number] = [1, 1];\n    util.assert(\n        conv_util.eitherStridesOrDilationsAreOne(strides, dilations),\n        () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n            `Got strides ${strides} and dilations '${dilations}'`);\n\n    const convInfo = conv_util.computePool2DInfo(\n        x.shape as [number, number, number, number], filterSize, strides,\n        dilations, pad);\n\n    const [result, indexes] =\n        maxPoolWithArgmaxImpl(x, includeBatchInIndex, convInfo, webglBackend);\n    return [result, indexes];\n  }\n};\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class TransposeProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n\n  constructor(aShape: number[], newDim: number[]) {\n    const outputShape: number[] = new Array(aShape.length);\n    for (let i = 0; i < outputShape.length; i++) {\n      outputShape[i] = aShape[newDim[i]];\n    }\n    this.outputShape = outputShape;\n    this.rank = outputShape.length;\n    const dtype = getCoordsDataType(this.rank);\n    const switched = getSwitchedCoords(newDim);\n\n    this.userCode = `\n    void main() {\n      ${dtype} resRC = getOutputCoords();\n      setOutput(getA(${switched}));\n    }\n    `;\n  }\n}\n\nfunction getSwitchedCoords(newDim: number[]): string {\n  const rank = newDim.length;\n  if (rank > 6) {\n    throw Error(`Transpose for rank ${rank} is not yet supported`);\n  }\n  const originalOrder =\n      ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w', 'resRC.u', 'resRC.v'];\n  const switchedCoords = new Array(rank);\n  for (let i = 0; i < newDim.length; i++) {\n    switchedCoords[newDim[i]] = originalOrder[i];\n  }\n  return switchedCoords.join();\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getVecChannels} from '../packing_util';\n\nimport {GPGPUProgram} from './gpgpu_math';\nimport {getCoordsDataType} from './shader_compiler';\n\nexport class TransposePackedProgram implements GPGPUProgram {\n  variableNames = ['A'];\n  outputShape: number[];\n  userCode: string;\n  rank: number;\n  packedInputs = true;\n  packedOutput = true;\n\n  constructor(aShape: number[], newDim: number[]) {\n    const outputShape: number[] = new Array(aShape.length);\n    for (let i = 0; i < outputShape.length; i++) {\n      outputShape[i] = aShape[newDim[i]];\n    }\n    this.outputShape = outputShape;\n    this.rank = outputShape.length;\n    if (this.rank > 6) {\n      throw Error(\n          `Packed transpose for rank ${this.rank} is not yet supported.`);\n    }\n    const dtype = getCoordsDataType(this.rank);\n\n    const outputOrder = getVecChannels('rc', this.rank);\n    const switchedOrder = new Array(this.rank);\n    for (let i = 0; i < newDim.length; i++) {\n      switchedOrder[newDim[i]] = outputOrder[i];\n    }\n    const innerDims = `vec2(${switchedOrder.slice(-2).join()})`;\n    const nextColumn =\n        `++${outputOrder[this.rank - 1]} < ${outputShape[this.rank - 1]}`;\n    const getc = `getChannel(getA(${switchedOrder.join()}), ${innerDims})`;\n\n    this.userCode = `\n    void main() {\n      ${dtype} rc = getOutputCoords();\n      vec4 result = vec4(0.);\n      result[0] = ${getc};\n      if(${nextColumn}) {\n        result[1] = ${getc};\n      }\n      --${outputOrder[this.rank - 1]};\n      if(++${outputOrder[this.rank - 2]} < ${outputShape[this.rank - 2]}) {\n        result[2] = ${getc};\n        if(${nextColumn}) {\n          result[3] = ${getc};\n        }\n      }\n      setOutput(result);\n    }\n    `;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {KernelConfig, registerKernel} from '../../kernel_registry';\n\nimport {divConfig} from './kernels/Div';\nimport {fromPixelsConfig} from './kernels/FromPixels';\nimport {maxPoolWithArgmaxConfig} from './kernels/MaxPoolWithArgmax';\nimport {nonMaxSuppressionV5Config} from './kernels/NonMaxSuppressionV5';\nimport {squareConfig} from './kernels/Square';\nimport {squaredDifferenceConfig} from './kernels/SquaredDifference';\nimport {transposeConfig} from './kernels/Transpose';\n\n// List all kernel configs here\nconst kernelConfigs: KernelConfig[] = [\n  fromPixelsConfig, divConfig, nonMaxSuppressionV5Config, squareConfig,\n  squaredDifferenceConfig, transposeConfig, maxPoolWithArgmaxConfig\n];\n\nfor (const kernelConfig of kernelConfigs) {\n  registerKernel(kernelConfig);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {TypedArray} from '../../../../src/types';\nimport {transposeImpl as cpuTranspose} from '../../../backends/cpu/kernels/Transpose_impl';\nimport {Transpose, TransposeAttrs, TransposeInputs} from '../../../kernel_names';\nimport {KernelConfig, TensorInfo} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {transposeImpl} from './Transpose_impl';\n\nexport const transposeConfig: KernelConfig = {\n  kernelName: Transpose,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, attrs, backend}) => {\n    const {x} = inputs as TransposeInputs;\n    const {perm} = attrs as {} as TransposeAttrs;\n    const webglBackend = backend as MathBackendWebGL;\n\n    const xRank = x.shape.length;\n\n    const newShape: number[] = new Array(xRank);\n    for (let i = 0; i < newShape.length; i++) {\n      newShape[i] = x.shape[perm[i]];\n    }\n\n    let out: TensorInfo;\n    if (webglBackend.shouldExecuteOnCPU([x])) {\n      const xTexData = webglBackend.texData.get(x.dataId);\n      const values = xTexData.values as TypedArray;\n      const outValues = cpuTranspose(values, x.shape, x.dtype, perm, newShape);\n\n      out = webglBackend.makeTensorInfo(newShape, x.dtype);\n      const outData = webglBackend.texData.get(out.dataId);\n      outData.values = outValues;\n    } else {\n      out = transposeImpl(x, perm, webglBackend);\n    }\n    return out;\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../../environment';\nimport {TensorInfo} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport * as binaryop_gpu from '../binaryop_gpu';\nimport {BinaryOpProgram} from '../binaryop_gpu';\nimport * as binaryop_packed_gpu from '../binaryop_packed_gpu';\nimport {BinaryOpPackedProgram} from '../binaryop_packed_gpu';\n\nexport function divImpl(\n    a: TensorInfo, b: TensorInfo, backend: MathBackendWebGL): TensorInfo {\n  let program = new BinaryOpProgram(binaryop_gpu.DIV, a.shape, b.shape);\n  if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n    program = new BinaryOpPackedProgram(\n        binaryop_packed_gpu.DIV, a.shape, b.shape, true);\n  }\n  const output = backend.runWebGLProgram(program, [a, b], 'float32');\n  return output;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {NonMaxSuppressionV5, NonMaxSuppressionV5Attrs, NonMaxSuppressionV5Inputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {warn} from '../../../log';\nimport {TypedArray} from '../../../types';\nimport {nonMaxSuppressionV5} from '../../non_max_suppression_impl';\n\nimport {MathBackendWebGL} from '../backend_webgl';\n\nexport const nonMaxSuppressionV5Config: KernelConfig = {\n  kernelName: NonMaxSuppressionV5,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, backend, attrs}) => {\n    warn(\n        'tf.nonMaxSuppression() in webgl locks the UI thread. ' +\n        'Call tf.nonMaxSuppressionAsync() instead');\n\n    const {boxes, scores} = inputs as NonMaxSuppressionV5Inputs;\n    const {maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma} =\n        attrs as unknown as NonMaxSuppressionV5Attrs;\n\n    const gpuBackend = backend as MathBackendWebGL;\n\n    const boxesVals = gpuBackend.readSync(boxes.dataId) as TypedArray;\n    const scoresVals = gpuBackend.readSync(scores.dataId) as TypedArray;\n\n    const maxOutputSizeVal = maxOutputSize;\n    const iouThresholdVal = iouThreshold;\n    const scoreThresholdVal = scoreThreshold;\n    const softNmsSigmaVal = softNmsSigma;\n\n    const {selectedIndices, selectedScores} = nonMaxSuppressionV5(\n        boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal,\n        scoreThresholdVal, softNmsSigmaVal);\n\n    return [selectedIndices, selectedScores];\n  }\n};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Square, SquareInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\n\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {SQUARE, UnaryOpProgram} from '../unaryop_gpu';\n\nexport const squareConfig: KernelConfig = {\n  kernelName: Square,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, backend}) => {\n    const {x} = inputs as SquareInputs;\n    const webglBackend = backend as MathBackendWebGL;\n    const program = new UnaryOpProgram(x.shape, SQUARE);\n    return webglBackend.runWebGLProgram(program, [x], x.dtype);\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../../environment';\nimport {SquaredDifference, SquaredDifferenceInputs} from '../../../kernel_names';\nimport {KernelConfig} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {BinaryOpProgram} from '../binaryop_gpu';\nimport {BinaryOpPackedProgram} from '../binaryop_packed_gpu';\n\nexport const squaredDifferenceConfig: KernelConfig = {\n  kernelName: SquaredDifference,\n  backendName: 'webgl',\n  kernelFunc: ({inputs, backend}) => {\n    const {a, b} = inputs as SquaredDifferenceInputs;\n    const SQUARED_DIFFERENCE = 'return (a - b) * (a - b);';\n    const webGLBackend = backend as MathBackendWebGL;\n\n    const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n        new BinaryOpPackedProgram(SQUARED_DIFFERENCE, a.shape, b.shape) :\n        new BinaryOpProgram(SQUARED_DIFFERENCE, a.shape, b.shape);\n    return webGLBackend.compileAndRun(program, [a, b]);\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../../../environment';\nimport {TensorInfo} from '../../../kernel_registry';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {TransposeProgram} from '../transpose_gpu';\nimport {TransposePackedProgram} from '../transpose_packed_gpu';\n\nexport function transposeImpl(\n    x: TensorInfo, perm: number[], backend: MathBackendWebGL): TensorInfo {\n  const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n      new TransposePackedProgram(x.shape, perm) :\n      new TransposeProgram(x.shape, perm);\n  return backend.runWebGLProgram(program, [x], x.dtype);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {TensorInfo} from '../../../kernel_registry';\nimport * as conv_util from '../../../ops/conv_util';\nimport {MathBackendWebGL} from '../backend_webgl';\nimport {Pool2DProgram} from '../pool_gpu';\n\nexport function maxPoolWithArgmaxImpl(\n    x: TensorInfo, includeBatchInIndex: boolean, convInfo: conv_util.Conv2DInfo,\n    backend: MathBackendWebGL): TensorInfo[] {\n  let program = new Pool2DProgram(convInfo, 'max', false);\n  const poolOutput = backend.runWebGLProgram(program, [x], 'float32');\n\n  program = new Pool2DProgram(convInfo, 'max', true, true, includeBatchInIndex);\n  const indexOutput = backend.runWebGLProgram(program, [x], 'float32');\n  return [poolOutput, indexOutput];\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {addGradConfig} from './gradients/Add_grad';\nimport {addNGradConfig} from './gradients/AddN_grad';\nimport {broadcastToGradConfig} from './gradients/BroadcastTo_grad';\nimport {divGradConfig} from './gradients/Div_grad';\nimport {fusedBatchNormGradConfig} from './gradients/FusedBatchNorm_grad';\nimport {identityGradConfig} from './gradients/Identity_grad';\nimport {oneHotGradConfig} from './gradients/OneHot_grad';\nimport {padV2GradConfig} from './gradients/PadV2_grad';\nimport {squareGradConfig} from './gradients/Square_grad';\nimport {squaredDifferenceGradConfig} from './gradients/SquaredDifference_grad';\nimport {tileGradConfig} from './gradients/Tile_grad';\nimport {transposeGradConfig} from './gradients/Transpose_grad';\nimport {GradConfig} from './kernel_registry';\nimport {registerGradient} from './kernel_registry';\n\n// Export all kernel configs here so that the package can auto register them\nconst gradConfigs: GradConfig[] = [\n  addGradConfig, addNGradConfig, broadcastToGradConfig, divGradConfig,\n  fusedBatchNormGradConfig, identityGradConfig, oneHotGradConfig,\n  padV2GradConfig, squareGradConfig, squaredDifferenceGradConfig,\n  tileGradConfig, transposeGradConfig\n];\n\nfor (const gradientConfig of gradConfigs) {\n  registerGradient(gradientConfig);\n}\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Add} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport * as broadcast_util from '../ops/broadcast_util';\nimport {Tensor} from '../tensor';\n\nexport const addGradConfig: GradConfig = {\n  kernelName: Add,\n  inputsToSave: ['a', 'b'],\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const [a, b] = saved;\n    const outShape =\n        broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape);\n\n    const derA = () => {\n      let res = dy;\n      const reduceAxes = broadcast_util.getReductionAxes(a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape(a.shape);\n    };\n    const derB = () => {\n      let res = dy;\n      const reduceAxes = broadcast_util.getReductionAxes(b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = res.sum(reduceAxes);\n      }\n      return res.reshape(b.shape);\n    };\n\n    return {a: derA, b: derB};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {AddN} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport {Tensor} from '../tensor';\n\nexport const addNGradConfig: GradConfig = {\n  kernelName: AddN,\n  saveAllInputs: true,\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const ders: {[key: string]: () => Tensor} = {};\n    saved.forEach((_, i) => {\n      ders[i] = () => dy.clone();\n    });\n    return ders;\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {BroadcastTo, BroadCastToAttrs} from '../kernel_names';\nimport {GradConfig, NamedAttrMap} from '../kernel_registry';\nimport {Tensor} from '../tensor';\n\nexport const broadcastToGradConfig: GradConfig = {\n  kernelName: BroadcastTo,\n  gradFunc: (dy: Tensor, saved: Tensor[], attrs: NamedAttrMap) => {\n    const broadCastToAttrs: BroadCastToAttrs =\n        attrs as unknown as BroadCastToAttrs;\n\n    const inputShape = broadCastToAttrs.inputShape;\n    const outputShape = broadCastToAttrs.shape;\n\n    const reps: number[] = Array.from(outputShape);\n    for (let i = inputShape.length - 1; i >= 0; i--) {\n      if (inputShape[i] === outputShape[i]) {\n        reps[i] = 1;\n      } else if (inputShape[i] !== 1) {\n        throw new Error(`broadcastTo(): [${\n            inputShape}] cannot be broadcast to [${outputShape}].`);\n      }\n    }\n    const axes: number[] = [];\n    for (let i = 0; i < reps.length; i++) {\n      if (reps[i] > 1) {\n        axes.push(i);\n      }\n    }\n    const keepDims = true;\n    return {x: () => dy.sum(axes, keepDims)};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Div} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport * as broadcast_util from '../ops/broadcast_util';\nimport {div} from '../ops/div';\nimport {sum} from '../ops/reduction_ops';\nimport {square} from '../ops/square';\nimport {neg} from '../ops/unary_ops';\nimport {Tensor} from '../tensor';\n\nexport const divGradConfig: GradConfig = {\n  kernelName: Div,\n  inputsToSave: ['a', 'b'],\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const [a, b] = saved;\n    const outShape =\n        broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape);\n    const derA = () => {\n      const res = div(dy, b.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes(a.shape, outShape);\n      if (reduceAxes.length > 0) {\n        return sum(res, reduceAxes).reshape(a.shape);\n      }\n      return res;\n    };\n    const derB = () => {\n      let res = dy.mul(a.toFloat());\n      const reduceAxes = broadcast_util.getReductionAxes(b.shape, outShape);\n      if (reduceAxes.length > 0) {\n        res = sum(res, reduceAxes).reshape(b.shape);\n      }\n      const tmp = square(b);\n      return neg(div(res, tmp.toFloat()));\n    };\n    return {a: derA, b: derB};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {FusedBatchNorm, FusedBatchNormAttrs} from '../kernel_names';\nimport {GradConfig, NamedAttrMap} from '../kernel_registry';\nimport {xAs4D} from '../ops/batchnorm_util';\nimport {getReductionAxes} from '../ops/broadcast_util';\nimport {add, mul, reshape, sub} from '../ops/ops';\nimport {sum} from '../ops/reduction_ops';\nimport {scalar} from '../ops/tensor_ops';\nimport {tile} from '../ops/tile';\nimport {rsqrt} from '../ops/unary_ops';\nimport {Tensor, Tensor4D} from '../tensor';\nimport {Rank, ShapeMap} from '../types';\n\nexport const fusedBatchNormGradConfig: GradConfig = {\n  kernelName: FusedBatchNorm,\n  inputsToSave: ['x', 'mean', 'variance', 'scale'],\n  gradFunc: <R extends Rank>(\n      dy: Tensor, saved: Tensor[], attrs: NamedAttrMap) => {\n    const batchNormalizationAttrs: FusedBatchNormAttrs =\n        attrs as {} as FusedBatchNormAttrs;\n    const {varianceEpsilon} = batchNormalizationAttrs;\n    const [x, mean, variance, scale] = saved;\n\n    const x4D: Tensor4D = xAs4D(x);\n\n    const scaleValue = scale == null ? scalar(1) : scale;\n    const reductionAxes = getReductionAxes(mean.shape, x4D.shape);\n    const tileShape: number[] = [];\n    if (mean.rank === 1) {\n      for (let i = 0; i < x4D.shape.length - 1; ++i) {\n        tileShape.push(x4D.shape[i]);\n      }\n      tileShape.push(1);\n    }\n\n    const xMinusMean = sub(x, mean);\n    const dyTimesScaleValue = mul(dy, scaleValue);\n    const oneOverSqrtVariance = rsqrt(add(variance, scalar(varianceEpsilon)));\n    const minusHalfRCube = mul(\n        mul(mul(oneOverSqrtVariance, oneOverSqrtVariance), oneOverSqrtVariance),\n        scalar(-0.5));\n\n    const derX = () => {\n      if (mean.rank === 1) {\n        return reshape(\n            mul(mul(dy,\n                    tile(\n                        oneOverSqrtVariance.as4D(1, 1, 1, mean.shape[0]),\n                        tileShape)),\n                scaleValue),\n            x.shape);\n      } else {\n        return reshape(mul(mul(dy, oneOverSqrtVariance), scaleValue), x.shape);\n      }\n    };\n    const derMean = () => {\n      let meanDer =\n          mul(mul(oneOverSqrtVariance, scalar(-1)), dyTimesScaleValue);\n      if (mean.rank === 1) {\n        meanDer = sum(meanDer, reductionAxes);\n      }\n      return reshape(meanDer, mean.shape as ShapeMap[R]);\n    };\n    const derVariance = () => {\n      let varianceDer = mul(mul(minusHalfRCube, xMinusMean), dyTimesScaleValue);\n\n      if (mean.rank === 1) {\n        varianceDer = sum(varianceDer, reductionAxes);\n      }\n      return reshape(varianceDer, mean.shape as ShapeMap[R]);\n    };\n    const derScale = () => {\n      const xMinusMean2TimesRsqrt = mul(xMinusMean, oneOverSqrtVariance);\n\n      let scaleDer = mul(dy, xMinusMean2TimesRsqrt);\n      if (mean.rank === 1) {\n        scaleDer = sum(scaleDer, reductionAxes);\n      }\n      return reshape(scaleDer, mean.shape as ShapeMap[R]);\n    };\n    const derOffset = () => {\n      let offsetDer = dy;\n      if (mean.rank === 1) {\n        offsetDer = sum(offsetDer, reductionAxes);\n      }\n      return reshape(offsetDer, mean.shape as ShapeMap[R]);\n    };\n    return {\n      x: derX,\n      mean: derMean,\n      variance: derVariance,\n      scale: derScale,\n      offset: derOffset\n    };\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Identity} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport {Tensor} from '../tensor';\n\nexport const identityGradConfig: GradConfig = {\n  kernelName: Identity,\n  gradFunc: (dy: Tensor) => {\n    return {x: () => dy.toFloat()};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {OneHot} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport {zeros} from '../ops/tensor_ops';\nimport {Tensor} from '../tensor';\n\nexport const oneHotGradConfig: GradConfig = {\n  kernelName: OneHot,\n  inputsToSave: ['indices'],\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const indices = saved[0];\n    return {indices: () => zeros(indices.shape, 'float32')};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {PadV2, PadV2Attrs} from '../kernel_names';\nimport {GradConfig, NamedAttrMap} from '../kernel_registry';\nimport {Tensor} from '../tensor';\n\nexport const padV2GradConfig: GradConfig = {\n  kernelName: PadV2,\n  inputsToSave: ['x'],\n  gradFunc: (dy: Tensor, saved: Tensor[], attrs: NamedAttrMap) => {\n    // Pad introduces values around the original tensor, so the gradient\n    // slices the original shape out of the gradient.\n    const x = saved[0];\n    const {paddings} = attrs as unknown as PadV2Attrs;\n    const begin = paddings.map(p => p[0]);\n    return {x: () => dy.slice(begin, x.shape)};\n  }\n};\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Square} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport {Tensor} from '../tensor';\n\nexport const squareGradConfig: GradConfig = {\n  kernelName: Square,\n  inputsToSave: ['x'],\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const [x] = saved;\n    return {x: () => dy.mul(x.toFloat().mul(2))};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {SquaredDifference} from '../kernel_names';\nimport {GradConfig} from '../kernel_registry';\nimport {mul, sub} from '../ops/binary_ops';\nimport {scalar} from '../ops/tensor_ops';\nimport {Tensor} from '../tensor';\n\nexport const squaredDifferenceGradConfig: GradConfig = {\n  kernelName: SquaredDifference,\n  inputsToSave: ['a', 'b'],\n  gradFunc: (dy: Tensor, saved: Tensor[]) => {\n    const [a, b] = saved;\n    const two = scalar(2);\n    const derA = () => mul(dy, mul(two, sub(a, b)));\n    const derB = () => mul(dy, mul(two, sub(b, a)));\n    return {a: derA, b: derB};\n  }\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tile, TileAttrs} from '../kernel_names';\nimport {GradConfig, NamedAttrMap} from '../kernel_registry';\nimport {zerosLike} from '../ops/tensor_ops';\nimport {Tensor} from '../tensor';\n\nexport const tileGradConfig: GradConfig = {\n  kernelName: Tile,\n  inputsToSave: ['x'],\n  gradFunc: (dy: Tensor, saved: Tensor[], attrs: NamedAttrMap) => {\n    const [x] = saved;\n    const {reps} = attrs as unknown as TileAttrs;\n\n    const derX = () => {\n      let xGrad = zerosLike(x);\n      // TODO(cais): Maybe reduce memory footprint by avoiding repeated\n      // slicing.\n      if (x.rank === 1) {\n        for (let i = 0; i < reps[0]; ++i) {\n          xGrad = xGrad.add(dy.slice([i * x.shape[0]], [x.shape[0]]));\n        }\n      } else if (x.rank === 2) {\n        for (let i = 0; i < reps[0]; ++i) {\n          for (let j = 0; j < reps[1]; ++j) {\n            xGrad = xGrad.add(dy.slice(\n                [i * x.shape[0], j * x.shape[1]], [x.shape[0], x.shape[1]]));\n          }\n        }\n      } else if (x.rank === 3) {\n        for (let i = 0; i < reps[0]; ++i) {\n          for (let j = 0; j < reps[1]; ++j) {\n            for (let k = 0; k < reps[2]; ++k) {\n              xGrad = xGrad.add(dy.slice(\n                  [i * x.shape[0], j * x.shape[1], k * x.shape[2]],\n                  [x.shape[0], x.shape[1], x.shape[2]]));\n            }\n          }\n        }\n      } else if (x.rank === 4) {\n        for (let i = 0; i < reps[0]; ++i) {\n          for (let j = 0; j < reps[1]; ++j) {\n            for (let k = 0; k < reps[2]; ++k) {\n              for (let l = 0; l < reps[3]; ++l) {\n                xGrad = xGrad.add(dy.slice(\n                    [\n                      i * x.shape[0], j * x.shape[1], k * x.shape[2],\n                      l * x.shape[3]\n                    ],\n                    [x.shape[0], x.shape[1], x.shape[2], x.shape[3]]));\n              }\n            }\n          }\n        }\n      } else {\n        throw new Error(\n            `Gradient for tile operation is not implemented for rank-` +\n            `${x.rank} tensors yet.`);\n      }\n      return xGrad;\n    };\n    return {x: derX};\n  },\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Transpose, TransposeAttrs} from '../kernel_names';\nimport {GradConfig, NamedAttrMap} from '../kernel_registry';\nimport * as axis_util from '../ops/axis_util';\nimport {transpose} from '../ops/transpose';\nimport {Tensor} from '../tensor';\n\nexport const transposeGradConfig: GradConfig = {\n  kernelName: Transpose,\n  gradFunc: (dy: Tensor, saved: Tensor[], attrs: NamedAttrMap) => {\n    const transposeAttrs: TransposeAttrs = attrs as {} as TransposeAttrs;\n    const {perm} = transposeAttrs;\n    const undoPerm = axis_util.getUndoAxesPermutation(perm);\n    return {x: () => transpose(dy, undoPerm)};\n  }\n};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../environment';\n\nimport {Platform} from './platform';\n\nexport class PlatformBrowser implements Platform {\n  // According to the spec, the built-in encoder can do only UTF-8 encoding.\n  // https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/TextEncoder\n  private textEncoder: TextEncoder;\n\n  fetch(path: string, init?: RequestInit): Promise<Response> {\n    return fetch(path, init);\n  }\n\n  now(): number {\n    return performance.now();\n  }\n\n  encode(text: string, encoding: string): Uint8Array {\n    if (encoding !== 'utf-8' && encoding !== 'utf8') {\n      throw new Error(\n          `Browser's encoder only supports utf-8, but got ${encoding}`);\n    }\n    if (this.textEncoder == null) {\n      this.textEncoder = new TextEncoder();\n    }\n    return this.textEncoder.encode(text);\n  }\n  decode(bytes: Uint8Array, encoding: string): string {\n    return new TextDecoder(encoding).decode(bytes);\n  }\n}\n\nif (env().get('IS_BROWSER')) {\n  env().setPlatform('browser', new PlatformBrowser());\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {env} from '../environment';\n\nimport {Platform} from './platform';\n\n// We are wrapping this within an object so it can be stubbed by Jasmine.\nexport const getNodeFetch = {\n  // tslint:disable-next-line:no-require-imports\n  importFetch: () => require('node-fetch')\n};\n\ntype FetchFn = (url: string, init?: RequestInit) => Promise<Response>;\nlet systemFetch: FetchFn;\n// These getters and setters are for testing so we don't export a mutable\n// variable.\nexport function resetSystemFetch() {\n  systemFetch = null;\n}\nexport function setSystemFetch(fetchFn: FetchFn) {\n  systemFetch = fetchFn;\n}\nexport function getSystemFetch(): FetchFn {\n  return systemFetch;\n}\n\nexport class PlatformNode implements Platform {\n  private textEncoder: TextEncoder;\n  // tslint:disable-next-line:no-any\n  util: any;\n\n  constructor() {\n    // tslint:disable-next-line:no-require-imports\n    this.util = require('util');\n    // According to the spec, the built-in encoder can do only UTF-8 encoding.\n    // https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/TextEncoder\n    this.textEncoder = new this.util.TextEncoder();\n  }\n\n  fetch(path: string, requestInits?: RequestInit): Promise<Response> {\n    if (env().global.fetch != null) {\n      return env().global.fetch(path, requestInits);\n    }\n\n    if (systemFetch == null) {\n      systemFetch = getNodeFetch.importFetch();\n    }\n    return systemFetch(path, requestInits);\n  }\n\n  now(): number {\n    const time = process.hrtime();\n    return time[0] * 1000 + time[1] / 1000000;\n  }\n\n  encode(text: string, encoding: string): Uint8Array {\n    if (encoding !== 'utf-8' && encoding !== 'utf8') {\n      throw new Error(\n          `Node built-in encoder only supports utf-8, but got ${encoding}`);\n    }\n    return this.textEncoder.encode(text);\n  }\n  decode(bytes: Uint8Array, encoding: string): string {\n    if (bytes.length === 0) {\n      return '';\n    }\n    return new this.util.TextDecoder(encoding).decode(bytes);\n  }\n}\n\nif (env().get('IS_NODE')) {\n  env().setPlatform('node', new PlatformNode());\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/* Type definitions for exporting and importing of models. */\n\n/**\n * A map from Tensor dtype to number of bytes per element of the Tensor.\n */\nexport const DTYPE_VALUE_SIZE_MAP: {[dtype: string]: number} = {\n  'float32': 4,\n  'int32': 4,\n  'uint16': 2,\n  'uint8': 1,\n  'bool': 1,\n};\n\n/**\n * A weight manifest.\n *\n * The weight manifest consists of an ordered list of weight-manifest groups.\n * Each weight-manifest group (\"group\" for short hereafter) consists of a\n * number of weight values stored in a number of paths.\n * See the documentation of `WeightManifestGroupConfig` below for more details.\n */\nexport declare type WeightsManifestConfig = WeightsManifestGroupConfig[];\n\n/**\n * A weight-manifest group.\n *\n * Consists of an ordered list of weight values encoded in binary format,\n * stored in an ordered list of paths.\n */\nexport declare interface WeightsManifestGroupConfig {\n  /**\n   * An ordered list of paths.\n   *\n   * Paths are intentionally abstract in order to be general. For example, they\n   * can be relative URL paths or relative paths on the file system.\n   */\n  paths: string[];\n\n  /**\n   * Specifications of the weights stored in the paths.\n   */\n  weights: WeightsManifestEntry[];\n}\n\n/**\n * Group to which the weight belongs.\n *\n * - 'optimizer': Weight from a stateful optimizer.\n */\nexport type WeightGroup = 'model'|'optimizer';\n\n/**\n * An entry in the weight manifest.\n *\n * The entry contains specification of a weight.\n */\nexport declare interface WeightsManifestEntry {\n  /**\n   * Name of the weight, e.g., 'Dense_1/bias'\n   */\n  name: string;\n\n  /**\n   * Shape of the weight.\n   */\n  shape: number[];\n\n  /**\n   * Data type of the weight.\n   */\n  dtype: 'float32'|'int32'|'bool'|'string';\n\n  /**\n   * Type of the weight.\n   *\n   * Optional.\n   *\n   * The value 'optimizer' indicates the weight belongs to an optimizer\n   * (i.e., used only during model training and not during inference).\n   */\n  group?: WeightGroup;\n\n  /**\n   * Information for dequantization of the weight.\n   */\n  quantization?: {\n    scale: number,           // The scaling constant to multiply by.\n    min: number,             // The (possibly nudged) minimum weight to add.\n    dtype: 'uint16'|'uint8'  // The dtype of the quantized weights.\n  };\n}\n\n/**\n * Options for saving a model.\n * @innamespace io\n */\nexport interface SaveConfig {\n  /**\n   * Whether to save only the trainable weights of the model, ignoring the\n   * non-trainable ones.\n   */\n  trainableOnly?: boolean;\n\n  /**\n   * Whether the optimizer will be saved (if exists).\n   *\n   * Default: `false`.\n   */\n  includeOptimizer?: boolean;\n}\n\n/**\n * Result of a saving operation.\n */\nexport interface SaveResult {\n  /**\n   * Information about the model artifacts saved.\n   */\n  modelArtifactsInfo: ModelArtifactsInfo;\n\n  /**\n   * HTTP responses from the server that handled the model-saving request (if\n   * any). This is applicable only to server-based saving routes.\n   */\n  responses?: Response[];\n\n  /**\n   * Error messages and related data (if any).\n   */\n  errors?: Array<{}|string>;\n}\n\nexport declare interface ModelArtifactsInfo {\n  /**\n   * Timestamp for when the model is saved.\n   */\n  dateSaved: Date;\n\n  /**\n   * TODO (cais,yassogba) consider removing GraphDef as GraphDefs now\n   * come in a JSON format and none of our IOHandlers support a non json\n   * format. We could conder replacing this with 'Binary' if we want to\n   * allow future handlers to save to non json formats (though they will\n   * probably want more information than 'Binary').\n   * Type of the model topology\n   *\n   * Type of the model topology\n   *\n   * Possible values:\n   *   - JSON: JSON config (human-readable, e.g., Keras JSON).\n   *   - GraphDef: TensorFlow\n   *     [GraphDef](https://www.tensorflow.org/extend/tool_developers/#graphdef)\n   *     protocol buffer (binary).\n   */\n  modelTopologyType: 'JSON'|'GraphDef';\n\n  /**\n   * Size of model topology (Keras JSON or GraphDef), in bytes.\n   */\n  modelTopologyBytes?: number;\n\n  /**\n   * Size of weight specification or manifest, in bytes.\n   */\n  weightSpecsBytes?: number;\n\n  /**\n   * Size of weight value data, in bytes.\n   */\n  weightDataBytes?: number;\n}\n\n/** Model training configuration. */\nexport declare interface TrainingConfig {\n  // TODO(cais): Tighten the typing once keras spec is available to tfjs-core.\n  // See\n  // tslint:disable-next-line:max-line-length\n  // https://github.com/tensorflow/tfjs-layers/blob/master/src/keras_format/training_config.ts\n  /** Optimizer used for the model training. */\n  optimizer_config: {};\n\n  // TODO(cais): Tighten the typing once keras spec is available to tfjs-core.\n  /** Loss function(s) for the model's output(s). */\n  loss: string|string[]|{[key: string]: string};\n\n  // TODO(cais): Tighten the typing once keras spec is available to tfjs-core.\n  /** Metric function(s) for the model's output(s). */\n  metrics?: string[]|{[key: string]: string};\n\n  // TODO(cais): Tighten the typing once keras spec is available to tfjs-core.\n  weighted_metrics?: string[];\n\n  // TODO(cais): Tighten the typing once keras spec is available to tfjs-core.\n  sample_weight_mode?: string;\n\n  loss_weights?: number[]|{[key: string]: number};\n}\n\n/**\n * The serialized artifacts of a model, including topology and weights.\n *\n * The `modelTopology`, `trainingConfig`, `weightSpecs` and `weightData` fields\n * of this interface are optional, in order to support topology- or weights-only\n * saving and loading.\n *\n * Note this interface is used internally in IOHandlers.  For the file format\n * written to disk as `model.json`, see `ModelJSON`.\n */\nexport declare interface ModelArtifacts {\n  /**\n   * Model topology.\n   *\n   * For Keras-style `tf.Model`s, this is a JSON object.\n   * For TensorFlow-style models (e.g., `SavedModel`), this is the JSON\n   * encoding of the `GraphDef` protocol buffer.\n   */\n  modelTopology?: {}|ArrayBuffer;\n\n  /**\n   * Serialized configuration for the model's training.\n   */\n  trainingConfig?: TrainingConfig;\n\n  /**\n   * Weight specifications.\n   *\n   * This corresponds to the weightsData below.\n   */\n  weightSpecs?: WeightsManifestEntry[];\n\n  /**\n   * Binary buffer for all weight values concatenated in the order specified\n   * by `weightSpecs`.\n   */\n  weightData?: ArrayBuffer;\n\n  /**\n   * Hard-coded format name for models saved from TensorFlow.js or converted\n   * by TensorFlow.js Converter.\n   */\n  format?: string;\n\n  /**\n   * What library is responsible for originally generating this artifact.\n   *\n   * Used for debugging purposes. E.g., 'TensorFlow.js v1.0.0'.\n   */\n  generatedBy?: string;\n\n  /**\n   * What library or tool is responsible for converting the original model\n   * to this format, applicable only if the model is output by a converter.\n   *\n   * Used for debugging purposes.  E.g., 'TensorFlow.js Converter v1.0.0'.\n   *\n   * A value of `null` means the model artifacts are generated without any\n   * conversion process (e.g., saved directly from a TensorFlow.js\n   * `tf.LayersModel` instance.)\n   */\n  convertedBy?: string|null;\n\n  /**\n   * User-defined metadata about the model.\n   */\n  userDefinedMetadata?: {};\n}\n\n/**\n * The on-disk format of the `model.json` file.\n *\n * TF.js 1.0 always populates the optional fields when writing model.json.\n * Prior versions did not provide those fields.\n */\nexport declare interface ModelJSON {\n  /**\n   * Model topology.\n   *\n   * For Keras-style `tf.Model`s, this is a JSON object.\n   * For TensorFlow-style models (e.g., `SavedModel`), this is the JSON\n   * encoding of the `GraphDef` protocol buffer.\n   */\n  modelTopology: {};\n\n  /** Model training configuration. */\n  trainingConfig?: TrainingConfig;\n\n  /**\n   * Weights manifest.\n   *\n   * The weights manifest consists of an ordered list of weight-manifest\n   * groups. Each weight-manifest group consists of a number of weight values\n   * stored in a number of paths. See the documentation of\n   * `WeightsManifestConfig` for more details.\n   */\n  weightsManifest: WeightsManifestConfig;\n\n  /**\n   * Hard-coded format name for models saved from TensorFlow.js or converted\n   * by TensorFlow.js Converter.\n   */\n  format?: string;\n\n  /**\n   * What library is responsible for originally generating this artifact.\n   *\n   * Used for debugging purposes. E.g., 'TensorFlow.js v1.0.0'.\n   */\n  generatedBy?: string;\n\n  /**\n   * What library or tool is responsible for converting the original model\n   * to this format, applicable only if the model is output by a converter.\n   *\n   * Used for debugging purposes.  E.g., 'TensorFlow.js Converter v1.0.0'.\n   *\n   * A value of `null` means the model artifacts are generated without any\n   * conversion process (e.g., saved directly from a TensorFlow.js\n   * `tf.LayersModel` instance.)\n   */\n  convertedBy?: string|null;\n\n  /**\n   * User-defined metadata about the model.\n   */\n  userDefinedMetadata?: {};\n}\n\n/**\n * Type definition for handlers of loading operations.\n */\nexport type LoadHandler = () => Promise<ModelArtifacts>;\n\n/**\n * Type definition for handlers of saving operations.\n */\nexport type SaveHandler = (modelArtifact: ModelArtifacts) =>\n    Promise<SaveResult>;\n\n/**\n * Interface for a model import/export handler.\n *\n * The `save` and `load` handlers are both optional, in order to allow handlers\n * that support only saving or loading.\n */\n// tslint:disable-next-line:interface-name\nexport interface IOHandler {\n  save?: SaveHandler;\n  load?: LoadHandler;\n}\n\n/**\n * An interface for the manager of a model store.\n *\n * A model store is defined as a storage medium on which multiple models can\n * be stored. Each stored model has a unique `path` as its identifier.\n * A `ModelStoreManager` for the store allows actions including\n *\n * - Listing the models stored in the store.\n * - Deleting a model from the store.\n */\nexport interface ModelStoreManager {\n  /**\n   * List all models in the model store.\n   *\n   * @returns A dictionary mapping paths of existing models to their\n   *   model artifacts info. Model artifacts info include type of the model's\n   *   topology, byte sizes of the topology, weights, etc.\n   */\n  listModels(): Promise<{[path: string]: ModelArtifactsInfo}>;\n\n  /**\n   * Remove a model specified by `path`.\n   *\n   * @param path\n   * @returns ModelArtifactsInfo of the deleted model (if and only if deletion\n   *   is successful).\n   * @throws Error if deletion fails, e.g., if no model exists at `path`.\n   */\n  removeModel(path: string): Promise<ModelArtifactsInfo>;\n}\n\n/**\n * Callback for the progress of a long-running action such as an HTTP\n * request for a large binary object.\n *\n * `fraction` should be a number in the [0, 1] interval, indicating how\n * much of the action has completed.\n */\nexport type OnProgressCallback = (fraction: number) => void;\n\n/** @innamespace io */\nexport interface LoadOptions {\n  /**\n   * RequestInit (options) for HTTP requests.\n   *\n   * For detailed information on the supported fields, see\n   * [https://developer.mozilla.org/en-US/docs/Web/API/Request/Request](\n   *     https://developer.mozilla.org/en-US/docs/Web/API/Request/Request)\n   */\n  requestInit?: RequestInit;\n\n  /**\n   * Progress callback.\n   */\n  onProgress?: OnProgressCallback;\n\n  /**\n   * A function used to override the `window.fetch` function.\n   */\n  fetchFunc?: Function;\n\n  /**\n   * Strict loading model: whether extraneous weights or missing\n   * weights should trigger an `Error`.\n   *\n   * If `true`, require that the provided weights exactly match those\n   * required by the layers. `false` means that both extra weights\n   * and missing weights will be silently ignored.\n   *\n   * Default: `true`.\n   */\n  strict?: boolean;\n\n  /**\n   * Path prefix for weight files, by default this is calculated from the\n   * path of the model JSON file.\n   *\n   * For instance, if the path to the model JSON file is\n   * `http://localhost/foo/model.json`, then the default path prefix will be\n   * `http://localhost/foo/`. If a weight file has the path value\n   * `group1-shard1of2` in the weight manifest, then the weight file will be\n   * loaded from `http://localhost/foo/group1-shard1of2` by default. However,\n   * if you provide a `weightPathPrefix` value of\n   * `http://localhost/foo/alt-weights`, then the weight file will be loaded\n   * from the path `http://localhost/foo/alt-weights/group1-shard1of2` instead.\n   */\n  weightPathPrefix?: string;\n\n  /**\n   * Whether the module or model is to be loaded from TF Hub.\n   *\n   * Setting this to `true` allows passing a TF-Hub module URL, omitting the\n   * standard model file name and the query parameters.\n   *\n   * Default: `false`.\n   */\n  fromTFHub?: boolean;\n}\n\n/**\n * Additional options for Platform.fetch\n */\nexport interface RequestDetails {\n  /**\n   * Is this request for a binary file (as opposed to a json file)\n   */\n  isBinary?: boolean;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {tensor} from '../ops/tensor_ops';\nimport {NamedTensor, NamedTensorMap} from '../tensor_types';\nimport {TypedArray} from '../types';\nimport {sizeFromShape} from '../util';\n\nimport {DTYPE_VALUE_SIZE_MAP, ModelArtifacts, ModelArtifactsInfo, WeightGroup, WeightsManifestEntry} from './types';\n\n/** Number of bytes reserved for the length of the string. (32bit integer). */\nconst NUM_BYTES_STRING_LENGTH = 4;\n\n/**\n * Encode a map from names to weight values as an ArrayBuffer, along with an\n * `Array` of `WeightsManifestEntry` as specification of the encoded weights.\n *\n * This function does not perform sharding.\n *\n * This function is the reverse of `decodeWeights`.\n *\n * @param tensors A map (\"dict\") from names to tensors.\n * @param group Group to which the weights belong (optional).\n * @returns A `Promise` of\n *   - A flat `ArrayBuffer` with all the binary values of the `Tensor`s\n *     concatenated.\n *   - An `Array` of `WeightManifestEntry`s, carrying information including\n *     tensor names, `dtype`s and shapes.\n * @throws Error: on unsupported tensor `dtype`.\n */\nexport async function encodeWeights(\n    tensors: NamedTensorMap|NamedTensor[], group?: WeightGroup):\n    Promise<{data: ArrayBuffer, specs: WeightsManifestEntry[]}> {\n  // TODO(adarob, cais): Support quantization.\n  const specs: WeightsManifestEntry[] = [];\n  const dataPromises: Array<Promise<TypedArray>> = [];\n\n  const names: string[] = Array.isArray(tensors) ?\n      tensors.map(tensor => tensor.name) :\n      Object.keys(tensors);\n\n  for (let i = 0; i < names.length; ++i) {\n    const name = names[i];\n    const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name];\n    if (t.dtype !== 'float32' && t.dtype !== 'int32' && t.dtype !== 'bool' &&\n        t.dtype !== 'string') {\n      throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`);\n    }\n    const spec: WeightsManifestEntry = {name, shape: t.shape, dtype: t.dtype};\n    if (t.dtype === 'string') {\n      const utf8bytes = new Promise<TypedArray>(async resolve => {\n        const vals = await t.bytes() as Uint8Array[];\n        const totalNumBytes = vals.reduce((p, c) => p + c.length, 0) +\n            NUM_BYTES_STRING_LENGTH * vals.length;\n        const bytes = new Uint8Array(totalNumBytes);\n        let offset = 0;\n        for (let i = 0; i < vals.length; i++) {\n          const val = vals[i];\n          const bytesOfLength =\n              new Uint8Array(new Uint32Array([val.length]).buffer);\n          bytes.set(bytesOfLength, offset);\n          offset += NUM_BYTES_STRING_LENGTH;\n          bytes.set(val, offset);\n          offset += val.length;\n        }\n        resolve(bytes);\n      });\n      dataPromises.push(utf8bytes);\n    } else {\n      dataPromises.push(t.data());\n    }\n    if (group != null) {\n      spec.group = group;\n    }\n    specs.push(spec);\n  }\n\n  const tensorValues = await Promise.all(dataPromises);\n  return {data: concatenateTypedArrays(tensorValues), specs};\n}\n\n/**\n * Decode flat ArrayBuffer as weights.\n *\n * This function does not handle sharding.\n *\n * This function is the reverse of `encodeWeights`.\n *\n * @param buffer A flat ArrayBuffer carrying the binary values of the tensors\n *   concatenated in the order specified in `specs`.\n * @param specs Specifications of the names, dtypes and shapes of the tensors\n *   whose value are encoded by `buffer`.\n * @return A map from tensor name to tensor value, with the names corresponding\n *   to names in `specs`.\n * @throws Error, if any of the tensors has unsupported dtype.\n */\nexport function decodeWeights(\n    buffer: ArrayBuffer, specs: WeightsManifestEntry[]): NamedTensorMap {\n  // TODO(adarob, cais): Support quantization.\n  const out: NamedTensorMap = {};\n  let offset = 0;\n  for (const spec of specs) {\n    const name = spec.name;\n    const dtype = spec.dtype;\n    const shape = spec.shape;\n    const size = sizeFromShape(shape);\n    let values: TypedArray|string[]|Uint8Array[];\n\n    if ('quantization' in spec) {\n      const quantization = spec.quantization;\n      if (quantization.dtype !== 'uint8' && quantization.dtype !== 'uint16') {\n        throw new Error(\n            `Weight ${spec.name} has unknown ` +\n            `quantization dtype ${quantization.dtype}. ` +\n            `Supported quantization dtypes are: 'uint8' and 'uint16'.`);\n      }\n      const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n      const byteBuffer =\n          buffer.slice(offset, offset + size * quantizationSizeFactor);\n      const quantizedArray = (quantization.dtype === 'uint8') ?\n          new Uint8Array(byteBuffer) :\n          new Uint16Array(byteBuffer);\n      if (dtype === 'float32') {\n        values = Float32Array.from(\n            quantizedArray, v => v * quantization.scale + quantization.min);\n      } else if (dtype === 'int32') {\n        values = Int32Array.from(\n            quantizedArray,\n            v => Math.round(v * quantization.scale + quantization.min));\n      } else {\n        throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n      }\n      offset += size * quantizationSizeFactor;\n    } else if (dtype === 'string') {\n      const size = sizeFromShape(spec.shape);\n      values = [];\n      for (let i = 0; i < size; i++) {\n        const byteLength = new Uint32Array(\n            buffer.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0];\n        offset += NUM_BYTES_STRING_LENGTH;\n        const bytes = new Uint8Array(buffer.slice(offset, offset + byteLength));\n        (values as Uint8Array[]).push(bytes);\n        offset += byteLength;\n      }\n    } else {\n      const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype];\n      const byteBuffer = buffer.slice(offset, offset + size * dtypeFactor);\n\n      if (dtype === 'float32') {\n        values = new Float32Array(byteBuffer);\n      } else if (dtype === 'int32') {\n        values = new Int32Array(byteBuffer);\n      } else if (dtype === 'bool') {\n        values = new Uint8Array(byteBuffer);\n      } else {\n        throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n      }\n      offset += size * dtypeFactor;\n    }\n\n    out[name] = tensor(values, shape, dtype);\n  }\n  return out;\n}\n\n/**\n * Concatenate TypedArrays into an ArrayBuffer.\n */\nexport function concatenateTypedArrays(xs: TypedArray[]): ArrayBuffer {\n  // TODO(adarob, cais): Support quantization.\n  if (xs === null) {\n    throw new Error(`Invalid input value: ${JSON.stringify(xs)}`);\n  }\n\n  let totalByteLength = 0;\n\n  // `normalizedXs` is here for this reason: a `TypedArray`'s `buffer'\n  // can have a different byte length from that of the `TypedArray` itself,\n  // for example, when the `TypedArray` is created from an offset in an\n  // `ArrayBuffer`. `normliazedXs` holds `TypedArray`s whose `buffer`s match\n  // the `TypedArray` in byte length. If an element of `xs` does not show\n  // this property, a new `TypedArray` that satisfy this property will be\n  // constructed and pushed into `normalizedXs`.\n  const normalizedXs: TypedArray[] = [];\n  xs.forEach((x: TypedArray) => {\n    totalByteLength += x.byteLength;\n    // tslint:disable:no-any\n    normalizedXs.push(\n        x.byteLength === x.buffer.byteLength ? x :\n                                               new (x.constructor as any)(x));\n    if (!(x as any instanceof Float32Array || x as any instanceof Int32Array ||\n          x as any instanceof Uint8Array)) {\n      throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`);\n    }\n    // tslint:enable:no-any\n  });\n\n  const y = new Uint8Array(totalByteLength);\n  let offset = 0;\n  normalizedXs.forEach((x: TypedArray) => {\n    y.set(new Uint8Array(x.buffer), offset);\n    offset += x.byteLength;\n  });\n\n  return y.buffer;\n}\n\n// Use Buffer on Node.js instead of Blob/atob/btoa\nconst useNodeBuffer = typeof Buffer !== 'undefined' &&\n    (typeof Blob === 'undefined' || typeof atob === 'undefined' ||\n     typeof btoa === 'undefined');\n\n/**\n * Calculate the byte length of a JavaScript string.\n *\n * Note that a JavaScript string can contain wide characters, therefore the\n * length of the string is not necessarily equal to the byte length.\n *\n * @param str Input string.\n * @returns Byte length.\n */\nexport function stringByteLength(str: string): number {\n  if (useNodeBuffer) {\n    return Buffer.byteLength(str);\n  }\n  return new Blob([str]).size;\n}\n\n/**\n * Encode an ArrayBuffer as a base64 encoded string.\n *\n * @param buffer `ArrayBuffer` to be converted.\n * @returns A string that base64-encodes `buffer`.\n */\nexport function arrayBufferToBase64String(buffer: ArrayBuffer): string {\n  if (useNodeBuffer) {\n    return Buffer.from(buffer).toString('base64');\n  }\n  const buf = new Uint8Array(buffer);\n  let s = '';\n  for (let i = 0, l = buf.length; i < l; i++) {\n    s += String.fromCharCode(buf[i]);\n  }\n  return btoa(s);\n}\n\n/**\n * Decode a base64 string as an ArrayBuffer.\n *\n * @param str Base64 string.\n * @returns Decoded `ArrayBuffer`.\n */\nexport function base64StringToArrayBuffer(str: string): ArrayBuffer {\n  if (useNodeBuffer) {\n    const buf = Buffer.from(str, 'base64');\n    return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n  }\n  const s = atob(str);\n  const buffer = new Uint8Array(s.length);\n  for (let i = 0; i < s.length; ++i) {\n    buffer.set([s.charCodeAt(i)], i);\n  }\n  return buffer.buffer;\n}\n\n/**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers A number of array buffers to concatenate.\n * @returns Result of concatenating `buffers` in order.\n */\nexport function concatenateArrayBuffers(buffers: ArrayBuffer[]): ArrayBuffer {\n  let totalByteLength = 0;\n  buffers.forEach((buffer: ArrayBuffer) => {\n    totalByteLength += buffer.byteLength;\n  });\n\n  const temp = new Uint8Array(totalByteLength);\n  let offset = 0;\n  buffers.forEach((buffer: ArrayBuffer) => {\n    temp.set(new Uint8Array(buffer), offset);\n    offset += buffer.byteLength;\n  });\n  return temp.buffer;\n}\n\n/**\n * Get the basename of a path.\n *\n * Behaves in a way analogous to Linux's basename command.\n *\n * @param path\n */\nexport function basename(path: string): string {\n  const SEPARATOR = '/';\n  path = path.trim();\n  while (path.endsWith(SEPARATOR)) {\n    path = path.slice(0, path.length - 1);\n  }\n  const items = path.split(SEPARATOR);\n  return items[items.length - 1];\n}\n\n/**\n * Populate ModelArtifactsInfo fields for a model with JSON topology.\n * @param modelArtifacts\n * @returns A ModelArtifactsInfo object.\n */\nexport function getModelArtifactsInfoForJSON(modelArtifacts: ModelArtifacts):\n    ModelArtifactsInfo {\n  if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n    throw new Error('Expected JSON model topology, received ArrayBuffer.');\n  }\n\n  return {\n    dateSaved: new Date(),\n    modelTopologyType: 'JSON',\n    modelTopologyBytes: modelArtifacts.modelTopology == null ?\n        0 :\n        stringByteLength(JSON.stringify(modelArtifacts.modelTopology)),\n    weightSpecsBytes: modelArtifacts.weightSpecs == null ?\n        0 :\n        stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)),\n    weightDataBytes: modelArtifacts.weightData == null ?\n        0 :\n        modelArtifacts.weightData.byteLength,\n  };\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {IOHandler} from './types';\n\nexport type IORouter = (url: string|string[], onProgress?: Function) =>\n    IOHandler;\n\nexport class IORouterRegistry {\n  // Singleton instance.\n  private static instance: IORouterRegistry;\n\n  private saveRouters: IORouter[];\n  private loadRouters: IORouter[];\n\n  private constructor() {\n    this.saveRouters = [];\n    this.loadRouters = [];\n  }\n\n  private static getInstance(): IORouterRegistry {\n    if (IORouterRegistry.instance == null) {\n      IORouterRegistry.instance = new IORouterRegistry();\n    }\n    return IORouterRegistry.instance;\n  }\n\n  /**\n   * Register a save-handler router.\n   *\n   * @param saveRouter A function that maps a URL-like string onto an instance\n   * of `IOHandler` with the `save` method defined or `null`.\n   */\n  static registerSaveRouter(saveRouter: IORouter) {\n    IORouterRegistry.getInstance().saveRouters.push(saveRouter);\n  }\n\n  /**\n   * Register a load-handler router.\n   *\n   * @param loadRouter A function that maps a URL-like string onto an instance\n   * of `IOHandler` with the `load` method defined or `null`.\n   */\n  static registerLoadRouter(loadRouter: IORouter) {\n    IORouterRegistry.getInstance().loadRouters.push(loadRouter);\n  }\n\n  /**\n   * Look up IOHandler for saving, given a URL-like string.\n   *\n   * @param url\n   * @returns If only one match is found, an instance of IOHandler with the\n   * `save` method defined. If no match is found, `null`.\n   * @throws Error, if more than one match is found.\n   */\n  static getSaveHandlers(url: string|string[]): IOHandler[] {\n    return IORouterRegistry.getHandlers(url, 'save');\n  }\n\n  /**\n   * Look up IOHandler for loading, given a URL-like string.\n   *\n   * @param url\n   * @param onProgress Optional, progress callback function, fired periodically\n   *   before the load is completed.\n   * @returns All valid handlers for `url`, given the currently registered\n   *   handler routers.\n   */\n  static getLoadHandlers(url: string|string[], onProgress?: Function):\n      IOHandler[] {\n    return IORouterRegistry.getHandlers(url, 'load', onProgress);\n  }\n\n  private static getHandlers(\n      url: string|string[], handlerType: 'save'|'load',\n      onProgress?: Function): IOHandler[] {\n    const validHandlers: IOHandler[] = [];\n    const routers = handlerType === 'load' ?\n        IORouterRegistry.getInstance().loadRouters :\n        IORouterRegistry.getInstance().saveRouters;\n    routers.forEach(router => {\n      const handler = router(url, onProgress);\n      if (handler !== null) {\n        validHandlers.push(handler);\n      }\n    });\n    return validHandlers;\n  }\n}\n\nexport const registerSaveRouter = (loudRouter: IORouter) =>\n    IORouterRegistry.registerSaveRouter(loudRouter);\nexport const registerLoadRouter = (loudRouter: IORouter) =>\n    IORouterRegistry.registerLoadRouter(loudRouter);\nexport const getSaveHandlers = (url: string|string[]) =>\n    IORouterRegistry.getSaveHandlers(url);\nexport const getLoadHandlers = (url: string|string[], onProgress?: Function) =>\n    IORouterRegistry.getLoadHandlers(url, onProgress);\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Classes and functions for model management across multiple storage mediums.\n *\n * Supported client actions:\n * - Listing models on all registered storage mediums.\n * - Remove model by URL from any registered storage mediums, by using URL\n *   string.\n * - Moving or copying model from one path to another in the same medium or from\n *   one medium to another, by using URL strings.\n */\n\nimport {assert} from '../util';\n\nimport {IORouterRegistry} from './router_registry';\nimport {ModelArtifactsInfo, ModelStoreManager} from './types';\n\nconst URL_SCHEME_SUFFIX = '://';\n\nexport class ModelStoreManagerRegistry {\n  // Singleton instance.\n  private static instance: ModelStoreManagerRegistry;\n\n  private managers: {[scheme: string]: ModelStoreManager};\n\n  private constructor() {\n    this.managers = {};\n  }\n\n  private static getInstance(): ModelStoreManagerRegistry {\n    if (ModelStoreManagerRegistry.instance == null) {\n      ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry();\n    }\n    return ModelStoreManagerRegistry.instance;\n  }\n\n  /**\n   * Register a save-handler router.\n   *\n   * @param saveRouter A function that maps a URL-like string onto an instance\n   * of `IOHandler` with the `save` method defined or `null`.\n   */\n  static registerManager(scheme: string, manager: ModelStoreManager) {\n    assert(scheme != null, () => 'scheme must not be undefined or null.');\n    if (scheme.endsWith(URL_SCHEME_SUFFIX)) {\n      scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX));\n    }\n    assert(scheme.length > 0, () => 'scheme must not be an empty string.');\n    const registry = ModelStoreManagerRegistry.getInstance();\n    assert(\n        registry.managers[scheme] == null,\n        () => `A model store manager is already registered for scheme '${\n            scheme}'.`);\n    registry.managers[scheme] = manager;\n  }\n\n  static getManager(scheme: string): ModelStoreManager {\n    const manager = this.getInstance().managers[scheme];\n    if (manager == null) {\n      throw new Error(`Cannot find model manager for scheme '${scheme}'`);\n    }\n    return manager;\n  }\n\n  static getSchemes(): string[] {\n    return Object.keys(this.getInstance().managers);\n  }\n}\n\n/**\n * Helper method for parsing a URL string into a scheme and a path.\n *\n * @param url E.g., 'localstorage://my-model'\n * @returns A dictionary with two fields: scheme and path.\n *   Scheme: e.g., 'localstorage' in the example above.\n *   Path: e.g., 'my-model' in the example above.\n */\nfunction parseURL(url: string): {scheme: string, path: string} {\n  if (url.indexOf(URL_SCHEME_SUFFIX) === -1) {\n    throw new Error(\n        `The url string provided does not contain a scheme. ` +\n        `Supported schemes are: ` +\n        `${ModelStoreManagerRegistry.getSchemes().join(',')}`);\n  }\n  return {\n    scheme: url.split(URL_SCHEME_SUFFIX)[0],\n    path: url.split(URL_SCHEME_SUFFIX)[1],\n  };\n}\n\nasync function cloneModelInternal(\n    sourceURL: string, destURL: string,\n    deleteSource = false): Promise<ModelArtifactsInfo> {\n  assert(\n      sourceURL !== destURL,\n      () => `Old path and new path are the same: '${sourceURL}'`);\n\n  const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL);\n  assert(\n      loadHandlers.length > 0,\n      () => `Copying failed because no load handler is found for source URL ${\n          sourceURL}.`);\n  assert(\n      loadHandlers.length < 2,\n      () => `Copying failed because more than one (${loadHandlers.length}) ` +\n          `load handlers for source URL ${sourceURL}.`);\n  const loadHandler = loadHandlers[0];\n\n  const saveHandlers = IORouterRegistry.getSaveHandlers(destURL);\n  assert(\n      saveHandlers.length > 0,\n      () => `Copying failed because no save handler is found for destination ` +\n          `URL ${destURL}.`);\n  assert(\n      saveHandlers.length < 2,\n      () => `Copying failed because more than one (${loadHandlers.length}) ` +\n          `save handlers for destination URL ${destURL}.`);\n  const saveHandler = saveHandlers[0];\n\n  const sourceScheme = parseURL(sourceURL).scheme;\n  const sourcePath = parseURL(sourceURL).path;\n  const sameMedium = sourceScheme === parseURL(sourceURL).scheme;\n\n  const modelArtifacts = await loadHandler.load();\n\n  // If moving within the same storage medium, remove the old model as soon as\n  // the loading is done. Without doing this, it is possible that the combined\n  // size of the two models will cause the cloning to fail.\n  if (deleteSource && sameMedium) {\n    await ModelStoreManagerRegistry.getManager(sourceScheme)\n        .removeModel(sourcePath);\n  }\n\n  const saveResult = await saveHandler.save(modelArtifacts);\n\n  // If moving between mediums, the deletion is done after the save succeeds.\n  // This guards against the case in which saving to the destination medium\n  // fails.\n  if (deleteSource && !sameMedium) {\n    await ModelStoreManagerRegistry.getManager(sourceScheme)\n        .removeModel(sourcePath);\n  }\n\n  return saveResult.modelArtifactsInfo;\n}\n\n/**\n * List all models stored in registered storage mediums.\n *\n * For a web browser environment, the registered mediums are Local Storage and\n * IndexedDB.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n *     {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @returns A `Promise` of a dictionary mapping URLs of existing models to\n * their model artifacts info. URLs include medium-specific schemes, e.g.,\n *   'indexeddb://my/model/1'. Model artifacts info include type of the\n * model's topology, byte sizes of the topology, weights, etc.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Management',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nasync function listModels(): Promise<{[url: string]: ModelArtifactsInfo}> {\n  const schemes = ModelStoreManagerRegistry.getSchemes();\n  const out: {[url: string]: ModelArtifactsInfo} = {};\n  for (const scheme of schemes) {\n    const schemeOut =\n        await ModelStoreManagerRegistry.getManager(scheme).listModels();\n    for (const path in schemeOut) {\n      const url = scheme + URL_SCHEME_SUFFIX + path;\n      out[url] = schemeOut[path];\n    }\n  }\n  return out;\n}\n\n/**\n * Remove a model specified by URL from a reigstered storage medium.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n *     {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @param url A URL to a stored model, with a scheme prefix, e.g.,\n *   'localstorage://my-model-1', 'indexeddb://my/model/2'.\n * @returns ModelArtifactsInfo of the deleted model (if and only if deletion\n *   is successful).\n * @throws Error if deletion fails, e.g., if no model exists at `path`.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Management',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nasync function removeModel(url: string): Promise<ModelArtifactsInfo> {\n  const schemeAndPath = parseURL(url);\n  const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme);\n  return manager.removeModel(schemeAndPath.path);\n}\n\n/**\n * Copy a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Copying within a storage medium, e.g.,\n *    `tf.io.copyModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Copying between two storage mediums, e.g.,\n *    `tf.io.copyModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n *     {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Copy the model, from Local Storage to IndexedDB.\n * await tf.io.copyModel(\n *     'localstorage://demo/management/model1',\n *     'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove both models.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of copying.\n * @param destURL Destination URL of copying.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n *   is successful).\n * @throws Error if copying fails, e.g., if no model exists at `sourceURL`, or\n *   if `oldPath` and `newPath` are identical.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Management',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nasync function copyModel(\n    sourceURL: string, destURL: string): Promise<ModelArtifactsInfo> {\n  const deleteSource = false;\n  return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\n\n/**\n * Move a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Moving within a storage medium, e.g.,\n *    `tf.io.moveModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Moving between two storage mediums, e.g.,\n *    `tf.io.moveModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n *     {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Move the model, from Local Storage to IndexedDB.\n * await tf.io.moveModel(\n *     'localstorage://demo/management/model1',\n *     'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove the moved model.\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of moving.\n * @param destURL Destination URL of moving.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n *   is successful).\n * @throws Error if moving fails, e.g., if no model exists at `sourceURL`, or\n *   if `oldPath` and `newPath` are identical.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Management',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nasync function moveModel(\n    sourceURL: string, destURL: string): Promise<ModelArtifactsInfo> {\n  const deleteSource = true;\n  return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\n\nexport {moveModel, copyModel, removeModel, listModels};\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../environment';\n\nimport {getModelArtifactsInfoForJSON} from './io_utils';\nimport {ModelStoreManagerRegistry} from './model_management';\nimport {IORouter, IORouterRegistry} from './router_registry';\nimport {IOHandler, ModelArtifacts, ModelArtifactsInfo, ModelStoreManager, SaveResult} from './types';\n\nconst DATABASE_NAME = 'tensorflowjs';\nconst DATABASE_VERSION = 1;\n\n// Model data and ModelArtifactsInfo (metadata) are stored in two separate\n// stores for efficient access of the list of stored models and their metadata.\n// 1. The object store for model data: topology, weights and weight manifests.\nconst MODEL_STORE_NAME = 'models_store';\n// 2. The object store for ModelArtifactsInfo, including meta-information such\n//    as the type of topology (JSON vs binary), byte size of the topology, byte\n//    size of the weights, etc.\nconst INFO_STORE_NAME = 'model_info_store';\n\n/**\n * Delete the entire database for tensorflow.js, including the models store.\n */\nexport async function deleteDatabase(): Promise<void> {\n  const idbFactory = getIndexedDBFactory();\n\n  return new Promise<void>((resolve, reject) => {\n    const deleteRequest = idbFactory.deleteDatabase(DATABASE_NAME);\n    deleteRequest.onsuccess = () => resolve();\n    deleteRequest.onerror = error => reject(error);\n  });\n}\n\nfunction getIndexedDBFactory(): IDBFactory {\n  if (!env().getBool('IS_BROWSER')) {\n    // TODO(cais): Add more info about what IOHandler subtypes are available.\n    //   Maybe point to a doc page on the web and/or automatically determine\n    //   the available IOHandlers and print them in the error message.\n    throw new Error(\n        'Failed to obtain IndexedDB factory because the current environment' +\n        'is not a web browser.');\n  }\n  // tslint:disable-next-line:no-any\n  const theWindow: any = window || self;\n  const factory = theWindow.indexedDB || theWindow.mozIndexedDB ||\n      theWindow.webkitIndexedDB || theWindow.msIndexedDB ||\n      theWindow.shimIndexedDB;\n  if (factory == null) {\n    throw new Error(\n        'The current browser does not appear to support IndexedDB.');\n  }\n  return factory;\n}\n\nfunction setUpDatabase(openRequest: IDBRequest) {\n  const db = openRequest.result as IDBDatabase;\n  db.createObjectStore(MODEL_STORE_NAME, {keyPath: 'modelPath'});\n  db.createObjectStore(INFO_STORE_NAME, {keyPath: 'modelPath'});\n}\n\n/**\n * IOHandler subclass: Browser IndexedDB.\n *\n * See the doc string of `browserIndexedDB` for more details.\n */\nexport class BrowserIndexedDB implements IOHandler {\n  protected readonly indexedDB: IDBFactory;\n  protected readonly modelPath: string;\n\n  static readonly URL_SCHEME = 'indexeddb://';\n\n  constructor(modelPath: string) {\n    this.indexedDB = getIndexedDBFactory();\n\n    if (modelPath == null || !modelPath) {\n      throw new Error(\n          'For IndexedDB, modelPath must not be null, undefined or empty.');\n    }\n    this.modelPath = modelPath;\n  }\n\n  async save(modelArtifacts: ModelArtifacts): Promise<SaveResult> {\n    // TODO(cais): Support saving GraphDef models.\n    if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n      throw new Error(\n          'BrowserLocalStorage.save() does not support saving model topology ' +\n          'in binary formats yet.');\n    }\n\n    return this.databaseAction(this.modelPath, modelArtifacts) as\n        Promise<SaveResult>;\n  }\n\n  async load(): Promise<ModelArtifacts> {\n    return this.databaseAction(this.modelPath) as Promise<ModelArtifacts>;\n  }\n\n  /**\n   * Perform database action to put model artifacts into or read model artifacts\n   * from IndexedDB object store.\n   *\n   * Whether the action is put or get depends on whether `modelArtifacts` is\n   * specified. If it is specified, the action will be put; otherwise the action\n   * will be get.\n   *\n   * @param modelPath A unique string path for the model.\n   * @param modelArtifacts If specified, it will be the model artifacts to be\n   *   stored in IndexedDB.\n   * @returns A `Promise` of `SaveResult`, if the action is put, or a `Promise`\n   *   of `ModelArtifacts`, if the action is get.\n   */\n  private databaseAction(modelPath: string, modelArtifacts?: ModelArtifacts):\n      Promise<ModelArtifacts|SaveResult> {\n    return new Promise<ModelArtifacts|SaveResult>((resolve, reject) => {\n      const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n      openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n\n      openRequest.onsuccess = () => {\n        const db = openRequest.result;\n\n        if (modelArtifacts == null) {\n          // Read model out from object store.\n          const modelTx = db.transaction(MODEL_STORE_NAME, 'readonly');\n          const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n          const getRequest = modelStore.get(this.modelPath);\n          getRequest.onsuccess = () => {\n            if (getRequest.result == null) {\n              db.close();\n              return reject(new Error(\n                  `Cannot find model with path '${this.modelPath}' ` +\n                  `in IndexedDB.`));\n            } else {\n              resolve(getRequest.result.modelArtifacts);\n            }\n          };\n          getRequest.onerror = error => {\n            db.close();\n            return reject(getRequest.error);\n          };\n          modelTx.oncomplete = () => db.close();\n        } else {\n          // Put model into object store.\n          const modelArtifactsInfo: ModelArtifactsInfo =\n              getModelArtifactsInfoForJSON(modelArtifacts);\n          // First, put ModelArtifactsInfo into info store.\n          const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n          let infoStore = infoTx.objectStore(INFO_STORE_NAME);\n          const putInfoRequest =\n              infoStore.put({modelPath: this.modelPath, modelArtifactsInfo});\n          let modelTx: IDBTransaction;\n          putInfoRequest.onsuccess = () => {\n            // Second, put model data into model store.\n            modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n            const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n            const putModelRequest = modelStore.put({\n              modelPath: this.modelPath,\n              modelArtifacts,\n              modelArtifactsInfo\n            });\n            putModelRequest.onsuccess = () => resolve({modelArtifactsInfo});\n            putModelRequest.onerror = error => {\n              // If the put-model request fails, roll back the info entry as\n              // well.\n              infoStore = infoTx.objectStore(INFO_STORE_NAME);\n              const deleteInfoRequest = infoStore.delete(this.modelPath);\n              deleteInfoRequest.onsuccess = () => {\n                db.close();\n                return reject(putModelRequest.error);\n              };\n              deleteInfoRequest.onerror = error => {\n                db.close();\n                return reject(putModelRequest.error);\n              };\n            };\n          };\n          putInfoRequest.onerror = error => {\n            db.close();\n            return reject(putInfoRequest.error);\n          };\n          infoTx.oncomplete = () => {\n            if (modelTx == null) {\n              db.close();\n            } else {\n              modelTx.oncomplete = () => db.close();\n            }\n          };\n        }\n      };\n      openRequest.onerror = error => reject(openRequest.error);\n    });\n  }\n}\n\nexport const indexedDBRouter: IORouter = (url: string|string[]) => {\n  if (!env().getBool('IS_BROWSER')) {\n    return null;\n  } else {\n    if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) {\n      return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length));\n    } else {\n      return null;\n    }\n  }\n};\nIORouterRegistry.registerSaveRouter(indexedDBRouter);\nIORouterRegistry.registerLoadRouter(indexedDBRouter);\n\n/**\n * Creates a browser IndexedDB IOHandler for saving and loading models.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n *     tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save('indexeddb://MyModel'));\n * console.log(saveResult);\n * ```\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n *   non-empty string.\n * @returns An instance of `BrowserIndexedDB` (sublcass of `IOHandler`),\n *   which can be used with, e.g., `tf.Model.save`.\n */\nexport function browserIndexedDB(modelPath: string): IOHandler {\n  return new BrowserIndexedDB(modelPath);\n}\n\nfunction maybeStripScheme(key: string) {\n  return key.startsWith(BrowserIndexedDB.URL_SCHEME) ?\n      key.slice(BrowserIndexedDB.URL_SCHEME.length) :\n      key;\n}\n\nexport class BrowserIndexedDBManager implements ModelStoreManager {\n  private indexedDB: IDBFactory;\n\n  constructor() {\n    this.indexedDB = getIndexedDBFactory();\n  }\n\n  async listModels(): Promise<{[path: string]: ModelArtifactsInfo}> {\n    return new Promise<{[path: string]: ModelArtifactsInfo}>(\n        (resolve, reject) => {\n          const openRequest =\n              this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n          openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n\n          openRequest.onsuccess = () => {\n            const db = openRequest.result;\n            const tx = db.transaction(INFO_STORE_NAME, 'readonly');\n            const store = tx.objectStore(INFO_STORE_NAME);\n            // tslint:disable:max-line-length\n            // Need to cast `store` as `any` here because TypeScript's DOM\n            // library does not have the `getAll()` method even though the\n            // method is supported in the latest version of most mainstream\n            // browsers:\n            // https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAll\n            // tslint:enable:max-line-length\n            // tslint:disable-next-line:no-any\n            const getAllInfoRequest = (store as any).getAll() as IDBRequest;\n            getAllInfoRequest.onsuccess = () => {\n              const out: {[path: string]: ModelArtifactsInfo} = {};\n              for (const item of getAllInfoRequest.result) {\n                out[item.modelPath] = item.modelArtifactsInfo;\n              }\n              resolve(out);\n            };\n            getAllInfoRequest.onerror = error => {\n              db.close();\n              return reject(getAllInfoRequest.error);\n            };\n            tx.oncomplete = () => db.close();\n          };\n          openRequest.onerror = error => reject(openRequest.error);\n        });\n  }\n\n  async removeModel(path: string): Promise<ModelArtifactsInfo> {\n    path = maybeStripScheme(path);\n    return new Promise<ModelArtifactsInfo>((resolve, reject) => {\n      const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n      openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n\n      openRequest.onsuccess = () => {\n        const db = openRequest.result;\n        const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n        const infoStore = infoTx.objectStore(INFO_STORE_NAME);\n\n        const getInfoRequest = infoStore.get(path);\n        let modelTx: IDBTransaction;\n        getInfoRequest.onsuccess = () => {\n          if (getInfoRequest.result == null) {\n            db.close();\n            return reject(new Error(\n                `Cannot find model with path '${path}' ` +\n                `in IndexedDB.`));\n          } else {\n            // First, delete the entry in the info store.\n            const deleteInfoRequest = infoStore.delete(path);\n            const deleteModelData = () => {\n              // Second, delete the entry in the model store.\n              modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n              const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n              const deleteModelRequest = modelStore.delete(path);\n              deleteModelRequest.onsuccess = () =>\n                  resolve(getInfoRequest.result.modelArtifactsInfo);\n              deleteModelRequest.onerror = error =>\n                  reject(getInfoRequest.error);\n            };\n            // Proceed with deleting model data regardless of whether deletion\n            // of info data succeeds or not.\n            deleteInfoRequest.onsuccess = deleteModelData;\n            deleteInfoRequest.onerror = error => {\n              deleteModelData();\n              db.close();\n              return reject(getInfoRequest.error);\n            };\n          }\n        };\n        getInfoRequest.onerror = error => {\n          db.close();\n          return reject(getInfoRequest.error);\n        };\n\n        infoTx.oncomplete = () => {\n          if (modelTx == null) {\n            db.close();\n          } else {\n            modelTx.oncomplete = () => db.close();\n          }\n        };\n      };\n      openRequest.onerror = error => reject(openRequest.error);\n    });\n  }\n}\n\nif (env().getBool('IS_BROWSER')) {\n  // Wrap the construction and registration, to guard against browsers that\n  // don't support Local Storage.\n  try {\n    ModelStoreManagerRegistry.registerManager(\n        BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager());\n  } catch (err) {\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../environment';\n\nimport {assert} from '../util';\nimport {arrayBufferToBase64String, base64StringToArrayBuffer, getModelArtifactsInfoForJSON} from './io_utils';\nimport {ModelStoreManagerRegistry} from './model_management';\nimport {IORouter, IORouterRegistry} from './router_registry';\nimport {IOHandler, ModelArtifacts, ModelArtifactsInfo, ModelStoreManager, SaveResult} from './types';\n\nconst PATH_SEPARATOR = '/';\nconst PATH_PREFIX = 'tensorflowjs_models';\nconst INFO_SUFFIX = 'info';\nconst MODEL_TOPOLOGY_SUFFIX = 'model_topology';\nconst WEIGHT_SPECS_SUFFIX = 'weight_specs';\nconst WEIGHT_DATA_SUFFIX = 'weight_data';\nconst MODEL_METADATA_SUFFIX = 'model_metadata';\n\n/**\n * Purge all tensorflow.js-saved model artifacts from local storage.\n *\n * @returns Paths of the models purged.\n */\nexport function purgeLocalStorageArtifacts(): string[] {\n  if (!env().getBool('IS_BROWSER') ||\n      typeof window === 'undefined' ||\n      typeof window.localStorage === 'undefined') {\n    throw new Error(\n        'purgeLocalStorageModels() cannot proceed because local storage is ' +\n        'unavailable in the current environment.');\n  }\n  const LS = window.localStorage;\n  const purgedModelPaths: string[] = [];\n  for (let i = 0; i < LS.length; ++i) {\n    const key = LS.key(i);\n    const prefix = PATH_PREFIX + PATH_SEPARATOR;\n    if (key.startsWith(prefix) && key.length > prefix.length) {\n      LS.removeItem(key);\n      const modelName = getModelPathFromKey(key);\n      if (purgedModelPaths.indexOf(modelName) === -1) {\n        purgedModelPaths.push(modelName);\n      }\n    }\n  }\n  return purgedModelPaths;\n}\n\nfunction getModelKeys(path: string): {\n  info: string,\n  topology: string,\n  weightSpecs: string,\n  weightData: string,\n  modelMetadata: string\n} {\n  return {\n    info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR),\n    topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR),\n    weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR),\n    weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR),\n    modelMetadata:\n        [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR)\n  };\n}\n\n/**\n * Get model path from a local-storage key.\n *\n * E.g., 'tensorflowjs_models/my/model/1/info' --> 'my/model/1'\n *\n * @param key\n */\nfunction getModelPathFromKey(key: string) {\n  const items = key.split(PATH_SEPARATOR);\n  if (items.length < 3) {\n    throw new Error(`Invalid key format: ${key}`);\n  }\n  return items.slice(1, items.length - 1).join(PATH_SEPARATOR);\n}\n\nfunction maybeStripScheme(key: string) {\n  return key.startsWith(BrowserLocalStorage.URL_SCHEME) ?\n      key.slice(BrowserLocalStorage.URL_SCHEME.length) :\n      key;\n}\n\ndeclare type LocalStorageKeys = {\n  info: string,\n  topology: string,\n  weightSpecs: string,\n  weightData: string,\n  modelMetadata: string\n};\n\n/**\n * IOHandler subclass: Browser Local Storage.\n *\n * See the doc string to `browserLocalStorage` for more details.\n */\nexport class BrowserLocalStorage implements IOHandler {\n  protected readonly LS: Storage;\n  protected readonly modelPath: string;\n  protected readonly keys: LocalStorageKeys;\n\n  static readonly URL_SCHEME = 'localstorage://';\n\n  constructor(modelPath: string) {\n    if (!env().getBool('IS_BROWSER') ||\n          typeof window === 'undefined' ||\n          typeof window.localStorage === 'undefined') {\n      // TODO(cais): Add more info about what IOHandler subtypes are\n      // available.\n      //   Maybe point to a doc page on the web and/or automatically determine\n      //   the available IOHandlers and print them in the error message.\n      throw new Error(\n          'The current environment does not support local storage.');\n    }\n    this.LS = window.localStorage;\n\n    if (modelPath == null || !modelPath) {\n      throw new Error(\n          'For local storage, modelPath must not be null, undefined or empty.');\n    }\n    this.modelPath = modelPath;\n    this.keys = getModelKeys(this.modelPath);\n  }\n\n  /**\n   * Save model artifacts to browser local storage.\n   *\n   * See the documentation to `browserLocalStorage` for details on the saved\n   * artifacts.\n   *\n   * @param modelArtifacts The model artifacts to be stored.\n   * @returns An instance of SaveResult.\n   */\n  async save(modelArtifacts: ModelArtifacts): Promise<SaveResult> {\n    if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n      throw new Error(\n          'BrowserLocalStorage.save() does not support saving model topology ' +\n          'in binary formats yet.');\n    } else {\n      const topology = JSON.stringify(modelArtifacts.modelTopology);\n      const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs);\n\n      const modelArtifactsInfo: ModelArtifactsInfo =\n          getModelArtifactsInfoForJSON(modelArtifacts);\n\n      try {\n        this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo));\n        this.LS.setItem(this.keys.topology, topology);\n        this.LS.setItem(this.keys.weightSpecs, weightSpecs);\n        this.LS.setItem(\n            this.keys.weightData,\n            arrayBufferToBase64String(modelArtifacts.weightData));\n        this.LS.setItem(this.keys.modelMetadata, JSON.stringify({\n          format: modelArtifacts.format,\n          generatedBy: modelArtifacts.generatedBy,\n          convertedBy: modelArtifacts.convertedBy,\n          userDefinedMetadata: modelArtifacts.userDefinedMetadata\n        }));\n\n        return {modelArtifactsInfo};\n      } catch (err) {\n        // If saving failed, clean up all items saved so far.\n        this.LS.removeItem(this.keys.info);\n        this.LS.removeItem(this.keys.topology);\n        this.LS.removeItem(this.keys.weightSpecs);\n        this.LS.removeItem(this.keys.weightData);\n        this.LS.removeItem(this.keys.modelMetadata);\n\n        throw new Error(\n            `Failed to save model '${this.modelPath}' to local storage: ` +\n            `size quota being exceeded is a possible cause of this failure: ` +\n            `modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, ` +\n            `weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, ` +\n            `weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`);\n      }\n    }\n  }\n\n  /**\n   * Load a model from local storage.\n   *\n   * See the documentation to `browserLocalStorage` for details on the saved\n   * artifacts.\n   *\n   * @returns The loaded model (if loading succeeds).\n   */\n  async load(): Promise<ModelArtifacts> {\n    const info =\n        JSON.parse(this.LS.getItem(this.keys.info)) as ModelArtifactsInfo;\n    if (info == null) {\n      throw new Error(\n          `In local storage, there is no model with name '${this.modelPath}'`);\n    }\n\n    if (info.modelTopologyType !== 'JSON') {\n      throw new Error(\n          'BrowserLocalStorage does not support loading non-JSON model ' +\n          'topology yet.');\n    }\n\n    const out: ModelArtifacts = {};\n\n    // Load topology.\n    const topology = JSON.parse(this.LS.getItem(this.keys.topology));\n    if (topology == null) {\n      throw new Error(\n          `In local storage, the topology of model '${this.modelPath}' ` +\n          `is missing.`);\n    }\n    out.modelTopology = topology;\n\n    // Load weight specs.\n    const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs));\n    if (weightSpecs == null) {\n      throw new Error(\n          `In local storage, the weight specs of model '${this.modelPath}' ` +\n          `are missing.`);\n    }\n    out.weightSpecs = weightSpecs;\n\n    // Load meta-data fields.\n    const metadataString = this.LS.getItem(this.keys.modelMetadata);\n    if (metadataString != null) {\n      const metadata = JSON.parse(metadataString) as ModelArtifacts;\n      out.format = metadata['format'];\n      out.generatedBy = metadata['generatedBy'];\n      out.convertedBy = metadata['convertedBy'];\n      out.userDefinedMetadata = metadata['userDefinedMetadata'];\n    }\n\n    // Load weight data.\n    const weightDataBase64 = this.LS.getItem(this.keys.weightData);\n    if (weightDataBase64 == null) {\n      throw new Error(\n          `In local storage, the binary weight values of model ` +\n          `'${this.modelPath}' are missing.`);\n    }\n    out.weightData = base64StringToArrayBuffer(weightDataBase64);\n\n    return out;\n  }\n}\n\nexport const localStorageRouter: IORouter = (url: string|string[]) => {\n  if (!env().getBool('IS_BROWSER')) {\n    return null;\n  } else {\n    if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) {\n      return browserLocalStorage(\n          url.slice(BrowserLocalStorage.URL_SCHEME.length));\n    } else {\n      return null;\n    }\n  }\n};\nIORouterRegistry.registerSaveRouter(localStorageRouter);\nIORouterRegistry.registerLoadRouter(localStorageRouter);\n\n/**\n * Factory function for local storage IOHandler.\n *\n * This `IOHandler` supports both `save` and `load`.\n *\n * For each model's saved artifacts, four items are saved to local storage.\n *   - `${PATH_SEPARATOR}/${modelPath}/info`: Contains meta-info about the\n *     model, such as date saved, type of the topology, size in bytes, etc.\n *   - `${PATH_SEPARATOR}/${modelPath}/topology`: Model topology. For Keras-\n *     style models, this is a stringized JSON.\n *   - `${PATH_SEPARATOR}/${modelPath}/weight_specs`: Weight specs of the\n *     model, can be used to decode the saved binary weight values (see\n *     item below).\n *   - `${PATH_SEPARATOR}/${modelPath}/weight_data`: Concatenated binary\n *     weight values, stored as a base64-encoded string.\n *\n * Saving may throw an `Error` if the total size of the artifacts exceed the\n * browser-specific quota.\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n *   non-empty string.\n * @returns An instance of `IOHandler`, which can be used with, e.g.,\n *   `tf.Model.save`.\n */\nexport function browserLocalStorage(modelPath: string): IOHandler {\n  return new BrowserLocalStorage(modelPath);\n}\n\nexport class BrowserLocalStorageManager implements ModelStoreManager {\n  private readonly LS: Storage;\n\n  constructor() {\n    assert(\n        env().getBool('IS_BROWSER'),\n        () => 'Current environment is not a web browser');\n    assert(\n        typeof window === 'undefined' ||\n        typeof window.localStorage !== 'undefined',\n        () => 'Current browser does not appear to support localStorage');\n    this.LS = window.localStorage;\n  }\n\n  async listModels(): Promise<{[path: string]: ModelArtifactsInfo}> {\n    const out: {[path: string]: ModelArtifactsInfo} = {};\n    const prefix = PATH_PREFIX + PATH_SEPARATOR;\n    const suffix = PATH_SEPARATOR + INFO_SUFFIX;\n    for (let i = 0; i < this.LS.length; ++i) {\n      const key = this.LS.key(i);\n      if (key.startsWith(prefix) && key.endsWith(suffix)) {\n        const modelPath = getModelPathFromKey(key);\n        out[modelPath] = JSON.parse(this.LS.getItem(key)) as ModelArtifactsInfo;\n      }\n    }\n    return out;\n  }\n\n  async removeModel(path: string): Promise<ModelArtifactsInfo> {\n    path = maybeStripScheme(path);\n    const keys = getModelKeys(path);\n    if (this.LS.getItem(keys.info) == null) {\n      throw new Error(`Cannot find model at path '${path}'`);\n    }\n    const info = JSON.parse(this.LS.getItem(keys.info)) as ModelArtifactsInfo;\n\n    this.LS.removeItem(keys.info);\n    this.LS.removeItem(keys.topology);\n    this.LS.removeItem(keys.weightSpecs);\n    this.LS.removeItem(keys.weightData);\n    return info;\n  }\n}\n\nif (env().getBool('IS_BROWSER')) {\n  // Wrap the construction and registration, to guard against browsers that\n  // don't support Local Storage.\n  try {\n    ModelStoreManagerRegistry.registerManager(\n        BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager());\n  } catch (err) {\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * IOHandlers related to files, such as browser-triggered file downloads,\n * user-selected files in browser.\n */\n\nimport {env} from '../environment';\n\nimport {basename, concatenateArrayBuffers, getModelArtifactsInfoForJSON} from './io_utils';\nimport {IORouter, IORouterRegistry} from './router_registry';\nimport {IOHandler, ModelArtifacts, ModelJSON, SaveResult, WeightsManifestConfig, WeightsManifestEntry} from './types';\n\nconst DEFAULT_FILE_NAME_PREFIX = 'model';\nconst DEFAULT_JSON_EXTENSION_NAME = '.json';\nconst DEFAULT_WEIGHT_DATA_EXTENSION_NAME = '.weights.bin';\n\nfunction defer<T>(f: () => T): Promise<T> {\n  return new Promise(resolve => setTimeout(resolve)).then(f);\n}\n\nexport class BrowserDownloads implements IOHandler {\n  private readonly modelTopologyFileName: string;\n  private readonly weightDataFileName: string;\n  private readonly jsonAnchor: HTMLAnchorElement;\n  private readonly weightDataAnchor: HTMLAnchorElement;\n\n  static readonly URL_SCHEME = 'downloads://';\n\n  constructor(fileNamePrefix?: string) {\n    if (!env().getBool('IS_BROWSER')) {\n      // TODO(cais): Provide info on what IOHandlers are available under the\n      //   current environment.\n      throw new Error(\n          'browserDownloads() cannot proceed because the current environment ' +\n          'is not a browser.');\n    }\n\n    if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) {\n      fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length);\n    }\n    if (fileNamePrefix == null || fileNamePrefix.length === 0) {\n      fileNamePrefix = DEFAULT_FILE_NAME_PREFIX;\n    }\n\n    this.modelTopologyFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME;\n    this.weightDataFileName =\n        fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME;\n  }\n\n  async save(modelArtifacts: ModelArtifacts): Promise<SaveResult> {\n    if (typeof (document) === 'undefined') {\n      throw new Error(\n          'Browser downloads are not supported in ' +\n          'this environment since `document` is not present');\n    }\n    const weightsURL = window.URL.createObjectURL(new Blob(\n        [modelArtifacts.weightData], {type: 'application/octet-stream'}));\n\n    if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n      throw new Error(\n          'BrowserDownloads.save() does not support saving model topology ' +\n          'in binary formats yet.');\n    } else {\n      const weightsManifest: WeightsManifestConfig = [{\n        paths: ['./' + this.weightDataFileName],\n        weights: modelArtifacts.weightSpecs\n      }];\n      const modelTopologyAndWeightManifest: ModelJSON = {\n        modelTopology: modelArtifacts.modelTopology,\n        format: modelArtifacts.format,\n        generatedBy: modelArtifacts.generatedBy,\n        convertedBy: modelArtifacts.convertedBy,\n        weightsManifest\n      };\n      const modelTopologyAndWeightManifestURL =\n          window.URL.createObjectURL(new Blob(\n              [JSON.stringify(modelTopologyAndWeightManifest)],\n              {type: 'application/json'}));\n\n      // If anchor elements are not provided, create them without attaching them\n      // to parents, so that the downloaded file names can be controlled.\n      const jsonAnchor = this.jsonAnchor == null ? document.createElement('a') :\n                                                   this.jsonAnchor;\n      jsonAnchor.download = this.modelTopologyFileName;\n      jsonAnchor.href = modelTopologyAndWeightManifestURL;\n      // Trigger downloads by evoking a click event on the download anchors.\n      // When multiple downloads are started synchronously, Firefox will only\n      // save the last one.\n      await defer(() => jsonAnchor.dispatchEvent(new MouseEvent('click')));\n\n      if (modelArtifacts.weightData != null) {\n        const weightDataAnchor = this.weightDataAnchor == null ?\n            document.createElement('a') :\n            this.weightDataAnchor;\n        weightDataAnchor.download = this.weightDataFileName;\n        weightDataAnchor.href = weightsURL;\n        await defer(\n            () => weightDataAnchor.dispatchEvent(new MouseEvent('click')));\n      }\n\n      return {modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts)};\n    }\n  }\n}\n\nclass BrowserFiles implements IOHandler {\n  private readonly files: File[];\n\n  constructor(files: File[]) {\n    if (files == null || files.length < 1) {\n      throw new Error(\n          `When calling browserFiles, at least 1 file is required, ` +\n          `but received ${files}`);\n    }\n    this.files = files;\n  }\n\n  async load(): Promise<ModelArtifacts> {\n    const jsonFile = this.files[0];\n    const weightFiles = this.files.slice(1);\n\n    return new Promise<ModelArtifacts>((resolve, reject) => {\n      const jsonReader = new FileReader();\n      jsonReader.onload = (event: Event) => {\n        // tslint:disable-next-line:no-any\n        const modelJSON = JSON.parse((event.target as any).result) as ModelJSON;\n        const modelTopology = modelJSON.modelTopology;\n        if (modelTopology == null) {\n          reject(new Error(\n              `modelTopology field is missing from file ${jsonFile.name}`));\n          return;\n        }\n\n        if (weightFiles.length === 0) {\n          resolve({modelTopology});\n        }\n\n        const weightsManifest = modelJSON.weightsManifest;\n        if (weightsManifest == null) {\n          reject(new Error(\n              `weightManifest field is missing from file ${jsonFile.name}`));\n          return;\n        }\n\n        let pathToFile: {[path: string]: File};\n        try {\n          pathToFile =\n              this.checkManifestAndWeightFiles(weightsManifest, weightFiles);\n        } catch (err) {\n          reject(err);\n          return;\n        }\n\n        const weightSpecs: WeightsManifestEntry[] = [];\n        const paths: string[] = [];\n        const perFileBuffers: ArrayBuffer[] = [];\n        weightsManifest.forEach(weightsGroup => {\n          weightsGroup.paths.forEach(path => {\n            paths.push(path);\n            perFileBuffers.push(null);\n          });\n          weightSpecs.push(...weightsGroup.weights);\n        });\n\n        weightsManifest.forEach(weightsGroup => {\n          weightsGroup.paths.forEach(path => {\n            const weightFileReader = new FileReader();\n            weightFileReader.onload = (event: Event) => {\n              // tslint:disable-next-line:no-any\n              const weightData = (event.target as any).result as ArrayBuffer;\n              const index = paths.indexOf(path);\n              perFileBuffers[index] = weightData;\n              if (perFileBuffers.indexOf(null) === -1) {\n                resolve({\n                  modelTopology,\n                  weightSpecs,\n                  weightData: concatenateArrayBuffers(perFileBuffers),\n                  format: modelJSON.format,\n                  generatedBy: modelJSON.generatedBy,\n                  convertedBy: modelJSON.convertedBy,\n                  userDefinedMetadata: modelJSON.userDefinedMetadata\n                });\n              }\n            };\n            weightFileReader.onerror = error =>\n                reject(`Failed to weights data from file of path '${path}'.`);\n            weightFileReader.readAsArrayBuffer(pathToFile[path]);\n          });\n        });\n      };\n      jsonReader.onerror = error => reject(\n          `Failed to read model topology and weights manifest JSON ` +\n          `from file '${jsonFile.name}'. BrowserFiles supports loading ` +\n          `Keras-style tf.Model artifacts only.`);\n      jsonReader.readAsText(jsonFile);\n    });\n  }\n\n  /**\n   * Check the compatibility between weights manifest and weight files.\n   */\n  private checkManifestAndWeightFiles(\n      manifest: WeightsManifestConfig, files: File[]): {[path: string]: File} {\n    const basenames: string[] = [];\n    const fileNames = files.map(file => basename(file.name));\n    const pathToFile: {[path: string]: File} = {};\n    for (const group of manifest) {\n      group.paths.forEach(path => {\n        const pathBasename = basename(path);\n        if (basenames.indexOf(pathBasename) !== -1) {\n          throw new Error(\n              `Duplicate file basename found in weights manifest: ` +\n              `'${pathBasename}'`);\n        }\n        basenames.push(pathBasename);\n        if (fileNames.indexOf(pathBasename) === -1) {\n          throw new Error(\n              `Weight file with basename '${pathBasename}' is not provided.`);\n        } else {\n          pathToFile[path] = files[fileNames.indexOf(pathBasename)];\n        }\n      });\n    }\n\n    if (basenames.length !== files.length) {\n      throw new Error(\n          `Mismatch in the number of files in weights manifest ` +\n          `(${basenames.length}) and the number of weight files provided ` +\n          `(${files.length}).`);\n    }\n    return pathToFile;\n  }\n}\n\nexport const browserDownloadsRouter: IORouter = (url: string|string[]) => {\n  if (!env().getBool('IS_BROWSER')) {\n    return null;\n  } else {\n    if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) {\n      return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length));\n    } else {\n      return null;\n    }\n  }\n};\nIORouterRegistry.registerSaveRouter(browserDownloadsRouter);\n\n/**\n * Creates an IOHandler that triggers file downloads from the browser.\n *\n * The returned `IOHandler` instance can be used as model exporting methods such\n * as `tf.Model.save` and supports only saving.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n *     {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * const saveResult = await model.save('downloads://mymodel');\n * // This will trigger downloading of two files:\n * //   'mymodel.json' and 'mymodel.weights.bin'.\n * console.log(saveResult);\n * ```\n *\n * @param fileNamePrefix Prefix name of the files to be downloaded. For use with\n *   `tf.Model`, `fileNamePrefix` should follow either of the following two\n *   formats:\n *   1. `null` or `undefined`, in which case the default file\n *      names will be used:\n *      - 'model.json' for the JSON file containing the model topology and\n *        weights manifest.\n *      - 'model.weights.bin' for the binary file containing the binary weight\n *        values.\n *   2. A single string or an Array of a single string, as the file name prefix.\n *      For example, if `'foo'` is provided, the downloaded JSON\n *      file and binary weights file will be named 'foo.json' and\n *      'foo.weights.bin', respectively.\n * @param config Additional configuration for triggering downloads.\n * @returns An instance of `BrowserDownloads` `IOHandler`.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Loading',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nexport function browserDownloads(fileNamePrefix = 'model'): IOHandler {\n  return new BrowserDownloads(fileNamePrefix);\n}\n\n/**\n * Creates an IOHandler that loads model artifacts from user-selected files.\n *\n * This method can be used for loading from files such as user-selected files\n * in the browser.\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * // Note: This code snippet won't run properly without the actual file input\n * //   elements in the HTML DOM.\n *\n * // Suppose there are two HTML file input (`<input type=\"file\" ...>`)\n * // elements.\n * const uploadJSONInput = document.getElementById('upload-json');\n * const uploadWeightsInput = document.getElementById('upload-weights');\n * const model = await tf.loadLayersModel(tf.io.browserFiles(\n *     [uploadJSONInput.files[0], uploadWeightsInput.files[0]]));\n * ```\n *\n * @param files `File`s to load from. Currently, this function supports only\n *   loading from files that contain Keras-style models (i.e., `tf.Model`s), for\n *   which an `Array` of `File`s is expected (in that order):\n *   - A JSON file containing the model topology and weight manifest.\n *   - Optionally, One or more binary files containing the binary weights.\n *     These files must have names that match the paths in the `weightsManifest`\n *     contained by the aforementioned JSON file, or errors will be thrown\n *     during loading. These weights files have the same format as the ones\n *     generated by `tensorflowjs_converter` that comes with the `tensorflowjs`\n *     Python PIP package. If no weights files are provided, only the model\n *     topology will be loaded from the JSON file above.\n * @returns An instance of `Files` `IOHandler`.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Loading',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nexport function browserFiles(files: File[]): IOHandler {\n  return new BrowserFiles(files);\n}\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {assert} from '../util';\n\nimport {OnProgressCallback} from './types';\n\n/**\n * Monitor Promise.all progress, fire onProgress callback function.\n *\n * @param promises Promise list going to be monitored\n * @param onProgress Callback function. Fired when a promise resolved.\n * @param startFraction Optional fraction start. Default to 0.\n * @param endFraction Optional fraction end. Default to 1.\n */\nexport function monitorPromisesProgress(\n    promises: Array<Promise<{}|void>>, onProgress: OnProgressCallback,\n    startFraction?: number, endFraction?: number) {\n  checkPromises(promises);\n  startFraction = startFraction == null ? 0 : startFraction;\n  endFraction = endFraction == null ? 1 : endFraction;\n  checkFraction(startFraction, endFraction);\n  let resolvedPromise = 0;\n\n  const registerMonitor = (promise: Promise<{}>) => {\n    promise.then(value => {\n      const fraction = startFraction +\n          ++resolvedPromise / promises.length * (endFraction - startFraction);\n      // pass fraction as parameter to callback function.\n      onProgress(fraction);\n      return value;\n    });\n    return promise;\n  };\n\n  function checkPromises(promises: Array<Promise<{}|void>>): void {\n    assert(\n        promises != null && Array.isArray(promises) && promises.length > 0,\n        () => 'promises must be a none empty array');\n  }\n\n  function checkFraction(startFraction: number, endFraction: number): void {\n    assert(\n        startFraction >= 0 && startFraction <= 1,\n        () => `Progress fraction must be in range [0, 1], but ` +\n            `got startFraction ${startFraction}`);\n    assert(\n        endFraction >= 0 && endFraction <= 1,\n        () => `Progress fraction must be in range [0, 1], but ` +\n            `got endFraction ${endFraction}`);\n    assert(\n        endFraction >= startFraction,\n        () => `startFraction must be no more than endFraction, but ` +\n            `got startFraction ${startFraction} and endFraction ` +\n            `${endFraction}`);\n  }\n\n  return Promise.all(promises.map(registerMonitor));\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {env} from '../environment';\n\nimport {NamedTensorMap} from '../tensor_types';\nimport * as util from '../util';\nimport {decodeWeights} from './io_utils';\nimport {monitorPromisesProgress} from './progress';\nimport {DTYPE_VALUE_SIZE_MAP, LoadOptions, WeightsManifestConfig, WeightsManifestEntry} from './types';\n\n/**\n * Reads binary weights data from a number of URLs.\n *\n * @param fetchURLs URLs to send the HTTP requests at, using `fetch` calls.\n * @param requestOptions RequestInit (options) for the HTTP requests.\n * @param fetchFunc Optional overriding value for the `window.fetch` function.\n * @param onProgress Optional, progress callback function, fired periodically\n *   before the load is completed.\n * @returns A `Promise` of an Array of `ArrayBuffer`. The Array has the same\n *   length as `fetchURLs`.\n */\nexport async function loadWeightsAsArrayBuffer(\n    fetchURLs: string[], loadOptions?: LoadOptions): Promise<ArrayBuffer[]> {\n  if (loadOptions == null) {\n    loadOptions = {};\n  }\n\n  const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch :\n                                                    loadOptions.fetchFunc;\n\n  // Create the requests for all of the weights in parallel.\n  const requests = fetchURLs.map(\n      fetchURL =>\n          fetchFunc(fetchURL, loadOptions.requestInit, {isBinary: true}));\n\n  const fetchStartFraction = 0;\n  const fetchEndFraction = 0.5;\n\n  const responses = loadOptions.onProgress == null ?\n      await Promise.all(requests) :\n      await monitorPromisesProgress(\n          requests, loadOptions.onProgress, fetchStartFraction,\n          fetchEndFraction);\n\n  const bufferPromises = responses.map(response => response.arrayBuffer());\n\n  const bufferStartFraction = 0.5;\n  const bufferEndFraction = 1;\n\n  const buffers = loadOptions.onProgress == null ?\n      await Promise.all(bufferPromises) :\n      await monitorPromisesProgress(\n          bufferPromises, loadOptions.onProgress, bufferStartFraction,\n          bufferEndFraction);\n  return buffers;\n}\n\n/**\n * Reads a weights manifest JSON configuration, fetches the weights and\n * returns them as `Tensor`s.\n *\n * @param manifest The weights manifest JSON.\n * @param filePathPrefix The path prefix for filenames given in the manifest.\n *     Defaults to the empty string.\n * @param weightNames The names of the weights to be fetched.\n */\nexport async function loadWeights(\n    manifest: WeightsManifestConfig, filePathPrefix = '',\n    weightNames?: string[],\n    requestInit?: RequestInit): Promise<NamedTensorMap> {\n  // TODO(nsthorat): Groups are currently fetched atomically. If you need a\n  // single weight from a group, the whole group will be fetched. At a future\n  // date, we should support fetching only the individual shards within a\n  // group that are needed to reconstruct the requested weight.\n  // TODO(cais): Use `decodeWeights` for implementation.\n\n  const fetchWeights = (fetchUrls: string[]) =>\n      loadWeightsAsArrayBuffer(fetchUrls, {requestInit});\n  const loadWeights = weightsLoaderFactory(fetchWeights);\n\n  return loadWeights(manifest, filePathPrefix, weightNames);\n}\n\n/**\n * Creates a function, which reads a weights manifest JSON configuration,\n * fetches the weight files using the specified function and returns them as\n * `Tensor`s.\n *\n * ```js\n * // example for creating a nodejs weight loader, which reads the weight files\n * // from disk using fs.readFileSync\n *\n * import * as fs from 'fs'\n *\n * const fetchWeightsFromDisk = (filePaths: string[]) =>\n *   filePaths.map(filePath => fs.readFileSync(filePath).buffer)\n *\n * const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n *\n * const manifest = JSON.parse(\n *   fs.readFileSync('./my_model-weights_manifest').toString()\n * )\n * const weightMap = await loadWeights(manifest, './')\n * ```\n * @param fetchWeightsFunction The function used for fetching the weight files.\n * @returns Weight loading function.\n */\nexport function weightsLoaderFactory(\n    fetchWeightsFunction: (fetchUrls: string[]) => Promise<ArrayBuffer[]>):\n    (manifest: WeightsManifestConfig, filePathPrefix?: string,\n     weightNames?: string[]) => Promise<NamedTensorMap> {\n  return async(\n             manifest: WeightsManifestConfig, filePathPrefix = '',\n             weightNames?: string[]): Promise<NamedTensorMap> => {\n    // Collect all the groups, weights, and their relative offsets to be\n    // fetched.\n    const groupIndicesToFetchMap = manifest.map(() => false);\n    const groupWeightsToFetch: {\n      [group: number]: Array<{\n        manifestEntry: WeightsManifestEntry; groupOffset: number;\n        sizeBytes: number;\n      }>\n    } = {};\n    const weightsFound =\n        weightNames != null ? weightNames.map(() => false) : [];\n    const allManifestWeightNames: string[] = [];\n    manifest.forEach((manifestGroupConfig, groupIndex) => {\n      let groupOffset = 0;\n      manifestGroupConfig.weights.forEach(weightsEntry => {\n        const rawDtype = ('quantization' in weightsEntry) ?\n            weightsEntry.quantization.dtype :\n            weightsEntry.dtype;\n\n        const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] *\n            util.sizeFromShape(weightsEntry.shape);\n\n        const enqueueWeightsForFetchingFn = () => {\n          groupIndicesToFetchMap[groupIndex] = true;\n          if (groupWeightsToFetch[groupIndex] == null) {\n            groupWeightsToFetch[groupIndex] = [];\n          }\n\n          groupWeightsToFetch[groupIndex].push({\n            manifestEntry: weightsEntry,\n            groupOffset,\n            sizeBytes: weightsBytes\n          });\n        };\n\n        if (weightNames != null) {\n          weightNames.forEach((weightName, weightIndex) => {\n            if (weightName === weightsEntry.name) {\n              enqueueWeightsForFetchingFn();\n              weightsFound[weightIndex] = true;\n            }\n          });\n        } else {\n          enqueueWeightsForFetchingFn();\n        }\n\n        allManifestWeightNames.push(weightsEntry.name);\n        groupOffset += weightsBytes;\n      });\n    });\n\n    if (!weightsFound.every(found => found)) {\n      const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]);\n      throw new Error(\n          `Could not find weights in manifest with names: ` +\n          `${weightsNotFound.join(', ')}. \\n` +\n          `Manifest JSON has weights with names: ` +\n          `${allManifestWeightNames.join(', ')}.`);\n    }\n\n    // Convert the one-hot boolean groupId => shouldFetch map to a list of group\n    // IDs.\n    const groupIndicesToFetch =\n        groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => {\n          if (shouldFetch) {\n            accumulator.push(i);\n          }\n          return accumulator;\n        }, []);\n\n    const fetchUrls: string[] = [];\n    groupIndicesToFetch.forEach(i => {\n      manifest[i].paths.forEach(filepath => {\n        const fetchUrl = filePathPrefix +\n            (!filePathPrefix.endsWith('/') ? '/' : '') + filepath;\n        fetchUrls.push(fetchUrl);\n      });\n    });\n    const buffers = await fetchWeightsFunction(fetchUrls);\n\n    const weightsTensorMap: NamedTensorMap = {};\n    let bufferIndexOffset = 0;\n    groupIndicesToFetch.forEach(i => {\n      const numBuffers = manifest[i].paths.length;\n\n      let groupBytes = 0;\n      for (let i = 0; i < numBuffers; i++) {\n        groupBytes += buffers[bufferIndexOffset + i].byteLength;\n      }\n\n      // Create a buffer for the whole group.\n      const groupBuffer = new ArrayBuffer(groupBytes);\n      const groupByteBuffer = new Uint8Array(groupBuffer);\n      let groupBufferOffset = 0;\n      for (let i = 0; i < numBuffers; i++) {\n        const buffer = new Uint8Array(buffers[bufferIndexOffset + i]);\n        groupByteBuffer.set(buffer, groupBufferOffset);\n        groupBufferOffset += buffer.byteLength;\n      }\n\n      const weightsEntries = groupWeightsToFetch[i];\n      weightsEntries.forEach(weightsEntry => {\n        const byteBuffer = groupBuffer.slice(\n            weightsEntry.groupOffset,\n            weightsEntry.groupOffset + weightsEntry.sizeBytes);\n        const nameToTensorMap =\n            decodeWeights(byteBuffer, [weightsEntry.manifestEntry]);\n        for (const name in nameToTensorMap) {\n          weightsTensorMap[name] = nameToTensorMap[name];\n        }\n      });\n\n      bufferIndexOffset += numBuffers;\n    });\n\n    return weightsTensorMap;\n  };\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * IOHandler implementations based on HTTP requests in the web browser.\n *\n * Uses [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n */\n\nimport {env} from '../environment';\n\nimport {assert} from '../util';\nimport {concatenateArrayBuffers, getModelArtifactsInfoForJSON} from './io_utils';\nimport {IORouter, IORouterRegistry} from './router_registry';\nimport {IOHandler, LoadOptions, ModelArtifacts, ModelJSON, OnProgressCallback, SaveResult, WeightsManifestConfig, WeightsManifestEntry} from './types';\nimport {loadWeightsAsArrayBuffer} from './weights_loader';\n\nconst OCTET_STREAM_MIME_TYPE = 'application/octet-stream';\nconst JSON_TYPE = 'application/json';\nexport class HTTPRequest implements IOHandler {\n  protected readonly path: string;\n  protected readonly requestInit: RequestInit;\n\n  private readonly fetch: Function;\n\n  readonly DEFAULT_METHOD = 'POST';\n\n  static readonly URL_SCHEME_REGEX = /^https?:\\/\\//;\n\n  private readonly weightPathPrefix: string;\n  private readonly onProgress: OnProgressCallback;\n\n  constructor(path: string, loadOptions?: LoadOptions) {\n    if (loadOptions == null) {\n      loadOptions = {};\n    }\n    this.weightPathPrefix = loadOptions.weightPathPrefix;\n    this.onProgress = loadOptions.onProgress;\n\n    if (loadOptions.fetchFunc != null) {\n      assert(\n          typeof loadOptions.fetchFunc === 'function',\n          () => 'Must pass a function that matches the signature of ' +\n              '`fetch` (see ' +\n              'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)');\n      this.fetch = loadOptions.fetchFunc;\n    } else {\n      this.fetch = env().platform.fetch;\n    }\n\n    assert(\n        path != null && path.length > 0,\n        () => 'URL path for http must not be null, undefined or ' +\n            'empty.');\n\n    if (Array.isArray(path)) {\n      assert(\n          path.length === 2,\n          () => 'URL paths for http must have a length of 2, ' +\n              `(actual length is ${path.length}).`);\n    }\n    this.path = path;\n\n    if (loadOptions.requestInit != null &&\n        loadOptions.requestInit.body != null) {\n      throw new Error(\n          'requestInit is expected to have no pre-existing body, but has one.');\n    }\n    this.requestInit = loadOptions.requestInit || {};\n  }\n\n  async save(modelArtifacts: ModelArtifacts): Promise<SaveResult> {\n    if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n      throw new Error(\n          'BrowserHTTPRequest.save() does not support saving model topology ' +\n          'in binary formats yet.');\n    }\n\n    const init = Object.assign({method: this.DEFAULT_METHOD}, this.requestInit);\n    init.body = new FormData();\n\n    const weightsManifest: WeightsManifestConfig = [{\n      paths: ['./model.weights.bin'],\n      weights: modelArtifacts.weightSpecs,\n    }];\n    const modelTopologyAndWeightManifest: ModelJSON = {\n      modelTopology: modelArtifacts.modelTopology,\n      format: modelArtifacts.format,\n      generatedBy: modelArtifacts.generatedBy,\n      convertedBy: modelArtifacts.convertedBy,\n      userDefinedMetadata: modelArtifacts.userDefinedMetadata,\n      weightsManifest\n    };\n\n    init.body.append(\n        'model.json',\n        new Blob(\n            [JSON.stringify(modelTopologyAndWeightManifest)],\n            {type: JSON_TYPE}),\n        'model.json');\n\n    if (modelArtifacts.weightData != null) {\n      init.body.append(\n          'model.weights.bin',\n          new Blob([modelArtifacts.weightData], {type: OCTET_STREAM_MIME_TYPE}),\n          'model.weights.bin');\n    }\n\n    const response = await this.fetch(this.path, init);\n\n    if (response.ok) {\n      return {\n        modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts),\n        responses: [response],\n      };\n    } else {\n      throw new Error(\n          `BrowserHTTPRequest.save() failed due to HTTP response status ` +\n          `${response.status}.`);\n    }\n  }\n\n  /**\n   * Load model artifacts via HTTP request(s).\n   *\n   * See the documentation to `tf.io.http` for details on the saved\n   * artifacts.\n   *\n   * @returns The loaded model artifacts (if loading succeeds).\n   */\n  async load(): Promise<ModelArtifacts> {\n    const modelConfigRequest = await this.fetch(this.path, this.requestInit);\n\n    if (!modelConfigRequest.ok) {\n      throw new Error(\n          `Request to ${this.path} failed with status code ` +\n          `${modelConfigRequest.status}. Please verify this URL points to ` +\n          `the model JSON of the model to load.`);\n    }\n    let modelConfig: ModelJSON;\n    try {\n      modelConfig = await modelConfigRequest.json();\n    } catch (e) {\n      let message = `Failed to parse model JSON of response from ${this.path}.`;\n      // TODO(nsthorat): Remove this after some time when we're comfortable that\n      // .pb files are mostly gone.\n      if (this.path.endsWith('.pb')) {\n        message += ' Your path contains a .pb file extension. ' +\n            'Support for .pb models have been removed in TensorFlow.js 1.0 ' +\n            'in favor of .json models. You can re-convert your Python ' +\n            'TensorFlow model using the TensorFlow.js 1.0 conversion scripts ' +\n            'or you can convert your.pb models with the \\'pb2json\\'' +\n            'NPM script in the tensorflow/tfjs-converter repository.';\n      } else {\n        message += ' Please make sure the server is serving valid ' +\n            'JSON for this request.';\n      }\n      throw new Error(message);\n    }\n    const modelTopology = modelConfig.modelTopology;\n    const weightsManifest = modelConfig.weightsManifest;\n    const generatedBy = modelConfig.generatedBy;\n    const convertedBy = modelConfig.convertedBy;\n    const format = modelConfig.format;\n    const userDefinedMetadata = modelConfig.userDefinedMetadata;\n\n    // We do not allow both modelTopology and weightsManifest to be missing.\n    if (modelTopology == null && weightsManifest == null) {\n      throw new Error(\n          `The JSON from HTTP path ${this.path} contains neither model ` +\n          `topology or manifest for weights.`);\n    }\n\n    let weightSpecs: WeightsManifestEntry[];\n    let weightData: ArrayBuffer;\n    if (weightsManifest != null) {\n      const results = await this.loadWeights(weightsManifest);\n      [weightSpecs, weightData] = results;\n    }\n\n    return {\n      modelTopology,\n      weightSpecs,\n      weightData,\n      userDefinedMetadata,\n      generatedBy,\n      convertedBy,\n      format\n    };\n  }\n\n  private async loadWeights(weightsManifest: WeightsManifestConfig):\n      Promise<[WeightsManifestEntry[], ArrayBuffer]> {\n    const weightPath = Array.isArray(this.path) ? this.path[1] : this.path;\n    const [prefix, suffix] = parseUrl(weightPath);\n    const pathPrefix = this.weightPathPrefix || prefix;\n\n    const weightSpecs = [];\n    for (const entry of weightsManifest) {\n      weightSpecs.push(...entry.weights);\n    }\n\n    const fetchURLs: string[] = [];\n    weightsManifest.forEach(weightsGroup => {\n      weightsGroup.paths.forEach(path => {\n        fetchURLs.push(pathPrefix + path + suffix);\n      });\n    });\n    const buffers = await loadWeightsAsArrayBuffer(fetchURLs, {\n      requestInit: this.requestInit,\n      fetchFunc: this.fetch,\n      onProgress: this.onProgress\n    });\n    return [weightSpecs, concatenateArrayBuffers(buffers)];\n  }\n}\n\n/**\n * Extract the prefix and suffix of the url, where the prefix is the path before\n * the last file, and suffix is the search params after the last file.\n * ```\n * const url = 'http://tfhub.dev/model/1/tensorflowjs_model.pb?tfjs-format=file'\n * [prefix, suffix] = parseUrl(url)\n * // prefix = 'http://tfhub.dev/model/1/'\n * // suffix = '?tfjs-format=file'\n * ```\n * @param url the model url to be parsed.\n */\nexport function parseUrl(url: string): [string, string] {\n  const lastSlash = url.lastIndexOf('/');\n  const lastSearchParam = url.lastIndexOf('?');\n  const prefix = url.substring(0, lastSlash);\n  const suffix =\n      lastSearchParam > lastSlash ? url.substring(lastSearchParam) : '';\n  return [prefix + '/', suffix];\n}\n\nexport function isHTTPScheme(url: string): boolean {\n  return url.match(HTTPRequest.URL_SCHEME_REGEX) != null;\n}\n\nexport const httpRouter: IORouter =\n    (url: string, onProgress?: OnProgressCallback) => {\n      if (typeof fetch === 'undefined') {\n        // `http` uses `fetch` or `node-fetch`, if one wants to use it in\n        // an environment that is not the browser or node they have to setup a\n        // global fetch polyfill.\n        return null;\n      } else {\n        let isHTTP = true;\n        if (Array.isArray(url)) {\n          isHTTP = url.every(urlItem => isHTTPScheme(urlItem));\n        } else {\n          isHTTP = isHTTPScheme(url);\n        }\n        if (isHTTP) {\n          return http(url, {onProgress});\n        }\n      }\n      return null;\n    };\nIORouterRegistry.registerSaveRouter(httpRouter);\nIORouterRegistry.registerLoadRouter(httpRouter);\n\n/**\n * Creates an IOHandler subtype that sends model artifacts to HTTP server.\n *\n * An HTTP request of the `multipart/form-data` mime type will be sent to the\n * `path` URL. The form data includes artifacts that represent the topology\n * and/or weights of the model. In the case of Keras-style `tf.Model`, two\n * blobs (files) exist in form-data:\n *   - A JSON file consisting of `modelTopology` and `weightsManifest`.\n *   - A binary weights file consisting of the concatenated weight values.\n * These files are in the same format as the one generated by\n * [tfjs_converter](https://js.tensorflow.org/tutorials/import-keras.html).\n *\n * The following code snippet exemplifies the client-side code that uses this\n * function:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n *     tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save(tf.io.http(\n *     'http://model-server:5000/upload', {requestInit: {method: 'PUT'}}));\n * console.log(saveResult);\n * ```\n *\n * If the default `POST` method is to be used, without any custom parameters\n * such as headers, you can simply pass an HTTP or HTTPS URL to `model.save`:\n *\n * ```js\n * const saveResult = await model.save('http://model-server:5000/upload');\n * ```\n *\n * The following GitHub Gist\n * https://gist.github.com/dsmilkov/1b6046fd6132d7408d5257b0976f7864\n * implements a server based on [flask](https://github.com/pallets/flask) that\n * can receive the request. Upon receiving the model artifacts via the requst,\n * this particular server reconsistutes instances of [Keras\n * Models](https://keras.io/models/model/) in memory.\n *\n *\n * @param path A URL path to the model.\n *   Can be an absolute HTTP path (e.g.,\n *   'http://localhost:8000/model-upload)') or a relative path (e.g.,\n *   './model-upload').\n * @param requestInit Request configurations to be used when sending\n *    HTTP request to server using `fetch`. It can contain fields such as\n *    `method`, `credentials`, `headers`, `mode`, etc. See\n *    https://developer.mozilla.org/en-US/docs/Web/API/Request/Request\n *    for more information. `requestInit` must not have a body, because the\n * body will be set by TensorFlow.js. File blobs representing the model\n * topology (filename: 'model.json') and the weights of the model (filename:\n * 'model.weights.bin') will be appended to the body. If `requestInit` has a\n * `body`, an Error will be thrown.\n * @param loadOptions Optional configuration for the loading. It includes the\n *   following fields:\n *   - weightPathPrefix Optional, this specifies the path prefix for weight\n *     files, by default this is calculated from the path param.\n *   - fetchFunc Optional, custom `fetch` function. E.g., in Node.js,\n *     the `fetch` from node-fetch can be used here.\n *   - onProgress Optional, progress callback function, fired periodically\n *     before the load is completed.\n * @returns An instance of `IOHandler`.\n */\n/**\n * @doc {\n *   heading: 'Models',\n *   subheading: 'Loading',\n *   namespace: 'io',\n *   ignoreCI: true\n * }\n */\nexport function http(path: string, loadOptions?: LoadOptions): IOHandler {\n  return new HTTPRequest(path, loadOptions);\n}\n\n/**\n * Deprecated. Use `tf.io.http`.\n * @param path\n * @param loadOptions\n */\nexport function browserHTTPRequest(\n    path: string, loadOptions?: LoadOptions): IOHandler {\n  return http(path, loadOptions);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * IOHandlers that pass through the in-memory ModelArtifacts format.\n */\n\nimport {IOHandler, ModelArtifacts, SaveResult, TrainingConfig, WeightsManifestEntry} from './types';\n\nclass PassthroughLoader implements IOHandler {\n  constructor(private readonly modelArtifacts?: ModelArtifacts) {}\n\n  async load(): Promise<ModelArtifacts> {\n    return this.modelArtifacts;\n  }\n}\n\nclass PassthroughSaver implements IOHandler {\n  constructor(\n      private readonly saveHandler:\n          (artifacts: ModelArtifacts) => Promise<SaveResult>) {}\n\n  async save(modelArtifacts: ModelArtifacts) {\n    return this.saveHandler(modelArtifacts);\n  }\n}\n\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n *     modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n *   the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n *   names, shapes, types, and quantization of the weight data.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n *   concatenated in the order described by the weightSpecs.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandler` that simply loads the provided data.\n */\nexport function fromMemory(\n    modelArtifacts: {}|ModelArtifacts, weightSpecs?: WeightsManifestEntry[],\n    weightData?: ArrayBuffer, trainingConfig?: TrainingConfig): IOHandler {\n  if (arguments.length === 1) {\n    const isModelArtifacts =\n        (modelArtifacts as ModelArtifacts).modelTopology != null ||\n        (modelArtifacts as ModelArtifacts).weightSpecs != null;\n    if (isModelArtifacts) {\n      return new PassthroughLoader(modelArtifacts as ModelArtifacts);\n    } else {\n      // Legacy support: with only modelTopology.\n      // TODO(cais): Remove this deprecated API.\n      console.warn(\n          'Please call tf.io.fromMemory() with only one argument. ' +\n          'The argument should be of type ModelArtifacts. ' +\n          'The multi-argument signature of tf.io.fromMemory() has been ' +\n          'deprecated and will be removed in a future release.');\n      return new PassthroughLoader({modelTopology: modelArtifacts as {}});\n    }\n  } else {\n    // Legacy support.\n    // TODO(cais): Remove this deprecated API.\n    console.warn(\n        'Please call tf.io.fromMemory() with only one argument. ' +\n        'The argument should be of type ModelArtifacts. ' +\n        'The multi-argument signature of tf.io.fromMemory() has been ' +\n        'deprecated and will be removed in a future release.');\n    return new PassthroughLoader({\n      modelTopology: modelArtifacts as {},\n      weightSpecs,\n      weightData,\n      trainingConfig\n    });\n  }\n}\n\n/**\n * Creates an IOHandler that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n *   // ... do something with the artifacts ...\n *   return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n *     `SaveResult`.\n */\nexport function withSaveHandler(\n    saveHandler: (artifacts: ModelArtifacts) =>\n        Promise<SaveResult>): IOHandler {\n  return new PassthroughSaver(saveHandler);\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor1D, Tensor2D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {TensorLike} from '../types';\nimport * as util from '../util';\n\nimport {oneHot} from './one_hot';\nimport {op} from './operation';\n\n/**\n * Computes the confusion matrix from true labels and predicted labels.\n *\n * ```js\n * const labels = tf.tensor1d([0, 1, 2, 1, 0], 'int32');\n * const predictions = tf.tensor1d([0, 2, 2, 1, 0], 'int32');\n * const numClasses = 3;\n * const out = tf.math.confusionMatrix(labels, predictions, numClasses);\n * out.print();\n * // Expected output matrix:\n * // [[2, 0, 0],\n * //  [0, 1, 1],\n * //  [0, 0, 1]]\n * ```\n *\n * @param labels The target labels, assumed to be 0-based integers\n *   for the classes. The shape is `[numExamples]`, where\n *   `numExamples` is the number of examples included.\n * @param predictions The predicted classes, assumed to be\n *   0-based integers for the classes. Must have the same shape as `labels`.\n * @param numClasses Number of all classes, as an integer.\n *   Its value must be larger than the largest element in `labels` and\n *   `predictions`.\n * @returns The confusion matrix as a int32-type 2D tensor. The value at\n *   row `r` and column `c` is the number of times examples of actual class\n *   `r` were predicted as class `c`.\n */\n/** @doc {heading: 'Operations', subheading: 'Evaluation'} */\nexport function confusionMatrix_(\n    labels: Tensor1D|TensorLike, predictions: Tensor1D|TensorLike,\n    numClasses: number): Tensor2D {\n  const $labels = convertToTensor(labels, 'labels', 'confusionMatrix');\n  const $predictions =\n      convertToTensor(predictions, 'predictions', 'confusionMatrix');\n\n  util.assert(\n      numClasses == null || numClasses > 0 && Number.isInteger(numClasses),\n      () => `If provided, numClasses must be a positive integer, ` +\n          `but got ${numClasses}`);\n  util.assert(\n      $labels.rank === 1,\n      () => `Expected the rank of labels to be 1, but got ${$labels.rank}`);\n  util.assert(\n      $predictions.rank === 1,\n      () => `Expected the rank of predictions to be 1, ` +\n          `but got ${$predictions.rank}`);\n  util.assert(\n      $labels.shape[0] === $predictions.shape[0],\n      () => `Mismatch in the number of examples: ` +\n          `${$labels.shape[0]} vs. ${$predictions.shape[0]}. ` +\n          `Labels and predictions should have the same number of elements.`);\n  util.assert(\n      numClasses > 0 && Number.isInteger(numClasses),\n      () => `numClasses is required to be a positive integer, but got ` +\n          `${numClasses}`);\n  // TODO(cais): In the future, if oneHot supports tensors inputs for\n  //   `numClasses`, `confusionMatrix` can make `numClasses` optional.\n\n  const oneHotLabels = oneHot($labels.asType('int32'), numClasses) as Tensor2D;\n  const oneHotPredictions =\n      oneHot($predictions.asType('int32'), numClasses) as Tensor2D;\n  const oneHotLabelsT: Tensor2D = oneHotLabels.transpose();\n  return oneHotLabelsT.matMul(oneHotPredictions).asType('int32');\n}\n\nexport const confusionMatrix = op({confusionMatrix_});\n","/**\n * @license\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {getKernel} from '../kernel_registry';\nimport {Tensor, Tensor2D, Tensor3D} from '../tensor';\nimport {convertToTensor} from '../tensor_util_env';\nimport {PixelData, TensorLike} from '../types';\n\nimport {op} from './operation';\nimport {tensor3d} from './tensor_ops';\n\nlet fromPixels2DContext: CanvasRenderingContext2D;\n\n/**\n * Creates a `tf.Tensor` from an image.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * tf.browser.fromPixels(image).print();\n * ```\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n */\n/** @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true} */\nfunction fromPixels_(\n    pixels: PixelData|ImageData|HTMLImageElement|HTMLCanvasElement|\n    HTMLVideoElement,\n    numChannels = 3): Tensor3D {\n  // Sanity checks.\n  if (numChannels > 4) {\n    throw new Error(\n        'Cannot construct Tensor with more than 4 channels from pixels.');\n  }\n  if (pixels == null) {\n    throw new Error('pixels passed to tf.browser.fromPixels() can not be null');\n  }\n  let isPixelData = false;\n  let isImageData = false;\n  let isVideo = false;\n  let isImage = false;\n  let isCanvasLike = false;\n  if ((pixels as PixelData).data instanceof Uint8Array) {\n    isPixelData = true;\n  } else if (\n      typeof (ImageData) !== 'undefined' && pixels instanceof ImageData) {\n    isImageData = true;\n  } else if (\n      typeof (HTMLVideoElement) !== 'undefined' &&\n      pixels instanceof HTMLVideoElement) {\n    isVideo = true;\n  } else if (\n      typeof (HTMLImageElement) !== 'undefined' &&\n      pixels instanceof HTMLImageElement) {\n    isImage = true;\n    // tslint:disable-next-line: no-any\n  } else if ((pixels as any).getContext != null) {\n    isCanvasLike = true;\n  } else {\n    throw new Error(\n        'pixels passed to tf.browser.fromPixels() must be either an ' +\n        `HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData ` +\n        `in browser, or OffscreenCanvas, ImageData in webworker` +\n        ` or {data: Uint32Array, width: number, height: number}, ` +\n        `but was ${(pixels as {}).constructor.name}`);\n  }\n  if (isVideo) {\n    const HAVE_CURRENT_DATA_READY_STATE = 2;\n    if (isVideo &&\n        (pixels as HTMLVideoElement).readyState <\n            HAVE_CURRENT_DATA_READY_STATE) {\n      throw new Error(\n          'The video element has not loaded data yet. Please wait for ' +\n          '`loadeddata` event on the <video> element.');\n    }\n  }\n  // If the current backend has 'FromPixels' registered, it has a more\n  // efficient way of handling pixel uploads, so we call that.\n  const kernel = getKernel('FromPixels', ENGINE.backendName);\n  if (kernel != null) {\n    return ENGINE.runKernel('FromPixels', {pixels} as {}, {numChannels}) as\n        Tensor3D;\n  }\n\n  const [width, height] = isVideo ?\n      [\n        (pixels as HTMLVideoElement).videoWidth,\n        (pixels as HTMLVideoElement).videoHeight\n      ] :\n      [pixels.width, pixels.height];\n  let vals: Uint8ClampedArray|Uint8Array;\n\n  if (isCanvasLike) {\n    vals =\n        // tslint:disable-next-line:no-any\n        (pixels as any).getContext('2d').getImageData(0, 0, width, height).data;\n  } else if (isImageData || isPixelData) {\n    vals = (pixels as PixelData | ImageData).data;\n  } else if (isImage || isVideo) {\n    if (fromPixels2DContext == null) {\n      fromPixels2DContext = document.createElement('canvas').getContext('2d');\n    }\n    fromPixels2DContext.canvas.width = width;\n    fromPixels2DContext.canvas.height = height;\n    fromPixels2DContext.drawImage(\n        pixels as HTMLVideoElement, 0, 0, width, height);\n    vals = fromPixels2DContext.getImageData(0, 0, width, height).data;\n  }\n  let values: Int32Array;\n  if (numChannels === 4) {\n    values = new Int32Array(vals);\n  } else {\n    const numPixels = width * height;\n    values = new Int32Array(numPixels * numChannels);\n    for (let i = 0; i < numPixels; i++) {\n      for (let channel = 0; channel < numChannels; ++channel) {\n        values[i * numChannels + channel] = vals[i * 4 + channel];\n      }\n    }\n  }\n  const outShape: [number, number, number] = [height, width, numChannels];\n  return tensor3d(values, outShape, 'int32');\n}\n\n/**\n * Draws a `tf.Tensor` of pixel values to a byte array or optionally a\n * canvas.\n *\n * When the dtype of the input is 'float32', we assume values in the range\n * [0-1]. Otherwise, when input is 'int32', we assume values in the range\n * [0-255].\n *\n * Returns a promise that resolves when the canvas has been drawn to.\n *\n * @param img A rank-2 or rank-3 tensor. If rank-2, draws grayscale. If\n *     rank-3, must have depth of 1, 3 or 4. When depth of 1, draws\n * grayscale. When depth of 3, we draw with the first three components of\n * the depth dimension corresponding to r, g, b and alpha = 1. When depth of\n * 4, all four components of the depth dimension correspond to r, g, b, a.\n * @param canvas The canvas to draw to.\n */\n/** @doc {heading: 'Browser', namespace: 'browser'} */\nexport async function toPixels(\n    img: Tensor2D|Tensor3D|TensorLike,\n    canvas?: HTMLCanvasElement): Promise<Uint8ClampedArray> {\n  let $img = convertToTensor(img, 'img', 'toPixels');\n  if (!(img instanceof Tensor)) {\n    // Assume int32 if user passed a native array.\n    $img = $img.toInt();\n  }\n  if ($img.rank !== 2 && $img.rank !== 3) {\n    throw new Error(\n        `toPixels only supports rank 2 or 3 tensors, got rank ${$img.rank}.`);\n  }\n  const [height, width] = $img.shape.slice(0, 2);\n  const depth = $img.rank === 2 ? 1 : $img.shape[2];\n\n  if (depth > 4 || depth === 2) {\n    throw new Error(\n        `toPixels only supports depth of size ` +\n        `1, 3 or 4 but got ${depth}`);\n  }\n\n  const data = await $img.data();\n  const minTensor = $img.min();\n  const maxTensor = $img.max();\n  const vals = await Promise.all([minTensor.data(), maxTensor.data()]);\n  const minVals = vals[0];\n  const maxVals = vals[1];\n  const min = minVals[0];\n  const max = maxVals[0];\n  minTensor.dispose();\n  maxTensor.dispose();\n  if ($img.dtype === 'float32') {\n    if (min < 0 || max > 1) {\n      throw new Error(\n          `Tensor values for a float32 Tensor must be in the ` +\n          `range [0 - 1] but got range [${min} - ${max}].`);\n    }\n  } else if ($img.dtype === 'int32') {\n    if (min < 0 || max > 255) {\n      throw new Error(\n          `Tensor values for a int32 Tensor must be in the ` +\n          `range [0 - 255] but got range [${min} - ${max}].`);\n    }\n  } else {\n    throw new Error(\n        `Unsupported type for toPixels: ${$img.dtype}.` +\n        ` Please use float32 or int32 tensors.`);\n  }\n  const multiplier = $img.dtype === 'float32' ? 255 : 1;\n  const bytes = new Uint8ClampedArray(width * height * 4);\n\n  for (let i = 0; i < height * width; ++i) {\n    let r, g, b, a;\n    if (depth === 1) {\n      r = data[i] * multiplier;\n      g = data[i] * multiplier;\n      b = data[i] * multiplier;\n      a = 255;\n    } else if (depth === 3) {\n      r = data[i * 3] * multiplier;\n      g = data[i * 3 + 1] * multiplier;\n      b = data[i * 3 + 2] * multiplier;\n      a = 255;\n    } else if (depth === 4) {\n      r = data[i * 4] * multiplier;\n      g = data[i * 4 + 1] * multiplier;\n      b = data[i * 4 + 2] * multiplier;\n      a = data[i * 4 + 3] * multiplier;\n    }\n\n    const j = i * 4;\n    bytes[j + 0] = Math.round(r);\n    bytes[j + 1] = Math.round(g);\n    bytes[j + 2] = Math.round(b);\n    bytes[j + 3] = Math.round(a);\n  }\n\n  if (canvas != null) {\n    canvas.width = width;\n    canvas.height = height;\n    const ctx = canvas.getContext('2d');\n    const imageData = new ImageData(bytes, width, height);\n    ctx.putImageData(imageData, 0, 0);\n  }\n  if ($img !== img) {\n    $img.dispose();\n  }\n  return bytes;\n}\n\nexport const fromPixels = op({fromPixels_});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {assert} from './util';\n\n/**\n * Types to support JSON-esque data structures internally.\n *\n * Internally ConfigDict's use camelCase keys and values where the\n * values are class names to be instantiated.  On the python side, these\n * will be snake_case.  Internally we allow Enums into the values for better\n * type safety, but these need to be converted to raw primitives (usually\n * strings) for round-tripping with python.\n *\n * toConfig returns the TS-friendly representation. model.toJSON() returns\n * the pythonic version as that's the portable format.  If you need to\n * python-ify a non-model level toConfig output, you'll need to use a\n * convertTsToPythonic from serialization_utils in -Layers.\n *\n */\nexport declare type ConfigDictValue =\n    boolean | number | string | null | ConfigDictArray | ConfigDict;\nexport declare interface ConfigDict {\n  [key: string]: ConfigDictValue;\n}\nexport declare interface ConfigDictArray extends Array<ConfigDictValue> {}\n\n/**\n * Type to represent the class-type of Serializable objects.\n *\n * Ie the class prototype with access to the constructor and any\n * static members/methods. Instance methods are not listed here.\n *\n * Source for this idea: https://stackoverflow.com/a/43607255\n */\nexport declare type SerializableConstructor<T extends Serializable> = {\n  // tslint:disable-next-line:no-any\n  new (...args: any[]): T; className: string; fromConfig: FromConfigMethod<T>;\n};\nexport declare type FromConfigMethod<T extends Serializable> =\n    (cls: SerializableConstructor<T>, config: ConfigDict) => T;\n\n/**\n * Serializable defines the serialization contract.\n *\n * TFJS requires serializable classes to return their className when asked\n * to avoid issues with minification.\n */\nexport abstract class Serializable {\n  /**\n   * Return the class name for this class to use in serialization contexts.\n   *\n   * Generally speaking this will be the same thing that constructor.name\n   * would have returned.  However, the class name needs to be robust\n   * against minification for serialization/deserialization to work properly.\n   *\n   * There's also places such as initializers.VarianceScaling, where\n   * implementation details between different languages led to different\n   * class hierarchies and a non-leaf node is used for serialization purposes.\n   */\n  getClassName(): string {\n    return (this.constructor as SerializableConstructor<Serializable>)\n        .className;\n  }\n\n  /**\n   * Return all the non-weight state needed to serialize this object.\n   */\n  abstract getConfig(): ConfigDict;\n\n  /**\n   * Creates an instance of T from a ConfigDict.\n   *\n   * This works for most descendants of serializable.  A few need to\n   * provide special handling.\n   * @param cls A Constructor for the class to instantiate.\n   * @param config The Configuration for the object.\n   */\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(config);\n  }\n}\n\n/**\n * Maps string keys to class constructors.\n *\n * Used during (de)serialization from the cross-language JSON format, which\n * requires the class name in the serialization format matches the class\n * names as used in Python, should it exist.\n */\nexport class SerializationMap {\n  private static instance: SerializationMap;\n  classNameMap: {\n    [className: string]:\n        [SerializableConstructor<Serializable>, FromConfigMethod<Serializable>]\n  };\n\n  private constructor() {\n    this.classNameMap = {};\n  }\n\n  /**\n   * Returns the singleton instance of the map.\n   */\n  static getMap(): SerializationMap {\n    if (SerializationMap.instance == null) {\n      SerializationMap.instance = new SerializationMap();\n    }\n    return SerializationMap.instance;\n  }\n\n  /**\n   * Registers the class as serializable.\n   */\n  static register<T extends Serializable>(cls: SerializableConstructor<T>) {\n    SerializationMap.getMap().classNameMap[cls.className] =\n        [cls, cls.fromConfig];\n  }\n}\n\n/**\n * Register a class with the serialization map of TensorFlow.js.\n *\n * This is often used for registering custom Layers, so they can be\n * serialized and deserialized.\n *\n * Example:\n *\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n *   static className = 'MyCustomLayer';\n *\n *   constructor(config) {\n *     super(config);\n *   }\n * }\n * tf.serialization.registerClass(MyCustomLayer);\n * ```\n *\n * @param cls The class to be registered. It must have a public static member\n *   called `className` defined and the value must be a non-empty string.\n */\n/** @doc {heading: 'Models', subheading: 'Serialization', ignoreCI: true} */\nexport function registerClass<T extends Serializable>(\n    cls: SerializableConstructor<T>) {\n  assert(\n      cls.className != null,\n      () => `Class being registered does not have the static className ` +\n          `property defined.`);\n  assert(\n      typeof cls.className === 'string',\n      () => `className is required to be a string, but got type ` +\n          typeof cls.className);\n  assert(\n      cls.className.length > 0,\n      () => `Class being registered has an empty-string as its className, ` +\n          `which is disallowed.`);\n\n  SerializationMap.register(cls);\n}\n","/** @license See the LICENSE file. */\n\n// This code is auto-generated, do not modify this file!\nconst version = '1.7.4';\nexport {version};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as gpgpu_util from './backends/webgl/gpgpu_util';\nimport * as webgl_util from './backends/webgl/webgl_util';\nimport {env} from './environment';\n\nexport {MathBackendWebGL, WebGLMemoryInfo, WebGLTimingInfo} from './backends/webgl/backend_webgl';\nexport {setWebGLContext} from './backends/webgl/canvas_util';\nexport {GPGPUContext} from './backends/webgl/gpgpu_context';\nexport {GPGPUProgram} from './backends/webgl/gpgpu_math';\n// WebGL specific utils.\nexport {gpgpu_util, webgl_util};\n\n/**\n * Enforce use of half precision textures if available on the platform.\n */\n/** @doc {heading: 'Environment', namespace: 'webgl'} */\nexport function forceHalfFloat(): void {\n  env().set('WEBGL_FORCE_F16_TEXTURES', true);\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {dispose} from '../globals';\nimport {variableGrads} from '../gradients';\nimport {scalar} from '../ops/ops';\nimport {Serializable} from '../serialization';\nimport {Scalar, Variable} from '../tensor';\nimport {NamedTensor, NamedTensorMap} from '../tensor_types';\n\n/**\n * A variable that belongs to an optimizer.\n *\n * The `originalName` field is required for keeping track of the canonical\n * name of the variable, which is usually the name of the model weight that\n * the variable is related to plus a suffix, e.g., 'dense1/kernel/momentum'.\n * The name of the `Variable` object itself cannot be used directly due to\n * possible deduplication: Every `Variable` must have a unique name but more\n * than one optimizer objects of the same type may be created for the same model\n * or the same `Variable`.\n */\nexport interface OptimizerVariable {\n  originalName: string;\n  variable: Variable;\n}\n\n/** @doc {heading: 'Training', subheading: 'Classes', namespace: 'train'} */\nexport abstract class Optimizer extends Serializable {\n  protected iterations_: number;\n\n  /**\n   * Executes `f()` and minimizes the scalar output of `f()` by computing\n   * gradients of y with respect to the list of trainable variables provided by\n   * `varList`. If no list is provided, it defaults to all trainable variables.\n   *\n   * @param f The function to execute and whose output to minimize.\n   * @param returnCost Whether to return the scalar cost value produced by\n   * executing `f()`.\n   * @param varList An optional list of variables to update. If specified, only\n   * the trainable variables in varList will be updated by minimize. Defaults to\n   * all trainable variables.\n   */\n  /** @doc {heading: 'Training', subheading: 'Optimizers'} */\n  minimize(f: () => Scalar, returnCost = false, varList?: Variable[]): Scalar\n      |null {\n    const {value, grads} = this.computeGradients(f, varList);\n\n    if (varList != null) {\n      const gradArray: NamedTensor[] =\n          varList.map(v => ({name: v.name, tensor: grads[v.name]}));\n      this.applyGradients(gradArray);\n    } else {\n      this.applyGradients(grads);\n    }\n\n    // Dispose gradients.\n    dispose(grads);\n\n    if (returnCost) {\n      return value;\n    } else {\n      value.dispose();\n      return null;\n    }\n  }\n\n  /**\n   * The number of iterations that this optimizer instance has been invoked for.\n   */\n  get iterations(): number {\n    if (this.iterations_ == null) {\n      this.iterations_ = 0;\n    }\n    return this.iterations_;\n  }\n\n  protected incrementIterations() {\n    this.iterations_ = this.iterations + 1;\n  }\n\n  /**\n   * Executes f() and computes the gradient of the scalar output of f() with\n   * respect to the list of trainable variables provided by `varList`. If no\n   * list is provided, it defaults to all trainable variables.\n   *\n   * @param f The function to execute and whose output to use for computing\n   * gradients with respect to variables.\n   * @param varList An optional list of variables to compute gradients with\n   * respect to. If specified, only the trainable variables in varList will have\n   * gradients computed with respect to. Defaults to all trainable variables.\n   */\n  computeGradients(f: () => Scalar, varList?: Variable[]):\n      {value: Scalar, grads: NamedTensorMap} {\n    return variableGrads(f, varList);\n  }\n\n  /**\n   * Updates variables by using the computed gradients.\n   *\n   * @param variableGradients A mapping of variable name to its gradient value.\n   */\n  abstract applyGradients(variableGradients: NamedTensorMap|\n                          NamedTensor[]): void;\n\n  /**\n   * Dispose the variables (if any) owned by this optimizer instance.\n   */\n  dispose(): void {\n    if (this.iterations_ != null) {\n      dispose(this.iterations_);\n    }\n  }\n\n  async saveIterations(): Promise<NamedTensor> {\n    if (this.iterations_ == null) {\n      this.iterations_ = 0;\n    }\n    return {\n      name: 'iter',  // Named for Python compatibility.\n      // TODO(cais): Use 'int64' type when available.\n      tensor: scalar(this.iterations_, 'int32')\n    };\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    throw new Error('getWeights() is not implemented for this optimizer yet.');\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    throw new Error(\n        `setWeights() is not implemented for this optimizer class ` +\n        `${this.getClassName()}`);\n  }\n\n  /**\n   * Extract the first element of the weight values and set it\n   * as the iterations counter variable of this instance of optimizer.\n   *\n   * @param weightValues\n   * @returns Weight values with the first element consumed and excluded.\n   */\n  protected async extractIterations(weightValues: NamedTensor[]):\n      Promise<NamedTensor[]> {\n    this.iterations_ = (await weightValues[0].tensor.data())[0];\n    return weightValues.slice(1);\n  }\n}\n\nObject.defineProperty(Optimizer, Symbol.hasInstance, {\n  value: (instance: Optimizer) => {\n    return instance.minimize != null && instance.computeGradients != null &&\n        instance.applyGradients != null;\n  }\n});\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {zerosLike} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {NamedTensor, NamedVariableMap} from '../tensor_types';\nimport {Optimizer, OptimizerVariable} from './optimizer';\n\n/** @doclink Optimizer */\nexport class AdadeltaOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'Adadelta';  // Name matters for Python compatibility.\n  private accumulatedGrads: OptimizerVariable[] = [];\n  private accumulatedUpdates: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, protected rho: number,\n      protected epsilon: number = null) {\n    super();\n\n    if (epsilon == null) {\n      this.epsilon = ENGINE.backend.epsilon();\n    }\n  }\n\n  applyGradients(variableGradients: NamedVariableMap|NamedTensor[]) {\n    const variableNames = Array.isArray(variableGradients) ?\n        variableGradients.map(item => item.name) :\n        Object.keys(variableGradients);\n\n    variableNames.forEach((name, i) => {\n      const value = ENGINE.registeredVariables[name];\n      const trainable = false;\n      if (this.accumulatedGrads[i] == null) {\n        this.accumulatedGrads[i] = {\n          originalName: `${name}/accum_grad`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n      if (this.accumulatedUpdates[i] == null) {\n        this.accumulatedUpdates[i] = {\n          originalName: `${name}/accum_var`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n\n      const gradient = Array.isArray(variableGradients) ?\n          variableGradients[i].tensor :\n          variableGradients[name];\n      if (gradient == null) {\n        return;\n      }\n\n      const accumulatedGrad = this.accumulatedGrads[i].variable;\n      const accumulatedUpdate = this.accumulatedUpdates[i].variable;\n\n      tidy(() => {\n        const newAccumulatedGrad = accumulatedGrad.mul(this.rho).add(\n            gradient.square().mul(1 - this.rho));\n\n        const updates = accumulatedUpdate.add(this.epsilon)\n                            .sqrt()\n                            .div(accumulatedGrad.add(this.epsilon).sqrt())\n                            .mul(gradient);\n\n        const newAccumulatedUpdate = accumulatedUpdate.mul(this.rho).add(\n            updates.square().mul(1 - this.rho));\n\n        accumulatedGrad.assign(newAccumulatedGrad);\n        accumulatedUpdate.assign(newAccumulatedUpdate);\n\n        const newValue = updates.mul(-this.learningRate).add(value);\n        value.assign(newValue);\n      });\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    if (this.accumulatedUpdates != null) {\n      dispose(this.accumulatedGrads.map(v => v.variable));\n      dispose(this.accumulatedUpdates.map(v => v.variable));\n    }\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    // Order matters for Python compatibility.\n    const variables: OptimizerVariable[] =\n        [...this.accumulatedGrads, ...this.accumulatedUpdates];\n    return [await this.saveIterations()].concat(\n        variables.map(v => ({name: v.originalName, tensor: v.variable})));\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    const variableCount = weightValues.length / 2;\n    const trainable = false;\n    this.accumulatedGrads =\n        weightValues.slice(0, variableCount).map(v => ({\n                                                   originalName: v.name,\n                                                   variable: v.tensor.variable(\n                                                       trainable)\n                                                 }));\n    this.accumulatedUpdates =\n        weightValues.slice(variableCount, variableCount * 2)\n            .map(v => ({\n                   originalName: v.name,\n                   variable: v.tensor.variable(trainable)\n                 }));\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'rho': this.rho,\n      'epsilon': this.epsilon\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(config['learningRate'], config['rho'], config['epsilon']);\n  }\n}\nregisterClass(AdadeltaOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {fill} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {NamedTensor, NamedVariableMap} from '../tensor_types';\n\nimport {Optimizer, OptimizerVariable} from './optimizer';\n\n/** @doclink Optimizer */\nexport class AdagradOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'Adagrad';  // Note: Name matters for Python compatibility.\n\n  private accumulatedGrads: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, private initialAccumulatorValue = 0.1) {\n    super();\n  }\n\n  applyGradients(variableGradients: NamedVariableMap|NamedTensor[]) {\n    const variableNames = Array.isArray(variableGradients) ?\n        variableGradients.map(item => item.name) :\n        Object.keys(variableGradients);\n\n    variableNames.forEach((name, i) => {\n      const value = ENGINE.registeredVariables[name];\n      if (this.accumulatedGrads[i] == null) {\n        const trainable = false;\n        this.accumulatedGrads[i] = {\n          originalName: `${name}/accumulator`,\n          variable: tidy(\n              () => fill(value.shape, this.initialAccumulatorValue)\n                        .variable(trainable))\n        };\n      }\n\n      const gradient = Array.isArray(variableGradients) ?\n          variableGradients[i].tensor :\n          variableGradients[name];\n      if (gradient == null) {\n        return;\n      }\n\n      const accumulatedGrad = this.accumulatedGrads[i].variable;\n\n      tidy(() => {\n        const newAccumulatedGrad = accumulatedGrad.add(gradient.square());\n        accumulatedGrad.assign(newAccumulatedGrad);\n\n        const newValue =\n            gradient\n                .div(newAccumulatedGrad.add(ENGINE.backend.epsilon()).sqrt())\n                .mul(-this.learningRate)\n                .add(value);\n        value.assign(newValue);\n      });\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    if (this.accumulatedGrads != null) {\n      dispose(this.accumulatedGrads.map(v => v.variable));\n    }\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    // Order matters for Python compatibility.\n    return [await this.saveIterations()].concat(this.accumulatedGrads.map(\n        v => ({name: v.originalName, tensor: v.variable})));\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    const trainable = false;\n    this.accumulatedGrads = weightValues.map(\n        v => ({originalName: v.name, variable: v.tensor.variable(trainable)}));\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'initialAccumulatorValue': this.initialAccumulatorValue,\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(config['learningRate'], config['initialAccumulatorValue']);\n  }\n}\nregisterClass(AdagradOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {pow, scalar, sub, zerosLike} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {Variable} from '../tensor';\nimport {NamedTensor, NamedVariableMap} from '../tensor_types';\n\nimport {Optimizer, OptimizerVariable} from './optimizer';\n\nexport class AdamOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'Adam';  // Note: Name matters for Python compatibility.\n  private accBeta1: Variable;\n  private accBeta2: Variable;\n\n  private accumulatedFirstMoment: OptimizerVariable[] = [];\n  private accumulatedSecondMoment: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, protected beta1: number,\n      protected beta2: number, protected epsilon: number = null) {\n    super();\n    tidy(() => {\n      // accB* will be updated by batch.\n      this.accBeta1 = scalar(beta1).variable();\n      this.accBeta2 = scalar(beta2).variable();\n    });\n\n    if (epsilon == null) {\n      this.epsilon = ENGINE.backend.epsilon();\n    }\n  }\n\n  applyGradients(variableGradients: NamedVariableMap|NamedTensor[]) {\n    const varNames = Array.isArray(variableGradients) ?\n        variableGradients.map(v => v.name) :\n        Object.keys(variableGradients);\n    tidy(() => {\n      const oneMinusAccBeta1 = sub(1, this.accBeta1);\n      const oneMinusAccBeta2 = sub(1, this.accBeta2);\n\n      varNames.forEach((name, i) => {\n        const value = ENGINE.registeredVariables[name];\n        const trainable = false;\n        if (this.accumulatedFirstMoment[i] == null) {\n          this.accumulatedFirstMoment[i] = {\n            originalName: `${name}/m`,\n            variable: tidy(() => zerosLike(value).variable(trainable))\n          };\n        }\n        if (this.accumulatedSecondMoment[i] == null) {\n          this.accumulatedSecondMoment[i] = {\n            originalName: `${name}/v`,\n            variable: tidy(() => zerosLike(value).variable(trainable))\n          };\n        }\n\n        const gradient = Array.isArray(variableGradients) ?\n            variableGradients[i].tensor :\n            variableGradients[name];\n        if (gradient == null) {\n          return;\n        }\n\n        const firstMoment = this.accumulatedFirstMoment[i].variable;\n        const secondMoment = this.accumulatedSecondMoment[i].variable;\n\n        const newFirstMoment =\n            firstMoment.mul(this.beta1).add(gradient.mul(1 - this.beta1));\n        const newSecondMoment = secondMoment.mul(this.beta2)\n                                    .add(gradient.square().mul(1 - this.beta2));\n\n        const biasCorrectedFirstMoment = newFirstMoment.div(oneMinusAccBeta1);\n        const biasCorrectedSecondMoment = newSecondMoment.div(oneMinusAccBeta2);\n\n        firstMoment.assign(newFirstMoment);\n        secondMoment.assign(newSecondMoment);\n\n        const newValue =\n            biasCorrectedFirstMoment\n                .div(biasCorrectedSecondMoment.sqrt().add(this.epsilon))\n                .mul(-this.learningRate)\n                .add(value);\n        value.assign(newValue);\n      });\n\n      this.accBeta1.assign(this.accBeta1.mul(this.beta1));\n      this.accBeta2.assign(this.accBeta2.mul(this.beta2));\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    this.accBeta1.dispose();\n    this.accBeta2.dispose();\n\n    if (this.accumulatedFirstMoment != null) {\n      dispose(this.accumulatedFirstMoment.map(v => v.variable));\n    }\n    if (this.accumulatedSecondMoment != null) {\n      dispose(this.accumulatedSecondMoment.map(v => v.variable));\n    }\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    // Order matters for Python compatibility.\n    const variables: OptimizerVariable[] =\n        [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment];\n    return [await this.saveIterations()].concat(\n        variables.map(v => ({name: v.originalName, tensor: v.variable})));\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    tidy(() => {\n      this.accBeta1.assign(pow(this.beta1, this.iterations_ + 1));\n      this.accBeta2.assign(pow(this.beta2, this.iterations_ + 1));\n    });\n\n    const variableCount = weightValues.length / 2;\n    const trainable = false;\n    this.accumulatedFirstMoment =\n        weightValues.slice(0, variableCount).map(v => ({\n                                                   originalName: v.name,\n                                                   variable: v.tensor.variable(\n                                                       trainable)\n                                                 }));\n    this.accumulatedSecondMoment =\n        weightValues.slice(variableCount, variableCount * 2)\n            .map(v => ({\n                   originalName: v.name,\n                   variable: v.tensor.variable(trainable)\n                 }));\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'beta1': this.beta1,\n      'beta2': this.beta2,\n      'epsilon': this.epsilon,\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(\n        config['learningRate'], config['beta1'], config['beta2'],\n        config['epsilon']);\n  }\n}\nregisterClass(AdamOptimizer);\n","﻿/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {div, scalar, sub, zerosLike} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {Variable} from '../tensor';\nimport {NamedTensor, NamedVariableMap} from '../tensor_types';\nimport {Optimizer, OptimizerVariable} from './optimizer';\n\nexport class AdamaxOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'Adamax';  // Note: Name matters for Python compatbility.\n  private accBeta1: Variable;\n  private iteration: Variable;\n\n  private accumulatedFirstMoment: OptimizerVariable[] = [];\n  private accumulatedWeightedInfNorm: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, protected beta1: number,\n      protected beta2: number, protected epsilon: number = null,\n      protected decay = 0.0) {\n    super();\n\n    tidy(() => {\n      this.iteration = scalar(0).variable();\n      this.accBeta1 = scalar(beta1).variable();\n    });\n\n    if (epsilon == null) {\n      this.epsilon = ENGINE.backend.epsilon();\n    }\n  }\n\n  applyGradients(variableGradients: NamedVariableMap|NamedTensor[]) {\n    const variableNames = Array.isArray(variableGradients) ?\n        variableGradients.map(item => item.name) :\n        Object.keys(variableGradients);\n\n    tidy(() => {\n      const oneMinusAccBeta1 = sub(1, this.accBeta1);\n      const lr = div(-this.learningRate, this.iteration.mul(this.decay).add(1));\n\n      variableNames.forEach((name, i) => {\n        const value = ENGINE.registeredVariables[name];\n        const trainable = false;\n        if (this.accumulatedFirstMoment[i] == null) {\n          this.accumulatedFirstMoment[i] = {\n            originalName: `${name}/m`,\n            variable: zerosLike(value).variable(trainable)\n          };\n        }\n        if (this.accumulatedWeightedInfNorm[i] == null) {\n          this.accumulatedWeightedInfNorm[i] = {\n            originalName: `${name}/v`,\n            variable: zerosLike(value).variable(trainable)\n          };\n        }\n\n        const gradient = Array.isArray(variableGradients) ?\n            variableGradients[i].tensor :\n            variableGradients[name];\n        if (gradient == null) {\n          return;\n        }\n\n        const firstMoment = this.accumulatedFirstMoment[i].variable;\n        const weightedInfNorm = this.accumulatedWeightedInfNorm[i].variable;\n\n        const newFirstMoment =\n            firstMoment.mul(this.beta1).add(gradient.mul(1 - this.beta1));\n\n        const ut0 = weightedInfNorm.mul(this.beta2);\n        const ut1 = gradient.abs();\n\n        const newWeightedInfNorm = ut0.maximum(ut1);\n\n        firstMoment.assign(newFirstMoment);\n        weightedInfNorm.assign(newWeightedInfNorm);\n\n        const newValue =\n            lr.div(oneMinusAccBeta1)\n                .mul(newFirstMoment.div(newWeightedInfNorm.add(this.epsilon)))\n                .add(value);\n\n        value.assign(newValue);\n      });\n\n      this.iteration.assign(this.iteration.add(1));\n      this.accBeta1.assign(this.accBeta1.mul(this.beta1));\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    this.accBeta1.dispose();\n    this.iteration.dispose();\n\n    if (this.accumulatedFirstMoment != null) {\n      dispose(this.accumulatedFirstMoment.map(v => v.variable));\n    }\n    if (this.accumulatedWeightedInfNorm != null) {\n      dispose(this.accumulatedWeightedInfNorm.map(v => v.variable));\n    }\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    throw new Error('getWeights() is not implemented for Adamax yet.');\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    throw new Error('setWeights() is not implemented for Adamax yet.');\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'beta1': this.beta1,\n      'beta2': this.beta2,\n      'epsilon': this.epsilon,\n      'decay': this.decay\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(\n        config['learningRate'], config['beta1'], config['beta2'],\n        config['epsilon'], config['decay']);\n  }\n}\nregisterClass(AdamaxOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {keep, tidy} from '../globals';\nimport {scalar} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {Scalar} from '../tensor';\nimport {NamedTensor, NamedTensorMap} from '../tensor_types';\n\nimport {Optimizer} from './optimizer';\n\n/** @doclink Optimizer */\nexport class SGDOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'SGD';  // Note: Name matters for Python compatibility.\n  protected c: Scalar;\n\n  constructor(protected learningRate: number) {\n    super();\n    this.setLearningRate(learningRate);\n  }\n\n  applyGradients(variableGradients: NamedTensorMap|NamedTensor[]) {\n    const varNames = Array.isArray(variableGradients) ?\n        variableGradients.map(v => v.name) :\n        Object.keys(variableGradients);\n    varNames.forEach((name, i) => {\n      const gradient = Array.isArray(variableGradients) ?\n          variableGradients[i].tensor :\n          variableGradients[name];\n      if (gradient == null) {\n        return;\n      }\n      const value = ENGINE.registeredVariables[name];\n      tidy(() => {\n        const newValue = this.c.mul(gradient).add(value);\n        value.assign(newValue);\n      });\n    });\n    this.incrementIterations();\n  }\n\n  /**\n   * Sets the learning rate of the optimizer.\n   */\n  setLearningRate(learningRate: number) {\n    this.learningRate = learningRate;\n    if (this.c != null) {\n      this.c.dispose();\n    }\n    this.c = keep(scalar(-learningRate));\n  }\n\n  dispose() {\n    this.c.dispose();\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    return [await this.saveIterations()];\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    if (weightValues.length !== 0) {\n      throw new Error('SGD optimizer does not have settable weights.');\n    }\n  }\n\n  getConfig(): ConfigDict {\n    return {'learningRate': this.learningRate};\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(config['learningRate']);\n  }\n}\nregisterClass(SGDOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {scalar, zerosLike} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {Scalar, Tensor} from '../tensor';\nimport {NamedTensor, NamedVariableMap} from '../tensor_types';\n\nimport {OptimizerVariable} from './optimizer';\nimport {SGDOptimizer} from './sgd_optimizer';\n\n/** @doclink Optimizer */\nexport class MomentumOptimizer extends SGDOptimizer {\n  /** @nocollapse */\n  static className = 'Momentum';  // Name matters for Python compatibility.\n  private m: Scalar;\n  private accumulations: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, private momentum: number,\n      private useNesterov = false) {\n    super(learningRate);\n    this.m = scalar(this.momentum);\n  }\n\n  applyGradients(variableGradients: NamedVariableMap|NamedTensor[]) {\n    const variableNames = Array.isArray(variableGradients) ?\n        variableGradients.map(item => item.name) :\n        Object.keys(variableGradients);\n\n    variableNames.forEach((name, i) => {\n      const value = ENGINE.registeredVariables[name];\n      if (this.accumulations[i] == null) {\n        const trainable = false;\n        this.accumulations[i] = {\n          originalName: `${name}/momentum`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n\n      const accumulation = this.accumulations[i].variable;\n      const gradient = Array.isArray(variableGradients) ?\n          variableGradients[i].tensor :\n          variableGradients[name];\n      if (gradient == null) {\n        return;\n      }\n\n      tidy(() => {\n        let newValue: Tensor;\n        const newAccumulation = this.m.mul(accumulation).add(gradient);\n        if (this.useNesterov) {\n          newValue =\n              this.c.mul(gradient.add(newAccumulation.mul(this.m))).add(value);\n        } else {\n          newValue = this.c.mul(newAccumulation).add(value);\n        }\n        accumulation.assign(newAccumulation);\n        value.assign(newValue);\n      });\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    this.m.dispose();\n    if (this.accumulations != null) {\n      dispose(this.accumulations.map(v => v.variable));\n    }\n  }\n\n  /**\n   * Sets the momentum of the optimizer.\n   *\n   * @param momentum\n   */\n  setMomentum(momentum: number) {\n    this.momentum = momentum;\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    // Order matters for Python compatibility.\n    return [await this.saveIterations()].concat(this.accumulations.map(\n        v => ({name: v.originalName, tensor: v.variable})));\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    const trainable = false;\n    this.accumulations = weightValues.map(\n        v => ({originalName: v.name, variable: v.tensor.variable(trainable)}));\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'momentum': this.momentum,\n      'useNesterov': this.useNesterov\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(\n        config['learningRate'], config['momentum'], config['useNesterov']);\n  }\n}\nregisterClass(MomentumOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {ENGINE} from '../engine';\nimport {dispose, tidy} from '../globals';\nimport {zerosLike} from '../ops/ops';\nimport {ConfigDict, registerClass, Serializable, SerializableConstructor} from '../serialization';\nimport {NamedTensor, NamedTensorMap} from '../tensor_types';\n\nimport {Optimizer, OptimizerVariable} from './optimizer';\n\n/** @doclink Optimizer */\nexport class RMSPropOptimizer extends Optimizer {\n  /** @nocollapse */\n  static className = 'RMSProp';  // Note: Name matters for Python compatibility.\n  private centered: boolean;\n\n  private accumulatedMeanSquares: OptimizerVariable[] = [];\n  private accumulatedMoments: OptimizerVariable[] = [];\n  private accumulatedMeanGrads: OptimizerVariable[] = [];\n\n  constructor(\n      protected learningRate: number, protected decay = 0.9,\n      protected momentum = 0.0, protected epsilon: number = null,\n      centered = false) {\n    super();\n\n    this.centered = centered;\n\n    if (epsilon == null) {\n      this.epsilon = ENGINE.backend.epsilon();\n    }\n    if (learningRate == null) {\n      throw new Error(`learningRate for RMSPropOptimizer must be defined.`);\n    }\n  }\n\n  applyGradients(variableGradients: NamedTensorMap|NamedTensor[]) {\n    const variableNames = Array.isArray(variableGradients) ?\n        variableGradients.map(item => item.name) :\n        Object.keys(variableGradients);\n\n    variableNames.forEach((name, i) => {\n      const value = ENGINE.registeredVariables[name];\n      const trainable = false;\n      if (this.accumulatedMeanSquares[i] == null) {\n        this.accumulatedMeanSquares[i] = {\n          originalName: `${name}/rms`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n      if (this.accumulatedMoments[i] == null) {\n        this.accumulatedMoments[i] = {\n          originalName: `${name}/momentum`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n      if (this.accumulatedMeanGrads[i] == null && this.centered) {\n        this.accumulatedMeanGrads[i] = {\n          originalName: `${name}/mg`,\n          variable: tidy(() => zerosLike(value).variable(trainable))\n        };\n      }\n\n      const gradient = Array.isArray(variableGradients) ?\n          variableGradients[i].tensor :\n          variableGradients[name];\n      if (gradient == null) {\n        return;\n      }\n\n      const accumulatedMeanSquare = this.accumulatedMeanSquares[i].variable;\n      const accumulatedMoments = this.accumulatedMoments[i].variable;\n      tidy(() => {\n        const newAccumulatedMeanSquare =\n            accumulatedMeanSquare.mul(this.decay)\n                .add(gradient.square().mul(1 - this.decay));\n\n        if (this.centered) {\n          const accumulatedMeanGrad = this.accumulatedMeanGrads[i].variable;\n          // Centered gradient\n          const newAccumulatedMeanGrad = accumulatedMeanGrad.mul(this.decay)\n                                             .add(gradient.mul(1 - this.decay));\n\n          const newAccumulatedMoments =\n              accumulatedMoments.mul(this.momentum)\n                  .add(gradient.mul(this.learningRate)\n                           .div(newAccumulatedMeanSquare\n                                    .sub(newAccumulatedMeanGrad.square().add(\n                                        this.epsilon))\n                                    .sqrt()));\n\n          accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n          accumulatedMeanGrad.assign(newAccumulatedMeanGrad);\n          accumulatedMoments.assign(newAccumulatedMoments);\n\n          const newValue = value.sub(newAccumulatedMoments);\n          value.assign(newValue);\n        } else {\n          // Plain gradient\n          const newAccumulatedMeanSquare =\n              accumulatedMeanSquare.mul(this.decay)\n                  .add(gradient.square().mul(1 - this.decay));\n\n          const newAccumulatedMoments =\n              accumulatedMoments.mul(this.momentum)\n                  .add(gradient.mul(this.learningRate)\n                           .div(newAccumulatedMeanSquare.add(this.epsilon)\n                                    .sqrt()));\n\n          accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n          accumulatedMoments.assign(newAccumulatedMoments);\n\n          const newValue = value.sub(newAccumulatedMoments);\n          value.assign(newValue);\n        }\n      });\n    });\n    this.incrementIterations();\n  }\n\n  dispose(): void {\n    if (this.accumulatedMeanSquares != null) {\n      dispose(this.accumulatedMeanSquares.map(v => v.variable));\n    }\n    if (this.accumulatedMeanGrads != null && this.centered) {\n      dispose(this.accumulatedMeanGrads.map(v => v.variable));\n    }\n    if (this.accumulatedMoments != null) {\n      dispose(this.accumulatedMoments.map(v => v.variable));\n    }\n  }\n\n  async getWeights(): Promise<NamedTensor[]> {\n    // Order matters for Python compatibility.\n    const variables: OptimizerVariable[] =\n        [...this.accumulatedMeanSquares, ...this.accumulatedMoments];\n    if (this.centered) {\n      variables.push(...this.accumulatedMeanGrads);\n    }\n    return [await this.saveIterations()].concat(\n        variables.map(v => ({name: v.originalName, tensor: v.variable})));\n  }\n\n  async setWeights(weightValues: NamedTensor[]): Promise<void> {\n    weightValues = await this.extractIterations(weightValues);\n    const variableCount =\n        this.centered ? weightValues.length / 3 : weightValues.length / 2;\n    const trainable = false;\n    this.accumulatedMeanSquares =\n        weightValues.slice(0, variableCount).map(v => ({\n                                                   originalName: v.name,\n                                                   variable: v.tensor.variable(\n                                                       trainable)\n                                                 }));\n    this.accumulatedMoments =\n        weightValues.slice(variableCount, variableCount * 2)\n            .map(v => ({\n                   originalName: v.name,\n                   variable: v.tensor.variable(trainable)\n                 }));\n    if (this.centered) {\n      this.accumulatedMeanGrads =\n          weightValues.slice(variableCount * 2, variableCount * 3)\n              .map(v => ({\n                     originalName: v.name,\n                     variable: v.tensor.variable(trainable)\n                   }));\n    }\n  }\n\n  getConfig(): ConfigDict {\n    return {\n      'learningRate': this.learningRate,\n      'decay': this.decay,\n      'momentum': this.momentum,\n      'epsilon': this.epsilon,\n      'centered': this.centered\n    };\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends Serializable>(\n      cls: SerializableConstructor<T>, config: ConfigDict): T {\n    return new cls(\n        config['learningRate'], config['decay'], config['momentum'],\n        config['epsilon'], config['centered']);\n  }\n}\nregisterClass(RMSPropOptimizer);\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {AdadeltaOptimizer} from './adadelta_optimizer';\nimport {AdagradOptimizer} from './adagrad_optimizer';\nimport {AdamOptimizer} from './adam_optimizer';\nimport {AdamaxOptimizer} from './adamax_optimizer';\nimport {MomentumOptimizer} from './momentum_optimizer';\nimport {RMSPropOptimizer} from './rmsprop_optimizer';\nimport {SGDOptimizer} from './sgd_optimizer';\n\nexport class OptimizerConstructors {\n  /**\n   * Constructs a `tf.SGDOptimizer` that uses stochastic gradient descent.\n   *\n   * ```js\n   * // Fit a quadratic function by learning the coefficients a, b, c.\n   * const xs = tf.tensor1d([0, 1, 2, 3]);\n   * const ys = tf.tensor1d([1.1, 5.9, 16.8, 33.9]);\n   *\n   * const a = tf.scalar(Math.random()).variable();\n   * const b = tf.scalar(Math.random()).variable();\n   * const c = tf.scalar(Math.random()).variable();\n   *\n   * // y = a * x^2 + b * x + c.\n   * const f = x => a.mul(x.square()).add(b.mul(x)).add(c);\n   * const loss = (pred, label) => pred.sub(label).square().mean();\n   *\n   * const learningRate = 0.01;\n   * const optimizer = tf.train.sgd(learningRate);\n   *\n   * // Train the model.\n   * for (let i = 0; i < 10; i++) {\n   *   optimizer.minimize(() => loss(f(xs), ys));\n   * }\n   *\n   * // Make predictions.\n   * console.log(\n   *     `a: ${a.dataSync()}, b: ${b.dataSync()}, c: ${c.dataSync()}`);\n   * const preds = f(xs).dataSync();\n   * preds.forEach((pred, i) => {\n   *   console.log(`x: ${i}, pred: ${pred}`);\n   * });\n   * ```\n   *\n   * @param learningRate The learning rate to use for the SGD algorithm.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static sgd(learningRate: number): SGDOptimizer {\n    return new SGDOptimizer(learningRate);\n  }\n\n  /**\n   * Constructs a `tf.MomentumOptimizer` that uses momentum gradient\n   * descent.\n   *\n   * See\n   * [http://proceedings.mlr.press/v28/sutskever13.pdf](\n   * http://proceedings.mlr.press/v28/sutskever13.pdf)\n   *\n   * @param learningRate The learning rate to use for the Momentum gradient\n   * descent algorithm.\n   * @param momentum The momentum to use for the momentum gradient descent\n   * algorithm.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static momentum(learningRate: number, momentum: number, useNesterov = false):\n      MomentumOptimizer {\n    return new MomentumOptimizer(learningRate, momentum, useNesterov);\n  }\n\n  /**\n   * Constructs a `tf.RMSPropOptimizer` that uses RMSProp gradient\n   * descent. This implementation uses plain momentum and is not centered\n   * version of RMSProp.\n   *\n   * See\n   * [http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf](\n   * http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf)\n   *\n   * @param learningRate The learning rate to use for the RMSProp gradient\n   * descent algorithm.\n   * @param decay The discounting factor for the history/coming gradient.\n   * @param momentum The momentum to use for the RMSProp gradient descent\n   * algorithm.\n   * @param epsilon Small value to avoid zero denominator.\n   * @param centered If true, gradients are normalized by the estimated\n   * variance of the gradient.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static rmsprop(\n      learningRate: number, decay = .9, momentum = 0.0, epsilon: number = null,\n      centered = false): RMSPropOptimizer {\n    return new RMSPropOptimizer(\n        learningRate, decay, momentum, epsilon, centered);\n  }\n\n  /**\n   * Constructs a `tf.AdamOptimizer` that uses the Adam algorithm.\n   * See [https://arxiv.org/abs/1412.6980](https://arxiv.org/abs/1412.6980)\n   *\n   * @param learningRate The learning rate to use for the Adam gradient\n   * descent algorithm.\n   * @param beta1 The exponential decay rate for the 1st moment estimates.\n   * @param beta2 The exponential decay rate for the 2nd moment estimates.\n   * @param epsilon A small constant for numerical stability.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static adam(\n      learningRate = 0.001, beta1 = 0.9, beta2 = 0.999,\n      epsilon: number = null): AdamOptimizer {\n    return new AdamOptimizer(learningRate, beta1, beta2, epsilon);\n  }\n\n  /**\n   * Constructs a `tf.AdadeltaOptimizer` that uses the Adadelta algorithm.\n   * See [https://arxiv.org/abs/1212.5701](https://arxiv.org/abs/1212.5701)\n   *\n   * @param learningRate The learning rate to use for the Adadelta gradient\n   * descent algorithm.\n   * @param rho The learning rate decay over each update.\n   * @param epsilon A constant epsilon used to better condition the grad\n   * update.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static adadelta(learningRate = .001, rho = .95, epsilon: number = null):\n      AdadeltaOptimizer {\n    return new AdadeltaOptimizer(learningRate, rho, epsilon);\n  }\n\n  /**\n   * Constructs a `tf.AdamaxOptimizer` that uses the Adamax algorithm.\n   * See [https://arxiv.org/abs/1412.6980](https://arxiv.org/abs/1412.6980)\n   *\n   * @param learningRate The learning rate to use for the Adamax gradient\n   * descent algorithm.\n   * @param beta1 The exponential decay rate for the 1st moment estimates.\n   * @param beta2 The exponential decay rate for the 2nd moment estimates.\n   * @param epsilon A small constant for numerical stability.\n   * @param decay The learning rate decay over each update.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static adamax(\n      learningRate = 0.002, beta1 = 0.9, beta2 = 0.999, epsilon: number = null,\n      decay = 0.0): AdamaxOptimizer {\n    return new AdamaxOptimizer(learningRate, beta1, beta2, epsilon, decay);\n  }\n\n  /**\n   * Constructs a `tf.AdagradOptimizer` that uses the Adagrad algorithm.\n   * See\n   * [http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf](\n   * http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)\n   * or\n   * [http://ruder.io/optimizing-gradient-descent/index.html#adagrad](\n   * http://ruder.io/optimizing-gradient-descent/index.html#adagrad)\n   *\n   * @param learningRate The learning rate to use for the Adagrad gradient\n   * descent algorithm.\n   * @param initialAccumulatorValue Starting value for the accumulators, must be\n   * positive.\n   */\n  /**\n   * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n   */\n  static adagrad(learningRate: number, initialAccumulatorValue = 0.1):\n      AdagradOptimizer {\n    return new AdagradOptimizer(learningRate, initialAccumulatorValue);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n// So typings can propagate.\nimport {AdadeltaOptimizer} from './optimizers/adadelta_optimizer';\nimport {AdagradOptimizer} from './optimizers/adagrad_optimizer';\nimport {AdamOptimizer} from './optimizers/adam_optimizer';\nimport {AdamaxOptimizer} from './optimizers/adamax_optimizer';\nimport {MomentumOptimizer} from './optimizers/momentum_optimizer';\nimport {OptimizerConstructors} from './optimizers/optimizer_constructors';\nimport {RMSPropOptimizer} from './optimizers/rmsprop_optimizer';\nimport {SGDOptimizer} from './optimizers/sgd_optimizer';\n\n// tslint:disable-next-line:no-unused-expression\n[MomentumOptimizer, SGDOptimizer, AdadeltaOptimizer, AdagradOptimizer,\n RMSPropOptimizer, AdamaxOptimizer, AdamOptimizer];\n\nexport const train = {\n  sgd: OptimizerConstructors.sgd,\n  momentum: OptimizerConstructors.momentum,\n  adadelta: OptimizerConstructors.adadelta,\n  adagrad: OptimizerConstructors.adagrad,\n  rmsprop: OptimizerConstructors.rmsprop,\n  adamax: OptimizerConstructors.adamax,\n  adam: OptimizerConstructors.adam\n};\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nconst delayCallback: Function = (() => {\n  if (typeof requestAnimationFrame !== 'undefined') {\n    return requestAnimationFrame;\n  } else if (typeof setImmediate !== 'undefined') {\n    return setImmediate;\n  }\n  return (f: Function) => f();  // no delays\n})();\n\n/**\n * Returns a promise that resolve when a requestAnimationFrame has completed.\n *\n * On Node.js this uses setImmediate instead of requestAnimationFrame.\n *\n * This is simply a sugar method so that users can do the following:\n * `await tf.nextFrame();`\n */\n/** @doc {heading: 'Performance', subheading: 'Timing'} */\nfunction nextFrame(): Promise<void> {\n  return new Promise<void>(resolve => delayCallback(() => resolve()));\n}\n\nexport {nextFrame};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {add} from '../../ops/add';\nimport {Tensor} from '../../tensor';\nimport {Rank, TensorLike} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    add<T extends Tensor>(b: Tensor|TensorLike): T;\n  }\n}\n\nTensor.prototype.add = function<T extends Tensor>(b: Tensor|TensorLike): T {\n  return add(this, b);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {broadcastTo} from '../../ops/broadcast_to';\nimport {Tensor} from '../../tensor';\nimport {Rank, ShapeMap} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    broadcastTo<R extends Rank>(shape: ShapeMap[R]): Tensor<R>;\n  }\n}\n\nTensor.prototype.broadcastTo = function<R extends Rank>(shape: ShapeMap[R]):\n    Tensor<R> {\n  return broadcastTo(this, shape);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {div} from '../../ops/div';\nimport {Tensor} from '../../tensor';\nimport {Rank, TensorLike} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    div<T extends Tensor>(b: Tensor|TensorLike): T;\n  }\n}\n\nTensor.prototype.div = function<T extends Tensor>(b: Tensor|TensorLike): T {\n  return div(this, b);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {divNoNan} from '../../ops/div_no_nan';\nimport {Tensor} from '../../tensor';\nimport {Rank, TensorLike} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    divNoNan<T extends Tensor>(b: Tensor|TensorLike): T;\n  }\n}\n\nTensor.prototype.divNoNan = function<T extends Tensor>(b: Tensor|\n                                                       TensorLike): T {\n  return divNoNan(this, b);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {squaredDifference} from '../../ops/squared_difference';\nimport {Tensor} from '../../tensor';\nimport {Rank, TensorLike} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    squaredDifference<T extends Tensor>(b: Tensor|TensorLike): T;\n  }\n}\n\nTensor.prototype.squaredDifference = function<T extends Tensor>(b: Tensor|\n                                                                TensorLike): T {\n  return squaredDifference(this, b);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {tile} from '../../ops/tile';\nimport {Tensor} from '../../tensor';\nimport {Rank} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    tile<T extends Tensor>(b: number[]): T;\n  }\n}\n\nTensor.prototype.tile = function<T extends Tensor>(reps: number[]): T {\n  return tile(this, reps) as T;\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {oneHot} from '../../ops/one_hot';\nimport {Tensor} from '../../tensor';\nimport {Rank} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    oneHot(depth: number, onValue: number, offValue: number): Tensor;\n  }\n}\n\nTensor.prototype.oneHot = function(\n    depth: number, onValue = 1, offValue = 0): Tensor {\n  return oneHot(this, depth, onValue, offValue);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {transpose} from '../../ops/transpose';\nimport {Tensor} from '../../tensor';\nimport {Rank} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    transpose<T extends Tensor>(perm?: number[]): T;\n  }\n}\n\nTensor.prototype.transpose = function<T extends Tensor>(\n    this: T, perm?: number[]): T {\n  return transpose(this, perm);\n};\n","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {pad} from '../../ops/pad';\nimport {Tensor} from '../../tensor';\nimport {Rank} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    pad<T extends Tensor>(\n        paddings: Array<[number, number]>, constantValue?: number): T;\n  }\n}\n\nTensor.prototype.pad = function<T extends Tensor>(\n    this: T, paddings: Array<[number, number]>, constantValue: number): T {\n  return pad(this, paddings, constantValue);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {batchNorm} from '../../ops/batchnorm';\nimport {Tensor, Tensor1D} from '../../tensor';\nimport {Rank, TensorLike} from '../../types';\n\ndeclare module '../../tensor' {\n  interface Tensor<R extends Rank = Rank> {\n    batchNorm<T extends Tensor>(\n      mean: Tensor<R> | Tensor1D | TensorLike,\n      variance: Tensor<R> | Tensor1D | TensorLike,\n      offset?: Tensor<R> | Tensor1D | TensorLike,\n      scale?: Tensor<R> | Tensor1D | TensorLike,\n      varianceEpsilon?: number\n    ): Tensor<R>;\n  }\n}\n\nTensor.prototype.batchNorm = function <R extends Rank>(\n  this: Tensor<R> | TensorLike, mean: Tensor<R> | Tensor1D | TensorLike,\n  variance: Tensor<R> | Tensor1D | TensorLike,\n  offset?: Tensor<R> | Tensor1D | TensorLike,\n  scale?: Tensor<R> | Tensor1D | TensorLike,\n  varianceEpsilon?: number): Tensor<R> {\n  return batchNorm(this, mean, variance, offset, scale, varianceEpsilon);\n};\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * @fileoverview\n * @suppress {partialAlias} Optimization disabled due to passing the module\n * object into a function below:\n *\n *   import * as ops from './ops/ops';\n *   setOpHandler(ops);\n */\n\n// Engine is the global singleton that needs to be initialized before the rest\n// of the app.\nimport './engine';\n// Register backend-agnostic flags.\nimport './flags';\n// backend_cpu.ts and backend_webgl.ts are standalone files and should be\n// explicitly included here.\nimport './backends/webgl/backend_webgl';\nimport './backends/cpu/backend_cpu';\n// Import all kernels from cpu.\nimport './backends/cpu/register_all_kernels';\n// Import all kernels from webgl.\nimport './backends/webgl/register_all_kernels';\n\n// Register all the gradients.\nimport './register_all_gradients';\n\nimport './platforms/platform_browser';\nimport './platforms/platform_node';\n\nimport * as backend_util from './backends/backend_util';\n// Serialization.\nimport * as io from './io/io';\nimport * as math from './math';\nimport * as browser from './ops/browser';\nimport * as gather_util from './ops/gather_nd_util';\nimport * as scatter_util from './ops/scatter_nd_util';\nimport * as slice_util from './ops/slice_util';\nimport * as serialization from './serialization';\nimport {setOpHandler} from './tensor';\nimport * as tensor_util from './tensor_util';\nimport * as test_util from './test_util';\nimport * as util from './util';\nimport {version} from './version';\nimport * as webgl from './webgl';\n\nexport {InferenceModel, MetaGraph, MetaGraphInfo, ModelPredictConfig, ModelTensorInfo, SavedModelTensorInfo, SignatureDef, SignatureDefInfo} from './model_types';\n// Optimizers.\nexport {AdadeltaOptimizer} from './optimizers/adadelta_optimizer';\nexport {AdagradOptimizer} from './optimizers/adagrad_optimizer';\nexport {AdamOptimizer} from './optimizers/adam_optimizer';\nexport {AdamaxOptimizer} from './optimizers/adamax_optimizer';\nexport {MomentumOptimizer} from './optimizers/momentum_optimizer';\nexport {Optimizer} from './optimizers/optimizer';\nexport {RMSPropOptimizer} from './optimizers/rmsprop_optimizer';\nexport {SGDOptimizer} from './optimizers/sgd_optimizer';\nexport {Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer, Variable} from './tensor';\nexport {GradSaveFunc, NamedTensorMap, TensorContainer, TensorContainerArray, TensorContainerObject} from './tensor_types';\nexport {DataType, DataTypeMap, DataValues, Rank, RecursiveArray, ShapeMap, sumOutType, TensorLike} from './types';\n\nexport * from './ops/ops';\nexport {LSTMCellFunc} from './ops/lstm';\nexport {Reduction} from './ops/loss_ops';\n\nexport * from './train';\nexport * from './globals';\nexport * from './kernel_names';\nexport * from './kernel_registry';\nexport {customGrad, grad, grads, valueAndGrad, valueAndGrads, variableGrads} from './gradients';\n\nexport {TimingInfo, MemoryInfo} from './engine';\nexport {Environment, env, ENV} from './environment';\nexport {Platform} from './platforms/platform';\n\nexport {version as version_core};\n\n// Top-level method exports.\nexport {nextFrame} from './browser_util';\n\n// Second level exports.\nexport {\n  browser,\n  io,\n  math,\n  serialization,\n  test_util,\n  util,\n  backend_util,\n  webgl,\n  tensor_util,\n  slice_util,\n  gather_util,\n  scatter_util\n};\n\n// Backend specific.\nexport {KernelBackend, BackendTimingInfo, DataMover, DataStorage} from './backends/backend';\n\nimport * as ops from './ops/ops';\nsetOpHandler(ops);\n\n// Import all op chainers and add type info to Tensor.\nimport './public/chained_ops/register_all_chained_ops';\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {backend} from '@tensorflow/tfjs-core';\nimport {DataFormat} from '../keras_format/common';\n\nlet _epsilon: number;\n\n/**\n * Returns the value of the fuzz factor used in numeric expressions.\n */\nexport function epsilon() {\n  if (_epsilon == null) {\n    _epsilon = backend().epsilon();\n  }\n  return _epsilon;\n}\n\n/**\n * Sets the value of the fuzz factor used in numeric expressions.\n * @param e New value of epsilon.\n */\nexport function setEpsilon(e: number) {\n  _epsilon = e;\n}\n\n/**\n * Returns the default image data format convention.\n */\nexport function imageDataFormat(): DataFormat {\n  return 'channelsLast';\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Explicit error types.\n *\n * See the following link for more information about why the code includes\n * calls to setPrototypeOf:\n *\n * https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n */\n// tslint:enable\n\n/**\n * Equivalent of Python's AttributeError.\n */\nexport class AttributeError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, AttributeError.prototype);\n  }\n}\n\n/**\n * Equivalent of Python's RuntimeError.\n */\nexport class RuntimeError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, RuntimeError.prototype);\n  }\n}\n\n/**\n * Equivalent of Python's ValueError.\n */\nexport class ValueError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, ValueError.prototype);\n  }\n}\n\n/**\n * Equivalent of Python's NotImplementedError.\n */\nexport class NotImplementedError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, NotImplementedError.prototype);\n  }\n}\n\n/**\n * Equivalent of Python's AssertionError.\n */\nexport class AssertionError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, AssertionError.prototype);\n  }\n}\n\n/**\n * Equivalent of Python's IndexError.\n */\nexport class IndexError extends Error {\n  constructor(message?: string) {\n    super(message);\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, IndexError.prototype);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: utils/generic_utils.py */\n\nimport {DataType, serialization, util, fused} from '@tensorflow/tfjs-core';\n\nimport {AssertionError, ValueError} from '../errors';\n// tslint:enable\n\n/**\n * If `value` is an Array, equivalent to Python's `value * numValues`.\n * If `value` is not an Array, equivalent to Python's `[value] * numValues`\n */\n// tslint:disable-next-line:no-any\nexport function pyListRepeat(value: any, numValues: number): any[] {\n  if (Array.isArray(value)) {\n    // tslint:disable-next-line:no-any\n    let newArray: any[] = [];\n    for (let i = 0; i < numValues; i++) {\n      newArray = newArray.concat(value);\n    }\n    return newArray;\n  } else {\n    const newArray = new Array(numValues);\n    newArray.fill(value);\n    return newArray;\n  }\n}\n\nexport function assert(val: boolean, message?: string): void {\n  if (!val) {\n    throw new AssertionError(message);\n  }\n}\n\n/**\n * Count the number of elements of the `array` that are equal to `reference`.\n */\nexport function count<T>(array: T[], refernce: T) {\n  let counter = 0;\n  for (const item of array) {\n    if (item === refernce) {\n      counter++;\n    }\n  }\n  return counter;\n}\n\n/**\n * If an array is of length 1, just return the first element. Otherwise, return\n * the full array.\n * @param tensors\n */\nexport function singletonOrArray<T>(xs: T[]): T|T[] {\n  if (xs.length === 1) {\n    return xs[0];\n  }\n  return xs;\n}\n\n/**\n * Normalizes a list/tensor into a list.\n *\n * If a tensor is passed, we return\n * a list of size 1 containing the tensor.\n *\n * @param x target object to be normalized.\n */\n// tslint:disable-next-line:no-any\nexport function toList(x: any): any[] {\n  if (Array.isArray(x)) {\n    return x;\n  }\n  return [x];\n}\n\n/**\n * Generate a UID for a list\n */\n// tslint:disable-next-line:no-any\nexport function objectListUid(objs: any|any[]): string {\n  const objectList = toList(objs);\n  let retVal = '';\n  for (const obj of objectList) {\n    if (obj.id == null) {\n      throw new ValueError(\n          `Object ${obj} passed to objectListUid without an id`);\n    }\n    if (retVal !== '') {\n      retVal = retVal + ', ';\n    }\n    retVal = `${retVal}${Math.abs(obj.id)}`;\n  }\n  return retVal;\n}\n/**\n * Converts string to snake-case.\n * @param name\n */\nexport function toSnakeCase(name: string): string {\n  const intermediate = name.replace(/(.)([A-Z][a-z0-9]+)/g, '$1_$2');\n  const insecure =\n      intermediate.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();\n  /*\n   If the class is private the name starts with \"_\" which is not secure\n   for creating scopes. We prefix the name with \"private\" in this case.\n   */\n  if (insecure[0] !== '_') {\n    return insecure;\n  }\n  return 'private' + insecure;\n}\n\nexport function toCamelCase(identifier: string): string {\n  // quick return for empty string or single character strings\n  if (identifier.length <= 1) {\n    return identifier;\n  }\n  // Check for the underscore indicating snake_case\n  if (identifier.indexOf('_') === -1) {\n    return identifier;\n  }\n  return identifier.replace(/[_]+(\\w|$)/g, (m, p1) => p1.toUpperCase());\n}\n\n// tslint:disable-next-line:no-any\nlet _GLOBAL_CUSTOM_OBJECTS = {} as {[objName: string]: any};\n\nexport function serializeKerasObject(instance: serialization.Serializable):\n    serialization.ConfigDictValue {\n  if (instance === null || instance === undefined) {\n    return null;\n  }\n  const dict: serialization.ConfigDictValue = {};\n  dict['className'] = instance.getClassName();\n  dict['config'] = instance.getConfig();\n  return dict;\n}\n\n/**\n * Replace ndarray-style scalar objects in serialization objects with numbers.\n *\n * Background: In some versions of tf.keras, certain scalar values in the HDF5\n * model save file can be serialized as: `{'type': 'ndarray', 'value': num}`,\n * where in `num` is a plain number. This method converts such serialization\n * to a `number`.\n *\n * @param config The keras-format serialization object to be processed\n *   (in place).\n */\nfunction convertNDArrayScalarsInConfig(config: serialization.ConfigDictValue):\n    void {\n  if (config == null || typeof config !== 'object') {\n    return;\n  } else if (Array.isArray(config)) {\n    config.forEach(configItem => convertNDArrayScalarsInConfig(configItem));\n  } else {\n    const fields = Object.keys(config);\n    for (const field of fields) {\n      const value = config[field];\n      if (value != null && typeof value === 'object') {\n        if (!Array.isArray(value) && value['type'] === 'ndarray' &&\n            typeof value['value'] === 'number') {\n          config[field] = value['value'];\n        } else {\n          convertNDArrayScalarsInConfig(value as serialization.ConfigDict);\n        }\n      }\n    }\n  }\n}\n\n/**\n * Deserialize a saved Keras Object\n * @param identifier either a string ID or a saved Keras dictionary\n * @param moduleObjects a list of Python class names to object constructors\n * @param customObjects a list of Python class names to object constructors\n * @param printableModuleName debug text for the object being reconstituted\n * @param fastWeightInit Optional flag to use fast weight initialization\n *   during deserialization. This is applicable to cases in which\n *   the initialization will be immediately overwritten by loaded weight\n *   values. Default: `false`.\n * @returns a TensorFlow.js Layers object\n */\n// tslint:disable:no-any\nexport function deserializeKerasObject(\n    identifier: string|serialization.ConfigDict,\n    moduleObjects = {} as {[objName: string]: any},\n    customObjects = {} as {[objName: string]: any},\n    printableModuleName = 'object', fastWeightInit = false): any {\n  // tslint:enable\n  if (typeof identifier === 'string') {\n    const functionName = identifier;\n    let fn;\n    if (functionName in customObjects) {\n      fn = customObjects[functionName];\n    } else if (functionName in _GLOBAL_CUSTOM_OBJECTS) {\n      fn = _GLOBAL_CUSTOM_OBJECTS[functionName];\n    } else {\n      fn = moduleObjects[functionName];\n      if (fn == null) {\n        throw new ValueError(\n            `Unknown ${printableModuleName}: ${identifier}. ` +\n            `This may be due to one of the following reasons:\\n` +\n            `1. The ${printableModuleName} is defined in Python, in which ` +\n            `case it needs to be ported to TensorFlow.js or your JavaScript ` +\n            `code.\\n` +\n            `2. The custom ${printableModuleName} is defined in JavaScript, ` +\n            `but is not registered properly with ` +\n            `tf.serialization.registerClass().`);\n        // TODO(cais): Add link to tutorial page on custom layers.\n      }\n    }\n    return fn;\n  } else {\n    // In this case we are dealing with a Keras config dictionary.\n    const config = identifier;\n    if (config['className'] == null || config['config'] == null) {\n      throw new ValueError(\n          `${printableModuleName}: Improper config format: ` +\n          `${JSON.stringify(config)}.\\n` +\n          `'className' and 'config' must set.`);\n    }\n    const className = config['className'] as string;\n    let cls, fromConfig;\n    if (className in customObjects) {\n      [cls, fromConfig] = customObjects[className];\n    } else if (className in _GLOBAL_CUSTOM_OBJECTS) {\n      [cls, fromConfig] = _GLOBAL_CUSTOM_OBJECTS['className'];\n    } else if (className in moduleObjects) {\n      [cls, fromConfig] = moduleObjects[className];\n    }\n    if (cls == null) {\n      throw new ValueError(\n          `Unknown ${printableModuleName}: ${className}. ` +\n          `This may be due to one of the following reasons:\\n` +\n          `1. The ${printableModuleName} is defined in Python, in which ` +\n          `case it needs to be ported to TensorFlow.js or your JavaScript ` +\n          `code.\\n` +\n          `2. The custom ${printableModuleName} is defined in JavaScript, ` +\n          `but is not registered properly with ` +\n          `tf.serialization.registerClass().`);\n      // TODO(cais): Add link to tutorial page on custom layers.\n    }\n    if (fromConfig != null) {\n      // Porting notes: Instead of checking to see whether fromConfig accepts\n      // customObjects, we create a customObjects dictionary and tack it on to\n      // config['config'] as config['config'].customObjects. Objects can use it,\n      // if they want.\n\n      // tslint:disable-next-line:no-any\n      const customObjectsCombined = {} as {[objName: string]: any};\n      for (const key of Object.keys(_GLOBAL_CUSTOM_OBJECTS)) {\n        customObjectsCombined[key] = _GLOBAL_CUSTOM_OBJECTS[key];\n      }\n      for (const key of Object.keys(customObjects)) {\n        customObjectsCombined[key] = customObjects[key];\n      }\n      // Add the customObjects to config\n      const nestedConfig = config['config'] as serialization.ConfigDict;\n      nestedConfig['customObjects'] = customObjectsCombined;\n\n      const backupCustomObjects = {..._GLOBAL_CUSTOM_OBJECTS};\n      for (const key of Object.keys(customObjects)) {\n        _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key];\n      }\n      convertNDArrayScalarsInConfig(config['config']);\n      const returnObj =\n          fromConfig(cls, config['config'], customObjects, fastWeightInit);\n      _GLOBAL_CUSTOM_OBJECTS = {...backupCustomObjects};\n\n      return returnObj;\n    } else {\n      // Then `cls` may be a function returning a class.\n      // In this case by convention `config` holds\n      // the kwargs of the function.\n      const backupCustomObjects = {..._GLOBAL_CUSTOM_OBJECTS};\n      for (const key of Object.keys(customObjects)) {\n        _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key];\n      }\n      // In python this is **config['config'], for tfjs-layers we require\n      // classes that use this fall-through construction method to take\n      // a config interface that mimics the expansion of named parameters.\n      const returnObj = new cls(config['config']);\n      _GLOBAL_CUSTOM_OBJECTS = {...backupCustomObjects};\n      return returnObj;\n    }\n  }\n}\n\n/**\n * Compares two numbers for sorting.\n * @param a\n * @param b\n */\nexport function numberCompare(a: number, b: number) {\n  return (a < b) ? -1 : ((a > b) ? 1 : 0);\n}\n\n/**\n * Comparison of two numbers for reverse sorting.\n * @param a\n * @param b\n */\nexport function reverseNumberCompare(a: number, b: number) {\n  return -1 * numberCompare(a, b);\n}\n\n/**\n * Convert a string into the corresponding DType.\n * @param dtype\n * @returns An instance of DType.\n */\nexport function stringToDType(dtype: string): DataType {\n  switch (dtype) {\n    case 'float32':\n      return 'float32';\n    default:\n      throw new ValueError(`Invalid dtype: ${dtype}`);\n  }\n}\n\n/**\n * Test the element-by-element equality of two Arrays of strings.\n * @param xs First array of strings.\n * @param ys Second array of strings.\n * @returns Wether the two arrays are all equal, element by element.\n */\nexport function stringsEqual(xs: string[], ys: string[]): boolean {\n  if (xs == null || ys == null) {\n    return xs === ys;\n  }\n  if (xs.length !== ys.length) {\n    return false;\n  }\n  for (let i = 0; i < xs.length; ++i) {\n    if (xs[i] !== ys[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Get the unique elements of an array.\n * @param xs Array.\n * @returns An Array consisting of the unique elements in `xs`.\n */\nexport function unique<T>(xs: T[]): T[] {\n  if (xs == null) {\n    return xs;\n  }\n  const out: T[] = [];\n  // TODO(cais): Maybe improve performance by sorting.\n  for (const x of xs) {\n    if (out.indexOf(x) === -1) {\n      out.push(x);\n    }\n  }\n  return out;\n}\n\n/**\n * Determine if an Object is empty (i.e., does not have own properties).\n * @param obj Object\n * @returns Whether the Object is empty.\n * @throws ValueError: If object is `null` or `undefined`.\n */\nexport function isObjectEmpty(obj: {}): boolean {\n  if (obj == null) {\n    throw new ValueError(`Invalid value in obj: ${JSON.stringify(obj)}`);\n  }\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Helper function used to build type union/enum run-time checkers.\n * @param values The list of allowed values.\n * @param label A string name for the type\n * @param value The value to test.\n * @throws ValueError: If the value is not in values nor `undefined`/`null`.\n */\nexport function checkStringTypeUnionValue(\n    values: string[], label: string, value: string): void {\n  if (value == null) {\n    return;\n  }\n  if (values.indexOf(value) < 0) {\n    throw new ValueError(`${value} is not a valid ${label}.  Valid values are ${\n        values} or null/undefined.`);\n  }\n}\n\n/**\n * Helper function for verifying the types of inputs.\n *\n * Ensures that the elements of `x` are all of type `expectedType`.\n * Also verifies that the length of `x` is within bounds.\n *\n * @param x Object to test.\n * @param expectedType The string expected type of all of the elements in the\n * Array.\n * @param minLength Return false if x.length is less than this.\n * @param maxLength Return false if x.length is greater than this.\n * @returns true if and only if `x` is an `Array<expectedType>` with\n * length >= `minLength` and <= `maxLength`.\n */\n// tslint:disable:no-any\nexport function checkArrayTypeAndLength(\n    x: any, expectedType: string, minLength = 0,\n    maxLength = Infinity): boolean {\n  assert(minLength >= 0);\n  assert(maxLength >= minLength);\n  return (\n      Array.isArray(x) && x.length >= minLength && x.length <= maxLength &&\n      x.every(e => typeof e === expectedType));\n}\n// tslint:enable:no-any\n\n/**\n * Assert that a value or an array of value are positive integer.\n *\n * @param value The value being asserted on. May be a single number or an array\n *   of numbers.\n * @param name Name of the value, used to make the error message.\n */\nexport function assertPositiveInteger(value: number|number[], name: string) {\n  if (Array.isArray(value)) {\n    util.assert(\n        value.length > 0, () => `${name} is unexpectedly an empty array.`);\n    value.forEach(\n        (v, i) => assertPositiveInteger(v, `element ${i + 1} of ${name}`));\n  } else {\n    util.assert(\n        Number.isInteger(value) && value > 0,\n        () => `Expected ${name} to be a positive integer, but got ` +\n            `${formatAsFriendlyString(value)}.`);\n  }\n}\n\n/**\n * Format a value into a display-friendly, human-readable fashion.\n *\n * - `null` is formatted as `'null'`\n * - Strings are formated with flanking pair of quotes.\n * - Arrays are formatted with flanking pair of square brackets.\n *\n * @param value The value to display.\n * @return Formatted string.\n */\n// tslint:disable-next-line:no-any\nexport function formatAsFriendlyString(value: any): string {\n  if (value === null) {\n    return 'null';\n  } else if (Array.isArray(value)) {\n    return '[' + value.map(v => formatAsFriendlyString(v)).join(',') + ']';\n  } else if (typeof value === 'string') {\n    return `\"${value}\"`;\n  } else {\n    return `${value}`;\n  }\n}\n\n/**\n * Returns a function `f2` (decorator) which wraps the original function\n * `f`. `f2` guarantees that `f` can be called at most once\n * every `waitMs` ms. If `f2` is called more often, it will return\n * the last returned result of `f`.\n *\n * @param f The original function `f` to wrap.\n * @param waitMs The time between two consecutive calls to `f` in ms.\n */\nexport function debounce<T>(\n    f: (...args: Array<{}>) => T, waitMs: number): (...args: Array<{}>) => T {\n  let lastTime = util.now();\n  let lastResult: T;\n  const f2 = (...args: Array<{}>) => {\n    const now = util.now();\n    if (now - lastTime < waitMs) {\n      return lastResult;\n    }\n    lastTime = now;\n    lastResult = f(...args);\n    return lastResult;\n  };\n  return f2;\n}\n\n/**\n * Returns the fusable activation given a layers identifier.\n *\n * @param activationName The layers identifier string.\n * @return The name of the fusable activation.\n */\nexport function mapActivationToFusedKernel(activationName: string):\n  fused.Activation {\n  if (activationName === 'relu') {\n    return 'relu';\n  }\n  if (activationName === 'linear') {\n    return 'linear';\n  }\n  if(activationName === 'elu') {\n    return 'elu';\n  }\n  return null;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: keras/contraints.py */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\nimport {epsilon} from './backend/common';\nimport {deserializeKerasObject, serializeKerasObject} from './utils/generic_utils';\n\n/**\n * Helper function used by many of the Constraints to find the L2Norms.\n */\nfunction calcL2Norms(w: Tensor, axis: number): Tensor {\n  return tidy(() => tfc.sqrt(tfc.sum(tfc.mulStrict(w, w), axis, true)));\n}\n\n/**\n * Base class for functions that impose constraints on weight values\n */\n/**\n * @doc {\n *   heading: 'Constraints',\n *   subheading: 'Classes',\n *   namespace: 'constraints'\n * }\n */\nexport abstract class Constraint extends serialization.Serializable {\n  /* Porting note: was __call__, apply chosen to match other similar choices */\n  abstract apply(w: Tensor): Tensor;\n  getConfig(): serialization.ConfigDict {\n    return {};\n  }\n}\n\nexport interface MaxNormArgs {\n  /**\n   * Maximum norm for incoming weights\n   */\n  maxValue?: number;\n  /**\n   * Axis along which to calculate norms.\n   *\n   *  For instance, in a `Dense` layer the weight matrix\n   *  has shape `[inputDim, outputDim]`,\n   *  set `axis` to `0` to constrain each weight vector\n   *  of length `[inputDim,]`.\n   *  In a `Conv2D` layer with `dataFormat=\"channels_last\"`,\n   *  the weight tensor has shape\n   *  `[rows, cols, inputDepth, outputDepth]`,\n   *  set `axis` to `[0, 1, 2]`\n   *  to constrain the weights of each filter tensor of size\n   *  `[rows, cols, inputDepth]`.\n   */\n  axis?: number;\n}\n\nexport class MaxNorm extends Constraint {\n  /** @nocollapse */\n  static readonly className = 'MaxNorm';\n  private maxValue: number;\n  private axis: number;\n  private readonly defaultMaxValue = 2;\n  private readonly defaultAxis = 0;\n\n  constructor(args: MaxNormArgs) {\n    super();\n    this.maxValue =\n        args.maxValue != null ? args.maxValue : this.defaultMaxValue;\n    this.axis = args.axis != null ? args.axis : this.defaultAxis;\n  }\n\n  apply(w: Tensor): Tensor {\n    return tidy(() => {\n      const norms = calcL2Norms(w, this.axis);\n      const desired = tfc.clipByValue(norms, 0, this.maxValue);\n      return tfc.mul(w, tfc.div(desired, tfc.add(epsilon(), norms)));\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {maxValue: this.maxValue, axis: this.axis};\n  }\n}\nserialization.registerClass(MaxNorm);\n\nexport interface UnitNormArgs {\n  /**\n   * Axis along which to calculate norms.\n   *\n   * For instance, in a `Dense` layer the weight matrix\n   * has shape `[inputDim, outputDim]`,\n   * set `axis` to `0` to constrain each weight vector\n   * of length `[inputDim,]`.\n   * In a `Conv2D` layer with `dataFormat=\"channels_last\"`,\n   * the weight tensor has shape\n   * [rows, cols, inputDepth, outputDepth]`,\n   * set `axis` to `[0, 1, 2]`\n   * to constrain the weights of each filter tensor of size\n   * `[rows, cols, inputDepth]`.\n   */\n  axis?: number;\n}\n\nexport class UnitNorm extends Constraint {\n  /** @nocollapse */\n  static readonly className = 'UnitNorm';\n  private axis: number;\n  private readonly defaultAxis = 0;\n  constructor(args: UnitNormArgs) {\n    super();\n    this.axis = args.axis != null ? args.axis : this.defaultAxis;\n  }\n\n  apply(w: Tensor): Tensor {\n    return tidy(\n        () => tfc.div(w, tfc.add(epsilon(), calcL2Norms(w, this.axis))));\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {axis: this.axis};\n  }\n}\nserialization.registerClass(UnitNorm);\n\nexport class NonNeg extends Constraint {\n  /** @nocollapse */\n  static readonly className = 'NonNeg';\n\n  apply(w: Tensor): Tensor {\n    return tfc.relu(w);\n  }\n}\nserialization.registerClass(NonNeg);\n\nexport interface MinMaxNormArgs {\n  /**\n   * Minimum norm for incoming weights\n   */\n  minValue?: number;\n  /**\n   * Maximum norm for incoming weights\n   */\n  maxValue?: number;\n  /**\n   * Axis along which to calculate norms.\n   * For instance, in a `Dense` layer the weight matrix\n   * has shape `[inputDim, outputDim]`,\n   * set `axis` to `0` to constrain each weight vector\n   * of length `[inputDim,]`.\n   * In a `Conv2D` layer with `dataFormat=\"channels_last\"`,\n   * the weight tensor has shape\n   * `[rows, cols, inputDepth, outputDepth]`,\n   * set `axis` to `[0, 1, 2]`\n   * to constrain the weights of each filter tensor of size\n   * `[rows, cols, inputDepth]`.\n   */\n  axis?: number;\n  /**\n   * Rate for enforcing the constraint: weights will be rescaled to yield:\n   * `(1 - rate) * norm + rate * norm.clip(minValue, maxValue)`.\n   * Effectively, this means that rate=1.0 stands for strict\n   * enforcement of the constraint, while rate<1.0 means that\n   * weights will be rescaled at each step to slowly move\n   * towards a value inside the desired interval.\n   */\n  rate?: number;\n}\n\nexport class MinMaxNorm extends Constraint {\n  /** @nocollapse */\n  static readonly className = 'MinMaxNorm';\n  private minValue: number;\n  private maxValue: number;\n  private rate: number;\n  private axis: number;\n  private readonly defaultMinValue = 0.0;\n  private readonly defaultMaxValue = 1.0;\n  private readonly defaultRate = 1.0;\n  private readonly defaultAxis = 0;\n\n  constructor(args: MinMaxNormArgs) {\n    super();\n    this.minValue =\n        args.minValue != null ? args.minValue : this.defaultMinValue;\n    this.maxValue =\n        args.maxValue != null ? args.maxValue : this.defaultMaxValue;\n    this.rate = args.rate != null ? args.rate : this.defaultRate;\n    this.axis = args.axis != null ? args.axis : this.defaultAxis;\n  }\n\n  apply(w: Tensor): Tensor {\n    return tidy(() => {\n      const norms = calcL2Norms(w, this.axis);\n      const desired = tfc.add(\n          tfc.mul(\n              this.rate, tfc.clipByValue(norms, this.minValue, this.maxValue)),\n          tfc.mul(1.0 - this.rate, norms));\n      return tfc.mul(w, tfc.div(desired, tfc.add(epsilon(), norms)));\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {\n      minValue: this.minValue,\n      maxValue: this.maxValue,\n      rate: this.rate,\n      axis: this.axis\n    };\n  }\n}\nserialization.registerClass(MinMaxNorm);\n\n/** @docinline */\nexport type ConstraintIdentifier =\n    'maxNorm'|'minMaxNorm'|'nonNeg'|'unitNorm'|string;\n\n// Maps the JavaScript-like identifier keys to the corresponding registry\n// symbols.\nexport const CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP:\n    {[identifier in ConstraintIdentifier]: string} = {\n      'maxNorm': 'MaxNorm',\n      'minMaxNorm': 'MinMaxNorm',\n      'nonNeg': 'NonNeg',\n      'unitNorm': 'UnitNorm'\n    };\n\nexport function serializeConstraint(constraint: Constraint):\n    serialization.ConfigDictValue {\n  return serializeKerasObject(constraint);\n}\n\nexport function deserializeConstraint(\n    config: serialization.ConfigDict,\n    customObjects: serialization.ConfigDict = {}): Constraint {\n  return deserializeKerasObject(\n      config, serialization.SerializationMap.getMap().classNameMap,\n      customObjects, 'constraint');\n}\n\nexport function getConstraint(identifier: ConstraintIdentifier|\n                              serialization.ConfigDict|Constraint): Constraint {\n  if (identifier == null) {\n    return null;\n  }\n  if (typeof identifier === 'string') {\n    const className = identifier in CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP ?\n        CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] :\n        identifier;\n    const config = {className, config: {}};\n    return deserializeConstraint(config);\n  } else if (identifier instanceof Constraint) {\n    return identifier;\n  } else {\n    return deserializeConstraint(identifier);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n// tslint:disable-next-line:max-line-length\nimport {Constraint, MaxNorm, MaxNormArgs, MinMaxNorm, MinMaxNormArgs, NonNeg, UnitNorm, UnitNormArgs} from './constraints';\n\n/**\n * MaxNorm weight constraint.\n *\n * Constrains the weights incident to each hidden unit\n * to have a norm less than or equal to a desired value.\n *\n * References\n *       - [Dropout: A Simple Way to Prevent Neural Networks from Overfitting\n * Srivastava, Hinton, et al.\n * 2014](http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf)\n */\n/** @doc {heading: 'Constraints',namespace: 'constraints'} */\nexport function maxNorm(args: MaxNormArgs): Constraint {\n  return new MaxNorm(args);\n}\n\n/**\n * Constrains the weights incident to each hidden unit to have unit norm.\n */\n/** @doc {heading: 'Constraints', namespace: 'constraints'} */\nexport function unitNorm(args: UnitNormArgs): Constraint {\n  return new UnitNorm(args);\n}\n\n/**\n * Constains the weight to be non-negative.\n */\n/** @doc {heading: 'Constraints', namespace: 'constraints'} */\nexport function nonNeg(): Constraint {\n  return new NonNeg();\n}\n\n/** @doc {heading: 'Constraints', namespace: 'constraints'} */\nexport function minMaxNorm(config: MinMaxNormArgs): Constraint {\n  return new MinMaxNorm(config);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n// TODO(huan): add layer-specific input shape types (see: https://github.com/tensorflow/tfjs-layers/pull/492)\n/** @docalias (null | number)[] */\nexport type Shape = Array<null | number>;\n\n// The tfjs-core version of DataType must stay synced with this.\nexport type DataType = 'float32'|'int32'|'bool'|'complex64'|'string';\n\n// TODO(soergel): Move the CamelCase versions back out of keras_format\n// e.g. to src/common.ts.  Maybe even duplicate *all* of these to be pedantic?\n/** @docinline */\nexport type DataFormat = 'channelsFirst'|'channelsLast';\nexport const VALID_DATA_FORMAT_VALUES = ['channelsFirst', 'channelsLast'];\n\n// These constants have a snake vs. camel distinction.\nexport type DataFormatSerialization = 'channels_first'|'channels_last';\n\n/** @docinline */\nexport type PaddingMode = 'valid'|'same'|'causal';\nexport const VALID_PADDING_MODE_VALUES = ['valid', 'same', 'causal'];\n\n/** @docinline */\nexport type PoolMode = 'max'|'avg';\nexport const VALID_POOL_MODE_VALUES = ['max', 'avg'];\n\n/** @docinline */\nexport type BidirectionalMergeMode = 'sum'|'mul'|'concat'|'ave';\nexport const VALID_BIDIRECTIONAL_MERGE_MODES = ['sum', 'mul', 'concat', 'ave'];\n\n/** @docinline */\nexport type SampleWeightMode = 'temporal';\nexport const VALID_SAMPLE_WEIGHT_MODES = ['temporal'];\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Common functions for TensorFlow.js Layers.\n */\nimport {VALID_DATA_FORMAT_VALUES, VALID_PADDING_MODE_VALUES, VALID_POOL_MODE_VALUES} from './keras_format/common';\nimport {checkStringTypeUnionValue} from './utils/generic_utils';\n\n// A map from the requested scoped name of a Tensor to the number of Tensors\n// wanting that name so far.  This allows enforcing name uniqueness by appending\n// an incrementing index, e.g. scope/name, scope/name_1, scope/name_2, etc.\nconst nameMap: Map<string, number> = new Map<string, number>();\n\nexport function checkDataFormat(value?: string): void {\n  checkStringTypeUnionValue(VALID_DATA_FORMAT_VALUES, 'DataFormat', value);\n}\n\nexport function checkPaddingMode(value?: string): void {\n  checkStringTypeUnionValue(VALID_PADDING_MODE_VALUES, 'PaddingMode', value);\n}\n\nexport function checkPoolMode(value?: string): void {\n  checkStringTypeUnionValue(VALID_POOL_MODE_VALUES, 'PoolMode', value);\n}\n\nconst _nameScopeStack: string[] = [];\nconst _nameScopeDivider = '/';\n\n/**\n * Enter namescope, which can be nested.\n */\nexport function nameScope<T>(name: string, fn: () => T): T {\n  _nameScopeStack.push(name);\n  try {\n    const val: T = fn();\n    _nameScopeStack.pop();\n    return val;\n  } catch (e) {\n    _nameScopeStack.pop();\n    throw e;\n  }\n}\n\n/**\n * Get the current namescope as a flat, concatenated string.\n */\nfunction currentNameScopePrefix(): string {\n  if (_nameScopeStack.length === 0) {\n    return '';\n  } else {\n    return _nameScopeStack.join(_nameScopeDivider) + _nameScopeDivider;\n  }\n}\n\n/**\n * Get the name a Tensor (or Variable) would have if not uniqueified.\n * @param tensorName\n * @return Scoped name string.\n */\nexport function getScopedTensorName(tensorName: string): string {\n  if (!isValidTensorName(tensorName)) {\n    throw new Error('Not a valid tensor name: \\'' + tensorName + '\\'');\n  }\n  return currentNameScopePrefix() + tensorName;\n}\n\n/**\n * Get unique names for Tensors and Variables.\n * @param scopedName The fully-qualified name of the Tensor, i.e. as produced by\n *  `getScopedTensorName()`.\n * @return A unique version of the given fully scoped name.\n *   If this is the first time that the scoped name is seen in this session,\n *   then the given `scopedName` is returned unaltered.  If the same name is\n *   seen again (producing a collision), an incrementing suffix is added to the\n *   end of the name, so it takes the form 'scope/name_1', 'scope/name_2', etc.\n */\nexport function getUniqueTensorName(scopedName: string): string {\n  if (!isValidTensorName(scopedName)) {\n    throw new Error('Not a valid tensor name: \\'' + scopedName + '\\'');\n  }\n  if (!nameMap.has(scopedName)) {\n    nameMap.set(scopedName, 0);\n  }\n  const index = nameMap.get(scopedName);\n  nameMap.set(scopedName, nameMap.get(scopedName) + 1);\n\n  if (index > 0) {\n    const result = `${scopedName}_${index}`;\n    // Mark the composed name as used in case someone wants\n    // to call getUniqueTensorName(\"name_1\").\n    nameMap.set(result, 1);\n    return result;\n  } else {\n    return scopedName;\n  }\n}\n\nconst tensorNameRegex = new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\\._\\/]*$/);\n\n/**\n * Determine whether a string is a valid tensor name.\n * @param name\n * @returns A Boolean indicating whether `name` is a valid tensor name.\n */\nexport function isValidTensorName(name: string): boolean {\n  return !!name.match(tensorNameRegex);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Math utility functions.\n *\n * This file contains some frequently used math function that operates on\n * number[] or Float32Array and return a number. Many of these functions are\n * not-so-thick wrappers around TF.js Core functions. But they offer the\n * convenience of\n * 1) not having to convert the inputs into Tensors,\n * 2) not having to convert the returned Tensors to numbers.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {scalar, Tensor1D, tensor1d} from '@tensorflow/tfjs-core';\nimport {ValueError} from '../errors';\n\nexport type ArrayTypes = Uint8Array | Int32Array | Float32Array;\n\n/**\n * Determine if a number is an integer.\n */\nexport function isInteger(x: number): boolean {\n  return x === parseInt(x.toString(), 10);\n}\n\n/**\n * Calculate the product of an array of numbers.\n * @param array The array to calculate the product over.\n * @param begin Beginning index, inclusive.\n * @param end Ending index, exclusive.\n * @return The product.\n */\nexport function arrayProd(\n  array: number[] | ArrayTypes, begin?: number, end?: number): number {\n  if (begin == null) {\n    begin = 0;\n  }\n  if (end == null) {\n    end = array.length;\n  }\n\n  let prod = 1;\n  for (let i = begin; i < end; ++i) {\n    prod *= array[i];\n  }\n  return prod;\n}\n\n/**\n * A helper function transforms the two input types to an instance of Tensor1D,\n * so the return value can be fed directly into various TF.js Core functions.\n * @param array\n */\nfunction toArray1D(array: number[] | Float32Array): Tensor1D {\n  array = Array.isArray(array) ? new Float32Array(array) : array;\n  return tensor1d(array);\n}\n\n/**\n * Compute minimum value.\n * @param array\n * @return minimum value.\n */\nexport function min(array: number[] | Float32Array): number {\n  return tfc.min(toArray1D(array)).dataSync()[0];\n}\n\n/**\n * Compute maximum value.\n * @param array\n * @return maximum value\n */\nexport function max(array: number[] | Float32Array): number {\n  return tfc.max(toArray1D(array)).dataSync()[0];\n}\n\n/**\n * Compute sum of array.\n * @param array\n * @return The sum.\n */\nexport function sum(array: number[] | Float32Array): number {\n  return tfc.sum(toArray1D(array)).dataSync()[0];\n}\n\n/**\n * Compute mean of array.\n * @param array\n * @return The mean.\n */\nexport function mean(array: number[] | Float32Array): number {\n  return sum(array) / array.length;\n}\n\n/**\n * Compute variance of array.\n * @param array\n * @return The variance.\n */\nexport function variance(array: number[] | Float32Array): number {\n  const demeaned = tfc.sub(toArray1D(array), scalar(mean(array)));\n  const sumSquare = tfc.sum(tfc.mulStrict(demeaned, demeaned)).dataSync()[0];\n  return sumSquare / array.length;\n}\n\n/**\n * Compute median of array.\n * @param array\n * @return The median value.\n */\nexport function median(array: number[] | Float32Array): number {\n  const arraySorted = array.slice().sort((a, b) => a - b);\n  const lowIdx = Math.floor((arraySorted.length - 1) / 2);\n  const highIdx = Math.ceil((arraySorted.length - 1) / 2);\n  if (lowIdx === highIdx) {\n    return arraySorted[lowIdx];\n  }\n  return (arraySorted[lowIdx] + arraySorted[highIdx]) / 2;\n}\n\n/**\n * Generate an array of integers in [begin, end).\n * @param begin Beginning integer, inclusive.\n * @param end Ending integer, exclusive.\n * @returns Range array.\n * @throws ValueError, iff `end` < `begin`.\n */\nexport function range(begin: number, end: number): number[] {\n  if (end < begin) {\n    throw new ValueError(`end (${end}) < begin (${begin}) is forbidden.`);\n  }\n  const out: number[] = [];\n  for (let i = begin; i < end; ++i) {\n    out.push(i);\n  }\n  return out;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * deeplearn.js backend.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {onesLike as coreOnesLike, scalar, Tensor, Tensor1D, tensor1d, Tensor2D, Tensor3D, Tensor4D, Tensor5D, tidy, where, zerosLike as coreZerosLike} from '@tensorflow/tfjs-core';\nimport {checkDataFormat} from '../common';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {DataFormat, Shape} from '../keras_format/common';\nimport {HasShape} from '../types';\nimport * as math_utils from '../utils/math_utils';\n\nimport {imageDataFormat} from './common';\n\n// tslint:enable\n\n/* Setting and getting backend from deeplearn.js. */\n\n// Default deeplearn.js backend is WebGL (GPU).\nlet backend: 'cpu'|'webgl' = 'webgl';\n\nexport function setBackend(requestedBackend: 'cpu'|'webgl') {\n  tfc.setBackend(requestedBackend);\n  backend = requestedBackend;\n}\n\nexport function getBackend(): 'cpu'|'webgl' {\n  return backend;\n}\n\n/**\n * Indicates whether the backend is operating symbolically.\n *\n * This function will be used to determine how to interpret user code. If\n * it returns true, calls to the backend construct a symbolic graph; if\n * it returns false, calls to the backend execute immediately.\n */\nexport function isBackendSymbolic(): boolean {\n  return false;\n}\n\n/**\n * Get the number of elements in a Tensor.\n * @param x The Tensor.\n * @return Number of elements in `x`.\n */\nexport function countParams(x: HasShape): number {\n  const shape = x.shape;\n  if (shape.length > 0) {\n    return shape.reduce((a: number, b: number) => a * b);\n  } else {\n    // Scalar.\n    return 1;\n  }\n}\n\n/**\n * Casts a tensor to a different dtype and returns it.\n * @param x Input tensor.\n * @param dtype String: 'float32'|'int32'|'bool'.\n * @returns Tensor of the specified `dtype`.\n */\nexport function cast(x: Tensor, dtype: tfc.DataType): Tensor {\n  return x.asType(dtype);\n}\n\n/**\n * Adds a 1-sized dimension at index \"axis\".\n * @param x Input tensor.\n * @param axis Position where to add the new axis.\n * @returns Result of the dimension expansion.\n */\nexport function expandDims(x: Tensor, axis = -1): Tensor {\n  const outShape = x.shape.slice();\n  if (axis < 0) {\n    axis = outShape.length + axis + 1;\n  }\n  outShape.splice(axis, 0, 1);\n  return x.reshape(outShape);\n}\n\n/**\n * Repeats a 2D tensor.\n *\n * If `x` has shape `[samples, dim]` and `n` is 2, for example, the output\n * will have shape `[samples, 2, dim]`.\n *\n * @param x Input tensor.\n * @param n Integer, number of times to repeat.\n * @returns The result of the repeat operation.\n * @throws ValueError: If input tensor is not 2D.\n */\nexport function repeat(x: Tensor, n: number): Tensor {\n  return tidy(() => {\n    if (x.shape.length !== 2) {\n      throw new ValueError(\n          `repeat() expects a rank-2 tensor, but received a ` +\n          `rank-${x.shape.length} tensor.`);\n    }\n    const y = expandDims(x, 1);\n    return tile(y, [1, n, 1]);\n  });\n}\n\n/**\n * Flatten an Tensor into 1D.\n * @param x Input tensor.\n * @return The result of the flattening `x`.\n */\nexport function flatten(x: Tensor): Tensor {\n  const newShape = [math_utils.arrayProd(x.shape)];\n  return x.reshape(newShape);\n}\n\n/**\n * Turn a nD tensor into a 2D tensor with same 0th dimension.\n * In other words, it flattens each data samples of a batch.\n *\n * @param x The tensor to flatten. The rank of this tensor is required to be 2\n *   or higher.\n * @return The result of the flattening.\n */\nexport function batchFlatten(x: Tensor): Tensor {\n  if (x.rank <= 1) {\n    throw new ValueError(\n        `batchFlatten requires a minimum rank of 2. Got rank: ${x.rank}.`);\n  }\n  const newShape = [x.shape[0], math_utils.arrayProd(x.shape, 1)];\n  return x.reshape(newShape);\n}\n\n/**\n * Do slicing along the first axis.\n * @param array input `tf.Tensor`.\n * @param start starting index, inclusive.\n * @param size size of the slice along the first axis.\n * @returns result of the slicing.\n * @throws ValueError: If `array` is of an unsupported subtype of `tf.Tensor`.\n */\nexport function sliceAlongFirstAxis(\n    array: Tensor, start: number, size: number): Tensor {\n  return tidy(() => {\n    switch (array.rank) {\n      case 1:\n        return tfc.slice1d(array as Tensor1D, start, size);\n      case 2:\n        return tfc.slice2d(\n            array as Tensor2D, [start, 0], [size, array.shape[1]]);\n      case 3:\n        return tfc.slice3d(\n            array as Tensor3D, [start, 0, 0],\n            [size, array.shape[1], array.shape[2]]);\n      case 4:\n        return tfc.slice4d(\n            array as Tensor4D, [start, 0, 0, 0],\n            [size, array.shape[1], array.shape[2], array.shape[3]]);\n      case 5:\n        return tfc.slice(array as Tensor5D, [start, 0, 0, 0, 0], [\n          size, array.shape[1], array.shape[2], array.shape[3], array.shape[4]\n        ]);\n      case 6:\n        return tfc.slice(array, [start, 0, 0, 0, 0, 0], [\n          size, array.shape[1], array.shape[2], array.shape[3], array.shape[4],\n          array.shape[5]\n        ]);\n      default:\n        throw new ValueError(\n            `sliceAlongFirstAxis() received an unsupported tensor rank: ` +\n            `${array.rank}`);\n    }\n  });\n}\n\n/**\n * Do slicing along the last axis.\n * @param array input `tf.Tensor`.\n * @param start starting index, inclusive.\n * @param size size of the slice along the last axis.\n * @returns result of the slicing.\n * @throws ValueError: If `array` is of an unsupported subtype of `tf.Tensor`.\n */\nexport function sliceAlongLastAxis(\n    array: Tensor, start: number, size: number): Tensor {\n  return tidy(() => {\n    switch (array.rank) {\n      case 1:\n        return tfc.slice1d(array as Tensor1D, start, size);\n      case 2:\n        return tfc.slice2d(\n            array as Tensor2D, [0, start], [array.shape[0], size]);\n      case 3:\n        return tfc.slice3d(\n            array as Tensor3D, [0, 0, start],\n            [array.shape[0], array.shape[1], size]);\n      case 4:\n        return tfc.slice4d(\n            array as Tensor4D, [0, 0, 0, start],\n            [array.shape[0], array.shape[1], array.shape[2], size]);\n      default:\n        throw new ValueError(\n            `sliceAlongLastAxis() received an unsupported tensor rank: ` +\n            `${array.rank}`);\n    }\n  });\n}\n\n/**\n * Do slicing along the sepcified axis.\n * @param array input `tf.Tensor`.\n * @param start starting index, inclusive.\n * @param size of the slice along the chosen axis.\n * @param choose an axis.\n * @returns result of the slicing.\n * @throws ValueError: If `array` is of an unsupported subtype of `tf.Tensor`.\n */\nexport function sliceAlongAxis(\n    array: Tensor, start: number, size: number, axis: number): Tensor {\n  return tidy(() => {\n    switch (array.rank) {\n      case 1:\n        return tfc.slice1d(array as Tensor1D, start, size);\n      case 2:\n        switch (axis) {\n          case 1:\n            return sliceAlongFirstAxis(array, start, size);\n          case 2:\n            return sliceAlongLastAxis(array, start, size);\n          default:\n            throw new ValueError(\n                `The axis is not within the rank of the tensor ` +\n                `${axis}`);\n        }\n      case 3:\n        switch (axis) {\n          case 1:\n            return sliceAlongFirstAxis(array, start, size);\n          case 2:\n            return tfc.slice3d(\n                array as Tensor3D, [0, start, 0],\n                [array.shape[0], size, array.shape[2]]);\n          case 3:\n            return sliceAlongLastAxis(array, start, size);\n          default:\n            throw new ValueError(\n                `The axis is not within the rank of the tensor ` +\n                `${axis}`);\n        }\n      case 4:\n        switch (axis) {\n          case 1:\n            return sliceAlongFirstAxis(array, start, size);\n          case 2:\n            return tfc.slice4d(\n                array as Tensor4D, [0, start, 0, 0],\n                [array.shape[0], size, array.shape[2], array.shape[3]]);\n          case 3:\n            return tfc.slice4d(\n                array as Tensor4D, [0, 0, start, 0],\n                [array.shape[0], array.shape[1], size, array.shape[3]]);\n          case 4:\n            return sliceAlongLastAxis(array, start, size);\n          default:\n            throw new ValueError(\n                `The axis is not within the rank of the tensor ` +\n                `${axis}`);\n        }\n      default:\n        throw new ValueError(\n            `sliceAlongLastAxis() received an unsupported tensor rank: ` +\n            `${array.rank}`);\n    }\n  });\n}\n\n/**\n * Concatenates a list of tensors alongside the specified axis.\n * @param tensors `Array` of tensors to concatenate.\n * @param axis Concatenation axis.\n * @returns The result of the concatenation.\n */\nexport function concatenate(tensors: Tensor[], axis = -1): Tensor {\n  let rank: number;\n  if (axis < 0) {\n    rank = tensors[0].rank;\n    if (rank !== 0) {\n      axis = rank;\n    } else {\n      axis = 0;\n    }\n  }\n  if (axis === tensors[0].rank) {\n    // Porting Note: This is necessary because tfc.concat() requires axis to be\n    //   in the interval [-rank, rank).\n    axis = -1;\n  }\n  // Porting Note: Sparse concat is not supported yet.\n  return tfc.concat(tensors, axis);\n}\n\n/**\n * Concatenate two arrays along the first dimension.\n * @param a The 1st `tf.Tensor` to concatenate.\n * @param b The 2nd `tf.Tensor` to concatenate.\n * @returns Result of the concatenation.\n * @throws ValueError: If `a` is of an unsupported subtype of `tf.Tensor`.\n */\nexport function concatAlongFirstAxis(a: Tensor, b: Tensor): Tensor {\n  switch (a.rank) {\n    case 1:\n      return tfc.concat1d([a as Tensor1D, b as Tensor1D]);\n    case 2:\n      return tfc.concat2d([a as Tensor2D, b as Tensor2D], 0);\n    case 3:\n      return tfc.concat3d([a as Tensor3D, b as Tensor3D], 0);\n    case 4:\n      return tfc.concat4d([a as Tensor4D, b as Tensor4D], 0);\n    default:\n      throw new ValueError(\n          `concatAlongFirstAxis() received an unsupported ` +\n          `tensor rank: ${a.rank}`);\n  }\n}\n\n/**\n * Creates a tensor by tiling `x` by `n`.\n * @param x A tensor.\n * @param n An Array of integers or a single integer. If an Array, the length\n *   must be the same as the number of dimensions in `x`. If a single integer,\n *   it will be treated as an Array of length 1.\n */\nexport function tile(x: Tensor, n: number|number[]): Tensor {\n  if (!Array.isArray(n)) {\n    n = [n];\n  }\n  if (x.rank !== n.length) {\n    throw new ValueError(\n        `The length of input n (${n.length}) does not match ` +\n        `the number of dimensions in input x (${x.rank})`);\n  }\n  return tfc.tile(x, n);\n}\n\n/* Creation of random tensors. */\n\n/**\n * Get a tensor with normal distribution of values.\n *\n * @param shape Shape of the tensor.\n * @param mean mean value of the normal distribution.\n * @param stddev standard deviation of the normal distribution.\n * @param dtype\n * @param seed\n * @return The normal tensor.\n */\nexport function randomNormal(\n    shape: Shape, mean = 0.0, stddev = 1.0, dtype?: 'float32'|'int32',\n    seed?: number): Tensor {\n  return tfc.randomNormal(shape, mean, stddev, dtype, seed);\n}\n\n/* Linear Algebra */\n\n/**\n * Multiply two tensors and returns the result as a tensor.\n *\n * For 2D tensors, this is equivalent to matrix multiplication (matMul).\n * For tensors of higher ranks, it follows the Theano behavior,\n * (e.g. `(2, 3) * (4, 3, 5) -> (2, 4, 5)`).  From the Theano documentation:\n *\n * For N dimensions it is a sum product over the last axis of x and the\n * second-to-last of y:\n *\n * @param a A tensor of at least rank 2.\n * @param b A tensor of at least rank 2.\n * @param activation (optional) A string identifying the activation\n *   function.\n * @return Result of the dot operation.\n */\nexport function dot(\n    a: Tensor, b: Tensor, activation?: tfc.fused.Activation,\n    bias?: Tensor): Tensor {\n  if ((a.rank < 2) || (b.rank < 2)) {\n    throw new NotImplementedError(\n        `dot requires both inputs to be rank >= 2` +\n        ` but got x shape = ${a.shape} and y shape = ${b.shape}`);\n  }\n  if (b.rank >= 3) {\n    const xLastDim = a.shape.slice(-1)[0];\n    const ySecondLastDim = b.shape.slice(-2)[0];\n    if (xLastDim !== ySecondLastDim) {\n      throw new NotImplementedError(\n          `If rank y >= 3, then the second last dim` +\n          ` of y must equal the last dim of x but got x shape = ${\n              a.shape} and ` +\n          ` y shape = ${b.shape}`);\n    }\n  }\n  // Handle basic 2D x 2D case.\n  if ((a.rank === 2) && (b.rank === 2)) {\n    const transposeA = false;\n    const transposeB = false;\n    // tfc.fused.matMul only fuses certain activation functions. Unsupported\n    // activation functions are treated as 'linear' activations, which is\n    // equivalent to a no-op.\n    return tfc.fused.matMul({\n      a,\n      b: b as Tensor2D,\n      transposeA,\n      transposeB,\n      bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null,\n      activation\n    });\n  } else {\n    // Reshape x into the analogous 2D Tensor.\n    const aFirstDims = a.shape.slice();  // Holds all but the last dim of x.\n    const aLastDim = aFirstDims.pop();\n    a = a.reshape([-1, aLastDim]);\n\n    // Reshape y into the analogous 2D Tensor, and keep track of the\n    // required dimensions to reproduce the output shape.\n    const bShape = b.shape.slice();\n    const bLastDim = bShape.pop();\n    const ySecondLastDim = bShape.pop();\n    const yOtherDims = [...bShape, bLastDim];\n    // permutation should be like [r-2, 0, 1, 2, ... r-4, r-3, r-1]\n    // where r is the rank of y.\n    const perm = Array.from({length: b.rank}, (_, i) => {\n      if (i === 0) {\n        return b.rank - 2;\n      } else if (i <= b.rank - 2) {\n        return i - 1;\n      }\n      return i;\n    });\n    b = b.transpose(perm).reshape([ySecondLastDim, -1]);\n\n    // Multiply x and y as 2D Tensors, and then reshape back to original.\n    const outputShape = [...aFirstDims, ...yOtherDims];\n    const transposeA = false;\n    const transposeB = false;\n    return tfc.fused\n        .matMul({\n          a,\n          b,\n          transposeA,\n          transposeB,\n          bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null,\n          activation\n        })\n        .reshape(outputShape);\n  }\n}\n\n/**\n * Compute the sign Tensor of an input Tensor.\n *\n * Elements of the input `tf.Tensor` that are === 0 are mapped to 0.\n * Elements of the input `tf.Tensor` that are > 0 are mapped to 1.\n * Elements of the input `tf.Tensor` that are < 0 are mapped to -1.\n *\n * @param x Input `tf.Tensor`.\n * @return The sign `tf.Tensor`.\n */\nexport function sign(x: Tensor): Tensor {\n  // TODO(cais): Move to the core.\n  return tidy(() => {\n    const zerosLikeX = coreZerosLike(x);\n    const onesLikeX = coreOnesLike(x);\n    return where(\n        tfc.equal(x, zerosLikeX), zerosLikeX,\n        where(\n            tfc.greater(x, coreZerosLike(x)), onesLikeX,\n            tfc.mul(-1, onesLikeX)));\n  });\n}\n\n/**\n * Computes the one-hot representation of an integer tensor.\n * @param indices nD integer tensor of shape\n *   `(batch_size, dim1, dim2, ... dim(n-1))`\n * @param numClasses Integer, number of classes to consider.\n * @returns (n + 1)D one hot representation of the input\n *   with shape `(batch_size, dim1, dim2, ... dim(n-1), num_classes)`\n */\nexport function oneHot(indices: Tensor, numClasses: number): Tensor {\n  return tidy(() => {\n    if (indices.rank !== 1) {\n      throw new Error(\n          'Only 1D one-hot tensors are supported in the ' +\n          'deeplearn backend, at present.');\n    }\n    indices = indices.toInt();\n    return tfc.oneHot(indices as Tensor1D, numClasses).toFloat();\n  });\n}\n\n/* Elementary math functions. */\n\n/**\n * Retrieves the elements of indices `indices` in the tensor `reference`.\n * @param reference A tensor.\n * @param indices An integer tensor of indices or an `Array` of integers.\n * @param axis Axis along which to perform the gather operation.\n * @returns The result of the gathering as a tensor.\n */\nexport function gather(\n    reference: Tensor, indices: number[]|Tensor1D, axis?: number): Tensor {\n  return tidy(() => {\n    if (Array.isArray(indices)) {\n      indices = tensor1d(indices, 'int32');\n    } else {\n      indices = indices.toInt();\n    }\n    return tfc.gather(reference, indices, axis);\n  });\n}\n\n/**\n * Element-wise square.\n * @param x Input tensor.\n * @return element-wise x^2\n */\nexport function square(x: Tensor): Tensor {\n  return tfc.mulStrict(x, x);\n}\n\n/**\n * Element-wise exponentiation.\n *\n * Porting Note: In PyKeras, `a` (the exponent) is a Python integer, which\n *   takes advatnage of the backend's (e.g., TensorFlow's) automatic\n * conversion to tensor. Here we allow `a` to be either a number or a tensor.\n *\n * @param x The base tensor.\n * @param a The exponent, tensor or number. If a number, it is rounded to the\n *   nearest integer and converted to a tensor.\n * @returns A tensor of the same shape as `x`.\n */\nexport function pow(x: Tensor, a: Tensor|number): Tensor {\n  return tidy(() => {\n    if (typeof (a) === 'number') {\n      a = scalar(Math.round(a), 'int32');\n    }\n    if (a.dtype !== 'int32') {\n      throw new NotImplementedError(\n          `Non-int32 dtype (${a.dtype}) is not supported by pow() yet`);\n    }\n    return tfc.pow(x, a);\n  });\n}\n\n/**\n * Reshapes bias tensor according to rank of x.\n */\nfunction reshapeBias(xRank: number, bias: Tensor, dataFormat: string) {\n  const biasShape = bias.shape;\n\n  if (bias.rank !== 1 && bias.rank !== xRank) {\n    throw new ValueError(\n        `Unexpected bias dimensions: ${bias.rank}` +\n        `; expected it to be 1 or ${xRank}`);\n  }\n\n  if (xRank === 5) {\n    if (dataFormat === 'channelsFirst') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, biasShape[0], 1, 1, 1]);\n      } else {\n        return bias.reshape(\n            [1, biasShape[3], biasShape[0], biasShape[1], biasShape[2]]);\n      }\n    } else if (dataFormat === 'channelsLast') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, 1, 1, 1, biasShape[0]]);\n      } else {\n        return bias.reshape([1].concat(biasShape));\n      }\n    }\n  } else if (xRank === 4) {\n    if (dataFormat === 'channelsFirst') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, biasShape[0], 1, 1]);\n      } else {\n        return bias.reshape([1, biasShape[2], biasShape[0], biasShape[1]]);\n      }\n    } else if (dataFormat === 'channelsLast') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, 1, 1, biasShape[0]]);\n      } else {\n        return bias.reshape([1].concat(biasShape));\n      }\n    }\n  } else if (xRank === 3) {\n    if (dataFormat === 'channelsFirst') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, biasShape[0], 1]);\n      } else {\n        return bias.reshape([1, biasShape[1], biasShape[0]]);\n      }\n    } else if (dataFormat === 'channelsLast') {\n      if (biasShape.length === 1) {\n        return bias.reshape([1, 1, biasShape[0]]);\n      } else {\n        return bias.reshape([1].concat(biasShape));\n      }\n    }\n  } else if (xRank < 3) {\n    return bias;\n  }\n  throw new ValueError(`Unsupported input rank by biasAdd: ${bias.rank}`);\n}\n\n/* Neural-network operations. */\n\n/**\n * Add a bias to a tensor.\n *\n * @param x The tensor to add the bias to.\n * @param bias The bias to add to `x`. Must be 1D or the same rank as `x`.\n * @return Result of the bias adding.\n * @throws ValueError: If the rank of `bias` is incorrect.\n */\nexport function biasAdd(\n    x: Tensor, bias: Tensor, dataFormat?: DataFormat): Tensor {\n  return tidy(() => {\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    checkDataFormat(dataFormat);\n\n    return x.add(reshapeBias(x.rank, bias, dataFormat));\n  });\n}\n\n/**\n * Exponential linear unit (ELU).\n * @param x A tensor or variable to compute the activation function for.\n * @param alpha: A scalar, a scaling factor for the negative section.\n * @return Output of the ELU operation.\n */\nexport function elu(x: Tensor, alpha = 1): Tensor {\n  // TODO(cais): Add support for alpha values other than 1.\n  if (alpha !== 1) {\n    throw new NotImplementedError(\n        `Support for alpha values other than 1 (${alpha}) is not implemented ` +\n        `yet.`);\n  }\n  return tfc.elu(x);\n}\n\n/**\n * Softsign of a tensor.\n *\n * Defined as x / (abs(x) + 1), element-wise.\n *\n * @param x: Input.\n * @returns Output.\n */\nexport function softsign(x: Tensor): Tensor {\n  return tidy(() => tfc.div(x, tfc.abs(x).add(1)));\n}\n\n/**\n * Sets entries in `x` to zero at random, while scaling the entire tensor.\n *\n * @param x input tensor.\n * @param level fraction of the entries in the tensor that will be set to 0.\n * @param noiseShape shape of randomly generated keep/drop flags, must be\n *   broadcastable to the shape of `x`. Optional.\n * @param seed random seed to ensure determinism. Optional.\n * @returns Result of the dropout operation.\n */\nexport function dropout(\n    x: Tensor, level: number, noiseShape?: number[], seed?: number): Tensor {\n  return tidy(() => tfc.dropout(x, level, noiseShape, seed));\n}\n\n/**\n * Element-wise, segment-wise linear approximation of sigmoid.\n *\n * Returns `0.` if `x < -2.5`, `1.` if `x > 2.5`.\n * In `-2.5 <= x <= 2.5`, returns `0.2 * x + 0.5`.\n *\n * @param x Input tensor.\n * @returns Output tensor.\n */\nexport function hardSigmoid(x: Tensor): Tensor {\n  return tidy(() => {\n    const y = tfc.add(.5, tfc.mul(.2, x));\n    return tfc.clipByValue(y, 0, 1);\n  });\n}\n\n/**\n * Invoke `x` in the training phase, and `alt` otherwise.\n *\n * Porting Note: We do not create placeholder tensors for the `training`\n * boolean flag here, because there is no such thing in the TF.js imperative\n * backend.\n *\n * @param x The function to invoke iff `training` is `true`.\n * @param alt The function to invoke iff `training` is `false`.\n * @param training Boolean flag for whether training phase is active.\n * @returns The return value of `x()` if `training` is `true`, or the return\n *   value of `alt()` if `training` is `false`.\n */\nexport function inTrainPhase<T>(x: () => T, alt: () => T, training = false): T {\n  return training ? x() : alt();\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {BaseSerialization} from './types';\n\n// TODO(soergel): Move the CamelCase versions back out of keras_format\n// e.g. to src/common.ts.  Maybe even duplicate *all* of these to be pedantic?\n/** @docinline */\nexport type FanMode = 'fanIn'|'fanOut'|'fanAvg';\nexport const VALID_FAN_MODE_VALUES = ['fanIn', 'fanOut', 'fanAvg'];\n\n// These constants have a snake vs. camel distinction.\nexport type FanModeSerialization = 'fan_in'|'fan_out'|'fan_avg';\n\n/** @docinline */\nexport type Distribution = 'normal'|'uniform'|'truncatedNormal';\nexport const VALID_DISTRIBUTION_VALUES =\n    ['normal', 'uniform', 'truncatedNormal'];\n// These constants have a snake vs. camel distinction.\nexport type DistributionSerialization = 'normal'|'uniform'|'truncated_normal';\n\nexport type ZerosSerialization = BaseSerialization<'Zeros', {}>;\n\nexport type OnesSerialization = BaseSerialization<'Ones', {}>;\n\nexport type ConstantConfig = {\n  value: number;\n};\n\nexport type ConstantSerialization =\n    BaseSerialization<'Constant', ConstantConfig>;\n\nexport type RandomNormalConfig = {\n  mean?: number;\n  stddev?: number;\n  seed?: number;\n};\n\nexport type RandomNormalSerialization =\n    BaseSerialization<'RandomNormal', RandomNormalConfig>;\n\nexport type RandomUniformConfig = {\n  minval?: number;\n  maxval?: number;\n  seed?: number;\n};\n\nexport type RandomUniformSerialization =\n    BaseSerialization<'RandomUniform', RandomUniformConfig>;\n\nexport type TruncatedNormalConfig = {\n  mean?: number;\n  stddev?: number;\n  seed?: number;\n};\n\nexport type TruncatedNormalSerialization =\n    BaseSerialization<'TruncatedNormal', TruncatedNormalConfig>;\n\nexport type VarianceScalingConfig = {\n  scale?: number;\n\n  mode?: FanModeSerialization;\n  distribution?: DistributionSerialization;\n  seed?: number;\n};\n\nexport type VarianceScalingSerialization =\n    BaseSerialization<'VarianceScaling', VarianceScalingConfig>;\n\nexport type OrthogonalConfig = {\n  seed?: number;\n  gain?: number;\n};\n\nexport type OrthogonalSerialization =\n    BaseSerialization<'Orthogonal', OrthogonalConfig>;\n\nexport type IdentityConfig = {\n  gain?: number;\n};\n\nexport type IdentitySerialization =\n    BaseSerialization<'Identity', IdentityConfig>;\n\n// Update initializerClassNames below in concert with this.\nexport type InitializerSerialization = ZerosSerialization|OnesSerialization|\n    ConstantSerialization|RandomUniformSerialization|RandomNormalSerialization|\n    TruncatedNormalSerialization|IdentitySerialization|\n    VarianceScalingSerialization|OrthogonalSerialization;\n\nexport type InitializerClassName = InitializerSerialization['class_name'];\n\n// We can't easily extract a string[] from the string union type, but we can\n// recapitulate the list, enforcing at compile time that the values are valid\n// and that we have the right number of them.\n\n/**\n * A string array of valid Initializer class names.\n *\n * This is guaranteed to match the `InitializerClassName` union type.\n */\nexport const initializerClassNames: InitializerClassName[] = [\n  'Zeros', 'Ones', 'Constant', 'RandomNormal', 'RandomUniform',\n  'TruncatedNormal', 'VarianceScaling', 'Orthogonal', 'Identity'\n];\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {DataType, eye, linalg, mul, ones, randomUniform, scalar, serialization, Tensor, Tensor2D, tidy, truncatedNormal, zeros} from '@tensorflow/tfjs-core';\n\nimport * as K from './backend/tfjs_backend';\nimport {checkDataFormat} from './common';\nimport {NotImplementedError, ValueError} from './errors';\nimport {DataFormat, Shape} from './keras_format/common';\nimport {Distribution, FanMode, VALID_DISTRIBUTION_VALUES, VALID_FAN_MODE_VALUES} from './keras_format/initializer_config';\nimport {checkStringTypeUnionValue, deserializeKerasObject, serializeKerasObject} from './utils/generic_utils';\nimport {arrayProd} from './utils/math_utils';\n\nexport function checkFanMode(value?: string): void {\n  checkStringTypeUnionValue(VALID_FAN_MODE_VALUES, 'FanMode', value);\n}\n\nexport function checkDistribution(value?: string): void {\n  checkStringTypeUnionValue(VALID_DISTRIBUTION_VALUES, 'Distribution', value);\n}\n\n/**\n * Initializer base class.\n *\n * @doc {\n *   heading: 'Initializers', subheading: 'Classes', namespace: 'initializers'}\n */\nexport abstract class Initializer extends serialization.Serializable {\n  public fromConfigUsesCustomObjects(): boolean {\n    return false;\n  }\n  /**\n   * Generate an initial value.\n   * @param shape\n   * @param dtype\n   * @return The init value.\n   */\n  abstract apply(shape: Shape, dtype?: DataType): Tensor;\n\n  getConfig(): serialization.ConfigDict {\n    return {};\n  }\n}\n\nexport class Zeros extends Initializer {\n  /** @nocollapse */\n  static className = 'Zeros';\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return zeros(shape, dtype);\n  }\n}\nserialization.registerClass(Zeros);\n\nexport class Ones extends Initializer {\n  /** @nocollapse */\n  static className = 'Ones';\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return ones(shape, dtype);\n  }\n}\nserialization.registerClass(Ones);\n\nexport interface ConstantArgs {\n  /** The value for each element in the variable. */\n  value: number;\n}\n\nexport class Constant extends Initializer {\n  /** @nocollapse */\n  static className = 'Constant';\n  private value: number;\n  constructor(args: ConstantArgs) {\n    super();\n    if (typeof args !== 'object') {\n      throw new ValueError(\n          `Expected argument of type ConstantConfig but got ${args}`);\n    }\n    if (args.value === undefined) {\n      throw new ValueError(`config must have value set but got ${args}`);\n    }\n    this.value = args.value;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return tidy(() => mul(scalar(this.value), ones(shape, dtype)));\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {\n      value: this.value,\n    };\n  }\n}\nserialization.registerClass(Constant);\n\nexport interface RandomUniformArgs {\n  /** Lower bound of the range of random values to generate. */\n  minval?: number;\n  /** Upper bound of the range of random values to generate. */\n  maxval?: number;\n  /** Used to seed the random generator. */\n  seed?: number;\n}\n\nexport class RandomUniform extends Initializer {\n  /** @nocollapse */\n  static className = 'RandomUniform';\n  readonly DEFAULT_MINVAL = -0.05;\n  readonly DEFAULT_MAXVAL = 0.05;\n  private minval: number;\n  private maxval: number;\n  private seed: number;\n\n  constructor(args: RandomUniformArgs) {\n    super();\n    this.minval = args.minval || this.DEFAULT_MINVAL;\n    this.maxval = args.maxval || this.DEFAULT_MAXVAL;\n    this.seed = args.seed;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return randomUniform(shape, this.minval, this.maxval, dtype);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {minval: this.minval, maxval: this.maxval, seed: this.seed};\n  }\n}\nserialization.registerClass(RandomUniform);\n\nexport interface RandomNormalArgs {\n  /** Mean of the random values to generate. */\n  mean?: number;\n  /** Standard deviation of the random values to generate. */\n  stddev?: number;\n  /** Used to seed the random generator. */\n  seed?: number;\n}\n\nexport class RandomNormal extends Initializer {\n  /** @nocollapse */\n  static className = 'RandomNormal';\n  readonly DEFAULT_MEAN = 0.;\n  readonly DEFAULT_STDDEV = 0.05;\n  private mean: number;\n  private stddev: number;\n  private seed: number;\n\n  constructor(args: RandomNormalArgs) {\n    super();\n    this.mean = args.mean || this.DEFAULT_MEAN;\n    this.stddev = args.stddev || this.DEFAULT_STDDEV;\n    this.seed = args.seed;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    dtype = dtype || 'float32';\n    if (dtype !== 'float32' && dtype !== 'int32') {\n      throw new NotImplementedError(\n          `randomNormal does not support dType ${dtype}.`);\n    }\n\n    return K.randomNormal(shape, this.mean, this.stddev, dtype, this.seed);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {mean: this.mean, stddev: this.stddev, seed: this.seed};\n  }\n}\nserialization.registerClass(RandomNormal);\n\nexport interface TruncatedNormalArgs {\n  /** Mean of the random values to generate. */\n  mean?: number;\n  /** Standard deviation of the random values to generate. */\n  stddev?: number;\n  /** Used to seed the random generator. */\n  seed?: number;\n}\n\nexport class TruncatedNormal extends Initializer {\n  /** @nocollapse */\n  static className = 'TruncatedNormal';\n\n  readonly DEFAULT_MEAN = 0.;\n  readonly DEFAULT_STDDEV = 0.05;\n  private mean: number;\n  private stddev: number;\n  private seed: number;\n\n  constructor(args: TruncatedNormalArgs) {\n    super();\n    this.mean = args.mean || this.DEFAULT_MEAN;\n    this.stddev = args.stddev || this.DEFAULT_STDDEV;\n    this.seed = args.seed;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    dtype = dtype || 'float32';\n    if (dtype !== 'float32' && dtype !== 'int32') {\n      throw new NotImplementedError(\n          `truncatedNormal does not support dType ${dtype}.`);\n    }\n    return truncatedNormal(shape, this.mean, this.stddev, dtype, this.seed);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {mean: this.mean, stddev: this.stddev, seed: this.seed};\n  }\n}\nserialization.registerClass(TruncatedNormal);\n\nexport interface IdentityArgs {\n  /**\n   * Multiplicative factor to apply to the identity matrix.\n   */\n  gain?: number;\n}\n\nexport class Identity extends Initializer {\n  /** @nocollapse */\n  static className = 'Identity';\n  private gain: number;\n  constructor(args: IdentityArgs) {\n    super();\n    this.gain = args.gain != null ? args.gain : 1.0;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return tidy(() => {\n      if (shape.length !== 2 || shape[0] !== shape[1]) {\n        throw new ValueError(\n            'Identity matrix initializer can only be used for' +\n            ' 2D square matrices.');\n      } else {\n        return mul(this.gain, eye(shape[0]));\n      }\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {gain: this.gain};\n  }\n}\nserialization.registerClass(Identity);\n\n/**\n * Computes the number of input and output units for a weight shape.\n * @param shape Shape of weight.\n * @param dataFormat data format to use for convolution kernels.\n *   Note that all kernels in Keras are standardized on the\n *   CHANNEL_LAST ordering (even when inputs are set to CHANNEL_FIRST).\n * @return An length-2 array: fanIn, fanOut.\n */\nfunction computeFans(\n    shape: Shape, dataFormat: DataFormat = 'channelsLast'): number[] {\n  let fanIn: number;\n  let fanOut: number;\n  checkDataFormat(dataFormat);\n  if (shape.length === 2) {\n    fanIn = shape[0];\n    fanOut = shape[1];\n  } else if ([3, 4, 5].indexOf(shape.length) !== -1) {\n    if (dataFormat === 'channelsFirst') {\n      const receptiveFieldSize = arrayProd(shape, 2);\n      fanIn = shape[1] * receptiveFieldSize;\n      fanOut = shape[0] * receptiveFieldSize;\n    } else if (dataFormat === 'channelsLast') {\n      const receptiveFieldSize = arrayProd(shape, 0, shape.length - 2);\n      fanIn = shape[shape.length - 2] * receptiveFieldSize;\n      fanOut = shape[shape.length - 1] * receptiveFieldSize;\n    }\n  } else {\n    const shapeProd = arrayProd(shape);\n    fanIn = Math.sqrt(shapeProd);\n    fanOut = Math.sqrt(shapeProd);\n  }\n\n  return [fanIn, fanOut];\n}\n\nexport interface VarianceScalingArgs {\n  /** Scaling factor (positive float). */\n  scale?: number;\n\n  /** Fanning mode for inputs and outputs. */\n  mode?: FanMode;\n\n  /** Probabilistic distribution of the values. */\n  distribution?: Distribution;\n\n  /** Random number generator seed. */\n  seed?: number;\n}\n\nexport class VarianceScaling extends Initializer {\n  /** @nocollapse */\n  static className = 'VarianceScaling';\n  private scale: number;\n  private mode: FanMode;\n  private distribution: Distribution;\n  private seed: number;\n\n  /**\n   * Constructor of VarianceScaling.\n   * @throws ValueError for invalid value in scale.\n   */\n  constructor(args: VarianceScalingArgs) {\n    super();\n    if (args.scale < 0.0) {\n      throw new ValueError(\n          `scale must be a positive float. Got: ${args.scale}`);\n    }\n    this.scale = args.scale == null ? 1.0 : args.scale;\n    this.mode = args.mode == null ? 'fanIn' : args.mode;\n    checkFanMode(this.mode);\n    this.distribution =\n        args.distribution == null ? 'normal' : args.distribution;\n    checkDistribution(this.distribution);\n    this.seed = args.seed;\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    const fans = computeFans(shape);\n    const fanIn = fans[0];\n    const fanOut = fans[1];\n    let scale = this.scale;\n    if (this.mode === 'fanIn') {\n      scale /= Math.max(1, fanIn);\n    } else if (this.mode === 'fanOut') {\n      scale /= Math.max(1, fanOut);\n    } else {\n      scale /= Math.max(1, (fanIn + fanOut) / 2);\n    }\n\n    if (this.distribution === 'normal') {\n      const stddev = Math.sqrt(scale);\n      dtype = dtype || 'float32';\n      if (dtype !== 'float32' && dtype !== 'int32') {\n        throw new NotImplementedError(\n            `${this.getClassName()} does not support dType ${dtype}.`);\n      }\n      return truncatedNormal(shape, 0, stddev, dtype, this.seed);\n    } else {\n      const limit = Math.sqrt(3 * scale);\n      return randomUniform(shape, -limit, limit, dtype);\n    }\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {\n      scale: this.scale,\n      mode: this.mode,\n      distribution: this.distribution,\n      seed: this.seed\n    };\n  }\n}\nserialization.registerClass(VarianceScaling);\n\nexport interface SeedOnlyInitializerArgs {\n  /** Random number generator seed. */\n  seed?: number;\n}\n\nexport class GlorotUniform extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'GlorotUniform';\n\n  /**\n   * Constructor of GlorotUniform\n   * @param scale\n   * @param mode\n   * @param distribution\n   * @param seed\n   */\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 1.0,\n      mode: 'fanAvg',\n      distribution: 'uniform',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, GlorotUniform is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(GlorotUniform);\n\nexport class GlorotNormal extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'GlorotNormal';\n\n  /**\n   * Constructor of GlorotNormal.\n   * @param scale\n   * @param mode\n   * @param distribution\n   * @param seed\n   */\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 1.0,\n      mode: 'fanAvg',\n      distribution: 'normal',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, GlorotNormal is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(GlorotNormal);\n\nexport class HeNormal extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'HeNormal';\n\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 2.0,\n      mode: 'fanIn',\n      distribution: 'normal',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, HeNormal is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(HeNormal);\n\nexport class HeUniform extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'HeUniform';\n\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 2.0,\n      mode: 'fanIn',\n      distribution: 'uniform',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, HeUniform is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(HeUniform);\n\nexport class LeCunNormal extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'LeCunNormal';\n\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 1.0,\n      mode: 'fanIn',\n      distribution: 'normal',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, LeCunNormal is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(LeCunNormal);\n\nexport class LeCunUniform extends VarianceScaling {\n  /** @nocollapse */\n  static className = 'LeCunNormal';\n\n  constructor(args?: SeedOnlyInitializerArgs) {\n    super({\n      scale: 1.0,\n      mode: 'fanIn',\n      distribution: 'uniform',\n      seed: args == null ? null : args.seed\n    });\n  }\n\n  getClassName(): string {\n    // In Python Keras, LeCunUniform is not a class, but a helper method\n    // that creates a VarianceScaling object. Use 'VarianceScaling' as\n    // class name to be compatible with that.\n    return VarianceScaling.className;\n  }\n}\nserialization.registerClass(LeCunUniform);\n\nexport interface OrthogonalArgs extends SeedOnlyInitializerArgs {\n  /**\n   * Multiplicative factor to apply to the orthogonal matrix. Defaults to 1.\n   */\n  gain?: number;\n}\n\nexport class Orthogonal extends Initializer {\n  /** @nocollapse */\n  static className = 'Orthogonal';\n  readonly DEFAULT_GAIN = 1;\n  protected readonly gain: number;\n  protected readonly seed: number;\n\n  constructor(args?: OrthogonalArgs) {\n    super();\n    this.gain = args.gain == null ? this.DEFAULT_GAIN : args.gain;\n    this.seed = args.seed;\n\n    if (this.seed != null) {\n      throw new NotImplementedError(\n          'Random seed is not implemented for Orthogonal Initializer yet.');\n    }\n  }\n\n  apply(shape: Shape, dtype?: DataType): Tensor {\n    return tidy(() => {\n      if (shape.length !== 2) {\n        throw new NotImplementedError(\n            'The Orthogonal Initializer does not support non-2D shapes yet.');\n      }\n      if (shape[0] * shape[1] > 2000) {\n        console.warn(\n            `Orthogonal initializer is being called on a matrix with more ` +\n            `than 2000 (${shape[0] * shape[1]}) elements: ` +\n            `Slowness may result.`);\n      }\n\n      // TODO(cais): Add seed support.\n      const normalizedShape =\n          shape[0] > shape[1] ? [shape[1], shape[0]] : shape;\n      const a = K.randomNormal(normalizedShape, 0, 1, 'float32') as Tensor2D;\n      let q = linalg.gramSchmidt(a) as Tensor2D;\n      if (shape[0] > shape[1]) {\n        q = q.transpose();\n      }\n      return mul(this.gain, q);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {\n      gain: this.gain,\n      seed: this.seed,\n    };\n  }\n}\nserialization.registerClass(Orthogonal);\n\n/** @docinline */\nexport type InitializerIdentifier =\n    'constant'|'glorotNormal'|'glorotUniform'|'heNormal'|'heUniform'|'identity'|\n    'leCunNormal'|'leCunUniform'|'ones'|'orthogonal'|'randomNormal'|\n    'randomUniform'|'truncatedNormal'|'varianceScaling'|'zeros'|string;\n\n// Maps the JavaScript-like identifier keys to the corresponding registry\n// symbols.\nexport const INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP:\n    {[identifier in InitializerIdentifier]: string} = {\n      'constant': 'Constant',\n      'glorotNormal': 'GlorotNormal',\n      'glorotUniform': 'GlorotUniform',\n      'heNormal': 'HeNormal',\n      'heUniform': 'HeUniform',\n      'identity': 'Identity',\n      'leCunNormal': 'LeCunNormal',\n      'leCunUniform': 'LeCunUniform',\n      'ones': 'Ones',\n      'orthogonal': 'Orthogonal',\n      'randomNormal': 'RandomNormal',\n      'randomUniform': 'RandomUniform',\n      'truncatedNormal': 'TruncatedNormal',\n      'varianceScaling': 'VarianceScaling',\n      'zeros': 'Zeros'\n    };\n\nfunction deserializeInitializer(\n    config: serialization.ConfigDict,\n    customObjects: serialization.ConfigDict = {}): Initializer {\n  return deserializeKerasObject(\n      config, serialization.SerializationMap.getMap().classNameMap,\n      customObjects, 'initializer');\n}\n\nexport function serializeInitializer(initializer: Initializer):\n    serialization.ConfigDictValue {\n  return serializeKerasObject(initializer);\n}\n\nexport function getInitializer(identifier: InitializerIdentifier|Initializer|\n                               serialization.ConfigDict): Initializer {\n  if (typeof identifier === 'string') {\n    const className = identifier in INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ?\n        INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] :\n        identifier;\n    /* We have four 'helper' classes for common initializers that\n    all get serialized as 'VarianceScaling' and shouldn't go through\n    the deserializeInitializer pathway. */\n    if (className === 'GlorotNormal') {\n      return new GlorotNormal();\n    } else if (className === 'GlorotUniform') {\n      return new GlorotUniform();\n    } else if (className === 'HeNormal') {\n      return new HeNormal();\n    } else if (className === 'HeUniform') {\n      return new HeUniform();\n    } else if (className === 'LeCunNormal') {\n      return new LeCunNormal();\n    } else if (className === 'LeCunUniform') {\n      return new LeCunUniform();\n    } else {\n      const config: serialization.ConfigDict = {};\n      config['className'] = className;\n      config['config'] = {};\n      return deserializeInitializer(config);\n    }\n  } else if (identifier instanceof Initializer) {\n    return identifier;\n  } else {\n    return deserializeInitializer(identifier);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n// tslint:disable-next-line:max-line-length\nimport {Constant, ConstantArgs, GlorotNormal, GlorotUniform, HeNormal, HeUniform, Identity, IdentityArgs, Initializer, LeCunNormal, LeCunUniform, Ones, Orthogonal, OrthogonalArgs, RandomNormal, RandomNormalArgs, RandomUniform, RandomUniformArgs, SeedOnlyInitializerArgs, TruncatedNormal, TruncatedNormalArgs, VarianceScaling, VarianceScalingArgs, Zeros} from './initializers';\n\n/**\n * Initializer that generates tensors initialized to 0.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function zeros(): Zeros {\n  return new Zeros();\n}\n\n/**\n * Initializer that generates tensors initialized to 1.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function ones(): Initializer {\n  return new Ones();\n}\n\n/**\n * Initializer that generates values initialized to some constant.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function constant(args: ConstantArgs): Initializer {\n  return new Constant(args);\n}\n\n/**\n * Initializer that generates random values initialized to a uniform\n * distribution.\n *\n * Values will be distributed uniformly between the configured minval and\n * maxval.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function randomUniform(args: RandomUniformArgs): Initializer {\n  return new RandomUniform(args);\n}\n\n/**\n * Initializer that generates random values initialized to a normal\n * distribution.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function randomNormal(args: RandomNormalArgs): Initializer {\n  return new RandomNormal(args);\n}\n\n/**\n * Initializer that generates random values initialized to a truncated normal.\n * distribution.\n *\n * These values are similar to values from a `RandomNormal` except that values\n * more than two standard deviations from the mean are discarded and re-drawn.\n * This is the recommended initializer for neural network weights and filters.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function truncatedNormal(args: TruncatedNormalArgs): Initializer {\n  return new TruncatedNormal(args);\n}\n\n/**\n * Initializer that generates the identity matrix.\n * Only use for square 2D matrices.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function identity(args: IdentityArgs): Initializer {\n  return new Identity(args);\n}\n\n/**\n * Initializer capable of adapting its scale to the shape of weights.\n * With distribution=NORMAL, samples are drawn from a truncated normal\n * distribution centered on zero, with `stddev = sqrt(scale / n)` where n is:\n *   - number of input units in the weight tensor, if mode = FAN_IN.\n *   - number of output units, if mode = FAN_OUT.\n *   - average of the numbers of input and output units, if mode = FAN_AVG.\n * With distribution=UNIFORM,\n * samples are drawn from a uniform distribution\n * within [-limit, limit], with `limit = sqrt(3 * scale / n)`.\n */\n/** @doc {heading: 'Initializers',namespace: 'initializers'} */\nexport function varianceScaling(config: VarianceScalingArgs): Initializer {\n  return new VarianceScaling(config);\n}\n\n/**\n * Glorot uniform initializer, also called Xavier uniform initializer.\n * It draws samples from a uniform distribution within [-limit, limit]\n * where `limit` is `sqrt(6 / (fan_in + fan_out))`\n * where `fan_in` is the number of input units in the weight tensor\n * and `fan_out` is the number of output units in the weight tensor\n *\n * Reference:\n *   Glorot & Bengio, AISTATS 2010\n *       http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function glorotUniform(args: SeedOnlyInitializerArgs): Initializer {\n  return new GlorotUniform(args);\n}\n\n/**\n * Glorot normal initializer, also called Xavier normal initializer.\n * It draws samples from a truncated normal distribution centered on 0\n * with `stddev = sqrt(2 / (fan_in + fan_out))`\n * where `fan_in` is the number of input units in the weight tensor\n * and `fan_out` is the number of output units in the weight tensor.\n *\n * Reference:\n *   Glorot & Bengio, AISTATS 2010\n *       http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function glorotNormal(args: SeedOnlyInitializerArgs): Initializer {\n  return new GlorotNormal(args);\n}\n\n/**\n * He normal initializer.\n *\n * It draws samples from a truncated normal distribution centered on 0\n * with `stddev = sqrt(2 / fanIn)`\n * where `fanIn` is the number of input units in the weight tensor.\n *\n * Reference:\n *     He et al., http://arxiv.org/abs/1502.01852\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function heNormal(args: SeedOnlyInitializerArgs): Initializer {\n  return new HeNormal(args);\n}\n\n/**\n * He uniform initializer.\n *\n * It draws samples from a uniform distribution within [-limit, limit]\n * where `limit` is `sqrt(6 / fan_in)`\n * where `fanIn` is the number of input units in the weight tensor.\n *\n * Reference:\n *     He et al., http://arxiv.org/abs/1502.01852\n */\n/** @doc {heading: 'Initializers',namespace: 'initializers'} */\nexport function heUniform(args: SeedOnlyInitializerArgs): Initializer {\n  return new HeUniform(args);\n}\n\n/**\n * LeCun normal initializer.\n *\n * It draws samples from a truncated normal distribution centered on 0\n * with `stddev = sqrt(1 / fanIn)`\n * where `fanIn` is the number of input units in the weight tensor.\n *\n * References:\n *   [Self-Normalizing Neural Networks](https://arxiv.org/abs/1706.02515)\n *   [Efficient Backprop](http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf)\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function leCunNormal(args: SeedOnlyInitializerArgs): Initializer {\n  return new LeCunNormal(args);\n}\n\n/**\n * LeCun uniform initializer.\n *\n * It draws samples from a uniform distribution in the interval\n * `[-limit, limit]` with `limit = sqrt(3 / fanIn)`,\n * where `fanIn` is the number of input units in the weight tensor.\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function leCunUniform(args: SeedOnlyInitializerArgs): Initializer {\n  return new LeCunUniform(args);\n}\n\n/**\n * Initializer that generates a random orthogonal matrix.\n *\n * Reference:\n * [Saxe et al., http://arxiv.org/abs/1312.6120](http://arxiv.org/abs/1312.6120)\n */\n/** @doc {heading: 'Initializers', namespace: 'initializers'} */\nexport function orthogonal(args: OrthogonalArgs): Initializer {\n  return new Orthogonal(args);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Utilities related to persistent state in the backend.\n */\n\n/**\n * An ID to track `tf.SymbolicTensor`s and derived classes.\n * Required in different places in engine/topology.ts to identify unique\n * tensors.\n */\nlet _nextUniqueTensorId = 0;\n\nexport function getNextUniqueTensorId(): number {\n  return _nextUniqueTensorId++;\n}\n\nconst _uidPrefixes: {[prefix: string]: number} = {};\n\n/**\n * Provides a unique UID given a string prefix.\n *\n * @param prefix\n */\nexport function getUid(prefix = ''): string {\n  if (!(prefix in _uidPrefixes)) {\n    _uidPrefixes[prefix] = 0;\n  }\n  _uidPrefixes[prefix] += 1;\n  return prefix + _uidPrefixes[prefix].toString();\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: utils/generic_utils.py */\n\nimport {Tensor} from '@tensorflow/tfjs-core';\nimport {ValueError} from '../errors';\nimport {Shape} from '../keras_format/common';\n// tslint:enable\n\n/**\n * Determine whether the input is an Array of Shapes.\n */\nexport function isArrayOfShapes(x: Shape|Shape[]): boolean {\n  return Array.isArray(x) && Array.isArray(x[0]);\n}\n\n/**\n * Special case of normalizing shapes to lists.\n *\n * @param x A shape or list of shapes to normalize into a list of Shapes.\n * @return A list of Shapes.\n */\nexport function normalizeShapeList(x: Shape|Shape[]): Shape[] {\n  if (x.length === 0) {\n    return [];\n  }\n  if (!Array.isArray(x[0])) {\n    return [x] as Shape[];\n  }\n  return x as Shape[];\n}\n\n/**\n * Helper function to obtain exactly one Tensor.\n * @param xs: A single `tf.Tensor` or an `Array` of `tf.Tensor`s.\n * @return A single `tf.Tensor`. If `xs` is an `Array`, return the first one.\n * @throws ValueError: If `xs` is an `Array` and its length is not 1.\n */\nexport function getExactlyOneTensor(xs: Tensor|Tensor[]): Tensor {\n  let x: Tensor;\n  if (Array.isArray(xs)) {\n    if (xs.length !== 1) {\n      throw new ValueError(`Expected Tensor length to be 1; got ${xs.length}`);\n    }\n    x = xs[0];\n  } else {\n    x = xs;\n  }\n  return x;\n}\n\n/**\n * Helper function to obtain exactly on instance of Shape.\n *\n * @param shapes Input single `Shape` or Array of `Shape`s.\n * @returns If input is a single `Shape`, return it unchanged. If the input is\n *   an `Array` containing exactly one instance of `Shape`, return the instance.\n *   Otherwise, throw a `ValueError`.\n * @throws ValueError: If input is an `Array` of `Shape`s, and its length is not\n *   1.\n */\nexport function getExactlyOneShape(shapes: Shape|Shape[]): Shape {\n  if (Array.isArray(shapes) && Array.isArray(shapes[0])) {\n    if (shapes.length === 1) {\n      shapes = shapes as Shape[];\n      return shapes[0];\n    } else {\n      throw new ValueError(`Expected exactly 1 Shape; got ${shapes.length}`);\n    }\n  } else {\n    return shapes as Shape;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {LayerVariable} from '../variables';\n\n/**\n * Count the elements in an Array of LayerVariables.\n *\n * @param weights: The LayerVariables of which the constituent numbers are to\n *   be counted.\n * @returns A count of the elements in all the LayerVariables\n */\nexport function countParamsInWeights(weights: LayerVariable[]): number {\n  let count = 0;\n  for (const weight of weights) {\n    if (weight.shape.length === 0) {\n      count += 1;\n    } else {\n      count += weight.shape.reduce((a, b) => a * b);\n    }\n  }\n  return count;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {DataType, Tensor, variableGrads} from '@tensorflow/tfjs-core';\n\nimport {getNextUniqueTensorId} from './backend/state';\nimport {getScopedTensorName, getUniqueTensorName} from './common';\nimport {Constraint} from './constraints';\nimport {NotImplementedError} from './errors';\nimport {Shape} from './keras_format/common';\nimport {HasShape} from './types';\n\nconst DEFAULT_VARIABLE_NAME_PREFIX = 'Variable';\n\n/**\n * A `tf.layers.LayerVariable` is similar to a `tf.Tensor` in that it has a\n * dtype and shape, but its value is mutable.  The value is itself represented\n * as a`tf.Tensor`, and can be read with the `read()` method and updated with\n * the `write()` method.\n */\nexport class LayerVariable {\n  readonly dtype: DataType;\n  readonly shape: Shape;\n\n  readonly id: number;\n  // The fully scoped name of this Variable, including a unique suffix if needed\n  readonly name: string;\n  // The originally requested fully scoped name of this Variable, not including\n  // any unique suffix.  This may be needed when restoring weights because this\n  // original name is used as a key.\n  readonly originalName: string;\n  private trainable_: boolean;\n\n  protected readonly val: tfc.Variable;\n  readonly constraint: Constraint;\n  /**\n   * Construct Variable from a `tf.Tensor`.\n   *\n   * If not explicitly named, the Variable will be given a name with the\n   * prefix 'Variable'. Variable names are unique. In the case of name\n   * collision, suffixies '_<num>' will be added to the name.\n   *\n   * @param val Initial value of the Variable.\n   * @param name Name of the variable. If `null` or `undefined` is provided, it\n   *   will default a name with the prefix 'Variable'.\n   * @param constraint Optional, projection function to be applied to the\n   * variable after optimize updates\n   * @throws ValueError if `name` is `null` or `undefined`.\n   */\n  constructor(\n      val: Tensor, dtype: DataType = 'float32',\n      name = DEFAULT_VARIABLE_NAME_PREFIX, trainable = true,\n      constraint: Constraint = null) {\n    this.dtype = dtype == null ? 'float32' : dtype;\n    this.shape = val.shape;\n    this.id = getNextUniqueTensorId();\n\n    name = name == null ? DEFAULT_VARIABLE_NAME_PREFIX : name;\n    this.originalName = getScopedTensorName(name);\n    this.name = getUniqueTensorName(this.originalName);\n\n    this.trainable_ = trainable;\n    this.constraint = constraint;\n\n    this.val = tfc.variable(val, this.trainable_, this.name, this.dtype);\n  }\n\n  /**\n   * Get a snapshot of the Variable's value.\n   *\n   * The returned value is a snapshot of the Variable's value at the time of\n   * the invocation. Future mutations in the value of the tensor will only\n   * be reflected by future calls to this method.\n   */\n  read(): Tensor {\n    this.assertNotDisposed();\n    return this.val;\n  }\n\n  /**\n   * Update the value of the Variable.\n   *\n   * @param newVal: The new value to update to. Must be consistent with the\n   *   dtype and shape of the Variable.\n   * @return This Variable.\n   */\n  write(newVal: Tensor) {\n    // TODO(cais): Once  TF.js Core supports Tensor.dtype, check dtype match.\n    this.assertNotDisposed();\n    checkShapesMatch(this.val, newVal);\n    // Skip updating if this is the exact same tensor.\n    if (this.val.id !== newVal.id) {\n      this.val.assign(newVal);\n      if (this.constraint != null) {\n        this.val.assign(this.constraint.apply(this.val));\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Dispose this LayersVariable instance from memory.\n   */\n  dispose(): void {\n    this.assertNotDisposed();\n    this.val.dispose();\n  }\n\n  protected assertNotDisposed(): void {\n    if (this.val.isDisposed) {\n      throw new Error(`LayersVariable ${this.name} is already disposed.`);\n    }\n  }\n\n  get trainable(): boolean {\n    return this.trainable_;\n  }\n\n  set trainable(trainable: boolean) {\n    this.trainable_ = trainable;\n    this.val.trainable = trainable;\n  }\n}\n\nfunction checkShapesMatch(x: HasShape, y: HasShape): void {\n  if (x.shape.toString() !== y.shape.toString()) {\n    throw new Error(\n        'Shape mismatch: ' + JSON.stringify(x.shape) + ' vs. ' +\n        JSON.stringify(y.shape));\n  }\n}\n\n/**\n * Create a Variable.\n * @param x The initial value of the `Variable`.\n * @param dtype optional, the type of the variable.\n * @param name optional, the name of the variable, default provided by\n * Variable.\n * @param constraint optional, a constraint to be applied after every update.\n * @return The newly instantiated `Variable`.\n */\nexport function variable(\n    x: Tensor, dtype?: DataType, name?: string,\n    constraint?: Constraint): LayerVariable {\n  return new LayerVariable(x, dtype, name, true, constraint);\n}\n\n/**\n * Instantiates an all-zeros Variable and returns it.\n *\n * @param shape Shape of the tensor.\n * @param dtype DType of the tensor.\n * @param name Name of the tensor.\n * @return An all-zero Variable.\n */\nexport function zerosVariable(\n    shape: Shape, dtype?: DataType, name?: string): LayerVariable {\n  // TODO(cais): Implement logic for dtype.\n  return new LayerVariable(tfc.zeros(shape), dtype, name);\n}\n\n/**\n * Instantiates an all-zeros tensor of the same shape as another tensor.\n *\n * @param x The other tensor.\n * @param dtype DType of the tensor.\n * @param name Name of the tensor.\n * @return A newly instantiated Variable.\n */\nexport function zerosLike(\n    x: Tensor, dtype?: DataType, name?: string): LayerVariable {\n  return new LayerVariable(tfc.zerosLike(x), dtype, name);\n}\n\n/**\n * Instantiates an all-ones tensor and returns it.\n *\n * @param shape Shape of the tensor.\n * @param dtype DType of the tensor.\n * @param name Name of the tensor.\n * @return An all-ones Variable.\n */\nexport function onesVariable(\n    shape: Shape, dtype?: DataType, name?: string): LayerVariable {\n  // TODO(cais): Implement logic for dtype.\n  const allocated = tfc.ones(shape);\n  return new LayerVariable(allocated, dtype, name);\n}\n\n/**\n * Instantiates an all-ones tensor of the same shape as another tensor.\n *\n * @param x The other tensor.\n * @param dtype DType of the tensor.\n * @param name Name of the tensor.\n * @return A newly instantiated Variable.\n */\nexport function onesLike(\n    x: Tensor, dtype?: DataType, name?: string): LayerVariable {\n  const allocated = tfc.onesLike(x);\n  return new LayerVariable(allocated, dtype, name);\n}\n\n/**\n * Instantiate an identity matrix and returns it, as a Variable\n *\n * @param size Number of rows/columns.\n * @param dtype Data type of returned Variable.\n * @param name Name of returned Variable.\n * @return A Variable, an identity matrix.\n */\nexport function eyeVariable(\n    size: number, dtype?: DataType, name?: string): LayerVariable {\n  return new LayerVariable(tfc.eye(size), dtype, name);\n}\n\n/**\n * Get a Variable with uniform distribution of values.\n * @param shape Shape of the tensor.\n * @param minval Lower bound of the uniform distribution.\n * @param maxval Upper bound of the uniform distribution.\n * @param dtype\n * @param seed\n * @param name Optional name.\n * @return The uniform-random Variable.\n */\nexport function randomUniformVariable(\n    shape: Shape, minval: number, maxval: number, dtype?: DataType,\n    seed?: number, name = 'randomUniform'): LayerVariable {\n  return new LayerVariable(\n      tfc.randomUniform(shape, minval, maxval, dtype), dtype, name);\n}\n\n/**\n * Get a Variable with truncated-normal distribution of values.\n * @param shape Shape of the tensor.\n * @param mean mean value of the normal distribution.\n * @param stddev standard deviation of the normal distribution.\n * @param dtype\n * @param seed\n * @param name Optional name.\n * @return The truncated-normal-random Variable.\n */\nexport function truncatedNormalVariable(\n    shape: Shape, mean = 0.0, stddev = 1.0, dtype?: DataType, seed?: number,\n    name = 'truncatedNormal'): LayerVariable {\n  // TODO(cais): Implement logic for dtype and seed once they are supported\n  // by deeplearn.js.\n  dtype = dtype || 'float32';\n  if (dtype !== 'float32' && dtype !== 'int32') {\n    throw new NotImplementedError(\n        `randomNormal does not support dType ${dtype}.`);\n  }\n  return new LayerVariable(\n      tfc.truncatedNormal(shape, mean, stddev, dtype, seed), dtype, name);\n}\n/**\n * Get a Variable with normal distribution of values.\n * @param shape Shape of the tensor.\n * @param mean mean value of the normal distribution.\n * @param stddev standard deviation of the normal distribution.\n * @param dtype\n * @param seed\n * @param name Optional name.\n * @return The truncated-normal-random Variable.\n */\nexport function randomNormalVariable(\n    shape: Shape, mean = 0.0, stddev = 1.0, dtype?: DataType, seed?: number,\n    name = 'randomNormal'): LayerVariable {\n  dtype = dtype || 'float32';\n  if (dtype !== 'float32' && dtype !== 'int32') {\n    throw new NotImplementedError(\n        `randomNormalVariable does not support dType ${dtype}.`);\n  }\n  return new LayerVariable(\n      tfc.randomNormal(shape, mean, stddev, dtype, seed), dtype, name);\n}\n\n/**\n * Update the value of a Variable.\n * @param x The Variable to be updated.\n * @param xNew The new value to update to.\n * @return The Variable updated.\n */\nexport function update(x: LayerVariable, xNew: Tensor): LayerVariable {\n  return x.write(xNew);\n}\n\n/**\n * Update the value of a Variable by adding an increment.\n * @param x The Variable to be updated.\n * @param increment The incrment to add to `x`.\n * @return The Variable updated.\n */\nexport function updateAdd(x: LayerVariable, increment: Tensor): LayerVariable {\n  return x.write(tfc.add(x.read(), increment));\n}\n\n/**\n * Update the value of a Variable by subtracting a decrement.\n * @param x The Variable to be updated.\n * @param decrement The decrement to subtract from `x`.\n * @return The Variable updated.\n */\nexport function updateSub(x: LayerVariable, decrement: Tensor): LayerVariable {\n  return x.write(tfc.sub(x.read(), decrement));\n}\n\n/**\n * Get the values of an array of Variables.\n *\n * @param tensors An `Array` of `Variable`s to get the values of.\n * @return The values of the inputs, as an `Array` of`tf.Tensor`s.\n */\nexport function batchGetValue(xs: LayerVariable[]): Tensor[] {\n  return xs.map(x => x.read());\n}\n\n/**\n * Update the value of multiple Variables at once.\n *\n * @param variablesAndValues An `Array`, each element is of type\n *   [Variable, Tensor]. The first item is the\n *   `Variable` of which the value is to be updated. The second item\n *   carries the new value.\n */\nexport function batchSetValue(\n    variablesAndValues: Array<[LayerVariable, Tensor]>): void {\n  variablesAndValues.forEach(variableAndValue => {\n    const variable: LayerVariable = variableAndValue[0];\n    variable.write(variableAndValue[1]);\n  });\n}\n\n/**\n * Returns the gradients of `variables` w.r.t. the return value of `lossFn`.\n * @param lossFn A function which returns a Scalar to be used as the function\n *   value (i.e., numerator) for differentiation.\n * @param variables List of variables to be used as the independent variables\n *   (i.e., denominator) for differentiation.\n * @returns An Array of gradients tensors.\n */\nexport function gradients(\n    lossFn: () => tfc.Scalar, variables: LayerVariable[]): Tensor[] {\n  // TODO(cais): The return type signature can be simplified if deeplearn makes\n  //   the corresponding type public.\n  const variableList =\n      variables.map(variable => variable.read() as tfc.Variable);\n  const valudAndGrads = variableGrads(lossFn, variableList);\n  return variables.map(variable => valudAndGrads.grads[variable.name]);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: keras/engine/topology.py */\n\nimport {DataType, Scalar, serialization, Tensor, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {getNextUniqueTensorId, getUid} from '../backend/state';\nimport {getScopedTensorName, getUniqueTensorName, nameScope} from '../common';\nimport {Constraint} from '../constraints';\nimport {AttributeError, NotImplementedError, RuntimeError, ValueError} from '../errors';\nimport {getInitializer, Initializer} from '../initializers';\nimport {Shape} from '../keras_format/common';\nimport {Regularizer} from '../regularizers';\nimport {Kwargs, RegularizerFn} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport * as types_utils from '../utils/types_utils';\nimport * as variable_utils from '../utils/variable_utils';\nimport {batchGetValue, batchSetValue, LayerVariable} from '../variables';\n\n// TODO(michaelterry): This is a stub until it's defined.\nexport type Op = (x: LayerVariable) => LayerVariable;\n\n/**\n * Constructor arguments for InputSpec.\n */\nexport interface InputSpecArgs {\n  /** Expected datatype of the input. */\n  dtype?: DataType;\n  /** Expected shape of the input (may include null for unchecked axes). */\n  shape?: Shape;\n  /** Expected rank of the input. */\n  ndim?: number;\n  /** Maximum rank of the input. */\n  maxNDim?: number;\n  /** Minimum rank of the input. */\n  minNDim?: number;\n  /** Dictionary mapping integer axes to a specific dimension value. */\n  axes?: {[axis: number]: number};\n}\n\n/**\n * Specifies the ndim, dtype and shape of every input to a layer.\n *\n * Every layer should expose (if appropriate) an `inputSpec` attribute:\n * a list of instances of InputSpec (one per input tensor).\n *\n * A null entry in a shape is compatible with any dimension,\n * a null shape is compatible with any shape.\n */\nexport class InputSpec {\n  /** Expected datatype of the input. */\n  dtype?: DataType;\n  /** Expected shape of the input (may include null for unchecked axes). */\n  shape?: Shape;\n  /** Expected rank of the input. */\n  ndim?: number;\n  /** Maximum rank of the input. */\n  maxNDim?: number;\n  /** Minimum rank of the input. */\n  minNDim?: number;\n  /** Dictionary mapping integer axes to a specific dimension value. */\n  axes?: {[axis: number]: number};\n\n  constructor(args: InputSpecArgs) {\n    this.dtype = args.dtype;\n    this.shape = args.shape;\n    /*\n      TODO(michaelterry): Could throw error if ndim and shape are both defined\n        (then backport).\n    */\n    if (args.shape != null) {\n      this.ndim = args.shape.length;\n    } else {\n      this.ndim = args.ndim;\n    }\n    this.maxNDim = args.maxNDim;\n    this.minNDim = args.minNDim;\n    this.axes = args.axes || {};\n  }\n}\n\n/**\n * `tf.SymbolicTensor` is a placeholder for a Tensor without any concrete value.\n *\n * They are most often encountered when building a graph of `Layer`s for a\n * a `tf.LayersModel` and the input data's shape, but not values are known.\n */\n/** @doc {heading: 'Models', 'subheading': 'Classes'} */\nexport class SymbolicTensor {\n  /* A unique ID for the tensor to be able to differentiate tensors. */\n  readonly id: number;\n  // The fully scoped name of this Variable, including a unique suffix if needed\n  readonly name: string;\n  // The originally requested fully scoped name of this Variable, not including\n  // any unique suffix.  This may be needed when restoring weights because this\n  // original name is used as a key.\n  readonly originalName?: string;\n  /**\n   * Rank/dimensionality of the tensor.\n   */\n  readonly rank: number;\n  /**\n   * Replacement for _keras_history.\n   */\n  nodeIndex: number;\n  /**\n   * Replacement for _keras_history.\n   */\n  tensorIndex: number;\n\n  /**\n   *\n   * @param dtype\n   * @param shape\n   * @param sourceLayer The Layer that produced this symbolic tensor.\n   * @param inputs The inputs passed to sourceLayer's __call__() method.\n   * @param nodeIndex\n   * @param tensorIndex\n   * @param callArgs The keyword arguments passed to the __call__() method.\n   * @param name\n   * @param outputTensorIndex The index of this tensor in the list of outputs\n   *   returned by apply().\n   */\n  constructor(\n      readonly dtype: DataType, readonly shape: Shape,\n      public sourceLayer: Layer, readonly inputs: SymbolicTensor[],\n      readonly callArgs: Kwargs, name?: string,\n      readonly outputTensorIndex?: number) {\n    this.id = getNextUniqueTensorId();\n    if (name != null) {\n      this.originalName = getScopedTensorName(name);\n      this.name = getUniqueTensorName(this.originalName);\n    }\n    this.rank = shape.length;\n  }\n}\n\n/**\n * Constructor arguments for Node.\n */\nexport interface NodeArgs {\n  /**\n   * The layer that takes `inputTensors` and turns them into `outputTensors`.\n   * (the node gets created when the `call` method of the layer is called).\n   */\n  outboundLayer: Layer;\n  /**\n   * A list of layers, the same length as `inputTensors`, the layers from where\n   * `inputTensors` originate.\n   */\n  inboundLayers: Layer[];\n  /**\n   * A list of integers, the same length as `inboundLayers`. `nodeIndices[i]` is\n   * the origin node of `inputTensors[i]` (necessary since each inbound layer\n   * might have several nodes, e.g. if the layer is being shared with a\n   * different data stream).\n   */\n  nodeIndices: number[];\n  /**\n   * A list of integers, the same length as `inboundLayers`. `tensorIndices[i]`\n   * is the index of `inputTensors[i]` within the output of the inbound layer\n   * (necessary since each inbound layer might have multiple tensor outputs,\n   * with each one being independently manipulable).\n   */\n  tensorIndices: number[];\n  /** List of input tensors. */\n  inputTensors: SymbolicTensor[];\n  /** List of output tensors. */\n  outputTensors: SymbolicTensor[];\n  /** List of input masks (a mask can be a tensor, or null). */\n  inputMasks: Tensor[];\n  /** List of output masks (a mask can be a tensor, or null). */\n  outputMasks: Tensor[];\n  /** List of input shape tuples. */\n  inputShapes: Shape|Shape[];\n  /** List of output shape tuples. */\n  outputShapes: Shape|Shape[];\n}\n\n/**\n * The type of the return value of Layer.dispose() and Container.dispose().\n */\nexport interface DisposeResult {\n  /**\n   * Reference count after the dispose call.\n   */\n  refCountAfterDispose: number;\n\n  /**\n   * Number of variables dispose in this dispose call.\n   */\n  numDisposedVariables: number;\n}\n\nlet _nextNodeID = 0;\n\n/**\n * A `Node` describes the connectivity between two layers.\n *\n * Each time a layer is connected to some new input,\n * a node is added to `layer.inboundNodes`.\n *\n * Each time the output of a layer is used by another layer,\n * a node is added to `layer.outboundNodes`.\n *\n * `nodeIndices` and `tensorIndices` are basically fine-grained coordinates\n * describing the origin of the `inputTensors`, verifying the following:\n *\n * `inputTensors[i] ==\n * inboundLayers[i].inboundNodes[nodeIndices[i]].outputTensors[\n *   tensorIndices[i]]`\n *\n * A node from layer A to layer B is added to:\n *     A.outboundNodes\n *     B.inboundNodes\n */\nexport class Node {\n  /**\n   * The layer that takes `inputTensors` and turns them into `outputTensors`\n   * (the node gets created when the `call` method of the layer is called).\n   */\n  outboundLayer: Layer;\n  /**\n   * A list of layers, the same length as `inputTensors`, the layers from where\n   * `inputTensors` originate.\n   */\n  inboundLayers: Layer[];\n  /**\n   * A list of integers, the same length as `inboundLayers`. `nodeIndices[i]` is\n   * the origin node of `inputTensors[i]` (necessary since each inbound layer\n   * might have several nodes, e.g. if the layer is being shared with a\n   * different data stream).\n   */\n  nodeIndices: number[];\n  /**\n   * A list of integers, the same length as `inboundLayers`. `tensorIndices[i]`\n   * is the index of `inputTensors[i]` within the output of the inbound layer\n   * (necessary since each inbound layer might have multiple tensor outputs,\n   * with each one being independently manipulable).\n   */\n  tensorIndices: number[];\n  /** List of input tensors. */\n  inputTensors: SymbolicTensor[];\n  /** List of output tensors. */\n  outputTensors: SymbolicTensor[];\n  /** List of input masks (a mask can be a tensor, or null). */\n  inputMasks: Tensor[];\n  /** List of output masks (a mask can be a tensor, or null). */\n  outputMasks: Tensor[];\n  /** List of input shape tuples. */\n  inputShapes: Shape|Shape[];\n  /** List of output shape tuples. */\n  outputShapes: Shape|Shape[];\n\n  readonly id: number;\n\n  constructor(\n      args: NodeArgs,\n      // TODO(michaelterry): Define actual type for this.\n      public callArgs?: Kwargs) {\n    this.id = _nextNodeID++;\n    /*\n      Layer instance (NOT a list).\n      this is the layer that takes a list of input tensors\n      and turns them into a list of output tensors.\n      the current node will be added to\n      the inboundNodes of outboundLayer.\n    */\n    this.outboundLayer = args.outboundLayer;\n\n    /*\n        The following 3 properties describe where\n        the input tensors come from: which layers,\n        and for each layer, which node and which\n        tensor output of each node.\n    */\n\n    // List of layer instances.\n    this.inboundLayers = args.inboundLayers;\n    // List of integers, 1:1 mapping with inboundLayers.\n    this.nodeIndices = args.nodeIndices;\n    // List of integers, 1:1 mapping with inboundLayers.\n    this.tensorIndices = args.tensorIndices;\n\n    /*\n        Following 2 properties:\n        tensor inputs and outputs of outboundLayer.\n    */\n\n    // List of tensors. 1:1 mapping with inboundLayers.\n    this.inputTensors = args.inputTensors;\n    // List of tensors, created by outboundLayer.call().\n    this.outputTensors = args.outputTensors;\n\n    /*\n        Following 2 properties: input and output masks.\n        List of tensors, 1:1 mapping with inputTensor.\n    */\n    this.inputMasks = args.inputMasks;\n    // List of tensors, created by outboundLayer.computeMask().\n    this.outputMasks = args.outputMasks;\n\n    // Following 2 properties: input and output shapes.\n\n    // List of shape tuples, shapes of inputTensors.\n    this.inputShapes = args.inputShapes;\n    // List of shape tuples, shapes of outputTensors.\n    this.outputShapes = args.outputShapes;\n\n    // Add nodes to all layers involved.\n    for (const layer of args.inboundLayers) {\n      if (layer != null) {\n        layer.outboundNodes.push(this);\n      }\n    }\n    args.outboundLayer.inboundNodes.push(this);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const inboundNames: string[] = [];\n    for (const layer of this.inboundLayers) {\n      if (layer != null) {\n        inboundNames.push(layer.name);\n      } else {\n        inboundNames.push(null);\n      }\n    }\n    return {\n      outboundLayer: this.outboundLayer ? this.outboundLayer.name : null,\n      inboundLayers: inboundNames,\n      nodeIndices: this.nodeIndices,\n      tensorIndices: this.tensorIndices\n    };\n  }\n}\n\n/** Constructor arguments for Layer. */\nexport declare interface LayerArgs {\n  /**\n   * If defined, will be used to create an input layer to insert before this\n   * layer. If both `inputShape` and `batchInputShape` are defined,\n   * `batchInputShape` will be used. This argument is only applicable to input\n   * layers (the first layer of a model).\n   */\n  inputShape?: Shape;\n  /**\n   * If defined, will be used to create an input layer to insert before this\n   * layer. If both `inputShape` and `batchInputShape` are defined,\n   * `batchInputShape` will be used. This argument is only applicable to input\n   * layers (the first layer of a model).\n   */\n  batchInputShape?: Shape;\n  /**\n   * If `inputShape` is specified and `batchInputShape` is *not* specified,\n   * `batchSize` is used to construct the `batchInputShape`: `[batchSize,\n   * ...inputShape]`\n   */\n  batchSize?: number;\n  /**\n   * The data-type for this layer. Defaults to 'float32'.\n   * This argument is only applicable to input layers (the first layer of a\n   * model).\n   */\n  dtype?: DataType;\n  /** Name for this layer. */\n  name?: string;\n  /**\n   * Whether the weights of this layer are updatable by `fit`.\n   * Defaults to true.\n   */\n  trainable?: boolean;\n  /**\n   * Initial weight values of the layer.\n   */\n  weights?: Tensor[];\n  /** Legacy support. Do not use for new code. */\n  inputDType?: DataType;\n}\n\n// If necessary, add `output` arguments to the CallHook function.\n// This is currently used for testing only, but may be used for debugger-related\n// purposes in the future.\nexport type CallHook = (inputs: Tensor|Tensor[], kwargs: Kwargs) => void;\n\nlet _nextLayerID = 0;\n\n/**\n * A layer is a grouping of operations and weights that can be composed to\n * create a `tf.LayersModel`.\n *\n * Layers are constructed by using the functions under the\n * [tf.layers](#Layers-Basic) namespace.\n */\n/** @doc {heading: 'Layers', subheading: 'Classes', namespace: 'layers'} */\nexport abstract class Layer extends serialization.Serializable {\n  /** Name for this layer. Must be unique within a model. */\n  name: string;\n  /**\n   * List of InputSpec class instances.\n   *\n   * Each entry describes one required input:\n   * - ndim\n   * - dtype\n   * A layer with `n` input tensors must have an `inputSpec` of length `n`.\n   */\n  inputSpec: InputSpec[];\n  supportsMasking: boolean;\n  /** Whether the layer weights will be updated during training. */\n  protected trainable_: boolean;\n  batchInputShape: Shape;\n  dtype: DataType;\n  initialWeights: Tensor[];\n\n  inboundNodes: Node[];\n  outboundNodes: Node[];\n\n  activityRegularizer: Regularizer;\n\n  protected _trainableWeights: LayerVariable[];\n  private _nonTrainableWeights: LayerVariable[];\n  private _losses: RegularizerFn[];\n  // TODO(cais): _updates is currently unused.\n  private _updates: Tensor[];\n  private _built: boolean;\n  private _callHook: CallHook = null;\n\n  private _addedWeightNames: string[] = [];\n\n  readonly id: number;\n\n  // Porting Notes: PyKeras does not have this property in this base Layer\n  //   class. Instead lets Layer subclass set it dynamically and checks the\n  //   value with `hasattr`. In tfjs-layers, we let this be a member of this\n  //   base class.\n  protected _stateful = false;\n\n  protected _refCount: number|null;\n\n  // A flag for whether fast (i.e., all-zero) weight initialization is to\n  // be used during `build()` call. This speeds up weight initialization\n  // by saving unnecessary calls to expensive initializers in cases where\n  // the initialized values will be overwritten by loaded weight values\n  // during model loading.\n  private fastWeightInitDuringBuild: boolean;\n\n  constructor(args: LayerArgs) {\n    super();\n    this.id = _nextLayerID++;\n\n    this.activityRegularizer = null;\n\n    this.inputSpec = null;\n    this.supportsMasking = false;\n\n    // These properties will be set upon call of this.build()\n    this._trainableWeights = [];\n    this._nonTrainableWeights = [];\n    this._losses = [];\n    this._updates = [];\n    this._built = false;\n\n    /*\n      These lists will be filled via successive calls\n      to this.addInboundNode().\n     */\n    this.inboundNodes = [];\n    this.outboundNodes = [];\n\n    let name = args.name;\n    if (!name) {\n      const prefix = this.getClassName();\n      name = generic_utils.toSnakeCase(prefix) + '_' + getUid(prefix);\n    }\n    this.name = name;\n\n    this.trainable_ = args.trainable == null ? true : args.trainable;\n\n    if (args.inputShape != null || args.batchInputShape != null) {\n      /*\n        In this case we will later create an input layer\n        to insert before the current layer\n       */\n      let batchInputShape: Shape;\n      if (args.batchInputShape != null) {\n        batchInputShape = args.batchInputShape;\n      } else if (args.inputShape != null) {\n        let batchSize: number = null;\n        if (args.batchSize != null) {\n          batchSize = args.batchSize;\n        }\n        batchInputShape = [batchSize].concat(args.inputShape);\n      }\n      this.batchInputShape = batchInputShape;\n\n      // Set dtype.\n      let dtype = args.dtype;\n      if (dtype == null) {\n        dtype = args.inputDType;\n      }\n      if (dtype == null) {\n        dtype = 'float32';\n      }\n      this.dtype = dtype;\n    }\n\n    if (args.weights != null) {\n      this.initialWeights = args.weights;\n    } else {\n      this.initialWeights = null;\n    }\n\n    // The value of `_refCount` is initialized to null. When the layer is used\n    // in a symbolic way for the first time, it will be set to 1.\n    this._refCount = null;\n\n    this.fastWeightInitDuringBuild = false;\n  }\n\n  /**\n   * Converts a layer and its index to a unique (immutable type) name.\n   * This function is used internally with `this.containerNodes`.\n   * @param layer The layer.\n   * @param nodeIndex The layer's position (e.g. via enumerate) in a list of\n   *   nodes.\n   *\n   * @returns The unique name.\n   */\n  protected static nodeKey(layer: Layer, nodeIndex: number) {\n    return layer.name + '_ib-' + nodeIndex.toString();\n  }\n\n  /**\n   * Returns this.inboundNode at index nodeIndex.\n   *\n   * Porting note: This is a replacement for _get_node_attribute_at_index()\n   * @param nodeIndex\n   * @param attrName The name of the attribute related to request for this node.\n   */\n  private getNodeAtIndex(nodeIndex: number, attrName: string): Node {\n    if (this.inboundNodes.length === 0) {\n      throw new RuntimeError(\n          'The layer has never been called ' +\n          `and thus has no defined ${attrName}.`);\n    }\n    if (this.inboundNodes.length <= nodeIndex) {\n      throw new ValueError(\n          `Asked to get ${attrName} at node ${nodeIndex}, ` +\n          `but the layer has only ${this.inboundNodes.length} inbound nodes.`);\n    }\n    return this.inboundNodes[nodeIndex];\n  }\n\n  /**\n   * Retrieves the input tensor(s) of a layer at a given node.\n   *\n   * @param nodeIndex Integer, index of the node from which to retrieve the\n   *   attribute. E.g. `nodeIndex=0` will correspond to the first time the layer\n   *   was called.\n   *\n   * @return A tensor (or list of tensors if the layer has multiple inputs).\n   */\n  getInputAt(nodeIndex: number): SymbolicTensor|SymbolicTensor[] {\n    return generic_utils.singletonOrArray(\n        this.getNodeAtIndex(nodeIndex, 'input').inputTensors);\n  }\n\n  /**\n   * Retrieves the output tensor(s) of a layer at a given node.\n   *\n   * @param nodeIndex Integer, index of the node from which to retrieve the\n   *   attribute. E.g. `nodeIndex=0` will correspond to the first time the layer\n   *   was called.\n   *\n   * @return A tensor (or list of tensors if the layer has multiple outputs).\n   */\n  getOutputAt(nodeIndex: number): SymbolicTensor|SymbolicTensor[] {\n    return generic_utils.singletonOrArray(\n        this.getNodeAtIndex(nodeIndex, 'output').outputTensors);\n  }\n\n  // Properties\n\n  /**\n   * Retrieves the input tensor(s) of a layer.\n   *\n   * Only applicable if the layer has exactly one inbound node,\n   * i.e. if it is connected to one incoming layer.\n   *\n   * @return Input tensor or list of input tensors.\n   *\n   * @exception AttributeError if the layer is connected to more than one\n   *   incoming layers.\n   */\n  get input(): SymbolicTensor|SymbolicTensor[] {\n    if (this.inboundNodes.length > 1) {\n      throw new AttributeError(\n          `Layer ${this.name}` +\n          ' has multiple inbound nodes, ' +\n          'hence the notion of \"layer input\" ' +\n          'is ill-defined. ' +\n          'Use `getInputAt(nodeIndex)` instead.');\n    } else if (this.inboundNodes.length === 0) {\n      throw new AttributeError(\n          `Layer ${this.name}` +\n          ' is not connected, no input to return.');\n    }\n    return generic_utils.singletonOrArray(\n        this.getNodeAtIndex(0, 'input').inputTensors);\n  }\n\n  /**\n   * Retrieves the output tensor(s) of a layer.\n   *\n   * Only applicable if the layer has exactly one inbound node,\n   * i.e. if it is connected to one incoming layer.\n   *\n   * @return Output tensor or list of output tensors.\n   *\n   * @exception AttributeError if the layer is connected to more than one\n   *   incoming layers.\n   */\n  get output(): SymbolicTensor|SymbolicTensor[] {\n    if (this.inboundNodes.length === 0) {\n      throw new AttributeError(\n          `Layer ${this.name}` +\n          ' has no inbound nodes.');\n    }\n    if (this.inboundNodes.length > 1) {\n      throw new AttributeError(\n          `Layer ${this.name}` +\n          ' has multiple inbound nodes, ' +\n          'hence the notion of \"layer output\" ' +\n          'is ill-defined. ' +\n          'Use `getOutputAt(nodeIndex)` instead.');\n    }\n    return generic_utils.singletonOrArray(\n        this.getNodeAtIndex(0, 'output').outputTensors);\n  }\n\n  get losses(): RegularizerFn[] {\n    return this._losses;\n  }\n\n  /**\n   * Retrieves the Layer's current loss values.\n   *\n   * Used for regularizers during training.\n   */\n  calculateLosses(): Scalar[] {\n    // Porting Node: This is an augmentation to Layer.loss in PyKeras.\n    //   In PyKeras, Layer.loss returns symbolic tensors. Here a concrete\n    //   Tensor (specifically Scalar) values are returned. This is due to the\n    //   imperative backend.\n    return this.losses.map(lossFn => lossFn());\n  }\n\n  get updates(): Tensor[] {\n    return this._updates;\n  }\n\n  get built(): boolean {\n    return this._built;\n  }\n\n  set built(built: boolean) {\n    this._built = built;\n  }\n\n  get trainable(): boolean {\n    return this.trainable_;\n  }\n\n  set trainable(trainable: boolean) {\n    this._trainableWeights.forEach(w => w.trainable = trainable);\n    this.trainable_ = trainable;\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    if (this.trainable_) {\n      return this._trainableWeights.filter(w => w.trainable);\n    } else {\n      return [];\n    }\n  }\n\n  set trainableWeights(weights: LayerVariable[]) {\n    this._trainableWeights = weights;\n  }\n\n  get nonTrainableWeights(): LayerVariable[] {\n    if (this.trainable) {\n      return this._trainableWeights.filter(w => !w.trainable)\n          .concat(this._nonTrainableWeights);\n    } else {\n      return this._trainableWeights.concat(this._nonTrainableWeights);\n    }\n  }\n\n  set nonTrainableWeights(weights: LayerVariable[]) {\n    this._nonTrainableWeights = weights;\n  }\n\n  /**\n   * The concatenation of the lists trainableWeights and nonTrainableWeights\n   * (in this order).\n   */\n  get weights(): LayerVariable[] {\n    return this.trainableWeights.concat(this.nonTrainableWeights);\n  }\n\n  get stateful(): boolean {\n    return this._stateful;\n  }\n\n  /**\n   * Reset the states of the layer.\n   *\n   * This method of the base Layer class is essentially a no-op.\n   * Subclasses that are stateful (e.g., stateful RNNs) should override this\n   * method.\n   */\n  resetStates(): void {\n    if (!this.stateful) {\n      throw new Error(\n          'Cannot call the resetStates() method of a non-stateful Layer ' +\n          'object.');\n    }\n  }\n\n  /**\n   * Checks compatibility between the layer and provided inputs.\n   *\n   * This checks that the tensor(s) `input`\n   * verify the input assumptions of the layer\n   * (if any). If not, exceptions are raised.\n   *\n   * @param inputs Input tensor or list of input tensors.\n   *\n   * @exception ValueError in case of mismatch between\n   *   the provided inputs and the expectations of the layer.\n   */\n  protected assertInputCompatibility(inputs: Tensor|Tensor[]|SymbolicTensor|\n                                     SymbolicTensor[]): void {\n    inputs = generic_utils.toList(inputs);\n    if (this.inputSpec == null || this.inputSpec.length === 0) {\n      return;\n    }\n    const inputSpec = generic_utils.toList(this.inputSpec);\n    if (inputs.length !== inputSpec.length) {\n      throw new ValueError(\n          `Layer ${this.name} expects ${inputSpec.length} inputs, ` +\n          `but it received ${inputs.length} input tensors. ` +\n          `Input received: ${inputs}`);\n    }\n    for (let inputIndex = 0; inputIndex < inputs.length; inputIndex++) {\n      const x = inputs[inputIndex];\n      const spec: InputSpec = inputSpec[inputIndex];\n      if (spec == null) {\n        continue;\n      }\n\n      // Check ndim.\n      const ndim = x.rank;\n      if (spec.ndim != null) {\n        if (ndim !== spec.ndim) {\n          throw new ValueError(\n              `Input ${inputIndex} is incompatible with layer ${this.name}: ` +\n              `expected ndim=${spec.ndim}, found ndim=${ndim}`);\n        }\n      }\n      if (spec.maxNDim != null) {\n        if (ndim > spec.maxNDim) {\n          throw new ValueError(\n              `Input ${inputIndex} is incompatible with layer ${this.name}` +\n              `: expected max_ndim=${spec.maxNDim}, found ndim=${ndim}`);\n        }\n      }\n      if (spec.minNDim != null) {\n        if (ndim < spec.minNDim) {\n          throw new ValueError(\n              `Input ${inputIndex} is incompatible with layer ${this.name}` +\n              `: expected min_ndim=${spec.minNDim}, found ndim=${ndim}.`);\n        }\n      }\n\n      // Check dtype.\n      if (spec.dtype != null) {\n        if (x.dtype !== spec.dtype) {\n          throw new ValueError(\n              `Input ${inputIndex} is incompatible with layer ${this.name} ` +\n              `: expected dtype=${spec.dtype}, found dtype=${x.dtype}.`);\n        }\n      }\n\n      // Check specific shape axes.\n      if (spec.axes) {\n        const xShape = x.shape;\n        for (const key in spec.axes) {\n          const axis = Number(key);\n          const value = spec.axes[key];\n          // Perform Python-style slicing in case axis < 0;\n          // TODO(cais): Use https://github.com/alvivi/typescript-underscore to\n          // ensure type safety through Underscore calls.\n          const xShapeAtAxis =\n              axis >= 0 ? xShape[axis] : xShape[xShape.length + axis];\n          if (value != null && [value, null].indexOf(xShapeAtAxis) === -1) {\n            throw new ValueError(\n                `Input ${inputIndex} is incompatible with layer ` +\n                `${this.name}: expected axis ${axis} of input shape to ` +\n                `have value ${value} but got shape ${xShape}.`);\n          }\n        }\n      }\n\n      // Check shape.\n      if (spec.shape != null) {\n        for (let i = 0; i < spec.shape.length; ++i) {\n          const specDim = spec.shape[i];\n          const dim = x.shape[i];\n          if (specDim != null && dim != null) {\n            if (specDim !== dim) {\n              throw new ValueError(\n                  `Input ${inputIndex} is incompatible with layer ` +\n                  `${this.name}: expected shape=${spec.shape}, ` +\n                  `found shape=${x.shape}.`);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * This is where the layer's logic lives.\n   *\n   * @param inputs Input tensor, or list/tuple of input tensors.\n   * @param kwargs Additional keyword arguments.\n   *\n   * @return A tensor or list/tuple of tensors.\n   */\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return inputs;\n  }\n\n  protected invokeCallHook(inputs: Tensor|Tensor[], kwargs: Kwargs) {\n    if (this._callHook != null) {\n      this._callHook(inputs, kwargs);\n    }\n  }\n\n  /**\n   * Set call hook.\n   * This is currently used for testing only.\n   * @param callHook\n   */\n  setCallHook(callHook: CallHook) {\n    this._callHook = callHook;\n  }\n\n  /**\n   * Clear call hook.\n   * This is currently used for testing only.\n   */\n  clearCallHook() {\n    this._callHook = null;\n  }\n\n  /**\n   * Builds or executes a `Layer's logic.\n   *\n   * When called with `tf.Tensor`(s), execute the `Layer`s computation and\n   * return Tensor(s). For example:\n   *\n   * ```js\n   * const denseLayer = tf.layers.dense({\n   *   units: 1,\n   *   kernelInitializer: 'zeros',\n   *   useBias: false\n   * });\n   *\n   * // Invoke the layer's apply() method with a `tf.Tensor` (with concrete\n   * // numeric values).\n   * const input = tf.ones([2, 2]);\n   * const output = denseLayer.apply(input);\n   *\n   * // The output's value is expected to be [[0], [0]], due to the fact that\n   * // the dense layer has a kernel initialized to all-zeros and does not have\n   * // a bias.\n   * output.print();\n   * ```\n   *\n   * When called with `tf.SymbolicTensor`(s), this will prepare the layer for\n   * future execution.  This entails internal book-keeping on shapes of\n   * expected Tensors, wiring layers together, and initializing weights.\n   *\n   * Calling `apply` with `tf.SymbolicTensor`s are typically used during the\n   * building of non-`tf.Sequential` models. For example:\n   *\n   * ```js\n   * const flattenLayer = tf.layers.flatten();\n   * const denseLayer = tf.layers.dense({units: 1});\n   *\n   * // Use tf.layers.input() to obtain a SymbolicTensor as input to apply().\n   * const input = tf.input({shape: [2, 2]});\n   * const output1 = flattenLayer.apply(input);\n   *\n   * // output1.shape is [null, 4]. The first dimension is the undetermined\n   * // batch size. The second dimension comes from flattening the [2, 2]\n   * // shape.\n   * console.log(JSON.stringify(output1.shape));\n   *\n   * // The output SymbolicTensor of the flatten layer can be used to call\n   * // the apply() of the dense layer:\n   * const output2 = denseLayer.apply(output1);\n   *\n   * // output2.shape is [null, 1]. The first dimension is the undetermined\n   * // batch size. The second dimension matches the number of units of the\n   * // dense layer.\n   * console.log(JSON.stringify(output2.shape));\n   *\n   * // The input and output and be used to construct a model that consists\n   * // of the flatten and dense layers.\n   * const model = tf.model({inputs: input, outputs: output2});\n   * ```\n   *\n   * @param inputs a `tf.Tensor` or `tf.SymbolicTensor` or an Array of them.\n   * @param kwargs Additional keyword arguments to be passed to `call()`.\n   *\n   * @return Output of the layer's `call` method.\n   *\n   * @exception ValueError error in case the layer is missing shape information\n   *   for its `build` call.\n   */\n  // Porting Note: This is a replacement for __call__() in Python.\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  apply(\n      inputs: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n      kwargs?: Kwargs): Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[] {\n    kwargs = kwargs || {};\n\n    this.assertNotDisposed();\n\n    // Ensure inputs are all the same type.\n    const inputsList = generic_utils.toList(inputs);\n\n    let allAreSymbolic = true;\n    for (const input of inputsList) {\n      if (!(input instanceof SymbolicTensor)) {\n        allAreSymbolic = false;\n        break;\n      }\n    }\n    let noneAreSymbolic = true;\n    for (const input of inputsList) {\n      if (input instanceof SymbolicTensor) {\n        noneAreSymbolic = false;\n        break;\n      }\n    }\n\n    if (allAreSymbolic === noneAreSymbolic) {\n      throw new ValueError(\n          'Arguments to apply() must be all ' +\n          'SymbolicTensors or all Tensors');\n    }\n\n    // TODO(michaelterry): nameScope() may not be necessary.\n    return nameScope(this.name, () => {\n      // Handle laying building (weight creating, input spec locking).\n      if (!this.built) {\n        /*\n          Throw exceptions in case the input is not compatible\n          with the inputSpec specified in the layer constructor.\n         */\n        this.assertInputCompatibility(inputs);\n\n        // Collect input shapes to build layer.\n        const inputShapes: Shape[] = [];\n        for (const xElem of generic_utils.toList(inputs)) {\n          inputShapes.push(xElem.shape);\n        }\n        this.build(generic_utils.singletonOrArray(inputShapes));\n        this.built = true;\n\n        // Load weights that were specified at layer instantiation.\n        if (this.initialWeights) {\n          this.setWeights(this.initialWeights);\n        }\n\n        if (this._refCount === null && noneAreSymbolic) {\n          // The first use of this layer is a non-symbolic call, set ref count\n          // to 1 so the Layer can be properly disposed if its dispose() method\n          // is called.\n          this._refCount = 1;\n        }\n      }\n\n      /*\n        Throw exceptions in case the input is not compatible\n        with the inputSpec set at build time.\n      */\n      this.assertInputCompatibility(inputs);\n\n      // Handle mask propagation.\n      // TODO(michaelterry): Mask propagation not currently implemented.\n\n      // Actually call the layer, collecting output(s), mask(s), and shape(s).\n      if (noneAreSymbolic) {\n        let output = this.call(inputs as Tensor | Tensor[], kwargs);\n        // TODO(michaelterry): Compute the outputMask\n\n        // If the layer returns tensors from its inputs, unmodified,\n        // we copy them to avoid loss of tensor metadata.\n        const outputList: Tensor[] = generic_utils.toList(output);\n        const outputListCopy: Tensor[] = [];\n        // TODO(michaelterry): This copying may not be necessary given our eager\n        // backend.\n        for (let x of outputList) {\n          if (inputsList.indexOf(x) !== -1) {\n            x = x.clone();\n          }\n          outputListCopy.push(x);\n        }\n        output = generic_utils.singletonOrArray(outputListCopy);\n\n        if (this.activityRegularizer != null) {\n          throw new NotImplementedError(\n              'Layer invocation in the presence of activity ' +\n              'regularizer(s) is not supported yet.');\n        }\n\n        // TODO(michaelterry): Call addInboundNode()?\n        return output;\n      } else {\n        const inputShape = collectInputShape(inputs);\n        const outputShape = this.computeOutputShape(inputShape);\n        let output: SymbolicTensor|SymbolicTensor[];\n        const outputDType = guessOutputDType(inputs);\n        this.warnOnIncompatibleInputShape(\n            Array.isArray(inputs) ? inputShape[0] as Shape :\n                                    inputShape as Shape);\n\n        if (outputShape != null && outputShape.length > 0 &&\n            Array.isArray(outputShape[0])) {\n          // We have multiple output shapes. Create multiple output tensors.\n          output = (outputShape as Shape[])\n                       .map(\n                           (shape, index) => new SymbolicTensor(\n                               outputDType, shape, this,\n                               generic_utils.toList(inputs), kwargs, this.name,\n                               index));\n        } else {\n          output = new SymbolicTensor(\n              outputDType, outputShape as Shape, this,\n              generic_utils.toList(inputs), kwargs, this.name);\n        }\n\n        /*\n          Add an inbound node to the layer, so that it keeps track\n          of the call and of all new variables created during the call.\n          This also updates the layer history of the output tensor(s).\n          If the input tensor(s) had no previous history,\n          this does nothing.\n        */\n        this.addInboundNode(\n            inputs as SymbolicTensor | SymbolicTensor[], output, null, null,\n            inputShape, outputShape, kwargs);\n        this._refCount++;\n\n        if (this.activityRegularizer != null) {\n          throw new NotImplementedError(\n              'Layer invocation in the presence of activity ' +\n              'regularizer(s) is not supported yet.');\n        }\n\n        return output;\n      }\n    });\n  }\n\n  /**\n   * Check compatibility between input shape and this layer's batchInputShape.\n   *\n   * Print warning if any incompatibility is found.\n   *\n   * @param inputShape Input shape to be checked.\n   */\n  protected warnOnIncompatibleInputShape(inputShape: Shape) {\n    if (this.batchInputShape == null) {\n      return;\n    } else if (inputShape.length !== this.batchInputShape.length) {\n      console.warn(\n          `The rank of the input tensor provided (shape: ` +\n          `${JSON.stringify(inputShape)}) does not match that of the ` +\n          `batchInputShape (${JSON.stringify(this.batchInputShape)}) ` +\n          `of the layer ${this.name}`);\n    } else {\n      let dimMismatch = false;\n      this.batchInputShape.forEach((dimension, i) => {\n        if (dimension != null && inputShape[i] != null &&\n            inputShape[i] !== dimension) {\n          dimMismatch = true;\n        }\n      });\n      if (dimMismatch) {\n        console.warn(\n            `The shape of the input tensor ` +\n            `(${JSON.stringify(inputShape)}) does not ` +\n            `match the expectation of layer ${this.name}: ` +\n            `${JSON.stringify(this.batchInputShape)}`);\n      }\n    }\n  }\n\n  /**\n   * Retrieves the output shape(s) of a layer.\n   *\n   * Only applicable if the layer has only one inbound node, or if all inbound\n   * nodes have the same output shape.\n   *\n   * @returns Output shape or shapes.\n   * @throws AttributeError: if the layer is connected to more than one incoming\n   *   nodes.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  get outputShape(): Shape|Shape[] {\n    if (this.inboundNodes == null || this.inboundNodes.length === 0) {\n      throw new AttributeError(\n          `The layer ${this.name} has never been called and thus has no ` +\n          `defined output shape.`);\n    }\n    const allOutputShapes: string[] = [];\n    for (const node of this.inboundNodes) {\n      const shapeString = JSON.stringify(node.outputShapes);\n      if (allOutputShapes.indexOf(shapeString) === -1) {\n        allOutputShapes.push(shapeString);\n      }\n    }\n    if (allOutputShapes.length === 1) {\n      const outputShapes = this.inboundNodes[0].outputShapes;\n      if (Array.isArray(outputShapes) && Array.isArray(outputShapes[0]) &&\n          outputShapes.length === 1) {\n        return (outputShapes as Shape[])[0];\n      } else {\n        return outputShapes;\n      }\n\n    } else {\n      throw new AttributeError(\n          `The layer ${this.name} has multiple inbound nodes with different ` +\n          `output shapes. Hence the notion of \"outut shape\" is ill-defined ` +\n          `for the layer.`);\n      // TODO(cais): Implement getOutputShapeAt().\n    }\n  }\n\n  /**\n   * Counts the total number of numbers (e.g., float32, int32) in the\n   * weights.\n   *\n   * @returns An integer count.\n   * @throws RuntimeError: If the layer is not built yet (in which case its\n   *   weights are not defined yet.)\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  countParams(): number {\n    if (!this.built) {\n      throw new RuntimeError(\n          `You tried to call countParams() on ${this.name}, ` +\n          `but the layer is not built yet. Build it first by calling ` +\n          `build(batchInputShape).`);\n    }\n    return variable_utils.countParamsInWeights(this.weights);\n  }\n\n  /**\n   * Creates the layer weights.\n   *\n   * Must be implemented on all layers that have weights.\n   *\n   * Called when apply() is called to construct the weights.\n   *\n   * @param inputShape A `Shape` or array of `Shape` (unused).\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  build(inputShape: Shape|Shape[]) {\n    this.built = true;\n  }\n\n  /**\n   * Returns the current values of the weights of the layer.\n   *\n   * @param trainableOnly Whether to get the values of only trainable weights.\n   * @returns Weight values as an `Array` of `tf.Tensor`s.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  getWeights(trainableOnly = false): Tensor[] {\n    return batchGetValue(trainableOnly ? this.trainableWeights : this.weights);\n  }\n\n  /**\n   * Sets the weights of the layer, from Tensors.\n   *\n   * @param weights a list of Tensors. The number of arrays and their shape\n   *   must match number of the dimensions of the weights of the layer (i.e.\n   *   it should match the output of `getWeights`).\n   *\n   * @exception ValueError If the provided weights list does not match the\n   *   layer's specifications.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  setWeights(weights: Tensor[]): void {\n    tidy(() => {\n      const params = this.weights;\n      if (params.length !== weights.length) {\n        // TODO(cais): Restore the following and use `providedWeights`, instead\n        // of `weights` in the error message, once the deeplearn.js bug is\n        // fixed: https://github.com/PAIR-code/deeplearnjs/issues/498 const\n        // providedWeights = JSON.stringify(weights).substr(0, 50);\n        throw new ValueError(\n            `You called setWeights(weights) on layer \"${this.name}\" ` +\n            `with a weight list of length ${weights.length}, ` +\n            `but the layer was expecting ${params.length} weights. ` +\n            `Provided weights: ${weights}...`);\n      }\n      if (params.length === 0) {\n        return;\n      }\n      const weightValueTuples: Array<[LayerVariable, Tensor]> = [];\n      const paramValues = batchGetValue(params);\n      for (let i = 0; i < paramValues.length; ++i) {\n        const pv = paramValues[i];\n        const p = params[i];\n        const w = weights[i];\n        if (!util.arraysEqual(pv.shape, w.shape)) {\n          throw new ValueError(\n              `Layer weight shape ${pv.shape} ` +\n              `not compatible with provided weight shape ${w.shape}`);\n        }\n        weightValueTuples.push([p, w]);\n      }\n      batchSetValue(weightValueTuples);\n    });\n  }\n\n  /**\n   * Adds a weight variable to the layer.\n   *\n   * @param name Name of the new weight variable.\n   * @param shape The shape of the weight.\n   * @param dtype The dtype of the weight.\n   * @param initializer An initializer instance.\n   * @param regularizer A regularizer instance.\n   * @param trainable Whether the weight should be trained via backprop or not\n   *   (assuming that the layer itself is also trainable).\n   * @param constraint An optional trainable.\n   * @return The created weight variable.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  protected addWeight(\n      name: string, shape: Shape, dtype?: DataType, initializer?: Initializer,\n      regularizer?: Regularizer, trainable?: boolean,\n      constraint?: Constraint): LayerVariable {\n    // Reject duplicate weight names.\n    if (this._addedWeightNames.indexOf(name) !== -1) {\n      throw new ValueError(\n          `Duplicate weight name ${name} for layer ${this.name}`);\n    }\n    this._addedWeightNames.push(name);\n\n    if (dtype == null) {\n      dtype = 'float32';\n    }\n\n    if (this.fastWeightInitDuringBuild) {\n      initializer = getInitializer('zeros');\n    }\n    const initValue = initializer.apply(shape, dtype);\n    const weight =\n        new LayerVariable(initValue, dtype, name, trainable, constraint);\n    initValue.dispose();\n    // Request backend not to dispose the weights of the model on scope() exit.\n    if (regularizer != null) {\n      this.addLoss(() => regularizer.apply(weight.read()));\n    }\n    if (trainable == null) {\n      trainable = true;\n    }\n    if (trainable) {\n      this._trainableWeights.push(weight);\n    } else {\n      this._nonTrainableWeights.push(weight);\n    }\n    return weight;\n  }\n\n  /**\n   * Set the fast-weight-initialization flag.\n   *\n   * In cases where the initialized weight values will be immediately\n   * overwritten by loaded weight values during model loading, setting\n   * the flag to `true` saves unnecessary calls to potentially expensive\n   * initializers and speeds up the loading process.\n   *\n   * @param value Target value of the flag.\n   */\n  setFastWeightInitDuringBuild(value: boolean) {\n    this.fastWeightInitDuringBuild = value;\n  }\n\n  /**\n   * Add losses to the layer.\n   *\n   * The loss may potentionally be conditional on some inputs tensors,\n   * for instance activity losses are conditional on the layer's inputs.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  addLoss(losses: RegularizerFn|RegularizerFn[]): void {\n    if (losses == null || Array.isArray(losses) && losses.length === 0) {\n      return;\n    }\n    // Update this.losses\n    losses = generic_utils.toList(losses);\n    if (this._losses !== undefined && this._losses !== null) {\n      this.losses.push(...losses);\n    }\n  }\n\n  /**\n   * Computes the output shape of the layer.\n   *\n   * Assumes that the layer will be built to match that input shape provided.\n   *\n   * @param inputShape A shape (tuple of integers) or a list of shape tuples\n   *   (one per output tensor of the layer). Shape tuples can include null for\n   *   free dimensions, instead of an integer.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  /**\n   * Computes an output mask tensor.\n   *\n   * @param inputs Tensor or list of tensors.\n   * @param mask Tensor or list of tensors.\n   *\n   * @return null or a tensor (or list of tensors, one per output tensor of the\n   * layer).\n   */\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor\n      |Tensor[] {\n    if (!this.supportsMasking) {\n      if (mask != null) {\n        if (Array.isArray(mask)) {\n          mask.forEach(maskElement => {\n            if (maskElement != null) {\n              throw new TypeError(\n                  `Layer ${this.name} does not support masking, ` +\n                  'but was passed an inputMask.');\n            }\n          });\n        } else {\n          throw new TypeError(\n              `Layer ${this.name} does not support masking, ` +\n              'but was passed an inputMask.');\n        }\n      }\n      // masking not explicitly supported: return null as mask\n      return null;\n    }\n    // if masking is explictly supported, by default\n    // carry over the input mask\n    return mask;\n  }\n\n  /**\n   * Internal method to create an inbound node for the layer.\n   *\n   * @param inputTensors List of input tensors.\n   * @param outputTensors List of output tensors.\n   * @param inputMasks List of input masks (a mask can be a tensor, or null).\n   * @param outputMasks List of output masks (a mask can be a tensor, or null).\n   * @param inputShapes List of input shape tuples.\n   * @param outputShapes List of output shape tuples.\n   * @param kwargs Dictionary of keyword arguments that were passed to the\n   *   `call` method of the layer at the call that created the node.\n   */\n  private addInboundNode(\n      inputTensors: SymbolicTensor|SymbolicTensor[],\n      outputTensors: SymbolicTensor|SymbolicTensor[],\n      inputMasks: Tensor|Tensor[], outputMasks: Tensor|Tensor[],\n      inputShapes: Shape|Shape[], outputShapes: Shape|Shape[],\n      kwargs: {} = null): void {\n    const inputTensorList: SymbolicTensor[] =\n        generic_utils.toList(inputTensors);\n    outputTensors = generic_utils.toList(outputTensors);\n    inputMasks = generic_utils.toList(inputMasks);\n    outputMasks = generic_utils.toList(outputMasks);\n    inputShapes = types_utils.normalizeShapeList(inputShapes);\n    outputShapes = types_utils.normalizeShapeList(outputShapes);\n\n    // Collect input tensor(s) coordinates.\n    const inboundLayers: Layer[] = [];\n    const nodeIndices: number[] = [];\n    const tensorIndices: number[] = [];\n    for (const x of inputTensorList) {\n      /*\n       * TODO(michaelterry): Keras adds this value to tensors; it's not\n       * clear whether we'll use this or not.\n       */\n      inboundLayers.push(x.sourceLayer);\n      nodeIndices.push(x.nodeIndex);\n      tensorIndices.push(x.tensorIndex);\n    }\n\n    // Create node, add it to inbound nodes.\n    // (This call has side effects.)\n    // tslint:disable-next-line:no-unused-expression\n    new Node(\n        {\n          outboundLayer: this,\n          inboundLayers,\n          nodeIndices,\n          tensorIndices,\n          inputTensors: inputTensorList,\n          outputTensors,\n          inputMasks,\n          outputMasks,\n          inputShapes,\n          outputShapes\n        },\n        kwargs);\n\n    // Update tensor history\n    for (let i = 0; i < outputTensors.length; i++) {\n      // TODO(michaelterry: _uses_learning_phase not tracked.\n      outputTensors[i].sourceLayer = this;\n      outputTensors[i].nodeIndex = this.inboundNodes.length - 1;\n      outputTensors[i].tensorIndex = i;\n    }\n  }\n\n  /**\n   * Returns the config of the layer.\n   *\n   * A layer config is a TS dictionary (serializable)\n   * containing the configuration of a layer.\n   * The same layer can be reinstantiated later\n   * (without its trained weights) from this configuration.\n   *\n   * The config of a layer does not include connectivity\n   * information, nor the layer class name.  These are handled\n   * by 'Container' (one layer of abstraction above).\n   *\n   * Porting Note: The TS dictionary follows TS naming standrds for\n   * keys, and uses tfjs-layers type-safe Enums.  Serialization methods\n   * should use a helper function to convert to the pythonic storage\n   * standard. (see serialization_utils.convertTsToPythonic)\n   *\n   * @returns TS dictionary of configuration.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  getConfig(): serialization.ConfigDict {\n    const config:\n        serialization.ConfigDict = {name: this.name, trainable: this.trainable};\n    if (this.batchInputShape != null) {\n      config['batchInputShape'] = this.batchInputShape;\n    }\n    if (this.dtype != null) {\n      config['dtype'] = this.dtype;\n    }\n    return config;\n  }\n\n  /**\n   * Dispose the weight variables that this Layer instance holds.\n   *\n   * @returns {number} Number of disposed variables.\n   */\n  protected disposeWeights(): number {\n    this.weights.forEach(weight => weight.dispose());\n    return this.weights.length;\n  }\n\n  protected assertNotDisposed() {\n    if (this._refCount === 0) {\n      throw new Error(`Layer '${this.name}' is already disposed.`);\n    }\n  }\n\n  /**\n   * Attempt to dispose layer's weights.\n   *\n   * This method decrease the reference count of the Layer object by 1.\n   *\n   * A Layer is reference-counted. Its reference count is incremented by 1\n   * the first item its `apply()` method is called and when it becomes a part\n   * of a new `Node` (through calling the `apply()`) method on a\n   * `tf.SymbolicTensor`).\n   *\n   * If the reference count of a Layer becomes 0, all the weights will be\n   * disposed and the underlying memory (e.g., the textures allocated in WebGL)\n   * will be freed.\n   *\n   * Note: If the reference count is greater than 0 after the decrement, the\n   * weights of the Layer will *not* be disposed.\n   *\n   * After a Layer is disposed, it cannot be used in calls such as `apply()`,\n   * `getWeights()` or `setWeights()` anymore.\n   *\n   * @returns A DisposeResult Object with the following fields:\n   *   - refCountAfterDispose: The reference count of the Container after this\n   *     `dispose()` call.\n   *   - numDisposedVariables: Number of `tf.Variable`s (i.e., weights) disposed\n   *     during this `dispose()` call.\n   * @throws {Error} If the layer is not built yet, or if the layer has already\n   *   been disposed.\n   */\n  /** @doc {heading: 'Models', 'subheading': 'Classes'} */\n  dispose(): DisposeResult {\n    if (!this.built) {\n      throw new Error(\n          `Cannot dispose Layer ${this.name} because it has not been ` +\n          `built yet.`);\n    }\n\n    if (this._refCount === null) {\n      throw new Error(\n          `Cannot dispose Layer ${this.name} because it has not been used ` +\n          `yet.`);\n    }\n\n    this.assertNotDisposed();\n\n    let numDisposedVariables = 0;\n    if (--this._refCount === 0) {\n      numDisposedVariables = this.disposeWeights();\n    }\n\n    return {refCountAfterDispose: this._refCount, numDisposedVariables};\n  }\n}\n\n/**\n * Collects the input shape(s) of a list of `tf.Tensor`s or\n * `tf.SymbolicTensor`s.\n *\n * TODO(michaelterry): Update PyKeras docs (backport).\n *\n * @param inputTensors List of input tensors (or single input tensor).\n *\n * @return List of shape tuples (or single tuple), one tuple per input.\n */\nfunction collectInputShape(inputTensors: SymbolicTensor|SymbolicTensor[]|Tensor|\n                           Tensor[]): Shape|Shape[] {\n  inputTensors =\n      generic_utils.toList(inputTensors) as SymbolicTensor[] | Tensor[];\n  const shapes: Shape[] = [];\n  for (const x of inputTensors) {\n    shapes.push(x.shape);\n  }\n  return generic_utils.singletonOrArray(shapes);\n}\n\n/**\n * Guesses output dtype based on inputs.\n *\n * At present, just returns 'float32' for any input.\n *\n * @param inputTensors List of input tensors (or single input tensor).\n *\n * @return The guessed DType. At present, always returns 'float32'.\n */\nfunction guessOutputDType(inputTensors: SymbolicTensor|SymbolicTensor[]|Tensor|\n                          Tensor[]): DataType {\n  return 'float32';\n}\n\n/**\n * Returns the list of input tensors necessary to compute `tensor`.\n *\n * Output will always be a list of tensors (potentially with 1 element).\n *\n * @param tensor The tensor to start from.\n * @param layer Origin layer of the tensor.\n * @param nodeIndex Origin node index of the tensor.\n *\n * @return Array of input tensors.\n */\nexport function getSourceInputs(\n    tensor: SymbolicTensor, layer?: Layer,\n    nodeIndex?: number): SymbolicTensor[] {\n  if (layer == null || (nodeIndex != null && nodeIndex > 0)) {\n    layer = tensor.sourceLayer;\n    nodeIndex = tensor.nodeIndex;\n  }\n  if (layer.inboundNodes.length === 0) {\n    return [tensor];\n  } else {\n    const node = layer.inboundNodes[nodeIndex];\n    if (node.inboundLayers.length === 0) {\n      return node.inputTensors;\n    } else {\n      const sourceTensors: SymbolicTensor[] = [];\n      for (let i = 0; i < node.inboundLayers.length; i++) {\n        const x = node.inputTensors[i];\n        const layer = node.inboundLayers[i];\n        const nodeIndex = node.nodeIndices[i];\n        const previousSources = getSourceInputs(x, layer, nodeIndex);\n        // Avoid input redundancy.\n        for (const x of previousSources) {\n          if (sourceTensors.indexOf(x) === -1) {\n            sourceTensors.push(x);\n          }\n        }\n      }\n      return sourceTensors;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: keras/callbacks.py */\n\nimport {add, div, keep, mul, nextFrame, Scalar, Tensor, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {Container} from './engine/container';\nimport {ValueError} from './errors';\nimport {Logs, resolveScalarsInLogs, UnresolvedLogs} from './logs';\nimport * as generic_utils from './utils/generic_utils';\n\n/** Verbosity logging level when fitting a model. */\nexport enum ModelLoggingVerbosity {\n  SILENT = 0,\n  VERBOSE = 1\n}\n\n/** How often to yield to the main thread when training (in ms). */\nexport const DEFAULT_YIELD_EVERY_MS = 125;\n\nexport type Params = {\n  [key: string]: number|string|boolean|number[]|string[]|boolean[];\n};\n\nexport type YieldEveryOptions = 'auto'|'batch'|'epoch'|'never'|number;\n\n/**\n * Abstract base class used to build new callbacks.\n *\n * The `logs` dictionary that callback methods take as argument will contain\n * keys for quantities relevant to the current batch or epoch.\n *\n * Currently, the `.fit()` method of the `Sequential` model class\n * will include the following quantities in the `logs` that\n * it passes to its callbacks:\n *\n * onEpochEnd: Logs include `acc` and `loss`, and optionally include `valLoss`\n *   (if validation is enabled in `fit`), and `valAcc` (if validation and\n *   accuracy monitoring are enabled).\n * onBatchBegin: Logs include `size`, the number of samples in the current\n *   batch.\n * onBatchEnd: Logs include `loss`, and optionally `acc` (if accuracy monitoring\n *   is enabled).\n */\nexport abstract class BaseCallback {\n  // TODO(michaelterry): This type is a best guess.\n  validationData: Tensor|Tensor[] = null;\n  /**\n   * Training parameters (eg. verbosity, batch size, number of epochs...).\n   */\n  params: Params;\n\n  setParams(params: Params): void {\n    this.params = params;\n  }\n\n  async onEpochBegin(epoch: number, logs?: UnresolvedLogs) {}\n\n  async onEpochEnd(epoch: number, logs?: UnresolvedLogs) {}\n\n  async onBatchBegin(batch: number, logs?: UnresolvedLogs) {}\n\n  async onBatchEnd(batch: number, logs?: UnresolvedLogs) {}\n\n  async onTrainBegin(logs?: UnresolvedLogs) {}\n\n  async onTrainEnd(logs?: UnresolvedLogs) {}\n\n  // LayersModel needs to call Callback.setModel(), but cannot actually depend\n  // on Callback because that creates a cyclic dependency.  Providing this no-op\n  // method on BaseCallback breaks the cycle: this way LayersModel can depend on\n  // BaseCallback but not on Callback.  The argument is typed as `Container`\n  // (the superclass of LayersModel) to avoid recapitulating the cycle. Callback\n  // overrides this method and enforces that the argument is really a\n  // LayersModel.\n  setModel(model: Container): void {\n    // Do nothing. Use Callback instead of BaseCallback to track the model.\n  }\n}\n\n/**\n * Container abstracting a list of callbacks.\n */\nexport class CallbackList {\n  callbacks: BaseCallback[];\n  queueLength: number;\n\n  // TODO(cais): When the need arises, uncomment the following lines and\n  // implement the queue for time values.\n  // private deltaTBatch: number;\n  // private deltaTsBatchBegin: Array<number>;\n  // private deltaTsBatchEnd: Array<number>;\n\n  /**\n   * Constructor of CallbackList.\n   * @param callbacks Array of `Callback` instances.\n   * @param queueLength Queue length for keeping running statistics over\n   *   callback execution time.\n   */\n  constructor(callbacks?: BaseCallback[], queueLength = 10) {\n    // TODO(cais): Make use of queueLength when implementing the queue for time\n    // values.\n    if (callbacks == null) {\n      callbacks = [];\n    }\n    this.callbacks = callbacks;\n    this.queueLength = queueLength;\n  }\n\n  append(callback: BaseCallback): void {\n    this.callbacks.push(callback);\n  }\n\n  setParams(params: Params): void {\n    for (const callback of this.callbacks) {\n      callback.setParams(params);\n    }\n  }\n\n  setModel(model: Container): void {\n    for (const callback of this.callbacks) {\n      callback.setModel(model);\n    }\n  }\n\n  /**\n   * Called at the start of an epoch.\n   * @param epoch Index of epoch.\n   * @param logs Dictionary of logs.\n   */\n  async onEpochBegin(epoch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onEpochBegin(epoch, logs);\n    }\n  }\n\n  /**\n   * Called at the end of an epoch.\n   * @param epoch Index of epoch.\n   * @param logs Dictionary of logs.\n   */\n  async onEpochEnd(epoch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onEpochEnd(epoch, logs);\n    }\n  }\n\n  /**\n   * Called  right before processing a batch.\n   * @param batch Index of batch within the current epoch.\n   * @param logs Dictionary of logs.\n   */\n  async onBatchBegin(batch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onBatchBegin(batch, logs);\n    }\n  }\n\n  /**\n   * Called at the end of a batch.\n   * @param batch Index of batch within the current epoch.\n   * @param logs Dictionary of logs.\n   */\n  async onBatchEnd(batch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onBatchEnd(batch, logs);\n    }\n  }\n\n  /**\n   * Called at the beginning of training.\n   * @param logs Dictionary of logs.\n   */\n  async onTrainBegin(logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onTrainBegin(logs);\n    }\n  }\n\n  /**\n   * Called at the end of training.\n   * @param logs Dictionary of logs.\n   */\n  async onTrainEnd(logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    for (const callback of this.callbacks) {\n      await callback.onTrainEnd(logs);\n    }\n  }\n}\n\n/**\n * Callback that accumulates epoch averages of metrics.\n *\n * This callback is automatically applied to every LayersModel.\n */\nexport class BaseLogger extends BaseCallback {\n  private seen: number;\n  private totals: UnresolvedLogs;\n\n  constructor() {\n    super();\n  }\n\n  async onEpochBegin(epoch: number) {\n    this.seen = 0;\n    this.totals = {};\n  }\n\n  async onBatchEnd(batch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    const batchSize = logs['size'] == null ? 0 : logs['size'] as number;\n    this.seen += batchSize;\n    for (const key in logs) {\n      const value = logs[key];\n      if (typeof value === 'number') {\n        if (!this.totals.hasOwnProperty(key)) {\n          this.totals[key] = 0;\n        }\n        this.totals[key] = this.totals[key] as number + value * batchSize;\n      } else {\n        let oldTotalsToDispose: Scalar;\n        if (key in this.totals) {\n          oldTotalsToDispose = this.totals[key] as Scalar;\n        } else {\n          this.totals[key] = 0;\n        }\n        const total: Scalar =\n            tidy(() => add((this.totals[key]), mul(value, batchSize)));\n        this.totals[key] = total;\n        if (oldTotalsToDispose != null) {\n          oldTotalsToDispose.dispose();\n        }\n      }\n    }\n  }\n\n  async onEpochEnd(epoch: number, logs?: UnresolvedLogs) {\n    if (logs != null) {\n      for (const key of this.params['metrics'] as string[]) {\n        if (this.totals[key] == null) {\n          continue;\n        }\n        if (typeof this.totals[key] === 'number') {\n          logs[key] = this.totals[key] as number / this.seen;\n        } else {\n          tidy(() => {\n            const log: Scalar = mul(div(1, this.seen), this.totals[key]);\n            logs[key] = log;\n            (this.totals[key] as Tensor).dispose();\n            keep(logs[key] as Scalar);\n          });\n        }\n      }\n    }\n  }\n}\n\n/**\n * Callback that records events into a `History` object. This callback is\n * automatically applied to every TF.js Layers model. The `History` object\n * gets returned by the `fit` method of models.\n */\nexport class History extends BaseCallback {\n  epoch: number[];\n  history: {[key: string]: Array<number|Tensor>};\n\n  async onTrainBegin(logs?: UnresolvedLogs) {\n    this.epoch = [];\n    this.history = {};\n  }\n\n  async onEpochEnd(epoch: number, logs?: UnresolvedLogs) {\n    if (logs == null) {\n      logs = {};\n    }\n    this.epoch.push(epoch);\n    for (const key in logs) {\n      if (this.history[key] == null) {\n        this.history[key] = [];\n      }\n      this.history[key].push(logs[key]);\n    }\n  }\n\n  /**\n   * Await the values of all losses and metrics.\n   */\n  async syncData() {\n    const promises: Array<Promise<Float32Array|Int32Array|Uint8Array>> = [];\n    const keys: string[] = [];\n    const indices: number[] = [];\n    for (const key in this.history) {\n      const valueArray = this.history[key];\n      for (let i = 0; i < valueArray.length; ++i) {\n        if (typeof valueArray[i] !== 'number') {\n          const valueScalar = valueArray[i] as Tensor;\n          promises.push(valueScalar.data());\n          keys.push(key);\n          indices.push(i);\n        }\n      }\n    }\n    const values = await Promise.all(promises);\n    for (let n = 0; n < values.length; ++n) {\n      const tensorToDispose = this.history[keys[n]][indices[n]] as Tensor;\n      tensorToDispose.dispose();\n      this.history[keys[n]][indices[n]] = values[n][0];\n    }\n  }\n}\n\nexport interface CustomCallbackArgs {\n  onTrainBegin?: (logs?: Logs) => void | Promise<void>;\n  onTrainEnd?: (logs?: Logs) => void | Promise<void>;\n  onEpochBegin?: (epoch: number, logs?: Logs) => void | Promise<void>;\n  onEpochEnd?: (epoch: number, logs?: Logs) => void | Promise<void>;\n  onBatchBegin?: (batch: number, logs?: Logs) => void | Promise<void>;\n  onBatchEnd?: (batch: number, logs?: Logs) => void | Promise<void>;\n  onYield?: (epoch: number, batch: number, logs: Logs) => void | Promise<void>;\n}\n\n/**\n * Custom callback for training.\n */\nexport class CustomCallback extends BaseCallback {\n  protected readonly trainBegin: (logs?: Logs) => void | Promise<void>;\n  protected readonly trainEnd: (logs?: Logs) => void | Promise<void>;\n  protected readonly epochBegin:\n      (epoch: number, logs?: Logs) => void | Promise<void>;\n  protected readonly epochEnd:\n      (epoch: number, logs?: Logs) => void | Promise<void>;\n  protected readonly batchBegin:\n      (batch: number, logs?: Logs) => void | Promise<void>;\n  protected readonly batchEnd:\n      (batch: number, logs?: Logs) => void | Promise<void>;\n  protected readonly yield:\n      (epoch: number, batch: number, logs: Logs) => void | Promise<void>;\n\n  private yieldEvery: YieldEveryOptions;\n  private currentEpoch = 0;\n\n  constructor(args: CustomCallbackArgs, yieldEvery?: YieldEveryOptions) {\n    super();\n    this.yieldEvery = yieldEvery || 'auto';\n    if (this.yieldEvery === 'auto') {\n      this.yieldEvery = DEFAULT_YIELD_EVERY_MS;\n    }\n    if (this.yieldEvery === 'never' && args.onYield != null) {\n      throw new Error(\n          'yieldEvery is `never` but you provided an `onYield` callback. ' +\n          'Either change `yieldEvery` or remove the callback');\n    }\n    if (util.isNumber(this.yieldEvery)) {\n      // Decorate `maybeWait` so it will be called at most once every\n      // `yieldEvery` ms.\n      this.maybeWait = generic_utils.debounce(\n          this.maybeWait.bind(this), this.yieldEvery as number);\n    }\n    this.trainBegin = args.onTrainBegin;\n    this.trainEnd = args.onTrainEnd;\n    this.epochBegin = args.onEpochBegin;\n    this.epochEnd = args.onEpochEnd;\n    this.batchBegin = args.onBatchBegin;\n    this.batchEnd = args.onBatchEnd;\n    this.yield = args.onYield;\n  }\n\n  async maybeWait(epoch: number, batch: number, logs: UnresolvedLogs) {\n    const ps: Array<void|Promise<void>> = [];\n    if (this.yield != null) {\n      await resolveScalarsInLogs(logs);\n      ps.push(this.yield(epoch, batch, logs as Logs));\n    }\n    ps.push(nextFrame());\n    await Promise.all(ps);\n  }\n\n  async onEpochBegin(epoch: number, logs?: UnresolvedLogs): Promise<void> {\n    this.currentEpoch = epoch;\n    if (this.epochBegin != null) {\n      await resolveScalarsInLogs(logs);\n      await this.epochBegin(epoch, logs as Logs);\n    }\n  }\n\n  async onEpochEnd(epoch: number, logs?: UnresolvedLogs): Promise<void> {\n    const ps: Array<void|Promise<void>> = [];\n    if (this.epochEnd != null) {\n      await resolveScalarsInLogs(logs);\n      ps.push(this.epochEnd(epoch, logs as Logs));\n    }\n    if (this.yieldEvery === 'epoch') {\n      ps.push(nextFrame());\n    }\n    await Promise.all(ps);\n  }\n\n  async onBatchBegin(batch: number, logs?: UnresolvedLogs): Promise<void> {\n    if (this.batchBegin != null) {\n      await resolveScalarsInLogs(logs);\n      await this.batchBegin(batch, logs as Logs);\n    }\n  }\n\n  async onBatchEnd(batch: number, logs?: UnresolvedLogs): Promise<void> {\n    const ps: Array<void|Promise<void>> = [];\n    if (this.batchEnd != null) {\n      await resolveScalarsInLogs(logs);\n      ps.push(this.batchEnd(batch, logs as Logs));\n    }\n    if (this.yieldEvery === 'batch') {\n      ps.push(nextFrame());\n    } else if (util.isNumber(this.yieldEvery)) {\n      ps.push(this.maybeWait(this.currentEpoch, batch, logs));\n    }\n    await Promise.all(ps);\n  }\n\n  async onTrainBegin(logs?: UnresolvedLogs): Promise<void> {\n    if (this.trainBegin != null) {\n      await resolveScalarsInLogs(logs);\n      await this.trainBegin(logs as Logs);\n    }\n  }\n\n  async onTrainEnd(logs?: UnresolvedLogs): Promise<void> {\n    if (this.trainEnd != null) {\n      await resolveScalarsInLogs(logs);\n      await this.trainEnd(logs as Logs);\n    }\n  }\n}\n\n/**\n * Standardize callbacks or configurations of them to an Array of callbacks.\n */\nexport function standardizeCallbacks(\n    callbacks: BaseCallback|BaseCallback[]|CustomCallbackArgs|\n    CustomCallbackArgs[],\n    yieldEvery: YieldEveryOptions): BaseCallback[] {\n  if (callbacks == null) {\n    callbacks = {} as BaseCallback;\n  }\n  if (callbacks instanceof BaseCallback) {\n    return [callbacks];\n  }\n  if (Array.isArray(callbacks) && callbacks[0] instanceof BaseCallback) {\n    return callbacks as BaseCallback[];\n  }\n  // Convert custom callback configs to custom callback objects.\n  const callbackConfigs =\n      generic_utils.toList(callbacks) as CustomCallbackArgs[];\n  return callbackConfigs.map(\n      callbackConfig => new CustomCallback(callbackConfig, yieldEvery));\n}\n\nexport declare type BaseCallbackConstructor = {\n  new (): BaseCallback\n};\n\n/**\n * A global registry for callback constructors to be used during\n * LayersModel.fit().\n */\nexport class CallbackConstructorRegistry {\n  private static constructors:\n      {[verbosityLevel: number]: BaseCallbackConstructor[]} = {};\n\n  /**\n   * Blocks public access to constructor.\n   */\n  private constructor() {}\n\n  /**\n   * Register a tf.LayersModel.fit() callback constructor.\n   *\n   * The registered callback constructor will be used to instantiate\n   * callbacks for every tf.LayersModel.fit() call afterwards.\n   *\n   * @param verbosityLevel Level of verbosity at which the `callbackConstructor`\n   *   is to be reigstered.\n   * @param callbackConstructor A no-arg constructor for `tf.Callback`.\n   * @throws Error, if the same callbackConstructor has been registered before,\n   *   either at the same or a different `verbosityLevel`.\n   */\n  static registerCallbackConstructor(\n      verbosityLevel: number, callbackConstructor: BaseCallbackConstructor) {\n    util.assert(\n        verbosityLevel >= 0 && Number.isInteger(verbosityLevel),\n        () => `Verbosity level is expected to be an integer >= 0, ` +\n            `but got ${verbosityLevel}`);\n    CallbackConstructorRegistry.checkForDuplicate(callbackConstructor);\n    if (CallbackConstructorRegistry.constructors[verbosityLevel] == null) {\n      CallbackConstructorRegistry.constructors[verbosityLevel] = [];\n    }\n    CallbackConstructorRegistry.constructors[verbosityLevel].push(\n        callbackConstructor);\n  }\n\n  private static checkForDuplicate(callbackConstructor:\n                                       BaseCallbackConstructor) {\n    for (const levelName in CallbackConstructorRegistry.constructors) {\n      const constructors = CallbackConstructorRegistry.constructors[+levelName];\n      constructors.forEach(ctor => {\n        if (ctor === callbackConstructor) {\n          throw new ValueError('Duplicate callback constructor.');\n        }\n      });\n    }\n  }\n\n  /**\n   * Clear all registered callback constructors.\n   */\n  protected static clear() {\n    CallbackConstructorRegistry.constructors = {};\n  }\n\n  /**\n   * Create callbacks using the registered callback constructors.\n   *\n   * Given `verbosityLevel`, all constructors registered at that level or above\n   * will be called and the instantiated callbacks will be used.\n   *\n   * @param verbosityLevel: Level of verbosity.\n   */\n  static createCallbacks(verbosityLevel: number): BaseCallback[] {\n    const constructors: BaseCallbackConstructor[] = [];\n    for (const levelName in CallbackConstructorRegistry.constructors) {\n      const level = +levelName;\n      if (verbosityLevel >= level) {\n        constructors.push(...CallbackConstructorRegistry.constructors[level]);\n      }\n    }\n    return constructors.map(ctor => new ctor());\n  }\n}\n\nexport function configureCallbacks(\n    callbacks: BaseCallback[], verbose: ModelLoggingVerbosity, epochs: number,\n    initialEpoch: number, numTrainSamples: number, stepsPerEpoch: number,\n    batchSize: number, doValidation: boolean,\n    callbackMetrics: string[]): {callbackList: CallbackList, history: History} {\n  const history = new History();\n  const actualCallbacks: BaseCallback[] = [\n    new BaseLogger(), ...CallbackConstructorRegistry.createCallbacks(verbose)\n  ];\n  if (callbacks != null) {\n    actualCallbacks.push(...callbacks);\n  }\n  actualCallbacks.push(history);\n  const callbackList = new CallbackList(actualCallbacks);\n\n  // TODO(cais): Figure out when this LayersModel instance can have a\n  // dynamically\n  //   set property called 'callback_model' as in PyKeras.\n\n  callbackList.setParams({\n    epochs,\n    initialEpoch,\n    samples: numTrainSamples,\n    steps: stepsPerEpoch,\n    batchSize,\n    verbose,\n    doValidation,\n    metrics: callbackMetrics,\n  });\n  return {callbackList, history};\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {DataType, serialization, Tensor} from '@tensorflow/tfjs-core';\n\nimport {getUid} from '../backend/state';\nimport {ValueError} from '../errors';\nimport {Shape} from '../keras_format/common';\nimport {Kwargs} from '../types';\n\nimport {DisposeResult, Layer, Node, SymbolicTensor} from './topology';\n\n/**\n * Constructor arguments for InputLayer.\n *\n * Note: You should provide only inputShape or batchInputShape (not both).\n * If only inputShape is provided, then the batchInputShape is determined by\n * the batchSize argument and the inputShape: [batchSize].concat(inputShape).\n */\nexport declare interface InputLayerArgs {\n  /** Input shape, not including the batch axis. */\n  inputShape?: Shape;\n  /** Optional input batch size (integer or null). */\n  batchSize?: number;\n  /** Batch input shape, including the batch axis. */\n  batchInputShape?: Shape;\n  /** Datatype of the input.  */\n  dtype?: DataType;\n  /**\n   * Whether the placeholder created is meant to be sparse.\n   */\n  sparse?: boolean;  // TODO(michaelterry): Not clear whether we'll need this.\n\n  /** Name of the layer. */\n  name?: string;\n}\n\nexport class InputLayer extends Layer {\n  /** @nocollapse */\n  static readonly className = 'InputLayer';\n  sparse: boolean;\n  constructor(args: InputLayerArgs) {\n    super({\n      dtype: args.dtype,\n      name: args.name != null ? args.name : getUid('input').toString()\n    });\n    // Normalize config.batchSize and config.sparse\n    if (args.batchSize == null) {\n      args.batchSize = null;\n    }\n    if (args.sparse == null) {\n      args.sparse = false;\n    }\n\n    this.trainable = false;\n    this.built = true;\n    this.sparse = args.sparse;\n\n    if (args.inputShape != null && args.batchInputShape != null) {\n      throw new ValueError(\n          'Only provide the inputShape OR ' +\n          'batchInputShape argument to inputLayer, not both at the same time.');\n    }\n    let batchInputShape = args.batchInputShape;\n    if (batchInputShape == null) {\n      if (args.inputShape == null) {\n        throw new ValueError(\n            'An InputLayer should be passed either a ' +\n            '`batchInputShape` or an `inputShape`.');\n      } else {\n        batchInputShape = [args.batchSize].concat(args.inputShape);\n      }\n    } else {\n      // TODO(michaelterry): Backport to PyKeras\n      if (args.batchSize != null) {\n        throw new ValueError(\n            'Cannot specify batchSize if batchInputShape is ' +\n            'specified when creating an InputLayer.');\n      }\n    }\n\n    const dtype = args.dtype || 'float32';\n\n    this.batchInputShape = batchInputShape;\n    this.dtype = dtype;\n    // TODO(michaelterry): Backport this to PyKeras?\n    this.inputSpec = [{shape: batchInputShape}];\n\n    const inputTensor = new SymbolicTensor(\n        this.dtype, this.batchInputShape, this, [], {}, this.name);\n    inputTensor.nodeIndex = 0;\n    inputTensor.tensorIndex = 0;\n\n    // Create an input node to add to this.outboundNode.\n    // (This call has side effects.)\n    // tslint:disable-next-line:no-unused-expression\n    new Node({\n      outboundLayer: this,\n      inboundLayers: [],\n      nodeIndices: [],\n      tensorIndices: [],\n      inputTensors: [inputTensor],\n      outputTensors: [inputTensor],\n      inputMasks: [null],\n      outputMasks: [null],\n      inputShapes: [batchInputShape],\n      outputShapes: [batchInputShape]\n    });\n  }\n\n  apply(\n      inputs: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n      kwargs?: Kwargs): Tensor|Tensor[]|SymbolicTensor {\n    throw new ValueError(\n        'Cannot pass any input to an ' +\n        `InputLayer's apply() method. InputLayer name: ${this.name}`);\n  }\n\n  dispose(): DisposeResult {\n    // dispose() for InputLayer is overridden as no-op.\n    return {refCountAfterDispose: this._refCount, numDisposedVariables: 0};\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {\n      batchInputShape: this.batchInputShape,\n      dtype: this.dtype,\n      sparse: this.sparse,\n      name: this.name\n    };\n  }\n}\nserialization.registerClass(InputLayer);\n\n/**\n * Config for the Input function.\n *\n * Note: You should provide only shape or batchShape (not both).\n * If only shape is provided, then the batchShape becomes\n * [null].concat(inputShape).\n */\nexport interface InputConfig {\n  /**\n   * A shape, not including the batch size. For instance, `shape=[32]`\n   * indicates that the expected input will be batches of 32-dimensional\n   * vectors.\n   */\n  shape?: Shape;\n  /**\n   * A shape tuple (integer), including the batch size. For instance,\n   * `batchShape=[10, 32]` indicates that the expected input will be batches of\n   * 10 32-dimensional vectors. `batchShape=[null, 32]` indicates batches of an\n   * arbitrary number of 32-dimensional vectors.\n   */\n  batchShape?: Shape;\n  /**\n   * An optional name string for the layer. Should be unique in a model (do not\n   * reuse the same name twice). It will be autogenerated if it isn't provided.\n   */\n  name?: string;\n  dtype?: DataType;\n  /**\n   * A boolean specifying whether the placeholder to be created is sparse.\n   */\n  sparse?: boolean;\n}\n\nexport function Input(config: InputConfig): SymbolicTensor {\n  if (config.batchShape == null && config.shape == null) {\n    throw new Error(\n        'Please provide to Input either a `shape`' +\n        ' or a `batchShape` argument. Note that ' +\n        '`shape` does not include the batch ' +\n        'dimension.');\n  }\n  if (config.batchShape != null && config.shape != null) {\n    // TODO(michaelterry): Backport to PyKeras.\n    throw new ValueError(\n        'Please provide either a `shape` or `batchShape` ' +\n        'argument to Input, but not both.');\n  }\n  let batchShape = config.batchShape;\n  if (config.shape != null && batchShape == null) {\n    batchShape = [null].concat(config.shape);\n  }\n\n  let dtype = config.dtype;\n  if (dtype == null) {\n    dtype = 'float32';\n  }\n\n  const inputLayer = new InputLayer({\n    batchInputShape: batchShape,\n    name: config.name,\n    dtype,\n    sparse: config.sparse\n  });\n\n  const outputs = inputLayer.inboundNodes[0].outputTensors;\n  return outputs[0];\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {dispose, Scalar} from '@tensorflow/tfjs-core';\n\n/**\n * Logs in which values can be either numbers or Tensors (Scalars).\n *\n * Used internally.\n */\nexport type UnresolvedLogs = {\n  [key: string]: number|Scalar;\n};\n\n/**\n * Turn any Scalar values in a Logs object into actual number values.\n *\n * @param logs The `Logs` object to be resolved in place.\n */\nexport async function resolveScalarsInLogs(logs: UnresolvedLogs) {\n  if (logs == null) {\n    return;\n  }\n  const promises: Array<Promise<Float32Array|Int32Array|Uint8Array>> = [];\n  const keys: string[] = [];\n  const scalarsToDispose: Scalar[] = [];\n  for (const key in logs) {\n    const value = logs[key];\n    if (typeof value !== 'number') {\n      const valueScalar = value;\n      promises.push(valueScalar.data());\n      keys.push(key);\n      scalarsToDispose.push(valueScalar);\n    }\n  }\n  if (promises.length > 0) {\n    const values = await Promise.all(promises);\n    for (let i = 0; i < values.length; ++i) {\n      logs[keys[i]] = values[i][0];\n    }\n    // Dispose the original scalar tensors.\n    dispose(scalarsToDispose);\n  }\n}\n\n/**\n * Dispose all Tensors in an UnresolvedLogs object.\n *\n * @param logs An `UnresolvedLogs` object potentially containing `tf.Tensor`s in\n *   places where the values can be `tf.Tensor` or `number`.\n */\nexport function disposeTensorsInLogs(logs: UnresolvedLogs) {\n  if (logs == null) {\n    return;\n  }\n  for (const key in logs) {\n    const value = logs[key];\n    if (typeof value !== 'number') {\n      value.dispose();\n    }\n  }\n}\n\n/**\n * Logs in which values can only be numbers.\n *\n * Used when calling client-provided custom callbacks.\n */\nexport type Logs = {\n  [key: string]: number;\n};\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original Source layers/__init__.py */\nimport {serialization} from '@tensorflow/tfjs-core';\n\nimport {deserializeKerasObject} from '../utils/generic_utils';\n\n/**\n * Instantiate a layer from a config dictionary.\n * @param config dict of the form {class_name: str, config: dict}\n * @param customObjects dict mapping class names (or function names)\n *   of custom (non-Keras) objects to class/functions\n * @param fastWeightInit Optional flag to use fast weight initialization\n *   during deserialization. This is applicable to cases in which\n *   the initialization will be immediately overwritten by loaded weight\n *   values. Default: `false`.\n * @returns Layer instance (may be LayersModel, Sequential, Layer...)\n */\nexport function deserialize(\n    config: serialization.ConfigDict,\n    customObjects = {} as serialization.ConfigDict,\n    fastWeightInit = false): serialization.Serializable {\n  return deserializeKerasObject(\n      config, serialization.SerializationMap.getMap().classNameMap,\n      customObjects, 'layer', fastWeightInit);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original Source: losses.py */\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {Tensor, Tensor1D, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {epsilon} from './backend/common';\nimport * as K from './backend/tfjs_backend';\nimport {ValueError} from './errors';\nimport {LossOrMetricFn} from './types';\n\n/**\n * Normalizes a tensor wrt the L2 norm alongside the specified axis.\n * @param x\n * @param axis Axis along which to perform normalization.\n */\nexport function l2Normalize(x: Tensor, axis?: number): Tensor {\n  return tidy(() => {\n    if (x.dtype !== 'float32') {\n      x = x.asType('float32');\n    }\n    const squareSum = tfc.sum(K.square(x), axis, true);\n    const epsilonTensor = tfc.fill(squareSum.shape, epsilon());\n    const norm = tfc.sqrt(tfc.maximum(squareSum, epsilonTensor));\n    return tfc.div(x, norm);\n  });\n}\n\nexport function meanSquaredError(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => tfc.mean(K.square(tfc.sub(yPred, yTrue)), -1));\n}\n\nexport function meanAbsoluteError(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => tfc.mean(tfc.abs(tfc.sub(yPred, yTrue)), -1));\n}\n\nexport function meanAbsolutePercentageError(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const diff = tfc.sub(yTrue, yPred);\n    const clippedTrue =\n        tfc.clipByValue(tfc.abs(yTrue), epsilon(), Number.MAX_VALUE);\n    const absResult = tfc.abs(tfc.div(diff, clippedTrue));\n    return tfc.mul(100, tfc.mean(absResult, -1));\n  });\n}\n\nexport function meanSquaredLogarithmicError(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const clippedPred = tfc.clipByValue(yPred, epsilon(), Number.MAX_VALUE);\n    const firstLog = tfc.log(tfc.add(1, clippedPred));\n\n    const clippedTrue = tfc.clipByValue(yTrue, epsilon(), Number.MAX_VALUE);\n    const secondLog = tfc.log(tfc.add(1, clippedTrue));\n\n    return tfc.mean(K.square(tfc.sub(firstLog, secondLog)), -1);\n  });\n}\n\nexport function squaredHinge(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const maxResult = tfc.maximum(0, tfc.sub(1, tfc.mul(yTrue, yPred)));\n    return tfc.mean(K.square(maxResult), -1);\n  });\n}\n\nexport function hinge(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const maxResult = tfc.maximum(0, tfc.sub(1, tfc.mul(yTrue, yPred)));\n    return tfc.mean(maxResult, -1);\n  });\n}\n\nexport function categoricalHinge(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const pos = tfc.sum(tfc.mul(yTrue, yPred), -1);\n    const neg = tfc.max(tfc.mul(tfc.sub(1, yTrue), yPred), -1);\n    return tfc.maximum(0, tfc.add(1, tfc.sub(neg, pos)));\n  });\n}\n\n/**\n * Logarithm of the hyperbolic cosine of the prediction error.\n *\n * `log(cosh(x))` is approximately equal to `(x ** 2) / 2` for small `x` and\n * to `abs(x) - log(2)` for large `x`. This means that 'logcosh' works mostly\n * like the mean squared error, but will not be so strongly affected by the\n * occasional wildly incorrect prediction.\n */\nexport function logcosh(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const log2 = Math.log(2);\n    const predictionDiff = tfc.sub(yPred, yTrue);\n    const logcoshResult = tfc.sub(\n        tfc.add(predictionDiff, tfc.softplus(tfc.mul(-2, predictionDiff))),\n        log2);\n    return tfc.mean(logcoshResult, -1);\n  });\n}\n\nexport function categoricalCrossentropy(\n    target: Tensor, output: Tensor, fromLogits = false): Tensor {\n  return tidy(() => {\n    if (fromLogits) {\n      output = tfc.softmax(output);\n    } else {\n      // scale preds so that the class probabilities of each sample sum to 1.\n      const outputSum = tfc.sum(output, output.shape.length - 1, true);\n      output = tfc.div(output, outputSum);\n    }\n    output = tfc.clipByValue(output, epsilon(), 1 - epsilon());\n    return tfc.neg(tfc.sum(\n        tfc.mul(target.toFloat(), tfc.log(output)), output.shape.length - 1));\n  });\n}\n\n/**\n * Categorical crossentropy with integer targets.\n *\n * @param target An integer tensor.\n * @param output A tensor resulting from a softmax (unless `fromLogits` is\n *  `true`, in which case `output` is expected to be the logits).\n * @param fromLogits Boolean, whether `output` is the result of a softmax, or is\n *   a tensor of logits.\n */\nexport function sparseCategoricalCrossentropy(\n    target: Tensor, output: Tensor): Tensor {\n  return tidy(() => {\n    const flatTarget = tfc.floor(K.flatten(target)).toInt() as Tensor1D;\n    output = tfc.clipByValue(output, epsilon(), 1 - epsilon());\n    const outputShape = output.shape;\n    const oneHotTarget =\n        tfc.oneHot(flatTarget, outputShape[outputShape.length - 1])\n            .reshape(outputShape);\n    const fromLogits = false;\n    return categoricalCrossentropy(oneHotTarget, output, fromLogits);\n  });\n}\n\n/**\n * From TensorFlow's implementation in nn_impl.py:\n *\n * For brevity, let `x = logits`, `z = labels`.  The logistic loss is\n *      z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))\n *    = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))\n *    = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))\n *    = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))\n *    = (1 - z) * x + log(1 + exp(-x))\n *    = x - x * z + log(1 + exp(-x))\n * For x < 0, to avoid overflow in exp(-x), we reformulate the above\n *      x - x * z + log(1 + exp(-x))\n *    = log(exp(x)) - x * z + log(1 + exp(-x))\n *    = - x * z + log(1 + exp(x))\n * Hence, to ensure stability and avoid overflow, the implementation uses this\n * equivalent formulation\n *    max(x, 0) - x * z + log(1 + exp(-abs(x)))\n *\n * @param labels The labels.\n * @param logits The logits.\n */\nexport function sigmoidCrossEntropyWithLogits(\n    labels: Tensor, logits: Tensor): Tensor {\n  if (!util.arraysEqual(labels.shape, logits.shape)) {\n    throw new ValueError(\n        `logits and labels must have the same shape, but got shapes ` +\n        `${JSON.stringify(labels.shape)} and ${JSON.stringify(logits.shape)}`);\n  }\n  return tidy(() => {\n    // The logistic loss formula from above is\n    //   x - x * z + log(1 + exp(-x))\n    // For x < 0, a more numerically stable formula is\n    //   -x * z + log(1 + exp(x))\n    // Note that these two expressions can be combined into the following:\n    //   max(x, 0) - x * z + log(1 + exp(-abs(x)))\n    const reluLogits = logits.relu();\n    const negAbsLogits = logits.abs().neg();\n    return reluLogits.sub(logits.mul(labels)).add(negAbsLogits.exp().log1p());\n  });\n}\n\nexport function binaryCrossentropy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    let y: Tensor;\n    y = tfc.clipByValue(yPred, epsilon(), 1 - epsilon());\n    y = tfc.log(tfc.div(y, tfc.sub(1, y)));\n    return tfc.mean(sigmoidCrossEntropyWithLogits(yTrue, y), -1);\n  });\n}\n\nexport function kullbackLeiblerDivergence(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const clippedTrue = tfc.clipByValue(yTrue, epsilon(), 1);\n    const clippedPred = tfc.clipByValue(yPred, epsilon(), 1);\n    return tfc.sum(\n        tfc.mul(yTrue, tfc.log(tfc.div(clippedTrue, clippedPred))), -1);\n  });\n}\n\nexport function poisson(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const logPred = tfc.log(tfc.add(epsilon(), yPred));\n    return tfc.mean(tfc.sub(yPred, tfc.mul(yTrue, logPred)), -1);\n  });\n}\n\nexport function cosineProximity(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const trueNormalized = l2Normalize(yTrue, -1);\n    const predNormalized = l2Normalize(yPred, -1);\n    const trueXPred = tfc.mul(trueNormalized, predNormalized);\n    return tfc.neg(tfc.sum(trueXPred, -1));\n  });\n}\n\nexport const mse = meanSquaredError;\nexport const MSE = meanSquaredError;\nexport const mae = meanAbsoluteError;\nexport const MAE = meanAbsoluteError;\nexport const mape = meanAbsolutePercentageError;\nexport const MAPE = meanAbsolutePercentageError;\nexport const msle = meanSquaredLogarithmicError;\nexport const MSLE = meanSquaredLogarithmicError;\nexport const kld = kullbackLeiblerDivergence;\nexport const KLD = kullbackLeiblerDivergence;\nexport const cosine = cosineProximity;\n\n// TODO(michaelterry): Add deserialize() function.\n\nexport const lossesMap: {[functionName: string]: LossOrMetricFn} = {\n  meanSquaredError,\n  meanAbsoluteError,\n  meanAbsolutePercentageError,\n  meanSquaredLogarithmicError,\n  squaredHinge,\n  hinge,\n  categoricalHinge,\n  logcosh,\n  categoricalCrossentropy,\n  sparseCategoricalCrossentropy,\n  binaryCrossentropy,\n  kullbackLeiblerDivergence,\n  poisson,\n  cosineProximity\n};\n\n// Porting note: This diverges from the PyKeras implementation and may need to\n// change based on (de)serialization requirements.\nexport function get(identifierOrFn: string|LossOrMetricFn): LossOrMetricFn {\n  if (typeof identifierOrFn === 'string') {\n    if (identifierOrFn in lossesMap) {\n      return lossesMap[identifierOrFn];\n    }\n    let errMsg = `Unknown loss ${identifierOrFn}`;\n    if (identifierOrFn.toLowerCase().includes('softmaxcrossentropy')) {\n      errMsg = `Unknown loss ${identifierOrFn}. ` +\n          'Use \"categoricalCrossentropy\" as the string name for ' +\n          'tf.losses.softmaxCrossEntropy';\n    }\n    throw new ValueError(errMsg);\n  } else {\n    return identifierOrFn;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Built-in metrics.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {Tensor, tidy} from '@tensorflow/tfjs-core';\n\nimport * as K from './backend/tfjs_backend';\nimport {NotImplementedError, ValueError} from './errors';\nimport {categoricalCrossentropy as categoricalCrossentropyLoss, cosineProximity, meanAbsoluteError, meanAbsolutePercentageError, meanSquaredError, sparseCategoricalCrossentropy as sparseCategoricalCrossentropyLoss} from './losses';\nimport {binaryCrossentropy as lossBinaryCrossentropy} from './losses';\nimport {lossesMap} from './losses';\nimport {LossOrMetricFn} from './types';\nimport * as util from './utils/generic_utils';\n\nexport function binaryAccuracy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const threshold = tfc.mul(.5, tfc.onesLike(yPred));\n    const yPredThresholded = K.cast(tfc.greater(yPred, threshold), yTrue.dtype);\n    return tfc.mean(tfc.equal(yTrue, yPredThresholded), -1);\n  });\n}\n\nexport function categoricalAccuracy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(\n      () => K.cast(\n          tfc.equal(tfc.argMax(yTrue, -1), tfc.argMax(yPred, -1)), 'float32'));\n}\n\nfunction truePositives(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    return tfc.logicalAnd(yTrue.equal(1), yPred.equal(1)).sum().cast('float32');\n  });\n}\n\nfunction falseNegatives(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    return tfc.logicalAnd(yTrue.equal(1), yPred.equal(0)).sum().cast('float32');\n  });\n}\n\nfunction falsePositives(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    return tfc.logicalAnd(yTrue.equal(0), yPred.equal(1)).sum().cast('float32');\n  });\n}\n\nexport function precision(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const tp = truePositives(yTrue, yPred);\n    const fp = falsePositives(yTrue, yPred);\n\n    const denominator = tp.add(fp);\n\n    return tfc.where(tfc.greater(denominator, 0), tp.div(denominator), 0)\n        .cast('float32');\n  });\n}\n\nexport function recall(yTrue: Tensor, yPred: Tensor): Tensor {\n  return tidy(() => {\n    const tp = truePositives(yTrue, yPred);\n    const fn = falseNegatives(yTrue, yPred);\n\n    const denominator = tp.add(fn);\n\n    return tfc.where(tfc.greater(denominator, 0), tp.div(denominator), 0)\n        .cast('float32');\n  });\n}\n\nexport function binaryCrossentropy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return lossBinaryCrossentropy(yTrue, yPred);\n}\n\nexport function sparseCategoricalAccuracy(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  if (yTrue.rank === yPred.rank) {\n    yTrue = yTrue.squeeze([yTrue.rank - 1]);\n  }\n  yPred = yPred.argMax(-1);\n  if (yPred.dtype !== yTrue.dtype) {\n    yPred = yPred.asType(yTrue.dtype);\n  }\n  return tfc.equal(yTrue, yPred).asType('float32');\n}\n\nexport function topKCategoricalAccuracy(yTrue: Tensor, yPred: Tensor): Tensor {\n  throw new NotImplementedError();\n}\n\nexport function sparseTopKCategoricalAccuracy(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  throw new NotImplementedError();\n}\n\n// Aliases.\nexport const mse = meanSquaredError;\nexport const MSE = meanSquaredError;\nexport const mae = meanAbsoluteError;\nexport const MAE = meanAbsoluteError;\nexport const mape = meanAbsolutePercentageError;\nexport const MAPE = meanAbsolutePercentageError;\nexport const categoricalCrossentropy = categoricalCrossentropyLoss;\nexport const cosine = cosineProximity;\nexport const sparseCategoricalCrossentropy = sparseCategoricalCrossentropyLoss;\n\n// TODO(cais, nielsene): Add serialize().\n\nexport const metricsMap: {[functionName: string]: LossOrMetricFn} = {\n  binaryAccuracy,\n  categoricalAccuracy,\n  precision,\n  categoricalCrossentropy,\n  sparseCategoricalCrossentropy,\n  mse,\n  MSE,\n  mae,\n  MAE,\n  mape,\n  MAPE,\n  cosine\n};\n\nexport function get(identifier: string|LossOrMetricFn): LossOrMetricFn {\n  if (typeof identifier === 'string' && identifier in metricsMap) {\n    return metricsMap[identifier];\n  } else if (typeof identifier !== 'string' && identifier != null) {\n    return identifier;\n  } else {\n    throw new ValueError(`Unknown metric ${identifier}`);\n  }\n}\n\n/**\n * Get the shortcut function name.\n *\n * If the fn name is a string,\n *   directly return the string name.\n * If the function is included in metricsMap or lossesMap,\n *   return key of the map.\n *   - If the function relative to multiple keys,\n *     return the first found key as the function name.\n *   - If the function exists in both lossesMap and metricsMap,\n *     search lossesMap first.\n * If the function is not included in metricsMap or lossesMap,\n *   return the function name.\n *\n * @param fn loss function, metric function, or short cut name.\n * @returns Loss or Metric name in string.\n */\nexport function getLossOrMetricName(fn: string|LossOrMetricFn): string {\n  util.assert(fn !== null, `Unknown LossOrMetricFn ${fn}`);\n  if (typeof fn === 'string') {\n    return fn;\n  } else {\n    let fnName;\n    for (const key of Object.keys(lossesMap)) {\n      if (lossesMap[key] === fn) {\n        fnName = key;\n        break;\n      }\n    }\n    if (fnName !== undefined) {\n      return fnName;\n    }\n    for (const key of Object.keys(metricsMap)) {\n      if (metricsMap[key] === fn) {\n        fnName = key;\n        break;\n      }\n    }\n    if (fnName !== undefined) {\n      return fnName;\n    }\n    return (fn as Function).name;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Optimizers.\n */\n\nimport {Optimizer, train} from '@tensorflow/tfjs-core';\n\nimport {epsilon} from './backend/common';\n\nimport {ValueError} from './errors';\n\n// Add (de)serialize()\n\n// Porting note: This diverges from the PyKeras implementation and may need to\n// change based on (de)serialization requirements.\nexport function getOptimizer(identifier: string): Optimizer {\n  const optimizerMap: {[optimizerName: string]: () => Optimizer} = {\n    'Adagrad': () => train.adagrad(0.01),\n    'Adadelta': () => train.adadelta(1, 0.95, epsilon()),\n    'Adam': () => train.adam(0.001, 0.9, 0.999, epsilon()),\n    'Adamax': () => train.adamax(0.002, 0.9, 0.999, epsilon(), 0),\n    'RMSProp': () => train.rmsprop(0.001, 0.9, 0, epsilon()),\n    'SGD': () => train.sgd(0.01)\n  };\n  optimizerMap['adagrad'] = optimizerMap['Adagrad'];\n  optimizerMap['adadelta'] = optimizerMap['Adadelta'];\n  optimizerMap['adam'] = optimizerMap['Adam'];\n  optimizerMap['adamax'] = optimizerMap['Adamax'];\n  optimizerMap['rmsprop'] = optimizerMap['RMSProp'];\n  optimizerMap['sgd'] = optimizerMap['SGD'];\n\n  if (identifier in optimizerMap) {\n    return optimizerMap[identifier]();\n  }\n  throw new ValueError(`Unknown Optimizer ${identifier}`);\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/** Utility functions related to user-defined metadata. */\n\n// Maximum recommended serialized size for user-defined metadata.\n// Beyond this limit, a warning message will be printed during model loading and\n// saving.\nexport const MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH = 1 * 1024 * 1024;\n\n/**\n * Check validity of user-defined metadata.\n *\n * @param userDefinedMetadata\n * @param modelName Name of the model that the user-defined metadata belongs to.\n *   Used during construction of error messages.\n * @param checkSize Whether to check the size of the metadata is under\n *   recommended limit. Default: `false`. If `true`, will try stringify the\n *   JSON object and print a console warning if the serialzied size is above the\n *   limit.\n * @throws Error if `userDefinedMetadata` is not a plain JSON object.\n */\nexport function checkUserDefinedMetadata(\n    userDefinedMetadata: {}, modelName: string, checkSize = false): void {\n  if (userDefinedMetadata == null ||\n      typeof userDefinedMetadata !== 'object' ||\n      Object.getPrototypeOf(userDefinedMetadata) !== Object.prototype ||\n      !plainObjectCheck(userDefinedMetadata)) {\n    throw new Error(\n        'User-defined metadata is expected to be a JSON object, but is not.');\n  }\n\n  if (checkSize) {\n    const out = JSON.stringify(userDefinedMetadata);\n    if (out.length > MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH) {\n      console.warn(\n          `User-defined metadata of model \"${modelName}\" is too large in ` +\n          `size (length=${out.length} when serialized). It is not ` +\n          `recommended to store such large objects in user-defined metadata. ` +\n          `Please make sure its serialized length is <= ` +\n          `${MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH}.`);\n    }\n  }\n}\n\n/**\n * Check if an input is plain JSON object or any valid subfield of it.\n *\n * @param x The input to be checked.\n * @param assertObject Whether to assert `x` is a JSON object, i.e., reject\n *   cases of arrays and primitives.\n * @return Returns `true` if and only if `x` is a plain JSON object,\n *   a JSON-valid primitive including string, number, boolean and null,\n *   or an array of the said types.\n */\n// tslint:disable-next-line:no-any\nexport function plainObjectCheck(x: any): boolean {\n  if (x === null) {\n    // Note: typeof `null` is 'object', and `null` is valid in JSON.\n    return true;\n  } else if (typeof x === 'object') {\n    if (Object.getPrototypeOf(x) === Object.prototype) {\n      // `x` is a JavaScript object and its prototype is Object.\n      const keys = Object.keys(x);\n      for (const key of keys) {\n        if (typeof key !== 'string') {\n          // JSON keys must be strings.\n          return false;\n        }\n        if (!plainObjectCheck(x[key])) {  // Recursive call.\n          return false;\n        }\n      }\n      return true;\n    } else {\n      // `x` is a JavaScript object but its prototype is not Object.\n      if (Array.isArray(x)) {\n        // `x` is a JavaScript array.\n        for (const item of x) {\n          if (!plainObjectCheck(item)) {  // Recursive call.\n            return false;\n          }\n        }\n        return true;\n      } else {\n        // `x` is a JavaScript object and its prototype is not Object,\n        // and it's not an Array. I.e., it's a complex object such as\n        // `Error` and `Date`.\n        return false;\n      }\n    }\n  } else {\n    // `x` is not a JavaScript object or `null`.\n    const xType = typeof x;\n    return xType === 'string' || xType === 'number' || xType === 'boolean';\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {Container} from '../engine/container';\nimport {Layer, Node} from '../engine/topology';\nimport {countParamsInWeights} from './variable_utils';\n\n/**\n * Print the summary of a LayersModel object.\n *\n * @param model tf.LayersModel instance.\n * @param lineLength Total length of printed lines. Set this to adapt to the\n *   display to different terminal or console sizes.\n * @param positions Relative or absolute positions of log elements in each\n *   line. Each number corresponds to right-most (i.e., ending) position of a\n *   column.\n *   If not provided, defaults to `[0.45, 0.85, 1]` for sequential-like\n *   models and `[0.33, 0.55, 0.67, 1]` for non-sequential like models.\n * @param printFn Print function to use.\n *   It will be called on each line of the summary. You can provide a custom\n *   function in order to capture the string summary. Defaults to `console.log`.\n */\nexport function printSummary(\n    model: Container, lineLength?: number, positions?: number[],\n    // tslint:disable-next-line:no-any\n    printFn: (message?: any, ...optionalParams: any[]) => void =\n        console.log): void {\n  const sequentialLike = isModelSequentialLike(model);\n\n  // Header names for different log elements.\n  const toDisplay: string[] = ['Layer (type)', 'Output shape', 'Param #'];\n  if (sequentialLike) {\n    lineLength = lineLength || 65;\n    positions = positions || [0.45, 0.85, 1];\n  } else {\n    lineLength = lineLength || 98;\n    positions = positions || [0.33, 0.55, 0.67, 1];\n    // Header names for different log elements.\n  }\n\n  if (positions[positions.length - 1] <= 1) {\n    // `positions` is relative. Convert it to absolute positioning.\n    positions = positions.map(p => Math.floor(lineLength * p));\n  }\n\n  let relevantNodes: Node[];\n  if (!sequentialLike) {\n    toDisplay.push('Receives inputs');\n    relevantNodes = [];\n    for (const depth in model.nodesByDepth) {\n      relevantNodes.push(...model.nodesByDepth[depth]);\n    }\n  }\n\n  printFn('_'.repeat(lineLength));\n  printRow(toDisplay, positions, printFn);\n  printFn('='.repeat(lineLength));\n\n  const layers = model.layers;\n  for (let i = 0; i < layers.length; ++i) {\n    if (sequentialLike) {\n      printLayerSummary(layers[i], positions, printFn);\n    } else {\n      printLayerSummaryWithConnections(\n          layers[i], positions, relevantNodes, printFn);\n    }\n    printFn((i === layers.length - 1 ? '=' : '_').repeat(lineLength));\n  }\n\n  // tslint:disable-next-line:no-any\n  (model as any).checkTrainableWeightsConsistency();\n\n  const trainableCount = countTrainableParams(model);\n  const nonTrainableCount = countParamsInWeights(model.nonTrainableWeights);\n\n  printFn(`Total params: ${trainableCount + nonTrainableCount}`);\n  printFn(`Trainable params: ${trainableCount}`);\n  printFn(`Non-trainable params: ${nonTrainableCount}`);\n  printFn('_'.repeat(lineLength));\n}\n\nfunction countTrainableParams(model: Container): number {\n  let trainableCount: number;\n  // tslint:disable:no-any\n  if ((model as any).collectedTrainableWeights != null) {\n    trainableCount =\n        countParamsInWeights((model as any).collectedTrainableWeights);\n  } else {\n    trainableCount = countParamsInWeights(model.trainableWeights);\n  }\n  // tslint:enable:no-any\n  return trainableCount;\n}\n\nfunction isModelSequentialLike(model: Container): boolean {\n  let sequentialLike = true;\n  const nodesByDepth: Node[][] = [];\n  const nodes: Node[] = [];\n  for (const depth in model.nodesByDepth) {\n    nodesByDepth.push(model.nodesByDepth[depth]);\n  }\n  for (const depthNodes of nodesByDepth) {\n    if (depthNodes.length > 1 ||\n        depthNodes.length === 1 && depthNodes[0].inboundLayers.length > 1) {\n      sequentialLike = false;\n      break;\n    }\n    nodes.push(...depthNodes);\n  }\n  if (sequentialLike) {\n    // Search for shared layers.\n    for (const layer of model.layers) {\n      let flag = false;\n      for (const node of layer.inboundNodes) {\n        if (nodes.indexOf(node) !== -1) {\n          if (flag) {\n            sequentialLike = false;\n            break;\n          } else {\n            flag = true;\n          }\n        }\n      }\n      if (!sequentialLike) {\n        break;\n      }\n    }\n  }\n  return sequentialLike;\n}\n\nfunction printRow(\n    fields: string[], positions: number[],\n    // tslint:disable-next-line:no-any\n    printFn: (message?: any, ...optionalParams: any[]) => void = console.log) {\n  let line = '';\n  for (let i = 0; i < fields.length; ++i) {\n    if (i > 0) {\n      line = line.slice(0, line.length - 1) + ' ';\n    }\n    line += fields[i];\n    line = line.slice(0, positions[i]);\n    line += ' '.repeat(positions[i] - line.length);\n  }\n  printFn(line);\n}\n\n/**\n * Prints a summary for a single Layer, without connectivity information.\n *\n * @param layer: Layer instance to print.\n */\nfunction printLayerSummary(\n    layer: Layer, positions: number[],\n    // tslint:disable-next-line:no-any\n    printFn: (message?: any, ...optionalParams: any[]) => void) {\n  let outputShape: string;\n  try {\n    outputShape = JSON.stringify(layer.outputShape);\n  } catch (err) {\n    outputShape = 'multiple';\n  }\n\n  const name = layer.name;\n  const className = layer.getClassName();\n  const fields: string[] =\n      [`${name} (${className})`, outputShape, layer.countParams().toString()];\n  printRow(fields, positions, printFn);\n}\n\n/**\n * Prints a summary for a single Layer, with connectivity information.\n */\nfunction printLayerSummaryWithConnections(\n    layer: Layer, positions: number[], relevantNodes: Node[],\n    // tslint:disable-next-line:no-any\n    printFn: (message?: any, ...optionalParams: any[]) => void) {\n  let outputShape: string;\n  try {\n    outputShape = JSON.stringify(layer.outputShape);\n  } catch (err) {\n    outputShape = 'multiple';\n  }\n\n  const connections: string[] = [];\n  for (const node of layer.inboundNodes) {\n    if (relevantNodes != null && relevantNodes.length > 0 &&\n        relevantNodes.indexOf(node) === -1) {\n      continue;\n    }\n    for (let i = 0; i < node.inboundLayers.length; ++i) {\n      const inboundLayer = node.inboundLayers[i].name;\n      const inboundLayerIndex = node.nodeIndices[i];\n      const inboundTensorIndex = node.tensorIndices[i];\n      connections.push(\n          `${inboundLayer}[${inboundLayerIndex}][${inboundTensorIndex}]`);\n    }\n  }\n  const name = layer.name;\n  const className = layer.getClassName();\n  const firstConnection = connections.length === 0 ? '' : connections[0];\n  const fields: string[] = [\n    `${name} (${className})`, outputShape, layer.countParams().toString(),\n    firstConnection\n  ];\n\n  printRow(fields, positions, printFn);\n  for (let i = 1; i < connections.length; ++i) {\n    printRow(['', '', '', connections[i]], positions, printFn);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n// Porting note: This file doesn't exist in PyKeras.\n// Its purpose here is to centralize the boundary layer between\n// tfjs-layers's internal Config TS-Centric format and PyKeras's\n// serialized Python Config format.\n\nimport {serialization} from '@tensorflow/tfjs-core';\n\nimport {PyJsonValue} from '../keras_format/types';\nimport * as generic_utils from '../utils/generic_utils';\n// tslint:enable\n\n/**\n * Test whether a value in an array is the name of a LayersModel or Layer.\n * @param key The key name that the value is found under. Note that the key\n *   may not be at the level immediately above the value, if the value is in a\n *   nested array.\n * @param index Index of the value in the Array that it is found in.\n * @param value The value object.\n * @returns A boolean indicating whether value is a name.\n */\nfunction isArrayItemInputOrOutputName<T>(\n    key: string, index: number, value: T): boolean {\n  return (key === 'inboundNodes' || key === 'outputLayers' ||\n          key === 'inputLayers') &&\n      index === 0 && typeof value === 'string';\n}\n\n/**\n * Convert a Pythonic config object to TypeScript config object.\n * @param pythonicConfig The config object to convert.\n * @param key Optional key name of the object being converted.\n * @returns Result of the conversion.\n */\nexport function convertPythonicToTs(\n    pythonicConfig: PyJsonValue, key?: string): serialization.ConfigDictValue {\n  if (pythonicConfig === null) {\n    return null;\n  } else if (typeof pythonicConfig === 'string') {\n    return generic_utils.toCamelCase(pythonicConfig);\n  } else if (\n      (typeof pythonicConfig === 'number') ||\n      (typeof pythonicConfig === 'boolean')) {\n    return pythonicConfig;\n  } else if (pythonicConfig instanceof Array) {\n    const tsArray = [];\n    const arrayLength = pythonicConfig.length;\n    for (let i = 0; i < arrayLength; ++i) {\n      const item = pythonicConfig[i];\n      if (isArrayItemInputOrOutputName(key, i, item)) {\n        tsArray.push(item);\n      } else {\n        tsArray.push(convertPythonicToTs(item, key));\n      }\n    }\n    return tsArray;\n  } else {\n    const tsDict: serialization.ConfigDict = {};\n    for (const pythonicKey of Object.keys(pythonicConfig)) {\n      const pythonicValue = pythonicConfig[pythonicKey];\n      if (pythonicKey === 'name' && typeof pythonicValue === 'string') {\n        // Special case the 'name' key with a string value. Name values, such as\n        // the names of LayersModel and Layer instances, should not undergo the\n        // camel-case conversion.\n        tsDict[pythonicKey] = pythonicValue;\n      } else {\n        const tsKey = generic_utils.toCamelCase(pythonicKey);\n        tsDict[tsKey] = convertPythonicToTs(pythonicValue, tsKey);\n      }\n    }\n    return tsDict;\n  }\n}\n\n/**\n * Convert a TypeScript config object to Python config object.\n * @param tsConfig The config object to convert.\n * @param key Optional key name of the object being converted.\n * @returns Result of the conversion.\n */\nexport function convertTsToPythonic(\n    tsConfig: serialization.ConfigDictValue, key?: string): PyJsonValue {\n  if (tsConfig === null || tsConfig === undefined) {\n    return null;\n  } else if (typeof tsConfig === 'string') {\n    return generic_utils.toSnakeCase(tsConfig);\n  } else if (\n      (typeof tsConfig === 'number') || (typeof tsConfig === 'boolean')) {\n    return tsConfig;\n  } else if (tsConfig instanceof Array) {\n    const pyArray = [];\n    const arrayLength = tsConfig.length;\n    for (let i = 0; i < arrayLength; ++i) {\n      const item = tsConfig[i];\n      if (isArrayItemInputOrOutputName(key, i, item)) {\n        pyArray.push(item);\n      } else {\n        pyArray.push(convertTsToPythonic(item, key));\n      }\n    }\n    return pyArray;\n  } else {\n    const pyDict: serialization.ConfigDict = {};\n    for (const tsKey of Object.keys(tsConfig)) {\n      const tsValue = tsConfig[tsKey];\n      const pyKey = generic_utils.toSnakeCase(tsKey);\n      if ((tsKey === 'name' || tsKey === 'className') &&\n          typeof tsValue === 'string') {\n        // Special case the 'name' key with a string value. Name values, such as\n        // the names of LayersModel and Layer instances, should not undergo the\n        // snake-case conversion.\n        pyDict[pyKey] = tsValue;\n      } else {\n        pyDict[pyKey] = convertTsToPythonic(tsValue, tsKey);\n      }\n    }\n    return pyDict;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Executor: Evaluates SymbolicTensor based on feeds.\n */\n\nimport {cast, dispose, memory, Tensor, util} from '@tensorflow/tfjs-core';\n\nimport {ValueError} from '../errors';\nimport {Kwargs} from '../types';\nimport {toList} from '../utils/generic_utils';\n\nimport {InputLayer} from './input_layer';\nimport {SymbolicTensor} from './topology';\n\n/**\n * Helper function to check the dtype and shape compatibility of a feed value.\n */\nfunction assertFeedCompatibility(key: SymbolicTensor, val: Tensor): Tensor {\n  // Check dtype compatibility.\n  if (key.dtype == null || key.dtype === val.dtype) {\n    //  a.  If types match, return val tensor as is.\n    return val;\n  }\n  try {\n    //  b. Attempt to convert to expected type.\n    return cast(val, key.dtype);\n  } catch (err) {\n    //  c. If conversion fails, return helpful error.\n    throw new ValueError(\n        `The dtype of the feed (${val.dtype}) can not be cast to the dtype ` +\n        `of the key '${key.name}' (${key.dtype}).`);\n  }\n}\n\n/**\n * A concrete Tensor value for a symbolic tensor as the key.\n */\nexport interface Feed {\n  key: SymbolicTensor;\n  value: Tensor;\n}\n\n/**\n * FeedDict: A mapping from unique SymbolicTensors to feed values for them.\n * A feed value is a concrete value represented as an `Tensor`.\n */\nexport class FeedDict {\n  private id2Value: {[id: number]: Tensor} = {};\n  private id2Mask: {[id: number]: Tensor} = {};\n  private name2Id: {[name: string]: number} = {};\n\n  /**\n   * Constructor, optionally does copy-construction.\n   * @param feeds An Array of `Feed`s, or another `FeedDict`, in which case\n   *   copy-construction will be performed.\n   */\n  constructor(feeds?: Feed[]|FeedDict) {\n    if (feeds instanceof FeedDict) {\n      for (const id in feeds.id2Value) {\n        this.id2Value[id] = feeds.id2Value[id];\n        if (id in feeds.id2Mask) {\n          this.id2Mask[id] = feeds.id2Mask[id];\n        }\n      }\n    } else {\n      if (feeds == null) {\n        return;\n      }\n      for (const feed of feeds) {\n        this.add(feed.key, feed.value);\n      }\n    }\n  }\n\n  /**\n   * Add a key-value pair to the FeedDict.\n   *\n   * @param key The key of the feed.\n   * @param value The value of the tensor feed.\n   * @param mask The value of the mask feed (optional).\n   * @returns This `FeedDict`.\n   * @throws ValueError: If the key `SymbolicTensor` already exists in the\n   *   `FeedDict`.\n   */\n  add(key: SymbolicTensor, value: Tensor, mask?: Tensor): FeedDict {\n    if (this.id2Value[key.id] == null) {\n      this.id2Value[key.id] = assertFeedCompatibility(key, value);\n      this.name2Id[key.name] = key.id;\n      if (mask != null) {\n        this.id2Mask[key.id] = mask;\n      }\n    } else {\n      throw new ValueError(`Duplicate key: name=${key.name}, id=${key.id}`);\n    }\n    return this;\n  }\n\n  /**\n   * Add a Feed to the FeedDict.\n   * @param feed The new `Feed` to add.\n   * @returns This `FeedDict`.\n   */\n  addFeed(feed: Feed) {\n    this.add(feed.key, feed.value);\n  }\n\n  /**\n   * Probe whether a key already exists in the FeedDict.\n   * @param key\n   */\n  hasKey(key: SymbolicTensor): boolean {\n    return this.id2Value[key.id] != null;\n  }\n\n  /**\n   * Get all the SymbolicTensor available in this FeedDict.\n   */\n  names(): string[] {\n    return Object.keys(this.name2Id);\n  }\n\n  /**\n   * Get the feed value for given key.\n   * @param key The SymbolicTensor, or its name (as a string), of which the\n   *     value is sought.\n   * @returns If `key` exists, the corresponding feed value.\n   * @throws ValueError: If `key` does not exist in this `FeedDict`.\n   */\n  getValue(key: SymbolicTensor|string): Tensor {\n    if (key instanceof SymbolicTensor) {\n      if (this.id2Value[key.id] == null) {\n        throw new ValueError(`Nonexistent key: ${key.name}`);\n      } else {\n        return this.id2Value[key.id];\n      }\n    } else {\n      const id = this.name2Id[key];\n      if (id == null) {\n        throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`);\n      }\n      return this.id2Value[id];\n    }\n  }\n\n  /**\n   * Get the feed mask for given key.\n   * @param key The SymbolicTensor, or its name (as a string), of which the\n   *     value is sought.\n   * @returns If `key` exists, the corresponding feed mask.\n   * @throws ValueError: If `key` does not exist in this `FeedDict`.\n   */\n  getMask(key: SymbolicTensor|string): Tensor {\n    if (key instanceof SymbolicTensor) {\n      if (this.id2Value[key.id] == null) {\n        throw new ValueError(`Nonexistent key: ${key.name}`);\n      } else {\n        return this.id2Mask[key.id];\n      }\n    } else {\n      const id = this.name2Id[key];\n      if (id == null) {\n        throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`);\n      }\n      return this.id2Mask[id];\n    }\n  }\n\n  /** Dispose all mask Tensors held by this object. */\n  disposeMasks() {\n    if (this.id2Mask != null) {\n      dispose(this.id2Mask);\n    }\n  }\n}\n\n// Cache for topologically sorted SymbolicTensors for given execution\n// targets (i.e., fetches).\nconst cachedSorted: {[concatFetchNames: string]: SymbolicTensor[]} = {};\n\n// Cache for recipient count maps for given execution targets (i.e., fetches).\nconst cachedRecipientCounts:\n    {[concatFetchNames: string]: {[fetchName: string]: number}} = {};\n\n/**\n * Interface for the optional object used for probing the memory\n * usage and other statistics during execution.\n */\nexport interface ExecutionProbe {\n  /**\n   * Maximum number of tensors that exist during all steps of the\n   * execution. Tensor counts are measured at the beginning of every\n   * step.\n   */\n  maxNumTensors?: number;\n\n  /**\n   * Minimum number of tensors that exist during all steps of the\n   * execution. Tensor counts are measured at the beginning of every\n   * step.\n   */\n  minNumTensors?: number;\n}\n\n/**\n * Execute a SymbolicTensor by using concrete feed values.\n *\n * A `SymbolicTensor` object is a node in a computation graph of TF.js\n * Layers. The object is backed by a source layer and input\n * `SymbolicTensor`s to the source layer. This method evaluates\n * the `call()` method of the source layer, using concrete values of the\n * inputs obtained from either\n * * `feedDict`, if the input key exists in `feedDict`, or else,\n * * a recursive call to `execute()` itself.\n *\n * @param x: The `SymbolicTensor` to execute.\n * @param feedDict: The feed values, as base condition of the recursion.\n *   execution.\n * @param kwargs: Optional keyword arguments.\n * @param probe: A probe object (of interface `ExecutionProbe`) used for\n *   testing memory footprint of `execute` calls.\n * @returns Result of the execution.\n * @throws ValueError: If any `SymbolicTensor`s from `InputLayer`s\n *   encountered during the execution lacks a feed value in `feedDict`.\n */\nexport function execute(\n    fetches: SymbolicTensor|SymbolicTensor[], feedDict: FeedDict,\n    kwargs?: Kwargs, probe?: ExecutionProbe): Tensor|\n    Tensor[]|[Tensor | Tensor[]] {\n  const training: boolean = kwargs == null ? false : kwargs['training'];\n\n  const arrayFetches = Array.isArray(fetches);\n  const fetchArray: SymbolicTensor[] =\n      arrayFetches ? fetches as SymbolicTensor[] : [fetches as SymbolicTensor];\n\n  const outputNames = fetchArray.map(t => t.name);\n  const finalOutputs: Tensor[] = [];\n  const feedNames = feedDict.names();\n  for (const outputName of outputNames) {\n    if (feedNames.indexOf(outputName) !== -1) {\n      finalOutputs.push(feedDict.getValue(outputName));\n    } else {\n      finalOutputs.push(null);\n    }\n  }\n\n  if (probe != null) {\n    // For optional probing of memory footprint during execution.\n    probe.maxNumTensors = -Infinity;\n    probe.minNumTensors = Infinity;\n  }\n\n  // Check cache.\n  const fetchAndFeedKey =\n      outputNames.join(',') + '|' + feedDict.names().join(',');\n  let sorted: SymbolicTensor[];\n  let recipientCounts: {[fetchName: string]: number};\n  if (cachedSorted[fetchAndFeedKey] == null) {\n    // Cache doesn't contain the desired combination of fetches. Compute\n    // topological sort for the combination for the first time.\n    const out = getTopologicalSortAndRecipientCounts(fetchArray, feedDict);\n    sorted = out.sorted;\n    recipientCounts = out.recipientCounts;\n\n    // Store results in cache for future use.\n    cachedSorted[fetchAndFeedKey] = sorted;\n    cachedRecipientCounts[fetchAndFeedKey] = recipientCounts;\n  }\n  sorted = cachedSorted[fetchAndFeedKey];\n  recipientCounts = {};\n  if (!training) {\n    Object.assign(recipientCounts, cachedRecipientCounts[fetchAndFeedKey]);\n  }\n\n  const internalFeedDict = new FeedDict(feedDict);\n\n  // Start iterative execution on the topologically-sorted SymbolicTensors.\n  for (let i = 0; i < sorted.length; ++i) {\n    if (probe != null) {\n      // For optional probing of memory usage during execution.\n      const numTensors = memory().numTensors;\n      if (numTensors > probe.maxNumTensors) {\n        probe.maxNumTensors = numTensors;\n      }\n      if (numTensors < probe.minNumTensors) {\n        probe.minNumTensors = numTensors;\n      }\n    }\n\n    const symbolic = sorted[i];\n    const srcLayer = symbolic.sourceLayer;\n    if (srcLayer instanceof InputLayer) {\n      continue;\n    }\n    const inputValues: Tensor[] = [];\n    const inputMasks: Tensor[] = [];\n    const tensorsToDispose: Tensor[] = [];\n\n    let maskExists = false;\n    for (const input of symbolic.inputs) {\n      const value = internalFeedDict.getValue(input);\n      const mask = internalFeedDict.getMask(input);\n      inputValues.push(value);\n      inputMasks.push(mask);\n      if (mask != null) {\n        maskExists = true;\n      }\n      if (!training) {\n        recipientCounts[input.name]--;\n        if (recipientCounts[input.name] === 0 && !feedDict.hasKey(input) &&\n            outputNames.indexOf(input.name) === -1 && !value.isDisposed &&\n            input.sourceLayer.stateful !== true) {\n          tensorsToDispose.push(value);\n        }\n      }\n    }\n\n    if (maskExists) {\n      kwargs = kwargs || {};\n      kwargs['mask'] = inputMasks[0];\n    }\n    const outputTensors =\n        toList(srcLayer.apply(inputValues, kwargs)) as Tensor[];\n    let outputMask: Tensor|Tensor[] = null;\n    if (srcLayer.supportsMasking) {\n      outputMask = srcLayer.computeMask(inputValues, inputMasks);\n    }\n    const layerOutputs = getNodeOutputs(symbolic);\n    const outputSymbolicTensors =\n        Array.isArray(layerOutputs) ? layerOutputs : [layerOutputs];\n    for (let i = 0; i < outputSymbolicTensors.length; ++i) {\n      if (!internalFeedDict.hasKey(outputSymbolicTensors[i])) {\n        internalFeedDict.add(\n            outputSymbolicTensors[i], outputTensors[i],\n            Array.isArray(outputMask) ? outputMask[0] : outputMask);\n      }\n      const index = outputNames.indexOf(outputSymbolicTensors[i].name);\n      if (index !== -1) {\n        finalOutputs[index] = outputTensors[i];\n      }\n    }\n\n    if (!training) {\n      // Clean up Tensors that are no longer needed.\n      dispose(tensorsToDispose);\n    }\n  }\n  // NOTE(cais): Unlike intermediate tensors, we don't discard mask\n  // tensors as we go, because these tensors are sometimes passed over a\n  // series of mutliple layers, i.e., not obeying the immediate input\n  // relations in the graph. If this becomes a memory-usage concern,\n  // we can improve this in the future.\n  internalFeedDict.disposeMasks();\n\n  return arrayFetches ? finalOutputs : finalOutputs[0];\n}\n\ntype RecipientCounts = {\n  [fetchName: string]: number\n};\n\nexport type RecipientMap = {\n  [fetchName: string]: Set<string>;\n};\n\n/**\n * Sort the `SymbolicTensor`s topologically, for an array of fetches.\n *\n * This function calls getTopologicalSortAndRecipientCountsForOneFetch and\n * merges their results.\n *\n * @param fetch The array of fetches requested. Must be a non-empty array.\n * @param feedDict The dictionary of fed values.\n * @returns sorted: Topologically-sorted array of SymbolicTensors.\n *   recipientCounts: Recipient counts for all SymbolicTensors in `sorted`.\n */\nfunction getTopologicalSortAndRecipientCounts(\n    fetches: SymbolicTensor[], feedDict: FeedDict):\n    {sorted: SymbolicTensor[], recipientCounts: RecipientCounts} {\n  util.assert(\n      fetches != null && fetches.length > 0,\n      () => `Expected at least one fetch, got none`);\n\n  let finalSorted: SymbolicTensor[] = [];\n  let finalRecipientMap: RecipientMap = {};\n  if (fetches.length === 1) {\n    // Special-casing 1 fetch for efficiency.\n    const out =\n        getTopologicalSortAndRecipientCountsForOneFetch(fetches[0], feedDict);\n    finalSorted = out.sorted;\n    finalRecipientMap = out.recipientMap;\n  } else {\n    const visited = new Set<string>();\n    for (const fetch of fetches) {\n      const {sorted, recipientMap} =\n          getTopologicalSortAndRecipientCountsForOneFetch(fetch, feedDict);\n\n      // Merge sorted SymbolicTensor Arrays.\n      for (const symbolicTensor of sorted) {\n        if (!visited.has(symbolicTensor.name)) {\n          finalSorted.push(symbolicTensor);\n          visited.add(symbolicTensor.name);\n        }\n      }\n\n      // Merge recipient maps.\n      for (const name in recipientMap) {\n        if (finalRecipientMap[name] == null) {\n          finalRecipientMap[name] = new Set<string>();\n        }\n        recipientMap[name].forEach(\n            recipient => finalRecipientMap[name].add(recipient));\n      }\n    }\n  }\n  return {\n    sorted: finalSorted,\n    recipientCounts: recipientMap2Counts(finalRecipientMap)\n  };\n}\n\nfunction recipientMap2Counts(recipientMap: RecipientMap): RecipientCounts {\n  const recipientCounts: RecipientCounts = {};\n  for (const name in recipientMap) {\n    recipientCounts[name] = recipientMap[name].size;\n  }\n  return recipientCounts;\n}\n\n/**\n * Sort the `SymbolicTensor`s topologically, for a single fetch.\n *\n * This helper function processes the upstream SymbolicTensors of a single\n * fetch.\n *\n * @param fetch The single fetch requested.\n * @param feedDict The dictionary of fed values.\n * @returns sorted: Topologically-sorted array of SymbolicTensors.\n *   recipientMap: Recipient names for all SymbolicTensors in `sorted`.\n */\nexport function getTopologicalSortAndRecipientCountsForOneFetch(\n    fetch: SymbolicTensor, feedDict: FeedDict):\n    {sorted: SymbolicTensor[], recipientMap: RecipientMap} {\n  const visited = new Set<string>();\n  const sorted: SymbolicTensor[] = [];\n  const recipientMap: RecipientMap = {};\n\n  // Put keys of the feedDict into visited first, so they don't have to be\n  // walked. This is needed in case where there are feeds for intermediate\n  // SymbolicTensors of the graph.\n  for (const key of feedDict.names()) {\n    visited.add(key);\n  }\n\n  const stack: SymbolicTensor[] = [];\n  const marks: number[] = [];\n\n  // Initial population of stack and marks.\n  stack.push(fetch);\n\n  while (stack.length > 0) {\n    const top = stack[stack.length - 1];\n    if (visited.has(top.name)) {\n      stack.pop();\n      continue;\n    }\n    const topIsMarked = marks[marks.length - 1] === stack.length - 1;\n    if (top.inputs.length === 0 || topIsMarked) {\n      // Input SymbolicTensor or all children have been visited.\n      stack.pop();\n      sorted.push(top);\n      visited.add(top.name);\n      if (topIsMarked) {\n        marks.pop();\n      }\n    } else {\n      // A non-input SymbolicTensor whose upstream SymbolicTensors haven't\n      // been visited yet. Push them onto the stack.\n      marks.push(stack.length - 1);\n      for (const input of top.inputs) {\n        // Increment the recipient count. Note that this needs to happen\n        // regardless of whether the SymbolicTensor has been visited before.\n        if (recipientMap[input.name] == null) {\n          recipientMap[input.name] = new Set<string>();\n        }\n        recipientMap[input.name].add(top.name);\n\n        if (visited.has(input.name)) {\n          continue;  // Avoid repeated visits to the same SymbolicTensor.\n        }\n        stack.push(input);\n      }\n    }\n  }\n  return {sorted, recipientMap};\n}\n\n/**\n * Get the symbolic output tensors of the node to which a given fetch belongs.\n * @param fetch The fetched symbolic tensor.\n * @returns The Array of symbolic tensors output by the node to which `fetch`\n *   belongs.\n */\nfunction getNodeOutputs(fetch: SymbolicTensor): SymbolicTensor|\n    SymbolicTensor[] {\n  let layerOutputs: SymbolicTensor|SymbolicTensor[];\n  if (fetch.sourceLayer.inboundNodes.length === 1) {\n    layerOutputs = fetch.sourceLayer.output;\n  } else {\n    let nodeIndex: number = null;\n    for (let i = 0; i < fetch.sourceLayer.inboundNodes.length; ++i) {\n      for (const outputTensor of fetch.sourceLayer.inboundNodes[i]\n               .outputTensors) {\n        if (outputTensor.id === fetch.id) {\n          nodeIndex = i;\n          break;\n        }\n      }\n    }\n    layerOutputs = fetch.sourceLayer.getOutputAt(nodeIndex);\n  }\n  return layerOutputs;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: keras/engine/topology.py */\n\nimport {NamedTensorMap, Scalar, serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\n\nimport {getUid} from '../backend/state';\nimport {NotImplementedError, RuntimeError, ValueError} from '../errors';\nimport {Shape} from '../keras_format/common';\nimport {TensorKeyWithArgsArray} from '../keras_format/node_config';\nimport {PyJsonDict} from '../keras_format/types';\nimport {deserialize as deserializeLayer} from '../layers/serialization';\nimport {Kwargs} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport {convertTsToPythonic} from '../utils/serialization_utils';\nimport * as types_utils from '../utils/types_utils';\nimport {batchSetValue, LayerVariable} from '../variables';\nimport {version as layersVersion} from '../version';\n\nimport {execute, FeedDict} from './executor';\nimport {InputLayer} from './input_layer';\nimport {DisposeResult, Layer, Node, SymbolicTensor} from './topology';\n\n/** Constructor config for Container. */\nexport interface ContainerArgs {\n  inputs: SymbolicTensor|SymbolicTensor[];\n  outputs: SymbolicTensor|SymbolicTensor[];\n  name?: string;\n}\n\n/**\n * A Container is a directed acyclic graph of layers.\n *\n * It is the topological form of a \"model\". A LayersModel\n * is simply a Container with added training routines.\n *\n */\nexport abstract class Container extends Layer {\n  inputs: SymbolicTensor[];\n  outputs: SymbolicTensor[];\n\n  inputLayers: Layer[];\n  inputLayersNodeIndices: number[];\n  inputLayersTensorIndices: number[];\n\n  outputLayers: Layer[];\n  outputLayersNodeIndices: number[];\n  outputLayersTensorIndices: number[];\n\n  layers: Layer[];\n  layersByDepth: {[depth: string]: Layer[]};\n  nodesByDepth: {[depth: string]: Node[]};\n\n  internalContainerRefs: Container[];\n\n  containerNodes = new Set<string>();\n\n  // TODO(michaelterry): Add cache support\n  // private outputMaskCache: any;\n  // private outputTensorCache: any;\n  // private outputShapeCache: any;\n\n  inputNames: string[];\n  outputNames: string[];\n  feedInputShapes: Shape[];\n\n  protected internalInputShapes: Shape[];\n  protected internalOutputShapes: Shape[];\n  // TODO(cais): Maybe 'feed' should not in the names of these variables,\n  //   due to the fact that our backend is not symbolic.\n  protected feedInputNames: string[];\n  protected feedOutputNames: string[];\n\n  constructor(args: ContainerArgs) {\n    // No args passed to super's constructor.\n    super({});\n    this.name = args.name;\n    if (this.name == null) {\n      const prefix = this.getClassName().toLowerCase();\n      this.name = getUid(prefix);\n    }\n\n    this.supportsMasking = false;\n    this.trainable_ = true;\n\n    // TODO(michaelterry): Initialize perInputLosses/Updates here.\n\n    // Container-specific properties.\n    if (Array.isArray(args.inputs)) {\n      this.inputs = args.inputs.slice();\n    } else {\n      this.inputs = [args.inputs];\n    }\n    if (Array.isArray(args.outputs)) {\n      this.outputs = args.outputs.slice();\n    } else {\n      this.outputs = [args.outputs];\n    }\n\n    // Check for redundancy in inputs.\n    if (generic_utils.unique(this.inputs).length !== this.inputs.length) {\n      throw new ValueError(\n          'The list of inputs passed to the model is ' +\n          'redundant. All inputs should only appear once. Found: ' +\n          `${this.inputs.map(x => x.name)}`);\n    }\n\n    // Check for redundancy in outputs.\n    if (generic_utils.unique(this.outputs).length !== this.outputs.length) {\n      console.warn(\n          'The list of outputs passed to the model is redundant. ' +\n          'All outputs should only appear once. Found: ' +\n          `${this.outputs.map(x => x.name)}`);\n    }\n\n    /*\n      List of initial layers (1 to 1 mapping with this.inputs, hence the same\n      layer might appear twice)\n    */\n    this.inputLayers = [];\n    this.inputLayersNodeIndices = [];\n    this.inputLayersTensorIndices = [];\n    /*\n      List of layers (1 to 1 mapping with this.outputs, hence the same layer\n      might appear twice)\n    */\n    this.outputLayers = [];\n    this.outputLayersNodeIndices = [];\n    this.outputLayersTensorIndices = [];\n    /*\n      All layers in order of horizontal graph traversal. Entries are unique.\n      Includes input and output layers.\n    */\n    this.layers = [];\n\n    /*\n      References to container layers that were constructed internally. We need\n      these to properly dispose of tensors from nested containers.\n    */\n    this.internalContainerRefs = [];\n\n    // TODO(michaelterry): Determine if caching still needed with eager\n    // backend.\n    /*\n      This is for performance optimization when calling the Container on new\n      inputs. Every time the Container is called on a set on input tensors,\n      we compute the output tensors, output masks and output shapes in one pass,\n      then cache them here. When one of these outputs is queried later,\n      we retrieve it from there instead of recomputing it.\n    */\n    // this.outputTensorCache = {};\n    // this.outputShapeCache = {};\n\n    // Build this.outputLayers:\n    for (const x of this.outputs) {\n      const layer = x.sourceLayer;\n      const nodeIndex = x.nodeIndex;\n      const tensorIndex = x.tensorIndex;\n      this.outputLayers.push(layer);\n      this.outputLayersNodeIndices.push(nodeIndex);\n      this.outputLayersTensorIndices.push(tensorIndex);\n    }\n\n    // TODO(michaelterry): Add output mask cache code.\n\n    // Build this.inputLayers:\n    for (const x of this.inputs) {\n      const layer = x.sourceLayer;\n      const nodeIndex = x.nodeIndex;\n      const tensorIndex = x.tensorIndex;\n      /*\n        It's supposed to be an input layer, so only one node\n        and one tensor output.\n      */\n      generic_utils.assert(nodeIndex === 0, 'input layer has >1 nodes');\n      generic_utils.assert(tensorIndex === 0, 'input layer has >1 tensors');\n      this.inputLayers.push(layer);\n      this.inputLayersNodeIndices.push(nodeIndex);\n      this.inputLayersTensorIndices.push(tensorIndex);\n    }\n\n    // Build this.inputNames and this.outputNames.\n    this.inputNames = [];\n    this.outputNames = [];\n    this.feedInputShapes = [];\n    this.feedInputNames = [];\n    this.feedOutputNames = [];\n    for (let i = 0; i < this.inputLayers.length; i++) {\n      const layer = this.inputLayers[i];\n      // Check that layer is an InputLayer.\n      if (!(layer instanceof InputLayer)) {\n        throw new TypeError(\n            'Input layers to a LayersModel must be InputLayer objects. ' +\n            `Received inputs: ${args.inputs}. ` +\n            `Input ${i} (0-based) originates ` +\n            `from layer type ${layer.getClassName()}.`);\n      }\n      this.inputNames.push(layer.name);\n      this.feedInputShapes.push(layer.batchInputShape);\n\n      this.feedInputNames.push(layer.name);\n    }\n    for (const layer of this.outputLayers) {\n      this.outputNames.push(layer.name);\n    }\n\n    this.internalInputShapes = this.inputs.map(x => x.shape);\n    this.internalOutputShapes = this.outputs.map(x => x.shape);\n\n    /*\n      Container_nodes: set of nodes included in the graph (not all nodes\n      included in the layers are relevant to the current graph).\n    */\n    // ids of all nodes relevant to the Container:\n    const nodesDepths: {[nodeID: string]: number} = {};\n    // To recover nodes from their ID.\n    const nodeIDToNode: {[nodeID: string]: Node} = {};\n    const layersDepths: {[layerID: string]: number} = {};\n    // To layers from their ID.\n    const layerIDToLayer: {[layerID: string]: Layer} = {};\n    const layerIndices: {[layerID: string]: number} = {};\n    const nodesInDecreasingDepth: Node[] = [];\n\n    /**\n     * Builds a map of the graph of layers.\n     *\n     * This recursively updates the map `layerIndices`,\n     * the list `nodesInDecreasingDepth` and the set `containerNodes`.\n     *\n     * @param tensor Some tensor in a graph.\n     * @param finishedNodes Set of nodes whose subgraphs have been traversed\n     *         completely. Useful to prevent duplicated work.\n     * @param nodesInProgress Set of nodes that are currently active on the\n     *         recursion stack. Useful to detect cycles.\n     * @param layer Layer from which `tensor` comes from. If not provided,\n     *   will be obtained from tensor.sourceLayer.\n     * @param nodeIndex Node index from which `tensor` comes from.\n     * @param tensorIndex TensorIndex from which `tensor` comes from.\n     *\n     * @exception RuntimeError if a cycle is detected.\n     */\n    const buildMapOfGraph =\n        (tensor: SymbolicTensor, finishedNodes: Node[], nodesInProgress: Node[],\n         layer?: Layer, nodeIndex?: number, tensorIndex?: number) => {\n          if (layer == null || nodeIndex == null || tensorIndex == null) {\n            layer = tensor.sourceLayer;\n            nodeIndex = tensor.nodeIndex;\n            tensorIndex = tensor.tensorIndex;\n          }\n          const node = layer.inboundNodes[nodeIndex];\n\n          // Prevent cycles.\n          if (nodesInProgress.indexOf(node) !== -1) {\n            throw new RuntimeError(\n                `The tensor ${tensor.name} at layer \"${layer.name}\" ` +\n                'is part of a cycle.');\n          }\n\n          // Don't repeat work for shared subgraphs\n          if (finishedNodes.indexOf(node) !== -1) {\n            return;\n          }\n\n          // Update containerNodes.\n          this.containerNodes.add(Container.nodeKey(layer, nodeIndex));\n\n          // Store the traversal order for layer sorting.\n          if (!(layer.id in layerIndices)) {\n            layerIndices[layer.id] = Object.keys(layerIndices).length;\n          }\n\n          if (nodesInProgress.indexOf(node) === -1) {\n            nodesInProgress.push(node);\n          }\n\n          // Propagate to all previous tensors connected to this node.\n          const numInboundLayers = node.inboundLayers.length;\n          for (let i = 0; i < numInboundLayers; i++) {\n            const x = node.inputTensors[i];\n            const layer = node.inboundLayers[i];\n            const nodeIndex = node.nodeIndices[i];\n            const tensorIndex = node.tensorIndices[i];\n            buildMapOfGraph(\n                x, finishedNodes, nodesInProgress, layer, nodeIndex,\n                tensorIndex);\n          }\n          finishedNodes.push(node);\n          while (nodesInProgress.indexOf(node) >= 0) {\n            nodesInProgress.splice(nodesInProgress.indexOf(node), 1);\n          }\n          nodesInDecreasingDepth.push(node);\n        };\n\n    const finishedNodes: Node[] = [];\n    const nodesInProgress: Node[] = [];\n    for (const x of this.outputs) {\n      buildMapOfGraph(x, finishedNodes, nodesInProgress);\n    }\n\n    const reversedNodesInDecreasingDepth =\n        nodesInDecreasingDepth.slice().reverse();\n    for (const node of reversedNodesInDecreasingDepth) {\n      nodeIDToNode[node.id] = node;\n      // If the depth is not set, the node has no outbound nodes (depth 0).\n      if (!(node.id in nodesDepths)) {\n        nodesDepths[node.id] = 0;\n      }\n      let depth = nodesDepths[node.id];\n\n      // Update the depth of the corresponding layer\n      const previousDepth =\n          (layersDepths[node.outboundLayer.id] == null ?\n               0 :\n               layersDepths[node.outboundLayer.id]);\n\n      /*\n        If we've seen this layer before at a higher depth, we should use that\n        depth instead of the node depth.  This is necessary for shared layers\n        that have inputs at different depth levels in the graph.\n      */\n      depth = Math.max(depth, previousDepth);\n      layersDepths[node.outboundLayer.id] = depth;\n      layerIDToLayer[node.outboundLayer.id] = node.outboundLayer;\n      nodesDepths[node.id] = depth;\n\n      // Update the depth of inbound nodes.\n      for (let i = 0; i < node.inboundLayers.length; i++) {\n        const inboundLayer = node.inboundLayers[i];\n        const nodeIndex = node.nodeIndices[i];\n        const inboundNode = inboundLayer.inboundNodes[nodeIndex];\n        const previousDepth =\n            (nodesDepths[inboundNode.id] == null ? 0 :\n                                                   nodesDepths[inboundNode.id]);\n        nodesDepths[inboundNode.id] = Math.max(depth + 1, previousDepth);\n        nodeIDToNode[inboundNode.id] = inboundNode;\n      }\n    }\n\n    // Build a dict {depth: list of nodes with this depth}\n    const nodesByDepth: {[depth: string]: Node[]} = {};\n    for (const nodeID in nodesDepths) {\n      const depth = nodesDepths[nodeID];\n      if (!(depth in nodesByDepth)) {\n        nodesByDepth[depth] = [];\n      }\n      nodesByDepth[depth].push(nodeIDToNode[nodeID]);\n    }\n\n    // Build a dict {depth: list of layers with this depth}\n    const layersByDepth: {[depth: string]: Layer[]} = {};\n    for (const layerID in layersDepths) {\n      const depth = layersDepths[layerID];\n      if (!(depth in layersByDepth)) {\n        layersByDepth[depth] = [];\n      }\n      layersByDepth[depth].push(layerIDToLayer[layerID]);\n    }\n\n    // Get sorted list of layer depths.\n    let depthKeys = Object.keys(layersByDepth)\n                        .map(x => parseInt(x, 10))\n                        .sort(generic_utils.reverseNumberCompare);\n\n    // Set this.layers and this.layersByDepth.\n    this.layers = [];\n    for (const depth of depthKeys) {\n      const layersForDepth = layersByDepth[depth];\n      // Container.layers needs to have a deterministic order:\n      // here we order them by traversal order.\n      layersForDepth.sort((a, b) => {\n        const aIndex = layerIndices[a.id];\n        const bIndex = layerIndices[b.id];\n        if (aIndex < bIndex) {\n          return -1;\n        }\n        if (aIndex > bIndex) {\n          return 1;\n        }\n        return 0;\n      });\n      for (const layer of layersForDepth) {\n        if (layer instanceof Container) {\n          this.internalContainerRefs.push(layer);\n        }\n        this.layers.push(layer);\n      }\n    }\n    this.layersByDepth = layersByDepth;\n\n    // Get sorted list of node depths;\n    depthKeys = Object.keys(nodesByDepth)\n                    .map(x => parseInt(x, 10))\n                    .sort(generic_utils.reverseNumberCompare);\n\n    // Check that all tensors required are computable.\n    // computable_tensors: all tensors in the graph\n    // that can be computed from the inputs provided.\n    const computableTensors = this.inputs.slice();\n\n    // To provide a better error msg.\n    const layersWithCompleteInput: string[] = [];\n    for (const depth of depthKeys) {\n      for (const node of nodesByDepth[depth]) {\n        const layer = node.outboundLayer;\n        if (layer != null) {\n          for (const x of node.inputTensors) {\n            if (computableTensors.indexOf(x) === -1) {\n              throw new RuntimeError(\n                  `Graph disconnected: cannot obtain value for tensor ${x}` +\n                  ` at layer \"${layer.name}\". ` +\n                  'The following previous layers were accessed without ' +\n                  `issue: ${layersWithCompleteInput}`);\n            }\n          }\n          for (const x of node.outputTensors) {\n            computableTensors.push(x);\n          }\n          layersWithCompleteInput.push(layer.name);\n        }\n      }\n    }\n\n    // Set this.containerNodes and this.nodesByDepth.\n    this.nodesByDepth = nodesByDepth;\n\n    // Ensure name unicity, which will be crucial for serialization\n    // (since serialized nodes refer to layers by their name).\n    const allNames = this.layers.map(x => x.name);\n    for (const name of allNames) {\n      const numOccurrences = allNames.filter(x => x === name).length;\n      if (numOccurrences !== 1) {\n        throw new RuntimeError(\n            `The name \"${name}\" is used ${numOccurrences} times ` +\n            'in the model. All layer names should be unique. Layer names: ' +\n            JSON.stringify(allNames));\n      }\n    }\n\n    // Layer parameters.\n    // The new container starts with a single inbound node\n    // for its inputs, and no outbound nodes.\n    // Will be appended to by future calls to apply().\n    this.outboundNodes = [];\n    // Will be appended to below, and by future calls to apply().\n    this.inboundNodes = [];\n\n    // Create the node linking internal inputs to internal outputs.\n    // (This call has side effects.)\n    // tslint:disable-next-line:no-unused-expression\n    new Node({\n      outboundLayer: this,\n      inboundLayers: [],\n      nodeIndices: [],\n      tensorIndices: [],\n      inputTensors: this.inputs,\n      outputTensors: this.outputs,\n      inputMasks: this.inputs.map(x => null),\n      outputMasks: this.outputs.map(x => null),\n      inputShapes: this.inputs.map(x => x.shape),\n      outputShapes: this.outputs.map(x => x.shape)\n    });\n    this.built = true;\n    this._refCount = 1;  // The ref count of a container always start at 1.\n  }\n\n  protected assertNotDisposed() {\n    if (this._refCount === 0) {\n      throw new Error(`Container '${this.name}' is already disposed.`);\n    }\n  }\n\n  /**\n   * Attempt to dispose a LayersModel's weights.\n   *\n   * This method decrease the reference count of the LayersModel object by 1.\n   *\n   * A LayersModel is reference-counted. Its reference count is incremented by 1\n   * when it is first constructed and when it is used as a Layer of another\n   * LayersModel.\n   *\n   * If the reference count of a LayersModel becomes 0, the `dispose` method of\n   * all its constituent `Layer`s will be called.\n   *\n   * Note: If the reference count is greater than 0 after the decrement, the\n   * `dispose` method of its constituent `Layer`s will *not* be called.\n   *\n   * After a LayersModel is disposed, it cannot be used in calls such as\n   * 'predict`, `evaluate` or `fit` anymore.\n   *\n   * @returns A DisposeResult Object with the following fields:\n   *   - refCountAfterDispose: The reference count of the LayersModel after this\n   *     `dispose()` call.\n   *   - numDisposedVariables: Number of `tf.Variable`s (i.e., weights) disposed\n   *     during this `dispose()` call.\n   * @throws {Error} If the layer is not built yet, or if the LayersModel has\n   *   already been disposed.\n   */\n  dispose(): DisposeResult {\n    this.assertNotDisposed();\n    const result:\n        DisposeResult = {refCountAfterDispose: null, numDisposedVariables: 0};\n    if (--this._refCount === 0) {\n      for (const layer of this.layers) {\n        result.numDisposedVariables += layer.dispose().numDisposedVariables;\n      }\n\n      // Call dispose on each internally created container layer again to ensure\n      // their refCounts hit zero and their tensors are subsequently deleted.\n      for (const container of this.internalContainerRefs) {\n        result.numDisposedVariables += container.dispose().numDisposedVariables;\n      }\n    }\n    result.refCountAfterDispose = this._refCount;\n    return result;\n  }\n\n  get trainable() {\n    return this.trainable_;\n  }\n\n  set trainable(trainable: boolean) {\n    this.layers.forEach(layer => {\n      // tslint:disable-next-line:no-any\n      ((layer as any)._trainableWeights as LayerVariable[])\n          .forEach(w => w.trainable = trainable);\n    });\n    this.trainable_ = trainable;\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    // Porting Note: This check below is to prevent errors where the\n    //   _trainableWeights inherited from the parent class (Layer) gets\n    //   inadvertently used.\n    if (this._trainableWeights.length > 0) {\n      throw new ValueError(\n          'Container instance unexpectedly contains _trainableWeights.' +\n          'The trainable weights of a Container are a union of the ' +\n          'trainable weights of its consituent Layers. Its own ' +\n          '_trainableWeights must remain an empty Array.');\n    }\n\n    if (!this.trainable) {\n      return [];\n    }\n    let weights: LayerVariable[] = [];\n    for (const layer of this.layers) {\n      weights = weights.concat(layer.trainableWeights);\n    }\n    return weights;\n  }\n\n  get nonTrainableWeights(): LayerVariable[] {\n    const weights: LayerVariable[] = [];\n    for (const layer of this.layers) {\n      weights.push(...layer.nonTrainableWeights);\n    }\n    if (!this.trainable) {\n      const trainableWeights: LayerVariable[] = [];\n      for (const layer of this.layers) {\n        trainableWeights.push(...layer.trainableWeights);\n      }\n      return trainableWeights.concat(weights);\n    }\n    return weights;\n  }\n\n  get weights(): LayerVariable[] {\n    return this.trainableWeights.concat(this.nonTrainableWeights);\n  }\n\n  /**\n   * Loads all layer weights from a JSON object.\n   *\n   * Porting Note: HDF5 weight files cannot be directly loaded in JavaScript /\n   *   TypeScript. The utility script at `scripts/pykeras.py` offers means\n   *   to convert them into JSON strings compatible with this method.\n   * Porting Note: TensorFlow.js Layers supports only loading by name currently.\n   *\n   * @param weights A JSON mapping weight names to weight values as nested\n   *   arrays of numbers, or a `NamedTensorMap`, i.e., a JSON mapping weight\n   *   names to `tf.Tensor` objects.\n   * @param strict Require that the provided weights exactly match those\n   *   required by the container.  Default: `true`.  Passing `false` means that\n   *   extra weights and missing weights will be silently ignored.\n   */\n  loadWeights(weights: NamedTensorMap, strict = true) {\n    const nameToWeight: {[name: string]: LayerVariable} = {};\n    let totalWeightsCount = 0;\n    for (const layer of this.layers) {\n      for (const weight of layer.weights) {\n        if (nameToWeight[weight.originalName] != null) {\n          throw new ValueError(`Duplicate weight name: ${weight.originalName}`);\n        }\n        nameToWeight[weight.originalName] = weight;\n        totalWeightsCount++;\n      }\n    }\n\n    const weightValueTuples: Array<[LayerVariable, Tensor]> = [];\n    for (const name in weights) {\n      if (nameToWeight[name] != null) {\n        weightValueTuples.push([nameToWeight[name], weights[name]]);\n      } else if (strict) {\n        throw new ValueError(\n            `Provided weight data has no target variable: ${name}`);\n      }\n      delete nameToWeight[name];\n    }\n\n    if (strict) {\n      // Check that all weights are set.\n      const unsetNames: string[] = [];\n      for (const name in nameToWeight) {\n        unsetNames.push(name);\n      }\n      if (unsetNames.length > 0) {\n        throw new ValueError(\n            `${unsetNames.length} of ${\n                totalWeightsCount} weights are not set: ` +\n            `${unsetNames}`);\n      }\n    }\n\n    batchSetValue(weightValueTuples);\n  }\n\n  /**\n   * Util shared between different serialization methods.\n   * @returns LayersModel config with Keras version information added.\n   */\n  protected updatedConfig(): serialization.ConfigDict {\n    const theConfig = this.getConfig();\n    const modelConfig: serialization.ConfigDict = {};\n    modelConfig['className'] = this.getClassName();\n    modelConfig['config'] = theConfig;\n    modelConfig['kerasVersion'] = `tfjs-layers ${layersVersion}`;\n    // TODO(nielsene): Replace something like K.backend() once\n    // possible.\n    modelConfig['backend'] = 'TensorFlow.js';\n    return modelConfig;\n  }\n\n  /**\n   * Returns a JSON string containing the network configuration.\n   *\n   * To load a network from a JSON save file, use\n   * models.modelFromJSON(jsonString);\n   * @param extraJsonArgs Unused in tfjs-layers, maintained for PyKeras\n   * @param returnString Whether the return value should be stringified\n   *    (default: `true`).\n   * @returns a JSON string if `returnString` (default), or a JSON object if\n   *   `!returnString`.\n   */\n  // tslint:disable-next-line:no-any\n  toJSON(unused?: any, returnString = true): string|PyJsonDict {\n    const modelConfig = convertTsToPythonic(this.updatedConfig()) as PyJsonDict;\n    return returnString ? JSON.stringify(modelConfig) : modelConfig;\n  }\n\n  /**\n   * Call the model on new inputs.\n   *\n   * In this case `call` just reapplies all ops in the graph to the new inputs\n   * (e.g. build a new computational graph from the provided inputs).\n   *\n   * @param inputs A tensor or list of tensors.\n   * @param mask A mask or list of masks. A mask can be either a tensor or null\n   *   (no mask).\n   *\n   * @return A tensor if there is a single output, or a list of tensors if there\n   *   are more than one outputs.\n   */\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = generic_utils.toList(inputs);\n      const feedDict = new FeedDict();\n      for (let i = 0; i < this.inputs.length; ++i) {\n        feedDict.add(this.inputs[i], inputs[i]);\n      }\n      return execute(this.outputs, feedDict, kwargs) as Tensor | Tensor[];\n    });\n  }\n\n  /**\n   * Computes an output mask tensor.\n   *\n   * @param inputs Tensor or list of tensors.\n   * @param mask Tensor or list of tensors.\n   *\n   * @return null or a tensor (or list of tensors, one per output tensor of the\n   * layer).\n   */\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor\n      |Tensor[] {\n    return tidy(() => {\n      inputs = generic_utils.toList(inputs);\n      let masks: Tensor[];\n      if (mask == null) {\n        masks = generic_utils.pyListRepeat(null, inputs.length);\n      } else {\n        masks = generic_utils.toList(mask);\n      }\n      // TODO(michaelterry): Add support for mask caching.\n      return this.runInternalGraph(inputs, masks)[1];\n    });\n  }\n\n  /**\n   * Computes the output shape of the layer.\n   *\n   * Assumes that the layer will be built to match that input shape provided.\n   *\n   * @param inputShape A shape (tuple of integers) or a list of shape tuples\n   *   (one per output tensor of the layer). Shape tuples can include null for\n   *   free dimensions, instead of an integer.\n   */\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    const inputShapes = types_utils.normalizeShapeList(inputShape);\n    if (inputShapes.length !== this.inputLayers.length) {\n      throw new ValueError(\n          `Invalid inputShape argument ${inputShape}: ` +\n          `model has ${this.inputLayers.length} tensor inputs.`);\n    }\n\n    // TODO(michaelterry): Add caching\n    const layersToOutputShapes: {[shapeKey: string]: Shape} = {};\n    for (let i = 0; i < inputShapes.length; i++) {\n      const layer = this.inputLayers[i];\n      const inputShape = inputShapes[i];\n      // It's an input layer: computeOutputShape is identity,\n      // and there is only one node and one tensor output.\n      const shapeKey = layer.name + '_0_0';\n      layersToOutputShapes[shapeKey] = inputShape;\n    }\n\n    const depthKeys = Object.keys(this.nodesByDepth)\n                          .map(x => parseInt(x, 10))\n                          .sort(generic_utils.reverseNumberCompare);\n    // Iterate over nodes, by depth level.\n    if (depthKeys.length > 1) {\n      for (const depth of depthKeys) {\n        const nodes = this.nodesByDepth[depth];\n        for (const node of nodes) {\n          // This is always a single layer, never a list.\n          const layer = node.outboundLayer;\n          if (this.inputLayers.map(x => x.id).indexOf(layer.id) !== -1) {\n            // We've already covered the input layers a few lines above.\n            continue;\n          }\n          // Potentially redundant list, same size of node.inputTensors.\n          const inputShapes: Shape[] = [];\n          for (let j = 0; j < node.inboundLayers.length; j++) {\n            const inboundLayer = node.inboundLayers[j];\n            const nodeIndex = node.nodeIndices[j];\n            const tensorIndex = node.tensorIndices[j];\n            const shapeKey = `${inboundLayer.name}_${nodeIndex}_${tensorIndex}`;\n            const inputShape = layersToOutputShapes[shapeKey];\n            inputShapes.push(inputShape);\n          }\n\n          const outputShape = layer.computeOutputShape(\n              generic_utils.singletonOrArray(inputShapes));\n\n          const outputShapes = types_utils.normalizeShapeList(outputShape);\n          const nodeIndex = layer.inboundNodes.indexOf(node);\n          for (let j = 0; j < outputShapes.length; j++) {\n            const shapeKey = `${layer.name}_${nodeIndex}_${j}`;\n            layersToOutputShapes[shapeKey] = outputShapes[j];\n          }\n        }\n      }\n    }\n\n    // Read final output shapes from layersToOutputShapes.\n    const outputShapes: Shape[] = [];\n    const outputShapeKeys: string[] = [];\n    for (let i = 0; i < this.outputLayers.length; i++) {\n      const layer = this.outputLayers[i];\n      const nodeIndex = this.outputLayersNodeIndices[i];\n      const tensorIndex = this.outputLayersTensorIndices[i];\n      const shapeKey = `${layer.name}_${nodeIndex}_${tensorIndex}`;\n      outputShapeKeys.push(shapeKey);\n    }\n\n    for (let i = 0; i < outputShapeKeys.length; i++) {\n      const key = outputShapeKeys[i];\n      generic_utils.assert(key in layersToOutputShapes);\n      outputShapes.push(layersToOutputShapes[key]);\n    }\n\n    // TODO(michaelterry): Update cache\n    return generic_utils.singletonOrArray(outputShapes);\n  }\n\n  /**\n   * Computes output tensors for new inputs.\n   *\n   * Note:\n   *   - Expects `inputs` to be a list (potentially with 1 element).\n   *\n   * @param inputs List of tensors\n   * @param masks List of masks (tensors or null).\n   * @return Three lists: outputTensors, outputMasks, outputShapes\n   */\n  protected runInternalGraph(inputs: Tensor[], masks?: Tensor[]):\n      [Tensor[], Tensor[], Shape[]] {\n    if (masks == null) {\n      masks = generic_utils.pyListRepeat(null, inputs.length);\n    }\n\n    // Dictionary mapping reference tensors to tuples\n    // (computed tensor, compute mask)\n    // we assume a 1:1 mapping from tensor to mask\n    // TODO: raise exception when a `.computeMask()` call\n    // does not return a list the same size as `call`\n    const tensorMap: {[tensorID: string]: [Tensor, Tensor]} = {};\n    for (let i = 0; i < this.inputs.length; ++i) {\n      const x = this.inputs[i];\n      const y = inputs[i];\n      const mask = masks[i];\n      tensorMap[x.id] = [y, mask];\n    }\n\n    const depthKeys = Object.keys(this.nodesByDepth)\n                          .map(x => parseInt(x, 10))\n                          .sort(generic_utils.reverseNumberCompare);\n    for (const depth of depthKeys) {\n      const nodes = this.nodesByDepth[depth];\n      for (const node of nodes) {\n        // This is always a single layer, never a list.\n        const layer = node.outboundLayer;\n        const referenceInputTensors = node.inputTensors;\n        const referenceOutputTensors = node.outputTensors;\n\n        // If all previous input tensors are available in tensorMap,\n        // then call node.inboundLayer on them.\n        // List of tuples [input, mask]:\n        const computedData = new Array<[Tensor, Tensor]>();\n        for (const x of referenceInputTensors) {\n          if (x.id in tensorMap) {\n            computedData.push(tensorMap[x.id]);\n          }\n        }\n        if (computedData.length === referenceInputTensors.length) {\n          // TODO(michaelterry): Add K.name_scope here, if we need it.\n          let kwargs: Kwargs = {};\n          let computedTensors: Tensor[];\n          let computedMasks: Tensor[];\n          let outputTensors: Tensor[];\n          let outputMasks: Tensor[];\n          // call layer\n          if (node.callArgs != null) {\n            kwargs = node.callArgs;\n          }\n          if (computedData.length === 1) {\n            const [computedTensor, computedMask] = computedData[0];\n            if (kwargs['mask'] == null) {\n              kwargs['mask'] = computedMask;\n            }\n            outputTensors =\n                generic_utils.toList(layer.call(computedTensor, kwargs));\n            outputMasks = generic_utils.toList(\n                layer.computeMask(computedTensor, computedMask));\n            computedTensors = [computedTensor];\n            computedMasks = [computedMask];\n          } else {\n            computedTensors = computedData.map(x => x[0]);\n            computedMasks = computedData.map(x => x[1]);\n            if (kwargs['mask'] == null) {\n              kwargs['mask'] = computedMasks;\n            }\n            outputTensors =\n                generic_utils.toList(layer.call(computedTensors, kwargs));\n            outputMasks = generic_utils.toList(\n                layer.computeMask(computedTensors, computedMasks));\n          }\n\n          if (layer.activityRegularizer) {\n            throw new NotImplementedError(\n                'LayersModel invocation with concrete Tensor value(s) in the ' +\n                'presence of activity regularizer(s) is not supported yet.');\n          }\n          // TODO(michaelterry): Add model updates and losses\n\n          // Update tensor map.\n          for (let i = 0; i < referenceOutputTensors.length; ++i) {\n            const x = referenceOutputTensors[i];\n            const y = outputTensors[i];\n            const mask = outputMasks[i];\n            tensorMap[x.id] = [y, mask];\n          }\n        }\n      }\n    }\n\n    const outputTensors: Tensor[] = [];\n    const outputMasks: Tensor[] = [];\n    const outputShapes: Shape[] = [];\n    for (const x of this.outputs) {\n      generic_utils.assert(\n          x.id in tensorMap, `Could not compute output ${x.name} : ${x.id}`);\n      const [tensor, mask] = tensorMap[x.id];\n      outputShapes.push(tensor.shape);\n      outputTensors.push(tensor);\n      outputMasks.push(mask);\n    }\n\n    // TODO(michaelterry): Add support for caches.\n    return [outputTensors, outputMasks, outputShapes];\n  }\n\n  /**\n   * Builds a map of internal node keys to node ordering.\n   * Used in serializaion a node orderings may change as unused nodes are\n   * dropped. Porting Note:  This helper method was pulled out of getConfig to\n   * improve readability.\n   * @param layers An array of Layers in the model.\n   * @returns Map of Node Keys to index order within the layer.\n   */\n  private buildNodeConversionMap(layers: Layer[]): {[nodeKey: string]: number} {\n    const nodeConversionMap: {[nodeKey: string]: number} = {};\n    let keptNodes: number;\n    for (const layer of this.layers) {\n      keptNodes = layer instanceof Container ? 1 : 0;\n      for (let originalNodeIndex = 0;\n           originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) {\n        const nodeKey = Container.nodeKey(layer, originalNodeIndex);\n        if (this.containerNodes.has(nodeKey)) {\n          // i.e. we mark it to be saved\n          nodeConversionMap[nodeKey] = keptNodes;\n          keptNodes += 1;\n        }\n      }\n    }\n    return nodeConversionMap;\n  }\n\n  /**\n   * Retrieves a layer based on either its name (unique) or index.\n   *\n   * Indices are based on order of horizontal graph traversal (bottom-up).\n   *\n   * If both `name` and `index` are specified, `index` takes precedence.\n   *\n   * @param name Name of layer.\n   * @param index Index of layer.\n   * @returns A Layer instance.\n   * @throws ValueError: In case of invalid layer name or index.\n   */\n  /**\n   * @doc {\n   *    heading: 'Layers',\n   *    subheading: 'Classes',\n   *    namespace: 'layers',\n   *    subclasses: ['LayersModel']\n   * }\n   */\n  getLayer(name?: string, index?: number): Layer {\n    if (index != null) {\n      if (this.layers.length <= index) {\n        throw new ValueError(\n            `Was asked to retrieve layer at index ${index}, but model only ` +\n            `has ${this.layers.length} layer(s).`);\n      } else {\n        return this.layers[index];\n      }\n    } else {\n      if (name == null) {\n        throw new ValueError('Provide either a layer name or layer index');\n      }\n    }\n\n    for (const layer of this.layers) {\n      if (layer.name === name) {\n        return layer;\n      }\n    }\n    throw new ValueError(`No such layer: ${name}`);\n  }\n\n  /**\n   * Retrieves the Container's current loss values.\n   *\n   * Used for regularizers during training.\n   */\n  calculateLosses(): Scalar[] {\n    // Porting Node: This is an augmentation to Container.loss in PyKeras.\n    //   In PyKeras, Container.loss returns symbolic tensors. Here a concrete\n    //   Tensor (specifically Scalar) values are returned. This is due to the\n    //   imperative backend.\n    return tidy(() => {\n      const losses: Scalar[] = [];\n      for (const layer of this.layers) {\n        for (let nodeIndex = 0; nodeIndex < layer.inboundNodes.length;\n             ++nodeIndex) {\n          const nodeKey = Container.nodeKey(layer, nodeIndex);\n          if (this.containerNodes.has(nodeKey)) {\n            losses.push(...layer.calculateLosses());\n          }\n        }\n      }\n      // TODO(cais): Add any unconditional model-level losses?\n      return losses;\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {name: this.name};\n\n    // Build a map from layer unique name (self._node_key)\n    // to the index of the nodes that are saved in the config.\n    // Only nodes in container_nodes are saved.\n    const nodeConversionMap: {[nodeKey: string]: number} =\n        this.buildNodeConversionMap(this.layers);\n\n    // Serialize and save the layers in layerConfigs\n    const layerConfigs = [];\n    for (const layer of this.layers) {\n      const layerClassName = layer.getClassName();\n      const layerConfig = layer.getConfig();\n      const filteredInboundNodes = [];\n      for (let originalNodeIndex = 0;\n           originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) {\n        const node = layer.inboundNodes[originalNodeIndex];\n        const nodeKey = Container.nodeKey(layer, originalNodeIndex);\n        let kwargs = {};\n        if (this.containerNodes.has(nodeKey)) {\n          // The node is relevant to the model:\n          // add to filteredInboundNodes.\n          if (node.callArgs) {\n            try {\n              JSON.stringify(node.callArgs);\n              kwargs = node.callArgs;\n            } catch (err) {\n              console.warn(\n                  `Layer ${layer.name} was passed ` +\n                  `non-serializable keyword arguments: ` +\n                  `${node.callArgs}. They will not be included ` +\n                  `in the serialized model (and thus will be ` +\n                  `missing at deserialization time).`);\n              kwargs = {};\n            }\n          }\n          if (node.inboundLayers.length > 0) {\n            const nodeData = [];\n            for (let i = 0; i < node.inboundLayers.length; i++) {\n              const inboundLayer = node.inboundLayers[i];\n              const nodeIndex = node.nodeIndices[i];\n              const tensorIndex = node.tensorIndices[i];\n              const nodeKey = Container.nodeKey(inboundLayer, nodeIndex);\n              let newNodeIndex = nodeConversionMap[nodeKey];\n              if (newNodeIndex == null) {\n                newNodeIndex = 0;\n              }\n              nodeData.push(\n                  [inboundLayer.name, newNodeIndex, tensorIndex, kwargs]);\n            }\n            filteredInboundNodes.push(nodeData);\n          }\n        }\n      }\n      const dict: serialization.ConfigDict = {};\n      dict['name'] = layer.name;\n      dict['className'] = layerClassName;\n      dict['config'] = layerConfig;\n      dict['inboundNodes'] = filteredInboundNodes;\n      layerConfigs.push(dict);\n    }\n    config['layers'] = layerConfigs;\n    // Gather info about inputs and outputs\n    const modelInputs = [];\n    for (let i = 0; i < this.inputLayers.length; i++) {\n      const layer = this.inputLayers[i];\n      const nodeIndex = this.inputLayersNodeIndices[i];\n\n      const nodeKey = Container.nodeKey(layer, nodeIndex);\n      if (!this.containerNodes.has(nodeKey)) {\n        continue;\n      }\n      let newNodeIndex = nodeConversionMap[nodeKey];\n      if (newNodeIndex === null || newNodeIndex === undefined) {\n        newNodeIndex = 0;\n      }\n      const tensorIndex = this.inputLayersTensorIndices[i];\n      modelInputs.push([layer.name, newNodeIndex, tensorIndex]);\n    }\n    config['inputLayers'] = modelInputs;\n\n    const modelOutputs = [];\n    for (let i = 0; i < this.outputLayers.length; i++) {\n      const layer = this.outputLayers[i];\n      const nodeIndex = this.outputLayersNodeIndices[i];\n\n      const nodeKey = Container.nodeKey(layer, nodeIndex);\n      if (!this.containerNodes.has(nodeKey)) {\n        continue;\n      }\n      let newNodeIndex = nodeConversionMap[nodeKey];\n      if (newNodeIndex === null || newNodeIndex === undefined) {\n        newNodeIndex = 0;\n      }\n      const tensorIndex = this.outputLayersTensorIndices[i];\n      modelOutputs.push([layer.name, newNodeIndex, tensorIndex]);\n    }\n    config['outputLayers'] = modelOutputs;\n    return config;\n  }\n\n  /**\n   * Instantiates a LayersModel from its config (output of `get_config()`).\n   * @param cls the class to create\n   * @param config LayersModel config dictionary.\n   * @param customObjects An optional dictionary of custom objects.\n   * @param fastWeightInit Optional flag to use fast weight initialization\n   *   during deserialization. This is applicable to cases in which\n   *   the initialization will be immediately overwritten by loaded weight\n   *   values. Default: `false`.\n   * @returns A LayersModel instance.\n   * @throws ValueError: In case of improperly formatted config dict.\n   */\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict,\n      customObjects = {} as serialization.ConfigDict,\n      fastWeightInit = false): T {\n    // Layer instances created during\n    // the graph reconstruction process\n    const createdLayers: {[layerName: string]: Layer} = {};\n\n    // Dictionary mapping layer instances to\n    // node data that specifies a layer call.\n    // It acts as a queue that maintains any unprocessed\n    // layer call until it becomes possible to process it\n    // (i.e. until the input tensors to the call all exist).\n    const unprocessedNodes: {[layer: string]: TensorKeyWithArgsArray[][]} = {};\n    function addUnprocessedNode(\n        layer: Layer, nodeData: TensorKeyWithArgsArray[]) {\n      if (!(layer.name in unprocessedNodes)) {\n        unprocessedNodes[layer.name] = [nodeData];\n      } else {\n        unprocessedNodes[layer.name].push(nodeData);\n      }\n    }\n\n    function processNode(layer: Layer, nodeData: TensorKeyWithArgsArray[]) {\n      const inputTensors: SymbolicTensor[] = [];\n      let kwargs;\n      for (const inputData of nodeData) {\n        const inboundLayerName = inputData[0];\n        const inboundNodeIndex = inputData[1];\n        const inboundTensorIndex = inputData[2];\n\n        kwargs = inputData[3] == null ?\n            {} :\n            inputData[3] as serialization.ConfigDict;\n        if (!(inboundLayerName in createdLayers)) {\n          addUnprocessedNode(layer, nodeData);\n          return;\n        }\n        const inboundLayer = createdLayers[inboundLayerName];\n        if (inboundLayer.inboundNodes.length <= inboundNodeIndex) {\n          addUnprocessedNode(layer, nodeData);\n          return;\n        }\n        const inboundNode = inboundLayer.inboundNodes[inboundNodeIndex];\n        inputTensors.push(inboundNode.outputTensors[inboundTensorIndex]);\n      }\n      // Call layer on its inputs, thus creating the node\n      // and building the layer if needed.\n      // Note: This has Eager vs Graph Implications.\n      if (inputTensors.length > 0) {\n        layer.apply(\n            generic_utils.singletonOrArray(inputTensors),\n            kwargs);  // was ** kwargs\n      }\n    }\n\n    /**\n     * Deserialize a layer, then call it on appropriate inputs.\n     * @param layerData: layer config dict.\n     * @throws ValueError: In case of improperly formatted `layer_data`\n     * dict.\n     */\n    function processLayer(layerData: serialization.ConfigDict|null) {\n      const layerName = layerData['name'] as string;\n      // Instantiate layer.\n      const layer =\n          deserializeLayer(\n              layerData,\n              config['customObjects'] != null ?\n                  config['customObjects'] as serialization.ConfigDict :\n                  {}) as Layer;\n      layer.setFastWeightInitDuringBuild(fastWeightInit);\n      createdLayers[layerName] = layer;\n      // Gather layer inputs.\n      const inboundNodesData =\n          layerData['inboundNodes'] as TensorKeyWithArgsArray[][];\n      inboundNodesData.forEach(nodeData => {\n        if (!(nodeData instanceof Array)) {\n          throw new ValueError(\n              `Corrupted configuration, expected array for nodeData: ${\n                  nodeData}`);\n        }\n        // We don't process nodes (i.e. make layer calls)\n        // on the fly because the inbound node may not yet exist,\n        // in case of layer shared at different topological depths\n        // (e.g.a model such as A(B(A(B(x)))))\n        addUnprocessedNode(layer, nodeData);\n      });\n    }\n\n    // First, we create all layers and enqueue nodes to be processed.\n    const name = config['name'];\n    const layersFromConfig = config['layers'] as serialization.ConfigDict[];\n    for (const layerData of layersFromConfig) {\n      processLayer(layerData);\n    }\n\n    // Then we process nodes in order of layer depth.\n    // Nodes that cannot yet be processed(if the inbound node\n    // does not yet exist) are re - enqueued, and the process\n    // is repeated until all nodes are processed.\n    while (!generic_utils.isObjectEmpty(unprocessedNodes)) {\n      for (const layerData of layersFromConfig) {\n        const layer = createdLayers[layerData['name'] as string];\n        if (layer.name in unprocessedNodes) {\n          const currentUnprocessedNodesForLayer = unprocessedNodes[layer.name];\n          delete unprocessedNodes[layer.name];\n          for (const nodeData of currentUnprocessedNodesForLayer) {\n            processNode(layer, nodeData);\n          }\n        }\n      }\n    }\n\n    const inputTensors: SymbolicTensor[] = [];\n    const outputTensors: SymbolicTensor[] = [];\n    const inputLayersFromConfig =\n        config['inputLayers'] as serialization.ConfigDict[];\n    for (const layerData of inputLayersFromConfig) {\n      const layerName = layerData[0] as string;\n      const nodeIndex = layerData[1] as number;\n      const tensorIndex = layerData[2] as number;\n      generic_utils.assert(layerName in createdLayers);\n      const layer = createdLayers[layerName];\n      const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors;\n      inputTensors.push(layerOutputTensors[tensorIndex]);\n    }\n    const outputLayersFromConfig =\n        config['outputLayers'] as serialization.ConfigDict[];\n    for (const layerData of outputLayersFromConfig) {\n      const layerName = layerData[0] as string;\n      const nodeIndex = layerData[1] as number;\n      const tensorIndex = layerData[2] as number;\n      generic_utils.assert(layerName in createdLayers);\n      const layer = createdLayers[layerName];\n      const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors;\n      outputTensors.push(layerOutputTensors[tensorIndex]);\n    }\n    return new cls({inputs: inputTensors, outputs: outputTensors, name});\n  }\n\n  /**\n   * Determine whether the container is stateful.\n   *\n   * Porting Note: this is the equivalent of the stateful @property of\n   *   the Container class in PyKeras.\n   */\n  get stateful(): boolean {\n    // Porting Note: This check is to prevent inadvertent setting of the\n    //   _stateful property of the Container instance.\n    if (this._stateful) {\n      throw new ValueError(\n          'Container instance unexpectedly has _stateful = true. The ' +\n          'statefulness of a Container is determined by the Layers it ' +\n          'contains. Its _stateful property must remain the default false.');\n    }\n    for (const layer of this.layers) {\n      if (layer.stateful) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Reset the state of all stateful constituent layers (if any).\n   *\n   * Examples of stateful layers include RNN layers whose `stateful` property\n   * is set as `true`.\n   */\n  resetStates() {\n    tidy(() => {\n      this.layers.forEach(layer => {\n        // tslint:disable:no-any\n        if (layer.stateful) {\n          layer.resetStates();\n        }\n        // tslint:enable:no-any\n      });\n    });\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {dispose, mul, Tensor, Tensor1D, tensor1d, tidy} from '@tensorflow/tfjs-core';\n\n/**\n * For multi-class classification problems, this object is designed to store a\n * mapping from class index to the \"weight\" of the class, where higher weighted\n * classes have larger impact on loss, accuracy, and other metrics.\n *\n * This is useful for cases in which you want the model to \"pay more attention\"\n * to examples from an under-represented class, e.g., in unbalanced datasets.\n */\nexport type ClassWeight = {\n  [classIndex: number]: number\n};\n\n/**\n * Class weighting for a model with multiple outputs.\n *\n * This object maps each output name to a class-weighting object.\n */\nexport type ClassWeightMap = {\n  [outputName: string]: ClassWeight\n};\n\nfunction standardizeSampleOrClassWeights(\n    xWeight: ClassWeight|ClassWeight[]|ClassWeightMap, outputNames: string[],\n    weightType: 'sampleWeight'|'classWeight'): ClassWeight[] {\n  const numOutputs = outputNames.length;\n  if (xWeight == null || (Array.isArray(xWeight) && xWeight.length === 0)) {\n    return outputNames.map(name => null);\n  }\n  if (numOutputs === 1) {\n    if (Array.isArray(xWeight) && xWeight.length === 1) {\n      return xWeight;\n    } else if (typeof xWeight === 'object' && outputNames[0] in xWeight) {\n      return [(xWeight as ClassWeightMap)[outputNames[0]]];\n    } else {\n      return [xWeight as ClassWeight];\n    }\n  }\n  if (Array.isArray(xWeight)) {\n    if (xWeight.length !== numOutputs) {\n      throw new Error(\n          `Provided ${weightType} is an array of ${xWeight.length} ` +\n          `element(s), but the model has ${numOutputs} outputs. ` +\n          `Make sure a set of weights is provided for each model output.`);\n    }\n    return xWeight;\n  } else if (\n      typeof xWeight === 'object' && Object.keys(xWeight).length > 0 &&\n      typeof (xWeight as ClassWeightMap)[Object.keys(xWeight)[0]] ===\n          'object') {\n    const output: ClassWeight[] = [];\n    outputNames.forEach(outputName => {\n      if (outputName in xWeight) {\n        output.push((xWeight as ClassWeightMap)[outputName]);\n      } else {\n        output.push(null);\n      }\n    });\n    return output;\n  } else {\n    throw new Error(\n        `The model has multiple (${numOutputs}) outputs, ` +\n        `so ${weightType} must be either an array with ` +\n        `${numOutputs} elements or an object with ${outputNames} keys. ` +\n        `Provided ${weightType} not understood: ${JSON.stringify(xWeight)}`);\n  }\n}\n\n/**\n * Standardize class weighting objects.\n *\n * This function takes a single class-weighting object, an array of them,\n * or a map from output name to class-weighting object. It compares it to the\n * output name(s) of the model, base on which it outputs an array of\n * class-weighting objects of which the length matches the number of outputs.\n *\n * @param classWeight Input class-weighting object(s).\n * @param outputNames All output name(s) of the model.\n * @return An array of class-weighting objects. The length of the array matches\n *   the model's number of outputs.\n */\nexport function standardizeClassWeights(\n    classWeight: ClassWeight|ClassWeight[]|ClassWeightMap,\n    outputNames: string[]): ClassWeight[] {\n  return standardizeSampleOrClassWeights(\n      classWeight, outputNames, 'classWeight');\n}\n\nexport function standardizeSampleWeights(\n    classWeight: ClassWeight|ClassWeight[]|ClassWeightMap,\n    outputNames: string[]): ClassWeight[] {\n  return standardizeSampleOrClassWeights(\n      classWeight, outputNames, 'sampleWeight');\n}\n\n/**\n * Standardize by-sample and/or by-class weights for training.\n *\n * Note that this function operates on one model output at a time. For a model\n * with multiple outputs, you must call this function multiple times.\n *\n * @param y The target tensor that the by-sample and/or by-class weight is for.\n *     The values of y are assumed to encode the classes, either directly\n *     as an integer index, or as one-hot encoding.\n * @param sampleWeight By-sample weights.\n * @param classWeight By-class weights: an object mapping class indices\n *     (integers) to a weight (float) to apply to the model's loss for the\n *     samples from this class during training. This can be useful to tell the\n *     model to \"pay more attention\" to samples from an under-represented class.\n * @param sampleWeightMode The mode for the sample weights.\n * @return A Promise of weight tensor, of which the size of the first dimension\n *     matches that of `y`.\n */\nexport async function standardizeWeights(\n    y: Tensor, sampleWeight?: Tensor, classWeight?: ClassWeight,\n    sampleWeightMode?: 'temporal'): Promise<Tensor> {\n  if (sampleWeight != null || sampleWeightMode != null) {\n    // TODO(cais): Once 'temporal' mode is implemented, document it in the doc\n    // string.\n    throw new Error('Support sampleWeight is not implemented yet');\n  }\n\n  if (classWeight != null) {\n    // Apply class weights per sample.\n    const yClasses: Tensor1D = tidy(() => {\n      if (y.shape.length === 1) {\n        // Assume class indices.\n        return y.clone() as Tensor1D;\n      } else if (y.shape.length === 2) {\n        if (y.shape[1] > 1) {\n          // Assume one-hot encoding of classes.\n          const axis = 1;\n          return y.argMax(axis);\n        } else if (y.shape[1] === 1) {\n          // Class index.\n          return y.reshape([y.shape[0]]);\n        } else {\n          throw new Error(\n              `Encountered unexpected last-dimension size (${y.shape[1]}) ` +\n              `during handling of class weights. The size is expected to be ` +\n              `>= 1.`);\n        }\n      } else {\n        throw new Error(\n            `Unexpected rank of target (y) tensor (${y.rank}) during ` +\n            `handling of class weights. The rank is expected to be 1 or 2.`);\n      }\n    });\n\n    const yClassIndices = Array.from(await yClasses.data());\n    dispose(yClasses);\n    const classSampleWeight: number[] = [];\n    yClassIndices.forEach(classIndex => {\n      if (classWeight[classIndex] == null) {\n        throw new Error(\n            `classWeight must contain all classes in the training data. ` +\n            `The class ${classIndex} exists in the data but not in ` +\n            `classWeight`);\n      } else {\n        classSampleWeight.push(classWeight[classIndex]);\n      }\n    });\n\n    return tensor1d(classSampleWeight, 'float32');\n  } else {\n    return null;\n  }\n}\n\n/**\n * Apply per-sample weights on the loss values from a number of samples.\n *\n * @param losses Loss tensor of shape `[batchSize]`.\n * @param sampleWeights Per-sample weight tensor of shape `[batchSize]`.\n * @returns Tensor of the same shape as`losses`.\n */\nexport function computeWeightedLoss(losses: Tensor, sampleWeights: Tensor) {\n  return mul(losses, sampleWeights);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Interfaces and methods for training models using TensorFlow.js datasets.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {scalar} from '@tensorflow/tfjs-core';\nimport {BaseCallback, configureCallbacks, CustomCallbackArgs, History, ModelLoggingVerbosity, standardizeCallbacks, YieldEveryOptions} from '../base_callbacks';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {disposeTensorsInLogs, UnresolvedLogs} from '../logs';\nimport {TensorOrArrayOrMap} from '../types';\nimport {singletonOrArray, toList} from '../utils/generic_utils';\n\nimport {Dataset, LazyIterator} from './dataset_stub';\nimport {ClassWeight, ClassWeightMap, standardizeClassWeights, standardizeWeights} from './training_utils';\n\n/**\n * Interface for configuring model training based on a dataset object.\n */\nexport interface ModelFitDatasetArgs<T> {\n  /**\n   * (Optional) Total number of steps (batches of samples) before\n   * declaring one epoch finished and starting the next epoch. It should\n   * typically be equal to the number of samples of your dataset divided by\n   * the batch size, so that `fitDataset`() call can utilize the entire dataset.\n   * If it is not provided, use `done` return value in `iterator.next()` as\n   * signal to finish an epoch.\n   */\n  batchesPerEpoch?: number;\n\n  /**\n   * The number of times to iterate over the training dataset.\n   *\n   * An integer.\n   */\n  epochs: number;\n\n  /**\n   * Verbosity level.\n   *\n   * Expected to be 0, 1, or 2. Default: 1.\n   *\n   * 0 - No printed message during fit() call.\n   * 1 - In Node.js (tfjs-node), prints the progress bar, together with\n   *     real-time updates of loss and metric values and training speed.\n   *     In the browser: no action. This is the default.\n   * 2 - Not implemented yet.\n   */\n  verbose?: ModelLoggingVerbosity;\n\n  /**\n   * List of callbacks to be called during training.\n   * Can have one or more of the following callbacks:\n   *   - `onTrainBegin(logs)`: called when training starts.\n   *   - `onTrainEnd(logs)`: called when training ends.\n   *   - `onEpochBegin(epoch, logs)`: called at the start of every epoch.\n   *   - `onEpochEnd(epoch, logs)`: called at the end of every epoch.\n   *   - `onBatchBegin(batch, logs)`: called at the start of every batch.\n   *   - `onBatchEnd(batch, logs)`: called at the end of every batch.\n   *   - `onYield(epoch, batch, logs)`: called every `yieldEvery` milliseconds\n   *      with the current epoch, batch and logs. The logs are the same\n   *      as in `onBatchEnd()`. Note that `onYield` can skip batches or\n   *      epochs. See also docs for `yieldEvery` below.\n   */\n  callbacks?: BaseCallback[]|CustomCallbackArgs|CustomCallbackArgs[];\n\n  /**\n   * Data on which to evaluate the loss and any model\n   * metrics at the end of each epoch. The model will not be trained on this\n   * data. This could be any of the following:\n   *\n   *   - An array `[xVal, yVal]`, where the two values may be `tf.Tensor`,\n   *     an array of Tensors, or a map of string to Tensor.\n   *   - Similarly, an array ` [xVal, yVal, valSampleWeights]`\n   *     (not implemented yet).\n   *   - a `Dataset` object with elements of the form `{xs: xVal, ys: yVal}`,\n   *     where `xs` and `ys` are the feature and label tensors, respectively.\n   *\n   * If `validationData` is an Array of Tensor objects, each `tf.Tensor` will be\n   * sliced into batches during validation, using the parameter\n   * `validationBatchSize` (which defaults to 32). The entirety of the\n   * `tf.Tensor` objects will be used in the validation.\n   *\n   * If `validationData` is a dataset object, and the `validationBatches`\n   * parameter is specified, the validation will use `validationBatches` batches\n   * drawn from the dataset object. If `validationBatches` parameter is not\n   * specified, the validation will stop when the dataset is exhausted.\n   *\n   * The model will not be trained on this data.\n   */\n  validationData?: [\n    TensorOrArrayOrMap, TensorOrArrayOrMap\n  ]|[TensorOrArrayOrMap, TensorOrArrayOrMap, TensorOrArrayOrMap]|Dataset<T>;\n\n  /**\n   * Optional batch size for validation.\n   *\n   * Used only if `validationData` is an array of `tf.Tensor` objects, i.e., not\n   * a dataset object.\n   *\n   * If not specified, its value defaults to 32.\n   */\n  validationBatchSize?: number;\n\n  /**\n   * (Optional) Only relevant if `validationData` is specified and is a dataset\n   * object.\n   *\n   * Total number of batches of samples to draw from `validationData` for\n   * validation purpose before stopping at the end of every epoch. If not\n   * specified, `evaluateDataset` will use `iterator.next().done` as signal to\n   * stop validation.\n   */\n  validationBatches?: number;\n\n  /**\n   * Configures the frequency of yielding the main thread to other tasks.\n   *\n   * In the browser environment, yielding the main thread can improve the\n   * responsiveness of the page during training. In the Node.js environment,\n   * it can ensure tasks queued in the event loop can be handled in a timely\n   * manner.\n   *\n   * The value can be one of the following:\n   *   - `'auto'`: The yielding happens at a certain frame rate (currently set\n   *               at 125ms). This is the default.\n   *   - `'batch'`: yield every batch.\n   *   - `'epoch'`: yield every epoch.\n   *   - a `number`: Will yield every `number` milliseconds.\n   *   - `'never'`: never yield. (But yielding can still happen through `await\n   *      nextFrame()` calls in custom callbacks.)\n   */\n  yieldEvery?: YieldEveryOptions;\n\n  /**\n   * Epoch at which to start training (useful for resuming a previous training\n   * run).\n   */\n  initialEpoch?: number;\n\n  /**\n   * Optional object mapping class indices (integers) to\n   * a weight (float) to apply to the model's loss for the samples from this\n   * class during training. This can be useful to tell the model to \"pay more\n   * attention\" to samples from an under-represented class.\n   *\n   * If the model has multiple outputs, a class weight can be specified for\n   * each of the outputs by setting this field an array of weight object\n   * or a object that maps model output names (e.g., `model.outputNames[0]`)\n   * to weight objects.\n   */\n  classWeight?: ClassWeight|ClassWeight[]|ClassWeightMap;\n}\n\nexport interface FitDatasetElement {\n  xs: TensorOrArrayOrMap;\n  ys: TensorOrArrayOrMap;\n}\n\n/**\n * Interface for configuring model evaluation based on a dataset object.\n */\nexport interface ModelEvaluateDatasetArgs {\n  /**\n   * Number of batches to draw from the dataset object before ending the\n   * evaluation.\n   */\n  batches?: number;\n\n  /**\n   * Verbosity mode.\n   */\n  verbose?: ModelLoggingVerbosity;\n}\n\n// Default batch size used during tensor-based validation.\nconst DEFAULT_VALIDATION_BATCH_SIZE = 32;\n\n/**\n * Standardize the output of a dataset iterator for use by\n * LayersModel.fitDataset().\n *\n * @param model: A `tf.LayersModel` object.\n * @param iteratorOut The output of a dataset iterator. It is required to be\n *   an object of the form `{xs: TensorOrArrayOrMap, ys:\n * TensorOrArrayOrMap}`, where `TensorOrArrayOrMap` is a single `tf.Tensor`,\n * a `tf.Tensor[]`, or a flat map from string names to `tf.Tensor`s.\n * @returns A flat array of `tf.Tensor` objects: the input `tf.Tensor`s\n *   followed by the target `tf.Tensor`s.  When `tf.Tensor`s are provided\n *   as a map, the order in the resulting array is taken from the `inputNames`\n *   and `outputNames` of the model.\n */\nfunction standardizeDataIteratorOutput(\n    // Type `model` as `any` here to avoid circular dependency w/\n    // training.ts.\n    // tslint:disable-next-line:no-any\n    model: any, iteratorOut: {}): {xs: tfc.Tensor[], ys: tfc.Tensor[]} {\n  let xs: TensorOrArrayOrMap;\n  let ys: TensorOrArrayOrMap;\n\n  const iteratorOutObj = iteratorOut as FitDatasetElement;\n  xs = iteratorOutObj['xs'];\n  ys = iteratorOutObj['ys'];\n  tfc.util.assert(\n      xs != null && ys != null,\n      () => 'A Dataset iterator for fitDataset() is expected to generate ' +\n          'objects of the form `{xs: xVal, ys: yVal}`, where the two ' +\n          'values may be `tf.Tensor`, an array of Tensors, or a map of ' +\n          'string to Tensor.  The provided Dataset instead generates ' +\n          `${iteratorOut}`);\n\n  const flattenedXs: tfc.Tensor[] =\n      flattenTensorOrArrayOrMap('input', model.inputNames, xs);\n  const flattenedYs: tfc.Tensor[] =\n      flattenTensorOrArrayOrMap('output', model.outputNames, ys);\n\n  const batchSize: number = flattenedXs[0].shape[0];\n\n  tfc.util.assert(\n      flattenedXs.length === model.inputs.length,\n      () => `LayersModel has ${model.inputs.length} inputs, but the dataset ` +\n          `provides ${flattenedXs.length} inputs.  (Expected input keys: ` +\n          `${JSON.stringify(model.inputNames)})`);\n\n  tfc.util.assert(\n      flattenedYs.length === model.outputs.length,\n      () =>\n          `LayersModel has ${model.outputs.length} outputs, but the dataset ` +\n          `provides ${flattenedYs.length} outputs.  (Expected output keys: ` +\n          `${JSON.stringify(model.outputNames)})`);\n\n  for (let xIndex = 0; xIndex < flattenedXs.length; xIndex++) {\n    tfc.util.assert(\n        flattenedXs[xIndex].shape[0] === batchSize,\n        () => `Batch size mismatch: input ` +\n            `${model.inputNames[xIndex]} has ${\n                  flattenedXs[xIndex].shape[0]}; ` +\n            `expected  ${batchSize} based on input ${model.inputNames[0]}.`);\n  }\n\n  for (let yIndex = 0; yIndex < flattenedYs.length; yIndex++) {\n    tfc.util.assert(\n        flattenedYs[yIndex].shape[0] === batchSize,\n        () => `Batch size mismatch: output ` +\n            `${model.outputNames[yIndex]} has ${\n                  flattenedYs[yIndex].shape[0]}; ` +\n            `expected  ${batchSize} based on input ${model.inputNames[0]}.`);\n  }\n\n  return {xs: flattenedXs, ys: flattenedYs};\n}\n\nfunction flattenTensorOrArrayOrMap(\n    inputOrOutput: string, names: string[], values: TensorOrArrayOrMap) {\n  if (values instanceof tfc.Tensor) {\n    return [values];\n  } else if (Array.isArray(values)) {\n    tfc.util.assert(\n        values.length === names.length,\n        () => `Received an array of ${values.length} Tensors, but expected ${\n            names.length} to match the ${inputOrOutput} keys ${names}.`);\n    return values;\n  } else {\n    const result: tfc.Tensor[] = [];\n    // Check that all the required keys are available.\n    for (const name of names) {\n      if (values[name] == null) {\n        throw new ValueError(\n            `The feature data generated by the dataset lacks the required ` +\n            `${inputOrOutput} key '${name}'.`);\n      }\n      result.push(values[name]);\n    }\n    return result;\n  }\n}\n\nfunction standardizeTensorValidationData<T>(\n    data:\n        [\n          tfc.Tensor|tfc.Tensor[], tfc.Tensor|tfc.Tensor[]\n        ]|[tfc.Tensor | tfc.Tensor[], tfc.Tensor | tfc.Tensor[],\n           tfc.Tensor | tfc.Tensor[]]):\n    {xs: tfc.Tensor|tfc.Tensor[], ys: tfc.Tensor|tfc.Tensor[]} {\n  if (data.length === 3) {\n    throw new NotImplementedError(\n        'Validation with sample weights is not implemented yet.');\n  }\n  return {xs: data[0], ys: data[1]};\n}\n\nexport async function fitDataset<T>(\n    // Type `model` as `any` here to avoid circular dependency w/\n    // training.ts.\n    // tslint:disable-next-line:no-any\n    model: any, dataset: Dataset<T>,\n    args: ModelFitDatasetArgs<T>): Promise<History> {\n  const hasBatchesPerEpoch = args.batchesPerEpoch != null;\n  tfc.util.assert(\n      model.optimizer != null,\n      () => 'You must compile a model before training/testing. Use ' +\n          'LayersModel.compile(modelCompileConfig).');\n\n  tfc.util.assert(\n      args != null,\n      () => `For fitDataset(), the 2nd argument (config) is required, ` +\n          `but it is not provided in this call.`);\n  tfc.util.assert(\n      args.epochs != null && args.epochs > 0 && Number.isInteger(args.epochs),\n      () => `For fitDataset(), config.epochs is expected to be a positive ` +\n          `integer, but got ${args.epochs}`);\n  tfc.util.assert(\n      !hasBatchesPerEpoch ||\n          (args.batchesPerEpoch > 0 && Number.isInteger(args.batchesPerEpoch)),\n      () => `For fitDataset(), config.batchesPerEpoch is expected to be a ` +\n          `positive integer if specified, but got ${args.batchesPerEpoch}`);\n  tfc.util.assert(\n      // tslint:disable-next-line:no-any\n      (args as any)['validationSplit'] == null,\n      () => '`validationSplit` is not supported by `fitDataset()`. ' +\n          'Use validationData instead.');\n\n  if (model.isTraining) {\n    throw new Error(\n        'Cannot start training because another fit() call is ongoing.');\n  }\n  model.isTraining = true;\n\n  try {\n    const doValidation = args.validationData != null;\n    let valXs: tfc.Tensor|tfc.Tensor[];\n    let valYs: tfc.Tensor|tfc.Tensor[];\n    if (doValidation) {\n      if (isDatasetObject(args.validationData)) {\n        tfc.util.assert(\n            args.validationBatches == null ||\n                (args.validationBatches > 0 &&\n                 Number.isInteger(args.validationBatches)),\n            () => `For fitDataset() with dataset-based validation, ` +\n                `config.validationBatches is expected not to be provided, ` +\n                `or to be a positive integer, ` +\n                `but got ${args.validationBatches}`);\n      } else {\n        const validationData = standardizeTensorValidationData(\n            args.validationData as\n                    [tfc.Tensor | tfc.Tensor[], tfc.Tensor | tfc.Tensor[]] |\n            [\n              tfc.Tensor | tfc.Tensor[], tfc.Tensor | tfc.Tensor[],\n              tfc.Tensor | tfc.Tensor[]\n            ]);\n        valXs = validationData.xs;\n        valYs = validationData.ys;\n      }\n    }\n\n    const trainFunction = model.makeTrainFunction();\n    const outLabels = model.getDedupedMetricsNames() as string[];\n\n    let callbackMetrics: string[];\n    if (doValidation) {\n      callbackMetrics =\n          outLabels.slice().concat(outLabels.map(n => 'val_' + n));\n    } else {\n      callbackMetrics = outLabels.slice();\n    }\n\n    const callbacks = standardizeCallbacks(args.callbacks, args.yieldEvery);\n    const verbose = args.verbose == null ? 1 : args.verbose;\n    const {callbackList, history} = configureCallbacks(\n        callbacks, verbose, args.epochs, null, null,\n        getStepsPerEpoch(dataset, args),\n        null,  // Batch size determined by the dataset itself.\n        doValidation, callbackMetrics);\n    callbackList.setModel(model);\n    model.history = history;\n\n    await callbackList.onTrainBegin();\n    model.stopTraining_ = false;\n    let epoch = args.initialEpoch == null ? 0 : args.initialEpoch;\n\n    let dataIterator = await dataset.iterator();\n    while (epoch < args.epochs) {\n      const epochLogs: UnresolvedLogs = {};\n      await callbackList.onEpochBegin(epoch);\n      let stepsDone = 0;\n      let batchIndex = 0;\n      if (!hasBatchesPerEpoch) {\n        dataIterator = await dataset.iterator();\n      }\n      while (hasBatchesPerEpoch ? stepsDone < args.batchesPerEpoch : true) {\n        const iteratorOut = await dataIterator.next();\n\n        // If `batchesPerEpoch` is specified, the dataset should not be\n        // exhausted until all epoches are done.\n        if (hasBatchesPerEpoch && iteratorOut.done) {\n          console.warn(\n              'You provided `batchesPerEpoch` as ' +\n              `${args.batchesPerEpoch}, ` +\n              'but your dataset iterator ran out of data after ' +\n              `${stepsDone} batches; ` +\n              'interrupting training. Make sure that your ' +\n              'dataset can generate at least `batchesPerEpoch * epochs` ' +\n              'batches (in this case, ' +\n              `${args.batchesPerEpoch * args.epochs} batches). ` +\n              'You may need to use the repeat() function when building ' +\n              'your dataset.');\n          break;\n        }\n\n        if (iteratorOut.value != null) {\n          const {xs, ys} =\n              standardizeDataIteratorOutput(model, iteratorOut.value);\n          const batchLogs: UnresolvedLogs = {};\n          batchLogs['batch'] = batchIndex;\n          batchLogs['size'] = xs[0].shape[0];\n\n          await callbackList.onBatchBegin(batchIndex, batchLogs);\n\n          const sampleWeights: tfc.Tensor[] = [];\n          if (args.classWeight != null) {\n            const standardClassWeights =\n                standardizeClassWeights(args.classWeight, model.outputNames);\n            for (let i = 0; i < standardClassWeights.length; ++i) {\n              sampleWeights.push(await standardizeWeights(\n                  ys[i], null, standardClassWeights[i]));\n            }\n          }\n\n          // Train on batch.\n          const ins = xs.concat(ys).concat(sampleWeights);\n          const outs = trainFunction(ins);\n          tfc.dispose(ins);\n          for (let i = 0; i < outLabels.length; ++i) {\n            const label = outLabels[i];\n            const out = outs[i];\n            batchLogs[label] = out;\n            tfc.keep(out);\n          }\n\n          await callbackList.onBatchEnd(batchIndex, batchLogs);\n          disposeTensorsInLogs(batchLogs);\n\n          batchIndex++;\n          stepsDone++;\n        }\n\n        if (hasBatchesPerEpoch ? stepsDone >= args.batchesPerEpoch :\n                                 iteratorOut.done) {\n          // Epoch finished. Perform validation.\n          if (doValidation) {\n            let valOuts: tfc.Scalar[];\n            if (isDatasetObject(args.validationData)) {\n              valOuts = toList(await model.evaluateDataset(\n                  args.validationData, {batches: args.validationBatches}));\n            } else {\n              valOuts = toList(model.evaluate(valXs, valYs, {\n                batchSize: args.validationBatchSize == null ?\n                    DEFAULT_VALIDATION_BATCH_SIZE :\n                    args.validationBatchSize,\n                verbose: 0\n              }));\n            }\n            for (let i = 0; i < model.metricsNames.length; ++i) {\n              epochLogs[`val_${model.metricsNames[i]}`] = valOuts[i];\n            }\n          }\n          // Call `break` to exit one epoch lopp after validation is done. If\n          // config.batchesPerEpoch is specified, an epoch while loop will\n          // stop when `stepsDone >= config.batchesPerEpoch`. When\n          // config.batchesPerEpoch is not provided, the following `break` is\n          // required to exit the while lopp after dataset is exhausted.\n          break;\n        }\n\n        if (model.stopTraining_) {\n          break;\n        }\n      }\n      await callbackList.onEpochEnd(epoch, epochLogs);\n      epoch++;\n      if (model.stopTraining_) {\n        break;\n      }\n    }\n    await callbackList.onTrainEnd();\n    await model.history.syncData();\n    return model.history;\n  } finally {\n    model.isTraining = false;\n  }\n}\n\n/** Helper function that determines number of steps (batches) per epoch. */\nfunction getStepsPerEpoch<T>(\n    dataset: Dataset<T>, args: ModelFitDatasetArgs<T>): number {\n  // Attempt to determine # of batches in an epoch.\n  let stepsPerEpoch: number = null;\n  if (args.batchesPerEpoch != null) {\n    stepsPerEpoch = args.batchesPerEpoch;\n  } else if (Number.isFinite(dataset.size)) {\n    stepsPerEpoch = dataset.size;\n  }\n  return stepsPerEpoch;\n}\n\n// Check if provided object is a Dataset object by checking it's .iterator\n// element.\nfunction isDatasetObject<T>(\n    dataset:\n        [\n          TensorOrArrayOrMap, TensorOrArrayOrMap\n        ]|[TensorOrArrayOrMap, TensorOrArrayOrMap, TensorOrArrayOrMap]|\n    Dataset<T>): boolean {\n  return (typeof (dataset as Dataset<T>).iterator === 'function');\n}\n\n// Check if provided object is a LazyIterator object by checking it's .next\n// element.\nfunction isLazyIteratorObject<T>(iterator: Dataset<T>|\n                                 LazyIterator<T>): boolean {\n  return (typeof (iterator as LazyIterator<T>).next === 'function');\n}\n\nexport async function evaluateDataset<T>(\n    // Type `model` as `any` here to avoid circular dependency w/\n    // training.ts.\n    // tslint:disable-next-line:no-any\n    model: any, dataset: Dataset<T>|LazyIterator<T>,\n    args: ModelEvaluateDatasetArgs): Promise<tfc.Scalar|tfc.Scalar[]> {\n  args = args || {};\n  const hasBatches = args.batches != null;\n  const f = model.testFunction;\n  let outs: tfc.Scalar[] = [];\n  if (args.verbose > 0) {\n    throw new NotImplementedError('Verbose mode is not implemented yet.');\n  }\n\n  tfc.util.assert(\n      !hasBatches || (args.batches > 0 && Number.isInteger(args.batches)),\n      () => 'Test loop expects `batches` to be a positive integer, but ' +\n          `received ${JSON.stringify(args.batches)}`);\n  const dataIterator = isLazyIteratorObject(dataset) ?\n      dataset as LazyIterator<T>:\n      await (dataset as Dataset<T>).iterator();\n  // Keeps track of number of examples used in this evaluation.\n  let numExamples = 0;\n  let batch = 0;\n\n  while (hasBatches ? batch < args.batches : true) {\n    const iteratorOut = await dataIterator.next();\n    outs = tfc.tidy(() => {\n      if (iteratorOut.value) {\n        // TODO(cais): Once real dataset is available, use\n        //   `map(x => standardizeDataIteratorOutput(model, x).map(f)`.\n        const {xs, ys} =\n            standardizeDataIteratorOutput(model, iteratorOut.value);\n        const xsAndYs = xs.concat(ys);\n        const batchOuts = tfc.tidy(() => f(xsAndYs));\n        tfc.dispose(xsAndYs);\n\n        if (batch === 0) {\n          for (let i = 0; i < batchOuts.length; ++i) {\n            outs.push(scalar(0));\n          }\n        }\n\n        const batchSize = xsAndYs[0].shape[0];\n        for (let i = 0; i < batchOuts.length; ++i) {\n          const batchOut = batchOuts[i];\n          const oldScalar = outs[i];\n          outs[i] =\n              tfc.tidy(() => tfc.add(outs[i], tfc.mul(batchSize, batchOut)));\n          if (batch > 0) {\n            tfc.dispose(oldScalar);\n          }\n        }\n        tfc.dispose(batchOuts);\n        numExamples += batchSize;\n\n        ++batch;\n      }\n      return outs;\n    });\n\n    if (iteratorOut.done) {\n      if (hasBatches) {\n        console.warn(\n            'Your dataset iterator ran out of data during evaluateDataset(). ' +\n            'Interrupting evalution. Make sure that your ' +\n            'dataset can generate at least `batches` ' +\n            `batches (in this case, ${args.batches} batches). ` +\n            'You may need to use the repeat() function when building ' +\n            'your dataset.');\n      }\n      break;\n    }\n  }\n\n  for (let i = 0; i < outs.length; ++i) {\n    const oldScalar = outs[i];\n    outs[i] = tfc.div(outs[i], numExamples);\n    tfc.dispose(oldScalar);\n  }\n\n  return singletonOrArray(outs);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Interfaces and methods for training models using tf.Tensor objects.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {Scalar, Tensor, Tensor1D, tensor1d, util} from '@tensorflow/tfjs-core';\n\nimport {expandDims, gather, sliceAlongFirstAxis} from '../backend/tfjs_backend';\nimport {BaseCallback, configureCallbacks, CustomCallbackArgs, History, ModelLoggingVerbosity, standardizeCallbacks, YieldEveryOptions} from '../base_callbacks';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {disposeTensorsInLogs, UnresolvedLogs} from '../logs';\nimport {range} from '../utils/math_utils';\nimport {ClassWeight, ClassWeightMap} from './training_utils';\n\n/**\n * Interface configuration model training based on data as `tf.Tensor`s.\n */\nexport interface ModelFitArgs {\n  /**\n   * Number of samples per gradient update. If unspecified, it\n   * will default to 32.\n   */\n  batchSize?: number;\n\n  /**\n   * The number of times to iterate over the training data arrays.\n   * Note that when used with `initialEpoch`, epochs is the index of the\n   * \"final epoch\". The model is not trained for a number of iterations\n   * given by epochs, but merely until the epoch of index epochs is reached.\n   */\n  epochs?: number;\n\n  /**\n   * Verbosity level.\n   *\n   * Expected to be 0, 1, or 2. Default: 1.\n   *\n   * 0 - No printed message during fit() call.\n   * 1 - In Node.js (tfjs-node), prints the progress bar, together with\n   *     real-time updates of loss and metric values and training speed.\n   *     In the browser: no action. This is the default.\n   * 2 - Not implemented yet.\n   */\n  verbose?: ModelLoggingVerbosity;\n\n  /**\n   * List of callbacks to be called during training.\n   * Can have one or more of the following callbacks:\n   *   - `onTrainBegin(logs)`: called when training starts.\n   *   - `onTrainEnd(logs)`: called when training ends.\n   *   - `onEpochBegin(epoch, logs)`: called at the start of every epoch.\n   *   - `onEpochEnd(epoch, logs)`: called at the end of every epoch.\n   *   - `onBatchBegin(batch, logs)`: called at the start of every batch.\n   *   - `onBatchEnd(batch, logs)`: called at the end of every batch.\n   *   - `onYield(epoch, batch, logs)`: called every `yieldEvery` milliseconds\n   *      with the current epoch, batch and logs. The logs are the same\n   *      as in `onBatchEnd()`. Note that `onYield` can skip batches or\n   *      epochs. See also docs for `yieldEvery` below.\n   */\n  callbacks?: BaseCallback[]|CustomCallbackArgs|CustomCallbackArgs[];\n\n  /**\n   * Float between 0 and 1: fraction of the training data\n   * to be used as validation data. The model will set apart this fraction of\n   * the training data, will not train on it, and will evaluate the loss and\n   * any model metrics on this data at the end of each epoch.\n   * The validation data is selected from the last samples in the `x` and `y`\n   * data provided, before shuffling.\n   */\n  validationSplit?: number;\n\n  /**\n   * Data on which to evaluate the loss and any model\n   * metrics at the end of each epoch. The model will not be trained on this\n   * data. This could be a tuple [xVal, yVal] or a tuple [xVal, yVal,\n   * valSampleWeights]. The model will not be trained on this data.\n   * `validationData` will override `validationSplit`.\n   */\n  validationData?: [\n    Tensor|Tensor[], Tensor|Tensor[]\n  ]|[Tensor | Tensor[], Tensor|Tensor[], Tensor|Tensor[]];\n\n  /**\n   * Whether to shuffle the training data before each epoch. Has\n   * no effect when `stepsPerEpoch` is not `null`.\n   */\n  shuffle?: boolean;\n\n  /**\n   * Optional object mapping class indices (integers) to\n   * a weight (float) to apply to the model's loss for the samples from this\n   * class during training. This can be useful to tell the model to \"pay more\n   * attention\" to samples from an under-represented class.\n   *\n   * If the model has multiple outputs, a class weight can be specified for\n   * each of the outputs by setting this field an array of weight object\n   * or a object that maps model output names (e.g., `model.outputNames[0]`)\n   * to weight objects.\n   */\n  classWeight?: ClassWeight|ClassWeight[]|ClassWeightMap;\n\n  /**\n   * Optional array of the same length as x, containing\n   * weights to apply to the model's loss for each sample. In the case of\n   * temporal data, you can pass a 2D array with shape (samples,\n   * sequenceLength), to apply a different weight to every timestep of every\n   * sample. In this case you should make sure to specify\n   * sampleWeightMode=\"temporal\" in compile().\n   */\n  sampleWeight?: Tensor;\n\n  /**\n   * Epoch at which to start training (useful for resuming a previous training\n   * run).\n   */\n  initialEpoch?: number;\n\n  /**\n   * Total number of steps (batches of samples) before\n   * declaring one epoch finished and starting the next epoch. When training\n   * with Input Tensors such as TensorFlow data tensors, the default `null` is\n   * equal to the number of unique samples in your dataset divided by the\n   * batch size, or 1 if that cannot be determined.\n   */\n  stepsPerEpoch?: number;\n\n  /**\n   * Only relevant if `stepsPerEpoch` is specified. Total number of steps\n   * (batches of samples) to validate before stopping.\n   */\n  validationSteps?: number;\n\n  /**\n   * Configures the frequency of yielding the main thread to other tasks.\n   *\n   * In the browser environment, yielding the main thread can improve the\n   * responsiveness of the page during training. In the Node.js environment,\n   * it can ensure tasks queued in the event loop can be handled in a timely\n   * manner.\n   *\n   * The value can be one of the following:\n   *   - `'auto'`: The yielding happens at a certain frame rate (currently set\n   *               at 125ms). This is the default.\n   *   - `'batch'`: yield every batch.\n   *   - `'epoch'`: yield every epoch.\n   *   - any `number`: yield every `number` milliseconds.\n   *   - `'never'`: never yield. (yielding can still happen through `await\n   *      nextFrame()` calls in custom callbacks.)\n   */\n  yieldEvery?: YieldEveryOptions;\n}\n\nexport function checkBatchSize(batchSize: number) {\n  tfc.util.assert(\n      batchSize > 0 && Number.isInteger(batchSize),\n      () => `batchSize is required to be a positive integer, but got ${\n          batchSize}`);\n}\n\n/**\n * Slice an Tensor or an Array of Tensors, by start and stop indices.\n *\n * Porting Note: The `_slice_arrays` function in PyKeras is covered by this\n *   function and `sliceArraysByIndices()` together.\n *\n * @param arrays: the input.\n * @param start: the starting index (inclusive).\n * @param stop: the stopping index (exclusive).\n * @returns The result of the slicing. If `arrays` is an `Array` of\n *   `tf.Tensor`s, the slicing will be applied to all elements of the `Array`\n *   in the same way.\n */\nexport function sliceArrays(\n    arrays: Tensor|Tensor[], start: number, stop: number): Tensor|Tensor[] {\n  if (arrays == null) {\n    return [null];\n  } else if (Array.isArray(arrays)) {\n    return arrays.map(array => sliceAlongFirstAxis(array, start, stop - start));\n  } else {  // Tensor.\n    return sliceAlongFirstAxis(arrays, start, stop - start);\n  }\n}\n\n/**\n * Slice an Tensor or an Array of Tensors, by random-order indices.\n *\n * Porting Note: The `_slice_arrays` function in PyKeras is covered by this\n *   function and `sliceArrays()` together.\n *\n * @param arrays The input `tf.Tensor` or `Array` of `tf.Tensor`s to slice.\n *   If an `Array` of `tf.Tensor`s, all `tf.Tensor`s will be sliced in the\n *   same fashion.\n * @param indices The indices to use for slicing along the first (batch)\n *   dimension.\n * @returns Result(s) of the slicing.\n */\nexport function sliceArraysByIndices(\n    arrays: Tensor|Tensor[], indices: Tensor1D): Tensor|Tensor[] {\n  return tfc.tidy(() => {\n    if (arrays == null) {\n      return null;\n    } else if (Array.isArray(arrays)) {\n      return arrays.map(\n          array => (sliceArraysByIndices(array, indices) as Tensor));\n    } else {\n      // TODO(cais): indices should be a pre-constructed Tensor1D to avoid\n      //   tensor1d() calls.\n      return gather(\n          arrays, indices.dtype === 'int32' ? indices : indices.toInt());\n    }\n  });\n}\n\n/**\n * Returns a list of batch indices (tuples of indices).\n * @param size: Integer, total size of the data to slice into batches.\n * @param batchSize: Integer, batch size.\n * @returns An Array of [batchStart, batchEnd] tuples. batchStart is\n *   inclusive; batchEnd is exclusive. I.e., each batch consists of indices x\n *   that satisfy batchStart <= x < batchEnd.\n */\nexport function makeBatches(\n    size: number, batchSize: number): Array<[number, number]> {\n  const output: Array<[number, number]> = [];\n  let batchStart = 0;\n  let batchEnd: number = null;\n  while (batchStart < size) {\n    batchEnd = batchStart + batchSize;\n    if (batchEnd >= size) {\n      batchEnd = size;\n    }\n    output.push([batchStart, batchEnd]);\n    batchStart = batchEnd;\n  }\n  return output;\n}\n\n/**\n * Abstract fit function for `f(ins)`.\n * @param f A Function returning a list of tensors. For training, this\n *   function is expected to perform the updates to the variables.\n * @param ins List of tensors to be fed to `f`.\n * @param outLabels List of strings, display names of the outputs of `f`.\n * @param batchSize Integer batch size or `== null` if unknown. Default : 32.\n * @param epochs Number of times to iterate over the data. Default : 1.\n * @param verbose Verbosity mode: 0, 1, or 2. Default: 1.\n * @param callbacks List of callbacks to be called during training.\n * @param valF Function to call for validation.\n * @param valIns List of tensors to be fed to `valF`.\n * @param shuffle Whether to shuffle the data at the beginning of every\n * epoch. Default : true.\n * @param callbackMetrics List of strings, the display names of the metrics\n *   passed to the callbacks. They should be the concatenation of the\n *   display names of the outputs of `f` and the list of display names\n *   of the outputs of `valF`.\n * @param initialEpoch Epoch at which to start training (useful for\n *   resuming a previous training run). Default : 0.\n * @param stepsPerEpoch Total number of steps (batches on samples) before\n *   declaring one epoch finished and starting the next epoch. Ignored with\n *   the default value of `undefined` or `null`.\n * @param validationSteps Number of steps to run validation for (only if\n *   doing validation from data tensors). Not applicable for tfjs-layers.\n * @returns A `History` object.\n */\nasync function fitLoop(\n    // Type `model` as `any` here to avoid circular dependency w/ training.ts.\n    // tslint:disable-next-line:no-any\n    model: any, f: (data: Tensor[]) => Scalar[], ins: Tensor[],\n    outLabels?: string[], batchSize?: number, epochs?: number, verbose?: number,\n    callbacks?: BaseCallback[], valF?: (data: Tensor[]) => Scalar[],\n    valIns?: Tensor[], shuffle?: boolean|string, callbackMetrics?: string[],\n    initialEpoch?: number, stepsPerEpoch?: number,\n    validationSteps?: number): Promise<History> {\n  if (batchSize == null) {\n    batchSize = 32;\n  }\n  if (epochs == null) {\n    epochs = 1;\n  }\n  if (shuffle == null) {\n    shuffle = true;\n  }\n  if (initialEpoch == null) {\n    initialEpoch = 0;\n  }\n\n  // TODO(cais): Change const to let below when implementing validation.\n  let doValidation = false;\n  if (valF != null && valIns != null) {\n    doValidation = true;\n    // TODO(cais): verbose message.\n  }\n  if (validationSteps != null) {\n    doValidation = true;\n    if (stepsPerEpoch == null) {\n      throw new ValueError(\n          'Can only use `validationSteps` when doing step-wise training, ' +\n          'i.e., `stepsPerEpoch` must be set.');\n    }\n  }\n\n  const numTrainSamples =\n      model.checkNumSamples(ins, batchSize, stepsPerEpoch, 'steps_per_epoch');\n  let indexArray: number[];\n  if (numTrainSamples != null) {\n    indexArray = range(0, numTrainSamples);\n  }\n\n  if (verbose == null) {\n    verbose = 1;\n  }\n\n  const {callbackList, history} = configureCallbacks(\n      callbacks, verbose, epochs, initialEpoch, numTrainSamples, stepsPerEpoch,\n      batchSize, doValidation, callbackMetrics);\n  callbackList.setModel(model);\n  model.history = history;\n  await callbackList.onTrainBegin();\n  model.stopTraining_ = false;\n  // TODO(cais): Take care of callbacks.validation_data as in PyKeras.\n  // TODO(cais): Pre-convert feeds for performance as in PyKeras.\n\n  for (let epoch = initialEpoch; epoch < epochs; ++epoch) {\n    await callbackList.onEpochBegin(epoch);\n    const epochLogs: UnresolvedLogs = {};\n    if (stepsPerEpoch != null) {\n      throw new NotImplementedError(\n          'stepsPerEpoch mode is not implemented yet.');\n    } else {\n      if (shuffle === 'batch') {\n        throw new NotImplementedError('batch shuffling is not implemneted yet');\n      } else if (shuffle) {\n        util.shuffle(indexArray);\n      }\n      // Convert the potentially shuffled indices to Tensor1D, to avoid the\n      // cost of repeated creation of Array1Ds later on.\n      const epochIndexArray1D = tensor1d(indexArray);\n\n      const batches = makeBatches(numTrainSamples, batchSize);\n      for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) {\n        const batchLogs: UnresolvedLogs = {};\n        await callbackList.onBatchBegin(batchIndex, batchLogs);\n\n        tfc.tidy(() => {\n          const batchStart = batches[batchIndex][0];\n          const batchEnd = batches[batchIndex][1];\n          const batchIds = sliceAlongFirstAxis(\n                               epochIndexArray1D, batchStart,\n                               batchEnd - batchStart) as Tensor1D;\n          batchLogs['batch'] = batchIndex;\n          batchLogs['size'] = batchEnd - batchStart;\n\n          // TODO(cais): In ins, train flag can be a number, instead of an\n          //   Tensor? Do we need to handle this in tfjs-layers?\n          const insBatch = sliceArraysByIndices(ins, batchIds) as Tensor[];\n          const outs = f(insBatch);\n          for (let i = 0; i < outLabels.length; ++i) {\n            const label = outLabels[i];\n            const out = outs[i];\n            batchLogs[label] = out;\n            tfc.keep(out);\n            // TODO(cais): Use scope() to avoid ownership.\n          }\n\n          if (batchIndex === batches.length - 1) {  // Last batch.\n            if (doValidation) {\n              const valOuts = model.testLoop(valF, valIns, batchSize);\n              // Porting Notes: In tfjs-layers, valOuts is always an Array.\n              for (let i = 0; i < outLabels.length; ++i) {\n                const label = outLabels[i];\n                const out = valOuts[i];\n                tfc.keep(out);\n                // TODO(cais): Use scope() to avoid ownership.\n                epochLogs['val_' + label] = out;\n              }\n            }\n          }\n        });\n\n        await callbackList.onBatchEnd(batchIndex, batchLogs);\n        disposeTensorsInLogs(batchLogs);\n\n        if (model.stopTraining_) {\n          break;\n        }\n        // TODO(cais): return outs as list of Tensor.\n      }\n\n      epochIndexArray1D.dispose();\n    }\n    // TODO(cais): Run validation at the end of the epoch.\n    await callbackList.onEpochEnd(epoch, epochLogs);\n    if (model.stopTraining_) {\n      break;\n    }\n  }\n  await callbackList.onTrainEnd();\n\n  await model.history.syncData();\n  return model.history;\n}\n\nexport async function fitTensors(\n    // Type `model` as `any` here to avoid circular dependency w/ training.ts.\n    // tslint:disable-next-line:no-any\n    model: any, x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n    y: Tensor|Tensor[]|{[inputName: string]: Tensor},\n    args: ModelFitArgs = {}): Promise<History> {\n  if (model.isTraining) {\n    throw new Error(\n        'Cannot start training because another fit() call is ongoing.');\n  }\n  model.isTraining = true;\n  let inputs: Tensor[];\n  let targets: Tensor[];\n  let inputValX: Tensor|Tensor[];\n  let inputValY: Tensor|Tensor[];\n  let valX: Tensor|Tensor[];\n  let valY: Tensor|Tensor[];\n  let sampleWeights: Tensor[];\n  try {\n    const batchSize = args.batchSize == null ? 32 : args.batchSize;\n    checkBatchSize(batchSize);\n\n    // Validate user data.\n    // TODO(cais): Support sampleWeight.\n    const checkBatchAxis = false;\n    const standardizedOuts =\n        await model.standardizeUserData(\n            x, y, args.sampleWeight, args.classWeight, checkBatchAxis,\n            batchSize) as [Tensor[], Tensor[], Tensor[]];\n    inputs = standardizedOuts[0];\n    targets = standardizedOuts[1];\n    sampleWeights = standardizedOuts[2];\n\n    // Prepare validation data.\n    let doValidation = false;\n    let valIns: Tensor[];\n    if (args.validationData != null && args.validationData.length > 0) {\n      doValidation = true;\n      if (args.validationData.length === 2) {\n        // config.validationData consists of valX and valY.\n        inputValX = args.validationData[0];\n        inputValY = args.validationData[1];\n      } else if (args.validationData.length === 3) {\n        throw new NotImplementedError(\n            'validationData including sample weights is not supported yet.');\n      } else {\n        throw new ValueError(\n            `When passing validation data, it must contain 2 (valX, valY) ` +\n            `or 3 (valX, valY, valSampleWeight) items; ` +\n            `${args.validationData} is invalid.`);\n      }\n\n      const checkBatchAxis = true;\n      const valStandardized =\n          await model.standardizeUserData(\n              inputValX, inputValY, null, /** Unused sample weights. */\n              null,                       /** Unused class weights. */\n              checkBatchAxis, batchSize) as [Tensor[], Tensor[], Tensor[]];\n      valX = valStandardized[0];\n      valY = valStandardized[1];\n      valIns = valX.concat(valY);\n      // TODO(cais): Add useLearningPhase data properly.\n    } else if (\n        args.validationSplit != null && args.validationSplit > 0 &&\n        args.validationSplit < 1) {\n      doValidation = true;\n      // Porting Note: In tfjs-layers, inputs[0] is always an Tensor.\n      const splitAt =\n          Math.floor(inputs[0].shape[0] * (1 - args.validationSplit));\n      const originalBatchSize = inputs[0].shape[0];\n      valX = sliceArrays(inputs, splitAt, originalBatchSize) as Tensor[];\n      inputs = sliceArrays(inputs, 0, splitAt) as Tensor[];\n      valY = sliceArrays(targets, splitAt, originalBatchSize) as Tensor[];\n      targets = sliceArrays(targets, 0, splitAt) as Tensor[];\n      // TODO(cais): Once sampleWeights becomes available, slice it to get\n      //   valSampleWeights.\n      valIns = valX.concat(valY);\n\n      // TODO(cais): Add useLearningPhase data properly.\n    } else if (args.validationSteps != null) {\n      doValidation = true;\n      // TODO(cais): Add useLearningPhase.\n    }\n\n    const ins = inputs.concat(targets).concat(sampleWeights);\n\n    model.checkTrainableWeightsConsistency();\n\n    // TODO(cais): Handle use_learning_phase and learning_phase?\n\n    // Porting Note: Here we see a key deviation of tfjs-layers from\n    // Keras.\n    //  Due to the imperative nature of tfjs-layers' backend (tfjs-core),\n    //  we do not construct symbolic computation graphs to embody the\n    //  training process. Instead, we define a function that performs the\n    //  training action. In PyKeras, the data (inputs and targets) are fed\n    //  through graph placeholders. In tfjs-layers, the data are fed as\n    //  function arguments. Since the function are defined below in the\n    //  scope, we don't have equivalents of PyKeras's\n    //  `_make_train_funciton`.\n    const trainFunction = model.makeTrainFunction();\n    const outLabels = model.getDedupedMetricsNames() as string[];\n\n    let valFunction: (data: Tensor[]) => Scalar[];\n    let callbackMetrics: string[];\n    if (doValidation) {\n      model.makeTestFunction();\n      valFunction = model.testFunction;\n      callbackMetrics =\n          outLabels.slice().concat(outLabels.map(n => 'val_' + n));\n    } else {\n      valFunction = null;\n      valIns = [];\n      callbackMetrics = outLabels.slice();\n    }\n\n    const callbacks = standardizeCallbacks(args.callbacks, args.yieldEvery);\n    const out = await fitLoop(\n        model, trainFunction, ins, outLabels, batchSize, args.epochs,\n        args.verbose, callbacks, valFunction, valIns, args.shuffle,\n        callbackMetrics, args.initialEpoch, null, null);\n    return out;\n  } finally {\n    model.isTraining = false;\n    // Memory clean up.\n    disposeNewTensors(inputs, x);\n    disposeNewTensors(targets, y);\n    disposeNewTensors(valX as Tensor[], inputValX);\n    disposeNewTensors(valY as Tensor[], inputValY);\n    if (sampleWeights != null) {\n      tfc.dispose(sampleWeights);\n    }\n  }\n  // TODO(cais): Add value to outLabels.\n}\n\n/**\n * Ensure tensors all have a rank of at least 2.\n *\n * If a tensor has a rank of 1, it is dimension-expanded to rank 2.\n * If any tensor has a rank of 0 (i.e., is a scalar), an error will be thrown.\n */\nexport function ensureTensorsRank2OrHigher(tensors: Tensor|Tensor[]): Tensor[] {\n  const outs: Tensor[] = [];\n  if (tensors instanceof Tensor) {\n    tensors = [tensors];\n  }\n\n  // Make Tensors at least 2D.\n  for (let i = 0; i < tensors.length; ++i) {\n    const tensor = tensors[i];\n    if (tensor.rank === 1) {\n      outs.push(expandDims(tensor, 1));\n    } else if (tensor.rank === 0) {\n      throw new Error(\n          'Expected tensor to be at least 1D, but received a 0D tensor ' +\n          '(scalar).');\n    } else {\n      outs.push(tensor);\n    }\n  }\n  return outs;\n}\n\n/**\n * Compare a set of tensors with a reference (old) set, discard the ones\n * in the new set that are not present in the reference set.\n *\n * This method is used for memory clenaup during calls such as\n * LayersModel.fit().\n *\n * @param tensors New set which may contain Tensors not present in\n *   `refTensors`.\n * @param refTensors Reference Tensor set.\n */\n// TODO(cais, kangyizhang): Deduplicate with tfjs-data.\nexport function disposeNewTensors(\n    tensors: Tensor|Tensor[]|{[inputName: string]: Tensor},\n    refTensors: Tensor|Tensor[]|{[inputName: string]: Tensor}): void {\n  if (tensors == null) {\n    return;\n  }\n  const oldTensorIds: number[] = [];\n  if (refTensors instanceof Tensor) {\n    oldTensorIds.push(refTensors.id);\n  } else if (Array.isArray(refTensors)) {\n    refTensors.forEach(t => oldTensorIds.push(t.id));\n  } else if (refTensors != null) {\n    // `oldTensors` is a map from string name to Tensor.\n    for (const name in refTensors) {\n      const oldTensor = refTensors[name];\n      oldTensorIds.push(oldTensor.id);\n    }\n  }\n\n  const tensorsToDispose: Tensor[] = [];\n  if (tensors instanceof Tensor) {\n    if (oldTensorIds.indexOf(tensors.id) === -1) {\n      tensorsToDispose.push(tensors);\n    }\n  } else if (Array.isArray(tensors)) {\n    tensors.forEach(t => {\n      if (oldTensorIds.indexOf(t.id) === -1) {\n        tensorsToDispose.push(t);\n      }\n    });\n  } else if (tensors != null) {\n    // `oldTensors` is a map from string name to Tensor.\n    for (const name in tensors) {\n      const tensor = tensors[name];\n      if (oldTensorIds.indexOf(tensor.id) === -1) {\n        tensorsToDispose.push(tensor);\n      }\n    }\n  }\n\n  tensorsToDispose.forEach(t => {\n    if (!t.isDisposed) {\n      t.dispose();\n    }\n  });\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original Source: engine/training.py */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {io, ModelPredictConfig as ModelPredictArgs, NamedTensorMap, Optimizer, Scalar, scalar, serialization, Tensor, Tensor1D, tensor1d, util} from '@tensorflow/tfjs-core';\n\nimport * as K from '../backend/tfjs_backend';\nimport {History, ModelLoggingVerbosity} from '../base_callbacks';\nimport {nameScope} from '../common';\nimport {NotImplementedError, RuntimeError, ValueError} from '../errors';\nimport {Shape} from '../keras_format/common';\nimport {LossIdentifier} from '../keras_format/loss_config';\nimport {OptimizerSerialization} from '../keras_format/optimizer_config';\nimport {MetricsIdentifier, TrainingConfig} from '../keras_format/training_config';\nimport {deserialize} from '../layers/serialization';\nimport * as losses from '../losses';\nimport * as Metrics from '../metrics';\nimport * as optimizers from '../optimizers';\nimport {LossOrMetricFn, NamedTensor} from '../types';\nimport {checkUserDefinedMetadata} from '../user_defined_metadata';\nimport {count, pyListRepeat, singletonOrArray, toCamelCase, toSnakeCase, unique} from '../utils/generic_utils';\nimport {printSummary} from '../utils/layer_utils';\nimport {range} from '../utils/math_utils';\nimport {convertPythonicToTs} from '../utils/serialization_utils';\nimport {LayerVariable} from '../variables';\nimport {version} from '../version';\n\nimport {Container, ContainerArgs} from './container';\nimport {Dataset} from './dataset_stub';\nimport {execute, FeedDict} from './executor';\nimport {DisposeResult, SymbolicTensor} from './topology';\nimport {evaluateDataset, fitDataset, ModelEvaluateDatasetArgs, ModelFitDatasetArgs} from './training_dataset';\nimport {checkBatchSize, disposeNewTensors, ensureTensorsRank2OrHigher, fitTensors, makeBatches, ModelFitArgs, sliceArrays, sliceArraysByIndices} from './training_tensors';\nimport {ClassWeight, ClassWeightMap, computeWeightedLoss, standardizeClassWeights, standardizeWeights} from './training_utils';\n\n/**\n * Helper function for polymorphic input data: 1. singleton Tensor.\n */\nexport function isDataTensor(x: Tensor|Tensor[]|{[inputName: string]: Tensor}|\n                             {[inputName: string]: Tensor[]}): boolean {\n  return x instanceof Tensor;\n}\n\n/**\n * Helper function for polymorphic input data: 2. Array of Tensor.\n */\nexport function isDataArray(x: Tensor|Tensor[]|\n                            {[inputName: string]: Tensor}): boolean {\n  return Array.isArray(x);\n}\n\n/**\n * Helper function for polymorphic input data: 3. \"dict\" of Tensor.\n */\nexport function isDataDict(x: Tensor|Tensor[]|\n                           {[inputName: string]: Tensor}): boolean {\n  return !isDataTensor(x) && !isDataArray(x);\n}\n\n/**\n * Normalizes inputs and targets provided by users.\n * @param data User-provided input data (polymorphic).\n * @param names An Array of expected Tensor names.\n * @param shapes Optional Array of expected Tensor shapes.\n * @param checkBatchAxis Whether to check that the batch axis of the arrays\n *   match  the expected value found in `shapes`.\n * @param exceptionPrefix String prefix used for exception formatting.\n * @returns List of standardized input Tensors (one Tensor per model input).\n * @throws ValueError: in case of improperly formatted user data.\n */\nexport function standardizeInputData(\n    data: Tensor|Tensor[]|{[inputName: string]: Tensor}, names: string[],\n    shapes?: Shape[], checkBatchAxis = true, exceptionPrefix = ''): Tensor[] {\n  if (names == null || names.length === 0) {\n    // Check for the case where the model expected no data, but some data got\n    // sent.\n    if (data != null) {\n      let gotUnexpectedData = false;\n      if (isDataArray(data) && (data as Tensor[]).length > 0) {\n        gotUnexpectedData = true;\n      } else if (isDataDict(data)) {\n        for (const key in data) {\n          if (data.hasOwnProperty(key)) {\n            gotUnexpectedData = true;\n            break;\n          }\n        }\n      } else {\n        // `data` is a singleton Tensor in this case.\n        gotUnexpectedData = true;\n      }\n      if (gotUnexpectedData) {\n        throw new ValueError(\n            `Error when checking model ${exceptionPrefix} expected no data, ` +\n            `but got ${data}`);\n      }\n    }\n    return [];\n  }\n  if (data == null) {\n    return names.map(name => null);\n  }\n\n  let arrays: Tensor[];\n  if (isDataDict(data)) {\n    data = data as {[inputName: string]: Tensor};\n    arrays = [];\n    for (const name of names) {\n      if (data[name] == null) {\n        throw new ValueError(\n            `No data provided for \"${name}\". Need data for each key in: ` +\n            `${names}`);\n      }\n      arrays.push(data[name]);\n    }\n  } else if (isDataArray(data)) {\n    data = data as Tensor[];\n    if (data.length !== names.length) {\n      throw new ValueError(\n          `Error when checking model ${exceptionPrefix}: the Array of ` +\n          `Tensors that you are passing to your model is not the size the ` +\n          `model expected. Expected to see ${names.length} Tensor(s), but ` +\n          `instead got the following list of Tensor(s): ${data}`);\n    }\n    arrays = data;\n  } else {\n    data = data as Tensor;\n    if (names.length > 1) {\n      throw new ValueError(\n          `The model ${exceptionPrefix} expects ${names.length} Tensor(s), ` +\n          `but only received one Tensor. Found: Tensor with shape ${\n              data.shape}`);\n    }\n    arrays = [data];\n  }\n\n  arrays = ensureTensorsRank2OrHigher(arrays);\n\n  // Check shape compatibility.\n  if (shapes != null) {\n    for (let i = 0; i < names.length; ++i) {\n      if (shapes[i] == null) {\n        continue;\n      }\n      const array = arrays[i];\n      if (array.shape.length !== shapes[i].length) {\n        throw new ValueError(\n            `Error when checking ${exceptionPrefix}: expected ${names[i]} ` +\n            `to have ${shapes[i].length} dimension(s). but got array with ` +\n            `shape ${array.shape}`);\n      }\n      for (let j = 0; j < shapes[i].length; ++j) {\n        if (j === 0 && !checkBatchAxis) {\n          // Skip the first (batch) axis.\n          continue;\n        }\n        const dim = array.shape[j];\n        const refDim = shapes[i][j];\n        if (refDim != null && refDim >= 0 && dim !== refDim) {\n          throw new ValueError(\n              `Error when checking ${exceptionPrefix}: expected ${names[i]} ` +\n              `to have shape [${shapes[i]}], but got array with shape ` +\n              `[${array.shape}].`);\n        }\n      }\n    }\n  }\n  return arrays;\n}\n\n/**\n * User input validation for Tensors.\n * @param inputs `Array` of `tf.Tensor`s for inputs.\n * @param targets `Array` of `tf.Tensor`s for targets.\n * @param weights Optional `Array` of `tf.Tensor`s for sample weights.\n * @throws ValueError: in case of incorrectly formatted data.\n */\nexport function checkArrayLengths(\n    inputs: Tensor[], targets: Tensor[], weights?: Tensor[]) {\n  const setX = unique(inputs.map(input => input.shape[0]));\n  setX.sort();\n  const setY = unique(targets.map(target => target.shape[0]));\n  setY.sort();\n  // TODO(cais): Check `weights` as well.\n  if (setX.length > 1) {\n    throw new ValueError(\n        `All input Tensors (x) should have the same number of samples. ` +\n        `Got array shapes: ` +\n        `${JSON.stringify(inputs.map(input => input.shape))}`);\n  }\n  if (setY.length > 1) {\n    throw new ValueError(\n        `All target Tensors (y) should have the same number of samples. ` +\n        `Got array shapes: ` +\n        `${JSON.stringify(targets.map(target => target.shape))}`);\n  }\n  if (setX.length > 0 && setY.length > 0 && !util.arraysEqual(setX, setY)) {\n    throw new ValueError(\n        `Input Tensors should have the same number of samples as target ` +\n        `Tensors. Found ${setX[0]} input sample(s) and ${setY[0]} target ` +\n        `sample(s).`);\n  }\n}\n\n/**\n * Validation on the compatibility of targes and loss functions.\n *\n * This helps prevent users from using loss functions incorrectly.\n *\n * @param targets `Array` of `tf.Tensor`s of targets.\n * @param lossFns `Array` of loss functions.\n * @param outputShapes `Array` of shapes of model outputs.\n */\nfunction checkLossAndTargetCompatibility(\n    targets: Tensor[], lossFns: LossOrMetricFn[], outputShapes: Shape[]) {\n  // TODO(cais): Dedicated test coverage?\n  const keyLosses = [\n    losses.meanSquaredError, losses.binaryCrossentropy,\n    losses.categoricalCrossentropy\n  ];\n  for (let i = 0; i < targets.length; ++i) {\n    const y = targets[i];\n    const loss = lossFns[i];\n    const shape = outputShapes[i];\n    if (loss == null) {\n      continue;\n    }\n    if (loss === losses.categoricalCrossentropy) {\n      if (y.shape[y.shape.length - 1] === 1) {\n        throw new ValueError(\n            `You are passing a target array of shape ${y.shape} while using ` +\n            `a loss 'categorical_crossentropy'. 'categorical_crossentropy'` +\n            `expects targets to be binary matrices (1s and 0s) of shape ` +\n            `[samples, classes].`);\n        // TODO(cais): Example code in error message.\n      }\n    }\n    if (keyLosses.indexOf(loss) !== -1) {\n      const slicedYShape = y.shape.slice(1);\n      const slicedShape = shape.slice(1);\n      for (let j = 0; j < slicedYShape.length; ++j) {\n        const targetDim = slicedYShape[j];\n        const outDim = slicedShape[j];\n        if (outDim != null && targetDim !== outDim) {\n          throw new ValueError(\n              `A target Tensor with shape ${y.shape} was passed for an ` +\n              `output of shape ${shape}, while using a loss function that ` +\n              `expects targets to have the same shape as the output.`);\n        }\n      }\n    }\n  }\n}\n\n/**\n * Check inputs provided by the user.\n *\n * Porting Note: This corresponds to _standardize_input_data() in Python\n *   Keras. Because of the strong typing in TF.js, we do not need to convert\n *   the data. Specifically:\n *   1) in PyKeras, `data` can be `DataFrame` instances from pandas, for\n *      example. We don't need to worry about that here because there is no\n *      widely popular javascript/typesdcript equivalent of pandas (so far).\n *      If one becomes available in the future, we can add support.\n *   2) in PyKeras, inputs can be Python dict. But here we are stipulating\n * that the data is either a single `tf.Tensor` or an Array of `tf.Tensor`s. We\n * may add support for `Object` data inputs in the future when the need\n * arises.\n *\n * Instead, we perform basic checks for number of parameters and shapes.\n *\n * @param data: The input data.\n * @param names: Name for the inputs, from the model.\n * @param shapes: Expected shapes for the input data, from the model.\n * @param checkBatchAxis: Whether the size along the batch axis (i.e., the\n *   first dimension) will be checked for matching.\n * @param exceptionPrefix: Execption prefix message, used in generating error\n *   messages.\n * @throws ValueError: on incorrect number of inputs or mismatches in shapes.\n */\nfunction checkInputData(\n    data: Tensor|Tensor[], names: string[], shapes?: Shape[],\n    checkBatchAxis = true, exceptionPrefix = '') {\n  let arrays: Tensor[];\n  if (Array.isArray(data)) {\n    if (data.length !== names.length) {\n      throw new ValueError(\n          `Error when checking model ${exceptionPrefix}: the Array of ` +\n          `Tensors that you are passing to your model is not the size the ` +\n          `the model expected. Expected to see ${names.length} Tensor(s),` +\n          ` but instead got ${data.length} Tensors(s).`);\n    }\n    arrays = data;\n  } else {\n    if (names.length > 1) {\n      throw new ValueError(\n          `The model expects ${names.length} ${exceptionPrefix} Tensors, ` +\n          `but only received one Tensor. Found: array with shape ` +\n          `${JSON.stringify(data.shape)}.`);\n    }\n    arrays = [data];\n  }\n\n  if (shapes != null) {\n    for (let i = 0; i < names.length; ++i) {\n      if (shapes[i] == null) {\n        continue;\n      }\n      const array = arrays[i];\n      if (array.shape.length !== shapes[i].length) {\n        throw new ValueError(\n            `Error when checking ${exceptionPrefix}: expected ${names[i]} ` +\n            `to have ${shapes[i].length} dimension(s), but got array with ` +\n            `shape ${JSON.stringify(array.shape)}`);\n      }\n      for (let j = 0; j < shapes[i].length; ++j) {\n        if (j === 0 && !checkBatchAxis) {\n          continue;\n        }\n        const dim = array.shape[j];\n        const refDim = shapes[i][j];\n        if (refDim != null) {\n          if (refDim !== dim) {\n            throw new ValueError(\n                `Error when checking ${exceptionPrefix}: expected ` +\n                `${names[i]} to have shape ${JSON.stringify(shapes[i])} but ` +\n                `got array with shape ${JSON.stringify(array.shape)}.`);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Maps metric functions to model outputs.\n * @param metrics An shortcut strings name, metric function, `Array` or dict\n *   (`Object`) of metric functions.\n * @param outputNames An `Array` of the names of model outputs.\n * @returns An `Array` (one entry per model output) of `Array` of metric\n *   functions. For instance, if the model has 2 outputs, and for the first\n *   output we want to compute `binaryAccuracy` and `binaryCrossentropy`,\n *   and just `binaryAccuracy` for the second output, the `Array` would look\n *   like:\n *     `[[binaryAccuracy, binaryCrossentropy],  [binaryAccuracy]]`\n * @throws TypeError: incompatible metrics format.\n */\nexport function collectMetrics(\n    metrics: string|LossOrMetricFn|Array<string|LossOrMetricFn>|\n    {[outputName: string]: string | LossOrMetricFn},\n    outputNames: string[]): Array<Array<string|LossOrMetricFn>> {\n  if (metrics == null || Array.isArray(metrics) && metrics.length === 0) {\n    return outputNames.map(name => []);\n  }\n\n  let wrappedMetrics: Array<string|LossOrMetricFn>|\n      {[outputName: string]: string | LossOrMetricFn};\n  if (typeof metrics === 'string' || typeof metrics === 'function') {\n    wrappedMetrics = [metrics];\n  } else if (Array.isArray(metrics) || typeof metrics === 'object') {\n    wrappedMetrics = metrics as Array<string|LossOrMetricFn>|\n        {[outputName: string]: string} | {[outputName: string]: LossOrMetricFn};\n  } else {\n    throw new TypeError(\n        'Type of metrics argument not understood. Expected an string,' +\n        `function, Array, or Object, found: ${metrics}`);\n  }\n\n  if (Array.isArray(wrappedMetrics)) {\n    // We then apply all metrics to all outputs.\n    return outputNames.map(\n        name => wrappedMetrics as Array<string|LossOrMetricFn>);\n  } else {\n    // In this case, metrics is a dict.\n    const nestedMetrics: Array<Array<string|LossOrMetricFn>> = [];\n    for (const name of outputNames) {\n      let outputMetrics: string|LossOrMetricFn|Array<string|LossOrMetricFn> =\n          wrappedMetrics.hasOwnProperty(name) ? wrappedMetrics[name] : [];\n      if (!Array.isArray(outputMetrics)) {\n        outputMetrics = [outputMetrics];\n      }\n      nestedMetrics.push(outputMetrics);\n    }\n    return nestedMetrics;\n  }\n}\n\nexport interface ModelEvaluateArgs {\n  /**\n   * Batch size (Integer). If unspecified, it will default to 32.\n   */\n  batchSize?: number;\n\n  /**\n   * Verbosity mode.\n   */\n  verbose?: ModelLoggingVerbosity;\n\n  /**\n   * Tensor of weights to weight the contribution of different samples to the\n   * loss and metrics.\n   */\n  sampleWeight?: Tensor;\n\n  /**\n   * integer: total number of steps (batches of samples)\n   * before declaring the evaluation round finished. Ignored with the default\n   * value of `undefined`.\n   */\n  steps?: number;\n}\n\n/**\n * Configuration for calls to `LayersModel.compile()`.\n */\nexport interface ModelCompileArgs {\n  /**\n   * An instance of `tf.train.Optimizer` or a string name for an Optimizer.\n   */\n  optimizer: string|Optimizer;\n\n  /**\n   * Object function(s) or name(s) of object function(s).\n   * If the model has multiple outputs, you can use a different loss\n   * on each output by passing a dictionary or an Array of losses.\n   * The loss value that will be minimized by the model will then be the sum\n   * of all individual losses.\n   */\n  loss: string|string[]|{[outputName: string]: string}|LossOrMetricFn|\n      LossOrMetricFn[]|{[outputName: string]: LossOrMetricFn};\n\n  /**\n   * List of metrics to be evaluated by the model during training and testing.\n   * Typically you will use `metrics=['accuracy']`.\n   * To specify different metrics for different outputs of a multi-output\n   * model, you could also pass a dictionary.\n   */\n  metrics?: string|LossOrMetricFn|Array<string|LossOrMetricFn>|\n      {[outputName: string]: string | LossOrMetricFn};\n\n  // TODO(cais): Add lossWeights, sampleWeightMode, weightedMetrics, and\n  //   targetTensors.\n}\n\nconst LAYERS_MODEL_FORMAT_NAME = 'layers-model';\n\n/**\n * A `tf.LayersModel` is a directed, acyclic graph of `tf.Layer`s plus methods\n * for training, evaluation, prediction and saving.\n *\n * `tf.LayersModel` is the basic unit of training, inference and evaluation in\n * TensorFlow.js. To create a `tf.LayersModel`, use `tf.LayersModel`.\n *\n * See also:\n *   `tf.Sequential`, `tf.loadLayersModel`.\n */\n/** @doc {heading: 'Models', subheading: 'Classes'} */\nexport class LayersModel extends Container implements tfc.InferenceModel {\n  // The class name is 'Model' rather than 'LayersModel' for backwards\n  // compatibility since this class name shows up in the serialization format.\n  /** @nocollapse */\n  static className = 'Model';\n  protected optimizer_: Optimizer;\n  // Whether the model instance owns the optimizer: `true` if and only if\n  // `optimizer` is created from a string parameter during `compile()` call.\n  protected isOptimizerOwned: boolean;\n\n  loss: string|string[]|{[outputName: string]: string}|LossOrMetricFn|\n      LossOrMetricFn[]|{[outputName: string]: LossOrMetricFn};\n  lossFunctions: LossOrMetricFn[];\n\n  // TODO(cais): These private variables should probably not have the string\n  //   'feed' in their names, because we are not dealing with a symbolic\n  //   backend.\n  private feedOutputShapes: Shape[];\n  private feedLossFns: LossOrMetricFn[];\n  private collectedTrainableWeights: LayerVariable[];\n  private testFunction: (data: Tensor[]) => Scalar[];\n  history: History;\n\n  // A public property that can be set by Callbacks to order early stopping\n  // during `fit()` calls.\n  protected stopTraining_: boolean;\n  protected isTraining: boolean;\n\n  metrics: string|LossOrMetricFn|Array<string|LossOrMetricFn>|\n      {[outputName: string]: string | LossOrMetricFn};\n  metricsNames: string[];\n  // Porting Note: `metrics_tensors` in PyKeras is a symbolic tensor. But given\n  //   the imperative nature of tfjs-core, `metricsTensors` is a\n  //   TypeScript function here.\n  //   Also note that due to the imperative nature of tfjs-core, `metricsTensor`\n  //   here needs an output index to keep track of which output of the\n  //   LayersModel a metric belongs to. This is unlike `metrics_tensors` in\n  //   PyKeras, which is a `list` of symbolic tensors, each of which has\n  //   implicit \"knowledge\" of the outputs it depends on.\n  metricsTensors: Array<[LossOrMetricFn, number]>;\n\n  // User defind metadata (if any).\n  private userDefinedMetadata: {};\n\n  constructor(args: ContainerArgs) {\n    super(args);\n    this.isTraining = false;\n  }\n\n  /**\n   * Print a text summary of the model's layers.\n   *\n   * The summary includes\n   * - Name and type of all layers that comprise the model.\n   * - Output shape(s) of the layers\n   * - Number of weight parameters of each layer\n   * - If the model has non-sequential-like topology, the inputs each layer\n   *   receives\n   * - The total number of trainable and non-trainable parameters of the model.\n   *\n   * ```js\n   * const input1 = tf.input({shape: [10]});\n   * const input2 = tf.input({shape: [20]});\n   * const dense1 = tf.layers.dense({units: 4}).apply(input1);\n   * const dense2 = tf.layers.dense({units: 8}).apply(input2);\n   * const concat = tf.layers.concatenate().apply([dense1, dense2]);\n   * const output =\n   *     tf.layers.dense({units: 3, activation: 'softmax'}).apply(concat);\n   *\n   * const model = tf.model({inputs: [input1, input2], outputs: output});\n   * model.summary();\n   * ```\n   *\n   * @param lineLength Custom line length, in number of characters.\n   * @param positions Custom widths of each of the columns, as either\n   *   fractions of `lineLength` (e.g., `[0.5, 0.75, 1]`) or absolute number\n   *   of characters (e.g., `[30, 50, 65]`). Each number corresponds to\n   *   right-most (i.e., ending) position of a column.\n   * @param printFn Custom print function. Can be used to replace the default\n   *   `console.log`. For example, you can use `x => {}` to mute the printed\n   *   messages in the console.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  summary(\n      lineLength?: number, positions?: number[],\n      printFn:\n          // tslint:disable-next-line:no-any\n      (message?: any, ...optionalParams: any[]) => void = console.log) {\n    if (!this.built) {\n      throw new ValueError(\n          `This model has never been called, thus its weights have not been ` +\n          `created yet. So no summary can be displayed. Build the model ` +\n          `first (e.g., by calling it on some test data).`);\n    }\n    printSummary(this, lineLength, positions, printFn);\n  }\n\n  /**\n   * Configures and prepares the model for training and evaluation.  Compiling\n   * outfits the model with an optimizer, loss, and/or metrics.  Calling `fit`\n   * or `evaluate` on an un-compiled model will throw an error.\n   *\n   * @param args a `ModelCompileArgs` specifying the loss, optimizer, and\n   * metrics to be used for fitting and evaluating this model.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  compile(args: ModelCompileArgs): void {\n    if (args.loss == null) {\n      args.loss = [];\n    }\n    this.loss = args.loss;\n\n    if (typeof args.optimizer === 'string') {\n      this.optimizer_ = optimizers.getOptimizer(args.optimizer);\n      this.isOptimizerOwned = true;\n    } else {\n      if (!(args.optimizer instanceof Optimizer)) {\n        throw new ValueError(\n            `User-defined optimizer must be an instance of tf.Optimizer.`);\n      }\n      this.optimizer_ = args.optimizer;\n      this.isOptimizerOwned = false;\n    }\n\n    // TODO(cais): Add lossWeights.\n    // TODO(cais): Add sampleWeightMode.\n\n    // Prepare loss functions.\n    let lossFunctions: LossOrMetricFn[] = [];\n    if (!Array.isArray(args.loss) && typeof args.loss !== 'string' &&\n        typeof args.loss !== 'function') {\n      args.loss = args.loss as {[outputName: string]: string};\n      for (const name in args.loss) {\n        if (this.outputNames.indexOf(name) === -1) {\n          throw new ValueError(\n              `Unknown entry in loss dictionary: \"${name}\". ` +\n              `Only expected the following keys: ${this.outputNames}`);\n        }\n      }\n      for (const name of this.outputNames) {\n        if (args.loss[name] == null) {\n          console.warn(\n              `Output \"${name}\" is missing from loss dictionary. We assume ` +\n              `this was done on purpose, and we will not be expecting data ` +\n              `to be passed to ${name} during training`);\n        }\n        lossFunctions.push(losses.get(args.loss[name]));\n      }\n    } else if (Array.isArray(args.loss)) {\n      if (args.loss.length !== this.outputs.length) {\n        throw new ValueError(\n            `When passing an Array as loss, it should have one entry per ` +\n            `model output. The model has ${this.outputs.length} output(s), ` +\n            `but you passed loss=${args.loss}.`);\n      }\n      const theLosses = args.loss as Array<string|LossOrMetricFn>;\n      lossFunctions = theLosses.map(l => losses.get(l));\n    } else {\n      const lossFunction = losses.get(args.loss);\n      this.outputs.forEach(_ => {\n        lossFunctions.push(lossFunction);\n      });\n    }\n\n    this.lossFunctions = lossFunctions;\n\n    this.feedOutputNames = [];\n    this.feedOutputShapes = [];\n    this.feedLossFns = [];\n    for (let i = 0; i < this.outputs.length; ++i) {\n      // TODO(cais): Logic for skipping target(s).\n      const shape = this.internalOutputShapes[i];\n      const name = this.outputNames[i];\n      this.feedOutputNames.push(name);\n      this.feedOutputShapes.push(shape);\n      this.feedLossFns.push(this.lossFunctions[i]);\n    }\n\n    // TODO(cais): Add logic for output masks.\n    // TODO(cais): Add logic for sample weights.\n    const skipTargetIndices: number[] = [];\n\n    // Prepare metrics.\n    this.metrics = args.metrics;\n    // TODO(cais): Add weightedMetrics.\n    this.metricsNames = ['loss'];\n    this.metricsTensors = [];\n\n    // Compute total loss.\n    // Porting Note: In PyKeras, metrics_tensors are symbolic tensor objects.\n    //   Here, metricsTensors are TypeScript functions. This difference is due\n    //   to the difference in symbolic/imperative property of the backends.\n    nameScope('loss', () => {\n      for (let i = 0; i < this.outputs.length; ++i) {\n        if (skipTargetIndices.indexOf(i) !== -1) {\n          continue;\n        }\n        // TODO(cais): Add weightedLoss, sampleWeight and mask.\n        //   The following line should be weightedLoss\n        const weightedLoss = this.lossFunctions[i];\n        if (this.outputs.length > 1) {\n          this.metricsTensors.push([weightedLoss, i]);\n          this.metricsNames.push(this.outputNames[i] + '_loss');\n        }\n      }\n\n      // Porting Note: Due to the imperative nature of the backend, we calculate\n      //   the regularizer penalties in the totalLossFunction, instead of here.\n    });\n\n    const nestedMetrics = collectMetrics(args.metrics, this.outputNames);\n    // TODO(cais): Add nestedWeightedMetrics.\n\n    /**\n     * Helper function used in loop below.\n     */\n    const appendMetric =\n        (outputIndex: number, metricName: string,\n         metricTensor: LossOrMetricFn) => {\n          if (this.outputNames.length > 1) {\n            metricName = this.outputNames[outputIndex] + '_' + metricName;\n          }\n          this.metricsNames.push(metricName);\n          this.metricsTensors.push([metricTensor, outputIndex]);\n        };\n\n    nameScope('metric', () => {\n      for (let i = 0; i < this.outputs.length; ++i) {\n        if (skipTargetIndices.indexOf(i) !== -1) {\n          continue;\n        }\n        const outputMetrics = nestedMetrics[i];\n        // TODO(cais): Add weights and outputWeightedMetrics.\n\n        // TODO(cais): Add optional arg `weights` to the following function.\n        const handleMetrics = (metrics: Array<string|LossOrMetricFn>) => {\n          const metricNamePrefix = '';\n          let metricName: string;\n          let accFn: LossOrMetricFn;\n          let weightedMetricFn: LossOrMetricFn;\n          //  TODO(cais): Use 'weights_' for weighted metrics.\n\n          for (const metric of metrics) {\n            if (typeof metric === 'string' &&\n                ['accuracy', 'acc', 'crossentropy', 'ce'].indexOf(metric) !==\n                    -1) {\n              const outputShape = this.internalOutputShapes[i];\n\n              if (outputShape[outputShape.length - 1] === 1 ||\n                  this.lossFunctions[i] === losses.binaryCrossentropy) {\n                // case: binary accuracy/crossentropy.\n                if (['accuracy', 'acc'].indexOf(metric) !== -1) {\n                  accFn = Metrics.binaryAccuracy;\n                } else if (['crossentropy', 'ce'].indexOf(metric) !== -1) {\n                  accFn = Metrics.binaryCrossentropy;\n                }\n              } else if (\n                  this.lossFunctions[i] ===\n                  losses.sparseCategoricalCrossentropy) {\n                // case: categorical accuracy / crossentropy with sparse\n                // targets.\n                if (['accuracy', 'acc'].indexOf(metric) !== -1) {\n                  accFn = Metrics.sparseCategoricalAccuracy;\n                } else if (['crossentropy', 'ce'].indexOf(metric) !== -1) {\n                  accFn = Metrics.sparseCategoricalCrossentropy;\n                }\n              } else {\n                // case: categorical accuracy / crossentropy.\n                if (['accuracy', 'acc'].indexOf(metric) !== -1) {\n                  accFn = Metrics.categoricalAccuracy;\n                } else if (['crossentropy', 'ce'].indexOf(metric) !== -1) {\n                  accFn = Metrics.categoricalCrossentropy;\n                }\n              }\n              let suffix: string;\n              if (['accuracy', 'acc'].indexOf(metric) !== -1) {\n                suffix = 'acc';\n              } else if (['crossentropy', 'ce'].indexOf(metric) !== -1) {\n                suffix = 'ce';\n              }\n              // TODO(cais): Add weighting actually.\n              weightedMetricFn = accFn;\n              metricName = metricNamePrefix + suffix;\n            } else {\n              const metricFn = Metrics.get(metric);\n              // TODO(cais): Add weighting actually.\n              weightedMetricFn = metricFn;\n              metricName =\n                  metricNamePrefix + Metrics.getLossOrMetricName(metric);\n            }\n\n            // TODO(cais): Add weighting and masking to metricResult.\n            let metricResult: LossOrMetricFn;\n            nameScope(metricName, () => {\n              metricResult = weightedMetricFn;\n            });\n            appendMetric(i, metricName, metricResult);\n          }\n        };\n\n        handleMetrics(outputMetrics);\n        // TODO(cais): Call handleMetrics with weights.\n      }\n    });\n\n    // Porting Notes: Given the imperative backend of tfjs-core,\n    //   there is no need for constructing the symbolic graph and placeholders.\n    this.collectedTrainableWeights = this.trainableWeights;\n  }\n\n  /**\n   * Check trainable weights count consistency.\n   *\n   * This will raise a warning if `this.trainableWeights` and\n   * `this.collectedTrainableWeights` are inconsistent (i.e., have different\n   * numbers of parameters).\n   * Inconsistency will typically arise when one modifies `model.trainable`\n   * without calling `model.compile()` again.\n   */\n  protected checkTrainableWeightsConsistency(): void {\n    if (this.collectedTrainableWeights == null) {\n      return;\n    }\n    if (this.trainableWeights.length !==\n        this.collectedTrainableWeights.length) {\n      console.warn(\n          'Discrepancy between trainableweights and collected trainable ' +\n          'weights. Did you set `model.trainable` without calling ' +\n          '`model.compile()` afterwards?');\n    }\n  }\n\n  /**\n   * Returns the loss value & metrics values for the model in test mode.\n   *\n   * Loss and metrics are specified during `compile()`, which needs to happen\n   * before calls to `evaluate()`.\n   *\n   * Computation is done in batches.\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});\n   * const result = model.evaluate(\n   *     tf.ones([8, 10]), tf.ones([8, 1]), {batchSize: 4});\n   * result.print();\n   * ```\n   *\n   * @param x `tf.Tensor` of test data, or an `Array` of `tf.Tensor`s if the\n   * model has multiple inputs.\n   * @param y `tf.Tensor` of target data, or an `Array` of `tf.Tensor`s if the\n   * model has multiple outputs.\n   * @param args A `ModelEvaluateArgs`, containing optional fields.\n   *\n   * @return `Scalar` test loss (if the model has a single output and no\n   *   metrics) or `Array` of `Scalar`s (if the model has multiple outputs\n   *   and/or metrics). The attribute `model.metricsNames`\n   *   will give you the display labels for the scalar outputs.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  evaluate(\n      x: Tensor|Tensor[], y: Tensor|Tensor[],\n      args: ModelEvaluateArgs = {}): Scalar|Scalar[] {\n    const batchSize = args.batchSize == null ? 32 : args.batchSize;\n    checkBatchSize(batchSize);\n\n    // TODO(cais): Standardize `config.sampleWeights` as well.\n    // Validate user data.\n    const checkBatchAxis = true;\n    const standardizedOuts =\n        this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize);\n    try {\n      // TODO(cais): If uses `useLearningPhase`, set the corresponding element\n      // of the input to 0.\n      const ins = standardizedOuts[0].concat(standardizedOuts[1]);\n      this.makeTestFunction();\n      const f = this.testFunction;\n      const testOuts =\n          this.testLoop(f, ins, batchSize, args.verbose, args.steps);\n      return singletonOrArray(testOuts);\n    } finally {\n      disposeNewTensors(standardizedOuts[0], x);\n      disposeNewTensors(standardizedOuts[1], y);\n    }\n  }\n\n  // TODO(cais): Add code snippet below once real dataset objects are\n  //   available.\n  /**\n   * Evaluate model using a dataset object.\n   *\n   * Note: Unlike `evaluate()`, this method is asynchronous (`async`);\n   *\n   * @param dataset A dataset object. Its `iterator()` method is expected\n   *   to generate a dataset iterator object, the `next()` method of which\n   *   is expected to produce data batches for evaluation. The return value\n   *   of the `next()` call ought to contain a boolean `done` field and a\n   *   `value` field. The `value` field is expected to be an array of two\n   *   `tf.Tensor`s or an array of two nested `tf.Tensor` structures. The former\n   *   case is for models with exactly one input and one output (e.g..\n   *   a sequential model). The latter case is for models with multiple\n   *   inputs and/or multiple outputs. Of the two items in the array, the\n   *   first is the input feature(s) and the second is the output target(s).\n   * @param args A configuration object for the dataset-based evaluation.\n   * @returns Loss and metric values as an Array of `Scalar` objects.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async evaluateDataset(dataset: Dataset<{}>, args?: ModelEvaluateDatasetArgs):\n      Promise<Scalar|Scalar[]> {\n    this.makeTestFunction();\n    return evaluateDataset(this, dataset, args);\n  }\n\n  /**\n   * Get number of samples provided for training, evaluation or prediction.\n   *\n   * @param ins Input `tf.Tensor`.\n   * @param batchSize Integer batch size, optional.\n   * @param steps Total number of steps (batches of samples) before\n   * declaring loop finished. Optional.\n   * @param stepsName The public API's parameter name for `steps`.\n   * @returns Number of samples provided.\n   */\n  private checkNumSamples(\n      ins: Tensor|Tensor[], batchSize?: number, steps?: number,\n      stepsName = 'steps'): number {\n    let numSamples: number;\n    if (steps != null) {\n      numSamples = null;\n      if (batchSize != null) {\n        throw new ValueError(\n            `If ${stepsName} is set, batchSize must be null or undefined.` +\n            `Got batchSize = ${batchSize}`);\n      }\n    } else if (ins != null) {\n      if (Array.isArray(ins)) {\n        numSamples = ins[0].shape[0];\n      } else {\n        numSamples = ins.shape[0];\n      }\n    } else {\n      throw new ValueError(\n          `Either the input data should have a defined shape, or ` +\n          `${stepsName} shoud be specified.`);\n    }\n    return numSamples;\n  }\n\n  /**\n   * Execute internal tensors of the model with input data feed.\n   * @param inputs Input data feed. Must match the inputs of the model.\n   * @param outputs Names of the output tensors to be fetched. Must match\n   *   names of the SymbolicTensors that belong to the graph.\n   * @returns Fetched values for `outputs`.\n   */\n  execute(inputs: Tensor|Tensor[]|NamedTensorMap, outputs: string|string[]):\n      Tensor|Tensor[] {\n    if (Array.isArray(outputs) && outputs.length === 0) {\n      throw new ValueError(\n          '`outputs` is an empty Array, which is not allowed.');\n    }\n\n    const outputsIsArray = Array.isArray(outputs);\n    const outputNames =\n        (outputsIsArray ? outputs as string[] : [outputs as string]);\n    const outputSymbolicTensors = this.retrieveSymbolicTensors(outputNames);\n\n    // Format the input into a FeedDict.\n    const feedDict = new FeedDict();\n    if (inputs instanceof Tensor) {\n      inputs = [inputs];\n    }\n    if (Array.isArray(inputs)) {\n      if (inputs.length !== this.inputs.length) {\n        throw new ValueError(\n            `The number of inputs provided (${inputs.length}) ` +\n            `does not match the number of inputs of this model ` +\n            `(${this.inputs.length}).`);\n      }\n      for (let i = 0; i < this.inputs.length; ++i) {\n        feedDict.add(this.inputs[i], inputs[i]);\n      }\n    } else {\n      for (const input of this.inputs) {\n        const tensorValue = inputs[input.name];\n        if (tensorValue == null) {\n          throw new ValueError(\n              `No value is provided for the model's input ${input.name}`);\n        }\n        feedDict.add(input, tensorValue);\n      }\n    }\n\n    // Run execution.\n    const executeOutputs = execute(outputSymbolicTensors, feedDict) as Tensor[];\n    return outputsIsArray ? executeOutputs : executeOutputs[0];\n  }\n\n  /**\n   * Retrieve the model's internal symbolic tensors from symbolic-tensor names.\n   */\n  private retrieveSymbolicTensors(symbolicTensorNames: string[]):\n      SymbolicTensor[] {\n    const outputSymbolicTensors: SymbolicTensor[] =\n        pyListRepeat(null, symbolicTensorNames.length);\n    let outputsRemaining = symbolicTensorNames.length;\n    for (const layer of this.layers) {\n      const layerOutputs: SymbolicTensor[] =\n          Array.isArray(layer.output) ? layer.output : [layer.output];\n      const layerOutputNames = layerOutputs.map(output => output.name);\n      for (let i = 0; i < symbolicTensorNames.length; ++i) {\n        const index = layerOutputNames.indexOf(symbolicTensorNames[i]);\n        if (index !== -1) {\n          outputSymbolicTensors[i] = layerOutputs[index];\n          outputsRemaining--;\n        }\n        if (outputsRemaining === 0) {\n          break;\n        }\n      }\n      if (outputsRemaining === 0) {\n        break;\n      }\n    }\n\n    if (outputsRemaining > 0) {\n      const remainingNames: string[] = [];\n      outputSymbolicTensors.forEach((tensor, i) => {\n        if (tensor == null) {\n          remainingNames.push(symbolicTensorNames[i]);\n        }\n      });\n      throw new ValueError(\n          `Cannot find SymbolicTensors for output name(s): ` +\n          `${JSON.stringify(remainingNames)}`);\n    }\n    return outputSymbolicTensors;\n  }\n\n  /**\n   * Helper method to loop over some data in batches.\n   *\n   * Porting Note: Not using the functional approach in the Python equivalent\n   *   due to the imperative backend.\n   * Porting Note: Does not support step mode currently.\n   *\n   * @param ins: input data\n   * @param batchSize: integer batch size.\n   * @param verbose: verbosity model\n   * @returns: Predictions as `tf.Tensor` (if a single output) or an `Array` of\n   *   `tf.Tensor` (if multipe outputs).\n   */\n  private predictLoop(ins: Tensor|Tensor[], batchSize = 32, verbose = false):\n      Tensor|Tensor[] {\n    return tfc.tidy(() => {\n      const numSamples = this.checkNumSamples(ins);\n      if (verbose) {\n        throw new NotImplementedError(\n            'Verbose predictLoop() is not implemented yet.');\n      }\n\n      // Sample-based predictions.\n      // Porting Note: Tensor currently does not support sliced assignments as\n      //   in numpy, e.g., x[1:3] = y. Therefore we use concatenation while\n      //   iterating over the batches.\n\n      const batches = makeBatches(numSamples, batchSize);\n      const outsBatches: Tensor[][] = this.outputs.map(output => []);\n\n      // TODO(cais): Can the scope() be pushed down inside the for loop?\n      for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) {\n        const batchOuts = tfc.tidy(() => {\n          const batchStart = batches[batchIndex][0];\n          const batchEnd = batches[batchIndex][1];\n          // TODO(cais): Take care of the case of the last element is a flag for\n          //   training/test.\n          const insBatch = sliceArrays(ins, batchStart, batchEnd);\n\n          // Construct the feeds for execute();\n          const feeds = [];\n          if (Array.isArray(insBatch)) {\n            for (let i = 0; i < insBatch.length; ++i) {\n              feeds.push({key: this.inputs[i], value: insBatch[i]});\n            }\n          } else {\n            feeds.push({key: this.inputs[0], value: insBatch});\n          }\n          const feedDict = new FeedDict(feeds);\n          return execute(this.outputs, feedDict) as Tensor[];\n        });\n        batchOuts.forEach((batchOut, i) => outsBatches[i].push(batchOut));\n      }\n      return singletonOrArray(\n          outsBatches.map(batches => tfc.concat(batches, 0)));\n    });\n  }\n\n  /**\n   * Generates output predictions for the input samples.\n   *\n   * Computation is done in batches.\n   *\n   * Note: the \"step\" mode of predict() is currently not supported.\n   *   This is because the TensorFlow.js core backend is imperative only.\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.predict(tf.ones([8, 10]), {batchSize: 4}).print();\n   * ```\n   *\n   * @param x The input data, as an Tensor, or an `Array` of `tf.Tensor`s if\n   *   the model has multiple inputs.\n   * @param args A `ModelPredictArgs` object containing optional fields.\n   *\n   * @return Prediction results as a `tf.Tensor`(s).\n   *\n   * @exception ValueError In case of mismatch between the provided input data\n   *   and the model's expectations, or in case a stateful model receives a\n   *   number of samples that is not a multiple of the batch size.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  predict(x: Tensor|Tensor[], args: ModelPredictArgs = {}): Tensor|Tensor[] {\n    const xsRank2OrHigher = ensureTensorsRank2OrHigher(x);\n    checkInputData(\n        xsRank2OrHigher, this.inputNames, this.feedInputShapes, false);\n    try {\n      // TODO(cais): Take care of stateful models.\n      //   if (this.stateful) ...\n      // TODO(cais): Take care of the learning_phase boolean flag.\n      //   if (this.useLearningPhase) ...\n      const batchSize = args.batchSize == null ? 32 : args.batchSize;\n      checkBatchSize(batchSize);\n      return this.predictLoop(xsRank2OrHigher, batchSize);\n    } finally {\n      disposeNewTensors(xsRank2OrHigher, x);\n    }\n  }\n\n  /**\n   * Returns predictions for a single batch of samples.\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.predictOnBatch(tf.ones([8, 10])).print();\n   * ```\n   * @param x: Input samples, as an Tensor (for models with exactly one\n   *   input) or an array of Tensors (for models with more than one input).\n   * @return Tensor(s) of predictions\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  predictOnBatch(x: Tensor|Tensor[]): Tensor|Tensor[] {\n    checkInputData(x, this.inputNames, this.feedInputShapes, true);\n    // TODO(cais): Take care of the learning_phase boolean flag.\n    //   if (this.useLearningPhase) ...\n    const batchSize = (Array.isArray(x) ? x[0] : x).shape[0];\n    return this.predictLoop(x, batchSize);\n  }\n\n  protected standardizeUserDataXY(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|{[inputName: string]: Tensor}, checkBatchAxis = true,\n      batchSize?: number): [Tensor[], Tensor[]] {\n    // TODO(cais): Add sampleWeight, classWeight\n    if (this.optimizer_ == null) {\n      throw new RuntimeError(\n          'You must compile a model before training/testing. Use ' +\n          'LayersModel.compile(modelCompileArgs).');\n    }\n    const outputShapes: Shape[] = [];\n    for (let i = 0; i < this.feedOutputShapes.length; ++i) {\n      const outputShape = this.feedOutputShapes[i];\n      const lossFn = this.feedLossFns[i];\n      if (lossFn === losses.sparseCategoricalCrossentropy) {\n        outputShapes.push(\n            outputShape.slice(0, outputShape.length - 1).concat([1]));\n      } else {\n        // Porting Note: Because of strong typing `lossFn` must be a function.\n        outputShapes.push(outputShape);\n      }\n    }\n    x = standardizeInputData(\n        x, this.feedInputNames, this.feedInputShapes, false, 'input');\n    y = standardizeInputData(\n        y, this.feedOutputNames, outputShapes, false, 'target');\n    // TODO(cais): Standardize sampleWeights & classWeights.\n    checkArrayLengths(x, y, null);\n    // TODO(cais): Check sampleWeights as well.\n    checkLossAndTargetCompatibility(y, this.feedLossFns, this.feedOutputShapes);\n    if (this.stateful && batchSize != null && batchSize > 0) {\n      if (x[0].shape[0] % batchSize !== 0) {\n        throw new ValueError(\n            `In a stateful network, you should only pass inputs with a ` +\n            `number of samples that is divisible by the batch size ` +\n            `${batchSize}. Found: ${x[0].shape[0]} sample(s).`);\n      }\n    }\n    return [x, y];\n  }\n\n  protected async standardizeUserData(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      sampleWeight?: Tensor|Tensor[]|{[outputName: string]: Tensor},\n      classWeight?: ClassWeight|ClassWeight[]|ClassWeightMap,\n      checkBatchAxis = true,\n      batchSize?: number): Promise<[Tensor[], Tensor[], Tensor[]]> {\n    const [standardXs, standardYs] =\n        this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize);\n    // TODO(cais): Handle sampleWeights.\n    if (sampleWeight != null) {\n      throw new Error('sample weight is not supported yet.');\n    }\n\n    let standardSampleWeights: Tensor[] = null;\n    if (classWeight != null) {\n      const classWeights =\n          standardizeClassWeights(classWeight, this.outputNames);\n      standardSampleWeights = [];\n      for (let i = 0; i < classWeights.length; ++i) {\n        standardSampleWeights.push(\n            await standardizeWeights(standardYs[i], null, classWeights[i]));\n      }\n    }\n\n    // TODO(cais): Deal with the case of model.stateful == true.\n    return [standardXs, standardYs, standardSampleWeights];\n  }\n\n  /**\n   * Loop over some test data in batches.\n   * @param f A Function returning a list of tensors.\n   * @param ins Array of tensors to be fed to `f`.\n   * @param batchSize Integer batch size or `null` / `undefined`.\n   * @param verbose verbosity mode.\n   * @param steps Total number of steps (batches of samples) before\n   * declaring test finished. Ignored with the default value of `null` /\n   * `undefined`.\n   * @returns Array of Scalars.\n   */\n  private testLoop(\n      f: (data: Tensor[]) => Scalar[], ins: Tensor[], batchSize?: number,\n      verbose = 0, steps?: number): Scalar[] {\n    return tfc.tidy(() => {\n      const numSamples = this.checkNumSamples(ins, batchSize, steps, 'steps');\n      const outs: Scalar[] = [];\n      if (verbose > 0) {\n        throw new NotImplementedError('Verbose mode is not implemented yet.');\n      }\n      // TODO(cais): Use `indicesForConversionToDense' to prevent slow down.\n      if (steps != null) {\n        throw new NotImplementedError(\n            'steps mode in testLoop() is not implemented yet');\n      } else {\n        const batches = makeBatches(numSamples, batchSize);\n        const indexArray = tensor1d(range(0, numSamples));\n        for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) {\n          const batchStart = batches[batchIndex][0];\n          const batchEnd = batches[batchIndex][1];\n          const batchIds =\n              K.sliceAlongFirstAxis(\n                  indexArray, batchStart, batchEnd - batchStart) as Tensor1D;\n          // TODO(cais): In ins, train flag can be a number, instead of an\n          //   Tensor? Do we need to handle this in tfjs-layers?\n          const insBatch = sliceArraysByIndices(ins, batchIds) as Scalar[];\n          const batchOuts = f(insBatch);\n          if (batchIndex === 0) {\n            for (let i = 0; i < batchOuts.length; ++i) {\n              outs.push(scalar(0));\n            }\n          }\n          for (let i = 0; i < batchOuts.length; ++i) {\n            const batchOut = batchOuts[i];\n            outs[i] =\n                tfc.add(outs[i], tfc.mul(batchEnd - batchStart, batchOut));\n          }\n        }\n        for (let i = 0; i < outs.length; ++i) {\n          outs[i] = tfc.div(outs[i], numSamples);\n        }\n      }\n      return outs;\n    });\n  }\n\n  protected getDedupedMetricsNames(): string[] {\n    const outLabels = this.metricsNames;\n    // Rename duplicated metrics names (can happen with an output layer\n    // shared among multiple dataflows).\n    const dedupedOutLabels = [];\n    for (let i = 0; i < outLabels.length; ++i) {\n      const label = outLabels[i];\n      let newLabel = label;\n      if (count(outLabels, label) > 1) {\n        const dupIndex = count(outLabels.slice(0, i), label);\n        newLabel += `_${dupIndex}`;\n      }\n      dedupedOutLabels.push(newLabel);\n    }\n    return dedupedOutLabels;\n  }\n\n  /**\n   * Creates a function that performs the following actions:\n   *\n   * 1. computes the losses\n   * 2. sums them to get the total loss\n   * 3. call the optimizer computes the gradients of the LayersModel's\n   *    trainable weights w.r.t. the total loss and update the variables\n   * 4. calculates the metrics\n   * 5. returns the values of the losses and metrics.\n   */\n  protected makeTrainFunction(): (data: Tensor[]) => Scalar[] {\n    return (data: Tensor[]) => {\n      const lossValues: Scalar[] = [];\n\n      const inputs = data.slice(0, this.inputs.length);\n      const targets = data.slice(\n          this.inputs.length, this.inputs.length + this.outputs.length);\n      const sampleWeights = data.slice(\n          this.inputs.length + this.outputs.length,\n          this.inputs.length + this.outputs.length * 2);\n\n      const metricsValues: Scalar[] = [];\n\n      // Create a function that computes the total loss based on the\n      // inputs. This function is used for obtaining gradients through\n      // backprop.\n      const totalLossFunction = () => {\n        const feeds = [];\n        for (let i = 0; i < this.inputs.length; ++i) {\n          feeds.push({key: this.inputs[i], value: inputs[i]});\n        }\n        const feedDict = new FeedDict(feeds);\n        const outputs =\n            execute(this.outputs, feedDict, {'training': true}) as Tensor[];\n        // TODO(cais): Take care of the case of multiple outputs from a\n        //   single layer?\n\n        let totalLoss: Tensor;\n        for (let i = 0; i < this.lossFunctions.length; ++i) {\n          const lossFunction = this.lossFunctions[i];\n          let loss = lossFunction(targets[i], outputs[i]);\n          if (sampleWeights[i] != null) {\n            loss = computeWeightedLoss(loss, sampleWeights[i]);\n          }\n\n          // TODO(cais): push Scalar instead.\n          const meanLoss: Scalar = tfc.mean(loss);\n          // TODO(cais): Use a scope() instead, to avoid ownership.\n          lossValues.push(meanLoss);\n          if (i === 0) {\n            totalLoss = loss;\n          } else {\n            totalLoss = tfc.add(totalLoss, loss);\n          }\n        }\n\n        // Compute the metrics.\n        // TODO(cais): These should probably be calculated outside\n        //   totalLossFunction to benefit speed?\n        for (let i = 0; i < this.metricsTensors.length; ++i) {\n          let weightedMetric: Scalar;\n\n          if (this.outputs.length > 1 && i < this.outputs.length) {\n            weightedMetric = lossValues[i];\n          } else {\n            const metric = this.metricsTensors[i][0];\n            const outputIndex = this.metricsTensors[i][1];\n            weightedMetric =\n                tfc.mean(metric(targets[outputIndex], outputs[outputIndex]));\n          }\n\n          tfc.keep(weightedMetric);\n          // TODO(cais): Use a scope() instead, to avoid ownership.\n          metricsValues.push(weightedMetric);\n        }\n\n        totalLoss = tfc.mean(totalLoss);\n\n        // Add regularizer penalties.\n        this.calculateLosses().forEach(regularizerLoss => {\n          totalLoss = tfc.add(totalLoss, regularizerLoss);\n        });\n\n        return totalLoss as Scalar;\n      };\n\n      const variables = this.collectedTrainableWeights.map(\n          param => param.read() as tfc.Variable);\n      const returnCost = true;\n      const totalLossValue =\n          this.optimizer_.minimize(totalLossFunction, returnCost, variables);\n\n      return [totalLossValue].concat(metricsValues);\n    };\n  }\n\n  /**\n   * Create a function which, when invoked with an array of `tf.Tensor`s as a\n   * batch of inputs, returns the prespecified loss and metrics of the model\n   * under the batch of input data.\n   */\n  private makeTestFunction() {\n    this.testFunction = (data: Tensor[]) => {\n      return tfc.tidy(() => {\n        const valOutputs: Scalar[] = [];\n        let totalLoss: Scalar;\n        const inputs = data.slice(0, this.inputs.length);\n        const targets = data.slice(\n            this.inputs.length, this.inputs.length + this.outputs.length);\n        const feeds = [];\n        for (let i = 0; i < this.inputs.length; ++i) {\n          feeds.push({key: this.inputs[i], value: inputs[i]});\n        }\n        const feedDict = new FeedDict(feeds);\n        const outputs = execute(this.outputs, feedDict) as Tensor[];\n        // Compute total loss.\n        for (let i = 0; i < this.lossFunctions.length; ++i) {\n          const lossFunction = this.lossFunctions[i];\n          // TODO(cais): Add sample weighting and replace the simple\n          // averaging.\n          const loss: Scalar = tfc.mean(lossFunction(targets[i], outputs[i]));\n          if (i === 0) {\n            totalLoss = loss;\n          } else {\n            totalLoss = tfc.add(totalLoss, loss);\n          }\n          valOutputs.push(totalLoss);\n        }\n        // Compute the metrics.\n        for (let i = 0; i < this.metricsTensors.length; ++i) {\n          const metric = this.metricsTensors[i][0];\n          const outputIndex = this.metricsTensors[i][1];\n          // TODO(cais): Replace K.mean() with a proper weighting function.\n          const meanMetric =\n              tfc.mean(metric(targets[outputIndex], outputs[outputIndex]));\n          valOutputs.push(meanMetric as Scalar);\n        }\n        return valOutputs;\n      });\n    };\n  }\n\n  /**\n   * Trains the model for a fixed number of epochs (iterations on a\n   * dataset).\n   *\n   * ```js\n   * const model = tf.sequential({\n   *     layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});\n   * for (let i = 1; i < 5 ; ++i) {\n   *   const h = await model.fit(tf.ones([8, 10]), tf.ones([8, 1]), {\n   *       batchSize: 4,\n   *       epochs: 3\n   *   });\n   *   console.log(\"Loss after Epoch \" + i + \" : \" + h.history.loss[0]);\n   * }\n   * ```\n   *\n   * @param x `tf.Tensor` of training data, or an array of `tf.Tensor`s if the\n   * model has multiple inputs. If all inputs in the model are named, you\n   * can also pass a dictionary mapping input names to `tf.Tensor`s.\n   * @param y `tf.Tensor` of target (label) data, or an array of `tf.Tensor`s if\n   * the model has multiple outputs. If all outputs in the model are named,\n   * you can also pass a dictionary mapping output names to `tf.Tensor`s.\n   * @param args A `ModelFitArgs`, containing optional fields.\n   *\n   * @return A `History` instance. Its `history` attribute contains all\n   *   information collected during training.\n   *\n   * @exception ValueError In case of mismatch between the provided input\n   * data and what the model expects.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async fit(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      args: ModelFitArgs = {}): Promise<History> {\n    return fitTensors(this, x, y, args);\n  }\n\n  // TODO(cais): Add code snippet below when it's possible to instantiate\n  //   actual dataset objects.\n  /**\n   * Trains the model using a dataset object.\n   *\n   * @param dataset A dataset object. Its `iterator()` method is expected\n   *   to generate a dataset iterator object, the `next()` method of which\n   *   is expected to produce data batches for training. The return value\n   *   of the `next()` call ought to contain a boolean `done` field and a\n   *   `value` field. The `value` field is expected to be an array of two\n   *   `tf.Tensor`s or an array of two nested `tf.Tensor` structures. The former\n   *   case is for models with exactly one input and one output (e.g..\n   *   a sequential model). The latter case is for models with multiple\n   *   inputs and/or multiple outputs.\n   *   Of the two items in the array, the first is the input feature(s) and\n   *   the second is the output target(s).\n   * @param args A `ModelFitDatasetArgs`, containing optional fields.\n   *\n   * @return A `History` instance. Its `history` attribute contains all\n   *   information collected during training.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async fitDataset<T>(dataset: Dataset<T>, args: ModelFitDatasetArgs<T>):\n      Promise<History> {\n    return fitDataset(this, dataset, args);\n  }\n\n  /**\n   * Runs a single gradient update on a single batch of data.\n   *\n   * This method differs from `fit()` and `fitDataset()` in the following\n   * regards:\n   *   - It operates on exactly one batch of data.\n   *   - It returns only the loss and matric values, instead of\n   *     returning the batch-by-batch loss and metric values.\n   *   - It doesn't support fine-grained options such as verbosity and\n   *     callbacks.\n   *\n   * @param x Input data. It could be one of the following:\n   *   - A `tf.Tensor`, or an Array of `tf.Tensor`s (in case the model has\n   *     multiple inputs).\n   *   - An Object mapping input names to corresponding `tf.Tensor` (if the\n   *     model has named inputs).\n   * @param y Target darta. It could be either a `tf.Tensor` a multiple\n   *   `tf.Tensor`s. It should be consistent with `x`.\n   * @returns Training loss or losses (in case the model has\n   *   multiple outputs), along with metrics (if any), as numbers.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async trainOnBatch(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|\n      {[inputName: string]: Tensor}): Promise<number|number[]> {\n    // TODO(cais): Support sampleWeight and classWeight.\n    // TODO(cais): Support Dataset objects.\n    const standardizeOut = await this.standardizeUserData(x, y);\n    const inputs = standardizeOut[0];\n    const targets = standardizeOut[1];\n    const trainFunction = this.makeTrainFunction();\n    const losses = trainFunction(inputs.concat(targets));\n    const lossValues: number[] = [];\n    for (const loss of losses) {\n      const v = await loss.data();\n      lossValues.push(v[0]);\n    }\n    tfc.dispose(losses);\n    return singletonOrArray(lossValues);\n  }\n\n  /**\n   * Extract weight values of the model.\n   *\n   * @param config: An instance of `io.SaveConfig`, which specifies\n   * model-saving options such as whether only trainable weights are to be\n   * saved.\n   * @returns A `NamedTensorMap` mapping original weight names (i.e.,\n   *   non-uniqueified weight names) to their values.\n   */\n  protected getNamedWeights(config?: io.SaveConfig): NamedTensor[] {\n    const namedWeights: NamedTensor[] = [];\n\n    const trainableOnly = config != null && config.trainableOnly;\n    const weights = trainableOnly ? this.trainableWeights : this.weights;\n    const weightValues = this.getWeights(trainableOnly);\n    for (let i = 0; i < weights.length; ++i) {\n      if (trainableOnly && !weights[i].trainable) {\n        // Optionally skip non-trainable weights.\n        continue;\n      }\n      namedWeights.push(\n          {name: weights[i].originalName, tensor: weightValues[i]});\n    }\n    return namedWeights;\n  }\n\n  /**\n   * Setter used for force stopping of LayersModel.fit() (i.e., training).\n   *\n   * Example:\n   *\n   * ```js\n   * const input = tf.input({shape: [10]});\n   * const output = tf.layers.dense({units: 1}).apply(input);\n   * const model = tf.model({inputs: [input], outputs: [output]});\n   * model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});\n   * const xs = tf.ones([8, 10]);\n   * const ys = tf.zeros([8, 1]);\n   *\n   * const history = await model.fit(xs, ys, {\n   *   epochs: 10,\n   *   callbacks: {\n   *     onEpochEnd: async (epoch, logs) => {\n   *       if (epoch === 2) {\n   *         model.stopTraining = true;\n   *       }\n   *     }\n   *   }\n   * });\n   *\n   * // There should be only 3 values in the loss array, instead of 10\n   * values,\n   * // due to the stopping after 3 epochs.\n   * console.log(history.history.loss);\n   * ```\n   */\n  set stopTraining(stop: boolean) {\n    this.stopTraining_ = stop;\n  }\n\n  get stopTraining(): boolean {\n    return this.stopTraining_;\n  }\n\n  get optimizer(): Optimizer {\n    return this.optimizer_;\n  }\n\n  set optimizer(optimizer: Optimizer) {\n    if (this.optimizer_ !== optimizer) {\n      this.optimizer_ = optimizer;\n      this.isOptimizerOwned = false;\n    }\n  }\n\n  dispose(): DisposeResult {\n    const result = super.dispose();\n    if (result.refCountAfterDispose === 0 && this.optimizer != null &&\n        this.isOptimizerOwned) {\n      const numTensorsBeforeOptmizerDisposal = tfc.memory().numTensors;\n      this.optimizer_.dispose();\n      result.numDisposedVariables +=\n          numTensorsBeforeOptmizerDisposal - tfc.memory().numTensors;\n    }\n    return result;\n  }\n\n  private getLossIdentifiers(): LossIdentifier|LossIdentifier[]|\n      {[outputName: string]: LossIdentifier} {\n    let lossNames: LossIdentifier|LossIdentifier[]|\n        {[outputName: string]: LossIdentifier};\n    if (typeof this.loss === 'string') {\n      lossNames = toSnakeCase(this.loss) as LossIdentifier;\n    } else if (Array.isArray(this.loss)) {\n      for (const loss of this.loss) {\n        if (typeof loss !== 'string') {\n          throw new Error('Serialization of non-string loss is not supported.');\n        }\n      }\n      lossNames = (this.loss as string[]).map(name => toSnakeCase(name)) as\n          LossIdentifier[];\n    } else {\n      const outputNames = Object.keys(this.loss);\n      lossNames = {} as {[outputName: string]: LossIdentifier};\n      const losses =\n          this.loss as {[outputName: string]: LossOrMetricFn | string};\n      for (const outputName of outputNames) {\n        if (typeof losses[outputName] === 'string') {\n          lossNames[outputName] =\n              toSnakeCase(losses[outputName] as string) as LossIdentifier;\n        } else {\n          throw new Error('Serialization of non-string loss is not supported.');\n        }\n      }\n    }\n    return lossNames;\n  }\n\n  private getMetricIdentifiers(): MetricsIdentifier[]|\n      {[key: string]: MetricsIdentifier} {\n    if (typeof this.metrics === 'string' ||\n        typeof this.metrics === 'function') {\n      return [toSnakeCase(Metrics.getLossOrMetricName(this.metrics))];\n    } else if (Array.isArray(this.metrics)) {\n      return this.metrics.map(\n          metric => toSnakeCase(Metrics.getLossOrMetricName(metric)));\n    } else {\n      const metricsIdentifiers: {[key: string]: MetricsIdentifier} = {};\n      for (const key in this.metrics) {\n        metricsIdentifiers[key] =\n            toSnakeCase(Metrics.getLossOrMetricName(this.metrics[key]));\n      }\n      return metricsIdentifiers;\n    }\n  }\n\n  protected getTrainingConfig(): TrainingConfig {\n    return {\n      loss: this.getLossIdentifiers(),\n      metrics: this.getMetricIdentifiers(),\n      optimizer_config: {\n        class_name: this.optimizer.getClassName(),\n        config: this.optimizer.getConfig()\n      } as OptimizerSerialization\n    };\n    // TODO(cais): Add weight_metrics when they are supported.\n    // TODO(cais): Add sample_weight_mode when it's supported.\n    // TODO(cais): Add loss_weights when it's supported.\n  }\n\n  loadTrainingConfig(trainingConfig: TrainingConfig) {\n    if (trainingConfig.weighted_metrics != null) {\n      throw new Error('Loading weight_metrics is not supported yet.');\n    }\n    if (trainingConfig.loss_weights != null) {\n      throw new Error('Loading loss_weights is not supported yet.');\n    }\n    if (trainingConfig.sample_weight_mode != null) {\n      throw new Error('Loading sample_weight_mode is not supported yet.');\n    }\n\n    const tsConfig = convertPythonicToTs(trainingConfig.optimizer_config) as\n        serialization.ConfigDict;\n    const optimizer = deserialize(tsConfig) as Optimizer;\n\n    let loss;\n    if (typeof trainingConfig.loss === 'string') {\n      loss = toCamelCase(trainingConfig.loss);\n    } else if (Array.isArray(trainingConfig.loss)) {\n      loss = trainingConfig.loss.map(lossEntry => toCamelCase(lossEntry));\n    } else if (trainingConfig.loss != null) {\n      loss = {} as {[outputName: string]: LossIdentifier};\n      for (const key in trainingConfig.loss) {\n        loss[key] = toCamelCase(trainingConfig.loss[key]) as LossIdentifier;\n      }\n    }\n\n    let metrics;\n    if (Array.isArray(trainingConfig.metrics)) {\n      metrics = trainingConfig.metrics.map(metric => toCamelCase(metric));\n    } else if (trainingConfig.metrics != null) {\n      metrics = {} as {[outputName: string]: MetricsIdentifier};\n      for (const key in trainingConfig.metrics) {\n        metrics[key] = toCamelCase(trainingConfig.metrics[key]);\n      }\n    }\n\n    this.compile({loss, metrics, optimizer});\n  }\n\n  /**\n   * Save the configuration and/or weights of the LayersModel.\n   *\n   * An `IOHandler` is an object that has a `save` method of the proper\n   * signature defined. The `save` method manages the storing or\n   * transmission of serialized data (\"artifacts\") that represent the\n   * model's topology and weights onto or via a specific medium, such as\n   * file downloads, local storage, IndexedDB in the web browser and HTTP\n   * requests to a server. TensorFlow.js provides `IOHandler`\n   * implementations for a number of frequently used saving mediums, such as\n   * `tf.io.browserDownloads` and `tf.io.browserLocalStorage`. See `tf.io`\n   * for more details.\n   *\n   * This method also allows you to refer to certain types of `IOHandler`s\n   * as URL-like string shortcuts, such as 'localstorage://' and\n   * 'indexeddb://'.\n   *\n   * Example 1: Save `model`'s topology and weights to browser [local\n   * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n   * then load it back.\n   *\n   * ```js\n   * const model = tf.sequential(\n   *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n   * console.log('Prediction from original model:');\n   * model.predict(tf.ones([1, 3])).print();\n   *\n   * const saveResults = await model.save('localstorage://my-model-1');\n   *\n   * const loadedModel = await tf.loadLayersModel('localstorage://my-model-1');\n   * console.log('Prediction from loaded model:');\n   * loadedModel.predict(tf.ones([1, 3])).print();\n   * ```\n   *\n   * Example 2. Saving `model`'s topology and weights to browser\n   * [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API);\n   * then load it back.\n   *\n   * ```js\n   * const model = tf.sequential(\n   *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n   * console.log('Prediction from original model:');\n   * model.predict(tf.ones([1, 3])).print();\n   *\n   * const saveResults = await model.save('indexeddb://my-model-1');\n   *\n   * const loadedModel = await tf.loadLayersModel('indexeddb://my-model-1');\n   * console.log('Prediction from loaded model:');\n   * loadedModel.predict(tf.ones([1, 3])).print();\n   * ```\n   *\n   * Example 3. Saving `model`'s topology and weights as two files\n   * (`my-model-1.json` and `my-model-1.weights.bin`) downloaded from\n   * browser.\n   *\n   * ```js\n   * const model = tf.sequential(\n   *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n   * const saveResults = await model.save('downloads://my-model-1');\n   * ```\n   *\n   * Example 4. Send  `model`'s topology and weights to an HTTP server.\n   * See the documentation of `tf.io.http` for more details\n   * including specifying request parameters and implementation of the\n   * server.\n   *\n   * ```js\n   * const model = tf.sequential(\n   *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n   * const saveResults = await model.save('http://my-server/model/upload');\n   * ```\n   *\n   * @param handlerOrURL An instance of `IOHandler` or a URL-like,\n   * scheme-based string shortcut for `IOHandler`.\n   * @param config Options for saving the model.\n   * @returns A `Promise` of `SaveResult`, which summarizes the result of\n   * the saving, such as byte sizes of the saved artifacts for the model's\n   *   topology and weight values.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n   */\n  async save(handlerOrURL: io.IOHandler|string, config?: io.SaveConfig):\n      Promise<io.SaveResult> {\n    if (typeof handlerOrURL === 'string') {\n      const handlers = io.getSaveHandlers(handlerOrURL);\n      if (handlers.length === 0) {\n        throw new ValueError(\n            `Cannot find any save handlers for URL '${handlerOrURL}'`);\n      } else if (handlers.length > 1) {\n        throw new ValueError(\n            `Found more than one (${handlers.length}) save handlers for ` +\n            `URL '${handlerOrURL}'`);\n      }\n      handlerOrURL = handlers[0];\n    }\n    if (handlerOrURL.save == null) {\n      throw new ValueError(\n          'LayersModel.save() cannot proceed because the IOHandler ' +\n          'provided does not have the `save` attribute defined.');\n    }\n\n    const weightDataAndSpecs =\n        await io.encodeWeights(this.getNamedWeights(config));\n\n    const returnString = false;\n    const unusedArg: {} = null;\n    const modelConfig = this.toJSON(unusedArg, returnString);\n    const modelArtifacts: io.ModelArtifacts = {\n      modelTopology: modelConfig,\n      format: LAYERS_MODEL_FORMAT_NAME,\n      generatedBy: `TensorFlow.js tfjs-layers v${version}`,\n      convertedBy: null,\n    };\n\n    const includeOptimizer = config == null ? false : config.includeOptimizer;\n    if (includeOptimizer && this.optimizer != null) {\n      modelArtifacts.trainingConfig = this.getTrainingConfig();\n      const weightType = 'optimizer';\n      const {data: optimizerWeightData, specs: optimizerWeightSpecs} =\n          await io.encodeWeights(await this.optimizer.getWeights(), weightType);\n      weightDataAndSpecs.specs.push(...optimizerWeightSpecs);\n      weightDataAndSpecs.data = io.concatenateArrayBuffers(\n          [weightDataAndSpecs.data, optimizerWeightData]);\n    }\n\n    if (this.userDefinedMetadata != null) {\n      // Check serialized size of user-defined metadata.\n      const checkSize = true;\n      checkUserDefinedMetadata(this.userDefinedMetadata, this.name, checkSize);\n      modelArtifacts.userDefinedMetadata = this.userDefinedMetadata;\n    }\n\n    modelArtifacts.weightData = weightDataAndSpecs.data;\n    modelArtifacts.weightSpecs = weightDataAndSpecs.specs;\n    return handlerOrURL.save(modelArtifacts);\n  }\n\n  /**\n   * Set user-defined metadata.\n   *\n   * The set metadata will be serialized together with the topology\n   * and weights of the model during `save()` calls.\n   *\n   * @param setUserDefinedMetadata\n   */\n  setUserDefinedMetadata(userDefinedMetadata: {}): void {\n    checkUserDefinedMetadata(userDefinedMetadata, this.name);\n    this.userDefinedMetadata = userDefinedMetadata;\n  }\n\n  /**\n   * Get user-defined metadata.\n   *\n   * The metadata is supplied via one of the two routes:\n   *   1. By calling `setUserDefinedMetadata()`.\n   *   2. Loaded during model loading (if the model is constructed\n   *      via `tf.loadLayersModel()`.)\n   *\n   * If no user-defined metadata is available from either of the\n   * two routes, this function will return `undefined`.\n   */\n  getUserDefinedMetadata(): {} {\n    return this.userDefinedMetadata;\n  }\n}\nserialization.registerClass(LayersModel);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source keras/models.py */\n\nimport {dispose, io, NamedTensorMap, Optimizer, Scalar, serialization, Tensor, util} from '@tensorflow/tfjs-core';\n\nimport {getUid} from './backend/state';\nimport {History} from './base_callbacks';\nimport {Dataset} from './engine/dataset_stub';\nimport {Input} from './engine/input_layer';\nimport {getSourceInputs, Layer, Node, SymbolicTensor} from './engine/topology';\nimport {LayersModel, ModelCompileArgs, ModelEvaluateArgs} from './engine/training';\nimport {ModelEvaluateDatasetArgs, ModelFitDatasetArgs} from './engine/training_dataset';\nimport {ModelFitArgs} from './engine/training_tensors';\nimport {NotImplementedError, RuntimeError, ValueError} from './errors';\nimport {Shape} from './keras_format/common';\nimport {TrainingConfig} from './keras_format/training_config';\nimport {PyJsonDict} from './keras_format/types';\nimport {deserialize} from './layers/serialization';\nimport {Kwargs, NamedTensor} from './types';\nimport * as generic_utils from './utils/generic_utils';\nimport {convertPythonicToTs} from './utils/serialization_utils';\nimport {getExactlyOneShape} from './utils/types_utils';\n\n/**\n * Parses a JSON model configuration file and returns a model instance.\n *\n * ```js\n * // This example shows how to serialize a model using `toJSON()` and\n * // deserialize it as another model using `tf.models.modelFromJSON()`.\n * // Note: this example serializes and deserializes only the topology\n * // of the model; the weights of the loaded model will be different\n * // from those of the the original model, due to random weight\n * // initialization.\n * // To load the topology and weights of a model, use `tf.loadLayersModel()`.\n * const model1 = tf.sequential();\n * model1.add(tf.layers.repeatVector({inputShape: [2], n: 4}));\n * // Serialize `model1` as a JSON object.\n * const model1JSON = model1.toJSON(null, false);\n * model1.summary();\n *\n * const model2 = await tf.models.modelFromJSON(model1JSON);\n * model2.summary();\n * ```\n *\n *  @param modelAndWeightsConfig JSON object or string encoding a model and\n *       weights configuration. It can also be only the topology JSON of the\n *       model, in which case the weights will not be loaded.\n *  @param custom_objects Optional dictionary mapping names\n *       (strings) to custom classes or functions to be\n *       considered during deserialization.\n * @returns A TensorFlow.js Layers `tf.LayersModel` instance (uncompiled).\n */\nexport async function modelFromJSON(\n    modelAndWeightsConfig: ModelAndWeightsConfig|PyJsonDict,\n    customObjects?: serialization.ConfigDict): Promise<LayersModel> {\n  if (!('modelTopology' in modelAndWeightsConfig)) {\n    modelAndWeightsConfig = {modelTopology: modelAndWeightsConfig};\n  }\n  modelAndWeightsConfig = modelAndWeightsConfig as ModelAndWeightsConfig;\n\n  let modelTopology = modelAndWeightsConfig.modelTopology;\n  if (modelTopology['model_config'] != null) {\n    // If the model-topology JSON contains a 'model_config' field, then it is\n    // a full model JSON (e.g., from `keras.Model.save()`), which contains\n    // not only the model's architecture in its 'model_config' field, but\n    // additional information such as the model's optimizer. We use only the\n    // 'model_config' field currently.\n    modelTopology = modelTopology['model_config'] as PyJsonDict;\n  }\n  const tsConfig =\n      convertPythonicToTs(modelTopology) as serialization.ConfigDict;\n  const model = deserialize(tsConfig, customObjects) as LayersModel;\n\n  if (modelAndWeightsConfig.weightsManifest != null) {\n    // Load the weight values keyed by the original tensor names in the model\n    // file that was loaded.  These should match the keys of the weight\n    // manifest.\n    const weightValues = await io.loadWeights(\n        modelAndWeightsConfig.weightsManifest, modelAndWeightsConfig.pathPrefix,\n        model.weights.map(weight => weight.originalName));\n\n    // Map the weights to the unique tensor names generated during model loading\n    const uniqueWeightValues: NamedTensorMap = {};\n    for (const weight of model.weights) {\n      uniqueWeightValues[weight.originalName] =\n          weightValues[weight.originalName];\n    }\n\n    model.loadWeights(uniqueWeightValues);\n    // Dispose temporary weight values.\n    dispose(weightValues);\n  }\n  return model;\n}\n\n/**\n * Options for loading a saved mode in TensorFlow.js format.\n */\nexport interface ModelAndWeightsConfig {\n  /**\n   * A JSON object or JSON string containing the model config.\n   *\n   * This can be either of the following two formats:\n   *   - A model archiecture-only config,  i.e., a format consistent with the\n   *     return value of`keras.Model.to_json()`.\n   *   - A full model config, containing not only model architecture, but also\n   *     training options and state, i.e., a format consistent with the return\n   *     value of `keras.models.save_model()`.\n   */\n  modelTopology: PyJsonDict;\n\n  /**\n   * A weights manifest in TensorFlow.js format.\n   */\n  weightsManifest?: io.WeightsManifestConfig;\n\n  /**\n   * Path to prepend to the paths in `weightManifest` before fetching.\n   *\n   * The path may optionally end in a slash ('/').\n   */\n  pathPrefix?: string;\n}\n\n// TODO(nielsene): Remove after: https://github.com/tensorflow/tfjs/issues/400\nexport interface ModelPredictArgs {\n  /**\n   * Optional. Batch size (Integer). If unspecified, it will default to 32.\n   */\n  batchSize?: number;\n\n  /**\n   * Optional. Verbosity mode. Defaults to false.\n   */\n  verbose?: boolean;\n}\n\n/**\n * Load a model, including its topology and optionally weights.  See the\n * Tutorial named \"How to import a Keras Model\" for usage examples.\n *\n * Example 1: Save `model`'s topology and weights to browser [local\n * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n * then load it back.\n *\n * ```js\n * const model = tf.sequential(\n *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n * console.log('Prediction from original model:');\n * model.predict(tf.ones([1, 3])).print();\n *\n * const saveResults = await model.save('localstorage://my-model-1');\n *\n * const loadedModel = await tf.loadLayersModel('localstorage://my-model-1');\n * console.log('Prediction from loaded model:');\n * loadedModel.predict(tf.ones([1, 3])).print();\n * ```\n *\n * Example 2. Saving `model`'s topology and weights to browser\n * [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API);\n * then load it back.\n *\n * ```js\n * const model = tf.sequential(\n *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n * console.log('Prediction from original model:');\n * model.predict(tf.ones([1, 3])).print();\n *\n * const saveResults = await model.save('indexeddb://my-model-1');\n *\n * const loadedModel = await tf.loadLayersModel('indexeddb://my-model-1');\n * console.log('Prediction from loaded model:');\n * loadedModel.predict(tf.ones([1, 3])).print();\n * ```\n *\n * Example 3. Load a model from user-selected files from HTML\n * [file input\n * elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file).\n *\n * ```js\n * // Note: this code snippet will not work without the HTML elements in the\n * //   page\n * const jsonUpload = document.getElementById('json-upload');\n * const weightsUpload = document.getElementById('weights-upload');\n *\n * const model = await tf.loadLayersModel(\n *     tf.io.browserFiles([jsonUpload.files[0], weightsUpload.files[0]]));\n * ```\n *\n * Example 4. Load a model from an HTTP server.\n *\n * ```js\n * const model = await\n *     tf.loadLayersModel('https://storage.googleapis.com/tfjs-models/tfjs/iris_v1/model.json');\n * model.summary();\n * ```\n *\n * @param pathOrIOHandler Can be either of the two formats\n *   1. A string path to the `ModelAndWeightsConfig` JSON describing\n *      the model in the canonical TensorFlow.js format. This path will be\n *      interpreted as a relative HTTP path, to which `fetch` will be used to\n *      request the model topology and weight manifest JSON.\n *      The content of the JSON file is assumed to be a JSON object with the\n *      following fields and values:\n *      - 'modelTopology': A JSON object that can be either of:\n *        1. a model architecture JSON consistent with the format of the return\n *            value of `keras.Model.to_json()`\n *        2. a full model JSON in the format of `keras.models.save_model()`.\n *      - 'weightsManifest': A TensorFlow.js weights manifest.\n *      See the Python converter function `save_model()` for more details.\n *      It is also assumed that model weights can be accessed from relative\n *      paths described by the `paths` fields in weights manifest.\n *   2. An `tf.io.IOHandler` object that loads model artifacts with its `load`\n *      method.\n * @param options Optional configuration arguments for the model loading,\n *   including:\n *   - `strict`: Require that the provided weights exactly match those required\n *     by the layers.  Default true.  Passing false means that both extra\n *     weights and missing weights will be silently ignored.\n *   - `onProgress`: A progress callback of the form:\n *     `(fraction: number) => void`. This callback can be used to monitor the\n *     model-loading process.\n * @returns A `Promise` of `tf.LayersModel`, with the topology and weights\n *     loaded.\n */\nexport async function loadLayersModelInternal(\n    pathOrIOHandler: string|io.IOHandler,\n    options?: io.LoadOptions): Promise<LayersModel> {\n  if (options == null) {\n    options = {};\n  }\n  if (typeof pathOrIOHandler === 'string') {\n    const handlers = io.getLoadHandlers(pathOrIOHandler, options.onProgress);\n    if (handlers.length === 0) {\n      // For backward compatibility: if no load handler can be found,\n      // assume it is a relative http path.\n      // TODO(cais): Reformat the args into a single `LoadOptions` once the core\n      // is refactored.\n      handlers.push(io.browserHTTPRequest(pathOrIOHandler, options));\n    } else if (handlers.length > 1) {\n      throw new ValueError(\n          `Found more than one (${handlers.length}) load handlers for ` +\n          `URL '${pathOrIOHandler}'`);\n    }\n    pathOrIOHandler = handlers[0];\n  }\n  return loadLayersModelFromIOHandler(pathOrIOHandler, undefined, options);\n}\n\n/**\n * Load a model and optionally its weights, using an IOHandler object.\n *\n * @param handler The instance of `IOHandler` to be used during the model\n *   loading.\n * @param customObjects Any optional custom objects to be used during model\n *   loading.\n * @param strict Whether the weight loading will be done in strict mode.\n *   Default: `true`.\n */\nexport async function loadLayersModelFromIOHandler(\n    handler: io.IOHandler, customObjects?: serialization.ConfigDict,\n    options?: io.LoadOptions): Promise<LayersModel> {\n  if (options == null) {\n    options = {};\n  }\n  if (handler.load == null) {\n    throw new ValueError(\n        'Cannot proceed with model loading because the IOHandler provided ' +\n        'does not have the `load` method implemented.');\n  }\n  const artifacts = await handler.load();\n  let modelTopology = artifacts.modelTopology as PyJsonDict;\n  if (modelTopology['model_config'] != null) {\n    modelTopology = modelTopology['model_config'] as PyJsonDict;\n  }\n\n  const strict = options.strict == null ? true : options.strict;\n  // If weights are provided and the weight-loading mode is strict, use\n  // fast weight initialization. This skips costly initializers such as\n  // 'orthogonal' and saves unnecessary computation in cases where\n  // the initialized weight values will immediately be overwritten by\n  // loaded weight values.\n  const fastWeightInit =\n      artifacts.weightData != null && artifacts.weightSpecs != null && strict;\n  const model =\n      deserialize(\n          convertPythonicToTs(modelTopology) as serialization.ConfigDict,\n          customObjects, fastWeightInit) as LayersModel;\n\n  const trainingConfig = artifacts.trainingConfig as TrainingConfig;\n  if (trainingConfig != null) {\n    model.loadTrainingConfig(trainingConfig);\n  }\n  if (artifacts.userDefinedMetadata != null) {\n    model.setUserDefinedMetadata(artifacts.userDefinedMetadata);\n  }\n\n  // If weightData is present, load the weights into the model.\n  if (artifacts.weightData != null) {\n    // Loading weights requires weightSpecs.\n    if (artifacts.weightSpecs == null) {\n      throw new ValueError(\n          'LayersModel artifacts contains weight data, but not weight specs. ' +\n          'Therefore loading of weights cannot proceed.');\n    }\n\n    const {modelWeights, optimizerWeights} = decodeModelAndOptimizerWeights(\n        artifacts.weightData, artifacts.weightSpecs);\n    model.loadWeights(modelWeights, strict);\n\n    if (model.optimizer != null && optimizerWeights.length > 0) {\n      await model.optimizer.setWeights(optimizerWeights);\n    }\n\n    // Dispose temporary weight values.\n    dispose(modelWeights);\n    dispose(optimizerWeights.map(w => w.tensor));\n  }\n  return model;\n}\n\nfunction decodeModelAndOptimizerWeights(\n    buffer: ArrayBuffer, specs: io.WeightsManifestEntry[]):\n    {modelWeights: NamedTensorMap, optimizerWeights: NamedTensor[]} {\n  const name2Tensor = io.decodeWeights(buffer, specs);\n  const modelWeights: NamedTensorMap = {};\n  const optimizerWeights: NamedTensor[] = [];\n  specs.forEach(spec => {\n    if (spec.group === 'optimizer') {\n      optimizerWeights.push({name: spec.name, tensor: name2Tensor[spec.name]});\n    } else {\n      modelWeights[spec.name] = name2Tensor[spec.name];\n    }\n  });\n  return {modelWeights, optimizerWeights};\n}\n\n/**\n * Configuration for a Sequential model.\n */\nexport interface SequentialArgs {\n  /** Stack of layers for the model. */\n  layers?: Layer[];\n\n  /** The name of this model. */\n  name?: string;\n}\n\n/**\n * A model with a stack of layers, feeding linearly from one to the next.\n *\n * `tf.sequential` is a factory function that creates an instance of\n * `tf.Sequential`.\n *\n * ```js\n *  // Define a model for linear regression.\n *  const model = tf.sequential();\n *  model.add(tf.layers.dense({units: 1, inputShape: [1]}));\n *\n *  // Prepare the model for training: Specify the loss and the optimizer.\n *  model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});\n *\n *  // Generate some synthetic data for training.\n *  const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);\n *  const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);\n *\n *  // Train the model using the data then do inference on a data point the\n *  // model hasn't seen:\n *  await model.fit(xs, ys);\n *  model.predict(tf.tensor2d([5], [1, 1])).print();\n * ```\n */\n/** @doc {heading: 'Models', subheading: 'Classes'} */\nexport class Sequential extends LayersModel {\n  /** @nocollapse */\n  static className = 'Sequential';\n  private model: LayersModel;\n  constructor(args?: SequentialArgs) {\n    super({inputs: [], outputs: []});\n    args = args || {};\n\n    this.trainable = true;\n    this.built = false;\n\n    // Set model name.\n    this.name = (args.name != null) ? args.name : getUid('sequential_');\n\n    // Add to the model any layers passed to the constructor.\n    if (args.layers != null) {\n      for (const layer of args.layers) {\n        this.add(layer);\n      }\n    }\n  }\n\n  // Helper function to Sequential.add  Throws if the new output shape will be\n  // invalid.\n  private checkShape(layer: Layer) {\n    const shape = layer.inboundNodes[0].outputTensors[0].shape;\n    if (shape.some(x => x < 0)) {\n      throw new ValueError(\n          'Negative dimension size caused by adding layer ' +\n          `${layer.name} with input shape [` +\n          `${layer.inboundNodes[0].inputTensors[0].shape}]`);\n    }\n  }\n\n  /**\n   * Adds a layer instance on top of the layer stack.\n   *\n   * ```js\n   *  const model = tf.sequential();\n   *  model.add(tf.layers.dense({units: 8, inputShape: [1]}));\n   *  model.add(tf.layers.dense({units: 4, activation: 'relu6'}));\n   *  model.add(tf.layers.dense({units: 1, activation: 'relu6'}));\n   *  // Note that the untrained model is random at this point.\n   *  model.predict(tf.randomNormal([10, 1])).print();\n   * ```\n   * @param layer Layer instance.\n   *\n   * @exception ValueError In case the `layer` argument does not know its\n   * input shape.\n   * @exception ValueError In case the `layer` argument has multiple output\n   *   tensors, or is already connected somewhere else (forbidden in\n   *   `Sequential` models).\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  add(layer: Layer): void {\n    const isLayerModelInstance =\n        layer instanceof Sequential || layer instanceof LayersModel;\n    let modelLayer: LayersModel;\n    if (isLayerModelInstance) {\n      modelLayer = layer as LayersModel;\n      if (modelLayer.outputs.length !== 1) {\n        throw new ValueError(\n            'All layers in a Sequential model ' +\n            'should have a single output tensor. ' +\n            'For multi-output layers, ' +\n            'use the functional API.');\n      }\n      if (modelLayer.inputs.length !== 1) {\n        throw new ValueError(\n            'All layers in a Sequential model ' +\n            'should have a single input tensor. ' +\n            'For multi-input layers, ' +\n            'use the functional API.');\n      }\n    }\n\n    if (this.outputs.length === 0) {\n      // first layer in model: check that it is an input layer\n      if (layer.inboundNodes.length === 0) {\n        // create an input layer\n        if (layer.batchInputShape == null) {\n          throw new ValueError(\n              'The first layer in a Sequential model must ' +\n              'get an `inputShape` or `batchInputShape` argument.');\n        }\n        // Instantiate the input layer.\n        const x = Input({\n          batchShape: layer.batchInputShape,\n          dtype: layer.dtype,\n          name: layer.name + '_input'\n        });\n        // This will build the current layer and create the node connecting\n        // the current layer to the input layer we just created.\n        layer.apply(x);\n      }\n\n      if (isLayerModelInstance) {\n        this.outputs = modelLayer.outputs;\n        this.inputs = modelLayer.inputs;\n      } else {\n        if (layer.inboundNodes.length !== 1) {\n          throw new ValueError(\n              'A layer added to a Sequential model must not already be ' +\n              `connected somewhere else. LayersModel received layer ${\n                  layer.name} ` +\n              `which has ${layer.inboundNodes.length} pre-existing inbound ` +\n              'connections.');\n        }\n\n        if (layer.inboundNodes[0].outputTensors.length !== 1) {\n          throw new ValueError(\n              'All layers in a Sequential model ' +\n              'should have a single output tensor. ' +\n              'For multi-output layers, ' +\n              'use the functional API.');\n        }\n        this.checkShape(layer);\n        this.outputs = [layer.inboundNodes[0].outputTensors[0]];\n        this.inputs = getSourceInputs(this.outputs[0]);\n      }\n\n      this.inboundNodes = [];\n      // We create an input node, which we will keep updated\n      // as we add more layers.\n      // (This call has side effects.)\n      // tslint:disable-next-line:no-unused-expression\n      new Node({\n        outboundLayer: this,\n        inboundLayers: [],\n        nodeIndices: [],\n        tensorIndices: [],\n        inputTensors: this.inputs,\n        outputTensors: this.outputs,\n        // no model-level masking for now\n        inputMasks: generic_utils.pyListRepeat(null, this.inputs.length),\n        outputMasks: [null],\n        inputShapes: this.inputs.map(x => x.shape),\n        outputShapes: this.outputs[0].shape\n      });\n    } else {\n      const outputTensor = layer.apply(this.outputs[0]);\n      if (Array.isArray(outputTensor)) {\n        throw new TypeError(\n            'All layers in a Sequential model ' +\n            'should have a single output tensor. ' +\n            'For multi-output layers, ' +\n            'use the functional API.');\n      }\n      this.checkShape(layer);\n      this.outputs = [outputTensor as SymbolicTensor];\n      // update self.inbound_nodes\n      this.inboundNodes[0].outputTensors = this.outputs;\n      this.inboundNodes[0].outputShapes = [this.outputs[0].shape];\n    }\n\n    this.layers.push(layer);\n    this.built = false;\n  }\n\n  /**\n   * Removes the last layer in the model.\n   *\n   * @exception TypeError if there are no layers in the model.\n   */\n  pop(): void {\n    if (this.layers.length === 0) {\n      throw new TypeError('There are no layers in the model.');\n    }\n\n    this.layers.pop();\n    if (this.layers.length === 0) {\n      this.outputs = [];\n      this.inboundNodes = [];\n      this.outboundNodes = [];\n    } else {\n      const lastLayerIndex = this.layers.length - 1;\n      this.layers[lastLayerIndex].outboundNodes = [];\n      this.outputs = [this.layers[lastLayerIndex].output as SymbolicTensor];\n      // update self.inbound_nodes\n      this.inboundNodes[0].outputTensors = this.outputs;\n      this.inboundNodes[0].outputShapes = [this.outputs[0].shape];\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    if (this.model == null) {\n      this.build();\n    }\n    return this.model.call(inputs, kwargs);\n  }\n\n  build(inputShape?: Shape|Shape[]) {\n    // Call `getExactlyOneShape` without using its return value,\n    // to verify that exactly one input shape is provided.\n    getExactlyOneShape(inputShape);\n\n    if (this.inputs.length === 0 || this.outputs.length === 0) {\n      throw new TypeError(\n          'Sequential model cannot be built: model is empty.' +\n          ' Add some layers first.');\n    }\n    // actually create the model\n    this.model = new LayersModel({\n      inputs: this.inputs,\n      outputs: this.outputs[0],\n      name: this.name + '_model'\n    });\n    this.model.trainable = this.trainable;\n\n    // mirror model attributes\n    this.supportsMasking = this.model.supportsMasking;\n    // TODO(michaelterry): Add caches\n    this.inputLayers = this.model.inputLayers;\n    this.inputLayersNodeIndices = this.model.inputLayersNodeIndices;\n    this.inputLayersTensorIndices = this.model.inputLayersTensorIndices;\n    this.outputLayers = this.model.outputLayers;\n    this.outputLayersNodeIndices = this.model.outputLayersNodeIndices;\n    this.outputLayersTensorIndices = this.model.outputLayersTensorIndices;\n    this.nodesByDepth = this.model.nodesByDepth;\n    this.containerNodes = this.model.containerNodes;\n    this.outputNames = this.model.outputNames;\n    this.inputNames = this.model.inputNames;\n    // TODO(michaelterry): Add feedInputNames, feedInputs, if needed.\n    // TODO(michaelterry): Add callbackModel if needed.\n    this.built = true;\n  }\n\n  countParams(): number {\n    if (!this.built) {\n      this.build();\n    }\n    return super.countParams();\n  }\n\n  /**\n   * Print a text summary of the Sequential model's layers.\n   *\n   * The summary includes\n   * - Name and type of all layers that comprise the model.\n   * - Output shape(s) of the layers\n   * - Number of weight parameters of each layer\n   * - The total number of trainable and non-trainable parameters of the\n   * model.\n   *\n   * ```js\n   * const model = tf.sequential();\n   * model.add(\n   *     tf.layers.dense({units: 100, inputShape: [10], activation: 'relu'}));\n   * model.add(tf.layers.dense({units: 1, activation: 'sigmoid'}));\n   *\n   * model.summary();\n   * ```\n   *\n   * @param lineLength Custom line length, in number of characters.\n   * @param positions Custom widths of each of the columns, as either\n   *   fractions of `lineLength` (e.g., `[0.5, 0.75, 1]`) or absolute number\n   *   of characters (e.g., `[30, 50, 65]`). Each number corresponds to\n   *   right-most (i.e., ending) position of a column.\n   * @param printFn Custom print function. Can be used to replace the default\n   *   `console.log`. For example, you can use `x => {}` to mute the printed\n   *   messages in the console.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  summary(\n      lineLength?: number, positions?: number[],\n      printFn:\n          // tslint:disable-next-line:no-any\n      (message?: any, ...optionalParams: any[]) => void = console.log) {\n    if (!this.built) {\n      this.build();\n    }\n    super.summary(lineLength, positions, printFn);\n  }\n\n  /**\n   * Sets the weights of the model.\n   *\n   * @param weights Should be a list of Tensors with shapes and types matching\n   *   the output of `model.getWeights()`.\n   */\n  setWeights(weights: Tensor[]): void {\n    if (this.model == null) {\n      this.build();\n    }\n    this.model.setWeights(weights);\n  }\n\n  /**\n   * Returns the loss value & metrics values for the model in test mode.\n   *\n   * Loss and metrics are specified during `compile()`, which needs to happen\n   * before calls to `evaluate()`.\n   *\n   * Computation is done in batches.\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});\n   * const result = model.evaluate(tf.ones([8, 10]), tf.ones([8, 1]), {\n   *   batchSize: 4,\n   * });\n   * result.print();\n   * ```\n   *\n   * @param x `tf.Tensor` of test data, or an `Array` of `tf.Tensor`s if the\n   * model has multiple inputs.\n   * @param y `tf.Tensor` of target data, or an `Array` of `tf.Tensor`s if the\n   * model has multiple outputs.\n   * @param args A `ModelEvaluateConfig`, containing optional fields.\n   *\n   * @return `Scalar` test loss (if the model has a single output and no\n   *   metrics) or `Array` of `Scalar`s (if the model has multiple outputs\n   *   and/or metrics). The attribute `model.metricsNames`\n   *   will give you the display labels for the scalar outputs.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  evaluate(\n      x: Tensor|Tensor[], y: Tensor|Tensor[],\n      args: ModelEvaluateArgs = {}): Scalar|Scalar[] {\n    if (!this.built) {\n      throw new RuntimeError(\n          'The model needs to be compiled before being used.');\n    }\n    return this.model.evaluate(x, y, args);\n  }\n\n  // TODO(cais): Add code snippet below once real dataset objects are\n  //   available.\n  /**\n   * Evaluate model using a dataset object.\n   *\n   * Note: Unlike `evaluate()`, this method is asynchronous (`async`);\n   *\n   * @param dataset A dataset object. Its `iterator()` method is expected\n   *   to generate a dataset iterator object, the `next()` method of which\n   *   is expected to produce data batches for evaluation. The return value\n   *   of the `next()` call ought to contain a boolean `done` field and a\n   *   `value` field. The `value` field is expected to be an array of two\n   *   `tf.Tensor`s or an array of two nested `tf.Tensor` structures. The former\n   *   case is for models with exactly one input and one output (e.g..\n   *   a sequential model). The latter case is for models with multiple\n   *   inputs and/or multiple outputs. Of the two items in the array, the\n   *   first is the input feature(s) and the second is the output target(s).\n   * @param args A configuration object for the dataset-based evaluation.\n   * @returns Loss and metric values as an Array of `Scalar` objects.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async evaluateDataset(dataset: Dataset<{}>, args: ModelEvaluateDatasetArgs):\n      Promise<Scalar|Scalar[]> {\n    if (!this.built) {\n      throw new RuntimeError(\n          'The model needs to be compiled before being used.');\n    }\n    return this.model.evaluateDataset(dataset, args);\n  }\n\n  /**\n   * Generates output predictions for the input samples.\n   *\n   * Computation is done in batches.\n   *\n   * Note: the \"step\" mode of predict() is currently not supported.\n   *   This is because the TensorFow.js core backend is imperative only.\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.predict(tf.ones([2, 10])).print();\n   * ```\n   *\n   * @param x The input data, as an Tensor, or an `Array` of `tf.Tensor`s if\n   *   the model has multiple inputs.\n   * @param conifg A `ModelPredictConfig` object containing optional fields.\n   *\n   * @return `tf.Tensor`(s) of predictions.\n   *\n   * @exception ValueError In case of mismatch between the provided input data\n   *   and the model's expectations, or in case a stateful model receives a\n   *   number of samples that is not a multiple of the batch size.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  predict(x: Tensor|Tensor[], args: ModelPredictArgs = {}): Tensor|Tensor[] {\n    if (this.model == null) {\n      this.build();\n    }\n    return this.model.predict(x, args);\n  }\n\n  /**\n   * Returns predictions for a single batch of samples.\n   *\n   * @param x: Input samples, as an Tensor, or list of Tensors (if the model\n   *   has multiple inputs).\n   * @return Tensor(s) of predictions\n   */\n  predictOnBatch(x: Tensor): Tensor|Tensor[] {\n    if (this.model == null) {\n      this.build();\n    }\n    return this.model.predictOnBatch(x);\n  }\n\n  /**\n   * See `LayersModel.compile`.\n   *\n   * @param args\n   */\n  compile(args: ModelCompileArgs): void {\n    this.build();\n    this.model.compile(args);\n    this.optimizer_ = this.model.optimizer;\n    // tslint:disable-next-line:no-any\n    this.isOptimizerOwned = (this.model as any).isOptimizerOwned;\n    this.loss = this.model.loss;\n    this.metrics = this.model.metrics;\n    // TODO(cais): Add this.lossWeights, this.sampleWeightMode,\n    //   this.weightedMetrics, this.targets.\n    this.metricsTensors = this.model.metricsTensors;\n    this.metricsNames = this.model.metricsNames;\n    // TODO(cais): Add sampleWeights.\n  }\n\n  get optimizer(): Optimizer {\n    return this.model == null ? undefined : this.model.optimizer;\n  }\n\n  set optimizer(optimizer: Optimizer) {\n    this.model.optimizer = optimizer;\n  }\n\n  /**\n   * Trains the model for a fixed number of epochs (iterations on a dataset).\n   *\n   * ```js\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [10]})]\n   * });\n   * model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});\n   * const history = await model.fit(tf.ones([8, 10]), tf.ones([8, 1]), {\n   *   batchSize: 4,\n   *   epochs: 3\n   * });\n   * console.log(history.history.loss[0]);\n   * ```\n   *\n   * @param x `tf.Tensor` of training data, or an array of `tf.Tensor`s if the\n   * model has multiple inputs. If all inputs in the model are named, you can\n   * also pass a dictionary mapping input names to `tf.Tensor`s.\n   * @param y `tf.Tensor` of target (label) data, or an array of `tf.Tensor`s if\n   * the model has multiple outputs. If all outputs in the model are named, you\n   *  can also pass a dictionary mapping output names to `tf.Tensor`s.\n   * @param args  A `ModelFitConfig`, containing optional fields.\n   *\n   * @return A `History` instance. Its `history` attribute contains all\n   *   information collected during training.\n   *\n   * @exception ValueError In case of mismatch between the provided input data\n   *   and what the model expects.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async fit(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      args: ModelFitArgs = {}): Promise<History> {\n    if (!this.built) {\n      throw new RuntimeError(\n          'The model needs to be compiled before ' +\n          'being used.');\n    }\n    return this.model.fit(x, y, args);\n  }\n\n  /**\n   * Trains the model using a dataset object.\n   *\n   * ```js\n   * const xArray = [\n   *   [1, 1, 1, 1, 1, 1, 1, 1, 1],\n   *   [1, 1, 1, 1, 1, 1, 1, 1, 1],\n   *   [1, 1, 1, 1, 1, 1, 1, 1, 1],\n   *   [1, 1, 1, 1, 1, 1, 1, 1, 1],\n   * ];\n   * const yArray = [1, 1, 1, 1];\n   * // Create a dataset from the JavaScript array.\n   * const xDataset = tf.data.array(xArray);\n   * const yDataset = tf.data.array(yArray);\n   * // Zip combines the `x` and `y` Datasets into a single Dataset, the\n   * // iterator of which will return an object containing of two tensors,\n   * // corresponding to `x` and `y`.  The call to `batch(4)` will bundle\n   * // four such samples into a single object, with the same keys now pointing\n   * // to tensors that hold 4 examples, organized along the batch dimension.\n   * // The call to `shuffle(4)` causes each iteration through the dataset to\n   * // happen in a different order.  The size of the shuffle window is 4.\n   * const xyDataset = tf.data.zip({xs: xDataset, ys: yDataset})\n   *     .batch(4)\n   *     .shuffle(4);\n   * const model = tf.sequential({\n   *   layers: [tf.layers.dense({units: 1, inputShape: [9]})]\n   * });\n   * model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});\n   * const history = await model.fitDataset(xyDataset, {\n   *   epochs: 4,\n   *   callbacks: {onEpochEnd: (epoch, logs) => console.log(logs.loss)}\n   * });\n   * ```\n   *\n   * @param dataset A dataset object. Its `iterator()` method is expected to\n   *   generate a dataset iterator object, the `next()` method of which is\n   *   expected to produce data batches for evaluation. The return value of the\n   *   `next()` call ought to contain a boolean `done` field and a `value`\n   *   field.\n   *\n   *   The `value` field is expected to be an object of with fields\n   *   `xs` and `ys`, which point to the feature tensor and the target tensor,\n   *   respectively. This case is for models with exactly one input and one\n   *   output (e.g.. a sequential model). For example:\n   *   ```js\n   *   {value: {xs: xsTensor, ys: ysTensor}, done: false}\n   *   ```\n   *\n   *   If the model has multiple inputs, the `xs` field of `value` should\n   *   be an object mapping input names to their respective feature tensors.\n   *   For example:\n   *   ```js\n   *   {\n   *     value: {\n   *       xs: {\n   *         input_1: xsTensor1,\n   *         input_2: xsTensor2\n   *       },\n   *       ys: ysTensor\n   *     },\n   *     done: false\n   *   }\n   *   ```\n   *   If the model has multiple outputs, the `ys` field of `value` should\n   *   be an object mapping output names to their respective target tensors.\n   *   For example:\n   *   ```js\n   *   {\n   *     value: {\n   *       xs: xsTensor,\n   *       ys: {\n   *         output_1: ysTensor1,\n   *         output_2: ysTensor2\n   *       },\n   *     },\n   *     done: false\n   *   }\n   *   ```\n   * @param args A `ModelFitDatasetArgs`, containing optional fields.\n   *\n   * @return A `History` instance. Its `history` attribute contains all\n   *   information collected during training.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n   */\n  async fitDataset<T>(dataset: Dataset<T>, args: ModelFitDatasetArgs<T>):\n      Promise<History> {\n    if (!this.built) {\n      throw new RuntimeError(\n          'The model needs to be compiled before ' +\n          'being used.');\n    }\n    return this.model.fitDataset(dataset, args);\n  }\n\n  /**\n   * Runs a single gradient update on a single batch of data.\n   *\n   * This method differs from `fit()` and `fitDataset()` in the following\n   * regards:\n   *   - It operates on exactly one batch of data.\n   *   - It returns only the loss and matric values, instead of\n   *     returning the batch-by-batch loss and metric values.\n   *   - It doesn't support fine-grained options such as verbosity and\n   *     callbacks.\n   *\n   * @param x Input data. It could be one of the following:\n   *   - A `tf.Tensor`, or an Array of `tf.Tensor`s (in case the model has\n   *     multiple inputs).\n   *   - An Object mapping input names to corresponding `tf.Tensor` (if the\n   *     model has named inputs).\n   * @param y Target darta. It could be either a `tf.Tensor` a multiple\n   *   `tf.Tensor`s. It should be consistent with `x`.\n   * @returns Training loss or losses (in case the model has\n   *   multiple outputs), along with metrics (if any), as numbers.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes'}\n   */\n  async trainOnBatch(\n      x: Tensor|Tensor[]|{[inputName: string]: Tensor},\n      y: Tensor|Tensor[]|\n      {[inputName: string]: Tensor}): Promise<number|number[]> {\n    return this.model.trainOnBatch(x, y);\n  }\n\n  /* See parent class for JsDoc */\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict,\n      customObjects = {} as serialization.ConfigDict,\n      fastWeightInit = false): T {\n    let configArray: serialization.ConfigDictArray;\n    let extraModelConfig: serialization.ConfigDict = {};\n    if (config instanceof Array) {\n      if (!(config[0].className != null) ||\n          config[0]['className'] === 'Merge') {\n        throw new ValueError('Legacy serialization format not supported yet.');\n      }\n      configArray = config;\n    } else {\n      util.assert(\n          config['layers'] != null,\n          () =>\n              `When the config data for a Sequential model is not an Array, ` +\n              `it must be an Object that contains the 'layers' field.`);\n      configArray = config['layers'] as serialization.ConfigDictArray;\n      delete config['layers'];\n      extraModelConfig = config;\n    }\n\n    const model = new cls(extraModelConfig);\n    if (!(model instanceof Sequential)) {\n      throw new NotImplementedError(\n          `Sequential.fromConfig called on non-Sequential input: ${model}`);\n    }\n    for (const conf of configArray) {\n      const customObjects: serialization.ConfigDict = undefined;\n      const layer = deserialize(\n                        conf as serialization.ConfigDict, customObjects,\n                        fastWeightInit) as Layer;\n      if (fastWeightInit) {\n        layer.setFastWeightInitDuringBuild(true);\n      }\n      model.add(layer);\n    }\n    return model;\n  }\n\n  /**\n   * Setter used for force stopping of LayersModel.fit() (i.e., training).\n   *\n   * Example:\n   *\n   * ```js\n   * const model = tf.sequential();\n   * model.add(tf.layers.dense({units: 1, inputShape: [10]}));\n   * model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});\n   * const xs = tf.ones([8, 10]);\n   * const ys = tf.zeros([8, 1]);\n   *\n   * const history = await model.fit(xs, ys, {\n   *   epochs: 10,\n   *   callbacks: {\n   *     onEpochEnd: async (epoch, logs) => {\n   *       if (epoch === 2) {\n   *         model.stopTraining = true;\n   *       }\n   *     }\n   *   }\n   * });\n   *\n   * // There should be only 3 values in the loss array, instead of 10 values,\n   * // due to the stopping after 3 epochs.\n   * console.log(history.history.loss);\n   * ```\n   */\n  set stopTraining(stop: boolean) {\n    // TODO(cais): When refactoring to remove the composition pattern happens,\n    // remove this method overriding.\n    if (this.model == null) {\n      throw new ValueError(\n          'Cannot set the stopTraining property of a sequential model before ' +\n          'it is compiled.');\n    }\n    this.model.stopTraining = stop;\n  }\n\n  get stopTraining(): boolean {\n    if (this.model == null) {\n      throw new ValueError(\n          'Cannot get the stopTraining property of a sequential model before ' +\n          'it is compiled.');\n    }\n    return this.model.stopTraining;\n  }\n\n  // TODO(cais): Override get trainableWeights() here\n\n  // tslint:disable-next-line:no-any\n  getConfig(): any {\n    // NOTE(cais): We override the return type of getConfig() to `any` here,\n    //   because the `Sequential` class is a special case among `Container`\n    //   subtypes in that its getConfig() method returns an Array (not a\n    //   dict).\n    const layers: serialization.ConfigDict[] = [];\n    for (const layer of this.layers) {\n      const dict: serialization.ConfigDict = {};\n      dict['className'] = layer.getClassName();\n      dict['config'] = layer.getConfig();\n      layers.push(dict);\n    }\n    return {name: this.name, layers};\n  }\n}\nserialization.registerClass(Sequential);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Exported functions.\n */\n\nimport {io} from '@tensorflow/tfjs-core';\n\nimport {BaseCallbackConstructor, CallbackConstructorRegistry} from './base_callbacks';\nimport {ContainerArgs} from './engine/container';\nimport {Input, InputConfig,} from './engine/input_layer';\nimport {SymbolicTensor} from './engine/topology';\nimport {LayersModel} from './engine/training';\nimport {loadLayersModelInternal, Sequential, SequentialArgs} from './models';\n\n// TODO(cais): Add doc string to all the public static functions in this\n//   class; include exectuable JavaScript code snippets where applicable\n//   (b/74074458).\n\n// LayersModel and related factory methods.\n\n/**\n * A model is a data structure that consists of `Layers` and defines inputs\n * and outputs.\n *\n * The key difference between `tf.model` and `tf.sequential` is that\n * `tf.model` is more generic, supporting an arbitrary graph (without\n * cycles) of layers. `tf.sequential` is less generic and supports only a linear\n * stack of layers.\n *\n * When creating a `tf.LayersModel`, specify its input(s) and output(s). Layers\n * are used to wire input(s) to output(s).\n *\n * For example, the following code snippet defines a model consisting of\n * two `dense` layers, with 10 and 4 units, respectively.\n *\n * ```js\n * // Define input, which has a size of 5 (not including batch dimension).\n * const input = tf.input({shape: [5]});\n *\n * // First dense layer uses relu activation.\n * const denseLayer1 = tf.layers.dense({units: 10, activation: 'relu'});\n * // Second dense layer uses softmax activation.\n * const denseLayer2 = tf.layers.dense({units: 4, activation: 'softmax'});\n *\n * // Obtain the output symbolic tensor by applying the layers on the input.\n * const output = denseLayer2.apply(denseLayer1.apply(input));\n *\n * // Create the model based on the inputs.\n * const model = tf.model({inputs: input, outputs: output});\n *\n * // The model can be used for training, evaluation and prediction.\n * // For example, the following line runs prediction with the model on\n * // some fake data.\n * model.predict(tf.ones([2, 5])).print();\n * ```\n * See also:\n *   `tf.sequential`, `tf.loadLayersModel`.\n */\n\n/**\n * @doc {heading: 'Models', subheading: 'Creation'}\n */\nexport function model(args: ContainerArgs): LayersModel {\n  return new LayersModel(args);\n}\n\n/**\n * Creates a `tf.Sequential` model.  A sequential model is any model where the\n * outputs of one layer are the inputs to the next layer, i.e. the model\n * topology is a simple 'stack' of layers, with no branching or skipping.\n *\n * This means that the first layer passed to a `tf.Sequential` model should have\n * a defined input shape. What that means is that it should have received an\n * `inputShape` or `batchInputShape` argument, or for some type of layers\n * (recurrent, Dense...) an `inputDim` argument.\n *\n * The key difference between `tf.model` and `tf.sequential` is that\n * `tf.sequential` is less generic, supporting only a linear stack of layers.\n * `tf.model` is more generic and supports an arbitrary graph (without\n * cycles) of layers.\n *\n * Examples:\n *\n * ```js\n * const model = tf.sequential();\n *\n * // First layer must have an input shape defined.\n * model.add(tf.layers.dense({units: 32, inputShape: [50]}));\n * // Afterwards, TF.js does automatic shape inference.\n * model.add(tf.layers.dense({units: 4}));\n *\n * // Inspect the inferred shape of the model's output, which equals\n * // `[null, 4]`. The 1st dimension is the undetermined batch dimension; the\n * // 2nd is the output size of the model's last layer.\n * console.log(JSON.stringify(model.outputs[0].shape));\n * ```\n *\n * It is also possible to specify a batch size (with potentially undetermined\n * batch dimension, denoted by \"null\") for the first layer using the\n * `batchInputShape` key. The following example is equivalent to the above:\n *\n * ```js\n * const model = tf.sequential();\n *\n * // First layer must have a defined input shape\n * model.add(tf.layers.dense({units: 32, batchInputShape: [null, 50]}));\n * // Afterwards, TF.js does automatic shape inference.\n * model.add(tf.layers.dense({units: 4}));\n *\n * // Inspect the inferred shape of the model's output.\n * console.log(JSON.stringify(model.outputs[0].shape));\n * ```\n *\n * You can also use an `Array` of already-constructed `Layer`s to create\n * a `tf.Sequential` model:\n *\n * ```js\n * const model = tf.sequential({\n *   layers: [tf.layers.dense({units: 32, inputShape: [50]}),\n *            tf.layers.dense({units: 4})]\n * });\n * console.log(JSON.stringify(model.outputs[0].shape));\n * ```\n */\n/**\n * @doc {heading: 'Models', subheading: 'Creation'}\n */\nexport function sequential(config?: SequentialArgs): Sequential {\n  return new Sequential(config);\n}\n\n/**\n * Load a model composed of Layer objects, including its topology and optionally\n * weights. See the Tutorial named \"How to import a Keras Model\" for usage\n * examples.\n *\n * This method is applicable to:\n *\n * 1. Models created with the `tf.layers.*`, `tf.sequential`, and\n * `tf.model` APIs of TensorFlow.js and later saved with the\n * `tf.LayersModel.save` method.\n * 2. Models converted from Keras or TensorFlow tf.keras using\n *    the [tensorflowjs_converter](https://github.com/tensorflow/tfjs-converter)\n *\n * This mode is *not* applicable to TensorFlow `SavedModel`s or their converted\n * forms. For those models, use `tf.loadGraphModel`.\n *\n * Example 1. Load a model from an HTTP server.\n *\n * ```js\n * const model = await tf.loadLayersModel(\n *     'https://storage.googleapis.com/tfjs-models/tfjs/iris_v1/model.json');\n * model.summary();\n * ```\n *\n * Example 2: Save `model`'s topology and weights to browser [local\n * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n * then load it back.\n *\n * ```js\n * const model = tf.sequential(\n *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n * console.log('Prediction from original model:');\n * model.predict(tf.ones([1, 3])).print();\n *\n * const saveResults = await model.save('localstorage://my-model-1');\n *\n * const loadedModel = await tf.loadLayersModel('localstorage://my-model-1');\n * console.log('Prediction from loaded model:');\n * loadedModel.predict(tf.ones([1, 3])).print();\n * ```\n *\n * Example 3. Saving `model`'s topology and weights to browser\n * [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API);\n * then load it back.\n *\n * ```js\n * const model = tf.sequential(\n *     {layers: [tf.layers.dense({units: 1, inputShape: [3]})]});\n * console.log('Prediction from original model:');\n * model.predict(tf.ones([1, 3])).print();\n *\n * const saveResults = await model.save('indexeddb://my-model-1');\n *\n * const loadedModel = await tf.loadLayersModel('indexeddb://my-model-1');\n * console.log('Prediction from loaded model:');\n * loadedModel.predict(tf.ones([1, 3])).print();\n * ```\n *\n * Example 4. Load a model from user-selected files from HTML\n * [file input\n * elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file).\n *\n * ```js\n * // Note: this code snippet will not work without the HTML elements in the\n * //   page\n * const jsonUpload = document.getElementById('json-upload');\n * const weightsUpload = document.getElementById('weights-upload');\n *\n * const model = await tf.loadLayersModel(\n *     tf.io.browserFiles([jsonUpload.files[0], weightsUpload.files[0]]));\n * ```\n *\n * @param pathOrIOHandler Can be either of the two formats\n *   1. A string path to the `ModelAndWeightsConfig` JSON describing\n *      the model in the canonical TensorFlow.js format. For file://\n *      (tfjs-node-only), http:// and https:// schemas, the path can be\n *      either absolute or relative.\n *   2. An `tf.io.IOHandler` object that loads model artifacts with its `load`\n *      method.\n * @param options Optional configuration arguments for the model loading,\n *   including:\n *   - `strict`: Require that the provided weights exactly match those required\n *     by the layers.  Default true.  Passing false means that both extra\n *     weights and missing weights will be silently ignored.\n *   - ｀onProgress｀: A function of the signature `(fraction: number) => void',\n *     that can be used as the progress callback for the model loading.\n * @returns A `Promise` of `tf.LayersModel`, with the topology and weights\n *     loaded.\n */\n/** @doc {heading: 'Models', subheading: 'Loading'} */\nexport function loadLayersModel(\n    pathOrIOHandler: string|io.IOHandler,\n    options?: io.LoadOptions): Promise<LayersModel> {\n  if (options == null) {\n    options = {};\n  }\n  return loadLayersModelInternal(pathOrIOHandler, options);\n}\n\n/**\n * Used to instantiate an input to a model as a `tf.SymbolicTensor`.\n *\n * Users should call the `input` factory function for\n * consistency with other generator functions.\n *\n * Example:\n *\n * ```js\n * // Defines a simple logistic regression model with 32 dimensional input\n * // and 3 dimensional output.\n * const x = tf.input({shape: [32]});\n * const y = tf.layers.dense({units: 3, activation: 'softmax'}).apply(x);\n * const model = tf.model({inputs: x, outputs: y});\n * model.predict(tf.ones([2, 32])).print();\n * ```\n *\n * Note: `input` is only necessary when using `model`. When using\n * `sequential`, specify `inputShape` for the first layer or use `inputLayer`\n * as the first layer.\n */\n/** @doc {heading: 'Models', subheading: 'Inputs'} */\nexport function input(config: InputConfig): SymbolicTensor {\n  return Input(config);\n}\n\nexport function registerCallbackConstructor(\n    verbosityLevel: number,\n    callbackConstructor: BaseCallbackConstructor): void {\n  CallbackConstructorRegistry.registerCallbackConstructor(\n      verbosityLevel, callbackConstructor);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n// Layer activation functions\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\nimport * as K from './backend/tfjs_backend';\nimport {ActivationIdentifier} from './keras_format/activation_config';\nimport {deserializeKerasObject} from './utils/generic_utils';\n\n/**\n * Base class for Activations.\n *\n * Special note: due to cross-language compatibility reasons, the\n * static readonly className field in this family of classes must be set to\n * the initialLowerCamelCase name of the activation.\n */\nexport abstract class Activation extends serialization.Serializable {\n  abstract apply(tensor: Tensor, axis?: number): Tensor;\n  getConfig(): serialization.ConfigDict {\n    return {};\n  }\n}\n\n/**\n * Exponential linear unit (ELU).\n * Reference: https://arxiv.org/abs/1511.07289\n */\nexport class Elu extends Activation {\n  /** @nocollapse */\n  static readonly className = 'elu';\n  /**\n   * Calculate the activation function.\n   *\n   * @param x: Input.\n   * @param alpha: Scaling factor the negative section.\n   * @return Output of the ELU activation.\n   */\n  apply(x: Tensor, alpha = 1): Tensor {\n    return K.elu(x, alpha);\n  }\n}\nserialization.registerClass(Elu);\n\n/**\n * Scaled Exponential Linear Unit. (Klambauer et al., 2017).\n * Reference: Self-Normalizing Neural Networks, https://arxiv.org/abs/1706.02515\n * Notes:\n *   - To be used together with the initialization \"lecunNormal\".\n *   - To be used together with the dropout variant \"AlphaDropout\".\n */\nexport class Selu extends Activation {\n  /** @nocollapse */\n  static readonly className = 'selu';\n  apply(x: Tensor): Tensor {\n    return tfc.selu(x);\n  }\n}\nserialization.registerClass(Selu);\n\n/**\n *  Rectified linear unit\n */\nexport class Relu extends Activation {\n  /** @nocollapse */\n  static readonly className = 'relu';\n  apply(x: Tensor): Tensor {\n    return tfc.relu(x);\n  }\n}\nserialization.registerClass(Relu);\n\n/**\n * Rectified linear unit activation maxing out at 6.0.\n */\nexport class Relu6 extends Activation {\n  /** @nocollapse */\n  static readonly className = 'relu6';\n  apply(x: Tensor): Tensor {\n    return tidy(() => tfc.minimum(6.0, tfc.relu(x)));\n  }\n}\nserialization.registerClass(Relu6);\n\n//* Linear activation (no-op) */\nexport class Linear extends Activation {\n  /** @nocollapse */\n  static readonly className = 'linear';\n  apply(x: Tensor): Tensor {\n    return x;\n  }\n}\nserialization.registerClass(Linear);\n\n/**\n * Sigmoid activation function.\n */\nexport class Sigmoid extends Activation {\n  /** @nocollapse */\n  static readonly className = 'sigmoid';\n  apply(x: Tensor): Tensor {\n    return tfc.sigmoid(x);\n  }\n}\nserialization.registerClass(Sigmoid);\n\n/**\n * Segment-wise linear approximation of sigmoid.\n */\nexport class HardSigmoid extends Activation {\n  /** @nocollapse */\n  static readonly className = 'hardSigmoid';\n  apply(x: Tensor): Tensor {\n    return K.hardSigmoid(x);\n  }\n}\nserialization.registerClass(HardSigmoid);\n\n/**\n * Softplus activation function.\n */\nexport class Softplus extends Activation {\n  /** @nocollapse */\n  static readonly className = 'softplus';\n  apply(x: Tensor): Tensor {\n    return tfc.softplus(x);\n  }\n}\nserialization.registerClass(Softplus);\n\n/**\n * Softsign activation function.\n */\nexport class Softsign extends Activation {\n  /** @nocollapse */\n  static readonly className = 'softsign';\n  apply(x: Tensor): Tensor {\n    return K.softsign(x);\n  }\n}\nserialization.registerClass(Softsign);\n\n/**\n * Hyperbolic tangent function.\n */\nexport class Tanh extends Activation {\n  /** @nocollapse */\n  static readonly className = 'tanh';\n  apply(x: Tensor): Tensor {\n    return tfc.tanh(x);\n  }\n}\nserialization.registerClass(Tanh);\n\n/**\n * Softmax activation function\n */\nexport class Softmax extends Activation {\n  /** @nocollapse */\n  static readonly className = 'softmax';\n  /**\n   * Calculate the activation function.\n   *\n   * @param x Tensor.\n   * @param axis Integer, axis along which the softmax normalization is applied.\n   * Invalid if < 2, as softmax across 1 (the batch dimension) is assumed to be\n   * an error.\n   *\n   * @returns a Tensor of the same shape as x\n   *\n   * @throws ValueError: In case `dim(x) < 2`.\n   */\n  apply(x: Tensor, axis: number = (-1)): Tensor {\n    return tfc.softmax(x, axis);\n  }\n}\nserialization.registerClass(Softmax);\n\n/**\n * Log softmax activation function\n */\nexport class LogSoftmax extends Activation {\n  /** @nocollapse */\n  static readonly className = 'logSoftmax';\n  /**\n   * Calculate the activation function of log softmax:\n   * log( exp(x_i) / sum(exp(x)) )\n   *\n   * @param x Tensor.\n   * @param axis Integer, axis along which the softmax normalization is applied.\n   * Invalid if < 2, as softmax across 1 (the batch dimension) is assumed to be\n   * an error.\n   *\n   * @returns a Tensor of the same shape as x\n   *\n   * @throws ValueError: In case `dim(x) < 2`.\n   */\n  apply(x: Tensor, axis: number = (-1)): Tensor {\n    return tfc.logSoftmax(x, axis);\n  }\n}\nserialization.registerClass(LogSoftmax);\n\nexport function serializeActivation(activation: Activation): string {\n  return activation.getClassName();\n}\n\nexport function deserializeActivation(\n   config: serialization.ConfigDict,\n   customObjects: serialization.ConfigDict = {}): Activation {\n  return deserializeKerasObject(\n      config, serialization.SerializationMap.getMap().classNameMap,\n      customObjects, 'activation');\n}\n\nexport function getActivation(identifier: ActivationIdentifier|\n                              serialization.ConfigDict|Activation): Activation {\n  if (identifier == null) {\n    const config: serialization.ConfigDict = {};\n    config['className'] = 'linear';\n    config['config'] = {};\n    return deserializeActivation(config);\n  }\n  if (typeof identifier === 'string') {\n    const config: serialization.ConfigDict = {};\n    config['className'] = identifier;\n    config['config'] = {};\n    return deserializeActivation(config);\n  } else if (identifier instanceof Activation) {\n    return identifier;\n  } else {\n    return deserializeActivation(identifier);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* original source: keras/regularizers.py */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {abs, add, Scalar, serialization, sum, Tensor, tidy, zeros} from '@tensorflow/tfjs-core';\nimport * as K from './backend/tfjs_backend';\nimport {deserializeKerasObject, serializeKerasObject} from './utils/generic_utils';\n\nfunction assertObjectArgs(args: L1Args | L2Args | L1L2Args): void {\n  if (args != null && typeof args !== 'object') {\n    throw new Error(\n        `Argument to L1L2 regularizer's constructor is expected to be an ` +\n        `object, but received: ${args}`);\n  }\n}\n\n/**\n * Regularizer base class.\n */\nexport abstract class Regularizer extends serialization.Serializable {\n  abstract apply(x: Tensor): Scalar;\n}\n\nexport interface L1L2Args {\n  /** L1 regularization rate. Defaults to 0.01. */\n  l1?: number;\n  /** L2 regularization rate. Defaults to 0.01. */\n  l2?: number;\n}\n\nexport interface L1Args {\n  /** L1 regularization rate. Defaults to 0.01. */\n  l1: number;\n}\n\nexport interface L2Args {\n  /** L2 regularization rate. Defaults to 0.01. */\n  l2: number;\n}\n\nexport class L1L2 extends Regularizer {\n  /** @nocollapse */\n  static className = 'L1L2';\n\n  private readonly l1: number;\n  private readonly l2: number;\n  private readonly hasL1: boolean;\n  private readonly hasL2: boolean;\n  constructor(args?: L1L2Args) {\n    super();\n\n    assertObjectArgs(args);\n\n    this.l1 = args == null || args.l1 == null ? 0.01 : args.l1;\n    this.l2 = args == null || args.l2 == null ? 0.01 : args.l2;\n    this.hasL1 = this.l1 !== 0;\n    this.hasL2 = this.l2 !== 0;\n  }\n\n  /**\n   * Porting note: Renamed from __call__.\n   * @param x Variable of which to calculate the regularization score.\n   */\n  apply(x: Tensor): Scalar {\n    return tidy(() => {\n      let regularization: Tensor = zeros([1]);\n      if (this.hasL1) {\n        regularization = add(regularization, sum(tfc.mul(this.l1, abs(x))));\n      }\n      if (this.hasL2) {\n        regularization =\n            add(regularization, sum(tfc.mul(this.l2, K.square(x))));\n      }\n      return regularization.asScalar();\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    return {'l1': this.l1, 'l2': this.l2};\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict): T {\n    return new cls({l1: config['l1'] as number, l2: config['l2'] as number});\n  }\n}\nserialization.registerClass(L1L2);\n\nexport function l1(args?: L1Args) {\n  assertObjectArgs(args);\n  return new L1L2({l1: args != null ? args.l1 : null, l2: 0});\n}\n\nexport function l2(args: L2Args) {\n  assertObjectArgs(args);\n  return new L1L2({l2: args != null ? args.l2 : null, l1: 0});\n}\n\n/** @docinline */\nexport type RegularizerIdentifier = 'l1l2'|string;\n\n// Maps the JavaScript-like identifier keys to the corresponding keras symbols.\nexport const REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP:\n    {[identifier in RegularizerIdentifier]: string} = {\n      'l1l2': 'L1L2'\n    };\n\nexport function serializeRegularizer(constraint: Regularizer):\n    serialization.ConfigDictValue {\n  return serializeKerasObject(constraint);\n}\n\nexport function deserializeRegularizer(\n    config: serialization.ConfigDict,\n    customObjects: serialization.ConfigDict = {}): Regularizer {\n  return deserializeKerasObject(\n      config, serialization.SerializationMap.getMap().classNameMap,\n      customObjects, 'regularizer');\n}\n\nexport function getRegularizer(identifier: RegularizerIdentifier|\n                               serialization.ConfigDict|\n                               Regularizer): Regularizer {\n  if (identifier == null) {\n    return null;\n  }\n  if (typeof identifier === 'string') {\n    const className = identifier in REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ?\n        REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] :\n        identifier;\n    const config = {className, config: {}};\n    return deserializeRegularizer(config);\n  } else if (identifier instanceof Regularizer) {\n    return identifier;\n  } else {\n    return deserializeRegularizer(identifier);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n *  Advanced activation layers.\n */\n\nimport {clipByValue, elu, leakyRelu, prelu, relu, serialization, Tensor} from '@tensorflow/tfjs-core';\n\nimport {Softmax as softmaxActivation} from '../activations';\nimport {cast} from '../backend/tfjs_backend';\nimport {Constraint, getConstraint, serializeConstraint} from '../constraints';\nimport {InputSpec, Layer, LayerArgs} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\nexport declare interface ReLULayerArgs extends LayerArgs {\n  /**\n   * Float, the maximum output value.\n   */\n  maxValue?: number;\n}\n\nexport class ReLU extends Layer {\n  /** @nocollapse */\n  static className = 'ReLU';\n  maxValue: number;\n\n  constructor(args?: ReLULayerArgs) {\n    super(args == null ? {} : args);\n    this.supportsMasking = true;\n    if (args != null) {\n      this.maxValue = args.maxValue;\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    inputs = getExactlyOneTensor(inputs);\n    let output = relu(inputs);\n    if (this.maxValue != null) {\n      output = clipByValue(output, 0, this.maxValue);\n    }\n    return output;\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {maxValue: this.maxValue};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(ReLU);\n\nexport declare interface LeakyReLULayerArgs extends LayerArgs {\n  /**\n   * Float `>= 0`. Negative slope coefficient. Defaults to `0.3`.\n   */\n  alpha?: number;\n}\n\nexport class LeakyReLU extends Layer {\n  /** @nocollapse */\n  static className = 'LeakyReLU';\n  readonly alpha: number;\n\n  readonly DEFAULT_ALPHA = 0.3;\n\n  constructor(args?: LeakyReLULayerArgs) {\n    super(args == null ? {} : args);\n    if (args == null) {\n      args = {};\n    }\n    this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    const x = getExactlyOneTensor(inputs);\n    return leakyRelu(x, this.alpha);\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {alpha: this.alpha};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(LeakyReLU);\n\nexport declare interface PReLULayerArgs extends LayerArgs {\n  /**\n   * Initializer for the learnable alpha.\n   */\n  alphaInitializer?: Initializer|InitializerIdentifier;\n\n  /**\n   * Regularizer for the learnable alpha.\n   */\n  alphaRegularizer?: Regularizer;\n\n  /**\n   * Constraint for the learnable alpha.\n   */\n  alphaConstraint?: Constraint;\n\n  /**\n   * The axes along which to share learnable parameters for the activation\n   * function. For example, if the incoming feature maps are from a 2D\n   * convolution with output shape `[numExamples, height, width, channels]`,\n   * and you wish to share parameters across space (height and width) so that\n   * each filter channels has only one set of parameters, set\n   * `shared_axes: [1, 2]`.\n   */\n  sharedAxes?: number|number[];\n}\n\nexport class PReLU extends Layer {\n  /** @nocollapse */\n  static className = 'PReLU';\n  private readonly alphaInitializer: Initializer;\n  private readonly alphaRegularizer: Regularizer;\n  private readonly alphaConstraint: Constraint;\n  private readonly sharedAxes: number[];\n  private alpha: LayerVariable;\n\n  readonly DEFAULT_ALPHA_INITIALIZER: InitializerIdentifier = 'zeros';\n\n  constructor(args?: PReLULayerArgs) {\n    super(args == null ? {} : args);\n    if (args == null) {\n      args = {};\n    }\n\n    this.supportsMasking = true;\n    this.alphaInitializer =\n        getInitializer(args.alphaInitializer || this.DEFAULT_ALPHA_INITIALIZER);\n    this.alphaRegularizer = getRegularizer(args.alphaRegularizer);\n    this.alphaConstraint = getConstraint(args.alphaConstraint);\n    if (args.sharedAxes == null) {\n      this.sharedAxes = null;\n    } else if (Array.isArray(args.sharedAxes)) {\n      this.sharedAxes = args.sharedAxes;\n    } else if (typeof args.sharedAxes === 'number') {\n      this.sharedAxes = [args.sharedAxes];\n    } else {\n      throw new ValueError(\n          `Expected sharedAxes to be a number or an array of numbers, ` +\n          `but got ${args.sharedAxes}`);\n    }\n  }\n\n  build(inputShape: Shape|Shape[]) {\n    inputShape = getExactlyOneShape(inputShape);\n    const paramShape: Shape = inputShape.slice(1);\n    if (this.sharedAxes != null) {\n      for (const i of this.sharedAxes) {\n        paramShape[i - 1] = 1;\n      }\n    }\n    this.alpha = this.addWeight(\n        'alpha', paramShape, 'float32', this.alphaInitializer,\n        this.alphaRegularizer, true, this.alphaConstraint);\n    // Set input spec.\n    const axes: {[axis: number]: number} = {};\n    if (this.sharedAxes != null) {\n      for (let i = 1; i < inputShape.length; ++i) {\n        axes[i] = inputShape[i];\n      }\n    }\n    this.inputSpec = [new InputSpec({\n      ndim: inputShape.length,\n      axes,\n    })];\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    inputs = getExactlyOneTensor(inputs);\n    return prelu(inputs, this.alpha.read());\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      alphaInitializer: serializeInitializer(this.alphaInitializer),\n      alphaRegularizer: serializeRegularizer(this.alphaRegularizer),\n      alphaConstraint: serializeConstraint(this.alphaConstraint),\n      sharedAxes: this.sharedAxes\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(PReLU);\n\nexport declare interface ELULayerArgs extends LayerArgs {\n  /**\n   * Float `>= 0`. Negative slope coefficient. Defaults to `1.0`.\n   */\n  alpha?: number;\n}\n\nexport class ELU extends Layer {\n  /** @nocollapse */\n  static className = 'ELU';\n  readonly alpha: number;\n\n  readonly DEFAULT_ALPHA = 1.0;\n\n  constructor(args?: ELULayerArgs) {\n    super(args == null ? {} : args);\n    if (args == null) {\n      args = {};\n    }\n\n    if (args.alpha != null && args.alpha !== this.DEFAULT_ALPHA) {\n      throw new NotImplementedError(\n          `Non-default alpha value (${args.alpha}) is not supported by the ` +\n          `ELU layer yet.`);\n    }\n\n    this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    const x = getExactlyOneTensor(inputs);\n    return elu(x);\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {alpha: this.alpha};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(ELU);\n\nexport declare interface ThresholdedReLULayerArgs extends LayerArgs {\n  /**\n   * Float >= 0. Threshold location of activation.\n   */\n  theta?: number;\n}\n\nexport class ThresholdedReLU extends Layer {\n  /** @nocollapse */\n  static className = 'ThresholdedReLU';\n  readonly theta: number;\n\n  readonly DEFAULT_THETA = 1.0;\n\n  constructor(args?: ThresholdedReLULayerArgs) {\n    super(args == null ? {} : args);\n    if (args == null) {\n      args = {};\n    }\n\n    this.theta = args.theta == null ? this.DEFAULT_THETA : args.theta;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    const x = getExactlyOneTensor(inputs);\n    return x.mul(cast(x.greater(this.theta), 'float32'));\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {theta: this.theta};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(ThresholdedReLU);\n\nexport declare interface SoftmaxLayerArgs extends LayerArgs {\n  /**\n   * Integer, axis along which the softmax normalization is applied.\n   * Defaults to `-1` (i.e., the last axis).\n   */\n  axis?: number;\n}\n\nexport class Softmax extends Layer {\n  /** @nocollapse */\n  static className = 'Softmax';\n  readonly axis: number;\n  readonly softmax: (t: Tensor, a?: number) => Tensor;\n  readonly DEFAULT_AXIS = 1.0;\n\n  constructor(args?: SoftmaxLayerArgs) {\n    super(args == null ? {} : args);\n    if (args == null) {\n      args = {};\n    }\n    this.softmax = new softmaxActivation().apply;\n    this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    const x = getExactlyOneTensor(inputs);\n    return this.softmax(x, this.axis);\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {axis: this.axis};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Softmax);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {ValueError} from '../errors';\nimport {PaddingMode} from '../keras_format/common';\n\nimport {pyListRepeat} from './generic_utils';\nimport {isInteger, max} from './math_utils';\n\n/**\n * Transforms a single number of array of numbers into an array of numbers.\n * @param value\n * @param n: The size of the tuple to be returned.\n * @param name: Name of the parameter, used for generating error messages.\n * @returns An array of numbers.\n */\nexport function normalizeArray(\n    value: number|number[], n: number, name: string): number[] {\n  if (typeof value === 'number') {\n    return pyListRepeat(value, n);\n  } else {\n    if (value.length !== n) {\n      throw new ValueError(\n          `The ${name} argument must be an integer or tuple of ${n} integers.` +\n          ` Received: ${value.length} elements.`);\n    }\n    for (let i = 0; i < n; ++i) {\n      const singleValue = value[i];\n      if (!isInteger(singleValue)) {\n        throw new ValueError(\n            `The ${name} argument must be an integer or tuple of ${n}` +\n            ` integers. Received: ${JSON.stringify(value)} including a` +\n            ` non-integer number ${singleValue}`);\n      }\n    }\n    return value;\n  }\n}\n\n/**\n * Determines output length of a convolution given input length.\n * @param inputLength\n * @param filterSize\n * @param padding\n * @param stride\n * @param dilation: dilation rate.\n */\nexport function convOutputLength(\n    inputLength: number, filterSize: number, padding: PaddingMode,\n    stride: number, dilation = 1): number {\n  if (inputLength == null) {\n    return inputLength;\n  }\n  const dilatedFilterSize = filterSize + (filterSize - 1) * (dilation - 1);\n  let outputLength: number;\n  if (padding === 'same') {\n    outputLength = inputLength;\n  } else {  // VALID\n    outputLength = inputLength - dilatedFilterSize + 1;\n  }\n  return Math.floor((outputLength + stride - 1) / stride);\n}\n\nexport function deconvLength(\n    dimSize: number, strideSize: number, kernelSize: number,\n    padding: PaddingMode): number {\n  if (dimSize == null) {\n    return null;\n  }\n\n  if (padding === 'valid') {\n    dimSize = dimSize * strideSize + max([kernelSize - strideSize, 0]);\n  } else if (padding === 'same') {\n    dimSize = dimSize * strideSize;\n  } else {\n    throw new ValueError(`Unsupport padding mode: ${padding}.`);\n  }\n  return dimSize;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Convolutional Layers\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {fused, serialization, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, tidy} from '@tensorflow/tfjs-core';\n\nimport {Activation, getActivation, serializeActivation} from '../activations';\nimport {imageDataFormat} from '../backend/common';\nimport * as K from '../backend/tfjs_backend';\nimport {checkDataFormat, checkPaddingMode} from '../common';\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {InputSpec, Layer, LayerArgs} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {ActivationIdentifier} from '../keras_format/activation_config';\nimport {DataFormat, PaddingMode, Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport {convOutputLength, deconvLength, normalizeArray} from '../utils/conv_utils';\nimport * as generic_utils from '../utils/generic_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\n/**\n * Transpose and cast the input before the conv2d.\n * @param x Input image tensor.\n * @param dataFormat\n */\nexport function preprocessConv2DInput(\n    x: Tensor, dataFormat: DataFormat): Tensor {\n  // TODO(cais): Cast type to float32 if not.\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    if (dataFormat === 'channelsFirst') {\n      return tfc.transpose(x, [0, 2, 3, 1]);  // NCHW -> NHWC.\n    } else {\n      return x;\n    }\n  });\n}\n\n/**\n * Transpose and cast the input before the conv3d.\n * @param x Input image tensor.\n * @param dataFormat\n */\nexport function preprocessConv3DInput(\n    x: Tensor, dataFormat: DataFormat): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    if (dataFormat === 'channelsFirst') {\n      return tfc.transpose(x, [0, 2, 3, 4, 1]);  // NCDHW -> NDHWC.\n    } else {\n      return x;\n    }\n  });\n}\n\n/**\n * 1D-convolution with bias added.\n *\n * Porting Note: This function does not exist in the Python Keras backend.\n *   It is exactly the same as `conv2d`, except the added `bias`.\n *\n * @param x Input tensor, rank-3, of shape `[batchSize, width, inChannels]`.\n * @param kernel Kernel, rank-3, of shape `[filterWidth, inDepth, outDepth]`.\n * @param bias Bias, rank-3, of shape `[outDepth]`.\n * @param strides\n * @param padding Padding mode.\n * @param dataFormat Data format.\n * @param dilationRate\n * @returns The result of the 1D convolution.\n * @throws ValueError, if `x`, `kernel` or `bias` is not of the correct rank.\n */\nexport function conv1dWithBias(\n    x: Tensor, kernel: Tensor, bias: Tensor, strides = 1, padding = 'valid',\n    dataFormat?: DataFormat, dilationRate = 1): Tensor {\n  return tidy(() => {\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    checkDataFormat(dataFormat);\n    // Check the ranks of x, kernel and bias.\n    if (x.shape.length !== 3) {\n      throw new ValueError(\n          `The input of a conv1dWithBias operation should be 3, but is ` +\n          `${x.shape.length} instead.`);\n    }\n    if (kernel.shape.length !== 3) {\n      throw new ValueError(\n          `The kernel for a conv1dWithBias operation should be 3, but is ` +\n          `${kernel.shape.length} instead`);\n    }\n    if (bias != null && bias.shape.length !== 1) {\n      throw new ValueError(\n          `The bias for a conv1dWithBias operation should be 1, but is ` +\n          `${kernel.shape.length} instead`);\n    }\n    // TODO(cais): Support CAUSAL padding mode.\n    if (dataFormat === 'channelsFirst') {\n      x = tfc.transpose(x, [0, 2, 1]);  // NCW -> NWC.\n    }\n    if (padding === 'causal') {\n      throw new NotImplementedError(\n          'The support for CAUSAL padding mode in conv1dWithBias is not ' +\n          'implemented yet.');\n    }\n    let y: Tensor = tfc.conv1d(\n        x as Tensor2D | Tensor3D, kernel as Tensor3D, strides,\n        padding === 'same' ? 'same' : 'valid', 'NWC', dilationRate);\n    if (bias != null) {\n      y = K.biasAdd(y, bias);\n    }\n    return y;\n  });\n}\n\n/**\n * 1D-convolution.\n *\n * @param x Input tensor, rank-3, of shape `[batchSize, width, inChannels]`.\n * @param kernel Kernel, rank-3, of shape `[filterWidth, inDepth, outDepth]`.s\n * @param strides\n * @param padding Padding mode.\n * @param dataFormat Data format.\n * @param dilationRate\n * @returns The result of the 1D convolution.\n * @throws ValueError, if `x`, `kernel` or `bias` is not of the correct rank.\n */\nexport function conv1d(\n    x: Tensor, kernel: Tensor, strides = 1, padding = 'valid',\n    dataFormat?: DataFormat, dilationRate = 1): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    return conv1dWithBias(\n        x, kernel, null, strides, padding, dataFormat, dilationRate);\n  });\n}\n\n/**\n * 2D Convolution\n * @param x\n * @param kernel kernel of the convolution.\n * @param strides strides array.\n * @param padding padding mode. Default to 'valid'.\n * @param dataFormat data format. Defaults to 'channelsLast'.\n * @param dilationRate dilation rate array.\n * @returns Result of the 2D pooling.\n */\nexport function conv2d(\n    x: Tensor, kernel: Tensor, strides = [1, 1], padding = 'valid',\n    dataFormat?: DataFormat, dilationRate?: [number, number]): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    return conv2dWithBiasActivation(\n        x, kernel, null, strides, padding, dataFormat, dilationRate);\n  });\n}\n\n/**\n * 2D Convolution with an added bias and optional activation.\n * Note: This function does not exist in the Python Keras Backend. This function\n * is exactly the same as `conv2d`, except the added `bias`.\n */\nexport function conv2dWithBiasActivation(\n    x: Tensor, kernel: Tensor, bias: Tensor, strides = [1, 1],\n    padding = 'valid', dataFormat?: DataFormat, dilationRate?: [number, number],\n    activation: fused.Activation = null): Tensor {\n  return tidy(() => {\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    checkDataFormat(dataFormat);\n    if (x.rank !== 3 && x.rank !== 4) {\n      throw new ValueError(\n          `conv2dWithBiasActivation expects input to be of rank 3 or 4, ` +\n          `but received ${x.rank}.`);\n    }\n    if (kernel.rank !== 3 && kernel.rank !== 4) {\n      throw new ValueError(\n          `conv2dWithBiasActivation expects kernel to be of rank 3 or 4, ` +\n          `but received ${x.rank}.`);\n    }\n    let y = preprocessConv2DInput(x, dataFormat);\n    if (padding === 'causal') {\n      throw new NotImplementedError(\n          'The support for CAUSAL padding mode in conv1dWithBias is not ' +\n          'implemented yet.');\n    }\n    y = tfc.fused.conv2d({\n      x: y as Tensor3D | Tensor4D,\n      filter: kernel as Tensor4D,\n      strides: strides as [number, number],\n      pad: padding === 'same' ? 'same' : 'valid',\n      dilations: dilationRate,\n      dataFormat: 'NHWC',\n      bias,\n      activation\n    });\n    if (dataFormat === 'channelsFirst') {\n      y = tfc.transpose(y, [0, 3, 1, 2]);\n    }\n    return y;\n  });\n}\n\n/**\n * 3D Convolution.\n * @param x\n * @param kernel kernel of the convolution.\n * @param strides strides array.\n * @param padding padding mode. Default to 'valid'.\n * @param dataFormat data format. Defaults to 'channelsLast'.\n * @param dilationRate dilation rate array.\n * @returns Result of the 3D convolution.\n */\nexport function conv3d(\n    x: Tensor, kernel: Tensor, strides = [1, 1, 1], padding = 'valid',\n    dataFormat?: DataFormat, dilationRate?: [number, number, number]): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    return conv3dWithBias(\n        x, kernel, null, strides, padding, dataFormat, dilationRate);\n  });\n}\n\n/**\n * 3D Convolution with an added bias.\n * Note: This function does not exist in the Python Keras Backend. This function\n * is exactly the same as `conv3d`, except the added `bias`.\n */\nexport function conv3dWithBias(\n    x: Tensor, kernel: Tensor, bias: Tensor, strides = [1, 1, 1],\n    padding = 'valid', dataFormat?: DataFormat,\n    dilationRate?: [number, number, number]): Tensor {\n  return tidy(() => {\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    checkDataFormat(dataFormat);\n    if (x.rank !== 4 && x.rank !== 5) {\n      throw new ValueError(\n          `conv3dWithBias expects input to be of rank 4 or 5, but received ` +\n          `${x.rank}.`);\n    }\n    if (kernel.rank !== 4 && kernel.rank !== 5) {\n      throw new ValueError(\n          `conv3dWithBias expects kernel to be of rank 4 or 5, but received ` +\n          `${x.rank}.`);\n    }\n    let y = preprocessConv3DInput(x, dataFormat);\n    if (padding === 'causal') {\n      throw new NotImplementedError(\n          'The support for CAUSAL padding mode in conv3dWithBias is not ' +\n          'implemented yet.');\n    }\n    y = tfc.conv3d(\n        y as Tensor4D | tfc.Tensor<tfc.Rank.R5>,\n        kernel as tfc.Tensor<tfc.Rank.R5>, strides as [number, number, number],\n        padding === 'same' ? 'same' : 'valid', 'NDHWC', dilationRate);\n    if (bias != null) {\n      y = K.biasAdd(y, bias as Tensor1D);\n    }\n    if (dataFormat === 'channelsFirst') {\n      y = tfc.transpose(y, [0, 4, 1, 2, 3]);\n    }\n    return y;\n  });\n}\n\n/**\n * Base LayerConfig for depthwise and non-depthwise convolutional layers.\n */\nexport declare interface BaseConvLayerArgs extends LayerArgs {\n  /**\n   * The dimensions of the convolution window. If kernelSize is a number, the\n   * convolutional window will be square.\n   */\n  kernelSize: number|number[];\n\n  /**\n   * The strides of the convolution in each dimension. If strides is a number,\n   * strides in both dimensions are equal.\n   *\n   * Specifying any stride value != 1 is incompatible with specifying any\n   * `dilationRate` value != 1.\n   */\n  strides?: number|number[];\n\n  /**\n   * Padding mode.\n   */\n  padding?: PaddingMode;\n\n  /**\n   * Format of the data, which determines the ordering of the dimensions in\n   * the inputs.\n   *\n   * `channels_last` corresponds to inputs with shape\n   *   `(batch, ..., channels)`\n   *\n   *  `channels_first` corresponds to inputs with shape `(batch, channels,\n   * ...)`.\n   *\n   * Defaults to `channels_last`.\n   */\n  dataFormat?: DataFormat;\n\n  /**\n   * The dilation rate to use for the dilated convolution in each dimension.\n   * Should be an integer or array of two or three integers.\n   *\n   * Currently, specifying any `dilationRate` value != 1 is incompatible with\n   * specifying any `strides` value != 1.\n   */\n  dilationRate?: number|[number]|[number, number]|[number, number, number];\n\n  /**\n   * Activation function of the layer.\n   *\n   * If you don't specify the activation, none is applied.\n   */\n  activation?: ActivationIdentifier;\n\n  /**\n   * Whether the layer uses a bias vector. Defaults to `true`.\n   */\n  useBias?: boolean;\n\n  /**\n   * Initializer for the convolutional kernel weights matrix.\n   */\n  kernelInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the bias vector.\n   */\n  biasInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Constraint for the convolutional kernel weights.\n   */\n  kernelConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint for the bias vector.\n   */\n  biasConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Regularizer function applied to the kernel weights matrix.\n   */\n  kernelRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the bias vector.\n   */\n  biasRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the activation.\n   */\n  activityRegularizer?: RegularizerIdentifier|Regularizer;\n}\n\n/**\n * LayerConfig for non-depthwise convolutional layers.\n * Applies to non-depthwise convolution of all ranks (e.g, Conv1D, Conv2D,\n * Conv3D).\n */\nexport declare interface ConvLayerArgs extends BaseConvLayerArgs {\n  /**\n   * The dimensionality of the output space (i.e. the number of filters in the\n   * convolution).\n   */\n  filters: number;\n}\n\n/**\n * Abstract convolution layer.\n */\nexport abstract class BaseConv extends Layer {\n  protected readonly rank: number;\n  protected readonly kernelSize: number[];\n  protected readonly strides: number[];\n  protected readonly padding: PaddingMode;\n  protected readonly dataFormat: DataFormat;\n  protected readonly activation: Activation;\n  protected readonly useBias: boolean;\n  protected readonly dilationRate: number[];\n\n  // Bias-related members are here because all convolution subclasses use the\n  // same configuration parmeters to control bias.  Kernel-related members\n  // are in subclass `Conv` because some subclasses use different parameters to\n  // control kernel properties, for instance, `DepthwiseConv2D` uses\n  // `depthwiseInitializer` instead of `kernelInitializer`.\n  protected readonly biasInitializer?: Initializer;\n  protected readonly biasConstraint?: Constraint;\n  protected readonly biasRegularizer?: Regularizer;\n\n  protected bias: LayerVariable = null;\n\n  readonly DEFAULT_KERNEL_INITIALIZER: InitializerIdentifier = 'glorotNormal';\n  readonly DEFAULT_BIAS_INITIALIZER: InitializerIdentifier = 'zeros';\n\n  constructor(rank: number, args: BaseConvLayerArgs) {\n    super(args as LayerArgs);\n    BaseConv.verifyArgs(args);\n    this.rank = rank;\n    generic_utils.assertPositiveInteger(this.rank, 'rank');\n    if (this.rank !== 1 && this.rank !== 2 && this.rank !== 3) {\n      throw new NotImplementedError(\n          `Convolution layer for rank other than 1, 2, or 3 (${\n              this.rank}) is ` +\n          `not implemented yet.`);\n    }\n    this.kernelSize = normalizeArray(args.kernelSize, rank, 'kernelSize');\n    this.strides = normalizeArray(\n        args.strides == null ? 1 : args.strides, rank, 'strides');\n    this.padding = args.padding == null ? 'valid' : args.padding;\n    checkPaddingMode(this.padding);\n    this.dataFormat =\n        args.dataFormat == null ? 'channelsLast' : args.dataFormat;\n    checkDataFormat(this.dataFormat);\n    this.activation = getActivation(args.activation);\n    this.useBias = args.useBias == null ? true : args.useBias;\n    this.biasInitializer =\n        getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER);\n    this.biasConstraint = getConstraint(args.biasConstraint);\n    this.biasRegularizer = getRegularizer(args.biasRegularizer);\n    this.activityRegularizer = getRegularizer(args.activityRegularizer);\n    this.dilationRate = normalizeArray(\n        args.dilationRate == null ? 1 : args.dilationRate, rank,\n        'dilationRate');\n    if (this.rank === 1 &&\n        (Array.isArray(this.dilationRate) && this.dilationRate.length !== 1)) {\n      throw new ValueError(\n          `dilationRate must be a number or an array of a single number ` +\n          `for 1D convolution, but received ` +\n          `${JSON.stringify(this.dilationRate)}`);\n    } else if (this.rank === 2) {\n      if (typeof this.dilationRate === 'number') {\n        this.dilationRate = [this.dilationRate, this.dilationRate];\n      } else if (this.dilationRate.length !== 2) {\n        throw new ValueError(\n            `dilationRate must be a number or array of two numbers for 2D ` +\n            `convolution, but received ${JSON.stringify(this.dilationRate)}`);\n      }\n    } else if (this.rank === 3) {\n      if (typeof this.dilationRate === 'number') {\n        this.dilationRate =\n            [this.dilationRate, this.dilationRate, this.dilationRate];\n      } else if (this.dilationRate.length !== 3) {\n        throw new ValueError(\n            `dilationRate must be a number or array of three numbers for 3D ` +\n            `convolution, but received ${JSON.stringify(this.dilationRate)}`);\n      }\n    }\n  }\n\n  protected static verifyArgs(args: BaseConvLayerArgs) {\n    // Check config.kernelSize type and shape.\n    generic_utils.assert(\n        'kernelSize' in args, `required key 'kernelSize' not in config`);\n    if (typeof args.kernelSize !== 'number' &&\n        !generic_utils.checkArrayTypeAndLength(\n            args.kernelSize, 'number', 1, 3)) {\n      throw new ValueError(\n          `BaseConv expects config.kernelSize to be number or number[] with ` +\n          `length 1, 2, or 3, but received ${\n              JSON.stringify(args.kernelSize)}.`);\n    }\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      kernelSize: this.kernelSize,\n      strides: this.strides,\n      padding: this.padding,\n      dataFormat: this.dataFormat,\n      dilationRate: this.dilationRate,\n      activation: serializeActivation(this.activation),\n      useBias: this.useBias,\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      biasConstraint: serializeConstraint(this.biasConstraint)\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\n\n/**\n * Abstract nD convolution layer.  Ancestor of convolution layers which reduce\n * across channels, i.e., Conv1D and Conv2D, but not DepthwiseConv2D.\n */\nexport abstract class Conv extends BaseConv {\n  protected readonly filters: number;\n\n  protected kernel: LayerVariable = null;\n\n  // Bias-related properties are stored in the superclass `BaseConv` because all\n  // convolution subclasses use the same configuration parameters to control\n  // bias. Kernel-related properties are defined here rather than in the\n  // superclass because some convolution subclasses use different names and\n  // configuration parameters for their internal kernel state.\n  protected readonly kernelInitializer?: Initializer;\n  protected readonly kernelConstraint?: Constraint;\n  protected readonly kernelRegularizer?: Regularizer;\n\n  constructor(rank: number, args: ConvLayerArgs) {\n    super(rank, args as BaseConvLayerArgs);\n    Conv.verifyArgs(args);\n    this.filters = args.filters;\n    generic_utils.assertPositiveInteger(this.filters, 'filters');\n    this.kernelInitializer = getInitializer(\n        args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.kernelConstraint = getConstraint(args.kernelConstraint);\n    this.kernelRegularizer = getRegularizer(args.kernelRegularizer);\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const channelAxis =\n        this.dataFormat === 'channelsFirst' ? 1 : inputShape.length - 1;\n    if (inputShape[channelAxis] == null) {\n      throw new ValueError(\n          `The channel dimension of the input should be defined. ` +\n          `Found ${inputShape[channelAxis]}`);\n    }\n    const inputDim = inputShape[channelAxis];\n\n    const kernelShape = this.kernelSize.concat([inputDim, this.filters]);\n\n    this.kernel = this.addWeight(\n        'kernel', kernelShape, null, this.kernelInitializer,\n        this.kernelRegularizer, true, this.kernelConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [this.filters], null, this.biasInitializer,\n          this.biasRegularizer, true, this.biasConstraint);\n    }\n\n    this.inputSpec = [{ndim: this.rank + 2, axes: {[channelAxis]: inputDim}}];\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = getExactlyOneTensor(inputs);\n      let outputs: Tensor;\n      const biasValue = this.bias == null ? null : this.bias.read();\n      const fusedActivationName = generic_utils.mapActivationToFusedKernel(\n                                            this.activation.getClassName());\n\n      if (fusedActivationName != null && this.rank === 2) {\n        outputs = conv2dWithBiasActivation(\n            inputs, this.kernel.read(), biasValue, this.strides, this.padding,\n            this.dataFormat, this.dilationRate as [number, number],\n            fusedActivationName);\n      } else {\n        if (this.rank === 1) {\n          outputs = conv1dWithBias(\n              inputs, this.kernel.read(), biasValue, this.strides[0],\n              this.padding, this.dataFormat, this.dilationRate[0]);\n        } else if (this.rank === 2) {\n          // TODO(cais): Move up to constructor.\n          outputs = conv2dWithBiasActivation(\n              inputs, this.kernel.read(), biasValue, this.strides, this.padding,\n              this.dataFormat, this.dilationRate as [number, number]);\n        } else if (this.rank === 3) {\n          outputs = conv3dWithBias(\n              inputs, this.kernel.read(), biasValue, this.strides, this.padding,\n              this.dataFormat, this.dilationRate as [number, number, number]);\n        } else {\n          throw new NotImplementedError(\n              'convolutions greater than 3D are not implemented yet.');\n        }\n\n        if (this.activation != null) {\n          outputs = this.activation.apply(outputs);\n        }\n      }\n\n      return outputs;\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const newSpace: number[] = [];\n    const space = (this.dataFormat === 'channelsLast') ?\n        inputShape.slice(1, inputShape.length - 1) :\n        inputShape.slice(2);\n    for (let i = 0; i < space.length; ++i) {\n      const newDim = convOutputLength(\n          space[i], this.kernelSize[i], this.padding, this.strides[i],\n          typeof this.dilationRate === 'number' ? this.dilationRate :\n                                                  this.dilationRate[i]);\n      newSpace.push(newDim);\n    }\n\n    let outputShape = [inputShape[0]];\n    if (this.dataFormat === 'channelsLast') {\n      outputShape = outputShape.concat(newSpace);\n      outputShape.push(this.filters);\n    } else {\n      outputShape.push(this.filters);\n      outputShape = outputShape.concat(newSpace);\n    }\n    return outputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      filters: this.filters,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint)\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  protected static verifyArgs(args: ConvLayerArgs) {\n    // Check config.filters type, shape, and value.\n    if (!('filters' in args) || typeof args.filters !== 'number' ||\n        args.filters < 1) {\n      throw new ValueError(\n          `Convolution layer expected config.filters to be a 'number' > 0 ` +\n          `but got ${JSON.stringify(args.filters)}`);\n    }\n  }\n}\n\nexport class Conv2D extends Conv {\n  /** @nocollapse */\n  static className = 'Conv2D';\n  constructor(args: ConvLayerArgs) {\n    super(2, args);\n    Conv2D.verifyArgs(args);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    delete config['rank'];\n    return config;\n  }\n\n  protected static verifyArgs(args: ConvLayerArgs) {\n    // config.kernelSize must be a number or array of numbers.\n    if ((typeof args.kernelSize !== 'number') &&\n        !generic_utils.checkArrayTypeAndLength(\n            args.kernelSize, 'number', 1, 2)) {\n      throw new ValueError(\n          `Conv2D expects config.kernelSize to be number or number[] with ` +\n          `length 1 or 2, but received ${JSON.stringify(args.kernelSize)}.`);\n    }\n  }\n}\nserialization.registerClass(Conv2D);\n\nexport class Conv3D extends Conv {\n  /** @nocollapse */\n  static className = 'Conv3D';\n  constructor(args: ConvLayerArgs) {\n    super(3, args);\n    Conv3D.verifyArgs(args);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    delete config['rank'];\n    return config;\n  }\n\n  protected static verifyArgs(args: ConvLayerArgs) {\n    // config.kernelSize must be a number or array of numbers.\n    if (typeof args.kernelSize !== 'number') {\n      if (!(Array.isArray(args.kernelSize) &&\n            (args.kernelSize.length === 1 || args.kernelSize.length === 3))) {\n        throw new ValueError(\n            `Conv3D expects config.kernelSize to be number or` +\n            ` [number, number, number], but received ${\n                JSON.stringify(args.kernelSize)}.`);\n      }\n    }\n  }\n}\nserialization.registerClass(Conv3D);\n\nexport class Conv2DTranspose extends Conv2D {\n  /** @nocollapse */\n  static className = 'Conv2DTranspose';\n  inputSpec: InputSpec[];\n\n  constructor(args: ConvLayerArgs) {\n    super(args);\n    this.inputSpec = [new InputSpec({ndim: 4})];\n\n    if (this.padding !== 'same' && this.padding !== 'valid') {\n      throw new ValueError(\n          `Conv2DTranspose currently supports only padding modes 'same' ` +\n          `and 'valid', but received padding mode ${this.padding}`);\n    }\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n\n    if (inputShape.length !== 4) {\n      throw new ValueError(\n          'Input should have rank 4; Received input shape: ' +\n          JSON.stringify(inputShape));\n    }\n\n    const channelAxis =\n        this.dataFormat === 'channelsFirst' ? 1 : inputShape.length - 1;\n    if (inputShape[channelAxis] == null) {\n      throw new ValueError(\n          'The channel dimension of the inputs should be defined. ' +\n          'Found `None`.');\n    }\n    const inputDim = inputShape[channelAxis];\n    const kernelShape = this.kernelSize.concat([this.filters, inputDim]);\n\n    this.kernel = this.addWeight(\n        'kernel', kernelShape, 'float32', this.kernelInitializer,\n        this.kernelRegularizer, true, this.kernelConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [this.filters], 'float32', this.biasInitializer,\n          this.biasRegularizer, true, this.biasConstraint);\n    }\n\n    // Set input spec.\n    this.inputSpec =\n        [new InputSpec({ndim: 4, axes: {[channelAxis]: inputDim}})];\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tfc.tidy(() => {\n      let input = getExactlyOneTensor(inputs);\n      if (input.shape.length !== 4) {\n        throw new ValueError(\n            `Conv2DTranspose.call() expects input tensor to be rank-4, but ` +\n            `received a tensor of rank-${input.shape.length}`);\n      }\n\n      const inputShape = input.shape;\n      const batchSize = inputShape[0];\n\n      let hAxis: number;\n      let wAxis: number;\n      if (this.dataFormat === 'channelsFirst') {\n        hAxis = 2;\n        wAxis = 3;\n      } else {\n        hAxis = 1;\n        wAxis = 2;\n      }\n\n      const height = inputShape[hAxis];\n      const width = inputShape[wAxis];\n      const kernelH = this.kernelSize[0];\n      const kernelW = this.kernelSize[1];\n      const strideH = this.strides[0];\n      const strideW = this.strides[1];\n\n      // Infer the dynamic output shape.\n      const outHeight = deconvLength(height, strideH, kernelH, this.padding);\n      const outWidth = deconvLength(width, strideW, kernelW, this.padding);\n\n      // Porting Note: We don't branch based on `this.dataFormat` here,\n      // because\n      //   the tjfs-core function `conv2dTranspose` called below always\n      //   assumes channelsLast.\n      const outputShape: [number, number, number, number] =\n          [batchSize, outHeight, outWidth, this.filters];\n\n      if (this.dataFormat !== 'channelsLast') {\n        input = tfc.transpose(input, [0, 2, 3, 1]);\n      }\n      let outputs = tfc.conv2dTranspose(\n          input as Tensor4D, this.kernel.read() as Tensor4D, outputShape,\n          this.strides as [number, number], this.padding as 'same' | 'valid');\n      if (this.dataFormat !== 'channelsLast') {\n        outputs = tfc.transpose(outputs, [0, 3, 1, 2]);\n      }\n\n      if (this.bias != null) {\n        outputs =\n            K.biasAdd(outputs, this.bias.read(), this.dataFormat) as Tensor4D;\n      }\n      if (this.activation != null) {\n        outputs = this.activation.apply(outputs) as Tensor4D;\n      }\n      return outputs;\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const outputShape = inputShape.slice();\n\n    let channelAxis: number;\n    let heightAxis: number;\n    let widthAxis: number;\n    if (this.dataFormat === 'channelsFirst') {\n      channelAxis = 1;\n      heightAxis = 2;\n      widthAxis = 3;\n    } else {\n      channelAxis = 3;\n      heightAxis = 1;\n      widthAxis = 2;\n    }\n\n    const kernelH = this.kernelSize[0];\n    const kernelW = this.kernelSize[1];\n    const strideH = this.strides[0];\n    const strideW = this.strides[1];\n\n    outputShape[channelAxis] = this.filters;\n    outputShape[heightAxis] =\n        deconvLength(outputShape[heightAxis], strideH, kernelH, this.padding);\n    outputShape[widthAxis] =\n        deconvLength(outputShape[widthAxis], strideW, kernelW, this.padding);\n    return outputShape;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    delete config['dilationRate'];\n    return config;\n  }\n}\nserialization.registerClass(Conv2DTranspose);\n\nexport declare interface SeparableConvLayerArgs extends ConvLayerArgs {\n  /**\n   * The number of depthwise convolution output channels for each input\n   * channel.\n   * The total number of depthwise convolution output channels will be equal\n   * to `filtersIn * depthMultiplier`. Default: 1.\n   */\n  depthMultiplier?: number;\n\n  /**\n   * Initializer for the depthwise kernel matrix.\n   */\n  depthwiseInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the pointwise kernel matrix.\n   */\n  pointwiseInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Regularizer function applied to the depthwise kernel matrix.\n   */\n  depthwiseRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the pointwise kernel matrix.\n   */\n  pointwiseRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Constraint function applied to the depthwise kernel matrix.\n   */\n  depthwiseConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint function applied to the pointwise kernel matrix.\n   */\n  pointwiseConstraint?: ConstraintIdentifier|Constraint;\n}\n\nexport class SeparableConv extends Conv {\n  /** @nocollapse */\n  static className = 'SeparableConv';\n\n  readonly depthMultiplier: number;\n\n  protected readonly depthwiseInitializer?: Initializer;\n  protected readonly depthwiseRegularizer?: Regularizer;\n  protected readonly depthwiseConstraint?: Constraint;\n  protected readonly pointwiseInitializer?: Initializer;\n  protected readonly pointwiseRegularizer?: Regularizer;\n  protected readonly pointwiseConstraint?: Constraint;\n\n  readonly DEFAULT_DEPTHWISE_INITIALIZER: InitializerIdentifier =\n      'glorotUniform';\n  readonly DEFAULT_POINTWISE_INITIALIZER: InitializerIdentifier =\n      'glorotUniform';\n\n  protected depthwiseKernel: LayerVariable = null;\n  protected pointwiseKernel: LayerVariable = null;\n\n  constructor(rank: number, config?: SeparableConvLayerArgs) {\n    super(rank, config);\n\n    if (config.filters == null) {\n      throw new ValueError(\n          'The `filters` configuration field is required by SeparableConv, ' +\n          'but is unspecified.');\n    }\n    if (config.kernelInitializer != null || config.kernelRegularizer != null ||\n        config.kernelConstraint != null) {\n      throw new ValueError(\n          'Fields kernelInitializer, kernelRegularizer and kernelConstraint ' +\n          'are invalid for SeparableConv2D. Use depthwiseInitializer, ' +\n          'depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, ' +\n          'pointwiseRegularizer and pointwiseConstraint instead.');\n    }\n    if (config.padding != null && config.padding !== 'same' &&\n        config.padding !== 'valid') {\n      throw new ValueError(\n          `SeparableConv${this.rank}D supports only padding modes: ` +\n          `'same' and 'valid', but received ${JSON.stringify(config.padding)}`);\n    }\n\n    this.depthMultiplier =\n        config.depthMultiplier == null ? 1 : config.depthMultiplier;\n    this.depthwiseInitializer = getInitializer(\n        config.depthwiseInitializer || this.DEFAULT_DEPTHWISE_INITIALIZER);\n    this.depthwiseRegularizer = getRegularizer(config.depthwiseRegularizer);\n    this.depthwiseConstraint = getConstraint(config.depthwiseConstraint);\n    this.pointwiseInitializer = getInitializer(\n        config.depthwiseInitializer || this.DEFAULT_POINTWISE_INITIALIZER);\n    this.pointwiseRegularizer = getRegularizer(config.pointwiseRegularizer);\n    this.pointwiseConstraint = getConstraint(config.pointwiseConstraint);\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    if (inputShape.length < this.rank + 2) {\n      throw new ValueError(\n          `Inputs to SeparableConv${this.rank}D should have rank ` +\n          `${this.rank + 2}, but received input shape: ` +\n          `${JSON.stringify(inputShape)}`);\n    }\n    const channelAxis =\n        this.dataFormat === 'channelsFirst' ? 1 : inputShape.length - 1;\n    if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) {\n      throw new ValueError(\n          `The channel dimension of the inputs should be defined, ` +\n          `but found ${JSON.stringify(inputShape[channelAxis])}`);\n    }\n\n    const inputDim = inputShape[channelAxis];\n    const depthwiseKernelShape =\n        this.kernelSize.concat([inputDim, this.depthMultiplier]);\n    const pointwiseKernelShape = [];\n    for (let i = 0; i < this.rank; ++i) {\n      pointwiseKernelShape.push(1);\n    }\n    pointwiseKernelShape.push(inputDim * this.depthMultiplier, this.filters);\n\n    const trainable = true;\n    this.depthwiseKernel = this.addWeight(\n        'depthwise_kernel', depthwiseKernelShape, 'float32',\n        this.depthwiseInitializer, this.depthwiseRegularizer, trainable,\n        this.depthwiseConstraint);\n    this.pointwiseKernel = this.addWeight(\n        'pointwise_kernel', pointwiseKernelShape, 'float32',\n        this.pointwiseInitializer, this.pointwiseRegularizer, trainable,\n        this.pointwiseConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [this.filters], 'float32', this.biasInitializer,\n          this.biasRegularizer, trainable, this.biasConstraint);\n    } else {\n      this.bias = null;\n    }\n\n    this.inputSpec =\n        [new InputSpec({ndim: this.rank + 2, axes: {[channelAxis]: inputDim}})];\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = getExactlyOneTensor(inputs);\n\n      let output: Tensor;\n      if (this.rank === 1) {\n        throw new NotImplementedError(\n            '1D separable convolution is not implemented yet.');\n      } else if (this.rank === 2) {\n        if (this.dataFormat === 'channelsFirst') {\n          inputs = tfc.transpose(inputs, [0, 2, 3, 1]);  // NCHW -> NHWC.\n        }\n\n        output = tfc.separableConv2d(\n            inputs as Tensor4D, this.depthwiseKernel.read() as Tensor4D,\n            this.pointwiseKernel.read() as Tensor4D,\n            this.strides as [number, number], this.padding as 'same' | 'valid',\n            this.dilationRate as [number, number], 'NHWC');\n      }\n\n      if (this.useBias) {\n        output = K.biasAdd(output, this.bias.read(), this.dataFormat);\n      }\n      if (this.activation != null) {\n        output = this.activation.apply(output);\n      }\n\n      if (this.dataFormat === 'channelsFirst') {\n        output = tfc.transpose(output, [0, 3, 1, 2]);  // NHWC -> NCHW.\n      }\n      return output;\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    delete config['rank'];\n    delete config['kernelInitializer'];\n    delete config['kernelRegularizer'];\n    delete config['kernelConstraint'];\n    config['depthwiseInitializer'] =\n        serializeInitializer(this.depthwiseInitializer);\n    config['pointwiseInitializer'] =\n        serializeInitializer(this.pointwiseInitializer);\n    config['depthwiseRegularizer'] =\n        serializeRegularizer(this.depthwiseRegularizer);\n    config['pointwiseRegularizer'] =\n        serializeRegularizer(this.pointwiseRegularizer);\n    config['depthwiseConstraint'] =\n        serializeConstraint(this.depthwiseConstraint);\n    config['pointwiseConstraint'] =\n        serializeConstraint(this.pointwiseConstraint);\n    return config;\n  }\n}\n\nexport class SeparableConv2D extends SeparableConv {\n  /** @nocollapse */\n  static className = 'SeparableConv2D';\n  constructor(args?: SeparableConvLayerArgs) {\n    super(2, args);\n  }\n}\nserialization.registerClass(SeparableConv2D);\n\nexport class Conv1D extends Conv {\n  /** @nocollapse */\n  static className = 'Conv1D';\n  constructor(args: ConvLayerArgs) {\n    super(1, args);\n    Conv1D.verifyArgs(args);\n    this.inputSpec = [{ndim: 3}];\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    delete config['rank'];\n    delete config['dataFormat'];\n    return config;\n  }\n\n  protected static verifyArgs(args: ConvLayerArgs) {\n    // config.kernelSize must be a number or array of numbers.\n    if (typeof args.kernelSize !== 'number' &&\n        !generic_utils.checkArrayTypeAndLength(\n            args.kernelSize, 'number', 1, 1)) {\n      throw new ValueError(\n          `Conv1D expects config.kernelSize to be number or number[] with ` +\n          `length 1, but received ${JSON.stringify(args.kernelSize)}.`);\n    }\n  }\n}\nserialization.registerClass(Conv1D);\n\nexport declare interface Cropping2DLayerArgs extends LayerArgs {\n  /**\n   * Dimension of the cropping along the width and the height.\n   * - If integer: the same symmetric cropping\n   *  is applied to width and height.\n   * - If list of 2 integers:\n   *   interpreted as two different\n   *   symmetric cropping values for height and width:\n   *   `[symmetric_height_crop, symmetric_width_crop]`.\n   * - If a list of 2 list of 2 integers:\n   *   interpreted as\n   *   `[[top_crop, bottom_crop], [left_crop, right_crop]]`\n   */\n  cropping: number|[number, number]|[[number, number], [number, number]];\n\n  /**\n   * Format of the data, which determines the ordering of the dimensions in\n   * the inputs.\n   *\n   * `channels_last` corresponds to inputs with shape\n   *   `(batch, ..., channels)`\n   *\n   * `channels_first` corresponds to inputs with shape\n   *   `(batch, channels, ...)`\n   *\n   * Defaults to `channels_last`.\n   */\n  dataFormat?: DataFormat;\n}\n\nexport class Cropping2D extends Layer {\n  /** @nocollapse */\n  static className = 'Cropping2D';\n  protected readonly cropping: [[number, number], [number, number]];\n  protected readonly dataFormat: DataFormat;\n\n  constructor(args: Cropping2DLayerArgs) {\n    super(args);\n    if (typeof args.cropping === 'number') {\n      this.cropping =\n          [[args.cropping, args.cropping], [args.cropping, args.cropping]];\n    } else if (typeof args.cropping[0] === 'number') {\n      this.cropping = [\n        [args.cropping[0], args.cropping[0]],\n        [args.cropping[1] as number, args.cropping[1] as number]\n      ];\n    } else {\n      this.cropping = args.cropping as [[number, number], [number, number]];\n    }\n    this.dataFormat =\n        args.dataFormat === undefined ? 'channelsLast' : args.dataFormat;\n    this.inputSpec = [{ndim: 4}];\n  }\n\n  computeOutputShape(inputShape: Shape): Shape {\n    if (this.dataFormat === 'channelsFirst') {\n      return [\n        inputShape[0], inputShape[1],\n        inputShape[2] - this.cropping[0][0] - this.cropping[0][1],\n        inputShape[3] - this.cropping[1][0] - this.cropping[1][1]\n      ];\n    } else {\n      return [\n        inputShape[0],\n        inputShape[1] - this.cropping[0][0] - this.cropping[0][1],\n        inputShape[2] - this.cropping[1][0] - this.cropping[1][1], inputShape[3]\n      ];\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = getExactlyOneTensor(inputs);\n\n      if (this.dataFormat === 'channelsLast') {\n        const hSliced = K.sliceAlongAxis(\n            inputs, this.cropping[0][0],\n            inputs.shape[1] - this.cropping[0][0] - this.cropping[0][1], 2);\n        return K.sliceAlongAxis(\n            hSliced, this.cropping[1][0],\n            inputs.shape[2] - this.cropping[1][1] - this.cropping[1][0], 3);\n      } else {\n        const hSliced = K.sliceAlongAxis(\n            inputs, this.cropping[0][0],\n            inputs.shape[2] - this.cropping[0][0] - this.cropping[0][1], 3);\n        return K.sliceAlongAxis(\n            hSliced, this.cropping[1][0],\n            inputs.shape[3] - this.cropping[1][1] - this.cropping[1][0], 4);\n      }\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {cropping: this.cropping, dataFormat: this.dataFormat};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Cropping2D);\n\nexport declare interface UpSampling2DLayerArgs extends LayerArgs {\n  /**\n   * The upsampling factors for rows and columns.\n   *\n   * Defaults to `[2, 2]`.\n   */\n  size?: number[];\n  /**\n   * Format of the data, which determines the ordering of the dimensions in\n   * the inputs.\n   *\n   * `\"channelsLast\"` corresponds to inputs with shape\n   *   `[batch, ..., channels]`\n   *\n   *  `\"channelsFirst\"` corresponds to inputs with shape `[batch, channels,\n   * ...]`.\n   *\n   * Defaults to `\"channelsLast\"`.\n   */\n  dataFormat?: DataFormat;\n}\n\nexport class UpSampling2D extends Layer {\n  /** @nocollapse */\n  static className = 'UpSampling2D';\n  protected readonly DEFAULT_SIZE = [2, 2];\n  protected readonly size: number[];\n  protected readonly dataFormat: DataFormat;\n\n  constructor(args: UpSampling2DLayerArgs) {\n    super(args);\n    this.inputSpec = [{ndim: 4}];\n    this.size = args.size == null ? this.DEFAULT_SIZE : args.size;\n    this.dataFormat =\n        args.dataFormat == null ? 'channelsLast' : args.dataFormat;\n  }\n\n  computeOutputShape(inputShape: Shape): Shape {\n    if (this.dataFormat === 'channelsFirst') {\n      const height =\n          inputShape[2] == null ? null : this.size[0] * inputShape[2];\n      const width = inputShape[3] == null ? null : this.size[1] * inputShape[3];\n      return [inputShape[0], inputShape[1], height, width];\n    } else {\n      const height =\n          inputShape[1] == null ? null : this.size[0] * inputShape[1];\n      const width = inputShape[2] == null ? null : this.size[1] * inputShape[2];\n      return [inputShape[0], height, width, inputShape[3]];\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tfc.tidy(() => {\n      let input = getExactlyOneTensor(inputs) as Tensor4D;\n      const inputShape = input.shape;\n\n      if (this.dataFormat === 'channelsFirst') {\n        input = tfc.transpose(input, [0, 2, 3, 1]);\n        const height = this.size[0] * inputShape[2];\n        const width = this.size[1] * inputShape[3];\n        const resized = input.resizeNearestNeighbor([height, width]);\n        return tfc.transpose(resized, [0, 3, 1, 2]);\n      } else {\n        const height = this.size[0] * inputShape[1];\n        const width = this.size[1] * inputShape[2];\n        return input.resizeNearestNeighbor([height, width]);\n      }\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {size: this.size, dataFormat: this.dataFormat};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(UpSampling2D);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Depthwise Convolutional Layers\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, Tensor4D, tidy} from '@tensorflow/tfjs-core';\n\nimport {imageDataFormat} from '../backend/common';\nimport * as K from '../backend/tfjs_backend';\nimport {checkDataFormat} from '../common';\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {DataFormat, Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport {convOutputLength} from '../utils/conv_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\nimport {BaseConv, BaseConvLayerArgs, ConvLayerArgs, preprocessConv2DInput} from './convolutional';\n\n/**\n * 2D convolution with separable filters.\n * @param x Input tensor.\n * @param depthwiseKernel Convolution kernel for depthwise convolution.\n * @param strides Strides (Array of two integers).\n * @param padding Padding model.\n * @param dataFormat Data format.\n * @param dilationRate Array of two integers, dilation rates for the separable\n *   convolution.\n * @returns Output tensor.\n * @throws ValueError If depthwiseKernel is not a 4D array.\n */\nexport function depthwiseConv2d(\n    x: Tensor, depthwiseKernel: Tensor, strides: [number, number] = [1, 1],\n    padding = 'valid', dataFormat?: DataFormat,\n    dilationRate?: [number, number]): Tensor {\n  return tidy(() => {\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    checkDataFormat(dataFormat);\n    let y = preprocessConv2DInput(x, dataFormat);\n    if (x.rank !== 4) {\n      throw new ValueError(\n          `Input for depthwiseConv2d is required to be 4-D, but is instead ` +\n          `${x.rank}-D`);\n    }\n    if (depthwiseKernel.rank !== 4) {\n      throw new ValueError(\n          `depthwiseKernel is required to be 4-D, but is instead ` +\n          `${depthwiseKernel.rank}-D`);\n    }\n    y = tfc.depthwiseConv2d(\n        y as Tensor4D, depthwiseKernel as Tensor4D, strides,\n        padding === 'same' ? 'same' : 'valid', 'NHWC', dilationRate);\n    if (dataFormat === 'channelsFirst') {\n      y = tfc.transpose(y, [0, 3, 1, 2]);\n    }\n    return y;\n  });\n}\n\nexport declare interface DepthwiseConv2DLayerArgs extends BaseConvLayerArgs {\n  /**\n   * An integer or Array of 2 integers, specifying the width and height of the\n   * 2D convolution window. Can be a single integer to specify the same value\n   * for all spatial dimensions.\n   */\n  kernelSize: number|[number, number];\n\n  /**\n   * The number of depthwise convolution output channels for each input\n   * channel.\n   * The total number of depthwise convolution output channels will be equal to\n   * `filtersIn * depthMultiplier`.\n   * Default: 1.\n   */\n  depthMultiplier?: number;\n\n  /**\n   * Initializer for the depthwise kernel matrix.\n   * Default: GlorotNormal.\n   */\n  depthwiseInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Constraint for the depthwise kernel matrix.\n   */\n  depthwiseConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Regulzarizer function for the depthwise kernel matrix.\n   */\n  depthwiseRegularizer?: RegularizerIdentifier|Regularizer;\n}\n\nexport class DepthwiseConv2D extends BaseConv {\n  /** @nocollapse */\n  static className = 'DepthwiseConv2D';\n  private readonly depthMultiplier: number;\n  private readonly depthwiseInitializer: Initializer;\n  private readonly depthwiseConstraint: Constraint;\n  private readonly depthwiseRegularizer: Regularizer;\n\n  private depthwiseKernel: LayerVariable = null;\n\n  constructor(args: DepthwiseConv2DLayerArgs) {\n    super(2, args as ConvLayerArgs);\n    this.depthMultiplier =\n        args.depthMultiplier == null ? 1 : args.depthMultiplier;\n    this.depthwiseInitializer = getInitializer(\n        args.depthwiseInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.depthwiseConstraint = getConstraint(args.depthwiseConstraint);\n    this.depthwiseRegularizer = getRegularizer(args.depthwiseRegularizer);\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    if (inputShape.length < 4) {\n      throw new ValueError(\n          `Inputs to DepthwiseConv2D should have rank 4. ` +\n          `Received input shape: ${JSON.stringify(inputShape)}.`);\n    }\n    const channelAxis = this.dataFormat === 'channelsFirst' ? 1 : 3;\n    if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) {\n      throw new ValueError(\n          'The channel dimension of the inputs to DepthwiseConv2D should ' +\n          `be defined, but is not (${inputShape[channelAxis]}).`);\n    }\n    const inputDim = inputShape[channelAxis];\n    const depthwiseKernelShape: Shape = [\n      this.kernelSize[0], this.kernelSize[1], inputDim, this.depthMultiplier\n    ];\n\n    this.depthwiseKernel = this.addWeight(\n        'depthwise_kernel', depthwiseKernelShape, null,\n        this.depthwiseInitializer, this.depthwiseRegularizer, true,\n        this.depthwiseConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [inputDim * this.depthMultiplier], null, this.biasInitializer,\n          this.biasRegularizer, true, this.biasConstraint);\n    } else {\n      this.bias = null;\n    }\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = getExactlyOneTensor(inputs);\n      let outputs = depthwiseConv2d(\n          inputs, this.depthwiseKernel.read(), this.strides as [number, number],\n          this.padding, this.dataFormat, null);\n      // TODO(cais): Add support for dilation.\n      if (this.useBias) {\n        outputs = K.biasAdd(outputs, this.bias.read(), this.dataFormat);\n      }\n      if (this.activation != null) {\n        outputs = this.activation.apply(outputs);\n      }\n      return outputs;\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const rows =\n        this.dataFormat === 'channelsFirst' ? inputShape[2] : inputShape[1];\n    const cols =\n        this.dataFormat === 'channelsFirst' ? inputShape[3] : inputShape[2];\n    const outFilters = this.dataFormat === 'channelsFirst' ?\n        inputShape[1] * this.depthMultiplier :\n        inputShape[3] * this.depthMultiplier;\n    const outRows = convOutputLength(\n        rows, this.kernelSize[0], this.padding, this.strides[0]);\n    const outCols = convOutputLength(\n        cols, this.kernelSize[1], this.padding, this.strides[1]);\n    if (this.dataFormat === 'channelsFirst') {\n      return [inputShape[0], outFilters, outRows, outCols];\n    } else {\n      // In this case, assume 'channelsLast'.\n      return [inputShape[0], outRows, outCols, outFilters];\n    }\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = super.getConfig();\n    config['depthMultiplier'] = this.depthMultiplier;\n    config['depthwiseInitializer'] =\n        serializeInitializer(this.depthwiseInitializer);\n    config['depthwiseRegularizer'] =\n        serializeRegularizer(this.depthwiseRegularizer);\n    config['depthwiseConstraint'] =\n        serializeConstraint(this.depthwiseRegularizer);\n    return config;\n  }\n}\nserialization.registerClass(DepthwiseConv2D);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Basic Layers.\n */\n\nimport {any, notEqual, serialization, Tensor, tidy, transpose, util} from '@tensorflow/tfjs-core';\n\nimport {Activation as ActivationFn, getActivation, serializeActivation} from '../activations';\nimport * as K from '../backend/tfjs_backend';\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {DisposeResult, InputSpec, Layer, LayerArgs} from '../engine/topology';\nimport {ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {ActivationIdentifier} from '../keras_format/activation_config';\nimport {DataFormat, Shape} from '../keras_format/common';\nimport {LayerConfig} from '../keras_format/topology_config';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport {assertPositiveInteger, mapActivationToFusedKernel} from '../utils/generic_utils';\nimport {arrayProd, range} from '../utils/math_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\nexport declare interface DropoutLayerArgs extends LayerArgs {\n  /** Float between 0 and 1. Fraction of the input units to drop. */\n  rate: number;\n\n  /**\n   * Integer array representing the shape of the binary dropout mask that will\n   * be multiplied with the input.\n   *\n   * For instance, if your inputs have shape `(batchSize, timesteps, features)`\n   * and you want the dropout mask to be the same for all timesteps, you can use\n   * `noise_shape=(batch_size, 1, features)`.\n   */\n  noiseShape?: number[];\n\n  /** An integer to use as random seed. */\n  seed?: number;\n}\n\nexport class Dropout extends Layer {\n  /** @nocollapse */\n  static className = 'Dropout';\n  private readonly rate: number;\n  private readonly noiseShape: number[];\n  private readonly seed: number;\n\n  constructor(args: DropoutLayerArgs) {\n    super(args);\n    this.rate = Math.max(Math.min(args.rate, 1), 0);\n    // So that the scalar doesn't get tidied up between executions.\n    this.noiseShape = args.noiseShape;\n    this.seed = args.seed;\n    this.supportsMasking = true;\n  }\n\n  protected getNoiseShape(input: Tensor): Shape {\n    if (this.noiseShape == null) {\n      return this.noiseShape;\n    }\n    const inputShape = input.shape;\n    const noiseShape: Shape = [];\n    for (let i = 0; i < this.noiseShape.length; ++i) {\n      noiseShape.push(\n          this.noiseShape[i] == null ? inputShape[i] : this.noiseShape[i]);\n    }\n    return noiseShape;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      const input = getExactlyOneTensor(inputs);\n      if (0 < this.rate && this.rate < 1) {\n        const training =\n            kwargs['training'] == null ? false : kwargs['training'];\n        const noiseShape = this.getNoiseShape(input);\n        const output = K.inTrainPhase(\n            () => K.dropout(input, this.rate, noiseShape, this.seed),\n            () => input, training);\n        return output;\n      }\n      return inputs;\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      rate: this.rate,\n      noiseShape: this.noiseShape,\n      seed: this.seed,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  dispose(): DisposeResult {\n    return super.dispose();\n  }\n}\nserialization.registerClass(Dropout);\n\nexport declare interface DenseLayerArgs extends LayerArgs {\n  /** Positive integer, dimensionality of the output space. */\n  units: number;\n  /**\n   * Activation function to use.\n   *\n   * If unspecified, no activation is applied.\n   */\n  activation?: ActivationIdentifier;\n  /** Whether to apply a bias. */\n  useBias?: boolean;\n  /**\n   * Initializer for the dense kernel weights matrix.\n   */\n  kernelInitializer?: InitializerIdentifier|Initializer;\n  /**\n   * Initializer for the bias vector.\n   */\n  biasInitializer?: InitializerIdentifier|Initializer;\n  /**\n   * If specified, defines inputShape as `[inputDim]`.\n   */\n  inputDim?: number;\n\n  /**\n   * Constraint for the kernel weights.\n   */\n  kernelConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint for the bias vector.\n   */\n  biasConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Regularizer function applied to the dense kernel weights matrix.\n   */\n  kernelRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the bias vector.\n   */\n  biasRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the activation.\n   */\n  activityRegularizer?: RegularizerIdentifier|Regularizer;\n}\n\nexport interface SpatialDropout1DLayerConfig extends LayerConfig {\n  /** Float between 0 and 1. Fraction of the input units to drop. */\n  rate: number;\n\n  /** An integer to use as random seed. */\n  seed?: number;\n}\n\nexport class SpatialDropout1D extends Dropout {\n  /** @nocollapse */\n  static className = 'SpatialDropout1D';\n\n  constructor(args: SpatialDropout1DLayerConfig) {\n    super(args);\n    this.inputSpec = [{ndim: 3}];\n  }\n\n  protected getNoiseShape(input: Tensor): Shape {\n    const inputShape = input.shape;\n    return [inputShape[0], 1, inputShape[2]];\n  }\n}\nserialization.registerClass(SpatialDropout1D);\n\nexport class Dense extends Layer {\n  /** @nocollapse */\n  static className = 'Dense';\n  private units: number;\n  // Default activation: Linear (none).\n  private activation: ActivationFn = null;\n  private useBias = true;\n  private kernelInitializer: Initializer;\n  private biasInitializer: Initializer;\n  private kernel: LayerVariable = null;\n  private bias: LayerVariable = null;\n\n  readonly DEFAULT_KERNEL_INITIALIZER: InitializerIdentifier = 'glorotNormal';\n  readonly DEFAULT_BIAS_INITIALIZER: InitializerIdentifier = 'zeros';\n  private readonly kernelConstraint?: Constraint;\n  private readonly biasConstraint?: Constraint;\n  private readonly kernelRegularizer?: Regularizer;\n  private readonly biasRegularizer?: Regularizer;\n\n  constructor(args: DenseLayerArgs) {\n    super(args);\n    if (args.batchInputShape == null && args.inputShape == null &&\n        args.inputDim != null) {\n      // This logic is copied from Layer's constructor, since we can't\n      // do exactly what the Python constructor does for Dense().\n      let batchSize: number = null;\n      if (args.batchSize != null) {\n        batchSize = args.batchSize;\n      }\n      this.batchInputShape = [batchSize, args.inputDim];\n    }\n\n    this.units = args.units;\n    assertPositiveInteger(this.units, 'units');\n    this.activation = getActivation(args.activation);\n    if (args.useBias != null) {\n      this.useBias = args.useBias;\n    }\n    this.kernelInitializer = getInitializer(\n        args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.biasInitializer =\n        getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER);\n    this.kernelConstraint = getConstraint(args.kernelConstraint);\n    this.biasConstraint = getConstraint(args.biasConstraint);\n    this.kernelRegularizer = getRegularizer(args.kernelRegularizer);\n    this.biasRegularizer = getRegularizer(args.biasRegularizer);\n    this.activityRegularizer = getRegularizer(args.activityRegularizer);\n    this.supportsMasking = true;\n\n    this.inputSpec = [{minNDim: 2}];\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const inputLastDim = inputShape[inputShape.length - 1];\n    if (this.kernel == null) {\n      this.kernel = this.addWeight(\n          'kernel', [inputLastDim, this.units], null, this.kernelInitializer,\n          this.kernelRegularizer, true, this.kernelConstraint);\n      if (this.useBias) {\n        this.bias = this.addWeight(\n            'bias', [this.units], null, this.biasInitializer,\n            this.biasRegularizer, true, this.biasConstraint);\n      }\n    }\n\n    this.inputSpec = [{minNDim: 2, axes: {[-1]: inputLastDim}}];\n    this.built = true;\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const outputShape = inputShape.slice();\n    outputShape[outputShape.length - 1] = this.units;\n    return outputShape;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      // Dense layer accepts only a single input.\n      const input = getExactlyOneTensor(inputs);\n      const fusedActivationName =\n          mapActivationToFusedKernel(this.activation.getClassName());\n      let output: Tensor;\n\n      if (fusedActivationName != null) {\n        output = K.dot(\n            input, this.kernel.read(), fusedActivationName,\n            this.bias ? this.bias.read() : null);\n      } else {\n        output = K.dot(input, this.kernel.read());\n        if (this.bias != null) {\n          output = K.biasAdd(output, this.bias.read());\n        }\n        if (this.activation != null) {\n          output = this.activation.apply(output);\n        }\n      }\n\n      return output;\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint)\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Dense);\n\nexport declare interface FlattenLayerArgs extends LayerArgs {\n  /** Image data format: channeLast (default) or channelFirst. */\n  dataFormat?: DataFormat;\n}\n\nexport class Flatten extends Layer {\n  private dataFormat: DataFormat;\n\n  /** @nocollapse */\n  static className = 'Flatten';\n  constructor(args?: FlattenLayerArgs) {\n    args = args || {};\n    super(args);\n    this.inputSpec = [{minNDim: 3}];\n    this.dataFormat = args.dataFormat;\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    for (const dim of inputShape.slice(1)) {\n      if (dim == null) {\n        throw new ValueError(\n            `The shape of the input to \"Flatten\" is not fully defined ` +\n            `(got ${inputShape.slice(1)}). Make sure to pass a complete ` +\n            `\"input_shape\" or \"batch_input_shape\" argument to the first ` +\n            `layer in your model.`);\n      }\n    }\n    return [inputShape[0], arrayProd(inputShape, 1)];\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n\n      let input = getExactlyOneTensor(inputs);\n      if (this.dataFormat === 'channelsFirst' && input.rank > 1) {\n        const permutation: number[] = [0];\n        for (let i = 2; i < input.rank; ++i) {\n          permutation.push(i);\n        }\n        permutation.push(1);\n        input = input.transpose(permutation);\n      }\n\n      return K.batchFlatten(input);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {};\n    if (this.dataFormat != null) {\n      config['dataFormat'] = this.dataFormat;\n    }\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Flatten);\n\nexport declare interface ActivationLayerArgs extends LayerArgs {\n  /**\n   * Name of the activation function to use.\n   */\n  activation: ActivationIdentifier;\n}\n\nexport class Activation extends Layer {\n  /** @nocollapse */\n  static className = 'Activation';\n  activation: ActivationFn;\n\n  constructor(args: ActivationLayerArgs) {\n    super(args);\n    this.supportsMasking = true;\n    this.activation = getActivation(args.activation);\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      const input = getExactlyOneTensor(inputs);\n      return this.activation.apply(input);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {activation: serializeActivation(this.activation)};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Activation);\n\nexport declare interface ReshapeLayerArgs extends LayerArgs {\n  /** The target shape. Does not include the batch axis. */\n  targetShape: Shape;\n}\n\nexport declare interface RepeatVectorLayerArgs extends LayerArgs {\n  /**\n   * The integer number of times to repeat the input.\n   */\n  n: number;\n}\n\nexport class RepeatVector extends Layer {\n  /** @nocollapse */\n  static className = 'RepeatVector';\n  readonly n: number;\n\n  constructor(args: RepeatVectorLayerArgs) {\n    super(args);\n    this.n = args.n;\n    this.inputSpec = [{ndim: 2}];\n  }\n\n  computeOutputShape(inputShape: Shape): Shape {\n    return [inputShape[0], this.n, inputShape[1]];\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = getExactlyOneTensor(inputs);\n      return K.repeat(inputs, this.n);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      n: this.n,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(RepeatVector);\n\nexport class Reshape extends Layer {\n  /** @nocollapse */\n  static className = 'Reshape';\n  private targetShape: Shape;\n\n  constructor(args: ReshapeLayerArgs) {\n    super(args);\n    this.targetShape = args.targetShape;\n\n    // Make sure that all unknown dimensions are represented as `null`.\n    for (let i = 0; i < this.targetShape.length; ++i) {\n      if (this.isUnknown(this.targetShape[i])) {\n        this.targetShape[i] = null;\n      }\n    }\n  }\n\n  private isUnknown(dim: number): boolean {\n    return dim < 0 || dim == null;\n  }\n\n  /**\n   * Finds and replaces a missing dimension in output shape.\n   *\n   * This is a near direct port of the internal Numpy function\n   * `_fix_unknown_dimension` in `numpy/core/src/multiarray/shape.c`.\n   *\n   * @param inputShape: Original shape of array begin reshape.\n   * @param outputShape: Target shape of the array, with at most a single\n   * `null` or negative number, which indicates an underdetermined dimension\n   * that should be derived from `inputShape` and the known dimensions of\n   *   `outputShape`.\n   * @returns: The output shape with `null` replaced with its computed value.\n   * @throws: ValueError: If `inputShape` and `outputShape` do not match.\n   */\n  private fixUnknownDimension(inputShape: Shape, outputShape: Shape): Shape {\n    const errorMsg = 'Total size of new array must be unchanged.';\n    const finalShape = outputShape.slice();\n    let known = 1;\n    let unknown = null;\n    for (let i = 0; i < finalShape.length; ++i) {\n      const dim = finalShape[i];\n      if (this.isUnknown(dim)) {\n        if (unknown === null) {\n          unknown = i;\n        } else {\n          throw new ValueError('Can only specifiy one unknown dimension.');\n        }\n      } else {\n        known *= dim;\n      }\n    }\n\n    const originalSize = arrayProd(inputShape);\n    if (unknown !== null) {\n      if (known === 0 || originalSize % known !== 0) {\n        throw new ValueError(errorMsg);\n      }\n      finalShape[unknown] = originalSize / known;\n    } else if (originalSize !== known) {\n      throw new ValueError(errorMsg);\n    }\n\n    return finalShape;\n  }\n\n  computeOutputShape(inputShape: Shape): Shape {\n    let anyUnknownDims = false;\n    for (let i = 0; i < inputShape.length; ++i) {\n      if (this.isUnknown(inputShape[i])) {\n        anyUnknownDims = true;\n        break;\n      }\n    }\n\n    if (anyUnknownDims) {\n      return inputShape.slice(0, 1).concat(this.targetShape);\n    } else {\n      return inputShape.slice(0, 1).concat(\n          this.fixUnknownDimension(inputShape.slice(1), this.targetShape));\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      const input = getExactlyOneTensor(inputs);\n      const inputShape = input.shape;\n      const outputShape = inputShape.slice(0, 1).concat(\n          this.fixUnknownDimension(inputShape.slice(1), this.targetShape));\n      return input.reshape(outputShape);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      targetShape: this.targetShape,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Reshape);\n\nexport declare interface PermuteLayerArgs extends LayerArgs {\n  /**\n   * Array of integers. Permutation pattern. Does not include the\n   * sample (batch) dimension. Index starts at 1.\n   * For instance, `[2, 1]` permutes the first and second dimensions\n   * of the input.\n   */\n  dims: number[];\n}\n\nexport class Permute extends Layer {\n  /** @nocollapse */\n  static className = 'Permute';\n  readonly dims: number[];\n  private readonly dimsIncludingBatch: number[];\n\n  constructor(args: PermuteLayerArgs) {\n    super(args);\n    if (args.dims == null) {\n      throw new Error(\n          'Required configuration field `dims` is missing during Permute ' +\n          'constructor call.');\n    }\n    if (!Array.isArray(args.dims)) {\n      throw new Error(\n          'Permute constructor requires `dims` to be an Array, but received ' +\n          `${args.dims} instead.`);\n    }\n\n    // Check the validity of the permutation indices.\n    const expectedSortedIndices = range(1, args.dims.length + 1);\n    if (!util.arraysEqual(args.dims.slice().sort(), expectedSortedIndices)) {\n      throw new Error(\n          'Invalid permutation `dims`: ' + JSON.stringify(args.dims) +\n          ' `dims` must contain consecutive integers starting from 1.');\n    }\n\n    this.dims = args.dims;\n    this.dimsIncludingBatch = [0].concat(this.dims);\n    this.inputSpec = [new InputSpec({ndim: this.dims.length + 1})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const outputShape = inputShape.slice();\n    this.dims.forEach((dim: number, i: number) => {\n      outputShape[i + 1] = (inputShape as Shape)[dim];\n    });\n    return outputShape;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return transpose(getExactlyOneTensor(inputs), this.dimsIncludingBatch);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      dims: this.dims,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Permute);\n\nexport declare interface MaskingArgs extends LayerArgs {\n  /**\n   * Masking Value. Defaults to `0.0`.\n   */\n  maskValue?: number;\n}\n\nexport class Masking extends Layer {\n  /** @nocollapse */\n  static className = 'Masking';\n  maskValue: number;\n\n  constructor(args?: MaskingArgs) {\n    super(args == null ? {} : args);\n    this.supportsMasking = true;\n    if (args != null) {\n      this.maskValue = args.maskValue == null ? 0 : args.maskValue;\n    } else {\n      this.maskValue = 0;\n    }\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    return inputShape;\n  }\n\n  getConfig() {\n    const baseConfig = super.getConfig();\n    const config = {maskValue: this.maskValue};\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor {\n    const input = getExactlyOneTensor(inputs);\n    const axis = -1;\n    return any(notEqual(input, this.maskValue), axis);\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      const input = getExactlyOneTensor(inputs);\n      const axis = -1;\n      const keepDims = true;\n      const booleanMask = any(notEqual(input, this.maskValue), axis, keepDims);\n      const output = input.mul(booleanMask.asType(input.dtype));\n      return output;\n    });\n  }\n}\nserialization.registerClass(Masking);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Embedding Layer.\n *\n * Original source: keras/constraints.py\n */\nimport {notEqual, serialization, Tensor, tidy, zerosLike} from '@tensorflow/tfjs-core';\n\nimport * as K from '../backend/tfjs_backend';\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {Layer, LayerArgs} from '../engine/topology';\nimport {ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\nexport declare interface EmbeddingLayerArgs extends LayerArgs {\n  /**\n   * Integer > 0. Size of the vocabulary, i.e. maximum integer index + 1.\n   */\n  inputDim: number;\n  /**\n   * Integer >= 0. Dimension of the dense embedding.\n   */\n  outputDim: number;\n  /**\n   * Initializer for the `embeddings` matrix.\n   */\n  embeddingsInitializer?: InitializerIdentifier|Initializer;\n  /**\n   * Regularizer function applied to the `embeddings` matrix.\n   */\n  embeddingsRegularizer?: RegularizerIdentifier|Regularizer;\n  /**\n   * Regularizer function applied to the activation.\n   */\n  activityRegularizer?: RegularizerIdentifier|Regularizer;\n  /**\n   * Constraint function applied to the `embeddings` matrix.\n   */\n  embeddingsConstraint?: ConstraintIdentifier|Constraint;\n  /**\n   * Whether the input value 0 is a special \"padding\" value that should be\n   * masked out. This is useful when using recurrent layers which may take\n   * variable length input.\n   *\n   * If this is `True` then all subsequent layers in the model need to support\n   * masking or an exception will be raised. If maskZero is set to `True`, as a\n   * consequence, index 0 cannot be used in the vocabulary (inputDim should\n   * equal size of vocabulary + 1).\n   */\n  maskZero?: boolean;\n  /**\n   * Length of input sequences, when it is constant.\n   *\n   * This argument is required if you are going to connect `flatten` then\n   * `dense` layers upstream (without it, the shape of the dense outputs cannot\n   * be computed).\n   */\n  inputLength?: number|number[];\n}\n\nexport class Embedding extends Layer {\n  /** @nocollapse */\n  static className = 'Embedding';\n  private inputDim: number;\n  private outputDim: number;\n  private embeddingsInitializer: Initializer;\n  private maskZero: boolean;\n  private inputLength: number|number[];\n\n  private embeddings: LayerVariable = null;\n\n  readonly DEFAULT_EMBEDDINGS_INITIALIZER: InitializerIdentifier =\n      'randomUniform';\n  private readonly embeddingsRegularizer?: Regularizer;\n  private readonly embeddingsConstraint?: Constraint;\n\n  constructor(args: EmbeddingLayerArgs) {\n    super(args);\n    if (args.batchInputShape == null && args.inputShape == null) {\n      // Porting Note: This logic is copied from Layer's constructor, since we\n      // can't do exactly what the Python constructor does for Embedding().\n      // Specifically, the super constructor can not be called after the\n      // mutation of the `config` argument.\n      let batchSize: number = null;\n      if (args.batchSize != null) {\n        batchSize = args.batchSize;\n      }\n      if (args.inputLength == null) {\n        // Fix super-constructor to what it would have done if\n        // 'config.inputShape' were (None, )\n        this.batchInputShape = [batchSize, null];\n      } else {\n        // Fix super-constructor to what it would have done if\n        // 'config.inputShape' were (config.inputLength, )\n        this.batchInputShape =\n            [batchSize].concat(generic_utils.toList(args.inputLength));\n      }\n    }\n    this.inputDim = args.inputDim;\n    generic_utils.assertPositiveInteger(this.inputDim, 'inputDim');\n    this.outputDim = args.outputDim;\n    generic_utils.assertPositiveInteger(this.outputDim, 'outputDim');\n    this.embeddingsInitializer = getInitializer(\n        args.embeddingsInitializer || this.DEFAULT_EMBEDDINGS_INITIALIZER);\n    this.embeddingsRegularizer = getRegularizer(args.embeddingsRegularizer);\n    this.activityRegularizer = getRegularizer(args.activityRegularizer);\n    this.embeddingsConstraint = getConstraint(args.embeddingsConstraint);\n    this.maskZero = args.maskZero;\n    this.supportsMasking = args.maskZero;\n    this.inputLength = args.inputLength;\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    this.embeddings = this.addWeight(\n        'embeddings', [this.inputDim, this.outputDim], this.dtype,\n        this.embeddingsInitializer, this.embeddingsRegularizer, true,\n        this.embeddingsConstraint);\n    this.built = true;\n  }\n\n  // Override warnOnIncompatibleInputShape because an embedding layer allows\n  // the input to have varying ranks.\n  protected warnOnIncompatibleInputShape(inputShape: Shape) {}\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor {\n    return tidy(() => {\n      if (!this.maskZero) {\n        return null;\n      } else {\n        inputs = getExactlyOneTensor(inputs);\n        return notEqual(inputs, zerosLike(inputs));\n      }\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    if (this.inputLength == null) {\n      return [...inputShape, this.outputDim];\n    }\n    // inputLength can be an array if input is 3D or higher.\n    const inLens: number[] = generic_utils.toList(this.inputLength);\n    if (inLens.length !== inputShape.length - 1) {\n      throw new ValueError(\n          `\"inputLength\" is ${this.inputLength}, but received ` +\n          `input shape has shape ${inputShape}`);\n    } else {\n      let i = 0;\n      for (let k = 0; k < inLens.length; ++k) {\n        const s1 = inLens[k];\n        const s2 = inputShape[k + 1];\n        if ((s1 != null) && (s2 != null) && (s1 !== s2)) {\n          throw new ValueError(\n              `\"inputLength\" is ${this.inputLength}, but received ` +\n              `input shape has shape ${inputShape}`);\n        } else if (s1 == null) {\n          inLens[i] = s2;\n        }\n        i++;\n      }\n    }\n    return [inputShape[0], ...inLens, this.outputDim];\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      // Embedding layer accepts only a single input.\n      let input = getExactlyOneTensor(inputs);\n      if (input.dtype !== 'int32') {\n        input = K.cast(input, 'int32');\n      }\n      const output = K.gather(this.embeddings.read(), input.as1D());\n      return output.reshape(\n          getExactlyOneShape(this.computeOutputShape(input.shape)));\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      inputDim: this.inputDim,\n      outputDim: this.outputDim,\n      embeddingsInitializer: serializeInitializer(this.embeddingsInitializer),\n      embeddingsRegularizer: serializeRegularizer(this.embeddingsRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      embeddingsConstraint: serializeConstraint(this.embeddingsConstraint),\n      maskZero: this.maskZero,\n      inputLength: this.inputLength\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Embedding);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Merge Layers.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, tidy, util} from '@tensorflow/tfjs-core';\nimport * as K from '../backend/tfjs_backend';\nimport {Layer, LayerArgs, SymbolicTensor} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {Shape} from '../keras_format/common';\nimport {l2Normalize} from '../losses';\nimport {Kwargs} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport * as mathUtils from '../utils/math_utils';\nimport {getExactlyOneShape} from '../utils/types_utils';\n\n/**\n * Generic Merge layer for element-wise merge functions.\n *\n * Used to implement `Sum`, `Average`, `Concatenate`, etc.\n */\nexport abstract class Merge extends Layer {\n  protected reshapeRequired: boolean;\n\n  constructor(args?: LayerArgs) {\n    super(args || {});\n    this.supportsMasking = true;\n  }\n\n  /**\n   * Logic for merging multiple tensors, to be overridden by subclasses.\n   * @param inputs\n   */\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    throw new NotImplementedError();\n  }\n\n  /**\n   * Computes the shape of the result of an elementwise operation.\n   *\n   * @param shape1: Shape of the first tensor.\n   * @param shape2: Shape of the second tensor.\n   * @returns Expected output shape when an elementwise operation is carried\n   *   out on 2 tensors with shapes `shape1` and `shape2`.\n   * @throws ValueError: If `shape1` and `shape2` are not compatible for\n   *   element-wise operations.\n   */\n  private computeElementwiseOpOutputShape(shape1: Shape, shape2: Shape): Shape {\n    if (shape1 == null || shape2 == null) {\n      return null;\n    } else if (shape1.length < shape2.length) {\n      return this.computeElementwiseOpOutputShape(shape2, shape1);\n    } else if (shape2.length === 0) {\n      return shape1;\n    }\n    const outputShape: Shape = shape1.slice(0, shape1.length - shape2.length);\n    for (let k = 0; k < shape2.length; ++k) {\n      const i = shape1[shape1.length - shape2.length + k];\n      const j = shape2[k];\n      if (i == null || j == null || i < 0 || j < 0) {\n        outputShape.push(null);\n      } else if (i === 1) {\n        outputShape.push(j);\n      } else if (j === 1) {\n        outputShape.push(i);\n      } else {\n        if (i !== j) {\n          throw new ValueError(\n              'Operands could not be broadcast together with shapes ' +\n              JSON.stringify(shape1) + ' ' + JSON.stringify(shape2));\n        }\n        outputShape.push(i);\n      }\n    }\n    return outputShape;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    // Used purely for shape validation.\n    if (Array.isArray(inputShape) && !Array.isArray(inputShape[0])) {\n      // Make sure that inputShape is an Array of shape.\n      inputShape = [getExactlyOneShape(inputShape)];\n    }\n    inputShape = inputShape as Shape[];\n    if (inputShape.length < 2) {\n      throw new ValueError(\n          'A merge layer should be called on an Array of at least 2 inputs.' +\n          ` Got ${inputShape.length} input(s).`);\n    }\n\n    // Make sure that there is at most one unique batch size among the input\n    // shapes.\n    let batchSizes: number[] = [];\n    for (const shape of inputShape) {\n      if (shape != null && shape[0] !== null) {\n        batchSizes.push(shape[0]);\n      }\n    }\n    batchSizes = generic_utils.unique(batchSizes);\n    if (batchSizes.length > 1) {\n      throw new ValueError(\n          `Can not merge tensors with different batch sizes. ` +\n          `Got tensors with shapes: ${JSON.stringify(inputShape)}.`);\n    }\n\n    let outputShape: Shape =\n        inputShape[0] == null ? null : inputShape[0].slice(1);\n    for (let i = 1; i < inputShape.length; ++i) {\n      const shape = inputShape[i] == null ? null : inputShape[i].slice(1);\n      outputShape = this.computeElementwiseOpOutputShape(outputShape, shape);\n    }\n    // If the inputs have different ranks, we have to reshape them to make them\n    // broadcastable.\n    const allRanks = inputShape.map(shape => shape.length);\n    if (inputShape.indexOf(null) === -1 &&\n        generic_utils.unique(allRanks).length === 1) {\n      this.reshapeRequired = false;\n    } else {\n      this.reshapeRequired = true;\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = inputs as Tensor[];\n      if (this.reshapeRequired) {\n        const reshapedInputs: Tensor[] = [];\n        const inputDims = inputs.map(input => input.rank);\n        if (inputDims.indexOf(null) === -1) {\n          // If ranks of all inputs are available, we simply expand each of them\n          // at axis=1 until all of them have the same rank.\n          const maxNDim = mathUtils.max(inputDims);\n          for (let x of inputs) {\n            const xNDim = x.rank;\n            for (let k = 0; k < maxNDim - xNDim; ++k) {\n              x = K.expandDims(x, 1);\n            }\n            reshapedInputs.push(x);\n          }\n          return this.mergeFunction(reshapedInputs);\n        } else {\n          // Transpose all inputs so that batch size is the last dimension.\n          // [batchSize, dim1, dim2, ...] -> [dim1, dim2, ..., batchSize]\n          let transposed = false;\n          for (const x of inputs) {\n            const xNDim = x.rank;\n            if (xNDim == null) {\n              const xShape = x.shape;\n              const batchSize = xShape[0];\n              const newShape = xShape.slice(1).concat([batchSize]);\n              let xTransposed = x.reshape(\n                  [batchSize].concat(mathUtils.arrayProd(xShape.slice(1))));\n              xTransposed = tfc.transpose(xTransposed, [1, 0]);\n              xTransposed = xTransposed.reshape(newShape);\n              reshapedInputs.push(xTransposed);\n              transposed = true;\n            } else if (xNDim > 1) {\n              const dims = mathUtils.range(1, xNDim).concat([0]);\n              reshapedInputs.push(tfc.transpose(x, dims));\n              transposed = true;\n            } else {\n              // We don't transpose inputs if they are 1D vectors or scalars.\n              reshapedInputs.push(x);\n            }\n          }\n          let y = this.mergeFunction(reshapedInputs);\n          const yNDim = y.rank;\n          if (transposed) {\n            // If inputs have been transposed, we have to transpose the output\n            // too.\n            if (yNDim == null) {\n              const yShape = y.shape;\n              const yNDim = yShape.length;\n              const batchSize = yShape[yNDim - 1];\n              const newShape =\n                  [batchSize].concat(yShape.slice(0, yShape.length - 1));\n              y = tfc.transpose(y.reshape([-1, batchSize]), [1, 0])\n                      .reshape(newShape);\n            } else if (yNDim > 1) {\n              const dims = [yNDim - 1].concat(mathUtils.range(0, yNDim - 1));\n              y = tfc.transpose(y, dims);\n            }\n          }\n          return y;\n        }\n      } else {\n        return this.mergeFunction(inputs);\n      }\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = inputShape as Shape[];\n    let outputShape: Shape;\n    if (inputShape[0] == null) {\n      outputShape = null;\n    } else {\n      outputShape = inputShape[0].slice(1);\n    }\n    for (let i = 1; i < inputShape.length; ++i) {\n      const shape = inputShape[i] == null ? null : inputShape[i].slice(1);\n      outputShape = this.computeElementwiseOpOutputShape(outputShape, shape);\n    }\n\n    let batchSizes: number[] = [];\n    for (const shape of inputShape) {\n      if (shape != null && shape[0] !== null) {\n        batchSizes.push(shape[0]);\n      }\n    }\n    batchSizes = generic_utils.unique(batchSizes);\n    if (batchSizes.length === 1) {\n      outputShape = batchSizes.concat(outputShape);\n    } else {\n      outputShape = [null].concat(outputShape);\n    }\n    return outputShape;\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor {\n    return tfc.tidy(() => {\n      if (mask == null) {\n        return null;\n      }\n      if (!Array.isArray(mask)) {\n        throw new ValueError('`mask` should be an Array');\n      }\n      if (!Array.isArray(inputs)) {\n        throw new ValueError('`inputs` should be an Array');\n      }\n      if (mask.length !== inputs.length) {\n        throw new ValueError(\n            `The Array 'inputs' and 'mask' are expected to have the same ` +\n            `length, but have different lengths ` +\n            `(${inputs.length} vs ${mask.length})`);\n      }\n      if (mask.every(m => m == null)) {\n        return null;\n      }\n      mask = mask.map(m => m == null ? m : tfc.expandDims(m, 0));\n      let output = mask[0];\n      for (let i = 1; i < mask.length - 1; ++i) {\n        output = tfc.logicalAnd(output, mask[i]);\n      }\n      return output;\n    });\n  }\n}\n\nexport class Add extends Merge {\n  /** @nocollapse */\n  static className = 'Add';\n  constructor(args?: LayerArgs) {\n    super(args);\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      let output = inputs[0].clone();\n      for (let i = 1; i < inputs.length; ++i) {\n        output = tfc.add(output, inputs[i]);\n      }\n      return output;\n    });\n  }\n}\nserialization.registerClass(Add);\n\n/**\n * Calculate the element-wise sum of inputs, which all have the same shape.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Add` layer, by using no input argument\n *    or a single configuration argument. The resultant `Add` layer can then\n *    be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const addLayer = tf.layers.add();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = addLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = tf.layers.add([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const input2 = tf.tensor2d([10, 20, 30, 40], [2, 2]);\n * tf.layers.add([input1, input2]).print();\n * // Gives [[11, 22], [33, 44]].\n *\n */\nexport function add(config?: SymbolicTensor[]|Tensor[]|LayerArgs): Layer|\n    SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Add({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Add(config);\n  }\n}\n\nexport class Multiply extends Merge {\n  /** @nocollapse */\n  static className = 'Multiply';\n  constructor(args?: LayerArgs) {\n    super(args);\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      let output = inputs[0].clone();\n      for (let i = 1; i < inputs.length; ++i) {\n        output = tfc.mul(output, inputs[i]);\n      }\n      return output;\n    });\n  }\n}\nserialization.registerClass(Multiply);\n\n/**\n * Calculate the element-wise product of inputs, which all have the same shape.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Multiply` layer, by using no input argument\n *    or a single configuration argument. The resultant `Multiply` layer can\n *    then be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const multiplyLayer = tf.layers.multiply();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = multiplyLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = tf.layers.multiply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const input2 = tf.tensor2d([10, 20, 30, 40], [2, 2]);\n * tf.layers.multiply([input1, input2]).print();\n * // Gives [[10, 40], [90, 160]].\n *\n */\nexport function multiply(config?: SymbolicTensor[]|Tensor[]|LayerArgs): Layer|\n    SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Multiply({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Multiply(config);\n  }\n}\n\nexport class Average extends Merge {\n  /** @nocollapse */\n  static className = 'Average';\n  constructor(args?: LayerArgs) {\n    super(args);\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      let output = inputs[0].clone();\n      for (let i = 1; i < inputs.length; ++i) {\n        output = tfc.add(output, inputs[i]);\n      }\n      return tfc.mul(1 / inputs.length, output);\n    });\n  }\n}\nserialization.registerClass(Average);\n\n/**\n * Calculate the element-wise arithmetic mean of inputs, which all have the same\n * shape.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Average` layer, by using no input argument\n *    or a single configuration argument. The resultant `Average` layer can then\n *    be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const averageLayer = tf.layers.average();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = averageLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = tf.layers.average([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const input2 = tf.tensor2d([10, 20, 30, 40], [2, 2]);\n * tf.layers.average([input1, input2]).print();\n * // Gives [[5.5, 11], [16.5, 22]].\n *\n */\nexport function average(config?: SymbolicTensor[]|Tensor[]|LayerArgs): Layer|\n    SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Average({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Average(config);\n  }\n}\n\nexport class Maximum extends Merge {\n  /** @nocollapse */\n  static className = 'Maximum';\n  constructor(args?: LayerArgs) {\n    super(args);\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      let output = inputs[0];\n      for (let i = 1; i < inputs.length; ++i) {\n        output = tfc.maximum(output, inputs[i]);\n      }\n      return output;\n    });\n  }\n}\nserialization.registerClass(Maximum);\n\n/**\n * Calculate the element-wise maximum of inputs, which all have the same shape.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Maximum` layer, by using no input argument\n *    or a single configuration argument. The resultant `Maximum` layer can then\n *    be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const maximumLayer = tf.layers.maximum();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = maximumLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = tf.layers.maximum([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([1, 20, 3, 40], [2, 2]);\n * const input2 = tf.tensor2d([10, 2, 30, 4], [2, 2]);\n * tf.layers.maximum([input1, input2]).print();\n * // Gives [[10, 20], [30, 40]].\n *\n */\nexport function maximum(config?: SymbolicTensor[]|Tensor[]|LayerArgs): Layer|\n    SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Maximum({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Maximum(config);\n  }\n}\n\nexport class Minimum extends Merge {\n  /** @nocollapse */\n  static className = 'Minimum';\n  constructor(args?: LayerArgs) {\n    super(args);\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      let output = inputs[0];\n      for (let i = 1; i < inputs.length; ++i) {\n        output = tfc.minimum(output, inputs[i]);\n      }\n      return output;\n    });\n  }\n}\nserialization.registerClass(Minimum);\n\n/**\n * Calculate the element-wise minimum of inputs, which all have the same shape.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Minimum` layer, by using no input argument\n *    or a single configuration argument. The resultant `Minimum` layer can then\n *    be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const minimumLayer = tf.layers.minimum();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = minimumLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const output = tf.layers.minimum([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([1, 20, 3, 40], [2, 2]);\n * const input2 = tf.tensor2d([10, 2, 30, 4], [2, 2]);\n * tf.layers.minimum([input1, input2]).print();\n * // Gives [[1, 2], [3, 4]].\n *\n */\nexport function minimum(config?: SymbolicTensor[]|Tensor[]|LayerArgs): Layer|\n    SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Minimum({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Minimum(config);\n  }\n}\n\nexport declare interface ConcatenateLayerArgs extends LayerArgs {\n  /**\n   * Axis along which to concatenate.\n   */\n  axis?: number;\n}\n\nexport class Concatenate extends Merge {\n  /** @nocollapse */\n  static className = 'Concatenate';\n  readonly DEFAULT_AXIS = -1;\n  private readonly axis: number;\n\n  constructor(args?: ConcatenateLayerArgs) {\n    super(args);\n    if (args == null) {\n      args = {};\n    }\n    this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis;\n    this.supportsMasking = true;\n    this.reshapeRequired = false;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    // Used purely for shape validation.]\n    if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0])) ||\n        inputShape.length === 1) {\n      throw new ValueError(\n          'A `Concatenate` layer should be called on a list of at least 2 ' +\n          'inputs');\n    }\n    inputShape = inputShape as Shape[];\n\n    let allNoneShape = true;\n    for (const shape of inputShape) {\n      if (shape != null) {\n        allNoneShape = false;\n        break;\n      }\n    }\n    if (allNoneShape) {\n      return;\n    }\n\n    const shapeSet: Shape[] = [];\n    for (let i = 0; i < inputShape.length; ++i) {\n      const shapeWithoutConcatAxis = inputShape[i].slice();\n      shapeWithoutConcatAxis.splice(this.axis, 1);\n      let exists = false;\n      for (const shape of shapeSet) {\n        if (util.arraysEqual(shape, shapeWithoutConcatAxis)) {\n          exists = true;\n          break;\n        }\n      }\n      if (!exists) {\n        shapeSet.push(shapeWithoutConcatAxis);\n      }\n    }\n    if (shapeSet.length > 1) {\n      throw new ValueError(\n          'A `Concatenate` layer requires inputs with matching shapes ' +\n          'except for the concat axis. Got input shapes: ' +\n          JSON.stringify(inputShape));\n    }\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    return tidy(() => {\n      return K.concatenate(inputs, this.axis);\n    });\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0]))) {\n      throw new ValueError(\n          'A `Concatenate` layer should be called on a list of inputs.');\n    }\n    const inputShapes = inputShape as Shape[];\n    const outputShape = inputShapes[0].slice();\n    const axis = this.axis < 0 ? outputShape.length + this.axis : this.axis;\n    // Porting Note: the line above is because TypeScript doesn't support\n    //   negative indices.\n    for (const shape of inputShapes.slice(1)) {\n      if (outputShape[axis] == null || shape[axis] == null) {\n        outputShape[axis] = null;\n        break;\n      }\n      outputShape[axis] += shape[axis];\n    }\n    return outputShape;\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor {\n    if (mask == null) {\n      return null;\n    }\n    if (!Array.isArray(mask)) {\n      throw new ValueError('`mask` should be an array for Concatenate');\n    }\n    if (!Array.isArray(inputs)) {\n      throw new ValueError('`inputs` should be an array for Concatenate');\n    }\n    if (mask.length !== inputs.length) {\n      throw new ValueError(\n          `Mismatch in the length of mask (${mask.length}) ` +\n          `and the legnth of inputs (${inputs.length})`);\n    }\n    return tfc.tidy(() => {\n      let allNullMasks = true;\n      mask.forEach(m => {\n        if (m != null) {\n          allNullMasks = false;\n          return;\n        }\n      });\n      if (allNullMasks) {\n        return null;\n      }\n      const outputMasks: Tensor[] = [];\n      for (let i = 0; i < inputs.length; ++i) {\n        if (mask[i] == null) {\n          // Input is unmasked. Append all 1's to masks.\n          outputMasks.push(tfc.onesLike(inputs[i]).asType('bool'));\n        } else if (mask[i].rank < inputs[i].rank) {\n          // Mask is smaller than the input, expand it.\n          outputMasks.push(tfc.expandDims(mask[i], -1));\n        } else {\n          outputMasks.push(mask[i]);\n        }\n      }\n      const concatenatedMasks = tfc.concat(outputMasks, this.axis);\n      return tfc.all(concatenatedMasks, -1, false);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      'axis': this.axis,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Concatenate);\n\n/**\n * Concatenate an `Array` of inputs.\n *\n * This function can be invoked in three ways.\n *\n * 1. Construct an instance of `Concatenate` layer, by using no input argument\n *    or a single configuration argument. The resultant `Concatenate` layer can\n *    then be used on `tf.SymbolicTensor`s or `tf.Tensor`s. For example:\n *\n * ```js\n * const concatLayer = tf.layers.concatenate();\n *\n * // The layer can be applied to inputs.\n * const input1 = tf.input({shape: [2, 3]});\n * const input2 = tf.input({shape: [2, 4]});\n * const output = concatLayer.apply([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 7], with the first dimension as the undetermined batch\n * // dimension and the last dimension as the result of concatenating the\n * // last dimensions of the two inputs.\n * ```\n *\n * 2. Invoke directly on an `Array` of `tf.SymbolicTensor`s. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.SymbolicTensor`. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 3]});\n * const input2 = tf.input({shape: [2, 4]});\n * const output = tf.layers.concatenate([input1, input2]);\n * console.log(output.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension and the last dimension as the result of concatenating the\n * // last dimensions of the two inputs.\n * ```\n *\n * 3. Invoke directly on `tf.Tensor`s, i.e., concrete values. This constructs\n *    an `Layer` object internally and calls its `apply` method on the inputs,\n *    generating a new `tf.Tensor` as the result of the computation. For\n * example:\n *\n * ```js\n * const input1 = tf.tensor2d([[1, 2], [3, 4]], [2, 2]);\n * const input2 = tf.tensor2d([[10, 20], [30, 40]], [2, 2]);\n * tf.layers.concatenate([input1, input2]).print();\n * // Gives [[1, 2, 10, 20], [3, 4, 30, 40]].\n *\n */\nexport function concatenate(config?: SymbolicTensor[]|Tensor[]|\n                            ConcatenateLayerArgs): Layer|SymbolicTensor|Tensor {\n  if (Array.isArray(config)) {\n    const layer = new Concatenate({});\n    return layer.apply(config) as SymbolicTensor | Tensor;\n  } else {\n    return new Concatenate(config);\n  }\n}\n\nexport declare interface DotLayerArgs extends LayerArgs {\n  /**\n   * Axis or axes along which the dot product will be taken.\n   *\n   * Integer or an Array of integers.\n   */\n  axes: number|[number, number];\n\n  /**\n   * Whether to L2-normalize samples along the dot product axis\n   * before taking the dot product.\n   *\n   * If set to `true`, the output of the dot product isthe cosine\n   * proximity between the two samples.\n   */\n  normalize?: boolean;\n}\n\n/**\n * Interpretable potentially negative axis index.\n *\n * For example, given axis = -1, and dim = 3, this function will return 2.\n *\n * @param axis The axis index, may be a positive, zero or negative integer.\n * @param dim Total number of dimensions, a positive integer.\n * @returns A non-negative axis index equivalent to the input `axis`.\n */\nfunction interpretAxis(axis: number, dim: number): number {\n  while (axis < 0) {\n    axis += dim;\n  }\n  return axis;\n}\n\nfunction batchDot(x: Tensor, y: Tensor, axes: number|[number, number]): Tensor {\n  if (x.shape.length > 3 || y.shape.length > 3) {\n    throw new NotImplementedError(\n        'batchDot is not implemented for tensors of 4D or higher rank yet');\n  }\n  tfc.util.assert(\n      x.shape.length >= 2,\n      () => `batchDot requires the rank of x to be >= 2, ` +\n          `but got ${x.shape.length}`);\n  tfc.util.assert(\n      x.shape.length >= 2,\n      () => `batchDot requires the rank of y to be >= 2, ` +\n          `but got ${y.shape.length}`);\n\n  if (typeof axes === 'number') {\n    axes = [axes, axes];\n  }\n\n  if (x.dtype === 'complex64' || y.dtype === 'complex64') {\n    throw new NotImplementedError(\n        'batchDot is not implemented for complex64-type Tensors yet.');\n  }\n\n  const xNDim = x.shape.length;\n  const yNDim = y.shape.length;\n  if (axes == null) {\n    // Behave like batchMatmul by default.\n    axes = [xNDim - 1, yNDim - 2];\n  }\n  const axesArray = axes as [number, number];\n\n  return tfc.tidy(() => {\n    let diff: number;\n    if (xNDim > yNDim) {\n      diff = xNDim - yNDim;\n      const diffShape: Shape = [];\n      for (let i = 0; i < diff; ++i) {\n        diffShape.push(1);\n      }\n      y = y.reshape(y.shape.concat(diffShape));\n    } else if (yNDim > xNDim) {\n      diff = yNDim - xNDim;\n      const diffShape: Shape = [];\n      for (let i = 0; i < diff; ++i) {\n        diffShape.push(1);\n      }\n      x = x.reshape(x.shape.concat(diffShape));\n    } else {\n      diff = 0;\n    }\n\n    let out: Tensor;\n    if (x.shape.length === 2 && y.shape.length === 2) {\n      if (axesArray[0] === axesArray[1]) {\n        out = x.mulStrict(y).sum(axesArray[0]);\n      } else {\n        out = x.transpose([1, 0]).mulStrict(y).sum(axesArray[1]);\n      }\n    } else {\n      const adjX = axesArray[0] !== x.shape.length - 1;\n      const adjY = axesArray[1] === y.shape.length - 1;\n      out = x.matMul(y, adjX, adjY);\n    }\n\n    if (diff > 0) {\n      let idx: number;\n      if (xNDim > yNDim) {\n        idx = xNDim + yNDim - 3;\n      } else {\n        idx = xNDim - 1;\n      }\n      const squeezeAxes: number[] = [];\n      for (let i = idx; i < idx + diff; ++i) {\n        squeezeAxes.push(i);\n      }\n      out = out.squeeze(squeezeAxes);\n    }\n    if (out.shape.length === 1) {\n      out = out.expandDims(1);\n    }\n    return out;\n  });\n}\n\nexport class Dot extends Merge {\n  /** @nocollapse */\n  static className = 'Dot';\n\n  private axes: number|[number, number];\n  private normalize: boolean;\n\n  constructor(args: DotLayerArgs) {\n    super(args);\n    this.axes = args.axes;\n    this.normalize = args.normalize == null ? false : args.normalize;\n    this.supportsMasking = true;\n    this.reshapeRequired = false;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    tfc.util.assert(\n        Array.isArray(inputShape) && inputShape.length === 2 &&\n            Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]),\n        () => 'A `Dot` layer should be called on a list of exactly 2 inputs.');\n    const shape1 = inputShape[0] as Shape;\n    const shape2 = inputShape[1] as Shape;\n    if (shape1.length > 3 || shape2.length > 3) {\n      throw new NotImplementedError(\n          'Dot layer does not support tensors of 4D or higher rank yet.');\n    }\n\n    const axes = this.interpretAxes(shape1, shape2);\n    if (shape1[axes[0]] !== shape2[axes[1]]) {\n      throw new ValueError(\n          `Dimension incompatibility: ` +\n          `${shape1[axes[0]]} !== ${shape2[axes[1]]}`);\n    }\n  }\n\n  protected mergeFunction(inputs: Tensor[]): Tensor {\n    if (inputs.length !== 2) {\n      throw new ValueError(\n          'A `Dot` layer must be called on exactly 2 inputs, ' +\n          `but received ${inputs.length} input(s).`);\n    }\n\n    let x1 = inputs[0];\n    let x2 = inputs[1];\n    let axes: [number, number];\n    if (!Array.isArray(this.axes)) {\n      axes = [\n        interpretAxis(this.axes, x1.shape.length),\n        interpretAxis(this.axes, x2.shape.length)\n      ];\n    } else {\n      axes = this.axes.map(\n                 (axis, i) => interpretAxis(\n                     axis, inputs[i].shape.length)) as [number, number];\n    }\n    if (this.normalize) {\n      x1 = l2Normalize(x1, axes[0]);\n      x2 = l2Normalize(x2, axes[1]);\n    }\n    return batchDot(x1, x2, axes);\n  }\n\n  private interpretAxes(shape1: Shape, shape2: Shape): number[] {\n    let axes: number[];\n    if (!Array.isArray(this.axes)) {\n      // `this.axes` is a single integer.\n      axes = [\n        interpretAxis(this.axes, shape1.length),\n        interpretAxis(this.axes, shape2.length)\n      ];\n    } else {\n      // `this.axes` is an Array of integers.\n      axes = this.axes;\n    }\n    return axes;\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    tfc.util.assert(\n        Array.isArray(inputShape) && inputShape.length === 2 &&\n            Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]),\n        () => 'A `Dot` layer should be called on a list of exactly 2 inputs.');\n    const shape1 = (inputShape[0] as Shape).slice();\n    const shape2 = (inputShape[1] as Shape).slice();\n    if (shape1.length > 3 || shape2.length > 3) {\n      throw new NotImplementedError(\n          'Dot layer does not support tensors of 4D or higher rank yet.');\n    }\n\n    const axes = this.interpretAxes(shape1, shape2);\n    shape1.splice(axes[0], 1);\n    shape2.splice(axes[1], 1);\n    shape2.splice(0, 1);\n    const outputShape = shape1.concat(shape2);\n    if (outputShape.length === 1) {\n      outputShape.push(1);\n    }\n    return outputShape;\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor {\n    return null;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      'axes': this.axes,\n      'normalize': this.normalize\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(Dot);\n\n// TODO(cais): Add functional interfaces for the merge layers.\n","/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Use of this source code is governed by an MIT-style\r\n * license that can be found in the LICENSE file or at\r\n * https://opensource.org/licenses/MIT.\r\n * =============================================================================\r\n */\r\n\r\n/**\r\n * TensorFlow.js Layers: Noise Layers.\r\n */\r\n\r\nimport {greaterEqual, randomUniform, serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\r\n\r\nimport * as K from '../backend/tfjs_backend';\r\nimport {Layer, LayerArgs} from '../engine/topology';\r\nimport {Shape} from '../keras_format/common';\r\nimport {Kwargs} from '../types';\r\nimport {getExactlyOneTensor} from '../utils/types_utils';\r\n\r\nexport declare interface GaussianNoiseArgs extends LayerArgs {\r\n  /** Standard Deviation.  */\r\n  stddev: number;\r\n}\r\n\r\nexport class GaussianNoise extends Layer {\r\n  /** @nocollapse */\r\n  static className = 'GaussianNoise';\r\n  readonly stddev: number;\r\n\r\n  constructor(args: GaussianNoiseArgs) {\r\n    super(args);\r\n    this.supportsMasking = true;\r\n    this.stddev = args.stddev;\r\n  }\r\n\r\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\r\n    return inputShape;\r\n  }\r\n\r\n  getConfig() {\r\n    const baseConfig = super.getConfig();\r\n    const config = {stddev: this.stddev};\r\n    Object.assign(config, baseConfig);\r\n    return config;\r\n  }\r\n\r\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\r\n    return tidy(() => {\r\n      this.invokeCallHook(inputs, kwargs);\r\n      const input = getExactlyOneTensor(inputs);\r\n      const noised = () =>\r\n          K.randomNormal(input.shape, 0, this.stddev).add(input);\r\n      const output =\r\n          K.inTrainPhase(noised, () => input, kwargs['training'] || false);\r\n      return output;\r\n    });\r\n  }\r\n}\r\nserialization.registerClass(GaussianNoise);\r\n\r\nexport declare interface GaussianDropoutArgs extends LayerArgs {\r\n  /** drop probability.  */\r\n  rate: number;\r\n}\r\n\r\nexport class GaussianDropout extends Layer {\r\n  /** @nocollapse */\r\n  static className = 'GaussianDropout';\r\n  readonly rate: number;\r\n\r\n  constructor(args: GaussianDropoutArgs) {\r\n    super(args);\r\n    this.supportsMasking = true;\r\n    this.rate = args.rate;\r\n  }\r\n\r\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\r\n    return inputShape;\r\n  }\r\n\r\n  getConfig() {\r\n    const baseConfig = super.getConfig();\r\n    const config = {rate: this.rate};\r\n    Object.assign(config, baseConfig);\r\n    return config;\r\n  }\r\n\r\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\r\n    return tidy(() => {\r\n      this.invokeCallHook(inputs, kwargs);\r\n      const input = getExactlyOneTensor(inputs);\r\n      if (this.rate > 0 && this.rate < 1) {\r\n        const noised = () => {\r\n          const stddev = Math.sqrt(this.rate / (1 - this.rate));\r\n          return input.mul(K.randomNormal(input.shape, 1, stddev));\r\n        };\r\n        return K.inTrainPhase(noised, () => input, kwargs['training'] || false);\r\n      }\r\n      return input;\r\n    });\r\n  }\r\n}\r\nserialization.registerClass(GaussianDropout);\r\n\r\nexport declare interface AlphaDropoutArgs extends LayerArgs {\r\n  /** drop probability.  */\r\n  rate: number;\r\n  /**\r\n   * A 1-D `Tensor` of type `int32`, representing the\r\n   * shape for randomly generated keep/drop flags.\r\n   */\r\n  noiseShape?: Shape;\r\n}\r\n\r\n/**\r\n * Applies Alpha Dropout to the input.\r\n *\r\n * As it is a regularization layer, it is only active at training time.\r\n *\r\n * Alpha Dropout is a `Dropout` that keeps mean and variance of inputs\r\n * to their original values, in order to ensure the self-normalizing property\r\n * even after this dropout.\r\n * Alpha Dropout fits well to Scaled Exponential Linear Units\r\n * by randomly setting activations to the negative saturation value.\r\n *\r\n * Arguments:\r\n *   - `rate`: float, drop probability (as with `Dropout`).\r\n *     The multiplicative noise will have\r\n *     standard deviation `sqrt(rate / (1 - rate))`.\r\n *   - `noise_shape`: A 1-D `Tensor` of type `int32`, representing the\r\n *     shape for randomly generated keep/drop flags.\r\n *\r\n * Input shape:\r\n *   Arbitrary. Use the keyword argument `inputShape`\r\n *   (tuple of integers, does not include the samples axis)\r\n *   when using this layer as the first layer in a model.\r\n *\r\n * Output shape:\r\n *   Same shape as input.\r\n *\r\n * References:\r\n *   - [Self-Normalizing Neural Networks](https://arxiv.org/abs/1706.02515)\r\n */\r\nexport class AlphaDropout extends Layer {\r\n  /** @nocollapse */\r\n  static className = 'AlphaDropout';\r\n  readonly rate: number;\r\n  readonly noiseShape: Shape;\r\n\r\n  constructor(args: AlphaDropoutArgs) {\r\n    super(args);\r\n    this.supportsMasking = true;\r\n    this.rate = args.rate;\r\n    this.noiseShape = args.noiseShape;\r\n  }\r\n\r\n  _getNoiseShape(inputs: Tensor|Tensor[]) {\r\n    return this.noiseShape || getExactlyOneTensor(inputs).shape;\r\n  }\r\n\r\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\r\n    return inputShape;\r\n  }\r\n\r\n  getConfig() {\r\n    const baseConfig = super.getConfig();\r\n    const config = {rate: this.rate};\r\n    Object.assign(config, baseConfig);\r\n    return config;\r\n  }\r\n\r\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\r\n    return tidy(() => {\r\n      if (this.rate < 1 && this.rate > 0) {\r\n        const noiseShape = this._getNoiseShape(inputs);\r\n\r\n        const droppedInputs = () => {\r\n          const input = getExactlyOneTensor(inputs);\r\n\r\n          const alpha = 1.6732632423543772848170429916717;\r\n          const scale = 1.0507009873554804934193349852946;\r\n\r\n          const alphaP = -alpha * scale;\r\n\r\n          let keptIdx = greaterEqual(randomUniform(noiseShape), this.rate);\r\n\r\n          keptIdx = K.cast(keptIdx, 'float32');  // get default dtype.\r\n\r\n          // Get affine transformation params.\r\n          const a = ((1 - this.rate) * (1 + this.rate * alphaP ** 2)) ** -0.5;\r\n          const b = -a * alphaP * this.rate;\r\n\r\n          // Apply mask.\r\n          const x = input.mul(keptIdx).add(keptIdx.add(-1).mul(alphaP));\r\n\r\n          return x.mul(a).add(b);\r\n        };\r\n        return K.inTrainPhase(\r\n            droppedInputs, () => getExactlyOneTensor(inputs),\r\n            kwargs['training'] || false);\r\n      }\r\n      return inputs;\r\n    });\r\n  }\r\n}\r\nserialization.registerClass(AlphaDropout);\r\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Normalization layers.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {moments, serialization, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {InputSpec, Layer, LayerArgs} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, serializeInitializer} from '../initializers';\nimport {Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport * as math_utils from '../utils/math_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\n/**\n * Applies batch normalization on x given mean, var, beta and gamma.\n *\n * I.e. returns:\n *   `output = (x - mean) / (sqrt(var) + epsilon) * gamma + beta`\n *\n * @param x Input tensor.\n * @param mean Mean of batch.\n * @param variance Variance of batch.\n * @param beta Tensor with which to center the input.\n * @param gamma Tensor by which to scale the input.\n * @param epsilon Fuzz factor.\n * @returns The result of the batch normalization.\n */\nexport function batchNormalization(\n    x: Tensor, mean: Tensor, variance: Tensor, beta?: Tensor, gamma?: Tensor,\n    epsilon = 1e-3): Tensor {\n  let out: Tensor;\n  if (x.rank === 2) {\n    out = tfc.batchNorm2d(\n        x as Tensor2D, mean as Tensor2D | Tensor1D,\n        variance as Tensor2D | Tensor1D, beta as Tensor2D | Tensor1D,\n        gamma as Tensor2D | Tensor1D, epsilon);\n  } else if (x.rank === 3) {\n    // TODO(cais): Check rank; give proper error message.\n    out = tfc.batchNorm3d(\n        x as Tensor3D, mean as Tensor3D | Tensor1D,\n        variance as Tensor3D | Tensor1D, beta as Tensor3D | Tensor1D,\n        gamma as Tensor3D | Tensor1D, epsilon);\n  } else if (x.rank === 4) {\n    out = tfc.batchNorm4d(\n        x as Tensor4D, mean as Tensor4D | Tensor1D,\n        variance as Tensor4D | Tensor1D, beta as Tensor4D | Tensor1D,\n        gamma as Tensor4D | Tensor1D, epsilon);\n  } else {\n    throw new NotImplementedError(\n        `batchNormalization is not implemented for array of rank ${x.rank} ` +\n        `yet`);\n  }\n  return out;\n}\n\n/**\n * Non-broadcasting batch normalization for use in training (not inference).\n *\n * The input is normalized to zero mean and unit variance along the\n * `reductionAxes`, followed by scaling with `gamma` and shifted by `beta`.\n * The result of that is returned as the first element\n * of the returned `Array`. The other two elements are the mean and variance,\n * respectively.\n *\n * @param x Input tensor to be normalized.\n * @param gamma Tensor by which to scale the input.\n * @param beta Tensor by which to center the input.\n * @param reductionAxes Axes over which to normalize.\n * @param epsilon Fuzz factor.\n * @returns An `Array` of three `Tensors`:\n *   [normalized tensor, mean of input, variance of input].\n */\nfunction regularNormalizeBatchInTraining(\n    x: Tensor, gamma: Tensor, beta: Tensor, reductionAxes: number[],\n    epsilon = 1e-3): [Tensor, Tensor, Tensor] {\n  return tidy(() => {\n           const meanAndVariance = tfc.moments(x, reductionAxes);\n           const mean = meanAndVariance.mean;\n           const variance = meanAndVariance.variance;\n           const normed =\n               batchNormalization(x, mean, variance, beta, gamma, epsilon);\n           return [normed, mean, variance];\n         }) as [Tensor, Tensor, Tensor];\n}\n\n/**\n * Broadcasting batch normalization for use in training (not inference).\n *\n * The input is normalized to zero mean and unit variance along the\n * `reductionAxes`, followed by scaling with `gamma` and shifted by `beta`.\n * The result of that is returned as the first element\n * of the returned `Array`. The other two elements are the mean and variance,\n * respectively.\n *\n * @param x Input tensor to be normalized.\n * @param gamma Tensor by which to scale the input.\n * @param beta Tensor by which to center the input.\n * @param reductionAxes Axes over which to normalize.\n * @param epsilon Fuzz factor.\n * @returns An `Array` of three `Tensors`:\n *   [normalized tensor, mean of input, variance of input].\n */\nfunction broadcastNormalizeBatchInTraining(\n    x: Tensor, gamma: Tensor, beta: Tensor, reductionAxes: number[],\n    epsilon = 1e-3): [Tensor, Tensor, Tensor] {\n  return tidy(() => {\n           const meanAndVariance = tfc.moments(x, reductionAxes);\n           const mean = meanAndVariance.mean;\n           const variance = meanAndVariance.variance;\n           const targetShape: number[] = [];\n           for (const axis of math_utils.range(0, x.rank)) {\n             if (reductionAxes.indexOf(axis) !== -1) {\n               targetShape.push(1);\n             } else {\n               targetShape.push(x.shape[axis]);\n             }\n           }\n           const broadcastMean = mean.reshape(targetShape);\n           const broadcastVariance = variance.reshape(targetShape);\n           const broadcastGamma =\n               gamma == null ? null : gamma.reshape(targetShape);\n           const broadcastBeta =\n               beta == null ? null : beta.reshape(targetShape);\n           const normed = batchNormalization(\n               x, broadcastMean, broadcastVariance, broadcastBeta,\n               broadcastGamma, epsilon);\n           return [normed, mean, variance];\n         }) as [Tensor, Tensor, Tensor];\n}\n\n/**\n * Batch normalization for use in training (not inference).\n *\n * @param x Input tensor to be normalized.\n * @param gamma Tensor by which to scale the input.\n * @param beta Tensor by which to center the input.\n * @param reductionAxes Axes over which to normalize.\n * @param epsilon Fuzz factor.\n * @returns An `Array` of three `Tensors`:\n *   [normalized tensor, mean of input, variance of input].\n */\nexport function normalizeBatchInTraining(\n    x: Tensor, gamma: Tensor, beta: Tensor, reductionAxes: number[],\n    epsilon = 1e-3): [Tensor, Tensor, Tensor] {\n  if (util.arraysEqual(\n          reductionAxes.slice().sort(), math_utils.range(0, x.rank - 1))) {\n    return regularNormalizeBatchInTraining(\n        x, gamma, beta, reductionAxes, epsilon);\n  } else {\n    return broadcastNormalizeBatchInTraining(\n        x, gamma, beta, reductionAxes, epsilon);\n  }\n}\n\nexport declare interface BatchNormalizationLayerArgs extends LayerArgs {\n  /**\n   * The integer axis that should be normalized (typically the features axis).\n   * Defaults to -1.\n   *\n   * For instance, after a `Conv2D` layer with `data_format=\"channels_first\"`,\n   * set `axis=1` in `batchNormalization`.\n   */\n  axis?: number;\n\n  /**\n   * Momentum of the moving average. Defaults to 0.99.\n   */\n  momentum?: number;\n\n  /**\n   * Small float added to the variance to avoid dividing by zero. Defaults to\n   * 1e-3.\n   */\n  epsilon?: number;\n\n  /**\n   * If `true`, add offset of `beta` to normalized tensor.\n   * If `false`, `beta` is ignored.\n   * Defaults to `true`.\n   */\n  center?: boolean;\n\n  /**\n   * If `true`, multiply by `gamma`.\n   * If `false`, `gamma` is not used.\n   * When the next layer is linear (also e.g. `nn.relu`),\n   * this can be disabled since the scaling will be done by the next layer.\n   * Defaults to `true`.\n   */\n  scale?: boolean;\n\n  /**\n   * Initializer for the beta weight.\n   *  Defaults to 'zeros'.\n   */\n  betaInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the gamma weight.\n   *  Defaults to `ones`.\n   */\n  gammaInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the moving mean.\n   * Defaults to `zeros`\n   */\n  movingMeanInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the moving variance.\n   *  Defaults to 'Ones'.\n   */\n  movingVarianceInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Constraint for the beta weight.\n   */\n  betaConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint for gamma weight.\n   */\n  gammaConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Regularizer for the beta weight.\n   */\n  betaRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer for the gamma weight.\n   */\n  gammaRegularizer?: RegularizerIdentifier|Regularizer;\n}\n\nexport class BatchNormalization extends Layer {\n  /** @nocollapse */\n  static className = 'BatchNormalization';\n  private readonly axis: number;\n  private readonly momentum: number;\n  private readonly epsilon: number;\n  private readonly center: boolean;\n  private readonly scale: boolean;\n  private readonly betaInitializer: Initializer;\n  private readonly gammaInitializer: Initializer;\n  private readonly movingMeanInitializer: Initializer;\n  private readonly movingVarianceInitializer: Initializer;\n  private readonly betaConstraint: Constraint;\n  private readonly gammaConstraint: Constraint;\n  private readonly betaRegularizer: Regularizer;\n  private readonly gammaRegularizer: Regularizer;\n  private gamma: LayerVariable;\n  private beta: LayerVariable;\n  private movingMean: LayerVariable;\n  private movingVariance: LayerVariable;\n\n  constructor(args?: BatchNormalizationLayerArgs) {\n    if (args == null) {\n      args = {};\n    }\n    super(args);\n\n    this.supportsMasking = true;\n    this.axis = args.axis == null ? -1 : args.axis;\n    this.momentum = args.momentum == null ? 0.99 : args.momentum;\n    this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon;\n    this.center = args.center == null ? true : args.center;\n    this.scale = args.scale == null ? true : args.scale;\n    this.betaInitializer = getInitializer(args.betaInitializer || 'zeros');\n    this.gammaInitializer = getInitializer(args.gammaInitializer || 'ones');\n    this.movingMeanInitializer =\n        getInitializer(args.movingMeanInitializer || 'zeros');\n    this.movingVarianceInitializer =\n        getInitializer(args.movingVarianceInitializer || 'ones');\n    this.betaConstraint = getConstraint(args.betaConstraint);\n    this.gammaConstraint = getConstraint(args.gammaConstraint);\n    this.betaRegularizer = getRegularizer(args.betaRegularizer);\n    this.gammaRegularizer = getRegularizer(args.gammaRegularizer);\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const axis = this.axis >= 0 ? this.axis : (this.axis + inputShape.length);\n    const dim = inputShape[axis];\n    if (dim == null) {\n      throw new ValueError(\n          `Axis ${axis} of input tensor should have a defined dimension but ` +\n          `the layer received an input with shape ` +\n          `${JSON.stringify(inputShape)}.`);\n    }\n    this.inputSpec =\n        [new InputSpec({ndim: inputShape.length, axes: {[axis]: dim}})];\n    const shape = [dim];\n    if (this.scale) {\n      this.gamma = this.addWeight(\n          'gamma', shape, null, this.gammaInitializer, this.gammaRegularizer,\n          true, this.gammaConstraint);\n    }\n    if (this.center) {\n      this.beta = this.addWeight(\n          'beta', shape, null, this.betaInitializer, this.betaRegularizer, true,\n          this.betaConstraint);\n    }\n    this.movingMean = this.addWeight(\n        'moving_mean', shape, null, this.movingMeanInitializer, null, false);\n    this.movingVariance = this.addWeight(\n        'moving_variance', shape, null, this.movingVarianceInitializer, null,\n        false);\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const training = kwargs['training'] == null ? false : kwargs['training'];\n      const input = getExactlyOneTensor(inputs);\n      const inputShape = input.shape;\n      const ndim = inputShape.length;\n      const reductionAxes = math_utils.range(0, ndim);\n      const axis = this.axis >= 0 ? this.axis : (this.axis + ndim);\n      reductionAxes.splice(axis, 1);\n      const broadcastShape = generic_utils.pyListRepeat(1, ndim);\n      broadcastShape[axis] = inputShape[axis];\n\n      const sortedReductionAxes = reductionAxes.slice();\n      sortedReductionAxes.sort();\n      const needsBroadcasting = !util.arraysEqual(\n          sortedReductionAxes, math_utils.range(0, ndim).slice(0, ndim - 1));\n\n      const normalizeInference: () => Tensor = () => {\n        if (needsBroadcasting) {\n          const broadcastMovingMean =\n              this.movingMean.read().reshape(broadcastShape);\n          const broadcastMovingVariance =\n              this.movingVariance.read().reshape(broadcastShape);\n          const broadcastBeta =\n              this.center ? this.beta.read().reshape(broadcastShape) : null;\n          const broadcastGamma =\n              this.scale ? this.gamma.read().reshape(broadcastShape) : null;\n          return batchNormalization(\n              input, broadcastMovingMean, broadcastMovingVariance,\n              broadcastBeta, broadcastGamma, this.epsilon);\n        } else {\n          return batchNormalization(\n              input, this.movingMean.read(), this.movingVariance.read(),\n              this.beta == null ? null : this.beta.read(),\n              this.gamma == null ? null : this.gamma.read(), this.epsilon);\n        }\n      };\n\n      if (!training) {\n        return normalizeInference();\n      }\n\n      const [normedTraining, mean, variance] = normalizeBatchInTraining(\n          input, this.gamma.read(), this.beta.read(), reductionAxes,\n          this.epsilon);\n\n      const doMovingAverage =\n          (variable: LayerVariable, value: Tensor, momentum: number): void => {\n            tfc.tidy(() => {\n              const decay = 1 - momentum;\n              const origValue = variable.read();\n              const updateDelta = origValue.sub(value).mul(decay);\n              variable.write(origValue.sub(updateDelta));\n            });\n          };\n\n      // Perform updates to moving mean and moving variance for training.\n      // Porting Note: In PyKeras, these updates to `movingMean` and\n      //   `movingAverage` are done as a deferred Graph, added to the `Layer`'s\n      //   `update`s using the `add_update()` method. Here we do it imperatively\n      //   and encapsulate the updates in a function that is invoked\n      //   immediately.\n      const updateMovingMeanAndVariance = () => {\n        doMovingAverage(this.movingMean, mean, this.momentum);\n        doMovingAverage(this.movingVariance, variance, this.momentum);\n      };\n      updateMovingMeanAndVariance();\n\n      return normedTraining;\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      axis: this.axis,\n      momentum: this.momentum,\n      epsilon: this.epsilon,\n      center: this.center,\n      scale: this.scale,\n      betaInitializer: serializeInitializer(this.betaInitializer),\n      gammaInitializer: serializeInitializer(this.gammaInitializer),\n      movingMeanInitializer: serializeInitializer(this.movingMeanInitializer),\n      movingVarianceInitializer:\n          serializeInitializer(this.movingVarianceInitializer),\n      betaRegularizer: serializeRegularizer(this.betaRegularizer),\n      gammaRegularizer: serializeRegularizer(this.gammaRegularizer),\n      betaConstraint: serializeConstraint(this.betaConstraint),\n      gammaConstraint: serializeConstraint(this.gammaConstraint)\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(BatchNormalization);\n\nexport interface LayerNormalizationLayerArgs extends LayerArgs {\n  /**\n   * The axis or axes that should be normalized (typically, the feature axis.)\n   * Defaults to -1 (the last axis.)\n   */\n  axis?: number|number[];\n\n  /**\n   * A small positive float added to variance to avoid divison by zero.\n   * Defaults to 1e-3.\n   */\n  epsilon?: number;\n\n  /**\n   * If `true`, add offset of `beta` to normalized tensor.\n   * If `false`, `beta` is ignored.\n   * Default: `true`.\n   */\n  center?: boolean;\n\n  /**\n   * If `true`, multiply output by `gamma`.\n   * If `false`, `gamma` is not used.\n   * When the next layer is linear, this can be disabled since scaling will\n   * be done by the next layer.\n   * Default: `true`.\n   */\n  scale?: boolean;\n\n  /**\n   * Initializer for the beta weight.\n   * Default: `'zeros'`.\n   */\n  betaInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the gamma weight.\n   * Default: `'ones'`.\n   */\n  gammaInitializer?: InitializerIdentifier|Initializer;\n\n  /** Regularizer for the beta weight. */\n  betaRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /** Regularizer for the gamma weight. */\n  gammaRegularizer?: RegularizerIdentifier|Regularizer;\n}\n\nexport class LayerNormalization extends Layer {\n  /** @nocollapse */\n  static className = 'LayerNormalization';\n\n  private axis: number|number[];\n  readonly epsilon: number;\n  readonly center: boolean;\n  readonly scale: boolean;\n  readonly betaInitializer: Initializer;\n  readonly gammaInitializer: Initializer;\n  readonly betaRegularizer: Regularizer;\n  readonly gammaRegularizer: Regularizer;\n\n  private gamma: LayerVariable;\n  private beta: LayerVariable;\n\n  constructor(args?: LayerNormalizationLayerArgs) {\n    if (args == null) {\n      args = {};\n    }\n    super(args);\n\n    this.axis = args.axis == null ? -1 : args.axis;\n    if (typeof this.axis === 'number') {\n      if (!Number.isInteger(this.axis)) {\n        throw new Error(\n            `Expected axis to be an integer, but received ${this.axis}`);\n      }\n    } else if (Array.isArray(this.axis)) {\n      for (const axis of this.axis) {\n        if (!Number.isInteger(axis)) {\n          throw new Error(\n              `Expected axis to be an array of integers, ` +\n              `but received ${JSON.stringify(this.axis)}`);\n        }\n      }\n    } else {\n      throw new Error(\n          `Expected axis to be an integer or an array of integers, ` +\n          `but received ${JSON.stringify(this.axis)}`);\n    }\n\n    this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon;\n    this.center = args.center == null ? true : args.center;\n    this.scale = args.scale == null ? true : args.scale;\n    this.betaInitializer = getInitializer(args.betaInitializer || 'zeros');\n    this.gammaInitializer = getInitializer(args.gammaInitializer || 'ones');\n    this.betaRegularizer = getRegularizer(args.betaRegularizer);\n    this.gammaRegularizer = getRegularizer(args.gammaRegularizer);\n\n    this.supportsMasking = true;\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const nDims = inputShape.length;\n\n    // Convert axis to array and resolve negatives.\n    if (typeof this.axis === 'number') {\n      this.axis = [this.axis];\n    }\n    for (let i = 0; i < this.axis.length; ++i) {\n      if (this.axis[i] < 0) {\n        this.axis[i] += nDims;\n      }\n    }\n\n    // Further validate axes.\n    for (const axis of this.axis) {\n      if (axis < 0 || axis >= nDims) {\n        throw new Error(`Invalid axis: ${axis}`);\n      }\n    }\n    if (this.axis.length !== generic_utils.unique(this.axis).length) {\n      throw new Error(`Found duplicate axes in: ${this.axis}`);\n    }\n\n    const paramShape = this.axis.map(axis => inputShape[axis]) as number[];\n\n    const trainable = true;\n    if (this.scale) {\n      this.gamma = this.addWeight(\n          'gamma', paramShape, 'float32', this.gammaInitializer,\n          this.gammaRegularizer, trainable);\n    } else {\n      this.gamma = null;\n    }\n    if (this.center) {\n      this.beta = this.addWeight(\n          'beta', paramShape, 'float32', this.betaInitializer,\n          this.betaRegularizer, trainable);\n    } else {\n      this.beta = null;\n    }\n\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    const input = getExactlyOneTensor(inputs);\n    const inputShape = input.shape;\n    const nDims = inputShape.length;\n\n    return tidy(() => {\n      const keepDims = true;\n      let {mean, variance} = moments(input, this.axis, keepDims);\n      const broadcastShape = generic_utils.pyListRepeat(1, nDims);\n      for (const dim of this.axis as number[]) {\n        broadcastShape[dim] = inputShape[dim];\n      }\n\n      const broadcast = (v: Tensor) => {\n        if (v != null && v.shape.length !== nDims &&\n            this.axis !== [nDims - 1]) {\n          return v.reshape(broadcastShape);\n        } else {\n          return v;\n        }\n      };\n\n      let scale = broadcast(this.gamma.read());\n      let offset = broadcast(this.beta.read());\n\n      // TODO(https://github.com/tensorflow/tfjs/issues/2120): The tiling below\n      // is a workaround for the limitation of core's batchNormalization?d don't\n      // support broadcasting in their gradients. In addition, the tiling is\n      // necessary to ensure correctness on the browser CPU backend regardless\n      // of forward or backward computation. Remove this workaround once the\n      // limitation is addressed. See .\n      const momentsTiling: number[] = [];\n      const scaleOffsetTiling: number[] = [];\n      for (let i = 0; i < nDims; ++i) {\n        if ((this.axis as number[]).indexOf(i) !== -1) {\n          momentsTiling.push(inputShape[i]);\n          scaleOffsetTiling.push(1);\n        } else {\n          momentsTiling.push(1);\n          scaleOffsetTiling.push(inputShape[i]);\n        }\n      }\n      mean = mean.tile(momentsTiling);\n      variance = variance.tile(momentsTiling);\n      scale = scale.tile(scaleOffsetTiling);\n      offset = offset.tile(scaleOffsetTiling);\n\n      return batchNormalization(\n          input, mean, variance, offset, scale, this.epsilon);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      axis: this.axis,\n      epsilon: this.epsilon,\n      center: this.center,\n      scale: this.scale,\n      betaInitializer: serializeInitializer(this.betaInitializer),\n      gammaInitializer: serializeInitializer(this.gammaInitializer),\n      betaRegularizer: serializeRegularizer(this.betaRegularizer),\n      gammaRegularizer: serializeRegularizer(this.gammaRegularizer)\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(LayerNormalization);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Padding Layers.\n */\n\n// Porting Note: In Python Keras, the padding layers are in convolutional.py,\n//   but we decided to put them in a separate file (padding.ts) for clarity.\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\n\nimport {imageDataFormat} from '../backend/common';\nimport {InputSpec, Layer, LayerArgs} from '../engine/topology';\nimport {ValueError} from '../errors';\nimport {DataFormat, Shape} from '../keras_format/common';\nimport {Kwargs} from '../types';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\n\n/**\n * Pads the middle dimension of a 3D tensor.\n *\n * @param x Input `tf.Tensor` to be padded.\n * @param padding `Array` of 2 integers, how many zeros to add at the start and\n *   end of the middle dimension (i.e., dimension 1).\n * @return A padded 3D `tf.Tensor`.\n */\nexport function temporalPadding(x: Tensor, padding?: [number, number]): Tensor {\n  return tidy(() => {\n    if (x.rank !== 3) {\n      throw new ValueError(\n          `temporalPadding expects input tensor to be 3-D, but received a ` +\n          `${x.rank}-D tensor.`);\n    }\n\n    if (padding == null) {\n      padding = [1, 1];\n    }\n    if (padding.length !== 2) {\n      throw new ValueError(\n          `temporalPadding expects input padding pattern to be a length-2 ` +\n          `array, but received a length-${padding.length} array.`);\n    }\n\n    const pattern: Array<[number, number]> = [[0, 0], padding, [0, 0]];\n    return tfc.pad(x, pattern);\n  });\n}\n\n/**\n * Pads the 2nd and 3rd dimensions of a 4D tensor.\n *\n * @param x Input `tf.Tensor` to be padded.\n * @param padding `Array` of two `Array`s, each of which is an `Array` of two\n *   integers. The amount of padding at the beginning and end of the 2nd and 3rd\n *   dimensions, respectively.\n * @param dataFormat 'channelsLast' (default) or 'channelsFirst'.\n * @return Padded 4D `tf.Tensor`.\n */\nexport function spatial2dPadding(\n    x: Tensor, padding?: [[number, number], [number, number]],\n    dataFormat?: DataFormat): Tensor {\n  return tidy(() => {\n    if (x.rank !== 4) {\n      throw new ValueError(\n          `temporalPadding expects input tensor to be 4-D, but received a ` +\n          `${x.rank}-D tensor.`);\n    }\n\n    if (padding == null) {\n      padding = [[1, 1], [1, 1]];\n    }\n    if (padding.length !== 2 || padding[0].length !== 2 ||\n        padding[1].length !== 2) {\n      throw new ValueError(\n          'spatial2dPadding expects `padding` to be an Array of two Arrays, ' +\n          'each of which is an Array of two integers.');\n    }\n\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    if (dataFormat !== 'channelsLast' && dataFormat !== 'channelsFirst') {\n      throw new ValueError(\n          `Unknown data format: ${dataFormat}. ` +\n          `Supported data formats are 'channelsLast' and 'channelsFirst.`);\n    }\n\n    let pattern: Array<[number, number]>;\n    if (dataFormat === 'channelsFirst') {\n      pattern = [[0, 0], [0, 0], padding[0], padding[1]];\n    } else {\n      pattern = [[0, 0], padding[0], padding[1], [0, 0]];\n    }\n\n    return tfc.pad(x, pattern);\n  });\n}\n\nexport declare interface ZeroPadding2DLayerArgs extends LayerArgs {\n  /**\n   * Integer, or `Array` of 2 integers, or `Array` of 2 `Array`s, each of\n   * which is an `Array` of 2 integers.\n   * - If integer, the same symmetric padding is applied to width and height.\n   * - If Array` of 2 integers, interpreted as two different symmetric values\n   *   for height and width:\n   *   `[symmetricHeightPad, symmetricWidthPad]`.\n   * - If `Array` of 2 `Array`s, interpreted as:\n   *   `[[topPad, bottomPad], [leftPad, rightPad]]`.\n   */\n  padding?: number|[number, number]|[[number, number], [number, number]];\n\n  /**\n   * One of `'channelsLast'` (default) and `'channelsFirst'`.\n   *\n   * The ordering of the dimensions in the inputs.\n   * `channelsLast` corresponds to inputs with shape\n   * `[batch, height, width, channels]` while `channelsFirst`\n   * corresponds to inputs with shape\n   * `[batch, channels, height, width]`.\n   */\n  dataFormat?: DataFormat;\n}\n\nexport class ZeroPadding2D extends Layer {\n  /** @nocollapse */\n  static className = 'ZeroPadding2D';\n  readonly dataFormat: DataFormat;\n  readonly padding: [[number, number], [number, number]];\n\n  constructor(args?: ZeroPadding2DLayerArgs) {\n    if (args == null) {\n      args = {};\n    }\n    super(args);\n\n    this.dataFormat =\n        args.dataFormat == null ? imageDataFormat() : args.dataFormat;\n    // TODO(cais): Maybe refactor the following logic surrounding `padding`\n    //   into a helper method.\n    if (args.padding == null) {\n      this.padding = [[1, 1], [1, 1]];\n    } else if (typeof args.padding === 'number') {\n      this.padding =\n          [[args.padding, args.padding], [args.padding, args.padding]];\n    } else {\n      args.padding = args.padding;\n      if (args.padding.length !== 2) {\n        throw new ValueError(\n            `ZeroPadding2D expects padding to be a length-2 array, but ` +\n            `received a length-${args.padding.length} array.`);\n      }\n\n      let heightPadding: [number, number];\n      let widthPadding: [number, number];\n      if (typeof args.padding[0] === 'number') {\n        heightPadding = [args.padding[0], args.padding[0]];\n        widthPadding = [args.padding[1] as number, args.padding[1] as number];\n      } else {\n        args.padding = args.padding as [[number, number], [number, number]];\n\n        if (args.padding[0].length !== 2) {\n          throw new ValueError(\n              `ZeroPadding2D expects height padding to be a length-2 array, ` +\n              `but received a length-${args.padding[0].length} array.`);\n        }\n        heightPadding = args.padding[0] as [number, number];\n\n        if (args.padding[1].length !== 2) {\n          throw new ValueError(\n              `ZeroPadding2D expects width padding to be a length-2 array, ` +\n              `but received a length-${args.padding[1].length} array.`);\n        }\n        widthPadding = args.padding[1] as [number, number];\n      }\n      this.padding = [heightPadding, widthPadding];\n    }\n    this.inputSpec = [new InputSpec({ndim: 4})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n\n    let rows: number;\n    let cols: number;\n    if (this.dataFormat === 'channelsFirst') {\n      if (inputShape[2] != null && inputShape[2] >= 0) {\n        rows = inputShape[2] + this.padding[0][0] + this.padding[0][1];\n      } else {\n        rows = null;\n      }\n      if (inputShape[3] != null && inputShape[3] >= 0) {\n        cols = inputShape[3] + this.padding[1][0] + this.padding[1][1];\n      } else {\n        cols = null;\n      }\n      return [inputShape[0], inputShape[1], rows, cols];\n    } else {\n      if (inputShape[1] != null && inputShape[1] >= 0) {\n        rows = inputShape[1] + this.padding[0][0] + this.padding[0][1];\n      } else {\n        rows = null;\n      }\n      if (inputShape[2] != null && inputShape[2] >= 0) {\n        cols = inputShape[2] + this.padding[1][0] + this.padding[1][1];\n      } else {\n        cols = null;\n      }\n      return [inputShape[0], rows, cols, inputShape[3]];\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(\n        () => spatial2dPadding(\n            getExactlyOneTensor(inputs), this.padding, this.dataFormat));\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      padding: this.padding,\n      dataFormat: this.dataFormat,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(ZeroPadding2D);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Pooling Layers.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, Tensor3D, Tensor4D, Tensor5D, tidy} from '@tensorflow/tfjs-core';\n\nimport {imageDataFormat} from '../backend/common';\nimport * as K from '../backend/tfjs_backend';\nimport {checkDataFormat, checkPaddingMode, checkPoolMode} from '../common';\nimport {InputSpec} from '../engine/topology';\nimport {Layer, LayerArgs} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {DataFormat, PaddingMode, PoolMode, Shape} from '../keras_format/common';\nimport {Kwargs} from '../types';\nimport {convOutputLength} from '../utils/conv_utils';\nimport {assertPositiveInteger} from '../utils/generic_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\n\nimport {preprocessConv2DInput, preprocessConv3DInput} from './convolutional';\n\n/**\n * 2D pooling.\n * @param x\n * @param poolSize\n * @param stridesdes strides. Defaults to [1, 1].\n * @param padding padding. Defaults to 'valid'.\n * @param dataFormat data format. Defaults to 'channelsLast'.\n * @param poolMode Mode of pooling. Defaults to 'max'.\n * @returns Result of the 2D pooling.\n */\nexport function pool2d(\n    x: Tensor, poolSize: [number, number], strides?: [number, number],\n    padding?: PaddingMode, dataFormat?: DataFormat,\n    poolMode?: PoolMode): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    checkPoolMode(poolMode);\n    checkPaddingMode(padding);\n    if (strides == null) {\n      strides = [1, 1];\n    }\n    if (padding == null) {\n      padding = 'valid';\n    }\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    if (poolMode == null) {\n      poolMode = 'max';\n    }\n\n    // TODO(cais): Remove the preprocessing step once deeplearn.js supports\n    // dataFormat as an input argument.\n    x = preprocessConv2DInput(x, dataFormat);  // x is NHWC after preprocessing.\n    let y: Tensor;\n    const paddingString = (padding === 'same') ? 'same' : 'valid';\n    if (poolMode === 'max') {\n      // TODO(cais): Rank check?\n      y = tfc.maxPool(x as Tensor4D, poolSize, strides, paddingString);\n    } else {  // 'avg'\n      // TODO(cais): Check the dtype and rank of x and give clear error message\n      //   if those are incorrect.\n      y = tfc.avgPool(\n          // TODO(cais): Rank check?\n          x as Tensor3D | Tensor4D, poolSize, strides, paddingString);\n    }\n    if (dataFormat === 'channelsFirst') {\n      y = tfc.transpose(y, [0, 3, 1, 2]);  // NHWC -> NCHW.\n    }\n    return y;\n  });\n}\n\n/**\n * 3D pooling.\n * @param x\n * @param poolSize. Default to [1, 1, 1].\n * @param strides strides. Defaults to [1, 1, 1].\n * @param padding padding. Defaults to 'valid'.\n * @param dataFormat data format. Defaults to 'channelsLast'.\n * @param poolMode Mode of pooling. Defaults to 'max'.\n * @returns Result of the 3D pooling.\n */\nexport function pool3d(\n    x: Tensor5D, poolSize: [number, number, number],\n    strides?: [number, number, number], padding?: PaddingMode,\n    dataFormat?: DataFormat, poolMode?: PoolMode): Tensor {\n  return tidy(() => {\n    checkDataFormat(dataFormat);\n    checkPoolMode(poolMode);\n    checkPaddingMode(padding);\n    if (strides == null) {\n      strides = [1, 1, 1];\n    }\n    if (padding == null) {\n      padding = 'valid';\n    }\n    if (dataFormat == null) {\n      dataFormat = imageDataFormat();\n    }\n    if (poolMode == null) {\n      poolMode = 'max';\n    }\n\n    // x is NDHWC after preprocessing.\n    x = preprocessConv3DInput(x as Tensor, dataFormat) as Tensor5D;\n    let y: Tensor;\n    const paddingString = (padding === 'same') ? 'same' : 'valid';\n    if (poolMode === 'max') {\n      y = tfc.maxPool3d(x, poolSize, strides, paddingString);\n    } else {  // 'avg'\n      y = tfc.avgPool3d(x, poolSize, strides, paddingString);\n    }\n    if (dataFormat === 'channelsFirst') {\n      y = tfc.transpose(y, [0, 4, 1, 2, 3]);  // NDHWC -> NCDHW.\n    }\n    return y;\n  });\n}\n\nexport declare interface Pooling1DLayerArgs extends LayerArgs {\n  /**\n   * Size of the window to pool over, should be an integer.\n   */\n  poolSize?: number|[number];\n  /**\n   * Period at which to sample the pooled values.\n   *\n   * If `null`, defaults to `poolSize`.\n   */\n  strides?: number|[number];\n  /** How to fill in data that's not an integer multiple of poolSize. */\n  padding?: PaddingMode;\n}\n\n/**\n * Abstract class for different pooling 1D layers.\n */\nexport abstract class Pooling1D extends Layer {\n  protected readonly poolSize: [number];\n  protected readonly strides: [number];\n  protected readonly padding: PaddingMode;\n\n  /**\n   *\n   * @param args Parameters for the Pooling layer.\n   *\n   * config.poolSize defaults to 2.\n   */\n  constructor(args: Pooling1DLayerArgs) {\n    if (args.poolSize == null) {\n      args.poolSize = 2;\n    }\n    super(args);\n    if (typeof args.poolSize === 'number') {\n      this.poolSize = [args.poolSize];\n    } else if (\n        Array.isArray(args.poolSize) &&\n        (args.poolSize as number[]).length === 1 &&\n        typeof (args.poolSize as number[])[0] === 'number') {\n      this.poolSize = args.poolSize;\n    } else {\n      throw new ValueError(\n          `poolSize for 1D convolutional layer must be a number or an ` +\n          `Array of a single number, but received ` +\n          `${JSON.stringify(args.poolSize)}`);\n    }\n    assertPositiveInteger(this.poolSize, 'poolSize');\n    if (args.strides == null) {\n      this.strides = this.poolSize;\n    } else {\n      if (typeof args.strides === 'number') {\n        this.strides = [args.strides];\n      } else if (\n          Array.isArray(args.strides) &&\n          (args.strides as number[]).length === 1 &&\n          typeof (args.strides as number[])[0] === 'number') {\n        this.strides = args.strides;\n      } else {\n        throw new ValueError(\n            `strides for 1D convolutional layer must be a number or an ` +\n            `Array of a single number, but received ` +\n            `${JSON.stringify(args.strides)}`);\n      }\n    }\n    assertPositiveInteger(this.strides, 'strides');\n\n    this.padding = args.padding == null ? 'valid' : args.padding;\n    checkPaddingMode(this.padding);\n    this.inputSpec = [new InputSpec({ndim: 3})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const length = convOutputLength(\n        inputShape[1], this.poolSize[0], this.padding, this.strides[0]);\n    return [inputShape[0], length, inputShape[2]];\n  }\n\n  protected abstract poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor;\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      // Add dummy last dimension.\n      inputs = K.expandDims(getExactlyOneTensor(inputs), 2);\n      const output = this.poolingFunction(\n          getExactlyOneTensor(inputs), [this.poolSize[0], 1],\n          [this.strides[0], 1], this.padding, 'channelsLast');\n      // Remove dummy last dimension.\n      return tfc.squeeze(output, [2]);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      poolSize: this.poolSize,\n      padding: this.padding,\n      strides: this.strides,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\n\nexport class MaxPooling1D extends Pooling1D {\n  /** @nocollapse */\n  static className = 'MaxPooling1D';\n  constructor(args: Pooling1DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool2d(inputs, poolSize, strides, padding, dataFormat, 'max');\n  }\n}\nserialization.registerClass(MaxPooling1D);\n\nexport class AveragePooling1D extends Pooling1D {\n  /** @nocollapse */\n  static className = 'AveragePooling1D';\n  constructor(args: Pooling1DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool2d(inputs, poolSize, strides, padding, dataFormat, 'avg');\n  }\n}\nserialization.registerClass(AveragePooling1D);\n\nexport declare interface Pooling2DLayerArgs extends LayerArgs {\n  /**\n   * Factors by which to downscale in each dimension [vertical, horizontal].\n   * Expects an integer or an array of 2 integers.\n   *\n   * For example, `[2, 2]` will halve the input in both spatial dimension.\n   * If only one integer is specified, the same window length\n   * will be used for both dimensions.\n   */\n  poolSize?: number|[number, number];\n\n  /**\n   * The size of the stride in each dimension of the pooling window. Expects\n   * an integer or an array of 2 integers. Integer, tuple of 2 integers, or\n   * None.\n   *\n   * If `null`, defaults to `poolSize`.\n   */\n  strides?: number|[number, number];\n\n  /** The padding type to use for the pooling layer. */\n  padding?: PaddingMode;\n  /** The data format to use for the pooling layer. */\n  dataFormat?: DataFormat;\n}\n\n/**\n * Abstract class for different pooling 2D layers.\n */\nexport abstract class Pooling2D extends Layer {\n  protected readonly poolSize: [number, number];\n  protected readonly strides: [number, number];\n  protected readonly padding: PaddingMode;\n  protected readonly dataFormat: DataFormat;\n\n  constructor(args: Pooling2DLayerArgs) {\n    if (args.poolSize == null) {\n      args.poolSize = [2, 2];\n    }\n    super(args);\n    this.poolSize = Array.isArray(args.poolSize) ?\n        args.poolSize :\n        [args.poolSize, args.poolSize];\n    if (args.strides == null) {\n      this.strides = this.poolSize;\n    } else if (Array.isArray(args.strides)) {\n      if (args.strides.length !== 2) {\n        throw new ValueError(\n            `If the strides property of a 2D pooling layer is an Array, ` +\n            `it is expected to have a length of 2, but received length ` +\n            `${args.strides.length}.`);\n      }\n      this.strides = args.strides;\n    } else {\n      // `config.strides` is a number.\n      this.strides = [args.strides, args.strides];\n    }\n    assertPositiveInteger(this.poolSize, 'poolSize');\n    assertPositiveInteger(this.strides, 'strides');\n    this.padding = args.padding == null ? 'valid' : args.padding;\n    this.dataFormat =\n        args.dataFormat == null ? 'channelsLast' : args.dataFormat;\n    checkDataFormat(this.dataFormat);\n    checkPaddingMode(this.padding);\n\n    this.inputSpec = [new InputSpec({ndim: 4})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    let rows =\n        this.dataFormat === 'channelsFirst' ? inputShape[2] : inputShape[1];\n    let cols =\n        this.dataFormat === 'channelsFirst' ? inputShape[3] : inputShape[2];\n    rows =\n        convOutputLength(rows, this.poolSize[0], this.padding, this.strides[0]);\n    cols =\n        convOutputLength(cols, this.poolSize[1], this.padding, this.strides[1]);\n    if (this.dataFormat === 'channelsFirst') {\n      return [inputShape[0], inputShape[1], rows, cols];\n    } else {\n      return [inputShape[0], rows, cols, inputShape[3]];\n    }\n  }\n\n  protected abstract poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor;\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      return this.poolingFunction(\n          getExactlyOneTensor(inputs), this.poolSize, this.strides,\n          this.padding, this.dataFormat);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      poolSize: this.poolSize,\n      padding: this.padding,\n      strides: this.strides,\n      dataFormat: this.dataFormat\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\n\nexport class MaxPooling2D extends Pooling2D {\n  /** @nocollapse */\n  static className = 'MaxPooling2D';\n  constructor(args: Pooling2DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool2d(inputs, poolSize, strides, padding, dataFormat, 'max');\n  }\n}\nserialization.registerClass(MaxPooling2D);\n\nexport class AveragePooling2D extends Pooling2D {\n  /** @nocollapse */\n  static className = 'AveragePooling2D';\n  constructor(args: Pooling2DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number], strides: [number, number],\n      padding: PaddingMode, dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool2d(inputs, poolSize, strides, padding, dataFormat, 'avg');\n  }\n}\nserialization.registerClass(AveragePooling2D);\n\nexport declare interface Pooling3DLayerArgs extends LayerArgs {\n  /**\n   * Factors by which to downscale in each dimension [depth, height, width].\n   * Expects an integer or an array of 3 integers.\n   *\n   * For example, `[2, 2, 2]` will halve the input in three dimensions.\n   * If only one integer is specified, the same window length\n   * will be used for all dimensions.\n   */\n  poolSize?: number|[number, number, number];\n\n  /**\n   * The size of the stride in each dimension of the pooling window. Expects\n   * an integer or an array of 3 integers. Integer, tuple of 3 integers, or\n   * None.\n   *\n   * If `null`, defaults to `poolSize`.\n   */\n  strides?: number|[number, number, number];\n\n  /** The padding type to use for the pooling layer. */\n  padding?: PaddingMode;\n  /** The data format to use for the pooling layer. */\n  dataFormat?: DataFormat;\n}\n\n/**\n * Abstract class for different pooling 3D layers.\n */\nexport abstract class Pooling3D extends Layer {\n  protected readonly poolSize: [number, number, number];\n  protected readonly strides: [number, number, number];\n  protected readonly padding: PaddingMode;\n  protected readonly dataFormat: DataFormat;\n\n  constructor(args: Pooling3DLayerArgs) {\n    if (args.poolSize == null) {\n      args.poolSize = [2, 2, 2];\n    }\n    super(args);\n    this.poolSize = Array.isArray(args.poolSize) ?\n        args.poolSize :\n        [args.poolSize, args.poolSize, args.poolSize];\n    if (args.strides == null) {\n      this.strides = this.poolSize;\n    } else if (Array.isArray(args.strides)) {\n      if (args.strides.length !== 3) {\n        throw new ValueError(\n            `If the strides property of a 3D pooling layer is an Array, ` +\n            `it is expected to have a length of 3, but received length ` +\n            `${args.strides.length}.`);\n      }\n      this.strides = args.strides;\n    } else {\n      // `config.strides` is a number.\n      this.strides = [args.strides, args.strides, args.strides];\n    }\n    assertPositiveInteger(this.poolSize, 'poolSize');\n    assertPositiveInteger(this.strides, 'strides');\n    this.padding = args.padding == null ? 'valid' : args.padding;\n    this.dataFormat =\n        args.dataFormat == null ? 'channelsLast' : args.dataFormat;\n    checkDataFormat(this.dataFormat);\n    checkPaddingMode(this.padding);\n\n    this.inputSpec = [new InputSpec({ndim: 5})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    let depths =\n        this.dataFormat === 'channelsFirst' ? inputShape[2] : inputShape[1];\n    let rows =\n        this.dataFormat === 'channelsFirst' ? inputShape[3] : inputShape[2];\n    let cols =\n        this.dataFormat === 'channelsFirst' ? inputShape[4] : inputShape[3];\n    depths = convOutputLength(\n        depths, this.poolSize[0], this.padding, this.strides[0]);\n    rows =\n        convOutputLength(rows, this.poolSize[1], this.padding, this.strides[1]);\n    cols =\n        convOutputLength(cols, this.poolSize[2], this.padding, this.strides[2]);\n    if (this.dataFormat === 'channelsFirst') {\n      return [inputShape[0], inputShape[1], depths, rows, cols];\n    } else {\n      return [inputShape[0], depths, rows, cols, inputShape[4]];\n    }\n  }\n\n  protected abstract poolingFunction(\n      inputs: Tensor, poolSize: [number, number, number],\n      strides: [number, number, number], padding: PaddingMode,\n      dataFormat: DataFormat): Tensor;\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      this.invokeCallHook(inputs, kwargs);\n      return this.poolingFunction(\n          getExactlyOneTensor(inputs), this.poolSize, this.strides,\n          this.padding, this.dataFormat);\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {\n      poolSize: this.poolSize,\n      padding: this.padding,\n      strides: this.strides,\n      dataFormat: this.dataFormat\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\n\nexport class MaxPooling3D extends Pooling3D {\n  /** @nocollapse */\n  static className = 'MaxPooling3D';\n  constructor(args: Pooling3DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number, number],\n      strides: [number, number, number], padding: PaddingMode,\n      dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool3d(\n        inputs as Tensor5D, poolSize, strides, padding, dataFormat, 'max');\n  }\n}\nserialization.registerClass(MaxPooling3D);\n\nexport class AveragePooling3D extends Pooling3D {\n  /** @nocollapse */\n  static className = 'AveragePooling3D';\n  constructor(args: Pooling3DLayerArgs) {\n    super(args);\n  }\n\n  protected poolingFunction(\n      inputs: Tensor, poolSize: [number, number, number],\n      strides: [number, number, number], padding: PaddingMode,\n      dataFormat: DataFormat): Tensor {\n    checkDataFormat(dataFormat);\n    checkPaddingMode(padding);\n    return pool3d(\n        inputs as Tensor5D, poolSize, strides, padding, dataFormat, 'avg');\n  }\n}\nserialization.registerClass(AveragePooling3D);\n\n/**\n * Abstract class for different global pooling 1D layers.\n */\nexport abstract class GlobalPooling1D extends Layer {\n  constructor(args: LayerArgs) {\n    super(args);\n    this.inputSpec = [new InputSpec({ndim: 3})];\n  }\n\n  computeOutputShape(inputShape: Shape): Shape {\n    return [inputShape[0], inputShape[2]];\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    throw new NotImplementedError();\n  }\n}\n\nexport class GlobalAveragePooling1D extends GlobalPooling1D {\n  /** @nocollapse */\n  static className = 'GlobalAveragePooling1D';\n  constructor(args?: LayerArgs) {\n    super(args || {});\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const input = getExactlyOneTensor(inputs);\n      return tfc.mean(input, 1);\n    });\n  }\n}\nserialization.registerClass(GlobalAveragePooling1D);\n\nexport class GlobalMaxPooling1D extends GlobalPooling1D {\n  /** @nocollapse */\n  static className = 'GlobalMaxPooling1D';\n  constructor(args: LayerArgs) {\n    super(args || {});\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const input = getExactlyOneTensor(inputs);\n      return tfc.max(input, 1);\n    });\n  }\n}\nserialization.registerClass(GlobalMaxPooling1D);\n\nexport declare interface GlobalPooling2DLayerArgs extends LayerArgs {\n  /**\n   * One of `CHANNEL_LAST` (default) or `CHANNEL_FIRST`.\n   *\n   * The ordering of the dimensions in the inputs. `CHANNEL_LAST` corresponds\n   * to inputs with shape `[batch, height, width, channels[` while\n   * `CHANNEL_FIRST` corresponds to inputs with shape\n   * `[batch, channels, height, width]`.\n   */\n  dataFormat?: DataFormat;\n}\n\n/**\n * Abstract class for different global pooling 2D layers.\n */\nexport abstract class GlobalPooling2D extends Layer {\n  protected dataFormat: DataFormat;\n  constructor(args: GlobalPooling2DLayerArgs) {\n    super(args);\n    this.dataFormat =\n        args.dataFormat == null ? 'channelsLast' : args.dataFormat;\n    checkDataFormat(this.dataFormat);\n    this.inputSpec = [new InputSpec({ndim: 4})];\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = inputShape as Shape;\n    if (this.dataFormat === 'channelsLast') {\n      return [inputShape[0], inputShape[3]];\n    } else {\n      return [inputShape[0], inputShape[1]];\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    throw new NotImplementedError();\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config = {dataFormat: this.dataFormat};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\n\nexport class GlobalAveragePooling2D extends GlobalPooling2D {\n  /** @nocollapse */\n  static className = 'GlobalAveragePooling2D';\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const input = getExactlyOneTensor(inputs);\n      if (this.dataFormat === 'channelsLast') {\n        return tfc.mean(input, [1, 2]);\n      } else {\n        return tfc.mean(input, [2, 3]);\n      }\n    });\n  }\n}\nserialization.registerClass(GlobalAveragePooling2D);\n\nexport class GlobalMaxPooling2D extends GlobalPooling2D {\n  /** @nocollapse */\n  static className = 'GlobalMaxPooling2D';\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const input = getExactlyOneTensor(inputs);\n      if (this.dataFormat === 'channelsLast') {\n        return tfc.max(input, [1, 2]);\n      } else {\n        return tfc.max(input, [2, 3]);\n      }\n    });\n  }\n}\nserialization.registerClass(GlobalMaxPooling2D);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * TensorFlow.js Layers: Recurrent Neural Network Layers.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {DataType, serialization, Tensor, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {Activation, getActivation, serializeActivation} from '../activations';\nimport * as K from '../backend/tfjs_backend';\nimport {nameScope} from '../common';\nimport {Constraint, ConstraintIdentifier, getConstraint, serializeConstraint} from '../constraints';\nimport {InputSpec, SymbolicTensor} from '../engine/topology';\nimport {Layer, LayerArgs} from '../engine/topology';\nimport {AttributeError, NotImplementedError, ValueError} from '../errors';\nimport {getInitializer, Initializer, InitializerIdentifier, Ones, serializeInitializer} from '../initializers';\nimport {ActivationIdentifier} from '../keras_format/activation_config';\nimport {Shape} from '../keras_format/common';\nimport {getRegularizer, Regularizer, RegularizerIdentifier, serializeRegularizer} from '../regularizers';\nimport {Kwargs, RnnStepFunction} from '../types';\nimport {assertPositiveInteger} from '../utils/generic_utils';\nimport * as math_utils from '../utils/math_utils';\nimport {getExactlyOneShape, getExactlyOneTensor, isArrayOfShapes} from '../utils/types_utils';\nimport {batchGetValue, batchSetValue, LayerVariable} from '../variables';\nimport {deserialize} from './serialization';\n\n/**\n * Standardize `apply()` args to a single list of tensor inputs.\n *\n * When running a model loaded from file, the input tensors `initialState` and\n * `constants` are passed to `RNN.apply()` as part of `inputs` instead of the\n * dedicated kwargs fields. `inputs` consists of\n * `[inputs, initialState0, initialState1, ..., constant0, constant1]` in this\n * case.\n * This method makes sure that arguments are\n * separated and that `initialState` and `constants` are `Array`s of tensors\n * (or None).\n *\n * @param inputs Tensor or `Array` of  tensors.\n * @param initialState Tensor or `Array` of tensors or `null`/`undefined`.\n * @param constants Tensor or `Array` of tensors or `null`/`undefined`.\n * @returns An object consisting of\n *   inputs: A tensor.\n *   initialState: `Array` of tensors or `null`.\n *   constants: `Array` of tensors or `null`.\n * @throws ValueError, if `inputs` is an `Array` but either `initialState` or\n *   `constants` is provided.\n */\nexport function standardizeArgs(\n    inputs: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n    initialState: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n    constants: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n    numConstants?: number): {\n  inputs: Tensor|SymbolicTensor,\n  initialState: Tensor[]|SymbolicTensor[],\n  constants: Tensor[]|SymbolicTensor[]\n} {\n  if (Array.isArray(inputs)) {\n    if (initialState != null || constants != null) {\n      throw new ValueError(\n          'When inputs is an array, neither initialState or constants ' +\n          'should be provided');\n    }\n    if (numConstants != null) {\n      constants = inputs.slice(inputs.length - numConstants, inputs.length);\n      inputs = inputs.slice(0, inputs.length - numConstants);\n    }\n    if (inputs.length > 1) {\n      initialState = inputs.slice(1, inputs.length);\n    }\n    inputs = inputs[0];\n  }\n\n  function toListOrNull(x: Tensor|Tensor[]|SymbolicTensor|\n                        SymbolicTensor[]): Tensor[]|SymbolicTensor[] {\n    if (x == null || Array.isArray(x)) {\n      return x as Tensor[] | SymbolicTensor[];\n    } else {\n      return [x] as Tensor[] | SymbolicTensor[];\n    }\n  }\n\n  initialState = toListOrNull(initialState);\n  constants = toListOrNull(constants);\n\n  return {inputs, initialState, constants};\n}\n\n/**\n * Iterates over the time dimension of a tensor.\n *\n * @param stepFunction RNN step function.\n *   Parameters:\n *     inputs: tensor with shape `[samples, ...]` (no time dimension),\n *       representing input for the batch of samples at a certain time step.\n *     states: an Array of tensors.\n *   Returns:\n *     outputs: tensor with shape `[samples, outputDim]` (no time dimension).\n *     newStates: list of tensors, same length and shapes as `states`. The first\n *       state in the list must be the output tensor at the previous timestep.\n * @param inputs Tensor of temporal data of shape `[samples, time, ...]` (at\n *   least 3D).\n * @param initialStates Tensor with shape `[samples, outputDim]` (no time\n *   dimension), containing the initial values of the states used in the step\n *   function.\n * @param goBackwards If `true`, do the iteration over the time dimension in\n *   reverse order and return the reversed sequence.\n * @param mask Binary tensor with shape `[sample, time, 1]`, with a zero for\n *   every element that is masked.\n * @param constants An Array of constant values passed at each step.\n * @param unroll Whether to unroll the RNN or to use a symbolic loop. *Not*\n *   applicable to this imperative deeplearn.js backend. Its value is ignored.\n * @param needPerStepOutputs Whether the per-step outputs are to be\n *   concatenated into a single tensor and returned (as the second return\n *   value). Default: `false`. This arg is included so that the relatively\n *   expensive concatenation of the stepwise outputs can be omitted unless\n *   the stepwise outputs need to be kept (e.g., for an LSTM layer of which\n *   `returnSequence` is `true`.)\n * @returns An Array: `[lastOutput, outputs, newStates]`.\n *   lastOutput: the lastest output of the RNN, of shape `[samples, ...]`.\n *   outputs: tensor with shape `[samples, time, ...]` where each entry\n *     `output[s, t]` is the output of the step function at time `t` for sample\n *     `s`. This return value is provided if and only if the\n *     `needPerStepOutputs` is set as `true`. If it is set as `false`, this\n *     return value will be `undefined`.\n *   newStates: Array of tensors, latest states returned by the step function,\n *      of shape `(samples, ...)`.\n * @throws ValueError If input dimension is less than 3.\n *\n * TODO(nielsene): This needs to be tidy-ed.\n */\nexport function rnn(\n    stepFunction: RnnStepFunction, inputs: Tensor, initialStates: Tensor[],\n    goBackwards = false, mask?: Tensor, constants?: Tensor[], unroll = false,\n    needPerStepOutputs = false): [Tensor, Tensor, Tensor[]] {\n  return tfc.tidy(() => {\n    const ndim = inputs.shape.length;\n    if (ndim < 3) {\n      throw new ValueError(`Input should be at least 3D, but is ${ndim}D.`);\n    }\n\n    // Transpose to time-major, i.e., from [batch, time, ...] to [time, batch,\n    // ...].\n    const axes = [1, 0].concat(math_utils.range(2, ndim));\n    inputs = tfc.transpose(inputs, axes);\n\n    if (constants != null) {\n      throw new NotImplementedError(\n          'The rnn() functoin of the deeplearn.js backend does not support ' +\n          'constants yet.');\n    }\n\n    // Porting Note: the unroll option is ignored by the imperative backend.\n    if (unroll) {\n      console.warn(\n          'Backend rnn(): the unroll = true option is not applicable to the ' +\n          'imperative deeplearn.js backend.');\n    }\n\n    if (mask != null) {\n      mask = mask.asType('bool').asType('float32');\n      if (mask.rank === ndim - 1) {\n        mask = tfc.expandDims(mask, -1);\n      }\n      mask = tfc.transpose(mask, axes);\n    }\n\n    if (goBackwards) {\n      inputs = tfc.reverse(inputs, 0);\n      if (mask != null) {\n        mask = tfc.reverse(mask, 0);\n      }\n    }\n\n    // Porting Note: PyKeras with TensorFlow backend uses a symbolic loop\n    //   (tf.while_loop). But for the imperative deeplearn.js backend, we just\n    //   use the usual TypeScript control flow to iterate over the time steps in\n    //   the inputs.\n    // Porting Note: PyKeras patches a \"_use_learning_phase\" attribute to\n    // outputs.\n    //   This is not idiomatic in TypeScript. The info regarding whether we are\n    //   in a learning (i.e., training) phase for RNN is passed in a different\n    //   way.\n\n    const perStepOutputs: Tensor[] = [];\n    let lastOutput: Tensor;\n    let states = initialStates;\n    const timeSteps = inputs.shape[0];\n    const perStepInputs = tfc.unstack(inputs);\n    let perStepMasks: Tensor[];\n    if (mask != null) {\n      perStepMasks = tfc.unstack(mask);\n    }\n\n    for (let t = 0; t < timeSteps; ++t) {\n      const currentInput = perStepInputs[t];\n      const stepOutputs = tfc.tidy(() => stepFunction(currentInput, states));\n\n      if (mask == null) {\n        lastOutput = stepOutputs[0];\n        states = stepOutputs[1];\n      } else {\n        const maskedOutputs = tfc.tidy(() => {\n          const stepMask = perStepMasks[t];\n          const negStepMask = tfc.onesLike(stepMask).sub(stepMask);\n          // TODO(cais): Would tfc.where() be better for performance?\n          const output = stepOutputs[0].mul(stepMask).addStrict(\n              states[0].mul(negStepMask));\n          const newStates = states.map((state, i) => {\n            return stepOutputs[1][i].mul(stepMask).addStrict(\n                state.mul(negStepMask));\n          });\n          return {output, newStates};\n        });\n        lastOutput = maskedOutputs.output;\n        states = maskedOutputs.newStates;\n      }\n\n      if (needPerStepOutputs) {\n        perStepOutputs.push(lastOutput);\n      }\n    }\n    let outputs: Tensor;\n    if (needPerStepOutputs) {\n      const axis = 1;\n      outputs = tfc.stack(perStepOutputs, axis);\n    }\n    return [lastOutput, outputs, states] as [Tensor, Tensor, Tensor[]];\n  });\n}\n\nexport declare interface BaseRNNLayerArgs extends LayerArgs {\n  /**\n   * A RNN cell instance. A RNN cell is a class that has:\n   *   - a `call()` method, which takes `[Tensor, Tensor]` as the\n   *     first input argument. The first item is the input at time t, and\n   *     second item is the cell state at time t.\n   *     The `call()` method returns `[outputAtT, statesAtTPlus1]`.\n   *     The `call()` method of the cell can also take the argument `constants`,\n   *     see section \"Note on passing external constants\" below.\n   *     Porting Node: PyKeras overrides the `call()` signature of RNN cells,\n   *       which are Layer subtypes, to accept two arguments. tfjs-layers does\n   *       not do such overriding. Instead we preseve the `call()` signature,\n   *       which due to its `Tensor|Tensor[]` argument and return value, is\n   *       flexible enough to handle the inputs and states.\n   *   - a `stateSize` attribute. This can be a single integer (single state)\n   *     in which case it is the size of the recurrent state (which should be\n   *     the same as the size of the cell output). This can also be an Array of\n   *     integers (one size per state). In this case, the first entry\n   *     (`stateSize[0]`) should be the same as the size of the cell output.\n   * It is also possible for `cell` to be a list of RNN cell instances, in which\n   * case the cells get stacked on after the other in the RNN, implementing an\n   * efficient stacked RNN.\n   */\n  cell?: RNNCell|RNNCell[];\n\n  /**\n   * Whether to return the last output in the output sequence, or the full\n   * sequence.\n   */\n  returnSequences?: boolean;\n\n  /**\n   * Whether to return the last state in addition to the output.\n   */\n  returnState?: boolean;\n\n  /**\n   * If `true`, process the input sequence backwards and return the reversed\n   * sequence (default: `false`).\n   */\n  goBackwards?: boolean;\n\n  /**\n   * If `true`, the last state for each sample at index i in a batch will be\n   * used as initial state of the sample of index i in the following batch\n   * (default: `false`).\n   *\n   * You can set RNN layers to be \"stateful\", which means that the states\n   * computed for the samples in one batch will be reused as initial states\n   * for the samples in the next batch. This assumes a one-to-one mapping\n   * between samples in different successive batches.\n   *\n   * To enable \"statefulness\":\n   *   - specify `stateful: true` in the layer constructor.\n   *   - specify a fixed batch size for your model, by passing\n   *     - if sequential model:\n   *       `batchInputShape: [...]` to the first layer in your model.\n   *     - else for functional model with 1 or more Input layers:\n   *       `batchShape: [...]` to all the first layers in your model.\n   *     This is the expected shape of your inputs\n   *     *including the batch size*.\n   *     It should be a tuple of integers, e.g., `[32, 10, 100]`.\n   *   - specify `shuffle: false` when calling `LayersModel.fit()`.\n   *\n   * To reset the state of your model, call `resetStates()` on either the\n   * specific layer or on the entire model.\n   */\n  stateful?: boolean;\n  // TODO(cais): Explore whether we can warn users when they fail to set\n  //   `shuffle: false` when training a model consisting of stateful RNNs\n  //   and any stateful Layers in general.\n\n  /**\n   * If `true`, the network will be unrolled, else a symbolic loop will be\n   * used. Unrolling can speed-up a RNN, although it tends to be more memory-\n   * intensive. Unrolling is only suitable for short sequences (default:\n   * `false`).\n   * Porting Note: tfjs-layers has an imperative backend. RNNs are executed with\n   *   normal TypeScript control flow. Hence this property is inapplicable and\n   *   ignored in tfjs-layers.\n   */\n  unroll?: boolean;\n\n  /**\n   * Dimensionality of the input (integer).\n   *   This option (or alternatively, the option `inputShape`) is required when\n   *   this layer is used as the first layer in a model.\n   */\n  inputDim?: number;\n\n  /**\n   * Length of the input sequences, to be specified when it is constant.\n   * This argument is required if you are going to connect `Flatten` then\n   * `Dense` layers upstream (without it, the shape of the dense outputs cannot\n   * be computed). Note that if the recurrent layer is not the first layer in\n   * your model, you would need to specify the input length at the level of the\n   * first layer (e.g., via the `inputShape` option).\n   */\n  inputLength?: number;\n}\n\nexport class RNN extends Layer {\n  /** @nocollapse */\n  static className = 'RNN';\n  public readonly cell: RNNCell;\n  public readonly returnSequences: boolean;\n  public readonly returnState: boolean;\n  public readonly goBackwards: boolean;\n  public readonly unroll: boolean;\n\n  public stateSpec: InputSpec[];\n  private states_: Tensor[];\n\n  // NOTE(cais): For stateful RNNs, the old states cannot be disposed right\n  // away when new states are set, because the old states may need to be used\n  // later for backpropagation through time (BPTT) and other purposes. So we\n  // keep them here for final disposal when the state is reset completely\n  // (i.e., through no-arg call to `resetStates()`).\n  private keptStates: Tensor[][];\n\n  private numConstants: number;\n\n  constructor(args: RNNLayerArgs) {\n    super(args);\n    let cell: RNNCell;\n    if (args.cell == null) {\n      throw new ValueError(\n          'cell property is missing for the constructor of RNN.');\n    } else if (Array.isArray(args.cell)) {\n      cell = new StackedRNNCells({cells: args.cell});\n    } else {\n      cell = args.cell;\n    }\n    if (cell.stateSize == null) {\n      throw new ValueError(\n          'The RNN cell should have an attribute `stateSize` (tuple of ' +\n          'integers, one integer per RNN state).');\n    }\n    this.cell = cell;\n    this.returnSequences =\n        args.returnSequences == null ? false : args.returnSequences;\n    this.returnState = args.returnState == null ? false : args.returnState;\n    this.goBackwards = args.goBackwards == null ? false : args.goBackwards;\n    this._stateful = args.stateful == null ? false : args.stateful;\n    this.unroll = args.unroll == null ? false : args.unroll;\n\n    this.supportsMasking = true;\n    this.inputSpec = [new InputSpec({ndim: 3})];\n    this.stateSpec = null;\n    this.states_ = null;\n    // TODO(cais): Add constantsSpec and numConstants.\n    this.numConstants = null;\n    // TODO(cais): Look into the use of initial_state in the kwargs of the\n    //   constructor.\n\n    this.keptStates = [];\n  }\n\n  // Porting Note: This is the equivalent of `RNN.states` property getter in\n  //   PyKeras.\n  getStates(): Tensor[] {\n    if (this.states_ == null) {\n      const numStates =\n          Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1;\n      return math_utils.range(0, numStates).map(x => null);\n    } else {\n      return this.states_;\n    }\n  }\n\n  // Porting Note: This is the equivalent of the `RNN.states` property setter in\n  //   PyKeras.\n  setStates(states: Tensor[]): void {\n    this.states_ = states;\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    if (isArrayOfShapes(inputShape)) {\n      inputShape = (inputShape as Shape[])[0];\n    }\n    inputShape = inputShape as Shape;\n\n    // TODO(cais): Remove the casting once stacked RNN cells become supported.\n    let stateSize = this.cell.stateSize;\n    if (!Array.isArray(stateSize)) {\n      stateSize = [stateSize];\n    }\n    const outputDim = stateSize[0];\n    let outputShape: Shape|Shape[];\n    if (this.returnSequences) {\n      outputShape = [inputShape[0], inputShape[1], outputDim];\n    } else {\n      outputShape = [inputShape[0], outputDim];\n    }\n\n    if (this.returnState) {\n      const stateShape: Shape[] = [];\n      for (const dim of stateSize) {\n        stateShape.push([inputShape[0], dim]);\n      }\n      return [outputShape].concat(stateShape);\n    } else {\n      return outputShape;\n    }\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor\n      |Tensor[] {\n    return tfc.tidy(() => {\n      if (Array.isArray(mask)) {\n        mask = mask[0];\n      }\n      const outputMask = this.returnSequences ? mask : null;\n\n      if (this.returnState) {\n        const stateMask = this.states.map(s => null);\n        return [outputMask].concat(stateMask);\n      } else {\n        return outputMask;\n      }\n    });\n  }\n\n  /**\n   * Get the current state tensors of the RNN.\n   *\n   * If the state hasn't been set, return an array of `null`s of the correct\n   * length.\n   */\n  get states(): Tensor[] {\n    if (this.states_ == null) {\n      const numStates =\n          Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1;\n      const output: Tensor[] = [];\n      for (let i = 0; i < numStates; ++i) {\n        output.push(null);\n      }\n      return output;\n    } else {\n      return this.states_;\n    }\n  }\n\n  set states(s: Tensor[]) {\n    this.states_ = s;\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    // Note inputShape will be an Array of Shapes of initial states and\n    // constants if these are passed in apply().\n    const constantShape: Shape[] = null;\n    if (this.numConstants != null) {\n      throw new NotImplementedError(\n          'Constants support is not implemented in RNN yet.');\n    }\n\n    if (isArrayOfShapes(inputShape)) {\n      inputShape = (inputShape as Shape[])[0];\n    }\n    inputShape = inputShape as Shape;\n\n    const batchSize: number = this.stateful ? inputShape[0] : null;\n    const inputDim = inputShape[inputShape.length - 1];\n    this.inputSpec[0] = new InputSpec({shape: [batchSize, null, inputDim]});\n\n    // Allow cell (if RNNCell Layer) to build before we set or validate\n    // stateSpec.\n    const stepInputShape = [inputShape[0]].concat(inputShape.slice(2));\n    if (constantShape != null) {\n      throw new NotImplementedError(\n          'Constants support is not implemented in RNN yet.');\n    } else {\n      this.cell.build(stepInputShape);\n    }\n\n    // Set or validate stateSpec.\n    let stateSize: number[];\n    if (Array.isArray(this.cell.stateSize)) {\n      stateSize = this.cell.stateSize;\n    } else {\n      stateSize = [this.cell.stateSize];\n    }\n\n    if (this.stateSpec != null) {\n      if (!util.arraysEqual(\n              this.stateSpec.map(spec => spec.shape[spec.shape.length - 1]),\n              stateSize)) {\n        throw new ValueError(\n            `An initialState was passed that is not compatible with ` +\n            `cell.stateSize. Received stateSpec=${this.stateSpec}; ` +\n            `However cell.stateSize is ${this.cell.stateSize}`);\n      }\n    } else {\n      this.stateSpec =\n          stateSize.map(dim => new InputSpec({shape: [null, dim]}));\n    }\n    if (this.stateful) {\n      this.resetStates();\n    }\n  }\n\n  /**\n   * Reset the state tensors of the RNN.\n   *\n   * If the `states` argument is `undefined` or `null`, will set the\n   * state tensor(s) of the RNN to all-zero tensors of the appropriate\n   * shape(s).\n   *\n   * If `states` is provided, will set the state tensors of the RNN to its\n   * value.\n   *\n   * @param states Optional externally-provided initial states.\n   * @param training Whether this call is done during training. For stateful\n   *   RNNs, this affects whether the old states are kept or discarded. In\n   *   particular, if `training` is `true`, the old states will be kept so\n   *   that subsequent backpropgataion through time (BPTT) may work properly.\n   *   Else, the old states will be discarded.\n   */\n  resetStates(states?: Tensor|Tensor[], training = false): void {\n    tidy(() => {\n      if (!this.stateful) {\n        throw new AttributeError(\n            'Cannot call resetStates() on an RNN Layer that is not stateful.');\n      }\n      const batchSize = this.inputSpec[0].shape[0];\n      if (batchSize == null) {\n        throw new ValueError(\n            'If an RNN is stateful, it needs to know its batch size. Specify ' +\n            'the batch size of your input tensors: \\n' +\n            '- If using a Sequential model, specify the batch size by ' +\n            'passing a `batchInputShape` option to your first layer.\\n' +\n            '- If using the functional API, specify the batch size by ' +\n            'passing a `batchShape` option to your Input layer.');\n      }\n      // Initialize state if null.\n      if (this.states_ == null) {\n        if (Array.isArray(this.cell.stateSize)) {\n          this.states_ =\n              this.cell.stateSize.map(dim => tfc.zeros([batchSize, dim]));\n        } else {\n          this.states_ = [tfc.zeros([batchSize, this.cell.stateSize])];\n        }\n      } else if (states == null) {\n        // Dispose old state tensors.\n        tfc.dispose(this.states_);\n        // For stateful RNNs, fully dispose kept old states.\n        if (this.keptStates != null) {\n          tfc.dispose(this.keptStates);\n          this.keptStates = [];\n        }\n\n        if (Array.isArray(this.cell.stateSize)) {\n          this.states_ =\n              this.cell.stateSize.map(dim => tfc.zeros([batchSize, dim]));\n        } else {\n          this.states_[0] = tfc.zeros([batchSize, this.cell.stateSize]);\n        }\n      } else {\n        if (!Array.isArray(states)) {\n          states = [states];\n        }\n        if (states.length !== this.states_.length) {\n          throw new ValueError(\n              `Layer ${this.name} expects ${this.states_.length} state(s), ` +\n              `but it received ${states.length} state value(s). Input ` +\n              `received: ${states}`);\n        }\n\n        if (training === true) {\n          // Store old state tensors for complete disposal later, i.e., during\n          // the next no-arg call to this method. We do not dispose the old\n          // states immediately because that BPTT (among other things) require\n          // them.\n          this.keptStates.push(this.states_.slice());\n        } else {\n          tfc.dispose(this.states_);\n        }\n\n        for (let index = 0; index < this.states_.length; ++index) {\n          const value = states[index];\n          const dim = Array.isArray(this.cell.stateSize) ?\n              this.cell.stateSize[index] :\n              this.cell.stateSize;\n          const expectedShape = [batchSize, dim];\n          if (!util.arraysEqual(value.shape, expectedShape)) {\n            throw new ValueError(\n                `State ${index} is incompatible with layer ${this.name}: ` +\n                `expected shape=${expectedShape}, received shape=${\n                    value.shape}`);\n          }\n          this.states_[index] = value;\n        }\n      }\n      this.states_ = this.states_.map(state => tfc.keep(state.clone()));\n    });\n  }\n\n  apply(\n      inputs: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n      kwargs?: Kwargs): Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[] {\n    // TODO(cais): Figure out whether initialState is in kwargs or inputs.\n    let initialState: Tensor[]|SymbolicTensor[] =\n        kwargs == null ? null : kwargs['initialState'];\n    let constants: Tensor[]|SymbolicTensor[] =\n        kwargs == null ? null : kwargs['constants'];\n    if (kwargs == null) {\n      kwargs = {};\n    }\n\n    const standardized =\n        standardizeArgs(inputs, initialState, constants, this.numConstants);\n    inputs = standardized.inputs;\n    initialState = standardized.initialState;\n    constants = standardized.constants;\n\n    // If any of `initial_state` or `constants` are specified and are\n    // `tf.SymbolicTensor`s, then add them to the inputs and temporarily modify\n    // the input_spec to include them.\n\n    let additionalInputs: Array<Tensor|SymbolicTensor> = [];\n    let additionalSpecs: InputSpec[] = [];\n    if (initialState != null) {\n      kwargs['initialState'] = initialState;\n      additionalInputs = additionalInputs.concat(initialState);\n      this.stateSpec = [];\n      for (const state of initialState) {\n        this.stateSpec.push(new InputSpec({shape: state.shape}));\n      }\n      // TODO(cais): Use the following instead.\n      // this.stateSpec = initialState.map(state => new InputSpec({shape:\n      // state.shape}));\n      additionalSpecs = additionalSpecs.concat(this.stateSpec);\n    }\n    if (constants != null) {\n      kwargs['constants'] = constants;\n      additionalInputs = additionalInputs.concat(constants);\n      // TODO(cais): Add this.constantsSpec.\n      this.numConstants = constants.length;\n    }\n\n    const isTensor = additionalInputs[0] instanceof SymbolicTensor;\n    if (isTensor) {\n      // Compute full input spec, including state and constants.\n      const fullInput =\n          [inputs].concat(additionalInputs) as Tensor[] | SymbolicTensor[];\n      const fullInputSpec = this.inputSpec.concat(additionalSpecs);\n      // Perform the call with temporarily replaced inputSpec.\n      const originalInputSpec = this.inputSpec;\n      this.inputSpec = fullInputSpec;\n      const output = super.apply(fullInput, kwargs);\n      this.inputSpec = originalInputSpec;\n      return output;\n    } else {\n      return super.apply(inputs, kwargs);\n    }\n  }\n\n  // tslint:disable-next-line:no-any\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    // Input shape: `[samples, time (padded with zeros), input_dim]`.\n    // Note that the .build() method of subclasses **must** define\n    // this.inputSpec and this.stateSpec owith complete input shapes.\n    return tidy(() => {\n      const mask = kwargs == null ? null : kwargs['mask'] as Tensor;\n      const training = kwargs == null ? null : kwargs['training'];\n      let initialState: Tensor[] =\n          kwargs == null ? null : kwargs['initialState'];\n\n      inputs = getExactlyOneTensor(inputs);\n      if (initialState == null) {\n        if (this.stateful) {\n          initialState = this.states_;\n        } else {\n          initialState = this.getInitialState(inputs);\n        }\n      }\n\n      const numStates =\n          Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1;\n      if (initialState.length !== numStates) {\n        throw new ValueError(\n            `RNN Layer has ${numStates} state(s) but was passed ` +\n            `${initialState.length} initial state(s).`);\n      }\n      if (this.unroll) {\n        console.warn(\n            'Ignoring unroll = true for RNN layer, due to imperative backend.');\n      }\n\n      const cellCallKwargs: Kwargs = {training};\n\n      // TODO(cais): Add support for constants.\n      const step = (inputs: Tensor, states: Tensor[]) => {\n        // `inputs` and `states` are concatenated to form a single `Array` of\n        // `tf.Tensor`s as the input to `cell.call()`.\n        const outputs =\n            this.cell.call([inputs].concat(states), cellCallKwargs) as Tensor[];\n        // Marshall the return value into output and new states.\n        return [outputs[0], outputs.slice(1)] as [Tensor, Tensor[]];\n      };\n\n      // TODO(cais): Add support for constants.\n\n      const rnnOutputs =\n          rnn(step, inputs, initialState, this.goBackwards, mask, null,\n              this.unroll, this.returnSequences);\n      const lastOutput = rnnOutputs[0];\n      const outputs = rnnOutputs[1];\n      const states = rnnOutputs[2];\n\n      if (this.stateful) {\n        this.resetStates(states, training);\n      }\n\n      const output = this.returnSequences ? outputs : lastOutput;\n\n      // TODO(cais): Porperty set learning phase flag.\n\n      if (this.returnState) {\n        return [output].concat(states);\n      } else {\n        return output;\n      }\n    });\n  }\n\n  getInitialState(inputs: Tensor): Tensor[] {\n    return tidy(() => {\n      // Build an all-zero tensor of shape [samples, outputDim].\n      // [Samples, timeSteps, inputDim].\n      let initialState = tfc.zeros(inputs.shape);\n      // [Samples].\n      initialState = tfc.sum(initialState, [1, 2]);\n      initialState = K.expandDims(initialState);  // [Samples, 1].\n\n      if (Array.isArray(this.cell.stateSize)) {\n        return this.cell.stateSize.map(\n            dim => dim > 1 ? K.tile(initialState, [1, dim]) : initialState);\n      } else {\n        return this.cell.stateSize > 1 ?\n            [K.tile(initialState, [1, this.cell.stateSize])] :\n            [initialState];\n      }\n    });\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    if (!this.trainable) {\n      return [];\n    }\n    // Porting Note: In TypeScript, `this` is always an instance of `Layer`.\n    return this.cell.trainableWeights;\n  }\n\n  get nonTrainableWeights(): LayerVariable[] {\n    // Porting Note: In TypeScript, `this` is always an instance of `Layer`.\n    if (!this.trainable) {\n      return this.cell.weights;\n    }\n    return this.cell.nonTrainableWeights;\n  }\n\n  setFastWeightInitDuringBuild(value: boolean) {\n    super.setFastWeightInitDuringBuild(value);\n    if (this.cell != null) {\n      this.cell.setFastWeightInitDuringBuild(value);\n    }\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      returnSequences: this.returnSequences,\n      returnState: this.returnState,\n      goBackwards: this.goBackwards,\n      stateful: this.stateful,\n      unroll: this.unroll,\n    };\n    if (this.numConstants != null) {\n      config['numConstants'] = this.numConstants;\n    }\n    const cellConfig = this.cell.getConfig();\n    config['cell'] = {\n      'className': this.cell.getClassName(),\n      'config': cellConfig,\n    } as serialization.ConfigDictValue;\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict,\n      customObjects = {} as serialization.ConfigDict): T {\n    const cellConfig = config['cell'] as serialization.ConfigDict;\n    const cell = deserialize(cellConfig, customObjects) as RNNCell;\n    return new cls(Object.assign(config, {cell}));\n  }\n}\nserialization.registerClass(RNN);\n\n/**\n * An RNNCell layer.\n */\n// Porting Note: This is a common parent class for RNN cells. There is no\n// equivalent of this in PyKeras. Having a common parent class forgoes the\n//  need for `has_attr(cell, ...)` checks or its TypeScript equivalent.\n/** @doc {heading: 'Layers', subheading: 'Classes'} */\nexport abstract class RNNCell extends Layer {\n  /**\n   * Size(s) of the states.\n   * For RNN cells with only a single state, this is a single integer.\n   */\n  public stateSize: number|number[];\n  public dropoutMask: Tensor|Tensor[];\n  public recurrentDropoutMask: Tensor|Tensor[];\n}\n\nexport declare interface SimpleRNNCellLayerArgs extends LayerArgs {\n  /**\n   * units: Positive integer, dimensionality of the output space.\n   */\n  units: number;\n\n  /**\n   * Activation function to use.\n   * Default: hyperbolic tangent ('tanh').\n   * If you pass `null`,  'linear' activation will be applied.\n   */\n  activation?: ActivationIdentifier;\n\n  /**\n   * Whether the layer uses a bias vector.\n   */\n  useBias?: boolean;\n\n  /**\n   * Initializer for the `kernel` weights matrix, used for the linear\n   * transformation of the inputs.\n   */\n  kernelInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the `recurrentKernel` weights matrix, used for\n   * linear transformation of the recurrent state.\n   */\n  recurrentInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the bias vector.\n   */\n  biasInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Regularizer function applied to the `kernel` weights matrix.\n   */\n  kernelRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the `recurrent_kernel` weights matrix.\n   */\n  recurrentRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the bias vector.\n   */\n  biasRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Constraint function applied to the `kernel` weights matrix.\n   */\n  kernelConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint function applied to the `recurrentKernel` weights matrix.\n   */\n  recurrentConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraintfunction applied to the bias vector.\n   */\n  biasConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Float number between 0 and 1. Fraction of the units to drop for the linear\n   * transformation of the inputs.\n   */\n  dropout?: number;\n\n  /**\n   * Float number between 0 and 1. Fraction of the units to drop for the linear\n   * transformation of the recurrent state.\n   */\n  recurrentDropout?: number;\n}\n\nexport class SimpleRNNCell extends RNNCell {\n  /** @nocollapse */\n  static className = 'SimpleRNNCell';\n  readonly units: number;\n  readonly activation: Activation;\n  readonly useBias: boolean;\n\n  readonly kernelInitializer: Initializer;\n  readonly recurrentInitializer: Initializer;\n  readonly biasInitializer: Initializer;\n\n  readonly kernelConstraint: Constraint;\n  readonly recurrentConstraint: Constraint;\n  readonly biasConstraint: Constraint;\n\n  readonly kernelRegularizer: Regularizer;\n  readonly recurrentRegularizer: Regularizer;\n  readonly biasRegularizer: Regularizer;\n\n  readonly dropout: number;\n  readonly recurrentDropout: number;\n\n  readonly stateSize: number;\n\n  kernel: LayerVariable;\n  recurrentKernel: LayerVariable;\n  bias: LayerVariable;\n\n  readonly DEFAULT_ACTIVATION = 'tanh';\n  readonly DEFAULT_KERNEL_INITIALIZER = 'glorotNormal';\n  readonly DEFAULT_RECURRENT_INITIALIZER = 'orthogonal';\n  readonly DEFAULT_BIAS_INITIALIZER: InitializerIdentifier = 'zeros';\n\n  constructor(args: SimpleRNNCellLayerArgs) {\n    super(args);\n    this.units = args.units;\n    assertPositiveInteger(this.units, `units`);\n    this.activation = getActivation(\n        args.activation == null ? this.DEFAULT_ACTIVATION : args.activation);\n    this.useBias = args.useBias == null ? true : args.useBias;\n\n    this.kernelInitializer = getInitializer(\n        args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.recurrentInitializer = getInitializer(\n        args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER);\n\n    this.biasInitializer =\n        getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER);\n\n    this.kernelRegularizer = getRegularizer(args.kernelRegularizer);\n    this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer);\n    this.biasRegularizer = getRegularizer(args.biasRegularizer);\n\n    this.kernelConstraint = getConstraint(args.kernelConstraint);\n    this.recurrentConstraint = getConstraint(args.recurrentConstraint);\n    this.biasConstraint = getConstraint(args.biasConstraint);\n\n    this.dropout = math_utils.min(\n        [1, math_utils.max([0, args.dropout == null ? 0 : args.dropout])]);\n    this.recurrentDropout = math_utils.min([\n      1,\n      math_utils.max(\n          [0, args.recurrentDropout == null ? 0 : args.recurrentDropout])\n    ]);\n    this.stateSize = this.units;\n    this.dropoutMask = null;\n    this.recurrentDropoutMask = null;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    // TODO(cais): Use regularizer.\n    this.kernel = this.addWeight(\n        'kernel', [inputShape[inputShape.length - 1], this.units], null,\n        this.kernelInitializer, this.kernelRegularizer, true,\n        this.kernelConstraint);\n    this.recurrentKernel = this.addWeight(\n        'recurrent_kernel', [this.units, this.units], null,\n        this.recurrentInitializer, this.recurrentRegularizer, true,\n        this.recurrentConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [this.units], null, this.biasInitializer,\n          this.biasRegularizer, true, this.biasConstraint);\n    } else {\n      this.bias = null;\n    }\n    this.built = true;\n  }\n\n  // Porting Note: PyKeras' equivalent of this method takes two tensor inputs:\n  //   `inputs` and `states`. Here, the two tensors are combined into an\n  //   `Tensor[]` Array as the first input argument.\n  //   Similarly, PyKeras' equivalent of this method returns two values:\n  //    `output` and `[output]`. Here the two are combined into one length-2\n  //    `Tensor[]`, consisting of `output` repeated.\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = inputs as Tensor[];\n      if (inputs.length !== 2) {\n        throw new ValueError(\n            `SimpleRNNCell expects 2 input Tensors, got ${inputs.length}.`);\n      }\n      let prevOutput = inputs[1];\n      inputs = inputs[0];\n      const training = kwargs['training'] == null ? false : kwargs['training'];\n\n      if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) {\n        this.dropoutMask = generateDropoutMask(\n                               () => tfc.onesLike(inputs as Tensor),\n                               this.dropout, training) as Tensor;\n      }\n      if (0 < this.recurrentDropout && this.recurrentDropout < 1 &&\n          this.recurrentDropoutMask == null) {\n        this.recurrentDropoutMask =\n            generateDropoutMask(\n                () => tfc.onesLike(prevOutput), this.recurrentDropout,\n                training) as Tensor;\n      }\n      let h: Tensor;\n      const dpMask: Tensor = this.dropoutMask as Tensor;\n      const recDpMask: Tensor = this.recurrentDropoutMask as Tensor;\n      if (dpMask != null) {\n        h = K.dot(tfc.mul(inputs, dpMask), this.kernel.read());\n      } else {\n        h = K.dot(inputs, this.kernel.read());\n      }\n      if (this.bias != null) {\n        h = K.biasAdd(h, this.bias.read());\n      }\n      if (recDpMask != null) {\n        prevOutput = tfc.mul(prevOutput, recDpMask);\n      }\n      let output = tfc.add(h, K.dot(prevOutput, this.recurrentKernel.read()));\n      if (this.activation != null) {\n        output = this.activation.apply(output);\n      }\n\n      // TODO(cais): Properly set learning phase on output tensor?\n      return [output, output];\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(SimpleRNNCell);\n\nexport declare interface SimpleRNNLayerArgs extends BaseRNNLayerArgs {\n  /**\n   * Positive integer, dimensionality of the output space.\n   */\n  units: number;\n\n  /**\n   * Activation function to use.\n   *\n   * Defaults to  hyperbolic tangent (`tanh`)\n   *\n   * If you pass `null`, no activation will be applied.\n   */\n  activation?: ActivationIdentifier;\n\n  /**\n   * Whether the layer uses a bias vector.\n   */\n  useBias?: boolean;\n\n  /**\n   * Initializer for the `kernel` weights matrix, used for the linear\n   * transformation of the inputs.\n   */\n  kernelInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the `recurrentKernel` weights matrix, used for\n   * linear transformation of the recurrent state.\n   */\n  recurrentInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Initializer for the bias vector.\n   */\n  biasInitializer?: InitializerIdentifier|Initializer;\n\n  /**\n   * Regularizer function applied to the kernel weights matrix.\n   */\n  kernelRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the recurrentKernel weights matrix.\n   */\n  recurrentRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Regularizer function applied to the bias vector.\n   */\n  biasRegularizer?: RegularizerIdentifier|Regularizer;\n\n  /**\n   * Constraint function applied to the kernel weights matrix.\n   */\n  kernelConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint function applied to the recurrentKernel weights matrix.\n   */\n  recurrentConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Constraint function applied to the bias vector.\n   */\n  biasConstraint?: ConstraintIdentifier|Constraint;\n\n  /**\n   * Number between 0 and 1. Fraction of the units to drop for the linear\n   * transformation of the inputs.\n   */\n  dropout?: number;\n\n  /**\n   * Number between 0 and 1. Fraction of the units to drop for the linear\n   * transformation of the recurrent state.\n   */\n  recurrentDropout?: number;\n}\n\n/**\n * RNNLayerConfig is identical to BaseRNNLayerConfig, except it makes the\n * `cell` property required. This interface is to be used with constructors\n * of concrete RNN layer subtypes.\n */\nexport declare interface RNNLayerArgs extends BaseRNNLayerArgs {\n  cell: RNNCell|RNNCell[];\n}\n\nexport class SimpleRNN extends RNN {\n  /** @nocollapse */\n  static className = 'SimpleRNN';\n  constructor(args: SimpleRNNLayerArgs) {\n    args.cell = new SimpleRNNCell(args);\n    super(args as RNNLayerArgs);\n    // TODO(cais): Add activityRegularizer.\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      if (this.cell.dropoutMask != null) {\n        tfc.dispose(this.cell.dropoutMask);\n        this.cell.dropoutMask = null;\n      }\n      if (this.cell.recurrentDropoutMask != null) {\n        tfc.dispose(this.cell.recurrentDropoutMask);\n        this.cell.recurrentDropoutMask = null;\n      }\n      const mask = kwargs == null ? null : kwargs['mask'];\n      const training = kwargs == null ? null : kwargs['training'];\n      const initialState: Tensor[] =\n          kwargs == null ? null : kwargs['initialState'];\n      return super.call(inputs, {mask, training, initialState});\n    });\n  }\n\n  // TODO(cais): Research possibility of refactoring out the tedious all\n  //   the getters that delegate to `this.cell` below.\n  get units(): number {\n    return (this.cell as SimpleRNNCell).units;\n  }\n\n  get activation(): Activation {\n    return (this.cell as SimpleRNNCell).activation;\n  }\n\n  get useBias(): boolean {\n    return (this.cell as SimpleRNNCell).useBias;\n  }\n\n  get kernelInitializer(): Initializer {\n    return (this.cell as SimpleRNNCell).kernelInitializer;\n  }\n\n  get recurrentInitializer(): Initializer {\n    return (this.cell as SimpleRNNCell).recurrentInitializer;\n  }\n\n  get biasInitializer(): Initializer {\n    return (this.cell as SimpleRNNCell).biasInitializer;\n  }\n\n  get kernelRegularizer(): Regularizer {\n    return (this.cell as SimpleRNNCell).kernelRegularizer;\n  }\n\n  get recurrentRegularizer(): Regularizer {\n    return (this.cell as SimpleRNNCell).recurrentRegularizer;\n  }\n\n  get biasRegularizer(): Regularizer {\n    return (this.cell as SimpleRNNCell).biasRegularizer;\n  }\n\n  get kernelConstraint(): Constraint {\n    return (this.cell as SimpleRNNCell).kernelConstraint;\n  }\n\n  get recurrentConstraint(): Constraint {\n    return (this.cell as SimpleRNNCell).recurrentConstraint;\n  }\n\n  get biasConstraint(): Constraint {\n    return (this.cell as SimpleRNNCell).biasConstraint;\n  }\n\n  get dropout(): number {\n    return (this.cell as SimpleRNNCell).dropout;\n  }\n\n  get recurrentDropout(): number {\n    return (this.cell as SimpleRNNCell).recurrentDropout;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n    };\n    const baseConfig = super.getConfig();\n    delete baseConfig['cell'];\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict): T {\n    return new cls(config);\n  }\n}\nserialization.registerClass(SimpleRNN);\n\n// Porting Note: Since this is a superset of SimpleRNNLayerConfig, we extend\n//   that interface instead of repeating the fields.\nexport declare interface GRUCellLayerArgs extends SimpleRNNCellLayerArgs {\n  /**\n   * Activation function to use for the recurrent step.\n   *\n   * Defaults to hard sigmoid (`hardSigmoid`).\n   *\n   * If `null`, no activation is applied.\n   */\n  recurrentActivation?: ActivationIdentifier;\n\n  /**\n   * Implementation mode, either 1 or 2.\n   *\n   * Mode 1 will structure its operations as a larger number of\n   *   smaller dot products and additions.\n   *\n   * Mode 2 will batch them into fewer, larger operations. These modes will\n   * have different performance profiles on different hardware and\n   * for different applications.\n   *\n   * Note: For superior performance, TensorFlow.js always uses implementation\n   * 2, regardless of the actual value of this configuration field.\n   */\n  implementation?: number;\n}\n\nexport class GRUCell extends RNNCell {\n  /** @nocollapse */\n  static className = 'GRUCell';\n  readonly units: number;\n  readonly activation: Activation;\n  readonly recurrentActivation: Activation;\n  readonly useBias: boolean;\n\n  readonly kernelInitializer: Initializer;\n  readonly recurrentInitializer: Initializer;\n  readonly biasInitializer: Initializer;\n\n  readonly kernelRegularizer: Regularizer;\n  readonly recurrentRegularizer: Regularizer;\n  readonly biasRegularizer: Regularizer;\n\n  readonly kernelConstraint: Constraint;\n  readonly recurrentConstraint: Constraint;\n  readonly biasConstraint: Constraint;\n\n  readonly dropout: number;\n  readonly recurrentDropout: number;\n\n  readonly stateSize: number;\n  readonly implementation: number;\n\n  readonly DEFAULT_ACTIVATION = 'tanh';\n  readonly DEFAULT_RECURRENT_ACTIVATION: ActivationIdentifier = 'hardSigmoid';\n\n  readonly DEFAULT_KERNEL_INITIALIZER = 'glorotNormal';\n  readonly DEFAULT_RECURRENT_INITIALIZER = 'orthogonal';\n  readonly DEFAULT_BIAS_INITIALIZER: InitializerIdentifier = 'zeros';\n\n  kernel: LayerVariable;\n  recurrentKernel: LayerVariable;\n  bias: LayerVariable;\n\n  constructor(args: GRUCellLayerArgs) {\n    super(args);\n\n    this.units = args.units;\n    assertPositiveInteger(this.units, 'units');\n    this.activation = getActivation(\n        args.activation === undefined ? this.DEFAULT_ACTIVATION :\n                                        args.activation);\n    this.recurrentActivation = getActivation(\n        args.recurrentActivation === undefined ?\n            this.DEFAULT_RECURRENT_ACTIVATION :\n            args.recurrentActivation);\n    this.useBias = args.useBias == null ? true : args.useBias;\n\n    this.kernelInitializer = getInitializer(\n        args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.recurrentInitializer = getInitializer(\n        args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER);\n\n    this.biasInitializer =\n        getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER);\n\n    this.kernelRegularizer = getRegularizer(args.kernelRegularizer);\n    this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer);\n    this.biasRegularizer = getRegularizer(args.biasRegularizer);\n\n    this.kernelConstraint = getConstraint(args.kernelConstraint);\n    this.recurrentConstraint = getConstraint(args.recurrentConstraint);\n    this.biasConstraint = getConstraint(args.biasConstraint);\n\n    this.dropout = math_utils.min(\n        [1, math_utils.max([0, args.dropout == null ? 0 : args.dropout])]);\n    this.recurrentDropout = math_utils.min([\n      1,\n      math_utils.max(\n          [0, args.recurrentDropout == null ? 0 : args.recurrentDropout])\n    ]);\n    this.implementation = args.implementation;\n    this.stateSize = this.units;\n    this.dropoutMask = null;\n    this.recurrentDropoutMask = null;\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const inputDim = inputShape[inputShape.length - 1];\n    this.kernel = this.addWeight(\n        'kernel', [inputDim, this.units * 3], null, this.kernelInitializer,\n        this.kernelRegularizer, true, this.kernelConstraint);\n    this.recurrentKernel = this.addWeight(\n        'recurrent_kernel', [this.units, this.units * 3], null,\n        this.recurrentInitializer, this.recurrentRegularizer, true,\n        this.recurrentConstraint);\n    if (this.useBias) {\n      this.bias = this.addWeight(\n          'bias', [this.units * 3], null, this.biasInitializer,\n          this.biasRegularizer, true, this.biasConstraint);\n    } else {\n      this.bias = null;\n    }\n    // Porting Notes: Unlike the PyKeras implementation, we perform slicing\n    //   of the weights and bias in the call() method, at execution time.\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = inputs as Tensor[];\n      if (inputs.length !== 2) {\n        throw new ValueError(\n            `GRUCell expects 2 input Tensors (inputs, h, c), got ` +\n            `${inputs.length}.`);\n      }\n\n      const training = kwargs['training'] == null ? false : kwargs['training'];\n      let hTMinus1 = inputs[1];  // Previous memory state.\n      inputs = inputs[0];\n\n      // Note: For superior performance, TensorFlow.js always uses\n      // implementation 2, regardless of the actual value of\n      // config.implementation.\n      if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) {\n        this.dropoutMask = generateDropoutMask(\n                               () => tfc.onesLike(inputs as Tensor),\n                               this.dropout, training, 3) as Tensor[];\n      }\n      if (0 < this.recurrentDropout && this.recurrentDropout < 1 &&\n          this.recurrentDropoutMask == null) {\n        this.recurrentDropoutMask =\n            generateDropoutMask(\n                () => tfc.onesLike(hTMinus1), this.recurrentDropout, training,\n                3) as Tensor[];\n      }\n      const dpMask = this.dropoutMask as [Tensor, Tensor, Tensor];\n      const recDpMask = this.recurrentDropoutMask as [Tensor, Tensor, Tensor];\n      let z: Tensor;\n      let r: Tensor;\n      let hh: Tensor;\n\n      if (0 < this.dropout && this.dropout < 1) {\n        inputs = tfc.mul(inputs, dpMask[0]);\n      }\n      let matrixX = K.dot(inputs, this.kernel.read());\n      if (this.useBias) {\n        matrixX = K.biasAdd(matrixX, this.bias.read());\n      }\n      if (0 < this.recurrentDropout && this.recurrentDropout < 1) {\n        hTMinus1 = tfc.mul(hTMinus1, recDpMask[0]);\n      }\n\n      const recurrentKernelValue = this.recurrentKernel.read();\n      const [rk1, rk2] = tfc.split(\n          recurrentKernelValue, [2 * this.units, this.units],\n          recurrentKernelValue.rank - 1);\n      const matrixInner = K.dot(hTMinus1, rk1);\n\n      const [xZ, xR, xH] = tfc.split(matrixX, 3, matrixX.rank - 1);\n      const [recurrentZ, recurrentR] =\n          tfc.split(matrixInner, 2, matrixInner.rank - 1);\n      z = this.recurrentActivation.apply(tfc.add(xZ, recurrentZ));\n      r = this.recurrentActivation.apply(tfc.add(xR, recurrentR));\n\n      const recurrentH = K.dot(tfc.mul(r, hTMinus1), rk2);\n      hh = this.activation.apply(tfc.add(xH, recurrentH));\n\n      const h =\n          tfc.add(tfc.mul(z, hTMinus1), tfc.mul(tfc.add(1, tfc.neg(z)), hh));\n      // TODO(cais): Add use_learning_phase flag properly.\n      return [h, h];\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      recurrentActivation: serializeActivation(this.recurrentActivation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n      implementation: this.implementation,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(GRUCell);\n\n// Porting Note: Since this is a superset of SimpleRNNLayerConfig, we inherit\n//   from that interface instead of repeating the fields here.\nexport declare interface GRULayerArgs extends SimpleRNNLayerArgs {\n  /**\n   * Activation function to use for the recurrent step.\n   *\n   * Defaults to hard sigmoid (`hardSigmoid`).\n   *\n   * If `null`, no activation is applied.\n   */\n  recurrentActivation?: ActivationIdentifier;\n\n  /**\n   * Implementation mode, either 1 or 2.\n   *\n   * Mode 1 will structure its operations as a larger number of\n   * smaller dot products and additions.\n   *\n   * Mode 2 will batch them into fewer, larger operations. These modes will\n   * have different performance profiles on different hardware and\n   * for different applications.\n   *\n   * Note: For superior performance, TensorFlow.js always uses implementation\n   * 2, regardless of the actual value of this configuration field.\n   */\n  implementation?: number;\n}\n\nexport class GRU extends RNN {\n  /** @nocollapse */\n  static className = 'GRU';\n  constructor(args: GRULayerArgs) {\n    if (args.implementation === 0) {\n      console.warn(\n          '`implementation=0` has been deprecated, and now defaults to ' +\n          '`implementation=1`. Please update your layer call.');\n    }\n    args.cell = new GRUCell(args);\n    super(args as RNNLayerArgs);\n    // TODO(cais): Add activityRegularizer.\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      if (this.cell.dropoutMask != null) {\n        tfc.dispose(this.cell.dropoutMask);\n        this.cell.dropoutMask = null;\n      }\n      if (this.cell.recurrentDropoutMask != null) {\n        tfc.dispose(this.cell.recurrentDropoutMask);\n        this.cell.recurrentDropoutMask = null;\n      }\n      const mask = kwargs == null ? null : kwargs['mask'];\n      const training = kwargs == null ? null : kwargs['training'];\n      const initialState: Tensor[] =\n          kwargs == null ? null : kwargs['initialState'];\n      return super.call(inputs, {mask, training, initialState});\n    });\n  }\n\n  get units(): number {\n    return (this.cell as GRUCell).units;\n  }\n\n  get activation(): Activation {\n    return (this.cell as GRUCell).activation;\n  }\n\n  get recurrentActivation(): Activation {\n    return (this.cell as GRUCell).recurrentActivation;\n  }\n\n  get useBias(): boolean {\n    return (this.cell as GRUCell).useBias;\n  }\n\n  get kernelInitializer(): Initializer {\n    return (this.cell as GRUCell).kernelInitializer;\n  }\n\n  get recurrentInitializer(): Initializer {\n    return (this.cell as GRUCell).recurrentInitializer;\n  }\n\n  get biasInitializer(): Initializer {\n    return (this.cell as GRUCell).biasInitializer;\n  }\n\n  get kernelRegularizer(): Regularizer {\n    return (this.cell as GRUCell).kernelRegularizer;\n  }\n\n  get recurrentRegularizer(): Regularizer {\n    return (this.cell as GRUCell).recurrentRegularizer;\n  }\n\n  get biasRegularizer(): Regularizer {\n    return (this.cell as GRUCell).biasRegularizer;\n  }\n\n  get kernelConstraint(): Constraint {\n    return (this.cell as GRUCell).kernelConstraint;\n  }\n\n  get recurrentConstraint(): Constraint {\n    return (this.cell as GRUCell).recurrentConstraint;\n  }\n\n  get biasConstraint(): Constraint {\n    return (this.cell as GRUCell).biasConstraint;\n  }\n\n  get dropout(): number {\n    return (this.cell as GRUCell).dropout;\n  }\n\n  get recurrentDropout(): number {\n    return (this.cell as GRUCell).recurrentDropout;\n  }\n\n  get implementation(): number {\n    return (this.cell as GRUCell).implementation;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      recurrentActivation: serializeActivation(this.recurrentActivation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n      implementation: this.implementation,\n    };\n    const baseConfig = super.getConfig();\n    delete baseConfig['cell'];\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict): T {\n    if (config['implmentation'] === 0) {\n      config['implementation'] = 1;\n    }\n    return new cls(config);\n  }\n}\nserialization.registerClass(GRU);\n\n// Porting Note: Since this is a superset of SimpleRNNLayerConfig, we extend\n//   that interface instead of repeating the fields.\nexport declare interface LSTMCellLayerArgs extends SimpleRNNCellLayerArgs {\n  /**\n   * Activation function to use for the recurrent step.\n   *\n   * Defaults to hard sigmoid (`hardSigmoid`).\n   *\n   * If `null`, no activation is applied.\n   */\n  recurrentActivation?: ActivationIdentifier;\n\n  /**\n   * If `true`, add 1 to the bias of the forget gate at initialization.\n   * Setting it to `true` will also force `biasInitializer = 'zeros'`.\n   * This is recommended in\n   * [Jozefowicz et\n   * al.](http://www.jmlr.org/proceedings/papers/v37/jozefowicz15.pdf).\n   */\n  unitForgetBias?: boolean;\n\n  /**\n   * Implementation mode, either 1 or 2.\n   *\n   * Mode 1 will structure its operations as a larger number of\n   *   smaller dot products and additions.\n   *\n   * Mode 2 will batch them into fewer, larger operations. These modes will\n   * have different performance profiles on different hardware and\n   * for different applications.\n   *\n   * Note: For superior performance, TensorFlow.js always uses implementation\n   * 2, regardless of the actual value of this configuration field.\n   */\n  implementation?: number;\n}\n\nexport class LSTMCell extends RNNCell {\n  /** @nocollapse */\n  static className = 'LSTMCell';\n  readonly units: number;\n  readonly activation: Activation;\n  readonly recurrentActivation: Activation;\n  readonly useBias: boolean;\n\n  readonly kernelInitializer: Initializer;\n  readonly recurrentInitializer: Initializer;\n  readonly biasInitializer: Initializer;\n  readonly unitForgetBias: boolean;\n\n  readonly kernelConstraint: Constraint;\n  readonly recurrentConstraint: Constraint;\n  readonly biasConstraint: Constraint;\n\n  readonly kernelRegularizer: Regularizer;\n  readonly recurrentRegularizer: Regularizer;\n  readonly biasRegularizer: Regularizer;\n\n  readonly dropout: number;\n  readonly recurrentDropout: number;\n\n  readonly stateSize: number[];\n  readonly implementation: number;\n\n  readonly DEFAULT_ACTIVATION = 'tanh';\n  readonly DEFAULT_RECURRENT_ACTIVATION = 'hardSigmoid';\n  readonly DEFAULT_KERNEL_INITIALIZER = 'glorotNormal';\n  readonly DEFAULT_RECURRENT_INITIALIZER = 'orthogonal';\n\n  readonly DEFAULT_BIAS_INITIALIZER = 'zeros';\n\n  kernel: LayerVariable;\n  recurrentKernel: LayerVariable;\n  bias: LayerVariable;\n\n  constructor(args: LSTMCellLayerArgs) {\n    super(args);\n\n    this.units = args.units;\n    assertPositiveInteger(this.units, 'units');\n    this.activation = getActivation(\n        args.activation === undefined ? this.DEFAULT_ACTIVATION :\n                                        args.activation);\n    this.recurrentActivation = getActivation(\n        args.recurrentActivation === undefined ?\n            this.DEFAULT_RECURRENT_ACTIVATION :\n            args.recurrentActivation);\n    this.useBias = args.useBias == null ? true : args.useBias;\n\n    this.kernelInitializer = getInitializer(\n        args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER);\n    this.recurrentInitializer = getInitializer(\n        args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER);\n\n    this.biasInitializer =\n        getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER);\n    this.unitForgetBias = args.unitForgetBias;\n\n    this.kernelRegularizer = getRegularizer(args.kernelRegularizer);\n    this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer);\n    this.biasRegularizer = getRegularizer(args.biasRegularizer);\n\n    this.kernelConstraint = getConstraint(args.kernelConstraint);\n    this.recurrentConstraint = getConstraint(args.recurrentConstraint);\n    this.biasConstraint = getConstraint(args.biasConstraint);\n\n    this.dropout = math_utils.min(\n        [1, math_utils.max([0, args.dropout == null ? 0 : args.dropout])]);\n    this.recurrentDropout = math_utils.min([\n      1,\n      math_utils.max(\n          [0, args.recurrentDropout == null ? 0 : args.recurrentDropout])\n    ]);\n    this.implementation = args.implementation;\n    this.stateSize = [this.units, this.units];\n    this.dropoutMask = null;\n    this.recurrentDropoutMask = null;\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    const inputDim = inputShape[inputShape.length - 1];\n    this.kernel = this.addWeight(\n        'kernel', [inputDim, this.units * 4], null, this.kernelInitializer,\n        this.kernelRegularizer, true, this.kernelConstraint);\n    this.recurrentKernel = this.addWeight(\n        'recurrent_kernel', [this.units, this.units * 4], null,\n        this.recurrentInitializer, this.recurrentRegularizer, true,\n        this.recurrentConstraint);\n    let biasInitializer: Initializer;\n    if (this.useBias) {\n      if (this.unitForgetBias) {\n        const capturedBiasInit = this.biasInitializer;\n        const capturedUnits = this.units;\n        biasInitializer = new (class CustomInit extends Initializer {\n          /** @nocollapse */\n          static className = 'CustomInit';\n\n          apply(shape: Shape, dtype?: DataType): Tensor {\n            // TODO(cais): More informative variable names?\n            const bI = capturedBiasInit.apply([capturedUnits]);\n            const bF = (new Ones()).apply([capturedUnits]);\n            const bCAndH = capturedBiasInit.apply([capturedUnits * 2]);\n            return K.concatAlongFirstAxis(\n                K.concatAlongFirstAxis(bI, bF), bCAndH);\n          }\n        })();\n      } else {\n        biasInitializer = this.biasInitializer;\n      }\n      this.bias = this.addWeight(\n          'bias', [this.units * 4], null, biasInitializer, this.biasRegularizer,\n          true, this.biasConstraint);\n    } else {\n      this.bias = null;\n    }\n    // Porting Notes: Unlike the PyKeras implementation, we perform slicing\n    //   of the weights and bias in the call() method, at execution time.\n    this.built = true;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const training = kwargs['training'] == null ? false : kwargs['training'];\n      inputs = inputs as Tensor[];\n      if (inputs.length !== 3) {\n        throw new ValueError(\n            `LSTMCell expects 3 input Tensors (inputs, h, c), got ` +\n            `${inputs.length}.`);\n      }\n      let hTMinus1 = inputs[1];    // Previous memory state.\n      const cTMinus1 = inputs[2];  // Previous carry state.\n      inputs = inputs[0];\n      if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) {\n        this.dropoutMask = generateDropoutMask(\n                               () => tfc.onesLike(inputs as Tensor),\n                               this.dropout, training, 4) as Tensor[];\n      }\n      if (0 < this.recurrentDropout && this.recurrentDropout < 1 &&\n          this.recurrentDropoutMask == null) {\n        this.recurrentDropoutMask =\n            generateDropoutMask(\n                () => tfc.onesLike(hTMinus1), this.recurrentDropout, training,\n                4) as Tensor[];\n      }\n      const dpMask = this.dropoutMask as [Tensor, Tensor, Tensor, Tensor];\n      const recDpMask =\n          this.recurrentDropoutMask as [Tensor, Tensor, Tensor, Tensor];\n\n      // Note: For superior performance, TensorFlow.js always uses\n      // implementation 2 regardless of the actual value of\n      // config.implementation.\n      let i: Tensor;\n      let f: Tensor;\n      let c: Tensor;\n      let o: Tensor;\n      if (0 < this.dropout && this.dropout < 1) {\n        inputs = tfc.mul(inputs, dpMask[0]);\n      }\n      let z = K.dot(inputs, this.kernel.read());\n      if (0 < this.recurrentDropout && this.recurrentDropout < 1) {\n        hTMinus1 = tfc.mul(hTMinus1, recDpMask[0]);\n      }\n      z = tfc.add(z, K.dot(hTMinus1, this.recurrentKernel.read()));\n      if (this.useBias) {\n        z = K.biasAdd(z, this.bias.read());\n      }\n\n      const [z0, z1, z2, z3] = tfc.split(z, 4, z.rank - 1);\n\n      i = this.recurrentActivation.apply(z0);\n      f = this.recurrentActivation.apply(z1);\n      c = tfc.add(tfc.mul(f, cTMinus1), tfc.mul(i, this.activation.apply(z2)));\n      o = this.recurrentActivation.apply(z3);\n\n      const h = tfc.mul(o, this.activation.apply(c));\n      // TODO(cais): Add use_learning_phase flag properly.\n      return [h, h, c];\n    });\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      recurrentActivation: serializeActivation(this.recurrentActivation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      unitForgetBias: this.unitForgetBias,\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n      implementation: this.implementation,\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n}\nserialization.registerClass(LSTMCell);\n\n// Porting Note: Since this is a superset of SimpleRNNLayerConfig, we inherit\n//   from that interface instead of repeating the fields here.\nexport declare interface LSTMLayerArgs extends SimpleRNNLayerArgs {\n  /**\n   * Activation function to use for the recurrent step.\n   *\n   * Defaults to hard sigmoid (`hardSigmoid`).\n   *\n   * If `null`, no activation is applied.\n   */\n  recurrentActivation?: ActivationIdentifier;\n\n  /**\n   * If `true`, add 1 to the bias of the forget gate at initialization.\n   * Setting it to `true` will also force `biasInitializer = 'zeros'`.\n   * This is recommended in\n   * [Jozefowicz et\n   * al.](http://www.jmlr.org/proceedings/papers/v37/jozefowicz15.pdf).\n   */\n  unitForgetBias?: boolean;\n\n  /**\n   * Implementation mode, either 1 or 2.\n   *   Mode 1 will structure its operations as a larger number of\n   *   smaller dot products and additions, whereas mode 2 will\n   *   batch them into fewer, larger operations. These modes will\n   *   have different performance profiles on different hardware and\n   *   for different applications.\n   *\n   * Note: For superior performance, TensorFlow.js always uses implementation\n   * 2, regardless of the actual value of this config field.\n   */\n  implementation?: number;\n}\n\nexport class LSTM extends RNN {\n  /** @nocollapse */\n  static className = 'LSTM';\n  constructor(args: LSTMLayerArgs) {\n    if (args.implementation === 0) {\n      console.warn(\n          '`implementation=0` has been deprecated, and now defaults to ' +\n          '`implementation=1`. Please update your layer call.');\n    }\n    args.cell = new LSTMCell(args);\n    super(args as RNNLayerArgs);\n    // TODO(cais): Add activityRegularizer.\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      if (this.cell.dropoutMask != null) {\n        tfc.dispose(this.cell.dropoutMask);\n        this.cell.dropoutMask = null;\n      }\n      if (this.cell.recurrentDropoutMask != null) {\n        tfc.dispose(this.cell.recurrentDropoutMask);\n        this.cell.recurrentDropoutMask = null;\n      }\n      const mask = kwargs == null ? null : kwargs['mask'];\n      const training = kwargs == null ? null : kwargs['training'];\n      const initialState: Tensor[] =\n          kwargs == null ? null : kwargs['initialState'];\n      return super.call(inputs, {mask, training, initialState});\n    });\n  }\n\n  get units(): number {\n    return (this.cell as LSTMCell).units;\n  }\n\n  get activation(): Activation {\n    return (this.cell as LSTMCell).activation;\n  }\n\n  get recurrentActivation(): Activation {\n    return (this.cell as LSTMCell).recurrentActivation;\n  }\n\n  get useBias(): boolean {\n    return (this.cell as LSTMCell).useBias;\n  }\n\n  get kernelInitializer(): Initializer {\n    return (this.cell as LSTMCell).kernelInitializer;\n  }\n\n  get recurrentInitializer(): Initializer {\n    return (this.cell as LSTMCell).recurrentInitializer;\n  }\n\n  get biasInitializer(): Initializer {\n    return (this.cell as LSTMCell).biasInitializer;\n  }\n\n  get unitForgetBias(): boolean {\n    return (this.cell as LSTMCell).unitForgetBias;\n  }\n\n  get kernelRegularizer(): Regularizer {\n    return (this.cell as LSTMCell).kernelRegularizer;\n  }\n\n  get recurrentRegularizer(): Regularizer {\n    return (this.cell as LSTMCell).recurrentRegularizer;\n  }\n\n  get biasRegularizer(): Regularizer {\n    return (this.cell as LSTMCell).biasRegularizer;\n  }\n\n  get kernelConstraint(): Constraint {\n    return (this.cell as LSTMCell).kernelConstraint;\n  }\n\n  get recurrentConstraint(): Constraint {\n    return (this.cell as LSTMCell).recurrentConstraint;\n  }\n\n  get biasConstraint(): Constraint {\n    return (this.cell as LSTMCell).biasConstraint;\n  }\n\n  get dropout(): number {\n    return (this.cell as LSTMCell).dropout;\n  }\n\n  get recurrentDropout(): number {\n    return (this.cell as LSTMCell).recurrentDropout;\n  }\n\n  get implementation(): number {\n    return (this.cell as LSTMCell).implementation;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      units: this.units,\n      activation: serializeActivation(this.activation),\n      recurrentActivation: serializeActivation(this.recurrentActivation),\n      useBias: this.useBias,\n      kernelInitializer: serializeInitializer(this.kernelInitializer),\n      recurrentInitializer: serializeInitializer(this.recurrentInitializer),\n      biasInitializer: serializeInitializer(this.biasInitializer),\n      unitForgetBias: this.unitForgetBias,\n      kernelRegularizer: serializeRegularizer(this.kernelRegularizer),\n      recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer),\n      biasRegularizer: serializeRegularizer(this.biasRegularizer),\n      activityRegularizer: serializeRegularizer(this.activityRegularizer),\n      kernelConstraint: serializeConstraint(this.kernelConstraint),\n      recurrentConstraint: serializeConstraint(this.recurrentConstraint),\n      biasConstraint: serializeConstraint(this.biasConstraint),\n      dropout: this.dropout,\n      recurrentDropout: this.recurrentDropout,\n      implementation: this.implementation,\n    };\n    const baseConfig = super.getConfig();\n    delete baseConfig['cell'];\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict): T {\n    if (config['implmentation'] === 0) {\n      config['implementation'] = 1;\n    }\n    return new cls(config);\n  }\n}\nserialization.registerClass(LSTM);\n\nexport declare interface StackedRNNCellsArgs extends LayerArgs {\n  /**\n   * A `Array` of `RNNCell` instances.\n   */\n  cells: RNNCell[];\n}\n\nexport class StackedRNNCells extends RNNCell {\n  /** @nocollapse */\n  static className = 'StackedRNNCells';\n  protected cells: RNNCell[];\n\n  constructor(args: StackedRNNCellsArgs) {\n    super(args);\n    this.cells = args.cells;\n  }\n\n  get stateSize(): number[] {\n    // States are a flat list in reverse order of the cell stack.\n    // This allows perserving the requirement `stack.statesize[0] ===\n    // outputDim`. E.g., states of a 2-layer LSTM would be `[h2, c2, h1, c1]`,\n    // assuming one LSTM has states `[h, c]`.\n    const stateSize: number[] = [];\n    for (const cell of this.cells.slice().reverse()) {\n      if (Array.isArray(cell.stateSize)) {\n        stateSize.push(...cell.stateSize);\n      } else {\n        stateSize.push(cell.stateSize);\n      }\n    }\n    return stateSize;\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      inputs = inputs as Tensor[];\n      let states = inputs.slice(1);\n\n      // Recover per-cell states.\n      const nestedStates: Tensor[][] = [];\n      for (const cell of this.cells.slice().reverse()) {\n        if (Array.isArray(cell.stateSize)) {\n          nestedStates.push(states.splice(0, cell.stateSize.length));\n        } else {\n          nestedStates.push(states.splice(0, 1));\n        }\n      }\n      nestedStates.reverse();\n\n      // Call the cells in order and store the returned states.\n      const newNestedStates: Tensor[][] = [];\n      let callInputs: Tensor[];\n      for (let i = 0; i < this.cells.length; ++i) {\n        const cell = this.cells[i];\n        states = nestedStates[i];\n        // TODO(cais): Take care of constants.\n        if (i === 0) {\n          callInputs = [inputs[0]].concat(states);\n        } else {\n          callInputs = [callInputs[0]].concat(states);\n        }\n        callInputs = cell.call(callInputs, kwargs) as Tensor[];\n        newNestedStates.push(callInputs.slice(1));\n      }\n\n      // Format the new states as a flat list in reverse cell order.\n      states = [];\n      for (const cellStates of newNestedStates.slice().reverse()) {\n        states.push(...cellStates);\n      }\n      return [callInputs[0]].concat(states);\n    });\n  }\n\n  public build(inputShape: Shape|Shape[]): void {\n    if (isArrayOfShapes(inputShape)) {\n      // TODO(cais): Take care of input constants.\n      // const constantShape = inputShape.slice(1);\n      inputShape = (inputShape as Shape[])[0];\n    }\n    inputShape = inputShape as Shape;\n    let outputDim: number;\n    this.cells.forEach((cell, i) => {\n      nameScope(`RNNCell_${i}`, () => {\n        // TODO(cais): Take care of input constants.\n\n        cell.build(inputShape);\n        if (Array.isArray(cell.stateSize)) {\n          outputDim = cell.stateSize[0];\n        } else {\n          outputDim = cell.stateSize;\n        }\n        inputShape = [inputShape[0], outputDim] as Shape;\n      });\n    });\n    this.built = true;\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const cellConfigs: serialization.ConfigDict[] = [];\n    for (const cell of this.cells) {\n      cellConfigs.push({\n        'className': cell.getClassName(),\n        'config': cell.getConfig(),\n      });\n    }\n    const config: serialization.ConfigDict = {'cells': cellConfigs};\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict,\n      customObjects = {} as serialization.ConfigDict): T {\n    const cells: RNNCell[] = [];\n    for (const cellConfig of (config['cells'] as serialization.ConfigDict[])) {\n      cells.push(deserialize(cellConfig, customObjects) as RNNCell);\n    }\n    return new cls({cells});\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    if (!this.trainable) {\n      return [];\n    }\n    const weights: LayerVariable[] = [];\n    for (const cell of this.cells) {\n      weights.push(...cell.trainableWeights);\n    }\n    return weights;\n  }\n\n  get nonTrainableWeights(): LayerVariable[] {\n    const weights: LayerVariable[] = [];\n    for (const cell of this.cells) {\n      weights.push(...cell.nonTrainableWeights);\n    }\n    if (!this.trainable) {\n      const trainableWeights: LayerVariable[] = [];\n      for (const cell of this.cells) {\n        trainableWeights.push(...cell.trainableWeights);\n      }\n      return trainableWeights.concat(weights);\n    }\n    return weights;\n  }\n\n  /**\n   * Retrieve the weights of a the model.\n   *\n   * @returns A flat `Array` of `tf.Tensor`s.\n   */\n  getWeights(): Tensor[] {\n    const weights: LayerVariable[] = [];\n    for (const cell of this.cells) {\n      weights.push(...cell.weights);\n    }\n    return batchGetValue(weights);\n  }\n\n  /**\n   * Set the weights of the model.\n   *\n   * @param weights An `Array` of `tf.Tensor`s with shapes and types matching\n   *     the output of `getWeights()`.\n   */\n  setWeights(weights: Tensor[]): void {\n    const tuples: Array<[LayerVariable, Tensor]> = [];\n    for (const cell of this.cells) {\n      const numParams = cell.weights.length;\n      const inputWeights = weights.splice(numParams);\n      for (let i = 0; i < cell.weights.length; ++i) {\n        tuples.push([cell.weights[i], inputWeights[i]]);\n      }\n    }\n    batchSetValue(tuples);\n  }\n\n  // TODO(cais): Maybe implemnt `losses` and `getLossesFor`.\n}\nserialization.registerClass(StackedRNNCells);\n\nfunction generateDropoutMask(\n    ones: () => Tensor, rate: number, training: boolean = null,\n    count = 1): Tensor|Tensor[] {\n  function droppedInputs(): Tensor {\n    return K.dropout(ones(), rate);\n  }\n  if (count > 1) {\n    const mask: Tensor[] = [];\n    for (let i = 0; i < count; i++) {\n      mask.push(K.inTrainPhase(droppedInputs, ones, training));\n    }\n    return mask.map(m => tfc.keep(m.clone()));\n  } else {\n    return tfc.keep(K.inTrainPhase(droppedInputs, ones, training).clone());\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/**\n * Layers that augment the functionality of a base layer.\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {serialization, Tensor, tidy} from '@tensorflow/tfjs-core';\nimport * as K from '../backend/tfjs_backend';\nimport {nameScope} from '../common';\nimport {InputSpec, Layer, LayerArgs, SymbolicTensor} from '../engine/topology';\nimport {NotImplementedError, ValueError} from '../errors';\nimport {BidirectionalMergeMode, Shape, VALID_BIDIRECTIONAL_MERGE_MODES} from '../keras_format/common';\nimport {Kwargs} from '../types';\nimport {RegularizerFn, RnnStepFunction} from '../types';\nimport * as generic_utils from '../utils/generic_utils';\nimport {getExactlyOneShape, getExactlyOneTensor} from '../utils/types_utils';\nimport {LayerVariable} from '../variables';\n\nimport {rnn, RNN, standardizeArgs} from './recurrent';\nimport {deserialize} from './serialization';\n\nexport declare interface WrapperLayerArgs extends LayerArgs {\n  /**\n   * The layer to be wrapped.\n   */\n  layer: Layer;\n}\n\n/**\n * Abstract wrapper base class.\n *\n * Wrappers take another layer and augment it in various ways.\n * Do not use this class as a layer, it is only an abstract base class.\n * Two usable wrappers are the `TimeDistributed` and `Bidirectional` wrappers.\n */\nexport abstract class Wrapper extends Layer {\n  readonly layer: Layer;\n\n  constructor(args: WrapperLayerArgs) {\n    // Porting Note: In PyKeras, `self.layer` is set prior to the calling\n    //   `super()`. But we can't do that here due to TypeScript's restriction.\n    //   See: https://github.com/Microsoft/TypeScript/issues/8277\n    //   As a result, we have to add checks in `get trainable()` and\n    //   `set trainable()` below in order to prevent using `this.layer` when\n    //   its value is `undefined`. The super constructor does use the getter\n    //   and the setter of `this.layer`.\n    super(args);\n    this.layer = args.layer;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    this.built = true;\n  }\n\n  // TODO(cais): Implement activityRegularizer getter.\n\n  get trainable(): boolean {\n    // Porting Note: the check of `this.layer` here is necessary due to the\n    //   way the `constructor` of this class is written (see Porting Note\n    //   above).\n    if (this.layer != null) {\n      return this.layer.trainable;\n    } else {\n      return false;\n    }\n  }\n\n  set trainable(value: boolean) {\n    // Porting Note: the check of `this.layer` here is necessary due to the\n    //   way the `constructor` of this class is written (see Porting Note\n    //   above).\n    if (this.layer != null) {\n      this.layer.trainable = value;\n    }\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    return this.layer.trainableWeights;\n  }\n  // TODO(cais): Implement setter for trainableWeights.\n\n  get nonTrainableWeights(): LayerVariable[] {\n    return this.layer.nonTrainableWeights;\n  }\n  // TODO(cais): Implement setter for nonTrainableWeights.\n\n  get updates(): Tensor[] {\n    // tslint:disable-next-line:no-any\n    return (this.layer as any)._updates;\n  }\n\n  // TODO(cais): Implement getUpdatesFor().\n\n  get losses(): RegularizerFn[] {\n    return this.layer.losses;\n  }\n\n  // TODO(cais): Implement getLossesFor().\n\n  getWeights(): Tensor[] {\n    return this.layer.getWeights();\n  }\n\n  setWeights(weights: Tensor[]): void {\n    this.layer.setWeights(weights);\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      'layer': {\n        'className': this.layer.getClassName(),\n        'config': this.layer.getConfig(),\n      }\n    };\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  setFastWeightInitDuringBuild(value: boolean) {\n    super.setFastWeightInitDuringBuild(value);\n    if (this.layer != null) {\n      this.layer.setFastWeightInitDuringBuild(value);\n    }\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict,\n      customObjects = {} as serialization.ConfigDict): T {\n    const layerConfig = config['layer'] as serialization.ConfigDict;\n    const layer = deserialize(layerConfig, customObjects) as Layer;\n    delete config['layer'];\n    const newConfig = {layer};\n    Object.assign(newConfig, config);\n    return new cls(newConfig);\n  }\n}\n\nexport class TimeDistributed extends Wrapper {\n  /** @nocollapse */\n  static className = 'TimeDistributed';\n  constructor(args: WrapperLayerArgs) {\n    super(args);\n    this.supportsMasking = true;\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    inputShape = getExactlyOneShape(inputShape);\n    if (inputShape.length < 3) {\n      throw new ValueError(\n          `TimeDistributed layer expects an input shape >= 3D, but received ` +\n          `input shape ${JSON.stringify(inputShape)}`);\n    }\n    this.inputSpec = [{shape: inputShape}];\n    const childInputShape = [inputShape[0]].concat(inputShape.slice(2));\n    if (!this.layer.built) {\n      this.layer.build(childInputShape);\n      this.layer.built = true;\n    }\n    super.build(inputShape);\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    inputShape = getExactlyOneShape(inputShape);\n    const childInputShape = [inputShape[0]].concat(inputShape.slice(2));\n    const childOutputShape =\n        this.layer.computeOutputShape(childInputShape) as Shape;\n    const timesteps = inputShape[1];\n    return [childOutputShape[0], timesteps].concat(childOutputShape.slice(1));\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      // TODO(cais): Add 'training' and 'useLearningPhase' to kwargs.\n      inputs = getExactlyOneTensor(inputs);\n      // Porting Note: In tfjs-layers, `inputs` are always concrete tensor\n      // values. Hence the inputs can't have an undetermined first (batch)\n      // dimension, which is why we always use the K.rnn approach here.\n      const step: RnnStepFunction = (inputs: Tensor, states: Tensor[]) => {\n        // TODO(cais): Add useLearningPhase.\n        // NOTE(cais): `layer.call` may return a length-1 array of Tensor in\n        //   some cases (e.g., `layer` is a `Sequential` instance), which is\n        //   why `getExactlyOneTensor` is used below.\n        const output = getExactlyOneTensor(this.layer.call(inputs, kwargs));\n        return [output, []];\n      };\n      const rnnOutputs =\n          rnn(step, inputs, [], false /* goBackwards */, null /* mask */,\n              null /* constants */, false /* unroll */,\n              true /* needPerStepOutputs */);\n      const y = rnnOutputs[1];\n      // TODO(cais): Add activity regularization.\n      // TODO(cais): Add useLearningPhase.\n      return y;\n    });\n  }\n\n  // TODO(cais): Implement detailed computeMask() logic.\n}\nserialization.registerClass(TimeDistributed);\n\nexport function checkBidirectionalMergeMode(value?: string): void {\n  generic_utils.checkStringTypeUnionValue(\n      VALID_BIDIRECTIONAL_MERGE_MODES, 'BidirectionalMergeMode', value);\n}\n\nexport declare interface BidirectionalLayerArgs extends WrapperLayerArgs {\n  /**\n   * The instance of an `RNN` layer to be wrapped.\n   */\n  layer: RNN;\n\n  /**\n   * Mode by which outputs of the forward and backward RNNs are\n   * combined. If `null` or `undefined`, the output will not be\n   * combined, they will be returned as an `Array`.\n   *\n   * If `undefined` (i.e., not provided), defaults to `'concat'`.\n   */\n  mergeMode?: BidirectionalMergeMode;\n}\n\nconst DEFAULT_BIDIRECTIONAL_MERGE_MODE: BidirectionalMergeMode = 'concat';\n\nexport class Bidirectional extends Wrapper {\n  /** @nocollapse */\n  static className = 'Bidirectional';\n  mergeMode: BidirectionalMergeMode;\n  private forwardLayer: RNN;\n  private backwardLayer: RNN;\n  private returnSequences: boolean;\n  private returnState: boolean;\n  private numConstants?: number;\n  private _trainable: boolean;\n\n  constructor(args: BidirectionalLayerArgs) {\n    super(args);\n\n    // Note: When creating `this.forwardLayer`, the original Layer object\n    //   (`config.layer`) ought to be cloned. This is why we call\n    //   `getConfig()` followed by `deserialize()`. Without this cloning,\n    //   the layer names saved during serialization will incorrectly contain\n    //   the 'forward_' prefix. In Python Keras, this is done using\n    //   `copy.copy` (shallow copy), which does not have a simple equivalent\n    //   in JavaScript. JavaScript's `Object.assign()` does not copy\n    //   methods.\n    const layerConfig = args.layer.getConfig();\n    const forwDict: serialization.ConfigDict = {};\n    forwDict['className'] = args.layer.getClassName();\n    forwDict['config'] = layerConfig;\n    this.forwardLayer = deserialize(forwDict) as RNN;\n    layerConfig['goBackwards'] =\n        layerConfig['goBackwards'] === true ? false : true;\n    const backDict: serialization.ConfigDict = {};\n    backDict['className'] = args.layer.getClassName();\n    backDict['config'] = layerConfig;\n    this.backwardLayer = deserialize(backDict) as RNN;\n    this.forwardLayer.name = 'forward_' + this.forwardLayer.name;\n    this.backwardLayer.name = 'backward_' + this.backwardLayer.name;\n\n    this.mergeMode = args.mergeMode === undefined ?\n        DEFAULT_BIDIRECTIONAL_MERGE_MODE :\n        args.mergeMode;\n    checkBidirectionalMergeMode(this.mergeMode);\n    if (args.weights) {\n      throw new NotImplementedError(\n          'weights support is not implemented for Bidirectional layer yet.');\n    }\n    this._stateful = args.layer.stateful;\n    this.returnSequences = args.layer.returnSequences;\n    this.returnState = args.layer.returnState;\n    this.supportsMasking = true;\n    this._trainable = true;\n    this.inputSpec = args.layer.inputSpec;\n    this.numConstants = null;\n  }\n\n  get trainable(): boolean {\n    return this._trainable;\n  }\n\n  set trainable(value: boolean) {\n    // Porting Note: the check of `this.layer` here is necessary due to the\n    //   way the `constructor` of this class is written (see Porting Note\n    //   above).\n    this._trainable = value;\n    if (this.forwardLayer != null) {\n      this.forwardLayer.trainable = value;\n    }\n    if (this.backwardLayer != null) {\n      this.backwardLayer.trainable = value;\n    }\n  }\n\n  getWeights(): Tensor[] {\n    return this.forwardLayer.getWeights().concat(\n        this.backwardLayer.getWeights());\n  }\n\n  setWeights(weights: Tensor[]): void {\n    const numWeights = weights.length;\n    const numeightsOver2 = Math.floor(numWeights / 2);\n    this.forwardLayer.setWeights(weights.slice(0, numeightsOver2));\n    this.backwardLayer.setWeights(weights.slice(numeightsOver2));\n  }\n\n  computeOutputShape(inputShape: Shape|Shape[]): Shape|Shape[] {\n    let layerShapes: Shape|Shape[] =\n        this.forwardLayer.computeOutputShape(inputShape);\n    if (!(Array.isArray(layerShapes) && Array.isArray(layerShapes[0]))) {\n      layerShapes = [layerShapes as Shape];\n    }\n    layerShapes = layerShapes as Shape[];\n\n    let outputShape: Shape;\n    let outputShapes: Shape[];\n    let stateShape: Shape[];\n    if (this.returnState) {\n      stateShape = layerShapes.slice(1);\n      outputShape = layerShapes[0];\n    } else {\n      outputShape = layerShapes[0];\n    }\n    outputShape = outputShape;\n    if (this.mergeMode === 'concat') {\n      outputShape[outputShape.length - 1] *= 2;\n      outputShapes = [outputShape];\n    } else if (this.mergeMode == null) {\n      outputShapes = [outputShape, outputShape.slice()];\n    } else {\n      outputShapes = [outputShape];\n    }\n\n    if (this.returnState) {\n      if (this.mergeMode == null) {\n        return outputShapes.concat(stateShape).concat(stateShape.slice());\n      }\n      return [outputShape].concat(stateShape).concat(stateShape.slice());\n    }\n    return generic_utils.singletonOrArray(outputShapes);\n  }\n\n  apply(\n      inputs: Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[],\n      kwargs?: Kwargs): Tensor|Tensor[]|SymbolicTensor|SymbolicTensor[] {\n    let initialState: Tensor[]|SymbolicTensor[] =\n        kwargs == null ? null : kwargs['initialState'];\n    let constants: Tensor[]|SymbolicTensor[] =\n        kwargs == null ? null : kwargs['constants'];\n    if (kwargs == null) {\n      kwargs = {};\n    }\n    const standardized =\n        standardizeArgs(inputs, initialState, constants, this.numConstants);\n    inputs = standardized.inputs;\n    initialState = standardized.initialState;\n    constants = standardized.constants;\n\n    if (Array.isArray(inputs)) {\n      initialState = (inputs as Tensor[] | SymbolicTensor[]).slice(1);\n      inputs = (inputs as Tensor[] | SymbolicTensor[])[0];\n    }\n\n    if ((initialState == null || initialState.length === 0) &&\n        constants == null) {\n      return super.apply(inputs, kwargs);\n    }\n    const additionalInputs: Array<Tensor|SymbolicTensor> = [];\n    const additionalSpecs: InputSpec[] = [];\n    if (initialState != null) {\n      const numStates = initialState.length;\n      if (numStates % 2 > 0) {\n        throw new ValueError(\n            'When passing `initialState` to a Bidrectional RNN, ' +\n            'the state should be an Array containing the states of ' +\n            'the underlying RNNs.');\n      }\n      kwargs['initialState'] = initialState;\n      additionalInputs.push(...initialState);\n      const stateSpecs = (initialState as Array<Tensor|SymbolicTensor>)\n                             .map(state => new InputSpec({shape: state.shape}));\n      this.forwardLayer.stateSpec = stateSpecs.slice(0, numStates / 2);\n      this.backwardLayer.stateSpec = stateSpecs.slice(numStates / 2);\n      additionalSpecs.push(...stateSpecs);\n    }\n    if (constants != null) {\n      throw new NotImplementedError(\n          'Support for constants in Bidirectional layers is not ' +\n          'implemented yet.');\n    }\n\n    const isSymbolicTensor = additionalInputs[0] instanceof SymbolicTensor;\n    for (const tensor of additionalInputs) {\n      if (tensor instanceof SymbolicTensor !== isSymbolicTensor) {\n        throw new ValueError(\n            'The initial state of a Bidirectional layer cannot be ' +\n            'specified as a mix of symbolic and non-symbolic tensors');\n      }\n    }\n\n    if (isSymbolicTensor) {\n      // Compute the full input and specs, including the states.\n      const fullInput = [inputs].concat(additionalInputs);\n      const fullInputSpec = this.inputSpec.concat(additionalSpecs);\n      // Perform the call temporarily and replace inputSpec.\n      // Note: with initial states symbolic calls and non-symbolic calls to\n      // this method differ in how the initial states are passed. For\n      // symbolic calls, the initial states are passed in the first arg, as\n      // an Array of SymbolicTensors; for non-symbolic calls, they are\n      // passed in the second arg as a part of the kwargs. Hence the need to\n      // temporarily modify inputSpec here.\n      // TODO(cais): Make refactoring so that this hacky code below is no\n      // longer needed.\n      const originalInputSpec = this.inputSpec;\n      this.inputSpec = fullInputSpec;\n      const output =\n          super.apply(fullInput as Tensor[] | SymbolicTensor[], kwargs);\n      this.inputSpec = originalInputSpec;\n      return output;\n    } else {\n      return super.apply(inputs, kwargs);\n    }\n  }\n\n  call(inputs: Tensor|Tensor[], kwargs: Kwargs): Tensor|Tensor[] {\n    return tidy(() => {\n      const initialState = kwargs['initialState'];\n\n      let y: Tensor|Tensor[];\n      let yRev: Tensor|Tensor[];\n      if (initialState == null) {\n        y = this.forwardLayer.call(inputs, kwargs);\n        yRev = this.backwardLayer.call(inputs, kwargs);\n      } else {\n        const forwardState = initialState.slice(0, initialState.length / 2);\n        const backwardState = initialState.slice(initialState.length / 2);\n        y = this.forwardLayer.call(\n            inputs, Object.assign(kwargs, {initialState: forwardState}));\n        yRev = this.backwardLayer.call(\n            inputs, Object.assign(kwargs, {initialState: backwardState}));\n      }\n\n      let states: Tensor[];\n      if (this.returnState) {\n        if (Array.isArray(y)) {\n          states = y.slice(1).concat((yRev as Tensor[]).slice(1));\n        } else {\n        }\n        y = (y as Tensor[])[0];\n        yRev = (yRev as Tensor[])[0];\n      }\n\n      if (this.returnSequences) {\n        yRev = tfc.reverse(yRev as Tensor, 1);\n      }\n\n      let output: Tensor|Tensor[];\n      if (this.mergeMode === 'concat') {\n        output = K.concatenate([y as Tensor, yRev as Tensor]);\n      } else if (this.mergeMode === 'sum') {\n        output = tfc.add(y as Tensor, yRev as Tensor);\n      } else if (this.mergeMode === 'ave') {\n        output = tfc.mul(.5, tfc.add(y as Tensor, yRev as Tensor));\n      } else if (this.mergeMode === 'mul') {\n        output = tfc.mul(y as Tensor, yRev as Tensor);\n      } else if (this.mergeMode == null) {\n        output = [y as Tensor, yRev as Tensor];\n      }\n\n      // TODO(cais): Properly set learning phase.\n      if (this.returnState) {\n        if (this.mergeMode == null) {\n          return (output as Tensor[]).concat(states);\n        }\n        return [output as Tensor].concat(states);\n      }\n      return output;\n    });\n  }\n\n  resetStates(states?: Tensor|Tensor[]): void {\n    this.forwardLayer.resetStates();\n    this.backwardLayer.resetStates();\n  }\n\n  build(inputShape: Shape|Shape[]): void {\n    nameScope(this.forwardLayer.name, () => {\n      this.forwardLayer.build(inputShape);\n    });\n    nameScope(this.backwardLayer.name, () => {\n      this.backwardLayer.build(inputShape);\n    });\n    this.built = true;\n  }\n\n  computeMask(inputs: Tensor|Tensor[], mask?: Tensor|Tensor[]): Tensor\n      |Tensor[] {\n    if (Array.isArray(mask)) {\n      mask = mask[0];\n    }\n    let outputMask: Tensor|Tensor[];\n    if (this.returnSequences) {\n      if (this.mergeMode == null) {\n        outputMask = [mask, mask];\n      } else {\n        outputMask = mask;\n      }\n    } else {\n      if (this.mergeMode == null) {\n        outputMask = [null, null];\n      } else {\n        outputMask = null;\n      }\n    }\n    if (this.returnState) {\n      const states = this.forwardLayer.states;\n      const stateMask: Tensor[] = states.map(state => null);\n      if (Array.isArray(outputMask)) {\n        return outputMask.concat(stateMask).concat(stateMask);\n      } else {\n        return [outputMask].concat(stateMask).concat(stateMask);\n      }\n    } else {\n      return outputMask;\n    }\n  }\n\n  get trainableWeights(): LayerVariable[] {\n    return this.forwardLayer.trainableWeights.concat(\n        this.backwardLayer.trainableWeights);\n  }\n\n  get nonTrainableWeights(): LayerVariable[] {\n    return this.forwardLayer.nonTrainableWeights.concat(\n        this.backwardLayer.nonTrainableWeights);\n  }\n\n  // TODO(cais): Implement constraints().\n\n  setFastWeightInitDuringBuild(value: boolean) {\n    super.setFastWeightInitDuringBuild(value);\n    if (this.forwardLayer != null) {\n      this.forwardLayer.setFastWeightInitDuringBuild(value);\n    }\n    if (this.backwardLayer != null) {\n      this.backwardLayer.setFastWeightInitDuringBuild(value);\n    }\n  }\n\n  getConfig(): serialization.ConfigDict {\n    const config: serialization.ConfigDict = {\n      'mergeMode': this.mergeMode,\n    };\n    // TODO(cais): Add logic for `numConstants` once the property is added.\n    const baseConfig = super.getConfig();\n    Object.assign(config, baseConfig);\n    return config;\n  }\n\n  /** @nocollapse */\n  static fromConfig<T extends serialization.Serializable>(\n      cls: serialization.SerializableConstructor<T>,\n      config: serialization.ConfigDict): T {\n    const rnnLayer =\n        deserialize(config['layer'] as serialization.ConfigDict) as RNN;\n    delete config['layer'];\n    // TODO(cais): Add logic for `numConstants` once the property is added.\n    if (config['numConstants'] != null) {\n      throw new NotImplementedError(\n          `Deserialization of a Bidirectional layer with numConstants ` +\n          `present is not supported yet.`);\n    }\n    // tslint:disable-next-line:no-any\n    const newConfig: {[key: string]: any} = config;\n    newConfig['layer'] = rnnLayer;\n    return new cls(newConfig);\n  }\n}\nserialization.registerClass(Bidirectional);\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\nimport {InputLayer, InputLayerArgs} from './engine/input_layer';\nimport {Layer, LayerArgs} from './engine/topology';\nimport {input} from './exports';\nimport {ELU, ELULayerArgs, LeakyReLU, LeakyReLULayerArgs, PReLU, PReLULayerArgs, ReLU, ReLULayerArgs, Softmax, SoftmaxLayerArgs, ThresholdedReLU, ThresholdedReLULayerArgs} from './layers/advanced_activations';\nimport {Conv1D, Conv2D, Conv2DTranspose, Conv3D, ConvLayerArgs, Cropping2D, Cropping2DLayerArgs, SeparableConv2D, SeparableConvLayerArgs, UpSampling2D, UpSampling2DLayerArgs} from './layers/convolutional';\nimport {DepthwiseConv2D, DepthwiseConv2DLayerArgs} from './layers/convolutional_depthwise';\nimport {Activation, ActivationLayerArgs, Dense, DenseLayerArgs, Dropout, DropoutLayerArgs, Flatten, FlattenLayerArgs, Masking, MaskingArgs, Permute, PermuteLayerArgs, RepeatVector, RepeatVectorLayerArgs, Reshape, ReshapeLayerArgs, SpatialDropout1D, SpatialDropout1DLayerConfig} from './layers/core';\nimport {Embedding, EmbeddingLayerArgs} from './layers/embeddings';\nimport {Add, Average, Concatenate, ConcatenateLayerArgs, Dot, DotLayerArgs, Maximum, Minimum, Multiply} from './layers/merge';\nimport {AlphaDropout, AlphaDropoutArgs, GaussianDropout, GaussianDropoutArgs, GaussianNoise, GaussianNoiseArgs} from './layers/noise';\nimport {BatchNormalization, BatchNormalizationLayerArgs, LayerNormalization, LayerNormalizationLayerArgs} from './layers/normalization';\nimport {ZeroPadding2D, ZeroPadding2DLayerArgs} from './layers/padding';\nimport {AveragePooling1D, AveragePooling2D, AveragePooling3D, GlobalAveragePooling1D, GlobalAveragePooling2D, GlobalMaxPooling1D, GlobalMaxPooling2D, GlobalPooling2DLayerArgs, MaxPooling1D, MaxPooling2D, MaxPooling3D, Pooling1DLayerArgs, Pooling2DLayerArgs, Pooling3DLayerArgs} from './layers/pooling';\nimport {GRU, GRUCell, GRUCellLayerArgs, GRULayerArgs, LSTM, LSTMCell, LSTMCellLayerArgs, LSTMLayerArgs, RNN, RNNCell, RNNLayerArgs, SimpleRNN, SimpleRNNCell, SimpleRNNCellLayerArgs, SimpleRNNLayerArgs, StackedRNNCells, StackedRNNCellsArgs} from './layers/recurrent';\nimport {Bidirectional, BidirectionalLayerArgs, TimeDistributed, WrapperLayerArgs} from './layers/wrappers';\n\n// TODO(cais): Add doc string to all the public static functions in this\n//   class; include exectuable JavaScript code snippets where applicable\n//   (b/74074458).\n\n// Input Layer.\n/**\n * An input layer is an entry point into a `tf.LayersModel`.\n *\n * `InputLayer` is generated automatically for `tf.Sequential`` models by\n * specifying the `inputshape` or `batchInputShape` for the first layer.  It\n * should not be specified explicitly. However, it can be useful sometimes,\n * e.g., when constructing a sequential model from a subset of another\n * sequential model's layers. Like the code snippet below shows.\n *\n * ```js\n * // Define a model which simply adds two inputs.\n * const model1 = tf.sequential();\n * model1.add(tf.layers.dense({inputShape: [4], units: 3, activation: 'relu'}));\n * model1.add(tf.layers.dense({units: 1, activation: 'sigmoid'}));\n * model1.summary();\n * model1.predict(tf.zeros([1, 4])).print();\n *\n * // Construct another model, reusing the second layer of `model1` while\n * // not using the first layer of `model1`. Note that you cannot add the second\n * // layer of `model` directly as the first layer of the new sequential model,\n * // because doing so will lead to an error related to the fact that the layer\n * // is not an input layer. Instead, you need to create an `inputLayer` and add\n * // it to the new sequential model before adding the reused layer.\n * const model2 = tf.sequential();\n * // Use an inputShape that matches the input shape of `model1`'s second\n * // layer.\n * model2.add(tf.layers.inputLayer({inputShape: [3]}));\n * model2.add(model1.layers[1]);\n * model2.summary();\n * model2.predict(tf.zeros([1, 3])).print();\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Inputs', namespace: 'layers'} */\nexport function inputLayer(args: InputLayerArgs): Layer {\n  return new InputLayer(args);\n}\n\n// Advanced Activation Layers.\n\n/**\n * Exponetial Linear Unit (ELU).\n *\n * It follows:\n * `f(x) =  alpha * (exp(x) - 1.) for x < 0`,\n * `f(x) = x for x >= 0`.\n *\n * Input shape:\n *   Arbitrary. Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n * Output shape:\n *   Same shape as the input.\n *\n * References:\n *   - [Fast and Accurate Deep Network Learning by Exponential Linear Units\n * (ELUs)](https://arxiv.org/abs/1511.07289v1)\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function elu(args?: ELULayerArgs): Layer {\n  return new ELU(args);\n}\n\n/**\n * Rectified Linear Unit activation function.\n *\n * Input shape:\n *   Arbitrary. Use the config field `inputShape` (Array of integers, does\n *   not include the sample axis) when using this layer as the first layer\n *   in a model.\n *\n * Output shape:\n *   Same shape as the input.\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function reLU(args?: ReLULayerArgs): Layer {\n  return new ReLU(args);\n}\n\n/**\n * Leaky version of a rectified linear unit.\n *\n * It allows a small gradient when the unit is not active:\n * `f(x) = alpha * x for x < 0.`\n * `f(x) = x for x >= 0.`\n *\n * Input shape:\n *   Arbitrary. Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n * Output shape:\n *   Same shape as the input.\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function leakyReLU(args?: LeakyReLULayerArgs): Layer {\n  return new LeakyReLU(args);\n}\n\n/**\n * Parameterized version of a leaky rectified linear unit.\n *\n * It follows\n * `f(x) = alpha * x for x < 0.`\n * `f(x) = x for x >= 0.`\n * wherein `alpha` is a trainable weight.\n *\n * Input shape:\n *   Arbitrary. Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n * Output shape:\n *   Same shape as the input.\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function prelu(args?: PReLULayerArgs): Layer {\n  return new PReLU(args);\n}\n\n/**\n * Softmax activation layer.\n *\n * Input shape:\n *   Arbitrary. Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n * Output shape:\n *   Same shape as the input.\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function softmax(args?: SoftmaxLayerArgs): Layer {\n  return new Softmax(args);\n}\n\n/**\n * Thresholded Rectified Linear Unit.\n *\n * It follows:\n * `f(x) = x for x > theta`,\n * `f(x) = 0 otherwise`.\n *\n * Input shape:\n *   Arbitrary. Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n * Output shape:\n *   Same shape as the input.\n *\n * References:\n *   - [Zero-Bias Autoencoders and the Benefits of Co-Adapting\n * Features](http://arxiv.org/abs/1402.3337)\n */\n/**\n * @doc {\n *   heading: 'Layers',\n *   subheading: 'Advanced Activation',\n *   namespace: 'layers'\n * }\n */\nexport function thresholdedReLU(args?: ThresholdedReLULayerArgs): Layer {\n  return new ThresholdedReLU(args);\n}\n\n// Convolutional Layers.\n\n/**\n * 1D convolution layer (e.g., temporal convolution).\n *\n * This layer creates a convolution kernel that is convolved\n * with the layer input over a single spatial (or temporal) dimension\n * to produce a tensor of outputs.\n *\n * If `use_bias` is True, a bias vector is created and added to the outputs.\n *\n * If `activation` is not `null`, it is applied to the outputs as well.\n *\n * When using this layer as the first layer in a model, provide an\n * `inputShape` argument `Array` or `null`.\n *\n * For example, `inputShape` would be:\n * - `[10, 128]` for sequences of 10 vectors of 128-dimensional vectors\n * - `[null, 128]` for variable-length sequences of 128-dimensional vectors.\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional',  namespace: 'layers'}\n */\nexport function conv1d(args: ConvLayerArgs): Layer {\n  return new Conv1D(args);\n}\n\n/**\n * 2D convolution layer (e.g. spatial convolution over images).\n *\n * This layer creates a convolution kernel that is convolved\n * with the layer input to produce a tensor of outputs.\n *\n * If `useBias` is True, a bias vector is created and added to the outputs.\n *\n * If `activation` is not `null`, it is applied to the outputs as well.\n *\n * When using this layer as the first layer in a model,\n * provide the keyword argument `inputShape`\n * (Array of integers, does not include the sample axis),\n * e.g. `inputShape=[128, 128, 3]` for 128x128 RGB pictures\n * in `dataFormat='channelsLast'`.\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function conv2d(args: ConvLayerArgs): Layer {\n  return new Conv2D(args);\n}\n\n/**\n * Transposed convolutional layer (sometimes called Deconvolution).\n *\n * The need for transposed convolutions generally arises\n * from the desire to use a transformation going in the opposite direction of\n * a normal convolution, i.e., from something that has the shape of the output\n * of some convolution to something that has the shape of its input while\n * maintaining a connectivity pattern that is compatible with said\n * convolution.\n *\n * When using this layer as the first layer in a model, provide the\n * configuration `inputShape` (`Array` of integers, does not include the\n * sample axis), e.g., `inputShape: [128, 128, 3]` for 128x128 RGB pictures in\n * `dataFormat: 'channelsLast'`.\n *\n * Input shape:\n *   4D tensor with shape:\n *   `[batch, channels, rows, cols]` if `dataFormat` is `'channelsFirst'`.\n *   or 4D tensor with shape\n *   `[batch, rows, cols, channels]` if `dataFormat` is `'channelsLast`.\n *\n * Output shape:\n *   4D tensor with shape:\n *   `[batch, filters, newRows, newCols]` if `dataFormat` is\n * `'channelsFirst'`. or 4D tensor with shape:\n *   `[batch, newRows, newCols, filters]` if `dataFormat` is `'channelsLast'`.\n *\n * References:\n *   - [A guide to convolution arithmetic for deep\n * learning](https://arxiv.org/abs/1603.07285v1)\n *   - [Deconvolutional\n * Networks](http://www.matthewzeiler.com/pubs/cvpr2010/cvpr2010.pdf)\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function conv2dTranspose(args: ConvLayerArgs): Layer {\n  return new Conv2DTranspose(args);\n}\n\n/**\n * 3D convolution layer (e.g. spatial convolution over volumes).\n *\n * This layer creates a convolution kernel that is convolved\n * with the layer input to produce a tensor of outputs.\n *\n * If `useBias` is True, a bias vector is created and added to the outputs.\n *\n * If `activation` is not `null`, it is applied to the outputs as well.\n *\n * When using this layer as the first layer in a model,\n * provide the keyword argument `inputShape`\n * (Array of integers, does not include the sample axis),\n * e.g. `inputShape=[128, 128, 128, 1]` for 128x128x128 grayscale volumes\n * in `dataFormat='channelsLast'`.\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function conv3d(args: ConvLayerArgs): Layer {\n  return new Conv3D(args);\n}\n\n/**\n * Depthwise separable 2D convolution.\n *\n * Separable convolution consists of first performing\n * a depthwise spatial convolution\n * (which acts on each input channel separately)\n * followed by a pointwise convolution which mixes together the resulting\n * output channels. The `depthMultiplier` argument controls how many\n * output channels are generated per input channel in the depthwise step.\n *\n * Intuitively, separable convolutions can be understood as\n * a way to factorize a convolution kernel into two smaller kernels,\n * or as an extreme version of an Inception block.\n *\n * Input shape:\n *   4D tensor with shape:\n *     `[batch, channels, rows, cols]` if data_format='channelsFirst'\n *   or 4D tensor with shape:\n *     `[batch, rows, cols, channels]` if data_format='channelsLast'.\n *\n * Output shape:\n *   4D tensor with shape:\n *     `[batch, filters, newRows, newCols]` if data_format='channelsFirst'\n *   or 4D tensor with shape:\n *     `[batch, newRows, newCols, filters]` if data_format='channelsLast'.\n *     `rows` and `cols` values might have changed due to padding.\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function separableConv2d(args: SeparableConvLayerArgs): Layer {\n  return new SeparableConv2D(args);\n}\n\n/**\n * Cropping layer for 2D input (e.g., image).\n *\n * This layer can crop an input\n * at the top, bottom, left and right side of an image tensor.\n *\n * Input shape:\n *   4D tensor with shape:\n *   - If `dataFormat` is `\"channelsLast\"`:\n *     `[batch, rows, cols, channels]`\n *   - If `data_format` is `\"channels_first\"`:\n *     `[batch, channels, rows, cols]`.\n *\n * Output shape:\n *   4D with shape:\n *   - If `dataFormat` is `\"channelsLast\"`:\n *     `[batch, croppedRows, croppedCols, channels]`\n *    - If `dataFormat` is `\"channelsFirst\"`:\n *     `[batch, channels, croppedRows, croppedCols]`.\n *\n * Examples\n * ```js\n *\n * const model = tf.sequential();\n * model.add(tf.layers.cropping2D({cropping:[[2, 2], [2, 2]],\n *                                inputShape: [128, 128, 3]}));\n * //now output shape is [batch, 124, 124, 3]\n * ```\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function cropping2D(args: Cropping2DLayerArgs): Layer {\n  return new Cropping2D(args);\n}\n\n/**\n * Upsampling layer for 2D inputs.\n *\n * Repeats the rows and columns of the data\n * by size[0] and size[1] respectively.\n *\n *\n * Input shape:\n *    4D tensor with shape:\n *     - If `dataFormat` is `\"channelsLast\"`:\n *         `[batch, rows, cols, channels]`\n *     - If `dataFormat` is `\"channelsFirst\"`:\n *        `[batch, channels, rows, cols]`\n *\n * Output shape:\n *     4D tensor with shape:\n *     - If `dataFormat` is `\"channelsLast\"`:\n *        `[batch, upsampledRows, upsampledCols, channels]`\n *     - If `dataFormat` is `\"channelsFirst\"`:\n *         `[batch, channels, upsampledRows, upsampledCols]`\n *\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function upSampling2d(args: UpSampling2DLayerArgs): Layer {\n  return new UpSampling2D(args);\n}\n\n// Convolutional(depthwise) Layers.\n\n/**\n * Depthwise separable 2D convolution.\n *\n * Depthwise Separable convolutions consists in performing just the first step\n * in a depthwise spatial convolution (which acts on each input channel\n * separately). The `depthMultplier` argument controls how many output channels\n * are generated per input channel in the depthwise step.\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Convolutional', namespace: 'layers'}\n */\nexport function depthwiseConv2d(args: DepthwiseConv2DLayerArgs): Layer {\n  return new DepthwiseConv2D(args);\n}\n\n// Basic Layers.\n\n/**\n * Applies an activation function to an output.\n *\n * This layer applies element-wise activation function.  Other layers, notably\n * `dense` can also apply activation functions.  Use this isolated activation\n * function to extract the values before and after the\n * activation. For instance:\n *\n * ```js\n * const input = tf.input({shape: [5]});\n * const denseLayer = tf.layers.dense({units: 1});\n * const activationLayer = tf.layers.activation({activation: 'relu6'});\n *\n * // Obtain the output symbolic tensors by applying the layers in order.\n * const denseOutput = denseLayer.apply(input);\n * const activationOutput = activationLayer.apply(denseOutput);\n *\n * // Create the model based on the inputs.\n * const model = tf.model({\n *     inputs: input,\n *     outputs: [denseOutput, activationOutput]\n * });\n *\n * // Collect both outputs and print separately.\n * const [denseOut, activationOut] = model.predict(tf.randomNormal([6, 5]));\n * denseOut.print();\n * activationOut.print();\n * ```\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'}\n */\nexport function activation(args: ActivationLayerArgs): Layer {\n  return new Activation(args);\n}\n\n/**\n * Creates a dense (fully connected) layer.\n *\n * This layer implements the operation:\n *   `output = activation(dot(input, kernel) + bias)`\n *\n * `activation` is the element-wise activation function\n *   passed as the `activation` argument.\n *\n * `kernel` is a weights matrix created by the layer.\n *\n * `bias` is a bias vector created by the layer (only applicable if `useBias`\n * is `true`).\n *\n * **Input shape:**\n *\n *   nD `tf.Tensor` with shape: `(batchSize, ..., inputDim)`.\n *\n *   The most common situation would be\n *   a 2D input with shape `(batchSize, inputDim)`.\n *\n * **Output shape:**\n *\n *   nD tensor with shape: `(batchSize, ..., units)`.\n *\n *   For instance, for a 2D input with shape `(batchSize, inputDim)`,\n *   the output would have shape `(batchSize, units)`.\n *\n * Note: if the input to the layer has a rank greater than 2, then it is\n * flattened prior to the initial dot product with the kernel.\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function dense(args: DenseLayerArgs): Layer {\n  return new Dense(args);\n}\n\n/**\n * Applies\n * [dropout](http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf) to\n * the input.\n *\n * Dropout consists in randomly setting a fraction `rate` of input units to 0 at\n * each update during training time, which helps prevent overfitting.\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function dropout(args: DropoutLayerArgs): Layer {\n  return new Dropout(args);\n}\n\n/**\n * Spatial 1D version of Dropout.\n *\n * This Layer type performs the same function as the Dropout layer, but it drops\n * entire 1D feature maps instead of individual elements. For example, if an\n * input example consists of 3 timesteps and the feature map for each timestep\n * has a size of 4, a `spatialDropout1d` layer may zero out the feature maps\n * of the 1st timesteps and 2nd timesteps completely while sparing all feature\n * elements of the 3rd timestep.\n *\n * If adjacent frames (timesteps) are strongly correlated (as is normally the\n * case in early convolution layers), regular dropout will not regularize the\n * activation and will otherwise just result in merely an effective learning\n * rate decrease. In this case, `spatialDropout1d` will help promote\n * independence among feature maps and should be used instead.\n *\n * **Arguments:**\n *   rate: A floating-point number >=0 and <=1. Fraction of the input elements\n *     to drop.\n *\n * **Input shape:**\n *   3D tensor with shape `(samples, timesteps, channels)`.\n *\n * **Output shape:**\n *   Same as the input shape.\n *\n * References:\n *   - [Efficient Object Localization Using Convolutional\n *      Networks](https://arxiv.org/abs/1411.4280)\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function spatialDropout1d(args: SpatialDropout1DLayerConfig): Layer {\n  return new SpatialDropout1D(args);\n}\n\n/**\n * Flattens the input. Does not affect the batch size.\n *\n * A `Flatten` layer flattens each batch in its inputs to 1D (making the output\n * 2D).\n *\n * For example:\n *\n * ```js\n * const input = tf.input({shape: [4, 3]});\n * const flattenLayer = tf.layers.flatten();\n * // Inspect the inferred output shape of the flatten layer, which\n * // equals `[null, 12]`. The 2nd dimension is 4 * 3, i.e., the result of the\n * // flattening. (The 1st dimension is the undermined batch size.)\n * console.log(JSON.stringify(flattenLayer.apply(input).shape));\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function flatten(args?: FlattenLayerArgs): Layer {\n  return new Flatten(args);\n}\n\n/**\n * Repeats the input n times in a new dimension.\n *\n * ```js\n *  const model = tf.sequential();\n *  model.add(tf.layers.repeatVector({n: 4, inputShape: [2]}));\n *  const x = tf.tensor2d([[10, 20]]);\n *  // Use the model to do inference on a data point the model hasn't see\n *  model.predict(x).print();\n *  // output shape is now [batch, 2, 4]\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function repeatVector(args: RepeatVectorLayerArgs): Layer {\n  return new RepeatVector(args);\n}\n\n/**\n * Reshapes an input to a certain shape.\n *\n * ```js\n * const input = tf.input({shape: [4, 3]});\n * const reshapeLayer = tf.layers.reshape({targetShape: [2, 6]});\n * // Inspect the inferred output shape of the Reshape layer, which\n * // equals `[null, 2, 6]`. (The 1st dimension is the undermined batch size.)\n * console.log(JSON.stringify(reshapeLayer.apply(input).shape));\n * ```\n *\n * Input shape:\n *   Arbitrary, although all dimensions in the input shape must be fixed.\n *   Use the configuration `inputShape` when using this layer as the\n *   first layer in a model.\n *\n *\n * Output shape:\n *   [batchSize, targetShape[0], targetShape[1], ...,\n *    targetShape[targetShape.length - 1]].\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function reshape(args: ReshapeLayerArgs): Layer {\n  return new Reshape(args);\n}\n\n/**\n * Permutes the dimensions of the input according to a given pattern.\n *\n * Useful for, e.g., connecting RNNs and convnets together.\n *\n * Example:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.permute({\n *   dims: [2, 1],\n *   inputShape: [10, 64]\n * }));\n * console.log(model.outputShape);\n * // Now model's output shape is [null, 64, 10], where null is the\n * // unpermuted sample (batch) dimension.\n * ```\n *\n * Input shape:\n *   Arbitrary. Use the configuration field `inputShape` when using this\n *   layer as the first layer in a model.\n *\n * Output shape:\n *   Same rank as the input shape, but with the dimensions re-ordered (i.e.,\n *   permuted) according to the `dims` configuration of this layer.\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function permute(args: PermuteLayerArgs): Layer {\n  return new Permute(args);\n}\n\n/**\n * Maps positive integers (indices) into dense vectors of fixed size.\n * eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]\n *\n * **Input shape:** 2D tensor with shape: `[batchSize, sequenceLength]`.\n *\n * **Output shape:** 3D tensor with shape: `[batchSize, sequenceLength,\n * outputDim]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Basic', namespace: 'layers'} */\nexport function embedding(args: EmbeddingLayerArgs): Layer {\n  return new Embedding(args);\n}\n\n// Merge Layers.\n\n/**\n * Layer that performs element-wise addition on an `Array` of inputs.\n *\n * It takes as input a list of tensors, all of the same shape, and returns a\n * single tensor (also of the same shape). The inputs are specified as an\n * `Array` when the `apply` method of the `Add` layer instance is called. For\n * example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const addLayer = tf.layers.add();\n * const sum = addLayer.apply([input1, input2]);\n * console.log(JSON.stringify(sum.shape));\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function add(args?: LayerArgs): Layer {\n  return new Add(args);\n}\n\n/**\n * Layer that performs element-wise averaging on an `Array` of inputs.\n *\n * It takes as input a list of tensors, all of the same shape, and returns a\n * single tensor (also of the same shape). For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const averageLayer = tf.layers.average();\n * const average = averageLayer.apply([input1, input2]);\n * console.log(JSON.stringify(average.shape));\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function average(args?: LayerArgs): Layer {\n  return new Average(args);\n}\n\n/**\n * Layer that concatenates an `Array` of inputs.\n *\n * It takes a list of tensors, all of the same shape except for the\n * concatenation axis, and returns a single tensor, the concatenation\n * of all inputs. For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 3]});\n * const concatLayer = tf.layers.concatenate();\n * const output = concatLayer.apply([input1, input2]);\n * console.log(JSON.stringify(output.shape));\n * // You get [null, 2, 5], with the first dimension as the undetermined batch\n * // dimension. The last dimension (5) is the result of concatenating the\n * // last dimensions of the inputs (2 and 3).\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function concatenate(args?: ConcatenateLayerArgs): Layer {\n  return new Concatenate(args);\n}\n\n/**\n * Layer that computes the element-wise maximum an `Array` of inputs.\n *\n * It takes as input a list of tensors, all of the same shape and returns a\n * single tensor (also of the same shape). For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const maxLayer = tf.layers.maximum();\n * const max = maxLayer.apply([input1, input2]);\n * console.log(JSON.stringify(max.shape));\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function maximum(args?: LayerArgs): Layer {\n  return new Maximum(args);\n}\n\n/**\n * Layer that computes the element-wise minimum of an `Array` of inputs.\n *\n * It takes as input a list of tensors, all of the same shape and returns a\n * single tensor (also of the same shape). For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const minLayer = tf.layers.minimum();\n * const min = minLayer.apply([input1, input2]);\n * console.log(JSON.stringify(min.shape));\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function minimum(args?: LayerArgs): Layer {\n  return new Minimum(args);\n}\n\n/**\n * Layer that multiplies (element-wise) an `Array` of inputs.\n *\n * It takes as input an Array of tensors, all of the same\n * shape, and returns a single tensor (also of the same shape).\n * For example:\n *\n * ```js\n * const input1 = tf.input({shape: [2, 2]});\n * const input2 = tf.input({shape: [2, 2]});\n * const input3 = tf.input({shape: [2, 2]});\n * const multiplyLayer = tf.layers.multiply();\n * const product = multiplyLayer.apply([input1, input2, input3]);\n * console.log(product.shape);\n * // You get [null, 2, 2], with the first dimension as the undetermined batch\n * // dimension.\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function multiply(args?: LayerArgs): Layer {\n  return new Multiply(args);\n}\n\n/**\n * Layer that computes a dot product between samples in two tensors.\n *\n * E.g., if applied to a list of two tensors `a` and `b` both of shape\n * `[batchSize, n]`, the output will be a tensor of shape `[batchSize, 1]`,\n * where each entry at index `[i, 0]` will be the dot product between\n * `a[i, :]` and `b[i, :]`.\n *\n * Example:\n *\n * ```js\n * const dotLayer = tf.layers.dot({axes: -1});\n * const x1 = tf.tensor2d([[10, 20], [30, 40]]);\n * const x2 = tf.tensor2d([[-1, -2], [-3, -4]]);\n *\n * // Invoke the layer's apply() method in eager (imperative) mode.\n * const y = dotLayer.apply([x1, x2]);\n * y.print();\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Merge', namespace: 'layers'} */\nexport function dot(args: DotLayerArgs): Layer {\n  return new Dot(args);\n}\n\n// Normalization Layers.\n\n/**\n * Batch normalization layer (Ioffe and Szegedy, 2014).\n *\n * Normalize the activations of the previous layer at each batch,\n * i.e. applies a transformation that maintains the mean activation\n * close to 0 and the activation standard deviation close to 1.\n *\n * Input shape:\n *   Arbitrary. Use the keyword argument `inputShape` (Array of integers, does\n *   not include the sample axis) when calling the constructor of this class,\n *   if this layer is used as a first layer in a model.\n *\n * Output shape:\n *   Same shape as input.\n *\n * References:\n *   - [Batch Normalization: Accelerating Deep Network Training by Reducing\n * Internal Covariate Shift](https://arxiv.org/abs/1502.03167)\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Normalization', namespace: 'layers'}\n */\nexport function batchNormalization(args?: BatchNormalizationLayerArgs): Layer {\n  return new BatchNormalization(args);\n}\n\n/**\n * Layer-normalization layer (Ba et al., 2016).\n *\n * Normalizes the activations of the previous layer for each given example in a\n * batch independently, instead of across a batch like in `batchNormalization`.\n * In other words, this layer applies a transformation that maintanis the mean\n * activation within each example close to0 and activation variance close to 1.\n *\n * Input shape:\n *   Arbitrary. Use the argument `inputShape` when using this layer as the first\n *   layer in a model.\n *\n * Output shape:\n *   Same as input.\n *\n * References:\n *   - [Layer Normalization](https://arxiv.org/abs/1607.06450)\n */\n/**\n * @doc {heading: 'Layers', subheading: 'Normalization', namespace: 'layers'}\n */\nexport function layerNormalization(args?: LayerNormalizationLayerArgs): Layer {\n  return new LayerNormalization(args);\n}\n\n// Padding Layers.\n\n/**\n * Zero-padding layer for 2D input (e.g., image).\n *\n * This layer can add rows and columns of zeros\n * at the top, bottom, left and right side of an image tensor.\n *\n * Input shape:\n *   4D tensor with shape:\n *   - If `dataFormat` is `\"channelsLast\"`:\n *     `[batch, rows, cols, channels]`\n *   - If `data_format` is `\"channels_first\"`:\n *     `[batch, channels, rows, cols]`.\n *\n * Output shape:\n *   4D with shape:\n *   - If `dataFormat` is `\"channelsLast\"`:\n *     `[batch, paddedRows, paddedCols, channels]`\n *    - If `dataFormat` is `\"channelsFirst\"`:\n *     `[batch, channels, paddedRows, paddedCols]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Padding', namespace: 'layers'} */\nexport function zeroPadding2d(args?: ZeroPadding2DLayerArgs): Layer {\n  return new ZeroPadding2D(args);\n}\n\n// Pooling Layers.\n\n/**\n * Average pooling operation for spatial data.\n *\n * Input shape: `[batchSize, inLength, channels]`\n *\n * Output shape: `[batchSize, pooledLength, channels]`\n *\n * `tf.avgPool1d` is an alias.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function averagePooling1d(args: Pooling1DLayerArgs): Layer {\n  return new AveragePooling1D(args);\n}\nexport function avgPool1d(args: Pooling1DLayerArgs): Layer {\n  return averagePooling1d(args);\n}\n// For backwards compatibility.\n// See https://github.com/tensorflow/tfjs/issues/152\nexport function avgPooling1d(args: Pooling1DLayerArgs): Layer {\n  return averagePooling1d(args);\n}\n\n/**\n * Average pooling operation for spatial data.\n *\n * Input shape:\n *  - If `dataFormat === CHANNEL_LAST`:\n *      4D tensor with shape:\n *      `[batchSize, rows, cols, channels]`\n *  - If `dataFormat === CHANNEL_FIRST`:\n *      4D tensor with shape:\n *      `[batchSize, channels, rows, cols]`\n *\n * Output shape\n *  - If `dataFormat === CHANNEL_LAST`:\n *      4D tensor with shape:\n *      `[batchSize, pooleRows, pooledCols, channels]`\n *  - If `dataFormat === CHANNEL_FIRST`:\n *      4D tensor with shape:\n *      `[batchSize, channels, pooleRows, pooledCols]`\n *\n * `tf.avgPool2d` is an alias.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function averagePooling2d(args: Pooling2DLayerArgs): Layer {\n  return new AveragePooling2D(args);\n}\nexport function avgPool2d(args: Pooling2DLayerArgs): Layer {\n  return averagePooling2d(args);\n}\n// For backwards compatibility.\n// See https://github.com/tensorflow/tfjs/issues/152\nexport function avgPooling2d(args: Pooling2DLayerArgs): Layer {\n  return averagePooling2d(args);\n}\n\n/**\n * Average pooling operation for 3D data.\n *\n * Input shape\n *   - If `dataFormat === channelsLast`:\n *       5D tensor with shape:\n *       `[batchSize, depths, rows, cols, channels]`\n *   - If `dataFormat === channelsFirst`:\n *      4D tensor with shape:\n *       `[batchSize, channels, depths, rows, cols]`\n *\n * Output shape\n *   - If `dataFormat=channelsLast`:\n *       5D tensor with shape:\n *       `[batchSize, pooledDepths, pooledRows, pooledCols, channels]`\n *   - If `dataFormat=channelsFirst`:\n *       5D tensor with shape:\n *       `[batchSize, channels, pooledDepths, pooledRows, pooledCols]`\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function averagePooling3d(args: Pooling3DLayerArgs): Layer {\n  return new AveragePooling3D(args);\n}\nexport function avgPool3d(args: Pooling3DLayerArgs): Layer {\n  return averagePooling3d(args);\n}\n// For backwards compatibility.\n// See https://github.com/tensorflow/tfjs/issues/152\nexport function avgPooling3d(args: Pooling3DLayerArgs): Layer {\n  return averagePooling3d(args);\n}\n\n/**\n * Global average pooling operation for temporal data.\n *\n * Input Shape: 3D tensor with shape: `[batchSize, steps, features]`.\n *\n * Output Shape:2D tensor with shape: `[batchSize, features]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function globalAveragePooling1d(args?: LayerArgs): Layer {\n  return new GlobalAveragePooling1D(args);\n}\n\n/**\n * Global average pooling operation for spatial data.\n *\n * Input shape:\n *   - If `dataFormat` is `CHANNEL_LAST`:\n *       4D tensor with shape: `[batchSize, rows, cols, channels]`.\n *   - If `dataFormat` is `CHANNEL_FIRST`:\n *       4D tensor with shape: `[batchSize, channels, rows, cols]`.\n *\n * Output shape:\n *   2D tensor with shape: `[batchSize, channels]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function globalAveragePooling2d(args: GlobalPooling2DLayerArgs): Layer {\n  return new GlobalAveragePooling2D(args);\n}\n\n/**\n * Global max pooling operation for temporal data.\n *\n * Input Shape: 3D tensor with shape: `[batchSize, steps, features]`.\n *\n * Output Shape:2D tensor with shape: `[batchSize, features]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function globalMaxPooling1d(args?: LayerArgs): Layer {\n  return new GlobalMaxPooling1D(args);\n}\n\n/**\n * Global max pooling operation for spatial data.\n *\n * Input shape:\n *   - If `dataFormat` is `CHANNEL_LAST`:\n *       4D tensor with shape: `[batchSize, rows, cols, channels]`.\n *   - If `dataFormat` is `CHANNEL_FIRST`:\n *       4D tensor with shape: `[batchSize, channels, rows, cols]`.\n *\n * Output shape:\n *   2D tensor with shape: `[batchSize, channels]`.\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function globalMaxPooling2d(args: GlobalPooling2DLayerArgs): Layer {\n  return new GlobalMaxPooling2D(args);\n}\n\n/**\n * Max pooling operation for temporal data.\n *\n * Input shape:  `[batchSize, inLength, channels]`\n *\n * Output shape: `[batchSize, pooledLength, channels]`\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function maxPooling1d(args: Pooling1DLayerArgs): Layer {\n  return new MaxPooling1D(args);\n}\n\n/**\n * Max pooling operation for spatial data.\n *\n * Input shape\n *   - If `dataFormat === CHANNEL_LAST`:\n *       4D tensor with shape:\n *       `[batchSize, rows, cols, channels]`\n *   - If `dataFormat === CHANNEL_FIRST`:\n *      4D tensor with shape:\n *       `[batchSize, channels, rows, cols]`\n *\n * Output shape\n *   - If `dataFormat=CHANNEL_LAST`:\n *       4D tensor with shape:\n *       `[batchSize, pooleRows, pooledCols, channels]`\n *   - If `dataFormat=CHANNEL_FIRST`:\n *       4D tensor with shape:\n *       `[batchSize, channels, pooleRows, pooledCols]`\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function maxPooling2d(args: Pooling2DLayerArgs): Layer {\n  return new MaxPooling2D(args);\n}\n\n/**\n * Max pooling operation for 3D data.\n *\n * Input shape\n *   - If `dataFormat === channelsLast`:\n *       5D tensor with shape:\n *       `[batchSize, depths, rows, cols, channels]`\n *   - If `dataFormat === channelsFirst`:\n *      5D tensor with shape:\n *       `[batchSize, channels, depths, rows, cols]`\n *\n * Output shape\n *   - If `dataFormat=channelsLast`:\n *       5D tensor with shape:\n *       `[batchSize, pooledDepths, pooledRows, pooledCols, channels]`\n *   - If `dataFormat=channelsFirst`:\n *       5D tensor with shape:\n *       `[batchSize, channels, pooledDepths, pooledRows, pooledCols]`\n */\n/** @doc {heading: 'Layers', subheading: 'Pooling', namespace: 'layers'} */\nexport function maxPooling3d(args: Pooling3DLayerArgs): Layer {\n  return new MaxPooling3D(args);\n}\n\n// Recurrent Layers.\n\n/**\n * Gated Recurrent Unit - Cho et al. 2014.\n *\n * This is an `RNN` layer consisting of one `GRUCell`. However, unlike\n * the underlying `GRUCell`, the `apply` method of `SimpleRNN` operates\n * on a sequence of inputs. The shape of the input (not including the first,\n * batch dimension) needs to be at least 2-D, with the first dimension being\n * time steps. For example:\n *\n * ```js\n * const rnn = tf.layers.gru({units: 8, returnSequences: true});\n *\n * // Create an input with 10 time steps.\n * const input = tf.input({shape: [10, 20]});\n * const output = rnn.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the `GRUCell`'s number of units.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function gru(args: GRULayerArgs): Layer {\n  return new GRU(args);\n}\n\n/**\n * Cell class for `GRU`.\n *\n * `GRUCell` is distinct from the `RNN` subclass `GRU` in that its\n * `apply` method takes the input data of only a single time step and returns\n * the cell's output at the time step, while `GRU` takes the input data\n * over a number of time steps. For example:\n *\n * ```js\n * const cell = tf.layers.gruCell({units: 2});\n * const input = tf.input({shape: [10]});\n * const output = cell.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10]: This is the cell's output at a single time step. The 1st\n * // dimension is the unknown batch size.\n * ```\n *\n * Instance(s) of `GRUCell` can be used to construct `RNN` layers. The\n * most typical use of this workflow is to combine a number of cells into a\n * stacked RNN cell (i.e., `StackedRNNCell` internally) and use it to create an\n * RNN. For example:\n *\n * ```js\n * const cells = [\n *   tf.layers.gruCell({units: 4}),\n *   tf.layers.gruCell({units: 8}),\n * ];\n * const rnn = tf.layers.rnn({cell: cells, returnSequences: true});\n *\n * // Create an input with 10 time steps and a length-20 vector at each step.\n * const input = tf.input({shape: [10, 20]});\n * const output = rnn.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the last `gruCell`'s number of units.\n * ```\n *\n * To create an `RNN` consisting of only *one* `GRUCell`, use the\n * `tf.layers.gru`.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function gruCell(args: GRUCellLayerArgs): RNNCell {\n  return new GRUCell(args);\n}\n\n/**\n * Long-Short Term Memory layer - Hochreiter 1997.\n *\n * This is an `RNN` layer consisting of one `LSTMCell`. However, unlike\n * the underlying `LSTMCell`, the `apply` method of `LSTM` operates\n * on a sequence of inputs. The shape of the input (not including the first,\n * batch dimension) needs to be at least 2-D, with the first dimension being\n * time steps. For example:\n *\n * ```js\n * const lstm = tf.layers.lstm({units: 8, returnSequences: true});\n *\n * // Create an input with 10 time steps.\n * const input = tf.input({shape: [10, 20]});\n * const output = lstm.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the `LSTMCell`'s number of units.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function lstm(args: LSTMLayerArgs): Layer {\n  return new LSTM(args);\n}\n\n/**\n * Cell class for `LSTM`.\n *\n * `LSTMCell` is distinct from the `RNN` subclass `LSTM` in that its\n * `apply` method takes the input data of only a single time step and returns\n * the cell's output at the time step, while `LSTM` takes the input data\n * over a number of time steps. For example:\n *\n * ```js\n * const cell = tf.layers.lstmCell({units: 2});\n * const input = tf.input({shape: [10]});\n * const output = cell.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10]: This is the cell's output at a single time step. The 1st\n * // dimension is the unknown batch size.\n * ```\n *\n * Instance(s) of `LSTMCell` can be used to construct `RNN` layers. The\n * most typical use of this workflow is to combine a number of cells into a\n * stacked RNN cell (i.e., `StackedRNNCell` internally) and use it to create an\n * RNN. For example:\n *\n * ```js\n * const cells = [\n *   tf.layers.lstmCell({units: 4}),\n *   tf.layers.lstmCell({units: 8}),\n * ];\n * const rnn = tf.layers.rnn({cell: cells, returnSequences: true});\n *\n * // Create an input with 10 time steps and a length-20 vector at each step.\n * const input = tf.input({shape: [10, 20]});\n * const output = rnn.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the last `lstmCell`'s number of units.\n * ```\n *\n * To create an `RNN` consisting of only *one* `LSTMCell`, use the\n * `tf.layers.lstm`.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function lstmCell(args: LSTMCellLayerArgs): RNNCell {\n  return new LSTMCell(args);\n}\n\n/**\n * Fully-connected RNN where the output is to be fed back to input.\n *\n * This is an `RNN` layer consisting of one `SimpleRNNCell`. However, unlike\n * the underlying `SimpleRNNCell`, the `apply` method of `SimpleRNN` operates\n * on a sequence of inputs. The shape of the input (not including the first,\n * batch dimension) needs to be at least 2-D, with the first dimension being\n * time steps. For example:\n *\n * ```js\n * const rnn = tf.layers.simpleRNN({units: 8, returnSequences: true});\n *\n * // Create an input with 10 time steps.\n * const input = tf.input({shape: [10, 20]});\n * const output = rnn.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the `SimpleRNNCell`'s number of units.\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function simpleRNN(args: SimpleRNNLayerArgs): Layer {\n  return new SimpleRNN(args);\n}\n\n/**\n * Cell class for `SimpleRNN`.\n *\n * `SimpleRNNCell` is distinct from the `RNN` subclass `SimpleRNN` in that its\n * `apply` method takes the input data of only a single time step and returns\n * the cell's output at the time step, while `SimpleRNN` takes the input data\n * over a number of time steps. For example:\n *\n * ```js\n * const cell = tf.layers.simpleRNNCell({units: 2});\n * const input = tf.input({shape: [10]});\n * const output = cell.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10]: This is the cell's output at a single time step. The 1st\n * // dimension is the unknown batch size.\n * ```\n *\n * Instance(s) of `SimpleRNNCell` can be used to construct `RNN` layers. The\n * most typical use of this workflow is to combine a number of cells into a\n * stacked RNN cell (i.e., `StackedRNNCell` internally) and use it to create an\n * RNN. For example:\n *\n * ```js\n * const cells = [\n *   tf.layers.simpleRNNCell({units: 4}),\n *   tf.layers.simpleRNNCell({units: 8}),\n * ];\n * const rnn = tf.layers.rnn({cell: cells, returnSequences: true});\n *\n * // Create an input with 10 time steps and a length-20 vector at each step.\n * const input = tf.input({shape: [10, 20]});\n * const output = rnn.apply(input);\n *\n * console.log(JSON.stringify(output.shape));\n * // [null, 10, 8]: 1st dimension is unknown batch size; 2nd dimension is the\n * // same as the sequence length of `input`, due to `returnSequences`: `true`;\n * // 3rd dimension is the last `SimpleRNNCell`'s number of units.\n * ```\n *\n * To create an `RNN` consisting of only *one* `SimpleRNNCell`, use the\n * `tf.layers.simpleRNN`.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function simpleRNNCell(args: SimpleRNNCellLayerArgs): RNNCell {\n  return new SimpleRNNCell(args);\n}\n\n/**\n * Base class for recurrent layers.\n *\n * Input shape:\n *   3D tensor with shape `[batchSize, timeSteps, inputDim]`.\n *\n * Output shape:\n *   - if `returnState`, an Array of tensors (i.e., `tf.Tensor`s). The first\n *     tensor is the output. The remaining tensors are the states at the\n *     last time step, each with shape `[batchSize, units]`.\n *   - if `returnSequences`, the output will have shape\n *     `[batchSize, timeSteps, units]`.\n *   - else, the output will have shape `[batchSize, units]`.\n *\n * Masking:\n *   This layer supports masking for input data with a variable number\n *   of timesteps. To introduce masks to your data,\n *   use an embedding layer with the `mask_zero` parameter\n *   set to `True`.\n *\n * Notes on using statefulness in RNNs:\n *   You can set RNN layers to be 'stateful', which means that the states\n *   computed for the samples in one batch will be reused as initial states\n *   for the samples in the next batch. This assumes a one-to-one mapping\n *   between samples in different successive batches.\n *\n *   To enable statefulness:\n *     - specify `stateful: true` in the layer constructor.\n *     - specify a fixed batch size for your model, by passing\n *       if sequential model:\n *         `batchInputShape=[...]` to the first layer in your model.\n *       else for functional model with 1 or more Input layers:\n *         `batchShape=[...]` to all the first layers in your model.\n *       This is the expected shape of your inputs *including the batch size*.\n *       It should be a tuple of integers, e.g. `(32, 10, 100)`.\n *     - specify `shuffle=False` when calling fit().\n *\n *   To reset the states of your model, call `.resetStates()` on either\n *   a specific layer, or on your entire model.\n *\n * Note on specifying the initial state of RNNs\n *   You can specify the initial state of RNN layers symbolically by\n *   calling them with the option `initialState`. The value of\n *   `initialState` should be a tensor or list of tensors representing\n *   the initial state of the RNN layer.\n *\n *   You can specify the initial state of RNN layers numerically by\n *   calling `resetStates` with the keyword argument `states`. The value of\n *   `states` should be a numpy array or list of numpy arrays representing\n *   the initial state of the RNN layer.\n *\n * Note on passing external constants to RNNs\n *   You can pass \"external\" constants to the cell using the `constants`\n *   keyword argument of `RNN.call` method. This requires that the `cell.call`\n *   method accepts the same keyword argument `constants`. Such constants\n *   can be used to conditon the cell transformation on additional static inputs\n *   (not changing over time), a.k.a an attention mechanism.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function rnn(args: RNNLayerArgs): Layer {\n  return new RNN(args);\n}\n\n/**\n * Wrapper allowing a stack of RNN cells to behave as a single cell.\n *\n * Used to implement efficient stacked RNNs.\n */\n/** @doc {heading: 'Layers', subheading: 'Recurrent', namespace: 'layers'} */\nexport function stackedRNNCells(args: StackedRNNCellsArgs): RNNCell {\n  return new StackedRNNCells(args);\n}\n\n// Wrapper Layers.\n\n/** @doc {heading: 'Layers', subheading: 'Wrapper', namespace: 'layers'} */\nexport function bidirectional(args: BidirectionalLayerArgs): Bidirectional {\n  return new Bidirectional(args);\n}\n\n/**\n * This wrapper applies a layer to every temporal slice of an input.\n *\n * The input should be at least 3D,  and the dimension of the index `1` will be\n * considered to be the temporal dimension.\n *\n * Consider a batch of 32 samples, where each sample is a sequence of 10 vectors\n * of 16 dimensions. The batch input shape of the layer is then `[32,  10,\n * 16]`, and the `inputShape`, not including the sample dimension, is\n * `[10, 16]`.\n *\n * You can then use `TimeDistributed` to apply a `Dense` layer to each of the 10\n * timesteps, independently:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.timeDistributed({\n *   layer: tf.layers.dense({units: 8}),\n *   inputShape: [10, 16],\n * }));\n *\n * // Now model.outputShape = [null, 10, 8].\n * // The output will then have shape `[32, 10, 8]`.\n *\n * // In subsequent layers, there is no need for `inputShape`:\n * model.add(tf.layers.timeDistributed({layer: tf.layers.dense({units: 32})}));\n * console.log(JSON.stringify(model.outputs[0].shape));\n * // Now model.outputShape = [null, 10, 32].\n * ```\n *\n * The output will then have shape `[32, 10, 32]`.\n *\n * `TimeDistributed` can be used with arbitrary layers, not just `Dense`, for\n * instance a `Conv2D` layer.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.timeDistributed({\n *   layer: tf.layers.conv2d({filters: 64, kernelSize: [3, 3]}),\n *   inputShape: [10, 299, 299, 3],\n * }));\n * console.log(JSON.stringify(model.outputs[0].shape));\n * ```\n */\n/** @doc {heading: 'Layers', subheading: 'Wrapper', namespace: 'layers'} */\nexport function timeDistributed(args: WrapperLayerArgs): Layer {\n  return new TimeDistributed(args);\n}\n\n// Aliases for pooling.\nexport const globalMaxPool1d = globalMaxPooling1d;\nexport const globalMaxPool2d = globalMaxPooling2d;\nexport const maxPool1d = maxPooling1d;\nexport const maxPool2d = maxPooling2d;\n\nexport {Layer, RNN, RNNCell, input /* alias for tf.input */};\n\n/**\n * Apply additive zero-centered Gaussian noise.\n *\n * As it is a regularization layer, it is only active at training time.\n *\n * This is useful to mitigate overfitting\n * (you could see it as a form of random data augmentation).\n * Gaussian Noise (GS) is a natural choice as corruption process\n * for real valued inputs.\n *\n * # Arguments\n *     stddev: float, standard deviation of the noise distribution.\n *\n * # Input shape\n *         Arbitrary. Use the keyword argument `input_shape`\n *         (tuple of integers, does not include the samples axis)\n *         when using this layer as the first layer in a model.\n *\n * # Output shape\n *         Same shape as input.\n */\n/** @doc {heading: 'Layers', subheading: 'Noise', namespace: 'layers'} */\nexport function gaussianNoise(args: GaussianNoiseArgs): GaussianNoise {\n  return new GaussianNoise(args);\n}\n\n/**\n * Apply multiplicative 1-centered Gaussian noise.\n *\n * As it is a regularization layer, it is only active at training time.\n *\n * Arguments:\n *   - `rate`: float, drop probability (as with `Dropout`).\n *     The multiplicative noise will have\n *     standard deviation `sqrt(rate / (1 - rate))`.\n *\n * Input shape:\n *   Arbitrary. Use the keyword argument `inputShape`\n *   (tuple of integers, does not include the samples axis)\n *   when using this layer as the first layer in a model.\n *\n * Output shape:\n *   Same shape as input.\n *\n * References:\n *   - [Dropout: A Simple Way to Prevent Neural Networks from Overfitting](\n *      http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf)\n *\n */\n/** @doc {heading: 'Layers', subheading: 'Noise', namespace: 'layers'} */\nexport function gaussianDropout(args: GaussianDropoutArgs): GaussianDropout {\n  return new GaussianDropout(args);\n}\n\n/**\n * Applies Alpha Dropout to the input.\n *\n * As it is a regularization layer, it is only active at training time.\n *\n * Alpha Dropout is a `Dropout` that keeps mean and variance of inputs\n * to their original values, in order to ensure the self-normalizing property\n * even after this dropout.\n * Alpha Dropout fits well to Scaled Exponential Linear Units\n * by randomly setting activations to the negative saturation value.\n *\n * Arguments:\n *   - `rate`: float, drop probability (as with `Dropout`).\n *     The multiplicative noise will have\n *     standard deviation `sqrt(rate / (1 - rate))`.\n *   - `noise_shape`: A 1-D `Tensor` of type `int32`, representing the\n *     shape for randomly generated keep/drop flags.\n *\n * Input shape:\n *   Arbitrary. Use the keyword argument `inputShape`\n *   (tuple of integers, does not include the samples axis)\n *   when using this layer as the first layer in a model.\n *\n * Output shape:\n *   Same shape as input.\n *\n * References:\n *   - [Self-Normalizing Neural Networks](https://arxiv.org/abs/1706.02515)\n */\n/** @doc {heading: 'Layers', subheading: 'Noise', namespace: 'layers'} */\nexport function alphaDropout(args: AlphaDropoutArgs): AlphaDropout {\n  return new AlphaDropout(args);\n}\n\n/**\n * Masks a sequence by using a mask value to skip timesteps.\n *\n * If all features for a given sample timestep are equal to `mask_value`,\n * then the sample timestep will be masked (skipped) in all downstream layers\n * (as long as they support masking).\n *\n * If any downstream layer does not support masking yet receives such\n * an input mask, an exception will be raised.\n *\n * Arguments:\n *   - `maskValue`: Either None or mask value to skip.\n *\n * Input shape:\n *   Arbitrary. Use the keyword argument `inputShape`\n *   (tuple of integers, does not include the samples axis)\n *   when using this layer as the first layer in a model.\n *\n * Output shape:\n *   Same shape as input.\n */\n/** @doc {heading: 'Layers', subheading: 'Mask', namespace: 'layers'} */\nexport function masking(args?: MaskingArgs): Layer {\n  return new Masking(args);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\nimport {Tensor} from '@tensorflow/tfjs-core';\n\nimport * as losses from './losses';\nimport * as metrics from './metrics';\n\n/**\n * Binary accuracy metric function.\n *\n * `yTrue` and `yPred` can have 0-1 values. Example:\n * ```js\n * const x = tf.tensor2d([[1, 1, 1, 1], [0, 0, 0, 0]], [2, 4]);\n * const y = tf.tensor2d([[1, 0, 1, 0], [0, 0, 0, 1]], [2, 4]);\n * const accuracy = tf.metrics.binaryAccuracy(x, y);\n * accuracy.print();\n * ```\n *\n * `yTrue` and `yPred` can also have floating-number values between 0 and 1, in\n * which case the values will be thresholded at 0.5 to yield 0-1 values (i.e.,\n * a value >= 0.5 and <= 1.0 is interpreted as 1.\n * )\n * Example:\n * ```js\n * const x = tf.tensor1d([1, 1, 1, 1, 0, 0, 0, 0]);\n * const y = tf.tensor1d([0.2, 0.4, 0.6, 0.8, 0.2, 0.3, 0.4, 0.7]);\n * const accuracy = tf.metrics.binaryAccuracy(x, y);\n * accuracy.print();\n * ```\n *\n * @param yTrue Binary Tensor of truth.\n * @param yPred Binary Tensor of prediction.\n * @return Accuracy Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function binaryAccuracy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.binaryAccuracy(yTrue, yPred);\n}\n\n/**\n * Binary crossentropy metric function.\n *\n * Example:\n * ```js\n * const x = tf.tensor2d([[0], [1], [1], [1]]);\n * const y = tf.tensor2d([[0], [0], [0.5], [1]]);\n * const crossentropy = tf.metrics.binaryCrossentropy(x, y);\n * crossentropy.print();\n * ```\n *\n * @param yTrue Binary Tensor of truth.\n * @param yPred Binary Tensor of prediction, probabilities for the `1` case.\n * @return Accuracy Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function binaryCrossentropy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.binaryCrossentropy(yTrue, yPred);\n}\n\n/**\n * Sparse categorical accuracy metric function.\n *\n * Example:\n * ```js\n *\n * const yTrue = tf.tensor1d([1, 1, 2, 2, 0]);\n * const yPred = tf.tensor2d(\n *      [[0, 1, 0], [1, 0, 0], [0, 0.4, 0.6], [0, 0.6, 0.4], [0.7, 0.3, 0]]);\n * const crossentropy = tf.metrics.sparseCategoricalAccuracy(yTrue, yPred);\n * crossentropy.print();\n * ```\n *\n * @param yTrue True labels: indices.\n * @param yPred Predicted probabilities or logits.\n * @returns Accuracy tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function sparseCategoricalAccuracy(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.sparseCategoricalAccuracy(yTrue, yPred);\n}\n\n/**\n * Categorical accuracy metric function.\n *\n * Example:\n * ```js\n * const x = tf.tensor2d([[0, 0, 0, 1], [0, 0, 0, 1]]);\n * const y = tf.tensor2d([[0.1, 0.8, 0.05, 0.05], [0.1, 0.05, 0.05, 0.8]]);\n * const accuracy = tf.metrics.categoricalAccuracy(x, y);\n * accuracy.print();\n * ```\n *\n * @param yTrue Binary Tensor of truth: one-hot encoding of categories.\n * @param yPred Binary Tensor of prediction: probabilities or logits for the\n *   same categories as in `yTrue`.\n * @return Accuracy Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function categoricalAccuracy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.categoricalAccuracy(yTrue, yPred);\n}\n\n/**\n * Categorical crossentropy between an output tensor and a target tensor.\n *\n * @param target A tensor of the same shape as `output`.\n * @param output A tensor resulting from a softmax (unless `fromLogits` is\n *  `true`, in which case `output` is expected to be the logits).\n * @param fromLogits Boolean, whether `output` is the result of a softmax, or is\n *   a tensor of logits.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function categoricalCrossentropy(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.categoricalCrossentropy(yTrue, yPred);\n}\n\n/**\n * Computes the precision of the predictions with respect to the labels.\n *\n * Example:\n * ```js\n * const x = tf.tensor2d(\n *    [\n *      [0, 0, 0, 1],\n *      [0, 1, 0, 0],\n *      [0, 0, 0, 1],\n *      [1, 0, 0, 0],\n *      [0, 0, 1, 0]\n *    ]\n * );\n *\n * const y = tf.tensor2d(\n *    [\n *      [0, 0, 1, 0],\n *      [0, 1, 0, 0],\n *      [0, 0, 0, 1],\n *      [0, 1, 0, 0],\n *      [0, 1, 0, 0]\n *    ]\n * );\n *\n * const precision = tf.metrics.precision(x, y);\n * precision.print();\n * ```\n *\n * @param yTrue The ground truth values. Expected to be contain only 0-1 values.\n * @param yPred The predicted values. Expected to be contain only 0-1 values.\n * @return Precision Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function precision(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.precision(yTrue, yPred);\n}\n\n/**\n * Computes the recall of the predictions with respect to the labels.\n *\n * Example:\n * ```js\n * const x = tf.tensor2d(\n *    [\n *      [0, 0, 0, 1],\n *      [0, 1, 0, 0],\n *      [0, 0, 0, 1],\n *      [1, 0, 0, 0],\n *      [0, 0, 1, 0]\n *    ]\n * );\n *\n * const y = tf.tensor2d(\n *    [\n *      [0, 0, 1, 0],\n *      [0, 1, 0, 0],\n *      [0, 0, 0, 1],\n *      [0, 1, 0, 0],\n *      [0, 1, 0, 0]\n *    ]\n * );\n *\n * const recall = tf.metrics.recall(x, y);\n * recall.print();\n * ```\n *\n * @param yTrue The ground truth values. Expected to be contain only 0-1 values.\n * @param yPred The predicted values. Expected to be contain only 0-1 values.\n * @return Recall Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function recall(yTrue: Tensor, yPred: Tensor): Tensor {\n  return metrics.recall(yTrue, yPred);\n}\n\n/**\n * Loss or metric function: Cosine proximity.\n *\n * Mathematically, cosine proximity is defined as:\n *   `-sum(l2Normalize(yTrue) * l2Normalize(yPred))`,\n * wherein `l2Normalize()` normalizes the L2 norm of the input to 1 and `*`\n * represents element-wise multiplication.\n *\n * ```js\n * const yTrue = tf.tensor2d([[1, 0], [1, 0]]);\n * const yPred = tf.tensor2d([[1 / Math.sqrt(2), 1 / Math.sqrt(2)], [0, 1]]);\n * const proximity = tf.metrics.cosineProximity(yTrue, yPred);\n * proximity.print();\n * ```\n *\n * @param yTrue Truth Tensor.\n * @param yPred Prediction Tensor.\n * @return Cosine proximity Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function cosineProximity(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.cosineProximity(yTrue, yPred);\n}\n\n/**\n * Loss or metric function: Mean absolute error.\n *\n * Mathematically, mean absolute error is defined as:\n *   `mean(abs(yPred - yTrue))`,\n * wherein the `mean` is applied over feature dimensions.\n *\n * ```js\n * const yTrue = tf.tensor2d([[0, 1], [0, 0], [2, 3]]);\n * const yPred = tf.tensor2d([[0, 1], [0, 1], [-2, -3]]);\n * const mse = tf.metrics.meanAbsoluteError(yTrue, yPred);\n * mse.print();\n * ```\n *\n * @param yTrue Truth Tensor.\n * @param yPred Prediction Tensor.\n * @return Mean absolute error Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function meanAbsoluteError(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanAbsoluteError(yTrue, yPred);\n}\n\n/**\n * Loss or metric function: Mean absolute percentage error.\n *\n * ```js\n * const yTrue = tf.tensor2d([[0, 1], [10, 20]]);\n * const yPred = tf.tensor2d([[0, 1], [11, 24]]);\n * const mse = tf.metrics.meanAbsolutePercentageError(yTrue, yPred);\n * mse.print();\n * ```\n *\n * Aliases: `tf.metrics.MAPE`, `tf.metrics.mape`.\n *\n * @param yTrue Truth Tensor.\n * @param yPred Prediction Tensor.\n * @return Mean absolute percentage error Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function meanAbsolutePercentageError(\n    yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanAbsolutePercentageError(yTrue, yPred);\n}\n\nexport function MAPE(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanAbsolutePercentageError(yTrue, yPred);\n}\n\nexport function mape(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanAbsolutePercentageError(yTrue, yPred);\n}\n\n/**\n * Loss or metric function: Mean squared error.\n *\n * ```js\n * const yTrue = tf.tensor2d([[0, 1], [3, 4]]);\n * const yPred = tf.tensor2d([[0, 1], [-3, -4]]);\n * const mse = tf.metrics.meanSquaredError(yTrue, yPred);\n * mse.print();\n * ```\n *\n * Aliases: `tf.metrics.MSE`, `tf.metrics.mse`.\n *\n * @param yTrue Truth Tensor.\n * @param yPred Prediction Tensor.\n * @return Mean squared error Tensor.\n */\n/** @doc {heading: 'Metrics', namespace: 'metrics'} */\nexport function meanSquaredError(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanSquaredError(yTrue, yPred);\n}\n\nexport function MSE(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanSquaredError(yTrue, yPred);\n}\n\nexport function mse(yTrue: Tensor, yPred: Tensor): Tensor {\n  return losses.meanSquaredError(yTrue, yPred);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\nimport * as regularizers from './regularizers';\n// tslint:disable-next-line:max-line-length\nimport {L1Args, L1L2, L1L2Args, L2Args, Regularizer} from './regularizers';\n\n/**\n * Regularizer for L1 and L2 regularization.\n *\n * Adds a term to the loss to penalize large weights:\n * loss += sum(l1 * abs(x)) + sum(l2 * x^2)\n */\n/** @doc {heading: 'Regularizers', namespace: 'regularizers'} */\nexport function l1l2(config?: L1L2Args): Regularizer {\n  return new L1L2(config);\n}\n\n/**\n * Regularizer for L1 regularization.\n *\n * Adds a term to the loss to penalize large weights:\n * loss += sum(l1 * abs(x))\n * @param args l1 config.\n */\n/** @doc {heading: 'Regularizers', namespace: 'regularizers'} */\nexport function l1(config?: L1Args): Regularizer {\n  return regularizers.l1(config);\n}\n\n/**\n * Regularizer for L2 regularization.\n *\n * Adds a term to the loss to penalize large weights:\n * loss += sum(l2 * x^2)\n * @param args l2 config.\n */\n/** @doc {heading: 'Regularizers', namespace: 'regularizers'} */\nexport function l2(config?: L2Args): Regularizer {\n  return regularizers.l2(config);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Use of this source code is governed by an MIT-style\n * license that can be found in the LICENSE file or at\n * https://opensource.org/licenses/MIT.\n * =============================================================================\n */\n\n/* Original source: keras/callbacks.py */\n\nimport {BaseCallback} from './base_callbacks';\nimport {Container} from './engine/container';\nimport {LayersModel} from './engine/training';\nimport {NotImplementedError} from './errors';\nimport {Logs, resolveScalarsInLogs} from './logs';\n\nexport abstract class Callback extends BaseCallback {\n  /** Instance of `keras.models.Model`. Reference of the model being trained. */\n  model: LayersModel = null;\n\n  setModel(model: Container): void {\n    if (!(model instanceof LayersModel)) {\n      throw new Error('model must be a LayersModel, not some other Container');\n    }\n    this.model = model;\n  }\n}\n\nexport interface EarlyStoppingCallbackArgs {\n  /**\n   * Quantity to be monitored.\n   *\n   * Defaults to 'val_loss'.\n   */\n  monitor?: string;\n\n  /**\n   * Minimum change in the monitored quantity to qualify as improvement,\n   * i.e., an absolute change of less than `minDelta` will count as no\n   * improvement.\n   *\n   * Defaults to 0.\n   */\n  minDelta?: number;\n\n  /**\n   * Number of epochs with no improvement after which training will be stopped.\n   *\n   * Defaults to 0.\n   */\n  patience?: number;\n\n  /** Verbosity mode. */\n  verbose?: number;\n\n  /**\n   * Mode: one of 'min', 'max', and 'auto'.\n   * - In 'min' mode, training will be stopped when the quantity monitored has\n   *   stopped decreasing.\n   * - In 'max' mode, training will be stopped when the quantity monitored has\n   *   stopped increasing.\n   * - In 'auto' mode, the direction is inferred automatically from the name of\n   *   the monitored quantity.\n   *\n   * Defaults to 'auto'.\n   */\n  mode?: 'auto'|'min'|'max';\n\n  /**\n   * Baseline value of the monitored quantity.\n   *\n   * If specified, training will be stopped if the model doesn't show\n   * improvement over the baseline.\n   */\n  baseline?: number;\n\n  /**\n   * Whether to restore model weights from the epoch with the best value\n   * of the monitored quantity. If `False`, the model weights obtained at the\n   * at the last step of training are used.\n   *\n   * **`True` is not supported yet.**\n   */\n  restoreBestWeights?: boolean;\n}\n\nfunction less(currVal: number, prevVal: number) {\n  return currVal < prevVal;\n}\n\nfunction greater(currVal: number, prevVal: number) {\n  return currVal > prevVal;\n}\n\n/**\n * A Callback that stops training when a monitored quantity has stopped\n * improving.\n */\nexport class EarlyStopping extends Callback {\n  protected readonly monitor: string;\n  protected readonly minDelta: number;\n  protected readonly patience: number;\n  protected readonly baseline: number;\n  protected readonly verbose: number;\n  protected readonly mode: 'auto'|'min'|'max';\n\n  protected monitorFunc: (currVal: number, prevVal: number) => boolean;\n\n  private wait: number;\n  private stoppedEpoch: number;\n  private best: number;\n\n  constructor(args?: EarlyStoppingCallbackArgs) {\n    super();\n    if (args == null) {\n      args = {};\n    }\n    if (args.restoreBestWeights) {\n      throw new NotImplementedError(\n          'restoreBestWeights = True is not implemented in EarlyStopping yet.');\n    }\n\n    this.monitor = args.monitor || 'val_loss';\n    this.minDelta = Math.abs(args.minDelta || 0);\n    this.patience = args.patience || 0;\n    this.verbose = args.verbose || 0;\n    this.mode = args.mode || 'auto';\n    this.baseline = args.baseline;\n\n    if (['auto', 'min', 'max'].indexOf(this.mode) === -1) {\n      console.warn(\n          `EarlyStopping mode '${this.mode}' is invalid. ` +\n          `Falling back to mode 'auto'.`);\n      this.mode = 'auto';\n    }\n\n    if (this.mode === 'min') {\n      this.monitorFunc = less;\n    } else if (this.mode === 'max') {\n      this.monitorFunc = greater;\n    } else {\n      // For mode === 'auto'.\n      if (this.monitor.indexOf('acc') !== -1) {\n        this.monitorFunc = greater;\n      } else {\n        this.monitorFunc = less;\n      }\n    }\n\n    if (this.monitorFunc === less) {\n      this.minDelta *= -1;\n    }\n  }\n\n  async onTrainBegin(logs?: Logs) {\n    this.wait = 0;\n    this.stoppedEpoch = 0;\n    if (this.baseline != null) {\n      this.best = this.baseline;\n    } else {\n      this.best = this.monitorFunc === less ? Infinity : -Infinity;\n    }\n  }\n\n  async onEpochEnd(epoch: number, logs?: Logs) {\n    await resolveScalarsInLogs(logs);\n    const current = this.getMonitorValue(logs);\n    if (current == null) {\n      return;\n    }\n\n    if (this.monitorFunc(current - this.minDelta, this.best)) {\n      this.best = current;\n      this.wait = 0;\n      // TODO(cais): Logic for restoreBestWeights.\n    } else {\n      this.wait++;\n      if (this.wait >= this.patience) {\n        this.stoppedEpoch = epoch;\n        this.model.stopTraining = true;\n      }\n      // TODO(cais): Logic for restoreBestWeights.\n    }\n  }\n\n  async onTrainEnd(logs?: Logs) {\n    if (this.stoppedEpoch > 0 && this.verbose) {\n      console.log(`Epoch ${this.stoppedEpoch}: early stopping.`);\n    }\n  }\n\n  private getMonitorValue(logs: Logs) {\n    if (logs == null) {\n      logs = {};\n    }\n    const monitorValue = logs[this.monitor];\n    if (monitorValue == null) {\n      console.warn(\n          `Metric for EarlyStopping ${this.monitor} is not available. ` +\n          `Available metrics are: ${Object.keys(logs)}`);\n    }\n    return monitorValue;\n  }\n}\n\n/**\n * Factory function for a Callback that stops training when a monitored\n * quantity has stopped improving.\n *\n * Early stopping is a type of regularization, and protects model against\n * overfitting.\n *\n * The following example based on fake data illustrates how this callback\n * can be used during `tf.LayersModel.fit()`:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.dense({\n *   units: 3,\n *   activation: 'softmax',\n *   kernelInitializer: 'ones',\n *   inputShape: [2]\n * }));\n * const xs = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const ys = tf.tensor2d([[1, 0, 0], [0, 1, 0]], [2, 3]);\n * const xsVal = tf.tensor2d([4, 3, 2, 1], [2, 2]);\n * const ysVal = tf.tensor2d([[0, 0, 1], [0, 1, 0]], [2, 3]);\n * model.compile(\n *     {loss: 'categoricalCrossentropy', optimizer: 'sgd', metrics: ['acc']});\n *\n * // Without the EarlyStopping callback, the val_acc value would be:\n * //   0.5, 0.5, 0.5, 0.5, ...\n * // With val_acc being monitored, training should stop after the 2nd epoch.\n * const history = await model.fit(xs, ys, {\n *   epochs: 10,\n *   validationData: [xsVal, ysVal],\n *   callbacks: tf.callbacks.earlyStopping({monitor: 'val_acc'})\n * });\n *\n * // Expect to see a length-2 array.\n * console.log(history.history.val_acc);\n * ```\n */\n/**\n * @doc {\n *   heading: 'Callbacks',\n *   namespace: 'callbacks'\n * }\n */\nexport function earlyStopping(args?: EarlyStoppingCallbackArgs) {\n  return new EarlyStopping(args);\n}\n\nexport const callbacks = {earlyStopping};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\n/* tslint:disable */\n\n/** Properties of an Any. */\nexport declare interface IAny {\n  /** Any typeUrl */\n  typeUrl?: (string|null);\n\n  /** Any value */\n  value?: (Uint8Array|null);\n}\n\n/** DataType enum. */\nexport enum DataType {\n  'DT_INVALID' = 0,\n  'DT_FLOAT' = 1,\n  'DT_DOUBLE' = 2,\n  'DT_INT32' = 3,\n  'DT_UINT8' = 4,\n  'DT_INT16' = 5,\n  'DT_INT8' = 6,\n  'DT_STRING' = 7,\n  'DT_COMPLEX64' = 8,\n  'DT_INT64' = 9,\n  'DT_BOOL' = 10,\n  'DT_QINT8' = 11,\n  'DT_QUINT8' = 12,\n  'DT_QINT32' = 13,\n  'DT_BFLOAT16' = 14,\n  'DT_FLOAT_REF' = 101,\n  'DT_DOUBLE_REF' = 102,\n  'DT_INT32_REF' = 103,\n  'DT_UINT8_REF' = 104,\n  'DT_INT16_REF' = 105,\n  'DT_INT8_REF' = 106,\n  'DT_STRING_REF' = 107,\n  'DT_COMPLEX64_REF' = 108,\n  'DT_INT64_REF' = 109,\n  'DT_BOOL_REF' = 110,\n  'DT_QINT8_REF' = 111,\n  'DT_QUINT8_REF' = 112,\n  'DT_QINT32_REF' = 113,\n  'DT_BFLOAT16_REF' = 114\n}\n\n/** Properties of a TensorShape. */\nexport declare interface ITensorShape {\n  /** TensorShape dim */\n  dim?: (TensorShape.IDim[]|null);\n\n  /** TensorShape unknownRank */\n  unknownRank?: (boolean|null);\n}\n\nexport namespace TensorShape {\n  /** Properties of a Dim. */\n  export declare interface IDim {\n    /** Dim size */\n    size?: (number|string|null);\n\n    /** Dim name */\n    name?: (string|null);\n  }\n}\n\n/** Properties of a Tensor. */\nexport declare interface ITensor {\n  /** Tensor dtype */\n  dtype?: (DataType|null);\n\n  /** Tensor tensorShape */\n  tensorShape?: (ITensorShape|null);\n\n  /** Tensor versionNumber */\n  versionNumber?: (number|null);\n\n  /** Tensor tensorContent */\n  tensorContent?: (Uint8Array|null);\n\n  /** Tensor floatVal */\n  floatVal?: (number[]|null);\n\n  /** Tensor doubleVal */\n  doubleVal?: (number[]|null);\n\n  /** Tensor intVal */\n  intVal?: (number[]|null);\n\n  /** Tensor stringVal */\n  stringVal?: (Uint8Array[]|null);\n\n  /** Tensor scomplexVal */\n  scomplexVal?: (number[]|null);\n\n  /** Tensor int64Val */\n  int64Val?: ((number | string)[]|null);\n\n  /** Tensor boolVal */\n  boolVal?: (boolean[]|null);\n\n  /** Tensor uint32Val */\n  uint32Val?: (number[]|null);\n\n  /** Tensor uint64Val */\n  uint64Val?: ((number | string)[]|null);\n}\n\n/** Properties of an AttrValue. */\nexport declare interface IAttrValue {\n  /** AttrValue list */\n  list?: (AttrValue.IListValue|null);\n\n  /** AttrValue s */\n  s?: (string|null);\n\n  /** AttrValue i */\n  i?: (number|string|null);\n\n  /** AttrValue f */\n  f?: (number|null);\n\n  /** AttrValue b */\n  b?: (boolean|null);\n\n  /** AttrValue type */\n  type?: (DataType|null);\n\n  /** AttrValue shape */\n  shape?: (ITensorShape|null);\n\n  /** AttrValue tensor */\n  tensor?: (ITensor|null);\n\n  /** AttrValue placeholder */\n  placeholder?: (string|null);\n\n  /** AttrValue func */\n  func?: (INameAttrList|null);\n}\n\nexport namespace AttrValue {\n  /** Properties of a ListValue. */\n  export declare interface IListValue {\n    /** ListValue s */\n    s?: (string[]|null);\n\n    /** ListValue i */\n    i?: ((number | string)[]|null);\n\n    /** ListValue f */\n    f?: (number[]|null);\n\n    /** ListValue b */\n    b?: (boolean[]|null);\n\n    /** ListValue type */\n    type?: (DataType[]|null);\n\n    /** ListValue shape */\n    shape?: (ITensorShape[]|null);\n\n    /** ListValue tensor */\n    tensor?: (ITensor[]|null);\n\n    /** ListValue func */\n    func?: (INameAttrList[]|null);\n  }\n}\n\n/** Properties of a NameAttrList. */\nexport declare interface INameAttrList {\n  /** NameAttrList name */\n  name?: (string|null);\n\n  /** NameAttrList attr */\n  attr?: ({[k: string]: IAttrValue}|null);\n}\n\n/** Properties of a NodeDef. */\nexport declare interface INodeDef {\n  /** NodeDef name */\n  name?: (string|null);\n\n  /** NodeDef op */\n  op?: (string|null);\n\n  /** NodeDef input */\n  input?: (string[]|null);\n\n  /** NodeDef device */\n  device?: (string|null);\n\n  /** NodeDef attr */\n  attr?: ({[k: string]: IAttrValue}|null);\n}\n\n/** Properties of a VersionDef. */\nexport declare interface IVersionDef {\n  /** VersionDef producer */\n  producer?: (number|null);\n\n  /** VersionDef minConsumer */\n  minConsumer?: (number|null);\n\n  /** VersionDef badConsumers */\n  badConsumers?: (number[]|null);\n}\n\n/** Properties of a GraphDef. */\nexport declare interface IGraphDef {\n  /** GraphDef node */\n  node?: (INodeDef[]|null);\n\n  /** GraphDef versions */\n  versions?: (IVersionDef|null);\n\n  /** GraphDef library */\n  library?: (IFunctionDefLibrary|null);\n}\n\n/** Properties of a CollectionDef. */\nexport declare interface ICollectionDef {\n  /** CollectionDef nodeList */\n  nodeList?: (CollectionDef.INodeList|null);\n\n  /** CollectionDef bytesList */\n  bytesList?: (CollectionDef.IBytesList|null);\n\n  /** CollectionDef int64List */\n  int64List?: (CollectionDef.IInt64List|null);\n\n  /** CollectionDef floatList */\n  floatList?: (CollectionDef.IFloatList|null);\n\n  /** CollectionDef anyList */\n  anyList?: (CollectionDef.IAnyList|null);\n}\n\nexport namespace CollectionDef {\n  /** Properties of a NodeList. */\n  export declare interface INodeList {\n    /** NodeList value */\n    value?: (string[]|null);\n  }\n\n  /** Properties of a BytesList. */\n  export declare interface IBytesList {\n    /** BytesList value */\n    value?: (Uint8Array[]|null);\n  }\n\n  /** Properties of an Int64List. */\n  export declare interface IInt64List {\n    /** Int64List value */\n    value?: ((number | string)[]|null);\n  }\n\n  /** Properties of a FloatList. */\n  export declare interface IFloatList {\n    /** FloatList value */\n    value?: (number[]|null);\n  }\n\n  /** Properties of an AnyList. */\n  export declare interface IAnyList {\n    /** AnyList value */\n    value?: (IAny[]|null);\n  }\n}\n\n/** Properties of a SaverDef. */\nexport declare interface ISaverDef {\n  /** SaverDef filenameTensorName */\n  filenameTensorName?: (string|null);\n\n  /** SaverDef saveTensorName */\n  saveTensorName?: (string|null);\n\n  /** SaverDef restoreOpName */\n  restoreOpName?: (string|null);\n\n  /** SaverDef maxToKeep */\n  maxToKeep?: (number|null);\n\n  /** SaverDef sharded */\n  sharded?: (boolean|null);\n\n  /** SaverDef keepCheckpointEveryNHours */\n  keepCheckpointEveryNHours?: (number|null);\n\n  /** SaverDef version */\n  version?: (SaverDef.CheckpointFormatVersion|null);\n}\n\nexport namespace SaverDef {\n  /** CheckpointFormatVersion enum. */\n  export enum CheckpointFormatVersion {'LEGACY' = 0, 'V1' = 1, 'V2' = 2}\n}\n\n/** Properties of a TensorInfo. */\nexport declare interface ITensorInfo {\n  /** TensorInfo name */\n  name?: (string|null);\n\n  /** TensorInfo cooSparse */\n  cooSparse?: (TensorInfo.ICooSparse|null);\n\n  /** TensorInfo dtype */\n  dtype?: (DataType|null);\n\n  /** TensorInfo tensorShape */\n  tensorShape?: (ITensorShape|null);\n}\n\nexport namespace TensorInfo {\n  /** Properties of a CooSparse. */\n  export declare interface ICooSparse {\n    /** CooSparse valuesTensorName */\n    valuesTensorName?: (string|null);\n\n    /** CooSparse indicesTensorName */\n    indicesTensorName?: (string|null);\n\n    /** CooSparse denseShapeTensorName */\n    denseShapeTensorName?: (string|null);\n  }\n}\n\n/** Properties of a SignatureDef. */\nexport declare interface ISignatureDef {\n  /** SignatureDef inputs */\n  inputs?: ({[k: string]: ITensorInfo}|null);\n\n  /** SignatureDef outputs */\n  outputs?: ({[k: string]: ITensorInfo}|null);\n\n  /** SignatureDef methodName */\n  methodName?: (string|null);\n}\n\n/** Properties of an AssetFileDef. */\nexport declare interface IAssetFileDef {\n  /** AssetFileDef tensorInfo */\n  tensorInfo?: (ITensorInfo|null);\n\n  /** AssetFileDef filename */\n  filename?: (string|null);\n}\n\n/** Properties of an OpDef. */\nexport declare interface IOpDef {\n  /** OpDef name */\n  name?: (string|null);\n\n  /** OpDef inputArg */\n  inputArg?: (OpDef.IArgDef[]|null);\n\n  /** OpDef outputArg */\n  outputArg?: (OpDef.IArgDef[]|null);\n\n  /** OpDef attr */\n  attr?: (OpDef.IAttrDef[]|null);\n\n  /** OpDef deprecation */\n  deprecation?: (OpDef.IOpDeprecation|null);\n\n  /** OpDef summary */\n  summary?: (string|null);\n\n  /** OpDef description */\n  description?: (string|null);\n\n  /** OpDef isCommutative */\n  isCommutative?: (boolean|null);\n\n  /** OpDef isAggregate */\n  isAggregate?: (boolean|null);\n\n  /** OpDef isStateful */\n  isStateful?: (boolean|null);\n\n  /** OpDef allowsUninitializedInput */\n  allowsUninitializedInput?: (boolean|null);\n}\n\nexport namespace OpDef {\n  /** Properties of an ArgDef. */\n  export declare interface IArgDef {\n    /** ArgDef name */\n    name?: (string|null);\n\n    /** ArgDef description */\n    description?: (string|null);\n\n    /** ArgDef type */\n    type?: (DataType|null);\n\n    /** ArgDef typeAttr */\n    typeAttr?: (string|null);\n\n    /** ArgDef numberAttr */\n    numberAttr?: (string|null);\n\n    /** ArgDef typeListAttr */\n    typeListAttr?: (string|null);\n\n    /** ArgDef isRef */\n    isRef?: (boolean|null);\n  }\n\n  /** Properties of an AttrDef. */\n  export declare interface IAttrDef {\n    /** AttrDef name */\n    name?: (string|null);\n\n    /** AttrDef type */\n    type?: (string|null);\n\n    /** AttrDef defaultValue */\n    defaultValue?: (IAttrValue|null);\n\n    /** AttrDef description */\n    description?: (string|null);\n\n    /** AttrDef hasMinimum */\n    hasMinimum?: (boolean|null);\n\n    /** AttrDef minimum */\n    minimum?: (number|string|null);\n\n    /** AttrDef allowedValues */\n    allowedValues?: (IAttrValue|null);\n  }\n\n  /** Properties of an OpDeprecation. */\n  export declare interface IOpDeprecation {\n    /** OpDeprecation version */\n    version?: (number|null);\n\n    /** OpDeprecation explanation */\n    explanation?: (string|null);\n  }\n}\n\n/** Properties of an OpList. */\nexport declare interface IOpList {\n  /** OpList op */\n  op?: (IOpDef[]|null);\n}\n\n/** Properties of a MetaGraphDef. */\nexport declare interface IMetaGraphDef {\n  /** MetaGraphDef metaInfoDef */\n  metaInfoDef?: (MetaGraphDef.IMetaInfoDef|null);\n\n  /** MetaGraphDef graphDef */\n  graphDef?: (IGraphDef|null);\n\n  /** MetaGraphDef saverDef */\n  saverDef?: (ISaverDef|null);\n\n  /** MetaGraphDef collectionDef */\n  collectionDef?: ({[k: string]: ICollectionDef}|null);\n\n  /** MetaGraphDef signatureDef */\n  signatureDef?: ({[k: string]: ISignatureDef}|null);\n\n  /** MetaGraphDef assetFileDef */\n  assetFileDef?: (IAssetFileDef[]|null);\n}\n\nexport namespace MetaGraphDef {\n  /** Properties of a MetaInfoDef. */\n  export declare interface IMetaInfoDef {\n    /** MetaInfoDef metaGraphVersion */\n    metaGraphVersion?: (string|null);\n\n    /** MetaInfoDef strippedOpList */\n    strippedOpList?: (IOpList|null);\n\n    /** MetaInfoDef anyInfo */\n    anyInfo?: (IAny|null);\n\n    /** MetaInfoDef tags */\n    tags?: (string[]|null);\n\n    /** MetaInfoDef tensorflowVersion */\n    tensorflowVersion?: (string|null);\n\n    /** MetaInfoDef tensorflowGitVersion */\n    tensorflowGitVersion?: (string|null);\n  }\n}\n\n/** Properties of a SavedModel. */\nexport declare interface ISavedModel {\n  /** SavedModel savedModelSchemaVersion */\n  savedModelSchemaVersion?: (number|string|null);\n\n  /** SavedModel metaGraphs */\n  metaGraphs?: (IMetaGraphDef[]|null);\n}\n\n/** Properties of a FunctionDefLibrary. */\nexport declare interface IFunctionDefLibrary {\n  /** FunctionDefLibrary function */\n  'function'?: (IFunctionDef[]|null);\n\n  /** FunctionDefLibrary gradient */\n  gradient?: (IGradientDef[]|null);\n}\n\n/** Properties of a FunctionDef. */\nexport declare interface IFunctionDef {\n  /** FunctionDef signature */\n  signature?: (IOpDef|null);\n\n  /** FunctionDef attr */\n  attr?: ({[k: string]: IAttrValue}|null);\n\n  /** FunctionDef nodeDef */\n  nodeDef?: (INodeDef[]|null);\n\n  /** FunctionDef ret */\n  ret?: ({[k: string]: string}|null);\n}\n\n/** Properties of a GradientDef. */\nexport declare interface IGradientDef {\n  /** GradientDef functionName */\n  functionName?: (string|null);\n\n  /** GradientDef gradientFunc */\n  gradientFunc?: (string|null);\n}\n","\n/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {OpExecutor, OpMapper} from '../types';\n\nconst CUSTOM_OPS: {[key: string]: OpMapper} = {};\n\n/**\n * Register an Op for graph model executor. This allow you to register\n * TensorFlow custom op or override existing op.\n *\n * Here is an example of registering a new MatMul Op.\n * ```js\n * const customMatmul = (node) =>\n *    tf.matMul(\n *        node.inputs[0], node.inputs[1],\n *        node.attrs['transpose_a'], node.attrs['transpose_b']);\n *\n * tf.registerOp('MatMul', customMatmul);\n * ```\n * The inputs and attrs of the node object is based on the TensorFlow op\n * registry.\n *\n * @param name The Tensorflow Op name.\n * @param opFunc An op function which is called with the current graph node\n * during execution and needs to return a tensor or a list of tensors. The node\n * has the following attributes:\n *    - attr: A map from attribute name to its value\n *    - inputs: A list of input tensors\n */\n/** @doc {heading: 'Models', subheading: 'Op Registry'} */\nexport function registerOp(name: string, opFunc: OpExecutor) {\n  const opMapper: OpMapper = {\n    tfOpName: name,\n    category: 'custom',\n    inputs: [],\n    attrs: [],\n    customExecutor: opFunc\n  };\n\n  CUSTOM_OPS[name] = opMapper;\n}\n\n/**\n * Retrieve the OpMapper object for the registered op.\n *\n * @param name The Tensorflow Op name.\n */\n/** @doc {heading: 'Models', subheading: 'Op Registry'} */\n\nexport function getRegisteredOp(name: string): OpMapper {\n  return CUSTOM_OPS[name];\n}\n\n/**\n * Deregister the Op for graph model executor.\n *\n * @param name The Tensorflow Op name.\n */\n/** @doc {heading: 'Models', subheading: 'Op Registry'} */\nexport function deregisterOp(name: string) {\n  delete CUSTOM_OPS[name];\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {Node, ValueType} from '../types';\n\nexport function getParamValue(\n    paramName: string, node: Node, tensorMap: NamedTensorsMap,\n    context: ExecutionContext): ValueType {\n  const inputParam = node.inputParams[paramName];\n  if (inputParam && inputParam.inputIndexStart !== undefined) {\n    const start = inputParam.inputIndexStart;\n    const end = inputParam.inputIndexEnd === 0 ?\n        undefined :\n        (inputParam.inputIndexEnd === undefined ? start + 1 :\n                                                  inputParam.inputIndexEnd);\n    if (inputParam.type === 'tensor') {\n      return getTensor(\n          node.inputNames[inputParam.inputIndexStart], tensorMap, context);\n    }\n    if (inputParam.type === 'tensors') {\n      const inputs = node.inputNames.slice(start, end);\n\n      return inputs.map(name => getTensor(name, tensorMap, context));\n    }\n    const data = Array.prototype.slice.call(\n        getTensor(node.inputNames.slice(start)[0], tensorMap, context)\n            .dataSync());\n    return inputParam.type === 'number' ? data[0] : data;\n  }\n  const attrParam = node.attrParams[paramName];\n  return attrParam && attrParam.value;\n}\n\n/**\n * Retrieve the tensor based on input name by extracting the node name and\n * output index information.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n */\nexport function getTensor(\n    name: string, tensorsMap: NamedTensorsMap,\n    context: ExecutionContext): tfc.Tensor {\n  const [nodeName, index] = parseNodeName(name);\n  const contextId = context.currentContextIds.find(contextId => {\n    return !!tensorsMap[getNodeNameWithContextId(nodeName, contextId)];\n  });\n\n  return contextId !== undefined ?\n      tensorsMap[getNodeNameWithContextId(nodeName, contextId)][index] :\n      undefined;\n}\n\n/**\n * Retrieve the tensors based on input name for current context.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n */\nexport function getTensorsForCurrentContenxt(\n    name: string, tensorsMap: NamedTensorsMap,\n    context: ExecutionContext): tfc.Tensor[] {\n  return tensorsMap[getNodeNameWithContextId(name, context.currentContextId)];\n}\n\n/**\n * Returns the node name and index from the Node input name.\n * @param inputName The input name of the node, in format of\n * node_name:output_index, i.e. MatMul:0, if the output_index is not set, it is\n * default to 0.\n */\nexport function getNodeNameAndIndex(\n    inputName: string, context?: ExecutionContext): [string, number] {\n  const [nodeName, index] = parseNodeName(inputName);\n\n  return [\n    getNodeNameWithContextId(nodeName, context && context.currentContextId),\n    index\n  ];\n}\n\nfunction getNodeNameWithContextId(name: string, contextId?: string): string {\n  return !!contextId ? `${name}-${contextId}` : name;\n}\n\nexport function parseNodeName(name: string): [string, number] {\n  const index = name.lastIndexOf(':');\n  if (index === -1) {\n    return [name, 0];\n  }\n\n  const nodeName = name.substring(0, index);\n  return [nodeName, Number(name.substring(index + 1))];\n}\n\nexport function split(arr: number[], size: number) {\n  const res = [];\n  for (let i = 0; i < arr.length; i += size) {\n    res.push(arr.slice(i, i + size));\n  }\n  return res;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {OpMapper} from '../types';\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Add',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'AddV2',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'AddN',\n    'category': 'arithmetic',\n    'inputs': [{'start': 0, 'end': 0, 'name': 'tensors', 'type': 'tensors'}]\n  },\n  {\n    'tfOpName': 'BiasAdd',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sub',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'RealDiv',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Div',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'DivNoNan',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'FloorDiv',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Mul',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Maximum',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'}\n    ]\n  },\n  {\n    'tfOpName': 'Minimum',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'}\n    ]\n  },\n  {\n    'tfOpName': 'Pow',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'SquaredDifference',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Mod',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'FloorMod',\n    'category': 'arithmetic',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Abs',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Acos',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Asin',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Atan',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Atan2',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'y', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Ceil',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'ClipByValue',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'clip_value_min', 'name': 'clipValueMin', 'type': 'number'},\n      {'tfName': 'clip_value_max', 'name': 'clipValueMax', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'Complex',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'real', 'type': 'tensor'},\n      {'start': 1, 'name': 'imag', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'ComplexAbs',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Cos',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Cosh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Elu',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Exp',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Floor',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Log',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Imag',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}, {\n        'tfName': 'Tout',\n        'name': 'outputType',\n        'type': 'dtype',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Neg',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Real',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}, {\n        'tfName': 'Tout',\n        'name': 'outputType',\n        'type': 'dtype',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Prelu',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'alpha', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Relu',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Relu6',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}, {\n        'tfName': 'clipValueMin',\n        'name': 'clipValueMin',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'clipValueMax',\n        'name': 'clipValueMax',\n        'type': 'number',\n        'defaultValue': 6\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Selu',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sigmoid',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sin',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sinh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sqrt',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Rsqrt',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Square',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Tan',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Tanh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Sign',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Round',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Expm1',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Log1p',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Reciprocal',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Softplus',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Asinh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Acosh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Atanh',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Erf',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Prod',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axes', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'keep_dims',\n        'name': 'keepDims',\n        'type': 'bool',\n        'notSupported': true\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'LeakyRelu',\n    'category': 'basic_math',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'alpha',\n        'name': 'alpha',\n        'type': 'number',\n        'defaultValue': 0.2\n      },\n      {\n        'tfName': 'T',\n        'name': 'dtype',\n        'type': 'dtype',\n        'notSupported': true\n      }\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'LoopCond',\n    'category': 'control',\n    'inputs': [{'start': 0, 'name': 'pred', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'Switch',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'data', 'type': 'tensor'},\n      {'start': 1, 'name': 'pred', 'type': 'tensor'}\n    ]\n  },\n  {\n    'tfOpName': 'Merge',\n    'category': 'control',\n    'inputs':\n        [{'start': 0, 'end': 0, 'name': 'tensors', 'type': 'tensors'}]\n  },\n  {\n    'tfOpName': 'Enter',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensor', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true},\n      {'tfName': 'frame_name', 'name': 'frameName', 'type': 'string'},\n      {'tfName': 'is_constant', 'name': 'isConstant', 'type': 'bool'}\n    ]\n  },\n  {\n    'tfOpName': 'Exit',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensor', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'NextIteration',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensor', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'TensorArrayV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'size', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'},\n      {'tfName': 'element_shape', 'name': 'elementShape', 'type': 'shape'},\n      {'tfName': 'dynamic_size', 'name': 'dynamicSize', 'type': 'bool'},\n      {'tfName': 'clear_after_read', 'name': 'clearAfterRead', 'type': 'bool'},\n      {\n        'tfName': 'identical_element_shapes',\n        'name': 'identicalElementShapes',\n        'type': 'bool'\n      },\n      {'tfName': 'tensor_array_name', 'name': 'name', 'type': 'string'}\n    ]\n  },\n  {\n    'tfOpName': 'TensorArrayWriteV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'index', 'type': 'number'},\n      {'start': 2, 'name': 'tensor', 'type': 'tensor'},\n      {'start': 3, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'TensorArrayReadV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'index', 'type': 'number'},\n      {'start': 2, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [{\n      'tfName': 'dtype',\n      'name': 'dtype',\n      'type': 'dtype',\n      'notSupported': true\n    }]\n  },\n  {\n    'tfOpName': 'TensorArrayGatherV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'indices', 'type': 'number[]'},\n      {'start': 2, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'},\n      {'tfName': 'element_shape', 'name': 'elementShape', 'type': 'shape'}\n    ]\n  },\n  {\n    'tfOpName': 'TensorArrayScatterV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'indices', 'type': 'number[]'},\n      {'start': 2, 'name': 'tensor', 'type': 'tensor'},\n      {'start': 3, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'TensorArrayConcatV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'}, {\n        'tfName': 'element_shape_except0',\n        'name': 'elementShapeExcept0',\n        'type': 'shape',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'TensorArraySplitV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'tensor', 'type': 'tensor'},\n      {'start': 2, 'name': 'lengths', 'type': 'number[]'},\n      {'start': 3, 'name': 'flowIn', 'type': 'number'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'TensorArraySizeV3',\n    'category': 'control',\n    'inputs': [\n      {'start': 0, 'name': 'tensorArrayId', 'type': 'number'},\n      {'start': 1, 'name': 'flowIn', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'TensorArrayCloseV3',\n    'category': 'control',\n    'inputs': [{'start': 0, 'name': 'tensorArrayId', 'type': 'number'}]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'AvgPool',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      },\n      {'tfName': 'ksize', 'name': 'kernelSize', 'type': 'number[]'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'MaxPool',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      },\n      {'tfName': 'ksize', 'name': 'kernelSize', 'type': 'number[]'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'MaxPoolWithArgmax',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'},\n      {'tfName': 'ksize', 'name': 'kernelSize', 'type': 'number[]'}, {\n        'tfName': 'include_batch_in_index',\n        'name': 'includeBatchInIndex',\n        'type': 'bool'\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'AvgPool3D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      },\n      {'tfName': 'ksize', 'name': 'kernelSize', 'type': 'number[]'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'MaxPool3D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      },\n      {'tfName': 'ksize', 'name': 'kernelSize', 'type': 'number[]'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Conv1D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'stride', 'name': 'stride', 'type': 'number'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NWC'\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}, {\n        'tfName': 'dilation',\n        'name': 'dilation',\n        'type': 'number',\n        'defaultValue': 1\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Conv2D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true},\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'},\n      {'tfName': 'useCudnnOnGpu', 'name': 'useCudnnOnGpu', 'type': 'bool'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {'tfName': 'dilations', 'name': 'dilations', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': '_FusedConv2D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n      {'start': 2, end: 0, 'name': 'args', 'type': 'tensors'},\n    ],\n    'attrs': [\n      {'tfName': 'num_args', 'name': 'numArgs', 'type': 'number'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true},\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'},\n      {\n        'tfName': 'explicit_paddings',\n        'name': 'explicitPaddings',\n        'type': 'number[]',\n        'defaultValue': []\n      },\n      {\n        'tfName': 'use_cudnn_on_gpu',\n        'name': 'useCudnnOnGpu',\n        'type': 'bool',\n        'defaultValue': true\n      },\n      {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {\n        'tfName': 'dilations',\n        'name': 'dilations',\n        'type': 'number[]',\n        'defaultValue': [1, 1, 1, 1]\n      },\n      {\n        'tfName': 'fused_ops',\n        'name': 'fusedOps',\n        'type': 'string[]',\n        'defaultValue': []\n      },\n      {\n        'tfName': 'epsilon',\n        'name': 'epsilon',\n        'type': 'number',\n        'defaultValue': 0.0001\n      },\n    ]\n  },\n  {\n    'tfOpName': 'Conv2DBackpropInput',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 2, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n      {'start': 0, 'name': 'outputShape', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'DepthwiseConv2d',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'input', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {'tfName': 'dilations', 'name': 'dilations', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'DepthwiseConv2dNative',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'input', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {'tfName': 'dilations', 'name': 'dilations', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'FusedDepthwiseConv2dNative',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n      {'start': 2, end: 0, 'name': 'args', 'type': 'tensors'},\n    ],\n    'attrs': [\n      {'tfName': 'num_args', 'name': 'numArgs', 'type': 'number'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true},\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {\n        'tfName': 'dilations',\n        'name': 'dilations',\n        'type': 'number[]',\n        'defaultValue': [1, 1, 1, 1]\n      },\n      {\n        'tfName': 'fused_ops',\n        'name': 'fusedOps',\n        'type': 'string[]',\n        'defaultValue': []\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Conv3D',\n    'category': 'convolution',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'filter', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'strides', 'name': 'strides', 'type': 'number[]'},\n      {'tfName': 'padding', 'name': 'pad', 'type': 'string'}, {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'defaultValue': 'NHWC'\n      },\n      {'tfName': 'dilations', 'name': 'dilations', 'type': 'number[]'}\n    ],\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Fill',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'shape', 'type': 'number[]'},\n      {'start': 1, 'name': 'value', 'type': 'number'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'LinSpace',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'start', 'type': 'number'},\n      {'start': 1, 'name': 'stop', 'type': 'number'},\n      {'start': 2, 'name': 'num', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'OneHot',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'indices', 'type': 'tensor'},\n      {'start': 1, 'name': 'depth', 'type': 'number'},\n      {'start': 2, 'name': 'onValue', 'type': 'number', 'defaultValue': 1},\n      {'start': 3, 'name': 'offValue', 'type': 'number', 'defaultValue': 0},\n    ],\n    'attrs': [\n      {\n        'tfName': 'axis',\n        'name': 'axis',\n        'type': 'number',\n        'notSupported': true\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Ones',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'shape', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'OnesLike',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [{'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'RandomUniform',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'shape', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'minval',\n        'name': 'minval',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'maxval',\n        'name': 'maxval',\n        'type': 'number',\n        'defaultValue': 1\n      },\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'},\n      {'tfName': 'seed', 'name': 'seed', 'type': 'number', 'defaultValue': 0}, {\n        'tfName': 'seed2',\n        'name': 'seed2',\n        'type': 'number',\n        'defaultValue': 0,\n        'notSupported': true\n      },\n      {'tfName': 'T', 'name': 'T', 'type': 'number', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Range',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'start', 'type': 'number'},\n      {'start': 1, 'name': 'stop', 'type': 'number'},\n      {'start': 2, 'name': 'step', 'type': 'number', 'defaultValue': 0},\n    ],\n    'attrs': [{'tfName': 'Tidx', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'TruncatedNormal',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'shape', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'means',\n        'name': 'mean',\n        'type': 'number',\n        'defaultValue': 0.0\n      },\n      {\n        'tfName': 'stddev',\n        'name': 'stdDev',\n        'type': 'number',\n        'defaultValue': 1.0\n      },\n      {'tfName': 'seed', 'name': 'seed', 'type': 'number'}, {\n        'tfName': 'seed2',\n        'name': 'seed2',\n        'type': 'number',\n        'defaultValue': 0,\n        'notSupported': true\n      },\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'},\n      {'tfName': 'T', 'name': 'T', 'type': 'number', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Zeros',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'shape', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'ZerosLike',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [{'tfName': 'T', 'name': 'dtype', 'type': 'dtype'}]\n  },\n  {\n    'tfOpName': 'Multinomial',\n    'category': 'creation',\n    'inputs': [\n      {'start': 0, 'name': 'logits', 'type': 'tensor'},\n      {'start': 1, 'name': 'numSamples', 'type': 'number'},\n    ],\n    'attrs': [\n      {'tfName': 'seed', 'name': 'seed', 'type': 'number'},\n      {'tfName': 'seed2', 'name': 'seed2', 'type': 'number'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype'},\n      {'tfName': 'output_dtype', 'name': 'output_dtype', 'type': 'dtype'}\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'NonMaxSuppressionV2',\n    'category': 'dynamic',\n    'inputs': [\n      {'start': 0, 'name': 'boxes', 'type': 'tensor'},\n      {'start': 1, 'name': 'scores', 'type': 'tensor'},\n      {'start': 2, 'name': 'maxOutputSize', 'type': 'number'},\n      {'start': 3, 'name': 'iouThreshold', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'NonMaxSuppressionV3',\n    'category': 'dynamic',\n    'inputs': [\n      {'start': 0, 'name': 'boxes', 'type': 'tensor'},\n      {'start': 1, 'name': 'scores', 'type': 'tensor'},\n      {'start': 2, 'name': 'maxOutputSize', 'type': 'number'},\n      {'start': 3, 'name': 'iouThreshold', 'type': 'number'},\n      {'start': 4, 'name': 'scoreThreshold', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'NonMaxSuppressionV5',\n    'category': 'dynamic',\n    'inputs': [\n      {'start': 0, 'name': 'boxes', 'type': 'tensor'},\n      {'start': 1, 'name': 'scores', 'type': 'tensor'},\n      {'start': 2, 'name': 'maxOutputSize', 'type': 'number'},\n      {'start': 3, 'name': 'iouThreshold', 'type': 'number'},\n      {'start': 4, 'name': 'scoreThreshold', 'type': 'number'},\n      {'start': 5, 'name': 'softNmsSigma', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'Where',\n    'category': 'dynamic',\n    'inputs': [\n      {'start': 0, 'name': 'condition', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'ListDiff',\n    'category': 'dynamic',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'y', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'T',\n      'name': 'dtype',\n      'type': 'dtype',\n      'notSupported': true\n    }]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [{\n  'tfOpName': 'TopKV2',\n  'category': 'evaluation',\n  'inputs': [\n    {'start': 0, 'name': 'x', 'type': 'tensor'},\n    {'start': 1, 'name': 'k', 'type': 'number'},\n  ],\n  'attrs': [{'tfName': 'sorted', 'name': 'sorted', 'type': 'bool'}]\n}];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'PlaceholderWithDefault',\n    'category': 'graph',\n    'inputs': [\n      {'start': 0, 'name': 'default', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'shape', 'name': 'shape', 'type': 'shape'},\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'}\n    ]\n  },\n  {\n    'tfOpName': 'Placeholder',\n    'category': 'graph',\n    'attrs': [\n      {'tfName': 'shape', 'name': 'shape', 'type': 'shape'},\n      {'tfName': 'dtype', 'name': 'dtype', 'type': 'dtype'}\n    ]\n  },\n  {'tfOpName': 'Const', 'category': 'graph'}, {\n    'tfOpName': 'Identity',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'IdentityN',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'end': 0, 'name': 'x', 'type': 'tensors'}]\n  },\n  {\n    'tfOpName': 'Snapshot',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'Rank',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'Size',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'Shape',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'ShapeN',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'end': 0, 'name': 'x', 'type': 'tensors'}]\n  },\n  {\n    'tfOpName': 'Print',\n    'category': 'graph',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'data', 'type': 'tensors'},\n    ],\n    'attrs': [\n      {'tfName': 'message', 'name': 'message', 'type': 'string'}, {\n        'tfName': 'first_n',\n        'name': 'firstN',\n        'type': 'number',\n        'notSupported': true\n      },\n      {\n        'tfName': 'summarize',\n        'name': 'summarize',\n        'type': 'number',\n        'defaultValue': 3\n      }\n    ]\n  },\n  {'tfOpName': 'NoOp', 'category': 'graph', 'inputs': []}, {\n    'tfOpName': 'StopGradient',\n    'category': 'graph',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'FakeQuantWithMinMaxVars',\n    'category': 'graph',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'min', 'name': 'min', 'type': 'number'},\n      {'tfName': 'max', 'name': 'max', 'type': 'number'}\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'ResizeBilinear',\n    'category': 'image',\n    'inputs': [\n      {'start': 0, 'name': 'images', 'type': 'tensor'},\n      {'start': 1, 'name': 'size', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {'tfName': 'align_corners', 'name': 'alignCorners', 'type': 'bool'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'ResizeNearestNeighbor',\n    'category': 'image',\n    'inputs': [\n      {'start': 0, 'name': 'images', 'type': 'tensor'},\n      {'start': 1, 'name': 'size', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {'tfName': 'align_corners', 'name': 'alignCorners', 'type': 'bool'},\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'CropAndResize',\n    'category': 'image',\n    'inputs': [\n      {'start': 0, 'name': 'image', 'type': 'tensor'},\n      {'start': 1, 'name': 'boxes', 'type': 'tensor'},\n      {'start': 2, 'name': 'boxInd', 'type': 'tensor'},\n      {'start': 3, 'name': 'cropSize', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {'tfName': 'method', 'name': 'method', 'type': 'string'}, {\n        'tfName': 'extrapolation_value',\n        'name': 'extrapolationValue',\n        'type': 'number'\n      }\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Equal',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'NotEqual',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Greater',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'GreaterEqual',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Less',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'LessEqual',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'LogicalAnd',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'LogicalNot',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'LogicalOr',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Select',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'condition', 'type': 'tensor'},\n      {'start': 1, 'name': 'a', 'type': 'tensor'},\n      {'start': 2, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'SelectV2',\n    'category': 'logical',\n    'inputs': [\n      {'start': 0, 'name': 'condition', 'type': 'tensor'},\n      {'start': 1, 'name': 'a', 'type': 'tensor'},\n      {'start': 2, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'T',\n      'name': 'dtype',\n      'type': 'dtype',\n      'notSupported': true\n    }]\n  }\n];\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {OpMapper} from '../types';\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': '_FusedMatMul',\n    'category': 'matrices',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n      {'start': 2, end: 0, 'name': 'args', 'type': 'tensors'},\n    ],\n    'attrs': [\n      {'tfName': 'num_args', 'name': 'numArgs', 'type': 'number'}, {\n        'tfName': 'fused_ops',\n        'name': 'fusedOps',\n        'type': 'string[]',\n        'defaultValue': []\n      },\n      {\n        'tfName': 'epsilon',\n        'name': 'epsilon',\n        'type': 'number',\n        'defaultValue': 0.0001\n      },\n      {\n        'tfName': 'transpose_a',\n        'name': 'transposeA',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {\n        'tfName': 'transpose_b',\n        'name': 'transposeB',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'MatMul',\n    'category': 'matrices',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'transpose_a',\n        'name': 'transposeA',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {\n        'tfName': 'transpose_b',\n        'name': 'transposeB',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'BatchMatMul',\n    'category': 'matrices',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'adj_x',\n        'name': 'transposeA',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {\n        'tfName': 'adj_y',\n        'name': 'transposeB',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'BatchMatMulV2',\n    'category': 'matrices',\n    'inputs': [\n      {'start': 0, 'name': 'a', 'type': 'tensor'},\n      {'start': 1, 'name': 'b', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'adj_x',\n        'name': 'transposeA',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {\n        'tfName': 'adj_y',\n        'name': 'transposeB',\n        'type': 'bool',\n        'defaultValue': false\n      },\n      {'tfName': 'T', 'name': 'dtype', 'type': 'dtype', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'Transpose',\n    'category': 'matrices',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'perm', 'type': 'number[]'},\n    ],\n    'attrs': [{\n      'tfName': 'T',\n      'name': 'dtype',\n      'type': 'dtype',\n      'notSupported': true\n    }]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'FusedBatchNorm',\n    'category': 'normalization',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'scale', 'type': 'tensor'},\n      {'start': 2, 'name': 'offset', 'type': 'tensor'},\n      {'start': 3, 'name': 'mean', 'type': 'tensor'},\n      {'start': 4, 'name': 'variance', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'epsilon',\n        'name': 'epsilon',\n        'type': 'number',\n        'defaultValue': 0.001\n      },\n      {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'FusedBatchNormV2',\n    'category': 'normalization',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'scale', 'type': 'tensor'},\n      {'start': 2, 'name': 'offset', 'type': 'tensor'},\n      {'start': 3, 'name': 'mean', 'type': 'tensor'},\n      {'start': 4, 'name': 'variance', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'epsilon',\n        'name': 'epsilon',\n        'type': 'number',\n        'defaultValue': 0.001\n      },\n      {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'FusedBatchNormV3',\n    'category': 'normalization',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'scale', 'type': 'tensor'},\n      {'start': 2, 'name': 'offset', 'type': 'tensor'},\n      {'start': 3, 'name': 'mean', 'type': 'tensor'},\n      {'start': 4, 'name': 'variance', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'epsilon',\n        'name': 'epsilon',\n        'type': 'number',\n        'defaultValue': 0.001\n      },\n      {\n        'tfName': 'data_format',\n        'name': 'dataFormat',\n        'type': 'string',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'LRN',\n    'category': 'normalization',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'depth_radius',\n        'name': 'radius',\n        'type': 'number',\n        'defaultValue': 5\n      },\n      {'tfName': 'bias', 'name': 'bias', 'type': 'number', 'defaultValue': 1.0},\n      {\n        'tfName': 'alpha',\n        'name': 'alpha',\n        'type': 'number',\n        'defaultValue': 1.0\n      },\n      {\n        'tfName': 'beta',\n        'name': 'beta',\n        'type': 'number',\n        'defaultValue': 0.5\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Softmax',\n    'category': 'normalization',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'LogSoftmax',\n    'category': 'normalization',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'SparseToDense',\n    'category': 'normalization',\n    'inputs': [\n      {'start': 0, 'name': 'sparseIndices', 'type': 'tensor'},\n      {'start': 1, 'name': 'outputShape', 'type': 'number[]'},\n      {'start': 2, 'name': 'sparseValues', 'type': 'tensor'},\n      {'start': 3, 'name': 'defaultValue', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'validate_indices',\n      'name': 'validateIndices',\n      'type': 'bool',\n      'defaultValue': true,\n      'notSupported': true\n    }]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Max',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'Mean',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'Min',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'Sum',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'All',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'Any',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  },\n  {\n    'tfOpName': 'ArgMax',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'ArgMin',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'Prod',\n    'category': 'reduction',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'},\n    ],\n    'attrs': [{'tfName': 'keep_dims', 'name': 'keepDims', 'type': 'bool'}]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'ConcatV2',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'end': -1, 'name': 'tensors', 'type': 'tensors'},\n      {'start': -1, 'name': 'axis', 'type': 'number'}\n    ],\n    'attrs':\n        [{'tfName': 'N', 'name': 'n', 'type': 'number', 'defaultValue': 2}]\n  },\n  {\n    'tfOpName': 'Concat',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 1, 'end': 0, 'name': 'tensors', 'type': 'tensors'},\n      {'start': 0, 'name': 'axis', 'type': 'number'}\n    ],\n    'attrs': [{'tfName': 'N', 'name': 'n', 'type': 'number', 'defaultValue': 2}]\n\n  },\n  {\n    'tfOpName': 'GatherV2',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'indices', 'type': 'tensor'},\n      {'start': 2, 'name': 'axis', 'type': 'number', 'defaultValue': 0}\n    ]\n  },\n  {\n    'tfOpName': 'Gather',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'indices', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'axis', 'name': 'axis', 'type': 'number', 'defaultValue': 0}, {\n        'tfName': 'validate_indices',\n        'name': 'validateIndices',\n        'type': 'bool',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Reverse',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'dims', 'type': 'bool', 'notSupported': true}\n    ]\n  },\n  {\n    'tfOpName': 'ReverseV2',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'Slice',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'begin', 'type': 'number[]'},\n      {'start': 2, 'name': 'size', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'StridedSlice',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'begin', 'type': 'number[]'},\n      {'start': 2, 'name': 'end', 'type': 'number[]'},\n      {'start': 3, 'name': 'strides', 'type': 'number[]'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'begin_mask',\n        'name': 'beginMask',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'end_mask',\n        'name': 'endMask',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'new_axis_mask',\n        'name': 'newAxisMask',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'ellipsis_mask',\n        'name': 'ellipsisMask',\n        'type': 'number',\n        'defaultValue': 0\n      },\n      {\n        'tfName': 'shrink_axis_mask',\n        'name': 'shrinkAxisMask',\n        'type': 'number',\n        'defaultValue': 0\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Pack',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'end': 0, 'name': 'tensors', 'type': 'tensors'},\n    ],\n    'attrs': [\n      {'tfName': 'axis', 'name': 'axis', 'type': 'number', 'defaultValue': 0}\n    ]\n  },\n  {\n    'tfOpName': 'Unpack',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'tensor', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'axis', 'name': 'axis', 'type': 'number', 'defaultValue': 0}, {\n        'tfName': 'num',\n        'name': 'num',\n        'type': 'number',\n        'defaultValue': 0,\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Tile',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'reps', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'Split',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'axis', 'type': 'number', 'defaultValue': 0},\n      {'start': 1, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'num_split',\n      'name': 'numOrSizeSplits',\n      'type': 'number',\n      'defaultValue': 1\n    }]\n  },\n  {\n    'tfOpName': 'SplitV',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'numOrSizeSplits', 'type': 'number[]'},\n      {'start': 2, 'name': 'axis', 'type': 'number', 'defaultValue': 0}\n    ]\n  },\n  {\n    'tfOpName': 'ScatterNd',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'indices', 'type': 'tensor'},\n      {'start': 1, 'name': 'values', 'type': 'tensor'},\n      {'start': 2, 'name': 'shape', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'GatherNd',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'indices', 'type': 'tensor'}\n    ]\n  },\n  {\n    'tfOpName': 'SparseToDense',\n    'category': 'slice_join',\n    'inputs': [\n      {'start': 0, 'name': 'sparseIndices', 'type': 'tensor'},\n      {'start': 1, 'name': 'outputShape', 'type': 'number[]'},\n      {'start': 2, 'name': 'sparseValues', 'type': 'tensor'},\n      {'start': 3, 'name': 'defaultValue', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'validate_indices',\n      'name': 'validateIndices',\n      'type': 'bool',\n      'defaultValue': false,\n      'notSupported': true\n    }]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'FFT',\n    'category': 'spectral',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'IFFT',\n    'category': 'spectral',\n    'inputs': [{'start': 0, 'name': 'x', 'type': 'tensor'}]\n  },\n  {\n    'tfOpName': 'RFFT',\n    'category': 'spectral',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'}, {\n        'start': 1,\n        'name': 'fft_length',\n        'type': 'number',\n        'notSupported': true\n      }\n    ]\n  },\n  {\n    'tfOpName': 'IRFFT',\n    'category': 'spectral',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'}, {\n        'start': 1,\n        'name': 'fft_length',\n        'type': 'number',\n        'notSupported': true\n      }\n    ]\n  }\n];\n","import {OpMapper} from '../types';\n\n/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nexport const json: OpMapper[] = [\n  {\n    'tfOpName': 'Cast',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {\n        'tfName': 'SrcT',\n        'name': 'sdtype',\n        'type': 'dtype',\n        'notSupported': true\n      },\n      {'tfName': 'DstT', 'name': 'dtype', 'type': 'dtype'}\n    ]\n  },\n  {\n    'tfOpName': 'ExpandDims',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'axis', 'type': 'number'}\n    ]\n  },\n  {\n    'tfOpName': 'Pad',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'padding', 'type': 'number[]'},\n    ],\n    'attrs': [{\n      'tfName': 'constant_value',\n      'name': 'constantValue',\n      'type': 'number',\n      'defaultValue': 0\n    }]\n  },\n  {\n    'tfOpName': 'PadV2',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'padding', 'type': 'number[]'}, {\n        'start': 2,\n        'name': 'constantValue',\n        'type': 'number',\n        'defaultValue': 0\n      }\n    ]\n  },\n  {\n    'tfOpName': 'Reshape',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'shape', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'Squeeze',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [{\n      'tfName': 'axis',\n      'tfDeprecatedName': 'squeeze_dims',\n      'name': 'axis',\n      'type': 'number[]'\n    }]\n  },\n  {\n    'tfOpName': 'SpaceToBatchND',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'blockShape', 'type': 'number[]'},\n      {'start': 2, 'name': 'paddings', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'BatchToSpaceND',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n      {'start': 1, 'name': 'blockShape', 'type': 'number[]'},\n      {'start': 2, 'name': 'crops', 'type': 'number[]'}\n    ]\n  },\n  {\n    'tfOpName': 'DepthToSpace',\n    'category': 'transformation',\n    'inputs': [\n      {'start': 0, 'name': 'x', 'type': 'tensor'},\n    ],\n    'attrs': [\n      {'tfName': 'block_size', 'name': 'blockSize', 'type': 'number'},\n      {'tfName': 'data_format', 'name': 'dataFormat', 'type': 'string'}\n    ]\n  }\n];\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {DataType, env} from '@tensorflow/tfjs-core';\n\nimport * as tensorflow from '../data/compiled_api';\nimport {getRegisteredOp} from './custom_op/register';\n\nimport {getNodeNameAndIndex} from './executors/utils';\nimport * as arithmetic from './op_list/arithmetic';\nimport * as basicMath from './op_list/basic_math';\nimport * as control from './op_list/control';\nimport * as convolution from './op_list/convolution';\nimport * as creation from './op_list/creation';\nimport * as dynamic from './op_list/dynamic';\nimport * as evaluation from './op_list/evaluation';\nimport * as graph from './op_list/graph';\nimport * as image from './op_list/image';\nimport * as logical from './op_list/logical';\nimport * as matrices from './op_list/matrices';\nimport * as normalization from './op_list/normalization';\nimport * as reduction from './op_list/reduction';\nimport * as sliceJoin from './op_list/slice_join';\nimport * as spectral from './op_list/spectral';\nimport * as transformation from './op_list/transformation';\nimport {Graph, InputParamValue, Node, OpMapper, ParamValue} from './types';\n\nexport class OperationMapper {\n  private static _instance: OperationMapper;\n\n  private opMappers: {[key: string]: OpMapper};\n\n  // Singleton instance for the mapper\n  public static get Instance() {\n    return this._instance || (this._instance = new this());\n  }\n\n  // Loads the op mapping from the JSON file.\n  private constructor() {\n    const ops = [\n      arithmetic, basicMath, control, convolution, creation, dynamic,\n      evaluation, logical, image, graph, matrices, normalization, reduction,\n      sliceJoin, spectral, transformation\n    ];\n    const mappersJson: OpMapper[] = [].concat(...ops.map(op => op.json));\n\n    this.opMappers = mappersJson.reduce<{[key: string]: OpMapper}>(\n        (map, mapper: OpMapper) => {\n          map[mapper.tfOpName] = mapper;\n          return map;\n        },\n        {});\n  }\n\n  // Converts the model from Tensorflow GraphDef to local representation for\n  // TensorFlow.js API\n  transformGraph(\n      graph: tensorflow.IGraphDef,\n      signature: tensorflow.ISignatureDef = {}): Graph {\n    const tfNodes = graph.node;\n    const placeholders: Node[] = [];\n    const weights: Node[] = [];\n    const nodes = tfNodes.reduce<{[key: string]: Node}>((map, node) => {\n      map[node.name] = this.mapNode(node);\n      if (node.op.startsWith('Placeholder')) {\n        placeholders.push(map[node.name]);\n      }\n      if (node.op === 'Const') {\n        weights.push(map[node.name]);\n      }\n      return map;\n    }, {});\n\n    let inputs: Node[] = [];\n    const outputs: Node[] = [];\n    let inputNodeNameToKey: {[key: string]: string} = {};\n    let outputNodeNameToKey: {[key: string]: string} = {};\n    if (signature != null) {\n      inputNodeNameToKey = this.mapSignatureEntries(signature.inputs);\n      outputNodeNameToKey = this.mapSignatureEntries(signature.outputs);\n    }\n    const allNodes = Object.keys(nodes);\n    allNodes.forEach(key => {\n      const node = nodes[key];\n      node.inputNames.forEach(name => {\n        const [nodeName, ] = getNodeNameAndIndex(name);\n        node.inputs.push(nodes[nodeName]);\n        nodes[nodeName].children.push(node);\n      });\n    });\n\n    // if signature has not outputs set, add any node that does not have\n    // outputs.\n    if (Object.keys(outputNodeNameToKey).length === 0) {\n      allNodes.forEach(key => {\n        const node = nodes[key];\n        if (node.children.length === 0) {\n          outputs.push(node);\n        }\n      });\n    } else {\n      Object.keys(outputNodeNameToKey).forEach(name => {\n        const [nodeName, ] = getNodeNameAndIndex(name);\n        const node = nodes[nodeName];\n        if (node != null) {\n          node.signatureKey = outputNodeNameToKey[name];\n          outputs.push(node);\n        }\n      });\n    }\n\n    if (Object.keys(inputNodeNameToKey).length > 0) {\n      Object.keys(inputNodeNameToKey).forEach(name => {\n        const [nodeName, ] = getNodeNameAndIndex(name);\n        const node = nodes[nodeName];\n        if (node) {\n          node.signatureKey = inputNodeNameToKey[name];\n          inputs.push(node);\n        }\n      });\n    } else {\n      inputs = placeholders;\n    }\n\n    return {nodes, inputs, outputs, weights, placeholders, signature};\n  }\n\n  private mapSignatureEntries(entries: {[k: string]: tensorflow.ITensorInfo}) {\n    return Object.keys(entries || {})\n        .reduce<{[key: string]: string}>((prev, curr) => {\n          prev[entries[curr].name] = curr;\n          return prev;\n        }, {});\n  }\n\n  private mapNode(node: tensorflow.INodeDef): Node {\n    // Unsupported ops will cause an error at run-time (not parse time), since\n    // they may not be used by the actual execution subgraph.\n    const mapper =\n        getRegisteredOp(node.op) || this.opMappers[node.op] || {} as OpMapper;\n    if (node.attr == null) {\n      node.attr = {};\n    }\n\n    const newNode: Node = {\n      name: node.name,\n      op: node.op,\n      category: mapper.category,\n      inputNames:\n          (node.input ||\n           []).map(input => input.startsWith('^') ? input.substr(1) : input),\n      inputs: [],\n      children: [],\n      inputParams: {},\n      attrParams: {},\n      rawAttrs: node.attr\n    };\n\n    if (mapper.inputs != null) {\n      newNode.inputParams =\n          mapper.inputs.reduce<{[key: string]: InputParamValue}>(\n              (map, param) => {\n                map[param.name] = {\n                  type: param.type,\n                  inputIndexStart: param.start,\n                  inputIndexEnd: param.end\n                };\n                return map;\n              },\n              {});\n    }\n    if (mapper.attrs != null) {\n      newNode.attrParams =\n          mapper.attrs.reduce<{[key: string]: ParamValue}>((map, param) => {\n            const type = param.type;\n            let value = undefined;\n            switch (param.type) {\n              case 'string':\n                value = getStringParam(\n                    node.attr, param.tfName, param.defaultValue as string);\n\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getStringParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as string);\n                }\n                break;\n              case 'string[]':\n                value = getStringArrayParam(\n                    node.attr, param.tfName, param.defaultValue as string[]);\n\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getStringArrayParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as string[]);\n                }\n                break;\n              case 'number':\n                value = getNumberParam(\n                    node.attr, param.tfName,\n                    (param.defaultValue || 0) as number);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getNumberParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as number);\n                }\n                break;\n              case 'number[]':\n                value = getNumericArrayParam(\n                    node.attr, param.tfName, param.defaultValue as number[]);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getNumericArrayParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as number[]);\n                }\n                break;\n              case 'bool':\n                value = getBoolParam(\n                    node.attr, param.tfName, param.defaultValue as boolean);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getBoolParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as boolean);\n                }\n                break;\n              case 'bool[]':\n                value = getBoolArrayParam(\n                    node.attr, param.tfName, param.defaultValue as boolean[]);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getBoolArrayParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as boolean[]);\n                }\n                break;\n              case 'shape':\n                value = getTensorShapeParam(\n                    node.attr, param.tfName, param.defaultValue as number[]);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getTensorShapeParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as number[]);\n                }\n                break;\n              case 'shape[]':\n                value = getTensorShapeArrayParam(\n                    node.attr, param.tfName, param.defaultValue as number[][]);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getTensorShapeArrayParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as number[][]);\n                }\n                break;\n              case 'dtype':\n                value = getDtypeParam(\n                    node.attr, param.tfName, param.defaultValue as DataType);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getDtypeParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as DataType);\n                }\n                break;\n              case 'dtype[]':\n                value = getDtypeArrayParam(\n                    node.attr, param.tfName, param.defaultValue as DataType[]);\n                if (value === undefined && !!param.tfDeprecatedName) {\n                  value = getDtypeArrayParam(\n                      node.attr, param.tfDeprecatedName,\n                      param.defaultValue as DataType[]);\n                }\n                break;\n              case 'tensor':\n              case 'tensors':\n                break;\n              default:\n                throw new Error(\n                    `Unsupported param type: ${param.type} for op: ${node.op}`);\n            }\n            map[param.name] = {value, type};\n            return map;\n          }, {});\n    }\n    return newNode;\n  }\n}\n\nexport function decodeBase64(text: string): string {\n  const global = env().global;\n  if (typeof global.atob !== 'undefined') {\n    return global.atob(text);\n  } else if (typeof Buffer !== 'undefined') {\n    return new Buffer(text, 'base64').toString();\n  } else {\n    throw new Error(\n        'Unable to decode base64 in this environment. ' +\n        'Missing built-in atob() or Buffer()');\n  }\n}\n\nexport function parseStringParam(s: []|string, keepCase: boolean): string {\n  const value =\n      Array.isArray(s) ? String.fromCharCode.apply(null, s) : decodeBase64(s);\n  return keepCase ? value : value.toLowerCase();\n}\n\nexport function getStringParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string, def: string,\n    keepCase = false): string {\n  const param = attrs[name];\n  if (param != null) {\n    return parseStringParam(param.s, keepCase);\n  }\n  return def;\n}\n\nexport function getBoolParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: boolean): boolean {\n  const param = attrs[name];\n  return param ? param.b : def;\n}\n\nexport function getNumberParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: number): number {\n  const param = attrs[name] || {};\n  const value =\n      param['i'] != null ? param['i'] : (param['f'] != null ? param['f'] : def);\n  return (typeof value === 'number') ? value : parseInt(value, 10);\n}\n\nexport function parseDtypeParam(value: string|tensorflow.DataType): DataType {\n  if (typeof (value) === 'string') {\n    // tslint:disable-next-line:no-any\n    value = tensorflow.DataType[value as any];\n  }\n  switch (value) {\n    case tensorflow.DataType.DT_FLOAT:\n      return 'float32';\n    case tensorflow.DataType.DT_INT32:\n    case tensorflow.DataType.DT_INT64:\n    case tensorflow.DataType.DT_INT8:\n    case tensorflow.DataType.DT_UINT8:\n      return 'int32';\n    case tensorflow.DataType.DT_BOOL:\n      return 'bool';\n    case tensorflow.DataType.DT_DOUBLE:\n      return 'float32';\n    case tensorflow.DataType.DT_STRING:\n      return 'string';\n    default:\n      // Unknown dtype error will happen at runtime (instead of parse time),\n      // since these nodes might not be used by the actual subgraph execution.\n      return null;\n  }\n}\n\nexport function getDtypeParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: DataType): DataType {\n  const param = attrs[name];\n  if (param && param.type) {\n    return parseDtypeParam(param.type);\n  }\n  return def;\n}\n\nexport function getDtypeArrayParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: DataType[]): DataType[] {\n  const param = attrs[name];\n  if (param && param.list && param.list.type) {\n    return param.list.type.map(v => parseDtypeParam(v));\n  }\n  return def;\n}\n\nexport function parseTensorShapeParam(shape: tensorflow.ITensorShape): number[]|\n    undefined {\n  if (shape.unknownRank) {\n    return undefined;\n  }\n  if (shape.dim != null) {\n    return shape.dim.map(\n        dim =>\n            (typeof dim.size === 'number') ? dim.size : parseInt(dim.size, 10));\n  }\n  return [];\n}\n\nexport function getTensorShapeParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def?: number[]): number[]|undefined {\n  const param = attrs[name];\n  if (param && param.shape) {\n    return parseTensorShapeParam(param.shape);\n  }\n  return def;\n}\n\nexport function getNumericArrayParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: number[]): number[] {\n  const param = attrs[name];\n  if (param) {\n    return ((param.list.f && param.list.f.length ? param.list.f :\n                                                   param.list.i) ||\n            [])\n        .map(v => (typeof v === 'number') ? v : parseInt(v, 10));\n  }\n  return def;\n}\n\nexport function getStringArrayParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string, def: string[],\n    keepCase = false): string[] {\n  const param = attrs[name];\n  if (param && param.list && param.list.s) {\n    return param.list.s.map((v) => {\n      return parseStringParam(v, keepCase);\n    });\n  }\n  return def;\n}\n\nexport function getTensorShapeArrayParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: number[][]): number[][] {\n  const param = attrs[name];\n  if (param && param.list && param.list.shape) {\n    return param.list.shape.map((v) => {\n      return parseTensorShapeParam(v);\n    });\n  }\n  return def;\n}\n\nexport function getBoolArrayParam(\n    attrs: {[key: string]: tensorflow.IAttrValue}, name: string,\n    def: boolean[]): boolean[] {\n  const param = attrs[name];\n  if (param && param.list && param.list.b) {\n    return param.list.b;\n  }\n  return def;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {DataType, Tensor} from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {getTensor} from '../executors/utils';\nimport {getBoolArrayParam, getBoolParam, getDtypeArrayParam, getDtypeParam, getNumberParam, getNumericArrayParam, getStringArrayParam, getStringParam, getTensorShapeArrayParam, getTensorShapeParam} from '../operation_mapper';\nimport {GraphNode, Node, ValueType} from '../types';\n\n/**\n * Helper class for lookup inputs and params for nodes in the model graph.\n */\nexport class NodeValueImpl implements GraphNode {\n  public readonly inputs: Tensor[] = [];\n  public readonly attrs: {[key: string]: ValueType} = {};\n  constructor(\n      private node: Node, private tensorMap: NamedTensorsMap,\n      private context: ExecutionContext) {\n    this.inputs = node.inputNames.map(name => this.getInput(name));\n    if (node.rawAttrs != null) {\n      this.attrs = Object.keys(node.rawAttrs)\n                       .reduce((attrs: {[key: string]: ValueType}, key) => {\n                         attrs[key] = this.getAttr(key);\n                         return attrs;\n                       }, {});\n    }\n  }\n\n  /**\n   * Return the value of the attribute or input param.\n   * @param name String: name of attribute or input param.\n   */\n  private getInput(name: string): Tensor {\n    return getTensor(name, this.tensorMap, this.context);\n  }\n\n  /**\n   * Return the value of the attribute or input param.\n   * @param name String: name of attribute or input param.\n   */\n  private getAttr(name: string, defaultValue?: ValueType): ValueType {\n    const value = this.node.rawAttrs[name];\n    if (value.tensor != null) {\n      return getTensor(name, this.tensorMap, this.context);\n    }\n    if (value.i != null || value.f != null) {\n      return getNumberParam(this.node.rawAttrs, name, defaultValue as number);\n    }\n    if (value.s != null) {\n      return getStringParam(this.node.rawAttrs, name, defaultValue as string);\n    }\n    if (value.b != null) {\n      return getBoolParam(this.node.rawAttrs, name, defaultValue as boolean);\n    }\n    if (value.shape != null) {\n      return getTensorShapeParam(\n          this.node.rawAttrs, name, defaultValue as number[]);\n    }\n    if (value.type != null) {\n      return getDtypeParam(this.node.rawAttrs, name, defaultValue as DataType);\n    }\n    if (value.list != null) {\n      if (value.list.i != null || value.list.f != null) {\n        return getNumericArrayParam(\n            this.node.rawAttrs, name, defaultValue as number[]);\n      }\n      if (value.list.s != null) {\n        return getStringArrayParam(\n            this.node.rawAttrs, name, defaultValue as string[]);\n      }\n      if (value.list.shape != null) {\n        return getTensorShapeArrayParam(\n            this.node.rawAttrs, name, defaultValue as number[][]);\n      }\n      if (value.list.b != null) {\n        return getBoolArrayParam(\n            this.node.rawAttrs, name, defaultValue as boolean[]);\n      }\n      if (value.list.type != null) {\n        return getDtypeArrayParam(\n            this.node.rawAttrs, name, defaultValue as DataType[]);\n      }\n    }\n\n    return defaultValue;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'BiasAdd':\n    case 'AddV2':\n    case 'Add': {\n      return [tfc.add(\n          (getParamValue('a', node, tensorMap, context) as tfc.Tensor),\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'AddN': {\n      return [tfc.addN((\n          getParamValue('tensors', node, tensorMap, context) as tfc.Tensor[]))];\n    }\n    case 'FloorMod':\n    case 'Mod':\n      return [tfc.mod(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    case 'Mul':\n      return [tfc.mul(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    case 'RealDiv':\n    case 'Div': {\n      return [tfc.div(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'DivNoNan': {\n      return [tfc.divNoNan(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'FloorDiv': {\n      return [tfc.floorDiv(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Sub': {\n      return [tfc.sub(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Minimum': {\n      return [tfc.minimum(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Maximum': {\n      return [tfc.maximum(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Pow': {\n      return [tfc.pow(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'SquaredDifference': {\n      return [tfc.squaredDifference(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'arithmetic';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue, getTensor} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Abs':\n    case 'ComplexAbs':\n      return [tfc.abs(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Acos':\n      return [tfc.acos(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Acosh':\n      return [tfc.acosh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Asin':\n      return [tfc.asin(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Asinh':\n      return [tfc.asinh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Atan':\n      return [tfc.atan(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Atan2':\n      return [tfc.atan2(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('y', node, tensorMap, context) as tfc.Tensor)];\n    case 'Atanh':\n      return [tfc.atanh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Ceil':\n      return [tfc.ceil(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Complex':\n      return [tfc.complex(\n          getParamValue('real', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('imag', node, tensorMap, context) as tfc.Tensor)];\n    case 'Cos':\n      return [tfc.cos(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Cosh':\n      return [tfc.cosh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Elu':\n      return [tfc.elu(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Erf':\n      return [tfc.erf(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Exp':\n      return [tfc.exp(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Expm1': {\n      return [tfc.expm1(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Floor':\n      return [tfc.floor(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Log':\n      return [tfc.log(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Log1p': {\n      return [tfc.log1p(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Imag':\n      return [tfc.imag(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n\n    case 'Neg':\n      return [tfc.neg(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Reciprocal': {\n      return [tfc.reciprocal(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Real':\n      return [tfc.real(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Relu':\n      return [tfc.relu(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Round': {\n      return [tfc.round(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Selu':\n      return [tfc.selu(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Sigmoid':\n      return [tfc.sigmoid(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Sin':\n      return [tfc.sin(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Sign': {\n      return [tfc.sign(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Sinh': {\n      return [tfc.sinh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Softplus': {\n      return [tfc.softplus(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Sqrt': {\n      return [tfc.sqrt(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Square': {\n      return [tfc.square(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Tanh': {\n      return [tfc.tanh(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Tan':\n      return [tfc.tan(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    case 'Relu6':\n    case 'ClipByValue':\n      return [tfc.clipByValue(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('clipValueMin', node, tensorMap, context) as number,\n          getParamValue('clipValueMax', node, tensorMap, context) as number)];\n    case 'Rsqrt':\n      return [tfc.rsqrt(getTensor(node.inputNames[0], tensorMap, context))];\n    case 'Prod':\n      return [tfc.prod(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('axes', node, tensorMap, context) as number[])];\n    case 'LeakyRelu':\n      return [tfc.leakyRelu(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('alpha', node, tensorMap, context) as number)];\n    case 'Prelu':\n      return [tfc.prelu(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('alpha', node, tensorMap, context) as tfc.Tensor)];\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'basic_math';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {concat, DataType, slice, stack, Tensor, tensor, tidy, unstack, util} from '@tensorflow/tfjs-core';\n\nexport interface TensorWithState {\n  tensor?: Tensor;\n  written?: boolean;\n  read?: boolean;\n  cleared?: boolean;\n}\n/**\n * The TensorArray object keeps an array of Tensors.  It\n * allows reading from the array and writing to the array.\n */\nexport class TensorArray {\n  private static nextId = 0;\n  private tensors: TensorWithState[] = [];\n  private closed_ = false;\n  readonly id: number;\n  constructor(\n      public readonly name: string, public readonly dtype: DataType,\n      private maxSize: number, private elementShape: number[],\n      public readonly identicalElementShapes: boolean,\n      public readonly dynamicSize: boolean,\n      public readonly clearAfterRead: boolean) {\n    this.id = TensorArray.nextId++;\n  }\n\n  get closed() {\n    return this.closed_;\n  }\n\n  /**\n   * Close the current TensorArray.\n   */\n  clearAndClose() {\n    this.tensors.forEach(tensor => tensor.tensor.dispose());\n    this.tensors = [];\n    this.closed_ = true;\n  }\n\n  size(): number {\n    return this.tensors.length;\n  }\n\n  /**\n   * Read the value at location index in the TensorArray.\n   * @param index Number the index to read from.\n   */\n  read(index: number): Tensor {\n    if (this.closed_) {\n      throw new Error(`TensorArray ${this.name} has already been closed.`);\n    }\n\n    if (index < 0 || index >= this.tensors.length) {\n      throw new Error(`Tried to read from index ${index}, but array size is: ${\n          this.tensors.length}`);\n    }\n\n    const tensorWithState = this.tensors[index];\n    if (tensorWithState.cleared) {\n      throw new Error(\n          `TensorArray ${this.name}: Could not read index ${\n              index} twice because it was cleared after a previous read ` +\n          `(perhaps try setting clear_after_read = false?).`);\n    }\n\n    if (this.clearAfterRead) {\n      tensorWithState.cleared = true;\n    }\n\n    tensorWithState.read = true;\n    return tensorWithState.tensor;\n  }\n\n  /**\n   * Helper method to read multiple tensors from the specified indices.\n   */\n  readMany(indices: number[]): Tensor[] {\n    return indices.map(index => this.read(index));\n  }\n\n  /**\n   * Write value into the index of the TensorArray.\n   * @param index number the index to write to.\n   * @param tensor\n   */\n  write(index: number, tensor: Tensor) {\n    if (this.closed_) {\n      throw new Error(`TensorArray ${this.name} has already been closed.`);\n    }\n\n    if (index < 0 || !this.dynamicSize && index >= this.maxSize) {\n      throw new Error(`Tried to write to index ${\n          index}, but array is not resizeable and size is: ${this.maxSize}`);\n    }\n\n    const t = this.tensors[index] || {};\n\n    if (tensor.dtype !== this.dtype) {\n      throw new Error(`TensorArray ${\n          this.name}: Could not write to TensorArray index ${index},\n          because the value dtype is ${\n          tensor.dtype}, but TensorArray dtype is ${this.dtype}.`);\n    }\n\n    // Set the shape for the first time write to unknow shape tensor array\n    if (this.size() === 0 &&\n        (this.elementShape == null || this.elementShape.length === 0)) {\n      this.elementShape = tensor.shape;\n    }\n\n    this.assertShapesMatchAllowUndefinedSize(\n        this.elementShape, tensor.shape,\n        `TensorArray ${this.name}: Could not write to TensorArray index ${\n            index}.`);\n\n    if (t && t.read) {\n      throw new Error(\n          `TensorArray ${this.name}: Could not write to TensorArray index ${\n              index}, because it has already been read.`);\n    }\n\n    if (t && t.written) {\n      throw new Error(\n          `TensorArray ${this.name}: Could not write to TensorArray index ${\n              index}, because it has already been written.`);\n    }\n\n    t.tensor = tensor;\n    t.written = true;\n\n    this.tensors[index] = t;\n  }\n\n  /**\n   * Helper method to write multiple tensors to the specified indices.\n   */\n  writeMany(indices: number[], tensors: Tensor[]) {\n    if (indices.length !== tensors.length) {\n      throw new Error(\n          `TensorArray ${this.name}: could not write multiple tensors,` +\n          `because the index size: ${\n              indices.length} is not the same as tensors size: ${\n              tensors.length}.`);\n    }\n\n    indices.forEach((i, index) => this.write(i, tensors[index]));\n  }\n\n  /**\n   * Return selected values in the TensorArray as a packed Tensor. All of\n   * selected values must have been written and their shapes must all match.\n   * @param [indices] number[] Optional. Taking values in [0, max_value). If the\n   *    TensorArray is not dynamic, max_value=size(). If not specified returns\n   *    all tensors in the original order.\n   * @param [dtype]\n   */\n  gather(indices?: number[], dtype?: DataType): Tensor {\n    if (!!dtype && dtype !== this.dtype) {\n      throw new Error(`TensorArray dtype is ${\n          this.dtype} but gather requested dtype ${dtype}`);\n    }\n\n    if (!indices) {\n      indices = [];\n      for (let i = 0; i < this.size(); i++) {\n        indices.push(i);\n      }\n    }\n\n    if (indices.length === 0) {\n      return tensor([], [0].concat(this.elementShape));\n    }\n\n    // Read all the PersistentTensors into a vector to keep track of\n    // their memory.\n    const tensors = this.readMany(indices);\n\n    this.assertShapesMatchAllowUndefinedSize(\n        this.elementShape, tensors[0].shape, 'TensorArray shape mismatch: ');\n\n    return stack(tensors, 0);\n  }\n\n  /**\n   * Return the values in the TensorArray as a concatenated Tensor.\n   */\n  concat(dtype?: DataType): Tensor {\n    if (!!dtype && dtype !== this.dtype) {\n      throw new Error(`TensorArray dtype is ${\n          this.dtype} but concat requested dtype ${dtype}`);\n    }\n\n    if (this.size() === 0) {\n      return tensor([], [0].concat(this.elementShape));\n    }\n\n    const indices = [];\n    for (let i = 0; i < this.size(); i++) {\n      indices.push(i);\n    }\n    // Collect all the tensors from the tensors array.\n    const tensors = this.readMany(indices);\n\n    this.assertShapesMatchAllowUndefinedSize(\n        this.elementShape, tensors[0].shape,\n        `TensorArray shape mismatch: tensor array shape (${\n            this.elementShape}) vs first tensor shape (${tensors[0].shape})`);\n\n    return concat(tensors, 0);\n  }\n\n  /**\n   * Scatter the values of a Tensor in specific indices of a TensorArray.\n   * @param indices nummber[] values in [0, max_value). If the\n   *    TensorArray is not dynamic, max_value=size().\n   * @param tensor Tensor input tensor.\n   */\n  scatter(indices: number[], tensor: Tensor) {\n    if (tensor.dtype !== this.dtype) {\n      throw new Error(`TensorArray dtype is ${\n          this.dtype} but tensor has dtype ${tensor.dtype}`);\n    }\n\n    if (indices.length !== tensor.shape[0]) {\n      throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${\n          indices.length} vs. ${tensor.shape[0]}`);\n    }\n\n    const maxIndex = Math.max(...indices);\n\n    if (!this.dynamicSize && maxIndex >= this.maxSize) {\n      throw new Error(\n          `Max index must be < array size (${maxIndex}  vs. ${this.maxSize})`);\n    }\n\n    this.writeMany(indices, unstack(tensor, 0));\n  }\n\n  /**\n   * Split the values of a Tensor into the TensorArray.\n   * @param length number[] with the lengths to use when splitting value along\n   *    its first dimension.\n   * @param tensor Tensor, the tensor to split.\n   */\n  split(length: number[], tensor: Tensor) {\n    if (tensor.dtype !== this.dtype) {\n      throw new Error(`TensorArray dtype is ${\n          this.dtype} but tensor has dtype ${tensor.dtype}`);\n    }\n    let totalLength = 0;\n    const cumulativeLengths = length.map(len => {\n      totalLength += len;\n      return totalLength;\n    });\n\n    if (totalLength !== tensor.shape[0]) {\n      throw new Error(`Expected sum of lengths to be equal to\n          tensor.shape[0], but sum of lengths is\n        ${totalLength}, and tensor's shape is: ${tensor.shape}`);\n    }\n\n    if (!this.dynamicSize && length.length !== this.maxSize) {\n      throw new Error(\n          `TensorArray's size is not equal to the size of lengths (${\n              this.maxSize} vs. ${length.length}), ` +\n          'and the TensorArray is not marked as dynamically resizeable');\n    }\n\n    const elementPerRow = totalLength === 0 ? 0 : tensor.size / totalLength;\n    const tensors: Tensor[] = [];\n    tidy(() => {\n      tensor = tensor.reshape([1, totalLength, elementPerRow]);\n      for (let i = 0; i < length.length; ++i) {\n        const previousLength = (i === 0) ? 0 : cumulativeLengths[i - 1];\n        const indices = [0, previousLength, 0];\n        const sizes = [1, length[i], elementPerRow];\n        tensors[i] = slice(tensor, indices, sizes).reshape(this.elementShape);\n      }\n      return tensors;\n    });\n    const indices = [];\n    for (let i = 0; i < length.length; i++) {\n      indices[i] = i;\n    }\n    this.writeMany(indices, tensors);\n  }\n\n  /**\n   * This differs from util.assertShapesMatch in that it allows values of\n   * negative one, an undefined size of a dimensinon, in a shape to match\n   * anything.\n   */\n  private assertShapesMatchAllowUndefinedSize(\n      shapeA: number[], shapeB: number[], errorMessagePrefix = ''): void {\n    util.assert(\n        this.shapesEqualAllowUndefinedSize(shapeA, shapeB),\n        () =>\n            errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n  }\n\n  private shapesEqualAllowUndefinedSize(n1: number[], n2: number[]) {\n    if (n1.length !== n2.length) {\n      return false;\n    }\n    for (let i = 0; i < n1.length; i++) {\n      if (n1[i] !== -1 && n2[i] !== -1 && n1[i] !== n2[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\nimport {scalar} from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {TensorArray} from '../../executor/tensor_array';\nimport {InternalOpAsyncExecutor, Node} from '../types';\n\nimport {getParamValue, getTensor} from './utils';\n\nexport const executeOp: InternalOpAsyncExecutor = async(\n    node: Node, tensorMap: NamedTensorsMap,\n    context: ExecutionContext): Promise<tfc.Tensor[]> => {\n  switch (node.op) {\n    case 'LoopCond':\n      return [\n        (getParamValue('pred', node, tensorMap, context) as tfc.Tensor).clone()\n      ];\n    case 'Switch': {\n      const pred =\n          getParamValue('pred', node, tensorMap, context) as tfc.Tensor;\n      const data =\n          getParamValue('data', node, tensorMap, context) as tfc.Tensor;\n      // Outputs nodes :0 => false, :1 => true\n      return (await pred.data())[0] ? [undefined, data.clone()] :\n                                      [data.clone(), undefined];\n    }\n    case 'Merge':\n      const inputName = node.inputNames.find(\n          name => getTensor(name, tensorMap, context) !== undefined);\n      return inputName ? [getTensor(inputName, tensorMap, context).clone()] :\n                         undefined;\n\n    case 'Enter':\n      const frameId =\n          getParamValue('frameName', node, tensorMap, context) as string;\n      const data =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      context.enterFrame(frameId);\n      return [data.clone()];\n\n    case 'Exit':\n      const tensor =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      context.exitFrame();\n      return [tensor.clone()];\n\n    case 'NextIteration':\n      const input =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      context.nextIteration();\n      return [input.clone()];\n\n    case 'TensorArrayV3':\n      const size = getParamValue('size', node, tensorMap, context) as number;\n      const dtype =\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType;\n      const elementShape =\n          getParamValue('elementShape', node, tensorMap, context) as number[];\n      const dynamicSize =\n          getParamValue('dynamicSize', node, tensorMap, context) as boolean;\n      const clearAfterRead =\n          getParamValue('clearAfterRead', node, tensorMap, context) as boolean;\n      const identicalElementShapes =\n          getParamValue('identicalElementShapes', node, tensorMap, context) as\n          boolean;\n      const name = getParamValue('name', node, tensorMap, context) as string;\n      const tensorArray = new TensorArray(\n          name, dtype, size, elementShape, identicalElementShapes, dynamicSize,\n          clearAfterRead);\n      context.addTensorArray(tensorArray);\n      return [scalar(tensorArray.id), scalar(1.0)];\n\n    case 'TensorArrayWriteV3':\n      const id =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const index = getParamValue('index', node, tensorMap, context) as number;\n      const writeTensor =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      const writeTensorArray = context.getTensorArray(id);\n      writeTensorArray.write(index, writeTensor);\n      return [scalar(1.0)];\n\n    case 'TensorArrayReadV3':\n      const readId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const readIndex =\n          getParamValue('index', node, tensorMap, context) as number;\n      const readTensorArray = context.getTensorArray(readId);\n      return [readTensorArray.read(readIndex)];\n\n    case 'TensorArrayGatherV3':\n      const gatherId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const gatherIndices =\n          getParamValue('indices', node, tensorMap, context) as number[];\n      const gatherDtype =\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType;\n      const gatherTensorArray = context.getTensorArray(gatherId);\n      return [gatherTensorArray.gather(gatherIndices, gatherDtype)];\n\n    case 'TensorArrayScatterV3':\n      const scatterId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const scatterIndices =\n          getParamValue('indices', node, tensorMap, context) as number[];\n      const scatterTensor =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      const scatterTensorArray = context.getTensorArray(scatterId);\n      scatterTensorArray.scatter(scatterIndices, scatterTensor);\n      return [scalar(1.0)];\n\n    case 'TensorArrayConcatV3':\n      const concatId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const concatTensorArray = context.getTensorArray(concatId);\n      const concatDtype =\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType;\n      return [concatTensorArray.concat(concatDtype)];\n\n    case 'TensorArraySplitV3':\n      const splitId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const splitTensor =\n          getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n      const lengths =\n          getParamValue('lengths', node, tensorMap, context) as number[];\n      const splitTensorArray = context.getTensorArray(splitId);\n      splitTensorArray.split(lengths, splitTensor);\n      return [scalar(1.0)];\n\n    case 'TensorArraySizeV3':\n      const sizeId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const sizeTensorArray = context.getTensorArray(sizeId);\n      return [scalar(sizeTensorArray.size(), 'int32')];\n\n    case 'TensorArrayCloseV3':\n      const closeId =\n          getParamValue('tensorArrayId', node, tensorMap, context) as number;\n      const closeTensorArray = context.getTensorArray(closeId);\n      closeTensorArray.clearAndClose();\n      return [scalar(0)];\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'control';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                              tensorMap: NamedTensorsMap,\n                                              context: ExecutionContext):\n                                                 tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Conv1D': {\n      const stride =\n          getParamValue('stride', node, tensorMap, context) as number;\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as string)\n              .toUpperCase();\n      const dilation =\n          getParamValue('dilation', node, tensorMap, context) as number;\n      return [tfc.conv1d(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D,\n          getParamValue('filter', node, tensorMap, context) as tfc.Tensor3D,\n          stride, pad as 'valid' | 'same', dataFormat as 'NWC' | 'NCW',\n          dilation)];\n    }\n    case 'Conv2D': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as string)\n              .toUpperCase();\n      const dilations =\n          getParamValue('dilations', node, tensorMap, context) as number[];\n      return [tfc.conv2d(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          getParamValue('filter', node, tensorMap, context) as tfc.Tensor4D,\n          [stride[1], stride[2]], pad as 'valid' | 'same',\n          dataFormat as 'NHWC' | 'NCHW', [dilations[1], dilations[2]])];\n    }\n    case '_FusedConv2D':\n    case 'FusedDepthwiseConv2dNative': {\n      const [extraOp, activationFunc] =\n          (getParamValue('fusedOps', node, tensorMap, context) as string[]);\n\n      const isBiasAdd = extraOp === 'biasadd';\n      const isPrelu = activationFunc === 'prelu';\n      const isBatchNorm = extraOp === 'fusedbatchnorm';\n\n      const numArgs =\n          (getParamValue('numArgs', node, tensorMap, context) as number);\n      if (isBiasAdd) {\n        if (isPrelu && numArgs !== 2) {\n          throw new Error(\n              'FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu ' +\n              'must have two extra arguments: bias and alpha.');\n        }\n        if (!isPrelu && numArgs !== 1) {\n          throw new Error(\n              'FusedConv2d and DepthwiseConv2d with BiasAdd must have ' +\n              'one extra argument: bias.');\n        }\n      }\n      if (isBatchNorm) {\n        throw new Error(\n            'FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.');\n      }\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as string)\n              .toUpperCase();\n      const dilations =\n          getParamValue('dilations', node, tensorMap, context) as number[];\n      const [biasArg, preluArg] =\n          getParamValue('args', node, tensorMap, context) as tfc.Tensor[];\n      const kernelMethod = node.op === '_FusedConv2D' ?\n          tfc.fused.conv2d :\n          tfc.fused.depthwiseConv2d;\n      return [kernelMethod({\n        x: getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n            tfc.Tensor4D,\n        filter: getParamValue('filter', node, tensorMap, context) as\n            tfc.Tensor4D,\n        strides: [stride[1], stride[2]],\n        pad: pad as 'valid' | 'same',\n        dataFormat: dataFormat as 'NHWC' | 'NCHW',\n        dilations: [dilations[1], dilations[2]],\n        bias: biasArg,\n        activation: activationFunc as tfc.fused.Activation,\n        preluActivationWeights: preluArg\n      })];\n    }\n    case 'Conv2DBackpropInput':\n    case 'Conv2dTranspose': {\n      const shape = getParamValue(\n                        'outputShape', node, tensorMap,\n                        context) as [number, number, number] |\n          [number, number, number, number];\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      return [tfc.conv2dTranspose(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          getParamValue('filter', node, tensorMap, context) as tfc.Tensor4D,\n          shape, [stride[1], stride[2]], pad as 'valid' | 'same')];\n    }\n    case 'DepthwiseConv2dNative':\n    case 'DepthwiseConv2d': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const dilations =\n          getParamValue('dilations', node, tensorMap, context) as number[];\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as string)\n              .toUpperCase();\n\n      return [tfc.depthwiseConv2d(\n          getParamValue('input', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          getParamValue('filter', node, tensorMap, context) as tfc.Tensor4D,\n          [stride[1], stride[2]], pad as 'valid' | 'same',\n          dataFormat as 'NHWC' | 'NCHW', [dilations[1], dilations[2]])];\n    }\n    case 'Conv3D': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as string)\n              .toUpperCase();\n      const dilations =\n          getParamValue('dilations', node, tensorMap, context) as number[];\n      return [tfc.conv3d(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor4D |\n              tfc.Tensor<tfc.Rank.R5>,\n          getParamValue('filter', node, tensorMap, context) as\n              tfc.Tensor<tfc.Rank.R5>,\n          [stride[1], stride[2], stride[3]], pad as 'valid' | 'same',\n          dataFormat as 'NDHWC' | 'NCDHW',\n          [dilations[1], dilations[2], dilations[3]])];\n    }\n    case 'AvgPool': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const kernelSize =\n          getParamValue('kernelSize', node, tensorMap, context) as number[];\n\n      return [tfc.avgPool(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          [kernelSize[1], kernelSize[2]], [stride[1], stride[2]],\n          pad as 'valid' | 'same')];\n    }\n    case 'MaxPool': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const kernelSize =\n          getParamValue('kernelSize', node, tensorMap, context) as number[];\n\n      return [tfc.maxPool(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          [kernelSize[1], kernelSize[2]], [stride[1], stride[2]],\n          pad as 'valid' | 'same')];\n    }\n    case 'MaxPoolWithArgmax': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const kernelSize =\n          getParamValue('kernelSize', node, tensorMap, context) as number[];\n      const includeBatchInIndex =\n          getParamValue('includeBatchInIndex', node, tensorMap, context) as\n          boolean;\n      const {result, indexes} = tfc.maxPoolWithArgmax(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor4D,\n          [kernelSize[1], kernelSize[2]], [stride[1], stride[2]],\n          pad as 'valid' | 'same', includeBatchInIndex);\n      return [result, indexes];\n    }\n    case 'AvgPool3D': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const kernelSize =\n          getParamValue('kernelSize', node, tensorMap, context) as number[];\n\n      return [tfc.avgPool3d(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor5D,\n          [kernelSize[1], kernelSize[2], kernelSize[3]],\n          [stride[1], stride[2], stride[3]], pad as 'valid' | 'same')];\n    }\n\n    case 'MaxPool3D': {\n      const stride =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const pad = getParamValue('pad', node, tensorMap, context);\n      const kernelSize =\n          getParamValue('kernelSize', node, tensorMap, context) as number[];\n\n      return [tfc.maxPool3d(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor5D,\n          [kernelSize[1], kernelSize[2], kernelSize[3]],\n          [stride[1], stride[2], stride[3]], pad as 'valid' | 'same')];\n    }\n\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'convolution';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Fill': {\n      const shape =\n          getParamValue('shape', node, tensorMap, context) as number[];\n      const dtype =\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType;\n      const value = getParamValue('value', node, tensorMap, context) as number;\n      return [tfc.fill(shape, value, dtype)];\n    }\n    case 'LinSpace': {\n      const start = getParamValue('start', node, tensorMap, context) as number;\n      const stop = getParamValue('stop', node, tensorMap, context) as number;\n      const num = getParamValue('num', node, tensorMap, context) as number;\n      return [tfc.linspace(start, stop, num)];\n    }\n    case 'Multinomial': {\n      const logits =\n          getParamValue('logits', node, tensorMap, context) as tfc.Tensor1D;\n      const numSamples =\n          getParamValue('numSamples', node, tensorMap, context) as number;\n      const seed = getParamValue('seed', node, tensorMap, context) as number;\n      return [tfc.multinomial(logits, numSamples, seed)];\n    }\n    case 'OneHot': {\n      const indices =\n          getParamValue('indices', node, tensorMap, context) as tfc.Tensor1D;\n      const depth = getParamValue('depth', node, tensorMap, context) as number;\n      const onValue =\n          getParamValue('onValue', node, tensorMap, context) as number;\n      const offValue =\n          getParamValue('offValue', node, tensorMap, context) as number;\n      return [tfc.oneHot(indices, depth, onValue, offValue)];\n    }\n    case 'Ones': {\n      return [tfc.ones(\n          getParamValue('shape', node, tensorMap, context) as number[],\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType)];\n    }\n    case 'OnesLike': {\n      return [tfc.onesLike(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'RandomUniform': {\n      return [tfc.randomUniform(\n          // tslint:disable-next-line:no-any\n          getParamValue('shape', node, tensorMap, context) as any,\n          getParamValue('minval', node, tensorMap, context) as number,\n          getParamValue('maxval', node, tensorMap, context) as number,\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType)];\n    }\n    case 'Range': {\n      const start = getParamValue('start', node, tensorMap, context) as number;\n      const stop = getParamValue('stop', node, tensorMap, context) as number;\n      const step = getParamValue('step', node, tensorMap, context) as number;\n      return [tfc.range(\n          start, stop, step,\n          getParamValue('dtype', node, tensorMap, context) as 'float32' |\n              'int32')];\n    }\n    case 'TruncatedNormal': {\n      const shape =\n          getParamValue('shape', node, tensorMap, context) as number[];\n      const mean = getParamValue('mean', node, tensorMap, context) as number;\n      const stdDev =\n          getParamValue('stdDev', node, tensorMap, context) as number;\n      const seed = getParamValue('seed', node, tensorMap, context) as number;\n      return [tfc.truncatedNormal(\n          shape, mean, stdDev,\n          getParamValue('dtype', node, tensorMap, context) as 'float32' |\n              'int32',\n          seed)];\n    }\n    case 'Zeros': {\n      return [tfc.zeros(\n          getParamValue('shape', node, tensorMap, context) as number[],\n          getParamValue('dtype', node, tensorMap, context) as tfc.DataType)];\n    }\n    case 'ZerosLike': {\n      return [tfc.zerosLike(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'creation';\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpAsyncExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpAsyncExecutor = async(\n    node: Node, tensorMap: NamedTensorsMap,\n    context: ExecutionContext): Promise<tfc.Tensor[]> => {\n  switch (node.op) {\n    case 'NonMaxSuppressionV5':\n    case 'NonMaxSuppressionV3':\n    case 'NonMaxSuppressionV2': {\n      const boxes =\n          getParamValue('boxes', node, tensorMap, context) as tfc.Tensor;\n      const scores =\n          getParamValue('scores', node, tensorMap, context) as tfc.Tensor;\n      const maxOutputSize =\n          getParamValue('maxOutputSize', node, tensorMap, context) as number;\n      const iouThreshold =\n          getParamValue('iouThreshold', node, tensorMap, context) as number;\n      const scoreThreshold =\n          getParamValue('scoreThreshold', node, tensorMap, context) as number;\n\n      if (node.op === 'NonMaxSuppressionV5') {\n        const softNmsSigma =\n            getParamValue('softNmsSigma', node, tensorMap, context) as number;\n\n        const result = await tfc.image.nonMaxSuppressionWithScoreAsync(\n            boxes as tfc.Tensor2D, scores as tfc.Tensor1D, maxOutputSize,\n            iouThreshold, scoreThreshold, softNmsSigma);\n\n        return [result.selectedIndices, result.selectedScores];\n      }\n\n      return [await tfc.image.nonMaxSuppressionAsync(\n          boxes as tfc.Tensor2D, scores as tfc.Tensor1D, maxOutputSize,\n          iouThreshold, scoreThreshold)];\n    }\n    case 'Where': {\n      const condition =\n          (getParamValue('condition', node, tensorMap, context) as tfc.Tensor)\n              .asType('bool');\n      const result = [await tfc.whereAsync(condition)];\n      condition.dispose();\n      return result;\n    }\n    case 'ListDiff': {\n      return tfc.setdiff1dAsync(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('y', node, tensorMap, context) as tfc.Tensor);\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'dynamic';\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor =\n    (node: Node, tensorMap: NamedTensorsMap,\n     context: ExecutionContext): tfc.Tensor[] => {\n      switch (node.op) {\n        case 'TopKV2': {\n          const x = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n          const k = getParamValue('k', node, tensorMap, context) as number;\n          const sorted =\n              getParamValue('sorted', node, tensorMap, context) as boolean;\n          const result = tfc.topk(x, k, sorted);\n          return [result.values, result.indices];\n        }\n        default:\n          throw TypeError(`Node type ${node.op} is not implemented`);\n      }\n    };\n\nexport const CATEGORY = 'evaluation';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue, getTensor} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Const': {\n      return tensorMap[node.name];\n    }\n    case 'PlaceholderWithDefault':\n      const def =\n          getParamValue('default', node, tensorMap, context) as tfc.Tensor;\n      return [getTensor(node.name, tensorMap, context) || def];\n    case 'Placeholder':\n      return [getTensor(node.name, tensorMap, context)];\n    case 'Identity':\n    case 'StopGradient':\n    case 'FakeQuantWithMinMaxVars':  // This op is currently ignored.\n      return [\n        (getParamValue('x', node, tensorMap, context) as tfc.Tensor).clone()\n      ];\n    case 'IdentityN':\n      return (getParamValue('x', node, tensorMap, context) as tfc.Tensor[])\n          .map((t: tfc.Tensor) => t.clone());\n    case 'Snapshot':\n      const snapshot =\n          (getParamValue('x', node, tensorMap, context) as tfc.Tensor);\n      return [snapshot.clone()];\n    case 'Shape':\n      return [tfc.tensor1d(\n          (getParamValue('x', node, tensorMap, context) as tfc.Tensor).shape,\n          'int32')];\n    case 'ShapeN':\n      return (getParamValue('x', node, tensorMap, context) as tfc.Tensor[])\n          .map((t: tfc.Tensor) => tfc.tensor1d(t.shape));\n    case 'Size':\n      return [tfc.scalar(\n          (getParamValue('x', node, tensorMap, context) as tfc.Tensor).size,\n          'int32')];\n    case 'Rank':\n      return [tfc.scalar(\n          (getParamValue('x', node, tensorMap, context) as tfc.Tensor).rank,\n          'int32')];\n    case 'NoOp':\n      return [tfc.scalar(1)];\n    case 'Print':\n      const input = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n      const data =\n          getParamValue('data', node, tensorMap, context) as tfc.Tensor[];\n      const message =\n          getParamValue('message', node, tensorMap, context) as string;\n      const summarize =\n          getParamValue('summarize', node, tensorMap, context) as number;\n      console.warn(\n          'The graph has a tf.print() operation,' +\n          'usually used for debugging, which slows down performance.');\n      console.log(message);\n      for (let i = 0; i < data.length; i++) {\n        console.log(\n            Array.prototype.slice.call(data[i].dataSync()).slice(0, summarize));\n      }\n      return [input];\n\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'graph';\n","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'ResizeBilinear': {\n      const images =\n          getParamValue('images', node, tensorMap, context) as tfc.Tensor;\n      const size = getParamValue('size', node, tensorMap, context) as number[];\n      const alignCorners =\n          getParamValue('alignCorners', node, tensorMap, context) as boolean;\n      return [tfc.image.resizeBilinear(\n          images as tfc.Tensor3D | tfc.Tensor4D, [size[0], size[1]],\n          alignCorners)];\n    }\n    case 'ResizeNearestNeighbor': {\n      const images =\n          getParamValue('images', node, tensorMap, context) as tfc.Tensor;\n      const size = getParamValue('size', node, tensorMap, context) as number[];\n      const alignCorners =\n          getParamValue('alignCorners', node, tensorMap, context) as boolean;\n      return [tfc.image.resizeNearestNeighbor(\n          images as tfc.Tensor3D | tfc.Tensor4D, [size[0], size[1]],\n          alignCorners)];\n    }\n    case 'CropAndResize': {\n      const image =\n          getParamValue('image', node, tensorMap, context) as tfc.Tensor;\n      const boxes =\n          getParamValue('boxes', node, tensorMap, context) as tfc.Tensor;\n      const boxInd =\n          getParamValue('boxInd', node, tensorMap, context) as tfc.Tensor;\n      const cropSize =\n          getParamValue('cropSize', node, tensorMap, context) as number[];\n      const method =\n          getParamValue('method', node, tensorMap, context) as string;\n      const extrapolationValue =\n          getParamValue('extrapolationValue', node, tensorMap, context) as\n          number;\n      return [tfc.image.cropAndResize(\n          image as tfc.Tensor4D, boxes as tfc.Tensor2D, boxInd as tfc.Tensor1D,\n          cropSize as [number, number], method as 'bilinear' | 'nearest',\n          extrapolationValue)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'image';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                              tensorMap: NamedTensorsMap,\n                                              context: ExecutionContext):\n                                                 tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Equal': {\n      return [tfc.equal(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'NotEqual': {\n      return [tfc.notEqual(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Greater': {\n      return [tfc.greater(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'GreaterEqual': {\n      return [tfc.greaterEqual(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Less': {\n      return [tfc.less(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'LessEqual': {\n      return [tfc.lessEqual(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'LogicalAnd': {\n      return [tfc.logicalAnd(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'LogicalNot': {\n      return [tfc.logicalNot(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'LogicalOr': {\n      return [tfc.logicalOr(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'Select':\n    case 'SelectV2': {\n      return [tfc.where(\n          getParamValue('condition', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'logical';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'BatchMatMul':\n    case 'BatchMatMulV2':\n    case 'MatMul':\n      return [tfc.matMul(\n          getParamValue('a', node, tensorMap, context) as tfc.Tensor2D,\n          getParamValue('b', node, tensorMap, context) as tfc.Tensor2D,\n          getParamValue('transposeA', node, tensorMap, context) as boolean,\n          getParamValue('transposeB', node, tensorMap, context) as boolean)];\n\n    case 'Transpose':\n      return [tfc.transpose(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('perm', node, tensorMap, context) as number[])];\n\n    case '_FusedMatMul':\n      const [extraOp, activationFunc] =\n          (getParamValue('fusedOps', node, tensorMap, context) as string[]);\n\n      const isBiasAdd = extraOp === 'biasadd';\n      const isPrelu = activationFunc === 'prelu';\n\n      const numArgs =\n          (getParamValue('numArgs', node, tensorMap, context) as number);\n      if (isBiasAdd) {\n        if (isPrelu && numArgs !== 2) {\n          throw new Error(\n              'Fused MatMul with BiasAdd and Prelu must have two ' +\n              'extra arguments: bias and alpha.');\n        }\n        if (!isPrelu && numArgs !== 1) {\n          throw new Error(\n              'Fused MatMul with BiasAdd must have one extra argument: bias.');\n        }\n      }\n      const [biasArg, preluArg] =\n          getParamValue('args', node, tensorMap, context) as tfc.Tensor[];\n      return [tfc.fused.matMul({\n        a: getParamValue('a', node, tensorMap, context) as tfc.Tensor2D,\n        b: getParamValue('b', node, tensorMap, context) as tfc.Tensor2D,\n        transposeA: getParamValue('transposeA', node, tensorMap, context) as\n            boolean,\n        transposeB: getParamValue('transposeB', node, tensorMap, context) as\n            boolean,\n        bias: biasArg,\n        activation: activationFunc as tfc.fused.Activation,\n        preluActivationWeights: preluArg\n      })];\n\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'matrices';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'FusedBatchNorm':\n    case 'FusedBatchNormV2': {\n      return [tfc.batchNorm(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('mean', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('variance', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('offset', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('scale', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('epsilon', node, tensorMap, context) as number)];\n    }\n    case 'FusedBatchNormV3': {\n      return [tfc.batchNorm(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('mean', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('variance', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('offset', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('scale', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('epsilon', node, tensorMap, context) as number)];\n    }\n    case 'LRN': {\n      return [tfc.localResponseNormalization(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor3D |\n              tfc.Tensor4D,\n          getParamValue('radius', node, tensorMap, context) as number,\n          getParamValue('bias', node, tensorMap, context) as number,\n          getParamValue('alpha', node, tensorMap, context) as number,\n          getParamValue('beta', node, tensorMap, context) as number)];\n    }\n    case 'Softmax': {\n      return [tfc.softmax(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'LogSoftmax': {\n      return [tfc.logSoftmax(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n    }\n    case 'SparseToDense': {\n      return [tfc.sparseToDense(\n          getParamValue('sparseIndices', node, tensorMap, context) as\n              tfc.Tensor,\n          getParamValue('outputShape', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('sparseValues', node, tensorMap, context) as number[],\n          getParamValue('defaultValue', node, tensorMap, context) as\n              tfc.Scalar)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'normalization';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Max': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.max(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'Mean': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.mean(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'Min': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.min(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'Sum': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.sum(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'All': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.all(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'Any': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.any(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    case 'ArgMax': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      return [tfc.argMax(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis)];\n    }\n    case 'ArgMin': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      return [tfc.argMin(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis)];\n    }\n    case 'Prod': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const keepDims =\n          getParamValue('keepDims', node, tensorMap, context) as boolean;\n      return [tfc.prod(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis,\n          keepDims)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'reduction';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'ConcatV2':\n    case 'Concat': {\n      const n = getParamValue('n', node, tensorMap, context) as number;\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      let inputs =\n          getParamValue('tensors', node, tensorMap, context) as tfc.Tensor[];\n      inputs = inputs.slice(0, n);\n      return [tfc.concat(inputs, axis)];\n    }\n    case 'GatherV2':\n    case 'Gather': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      const input = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n      const indices =\n          getParamValue('indices', node, tensorMap, context) as tfc.Tensor1D;\n      return [tfc.gather(input, indices.asType('int32'), axis)];\n    }\n    case 'ReverseV2':\n    case 'Reverse': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      const input = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n      return [tfc.reverse(input, axis)];\n    }\n    case 'Slice': {\n      // tslint:disable-next-line:no-any\n      const begin = getParamValue('begin', node, tensorMap, context) as any;\n      // tslint:disable-next-line:no-any\n      const size = getParamValue('size', node, tensorMap, context) as any;\n      return [tfc.slice(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, begin,\n          size)];\n    }\n    case 'StridedSlice': {\n      const begin =\n          getParamValue('begin', node, tensorMap, context) as number[];\n      const end = getParamValue('end', node, tensorMap, context) as number[];\n      const strides =\n          getParamValue('strides', node, tensorMap, context) as number[];\n      const beginMask =\n          getParamValue('beginMask', node, tensorMap, context) as number;\n      const endMask =\n          getParamValue('endMask', node, tensorMap, context) as number;\n      const ellipsisMask =\n          getParamValue('ellipsisMask', node, tensorMap, context) as number;\n      const newAxisMask =\n          getParamValue('newAxisMask', node, tensorMap, context) as number;\n      const shrinkAxisMask =\n          getParamValue('shrinkAxisMask', node, tensorMap, context) as number;\n      const tensor = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n      if (begin.length === 1 && tensor.shape.length > 1) {\n        for (let i = 1; i < tensor.shape.length; i++) {\n          begin.push(0);\n          end.push(tensor.shape[i]);\n          strides.push(strides[0]);\n        }\n      }\n      return [tfc.stridedSlice(\n          tensor, begin, end, strides, beginMask, endMask, ellipsisMask,\n          newAxisMask, shrinkAxisMask)];\n    }\n    case 'Pack': {\n      return tfc.tidy(() => {\n        const axis = getParamValue('axis', node, tensorMap, context) as number;\n        const tensors =\n            getParamValue('tensors', node, tensorMap, context) as tfc.Tensor[];\n        // Reshape the tensors to the first tensor's shape if they don't match.\n        const shape = tensors[0].shape;\n        const squeezedShape = tensors[0].squeeze().shape;\n        const mapped = tensors.map(tensor => {\n          const sameShape = tfc.util.arraysEqual(tensor.shape, shape);\n          if (!sameShape &&\n              !tfc.util.arraysEqual(tensor.squeeze().shape, squeezedShape)) {\n            throw new Error('the input tensors shape does not match');\n          }\n          return sameShape ? tensor : tensor.reshape(shape);\n        });\n        return [tfc.stack(mapped, axis)];\n      });\n    }\n    case 'Unpack': {\n      return tfc.tidy(() => {\n        const axis = getParamValue('axis', node, tensorMap, context) as number;\n        const tensor =\n            getParamValue('tensor', node, tensorMap, context) as tfc.Tensor;\n        return tfc.unstack(tensor, axis);\n      });\n    }\n    case 'Tile': {\n      const reps = getParamValue('reps', node, tensorMap, context) as number[];\n      return [tfc.tile(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, reps)];\n    }\n    case 'Split':\n    case 'SplitV': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      const numOrSizeSplits =\n          getParamValue('numOrSizeSplits', node, tensorMap, context) as number |\n          number[];\n      return tfc.split(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          numOrSizeSplits, axis);\n    }\n    case 'ScatterNd': {\n      const indices =\n          getParamValue('indices', node, tensorMap, context) as tfc.Tensor;\n      const values =\n          getParamValue('values', node, tensorMap, context) as tfc.Tensor;\n      const shape =\n          getParamValue('shape', node, tensorMap, context) as number[];\n      return [tfc.scatterND(indices, values, shape)];\n    }\n    case 'GatherNd': {\n      const x = getParamValue('x', node, tensorMap, context) as tfc.Tensor;\n      const indices =\n          getParamValue('indices', node, tensorMap, context) as tfc.Tensor;\n      return [tfc.gatherND(x, indices)];\n    }\n    case 'SparseToDense': {\n      const indices =\n          getParamValue('sparseIndices', node, tensorMap, context) as\n          tfc.Tensor;\n      const shape =\n          getParamValue('outputShape', node, tensorMap, context) as number[];\n      const sparseValues =\n          getParamValue('sparseValues', node, tensorMap, context) as tfc.Tensor;\n      const defaultValue =\n          getParamValue('defaultValue', node, tensorMap, context) as tfc.Scalar;\n      return [tfc.sparseToDense(\n          indices, sparseValues, shape,\n          sparseValues.dtype === defaultValue.dtype ?\n              defaultValue :\n              defaultValue.asType(sparseValues.dtype))];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'slice_join';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue} from './utils';\n\nexport const executeOp: InternalOpExecutor =\n    (node: Node, tensorMap: NamedTensorsMap,\n     context: ExecutionContext): tfc.Tensor[] => {\n      switch (node.op) {\n        case 'FFT': {\n          return [tfc.fft(\n              getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n        }\n        case 'IFFT': {\n          return [tfc.ifft(\n              getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n        }\n        case 'RFFT': {\n          return [tfc.rfft(\n              getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n        }\n        case 'IRFFT': {\n          return [tfc.irfft(\n              getParamValue('x', node, tensorMap, context) as tfc.Tensor)];\n        }\n        default:\n          throw TypeError(`Node type ${node.op} is not implemented`);\n      }\n    };\n\nexport const CATEGORY = 'spectral';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../../data/types';\nimport {ExecutionContext} from '../../executor/execution_context';\nimport {InternalOpExecutor, Node} from '../types';\n\nimport {getParamValue, split} from './utils';\n\nexport const executeOp: InternalOpExecutor = (node: Node,\n                                            tensorMap: NamedTensorsMap,\n                                            context: ExecutionContext):\n                                               tfc.Tensor[] => {\n  switch (node.op) {\n    case 'Cast': {\n      return [tfc.cast(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('dtype', node, tensorMap, context) as 'int32' |\n              'float32' | 'bool')];\n    }\n    case 'ExpandDims': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number;\n      return [tfc.expandDims(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis)];\n    }\n    case 'Squeeze': {\n      const axis = getParamValue('axis', node, tensorMap, context) as number[];\n      return [tfc.squeeze(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor, axis)];\n    }\n\n    case 'Reshape': {\n      return [tfc.reshape(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          getParamValue('shape', node, tensorMap, context) as number[])];\n    }\n    case 'PadV2':\n    case 'Pad': {\n      return [tfc.pad(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          split(\n              getParamValue('padding', node, tensorMap, context) as number[],\n              2) as Array<[number, number]>,\n          getParamValue('constantValue', node, tensorMap, context) as number)];\n    }\n    case 'SpaceToBatchND': {\n      const blockShape =\n          getParamValue('blockShape', node, tensorMap, context) as number[];\n      const paddings = split(\n          getParamValue('paddings', node, tensorMap, context) as number[], 2);\n      return [tfc.spaceToBatchND(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          blockShape, paddings)];\n    }\n    case 'BatchToSpaceND': {\n      const blockShape =\n          getParamValue('blockShape', node, tensorMap, context) as number[];\n      const crops = split(\n          getParamValue('crops', node, tensorMap, context) as number[], 2);\n      return [tfc.batchToSpaceND(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor,\n          blockShape, crops)];\n    }\n    case 'DepthToSpace': {\n      const blockSize =\n          getParamValue('blockSize', node, tensorMap, context) as number;\n      const dataFormat =\n          (getParamValue('dataFormat', node, tensorMap, context) as\n           string).toUpperCase() as 'NHWC' |\n          'NCHW';\n      return [tfc.depthToSpace(\n          getParamValue('x', node, tensorMap, context) as tfc.Tensor4D,\n          blockSize, dataFormat)];\n    }\n    default:\n      throw TypeError(`Node type ${node.op} is not implemented`);\n  }\n};\n\nexport const CATEGORY = 'transformation';\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tfc from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../data/types';\nimport {ExecutionContext} from '../executor/execution_context';\n\nimport {NodeValueImpl} from './custom_op/node_value_impl';\nimport {getRegisteredOp} from './custom_op/register';\nimport * as arithmetic from './executors/arithmetic_executor';\nimport * as basicMath from './executors/basic_math_executor';\nimport * as control from './executors/control_executor';\nimport * as convolution from './executors/convolution_executor';\nimport * as creation from './executors/creation_executor';\nimport * as dynamic from './executors/dynamic_executor';\nimport * as evaluation from './executors/evaluation_executor';\nimport * as graph from './executors/graph_executor';\nimport * as image from './executors/image_executor';\nimport * as logical from './executors/logical_executor';\nimport * as matrices from './executors/matrices_executor';\nimport * as normalization from './executors/normalization_executor';\nimport * as reduction from './executors/reduction_executor';\nimport * as sliceJoin from './executors/slice_join_executor';\nimport * as spectral from './executors/spectral_executor';\nimport * as transformation from './executors/transformation_executor';\nimport {Node} from './types';\n\n/**\n * Executes the op defined by the node object.\n * @param node\n * @param tensorMap contains tensors for executed nodes and weights\n */\nexport function executeOp(\n    node: Node, tensorMap: NamedTensorsMap,\n    context: ExecutionContext): tfc.Tensor[]|Promise<tfc.Tensor[]> {\n  const value =\n      ((node: Node, tensorMap: NamedTensorsMap, context: ExecutionContext) => {\n        switch (node.category) {\n          case 'arithmetic':\n            return tfc.tidy(\n                () => arithmetic.executeOp(node, tensorMap, context));\n          case 'basic_math':\n            return tfc.tidy(\n                () => basicMath.executeOp(node, tensorMap, context));\n          case 'control':\n            return control.executeOp(node, tensorMap, context);\n          case 'convolution':\n            return tfc.tidy(\n                () => convolution.executeOp(node, tensorMap, context));\n          case 'creation':\n            return tfc.tidy(() => creation.executeOp(node, tensorMap, context));\n          case 'dynamic':\n            return dynamic.executeOp(node, tensorMap, context);\n          case 'evaluation':\n            return tfc.tidy(\n                () => evaluation.executeOp(node, tensorMap, context));\n          case 'image':\n            return tfc.tidy(() => image.executeOp(node, tensorMap, context));\n          case 'graph':\n            return tfc.tidy(() => graph.executeOp(node, tensorMap, context));\n          case 'logical':\n            return tfc.tidy(() => logical.executeOp(node, tensorMap, context));\n          case 'matrices':\n            return tfc.tidy(() => matrices.executeOp(node, tensorMap, context));\n          case 'normalization':\n            return tfc.tidy(\n                () => normalization.executeOp(node, tensorMap, context));\n          case 'reduction':\n            return tfc.tidy(\n                () => reduction.executeOp(node, tensorMap, context));\n          case 'slice_join':\n            return tfc.tidy(\n                () => sliceJoin.executeOp(node, tensorMap, context));\n          case 'spectral':\n            return tfc.tidy(() => spectral.executeOp(node, tensorMap, context));\n          case 'transformation':\n            return tfc.tidy(\n                () => transformation.executeOp(node, tensorMap, context));\n          case 'custom':\n            const opMapper = getRegisteredOp(node.op);\n            if (opMapper && opMapper.customExecutor) {\n              return opMapper.customExecutor(\n                  new NodeValueImpl(node, tensorMap, context));\n            } else {\n              throw TypeError(`Custom op ${node.op} is not registered.`);\n            }\n          default:\n            throw TypeError(\n                `Unknown op '${node.op}'. File an issue at ` +\n                `https://github.com/tensorflow/tfjs/issues so we can add it` +\n                `, or register a custom execution with tf.registerOp()`);\n        }\n      })(node, tensorMap, context);\n  if (value instanceof Promise) {\n    return value.then((data) => [].concat(data));\n  }\n  return [].concat(value);\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport {Tensor} from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap, TensorArrayMap} from '../data/types';\n\nimport {TensorArray} from './tensor_array';\n\nexport interface ExecutionContextInfo {\n  id: number;           // the unique id of the context info\n  frameName: string;    // The frame name of the loop, this comes from\n                        // the TensorFlow NodeDef.\n  iterationId: number;  // The iteration id of the loop\n}\n\n/**\n * ExecutionContext captures the runtime environment of the node. It keeps\n * track of the current frame and iteration for the control flow ops.\n *\n * For example, typical Dynamic RNN model may contain loops, for which\n * TensorFlow will generate graphs with Enter/Exit nodes to control the\n * current execution frame, and NextIteration Nodes for iteration id increment.\n * For model with branch logic, TensorFLow will generate Switch/Merge ops.\n */\nexport class ExecutionContext {\n  private rootContext = {id: 0, frameName: '', iterationId: 0};\n  private contexts: ExecutionContextInfo[] = [this.rootContext];\n  private lastId = 0;\n  private _currentContextIds: string[];\n\n  constructor(\n      public readonly weightMap: NamedTensorsMap,\n      public readonly tensorArrayMap: TensorArrayMap) {\n    this.generateCurrentContextIds();\n  }\n\n  private newFrame(id: number, frameName: string) {\n    return {id, frameName, iterationId: 0};\n  }\n\n  /**\n   * Set the current context\n   * @param contexts: ExecutionContextInfo[] the current path of execution\n   * frames\n   */\n  set currentContext(contexts: ExecutionContextInfo[]) {\n    if (this.contexts !== contexts) {\n      this.contexts = contexts;\n      this.generateCurrentContextIds();\n    }\n  }\n\n  get currentContext(): ExecutionContextInfo[] {\n    return this.contexts;\n  }\n\n  /**\n   * Returns the current context in string format.\n   */\n  get currentContextId(): string {\n    return this._currentContextIds[0];\n  }\n\n  /**\n   * Returns the current context and all parent contexts in string format.\n   * This allow access to the nodes in the current and parent frames.\n   */\n  get currentContextIds(): string[] {\n    return this._currentContextIds;\n  }\n\n  private generateCurrentContextIds() {\n    const names = [];\n    for (let i = 0; i < this.contexts.length - 1; i++) {\n      const contexts = this.contexts.slice(0, this.contexts.length - i);\n      names.push(this.contextIdforContexts(contexts));\n    }\n    names.push('');\n    this._currentContextIds = names;\n  }\n\n  private contextIdforContexts(contexts: ExecutionContextInfo[]) {\n    return contexts ?\n        contexts\n            .map(\n                context => (context.id === 0 && context.iterationId === 0) ?\n                    '' :\n                    `${context.frameName}-${context.iterationId}`)\n            .join('/') :\n        '';\n  }\n\n  /**\n   * Enter a new frame, a new context is pushed on the current context list.\n   * @param frameId new frame id\n   */\n  enterFrame(frameId: string) {\n    if (this.contexts) {\n      this.lastId++;\n      this.contexts = this.contexts.slice();\n      this.contexts.push(this.newFrame(this.lastId, frameId));\n      this._currentContextIds.unshift(this.contextIdforContexts(this.contexts));\n    }\n  }\n\n  /**\n   * Exit the current frame, the last context is removed from the current\n   * context list.\n   */\n  exitFrame() {\n    if (this.contexts && this.contexts.length > 1) {\n      this.contexts = this.contexts.slice();\n      this.contexts.splice(-1);\n      this.currentContextIds.shift();\n    } else {\n      throw new Error('Cannot exit frame, the context is empty');\n    }\n  }\n\n  /**\n   * Enter the next iteration of a loop, the iteration id of last context is\n   * increased.\n   */\n  nextIteration() {\n    if (this.contexts && this.contexts.length > 0) {\n      this.contexts = this.contexts.slice();\n      this.lastId++;\n      const context =\n          Object.assign({}, this.contexts[this.contexts.length - 1]);\n      context.iterationId += 1;\n      context.id = this.lastId;\n      this.contexts.splice(-1, 1, context);\n      this._currentContextIds.splice(\n          0, 1, this.contextIdforContexts(this.contexts));\n    } else {\n      throw new Error('Cannot increase frame iteration, the context is empty');\n    }\n  }\n\n  getWeight(name: string): Tensor[] {\n    return this.weightMap[name];\n  }\n\n  addTensorArray(tensorArray: TensorArray) {\n    this.tensorArrayMap[tensorArray.id] = tensorArray;\n  }\n\n  getTensorArray(id: number): TensorArray {\n    return this.tensorArrayMap[id];\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {NamedTensorMap} from '@tensorflow/tfjs-core';\n\nimport {NamedTensorsMap} from '../data/types';\nimport {parseNodeName} from '../operations/executors/utils';\nimport {Graph, Node} from '../operations/types';\n\nexport interface ExecutionInfo {\n  inputs: NamedTensorMap;\n  outputs: Node[];\n  usedNodes: Set<string>;\n  missingInputs: string[];\n  dynamicNode: Node;\n  syncInputs: string[];\n}\n\n/**\n * Given graph inputs and desired outputs, find the minimal set of nodes\n * to execute in order to compute the outputs. In addition return other useful\n * info such:\n * - Missing inputs needed to compute the output.\n * - Whether the subgraph contains dynamic ops (control flow, dynamic shape).\n * - Alternative inputs in order to avoid async (dynamic op) execution.\n */\nexport function getExecutionSubgraph(\n    inputs: NamedTensorMap, outputs: Node[],\n    weightMap: NamedTensorsMap): ExecutionInfo {\n  const usedNodes = new Set<string>();\n  const missingInputs: string[] = [];\n  let dynamicNode: Node = null;\n  let syncInputs: string[] = null;\n\n  // Start with the outputs, going backwards and find all the nodes that are\n  // needed to compute those outputs.\n  const seen = new Set<string>();\n  const inputNodeNames =\n      Object.keys(inputs).map(name => parseNodeName(name)[0]);\n  const frontier = [...outputs];\n  while (frontier.length > 0) {\n    const node = frontier.pop();\n    if (isControlFlow(node) || isDynamicShape(node)) {\n      if (dynamicNode == null) {\n        dynamicNode = node;\n        syncInputs = dynamicNode.children.map(child => child.name)\n                         .filter(name => usedNodes.has(name));\n      }\n    }\n    usedNodes.add(node.name);\n\n    // Weights are dead end since we already have their values.\n    if (weightMap[node.name] != null) {\n      continue;\n    }\n    // This node is a dead end since it's one of the user-provided inputs.\n\n    if (inputNodeNames.indexOf(node.name) !== -1) {\n      continue;\n    }\n    if (node.inputs.length === 0) {\n      missingInputs.push(node.name);\n      continue;\n    }\n    node.inputs.forEach(input => {\n      // Don't add to the frontier if it is already there.\n      if (seen.has(input.name)) {\n        return;\n      }\n      seen.add(input.name);\n      frontier.push(input);\n    });\n  }\n  return {inputs, outputs, usedNodes, missingInputs, dynamicNode, syncInputs};\n}\n\n/**\n * Given the execution info, return a list of nodes in topological order that\n * need to be executed to compute the output.\n */\nexport function getNodesInTopologicalOrder(\n    graph: Graph, weightMap: NamedTensorsMap,\n    executionInfo: ExecutionInfo): Node[] {\n  const {usedNodes, inputs} = executionInfo;\n  const frontier: Node[] = [];\n  const inputNodes = Object.keys(inputs)\n                         .map(name => parseNodeName(name)[0])\n                         .map(name => graph.nodes[name]);\n  inputNodes.forEach(input => {\n    if (usedNodes.has(input.name)) {\n      frontier.push(input);\n    }\n  });\n  graph.weights.forEach(weight => {\n    if (usedNodes.has(weight.name)) {\n      frontier.push(weight);\n    }\n  });\n  const seen = new Set<string>();\n  const orderedNodes: Node[] = [];\n  while (frontier.length > 0) {\n    const node = frontier.pop();\n    seen.add(node.name);\n    if (!weightMap[node.name]) {\n      orderedNodes.push(node);\n    }\n    node.children.forEach(child => {\n      if (!seen.has(child.name) && usedNodes.has(child.name) &&\n          child.inputs.every(input => seen.has(input.name))) {\n        frontier.push(child);\n      }\n    });\n  }\n  return orderedNodes;\n}\n\nconst CONTROL_FLOW_OPS = ['Switch', 'Merge', 'Enter', 'Exit', 'NextIteration'];\nconst DYNAMIC_SHAPE_OPS = [\n  'NonMaxSuppressionV2', 'NonMaxSuppressionV3', 'NonMaxSuppressionV5', 'Where'\n];\n\nexport function isControlFlow(node: Node) {\n  return CONTROL_FLOW_OPS.indexOf(node.op) >= 0;\n}\n\nexport function isDynamicShape(node: Node) {\n  return DYNAMIC_SHAPE_OPS.indexOf(node.op) >= 0;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {DataType, NamedTensorMap, Tensor, tidy, util} from '@tensorflow/tfjs-core';\n\nimport {ISignatureDef} from '../data/compiled_api';\nimport {NamedTensorsMap, TensorArrayMap, TensorInfo} from '../data/types';\nimport {getNodeNameAndIndex, getParamValue, getTensor, getTensorsForCurrentContenxt, parseNodeName} from '../operations/executors/utils';\nimport {executeOp} from '../operations/operation_executor';\nimport {Graph, Node} from '../operations/types';\n\nimport {ExecutionContext, ExecutionContextInfo} from './execution_context';\nimport {getExecutionSubgraph, getNodesInTopologicalOrder, isControlFlow} from './model_analysis';\n\ninterface NodeWithContexts {\n  contexts: ExecutionContextInfo[];\n  node: Node;\n}\n\nexport class GraphExecutor {\n  private compiledMap: Map<string, Node[]> = new Map();\n  private _weightMap: NamedTensorsMap = {};\n  private weightIds: number[];\n  private _signature: ISignatureDef;\n  private _inputs: Node[];\n  private _outputs: Node[];\n  private SEPERATOR = ',';\n  get weightMap(): NamedTensorsMap {\n    return this._weightMap;\n  }\n  set weightMap(weightMap: NamedTensorsMap) {\n    const weightIds = Object.keys(weightMap).map(\n        key => weightMap[key].map(tensor => tensor.id));\n    this.weightIds = [].concat(...weightIds);\n    this._weightMap = weightMap;\n  }\n\n  get inputs(): TensorInfo[] {\n    return this._inputs.map(node => {\n      return {\n        name: node.name,\n        shape: node.attrParams['shape'] ?\n            node.attrParams['shape'].value as number[] :\n            undefined,\n        dtype: node.attrParams['dtype'] ?\n            node.attrParams['dtype'].value as DataType :\n            undefined\n      };\n    });\n  }\n\n  get outputs(): TensorInfo[] {\n    return this._outputs.map(node => {\n      return {\n        name: node.name,\n        shape: node.attrParams['shape'] ?\n            node.attrParams['shape'].value as number[] :\n            undefined,\n        dtype: node.attrParams['dtype'] ?\n            node.attrParams['dtype'].value as DataType :\n            undefined\n      };\n    });\n  }\n\n  get inputNodes(): string[] {\n    return this._inputs.map(node => node.signatureKey || node.name);\n  }\n\n  get outputNodes(): string[] {\n    return this._outputs.map(node => node.signatureKey || node.name);\n  }\n\n  constructor(private graph: Graph) {\n    this._outputs = graph.outputs;\n    this._inputs = graph.inputs;\n    this._signature = graph.signature;\n  }\n\n  private getCompilationKey(inputs: Node[], outputs: Node[]): string {\n    const sortedInputs = inputs.map(node => node.name).sort();\n    const sortedOutputs = outputs.map(node => node.name).sort();\n    return sortedInputs.join(this.SEPERATOR) + '--' +\n        sortedOutputs.join(this.SEPERATOR);\n  }\n\n  /**\n   * Compiles the inference graph and returns the minimal set of nodes that are\n   * required for execution, in the correct execution order.\n   */\n  private compile(inputs: NamedTensorMap, outputs: Node[]): Node[] {\n    const executionInfo = getExecutionSubgraph(inputs, outputs, this.weightMap);\n    const {missingInputs, dynamicNode, syncInputs} = executionInfo;\n    if (dynamicNode != null) {\n      throw new Error(\n          `This execution contains the node '${dynamicNode.name}', which has ` +\n          `the dynamic op '${dynamicNode.op}'. Please use ` +\n          `model.executeAsync() instead. Alternatively, to avoid the ` +\n          `dynamic ops, specify the inputs [${syncInputs}]`);\n    }\n\n    if (missingInputs.length > 0) {\n      const outNames = outputs.map(n => n.name);\n      const inNames = Object.keys(inputs);\n      throw new Error(\n          `Cannot compute the outputs [${outNames}] from the provided inputs ` +\n          `[${inNames}]. Missing the following inputs: [${missingInputs}]`);\n    }\n\n    return getNodesInTopologicalOrder(\n        this.graph, this.weightMap, executionInfo);\n  }\n\n  /**\n   * Executes the inference for given input tensors.\n   * @param inputs Tensor map for the model inputs, keyed by the input node\n   * names.\n   * @param outputs output node name from the Tensorflow model, if no outputs\n   * are specified, the default outputs of the model would be used. You can\n   * inspect intermediate nodes of the model by adding them to the outputs\n   * array.\n   */\n  execute(inputs: NamedTensorMap, outputs: string[]): Tensor[] {\n    inputs = this.mapInputs(inputs);\n    const names = Object.keys(inputs).sort();\n    this.checkInputs(inputs);\n    this.checkInputShapeAndType(inputs);\n    outputs = this.mapOutputs(outputs);\n    this.checkOutputs(outputs);\n    const inputNodes =\n        names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n    const outputNodes =\n        outputs.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n    const compilationKey = this.getCompilationKey(inputNodes, outputNodes);\n    // Do nothing if the compiled graph cache contains the input.\n    let orderedNodes = this.compiledMap.get(compilationKey);\n    if (orderedNodes == null) {\n      orderedNodes = this.compile(inputs, outputNodes);\n      this.compiledMap.set(compilationKey, orderedNodes);\n    }\n    const tensorArrayMap: TensorArrayMap = {};\n    return tidy(() => {\n      const context = new ExecutionContext(this._weightMap, tensorArrayMap);\n      const tensorsMap: NamedTensorsMap = {...this.weightMap};\n      Object.keys(inputs).forEach(name => {\n        const [nodeName, index] = parseNodeName(name);\n        const tensors: Tensor[] = [];\n        tensors[index] = inputs[name];\n        tensorsMap[nodeName] = tensors;\n      });\n      const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n      const intermediateTensorConsumerCount: {[key: number]: number} = {};\n      for (let i = 0; i < orderedNodes.length; i++) {\n        const node = orderedNodes[i];\n        if (!tensorsMap[node.name]) {\n          const tensors = executeOp(node, tensorsMap, context) as Tensor[];\n          if (tensors instanceof Promise) {\n            throw new Error(\n                `The execution of the op '${node.op}' returned a promise. ` +\n                `Please use model.executeAsync() instead.`);\n          }\n          tensorsMap[node.name] = tensors;\n          this.checkTensorForDisposal(\n              node.name, node, tensorsMap, context, tensorsToKeep, outputs,\n              intermediateTensorConsumerCount);\n        }\n      }\n      return outputs.map(name => getTensor(name, tensorsMap, context));\n    });\n  }\n\n  private getFrozenTensorIds(tensorMap: NamedTensorsMap): Set<number> {\n    const ids = [].concat.apply(\n        [],\n        Object.keys(tensorMap)\n            .map(key => tensorMap[key])\n            .map(tensors => tensors.map(tensor => tensor.id)));\n    return new Set(ids);\n  }\n  private checkTensorForDisposal(\n      nodeName: string, node: Node, tensorMap: NamedTensorsMap,\n      context: ExecutionContext, tensorsToKeep: Set<number>,\n      outputNames: string[],\n      intermediateTensorConsumerCount: {[key: string]: number}) {\n    // Skip output nodes and any control flow nodes, since its dependency is\n    // tricky to track correctly.\n    if (node.category === 'control' || outputNames.indexOf(nodeName) !== -1) {\n      return;\n    }\n\n    tensorMap[nodeName].forEach(tensor => {\n      if (tensor != null) {\n        intermediateTensorConsumerCount[tensor.id] =\n            (intermediateTensorConsumerCount[tensor.id] || 0) +\n            node.children.length;\n      }\n    });\n    node.inputs.forEach(input => {\n      // Skip any control flow nodes, since its dependency is tricky to track\n      // correctly.\n      if (input.category !== 'control') {\n        const tensors =\n            getTensorsForCurrentContenxt(input.name, tensorMap, context);\n        if (tensors != null) {\n          tensors.forEach(tensor => {\n            if (tensor && !tensorsToKeep.has(tensor.id)) {\n              const count = intermediateTensorConsumerCount[tensor.id];\n              if (count === 1) {\n                tensor.dispose();\n                delete intermediateTensorConsumerCount[tensor.id];\n              } else if (count != null) {\n                // only intermediate nodes has count set, inputs and weights are\n                // not.\n                intermediateTensorConsumerCount[tensor.id]--;\n              }\n            }\n          });\n        }\n      }\n    });\n  }\n  /**\n   * Executes the inference for given input tensors in Async fashion.\n   * @param inputs Tensor map for the model inputs, keyed by the input node\n   * names.\n   * @param outputs output node name from the Tensorflow model, if no outputs\n   * are specified, the default outputs of the model would be used. You can\n   * inspect intermediate nodes of the model by adding them to the outputs\n   * array.\n   */\n  async executeAsync(inputs: NamedTensorMap, outputs: string[]):\n      Promise<Tensor[]> {\n    inputs = this.mapInputs(inputs);\n    this.checkInputs(inputs);\n    this.checkInputShapeAndType(inputs);\n    outputs = this.mapOutputs(outputs);\n    this.checkOutputs(outputs);\n    const tensorArrayMap: TensorArrayMap = {};\n    const context = new ExecutionContext(this._weightMap, tensorArrayMap);\n    // Graph with control flow op requires runtime evaluation of the execution\n    // order, while without control flow the execution order is pre-determined\n    // in the compile method.\n    const tensorMap =\n        await this.executeWithControlFlow(inputs, context, outputs);\n    const results = outputs.map(name => getTensor(name, tensorMap, context));\n\n    // dispose all the intermediate tensors\n    const outputIds = new Set<number>(results.map(t => t.id));\n    const inputIds =\n        new Set<number>(Object.keys(inputs).map(name => inputs[name].id));\n    Object.keys(tensorMap).forEach(key => {\n      const tensorArray = tensorMap[key];\n      tensorArray.forEach(tensor => {\n        if (tensor && !tensor.isDisposed && !outputIds.has(tensor.id) &&\n            !inputIds.has(tensor.id) &&\n            this.weightIds.indexOf(tensor.id) === -1) {\n          tensor.dispose();\n        }\n      });\n    });\n    return results;\n  }\n\n  /**\n   * When there are control flow nodes in the graph, the graph execution use\n   * ExecutionContext to keep track of the frames and loop iterators.\n   * @param inputs placeholder tensors for the graph.\n   * @param context the execution context object for current execution.\n   */\n  private async executeWithControlFlow(\n      inputs: NamedTensorMap, context: ExecutionContext,\n      outputNames: string[]): Promise<NamedTensorsMap> {\n    const names = Object.keys(inputs);\n    const inputNodes =\n        names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n    const outputNodes =\n        outputNames.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n    const {usedNodes, missingInputs, dynamicNode, syncInputs} =\n        getExecutionSubgraph(inputs, outputNodes, this.weightMap);\n\n    const stack: NodeWithContexts[] =\n        [...inputNodes, ...this.graph.weights].map(node => {\n          return {node, contexts: context.currentContext};\n        });\n    const tensorsMap: NamedTensorsMap = {...this.weightMap};\n    Object.keys(inputs).forEach(name => {\n      const [nodeName, index] = parseNodeName(name);\n      const tensors: Tensor[] = [];\n      tensors[index] = inputs[name];\n      tensorsMap[nodeName] = tensors;\n    });\n    const intermediateTensorConsumerCount: {[key: number]: number} = {};\n    const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n    const added: {[key: string]: boolean} = {};\n    while (stack.length > 0) {\n      const promises = this.processStack(\n          inputNodes, stack, context, tensorsMap, added, tensorsToKeep,\n          outputNames, intermediateTensorConsumerCount, usedNodes);\n      await Promise.all(promises);\n    }\n    if (dynamicNode == null) {\n      console.warn(\n          `This model execution did not contain any nodes with control flow ` +\n          `or dynamic output shapes. You can use model.execute() instead.`);\n    }\n    const missingOutputs =\n        outputNodes\n            .filter(\n                node => !isControlFlow(node) &&\n                    !getTensor(node.name, tensorsMap, context))\n            .map(node => node.name);\n    if (missingOutputs.length > 0) {\n      let alternativeMsg = '';\n      if (dynamicNode != null) {\n        alternativeMsg =\n            `Alternatively, to avoid the dynamic ops, use model.execute() ` +\n            `and specify the inputs [${syncInputs}]`;\n      }\n      throw new Error(\n          `Cannot compute the outputs [${missingOutputs}] from the provided ` +\n          `inputs [${names}]. Consider providing the following inputs: ` +\n          `[${missingInputs}]. ${alternativeMsg}`);\n    }\n    return tensorsMap;\n  }\n\n  private processStack(\n      inputNodes: Node[], stack: NodeWithContexts[], context: ExecutionContext,\n      tensorMap: NamedTensorsMap, added: {[key: string]: boolean},\n      tensorsToKeep: Set<number>, outputNames: string[],\n      intermediateTensorConsumerCount: {[key: number]: number},\n      usedNodes: Set<string>) {\n    const promises: Array<Promise<Tensor[]>> = [];\n    while (stack.length > 0) {\n      const item = stack.pop();\n      context.currentContext = item.contexts;\n      let nodeName = '';\n      // The tensor of the Enter op with isConstant set should be set\n      // in the parent scope, so it will be available as constant for the\n      // whole loop.\n      if (item.node.op === 'Enter' &&\n          getParamValue('isConstant', item.node, tensorMap, context)) {\n        [nodeName] = getNodeNameAndIndex(item.node.name, context);\n      }\n\n      // only process nodes that are not provided as input nodes.\n      if (inputNodes.indexOf(item.node) === -1) {\n        const tensors = executeOp(item.node, tensorMap, context);\n        if (!nodeName) {\n          [nodeName] = getNodeNameAndIndex(item.node.name, context);\n        }\n        const currentContext = context.currentContext;\n        if (tensors instanceof Promise) {\n          promises.push(tensors.then(t => {\n            tensorMap[nodeName] = t;\n            context.currentContext = currentContext;\n            this.checkTensorForDisposal(\n                nodeName, item.node, tensorMap, context, tensorsToKeep,\n                outputNames, intermediateTensorConsumerCount);\n            this.processChildNodes(\n                item.node, stack, context, tensorMap, added, usedNodes);\n            return t;\n          }));\n        } else {\n          tensorMap[nodeName] = tensors;\n          this.checkTensorForDisposal(\n              nodeName, item.node, tensorMap, context, tensorsToKeep,\n              outputNames, intermediateTensorConsumerCount);\n          this.processChildNodes(\n              item.node, stack, context, tensorMap, added, usedNodes);\n        }\n      } else {\n        this.processChildNodes(\n            item.node, stack, context, tensorMap, added, usedNodes);\n      }\n    }\n    return promises;\n  }\n\n  private processChildNodes(\n      node: Node, stack: NodeWithContexts[], context: ExecutionContext,\n      tensorMap: NamedTensorsMap, added: {[key: string]: boolean},\n      usedNodes: Set<string>) {\n    node.children.forEach((childNode) => {\n      const [nodeName, ] = getNodeNameAndIndex(childNode.name, context);\n      if (added[nodeName] || !usedNodes.has(childNode.name)) {\n        return;\n      }\n      // Merge op can be pushed if any of its inputs has value.\n      if (childNode.op === 'Merge') {\n        if (childNode.inputNames.some(name => {\n              return !!getTensor(name, tensorMap, context);\n            })) {\n          added[nodeName] = true;\n          stack.push({contexts: context.currentContext, node: childNode});\n        }\n      } else  // Otherwise all inputs must to have value.\n          if (childNode.inputNames.every(name => {\n                return !!getTensor(name, tensorMap, context);\n              })) {\n        added[nodeName] = true;\n        stack.push({contexts: context.currentContext, node: childNode});\n      }\n    });\n  }\n\n  /**\n   * Releases the memory used by the weight tensors.\n   */\n  dispose() {\n    Object.keys(this.weightMap)\n        .forEach(\n            key => this.weightMap[key].forEach(tensor => tensor.dispose()));\n  }\n\n  private checkInputShapeAndType(inputs: NamedTensorMap) {\n    Object.keys(inputs).forEach(name => {\n      const input = inputs[name];\n      const [nodeName, ] = parseNodeName(name);\n      const node = this.graph.nodes[nodeName];\n      if (node.attrParams['shape'] && node.attrParams['shape'].value) {\n        const shape = node.attrParams['shape'].value as number[];\n        const match = shape.length === input.shape.length &&\n            input.shape.every(\n                (dim, index) => shape[index] === -1 || shape[index] === dim);\n        util.assert(\n            match,\n            () => `The shape of dict['${node.name}'] provided in ` +\n                `model.execute(dict) must be [${shape}], but was ` +\n                `[${input.shape}]`);\n      }\n      if (node.attrParams['dtype'] && node.attrParams['dtype'].value) {\n        util.assert(\n            input.dtype === node.attrParams['dtype'].value as string,\n            () => `The dtype of dict['${node.name}'] provided in ` +\n                `model.execute(dict) must be ` +\n                `${node.attrParams['dtype'].value}, but was ${input.dtype}`);\n      }\n    });\n  }\n\n  private mapInputs(inputs: NamedTensorMap) {\n    const result: NamedTensorMap = {};\n    for (const inputName in inputs) {\n      if (this._signature != null && this._signature.inputs != null &&\n          this._signature.inputs[inputName] != null) {\n        const tensor = this._signature.inputs[inputName];\n        result[tensor.name] = inputs[inputName];\n      } else {\n        result[inputName] = inputs[inputName];\n      }\n    }\n    return result;\n  }\n\n  private checkInputs(inputs: NamedTensorMap) {\n    const notInGraph = Object.keys(inputs).filter(name => {\n      const [nodeName] = parseNodeName(name);\n      return this.graph.nodes[nodeName] == null;\n    });\n    if (notInGraph.length > 0) {\n      throw new Error(\n          `The dict provided in model.execute(dict) has ` +\n          `keys: [${notInGraph}] that are not part of graph`);\n    }\n  }\n\n  private mapOutputs(outputs: string[]) {\n    return outputs.map(name => {\n      if (this._signature != null && this._signature.outputs != null &&\n          this._signature.outputs[name] != null) {\n        const tensor = this._signature.outputs[name];\n        return tensor.name;\n      }\n      return name;\n    }, {});\n  }\n  private checkOutputs(outputs: string[]): void {\n    outputs.forEach(name => {\n      const [normalizedName] = parseNodeName(name);\n      if (!this.graph.nodes[normalizedName]) {\n        throw new Error(`The output '${name}' is not found in the graph`);\n      }\n    });\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {InferenceModel, io, ModelPredictConfig, NamedTensorMap, Tensor} from '@tensorflow/tfjs-core';\n\nimport * as tensorflow from '../data/compiled_api';\nimport {NamedTensorsMap, TensorInfo} from '../data/types';\nimport {OperationMapper} from '../operations/operation_mapper';\n\nimport {GraphExecutor} from './graph_executor';\n\nexport const TFHUB_SEARCH_PARAM = '?tfjs-format=file';\nexport const DEFAULT_MODEL_NAME = 'model.json';\n/**\n * A `tf.GraphModel` is a directed, acyclic graph of built from\n * SavedModel GraphDef and allows inference exeuction.\n *\n * A `tf.GraphModel` can only be created by loading from a model converted from\n * a [TensorFlow SavedModel](https://www.tensorflow.org/guide/saved_model) using\n * the command line converter tool and loaded via `tf.loadGraphModel`.\n */\n/** @doc {heading: 'Models', subheading: 'Classes'} */\nexport class GraphModel implements InferenceModel {\n  private executor: GraphExecutor;\n  private version = 'n/a';\n  private handler: io.IOHandler;\n  private artifacts: io.ModelArtifacts;\n  // Returns the version information for the tensorflow model GraphDef.\n  get modelVersion(): string {\n    return this.version;\n  }\n\n  get inputNodes(): string[] {\n    return this.executor.inputNodes;\n  }\n\n  get outputNodes(): string[] {\n    return this.executor.outputNodes;\n  }\n\n  get inputs(): TensorInfo[] {\n    return this.executor.inputs;\n  }\n\n  get outputs(): TensorInfo[] {\n    return this.executor.outputs;\n  }\n\n  get weights(): NamedTensorsMap {\n    return this.executor.weightMap;\n  }\n\n  /**\n   * @param modelUrl url for the model, or an `io.IOHandler`.\n   * @param weightManifestUrl url for the weight file generated by\n   * scripts/convert.py script.\n   * @param requestOption options for Request, which allows to send credentials\n   * and custom headers.\n   * @param onProgress Optional, progress callback function, fired periodically\n   * before the load is completed.\n   */\n  constructor(\n      private modelUrl: string|io.IOHandler,\n      private loadOptions: io.LoadOptions = {}) {\n    if (loadOptions == null) {\n      this.loadOptions = {};\n    }\n  }\n\n  private findIOHandler() {\n    const path = this.modelUrl;\n    if ((path as io.IOHandler).load != null) {\n      // Path is an IO Handler.\n      this.handler = path as io.IOHandler;\n    } else if (this.loadOptions.requestInit != null) {\n      this.handler = io.browserHTTPRequest(path as string, this.loadOptions);\n    } else {\n      const handlers =\n          io.getLoadHandlers(path as string, this.loadOptions.onProgress);\n      if (handlers.length === 0) {\n        // For backward compatibility: if no load handler can be found,\n        // assume it is a relative http path.\n        handlers.push(io.browserHTTPRequest(path as string, this.loadOptions));\n      } else if (handlers.length > 1) {\n        throw new Error(\n            `Found more than one (${handlers.length}) load handlers for ` +\n            `URL '${[path]}'`);\n      }\n      this.handler = handlers[0];\n    }\n  }\n\n  /**\n   * Loads the model and weight files, construct the in memory weight map and\n   * compile the inference graph.\n   */\n  async load(): Promise<boolean> {\n    this.findIOHandler();\n    if (this.handler.load == null) {\n      throw new Error(\n          'Cannot proceed with model loading because the IOHandler provided ' +\n          'does not have the `load` method implemented.');\n    }\n    this.artifacts = await this.handler.load();\n    const graph = this.artifacts.modelTopology as tensorflow.IGraphDef;\n    let signature = {};\n    if (this.artifacts.userDefinedMetadata != null) {\n      signature =  // tslint:disable-next-line:no-any\n          (this.artifacts.userDefinedMetadata as any).signature as\n          tensorflow.ISignatureDef;\n    }\n\n    this.version = `${graph.versions.producer}.${graph.versions.minConsumer}`;\n    const weightMap =\n        io.decodeWeights(this.artifacts.weightData, this.artifacts.weightSpecs);\n    this.executor = new GraphExecutor(\n        OperationMapper.Instance.transformGraph(graph, signature));\n    this.executor.weightMap = this.convertTensorMapToTensorsMap(weightMap);\n    return true;\n  }\n\n  /**\n   * Save the configuration and/or weights of the GraphModel.\n   *\n   * An `IOHandler` is an object that has a `save` method of the proper\n   * signature defined. The `save` method manages the storing or\n   * transmission of serialized data (\"artifacts\") that represent the\n   * model's topology and weights onto or via a specific medium, such as\n   * file downloads, local storage, IndexedDB in the web browser and HTTP\n   * requests to a server. TensorFlow.js provides `IOHandler`\n   * implementations for a number of frequently used saving mediums, such as\n   * `tf.io.browserDownloads` and `tf.io.browserLocalStorage`. See `tf.io`\n   * for more details.\n   *\n   * This method also allows you to refer to certain types of `IOHandler`s\n   * as URL-like string shortcuts, such as 'localstorage://' and\n   * 'indexeddb://'.\n   *\n   * Example 1: Save `model`'s topology and weights to browser [local\n   * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n   * then load it back.\n   *\n   * ```js\n   * const modelUrl =\n   *    'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n   * const model = await tf.loadGraphModel(modelUrl);\n   * const zeros = tf.zeros([1, 224, 224, 3]);\n   * model.predict(zeros).print();\n   *\n   * const saveResults = await model.save('localstorage://my-model-1');\n   *\n   * const loadedModel = await tf.loadGraphModel('localstorage://my-model-1');\n   * console.log('Prediction from loaded model:');\n   * model.predict(zeros).print();\n   * ```\n   *\n   * @param handlerOrURL An instance of `IOHandler` or a URL-like,\n   * scheme-based string shortcut for `IOHandler`.\n   * @param config Options for saving the model.\n   * @returns A `Promise` of `SaveResult`, which summarizes the result of\n   * the saving, such as byte sizes of the saved artifacts for the model's\n   *   topology and weight values.\n   */\n  /**\n   * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n   */\n  async save(handlerOrURL: io.IOHandler|string, config?: io.SaveConfig):\n      Promise<io.SaveResult> {\n    if (typeof handlerOrURL === 'string') {\n      const handlers = io.getSaveHandlers(handlerOrURL);\n      if (handlers.length === 0) {\n        throw new Error(\n            `Cannot find any save handlers for URL '${handlerOrURL}'`);\n      } else if (handlers.length > 1) {\n        throw new Error(\n            `Found more than one (${handlers.length}) save handlers for ` +\n            `URL '${handlerOrURL}'`);\n      }\n      handlerOrURL = handlers[0];\n    }\n    if (handlerOrURL.save == null) {\n      throw new Error(\n          'GraphModel.save() cannot proceed because the IOHandler ' +\n          'provided does not have the `save` attribute defined.');\n    }\n\n    return handlerOrURL.save(this.artifacts);\n  }\n\n  /**\n   * Execute the inference for the input tensors.\n   *\n   * @param input The input tensors, when there is single input for the model,\n   * inputs param should be a `tf.Tensor`. For models with mutliple inputs,\n   * inputs params should be in either `tf.Tensor`[] if the input order is\n   * fixed, or otherwise NamedTensorMap format.\n   *\n   * For model with multiple inputs, we recommend you use NamedTensorMap as the\n   * input type, if you use `tf.Tensor`[], the order of the array needs to\n   * follow the\n   * order of inputNodes array. @see {@link GraphModel.inputNodes}\n   *\n   * You can also feed any intermediate nodes using the NamedTensorMap as the\n   * input type. For example, given the graph\n   *    InputNode => Intermediate => OutputNode,\n   * you can execute the subgraph Intermediate => OutputNode by calling\n   *    model.execute('IntermediateNode' : tf.tensor(...));\n   *\n   * This is useful for models that uses tf.dynamic_rnn, where the intermediate\n   * state needs to be fed manually.\n   *\n   * For batch inference execution, the tensors for each input need to be\n   * concatenated together. For example with mobilenet, the required input shape\n   * is [1, 244, 244, 3], which represents the [batch, height, width, channel].\n   * If we are provide a batched data of 100 images, the input tensor should be\n   * in the shape of [100, 244, 244, 3].\n   *\n   * @param config Prediction configuration for specifying the batch size and\n   * output node names. Currently the batch size option is ignored for graph\n   * model.\n   *\n   * @returns Inference result tensors. The output would be single `tf.Tensor`\n   * if model has single output node, otherwise Tensor[] or NamedTensorMap[]\n   * will be returned for model with multiple outputs.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  predict(inputs: Tensor|Tensor[]|NamedTensorMap, config?: ModelPredictConfig):\n      Tensor|Tensor[]|NamedTensorMap {\n    return this.execute(inputs, this.outputNodes);\n  }\n\n  private normalizeInputs(inputs: Tensor|Tensor[]|\n                          NamedTensorMap): NamedTensorMap {\n    if (!(inputs instanceof Tensor) && !Array.isArray(inputs)) {\n      // The input is already a NamedTensorMap.\n      return inputs;\n    }\n    inputs = Array.isArray(inputs) ? inputs : [inputs];\n    if (inputs.length !== this.inputNodes.length) {\n      throw new Error(\n          'Input tensor count mismatch,' +\n          `the graph model has ${this.inputNodes.length} placeholders, ` +\n          `while there are ${inputs.length} input tensors.`);\n    }\n    return this.inputNodes.reduce((map, inputName, i) => {\n      map[inputName] = (inputs as Tensor[])[i];\n      return map;\n    }, {} as NamedTensorMap);\n  }\n\n  private normalizeOutputs(outputs: string|string[]): string[] {\n    outputs = outputs || this.outputNodes;\n    return !Array.isArray(outputs) ? [outputs] : outputs;\n  }\n\n  /**\n   * Executes inference for the model for given input tensors.\n   * @param inputs tensor, tensor array or tensor map of the inputs for the\n   * model, keyed by the input node names.\n   * @param outputs output node name from the Tensorflow model, if no\n   * outputs are specified, the default outputs of the model would be used.\n   * You can inspect intermediate nodes of the model by adding them to the\n   * outputs array.\n   *\n   * @returns A single tensor if provided with a single output or no outputs\n   * are provided and there is only one default output, otherwise return a\n   * tensor array. The order of the tensor array is the same as the outputs\n   * if provided, otherwise the order of outputNodes attribute of the model.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  execute(inputs: Tensor|Tensor[]|NamedTensorMap, outputs?: string|string[]):\n      Tensor|Tensor[] {\n    inputs = this.normalizeInputs(inputs);\n    outputs = this.normalizeOutputs(outputs);\n    const result = this.executor.execute(inputs, outputs);\n    return result.length > 1 ? result : result[0];\n  }\n  /**\n   * Executes inference for the model for given input tensors in async\n   * fashion, use this method when your model contains control flow ops.\n   * @param inputs tensor, tensor array or tensor map of the inputs for the\n   * model, keyed by the input node names.\n   * @param outputs output node name from the Tensorflow model, if no outputs\n   * are specified, the default outputs of the model would be used. You can\n   * inspect intermediate nodes of the model by adding them to the outputs\n   * array.\n   *\n   * @returns A Promise of single tensor if provided with a single output or\n   * no outputs are provided and there is only one default output, otherwise\n   * return a tensor map.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  async executeAsync(\n      inputs: Tensor|Tensor[]|NamedTensorMap,\n      outputs?: string|string[]): Promise<Tensor|Tensor[]> {\n    inputs = this.normalizeInputs(inputs);\n    outputs = this.normalizeOutputs(outputs);\n    const result = await this.executor.executeAsync(inputs, outputs);\n    return result.length > 1 ? result : result[0];\n  }\n\n  private convertTensorMapToTensorsMap(map: NamedTensorMap): NamedTensorsMap {\n    return Object.keys(map).reduce((newMap: NamedTensorsMap, key) => {\n      newMap[key] = [map[key]];\n      return newMap;\n    }, {});\n  }\n\n  /**\n   * Releases the memory used by the weight tensors.\n   */\n  /** @doc {heading: 'Models', subheading: 'Classes'} */\n  dispose() {\n    this.executor.dispose();\n  }\n}\n\n/**\n * Load a graph model given a URL to the model definition.\n *\n * Example of loading MobileNetV2 from a URL and making a prediction with a\n * zeros input:\n *\n * ```js\n * const modelUrl =\n *    'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n * const model = await tf.loadGraphModel(modelUrl);\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n *\n * Example of loading MobileNetV2 from a TF Hub URL and making a prediction with\n * a zeros input:\n *\n * ```js\n * const modelUrl =\n *    'https://tfhub.dev/google/imagenet/mobilenet_v2_140_224/classification/2';\n * const model = await tf.loadGraphModel(modelUrl, {fromTFHub: true});\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n * @param modelUrl The url or an `io.IOHandler` that loads the model.\n * @param options Options for the HTTP request, which allows to send credentials\n *    and custom headers.\n */\n/** @doc {heading: 'Models', subheading: 'Loading'} */\nexport async function loadGraphModel(\n    modelUrl: string|io.IOHandler,\n    options: io.LoadOptions = {}): Promise<GraphModel> {\n  if (modelUrl == null) {\n    throw new Error(\n        'modelUrl in loadGraphModel() cannot be null. Please provide a url ' +\n        'or an IOHandler that loads the model');\n  }\n  if (options == null) {\n    options = {};\n  }\n\n  if (options.fromTFHub) {\n    if ((modelUrl as io.IOHandler).load == null) {\n      if (!(modelUrl as string).endsWith('/')) {\n        modelUrl = (modelUrl as string) + '/';\n      }\n      modelUrl = `${modelUrl}${DEFAULT_MODEL_NAME}${TFHUB_SEARCH_PARAM}`;\n    }\n  }\n  const model = new GraphModel(modelUrl, options);\n  await model.load();\n  return model;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs-core';\n\n// tslint:disable:no-any\n\n/**\n * A return value for a mapping function that can be applied via deepMap.\n *\n * If recurse is true, the value should be empty, and iteration will continue\n * into the object or array.\n */\nexport type DeepMapResult = {\n  value: any,\n  recurse: boolean\n};\n\n/**\n * Apply a mapping function to a nested structure in a recursive manner.\n *\n * The result of the mapping is an object with the same nested structure (i.e.,\n * of arrays and dicts) as the input, except that some subtrees are replaced,\n * according to the results of the mapping function.\n *\n * Mappings are memoized.  Thus, if the nested structure contains the same\n * object in multiple positions, the output will contain the same mapped object\n * in those positions.  Cycles are not supported, however.\n *\n * @param input: The object to which to apply the mapping function.\n * @param mapFn: A function that expects a single node of the object tree, and\n *   returns a `DeepMapResult`.  The `DeepMapResult` either provides a\n *   replacement value for that node (i.e., replacing the subtree), or indicates\n *   that the node should be processed recursively.\n */\nexport function deepMap(input: any, mapFn: (x: any) => DeepMapResult): any|\n    any[] {\n  return deepMapInternal(input, mapFn);\n}\n\n/**\n * @param seen: A Map of known object mappings (i.e., memoized results of\n *   `mapFn()`)\n * @param containedIn: An set containing objects on the reference path currently\n *   being processed (used to detect cycles).\n */\nfunction deepMapInternal(\n    input: any, mapFn: (x: any) => DeepMapResult,\n    seen: Map<any, any> = new Map(), containedIn: Set<{}> = new Set()): any|\n    any[] {\n  if (input == null) {\n    return null;\n  }\n  if (containedIn.has(input)) {\n    throw new Error('Circular references are not supported.');\n  }\n  if (seen.has(input)) {\n    return seen.get(input);\n  }\n  const result = mapFn(input);\n\n  if (result.recurse && result.value !== null) {\n    throw new Error(\n        'A deep map function may not return both a value and recurse=true.');\n  }\n\n  if (!result.recurse) {\n    seen.set(input, result.value);\n    return result.value;\n  } else if (isIterable(input)) {\n    // tslint:disable-next-line:no-any\n    const mappedIterable: any|any[] = Array.isArray(input) ? [] : {};\n    containedIn.add(input);\n    for (const k in input) {\n      const child = input[k];\n      const childResult = deepMapInternal(child, mapFn, seen, containedIn);\n      mappedIterable[k] = childResult;\n    }\n    containedIn.delete(input);\n    return mappedIterable;\n  } else {\n    throw new Error(`Can't recurse into non-iterable type: ${input}`);\n  }\n}\n\n// TODO(soergel, kangyizhang) Reconsider naming of deepZip() to avoid confusion\n// with zip()\n\n/**\n * Zip nested structures together in a recursive manner.\n *\n * This has the effect of transposing or pivoting data, e.g. converting it from\n * a row-major representation to a column-major representation.\n *\n * For example, `deepZip([{a: 1, b: 2}, {a: 3, b: 4}])` returns\n * `{a: [1, 3], b: [2, 4]}`.\n *\n * The inputs should all have the same nested structure (i.e., of arrays and\n * dicts).  The result is a single object with the same nested structure, where\n * the leaves are arrays collecting the values of the inputs at that location\n * (or, optionally, the result of a custom function applied to those arrays).\n *\n * @param inputs: An array of the objects to zip together.\n * @param zipFn: (optional) A function that expects an array of elements at a\n *   single node of the object tree, and returns a `DeepMapResult`.  The\n *   `DeepMapResult` either provides a result value for that node (i.e.,\n *   representing the subtree), or indicates that the node should be processed\n *   recursively.  The default zipFn recurses as far as possible and places\n *   arrays at the leaves.\n */\nexport function deepZip(\n    inputs: any[], zipFn: (xs: any[]) => DeepMapResult = zipToList): any|any[] {\n  return deepZipInternal(inputs, zipFn);\n}\n\n/**\n * @param containedIn: An set containing objects on the reference path currently\n *   being processed (used to detect cycles).\n */\nfunction deepZipInternal(\n    inputs: any[], zipFn: (xs: any[]) => DeepMapResult,\n    containedIn: Set<{}> = new Set()): any|any[] {\n  // The recursion follows the structure of input 0; it's assumed that all the\n  // other inputs have the same structure.\n  const input = inputs[0];\n  if (containedIn.has(input)) {\n    throw new Error('Circular references are not supported.');\n  }\n  const result = zipFn(inputs);\n\n  if (result.recurse && result.value !== null) {\n    throw new Error(\n        'A deep zip function may not return both a value and recurse=true.');\n  }\n\n  if (!result.recurse) {\n    return result.value;\n  } else if (isIterable(input)) {\n    // tslint:disable-next-line:no-any\n    const mappedIterable: any|any[] = Array.isArray(input) ? [] : {};\n    containedIn.add(input);\n    for (const k in input) {\n      const children = inputs.map(x => x[k]);\n      const childResult = deepZipInternal(children, zipFn, containedIn);\n      mappedIterable[k] = childResult;\n    }\n    containedIn.delete(input);\n    return mappedIterable;\n  } else {\n    throw new Error(`Can't recurse into non-iterable type: ${input}`);\n  }\n}\n\n// tslint:disable-next-line:no-any\nexport function zipToList(x: any[]): DeepMapResult {\n  if (x === null) {\n    return null;\n  }\n  // TODO(soergel): validate array type?\n\n  if (isIterable(x[0])) {\n    return {value: null, recurse: true};\n  } else {\n    return {value: x, recurse: false};\n  }\n}\n\n/**\n * A return value for an async map function for use with deepMapAndAwaitAll.\n *\n * If recurse is true, the value should be empty, and iteration will continue\n * into the object or array.\n */\nexport type DeepMapAsyncResult = {\n  value: Promise<any>,\n  recurse: boolean\n};\n\n/**\n * Apply an async mapping function to a nested structure in a recursive manner.\n *\n * This first creates a nested structure of Promises, and then awaits all of\n * those, resulting in a single Promise for a resolved nested structure.\n *\n * The result of the mapping is an object with the same nested structure (i.e.,\n * of arrays and dicts) as the input, except that some subtrees are replaced,\n * according to the results of the mapping function.\n *\n * Mappings are memoized.  Thus, if the nested structure contains the same\n * object in multiple positions, the output will contain the same mapped object\n * in those positions.  Cycles are not supported, however.\n *\n * @param input: The object to which to apply the mapping function.\n * @param mapFn: A function that expects a single node of the object tree, and\n *   returns a `DeepMapAsyncResult`.  The `DeepMapAsyncResult` either provides\n *   a `Promise` for a replacement value for that node (i.e., replacing the\n *   subtree), or indicates that the node should be processed recursively.  Note\n *   that the decision whether or not to recurse must be made immediately; only\n *   the mapped value may be promised.\n */\nexport async function deepMapAndAwaitAll(\n    input: any, mapFn: (x: any) => DeepMapAsyncResult): Promise<any|any[]> {\n  const seen: Map<any, Promise<any>> = new Map();\n\n  // First do a normal deepMap, collecting Promises in 'seen' as a side effect.\n  deepMapInternal(input, mapFn, seen);\n\n  // Replace the Promises in 'seen' in place.\n  // Note TypeScript provides no async map iteration, and regular map iteration\n  // is broken too, so sadly we have to do Array.from() to make it work.\n  // (There's no advantage to Promise.all(), and that would be tricky anyway.)\n  for (const key of Array.from(seen.keys())) {\n    const value = seen.get(key);\n    if (value instanceof Promise) {\n      const mappedValue = await value;\n      seen.set(key, mappedValue);\n    }\n  }\n\n  // Normal deepMap again, this time filling in the resolved values.\n  // It's unfortunate that we have to do two passes.\n  // TODO(soergel): test performance and think harder about a fast solution.\n  const result = deepMapInternal(input, mapFn, seen);\n  return result;\n}\n\n/**\n * Determine whether the argument is iterable.\n *\n * @returns true if the argument is an array or any non-Tensor object.\n */\n// tslint:disable-next-line:no-any\nexport function isIterable(obj: any): boolean {\n  return obj != null && (!ArrayBuffer.isView(obj)) &&\n      (Array.isArray(obj) ||\n       (typeof obj === 'object' && !(obj instanceof tf.Tensor)));\n}\n\n/**\n * Determine whether the argument can be converted to Tensor.\n *\n * Tensors, primitives, arrays, and TypedArrays all qualify; anything else does\n * not.\n *\n * @returns true if the argument can be converted to Tensor.\n */\n// tslint:disable-next-line:no-any\nexport function canTensorify(obj: any): boolean {\n  return obj == null || isPrimitive(obj) || Array.isArray(obj) ||\n      (typeof obj === 'object' && (obj instanceof tf.Tensor)) ||\n      tf.util.isTypedArray(obj);\n}\n\n/**\n * Returns true if the given `value` is a primitive type. Otherwise returns\n * false. This is equivalant to node util.isPrimitive\n */\nfunction isPrimitive(value: any): boolean {\n  return (\n      value === null ||\n      (typeof value !== 'object' && typeof value !== 'function'));\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs-core';\nimport {deepMap, DeepMapResult, isIterable} from './deep_map';\n\nexport function deepClone<T>(container: T): T {\n  return deepMap(container, cloneIfTensor);\n}\n\n// tslint:disable-next-line: no-any\nfunction cloneIfTensor(item: any): DeepMapResult {\n  if (item instanceof tf.Tensor) {\n    return ({value: item.clone(), recurse: false});\n  } else if (isIterable(item)) {\n    return {value: null, recurse: true};\n  } else {\n    return {value: item, recurse: false};\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\n/**\n * A ring buffer, providing O(1) FIFO, LIFO, and related operations.\n */\nexport class RingBuffer<T> {\n  // Note we store the indices in the range 0 <= index < 2*capacity.\n  // This allows us to distinguish the full from the empty case.\n  // See https://www.snellman.net/blog/archive/2016-12-13-ring-buffers/\n  protected begin = 0;  // inclusive\n  protected end = 0;    // exclusive\n  protected doubledCapacity: number;\n\n  protected data: T[];\n\n  /**\n   * Constructs a `RingBuffer`.\n   * @param capacity The number of items that the buffer can accomodate.\n   */\n  constructor(public capacity: number) {\n    if (capacity == null) {\n      throw new RangeError('Can\\'t create a ring buffer of unknown capacity.');\n    }\n    if (capacity < 1) {\n      throw new RangeError('Can\\'t create ring buffer of capacity < 1.');\n    }\n    this.data = new Array<T>(capacity);\n    this.doubledCapacity = 2 * capacity;\n  }\n\n  /**\n   * Map any index into the range 0 <= index < 2*capacity.\n   */\n  protected wrap(index: number) {\n    // don't trust % on negative numbers\n    while (index < 0) {\n      index += this.doubledCapacity;\n    }\n    return index % this.doubledCapacity;\n  }\n\n  protected get(index: number) {\n    if (index < 0) {\n      throw new RangeError('Can\\'t get item at a negative index.');\n    }\n    return this.data[index % this.capacity];\n  }\n\n  protected set(index: number, value: T) {\n    if (index < 0) {\n      throw new RangeError('Can\\'t set item at a negative index.');\n    }\n    this.data[index % this.capacity] = value;\n  }\n\n  /**\n   * Returns the current number of items in the buffer.\n   */\n  length(): number {\n    let length = this.end - this.begin;\n    if (length < 0) {\n      length = this.doubledCapacity + length;\n    }\n    return length;\n  }\n\n  /**\n   * Reports whether the buffer is full.\n   * @returns true if the number of items in the buffer equals its capacity, and\n   *   false otherwise.\n   */\n  isFull() {\n    return this.length() === this.capacity;\n  }\n\n  /**\n   * Reports whether the buffer is empty.\n   * @returns true if the number of items in the buffer equals zero, and\n   *   false otherwise.\n   */\n  isEmpty() {\n    return this.length() === 0;\n  }\n\n  /**\n   * Adds an item to the end of the buffer.\n   */\n  push(value: T) {\n    if (this.isFull()) {\n      throw new RangeError('Ring buffer is full.');\n    }\n    this.set(this.end, value);\n    this.end = this.wrap(this.end + 1);\n  }\n\n  /**\n   * Adds many items to the end of the buffer, in order.\n   */\n  pushAll(values: T[]) {\n    for (const value of values) {\n      this.push(value);\n    }\n  }\n\n  /**\n   * Removes and returns the last item in the buffer.\n   */\n  pop(): T {\n    if (this.isEmpty()) {\n      throw new RangeError('Ring buffer is empty.');\n    }\n    this.end = this.wrap(this.end - 1);\n    const result = this.get(this.end);\n    this.set(this.end, undefined);\n    return result;\n  }\n\n  /**\n   * Adds an item to the beginning of the buffer.\n   */\n  unshift(value: T) {\n    if (this.isFull()) {\n      throw new RangeError('Ring buffer is full.');\n    }\n    this.begin = this.wrap(this.begin - 1);\n    this.set(this.begin, value);\n  }\n\n  /**\n   * Removes and returns the first item in the buffer.\n   */\n  shift(): T {\n    if (this.isEmpty()) {\n      throw new RangeError('Ring buffer is empty.');\n    }\n    const result = this.get(this.begin);\n    this.set(this.begin, undefined);\n    this.begin = this.wrap(this.begin + 1);\n    return result;\n  }\n\n  /**\n   * Removes and returns a specific item in the buffer, and moves the last item\n   * to the vacated slot.  This is useful for implementing a shuffling stream.\n   * Note that this operation necessarily scrambles the original order.\n   *\n   * @param relativeIndex: the index of the item to remove, relative to the\n   *   first item in the buffer (e.g., hiding the ring nature of the underlying\n   *   storage).\n   */\n  shuffleExcise(relativeIndex: number): T {\n    if (this.isEmpty()) {\n      throw new RangeError('Ring buffer is empty.');\n    }\n    const index = this.wrap(this.begin + relativeIndex);\n    const result = this.get(index);\n    this.set(index, this.pop());\n    return result;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {RingBuffer} from './ring_buffer';\n\nexport class GrowingRingBuffer<T> extends RingBuffer<T> {\n  private static INITIAL_CAPACITY = 32;\n\n  /**\n   * Constructs a `GrowingRingBuffer`.\n   */\n  constructor() {\n    super(GrowingRingBuffer.INITIAL_CAPACITY);\n  }\n\n  isFull() {\n    return false;\n  }\n\n  push(value: T) {\n    if (super.isFull()) {\n      this.expand();\n    }\n    super.push(value);\n  }\n\n  unshift(value: T) {\n    if (super.isFull()) {\n      this.expand();\n    }\n    super.unshift(value);\n  }\n\n  /**\n   * Doubles the capacity of the buffer.\n   */\n  private expand() {\n    const newCapacity = this.capacity * 2;\n    const newData = new Array<T>(newCapacity);\n    const len = this.length();\n\n    // Rotate the buffer to start at index 0 again, since we can't just\n    // allocate more space at the end.\n    for (let i = 0; i < len; i++) {\n      newData[i] = this.get(this.wrap(this.begin + i));\n    }\n\n    this.data = newData;\n    this.capacity = newCapacity;\n    this.doubledCapacity = 2 * this.capacity;\n    this.begin = 0;\n    this.end = len;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs-core';\nimport * as seedrandom from 'seedrandom';\n\nimport {Container, DataElement} from '../types';\nimport {deepClone} from '../util/deep_clone';\nimport {deepMapAndAwaitAll, DeepMapAsyncResult, DeepMapResult, deepZip, zipToList} from '../util/deep_map';\nimport {GrowingRingBuffer} from '../util/growing_ring_buffer';\nimport {RingBuffer} from '../util/ring_buffer';\n\n/**\n * A nested structure of LazyIterators, used as the input to zip().\n */\nexport type IteratorContainer = Container<LazyIterator<DataElement>>;\n\n// Here we implement a simple asynchronous iterator.\n// This lets us avoid using either third-party stream libraries or\n// recent TypeScript language support requiring polyfills.\n\n/**\n * Create a `LazyIterator` from an array of items.\n */\nexport function iteratorFromItems<T>(items: T[]): LazyIterator<T> {\n  return new ArrayIterator(items);\n}\n\n/**\n * Create a `LazyIterator` of incrementing integers.\n */\nexport function iteratorFromIncrementing(start: number): LazyIterator<number> {\n  let i = start;\n  return iteratorFromFunction(() => ({value: i++, done: false}));\n}\n\n/**\n * Create a `LazyIterator` from a function.\n *\n * ```js\n * let i = -1;\n * const func = () =>\n *    ++i < 5 ? {value: i, done: false} : {value: null, done: true};\n * const iter = tf.data.iteratorFromFunction(func);\n * await iter.forEachAsync(e => console.log(e));\n * ```\n *\n * @param func A function that produces data on each call.\n */\nexport function iteratorFromFunction<T>(\n    func: () =>\n        IteratorResult<T>| Promise<IteratorResult<T>>): LazyIterator<T> {\n  return new FunctionCallIterator(func);\n}\n\n/**\n * Create a `LazyIterator` by concatenating underlying streams, which are\n * themselves provided as a stream.\n *\n * This can also be thought of as a \"stream flatten\" operation.\n *\n * @param baseIterators A stream of streams to be concatenated.\n * @param baseErrorHandler An optional function that can intercept `Error`s\n *   raised during a `next()` call on the base stream.  This function can decide\n *   whether the error should be propagated, whether the error should be\n *   ignored, or whether the base stream should be terminated.\n */\nexport function iteratorFromConcatenated<T>(\n    baseIterators: LazyIterator<LazyIterator<T>>,\n    baseErrorHandler?: (e: Error) => boolean): LazyIterator<T> {\n  return new ChainedIterator(baseIterators, baseErrorHandler);\n}\n\n/**\n * Create a `LazyIterator` by concatenating streams produced by calling a\n * stream-generating function a given number of times.\n *\n * Since a `LazyIterator` is read-once, it cannot be repeated, but this\n * function can be used to achieve a similar effect:\n *\n *   LazyIterator.ofConcatenatedFunction(() => new MyIterator(), 6);\n *\n * @param iteratorFunc: A function that produces a new stream on each call.\n * @param count: The number of times to call the function.\n * @param baseErrorHandler An optional function that can intercept `Error`s\n *   raised during a `next()` call on the base stream.  This function can decide\n *   whether the error should be propagated, whether the error should be\n *   ignored, or whether the base stream should be terminated.\n */\nexport function iteratorFromConcatenatedFunction<T>(\n    iteratorFunc: () => IteratorResult<LazyIterator<T>>, count: number,\n    baseErrorHandler?: (e: Error) => boolean): LazyIterator<T> {\n  return iteratorFromConcatenated(\n      iteratorFromFunction(iteratorFunc).take(count), baseErrorHandler);\n}\n\n/**\n * Create a `LazyIterator` by zipping together an array, dict, or nested\n * structure of `LazyIterator`s (and perhaps additional constants).\n *\n * The underlying streams must provide elements in a consistent order such\n * that they correspond.\n *\n * Typically, the underlying streams should have the same number of\n * elements. If they do not, the behavior is determined by the\n * `mismatchMode` argument.\n *\n * The nested structure of the `iterators` argument determines the\n * structure of elements in the resulting iterator.\n *\n * @param iterators: An array or object containing LazyIterators at the\n * leaves.\n * @param mismatchMode: Determines what to do when one underlying iterator\n * is exhausted before the others.  `ZipMismatchMode.FAIL` (the default)\n * causes an error to be thrown in this case.  `ZipMismatchMode.SHORTEST`\n * causes the zipped iterator to terminate with the furst underlying\n * streams, so elements remaining on the longer streams are ignored.\n * `ZipMismatchMode.LONGEST` causes the zipped stream to continue, filling\n * in nulls for the exhausted streams, until all streams are exhausted.\n */\nexport function iteratorFromZipped<O extends tf.TensorContainer>(\n    iterators: IteratorContainer,\n    mismatchMode: ZipMismatchMode = ZipMismatchMode.FAIL): LazyIterator<O> {\n  return new ZipIterator<O>(iterators, mismatchMode);\n}\n\n/**\n * An asynchronous iterator, providing lazy access to a potentially\n * unbounded stream of elements.\n *\n * Iterator can be obtained from a dataset:\n * `const iter = await dataset.iterator();`\n */\nexport abstract class LazyIterator<T> {\n  // This class implements AsyncIterator<T>, but we have not yet set the\n  // TypeScript --downlevelIteration flag to enable that.\n\n  abstract summary(): string;\n\n  /**\n   * Returns a `Promise` for the next element in the stream.\n   *\n   * When an item can be provided successfully, the return value is\n   * `{value:T, done:false}`.\n   *\n   * Calling next() on a closed stream returns `{value:null, done:true}`.\n   */\n  abstract async next(): Promise<IteratorResult<T>>;\n\n  /**\n   * Collect all remaining elements of a bounded stream into an array.\n   * Obviously this will succeed only for small streams that fit in memory.\n   * Useful for testing.\n   *\n   * @returns A Promise for an array of stream elements, which will resolve\n   *   when the stream is exhausted.\n   */\n  async toArray(): Promise<T[]> {\n    const result: T[] = [];\n    let x = await this.next();\n    while (!x.done) {\n      result.push(x.value);\n      x = await this.next();\n    }\n    return result;\n  }\n\n  /**\n   * Collect all elements of this dataset into an array with prefetching 100\n   * elements. This is useful for testing, because the prefetch changes the\n   * order in which the Promises are resolved along the processing pipeline.\n   * This may help expose bugs where results are dependent on the order of\n   * Promise resolution rather than on the logical order of the stream (i.e.,\n   * due to hidden mutable state).\n   *\n   * @returns A Promise for an array of stream elements, which will resolve\n   *   when the stream is exhausted.\n   */\n  async toArrayForTest(): Promise<T[]> {\n    const stream = this.prefetch(100);\n    const result: T[] = [];\n    let x = await stream.next();\n    while (!x.done) {\n      result.push(x.value);\n      x = await stream.next();\n    }\n    return result;\n  }\n\n  /**\n   * Draw items from the stream until it is exhausted.\n   *\n   * This can be useful when the stream has side effects but no output.  In\n   * that case, calling this function guarantees that the stream will be\n   * fully processed.\n   */\n  async resolveFully(): Promise<void> {\n    let x = await this.next();\n    while (!x.done) {\n      x = await this.next();\n    }\n  }\n\n  /**\n   * Draw items from the stream until it is exhausted, or a predicate fails.\n   *\n   * This can be useful when the stream has side effects but no output.  In\n   * that case, calling this function guarantees that the stream will be\n   * fully processed.\n   */\n  async resolveWhile(predicate: (r: T) => boolean): Promise<void> {\n    let x = await this.next();\n    let shouldContinue = predicate(x.value);\n    while ((!x.done) && shouldContinue) {\n      x = await this.next();\n      shouldContinue = predicate(x.value);\n    }\n  }\n\n  /**\n   * Handles errors thrown on this stream using a provided handler function.\n   *\n   * @param handler A function that handles any `Error` thrown during a `next()`\n   *   call and returns true if the stream should continue (dropping the failed\n   *   call) or false if the stream should quietly terminate.  If the handler\n   *   itself throws (or rethrows) an `Error`, that will be propagated.\n   *\n   * @returns A `LazyIterator` of elements passed through from upstream,\n   *   possibly filtering or terminating on upstream `next()` calls that\n   *   throw an `Error`.\n   */\n  handleErrors(handler: (error: Error) => boolean): LazyIterator<T> {\n    return new ErrorHandlingLazyIterator(this, handler);\n  }\n\n  // TODO(soergel): Implement reduce() etc.\n\n  /**\n   * Filters this stream according to `predicate`.\n   *\n   * @param predicate A function mapping a stream element to a boolean or a\n   * `Promise` for one.\n   *\n   * @returns A `LazyIterator` of elements for which the predicate was true.\n   */\n  filter(predicate: (value: T) => boolean): LazyIterator<T> {\n    return new FilterIterator(this, predicate);\n  }\n\n  /**\n   * Maps this stream through a 1-to-1 transform.\n   *\n   * @param transform A function mapping a stream element to a transformed\n   *   element.\n   *\n   * @returns A `LazyIterator` of transformed elements.\n   */\n  map<O>(transform: (value: T) => O): LazyIterator<O> {\n    return new MapIterator(this, transform);\n  }\n\n  /**\n   * Maps this stream through an async 1-to-1 transform.\n   *\n   * @param transform A function mapping a stream element to a `Promise` for a\n   *   transformed stream element.\n   *\n   * @returns A `LazyIterator` of transformed elements.\n   */\n  mapAsync<O>(transform: (value: T) => Promise<O>): LazyIterator<O> {\n    return new AsyncMapIterator(this, transform);\n  }\n\n  /**\n   * Maps this stream through a 1-to-1 transform, forcing serial execution.\n   *\n   * @param transform A function mapping a stream element to a transformed\n   *   element.\n   *\n   * @returns A `LazyIterator` of transformed elements.\n   */\n  serialMapAsync<O>(transform: (value: T) => Promise<O>): LazyIterator<O> {\n    return new AsyncMapIterator(this, transform).serial();\n  }\n\n  /**\n   * Maps this stream through a 1-to-many transform.\n   *\n   * @param transform A function mapping a stream element to an array of\n   *   transformed elements.\n   *\n   * @returns A `DataStream` of transformed elements.\n   */\n  flatmap<O>(transform: (value: T) => O[]): LazyIterator<O> {\n    return new FlatmapIterator(this, transform);\n  }\n\n  /**\n   * Apply a function to every element of the stream.\n   *\n   * @param f A function to apply to each stream element.\n   */\n  async forEachAsync(f: (value: T) => void): Promise<void> {\n    return this.map(f).resolveFully();\n  }\n\n  /**\n   * Apply a function to every element of the stream, forcing serial execution.\n   *\n   * @param f A function to apply to each stream element.  Should return 'true'\n   *   to indicate that the stream should continue, or 'false' to cause it to\n   *   terminate.\n   */\n  async serialForEach(f: (value: T) => Promise<boolean>): Promise<void> {\n    return this.serialMapAsync(f).resolveWhile(x => (x === true));\n  }\n\n  /**\n   * Groups elements into batches, represented as arrays of elements.\n   *\n   * We can think of the elements of this iterator as 'rows' (even if they are\n   * nested structures).  By the same token, consecutive values for a given\n   * key within the elements form a 'column'.  This matches the usual sense of\n   * 'row' and 'column' when processing tabular data (e.g., parsing a CSV).\n   *\n   * Thus, \"Row-major\" means that the resulting batch is simply a collection of\n   * rows: `[row1, row2, row3, ...]`.  This is contrast to the column-major\n   * form, which is needed for vectorized computation.\n   *\n   * @param batchSize The number of elements desired per batch.\n   * @param smallLastBatch Whether to emit the final batch when it has fewer\n   *   than batchSize elements. Default true.\n   * @returns A `LazyIterator` of batches of elements, represented as arrays\n   *   of the original element type.\n   */\n  rowMajorBatch(batchSize: number, smallLastBatch = true): LazyIterator<T[]> {\n    return new RowMajorBatchIterator(this, batchSize, smallLastBatch);\n  }\n\n  /**\n   * Groups elements into batches, represented in column-major form.\n   *\n   * We can think of the elements of this iterator as 'rows' (even if they are\n   * nested structures).  By the same token, consecutive values for a given\n   * key within the elements form a 'column'.  This matches the usual sense of\n   * 'row' and 'column' when processing tabular data (e.g., parsing a CSV).\n   *\n   * Thus, \"column-major\" means that the resulting batch is a (potentially\n   * nested) structure representing the columns.  Each column entry, then,\n   * contains a collection of the values found in that column for a range of\n   * input elements.  This representation allows for vectorized computation, in\n   * contrast to the row-major form.\n   *\n   * The inputs should all have the same nested structure (i.e., of arrays and\n   * dicts).  The result is a single object with the same nested structure,\n   * where the leaves are arrays collecting the values of the inputs at that\n   * location (or, optionally, the result of a custom function applied to those\n   * arrays).\n   *\n   * @param batchSize The number of elements desired per batch.\n   * @param smallLastBatch Whether to emit the final batch when it has fewer\n   *   than batchSize elements. Default true.\n   * @param zipFn: (optional) A function that expects an array of elements at a\n   *   single node of the object tree, and returns a `DeepMapResult`.  The\n   *   `DeepMapResult` either provides a result value for that node (i.e.,\n   *   representing the subtree), or indicates that the node should be processed\n   *   recursively.  The default zipFn recurses as far as possible and places\n   *   arrays at the leaves.\n   * @returns A `LazyIterator` of batches of elements, represented as an object\n   *   with collections at the leaves.\n   */\n  columnMajorBatch(\n      batchSize: number, smallLastBatch = true,\n      // tslint:disable-next-line:no-any\n      zipFn: (xs: any[]) => DeepMapResult = zipToList):\n      LazyIterator<tf.TensorContainer> {\n    // First collect the desired number of input elements as a row-major batch.\n    const rowBatches = this.rowMajorBatch(batchSize, smallLastBatch);\n    // Now 'rotate' or 'pivot' the data, collecting all values from each column\n    // in the batch (i.e., for each key within the elements) into an array.\n    return rowBatches.map(x => deepZip(x, zipFn));\n  }\n\n  /**\n   * Concatenate this `LazyIterator` with another.\n   *\n   * @param iterator A `LazyIterator` to be concatenated onto this one.\n   * @param baseErrorHandler An optional function that can intercept `Error`s\n   *   raised during a `next()` call on the base stream.  This function can\n   *   decide whether the error should be propagated, whether the error should\n   *   be ignored, or whether the base stream should be terminated.\n   * @returns A `LazyIterator`.\n   */\n  concatenate(\n      iterator: LazyIterator<T>,\n      baseErrorHandler?: (e: Error) => boolean): LazyIterator<T> {\n    return new ChainedIterator(\n        iteratorFromItems([this, iterator]), baseErrorHandler);\n  }\n\n  /**\n   * Limits this stream to return at most `count` items.\n   *\n   * @param count The maximum number of items to provide from the stream. If\n   * a negative or undefined value is given, the entire stream is returned\n   *   unaltered.\n   */\n  take(count: number): LazyIterator<T> {\n    if (count < 0 || count == null) {\n      return this;\n    }\n    return new TakeIterator(this, count);\n  }\n\n  /**\n   * Skips the first `count` items in this stream.\n   *\n   * @param count The number of items to skip.  If a negative or undefined\n   * value is given, the entire stream is returned unaltered.\n   */\n  skip(count: number): LazyIterator<T> {\n    if (count < 0 || count == null) {\n      return this;\n    }\n    return new SkipIterator(this, count);\n  }\n\n  /**\n   * Prefetch the first `bufferSize` items in this stream.\n   *\n   * Note this prefetches Promises, but makes no guarantees about when those\n   * Promises resolve.\n   *\n   * @param bufferSize: An integer specifying the number of elements to be\n   *   prefetched.\n   */\n  prefetch(bufferSize: number): LazyIterator<T> {\n    return new PrefetchIterator(this, bufferSize);\n  }\n\n  // TODO(soergel): deep sharded shuffle, where supported\n\n  /**\n   * Randomly shuffles the elements of this stream.\n   *\n   * @param bufferSize: An integer specifying the number of elements from\n   * this stream from which the new stream will sample.\n   * @param seed: (Optional.) An integer specifying the random seed that\n   * will be used to create the distribution.\n   */\n  shuffle(windowSize: number, seed?: string): LazyIterator<T> {\n    return new ShuffleIterator(this, windowSize, seed);\n  }\n\n  /**\n   * Force an iterator to execute serially: each next() call will await the\n   * prior one, so that they cannot execute concurrently.\n   */\n  serial(): LazyIterator<T> {\n    return new SerialIterator(this);\n  }\n}\n\n// ============================================================================\n// The following private classes serve to implement the chainable methods\n// on LazyIterator.  Unfortunately they can't be placed in separate files,\n// due to resulting trouble with circular imports.\n// ============================================================================\n\n// Iterators that just extend LazyIterator directly\n// ============================================================================\n\nclass ArrayIterator<T> extends LazyIterator<T> {\n  private trav = 0;\n  constructor(protected items: T[]) {\n    super();\n  }\n\n  summary() {\n    return `Array of ${this.items.length} items`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    if (this.trav >= this.items.length) {\n      return {value: null, done: true};\n    }\n    const item = this.items[this.trav];\n    this.trav++;\n    return {value: deepClone(item), done: false};\n  }\n}\n\nclass FunctionCallIterator<T> extends LazyIterator<T> {\n  constructor(\n      protected nextFn: () => IteratorResult<T>| Promise<IteratorResult<T>>) {\n    super();\n  }\n\n  summary() {\n    return `Function call`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    try {\n      return this.nextFn();\n    } catch (e) {\n      // Modify the error message but leave the stack trace intact\n      e.message =\n          `Error thrown while iterating through a dataset: ${e.message}`;\n      throw e;\n    }\n  }\n}\n\nclass SerialIterator<T> extends LazyIterator<T> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  constructor(protected upstream: LazyIterator<T>) {\n    super();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Serial`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  private async serialNext(): Promise<IteratorResult<T>> {\n    return this.upstream.next();\n  }\n}\n\nclass SkipIterator<T> extends LazyIterator<T> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  // Local state that should not be clobbered by out-of-order execution.\n  count = 0;\n\n  constructor(protected upstream: LazyIterator<T>, protected maxCount: number) {\n    super();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Skip`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  private async serialNext(): Promise<IteratorResult<T>> {\n    // TODO(soergel): consider tradeoffs of reading in parallel, eg.\n    // collecting next() promises in an Array and then waiting for\n    // Promise.all() of those. Benefit: pseudo-parallel execution.  Drawback:\n    // maybe delayed GC.\n    while (this.count++ < this.maxCount) {\n      const skipped = await this.upstream.next();\n      // short-circuit if upstream is already empty\n      if (skipped.done) {\n        return skipped;\n      }\n      tf.dispose(skipped.value as {});\n    }\n    return this.upstream.next();\n  }\n}\n\nclass TakeIterator<T> extends LazyIterator<T> {\n  count = 0;\n  constructor(protected upstream: LazyIterator<T>, protected maxCount: number) {\n    super();\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Take`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    if (this.count++ >= this.maxCount) {\n      return {value: null, done: true};\n    }\n    return this.upstream.next();\n  }\n}\n\n// Note this batch just groups items into row-wise element arrays.\n// Rotating these to a column-wise representation happens only at the dataset\n// level.\nclass RowMajorBatchIterator<T> extends LazyIterator<T[]> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T[]>>;\n\n  constructor(\n      protected upstream: LazyIterator<T>, protected batchSize: number,\n      protected enableSmallLastBatch = true) {\n    super();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> RowMajorBatch`;\n  }\n\n  async next(): Promise<IteratorResult<T[]>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  private async serialNext(): Promise<IteratorResult<T[]>> {\n    const batch: T[] = [];\n    while (batch.length < this.batchSize) {\n      const item = await this.upstream.next();\n      if (item.done) {\n        if (this.enableSmallLastBatch && batch.length > 0) {\n          return {value: batch, done: false};\n        }\n        return {value: null, done: true};\n      }\n      batch.push(item.value);\n    }\n    return {value: batch, done: false};\n  }\n}\n\nclass FilterIterator<T> extends LazyIterator<T> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  constructor(\n      protected upstream: LazyIterator<T>,\n      protected predicate: (value: T) => boolean) {\n    super();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Filter`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  private async serialNext(): Promise<IteratorResult<T>> {\n    while (true) {\n      const item = await this.upstream.next();\n      if (item.done || this.predicate(item.value)) {\n        return item;\n      }\n      tf.dispose(item.value as {});\n    }\n  }\n}\n\nclass MapIterator<I, O> extends LazyIterator<O> {\n  constructor(\n      protected upstream: LazyIterator<I>,\n      protected transform: (value: I) => O) {\n    super();\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Map`;\n  }\n\n  async next(): Promise<IteratorResult<O>> {\n    const item = await this.upstream.next();\n    if (item.done) {\n      return {value: null, done: true};\n    }\n    const inputTensors = tf.tensor_util.getTensorsInContainer(item.value as {});\n    // Careful: the transform may mutate the item in place.\n    // That's why we have to remember the input Tensors above, and then\n    // below dispose only those that were not passed through to the output.\n    // Note too that the transform function is responsible for tidying\n    // any intermediate Tensors.  Here we are concerned only about the\n    // inputs.\n    const mapped = this.transform(item.value);\n    const outputTensors = tf.tensor_util.getTensorsInContainer(mapped as {});\n\n    // TODO(soergel) faster intersection\n    // TODO(soergel) move to tf.disposeExcept(in, out)?\n    for (const t of inputTensors) {\n      if (!tf.tensor_util.isTensorInList(t, outputTensors)) {\n        t.dispose();\n      }\n    }\n    return {value: mapped, done: false};\n  }\n}\n\nclass ErrorHandlingLazyIterator<T> extends LazyIterator<T> {\n  count = 0;\n  constructor(\n      protected upstream: LazyIterator<T>,\n      protected handler: (error: Error) => boolean) {\n    super();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> handleErrors`;\n  }\n\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  async serialNext(): Promise<IteratorResult<T>> {\n    while (true) {\n      try {\n        return await this.upstream.next();\n      } catch (e) {\n        if (!this.handler(e)) {\n          return {value: null, done: true};\n        }\n        // If the handler returns true, loop and fetch the next upstream item.\n\n        // If the upstream iterator throws an endless stream of errors, and if\n        // the handler says to ignore them, then we loop forever here.  That is\n        // the correct behavior-- it's up to the handler to decide when to stop.\n      }\n    }\n  }\n}\n\nclass AsyncMapIterator<I, O> extends LazyIterator<O> {\n  constructor(\n      protected upstream: LazyIterator<I>,\n      protected transform: (value: I) => Promise<O>) {\n    super();\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> AsyncMap`;\n  }\n\n  async next(): Promise<IteratorResult<O>> {\n    const item = await this.upstream.next();\n    if (item.done) {\n      return {value: null, done: true};\n    }\n    const inputTensors = tf.tensor_util.getTensorsInContainer(item.value as {});\n    // Careful: the transform may mutate the item in place.\n    // That's why we have to remember the input Tensors above, and then\n    // below dispose only those that were not passed through to the output.\n    // Note too that the transform function is responsible for tidying\n    // any intermediate Tensors.  Here we are concerned only about the\n    // inputs.\n    const mapped = await this.transform(item.value);\n    const outputTensors = tf.tensor_util.getTensorsInContainer(mapped as {});\n\n    // TODO(soergel) faster intersection\n    // TODO(soergel) move to tf.disposeExcept(in, out)?\n    for (const t of inputTensors) {\n      if (!tf.tensor_util.isTensorInList(t, outputTensors)) {\n        t.dispose();\n      }\n    }\n    return {value: mapped, done: false};\n  }\n}\n\n// Iterators that maintain a queue of pending items\n// ============================================================================\n\n/**\n * A base class for transforming streams that operate by maintaining an\n * output queue of elements that are ready to return via next().  This is\n * commonly required when the transformation is 1-to-many:  A call to next()\n * may trigger a call to the underlying stream, which will produce many\n * mapped elements of this stream-- of which we need to return only one, so\n * we have to queue the rest.\n */\nexport abstract class OneToManyIterator<T> extends LazyIterator<T> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  // Local state that should not be clobbered by out-of-order execution.\n  protected outputQueue: RingBuffer<T>;\n\n  constructor() {\n    super();\n    this.outputQueue = new GrowingRingBuffer<T>();\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  /**\n   * Read one or more chunks from upstream and process them, possibly\n   * reading or writing a carryover, and adding processed items to the\n   * output queue.  Note it's possible that no items are added to the queue\n   * on a given pump() call, even if the upstream stream is not closed\n   * (e.g., because items are filtered).\n   *\n   * @return `true` if any action was taken, i.e. fetching items from the\n   *   upstream source OR adding items to the output queue.  `false` if the\n   *   upstream source is exhausted AND nothing was added to the queue\n   * (i.e., any remaining carryover).\n   */\n  protected abstract async pump(): Promise<boolean>;\n\n  async serialNext(): Promise<IteratorResult<T>> {\n    // Fetch so that the queue contains at least one item if possible.\n    // If the upstream source is exhausted, AND there are no items left in\n    // the output queue, then this stream is also exhausted.\n    while (this.outputQueue.length() === 0) {\n      // TODO(soergel): consider parallel reads.\n      if (!await this.pump()) {\n        return {value: null, done: true};\n      }\n    }\n    return {value: this.outputQueue.shift(), done: false};\n  }\n}\nclass FlatmapIterator<I, O> extends OneToManyIterator<O> {\n  constructor(\n      protected upstream: LazyIterator<I>,\n      protected transform: (value: I) => O[]) {\n    super();\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Flatmap`;\n  }\n\n  async pump(): Promise<boolean> {\n    const item = await this.upstream.next();\n    if (item.done) {\n      return false;\n    }\n    const inputTensors = tf.tensor_util.getTensorsInContainer(item.value as {});\n    // Careful: the transform may mutate the item in place.\n    // that's why we have to remember the input Tensors above, and then\n    // below dispose only those that were not passed through to the output.\n    // Note too that the transform function is responsible for tidying any\n    // intermediate Tensors.  Here we are concerned only about the inputs.\n    const mappedArray = this.transform(item.value);\n    const outputTensors =\n        tf.tensor_util.getTensorsInContainer(mappedArray as {});\n    this.outputQueue.pushAll(mappedArray);\n\n    // TODO(soergel) faster intersection, and deduplicate outputTensors\n    // TODO(soergel) move to tf.disposeExcept(in, out)?\n    for (const t of inputTensors) {\n      if (!tf.tensor_util.isTensorInList(t, outputTensors)) {\n        t.dispose();\n      }\n    }\n\n    return true;\n  }\n}\n\n/**\n * Provides a `LazyIterator` that concatenates a stream of underlying\n * streams.\n *\n * Doing this in a concurrency-safe way requires some trickery.  In\n * particular, we want this stream to return the elements from the\n * underlying streams in the correct order according to when next() was\n * called, even if the resulting Promises resolve in a different order.\n */\nexport class ChainedIterator<T> extends LazyIterator<T> {\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>> = null;\n\n  // Local state that should not be clobbered by out-of-order execution.\n  private iterator: LazyIterator<T> = null;\n  private moreIterators: LazyIterator<LazyIterator<T>>;\n\n  constructor(\n      iterators: LazyIterator<LazyIterator<T>>,\n      private readonly baseErrorHandler?: (e: Error) => boolean) {\n    super();\n    this.moreIterators = iterators;\n  }\n\n  summary() {\n    const upstreamSummaries = 'TODO: fill in upstream of chained summaries';\n    return `${upstreamSummaries} -> Chained`;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    this.lastRead = this.readFromChain(this.lastRead);\n    return this.lastRead;\n  }\n\n  private async readFromChain(lastRead: Promise<IteratorResult<T>>):\n      Promise<IteratorResult<T>> {\n    // Must await on the previous read since the previous read may have advanced\n    // the stream of streams, from which we need to read.\n    // This is unfortunate since we can't parallelize reads. Which means\n    // prefetching of chained streams is a no-op.\n    // One solution is to prefetch immediately upstream of this.\n    await lastRead;\n    if (this.iterator == null) {\n      const iteratorResult = await this.moreIterators.next();\n      if (iteratorResult.done) {\n        // No more streams to stream from.\n        return {value: null, done: true};\n      }\n      this.iterator = iteratorResult.value;\n      if (this.baseErrorHandler != null) {\n        this.iterator = this.iterator.handleErrors(this.baseErrorHandler);\n      }\n    }\n    const itemResult = await this.iterator.next();\n    if (itemResult.done) {\n      this.iterator = null;\n      return this.readFromChain(lastRead);\n    }\n    return itemResult;\n  }\n}\n\nexport enum ZipMismatchMode {\n  FAIL,      // require zipped streams to have the same length\n  SHORTEST,  // terminate zip when the first stream is exhausted\n  LONGEST    // use nulls for exhausted streams; use up the longest stream.\n}\n\n/**\n * Provides a `LazyIterator` that zips together an array, dict, or nested\n * structure of `LazyIterator`s (and perhaps additional constants).\n *\n * The underlying streams must provide elements in a consistent order such\n * that they correspond.\n *\n * Typically, the underlying streams should have the same number of\n * elements. If they do not, the behavior is determined by the\n * `mismatchMode` argument.\n *\n * The nested structure of the `iterators` argument determines the\n * structure of elements in the resulting iterator.\n *\n * Doing this in a concurrency-safe way requires some trickery.  In\n * particular, we want this stream to return the elements from the\n * underlying streams in the correct order according to when next() was\n * called, even if the resulting Promises resolve in a different order.\n *\n * @param iterators: An array or object containing LazyIterators at the\n * leaves.\n * @param mismatchMode: Determines what to do when one underlying iterator\n * is exhausted before the others.  `ZipMismatchMode.FAIL` (the default)\n * causes an error to be thrown in this case.  `ZipMismatchMode.SHORTEST`\n * causes the zipped iterator to terminate with the furst underlying\n * streams, so elements remaining on the longer streams are ignored.\n * `ZipMismatchMode.LONGEST` causes the zipped stream to continue, filling\n * in nulls for the exhausted streams, until all streams are exhausted.\n */\nclass ZipIterator<O extends tf.TensorContainer> extends LazyIterator<O> {\n  private count = 0;\n  private currentPromise: Promise<IteratorResult<O>> = null;\n\n  constructor(\n      protected readonly iterators: IteratorContainer,\n      protected readonly mismatchMode: ZipMismatchMode = ZipMismatchMode.FAIL) {\n    super();\n  }\n\n  summary() {\n    const upstreamSummaries = 'TODO: fill in upstream of zip summaries';\n    return `{${upstreamSummaries}} -> Zip`;\n  }\n\n  private async nextState(afterState: Promise<IteratorResult<O>>):\n      Promise<IteratorResult<O>> {\n    // This chaining ensures that the underlying next() are not even called\n    // before the previous ones have resolved.\n    await afterState;\n\n    // Collect underlying iterator \"done\" signals as a side effect in\n    // getNext()\n    let numIterators = 0;\n    let iteratorsDone = 0;\n\n    function getNext(container: IteratorContainer): DeepMapAsyncResult {\n      if (container instanceof LazyIterator) {\n        const result = container.next();\n        return {\n          value: result.then(x => {\n            numIterators++;\n            if (x.done) {\n              iteratorsDone++;\n            }\n            return x.value;\n          }),\n          recurse: false\n        };\n      } else {\n        return {value: null, recurse: true};\n      }\n    }\n\n    const mapped: O = await deepMapAndAwaitAll(this.iterators, getNext);\n\n    if (numIterators === iteratorsDone) {\n      // The streams have all ended.\n      return {value: null, done: true};\n    }\n    if (iteratorsDone > 0) {\n      switch (this.mismatchMode) {\n        case ZipMismatchMode.FAIL:\n          throw new Error(\n              'Zipped streams should have the same length. ' +\n              `Mismatched at element ${this.count}.`);\n        case ZipMismatchMode.SHORTEST:\n          return {value: null, done: true};\n        case ZipMismatchMode.LONGEST:\n        default:\n          // Continue.  The exhausted streams already produced value: null.\n      }\n    }\n\n    this.count++;\n    return {value: mapped, done: false};\n  }\n\n  async next(): Promise<IteratorResult<O>> {\n    this.currentPromise = this.nextState(this.currentPromise);\n    return this.currentPromise;\n  }\n}\n\n// Iterators that maintain a ring buffer of pending promises\n// ============================================================================\n\n/**\n * A stream that prefetches a given number of items from an upstream source,\n * returning them in FIFO order.\n *\n * Note this prefetches Promises, but makes no guarantees about when those\n * Promises resolve.\n */\nexport class PrefetchIterator<T> extends LazyIterator<T> {\n  protected buffer: RingBuffer<Promise<IteratorResult<T>>>;\n\n  constructor(\n      protected upstream: LazyIterator<T>, protected bufferSize: number) {\n    super();\n    this.buffer = new RingBuffer<Promise<IteratorResult<T>>>(bufferSize);\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Prefetch`;\n  }\n\n  /**\n   * Refill the prefetch buffer.  Returns only after the buffer is full, or\n   * the upstream source is exhausted.\n   */\n  protected refill() {\n    while (!this.buffer.isFull()) {\n      const v = this.upstream.next();\n      this.buffer.push(v);\n    }\n  }\n\n  next(): Promise<IteratorResult<T>> {\n    this.refill();\n    // This shift will never throw an error because the buffer is always\n    // full after a refill. If the stream is exhausted, the buffer will be\n    // full of Promises that will resolve to the end-of-stream signal.\n    return this.buffer.shift();\n  }\n}\n\n/**\n * A stream that performs a sliding-window random shuffle on an upstream\n * source. This is like a `PrefetchIterator` except that the items are\n * returned in randomized order.  Mixing naturally improves as the buffer\n * size increases.\n */\nexport class ShuffleIterator<T> extends PrefetchIterator<T> {\n  private readonly random: seedrandom.prng;\n\n  // Strict Promise execution order:\n  // a next() call may not even begin until the previous one completes.\n  private lastRead: Promise<IteratorResult<T>>;\n\n  // Local state that should not be clobbered by out-of-order execution.\n  private upstreamExhausted = false;\n\n  constructor(\n      protected upstream: LazyIterator<T>, protected windowSize: number,\n      seed?: string) {\n    super(upstream, windowSize);\n    this.random = seedrandom.alea(seed || tf.util.now().toString());\n    this.lastRead = Promise.resolve({value: null, done: false});\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    // This sets this.lastRead to a new Promise right away, as opposed to\n    // saying `await this.lastRead; this.lastRead = this.serialNext();` which\n    // would not work because this.nextRead would be updated only after the\n    // promise resolves.\n    this.lastRead = this.lastRead.then(() => this.serialNext());\n    return this.lastRead;\n  }\n\n  private randomInt(max: number) {\n    return Math.floor(this.random() * max);\n  }\n\n  protected chooseIndex(): number {\n    return this.randomInt(this.buffer.length());\n  }\n\n  async serialNext(): Promise<IteratorResult<T>> {\n    // TODO(soergel): consider performance\n    if (!this.upstreamExhausted) {\n      this.refill();\n    }\n    while (!this.buffer.isEmpty()) {\n      const chosenIndex = this.chooseIndex();\n      const result = await this.buffer.shuffleExcise(chosenIndex);\n      if (result.done) {\n        this.upstreamExhausted = true;\n      } else {\n        this.refill();\n        return result;\n      }\n    }\n    return {value: null, done: true};\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs-core';\nimport {TensorLike} from '@tensorflow/tfjs-core';\nimport * as seedrandom from 'seedrandom';\nimport {iteratorFromConcatenated, iteratorFromFunction, iteratorFromItems, iteratorFromZipped, LazyIterator, ZipMismatchMode} from './iterators/lazy_iterator';\nimport {Container, DataElement} from './types';\nimport {canTensorify, deepMapAndAwaitAll, DeepMapResult, isIterable} from './util/deep_map';\n\n/**\n * A nested structure of Datasets, used as the input to zip().\n */\nexport type DatasetContainer = Container<Dataset<DataElement>>;\n\n// TODO(soergel): consider vectorized operations within the pipeline.\n\n/**\n * Represents a potentially large list of independent data elements (typically\n * 'samples' or 'examples').\n *\n * A 'data example' may be a primitive, an array, a map from string keys to\n * values, or any nested structure of these.\n *\n * A `Dataset` represents an ordered collection of elements, together with a\n * chain of transformations to be performed on those elements. Each\n * transformation is a method of `Dataset` that returns another `Dataset`, so\n * these may be chained, e.g.\n * `const processedDataset = rawDataset.filter(...).map(...).batch(...)`.\n *\n * Data loading and transformation is done in a lazy, streaming fashion.  The\n * dataset may be iterated over multiple times; each iteration starts the data\n * loading anew and recapitulates the transformations.\n *\n * A `Dataset` is typically processed as a stream of unbatched examples --i.e.,\n * its transformations are applied one example at a time. Batching produces a\n * new `Dataset` where each element is a batch. Batching should usually come\n * last in a pipeline, because data transformations are easier to express on a\n * per-example basis than on a per-batch basis.\n *\n * The following code examples are calling `await dataset.forEachAsync(...)` to\n * iterate once over the entire dataset in order to print out the data.\n */\n/** @doc {heading: 'Data', subheading: 'Classes', namespace: 'data'} */\nexport abstract class Dataset<T extends tf.TensorContainer> {\n  /*\n   * Provide a new stream of elements.  Note this will also start new streams\n   * from any underlying `Dataset`s.\n   *\n   * CAUTION: Any Tensors contained within the elements returned from\n   * this stream *must* be manually disposed to avoid a GPU memory leak.\n   * The tf.tidy() approach cannot be used in an asynchronous context.\n   */\n  abstract async iterator(): Promise<LazyIterator<T>>;\n\n  readonly size: number = null;\n\n  // TODO(soergel): Make Datasets report whether repeated iterator() calls\n  // produce the same result (e.g., reading from a file) or different results\n  // (e.g., from the webcam).  Currently we don't make this distinction but it\n  // could be important for the user to know.\n  // abstract isDeterministic(): boolean;\n\n  /**\n   * Groups elements into batches.\n   *\n   * It is assumed that each of the incoming dataset elements has the same\n   * structure-- i.e. the same set of keys at each location in an object\n   * hierarchy.  For each key, the resulting `Dataset` provides a batched\n   * element collecting all of the incoming values for that key.\n   *\n   *  * Incoming primitives are grouped into a 1-D Tensor.\n   *  * Incoming Tensors are grouped into a new Tensor where the 0'th axis is\n   *    the batch dimension.\n   *  * Incoming arrays are converted to Tensor and then batched.\n   *  * A nested array is interpreted as an n-D Tensor, so the batched result\n   *    has n+1 dimensions.\n   *  * An array that cannot be converted to Tensor produces an error.\n   *\n   * If an array should not be batched as a unit, it should first be converted\n   * to an object with integer keys.\n   *\n   * Here are a few examples:\n   *\n   * Batch a dataset of numbers:\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6, 7, 8]).batch(4);\n   * await a.forEachAsync(e => e.print());\n   * ```\n   *\n   * Batch a dataset of arrays:\n   * ```js\n   * const b = tf.data.array([[1], [2], [3], [4], [5], [6], [7], [8]]).batch(4);\n   * await b.forEachAsync(e => e.print());\n   * ```\n   *\n   * Batch a dataset of objects:\n   * ```js\n   * const c = tf.data.array([{a: 1, b: 11}, {a: 2, b: 12}, {a: 3, b: 13},\n   *   {a: 4, b: 14}, {a: 5, b: 15}, {a: 6, b: 16}, {a: 7, b: 17},\n   *   {a: 8, b: 18}]).batch(4);\n   * await c.forEachAsync(e => {\n   *   console.log('{');\n   *   for(var key in e) {\n   *     console.log(key+':');\n   *     e[key].print();\n   *   }\n   *   console.log('}');\n   * })\n   * ```\n   *\n   * @param batchSize The number of elements desired per batch.\n   * @param smallLastBatch Whether to emit the final batch when it has fewer\n   *   than batchSize elements. Default true.\n   * @returns A `Dataset`, from which a stream of batches can be obtained.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  batch(batchSize: number, smallLastBatch = true): Dataset<tf.TensorContainer> {\n    const base = this;\n    tf.util.assert(\n        batchSize > 0, () => `batchSize needs to be positive, but it is\n      ${batchSize}`);\n    let size;\n    if (this.size === Infinity || this.size == null) {\n      // If the size of this dataset is infinity or null, the new size keeps the\n      // same.\n      size = this.size;\n    } else if (smallLastBatch) {\n      // If the size of this dataset is known and include small last batch, the\n      // new size is full batch count plus last batch.\n      size = Math.ceil(this.size / batchSize);\n    } else {\n      // If the size of this dataset is known and not include small last batch,\n      // the new size is full batch count.\n      size = Math.floor(this.size / batchSize);\n    }\n    return datasetFromIteratorFn(async () => {\n      return (await base.iterator())\n          .columnMajorBatch(batchSize, smallLastBatch, deepBatchConcat);\n    }, size);\n  }\n\n  /**\n   * Concatenates this `Dataset` with another.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3]);\n   * const b = tf.data.array([4, 5, 6]);\n   * const c = a.concatenate(b);\n   * await c.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param dataset A `Dataset` to be concatenated onto this one.\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  concatenate(dataset: Dataset<T>): Dataset<T> {\n    const base = this;\n    let size;\n    if (this.size === Infinity || dataset.size === Infinity) {\n      // If the size of any of these two dataset is infinity, new size is\n      // infinity.\n      size = Infinity;\n    } else if (this.size != null && dataset.size != null) {\n      // If the size of both datasets are known and not infinity, new size is\n      // sum the size of these two datasets.\n      size = this.size + dataset.size;\n    } else {\n      // If neither of these two datasets has infinite size and any of these two\n      // datasets' size is null, the new size is null.\n      size = null;\n    }\n    return datasetFromIteratorFn(\n        async () =>\n            (await base.iterator()).concatenate(await dataset.iterator()),\n        size);\n  }\n\n  /**\n   * Filters this dataset according to `predicate`.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\n   *   .filter(x => x%2 === 0);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param predicate A function mapping a dataset element to a boolean or a\n   * `Promise` for one.\n   *\n   * @returns A `Dataset` of elements for which the predicate was true.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  filter(predicate: (value: T) => boolean): Dataset<T> {\n    const base = this;\n    let size;\n    if (this.size === Infinity) {\n      // If the size of this dataset is infinity, new size is infinity\n      size = Infinity;\n    } else {\n      // If this dataset has limited elements, new size is null because it might\n      // exhausted randomly.\n      size = null;\n    }\n    return datasetFromIteratorFn(async () => {\n      return (await base.iterator()).filter(x => tf.tidy(() => predicate(x)));\n    }, size);\n  }\n\n  /**\n   * Apply a function to every element of the dataset.\n   *\n   * After the function is applied to a dataset element, any Tensors contained\n   * within that element are disposed.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3]);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param f A function to apply to each dataset element.\n   * @returns A `Promise` that resolves after all elements have been processed.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  async forEachAsync(f: (input: T) => void): Promise<void> {\n    return (await this.iterator()).forEachAsync(f);\n  }\n\n  /** @deprecated Please use `dataset.forEachAsync()` instead. */\n  async forEach(f: (input: T) => void): Promise<void> {\n    tf.deprecationWarn(\n        'dataset.forEach() is deprecated and will be removed. ' +\n        'Please use dataset.forEachAsync() instead');\n    return this.forEachAsync(f);\n  }\n\n  /**\n   * Maps this dataset through a 1-to-1 transform.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3]).map(x => x*x);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param transform A function mapping a dataset element to a transformed\n   *   dataset element.\n   *\n   * @returns A `Dataset` of transformed elements.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  map<O extends tf.TensorContainer>(transform: (value: T) => O): Dataset<O> {\n    const base = this;\n    return datasetFromIteratorFn(async () => {\n      return (await base.iterator()).map(x => tf.tidy(() => transform(x)));\n    }, this.size);\n  }\n\n  /**\n   * Maps this dataset through an async 1-to-1 transform.\n   *\n   * ```js\n   * const a =\n   *  tf.data.array([1, 2, 3]).mapAsync(x => new Promise(function(resolve){\n   *    setTimeout(() => {\n   *      resolve(x * x);\n   *    }, Math.random()*1000 + 500);\n   *  }));\n   * console.log(await a.toArray());\n   * ```\n   *\n   * @param transform A function mapping a dataset element to a `Promise` for a\n   *   transformed dataset element.  This transform is responsible for disposing\n   *   any intermediate `Tensor`s, i.e. by wrapping its computation in\n   *   `tf.tidy()`; that cannot be automated here (as it is in the synchronous\n   *   `map()` case).\n   *\n   * @returns A `Dataset` of transformed elements.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  mapAsync<O extends tf.TensorContainer>(transform: (value: T) => Promise<O>):\n      Dataset<O> {\n    const base = this;\n    return datasetFromIteratorFn(async () => {\n      return (await base.iterator()).mapAsync(transform);\n    }, this.size);\n  }\n\n  /**\n   *  Creates a `Dataset` that prefetches elements from this dataset.\n   *\n   * @param bufferSize: An integer specifying the number of elements to be\n   *   prefetched.\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  prefetch(bufferSize: number): Dataset<T> {\n    if (bufferSize == null) {\n      throw new RangeError(\n          '`Dataset.prefetch()` requires bufferSize to be specified.');\n    }\n\n    const base = this;\n    return datasetFromIteratorFn(\n        async () => (await base.iterator()).prefetch(bufferSize), this.size);\n  }\n\n  /**\n   * Repeats this dataset `count` times.\n   *\n   * NOTE: If this dataset is a function of global state (e.g. a random number\n   * generator), then different repetitions may produce different elements.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3]).repeat(3);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param count: (Optional) An integer, representing the number of times\n   *   the dataset should be repeated. The default behavior (if `count` is\n   *   `undefined` or negative) is for the dataset be repeated indefinitely.\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  repeat(count?: number): Dataset<T> {\n    const base = this;\n    let size;\n    if (this.size != null && count > 0) {\n      // If this dataset has size and count is positive, new size is current\n      // size multiply count. This also covers the case that current size is\n      // infinity.\n      size = this.size * count;\n    } else if (count === 0) {\n      // If count is 0, new size is 0.\n      size = 0;\n    } else if (this.size != null && (count === undefined || count < 0)) {\n      // If this dataset has size and count is undefined or negative, the\n      // dataset will be repeated indefinitely and new size is infinity.\n      size = Infinity;\n    } else {\n      // If the size of this dataset is null, the new dataset's size is null.\n      size = null;\n    }\n    return datasetFromIteratorFn(async () => {\n      const iteratorIterator = iteratorFromFunction(\n          async () => ({value: await base.iterator(), done: false}));\n      return iteratorFromConcatenated(iteratorIterator.take(count));\n    }, size);\n  }\n\n  /**\n   * Creates a `Dataset` that skips `count` initial elements from this dataset.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6]).skip(3);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param count: The number of elements of this dataset that should be skipped\n   *   to form the new dataset.  If `count` is greater than the size of this\n   *   dataset, the new dataset will contain no elements.  If `count`\n   *   is `undefined` or negative, skips the entire dataset.\n   *\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  skip(count: number): Dataset<T> {\n    const base = this;\n    let size;\n    if (this.size != null && count >= 0 && this.size >= count) {\n      // If the size of this dataset is greater than count, the new dataset's\n      // size is current size minus skipped size.This also covers the case that\n      // current size is infinity.\n      size = this.size - count;\n    } else if (\n        this.size != null &&\n        (this.size < count || count === undefined || count < 0)) {\n      // If the size of this dataset is smaller than count, or count is\n      // undefined or negative, skips the entire dataset and the new size is 0.\n      size = 0;\n    } else {\n      // If the size of this dataset is null, the new dataset's size is null.\n      size = null;\n    }\n    return datasetFromIteratorFn(\n        async () => (await base.iterator()).skip(count), size);\n  }\n\n  // TODO(soergel): deep sharded shuffle, where supported\n\n  static readonly MAX_BUFFER_SIZE = 10000;\n\n  /**\n   * Pseudorandomly shuffles the elements of this dataset. This is done in a\n   * streaming manner, by sampling from a given number of prefetched elements.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6]).shuffle(3);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param bufferSize: An integer specifying the number of elements from this\n   *   dataset from which the new dataset will sample.\n   * @param seed: (Optional) An integer specifying the random seed that will\n   *   be used to create the distribution.\n   * @param reshuffleEachIteration: (Optional) A boolean, which if true\n   *   indicates that the dataset should be pseudorandomly reshuffled each time\n   *   it is iterated over. If false, elements will be returned in the same\n   *   shuffled order on each iteration. (Defaults to `true`.)\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  shuffle(bufferSize: number, seed?: string, reshuffleEachIteration = true):\n      Dataset<T> {\n    if (bufferSize == null || bufferSize < 0) {\n      if (this.size == null) {\n        throw new RangeError(\n            '`Dataset.shuffle()` requires bufferSize to be specified.');\n      } else {\n        throw new RangeError(\n            '`Dataset.shuffle()` requires bufferSize to be specified.  ' +\n            'If your data fits in main memory (for regular JS objects), ' +\n            'and/or GPU memory (for `tf.Tensor`s), consider setting ' +\n            `bufferSize to the dataset size (${this.size} elements)`);\n      }\n    }\n    const base = this;\n    const random = seedrandom.alea(seed || tf.util.now().toString());\n    return datasetFromIteratorFn(async () => {\n      let seed2 = random.int32();\n      if (reshuffleEachIteration) {\n        seed2 += random.int32();\n      }\n      return (await base.iterator()).shuffle(bufferSize, seed2.toString());\n    }, this.size);\n  }\n\n  /**\n   * Creates a `Dataset` with at most `count` initial elements from this\n   * dataset.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6]).take(3);\n   * await a.forEachAsync(e => console.log(e));\n   * ```\n   *\n   * @param count: The number of elements of this dataset that should be taken\n   *   to form the new dataset.  If `count` is `undefined` or negative, or if\n   *   `count` is greater than the size of this dataset, the new dataset will\n   *   contain all elements of this dataset.\n   * @returns A `Dataset`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  take(count: number): Dataset<T> {\n    const base = this;\n    let size;\n    if (this.size != null && this.size > count) {\n      // If the size of this dataset is greater than count, the new dataset's\n      // size is count.\n      size = count;\n    } else if (this.size != null && this.size <= count) {\n      // If the size of this dataset is equal or smaller than count, the new\n      // dataset's size is the size of this dataset.\n      size = this.size;\n    } else {\n      // If the size of this dataset is null, the new dataset's size is null.\n      size = null;\n    }\n    return datasetFromIteratorFn(\n        async () => (await base.iterator()).take(count), size);\n  }\n\n  /**\n   * Collect all elements of this dataset into an array.\n   *\n   * Obviously this will succeed only for small datasets that fit in memory.\n   * Useful for testing and generally should be avoided if possible.\n   *\n   * ```js\n   * const a = tf.data.array([1, 2, 3, 4, 5, 6]);\n   * console.log(await a.toArray());\n   * ```\n   *\n   * @returns A Promise for an array of elements, which will resolve\n   *   when a new stream has been obtained and fully consumed.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  async toArray() {\n    if (this.size === Infinity) {\n      throw new Error('Can not convert infinite data stream to array.');\n    }\n    return (await this.iterator()).toArray();\n  }\n\n  /**\n   * Collect all elements of this dataset into an array with prefetching 100\n   * elements. This is useful for testing, because the prefetch changes the\n   * order in which the Promises are resolved along the processing pipeline.\n   * This may help expose bugs where results are dependent on the order of\n   * Promise resolution rather than on the logical order of the stream (i.e.,\n   * due to hidden mutable state).\n   *\n   * @returns A Promise for an array of elements, which will resolve\n   *   when a new stream has been obtained and fully consumed.\n   */\n  async toArrayForTest() {\n    if (this.size === Infinity) {\n      throw new Error('Can not convert infinite data stream to array.');\n    }\n    return (await this.iterator()).toArrayForTest();\n  }\n}\n\n/**\n * Create a `Dataset` defined by a provided iterator() function.\n *\n * ```js\n * let i = -1;\n * const func = () =>\n *    ++i < 5 ? {value: i, done: false} : {value: null, done: true};\n * const iter = tf.data.iteratorFromFunction(func);\n * const ds = tf.data.datasetFromIteratorFn(iter);\n * await ds.forEachAsync(e => console.log(e));\n * ```\n */\nexport function datasetFromIteratorFn<T extends tf.TensorContainer>(\n    iteratorFn: () => Promise<LazyIterator<T>>,\n    size: number = null): Dataset<T> {\n  return new class extends Dataset<T> {\n    size = size;\n\n    /*\n     * Provide a new stream of elements.  Note this will also start new streams\n     * from any underlying `Dataset`s.\n     */\n    async iterator(): Promise<LazyIterator<T>> {\n      return iteratorFn();\n    }\n  }\n  ();\n}\n\n/**\n * Create a `Dataset` from an array of elements.\n *\n * Create a Dataset from an array of objects:\n * ```js\n * const a = tf.data.array([{'item': 1}, {'item': 2}, {'item': 3}]);\n * await a.forEachAsync(e => console.log(e));\n * ```\n *\n * Create a Dataset from an array of numbers:\n * ```js\n * const a = tf.data.array([4, 5, 6]);\n * await a.forEachAsync(e => console.log(e));\n * ```\n * @param items An array of elements that will be parsed as items in a dataset.\n */\n/** @doc {heading: 'Data', subheading: 'Creation', namespace: 'data'} */\nexport function array<T extends tf.TensorContainer>(items: T[]): Dataset<T> {\n  return datasetFromIteratorFn(\n      async () => iteratorFromItems(items), items.length);\n}\n\n/**\n * Create a `Dataset` by zipping together an array, dict, or nested\n * structure of `Dataset`s (and perhaps additional constants).\n * The underlying datasets must provide elements in a consistent order such that\n * they correspond.\n *\n * The number of elements in the resulting dataset is the same as the size of\n * the smallest dataset in datasets.\n *\n * The nested structure of the `datasets` argument determines the\n * structure of elements in the resulting iterator.\n *\n * Note this means that, given an array of two datasets that produce dict\n * elements, the result is a dataset that produces elements that are arrays\n * of two dicts:\n *\n * Zip an array of datasets:\n * ```js\n * console.log('Zip two datasets of objects:');\n * const ds1 = tf.data.array([{a: 1}, {a: 2}, {a: 3}]);\n * const ds2 = tf.data.array([{b: 4}, {b: 5}, {b: 6}]);\n * const ds3 = tf.data.zip([ds1, ds2]);\n * await ds3.forEachAsync(e => console.log(JSON.stringify(e)));\n *\n * // If the goal is to merge the dicts in order to produce elements like\n * // {a: ..., b: ...}, this requires a second step such as:\n * console.log('Merge the objects:');\n * const ds4 = ds3.map(x => {return {a: x[0].a, b: x[1].b}});\n * await ds4.forEachAsync(e => console.log(e));\n * ```\n *\n * Zip a dict of datasets:\n * ```js\n * const a = tf.data.array([{a: 1}, {a: 2}, {a: 3}]);\n * const b = tf.data.array([{b: 4}, {b: 5}, {b: 6}]);\n * const c = tf.data.zip({c: a, d: b});\n * await c.forEachAsync(e => console.log(JSON.stringify(e)));\n * ```\n */\n/** @doc {heading: 'Data', subheading: 'Operations', namespace: 'data'} */\nexport function zip<O extends tf.TensorContainer>(datasets: DatasetContainer):\n    Dataset<O> {\n  // manually type-check the argument for JS users\n  if (!isIterable(datasets)) {\n    throw new Error('The argument to zip() must be an object or array.');\n  }\n  let size;\n  if (Array.isArray(datasets)) {\n    for (let i = 0; i < datasets.length; i++) {\n      size = size == null ? (datasets[i] as Dataset<O>).size :\n                            Math.min(size, (datasets[i] as Dataset<O>).size);\n    }\n  } else if (datasets instanceof Object) {\n    for (const ds in datasets) {\n      size = size == null ? (datasets[ds] as Dataset<O>).size :\n                            Math.min(size, (datasets[ds] as Dataset<O>).size);\n    }\n  }\n  return datasetFromIteratorFn<O>(async () => {\n    const streams = await deepMapAndAwaitAll(datasets, d => {\n      if (d instanceof Dataset) {\n        return {value: d.iterator(), recurse: false};\n      } else if (isIterable(d)) {\n        return {value: null, recurse: true};\n      } else {\n        throw new Error(\n            'Leaves of the structure passed to zip() must be Datasets, ' +\n            'not primitives.');\n      }\n    });\n    return iteratorFromZipped<O>(streams, ZipMismatchMode.SHORTEST);\n  }, size);\n}\n\n/**\n * A zip function for use with deepZip, passed via the columnMajorBatch call.\n *\n * Accepts an array of identically-structured nested elements and either batches\n * them (if they are primitives, numeric arrays, or Tensors) or requests\n * recursion (if not).\n */\n// tslint:disable-next-line:no-any\nfunction deepBatchConcat(rows: any[]): DeepMapResult {\n  if (rows === null) {\n    return null;\n  }\n\n  // use the first item to decide whether to recurse or batch here.\n  const exampleRow = rows[0];\n\n  if (canTensorify(exampleRow)) {\n    // rows is an array of primitives, Tensors, or arrays.  Batch them.\n    const value = batchConcat(rows);\n    return {value, recurse: false};\n  }\n\n  // the example row is an object, so recurse into it.\n  return {value: null, recurse: true};\n}\n\n/**\n * Assembles a list of same-shaped numbers, number arrays, or Tensors\n * into a single new Tensor where axis 0 is the batch dimension.\n */\nfunction batchConcat<T extends(TensorLike | tf.Tensor)>(arrays: T[]):\n    tf.Tensor {\n  if (arrays.length === 0) {\n    // We can't return an empty Tensor because we don't know the element shape.\n    throw new Error('Can\\'t make a batch of zero elements.');\n  }\n\n  if (arrays[0] instanceof tf.Tensor) {\n    // Input is an array of Tensors\n    return tf.stack(arrays as tf.Tensor[]);\n  } else {\n    // Input is a possibly-nested array of numbers.\n    return tf.tensor(arrays as TensorLike);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {Dataset} from '../dataset';\nimport {DataSource} from '../datasource';\nimport {LazyIterator} from '../iterators/lazy_iterator';\n\n/**\n * Represents a potentially large collection of text lines.\n *\n * The results are not batched.\n */\nexport class TextLineDataset extends Dataset<string> {\n  /**\n   * Create a `TextLineDataset`.\n   *\n   * @param input A `DataSource` providing a chunked, UTF8-encoded byte stream.\n   */\n  constructor(protected readonly input: DataSource) {\n    super();\n  }\n\n  async iterator(): Promise<LazyIterator<string>> {\n    const inputIterator = await this.input.iterator();\n    const utf8Iterator = inputIterator.decodeUTF8();\n    const lineIterator = utf8Iterator.split('\\n').map(line => {\n      // Windows/DOS format text file has extra line breaker at the end of line.\n      if (line.endsWith('\\r')) {\n        line = line.slice(0, -1);\n      }\n      return line;\n    });\n    return lineIterator;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {TensorContainer, util} from '@tensorflow/tfjs-core';\nimport {Dataset} from '../dataset';\nimport {DataSource} from '../datasource';\nimport {LazyIterator} from '../iterators/lazy_iterator';\nimport {ColumnConfig, CSVConfig} from '../types';\nimport {TextLineDataset} from './text_line_dataset';\n\nconst CODE_QUOTE = '\"';\nconst STATE_OUT = Symbol('out');\nconst STATE_FIELD = Symbol('field');\nconst STATE_QUOTE = Symbol('quote');\nconst STATE_QUOTE_AFTER_QUOTE = Symbol('quoteafterquote');\nconst STATE_WITHIN_QUOTE_IN_QUOTE = Symbol('quoteinquote');\n\n/**\n * Represents a potentially large collection of delimited text records.\n *\n * The produced `TensorContainer`s each contain one key-value pair for\n * every column of the table.  When a field is empty in the incoming data, the\n * resulting value is `undefined`, or throw error if it is required.  Values\n * that can be parsed as numbers are emitted as type `number`, other values\n * are parsed as `string`.\n *\n * The results are not batched.\n */\n/** @doc {heading: 'Data', subheading: 'Classes', namespace: 'data'} */\nexport class CSVDataset extends Dataset<TensorContainer> {\n  base: TextLineDataset;\n  private hasHeader = true;\n  private fullColumnNames: string[] = null;\n  private columnNamesValidated = false;\n  private columnConfigs: {[key: string]: ColumnConfig} = null;\n  private configuredColumnsOnly = false;\n  private delimiter = ',';\n  private delimWhitespace = false;\n\n  /**\n   * Returns column names of the csv dataset. If `configuredColumnsOnly` is\n   * true, return column names in `columnConfigs`. If `configuredColumnsOnly` is\n   * false and `columnNames` is provided, `columnNames`. If\n   * `configuredColumnsOnly` is false and `columnNames` is not provided, return\n   * all column names parsed from the csv file. For example usage please go to\n   * `tf.data.csv`.\n   */\n  /** @doc {heading: 'Data', subheading: 'Classes'} */\n  async columnNames() {\n    if (!this.columnNamesValidated) {\n      await this.setColumnNames();\n    }\n    return this.configuredColumnsOnly ? Object.keys(this.columnConfigs) :\n                                        this.fullColumnNames;\n  }\n\n  /* 1) If `columnNames` is provided as string[], use this string[] as output\n   * keys in corresponding order. The length must match the number of inferred\n   * columns if `hasHeader` is true .\n   * 2) If `columnNames` is not provided, parse header line as `columnNames` if\n   * hasHeader is true. If `hasHeader` is false, throw an error.\n   * 3) If `columnConfigs` is provided, all the keys in `columnConfigs` must\n   * exist in parsed `columnNames`.\n   */\n  private async setColumnNames() {\n    const columnNamesFromFile = await this.maybeReadHeaderLine();\n    if (!this.fullColumnNames && !columnNamesFromFile) {\n      // Throw an error if columnNames is not provided and no header line.\n      throw new Error(\n          'Column names must be provided if there is no header line.');\n    } else if (this.fullColumnNames && columnNamesFromFile) {\n      // Check provided columnNames match header line.\n      util.assert(\n          columnNamesFromFile.length === this.fullColumnNames.length,\n          () => 'The length of provided columnNames (' +\n              this.fullColumnNames.length.toString() +\n              ') does not match the length of the header line read from ' +\n              'file (' + columnNamesFromFile.length.toString() + ').');\n    }\n    if (!this.fullColumnNames) {\n      this.fullColumnNames = columnNamesFromFile;\n    }\n    // Check if there are duplicate column names.\n    const counts: {[key: string]: number} = this.fullColumnNames.reduce(\n        (countAcc: {[key: string]: number}, name) => {\n          countAcc[name] = (countAcc[name] + 1) || 1;\n          return countAcc;\n        },\n        {});\n    const duplicateNames =\n        Object.keys(counts).filter((name) => (counts[name] > 1));\n    util.assert(\n        duplicateNames.length === 0,\n        () => 'Duplicate column names found: ' + duplicateNames.toString());\n    // Check if keys in columnConfigs match columnNames.\n    if (this.columnConfigs) {\n      for (const key of Object.keys(this.columnConfigs)) {\n        const index = this.fullColumnNames.indexOf(key);\n        if (index === -1) {\n          throw new Error(\n              'The key \"' + key +\n              '\" provided in columnConfigs does not match any of the column ' +\n              'names (' + this.fullColumnNames.toString() + ').');\n        }\n      }\n    }\n    this.columnNamesValidated = true;\n  }\n\n  private async maybeReadHeaderLine() {\n    if (this.hasHeader) {\n      const iter = await this.base.iterator();\n      const firstElement = await iter.next();\n      if (firstElement.done) {\n        throw new Error('No data was found for CSV parsing.');\n      }\n      const firstLine: string = firstElement.value;\n      const headers = this.parseRow(firstLine, false);\n      return headers;\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Create a `CSVDataset`.\n   *\n   * @param input A `DataSource` providing a chunked, UTF8-encoded byte stream.\n   * @param csvConfig (Optional) A CSVConfig object that contains configurations\n   *     of reading and decoding from CSV file(s).\n   *\n   *     hasHeader: (Optional) A boolean value that indicates whether the first\n   *     row of provided CSV file is a header line with column names, and should\n   *     not be included in the data. Defaults to `true`.\n   *\n   *     columnNames: (Optional) A list of strings that corresponds to\n   *     the CSV column names, in order. If provided, it ignores the column\n   *     names inferred from the header row. If not provided, infers the column\n   *     names from the first row of the records. If hasHeader is false and\n   *     columnNames is not provided, this method throws an error.\n   *\n   *     columnConfigs: (Optional) A dictionary whose key is column names, value\n   *     is an object stating if this column is required, column's data type,\n   *     default value, and if this column is label. If provided, keys must\n   *     correspond to names provided in columnNames or inferred from the file\n   *     header lines. If isLabel is true any column, returns an array of two\n   *     items: the first item is a dict of features key/value pairs, the second\n   *     item is a dict of labels key/value pairs. If no feature is marked as\n   *     label, returns a dict of features only.\n   *\n   *     configuredColumnsOnly (Optional) If true, only columns provided in\n   *     columnConfigs will be parsed and provided during iteration.\n   *\n   *     delimiter (Optional) The string used to parse each line of the input\n   *     file. Defaults to `,`.\n   */\n  constructor(protected readonly input: DataSource, csvConfig?: CSVConfig) {\n    super();\n    this.base = new TextLineDataset(input);\n    if (!csvConfig) {\n      csvConfig = {};\n    }\n    this.hasHeader = csvConfig.hasHeader === false ? false : true;\n    this.fullColumnNames = csvConfig.columnNames;\n    this.columnConfigs = csvConfig.columnConfigs;\n    this.configuredColumnsOnly = csvConfig.configuredColumnsOnly;\n    if (csvConfig.delimWhitespace) {\n      util.assert(\n          csvConfig.delimiter == null,\n          () =>\n              'Delimiter should not be provided when delimWhitespace is true.');\n      this.delimWhitespace = true;\n      this.delimiter = ' ';\n    } else {\n      this.delimiter = csvConfig.delimiter ? csvConfig.delimiter : ',';\n    }\n  }\n\n  async iterator(): Promise<LazyIterator<TensorContainer>> {\n    if (!this.columnNamesValidated) {\n      await this.setColumnNames();\n    }\n    let lines = await this.base.iterator();\n    if (this.hasHeader) {\n      // We previously read the first line to get the columnNames.\n      // Now that we're providing data, skip it.\n      lines = lines.skip(1);\n    }\n    return lines.map(x => this.makeDataElement(x));\n  }\n\n  makeDataElement(line: string): TensorContainer {\n    const values = this.parseRow(line);\n    const features: {[key: string]: TensorContainer} = {};\n    const labels: {[key: string]: TensorContainer} = {};\n\n    for (let i = 0; i < this.fullColumnNames.length; i++) {\n      const key = this.fullColumnNames[i];\n      const config = this.columnConfigs ? this.columnConfigs[key] : null;\n      if (this.configuredColumnsOnly && !config) {\n        // This column is not selected.\n        continue;\n      } else {\n        const value = values[i];\n        let parsedValue = null;\n        if (value === '') {\n          // If default value is provided, use it. If default value is not\n          // provided, set as undefined.\n          if (config && config.default !== undefined) {\n            parsedValue = config.default;\n          } else if (config && (config.required || config.isLabel)) {\n            throw new Error(\n                `Required column ${key} is empty in this line: ${line}`);\n          } else {\n            parsedValue = undefined;\n          }\n        } else {\n          // A value is present, so parse it based on type\n          const valueAsNum = Number(value);\n          if (isNaN(valueAsNum)) {\n            // The value is a string and this column is declared as boolean\n            // in config, parse it as boolean.\n            if (config && config.dtype === 'bool') {\n              parsedValue = this.getBoolean(value);\n            } else {\n              // Set value as string\n              parsedValue = value;\n            }\n          } else if (!config || !config.dtype) {\n            // If this value is a number and no type config is provided, return\n            // it as number.\n            parsedValue = valueAsNum;\n          } else {\n            // If this value is a number and data type is provided, parse it\n            // according to provided data type.\n            switch (config.dtype) {\n              case 'float32':\n                parsedValue = valueAsNum;\n                break;\n              case 'int32':\n                parsedValue = Math.floor(valueAsNum);\n                break;\n              case 'bool':\n                parsedValue = this.getBoolean(value);\n                break;\n              default:\n                parsedValue = valueAsNum;\n            }\n          }\n        }\n        // Check if this column is label.\n        (config && config.isLabel) ? labels[key] = parsedValue :\n                                     features[key] = parsedValue;\n      }\n    }\n    // If label exists, return an object of features and labels as {xs:features,\n    // ys:labels}, otherwise return features only.\n    if (Object.keys(labels).length === 0) {\n      return features;\n\n    } else {\n      return {xs: features, ys: labels};\n    }\n  }\n\n  private getBoolean(value: string): number {\n    if (value === '1' || value.toLowerCase() === 'true') {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n\n  // adapted from https://beta.observablehq.com/@mbostock/streaming-csv\n  private parseRow(line: string, validateElementCount = true): string[] {\n    const result: string[] = [];\n    let readOffset = 0;\n    const readLength = line.length;\n    let currentState = STATE_OUT;\n    // Goes through the line to parse quote.\n    for (let i = 0; i < readLength; i++) {\n      switch (currentState) {\n        // Before enter a new field\n        case STATE_OUT:\n          switch (line.charAt(i)) {\n            // Enter a quoted field\n            case CODE_QUOTE:\n              readOffset = i + 1;\n              currentState = STATE_QUOTE;\n              break;\n            // Read an empty field\n            case this.delimiter:\n              readOffset = i + 1;\n              // If delimiter is white space and configured to collapse\n              // multiple white spaces, ignore this white space.\n              if (this.delimiter === ' ' && this.delimWhitespace) {\n                break;\n              }\n              result.push('');\n              currentState = STATE_OUT;\n              break;\n            // Enter an unquoted field\n            default:\n              currentState = STATE_FIELD;\n              readOffset = i;\n              break;\n          }\n          break;\n        // In an unquoted field\n        case STATE_FIELD:\n          switch (line.charAt(i)) {\n            // Exit an unquoted field, add it to result\n            case this.delimiter:\n              result.push(line.substring(readOffset, i));\n              currentState = STATE_OUT;\n              readOffset = i + 1;\n              break;\n            default:\n          }\n          break;\n        // In a quoted field\n        case STATE_QUOTE:\n          switch (line.charAt(i)) {\n            // Read a quote after a quote\n            case CODE_QUOTE:\n              currentState = STATE_QUOTE_AFTER_QUOTE;\n              break;\n            default:\n          }\n          break;\n        // This state means it's right after a second quote in a field\n        case STATE_QUOTE_AFTER_QUOTE:\n          switch (line.charAt(i)) {\n            // Finished a quoted field\n            case this.delimiter:\n              result.push(line.substring(readOffset, i - 1));\n              currentState = STATE_OUT;\n              readOffset = i + 1;\n              break;\n            // Finished a quoted part in a quoted field\n            case CODE_QUOTE:\n              currentState = STATE_QUOTE;\n              break;\n            // In a quoted part in a quoted field\n            default:\n              currentState = STATE_WITHIN_QUOTE_IN_QUOTE;\n              break;\n          }\n          break;\n        case STATE_WITHIN_QUOTE_IN_QUOTE:\n          switch (line.charAt(i)) {\n            // Exit a quoted part in a quoted field\n            case CODE_QUOTE:\n              currentState = STATE_QUOTE;\n              break;\n            default:\n          }\n          break;\n        default:\n      }\n    }\n    // Adds last item based on if it is quoted.\n    if (currentState === STATE_QUOTE_AFTER_QUOTE) {\n      result.push(line.substring(readOffset, readLength - 1));\n    } else {\n      result.push(line.substring(readOffset));\n    }\n    // Check if each row has the same number of elements as column names.\n    if (validateElementCount && result.length !== this.fullColumnNames.length) {\n      throw new Error(`Invalid row in csv file. Should have ${\n          this.fullColumnNames.length} elements in a row, but got ${result}`);\n    }\n    return result;\n  }\n}\n\n// TODO(soergel): add more basic datasets for parity with tf.data\n// tf.data.FixedLengthRecordDataset()\n// tf.data.TFRecordDataset()\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {env, Tensor, tensor, Tensor2D, Tensor3D, TensorContainer, util} from '@tensorflow/tfjs-core';\nimport {MicrophoneConfig} from '../types';\nimport {LazyIterator} from './lazy_iterator';\n\n/**\n * Provide a stream of tensors from microphone audio stream. The tensors are\n * representing audio data as frequency-domain spectrogram generated with\n * browser's native FFT. Tensors representing time-domain waveform is available\n * based on configuration. Only works in browser environment.\n */\nexport class MicrophoneIterator extends LazyIterator<TensorContainer> {\n  private isClosed = false;\n  private stream: MediaStream;\n  private readonly fftSize: number;\n  private readonly columnTruncateLength: number;\n  private freqData: Float32Array;\n  private timeData: Float32Array;\n  private readonly numFrames: number;\n  private analyser: AnalyserNode;\n  private audioContext: AudioContext;\n  private sampleRateHz: number;\n  private readonly audioTrackConstraints: MediaTrackConstraints;\n  private readonly smoothingTimeConstant: number;\n  private readonly includeSpectrogram: boolean;\n  private readonly includeWaveform: boolean;\n\n  private constructor(protected readonly microphoneConfig: MicrophoneConfig) {\n    super();\n    this.fftSize = microphoneConfig.fftSize || 1024;\n    const fftSizeLog2 = Math.log2(this.fftSize);\n    if (this.fftSize < 0 || fftSizeLog2 < 4 || fftSizeLog2 > 14 ||\n        !Number.isInteger(fftSizeLog2)) {\n      throw new Error(\n          `Invalid fftSize: it must be a power of 2 between ` +\n          `2 to 4 and 2 to 14, but got ${this.fftSize}`);\n    }\n\n    this.numFrames = microphoneConfig.numFramesPerSpectrogram || 43;\n    this.sampleRateHz = microphoneConfig.sampleRateHz;\n    this.columnTruncateLength =\n        microphoneConfig.columnTruncateLength || this.fftSize;\n    this.audioTrackConstraints = microphoneConfig.audioTrackConstraints;\n    this.smoothingTimeConstant = microphoneConfig.smoothingTimeConstant || 0;\n\n    this.includeSpectrogram =\n        microphoneConfig.includeSpectrogram === false ? false : true;\n    this.includeWaveform =\n        microphoneConfig.includeWaveform === true ? true : false;\n    if (!this.includeSpectrogram && !this.includeWaveform) {\n      throw new Error(\n          'Both includeSpectrogram and includeWaveform are false. ' +\n          'At least one type of data should be returned.');\n    }\n  }\n\n  summary() {\n    return `microphone`;\n  }\n\n  // Construct a MicrophoneIterator and start the audio stream.\n  static async create(microphoneConfig: MicrophoneConfig = {}) {\n    if (env().get('IS_NODE')) {\n      throw new Error(\n          'microphone API is only supported in browser environment.');\n    }\n\n    const microphoneIterator = new MicrophoneIterator(microphoneConfig);\n\n    // Call async function start() to initialize the audio stream.\n    await microphoneIterator.start();\n\n    return microphoneIterator;\n  }\n\n  // Start the audio stream and FFT.\n  async start(): Promise<void> {\n    try {\n      this.stream = await navigator.mediaDevices.getUserMedia({\n        audio: this.audioTrackConstraints == null ? true :\n                                                    this.audioTrackConstraints,\n        video: false\n      });\n    } catch (e) {\n      throw new Error(\n          `Error thrown while initializing video stream: ${e.message}`);\n    }\n\n    if (!this.stream) {\n      throw new Error('Could not obtain audio from microphone.');\n    }\n\n    const ctxConstructor =\n        // tslint:disable-next-line:no-any\n        (window as any).AudioContext || (window as any).webkitAudioContext;\n    this.audioContext = new ctxConstructor();\n\n    if (!this.sampleRateHz) {\n      // If sample rate is not provided, use the available sample rate on\n      // device.\n      this.sampleRateHz = this.audioContext.sampleRate;\n    } else if (this.audioContext.sampleRate !== this.sampleRateHz) {\n      throw new Error(\n          `Mismatch in sampling rate: ` +\n          `Expected: ${this.sampleRateHz}; ` +\n          `Actual: ${this.audioContext.sampleRate}`);\n    }\n\n    const streamSource = this.audioContext.createMediaStreamSource(this.stream);\n    this.analyser = this.audioContext.createAnalyser();\n    this.analyser.fftSize = this.fftSize * 2;\n    this.analyser.smoothingTimeConstant = this.smoothingTimeConstant;\n    streamSource.connect(this.analyser);\n    this.freqData = new Float32Array(this.fftSize);\n    this.timeData = new Float32Array(this.fftSize);\n    return;\n  }\n\n  async next(): Promise<IteratorResult<TensorContainer>> {\n    if (this.isClosed) {\n      return {value: null, done: true};\n    }\n\n    let spectrogramTensor: Tensor;\n    let waveformTensor: Tensor;\n\n    const audioDataQueue = await this.getAudioData();\n    if (this.includeSpectrogram) {\n      const freqData = this.flattenQueue(audioDataQueue.freqDataQueue);\n      spectrogramTensor = this.getTensorFromAudioDataArray(\n          freqData, [this.numFrames, this.columnTruncateLength, 1]);\n    }\n    if (this.includeWaveform) {\n      const timeData = this.flattenQueue(audioDataQueue.timeDataQueue);\n      waveformTensor = this.getTensorFromAudioDataArray(\n          timeData, [this.numFrames * this.fftSize, 1]);\n    }\n\n    return {\n      value: {'spectrogram': spectrogramTensor, 'waveform': waveformTensor},\n      done: false\n    };\n  }\n\n  // Capture one result from the audio stream, and extract the value from\n  // iterator.next() result.\n  async capture(): Promise<{spectrogram: Tensor3D, waveform: Tensor2D}> {\n    return (await this.next()).value as\n        {spectrogram: Tensor3D, waveform: Tensor2D};\n  }\n\n  private async getAudioData():\n      Promise<{freqDataQueue: Float32Array[], timeDataQueue: Float32Array[]}> {\n    const freqDataQueue: Float32Array[] = [];\n    const timeDataQueue: Float32Array[] = [];\n    let currentFrames = 0;\n    return new Promise(resolve => {\n      const intervalID = setInterval(() => {\n        if (this.includeSpectrogram) {\n          this.analyser.getFloatFrequencyData(this.freqData);\n          // If the audio stream is initializing, return empty queue.\n          if (this.freqData[0] === -Infinity) {\n            resolve({freqDataQueue, timeDataQueue});\n          }\n          freqDataQueue.push(this.freqData.slice(0, this.columnTruncateLength));\n        }\n        if (this.includeWaveform) {\n          this.analyser.getFloatTimeDomainData(this.timeData);\n          timeDataQueue.push(this.timeData.slice());\n        }\n\n        // Clean interval and return when all frames have been collected\n        if (++currentFrames === this.numFrames) {\n          clearInterval(intervalID);\n          resolve({freqDataQueue, timeDataQueue});\n        }\n      }, this.fftSize / this.sampleRateHz * 1e3);\n    });\n  }\n\n  // Stop the audio stream and pause the iterator.\n  stop(): void {\n    if (!this.isClosed) {\n      this.isClosed = true;\n      this.analyser.disconnect();\n      this.audioContext.close();\n      if (this.stream != null && this.stream.getTracks().length > 0) {\n        this.stream.getTracks()[0].stop();\n      }\n    }\n  }\n\n  // Override toArray() function to prevent collecting.\n  toArray(): Promise<Tensor[]> {\n    throw new Error('Can not convert infinite audio stream to array.');\n  }\n\n  // Return audio sampling rate in Hz\n  getSampleRate(): number {\n    return this.sampleRateHz;\n  }\n\n  private flattenQueue(queue: Float32Array[]): Float32Array {\n    const frameSize = queue[0].length;\n    const freqData = new Float32Array(queue.length * frameSize);\n    queue.forEach((data, i) => freqData.set(data, i * frameSize));\n    return freqData;\n  }\n\n  private getTensorFromAudioDataArray(freqData: Float32Array, shape: number[]):\n      Tensor {\n    const vals = new Float32Array(util.sizeFromShape(shape));\n    // If the data is less than the output shape, the rest is padded with zeros.\n    vals.set(freqData, vals.length - freqData.length);\n    return tensor(vals, shape);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {browser, env, image, tensor1d, Tensor1D, tensor2d, Tensor2D, Tensor3D, Tensor4D, tidy, util} from '@tensorflow/tfjs-core';\nimport {WebcamConfig} from '../types';\nimport {LazyIterator} from './lazy_iterator';\n\n/**\n * Provide a stream of image tensors from webcam video stream. Only works in\n * browser environment.\n */\nexport class WebcamIterator extends LazyIterator<Tensor3D> {\n  private isClosed = true;\n  private stream: MediaStream;\n  private resize = false;\n  private cropSize: [number, number];\n  private cropBox: Tensor2D;\n  private cropBoxInd: Tensor1D;\n\n  private constructor(\n      protected readonly webcamVideoElement: HTMLVideoElement,\n      protected readonly webcamConfig: WebcamConfig) {\n    super();\n    if (this.needToResize()) {\n      this.resize = true;\n      this.cropSize =\n          [this.webcamConfig.resizeHeight, this.webcamConfig.resizeWidth];\n      this.cropBoxInd = tensor1d([0], 'int32');\n      if (this.webcamConfig.centerCrop) {\n        // Calculate the box based on resizing shape.\n        const widthCroppingRatio =\n            this.webcamConfig.resizeWidth * 1.0 / this.webcamVideoElement.width;\n        const heightCroppingRatio = this.webcamConfig.resizeHeight * 1.0 /\n            this.webcamVideoElement.height;\n        const widthCropStart = (1 - widthCroppingRatio) / 2;\n        const heightCropStart = (1 - heightCroppingRatio) / 2;\n        const widthCropEnd = widthCropStart + widthCroppingRatio;\n        const heightCropEnd = heightCroppingRatio + heightCropStart;\n        this.cropBox = tensor2d(\n            [heightCropStart, widthCropStart, heightCropEnd, widthCropEnd],\n            [1, 4]);\n      } else {\n        this.cropBox = tensor2d([0, 0, 1, 1], [1, 4]);\n      }\n    }\n  }\n\n  summary() {\n    return `webcam`;\n  }\n\n  // Construct a WebcamIterator and start it's video stream.\n  static async create(\n      webcamVideoElement?: HTMLVideoElement, webcamConfig: WebcamConfig = {}) {\n    if (env().get('IS_NODE')) {\n      throw new Error(\n          'tf.data.webcam is only supported in browser environment.');\n    }\n\n    if (!webcamVideoElement) {\n      // If webcam video element is not provided, create a hidden video element\n      // with provided width and height.\n      webcamVideoElement = document.createElement('video');\n      if (!webcamConfig.resizeWidth || !webcamConfig.resizeHeight) {\n        throw new Error(\n            'Please provide webcam video element, or resizeWidth and ' +\n            'resizeHeight to create a hidden video element.');\n      }\n      webcamVideoElement.width = webcamConfig.resizeWidth;\n      webcamVideoElement.height = webcamConfig.resizeHeight;\n    }\n    const webcamIterator = new WebcamIterator(webcamVideoElement, webcamConfig);\n\n    // Call async function to initialize the video stream.\n    await webcamIterator.start();\n\n    return webcamIterator;\n  }\n\n  // Async function to start video stream.\n  async start(): Promise<void> {\n    if (this.webcamConfig.facingMode) {\n      util.assert(\n          (this.webcamConfig.facingMode === 'user') ||\n              (this.webcamConfig.facingMode === 'environment'),\n          () =>\n              `Invalid webcam facing mode: ${this.webcamConfig.facingMode}. ` +\n              `Please provide 'user' or 'environment'`);\n    }\n\n    try {\n      this.stream = await navigator.mediaDevices.getUserMedia({\n        video: {\n          deviceId: this.webcamConfig.deviceId,\n          facingMode: this.webcamConfig.facingMode ?\n              this.webcamConfig.facingMode :\n              'user',\n          width: this.webcamVideoElement.width,\n          height: this.webcamVideoElement.height\n        }\n      });\n    } catch (e) {\n      // Modify the error message but leave the stack trace intact\n      e.message = `Error thrown while initializing video stream: ${e.message}`;\n      throw e;\n    }\n\n    if (!this.stream) {\n      throw new Error('Could not obtain video from webcam.');\n    }\n\n    // Older browsers may not have srcObject\n    try {\n      this.webcamVideoElement.srcObject = this.stream;\n    } catch (error) {\n      console.log(error);\n      this.webcamVideoElement.src = window.URL.createObjectURL(this.stream);\n    }\n    // Start the webcam video stream\n    this.webcamVideoElement.play();\n\n    this.isClosed = false;\n\n    return new Promise<void>(resolve => {\n      // Add event listener to make sure the webcam has been fully initialized.\n      this.webcamVideoElement.onloadedmetadata = () => {\n        resolve();\n      };\n    });\n  }\n\n  async next(): Promise<IteratorResult<Tensor3D>> {\n    if (this.isClosed) {\n      return {value: null, done: true};\n    }\n\n    let img;\n    try {\n      img = browser.fromPixels(this.webcamVideoElement);\n    } catch (e) {\n      throw new Error(\n          `Error thrown converting video to pixels: ${JSON.stringify(e)}`);\n    }\n    if (this.resize) {\n      try {\n        return {value: this.cropAndResizeFrame(img), done: false};\n      } catch (e) {\n        throw new Error(`Error thrown cropping the video: ${e.message}`);\n      } finally {\n        img.dispose();\n      }\n    } else {\n      return {value: img, done: false};\n    }\n  }\n\n  private needToResize() {\n    // If resizeWidth and resizeHeight are provided, and different from the\n    // width and height of original HTMLVideoElement, then resizing and cropping\n    // is required.\n    if (this.webcamConfig.resizeWidth && this.webcamConfig.resizeHeight &&\n        (this.webcamVideoElement.width !== this.webcamConfig.resizeWidth ||\n         this.webcamVideoElement.height !== this.webcamConfig.resizeHeight)) {\n      return true;\n    }\n    return false;\n  }\n\n  // Cropping and resizing each frame based on config\n  cropAndResizeFrame(img: Tensor3D): Tensor3D {\n    return tidy(() => {\n      const expandedImage: Tensor4D = img.toFloat().expandDims(0);\n      let resizedImage;\n      resizedImage = image.cropAndResize(\n          expandedImage, this.cropBox, this.cropBoxInd, this.cropSize,\n          'bilinear');\n      // Extract image from batch cropping.\n      const shape = resizedImage.shape;\n      return resizedImage.reshape(shape.slice(1) as [number, number, number]);\n    });\n  }\n\n  // Capture one frame from the video stream, and extract the value from\n  // iterator.next() result.\n  async capture(): Promise<Tensor3D> {\n    return (await this.next()).value;\n  }\n\n  // Stop the video stream and pause webcam iterator.\n  stop(): void {\n    const tracks = this.stream.getTracks();\n\n    tracks.forEach(track => track.stop());\n\n    try {\n      this.webcamVideoElement.srcObject = null;\n    } catch (error) {\n      console.log(error);\n      this.webcamVideoElement.src = null;\n    }\n    this.isClosed = true;\n  }\n\n  // Override toArray() function to prevent collecting.\n  toArray(): Promise<Tensor3D[]> {\n    throw new Error('Can not convert infinite video stream to array.');\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {ByteChunkIterator} from './iterators/byte_chunk_iterator';\n\n/**\n * Represents a data source readable as a stream of binary data chunks.\n *\n * Because `Dataset`s can be read repeatedly (via `Dataset.iterator()`), this\n * provides a means to repeatedly create streams from the underlying data\n * sources.\n */\nexport abstract class DataSource {\n  /**\n   * Obtain a new stream of binary data chunks.\n   *\n   * Starts the new stream from the beginning of the data source, even if other\n   * streams have been obtained previously.\n   */\n  abstract async iterator(): Promise<ByteChunkIterator>;\n\n  // TODO(soergel): consider chainable Dataset construction here\n}\n\n// TODO(soergel): consider convenience factory functions here\n// in combination with chainable source->dataset above, e.g.:\n// tf.data.url(...).asCsvDataset().shuffle().batch()\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {LazyIterator, OneToManyIterator} from './lazy_iterator';\n\nexport abstract class StringIterator extends LazyIterator<string> {\n  /**\n   * Splits a string stream on a given separator.\n   *\n   * It is assumed that the incoming chunk boundaries have no semantic meaning,\n   * so conceptually the incoming stream is treated simply as the concatenation\n   * of its elements.\n   *\n   * The outgoing stream provides chunks corresponding to the results of the\n   * standard string split() operation (even if such a chunk spanned incoming\n   * chunks).  The separators are not included.\n   *\n   * A typical usage is to split a text file (represented as a stream with\n   * arbitrary chunk boundaries) into lines.\n   *\n   * @param upstream A readable stream of strings that can be treated as\n   *   concatenated.\n   * @param separator A character to split on.\n   */\n  split(separator: string): StringIterator {\n    return new SplitIterator(this, separator);\n  }\n}\n\n// ============================================================================\n// The following private classes serve to implement the chainable methods\n// on StringIterator.  Unfortunately they can't be placed in separate files, due\n// to resulting trouble with circular imports.\n// ============================================================================\n\n// We wanted multiple inheritance, e.g.\n//   class SplitIterator extends QueueIterator<string>, StringIterator\n// but the TypeScript mixin approach is a bit hacky, so we take this adapter\n// approach instead.\n\nclass SplitIterator extends StringIterator {\n  private impl: SplitIteratorImpl;\n\n  constructor(protected upstream: LazyIterator<string>, separator: string) {\n    super();\n    this.impl = new SplitIteratorImpl(upstream, separator);\n  }\n\n  summary() {\n    return this.impl.summary();\n  }\n\n  async next() {\n    return this.impl.next();\n  }\n}\n\nclass SplitIteratorImpl extends OneToManyIterator<string> {\n  // A partial string at the end of an upstream chunk\n  carryover = '';\n\n  constructor(\n      protected upstream: LazyIterator<string>, protected separator: string) {\n    super();\n  }\n\n  summary() {\n    return `${this.upstream.summary()} -> Split('${this.separator}')`;\n  }\n\n  async pump(): Promise<boolean> {\n    const chunkResult = await this.upstream.next();\n    if (chunkResult.done) {\n      if (this.carryover === '') {\n        return false;\n      }\n\n      // Pretend that the pump succeeded in order to emit the small last batch.\n      // The next pump() call will actually fail.\n      this.outputQueue.push(this.carryover);\n      this.carryover = '';\n      return true;\n    }\n    const lines = chunkResult.value.split(this.separator);\n    // Note the behavior: \" ab \".split(' ') === ['', 'ab', '']\n    // Thus the carryover may be '' if the separator falls on a chunk\n    // boundary; this produces the correct result.\n\n    lines[0] = this.carryover + lines[0];\n    for (const line of lines.slice(0, -1)) {\n      this.outputQueue.push(line);\n    }\n    this.carryover = lines[lines.length - 1];\n\n    return true;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {env} from '@tensorflow/tfjs-core';\nimport {LazyIterator, OneToManyIterator} from './lazy_iterator';\nimport {StringIterator} from './string_iterator';\n\nexport abstract class ByteChunkIterator extends LazyIterator<Uint8Array> {\n  /**\n   * Decode a stream of UTF8-encoded byte arrays to a stream of strings.\n   *\n   * The byte arrays producetd from the ByteChunkIterator on which this is\n   * called will be interpreted as concatenated.  No assumptions are made about\n   * the boundaries of the incoming chunks, so a multi-byte UTF8 encoding of a\n   * character may span the boundary between chunks.  This naturally happens,\n   * for instance, when reading fixed-size byte arrays from a file.\n   */\n  decodeUTF8(): StringIterator {\n    return new Utf8Iterator(this);\n  }\n}\n\n// ============================================================================\n// The following private classes serve to implement the chainable methods\n// on ByteChunkIterator.  Unfortunately they can't be placed in separate files,\n// due to resulting trouble with circular imports.\n// ============================================================================\n\n// We wanted multiple inheritance, e.g.\n//   class Utf8Iterator extends QueueIterator<string>, StringIterator\n// but the TypeScript mixin approach is a bit hacky, so we take this adapter\n// approach instead.\n\nclass Utf8Iterator extends StringIterator {\n  private impl: Utf8IteratorImpl;\n\n  constructor(protected upstream: LazyIterator<Uint8Array>) {\n    super();\n    this.impl = new Utf8IteratorImpl(upstream);\n  }\n\n  summary() {\n    return this.impl.summary();\n  }\n\n  async next() {\n    return this.impl.next();\n  }\n}\n\n/**\n * Decode a stream of UTF8-encoded byte arrays to a stream of strings.\n *\n * This is tricky because the incoming byte array boundaries may disrupt a\n * multi-byte UTF8 character. Thus any incomplete character data at the end of\n * a chunk must be carried over and prepended to the next chunk before\n * decoding. Luckily with native decoder, TextDecoder in browser and\n * string_decoder in node, byte array boundaries are handled automatically.\n *\n * In the context of an input pipeline for machine learning, UTF8 decoding is\n * needed to parse text files containing training examples or prediction\n * requests (e.g., formatted as CSV or JSON). We cannot use the built-in\n * decoding provided by FileReader.readAsText() because here we are in a\n * streaming context, which FileReader does not support.\n *\n * @param upstream A `LazyIterator` of `Uint8Arrays` containing UTF8-encoded\n *   text, which should be interpreted as concatenated.  No assumptions are\n *   made about the boundaries of the incoming chunks, so a multi-byte UTF8\n *   encoding of a character may span the boundary between chunks.  This\n *   naturally happens, for instance, when reading fixed-size byte arrays from a\n *   file.\n */\nclass Utf8IteratorImpl extends OneToManyIterator<string> {\n  // `decoder` as `any` here to dynamically assign value based on the\n  // environment.\n  // tslint:disable-next-line:no-any\n  decoder: any;\n\n  constructor(protected readonly upstream: LazyIterator<Uint8Array>) {\n    super();\n    if (env().get('IS_BROWSER')) {\n      this.decoder = new TextDecoder('utf-8');\n    } else {\n      // tslint:disable-next-line:no-require-imports\n      const {StringDecoder} = require('string_decoder');\n      this.decoder = new StringDecoder('utf8');\n    }\n  }\n  summary() {\n    return `${this.upstream.summary()} -> Utf8`;\n  }\n\n  async pump(): Promise<boolean> {\n    const chunkResult = await this.upstream.next();\n    let chunk;\n    if (chunkResult.done) {\n      return false;\n    } else {\n      chunk = chunkResult.value;\n    }\n\n    let text: string;\n    if (env().get('IS_BROWSER')) {\n      text = this.decoder.decode(chunk, {stream: true});\n    } else {\n      text = this.decoder.write(Buffer.from(chunk.buffer));\n    }\n    this.outputQueue.push(text);\n    return true;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\n// inspired by https://github.com/maxogden/filereader-stream\nimport {env, util} from '@tensorflow/tfjs-core';\nimport {FileElement} from '../types';\nimport {ByteChunkIterator} from './byte_chunk_iterator';\n\nexport interface FileChunkIteratorOptions {\n  /** The byte offset at which to begin reading the File or Blob. Default 0. */\n  offset?: number;\n  /** The number of bytes to read at a time. Default 1MB. */\n  chunkSize?: number;\n}\n\n/**\n * Provide a stream of chunks from a File, Blob, or Uint8Array.\n * @param file The source File, Blob or Uint8Array.\n * @param options Optional settings controlling file reading.\n * @returns a lazy Iterator of Uint8Arrays containing sequential chunks of the\n *   input File, Blob or Uint8Array.\n */\nexport class FileChunkIterator extends ByteChunkIterator {\n  offset: number;\n  chunkSize: number;\n\n  constructor(\n      protected file: FileElement,\n      protected options: FileChunkIteratorOptions = {}) {\n    super();\n    util.assert(\n        (file instanceof Uint8Array) ||\n            (env().get('IS_BROWSER') ?\n                 (file instanceof File || file instanceof Blob) :\n                 false),\n        () => 'FileChunkIterator only supports File, Blob and Uint8Array ' +\n            'right now.');\n    this.offset = options.offset || 0;\n    // default 1MB chunk has tolerable perf on large files\n    this.chunkSize = options.chunkSize || 1024 * 1024;\n  }\n\n  summary() {\n    return `FileChunks ${this.file}`;\n  }\n\n  async next(): Promise<IteratorResult<Uint8Array>> {\n    if (this.offset >= ((this.file instanceof Uint8Array) ?\n                            this.file.byteLength :\n                            this.file.size)) {\n      return {value: null, done: true};\n    }\n    const chunk = new Promise<Uint8Array>((resolve, reject) => {\n      const end = this.offset + this.chunkSize;\n      if (this.file instanceof Uint8Array) {\n        // Note if end > this.uint8Array.byteLength, we just get a small last\n        // chunk.\n        resolve(new Uint8Array(this.file.slice(this.offset, end)));\n      } else {\n        // This branch assumes that this.file type is File or Blob, which\n        // means it is in the browser environment.\n\n        // TODO(soergel): is this a performance issue?\n        const fileReader = new FileReader();\n        fileReader.onload = (event) => {\n          let data: string|ArrayBuffer|Uint8Array = fileReader.result;\n          // Not sure we can trust the return type of\n          // FileReader.readAsArrayBuffer See e.g.\n          // https://github.com/node-file-api/FileReader/issues/2\n          if (data instanceof ArrayBuffer) {\n            data = new Uint8Array(data);\n          }\n          if (!(data instanceof Uint8Array)) {\n            return reject(new TypeError('FileReader returned unknown type.'));\n          }\n          resolve(data);\n        };\n        fileReader.onabort = (event) => {\n          return reject(new Error('Aborted'));\n        };\n        fileReader.onerror = (event) => {\n          return reject(new Error(event.type));\n        };\n        // TODO(soergel): better handle onabort, onerror\n        // Note if end > this.file.size, we just get a small last chunk.\n        const slice = this.file.slice(this.offset, end);\n        // We can't use readAsText here (even if we know the file is text)\n        // because the slice boundary may fall within a multi-byte character.\n        fileReader.readAsArrayBuffer(slice);\n      }\n      this.offset = end;\n    });\n    return {value: (await chunk), done: false};\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {util} from '@tensorflow/tfjs-core';\nimport {FileChunkIterator, FileChunkIteratorOptions} from './file_chunk_iterator';\n\n/**\n * Provide a stream of chunks from a URL.\n *\n * Note this class first downloads the entire file into memory before providing\n * the first element from the stream.  This is because the Fetch API does not\n * yet reliably provide a reader stream for the response body.\n */\nexport async function urlChunkIterator(\n    url: RequestInfo, options: FileChunkIteratorOptions = {}) {\n  let urlString;\n  let requestInit;\n  if ((typeof url) === 'string') {\n    urlString = url as string;\n  } else {\n    urlString = (url as Request).url;\n    requestInit = getRequestInitFromRequest(url as Request);\n  }\n  const response = await util.fetch(urlString, requestInit);\n  if (response.ok) {\n    const uint8Array = new Uint8Array(await response.arrayBuffer());\n    return new FileChunkIterator(uint8Array, options);\n  } else {\n    throw new Error(response.statusText);\n  }\n}\n\n// Generate RequestInit from Request to match tf.util.fetch signature.\nconst getRequestInitFromRequest = (request: Request) => {\n  const init = {\n    method: request.method,\n    headers: request.headers,\n    body: request.body,\n    mode: request.mode,\n    credentials: request.credentials,\n    cache: request.cache,\n    redirect: request.redirect,\n    referrer: request.referrer,\n    integrity: request.integrity,\n  };\n  return init;\n};\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\n// Skip tslint any type check cause this method is aiming to check type of\n// input.\n// tslint:disable-next-line:no-any\nexport function isLocalPath(source: any): boolean {\n  return (typeof source === 'string') && source.substr(0, 7) === 'file://';\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {env} from '@tensorflow/tfjs-core';\nimport {DataSource} from '../datasource';\nimport {ByteChunkIterator} from '../iterators/byte_chunk_iterator';\nimport {FileChunkIterator, FileChunkIteratorOptions} from '../iterators/file_chunk_iterator';\nimport {FileElement} from '../types';\nimport {isLocalPath} from '../util/source_util';\n\n/**\n * Represents a file, blob, or Uint8Array readable as a stream of binary data\n * chunks.\n */\nexport class FileDataSource extends DataSource {\n  /**\n   * Create a `FileDataSource`.\n   *\n   * @param input Local file path, or `File`/`Blob`/`Uint8Array` object to\n   *     read. Local file only works in node environment.\n   * @param options Options passed to the underlying `FileChunkIterator`s,\n   *   such as {chunksize: 1024}.\n   */\n  constructor(\n      protected input: FileElement|string,\n      protected readonly options: FileChunkIteratorOptions = {}) {\n    super();\n  }\n\n  async iterator(): Promise<ByteChunkIterator> {\n    if (isLocalPath(this.input) && env().get('IS_NODE')) {\n      // tslint:disable-next-line:no-require-imports\n      const fs = require('fs');\n      this.input = fs.readFileSync((this.input as string).substr(7));\n    }\n    // TODO(kangyizhang): Add LocalFileChunkIterator to split local streaming\n    // with file in browser.\n    return new FileChunkIterator(this.input as FileElement, this.options);\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {DataSource} from '../datasource';\nimport {ByteChunkIterator} from '../iterators/byte_chunk_iterator';\nimport {FileChunkIteratorOptions} from '../iterators/file_chunk_iterator';\nimport {urlChunkIterator} from '../iterators/url_chunk_iterator';\nimport {isLocalPath} from '../util/source_util';\nimport {FileDataSource} from './file_data_source';\n\n/*\n * Represents a URL readable as a stream of binary data chunks.\n */\nexport class URLDataSource extends DataSource {\n  /**\n   * Create a `URLDataSource`.\n   *\n   * @param url A source URL string, or a `Request` object.\n   * @param options Options passed to the underlying `FileChunkIterator`s,\n   *   such as {chunksize: 1024}.\n   */\n  constructor(\n      protected readonly url: RequestInfo,\n      protected readonly fileOptions: FileChunkIteratorOptions = {}) {\n    super();\n  }\n\n  // TODO(soergel): provide appropriate caching options.  Currently this\n  // will download the URL anew for each call to iterator().  Since we have\n  // to treat the downloaded file as a blob/buffer anyway, we may as well retain\n  // it-- but that raises GC issues.  Also we may want a persistent disk cache.\n  async iterator(): Promise<ByteChunkIterator> {\n    if (isLocalPath(this.url)) {\n      return (new FileDataSource(this.url as string, this.fileOptions))\n          .iterator();\n    } else {\n      return urlChunkIterator(this.url, this.fileOptions);\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n\nimport {TensorContainer} from '@tensorflow/tfjs-core';\nimport {Dataset, datasetFromIteratorFn} from './dataset';\nimport {CSVDataset} from './datasets/csv_dataset';\nimport {iteratorFromFunction} from './iterators/lazy_iterator';\nimport {MicrophoneIterator} from './iterators/microphone_iterator';\nimport {WebcamIterator} from './iterators/webcam_iterator';\nimport {URLDataSource} from './sources/url_data_source';\nimport {CSVConfig, MicrophoneConfig, WebcamConfig} from './types';\n\n/**\n * Create a `CSVDataset` by reading and decoding CSV file(s) from provided URL\n * or local path if it's in Node environment.\n *\n * Note: If isLabel in columnConfigs is `true` for at least one column, the\n * element in returned `CSVDataset` will be an object of\n * `{xs:features, ys:labels}`: xs is a dict of features key/value pairs, ys\n * is a dict of labels key/value pairs. If no column is marked as label,\n * returns a dict of features only.\n *\n * ```js\n * const csvUrl =\n * 'https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv';\n *\n * async function run() {\n *   // We want to predict the column \"medv\", which represents a median value of\n *   // a home (in $1000s), so we mark it as a label.\n *   const csvDataset = tf.data.csv(\n *     csvUrl, {\n *       columnConfigs: {\n *         medv: {\n *           isLabel: true\n *         }\n *       }\n *     });\n *\n *   // Number of features is the number of column names minus one for the label\n *   // column.\n *   const numOfFeatures = (await csvDataset.columnNames()).length - 1;\n *\n *   // Prepare the Dataset for training.\n *   const flattenedDataset =\n *     csvDataset\n *     .map(({xs, ys}) =>\n *       {\n *         // Convert xs(features) and ys(labels) from object form (keyed by\n *         // column name) to array form.\n *         return {xs:Object.values(xs), ys:Object.values(ys)};\n *       })\n *     .batch(10);\n *\n *   // Define the model.\n *   const model = tf.sequential();\n *   model.add(tf.layers.dense({\n *     inputShape: [numOfFeatures],\n *     units: 1\n *   }));\n *   model.compile({\n *     optimizer: tf.train.sgd(0.000001),\n *     loss: 'meanSquaredError'\n *   });\n *\n *   // Fit the model using the prepared Dataset\n *   return model.fitDataset(flattenedDataset, {\n *     epochs: 10,\n *     callbacks: {\n *       onEpochEnd: async (epoch, logs) => {\n *         console.log(epoch + ':' + logs.loss);\n *       }\n *     }\n *   });\n * }\n *\n * await run();\n * ```\n *\n * @param source URL or local path to get CSV file. If it's a local path, it\n * must have prefix `file://` and it only works in node environment.\n * @param csvConfig (Optional) A CSVConfig object that contains configurations\n *     of reading and decoding from CSV file(s).\n */\n/**\n * @doc {\n *   heading: 'Data',\n *   subheading: 'Creation',\n *   namespace: 'data',\n *   configParamIndices: [1]\n *  }\n */\nexport function csv(\n    source: RequestInfo, csvConfig: CSVConfig = {}): CSVDataset {\n  return new CSVDataset(new URLDataSource(source), csvConfig);\n}\n\n/**\n * Create a `Dataset` that produces each element by calling a provided function.\n *\n * Note that repeated iterations over this `Dataset` may produce different\n * results, because the function will be called anew for each element of each\n * iteration.\n *\n * Also, beware that the sequence of calls to this function may be out of order\n * in time with respect to the logical order of the Dataset. This is due to the\n * asynchronous lazy nature of stream processing, and depends on downstream\n * transformations (e.g. .shuffle()). If the provided function is pure, this is\n * no problem, but if it is a closure over a mutable state (e.g., a traversal\n * pointer), then the order of the produced elements may be scrambled.\n *\n * ```js\n * let i = -1;\n * const func = () =>\n *    ++i < 5 ? {value: i, done: false} : {value: null, done: true};\n * const ds = tf.data.func(func);\n * await ds.forEachAsync(e => console.log(e));\n * ```\n *\n * @param f A function that produces one data element on each call.\n */\nexport function func<T extends TensorContainer>(\n    f: () => IteratorResult<T>| Promise<IteratorResult<T>>): Dataset<T> {\n  const iter = iteratorFromFunction(f);\n  return datasetFromIteratorFn(async () => iter);\n}\n\n/**\n * Create a `Dataset` that produces each element from provided JavaScript\n * generator, which is a function*\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generator_functions),\n * or a function that returns an\n * iterator\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generator_functions).\n *\n * The returned iterator should have `.next()` function that returns element in\n * format of `{value: TensorContainer, done:boolean}`.\n *\n * Example of creating a dataset from an iterator factory:\n * ```js\n * function makeIterator() {\n *   const numElements = 10;\n *   let index = 0;\n *\n *   const iterator = {\n *     next: () => {\n *       let result;\n *       if (index < numElements) {\n *         result = {value: index, done: false};\n *         index++;\n *         return result;\n *       }\n *       return {value: index, done: true};\n *     }\n *   };\n *   return iterator;\n * }\n * const ds = tf.data.generator(makeIterator);\n * await ds.forEachAsync(e => console.log(e));\n * ```\n *\n * Example of creating a dataset from a generator:\n * ```js\n * function* dataGenerator() {\n *   const numElements = 10;\n *   let index = 0;\n *   while (index < numElements) {\n *     const x = index;\n *     index++;\n *     yield x;\n *   }\n * }\n *\n * const ds = tf.data.generator(dataGenerator);\n * await ds.forEachAsync(e => console.log(e));\n * ```\n *\n * @param generator A Javascript generator function that returns a JavaScript\n *     iterator.\n */\n/**\n * @doc {\n *   heading: 'Data',\n *   subheading: 'Creation',\n *   namespace: 'data',\n *   configParamIndices: [1]\n *  }\n */\nexport function generator<T extends TensorContainer>(\n    generator: () => Iterator<T>| Promise<Iterator<T>>): Dataset<T> {\n  return datasetFromIteratorFn(async () => {\n    const gen = await generator();\n    return iteratorFromFunction(() => gen.next());\n  });\n}\n\n/**\n * Create an iterator that generate `Tensor`s from webcam video stream. This API\n * only works in Browser environment when the device has webcam.\n *\n * Note: this code snippet only works when the device has a webcam. It will\n * request permission to open the webcam when running.\n * ```js\n * const videoElement = document.createElement('video');\n * videoElement.width = 100;\n * videoElement.height = 100;\n * const cam = await tf.data.webcam(videoElement);\n * const img = await cam.capture();\n * img.print();\n * cam.stop();\n * ```\n *\n * @param webcamVideoElement A `HTMLVideoElement` used to play video from\n *     webcam. If this element is not provided, a hidden `HTMLVideoElement` will\n *     be created. In that case, `resizeWidth` and `resizeHeight` must be\n *     provided to set the generated tensor shape.\n * @param webcamConfig A `WebcamConfig` object that contains configurations of\n *     reading and manipulating data from webcam video stream.\n */\n/**\n * @doc {\n *   heading: 'Data',\n *   subheading: 'Creation',\n *   namespace: 'data',\n *   ignoreCI: true\n *  }\n */\nexport async function webcam(\n    webcamVideoElement?: HTMLVideoElement,\n    webcamConfig?: WebcamConfig): Promise<WebcamIterator> {\n  return WebcamIterator.create(webcamVideoElement, webcamConfig);\n}\n\n/**\n * Create an iterator that generate frequency-domain spectrogram `Tensor`s from\n * microphone audio stream with browser's native FFT. This API only works in\n * browser environment when the device has microphone.\n *\n * Note: this code snippet only works when the device has a microphone. It will\n * request permission to open the microphone when running.\n * ```js\n * const mic = await tf.data.microphone({\n *   fftSize: 1024,\n *   columnTruncateLength: 232,\n *   numFramesPerSpectrogram: 43,\n *   sampleRateHz:44100,\n *   includeSpectrogram: true,\n *   includeWaveform: true\n * });\n * const audioData = await mic.capture();\n * const spectrogramTensor = audioData.spectrogram;\n * spectrogramTensor.print();\n * const waveformTensor = audioData.waveform;\n * waveformTensor.print();\n * mic.stop();\n * ```\n *\n * @param microphoneConfig A `MicrophoneConfig` object that contains\n *     configurations of reading audio data from microphone.\n */\n/**\n * @doc {\n *   heading: 'Data',\n *   subheading: 'Creation',\n *   namespace: 'data',\n *   ignoreCI: true\n *  }\n */\nexport async function microphone(microphoneConfig?: MicrophoneConfig):\n    Promise<MicrophoneIterator> {\n  return MicrophoneIterator.create(microphoneConfig);\n}\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","module.exports = true;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = require('./_hide');\n","module.exports = {};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function eventListener() {\n      if (errorListener !== undefined) {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n    var errorListener;\n\n    // Adding an error listener is not optional because\n    // if an error is thrown on an event emitter we cannot\n    // guarantee that the actual event we are waiting will\n    // be fired. The result could be a silent way to create\n    // memory or file descriptor leaks, which is something\n    // we should avoid.\n    if (name !== 'error') {\n      errorListener = function errorListener(err) {\n        emitter.removeListener(name, eventListener);\n        reject(err);\n      };\n\n      emitter.once('error', errorListener);\n    }\n\n    emitter.once(name, eventListener);\n  });\n}\n","module.exports = require('events').EventEmitter;\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n","var Buffer = require('buffer').Buffer\n\nmodule.exports = function (buf) {\n\t// If the buffer is backed by a Uint8Array, a faster version will work\n\tif (buf instanceof Uint8Array) {\n\t\t// If the buffer isn't a subarray, return the underlying ArrayBuffer\n\t\tif (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n\t\t\treturn buf.buffer\n\t\t} else if (typeof buf.buffer.slice === 'function') {\n\t\t\t// Otherwise we need to get a proper copy\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)\n\t\t}\n\t}\n\n\tif (Buffer.isBuffer(buf)) {\n\t\t// This is the slow version that will work with any Buffer\n\t\t// implementation (even in old browsers)\n\t\tvar arrayCopy = new Uint8Array(buf.length)\n\t\tvar len = buf.length\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tarrayCopy[i] = buf[i]\n\t\t}\n\t\treturn arrayCopy.buffer\n\t} else {\n\t\tthrow new Error('Argument must be a Buffer')\n\t}\n}\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n\t\tif (capability.arraybuffer) {\n\t\t\tbody = toArrayBuffer(Buffer.concat(self._body))\n\t\t} else if (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tvar fetchTimer = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tglobal.clearTimeout(self._fetchTimer)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tglobal.clearTimeout(self._fetchTimer)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","module.exports = {\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Unordered Collection\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","var http = require('http')\nvar url = require('url')\n\nvar https = module.exports\n\nfor (var key in http) {\n  if (http.hasOwnProperty(key)) https[key] = http[key]\n}\n\nhttps.request = function (params, cb) {\n  params = validateParams(params)\n  return http.request.call(this, params, cb)\n}\n\nhttps.get = function (params, cb) {\n  params = validateParams(params)\n  return http.get.call(this, params, cb)\n}\n\nfunction validateParams (params) {\n  if (typeof params === 'string') {\n    params = url.parse(params)\n  }\n  if (!params.protocol) {\n    params.protocol = 'https:'\n  }\n  if (params.protocol !== 'https:') {\n    throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"')\n  }\n  return params\n}\n","import * as https from 'https';\nimport * as tf from '@tensorflow/tfjs';\n\n\nexport const TEXT_DATA_URLS = {\n  'nietzsche': {\n    url:\n        'https://storage.googleapis.com/tfjs-examples/lstm-text-generation/data/nietzsche.txt',\n    needle: 'Nietzsche'\n  },\n  'julesverne': {\n    url:\n        'https://storage.googleapis.com/tfjs-examples/lstm-text-generation/data/t1.verne.txt',\n    needle: 'Jules Verne'\n  },\n  'shakespeare': {\n    url:\n        'https://storage.googleapis.com/tfjs-examples/lstm-text-generation/data/t8.shakespeare.txt',\n    needle: 'Shakespeare'\n  },\n  'tfjs-code': {\n    url: 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.11.7/dist/tf.js',\n    needle: 'TensorFlow.js Code (Compiled, 0.11.7)'\n  }\n}\n\n/**\n * A class for text data.\n *\n * This class manages the following:\n *\n * - Converting training data (as a string) into one-hot encoded vectors.\n * - Drawing random slices from the training data. This is useful for training\n *   models and obtaining the seed text for model-based text generation.\n */\nexport class TextData {\n  /**\n   * Constructor of TextData.\n   *\n   * @param {string} dataIdentifier An identifier for this instance of TextData.\n   * @param {string} textString The training text data.\n   * @param {number} sampleLen Length of each training example, i.e., the input\n   *   sequence length expected by the LSTM model.\n   * @param {number} sampleStep How many characters to skip when going from one\n   *   example of the training data (in `textString`) to the next.\n   */\n  constructor(dataIdentifier, textString, sampleLen, sampleStep) {\n    tf.util.assert(\n        sampleLen > 0,\n        `Expected sampleLen to be a positive integer, but got ${sampleLen}`);\n    tf.util.assert(\n        sampleStep > 0,\n        `Expected sampleStep to be a positive integer, but got ${sampleStep}`);\n\n    if (!dataIdentifier) {\n      throw new Error('Model identifier is not provided.');\n    }\n\n    this.dataIdentifier_ = dataIdentifier;\n\n    this.textString_ = textString;\n    this.textLen_ = textString.length;\n    this.sampleLen_ = sampleLen;\n    this.sampleStep_ = sampleStep;\n\n    this.getCharSet_();\n    this.convertAllTextToIndices_();\n  }\n\n  /**\n   * Get data identifier.\n   *\n   * @returns {string} The data identifier.\n   */\n  dataIdentifier() {\n    return this.dataIdentifier_;\n  }\n\n  /**\n   * Get length of the training text data.\n   *\n   * @returns {number} Length of training text data.\n   */\n  textLen() {\n    return this.textLen_;\n  }\n\n  /**\n   * Get the length of each training example.\n   */\n  sampleLen() {\n    return this.sampleLen_;\n  }\n\n  /**\n   * Get the size of the character set.\n   *\n   * @returns {number} Size of the character set, i.e., how many unique\n   *   characters there are in the training text data.\n   */\n  charSetSize() {\n    return this.charSetSize_;\n  }\n\n  /**\n   * Generate the next epoch of data for training models.\n   *\n   * @param {number} numExamples Number examples to generate.\n   * @returns {[tf.Tensor, tf.Tensor]} `xs` and `ys` Tensors.\n   *   `xs` has the shape of `[numExamples, this.sampleLen, this.charSetSize]`.\n   *   `ys` has the shape of `[numExamples, this.charSetSize]`.\n   */\n  nextDataEpoch(numExamples) {\n    this.generateExampleBeginIndices_();\n\n    if (numExamples == null) {\n      numExamples = this.exampleBeginIndices_.length;\n    }\n\n    const xsBuffer = new tf.TensorBuffer([\n        numExamples, this.sampleLen_, this.charSetSize_]);\n    const ysBuffer  = new tf.TensorBuffer([numExamples, this.charSetSize_]);\n    for (let i = 0; i < numExamples; ++i) {\n      const beginIndex = this.exampleBeginIndices_[\n          this.examplePosition_ % this.exampleBeginIndices_.length];\n      for (let j = 0; j < this.sampleLen_; ++j) {\n        xsBuffer.set(1, i, j, this.indices_[beginIndex + j]);\n      }\n      ysBuffer.set(1, i, this.indices_[beginIndex + this.sampleLen_]);\n      this.examplePosition_++;\n    }\n    return [xsBuffer.toTensor(), ysBuffer.toTensor()];\n  }\n\n  /**\n   * Get the unique character at given index from the character set.\n   *\n   * @param {number} index\n   * @returns {string} The unique character at `index` of the character set.\n   */\n  getFromCharSet(index) {\n    return this.charSet_[index];\n  }\n\n  /**\n   * Convert text string to integer indices.\n   *\n   * @param {string} text Input text.\n   * @returns {number[]} Indices of the characters of `text`.\n   */\n  textToIndices(text) {\n    const indices = [];\n    for (let i = 0; i < text.length; ++i) {\n      indices.push(this.charSet_.indexOf(text[i]));\n    }\n    return indices;\n  }\n\n  /**\n   * Get a random slice of text data.\n   *\n   * @returns {[string, number[]} The string and index representation of the\n   *   same slice.\n   */\n  getRandomSlice() {\n    const startIndex =\n        Math.round(Math.random() * (this.textLen_ - this.sampleLen_ - 1));\n    const textSlice = this.slice_(startIndex, startIndex + this.sampleLen_);\n    return [textSlice, this.textToIndices(textSlice)];\n  }\n\n  /**\n   * Get a slice of the training text data.\n   *\n   * @param {number} startIndex\n   * @param {number} endIndex\n   * @param {bool} useIndices Whether to return the indices instead of string.\n   * @returns {string | Uint16Array} The result of the slicing.\n   */\n  slice_(startIndex, endIndex) {\n    return this.textString_.slice(startIndex, endIndex);\n  }\n\n  /**\n   * Get the set of unique characters from text.\n   */\n  getCharSet_() {\n    this.charSet_ = [];\n    for (let i = 0; i < this.textLen_; ++i) {\n      if (this.charSet_.indexOf(this.textString_[i]) === -1) {\n        this.charSet_.push(this.textString_[i]);\n      }\n    }\n    this.charSetSize_ = this.charSet_.length;\n  }\n\n  /**\n   * Convert all training text to integer indices.\n   */\n  convertAllTextToIndices_() {\n    this.indices_ = new Uint16Array(this.textToIndices(this.textString_));\n  }\n\n  /**\n   * Generate the example-begin indices; shuffle them randomly.\n   */\n  generateExampleBeginIndices_() {\n    // Prepare beginning indices of examples.\n    this.exampleBeginIndices_ = [];\n    for (let i = 0;\n        i < this.textLen_ - this.sampleLen_ - 1;\n        i += this.sampleStep_) {\n      this.exampleBeginIndices_.push(i);\n    }\n\n    // Randomly shuffle the beginning indices.\n    tf.util.shuffle(this.exampleBeginIndices_);\n    this.examplePosition_ = 0;\n  }\n}\n\n/**\n * Get a file by downloading it if necessary.\n *\n * @param {string} sourceURL URL to download the file from.\n * @param {string} destPath Destination file path on local filesystem.\n */\nexport async function maybeDownload(sourceURL, destPath) {\n  const fs = require('fs');\n  return new Promise(async (resolve, reject) => {\n    if (!fs.existsSync(destPath) || fs.lstatSync(destPath).size === 0) {\n      const localZipFile = fs.createWriteStream(destPath);\n      console.log(`Downloading file from ${sourceURL} to ${destPath}...`);\n      https.get(sourceURL, response => {\n        response.pipe(localZipFile);\n        localZipFile.on('finish', () => {\n          localZipFile.close(() => resolve());\n        });\n        localZipFile.on('error', err => reject(err));\n      });\n    } else {\n      return resolve();\n    }\n  });\n}\n","\nimport * as tf from '@tensorflow/tfjs';\nimport {TextData} from './data';\n\n/**\n * Create a model for next-character prediction.\n * @param {number} sampleLen Sampling length: how many characters form the\n *   input to the model.\n * @param {number} charSetSize Size of the character size: how many unique\n *   characters there are.\n * @param {number|numbre[]} lstmLayerSizes Size(s) of the LSTM layers.\n * @return {tf.Model} A next-character prediction model with an input shape\n *   of `[null, sampleLen, charSetSize]` and an output shape of\n *   `[null, charSetSize]`.\n */\nexport function createModel(sampleLen, charSetSize, lstmLayerSizes) {\n  if (!Array.isArray(lstmLayerSizes)) {\n    lstmLayerSizes = [lstmLayerSizes];\n  }\n\n  const model = tf.sequential();\n  for (let i = 0; i < lstmLayerSizes.length; ++i) {\n    const lstmLayerSize = lstmLayerSizes[i];\n    model.add(tf.layers.lstm({\n      units: lstmLayerSize,\n      returnSequences: i < lstmLayerSizes.length - 1,\n      inputShape: i === 0 ? [sampleLen, charSetSize] : undefined\n    }));\n  }\n  model.add(\n      tf.layers.dense({units: charSetSize, activation: 'softmax'}));\n\n  return model;\n}\n\nexport function compileModel(model, learningRate) {\n  const optimizer = tf.train.rmsprop(learningRate);\n  model.compile({optimizer: optimizer, loss: 'categoricalCrossentropy'});\n  console.log(`Compiled model with learning rate ${learningRate}`);\n  model.summary();\n}\n\n/**\n * Train model.\n * @param {tf.Model} model The next-char prediction model, assumed to have an\n *   input shape of `[null, sampleLen, charSetSize]` and an output shape of\n *   `[null, charSetSize]`.\n * @param {TextData} textData The TextData object to use during training.\n * @param {number} numEpochs Number of training epochs.\n * @param {number} examplesPerEpoch Number of examples to draw from the\n *   `textData` object per epoch.\n * @param {number} batchSize Batch size for training.\n * @param {number} validationSplit Validation split for training.\n * @param {tf.CustomCallbackArgs} callbacks Custom callbacks to use during\n *   `model.fit()` calls.\n */\nexport async function fitModel(\n    model, textData, numEpochs, examplesPerEpoch, batchSize, validationSplit,\n    callbacks) {\n  for (let i = 0; i < numEpochs; ++i) {\n    const [xs, ys] = textData.nextDataEpoch(examplesPerEpoch);\n    await model.fit(xs, ys, {\n      epochs: 1,\n      batchSize: batchSize,\n      validationSplit,\n      callbacks\n    });\n    xs.dispose();\n    ys.dispose();\n  }\n}\n\n/**\n * Generate text using a next-char-prediction model.\n *\n * @param {tf.Model} model The model object to be used for the text generation,\n *   assumed to have input shape `[null, sampleLen, charSetSize]` and output\n *   shape `[null, charSetSize]`.\n * @param {number[]} sentenceIndices The character indices in the seed sentence.\n * @param {number} length Length of the sentence to generate.\n * @param {number} temperature Temperature value. Must be a number >= 0 and\n *   <= 1.\n * @param {(char: string) => Promise<void>} onTextGenerationChar An optinoal\n *   callback to be invoked each time a character is generated.\n * @returns {string} The generated sentence.\n */\nexport async function generateText(\n    model, textData, sentenceIndices, length, temperature,\n    onTextGenerationChar) {\n  const sampleLen = model.inputs[0].shape[1];\n  const charSetSize = model.inputs[0].shape[2];\n\n  // Avoid overwriting the original input.\n  sentenceIndices = sentenceIndices.slice();\n\n  let generated = '';\n  while (generated.length < length) {\n    // Encode the current input sequence as a one-hot Tensor.\n    const inputBuffer =\n        new tf.TensorBuffer([1, sampleLen, charSetSize]);\n\n    // Make the one-hot encoding of the seeding sentence.\n    for (let i = 0; i < sampleLen; ++i) {\n      inputBuffer.set(1, 0, i, sentenceIndices[i]);\n    }\n    const input = inputBuffer.toTensor();\n\n    // Call model.predict() to get the probability values of the next\n    // character.\n    const output = model.predict(input);\n\n    // Sample randomly based on the probability values.\n    const winnerIndex = sample(tf.squeeze(output), temperature);\n    const winnerChar = textData.getFromCharSet(winnerIndex);\n    if (onTextGenerationChar != null) {\n      await onTextGenerationChar(winnerChar);\n    }\n\n    generated += winnerChar;\n    sentenceIndices = sentenceIndices.slice(1);\n    sentenceIndices.push(winnerIndex);\n\n    // Memory cleanups.\n    input.dispose();\n    output.dispose();\n  }\n  return generated;\n}\n\n/**\n * Draw a sample based on probabilities.\n *\n * @param {tf.Tensor} probs Predicted probability scores, as a 1D `tf.Tensor` of\n *   shape `[charSetSize]`.\n * @param {tf.Tensor} temperature Temperature (i.e., a measure of randomness\n *   or diversity) to use during sampling. Number be a number > 0, as a Scalar\n *   `tf.Tensor`.\n * @returns {number} The 0-based index for the randomly-drawn sample, in the\n *   range of `[0, charSetSize - 1]`.\n */\nexport function sample(probs, temperature) {\n  return tf.tidy(() => {\n    const logits = tf.div(tf.log(probs), Math.max(temperature, 1e-6));\n    const isNormalized = false;\n    // `logits` is for a multinomial distribution, scaled by the temperature.\n    // We randomly draw a sample from the distribution.\n    return tf.multinomial(logits, 1, null, isNormalized).dataSync()[0];\n  });\n}\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","/*!\r\n * https://github.com/Starcounter-Jack/JSON-Patch\r\n * (c) 2017 Joachim Wester\r\n * MIT license\r\n */\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = function (d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\r\nexport function hasOwnProperty(obj, key) {\r\n    return _hasOwnProperty.call(obj, key);\r\n}\r\nexport function _objectKeys(obj) {\r\n    if (Array.isArray(obj)) {\r\n        var keys = new Array(obj.length);\r\n        for (var k = 0; k < keys.length; k++) {\r\n            keys[k] = \"\" + k;\r\n        }\r\n        return keys;\r\n    }\r\n    if (Object.keys) {\r\n        return Object.keys(obj);\r\n    }\r\n    var keys = [];\r\n    for (var i in obj) {\r\n        if (hasOwnProperty(obj, i)) {\r\n            keys.push(i);\r\n        }\r\n    }\r\n    return keys;\r\n}\r\n;\r\n/**\r\n* Deeply clone the object.\r\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\r\n* @param  {any} obj value to clone\r\n* @return {any} cloned obj\r\n*/\r\nexport function _deepClone(obj) {\r\n    switch (typeof obj) {\r\n        case \"object\":\r\n            return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\r\n        case \"undefined\":\r\n            return null; //this is how JSON.stringify behaves for array items\r\n        default:\r\n            return obj; //no need to clone primitives\r\n    }\r\n}\r\n//3x faster than cached /^\\d+$/.test(str)\r\nexport function isInteger(str) {\r\n    var i = 0;\r\n    var len = str.length;\r\n    var charCode;\r\n    while (i < len) {\r\n        charCode = str.charCodeAt(i);\r\n        if (charCode >= 48 && charCode <= 57) {\r\n            i++;\r\n            continue;\r\n        }\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n/**\r\n* Escapes a json pointer path\r\n* @param path The raw pointer\r\n* @return the Escaped path\r\n*/\r\nexport function escapePathComponent(path) {\r\n    if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\r\n        return path;\r\n    return path.replace(/~/g, '~0').replace(/\\//g, '~1');\r\n}\r\n/**\r\n * Unescapes a json pointer path\r\n * @param path The escaped pointer\r\n * @return The unescaped path\r\n */\r\nexport function unescapePathComponent(path) {\r\n    return path.replace(/~1/g, '/').replace(/~0/g, '~');\r\n}\r\nexport function _getPathRecursive(root, obj) {\r\n    var found;\r\n    for (var key in root) {\r\n        if (hasOwnProperty(root, key)) {\r\n            if (root[key] === obj) {\r\n                return escapePathComponent(key) + '/';\r\n            }\r\n            else if (typeof root[key] === 'object') {\r\n                found = _getPathRecursive(root[key], obj);\r\n                if (found != '') {\r\n                    return escapePathComponent(key) + '/' + found;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return '';\r\n}\r\nexport function getPath(root, obj) {\r\n    if (root === obj) {\r\n        return '/';\r\n    }\r\n    var path = _getPathRecursive(root, obj);\r\n    if (path === '') {\r\n        throw new Error(\"Object not found in root\");\r\n    }\r\n    return '/' + path;\r\n}\r\n/**\r\n* Recursively checks whether an object has any undefined values inside.\r\n*/\r\nexport function hasUndefined(obj) {\r\n    if (obj === undefined) {\r\n        return true;\r\n    }\r\n    if (obj) {\r\n        if (Array.isArray(obj)) {\r\n            for (var i = 0, len = obj.length; i < len; i++) {\r\n                if (hasUndefined(obj[i])) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        else if (typeof obj === \"object\") {\r\n            var objKeys = _objectKeys(obj);\r\n            var objKeysLength = objKeys.length;\r\n            for (var i = 0; i < objKeysLength; i++) {\r\n                if (hasUndefined(obj[objKeys[i]])) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction patchErrorMessageFormatter(message, args) {\r\n    var messageParts = [message];\r\n    for (var key in args) {\r\n        var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\r\n        if (typeof value !== 'undefined') {\r\n            messageParts.push(key + \": \" + value);\r\n        }\r\n    }\r\n    return messageParts.join('\\n');\r\n}\r\nvar PatchError = /** @class */ (function (_super) {\r\n    __extends(PatchError, _super);\r\n    function PatchError(message, name, index, operation, tree) {\r\n        var _newTarget = this.constructor;\r\n        var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\r\n        _this.name = name;\r\n        _this.index = index;\r\n        _this.operation = operation;\r\n        _this.tree = tree;\r\n        Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\r\n        _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\r\n        return _this;\r\n    }\r\n    return PatchError;\r\n}(Error));\r\nexport { PatchError };\r\n","import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n    add: function (obj, key, document) {\n        obj[key] = this.value;\n        return { newDocument: document };\n    },\n    remove: function (obj, key, document) {\n        var removed = obj[key];\n        delete obj[key];\n        return { newDocument: document, removed: removed };\n    },\n    replace: function (obj, key, document) {\n        var removed = obj[key];\n        obj[key] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: function (obj, key, document) {\n        /* in case move target overwrites an existing value,\n        return the removed value, this can be taxing performance-wise,\n        and is potentially unneeded */\n        var removed = getValueByPointer(document, this.path);\n        if (removed) {\n            removed = _deepClone(removed);\n        }\n        var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n        applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n        return { newDocument: document, removed: removed };\n    },\n    copy: function (obj, key, document) {\n        var valueToCopy = getValueByPointer(document, this.from);\n        // enforce copy by value so further operations don't affect source (see issue #177)\n        applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n        return { newDocument: document };\n    },\n    test: function (obj, key, document) {\n        return { newDocument: document, test: _areEquals(obj[key], this.value) };\n    },\n    _get: function (obj, key, document) {\n        this.value = obj[key];\n        return { newDocument: document };\n    }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n    add: function (arr, i, document) {\n        if (isInteger(i)) {\n            arr.splice(i, 0, this.value);\n        }\n        else { // array props\n            arr[i] = this.value;\n        }\n        // this may be needed when using '-' in an array\n        return { newDocument: document, index: i };\n    },\n    remove: function (arr, i, document) {\n        var removedList = arr.splice(i, 1);\n        return { newDocument: document, removed: removedList[0] };\n    },\n    replace: function (arr, i, document) {\n        var removed = arr[i];\n        arr[i] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: objOps.move,\n    copy: objOps.copy,\n    test: objOps.test,\n    _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n    if (pointer == '') {\n        return document;\n    }\n    var getOriginalDestination = { op: \"_get\", path: pointer };\n    applyOperation(document, getOriginalDestination);\n    return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n    if (validateOperation === void 0) { validateOperation = false; }\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (index === void 0) { index = 0; }\n    if (validateOperation) {\n        if (typeof validateOperation == 'function') {\n            validateOperation(operation, 0, document, operation.path);\n        }\n        else {\n            validator(operation, 0);\n        }\n    }\n    /* ROOT OPERATIONS */\n    if (operation.path === \"\") {\n        var returnValue = { newDocument: document };\n        if (operation.op === 'add') {\n            returnValue.newDocument = operation.value;\n            return returnValue;\n        }\n        else if (operation.op === 'replace') {\n            returnValue.newDocument = operation.value;\n            returnValue.removed = document; //document we removed\n            return returnValue;\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n            returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n            if (operation.op === 'move') { // report removed item\n                returnValue.removed = document;\n            }\n            return returnValue;\n        }\n        else if (operation.op === 'test') {\n            returnValue.test = _areEquals(document, operation.value);\n            if (returnValue.test === false) {\n                throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n            }\n            returnValue.newDocument = document;\n            return returnValue;\n        }\n        else if (operation.op === 'remove') { // a remove on root\n            returnValue.removed = document;\n            returnValue.newDocument = null;\n            return returnValue;\n        }\n        else if (operation.op === '_get') {\n            operation.value = document;\n            return returnValue;\n        }\n        else { /* bad operation */\n            if (validateOperation) {\n                throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n            }\n            else {\n                return returnValue;\n            }\n        }\n    } /* END ROOT OPERATIONS */\n    else {\n        if (!mutateDocument) {\n            document = _deepClone(document);\n        }\n        var path = operation.path || \"\";\n        var keys = path.split('/');\n        var obj = document;\n        var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n        var len = keys.length;\n        var existingPathFragment = undefined;\n        var key = void 0;\n        var validateFunction = void 0;\n        if (typeof validateOperation == 'function') {\n            validateFunction = validateOperation;\n        }\n        else {\n            validateFunction = validator;\n        }\n        while (true) {\n            key = keys[t];\n            if (banPrototypeModifications && key == '__proto__') {\n                throw new TypeError('JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n            }\n            if (validateOperation) {\n                if (existingPathFragment === undefined) {\n                    if (obj[key] === undefined) {\n                        existingPathFragment = keys.slice(0, t).join('/');\n                    }\n                    else if (t == len - 1) {\n                        existingPathFragment = operation.path;\n                    }\n                    if (existingPathFragment !== undefined) {\n                        validateFunction(operation, 0, document, existingPathFragment);\n                    }\n                }\n            }\n            t++;\n            if (Array.isArray(obj)) {\n                if (key === '-') {\n                    key = obj.length;\n                }\n                else {\n                    if (validateOperation && !isInteger(key)) {\n                        throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n                    } // only parse key when it's an integer for `arr.prop` to work\n                    else if (isInteger(key)) {\n                        key = ~~key;\n                    }\n                }\n                if (t >= len) {\n                    if (validateOperation && operation.op === \"add\" && key > obj.length) {\n                        throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n                    }\n                    var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            else {\n                if (key && key.indexOf('~') != -1) {\n                    key = unescapePathComponent(key);\n                }\n                if (t >= len) {\n                    var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            obj = obj[key];\n        }\n    }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (validateOperation) {\n        if (!Array.isArray(patch)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n    }\n    if (!mutateDocument) {\n        document = _deepClone(document);\n    }\n    var results = new Array(patch.length);\n    for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n        // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n        results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n        document = results[i].newDocument; // in case root was replaced\n    }\n    results.newDocument = document;\n    return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n    var operationResult = applyOperation(document, operation);\n    if (operationResult.test === false) { // failed test\n        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n    }\n    return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n    if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n        throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n    }\n    else if (!objOps[operation.op]) {\n        throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n    }\n    else if (typeof operation.path !== 'string') {\n        throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n        // paths that aren't empty string should start with \"/\"\n        throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n        throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n    }\n    else if (document) {\n        if (operation.op == \"add\") {\n            var pathLen = operation.path.split(\"/\").length;\n            var existingPathLen = existingPathFragment.split(\"/\").length;\n            if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n                throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n            }\n        }\n        else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n            if (operation.path !== existingPathFragment) {\n                throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n            }\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') {\n            var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n            var error = validate([existingValue], document);\n            if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n                throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n            }\n        }\n    }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n    try {\n        if (!Array.isArray(sequence)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n        if (document) {\n            //clone document and sequence so that we can safely try applying operations\n            applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n        }\n        else {\n            externalValidator = externalValidator || validator;\n            for (var i = 0; i < sequence.length; i++) {\n                externalValidator(sequence[i], i, document, undefined);\n            }\n        }\n    }\n    catch (e) {\n        if (e instanceof JsonPatchError) {\n            return e;\n        }\n        else {\n            throw e;\n        }\n    }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n    if (a === b)\n        return true;\n    if (a && b && typeof a == 'object' && typeof b == 'object') {\n        var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n        if (arrA && arrB) {\n            length = a.length;\n            if (length != b.length)\n                return false;\n            for (i = length; i-- !== 0;)\n                if (!_areEquals(a[i], b[i]))\n                    return false;\n            return true;\n        }\n        if (arrA != arrB)\n            return false;\n        var keys = Object.keys(a);\n        length = keys.length;\n        if (length !== Object.keys(b).length)\n            return false;\n        for (i = length; i-- !== 0;)\n            if (!b.hasOwnProperty(keys[i]))\n                return false;\n        for (i = length; i-- !== 0;) {\n            key = keys[i];\n            if (!_areEquals(a[key], b[key]))\n                return false;\n        }\n        return true;\n    }\n    return a !== a && b !== b;\n}\n;\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n    function Mirror(obj) {\n        this.observers = new Map();\n        this.obj = obj;\n    }\n    return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n    function ObserverInfo(callback, observer) {\n        this.callback = callback;\n        this.observer = observer;\n    }\n    return ObserverInfo;\n}());\nfunction getMirror(obj) {\n    return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n    return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n    mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n    observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n    var patches = [];\n    var observer;\n    var mirror = getMirror(obj);\n    if (!mirror) {\n        mirror = new Mirror(obj);\n        beforeDict.set(obj, mirror);\n    }\n    else {\n        var observerInfo = getObserverFromMirror(mirror, callback);\n        observer = observerInfo && observerInfo.observer;\n    }\n    if (observer) {\n        return observer;\n    }\n    observer = {};\n    mirror.value = _deepClone(obj);\n    if (callback) {\n        observer.callback = callback;\n        observer.next = null;\n        var dirtyCheck = function () {\n            generate(observer);\n        };\n        var fastCheck = function () {\n            clearTimeout(observer.next);\n            observer.next = setTimeout(dirtyCheck);\n        };\n        if (typeof window !== 'undefined') { //not Node\n            window.addEventListener('mouseup', fastCheck);\n            window.addEventListener('keyup', fastCheck);\n            window.addEventListener('mousedown', fastCheck);\n            window.addEventListener('keydown', fastCheck);\n            window.addEventListener('change', fastCheck);\n        }\n    }\n    observer.patches = patches;\n    observer.object = obj;\n    observer.unobserve = function () {\n        generate(observer);\n        clearTimeout(observer.next);\n        removeObserverFromMirror(mirror, observer);\n        if (typeof window !== 'undefined') {\n            window.removeEventListener('mouseup', fastCheck);\n            window.removeEventListener('keyup', fastCheck);\n            window.removeEventListener('mousedown', fastCheck);\n            window.removeEventListener('keydown', fastCheck);\n            window.removeEventListener('change', fastCheck);\n        }\n    };\n    mirror.observers.set(callback, new ObserverInfo(callback, observer));\n    return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var mirror = beforeDict.get(observer.object);\n    _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n    if (observer.patches.length) {\n        applyPatch(mirror.value, observer.patches);\n    }\n    var temp = observer.patches;\n    if (temp.length > 0) {\n        observer.patches = [];\n        if (observer.callback) {\n            observer.callback(temp);\n        }\n    }\n    return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n    if (obj === mirror) {\n        return;\n    }\n    if (typeof obj.toJSON === \"function\") {\n        obj = obj.toJSON();\n    }\n    var newKeys = _objectKeys(obj);\n    var oldKeys = _objectKeys(mirror);\n    var changed = false;\n    var deleted = false;\n    //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n    for (var t = oldKeys.length - 1; t >= 0; t--) {\n        var key = oldKeys[t];\n        var oldVal = mirror[key];\n        if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n            var newVal = obj[key];\n            if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null) {\n                _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n            }\n            else {\n                if (oldVal !== newVal) {\n                    changed = true;\n                    if (invertible) {\n                        patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n                    }\n                    patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n                }\n            }\n        }\n        else if (Array.isArray(mirror) === Array.isArray(obj)) {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n            }\n            patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n            deleted = true; // property has been deleted\n        }\n        else {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path, value: mirror });\n            }\n            patches.push({ op: \"replace\", path: path, value: obj });\n            changed = true;\n        }\n    }\n    if (!deleted && newKeys.length == oldKeys.length) {\n        return;\n    }\n    for (var t = 0; t < newKeys.length; t++) {\n        var key = newKeys[t];\n        if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n            patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n        }\n    }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var patches = [];\n    _generate(tree1, tree2, patches, '', invertible);\n    return patches;\n}\n","export * from './module/core.mjs';\r\nexport * from './module/duplex.mjs';\r\nexport {\r\n    PatchError as JsonPatchError,\r\n    _deepClone as deepClone,\r\n    escapePathComponent,\r\n    unescapePathComponent\r\n} from './module/helpers.mjs';\r\n\r\n\r\n/**\r\n * Default export for backwards compat\r\n */\r\n\r\nimport * as core from './module/core.mjs';\r\nimport * as duplex from './module/duplex.mjs';\r\nimport {\r\n    PatchError as JsonPatchError,\r\n    _deepClone as deepClone,\r\n    escapePathComponent,\r\n    unescapePathComponent\r\n} from './module/helpers.mjs';\r\n\r\nexport default Object.assign({}, core, duplex, {\r\n    JsonPatchError,\r\n    deepClone,\r\n    escapePathComponent,\r\n    unescapePathComponent\r\n});","\"use strict\";\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nmodule.exports = function stringify(passedObj, options) {\n  var indent, maxLength, replacer;\n\n  options = options || {};\n  indent = JSON.stringify(\n    [1],\n    undefined,\n    options.indent === undefined ? 2 : options.indent\n  ).slice(2, -3);\n  maxLength =\n    indent === \"\"\n      ? Infinity\n      : options.maxLength === undefined\n      ? 80\n      : options.maxLength;\n  replacer = options.replacer;\n\n  return (function _stringify(obj, currentIndent, reserved) {\n    // prettier-ignore\n    var end, index, items, key, keyPart, keys, length, nextIndent, prettified, start, string, value;\n\n    if (obj && typeof obj.toJSON === \"function\") {\n      obj = obj.toJSON();\n    }\n\n    string = JSON.stringify(obj, replacer);\n\n    if (string === undefined) {\n      return string;\n    }\n\n    length = maxLength - currentIndent.length - reserved;\n\n    if (string.length <= length) {\n      prettified = string.replace(stringOrChar, function(match, stringLiteral) {\n        return stringLiteral || match + \" \";\n      });\n      if (prettified.length <= length) {\n        return prettified;\n      }\n    }\n\n    if (replacer != null) {\n      obj = JSON.parse(string);\n      replacer = undefined;\n    }\n\n    if (typeof obj === \"object\" && obj !== null) {\n      nextIndent = currentIndent + indent;\n      items = [];\n      index = 0;\n\n      if (Array.isArray(obj)) {\n        start = \"[\";\n        end = \"]\";\n        length = obj.length;\n        for (; index < length; index++) {\n          items.push(\n            _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) ||\n              \"null\"\n          );\n        }\n      } else {\n        start = \"{\";\n        end = \"}\";\n        keys = Object.keys(obj);\n        length = keys.length;\n        for (; index < length; index++) {\n          key = keys[index];\n          keyPart = JSON.stringify(key) + \": \";\n          value = _stringify(\n            obj[key],\n            nextIndent,\n            keyPart.length + (index === length - 1 ? 0 : 1)\n          );\n          if (value !== undefined) {\n            items.push(keyPart + value);\n          }\n        }\n      }\n\n      if (items.length > 0) {\n        return [start, indent + items.join(\",\\n\" + nextIndent), end].join(\n          \"\\n\" + currentIndent\n        );\n      }\n    }\n\n    return string;\n  })(passedObj, \"\", 0);\n};\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n  SEMVER_SPEC_VERSION,\n  MAX_LENGTH,\n  MAX_SAFE_INTEGER,\n  MAX_SAFE_COMPONENT_LENGTH\n}\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n  const index = R++\n  debug(index, value)\n  t[name] = index\n  src[index] = value\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\.0\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\.0\\.0-0\\\\s*$')\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    if (!options || typeof options !== 'object') {\n      options = {\n        loose: !!options,\n        includePrerelease: false\n      }\n    }\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n          version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier) {\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier)\n        this.inc('pre', identifier)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier)\n        }\n        this.inc('pre', identifier)\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre':\n        if (this.prerelease.length === 0) {\n          this.prerelease = [0]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            this.prerelease.push(0)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          if (this.prerelease[0] === identifier) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = [identifier, 0]\n            }\n          } else {\n            this.prerelease = [identifier, 0]\n          }\n        }\n        break\n\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.format()\n    this.raw = this.version\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const {MAX_LENGTH} = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parse = (version, options) => {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier) => {\n  if (typeof (options) === 'string') {\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(version, options).inc(release, identifier).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const parse = require('./parse')\nconst eq = require('./eq')\n\nconst diff = (version1, version2) => {\n  if (eq(version1, version2)) {\n    return null\n  } else {\n    const v1 = parse(version1)\n    const v2 = parse(version2)\n    const hasPre = v1.prerelease.length || v2.prerelease.length\n    const prefix = hasPre ? 'pre' : ''\n    const defaultResult = hasPre ? 'prerelease' : ''\n    for (const key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return prefix + key\n        }\n      }\n    }\n    return defaultResult // may be undefined\n  }\n}\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst {re, t} = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    let next\n    while ((next = re[t.COERCERTL].exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    re[t.COERCERTL].lastIndex = -1\n  }\n\n  if (match === null)\n    return null\n\n  return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    if (!options || typeof options !== 'object') {\n      options = {\n        loose: !!options,\n        includePrerelease: false\n      }\n    }\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.format()\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First, split based on boolean or ||\n    this.raw = range\n    this.set = range\n      .split(/\\s*\\|\\|\\s*/)\n      // map the range to a 2d array of comparators\n      .map(range => this.parseRange(range.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${range}`)\n    }\n\n    this.format()\n  }\n\n  format () {\n    this.range = this.set\n      .map((comps) => {\n        return comps.join(' ').trim()\n      })\n      .join('||')\n      .trim()\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    const loose = this.options.loose\n    range = range.trim()\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n    // normalize spaces\n    range = range.split(/\\s+/).join(' ')\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    return range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      .map(comp => replaceGTE0(comp, this.options))\n      // in loose mode, throw out any that are not valid comparators\n      .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)\n      .map(comp => new Comparator(comp, this.options))\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\nmodule.exports = Range\n\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace\n} = require('../internal/re')\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\nconst replaceTildes = (comp, options) =>\n  comp.trim().split(/\\s+/).map((comp) => {\n    return replaceTilde(comp, options)\n  }).join(' ')\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\nconst replaceCarets = (comp, options) =>\n  comp.trim().split(/\\s+/).map((comp) => {\n    return replaceCaret(comp, options)\n  }).join(' ')\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map((comp) => {\n    return replaceXRange(comp, options)\n  }).join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<')\n        pr = '-0'\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp.trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return (`${from} ${to}`).trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n  constructor (comp, options) {\n    if (!options || typeof options !== 'object') {\n      options = {\n        loose: !!options,\n        includePrerelease: false\n      }\n    }\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (!options || typeof options !== 'object') {\n      options = {\n        loose: !!options,\n        includePrerelease: false\n      }\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    const sameDirectionIncreasing =\n      (this.operator === '>=' || this.operator === '>') &&\n      (comp.operator === '>=' || comp.operator === '>')\n    const sameDirectionDecreasing =\n      (this.operator === '<=' || this.operator === '<') &&\n      (comp.operator === '<=' || comp.operator === '<')\n    const sameSemVer = this.semver.version === comp.semver.version\n    const differentDirectionsInclusive =\n      (this.operator === '>=' || this.operator === '<=') &&\n      (comp.operator === '>=' || comp.operator === '<=')\n    const oppositeDirectionsLessThan =\n      cmp(this.semver, '<', comp.semver, options) &&\n      (this.operator === '>=' || this.operator === '>') &&\n        (comp.operator === '<=' || comp.operator === '<')\n    const oppositeDirectionsGreaterThan =\n      cmp(this.semver, '>', comp.semver, options) &&\n      (this.operator === '<=' || this.operator === '<') &&\n        (comp.operator === '>=' || comp.operator === '>')\n\n    return (\n      sameDirectionIncreasing ||\n      sameDirectionDecreasing ||\n      (sameSemVer && differentDirectionsInclusive) ||\n      oppositeDirectionsLessThan ||\n      oppositeDirectionsGreaterThan\n    )\n  }\n}\n\nmodule.exports = Comparator\n\nconst {re, t} = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!minver || gt(minver, compver)) {\n            minver = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst {ANY} = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let min = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!min)\n        min = version\n    } else {\n      if (prev) {\n        set.push([min, prev])\n      }\n      prev = null\n      min = null\n    }\n  }\n  if (min)\n    set.push([min, null])\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max)\n      ranges.push(min)\n    else if (!max && min === v[0])\n      ranges.push('*')\n    else if (!max)\n      ranges.push(`>=${min}`)\n    else if (min === v[0])\n      ranges.push(`<=${max}`)\n    else\n      ranges.push(`${min} - ${max}`)\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst { ANY } = require('../classes/comparator.js')\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else return false\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If LT\n//   - If LT.semver is greater than that of any > comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If any C is a = range, and GT or LT are set, return false\n// - Else return true\n\nconst subset = (sub, dom, options) => {\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub)\n        continue OUTER\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull)\n      return false\n  }\n  return true\n}\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub.length === 1 && sub[0].semver === ANY)\n    return dom.length === 1 && dom[0].semver === ANY\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=')\n      gt = higherGT(gt, c, options)\n    else if (c.operator === '<' || c.operator === '<=')\n      lt = lowerLT(lt, c, options)\n    else\n      eqSet.add(c.semver)\n  }\n\n  if (eqSet.size > 1)\n    return null\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0)\n      return null\n    else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))\n      return null\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options))\n      return null\n\n    if (lt && !satisfies(eq, String(lt), options))\n      return null\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options))\n        return false\n    }\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c)\n          return false\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))\n        return false\n    }\n    if (lt) {\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c)\n          return false\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))\n        return false\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0)\n      return false\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0)\n    return false\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0)\n    return false\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a)\n    return b\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a)\n    return b\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nmodule.exports = {\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,\n  SemVer: require('./classes/semver'),\n  compareIdentifiers: require('./internal/identifiers').compareIdentifiers,\n  rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,\n  parse: require('./functions/parse'),\n  valid: require('./functions/valid'),\n  clean: require('./functions/clean'),\n  inc: require('./functions/inc'),\n  diff: require('./functions/diff'),\n  major: require('./functions/major'),\n  minor: require('./functions/minor'),\n  patch: require('./functions/patch'),\n  prerelease: require('./functions/prerelease'),\n  compare: require('./functions/compare'),\n  rcompare: require('./functions/rcompare'),\n  compareLoose: require('./functions/compare-loose'),\n  compareBuild: require('./functions/compare-build'),\n  sort: require('./functions/sort'),\n  rsort: require('./functions/rsort'),\n  gt: require('./functions/gt'),\n  lt: require('./functions/lt'),\n  eq: require('./functions/eq'),\n  neq: require('./functions/neq'),\n  gte: require('./functions/gte'),\n  lte: require('./functions/lte'),\n  cmp: require('./functions/cmp'),\n  coerce: require('./functions/coerce'),\n  Comparator: require('./classes/comparator'),\n  Range: require('./classes/range'),\n  satisfies: require('./functions/satisfies'),\n  toComparators: require('./ranges/to-comparators'),\n  maxSatisfying: require('./ranges/max-satisfying'),\n  minSatisfying: require('./ranges/min-satisfying'),\n  minVersion: require('./ranges/min-version'),\n  validRange: require('./ranges/valid'),\n  outside: require('./ranges/outside'),\n  gtr: require('./ranges/gtr'),\n  ltr: require('./ranges/ltr'),\n  intersects: require('./ranges/intersects'),\n  simplifyRange: require('./ranges/simplify'),\n  subset: require('./ranges/subset'),\n}\n","export default function(fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\n\nexport function accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n","export default function(path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function(obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function(obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n    return obj;\n  };\n};\n\n","export default function(message) {\n  throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n  var path = [],\n      q = null,\n      b = 0,\n      n = p.length,\n      s = '',\n      i, j, c;\n\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i=j=0; j<n; ++j) {\n    c = p[j];\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n","import accessor from './accessor';\nimport getter from './getter';\nimport splitAccessPath from './splitAccessPath';\n\nexport default function(field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor(\n    (opt && opt.get || getter)(path),\n    [field],\n    name || field\n  );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","function log(method, level, input) {\n  var args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nexport var None  = 0;\nexport var Error = 1;\nexport var Warn  = 2;\nexport var Info  = 3;\nexport var Debug = 4;\n\nexport default function(_, method) {\n  var level = _ || None;\n  return {\n    level: function(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n    error: function() {\n      if (level >= Error) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n    warn: function() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n    info: function() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n    debug: function() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n  };\n}\n","export default Array.isArray;\n","export default function(_) {\n  return _ === Object(_);\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\n\nconst isLegalKey = key => key !== '__proto__';\n\nexport function mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (var key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        var r = key === 'legend' ? {layout: 1}\n          : key === 'style' ? true\n          : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n    return out;\n  }, {});\n}\n\nexport function writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n\n  var k, o;\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : (output[key] = {});\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n\n  const map = {}, out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n","export default function(array) {\n  return array[array.length - 1];\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : +_;\n}\n","import {identity} from './accessors';\nimport peek from './peek';\nimport toNumber from './toNumber';\n\nfunction exp(sign) {\n  return function(x) { return sign * Math.exp(x); };\n}\n\nfunction log(sign) {\n  return function(x) { return Math.log(sign * x); };\n}\n\nfunction symlog(c) {\n  return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); };\n}\n\nfunction symexp(c) {\n  return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; };\n}\n\nfunction pow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction pan(domain, delta, lift, ground) {\n  var d0 = lift(domain[0]),\n      d1 = lift(peek(domain)),\n      dd = (d1 - d0) * delta;\n\n  return [\n    ground(d0 - dd),\n    ground(d1 - dd)\n  ];\n}\n\nexport function panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\n\nexport function panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log(sign), exp(sign));\n}\n\nexport function panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1/exponent));\n}\n\nexport function panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  var d0 = lift(domain[0]),\n      d1 = lift(peek(domain)),\n      da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n\n  return [\n    ground(da + (d0 - da) * scale),\n    ground(da + (d1 - da) * scale)\n  ];\n}\n\nexport function zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\n\nexport function zoomLog(domain, anchor, scale) {\n  var sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\n\nexport function zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent));\n}\n\nexport function zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n","export function quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nexport function utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n","import isArray from './isArray';\n\nexport default function(_) {\n  return _ != null ? (isArray(_) ? _ : [_]) : [];\n}\n","/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nexport default function(range, min, max) {\n  var lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n  span = hi - lo;\n\n  return span >= (max - min)\n    ? [min, max]\n    : [\n        (lo = Math.min(Math.max(lo, min), max - span)),\n        lo + span\n      ];\n}\n","export default function(_) {\n  return typeof _ === 'function';\n}\n","import {default as accessor, accessorFields} from './accessor';\nimport array from './array';\nimport field from './field';\nimport isFunction from './isFunction';\n\nconst DESCENDING = 'descending';\n\nexport default function(fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n\n  const ord = [], get = [], fmap = {},\n        gen = opt.comparator || comparator;\n\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n\n  return get.length === 0\n    ? null\n    : accessor(gen(get, ord), Object.keys(fmap));\n}\n\nconst compare = (u, v) => (u < v || u == null) && v != null ? -1\n  : (u > v || v == null) && u != null ? 1\n  : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? -1\n  : v !== v && u === u ? 1\n  : 0;\n\nconst comparator = (fields, orders) => fields.length === 1\n  ? compare1(fields[0], orders[0])\n  : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function(a, b) {\n  return compare(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n  return function(a, b) {\n    let f, c = 0, i = -1;\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = compare(f(a), f(b));\n    }\n    return c * orders[i];\n  };\n};\n","import isFunction from './isFunction';\n\nexport default function(_) {\n  return isFunction(_) ? _ : function() { return _; };\n}\n","export default function(delay, handler) {\n  var tid, evt;\n\n  function callback() {\n    handler(evt);\n    tid = evt = null;\n  }\n\n  return function(e) {\n    evt = e;\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(callback, delay);\n  };\n}\n","export default function(_) {\n  for (var x, k, i=1, len=arguments.length; i<len; ++i) {\n    x = arguments[i];\n    for (k in x) { _[k] = x[k]; }\n  }\n  return _;\n}\n","/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport default function(array, f) {\n  var i = 0, n, v, min, max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n      min = max = v;\n\n      // visit all other values\n      for (; i<n; ++i) {\n        v = array[i];\n        // skip null/undefined; NaN will fail all comparisons\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n      min = max = v;\n\n      // visit all other values\n      for (; i<n; ++i) {\n        v = f(array[i]);\n        // skip null/undefined; NaN will fail all comparisons\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","export default function(array, f) {\n  var i = -1,\n      n = array.length,\n      a, b, c, u, v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n    if (i === n) return [-1, -1];\n    u = v = i;\n    while (++i < n) {\n      b = array[i];\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n    if (i === n) return [-1, -1];\n    u = v = i;\n    while (++i < n) {\n      b = f(array[i], i, array);\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n","const hop = Object.prototype.hasOwnProperty;\n\nexport default function(object, property) {\n  return hop.call(object, property);\n}\n","import hasOwnProperty from './hasOwnProperty';\n\nvar NULL = {};\n\nexport default function(input) {\n  var obj = {},\n      map,\n      test;\n\n  function has(key) {\n    return hasOwnProperty(obj, key) && obj[key] !== NULL;\n  }\n\n  map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has,\n    get(key) {\n      return has(key) ? obj[key] : undefined;\n    },\n    set(key, value) {\n      if (!has(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n      obj[key] = value;\n      return this;\n    },\n    delete(key) {\n      if (has(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n      return this;\n    },\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n    clean() {\n      var next = {},\n          size = 0,\n          key, value;\n      for (key in obj) {\n        value = obj[key];\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n      map.size = size;\n      map.empty = 0;\n      map.object = (obj = next);\n    }\n  };\n\n  if (input) Object.keys(input).forEach(function(key) {\n    map.set(key, input[key]);\n  });\n\n  return map;\n}\n","import peek from './peek';\n\nexport default function(range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n\n  var a = range[0],\n      b = peek(range),\n      t = +threshold,\n      l, r;\n\n  // swap endpoints if range is reversed\n  if (b < a) {\n    l = a; a = b; b = l;\n  }\n\n  // compare value to endpoints\n  l = Math.abs(value - a);\n  r = Math.abs(b - value);\n\n  // adjust if value is within threshold distance of endpoint\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n","export default function(child, parent) {\n  var proto = (child.prototype = Object.create(parent.prototype));\n  proto.constructor = child;\n  return proto;\n}\n","/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nexport default function(value, range, left, right) {\n  var r0 = range[0], r1 = range[range.length-1], t;\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n  left = left === undefined || left;\n  right = right === undefined || right;\n\n  return (left ? r0 <= value : r0 < value) &&\n    (right ? value <= r1 : value < r1);\n}\n","export default function(_) {\n  return typeof _ === 'boolean';\n}\n","export default function(_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n","export default function(_) {\n  return typeof _ === 'number';\n}\n","export default function(_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n","export default function(_) {\n  return typeof _ === 'string';\n}\n","import accessor from './accessor';\nimport array from './array';\nimport getter from './getter';\nimport splitAccessPath from './splitAccessPath';\n\nexport default function(fields, flat, opt) {\n  if (fields) {\n    fields = flat\n      ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1'))\n      : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n  let fn;\n\n  if (!len) {\n    fn = function() { return ''; };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n    fn = function(_) { return '' + get(_); };\n  } else {\n    const get = fields.map(map);\n    fn = function(_) {\n      let s = '' + get[0](_), i = 0;\n      while (++i < len) s += '|' + get[i](_);\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n","import peek from './peek';\n\nexport default function(array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n","import has from './hasOwnProperty';\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nexport default function(maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n    return (curr[key] = value);\n  };\n\n  clear();\n\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key]\n        : has(prev, key) ? update(key, prev[key])\n        : undefined,\n    set: (key, value) => has(curr, key)\n        ? (curr[key] = value)\n        : update(key, value)\n  };\n}\n","export default function(compare, array0, array1, output) {\n  var n0 = array0.length,\n      n1 = array1.length;\n\n  if (!n1) return array0;\n  if (!n0) return array1;\n\n  var merged = output || new array0.constructor(n0 + n1),\n      i0 = 0, i1 = 0, i = 0;\n\n  for (; i0<n0 && i1<n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0\n       ? array1[i1++]\n       : array0[i0++];\n  }\n\n  for (; i0<n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1<n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n","export default function(str, reps) {\n  var s = '';\n  while (--reps >= 0) s += str;\n  return s;\n}\n","import repeat from './repeat';\n\nexport default function(str, length, padchar, align) {\n  var c = padchar || ' ',\n      s = str + '',\n      n = length - s.length;\n\n  return n <= 0 ? s\n    : align === 'left' ? repeat(c, n) + s\n    : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2))\n    : s + repeat(c, n);\n}\n","import peek from './peek';\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nexport default function(array) {\n  return array && (peek(array) - array[0]) || 0;\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n  return isArray(x) ? '[' + x.map($) + ']'\n    : isObject(x) || isString(x) ?\n      // Output valid JSON and JS source strings.\n      // See http://timelessrepo.com/json-isnt-a-javascript-subset\n      JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n    : x;\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n","import isDate from './isDate';\nimport isNumber from './isNumber';\n\nfunction defaultParser(_) {\n  return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n}\n\nexport default function(_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n","export default function(_) {\n  for (var s={}, i=0, n=_.length; i<n; ++i) s[_[i]] = true;\n  return s;\n}\n","export default function(str, length, align, ellipsis) {\n  var e = ellipsis != null ? ellipsis : '\\u2026',\n      s = str + '',\n      n = s.length,\n      l = Math.max(0, length - e.length);\n\n  return n <= length ? s\n    : align === 'left' ? e + s.slice(n - l)\n    : align === 'center' ? s.slice(0, Math.ceil(l/2)) + e + s.slice(n - ~~(l/2))\n    : s.slice(0, l) + e;\n}\n","export default function(array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      var i = 0, n = array.length, t;\n      for (; i<n; ++i) {\n        if (t = filter(array[i])) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n","export {\n  default as accessor,\n  accessorName,\n  accessorFields\n} from './src/accessor';\n\nexport {\n  id,\n  identity,\n  zero,\n  one,\n  truthy,\n  falsy\n} from './src/accessors';\n\nexport {\n  default as logger,\n  None,\n  Error,\n  Warn,\n  Info,\n  Debug\n} from './src/logger';\n\nexport {\n  mergeConfig,\n  writeConfig\n} from './src/mergeConfig';\n\nexport {\n  panLinear,\n  panLog,\n  panPow,\n  panSymlog,\n  zoomLinear,\n  zoomLog,\n  zoomPow,\n  zoomSymlog\n} from './src/transform';\n\nexport {\n  quarter,\n  utcquarter\n} from './src/quarter';\n\nexport {default as array} from './src/array';\nexport {default as clampRange} from './src/clampRange';\nexport {default as compare} from './src/compare';\nexport {default as constant} from './src/constant';\nexport {default as debounce} from './src/debounce';\nexport {default as error} from './src/error';\nexport {default as extend} from './src/extend';\nexport {default as extent} from './src/extent';\nexport {default as extentIndex} from './src/extentIndex';\nexport {default as fastmap} from './src/fastmap';\nexport {default as field} from './src/field';\nexport {default as flush} from './src/flush';\nexport {default as hasOwnProperty} from './src/hasOwnProperty';\nexport {default as inherits} from './src/inherits';\nexport {default as inrange} from './src/inrange';\nexport {default as isArray} from './src/isArray';\nexport {default as isBoolean} from './src/isBoolean';\nexport {default as isDate} from './src/isDate';\nexport {default as isFunction} from './src/isFunction';\nexport {default as isNumber} from './src/isNumber';\nexport {default as isObject} from './src/isObject';\nexport {default as isRegExp} from './src/isRegExp';\nexport {default as isString} from './src/isString';\nexport {default as key} from './src/key';\nexport {default as lerp} from './src/lerp';\nexport {default as lruCache} from './src/lruCache';\nexport {default as merge} from './src/merge';\nexport {default as pad} from './src/pad';\nexport {default as peek} from './src/peek';\nexport {default as repeat} from './src/repeat';\nexport {default as span} from './src/span';\nexport {default as splitAccessPath} from './src/splitAccessPath';\nexport {default as stringValue} from './src/stringValue';\nexport {default as toBoolean} from './src/toBoolean';\nexport {default as toDate} from './src/toDate';\nexport {default as toNumber} from './src/toNumber';\nexport {default as toString} from './src/toString';\nexport {default as toSet} from './src/toSet';\nexport {default as truncate} from './src/truncate';\nexport {default as visitArray} from './src/visitArray';\n","function accessor (fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\nfunction accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function (obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n\n    return obj;\n  };\n};\n\nfunction error (message) {\n  throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n  const path = [],\n        n = p.length;\n  let q = null,\n      b = 0,\n      s = '',\n      i,\n      j,\n      c;\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i = j = 0; j < n; ++j) {\n    c = p[j];\n\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n\nfunction field (field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log(method, level, input) {\n  const args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n  let level = _ || None;\n  return {\n    level(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n\n    error() {\n      if (level >= Error$1) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n\n    warn() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n\n    info() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n\n    debug() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n\n  };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n  return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (const key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        const r = key === 'legend' ? {\n          layout: 1\n        } : key === 'style' ? true : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n\n    return out;\n  }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n  let k, o;\n\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : output[key] = {};\n\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n  const map = {},\n        out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n\nfunction peek (array) {\n  return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n  return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log$1 = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        dd = (d1 - d0) * delta;\n  return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log$1(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n  return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n  const sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n  return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n  let lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n\n  span = hi - lo;\n  return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n  return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n  const ord = [],\n        get = [],\n        fmap = {},\n        gen = opt.comparator || comparator;\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n  return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n\n  return function (a, b) {\n    let f,\n        c = 0,\n        i = -1;\n\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = ascending(f(a), f(b));\n    }\n\n    return c * orders[i];\n  };\n};\n\nfunction constant (_) {\n  return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n  let tid;\n  return e => {\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(() => (handler(e), tid = null), delay);\n  };\n}\n\nfunction extend (_) {\n  for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n    x = arguments[i];\n\n    for (k in x) {\n      _[k] = x[k];\n    }\n  }\n\n  return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n  let i = 0,\n      n,\n      v,\n      min,\n      max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nfunction extentIndex (array, f) {\n  const n = array.length;\n  let i = -1,\n      a,\n      b,\n      c,\n      u,\n      v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n  return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n  let obj = {},\n      test;\n\n  function has$1(key) {\n    return has(obj, key) && obj[key] !== NULL;\n  }\n\n  const map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has$1,\n\n    get(key) {\n      return has$1(key) ? obj[key] : undefined;\n    },\n\n    set(key, value) {\n      if (!has$1(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n\n      obj[key] = value;\n      return this;\n    },\n\n    delete(key) {\n      if (has$1(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n\n      return this;\n    },\n\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n\n    clean() {\n      const next = {};\n      let size = 0;\n\n      for (const key in obj) {\n        const value = obj[key];\n\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n\n      map.size = size;\n      map.empty = 0;\n      map.object = obj = next;\n    }\n\n  };\n  if (input) Object.keys(input).forEach(key => {\n    map.set(key, input[key]);\n  });\n  return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n  const t = +threshold;\n  let a = range[0],\n      b = peek(range),\n      l; // swap endpoints if range is reversed\n\n  if (b < a) {\n    l = a;\n    a = b;\n    b = l;\n  } // compare value to endpoints\n\n\n  l = Math.abs(value - a);\n  const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n  const proto = child.prototype = Object.create(parent.prototype);\n  proto.constructor = child;\n  return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n  let r0 = range[0],\n      r1 = range[range.length - 1],\n      t;\n\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n\n  left = left === undefined || left;\n  right = right === undefined || right;\n  return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n  return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n  return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n  return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n  return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n  if (fields) {\n    fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n\n  let fn;\n\n  if (!len) {\n    fn = function () {\n      return '';\n    };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n\n    fn = function (_) {\n      return '' + get(_);\n    };\n  } else {\n    const get = fields.map(map);\n\n    fn = function (_) {\n      let s = '' + get[0](_),\n          i = 0;\n\n      while (++i < len) s += '|' + get[i](_);\n\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n\n    return curr[key] = value;\n  };\n\n  clear();\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n    set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n  };\n}\n\nfunction merge (compare, array0, array1, output) {\n  const n0 = array0.length,\n        n1 = array1.length;\n  if (!n1) return array0;\n  if (!n0) return array1;\n  const merged = output || new array0.constructor(n0 + n1);\n  let i0 = 0,\n      i1 = 0,\n      i = 0;\n\n  for (; i0 < n0 && i1 < n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n\nfunction repeat (str, reps) {\n  let s = '';\n\n  while (--reps >= 0) s += str;\n\n  return s;\n}\n\nfunction pad (str, length, padchar, align) {\n  const c = padchar || ' ',\n        s = str + '',\n        n = length - s.length;\n  return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n  return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n  return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n  // See http://timelessrepo.com/json-isnt-a-javascript-subset\n  JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n  const s = {},\n        n = _.length;\n\n  for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n  return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n  const e = ellipsis != null ? ellipsis : '\\u2026',\n        s = str + '',\n        n = s.length,\n        l = Math.max(0, length - e.length);\n  return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      const n = array.length;\n\n      for (let i = 0; i < n; ++i) {\n        const t = filter(array[i]);\n        if (t) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import {error, extend, isFunction, stringValue} from 'vega-util';\n\n// Matches absolute URLs with optional protocol\n//   https://...    file://...    //...\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n *   If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n *   If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n *   param {object} [options] - Optional default loading options to use.\n *   return {object} - A new loader instance.\n */\nexport default function(fetch, fs) {\n  return options => ({\n    options: options || {},\n    sanitize: sanitize,\n    load: load,\n    fileAccess: !!fs,\n    file: fileLoader(fs),\n    http: httpLoader(fetch)\n  });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n *   override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n  const opt = await this.sanitize(uri, options),\n        url = opt.href;\n\n  return opt.localFile\n    ? this.file(url)\n    : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n *  sanitized uri data, or rejects it the input uri is deemed invalid.\n *  The properties of the resolved object are assumed to be\n *  valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n *  provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n  options = extend({}, this.options, options);\n\n  const fileAccess = this.fileAccess,\n        result = {href: null};\n\n  let isFile, loadFile, base;\n\n  const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n  if (uri == null || typeof uri !== 'string' || !isAllowed) {\n    error('Sanitize failure, invalid URI: ' + stringValue(uri));\n  }\n\n  const hasProtocol = protocol_re.test(uri);\n\n  // if relative url (no protocol/host), prepend baseURL\n  if ((base = options.baseURL) && !hasProtocol) {\n    // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n    if (!uri.startsWith('/') && base[base.length-1] !== '/') {\n      uri = '/' + uri;\n    }\n    uri = base + uri;\n  }\n\n  // should we load from file system?\n  loadFile = (isFile = uri.startsWith(fileProtocol))\n    || options.mode === 'file'\n    || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n  if (isFile) {\n    // strip file protocol\n    uri = uri.slice(fileProtocol.length);\n  } else if (uri.startsWith('//')) {\n    if (options.defaultProtocol === 'file') {\n      // if is file, strip protocol and set loadFile flag\n      uri = uri.slice(2);\n      loadFile = true;\n    } else {\n      // if relative protocol (starts with '//'), prepend default protocol\n      uri = (options.defaultProtocol || 'http') + ':' + uri;\n    }\n  }\n\n  // set non-enumerable mode flag to indicate local file load\n  Object.defineProperty(result, 'localFile', {value: !!loadFile});\n\n  // set uri\n  result.href = uri;\n\n  // set default result target, if specified\n  if (options.target) {\n    result.target = options.target + '';\n  }\n\n  // set default result rel, if specified (#1542)\n  if (options.rel) {\n    result.rel = options.rel + '';\n  }\n\n  // provide control over cross-origin image handling (#2238)\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n  if (options.context === 'image' && options.crossOrigin) {\n    result.crossOrigin = options.crossOrigin + '';\n  }\n\n  // return\n  return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n *   param {string} filename - The file system path to load.\n *   param {string} filename - The file system path to load.\n *   return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n  return fs\n    ? filename => new Promise((accept, reject) => {\n        fs.readFile(filename, (error, data) => {\n          if (error) reject(error);\n          else accept(data);\n        });\n      })\n    : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n  error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n *   param {string} url - The url to request.\n *   param {object} options - An options hash.\n *   return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n  return fetch\n    ? async function(url, options) {\n        const opt = extend({}, this.options.http, options),\n              type = options && options.response,\n              response = await fetch(url, opt);\n\n        return !response.ok\n          ? error(response.status + '' + response.statusText)\n          : isFunction(response[type]) ? response[type]()\n          : response.text();\n      }\n    : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n  error('No HTTP fetch method available.');\n}\n","import {identity, toBoolean, toDate, toNumber, toString} from 'vega-util';\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true'\n  || _ === 'false'\n  || _ === true\n  || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nexport const typeParsers = {\n  boolean: toBoolean,\n  integer: toNumber,\n  number:  toNumber,\n  date:    toDate,\n  string:  toString,\n  unknown: identity\n};\n\nconst typeTests = [\n  isBoolean,\n  isInteger,\n  isNumber,\n  isDate\n];\n\nconst typeList = [\n  'boolean',\n  'integer',\n  'number',\n  'date'\n];\n\nexport function inferType(values, field) {\n  if (!values || !values.length) return 'unknown';\n\n  const n = values.length,\n        m = typeTests.length,\n        a = typeTests.map((_, i) => i + 1);\n\n  for (let i = 0, t = 0, j, value; i < n; ++i) {\n    value = field ? values[i][field] : values[i];\n    for (j = 0; j < m; ++j) {\n      if (a[j] && isValid(value) && !typeTests[j](value)) {\n        a[j] = 0;\n        ++t;\n        if (t === typeTests.length) return 'string';\n      }\n    }\n  }\n\n  return typeList[\n    a.reduce((u, v) => u === 0 ? v : u, 0) - 1\n  ];\n}\n\nexport function inferTypes(data, fields) {\n  return fields.reduce((types, field) => {\n    types[field] = inferType(data, field);\n    return types;\n  }, {});\n}\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export default function autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number, m;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\n    else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n      value = new Date(value);\n    }\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","export {default as dsvFormat} from \"./dsv.js\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, csvFormatRow, csvFormatValue} from \"./csv.js\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, tsvFormatRow, tsvFormatValue} from \"./tsv.js\";\nexport {default as autoType} from \"./autoType.js\";\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n  const parse = function(data, format) {\n    const delim = {delimiter: delimiter};\n    return dsv(data, format ? extend(format, delim) : delim);\n  };\n\n  parse.responseType = 'text';\n\n  return parse;\n}\n\nexport default function dsv(data, format) {\n  if (format.header) {\n    data = format.header\n      .map(stringValue)\n      .join(format.delimiter) + '\\n' + data;\n  }\n  return dsvFormat(format.delimiter).parse(data + '');\n}\n\ndsv.responseType = 'text';\n","import {\n  field, identity, isArray, isFunction, isIterable, isObject\n} from 'vega-util';\n\nfunction isBuffer(_) {\n  return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n    ? Buffer.isBuffer(_) : false;\n}\n\nexport default function json(data, format) {\n  const prop = (format && format.property) ? field(format.property) : identity;\n  return isObject(data) && !isBuffer(data)\n    ? parseJSON(prop(data), format)\n    : prop(JSON.parse(data));\n}\n\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n  if (!isArray(data) && isIterable(data)) {\n    data = [...data];\n  }\n  return (format && format.copy)\n    ? JSON.parse(JSON.stringify(data))\n    : data;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","import transform from \"./transform.js\";\n\nexport default function(topology) {\n  var t = transform(topology.transform), key,\n      x0 = Infinity, y0 = x0, x1 = -x0, y1 = -x0;\n\n  function bboxPoint(p) {\n    p = t(p);\n    if (p[0] < x0) x0 = p[0];\n    if (p[0] > x1) x1 = p[0];\n    if (p[1] < y0) y0 = p[1];\n    if (p[1] > y1) y1 = p[1];\n  }\n\n  function bboxGeometry(o) {\n    switch (o.type) {\n      case \"GeometryCollection\": o.geometries.forEach(bboxGeometry); break;\n      case \"Point\": bboxPoint(o.coordinates); break;\n      case \"MultiPoint\": o.coordinates.forEach(bboxPoint); break;\n    }\n  }\n\n  topology.arcs.forEach(function(arc) {\n    var i = -1, n = arc.length, p;\n    while (++i < n) {\n      p = t(arc[i], i);\n      if (p[0] < x0) x0 = p[0];\n      if (p[0] > x1) x1 = p[0];\n      if (p[1] < y0) y0 = p[1];\n      if (p[1] > y1) y1 = p[1];\n    }\n  });\n\n  for (key in topology.objects) {\n    bboxGeometry(topology.objects[key]);\n  }\n\n  return [x0, y0, x1, y1];\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","export default function(topology, arcs) {\n  var stitchedArcs = {},\n      fragmentByStart = {},\n      fragmentByEnd = {},\n      fragments = [],\n      emptyIndex = -1;\n\n  // Stitch empty arcs first, since they may be subsumed by other arcs.\n  arcs.forEach(function(i, j) {\n    var arc = topology.arcs[i < 0 ? ~i : i], t;\n    if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n      t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n    }\n  });\n\n  arcs.forEach(function(i) {\n    var e = ends(i),\n        start = e[0],\n        end = e[1],\n        f, g;\n\n    if (f = fragmentByEnd[start]) {\n      delete fragmentByEnd[f.end];\n      f.push(i);\n      f.end = end;\n      if (g = fragmentByStart[end]) {\n        delete fragmentByStart[g.start];\n        var fg = g === f ? f : f.concat(g);\n        fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n      } else {\n        fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n      }\n    } else if (f = fragmentByStart[end]) {\n      delete fragmentByStart[f.start];\n      f.unshift(i);\n      f.start = start;\n      if (g = fragmentByEnd[start]) {\n        delete fragmentByEnd[g.end];\n        var gf = g === f ? f : g.concat(f);\n        fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n      } else {\n        fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n      }\n    } else {\n      f = [i];\n      fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n    }\n  });\n\n  function ends(i) {\n    var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n    if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n    else p1 = arc[arc.length - 1];\n    return i < 0 ? [p1, p0] : [p0, p1];\n  }\n\n  function flush(fragmentByEnd, fragmentByStart) {\n    for (var k in fragmentByEnd) {\n      var f = fragmentByEnd[k];\n      delete fragmentByStart[f.start];\n      delete f.start;\n      delete f.end;\n      f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n      fragments.push(f);\n    }\n  }\n\n  flush(fragmentByEnd, fragmentByStart);\n  flush(fragmentByStart, fragmentByEnd);\n  arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n  return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n  return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n  var arcs, i, n;\n  if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n  else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n  return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n  var arcs = [],\n      geomsByArc = [],\n      geom;\n\n  function extract0(i) {\n    var j = i < 0 ? ~i : i;\n    (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n  }\n\n  function extract1(arcs) {\n    arcs.forEach(extract0);\n  }\n\n  function extract2(arcs) {\n    arcs.forEach(extract1);\n  }\n\n  function extract3(arcs) {\n    arcs.forEach(extract2);\n  }\n\n  function geometry(o) {\n    switch (geom = o, o.type) {\n      case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n      case \"LineString\": extract1(o.arcs); break;\n      case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n      case \"MultiPolygon\": extract3(o.arcs); break;\n    }\n  }\n\n  geometry(object);\n\n  geomsByArc.forEach(filter == null\n      ? function(geoms) { arcs.push(geoms[0].i); }\n      : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n  return arcs;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nfunction planarRingArea(ring) {\n  var i = -1, n = ring.length, a, b = ring[n - 1], area = 0;\n  while (++i < n) a = b, b = ring[i], area += a[0] * b[1] - a[1] * b[0];\n  return Math.abs(area); // Note: doubled area!\n}\n\nexport default function(topology) {\n  return object(topology, mergeArcs.apply(this, arguments));\n}\n\nexport function mergeArcs(topology, objects) {\n  var polygonsByArc = {},\n      polygons = [],\n      groups = [];\n\n  objects.forEach(geometry);\n\n  function geometry(o) {\n    switch (o.type) {\n      case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n      case \"Polygon\": extract(o.arcs); break;\n      case \"MultiPolygon\": o.arcs.forEach(extract); break;\n    }\n  }\n\n  function extract(polygon) {\n    polygon.forEach(function(ring) {\n      ring.forEach(function(arc) {\n        (polygonsByArc[arc = arc < 0 ? ~arc : arc] || (polygonsByArc[arc] = [])).push(polygon);\n      });\n    });\n    polygons.push(polygon);\n  }\n\n  function area(ring) {\n    return planarRingArea(object(topology, {type: \"Polygon\", arcs: [ring]}).coordinates[0]);\n  }\n\n  polygons.forEach(function(polygon) {\n    if (!polygon._) {\n      var group = [],\n          neighbors = [polygon];\n      polygon._ = 1;\n      groups.push(group);\n      while (polygon = neighbors.pop()) {\n        group.push(polygon);\n        polygon.forEach(function(ring) {\n          ring.forEach(function(arc) {\n            polygonsByArc[arc < 0 ? ~arc : arc].forEach(function(polygon) {\n              if (!polygon._) {\n                polygon._ = 1;\n                neighbors.push(polygon);\n              }\n            });\n          });\n        });\n      }\n    }\n  });\n\n  polygons.forEach(function(polygon) {\n    delete polygon._;\n  });\n\n  return {\n    type: \"MultiPolygon\",\n    arcs: groups.map(function(polygons) {\n      var arcs = [], n;\n\n      // Extract the exterior (unique) arcs.\n      polygons.forEach(function(polygon) {\n        polygon.forEach(function(ring) {\n          ring.forEach(function(arc) {\n            if (polygonsByArc[arc < 0 ? ~arc : arc].length < 2) {\n              arcs.push(arc);\n            }\n          });\n        });\n      });\n\n      // Stitch the arcs into one or more rings.\n      arcs = stitch(topology, arcs);\n\n      // If more than one ring is returned,\n      // at most one of these rings can be the exterior;\n      // choose the one with the greatest absolute area.\n      if ((n = arcs.length) > 1) {\n        for (var i = 1, k = area(arcs[0]), ki, t; i < n; ++i) {\n          if ((ki = area(arcs[i])) > k) {\n            t = arcs[0], arcs[0] = arcs[i], arcs[i] = t, k = ki;\n          }\n        }\n      }\n\n      return arcs;\n    }).filter(function(arcs) {\n      return arcs.length > 0;\n    })\n  };\n}\n","export default function(a, x) {\n  var lo = 0, hi = a.length;\n  while (lo < hi) {\n    var mid = lo + hi >>> 1;\n    if (a[mid] < x) lo = mid + 1;\n    else hi = mid;\n  }\n  return lo;\n}\n","import bisect from \"./bisect.js\";\n\nexport default function(objects) {\n  var indexesByArc = {}, // arc index -> array of object indexes\n      neighbors = objects.map(function() { return []; });\n\n  function line(arcs, i) {\n    arcs.forEach(function(a) {\n      if (a < 0) a = ~a;\n      var o = indexesByArc[a];\n      if (o) o.push(i);\n      else indexesByArc[a] = [i];\n    });\n  }\n\n  function polygon(arcs, i) {\n    arcs.forEach(function(arc) { line(arc, i); });\n  }\n\n  function geometry(o, i) {\n    if (o.type === \"GeometryCollection\") o.geometries.forEach(function(o) { geometry(o, i); });\n    else if (o.type in geometryType) geometryType[o.type](o.arcs, i);\n  }\n\n  var geometryType = {\n    LineString: line,\n    MultiLineString: polygon,\n    Polygon: polygon,\n    MultiPolygon: function(arcs, i) { arcs.forEach(function(arc) { polygon(arc, i); }); }\n  };\n\n  objects.forEach(geometry);\n\n  for (var i in indexesByArc) {\n    for (var indexes = indexesByArc[i], m = indexes.length, j = 0; j < m; ++j) {\n      for (var k = j + 1; k < m; ++k) {\n        var ij = indexes[j], ik = indexes[k], n;\n        if ((n = neighbors[ij])[i = bisect(n, ik)] !== ik) n.splice(i, 0, ik);\n        if ((n = neighbors[ik])[i = bisect(n, ij)] !== ij) n.splice(i, 0, ij);\n      }\n    }\n  }\n\n  return neighbors;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2,\n        n = input.length,\n        output = new Array(n),\n        x1 = Math.round((input[0] - dx) / kx),\n        y1 = Math.round((input[1] - dy) / ky);\n    output[0] = x1 - x0, x0 = x1;\n    output[1] = y1 - y0, y0 = y1;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","import bbox from \"./bbox.js\";\nimport untransform from \"./untransform.js\";\n\nexport default function(topology, transform) {\n  if (topology.transform) throw new Error(\"already quantized\");\n\n  if (!transform || !transform.scale) {\n    if (!((n = Math.floor(transform)) >= 2)) throw new Error(\"n must be ≥2\");\n    box = topology.bbox || bbox(topology);\n    var x0 = box[0], y0 = box[1], x1 = box[2], y1 = box[3], n;\n    transform = {scale: [x1 - x0 ? (x1 - x0) / (n - 1) : 1, y1 - y0 ? (y1 - y0) / (n - 1) : 1], translate: [x0, y0]};\n  } else {\n    box = topology.bbox;\n  }\n\n  var t = untransform(transform), box, key, inputs = topology.objects, outputs = {};\n\n  function quantizePoint(point) {\n    return t(point);\n  }\n\n  function quantizeGeometry(input) {\n    var output;\n    switch (input.type) {\n      case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(quantizeGeometry)}; break;\n      case \"Point\": output = {type: \"Point\", coordinates: quantizePoint(input.coordinates)}; break;\n      case \"MultiPoint\": output = {type: \"MultiPoint\", coordinates: input.coordinates.map(quantizePoint)}; break;\n      default: return input;\n    }\n    if (input.id != null) output.id = input.id;\n    if (input.bbox != null) output.bbox = input.bbox;\n    if (input.properties != null) output.properties = input.properties;\n    return output;\n  }\n\n  function quantizeArc(input) {\n    var i = 0, j = 1, n = input.length, p, output = new Array(n); // pessimistic\n    output[0] = t(input[0], 0);\n    while (++i < n) if ((p = t(input[i], i))[0] || p[1]) output[j++] = p; // non-coincident points\n    if (j === 1) output[j++] = [0, 0]; // an arc must have at least two points\n    output.length = j;\n    return output;\n  }\n\n  for (key in inputs) outputs[key] = quantizeGeometry(inputs[key]);\n\n  return {\n    type: \"Topology\",\n    bbox: box,\n    transform: transform,\n    objects: outputs,\n    arcs: topology.arcs.map(quantizeArc)\n  };\n}\n","export {default as bbox} from \"./bbox.js\";\nexport {default as feature} from \"./feature.js\";\nexport {default as mesh, meshArcs} from \"./mesh.js\";\nexport {default as merge, mergeArcs} from \"./merge.js\";\nexport {default as neighbors} from \"./neighbors.js\";\nexport {default as quantize} from \"./quantize.js\";\nexport {default as transform} from \"./transform.js\";\nexport {default as untransform} from \"./untransform.js\";\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nconst filters = {\n  interior: (a, b) => a !== b,\n  exterior: (a, b) => a === b\n};\n\nexport default function topojson(data, format) {\n  let method, object, property, filter;\n  data = json(data, format);\n\n  if (format && format.feature) {\n    method = feature;\n    property = format.feature;\n  } else if (format && format.mesh) {\n    method = mesh;\n    property = format.mesh;\n    filter = filters[format.filter];\n  } else {\n    error('Missing TopoJSON feature or mesh parameter.');\n  }\n\n  object = (object = data.objects[property])\n    ? method(data, object, filter)\n    : error('Invalid TopoJSON object: ' + property);\n\n  return object && object.features || [object];\n}\n\ntopojson.responseType = 'json';\n","import {delimitedFormat, default as dsv} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\nimport {hasOwnProperty} from 'vega-util';\n\nexport const format = {\n  dsv: dsv,\n  csv: delimitedFormat(','),\n  tsv: delimitedFormat('\\t'),\n  json: json,\n  topojson: topojson\n};\n\nexport function formats(name, reader) {\n  if (arguments.length > 1) {\n    format[name] = reader;\n    return this;\n  } else {\n    return hasOwnProperty(format, name) ? format[name] : null;\n  }\n}\n\nexport function responseType(type) {\n  const f = formats(type);\n  return f && f.responseType || 'text';\n}\n","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n  let delta = f;\n  let compare = f;\n\n  if (f.length === 1) {\n    delta = (d, x) => f(d) - x;\n    compare = ascendingComparator(f);\n  }\n\n  function left(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    while (lo < hi) {\n      const mid = (lo + hi) >>> 1;\n      if (compare(a[mid], x) < 0) lo = mid + 1;\n      else hi = mid;\n    }\n    return lo;\n  }\n\n  function right(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    while (lo < hi) {\n      const mid = (lo + hi) >>> 1;\n      if (compare(a[mid], x) > 0) hi = mid;\n      else lo = mid + 1;\n    }\n    return lo;\n  }\n\n  function center(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n  return (d, x) => ascending(f(d), x);\n}\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n","function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n","export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n","export default function(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport default function(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new Map();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    step = -step;\n    start = Math.ceil(start * step);\n    stop = Math.floor(stop * step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n  let prestep;\n  while (true) {\n    const step = tickIncrement(start, stop, count);\n    if (step === prestep || step === 0 || !isFinite(step)) {\n      return [start, stop];\n    } else if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n    }\n    prestep = step;\n  }\n}\n","import count from \"../count.js\";\n\nexport default function(values) {\n  return Math.ceil(Math.log(count(values)) / Math.LN2) + 1;\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    if (!Array.isArray(data)) data = Array.from(data);\n\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds,\n    // and nice the default domain accordingly.\n    if (!Array.isArray(tz)) {\n      tz = +tz;\n      if (domain === extent) [x0, x1] = nice(x0, x1, tz);\n      tz = ticks(x0, x1, tz);\n      if (tz[tz.length - 1] === x1) tz.pop(); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisect(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n","import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function(values, min, max) {\n  return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(count(values), -1 / 3)));\n}\n","import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(count(values), -1 / 3)));\n}\n","export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n","export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n","import quantile from \"./quantile.js\";\n\nexport default function(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n","export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n","export default function(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function least(values, compare = ascending) {\n  let min;\n  let defined = false;\n  if (compare.length === 1) {\n    let minValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, minValue) < 0\n          : ascending(value, value) === 0) {\n        min = element;\n        minValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, min) < 0\n          : compare(value, value) === 0) {\n        min = value;\n        defined = true;\n      }\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport minIndex from \"./minIndex.js\";\n\nexport default function leastIndex(values, compare = ascending) {\n  if (compare.length === 1) return minIndex(values, compare);\n  let minValue;\n  let min = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (min < 0\n        ? compare(value, value) === 0\n        : compare(value, minValue) < 0) {\n      minValue = value;\n      min = index;\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n","import ascending from \"./ascending.js\";\nimport maxIndex from \"./maxIndex.js\";\n\nexport default function greatestIndex(values, compare = ascending) {\n  if (compare.length === 1) return maxIndex(values, compare);\n  let maxValue;\n  let max = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (max < 0\n        ? compare(value, value) === 0\n        : compare(value, maxValue) > 0) {\n      maxValue = value;\n      max = index;\n    }\n  }\n  return max;\n}\n","import leastIndex from \"./leastIndex.js\";\n\nexport default function scan(values, compare) {\n  const index = leastIndex(values, compare);\n  return index < 0 ? undefined : index;\n}\n","export default shuffler(Math.random);\n\nexport function shuffler(random) {\n  return function shuffle(array, i0 = 0, i1 = array.length) {\n    let m = i1 - (i0 = +i0);\n    while (m) {\n      const i = random() * m-- | 0, t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n    return array;\n  };\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","import min from \"./min.js\";\n\nexport default function(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n","import transpose from \"./transpose.js\";\n\nexport default function() {\n  return transpose(arguments);\n}\n","export default function every(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (!test(value, ++index, values)) {\n      return false;\n    }\n  }\n  return true;\n}\n","export default function some(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      return true;\n    }\n  }\n  return false;\n}\n","export default function filter(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  const array = [];\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      array.push(value);\n    }\n  }\n  return array;\n}\n","export default function map(values, mapper) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n  return Array.from(values, (value, index) => mapper(value, index, values));\n}\n","export default function reduce(values, reducer, value) {\n  if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n  const iterator = values[Symbol.iterator]();\n  let done, next, index = -1;\n  if (arguments.length < 3) {\n    ({done, value} = iterator.next());\n    if (done) return;\n    ++index;\n  }\n  while (({done, value: next} = iterator.next()), !done) {\n    value = reducer(value, next, ++index, values);\n  }\n  return value;\n}\n","export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n","import ascending from \"./ascending.js\";\n\nexport default function sort(values, comparator = ascending) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).sort(comparator);\n}\n","export default function difference(values, ...others) {\n  values = new Set(values);\n  for (const other of others) {\n    for (const value of other) {\n      values.delete(value);\n    }\n  }\n  return values;\n}\n","export default function disjoint(values, other) {\n  const iterator = other[Symbol.iterator](), set = new Set();\n  for (const v of values) {\n    if (set.has(v)) return false;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) break;\n      if (Object.is(v, value)) return false;\n      set.add(value);\n    }\n  }\n  return true;\n}\n","export default function set(values) {\n  return values instanceof Set ? values : new Set(values);\n}\n","import set from \"./set.js\";\n\nexport default function intersection(values, ...others) {\n  values = new Set(values);\n  others = others.map(set);\n  out: for (const value of values) {\n    for (const other of others) {\n      if (!other.has(value)) {\n        values.delete(value);\n        continue out;\n      }\n    }\n  }\n  return values;\n}\n","export default function superset(values, other) {\n  const iterator = values[Symbol.iterator](), set = new Set();\n  for (const o of other) {\n    if (set.has(o)) continue;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) return false;\n      set.add(value);\n      if (Object.is(o, value)) break;\n    }\n  }\n  return true;\n}\n","import superset from \"./superset.js\";\n\nexport default function subset(values, other) {\n  return superset(other, values);\n}\n","export default function union(...others) {\n  const set = new Set();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n","export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {default as fsum, Adder} from \"./fsum.js\";\nexport {default as group, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","export {\n  default as timeInterval\n} from \"./interval.js\";\n\nexport {\n  default as timeMillisecond,\n  milliseconds as timeMilliseconds,\n  default as utcMillisecond,\n  milliseconds as utcMilliseconds\n} from \"./millisecond.js\";\n\nexport {\n  default as timeSecond,\n  seconds as timeSeconds,\n  default as utcSecond,\n  seconds as utcSeconds\n} from \"./second.js\";\n\nexport {\n  default as timeMinute,\n  minutes as timeMinutes\n} from \"./minute.js\";\n\nexport {\n  default as timeHour,\n  hours as timeHours\n} from \"./hour.js\";\n\nexport {\n  default as timeDay,\n  days as timeDays\n} from \"./day.js\";\n\nexport {\n  sunday as timeWeek,\n  sundays as timeWeeks,\n  sunday as timeSunday,\n  sundays as timeSundays,\n  monday as timeMonday,\n  mondays as timeMondays,\n  tuesday as timeTuesday,\n  tuesdays as timeTuesdays,\n  wednesday as timeWednesday,\n  wednesdays as timeWednesdays,\n  thursday as timeThursday,\n  thursdays as timeThursdays,\n  friday as timeFriday,\n  fridays as timeFridays,\n  saturday as timeSaturday,\n  saturdays as timeSaturdays\n} from \"./week.js\";\n\nexport {\n  default as timeMonth,\n  months as timeMonths\n} from \"./month.js\";\n\nexport {\n  default as timeYear,\n  years as timeYears\n} from \"./year.js\";\n\nexport {\n  default as utcMinute,\n  utcMinutes as utcMinutes\n} from \"./utcMinute.js\";\n\nexport {\n  default as utcHour,\n  utcHours as utcHours\n} from \"./utcHour.js\";\n\nexport {\n  default as utcDay,\n  utcDays as utcDays\n} from \"./utcDay.js\";\n\nexport {\n  utcSunday as utcWeek,\n  utcSundays as utcWeeks,\n  utcSunday as utcSunday,\n  utcSundays as utcSundays,\n  utcMonday as utcMonday,\n  utcMondays as utcMondays,\n  utcTuesday as utcTuesday,\n  utcTuesdays as utcTuesdays,\n  utcWednesday as utcWednesday,\n  utcWednesdays as utcWednesdays,\n  utcThursday as utcThursday,\n  utcThursdays as utcThursdays,\n  utcFriday as utcFriday,\n  utcFridays as utcFridays,\n  utcSaturday as utcSaturday,\n  utcSaturdays as utcSaturdays\n} from \"./utcWeek.js\";\n\nexport {\n  default as utcMonth,\n  utcMonths as utcMonths\n} from \"./utcMonth.js\";\n\nexport {\n  default as utcYear,\n  utcYears as utcYears\n} from \"./utcYear.js\";\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n  const u = array(units).slice(),\n        m = {}; // check validity\n\n  if (!u.length) error('Missing time unit.');\n  u.forEach(unit => {\n    if (hasOwnProperty(UNITS, unit)) {\n      m[unit] = 1;\n    } else {\n      error(\"Invalid time unit: \".concat(unit, \".\"));\n    }\n  });\n  const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n\n  if (numTypes > 1) {\n    error(\"Incompatible time units: \".concat(units));\n  } // ensure proper sort order\n\n\n  u.sort((a, b) => UNITS[a] - UNITS[b]);\n  return u;\n}\nconst defaultSpecifiers = {\n  [YEAR]: '%Y ',\n  [QUARTER]: 'Q%q ',\n  [MONTH]: '%b ',\n  [DATE]: '%d ',\n  [WEEK]: 'W%U ',\n  [DAY]: '%a ',\n  [DAYOFYEAR]: '%j ',\n  [HOURS]: '%H:00',\n  [MINUTES]: '00:%M',\n  [SECONDS]: ':%S',\n  [MILLISECONDS]: '.%L',\n  [\"\".concat(YEAR, \"-\").concat(MONTH)]: '%Y-%m ',\n  [\"\".concat(YEAR, \"-\").concat(MONTH, \"-\").concat(DATE)]: '%Y-%m-%d ',\n  [\"\".concat(HOURS, \"-\").concat(MINUTES)]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n  const s = extend({}, defaultSpecifiers, specifiers),\n        u = timeUnits(units),\n        n = u.length;\n  let fmt = '',\n      start = 0,\n      end,\n      key;\n\n  for (start = 0; start < n;) {\n    for (end = u.length; end > start; --end) {\n      key = u.slice(start, end).join('-');\n\n      if (s[key] != null) {\n        fmt += s[key];\n        start = end;\n        break;\n      }\n    }\n  }\n\n  return fmt.trim();\n}\n\nconst t0 = new Date();\n\nfunction localYear(y) {\n  t0.setFullYear(y);\n  t0.setMonth(0);\n  t0.setDate(1);\n  t0.setHours(0, 0, 0, 0);\n  return t0;\n}\n\nfunction dayofyear(d) {\n  return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n  return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n  return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n  return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n  return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n  if (0 <= y && y < 100) {\n    const date = new Date(-1, m, d, H, M, S, L);\n    date.setFullYear(y);\n    return date;\n  }\n\n  return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n  return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n  return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n  const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n  return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n  const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n  return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n  t0.setTime(Date.UTC(y, 0, 1));\n  return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n  if (0 <= y && y < 100) {\n    const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n\n  return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n  const s = step || 1,\n        b = peek(units),\n        _ = (unit, p, key) => {\n    key = key || unit;\n    return getUnit(get[key], inv[key], unit === b && s, p);\n  };\n\n  const t = new Date(),\n        u = toSet(units),\n        y = u[YEAR] ? _(YEAR) : constant(2012),\n        m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n        d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n        H = u[HOURS] ? _(HOURS) : zero,\n        M = u[MINUTES] ? _(MINUTES) : zero,\n        S = u[SECONDS] ? _(SECONDS) : zero,\n        L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n  return function (v) {\n    t.setTime(+v);\n    const year = y(t);\n    return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n  };\n}\n\nfunction getUnit(f, inv, step, phase) {\n  const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n  return inv ? (d, y) => inv(u(d, y), y) : u;\n} // returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\n\n\nfunction weekday(week, day, firstDay) {\n  return day + week * 7 - (firstDay + 6) % 7;\n} // -- LOCAL TIME --\n\n\nconst localGet = {\n  [YEAR]: d => d.getFullYear(),\n  [QUARTER]: d => Math.floor(d.getMonth() / 3),\n  [MONTH]: d => d.getMonth(),\n  [DATE]: d => d.getDate(),\n  [HOURS]: d => d.getHours(),\n  [MINUTES]: d => d.getMinutes(),\n  [SECONDS]: d => d.getSeconds(),\n  [MILLISECONDS]: d => d.getMilliseconds(),\n  [DAYOFYEAR]: d => localDayOfYear(d),\n  [WEEK]: d => localWeekNum(d),\n  [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n  [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n  [QUARTER]: q => 3 * q,\n  [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n  return floor(units, step || 1, localGet, localInv, localDate);\n} // -- UTC TIME --\n\nconst utcGet = {\n  [YEAR]: d => d.getUTCFullYear(),\n  [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n  [MONTH]: d => d.getUTCMonth(),\n  [DATE]: d => d.getUTCDate(),\n  [HOURS]: d => d.getUTCHours(),\n  [MINUTES]: d => d.getUTCMinutes(),\n  [SECONDS]: d => d.getUTCSeconds(),\n  [MILLISECONDS]: d => d.getUTCMilliseconds(),\n  [DAYOFYEAR]: d => utcDayOfYear(d),\n  [WEEK]: d => utcWeekNum(d),\n  [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n  [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n  [QUARTER]: q => 3 * q,\n  [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n  return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n  [YEAR]: timeYear,\n  [QUARTER]: timeMonth.every(3),\n  [MONTH]: timeMonth,\n  [WEEK]: timeWeek,\n  [DATE]: timeDay,\n  [DAY]: timeDay,\n  [DAYOFYEAR]: timeDay,\n  [HOURS]: timeHour,\n  [MINUTES]: timeMinute,\n  [SECONDS]: timeSecond,\n  [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n  [YEAR]: utcYear,\n  [QUARTER]: utcMonth.every(3),\n  [MONTH]: utcMonth,\n  [WEEK]: utcWeek,\n  [DATE]: utcDay,\n  [DAY]: utcDay,\n  [DAYOFYEAR]: utcDay,\n  [HOURS]: utcHour,\n  [MINUTES]: utcMinute,\n  [SECONDS]: utcSecond,\n  [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n  return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n  return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n  return ival ? ival.offset(date, step) : undefined;\n}\n\nfunction timeOffset(unit, date, step) {\n  return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n  return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n  return ival ? ival.range(start, stop, step) : undefined;\n}\n\nfunction timeSequence(unit, start, stop, step) {\n  return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n  return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n      durationMinute = durationSecond * 60,\n      durationHour = durationMinute * 60,\n      durationDay = durationHour * 24,\n      durationWeek = durationDay * 7,\n      durationMonth = durationDay * 30,\n      durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n      Seconds = Milli.slice(0, -1),\n      Minutes = Seconds.slice(0, -1),\n      Hours = Minutes.slice(0, -1),\n      Day = Hours.slice(0, -1),\n      Week = [YEAR, WEEK],\n      Month = [YEAR, MONTH],\n      Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n  const ext = opt.extent,\n        max = opt.maxbins || 40,\n        target = Math.abs(span(ext)) / max;\n  let i = bisector(i => i[2]).right(intervals, target),\n      units,\n      step;\n\n  if (i === intervals.length) {\n    units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n  } else if (i) {\n    i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n    units = i[0];\n    step = i[1];\n  } else {\n    units = Milli;\n    step = Math.max(tickStep(ext[0], ext[1], max), 1);\n  }\n\n  return {\n    units,\n    step\n  };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {utcFormat} from \"./defaultLocale.js\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat.js\";\nimport {utcParse} from \"./defaultLocale.js\";\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : utcParse(isoSpecifier);\n\nexport default parseIso;\n","export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from \"./defaultLocale.js\";\nexport {default as timeFormatLocale} from \"./locale.js\";\nexport {default as isoFormat} from \"./isoFormat.js\";\nexport {default as isoParse} from \"./isoParse.js\";\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, formatLocale, format, formatPrefix } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n  const cache = {};\n  return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n  return x => {\n    const str = numberFormat(x),\n          dec = str.indexOf(decimalChar);\n    if (dec < 0) return str;\n    let idx = rightmostDigit(str, dec);\n    const end = idx < str.length ? str.slice(idx) : '';\n\n    while (--idx > dec) if (str[idx] !== '0') {\n      ++idx;\n      break;\n    }\n\n    return str.slice(0, idx) + end;\n  };\n}\n\nfunction rightmostDigit(str, dec) {\n  let i = str.lastIndexOf('e'),\n      c;\n  if (i > 0) return i;\n\n  for (i = str.length; --i > dec;) {\n    c = str.charCodeAt(i);\n    if (c >= 48 && c <= 57) return i + 1; // is digit\n  }\n}\n\nfunction numberLocale(locale) {\n  const format = memoize(locale.format),\n        formatPrefix = locale.formatPrefix;\n  return {\n    format,\n    formatPrefix,\n\n    formatFloat(spec) {\n      const s = formatSpecifier(spec || ',');\n\n      if (s.precision == null) {\n        s.precision = 12;\n\n        switch (s.type) {\n          case '%':\n            s.precision -= 2;\n            break;\n\n          case 'e':\n            s.precision -= 1;\n            break;\n        }\n\n        return trimZeroes(format(s), // number format\n        format('.1f')(1)[1] // decimal point character\n        );\n      } else {\n        return format(s);\n      }\n    },\n\n    formatSpan(start, stop, count, specifier) {\n      specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n      const step = tickStep(start, stop, count),\n            value = Math.max(Math.abs(start), Math.abs(stop));\n      let precision;\n\n      if (specifier.precision == null) {\n        switch (specifier.type) {\n          case 's':\n            {\n              if (!isNaN(precision = precisionPrefix(step, value))) {\n                specifier.precision = precision;\n              }\n\n              return formatPrefix(specifier, value);\n            }\n\n          case '':\n          case 'e':\n          case 'g':\n          case 'p':\n          case 'r':\n            {\n              if (!isNaN(precision = precisionRound(step, value))) {\n                specifier.precision = precision - (specifier.type === 'e');\n              }\n\n              break;\n            }\n\n          case 'f':\n          case '%':\n            {\n              if (!isNaN(precision = precisionFixed(step))) {\n                specifier.precision = precision - (specifier.type === '%') * 2;\n              }\n\n              break;\n            }\n        }\n      }\n\n      return format(specifier);\n    }\n\n  };\n}\n\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n  return defaultNumberLocale = numberLocale({\n    format: format,\n    formatPrefix: formatPrefix\n  });\n}\nfunction numberFormatLocale(definition) {\n  return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n  return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n  spec = spec || {};\n\n  if (!isObject(spec)) {\n    error(\"Invalid time multi-format specifier: \".concat(spec));\n  }\n\n  const second = interval(SECONDS),\n        minute = interval(MINUTES),\n        hour = interval(HOURS),\n        day = interval(DATE),\n        week = interval(WEEK),\n        month = interval(MONTH),\n        quarter = interval(QUARTER),\n        year = interval(YEAR),\n        L = format(spec[MILLISECONDS] || '.%L'),\n        S = format(spec[SECONDS] || ':%S'),\n        M = format(spec[MINUTES] || '%I:%M'),\n        H = format(spec[HOURS] || '%I %p'),\n        d = format(spec[DATE] || spec[DAY] || '%a %d'),\n        w = format(spec[WEEK] || '%b %d'),\n        m = format(spec[MONTH] || '%B'),\n        q = format(spec[QUARTER] || '%B'),\n        y = format(spec[YEAR] || '%Y');\n  return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\n\nfunction timeLocale(locale) {\n  const timeFormat = memoize(locale.format),\n        utcFormat = memoize(locale.utcFormat);\n  return {\n    timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n    utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n    timeParse: memoize(locale.parse),\n    utcParse: memoize(locale.utcParse)\n  };\n}\n\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n  return defaultTimeLocale = timeLocale({\n    format: timeFormat,\n    parse: timeParse,\n    utcFormat: utcFormat,\n    utcParse: utcParse\n  });\n}\nfunction timeFormatLocale(definition) {\n  return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n  return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\n\nfunction locale(numberSpec, timeSpec) {\n  const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n  const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n  return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n  const args = arguments.length;\n\n  if (args && args !== 2) {\n    error('defaultLocale expects either zero or two arguments.');\n  }\n\n  return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n  resetNumberFormatDefaultLocale();\n  resetTimeFormatDefaultLocale();\n  return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {timeFormatDefaultLocale} from 'vega-format';\nimport {error, hasOwnProperty} from 'vega-util';\n\nexport default function(data, schema, timeParser, utcParser) {\n  schema = schema || {};\n\n  const reader = formats(schema.type || 'json');\n  if (!reader) error('Unknown data format type: ' + schema.type);\n\n  data = reader(data, schema);\n  if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n\n  if (hasOwnProperty(data, 'columns')) delete data.columns;\n  return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n  if (!data.length) return; // early exit for empty data\n\n  const locale = timeFormatDefaultLocale();\n  timeParser = timeParser || locale.timeParse;\n  utcParser = utcParser || locale.utcParse;\n\n  let fields = data.columns || Object.keys(data[0]),\n      datum, field, i, j, n, m;\n\n  if (types === 'auto') types = inferTypes(data, fields);\n\n  fields = Object.keys(types);\n  const parsers = fields.map(field => {\n    const type = types[field];\n    let parts, pattern;\n\n    if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n      parts = type.split(/:(.+)?/, 2);  // split on first :\n      pattern = parts[1];\n\n      if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n          (pattern[0] === '\"'  && pattern[pattern.length-1] === '\"')) {\n        pattern = pattern.slice(1, -1);\n      }\n\n      const parse = parts[0] === 'utc' ? utcParser : timeParser;\n      return parse(pattern);\n    }\n\n    if (!typeParsers[type]) {\n      throw Error('Illegal format pattern: ' + field + ':' + type);\n    }\n\n    return typeParsers[type];\n  });\n\n  for (i=0, n=data.length, m=fields.length; i<n; ++i) {\n    datum = data[i];\n    for (j=0; j<m; ++j) {\n      field = fields[j];\n      datum[field] = parsers[j](datum[field]);\n    }\n  }\n}\n","import loaderFactory from './src/loader';\n\nexport const loader = loaderFactory(\n  typeof fetch !== 'undefined' && fetch, // use built-in fetch API\n  null // no file system access\n);\n\nexport {\n  default as read\n} from './src/read';\n\nexport {\n  inferType,\n  inferTypes,\n  typeParsers\n} from './src/type';\n\nexport {\n  format,\n  formats,\n  responseType\n} from './src/formats/index';\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n  const $ = idFunc || identity,\n        list = [],\n        ids = {};\n\n  list.add = _ => {\n    const id = $(_);\n\n    if (!ids[id]) {\n      ids[id] = 1;\n      list.push(_);\n    }\n\n    return list;\n  };\n\n  list.remove = _ => {\n    const id = $(_);\n\n    if (ids[id]) {\n      ids[id] = 0;\n      const idx = list.indexOf(_);\n      if (idx >= 0) list.splice(idx, 1);\n    }\n\n    return list;\n  };\n\n  return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n *   and then await. The dataflow will be passed as the single\n *   argument to the function.\n */\nasync function asyncCallback (df, callback) {\n  try {\n    await callback(df);\n  } catch (err) {\n    df.error(err);\n  }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\n\nfunction isTuple(t) {\n  return !!(t && tupleid(t));\n}\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\n\nfunction tupleid(t) {\n  return t[TUPLE_ID_KEY];\n}\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\n\nfunction setid(t, id) {\n  t[TUPLE_ID_KEY] = id;\n  return t;\n}\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\n\n\nfunction ingest(datum) {\n  const t = datum === Object(datum) ? datum : {\n    data: datum\n  };\n  return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\n\nfunction derive(t) {\n  return rederive(t, ingest({}));\n}\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\n\nfunction rederive(t, d) {\n  for (const k in t) d[k] = t[k];\n\n  return d;\n}\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\n\nfunction replace(t, d) {\n  return setid(d, tupleid(t));\n}\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\n\nfunction stableCompare(cmp, f) {\n  return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n  return v && v.constructor === changeset;\n}\nfunction changeset() {\n  const add = [],\n        // insert tuples\n  rem = [],\n        // remove tuples\n  mod = [],\n        // modify tuples\n  remp = [],\n        // remove by predicate\n  modp = []; // modify by predicate\n\n  let clean = null,\n      reflow = false;\n  return {\n    constructor: changeset,\n\n    insert(t) {\n      const d = array(t),\n            n = d.length;\n\n      for (let i = 0; i < n; ++i) add.push(d[i]);\n\n      return this;\n    },\n\n    remove(t) {\n      const a = isFunction(t) ? remp : rem,\n            d = array(t),\n            n = d.length;\n\n      for (let i = 0; i < n; ++i) a.push(d[i]);\n\n      return this;\n    },\n\n    modify(t, field, value) {\n      const m = {\n        field: field,\n        value: constant(value)\n      };\n\n      if (isFunction(t)) {\n        m.filter = t;\n        modp.push(m);\n      } else {\n        m.tuple = t;\n        mod.push(m);\n      }\n\n      return this;\n    },\n\n    encode(t, set) {\n      if (isFunction(t)) modp.push({\n        filter: t,\n        field: set\n      });else mod.push({\n        tuple: t,\n        field: set\n      });\n      return this;\n    },\n\n    clean(value) {\n      clean = value;\n      return this;\n    },\n\n    reflow() {\n      reflow = true;\n      return this;\n    },\n\n    pulse(pulse, tuples) {\n      const cur = {},\n            out = {};\n      let i, n, m, f, t, id; // build lookup table of current tuples\n\n      for (i = 0, n = tuples.length; i < n; ++i) {\n        cur[tupleid(tuples[i])] = 1;\n      } // process individual tuples to remove\n\n\n      for (i = 0, n = rem.length; i < n; ++i) {\n        t = rem[i];\n        cur[tupleid(t)] = -1;\n      } // process predicate-based removals\n\n\n      for (i = 0, n = remp.length; i < n; ++i) {\n        f = remp[i];\n        tuples.forEach(t => {\n          if (f(t)) cur[tupleid(t)] = -1;\n        });\n      } // process all add tuples\n\n\n      for (i = 0, n = add.length; i < n; ++i) {\n        t = add[i];\n        id = tupleid(t);\n\n        if (cur[id]) {\n          // tuple already resides in dataset\n          // if flagged for both add and remove, cancel\n          cur[id] = 1;\n        } else {\n          // tuple does not reside in dataset, add\n          pulse.add.push(ingest(add[i]));\n        }\n      } // populate pulse rem list\n\n\n      for (i = 0, n = tuples.length; i < n; ++i) {\n        t = tuples[i];\n        if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n      } // modify helper method\n\n\n      function modify(t, f, v) {\n        if (v) {\n          t[f] = v(t);\n        } else {\n          pulse.encode = f;\n        }\n\n        if (!reflow) out[tupleid(t)] = t;\n      } // process individual tuples to modify\n\n\n      for (i = 0, n = mod.length; i < n; ++i) {\n        m = mod[i];\n        t = m.tuple;\n        f = m.field;\n        id = cur[tupleid(t)];\n\n        if (id > 0) {\n          modify(t, f, m.value);\n          pulse.modifies(f);\n        }\n      } // process predicate-based modifications\n\n\n      for (i = 0, n = modp.length; i < n; ++i) {\n        m = modp[i];\n        f = m.filter;\n        tuples.forEach(t => {\n          if (f(t) && cur[tupleid(t)] > 0) {\n            modify(t, m.field, m.value);\n          }\n        });\n        pulse.modifies(m.field);\n      } // upon reflow request, populate mod with all non-removed tuples\n      // otherwise, populate mod with modified tuples only\n\n\n      if (reflow) {\n        pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n      } else {\n        for (id in out) pulse.mod.push(out[id]);\n      } // set pulse garbage collection request\n\n\n      if (clean || clean == null && (rem.length || remp.length)) {\n        pulse.clean(true);\n      }\n\n      return pulse;\n    }\n\n  };\n}\n\nconst CACHE = '_:mod:_';\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\n\nfunction Parameters() {\n  Object.defineProperty(this, CACHE, {\n    writable: true,\n    value: {}\n  });\n}\nParameters.prototype = {\n  /**\n   * Set a parameter value. If the parameter value changes, the parameter\n   * will be recorded as modified.\n   * @param {string} name - The parameter name.\n   * @param {number} index - The index into an array-value parameter. Ignored if\n   *   the argument is undefined, null or less than zero.\n   * @param {*} value - The parameter value to set.\n   * @param {boolean} [force=false] - If true, records the parameter as modified\n   *   even if the value is unchanged.\n   * @return {Parameters} - This parameter object.\n   */\n  set(name, index, value, force) {\n    const o = this,\n          v = o[name],\n          mod = o[CACHE];\n\n    if (index != null && index >= 0) {\n      if (v[index] !== value || force) {\n        v[index] = value;\n        mod[index + ':' + name] = -1;\n        mod[name] = -1;\n      }\n    } else if (v !== value || force) {\n      o[name] = value;\n      mod[name] = isArray(value) ? 1 + value.length : -1;\n    }\n\n    return o;\n  },\n\n  /**\n   * Tests if one or more parameters has been modified. If invoked with no\n   * arguments, returns true if any parameter value has changed. If the first\n   * argument is array, returns trues if any parameter name in the array has\n   * changed. Otherwise, tests if the given name and optional array index has\n   * changed.\n   * @param {string} name - The parameter name to test.\n   * @param {number} [index=undefined] - The parameter array index to test.\n   * @return {boolean} - Returns true if a queried parameter was modified.\n   */\n  modified(name, index) {\n    const mod = this[CACHE];\n\n    if (!arguments.length) {\n      for (const k in mod) {\n        if (mod[k]) return true;\n      }\n\n      return false;\n    } else if (isArray(name)) {\n      for (let k = 0; k < name.length; ++k) {\n        if (mod[name[k]]) return true;\n      }\n\n      return false;\n    }\n\n    return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n  },\n\n  /**\n   * Clears the modification records. After calling this method,\n   * all parameters are considered unmodified.\n   */\n  clear() {\n    this[CACHE] = {};\n    return this;\n  }\n\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n      NO_PARAMS = new Parameters(); // Boolean Flags\n\nconst SKIP = 1,\n      MODIFIED = 2;\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n *   evaluation of this operator, the update function will be invoked and the\n *   return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n *   listen for changes to upstream operators included as parameters.\n * @see parameters\n */\n\nfunction Operator(init, update, params, react) {\n  this.id = ++OP_ID;\n  this.value = init;\n  this.stamp = -1;\n  this.rank = -1;\n  this.qrank = -1;\n  this.flags = 0;\n\n  if (update) {\n    this._update = update;\n  }\n\n  if (params) this.parameters(params, react);\n}\n\nfunction flag(bit) {\n  return function (state) {\n    const f = this.flags;\n    if (arguments.length === 0) return !!(f & bit);\n    this.flags = state ? f | bit : f & ~bit;\n    return this;\n  };\n}\n\nOperator.prototype = {\n  /**\n   * Returns a list of target operators dependent on this operator.\n   * If this list does not exist, it is created and then returned.\n   * @return {UniqueList}\n   */\n  targets() {\n    return this._targets || (this._targets = UniqueList(id));\n  },\n\n  /**\n   * Sets the value of this operator.\n   * @param {*} value - the value to set.\n   * @return {Number} Returns 1 if the operator value has changed\n   *   according to strict equality, returns 0 otherwise.\n   */\n  set(value) {\n    if (this.value !== value) {\n      this.value = value;\n      return 1;\n    } else {\n      return 0;\n    }\n  },\n\n  /**\n   * Indicates that operator evaluation should be skipped on the next pulse.\n   * This operator will still propagate incoming pulses, but its update function\n   * will not be invoked. The skip flag is reset after every pulse, so calling\n   * this method will affect processing of the next pulse only.\n   */\n  skip: flag(SKIP),\n\n  /**\n   * Indicates that this operator's value has been modified on its most recent\n   * pulse. Normally modification is checked via strict equality; however, in\n   * some cases it is more efficient to update the internal state of an object.\n   * In those cases, the modified flag can be used to trigger propagation. Once\n   * set, the modification flag persists across pulses until unset. The flag can\n   * be used with the last timestamp to test if a modification is recent.\n   */\n  modified: flag(MODIFIED),\n\n  /**\n   * Sets the parameters for this operator. The parameter values are analyzed for\n   * operator instances. If found, this operator will be added as a dependency\n   * of the parameterizing operator. Operator values are dynamically marshalled\n   * from each operator parameter prior to evaluation. If a parameter value is\n   * an array, the array will also be searched for Operator instances. However,\n   * the search does not recurse into sub-arrays or object properties.\n   * @param {object} params - A hash of operator parameters.\n   * @param {boolean} [react=true] - A flag indicating if this operator should\n   *   automatically update (react) when parameter values change. In other words,\n   *   this flag determines if the operator registers itself as a listener on\n   *   any upstream operators included in the parameters.\n   * @param {boolean} [initonly=false] - A flag indicating if this operator\n   *   should calculate an update only upon its initiatal evaluation, then\n   *   deregister dependencies and suppress all future update invocations.\n   * @return {Operator[]} - An array of upstream dependencies.\n   */\n  parameters(params, react, initonly) {\n    react = react !== false;\n    const argval = this._argval = this._argval || new Parameters(),\n          argops = this._argops = this._argops || [],\n          deps = [];\n    let name, value, n, i;\n\n    const add = (name, index, value) => {\n      if (value instanceof Operator) {\n        if (value !== this) {\n          if (react) value.targets().add(this);\n          deps.push(value);\n        }\n\n        argops.push({\n          op: value,\n          name: name,\n          index: index\n        });\n      } else {\n        argval.set(name, index, value);\n      }\n    };\n\n    for (name in params) {\n      value = params[name];\n\n      if (name === PULSE) {\n        array(value).forEach(op => {\n          if (!(op instanceof Operator)) {\n            error('Pulse parameters must be operator instances.');\n          } else if (op !== this) {\n            op.targets().add(this);\n            deps.push(op);\n          }\n        });\n        this.source = value;\n      } else if (isArray(value)) {\n        argval.set(name, -1, Array(n = value.length));\n\n        for (i = 0; i < n; ++i) add(name, i, value[i]);\n      } else {\n        add(name, -1, value);\n      }\n    }\n\n    this.marshall().clear(); // initialize values\n\n    if (initonly) argops.initonly = true;\n    return deps;\n  },\n\n  /**\n   * Internal method for marshalling parameter values.\n   * Visits each operator dependency to pull the latest value.\n   * @return {Parameters} A Parameters object to pass to the update function.\n   */\n  marshall(stamp) {\n    const argval = this._argval || NO_PARAMS,\n          argops = this._argops;\n    let item, i, op, mod;\n\n    if (argops) {\n      const n = argops.length;\n\n      for (i = 0; i < n; ++i) {\n        item = argops[i];\n        op = item.op;\n        mod = op.modified() && op.stamp === stamp;\n        argval.set(item.name, item.index, op.value, mod);\n      }\n\n      if (argops.initonly) {\n        for (i = 0; i < n; ++i) {\n          item = argops[i];\n          item.op.targets().remove(this);\n        }\n\n        this._argops = null;\n        this._update = null;\n      }\n    }\n\n    return argval;\n  },\n\n  /**\n   * Detach this operator from the dataflow.\n   * Unregisters listeners on upstream dependencies.\n   */\n  detach() {\n    const argops = this._argops;\n    let i, n, item, op;\n\n    if (argops) {\n      for (i = 0, n = argops.length; i < n; ++i) {\n        item = argops[i];\n        op = item.op;\n\n        if (op._targets) {\n          op._targets.remove(this);\n        }\n      }\n    }\n  },\n\n  /**\n   * Delegate method to perform operator processing.\n   * Subclasses can override this method to perform custom processing.\n   * By default, it marshalls parameters and calls the update function\n   * if that function is defined. If the update function does not\n   * change the operator value then StopPropagation is returned.\n   * If no update function is defined, this method does nothing.\n   * @param {Pulse} pulse - the current dataflow pulse.\n   * @return The output pulse or StopPropagation. A falsy return value\n   *   (including undefined) will let the input pulse pass through.\n   */\n  evaluate(pulse) {\n    const update = this._update;\n\n    if (update) {\n      const params = this.marshall(pulse.stamp),\n            v = update.call(this, params, pulse);\n      params.clear();\n\n      if (v !== this.value) {\n        this.value = v;\n      } else if (!this.modified()) {\n        return pulse.StopPropagation;\n      }\n    }\n  },\n\n  /**\n   * Run this operator for the current pulse. If this operator has already\n   * been run at (or after) the pulse timestamp, returns StopPropagation.\n   * Internally, this method calls {@link evaluate} to perform processing.\n   * If {@link evaluate} returns a falsy value, the input pulse is returned.\n   * This method should NOT be overridden, instead overrride {@link evaluate}.\n   * @param {Pulse} pulse - the current dataflow pulse.\n   * @return the output pulse for this operator (or StopPropagation)\n   */\n  run(pulse) {\n    if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n    let rv;\n\n    if (this.skip()) {\n      this.skip(false);\n      rv = 0;\n    } else {\n      rv = this.evaluate(pulse);\n    }\n\n    return this.pulse = rv || pulse;\n  }\n\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n *   the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n *   listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\n\nfunction add (init, update, params, react) {\n  let shift = 1,\n      op;\n\n  if (init instanceof Operator) {\n    op = init;\n  } else if (init && init.prototype instanceof Operator) {\n    op = new init();\n  } else if (isFunction(init)) {\n    op = new Operator(null, init);\n  } else {\n    shift = 0;\n    op = new Operator(init, update);\n  }\n\n  this.rank(op);\n\n  if (shift) {\n    react = params;\n    params = update;\n  }\n\n  if (params) this.connect(op, op.parameters(params, react));\n  this.touch(op);\n  return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array<Operator>} - The source operators that should propagate\n *   to the target operator.\n */\nfunction connect (target, sources) {\n  const targetRank = target.rank,\n        n = sources.length;\n\n  for (let i = 0; i < n; ++i) {\n    if (targetRank < sources[i].rank) {\n      this.rerank(target);\n      return;\n    }\n  }\n}\n\nlet STREAM_ID = 0;\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n *   Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n *   new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n *   upon receipt of a new event. Use to override standard event processing.\n */\n\nfunction EventStream(filter, apply, receive) {\n  this.id = ++STREAM_ID;\n  this.value = null;\n  if (receive) this.receive = receive;\n  if (filter) this._filter = filter;\n  if (apply) this._apply = apply;\n}\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n *   Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n *   new event values.\n * @see EventStream\n */\n\nfunction stream(filter, apply, receive) {\n  return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n  _filter: truthy,\n  _apply: identity,\n\n  targets() {\n    return this._targets || (this._targets = UniqueList(id));\n  },\n\n  consume(_) {\n    if (!arguments.length) return !!this._consume;\n    this._consume = !!_;\n    return this;\n  },\n\n  receive(evt) {\n    if (this._filter(evt)) {\n      const val = this.value = this._apply(evt),\n            trg = this._targets,\n            n = trg ? trg.length : 0;\n\n      for (let i = 0; i < n; ++i) trg[i].receive(val);\n\n      if (this._consume) {\n        evt.preventDefault();\n        evt.stopPropagation();\n      }\n    }\n  },\n\n  filter(filter) {\n    const s = stream(filter);\n    this.targets().add(s);\n    return s;\n  },\n\n  apply(apply) {\n    const s = stream(null, apply);\n    this.targets().add(s);\n    return s;\n  },\n\n  merge() {\n    const s = stream();\n    this.targets().add(s);\n\n    for (let i = 0, n = arguments.length; i < n; ++i) {\n      arguments[i].targets().add(s);\n    }\n\n    return s;\n  },\n\n  throttle(pause) {\n    let t = -1;\n    return this.filter(() => {\n      const now = Date.now();\n\n      if (now - t > pause) {\n        t = now;\n        return 1;\n      } else {\n        return 0;\n      }\n    });\n  },\n\n  debounce(delay) {\n    const s = stream();\n    this.targets().add(stream(null, null, debounce(delay, e => {\n      const df = e.dataflow;\n      s.receive(e);\n      if (df && df.run) df.run();\n    })));\n    return s;\n  },\n\n  between(a, b) {\n    let active = false;\n    a.targets().add(stream(null, null, () => active = true));\n    b.targets().add(stream(null, null, () => active = false));\n    return this.filter(() => active);\n  },\n\n  detach() {// no-op for handling detach requests\n    // ensures compatibility with operators (#2753)\n  }\n\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n *  support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n *   If provided, this function will be invoked and the result will be\n *   used as the downstream event value.\n * @return {EventStream}\n */\n\nfunction events (source, type, filter, apply) {\n  const df = this,\n        s = stream(filter, apply),\n        send = function (e) {\n    e.dataflow = df;\n\n    try {\n      s.receive(e);\n    } catch (error) {\n      df.error(error);\n    } finally {\n      df.run();\n    }\n  };\n\n  let sources;\n\n  if (typeof source === 'string' && typeof document !== 'undefined') {\n    sources = document.querySelectorAll(source);\n  } else {\n    sources = array(source);\n  }\n\n  const n = sources.length;\n\n  for (let i = 0; i < n; ++i) {\n    sources[i].addEventListener(type, send);\n  }\n\n  return s;\n}\n\nfunction parse(data, format) {\n  const locale = this.locale();\n  return read(data, format, locale.timeParse, locale.utcParse);\n}\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n *   typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n *   be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n *   loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\n\nfunction ingest$1(target, data, format) {\n  data = this.parse(data, format);\n  return this.pulse(target, this.changeset().insert(data));\n}\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n *   is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n *   loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n *   The resolved object contains the following properties:\n *   - data: an array of parsed data (or null upon error)\n *   - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\n\nasync function request(url, format) {\n  const df = this;\n  let status = 0,\n      data;\n\n  try {\n    data = await df.loader().load(url, {\n      context: 'dataflow',\n      response: responseType(format && format.type)\n    });\n\n    try {\n      data = df.parse(data, format);\n    } catch (err) {\n      status = -2;\n      df.warn('Data ingestion failed', url, err);\n    }\n  } catch (err) {\n    status = -1;\n    df.warn('Loading failed', url, err);\n  }\n\n  return {\n    data,\n    status\n  };\n}\nasync function preload(target, url, format) {\n  const df = this,\n        pending = df._pending || loadPending(df);\n  pending.requests += 1;\n  const res = await df.request(url, format);\n  df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n  pending.done();\n  return res;\n}\n\nfunction loadPending(df) {\n  let accept;\n  const pending = new Promise(a => accept = a);\n  pending.requests = 0;\n\n  pending.done = () => {\n    if (--pending.requests === 0) {\n      df._pending = null;\n      accept(df);\n    }\n  };\n\n  return df._pending = pending;\n}\n\nconst SKIP$1 = {\n  skip: true\n};\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n *   This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n *   This argument can either be an Operator instance or (if the source\n *   argument is an EventStream), a function that accepts an event object as\n *   input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n *   to compute the new operator value, or a literal value to set. Update\n *   functions expect to receive a parameter object and event as arguments.\n *   This function can either return a new operator value or (if the source\n *   argument is an EventStream) a {@link ChangeSet} instance to pulse\n *   the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n *   updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n *  be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n *   be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\n\nfunction on (source, target, update, params, options) {\n  const fn = source instanceof Operator ? onOperator : onStream;\n  fn(this, source, target, update, params, options);\n  return this;\n}\n\nfunction onStream(df, stream, target, update, params, options) {\n  const opt = extend({}, options, SKIP$1);\n  let func, op;\n  if (!isFunction(target)) target = constant(target);\n\n  if (update === undefined) {\n    func = e => df.touch(target(e));\n  } else if (isFunction(update)) {\n    op = new Operator(null, update, params, false);\n\n    func = e => {\n      op.evaluate(e);\n      const t = target(e),\n            v = op.value;\n      isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n    };\n  } else {\n    func = e => df.update(target(e), update, opt);\n  }\n\n  stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n  if (update === undefined) {\n    source.targets().add(target);\n  } else {\n    const opt = options || {},\n          op = new Operator(null, updater(target, update), params, false);\n    op.modified(opt.force);\n    op.rank = source.rank; // immediately follow source\n\n    source.targets().add(op); // add dependency\n\n    if (target) {\n      op.skip(true); // skip first invocation\n\n      op.value = target.value; // initialize value\n\n      op.targets().add(target); // chain dependencies\n\n      df.connect(target, [op]); // rerank as needed, #1672\n    }\n  }\n}\n\nfunction updater(target, update) {\n  update = isFunction(update) ? update : constant(update);\n  return target ? function (_, pulse) {\n    const value = update(_, pulse);\n\n    if (!target.skip()) {\n      target.skip(value !== this.value).value = value;\n    }\n\n    return value;\n  } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\n\nfunction rank(op) {\n  op.rank = ++this._rank;\n}\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\n\nfunction rerank(op) {\n  const queue = [op];\n  let cur, list, i;\n\n  while (queue.length) {\n    this.rank(cur = queue.pop());\n\n    if (list = cur._targets) {\n      for (i = list.length; --i >= 0;) {\n        queue.push(cur = list[i]);\n        if (cur === op) error('Cycle detected in dataflow graph.');\n      }\n    }\n  }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\n\nconst StopPropagation = {}; // Pulse visit type flags\n\nconst ADD = 1 << 0,\n      REM = 1 << 1,\n      MOD = 1 << 2,\n      ADD_REM = ADD | REM,\n      ADD_MOD = ADD | MOD,\n      ALL = ADD | REM | MOD,\n      REFLOW = 1 << 3,\n      SOURCE = 1 << 4,\n      NO_SOURCE = 1 << 5,\n      NO_FIELDS = 1 << 6;\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n *   accessible as Pulse.encode. Operators can respond to (or ignore) this\n *   setting as appropriate. This parameter can be used in conjunction with\n *   the Encode transform in the vega-encode module.\n */\n\nfunction Pulse(dataflow, stamp, encode) {\n  this.dataflow = dataflow;\n  this.stamp = stamp == null ? -1 : stamp;\n  this.add = [];\n  this.rem = [];\n  this.mod = [];\n  this.fields = null;\n  this.encode = encode || null;\n}\n\nfunction materialize(data, filter) {\n  const out = [];\n  visitArray(data, filter, _ => out.push(_));\n  return out;\n}\n\nfunction filter(pulse, flags) {\n  const map = {};\n  pulse.visit(flags, t => {\n    map[tupleid(t)] = 1;\n  });\n  return t => map[tupleid(t)] ? null : t;\n}\n\nfunction addFilter(a, b) {\n  return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\n\nPulse.prototype = {\n  /**\n   * Sentinel value indicating pulse propagation should stop.\n   */\n  StopPropagation,\n\n  /**\n   * Boolean flag indicating ADD (added) tuples.\n   */\n  ADD,\n\n  /**\n   * Boolean flag indicating REM (removed) tuples.\n   */\n  REM,\n\n  /**\n   * Boolean flag indicating MOD (modified) tuples.\n   */\n  MOD,\n\n  /**\n   * Boolean flag indicating ADD (added) and REM (removed) tuples.\n   */\n  ADD_REM,\n\n  /**\n   * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n   */\n  ADD_MOD,\n\n  /**\n   * Boolean flag indicating ADD, REM and MOD tuples.\n   */\n  ALL,\n\n  /**\n   * Boolean flag indicating all tuples in a data source\n   * except for the ADD, REM and MOD tuples.\n   */\n  REFLOW,\n\n  /**\n   * Boolean flag indicating a 'pass-through' to a\n   * backing data source, ignoring ADD, REM and MOD tuples.\n   */\n  SOURCE,\n\n  /**\n   * Boolean flag indicating that source data should be\n   * suppressed when creating a forked pulse.\n   */\n  NO_SOURCE,\n\n  /**\n   * Boolean flag indicating that field modifications should be\n   * suppressed when creating a forked pulse.\n   */\n  NO_FIELDS,\n\n  /**\n   * Creates a new pulse based on the values of this pulse.\n   * The dataflow, time stamp and field modification values are copied over.\n   * By default, new empty ADD, REM and MOD arrays are created.\n   * @param {number} flags - Integer of boolean flags indicating which (if any)\n   *   tuple arrays should be copied to the new pulse. The supported flag values\n   *   are ADD, REM and MOD. Array references are copied directly: new array\n   *   instances are not created.\n   * @return {Pulse} - The forked pulse instance.\n   * @see init\n   */\n  fork(flags) {\n    return new Pulse(this.dataflow).init(this, flags);\n  },\n\n  /**\n   * Creates a copy of this pulse with new materialized array\n   * instances for the ADD, REM, MOD, and SOURCE arrays.\n   * The dataflow, time stamp and field modification values are copied over.\n   * @return {Pulse} - The cloned pulse instance.\n   * @see init\n   */\n  clone() {\n    const p = this.fork(ALL);\n    p.add = p.add.slice();\n    p.rem = p.rem.slice();\n    p.mod = p.mod.slice();\n    if (p.source) p.source = p.source.slice();\n    return p.materialize(ALL | SOURCE);\n  },\n\n  /**\n   * Returns a pulse that adds all tuples from a backing source. This is\n   * useful for cases where operators are added to a dataflow after an\n   * upstream data pipeline has already been processed, ensuring that\n   * new operators can observe all tuples within a stream.\n   * @return {Pulse} - A pulse instance with all source tuples included\n   *   in the add array. If the current pulse already has all source\n   *   tuples in its add array, it is returned directly. If the current\n   *   pulse does not have a backing source, it is returned directly.\n   */\n  addAll() {\n    let p = this;\n    const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n    || !p.rem.length && p.source.length === p.add.length;\n\n    if (reuse) {\n      return p;\n    } else {\n      p = new Pulse(this.dataflow).init(this);\n      p.add = p.source;\n      p.rem = []; // new operators can ignore rem #2769\n\n      return p;\n    }\n  },\n\n  /**\n   * Initialize this pulse based on the values of another pulse. This method\n   * is used internally by {@link fork} to initialize a new forked tuple.\n   * The dataflow, time stamp and field modification values are copied over.\n   * By default, new empty ADD, REM and MOD arrays are created.\n   * @param {Pulse} src - The source pulse to copy from.\n   * @param {number} flags - Integer of boolean flags indicating which (if any)\n   *   tuple arrays should be copied to the new pulse. The supported flag values\n   *   are ADD, REM and MOD. Array references are copied directly: new array\n   *   instances are not created. By default, source data arrays are copied\n   *   to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n   * @return {Pulse} - Returns this Pulse instance.\n   */\n  init(src, flags) {\n    const p = this;\n    p.stamp = src.stamp;\n    p.encode = src.encode;\n\n    if (src.fields && !(flags & NO_FIELDS)) {\n      p.fields = src.fields;\n    }\n\n    if (flags & ADD) {\n      p.addF = src.addF;\n      p.add = src.add;\n    } else {\n      p.addF = null;\n      p.add = [];\n    }\n\n    if (flags & REM) {\n      p.remF = src.remF;\n      p.rem = src.rem;\n    } else {\n      p.remF = null;\n      p.rem = [];\n    }\n\n    if (flags & MOD) {\n      p.modF = src.modF;\n      p.mod = src.mod;\n    } else {\n      p.modF = null;\n      p.mod = [];\n    }\n\n    if (flags & NO_SOURCE) {\n      p.srcF = null;\n      p.source = null;\n    } else {\n      p.srcF = src.srcF;\n      p.source = src.source;\n      if (src.cleans) p.cleans = src.cleans;\n    }\n\n    return p;\n  },\n\n  /**\n   * Schedules a function to run after pulse propagation completes.\n   * @param {function} func - The function to run.\n   */\n  runAfter(func) {\n    this.dataflow.runAfter(func);\n  },\n\n  /**\n   * Indicates if tuples have been added, removed or modified.\n   * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n   *   Defaults to ALL, returning true if any tuple type has changed.\n   * @return {boolean} - Returns true if one or more queried tuple types have\n   *   changed, false otherwise.\n   */\n  changed(flags) {\n    const f = flags || ALL;\n    return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n  },\n\n  /**\n   * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n   * source are added to the MOD set, unless already present in the ADD set.\n   * @param {boolean} [fork=false] - If true, returns a forked copy of this\n   *   pulse, and invokes reflow on that derived pulse.\n   * @return {Pulse} - The reflowed pulse instance.\n   */\n  reflow(fork) {\n    if (fork) return this.fork(ALL).reflow();\n    const len = this.add.length,\n          src = this.source && this.source.length;\n\n    if (src && src !== len) {\n      this.mod = this.source;\n      if (len) this.filter(MOD, filter(this, ADD));\n    }\n\n    return this;\n  },\n\n  /**\n   * Get/set metadata to pulse requesting garbage collection\n   * to reclaim currently unused resources.\n   */\n  clean(value) {\n    if (arguments.length) {\n      this.cleans = !!value;\n      return this;\n    } else {\n      return this.cleans;\n    }\n  },\n\n  /**\n   * Marks one or more data field names as modified to assist dependency\n   * tracking and incremental processing by transform operators.\n   * @param {string|Array<string>} _ - The field(s) to mark as modified.\n   * @return {Pulse} - This pulse instance.\n   */\n  modifies(_) {\n    const hash = this.fields || (this.fields = {});\n\n    if (isArray(_)) {\n      _.forEach(f => hash[f] = true);\n    } else {\n      hash[_] = true;\n    }\n\n    return this;\n  },\n\n  /**\n   * Checks if one or more data fields have been modified during this pulse\n   * propagation timestamp.\n   * @param {string|Array<string>} _ - The field(s) to check for modified.\n   * @param {boolean} nomod - If true, will check the modified flag even if\n   *   no mod tuples exist. If false (default), mod tuples must be present.\n   * @return {boolean} - Returns true if any of the provided fields has been\n   *   marked as modified, false otherwise.\n   */\n  modified(_, nomod) {\n    const fields = this.fields;\n    return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n  },\n\n  /**\n   * Adds a filter function to one more tuple sets. Filters are applied to\n   * backing tuple arrays, to determine the actual set of tuples considered\n   * added, removed or modified. They can be used to delay materialization of\n   * a tuple set in order to avoid expensive array copies. In addition, the\n   * filter functions can serve as value transformers: unlike standard predicate\n   * function (which return boolean values), Pulse filters should return the\n   * actual tuple value to process. If a tuple set is already filtered, the\n   * new filter function will be appended into a conjuntive ('and') query.\n   * @param {number} flags - Flags indicating the tuple set(s) to filter.\n   * @param {function(*):object} filter - Filter function that will be applied\n   *   to the tuple set array, and should return a data tuple if the value\n   *   should be included in the tuple set, and falsy (or null) otherwise.\n   * @return {Pulse} - Returns this pulse instance.\n   */\n  filter(flags, filter) {\n    const p = this;\n    if (flags & ADD) p.addF = addFilter(p.addF, filter);\n    if (flags & REM) p.remF = addFilter(p.remF, filter);\n    if (flags & MOD) p.modF = addFilter(p.modF, filter);\n    if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n    return p;\n  },\n\n  /**\n   * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n   * a registered filter function, it will be applied and the tuple set(s) will\n   * be replaced with materialized tuple arrays.\n   * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n   * @return {Pulse} - Returns this pulse instance.\n   */\n  materialize(flags) {\n    flags = flags || ALL;\n    const p = this;\n\n    if (flags & ADD && p.addF) {\n      p.add = materialize(p.add, p.addF);\n      p.addF = null;\n    }\n\n    if (flags & REM && p.remF) {\n      p.rem = materialize(p.rem, p.remF);\n      p.remF = null;\n    }\n\n    if (flags & MOD && p.modF) {\n      p.mod = materialize(p.mod, p.modF);\n      p.modF = null;\n    }\n\n    if (flags & SOURCE && p.srcF) {\n      p.source = p.source.filter(p.srcF);\n      p.srcF = null;\n    }\n\n    return p;\n  },\n\n  /**\n   * Visit one or more tuple sets in this pulse.\n   * @param {number} flags - Flags indicating the tuple set(s) to visit.\n   *   Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n   *   has been set).\n   * @param {function(object):*} - Visitor function invoked per-tuple.\n   * @return {Pulse} - Returns this pulse instance.\n   */\n  visit(flags, visitor) {\n    const p = this,\n          v = visitor;\n\n    if (flags & SOURCE) {\n      visitArray(p.source, p.srcF, v);\n      return p;\n    }\n\n    if (flags & ADD) visitArray(p.add, p.addF, v);\n    if (flags & REM) visitArray(p.rem, p.remF, v);\n    if (flags & MOD) visitArray(p.mod, p.modF, v);\n    const src = p.source;\n\n    if (flags & REFLOW && src) {\n      const sum = p.add.length + p.mod.length;\n\n      if (sum === src.length) ; else if (sum) {\n        visitArray(src, filter(p, ADD_MOD), v);\n      } else {\n        // if no add/rem/mod tuples, visit source\n        visitArray(src, p.srcF, v);\n      }\n    }\n\n    return p;\n  }\n\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array<Pulse>} pulses - The sub-pulses for this multi-pulse.\n */\n\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n  const p = this,\n        n = pulses.length;\n  let c = 0;\n  this.dataflow = dataflow;\n  this.stamp = stamp;\n  this.fields = null;\n  this.encode = encode || null;\n  this.pulses = pulses;\n\n  for (let i = 0; i < n; ++i) {\n    const pulse = pulses[i];\n    if (pulse.stamp !== stamp) continue;\n\n    if (pulse.fields) {\n      const hash = p.fields || (p.fields = {});\n\n      for (const f in pulse.fields) {\n        hash[f] = 1;\n      }\n    }\n\n    if (pulse.changed(p.ADD)) c |= p.ADD;\n    if (pulse.changed(p.REM)) c |= p.REM;\n    if (pulse.changed(p.MOD)) c |= p.MOD;\n  }\n\n  this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n  /**\n   * Creates a new pulse based on the values of this pulse.\n   * The dataflow, time stamp and field modification values are copied over.\n   * @return {Pulse}\n   */\n  fork(flags) {\n    const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n\n    if (flags !== undefined) {\n      if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n      if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n      if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n    }\n\n    return p;\n  },\n\n  changed(flags) {\n    return this.changes & flags;\n  },\n\n  modified(_) {\n    const p = this,\n          fields = p.fields;\n    return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n  },\n\n  filter() {\n    error('MultiPulse does not support filtering.');\n  },\n\n  materialize() {\n    error('MultiPulse does not support materialization.');\n  },\n\n  visit(flags, visitor) {\n    const p = this,\n          pulses = p.pulses,\n          n = pulses.length;\n    let i = 0;\n\n    if (flags & p.SOURCE) {\n      for (; i < n; ++i) {\n        pulses[i].visit(flags, visitor);\n      }\n    } else {\n      for (; i < n; ++i) {\n        if (pulses[i].stamp === p.stamp) {\n          pulses[i].visit(flags, visitor);\n        }\n      }\n    }\n\n    return p;\n  }\n\n});\n\n/* eslint-disable require-atomic-updates */\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n *   propagation. This value is added to generated Pulse instances;\n *   operators can then respond to (or ignore) this setting as appropriate.\n *   This parameter can be used in conjunction with the Encode transform in\n *   the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n *   immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n *   after dataflow evaluation completes. The callback will be invoked\n *   after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n *   evaluation completes.\n */\n\nasync function evaluate(encode, prerun, postrun) {\n  const df = this,\n        async = []; // if the pulse value is set, this is a re-entrant call\n\n  if (df._pulse) return reentrant(df); // wait for pending datasets to load\n\n  if (df._pending) await df._pending; // invoke prerun function, if provided\n\n  if (prerun) await asyncCallback(df, prerun); // exit early if there are no updates\n\n  if (!df._touched.length) {\n    df.debug('Dataflow invoked, but nothing to do.');\n    return df;\n  } // increment timestamp clock\n\n\n  const stamp = ++df._clock; // set the current pulse\n\n  df._pulse = new Pulse(df, stamp, encode); // initialize priority queue, reset touched operators\n\n  df._touched.forEach(op => df._enqueue(op, true));\n\n  df._touched = UniqueList(id);\n  let count = 0,\n      op,\n      next,\n      error;\n\n  try {\n    while (df._heap.size() > 0) {\n      // dequeue operator with highest priority\n      op = df._heap.pop(); // re-queue if rank changed\n\n      if (op.rank !== op.qrank) {\n        df._enqueue(op, true);\n\n        continue;\n      } // otherwise, evaluate the operator\n\n\n      next = op.run(df._getPulse(op, encode));\n\n      if (next.then) {\n        // await if operator returns a promise directly\n        next = await next;\n      } else if (next.async) {\n        // queue parallel asynchronous execution\n        async.push(next.async);\n        next = StopPropagation;\n      } // propagate evaluation, enqueue dependent operators\n\n\n      if (next !== StopPropagation) {\n        if (op._targets) op._targets.forEach(op => df._enqueue(op));\n      } // increment visit counter\n\n\n      ++count;\n    }\n  } catch (err) {\n    df._heap.clear();\n\n    error = err;\n  } // reset pulse map\n\n\n  df._input = {};\n  df._pulse = null;\n  df.debug(\"Pulse \".concat(stamp, \": \").concat(count, \" operators\"));\n\n  if (error) {\n    df._postrun = [];\n    df.error(error);\n  } // invoke callbacks queued via runAfter\n\n\n  if (df._postrun.length) {\n    const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n\n    df._postrun = [];\n\n    for (let i = 0; i < pr.length; ++i) {\n      await asyncCallback(df, pr[i].callback);\n    }\n  } // invoke postrun function, if provided\n\n\n  if (postrun) await asyncCallback(df, postrun); // handle non-blocking asynchronous callbacks\n\n  if (async.length) {\n    Promise.all(async).then(cb => df.runAsync(null, () => {\n      cb.forEach(f => {\n        try {\n          f(df);\n        } catch (err) {\n          df.error(err);\n        }\n      });\n    }));\n  }\n\n  return df;\n}\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n *   propagation. This value is added to generated Pulse instances;\n *   operators can then respond to (or ignore) this setting as appropriate.\n *   This parameter can be used in conjunction with the Encode transform in\n *   the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n *   immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n *   after dataflow evaluation completes. The callback will be invoked\n *   after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n *   evaluation completes.\n */\n\nasync function runAsync(encode, prerun, postrun) {\n  // await previously queued functions\n  while (this._running) await this._running; // run dataflow, manage running promise\n\n\n  const clear = () => this._running = null;\n\n  (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n  return this._running;\n}\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n *   propagation. This value is added to generated Pulse instances;\n *   operators can then respond to (or ignore) this setting as appropriate.\n *   This parameter can be used in conjunction with the Encode transform in\n *   the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n *   immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n *   after dataflow evaluation completes. The callback will be invoked\n *   after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\n\nfunction run(encode, prerun, postrun) {\n  return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n *   The callback will be invoked with this Dataflow instance as its\n *   sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n *   callback should be queued up to run after the next propagation\n *   cycle, suppressing immediate invocation when propagation is not\n *   currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n *   callbacks to determine execution order. This argument is intended\n *   for internal Vega use only.\n */\n\nfunction runAfter(callback, enqueue, priority) {\n  if (this._pulse || enqueue) {\n    // pulse propagation is currently running, queue to run after\n    this._postrun.push({\n      priority: priority || 0,\n      callback: callback\n    });\n  } else {\n    // pulse propagation already complete, invoke immediately\n    try {\n      callback(this);\n    } catch (err) {\n      this.error(err);\n    }\n  }\n}\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\n\nfunction reentrant(df) {\n  df.error('Dataflow already running. Use runAsync() to chain invocations.');\n  return df;\n}\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n *   forceably added to the queue, even if it has already been previously\n *   enqueued during the current pulse propagation. This is useful when the\n *   dataflow graph is dynamically modified and the operator rank changes.\n */\n\n\nfunction enqueue(op, force) {\n  const q = op.stamp < this._clock;\n  if (q) op.stamp = this._clock;\n\n  if (q || force) {\n    op.qrank = op.rank;\n\n    this._heap.push(op);\n  }\n}\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n *   annotate the returned pulse. See {@link run} for more information.\n */\n\nfunction getPulse(op, encode) {\n  const s = op.source,\n        stamp = this._clock;\n  return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\n\nfunction singlePulse(p, s) {\n  if (s && s.stamp === p.stamp) {\n    return s;\n  }\n\n  p = p.fork();\n\n  if (s && s !== StopPropagation) {\n    p.source = s.source;\n  }\n\n  return p;\n}\n\nconst NO_OPT = {\n  skip: false,\n  force: false\n};\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n *   be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction touch(op, options) {\n  const opt = options || NO_OPT;\n\n  if (this._pulse) {\n    // if in midst of propagation, add to priority queue\n    this._enqueue(op);\n  } else {\n    // otherwise, queue for next propagation\n    this._touched.add(op);\n  }\n\n  if (opt.skip) op.skip(true);\n  return this;\n}\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n *   be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n *   be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction update(op, value, options) {\n  const opt = options || NO_OPT;\n\n  if (op.set(value) || opt.force) {\n    this.touch(op, opt);\n  }\n\n  return this;\n}\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n *   be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction pulse(op, changeset, options) {\n  this.touch(op, options || NO_OPT);\n  const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n        t = op.pulse && op.pulse.source || [];\n  p.target = op;\n  this._input[op.id] = changeset.pulse(p, t);\n  return this;\n}\n\nfunction Heap(cmp) {\n  let nodes = [];\n  return {\n    clear: () => nodes = [],\n    size: () => nodes.length,\n    peek: () => nodes[0],\n    push: x => {\n      nodes.push(x);\n      return siftdown(nodes, 0, nodes.length - 1, cmp);\n    },\n    pop: () => {\n      const last = nodes.pop();\n      let item;\n\n      if (nodes.length) {\n        item = nodes[0];\n        nodes[0] = last;\n        siftup(nodes, 0, cmp);\n      } else {\n        item = last;\n      }\n\n      return item;\n    }\n  };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n  let parent, pidx;\n  const item = array[idx];\n\n  while (idx > start) {\n    pidx = idx - 1 >> 1;\n    parent = array[pidx];\n\n    if (cmp(item, parent) < 0) {\n      array[idx] = parent;\n      idx = pidx;\n      continue;\n    }\n\n    break;\n  }\n\n  return array[idx] = item;\n}\n\nfunction siftup(array, idx, cmp) {\n  const start = idx,\n        end = array.length,\n        item = array[idx];\n  let cidx = (idx << 1) + 1,\n      ridx;\n\n  while (cidx < end) {\n    ridx = cidx + 1;\n\n    if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n      cidx = ridx;\n    }\n\n    array[idx] = array[cidx];\n    idx = cidx;\n    cidx = (idx << 1) + 1;\n  }\n\n  array[idx] = item;\n  return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\n\nfunction Dataflow() {\n  this.logger(logger());\n  this.logLevel(Error);\n  this._clock = 0;\n  this._rank = 0;\n  this._locale = defaultLocale();\n\n  try {\n    this._loader = loader();\n  } catch (e) {// do nothing if loader module is unavailable\n  }\n\n  this._touched = UniqueList(id);\n  this._input = {};\n  this._pulse = null;\n  this._heap = Heap((a, b) => a.qrank - b.qrank);\n  this._postrun = [];\n}\n\nfunction logMethod(method) {\n  return function () {\n    return this._log[method].apply(this, arguments);\n  };\n}\n\nDataflow.prototype = {\n  /**\n   * The current timestamp of this dataflow. This value reflects the\n   * timestamp of the previous dataflow run. The dataflow is initialized\n   * with a stamp value of 0. The initial run of the dataflow will have\n   * a timestap of 1, and so on. This value will match the\n   * {@link Pulse.stamp} property.\n   * @return {number} - The current timestamp value.\n   */\n  stamp() {\n    return this._clock;\n  },\n\n  /**\n   * Gets or sets the loader instance to use for data file loading. A\n   * loader object must provide a \"load\" method for loading files and a\n   * \"sanitize\" method for checking URL/filename validity. Both methods\n   * should accept a URI and options hash as arguments, and return a Promise\n   * that resolves to the loaded file contents (load) or a hash containing\n   * sanitized URI data with the sanitized url assigned to the \"href\" property\n   * (sanitize).\n   * @param {object} _ - The loader instance to use.\n   * @return {object|Dataflow} - If no arguments are provided, returns\n   *   the current loader instance. Otherwise returns this Dataflow instance.\n   */\n  loader(_) {\n    if (arguments.length) {\n      this._loader = _;\n      return this;\n    } else {\n      return this._loader;\n    }\n  },\n\n  /**\n   * Gets or sets the locale instance to use for formatting and parsing\n   * string values. The locale object should be provided by the\n   * vega-format library, and include methods such as format, timeFormat,\n   * utcFormat, timeParse, and utcParse.\n   * @param {object} _ - The locale instance to use.\n   * @return {object|Dataflow} - If no arguments are provided, returns\n   *   the current locale instance. Otherwise returns this Dataflow instance.\n   */\n  locale(_) {\n    if (arguments.length) {\n      this._locale = _;\n      return this;\n    } else {\n      return this._locale;\n    }\n  },\n\n  /**\n   * Get or set the logger instance used to log messages. If no arguments are\n   * provided, returns the current logger instance. Otherwise, sets the logger\n   * and return this Dataflow instance. Provided loggers must support the full\n   * API of logger objects generated by the vega-util logger method. Note that\n   * by default the log level of the new logger will be used; use the logLevel\n   * method to adjust the log level as needed.\n   */\n  logger(logger) {\n    if (arguments.length) {\n      this._log = logger;\n      return this;\n    } else {\n      return this._log;\n    }\n  },\n\n  /**\n   * Logs an error message. By default, logged messages are written to console\n   * output. The message will only be logged if the current log level is high\n   * enough to permit error messages.\n   */\n  error: logMethod('error'),\n\n  /**\n   * Logs a warning message. By default, logged messages are written to console\n   * output. The message will only be logged if the current log level is high\n   * enough to permit warning messages.\n   */\n  warn: logMethod('warn'),\n\n  /**\n   * Logs a information message. By default, logged messages are written to\n   * console output. The message will only be logged if the current log level is\n   * high enough to permit information messages.\n   */\n  info: logMethod('info'),\n\n  /**\n   * Logs a debug message. By default, logged messages are written to console\n   * output. The message will only be logged if the current log level is high\n   * enough to permit debug messages.\n   */\n  debug: logMethod('debug'),\n\n  /**\n   * Get or set the current log level. If an argument is provided, it\n   * will be used as the new log level.\n   * @param {number} [level] - Should be one of None, Warn, Info\n   * @return {number} - The current log level.\n   */\n  logLevel: logMethod('level'),\n\n  /**\n   * Empty entry threshold for garbage cleaning. Map data structures will\n   * perform cleaning once the number of empty entries exceeds this value.\n   */\n  cleanThreshold: 1e4,\n  // OPERATOR REGISTRATION\n  add,\n  connect,\n  rank,\n  rerank,\n  // OPERATOR UPDATES\n  pulse,\n  touch,\n  update,\n  changeset,\n  // DATA LOADING\n  ingest: ingest$1,\n  parse,\n  preload,\n  request,\n  // EVENT HANDLING\n  events,\n  on,\n  // PULSE PROPAGATION\n  evaluate,\n  run,\n  runAsync,\n  runAfter,\n  _enqueue: enqueue,\n  _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\n\nfunction Transform(init, params) {\n  Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n  /**\n   * Overrides {@link Operator.evaluate} for transform operators.\n   * Internally, this method calls {@link evaluate} to perform processing.\n   * If {@link evaluate} returns a falsy value, the input pulse is returned.\n   * This method should NOT be overridden, instead overrride {@link evaluate}.\n   * @param {Pulse} pulse - the current dataflow pulse.\n   * @return the output pulse for this operator (or StopPropagation)\n   */\n  run(pulse) {\n    if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n    let rv;\n\n    if (this.skip()) {\n      this.skip(false);\n    } else {\n      rv = this.evaluate(pulse);\n    }\n\n    rv = rv || pulse;\n\n    if (rv.then) {\n      rv = rv.then(_ => this.pulse = _);\n    } else if (rv !== pulse.StopPropagation) {\n      this.pulse = rv;\n    }\n\n    return rv;\n  },\n\n  /**\n   * Overrides {@link Operator.evaluate} for transform operators.\n   * Marshalls parameter values and then invokes {@link transform}.\n   * @param {Pulse} pulse - the current dataflow pulse.\n   * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n       value (including undefined) will let the input pulse pass through.\n  */\n  evaluate(pulse) {\n    const params = this.marshall(pulse.stamp),\n          out = this.transform(params, pulse);\n    params.clear();\n    return out;\n  },\n\n  /**\n   * Process incoming pulses.\n   * Subclasses should override this method to implement transforms.\n   * @param {Parameters} _ - The operator parameter values.\n   * @param {Pulse} pulse - The current dataflow pulse.\n   * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n   *   value (including undefined) will let the input pulse pass through.\n   */\n  transform() {}\n\n});\n\nconst transforms = {};\nfunction definition(type) {\n  const t = transform(type);\n  return t && t.Definition || null;\n}\nfunction transform(type) {\n  type = type && type.toLowerCase();\n  return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n  if (valueof == null) {\n    for (let value of values) {\n      if (value != null && value !== '' && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n\n    for (let value of values) {\n      value = valueof(value, ++index, values);\n\n      if (value != null && value !== '' && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n\nfunction quantiles (array, p, f) {\n  const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call\n  // protects against undefined sort results in Safari (vega/vega-lite#4964)\n\n  values.sort(ascending);\n  return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n  return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Theory, Practice, and Visualization. Wiley.\n\nfunction estimateBandwidth (array, f) {\n  const n = array.length,\n        d = deviation(array, f),\n        q = quartiles(array, f),\n        h = (q[2] - q[0]) / 1.34,\n        v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n  return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n  // determine range\n  const maxb = _.maxbins || 20,\n        base = _.base || 10,\n        logb = Math.log(base),\n        div = _.divide || [5, 2];\n  let min = _.extent[0],\n      max = _.extent[1],\n      step,\n      level,\n      minstep,\n      v,\n      i,\n      n;\n  const span = _.span || max - min || Math.abs(min) || 1;\n\n  if (_.step) {\n    // if step size is explicitly given, use that\n    step = _.step;\n  } else if (_.steps) {\n    // if provided, limit choice to acceptable step sizes\n    v = span / maxb;\n\n    for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n\n    step = _.steps[Math.max(0, i - 1)];\n  } else {\n    // else use span to determine step size\n    level = Math.ceil(Math.log(maxb) / logb);\n    minstep = _.minstep || 0;\n    step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins\n\n    while (Math.ceil(span / step) > maxb) {\n      step *= base;\n    } // decrease step size if allowed\n\n\n    for (i = 0, n = div.length; i < n; ++i) {\n      v = step / div[i];\n      if (v >= minstep && span / v <= maxb) step = v;\n    }\n  } // update precision, min and max\n\n\n  v = Math.log(step);\n  const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n        eps = Math.pow(base, -precision - 1);\n\n  if (_.nice || _.nice === undefined) {\n    v = Math.floor(min / step + eps) * step;\n    min = min < v ? v - step : v;\n    max = Math.ceil(max / step) * step;\n  }\n\n  return {\n    start: min,\n    stop: max === min ? min + step : max,\n    step: step\n  };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n  random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n  if (!array.length) return [undefined, undefined];\n  const values = Float64Array.from(numbers(array, f)),\n        n = values.length,\n        m = samples;\n  let a, i, j, mu;\n\n  for (j = 0, mu = Array(m); j < m; ++j) {\n    for (a = 0, i = 0; i < n; ++i) {\n      a += values[~~(random() * n)];\n    }\n\n    mu[j] = a / n;\n  }\n\n  mu.sort(ascending);\n  return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n  f = f || (_ => _);\n\n  const n = array.length,\n        v = new Float64Array(n);\n  let i = 0,\n      j = 1,\n      a = f(array[0]),\n      b = a,\n      w = a + step,\n      x;\n\n  for (; j < n; ++j) {\n    x = f(array[j]);\n\n    if (x >= w) {\n      b = (a + b) / 2;\n\n      for (; i < j; ++i) v[i] = b;\n\n      w = x + step;\n      a = x;\n    }\n\n    b = x;\n  }\n\n  b = (a + b) / 2;\n\n  for (; i < j; ++i) v[i] = b;\n\n  return smooth ? smoothing(v, step + step / 4) : v;\n} // perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\n\nfunction smoothing(v, thresh) {\n  const n = v.length;\n  let a = 0,\n      b = 1,\n      c,\n      d; // get left stack\n\n  while (v[a] === v[b]) ++b;\n\n  while (b < n) {\n    // get right stack\n    c = b + 1;\n\n    while (v[b] === v[c]) ++c; // are stacks adjacent?\n    // if so, compare sizes and swap as needed\n\n\n    if (v[b] - v[b - 1] < thresh) {\n      d = b + (a + c - b - b >> 1);\n\n      while (d < b) v[d++] = v[b];\n\n      while (d > b) v[d--] = v[a];\n    } // update left stack indices\n\n\n    a = b;\n    b = c;\n  }\n\n  return v;\n}\n\nfunction lcg (seed) {\n  // Random numbers using a Linear Congruential Generator with seed value\n  // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n  return function () {\n    seed = (1103515245 * seed + 12345) % 2147483647;\n    return seed / 2147483647;\n  };\n}\n\nfunction integer (min, max) {\n  if (max == null) {\n    max = min;\n    min = 0;\n  }\n\n  let a, b, d;\n  const dist = {\n    min(_) {\n      if (arguments.length) {\n        a = _ || 0;\n        d = b - a;\n        return dist;\n      } else {\n        return a;\n      }\n    },\n\n    max(_) {\n      if (arguments.length) {\n        b = _ || 0;\n        d = b - a;\n        return dist;\n      } else {\n        return b;\n      }\n    },\n\n    sample() {\n      return a + Math.floor(d * random());\n    },\n\n    pdf(x) {\n      return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n    },\n\n    cdf(x) {\n      const v = Math.floor(x);\n      return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n    },\n\n    icdf(p) {\n      return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n    }\n\n  };\n  return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n  mean = mean || 0;\n  stdev = stdev == null ? 1 : stdev;\n  let x = 0,\n      y = 0,\n      rds,\n      c;\n\n  if (nextSample === nextSample) {\n    x = nextSample;\n    nextSample = NaN;\n  } else {\n    do {\n      x = random() * 2 - 1;\n      y = random() * 2 - 1;\n      rds = x * x + y * y;\n    } while (rds === 0 || rds > 1);\n\n    c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n\n    x *= c;\n    nextSample = y * c;\n  }\n\n  return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n  stdev = stdev == null ? 1 : stdev;\n  const z = (value - (mean || 0)) / stdev;\n  return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n} // Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\n\nfunction cumulativeNormal(value, mean, stdev) {\n  mean = mean || 0;\n  stdev = stdev == null ? 1 : stdev;\n  const z = (value - mean) / stdev,\n        Z = Math.abs(z);\n  let cd;\n\n  if (Z > 37) {\n    cd = 0;\n  } else {\n    const exp = Math.exp(-Z * Z / 2);\n    let sum;\n\n    if (Z < 7.07106781186547) {\n      sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n      sum = sum * Z + 6.37396220353165;\n      sum = sum * Z + 33.912866078383;\n      sum = sum * Z + 112.079291497871;\n      sum = sum * Z + 221.213596169931;\n      sum = sum * Z + 220.206867912376;\n      cd = exp * sum;\n      sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n      sum = sum * Z + 16.064177579207;\n      sum = sum * Z + 86.7807322029461;\n      sum = sum * Z + 296.564248779674;\n      sum = sum * Z + 637.333633378831;\n      sum = sum * Z + 793.826512519948;\n      sum = sum * Z + 440.413735824752;\n      cd = cd / sum;\n    } else {\n      sum = Z + 0.65;\n      sum = Z + 4 / sum;\n      sum = Z + 3 / sum;\n      sum = Z + 2 / sum;\n      sum = Z + 1 / sum;\n      cd = exp / sum / 2.506628274631;\n    }\n  }\n\n  return z > 0 ? 1 - cd : cd;\n} // Approximation of Probit function using inverse error function.\n\nfunction quantileNormal(p, mean, stdev) {\n  if (p < 0 || p > 1) return NaN;\n  return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n} // Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\n\nfunction erfinv(x) {\n  // beware that the logarithm argument must be\n  // commputed as (1.0 - x) * (1.0 + x),\n  // it must NOT be simplified as 1.0 - x * x as this\n  // would induce rounding errors near the boundaries +/-1\n  let w = -Math.log((1 - x) * (1 + x)),\n      p;\n\n  if (w < 6.25) {\n    w -= 3.125;\n    p = -3.6444120640178196996e-21;\n    p = -1.685059138182016589e-19 + p * w;\n    p = 1.2858480715256400167e-18 + p * w;\n    p = 1.115787767802518096e-17 + p * w;\n    p = -1.333171662854620906e-16 + p * w;\n    p = 2.0972767875968561637e-17 + p * w;\n    p = 6.6376381343583238325e-15 + p * w;\n    p = -4.0545662729752068639e-14 + p * w;\n    p = -8.1519341976054721522e-14 + p * w;\n    p = 2.6335093153082322977e-12 + p * w;\n    p = -1.2975133253453532498e-11 + p * w;\n    p = -5.4154120542946279317e-11 + p * w;\n    p = 1.051212273321532285e-09 + p * w;\n    p = -4.1126339803469836976e-09 + p * w;\n    p = -2.9070369957882005086e-08 + p * w;\n    p = 4.2347877827932403518e-07 + p * w;\n    p = -1.3654692000834678645e-06 + p * w;\n    p = -1.3882523362786468719e-05 + p * w;\n    p = 0.0001867342080340571352 + p * w;\n    p = -0.00074070253416626697512 + p * w;\n    p = -0.0060336708714301490533 + p * w;\n    p = 0.24015818242558961693 + p * w;\n    p = 1.6536545626831027356 + p * w;\n  } else if (w < 16.0) {\n    w = Math.sqrt(w) - 3.25;\n    p = 2.2137376921775787049e-09;\n    p = 9.0756561938885390979e-08 + p * w;\n    p = -2.7517406297064545428e-07 + p * w;\n    p = 1.8239629214389227755e-08 + p * w;\n    p = 1.5027403968909827627e-06 + p * w;\n    p = -4.013867526981545969e-06 + p * w;\n    p = 2.9234449089955446044e-06 + p * w;\n    p = 1.2475304481671778723e-05 + p * w;\n    p = -4.7318229009055733981e-05 + p * w;\n    p = 6.8284851459573175448e-05 + p * w;\n    p = 2.4031110387097893999e-05 + p * w;\n    p = -0.0003550375203628474796 + p * w;\n    p = 0.00095328937973738049703 + p * w;\n    p = -0.0016882755560235047313 + p * w;\n    p = 0.0024914420961078508066 + p * w;\n    p = -0.0037512085075692412107 + p * w;\n    p = 0.005370914553590063617 + p * w;\n    p = 1.0052589676941592334 + p * w;\n    p = 3.0838856104922207635 + p * w;\n  } else if (Number.isFinite(w)) {\n    w = Math.sqrt(w) - 5.0;\n    p = -2.7109920616438573243e-11;\n    p = -2.5556418169965252055e-10 + p * w;\n    p = 1.5076572693500548083e-09 + p * w;\n    p = -3.7894654401267369937e-09 + p * w;\n    p = 7.6157012080783393804e-09 + p * w;\n    p = -1.4960026627149240478e-08 + p * w;\n    p = 2.9147953450901080826e-08 + p * w;\n    p = -6.7711997758452339498e-08 + p * w;\n    p = 2.2900482228026654717e-07 + p * w;\n    p = -9.9298272942317002539e-07 + p * w;\n    p = 4.5260625972231537039e-06 + p * w;\n    p = -1.9681778105531670567e-05 + p * w;\n    p = 7.5995277030017761139e-05 + p * w;\n    p = -0.00021503011930044477347 + p * w;\n    p = -0.00013871931833623122026 + p * w;\n    p = 1.0103004648645343977 + p * w;\n    p = 4.8499064014085844221 + p * w;\n  } else {\n    p = Infinity;\n  }\n\n  return p * x;\n}\n\nfunction gaussian (mean, stdev) {\n  let mu, sigma;\n  const dist = {\n    mean(_) {\n      if (arguments.length) {\n        mu = _ || 0;\n        return dist;\n      } else {\n        return mu;\n      }\n    },\n\n    stdev(_) {\n      if (arguments.length) {\n        sigma = _ == null ? 1 : _;\n        return dist;\n      } else {\n        return sigma;\n      }\n    },\n\n    sample: () => sampleNormal(mu, sigma),\n    pdf: value => densityNormal(value, mu, sigma),\n    cdf: value => cumulativeNormal(value, mu, sigma),\n    icdf: p => quantileNormal(p, mu, sigma)\n  };\n  return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n  const kernel = gaussian();\n  let n = 0;\n  const dist = {\n    data(_) {\n      if (arguments.length) {\n        support = _;\n        n = _ ? _.length : 0;\n        return dist.bandwidth(bandwidth);\n      } else {\n        return support;\n      }\n    },\n\n    bandwidth(_) {\n      if (!arguments.length) return bandwidth;\n      bandwidth = _;\n      if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n      return dist;\n    },\n\n    sample() {\n      return support[~~(random() * n)] + bandwidth * kernel.sample();\n    },\n\n    pdf(x) {\n      let y = 0,\n          i = 0;\n\n      for (; i < n; ++i) {\n        y += kernel.pdf((x - support[i]) / bandwidth);\n      }\n\n      return y / bandwidth / n;\n    },\n\n    cdf(x) {\n      let y = 0,\n          i = 0;\n\n      for (; i < n; ++i) {\n        y += kernel.cdf((x - support[i]) / bandwidth);\n      }\n\n      return y / n;\n    },\n\n    icdf() {\n      throw Error('KDE icdf not supported.');\n    }\n\n  };\n  return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n  mean = mean || 0;\n  stdev = stdev == null ? 1 : stdev;\n  return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n  if (value <= 0) return 0;\n  mean = mean || 0;\n  stdev = stdev == null ? 1 : stdev;\n  const z = (Math.log(value) - mean) / stdev;\n  return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n  return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n  return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n  let mu, sigma;\n  const dist = {\n    mean(_) {\n      if (arguments.length) {\n        mu = _ || 0;\n        return dist;\n      } else {\n        return mu;\n      }\n    },\n\n    stdev(_) {\n      if (arguments.length) {\n        sigma = _ == null ? 1 : _;\n        return dist;\n      } else {\n        return sigma;\n      }\n    },\n\n    sample: () => sampleLogNormal(mu, sigma),\n    pdf: value => densityLogNormal(value, mu, sigma),\n    cdf: value => cumulativeLogNormal(value, mu, sigma),\n    icdf: p => quantileLogNormal(p, mu, sigma)\n  };\n  return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n  let m = 0,\n      w;\n\n  function normalize(x) {\n    const w = [];\n    let sum = 0,\n        i;\n\n    for (i = 0; i < m; ++i) {\n      sum += w[i] = x[i] == null ? 1 : +x[i];\n    }\n\n    for (i = 0; i < m; ++i) {\n      w[i] /= sum;\n    }\n\n    return w;\n  }\n\n  const dist = {\n    weights(_) {\n      if (arguments.length) {\n        w = normalize(weights = _ || []);\n        return dist;\n      }\n\n      return weights;\n    },\n\n    distributions(_) {\n      if (arguments.length) {\n        if (_) {\n          m = _.length;\n          dists = _;\n        } else {\n          m = 0;\n          dists = [];\n        }\n\n        return dist.weights(weights);\n      }\n\n      return dists;\n    },\n\n    sample() {\n      const r = random();\n      let d = dists[m - 1],\n          v = w[0],\n          i = 0; // first select distribution\n\n      for (; i < m - 1; v += w[++i]) {\n        if (r < v) {\n          d = dists[i];\n          break;\n        }\n      } // then sample from it\n\n\n      return d.sample();\n    },\n\n    pdf(x) {\n      let p = 0,\n          i = 0;\n\n      for (; i < m; ++i) {\n        p += w[i] * dists[i].pdf(x);\n      }\n\n      return p;\n    },\n\n    cdf(x) {\n      let p = 0,\n          i = 0;\n\n      for (; i < m; ++i) {\n        p += w[i] * dists[i].cdf(x);\n      }\n\n      return p;\n    },\n\n    icdf() {\n      throw Error('Mixture icdf not supported.');\n    }\n\n  };\n  return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n  if (max == null) {\n    max = min == null ? 1 : min;\n    min = 0;\n  }\n\n  return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n  if (max == null) {\n    max = min == null ? 1 : min;\n    min = 0;\n  }\n\n  return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n  if (max == null) {\n    max = min == null ? 1 : min;\n    min = 0;\n  }\n\n  return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n  if (max == null) {\n    max = min == null ? 1 : min;\n    min = 0;\n  }\n\n  return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n  let a, b;\n  const dist = {\n    min(_) {\n      if (arguments.length) {\n        a = _ || 0;\n        return dist;\n      } else {\n        return a;\n      }\n    },\n\n    max(_) {\n      if (arguments.length) {\n        b = _ == null ? 1 : _;\n        return dist;\n      } else {\n        return b;\n      }\n    },\n\n    sample: () => sampleUniform(a, b),\n    pdf: value => densityUniform(value, a, b),\n    cdf: value => cumulativeUniform(value, a, b),\n    icdf: p => quantileUniform(p, a, b)\n  };\n\n  if (max == null) {\n    max = min == null ? 1 : min;\n    min = 0;\n  }\n\n  return dist.min(min).max(max);\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n  const delta = uX2 - uX * uX,\n        slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n        intercept = uY - slope * uX;\n  return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n  data = data.filter(d => {\n    let u = x(d),\n        v = y(d);\n    return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n  });\n\n  if (sort) {\n    data.sort((a, b) => x(a) - x(b));\n  }\n\n  const n = data.length,\n        X = new Float64Array(n),\n        Y = new Float64Array(n); // extract values, calculate means\n\n  let i = 0,\n      ux = 0,\n      uy = 0,\n      xv,\n      yv,\n      d;\n\n  for (d of data) {\n    X[i] = xv = +x(d);\n    Y[i] = yv = +y(d);\n    ++i;\n    ux += (xv - ux) / i;\n    uy += (yv - uy) / i;\n  } // mean center the data\n\n\n  for (i = 0; i < n; ++i) {\n    X[i] -= ux;\n    Y[i] -= uy;\n  }\n\n  return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n  let i = -1,\n      u,\n      v;\n\n  for (const d of data) {\n    u = x(d);\n    v = y(d);\n\n    if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n      callback(u, v, ++i);\n    }\n  }\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction rSquared (data, x, y, uY, predict) {\n  let SSE = 0,\n      SST = 0;\n  visitPoints(data, x, y, (dx, dy) => {\n    const sse = dy - predict(dx),\n          sst = dy - uY;\n    SSE += sse * sse;\n    SST += sst * sst;\n  });\n  return 1 - SSE / SST;\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction linear (data, x, y) {\n  let X = 0,\n      Y = 0,\n      XY = 0,\n      X2 = 0,\n      n = 0;\n  visitPoints(data, x, y, (dx, dy) => {\n    ++n;\n    X += (dx - X) / n;\n    Y += (dy - Y) / n;\n    XY += (dx * dy - XY) / n;\n    X2 += (dx * dx - X2) / n;\n  });\n\n  const coef = ols(X, Y, XY, X2),\n        predict = x => coef[0] + coef[1] * x;\n\n  return {\n    coef: coef,\n    predict: predict,\n    rSquared: rSquared(data, x, y, Y, predict)\n  };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction log (data, x, y) {\n  let X = 0,\n      Y = 0,\n      XY = 0,\n      X2 = 0,\n      n = 0;\n  visitPoints(data, x, y, (dx, dy) => {\n    ++n;\n    dx = Math.log(dx);\n    X += (dx - X) / n;\n    Y += (dy - Y) / n;\n    XY += (dx * dy - XY) / n;\n    X2 += (dx * dx - X2) / n;\n  });\n\n  const coef = ols(X, Y, XY, X2),\n        predict = x => coef[0] + coef[1] * Math.log(x);\n\n  return {\n    coef: coef,\n    predict: predict,\n    rSquared: rSquared(data, x, y, Y, predict)\n  };\n}\n\nfunction exp (data, x, y) {\n  // eslint-disable-next-line no-unused-vars\n  const [xv, yv, ux, uy] = points(data, x, y);\n  let YL = 0,\n      XY = 0,\n      XYL = 0,\n      X2Y = 0,\n      n = 0,\n      dx,\n      ly,\n      xy;\n  visitPoints(data, x, y, (_, dy) => {\n    dx = xv[n++];\n    ly = Math.log(dy);\n    xy = dx * dy;\n    YL += (dy * ly - YL) / n;\n    XY += (xy - XY) / n;\n    XYL += (xy * ly - XYL) / n;\n    X2Y += (dx * xy - X2Y) / n;\n  });\n\n  const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n        predict = x => Math.exp(c0 + c1 * (x - ux));\n\n  return {\n    coef: [Math.exp(c0 - c1 * ux), c1],\n    predict: predict,\n    rSquared: rSquared(data, x, y, uy, predict)\n  };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction pow (data, x, y) {\n  let X = 0,\n      Y = 0,\n      XY = 0,\n      X2 = 0,\n      YS = 0,\n      n = 0;\n  visitPoints(data, x, y, (dx, dy) => {\n    const lx = Math.log(dx),\n          ly = Math.log(dy);\n    ++n;\n    X += (lx - X) / n;\n    Y += (ly - Y) / n;\n    XY += (lx * ly - XY) / n;\n    X2 += (lx * lx - X2) / n;\n    YS += (dy - YS) / n;\n  });\n\n  const coef = ols(X, Y, XY, X2),\n        predict = x => coef[0] * Math.pow(x, coef[1]);\n\n  coef[0] = Math.exp(coef[0]);\n  return {\n    coef: coef,\n    predict: predict,\n    rSquared: rSquared(data, x, y, YS, predict)\n  };\n}\n\nfunction quad (data, x, y) {\n  const [xv, yv, ux, uy] = points(data, x, y),\n        n = xv.length;\n  let X2 = 0,\n      X3 = 0,\n      X4 = 0,\n      XY = 0,\n      X2Y = 0,\n      i,\n      dx,\n      dy,\n      x2;\n\n  for (i = 0; i < n;) {\n    dx = xv[i];\n    dy = yv[i++];\n    x2 = dx * dx;\n    X2 += (x2 - X2) / i;\n    X3 += (x2 * dx - X3) / i;\n    X4 += (x2 * x2 - X4) / i;\n    XY += (dx * dy - XY) / i;\n    X2Y += (x2 * dy - X2Y) / i;\n  }\n\n  const X2X2 = X4 - X2 * X2,\n        d = X2 * X2X2 - X3 * X3,\n        a = (X2Y * X2 - XY * X3) / d,\n        b = (XY * X2X2 - X2Y * X3) / d,\n        c = -a * X2,\n        predict = x => {\n    x = x - ux;\n    return a * x * x + b * x + c + uy;\n  }; // transform coefficients back from mean-centered space\n\n\n  return {\n    coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n    predict: predict,\n    rSquared: rSquared(data, x, y, uy, predict)\n  };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n\nfunction poly (data, x, y, order) {\n  // use more efficient methods for lower orders\n  if (order === 1) return linear(data, x, y);\n  if (order === 2) return quad(data, x, y);\n  const [xv, yv, ux, uy] = points(data, x, y),\n        n = xv.length,\n        lhs = [],\n        rhs = [],\n        k = order + 1;\n  let i, j, l, v, c;\n\n  for (i = 0; i < k; ++i) {\n    for (l = 0, v = 0; l < n; ++l) {\n      v += Math.pow(xv[l], i) * yv[l];\n    }\n\n    lhs.push(v);\n    c = new Float64Array(k);\n\n    for (j = 0; j < k; ++j) {\n      for (l = 0, v = 0; l < n; ++l) {\n        v += Math.pow(xv[l], i + j);\n      }\n\n      c[j] = v;\n    }\n\n    rhs.push(c);\n  }\n\n  rhs.push(lhs);\n\n  const coef = gaussianElimination(rhs),\n        predict = x => {\n    x -= ux;\n    let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n    for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n\n    return y;\n  };\n\n  return {\n    coef: uncenter(k, coef, -ux, uy),\n    predict: predict,\n    rSquared: rSquared(data, x, y, uy, predict)\n  };\n}\n\nfunction uncenter(k, a, x, y) {\n  const z = Array(k);\n  let i, j, v, c; // initialize to zero\n\n  for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion\n\n\n  for (i = k - 1; i >= 0; --i) {\n    v = a[i];\n    c = 1;\n    z[i] += v;\n\n    for (j = 1; j <= i; ++j) {\n      c *= (i + 1 - j) / j; // binomial coefficent\n\n      z[i - j] += v * Math.pow(x, j) * c;\n    }\n  } // bias term\n\n\n  z[0] += y;\n  return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n  const n = matrix.length - 1,\n        coef = [];\n  let i, j, k, r, t;\n\n  for (i = 0; i < n; ++i) {\n    r = i; // max row\n\n    for (j = i + 1; j < n; ++j) {\n      if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n        r = j;\n      }\n    }\n\n    for (k = i; k < n + 1; ++k) {\n      t = matrix[k][i];\n      matrix[k][i] = matrix[k][r];\n      matrix[k][r] = t;\n    }\n\n    for (j = i + 1; j < n; ++j) {\n      for (k = n; k >= i; k--) {\n        matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n      }\n    }\n  }\n\n  for (j = n - 1; j >= 0; --j) {\n    t = 0;\n\n    for (k = j + 1; k < n; ++k) {\n      t += matrix[k][j] * coef[k];\n    }\n\n    coef[j] = (matrix[n][j] - t) / matrix[j][j];\n  }\n\n  return coef;\n}\n\nconst maxiters = 2,\n      epsilon = 1e-12; // Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n\nfunction loess (data, x, y, bandwidth) {\n  const [xv, yv, ux, uy] = points(data, x, y, true),\n        n = xv.length,\n        bw = Math.max(2, ~~(bandwidth * n)),\n        // # nearest neighbors\n  yhat = new Float64Array(n),\n        residuals = new Float64Array(n),\n        robustWeights = new Float64Array(n).fill(1);\n\n  for (let iter = -1; ++iter <= maxiters;) {\n    const interval = [0, bw - 1];\n\n    for (let i = 0; i < n; ++i) {\n      const dx = xv[i],\n            i0 = interval[0],\n            i1 = interval[1],\n            edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n      let W = 0,\n          X = 0,\n          Y = 0,\n          XY = 0,\n          X2 = 0;\n      const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n      for (let k = i0; k <= i1; ++k) {\n        const xk = xv[k],\n              yk = yv[k],\n              w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n              xkw = xk * w;\n        W += w;\n        X += xkw;\n        Y += yk * w;\n        XY += yk * xkw;\n        X2 += xk * xkw;\n      } // linear regression fit\n\n\n      const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n      yhat[i] = a + b * dx;\n      residuals[i] = Math.abs(yv[i] - yhat[i]);\n      updateInterval(xv, i + 1, interval);\n    }\n\n    if (iter === maxiters) {\n      break;\n    }\n\n    const medianResidual = median(residuals);\n    if (Math.abs(medianResidual) < epsilon) break;\n\n    for (let i = 0, arg, w; i < n; ++i) {\n      arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations\n      // keeping weights tiny but non-zero prevents singularites\n\n      robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n    }\n  }\n\n  return output(xv, yhat, ux, uy);\n} // weighting kernel for local regression\n\nfunction tricube(x) {\n  return (x = 1 - x * x * x) * x * x;\n} // advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n  const val = xv[i];\n  let left = interval[0],\n      right = interval[1] + 1;\n  if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge\n  // step when distance is equal to ensure movement over duplicate x values\n\n  while (i > left && xv[right] - val <= val - xv[left]) {\n    interval[0] = ++left;\n    interval[1] = right;\n    ++right;\n  }\n} // generate smoothed output points\n// average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n  const n = xv.length,\n        out = [];\n  let i = 0,\n      cnt = 0,\n      prev = [],\n      v;\n\n  for (; i < n; ++i) {\n    v = xv[i] + ux;\n\n    if (prev[0] === v) {\n      // average output values via online update\n      prev[1] += (yhat[i] - prev[1]) / ++cnt;\n    } else {\n      // add new output point\n      cnt = 0;\n      prev[1] += uy;\n      prev = [v, yhat[i]];\n      out.push(prev);\n    }\n  }\n\n  prev[1] += uy;\n  return out;\n}\n\n// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent\n\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n  minSteps = minSteps || 25;\n  maxSteps = Math.max(minSteps, maxSteps || 200);\n\n  const point = x => [x, f(x)],\n        minX = extent[0],\n        maxX = extent[1],\n        span = maxX - minX,\n        stop = span / maxSteps,\n        prev = [point(minX)],\n        next = [];\n\n  if (minSteps === maxSteps) {\n    // no adaptation, sample uniform grid directly and return\n    for (let i = 1; i < maxSteps; ++i) {\n      prev.push(point(minX + i / minSteps * span));\n    }\n\n    prev.push(point(maxX));\n    return prev;\n  } else {\n    // sample minimum points on uniform grid\n    // then move on to perform adaptive refinement\n    next.push(point(maxX));\n\n    for (let i = minSteps; --i > 0;) {\n      next.push(point(minX + i / minSteps * span));\n    }\n  }\n\n  let p0 = prev[0],\n      p1 = next[next.length - 1];\n\n  while (p1) {\n    // midpoint for potential curve subdivision\n    const pm = point((p0[0] + p1[0]) / 2);\n\n    if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n      // maximum resolution has not yet been met, and\n      // subdivision midpoint sufficiently different from endpoint\n      // save subdivision, push midpoint onto the visitation stack\n      next.push(pm);\n    } else {\n      // subdivision midpoint sufficiently similar to endpoint\n      // skip subdivision, store endpoint, move to next point on the stack\n      p0 = p1;\n      prev.push(p1);\n      next.pop();\n    }\n\n    p1 = next[next.length - 1];\n  }\n\n  return prev;\n}\n\nfunction angleDelta(p, q, r) {\n  const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n        a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n  return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n  return x => {\n    const n = f.length;\n    let i = 1,\n        k = String(f[0](x));\n\n    for (; i < n; ++i) {\n      k += '|' + f[i](x);\n    }\n\n    return k;\n  };\n}\nfunction groupkey(fields) {\n  return !fields || !fields.length ? function () {\n    return '';\n  } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n  return as || op + (!field ? '' : '_' + field);\n}\n\nconst noop = () => {};\n\nconst base_op = {\n  init: noop,\n  add: noop,\n  rem: noop,\n  idx: 0\n};\nconst AggregateOps = {\n  values: {\n    init: m => m.cell.store = true,\n    value: m => m.cell.data.values(),\n    idx: -1\n  },\n  count: {\n    value: m => m.cell.num\n  },\n  __count__: {\n    value: m => m.missing + m.valid\n  },\n  missing: {\n    value: m => m.missing\n  },\n  valid: {\n    value: m => m.valid\n  },\n  sum: {\n    init: m => m.sum = 0,\n    value: m => m.sum,\n    add: (m, v) => m.sum += +v,\n    rem: (m, v) => m.sum -= v\n  },\n  product: {\n    init: m => m.product = 1,\n    value: m => m.valid ? m.product : undefined,\n    add: (m, v) => m.product *= v,\n    rem: (m, v) => m.product /= v\n  },\n  mean: {\n    init: m => m.mean = 0,\n    value: m => m.valid ? m.mean : undefined,\n    add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n    rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n  },\n  average: {\n    value: m => m.valid ? m.mean : undefined,\n    req: ['mean'],\n    idx: 1\n  },\n  variance: {\n    init: m => m.dev = 0,\n    value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n    add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n    rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n    req: ['mean'],\n    idx: 1\n  },\n  variancep: {\n    value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n    req: ['variance'],\n    idx: 2\n  },\n  stdev: {\n    value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n    req: ['variance'],\n    idx: 2\n  },\n  stdevp: {\n    value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n    req: ['variance'],\n    idx: 2\n  },\n  stderr: {\n    value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n    req: ['variance'],\n    idx: 2\n  },\n  distinct: {\n    value: m => m.cell.data.distinct(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  ci0: {\n    value: m => m.cell.data.ci0(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  ci1: {\n    value: m => m.cell.data.ci1(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  median: {\n    value: m => m.cell.data.q2(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  q1: {\n    value: m => m.cell.data.q1(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  q3: {\n    value: m => m.cell.data.q3(m.get),\n    req: ['values'],\n    idx: 3\n  },\n  min: {\n    init: m => m.min = undefined,\n    value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n    add: (m, v) => {\n      if (v < m.min || m.min === undefined) m.min = v;\n    },\n    rem: (m, v) => {\n      if (v <= m.min) m.min = NaN;\n    },\n    req: ['values'],\n    idx: 4\n  },\n  max: {\n    init: m => m.max = undefined,\n    value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n    add: (m, v) => {\n      if (v > m.max || m.max === undefined) m.max = v;\n    },\n    rem: (m, v) => {\n      if (v >= m.max) m.max = NaN;\n    },\n    req: ['values'],\n    idx: 4\n  },\n  argmin: {\n    init: m => m.argmin = undefined,\n    value: m => m.argmin || m.cell.data.argmin(m.get),\n    add: (m, v, t) => {\n      if (v < m.min) m.argmin = t;\n    },\n    rem: (m, v) => {\n      if (v <= m.min) m.argmin = undefined;\n    },\n    req: ['min', 'values'],\n    idx: 3\n  },\n  argmax: {\n    init: m => m.argmax = undefined,\n    value: m => m.argmax || m.cell.data.argmax(m.get),\n    add: (m, v, t) => {\n      if (v > m.max) m.argmax = t;\n    },\n    rem: (m, v) => {\n      if (v >= m.max) m.argmax = undefined;\n    },\n    req: ['max', 'values'],\n    idx: 3\n  }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps);\n\nfunction measure(key, value) {\n  return out => extend({\n    name: key,\n    out: out || key\n  }, base_op, value);\n}\n\nValidAggregateOps.forEach(key => {\n  AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n  return AggregateOps[op](name);\n}\n\nfunction compareIndex(a, b) {\n  return a.idx - b.idx;\n}\n\nfunction resolve(agg) {\n  const map = {};\n  agg.forEach(a => map[a.name] = a);\n\n  const getreqs = a => {\n    if (!a.req) return;\n    a.req.forEach(key => {\n      if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n    });\n  };\n\n  agg.forEach(getreqs);\n  return Object.values(map).sort(compareIndex);\n}\n\nfunction init() {\n  this.valid = 0;\n  this.missing = 0;\n\n  this._ops.forEach(op => op.init(this));\n}\n\nfunction add(v, t) {\n  if (v == null || v === '') {\n    ++this.missing;\n    return;\n  }\n\n  if (v !== v) return;\n  ++this.valid;\n\n  this._ops.forEach(op => op.add(this, v, t));\n}\n\nfunction rem(v, t) {\n  if (v == null || v === '') {\n    --this.missing;\n    return;\n  }\n\n  if (v !== v) return;\n  --this.valid;\n\n  this._ops.forEach(op => op.rem(this, v, t));\n}\n\nfunction set(t) {\n  this._out.forEach(op => t[op.out] = op.value(this));\n\n  return t;\n}\n\nfunction compileMeasures(agg, field) {\n  const get = field || identity,\n        ops = resolve(agg),\n        out = agg.slice().sort(compareIndex);\n\n  function ctr(cell) {\n    this._ops = ops;\n    this._out = out;\n    this.cell = cell;\n    this.init();\n  }\n\n  ctr.prototype.init = init;\n  ctr.prototype.add = add;\n  ctr.prototype.rem = rem;\n  ctr.prototype.set = set;\n  ctr.prototype.get = get;\n  ctr.fields = agg.map(op => op.out);\n  return ctr;\n}\n\nfunction TupleStore(key) {\n  this._key = key ? field(key) : tupleid;\n  this.reset();\n}\nconst prototype = TupleStore.prototype;\n\nprototype.reset = function () {\n  this._add = [];\n  this._rem = [];\n  this._ext = null;\n  this._get = null;\n  this._q = null;\n};\n\nprototype.add = function (v) {\n  this._add.push(v);\n};\n\nprototype.rem = function (v) {\n  this._rem.push(v);\n};\n\nprototype.values = function () {\n  this._get = null;\n  if (this._rem.length === 0) return this._add;\n  const a = this._add,\n        r = this._rem,\n        k = this._key,\n        n = a.length,\n        m = r.length,\n        x = Array(n - m),\n        map = {};\n  let i, j, v; // use unique key field to clear removed values\n\n  for (i = 0; i < m; ++i) {\n    map[k(r[i])] = 1;\n  }\n\n  for (i = 0, j = 0; i < n; ++i) {\n    if (map[k(v = a[i])]) {\n      map[k(v)] = 0;\n    } else {\n      x[j++] = v;\n    }\n  }\n\n  this._rem = [];\n  return this._add = x;\n}; // memoizing statistics methods\n\n\nprototype.distinct = function (get) {\n  const v = this.values(),\n        map = {};\n  let n = v.length,\n      count = 0,\n      s;\n\n  while (--n >= 0) {\n    s = get(v[n]) + '';\n\n    if (!hasOwnProperty(map, s)) {\n      map[s] = 1;\n      ++count;\n    }\n  }\n\n  return count;\n};\n\nprototype.extent = function (get) {\n  if (this._get !== get || !this._ext) {\n    const v = this.values(),\n          i = extentIndex(v, get);\n    this._ext = [v[i[0]], v[i[1]]];\n    this._get = get;\n  }\n\n  return this._ext;\n};\n\nprototype.argmin = function (get) {\n  return this.extent(get)[0] || {};\n};\n\nprototype.argmax = function (get) {\n  return this.extent(get)[1] || {};\n};\n\nprototype.min = function (get) {\n  const m = this.extent(get)[0];\n  return m != null ? get(m) : undefined;\n};\n\nprototype.max = function (get) {\n  const m = this.extent(get)[1];\n  return m != null ? get(m) : undefined;\n};\n\nprototype.quartile = function (get) {\n  if (this._get !== get || !this._q) {\n    this._q = quartiles(this.values(), get);\n    this._get = get;\n  }\n\n  return this._q;\n};\n\nprototype.q1 = function (get) {\n  return this.quartile(get)[0];\n};\n\nprototype.q2 = function (get) {\n  return this.quartile(get)[1];\n};\n\nprototype.q3 = function (get) {\n  return this.quartile(get)[2];\n};\n\nprototype.ci = function (get) {\n  if (this._get !== get || !this._ci) {\n    this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n    this._get = get;\n  }\n\n  return this._ci;\n};\n\nprototype.ci0 = function (get) {\n  return this.ci(get)[0];\n};\n\nprototype.ci1 = function (get) {\n  return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {Array<function(object): *>} [params.fields] - An array of accessors to aggregate.\n * @param {Array<string>} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array<string>} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n *   cross-product of groupby values should be generated, including empty cells.\n *   If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\n\nfunction Aggregate(params) {\n  Transform.call(this, null, params);\n  this._adds = []; // array of added output tuples\n\n  this._mods = []; // array of modified output tuples\n\n  this._alen = 0; // number of active added tuples\n\n  this._mlen = 0; // number of active modified tuples\n\n  this._drop = true; // should empty aggregation cells be removed\n\n  this._cross = false; // produce full cross-product of group-by values\n\n  this._dims = []; // group-by dimension accessors\n\n  this._dnames = []; // group-by dimension names\n\n  this._measures = []; // collection of aggregation monoids\n\n  this._countOnly = false; // flag indicating only count aggregation\n\n  this._counts = null; // collection of count fields\n\n  this._prev = null; // previous aggregation cells\n\n  this._inputs = null; // array of dependent input tuple field names\n\n  this._outputs = null; // array of output tuple field names\n}\nAggregate.Definition = {\n  'type': 'Aggregate',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'ops',\n    'type': 'enum',\n    'array': true,\n    'values': ValidAggregateOps\n  }, {\n    'name': 'fields',\n    'type': 'field',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'drop',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'cross',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'key',\n    'type': 'field'\n  }]\n};\ninherits(Aggregate, Transform, {\n  transform(_, pulse) {\n    const aggr = this,\n          out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n          mod = _.modified();\n\n    aggr.stamp = out.stamp;\n\n    if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n      aggr._prev = aggr.value;\n      aggr.value = mod ? aggr.init(_) : {};\n      pulse.visit(pulse.SOURCE, t => aggr.add(t));\n    } else {\n      aggr.value = aggr.value || aggr.init(_);\n      pulse.visit(pulse.REM, t => aggr.rem(t));\n      pulse.visit(pulse.ADD, t => aggr.add(t));\n    } // Indicate output fields and return aggregate tuples.\n\n\n    out.modifies(aggr._outputs); // Should empty cells be dropped?\n\n    aggr._drop = _.drop !== false; // If domain cross-product requested, generate empty cells as needed\n    // and ensure that empty cells are not dropped\n\n    if (_.cross && aggr._dims.length > 1) {\n      aggr._drop = false;\n      aggr.cross();\n    }\n\n    if (pulse.clean() && aggr._drop) {\n      out.clean(true).runAfter(() => this.clean());\n    }\n\n    return aggr.changes(out);\n  },\n\n  cross() {\n    const aggr = this,\n          curr = aggr.value,\n          dims = aggr._dnames,\n          vals = dims.map(() => ({})),\n          n = dims.length; // collect all group-by domain values\n\n    function collect(cells) {\n      let key, i, t, v;\n\n      for (key in cells) {\n        t = cells[key].tuple;\n\n        for (i = 0; i < n; ++i) {\n          vals[i][v = t[dims[i]]] = v;\n        }\n      }\n    }\n\n    collect(aggr._prev);\n    collect(curr); // iterate over key cross-product, create cells as needed\n\n    function generate(base, tuple, index) {\n      const name = dims[index],\n            v = vals[index++];\n\n      for (const k in v) {\n        const key = base ? base + '|' + k : k;\n        tuple[name] = v[k];\n        if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n      }\n    }\n\n    generate('', {}, 0);\n  },\n\n  init(_) {\n    // initialize input and output fields\n    const inputs = this._inputs = [],\n          outputs = this._outputs = [],\n          inputMap = {};\n\n    function inputVisit(get) {\n      const fields = array(accessorFields(get)),\n            n = fields.length;\n      let i = 0,\n          f;\n\n      for (; i < n; ++i) {\n        if (!inputMap[f = fields[i]]) {\n          inputMap[f] = 1;\n          inputs.push(f);\n        }\n      }\n    } // initialize group-by dimensions\n\n\n    this._dims = array(_.groupby);\n    this._dnames = this._dims.map(d => {\n      const dname = accessorName(d);\n      inputVisit(d);\n      outputs.push(dname);\n      return dname;\n    });\n    this.cellkey = _.key ? _.key : groupkey(this._dims); // initialize aggregate measures\n\n    this._countOnly = true;\n    this._counts = [];\n    this._measures = [];\n    const fields = _.fields || [null],\n          ops = _.ops || ['count'],\n          as = _.as || [],\n          n = fields.length,\n          map = {};\n    let field, op, m, mname, outname, i;\n\n    if (n !== ops.length) {\n      error('Unmatched number of fields and aggregate ops.');\n    }\n\n    for (i = 0; i < n; ++i) {\n      field = fields[i];\n      op = ops[i];\n\n      if (field == null && op !== 'count') {\n        error('Null aggregate field specified.');\n      }\n\n      mname = accessorName(field);\n      outname = measureName(op, mname, as[i]);\n      outputs.push(outname);\n\n      if (op === 'count') {\n        this._counts.push(outname);\n\n        continue;\n      }\n\n      m = map[mname];\n\n      if (!m) {\n        inputVisit(field);\n        m = map[mname] = [];\n        m.field = field;\n\n        this._measures.push(m);\n      }\n\n      if (op !== 'count') this._countOnly = false;\n      m.push(createMeasure(op, outname));\n    }\n\n    this._measures = this._measures.map(m => compileMeasures(m, m.field));\n    return {}; // aggregation cells (this.value)\n  },\n\n  // -- Cell Management -----\n  cellkey: groupkey(),\n\n  cell(key, t) {\n    let cell = this.value[key];\n\n    if (!cell) {\n      cell = this.value[key] = this.newcell(key, t);\n      this._adds[this._alen++] = cell;\n    } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n      cell.stamp = this.stamp;\n      this._adds[this._alen++] = cell;\n    } else if (cell.stamp < this.stamp) {\n      cell.stamp = this.stamp;\n      this._mods[this._mlen++] = cell;\n    }\n\n    return cell;\n  },\n\n  newcell(key, t) {\n    const cell = {\n      key: key,\n      num: 0,\n      agg: null,\n      tuple: this.newtuple(t, this._prev && this._prev[key]),\n      stamp: this.stamp,\n      store: false\n    };\n\n    if (!this._countOnly) {\n      const measures = this._measures,\n            n = measures.length;\n      cell.agg = Array(n);\n\n      for (let i = 0; i < n; ++i) {\n        cell.agg[i] = new measures[i](cell);\n      }\n    }\n\n    if (cell.store) {\n      cell.data = new TupleStore();\n    }\n\n    return cell;\n  },\n\n  newtuple(t, p) {\n    const names = this._dnames,\n          dims = this._dims,\n          n = dims.length,\n          x = {};\n\n    for (let i = 0; i < n; ++i) {\n      x[names[i]] = dims[i](t);\n    }\n\n    return p ? replace(p.tuple, x) : ingest(x);\n  },\n\n  clean() {\n    const cells = this.value;\n\n    for (const key in cells) {\n      if (cells[key].num === 0) {\n        delete cells[key];\n      }\n    }\n  },\n\n  // -- Process Tuples -----\n  add(t) {\n    const key = this.cellkey(t),\n          cell = this.cell(key, t);\n    cell.num += 1;\n    if (this._countOnly) return;\n    if (cell.store) cell.data.add(t);\n    const agg = cell.agg;\n\n    for (let i = 0, n = agg.length; i < n; ++i) {\n      agg[i].add(agg[i].get(t), t);\n    }\n  },\n\n  rem(t) {\n    const key = this.cellkey(t),\n          cell = this.cell(key, t);\n    cell.num -= 1;\n    if (this._countOnly) return;\n    if (cell.store) cell.data.rem(t);\n    const agg = cell.agg;\n\n    for (let i = 0, n = agg.length; i < n; ++i) {\n      agg[i].rem(agg[i].get(t), t);\n    }\n  },\n\n  celltuple(cell) {\n    const tuple = cell.tuple,\n          counts = this._counts; // consolidate stored values\n\n    if (cell.store) {\n      cell.data.values();\n    } // update tuple properties\n\n\n    for (let i = 0, n = counts.length; i < n; ++i) {\n      tuple[counts[i]] = cell.num;\n    }\n\n    if (!this._countOnly) {\n      const agg = cell.agg;\n\n      for (let i = 0, n = agg.length; i < n; ++i) {\n        agg[i].set(tuple);\n      }\n    }\n\n    return tuple;\n  },\n\n  changes(out) {\n    const adds = this._adds,\n          mods = this._mods,\n          prev = this._prev,\n          drop = this._drop,\n          add = out.add,\n          rem = out.rem,\n          mod = out.mod;\n    let cell, key, i, n;\n    if (prev) for (key in prev) {\n      cell = prev[key];\n      if (!drop || cell.num) rem.push(cell.tuple);\n    }\n\n    for (i = 0, n = this._alen; i < n; ++i) {\n      add.push(this.celltuple(adds[i]));\n      adds[i] = null; // for garbage collection\n    }\n\n    for (i = 0, n = this._mlen; i < n; ++i) {\n      cell = mods[i];\n      (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n      mods[i] = null; // for garbage collection\n    }\n\n    this._alen = this._mlen = 0; // reset list of active cells\n\n    this._prev = null;\n    return out;\n  }\n\n});\n\nconst EPSILON = 1e-14;\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n *   provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\n\nfunction Bin(params) {\n  Transform.call(this, null, params);\n}\nBin.Definition = {\n  'type': 'Bin',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'interval',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'anchor',\n    'type': 'number'\n  }, {\n    'name': 'maxbins',\n    'type': 'number',\n    'default': 20\n  }, {\n    'name': 'base',\n    'type': 'number',\n    'default': 10\n  }, {\n    'name': 'divide',\n    'type': 'number',\n    'array': true,\n    'default': [5, 2]\n  }, {\n    'name': 'extent',\n    'type': 'number',\n    'array': true,\n    'length': 2,\n    'required': true\n  }, {\n    'name': 'span',\n    'type': 'number'\n  }, {\n    'name': 'step',\n    'type': 'number'\n  }, {\n    'name': 'steps',\n    'type': 'number',\n    'array': true\n  }, {\n    'name': 'minstep',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'nice',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'name',\n    'type': 'string'\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['bin0', 'bin1']\n  }]\n};\ninherits(Bin, Transform, {\n  transform(_, pulse) {\n    const band = _.interval !== false,\n          bins = this._bins(_),\n          start = bins.start,\n          step = bins.step,\n          as = _.as || ['bin0', 'bin1'],\n          b0 = as[0],\n          b1 = as[1];\n\n    let flag;\n\n    if (_.modified()) {\n      pulse = pulse.reflow(true);\n      flag = pulse.SOURCE;\n    } else {\n      flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n    }\n\n    pulse.visit(flag, band ? t => {\n      const v = bins(t); // minimum bin value (inclusive)\n\n      t[b0] = v; // maximum bin value (exclusive)\n      // use convoluted math for better floating point agreement\n      // see https://github.com/vega/vega/issues/830\n      // infinite values propagate through this formula! #2227\n\n      t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n    } : t => t[b0] = bins(t));\n    return pulse.modifies(band ? as : b0);\n  },\n\n  _bins(_) {\n    if (this.value && !_.modified()) {\n      return this.value;\n    }\n\n    const field = _.field,\n          bins = bin(_),\n          step = bins.step;\n    let start = bins.start,\n        stop = start + Math.ceil((bins.stop - start) / step) * step,\n        a,\n        d;\n\n    if ((a = _.anchor) != null) {\n      d = a - (start + step * Math.floor((a - start) / step));\n      start += d;\n      stop += d;\n    }\n\n    const f = function (t) {\n      let v = toNumber(field(t));\n      return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON + (v - start) / step));\n    };\n\n    f.start = start;\n    f.stop = bins.stop;\n    f.step = step;\n    return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n  }\n\n});\n\nfunction SortedList (idFunc, source, input) {\n  const $ = idFunc;\n  let data = source || [],\n      add = input || [],\n      rem = {},\n      cnt = 0;\n  return {\n    add: t => add.push(t),\n    remove: t => rem[$(t)] = ++cnt,\n    size: () => data.length,\n    data: (compare, resort) => {\n      if (cnt) {\n        data = data.filter(t => !rem[$(t)]);\n        rem = {};\n        cnt = 0;\n      }\n\n      if (resort && compare) {\n        data.sort(compare);\n      }\n\n      if (add.length) {\n        data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n        add = [];\n      }\n\n      return data;\n    }\n  };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n *   comparator function for additionally sorting the collected tuples.\n */\n\nfunction Collect(params) {\n  Transform.call(this, [], params);\n}\nCollect.Definition = {\n  'type': 'Collect',\n  'metadata': {\n    'source': true\n  },\n  'params': [{\n    'name': 'sort',\n    'type': 'compare'\n  }]\n};\ninherits(Collect, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.ALL),\n          list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n          sort = _.sort,\n          mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n    out.visit(out.REM, list.remove);\n    this.modified(mod);\n    this.value = out.source = list.data(stableCompare(sort), mod); // propagate tree root if defined\n\n    if (pulse.source && pulse.source.root) {\n      this.value.root = pulse.source.root;\n    }\n\n    return out;\n  }\n\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<string|function>} params.fields - The fields to compare.\n * @param {Array<string>} [params.orders] - The sort orders.\n *   Each entry should be one of \"ascending\" (default) or \"descending\".\n */\n\nfunction Compare(params) {\n  Operator.call(this, null, update, params);\n}\ninherits(Compare, Operator);\n\nfunction update(_) {\n  return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\n\nfunction CountPattern(params) {\n  Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n  'type': 'CountPattern',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'case',\n    'type': 'enum',\n    'values': ['upper', 'lower', 'mixed'],\n    'default': 'mixed'\n  }, {\n    'name': 'pattern',\n    'type': 'string',\n    'default': '[\\\\w\"]+'\n  }, {\n    'name': 'stopwords',\n    'type': 'string',\n    'default': ''\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['text', 'count']\n  }]\n};\n\nfunction tokenize(text, tcase, match) {\n  switch (tcase) {\n    case 'upper':\n      text = text.toUpperCase();\n      break;\n\n    case 'lower':\n      text = text.toLowerCase();\n      break;\n  }\n\n  return text.match(match);\n}\n\ninherits(CountPattern, Transform, {\n  transform(_, pulse) {\n    const process = update => tuple => {\n      var tokens = tokenize(get(tuple), _.case, match) || [],\n          t;\n\n      for (var i = 0, n = tokens.length; i < n; ++i) {\n        if (!stop.test(t = tokens[i])) update(t);\n      }\n    };\n\n    const init = this._parameterCheck(_, pulse),\n          counts = this._counts,\n          match = this._match,\n          stop = this._stop,\n          get = _.field,\n          as = _.as || ['text', 'count'],\n          add = process(t => counts[t] = 1 + (counts[t] || 0)),\n          rem = process(t => counts[t] -= 1);\n\n    if (init) {\n      pulse.visit(pulse.SOURCE, add);\n    } else {\n      pulse.visit(pulse.ADD, add);\n      pulse.visit(pulse.REM, rem);\n    }\n\n    return this._finish(pulse, as); // generate output tuples\n  },\n\n  _parameterCheck(_, pulse) {\n    let init = false;\n\n    if (_.modified('stopwords') || !this._stop) {\n      this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n      init = true;\n    }\n\n    if (_.modified('pattern') || !this._match) {\n      this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n      init = true;\n    }\n\n    if (_.modified('field') || pulse.modified(_.field.fields)) {\n      init = true;\n    }\n\n    if (init) this._counts = {};\n    return init;\n  },\n\n  _finish(pulse, as) {\n    const counts = this._counts,\n          tuples = this._tuples || (this._tuples = {}),\n          text = as[0],\n          count = as[1],\n          out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n    let w, t, c;\n\n    for (w in counts) {\n      t = tuples[w];\n      c = counts[w] || 0;\n\n      if (!t && c) {\n        tuples[w] = t = ingest({});\n        t[text] = w;\n        t[count] = c;\n        out.add.push(t);\n      } else if (c === 0) {\n        if (t) out.rem.push(t);\n        counts[w] = null;\n        tuples[w] = null;\n      } else if (t[count] !== c) {\n        t[count] = c;\n        out.mod.push(t);\n      }\n    }\n\n    return out.modifies(as);\n  }\n\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n *   function for selectively including tuples in the cross product.\n * @param {Array<string>} [params.as] - The names of the output fields.\n */\n\nfunction Cross(params) {\n  Transform.call(this, null, params);\n}\nCross.Definition = {\n  'type': 'Cross',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'filter',\n    'type': 'expr'\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['a', 'b']\n  }]\n};\ninherits(Cross, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE),\n          as = _.as || ['a', 'b'],\n          a = as[0],\n          b = as[1],\n          reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n\n    let data = this.value;\n\n    if (reset) {\n      if (data) out.rem = data;\n      data = pulse.materialize(pulse.SOURCE).source;\n      out.add = this.value = cross(data, a, b, _.filter || truthy);\n    } else {\n      out.mod = data;\n    }\n\n    out.source = this.value;\n    return out.modifies(as);\n  }\n\n});\n\nfunction cross(input, a, b, filter) {\n  var data = [],\n      t = {},\n      n = input.length,\n      i = 0,\n      j,\n      left;\n\n  for (; i < n; ++i) {\n    t[a] = left = input[i];\n\n    for (j = 0; j < n; ++j) {\n      t[b] = input[j];\n\n      if (filter(t)) {\n        data.push(ingest(t));\n        t = {};\n        t[a] = left;\n      }\n    }\n  }\n\n  return data;\n}\n\nconst Distributions = {\n  kde: randomKDE,\n  mixture: randomMixture,\n  normal: randomNormal,\n  lognormal: randomLogNormal,\n  uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n      FUNCTION = 'function',\n      FIELD = 'field';\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array<object>} - A method for requesting\n *   source data. Used for distributions (such as KDE) that\n *   require sample data points. This method will only be\n *   invoked if the 'from' parameter for a target data source\n *   is not provided. Typically this method returns backing\n *   source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\n\nfunction parse(def, data) {\n  const func = def[FUNCTION];\n\n  if (!hasOwnProperty(Distributions, func)) {\n    error('Unknown distribution function: ' + func);\n  }\n\n  const d = Distributions[func]();\n\n  for (const name in def) {\n    // if data field, extract values\n    if (name === FIELD) {\n      d.data((def.from || data()).map(def[name]));\n    } // if distribution mixture, recurse to parse each definition\n    else if (name === DISTRIBUTIONS) {\n        d[name](def[name].map(_ => parse(_, data)));\n      } // otherwise, simply set the parameter\n      else if (typeof d[name] === FUNCTION) {\n          d[name](def[name]);\n        }\n  }\n\n  return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n *   is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n *   One of 'pdf' or 'cdf'.\n * @param {Array<number>} [params.extent] - The [min, max] extent over which\n *   to sample the distribution. This argument is required in most cases, but\n *   can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n *   that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n *   for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n *   for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n *   plotting the density. If specified, overrides both minsteps and maxsteps\n *   to set an exact number of uniform samples. Useful in conjunction with\n *   a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction Density(params) {\n  Transform.call(this, null, params);\n}\nconst distributions = [{\n  'key': {\n    'function': 'normal'\n  },\n  'params': [{\n    'name': 'mean',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'stdev',\n    'type': 'number',\n    'default': 1\n  }]\n}, {\n  'key': {\n    'function': 'lognormal'\n  },\n  'params': [{\n    'name': 'mean',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'stdev',\n    'type': 'number',\n    'default': 1\n  }]\n}, {\n  'key': {\n    'function': 'uniform'\n  },\n  'params': [{\n    'name': 'min',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'max',\n    'type': 'number',\n    'default': 1\n  }]\n}, {\n  'key': {\n    'function': 'kde'\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'from',\n    'type': 'data'\n  }, {\n    'name': 'bandwidth',\n    'type': 'number',\n    'default': 0\n  }]\n}];\nconst mixture = {\n  'key': {\n    'function': 'mixture'\n  },\n  'params': [{\n    'name': 'distributions',\n    'type': 'param',\n    'array': true,\n    'params': distributions\n  }, {\n    'name': 'weights',\n    'type': 'number',\n    'array': true\n  }]\n};\nDensity.Definition = {\n  'type': 'Density',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'extent',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'steps',\n    'type': 'number'\n  }, {\n    'name': 'minsteps',\n    'type': 'number',\n    'default': 25\n  }, {\n    'name': 'maxsteps',\n    'type': 'number',\n    'default': 200\n  }, {\n    'name': 'method',\n    'type': 'string',\n    'default': 'pdf',\n    'values': ['pdf', 'cdf']\n  }, {\n    'name': 'distribution',\n    'type': 'param',\n    'params': distributions.concat(mixture)\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'default': ['value', 'density']\n  }]\n};\ninherits(Density, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n    if (!this.value || pulse.changed() || _.modified()) {\n      const dist = parse(_.distribution, source(pulse)),\n            minsteps = _.steps || _.minsteps || 25,\n            maxsteps = _.steps || _.maxsteps || 200;\n      let method = _.method || 'pdf';\n\n      if (method !== 'pdf' && method !== 'cdf') {\n        error('Invalid density method: ' + method);\n      }\n\n      if (!_.extent && !dist.data) {\n        error('Missing density extent parameter.');\n      }\n\n      method = dist[method];\n      const as = _.as || ['value', 'density'],\n            domain = _.extent || extent(dist.data()),\n            values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n        const tuple = {};\n        tuple[as[0]] = v[0];\n        tuple[as[1]] = v[1];\n        return ingest(tuple);\n      });\n      if (this.value) out.rem = this.value;\n      this.value = out.add = out.source = values;\n    }\n\n    return out;\n  }\n\n});\n\nfunction source(pulse) {\n  return () => pulse.materialize(pulse.SOURCE).source;\n}\n\nfunction fieldNames(fields, as) {\n  if (!fields) return null;\n  return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition(data, groupby, field) {\n  const groups = [],\n        get = f => f(t);\n\n  let map, i, n, t, k, g; // partition data points into groups\n\n  if (groupby == null) {\n    groups.push(data.map(field));\n  } else {\n    for (map = {}, i = 0, n = data.length; i < n; ++i) {\n      t = data[i];\n      k = groupby.map(get);\n      g = map[k];\n\n      if (!g) {\n        map[k] = g = [];\n        g.dims = k;\n        groups.push(g);\n      }\n\n      g.push(field(t));\n    }\n  }\n\n  return groups;\n}\n\nconst Output = 'bin';\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n *   stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n *   stacks should be smoothed to reduce variance.\n */\n\nfunction DotBin(params) {\n  Transform.call(this, null, params);\n}\nDotBin.Definition = {\n  'type': 'DotBin',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'step',\n    'type': 'number'\n  }, {\n    'name': 'smooth',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': Output\n  }]\n};\n\nconst autostep = (data, field) => span(extent(data, field)) / 30;\n\ninherits(DotBin, Transform, {\n  transform(_, pulse) {\n    if (this.value && !(_.modified() || pulse.changed())) {\n      return pulse; // early exit\n    }\n\n    const source = pulse.materialize(pulse.SOURCE).source,\n          groups = partition(pulse.source, _.groupby, identity),\n          smooth = _.smooth || false,\n          field = _.field,\n          step = _.step || autostep(source, field),\n          sort = stableCompare((a, b) => field(a) - field(b)),\n          as = _.as || Output,\n          n = groups.length; // compute dotplot bins per group\n\n    let min = Infinity,\n        max = -Infinity,\n        i = 0,\n        j;\n\n    for (; i < n; ++i) {\n      const g = groups[i].sort(sort);\n      j = -1;\n\n      for (const v of dotbin(g, step, smooth, field)) {\n        if (v < min) min = v;\n        if (v > max) max = v;\n        g[++j][as] = v;\n      }\n    }\n\n    this.value = {\n      start: min,\n      stop: max,\n      step: step\n    };\n    return pulse.reflow(true).modifies(as);\n  }\n\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n *  function should accept both a datum and a parameter object.\n *  This operator's value will be a new function that wraps the\n *  expression function with access to this operator's parameters.\n */\n\nfunction Expression(params) {\n  Operator.call(this, null, update$1, params);\n  this.modified(true);\n}\ninherits(Expression, Operator);\n\nfunction update$1(_) {\n  const expr = _.expr;\n  return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\n\nfunction Extent(params) {\n  Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n  'type': 'Extent',\n  'metadata': {},\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }]\n};\ninherits(Extent, Transform, {\n  transform(_, pulse) {\n    const extent = this.value,\n          field = _.field,\n          mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n\n    let min = extent[0],\n        max = extent[1];\n\n    if (mod || min == null) {\n      min = +Infinity;\n      max = -Infinity;\n    }\n\n    pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n      const v = toNumber(field(t));\n\n      if (v != null) {\n        // NaNs will fail all comparisons!\n        if (v < min) min = v;\n        if (v > max) max = v;\n      }\n    });\n\n    if (!Number.isFinite(min) || !Number.isFinite(max)) {\n      let name = accessorName(field);\n      if (name) name = \" for field \\\"\".concat(name, \"\\\"\");\n      pulse.dataflow.warn(\"Infinite extent\".concat(name, \": [\").concat(min, \", \").concat(max, \"]\"));\n      min = max = undefined;\n    }\n\n    this.value = [min, max];\n  }\n\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\n\nfunction Subflow(pulse, parent) {\n  Operator.call(this, pulse);\n  this.parent = parent;\n  this.count = 0;\n}\ninherits(Subflow, Operator, {\n  /**\n   * Routes pulses from this subflow to a target transform.\n   * @param {Transform} target - A transform that receives the subflow of tuples.\n   */\n  connect(target) {\n    this.detachSubflow = target.detachSubflow;\n    this.targets().add(target);\n    return target.source = this;\n  },\n\n  /**\n   * Add an 'add' tuple to the subflow pulse.\n   * @param {Tuple} t - The tuple being added.\n   */\n  add(t) {\n    this.count += 1;\n    this.value.add.push(t);\n  },\n\n  /**\n   * Add a 'rem' tuple to the subflow pulse.\n   * @param {Tuple} t - The tuple being removed.\n   */\n  rem(t) {\n    this.count -= 1;\n    this.value.rem.push(t);\n  },\n\n  /**\n   * Add a 'mod' tuple to the subflow pulse.\n   * @param {Tuple} t - The tuple being modified.\n   */\n  mod(t) {\n    this.value.mod.push(t);\n  },\n\n  /**\n   * Re-initialize this operator's pulse value.\n   * @param {Pulse} pulse - The pulse to copy from.\n   * @see Pulse.init\n   */\n  init(pulse) {\n    this.value.init(pulse, pulse.NO_SOURCE);\n  },\n\n  /**\n   * Evaluate this operator. This method overrides the\n   * default behavior to simply return the contained pulse value.\n   * @return {Pulse}\n   */\n  evaluate() {\n    // assert: this.value.stamp === pulse.stamp\n    return this.value;\n  }\n\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n *   that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\n\nfunction Facet(params) {\n  Transform.call(this, {}, params);\n  this._keys = fastmap(); // cache previously calculated key values\n  // keep track of active subflows, use as targets array for listeners\n  // this allows us to limit propagation to only updated subflows\n\n  const a = this._targets = [];\n  a.active = 0;\n\n  a.forEach = f => {\n    for (let i = 0, n = a.active; i < n; ++i) {\n      f(a[i], i, a);\n    }\n  };\n}\ninherits(Facet, Transform, {\n  activate(flow) {\n    this._targets[this._targets.active++] = flow;\n  },\n\n  // parent argument provided by PreFacet subclass\n  subflow(key, flow, pulse, parent) {\n    const flows = this.value;\n    let sf = hasOwnProperty(flows, key) && flows[key],\n        df,\n        p;\n\n    if (!sf) {\n      p = parent || (p = this._group[key]) && p.tuple;\n      df = pulse.dataflow;\n      sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n      df.add(sf).connect(flow(df, key, p));\n      flows[key] = sf;\n      this.activate(sf);\n    } else if (sf.value.stamp < pulse.stamp) {\n      sf.init(pulse);\n      this.activate(sf);\n    }\n\n    return sf;\n  },\n\n  clean() {\n    const flows = this.value;\n\n    for (const key in flows) {\n      if (flows[key].count === 0) {\n        const detach = flows[key].detachSubflow;\n        if (detach) detach();\n        delete flows[key];\n      }\n    }\n  },\n\n  initTargets() {\n    const a = this._targets,\n          n = a.length;\n\n    for (let i = 0; i < n && a[i] != null; ++i) {\n      a[i] = null; // ensure old flows can be garbage collected\n    }\n\n    a.active = 0;\n  },\n\n  transform(_, pulse) {\n    const df = pulse.dataflow,\n          key = _.key,\n          flow = _.subflow,\n          cache = this._keys,\n          rekey = _.modified('key'),\n          subflow = key => this.subflow(key, flow, pulse);\n\n    this._group = _.group || {};\n    this.initTargets(); // reset list of active subflows\n\n    pulse.visit(pulse.REM, t => {\n      const id = tupleid(t),\n            k = cache.get(id);\n\n      if (k !== undefined) {\n        cache.delete(id);\n        subflow(k).rem(t);\n      }\n    });\n    pulse.visit(pulse.ADD, t => {\n      const k = key(t);\n      cache.set(tupleid(t), k);\n      subflow(k).add(t);\n    });\n\n    if (rekey || pulse.modified(key.fields)) {\n      pulse.visit(pulse.MOD, t => {\n        const id = tupleid(t),\n              k0 = cache.get(id),\n              k1 = key(t);\n\n        if (k0 === k1) {\n          subflow(k1).mod(t);\n        } else {\n          cache.set(id, k1);\n          subflow(k0).rem(t);\n          subflow(k1).add(t);\n        }\n      });\n    } else if (pulse.changed(pulse.MOD)) {\n      pulse.visit(pulse.MOD, t => {\n        subflow(cache.get(tupleid(t))).mod(t);\n      });\n    }\n\n    if (rekey) {\n      pulse.visit(pulse.REFLOW, t => {\n        const id = tupleid(t),\n              k0 = cache.get(id),\n              k1 = key(t);\n\n        if (k0 !== k1) {\n          cache.set(id, k1);\n          subflow(k0).rem(t);\n          subflow(k1).add(t);\n        }\n      });\n    }\n\n    if (pulse.clean()) {\n      df.runAfter(() => {\n        this.clean();\n        cache.clean();\n      });\n    } else if (cache.empty > df.cleanThreshold) {\n      df.runAfter(cache.clean);\n    }\n\n    return pulse;\n  }\n\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\n\nfunction Field(params) {\n  Operator.call(this, null, update$2, params);\n}\ninherits(Field, Operator);\n\nfunction update$2(_) {\n  return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n *   that determines a tuple's filter status. Truthy values pass the filter.\n */\n\nfunction Filter(params) {\n  Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n  'type': 'Filter',\n  'metadata': {\n    'changes': true\n  },\n  'params': [{\n    'name': 'expr',\n    'type': 'expr',\n    'required': true\n  }]\n};\ninherits(Filter, Transform, {\n  transform(_, pulse) {\n    const df = pulse.dataflow,\n          cache = this.value,\n          // cache ids of filtered tuples\n    output = pulse.fork(),\n          add = output.add,\n          rem = output.rem,\n          mod = output.mod,\n          test = _.expr;\n    let isMod = true;\n    pulse.visit(pulse.REM, t => {\n      const id = tupleid(t);\n      if (!cache.has(id)) rem.push(t);else cache.delete(id);\n    });\n    pulse.visit(pulse.ADD, t => {\n      if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n    });\n\n    function revisit(t) {\n      const id = tupleid(t),\n            b = test(t, _),\n            s = cache.get(id);\n\n      if (b && s) {\n        cache.delete(id);\n        add.push(t);\n      } else if (!b && !s) {\n        cache.set(id, 1);\n        rem.push(t);\n      } else if (isMod && b && !s) {\n        mod.push(t);\n      }\n    }\n\n    pulse.visit(pulse.MOD, revisit);\n\n    if (_.modified()) {\n      isMod = false;\n      pulse.visit(pulse.REFLOW, revisit);\n    }\n\n    if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n    return output;\n  }\n\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.fields - An array of field\n *   accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n *   value. If unspecified, no index field is included in the output.\n * @param {Array<string>} [params.as] - Output field names for flattened\n *   array fields. Any unspecified fields will use the field name provided\n *   by the fields accessors.\n */\n\nfunction Flatten(params) {\n  Transform.call(this, [], params);\n}\nFlatten.Definition = {\n  'type': 'Flatten',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'required': true\n  }, {\n    'name': 'index',\n    'type': 'string'\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true\n  }]\n};\ninherits(Flatten, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE),\n          fields = _.fields,\n          as = fieldNames(fields, _.as || []),\n          index = _.index || null,\n          m = as.length; // remove any previous results\n\n    out.rem = this.value; // generate flattened tuples\n\n    pulse.visit(pulse.SOURCE, t => {\n      const arrays = fields.map(f => f(t)),\n            maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n      let i = 0,\n          j,\n          d,\n          v;\n\n      for (; i < maxlen; ++i) {\n        d = derive(t);\n\n        for (j = 0; j < m; ++j) {\n          d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n        }\n\n        if (index) {\n          d[index] = i;\n        }\n\n        out.add.push(d);\n      }\n    });\n    this.value = out.source = out.add;\n    if (index) out.modifies(index);\n    return out.modifies(as);\n  }\n\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n *   for the tuple fields that should be folded.\n * @param {Array<string>} [params.as] - Output field names for folded key\n *   and value fields, defaults to ['key', 'value'].\n */\n\nfunction Fold(params) {\n  Transform.call(this, [], params);\n}\nFold.Definition = {\n  'type': 'Fold',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'required': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['key', 'value']\n  }]\n};\ninherits(Fold, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE),\n          fields = _.fields,\n          fnames = fields.map(accessorName),\n          as = _.as || ['key', 'value'],\n          k = as[0],\n          v = as[1],\n          n = fields.length;\n    out.rem = this.value;\n    pulse.visit(pulse.SOURCE, t => {\n      for (let i = 0, d; i < n; ++i) {\n        d = derive(t);\n        d[k] = fnames[i];\n        d[v] = fields[i](t);\n        out.add.push(d);\n      }\n    });\n    this.value = out.source = out.add;\n    return out.modifies(as);\n  }\n\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n *   added tuples only, and does not update in response to modifications.\n */\n\nfunction Formula(params) {\n  Transform.call(this, null, params);\n}\nFormula.Definition = {\n  'type': 'Formula',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'expr',\n    'type': 'expr',\n    'required': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'required': true\n  }, {\n    'name': 'initonly',\n    'type': 'boolean'\n  }]\n};\ninherits(Formula, Transform, {\n  transform(_, pulse) {\n    const func = _.expr,\n          as = _.as,\n          mod = _.modified(),\n          flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n\n    if (mod) {\n      // parameters updated, need to reflow\n      pulse = pulse.materialize().reflow(true);\n    }\n\n    if (!_.initonly) {\n      pulse.modifies(as);\n    }\n\n    return pulse.visit(flag, t => t[as] = func(t, _));\n  }\n\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n *   function. This function is given the operator parameters as input.\n *   Changes to any additional parameters will not trigger re-calculation\n *   of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\n\nfunction Generate(params) {\n  Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.ALL),\n          gen = _.generator;\n    let data = this.value,\n        num = _.size - data.length,\n        add,\n        rem,\n        t;\n\n    if (num > 0) {\n      // need more tuples, generate and add\n      for (add = []; --num >= 0;) {\n        add.push(t = ingest(gen(_)));\n        data.push(t);\n      }\n\n      out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n    } else {\n      // need fewer tuples, remove\n      rem = data.slice(0, -num);\n      out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n      data = data.slice(-num);\n    }\n\n    out.source = this.value = data;\n    return out;\n  }\n\n});\n\nconst Methods = {\n  value: 'value',\n  median: median,\n  mean: mean,\n  min: min,\n  max: max\n};\nconst Empty = [];\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array<function(object): *>} [params.groupby] - An array of\n *   accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n *   Each key value should be unique within a group. New tuples will be\n *   imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n *   values. New tuples will be imputed for any key values that are not\n *   found within a group. In addition, these values will be automatically\n *   augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n *   'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n *   when using method 'value'.\n */\n\nfunction Impute(params) {\n  Transform.call(this, [], params);\n}\nImpute.Definition = {\n  'type': 'Impute',\n  'metadata': {\n    'changes': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'key',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'keyvals',\n    'array': true\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'method',\n    'type': 'enum',\n    'default': 'value',\n    'values': ['value', 'mean', 'median', 'max', 'min']\n  }, {\n    'name': 'value',\n    'default': 0\n  }]\n};\n\nfunction getValue(_) {\n  var m = _.method || Methods.value,\n      v;\n\n  if (Methods[m] == null) {\n    error('Unrecognized imputation method: ' + m);\n  } else if (m === Methods.value) {\n    v = _.value !== undefined ? _.value : 0;\n    return () => v;\n  } else {\n    return Methods[m];\n  }\n}\n\nfunction getField(_) {\n  const f = _.field;\n  return t => t ? f(t) : NaN;\n}\n\ninherits(Impute, Transform, {\n  transform(_, pulse) {\n    var out = pulse.fork(pulse.ALL),\n        impute = getValue(_),\n        field = getField(_),\n        fName = accessorName(_.field),\n        kName = accessorName(_.key),\n        gNames = (_.groupby || []).map(accessorName),\n        groups = partition$1(pulse.source, _.groupby, _.key, _.keyvals),\n        curr = [],\n        prev = this.value,\n        m = groups.domain.length,\n        group,\n        value,\n        gVals,\n        kVal,\n        g,\n        i,\n        j,\n        l,\n        n,\n        t;\n\n    for (g = 0, l = groups.length; g < l; ++g) {\n      group = groups[g];\n      gVals = group.values;\n      value = NaN; // add tuples for missing values\n\n      for (j = 0; j < m; ++j) {\n        if (group[j] != null) continue;\n        kVal = groups.domain[j];\n        t = {\n          _impute: true\n        };\n\n        for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n\n        t[kName] = kVal;\n        t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n        curr.push(ingest(t));\n      }\n    } // update pulse with imputed tuples\n\n\n    if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n    if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n    this.value = curr;\n    return out;\n  }\n\n});\n\nfunction partition$1(data, groupby, key, keyvals) {\n  var get = f => f(t),\n      groups = [],\n      domain = keyvals ? keyvals.slice() : [],\n      kMap = {},\n      gMap = {},\n      gVals,\n      gKey,\n      group,\n      i,\n      j,\n      k,\n      n,\n      t;\n\n  domain.forEach((k, i) => kMap[k] = i + 1);\n\n  for (i = 0, n = data.length; i < n; ++i) {\n    t = data[i];\n    k = key(t);\n    j = kMap[k] || (kMap[k] = domain.push(k));\n    gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n\n    if (!(group = gMap[gKey])) {\n      group = gMap[gKey] = [];\n      groups.push(group);\n      group.values = gVals;\n    }\n\n    group[j - 1] = t;\n  }\n\n  groups.domain = domain;\n  return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\n\nfunction JoinAggregate(params) {\n  Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n  'type': 'JoinAggregate',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'fields',\n    'type': 'field',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'ops',\n    'type': 'enum',\n    'array': true,\n    'values': ValidAggregateOps\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'key',\n    'type': 'field'\n  }]\n};\ninherits(JoinAggregate, Aggregate, {\n  transform(_, pulse) {\n    const aggr = this,\n          mod = _.modified();\n\n    let cells; // process all input tuples to calculate aggregates\n\n    if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n      cells = aggr.value = mod ? aggr.init(_) : {};\n      pulse.visit(pulse.SOURCE, t => aggr.add(t));\n    } else {\n      cells = aggr.value = aggr.value || this.init(_);\n      pulse.visit(pulse.REM, t => aggr.rem(t));\n      pulse.visit(pulse.ADD, t => aggr.add(t));\n    } // update aggregation cells\n\n\n    aggr.changes(); // write aggregate values to input tuples\n\n    pulse.visit(pulse.SOURCE, t => {\n      extend(t, cells[aggr.cellkey(t)].tuple);\n    });\n    return pulse.reflow(mod).modifies(this._outputs);\n  },\n\n  changes() {\n    const adds = this._adds,\n          mods = this._mods;\n    let i, n;\n\n    for (i = 0, n = this._alen; i < n; ++i) {\n      this.celltuple(adds[i]);\n      adds[i] = null; // for garbage collection\n    }\n\n    for (i = 0, n = this._mlen; i < n; ++i) {\n      this.celltuple(mods[i]);\n      mods[i] = null; // for garbage collection\n    }\n\n    this._alen = this._mlen = 0; // reset list of active cells\n  }\n\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n *   to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n *   to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n *   If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n *   output values should be probability estimates (false, default) or\n *   smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n *   density (false) or cumulative distribution (true) should be generated.\n * @param {Array<number>} [params.extent] - The domain extent over which to\n *   plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n *   multiple densities should be resolved. If \"independent\" (the default), each\n *   density may have its own domain extent and dynamic number of curve sample\n *   steps. If \"shared\", the KDE transform will ensure that all densities are\n *   defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n *   for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n *   for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n *   plotting the density. If specified, overrides both minsteps and maxsteps\n *   to set an exact number of uniform samples. Useful in conjunction with\n *   a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction KDE(params) {\n  Transform.call(this, null, params);\n}\nKDE.Definition = {\n  'type': 'KDE',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'cumulative',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'counts',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'bandwidth',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'extent',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'resolve',\n    'type': 'enum',\n    'values': ['shared', 'independent'],\n    'default': 'independent'\n  }, {\n    'name': 'steps',\n    'type': 'number'\n  }, {\n    'name': 'minsteps',\n    'type': 'number',\n    'default': 25\n  }, {\n    'name': 'maxsteps',\n    'type': 'number',\n    'default': 200\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'default': ['value', 'density']\n  }]\n};\ninherits(KDE, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n    if (!this.value || pulse.changed() || _.modified()) {\n      const source = pulse.materialize(pulse.SOURCE).source,\n            groups = partition(source, _.groupby, _.field),\n            names = (_.groupby || []).map(accessorName),\n            bandwidth = _.bandwidth,\n            method = _.cumulative ? 'cdf' : 'pdf',\n            as = _.as || ['value', 'density'],\n            values = [];\n      let domain = _.extent,\n          minsteps = _.steps || _.minsteps || 25,\n          maxsteps = _.steps || _.maxsteps || 200;\n\n      if (method !== 'pdf' && method !== 'cdf') {\n        error('Invalid density method: ' + method);\n      }\n\n      if (_.resolve === 'shared') {\n        if (!domain) domain = extent(source, _.field);\n        minsteps = maxsteps = _.steps || maxsteps;\n      }\n\n      groups.forEach(g => {\n        const density = randomKDE(g, bandwidth)[method],\n              scale = _.counts ? g.length : 1,\n              local = domain || extent(g);\n        sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n          const t = {};\n\n          for (let i = 0; i < names.length; ++i) {\n            t[names[i]] = g.dims[i];\n          }\n\n          t[as[0]] = v[0];\n          t[as[1]] = v[1] * scale;\n          values.push(ingest(t));\n        });\n      });\n      if (this.value) out.rem = this.value;\n      this.value = out.add = out.source = values;\n    }\n\n    return out;\n  }\n\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<string>} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n *  should be treated as flat property names, side-stepping nested field\n *  lookups normally indicated by dot or bracket notation.\n */\n\nfunction Key(params) {\n  Operator.call(this, null, update$3, params);\n}\ninherits(Key, Operator);\n\nfunction update$3(_) {\n  return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\n\nfunction Load(params) {\n  Transform.call(this, [], params);\n  this._pending = null;\n}\ninherits(Load, Transform, {\n  transform(_, pulse) {\n    const df = pulse.dataflow;\n\n    if (this._pending) {\n      // update state and return pulse\n      return output(this, pulse, this._pending);\n    }\n\n    if (stop(_)) return pulse.StopPropagation;\n\n    if (_.values) {\n      // parse and ingest values, return output pulse\n      return output(this, pulse, df.parse(_.values, _.format));\n    } else if (_.async) {\n      // return promise for non-blocking async loading\n      const p = df.request(_.url, _.format).then(res => {\n        this._pending = array(res.data);\n        return df => df.touch(this);\n      });\n      return {\n        async: p\n      };\n    } else {\n      // return promise for synchronous loading\n      return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n    }\n  }\n\n});\n\nfunction stop(_) {\n  return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\n\nfunction output(op, pulse, data) {\n  data.forEach(ingest);\n  const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n  out.rem = op.value;\n  op.value = out.source = out.add = data;\n  op._pending = null;\n  if (out.rem.length) out.clean(true);\n  return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array<function(object): *} params.fields - The fields to lookup.\n * @param {Array<string>} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\n\nfunction Lookup(params) {\n  Transform.call(this, {}, params);\n}\nLookup.Definition = {\n  'type': 'Lookup',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'index',\n    'type': 'index',\n    'params': [{\n      'name': 'from',\n      'type': 'data',\n      'required': true\n    }, {\n      'name': 'key',\n      'type': 'field',\n      'required': true\n    }]\n  }, {\n    'name': 'values',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'required': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true\n  }, {\n    'name': 'default',\n    'default': null\n  }]\n};\ninherits(Lookup, Transform, {\n  transform(_, pulse) {\n    const keys = _.fields,\n          index = _.index,\n          values = _.values,\n          defaultValue = _.default == null ? null : _.default,\n          reset = _.modified(),\n          n = keys.length;\n\n    let flag = reset ? pulse.SOURCE : pulse.ADD,\n        out = pulse,\n        as = _.as,\n        set,\n        m,\n        mods;\n\n    if (values) {\n      m = values.length;\n\n      if (n > 1 && !as) {\n        error('Multi-field lookup requires explicit \"as\" parameter.');\n      }\n\n      if (as && as.length !== n * m) {\n        error('The \"as\" parameter has too few output field names.');\n      }\n\n      as = as || values.map(accessorName);\n\n      set = function (t) {\n        for (var i = 0, k = 0, j, v; i < n; ++i) {\n          v = index.get(keys[i](t));\n          if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n        }\n      };\n    } else {\n      if (!as) {\n        error('Missing output field names.');\n      }\n\n      set = function (t) {\n        for (var i = 0, v; i < n; ++i) {\n          v = index.get(keys[i](t));\n          t[as[i]] = v == null ? defaultValue : v;\n        }\n      };\n    }\n\n    if (reset) {\n      out = pulse.reflow(true);\n    } else {\n      mods = keys.some(k => pulse.modified(k.fields));\n      flag |= mods ? pulse.MOD : 0;\n    }\n\n    pulse.visit(flag, set);\n    return out.modifies(as);\n  }\n\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<Array<number>>} params.extents - The input extents.\n */\n\nfunction MultiExtent(params) {\n  Operator.call(this, null, update$4, params);\n}\ninherits(MultiExtent, Operator);\n\nfunction update$4(_) {\n  if (this.value && !_.modified()) {\n    return this.value;\n  }\n\n  const ext = _.extents,\n        n = ext.length;\n  let min = +Infinity,\n      max = -Infinity,\n      i,\n      e;\n\n  for (i = 0; i < n; ++i) {\n    e = ext[i];\n    if (e[0] < min) min = e[0];\n    if (e[1] > max) max = e[1];\n  }\n\n  return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<Array<*>>} params.values - The input value arrrays.\n */\n\nfunction MultiValues(params) {\n  Operator.call(this, null, update$5, params);\n}\ninherits(MultiValues, Operator);\n\nfunction update$5(_) {\n  return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Params(params) {\n  Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n  transform(_, pulse) {\n    this.modified(_.modified());\n    this.value = _;\n    return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n  }\n\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n *  to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n *  values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n *  The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n *  applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n *  number of pivoted fields to generate. The pivoted field names are sorted in\n *  ascending order prior to enforcing the limit.\n */\n\nfunction Pivot(params) {\n  Aggregate.call(this, params);\n}\nPivot.Definition = {\n  'type': 'Pivot',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'value',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'op',\n    'type': 'enum',\n    'values': ValidAggregateOps,\n    'default': 'sum'\n  }, {\n    'name': 'limit',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'key',\n    'type': 'field'\n  }]\n};\ninherits(Pivot, Aggregate, {\n  _transform: Aggregate.prototype.transform,\n\n  transform(_, pulse) {\n    return this._transform(aggregateParams(_, pulse), pulse);\n  }\n\n}); // Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\n\nfunction aggregateParams(_, pulse) {\n  const key = _.field,\n        value = _.value,\n        op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n        fields = accessorFields(key).concat(accessorFields(value)),\n        keys = pivotKeys(key, _.limit || 0, pulse); // if data stream content changes, pivot fields may change\n  // flag parameter modification to ensure re-initialization\n\n  if (pulse.changed()) _.set('__pivot__', null, null, true);\n  return {\n    key: _.key,\n    groupby: _.groupby,\n    ops: keys.map(() => op),\n    fields: keys.map(k => get(k, key, value, fields)),\n    as: keys.map(k => k + ''),\n    modified: _.modified.bind(_)\n  };\n} // Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\n\n\nfunction get(k, key, value, fields) {\n  return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n} // Collect (and optionally limit) all unique pivot values.\n\n\nfunction pivotKeys(key, limit, pulse) {\n  const map = {},\n        list = [];\n  pulse.visit(pulse.SOURCE, t => {\n    const k = key(t);\n\n    if (!map[k]) {\n      map[k] = 1;\n      list.push(k);\n    }\n  });\n  list.sort(ascending);\n  return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n *   that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array<object>} params.field - The field\n *   accessor for an array of subflow tuple objects.\n */\n\nfunction PreFacet(params) {\n  Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n  transform(_, pulse) {\n    const flow = _.subflow,\n          field = _.field,\n          subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n\n    if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n      error('PreFacet does not support field modification.');\n    }\n\n    this.initTargets(); // reset list of active subflows\n\n    if (field) {\n      pulse.visit(pulse.MOD, t => {\n        const sf = subflow(t);\n        field(t).forEach(_ => sf.mod(_));\n      });\n      pulse.visit(pulse.ADD, t => {\n        const sf = subflow(t);\n        field(t).forEach(_ => sf.add(ingest(_)));\n      });\n      pulse.visit(pulse.REM, t => {\n        const sf = subflow(t);\n        field(t).forEach(_ => sf.rem(_));\n      });\n    } else {\n      pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n      pulse.visit(pulse.ADD, t => subflow(t).add(t));\n      pulse.visit(pulse.REM, t => subflow(t).rem(t));\n    }\n\n    if (pulse.clean()) {\n      pulse.runAfter(() => this.clean());\n    }\n\n    return pulse;\n  }\n\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *} params.fields - The fields to project,\n *   as an array of field accessors. If unspecified, all fields will be\n *   copied with names unchanged.\n * @param {Array<string>} [params.as] - Output field names for each projected\n *   field. Any unspecified fields will use the field name provided by\n *   the field accessor.\n */\n\nfunction Project(params) {\n  Transform.call(this, null, params);\n}\nProject.Definition = {\n  'type': 'Project',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'fields',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'null': true,\n    'array': true\n  }]\n};\ninherits(Project, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE),\n          fields = _.fields,\n          as = fieldNames(_.fields, _.as || []),\n          derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n    let lut;\n\n    if (this.value) {\n      lut = this.value;\n    } else {\n      pulse = pulse.addAll();\n      lut = this.value = {};\n    }\n\n    pulse.visit(pulse.REM, t => {\n      const id = tupleid(t);\n      out.rem.push(lut[id]);\n      lut[id] = null;\n    });\n    pulse.visit(pulse.ADD, t => {\n      const dt = derive(t, ingest({}));\n      lut[tupleid(t)] = dt;\n      out.add.push(dt);\n    });\n    pulse.visit(pulse.MOD, t => {\n      out.mod.push(derive(t, lut[tupleid(t)]));\n    });\n    return out;\n  }\n\n});\n\nfunction project(s, t, fields, as) {\n  for (let i = 0, n = fields.length; i < n; ++i) {\n    t[as[i]] = fields[i](s);\n  }\n\n  return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\n\nfunction Proxy(params) {\n  Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n  transform(_, pulse) {\n    this.value = _.value;\n    return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n  }\n\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n *   over which to calculate quantile values.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n *   to groupby.\n * @param {Array<number>} [params.probs] - An array of probabilities in\n *   the range (0, 1) for which to compute quantile values. If not specified,\n *   the *step* parameter will be used.\n * @param {Array<number>} [params.step=0.01] - A probability step size for\n *   sampling quantile values. All values from one-half the step size up to\n *   1 (exclusive) will be sampled. This parameter is only used if the\n *   *quantiles* parameter is not provided.\n */\n\nfunction Quantile(params) {\n  Transform.call(this, null, params);\n}\nQuantile.Definition = {\n  'type': 'Quantile',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'probs',\n    'type': 'number',\n    'array': true\n  }, {\n    'name': 'step',\n    'type': 'number',\n    'default': 0.01\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'default': ['prob', 'value']\n  }]\n};\nconst EPSILON$1 = 1e-14;\ninherits(Quantile, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n          as = _.as || ['prob', 'value'];\n\n    if (this.value && !_.modified() && !pulse.changed()) {\n      out.source = this.value;\n      return out;\n    }\n\n    const source = pulse.materialize(pulse.SOURCE).source,\n          groups = partition(source, _.groupby, _.field),\n          names = (_.groupby || []).map(accessorName),\n          values = [],\n          step = _.step || 0.01,\n          p = _.probs || range(step / 2, 1 - EPSILON$1, step),\n          n = p.length;\n    groups.forEach(g => {\n      const q = quantiles(g, p);\n\n      for (let i = 0; i < n; ++i) {\n        const t = {};\n\n        for (let i = 0; i < names.length; ++i) {\n          t[names[i]] = g.dims[i];\n        }\n\n        t[as[0]] = p[i];\n        t[as[1]] = q[i];\n        values.push(ingest(t));\n      }\n    });\n    if (this.value) out.rem = this.value;\n    this.value = out.add = out.source = values;\n    return out;\n  }\n\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n *   the transform should make derived copies of incoming tuples.\n * @constructor\n */\n\nfunction Relay(params) {\n  Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n  transform(_, pulse) {\n    let out, lut;\n\n    if (this.value) {\n      lut = this.value;\n    } else {\n      out = pulse = pulse.addAll();\n      lut = this.value = {};\n    }\n\n    if (_.derive) {\n      out = pulse.fork(pulse.NO_SOURCE);\n      pulse.visit(pulse.REM, t => {\n        const id = tupleid(t);\n        out.rem.push(lut[id]);\n        lut[id] = null;\n      });\n      pulse.visit(pulse.ADD, t => {\n        const dt = derive(t);\n        lut[tupleid(t)] = dt;\n        out.add.push(dt);\n      });\n      pulse.visit(pulse.MOD, t => {\n        const dt = lut[tupleid(t)];\n\n        for (const k in t) {\n          dt[k] = t[k]; // down stream writes may overwrite re-derived tuples\n          // conservatively mark all source fields as modified\n\n          out.modifies(k);\n        }\n\n        out.mod.push(dt);\n      });\n    }\n\n    return out;\n  }\n\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\n\nfunction Sample(params) {\n  Transform.call(this, [], params);\n  this.count = 0;\n}\nSample.Definition = {\n  'type': 'Sample',\n  'metadata': {},\n  'params': [{\n    'name': 'size',\n    'type': 'number',\n    'default': 1000\n  }]\n};\ninherits(Sample, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE),\n          mod = _.modified('size'),\n          num = _.size,\n          map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n\n    let res = this.value,\n        cnt = this.count,\n        cap = 0; // sample reservoir update function\n\n    function update(t) {\n      let p, idx;\n\n      if (res.length < num) {\n        res.push(t);\n      } else {\n        idx = ~~((cnt + 1) * random());\n\n        if (idx < res.length && idx >= cap) {\n          p = res[idx];\n          if (map[tupleid(p)]) out.rem.push(p); // eviction\n\n          res[idx] = t;\n        }\n      }\n\n      ++cnt;\n    }\n\n    if (pulse.rem.length) {\n      // find all tuples that should be removed, add to output\n      pulse.visit(pulse.REM, t => {\n        const id = tupleid(t);\n\n        if (map[id]) {\n          map[id] = -1;\n          out.rem.push(t);\n        }\n\n        --cnt;\n      }); // filter removed tuples out of the sample reservoir\n\n      res = res.filter(t => map[tupleid(t)] !== -1);\n    }\n\n    if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n      // replenish sample if backing data source is available\n      cap = cnt = res.length;\n      pulse.visit(pulse.SOURCE, t => {\n        // update, but skip previously sampled tuples\n        if (!map[tupleid(t)]) update(t);\n      });\n      cap = -1;\n    }\n\n    if (mod && res.length > num) {\n      const n = res.length - num;\n\n      for (let i = 0; i < n; ++i) {\n        map[tupleid(res[i])] = -1;\n        out.rem.push(res[i]);\n      }\n\n      res = res.slice(n);\n    }\n\n    if (pulse.mod.length) {\n      // propagate modified tuples in the sample reservoir\n      pulse.visit(pulse.MOD, t => {\n        if (map[tupleid(t)]) out.mod.push(t);\n      });\n    }\n\n    if (pulse.add.length) {\n      // update sample reservoir\n      pulse.visit(pulse.ADD, update);\n    }\n\n    if (pulse.add.length || cap < 0) {\n      // output newly added tuples\n      out.add = res.filter(t => !map[tupleid(t)]);\n    }\n\n    this.count = cnt;\n    this.value = out.source = res;\n    return out;\n  }\n\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\n\nfunction Sequence(params) {\n  Transform.call(this, null, params);\n}\nSequence.Definition = {\n  'type': 'Sequence',\n  'metadata': {\n    'generates': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'start',\n    'type': 'number',\n    'required': true\n  }, {\n    'name': 'stop',\n    'type': 'number',\n    'required': true\n  }, {\n    'name': 'step',\n    'type': 'number',\n    'default': 1\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'data'\n  }]\n};\ninherits(Sequence, Transform, {\n  transform(_, pulse) {\n    if (this.value && !_.modified()) return;\n    const out = pulse.materialize().fork(pulse.MOD),\n          as = _.as || 'data';\n    out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n    this.value = range(_.start, _.stop, _.step || 1).map(v => {\n      const t = {};\n      t[as] = v;\n      return ingest(t);\n    });\n    out.add = pulse.add.concat(this.value);\n    return out;\n  }\n\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\n\nfunction Sieve(params) {\n  Transform.call(this, null, params);\n  this.modified(true); // always treat as modified\n}\ninherits(Sieve, Transform, {\n  transform(_, pulse) {\n    this.value = pulse.source;\n    return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n  }\n\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\n\nfunction TimeUnit(params) {\n  Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n  'type': 'TimeUnit',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'interval',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'units',\n    'type': 'enum',\n    'values': TIME_UNITS,\n    'array': true\n  }, {\n    'name': 'step',\n    'type': 'number',\n    'default': 1\n  }, {\n    'name': 'maxbins',\n    'type': 'number',\n    'default': 40\n  }, {\n    'name': 'extent',\n    'type': 'date',\n    'array': true\n  }, {\n    'name': 'timezone',\n    'type': 'enum',\n    'default': 'local',\n    'values': ['local', 'utc']\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': OUTPUT\n  }]\n};\ninherits(TimeUnit, Transform, {\n  transform(_, pulse) {\n    const field = _.field,\n          band = _.interval !== false,\n          utc = _.timezone === 'utc',\n          floor = this._floor(_, pulse),\n          offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n          as = _.as || OUTPUT,\n          u0 = as[0],\n          u1 = as[1],\n          step = floor.step;\n\n    let min = floor.start || Infinity,\n        max = floor.stop || -Infinity,\n        flag = pulse.ADD;\n\n    if (_.modified() || pulse.modified(accessorFields(field))) {\n      pulse = pulse.reflow(true);\n      flag = pulse.SOURCE;\n      min = Infinity;\n      max = -Infinity;\n    }\n\n    pulse.visit(flag, t => {\n      const v = field(t);\n      let a, b;\n\n      if (v == null) {\n        t[u0] = null;\n        if (band) t[u1] = null;\n      } else {\n        t[u0] = a = b = floor(v);\n        if (band) t[u1] = b = offset(a, step);\n        if (a < min) min = a;\n        if (b > max) max = b;\n      }\n    });\n    floor.start = min;\n    floor.stop = max;\n    return pulse.modifies(band ? as : u0);\n  },\n\n  _floor(_, pulse) {\n    const utc = _.timezone === 'utc'; // get parameters\n\n    const {\n      units,\n      step\n    } = _.units ? {\n      units: _.units,\n      step: _.step || 1\n    } : timeBin({\n      extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n      maxbins: _.maxbins\n    }); // check / standardize time units\n\n    const tunits = timeUnits(units),\n          prev = this.value || {},\n          floor = (utc ? utcFloor : timeFloor)(tunits, step);\n    floor.unit = peek(tunits);\n    floor.units = tunits;\n    floor.step = step;\n    floor.start = prev.start;\n    floor.stop = prev.stop;\n    return this.value = floor;\n  }\n\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\n\nfunction TupleIndex(params) {\n  Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n  transform(_, pulse) {\n    const df = pulse.dataflow,\n          field = _.field,\n          index = this.value,\n          set = t => index.set(field(t), t);\n\n    let mod = true;\n\n    if (_.modified('field') || pulse.modified(field.fields)) {\n      index.clear();\n      pulse.visit(pulse.SOURCE, set);\n    } else if (pulse.changed()) {\n      pulse.visit(pulse.REM, t => index.delete(field(t)));\n      pulse.visit(pulse.ADD, set);\n    } else {\n      mod = false;\n    }\n\n    this.modified(mod);\n    if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n    return pulse.fork();\n  }\n\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n *   comparator function for sorting the values. The comparator will be\n *   applied to backing tuples prior to value extraction.\n */\n\nfunction Values(params) {\n  Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n  transform(_, pulse) {\n    const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n\n    if (run) {\n      this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n    }\n  }\n\n});\n\nfunction WindowOp(op, field, param, as) {\n  const fn = WindowOps[op](field, param);\n  return {\n    init: fn.init || zero,\n    update: function (w, t) {\n      t[as] = fn.next(w);\n    }\n  };\n}\nconst WindowOps = {\n  row_number: function () {\n    return {\n      next: w => w.index + 1\n    };\n  },\n  rank: function () {\n    let rank;\n    return {\n      init: () => rank = 1,\n      next: w => {\n        const i = w.index,\n              data = w.data;\n        return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n      }\n    };\n  },\n  dense_rank: function () {\n    let drank;\n    return {\n      init: () => drank = 1,\n      next: w => {\n        const i = w.index,\n              d = w.data;\n        return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n      }\n    };\n  },\n  percent_rank: function () {\n    const rank = WindowOps.rank(),\n          next = rank.next;\n    return {\n      init: rank.init,\n      next: w => (next(w) - 1) / (w.data.length - 1)\n    };\n  },\n  cume_dist: function () {\n    let cume;\n    return {\n      init: () => cume = 0,\n      next: w => {\n        const d = w.data,\n              c = w.compare;\n        let i = w.index;\n\n        if (cume < i) {\n          while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n\n          cume = i;\n        }\n\n        return (1 + cume) / d.length;\n      }\n    };\n  },\n  ntile: function (field, num) {\n    num = +num;\n    if (!(num > 0)) error('ntile num must be greater than zero.');\n    const cume = WindowOps.cume_dist(),\n          next = cume.next;\n    return {\n      init: cume.init,\n      next: w => Math.ceil(num * next(w))\n    };\n  },\n  lag: function (field, offset) {\n    offset = +offset || 1;\n    return {\n      next: w => {\n        const i = w.index - offset;\n        return i >= 0 ? field(w.data[i]) : null;\n      }\n    };\n  },\n  lead: function (field, offset) {\n    offset = +offset || 1;\n    return {\n      next: w => {\n        const i = w.index + offset,\n              d = w.data;\n        return i < d.length ? field(d[i]) : null;\n      }\n    };\n  },\n  first_value: function (field) {\n    return {\n      next: w => field(w.data[w.i0])\n    };\n  },\n  last_value: function (field) {\n    return {\n      next: w => field(w.data[w.i1 - 1])\n    };\n  },\n  nth_value: function (field, nth) {\n    nth = +nth;\n    if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n    return {\n      next: w => {\n        const i = w.i0 + (nth - 1);\n        return i < w.i1 ? field(w.data[i]) : null;\n      }\n    };\n  },\n  prev_value: function (field) {\n    let prev;\n    return {\n      init: () => prev = null,\n      next: w => {\n        const v = field(w.data[w.index]);\n        return v != null ? prev = v : prev;\n      }\n    };\n  },\n  next_value: function (field) {\n    let v, i;\n    return {\n      init: () => (v = null, i = -1),\n      next: w => {\n        const d = w.data;\n        return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n      }\n    };\n  }\n};\n\nfunction find(field, data, index) {\n  for (let n = data.length; index < n; ++index) {\n    const v = field(data[index]);\n    if (v != null) return index;\n  }\n\n  return -1;\n}\n\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n  const ops = array(_.ops),\n        fields = array(_.fields),\n        params = array(_.params),\n        as = array(_.as),\n        outputs = this.outputs = [],\n        windows = this.windows = [],\n        inputs = {},\n        map = {},\n        counts = [],\n        measures = [];\n  let countOnly = true;\n\n  function visitInputs(f) {\n    array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n  }\n\n  visitInputs(_.sort);\n  ops.forEach((op, i) => {\n    const field = fields[i],\n          mname = accessorName(field),\n          name = measureName(op, mname, as[i]);\n    visitInputs(field);\n    outputs.push(name); // Window operation\n\n    if (hasOwnProperty(WindowOps, op)) {\n      windows.push(WindowOp(op, fields[i], params[i], name));\n    } // Aggregate operation\n    else {\n        if (field == null && op !== 'count') {\n          error('Null aggregate field specified.');\n        }\n\n        if (op === 'count') {\n          counts.push(name);\n          return;\n        }\n\n        countOnly = false;\n        let m = map[mname];\n\n        if (!m) {\n          m = map[mname] = [];\n          m.field = field;\n          measures.push(m);\n        }\n\n        m.push(createMeasure(op, name));\n      }\n  });\n\n  if (counts.length || measures.length) {\n    this.cell = cell(measures, counts, countOnly);\n  }\n\n  this.inputs = Object.keys(inputs);\n}\nconst prototype$1 = WindowState.prototype;\n\nprototype$1.init = function () {\n  this.windows.forEach(_ => _.init());\n  if (this.cell) this.cell.init();\n};\n\nprototype$1.update = function (w, t) {\n  const cell = this.cell,\n        wind = this.windows,\n        data = w.data,\n        m = wind && wind.length;\n  let j;\n\n  if (cell) {\n    for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n\n    for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n\n    cell.set(t);\n  }\n\n  for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\n\nfunction cell(measures, counts, countOnly) {\n  measures = measures.map(m => compileMeasures(m, m.field));\n  const cell = {\n    num: 0,\n    agg: null,\n    store: false,\n    count: counts\n  };\n\n  if (!countOnly) {\n    var n = measures.length,\n        a = cell.agg = Array(n),\n        i = 0;\n\n    for (; i < n; ++i) a[i] = new measures[i](cell);\n  }\n\n  if (cell.store) {\n    var store = cell.data = new TupleStore();\n  }\n\n  cell.add = function (t) {\n    cell.num += 1;\n    if (countOnly) return;\n    if (store) store.add(t);\n\n    for (let i = 0; i < n; ++i) {\n      a[i].add(a[i].get(t), t);\n    }\n  };\n\n  cell.rem = function (t) {\n    cell.num -= 1;\n    if (countOnly) return;\n    if (store) store.rem(t);\n\n    for (let i = 0; i < n; ++i) {\n      a[i].rem(a[i].get(t), t);\n    }\n  };\n\n  cell.set = function (t) {\n    let i, n; // consolidate stored values\n\n    if (store) store.values(); // update tuple properties\n\n    for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n\n    if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n  };\n\n  cell.init = function () {\n    cell.num = 0;\n    if (store) store.reset();\n\n    for (let i = 0; i < n; ++i) a[i].init();\n  };\n\n  return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array<string>} params.ops - An array of strings indicating window operations to perform.\n * @param {Array<function(object): *>} [params.fields] - An array of accessors\n *   for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array<string>} [params.as] - An array of output field names for window operations.\n * @param {Array<number>} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n *   number alone, ignoring peers with identical sort values. If false (default),\n *   the window boundaries will be adjusted to include peer values.\n */\n\nfunction Window(params) {\n  Transform.call(this, {}, params);\n  this._mlen = 0;\n  this._mods = [];\n}\nWindow.Definition = {\n  'type': 'Window',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'ops',\n    'type': 'enum',\n    'array': true,\n    'values': ValidWindowOps.concat(ValidAggregateOps)\n  }, {\n    'name': 'params',\n    'type': 'number',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'fields',\n    'type': 'field',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'null': true,\n    'array': true\n  }, {\n    'name': 'frame',\n    'type': 'number',\n    'null': true,\n    'array': true,\n    'length': 2,\n    'default': [null, 0]\n  }, {\n    'name': 'ignorePeers',\n    'type': 'boolean',\n    'default': false\n  }]\n};\ninherits(Window, Transform, {\n  transform(_, pulse) {\n    this.stamp = pulse.stamp;\n\n    const mod = _.modified(),\n          cmp = stableCompare(_.sort),\n          key = groupkey(_.groupby),\n          group = t => this.group(key(t)); // initialize window state\n\n\n    let state = this.state;\n\n    if (!state || mod) {\n      state = this.state = new WindowState(_);\n    } // partition input tuples\n\n\n    if (mod || pulse.modified(state.inputs)) {\n      this.value = {};\n      pulse.visit(pulse.SOURCE, t => group(t).add(t));\n    } else {\n      pulse.visit(pulse.REM, t => group(t).remove(t));\n      pulse.visit(pulse.ADD, t => group(t).add(t));\n    } // perform window calculations for each modified partition\n\n\n    for (let i = 0, n = this._mlen; i < n; ++i) {\n      processPartition(this._mods[i], state, cmp, _);\n    }\n\n    this._mlen = 0;\n    this._mods = []; // TODO don't reflow everything?\n\n    return pulse.reflow(mod).modifies(state.outputs);\n  },\n\n  group(key) {\n    let group = this.value[key];\n\n    if (!group) {\n      group = this.value[key] = SortedList(tupleid);\n      group.stamp = -1;\n    }\n\n    if (group.stamp < this.stamp) {\n      group.stamp = this.stamp;\n      this._mods[this._mlen++] = group;\n    }\n\n    return group;\n  }\n\n});\n\nfunction processPartition(list, state, cmp, _) {\n  const sort = _.sort,\n        range = sort && !_.ignorePeers,\n        frame = _.frame || [null, 0],\n        data = list.data(cmp),\n        // use cmp for stable sort\n  n = data.length,\n        b = range ? bisector(sort) : null,\n        w = {\n    i0: 0,\n    i1: 0,\n    p0: 0,\n    p1: 0,\n    index: 0,\n    data: data,\n    compare: sort || constant(-1)\n  };\n  state.init();\n\n  for (let i = 0; i < n; ++i) {\n    setWindow(w, frame, i, n);\n    if (range) adjustRange(w, b);\n    state.update(w, data[i]);\n  }\n}\n\nfunction setWindow(w, f, i, n) {\n  w.p0 = w.i0;\n  w.p1 = w.i1;\n  w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n  w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n  w.index = i;\n} // if frame type is 'range', adjust window for peer values\n\n\nfunction adjustRange(w, bisect) {\n  const r0 = w.i0,\n        r1 = w.i1 - 1,\n        c = w.compare,\n        d = w.data,\n        n = d.length - 1;\n  if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n  if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export {default as path} from \"./path.js\";\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = (data = array(data)).length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n  var a = area().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n","export default function(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n  return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n  return link(curveVertical);\n}\n\nexport function linkRadial() {\n  var l = link(curveRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","var tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nexport default {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n    kx = Math.sin(tau / 10) * kr,\n    ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","var c = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nexport default function(type, size) {\n  var context = null;\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index.js\";\n\nexport {default as symbol, symbols} from \"./symbol.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export {default as path} from \"./path.js\";\n","export function domCanvas(w, h) {\n  if (typeof document !== 'undefined' && document.createElement) {\n    const c = document.createElement('canvas');\n    if (c && c.getContext) {\n      c.width = w;\n      c.height = h;\n      return c;\n    }\n  }\n  return null;\n}\n\nexport const domImage = () =>\n  typeof Image !== 'undefined' ? Image : null;\n","export {\n  domCanvas as domCanvas,\n  domCanvas as canvas,\n  domImage as image\n} from './src/domCanvas';\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new Map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new Map();\n    for (const value of _) {\n      const key = value + \"\";\n      if (index.has(key)) continue;\n      index.set(key, domain.push(value));\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nexport function loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = format(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(nice(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, log()).base(scale.base());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nvar durationSecond = 1000,\n    durationMinute = durationSecond * 60,\n    durationHour = durationMinute * 60,\n    durationDay = durationHour * 24,\n    durationWeek = durationDay * 7,\n    durationMonth = durationDay * 30,\n    durationYear = durationDay * 365;\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target),\n          step;\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond;\n      }\n      return interval.every(step);\n    }\n\n    return interval;\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1]))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {calendar} from \"./time.js\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (!isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export {\n  default as scaleBand,\n  point as scalePoint\n} from \"./band.js\";\n\nexport {\n  default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n  default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n  default as scaleLog\n} from \"./log.js\";\n\nexport {\n  default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n  default as scaleOrdinal,\n  implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n  default as scalePow,\n  sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n  default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n  default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n  default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n  default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n  default as scaleTime\n} from \"./time.js\";\n\nexport {\n  default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n  default as scaleSequential,\n  sequentialLog as scaleSequentialLog,\n  sequentialPow as scaleSequentialPow,\n  sequentialSqrt as scaleSequentialSqrt,\n  sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n  default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n  default as scaleDiverging,\n  divergingLog as scaleDivergingLog,\n  divergingPow as scaleDivergingPow,\n  divergingSqrt as scaleDivergingSqrt,\n  divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n  default as tickFormat\n} from \"./tickFormat.js\";\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport { scaleOrdinal, tickFormat as tickFormat$1, scaleIdentity, scaleLinear, scaleLog, scalePow, scaleSqrt, scaleSymlog, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, scaleQuantile, scaleQuantize, scaleThreshold } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $ from 'd3-interpolate';\nimport { piecewise } from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n  const space = count - paddingInner + paddingOuter * 2;\n  return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n  return function (_) {\n    let lo = _[0],\n        hi = _[1],\n        t;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    return [scale.invert(lo), scale.invert(hi)];\n  };\n}\n\nfunction invertRangeExtent (scale) {\n  return function (_) {\n    const range = scale.range();\n    let lo = _[0],\n        hi = _[1],\n        min = -1,\n        max,\n        t,\n        i,\n        n;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    for (i = 0, n = range.length; i < n; ++i) {\n      if (range[i] >= lo && range[i] <= hi) {\n        if (min < 0) min = i;\n        max = i;\n      }\n    }\n\n    if (min < 0) return undefined;\n    lo = scale.invertExtent(range[min]);\n    hi = scale.invertExtent(range[max]);\n    return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n  };\n}\n\nfunction band() {\n  const scale = scaleOrdinal().unknown(undefined),\n        domain = scale.domain,\n        ordinalRange = scale.range;\n  let range$1 = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n  delete scale.unknown;\n\n  function rescale() {\n    const n = domain().length,\n          reverse = range$1[1] < range$1[0],\n          stop = range$1[1 - reverse],\n          space = bandSpace(n, paddingInner, paddingOuter);\n    let start = range$1[reverse - 0];\n    step = (stop - start) / (space || 1);\n\n    if (round) {\n      step = Math.floor(step);\n    }\n\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n\n    if (round) {\n      start = Math.round(start);\n      bandwidth = Math.round(bandwidth);\n    }\n\n    const values = range(n).map(i => start + step * i);\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain(_);\n      return rescale();\n    } else {\n      return domain();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range$1 = [+_[0], +_[1]];\n      return rescale();\n    } else {\n      return range$1.slice();\n    }\n  };\n\n  scale.rangeRound = function (_) {\n    range$1 = [+_[0], +_[1]];\n    round = true;\n    return rescale();\n  };\n\n  scale.bandwidth = function () {\n    return bandwidth;\n  };\n\n  scale.step = function () {\n    return step;\n  };\n\n  scale.round = function (_) {\n    if (arguments.length) {\n      round = !!_;\n      return rescale();\n    } else {\n      return round;\n    }\n  };\n\n  scale.padding = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      paddingInner = paddingOuter;\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingInner = function (_) {\n    if (arguments.length) {\n      paddingInner = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingOuter = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingOuter;\n    }\n  };\n\n  scale.align = function (_) {\n    if (arguments.length) {\n      align = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return align;\n    }\n  };\n\n  scale.invertRange = function (_) {\n    // bail if range has null or undefined values\n    if (_[0] == null || _[1] == null) return;\n    const reverse = range$1[1] < range$1[0],\n          values = reverse ? ordinalRange().reverse() : ordinalRange(),\n          n = values.length - 1;\n    let lo = +_[0],\n        hi = +_[1],\n        a,\n        b,\n        t; // bail if either range endpoint is invalid\n\n    if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n    a = Math.max(0, bisectRight(values, lo) - 1);\n    b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n    if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n    if (reverse) {\n      // map + swap\n      t = a;\n      a = n - b;\n      b = n - t;\n    }\n\n    return a > b ? undefined : domain().slice(a, b + 1);\n  };\n\n  scale.invert = function (_) {\n    const value = scale.invertRange([_, _]);\n    return value ? value[0] : value;\n  };\n\n  scale.copy = function () {\n    return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n  };\n\n  return rescale();\n}\n\nfunction pointish(scale) {\n  const copy = scale.copy;\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n\n  scale.copy = function () {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point() {\n  return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n  return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n  let domain = [],\n      range = [];\n\n  function scale(x) {\n    return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain = numbers(_);\n      return scale;\n    } else {\n      return domain.slice();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range = slice.call(_);\n      return scale;\n    } else {\n      return range.slice();\n    }\n  };\n\n  scale.tickFormat = function (count, specifier) {\n    return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n  };\n\n  scale.copy = function () {\n    return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n  };\n\n  return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n  const ctr = function scale() {\n    const s = constructor();\n\n    if (!s.invertRange) {\n      s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n    }\n\n    s.type = type;\n    return s;\n  };\n\n  ctr.metadata = toSet(array(metadata));\n  return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n  if (arguments.length > 1) {\n    scales[type] = create(type, scale, metadata);\n    return this;\n  } else {\n    return isValidScaleType(type) ? scales[type] : undefined;\n  }\n} // identity scale\n\nscale(Identity, scaleIdentity); // continuous scales\n\nscale(Linear, scaleLinear, Continuous);\nscale(Log, scaleLog, [Continuous, Log]);\nscale(Pow, scalePow, Continuous);\nscale(Sqrt, scaleSqrt, Continuous);\nscale(Symlog, scaleSymlog, Continuous);\nscale(Time, scaleTime, [Continuous, Temporal]);\nscale(UTC, scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(\"\".concat(Sequential, \"-\").concat(Linear), scaleSequential, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Log), scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Sequential, \"-\").concat(Pow), scaleSequentialPow, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Sqrt), scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Symlog), scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(\"\".concat(Diverging, \"-\").concat(Linear), scaleDiverging, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Log), scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Diverging, \"-\").concat(Pow), scaleDivergingPow, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Sqrt), scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Symlog), scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, scaleQuantize, Discretizing);\nscale(Threshold, scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n  return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n  const s = scales[key];\n  return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n  return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n  return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n  return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n  return hasType(key, Log);\n}\nfunction isTemporal(key) {\n  return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n  return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n  return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n  const start = range[0],\n        span = peek(range) - start;\n  return function (i) {\n    return interpolator(start + i * span);\n  };\n}\nfunction interpolateColors(colors, type, gamma) {\n  return piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n  const samples = new Array(count),\n        n = count + 1;\n\n  for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n  return samples;\n}\nfunction scaleCopy(scale) {\n  const t = scale.type,\n        s = scale.copy();\n  s.type = t;\n  return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n  const delta = max - min;\n  let i, t, s;\n\n  if (!delta || !Number.isFinite(delta)) {\n    return constant(0.5);\n  } else {\n    i = (t = scale$1.type).indexOf('-');\n    t = i < 0 ? t : t.slice(i + 1);\n    s = scale(t)().domain([min, max]).range([0, 1]);\n    scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n    return s;\n  }\n}\nfunction interpolate(type, gamma) {\n  const interp = $[method(type)];\n  return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n  return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n  blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n  greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n  greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n  oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n  purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n  reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n  blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n  bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n  greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n  orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n  purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n  purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n  purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n  redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n  yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n  yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n  yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n  blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n  brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n  purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n  purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n  redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n  redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n  yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n  redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n  redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n  pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n  spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n  viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n  magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n  inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n  plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n  cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n  rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n  sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n  turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n  browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n  tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n  teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n  warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n  goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n  goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n  goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n  lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n  lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n  lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n  lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n  lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n  darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n  darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n  darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n  darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n  darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n  category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n  category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n  category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n  category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n  tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n  tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n  accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n  dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n  paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n  pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n  pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n  set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n  set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n  set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n  const n = palette.length / 6 | 0,\n        c = new Array(n);\n\n  for (let i = 0; i < n;) {\n    c[i] = '#' + palette.slice(i * 6, ++i * 6);\n  }\n\n  return c;\n}\n\nfunction apply(_, f) {\n  for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n  name = name && name.toLowerCase();\n\n  if (arguments.length > 1) {\n    schemes[name] = scheme;\n    return this;\n  } else {\n    return schemes[name];\n  }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n  let step;\n\n  if (isNumber(count)) {\n    if (scale.bins) {\n      count = Math.max(count, scale.bins.length);\n    }\n\n    if (minStep != null) {\n      count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n    }\n  }\n\n  if (isObject(count)) {\n    step = count.step;\n    count = count.interval;\n  }\n\n  if (isString(count)) {\n    count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n    if (step) count = count.every(step);\n  }\n\n  return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n  let range = scale.range(),\n      lo = range[0],\n      hi = peek(range),\n      cmp = ascending;\n\n  if (lo > hi) {\n    range = hi;\n    hi = lo;\n    lo = range;\n    cmp = descending;\n  }\n\n  lo = Math.floor(lo);\n  hi = Math.ceil(hi); // filter ticks to valid values within the range\n  // additionally sort ticks in range order (#2579)\n\n  ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n  if (count > 0 && ticks.length > 1) {\n    const endpoints = [ticks[0], peek(ticks)];\n\n    while (ticks.length > count && ticks.length >= 3) {\n      ticks = ticks.filter((_, i) => !(i % 2));\n    }\n\n    if (ticks.length < 3) {\n      ticks = endpoints;\n    }\n  }\n\n  return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n  return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n *   specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n *   time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n  const type = scale.type;\n  let format = defaultFormatter;\n\n  if (type === Time || formatType === Time) {\n    format = locale.timeFormat(specifier);\n  } else if (type === UTC || formatType === UTC) {\n    format = locale.utcFormat(specifier);\n  } else if (isLogarithmic(type)) {\n    const varfmt = locale.formatFloat(specifier);\n\n    if (noSkip || scale.bins) {\n      format = varfmt;\n    } else {\n      const test = tickLog(scale, count, false);\n\n      format = _ => test(_) ? varfmt(_) : '';\n    }\n  } else if (scale.tickFormat) {\n    // if d3 scale has tickFormat, it must be continuous\n    const d = scale.domain();\n    format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n  } else if (specifier) {\n    format = locale.format(specifier);\n  }\n\n  return format;\n}\nfunction tickLog(scale, count, values) {\n  const ticks = tickValues(scale, count),\n        base = scale.base(),\n        logb = Math.log(base),\n        k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n  const test = d => {\n    let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n    if (i * base < base - 0.5) i *= base;\n    return i <= k;\n  };\n\n  return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'thresholds',\n  [Threshold]: 'domain'\n};\nconst formats = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n  return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n  const _ = scale[formats[scale.type]](),\n        n = _.length;\n\n  let d = n > 1 ? _[1] - _[0] : _[0],\n      i;\n\n  for (i = 1; i < n; ++i) {\n    d = Math.min(d, _[i] - _[i - 1]);\n  } // tickCount = 3 ticks times 10 for increased resolution\n\n\n  return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n  const values = [-Infinity].concat(thresholds);\n  values.max = +Infinity;\n  return values;\n}\n\nfunction binValues(bins) {\n  const values = bins.slice(0, -1);\n  values.max = peek(bins);\n  return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n  const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n  return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n  const limit = get(array[index + 1], get(array.max, +Infinity)),\n        lo = formatValue(value, format),\n        hi = formatValue(limit, format);\n  return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n  const domain = scale.domain(),\n        count = domain.length - 1;\n  let lo = +domain[0],\n      hi = +peek(domain),\n      span = hi - lo;\n\n  if (scale.type === Threshold) {\n    const adjust = count ? span / count : 0.1;\n    lo -= adjust;\n    hi += adjust;\n    span = hi - lo;\n  }\n\n  return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n  const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n  if (isString(specifier) && isTemporal(type)) {\n    specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n  }\n\n  return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n  opt = opt || {};\n  const max = Math.max(3, opt.maxlen || 7),\n        fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n  if (isDiscretizing(scale.type)) {\n    const v = labelValues(scale).slice(1).map(fmt),\n          n = v.length;\n    return \"\".concat(n, \" boundar\").concat(n === 1 ? 'y' : 'ies', \": \").concat(v.join(', '));\n  } // if scale domain is discrete, list values\n  else if (isDiscrete(scale.type)) {\n      const d = scale.domain(),\n            n = d.length,\n            v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n      return \"\".concat(n, \" value\").concat(n === 1 ? '' : 's', \": \").concat(v);\n    } // if scale domain is continuous, describe value range\n    else {\n        const d = scale.domain();\n        return \"values from \".concat(fmt(d[0]), \" to \").concat(fmt(peek(d)));\n      }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n  gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n  return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n  const type = g.gradient;\n  let id = g.id,\n      prefix = type === 'radial' ? patternPrefix : ''; // check id, assign default values as needed\n\n  if (!id) {\n    id = g.id = 'gradient_' + gradient_id++;\n\n    if (type === 'radial') {\n      g.x1 = get(g.x1, 0.5);\n      g.y1 = get(g.y1, 0.5);\n      g.r1 = get(g.r1, 0);\n      g.x2 = get(g.x2, 0.5);\n      g.y2 = get(g.y2, 0.5);\n      g.r2 = get(g.r2, 0.5);\n      prefix = patternPrefix;\n    } else {\n      g.x1 = get(g.x1, 0);\n      g.y1 = get(g.y1, 0);\n      g.x2 = get(g.x2, 1);\n      g.y2 = get(g.y2, 0);\n    }\n  } // register definition\n\n\n  defs[id] = g; // return url reference\n\n  return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n  return val != null ? val : def;\n}\n\nfunction Gradient (p0, p1) {\n  var stops = [],\n      gradient;\n  return gradient = {\n    gradient: 'linear',\n    x1: p0 ? p0[0] : 0,\n    y1: p0 ? p0[1] : 0,\n    x2: p1 ? p1[0] : 1,\n    y2: p1 ? p1[1] : 0,\n    stops: stops,\n    stop: function (offset, color) {\n      stops.push({\n        offset: offset,\n        color: color\n      });\n      return gradient;\n    }\n  };\n}\n\nconst lookup = {\n  'basis': {\n    curve: curveBasis\n  },\n  'basis-closed': {\n    curve: curveBasisClosed\n  },\n  'basis-open': {\n    curve: curveBasisOpen\n  },\n  'bundle': {\n    curve: curveBundle,\n    tension: 'beta',\n    value: 0.85\n  },\n  'cardinal': {\n    curve: curveCardinal,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-open': {\n    curve: curveCardinalOpen,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-closed': {\n    curve: curveCardinalClosed,\n    tension: 'tension',\n    value: 0\n  },\n  'catmull-rom': {\n    curve: curveCatmullRom,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-closed': {\n    curve: curveCatmullRomClosed,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-open': {\n    curve: curveCatmullRomOpen,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'linear': {\n    curve: curveLinear\n  },\n  'linear-closed': {\n    curve: curveLinearClosed\n  },\n  'monotone': {\n    horizontal: curveMonotoneY,\n    vertical: curveMonotoneX\n  },\n  'natural': {\n    curve: curveNatural\n  },\n  'step': {\n    curve: curveStep\n  },\n  'step-after': {\n    curve: curveStepAfter\n  },\n  'step-before': {\n    curve: curveStepBefore\n  }\n};\nfunction curves(type, orientation, tension) {\n  var entry = hasOwnProperty(lookup, type) && lookup[type],\n      curve = null;\n\n  if (entry) {\n    curve = entry.curve || entry[orientation || 'vertical'];\n\n    if (entry.tension && tension != null) {\n      curve = curve[entry.tension](tension);\n    }\n  }\n\n  return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nconst cmdlen = {\n  m: 2,\n  l: 2,\n  h: 1,\n  v: 1,\n  c: 6,\n  s: 4,\n  q: 4,\n  t: 2,\n  a: 7\n},\n      regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\.\\d+)(\\.\\d)/g, /(\\d)([-+])/g, /\\s|,|###/];\nfunction pathParse (pathstr) {\n  const result = [];\n  let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence\n\n  const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn\n\n  for (i = 0, n = path.length; i < n; ++i) {\n    curr = path[i];\n    chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);\n    cmd = curr.charAt(0);\n    parsed = [cmd];\n\n    for (j = 0, m = chunks.length; j < m; ++j) {\n      if ((param = +chunks[j]) === param) {\n        // not NaN\n        parsed.push(param);\n      }\n    }\n\n    len = cmdlen[cmd.toLowerCase()];\n\n    if (parsed.length - 1 > len) {\n      const m = parsed.length;\n      j = 1;\n      result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)\n\n      cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;\n\n      for (; j < m; j += len) {\n        result.push([cmd].concat(parsed.slice(j, j + len)));\n      }\n    } else {\n      result.push(parsed);\n    }\n  }\n\n  return result;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join; // Copied from Inkscape svgtopdf, thanks!\n\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n  const key = join.call(arguments);\n\n  if (segmentCache[key]) {\n    return segmentCache[key];\n  }\n\n  const th = rotateX * DegToRad;\n  const sin_th = Math.sin(th);\n  const cos_th = Math.cos(th);\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n  const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n  const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n  let pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n  if (pl > 1) {\n    pl = Math.sqrt(pl);\n    rx *= pl;\n    ry *= pl;\n  }\n\n  const a00 = cos_th / rx;\n  const a01 = sin_th / rx;\n  const a10 = -sin_th / ry;\n  const a11 = cos_th / ry;\n  const x0 = a00 * ox + a01 * oy;\n  const y0 = a10 * ox + a11 * oy;\n  const x1 = a00 * x + a01 * y;\n  const y1 = a10 * x + a11 * y;\n  const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n  let sfactor_sq = 1 / d - 0.25;\n  if (sfactor_sq < 0) sfactor_sq = 0;\n  let sfactor = Math.sqrt(sfactor_sq);\n  if (sweep == large) sfactor = -sfactor;\n  const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n  const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n  const th0 = Math.atan2(y0 - yc, x0 - xc);\n  const th1 = Math.atan2(y1 - yc, x1 - xc);\n  let th_arc = th1 - th0;\n\n  if (th_arc < 0 && sweep === 1) {\n    th_arc += Tau;\n  } else if (th_arc > 0 && sweep === 0) {\n    th_arc -= Tau;\n  }\n\n  const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n  const result = [];\n\n  for (let i = 0; i < segs; ++i) {\n    const th2 = th0 + i * th_arc / segs;\n    const th3 = th0 + (i + 1) * th_arc / segs;\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n  }\n\n  return segmentCache[key] = result;\n}\nfunction bezier(params) {\n  const key = join.call(params);\n\n  if (bezierCache[key]) {\n    return bezierCache[key];\n  }\n\n  var cx = params[0],\n      cy = params[1],\n      th0 = params[2],\n      th1 = params[3],\n      rx = params[4],\n      ry = params[5],\n      sin_th = params[6],\n      cos_th = params[7];\n  const a00 = cos_th * rx;\n  const a01 = -sin_th * ry;\n  const a10 = sin_th * rx;\n  const a11 = cos_th * ry;\n  const cos_th0 = Math.cos(th0);\n  const sin_th0 = Math.sin(th0);\n  const cos_th1 = Math.cos(th1);\n  const sin_th1 = Math.sin(th1);\n  const th_half = 0.5 * (th1 - th0);\n  const sin_th_h2 = Math.sin(th_half * 0.5);\n  const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n  const x1 = cx + cos_th0 - t * sin_th0;\n  const y1 = cy + sin_th0 + t * cos_th0;\n  const x3 = cx + cos_th1;\n  const y3 = cy + sin_th1;\n  const x2 = x3 + t * sin_th1;\n  const y2 = y3 - t * cos_th1;\n  return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current, sX, sY) {\n  const c = temp[0] = current[0];\n\n  if (c === 'a' || c === 'A') {\n    temp[1] = sX * current[1];\n    temp[2] = sY * current[2];\n    temp[3] = current[3];\n    temp[4] = current[4];\n    temp[5] = current[5];\n    temp[6] = sX * current[6];\n    temp[7] = sY * current[7];\n  } else if (c === 'h' || c === 'H') {\n    temp[1] = sX * current[1];\n  } else if (c === 'v' || c === 'V') {\n    temp[1] = sY * current[1];\n  } else {\n    for (var i = 1, n = current.length; i < n; ++i) {\n      temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n    }\n  }\n\n  return temp;\n}\n\nfunction pathRender (context, path, l, t, sX, sY) {\n  var current,\n      // current instruction\n  previous = null,\n      x = 0,\n      // current x\n  y = 0,\n      // current y\n  controlX = 0,\n      // current control point x\n  controlY = 0,\n      // current control point y\n  tempX,\n      tempY,\n      tempControlX,\n      tempControlY;\n  if (l == null) l = 0;\n  if (t == null) t = 0;\n  if (sX == null) sX = 1;\n  if (sY == null) sY = sX;\n  if (context.beginPath) context.beginPath();\n\n  for (var i = 0, len = path.length; i < len; ++i) {\n    current = path[i];\n\n    if (sX !== 1 || sY !== 1) {\n      current = scale(current, sX, sY);\n    }\n\n    switch (current[0]) {\n      // first letter\n      case 'l':\n        // lineto, relative\n        x += current[1];\n        y += current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'L':\n        // lineto, absolute\n        x = current[1];\n        y = current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'h':\n        // horizontal lineto, relative\n        x += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'H':\n        // horizontal lineto, absolute\n        x = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'v':\n        // vertical lineto, relative\n        y += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'V':\n        // verical lineto, absolute\n        y = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'm':\n        // moveTo, relative\n        x += current[1];\n        y += current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'M':\n        // moveTo, absolute\n        x = current[1];\n        y = current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'c':\n        // bezierCurveTo, relative\n        tempX = x + current[5];\n        tempY = y + current[6];\n        controlX = x + current[3];\n        controlY = y + current[4];\n        context.bezierCurveTo(x + current[1] + l, // x1\n        y + current[2] + t, // y1\n        controlX + l, // x2\n        controlY + t, // y2\n        tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'C':\n        // bezierCurveTo, absolute\n        x = current[5];\n        y = current[6];\n        controlX = current[3];\n        controlY = current[4];\n        context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n        break;\n\n      case 's':\n        // shorthand cubic bezierCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n\n        controlX = x + current[1];\n        controlY = y + current[2];\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'S':\n        // shorthand cubic bezierCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY; // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n\n        controlX = current[1];\n        controlY = current[2];\n        break;\n\n      case 'q':\n        // quadraticCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4];\n        controlX = x + current[1];\n        controlY = y + current[2];\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'Q':\n        // quadraticCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4];\n        context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        controlX = current[1];\n        controlY = current[2];\n        break;\n\n      case 't':\n        // shorthand quadraticCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[1];\n        tempY = y + current[2];\n\n        if (previous[0].match(/[QqTt]/) === null) {\n          // If there is no previous command or if the previous command was not a Q, q, T or t,\n          // assume the control point is coincident with the current point\n          controlX = x;\n          controlY = y;\n        } else if (previous[0] === 't') {\n          // calculate reflection of previous control points for t\n          controlX = 2 * x - tempControlX;\n          controlY = 2 * y - tempControlY;\n        } else if (previous[0] === 'q') {\n          // calculate reflection of previous control points for q\n          controlX = 2 * x - controlX;\n          controlY = 2 * y - controlY;\n        }\n\n        tempControlX = controlX;\n        tempControlY = controlY;\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        controlX = x + current[1];\n        controlY = y + current[2];\n        break;\n\n      case 'T':\n        tempX = current[1];\n        tempY = current[2]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'a':\n        drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n        x += current[6];\n        y += current[7];\n        break;\n\n      case 'A':\n        drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n        x = current[6];\n        y = current[7];\n        break;\n\n      case 'z':\n      case 'Z':\n        context.closePath();\n        break;\n    }\n\n    previous = current;\n  }\n}\n\nfunction drawArc(context, x, y, coords) {\n  const seg = segments(coords[5], // end x\n  coords[6], // end y\n  coords[0], // radius x\n  coords[1], // radius y\n  coords[3], // large flag\n  coords[4], // sweep flag\n  coords[2], // rotation\n  x, y);\n\n  for (let i = 0; i < seg.length; ++i) {\n    const bez = bezier(seg[i]);\n    context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n  }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n  'circle': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(r, 0);\n      context.arc(0, 0, r, 0, Tau);\n    }\n  },\n  'cross': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 2.5;\n      context.moveTo(-r, -s);\n      context.lineTo(-r, s);\n      context.lineTo(-s, s);\n      context.lineTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, s);\n      context.lineTo(r, s);\n      context.lineTo(r, -s);\n      context.lineTo(s, -s);\n      context.lineTo(s, -r);\n      context.lineTo(-s, -r);\n      context.lineTo(-s, -s);\n      context.closePath();\n    }\n  },\n  'diamond': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(0, -r);\n      context.lineTo(r, 0);\n      context.lineTo(0, r);\n      context.closePath();\n    }\n  },\n  'square': {\n    draw: function (context, size) {\n      var w = Math.sqrt(size),\n          x = -w / 2;\n      context.rect(x, x, w, w);\n    }\n  },\n  'arrow': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 7,\n          t = r / 2.5,\n          v = r / 8;\n      context.moveTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, -v);\n      context.lineTo(t, -v);\n      context.lineTo(0, -r);\n      context.lineTo(-t, -v);\n      context.lineTo(-s, -v);\n      context.closePath();\n    }\n  },\n  'wedge': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = h - r * Tan30,\n          b = r / 4;\n      context.moveTo(0, -h - o);\n      context.lineTo(-b, h - o);\n      context.lineTo(b, h - o);\n      context.closePath();\n    }\n  },\n  'triangle': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = h - r * Tan30;\n      context.moveTo(0, -h - o);\n      context.lineTo(-r, h - o);\n      context.lineTo(r, h - o);\n      context.closePath();\n    }\n  },\n  'triangle-up': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, -h);\n      context.lineTo(-r, h);\n      context.lineTo(r, h);\n      context.closePath();\n    }\n  },\n  'triangle-down': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, h);\n      context.lineTo(-r, -h);\n      context.lineTo(r, -h);\n      context.closePath();\n    }\n  },\n  'triangle-right': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(h, 0);\n      context.lineTo(-h, -r);\n      context.lineTo(-h, r);\n      context.closePath();\n    }\n  },\n  'triangle-left': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(-h, 0);\n      context.lineTo(h, -r);\n      context.lineTo(h, r);\n      context.closePath();\n    }\n  },\n  'stroke': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(r, 0);\n    }\n  }\n};\nfunction symbols(_) {\n  return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\n\nfunction customSymbol(path) {\n  if (!hasOwnProperty(custom, path)) {\n    const parsed = pathParse(path);\n    custom[path] = {\n      draw: function (context, size) {\n        pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n      }\n    };\n  }\n\n  return custom[path];\n}\n\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n  return d.x;\n}\n\nfunction rectangleY(d) {\n  return d.y;\n}\n\nfunction rectangleWidth(d) {\n  return d.width;\n}\n\nfunction rectangleHeight(d) {\n  return d.height;\n}\n\nfunction number(_) {\n  return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n  return Math.max(min, Math.min(value, max));\n}\n\nfunction vg_rect () {\n  var x = rectangleX,\n      y = rectangleY,\n      width = rectangleWidth,\n      height = rectangleHeight,\n      crTL = number(0),\n      crTR = crTL,\n      crBL = crTL,\n      crBR = crTL,\n      context = null;\n\n  function rectangle(_, x0, y0) {\n    var buffer,\n        x1 = x0 != null ? x0 : +x.call(this, _),\n        y1 = y0 != null ? y0 : +y.call(this, _),\n        w = +width.call(this, _),\n        h = +height.call(this, _),\n        s = Math.min(w, h) / 2,\n        tl = clamp(+crTL.call(this, _), 0, s),\n        tr = clamp(+crTR.call(this, _), 0, s),\n        bl = clamp(+crBL.call(this, _), 0, s),\n        br = clamp(+crBR.call(this, _), 0, s);\n    if (!context) context = buffer = path$3();\n\n    if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n      context.rect(x1, y1, w, h);\n    } else {\n      var x2 = x1 + w,\n          y2 = y1 + h;\n      context.moveTo(x1 + tl, y1);\n      context.lineTo(x2 - tr, y1);\n      context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n      context.lineTo(x2, y2 - br);\n      context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n      context.lineTo(x1 + bl, y2);\n      context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n      context.lineTo(x1, y1 + tl);\n      context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n      context.closePath();\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  rectangle.x = function (_) {\n    if (arguments.length) {\n      x = number(_);\n      return rectangle;\n    } else {\n      return x;\n    }\n  };\n\n  rectangle.y = function (_) {\n    if (arguments.length) {\n      y = number(_);\n      return rectangle;\n    } else {\n      return y;\n    }\n  };\n\n  rectangle.width = function (_) {\n    if (arguments.length) {\n      width = number(_);\n      return rectangle;\n    } else {\n      return width;\n    }\n  };\n\n  rectangle.height = function (_) {\n    if (arguments.length) {\n      height = number(_);\n      return rectangle;\n    } else {\n      return height;\n    }\n  };\n\n  rectangle.cornerRadius = function (tl, tr, br, bl) {\n    if (arguments.length) {\n      crTL = number(tl);\n      crTR = tr != null ? number(tr) : crTL;\n      crBR = br != null ? number(br) : crTL;\n      crBL = bl != null ? number(bl) : crTR;\n      return rectangle;\n    } else {\n      return crTL;\n    }\n  };\n\n  rectangle.context = function (_) {\n    if (arguments.length) {\n      context = _ == null ? null : _;\n      return rectangle;\n    } else {\n      return context;\n    }\n  };\n\n  return rectangle;\n}\n\nfunction vg_trail () {\n  var x,\n      y,\n      size,\n      defined,\n      context = null,\n      ready,\n      x1,\n      y1,\n      r1;\n\n  function point(x2, y2, w2) {\n    const r2 = w2 / 2;\n\n    if (ready) {\n      var ux = y1 - y2,\n          uy = x2 - x1;\n\n      if (ux || uy) {\n        // get normal vector\n        var ud = Math.sqrt(ux * ux + uy * uy),\n            rx = (ux /= ud) * r1,\n            ry = (uy /= ud) * r1,\n            t = Math.atan2(uy, ux); // draw segment\n\n        context.moveTo(x1 - rx, y1 - ry);\n        context.lineTo(x2 - ux * r2, y2 - uy * r2);\n        context.arc(x2, y2, r2, t - Math.PI, t);\n        context.lineTo(x1 + rx, y1 + ry);\n        context.arc(x1, y1, r1, t, t + Math.PI);\n      } else {\n        context.arc(x2, y2, r2, 0, Tau);\n      }\n\n      context.closePath();\n    } else {\n      ready = 1;\n    }\n\n    x1 = x2;\n    y1 = y2;\n    r1 = r2;\n  }\n\n  function trail(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n    if (context == null) context = buffer = path$3();\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) ready = 0;\n      }\n\n      if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  trail.x = function (_) {\n    if (arguments.length) {\n      x = _;\n      return trail;\n    } else {\n      return x;\n    }\n  };\n\n  trail.y = function (_) {\n    if (arguments.length) {\n      y = _;\n      return trail;\n    } else {\n      return y;\n    }\n  };\n\n  trail.size = function (_) {\n    if (arguments.length) {\n      size = _;\n      return trail;\n    } else {\n      return size;\n    }\n  };\n\n  trail.defined = function (_) {\n    if (arguments.length) {\n      defined = _;\n      return trail;\n    } else {\n      return defined;\n    }\n  };\n\n  trail.context = function (_) {\n    if (arguments.length) {\n      if (_ == null) {\n        context = null;\n      } else {\n        context = _;\n      }\n\n      return trail;\n    } else {\n      return context;\n    }\n  };\n\n  return trail;\n}\n\nfunction value(a, b) {\n  return a != null ? a : b;\n}\n\nconst x = item => item.x || 0,\n      y = item => item.y || 0,\n      w = item => item.width || 0,\n      h = item => item.height || 0,\n      xw = item => (item.x || 0) + (item.width || 0),\n      yh = item => (item.y || 0) + (item.height || 0),\n      sa = item => item.startAngle || 0,\n      ea = item => item.endAngle || 0,\n      pa = item => item.padAngle || 0,\n      ir = item => item.innerRadius || 0,\n      or = item => item.outerRadius || 0,\n      cr = item => item.cornerRadius || 0,\n      tl = item => value(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n      tr = item => value(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n      br = item => value(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n      bl = item => value(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n      sz = item => value(item.size, 64),\n      ts = item => item.size || 1,\n      def = item => !(item.defined === false),\n      type = item => symbols(item.shape || 'circle');\n\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n      areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n      areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n      lineShape = line$2().x(x).y(y).defined(def),\n      rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n      symbolShape = symbol$2().type(type).size(sz),\n      trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n  return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc(context, item) {\n  return arcShape.context(context)(item);\n}\nfunction area(context, items) {\n  const item = items[0],\n        interp = item.interpolate || 'linear';\n  return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line(context, items) {\n  const item = items[0],\n        interp = item.interpolate || 'linear';\n  return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n  return rectShape.context(context)(item, x, y);\n}\nfunction shape(context, item) {\n  return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol(context, item) {\n  return symbolShape.context(context)(item);\n}\nfunction trail(context, items) {\n  return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n  clip_id = 1;\n}\nfunction clip (renderer, item, size) {\n  var clip = item.clip,\n      defs = renderer._defs,\n      id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n      c = defs.clipping[id] || (defs.clipping[id] = {\n    id: id\n  });\n\n  if (isFunction(clip)) {\n    c.path = clip(null);\n  } else if (hasCornerRadius(size)) {\n    c.path = rectangle(null, size, 0, 0);\n  } else {\n    c.width = size.width || 0;\n    c.height = size.height || 0;\n  }\n\n  return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n  this.clear();\n  if (b) this.union(b);\n}\nBounds.prototype = {\n  clone() {\n    return new Bounds(this);\n  },\n\n  clear() {\n    this.x1 = +Number.MAX_VALUE;\n    this.y1 = +Number.MAX_VALUE;\n    this.x2 = -Number.MAX_VALUE;\n    this.y2 = -Number.MAX_VALUE;\n    return this;\n  },\n\n  empty() {\n    return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n  },\n\n  equals(b) {\n    return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n  },\n\n  set(x1, y1, x2, y2) {\n    if (x2 < x1) {\n      this.x2 = x1;\n      this.x1 = x2;\n    } else {\n      this.x1 = x1;\n      this.x2 = x2;\n    }\n\n    if (y2 < y1) {\n      this.y2 = y1;\n      this.y1 = y2;\n    } else {\n      this.y1 = y1;\n      this.y2 = y2;\n    }\n\n    return this;\n  },\n\n  add(x, y) {\n    if (x < this.x1) this.x1 = x;\n    if (y < this.y1) this.y1 = y;\n    if (x > this.x2) this.x2 = x;\n    if (y > this.y2) this.y2 = y;\n    return this;\n  },\n\n  expand(d) {\n    this.x1 -= d;\n    this.y1 -= d;\n    this.x2 += d;\n    this.y2 += d;\n    return this;\n  },\n\n  round() {\n    this.x1 = Math.floor(this.x1);\n    this.y1 = Math.floor(this.y1);\n    this.x2 = Math.ceil(this.x2);\n    this.y2 = Math.ceil(this.y2);\n    return this;\n  },\n\n  scale(s) {\n    this.x1 *= s;\n    this.y1 *= s;\n    this.x2 *= s;\n    this.y2 *= s;\n    return this;\n  },\n\n  translate(dx, dy) {\n    this.x1 += dx;\n    this.x2 += dx;\n    this.y1 += dy;\n    this.y2 += dy;\n    return this;\n  },\n\n  rotate(angle, x, y) {\n    const p = this.rotatedPoints(angle, x, y);\n    return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n  },\n\n  rotatedPoints(angle, x, y) {\n    var {\n      x1,\n      y1,\n      x2,\n      y2\n    } = this,\n        cos = Math.cos(angle),\n        sin = Math.sin(angle),\n        cx = x - x * cos + y * sin,\n        cy = y - x * sin - y * cos;\n    return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n  },\n\n  union(b) {\n    if (b.x1 < this.x1) this.x1 = b.x1;\n    if (b.y1 < this.y1) this.y1 = b.y1;\n    if (b.x2 > this.x2) this.x2 = b.x2;\n    if (b.y2 > this.y2) this.y2 = b.y2;\n    return this;\n  },\n\n  intersect(b) {\n    if (b.x1 > this.x1) this.x1 = b.x1;\n    if (b.y1 > this.y1) this.y1 = b.y1;\n    if (b.x2 < this.x2) this.x2 = b.x2;\n    if (b.y2 < this.y2) this.y2 = b.y2;\n    return this;\n  },\n\n  encloses(b) {\n    return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n  },\n\n  alignsWith(b) {\n    return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n  },\n\n  intersects(b) {\n    return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n  },\n\n  contains(x, y) {\n    return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n  },\n\n  width() {\n    return this.x2 - this.x1;\n  },\n\n  height() {\n    return this.y2 - this.y1;\n  }\n\n};\n\nfunction Item(mark) {\n  this.mark = mark;\n  this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n  Item.call(this, mark);\n  this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n  this._pending = 0;\n  this._loader = customLoader || loader();\n}\n\nfunction increment(loader) {\n  loader._pending += 1;\n}\n\nfunction decrement(loader) {\n  loader._pending -= 1;\n}\n\nResourceLoader.prototype = {\n  pending() {\n    return this._pending;\n  },\n\n  sanitizeURL(uri) {\n    const loader = this;\n    increment(loader);\n    return loader._loader.sanitize(uri, {\n      context: 'href'\n    }).then(opt => {\n      decrement(loader);\n      return opt;\n    }).catch(() => {\n      decrement(loader);\n      return null;\n    });\n  },\n\n  loadImage(uri) {\n    const loader = this,\n          Image = image$1();\n    increment(loader);\n    return loader._loader.sanitize(uri, {\n      context: 'image'\n    }).then(opt => {\n      const url = opt.href;\n      if (!url || !Image) throw {\n        url: url\n      };\n      const img = new Image(); // set crossOrigin only if cors is defined; empty string sets anonymous mode\n      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n\n      const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n      if (cors != null) img.crossOrigin = cors; // attempt to load image resource\n\n      img.onload = () => decrement(loader);\n\n      img.onerror = () => decrement(loader);\n\n      img.src = url;\n      return img;\n    }).catch(e => {\n      decrement(loader);\n      return {\n        complete: false,\n        width: 0,\n        height: 0,\n        src: e && e.url || ''\n      };\n    });\n  },\n\n  ready() {\n    const loader = this;\n    return new Promise(accept => {\n      function poll(value) {\n        if (!loader.pending()) accept(value);else setTimeout(() => {\n          poll(true);\n        }, 10);\n      }\n\n      poll(false);\n    });\n  }\n\n};\n\nfunction boundStroke (bounds, item, miter) {\n  if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n    const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n    bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n  }\n\n  return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n  // TODO: more sophisticated adjustment? Or miter support in boundContext?\n  return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\n\nconst add = (x, y) => bounds.add(x, y);\n\nconst addL = (x, y) => add(lx = x, ly = y);\n\nconst addX = x => add(x, bounds.y1);\n\nconst addY = y => add(bounds.x1, y);\n\nconst px = (x, y) => ma * x + mc * y;\n\nconst py = (x, y) => mb * x + md * y;\n\nconst addp = (x, y) => add(px(x, y), py(x, y));\n\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\n\nfunction boundContext (_, deg) {\n  bounds = _;\n\n  if (deg) {\n    rot = deg * DegToRad;\n    ma = md = Math.cos(rot);\n    mb = Math.sin(rot);\n    mc = -mb;\n  } else {\n    ma = md = 1;\n    rot = mb = mc = 0;\n  }\n\n  return context;\n}\nconst context = {\n  beginPath() {},\n\n  closePath() {},\n\n  moveTo: addpL,\n  lineTo: addpL,\n\n  rect(x, y, w, h) {\n    if (rot) {\n      addp(x + w, y);\n      addp(x + w, y + h);\n      addp(x, y + h);\n      addpL(x, y);\n    } else {\n      add(x + w, y + h);\n      addL(x, y);\n    }\n  },\n\n  quadraticCurveTo(x1, y1, x2, y2) {\n    const px1 = px(x1, y1),\n          py1 = py(x1, y1),\n          px2 = px(x2, y2),\n          py2 = py(x2, y2);\n    quadExtrema(lx, px1, px2, addX);\n    quadExtrema(ly, py1, py2, addY);\n    addL(px2, py2);\n  },\n\n  bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n    const px1 = px(x1, y1),\n          py1 = py(x1, y1),\n          px2 = px(x2, y2),\n          py2 = py(x2, y2),\n          px3 = px(x3, y3),\n          py3 = py(x3, y3);\n    cubicExtrema(lx, px1, px2, px3, addX);\n    cubicExtrema(ly, py1, py2, py3, addY);\n    addL(px3, py3);\n  },\n\n  arc(cx, cy, r, sa, ea, ccw) {\n    sa += rot;\n    ea += rot; // store last point on path\n\n    lx = r * Math.cos(ea) + cx;\n    ly = r * Math.sin(ea) + cy;\n\n    if (Math.abs(ea - sa) > circleThreshold) {\n      // treat as full circle\n      add(cx - r, cy - r);\n      add(cx + r, cy + r);\n    } else {\n      const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n\n      let s, i; // sample end points\n\n      update(sa);\n      update(ea); // sample interior points aligned with 90 degrees\n\n      if (ea !== sa) {\n        sa = sa % Tau;\n        if (sa < 0) sa += Tau;\n        ea = ea % Tau;\n        if (ea < 0) ea += Tau;\n\n        if (ea < sa) {\n          ccw = !ccw; // flip direction\n\n          s = sa;\n          sa = ea;\n          ea = s; // swap end-points\n        }\n\n        if (ccw) {\n          ea -= Tau;\n          s = sa - sa % HalfPi;\n\n          for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n        } else {\n          s = sa - sa % HalfPi + HalfPi;\n\n          for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n        }\n      }\n    }\n  }\n\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n  const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n  if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n  const a = x3 - x0 + 3 * x1 - 3 * x2,\n        b = x0 + x2 - 2 * x1,\n        c = x0 - x1;\n  let t0 = 0,\n      t1 = 0,\n      r; // solve for parameter t\n\n  if (Math.abs(a) > Epsilon) {\n    // quadratic equation\n    r = b * b + c * a;\n\n    if (r >= 0) {\n      r = Math.sqrt(r);\n      t0 = (-b + r) / a;\n      t1 = (-b - r) / a;\n    }\n  } else {\n    // linear equation\n    t0 = 0.5 * c / b;\n  } // calculate position\n\n\n  if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n  if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n  const s = 1 - t,\n        s2 = s * s,\n        t2 = t * t;\n  return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context$1 = (context$1 = canvas(1, 1)) ? context$1.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n  return function (item, brush) {\n    // rely on (inaccurate) bounds intersection if no context\n    if (!context$1) return true; // add path to offscreen graphics context\n\n    draw(context$1, item); // get bounds intersection region\n\n    b.clear().union(item.bounds).intersect(brush).round();\n    const {\n      x1,\n      y1,\n      x2,\n      y2\n    } = b; // iterate over intersection region\n    // perform fine grained inclusion test\n\n    for (let y = y1; y <= y2; ++y) {\n      for (let x = x1; x <= x2; ++x) {\n        if (context$1.isPointInPath(x, y)) {\n          return true;\n        }\n      }\n    } // false if no hits in intersection region\n\n\n    return false;\n  };\n}\nfunction intersectPoint(item, box) {\n  return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        w = item.width || 0,\n        h = item.height || 0;\n  return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        x2 = item.x2 != null ? item.x2 : x,\n        y2 = item.y2 != null ? item.y2 : y;\n  return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n  const {\n    x1,\n    y1,\n    x2,\n    y2\n  } = box,\n        dx = u - x,\n        dy = v - y;\n  let t0 = 0,\n      t1 = 1,\n      p,\n      q,\n      r,\n      e;\n\n  for (e = 0; e < 4; ++e) {\n    if (e === 0) {\n      p = -dx;\n      q = -(x1 - x);\n    }\n\n    if (e === 1) {\n      p = dx;\n      q = x2 - x;\n    }\n\n    if (e === 2) {\n      p = -dy;\n      q = -(y1 - y);\n    }\n\n    if (e === 3) {\n      p = dy;\n      q = y2 - y;\n    }\n\n    if (Math.abs(p) < 1e-10 && q < 0) return false;\n    r = q / p;\n\n    if (p < 0) {\n      if (r > t1) return false;else if (r > t0) t0 = r;\n    } else if (p > 0) {\n      if (r < t0) return false;else if (r < t1) t1 = r;\n    }\n  }\n\n  return true;\n}\n\nfunction blend (context, item) {\n  context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value$1 (value, dflt) {\n  return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n  const n = stops.length;\n\n  for (let i = 0; i < n; ++i) {\n    gradient.addColorStop(stops[i].offset, stops[i].color);\n  }\n\n  return gradient;\n}\n\nfunction gradient (context, spec, bounds) {\n  const w = bounds.width(),\n        h = bounds.height();\n  let gradient;\n\n  if (spec.gradient === 'radial') {\n    gradient = context.createRadialGradient(bounds.x1 + value$1(spec.x1, 0.5) * w, bounds.y1 + value$1(spec.y1, 0.5) * h, Math.max(w, h) * value$1(spec.r1, 0), bounds.x1 + value$1(spec.x2, 0.5) * w, bounds.y1 + value$1(spec.y2, 0.5) * h, Math.max(w, h) * value$1(spec.r2, 0.5));\n  } else {\n    // linear gradient\n    const x1 = value$1(spec.x1, 0),\n          y1 = value$1(spec.y1, 0),\n          x2 = value$1(spec.x2, 1),\n          y2 = value$1(spec.y2, 0);\n\n    if (x1 === x2 || y1 === y2 || w === h) {\n      // axis aligned: use normal gradient\n      gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n    } else {\n      // not axis aligned: render gradient into a pattern (#2365)\n      // this allows us to use normalized bounding box coordinates\n      const image = canvas(Math.ceil(w), Math.ceil(h)),\n            ictx = image.getContext('2d');\n      ictx.scale(w, h);\n      ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n      ictx.fillRect(0, 0, w, h);\n      return context.createPattern(image, 'no-repeat');\n    }\n  }\n\n  return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n  return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n  opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.fillStyle = color(context, item, item.fill);\n    return true;\n  } else {\n    return false;\n  }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n  var lw = (lw = item.strokeWidth) != null ? lw : 1;\n  if (lw <= 0) return false;\n  opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.strokeStyle = color(context, item, item.stroke);\n    context.lineWidth = lw;\n    context.lineCap = item.strokeCap || 'butt';\n    context.lineJoin = item.strokeJoin || 'miter';\n    context.miterLimit = item.strokeMiterLimit || 10;\n\n    if (context.setLineDash) {\n      context.setLineDash(item.strokeDash || Empty);\n      context.lineDashOffset = item.strokeDashOffset || 0;\n    }\n\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction compare(a, b) {\n  return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n  if (!scene.zdirty) return scene.zitems;\n  var items = scene.items,\n      output = [],\n      item,\n      i,\n      n;\n\n  for (i = 0, n = items.length; i < n; ++i) {\n    item = items[i];\n    item.index = i;\n    if (item.zindex) output.push(item);\n  }\n\n  scene.zdirty = false;\n  return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n  var items = scene.items,\n      i,\n      n;\n  if (!items || !items.length) return;\n  const zitems = zorder(scene);\n\n  if (zitems && zitems.length) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      if (!items[i].zindex) visitor(items[i]);\n    }\n\n    items = zitems;\n  }\n\n  for (i = 0, n = items.length; i < n; ++i) {\n    visitor(items[i]);\n  }\n}\nfunction pickVisit(scene, visitor) {\n  var items = scene.items,\n      hit,\n      i;\n  if (!items || !items.length) return null;\n  const zitems = zorder(scene);\n  if (zitems && zitems.length) items = zitems;\n\n  for (i = items.length; --i >= 0;) {\n    if (hit = visitor(items[i])) return hit;\n  }\n\n  if (items === zitems) {\n    for (items = scene.items, i = items.length; --i >= 0;) {\n      if (!items[i].zindex) {\n        if (hit = visitor(items[i])) return hit;\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction drawAll(path) {\n  return function (context, scene, bounds) {\n    visit(scene, item => {\n      if (!bounds || bounds.intersects(item.bounds)) {\n        drawPath(path, context, item, item);\n      }\n    });\n  };\n}\nfunction drawOne(path) {\n  return function (context, scene, bounds) {\n    if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n      drawPath(path, context, scene.items[0], scene.items);\n    }\n  };\n}\n\nfunction drawPath(path, context, item, items) {\n  var opacity = item.opacity == null ? 1 : item.opacity;\n  if (opacity === 0) return;\n  if (path(context, items)) return;\n  blend(context, item);\n\n  if (item.fill && fill(context, item, opacity)) {\n    context.fill();\n  }\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    context.stroke();\n  }\n}\n\nfunction pick(test) {\n  test = test || truthy;\n  return function (context, scene, x, y, gx, gy) {\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n    return pickVisit(scene, item => {\n      const b = item.bounds; // first hit test against bounding box\n\n      if (b && !b.contains(gx, gy) || !b) return; // if in bounding box, perform more careful test\n\n      if (test(context, item, x, y, gx, gy)) return item;\n    });\n  };\n}\nfunction hitPath(path, filled) {\n  return function (context, o, x, y) {\n    var item = Array.isArray(o) ? o[0] : o,\n        fill = filled == null ? item.fill : filled,\n        stroke = item.stroke && context.isPointInStroke,\n        lw,\n        lc;\n\n    if (stroke) {\n      lw = item.strokeWidth;\n      lc = item.strokeCap;\n      context.lineWidth = lw != null ? lw : 1;\n      context.lineCap = lc != null ? lc : 'butt';\n    }\n\n    return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n  };\n}\nfunction pickPath(path) {\n  return pick(hitPath(path));\n}\n\nfunction translate(x, y) {\n  return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n  return 'rotate(' + a + ')';\n}\nfunction scale$1(scaleX, scaleY) {\n  return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n  return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n  return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n  return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale$1(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n  function attr(emit, item) {\n    emit('transform', rotateItem(item));\n    emit('d', shape(null, item));\n  }\n\n  function bound(bounds, item) {\n    shape(boundContext(bounds, item.angle), item);\n    return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n  }\n\n  function draw(context, item) {\n    var x = item.x || 0,\n        y = item.y || 0,\n        a = item.angle || 0;\n    context.translate(x, y);\n    if (a) context.rotate(a *= DegToRad);\n    context.beginPath();\n    shape(context, item);\n    if (a) context.rotate(-a);\n    context.translate(-x, -y);\n  }\n\n  return {\n    type: type,\n    tag: 'path',\n    nested: false,\n    attr: attr,\n    bound: bound,\n    draw: drawAll(draw),\n    pick: pickPath(draw),\n    isect: isect || intersectPath(draw)\n  };\n}\n\nvar arc$1 = markItemPath('arc', arc);\n\nfunction pickArea(a, p) {\n  var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n      z = a[0].orient === 'horizontal' ? 'y' : 'x',\n      i = a.length,\n      min = +Infinity,\n      hit,\n      d;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    d = Math.abs(a[i][z] - v);\n\n    if (d < min) {\n      min = d;\n      hit = a[i];\n    }\n  }\n\n  return hit;\n}\nfunction pickLine(a, p) {\n  var t = Math.pow(a[0].strokeWidth || 1, 2),\n      i = a.length,\n      dx,\n      dy,\n      dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    if (dd < t) return a[i];\n  }\n\n  return null;\n}\nfunction pickTrail(a, p) {\n  var i = a.length,\n      dx,\n      dy,\n      dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    dx = a[i].size || 1;\n    if (dd < dx * dx) return a[i];\n  }\n\n  return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n  function attr(emit, item) {\n    var items = item.mark.items;\n    if (items.length) emit('d', shape(null, items));\n  }\n\n  function bound(bounds, mark) {\n    var items = mark.items;\n\n    if (items.length === 0) {\n      return bounds;\n    } else {\n      shape(boundContext(bounds), items);\n      return boundStroke(bounds, items[0]);\n    }\n  }\n\n  function draw(context, items) {\n    context.beginPath();\n    shape(context, items);\n  }\n\n  const hit = hitPath(draw);\n\n  function pick(context, scene, x, y, gx, gy) {\n    var items = scene.items,\n        b = scene.bounds;\n\n    if (!items || !items.length || b && !b.contains(gx, gy)) {\n      return null;\n    }\n\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n    return hit(context, items, x, y) ? items[0] : null;\n  }\n\n  return {\n    type: type,\n    tag: 'path',\n    nested: true,\n    attr: attr,\n    bound: bound,\n    draw: drawOne(draw),\n    pick: pick,\n    isect: intersectPoint,\n    tip: tip\n  };\n}\n\nvar area$1 = markMultiItemPath('area', area, pickArea);\n\nfunction clip$1 (context, scene) {\n  var clip = scene.clip;\n  context.save();\n\n  if (isFunction(clip)) {\n    context.beginPath();\n    clip(context);\n    context.clip();\n  } else {\n    clipGroup(context, scene.group);\n  }\n}\nfunction clipGroup(context, group) {\n  context.beginPath();\n  hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n  context.clip();\n}\n\nfunction offset(item) {\n  const sw = value$1(item.strokeWidth, 1);\n  return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\n\nfunction attr(emit, item) {\n  emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n  const off = offset(item);\n  emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n  emit('class', 'background');\n  emit('aria-hidden', true);\n  emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n  emit('class', 'foreground');\n  emit('aria-hidden', true);\n\n  if (item.strokeForeground) {\n    emitRectangle(emit, item);\n  } else {\n    emit('d', '');\n  }\n}\n\nfunction content(emit, item, renderer) {\n  const url = item.clip ? clip(renderer, item, item) : null;\n  emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n  if (!group.clip && group.items) {\n    const items = group.items,\n          m = items.length;\n\n    for (let j = 0; j < m; ++j) {\n      bounds.union(items[j].bounds);\n    }\n  }\n\n  if ((group.clip || group.width || group.height) && !group.noBound) {\n    bounds.add(0, 0).add(group.width || 0, group.height || 0);\n  }\n\n  boundStroke(bounds, group);\n  return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n  const off = offset(group);\n  context.beginPath();\n  rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\n\nfunction draw(context, scene, bounds) {\n  visit(scene, group => {\n    const gx = group.x || 0,\n          gy = group.y || 0,\n          fore = group.strokeForeground,\n          opacity = group.opacity == null ? 1 : group.opacity; // draw group background\n\n    if ((group.stroke || group.fill) && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n\n      if (group.fill && fill(context, group, opacity)) {\n        context.fill();\n      }\n\n      if (group.stroke && !fore && stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    } // setup graphics context, set clip and bounds\n\n\n    context.save();\n    context.translate(gx, gy);\n    if (group.clip) clipGroup(context, group);\n    if (bounds) bounds.translate(-gx, -gy); // draw group contents\n\n    visit(group, item => {\n      this.draw(context, item, bounds);\n    }); // restore graphics context\n\n    if (bounds) bounds.translate(gx, gy);\n    context.restore(); // draw group foreground\n\n    if (fore && group.stroke && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n\n      if (stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    }\n  });\n}\n\nfunction pick$1(context, scene, x, y, gx, gy) {\n  if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n    return null;\n  }\n\n  const cx = x * context.pixelRatio,\n        cy = y * context.pixelRatio;\n  return pickVisit(scene, group => {\n    let hit, dx, dy; // first hit test bounding box\n\n    const b = group.bounds;\n    if (b && !b.contains(gx, gy)) return; // passed bounds check, test rectangular clip\n\n    dx = group.x || 0;\n    dy = group.y || 0;\n    const dw = dx + (group.width || 0),\n          dh = dy + (group.height || 0),\n          c = group.clip;\n    if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return; // adjust coordinate system\n\n    context.save();\n    context.translate(dx, dy);\n    dx = gx - dx;\n    dy = gy - dy; // test background for rounded corner clip\n\n    if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n      context.restore();\n      return null;\n    }\n\n    const fore = group.strokeForeground,\n          ix = scene.interactive !== false; // hit test against group foreground\n\n    if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n      context.restore();\n      return group;\n    } // hit test against contained marks\n\n\n    hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null); // hit test against group background\n\n    if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n      hit = group;\n    } // restore state and return\n\n\n    context.restore();\n    return hit || null;\n  });\n}\n\nfunction pickMark(mark, x, y) {\n  return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n  type: 'group',\n  tag: 'g',\n  nested: false,\n  attr: attr,\n  bound: bound,\n  draw: draw,\n  pick: pick$1,\n  isect: intersectRect,\n  content: content,\n  background: background,\n  foreground: foreground\n};\n\nvar metadata = {\n  'xmlns': 'http://www.w3.org/2000/svg',\n  'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n  'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n  var image = item.image;\n\n  if (!image || item.url && item.url !== image.url) {\n    image = {\n      complete: false,\n      width: 0,\n      height: 0\n    };\n    renderer.loadImage(item.url).then(image => {\n      item.image = image;\n      item.image.url = item.url;\n    });\n  }\n\n  return image;\n}\n\nfunction imageWidth(item, image) {\n  return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\n\nfunction imageHeight(item, image) {\n  return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\n\nfunction imageXOffset(align, w) {\n  return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n  return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$1(emit, item, renderer) {\n  const img = getImage(item, renderer),\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n  emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n  emit('transform', translate(x, y));\n  emit('width', w);\n  emit('height', h);\n  emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound$1(bounds, item) {\n  const img = item.image,\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h);\n  return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$1(context, scene, bounds) {\n  visit(scene, item => {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n    const img = getImage(item, this);\n    let w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        opacity,\n        ar0,\n        ar1,\n        t;\n\n    if (item.aspect !== false) {\n      ar0 = img.width / img.height;\n      ar1 = item.width / item.height;\n\n      if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n        if (ar1 < ar0) {\n          t = w / ar0;\n          y += (h - t) / 2;\n          h = t;\n        } else {\n          t = h * ar0;\n          x += (w - t) / 2;\n          w = t;\n        }\n      }\n    }\n\n    if (img.complete || img.toDataURL) {\n      blend(context, item);\n      context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n      context.imageSmoothingEnabled = item.smooth !== false;\n      context.drawImage(img, x, y, w, h);\n    }\n  });\n}\n\nvar image = {\n  type: 'image',\n  tag: 'image',\n  nested: false,\n  attr: attr$1,\n  bound: bound$1,\n  draw: draw$1,\n  pick: pick(),\n  isect: truthy,\n  // bounds check is sufficient\n  get: getImage,\n  xOffset: imageXOffset,\n  yOffset: imageYOffset\n};\n\nvar line$1 = markMultiItemPath('line', line, pickLine);\n\nfunction attr$2(emit, item) {\n  var sx = item.scaleX || 1,\n      sy = item.scaleY || 1;\n\n  if (sx !== 1 || sy !== 1) {\n    emit('vector-effect', 'non-scaling-stroke');\n  }\n\n  emit('transform', transformItem(item));\n  emit('d', item.path);\n}\n\nfunction path(context, item) {\n  var path = item.path;\n  if (path == null) return true;\n  var x = item.x || 0,\n      y = item.y || 0,\n      sx = item.scaleX || 1,\n      sy = item.scaleY || 1,\n      a = (item.angle || 0) * DegToRad,\n      cache = item.pathCache;\n\n  if (!cache || cache.path !== path) {\n    (item.pathCache = cache = pathParse(path)).path = path;\n  }\n\n  if (a && context.rotate && context.translate) {\n    context.translate(x, y);\n    context.rotate(a);\n    pathRender(context, cache, 0, 0, sx, sy);\n    context.rotate(-a);\n    context.translate(-x, -y);\n  } else {\n    pathRender(context, cache, x, y, sx, sy);\n  }\n}\n\nfunction bound$2(bounds, item) {\n  return path(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\n\nvar path$1 = {\n  type: 'path',\n  tag: 'path',\n  nested: false,\n  attr: attr$2,\n  bound: bound$2,\n  draw: drawAll(path),\n  pick: pickPath(path),\n  isect: intersectPath(path)\n};\n\nfunction attr$3(emit, item) {\n  emit('d', rectangle(null, item));\n}\n\nfunction bound$3(bounds, item) {\n  var x, y;\n  return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\n\nfunction draw$2(context, item) {\n  context.beginPath();\n  rectangle(context, item);\n}\n\nvar rect = {\n  type: 'rect',\n  tag: 'path',\n  nested: false,\n  attr: attr$3,\n  bound: bound$3,\n  draw: drawAll(draw$2),\n  pick: pickPath(draw$2),\n  isect: intersectRect\n};\n\nfunction attr$4(emit, item) {\n  emit('transform', translateItem(item));\n  emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n  emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound$4(bounds, item) {\n  var x1, y1;\n  return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\n\nfunction path$2(context, item, opacity) {\n  var x1, y1, x2, y2;\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    x1 = item.x || 0;\n    y1 = item.y || 0;\n    x2 = item.x2 != null ? item.x2 : x1;\n    y2 = item.y2 != null ? item.y2 : y1;\n    context.beginPath();\n    context.moveTo(x1, y1);\n    context.lineTo(x2, y2);\n    return true;\n  }\n\n  return false;\n}\n\nfunction draw$3(context, scene, bounds) {\n  visit(scene, item => {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n    var opacity = item.opacity == null ? 1 : item.opacity;\n\n    if (opacity && path$2(context, item, opacity)) {\n      blend(context, item);\n      context.stroke();\n    }\n  });\n}\n\nfunction hit(context, item, x, y) {\n  if (!context.isPointInStroke) return false;\n  return path$2(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n  type: 'rule',\n  tag: 'line',\n  nested: false,\n  attr: attr$4,\n  bound: bound$4,\n  draw: draw$3,\n  pick: pick(hit),\n  isect: intersectRule\n};\n\nvar shape$1 = markItemPath('shape', shape);\n\nvar symbol$1 = markItemPath('symbol', symbol, intersectPoint);\n\nconst widthCache = lruCache();\nvar textMetrics = {\n  height: fontSize,\n  measureWidth: measureWidth,\n  estimateWidth: estimateWidth,\n  width: estimateWidth,\n  canvas: useCanvas\n};\nuseCanvas(true);\n\nfunction useCanvas(use) {\n  textMetrics.width = use && context$1 ? measureWidth : estimateWidth;\n} // make dumb, simple estimate if no canvas is available\n\n\nfunction estimateWidth(item, text) {\n  return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n  return ~~(0.8 * text.length * currentFontHeight);\n} // measure text width if canvas is available\n\n\nfunction measureWidth(item, text) {\n  return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n  const key = \"(\".concat(currentFont, \") \").concat(text);\n  let width = widthCache.get(key);\n\n  if (width === undefined) {\n    context$1.font = currentFont;\n    width = context$1.measureText(text).width;\n    widthCache.set(key, width);\n  }\n\n  return width;\n}\n\nfunction fontSize(item) {\n  return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n  return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction lineArray(_) {\n  return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nfunction textLines(item) {\n  return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n  const tl = textLines(item);\n  return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n  const text = line == null ? '' : (line + '').trim();\n  return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n  if (textMetrics.width === measureWidth) {\n    // we are using canvas\n    const currentFont = font(item);\n    return text => _measureWidth(text, currentFont);\n  } else {\n    // we are relying on estimates\n    const currentFontHeight = fontSize(item);\n    return text => _estimateWidth(text, currentFontHeight);\n  }\n}\n\nfunction truncate(item, text) {\n  var limit = +item.limit,\n      width = widthGetter(item);\n  if (width(text) < limit) return text;\n  var ellipsis = item.ellipsis || '\\u2026',\n      rtl = item.dir === 'rtl',\n      lo = 0,\n      hi = text.length,\n      mid;\n  limit -= width(ellipsis);\n\n  if (rtl) {\n    while (lo < hi) {\n      mid = lo + hi >>> 1;\n      if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n    }\n\n    return ellipsis + text.slice(lo);\n  } else {\n    while (lo < hi) {\n      mid = 1 + (lo + hi >>> 1);\n      if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n    }\n\n    return text.slice(0, lo) + ellipsis;\n  }\n}\n\nfunction fontFamily(item, quote) {\n  var font = item.font;\n  return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n  return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset$1(item) {\n  // perform our own font baseline calculation\n  // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n  // this also ensures consistent layout across renderers\n  var baseline = item.baseline,\n      h = fontSize(item);\n  return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n  'left': 'start',\n  'center': 'middle',\n  'right': 'end'\n};\nconst tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n  var x = item.x || 0,\n      y = item.y || 0,\n      r = item.radius || 0,\n      t;\n\n  if (r) {\n    t = (item.theta || 0) - HalfPi;\n    x += r * Math.cos(t);\n    y += r * Math.sin(t);\n  }\n\n  tempBounds.x1 = x;\n  tempBounds.y1 = y;\n  return tempBounds;\n}\n\nfunction attr$5(emit, item) {\n  var dx = item.dx || 0,\n      dy = (item.dy || 0) + offset$1(item),\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      a = item.angle || 0,\n      t;\n  emit('text-anchor', textAlign[item.align] || 'start');\n\n  if (a) {\n    t = translate(x, y) + ' ' + rotate(a);\n    if (dx || dy) t += ' ' + translate(dx, dy);\n  } else {\n    t = translate(x + dx, y + dy);\n  }\n\n  emit('transform', t);\n}\n\nfunction bound$5(bounds, item, mode) {\n  var h = textMetrics.height(item),\n      a = item.align,\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      dx = item.dx || 0,\n      dy = (item.dy || 0) + offset$1(item) - Math.round(0.8 * h),\n      // use 4/5 offset\n  tl = textLines(item),\n      w; // get dimensions\n\n  if (isArray(tl)) {\n    // multi-line text\n    h += lineHeight(item) * (tl.length - 1);\n    w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n  } else {\n    // single-line text\n    w = textMetrics.width(item, tl);\n  } // horizontal alignment\n\n\n  if (a === 'center') {\n    dx -= w / 2;\n  } else if (a === 'right') {\n    dx -= w;\n  } else ;\n\n  bounds.set(dx += x, dy += y, dx + w, dy + h);\n\n  if (item.angle && !mode) {\n    bounds.rotate(item.angle * DegToRad, x, y);\n  } else if (mode === 2) {\n    return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n  }\n\n  return bounds;\n}\n\nfunction draw$4(context, scene, bounds) {\n  visit(scene, item => {\n    var opacity = item.opacity == null ? 1 : item.opacity,\n        p,\n        x,\n        y,\n        i,\n        lh,\n        tl,\n        str;\n    if (bounds && !bounds.intersects(item.bounds) || // bounds check\n    opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n    context.font = font(item);\n    context.textAlign = item.align || 'left';\n    p = anchorPoint(item);\n    x = p.x1, y = p.y1;\n\n    if (item.angle) {\n      context.save();\n      context.translate(x, y);\n      context.rotate(item.angle * DegToRad);\n      x = y = 0; // reset x, y\n    }\n\n    x += item.dx || 0;\n    y += (item.dy || 0) + offset$1(item);\n    tl = textLines(item);\n    blend(context, item);\n\n    if (isArray(tl)) {\n      lh = lineHeight(item);\n\n      for (i = 0; i < tl.length; ++i) {\n        str = textValue(item, tl[i]);\n\n        if (item.fill && fill(context, item, opacity)) {\n          context.fillText(str, x, y);\n        }\n\n        if (item.stroke && stroke(context, item, opacity)) {\n          context.strokeText(str, x, y);\n        }\n\n        y += lh;\n      }\n    } else {\n      str = textValue(item, tl);\n\n      if (item.fill && fill(context, item, opacity)) {\n        context.fillText(str, x, y);\n      }\n\n      if (item.stroke && stroke(context, item, opacity)) {\n        context.strokeText(str, x, y);\n      }\n    }\n\n    if (item.angle) context.restore();\n  });\n}\n\nfunction hit$1(context, item, x, y, gx, gy) {\n  if (item.fontSize <= 0) return false;\n  if (!item.angle) return true; // bounds sufficient if no rotation\n  // project point into space of unrotated bounds\n\n  var p = anchorPoint(item),\n      ax = p.x1,\n      ay = p.y1,\n      b = bound$5(tempBounds, item, 1),\n      a = -item.angle * DegToRad,\n      cos = Math.cos(a),\n      sin = Math.sin(a),\n      px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n      py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n  return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n  const p = bound$5(tempBounds, item, 2);\n  return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nvar text = {\n  type: 'text',\n  tag: 'text',\n  nested: false,\n  attr: attr$5,\n  bound: bound$5,\n  draw: draw$4,\n  pick: pick(hit$1),\n  isect: intersectText\n};\n\nvar trail$1 = markMultiItemPath('trail', trail, pickTrail);\n\nvar Marks = {\n  arc: arc$1,\n  area: area$1,\n  group: group,\n  image: image,\n  line: line$1,\n  path: path$1,\n  rect: rect,\n  rule: rule,\n  shape: shape$1,\n  symbol: symbol$1,\n  text: text,\n  trail: trail$1\n};\n\nfunction boundItem (item, func, opt) {\n  var type = Marks[item.mark.marktype],\n      bound = func || type.bound;\n  if (type.nested) item = item.mark;\n  return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n  mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n  var type = Marks[mark.marktype],\n      bound = type.bound,\n      items = mark.items,\n      hasItems = items && items.length,\n      i,\n      n,\n      item,\n      b;\n\n  if (type.nested) {\n    if (hasItems) {\n      item = items[0];\n    } else {\n      // no items, fake it\n      DUMMY.mark = mark;\n      item = DUMMY;\n    }\n\n    b = boundItem(item, bound, opt);\n    bounds = bounds && bounds.union(b) || b;\n    return bounds;\n  }\n\n  bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n\n  if (hasItems) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      bounds.union(boundItem(items[i], bound, opt));\n    }\n  }\n\n  return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout\n'fill', 'fillOpacity', 'opacity', 'blend', // fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke\n'strokeDash', 'strokeDashOffset', // stroke dash\n'strokeForeground', 'strokeOffset', // group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc\n'cornerRadius', 'padAngle', // arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line\n'url', 'aspect', 'smooth', // image\n'path', 'scaleX', 'scaleY', // path\n'x2', 'y2', // rule\n'size', 'shape', // symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n  return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n  const scene = typeof json === 'string' ? JSON.parse(json) : json;\n  return initialize(scene);\n}\n\nfunction initialize(scene) {\n  var type = scene.marktype,\n      items = scene.items,\n      parent,\n      i,\n      n;\n\n  if (items) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      parent = type ? 'mark' : 'group';\n      items[i][parent] = scene;\n      if (items[i].zindex) items[i][parent].zdirty = true;\n      if ('group' === (type || parent)) initialize(items[i]);\n    }\n  }\n\n  if (type) boundMark(scene);\n  return scene;\n}\n\nfunction Scenegraph(scene) {\n  if (arguments.length) {\n    this.root = sceneFromJSON(scene);\n  } else {\n    this.root = createMark({\n      marktype: 'group',\n      name: 'root',\n      role: 'frame'\n    });\n    this.root.items = [new GroupItem(this.root)];\n  }\n}\nScenegraph.prototype = {\n  toJSON(indent) {\n    return sceneToJSON(this.root, indent || 0);\n  },\n\n  mark(markdef, group, index) {\n    group = group || this.root.items[0];\n    const mark = createMark(markdef, group);\n    group.items[index] = mark;\n    if (mark.zindex) mark.group.zdirty = true;\n    return mark;\n  }\n\n};\n\nfunction createMark(def, group) {\n  const mark = {\n    bounds: new Bounds(),\n    clip: !!def.clip,\n    group: group,\n    interactive: def.interactive === false ? false : true,\n    items: [],\n    marktype: def.marktype,\n    name: def.name || undefined,\n    role: def.role || undefined,\n    zindex: def.zindex || 0\n  }; // add accessibility properties if defined\n\n  if (def.aria != null) {\n    mark.aria = def.aria;\n  }\n\n  if (def.description) {\n    mark.description = def.description;\n  }\n\n  return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n  if (!doc && typeof document !== 'undefined' && document.createElement) {\n    doc = document;\n  }\n\n  return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n} // find first child element with matching tag\n\nfunction domFind(el, tag) {\n  tag = tag.toLowerCase();\n  var nodes = el.childNodes,\n      i = 0,\n      n = nodes.length;\n\n  for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n    return nodes[i];\n  }\n} // retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\n\nfunction domChild(el, index, tag, ns) {\n  var a = el.childNodes[index],\n      b;\n\n  if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n    b = a || null;\n    a = domCreate(el.ownerDocument, tag, ns);\n    el.insertBefore(a, b);\n  }\n\n  return a;\n} // remove all child elements at or above the given index\n\nfunction domClear(el, index) {\n  var nodes = el.childNodes,\n      curr = nodes.length;\n\n  while (curr > index) el.removeChild(nodes[--curr]);\n\n  return el;\n} // generate css class name for mark\n\nfunction cssClass(mark) {\n  return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n  const rect = el.getBoundingClientRect();\n  return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n  var mark = item && item.mark,\n      mdef,\n      p;\n\n  if (mark && (mdef = Marks[mark.marktype]).tip) {\n    p = point(event, el);\n    p[0] -= origin[0];\n    p[1] -= origin[1];\n\n    while (item = item.mark.group) {\n      p[0] -= item.x || 0;\n      p[1] -= item.y || 0;\n    }\n\n    item = mdef.tip(mark.items, p);\n  }\n\n  return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n *   href URL sanitization. If not specified, a standard loader\n *   instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n *   function for custom tooltip display.\n * @constructor\n */\n\nfunction Handler(customLoader, customTooltip) {\n  this._active = null;\n  this._handlers = {};\n  this._loader = customLoader || loader();\n  this._tooltip = customTooltip || defaultTooltip;\n} // The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\n\nfunction defaultTooltip(handler, event, item, value) {\n  handler.element().setAttribute('title', value || '');\n}\n\nHandler.prototype = {\n  /**\n   * Initialize a new Handler instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {object} [obj] - Optional context object that should serve as\n   *   the \"this\" context for event callbacks.\n   * @return {Handler} - This handler instance.\n   */\n  initialize(el, origin, obj) {\n    this._el = el;\n    this._obj = obj || null;\n    return this.origin(origin);\n  },\n\n  /**\n   * Returns the parent container element for a visualization.\n   * @return {DOMElement} - The containing DOM element.\n   */\n  element() {\n    return this._el;\n  },\n\n  /**\n   * Returns the scene element (e.g., canvas or SVG) of the visualization\n   * Subclasses must override if the first child is not the scene element.\n   * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n   */\n  canvas() {\n    return this._el && this._el.firstChild;\n  },\n\n  /**\n   * Get / set the origin coordinates of the visualization.\n   */\n  origin(origin) {\n    if (arguments.length) {\n      this._origin = origin || [0, 0];\n      return this;\n    } else {\n      return this._origin.slice();\n    }\n  },\n\n  /**\n   * Get / set the scenegraph root.\n   */\n  scene(scene) {\n    if (!arguments.length) return this._scene;\n    this._scene = scene;\n    return this;\n  },\n\n  /**\n   * Add an event handler. Subclasses should override this method.\n   */\n  on()\n  /*type, handler*/\n  {},\n\n  /**\n   * Remove an event handler. Subclasses should override this method.\n   */\n  off()\n  /*type, handler*/\n  {},\n\n  /**\n   * Utility method for finding the array index of an event handler.\n   * @param {Array} h - An array of registered event handlers.\n   * @param {string} type - The event type.\n   * @param {function} handler - The event handler instance to find.\n   * @return {number} - The handler's array index or -1 if not registered.\n   */\n  _handlerIndex(h, type, handler) {\n    for (let i = h ? h.length : 0; --i >= 0;) {\n      if (h[i].type === type && (!handler || h[i].handler === handler)) {\n        return i;\n      }\n    }\n\n    return -1;\n  },\n\n  /**\n   * Returns an array with registered event handlers.\n   * @param {string} [type] - The event type to query. Any annotations\n   *   are ignored; for example, for the argument \"click.foo\", \".foo\" will\n   *   be ignored and the method returns all \"click\" handlers. If type is\n   *   null or unspecified, this method returns handlers for all types.\n   * @return {Array} - A new array containing all registered event handlers.\n   */\n  handlers(type) {\n    const h = this._handlers,\n          a = [];\n\n    if (type) {\n      a.push(...h[this.eventName(type)]);\n    } else {\n      for (const k in h) {\n        a.push(...h[k]);\n      }\n    }\n\n    return a;\n  },\n\n  /**\n   * Parses an event name string to return the specific event type.\n   * For example, given \"click.foo\" returns \"click\"\n   * @param {string} name - The input event type string.\n   * @return {string} - A string with the event type only.\n   */\n  eventName(name) {\n    const i = name.indexOf('.');\n    return i < 0 ? name : name.slice(0, i);\n  },\n\n  /**\n   * Handle hyperlink navigation in response to an item.href value.\n   * @param {Event} event - The event triggering hyperlink navigation.\n   * @param {Item} item - The scenegraph item.\n   * @param {string} href - The URL to navigate to.\n   */\n  handleHref(event, item, href) {\n    this._loader.sanitize(href, {\n      context: 'href'\n    }).then(opt => {\n      const e = new MouseEvent(event.type, event),\n            a = domCreate(null, 'a');\n\n      for (const name in opt) a.setAttribute(name, opt[name]);\n\n      a.dispatchEvent(e);\n    }).catch(() => {\n      /* do nothing */\n    });\n  },\n\n  /**\n   * Handle tooltip display in response to an item.tooltip value.\n   * @param {Event} event - The event triggering tooltip display.\n   * @param {Item} item - The scenegraph item.\n   * @param {boolean} show - A boolean flag indicating whether\n   *   to show or hide a tooltip for the given item.\n   */\n  handleTooltip(event, item, show) {\n    if (item && item.tooltip != null) {\n      item = resolveItem(item, event, this.canvas(), this._origin);\n      const value = show && item && item.tooltip || null;\n\n      this._tooltip.call(this._obj, this, event, item, value);\n    }\n  },\n\n  /**\n   * Returns the size of a scenegraph item and its position relative\n   * to the viewport.\n   * @param {Item} item - The scenegraph item.\n   * @return {object} - A bounding box object (compatible with the\n   *   DOMRect type) consisting of x, y, width, heigh, top, left,\n   *   right, and bottom properties.\n   */\n  getItemBoundingClientRect(item) {\n    const el = this.canvas();\n    if (!el) return;\n    const rect = el.getBoundingClientRect(),\n          origin = this._origin,\n          bounds = item.bounds,\n          width = bounds.width(),\n          height = bounds.height();\n    let x = bounds.x1 + origin[0] + rect.left,\n        y = bounds.y1 + origin[1] + rect.top; // translate coordinate for each parent group\n\n    while (item.mark && (item = item.mark.group)) {\n      x += item.x || 0;\n      y += item.y || 0;\n    } // return DOMRect-compatible bounding box\n\n\n    return {\n      x,\n      y,\n      width,\n      height,\n      left: x,\n      top: y,\n      right: x + width,\n      bottom: y + height\n    };\n  }\n\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n *   image and href URL sanitization. If not specified, a\n *   standard loader instance will be generated.\n * @constructor\n */\n\nfunction Renderer(loader) {\n  this._el = null;\n  this._bgcolor = null;\n  this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n  /**\n   * Initialize a new Renderer instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {number} width - The coordinate width of the display, in pixels.\n   * @param {number} height - The coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {Renderer} - This renderer instance.\n   */\n  initialize(el, width, height, origin, scaleFactor) {\n    this._el = el;\n    return this.resize(width, height, origin, scaleFactor);\n  },\n\n  /**\n   * Returns the parent container element for a visualization.\n   * @return {DOMElement} - The containing DOM element.\n   */\n  element() {\n    return this._el;\n  },\n\n  /**\n   * Returns the scene element (e.g., canvas or SVG) of the visualization\n   * Subclasses must override if the first child is not the scene element.\n   * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n   */\n  canvas() {\n    return this._el && this._el.firstChild;\n  },\n\n  /**\n   * Get / set the background color.\n   */\n  background(bgcolor) {\n    if (arguments.length === 0) return this._bgcolor;\n    this._bgcolor = bgcolor;\n    return this;\n  },\n\n  /**\n   * Resize the display.\n   * @param {number} width - The new coordinate width of the display, in pixels.\n   * @param {number} height - The new coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The new origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {Renderer} - This renderer instance;\n   */\n  resize(width, height, origin, scaleFactor) {\n    this._width = width;\n    this._height = height;\n    this._origin = origin || [0, 0];\n    this._scale = scaleFactor || 1;\n    return this;\n  },\n\n  /**\n   * Report a dirty item whose bounds should be redrawn.\n   * This base class method does nothing. Subclasses that perform\n   * incremental should implement this method.\n   * @param {Item} item - The dirty item whose bounds should be redrawn.\n   */\n  dirty()\n  /*item*/\n  {},\n\n  /**\n   * Render an input scenegraph, potentially with a set of dirty items.\n   * This method will perform an immediate rendering with available resources.\n   * The renderer may also need to perform image loading to perform a complete\n   * render. This process can lead to asynchronous re-rendering of the scene\n   * after this method returns. To receive notification when rendering is\n   * complete, use the renderAsync method instead.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   * @return {Renderer} - This renderer instance.\n   */\n  render(scene) {\n    const r = this; // bind arguments into a render call, and cache it\n    // this function may be subsequently called for async redraw\n\n    r._call = function () {\n      r._render(scene);\n    }; // invoke the renderer\n\n\n    r._call(); // clear the cached call for garbage collection\n    // async redraws will stash their own copy\n\n\n    r._call = null;\n    return r;\n  },\n\n  /**\n   * Internal rendering method. Renderer subclasses should override this\n   * method to actually perform rendering.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render()\n  /*scene*/\n  {// subclasses to override\n  },\n\n  /**\n   * Asynchronous rendering method. Similar to render, but returns a Promise\n   * that resolves when all rendering is completed. Sometimes a renderer must\n   * perform image loading to get a complete rendering. The returned\n   * Promise will not resolve until this process completes.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   * @return {Promise} - A Promise that resolves when rendering is complete.\n   */\n  renderAsync(scene) {\n    const r = this.render(scene);\n    return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n  },\n\n  /**\n   * Internal method for asynchronous resource loading.\n   * Proxies method calls to the ImageLoader, and tracks loading\n   * progress to invoke a re-render once complete.\n   * @param {string} method - The method name to invoke on the ImageLoader.\n   * @param {string} uri - The URI for the requested resource.\n   * @return {Promise} - A Promise that resolves to the requested resource.\n   */\n  _load(method, uri) {\n    var r = this,\n        p = r._loader[method](uri);\n\n    if (!r._ready) {\n      // re-render the scene when loading completes\n      const call = r._call;\n      r._ready = r._loader.ready().then(redraw => {\n        if (redraw) call();\n        r._ready = null;\n      });\n    }\n\n    return p;\n  },\n\n  /**\n   * Sanitize a URL to include as a hyperlink in the rendered scene.\n   * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n   * image loading progress and invokes a re-render once complete.\n   * @param {string} uri - The URI string to sanitize.\n   * @return {Promise} - A Promise that resolves to the sanitized URL.\n   */\n  sanitizeURL(uri) {\n    return this._load('sanitizeURL', uri);\n  },\n\n  /**\n   * Requests an image to include in the rendered scene.\n   * This method proxies a call to ImageLoader.loadImage, but also tracks\n   * image loading progress and invokes a re-render once complete.\n   * @param {string} uri - The URI string of the image.\n   * @return {Promise} - A Promise that resolves to the loaded Image.\n   */\n  loadImage(uri) {\n    return this._load('loadImage', uri);\n  }\n\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  this._down = null;\n  this._touch = null;\n  this._first = true;\n  this._events = {};\n}\n\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type]; // lazily add listeners to the canvas as needed\n\n\nfunction eventListenerCheck(handler, type) {\n  eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n  const canvas = handler.canvas();\n\n  if (canvas && !handler._events[type]) {\n    handler._events[type] = 1;\n    canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n  }\n}\n\nfunction move(moveEvent, overEvent, outEvent) {\n  return function (evt) {\n    const a = this._active,\n          p = this.pickEvent(evt);\n\n    if (p === a) {\n      // active item and picked item are the same\n      this.fire(moveEvent, evt); // fire move\n    } else {\n      // active item and picked item are different\n      if (!a || !a.exit) {\n        // fire out for prior active item\n        // suppress if active item was removed from scene\n        this.fire(outEvent, evt);\n      }\n\n      this._active = p; // set new active item\n\n      this.fire(overEvent, evt); // fire over for new active item\n\n      this.fire(moveEvent, evt); // fire move for new active item\n    }\n  };\n}\n\nfunction inactive(type) {\n  return function (evt) {\n    this.fire(type, evt);\n    this._active = null;\n  };\n}\n\ninherits(CanvasHandler, Handler, {\n  initialize(el, origin, obj) {\n    this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management\n\n    [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n    return Handler.prototype.initialize.call(this, el, origin, obj);\n  },\n\n  // return the backing canvas instance\n  canvas() {\n    return this._canvas;\n  },\n\n  // retrieve the current canvas context\n  context() {\n    return this._canvas.getContext('2d');\n  },\n\n  // supported events\n  events: Events,\n\n  // to keep old versions of firefox happy\n  DOMMouseScroll(evt) {\n    this.fire(MouseWheelEvent, evt);\n  },\n\n  mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n  dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n  mouseout: inactive(MouseOutEvent),\n  dragleave: inactive(DragLeaveEvent),\n\n  mousedown(evt) {\n    this._down = this._active;\n    this.fire(MouseDownEvent, evt);\n  },\n\n  click(evt) {\n    if (this._down === this._active) {\n      this.fire(ClickEvent, evt);\n      this._down = null;\n    }\n  },\n\n  touchstart(evt) {\n    this._touch = this.pickEvent(evt.changedTouches[0]);\n\n    if (this._first) {\n      this._active = this._touch;\n      this._first = false;\n    }\n\n    this.fire(TouchStartEvent, evt, true);\n  },\n\n  touchmove(evt) {\n    this.fire(TouchMoveEvent, evt, true);\n  },\n\n  touchend(evt) {\n    this.fire(TouchEndEvent, evt, true);\n    this._touch = null;\n  },\n\n  // fire an event\n  fire(type, evt, touch) {\n    const a = touch ? this._touch : this._active,\n          h = this._handlers[type]; // set event type relative to scenegraph items\n\n    evt.vegaType = type; // handle hyperlinks and tooltips first\n\n    if (type === HrefEvent && a && a.href) {\n      this.handleHref(evt, a, a.href);\n    } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n      this.handleTooltip(evt, a, type !== TooltipHideEvent);\n    } // invoke all registered handlers\n\n\n    if (h) {\n      for (let i = 0, len = h.length; i < len; ++i) {\n        h[i].handler.call(this._obj, evt, a);\n      }\n    }\n  },\n\n  // add an event handler\n  on(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers,\n          i = this._handlerIndex(h[name], type, handler);\n\n    if (i < 0) {\n      eventListenerCheck(this, type);\n      (h[name] || (h[name] = [])).push({\n        type: type,\n        handler: handler\n      });\n    }\n\n    return this;\n  },\n\n  // remove an event handler\n  off(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers[name],\n          i = this._handlerIndex(h, type, handler);\n\n    if (i >= 0) {\n      h.splice(i, 1);\n    }\n\n    return this;\n  },\n\n  pickEvent(evt) {\n    const p = point(evt, this._canvas),\n          o = this._origin;\n    return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n  },\n\n  // find the scenegraph item at the current mouse position\n  // x, y -- the absolute x, y mouse coordinates on the canvas element\n  // gx, gy -- the relative coordinates within the current group\n  pick(scene, x, y, gx, gy) {\n    const g = this.context(),\n          mark = Marks[scene.marktype];\n    return mark.pick.call(this, g, scene, x, y, gx, gy);\n  }\n\n});\n\nfunction devicePixelRatio() {\n  return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n  const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n        context = canvas.getContext('2d'),\n        ratio = inDOM ? pixelRatio : scaleFactor;\n  canvas.width = width * ratio;\n  canvas.height = height * ratio;\n\n  for (const key in opt) {\n    context[key] = opt[key];\n  }\n\n  if (inDOM && ratio !== 1) {\n    canvas.style.width = width + 'px';\n    canvas.style.height = height + 'px';\n  }\n\n  context.pixelRatio = ratio;\n  context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n  return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n  Renderer.call(this, loader);\n  this._options = {};\n  this._redraw = false;\n  this._dirty = new Bounds();\n  this._tempb = new Bounds();\n}\nconst base = Renderer.prototype;\n\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\n\nfunction clipToBounds(g, b, origin) {\n  // expand bounds by 1 pixel, then round to pixel boundaries\n  b.expand(1).round(); // align to base pixel grid in case of non-integer scaling (#2425)\n\n  if (g.pixelRatio % 1) {\n    b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n  } // to avoid artifacts translate if origin has fractional pixels\n\n\n  b.translate(-(origin[0] % 1), -(origin[1] % 1)); // set clip path\n\n  g.beginPath();\n  g.rect(b.x1, b.y1, b.width(), b.height());\n  g.clip();\n  return b;\n}\n\ninherits(CanvasRenderer, Renderer, {\n  initialize(el, width, height, origin, scaleFactor, options) {\n    this._options = options || {};\n    this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n    if (el && this._canvas) {\n      domClear(el, 0).appendChild(this._canvas);\n\n      this._canvas.setAttribute('class', 'marks');\n    } // this method will invoke resize to size the canvas appropriately\n\n\n    return base.initialize.call(this, el, width, height, origin, scaleFactor);\n  },\n\n  resize(width, height, origin, scaleFactor) {\n    base.resize.call(this, width, height, origin, scaleFactor);\n\n    if (this._canvas) {\n      // configure canvas size and transform\n      resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n    } else {\n      // external context needs to be scaled and positioned to origin\n      const ctx = this._options.externalContext;\n      if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n      ctx.scale(this._scale, this._scale);\n      ctx.translate(this._origin[0], this._origin[1]);\n    }\n\n    this._redraw = true;\n    return this;\n  },\n\n  canvas() {\n    return this._canvas;\n  },\n\n  context() {\n    return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n  },\n\n  dirty(item) {\n    const b = this._tempb.clear().union(item.bounds);\n\n    let g = item.mark.group;\n\n    while (g) {\n      b.translate(g.x || 0, g.y || 0);\n      g = g.mark.group;\n    }\n\n    this._dirty.union(b);\n  },\n\n  _render(scene) {\n    const g = this.context(),\n          o = this._origin,\n          w = this._width,\n          h = this._height,\n          db = this._dirty,\n          vb = viewBounds(o, w, h); // setup\n\n    g.save();\n    const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n    this.clear(-o[0], -o[1], w, h); // render\n\n    this.draw(g, scene, b); // takedown\n\n    g.restore();\n    db.clear();\n    return this;\n  },\n\n  draw(ctx, scene, bounds) {\n    const mark = Marks[scene.marktype];\n    if (scene.clip) clip$1(ctx, scene);\n    mark.draw.call(this, ctx, scene, bounds);\n    if (scene.clip) ctx.restore();\n  },\n\n  clear(x, y, w, h) {\n    const opt = this._options,\n          g = this.context();\n\n    if (opt.type !== 'pdf' && !opt.externalContext) {\n      // calling clear rect voids vector output in pdf mode\n      // and could remove external context content (#2615)\n      g.clearRect(x, y, w, h);\n    }\n\n    if (this._bgcolor != null) {\n      g.fillStyle = this._bgcolor;\n      g.fillRect(x, y, w, h);\n    }\n  }\n\n});\n\nfunction SVGHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  const h = this;\n  h._hrefHandler = listener(h, (evt, item) => {\n    if (item && item.href) h.handleHref(evt, item, item.href);\n  });\n  h._tooltipHandler = listener(h, (evt, item) => {\n    h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n  });\n} // wrap an event listener for the SVG DOM\n\nconst listener = (context, handler) => evt => {\n  let item = evt.target.__data__;\n  item = Array.isArray(item) ? item[0] : item;\n  evt.vegaType = evt.type;\n  handler.call(context._obj, evt, item);\n};\n\ninherits(SVGHandler, Handler, {\n  initialize(el, origin, obj) {\n    let svg = this._svg;\n\n    if (svg) {\n      svg.removeEventListener(HrefEvent, this._hrefHandler);\n      svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n      svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n    }\n\n    this._svg = svg = el && domFind(el, 'svg');\n\n    if (svg) {\n      svg.addEventListener(HrefEvent, this._hrefHandler);\n      svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n      svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n    }\n\n    return Handler.prototype.initialize.call(this, el, origin, obj);\n  },\n\n  canvas() {\n    return this._svg;\n  },\n\n  // add an event handler\n  on(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers,\n          i = this._handlerIndex(h[name], type, handler);\n\n    if (i < 0) {\n      const x = {\n        type,\n        handler,\n        listener: listener(this, handler)\n      };\n      (h[name] || (h[name] = [])).push(x);\n\n      if (this._svg) {\n        this._svg.addEventListener(name, x.listener);\n      }\n    }\n\n    return this;\n  },\n\n  // remove an event handler\n  off(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers[name],\n          i = this._handlerIndex(h, type, handler);\n\n    if (i >= 0) {\n      if (this._svg) {\n        this._svg.removeEventListener(name, h[i].listener);\n      }\n\n      h.splice(i, 1);\n    }\n\n    return this;\n  }\n\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n  [ARIA_ROLE]: role,\n  [ARIA_ROLEDESCRIPTION]: roledesc,\n  [ARIA_LABEL]: label || undefined\n}); // these roles are covered by related roles\n// we can ignore them, no need to generate attributes\n\n\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']); // aria attribute generators for guide roles\n\nconst AriaGuides = {\n  'axis': {\n    desc: 'axis',\n    caption: axisCaption\n  },\n  'legend': {\n    desc: 'legend',\n    caption: legendCaption\n  },\n  'title-text': {\n    desc: 'title',\n    caption: item => \"Title text '\".concat(titleCaption(item), \"'\")\n  },\n  'title-subtitle': {\n    desc: 'subtitle',\n    caption: item => \"Subtitle text '\".concat(titleCaption(item), \"'\")\n  }\n}; // aria properties generated for mark item encoding channels\n\nconst AriaEncode = {\n  ariaRole: ARIA_ROLE,\n  ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n  description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n  const hide = item.aria === false;\n  emit(ARIA_HIDDEN, hide || undefined);\n\n  if (hide || item.description == null) {\n    for (const prop in AriaEncode) {\n      emit(AriaEncode[prop], undefined);\n    }\n  } else {\n    const type = item.mark.marktype;\n    emit(ARIA_LABEL, item.description);\n    emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n    emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || \"\".concat(type, \" mark\"));\n  }\n}\nfunction ariaMarkAttributes(mark) {\n  return mark.aria === false ? {\n    [ARIA_HIDDEN]: true\n  } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n  const type = mark.marktype;\n  const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n  return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, \"\".concat(type, \" mark container\"), mark.description);\n}\n\nfunction ariaGuide(mark, opt) {\n  try {\n    const item = mark.items[0],\n          caption = opt.caption || (() => '');\n\n    return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction titleCaption(item) {\n  return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n  const datum = item.datum,\n        orient = item.orient,\n        title = datum.title ? extractTitle(item) : null,\n        ctx = item.context,\n        scale = ctx.scales[datum.scale].value,\n        locale = ctx.dataflow.locale(),\n        type = scale.type,\n        xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n  return \"\".concat(xy, \"-axis\") + (title ? \" titled '\".concat(title, \"'\") : '') + \" for a \".concat(isDiscrete(type) ? 'discrete' : type, \" scale\") + \" with \".concat(domainCaption(locale, scale, item));\n}\n\nfunction legendCaption(item) {\n  const datum = item.datum,\n        title = datum.title ? extractTitle(item) : null,\n        type = \"\".concat(datum.type || '', \" legend\").trim(),\n        scales = datum.scales,\n        props = Object.keys(scales),\n        ctx = item.context,\n        scale = ctx.scales[scales[props[0]]].value,\n        locale = ctx.dataflow.locale();\n  return capitalize(type) + (title ? \" titled '\".concat(title, \"'\") : '') + \" for \".concat(channelCaption(props)) + \" with \".concat(domainCaption(locale, scale, item));\n}\n\nfunction extractTitle(item) {\n  try {\n    return array(peek(item.items).items[0].text).join(' ');\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction channelCaption(props) {\n  props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n  return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n  return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nconst attrText = val => innerText(val).replace(/\"/g, '&quot;').replace(/\\t/g, '&#x9;').replace(/\\n/g, '&#xA;').replace(/\\r/g, '&#xD;');\n\nfunction markup() {\n  let buf = '',\n      outer = '',\n      inner = '';\n\n  const stack = [],\n        clear = () => outer = inner = '',\n        push = tag => {\n    if (outer) {\n      buf += \"\".concat(outer, \">\").concat(inner);\n      clear();\n    }\n\n    stack.push(tag);\n  },\n        attr = (name, value) => {\n    if (value != null) outer += \" \".concat(name, \"=\\\"\").concat(attrText(value), \"\\\"\");\n    return m;\n  },\n        m = {\n    open(tag, ...attrs) {\n      push(tag);\n      outer = '<' + tag;\n\n      for (const set of attrs) {\n        for (const key in set) attr(key, set[key]);\n      }\n\n      return m;\n    },\n\n    close() {\n      const tag = stack.pop();\n\n      if (outer) {\n        buf += outer + (inner ? \">\".concat(inner, \"</\").concat(tag, \">\") : '/>');\n      } else {\n        buf += \"</\".concat(tag, \">\");\n      }\n\n      clear();\n      return m;\n    },\n\n    attr,\n    text: t => (inner += innerText(t), m),\n    toString: () => buf\n  };\n\n  return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\n\nfunction _serialize(m, node) {\n  m.open(node.tagName);\n\n  if (node.hasAttributes()) {\n    const attrs = node.attributes,\n          n = attrs.length;\n\n    for (let i = 0; i < n; ++i) {\n      m.attr(attrs[i].name, attrs[i].value);\n    }\n  }\n\n  if (node.hasChildNodes()) {\n    const children = node.childNodes,\n          n = children.length;\n\n    for (let i = 0; i < n; i++) {\n      const child = children[i];\n      child.nodeType === 3 // text node\n      ? m.text(child.nodeValue) : _serialize(m, child);\n    }\n  }\n\n  return m.close();\n}\n\nconst styles = {\n  fill: 'fill',\n  fillOpacity: 'fill-opacity',\n  stroke: 'stroke',\n  strokeOpacity: 'stroke-opacity',\n  strokeWidth: 'stroke-width',\n  strokeCap: 'stroke-linecap',\n  strokeJoin: 'stroke-linejoin',\n  strokeDash: 'stroke-dasharray',\n  strokeDashOffset: 'stroke-dashoffset',\n  strokeMiterLimit: 'stroke-miterlimit',\n  opacity: 'opacity',\n  blend: 'mix-blend-mode'\n}; // ensure miter limit default is consistent with canvas (#2498)\n\nconst rootAttributes = {\n  'fill': 'none',\n  'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n      ns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n  Renderer.call(this, loader);\n  this._dirtyID = 0;\n  this._dirty = [];\n  this._svg = null;\n  this._root = null;\n  this._defs = null;\n}\nconst base$1 = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n  /**\n   * Initialize a new SVGRenderer instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {number} width - The coordinate width of the display, in pixels.\n   * @param {number} height - The coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {SVGRenderer} - This renderer instance.\n   */\n  initialize(el, width, height, origin, scaleFactor) {\n    // create the svg definitions cache\n    this._defs = {};\n\n    this._clearDefs();\n\n    if (el) {\n      this._svg = domChild(el, 0, 'svg', ns);\n      setAttributes(this._svg, metadata);\n\n      this._svg.setAttribute('class', 'marks');\n\n      domClear(el, 1); // set the svg root group\n\n      this._root = domChild(this._svg, RootIndex, 'g', ns);\n      setAttributes(this._root, rootAttributes); // ensure no additional child elements\n\n      domClear(this._svg, RootIndex + 1);\n    } // set background color if defined\n\n\n    this.background(this._bgcolor);\n    return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n  },\n\n  /**\n   * Get / set the background color.\n   */\n  background(bgcolor) {\n    if (arguments.length && this._svg) {\n      this._svg.style.setProperty('background-color', bgcolor);\n    }\n\n    return base$1.background.apply(this, arguments);\n  },\n\n  /**\n   * Resize the display.\n   * @param {number} width - The new coordinate width of the display, in pixels.\n   * @param {number} height - The new coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The new origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {SVGRenderer} - This renderer instance;\n   */\n  resize(width, height, origin, scaleFactor) {\n    base$1.resize.call(this, width, height, origin, scaleFactor);\n\n    if (this._svg) {\n      setAttributes(this._svg, {\n        width: this._width * this._scale,\n        height: this._height * this._scale,\n        viewBox: \"0 0 \".concat(this._width, \" \").concat(this._height)\n      });\n\n      this._root.setAttribute('transform', \"translate(\".concat(this._origin, \")\"));\n    }\n\n    this._dirty = [];\n    return this;\n  },\n\n  /**\n   * Returns the SVG element of the visualization.\n   * @return {DOMElement} - The SVG element.\n   */\n  canvas() {\n    return this._svg;\n  },\n\n  /**\n   * Returns an SVG text string for the rendered content,\n   * or null if this renderer is currently headless.\n   */\n  svg() {\n    const svg = this._svg,\n          bg = this._bgcolor;\n    if (!svg) return null;\n    let node;\n\n    if (bg) {\n      svg.removeAttribute('style');\n      node = domChild(svg, RootIndex, 'rect', ns);\n      setAttributes(node, {\n        width: this._width,\n        height: this._height,\n        fill: bg\n      });\n    }\n\n    const text = serializeXML(svg);\n\n    if (bg) {\n      svg.removeChild(node);\n\n      this._svg.style.setProperty('background-color', bg);\n    }\n\n    return text;\n  },\n\n  /**\n   * Internal rendering method.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render(scene) {\n    // perform spot updates and re-render markup\n    if (this._dirtyCheck()) {\n      if (this._dirtyAll) this._clearDefs();\n      this.mark(this._root, scene);\n      domClear(this._root, 1);\n    }\n\n    this.defs();\n    this._dirty = [];\n    ++this._dirtyID;\n    return this;\n  },\n\n  // -- Manage rendering of items marked as dirty --\n\n  /**\n   * Flag a mark item as dirty.\n   * @param {Item} item - The mark item.\n   */\n  dirty(item) {\n    if (item.dirty !== this._dirtyID) {\n      item.dirty = this._dirtyID;\n\n      this._dirty.push(item);\n    }\n  },\n\n  /**\n   * Check if a mark item is considered dirty.\n   * @param {Item} item - The mark item.\n   */\n  isDirty(item) {\n    return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;\n  },\n\n  /**\n   * Internal method to check dirty status and, if possible,\n   * make targetted updates without a full rendering pass.\n   */\n  _dirtyCheck() {\n    this._dirtyAll = true;\n    const items = this._dirty;\n    if (!items.length || !this._dirtyID) return true;\n    const id = ++this._dirtyID;\n    let item, mark, type, mdef, i, n, o;\n\n    for (i = 0, n = items.length; i < n; ++i) {\n      item = items[i];\n      mark = item.mark;\n\n      if (mark.marktype !== type) {\n        // memoize mark instance lookup\n        type = mark.marktype;\n        mdef = Marks[type];\n      }\n\n      if (mark.zdirty && mark.dirty !== id) {\n        this._dirtyAll = false;\n        dirtyParents(item, id);\n        mark.items.forEach(i => {\n          i.dirty = id;\n        });\n      }\n\n      if (mark.zdirty) continue; // handle in standard drawing pass\n\n      if (item.exit) {\n        // EXIT\n        if (mdef.nested && mark.items.length) {\n          // if nested mark with remaining points, update instead\n          o = mark.items[0];\n          if (o._svg) this._update(mdef, o._svg, o);\n        } else if (item._svg) {\n          // otherwise remove from DOM\n          o = item._svg.parentNode;\n          if (o) o.removeChild(item._svg);\n        }\n\n        item._svg = null;\n        continue;\n      }\n\n      item = mdef.nested ? mark.items[0] : item;\n      if (item._update === id) continue; // already visited\n\n      if (!item._svg || !item._svg.ownerSVGElement) {\n        // ENTER\n        this._dirtyAll = false;\n        dirtyParents(item, id);\n      } else {\n        // IN-PLACE UPDATE\n        this._update(mdef, item._svg, item);\n      }\n\n      item._update = id;\n    }\n\n    return !this._dirtyAll;\n  },\n\n  // -- Construct & maintain scenegraph to SVG mapping ---\n\n  /**\n   * Render a set of mark items.\n   * @param {SVGElement} el - The parent element in the SVG tree.\n   * @param {object} scene - The mark parent to render.\n   * @param {SVGElement} prev - The previous sibling in the SVG tree.\n   */\n  mark(el, scene, prev) {\n    if (!this.isDirty(scene)) return scene._svg;\n    const svg = this._svg,\n          mdef = Marks[scene.marktype],\n          events = scene.interactive === false ? 'none' : null,\n          isGroup = mdef.tag === 'g';\n    let sibling = null,\n        i = 0;\n    const parent = bind(scene, el, prev, 'g', svg);\n    parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element\n\n    const aria = ariaMarkAttributes(scene);\n\n    for (const key in aria) setAttribute(parent, key, aria[key]);\n\n    if (!isGroup) {\n      setAttribute(parent, 'pointer-events', events);\n    }\n\n    setAttribute(parent, 'clip-path', scene.clip ? clip(this, scene, scene.group) : null);\n\n    const process = item => {\n      const dirty = this.isDirty(item),\n            node = bind(item, parent, sibling, mdef.tag, svg);\n\n      if (dirty) {\n        this._update(mdef, node, item);\n\n        if (isGroup) recurse(this, node, item);\n      }\n\n      sibling = node;\n      ++i;\n    };\n\n    if (mdef.nested) {\n      if (scene.items.length) process(scene.items[0]);\n    } else {\n      visit(scene, process);\n    }\n\n    domClear(parent, i);\n    return parent;\n  },\n\n  /**\n   * Update the attributes of an SVG element for a mark item.\n   * @param {object} mdef - The mark definition object\n   * @param {SVGElement} el - The SVG element.\n   * @param {Item} item - The mark item.\n   */\n  _update(mdef, el, item) {\n    // set dom element and values cache\n    // provides access to emit method\n    element = el;\n    values = el.__values__; // apply aria-specific properties\n\n    ariaItemAttributes(emit, item); // apply svg attributes\n\n    mdef.attr(emit, item, this); // some marks need special treatment\n\n    const extra = mark_extras[mdef.type];\n    if (extra) extra.call(this, mdef, el, item); // apply svg style attributes\n    // note: element state may have been modified by 'extra' method\n\n    if (element) this.style(element, item);\n  },\n\n  /**\n   * Update the presentation attributes of an SVG element for a mark item.\n   * @param {SVGElement} el - The SVG element.\n   * @param {Item} item - The mark item.\n   */\n  style(el, item) {\n    if (item == null) return;\n\n    for (const prop in styles) {\n      let value = prop === 'font' ? fontFamily(item) : item[prop];\n      if (value === values[prop]) continue;\n      const name = styles[prop];\n\n      if (value == null) {\n        el.removeAttribute(name);\n      } else {\n        if (isGradient(value)) {\n          value = gradientRef(value, this._defs.gradient, href());\n        }\n\n        el.setAttribute(name, value + '');\n      }\n\n      values[prop] = value;\n    }\n  },\n\n  /**\n   * Render SVG defs, as needed.\n   * Must be called *after* marks have been processed to ensure the\n   * collected state is current and accurate.\n   */\n  defs() {\n    const svg = this._svg,\n          defs = this._defs;\n    let el = defs.el,\n        index = 0;\n\n    for (const id in defs.gradient) {\n      if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', ns);\n      index = updateGradient(el, defs.gradient[id], index);\n    }\n\n    for (const id in defs.clipping) {\n      if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', ns);\n      index = updateClipping(el, defs.clipping[id], index);\n    } // clean-up\n\n\n    if (el) {\n      index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n    }\n  },\n\n  /**\n   * Clear defs caches.\n   */\n  _clearDefs() {\n    const def = this._defs;\n    def.gradient = {};\n    def.clipping = {};\n  }\n\n}); // mark ancestor chain with a dirty id\n\nfunction dirtyParents(item, id) {\n  for (; item && item.dirty !== id; item = item.mark.group) {\n    item.dirty = id;\n\n    if (item.mark && item.mark.dirty !== id) {\n      item.mark.dirty = id;\n    } else return;\n  }\n} // update gradient definitions\n\n\nfunction updateGradient(el, grad, index) {\n  let i, n, stop;\n\n  if (grad.gradient === 'radial') {\n    // SVG radial gradients automatically transform to normalized bbox\n    // coordinates, in a way that is cumbersome to replicate in canvas.\n    // We wrap the radial gradient in a pattern element, allowing us to\n    // maintain a circular gradient that matches what canvas provides.\n    let pt = domChild(el, index++, 'pattern', ns);\n    setAttributes(pt, {\n      id: patternPrefix + grad.id,\n      viewBox: '0,0,1,1',\n      width: '100%',\n      height: '100%',\n      preserveAspectRatio: 'xMidYMid slice'\n    });\n    pt = domChild(pt, 0, 'rect', ns);\n    setAttributes(pt, {\n      width: 1,\n      height: 1,\n      fill: \"url(\".concat(href(), \"#\").concat(grad.id, \")\")\n    });\n    el = domChild(el, index++, 'radialGradient', ns);\n    setAttributes(el, {\n      id: grad.id,\n      fx: grad.x1,\n      fy: grad.y1,\n      fr: grad.r1,\n      cx: grad.x2,\n      cy: grad.y2,\n      r: grad.r2\n    });\n  } else {\n    el = domChild(el, index++, 'linearGradient', ns);\n    setAttributes(el, {\n      id: grad.id,\n      x1: grad.x1,\n      x2: grad.x2,\n      y1: grad.y1,\n      y2: grad.y2\n    });\n  }\n\n  for (i = 0, n = grad.stops.length; i < n; ++i) {\n    stop = domChild(el, i, 'stop', ns);\n    stop.setAttribute('offset', grad.stops[i].offset);\n    stop.setAttribute('stop-color', grad.stops[i].color);\n  }\n\n  domClear(el, i);\n  return index;\n} // update clipping path definitions\n\n\nfunction updateClipping(el, clip, index) {\n  let mask;\n  el = domChild(el, index, 'clipPath', ns);\n  el.setAttribute('id', clip.id);\n\n  if (clip.path) {\n    mask = domChild(el, 0, 'path', ns);\n    mask.setAttribute('d', clip.path);\n  } else {\n    mask = domChild(el, 0, 'rect', ns);\n    setAttributes(mask, {\n      x: 0,\n      y: 0,\n      width: clip.width,\n      height: clip.height\n    });\n  }\n\n  domClear(el, 1);\n  return index + 1;\n} // Recursively process group contents.\n\n\nfunction recurse(renderer, el, group) {\n  el = el.lastChild.previousSibling;\n  let prev,\n      idx = 0;\n  visit(group, item => {\n    prev = renderer.mark(el, item, prev);\n    ++idx;\n  }); // remove any extraneous DOM elements\n\n  domClear(el, 1 + idx);\n} // Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\n\n\nfunction bind(item, el, sibling, tag, svg) {\n  let node = item._svg,\n      doc; // create a new dom node if needed\n\n  if (!node) {\n    doc = el.ownerDocument;\n    node = domCreate(doc, tag, ns);\n    item._svg = node;\n\n    if (item.mark) {\n      node.__data__ = item;\n      node.__values__ = {\n        fill: 'default'\n      }; // if group, create background, content, and foreground elements\n\n      if (tag === 'g') {\n        const bg = domCreate(doc, 'path', ns);\n        node.appendChild(bg);\n        bg.__data__ = item;\n        const cg = domCreate(doc, 'g', ns);\n        node.appendChild(cg);\n        cg.__data__ = item;\n        const fg = domCreate(doc, 'path', ns);\n        node.appendChild(fg);\n        fg.__data__ = item;\n        fg.__values__ = {\n          fill: 'default'\n        };\n      }\n    }\n  } // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n\n\n  if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n    el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n  }\n\n  return node;\n} // check if two nodes are ordered siblings\n\n\nfunction siblingCheck(node, sibling) {\n  return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n} // -- Set attributes & styles on SVG elements ---\n\n\nlet element = null,\n    // temp var for current SVG element\nvalues = null; // temp var for current values hash\n// Extra configuration for certain mark types\n\nconst mark_extras = {\n  group(mdef, el, item) {\n    const fg = element = el.childNodes[2];\n    values = fg.__values__;\n    mdef.foreground(emit, item, this);\n    values = el.__values__; // use parent's values hash\n\n    element = el.childNodes[1];\n    mdef.content(emit, item, this);\n    const bg = element = el.childNodes[0];\n    mdef.background(emit, item, this);\n    const value = item.mark.interactive === false ? 'none' : null;\n\n    if (value !== values.events) {\n      setAttribute(fg, 'pointer-events', value);\n      setAttribute(bg, 'pointer-events', value);\n      values.events = value;\n    }\n\n    if (item.strokeForeground && item.stroke) {\n      const fill = item.fill;\n      setAttribute(fg, 'display', null); // set style of background\n\n      this.style(bg, item);\n      setAttribute(bg, 'stroke', null); // set style of foreground\n\n      if (fill) item.fill = null;\n      values = fg.__values__;\n      this.style(fg, item);\n      if (fill) item.fill = fill; // leave element null to prevent downstream styling\n\n      element = null;\n    } else {\n      // ensure foreground is ignored\n      setAttribute(fg, 'display', 'none');\n    }\n  },\n\n  image(mdef, el, item) {\n    if (item.smooth === false) {\n      setStyle(el, 'image-rendering', 'optimizeSpeed');\n      setStyle(el, 'image-rendering', 'pixelated');\n    } else {\n      setStyle(el, 'image-rendering', null);\n    }\n  },\n\n  text(mdef, el, item) {\n    const tl = textLines(item);\n    let key, value, doc, lh;\n\n    if (isArray(tl)) {\n      // multi-line text\n      value = tl.map(_ => textValue(item, _));\n      key = value.join('\\n'); // content cache key\n\n      if (key !== values.text) {\n        domClear(el, 0);\n        doc = el.ownerDocument;\n        lh = lineHeight(item);\n        value.forEach((t, i) => {\n          const ts = domCreate(doc, 'tspan', ns);\n          ts.__data__ = item; // data binding\n\n          ts.textContent = t;\n\n          if (i) {\n            ts.setAttribute('x', 0);\n            ts.setAttribute('dy', lh);\n          }\n\n          el.appendChild(ts);\n        });\n        values.text = key;\n      }\n    } else {\n      // single-line text\n      value = textValue(item, tl);\n\n      if (value !== values.text) {\n        el.textContent = value;\n        values.text = value;\n      }\n    }\n\n    setAttribute(el, 'font-family', fontFamily(item));\n    setAttribute(el, 'font-size', fontSize(item) + 'px');\n    setAttribute(el, 'font-style', item.fontStyle);\n    setAttribute(el, 'font-variant', item.fontVariant);\n    setAttribute(el, 'font-weight', item.fontWeight);\n  }\n\n};\n\nfunction emit(name, value, ns) {\n  // early exit if value is unchanged\n  if (value === values[name]) return; // use appropriate method given namespace (ns)\n\n  if (ns) {\n    setAttributeNS(element, name, value, ns);\n  } else {\n    setAttribute(element, name, value);\n  } // note current value for future comparison\n\n\n  values[name] = value;\n}\n\nfunction setStyle(el, name, value) {\n  if (value !== values[name]) {\n    if (value == null) {\n      el.style.removeProperty(name);\n    } else {\n      el.style.setProperty(name, value + '');\n    }\n\n    values[name] = value;\n  }\n}\n\nfunction setAttributes(el, attrs) {\n  for (const key in attrs) {\n    setAttribute(el, key, attrs[key]);\n  }\n}\n\nfunction setAttribute(el, name, value) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttribute(name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttribute(name);\n  }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttributeNS(ns, name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttributeNS(ns, name);\n  }\n}\n\nfunction href() {\n  let loc;\n  return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n  Renderer.call(this, loader);\n  this._text = null;\n  this._defs = {\n    gradient: {},\n    clipping: {}\n  };\n}\ninherits(SVGStringRenderer, Renderer, {\n  /**\n   * Returns the rendered SVG text string,\n   * or null if rendering has not yet occurred.\n   */\n  svg() {\n    return this._text;\n  },\n\n  /**\n   * Internal rendering method.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render(scene) {\n    const m = markup(); // svg tag\n\n    m.open('svg', extend({}, metadata, {\n      class: 'marks',\n      width: this._width * this._scale,\n      height: this._height * this._scale,\n      viewBox: \"0 0 \".concat(this._width, \" \").concat(this._height)\n    })); // background, if defined\n\n    const bg = this._bgcolor;\n\n    if (bg && bg !== 'transparent' && bg !== 'none') {\n      m.open('rect', {\n        width: this._width,\n        height: this._height,\n        fill: bg\n      }).close();\n    } // root content group\n\n\n    m.open('g', rootAttributes, {\n      transform: 'translate(' + this._origin + ')'\n    });\n    this.mark(m, scene);\n    m.close(); // </g>\n    // defs\n\n    this.defs(m); // get SVG text string\n\n    this._text = m.close() + '';\n    return this;\n  },\n\n  /**\n   * Render a set of mark items.\n   * @param {object} m - The markup context.\n   * @param {object} scene - The mark parent to render.\n   */\n  mark(m, scene) {\n    const mdef = Marks[scene.marktype],\n          tag = mdef.tag,\n          attrList = [ariaItemAttributes, mdef.attr]; // render opening group tag\n\n    m.open('g', {\n      'class': cssClass(scene),\n      'clip-path': scene.clip ? clip(this, scene, scene.group) : null\n    }, ariaMarkAttributes(scene), {\n      'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n    }); // render contained elements\n\n    const process = item => {\n      const href = this.href(item);\n      if (href) m.open('a', href);\n      m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n\n      if (tag === 'text') {\n        const tl = textLines(item);\n\n        if (isArray(tl)) {\n          // multi-line text\n          const attrs = {\n            x: 0,\n            dy: lineHeight(item)\n          };\n\n          for (let i = 0; i < tl.length; ++i) {\n            m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n          }\n        } else {\n          // single-line text\n          m.text(textValue(item, tl));\n        }\n      } else if (tag === 'g') {\n        const fore = item.strokeForeground,\n              fill = item.fill,\n              stroke = item.stroke;\n\n        if (fore && stroke) {\n          item.stroke = null;\n        }\n\n        m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close(); // recurse for group content\n\n        m.open('g', this.attr(scene, item, mdef.content));\n        visit(item, scene => this.mark(m, scene));\n        m.close();\n\n        if (fore && stroke) {\n          if (fill) item.fill = null;\n          item.stroke = stroke;\n          m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n          if (fill) item.fill = fill;\n        } else {\n          m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n        }\n      }\n\n      m.close(); // </tag>\n\n      if (href) m.close(); // </a>\n    };\n\n    if (mdef.nested) {\n      if (scene.items && scene.items.length) process(scene.items[0]);\n    } else {\n      visit(scene, process);\n    } // render closing group tag\n\n\n    return m.close(); // </g>\n  },\n\n  /**\n   * Get href attributes for a hyperlinked mark item.\n   * @param {Item} item - The mark item.\n   */\n  href(item) {\n    const href = item.href;\n    let attr;\n\n    if (href) {\n      if (attr = this._hrefs && this._hrefs[href]) {\n        return attr;\n      } else {\n        this.sanitizeURL(href).then(attr => {\n          // rewrite to use xlink namespace\n          attr['xlink:href'] = attr.href;\n          attr.href = null;\n          (this._hrefs || (this._hrefs = {}))[href] = attr;\n        });\n      }\n    }\n\n    return null;\n  },\n\n  /**\n   * Get an object of SVG attributes for a mark item.\n   * @param {object} scene - The mark parent.\n   * @param {Item} item - The mark item.\n   * @param {array|function} attrs - One or more attribute emitters.\n   * @param {string} tag - The tag being rendered.\n   */\n  attr(scene, item, attrs, tag) {\n    const object = {},\n          emit = (name, value, ns, prefixed) => {\n      object[prefixed || name] = value;\n    }; // apply mark specific attributes\n\n\n    if (Array.isArray(attrs)) {\n      attrs.forEach(fn => fn(emit, item, this));\n    } else {\n      attrs(emit, item, this);\n    } // apply style attributes\n\n\n    if (tag) {\n      style(object, item, scene, tag, this._defs);\n    }\n\n    return object;\n  },\n\n  /**\n   * Render SVG defs, as needed.\n   * Must be called *after* marks have been processed to ensure the\n   * collected state is current and accurate.\n   * @param {object} m - The markup context.\n   */\n  defs(m) {\n    const gradient = this._defs.gradient,\n          clipping = this._defs.clipping,\n          count = Object.keys(gradient).length + Object.keys(clipping).length;\n    if (count === 0) return; // nothing to do\n\n    m.open('defs');\n\n    for (const id in gradient) {\n      const def = gradient[id],\n            stops = def.stops;\n\n      if (def.gradient === 'radial') {\n        // SVG radial gradients automatically transform to normalized bbox\n        // coordinates, in a way that is cumbersome to replicate in canvas.\n        // We wrap the radial gradient in a pattern element, allowing us to\n        // maintain a circular gradient that matches what canvas provides.\n        m.open('pattern', {\n          id: patternPrefix + id,\n          viewBox: '0,0,1,1',\n          width: '100%',\n          height: '100%',\n          preserveAspectRatio: 'xMidYMid slice'\n        });\n        m.open('rect', {\n          width: '1',\n          height: '1',\n          fill: 'url(#' + id + ')'\n        }).close();\n        m.close(); // </pattern>\n\n        m.open('radialGradient', {\n          id: id,\n          fx: def.x1,\n          fy: def.y1,\n          fr: def.r1,\n          cx: def.x2,\n          cy: def.y2,\n          r: def.r2\n        });\n      } else {\n        m.open('linearGradient', {\n          id: id,\n          x1: def.x1,\n          x2: def.x2,\n          y1: def.y1,\n          y2: def.y2\n        });\n      }\n\n      for (let i = 0; i < stops.length; ++i) {\n        m.open('stop', {\n          offset: stops[i].offset,\n          'stop-color': stops[i].color\n        }).close();\n      }\n\n      m.close();\n    }\n\n    for (const id in clipping) {\n      const def = clipping[id];\n      m.open('clipPath', {\n        id: id\n      });\n\n      if (def.path) {\n        m.open('path', {\n          d: def.path\n        }).close();\n      } else {\n        m.open('rect', {\n          x: 0,\n          y: 0,\n          width: def.width,\n          height: def.height\n        }).close();\n      }\n\n      m.close();\n    }\n\n    m.close();\n  }\n\n}); // Helper function for attr for style presentation attributes\n\nfunction style(s, item, scene, tag, defs) {\n  if (item == null) return s;\n\n  if (tag === 'bgrect' && scene.interactive === false) {\n    s['pointer-events'] = 'none';\n  }\n\n  if (tag === 'bgfore') {\n    if (scene.interactive === false) {\n      s['pointer-events'] = 'none';\n    }\n\n    s.display = 'none';\n    if (item.fill !== null) return s;\n  }\n\n  if (tag === 'image' && item.smooth === false) {\n    s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n  }\n\n  if (tag === 'text') {\n    s['font-family'] = fontFamily(item);\n    s['font-size'] = fontSize(item) + 'px';\n    s['font-style'] = item.fontStyle;\n    s['font-variant'] = item.fontVariant;\n    s['font-weight'] = item.fontWeight;\n  }\n\n  for (const prop in styles) {\n    let value = item[prop];\n    const name = styles[prop];\n\n    if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n      if (isGradient(value)) {\n        value = gradientRef(value, defs.gradient, '');\n      }\n\n      s[name] = value;\n    }\n  }\n\n  return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n  Canvas: Canvas,\n  PNG: PNG,\n  SVG: SVG,\n  None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n  renderer: CanvasRenderer,\n  headless: CanvasRenderer,\n  handler: CanvasHandler\n};\nmodules[SVG] = {\n  renderer: SVGRenderer,\n  headless: SVGStringRenderer,\n  handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n  name = String(name || '').toLowerCase();\n\n  if (arguments.length > 1) {\n    modules[name] = _;\n    return this;\n  } else {\n    return modules[name];\n  }\n}\n\nfunction intersect(scene, bounds, filter) {\n  const hits = [],\n        // intersection results\n  box = new Bounds().union(bounds),\n        // defensive copy\n  type = scene.marktype;\n  return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n  if (visitMark(mark, box, filter)) {\n    const items = mark.items,\n          type = mark.marktype,\n          n = items.length;\n    let i = 0;\n\n    if (type === 'group') {\n      for (; i < n; ++i) {\n        intersectGroup(items[i], box, filter, hits);\n      }\n    } else {\n      for (const test = Marks[type].isect; i < n; ++i) {\n        const item = items[i];\n        if (intersectItem(item, box, test)) hits.push(item);\n      }\n    }\n  }\n\n  return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n  // process if bounds intersect and if\n  // (1) mark is a group mark (so we must recurse), or\n  // (2) mark is interactive and passes filter\n  return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n  // test intersect against group\n  // skip groups by default unless filter says otherwise\n  if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n    hits.push(group);\n  } // recursively test children marks\n  // translate box to group coordinate space\n\n\n  const marks = group.items,\n        n = marks && marks.length;\n\n  if (n) {\n    const x = group.x || 0,\n          y = group.y || 0;\n    box.translate(-x, -y);\n\n    for (let i = 0; i < n; ++i) {\n      intersectMark(marks[i], box, filter, hits);\n    }\n\n    box.translate(x, y);\n  }\n\n  return hits;\n}\n\nfunction intersectItem(item, box, test) {\n  // test bounds enclosure, bounds intersection, then detailed test\n  const bounds = item.bounds;\n  return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n  const clip = mark.clip;\n\n  if (isFunction(clip)) {\n    clip(boundContext(clipBounds.clear()));\n  } else if (clip) {\n    clipBounds.set(0, 0, mark.group.width, mark.group.height);\n  } else return;\n\n  mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n  return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n  return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n  var ka = Object.keys(a),\n      kb = Object.keys(b),\n      key,\n      i;\n  if (ka.length !== kb.length) return false;\n  ka.sort();\n  kb.sort();\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) return false;\n  }\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!sceneEqual(a[key], b[key], key)) return false;\n  }\n\n  return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n  resetSVGClipId();\n  resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\n\nfunction Bound(params) {\n  Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n  transform(_, pulse) {\n    const view = pulse.dataflow,\n          mark = _.mark,\n          type = mark.marktype,\n          entry = Marks[type],\n          bound = entry.bound;\n    let markBounds = mark.bounds,\n        rebound;\n\n    if (entry.nested) {\n      // multi-item marks have a single bounds instance\n      if (mark.items.length) view.dirty(mark.items[0]);\n      markBounds = boundItem(mark, bound);\n      mark.items.forEach(item => {\n        item.bounds.clear().union(markBounds);\n      });\n    } else if (type === Group || _.modified()) {\n      // operator parameters modified -> re-bound all items\n      // updates group bounds in response to modified group content\n      pulse.visit(pulse.MOD, item => view.dirty(item));\n      markBounds.clear();\n      mark.items.forEach(item => markBounds.union(boundItem(item, bound))); // force reflow for axes/legends/titles to propagate any layout changes\n\n      switch (mark.role) {\n        case AxisRole:\n        case LegendRole:\n        case TitleRole:\n          pulse.reflow();\n      }\n    } else {\n      // incrementally update bounds, re-bound mark as needed\n      rebound = pulse.changed(pulse.REM);\n      pulse.visit(pulse.ADD, item => {\n        markBounds.union(boundItem(item, bound));\n      });\n      pulse.visit(pulse.MOD, item => {\n        rebound = rebound || markBounds.alignsWith(item.bounds);\n        view.dirty(item);\n        markBounds.union(boundItem(item, bound));\n      });\n\n      if (rebound) {\n        markBounds.clear();\n        mark.items.forEach(item => markBounds.union(item.bounds));\n      }\n    } // ensure mark bounds do not exceed any clipping region\n\n\n    boundClip(mark);\n    return pulse.modifies('bounds');\n  }\n\n});\n\nfunction boundItem(item, bound, opt) {\n  return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\n\nfunction Identifier(params) {\n  Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n  'type': 'Identifier',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'as',\n    'type': 'string',\n    'required': true\n  }]\n};\ninherits(Identifier, Transform, {\n  transform(_, pulse) {\n    const counter = getCounter(pulse.dataflow),\n          as = _.as;\n    let id = counter.value;\n    pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n    counter.set(this.value = id);\n    return pulse;\n  }\n\n});\n\nfunction getCounter(view) {\n  return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n *   This is an object of legal scenegraph mark properties which *must* include\n *   the 'marktype' property.\n */\n\nfunction Mark(params) {\n  Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n  transform(_, pulse) {\n    let mark = this.value; // acquire mark on first invocation, bind context and group\n\n    if (!mark) {\n      mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup(_), _.index);\n      mark.group.context = _.context;\n      if (!_.context.group) _.context.group = mark.group;\n      mark.source = this.source; // point to upstream collector\n\n      mark.clip = _.clip;\n      mark.interactive = _.interactive;\n      this.value = mark;\n    } // initialize entering items\n\n\n    const Init = mark.marktype === Group ? GroupItem : Item;\n    pulse.visit(pulse.ADD, item => Init.call(item, mark)); // update clipping and/or interactive status\n\n    if (_.modified('clip') || _.modified('interactive')) {\n      mark.clip = _.clip;\n      mark.interactive = !!_.interactive;\n      mark.zdirty = true; // force scenegraph re-eval\n\n      pulse.reflow();\n    } // bind items array to scenegraph mark\n\n\n    mark.items = pulse.source;\n    return pulse;\n  }\n\n});\n\nfunction lookup(_) {\n  const g = _.groups,\n        p = _.parent;\n  return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n *   function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n *   One of 'parity' (default, hide every other item until there is no\n *   more overlap) or 'greedy' (sequentially scan and hide and items that\n *   overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n *   to bound the items. Items exceeding the bounds of the scale range\n *   will be treated as overlapping. If null or undefined, no bounds check\n *   will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n *   (top, bottom, left, or right) used to bound items. This parameter is\n *   ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n *   bound inclusion testing (default 1). This specifies by how many pixels\n *   an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\n\nfunction Overlap(params) {\n  Transform.call(this, null, params);\n}\nconst methods = {\n  parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n  greedy: (items, sep) => {\n    let a;\n    return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n  }\n}; // compute bounding box intersection\n// including padding pixels of separation\n\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n\nconst hasOverlap = (items, pad) => {\n  for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n    if (intersect(a, b = items[i].bounds, pad)) return true;\n  }\n};\n\nconst hasBounds = item => {\n  const b = item.bounds;\n  return b.width() > 1 && b.height() > 1;\n};\n\nconst boundTest = (scale, orient, tolerance) => {\n  var range = scale.range(),\n      b = new Bounds();\n\n  if (orient === Top || orient === Bottom) {\n    b.set(range[0], -Infinity, range[1], +Infinity);\n  } else {\n    b.set(-Infinity, range[0], +Infinity, range[1]);\n  }\n\n  b.expand(tolerance || 1);\n  return item => b.encloses(item.bounds);\n}; // reset all items to be fully opaque\n\n\nconst reset = source => {\n  source.forEach(item => item.opacity = 1);\n  return source;\n}; // add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\n\n\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\n\ninherits(Overlap, Transform, {\n  transform(_, pulse) {\n    const reduce = methods[_.method] || methods.parity,\n          sep = _.separation || 0;\n    let source = pulse.materialize(pulse.SOURCE).source,\n        items,\n        test;\n    if (!source || !source.length) return;\n\n    if (!_.method) {\n      // early exit if method is falsy\n      if (_.modified('method')) {\n        reset(source);\n        pulse = reflow(pulse, _);\n      }\n\n      return pulse;\n    } // skip labels with no content\n\n\n    source = source.filter(hasBounds); // early exit, nothing to do\n\n    if (!source.length) return;\n\n    if (_.sort) {\n      source = source.slice().sort(_.sort);\n    }\n\n    items = reset(source);\n    pulse = reflow(pulse, _);\n\n    if (items.length >= 3 && hasOverlap(items, sep)) {\n      do {\n        items = reduce(items, sep);\n      } while (items.length >= 3 && hasOverlap(items, sep));\n\n      if (items.length < 3 && !peek(source).opacity) {\n        if (items.length > 1) peek(items).opacity = 0;\n        peek(source).opacity = 1;\n      }\n    }\n\n    if (_.boundScale && _.boundTolerance >= 0) {\n      test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n      source.forEach(item => {\n        if (!test(item)) item.opacity = 0;\n      });\n    } // re-calculate mark bounds\n\n\n    const bounds = items[0].mark.bounds.clear();\n    source.forEach(item => {\n      if (item.opacity) bounds.union(item.bounds);\n    });\n    return pulse;\n  }\n\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\n\nfunction Render(params) {\n  Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n  transform(_, pulse) {\n    const view = pulse.dataflow;\n    pulse.visit(pulse.ALL, item => view.dirty(item)); // set z-index dirty flag as needed\n\n    if (pulse.fields && pulse.fields['zindex']) {\n      const item = pulse.source && pulse.source[0];\n      if (item) item.mark.zdirty = true;\n    }\n  }\n\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n  return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n  var orient = mark.items[0].orient;\n  return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n  let index = +datum.grid;\n  return [datum.ticks ? index++ : -1, // ticks index\n  datum.labels ? index++ : -1, // labels index\n  index + +datum.domain // title index\n  ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n  var item = axis.items[0],\n      datum = item.datum,\n      delta = item.translate != null ? item.translate : 0.5,\n      orient = item.orient,\n      indices = axisIndices(datum),\n      range = item.range,\n      offset = item.offset,\n      position = item.position,\n      minExtent = item.minExtent,\n      maxExtent = item.maxExtent,\n      title = datum.title && item.items[indices[2]].items[0],\n      titlePadding = item.titlePadding,\n      bounds = item.bounds,\n      dl = title && multiLineOffset(title),\n      x = 0,\n      y = 0,\n      i,\n      s;\n  tempBounds.clear().union(bounds);\n  bounds.clear();\n  if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n  if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds); // position axis group and title\n\n  switch (orient) {\n    case Top:\n      x = position || 0;\n      y = -offset;\n      s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n      bounds.add(0, -s).add(range, 0);\n      if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n      break;\n\n    case Left:\n      x = -offset;\n      y = position || 0;\n      s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n      bounds.add(-s, 0).add(0, range);\n      if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n      break;\n\n    case Right:\n      x = width + offset;\n      y = position || 0;\n      s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n      bounds.add(0, 0).add(s, range);\n      if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n      break;\n\n    case Bottom:\n      x = position || 0;\n      y = height + offset;\n      s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n      bounds.add(0, 0).add(range, s);\n      if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n      break;\n\n    default:\n      x = item.x;\n      y = item.y;\n  } // update bounds\n\n\n  boundStroke(bounds.translate(x, y), item);\n\n  if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n    item.bounds = tempBounds;\n    view.dirty(item);\n    item.bounds = bounds;\n    view.dirty(item);\n  }\n\n  return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n  const b = title.bounds;\n\n  if (title.auto) {\n    const v = sign * (offset + dl + pad);\n    let dx = 0,\n        dy = 0;\n    view.dirty(title);\n    isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n    title.mark.bounds.clear().union(b.translate(-dx, -dy));\n    view.dirty(title);\n  }\n\n  bounds.union(b);\n}\n\nconst min = (a, b) => Math.floor(Math.min(a, b));\n\nconst max = (a, b) => Math.ceil(Math.max(a, b));\n\nfunction gridLayoutGroups(group) {\n  var groups = group.items,\n      n = groups.length,\n      i = 0,\n      mark,\n      items;\n  const views = {\n    marks: [],\n    rowheaders: [],\n    rowfooters: [],\n    colheaders: [],\n    colfooters: [],\n    rowtitle: null,\n    coltitle: null\n  }; // layout axes, gather legends, collect bounds\n\n  for (; i < n; ++i) {\n    mark = groups[i];\n    items = mark.items;\n\n    if (mark.marktype === Group) {\n      switch (mark.role) {\n        case AxisRole:\n        case LegendRole:\n        case TitleRole:\n          break;\n\n        case RowHeader:\n          views.rowheaders.push(...items);\n          break;\n\n        case RowFooter:\n          views.rowfooters.push(...items);\n          break;\n\n        case ColHeader:\n          views.colheaders.push(...items);\n          break;\n\n        case ColFooter:\n          views.colfooters.push(...items);\n          break;\n\n        case RowTitle:\n          views.rowtitle = items[0];\n          break;\n\n        case ColTitle:\n          views.coltitle = items[0];\n          break;\n\n        default:\n          views.marks.push(...items);\n      }\n    }\n  }\n\n  return views;\n}\n\nfunction bboxFlush(item) {\n  return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\n\nfunction bboxFull(item) {\n  const b = item.bounds.clone();\n  return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\n\nfunction get(opt, key, d) {\n  const v = isObject(opt) ? opt[key] : opt;\n  return v != null ? v : d !== undefined ? d : 0;\n}\n\nfunction offsetValue(v) {\n  return v < 0 ? Math.ceil(-v) : 0;\n}\n\nfunction gridLayout(view, groups, opt) {\n  var dirty = !opt.nodirty,\n      bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n      bounds = tempBounds.set(0, 0, 0, 0),\n      alignCol = get(opt.align, Column),\n      alignRow = get(opt.align, Row),\n      padCol = get(opt.padding, Column),\n      padRow = get(opt.padding, Row),\n      ncols = opt.columns || groups.length,\n      nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n      n = groups.length,\n      xOffset = Array(n),\n      xExtent = Array(ncols),\n      xMax = 0,\n      yOffset = Array(n),\n      yExtent = Array(nrows),\n      yMax = 0,\n      dx = Array(n),\n      dy = Array(n),\n      boxes = Array(n),\n      m,\n      i,\n      c,\n      r,\n      b,\n      g,\n      px,\n      py,\n      x,\n      y,\n      offset;\n\n  for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n\n  for (i = 0; i < nrows; ++i) yExtent[i] = 0; // determine offsets for each group\n\n\n  for (i = 0; i < n; ++i) {\n    g = groups[i];\n    b = boxes[i] = bbox(g);\n    g.x = g.x || 0;\n    dx[i] = 0;\n    g.y = g.y || 0;\n    dy[i] = 0;\n    c = i % ncols;\n    r = ~~(i / ncols);\n    xMax = Math.max(xMax, px = Math.ceil(b.x2));\n    yMax = Math.max(yMax, py = Math.ceil(b.y2));\n    xExtent[c] = Math.max(xExtent[c], px);\n    yExtent[r] = Math.max(yExtent[r], py);\n    xOffset[i] = padCol + offsetValue(b.x1);\n    yOffset[i] = padRow + offsetValue(b.y1);\n    if (dirty) view.dirty(groups[i]);\n  } // set initial alignment offsets\n\n\n  for (i = 0; i < n; ++i) {\n    if (i % ncols === 0) xOffset[i] = 0;\n    if (i < ncols) yOffset[i] = 0;\n  } // enforce column alignment constraints\n\n\n  if (alignCol === Each) {\n    for (c = 1; c < ncols; ++c) {\n      for (offset = 0, i = c; i < n; i += ncols) {\n        if (offset < xOffset[i]) offset = xOffset[i];\n      }\n\n      for (i = c; i < n; i += ncols) {\n        xOffset[i] = offset + xExtent[c - 1];\n      }\n    }\n  } else if (alignCol === All) {\n    for (offset = 0, i = 0; i < n; ++i) {\n      if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n    }\n\n    for (i = 0; i < n; ++i) {\n      if (i % ncols) xOffset[i] = offset + xMax;\n    }\n  } else {\n    for (alignCol = false, c = 1; c < ncols; ++c) {\n      for (i = c; i < n; i += ncols) {\n        xOffset[i] += xExtent[c - 1];\n      }\n    }\n  } // enforce row alignment constraints\n\n\n  if (alignRow === Each) {\n    for (r = 1; r < nrows; ++r) {\n      for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n        if (offset < yOffset[i]) offset = yOffset[i];\n      }\n\n      for (i = r * ncols; i < m; ++i) {\n        yOffset[i] = offset + yExtent[r - 1];\n      }\n    }\n  } else if (alignRow === All) {\n    for (offset = 0, i = ncols; i < n; ++i) {\n      if (offset < yOffset[i]) offset = yOffset[i];\n    }\n\n    for (i = ncols; i < n; ++i) {\n      yOffset[i] = offset + yMax;\n    }\n  } else {\n    for (alignRow = false, r = 1; r < nrows; ++r) {\n      for (i = r * ncols, m = i + ncols; i < m; ++i) {\n        yOffset[i] += yExtent[r - 1];\n      }\n    }\n  } // perform horizontal grid layout\n\n\n  for (x = 0, i = 0; i < n; ++i) {\n    x = xOffset[i] + (i % ncols ? x : 0);\n    dx[i] += x - groups[i].x;\n  } // perform vertical grid layout\n\n\n  for (c = 0; c < ncols; ++c) {\n    for (y = 0, i = c; i < n; i += ncols) {\n      y += yOffset[i];\n      dy[i] += y - groups[i].y;\n    }\n  } // perform horizontal centering\n\n\n  if (alignCol && get(opt.center, Column) && nrows > 1) {\n    for (i = 0; i < n; ++i) {\n      b = alignCol === All ? xMax : xExtent[i % ncols];\n      x = b - boxes[i].x2 - groups[i].x - dx[i];\n      if (x > 0) dx[i] += x / 2;\n    }\n  } // perform vertical centering\n\n\n  if (alignRow && get(opt.center, Row) && ncols !== 1) {\n    for (i = 0; i < n; ++i) {\n      b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n      y = b - boxes[i].y2 - groups[i].y - dy[i];\n      if (y > 0) dy[i] += y / 2;\n    }\n  } // position grid relative to anchor\n\n\n  for (i = 0; i < n; ++i) {\n    bounds.union(boxes[i].translate(dx[i], dy[i]));\n  }\n\n  x = get(opt.anchor, X);\n  y = get(opt.anchor, Y);\n\n  switch (get(opt.anchor, Column)) {\n    case End:\n      x -= bounds.width();\n      break;\n\n    case Middle:\n      x -= bounds.width() / 2;\n  }\n\n  switch (get(opt.anchor, Row)) {\n    case End:\n      y -= bounds.height();\n      break;\n\n    case Middle:\n      y -= bounds.height() / 2;\n  }\n\n  x = Math.round(x);\n  y = Math.round(y); // update mark positions, bounds, dirty\n\n  bounds.clear();\n\n  for (i = 0; i < n; ++i) {\n    groups[i].mark.bounds.clear();\n  }\n\n  for (i = 0; i < n; ++i) {\n    g = groups[i];\n    g.x += dx[i] += x;\n    g.y += dy[i] += y;\n    bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n    if (dirty) view.dirty(g);\n  }\n\n  return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n  var views = gridLayoutGroups(group),\n      groups = views.marks,\n      bbox = opt.bounds === Flush ? boundFlush : boundFull,\n      off = opt.offset,\n      ncols = opt.columns || groups.length,\n      nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n      cells = nrows * ncols,\n      x,\n      y,\n      x2,\n      y2,\n      anchor,\n      band,\n      offset; // -- initial grid layout\n\n  const bounds = gridLayout(view, groups, opt);\n  if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n  // -- layout grid headers and footers --\n  // perform row header layout\n\n  if (views.rowheaders) {\n    band = get(opt.headerBand, Row, null);\n    x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n  } // perform column header layout\n\n\n  if (views.colheaders) {\n    band = get(opt.headerBand, Column, null);\n    y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n  } // perform row footer layout\n\n\n  if (views.rowfooters) {\n    band = get(opt.footerBand, Row, null);\n    x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n  } // perform column footer layout\n\n\n  if (views.colfooters) {\n    band = get(opt.footerBand, Column, null);\n    y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n  } // perform row title layout\n\n\n  if (views.rowtitle) {\n    anchor = get(opt.titleAnchor, Row);\n    offset = get(off, 'rowTitle');\n    offset = anchor === End ? x2 + offset : x - offset;\n    band = get(opt.titleBand, Row, 0.5);\n    layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n  } // perform column title layout\n\n\n  if (views.coltitle) {\n    anchor = get(opt.titleAnchor, Column);\n    offset = get(off, 'columnTitle');\n    offset = anchor === End ? y2 + offset : y - offset;\n    band = get(opt.titleBand, Column, 0.5);\n    layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n  }\n}\n\nfunction boundFlush(item, field) {\n  return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\n\nfunction boundFull(item, field) {\n  return item.bounds[field];\n}\n\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n  var n = groups.length,\n      init = 0,\n      edge = 0,\n      i,\n      j,\n      k,\n      m,\n      b,\n      h,\n      g,\n      x,\n      y; // if no groups, early exit and return 0\n\n  if (!n) return init; // compute margin\n\n  for (i = start; i < n; i += stride) {\n    if (groups[i]) init = agg(init, bound(groups[i], bf));\n  } // if no headers, return margin calculation\n\n\n  if (!headers.length) return init; // check if number of headers exceeds number of rows or columns\n\n  if (headers.length > limit) {\n    view.warn('Grid headers exceed limit: ' + limit);\n    headers = headers.slice(0, limit);\n  } // apply offset\n\n\n  init += offset; // clear mark bounds for all headers\n\n  for (j = 0, m = headers.length; j < m; ++j) {\n    view.dirty(headers[j]);\n    headers[j].mark.bounds.clear();\n  } // layout each header\n\n\n  for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n    h = headers[j];\n    b = h.mark.bounds; // search for nearest group to align to\n    // necessary if table has empty cells\n\n    for (k = i; k >= 0 && (g = groups[k]) == null; k -= back); // assign coordinates and update bounds\n\n\n    if (isX) {\n      x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n      y = init;\n    } else {\n      x = init;\n      y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n    }\n\n    b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n    h.x = x;\n    h.y = y;\n    view.dirty(h); // update current edge of layout bounds\n\n    edge = agg(edge, b[bf]);\n  }\n\n  return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n  if (!g) return;\n  view.dirty(g); // compute title coordinates\n\n  var x = offset,\n      y = offset;\n  isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height()); // assign coordinates and update bounds\n\n  g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n  g.mark.bounds.clear().union(g.bounds);\n  g.x = x;\n  g.y = y; // queue title for redraw\n\n  view.dirty(g);\n}\n\nfunction lookup$1(config, orient) {\n  const opt = config[orient] || {};\n  return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n} // if legends specify offset directly, use the maximum specified value\n\n\nfunction offsets(legends, value) {\n  let max = -Infinity;\n  legends.forEach(item => {\n    if (item.offset != null) max = Math.max(max, item.offset);\n  });\n  return max > -Infinity ? max : value;\n}\n\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n  const _ = lookup$1(config, orient),\n        offset = offsets(g, _('offset', 0)),\n        anchor = _('anchor', Start),\n        mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n  const p = {\n    align: Each,\n    bounds: _('bounds', Flush),\n    columns: _('direction') === 'vertical' ? 1 : g.length,\n    padding: _('margin', 8),\n    center: _('center'),\n    nodirty: true\n  };\n\n  switch (orient) {\n    case Left:\n      p.anchor = {\n        x: Math.floor(xb.x1) - offset,\n        column: End,\n        y: mult * (h || xb.height() + 2 * xb.y1),\n        row: anchor\n      };\n      break;\n\n    case Right:\n      p.anchor = {\n        x: Math.ceil(xb.x2) + offset,\n        y: mult * (h || xb.height() + 2 * xb.y1),\n        row: anchor\n      };\n      break;\n\n    case Top:\n      p.anchor = {\n        y: Math.floor(yb.y1) - offset,\n        row: End,\n        x: mult * (w || yb.width() + 2 * yb.x1),\n        column: anchor\n      };\n      break;\n\n    case Bottom:\n      p.anchor = {\n        y: Math.ceil(yb.y2) + offset,\n        x: mult * (w || yb.width() + 2 * yb.x1),\n        column: anchor\n      };\n      break;\n\n    case TopLeft:\n      p.anchor = {\n        x: offset,\n        y: offset\n      };\n      break;\n\n    case TopRight:\n      p.anchor = {\n        x: w - offset,\n        y: offset,\n        column: End\n      };\n      break;\n\n    case BottomLeft:\n      p.anchor = {\n        x: offset,\n        y: h - offset,\n        row: End\n      };\n      break;\n\n    case BottomRight:\n      p.anchor = {\n        x: w - offset,\n        y: h - offset,\n        column: End,\n        row: End\n      };\n      break;\n  }\n\n  return p;\n}\nfunction legendLayout(view, legend) {\n  var item = legend.items[0],\n      datum = item.datum,\n      orient = item.orient,\n      bounds = item.bounds,\n      x = item.x,\n      y = item.y,\n      w,\n      h; // cache current bounds for later comparison\n\n  item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n  bounds.clear(); // adjust legend to accommodate padding and title\n\n  legendGroupLayout(view, item, item.items[0].items[0]); // aggregate bounds to determine size, and include origin\n\n  bounds = legendBounds(item, bounds);\n  w = 2 * item.padding;\n  h = 2 * item.padding;\n\n  if (!bounds.empty()) {\n    w = Math.ceil(bounds.width() + w);\n    h = Math.ceil(bounds.height() + h);\n  }\n\n  if (datum.type === Symbols) {\n    legendEntryLayout(item.items[0].items[0].items[0].items);\n  }\n\n  if (orient !== None) {\n    item.x = x = 0;\n    item.y = y = 0;\n  }\n\n  item.width = w;\n  item.height = h;\n  boundStroke(bounds.set(x, y, x + w, y + h), item);\n  item.mark.bounds.clear().union(bounds);\n  return item;\n}\n\nfunction legendBounds(item, b) {\n  // aggregate item bounds\n  item.items.forEach(_ => b.union(_.bounds)); // anchor to legend origin\n\n  b.x1 = item.padding;\n  b.y1 = item.padding;\n  return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n  var pad = item.padding,\n      ex = pad - entry.x,\n      ey = pad - entry.y;\n\n  if (!item.datum.title) {\n    if (ex || ey) translate(view, entry, ex, ey);\n  } else {\n    var title = item.items[1].items[0],\n        anchor = title.anchor,\n        tpad = item.titlePadding || 0,\n        tx = pad - title.x,\n        ty = pad - title.y;\n\n    switch (title.orient) {\n      case Left:\n        ex += Math.ceil(title.bounds.width()) + tpad;\n        break;\n\n      case Right:\n      case Bottom:\n        break;\n\n      default:\n        ey += title.bounds.height() + tpad;\n    }\n\n    if (ex || ey) translate(view, entry, ex, ey);\n\n    switch (title.orient) {\n      case Left:\n        ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n        break;\n\n      case Right:\n        tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n        ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n        break;\n\n      case Bottom:\n        tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n        ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n        break;\n\n      default:\n        tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n    }\n\n    if (tx || ty) translate(view, title, tx, ty); // translate legend if title pushes into negative coordinates\n\n    if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n      translate(view, entry, -tx, 0);\n      translate(view, title, -tx, 0);\n    }\n  }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n  const grad = item.datum.type !== 'symbol',\n        vgrad = title.datum.vgrad,\n        e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n        s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n        u = vgrad && lr ? s : 0,\n        v = vgrad && lr ? 0 : s,\n        o = y <= 0 ? 0 : multiLineOffset(title);\n  return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\n\nfunction translate(view, item, dx, dy) {\n  item.x += dx;\n  item.y += dy;\n  item.bounds.translate(dx, dy);\n  item.mark.bounds.translate(dx, dy);\n  view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n  // get max widths for each column\n  const widths = entries.reduce((w, g) => {\n    w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n    return w;\n  }, {}); // set dimensions of legend entry groups\n\n  entries.forEach(g => {\n    g.width = widths[g.column];\n    g.height = g.bounds.y2 - g.y;\n  });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n  var group = mark.items[0],\n      frame = group.frame,\n      orient = group.orient,\n      anchor = group.anchor,\n      offset = group.offset,\n      padding = group.padding,\n      title = group.items[0].items[0],\n      subtitle = group.items[1] && group.items[1].items[0],\n      end = orient === Left || orient === Right ? height : width,\n      start = 0,\n      x = 0,\n      y = 0,\n      sx = 0,\n      sy = 0,\n      pos;\n\n  if (frame !== Group) {\n    orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n  } else if (orient === Left) {\n    start = height, end = 0;\n  }\n\n  pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n\n  if (subtitle && subtitle.text) {\n    // position subtitle\n    switch (orient) {\n      case Top:\n      case Bottom:\n        sy = title.bounds.height() + padding;\n        break;\n\n      case Left:\n        sx = title.bounds.width() + padding;\n        break;\n\n      case Right:\n        sx = -title.bounds.width() - padding;\n        break;\n    }\n\n    tempBounds.clear().union(subtitle.bounds);\n    tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n\n    if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n      view.dirty(subtitle);\n      subtitle.bounds.clear().union(tempBounds);\n      subtitle.mark.bounds.clear().union(tempBounds);\n      view.dirty(subtitle);\n    }\n\n    tempBounds.clear().union(subtitle.bounds);\n  } else {\n    tempBounds.clear();\n  }\n\n  tempBounds.union(title.bounds); // position title group\n\n  switch (orient) {\n    case Top:\n      x = pos;\n      y = viewBounds.y1 - tempBounds.height() - offset;\n      break;\n\n    case Left:\n      x = viewBounds.x1 - tempBounds.width() - offset;\n      y = pos;\n      break;\n\n    case Right:\n      x = viewBounds.x2 + tempBounds.width() + offset;\n      y = pos;\n      break;\n\n    case Bottom:\n      x = pos;\n      y = viewBounds.y2 + offset;\n      break;\n\n    default:\n      x = group.x;\n      y = group.y;\n  }\n\n  if (set(group, 'x', x) | set(group, 'y', y)) {\n    tempBounds.translate(x, y);\n    view.dirty(group);\n    group.bounds.clear().union(tempBounds);\n    mark.bounds.clear().union(tempBounds);\n    view.dirty(group);\n  }\n\n  return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\n\nfunction ViewLayout(params) {\n  Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n  transform(_, pulse) {\n    const view = pulse.dataflow;\n\n    _.mark.items.forEach(group => {\n      if (_.layout) trellisLayout(view, group, _.layout);\n      layoutGroup(view, group, _);\n    });\n\n    return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n  }\n\n});\n\nfunction shouldReflow(group) {\n  // We typically should reflow if layout is invoked (#2568), as child items\n  // may have resized and reflow ensures group bounds are re-calculated.\n  // However, legend entries have a special exception to avoid instability.\n  // For example, if a selected legend symbol gains a stroke on hover,\n  // we don't want to re-position subsequent elements in the legend.\n  return group && group.mark.role !== 'legend-entry';\n}\n\nfunction layoutGroup(view, group, _) {\n  var items = group.items,\n      width = Math.max(0, group.width || 0),\n      height = Math.max(0, group.height || 0),\n      viewBounds = new Bounds().set(0, 0, width, height),\n      xBounds = viewBounds.clone(),\n      yBounds = viewBounds.clone(),\n      legends = [],\n      title,\n      mark,\n      orient,\n      b,\n      i,\n      n; // layout axes, gather legends, collect bounds\n\n  for (i = 0, n = items.length; i < n; ++i) {\n    mark = items[i];\n\n    switch (mark.role) {\n      case AxisRole:\n        b = isYAxis(mark) ? xBounds : yBounds;\n        b.union(axisLayout(view, mark, width, height));\n        break;\n\n      case TitleRole:\n        title = mark;\n        break;\n\n      case LegendRole:\n        legends.push(legendLayout(view, mark));\n        break;\n\n      case FrameRole:\n      case ScopeRole:\n      case RowHeader:\n      case RowFooter:\n      case RowTitle:\n      case ColHeader:\n      case ColFooter:\n      case ColTitle:\n        xBounds.union(mark.bounds);\n        yBounds.union(mark.bounds);\n        break;\n\n      default:\n        viewBounds.union(mark.bounds);\n    }\n  } // layout legends, adjust viewBounds\n\n\n  if (legends.length) {\n    // group legends by orient\n    const l = {};\n    legends.forEach(item => {\n      orient = item.orient || Right;\n      if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n    }); // perform grid layout for each orient group\n\n    for (const orient in l) {\n      const g = l[orient];\n      gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n    } // update view bounds\n\n\n    legends.forEach(item => {\n      const b = item.bounds;\n\n      if (!b.equals(item._bounds)) {\n        item.bounds = item._bounds;\n        view.dirty(item); // dirty previous location\n\n        item.bounds = b;\n        view.dirty(item);\n      }\n\n      if (_.autosize && _.autosize.type === Fit) {\n        // For autosize fit, incorporate the orthogonal dimension only.\n        // Legends that overrun the chart area will then be clipped;\n        // otherwise the chart area gets reduced to nothing!\n        switch (item.orient) {\n          case Left:\n          case Right:\n            viewBounds.add(b.x1, 0).add(b.x2, 0);\n            break;\n\n          case Top:\n          case Bottom:\n            viewBounds.add(0, b.y1).add(0, b.y2);\n        }\n      } else {\n        viewBounds.union(b);\n      }\n    });\n  } // combine bounding boxes\n\n\n  viewBounds.union(xBounds).union(yBounds); // layout title, adjust bounds\n\n  if (title) {\n    viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n  } // override aggregated view bounds if content is clipped\n\n\n  if (group.clip) {\n    viewBounds.set(0, 0, group.width || 0, group.height || 0);\n  } // perform size adjustment\n\n\n  viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n  const auto = _.autosize || {},\n        type = auto.type;\n  if (view._autosize < 1 || !type) return;\n  let viewWidth = view._width,\n      viewHeight = view._height,\n      width = Math.max(0, group.width || 0),\n      left = Math.max(0, Math.ceil(-viewBounds.x1)),\n      height = Math.max(0, group.height || 0),\n      top = Math.max(0, Math.ceil(-viewBounds.y1));\n  const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n        bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n  if (auto.contains === Padding) {\n    const padding = view.padding();\n    viewWidth -= padding.left + padding.right;\n    viewHeight -= padding.top + padding.bottom;\n  }\n\n  if (type === None) {\n    left = 0;\n    top = 0;\n    width = viewWidth;\n    height = viewHeight;\n  } else if (type === Fit) {\n    width = Math.max(0, viewWidth - left - right);\n    height = Math.max(0, viewHeight - top - bottom);\n  } else if (type === FitX) {\n    width = Math.max(0, viewWidth - left - right);\n    viewHeight = height + top + bottom;\n  } else if (type === FitY) {\n    viewWidth = width + left + right;\n    height = Math.max(0, viewHeight - top - bottom);\n  } else if (type === Pad) {\n    viewWidth = width + left + right;\n    viewHeight = height + top + bottom;\n  }\n\n  view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, isContinuous, Sequential, Linear, Time, UTC, Pow, Sqrt, Ordinal, scaleImplicit, Log, Symlog, isLogarithmic, BinOrdinal, bandSpace, isInterpolating, interpolateRange, quantizeInterpolator, interpolateColors, interpolate, Band, Point, scheme, Threshold, Quantile, Quantize, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n *   desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n *   These must be legal domain values for the provided scale.\n *   If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n *   to use in conjunction with scale.tickFormat. Legal values are\n *   any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n *   If provided, the formatSpecifier argument is ignored.\n */\n\nfunction AxisTicks(params) {\n  Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n  transform(_, pulse) {\n    if (this.value && !_.modified()) {\n      return pulse.StopPropagation;\n    }\n\n    var locale = pulse.dataflow.locale(),\n        out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        ticks = this.value,\n        scale = _.scale,\n        tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n        count = tickCount(scale, tally, _.minstep),\n        format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n        values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n    if (ticks) out.rem = ticks;\n    ticks = values.map((value, i) => ingest({\n      index: i / (values.length - 1 || 1),\n      value: value,\n      label: format(value)\n    }));\n\n    if (_.extra && ticks.length) {\n      // add an extra tick pegged to the initial domain value\n      // this is used to generate axes with 'binned' domains\n      ticks.push(ingest({\n        index: -1,\n        extra: {\n          value: ticks[0].value\n        },\n        label: ''\n      }));\n    }\n\n    out.source = ticks;\n    out.add = ticks;\n    this.value = ticks;\n    return out;\n  }\n\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\n\nfunction DataJoin(params) {\n  Transform.call(this, null, params);\n}\n\nfunction defaultItemCreate() {\n  return ingest({});\n}\n\nfunction newMap(key) {\n  const map = fastmap().test(t => t.exit);\n\n  map.lookup = t => map.get(key(t));\n\n  return map;\n}\n\ninherits(DataJoin, Transform, {\n  transform(_, pulse) {\n    var df = pulse.dataflow,\n        out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        item = _.item || defaultItemCreate,\n        key = _.key || tupleid,\n        map = this.value; // prevent transient (e.g., hover) requests from\n    // cascading across marks derived from marks\n\n    if (isArray(out.encode)) {\n      out.encode = null;\n    }\n\n    if (map && (_.modified('key') || pulse.modified(key))) {\n      error('DataJoin does not support modified key function or fields.');\n    }\n\n    if (!map) {\n      pulse = pulse.addAll();\n      this.value = map = newMap(key);\n    }\n\n    pulse.visit(pulse.ADD, t => {\n      const k = key(t);\n      let x = map.get(k);\n\n      if (x) {\n        if (x.exit) {\n          map.empty--;\n          out.add.push(x);\n        } else {\n          out.mod.push(x);\n        }\n      } else {\n        x = item(t);\n        map.set(k, x);\n        out.add.push(x);\n      }\n\n      x.datum = t;\n      x.exit = false;\n    });\n    pulse.visit(pulse.MOD, t => {\n      const k = key(t),\n            x = map.get(k);\n\n      if (x) {\n        x.datum = t;\n        out.mod.push(x);\n      }\n    });\n    pulse.visit(pulse.REM, t => {\n      const k = key(t),\n            x = map.get(k);\n\n      if (t === x.datum && !x.exit) {\n        out.rem.push(x);\n        x.exit = true;\n        ++map.empty;\n      }\n    });\n    if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n    if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n      df.runAfter(map.clean);\n    }\n\n    return out;\n  }\n\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n *   parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n *   mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\n\nfunction Encode(params) {\n  Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n  transform(_, pulse) {\n    var out = pulse.fork(pulse.ADD_REM),\n        fmod = _.mod || false,\n        encoders = _.encoders,\n        encode = pulse.encode; // if an array, the encode directive includes additional sets\n    // that must be defined in order for the primary set to be invoked\n    // e.g., only run the update set if the hover set is defined\n\n    if (isArray(encode)) {\n      if (out.changed() || encode.every(e => encoders[e])) {\n        encode = encode[0];\n        out.encode = null; // consume targeted encode directive\n      } else {\n        return pulse.StopPropagation;\n      }\n    } // marshall encoder functions\n\n\n    var reenter = encode === 'enter',\n        update = encoders.update || falsy,\n        enter = encoders.enter || falsy,\n        exit = encoders.exit || falsy,\n        set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n    if (pulse.changed(pulse.ADD)) {\n      pulse.visit(pulse.ADD, t => {\n        enter(t, _);\n        update(t, _);\n      });\n      out.modifies(enter.output);\n      out.modifies(update.output);\n\n      if (set !== falsy && set !== update) {\n        pulse.visit(pulse.ADD, t => {\n          set(t, _);\n        });\n        out.modifies(set.output);\n      }\n    }\n\n    if (pulse.changed(pulse.REM) && exit !== falsy) {\n      pulse.visit(pulse.REM, t => {\n        exit(t, _);\n      });\n      out.modifies(exit.output);\n    }\n\n    if (reenter || set !== falsy) {\n      const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n\n      if (reenter) {\n        pulse.visit(flag, t => {\n          const mod = enter(t, _) || fmod;\n          if (set(t, _) || mod) out.mod.push(t);\n        });\n        if (out.mod.length) out.modifies(enter.output);\n      } else {\n        pulse.visit(flag, t => {\n          if (set(t, _) || fmod) out.mod.push(t);\n        });\n      }\n\n      if (out.mod.length) out.modifies(set.output);\n    }\n\n    return out.changed() ? out : pulse.StopPropagation;\n  }\n\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n *   desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n *   include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n *   These must be legal domain values for the provided scale.\n *   If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n *   to use in conjunction with scale.tickFormat. Legal values are\n *   any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n *   If provided, the formatSpecifier argument is ignored.\n */\n\nfunction LegendEntries(params) {\n  Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n  transform(_, pulse) {\n    if (this.value != null && !_.modified()) {\n      return pulse.StopPropagation;\n    }\n\n    var locale = pulse.dataflow.locale(),\n        out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        items = this.value,\n        type = _.type || SymbolLegend,\n        scale = _.scale,\n        limit = +_.limit,\n        count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n        lskip = !!_.values || type === SymbolLegend,\n        format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n        values = _.values || labelValues(scale, count),\n        domain,\n        fraction,\n        size,\n        offset,\n        ellipsis;\n    if (items) out.rem = items;\n\n    if (type === SymbolLegend) {\n      if (limit && values.length > limit) {\n        pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n        items = values.slice(0, limit - 1);\n        ellipsis = true;\n      } else {\n        items = values;\n      }\n\n      if (isFunction(size = _.size)) {\n        // if first value maps to size zero, remove from list (vega#717)\n        if (!_.values && scale(items[0]) === 0) {\n          items = items.slice(1);\n        } // compute size offset for legend entries\n\n\n        offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n      } else {\n        size = constant(offset = size || 8);\n      }\n\n      items = items.map((value, index) => ingest({\n        index: index,\n        label: format(value, index, items),\n        value: value,\n        offset: offset,\n        size: size(value, _)\n      }));\n\n      if (ellipsis) {\n        ellipsis = values[items.length];\n        items.push(ingest({\n          index: items.length,\n          label: \"\\u2026\".concat(values.length - items.length, \" entries\"),\n          value: ellipsis,\n          offset: offset,\n          size: size(ellipsis, _)\n        }));\n      }\n    } else if (type === GradientLegend) {\n      domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain)); // if automatic label generation produces 2 or fewer values,\n      // use the domain end points instead (fixes vega/vega#1364)\n\n      if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n        values = [domain[0], peek(domain)];\n      }\n\n      items = values.map((value, index) => ingest({\n        index: index,\n        label: format(value, index, values),\n        value: value,\n        perc: fraction(value)\n      }));\n    } else {\n      size = values.length - 1;\n      fraction = labelFraction(scale);\n      items = values.map((value, index) => ingest({\n        index: index,\n        label: format(value, index, values),\n        value: value,\n        perc: index ? fraction(value) : 0,\n        perc2: index === size ? 1 : fraction(values[index + 1])\n      }));\n    }\n\n    out.source = items;\n    out.add = items;\n    this.value = items;\n    return out;\n  }\n\n});\n\nconst sourceX = t => t.source.x;\n\nconst sourceY = t => t.source.y;\n\nconst targetX = t => t.target.x;\n\nconst targetY = t => t.target.y;\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\n\nfunction LinkPath(params) {\n  Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n  'type': 'LinkPath',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'sourceX',\n    'type': 'field',\n    'default': 'source.x'\n  }, {\n    'name': 'sourceY',\n    'type': 'field',\n    'default': 'source.y'\n  }, {\n    'name': 'targetX',\n    'type': 'field',\n    'default': 'target.x'\n  }, {\n    'name': 'targetY',\n    'type': 'field',\n    'default': 'target.y'\n  }, {\n    'name': 'orient',\n    'type': 'enum',\n    'default': 'vertical',\n    'values': ['horizontal', 'vertical', 'radial']\n  }, {\n    'name': 'shape',\n    'type': 'enum',\n    'default': 'line',\n    'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n  }, {\n    'name': 'require',\n    'type': 'signal'\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'path'\n  }]\n};\ninherits(LinkPath, Transform, {\n  transform(_, pulse) {\n    var sx = _.sourceX || sourceX,\n        sy = _.sourceY || sourceY,\n        tx = _.targetX || targetX,\n        ty = _.targetY || targetY,\n        as = _.as || 'path',\n        orient = _.orient || 'vertical',\n        shape = _.shape || 'line',\n        path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n    if (!path) {\n      error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n    }\n\n    pulse.visit(pulse.SOURCE, t => {\n      t[as] = path(sx(t), sy(t), tx(t), ty(t));\n    });\n    return pulse.reflow(_.modified()).modifies(as);\n  }\n\n});\n\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\n\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst arc = (sx, sy, tx, ty) => {\n  var dx = tx - sx,\n      dy = ty - sy,\n      rr = Math.sqrt(dx * dx + dy * dy) / 2,\n      ra = 180 * Math.atan2(dy, dx) / Math.PI;\n  return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\n\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst curve = (sx, sy, tx, ty) => {\n  const dx = tx - sx,\n        dy = ty - sy,\n        ix = 0.2 * (dx + dy),\n        iy = 0.2 * (dy - dx);\n  return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\n\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\n\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\n\nconst orthoR = (sa, sr, ta, tr) => {\n  const sc = Math.cos(sa),\n        ss = Math.sin(sa),\n        tc = Math.cos(ta),\n        ts = Math.sin(ta),\n        sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n  return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\n\nconst diagonalX = (sx, sy, tx, ty) => {\n  const m = (sx + tx) / 2;\n  return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\n\nconst diagonalY = (sx, sy, tx, ty) => {\n  const m = (sy + ty) / 2;\n  return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\n\nconst diagonalR = (sa, sr, ta, tr) => {\n  const sc = Math.cos(sa),\n        ss = Math.sin(sa),\n        tc = Math.cos(ta),\n        ts = Math.sin(ta),\n        mr = (sr + tr) / 2;\n  return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\n\nconst Paths = fastmap({\n  'line': line,\n  'line-radial': lineR,\n  'arc': arc,\n  'arc-radial': arcR,\n  'curve': curve,\n  'curve-radial': curveR,\n  'orthogonal-horizontal': orthoX,\n  'orthogonal-vertical': orthoY,\n  'orthogonal-radial': orthoR,\n  'diagonal-horizontal': diagonalX,\n  'diagonal-vertical': diagonalY,\n  'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\n\nfunction Pie(params) {\n  Transform.call(this, null, params);\n}\nPie.Definition = {\n  'type': 'Pie',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'startAngle',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'endAngle',\n    'type': 'number',\n    'default': 6.283185307179586\n  }, {\n    'name': 'sort',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['startAngle', 'endAngle']\n  }]\n};\ninherits(Pie, Transform, {\n  transform(_, pulse) {\n    var as = _.as || ['startAngle', 'endAngle'],\n        startAngle = as[0],\n        endAngle = as[1],\n        field = _.field || one,\n        start = _.startAngle || 0,\n        stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n        data = pulse.source,\n        values = data.map(field),\n        n = values.length,\n        a = start,\n        k = (stop - start) / sum(values),\n        index = range(n),\n        i,\n        t,\n        v;\n\n    if (_.sort) {\n      index.sort((a, b) => values[a] - values[b]);\n    }\n\n    for (i = 0; i < n; ++i) {\n      v = values[index[i]];\n      t = data[index[i]];\n      t[startAngle] = a;\n      t[endAngle] = a += v * k;\n    }\n\n    this.value = values;\n    return pulse.reflow(_.modified()).modifies(as);\n  }\n\n});\n\nconst DEFAULT_COUNT = 5;\n\nfunction includeZero(scale) {\n  const type = scale.type;\n  return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\n\nfunction includePad(type) {\n  return isContinuous(type) && type !== Sequential;\n}\n\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Scale(params) {\n  Transform.call(this, null, params);\n  this.modified(true); // always treat as modified\n}\ninherits(Scale, Transform, {\n  transform(_, pulse) {\n    var df = pulse.dataflow,\n        scale$1 = this.value,\n        key = scaleKey(_);\n\n    if (!scale$1 || key !== scale$1.type) {\n      this.value = scale$1 = scale(key)();\n    }\n\n    for (key in _) if (!SKIP[key]) {\n      // padding is a scale property for band/point but not others\n      if (key === 'padding' && includePad(scale$1.type)) continue; // invoke scale property setter, raise warning if not found\n\n      isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n    }\n\n    configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n    return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n  }\n\n});\n\nfunction scaleKey(_) {\n  var t = _.type,\n      d = '',\n      n; // backwards compatibility pre Vega 5.\n\n  if (t === Sequential) return Sequential + '-' + Linear;\n\n  if (isContinuousColor(_)) {\n    n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n    d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n  }\n\n  return (d + t || Linear).toLowerCase();\n}\n\nfunction isContinuousColor(_) {\n  const t = _.type;\n  return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\n\nfunction configureDomain(scale, _, df) {\n  // check raw domain, if provided use that and exit early\n  const raw = rawDomain(scale, _.domainRaw, df);\n  if (raw > -1) return raw;\n  var domain = _.domain,\n      type = scale.type,\n      zero = _.zero || _.zero === undefined && includeZero(scale),\n      n,\n      mid;\n  if (!domain) return 0; // adjust continuous domain for minimum pixel padding\n\n  if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n    domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n  } // adjust domain based on zero, min, max settings\n\n\n  if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n    n = (domain = domain.slice()).length - 1 || 1;\n\n    if (zero) {\n      if (domain[0] > 0) domain[0] = 0;\n      if (domain[n] < 0) domain[n] = 0;\n    }\n\n    if (_.domainMin != null) domain[0] = _.domainMin;\n    if (_.domainMax != null) domain[n] = _.domainMax;\n\n    if (_.domainMid != null) {\n      mid = _.domainMid;\n      const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n      if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n      domain.splice(i, 0, mid);\n    }\n  } // set the scale domain\n\n\n  scale.domain(domainCheck(type, domain, df)); // if ordinal scale domain is defined, prevent implicit\n  // domain construction as side-effect of scale lookup\n\n  if (type === Ordinal) {\n    scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n  } // perform 'nice' adjustment as requested\n\n\n  if (_.nice && scale.nice) {\n    scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n  } // return the cardinality of the domain\n\n\n  return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n  if (raw) {\n    scale.domain(domainCheck(scale.type, raw, df));\n    return raw.length;\n  } else {\n    return -1;\n  }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n  var span = Math.abs(peek(range) - range[0]),\n      frac = span / (span - 2 * pad),\n      d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n  domain = domain.slice();\n  domain[0] = d[0];\n  domain[domain.length - 1] = d[1];\n  return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n  if (isLogarithmic(type)) {\n    // sum signs of domain values\n    // if all pos or all neg, abs(sum) === domain.length\n    var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n\n    if (s !== domain.length) {\n      df.warn('Log scale domain includes zero: ' + stringValue(domain));\n    }\n  }\n\n  return domain;\n}\n\nfunction configureBins(scale, _, count) {\n  let bins = _.bins;\n\n  if (bins && !isArray(bins)) {\n    // generate bin boundary array\n    const domain = scale.domain(),\n          lo = domain[0],\n          hi = peek(domain),\n          step = bins.step;\n    let start = bins.start == null ? lo : bins.start,\n        stop = bins.stop == null ? hi : bins.stop;\n    if (!step) error('Scale bins parameter missing step property.');\n    if (start < lo) start = step * Math.ceil(lo / step);\n    if (stop > hi) stop = step * Math.floor(hi / step);\n    bins = range(start, stop + step / 2, step);\n  }\n\n  if (bins) {\n    // assign bin boundaries to scale instance\n    scale.bins = bins;\n  } else if (scale.bins) {\n    // no current bins, remove bins if previously set\n    delete scale.bins;\n  } // special handling for bin-ordinal scales\n\n\n  if (scale.type === BinOrdinal) {\n    if (!bins) {\n      // the domain specifies the bins\n      scale.bins = scale.domain();\n    } else if (!_.domain && !_.domainRaw) {\n      // the bins specify the domain\n      scale.domain(bins);\n      count = bins.length;\n    }\n  } // return domain cardinality\n\n\n  return count;\n}\n\nfunction configureRange(scale, _, count) {\n  var type = scale.type,\n      round = _.round || false,\n      range = _.range; // if range step specified, calculate full range extent\n\n  if (_.rangeStep != null) {\n    range = configureRangeStep(type, _, count);\n  } // else if a range scheme is defined, use that\n  else if (_.scheme) {\n      range = configureScheme(type, _, count);\n\n      if (isFunction(range)) {\n        if (scale.interpolator) {\n          return scale.interpolator(range);\n        } else {\n          error(\"Scale type \".concat(type, \" does not support interpolating color schemes.\"));\n        }\n      }\n    } // given a range array for an interpolating scale, convert to interpolator\n\n\n  if (range && isInterpolating(type)) {\n    return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n  } // configure rounding / interpolation\n\n\n  if (range && _.interpolate && scale.interpolate) {\n    scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n  } else if (isFunction(scale.round)) {\n    scale.round(round);\n  } else if (isFunction(scale.rangeRound)) {\n    scale.interpolate(round ? interpolateRound : interpolate$1);\n  }\n\n  if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n  if (type !== Band && type !== Point) {\n    error('Only band and point scales support rangeStep.');\n  } // calculate full range based on requested step size and padding\n\n\n  var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n      inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n  return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n  var extent = _.schemeExtent,\n      name,\n      scheme$1;\n\n  if (isArray(_.scheme)) {\n    scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n  } else {\n    name = _.scheme.toLowerCase();\n    scheme$1 = scheme(name);\n    if (!scheme$1) error(\"Unrecognized scheme name: \".concat(_.scheme));\n  } // determine size for potential discrete range\n\n\n  count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count; // adjust and/or quantize scheme as appropriate\n\n  return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n  return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\n\nfunction flip(array, reverse) {\n  return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n *   function for sorting tuples.\n */\n\nfunction SortItems(params) {\n  Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n  transform(_, pulse) {\n    const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n    if (mod) pulse.source.sort(stableCompare(_.sort));\n    this.modified(mod);\n    return pulse;\n  }\n\n});\n\nconst Zero = 'zero',\n      Center = 'center',\n      Normalize = 'normalize',\n      DefOutput = ['y0', 'y1'];\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\n\nfunction Stack(params) {\n  Transform.call(this, null, params);\n}\nStack.Definition = {\n  'type': 'Stack',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'offset',\n    'type': 'enum',\n    'default': Zero,\n    'values': [Zero, Center, Normalize]\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': DefOutput\n  }]\n};\ninherits(Stack, Transform, {\n  transform(_, pulse) {\n    var as = _.as || DefOutput,\n        y0 = as[0],\n        y1 = as[1],\n        sort = stableCompare(_.sort),\n        field = _.field || one,\n        stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n        groups,\n        i,\n        n,\n        max; // partition, sum, and sort the stack groups\n\n    groups = partition(pulse.source, _.groupby, sort, field); // compute stack layouts per group\n\n    for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n      stack(groups[i], max, field, y0, y1);\n    }\n\n    return pulse.reflow(_.modified()).modifies(as);\n  }\n\n});\n\nfunction stackCenter(group, max, field, y0, y1) {\n  var last = (max - group.sum) / 2,\n      m = group.length,\n      j = 0,\n      t;\n\n  for (; j < m; ++j) {\n    t = group[j];\n    t[y0] = last;\n    t[y1] = last += Math.abs(field(t));\n  }\n}\n\nfunction stackNormalize(group, max, field, y0, y1) {\n  var scale = 1 / group.sum,\n      last = 0,\n      m = group.length,\n      j = 0,\n      v = 0,\n      t;\n\n  for (; j < m; ++j) {\n    t = group[j];\n    t[y0] = last;\n    t[y1] = last = scale * (v += Math.abs(field(t)));\n  }\n}\n\nfunction stackZero(group, max, field, y0, y1) {\n  var lastPos = 0,\n      lastNeg = 0,\n      m = group.length,\n      j = 0,\n      v,\n      t;\n\n  for (; j < m; ++j) {\n    t = group[j];\n    v = +field(t);\n\n    if (v < 0) {\n      t[y0] = lastNeg;\n      t[y1] = lastNeg += v;\n    } else {\n      t[y0] = lastPos;\n      t[y1] = lastPos += v;\n    }\n  }\n}\n\nfunction partition(data, groupby, sort, field) {\n  var groups = [],\n      get = f => f(t),\n      map,\n      i,\n      n,\n      m,\n      t,\n      k,\n      g,\n      s,\n      max; // partition data points into stack groups\n\n\n  if (groupby == null) {\n    groups.push(data.slice());\n  } else {\n    for (map = {}, i = 0, n = data.length; i < n; ++i) {\n      t = data[i];\n      k = groupby.map(get);\n      g = map[k];\n\n      if (!g) {\n        map[k] = g = [];\n        groups.push(g);\n      }\n\n      g.push(t);\n    }\n  } // compute sums of groups, sort groups as needed\n\n\n  for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n    g = groups[k];\n\n    for (i = 0, s = 0, n = g.length; i < n; ++i) {\n      s += Math.abs(field(g[i]));\n    }\n\n    g.sum = s;\n    if (s > max) max = s;\n    if (sort) g.sort(sort);\n  }\n\n  groups.max = max;\n  return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(v * cz);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, z);\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = hypot(x, y, z);\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","import clipRectangle from \"./rectangle.js\";\n\nexport default function() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains.js\";\nimport {default as distance} from \"./distance.js\";\nimport {epsilon2, radians} from \"./math.js\";\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y,\n        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n","export {default as geoArea} from \"./area.js\";\nexport {default as geoBounds} from \"./bounds.js\";\nexport {default as geoCentroid} from \"./centroid.js\";\nexport {default as geoCircle} from \"./circle.js\";\nexport {default as geoClipAntimeridian} from \"./clip/antimeridian.js\";\nexport {default as geoClipCircle} from \"./clip/circle.js\";\nexport {default as geoClipExtent} from \"./clip/extent.js\"; // DEPRECATED! Use d3.geoIdentity().clipExtent(…).\nexport {default as geoClipRectangle} from \"./clip/rectangle.js\";\nexport {default as geoContains} from \"./contains.js\";\nexport {default as geoDistance} from \"./distance.js\";\nexport {default as geoGraticule, graticule10 as geoGraticule10} from \"./graticule.js\";\nexport {default as geoInterpolate} from \"./interpolate.js\";\nexport {default as geoLength} from \"./length.js\";\nexport {default as geoPath} from \"./path/index.js\";\nexport {default as geoAlbers} from \"./projection/albers.js\";\nexport {default as geoAlbersUsa} from \"./projection/albersUsa.js\";\nexport {default as geoAzimuthalEqualArea, azimuthalEqualAreaRaw as geoAzimuthalEqualAreaRaw} from \"./projection/azimuthalEqualArea.js\";\nexport {default as geoAzimuthalEquidistant, azimuthalEquidistantRaw as geoAzimuthalEquidistantRaw} from \"./projection/azimuthalEquidistant.js\";\nexport {default as geoConicConformal, conicConformalRaw as geoConicConformalRaw} from \"./projection/conicConformal.js\";\nexport {default as geoConicEqualArea, conicEqualAreaRaw as geoConicEqualAreaRaw} from \"./projection/conicEqualArea.js\";\nexport {default as geoConicEquidistant, conicEquidistantRaw as geoConicEquidistantRaw} from \"./projection/conicEquidistant.js\";\nexport {default as geoEqualEarth, equalEarthRaw as geoEqualEarthRaw} from \"./projection/equalEarth.js\";\nexport {default as geoEquirectangular, equirectangularRaw as geoEquirectangularRaw} from \"./projection/equirectangular.js\";\nexport {default as geoGnomonic, gnomonicRaw as geoGnomonicRaw} from \"./projection/gnomonic.js\";\nexport {default as geoIdentity} from \"./projection/identity.js\";\nexport {default as geoProjection, projectionMutator as geoProjectionMutator} from \"./projection/index.js\";\nexport {default as geoMercator, mercatorRaw as geoMercatorRaw} from \"./projection/mercator.js\";\nexport {default as geoNaturalEarth1, naturalEarth1Raw as geoNaturalEarth1Raw} from \"./projection/naturalEarth1.js\";\nexport {default as geoOrthographic, orthographicRaw as geoOrthographicRaw} from \"./projection/orthographic.js\";\nexport {default as geoStereographic, stereographicRaw as geoStereographicRaw} from \"./projection/stereographic.js\";\nexport {default as geoTransverseMercator, transverseMercatorRaw as geoTransverseMercatorRaw} from \"./projection/transverseMercator.js\";\nexport {default as geoRotation} from \"./rotation.js\";\nexport {default as geoStream} from \"./stream.js\";\nexport {default as geoTransform} from \"./transform.js\";\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n  return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n  return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n  x = exp(2 * x);\n  return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n  return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n  return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n  return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n  return log(x + sqrt(x * x - 1));\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, asin, atan2, cos, degrees, epsilon, halfPi, log, radians, sin, sqrt, tan} from \"./math.js\";\n\nexport function airyRaw(beta) {\n  var tanBeta_2 = tan(beta / 2),\n      b = 2 * log(cos(beta / 2)) / (tanBeta_2 * tanBeta_2);\n\n  function forward(x, y) {\n    var cosx = cos(x),\n        cosy = cos(y),\n        siny = sin(y),\n        cosz = cosy * cosx,\n        k = -((1 - cosz ? log((1 + cosz) / 2) / (1 - cosz) : -0.5) + b / (1 + cosz));\n    return [k * cosy * sin(x), k * siny];\n  }\n\n  forward.invert = function(x, y) {\n    var r = sqrt(x * x + y * y),\n        z = -beta / 2,\n        i = 50, delta;\n    if (!r) return [0, 0];\n    do {\n      var z_2 = z / 2,\n          cosz_2 = cos(z_2),\n          sinz_2 = sin(z_2),\n          tanz_2 = sinz_2 / cosz_2,\n          lnsecz_2 = -log(abs(cosz_2));\n      z -= delta = (2 / tanz_2 * lnsecz_2 - b * tanz_2 - r) / (-lnsecz_2 / (sinz_2 * sinz_2) + 1 - b / (2 * cosz_2 * cosz_2)) * (cosz_2 < 0 ? 0.7 : 1);\n    } while (abs(delta) > epsilon && --i > 0);\n    var sinz = sin(z);\n    return [atan2(x * sinz, r * cos(z)), asin(y * sinz / r)];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var beta = halfPi,\n      m = projectionMutator(airyRaw),\n      p = m(beta);\n\n  p.radius = function(_) {\n    return arguments.length ? m(beta = _ * radians) : beta * degrees;\n  };\n\n  return p\n      .scale(179.976)\n      .clipAngle(147);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, acos, cos, epsilon, pi, sin, sinci, sqrt} from \"./math.js\";\n\nexport function aitoffRaw(x, y) {\n  var cosy = cos(y), sincia = sinci(acos(cosy * cos(x /= 2)));\n  return [2 * cosy * sin(x) * sincia, sin(y) * sincia];\n}\n\n// Abort if [x, y] is not within an ellipse centered at [0, 0] with\n// semi-major axis pi and semi-minor axis pi/2.\naitoffRaw.invert = function(x, y) {\n  if (x * x + 4 * y * y > pi * pi + epsilon) return;\n  var x1 = x, y1 = y, i = 25;\n  do {\n    var sinx = sin(x1),\n        sinx_2 = sin(x1 / 2),\n        cosx_2 = cos(x1 / 2),\n        siny = sin(y1),\n        cosy = cos(y1),\n        sin_2y = sin(2 * y1),\n        sin2y = siny * siny,\n        cos2y = cosy * cosy,\n        sin2x_2 = sinx_2 * sinx_2,\n        c = 1 - cos2y * cosx_2 * cosx_2,\n        e = c ? acos(cosy * cosx_2) * sqrt(f = 1 / c) : f = 0,\n        f,\n        fx = 2 * e * cosy * sinx_2 - x,\n        fy = e * siny - y,\n        dxdx = f * (cos2y * sin2x_2 + e * cosy * cosx_2 * sin2y),\n        dxdy = f * (0.5 * sinx * sin_2y - e * 2 * siny * sinx_2),\n        dydx = f * 0.25 * (sin_2y * sinx_2 - e * siny * cos2y * sinx),\n        dydy = f * (sin2y * cosx_2 + e * sin2x_2 * cosy),\n        z = dxdy * dydx - dydy * dxdx;\n    if (!z) break;\n    var dx = (fy * dxdy - fx * dydy) / z,\n        dy = (fx * dydx - fy * dxdx) / z;\n    x1 -= dx, y1 -= dy;\n  } while ((abs(dx) > epsilon || abs(dy) > epsilon) && --i > 0);\n  return [x1, y1];\n};\n\nexport default function() {\n  return projection(aitoffRaw)\n      .scale(152.63);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, atan2, cos, degrees, epsilon, radians, sin, tan} from \"./math.js\";\n\nexport function armadilloRaw(phi0) {\n  var sinPhi0 = sin(phi0),\n      cosPhi0 = cos(phi0),\n      sPhi0 = phi0 >= 0 ? 1 : -1,\n      tanPhi0 = tan(sPhi0 * phi0),\n      k = (1 + sinPhi0 - cosPhi0) / 2;\n\n  function forward(lambda, phi) {\n    var cosPhi = cos(phi),\n        cosLambda = cos(lambda /= 2);\n    return [\n      (1 + cosPhi) * sin(lambda),\n      (sPhi0 * phi > -atan2(cosLambda, tanPhi0) - 1e-3 ? 0 : -sPhi0 * 10) + k + sin(phi) * cosPhi0 - (1 + cosPhi) * sinPhi0 * cosLambda // TODO D3 core should allow null or [NaN, NaN] to be returned.\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var lambda = 0,\n        phi = 0,\n        i = 50;\n    do {\n      var cosLambda = cos(lambda),\n          sinLambda = sin(lambda),\n          cosPhi = cos(phi),\n          sinPhi = sin(phi),\n          A = 1 + cosPhi,\n          fx = A * sinLambda - x,\n          fy = k + sinPhi * cosPhi0 - A * sinPhi0 * cosLambda - y,\n          dxdLambda = A * cosLambda / 2,\n          dxdPhi = -sinLambda * sinPhi,\n          dydLambda = sinPhi0 * A * sinLambda / 2,\n          dydPhi = cosPhi0 * cosPhi + sinPhi0 * cosLambda * sinPhi,\n          denominator = dxdPhi * dydLambda - dydPhi * dxdLambda,\n          dLambda = (fy * dxdPhi - fx * dydPhi) / denominator / 2,\n          dPhi = (fx * dydLambda - fy * dxdLambda) / denominator;\n      if (abs(dPhi) > 2) dPhi /= 2;\n      lambda -= dLambda, phi -= dPhi;\n    } while ((abs(dLambda) > epsilon || abs(dPhi) > epsilon) && --i > 0);\n    return sPhi0 * phi > -atan2(cos(lambda), tanPhi0) - 1e-3 ? [lambda * 2, phi] : null;\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var phi0 = 20 * radians,\n      sPhi0 = phi0 >= 0 ? 1 : -1,\n      tanPhi0 = tan(sPhi0 * phi0),\n      m = projectionMutator(armadilloRaw),\n      p = m(phi0),\n      stream_ = p.stream;\n\n  p.parallel = function(_) {\n    if (!arguments.length) return phi0 * degrees;\n    tanPhi0 = tan((sPhi0 = (phi0 = _ * radians) >= 0 ? 1 : -1) * phi0);\n    return m(phi0);\n  };\n\n  p.stream = function(stream) {\n    var rotate = p.rotate(),\n        rotateStream = stream_(stream),\n        sphereStream = (p.rotate([0, 0]), stream_(stream)),\n        precision = p.precision();\n    p.rotate(rotate);\n    rotateStream.sphere = function() {\n      sphereStream.polygonStart(), sphereStream.lineStart();\n      for (var lambda = sPhi0 * -180; sPhi0 * lambda < 180; lambda += sPhi0 * 90)\n        sphereStream.point(lambda, sPhi0 * 90);\n      if (phi0) while (sPhi0 * (lambda -= 3 * sPhi0 * precision) >= -180) {\n        sphereStream.point(lambda, sPhi0 * -atan2(cos(lambda * radians / 2), tanPhi0) * degrees);\n      }\n      sphereStream.lineEnd(), sphereStream.polygonEnd();\n    };\n    return rotateStream;\n  };\n\n  return p\n      .scale(218.695)\n      .center([0, 28.0974]);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, arcosh, arsinh, asin, atan2, cos, cosh, sign, sin, sinh, sqrt, tan} from \"./math.js\";\n\nexport function augustRaw(lambda, phi) {\n  var tanPhi = tan(phi / 2),\n      k = sqrt(1 - tanPhi * tanPhi),\n      c = 1 + k * cos(lambda /= 2),\n      x = sin(lambda) * k / c,\n      y = tanPhi / c,\n      x2 = x * x,\n      y2 = y * y;\n  return [\n    4 / 3 * x * (3 + x2 - 3 * y2),\n    4 / 3 * y * (3 + 3 * x2 - y2)\n  ];\n}\n\naugustRaw.invert = function(x, y) {\n  x *= 3 / 8, y *= 3 / 8;\n  if (!x && abs(y) > 1) return null;\n  var x2 = x * x,\n      y2 = y * y,\n      s = 1 + x2 + y2,\n      sin3Eta = sqrt((s - sqrt(s * s - 4 * y * y)) / 2),\n      eta = asin(sin3Eta) / 3,\n      xi = sin3Eta ? arcosh(abs(y / sin3Eta)) / 3 : arsinh(abs(x)) / 3,\n      cosEta = cos(eta),\n      coshXi = cosh(xi),\n      d = coshXi * coshXi - cosEta * cosEta;\n  return [\n    sign(x) * 2 * atan2(sinh(xi) * cosEta, 0.25 - d),\n    sign(y) * 2 * atan2(coshXi * sin(eta), 0.25 + d)\n  ];\n};\n\nexport default function() {\n  return projection(augustRaw)\n      .scale(66.1603);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, atan, cos, epsilon2, exp, halfPi, log, quarterPi, sign, sin, sqrt, sqrt2, tan} from \"./math.js\";\n\nvar sqrt8 = sqrt(8),\n    phi0 = log(1 + sqrt2);\n\nexport function bakerRaw(lambda, phi) {\n  var phi0 = abs(phi);\n  return phi0 < quarterPi\n      ? [lambda, log(tan(quarterPi + phi / 2))]\n      : [lambda * cos(phi0) * (2 * sqrt2 - 1 / sin(phi0)), sign(phi) * (2 * sqrt2 * (phi0 - quarterPi) - log(tan(phi0 / 2)))];\n}\n\nbakerRaw.invert = function(x, y) {\n  if ((y0 = abs(y)) < phi0) return [x, 2 * atan(exp(y)) - halfPi];\n  var phi = quarterPi, i = 25, delta, y0;\n  do {\n    var cosPhi_2 = cos(phi / 2), tanPhi_2 = tan(phi / 2);\n    phi -= delta = (sqrt8 * (phi - quarterPi) - log(tanPhi_2) - y0) / (sqrt8 - cosPhi_2 * cosPhi_2 / (2 * tanPhi_2));\n  } while (abs(delta) > epsilon2 && --i > 0);\n  return [x / (cos(phi) * (sqrt8 - 1 / sin(phi))), sign(y) * phi];\n};\n\nexport default function() {\n  return projection(bakerRaw)\n      .scale(112.314);\n}\n","import {geoProjectionMutator as projectionMutator, geoAzimuthalEquidistantRaw as azimuthalEquidistantRaw} from \"d3-geo\";\nimport {abs, acos, asin, atan, atan2, cos, degrees, halfPi, pi, radians, round, sin, sqrt, tan} from \"./math.js\";\n\nexport function berghausRaw(lobes) {\n  var k = 2 * pi / lobes;\n\n  function forward(lambda, phi) {\n    var p = azimuthalEquidistantRaw(lambda, phi);\n    if (abs(lambda) > halfPi) { // back hemisphere\n      var theta = atan2(p[1], p[0]),\n          r = sqrt(p[0] * p[0] + p[1] * p[1]),\n          theta0 = k * round((theta - halfPi) / k) + halfPi,\n          alpha = atan2(sin(theta -= theta0), 2 - cos(theta)); // angle relative to lobe end\n      theta = theta0 + asin(pi / r * sin(alpha)) - alpha;\n      p[0] = r * cos(theta);\n      p[1] = r * sin(theta);\n    }\n    return p;\n  }\n\n  forward.invert = function(x, y) {\n    var r = sqrt(x * x + y * y);\n    if (r > halfPi) {\n      var theta = atan2(y, x),\n          theta0 = k * round((theta - halfPi) / k) + halfPi,\n          s = theta > theta0 ? -1 : 1,\n          A = r * cos(theta0 - theta),\n          cotAlpha = 1 / tan(s * acos((A - pi) / sqrt(pi * (pi - 2 * A) + r * r)));\n      theta = theta0 + 2 * atan((cotAlpha + s * sqrt(cotAlpha * cotAlpha - 3)) / 3);\n      x = r * cos(theta), y = r * sin(theta);\n    }\n    return azimuthalEquidistantRaw.invert(x, y);\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var lobes = 5,\n      m = projectionMutator(berghausRaw),\n      p = m(lobes),\n      projectionStream = p.stream,\n      epsilon = 1e-2,\n      cr = -cos(epsilon * radians),\n      sr = sin(epsilon * radians);\n\n  p.lobes = function(_) {\n    return arguments.length ? m(lobes = +_) : lobes;\n  };\n\n  p.stream = function(stream) {\n    var rotate = p.rotate(),\n        rotateStream = projectionStream(stream),\n        sphereStream = (p.rotate([0, 0]), projectionStream(stream));\n    p.rotate(rotate);\n    rotateStream.sphere = function() {\n      sphereStream.polygonStart(), sphereStream.lineStart();\n      for (var i = 0, delta = 360 / lobes, delta0 = 2 * pi / lobes, phi = 90 - 180 / lobes, phi0 = halfPi; i < lobes; ++i, phi -= delta, phi0 -= delta0) {\n        sphereStream.point(atan2(sr * cos(phi0), cr) * degrees, asin(sr * sin(phi0)) * degrees);\n        if (phi < -90) {\n          sphereStream.point(-90, -180 - phi - epsilon);\n          sphereStream.point(-90, -180 - phi + epsilon);\n        } else {\n          sphereStream.point(90, phi + epsilon);\n          sphereStream.point(90, phi - epsilon);\n        }\n      }\n      sphereStream.lineEnd(), sphereStream.polygonEnd();\n    };\n    return rotateStream;\n  };\n\n  return p\n      .scale(87.8076)\n      .center([0, 17.1875])\n      .clipAngle(180 - 1e-3);\n}\n","import {geoAzimuthalEqualAreaRaw as azimuthalEqualAreaRaw, geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {asin, cos, sin} from \"./math.js\";\n\nexport function hammerRaw(A, B) {\n  if (arguments.length < 2) B = A;\n  if (B === 1) return azimuthalEqualAreaRaw;\n  if (B === Infinity) return hammerQuarticAuthalicRaw;\n\n  function forward(lambda, phi) {\n    var coordinates = azimuthalEqualAreaRaw(lambda / B, phi);\n    coordinates[0] *= A;\n    return coordinates;\n  }\n\n  forward.invert = function(x, y) {\n    var coordinates = azimuthalEqualAreaRaw.invert(x / A, y);\n    coordinates[0] *= B;\n    return coordinates;\n  };\n\n  return forward;\n}\n\nfunction hammerQuarticAuthalicRaw(lambda, phi) {\n  return [\n    lambda * cos(phi) / cos(phi /= 2),\n    2 * sin(phi)\n  ];\n}\n\nhammerQuarticAuthalicRaw.invert = function(x, y) {\n  var phi = 2 * asin(y / 2);\n  return [\n    x * cos(phi / 2) / cos(phi),\n    phi\n  ];\n};\n\nexport default function() {\n  var B = 2,\n      m = projectionMutator(hammerRaw),\n      p = m(B);\n\n  p.coefficient = function(_) {\n    if (!arguments.length) return B;\n    return m(B = +_);\n  };\n\n  return p\n    .scale(169.529);\n}\n","import {abs, epsilon, epsilon2} from \"./math.js\";\n\n// Approximate Newton-Raphson\n// Solve f(x) = y, start from x\nexport function solve(f, y, x) {\n  var steps = 100, delta, f0, f1;\n  x = x === undefined ? 0 : +x;\n  y = +y;\n  do {\n    f0 = f(x);\n    f1 = f(x + epsilon);\n    if (f0 === f1) f1 = f0 + epsilon;\n    x -= delta = (-1 * epsilon * (f0 - y)) / (f0 - f1);\n  } while (steps-- > 0 && abs(delta) > epsilon);\n  return steps < 0 ? NaN : x;\n}\n\n// Approximate Newton-Raphson in 2D\n// Solve f(a,b) = [x,y]\nexport function solve2d(f, MAX_ITERATIONS, eps) {\n  if (MAX_ITERATIONS === undefined) MAX_ITERATIONS = 40;\n  if (eps === undefined) eps = epsilon2;\n  return function(x, y, a, b) {\n    var err2, da, db;\n    a = a === undefined ? 0 : +a;\n    b = b === undefined ? 0 : +b;\n    for (var i = 0; i < MAX_ITERATIONS; i++) {\n      var p = f(a, b),\n        // diffs\n        tx = p[0] - x,\n        ty = p[1] - y;\n      if (abs(tx) < eps && abs(ty) < eps) break; // we're there!\n\n      // backtrack if we overshot\n      var h = tx * tx + ty * ty;\n      if (h > err2) {\n        a -= da /= 2;\n        b -= db /= 2;\n        continue;\n      }\n      err2 = h;\n\n      // partial derivatives\n      var ea = (a > 0 ? -1 : 1) * eps,\n        eb = (b > 0 ? -1 : 1) * eps,\n        pa = f(a + ea, b),\n        pb = f(a, b + eb),\n        dxa = (pa[0] - p[0]) / ea,\n        dya = (pa[1] - p[1]) / ea,\n        dxb = (pb[0] - p[0]) / eb,\n        dyb = (pb[1] - p[1]) / eb,\n        // determinant\n        D = dyb * dxa - dya * dxb,\n        // newton step — or half-step for small D\n        l = (abs(D) < 0.5 ? 0.5 : 1) / D;\n      da = (ty * dxb - tx * dyb) * l;\n      db = (tx * dya - ty * dxa) * l;\n      a += da;\n      b += db;\n      if (abs(da) < eps && abs(db) < eps) break; // we're crawling\n    }\n    return [a, b];\n  };\n}","import {geoProjection as projection} from \"d3-geo\";\nimport {hammerRaw} from \"./hammer.js\";\nimport {cos, pi, sin} from \"./math.js\";\nimport {solve2d} from \"./newton.js\";\n\n// Bertin 1953 as a modified Briesemeister\n// https://bl.ocks.org/Fil/5b9ee9636dfb6ffa53443c9006beb642\nexport function bertin1953Raw() {\n  var hammer = hammerRaw(1.68, 2),\n      fu = 1.4, k = 12;\n\n  function forward(lambda, phi) {\n\n    if (lambda + phi < -fu) {\n      var u = (lambda - phi + 1.6) * (lambda + phi + fu) / 8;\n      lambda += u;\n      phi -= 0.8 * u * sin(phi + pi / 2);\n    }\n\n    var r = hammer(lambda, phi);\n\n    var d = (1 - cos(lambda * phi)) / k;\n\n    if (r[1] < 0) {\n      r[0] *= 1 + d;\n    }\n    if (r[1] > 0) {\n      r[1] *= 1 + d / 1.5 * r[0] * r[0];\n    }\n\n    return r;\n  }\n  \n  forward.invert = solve2d(forward);\n  return forward;\n}\n\nexport default function() {\n  // this projection should not be rotated\n  return projection(bertin1953Raw())\n    .rotate([-16.5, -42])\n    .scale(176.57)\n    .center([7.93, 0.09]);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n  var cpsinPhi = cp * sin(phi), i = 30, delta;\n  do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n  while (abs(delta) > epsilon && --i > 0);\n  return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n  function forward(lambda, phi) {\n    return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n  }\n\n  forward.invert = function(x, y) {\n    return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n  };\n\n  return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n  return projection(mollweideRaw)\n      .scale(169.529);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {mollweideBromleyTheta} from \"./mollweide.js\";\nimport {abs, cos, epsilon, pi, quarterPi, sin, sqrt2} from \"./math.js\";\n\nvar k = 2.00276,\n    w = 1.11072;\n\nexport function boggsRaw(lambda, phi) {\n  var theta = mollweideBromleyTheta(pi, phi);\n  return [k * lambda / (1 / cos(phi) + w / cos(theta)), (phi + sqrt2 * sin(theta)) / k];\n}\n\nboggsRaw.invert = function(x, y) {\n  var ky = k * y, theta = y < 0 ? -quarterPi : quarterPi, i = 25, delta, phi;\n  do {\n    phi = ky - sqrt2 * sin(theta);\n    theta -= delta = (sin(2 * theta) + 2 * theta - pi * sin(phi)) / (2 * cos(2 * theta) + 2 + pi * cos(phi) * sqrt2 * cos(theta));\n  } while (abs(delta) > epsilon && --i > 0);\n  phi = ky - sqrt2 * sin(theta);\n  return [x * (1 / cos(phi) + w / cos(theta)) / k, phi];\n};\n\nexport default function() {\n  return projection(boggsRaw)\n      .scale(160.857);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {degrees, radians} from \"./math.js\";\n\nexport default function(projectAt) {\n  var phi0 = 0,\n      m = projectionMutator(projectAt),\n      p = m(phi0);\n\n  p.parallel = function(_) {\n    return arguments.length ? m(phi0 = _ * radians) : phi0 * degrees;\n  };\n\n  return p;\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {cos} from \"./math.js\";\n\nexport function sinusoidalRaw(lambda, phi) {\n  return [lambda * cos(phi), phi];\n}\n\nsinusoidalRaw.invert = function(x, y) {\n  return [x / cos(y), y];\n};\n\nexport default function() {\n  return projection(sinusoidalRaw)\n      .scale(152.63);\n}\n","import parallel1 from \"./parallel1.js\";\nimport {atan2, cos, sin, sqrt, tan} from \"./math.js\";\nimport {sinusoidalRaw} from \"./sinusoidal.js\";\n\nexport function bonneRaw(phi0) {\n  if (!phi0) return sinusoidalRaw;\n  var cotPhi0 = 1 / tan(phi0);\n\n  function forward(lambda, phi) {\n    var rho = cotPhi0 + phi0 - phi,\n        e = rho ? lambda * cos(phi) / rho : rho;\n    return [rho * sin(e), cotPhi0 - rho * cos(e)];\n  }\n\n  forward.invert = function(x, y) {\n    var rho = sqrt(x * x + (y = cotPhi0 - y) * y),\n        phi = cotPhi0 + phi0 - rho;\n    return [rho / cos(phi) * atan2(x, y), phi];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(bonneRaw)\n      .scale(123.082)\n      .center([0, 26.1441])\n      .parallel(45);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {atan2, cos, halfPi, sin, sqrt} from \"./math.js\";\n\nexport function bottomleyRaw(sinPsi) {\n\n  function forward(lambda, phi) {\n    var rho = halfPi - phi,\n        eta = rho ? lambda * sinPsi * sin(rho) / rho : rho;\n    return [rho * sin(eta) / sinPsi, halfPi - rho * cos(eta)];\n  }\n\n  forward.invert = function(x, y) {\n    var x1 = x * sinPsi,\n        y1 = halfPi - y,\n        rho = sqrt(x1 * x1 + y1 * y1),\n        eta = atan2(x1, y1);\n    return [(rho ? rho / sin(rho) : 1) * eta / sinPsi, halfPi - rho];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var sinPsi = 0.5,\n      m = projectionMutator(bottomleyRaw),\n      p = m(sinPsi);\n\n  p.fraction = function(_) {\n    return arguments.length ? m(sinPsi = +_) : sinPsi;\n  };\n\n  return p\n      .scale(158.837);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {pi} from \"./math.js\";\nimport {mollweideBromleyRaw} from \"./mollweide.js\";\n\nexport var bromleyRaw = mollweideBromleyRaw(1, 4 / pi, pi);\n\nexport default function() {\n  return projection(bromleyRaw)\n      .scale(152.63);\n}\n","import {geoCentroid as centroid, geoProjection as projection, geoRotation as rotation} from \"d3-geo\";\nimport {abs, acos, asin, atan2, cos, epsilon, floor, pi, radians, sin, sqrt} from \"./math.js\";\nimport {solve2d} from \"./newton.js\";\n\n// Azimuthal distance.\nfunction distance(dPhi, c1, s1, c2, s2, dLambda) {\n  var cosdLambda = cos(dLambda), r;\n  if (abs(dPhi) > 1 || abs(dLambda) > 1) {\n    r = acos(s1 * s2 + c1 * c2 * cosdLambda);\n  } else {\n    var sindPhi = sin(dPhi / 2), sindLambda = sin(dLambda / 2);\n    r = 2 * asin(sqrt(sindPhi * sindPhi + c1 * c2 * sindLambda * sindLambda));\n  }\n  return abs(r) > epsilon ? [r, atan2(c2 * sin(dLambda), c1 * s2 - s1 * c2 * cosdLambda)] : [0, 0];\n}\n\n// Angle opposite a, and contained between sides of lengths b and c.\nfunction angle(b, c, a) {\n  return acos((b * b + c * c - a * a) / (2 * b * c));\n}\n\n// Normalize longitude.\nfunction longitude(lambda) {\n  return lambda - 2 * pi * floor((lambda + pi) / (2 * pi));\n}\n\nexport function chamberlinRaw(p0, p1, p2) {\n  var points = [\n    [p0[0], p0[1], sin(p0[1]), cos(p0[1])],\n    [p1[0], p1[1], sin(p1[1]), cos(p1[1])],\n    [p2[0], p2[1], sin(p2[1]), cos(p2[1])]\n  ];\n\n  for (var a = points[2], b, i = 0; i < 3; ++i, a = b) {\n    b = points[i];\n    a.v = distance(b[1] - a[1], a[3], a[2], b[3], b[2], b[0] - a[0]);\n    a.point = [0, 0];\n  }\n\n  var beta0 = angle(points[0].v[0], points[2].v[0], points[1].v[0]),\n      beta1 = angle(points[0].v[0], points[1].v[0], points[2].v[0]),\n      beta2 = pi - beta0;\n\n  points[2].point[1] = 0;\n  points[0].point[0] = -(points[1].point[0] = points[0].v[0] / 2);\n\n  var mean = [\n    points[2].point[0] = points[0].point[0] + points[2].v[0] * cos(beta0),\n    2 * (points[0].point[1] = points[1].point[1] = points[2].v[0] * sin(beta0))\n  ];\n\n  function forward(lambda, phi) {\n    var sinPhi = sin(phi),\n        cosPhi = cos(phi),\n        v = new Array(3), i;\n\n    // Compute distance and azimuth from control points.\n    for (i = 0; i < 3; ++i) {\n      var p = points[i];\n      v[i] = distance(phi - p[1], p[3], p[2], cosPhi, sinPhi, lambda - p[0]);\n      if (!v[i][0]) return p.point;\n      v[i][1] = longitude(v[i][1] - p.v[1]);\n    }\n\n    // Arithmetic mean of interception points.\n    var point = mean.slice();\n    for (i = 0; i < 3; ++i) {\n      var j = i == 2 ? 0 : i + 1;\n      var a = angle(points[i].v[0], v[i][0], v[j][0]);\n      if (v[i][1] < 0) a = -a;\n\n      if (!i) {\n        point[0] += v[i][0] * cos(a);\n        point[1] -= v[i][0] * sin(a);\n      } else if (i == 1) {\n        a = beta1 - a;\n        point[0] -= v[i][0] * cos(a);\n        point[1] -= v[i][0] * sin(a);\n      } else {\n        a = beta2 - a;\n        point[0] += v[i][0] * cos(a);\n        point[1] += v[i][0] * sin(a);\n      }\n    }\n\n    point[0] /= 3, point[1] /= 3;\n    return point;\n  }\n\n  return forward;\n}\n\nfunction pointRadians(p) {\n  return p[0] *= radians, p[1] *= radians, p;\n}\n\nexport function chamberlinAfrica() {\n  return chamberlin([0, 22], [45, 22], [22.5, -22])\n      .scale(380)\n      .center([22.5, 2]);\n}\n\nexport default function chamberlin(p0, p1, p2) { // TODO order matters!\n  var c = centroid({type: \"MultiPoint\", coordinates: [p0, p1, p2]}),\n      R = [-c[0], -c[1]],\n      r = rotation(R),\n      f = chamberlinRaw(pointRadians(r(p0)), pointRadians(r(p1)), pointRadians(r(p2)));\n  f.invert = solve2d(f);\n  var p = projection(f).rotate(R),\n      center = p.center;\n\n  delete p.rotate;\n\n  p.center = function(_) {\n    return arguments.length ? center(r(_)) : r.invert(center());\n  };\n\n  return p\n      .clipAngle(90);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {asin, pi, sin, sqrt, sqrtPi} from \"./math.js\";\n\nexport function collignonRaw(lambda, phi) {\n  var alpha = sqrt(1 - sin(phi));\n  return [(2 / sqrtPi) * lambda * alpha, sqrtPi * (1 - alpha)];\n}\n\ncollignonRaw.invert = function(x, y) {\n  var lambda = (lambda = y / sqrtPi - 1) * lambda;\n  return [lambda > 0 ? x * sqrt(pi / lambda) / 2 : 0, asin(1 - lambda)];\n};\n\nexport default function() {\n  return projection(collignonRaw)\n      .scale(95.6464)\n      .center([0, 30]);\n}\n","import {asin, atan2, cos, sin, sqrt, tan} from \"./math.js\";\nimport parallel1 from \"./parallel1.js\";\n\nexport function craigRaw(phi0) {\n  var tanPhi0 = tan(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda, (lambda ? lambda / sin(lambda) : 1) * (sin(phi) * cos(lambda) - tanPhi0 * cos(phi))];\n  }\n\n  forward.invert = tanPhi0 ? function(x, y) {\n    if (x) y *= sin(x) / x;\n    var cosLambda = cos(x);\n    return [x, 2 * atan2(sqrt(cosLambda * cosLambda + tanPhi0 * tanPhi0 - y * y) - cosLambda, tanPhi0 - y)];\n  } : function(x, y) {\n    return [x, asin(x ? y * tan(x) / x : y)];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(craigRaw)\n      .scale(249.828)\n      .clipAngle(90);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {asin, cos, sin, sqrt, sqrtPi} from \"./math.js\";\n\nvar sqrt3 = sqrt(3);\n\nexport function crasterRaw(lambda, phi) {\n  return [sqrt3 * lambda * (2 * cos(2 * phi / 3) - 1) / sqrtPi, sqrt3 * sqrtPi * sin(phi / 3)];\n}\n\ncrasterRaw.invert = function(x, y) {\n  var phi = 3 * asin(y / (sqrt3 * sqrtPi));\n  return [sqrtPi * x / (sqrt3 * (2 * cos(2 * phi / 3) - 1)), phi];\n};\n\nexport default function() {\n  return projection(crasterRaw)\n      .scale(156.19);\n}\n","import {asin, cos, sin} from \"./math.js\";\nimport parallel1 from \"./parallel1.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(cylindricalEqualAreaRaw)\n      .parallel(38.58) // acos(sqrt(width / height / pi)) * radians\n      .scale(195.044); // width / (sqrt(width / height / pi) * 2 * pi)\n}\n","import {atan, cos, tan} from \"./math.js\";\nimport parallel1 from \"./parallel1.js\";\n\nexport function cylindricalStereographicRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, (1 + cosPhi0) * tan(phi / 2)];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, atan(y / (1 + cosPhi0)) * 2];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(cylindricalStereographicRaw)\n      .scale(124.75);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, pi, sqrt} from \"./math.js\";\n\nexport function eckert1Raw(lambda, phi) {\n  var alpha = sqrt(8 / (3 * pi));\n  return [\n    alpha * lambda * (1 - abs(phi) / pi),\n    alpha * phi\n  ];\n}\n\neckert1Raw.invert = function(x, y) {\n  var alpha = sqrt(8 / (3 * pi)),\n      phi = y / alpha;\n  return [\n    x / (alpha * (1 - abs(phi) / pi)),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(eckert1Raw)\n      .scale(165.664);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, pi, sign, sin, sqrt} from \"./math.js\";\n\nexport function eckert2Raw(lambda, phi) {\n  var alpha = sqrt(4 - 3 * sin(abs(phi)));\n  return [\n    2 / sqrt(6 * pi) * lambda * alpha,\n    sign(phi) * sqrt(2 * pi / 3) * (2 - alpha)\n  ];\n}\n\neckert2Raw.invert = function(x, y) {\n  var alpha = 2 - abs(y) / sqrt(2 * pi / 3);\n  return [\n    x * sqrt(6 * pi) / (2 * alpha),\n    sign(y) * asin((4 - alpha * alpha) / 3)\n  ];\n};\n\nexport default function() {\n  return projection(eckert2Raw)\n      .scale(165.664);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {pi, sqrt} from \"./math.js\";\n\nexport function eckert3Raw(lambda, phi) {\n  var k = sqrt(pi * (4 + pi));\n  return [\n    2 / k * lambda * (1 + sqrt(1 - 4 * phi * phi / (pi * pi))),\n    4 / k * phi\n  ];\n}\n\neckert3Raw.invert = function(x, y) {\n  var k = sqrt(pi * (4 + pi)) / 2;\n  return [\n    x * k / (1 + sqrt(1 - y * y * (4 + pi) / (4 * pi))),\n    y * k / 2\n  ];\n};\n\nexport default function() {\n  return projection(eckert3Raw)\n      .scale(180.739);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt} from \"./math.js\";\n\nexport function eckert4Raw(lambda, phi) {\n  var k = (2 + halfPi) * sin(phi);\n  phi /= 2;\n  for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n    var cosPhi = cos(phi);\n    phi -= delta = (phi + sin(phi) * (cosPhi + 2) - k) / (2 * cosPhi * (1 + cosPhi));\n  }\n  return [\n    2 / sqrt(pi * (4 + pi)) * lambda * (1 + cos(phi)),\n    2 * sqrt(pi / (4 + pi)) * sin(phi)\n  ];\n}\n\neckert4Raw.invert = function(x, y) {\n  var A = y * sqrt((4 + pi) / pi) / 2,\n      k = asin(A),\n      c = cos(k);\n  return [\n    x / (2 / sqrt(pi * (4 + pi)) * (1 + c)),\n    asin((k + A * (c + 2)) / (2 + halfPi))\n  ];\n};\n\nexport default function() {\n  return projection(eckert4Raw)\n      .scale(180.739);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {cos, pi, sqrt} from \"./math.js\";\n\nexport function eckert5Raw(lambda, phi) {\n  return [\n    lambda * (1 + cos(phi)) / sqrt(2 + pi),\n    2 * phi / sqrt(2 + pi)\n  ];\n}\n\neckert5Raw.invert = function(x, y) {\n  var k = sqrt(2 + pi),\n      phi = y * k / 2;\n  return [\n    k * x / (1 + cos(phi)),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(eckert5Raw)\n      .scale(173.044);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt} from \"./math.js\";\n\nexport function eckert6Raw(lambda, phi) {\n  var k = (1 + halfPi) * sin(phi);\n  for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n    phi -= delta = (phi + sin(phi) - k) / (1 + cos(phi));\n  }\n  k = sqrt(2 + pi);\n  return [\n    lambda * (1 + cos(phi)) / k,\n    2 * phi / k\n  ];\n}\n\neckert6Raw.invert = function(x, y) {\n  var j = 1 + halfPi,\n      k = sqrt(j / 2);\n  return [\n    x * 2 * k / (1 + cos(y *= k)),\n    asin((y + sin(y)) / j)\n  ];\n};\n\nexport default function() {\n  return projection(eckert6Raw)\n      .scale(173.044);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {augustRaw} from \"./august.js\";\nimport {abs, atan, cos, epsilon, halfPi, log, max, min, sin, sqrt, sqrt1_2, sqrt2} from \"./math.js\";\n\nvar eisenlohrK = 3 + 2 * sqrt2;\n\nexport function eisenlohrRaw(lambda, phi) {\n  var s0 = sin(lambda /= 2),\n      c0 = cos(lambda),\n      k = sqrt(cos(phi)),\n      c1 = cos(phi /= 2),\n      t = sin(phi) / (c1 + sqrt2 * c0 * k),\n      c = sqrt(2 / (1 + t * t)),\n      v = sqrt((sqrt2 * c1 + (c0 + s0) * k) / (sqrt2 * c1 + (c0 - s0) * k));\n  return [\n    eisenlohrK * (c * (v - 1 / v) - 2 * log(v)),\n    eisenlohrK * (c * t * (v + 1 / v) - 2 * atan(t))\n  ];\n}\n\neisenlohrRaw.invert = function(x, y) {\n  if (!(p = augustRaw.invert(x / 1.2, y * 1.065))) return null;\n  var lambda = p[0], phi = p[1], i = 20, p;\n  x /= eisenlohrK, y /= eisenlohrK;\n  do {\n    var _0 = lambda / 2,\n        _1 = phi / 2,\n        s0 = sin(_0),\n        c0 = cos(_0),\n        s1 = sin(_1),\n        c1 = cos(_1),\n        cos1 = cos(phi),\n        k = sqrt(cos1),\n        t = s1 / (c1 + sqrt2 * c0 * k),\n        t2 = t * t,\n        c = sqrt(2 / (1 + t2)),\n        v0 = (sqrt2 * c1 + (c0 + s0) * k),\n        v1 = (sqrt2 * c1 + (c0 - s0) * k),\n        v2 = v0 / v1,\n        v = sqrt(v2),\n        vm1v = v - 1 / v,\n        vp1v = v + 1 / v,\n        fx = c * vm1v - 2 * log(v) - x,\n        fy = c * t * vp1v - 2 * atan(t) - y,\n        deltatDeltaLambda = s1 && sqrt1_2 * k * s0 * t2 / s1,\n        deltatDeltaPhi = (sqrt2 * c0 * c1 + k) / (2 * (c1 + sqrt2 * c0 * k) * (c1 + sqrt2 * c0 * k) * k),\n        deltacDeltat = -0.5 * t * c * c * c,\n        deltacDeltaLambda = deltacDeltat * deltatDeltaLambda,\n        deltacDeltaPhi = deltacDeltat * deltatDeltaPhi,\n        A = (A = 2 * c1 + sqrt2 * k * (c0 - s0)) * A * v,\n        deltavDeltaLambda = (sqrt2 * c0 * c1 * k + cos1) / A,\n        deltavDeltaPhi = -(sqrt2 * s0 * s1) / (k * A),\n        deltaxDeltaLambda = vm1v * deltacDeltaLambda - 2 * deltavDeltaLambda / v + c * (deltavDeltaLambda + deltavDeltaLambda / v2),\n        deltaxDeltaPhi = vm1v * deltacDeltaPhi - 2 * deltavDeltaPhi / v + c * (deltavDeltaPhi + deltavDeltaPhi / v2),\n        deltayDeltaLambda = t * vp1v * deltacDeltaLambda - 2 * deltatDeltaLambda / (1 + t2) + c * vp1v * deltatDeltaLambda + c * t * (deltavDeltaLambda - deltavDeltaLambda / v2),\n        deltayDeltaPhi = t * vp1v * deltacDeltaPhi - 2 * deltatDeltaPhi / (1 + t2) + c * vp1v * deltatDeltaPhi + c * t * (deltavDeltaPhi - deltavDeltaPhi / v2),\n        denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;\n    if (!denominator) break;\n    var deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator,\n        deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n    lambda -= deltaLambda;\n    phi = max(-halfPi, min(halfPi, phi - deltaPhi));\n  } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n  return abs(abs(phi) - halfPi) < epsilon ? [0, phi] : i && [lambda, phi];\n};\n\nexport default function() {\n  return projection(eisenlohrRaw)\n      .scale(62.5271);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {atan, cos, radians, sqrt, tan} from \"./math.js\";\n\nvar faheyK = cos(35 * radians);\n\nexport function faheyRaw(lambda, phi) {\n  var t = tan(phi / 2);\n  return [lambda * faheyK * sqrt(1 - t * t), (1 + faheyK) * t];\n}\n\nfaheyRaw.invert = function(x, y) {\n  var t = y / (1 + faheyK);\n  return [x && x / (faheyK * sqrt(1 - t * t)), 2 * atan(t)];\n};\n\nexport default function() {\n  return projection(faheyRaw)\n      .scale(137.152);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {atan, cos, sqrtPi, tan} from \"./math.js\";\n\nexport function foucautRaw(lambda, phi) {\n  var k = phi / 2, cosk = cos(k);\n  return [ 2 * lambda / sqrtPi * cos(phi) * cosk * cosk, sqrtPi * tan(k)];\n}\n\nfoucautRaw.invert = function(x, y) {\n  var k = atan(y / sqrtPi), cosk = cos(k), phi = 2 * k;\n  return [x * sqrtPi / 2 / (cos(phi) * cosk * cosk), phi];\n};\n\nexport default function() {\n  return projection(foucautRaw)\n      .scale(135.264);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {cos, halfPi, pi, sin, sqrt} from \"./math.js\";\nimport {solve} from \"./newton.js\";\n\nexport function foucautSinusoidalRaw(alpha) {\n  var beta = 1 - alpha,\n      equatorial = raw(pi, 0)[0] - raw(-pi, 0)[0],\n      polar = raw(0, halfPi)[1] - raw(0, -halfPi)[1],\n      ratio = sqrt(2 * polar / equatorial);\n\n  function raw(lambda, phi) {\n    var cosphi = cos(phi),\n        sinphi = sin(phi);\n    return [\n      cosphi / (beta + alpha * cosphi) * lambda,\n      beta * phi + alpha * sinphi\n    ];\n  }\n\n  function forward(lambda, phi) {\n    var p = raw(lambda, phi);\n    return [p[0] * ratio, p[1] / ratio];\n  }\n\n  function forwardMeridian(phi) {\n    return forward(0, phi)[1];\n  }\n\n  forward.invert = function(x, y) {\n    var phi = solve(forwardMeridian, y),\n        lambda = x / ratio * (alpha + beta / cos(phi));\n    return [lambda, phi];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var alpha = 0.5,\n      m = projectionMutator(foucautSinusoidalRaw),\n      p = m(alpha);\n\n  p.alpha = function(_) {\n    return arguments.length ? m(alpha = +_) : alpha;\n  };\n\n  return p\n      .scale(168.725);\n}\n","import {geoEquirectangular, geoOrthographic} from \"d3-geo\";\nimport {asin, atan, degrees, radians, sin, tan} from \"./math.js\";\n\nfunction gilbertForward(point) {\n  return [point[0] / 2, asin(tan(point[1] / 2 * radians)) * degrees];\n}\n\nfunction gilbertInvert(point) {\n  return [point[0] * 2, 2 * atan(sin(point[1] * radians)) * degrees];\n}\n\nexport default function(projectionType) {\n  if (projectionType == null) projectionType = geoOrthographic;\n  var projection = projectionType(),\n      equirectangular = geoEquirectangular().scale(degrees).precision(0).clipAngle(null).translate([0, 0]); // antimeridian cutting\n\n  function gilbert(point) {\n    return projection(gilbertForward(point));\n  }\n\n  if (projection.invert) gilbert.invert = function(point) {\n    return gilbertInvert(projection.invert(point));\n  };\n\n  gilbert.stream = function(stream) {\n    var s1 = projection.stream(stream), s0 = equirectangular.stream({\n      point: function(lambda, phi) { s1.point(lambda / 2, asin(tan(-phi / 2 * radians)) * degrees); },\n      lineStart: function() { s1.lineStart(); },\n      lineEnd: function() { s1.lineEnd(); },\n      polygonStart: function() { s1.polygonStart(); },\n      polygonEnd: function() { s1.polygonEnd(); }\n    });\n    s0.sphere = s1.sphere;\n    return s0;\n  };\n\n  function property(name) {\n    gilbert[name] = function() {\n      return arguments.length ? (projection[name].apply(projection, arguments), gilbert) : projection[name]();\n    };\n  }\n\n  gilbert.rotate = function(_) {\n    return arguments.length ? (equirectangular.rotate(_), gilbert) : equirectangular.rotate();\n  };\n\n  gilbert.center = function(_) {\n    return arguments.length ? (projection.center(gilbertForward(_)), gilbert) : gilbertInvert(projection.center());\n  };\n\n  property(\"angle\");\n  property(\"clipAngle\");\n  property(\"clipExtent\");\n  property(\"fitExtent\");\n  property(\"fitHeight\");\n  property(\"fitSize\");\n  property(\"fitWidth\");\n  property(\"scale\");\n  property(\"translate\");\n  property(\"precision\");\n\n  return gilbert\n      .scale(249.5);\n}\n","import {geoAzimuthalEquidistantRaw as azimuthalEquidistantRaw, geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, asin, atan2, cos, degrees, epsilon, epsilon2, halfPi, pi, radians, round, sin, sqrt} from \"./math.js\";\n\nexport function gingeryRaw(rho, n) {\n  var k = 2 * pi / n,\n      rho2 = rho * rho;\n\n  function forward(lambda, phi) {\n    var p = azimuthalEquidistantRaw(lambda, phi),\n        x = p[0],\n        y = p[1],\n        r2 = x * x + y * y;\n\n    if (r2 > rho2) {\n      var r = sqrt(r2),\n          theta = atan2(y, x),\n          theta0 = k * round(theta / k),\n          alpha = theta - theta0,\n          rhoCosAlpha = rho * cos(alpha),\n          k_ = (rho * sin(alpha) - alpha * sin(rhoCosAlpha)) / (halfPi - rhoCosAlpha),\n          s_ = gingeryLength(alpha, k_),\n          e = (pi - rho) / gingeryIntegrate(s_, rhoCosAlpha, pi);\n\n      x = r;\n      var i = 50, delta;\n      do {\n        x -= delta = (rho + gingeryIntegrate(s_, rhoCosAlpha, x) * e - r) / (s_(x) * e);\n      } while (abs(delta) > epsilon && --i > 0);\n\n      y = alpha * sin(x);\n      if (x < halfPi) y -= k_ * (x - halfPi);\n\n      var s = sin(theta0),\n          c = cos(theta0);\n      p[0] = x * c - y * s;\n      p[1] = x * s + y * c;\n    }\n    return p;\n  }\n\n  forward.invert = function(x, y) {\n    var r2 = x * x + y * y;\n    if (r2 > rho2) {\n      var r = sqrt(r2),\n          theta = atan2(y, x),\n          theta0 = k * round(theta / k),\n          dTheta = theta - theta0;\n\n      x = r * cos(dTheta);\n      y = r * sin(dTheta);\n\n      var x_halfPi = x - halfPi,\n          sinx = sin(x),\n          alpha = y / sinx,\n          delta = x < halfPi ? Infinity : 0,\n          i = 10;\n\n      while (true) {\n        var rhosinAlpha = rho * sin(alpha),\n            rhoCosAlpha = rho * cos(alpha),\n            sinRhoCosAlpha = sin(rhoCosAlpha),\n            halfPi_RhoCosAlpha = halfPi - rhoCosAlpha,\n            k_ = (rhosinAlpha - alpha * sinRhoCosAlpha) / halfPi_RhoCosAlpha,\n            s_ = gingeryLength(alpha, k_);\n\n        if (abs(delta) < epsilon2 || !--i) break;\n\n        alpha -= delta = (alpha * sinx - k_ * x_halfPi - y) / (\n          sinx - x_halfPi * 2 * (\n            halfPi_RhoCosAlpha * (rhoCosAlpha + alpha * rhosinAlpha * cos(rhoCosAlpha) - sinRhoCosAlpha) -\n            rhosinAlpha * (rhosinAlpha - alpha * sinRhoCosAlpha)\n          ) / (halfPi_RhoCosAlpha * halfPi_RhoCosAlpha));\n      }\n      r = rho + gingeryIntegrate(s_, rhoCosAlpha, x) * (pi - rho) / gingeryIntegrate(s_, rhoCosAlpha, pi);\n      theta = theta0 + alpha;\n      x = r * cos(theta);\n      y = r * sin(theta);\n    }\n    return azimuthalEquidistantRaw.invert(x, y);\n  };\n\n  return forward;\n}\n\nfunction gingeryLength(alpha, k) {\n  return function(x) {\n    var y_ = alpha * cos(x);\n    if (x < halfPi) y_ -= k;\n    return sqrt(1 + y_ * y_);\n  };\n}\n\n// Numerical integration: trapezoidal rule.\nfunction gingeryIntegrate(f, a, b) {\n  var n = 50,\n      h = (b - a) / n,\n      s = f(a) + f(b);\n  for (var i = 1, x = a; i < n; ++i) s += 2 * f(x += h);\n  return s * 0.5 * h;\n}\n\nexport default function() {\n  var n = 6,\n      rho = 30 * radians,\n      cRho = cos(rho),\n      sRho = sin(rho),\n      m = projectionMutator(gingeryRaw),\n      p = m(rho, n),\n      stream_ = p.stream,\n      epsilon = 1e-2,\n      cr = -cos(epsilon * radians),\n      sr = sin(epsilon * radians);\n\n  p.radius = function(_) {\n    if (!arguments.length) return rho * degrees;\n    cRho = cos(rho = _ * radians);\n    sRho = sin(rho);\n    return m(rho, n);\n  };\n\n  p.lobes = function(_) {\n    if (!arguments.length) return n;\n    return m(rho, n = +_);\n  };\n\n  p.stream = function(stream) {\n    var rotate = p.rotate(),\n        rotateStream = stream_(stream),\n        sphereStream = (p.rotate([0, 0]), stream_(stream));\n    p.rotate(rotate);\n    rotateStream.sphere = function() {\n      sphereStream.polygonStart(), sphereStream.lineStart();\n      for (var i = 0, delta = 2 * pi / n, phi = 0; i < n; ++i, phi -= delta) {\n        sphereStream.point(atan2(sr * cos(phi), cr) * degrees, asin(sr * sin(phi)) * degrees);\n        sphereStream.point(atan2(sRho * cos(phi - delta / 2), cRho) * degrees, asin(sRho * sin(phi - delta / 2)) * degrees);\n      }\n      sphereStream.lineEnd(), sphereStream.polygonEnd();\n    };\n    return rotateStream;\n  };\n\n  return p\n      .rotate([90, -40])\n      .scale(91.7095)\n      .clipAngle(180 - 1e-3);\n}\n","import {abs, asin, cos, epsilon, pi, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b, c, d, e, f, g, h) {\n  if (arguments.length < 8) h = 0;\n\n  function forward(lambda, phi) {\n    if (!phi) return [a * lambda / pi, 0];\n    var phi2 = phi * phi,\n        xB = a + phi2 * (b + phi2 * (c + phi2 * d)),\n        yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),\n        m = (xB * xB + yB * yB) / (2 * yB),\n        alpha = lambda * asin(xB / m) / pi;\n    return [m * sin(alpha), phi * (1 + phi2 * h) + m * (1 - cos(alpha))];\n  }\n\n  forward.invert = function(x, y) {\n    var lambda = pi * x / a,\n        phi = y,\n        deltaLambda, deltaPhi, i = 50;\n    do {\n      var phi2 = phi * phi,\n          xB = a + phi2 * (b + phi2 * (c + phi2 * d)),\n          yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),\n          p = xB * xB + yB * yB,\n          q = 2 * yB,\n          m = p / q,\n          m2 = m * m,\n          dAlphadLambda = asin(xB / m) / pi,\n          alpha = lambda * dAlphadLambda,\n          xB2 = xB * xB,\n          dxBdPhi = (2 * b + phi2 * (4 * c + phi2 * 6 * d)) * phi,\n          dyBdPhi = e + phi2 * (3 * f + phi2 * 5 * g),\n          dpdPhi = 2 * (xB * dxBdPhi + yB * (dyBdPhi - 1)),\n          dqdPhi = 2 * (dyBdPhi - 1),\n          dmdPhi = (dpdPhi * q - p * dqdPhi) / (q * q),\n          cosAlpha = cos(alpha),\n          sinAlpha = sin(alpha),\n          mcosAlpha = m * cosAlpha,\n          msinAlpha = m * sinAlpha,\n          dAlphadPhi = ((lambda / pi) * (1 / sqrt(1 - xB2 / m2)) * (dxBdPhi * m - xB * dmdPhi)) / m2,\n          fx = msinAlpha - x,\n          fy = phi * (1 + phi2 * h) + m - mcosAlpha - y,\n          deltaxDeltaPhi = dmdPhi * sinAlpha + mcosAlpha * dAlphadPhi,\n          deltaxDeltaLambda = mcosAlpha * dAlphadLambda,\n          deltayDeltaPhi = 1 + dmdPhi - (dmdPhi * cosAlpha - msinAlpha * dAlphadPhi),\n          deltayDeltaLambda = msinAlpha * dAlphadLambda,\n          denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;\n      if (!denominator) break;\n      lambda -= deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator;\n      phi -= deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n    } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n    return [lambda, phi];\n  };\n\n  return forward;\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport ginzburgPolyconicRaw from \"./ginzburgPolyconic.js\";\n\nexport var ginzburg4Raw = ginzburgPolyconicRaw(2.8284, -1.6988, 0.75432, -0.18071, 1.76003, -0.38914, 0.042555);\n\nexport default function() {\n  return projection(ginzburg4Raw)\n      .scale(149.995);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport ginzburgPolyconicRaw from \"./ginzburgPolyconic.js\";\n\nexport var ginzburg5Raw = ginzburgPolyconicRaw(2.583819, -0.835827, 0.170354, -0.038094, 1.543313, -0.411435,0.082742);\n\nexport default function() {\n  return projection(ginzburg5Raw)\n      .scale(153.93);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport ginzburgPolyconicRaw from \"./ginzburgPolyconic.js\";\nimport {pi} from \"./math.js\";\n\nexport var ginzburg6Raw = ginzburgPolyconicRaw(5 / 6 * pi, -0.62636, -0.0344, 0, 1.3493, -0.05524, 0, 0.045);\n\nexport default function() {\n  return projection(ginzburg6Raw)\n      .scale(130.945);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, epsilon} from \"./math.js\";\n\nexport function ginzburg8Raw(lambda, phi) {\n  var lambda2 = lambda * lambda,\n      phi2 = phi * phi;\n  return [\n    lambda * (1 - 0.162388 * phi2) * (0.87 - 0.000952426 * lambda2 * lambda2),\n    phi * (1 + phi2 / 12)\n  ];\n}\n\nginzburg8Raw.invert = function(x, y) {\n  var lambda = x,\n      phi = y,\n      i = 50, delta;\n  do {\n    var phi2 = phi * phi;\n    phi -= delta = (phi * (1 + phi2 / 12) - y) / (1 + phi2 / 4);\n  } while (abs(delta) > epsilon && --i > 0);\n  i = 50;\n  x /= 1 -0.162388 * phi2;\n  do {\n    var lambda4 = (lambda4 = lambda * lambda) * lambda4;\n    lambda -= delta = (lambda * (0.87 - 0.000952426 * lambda4) - x) / (0.87 - 0.00476213 * lambda4);\n  } while (abs(delta) > epsilon && --i > 0);\n  return [lambda, phi];\n};\n\nexport default function() {\n  return projection(ginzburg8Raw)\n      .scale(131.747);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport ginzburgPolyconicRaw from \"./ginzburgPolyconic.js\";\n\nexport var ginzburg9Raw = ginzburgPolyconicRaw(2.6516, -0.76534, 0.19123, -0.047094, 1.36289, -0.13965,0.031762);\n\nexport default function() {\n  return projection(ginzburg9Raw)\n      .scale(131.087);\n}\n","import {halfPi, pi} from \"./math.js\";\n\nexport default function(project) {\n  var dx = project(halfPi, 0)[0] - project(-halfPi, 0)[0];\n\n  function projectSquare(lambda, phi) {\n    var s = lambda > 0 ? -0.5 : 0.5,\n        point = project(lambda + s * pi, phi);\n    point[0] -= s * dx;\n    return point;\n  }\n\n  if (project.invert) projectSquare.invert = function(x, y) {\n    var s = x > 0 ? -0.5 : 0.5,\n        location = project.invert(x + s * dx, y),\n        lambda = location[0] - s * pi;\n    if (lambda < -pi) lambda += 2 * pi;\n    else if (lambda > pi) lambda -= 2 * pi;\n    location[0] = lambda;\n    return location;\n  };\n\n  return projectSquare;\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, atan2, cos, sign, epsilon, epsilon2, halfPi, pi, sin, sqrt} from \"./math.js\";\nimport squareRaw from \"./square.js\";\n\nexport function gringortenRaw(lambda, phi) {\n  var sLambda = sign(lambda),\n      sPhi = sign(phi),\n      cosPhi = cos(phi),\n      x = cos(lambda) * cosPhi,\n      y = sin(lambda) * cosPhi,\n      z = sin(sPhi * phi);\n  lambda = abs(atan2(y, z));\n  phi = asin(x);\n  if (abs(lambda - halfPi) > epsilon) lambda %= halfPi;\n  var point = gringortenHexadecant(lambda > pi / 4 ? halfPi - lambda : lambda, phi);\n  if (lambda > pi / 4) z = point[0], point[0] = -point[1], point[1] = -z;\n  return (point[0] *= sLambda, point[1] *= -sPhi, point);\n}\n\ngringortenRaw.invert = function(x, y) {\n  if (abs(x) > 1) x = sign(x) * 2 - x;\n  if (abs(y) > 1) y = sign(y) * 2 - y;\n  var sx = sign(x),\n      sy = sign(y),\n      x0 = -sx * x,\n      y0 = -sy * y,\n      t = y0 / x0 < 1,\n      p = gringortenHexadecantInvert(t ? y0 : x0, t ? x0 : y0),\n      lambda = p[0],\n      phi = p[1],\n      cosPhi = cos(phi);\n  if (t) lambda = -halfPi - lambda;\n  return [sx * (atan2(sin(lambda) * cosPhi, -sin(phi)) + pi), sy * asin(cos(lambda) * cosPhi)];\n};\n\nfunction gringortenHexadecant(lambda, phi) {\n  if (phi === halfPi) return [0, 0];\n\n  var sinPhi = sin(phi),\n      r = sinPhi * sinPhi,\n      r2 = r * r,\n      j = 1 + r2,\n      k = 1 + 3 * r2,\n      q = 1 - r2,\n      z = asin(1 / sqrt(j)),\n      v = q + r * j * z,\n      p2 = (1 - sinPhi) / v,\n      p = sqrt(p2),\n      a2 = p2 * j,\n      a = sqrt(a2),\n      h = p * q,\n      x,\n      i;\n\n  if (lambda === 0) return [0, -(h + r * a)];\n\n  var cosPhi = cos(phi),\n      secPhi = 1 / cosPhi,\n      drdPhi = 2 * sinPhi * cosPhi,\n      dvdPhi = (-3 * r + z * k) * drdPhi,\n      dp2dPhi = (-v * cosPhi - (1 - sinPhi) * dvdPhi) / (v * v),\n      dpdPhi = (0.5 * dp2dPhi) / p,\n      dhdPhi = q * dpdPhi - 2 * r * p * drdPhi,\n      dra2dPhi = r * j * dp2dPhi + p2 * k * drdPhi,\n      mu = -secPhi * drdPhi,\n      nu = -secPhi * dra2dPhi,\n      zeta = -2 * secPhi * dhdPhi,\n      lambda1 = 4 * lambda / pi,\n      delta;\n\n  // Slower but accurate bisection method.\n  if (lambda > 0.222 * pi || phi < pi / 4 && lambda > 0.175 * pi) {\n    x = (h + r * sqrt(a2 * (1 + r2) - h * h)) / (1 + r2);\n    if (lambda > pi / 4) return [x, x];\n    var x1 = x, x0 = 0.5 * x;\n    x = 0.5 * (x0 + x1), i = 50;\n    do {\n      var g = sqrt(a2 - x * x),\n          f = (x * (zeta + mu * g) + nu * asin(x / a)) - lambda1;\n      if (!f) break;\n      if (f < 0) x0 = x;\n      else x1 = x;\n      x = 0.5 * (x0 + x1);\n    } while (abs(x1 - x0) > epsilon && --i > 0);\n  }\n\n  // Newton-Raphson.\n  else {\n    x = epsilon, i = 25;\n    do {\n      var x2 = x * x,\n          g2 = sqrt(a2 - x2),\n          zetaMug = zeta + mu * g2,\n          f2 = x * zetaMug + nu * asin(x / a) - lambda1,\n          df = zetaMug + (nu - mu * x2) / g2;\n      x -= delta = g2 ? f2 / df : 0;\n    } while (abs(delta) > epsilon && --i > 0);\n  }\n\n  return [x, -h - r * sqrt(a2 - x * x)];\n}\n\nfunction gringortenHexadecantInvert(x, y) {\n  var x0 = 0,\n      x1 = 1,\n      r = 0.5,\n      i = 50;\n\n  while (true) {\n    var r2 = r * r,\n        sinPhi = sqrt(r),\n        z = asin(1 / sqrt(1 + r2)),\n        v = (1 - r2) + r * (1 + r2) * z,\n        p2 = (1 - sinPhi) / v,\n        p = sqrt(p2),\n        a2 = p2 * (1 + r2),\n        h = p * (1 - r2),\n        g2 = a2 - x * x,\n        g = sqrt(g2),\n        y0 = y + h + r * g;\n    if (abs(x1 - x0) < epsilon2 || --i === 0 || y0 === 0) break;\n    if (y0 > 0) x0 = r;\n    else x1 = r;\n    r = 0.5 * (x0 + x1);\n  }\n\n  if (!i) return null;\n\n  var phi = asin(sinPhi),\n      cosPhi = cos(phi),\n      secPhi = 1 / cosPhi,\n      drdPhi = 2 * sinPhi * cosPhi,\n      dvdPhi = (-3 * r + z * (1 + 3 * r2)) * drdPhi,\n      dp2dPhi = (-v * cosPhi - (1 - sinPhi) * dvdPhi) / (v * v),\n      dpdPhi = 0.5 * dp2dPhi / p,\n      dhdPhi = (1 - r2) * dpdPhi - 2 * r * p * drdPhi,\n      zeta = -2 * secPhi * dhdPhi,\n      mu = -secPhi * drdPhi,\n      nu = -secPhi * (r * (1 + r2) * dp2dPhi + p2 * (1 + 3 * r2) * drdPhi);\n\n  return [pi / 4 * (x * (zeta + mu * g) + nu * asin(x / sqrt(a2))), phi];\n}\n\nexport default function() {\n  return projection(squareRaw(gringortenRaw))\n      .scale(239.75);\n}\n","import {abs, asin, atan, cos, cosh, epsilon, exp, halfPi, log, pi, pow, quarterPi, sign, sin, sinh, sqrt, tan, tanh} from \"./math.js\";\n\n// Returns [sn, cn, dn](u + iv|m).\nexport function ellipticJi(u, v, m) {\n  var a, b, c;\n  if (!u) {\n    b = ellipticJ(v, 1 - m);\n    return [\n      [0, b[0] / b[1]],\n      [1 / b[1], 0],\n      [b[2] / b[1], 0]\n    ];\n  }\n  a = ellipticJ(u, m);\n  if (!v) return [[a[0], 0], [a[1], 0], [a[2], 0]];\n  b = ellipticJ(v, 1 - m);\n  c = b[1] * b[1] + m * a[0] * a[0] * b[0] * b[0];\n  return [\n    [a[0] * b[2] / c, a[1] * a[2] * b[0] * b[1] / c],\n    [a[1] * b[1] / c, -a[0] * a[2] * b[0] * b[2] / c],\n    [a[2] * b[1] * b[2] / c, -m * a[0] * a[1] * b[0] / c]\n  ];\n}\n\n// Returns [sn, cn, dn, ph](u|m).\nexport function ellipticJ(u, m) {\n  var ai, b, phi, t, twon;\n  if (m < epsilon) {\n    t = sin(u);\n    b = cos(u);\n    ai = m * (u - t * b) / 4;\n    return [\n      t - ai * b,\n      b + ai * t,\n      1 - m * t * t / 2,\n      u - ai\n    ];\n  }\n  if (m >= 1 - epsilon) {\n    ai = (1 - m) / 4;\n    b = cosh(u);\n    t = tanh(u);\n    phi = 1 / b;\n    twon = b * sinh(u);\n    return [\n      t + ai * (twon - u) / (b * b),\n      phi - ai * t * phi * (twon - u),\n      phi + ai * t * phi * (twon + u),\n      2 * atan(exp(u)) - halfPi + ai * (twon - u) / b\n    ];\n  }\n\n  var a = [1, 0, 0, 0, 0, 0, 0, 0, 0],\n      c = [sqrt(m), 0, 0, 0, 0, 0, 0, 0, 0],\n      i = 0;\n  b = sqrt(1 - m);\n  twon = 1;\n\n  while (abs(c[i] / a[i]) > epsilon && i < 8) {\n    ai = a[i++];\n    c[i] = (ai - b) / 2;\n    a[i] = (ai + b) / 2;\n    b = sqrt(ai * b);\n    twon *= 2;\n  }\n\n  phi = twon * a[i] * u;\n  do {\n    t = c[i] * sin(b = phi) / a[i];\n    phi = (asin(t) + phi) / 2;\n  } while (--i);\n\n  return [sin(phi), t = cos(phi), t / cos(phi - b), phi];\n}\n\n// Calculate F(phi+iPsi|m).\n// See Abramowitz and Stegun, 17.4.11.\nexport function ellipticFi(phi, psi, m) {\n  var r = abs(phi),\n      i = abs(psi),\n      sinhPsi = sinh(i);\n  if (r) {\n    var cscPhi = 1 / sin(r),\n        cotPhi2 = 1 / (tan(r) * tan(r)),\n        b = -(cotPhi2 + m * (sinhPsi * sinhPsi * cscPhi * cscPhi) - 1 + m),\n        c = (m - 1) * cotPhi2,\n        cotLambda2 = (-b + sqrt(b * b - 4 * c)) / 2;\n    return [\n      ellipticF(atan(1 / sqrt(cotLambda2)), m) * sign(phi),\n      ellipticF(atan(sqrt((cotLambda2 / cotPhi2 - 1) / m)), 1 - m) * sign(psi)\n    ];\n  }\n  return [\n    0,\n    ellipticF(atan(sinhPsi), 1 - m) * sign(psi)\n  ];\n}\n\n// Calculate F(phi|m) where m = k² = sin²α.\n// See Abramowitz and Stegun, 17.6.7.\nexport function ellipticF(phi, m) {\n  if (!m) return phi;\n  if (m === 1) return log(tan(phi / 2 + quarterPi));\n  var a = 1,\n      b = sqrt(1 - m),\n      c = sqrt(m);\n  for (var i = 0; abs(c) > epsilon; i++) {\n    if (phi % pi) {\n      var dPhi = atan(b * tan(phi) / a);\n      if (dPhi < 0) dPhi += pi;\n      phi += dPhi + ~~(phi / pi) * pi;\n    } else phi += phi;\n    c = (a + b) / 2;\n    b = sqrt(a * b);\n    c = ((a = c) - b) / 2;\n  }\n  return phi / (pow(2, i) * a);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {ellipticF, ellipticFi, ellipticJi} from \"./elliptic.js\";\nimport {abs, atan, atan2, cos, exp, halfPi, log, pi, sin, sqrt, sqrt2, tan} from \"./math.js\";\nimport squareRaw from \"./square.js\";\n\nexport function guyouRaw(lambda, phi) {\n  var k_ = (sqrt2 - 1) / (sqrt2 + 1),\n      k = sqrt(1 - k_ * k_),\n      K = ellipticF(halfPi, k * k),\n      f = -1,\n      psi = log(tan(pi / 4 + abs(phi) / 2)),\n      r = exp(f * psi) / sqrt(k_),\n      at = guyouComplexAtan(r * cos(f * lambda), r * sin(f * lambda)),\n      t = ellipticFi(at[0], at[1], k * k);\n  return [-t[1], (phi >= 0 ? 1 : -1) * (0.5 * K - t[0])];\n}\n\nfunction guyouComplexAtan(x, y) {\n  var x2 = x * x,\n      y_1 = y + 1,\n      t = 1 - x2 - y * y;\n  return [\n   0.5 * ((x >= 0 ? halfPi : -halfPi) - atan2(t, 2 * x)),\n    -0.25 * log(t * t + 4 * x2) +0.5 * log(y_1 * y_1 + x2)\n  ];\n}\n\nfunction guyouComplexDivide(a, b) {\n  var denominator = b[0] * b[0] + b[1] * b[1];\n  return [\n    (a[0] * b[0] + a[1] * b[1]) / denominator,\n    (a[1] * b[0] - a[0] * b[1]) / denominator\n  ];\n}\n\nguyouRaw.invert = function(x, y) {\n  var k_ = (sqrt2 - 1) / (sqrt2 + 1),\n      k = sqrt(1 - k_ * k_),\n      K = ellipticF(halfPi, k * k),\n      f = -1,\n      j = ellipticJi(0.5 * K - y, -x, k * k),\n      tn = guyouComplexDivide(j[0], j[1]),\n      lambda = atan2(tn[1], tn[0]) / f;\n  return [\n    lambda,\n    2 * atan(exp(0.5 / f * log(k_ * tn[0] * tn[0] + k_ * tn[1] * tn[1]))) - halfPi\n  ];\n};\n\nexport default function() {\n  return projection(squareRaw(guyouRaw))\n      .scale(151.496);\n}\n","import {geoProjectionMutator as projectionMutator, geoCircle} from \"d3-geo\";\nimport {abs, acos, asin, atan2, cos, degrees, epsilon, halfPi, radians, sqrt, sin} from \"./math.js\";\n\nexport function hammerRetroazimuthalRaw(phi0) {\n  var sinPhi0 = sin(phi0),\n      cosPhi0 = cos(phi0),\n      rotate = hammerRetroazimuthalRotation(phi0);\n\n  rotate.invert = hammerRetroazimuthalRotation(-phi0);\n\n  function forward(lambda, phi) {\n    var p = rotate(lambda, phi);\n    lambda = p[0], phi = p[1];\n    var sinPhi = sin(phi),\n        cosPhi = cos(phi),\n        cosLambda = cos(lambda),\n        z = acos(sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosLambda),\n        sinz = sin(z),\n        K = abs(sinz) > epsilon ? z / sinz : 1;\n    return [\n      K * cosPhi0 * sin(lambda),\n      (abs(lambda) > halfPi ? K : -K) // rotate for back hemisphere\n        * (sinPhi0 * cosPhi - cosPhi0 * sinPhi * cosLambda)\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var rho = sqrt(x * x + y * y),\n        sinz = -sin(rho),\n        cosz = cos(rho),\n        a = rho * cosz,\n        b = -y * sinz,\n        c = rho * sinPhi0,\n        d = sqrt(a * a + b * b - c * c),\n        phi = atan2(a * c + b * d, b * c - a * d),\n        lambda = (rho > halfPi ? -1 : 1) * atan2(x * sinz, rho * cos(phi) * cosz + y * sin(phi) * sinz);\n    return rotate.invert(lambda, phi);\n  };\n\n  return forward;\n}\n\n// Latitudinal rotation by phi0.\n// Temporary hack until D3 supports arbitrary small-circle clipping origins.\nfunction hammerRetroazimuthalRotation(phi0) {\n  var sinPhi0 = sin(phi0),\n      cosPhi0 = cos(phi0);\n\n  return function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi);\n    return [\n      atan2(y, x * cosPhi0 - z * sinPhi0),\n      asin(z * cosPhi0 + x * sinPhi0)\n    ];\n  };\n}\n\nexport default function() {\n  var phi0 = 0,\n      m = projectionMutator(hammerRetroazimuthalRaw),\n      p = m(phi0),\n      rotate_ = p.rotate,\n      stream_ = p.stream,\n      circle = geoCircle();\n\n  p.parallel = function(_) {\n    if (!arguments.length) return phi0 * degrees;\n    var r = p.rotate();\n    return m(phi0 = _ * radians).rotate(r);\n  };\n\n  // Temporary hack; see hammerRetroazimuthalRotation.\n  p.rotate = function(_) {\n    if (!arguments.length) return (_ = rotate_.call(p), _[1] += phi0 * degrees, _);\n    rotate_.call(p, [_[0], _[1] - phi0 * degrees]);\n    circle.center([-_[0], -_[1]]);\n    return p;\n  };\n\n  p.stream = function(stream) {\n    stream = stream_(stream);\n    stream.sphere = function() {\n      stream.polygonStart();\n      var epsilon = 1e-2,\n          ring = circle.radius(90 - epsilon)().coordinates[0],\n          n = ring.length - 1,\n          i = -1,\n          p;\n      stream.lineStart();\n      while (++i < n) stream.point((p = ring[i])[0], p[1]);\n      stream.lineEnd();\n      ring = circle.radius(90 + epsilon)().coordinates[0];\n      n = ring.length - 1;\n      stream.lineStart();\n      while (--i >= 0) stream.point((p = ring[i])[0], p[1]);\n      stream.lineEnd();\n      stream.polygonEnd();\n    };\n    return stream;\n  };\n\n  return p\n      .scale(79.4187)\n      .parallel(45)\n      .clipAngle(180 - 1e-3);\n}\n","import {range} from \"d3-array\";\nimport {geoStream, geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {collignonRaw} from \"./collignon.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\nimport {abs, asin, degrees, epsilon, floor, max, min, pi, radians, sqrtPi, tau} from \"./math.js\";\n\nvar K = 3,\n    healpixParallel = asin(1 - 1 / K) * degrees,\n    healpixLambert = cylindricalEqualAreaRaw(0);\n\nexport function healpixRaw(H) {\n  var phi0 = healpixParallel * radians,\n      dx = collignonRaw(pi, phi0)[0] - collignonRaw(-pi, phi0)[0],\n      y0 = healpixLambert(0, phi0)[1],\n      y1 = collignonRaw(0, phi0)[1],\n      dy1 = sqrtPi - y1,\n      k = tau / H,\n      w = 4 / tau,\n      h = y0 + (dy1 * dy1 * 4) / tau;\n\n  function forward(lambda, phi) {\n    var point,\n        phi2 = abs(phi);\n    if (phi2 > phi0) {\n      var i = min(H - 1, max(0, floor((lambda + pi) / k)));\n      lambda += pi * (H - 1) / H - i * k;\n      point = collignonRaw(lambda, phi2);\n      point[0] = point[0] * tau / dx - tau * (H - 1) / (2 * H) + i * tau / H;\n      point[1] = y0 + (point[1] - y1) * 4 * dy1 / tau;\n      if (phi < 0) point[1] = -point[1];\n    } else {\n      point = healpixLambert(lambda, phi);\n    }\n    point[0] *= w, point[1] /= h;\n    return point;\n  }\n\n  forward.invert = function(x, y) {\n    x /= w, y *= h;\n    var y2 = abs(y);\n    if (y2 > y0) {\n      var i = min(H - 1, max(0, floor((x + pi) / k)));\n      x = (x + pi * (H - 1) / H - i * k) * dx / tau;\n      var point = collignonRaw.invert(x, 0.25 * (y2 - y0) * tau / dy1 + y1);\n      point[0] -= pi * (H - 1) / H - i * k;\n      if (y < 0) point[1] = -point[1];\n      return point;\n    }\n    return healpixLambert.invert(x, y);\n  };\n\n  return forward;\n}\n\nfunction sphereTop(x, i) {\n  return [x, i & 1 ? 90 - epsilon : healpixParallel];\n}\n\nfunction sphereBottom(x, i) {\n  return [x, i & 1 ? -90 + epsilon : -healpixParallel];\n}\n\nfunction sphereNudge(d) {\n  return [d[0] * (1 - epsilon), d[1]];\n}\n\nfunction sphere(step) {\n  var c = [].concat(\n    range(-180, 180 + step / 2, step).map(sphereTop),\n    range(180, -180 - step / 2, -step).map(sphereBottom)\n  );\n  return {\n    type: \"Polygon\",\n    coordinates: [step === 180 ? c.map(sphereNudge) : c]\n  };\n}\n\nexport default function() {\n  var H = 4,\n      m = projectionMutator(healpixRaw),\n      p = m(H),\n      stream_ = p.stream;\n\n  p.lobes = function(_) {\n    return arguments.length ? m(H = +_) : H;\n  };\n\n  p.stream = function(stream) {\n    var rotate = p.rotate(),\n        rotateStream = stream_(stream),\n        sphereStream = (p.rotate([0, 0]), stream_(stream));\n    p.rotate(rotate);\n    rotateStream.sphere = function() { geoStream(sphere(180 / H), sphereStream); };\n    return rotateStream;\n  };\n\n  return p\n      .scale(239.75);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, acos, asin, atan2, cos, epsilon2, halfPi, pi, sin, sqrt} from \"./math.js\";\n\nexport function hillRaw(K) {\n  var L = 1 + K,\n      sinBt = sin(1 / L),\n      Bt = asin(sinBt),\n      A = 2 * sqrt(pi / (B = pi + 4 * Bt * L)),\n      B,\n      rho0 = 0.5 * A * (L + sqrt(K * (2 + K))),\n      K2 = K * K,\n      L2 = L * L;\n\n  function forward(lambda, phi) {\n    var t = 1 - sin(phi),\n        rho,\n        omega;\n    if (t && t < 2) {\n      var theta = halfPi - phi, i = 25, delta;\n      do {\n        var sinTheta = sin(theta),\n            cosTheta = cos(theta),\n            Bt_Bt1 = Bt + atan2(sinTheta, L - cosTheta),\n            C = 1 + L2 - 2 * L * cosTheta;\n        theta -= delta = (theta - K2 * Bt - L * sinTheta + C * Bt_Bt1 -0.5 * t * B) / (2 * L * sinTheta * Bt_Bt1);\n      } while (abs(delta) > epsilon2 && --i > 0);\n      rho = A * sqrt(C);\n      omega = lambda * Bt_Bt1 / pi;\n    } else {\n      rho = A * (K + t);\n      omega = lambda * Bt / pi;\n    }\n    return [\n      rho * sin(omega),\n      rho0 - rho * cos(omega)\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var rho2 = x * x + (y -= rho0) * y,\n        cosTheta = (1 + L2 - rho2 / (A * A)) / (2 * L),\n        theta = acos(cosTheta),\n        sinTheta = sin(theta),\n        Bt_Bt1 = Bt + atan2(sinTheta, L - cosTheta);\n    return [\n      asin(x / sqrt(rho2)) * pi / Bt_Bt1,\n      asin(1 - 2 * (theta - K2 * Bt - L * sinTheta + (1 + L2 - 2 * L * cosTheta) * Bt_Bt1) / B)\n    ];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var K = 1,\n      m = projectionMutator(hillRaw),\n      p = m(K);\n\n  p.ratio = function(_) {\n    return arguments.length ? m(K = +_) : K;\n  };\n\n  return p\n      .scale(167.774)\n      .center([0, 18.67]);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {mollweideRaw} from \"./mollweide.js\";\nimport {sinusoidalRaw} from \"./sinusoidal.js\";\n\nexport var sinuMollweidePhi = 0.7109889596207567;\n\nexport var sinuMollweideY = 0.0528035274542;\n\nexport function sinuMollweideRaw(lambda, phi) {\n  return phi > -sinuMollweidePhi\n      ? (lambda = mollweideRaw(lambda, phi), lambda[1] += sinuMollweideY, lambda)\n      : sinusoidalRaw(lambda, phi);\n}\n\nsinuMollweideRaw.invert = function(x, y) {\n  return y > -sinuMollweidePhi\n      ? mollweideRaw.invert(x, y - sinuMollweideY)\n      : sinusoidalRaw.invert(x, y);\n};\n\nexport default function() {\n  return projection(sinuMollweideRaw)\n      .rotate([-20, -55])\n      .scale(164.263)\n      .center([0, -5.4036]);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs} from \"./math.js\";\nimport {mollweideRaw} from \"./mollweide.js\";\nimport {sinusoidalRaw} from \"./sinusoidal.js\";\nimport {sinuMollweidePhi, sinuMollweideY} from \"./sinuMollweide.js\";\n\nexport function homolosineRaw(lambda, phi) {\n  return abs(phi) > sinuMollweidePhi\n      ? (lambda = mollweideRaw(lambda, phi), lambda[1] -= phi > 0 ? sinuMollweideY : -sinuMollweideY, lambda)\n      : sinusoidalRaw(lambda, phi);\n}\n\nhomolosineRaw.invert = function(x, y) {\n  return abs(y) > sinuMollweidePhi\n      ? mollweideRaw.invert(x, y + (y > 0 ? sinuMollweideY : -sinuMollweideY))\n      : sinusoidalRaw.invert(x, y);\n};\n\nexport default function() {\n  return projection(homolosineRaw)\n      .scale(152.63);\n}\n","import { geoProjectionMutator as projectionMutator } from \"d3-geo\";\nimport { asin, cos, degrees, pi, radians, sign, sin, sqrt } from \"./math.js\";\nimport { solve } from \"./newton.js\";\n\nexport function hufnagelRaw(a, b, psiMax, ratio) {\n  var k = sqrt(\n      (4 * pi) /\n        (2 * psiMax +\n          (1 + a - b / 2) * sin(2 * psiMax) +\n          ((a + b) / 2) * sin(4 * psiMax) +\n          (b / 2) * sin(6 * psiMax))\n    ),\n    c = sqrt(\n      ratio *\n        sin(psiMax) *\n        sqrt((1 + a * cos(2 * psiMax) + b * cos(4 * psiMax)) / (1 + a + b))\n    ),\n    M = psiMax * mapping(1);\n\n  function radius(psi) {\n    return sqrt(1 + a * cos(2 * psi) + b * cos(4 * psi));\n  }\n\n  function mapping(t) {\n    var psi = t * psiMax;\n    return (\n      (2 * psi +\n        (1 + a - b / 2) * sin(2 * psi) +\n        ((a + b) / 2) * sin(4 * psi) +\n        (b / 2) * sin(6 * psi)) /\n      psiMax\n    );\n  }\n\n  function inversemapping(psi) {\n    return radius(psi) * sin(psi);\n  }\n\n  var forward = function(lambda, phi) {\n    var psi = psiMax * solve(mapping, (M * sin(phi)) / psiMax, phi / pi);\n    if (isNaN(psi)) psi = psiMax * sign(phi);\n    var kr = k * radius(psi);\n    return [((kr * c * lambda) / pi) * cos(psi), (kr / c) * sin(psi)];\n  };\n\n  forward.invert = function(x, y) {\n    var psi = solve(inversemapping, (y * c) / k);\n    return [\n      (x * pi) / (cos(psi) * k * c * radius(psi)),\n      asin((psiMax * mapping(psi / psiMax)) / M)\n    ];\n  };\n\n  if (psiMax === 0) {\n    k = sqrt(ratio / pi);\n    forward = function(lambda, phi) {\n      return [lambda * k, sin(phi) / k];\n    };\n    forward.invert = function(x, y) {\n      return [x / k, asin(y * k)];\n    };\n  }\n\n  return forward;\n}\n\nexport default function() {\n  var a = 1,\n    b = 0,\n    psiMax = 45 * radians,\n    ratio = 2,\n    mutate = projectionMutator(hufnagelRaw),\n    projection = mutate(a, b, psiMax, ratio);\n\n  projection.a = function(_) {\n    return arguments.length ? mutate((a = +_), b, psiMax, ratio) : a;\n  };\n  projection.b = function(_) {\n    return arguments.length ? mutate(a, (b = +_), psiMax, ratio) : b;\n  };\n  projection.psiMax = function(_) {\n    return arguments.length\n      ? mutate(a, b, (psiMax = +_ * radians), ratio)\n      : psiMax * degrees;\n  };\n  projection.ratio = function(_) {\n    return arguments.length ? mutate(a, b, psiMax, (ratio = +_)) : ratio;\n  };\n\n  return projection.scale(180.739);\n}\n","// https://github.com/scijs/integrate-adaptive-simpson\n\n// This algorithm adapted from pseudocode in:\n// http://www.math.utk.edu/~ccollins/refs/Handouts/rich.pdf\nfunction adsimp (f, a, b, fa, fm, fb, V0, tol, maxdepth, depth, state) {\n  if (state.nanEncountered) {\n    return NaN;\n  }\n\n  var h, f1, f2, sl, sr, s2, m, V1, V2, err;\n\n  h = b - a;\n  f1 = f(a + h * 0.25);\n  f2 = f(b - h * 0.25);\n\n  // Simple check for NaN:\n  if (isNaN(f1)) {\n    state.nanEncountered = true;\n    return;\n  }\n\n  // Simple check for NaN:\n  if (isNaN(f2)) {\n    state.nanEncountered = true;\n    return;\n  }\n\n  sl = h * (fa + 4 * f1 + fm) / 12;\n  sr = h * (fm + 4 * f2 + fb) / 12;\n  s2 = sl + sr;\n  err = (s2 - V0) / 15;\n\n  if (depth > maxdepth) {\n    state.maxDepthCount++;\n    return s2 + err;\n  } else if (Math.abs(err) < tol) {\n    return s2 + err;\n  } else {\n    m = a + h * 0.5;\n\n    V1 = adsimp(f, a, m, fa, f1, fm, sl, tol * 0.5, maxdepth, depth + 1, state);\n\n    if (isNaN(V1)) {\n      state.nanEncountered = true;\n      return NaN;\n    }\n\n    V2 = adsimp(f, m, b, fm, f2, fb, sr, tol * 0.5, maxdepth, depth + 1, state);\n\n    if (isNaN(V2)) {\n      state.nanEncountered = true;\n      return NaN;\n    }\n\n    return V1 + V2;\n  }\n}\n\nexport function integrate (f, a, b, tol, maxdepth) {\n  var state = {\n    maxDepthCount: 0,\n    nanEncountered: false\n  };\n\n  if (tol === undefined) {\n    tol = 1e-8;\n  }\n  if (maxdepth === undefined) {\n    maxdepth = 20;\n  }\n\n  var fa = f(a);\n  var fm = f(0.5 * (a + b));\n  var fb = f(b);\n\n  var V0 = (fa + 4 * fm + fb) * (b - a) / 6;\n\n  var result = adsimp(f, a, b, fa, fm, fb, V0, tol, maxdepth, 1, state);\n\n/*\n  if (state.maxDepthCount > 0 && console && console.warn) {\n    console.warn('integrate-adaptive-simpson: Warning: maximum recursion depth (' + maxdepth + ') reached ' + state.maxDepthCount + ' times');\n  }\n\n  if (state.nanEncountered && console && console.warn) {\n    console.warn('integrate-adaptive-simpson: Warning: NaN encountered. Halting early.');\n  }\n*/\n\n  return result;\n}","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, asin, pi, pow, sign, sin} from \"./math.js\";\nimport {integrate} from \"./integrate.js\";\n\nexport function hyperellipticalRaw(alpha, k, gamma) {\n\n  function elliptic (f) {\n    return alpha + (1 - alpha) * pow(1 - pow(f, k), 1 / k);\n  }\n\n  function z(f) {\n    return integrate(elliptic, 0, f, 1e-4);\n  }\n\n  var G = 1 / z(1),\n      n = 1000,\n      m = (1 + 1e-8) * G,\n      approx = [];\n  for (var i = 0; i <= n; i++)\n      approx.push(z(i / n) * m);\n\n  function Y(sinphi) {\n    var rmin = 0, rmax = n, r = n >> 1;\n    do {\n      if (approx[r] > sinphi) rmax = r; else rmin = r;\n      r = (rmin + rmax) >> 1;\n    } while (r > rmin);\n    var u = approx[r + 1] - approx[r];\n    if (u) u = (sinphi - approx[r + 1]) / u;\n    return (r + 1 + u) / n;\n  }\n\n  var ratio = 2 * Y(1) / pi * G / gamma;\n\n  var forward = function(lambda, phi) {\n    var y = Y(abs(sin(phi))),\n        x = elliptic(y) * lambda;\n    y /= ratio;\n    return [ x, (phi >= 0) ? y : -y ];\n  };\n\n  forward.invert = function(x, y) {\n    var phi;\n    y *= ratio;\n    if (abs(y) < 1) phi = sign(y) * asin(z(abs(y)) * G);\n    return [ x / elliptic(abs(y)), phi ];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var alpha = 0,\n      k = 2.5,\n      gamma = 1.183136, // affine = sqrt(2 * gamma / pi) = 0.8679\n      m = projectionMutator(hyperellipticalRaw),\n      p = m(alpha, k, gamma);\n\n  p.alpha = function(_) {\n    return arguments.length ? m(alpha = +_, k, gamma) : alpha;\n  };\n\n  p.k = function(_) {\n    return arguments.length ? m(alpha, k = +_, gamma) : k;\n  };\n\n  p.gamma = function(_) {\n    return arguments.length ? m(alpha, k, gamma = +_) : gamma;\n  };\n\n  return p\n      .scale(152.63);\n}\n","import {merge} from \"d3-array\";\nimport {geoStream, geoProjection as projection} from \"d3-geo\";\nimport {abs, degrees, epsilon, radians} from \"../math.js\";\n\nfunction pointEqual(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n\nfunction interpolateLine(coordinates, m) {\n  var i = -1,\n      n = coordinates.length,\n      p0 = coordinates[0],\n      p1,\n      dx,\n      dy,\n      resampled = [];\n  while (++i < n) {\n    p1 = coordinates[i];\n    dx = (p1[0] - p0[0]) / m;\n    dy = (p1[1] - p0[1]) / m;\n    for (var j = 0; j < m; ++j) resampled.push([p0[0] + j * dx, p0[1] + j * dy]);\n    p0 = p1;\n  }\n  resampled.push(p1);\n  return resampled;\n}\n\nfunction interpolateSphere(lobes) {\n  var coordinates = [],\n      lobe,\n      lambda0, phi0, phi1,\n      lambda2, phi2,\n      i, n = lobes[0].length;\n\n  // Northern Hemisphere\n  for (i = 0; i < n; ++i) {\n    lobe = lobes[0][i];\n    lambda0 = lobe[0][0], phi0 = lobe[0][1], phi1 = lobe[1][1];\n    lambda2 = lobe[2][0], phi2 = lobe[2][1];\n    coordinates.push(interpolateLine([\n      [lambda0 + epsilon, phi0 + epsilon],\n      [lambda0 + epsilon, phi1 - epsilon],\n      [lambda2 - epsilon, phi1 - epsilon],\n      [lambda2 - epsilon, phi2 + epsilon]\n    ], 30));\n  }\n\n  // Southern Hemisphere\n  for (i = lobes[1].length - 1; i >= 0; --i) {\n    lobe = lobes[1][i];\n    lambda0 = lobe[0][0], phi0 = lobe[0][1], phi1 = lobe[1][1];\n    lambda2 = lobe[2][0], phi2 = lobe[2][1];\n    coordinates.push(interpolateLine([\n      [lambda2 - epsilon, phi2 - epsilon],\n      [lambda2 - epsilon, phi1 + epsilon],\n      [lambda0 + epsilon, phi1 + epsilon],\n      [lambda0 + epsilon, phi0 - epsilon]\n    ], 30));\n  }\n\n  return {\n    type: \"Polygon\",\n    coordinates: [merge(coordinates)]\n  };\n}\n\nexport default function(project, lobes, inverse) {\n  var sphere, bounds;\n\n  function forward(lambda, phi) {\n    var sign = phi < 0 ? -1 : +1, lobe = lobes[+(phi < 0)];\n    for (var i = 0, n = lobe.length - 1; i < n && lambda > lobe[i][2][0]; ++i);\n    var p = project(lambda - lobe[i][1][0], phi);\n    p[0] += project(lobe[i][1][0], sign * phi > sign * lobe[i][0][1] ? lobe[i][0][1] : phi)[0];\n    return p;\n  }\n\n  if (inverse) {\n    forward.invert = inverse(forward);\n  } else if (project.invert) {\n    forward.invert = function(x, y) {\n      var bound = bounds[+(y < 0)], lobe = lobes[+(y < 0)];\n      for (var i = 0, n = bound.length; i < n; ++i) {\n        var b = bound[i];\n        if (b[0][0] <= x && x < b[1][0] && b[0][1] <= y && y < b[1][1]) {\n          var p = project.invert(x - project(lobe[i][1][0], 0)[0], y);\n          p[0] += lobe[i][1][0];\n          return pointEqual(forward(p[0], p[1]), [x, y]) ? p : null;\n        }\n      }\n    };\n  }\n\n  var p = projection(forward),\n      stream_ = p.stream;\n\n  p.stream = function(stream) {\n    var rotate = p.rotate(),\n        rotateStream = stream_(stream),\n        sphereStream = (p.rotate([0, 0]), stream_(stream));\n    p.rotate(rotate);\n    rotateStream.sphere = function() { geoStream(sphere, sphereStream); };\n    return rotateStream;\n  };\n  \n  p.lobes = function(_) {\n    if (!arguments.length) return lobes.map(function(lobe) {\n      return lobe.map(function(l) {\n        return [\n          [l[0][0] * degrees, l[0][1] * degrees],\n          [l[1][0] * degrees, l[1][1] * degrees],\n          [l[2][0] * degrees, l[2][1] * degrees]\n        ];\n      });\n    });\n\n    sphere = interpolateSphere(_);\n\n    lobes = _.map(function(lobe) {\n      return lobe.map(function(l) {\n        return [\n          [l[0][0] * radians, l[0][1] * radians],\n          [l[1][0] * radians, l[1][1] * radians],\n          [l[2][0] * radians, l[2][1] * radians]\n        ];\n      });\n    });\n\n    bounds = lobes.map(function(lobe) {\n      return lobe.map(function(l) {\n        var x0 = project(l[0][0], l[0][1])[0],\n            x1 = project(l[2][0], l[2][1])[0],\n            y0 = project(l[1][0], l[0][1])[1],\n            y1 = project(l[1][0], l[1][1])[1],\n            t;\n        if (y0 > y1) t = y0, y0 = y1, y1 = t;\n        return [[x0, y0], [x1, y1]];\n      });\n    });\n\n    return p;\n  };\n\n  if (lobes != null) p.lobes(lobes);\n\n  return p;\n}\n","import {boggsRaw} from \"../boggs.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,   0], [-100,  90], [ -40,   0]],\n  [[ -40,   0], [  30,  90], [ 180,   0]]\n], [ // southern hemisphere\n  [[-180,   0], [-160, -90], [-100,   0]],\n  [[-100,   0], [ -60, -90], [ -20,   0]],\n  [[ -20,   0], [  20, -90], [  80,   0]],\n  [[  80,   0], [ 140, -90], [ 180,   0]]\n]];\n\nexport default function() {\n  return interrupt(boggsRaw, lobes)\n      .scale(160.857);\n}\n","import {homolosineRaw} from \"../homolosine.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,   0], [-100,  90], [ -40,   0]],\n  [[ -40,   0], [  30,  90], [ 180,   0]]\n], [ // southern hemisphere\n  [[-180,   0], [-160, -90], [-100,   0]],\n  [[-100,   0], [ -60, -90], [ -20,   0]],\n  [[ -20,   0], [  20, -90], [  80,   0]],\n  [[  80,   0], [ 140, -90], [ 180,   0]]\n]];\n\nexport default function() {\n  return interrupt(homolosineRaw, lobes)\n      .scale(152.63);\n}\n","import {mollweideRaw} from \"../mollweide.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,   0], [-100,  90], [ -40,   0]],\n  [[ -40,   0], [  30,  90], [ 180,   0]]\n], [ // southern hemisphere\n  [[-180,   0], [-160, -90], [-100,   0]],\n  [[-100,   0], [ -60, -90], [ -20,   0]],\n  [[ -20,   0], [  20, -90], [  80,   0]],\n  [[  80,   0], [ 140, -90], [ 180,   0]]\n]];\n\nexport default function() {\n  return interrupt(mollweideRaw, lobes)\n      .scale(169.529);\n}\n","import {mollweideRaw} from \"../mollweide.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,   0], [ -90,  90], [   0,   0]],\n  [[   0,   0], [  90,  90], [ 180,   0]]\n], [ // southern hemisphere\n  [[-180,   0], [ -90, -90], [   0,   0]],\n  [[   0,   0], [  90, -90], [ 180,   0]]\n]];\n\nexport default function() {\n  return interrupt(mollweideRaw, lobes)\n      .scale(169.529)\n      .rotate([20, 0]);\n}\n","import {sinuMollweideRaw} from \"../sinuMollweide.js\";\nimport interrupt from \"./index.js\";\nimport {solve2d} from \"../newton.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,  35], [ -30,  90], [   0,  35]],\n  [[   0,  35], [  30,  90], [ 180,  35]]\n], [ // southern hemisphere\n  [[-180, -10], [-102, -90], [ -65, -10]],\n  [[ -65, -10], [   5, -90], [  77, -10]],\n  [[  77, -10], [ 103, -90], [ 180, -10]]\n]];\n\nexport default function() {\n  return interrupt(sinuMollweideRaw, lobes, solve2d)\n      .rotate([-20, -55])\n      .scale(164.263)\n      .center([0, -5.4036]);\n}\n","import {sinusoidalRaw} from \"../sinusoidal.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,   0], [-110,  90], [ -40,   0]],\n  [[ -40,   0], [   0,  90], [  40,   0]],\n  [[  40,   0], [ 110,  90], [ 180,   0]]\n], [ // southern hemisphere\n  [[-180,   0], [-110, -90], [ -40,   0]],\n  [[ -40,   0], [   0, -90], [  40,   0]],\n  [[  40,   0], [ 110, -90], [ 180,   0]]\n]];\n\nexport default function() {\n  return interrupt(sinusoidalRaw, lobes)\n      .scale(152.63)\n      .rotate([-20, 0]);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {pi, sqrt, tau} from \"./math.js\";\n\nexport function kavrayskiy7Raw(lambda, phi) {\n  return [3 / tau * lambda * sqrt(pi * pi / 3 - phi * phi), phi];\n}\n\nkavrayskiy7Raw.invert = function(x, y) {\n  return [tau / 3 * x / sqrt(pi * pi / 3 - y * y), y];\n};\n\nexport default function() {\n  return projection(kavrayskiy7Raw)\n      .scale(158.837);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pow, sign, sin} from \"./math.js\";\n\nexport function lagrangeRaw(n) {\n\n  function forward(lambda, phi) {\n    if (abs(abs(phi) - halfPi) < epsilon) return [0, phi < 0 ? -2 : 2];\n    var sinPhi = sin(phi),\n        v = pow((1 + sinPhi) / (1 - sinPhi), n / 2),\n        c = 0.5 * (v + 1 / v) + cos(lambda *= n);\n    return [\n      2 * sin(lambda) / c,\n      (v - 1 / v) / c\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var y0 = abs(y);\n    if (abs(y0 - 2) < epsilon) return x ? null : [0, sign(y) * halfPi];\n    if (y0 > 2) return null;\n\n    x /= 2, y /= 2;\n    var x2 = x * x,\n        y2 = y * y,\n        t = 2 * y / (1 + x2 + y2); // tanh(nPhi)\n    t = pow((1 + t) / (1 - t), 1 / n);\n    return [\n      atan2(2 * x, 1 - x2 - y2) / n,\n      asin((t - 1) / (t + 1))\n    ];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var n = 0.5,\n      m = projectionMutator(lagrangeRaw),\n      p = m(n);\n\n  p.spacing = function(_) {\n    return arguments.length ? m(n = +_) : n;\n  };\n\n  return p\n      .scale(124.75);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, acos, cos, epsilon, halfPi, sin, pi, sqrt, sqrt2} from \"./math.js\";\n\nvar pi_sqrt2 = pi / sqrt2;\n\nexport function larriveeRaw(lambda, phi) {\n  return [\n    lambda * (1 + sqrt(cos(phi))) / 2,\n    phi / (cos(phi / 2) * cos(lambda / 6))\n  ];\n}\n\nlarriveeRaw.invert = function(x, y) {\n  var x0 = abs(x),\n      y0 = abs(y),\n      lambda = epsilon,\n      phi = halfPi;\n  if (y0 < pi_sqrt2) phi *= y0 / pi_sqrt2;\n  else lambda += 6 * acos(pi_sqrt2 / y0);\n  for (var i = 0; i < 25; i++) {\n    var sinPhi = sin(phi),\n        sqrtcosPhi = sqrt(cos(phi)),\n        sinPhi_2 = sin(phi / 2),\n        cosPhi_2 = cos(phi / 2),\n        sinLambda_6 = sin(lambda / 6),\n        cosLambda_6 = cos(lambda / 6),\n        f0 = 0.5 * lambda * (1 + sqrtcosPhi) - x0,\n        f1 = phi / (cosPhi_2 * cosLambda_6) - y0,\n        df0dPhi = sqrtcosPhi ? -0.25 * lambda * sinPhi / sqrtcosPhi : 0,\n        df0dLambda = 0.5 * (1 + sqrtcosPhi),\n        df1dPhi = (1 + 0.5 * phi * sinPhi_2 / cosPhi_2) / (cosPhi_2 * cosLambda_6),\n        df1dLambda = (phi / cosPhi_2) * (sinLambda_6 / 6) / (cosLambda_6 * cosLambda_6),\n        denom = df0dPhi * df1dLambda - df1dPhi * df0dLambda,\n        dPhi = (f0 * df1dLambda - f1 * df0dLambda) / denom,\n        dLambda = (f1 * df0dPhi - f0 * df1dPhi) / denom;\n    phi -= dPhi;\n    lambda -= dLambda;\n    if (abs(dPhi) < epsilon && abs(dLambda) < epsilon) break;\n  }\n  return [x < 0 ? -lambda : lambda, y < 0 ? -phi : phi];\n};\n\nexport default function() {\n  return projection(larriveeRaw)\n      .scale(97.2672);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, epsilon, pi, sign} from \"./math.js\";\n\nexport function laskowskiRaw(lambda, phi) {\n  var lambda2 = lambda * lambda, phi2 = phi * phi;\n  return [\n    lambda * (0.975534 + phi2 * (-0.119161 + lambda2 * -0.0143059 + phi2 * -0.0547009)),\n    phi * (1.00384 + lambda2 * (0.0802894 + phi2 * -0.02855 + lambda2 * 0.000199025) + phi2 * (0.0998909 + phi2 * -0.0491032))\n  ];\n}\n\nlaskowskiRaw.invert = function(x, y) {\n  var lambda = sign(x) * pi,\n      phi = y / 2,\n      i = 50;\n  do {\n    var lambda2 = lambda * lambda,\n        phi2 = phi * phi,\n        lambdaPhi = lambda * phi,\n        fx = lambda * (0.975534 + phi2 * (-0.119161 + lambda2 * -0.0143059 + phi2 * -0.0547009)) - x,\n        fy = phi * (1.00384 + lambda2 * (0.0802894 + phi2 * -0.02855 + lambda2 * 0.000199025) + phi2 * (0.0998909 + phi2 * -0.0491032)) - y,\n        deltaxDeltaLambda = 0.975534 - phi2 * (0.119161 + 3 * lambda2 * 0.0143059 + phi2 * 0.0547009),\n        deltaxDeltaPhi = -lambdaPhi * (2 * 0.119161 + 4 * 0.0547009 * phi2 + 2 * 0.0143059 * lambda2),\n        deltayDeltaLambda = lambdaPhi * (2 * 0.0802894 + 4 * 0.000199025 * lambda2 + 2 * -0.02855 * phi2),\n        deltayDeltaPhi = 1.00384 + lambda2 * (0.0802894 + 0.000199025 * lambda2) + phi2 * (3 * (0.0998909 - 0.02855 * lambda2) - 5 * 0.0491032 * phi2),\n        denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda,\n        deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator,\n        deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;\n    lambda -= deltaLambda, phi -= deltaPhi;\n  } while ((abs(deltaLambda) > epsilon || abs(deltaPhi) > epsilon) && --i > 0);\n  return i && [lambda, phi];\n};\n\nexport default function() {\n  return projection(laskowskiRaw)\n      .scale(139.98);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {acos, asin, cos, sign, sin, tan, sqrt, sqrt1_2} from \"./math.js\";\n\nexport function littrowRaw(lambda, phi) {\n  return [\n    sin(lambda) / cos(phi),\n    tan(phi) * cos(lambda)\n  ];\n}\n\nlittrowRaw.invert = function(x, y) {\n  var x2 = x * x,\n      y2 = y * y,\n      y2_1 = y2 + 1,\n      x2_y2_1 = x2 + y2_1,\n      cosPhi = x\n          ? sqrt1_2 * sqrt((x2_y2_1 - sqrt(x2_y2_1 * x2_y2_1 - 4 * x2)) / x2)\n          : 1 / sqrt(y2_1);\n  return [\n    asin(x * cosPhi),\n    sign(y) * acos(cosPhi)\n  ];\n};\n\nexport default function() {\n  return projection(littrowRaw)\n      .scale(144.049)\n      .clipAngle(90 - 1e-3);\n}\n","import parallel1 from \"./parallel1.js\";\nimport {abs, cos, epsilon, halfPi, log, quarterPi, tan} from \"./math.js\";\n\nexport function loximuthalRaw(phi0) {\n  var cosPhi0 = cos(phi0),\n      tanPhi0 = tan(quarterPi + phi0 / 2);\n\n  function forward(lambda, phi) {\n    var y = phi - phi0,\n        x = abs(y) < epsilon ? lambda * cosPhi0\n            : abs(x = quarterPi + phi / 2) < epsilon || abs(abs(x) - halfPi) < epsilon\n            ? 0 : lambda * y / log(tan(x) / tanPhi0);\n    return [x, y];\n  }\n\n  forward.invert = function(x, y) {\n    var lambda,\n        phi = y + phi0;\n    return [\n      abs(y) < epsilon ? x / cosPhi0\n          : (abs(lambda = quarterPi + phi / 2) < epsilon || abs(abs(lambda) - halfPi) < epsilon) ? 0\n          : x * log(tan(lambda) / tanPhi0) / y,\n      phi\n    ];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(loximuthalRaw)\n      .parallel(40)\n      .scale(158.837);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {atan, exp, log, quarterPi, pi, tan} from \"./math.js\";\n\nexport function millerRaw(lambda, phi) {\n  return [lambda, 1.25 * log(tan(quarterPi + 0.4 * phi))];\n}\n\nmillerRaw.invert = function(x, y) {\n  return [x, 2.5 * atan(exp(0.8 * y)) - 0.625 * pi];\n};\n\nexport default function() {\n  return projection(millerRaw)\n      .scale(108.318);\n}\n","import {geoProjection as projection, geoRotation as rotation} from \"d3-geo\";\nimport {abs, asin, atan, atan2, cos, epsilon, sin, sqrt} from \"./math.js\";\n\nexport function modifiedStereographicRaw(C) {\n  var m = C.length - 1;\n\n  function forward(lambda, phi) {\n    var cosPhi = cos(phi),\n        k = 2 / (1 + cosPhi * cos(lambda)),\n        zr = k * cosPhi * sin(lambda),\n        zi = k * sin(phi),\n        i = m,\n        w = C[i],\n        ar = w[0],\n        ai = w[1],\n        t;\n    while (--i >= 0) {\n      w = C[i];\n      ar = w[0] + zr * (t = ar) - zi * ai;\n      ai = w[1] + zr * ai + zi * t;\n    }\n    ar = zr * (t = ar) - zi * ai;\n    ai = zr * ai + zi * t;\n    return [ar, ai];\n  }\n\n  forward.invert = function(x, y) {\n    var i = 20,\n        zr = x,\n        zi = y;\n    do {\n      var j = m,\n          w = C[j],\n          ar = w[0],\n          ai = w[1],\n          br = 0,\n          bi = 0,\n          t;\n\n      while (--j >= 0) {\n        w = C[j];\n        br = ar + zr * (t = br) - zi * bi;\n        bi = ai + zr * bi + zi * t;\n        ar = w[0] + zr * (t = ar) - zi * ai;\n        ai = w[1] + zr * ai + zi * t;\n      }\n      br = ar + zr * (t = br) - zi * bi;\n      bi = ai + zr * bi + zi * t;\n      ar = zr * (t = ar) - zi * ai - x;\n      ai = zr * ai + zi * t - y;\n\n      var denominator = br * br + bi * bi, deltar, deltai;\n      zr -= deltar = (ar * br + ai * bi) / denominator;\n      zi -= deltai = (ai * br - ar * bi) / denominator;\n    } while (abs(deltar) + abs(deltai) > epsilon * epsilon && --i > 0);\n\n    if (i) {\n      var rho = sqrt(zr * zr + zi * zi),\n          c = 2 * atan(rho * 0.5),\n          sinc = sin(c);\n      return [atan2(zr * sinc, rho * cos(c)), rho ? asin(zi * sinc / rho) : 0];\n    }\n  };\n\n  return forward;\n}\n\nvar alaska = [[0.9972523, 0], [0.0052513, -0.0041175], [0.0074606, 0.0048125], [-0.0153783, -0.1968253], [0.0636871, -0.1408027], [0.3660976, -0.2937382]],\n    gs48 = [[0.98879, 0], [0, 0], [-0.050909, 0], [0, 0], [0.075528, 0]],\n    gs50 = [[0.9842990, 0], [0.0211642, 0.0037608], [-0.1036018, -0.0575102], [-0.0329095, -0.0320119], [0.0499471, 0.1223335], [0.0260460, 0.0899805], [0.0007388, -0.1435792], [0.0075848, -0.1334108], [-0.0216473, 0.0776645], [-0.0225161, 0.0853673]],\n    miller = [[0.9245, 0], [0, 0], [0.01943, 0]],\n    lee = [[0.721316, 0], [0, 0], [-0.00881625, -0.00617325]];\n\nexport function modifiedStereographicAlaska() {\n  return modifiedStereographic(alaska, [152, -64])\n      .scale(1400)\n      .center([-160.908, 62.4864])\n      .clipAngle(30)\n      .angle(7.8);\n}\n\nexport function modifiedStereographicGs48() {\n  return modifiedStereographic(gs48, [95, -38])\n      .scale(1000)\n      .clipAngle(55)\n      .center([-96.5563, 38.8675]);\n}\n\nexport function modifiedStereographicGs50() {\n  return modifiedStereographic(gs50, [120, -45])\n      .scale(359.513)\n      .clipAngle(55)\n      .center([-117.474, 53.0628]);\n}\n\nexport function modifiedStereographicMiller() {\n  return modifiedStereographic(miller, [-20, -18])\n      .scale(209.091)\n      .center([20, 16.7214])\n      .clipAngle(82);\n}\n\nexport function modifiedStereographicLee() {\n  return modifiedStereographic(lee, [165, 10])\n      .scale(250)\n      .clipAngle(130)\n      .center([-165, -10]);\n}\n\nexport default function modifiedStereographic(coefficients, rotate) {\n  var p = projection(modifiedStereographicRaw(coefficients)).rotate(rotate).clipAngle(90),\n      r = rotation(rotate),\n      center = p.center;\n\n  delete p.rotate;\n\n  p.center = function(_) {\n    return arguments.length ? center(r(_)) : r.invert(center());\n  };\n\n  return p;\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {asin, cos, sin, sqrt} from \"./math.js\";\n\nvar sqrt6 = sqrt(6),\n    sqrt7 = sqrt(7);\n\nexport function mtFlatPolarParabolicRaw(lambda, phi) {\n  var theta = asin(7 * sin(phi) / (3 * sqrt6));\n  return [\n    sqrt6 * lambda * (2 * cos(2 * theta / 3) - 1) / sqrt7,\n    9 * sin(theta / 3) / sqrt7\n  ];\n}\n\nmtFlatPolarParabolicRaw.invert = function(x, y) {\n  var theta = 3 * asin(y * sqrt7 / 9);\n  return [\n    x * sqrt7 / (sqrt6 * (2 * cos(2 * theta / 3) - 1)),\n    asin(sin(theta) * 3 * sqrt6 / 7)\n  ];\n};\n\nexport default function() {\n  return projection(mtFlatPolarParabolicRaw)\n      .scale(164.859);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, sin, sqrt, sqrt1_2, sqrt2} from \"./math.js\";\n\nexport function mtFlatPolarQuarticRaw(lambda, phi) {\n  var k = (1 + sqrt1_2) * sin(phi),\n      theta = phi;\n  for (var i = 0, delta; i < 25; i++) {\n    theta -= delta = (sin(theta / 2) + sin(theta) - k) / (0.5 * cos(theta / 2) + cos(theta));\n    if (abs(delta) < epsilon) break;\n  }\n  return [\n    lambda * (1 + 2 * cos(theta) / cos(theta / 2)) / (3 * sqrt2),\n    2 * sqrt(3) * sin(theta / 2) / sqrt(2 + sqrt2)\n  ];\n}\n\nmtFlatPolarQuarticRaw.invert = function(x, y) {\n  var sinTheta_2 = y * sqrt(2 + sqrt2) / (2 * sqrt(3)),\n      theta = 2 * asin(sinTheta_2);\n  return [\n    3 * sqrt2 * x / (1 + 2 * cos(theta) / cos(theta / 2)),\n    asin((sinTheta_2 + sin(theta)) / (1 + sqrt1_2))\n  ];\n};\n\nexport default function() {\n  return projection(mtFlatPolarQuarticRaw)\n      .scale(188.209);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt} from \"./math.js\";\n\nexport function mtFlatPolarSinusoidalRaw(lambda, phi) {\n  var A = sqrt(6 / (4 + pi)),\n      k = (1 + pi / 4) * sin(phi),\n      theta = phi / 2;\n  for (var i = 0, delta; i < 25; i++) {\n    theta -= delta = (theta / 2 + sin(theta) - k) / (0.5 + cos(theta));\n    if (abs(delta) < epsilon) break;\n  }\n  return [\n    A * (0.5 + cos(theta)) * lambda / 1.5,\n    A * theta\n  ];\n}\n\nmtFlatPolarSinusoidalRaw.invert = function(x, y) {\n  var A = sqrt(6 / (4 + pi)),\n      theta = y / A;\n  if (abs(abs(theta) - halfPi) < epsilon) theta = theta < 0 ? -halfPi : halfPi;\n  return [\n    1.5 * x / (A * (0.5 + cos(theta))),\n    asin((theta / 2 + sin(theta)) / (1 + pi / 4))\n  ];\n};\n\nexport default function() {\n  return projection(mtFlatPolarSinusoidalRaw)\n      .scale(166.518);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, epsilon2} from \"./math.js\";\n\nexport function naturalEarth2Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2, phi6 = phi2 * phi4;\n  return [\n    lambda * (0.84719 - 0.13063 * phi2 + phi6 * phi6 * (-0.04515 + 0.05494 * phi2 - 0.02326 * phi4 + 0.00331 * phi6)),\n    phi * (1.01183 + phi4 * phi4 * (-0.02625 + 0.01926 * phi2 - 0.00396 * phi4))\n  ];\n}\n\nnaturalEarth2Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta, phi2, phi4, phi6;\n  do {\n    phi2 = phi * phi; phi4 = phi2 * phi2;\n    phi -= delta = ((phi * (1.01183 + phi4 * phi4 * (-0.02625 + 0.01926 * phi2 - 0.00396 * phi4))) - y) /\n      (1.01183 + phi4 * phi4 * ((9 * -0.02625) + (11 * 0.01926) * phi2 + (13 * -0.00396) * phi4));\n  } while (abs(delta) > epsilon2 && --i > 0);\n  phi2 = phi * phi; phi4 = phi2 * phi2; phi6 = phi2 * phi4;\n  return [\n    x / (0.84719 - 0.13063 * phi2 + phi6 * phi6 * (-0.04515 + 0.05494 * phi2 - 0.02326 * phi4 + 0.00331 * phi6)),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth2Raw)\n      .scale(175.295);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, cos, epsilon, tan} from \"./math.js\";\n\nexport function nellHammerRaw(lambda, phi) {\n  return [\n    lambda * (1 + cos(phi)) / 2,\n    2 * (phi - tan(phi / 2))\n  ];\n}\n\nnellHammerRaw.invert = function(x, y) {\n  var p = y / 2;\n  for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; ++i) {\n    var c = cos(y / 2);\n    y -= delta = (y - tan(y / 2) - p) / (1 - 0.5 / (c * c));\n  }\n  return [\n    2 * x / (1 + cos(y)),\n    y\n  ];\n};\n\nexport default function() {\n  return projection(nellHammerRaw)\n      .scale(152.63);\n}\n","import {hammerRaw} from \"../hammer.js\";\nimport interrupt from \"./index.js\";\n\nvar lobes = [[ // northern hemisphere\n  [[-180,  0],  [-90,  90], [   0,  0]],\n  [[   0,  0], [  90,  90], [ 180, 0]]\n], [ // southern hemisphere\n  [[-180, 0], [-90, -90], [  0, 0]],\n  [[   0, 0], [ 90, -90], [180, 0]]\n]];\n\nexport default function() {\n  return interrupt(hammerRaw(Infinity), lobes)\n      .rotate([20, 0])\n      .scale(152.63);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, cos, halfPi, pi, sign, sin, sqrt} from \"./math.js\";\nimport {solve} from \"./newton.js\";\n\n// Based on Torben Jansen's implementation\n// https://beta.observablehq.com/@toja/nicolosi-globular-projection\n// https://beta.observablehq.com/@toja/nicolosi-globular-inverse\n\nexport function nicolosiRaw(lambda, phi) {\n  var sinPhi = sin(phi),\n    q = cos(phi),\n    s = sign(lambda);\n\n  if (lambda === 0 || abs(phi) === halfPi) return [0, phi];\n  else if (phi === 0) return [lambda, 0];\n  else if (abs(lambda) === halfPi) return [lambda * q, halfPi * sinPhi];\n\n  var b = pi / (2 * lambda) - (2 * lambda) / pi,\n    c = (2 * phi) / pi,\n    d = (1 - c * c) / (sinPhi - c);\n\n  var b2 = b * b,\n    d2 = d * d,\n    b2d2 = 1 + b2 / d2,\n    d2b2 = 1 + d2 / b2;\n\n  var M = ((b * sinPhi) / d - b / 2) / b2d2,\n    N = ((d2 * sinPhi) / b2 + d / 2) / d2b2,\n    m = M * M + (q * q) / b2d2,\n    n = N * N - ((d2 * sinPhi * sinPhi) / b2 + d * sinPhi - 1) / d2b2;\n\n  return [\n    halfPi * (M + sqrt(m) * s),\n    halfPi * (N + sqrt(n < 0 ? 0 : n) * sign(-phi * b) * s)\n  ];\n}\n\nnicolosiRaw.invert = function(x, y) {\n\n  x /= halfPi;\n  y /= halfPi;\n\n  var x2 = x * x,\n    y2 = y * y,\n    x2y2 = x2 + y2,\n    pi2 = pi * pi;\n\n  return [\n    x ? (x2y2 -1 + sqrt((1 - x2y2) * (1 - x2y2) + 4 * x2)) / (2 * x) * halfPi : 0,\n    solve(function(phi) {\n      return (\n        x2y2 * (pi * sin(phi) - 2 * phi) * pi +\n        4 * phi * phi * (y - sin(phi)) +\n        2 * pi * phi -\n        pi2 * y\n      );\n    }, 0)\n  ];\n};\n\nexport default function() {\n  return projection(nicolosiRaw)\n    .scale(127.267);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, epsilon} from \"./math.js\";\n\n// Based on Java implementation by Bojan Savric.\n// https://github.com/OSUCartography/JMapProjLib/blob/master/src/com/jhlabs/map/proj/PattersonProjection.java\n\nvar pattersonK1 = 1.0148,\n    pattersonK2 = 0.23185,\n    pattersonK3 = -0.14499,\n    pattersonK4 = 0.02406,\n    pattersonC1 = pattersonK1,\n    pattersonC2 = 5 * pattersonK2,\n    pattersonC3 = 7 * pattersonK3,\n    pattersonC4 = 9 * pattersonK4,\n    pattersonYmax = 1.790857183;\n\nexport function pattersonRaw(lambda, phi) {\n  var phi2 = phi * phi;\n  return [\n    lambda,\n    phi * (pattersonK1 + phi2 * phi2 * (pattersonK2 + phi2 * (pattersonK3 + pattersonK4 * phi2)))\n  ];\n}\n\npattersonRaw.invert = function(x, y) {\n  if (y > pattersonYmax) y = pattersonYmax;\n  else if (y < -pattersonYmax) y = -pattersonYmax;\n  var yc = y, delta;\n\n  do { // Newton-Raphson\n    var y2 = yc * yc;\n    yc -= delta = ((yc * (pattersonK1 + y2 * y2 * (pattersonK2 + y2 * (pattersonK3 + pattersonK4 * y2)))) - y) / (pattersonC1 + y2 * y2 * (pattersonC2 + y2 * (pattersonC3 + pattersonC4 * y2)));\n  } while (abs(delta) > epsilon);\n\n  return [x, yc];\n};\n\nexport default function() {\n  return projection(pattersonRaw)\n      .scale(139.319);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, acos, asin, cos, epsilon, halfPi, sign, sin, tan} from \"./math.js\";\n\nexport function polyconicRaw(lambda, phi) {\n  if (abs(phi) < epsilon) return [lambda, 0];\n  var tanPhi = tan(phi),\n      k = lambda * sin(phi);\n  return [\n    sin(k) / tanPhi,\n    phi + (1 - cos(k)) / tanPhi\n  ];\n}\n\npolyconicRaw.invert = function(x, y) {\n  if (abs(y) < epsilon) return [x, 0];\n  var k = x * x + y * y,\n      phi = y * 0.5,\n      i = 10, delta;\n  do {\n    var tanPhi = tan(phi),\n        secPhi = 1 / cos(phi),\n        j = k - 2 * y * phi + phi * phi;\n    phi -= delta = (tanPhi * j + 2 * (phi - y)) / (2 + j * secPhi * secPhi + 2 * (phi - y) * tanPhi);\n  } while (abs(delta) > epsilon && --i > 0);\n  tanPhi = tan(phi);\n  return [\n    (abs(y) < abs(phi + 1 / tanPhi) ? asin(x * tanPhi) : sign(y) * sign(x) * (acos(abs(x * tanPhi)) + halfPi)) / sin(phi),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(polyconicRaw)\n      .scale(103.74);\n}\n","import {atan2, cos, sin, sqrt} from \"../math.js\";\n\n// Note: 6-element arrays are used to denote the 3x3 affine transform matrix:\n// [a, b, c,\n//  d, e, f,\n//  0, 0, 1] - this redundant row is left out.\n\n// Transform matrix for [a0, a1] -> [b0, b1].\nexport default function(a, b) {\n  var u = subtract(a[1], a[0]),\n      v = subtract(b[1], b[0]),\n      phi = angle(u, v),\n      s = length(u) / length(v);\n\n  return multiply([\n    1, 0, a[0][0],\n    0, 1, a[0][1]\n  ], multiply([\n    s, 0, 0,\n    0, s, 0\n  ], multiply([\n    cos(phi), sin(phi), 0,\n    -sin(phi), cos(phi), 0\n  ], [\n    1, 0, -b[0][0],\n    0, 1, -b[0][1]\n  ])));\n}\n\n// Inverts a transform matrix.\nexport function inverse(m) {\n  var k = 1 / (m[0] * m[4] - m[1] * m[3]);\n  return [\n    k * m[4], -k * m[1], k * (m[1] * m[5] - m[2] * m[4]),\n    -k * m[3], k * m[0], k * (m[2] * m[3] - m[0] * m[5])\n  ];\n}\n\n// Multiplies two 3x2 matrices.\nexport function multiply(a, b) {\n  return [\n    a[0] * b[0] + a[1] * b[3],\n    a[0] * b[1] + a[1] * b[4],\n    a[0] * b[2] + a[1] * b[5] + a[2],\n    a[3] * b[0] + a[4] * b[3],\n    a[3] * b[1] + a[4] * b[4],\n    a[3] * b[2] + a[4] * b[5] + a[5]\n  ];\n}\n\n// Subtracts 2D vectors.\nfunction subtract(a, b) {\n  return [a[0] - b[0], a[1] - b[1]];\n}\n\n// Magnitude of a 2D vector.\nfunction length(v) {\n  return sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n\n// Angle between two 2D vectors.\nfunction angle(a, b) {\n  return atan2(a[0] * b[1] - a[1] * b[0], a[0] * b[0] + a[1] * b[1]);\n}\n","import {geoBounds as bounds, geoCentroid as centroid, geoInterpolate as interpolate, geoProjection as projection} from \"d3-geo\";\nimport {abs, degrees, epsilon, radians} from \"../math.js\";\nimport {default as matrix, multiply, inverse} from \"./matrix.js\";\n\n// Creates a polyhedral projection.\n//  * root: a spanning tree of polygon faces.  Nodes are automatically\n//    augmented with a transform matrix.\n//  * face: a function that returns the appropriate node for a given {lambda, phi}\n//    point (radians).\nexport default function(root, face) {\n\n  recurse(root, {transform: null});\n\n  function recurse(node, parent) {\n    node.edges = faceEdges(node.face);\n    // Find shared edge.\n    if (parent.face) {\n      var shared = node.shared = sharedEdge(node.face, parent.face),\n          m = matrix(shared.map(parent.project), shared.map(node.project));\n      node.transform = parent.transform ? multiply(parent.transform, m) : m;\n      // Replace shared edge in parent edges array.\n      var edges = parent.edges;\n      for (var i = 0, n = edges.length; i < n; ++i) {\n        if (pointEqual(shared[0], edges[i][1]) && pointEqual(shared[1], edges[i][0])) edges[i] = node;\n        if (pointEqual(shared[0], edges[i][0]) && pointEqual(shared[1], edges[i][1])) edges[i] = node;\n      }\n      edges = node.edges;\n      for (i = 0, n = edges.length; i < n; ++i) {\n        if (pointEqual(shared[0], edges[i][0]) && pointEqual(shared[1], edges[i][1])) edges[i] = parent;\n        if (pointEqual(shared[0], edges[i][1]) && pointEqual(shared[1], edges[i][0])) edges[i] = parent;\n      }\n    } else {\n      node.transform = parent.transform;\n    }\n    if (node.children) {\n      node.children.forEach(function(child) {\n        recurse(child, node);\n      });\n    }\n    return node;\n  }\n\n  function forward(lambda, phi) {\n    var node = face(lambda, phi),\n        point = node.project([lambda * degrees, phi * degrees]),\n        t;\n    if (t = node.transform) {\n      return [\n        t[0] * point[0] + t[1] * point[1] + t[2],\n        -(t[3] * point[0] + t[4] * point[1] + t[5])\n      ];\n    }\n    point[1] = -point[1];\n    return point;\n  }\n\n  // Naive inverse!  A faster solution would use bounding boxes, or even a\n  // polygonal quadtree.\n  if (hasInverse(root)) forward.invert = function(x, y) {\n    var coordinates = faceInvert(root, [x, -y]);\n    return coordinates && (coordinates[0] *= radians, coordinates[1] *= radians, coordinates);\n  };\n\n  function faceInvert(node, coordinates) {\n    var invert = node.project.invert,\n        t = node.transform,\n        point = coordinates;\n    if (t) {\n      t = inverse(t);\n      point = [\n        t[0] * point[0] + t[1] * point[1] + t[2],\n        (t[3] * point[0] + t[4] * point[1] + t[5])\n      ];\n    }\n    if (invert && node === faceDegrees(p = invert(point))) return p;\n    var p,\n        children = node.children;\n    for (var i = 0, n = children && children.length; i < n; ++i) {\n      if (p = faceInvert(children[i], coordinates)) return p;\n    }\n  }\n\n  function faceDegrees(coordinates) {\n    return face(coordinates[0] * radians, coordinates[1] * radians);\n  }\n\n  var proj = projection(forward),\n      stream_ = proj.stream;\n\n  proj.stream = function(stream) {\n    var rotate = proj.rotate(),\n        rotateStream = stream_(stream),\n        sphereStream = (proj.rotate([0, 0]), stream_(stream));\n    proj.rotate(rotate);\n    rotateStream.sphere = function() {\n      sphereStream.polygonStart();\n      sphereStream.lineStart();\n      outline(sphereStream, root);\n      sphereStream.lineEnd();\n      sphereStream.polygonEnd();\n    };\n    return rotateStream;\n  };\n\n  return proj.angle(-30);\n}\n\nfunction outline(stream, node, parent) {\n  var point,\n      edges = node.edges,\n      n = edges.length,\n      edge,\n      multiPoint = {type: \"MultiPoint\", coordinates: node.face},\n      notPoles = node.face.filter(function(d) { return abs(d[1]) !== 90; }),\n      b = bounds({type: \"MultiPoint\", coordinates: notPoles}),\n      inside = false,\n      j = -1,\n      dx = b[1][0] - b[0][0];\n  // TODO\n  var c = dx === 180 || dx === 360\n      ? [(b[0][0] + b[1][0]) / 2, (b[0][1] + b[1][1]) / 2]\n      : centroid(multiPoint);\n  // First find the shared edge…\n  if (parent) while (++j < n) {\n    if (edges[j] === parent) break;\n  }\n  ++j;\n  for (var i = 0; i < n; ++i) {\n    edge = edges[(i + j) % n];\n    if (Array.isArray(edge)) {\n      if (!inside) {\n        stream.point((point = interpolate(edge[0], c)(epsilon))[0], point[1]);\n        inside = true;\n      }\n      stream.point((point = interpolate(edge[1], c)(epsilon))[0], point[1]);\n    } else {\n      inside = false;\n      if (edge !== parent) outline(stream, edge, node);\n    }\n  }\n}\n\n// Tests equality of two spherical points.\nfunction pointEqual(a, b) {\n  return a && b && a[0] === b[0] && a[1] === b[1];\n}\n\n// Finds a shared edge given two clockwise polygons.\nfunction sharedEdge(a, b) {\n  var x, y, n = a.length, found = null;\n  for (var i = 0; i < n; ++i) {\n    x = a[i];\n    for (var j = b.length; --j >= 0;) {\n      y = b[j];\n      if (x[0] === y[0] && x[1] === y[1]) {\n        if (found) return [found, x];\n        found = x;\n      }\n    }\n  }\n}\n\n// Converts an array of n face vertices to an array of n + 1 edges.\nfunction faceEdges(face) {\n  var n = face.length,\n      edges = [];\n  for (var a = face[n - 1], i = 0; i < n; ++i) edges.push([a, a = face[i]]);\n  return edges;\n}\n\nfunction hasInverse(node) {\n  return node.project.invert || node.children && node.children.some(hasInverse);\n}\n","// TODO generate on-the-fly to avoid external modification.\nvar octahedron = [\n  [0, 90],\n  [-90, 0], [0, 0], [90, 0], [180, 0],\n  [0, -90]\n];\n\nexport default [\n  [0, 2, 1],\n  [0, 3, 2],\n  [5, 1, 2],\n  [5, 2, 3],\n  [0, 1, 4],\n  [0, 4, 3],\n  [5, 4, 1],\n  [5, 3, 4]\n].map(function(face) {\n  return face.map(function(i) {\n    return octahedron[i];\n  });\n});\n","import {geoCentroid as centroid, geoGnomonic as gnomonic} from \"d3-geo\";\nimport {pi} from \"../math.js\";\nimport polyhedral from \"./index.js\";\nimport octahedron from \"./octahedron.js\";\n\nexport default function(faceProjection) {\n\n  faceProjection = faceProjection || function(face) {\n    var c = centroid({type: \"MultiPoint\", coordinates: face});\n    return gnomonic().scale(1).translate([0, 0]).rotate([-c[0], -c[1]]);\n  };\n\n  var faces = octahedron.map(function(face) {\n    return {face: face, project: faceProjection(face)};\n  });\n\n  [-1, 0, 0, 1, 0, 1, 4, 5].forEach(function(d, i) {\n    var node = faces[d];\n    node && (node.children || (node.children = [])).push(faces[i]);\n  });\n\n  return polyhedral(faces[0], function(lambda, phi) {\n        return faces[lambda < -pi / 2 ? phi < 0 ? 6 : 4\n            : lambda < 0 ? phi < 0 ? 2 : 0\n            : lambda < pi / 2 ? phi < 0 ? 3 : 1\n            : phi < 0 ? 7 : 5];\n      })\n      .angle(-30)\n      .scale(101.858)\n      .center([0, 45]);\n}\n","import {geoCentroid as centroid, geoProjection as projection} from \"d3-geo\";\nimport {collignonRaw} from \"../collignon.js\";\nimport {pi, sqrt} from \"../math.js\";\nimport polyhedral from \"./index.js\";\nimport octahedron from \"./octahedron.js\";\n\nvar kx = 2 / sqrt(3);\n\nfunction collignonK(a, b) {\n  var p = collignonRaw(a, b);\n  return [p[0] * kx, p[1]];\n}\n\ncollignonK.invert = function(x,y) {\n  return collignonRaw.invert(x / kx, y);\n};\n\nexport default function(faceProjection) {\n\n  faceProjection = faceProjection || function(face) {\n    var c = centroid({type: \"MultiPoint\", coordinates: face});\n    return projection(collignonK).translate([0, 0]).scale(1).rotate(c[1] > 0 ? [-c[0], 0] : [180 - c[0], 180]);\n  };\n\n  var faces = octahedron.map(function(face) {\n    return {face: face, project: faceProjection(face)};\n  });\n\n  [-1, 0, 0, 1, 0, 1, 4, 5].forEach(function(d, i) {\n    var node = faces[d];\n    node && (node.children || (node.children = [])).push(faces[i]);\n  });\n\n  return polyhedral(faces[0], function(lambda, phi) {\n        return faces[lambda < -pi / 2 ? phi < 0 ? 6 : 4\n            : lambda < 0 ? phi < 0 ? 2 : 0\n            : lambda < pi / 2 ? phi < 0 ? 3 : 1\n            : phi < 0 ? 7 : 5];\n      })\n      .angle(-30)\n      .scale(121.906)\n      .center([0, 48.5904]);\n}\n","import {geoCentroid as centroid, geoGnomonic as gnomonic} from \"d3-geo\";\nimport {asin, atan2, cos, degrees, max, min, pi, radians, sin} from \"../math.js\";\nimport polyhedral from \"./index.js\";\nimport octahedron from \"./octahedron.js\";\n\nexport default function(faceProjection) {\n\n  faceProjection = faceProjection || function(face) {\n    var c = face.length === 6 ? centroid({type: \"MultiPoint\", coordinates: face}) : face[0];\n    return gnomonic().scale(1).translate([0, 0]).rotate([-c[0], -c[1]]);\n  };\n\n  var w5 = octahedron.map(function(face) {\n    var xyz = face.map(cartesian),\n        n = xyz.length,\n        a = xyz[n - 1],\n        b,\n        hexagon = [];\n    for (var i = 0; i < n; ++i) {\n      b = xyz[i];\n      hexagon.push(spherical([\n        a[0] * 0.9486832980505138 + b[0] * 0.31622776601683794,\n        a[1] * 0.9486832980505138 + b[1] * 0.31622776601683794,\n        a[2] * 0.9486832980505138 + b[2] * 0.31622776601683794\n      ]), spherical([\n        b[0] * 0.9486832980505138 + a[0] * 0.31622776601683794,\n        b[1] * 0.9486832980505138 + a[1] * 0.31622776601683794,\n        b[2] * 0.9486832980505138 + a[2] * 0.31622776601683794\n      ]));\n      a = b;\n    }\n    return hexagon;\n  });\n\n  var cornerNormals = [];\n\n  var parents = [-1, 0, 0, 1, 0, 1, 4, 5];\n\n  w5.forEach(function(hexagon, j) {\n    var face = octahedron[j],\n        n = face.length,\n        normals = cornerNormals[j] = [];\n    for (var i = 0; i < n; ++i) {\n      w5.push([\n        face[i],\n        hexagon[(i * 2 + 2) % (2 * n)],\n        hexagon[(i * 2 + 1) % (2 * n)]\n      ]);\n      parents.push(j);\n      normals.push(cross(\n        cartesian(hexagon[(i * 2 + 2) % (2 * n)]),\n        cartesian(hexagon[(i * 2 + 1) % (2 * n)])\n      ));\n    }\n  });\n\n  var faces = w5.map(function(face) {\n    return {\n      project: faceProjection(face),\n      face: face\n    };\n  });\n\n  parents.forEach(function(d, i) {\n    var parent = faces[d];\n    parent && (parent.children || (parent.children = [])).push(faces[i]);\n  });\n\n  function face(lambda, phi) {\n    var cosphi = cos(phi),\n        p = [cosphi * cos(lambda), cosphi * sin(lambda), sin(phi)];\n\n    var hexagon = lambda < -pi / 2 ? phi < 0 ? 6 : 4\n        : lambda < 0 ? phi < 0 ? 2 : 0\n        : lambda < pi / 2 ? phi < 0 ? 3 : 1\n        : phi < 0 ? 7 : 5;\n\n    var n = cornerNormals[hexagon];\n\n    return faces[dot(n[0], p) < 0 ? 8 + 3 * hexagon\n        : dot(n[1], p) < 0 ? 8 + 3 * hexagon + 1\n        : dot(n[2], p) < 0 ? 8 + 3 * hexagon + 2\n        : hexagon];\n  }\n\n  return polyhedral(faces[0], face)\n      .angle(-30)\n      .scale(110.625)\n      .center([0,45]);\n}\n\nfunction dot(a, b) {\n  for (var i = 0, n = a.length, s = 0; i < n; ++i) s += a[i] * b[i];\n  return s;\n}\n\nfunction cross(a, b) {\n  return [\n    a[1] * b[2] - a[2] * b[1],\n    a[2] * b[0] - a[0] * b[2],\n    a[0] * b[1] - a[1] * b[0]\n  ];\n}\n\n// Converts 3D Cartesian to spherical coordinates (degrees).\nfunction spherical(cartesian) {\n  return [\n    atan2(cartesian[1], cartesian[0]) * degrees,\n    asin(max(-1, min(1, cartesian[2]))) * degrees\n  ];\n}\n\n// Converts spherical coordinates (degrees) to 3D Cartesian.\nfunction cartesian(coordinates) {\n  var lambda = coordinates[0] * radians,\n      phi = coordinates[1] * radians,\n      cosphi = cos(phi);\n  return [\n    cosphi * cos(lambda),\n    cosphi * sin(lambda),\n    sin(phi)\n  ];\n}\n","export default () => {}\n","export default function(ring) {\n  if ((n = ring.length) < 4) return false;\n  var i = 0,\n      n,\n      area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area <= 0;\n}\n","export default function(ring, point) {\n  var x = point[0],\n      y = point[1],\n      contains = false;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1],\n        pj = ring[j], xj = pj[0], yj = pj[1];\n    if (((yi > y) ^ (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)) contains = !contains;\n  }\n  return contains;\n}\n","import {geoStream} from \"d3-geo\";\nimport noop from \"../noop.js\";\nimport clockwise from \"./clockwise.js\";\nimport contains from \"./contains.js\";\n\nexport default function(object, projection) {\n  var stream = projection.stream, project;\n  if (!stream) throw new Error(\"invalid projection\");\n  switch (object && object.type) {\n    case \"Feature\": project = projectFeature; break;\n    case \"FeatureCollection\": project = projectFeatureCollection; break;\n    default: project = projectGeometry; break;\n  }\n  return project(object, stream);\n}\n\nfunction projectFeatureCollection(o, stream) {\n  return {\n    type: \"FeatureCollection\",\n    features: o.features.map(function(f) {\n      return projectFeature(f, stream);\n    })\n  };\n}\n\nfunction projectFeature(o, stream) {\n  return {\n    type: \"Feature\",\n    id: o.id,\n    properties: o.properties,\n    geometry: projectGeometry(o.geometry, stream)\n  };\n}\n\nfunction projectGeometryCollection(o, stream) {\n  return {\n    type: \"GeometryCollection\",\n    geometries: o.geometries.map(function(o) {\n      return projectGeometry(o, stream);\n    })\n  };\n}\n\nfunction projectGeometry(o, stream) {\n  if (!o) return null;\n  if (o.type === \"GeometryCollection\") return projectGeometryCollection(o, stream);\n  var sink;\n  switch (o.type) {\n    case \"Point\": sink = sinkPoint; break;\n    case \"MultiPoint\": sink = sinkPoint; break;\n    case \"LineString\": sink = sinkLine; break;\n    case \"MultiLineString\": sink = sinkLine; break;\n    case \"Polygon\": sink = sinkPolygon; break;\n    case \"MultiPolygon\": sink = sinkPolygon; break;\n    case \"Sphere\": sink = sinkPolygon; break;\n    default: return null;\n  }\n  geoStream(o, stream(sink));\n  return sink.result();\n}\n\nvar points = [],\n    lines = [];\n\nvar sinkPoint = {\n  point: function(x, y) {\n    points.push([x, y]);\n  },\n  result: function() {\n    var result = !points.length ? null\n        : points.length < 2 ? {type: \"Point\", coordinates: points[0]}\n        : {type: \"MultiPoint\", coordinates: points};\n    points = [];\n    return result;\n  }\n};\n\nvar sinkLine = {\n  lineStart: noop,\n  point: function(x, y) {\n    points.push([x, y]);\n  },\n  lineEnd: function() {\n    if (points.length) lines.push(points), points = [];\n  },\n  result: function() {\n    var result = !lines.length ? null\n        : lines.length < 2 ? {type: \"LineString\", coordinates: lines[0]}\n        : {type: \"MultiLineString\", coordinates: lines};\n    lines = [];\n    return result;\n  }\n};\n\nvar sinkPolygon = {\n  polygonStart: noop,\n  lineStart: noop,\n  point: function(x, y) {\n    points.push([x, y]);\n  },\n  lineEnd: function() {\n    var n = points.length;\n    if (n) {\n      do points.push(points[0].slice()); while (++n < 4);\n      lines.push(points), points = [];\n    }\n  },\n  polygonEnd: noop,\n  result: function() {\n    if (!lines.length) return null;\n    var polygons = [],\n        holes = [];\n\n    // https://github.com/d3/d3/issues/1558\n    lines.forEach(function(ring) {\n      if (clockwise(ring)) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      var point = hole[0];\n      polygons.some(function(polygon) {\n        if (contains(polygon[0], point)) {\n          polygon.push(hole);\n          return true;\n        }\n      }) || polygons.push([hole]);\n    });\n\n    lines = [];\n\n    return !polygons.length ? null\n        : polygons.length > 1 ? {type: \"MultiPolygon\", coordinates: polygons}\n        : {type: \"Polygon\", coordinates: polygons[0]};\n  }\n};\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, halfPi, pi, sign, sqrt1_2} from \"../math.js\";\n\nexport default function(project) {\n  var dx = project(halfPi, 0)[0] - project(-halfPi, 0)[0];\n\n  function projectQuincuncial(lambda, phi) {\n    var t = abs(lambda) < halfPi,\n        p = project(t ? lambda : lambda > 0 ? lambda - pi : lambda + pi, phi),\n        x = (p[0] - p[1]) * sqrt1_2,\n        y = (p[0] + p[1]) * sqrt1_2;\n    if (t) return [x, y];\n    var d = dx * sqrt1_2,\n        s = x > 0 ^ y > 0 ? -1 : 1;\n    return [s * x - sign(y) * d, s * y - sign(x) * d];\n  }\n\n  if (project.invert) projectQuincuncial.invert = function(x0, y0) {\n    var x = (x0 + y0) * sqrt1_2,\n        y = (y0 - x0) * sqrt1_2,\n        t = abs(x) < 0.5 * dx && abs(y) < 0.5 * dx;\n\n    if (!t) {\n      var d = dx * sqrt1_2,\n          s = x > 0 ^ y > 0 ? -1 : 1,\n          x1 = -s * x0 + (y > 0 ? 1 : -1) * d,\n          y1 = -s * y0 + (x > 0 ? 1 : -1) * d;\n      x = (-x1 - y1) * sqrt1_2;\n      y = (x1 - y1) * sqrt1_2;\n    }\n\n    var p = project.invert(x, y);\n    if (!t) p[0] += x > 0 ? pi : -pi;\n    return p;\n  };\n\n  return projection(projectQuincuncial)\n      .rotate([-90, -90, 45])\n      .clipAngle(180 - 1e-3);\n}\n","import {gringortenRaw} from \"../gringorten.js\";\nimport quincuncial from \"./index.js\";\n\nexport default function() {\n  return quincuncial(gringortenRaw)\n      .scale(176.423);\n}\n","import {guyouRaw} from \"../guyou.js\";\nimport quincuncial from \"./index.js\";\n\nexport default function() {\n  return quincuncial(guyouRaw)\n      .scale(111.48);\n}\n","export default function(input, digits) {\n  if (!(0 <= (digits = +digits) && digits <= 20)) throw new Error(\"invalid digits\");\n\n  function quantizePoint(input) {\n    var n = input.length, i = 2, output = new Array(n);\n    output[0] = +input[0].toFixed(digits);\n    output[1] = +input[1].toFixed(digits);\n    while (i < n) output[i] = input[i], ++i;\n    return output;\n  }\n\n  function quantizePoints(input) {\n    return input.map(quantizePoint);\n  }\n\n  function quantizePointsNoDuplicates(input) {\n    var point0 = quantizePoint(input[0]);\n    var output = [point0];\n    for (var i = 1; i < input.length; i++) {\n      var point = quantizePoint(input[i]);\n      if (point.length > 2 || point[0] != point0[0] || point[1] != point0[1]) {\n        output.push(point);\n        point0 = point;\n      }\n    }\n    if (output.length === 1 && input.length > 1) {\n      output.push(quantizePoint(input[input.length - 1]));\n    }\n    return output;\n  }\n\n  function quantizePolygon(input) {\n    return input.map(quantizePointsNoDuplicates);\n  }\n\n  function quantizeGeometry(input) {\n    if (input == null) return input;\n    var output;\n    switch (input.type) {\n      case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(quantizeGeometry)}; break;\n      case \"Point\": output = {type: \"Point\", coordinates: quantizePoint(input.coordinates)}; break;\n      case \"MultiPoint\": output = {type: input.type, coordinates: quantizePoints(input.coordinates)}; break;\n      case \"LineString\": output = {type: input.type, coordinates: quantizePointsNoDuplicates(input.coordinates)}; break;\n      case \"MultiLineString\": case \"Polygon\": output = {type: input.type, coordinates: quantizePolygon(input.coordinates)}; break;\n      case \"MultiPolygon\": output = {type: \"MultiPolygon\", coordinates: input.coordinates.map(quantizePolygon)}; break;\n      default: return input;\n    }\n    if (input.bbox != null) output.bbox = input.bbox;\n    return output;\n  }\n\n  function quantizeFeature(input) {\n    var output = {type: \"Feature\", properties: input.properties, geometry: quantizeGeometry(input.geometry)};\n    if (input.id != null) output.id = input.id;\n    if (input.bbox != null) output.bbox = input.bbox;\n    return output;\n  }\n\n  if (input != null) switch (input.type) {\n    case \"Feature\": return quantizeFeature(input);\n    case \"FeatureCollection\": {\n      var output = {type: \"FeatureCollection\", features: input.features.map(quantizeFeature)};\n      if (input.bbox != null) output.bbox = input.bbox;\n      return output;\n    }\n    default: return quantizeGeometry(input);\n  }\n\n  return input;\n}\n","import {abs, acos, asin, atan, cos, epsilon, pi, sin, tan} from \"./math.js\";\nimport parallel1 from \"./parallel1.js\";\n\nexport function rectangularPolyconicRaw(phi0) {\n  var sinPhi0 = sin(phi0);\n\n  function forward(lambda, phi) {\n    var A = sinPhi0 ? tan(lambda * sinPhi0 / 2) / sinPhi0 : lambda / 2;\n    if (!phi) return [2 * A, -phi0];\n    var E = 2 * atan(A * sin(phi)),\n        cotPhi = 1 / tan(phi);\n    return [\n      sin(E) * cotPhi,\n      phi + (1 - cos(E)) * cotPhi - phi0\n    ];\n  }\n\n  // TODO return null for points outside outline.\n  forward.invert = function(x, y) {\n    if (abs(y += phi0) < epsilon) return [sinPhi0 ? 2 * atan(sinPhi0 * x / 2) / sinPhi0 : x, 0];\n    var k = x * x + y * y,\n        phi = 0,\n        i = 10, delta;\n    do {\n      var tanPhi = tan(phi),\n          secPhi = 1 / cos(phi),\n          j = k - 2 * y * phi + phi * phi;\n      phi -= delta = (tanPhi * j + 2 * (phi - y)) / (2 + j * secPhi * secPhi + 2 * (phi - y) * tanPhi);\n    } while (abs(delta) > epsilon && --i > 0);\n    var E = x * (tanPhi = tan(phi)),\n        A = tan(abs(y) < abs(phi + 1 / tanPhi) ? asin(E) * 0.5 : acos(E) * 0.5 + pi / 4) / sin(phi);\n    return [\n      sinPhi0 ? 2 * atan(sinPhi0 * A) / sinPhi0 : 2 * A,\n      phi\n    ];\n  };\n\n  return forward;\n}\n\nexport default function() {\n  return parallel1(rectangularPolyconicRaw)\n      .scale(131.215);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, degrees, epsilon2, floor, halfPi, max, min, pi, radians} from \"./math.js\";\n\nvar K = [\n  [0.9986, -0.062],\n  [1.0000, 0.0000],\n  [0.9986, 0.0620],\n  [0.9954, 0.1240],\n  [0.9900, 0.1860],\n  [0.9822, 0.2480],\n  [0.9730, 0.3100],\n  [0.9600, 0.3720],\n  [0.9427, 0.4340],\n  [0.9216, 0.4958],\n  [0.8962, 0.5571],\n  [0.8679, 0.6176],\n  [0.8350, 0.6769],\n  [0.7986, 0.7346],\n  [0.7597, 0.7903],\n  [0.7186, 0.8435],\n  [0.6732, 0.8936],\n  [0.6213, 0.9394],\n  [0.5722, 0.9761],\n  [0.5322, 1.0000]\n];\n\nK.forEach(function(d) {\n  d[1] *= 1.0144;\n});\n\nexport function robinsonRaw(lambda, phi) {\n  var i = min(18, abs(phi) * 36 / pi),\n      i0 = floor(i),\n      di = i - i0,\n      ax = (k = K[i0])[0],\n      ay = k[1],\n      bx = (k = K[++i0])[0],\n      by = k[1],\n      cx = (k = K[min(19, ++i0)])[0],\n      cy = k[1],\n      k;\n  return [\n    lambda * (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n    (phi > 0 ? halfPi : -halfPi) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2)\n  ];\n}\n\nrobinsonRaw.invert = function(x, y) {\n  var yy = y / halfPi,\n      phi = yy * 90,\n      i = min(18, abs(phi / 5)),\n      i0 = max(0, floor(i));\n  do {\n    var ay = K[i0][1],\n        by = K[i0 + 1][1],\n        cy = K[min(19, i0 + 2)][1],\n        u = cy - ay,\n        v = cy - 2 * by + ay,\n        t = 2 * (abs(yy) - by) / u,\n        c = v / u,\n        di = t * (1 - c * t * (1 - 2 * c * t));\n    if (di >= 0 || i0 === 1) {\n      phi = (y >= 0 ? 5 : -5) * (di + i);\n      var j = 50, delta;\n      do {\n        i = min(18, abs(phi) / 5);\n        i0 = floor(i);\n        di = i - i0;\n        ay = K[i0][1];\n        by = K[i0 + 1][1];\n        cy = K[min(19, i0 + 2)][1];\n        phi -= (delta = (y >= 0 ? halfPi : -halfPi) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2) - y) * degrees;\n      } while (abs(delta) > epsilon2 && --j > 0);\n      break;\n    }\n  } while (--i0 >= 0);\n  var ax = K[i0][0],\n      bx = K[i0 + 1][0],\n      cx = K[min(19, i0 + 2)][0];\n  return [\n    x / (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n    phi * radians\n  ];\n};\n\nexport default function() {\n  return projection(robinsonRaw)\n      .scale(152.63);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {acos, asin, atan2, cos, degrees, radians, sin, sqrt} from \"./math.js\";\n\nfunction satelliteVerticalRaw(P) {\n  function forward(lambda, phi) {\n    var cosPhi = cos(phi),\n        k = (P - 1) / (P - cosPhi * cos(lambda));\n    return [\n      k * cosPhi * sin(lambda),\n      k * sin(phi)\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var rho2 = x * x + y * y,\n        rho = sqrt(rho2),\n        sinc = (P - sqrt(1 - rho2 * (P + 1) / (P - 1))) / ((P - 1) / rho + rho / (P - 1));\n    return [\n      atan2(x * sinc, rho * sqrt(1 - sinc * sinc)),\n      rho ? asin(y * sinc / rho) : 0\n    ];\n  };\n\n  return forward;\n}\n\nexport function satelliteRaw(P, omega) {\n  var vertical = satelliteVerticalRaw(P);\n  if (!omega) return vertical;\n  var cosOmega = cos(omega),\n      sinOmega = sin(omega);\n\n  function forward(lambda, phi) {\n    var coordinates = vertical(lambda, phi),\n        y = coordinates[1],\n        A = y * sinOmega / (P - 1) + cosOmega;\n    return [\n      coordinates[0] * cosOmega / A,\n      y / A\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var k = (P - 1) / (P - 1 - y * sinOmega);\n    return vertical.invert(k * x, k * y * cosOmega);\n  };\n\n  return forward;\n}\n\nexport default function() {\n  var distance = 2,\n      omega = 0,\n      m = projectionMutator(satelliteRaw),\n      p = m(distance, omega);\n\n  // As a multiple of radius.\n  p.distance = function(_) {\n    if (!arguments.length) return distance;\n    return m(distance = +_, omega);\n  };\n\n  p.tilt = function(_) {\n    if (!arguments.length) return omega * degrees;\n    return m(distance, omega = _ * radians);\n  };\n\n  return p\n      .scale(432.147)\n      .clipAngle(acos(1 / distance) * degrees - 1e-6);\n}\n","var epsilon = 1e-4,\n    epsilonInverse = 1e4,\n    x0 = -180, x0e = x0 + epsilon,\n    x1 = 180, x1e = x1 - epsilon,\n    y0 = -90, y0e = y0 + epsilon,\n    y1 = 90, y1e = y1 - epsilon;\n\nfunction nonempty(coordinates) {\n  return coordinates.length > 0;\n}\n\nfunction quantize(x) {\n  return Math.floor(x * epsilonInverse) / epsilonInverse;\n}\n\nfunction normalizePoint(y) {\n  return y === y0 || y === y1 ? [0, y] : [x0, quantize(y)]; // pole or antimeridian?\n}\n\nfunction clampPoint(p) {\n  var x = p[0], y = p[1], clamped = false;\n  if (x <= x0e) x = x0, clamped = true;\n  else if (x >= x1e) x = x1, clamped = true;\n  if (y <= y0e) y = y0, clamped = true;\n  else if (y >= y1e) y = y1, clamped = true;\n  return clamped ? [x, y] : p;\n}\n\nfunction clampPoints(points) {\n  return points.map(clampPoint);\n}\n\n// For each ring, detect where it crosses the antimeridian or pole.\nfunction extractFragments(rings, polygon, fragments) {\n  for (var j = 0, m = rings.length; j < m; ++j) {\n    var ring = rings[j].slice();\n\n    // By default, assume that this ring doesn’t need any stitching.\n    fragments.push({index: -1, polygon: polygon, ring: ring});\n\n    for (var i = 0, n = ring.length; i < n; ++i) {\n      var point = ring[i],\n          x = point[0],\n          y = point[1];\n\n      // If this is an antimeridian or polar point…\n      if (x <= x0e || x >= x1e || y <= y0e || y >= y1e) {\n        ring[i] = clampPoint(point);\n\n        // Advance through any antimeridian or polar points…\n        for (var k = i + 1; k < n; ++k) {\n          var pointk = ring[k],\n              xk = pointk[0],\n              yk = pointk[1];\n          if (xk > x0e && xk < x1e && yk > y0e && yk < y1e) break;\n        }\n\n        // If this was just a single antimeridian or polar point,\n        // we don’t need to cut this ring into a fragment;\n        // we can just leave it as-is.\n        if (k === i + 1) continue;\n\n        // Otherwise, if this is not the first point in the ring,\n        // cut the current fragment so that it ends at the current point.\n        // The current point is also normalized for later joining.\n        if (i) {\n          var fragmentBefore = {index: -1, polygon: polygon, ring: ring.slice(0, i + 1)};\n          fragmentBefore.ring[fragmentBefore.ring.length - 1] = normalizePoint(y);\n          fragments[fragments.length - 1] = fragmentBefore;\n        }\n\n        // If the ring started with an antimeridian fragment,\n        // we can ignore that fragment entirely.\n        else fragments.pop();\n\n        // If the remainder of the ring is an antimeridian fragment,\n        // move on to the next ring.\n        if (k >= n) break;\n\n        // Otherwise, add the remaining ring fragment and continue.\n        fragments.push({index: -1, polygon: polygon, ring: ring = ring.slice(k - 1)});\n        ring[0] = normalizePoint(ring[0][1]);\n        i = -1;\n        n = ring.length;\n      }\n    }\n  }\n}\n\n// Now stitch the fragments back together into rings.\nfunction stitchFragments(fragments) {\n  var i, n = fragments.length;\n\n  // To connect the fragments start-to-end, create a simple index by end.\n  var fragmentByStart = {},\n      fragmentByEnd = {},\n      fragment,\n      start,\n      startFragment,\n      end,\n      endFragment;\n\n  // For each fragment…\n  for (i = 0; i < n; ++i) {\n    fragment = fragments[i];\n    start = fragment.ring[0];\n    end = fragment.ring[fragment.ring.length - 1];\n\n    // If this fragment is closed, add it as a standalone ring.\n    if (start[0] === end[0] && start[1] === end[1]) {\n      fragment.polygon.push(fragment.ring);\n      fragments[i] = null;\n      continue;\n    }\n\n    fragment.index = i;\n    fragmentByStart[start] = fragmentByEnd[end] = fragment;\n  }\n\n  // For each open fragment…\n  for (i = 0; i < n; ++i) {\n    fragment = fragments[i];\n    if (fragment) {\n      start = fragment.ring[0];\n      end = fragment.ring[fragment.ring.length - 1];\n      startFragment = fragmentByEnd[start];\n      endFragment = fragmentByStart[end];\n\n      delete fragmentByStart[start];\n      delete fragmentByEnd[end];\n\n      // If this fragment is closed, add it as a standalone ring.\n      if (start[0] === end[0] && start[1] === end[1]) {\n        fragment.polygon.push(fragment.ring);\n        continue;\n      }\n\n      if (startFragment) {\n        delete fragmentByEnd[start];\n        delete fragmentByStart[startFragment.ring[0]];\n        startFragment.ring.pop(); // drop the shared coordinate\n        fragments[startFragment.index] = null;\n        fragment = {index: -1, polygon: startFragment.polygon, ring: startFragment.ring.concat(fragment.ring)};\n\n        if (startFragment === endFragment) {\n          // Connect both ends to this single fragment to create a ring.\n          fragment.polygon.push(fragment.ring);\n        } else {\n          fragment.index = n++;\n          fragments.push(fragmentByStart[fragment.ring[0]] = fragmentByEnd[fragment.ring[fragment.ring.length - 1]] = fragment);\n        }\n      } else if (endFragment) {\n        delete fragmentByStart[end];\n        delete fragmentByEnd[endFragment.ring[endFragment.ring.length - 1]];\n        fragment.ring.pop(); // drop the shared coordinate\n        fragment = {index: n++, polygon: endFragment.polygon, ring: fragment.ring.concat(endFragment.ring)};\n        fragments[endFragment.index] = null;\n        fragments.push(fragmentByStart[fragment.ring[0]] = fragmentByEnd[fragment.ring[fragment.ring.length - 1]] = fragment);\n      } else {\n        fragment.ring.push(fragment.ring[0]); // close ring\n        fragment.polygon.push(fragment.ring);\n      }\n    }\n  }\n}\n\nfunction stitchFeature(input) {\n  var output = {type: \"Feature\", geometry: stitchGeometry(input.geometry)};\n  if (input.id != null) output.id = input.id;\n  if (input.bbox != null) output.bbox = input.bbox;\n  if (input.properties != null) output.properties = input.properties;\n  return output;\n}\n\nfunction stitchGeometry(input) {\n  if (input == null) return input;\n  var output, fragments, i, n;\n  switch (input.type) {\n    case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(stitchGeometry)}; break;\n    case \"Point\": output = {type: \"Point\", coordinates: clampPoint(input.coordinates)}; break;\n    case \"MultiPoint\": case \"LineString\": output = {type: input.type, coordinates: clampPoints(input.coordinates)}; break;\n    case \"MultiLineString\": output = {type: \"MultiLineString\", coordinates: input.coordinates.map(clampPoints)}; break;\n    case \"Polygon\": {\n      var polygon = [];\n      extractFragments(input.coordinates, polygon, fragments = []);\n      stitchFragments(fragments);\n      output = {type: \"Polygon\", coordinates: polygon};\n      break;\n    }\n    case \"MultiPolygon\": {\n      fragments = [], i = -1, n = input.coordinates.length;\n      var polygons = new Array(n);\n      while (++i < n) extractFragments(input.coordinates[i], polygons[i] = [], fragments);\n      stitchFragments(fragments);\n      output = {type: \"MultiPolygon\", coordinates: polygons.filter(nonempty)};\n      break;\n    }\n    default: return input;\n  }\n  if (input.bbox != null) output.bbox = input.bbox;\n  return output;\n}\n\nexport default function(input) {\n  if (input == null) return input;\n  switch (input.type) {\n    case \"Feature\": return stitchFeature(input);\n    case \"FeatureCollection\": {\n      var output = {type: \"FeatureCollection\", features: input.features.map(stitchFeature)};\n      if (input.bbox != null) output.bbox = input.bbox;\n      return output;\n    }\n    default: return stitchGeometry(input);\n  }\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {atan, quarterPi, sin, tan} from \"./math.js\";\n\nexport function timesRaw(lambda, phi) {\n  var t = tan(phi / 2),\n      s = sin(quarterPi * t);\n  return [\n    lambda * (0.74482 - 0.34588 * s * s),\n    1.70711 * t\n  ];\n}\n\ntimesRaw.invert = function(x, y) {\n  var t = y / 1.70711,\n      s = sin(quarterPi * t);\n  return [\n    x / (0.74482 - 0.34588 * s * s),\n    2 * atan(t)\n  ];\n};\n\nexport default function() {\n  return projection(timesRaw)\n      .scale(146.153);\n}\n","import {geoInterpolate as interpolate, geoProjection as projection, geoRotation as rotation} from \"d3-geo\";\nimport {asin, degrees, pi, sin, radians} from \"./math.js\";\n\n// Compute the origin as the midpoint of the two reference points.\n// Rotate one of the reference points by the origin.\n// Apply the spherical law of sines to compute gamma rotation.\nexport default function(raw, p0, p1) {\n  var i = interpolate(p0, p1),\n      o = i(0.5),\n      a = rotation([-o[0], -o[1]])(p0),\n      b = i.distance / 2,\n      y = -asin(sin(a[1] * radians) / sin(b)),\n      R = [-o[0], -o[1], -(a[0] > 0 ? pi - y : y) * degrees],\n      p = projection(raw(b)).rotate(R),\n      r = rotation(R),\n      center = p.center;\n\n  delete p.rotate;\n\n  p.center = function(_) {\n    return arguments.length ? center(r(_)) : r.invert(center());\n  };\n\n  return p\n      .clipAngle(90);\n}\n","import {geoGnomonicRaw as gnomonicRaw} from \"d3-geo\";\nimport {cos} from \"./math.js\";\nimport twoPoint from \"./twoPoint.js\";\n\nexport function twoPointAzimuthalRaw(d) {\n  var cosd = cos(d);\n\n  function forward(lambda, phi) {\n    var coordinates = gnomonicRaw(lambda, phi);\n    coordinates[0] *= cosd;\n    return coordinates;\n  }\n\n  forward.invert = function(x, y) {\n    return gnomonicRaw.invert(x / cosd, y);\n  };\n\n  return forward;\n}\n\nexport function twoPointAzimuthalUsa() {\n  return twoPointAzimuthal([-158, 21.5], [-77, 39])\n      .clipAngle(60)\n      .scale(400);\n}\n\nexport default function twoPointAzimuthal(p0, p1) {\n  return twoPoint(twoPointAzimuthalRaw, p0, p1);\n}\n","import {geoAzimuthalEquidistantRaw as azimuthalEquidistantRaw} from \"d3-geo\";\nimport {acos, atan2, cos, sin, sqrt, tan} from \"./math.js\";\nimport twoPoint from \"./twoPoint.js\";\n\nexport function twoPointEquidistantRaw(z0) {\n  if (!(z0 *= 2)) return azimuthalEquidistantRaw;\n  var lambdaa = -z0 / 2,\n      lambdab = -lambdaa,\n      z02 = z0 * z0,\n      tanLambda0 = tan(lambdab),\n      S = 0.5 / sin(lambdab);\n\n  function forward(lambda, phi) {\n    var za = acos(cos(phi) * cos(lambda - lambdaa)),\n        zb = acos(cos(phi) * cos(lambda - lambdab)),\n        ys = phi < 0 ? -1 : 1;\n    za *= za, zb *= zb;\n    return [\n      (za - zb) / (2 * z0),\n      ys * sqrt(4 * z02 * zb - (z02 - za + zb) * (z02 - za + zb)) / (2 * z0)\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var y2 = y * y,\n        cosza = cos(sqrt(y2 + (t = x + lambdaa) * t)),\n        coszb = cos(sqrt(y2 + (t = x + lambdab) * t)),\n        t,\n        d;\n    return [\n      atan2(d = cosza - coszb, t = (cosza + coszb) * tanLambda0),\n      (y < 0 ? -1 : 1) * acos(sqrt(t * t + d * d) * S)\n    ];\n  };\n\n  return forward;\n}\n\nexport function twoPointEquidistantUsa() {\n  return twoPointEquidistant([-158, 21.5], [-77, 39])\n      .clipAngle(130)\n      .scale(122.571);\n}\n\nexport default function twoPointEquidistant(p0, p1) {\n  return twoPoint(twoPointEquidistantRaw, p0, p1);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, acos, asin, atan, cos, epsilon, halfPi, pi, sign, sin, sqrt, tan} from \"./math.js\";\n\nexport function vanDerGrintenRaw(lambda, phi) {\n  if (abs(phi) < epsilon) return [lambda, 0];\n  var sinTheta = abs(phi / halfPi),\n      theta = asin(sinTheta);\n  if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon) return [0, sign(phi) * pi * tan(theta / 2)];\n  var cosTheta = cos(theta),\n      A = abs(pi / lambda - lambda / pi) / 2,\n      A2 = A * A,\n      G = cosTheta / (sinTheta + cosTheta - 1),\n      P = G * (2 / sinTheta - 1),\n      P2 = P * P,\n      P2_A2 = P2 + A2,\n      G_P2 = G - P2,\n      Q = A2 + G;\n  return [\n    sign(lambda) * pi * (A * G_P2 + sqrt(A2 * G_P2 * G_P2 - P2_A2 * (G * G - P2))) / P2_A2,\n    sign(phi) * pi * (P * Q - A * sqrt((A2 + 1) * P2_A2 - Q * Q)) / P2_A2\n  ];\n}\n\nvanDerGrintenRaw.invert = function(x, y) {\n  if (abs(y) < epsilon) return [x, 0];\n  if (abs(x) < epsilon) return [0, halfPi * sin(2 * atan(y / pi))];\n  var x2 = (x /= pi) * x,\n      y2 = (y /= pi) * y,\n      x2_y2 = x2 + y2,\n      z = x2_y2 * x2_y2,\n      c1 = -abs(y) * (1 + x2_y2),\n      c2 = c1 - 2 * y2 + x2,\n      c3 = -2 * c1 + 1 + 2 * y2 + z,\n      d = y2 / c3 + (2 * c2 * c2 * c2 / (c3 * c3 * c3) - 9 * c1 * c2 / (c3 * c3)) / 27,\n      a1 = (c1 - c2 * c2 / (3 * c3)) / c3,\n      m1 = 2 * sqrt(-a1 / 3),\n      theta1 = acos(3 * d / (a1 * m1)) / 3;\n  return [\n    pi * (x2_y2 - 1 + sqrt(1 + 2 * (x2 - y2) + z)) / (2 * x),\n    sign(y) * pi * (-m1 * cos(theta1 + pi / 3) - c2 / (3 * c3))\n  ];\n};\n\nexport default function() {\n  return projection(vanDerGrintenRaw)\n      .scale(79.4183);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, atan, atan2, cos, halfPi, epsilon, pi, sign, sin, sqrt, tan} from \"./math.js\";\n\nexport function vanDerGrinten2Raw(lambda, phi) {\n  if (abs(phi) < epsilon) return [lambda, 0];\n  var sinTheta = abs(phi / halfPi),\n      theta = asin(sinTheta);\n  if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon) return [0, sign(phi) * pi * tan(theta / 2)];\n  var cosTheta = cos(theta),\n      A = abs(pi / lambda - lambda / pi) / 2,\n      A2 = A * A,\n      x1 = cosTheta * (sqrt(1 + A2) - A * cosTheta) / (1 + A2 * sinTheta * sinTheta);\n  return [\n    sign(lambda) * pi * x1,\n    sign(phi) * pi * sqrt(1 - x1 * (2 * A + x1))\n  ];\n}\n\nvanDerGrinten2Raw.invert = function(x, y) {\n  if (!x) return [0, halfPi * sin(2 * atan(y / pi))];\n  var x1 = abs(x / pi),\n      A = (1 - x1 * x1 - (y /= pi) * y) / (2 * x1),\n      A2 = A * A,\n      B = sqrt(A2 + 1);\n  return [\n    sign(x) * pi * (B - A),\n    sign(y) * halfPi * sin(2 * atan2(sqrt((1 - 2 * A * x1) * (A + B) - x1), sqrt(B + A + x1)))\n  ];\n};\n\nexport default function() {\n  return projection(vanDerGrinten2Raw)\n      .scale(79.4183);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, atan, cos, epsilon, halfPi, pi, sign, sin, sqrt, tan} from \"./math.js\";\n\nexport function vanDerGrinten3Raw(lambda, phi) {\n  if (abs(phi) < epsilon) return [lambda, 0];\n  var sinTheta = phi / halfPi,\n      theta = asin(sinTheta);\n  if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon) return [0, pi * tan(theta / 2)];\n  var A = (pi / lambda - lambda / pi) / 2,\n      y1 = sinTheta / (1 + cos(theta));\n  return [\n    pi * (sign(lambda) * sqrt(A * A + 1 - y1 * y1) - A),\n    pi * y1\n  ];\n}\n\nvanDerGrinten3Raw.invert = function(x, y) {\n  if (!y) return [x, 0];\n  var y1 = y / pi,\n      A = (pi * pi * (1 - y1 * y1) - x * x) / (2 * pi * x);\n  return [\n    x ? pi * (sign(x) * sqrt(A * A + 1) - A) : 0,\n    halfPi * sin(2 * atan(y1))\n  ];\n};\n\nexport default function() {\n  return projection(vanDerGrinten3Raw)\n        .scale(79.4183);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, epsilon, halfPi, min, pi, sign, sqrt} from \"./math.js\";\n\nexport function vanDerGrinten4Raw(lambda, phi) {\n  if (!phi) return [lambda, 0];\n  var phi0 = abs(phi);\n  if (!lambda || phi0 === halfPi) return [0, phi];\n  var B = phi0 / halfPi,\n      B2 = B * B,\n      C = (8 * B - B2 * (B2 + 2) - 5) / (2 * B2 * (B - 1)),\n      C2 = C * C,\n      BC = B * C,\n      B_C2 = B2 + C2 + 2 * BC,\n      B_3C = B + 3 * C,\n      lambda0 = lambda / halfPi,\n      lambda1 = lambda0 + 1 / lambda0,\n      D = sign(abs(lambda) - halfPi) * sqrt(lambda1 * lambda1 - 4),\n      D2 = D * D,\n      F = B_C2 * (B2 + C2 * D2 - 1) + (1 - B2) * (B2 * (B_3C * B_3C + 4 * C2) + 12 * BC * C2 + 4 * C2 * C2),\n      x1 = (D * (B_C2 + C2 - 1) + 2 * sqrt(F)) / (4 * B_C2 + D2);\n  return [\n    sign(lambda) * halfPi * x1,\n    sign(phi) * halfPi * sqrt(1 + D * abs(x1) - x1 * x1)\n  ];\n}\n\nvanDerGrinten4Raw.invert = function(x, y) {\n  var delta;\n  if (!x || !y) return [x, y];\n  var sy = sign(y);\n  y = abs(y) / pi;\n  var x1 = sign(x) * x / halfPi,\n      D = (x1 * x1 - 1 + 4 * y * y) / abs(x1),\n      D2 = D * D,\n      B = y * (2 - (y > 0.5 ? min(y, abs(x)) : 0)),\n      r = x * x + y * y,\n      i = 50;\n  do {\n    var B2 = B * B,\n        C = (8 * B - B2 * (B2 + 2) - 5) / (2 * B2 * (B - 1)),\n        C_ = (3 * B - B2 * B - 10) / (2 * B2 * B),\n        C2 = C * C,\n        BC = B * C,\n        B_C = B + C,\n        B_C2 = B_C * B_C,\n        B_3C = B + 3 * C,\n        F = B_C2 * (B2 + C2 * D2 - 1) + (1 - B2) * (B2 * (B_3C * B_3C + 4 * C2) + C2 * (12 * BC + 4 * C2)),\n        F_ = -2 * B_C * (4 * BC * C2 + (1 - 4 * B2 + 3 * B2 * B2) * (1 + C_) + C2 * (-6 + 14 * B2 - D2 + (-8 + 8 * B2 - 2 * D2) * C_) + BC * (-8 + 12 * B2 + (-10 + 10 * B2 - D2) * C_)),\n        sqrtF = sqrt(F),\n        f = D * (B_C2 + C2 - 1) + 2 * sqrtF - x1 * (4 * B_C2 + D2),\n        f_ = D * (2 * C * C_ + 2 * B_C * (1 + C_)) + F_ / sqrtF - 8 * B_C * (D * (-1 + C2 + B_C2) + 2 * sqrtF) * (1 + C_) / (D2 + 4 * B_C2);\n    B -= delta = f / f_;\n  } while (delta * r * r > epsilon && --i > 0);\n  return [\n    sign(x) * (sqrt(D * D + 4) + D) * pi / 4,\n    sy * halfPi * B\n  ];\n};\n\nexport default function() {\n  return projection(vanDerGrinten4Raw)\n      .scale(127.16);\n}\n","import {geoProjectionMutator as projectionMutator} from \"d3-geo\";\nimport {acos, asin, atan2, cos, degrees, epsilon, halfPi, max, min, pi, radians, sin, sqrt, tan} from \"./math.js\";\n\nfunction wagnerFormula(cx, cy, m1, m2, n) {\n  function forward(lambda, phi) {\n    var s = m1 * sin(m2 * phi),\n        c0 = sqrt(1 - s * s),\n        c1 = sqrt(2 / (1 + c0 * cos(lambda *= n)));\n    return [\n      cx * c0 * c1 * sin(lambda),\n      cy * s * c1\n    ];\n  }\n\n  forward.invert = function(x, y) {\n    var t1 = x / cx,\n        t2 = y / cy,\n        p = sqrt(t1 * t1 + t2 * t2),\n        c = 2 * asin(p / 2);\n    return [\n      atan2(x * tan(c), cx * p) / n,\n      p && asin(y * sin(c) / (cy * m1 * p)) / m2\n    ];\n  };\n\n  return forward;\n}\n\nexport function wagnerRaw(poleline, parallels, inflation, ratio) {\n  // 60 is always used as reference parallel\n  var phi1 = pi / 3;\n\n  // sanitizing the input values\n  // poleline and parallels may approximate but never equal 0\n  poleline = max(poleline, epsilon);\n  parallels = max(parallels, epsilon);\n  // poleline must be <= 90; parallels may approximate but never equal 180\n  poleline = min(poleline, halfPi);\n  parallels = min(parallels, pi - epsilon);\n  // 0 <= inflation <= 99.999\n  inflation = max(inflation, 0);\n  inflation = min(inflation, 100 - epsilon);\n  // ratio > 0.\n  // sensible values, i.e. something that renders a map which still can be\n  // recognized as world map, are e.g. 20 <= ratio <= 1000.\n  ratio = max(ratio, epsilon);\n\n  // convert values from boehm notation\n  // areal inflation e.g. from 0 to 1 or 20 to 1.2:\n  var vinflation = inflation/100 + 1;\n  // axial ratio e.g. from 200 to 2:\n  var vratio  = ratio / 100;\n  // the other ones are a bit more complicated...\n  var m2 = acos(vinflation * cos(phi1)) / phi1,\n      m1 = sin(poleline) / sin(m2 * halfPi),\n      n = parallels / pi,\n      k = sqrt(vratio * sin(poleline / 2) / sin(parallels / 2)),\n      cx = k / sqrt(n * m1 * m2),\n      cy = 1 / (k * sqrt(n * m1 * m2));\n\n  return wagnerFormula(cx, cy, m1, m2, n);\n}\n\nexport default function wagner() {\n  // default values generate wagner8\n  var poleline = 65 * radians,\n      parallels = 60 * radians,\n      inflation = 20,\n      ratio = 200,\n      mutate = projectionMutator(wagnerRaw),\n      projection = mutate(poleline, parallels, inflation, ratio);\n\n  projection.poleline = function(_) {\n    return arguments.length ? mutate(poleline = +_ * radians, parallels, inflation, ratio) : poleline * degrees;\n  };\n\n  projection.parallels = function(_) {\n    return arguments.length ? mutate(poleline, parallels = +_ * radians, inflation, ratio) : parallels * degrees;\n  };\n  projection.inflation = function(_) {\n    return arguments.length ? mutate(poleline, parallels, inflation = +_, ratio) : inflation;\n  };\n  projection.ratio = function(_) {\n    return arguments.length ? mutate(poleline, parallels, inflation, ratio = +_) : ratio;\n  };\n\n  return projection\n    .scale(163.775);\n}\n\nexport function wagner7() {\n  return wagner()\n      .poleline(65)\n      .parallels(60)\n      .inflation(0)\n      .ratio(200)\n      .scale(172.633);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {sqrt, pi} from \"./math.js\";\nimport {mollweideBromleyRaw} from \"./mollweide.js\";\n\nvar A = 4 * pi + 3 * sqrt(3),\n    B = 2 * sqrt(2 * pi * sqrt(3) / A);\n\nexport var wagner4Raw = mollweideBromleyRaw(B * sqrt(3) / pi, B, A / 6);\n\nexport default function() {\n  return projection(wagner4Raw)\n      .scale(176.84);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {pi, sqrt} from \"./math.js\";\n\nexport function wagner6Raw(lambda, phi) {\n  return [lambda * sqrt(1 - 3 * phi * phi / (pi * pi)), phi];\n}\n\nwagner6Raw.invert = function(x, y) {\n  return [x / sqrt(1 - 3 * y * y / (pi * pi)), y];\n};\n\nexport default function() {\n  return projection(wagner6Raw)\n      .scale(152.63);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function wiechelRaw(lambda, phi) {\n  var cosPhi = cos(phi),\n      sinPhi = cos(lambda) * cosPhi,\n      sin1_Phi = 1 - sinPhi,\n      cosLambda = cos(lambda = atan2(sin(lambda) * cosPhi, -sin(phi))),\n      sinLambda = sin(lambda);\n  cosPhi = sqrt(1 - sinPhi * sinPhi);\n  return [\n    sinLambda * cosPhi - cosLambda * sin1_Phi,\n    -cosLambda * cosPhi - sinLambda * sin1_Phi\n  ];\n}\n\nwiechelRaw.invert = function(x, y) {\n  var w = (x * x + y * y) / -2,\n      k = sqrt(-w * (2 + w)),\n      b = y * w + x * k,\n      a = x * w - y * k,\n      D = sqrt(a * a + b * b);\n  return [\n    atan2(k * b, D * (1 + w)),\n    D ? -asin(k * a / D) : 0\n  ];\n};\n\nexport default function() {\n  return projection(wiechelRaw)\n      .rotate([0, -90, 45])\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {aitoffRaw} from \"./aitoff.js\";\nimport {halfPi, epsilon, sin, cos, sqrt, abs, acos} from \"./math.js\";\n\nexport function winkel3Raw(lambda, phi) {\n  var coordinates = aitoffRaw(lambda, phi);\n  return [\n    (coordinates[0] + lambda / halfPi) / 2,\n    (coordinates[1] + phi) / 2\n  ];\n}\n\nwinkel3Raw.invert = function(x, y) {\n  var lambda = x, phi = y, i = 25;\n  do {\n    var cosphi = cos(phi),\n        sinphi = sin(phi),\n        sin_2phi = sin(2 * phi),\n        sin2phi = sinphi * sinphi,\n        cos2phi = cosphi * cosphi,\n        sinlambda = sin(lambda),\n        coslambda_2 = cos(lambda / 2),\n        sinlambda_2 = sin(lambda / 2),\n        sin2lambda_2 = sinlambda_2 * sinlambda_2,\n        C = 1 - cos2phi * coslambda_2 * coslambda_2,\n        E = C ? acos(cosphi * coslambda_2) * sqrt(F = 1 / C) : F = 0,\n        F,\n        fx = 0.5 * (2 * E * cosphi * sinlambda_2 + lambda / halfPi) - x,\n        fy = 0.5 * (E * sinphi + phi) - y,\n        dxdlambda = 0.5 * F * (cos2phi * sin2lambda_2 + E * cosphi * coslambda_2 * sin2phi) + 0.5 / halfPi,\n        dxdphi = F * (sinlambda * sin_2phi / 4 - E * sinphi * sinlambda_2),\n        dydlambda = 0.125 * F * (sin_2phi * sinlambda_2 - E * sinphi * cos2phi * sinlambda),\n        dydphi = 0.5 * F * (sin2phi * coslambda_2 + E * sin2lambda_2 * cosphi) + 0.5,\n        denominator = dxdphi * dydlambda - dydphi * dxdlambda,\n        dlambda = (fy * dxdphi - fx * dydphi) / denominator,\n        dphi = (fx * dydlambda - fy * dxdlambda) / denominator;\n    lambda -= dlambda, phi -= dphi;\n  } while ((abs(dlambda) > epsilon || abs(dphi) > epsilon) && --i > 0);\n  return [lambda, phi];\n};\n\nexport default function() {\n  return projection(winkel3Raw)\n      .scale(158.837);\n}\n","export {default as geoAiry, airyRaw as geoAiryRaw} from \"./airy\";\nexport {default as geoAitoff, aitoffRaw as geoAitoffRaw} from \"./aitoff\";\nexport {default as geoArmadillo, armadilloRaw as geoArmadilloRaw} from \"./armadillo\";\nexport {default as geoAugust, augustRaw as geoAugustRaw} from \"./august\";\nexport {default as geoBaker, bakerRaw as geoBakerRaw} from \"./baker\";\nexport {default as geoBerghaus, berghausRaw as geoBerghausRaw} from \"./berghaus\";\nexport {default as geoBertin1953, bertin1953Raw as geoBertin1953Raw} from \"./bertin\";\nexport {default as geoBoggs, boggsRaw as geoBoggsRaw} from \"./boggs\";\nexport {default as geoBonne, bonneRaw as geoBonneRaw} from \"./bonne\";\nexport {default as geoBottomley, bottomleyRaw as geoBottomleyRaw} from \"./bottomley\";\nexport {default as geoBromley, bromleyRaw as geoBromleyRaw} from \"./bromley\";\nexport {default as geoChamberlin, chamberlinRaw as geoChamberlinRaw, chamberlinAfrica as geoChamberlinAfrica} from \"./chamberlin\";\nexport {default as geoCollignon, collignonRaw as geoCollignonRaw} from \"./collignon\";\nexport {default as geoCraig, craigRaw as geoCraigRaw} from \"./craig\";\nexport {default as geoCraster, crasterRaw as geoCrasterRaw} from \"./craster\";\nexport {default as geoCylindricalEqualArea, cylindricalEqualAreaRaw as geoCylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\nexport {default as geoCylindricalStereographic, cylindricalStereographicRaw as geoCylindricalStereographicRaw} from \"./cylindricalStereographic\";\nexport {default as geoEckert1, eckert1Raw as geoEckert1Raw} from \"./eckert1.js\";\nexport {default as geoEckert2, eckert2Raw as geoEckert2Raw} from \"./eckert2.js\";\nexport {default as geoEckert3, eckert3Raw as geoEckert3Raw} from \"./eckert3.js\";\nexport {default as geoEckert4, eckert4Raw as geoEckert4Raw} from \"./eckert4.js\";\nexport {default as geoEckert5, eckert5Raw as geoEckert5Raw} from \"./eckert5.js\";\nexport {default as geoEckert6, eckert6Raw as geoEckert6Raw} from \"./eckert6.js\";\nexport {default as geoEisenlohr, eisenlohrRaw as geoEisenlohrRaw} from \"./eisenlohr.js\";\nexport {default as geoFahey, faheyRaw as geoFaheyRaw} from \"./fahey.js\";\nexport {default as geoFoucaut, foucautRaw as geoFoucautRaw} from \"./foucaut.js\";\nexport {default as geoFoucautSinusoidal, foucautSinusoidalRaw as geoFoucautSinusoidalRaw} from \"./foucautSinusoidal.js\";\nexport {default as geoGilbert} from \"./gilbert.js\";\nexport {default as geoGingery, gingeryRaw as geoGingeryRaw} from \"./gingery.js\";\nexport {default as geoGinzburg4, ginzburg4Raw as geoGinzburg4Raw} from \"./ginzburg4.js\";\nexport {default as geoGinzburg5, ginzburg5Raw as geoGinzburg5Raw} from \"./ginzburg5.js\";\nexport {default as geoGinzburg6, ginzburg6Raw as geoGinzburg6Raw} from \"./ginzburg6.js\";\nexport {default as geoGinzburg8, ginzburg8Raw as geoGinzburg8Raw} from \"./ginzburg8.js\";\nexport {default as geoGinzburg9, ginzburg9Raw as geoGinzburg9Raw} from \"./ginzburg9.js\";\nexport {default as geoGringorten, gringortenRaw as geoGringortenRaw} from \"./gringorten.js\";\nexport {default as geoGuyou, guyouRaw as geoGuyouRaw} from \"./guyou.js\";\nexport {default as geoHammer, hammerRaw as geoHammerRaw} from \"./hammer.js\";\nexport {default as geoHammerRetroazimuthal, hammerRetroazimuthalRaw as geoHammerRetroazimuthalRaw} from \"./hammerRetroazimuthal.js\";\nexport {default as geoHealpix, healpixRaw as geoHealpixRaw} from \"./healpix.js\";\nexport {default as geoHill, hillRaw as geoHillRaw} from \"./hill.js\";\nexport {default as geoHomolosine, homolosineRaw as geoHomolosineRaw} from \"./homolosine.js\";\nexport {default as geoHufnagel, hufnagelRaw as geoHufnagelRaw} from \"./hufnagel.js\";\nexport {default as geoHyperelliptical, hyperellipticalRaw as geoHyperellipticalRaw} from \"./hyperelliptical\";\nexport {default as geoInterrupt} from \"./interrupted/index\";\nexport {default as geoInterruptedBoggs} from \"./interrupted/boggs\";\nexport {default as geoInterruptedHomolosine} from \"./interrupted/homolosine\";\nexport {default as geoInterruptedMollweide} from \"./interrupted/mollweide\";\nexport {default as geoInterruptedMollweideHemispheres} from \"./interrupted/mollweideHemispheres\";\nexport {default as geoInterruptedSinuMollweide} from \"./interrupted/sinuMollweide\";\nexport {default as geoInterruptedSinusoidal} from \"./interrupted/sinusoidal\";\nexport {default as geoKavrayskiy7, kavrayskiy7Raw as geoKavrayskiy7Raw} from \"./kavrayskiy7.js\";\nexport {default as geoLagrange, lagrangeRaw as geoLagrangeRaw} from \"./lagrange.js\";\nexport {default as geoLarrivee, larriveeRaw as geoLarriveeRaw} from \"./larrivee\";\nexport {default as geoLaskowski, laskowskiRaw as geoLaskowskiRaw} from \"./laskowski\";\nexport {default as geoLittrow, littrowRaw as geoLittrowRaw} from \"./littrow.js\";\nexport {default as geoLoximuthal, loximuthalRaw as geoLoximuthalRaw} from \"./loximuthal.js\";\nexport {default as geoMiller, millerRaw as geoMillerRaw} from \"./miller\";\nexport {default as geoModifiedStereographic, modifiedStereographicRaw as geoModifiedStereographicRaw, modifiedStereographicAlaska as geoModifiedStereographicAlaska, modifiedStereographicGs48 as geoModifiedStereographicGs48, modifiedStereographicGs50 as geoModifiedStereographicGs50, modifiedStereographicMiller as geoModifiedStereographicMiller, modifiedStereographicLee as geoModifiedStereographicLee} from \"./modifiedStereographic\";\nexport {default as geoMollweide, mollweideRaw as geoMollweideRaw} from \"./mollweide\";\nexport {default as geoMtFlatPolarParabolic, mtFlatPolarParabolicRaw as geoMtFlatPolarParabolicRaw} from \"./mtFlatPolarParabolic\";\nexport {default as geoMtFlatPolarQuartic, mtFlatPolarQuarticRaw as geoMtFlatPolarQuarticRaw} from \"./mtFlatPolarQuartic\";\nexport {default as geoMtFlatPolarSinusoidal, mtFlatPolarSinusoidalRaw as geoMtFlatPolarSinusoidalRaw} from \"./mtFlatPolarSinusoidal\";\nexport {default as geoNaturalEarth2, naturalEarth2Raw as geoNaturalEarth2Raw} from \"./naturalEarth2\";\nexport {default as geoNellHammer, nellHammerRaw as geoNellHammerRaw} from \"./nellHammer\";\nexport {default as geoInterruptedQuarticAuthalic} from \"./interrupted/quarticAuthalic\";\nexport {default as geoNicolosi, nicolosiRaw as geoNicolosiRaw} from \"./nicolosi\";\nexport {default as geoPatterson, pattersonRaw as geoPattersonRaw} from \"./patterson\";\nexport {default as geoPolyconic, polyconicRaw as geoPolyconicRaw} from \"./polyconic\";\nexport {default as geoPolyhedral} from \"./polyhedral/index.js\";\nexport {default as geoPolyhedralButterfly} from \"./polyhedral/butterfly.js\";\nexport {default as geoPolyhedralCollignon} from \"./polyhedral/collignon.js\";\nexport {default as geoPolyhedralWaterman} from \"./polyhedral/waterman.js\";\nexport {default as geoProject} from \"./project/index\";\nexport {default as geoGringortenQuincuncial} from \"./quincuncial/gringorten.js\";\nexport {default as geoPeirceQuincuncial} from \"./quincuncial/peirce.js\";\nexport {default as geoQuantize} from \"./quantize\";\nexport {default as geoQuincuncial} from \"./quincuncial/index.js\";\nexport {default as geoRectangularPolyconic, rectangularPolyconicRaw as geoRectangularPolyconicRaw} from \"./rectangularPolyconic\";\nexport {default as geoRobinson, robinsonRaw as geoRobinsonRaw} from \"./robinson\";\nexport {default as geoSatellite, satelliteRaw as geoSatelliteRaw} from \"./satellite\";\nexport {default as geoSinuMollweide, sinuMollweideRaw as geoSinuMollweideRaw} from \"./sinuMollweide\";\nexport {default as geoSinusoidal, sinusoidalRaw as geoSinusoidalRaw} from \"./sinusoidal\";\nexport {default as geoStitch} from \"./stitch\";\nexport {default as geoTimes, timesRaw as geoTimesRaw} from \"./times\";\nexport {default as geoTwoPointAzimuthal, twoPointAzimuthalRaw as geoTwoPointAzimuthalRaw, twoPointAzimuthalUsa as geoTwoPointAzimuthalUsa} from \"./twoPointAzimuthal\";\nexport {default as geoTwoPointEquidistant, twoPointEquidistantRaw as geoTwoPointEquidistantRaw, twoPointEquidistantUsa as geoTwoPointEquidistantUsa} from \"./twoPointEquidistant\";\nexport {default as geoVanDerGrinten, vanDerGrintenRaw as geoVanDerGrintenRaw} from \"./vanDerGrinten\";\nexport {default as geoVanDerGrinten2, vanDerGrinten2Raw as geoVanDerGrinten2Raw} from \"./vanDerGrinten2\";\nexport {default as geoVanDerGrinten3, vanDerGrinten3Raw as geoVanDerGrinten3Raw} from \"./vanDerGrinten3\";\nexport {default as geoVanDerGrinten4, vanDerGrinten4Raw as geoVanDerGrinten4Raw} from \"./vanDerGrinten4\";\nexport {default as geoWagner, wagner7 as geoWagner7, wagnerRaw as geoWagnerRaw} from \"./wagner.js\";\nexport {default as geoWagner4, wagner4Raw as geoWagner4Raw} from \"./wagner4.js\";\nexport {default as geoWagner6, wagner6Raw as geoWagner6Raw} from \"./wagner6.js\";\nexport {default as geoWiechel, wiechelRaw as geoWiechelRaw} from \"./wiechel.js\";\nexport {default as geoWinkel3, winkel3Raw as geoWinkel3Raw} from \"./winkel3\";\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY', // extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n/**\n * Augment projections with their type and a copy method.\n */\n\nfunction create(type, constructor) {\n  return function projection() {\n    const p = constructor();\n    p.type = type;\n    p.path = geoPath().projection(p);\n\n    p.copy = p.copy || function () {\n      const c = projection();\n      projectionProperties.forEach(prop => {\n        if (p[prop]) c[prop](p[prop]());\n      });\n      c.path.pointRadius(p.path.pointRadius());\n      return c;\n    };\n\n    return p;\n  };\n}\n\nfunction projection(type, proj) {\n  if (!type || typeof type !== 'string') {\n    throw new Error('Projection type must be a name string.');\n  }\n\n  type = type.toLowerCase();\n\n  if (arguments.length > 1) {\n    projections[type] = create(type, proj);\n    return this;\n  } else {\n    return projections[type] || null;\n  }\n}\nfunction getProjectionPath(proj) {\n  return proj && proj.path || defaultPath;\n}\nconst projections = {\n  // base d3-geo projection types\n  albers: geoAlbers,\n  albersusa: geoAlbersUsa,\n  azimuthalequalarea: geoAzimuthalEqualArea,\n  azimuthalequidistant: geoAzimuthalEquidistant,\n  conicconformal: geoConicConformal,\n  conicequalarea: geoConicEqualArea,\n  conicequidistant: geoConicEquidistant,\n  equalEarth: geoEqualEarth,\n  equirectangular: geoEquirectangular,\n  gnomonic: geoGnomonic,\n  identity: geoIdentity,\n  mercator: geoMercator,\n  mollweide: geoMollweide,\n  naturalEarth1: geoNaturalEarth1,\n  orthographic: geoOrthographic,\n  stereographic: geoStereographic,\n  transversemercator: geoTransverseMercator\n};\n\nfor (const key in projections) {\n  projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, constant, array, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { range, tickStep, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\n\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []]; // Implementation adapted from d3/d3-contour. Thanks!\n\nfunction contours () {\n  var dx = 1,\n      dy = 1,\n      smooth = smoothLinear;\n\n  function contours(values, tz) {\n    return tz.map(value => contour(values, value));\n  } // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n\n\n  function contour(values, value) {\n    var polygons = [],\n        holes = [];\n    isorings(values, value, ring => {\n      smooth(ring, values, value);\n      if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n    });\n    holes.forEach(hole => {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n    return {\n      type: 'MultiPolygon',\n      value: value,\n      coordinates: polygons\n    };\n  } // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n\n\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array(),\n        fragmentByEnd = new Array(),\n        x,\n        y,\n        t0,\n        t1,\n        t2,\n        t3; // Special case for the first row (y = -1, t2 = t3 = 0).\n\n    x = y = -1;\n    t1 = values[0] >= value;\n    cases[t1 << 1].forEach(stitch);\n\n    while (++x < dx - 1) {\n      t0 = t1, t1 = values[x + 1] >= value;\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n\n    cases[t1 << 0].forEach(stitch); // General case for the intermediate rows.\n\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = values[y * dx + dx] >= value;\n      t2 = values[y * dx] >= value;\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n\n      while (++x < dx - 1) {\n        t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n        t3 = t2, t2 = values[y * dx + x + 1] >= value;\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n\n      cases[t1 | t2 << 3].forEach(stitch);\n    } // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n\n\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n\n    while (++x < dx - 1) {\n      t3 = t2, t2 = values[y * dx + x + 1] >= value;\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f,\n          g;\n\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n              start: f.start,\n              end: g.end,\n              ring: f.ring.concat(g.ring)\n            };\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n              start: g.start,\n              end: f.end,\n              ring: g.ring.concat(f.ring)\n            };\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n          start: startIndex,\n          end: endIndex,\n          ring: [start, end]\n        };\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(point => {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v0,\n          v1 = values[yt * dx + xt];\n\n      if (x > 0 && x < dx && xt === x) {\n        v0 = values[yt * dx + xt - 1];\n        point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n      }\n\n      if (y > 0 && y < dy && yt === y) {\n        v0 = values[(yt - 1) * dx + xt];\n        point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function (_) {\n    if (!arguments.length) return [dx, dy];\n\n    var _0 = Math.floor(_[0]),\n        _1 = Math.floor(_[1]);\n\n    if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.smooth = function (_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n\nfunction area(ring) {\n  var i = 0,\n      n = ring.length,\n      area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n\n  return area;\n}\n\nfunction contains(ring, hole) {\n  var i = -1,\n      n = hole.length,\n      c;\n\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0],\n      y = point[1],\n      contains = -1;\n\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i],\n        xi = pi[0],\n        yi = pi[1],\n        pj = ring[j],\n        xj = pj[0],\n        yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n  }\n\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i;\n  return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n  return function (values) {\n    var ex = extent(values),\n        start = zero ? Math.min(ex[0], 0) : ex[0],\n        stop = ex[1],\n        span = stop - start,\n        step = nice ? tickStep(start, stop, k) : span / (k + 1);\n    return range(step, stop, step);\n  };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n *   data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array<number>} [params.thresholds] - Contour threshold array. If\n *   specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n *   threshold values should be automatically aligned to \"nice\"\n *   human-friendly values. Setting this flag may cause the number of\n *   thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n *   across multiple input grids. If 'independent' (the default), threshold\n *   calculation will be performed separately for each grid. If 'shared', a\n *   single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n *   threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n *   polygons should be smoothed using linear interpolation. The default is\n *   true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n *   scale the output isocontour coordinates. This parameter can be useful\n *   to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n *   the generated isocontour data (default 'contour').\n */\n\nfunction Isocontour(params) {\n  Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n  'type': 'Isocontour',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'thresholds',\n    'type': 'number',\n    'array': true\n  }, {\n    'name': 'levels',\n    'type': 'number'\n  }, {\n    'name': 'nice',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'resolve',\n    'type': 'enum',\n    'values': ['shared', 'independent'],\n    'default': 'independent'\n  }, {\n    'name': 'zero',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'smooth',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'scale',\n    'type': 'number',\n    'expr': true\n  }, {\n    'name': 'translate',\n    'type': 'number',\n    'array': true,\n    'expr': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'null': true,\n    'default': 'contour'\n  }]\n};\ninherits(Isocontour, Transform, {\n  transform(_, pulse) {\n    if (this.value && !pulse.changed() && !_.modified()) {\n      return pulse.StopPropagation;\n    }\n\n    var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        source = pulse.materialize(pulse.SOURCE).source,\n        field = _.field || identity,\n        contour = contours().smooth(_.smooth !== false),\n        tz = _.thresholds || levels(source, field, _),\n        as = _.as === null ? null : _.as || 'contour',\n        values = [];\n    source.forEach(t => {\n      const grid = field(t); // generate contour paths in GeoJSON format\n\n      const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values)); // adjust contour path coordinates as needed\n\n      transformPaths(paths, grid, t, _); // ingest; copy source data properties to output\n\n      paths.forEach(p => {\n        values.push(rederive(t, ingest(as != null ? {\n          [as]: p\n        } : p)));\n      });\n    });\n    if (this.value) out.rem = this.value;\n    this.value = out.source = out.add = values;\n    return out;\n  }\n\n});\n\nfunction levels(values, f, _) {\n  const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n  return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\n\nfunction transformPaths(paths, grid, datum, _) {\n  let s = _.scale || grid.scale,\n      t = _.translate || grid.translate;\n  if (isFunction(s)) s = s(datum, _);\n  if (isFunction(t)) t = t(datum, _);\n  if ((s === 1 || s == null) && !t) return;\n  const sx = (isNumber(s) ? s : s[0]) || 1,\n        sy = (isNumber(s) ? s : s[1]) || 1,\n        tx = t && t[0] || 0,\n        ty = t && t[1] || 0;\n  paths.forEach(transform(grid, sx, sy, tx, ty));\n}\n\nfunction transform(grid, sx, sy, tx, ty) {\n  const x1 = grid.x1 || 0,\n        y1 = grid.y1 || 0,\n        flip = sx * sy < 0;\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    if (flip) coordinates.reverse(); // maintain winding order\n\n    coordinates.forEach(transformPoint);\n  }\n\n  function transformPoint(coordinates) {\n    coordinates[0] = (coordinates[0] - x1) * sx + tx;\n    coordinates[1] = (coordinates[1] - y1) * sy + ty;\n  }\n\n  return function (geometry) {\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  };\n}\n\nfunction radius(bw, data, f) {\n  const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n  return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\n\nfunction number(_) {\n  return isFunction(_) ? _ : constant(+_);\n} // Implementation adapted from d3/d3-contour. Thanks!\n\n\nfunction density2D () {\n  var x = d => d[0],\n      y = d => d[1],\n      weight = one,\n      bandwidth = [-1, -1],\n      dx = 960,\n      dy = 500,\n      k = 2; // log2(cellSize)\n\n\n  function density(data, counts) {\n    const rx = radius(bandwidth[0], data, x) >> k,\n          // blur x-radius\n    ry = radius(bandwidth[1], data, y) >> k,\n          // blur y-radius\n    ox = rx ? rx + 2 : 0,\n          // x-offset padding for blur\n    oy = ry ? ry + 2 : 0,\n          // y-offset padding for blur\n    n = 2 * ox + (dx >> k),\n          // grid width\n    m = 2 * oy + (dy >> k),\n          // grid height\n    values0 = new Float32Array(n * m),\n          values1 = new Float32Array(n * m);\n    let values = values0;\n    data.forEach(d => {\n      const xi = ox + (+x(d) >> k),\n            yi = oy + (+y(d) >> k);\n\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += +weight(d);\n      }\n    });\n\n    if (rx > 0 && ry > 0) {\n      blurX(n, m, values0, values1, rx);\n      blurY(n, m, values1, values0, ry);\n      blurX(n, m, values0, values1, rx);\n      blurY(n, m, values1, values0, ry);\n      blurX(n, m, values0, values1, rx);\n      blurY(n, m, values1, values0, ry);\n    } else if (rx > 0) {\n      blurX(n, m, values0, values1, rx);\n      blurX(n, m, values1, values0, rx);\n      blurX(n, m, values0, values1, rx);\n      values = values1;\n    } else if (ry > 0) {\n      blurY(n, m, values0, values1, ry);\n      blurY(n, m, values1, values0, ry);\n      blurY(n, m, values0, values1, ry);\n      values = values1;\n    } // scale density estimates\n    // density in points per square pixel or probability density\n\n\n    const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n\n    for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n\n    return {\n      values: values,\n      scale: 1 << k,\n      width: n,\n      height: m,\n      x1: ox,\n      y1: oy,\n      x2: ox + (dx >> k),\n      y2: oy + (dy >> k)\n    };\n  }\n\n  density.x = function (_) {\n    return arguments.length ? (x = number(_), density) : x;\n  };\n\n  density.y = function (_) {\n    return arguments.length ? (y = number(_), density) : y;\n  };\n\n  density.weight = function (_) {\n    return arguments.length ? (weight = number(_), density) : weight;\n  };\n\n  density.size = function (_) {\n    if (!arguments.length) return [dx, dy];\n\n    var _0 = +_[0],\n        _1 = +_[1];\n\n    if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n    return dx = _0, dy = _1, density;\n  };\n\n  density.cellSize = function (_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) error('invalid cell size');\n    k = Math.floor(Math.log(_) / Math.LN2);\n    return density;\n  };\n\n  density.bandwidth = function (_) {\n    if (!arguments.length) return bandwidth;\n    _ = array(_);\n    if (_.length === 1) _ = [+_[0], +_[0]];\n    if (_.length !== 2) error('invalid bandwidth');\n    return bandwidth = _, density;\n  };\n\n  return density;\n}\n\nfunction blurX(n, m, source, target, r) {\n  const w = (r << 1) + 1;\n\n  for (let j = 0; j < m; ++j) {\n    for (let i = 0, sr = 0; i < n + r; ++i) {\n      if (i < n) {\n        sr += source[i + j * n];\n      }\n\n      if (i >= r) {\n        if (i >= w) {\n          sr -= source[i - w + j * n];\n        }\n\n        target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n      }\n    }\n  }\n}\n\nfunction blurY(n, m, source, target, r) {\n  const w = (r << 1) + 1;\n\n  for (let i = 0; i < n; ++i) {\n    for (let j = 0, sr = 0; j < m + r; ++j) {\n      if (j < m) {\n        sr += source[i + j * n];\n      }\n\n      if (j >= r) {\n        if (j >= w) {\n          sr -= source[i + (j - w) * n];\n        }\n\n        target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n      }\n    }\n  }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<number>} params.size - The [width, height] extent (in\n *   units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors\n *   to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n *   This parameter determines the level of spatial approximation. For example,\n *   the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n *   A value of 1 will result in an output raster grid whose dimensions exactly\n *   matches the size parameter.\n * @param {Array<number>} [params.bandwidth] - The KDE kernel bandwidths,\n *   in pixels. The input can be a two-element array specifying separate\n *   x and y bandwidths, or a single-element array specifying both. If the\n *   bandwidth is unspecified or less than zero, the bandwidth will be\n *   automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n *   output values should be probability estimates (false, default) or\n *   smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n *   the generated raster grid (default 'grid').\n */\n\nfunction KDE2D(params) {\n  Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n  'type': 'KDE2D',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2,\n    'required': true\n  }, {\n    'name': 'x',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'y',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'weight',\n    'type': 'field'\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'cellSize',\n    'type': 'number'\n  }, {\n    'name': 'bandwidth',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'counts',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'grid'\n  }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n  PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n  return obj;\n}\ninherits(KDE2D, Transform, {\n  transform(_, pulse) {\n    if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n    var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        source = pulse.materialize(pulse.SOURCE).source,\n        groups = partition(source, _.groupby),\n        names = (_.groupby || []).map(accessorName),\n        kde = params(density2D(), _),\n        as = _.as || 'grid',\n        values = [];\n\n    function set(t, vals) {\n      for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n\n      return t;\n    } // generate density raster grids\n\n\n    values = groups.map(g => ingest(set({\n      [as]: kde(g, _.counts)\n    }, g.dims)));\n    if (this.value) out.rem = this.value;\n    this.value = out.source = out.add = values;\n    return out;\n  }\n\n});\nfunction partition(data, groupby) {\n  var groups = [],\n      get = f => f(t),\n      map,\n      i,\n      n,\n      t,\n      k,\n      g; // partition data points into groups\n\n\n  if (groupby == null) {\n    groups.push(data);\n  } else {\n    for (map = {}, i = 0, n = data.length; i < n; ++i) {\n      t = data[i];\n      k = groupby.map(get);\n      g = map[k];\n\n      if (!g) {\n        map[k] = g = [];\n        g.dims = k;\n        groups.push(g);\n      }\n\n      g.push(t);\n    }\n  }\n\n  return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<number>} params.size - The dimensions [width, height] over which to compute contours.\n *  If the values parameter is provided, this must be the dimensions of the input data.\n *  If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array<number>} [params.values] - An array of numeric values representing an\n *  width x height grid of values over which to compute contours. If unspecified, this\n *  transform will instead attempt to compute contours for the kernel density estimate\n *  using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array<number>} [params.thresholds] - Contour threshold array. If\n *   this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n *   threshold values should be automatically aligned to \"nice\"\n *   human-friendly values. Setting this flag may cause the number of\n *   thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n *   polygons should be smoothed using linear interpolation. The default is\n *   true. The parameter is ignored when using density estimation.\n */\n\nfunction Contour(params) {\n  Transform.call(this, null, params);\n}\nContour.Definition = {\n  'type': 'Contour',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2,\n    'required': true\n  }, {\n    'name': 'values',\n    'type': 'number',\n    'array': true\n  }, {\n    'name': 'x',\n    'type': 'field'\n  }, {\n    'name': 'y',\n    'type': 'field'\n  }, {\n    'name': 'weight',\n    'type': 'field'\n  }, {\n    'name': 'cellSize',\n    'type': 'number'\n  }, {\n    'name': 'bandwidth',\n    'type': 'number'\n  }, {\n    'name': 'count',\n    'type': 'number'\n  }, {\n    'name': 'nice',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'thresholds',\n    'type': 'number',\n    'array': true\n  }, {\n    'name': 'smooth',\n    'type': 'boolean',\n    'default': true\n  }]\n};\ninherits(Contour, Transform, {\n  transform(_, pulse) {\n    if (this.value && !pulse.changed() && !_.modified()) {\n      return pulse.StopPropagation;\n    }\n\n    var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n        contour = contours().smooth(_.smooth !== false),\n        values = _.values,\n        thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n        size = _.size,\n        grid,\n        post;\n\n    if (!values) {\n      values = pulse.materialize(pulse.SOURCE).source;\n      grid = params(density2D(), _)(values, true);\n      post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n      size = [grid.width, grid.height];\n      values = grid.values;\n    }\n\n    thresh = isArray(thresh) ? thresh : thresh(values);\n    values = contour.size(size)(values, thresh);\n    if (post) values.forEach(post);\n    if (this.value) out.rem = this.value;\n    this.value = out.source = out.add = (values || []).map(ingest);\n    return out;\n  }\n\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} [params.fields] - A two-element array\n *   of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n *   retrieving GeoJSON feature data.\n */\n\nfunction GeoJSON(params) {\n  Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n  'type': 'GeoJSON',\n  'metadata': {},\n  'params': [{\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'geojson',\n    'type': 'field'\n  }]\n};\ninherits(GeoJSON, Transform, {\n  transform(_, pulse) {\n    var features = this._features,\n        points = this._points,\n        fields = _.fields,\n        lon = fields && fields[0],\n        lat = fields && fields[1],\n        geojson = _.geojson || !fields && identity,\n        flag = pulse.ADD,\n        mod;\n    mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n\n    if (!this.value || mod) {\n      flag = pulse.SOURCE;\n      this._features = features = [];\n      this._points = points = [];\n    }\n\n    if (geojson) {\n      pulse.visit(flag, t => features.push(geojson(t)));\n    }\n\n    if (lon && lat) {\n      pulse.visit(flag, t => {\n        var x = lon(t),\n            y = lat(t);\n\n        if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n          points.push([x, y]);\n        }\n      });\n      features = features.concat({\n        type: Feature,\n        geometry: {\n          type: MultiPoint,\n          coordinates: points\n        }\n      });\n    }\n\n    this.value = {\n      type: FeatureCollection,\n      features: features\n    };\n  }\n\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n *   projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n *   or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n *   the generated path data (default 'path').\n */\n\nfunction GeoPath(params) {\n  Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n  'type': 'GeoPath',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'projection',\n    'type': 'projection'\n  }, {\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'pointRadius',\n    'type': 'number',\n    'expr': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'path'\n  }]\n};\ninherits(GeoPath, Transform, {\n  transform(_, pulse) {\n    var out = pulse.fork(pulse.ALL),\n        path = this.value,\n        field = _.field || identity,\n        as = _.as || 'path',\n        flag = out.SOURCE;\n\n    if (!path || _.modified()) {\n      // parameters updated, reset and reflow\n      this.value = path = getProjectionPath(_.projection);\n      out.materialize().reflow();\n    } else {\n      flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n    }\n\n    const prev = initPath(path, _.pointRadius);\n    out.visit(flag, t => t[as] = path(field(t)));\n    path.pointRadius(prev);\n    return out.modifies(as);\n  }\n\n});\n\nfunction initPath(path, pointRadius) {\n  const prev = path.pointRadius();\n  path.context(null);\n\n  if (pointRadius != null) {\n    path.pointRadius(pointRadius);\n  }\n\n  return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n *   projection to apply.\n * @param {Array<function(object): *>} params.fields - A two-element array of\n *   field accessors for the longitude and latitude values.\n * @param {Array<string>} [params.as] - A two-element array of field names\n *   under which to store the result. Defaults to ['x','y'].\n */\n\nfunction GeoPoint(params) {\n  Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n  'type': 'GeoPoint',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'projection',\n    'type': 'projection',\n    'required': true\n  }, {\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'required': true,\n    'length': 2\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 2,\n    'default': ['x', 'y']\n  }]\n};\ninherits(GeoPoint, Transform, {\n  transform(_, pulse) {\n    var proj = _.projection,\n        lon = _.fields[0],\n        lat = _.fields[1],\n        as = _.as || ['x', 'y'],\n        x = as[0],\n        y = as[1],\n        mod;\n\n    function set(t) {\n      const xy = proj([lon(t), lat(t)]);\n\n      if (xy) {\n        t[x] = xy[0];\n        t[y] = xy[1];\n      } else {\n        t[x] = undefined;\n        t[y] = undefined;\n      }\n    }\n\n    if (_.modified()) {\n      // parameters updated, reflow\n      pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n    } else {\n      mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n      pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n    }\n\n    return pulse.modifies(as);\n  }\n\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n *   projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n *   or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n *   the generated path data (default 'shape').\n */\n\nfunction GeoShape(params) {\n  Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n  'type': 'GeoShape',\n  'metadata': {\n    'modifies': true,\n    'nomod': true\n  },\n  'params': [{\n    'name': 'projection',\n    'type': 'projection'\n  }, {\n    'name': 'field',\n    'type': 'field',\n    'default': 'datum'\n  }, {\n    'name': 'pointRadius',\n    'type': 'number',\n    'expr': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'shape'\n  }]\n};\ninherits(GeoShape, Transform, {\n  transform(_, pulse) {\n    var out = pulse.fork(pulse.ALL),\n        shape = this.value,\n        as = _.as || 'shape',\n        flag = out.ADD;\n\n    if (!shape || _.modified()) {\n      // parameters updated, reset and reflow\n      this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n      out.materialize().reflow();\n      flag = out.SOURCE;\n    }\n\n    out.visit(flag, t => t[as] = shape);\n    return out.modifies(as);\n  }\n\n});\n\nfunction shapeGenerator(path, field, pointRadius) {\n  const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n    var prev = path.pointRadius(),\n        value = path.pointRadius(pointRadius)(field(_));\n    path.pointRadius(prev);\n    return value;\n  };\n\n  shape.context = _ => {\n    path.context(_);\n    return shape;\n  };\n\n  return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\n\nfunction Graticule(params) {\n  Transform.call(this, [], params);\n  this.generator = geoGraticule();\n}\nGraticule.Definition = {\n  'type': 'Graticule',\n  'metadata': {\n    'changes': true,\n    'generates': true\n  },\n  'params': [{\n    'name': 'extent',\n    'type': 'array',\n    'array': true,\n    'length': 2,\n    'content': {\n      'type': 'number',\n      'array': true,\n      'length': 2\n    }\n  }, {\n    'name': 'extentMajor',\n    'type': 'array',\n    'array': true,\n    'length': 2,\n    'content': {\n      'type': 'number',\n      'array': true,\n      'length': 2\n    }\n  }, {\n    'name': 'extentMinor',\n    'type': 'array',\n    'array': true,\n    'length': 2,\n    'content': {\n      'type': 'number',\n      'array': true,\n      'length': 2\n    }\n  }, {\n    'name': 'step',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'stepMajor',\n    'type': 'number',\n    'array': true,\n    'length': 2,\n    'default': [90, 360]\n  }, {\n    'name': 'stepMinor',\n    'type': 'number',\n    'array': true,\n    'length': 2,\n    'default': [10, 10]\n  }, {\n    'name': 'precision',\n    'type': 'number',\n    'default': 2.5\n  }]\n};\ninherits(Graticule, Transform, {\n  transform(_, pulse) {\n    var src = this.value,\n        gen = this.generator,\n        t;\n\n    if (!src.length || _.modified()) {\n      for (const prop in _) {\n        if (isFunction(gen[prop])) {\n          gen[prop](_[prop]);\n        }\n      }\n    }\n\n    t = gen();\n\n    if (src.length) {\n      pulse.mod.push(replace(src[0], t));\n    } else {\n      pulse.add.push(ingest(t));\n    }\n\n    src[0] = t;\n    return pulse;\n  }\n\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n *   data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n *   individual pixel color. If a function, it will be invoked with an input\n *   object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n *   individual pixel opacity. If a function, it will be invoked with an input\n *   object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n *   across multiple input grids. If 'independent' (the default), maximum\n *   calculation will be performed separately for each grid. If 'shared',\n *   a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n *   the generated bitmap canvas images (default 'image').\n */\n\nfunction Heatmap(params) {\n  Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n  'type': 'heatmap',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'color',\n    'type': 'string',\n    'expr': true\n  }, {\n    'name': 'opacity',\n    'type': 'number',\n    'expr': true\n  }, {\n    'name': 'resolve',\n    'type': 'enum',\n    'values': ['shared', 'independent'],\n    'default': 'independent'\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'image'\n  }]\n};\ninherits(Heatmap, Transform, {\n  transform(_, pulse) {\n    if (!pulse.changed() && !_.modified()) {\n      return pulse.StopPropagation;\n    }\n\n    var source = pulse.materialize(pulse.SOURCE).source,\n        shared = _.resolve === 'shared',\n        field = _.field || identity,\n        opacity = opacity_(_.opacity, _),\n        color = color_(_.color, _),\n        as = _.as || 'image',\n        obj = {\n      $x: 0,\n      $y: 0,\n      $value: 0,\n      $max: shared ? max(source.map(t => max(field(t).values))) : 0\n    };\n    source.forEach(t => {\n      const v = field(t); // build proxy data object\n\n      const o = extend({}, t, obj); // set maximum value if not globally shared\n\n      if (!shared) o.$max = max(v.values || []); // generate canvas image\n      // optimize color/opacity if not pixel-dependent\n\n      t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n    });\n    return pulse.reflow(true).modifies(as);\n  }\n\n}); // get image color function\n\nfunction color_(color, _) {\n  let f;\n\n  if (isFunction(color)) {\n    f = obj => rgb(color(obj, _));\n\n    f.dep = dependency(color);\n  } else {\n    // default to mid-grey\n    f = constant(rgb(color || '#888'));\n  }\n\n  return f;\n} // get image opacity function\n\n\nfunction opacity_(opacity, _) {\n  let f;\n\n  if (isFunction(opacity)) {\n    f = obj => opacity(obj, _);\n\n    f.dep = dependency(opacity);\n  } else if (opacity) {\n    f = constant(opacity);\n  } else {\n    // default to [0, max] opacity gradient\n    f = obj => obj.$value / obj.$max || 0;\n\n    f.dep = true;\n  }\n\n  return f;\n} // check if function depends on individual pixel data\n\n\nfunction dependency(f) {\n  if (!isFunction(f)) return false;\n  const set = toSet(accessorFields(f));\n  return set.$x || set.$y || set.$value || set.$max;\n} // render raster grid to canvas\n\n\nfunction toCanvas(grid, obj, color, opacity) {\n  const n = grid.width,\n        m = grid.height,\n        x1 = grid.x1 || 0,\n        y1 = grid.y1 || 0,\n        x2 = grid.x2 || n,\n        y2 = grid.y2 || m,\n        val = grid.values,\n        value = val ? i => val[i] : zero,\n        can = canvas(x2 - x1, y2 - y1),\n        ctx = can.getContext('2d'),\n        img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n        pix = img.data;\n\n  for (let j = y1, k = 0; j < y2; ++j) {\n    obj.$y = j - y1;\n\n    for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n      obj.$x = i - x1;\n      obj.$value = value(i + r);\n      const v = color(obj);\n      pix[k + 0] = v.r;\n      pix[k + 1] = v.g;\n      pix[k + 2] = v.b;\n      pix[k + 3] = ~~(255 * opacity(obj));\n    }\n  }\n\n  ctx.putImageData(img, 0, 0);\n  return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Projection(params) {\n  Transform.call(this, null, params);\n  this.modified(true); // always treat as modified\n}\ninherits(Projection, Transform, {\n  transform(_, pulse) {\n    let proj = this.value;\n\n    if (!proj || _.modified('type')) {\n      this.value = proj = create(_.type);\n      projectionProperties.forEach(prop => {\n        if (_[prop] != null) set(proj, prop, _[prop]);\n      });\n    } else {\n      projectionProperties.forEach(prop => {\n        if (_.modified(prop)) set(proj, prop, _[prop]);\n      });\n    }\n\n    if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n    if (_.fit) fit(proj, _);\n    return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n  }\n\n});\n\nfunction fit(proj, _) {\n  const data = collectGeoJSON(_.fit);\n  _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n  const constructor = projection((type || 'mercator').toLowerCase());\n  if (!constructor) error('Unrecognized projection type: ' + type);\n  return constructor();\n}\n\nfunction set(proj, key, value) {\n  if (isFunction(proj[key])) proj[key](value);\n}\n\nfunction collectGeoJSON(data) {\n  data = array(data);\n  return data.length === 1 ? data[0] : {\n    type: FeatureCollection,\n    features: data.reduce((a, f) => a.concat(featurize(f)), [])\n  };\n}\n\nfunction featurize(f) {\n  return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n    type: Feature,\n    geometry: d\n  });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(x, y) {\n  var nodes, strength = 1;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  return force;\n}\n","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export {default as quadtree} from \"./quadtree.js\";\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(random) {\n  return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nexport default function(radius) {\n  var nodes,\n      radii,\n      random,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(random), l += x * x;\n            if (y === 0) y = jiggle(random), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"node not found: \" + nodeId);\n  return node;\n}\n\nexport default function(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      random,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle(random);\n        y = target.y + target.vy - source.y - source.vy || jiggle(random);\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","export {default as dispatch} from \"./dispatch.js\";\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  t._restart = t.restart;\n  t.restart = function(callback, delay, time) {\n    delay = +delay, time = time == null ? now() : +time;\n    t._restart(function tick(elapsed) {\n      elapsed += total;\n      t._restart(tick, total += delay, time);\n      callback(elapsed);\n    }, delay, time);\n  }\n  t.restart(callback, delay, time);\n  return t;\n}\n","export {\n  now,\n  timer,\n  timerFlush\n} from \"./timer.js\";\n\nexport {\n  default as timeout\n} from \"./timeout.js\";\n\nexport {\n  default as interval\n} from \"./interval.js\";\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.forEach(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes, random);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n  var nodes,\n      node,\n      random,\n      alpha,\n      strength = constant(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(random), l += x * x;\n        if (y === 0) y = jiggle(random), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(random), l += x * x;\n      if (y === 0) y = jiggle(random), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y) {\n  var nodes,\n      strength = constant(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n","export {default as forceCenter} from \"./center.js\";\nexport {default as forceCollide} from \"./collide.js\";\nexport {default as forceLink} from \"./link.js\";\nexport {default as forceManyBody} from \"./manyBody.js\";\nexport {default as forceRadial} from \"./radial.js\";\nexport {default as forceSimulation} from \"./simulation.js\";\nexport {default as forceX} from \"./x.js\";\nexport {default as forceY} from \"./y.js\";\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n  center: forceCenter,\n  collide: forceCollide,\n  nbody: forceManyBody,\n  link: forceLink,\n  x: forceX,\n  y: forceY\n};\nconst Forces = 'forces',\n      ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n      ForceConfig = ['static', 'iterations'],\n      ForceOutput = ['x', 'y', 'vx', 'vy'];\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<object>} params.forces - The forces to apply.\n */\n\nfunction Force(params) {\n  Transform.call(this, null, params);\n}\nForce.Definition = {\n  'type': 'Force',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'static',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'restart',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'iterations',\n    'type': 'number',\n    'default': 300\n  }, {\n    'name': 'alpha',\n    'type': 'number',\n    'default': 1\n  }, {\n    'name': 'alphaMin',\n    'type': 'number',\n    'default': 0.001\n  }, {\n    'name': 'alphaTarget',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'velocityDecay',\n    'type': 'number',\n    'default': 0.4\n  }, {\n    'name': 'forces',\n    'type': 'param',\n    'array': true,\n    'params': [{\n      'key': {\n        'force': 'center'\n      },\n      'params': [{\n        'name': 'x',\n        'type': 'number',\n        'default': 0\n      }, {\n        'name': 'y',\n        'type': 'number',\n        'default': 0\n      }]\n    }, {\n      'key': {\n        'force': 'collide'\n      },\n      'params': [{\n        'name': 'radius',\n        'type': 'number',\n        'expr': true\n      }, {\n        'name': 'strength',\n        'type': 'number',\n        'default': 0.7\n      }, {\n        'name': 'iterations',\n        'type': 'number',\n        'default': 1\n      }]\n    }, {\n      'key': {\n        'force': 'nbody'\n      },\n      'params': [{\n        'name': 'strength',\n        'type': 'number',\n        'default': -30\n      }, {\n        'name': 'theta',\n        'type': 'number',\n        'default': 0.9\n      }, {\n        'name': 'distanceMin',\n        'type': 'number',\n        'default': 1\n      }, {\n        'name': 'distanceMax',\n        'type': 'number'\n      }]\n    }, {\n      'key': {\n        'force': 'link'\n      },\n      'params': [{\n        'name': 'links',\n        'type': 'data'\n      }, {\n        'name': 'id',\n        'type': 'field'\n      }, {\n        'name': 'distance',\n        'type': 'number',\n        'default': 30,\n        'expr': true\n      }, {\n        'name': 'strength',\n        'type': 'number',\n        'expr': true\n      }, {\n        'name': 'iterations',\n        'type': 'number',\n        'default': 1\n      }]\n    }, {\n      'key': {\n        'force': 'x'\n      },\n      'params': [{\n        'name': 'strength',\n        'type': 'number',\n        'default': 0.1\n      }, {\n        'name': 'x',\n        'type': 'field'\n      }]\n    }, {\n      'key': {\n        'force': 'y'\n      },\n      'params': [{\n        'name': 'strength',\n        'type': 'number',\n        'default': 0.1\n      }, {\n        'name': 'y',\n        'type': 'field'\n      }]\n    }]\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'modify': false,\n    'default': ForceOutput\n  }]\n};\ninherits(Force, Transform, {\n  transform(_, pulse) {\n    var sim = this.value,\n        change = pulse.changed(pulse.ADD_REM),\n        params = _.modified(ForceParams),\n        iters = _.iterations || 300; // configure simulation\n\n\n    if (!sim) {\n      this.value = sim = simulation(pulse.source, _);\n      sim.on('tick', rerun(pulse.dataflow, this));\n\n      if (!_.static) {\n        change = true;\n        sim.tick(); // ensure we run on init\n      }\n\n      pulse.modifies('index');\n    } else {\n      if (change) {\n        pulse.modifies('index');\n        sim.nodes(pulse.source);\n      }\n\n      if (params || pulse.changed(pulse.MOD)) {\n        setup(sim, _, 0, pulse);\n      }\n    } // run simulation\n\n\n    if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n      sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n      if (_.static) {\n        for (sim.stop(); --iters >= 0;) sim.tick();\n      } else {\n        if (sim.stopped()) sim.restart();\n        if (!change) return pulse.StopPropagation; // defer to sim ticks\n      }\n    }\n\n    return this.finish(_, pulse);\n  },\n\n  finish(_, pulse) {\n    const dataflow = pulse.dataflow; // inspect dependencies, touch link source data\n\n    for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n      arg = args[j];\n\n      if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n        continue;\n      }\n\n      for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n        if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n          dataflow.pulse(op, dataflow.changeset().reflow());\n          break;\n        }\n      }\n    } // reflow all nodes\n\n\n    return pulse.reflow(_.modified()).modifies(ForceOutput);\n  }\n\n});\n\nfunction rerun(df, op) {\n  return () => df.touch(op).run();\n}\n\nfunction simulation(nodes, _) {\n  const sim = forceSimulation(nodes),\n        stop = sim.stop,\n        restart = sim.restart;\n  let stopped = false;\n\n  sim.stopped = () => stopped;\n\n  sim.restart = () => (stopped = false, restart());\n\n  sim.stop = () => (stopped = true, stop());\n\n  return setup(sim, _, true).on('end', () => stopped = true);\n}\n\nfunction setup(sim, _, init, pulse) {\n  var f = array(_.forces),\n      i,\n      n,\n      p,\n      name;\n\n  for (i = 0, n = ForceParams.length; i < n; ++i) {\n    p = ForceParams[i];\n    if (p !== Forces && _.modified(p)) sim[p](_[p]);\n  }\n\n  for (i = 0, n = f.length; i < n; ++i) {\n    name = Forces + i;\n    p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n    if (p) sim.force(name, p);\n  }\n\n  for (n = sim.numForces || 0; i < n; ++i) {\n    sim.force(Forces + i, null); // remove\n  }\n\n  sim.numForces = f.length;\n  return sim;\n}\n\nfunction modified(f, pulse) {\n  var k, v;\n\n  for (k in f) {\n    if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n  }\n\n  return 0;\n}\n\nfunction getForce(_) {\n  var f, p;\n\n  if (!hasOwnProperty(ForceMap, _.force)) {\n    error('Unrecognized force: ' + _.force);\n  }\n\n  f = ForceMap[_.force]();\n\n  for (p in _) {\n    if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n  }\n\n  return f;\n}\n\nfunction setForceParam(f, v, _) {\n  f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","function defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  find: node_find,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy,\n  [Symbol.iterator]: node_iterator\n};\n","export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n  var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packEnclose(circles) {\n  if (!(n = (circles = array(circles)).length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packEnclose(circles);\n  return circles;\n}\n","export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n","export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n","export default function(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n    ambiguous = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nexport default function() {\n  var id = defaultId,\n      parentId = defaultParentId;\n\n  function stratify(data) {\n    var nodes = Array.from(data),\n        n = nodes.length,\n        d,\n        i,\n        root,\n        parent,\n        node,\n        nodeId,\n        nodeKey,\n        nodeByKey = new Map;\n\n    for (i = 0; i < n; ++i) {\n      d = nodes[i], node = nodes[i] = new Node(d);\n      if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = node.id = nodeId;\n        nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n      }\n      if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n        node.parent = nodeId;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i];\n      if (nodeId = node.parent) {\n        parent = nodeByKey.get(nodeId);\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      } else {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = required(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = required(x), stratify) : parentId;\n  };\n\n  return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nexport default (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n        else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n","export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n  const map = {};\n  tree.each(node => {\n    const t = node.data;\n    if (filter(t)) map[key(t)] = node;\n  });\n  tree.lookup = map;\n  return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n *   non-leaf nodes generated by this transform should be included in the\n *   output. The default (false) includes only the input data (leaf nodes)\n *   in the data stream.\n */\n\nfunction Nest(params) {\n  Transform.call(this, null, params);\n}\nNest.Definition = {\n  'type': 'Nest',\n  'metadata': {\n    'treesource': true,\n    'changes': true\n  },\n  'params': [{\n    'name': 'keys',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'generate',\n    'type': 'boolean'\n  }]\n};\n\nconst children = n => n.values;\n\ninherits(Nest, Transform, {\n  transform(_, pulse) {\n    if (!pulse.source) {\n      error('Nest transform requires an upstream data source.');\n    }\n\n    var gen = _.generate,\n        mod = _.modified(),\n        out = pulse.clone(),\n        tree = this.value;\n\n    if (!tree || mod || pulse.changed()) {\n      // collect nodes to remove\n      if (tree) {\n        tree.each(node => {\n          if (node.children && isTuple(node.data)) {\n            out.rem.push(node.data);\n          }\n        });\n      } // generate new tree structure\n\n\n      this.value = tree = hierarchy({\n        values: array(_.keys).reduce((n, k) => {\n          n.key(k);\n          return n;\n        }, nest()).entries(out.source)\n      }, children); // collect nodes to add\n\n      if (gen) {\n        tree.each(node => {\n          if (node.children) {\n            node = ingest(node.data);\n            out.add.push(node);\n            out.source.push(node);\n          }\n        });\n      } // build lookup table\n\n\n      lookup(tree, tupleid, tupleid);\n    }\n\n    out.source.root = tree;\n    return out;\n  }\n\n});\n\nfunction nest() {\n  const keys = [],\n        nest = {\n    entries: array => entries(apply(array, 0), 0),\n    key: d => (keys.push(d), nest)\n  };\n\n  function apply(array, depth) {\n    if (depth >= keys.length) {\n      return array;\n    }\n\n    const n = array.length,\n          key = keys[depth++],\n          valuesByKey = {},\n          result = {};\n    let i = -1,\n        keyValue,\n        value,\n        values;\n\n    while (++i < n) {\n      keyValue = key(value = array[i]) + '';\n\n      if (values = valuesByKey[keyValue]) {\n        values.push(value);\n      } else {\n        valuesByKey[keyValue] = [value];\n      }\n    }\n\n    for (keyValue in valuesByKey) {\n      result[keyValue] = apply(valuesByKey[keyValue], depth);\n    }\n\n    return result;\n  }\n\n  function entries(map, depth) {\n    if (++depth > keys.length) return map;\n    const array = [];\n\n    for (const key in map) {\n      array.push({\n        key,\n        values: entries(map[key], depth)\n      });\n    }\n\n    return array;\n  }\n\n  return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction HierarchyLayout(params) {\n  Transform.call(this, null, params);\n}\n\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\n\ninherits(HierarchyLayout, Transform, {\n  transform(_, pulse) {\n    if (!pulse.source || !pulse.source.root) {\n      error(this.constructor.name + ' transform requires a backing tree data source.');\n    }\n\n    const layout = this.layout(_.method),\n          fields = this.fields,\n          root = pulse.source.root,\n          as = _.as || fields;\n    if (_.field) root.sum(_.field);else root.count();\n    if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n    setParams(layout, this.params, _);\n\n    if (layout.separation) {\n      layout.separation(_.separation !== false ? defaultSeparation : one);\n    }\n\n    try {\n      this.value = layout(root);\n    } catch (err) {\n      error(err);\n    }\n\n    root.each(node => setFields(node, fields, as));\n    return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n  }\n\n});\n\nfunction setParams(layout, params, _) {\n  for (let p, i = 0, n = params.length; i < n; ++i) {\n    p = params[i];\n    if (p in _) layout[p](_[p]);\n  }\n}\n\nfunction setFields(node, fields, as) {\n  const t = node.data,\n        n = fields.length - 1;\n\n  for (let i = 0; i < n; ++i) {\n    t[as[i]] = node[fields[i]];\n  }\n\n  t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output = ['x', 'y', 'r', 'depth', 'children'];\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Pack(params) {\n  HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n  'type': 'Pack',\n  'metadata': {\n    'tree': true,\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'padding',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'radius',\n    'type': 'field',\n    'default': null\n  }, {\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': Output.length,\n    'default': Output\n  }]\n};\ninherits(Pack, HierarchyLayout, {\n  layout: pack,\n  params: ['radius', 'size', 'padding'],\n  fields: Output\n});\n\nconst Output$1 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Partition(params) {\n  HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n  'type': 'Partition',\n  'metadata': {\n    'tree': true,\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'padding',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'round',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': Output$1.length,\n    'default': Output$1\n  }]\n};\ninherits(Partition, HierarchyLayout, {\n  layout: partition,\n  params: ['size', 'round', 'padding'],\n  fields: Output$1\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\n\nfunction Stratify(params) {\n  Transform.call(this, null, params);\n}\nStratify.Definition = {\n  'type': 'Stratify',\n  'metadata': {\n    'treesource': true\n  },\n  'params': [{\n    'name': 'key',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'parentKey',\n    'type': 'field',\n    'required': true\n  }]\n};\ninherits(Stratify, Transform, {\n  transform(_, pulse) {\n    if (!pulse.source) {\n      error('Stratify transform requires an upstream data source.');\n    }\n\n    let tree = this.value;\n\n    const mod = _.modified(),\n          out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n          run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields); // prevent upstream source pollution\n\n\n    out.source = out.source.slice();\n\n    if (run) {\n      tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n    }\n\n    out.source.root = this.value = tree;\n    return out;\n  }\n\n});\n\nconst Layouts = {\n  tidy: tree,\n  cluster: cluster\n};\nconst Output$2 = ['x', 'y', 'depth', 'children'];\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Tree(params) {\n  HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n  'type': 'Tree',\n  'metadata': {\n    'tree': true,\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'method',\n    'type': 'enum',\n    'default': 'tidy',\n    'values': ['tidy', 'cluster']\n  }, {\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'nodeSize',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'separation',\n    'type': 'boolean',\n    'default': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': Output$2.length,\n    'default': Output$2\n  }]\n};\ninherits(Tree, HierarchyLayout, {\n  /**\n   * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n   */\n  layout(method) {\n    const m = method || 'tidy';\n    if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n  },\n\n  params: ['size', 'nodeSize'],\n  fields: Output$2\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction TreeLinks(params) {\n  Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n  'type': 'TreeLinks',\n  'metadata': {\n    'tree': true,\n    'generates': true,\n    'changes': true\n  },\n  'params': []\n};\ninherits(TreeLinks, Transform, {\n  transform(_, pulse) {\n    const links = this.value,\n          tree = pulse.source && pulse.source.root,\n          out = pulse.fork(pulse.NO_SOURCE),\n          lut = {};\n    if (!tree) error('TreeLinks transform requires a tree data source.');\n\n    if (pulse.changed(pulse.ADD_REM)) {\n      // remove previous links\n      out.rem = links; // build lookup table of valid tuples\n\n      pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1); // generate links for all edges incident on valid tuples\n\n      tree.each(node => {\n        const t = node.data,\n              p = node.parent && node.parent.data;\n\n        if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n          out.add.push(ingest({\n            source: p,\n            target: t\n          }));\n        }\n      });\n      this.value = out.add;\n    } else if (pulse.changed(pulse.MOD)) {\n      // build lookup table of modified tuples\n      pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1); // gather links incident on modified tuples\n\n      links.forEach(link => {\n        if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n          out.mod.push(link);\n        }\n      });\n    }\n\n    return out;\n  }\n\n});\n\nconst Tiles = {\n  binary: treemapBinary,\n  dice: treemapDice,\n  slice: treemapSlice,\n  slicedice: treemapSliceDice,\n  squarify: treemapSquarify,\n  resquarify: treemapResquarify\n};\nconst Output$3 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Treemap(params) {\n  HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n  'type': 'Treemap',\n  'metadata': {\n    'tree': true,\n    'modifies': true\n  },\n  'params': [{\n    'name': 'field',\n    'type': 'field'\n  }, {\n    'name': 'sort',\n    'type': 'compare'\n  }, {\n    'name': 'method',\n    'type': 'enum',\n    'default': 'squarify',\n    'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n  }, {\n    'name': 'padding',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingInner',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingOuter',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingTop',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingRight',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingBottom',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'paddingLeft',\n    'type': 'number',\n    'default': 0\n  }, {\n    'name': 'ratio',\n    'type': 'number',\n    'default': 1.618033988749895\n  }, {\n    'name': 'round',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': Output$3.length,\n    'default': Output$3\n  }]\n};\ninherits(Treemap, HierarchyLayout, {\n  /**\n   * Treemap layout generator. Adds 'method' and 'ratio' parameters\n   * to configure the underlying tile method.\n   */\n  layout() {\n    const x = treemap();\n\n    x.ratio = _ => {\n      const t = x.tile();\n      if (t.ratio) x.tile(t.ratio(_));\n    };\n\n    x.method = _ => {\n      if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n    };\n\n    return x;\n  },\n\n  params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n  fields: Output$3\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import { regressionLoess, sampleCurve, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n  var groups = [],\n      get = function (f) {\n    return f(t);\n  },\n      map,\n      i,\n      n,\n      t,\n      k,\n      g; // partition data points into stack groups\n\n\n  if (groupby == null) {\n    groups.push(data);\n  } else {\n    for (map = {}, i = 0, n = data.length; i < n; ++i) {\n      t = data[i];\n      k = groupby.map(get);\n      g = map[k];\n\n      if (!g) {\n        map[k] = g = [];\n        g.dims = k;\n        groups.push(g);\n      }\n\n      g.push(t);\n    }\n  }\n\n  return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\n\nfunction Loess(params) {\n  Transform.call(this, null, params);\n}\nLoess.Definition = {\n  'type': 'Loess',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'x',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'y',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'bandwidth',\n    'type': 'number',\n    'default': 0.3\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true\n  }]\n};\ninherits(Loess, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n    if (!this.value || pulse.changed() || _.modified()) {\n      const source = pulse.materialize(pulse.SOURCE).source,\n            groups = partition(source, _.groupby),\n            names = (_.groupby || []).map(accessorName),\n            m = names.length,\n            as = _.as || [accessorName(_.x), accessorName(_.y)],\n            values = [];\n      groups.forEach(g => {\n        regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n          const t = {};\n\n          for (let i = 0; i < m; ++i) {\n            t[names[i]] = g.dims[i];\n          }\n\n          t[as[0]] = p[0];\n          t[as[1]] = p[1];\n          values.push(ingest(t));\n        });\n      });\n      if (this.value) out.rem = this.value;\n      this.value = out.add = out.source = values;\n    }\n\n    return out;\n  }\n\n});\n\nconst Methods = {\n  linear: regressionLinear,\n  log: regressionLog,\n  exp: regressionExp,\n  pow: regressionPow,\n  quad: regressionQuad,\n  poly: regressionPoly\n};\n\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array<function(object): *>} [params.groupby] - An array of accessors to groupby.\n * @param {Array<number>} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\n\n\nfunction Regression(params) {\n  Transform.call(this, null, params);\n}\nRegression.Definition = {\n  'type': 'Regression',\n  'metadata': {\n    'generates': true\n  },\n  'params': [{\n    'name': 'x',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'y',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'groupby',\n    'type': 'field',\n    'array': true\n  }, {\n    'name': 'method',\n    'type': 'string',\n    'default': 'linear',\n    'values': Object.keys(Methods)\n  }, {\n    'name': 'order',\n    'type': 'number',\n    'default': 3\n  }, {\n    'name': 'extent',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'params',\n    'type': 'boolean',\n    'default': false\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true\n  }]\n};\ninherits(Regression, Transform, {\n  transform(_, pulse) {\n    const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n    if (!this.value || pulse.changed() || _.modified()) {\n      const source = pulse.materialize(pulse.SOURCE).source,\n            groups = partition(source, _.groupby),\n            names = (_.groupby || []).map(accessorName),\n            method = _.method || 'linear',\n            order = _.order || 3,\n            dof = degreesOfFreedom(method, order),\n            as = _.as || [accessorName(_.x), accessorName(_.y)],\n            fit = Methods[method],\n            values = [];\n      let domain = _.extent;\n\n      if (!hasOwnProperty(Methods, method)) {\n        error('Invalid regression method: ' + method);\n      }\n\n      if (domain != null) {\n        if (method === 'log' && domain[0] <= 0) {\n          pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n          domain = null;\n        }\n      }\n\n      groups.forEach(g => {\n        const n = g.length;\n\n        if (n <= dof) {\n          pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n          return;\n        }\n\n        const model = fit(g, _.x, _.y, order);\n\n        if (_.params) {\n          // if parameter vectors requested return those\n          values.push(ingest({\n            keys: g.dims,\n            coef: model.coef,\n            rSquared: model.rSquared\n          }));\n          return;\n        }\n\n        const dom = domain || extent(g, _.x),\n              add = p => {\n          const t = {};\n\n          for (let i = 0; i < names.length; ++i) {\n            t[names[i]] = g.dims[i];\n          }\n\n          t[as[0]] = p[0];\n          t[as[1]] = p[1];\n          values.push(ingest(t));\n        };\n\n        if (method === 'linear') {\n          // for linear regression we only need the end points\n          dom.forEach(x => add([x, model.predict(x)]));\n        } else {\n          // otherwise return trend line sample points\n          sampleCurve(model.predict, dom, 25, 200).forEach(add);\n        }\n      });\n      if (this.value) out.rem = this.value;\n      this.value = out.add = out.source = values;\n    }\n\n    return out;\n  }\n\n});\n\nexport { Loess as loess, Regression as regression };\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nexport default class Delaunator {\n\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        this._triangles = new Uint32Array(maxTriangles * 3);\n        this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        this._hashSize = Math.ceil(Math.sqrt(n));\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\n        this._hullNext = new Uint32Array(n); // edge to next edge\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n        // temporary arrays for sorting points\n        this._ids = new Uint32Array(n);\n        this._dists = new Float64Array(n);\n\n        this.update();\n    }\n\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let minDist = Infinity;\n        let i0, i1, i2;\n\n        // pick a seed point close to the center\n        for (let i = 0; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        minDist = Infinity;\n\n        // find the point closest to the seed\n        for (let i = 0; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                if (this._dists[id] > d0) {\n                    hull[j++] = id;\n                    d0 = this._dists[id];\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Uint32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    // add a new triangle given vertex indices and adjacent half-edge ids\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\n// return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\nfunction orientIfSure(px, py, rx, ry, qx, qy) {\n    const l = (ry - py) * (qx - px);\n    const r = (rx - px) * (qy - py);\n    return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n}\n\n// a more robust orientation test that's stable in a given triangle (to fix robustness issues)\nfunction orient(rx, ry, qx, qy, px, py) {\n    const sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n    orientIfSure(rx, ry, qx, qy, px, py) ||\n    orientIfSure(qx, qy, px, py, rx, ry);\n    return sign < 0;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n    return p[0];\n}\nfunction defaultGetY(p) {\n    return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const bl = dx * dx + dy * dy;\n      const cl = ex * ex + ey * ey;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (!ab) {\n        // degenerate case (collinear diagram)\n        x = (x1 + x3) / 2 - 1e8 * ey;\n        y = (y1 + y3) / 2 + 1e8 * ex;\n      }\n      else if (Math.abs(ab) < 1e-8) {\n        // almost equal points (degenerate triangle)\n        x = (x1 + x3) / 2;\n        y = (y1 + y3) / 2;\n      } else {\n        const d = 1 / ab;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] == cj[aj]\n          && ci[ai + 1] == cj[aj + 1]\n          && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n          && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n          ) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points);\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    while (true) {\n      if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    if (P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k]\n        || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n          P.splice(j, 2), i -= 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      this.triangles[1] = hull[1];\n      this.triangles[2] = hull[1];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) inedges[hull[1]] = 0;\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r = 2) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n","export {default as Delaunay} from \"./delaunay.js\";\nexport {default as Voronoi} from \"./voronoi.js\";\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n  Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n  'type': 'Voronoi',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'x',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'y',\n    'type': 'field',\n    'required': true\n  }, {\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'extent',\n    'type': 'array',\n    'array': true,\n    'length': 2,\n    'default': [[-1e5, -1e5], [1e5, 1e5]],\n    'content': {\n      'type': 'number',\n      'array': true,\n      'length': 2\n    }\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'default': 'path'\n  }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n  transform(_, pulse) {\n    const as = _.as || 'path',\n          data = pulse.source; // nothing to do if no data\n\n    if (!data || !data.length) return pulse; // configure and construct voronoi diagram\n\n    let s = _.size;\n    s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n    const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s); // map polygons to paths\n\n    for (let i = 0, n = data.length; i < n; ++i) {\n      const polygon = voronoi.cellPolygon(i);\n      data[i][as] = polygon ? toPathString(polygon) : null;\n    }\n\n    return pulse.reflow(_.modified()).modifies(as);\n  }\n\n}); // suppress duplicated end point vertices\n\nfunction toPathString(p) {\n  const x = p[0][0],\n        y = p[0][1];\n  let n = p.length - 1;\n\n  for (; p[n][0] === x && p[n][1] === y; --n);\n\n  return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright notice, this\n    list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n\n  * The name Jason Davies may not be used to endorse or promote products\n    derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n    cw = 1 << 11 >> 5,\n    ch = 1 << 11;\nfunction cloud () {\n  var size = [256, 256],\n      text,\n      font,\n      fontSize,\n      fontStyle,\n      fontWeight,\n      rotate,\n      padding,\n      spiral = archimedeanSpiral,\n      words = [],\n      random = Math.random,\n      cloud = {};\n\n  cloud.layout = function () {\n    var contextAndRatio = getContext(canvas()),\n        board = zeroArray((size[0] >> 5) * size[1]),\n        bounds = null,\n        n = words.length,\n        i = -1,\n        tags = [],\n        data = words.map(d => ({\n      text: text(d),\n      font: font(d),\n      style: fontStyle(d),\n      weight: fontWeight(d),\n      rotate: rotate(d),\n      size: ~~(fontSize(d) + 1e-14),\n      padding: padding(d),\n      xoff: 0,\n      yoff: 0,\n      x1: 0,\n      y1: 0,\n      x0: 0,\n      y0: 0,\n      hasText: false,\n      sprite: null,\n      datum: d\n    })).sort((a, b) => b.size - a.size);\n\n    while (++i < n) {\n      var d = data[i];\n      d.x = size[0] * (random() + .5) >> 1;\n      d.y = size[1] * (random() + .5) >> 1;\n      cloudSprite(contextAndRatio, d, data, i);\n\n      if (d.hasText && place(board, d, bounds)) {\n        tags.push(d);\n        if (bounds) cloudBounds(bounds, d);else bounds = [{\n          x: d.x + d.x0,\n          y: d.y + d.y0\n        }, {\n          x: d.x + d.x1,\n          y: d.y + d.y1\n        }]; // Temporary hack\n\n        d.x -= size[0] >> 1;\n        d.y -= size[1] >> 1;\n      }\n    }\n\n    return tags;\n  };\n\n  function getContext(canvas) {\n    canvas.width = canvas.height = 1;\n    var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n    canvas.width = (cw << 5) / ratio;\n    canvas.height = ch / ratio;\n    var context = canvas.getContext('2d');\n    context.fillStyle = context.strokeStyle = 'red';\n    context.textAlign = 'center';\n    return {\n      context: context,\n      ratio: ratio\n    };\n  }\n\n  function place(board, tag, bounds) {\n    var startX = tag.x,\n        startY = tag.y,\n        maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n        s = spiral(size),\n        dt = random() < .5 ? 1 : -1,\n        t = -dt,\n        dxdy,\n        dx,\n        dy;\n\n    while (dxdy = s(t += dt)) {\n      dx = ~~dxdy[0];\n      dy = ~~dxdy[1];\n      if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n      tag.x = startX + dx;\n      tag.y = startY + dy;\n      if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n      if (!bounds || !cloudCollide(tag, board, size[0])) {\n        if (!bounds || collideRects(tag, bounds)) {\n          var sprite = tag.sprite,\n              w = tag.width >> 5,\n              sw = size[0] >> 5,\n              lx = tag.x - (w << 4),\n              sx = lx & 0x7f,\n              msx = 32 - sx,\n              h = tag.y1 - tag.y0,\n              x = (tag.y + tag.y0) * sw + (lx >> 5),\n              last;\n\n          for (var j = 0; j < h; j++) {\n            last = 0;\n\n            for (var i = 0; i <= w; i++) {\n              board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n            }\n\n            x += sw;\n          }\n\n          tag.sprite = null;\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  cloud.words = function (_) {\n    if (arguments.length) {\n      words = _;\n      return cloud;\n    } else {\n      return words;\n    }\n  };\n\n  cloud.size = function (_) {\n    if (arguments.length) {\n      size = [+_[0], +_[1]];\n      return cloud;\n    } else {\n      return size;\n    }\n  };\n\n  cloud.font = function (_) {\n    if (arguments.length) {\n      font = functor(_);\n      return cloud;\n    } else {\n      return font;\n    }\n  };\n\n  cloud.fontStyle = function (_) {\n    if (arguments.length) {\n      fontStyle = functor(_);\n      return cloud;\n    } else {\n      return fontStyle;\n    }\n  };\n\n  cloud.fontWeight = function (_) {\n    if (arguments.length) {\n      fontWeight = functor(_);\n      return cloud;\n    } else {\n      return fontWeight;\n    }\n  };\n\n  cloud.rotate = function (_) {\n    if (arguments.length) {\n      rotate = functor(_);\n      return cloud;\n    } else {\n      return rotate;\n    }\n  };\n\n  cloud.text = function (_) {\n    if (arguments.length) {\n      text = functor(_);\n      return cloud;\n    } else {\n      return text;\n    }\n  };\n\n  cloud.spiral = function (_) {\n    if (arguments.length) {\n      spiral = spirals[_] || _;\n      return cloud;\n    } else {\n      return spiral;\n    }\n  };\n\n  cloud.fontSize = function (_) {\n    if (arguments.length) {\n      fontSize = functor(_);\n      return cloud;\n    } else {\n      return fontSize;\n    }\n  };\n\n  cloud.padding = function (_) {\n    if (arguments.length) {\n      padding = functor(_);\n      return cloud;\n    } else {\n      return padding;\n    }\n  };\n\n  cloud.random = function (_) {\n    if (arguments.length) {\n      random = _;\n      return cloud;\n    } else {\n      return random;\n    }\n  };\n\n  return cloud;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n  if (d.sprite) return;\n  var c = contextAndRatio.context,\n      ratio = contextAndRatio.ratio;\n  c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n  var x = 0,\n      y = 0,\n      maxh = 0,\n      n = data.length,\n      w,\n      w32,\n      h,\n      i,\n      j;\n  --di;\n\n  while (++di < n) {\n    d = data[di];\n    c.save();\n    c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n    w = c.measureText(d.text + 'm').width * ratio;\n    h = d.size << 1;\n\n    if (d.rotate) {\n      var sr = Math.sin(d.rotate * cloudRadians),\n          cr = Math.cos(d.rotate * cloudRadians),\n          wcr = w * cr,\n          wsr = w * sr,\n          hcr = h * cr,\n          hsr = h * sr;\n      w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n      h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n    } else {\n      w = w + 0x1f >> 5 << 5;\n    }\n\n    if (h > maxh) maxh = h;\n\n    if (x + w >= cw << 5) {\n      x = 0;\n      y += maxh;\n      maxh = 0;\n    }\n\n    if (y + h >= ch) break;\n    c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n    if (d.rotate) c.rotate(d.rotate * cloudRadians);\n    c.fillText(d.text, 0, 0);\n\n    if (d.padding) {\n      c.lineWidth = 2 * d.padding;\n      c.strokeText(d.text, 0, 0);\n    }\n\n    c.restore();\n    d.width = w;\n    d.height = h;\n    d.xoff = x;\n    d.yoff = y;\n    d.x1 = w >> 1;\n    d.y1 = h >> 1;\n    d.x0 = -d.x1;\n    d.y0 = -d.y1;\n    d.hasText = true;\n    x += w;\n  }\n\n  var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n      sprite = [];\n\n  while (--di >= 0) {\n    d = data[di];\n    if (!d.hasText) continue;\n    w = d.width;\n    w32 = w >> 5;\n    h = d.y1 - d.y0; // Zero the buffer\n\n    for (i = 0; i < h * w32; i++) sprite[i] = 0;\n\n    x = d.xoff;\n    if (x == null) return;\n    y = d.yoff;\n    var seen = 0,\n        seenRow = -1;\n\n    for (j = 0; j < h; j++) {\n      for (i = 0; i < w; i++) {\n        var k = w32 * j + (i >> 5),\n            m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n        sprite[k] |= m;\n        seen |= m;\n      }\n\n      if (seen) seenRow = j;else {\n        d.y0++;\n        h--;\n        j--;\n        y++;\n      }\n    }\n\n    d.y1 = d.y0 + seenRow;\n    d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n  }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n  sw >>= 5;\n  var sprite = tag.sprite,\n      w = tag.width >> 5,\n      lx = tag.x - (w << 4),\n      sx = lx & 0x7f,\n      msx = 32 - sx,\n      h = tag.y1 - tag.y0,\n      x = (tag.y + tag.y0) * sw + (lx >> 5),\n      last;\n\n  for (var j = 0; j < h; j++) {\n    last = 0;\n\n    for (var i = 0; i <= w; i++) {\n      if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n    }\n\n    x += sw;\n  }\n\n  return false;\n}\n\nfunction cloudBounds(bounds, d) {\n  var b0 = bounds[0],\n      b1 = bounds[1];\n  if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n  if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n  if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n  if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n  return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n  var e = size[0] / size[1];\n  return function (t) {\n    return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n  };\n}\n\nfunction rectangularSpiral(size) {\n  var dy = 4,\n      dx = dy * size[0] / size[1],\n      x = 0,\n      y = 0;\n  return function (t) {\n    var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n    switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n      case 0:\n        x += dx;\n        break;\n\n      case 1:\n        y += dy;\n        break;\n\n      case 2:\n        x -= dx;\n        break;\n\n      default:\n        y -= dy;\n        break;\n    }\n\n    return [x, y];\n  };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n  var a = [],\n      i = -1;\n\n  while (++i < n) a[i] = 0;\n\n  return a;\n}\n\nfunction functor(d) {\n  return typeof d === 'function' ? d : function () {\n    return d;\n  };\n}\n\nvar spirals = {\n  archimedean: archimedeanSpiral,\n  rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n  Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n  'type': 'Wordcloud',\n  'metadata': {\n    'modifies': true\n  },\n  'params': [{\n    'name': 'size',\n    'type': 'number',\n    'array': true,\n    'length': 2\n  }, {\n    'name': 'font',\n    'type': 'string',\n    'expr': true,\n    'default': 'sans-serif'\n  }, {\n    'name': 'fontStyle',\n    'type': 'string',\n    'expr': true,\n    'default': 'normal'\n  }, {\n    'name': 'fontWeight',\n    'type': 'string',\n    'expr': true,\n    'default': 'normal'\n  }, {\n    'name': 'fontSize',\n    'type': 'number',\n    'expr': true,\n    'default': 14\n  }, {\n    'name': 'fontSizeRange',\n    'type': 'number',\n    'array': 'nullable',\n    'default': [10, 50]\n  }, {\n    'name': 'rotate',\n    'type': 'number',\n    'expr': true,\n    'default': 0\n  }, {\n    'name': 'text',\n    'type': 'field'\n  }, {\n    'name': 'spiral',\n    'type': 'string',\n    'values': ['archimedean', 'rectangular']\n  }, {\n    'name': 'padding',\n    'type': 'number',\n    'expr': true\n  }, {\n    'name': 'as',\n    'type': 'string',\n    'array': true,\n    'length': 7,\n    'default': Output\n  }]\n};\ninherits(Wordcloud, Transform, {\n  transform(_, pulse) {\n    if (_.size && !(_.size[0] && _.size[1])) {\n      error('Wordcloud size dimensions must be non-zero.');\n    }\n\n    function modp(param) {\n      const p = _[param];\n      return isFunction(p) && pulse.modified(p.fields);\n    }\n\n    const mod = _.modified();\n\n    if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n    const data = pulse.materialize(pulse.SOURCE).source,\n          layout = this.value,\n          as = _.as || Output;\n    let fontSize = _.fontSize || 14,\n        range;\n    isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize); // create font size scaling function as needed\n\n    if (range) {\n      const fsize = fontSize,\n            sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n\n      fontSize = x => sizeScale(fsize(x));\n    }\n\n    data.forEach(t => {\n      t[as[0]] = NaN;\n      t[as[1]] = NaN;\n      t[as[3]] = 0;\n    }); // configure layout\n\n    const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n    const size = layout.size(),\n          dx = size[0] >> 1,\n          dy = size[1] >> 1,\n          n = words.length;\n\n    for (let i = 0, w, t; i < n; ++i) {\n      w = words[i];\n      t = w.datum;\n      t[as[0]] = w.x + dx;\n      t[as[1]] = w.y + dy;\n      t[as[2]] = w.font;\n      t[as[3]] = w.size;\n      t[as[4]] = w.style;\n      t[as[5]] = w.weight;\n      t[as[6]] = w.rotate;\n    }\n\n    return pulse.reflow(mod).modifies(as);\n  }\n\n});\n\nexport { Wordcloud as wordcloud };\n","import { permute, bisectLeft, bisectRight } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\n\nfunction Bitmaps() {\n  let width = 8,\n      data = [],\n      seen = array32(0),\n      curr = array(0, width),\n      prev = array(0, width);\n  return {\n    data: () => data,\n    seen: () => seen = lengthen(seen, data.length),\n\n    add(array) {\n      for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n        t = array[i];\n        t._index = j++;\n        data.push(t);\n      }\n    },\n\n    remove(num, map) {\n      // map: index -> boolean (true => remove)\n      const n = data.length,\n            copy = Array(n - num),\n            reindex = data; // reuse old data array for index map\n\n      let t, i, j; // seek forward to first removal\n\n      for (i = 0; !map[i] && i < n; ++i) {\n        copy[i] = data[i];\n        reindex[i] = i;\n      } // condense arrays\n\n\n      for (j = i; i < n; ++i) {\n        t = data[i];\n\n        if (!map[i]) {\n          reindex[i] = j;\n          curr[j] = curr[i];\n          prev[j] = prev[i];\n          copy[j] = t;\n          t._index = j++;\n        } else {\n          reindex[i] = -1;\n        }\n\n        curr[i] = 0; // clear unused bits\n      }\n\n      data = copy;\n      return reindex;\n    },\n\n    size: () => data.length,\n    curr: () => curr,\n    prev: () => prev,\n    reset: k => prev[k] = curr[k],\n    all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n\n    set(k, one) {\n      curr[k] |= one;\n    },\n\n    clear(k, one) {\n      curr[k] &= ~one;\n    },\n\n    resize(n, m) {\n      const k = curr.length;\n\n      if (n > k || m > width) {\n        width = Math.max(m, width);\n        curr = array(n, width, curr);\n        prev = array(n, width);\n      }\n    }\n\n  };\n}\n\nfunction lengthen(array, length, copy) {\n  if (array.length >= length) return array;\n  copy = copy || new array.constructor(length);\n  copy.set(array);\n  return copy;\n}\n\nfunction array(n, m, array) {\n  const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n  if (array) copy.set(array);\n  return copy;\n}\n\nfunction Dimension (index, i, query) {\n  const bit = 1 << i;\n  return {\n    one: bit,\n    zero: ~bit,\n    range: query.slice(),\n    bisect: index.bisect,\n    index: index.index,\n    size: index.size,\n\n    onAdd(added, curr) {\n      const dim = this,\n            range = dim.bisect(dim.range, added.value),\n            idx = added.index,\n            lo = range[0],\n            hi = range[1],\n            n1 = idx.length;\n      let i;\n\n      for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n\n      for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n\n      return dim;\n    }\n\n  };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\n\nfunction SortedIndex() {\n  let index = array32(0),\n      value = [],\n      size = 0;\n\n  function insert(key, data, base) {\n    if (!data.length) return [];\n    const n0 = size,\n          n1 = data.length,\n          addi = array32(n1);\n    let addv = Array(n1),\n        oldv,\n        oldi,\n        i;\n\n    for (i = 0; i < n1; ++i) {\n      addv[i] = key(data[i]);\n      addi[i] = i;\n    }\n\n    addv = sort(addv, addi);\n\n    if (n0) {\n      oldv = value;\n      oldi = index;\n      value = Array(n0 + n1);\n      index = array32(n0 + n1);\n      merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n    } else {\n      if (base > 0) for (i = 0; i < n1; ++i) {\n        addi[i] += base;\n      }\n      value = addv;\n      index = addi;\n    }\n\n    size = n0 + n1;\n    return {\n      index: addi,\n      value: addv\n    };\n  }\n\n  function remove(num, map) {\n    // map: index -> remove\n    const n = size;\n    let idx, i, j; // seek forward to first removal\n\n    for (i = 0; !map[index[i]] && i < n; ++i); // condense index and value arrays\n\n\n    for (j = i; i < n; ++i) {\n      if (!map[idx = index[i]]) {\n        index[j] = idx;\n        value[j] = value[i];\n        ++j;\n      }\n    }\n\n    size = n - num;\n  }\n\n  function reindex(map) {\n    for (let i = 0, n = size; i < n; ++i) {\n      index[i] = map[index[i]];\n    }\n  }\n\n  function bisect(range, array) {\n    let n;\n\n    if (array) {\n      n = array.length;\n    } else {\n      array = value;\n      n = size;\n    }\n\n    return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n  }\n\n  return {\n    insert: insert,\n    remove: remove,\n    bisect: bisect,\n    reindex: reindex,\n    index: () => index,\n    size: () => size\n  };\n}\n\nfunction sort(values, index) {\n  values.sort.call(index, (a, b) => {\n    const x = values[a],\n          y = values[b];\n    return x < y ? -1 : x > y ? 1 : 0;\n  });\n  return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n  let i0 = 0,\n      i1 = 0,\n      i;\n\n  for (i = 0; i0 < n0 && i1 < n1; ++i) {\n    if (value0[i0] < value1[i1]) {\n      value[i] = value0[i0];\n      index[i] = index0[i0++];\n    } else {\n      value[i] = value1[i1];\n      index[i] = index1[i1++] + base;\n    }\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    value[i] = value0[i0];\n    index[i] = index0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    value[i] = value1[i1];\n    index[i] = index1[i1] + base;\n  }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array<function(object): *>} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\n\nfunction CrossFilter(params) {\n  Transform.call(this, Bitmaps(), params);\n  this._indices = null;\n  this._dims = null;\n}\nCrossFilter.Definition = {\n  'type': 'CrossFilter',\n  'metadata': {},\n  'params': [{\n    'name': 'fields',\n    'type': 'field',\n    'array': true,\n    'required': true\n  }, {\n    'name': 'query',\n    'type': 'array',\n    'array': true,\n    'required': true,\n    'content': {\n      'type': 'number',\n      'array': true,\n      'length': 2\n    }\n  }]\n};\ninherits(CrossFilter, Transform, {\n  transform(_, pulse) {\n    if (!this._dims) {\n      return this.init(_, pulse);\n    } else {\n      var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n\n      return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n    }\n  },\n\n  init(_, pulse) {\n    const fields = _.fields,\n          query = _.query,\n          indices = this._indices = {},\n          dims = this._dims = [],\n          m = query.length;\n    let i = 0,\n        key,\n        index; // instantiate indices and dimensions\n\n    for (; i < m; ++i) {\n      key = fields[i].fname;\n      index = indices[key] || (indices[key] = SortedIndex());\n      dims.push(Dimension(index, i, query[i]));\n    }\n\n    return this.eval(_, pulse);\n  },\n\n  reinit(_, pulse) {\n    const output = pulse.materialize().fork(),\n          fields = _.fields,\n          query = _.query,\n          indices = this._indices,\n          dims = this._dims,\n          bits = this.value,\n          curr = bits.curr(),\n          prev = bits.prev(),\n          all = bits.all(),\n          out = output.rem = output.add,\n          mod = output.mod,\n          m = query.length,\n          adds = {};\n    let add, index, key, mods, remMap, modMap, i, n, f; // set prev to current state\n\n    prev.set(curr); // if pulse has remove tuples, process them first\n\n    if (pulse.rem.length) {\n      remMap = this.remove(_, pulse, output);\n    } // if pulse has added tuples, add them to state\n\n\n    if (pulse.add.length) {\n      bits.add(pulse.add);\n    } // if pulse has modified tuples, create an index map\n\n\n    if (pulse.mod.length) {\n      modMap = {};\n\n      for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n        modMap[mods[i]._index] = 1;\n      }\n    } // re-initialize indices as needed, update curr bitmap\n\n\n    for (i = 0; i < m; ++i) {\n      f = fields[i];\n\n      if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n        key = f.fname;\n\n        if (!(add = adds[key])) {\n          indices[key] = index = SortedIndex();\n          adds[key] = add = index.insert(f, pulse.source, 0);\n        }\n\n        dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n      }\n    } // visit each tuple\n    // if filter state changed, push index to add/rem\n    // else if in mod and passes a filter, push index to mod\n\n\n    for (i = 0, n = bits.data().length; i < n; ++i) {\n      if (remMap[i]) {\n        // skip if removed tuple\n        continue;\n      } else if (prev[i] !== curr[i]) {\n        // add if state changed\n        out.push(i);\n      } else if (modMap[i] && curr[i] !== all) {\n        // otherwise, pass mods through\n        mod.push(i);\n      }\n    }\n\n    bits.mask = (1 << m) - 1;\n    return output;\n  },\n\n  eval(_, pulse) {\n    const output = pulse.materialize().fork(),\n          m = this._dims.length;\n    let mask = 0;\n\n    if (pulse.rem.length) {\n      this.remove(_, pulse, output);\n      mask |= (1 << m) - 1;\n    }\n\n    if (_.modified('query') && !_.modified('fields')) {\n      mask |= this.update(_, pulse, output);\n    }\n\n    if (pulse.add.length) {\n      this.insert(_, pulse, output);\n      mask |= (1 << m) - 1;\n    }\n\n    if (pulse.mod.length) {\n      this.modify(pulse, output);\n      mask |= (1 << m) - 1;\n    }\n\n    this.value.mask = mask;\n    return output;\n  },\n\n  insert(_, pulse, output) {\n    const tuples = pulse.add,\n          bits = this.value,\n          dims = this._dims,\n          indices = this._indices,\n          fields = _.fields,\n          adds = {},\n          out = output.add,\n          n = bits.size() + tuples.length,\n          m = dims.length;\n    let k = bits.size(),\n        j,\n        key,\n        add; // resize bitmaps and add tuples as needed\n\n    bits.resize(n, m);\n    bits.add(tuples);\n    const curr = bits.curr(),\n          prev = bits.prev(),\n          all = bits.all(); // add to dimensional indices\n\n    for (j = 0; j < m; ++j) {\n      key = fields[j].fname;\n      add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n      dims[j].onAdd(add, curr);\n    } // set previous filters, output if passes at least one filter\n\n\n    for (; k < n; ++k) {\n      prev[k] = all;\n      if (curr[k] !== all) out.push(k);\n    }\n  },\n\n  modify(pulse, output) {\n    const out = output.mod,\n          bits = this.value,\n          curr = bits.curr(),\n          all = bits.all(),\n          tuples = pulse.mod;\n    let i, n, k;\n\n    for (i = 0, n = tuples.length; i < n; ++i) {\n      k = tuples[i]._index;\n      if (curr[k] !== all) out.push(k);\n    }\n  },\n\n  remove(_, pulse, output) {\n    const indices = this._indices,\n          bits = this.value,\n          curr = bits.curr(),\n          prev = bits.prev(),\n          all = bits.all(),\n          map = {},\n          out = output.rem,\n          tuples = pulse.rem;\n    let i, n, k, f; // process tuples, output if passes at least one filter\n\n    for (i = 0, n = tuples.length; i < n; ++i) {\n      k = tuples[i]._index;\n      map[k] = 1; // build index map\n\n      prev[k] = f = curr[k];\n      curr[k] = all;\n      if (f !== all) out.push(k);\n    } // remove from dimensional indices\n\n\n    for (k in indices) {\n      indices[k].remove(n, map);\n    }\n\n    this.reindex(pulse, n, map);\n    return map;\n  },\n\n  // reindex filters and indices after propagation completes\n  reindex(pulse, num, map) {\n    const indices = this._indices,\n          bits = this.value;\n    pulse.runAfter(() => {\n      const indexMap = bits.remove(num, map);\n\n      for (const key in indices) indices[key].reindex(indexMap);\n    });\n  },\n\n  update(_, pulse, output) {\n    const dims = this._dims,\n          query = _.query,\n          stamp = pulse.stamp,\n          m = dims.length;\n    let mask = 0,\n        i,\n        q; // survey how many queries have changed\n\n    output.filters = 0;\n\n    for (q = 0; q < m; ++q) {\n      if (_.modified('query', q)) {\n        i = q;\n        ++mask;\n      }\n    }\n\n    if (mask === 1) {\n      // only one query changed, use more efficient update\n      mask = dims[i].one;\n      this.incrementOne(dims[i], query[i], output.add, output.rem);\n    } else {\n      // multiple queries changed, perform full record keeping\n      for (q = 0, mask = 0; q < m; ++q) {\n        if (!_.modified('query', q)) continue;\n        mask |= dims[q].one;\n        this.incrementAll(dims[q], query[q], stamp, output.add);\n        output.rem = output.add; // duplicate add/rem for downstream resolve\n      }\n    }\n\n    return mask;\n  },\n\n  incrementAll(dim, query, stamp, out) {\n    const bits = this.value,\n          seen = bits.seen(),\n          curr = bits.curr(),\n          prev = bits.prev(),\n          index = dim.index(),\n          old = dim.bisect(dim.range),\n          range = dim.bisect(query),\n          lo1 = range[0],\n          hi1 = range[1],\n          lo0 = old[0],\n          hi0 = old[1],\n          one = dim.one;\n    let i, j, k; // Fast incremental update based on previous lo index.\n\n    if (lo1 < lo0) {\n      for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n        k = index[i];\n\n        if (seen[k] !== stamp) {\n          prev[k] = curr[k];\n          seen[k] = stamp;\n          out.push(k);\n        }\n\n        curr[k] ^= one;\n      }\n    } else if (lo1 > lo0) {\n      for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n        k = index[i];\n\n        if (seen[k] !== stamp) {\n          prev[k] = curr[k];\n          seen[k] = stamp;\n          out.push(k);\n        }\n\n        curr[k] ^= one;\n      }\n    } // Fast incremental update based on previous hi index.\n\n\n    if (hi1 > hi0) {\n      for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n        k = index[i];\n\n        if (seen[k] !== stamp) {\n          prev[k] = curr[k];\n          seen[k] = stamp;\n          out.push(k);\n        }\n\n        curr[k] ^= one;\n      }\n    } else if (hi1 < hi0) {\n      for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n        k = index[i];\n\n        if (seen[k] !== stamp) {\n          prev[k] = curr[k];\n          seen[k] = stamp;\n          out.push(k);\n        }\n\n        curr[k] ^= one;\n      }\n    }\n\n    dim.range = query.slice();\n  },\n\n  incrementOne(dim, query, add, rem) {\n    const bits = this.value,\n          curr = bits.curr(),\n          index = dim.index(),\n          old = dim.bisect(dim.range),\n          range = dim.bisect(query),\n          lo1 = range[0],\n          hi1 = range[1],\n          lo0 = old[0],\n          hi0 = old[1],\n          one = dim.one;\n    let i, j, k; // Fast incremental update based on previous lo index.\n\n    if (lo1 < lo0) {\n      for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n        k = index[i];\n        curr[k] ^= one;\n        add.push(k);\n      }\n    } else if (lo1 > lo0) {\n      for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n        k = index[i];\n        curr[k] ^= one;\n        rem.push(k);\n      }\n    } // Fast incremental update based on previous hi index.\n\n\n    if (hi1 > hi0) {\n      for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n        k = index[i];\n        curr[k] ^= one;\n        add.push(k);\n      }\n    } else if (hi1 < hi0) {\n      for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n        k = index[i];\n        curr[k] ^= one;\n        rem.push(k);\n      }\n    }\n\n    dim.range = query.slice();\n  }\n\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n *   parameter value is a reference to a {@link CrossFilter} transform.\n */\n\nfunction ResolveFilter(params) {\n  Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n  'type': 'ResolveFilter',\n  'metadata': {},\n  'params': [{\n    'name': 'ignore',\n    'type': 'number',\n    'required': true,\n    'description': 'A bit mask indicating which filters to ignore.'\n  }, {\n    'name': 'filter',\n    'type': 'object',\n    'required': true,\n    'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n  }]\n};\ninherits(ResolveFilter, Transform, {\n  transform(_, pulse) {\n    const ignore = ~(_.ignore || 0),\n          // bit mask where zeros -> dims to ignore\n    bitmap = _.filter,\n          mask = bitmap.mask; // exit early if no relevant filter changes\n\n    if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n    const output = pulse.fork(pulse.ALL),\n          data = bitmap.data(),\n          curr = bitmap.curr(),\n          prev = bitmap.prev(),\n          pass = k => !(curr[k] & ignore) ? data[k] : null; // propagate all mod tuples that pass the filter\n\n\n    output.filter(output.MOD, pass); // determine add & rem tuples via filter functions\n    // for efficiency, we do *not* populate new arrays,\n    // instead we add filter functions applied downstream\n\n    if (!(mask & mask - 1)) {\n      // only one filter changed\n      output.filter(output.ADD, pass);\n      output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n    } else {\n      // multiple filters changed\n      output.filter(output.ADD, k => {\n        const c = curr[k] & ignore,\n              f = !c && c ^ prev[k] & ignore;\n        return f ? data[k] : null;\n      });\n      output.filter(output.REM, k => {\n        const c = curr[k] & ignore,\n              f = c && !(c ^ (c ^ prev[k] & ignore));\n        return f ? data[k] : null;\n      });\n    } // add filter to source data in case of reflow...\n\n\n    return output.filter(output.SOURCE, t => pass(t._index));\n  }\n\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","function accessor (fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\nfunction accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function (obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n\n    return obj;\n  };\n};\n\nfunction error (message) {\n  throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n  const path = [],\n        n = p.length;\n  let q = null,\n      b = 0,\n      s = '',\n      i,\n      j,\n      c;\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i = j = 0; j < n; ++j) {\n    c = p[j];\n\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n\nfunction field (field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log(method, level, input) {\n  const args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n  let level = _ || None;\n  return {\n    level(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n\n    error() {\n      if (level >= Error$1) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n\n    warn() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n\n    info() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n\n    debug() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n\n  };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n  return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (const key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        const r = key === 'legend' ? {\n          layout: 1\n        } : key === 'style' ? true : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n\n    return out;\n  }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n  let k, o;\n\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : output[key] = {};\n\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n  const map = {},\n        out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n\nfunction peek (array) {\n  return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n  return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log$1 = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        dd = (d1 - d0) * delta;\n  return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log$1(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n  return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n  const sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n  return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n  let lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n\n  span = hi - lo;\n  return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n  return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n  const ord = [],\n        get = [],\n        fmap = {},\n        gen = opt.comparator || comparator;\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n  return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n\n  return function (a, b) {\n    let f,\n        c = 0,\n        i = -1;\n\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = ascending(f(a), f(b));\n    }\n\n    return c * orders[i];\n  };\n};\n\nfunction constant (_) {\n  return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n  let tid;\n  return e => {\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(() => (handler(e), tid = null), delay);\n  };\n}\n\nfunction extend (_) {\n  for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n    x = arguments[i];\n\n    for (k in x) {\n      _[k] = x[k];\n    }\n  }\n\n  return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n  let i = 0,\n      n,\n      v,\n      min,\n      max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nfunction extentIndex (array, f) {\n  const n = array.length;\n  let i = -1,\n      a,\n      b,\n      c,\n      u,\n      v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n  return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n  let obj = {},\n      test;\n\n  function has$1(key) {\n    return has(obj, key) && obj[key] !== NULL;\n  }\n\n  const map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has$1,\n\n    get(key) {\n      return has$1(key) ? obj[key] : undefined;\n    },\n\n    set(key, value) {\n      if (!has$1(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n\n      obj[key] = value;\n      return this;\n    },\n\n    delete(key) {\n      if (has$1(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n\n      return this;\n    },\n\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n\n    clean() {\n      const next = {};\n      let size = 0;\n\n      for (const key in obj) {\n        const value = obj[key];\n\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n\n      map.size = size;\n      map.empty = 0;\n      map.object = obj = next;\n    }\n\n  };\n  if (input) Object.keys(input).forEach(key => {\n    map.set(key, input[key]);\n  });\n  return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n  const t = +threshold;\n  let a = range[0],\n      b = peek(range),\n      l; // swap endpoints if range is reversed\n\n  if (b < a) {\n    l = a;\n    a = b;\n    b = l;\n  } // compare value to endpoints\n\n\n  l = Math.abs(value - a);\n  const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n  const proto = child.prototype = Object.create(parent.prototype);\n  proto.constructor = child;\n  return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n  let r0 = range[0],\n      r1 = range[range.length - 1],\n      t;\n\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n\n  left = left === undefined || left;\n  right = right === undefined || right;\n  return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n  return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n  return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n  return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n  return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n  if (fields) {\n    fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n\n  let fn;\n\n  if (!len) {\n    fn = function () {\n      return '';\n    };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n\n    fn = function (_) {\n      return '' + get(_);\n    };\n  } else {\n    const get = fields.map(map);\n\n    fn = function (_) {\n      let s = '' + get[0](_),\n          i = 0;\n\n      while (++i < len) s += '|' + get[i](_);\n\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n\n    return curr[key] = value;\n  };\n\n  clear();\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n    set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n  };\n}\n\nfunction merge (compare, array0, array1, output) {\n  const n0 = array0.length,\n        n1 = array1.length;\n  if (!n1) return array0;\n  if (!n0) return array1;\n  const merged = output || new array0.constructor(n0 + n1);\n  let i0 = 0,\n      i1 = 0,\n      i = 0;\n\n  for (; i0 < n0 && i1 < n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n\nfunction repeat (str, reps) {\n  let s = '';\n\n  while (--reps >= 0) s += str;\n\n  return s;\n}\n\nfunction pad (str, length, padchar, align) {\n  const c = padchar || ' ',\n        s = str + '',\n        n = length - s.length;\n  return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n  return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n  return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n  // See http://timelessrepo.com/json-isnt-a-javascript-subset\n  JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n  const s = {},\n        n = _.length;\n\n  for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n  return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n  const e = ellipsis != null ? ellipsis : '\\u2026',\n        s = str + '',\n        n = s.length,\n        l = Math.max(0, length - e.length);\n  return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      const n = array.length;\n\n      for (let i = 0; i < n; ++i) {\n        const t = filter(array[i]);\n        if (t) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import { extend, error, isFunction, stringValue, toBoolean, toNumber, toDate, toString, identity, field, isObject, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n//   https://...    file://...    //...\n\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//; // Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\n\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\n\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n// Special treatment in node.js for the file: protocol\n\nconst fileProtocol = 'file://';\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n *   If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n *   If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n *   param {object} [options] - Optional default loading options to use.\n *   return {object} - A new loader instance.\n */\n\nfunction loaderFactory (fetch, fs) {\n  return options => ({\n    options: options || {},\n    sanitize: sanitize,\n    load: load,\n    fileAccess: !!fs,\n    file: fileLoader(fs),\n    http: httpLoader(fetch)\n  });\n}\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n *   override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\n\nasync function load(uri, options) {\n  const opt = await this.sanitize(uri, options),\n        url = opt.href;\n  return opt.localFile ? this.file(url) : this.http(url, options);\n}\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n *  sanitized uri data, or rejects it the input uri is deemed invalid.\n *  The properties of the resolved object are assumed to be\n *  valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n *  provided by the 'href' property of the returned object.\n */\n\n\nasync function sanitize(uri, options) {\n  options = extend({}, this.options, options);\n  const fileAccess = this.fileAccess,\n        result = {\n    href: null\n  };\n  let isFile, loadFile, base;\n  const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n  if (uri == null || typeof uri !== 'string' || !isAllowed) {\n    error('Sanitize failure, invalid URI: ' + stringValue(uri));\n  }\n\n  const hasProtocol = protocol_re.test(uri); // if relative url (no protocol/host), prepend baseURL\n\n  if ((base = options.baseURL) && !hasProtocol) {\n    // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n    if (!uri.startsWith('/') && base[base.length - 1] !== '/') {\n      uri = '/' + uri;\n    }\n\n    uri = base + uri;\n  } // should we load from file system?\n\n\n  loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n  if (isFile) {\n    // strip file protocol\n    uri = uri.slice(fileProtocol.length);\n  } else if (uri.startsWith('//')) {\n    if (options.defaultProtocol === 'file') {\n      // if is file, strip protocol and set loadFile flag\n      uri = uri.slice(2);\n      loadFile = true;\n    } else {\n      // if relative protocol (starts with '//'), prepend default protocol\n      uri = (options.defaultProtocol || 'http') + ':' + uri;\n    }\n  } // set non-enumerable mode flag to indicate local file load\n\n\n  Object.defineProperty(result, 'localFile', {\n    value: !!loadFile\n  }); // set uri\n\n  result.href = uri; // set default result target, if specified\n\n  if (options.target) {\n    result.target = options.target + '';\n  } // set default result rel, if specified (#1542)\n\n\n  if (options.rel) {\n    result.rel = options.rel + '';\n  } // provide control over cross-origin image handling (#2238)\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n\n\n  if (options.context === 'image' && options.crossOrigin) {\n    result.crossOrigin = options.crossOrigin + '';\n  } // return\n\n\n  return result;\n}\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n *   param {string} filename - The file system path to load.\n *   param {string} filename - The file system path to load.\n *   return {Promise} A promise that resolves to the file contents.\n */\n\n\nfunction fileLoader(fs) {\n  return fs ? filename => new Promise((accept, reject) => {\n    fs.readFile(filename, (error, data) => {\n      if (error) reject(error);else accept(data);\n    });\n  }) : fileReject;\n}\n/**\n * Default file system loader that simply rejects.\n */\n\n\nasync function fileReject() {\n  error('No file system access.');\n}\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n *   param {string} url - The url to request.\n *   param {object} options - An options hash.\n *   return {Promise} - A promise that resolves to the file contents.\n */\n\n\nfunction httpLoader(fetch) {\n  return fetch ? async function (url, options) {\n    const opt = extend({}, this.options.http, options),\n          type = options && options.response,\n          response = await fetch(url, opt);\n    return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n  } : httpReject;\n}\n/**\n * Default http request handler that simply rejects.\n */\n\n\nasync function httpReject() {\n  error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nconst typeParsers = {\n  boolean: toBoolean,\n  integer: toNumber,\n  number: toNumber,\n  date: toDate,\n  string: toString,\n  unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n  if (!values || !values.length) return 'unknown';\n  const n = values.length,\n        m = typeTests.length,\n        a = typeTests.map((_, i) => i + 1);\n\n  for (let i = 0, t = 0, j, value; i < n; ++i) {\n    value = field ? values[i][field] : values[i];\n\n    for (j = 0; j < m; ++j) {\n      if (a[j] && isValid(value) && !typeTests[j](value)) {\n        a[j] = 0;\n        ++t;\n        if (t === typeTests.length) return 'string';\n      }\n    }\n  }\n\n  return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n  return fields.reduce((types, field) => {\n    types[field] = inferType(data, field);\n    return types;\n  }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n  const parse = function (data, format) {\n    const delim = {\n      delimiter: delimiter\n    };\n    return dsv(data, format ? extend(format, delim) : delim);\n  };\n\n  parse.responseType = 'text';\n  return parse;\n}\nfunction dsv(data, format) {\n  if (format.header) {\n    data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n  }\n\n  return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n  return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\n\nfunction json(data, format) {\n  const prop = format && format.property ? field(format.property) : identity;\n  return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n  return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n  interior: (a, b) => a !== b,\n  exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n  let method, object, property, filter;\n  data = json(data, format);\n\n  if (format && format.feature) {\n    method = feature;\n    property = format.feature;\n  } else if (format && format.mesh) {\n    method = mesh;\n    property = format.mesh;\n    filter = filters[format.filter];\n  } else {\n    error('Missing TopoJSON feature or mesh parameter.');\n  }\n\n  object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n  return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n  dsv: dsv,\n  csv: delimitedFormat(','),\n  tsv: delimitedFormat('\\t'),\n  json: json,\n  topojson: topojson\n};\nfunction formats(name, reader) {\n  if (arguments.length > 1) {\n    format[name] = reader;\n    return this;\n  } else {\n    return hasOwnProperty(format, name) ? format[name] : null;\n  }\n}\nfunction responseType(type) {\n  const f = formats(type);\n  return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n  schema = schema || {};\n  const reader = formats(schema.type || 'json');\n  if (!reader) error('Unknown data format type: ' + schema.type);\n  data = reader(data, schema);\n  if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n  if (hasOwnProperty(data, 'columns')) delete data.columns;\n  return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n  if (!data.length) return; // early exit for empty data\n\n  const locale = timeFormatDefaultLocale();\n  timeParser = timeParser || locale.timeParse;\n  utcParser = utcParser || locale.utcParse;\n  let fields = data.columns || Object.keys(data[0]),\n      datum,\n      field,\n      i,\n      j,\n      n,\n      m;\n  if (types === 'auto') types = inferTypes(data, fields);\n  fields = Object.keys(types);\n  const parsers = fields.map(field => {\n    const type = types[field];\n    let parts, pattern;\n\n    if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n      parts = type.split(/:(.+)?/, 2); // split on first :\n\n      pattern = parts[1];\n\n      if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n        pattern = pattern.slice(1, -1);\n      }\n\n      const parse = parts[0] === 'utc' ? utcParser : timeParser;\n      return parse(pattern);\n    }\n\n    if (!typeParsers[type]) {\n      throw Error('Illegal format pattern: ' + field + ':' + type);\n    }\n\n    return typeParsers[type];\n  });\n\n  for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n    datum = data[i];\n\n    for (j = 0; j < m; ++j) {\n      field = fields[j];\n      datum[field] = parsers[j](datum[field]);\n    }\n  }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch, // use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","var gradient_id = 0;\n\nexport function resetSVGGradientId() {\n  gradient_id = 0;\n}\n\nexport const patternPrefix = 'p_';\n\nexport function isGradient(value) {\n  return value && value.gradient;\n}\n\nexport function gradientRef(g, defs, base) {\n  let id = g.id,\n      type = g.gradient,\n      prefix = type === 'radial' ? patternPrefix : '';\n\n  // check id, assign default values as needed\n  if (!id) {\n    id = g.id = 'gradient_' + (gradient_id++);\n    if (type === 'radial') {\n      g.x1 = get(g.x1, 0.5);\n      g.y1 = get(g.y1, 0.5);\n      g.r1 = get(g.r1, 0);\n      g.x2 = get(g.x2, 0.5);\n      g.y2 = get(g.y2, 0.5);\n      g.r2 = get(g.r2, 0.5);\n      prefix = patternPrefix;\n    } else {\n      g.x1 = get(g.x1, 0);\n      g.y1 = get(g.y1, 0);\n      g.x2 = get(g.x2, 1);\n      g.y2 = get(g.y2, 0);\n    }\n  }\n\n  // register definition\n  defs[id] = g;\n\n  // return url reference\n  return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n  return val != null ? val : def;\n}\n\nexport default function(p0, p1) {\n  var stops = [], gradient;\n  return gradient = {\n    gradient: 'linear',\n    x1: p0 ? p0[0] : 0,\n    y1: p0 ? p0[1] : 0,\n    x2: p1 ? p1[0] : 1,\n    y2: p1 ? p1[1] : 0,\n    stops: stops,\n    stop: function(offset, color) {\n      stops.push({offset: offset, color: color});\n      return gradient;\n    }\n  };\n}\n","function accessor (fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\nfunction accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function (obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n\n    return obj;\n  };\n};\n\nfunction error (message) {\n  throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n  const path = [],\n        n = p.length;\n  let q = null,\n      b = 0,\n      s = '',\n      i,\n      j,\n      c;\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i = j = 0; j < n; ++j) {\n    c = p[j];\n\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n\nfunction field (field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log(method, level, input) {\n  const args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n  let level = _ || None;\n  return {\n    level(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n\n    error() {\n      if (level >= Error$1) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n\n    warn() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n\n    info() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n\n    debug() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n\n  };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n  return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (const key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        const r = key === 'legend' ? {\n          layout: 1\n        } : key === 'style' ? true : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n\n    return out;\n  }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n  let k, o;\n\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : output[key] = {};\n\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n  const map = {},\n        out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n\nfunction peek (array) {\n  return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n  return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log$1 = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        dd = (d1 - d0) * delta;\n  return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log$1(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n  return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n  const sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n  return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n  let lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n\n  span = hi - lo;\n  return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n  return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n  const ord = [],\n        get = [],\n        fmap = {},\n        gen = opt.comparator || comparator;\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n  return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n\n  return function (a, b) {\n    let f,\n        c = 0,\n        i = -1;\n\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = ascending(f(a), f(b));\n    }\n\n    return c * orders[i];\n  };\n};\n\nfunction constant (_) {\n  return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n  let tid;\n  return e => {\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(() => (handler(e), tid = null), delay);\n  };\n}\n\nfunction extend (_) {\n  for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n    x = arguments[i];\n\n    for (k in x) {\n      _[k] = x[k];\n    }\n  }\n\n  return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n  let i = 0,\n      n,\n      v,\n      min,\n      max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nfunction extentIndex (array, f) {\n  const n = array.length;\n  let i = -1,\n      a,\n      b,\n      c,\n      u,\n      v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n  return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n  let obj = {},\n      test;\n\n  function has$1(key) {\n    return has(obj, key) && obj[key] !== NULL;\n  }\n\n  const map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has$1,\n\n    get(key) {\n      return has$1(key) ? obj[key] : undefined;\n    },\n\n    set(key, value) {\n      if (!has$1(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n\n      obj[key] = value;\n      return this;\n    },\n\n    delete(key) {\n      if (has$1(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n\n      return this;\n    },\n\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n\n    clean() {\n      const next = {};\n      let size = 0;\n\n      for (const key in obj) {\n        const value = obj[key];\n\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n\n      map.size = size;\n      map.empty = 0;\n      map.object = obj = next;\n    }\n\n  };\n  if (input) Object.keys(input).forEach(key => {\n    map.set(key, input[key]);\n  });\n  return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n  const t = +threshold;\n  let a = range[0],\n      b = peek(range),\n      l; // swap endpoints if range is reversed\n\n  if (b < a) {\n    l = a;\n    a = b;\n    b = l;\n  } // compare value to endpoints\n\n\n  l = Math.abs(value - a);\n  const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n  const proto = child.prototype = Object.create(parent.prototype);\n  proto.constructor = child;\n  return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n  let r0 = range[0],\n      r1 = range[range.length - 1],\n      t;\n\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n\n  left = left === undefined || left;\n  right = right === undefined || right;\n  return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n  return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n  return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n  return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n  return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n  if (fields) {\n    fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n\n  let fn;\n\n  if (!len) {\n    fn = function () {\n      return '';\n    };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n\n    fn = function (_) {\n      return '' + get(_);\n    };\n  } else {\n    const get = fields.map(map);\n\n    fn = function (_) {\n      let s = '' + get[0](_),\n          i = 0;\n\n      while (++i < len) s += '|' + get[i](_);\n\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n\n    return curr[key] = value;\n  };\n\n  clear();\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n    set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n  };\n}\n\nfunction merge (compare, array0, array1, output) {\n  const n0 = array0.length,\n        n1 = array1.length;\n  if (!n1) return array0;\n  if (!n0) return array1;\n  const merged = output || new array0.constructor(n0 + n1);\n  let i0 = 0,\n      i1 = 0,\n      i = 0;\n\n  for (; i0 < n0 && i1 < n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n\nfunction repeat (str, reps) {\n  let s = '';\n\n  while (--reps >= 0) s += str;\n\n  return s;\n}\n\nfunction pad (str, length, padchar, align) {\n  const c = padchar || ' ',\n        s = str + '',\n        n = length - s.length;\n  return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n  return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n  return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n  // See http://timelessrepo.com/json-isnt-a-javascript-subset\n  JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n  const s = {},\n        n = _.length;\n\n  for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n  return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n  const e = ellipsis != null ? ellipsis : '\\u2026',\n        s = str + '',\n        n = s.length,\n        l = Math.max(0, length - e.length);\n  return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      const n = array.length;\n\n      for (let i = 0; i < n; ++i) {\n        const t = filter(array[i]);\n        if (t) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export {default as path} from \"./path.js\";\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x0 = pointX,\n      x1 = null,\n      y0 = constant(0),\n      y1 = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n  var a = area().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n","export default function(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","export var slice = Array.prototype.slice;\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n  return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n  return link(curveVertical);\n}\n\nexport function linkRadial() {\n  var l = link(curveRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","var tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nexport default {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n    kx = Math.sin(tau / 10) * kr,\n    ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","var c = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nexport default function() {\n  var type = constant(circle),\n      size = constant(64),\n      context = null;\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var kz = keys.apply(this, arguments),\n        i,\n        m = data.length,\n        n = kz.length,\n        sz = new Array(n),\n        oz;\n\n    for (i = 0; i < n; ++i) {\n      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n        si[j] = sij = [0, +value(data[j], ki, j, data)];\n        sij.data = data[j];\n      }\n      si.key = ki;\n    }\n\n    for (i = 0, oz = order(sz); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index.js\";\n\nexport {default as symbol, symbols} from \"./symbol.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n","import {hasOwnProperty} from 'vega-util';\n\nimport {\n  curveBasis,\n  curveBasisClosed,\n  curveBasisOpen,\n  curveBundle,\n  curveCardinal,\n  curveCardinalClosed,\n  curveCardinalOpen,\n  curveCatmullRom,\n  curveCatmullRomClosed,\n  curveCatmullRomOpen,\n  curveLinear,\n  curveLinearClosed,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore\n} from 'd3-shape';\n\nvar lookup = {\n  'basis': {\n    curve: curveBasis\n  },\n  'basis-closed': {\n    curve: curveBasisClosed\n  },\n  'basis-open': {\n    curve: curveBasisOpen\n  },\n  'bundle': {\n    curve: curveBundle,\n    tension: 'beta',\n    value: 0.85\n  },\n  'cardinal': {\n    curve: curveCardinal,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-open': {\n    curve: curveCardinalOpen,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-closed': {\n    curve: curveCardinalClosed,\n    tension: 'tension',\n    value: 0\n  },\n  'catmull-rom': {\n    curve: curveCatmullRom,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-closed': {\n    curve: curveCatmullRomClosed,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-open': {\n    curve: curveCatmullRomOpen,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'linear': {\n    curve: curveLinear\n  },\n  'linear-closed': {\n    curve: curveLinearClosed\n  },\n  'monotone': {\n    horizontal: curveMonotoneY,\n    vertical:   curveMonotoneX\n  },\n  'natural': {\n    curve: curveNatural\n  },\n  'step': {\n    curve: curveStep\n  },\n  'step-after': {\n    curve: curveStepAfter\n  },\n  'step-before': {\n    curve: curveStepBefore\n  }\n};\n\nexport default function curves(type, orientation, tension) {\n  var entry = hasOwnProperty(lookup, type) && lookup[type],\n      curve = null;\n\n  if (entry) {\n    curve = entry.curve || entry[orientation || 'vertical'];\n    if (entry.tension && tension != null) {\n      curve = curve[entry.tension](tension);\n    }\n  }\n\n  return curve;\n}\n","// Path parsing and rendering code adapted from fabric.js -- Thanks!\nvar cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },\n    regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\d)([-+])/g, /\\s|,|###/];\n\nexport default function(pathstr) {\n  var result = [],\n      path,\n      curr,\n      chunks,\n      parsed, param,\n      cmd, len, i, j, n, m;\n\n  // First, break path into command sequence\n  path = pathstr\n    .slice()\n    .replace(regexp[0], '###$1')\n    .split(regexp[1])\n    .slice(1);\n\n  // Next, parse each command in turn\n  for (i=0, n=path.length; i<n; ++i) {\n    curr = path[i];\n    chunks = curr\n      .slice(1)\n      .trim()\n      .replace(regexp[2],'$1###$2')\n      .split(regexp[3]);\n    cmd = curr.charAt(0);\n\n    parsed = [cmd];\n    for (j=0, m=chunks.length; j<m; ++j) {\n      if ((param = +chunks[j]) === param) { // not NaN\n        parsed.push(param);\n      }\n    }\n\n    len = cmdlen[cmd.toLowerCase()];\n    if (parsed.length-1 > len) {\n      for (j=1, m=parsed.length; j<m; j+=len) {\n        result.push([cmd].concat(parsed.slice(j, j+len)));\n      }\n    }\n    else {\n      result.push(parsed);\n    }\n  }\n\n  return result;\n}\n","export const DegToRad = Math.PI / 180;\nexport const Epsilon = 1e-14;\nexport const HalfPi = Math.PI / 2;\nexport const Tau = Math.PI * 2;\nexport const HalfSqrt3 = Math.sqrt(3) / 2;\n","import {DegToRad, HalfPi, Tau} from '../util/constants';\n\nexport var segmentCache = {};\nexport var bezierCache = {};\n\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nexport function segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n  var key = join.call(arguments);\n  if (segmentCache[key]) {\n    return segmentCache[key];\n  }\n\n  var th = rotateX * DegToRad;\n  var sin_th = Math.sin(th);\n  var cos_th = Math.cos(th);\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n  var px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n  var py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n  var pl = (px*px) / (rx*rx) + (py*py) / (ry*ry);\n  if (pl > 1) {\n    pl = Math.sqrt(pl);\n    rx *= pl;\n    ry *= pl;\n  }\n\n  var a00 = cos_th / rx;\n  var a01 = sin_th / rx;\n  var a10 = (-sin_th) / ry;\n  var a11 = (cos_th) / ry;\n  var x0 = a00 * ox + a01 * oy;\n  var y0 = a10 * ox + a11 * oy;\n  var x1 = a00 * x + a01 * y;\n  var y1 = a10 * x + a11 * y;\n\n  var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0);\n  var sfactor_sq = 1 / d - 0.25;\n  if (sfactor_sq < 0) sfactor_sq = 0;\n  var sfactor = Math.sqrt(sfactor_sq);\n  if (sweep == large) sfactor = -sfactor;\n  var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0);\n  var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0);\n\n  var th0 = Math.atan2(y0-yc, x0-xc);\n  var th1 = Math.atan2(y1-yc, x1-xc);\n\n  var th_arc = th1-th0;\n  if (th_arc < 0 && sweep === 1) {\n    th_arc += Tau;\n  } else if (th_arc > 0 && sweep === 0) {\n    th_arc -= Tau;\n  }\n\n  var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n  var result = [];\n  for (var i=0; i<segs; ++i) {\n    var th2 = th0 + i * th_arc / segs;\n    var th3 = th0 + (i+1) * th_arc / segs;\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n  }\n\n  return (segmentCache[key] = result);\n}\n\nexport function bezier(params) {\n  var key = join.call(params);\n  if (bezierCache[key]) {\n    return bezierCache[key];\n  }\n\n  var cx = params[0],\n      cy = params[1],\n      th0 = params[2],\n      th1 = params[3],\n      rx = params[4],\n      ry = params[5],\n      sin_th = params[6],\n      cos_th = params[7];\n\n  var a00 = cos_th * rx;\n  var a01 = -sin_th * ry;\n  var a10 = sin_th * rx;\n  var a11 = cos_th * ry;\n\n  var cos_th0 = Math.cos(th0);\n  var sin_th0 = Math.sin(th0);\n  var cos_th1 = Math.cos(th1);\n  var sin_th1 = Math.sin(th1);\n\n  var th_half = 0.5 * (th1 - th0);\n  var sin_th_h2 = Math.sin(th_half * 0.5);\n  var t = (8/3) * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n  var x1 = cx + cos_th0 - t * sin_th0;\n  var y1 = cy + sin_th0 + t * cos_th0;\n  var x3 = cx + cos_th1;\n  var y3 = cy + sin_th1;\n  var x2 = x3 + t * sin_th1;\n  var y2 = y3 - t * cos_th1;\n\n  return (bezierCache[key] = [\n    a00 * x1 + a01 * y1,  a10 * x1 + a11 * y1,\n    a00 * x2 + a01 * y2,  a10 * x2 + a11 * y2,\n    a00 * x3 + a01 * y3,  a10 * x3 + a11 * y3\n  ]);\n}\n","import {bezier, segments} from './arc';\n\nvar temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current, sX, sY) {\n  var c = (temp[0] = current[0]);\n  if (c === 'a' || c === 'A') {\n    temp[1] = sX * current[1];\n    temp[2] = sY * current[2];\n    temp[3] = current[3];\n    temp[4] = current[4];\n    temp[5] = current[5];\n    temp[6] = sX * current[6];\n    temp[7] = sY * current[7];\n  } else if (c === 'h' || c === 'H') {\n    temp[1] = sX * current[1];\n  } else if (c === 'v' || c === 'V') {\n    temp[1] = sY * current[1];\n  } else {\n    for (var i=1, n=current.length; i<n; ++i) {\n      temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n    }\n  }\n  return temp;\n}\n\nexport default function(context, path, l, t, sX, sY) {\n  var current, // current instruction\n      previous = null,\n      x = 0, // current x\n      y = 0, // current y\n      controlX = 0, // current control point x\n      controlY = 0, // current control point y\n      tempX,\n      tempY,\n      tempControlX,\n      tempControlY;\n\n  if (l == null) l = 0;\n  if (t == null) t = 0;\n  if (sX == null) sX = 1;\n  if (sY == null) sY = sX;\n\n  if (context.beginPath) context.beginPath();\n\n  for (var i=0, len=path.length; i<len; ++i) {\n    current = path[i];\n    if (sX !== 1 || sY !== 1) {\n      current = scale(current, sX, sY);\n    }\n\n    switch (current[0]) { // first letter\n\n      case 'l': // lineto, relative\n        x += current[1];\n        y += current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'L': // lineto, absolute\n        x = current[1];\n        y = current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'h': // horizontal lineto, relative\n        x += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'H': // horizontal lineto, absolute\n        x = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'v': // vertical lineto, relative\n        y += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'V': // verical lineto, absolute\n        y = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'm': // moveTo, relative\n        x += current[1];\n        y += current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'M': // moveTo, absolute\n        x = current[1];\n        y = current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'c': // bezierCurveTo, relative\n        tempX = x + current[5];\n        tempY = y + current[6];\n        controlX = x + current[3];\n        controlY = y + current[4];\n        context.bezierCurveTo(\n          x + current[1] + l, // x1\n          y + current[2] + t, // y1\n          controlX + l, // x2\n          controlY + t, // y2\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'C': // bezierCurveTo, absolute\n        x = current[5];\n        y = current[6];\n        controlX = current[3];\n        controlY = current[4];\n        context.bezierCurveTo(\n          current[1] + l,\n          current[2] + t,\n          controlX + l,\n          controlY + t,\n          x + l,\n          y + t\n        );\n        break;\n\n      case 's': // shorthand cubic bezierCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4];\n        // calculate reflection of previous control points\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.bezierCurveTo(\n          controlX + l,\n          controlY + t,\n          x + current[1] + l,\n          y + current[2] + t,\n          tempX + l,\n          tempY + t\n        );\n\n        // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n        controlX = x + current[1];\n        controlY = y + current[2];\n\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'S': // shorthand cubic bezierCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4];\n        // calculate reflection of previous control points\n        controlX = 2*x - controlX;\n        controlY = 2*y - controlY;\n        context.bezierCurveTo(\n          controlX + l,\n          controlY + t,\n          current[1] + l,\n          current[2] + t,\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n        controlX = current[1];\n        controlY = current[2];\n\n        break;\n\n      case 'q': // quadraticCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4];\n\n        controlX = x + current[1];\n        controlY = y + current[2];\n\n        context.quadraticCurveTo(\n          controlX + l,\n          controlY + t,\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'Q': // quadraticCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4];\n\n        context.quadraticCurveTo(\n          current[1] + l,\n          current[2] + t,\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        controlX = current[1];\n        controlY = current[2];\n        break;\n\n      case 't': // shorthand quadraticCurveTo, relative\n\n        // transform to absolute x,y\n        tempX = x + current[1];\n        tempY = y + current[2];\n\n        if (previous[0].match(/[QqTt]/) === null) {\n          // If there is no previous command or if the previous command was not a Q, q, T or t,\n          // assume the control point is coincident with the current point\n          controlX = x;\n          controlY = y;\n        }\n        else if (previous[0] === 't') {\n          // calculate reflection of previous control points for t\n          controlX = 2 * x - tempControlX;\n          controlY = 2 * y - tempControlY;\n        }\n        else if (previous[0] === 'q') {\n          // calculate reflection of previous control points for q\n          controlX = 2 * x - controlX;\n          controlY = 2 * y - controlY;\n        }\n\n        tempControlX = controlX;\n        tempControlY = controlY;\n\n        context.quadraticCurveTo(\n          controlX + l,\n          controlY + t,\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        controlX = x + current[1];\n        controlY = y + current[2];\n        break;\n\n      case 'T':\n        tempX = current[1];\n        tempY = current[2];\n\n        // calculate reflection of previous control points\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.quadraticCurveTo(\n          controlX + l,\n          controlY + t,\n          tempX + l,\n          tempY + t\n        );\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'a':\n        drawArc(context, x + l, y + t, [\n          current[1],\n          current[2],\n          current[3],\n          current[4],\n          current[5],\n          current[6] + x + l,\n          current[7] + y + t\n        ]);\n        x += current[6];\n        y += current[7];\n        break;\n\n      case 'A':\n        drawArc(context, x + l, y + t, [\n          current[1],\n          current[2],\n          current[3],\n          current[4],\n          current[5],\n          current[6] + l,\n          current[7] + t\n        ]);\n        x = current[6];\n        y = current[7];\n        break;\n\n      case 'z':\n      case 'Z':\n        context.closePath();\n        break;\n    }\n    previous = current;\n  }\n}\n\nfunction drawArc(context, x, y, coords) {\n  var seg = segments(\n    coords[5], // end x\n    coords[6], // end y\n    coords[0], // radius x\n    coords[1], // radius y\n    coords[3], // large flag\n    coords[4], // sweep flag\n    coords[2], // rotation\n    x, y\n  );\n  for (var i=0; i<seg.length; ++i) {\n    var bez = bezier(seg[i]);\n    context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n  }\n}\n","import pathParse from './parse';\nimport pathRender from './render';\nimport {HalfSqrt3, Tau} from '../util/constants';\nimport {hasOwnProperty} from 'vega-util';\n\nvar Tan30 = 0.5773502691896257;\n\nvar builtins = {\n  'circle': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2;\n      context.moveTo(r, 0);\n      context.arc(0, 0, r, 0, Tau);\n    }\n  },\n  'cross': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 2.5;\n      context.moveTo(-r, -s);\n      context.lineTo(-r, s);\n      context.lineTo(-s, s);\n      context.lineTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, s);\n      context.lineTo(r, s);\n      context.lineTo(r, -s);\n      context.lineTo(s, -s);\n      context.lineTo(s, -r);\n      context.lineTo(-s, -r);\n      context.lineTo(-s, -s);\n      context.closePath();\n    }\n  },\n  'diamond': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(0, -r);\n      context.lineTo(r, 0);\n      context.lineTo(0, r);\n      context.closePath();\n    }\n  },\n  'square': {\n    draw: function(context, size) {\n      var w = Math.sqrt(size),\n          x = -w / 2;\n      context.rect(x, x, w, w);\n    }\n  },\n  'arrow': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 7,\n          t = r / 2.5,\n          v = r / 8;\n      context.moveTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, -v);\n      context.lineTo(t, -v);\n      context.lineTo(0, -r);\n      context.lineTo(-t, -v);\n      context.lineTo(-s, -v);\n      context.closePath();\n    }\n  },\n  'wedge': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = (h - r * Tan30),\n          b = r / 4;\n      context.moveTo(0, -h - o);\n      context.lineTo(-b, h - o);\n      context.lineTo(b, h - o);\n      context.closePath();\n    }\n  },\n  'triangle': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = (h - r * Tan30);\n      context.moveTo(0, -h - o);\n      context.lineTo(-r, h - o);\n      context.lineTo(r, h - o);\n      context.closePath();\n    }\n  },\n  'triangle-up': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, -h);\n      context.lineTo(-r, h);\n      context.lineTo(r, h);\n      context.closePath();\n    }\n  },\n  'triangle-down': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, h);\n      context.lineTo(-r, -h);\n      context.lineTo(r, -h);\n      context.closePath();\n    }\n  },\n  'triangle-right': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(h, 0);\n      context.lineTo(-h, -r);\n      context.lineTo(-h, r);\n      context.closePath();\n    }\n  },\n  'triangle-left': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(-h, 0);\n      context.lineTo(h, -r);\n      context.lineTo(h, r);\n      context.closePath();\n    }\n  },\n  'stroke': {\n    draw: function(context, size) {\n      var r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(r, 0);\n    }\n  }\n};\n\nexport default function symbols(_) {\n  return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\n\nvar custom = {};\n\nfunction customSymbol(path) {\n  if (!hasOwnProperty(custom, path)) {\n    var parsed = pathParse(path);\n    custom[path] = {\n      draw: function(context, size) {\n        pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n      }\n    };\n  }\n  return custom[path];\n}\n","import {path} from 'd3-path';\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n  return d.x;\n}\n\nfunction rectangleY(d) {\n  return d.y;\n}\n\nfunction rectangleWidth(d) {\n  return d.width;\n}\n\nfunction rectangleHeight(d) {\n  return d.height;\n}\n\nfunction number(_) {\n  return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n  return Math.max(min, Math.min(value, max));\n}\n\nexport default function() {\n  var x = rectangleX,\n      y = rectangleY,\n      width = rectangleWidth,\n      height = rectangleHeight,\n      crTL = number(0),\n      crTR = crTL,\n      crBL = crTL,\n      crBR = crTL,\n      context = null;\n\n  function rectangle(_, x0, y0) {\n    var buffer,\n        x1 = x0 != null ? x0 : +x.call(this, _),\n        y1 = y0 != null ? y0 : +y.call(this, _),\n        w  = +width.call(this, _),\n        h  = +height.call(this, _),\n        s  = Math.min(w, h) / 2,\n        tl = clamp(+crTL.call(this, _), 0, s),\n        tr = clamp(+crTR.call(this, _), 0, s),\n        bl = clamp(+crBL.call(this, _), 0, s),\n        br = clamp(+crBR.call(this, _), 0, s);\n\n    if (!context) context = buffer = path();\n\n    if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n      context.rect(x1, y1, w, h);\n    } else {\n      var x2 = x1 + w,\n          y2 = y1 + h;\n      context.moveTo(x1 + tl, y1);\n      context.lineTo(x2 - tr, y1);\n      context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n      context.lineTo(x2, y2 - br);\n      context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n      context.lineTo(x1 + bl, y2);\n      context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n      context.lineTo(x1, y1 + tl);\n      context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n      context.closePath();\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  rectangle.x = function(_) {\n    if (arguments.length) {\n      x = number(_);\n      return rectangle;\n    } else {\n      return x;\n    }\n  };\n\n  rectangle.y = function(_) {\n    if (arguments.length) {\n      y = number(_);\n      return rectangle;\n    } else {\n      return y;\n    }\n  };\n\n  rectangle.width = function(_) {\n    if (arguments.length) {\n      width = number(_);\n      return rectangle;\n    } else {\n      return width;\n    }\n  };\n\n  rectangle.height = function(_) {\n    if (arguments.length) {\n      height = number(_);\n      return rectangle;\n    } else {\n      return height;\n    }\n  };\n\n  rectangle.cornerRadius = function(tl, tr, br, bl) {\n    if (arguments.length) {\n      crTL = number(tl);\n      crTR = tr != null ? number(tr) : crTL;\n      crBR = br != null ? number(br) : crTL;\n      crBL = bl != null ? number(bl) : crTR;\n      return rectangle;\n    } else {\n      return crTL;\n    }\n  };\n\n  rectangle.context = function(_) {\n    if (arguments.length) {\n      context = _ == null ? null : _;\n      return rectangle;\n    } else {\n      return context;\n    }\n  };\n\n  return rectangle;\n}\n","import {Tau} from '../util/constants';\nimport {path} from 'd3-path';\n\nexport default function() {\n  var x,\n      y,\n      size,\n      defined,\n      context = null,\n      ready, x1, y1, r1;\n\n  function point(x2, y2, w2) {\n    var r2 = w2 / 2;\n\n    if (ready) {\n      var ux = y1 - y2,\n          uy = x2 - x1;\n\n      if (ux || uy) {\n        // get normal vector\n        var ud = Math.sqrt(ux * ux + uy * uy),\n            rx = (ux /= ud) * r1,\n            ry = (uy /= ud) * r1,\n            t = Math.atan2(uy, ux);\n\n        // draw segment\n        context.moveTo(x1 - rx, y1 - ry);\n        context.lineTo(x2 - ux * r2, y2 - uy * r2);\n        context.arc(x2, y2, r2, t - Math.PI, t);\n        context.lineTo(x1 + rx, y1 + ry);\n        context.arc(x1, y1, r1, t, t + Math.PI);\n      } else {\n        context.arc(x2, y2, r2, 0, Tau);\n      }\n      context.closePath();\n    } else {\n      ready = 1;\n    }\n    x1 = x2;\n    y1 = y2;\n    r1 = r2;\n  }\n\n  function trail(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) context = buffer = path();\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) ready = 0;\n      }\n      if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  trail.x = function(_) {\n    if (arguments.length) {\n      x = _;\n      return trail;\n    } else {\n      return x;\n    }\n  };\n\n  trail.y = function(_) {\n    if (arguments.length) {\n      y = _;\n      return trail;\n    } else {\n      return y;\n    }\n  };\n\n  trail.size = function(_) {\n    if (arguments.length) {\n      size = _;\n      return trail;\n    } else {\n      return size;\n    }\n  };\n\n  trail.defined = function(_) {\n    if (arguments.length) {\n      defined = _;\n      return trail;\n    } else {\n      return defined;\n    }\n  };\n\n  trail.context = function(_) {\n    if (arguments.length) {\n      if (_ == null) {\n        context = null;\n      } else {\n        context = _;\n      }\n      return trail;\n    } else {\n      return context;\n    }\n  };\n\n  return trail;\n}\n","import curves from './curves';\nimport symbols from './symbols';\n\nimport {default as vg_rect} from './rectangle';\nimport {default as vg_trail} from './trail';\n\nimport {\n  arc as d3_arc,\n  area as d3_area,\n  line as d3_line,\n  symbol as d3_symbol\n} from 'd3-shape';\n\nfunction value(a, b) {\n  return a != null ? a : b;\n}\n\nconst x =  item => item.x || 0,\n      y =  item => item.y || 0,\n      w =  item => item.width || 0,\n      h =  item => item.height || 0,\n      xw = item => (item.x || 0) + (item.width || 0),\n      yh = item => (item.y || 0) + (item.height || 0),\n      sa = item => item.startAngle || 0,\n      ea = item => item.endAngle || 0,\n      pa = item => item.padAngle || 0,\n      ir = item => item.innerRadius || 0,\n      or = item => item.outerRadius || 0,\n      cr = item => item.cornerRadius || 0,\n      tl = item => value(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n      tr = item => value(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n      br = item => value(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n      bl = item => value(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n      sz = item => value(item.size, 64),\n      ts = item => item.size || 1,\n      def = item => !(item.defined === false),\n      type = item => symbols(item.shape || 'circle');\n\nconst arcShape    = d3_arc().startAngle(sa).endAngle(ea).padAngle(pa)\n                      .innerRadius(ir).outerRadius(or).cornerRadius(cr),\n      areavShape  = d3_area().x(x).y1(y).y0(yh).defined(def),\n      areahShape  = d3_area().y(y).x1(x).x0(xw).defined(def),\n      lineShape   = d3_line().x(x).y(y).defined(def),\n      rectShape   = vg_rect().x(x).y(y).width(w).height(h)\n                      .cornerRadius(tl, tr, br, bl),\n      symbolShape = d3_symbol().type(type).size(sz),\n      trailShape  = vg_trail().x(x).y(y).defined(def).size(ts);\n\nexport function hasCornerRadius(item) {\n  return item.cornerRadius\n    || item.cornerRadiusTopLeft\n    || item.cornerRadiusTopRight\n    || item.cornerRadiusBottomRight\n    || item.cornerRadiusBottomLeft;\n}\n\nexport function arc(context, item) {\n  return arcShape.context(context)(item);\n}\n\nexport function area(context, items) {\n  var item = items[0],\n      interp = item.interpolate || 'linear';\n  return (item.orient === 'horizontal' ? areahShape : areavShape)\n    .curve(curves(interp, item.orient, item.tension))\n    .context(context)(items);\n}\n\nexport function line(context, items) {\n  var item = items[0],\n      interp = item.interpolate || 'linear';\n  return lineShape.curve(curves(interp, item.orient, item.tension))\n    .context(context)(items);\n}\n\nexport function rectangle(context, item, x, y) {\n  return rectShape.context(context)(item, x, y);\n}\n\nexport function shape(context, item) {\n  return (item.mark.shape || item.shape)\n    .context(context)(item);\n}\n\nexport function symbol(context, item) {\n  return symbolShape.context(context)(item);\n}\n\nexport function trail(context, items) {\n  return trailShape.context(context)(items);\n}\n","import {hasCornerRadius, rectangle} from '../../path/shapes';\nimport {isFunction} from 'vega-util';\n\nvar clip_id = 1;\n\nexport function resetSVGClipId() {\n  clip_id = 1;\n}\n\nexport default function(renderer, item, size) {\n  var clip = item.clip,\n      defs = renderer._defs,\n      id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n      c = defs.clipping[id] || (defs.clipping[id] = {id: id});\n\n  if (isFunction(clip)) {\n    c.path = clip(null);\n  } else if (hasCornerRadius(size)) {\n    c.path = rectangle(null, size, 0, 0);\n  } else {\n    c.width = size.width || 0;\n    c.height = size.height || 0;\n  }\n\n  return 'url(#' + id + ')';\n}\n","export default function Bounds(b) {\n  this.clear();\n  if (b) this.union(b);\n}\n\nvar prototype = Bounds.prototype;\n\nprototype.clone = function() {\n  return new Bounds(this);\n};\n\nprototype.clear = function() {\n  this.x1 = +Number.MAX_VALUE;\n  this.y1 = +Number.MAX_VALUE;\n  this.x2 = -Number.MAX_VALUE;\n  this.y2 = -Number.MAX_VALUE;\n  return this;\n};\n\nprototype.empty = function() {\n  return (\n    this.x1 === +Number.MAX_VALUE &&\n    this.y1 === +Number.MAX_VALUE &&\n    this.x2 === -Number.MAX_VALUE &&\n    this.y2 === -Number.MAX_VALUE\n  );\n};\n\nprototype.equals = function(b) {\n  return (\n    this.x1 === b.x1 &&\n    this.y1 === b.y1 &&\n    this.x2 === b.x2 &&\n    this.y2 === b.y2\n  );\n};\n\nprototype.set = function(x1, y1, x2, y2) {\n  if (x2 < x1) {\n    this.x2 = x1;\n    this.x1 = x2;\n  } else {\n    this.x1 = x1;\n    this.x2 = x2;\n  }\n  if (y2 < y1) {\n    this.y2 = y1;\n    this.y1 = y2;\n  } else {\n    this.y1 = y1;\n    this.y2 = y2;\n  }\n  return this;\n};\n\nprototype.add = function(x, y) {\n  if (x < this.x1) this.x1 = x;\n  if (y < this.y1) this.y1 = y;\n  if (x > this.x2) this.x2 = x;\n  if (y > this.y2) this.y2 = y;\n  return this;\n};\n\nprototype.expand = function(d) {\n  this.x1 -= d;\n  this.y1 -= d;\n  this.x2 += d;\n  this.y2 += d;\n  return this;\n};\n\nprototype.round = function() {\n  this.x1 = Math.floor(this.x1);\n  this.y1 = Math.floor(this.y1);\n  this.x2 = Math.ceil(this.x2);\n  this.y2 = Math.ceil(this.y2);\n  return this;\n};\n\nprototype.scale = function(s) {\n  this.x1 *= s;\n  this.y1 *= s;\n  this.x2 *= s;\n  this.y2 *= s;\n  return this;\n};\n\nprototype.translate = function(dx, dy) {\n  this.x1 += dx;\n  this.x2 += dx;\n  this.y1 += dy;\n  this.y2 += dy;\n  return this;\n};\n\nprototype.rotate = function(angle, x, y) {\n  const p = this.rotatedPoints(angle, x, y);\n  return this.clear()\n    .add(p[0], p[1])\n    .add(p[2], p[3])\n    .add(p[4], p[5])\n    .add(p[6], p[7]);\n};\n\nprototype.rotatedPoints = function(angle, x, y) {\n  var {x1, y1, x2, y2} = this,\n      cos = Math.cos(angle),\n      sin = Math.sin(angle),\n      cx = x - x*cos + y*sin,\n      cy = y - x*sin - y*cos;\n\n  return [\n    cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy,\n    cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy,\n    cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy,\n    cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy\n  ];\n};\n\nprototype.union = function(b) {\n  if (b.x1 < this.x1) this.x1 = b.x1;\n  if (b.y1 < this.y1) this.y1 = b.y1;\n  if (b.x2 > this.x2) this.x2 = b.x2;\n  if (b.y2 > this.y2) this.y2 = b.y2;\n  return this;\n};\n\nprototype.intersect = function(b) {\n  if (b.x1 > this.x1) this.x1 = b.x1;\n  if (b.y1 > this.y1) this.y1 = b.y1;\n  if (b.x2 < this.x2) this.x2 = b.x2;\n  if (b.y2 < this.y2) this.y2 = b.y2;\n  return this;\n};\n\nprototype.encloses = function(b) {\n  return b && (\n    this.x1 <= b.x1 &&\n    this.x2 >= b.x2 &&\n    this.y1 <= b.y1 &&\n    this.y2 >= b.y2\n  );\n};\n\nprototype.alignsWith = function(b) {\n  return b && (\n    this.x1 == b.x1 ||\n    this.x2 == b.x2 ||\n    this.y1 == b.y1 ||\n    this.y2 == b.y2\n  );\n};\n\nprototype.intersects = function(b) {\n  return b && !(\n    this.x2 < b.x1 ||\n    this.x1 > b.x2 ||\n    this.y2 < b.y1 ||\n    this.y1 > b.y2\n  );\n};\n\nprototype.contains = function(x, y) {\n  return !(\n    x < this.x1 ||\n    x > this.x2 ||\n    y < this.y1 ||\n    y > this.y2\n  );\n};\n\nprototype.width = function() {\n  return this.x2 - this.x1;\n};\n\nprototype.height = function() {\n  return this.y2 - this.y1;\n};\n","import Bounds from './Bounds';\n\nexport default function Item(mark) {\n  this.mark = mark;\n  this.bounds = (this.bounds || new Bounds());\n}\n","import Item from './Item';\nimport {inherits} from 'vega-util';\n\nexport default function GroupItem(mark) {\n  Item.call(this, mark);\n  this.items = (this.items || []);\n}\n\ninherits(GroupItem, Item);\n","import {error, extend, isFunction, stringValue} from 'vega-util';\n\n// Matches absolute URLs with optional protocol\n//   https://...    file://...    //...\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n *   If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n *   If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n *   param {object} [options] - Optional default loading options to use.\n *   return {object} - A new loader instance.\n */\nexport default function(fetch, fs) {\n  return options => ({\n    options: options || {},\n    sanitize: sanitize,\n    load: load,\n    fileAccess: !!fs,\n    file: fileLoader(fs),\n    http: httpLoader(fetch)\n  });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n *   override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n  const opt = await this.sanitize(uri, options),\n        url = opt.href;\n\n  return opt.localFile\n    ? this.file(url)\n    : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n *  sanitized uri data, or rejects it the input uri is deemed invalid.\n *  The properties of the resolved object are assumed to be\n *  valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n *  provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n  options = extend({}, this.options, options);\n\n  const fileAccess = this.fileAccess,\n        result = {href: null};\n\n  let isFile, loadFile, base;\n\n  const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n  if (uri == null || typeof uri !== 'string' || !isAllowed) {\n    error('Sanitize failure, invalid URI: ' + stringValue(uri));\n  }\n\n  const hasProtocol = protocol_re.test(uri);\n\n  // if relative url (no protocol/host), prepend baseURL\n  if ((base = options.baseURL) && !hasProtocol) {\n    // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n    if (!uri.startsWith('/') && base[base.length-1] !== '/') {\n      uri = '/' + uri;\n    }\n    uri = base + uri;\n  }\n\n  // should we load from file system?\n  loadFile = (isFile = uri.startsWith(fileProtocol))\n    || options.mode === 'file'\n    || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n  if (isFile) {\n    // strip file protocol\n    uri = uri.slice(fileProtocol.length);\n  } else if (uri.startsWith('//')) {\n    if (options.defaultProtocol === 'file') {\n      // if is file, strip protocol and set loadFile flag\n      uri = uri.slice(2);\n      loadFile = true;\n    } else {\n      // if relative protocol (starts with '//'), prepend default protocol\n      uri = (options.defaultProtocol || 'http') + ':' + uri;\n    }\n  }\n\n  // set non-enumerable mode flag to indicate local file load\n  Object.defineProperty(result, 'localFile', {value: !!loadFile});\n\n  // set uri\n  result.href = uri;\n\n  // set default result target, if specified\n  if (options.target) {\n    result.target = options.target + '';\n  }\n\n  // set default result rel, if specified (#1542)\n  if (options.rel) {\n    result.rel = options.rel + '';\n  }\n\n  // provide control over cross-origin image handling (#2238)\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n  if (options.context === 'image' && options.crossOrigin) {\n    result.crossOrigin = options.crossOrigin + '';\n  }\n\n  // return\n  return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n *   param {string} filename - The file system path to load.\n *   param {string} filename - The file system path to load.\n *   return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n  return fs\n    ? filename => new Promise((accept, reject) => {\n        fs.readFile(filename, (error, data) => {\n          if (error) reject(error);\n          else accept(data);\n        });\n      })\n    : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n  error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n *   param {string} url - The url to request.\n *   param {object} options - An options hash.\n *   return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n  return fetch\n    ? async function(url, options) {\n        const opt = extend({}, this.options.http, options),\n              type = options && options.response,\n              response = await fetch(url, opt);\n\n        return !response.ok\n          ? error(response.status + '' + response.statusText)\n          : isFunction(response[type]) ? response[type]()\n          : response.text();\n      }\n    : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n  error('No HTTP fetch method available.');\n}\n","import {identity, toBoolean, toDate, toNumber, toString} from 'vega-util';\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true'\n  || _ === 'false'\n  || _ === true\n  || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nexport const typeParsers = {\n  boolean: toBoolean,\n  integer: toNumber,\n  number:  toNumber,\n  date:    toDate,\n  string:  toString,\n  unknown: identity\n};\n\nconst typeTests = [\n  isBoolean,\n  isInteger,\n  isNumber,\n  isDate\n];\n\nconst typeList = [\n  'boolean',\n  'integer',\n  'number',\n  'date'\n];\n\nexport function inferType(values, field) {\n  if (!values || !values.length) return 'unknown';\n\n  const n = values.length,\n        m = typeTests.length,\n        a = typeTests.map((_, i) => i + 1);\n\n  for (let i = 0, t = 0, j, value; i < n; ++i) {\n    value = field ? values[i][field] : values[i];\n    for (j = 0; j < m; ++j) {\n      if (a[j] && isValid(value) && !typeTests[j](value)) {\n        a[j] = 0;\n        ++t;\n        if (t === typeTests.length) return 'string';\n      }\n    }\n  }\n\n  return typeList[\n    a.reduce((u, v) => u === 0 ? v : u, 0) - 1\n  ];\n}\n\nexport function inferTypes(data, fields) {\n  return fields.reduce((types, field) => {\n    types[field] = inferType(data, field);\n    return types;\n  }, {});\n}\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n  const parse = function(data, format) {\n    const delim = {delimiter: delimiter};\n    return dsv(data, format ? extend(format, delim) : delim);\n  };\n\n  parse.responseType = 'text';\n\n  return parse;\n}\n\nexport default function dsv(data, format) {\n  if (format.header) {\n    data = format.header\n      .map(stringValue)\n      .join(format.delimiter) + '\\n' + data;\n  }\n  return dsvFormat(format.delimiter).parse(data + '');\n}\n\ndsv.responseType = 'text';\n","import {\n  field, identity, isArray, isFunction, isIterable, isObject\n} from 'vega-util';\n\nfunction isBuffer(_) {\n  return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n    ? Buffer.isBuffer(_) : false;\n}\n\nexport default function json(data, format) {\n  const prop = (format && format.property) ? field(format.property) : identity;\n  return isObject(data) && !isBuffer(data)\n    ? parseJSON(prop(data), format)\n    : prop(JSON.parse(data));\n}\n\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n  if (!isArray(data) && isIterable(data)) {\n    data = [...data];\n  }\n  return (format && format.copy)\n    ? JSON.parse(JSON.stringify(data))\n    : data;\n}\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nconst filters = {\n  interior: (a, b) => a !== b,\n  exterior: (a, b) => a === b\n};\n\nexport default function topojson(data, format) {\n  let method, object, property, filter;\n  data = json(data, format);\n\n  if (format && format.feature) {\n    method = feature;\n    property = format.feature;\n  } else if (format && format.mesh) {\n    method = mesh;\n    property = format.mesh;\n    filter = filters[format.filter];\n  } else {\n    error('Missing TopoJSON feature or mesh parameter.');\n  }\n\n  object = (object = data.objects[property])\n    ? method(data, object, filter)\n    : error('Invalid TopoJSON object: ' + property);\n\n  return object && object.features || [object];\n}\n\ntopojson.responseType = 'json';\n","import {delimitedFormat, default as dsv} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\nimport {hasOwnProperty} from 'vega-util';\n\nexport const format = {\n  dsv: dsv,\n  csv: delimitedFormat(','),\n  tsv: delimitedFormat('\\t'),\n  json: json,\n  topojson: topojson\n};\n\nexport function formats(name, reader) {\n  if (arguments.length > 1) {\n    format[name] = reader;\n    return this;\n  } else {\n    return hasOwnProperty(format, name) ? format[name] : null;\n  }\n}\n\nexport function responseType(type) {\n  const f = formats(type);\n  return f && f.responseType || 'text';\n}\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {timeFormatDefaultLocale} from 'vega-format';\nimport {error, hasOwnProperty} from 'vega-util';\n\nexport default function(data, schema, timeParser, utcParser) {\n  schema = schema || {};\n\n  const reader = formats(schema.type || 'json');\n  if (!reader) error('Unknown data format type: ' + schema.type);\n\n  data = reader(data, schema);\n  if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n\n  if (hasOwnProperty(data, 'columns')) delete data.columns;\n  return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n  if (!data.length) return; // early exit for empty data\n\n  const locale = timeFormatDefaultLocale();\n  timeParser = timeParser || locale.timeParse;\n  utcParser = utcParser || locale.utcParse;\n\n  let fields = data.columns || Object.keys(data[0]),\n      datum, field, i, j, n, m;\n\n  if (types === 'auto') types = inferTypes(data, fields);\n\n  fields = Object.keys(types);\n  const parsers = fields.map(field => {\n    const type = types[field];\n    let parts, pattern;\n\n    if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n      parts = type.split(/:(.+)?/, 2);  // split on first :\n      pattern = parts[1];\n\n      if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n          (pattern[0] === '\"'  && pattern[pattern.length-1] === '\"')) {\n        pattern = pattern.slice(1, -1);\n      }\n\n      const parse = parts[0] === 'utc' ? utcParser : timeParser;\n      return parse(pattern);\n    }\n\n    if (!typeParsers[type]) {\n      throw Error('Illegal format pattern: ' + field + ':' + type);\n    }\n\n    return typeParsers[type];\n  });\n\n  for (i=0, n=data.length, m=fields.length; i<n; ++i) {\n    datum = data[i];\n    for (j=0; j<m; ++j) {\n      field = fields[j];\n      datum[field] = parsers[j](datum[field]);\n    }\n  }\n}\n","import loaderFactory from './src/loader';\n\nexport const loader = loaderFactory(\n  typeof fetch !== 'undefined' && fetch, // use built-in fetch API\n  null // no file system access\n);\n\nexport {\n  default as read\n} from './src/read';\n\nexport {\n  inferType,\n  inferTypes,\n  typeParsers\n} from './src/type';\n\nexport {\n  format,\n  formats,\n  responseType\n} from './src/formats/index';\n","import {image} from 'vega-canvas';\nimport {loader} from 'vega-loader';\nimport {hasOwnProperty} from 'vega-util';\n\nexport default function ResourceLoader(customLoader) {\n  this._pending = 0;\n  this._loader = customLoader || loader();\n}\n\nvar prototype = ResourceLoader.prototype;\n\nprototype.pending = function() {\n  return this._pending;\n};\n\nfunction increment(loader) {\n  loader._pending += 1;\n}\n\nfunction decrement(loader) {\n  loader._pending -= 1;\n}\n\nprototype.sanitizeURL = function(uri) {\n  var loader = this;\n  increment(loader);\n\n  return loader._loader.sanitize(uri, {context:'href'})\n    .then(function(opt) {\n      decrement(loader);\n      return opt;\n    })\n    .catch(function() {\n      decrement(loader);\n      return null;\n    });\n};\n\nprototype.loadImage = function(uri) {\n  const loader = this,\n        Image = image();\n  increment(loader);\n\n  return loader._loader\n    .sanitize(uri, {context: 'image'})\n    .then(function(opt) {\n      const url = opt.href;\n      if (!url || !Image) throw {url: url};\n\n      const img = new Image();\n\n      // set crossOrigin only if cors is defined; empty string sets anonymous mode\n      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n      const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n      if (cors != null) img.crossOrigin = cors;\n\n      // attempt to load image resource\n      img.onload = () => decrement(loader);\n      img.onerror = () => decrement(loader);\n      img.src = url;\n\n      return img;\n    })\n    .catch(function(e) {\n      decrement(loader);\n      return {complete: false, width: 0, height: 0, src: e && e.url || ''};\n    });\n};\n\nprototype.ready = function() {\n  var loader = this;\n  return new Promise(function(accept) {\n    function poll(value) {\n      if (!loader.pending()) accept(value);\n      else setTimeout(function() { poll(true); }, 10);\n    }\n    poll(false);\n  });\n};\n","export default function(bounds, item, miter) {\n  if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n    const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n    bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n  }\n  return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n  // TODO: more sophisticated adjustment? Or miter support in boundContext?\n  return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n","import {Epsilon, HalfPi, Tau} from '../util/constants';\n\nvar bounds, lx, ly,\n    circleThreshold = Tau - 1e-8;\n\nexport default function context(_) {\n  bounds = _;\n  return context;\n}\n\nfunction noop() {}\n\nfunction add(x, y) { bounds.add(x, y); }\n\nfunction addL(x, y) { add(lx = x, ly = y); }\n\nfunction addX(x) { add(x, bounds.y1); }\n\nfunction addY(y) { add(bounds.x1, y); }\n\ncontext.beginPath = noop;\n\ncontext.closePath = noop;\n\ncontext.moveTo = addL;\n\ncontext.lineTo = addL;\n\ncontext.rect = function(x, y, w, h) {\n  add(x + w, y + h);\n  addL(x, y);\n};\n\ncontext.quadraticCurveTo = function(x1, y1, x2, y2) {\n  quadExtrema(lx, x1, x2, addX);\n  quadExtrema(ly, y1, y2, addY);\n  addL(x2, y2);\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n  const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n  if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\ncontext.bezierCurveTo = function(x1, y1, x2, y2, x3, y3) {\n  cubicExtrema(lx, x1, x2, x3, addX);\n  cubicExtrema(ly, y1, y2, y3, addY);\n  addL(x3, y3);\n};\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n  const a = x3 - x0 + 3 * x1 - 3 * x2,\n        b = x0 + x2 - 2 * x1,\n        c = x0 - x1;\n\n  let t0 = 0, t1 = 0, r;\n\n  // solve for parameter t\n  if (Math.abs(a) > Epsilon) {\n    // quadratic equation\n    r = b * b + c * a;\n    if (r >= 0) {\n      r = Math.sqrt(r);\n      t0 = (-b + r) / a;\n      t1 = (-b - r) / a;\n    }\n  } else {\n    // linear equation\n    t0 = 0.5 * c / b;\n  }\n\n  // calculate position\n  if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n  if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n  const s = 1 - t, s2 = s * s, t2 = t * t;\n  return (s2 * s * x0) + (3 * s2 * t * x1) + (3 * s * t2 * x2) + (t2 * t * x3);\n}\n\ncontext.arc = function(cx, cy, r, sa, ea, ccw) {\n  // store last point on path\n  lx = r * Math.cos(ea) + cx;\n  ly = r * Math.sin(ea) + cy;\n\n  if (Math.abs(ea - sa) > circleThreshold) {\n    // treat as full circle\n    add(cx - r, cy - r);\n    add(cx + r, cy + r);\n  } else {\n    const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n    let s, i;\n\n    // sample end points\n    update(sa);\n    update(ea);\n\n    // sample interior points aligned with 90 degrees\n    if (ea !== sa) {\n      sa = sa % Tau; if (sa < 0) sa += Tau;\n      ea = ea % Tau; if (ea < 0) ea += Tau;\n\n      if (ea < sa) {\n        ccw = !ccw; // flip direction\n        s = sa; sa = ea; ea = s; // swap end-points\n      }\n\n      if (ccw) {\n        ea -= Tau;\n        s = sa - (sa % HalfPi);\n        for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s);\n      } else {\n        s = sa - (sa % HalfPi) + HalfPi;\n        for (i=0; i<4 && s<ea; ++i, s=s+HalfPi) update(s);\n      }\n    }\n  }\n};\n","import {canvas} from 'vega-canvas';\n\nexport var context = (context = canvas(1,1))\n  ? context.getContext('2d')\n  : null;\n","import {context} from './canvas/context';\nimport Bounds from '../Bounds';\n\nconst b = new Bounds();\n\nexport function intersectPath(draw) {\n  return function(item, brush) {\n    // rely on (inaccurate) bounds intersection if no context\n    if (!context) return true;\n\n    // add path to offscreen graphics context\n    draw(context, item);\n\n    // get bounds intersection region\n    b.clear().union(item.bounds).intersect(brush).round();\n    const {x1, y1, x2, y2} = b;\n\n    // iterate over intersection region\n    // perform fine grained inclusion test\n    for (let y = y1; y <= y2; ++y) {\n      for (let x = x1; x <= x2; ++x) {\n        if (context.isPointInPath(x, y)) {\n          return true;\n        }\n      }\n    }\n\n    // false if no hits in intersection region\n    return false;\n  };\n}\n\nexport function intersectPoint(item, box) {\n  return box.contains(item.x || 0, item.y || 0);\n}\n\nexport function intersectRect(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        w = item.width || 0,\n        h = item.height || 0;\n  return box.intersects(b.set(x, y, x + w, y + h));\n}\n\nexport function intersectRule(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        x2 = item.x2 != null ? item.x2 : x,\n        y2 = item.y2 != null ? item.y2 : y;\n  return intersectBoxLine(box, x, y, x2, y2);\n}\n\nexport function intersectBoxLine(box, x, y, u, v) {\n  const {x1, y1, x2, y2} = box,\n        dx = u - x,\n        dy = v - y;\n\n  let t0 = 0, t1 = 1, p, q, r, e;\n\n  for (e=0; e<4; ++e) {\n    if (e === 0) { p = -dx; q = -(x1 - x); }\n    if (e === 1) { p =  dx; q =  (x2 - x); }\n    if (e === 2) { p = -dy; q = -(y1 - y); }\n    if (e === 3) { p =  dy; q =  (y2 - y); }\n\n    if (Math.abs(p) < 1e-10 && q < 0) return false;\n\n    r = q / p;\n\n    if (p < 0) {\n      if (r > t1) return false;\n      else if (r > t0) t0 = r;\n    } else if (p > 0) {\n      if (r < t0) return false;\n      else if (r < t1) t1 = r;\n    }\n  }\n\n  return true;\n}\n","export default function(context, item) {\n  context.globalCompositeOperation = item.blend || 'source-over';\n}\n","export default function(value, dflt) {\n  return value == null ? dflt : value;\n}\n","import value from '../value';\nimport {canvas} from 'vega-canvas';\n\nfunction addStops(gradient, stops) {\n  const n = stops.length;\n  for (let i=0; i<n; ++i) {\n    gradient.addColorStop(stops[i].offset, stops[i].color);\n  }\n  return gradient;\n}\n\nexport default function(context, spec, bounds) {\n  const w = bounds.width(),\n        h = bounds.height();\n  let gradient;\n\n\n  if (spec.gradient === 'radial') {\n    gradient = context.createRadialGradient(\n      bounds.x1 + value(spec.x1, 0.5) * w,\n      bounds.y1 + value(spec.y1, 0.5) * h,\n      Math.max(w, h) * value(spec.r1, 0),\n      bounds.x1 + value(spec.x2, 0.5) * w,\n      bounds.y1 + value(spec.y2, 0.5) * h,\n      Math.max(w, h) * value(spec.r2, 0.5)\n    );\n  } else { // linear gradient\n    const x1 = value(spec.x1, 0),\n          y1 = value(spec.y1, 0),\n          x2 = value(spec.x2, 1),\n          y2 = value(spec.y2, 0);\n\n    if (x1 === x2 || y1 === y2 || w === h) {\n      // axis aligned: use normal gradient\n      gradient = context.createLinearGradient(\n        bounds.x1 + x1 * w,\n        bounds.y1 + y1 * h,\n        bounds.x1 + x2 * w,\n        bounds.y1 + y2 * h\n      );\n    } else {\n      // not axis aligned: render gradient into a pattern (#2365)\n      // this allows us to use normalized bounding box coordinates\n      const image = canvas(Math.ceil(w), Math.ceil(h)),\n            ictx = image.getContext('2d');\n\n      ictx.scale(w, h);\n      ictx.fillStyle = addStops(\n        ictx.createLinearGradient(x1, y1, x2, y2),\n        spec.stops\n      );\n      ictx.fillRect(0, 0, w, h);\n\n      return context.createPattern(image, 'no-repeat');\n    }\n  }\n\n  return addStops(gradient, spec.stops);\n}\n","import {isGradient} from '../../Gradient';\nimport gradient from './gradient';\n\nexport default function(context, item, value) {\n  return isGradient(value)\n    ? gradient(context, value, item.bounds)\n    : value;\n}\n","import color from './color';\n\nexport default function(context, item, opacity) {\n  opacity *= (item.fillOpacity==null ? 1 : item.fillOpacity);\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.fillStyle = color(context, item, item.fill);\n    return true;\n  } else {\n    return false;\n  }\n}\n","import color from './color';\n\nvar Empty = [];\n\nexport default function(context, item, opacity) {\n  var lw = (lw = item.strokeWidth) != null ? lw : 1;\n\n  if (lw <= 0) return false;\n\n  opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity);\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.strokeStyle = color(context, item, item.stroke);\n\n    context.lineWidth = lw;\n    context.lineCap = item.strokeCap || 'butt';\n    context.lineJoin = item.strokeJoin || 'miter';\n    context.miterLimit = item.strokeMiterLimit || 10;\n\n    if (context.setLineDash) {\n      context.setLineDash(item.strokeDash || Empty);\n      context.lineDashOffset = item.strokeDashOffset || 0;\n    }\n    return true;\n  } else {\n    return false;\n  }\n}\n","function compare(a, b) {\n  return a.zindex - b.zindex || a.index - b.index;\n}\n\nexport function zorder(scene) {\n  if (!scene.zdirty) return scene.zitems;\n\n  var items = scene.items,\n      output = [], item, i, n;\n\n  for (i=0, n=items.length; i<n; ++i) {\n    item = items[i];\n    item.index = i;\n    if (item.zindex) output.push(item);\n  }\n\n  scene.zdirty = false;\n  return scene.zitems = output.sort(compare);\n}\n\nexport function visit(scene, visitor) {\n  var items = scene.items, i, n;\n  if (!items || !items.length) return;\n\n  var zitems = zorder(scene);\n\n  if (zitems && zitems.length) {\n    for (i=0, n=items.length; i<n; ++i) {\n      if (!items[i].zindex) visitor(items[i]);\n    }\n    items = zitems;\n  }\n\n  for (i=0, n=items.length; i<n; ++i) {\n    visitor(items[i]);\n  }\n}\n\nexport function pickVisit(scene, visitor) {\n  var items = scene.items, hit, i;\n  if (!items || !items.length) return null;\n\n  var zitems = zorder(scene);\n  if (zitems && zitems.length) items = zitems;\n\n  for (i=items.length; --i >= 0;) {\n    if (hit = visitor(items[i])) return hit;\n  }\n\n  if (items === zitems) {\n    for (items=scene.items, i=items.length; --i >= 0;) {\n      if (!items[i].zindex) {\n        if (hit = visitor(items[i])) return hit;\n      }\n    }\n  }\n\n  return null;\n}\n","import blend from './blend';\nimport fill from './fill';\nimport stroke from './stroke';\nimport {visit} from '../visit';\n\nexport function drawAll(path) {\n  return function(context, scene, bounds) {\n    visit(scene, function(item) {\n      if (!bounds || bounds.intersects(item.bounds)) {\n        drawPath(path, context, item, item);\n      }\n    });\n  };\n}\n\nexport function drawOne(path) {\n  return function(context, scene, bounds) {\n    if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n      drawPath(path, context, scene.items[0], scene.items);\n    }\n  };\n}\n\nfunction drawPath(path, context, item, items) {\n  var opacity = item.opacity == null ? 1 : item.opacity;\n  if (opacity === 0) return;\n\n  if (path(context, items)) return;\n\n  blend(context, item);\n\n  if (item.fill && fill(context, item, opacity)) {\n    context.fill();\n  }\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    context.stroke();\n  }\n}\n","import {pickVisit} from '../visit';\nimport {truthy} from 'vega-util';\n\nexport function pick(test) {\n  test = test || truthy;\n\n  return function(context, scene, x, y, gx, gy) {\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n\n    return pickVisit(scene, function(item) {\n      var b = item.bounds;\n      // first hit test against bounding box\n      if ((b && !b.contains(gx, gy)) || !b) return;\n      // if in bounding box, perform more careful test\n      if (test(context, item, x, y, gx, gy)) return item;\n    });\n  };\n}\n\nexport function hitPath(path, filled) {\n  return function(context, o, x, y) {\n    var item = Array.isArray(o) ? o[0] : o,\n        fill = (filled == null) ? item.fill : filled,\n        stroke = item.stroke && context.isPointInStroke, lw, lc;\n\n    if (stroke) {\n      lw = item.strokeWidth;\n      lc = item.strokeCap;\n      context.lineWidth = lw != null ? lw : 1;\n      context.lineCap   = lc != null ? lc : 'butt';\n    }\n\n    return path(context, o) ? false :\n      (fill && context.isPointInPath(x, y)) ||\n      (stroke && context.isPointInStroke(x, y));\n  };\n}\n\nexport function pickPath(path) {\n  return pick(hitPath(path));\n}\n","export function translate(x, y) {\n  return 'translate(' + x + ',' + y + ')';\n}\n\nexport function rotate(a) {\n  return 'rotate(' + a + ')';\n}\n\nexport function scale(scaleX, scaleY){\n  return 'scale('+ scaleX + ',' + scaleY+')';\n}\n\nexport function translateItem(item) {\n  return translate(item.x || 0, item.y || 0);\n}\n\nexport function transformItem(item) {\n  return translate(item.x || 0, item.y || 0)\n    + (item.angle ? ' ' + rotate(item.angle) : '')\n    + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');   \n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {transformItem} from '../util/svg/transform';\nimport {DegToRad} from '../util/constants';\n\nexport default function(type, shape, isect) {\n\n  function attr(emit, item) {\n    emit('transform', transformItem(item));\n    emit('d', shape(null, item));\n  }\n\n  function bound(bounds, item) {\n    var x = item.x || 0,\n        y = item.y || 0;\n\n    shape(context(bounds), item);\n    boundStroke(bounds, item).translate(x, y);\n    if (item.angle) {\n      bounds.rotate(item.angle * DegToRad, x, y);\n    }\n\n    return bounds;\n  }\n\n  function draw(context, item) {\n    var x = item.x || 0,\n        y = item.y || 0,\n        a = item.angle || 0;\n\n    context.translate(x, y);\n    if (a) context.rotate(a *= DegToRad);\n    context.beginPath();\n    shape(context, item);\n    if (a) context.rotate(-a);\n    context.translate(-x, -y);\n  }\n\n  return {\n    type:   type,\n    tag:    'path',\n    nested: false,\n    attr:   attr,\n    bound:  bound,\n    draw:   drawAll(draw),\n    pick:   pickPath(draw),\n    isect:  isect || intersectPath(draw)\n  };\n\n}\n","import {arc} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('arc', arc);\n","export function pickArea(a, p) {\n  var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n      z = a[0].orient === 'horizontal' ? 'y' : 'x',\n      i = a.length,\n      min = +Infinity, hit, d;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    d = Math.abs(a[i][z] - v);\n    if (d < min) {\n      min = d;\n      hit = a[i];\n    }\n  }\n\n  return hit;\n}\n\nexport function pickLine(a, p) {\n  var t = Math.pow(a[0].strokeWidth || 1, 2),\n      i = a.length, dx, dy, dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    if (dd < t) return a[i];\n  }\n\n  return null;\n}\n\nexport function pickTrail(a, p) {\n  var i = a.length, dx, dy, dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    dx = a[i].size || 1;\n    if (dd < dx*dx) return a[i];\n  }\n\n  return null;\n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPoint} from '../util/intersect';\nimport {drawOne} from '../util/canvas/draw';\nimport {hitPath} from '../util/canvas/pick';\n\nexport default function(type, shape, tip) {\n\n  function attr(emit, item) {\n    var items = item.mark.items;\n    if (items.length) emit('d', shape(null, items));\n  }\n\n  function bound(bounds, mark) {\n    var items = mark.items;\n    if (items.length === 0) {\n      return bounds;\n    } else {\n      shape(context(bounds), items);\n      return boundStroke(bounds, items[0]);\n    }\n  }\n\n  function draw(context, items) {\n    context.beginPath();\n    shape(context, items);\n  }\n\n  var hit = hitPath(draw);\n\n  function pick(context, scene, x, y, gx, gy) {\n    var items = scene.items,\n        b = scene.bounds;\n\n    if (!items || !items.length || b && !b.contains(gx, gy)) {\n      return null;\n    }\n\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n    return hit(context, items, x, y) ? items[0] : null;\n  }\n\n  return {\n    type:   type,\n    tag:    'path',\n    nested: true,\n    attr:   attr,\n    bound:  bound,\n    draw:   drawOne(draw),\n    pick:   pick,\n    isect:  intersectPoint,\n    tip:    tip\n  };\n\n}\n\n\n","import {area} from '../path/shapes';\nimport {pickArea} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('area', area, pickArea);\n","import {hasCornerRadius, rectangle} from '../../path/shapes';\nimport {isFunction} from 'vega-util';\n\nexport default function(context, scene) {\n  var clip = scene.clip;\n\n  context.save();\n\n  if (isFunction(clip)) {\n    context.beginPath();\n    clip(context);\n    context.clip();\n  } else {\n    clipGroup(context, scene.group);\n  }\n}\n\nexport function clipGroup(context, group) {\n  context.beginPath();\n  hasCornerRadius(group)\n    ? rectangle(context, group, 0, 0)\n    : context.rect(0, 0, group.width || 0, group.height || 0);\n  context.clip();\n}\n","import {hasCornerRadius, rectangle} from '../path/shapes';\nimport boundStroke from '../bound/boundStroke';\nimport {intersectRect} from '../util/intersect';\nimport value from '../util/value';\nimport {pickVisit, visit} from '../util/visit';\nimport blend from '../util/canvas/blend';\nimport {clipGroup} from '../util/canvas/clip';\nimport fill from '../util/canvas/fill';\nimport stroke from '../util/canvas/stroke';\nimport {hitPath} from '../util/canvas/pick';\nimport clip from '../util/svg/clip';\nimport {translateItem} from '../util/svg/transform';\n\nfunction offset(item) {\n  const sw = value(item.strokeWidth, 1);\n  return item.strokeOffset != null ? item.strokeOffset\n    : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1)\n    : 0;\n}\n\nfunction attr(emit, item) {\n  emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n  const off = offset(item);\n  emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n  emit('class', 'background');\n  emit('aria-hidden', true);\n  emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n  emit('class', 'foreground');\n  emit('aria-hidden', true);\n  if (item.strokeForeground) {\n    emitRectangle(emit, item);\n  } else {\n    emit('d', '');\n  }\n}\n\nfunction content(emit, item, renderer) {\n  const url = item.clip ? clip(renderer, item, item) : null;\n  emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n  if (!group.clip && group.items) {\n    const items = group.items, m = items.length;\n    for (let j=0; j<m; ++j) {\n      bounds.union(items[j].bounds);\n    }\n  }\n\n  if ((group.clip || group.width || group.height) && !group.noBound) {\n    bounds.add(0, 0).add(group.width || 0, group.height || 0);\n  }\n\n  boundStroke(bounds, group);\n\n  return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n  const off = offset(group);\n  context.beginPath();\n  rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\n\nfunction draw(context, scene, bounds) {\n  visit(scene, group => {\n    const gx = group.x || 0,\n          gy = group.y || 0,\n          fore = group.strokeForeground,\n          opacity = group.opacity == null ? 1 : group.opacity;\n\n    // draw group background\n    if ((group.stroke || group.fill) && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n      if (group.fill && fill(context, group, opacity)) {\n        context.fill();\n      }\n      if (group.stroke && !fore && stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    }\n\n    // setup graphics context, set clip and bounds\n    context.save();\n    context.translate(gx, gy);\n    if (group.clip) clipGroup(context, group);\n    if (bounds) bounds.translate(-gx, -gy);\n\n    // draw group contents\n    visit(group, item => {\n      this.draw(context, item, bounds);\n    });\n\n    // restore graphics context\n    if (bounds) bounds.translate(gx, gy);\n    context.restore();\n\n    // draw group foreground\n    if (fore && group.stroke && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n      if (stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    }\n  });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n  if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n    return null;\n  }\n\n  const cx = x * context.pixelRatio,\n        cy = y * context.pixelRatio;\n\n  return pickVisit(scene, group => {\n    let hit, fore, ix, dx, dy, dw, dh, b, c;\n\n    // first hit test bounding box\n    b = group.bounds;\n    if (b && !b.contains(gx, gy)) return;\n\n    // passed bounds check, test rectangular clip\n    dx = group.x || 0;\n    dy = group.y || 0;\n    dw = dx + (group.width || 0);\n    dh = dy + (group.height || 0);\n    c = group.clip;\n    if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n    // adjust coordinate system\n    context.save();\n    context.translate(dx, dy);\n    dx = gx - dx;\n    dy = gy - dy;\n\n    // test background for rounded corner clip\n    if (c && hasCornerRadius(group) && !hitBackground(context, group, cx, cy)) {\n      context.restore();\n      return null;\n    }\n\n    fore = group.strokeForeground;\n    ix = scene.interactive !== false;\n\n    // hit test against group foreground\n    if (ix && fore && group.stroke\n        && hitForeground(context, group, cx, cy)) {\n      context.restore();\n      return group;\n    }\n\n    // hit test against contained marks\n    hit = pickVisit(group, mark => pickMark(mark, dx, dy)\n      ? this.pick(mark, x, y, dx, dy)\n      : null\n    );\n\n    // hit test against group background\n    if (!hit && ix && (group.fill || (!fore && group.stroke))\n        && hitBackground(context, group, cx, cy)) {\n      hit = group;\n    }\n\n    // restore state and return\n    context.restore();\n    return hit || null;\n  });\n}\n\nfunction pickMark(mark, x, y) {\n  return (mark.interactive !== false || mark.marktype === 'group')\n    && mark.bounds && mark.bounds.contains(x, y);\n}\n\nexport default {\n  type:       'group',\n  tag:        'g',\n  nested:     false,\n  attr:       attr,\n  bound:      bound,\n  draw:       draw,\n  pick:       pick,\n  isect:      intersectRect,\n  content:    content,\n  background: background,\n  foreground: foreground\n};\n","export default {\n  'version': '1.1',\n  'xmlns': 'http://www.w3.org/2000/svg',\n  'xmlns:xlink': 'http://www.w3.org/1999/xlink'\n};","import {visit} from '../util/visit';\nimport blend from '../util/canvas/blend';\nimport {pick} from '../util/canvas/pick';\nimport metadata from '../util/svg/metadata';\nimport {translate} from '../util/svg/transform';\nimport {truthy} from 'vega-util';\n\nfunction getImage(item, renderer) {\n  var image = item.image;\n  if (!image || item.url && item.url !== image.url) {\n    image = {complete: false, width: 0, height: 0};\n    renderer.loadImage(item.url).then(image => {\n      item.image = image;\n      item.image.url = item.url;\n    });\n  }\n  return image;\n}\n\nfunction imageWidth(item, image) {\n  return item.width != null ? item.width\n    : !image || !image.width ? 0\n    : item.aspect !== false && item.height ? item.height * image.width / image.height\n    : image.width;\n}\n\nfunction imageHeight(item, image) {\n  return item.height != null ? item.height\n    : !image || !image.height ? 0\n    : item.aspect !== false && item.width ? item.width * image.height / image.width\n    : image.height;\n}\n\nfunction imageXOffset(align, w) {\n  return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n  return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr(emit, item, renderer) {\n  const img = getImage(item, renderer),\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n\n  emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n  emit('transform', translate(x, y));\n  emit('width', w);\n  emit('height', h);\n  emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound(bounds, item) {\n  const img = item.image,\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h);\n\n  return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw(context, scene, bounds) {\n  visit(scene, item => {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n    let img = getImage(item, this),\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        opacity, ar0, ar1, t;\n\n    if (item.aspect !== false) {\n      ar0 = img.width / img.height;\n      ar1 = item.width / item.height;\n      if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n        if (ar1 < ar0) {\n          t = w / ar0;\n          y += (h - t) / 2;\n          h = t;\n        } else {\n          t = h * ar0;\n          x += (w - t) / 2;\n          w = t;\n        }\n      }\n    }\n\n    if (img.complete || img.toDataURL) {\n      blend(context, item);\n      context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n      context.imageSmoothingEnabled = item.smooth !== false;\n      context.drawImage(img, x, y, w, h);\n    }\n  });\n}\n\nexport default {\n  type:     'image',\n  tag:      'image',\n  nested:   false,\n  attr:     attr,\n  bound:    bound,\n  draw:     draw,\n  pick:     pick(),\n  isect:    truthy, // bounds check is sufficient\n  get:      getImage,\n  xOffset:  imageXOffset,\n  yOffset:  imageYOffset\n};\n","import {line} from '../path/shapes';\nimport {pickLine} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('line', line, pickLine);\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport pathParse from '../path/parse';\nimport pathRender from '../path/render';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {transformItem} from '../util/svg/transform';\nimport {DegToRad} from '../util/constants';\n\nfunction attr(emit, item) {\n  var sx = item.scaleX || 1,\n      sy = item.scaleY || 1;\n  if (sx !== 1 || sy !== 1) {\n    emit('vector-effect', 'non-scaling-stroke');\n  }\n  emit('transform', transformItem(item));\n  emit('d', item.path);\n}\n\nfunction path(context, item) {\n  var path = item.path;\n  if (path == null) return true;\n\n  var x = item.x || 0,\n      y = item.y || 0,\n      sx = item.scaleX || 1,\n      sy = item.scaleY || 1,\n      a = (item.angle || 0) * DegToRad,\n      cache = item.pathCache;\n\n  if (!cache || cache.path !== path) {\n    (item.pathCache = cache = pathParse(path)).path = path;\n  }\n\n  if (a && context.rotate && context.translate) {\n    context.translate(x, y);\n    context.rotate(a);\n    pathRender(context, cache, 0, 0, sx, sy);\n    context.rotate(-a);\n    context.translate(-x, -y);\n  } else {\n    pathRender(context, cache, x, y, sx, sy);\n  }\n}\n\nfunction bound(bounds, item) {\n  path(context(bounds), item)\n    ? bounds.set(0, 0, 0, 0)\n    : boundStroke(bounds, item, true);\n\n  if (item.angle) {\n    bounds.rotate(item.angle * DegToRad, item.x || 0, item.y || 0);\n  }\n\n  return bounds;\n}\n\nexport default {\n  type:   'path',\n  tag:    'path',\n  nested: false,\n  attr:   attr,\n  bound:  bound,\n  draw:   drawAll(path),\n  pick:   pickPath(path),\n  isect:  intersectPath(path)\n};\n","import boundStroke from '../bound/boundStroke';\nimport {rectangle} from '../path/shapes';\nimport {intersectRect} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\n\nfunction attr(emit, item) {\n  emit('d', rectangle(null, item));\n}\n\nfunction bound(bounds, item) {\n  var x, y;\n  return boundStroke(bounds.set(\n    x = item.x || 0,\n    y = item.y || 0,\n    (x + item.width) || 0,\n    (y + item.height) || 0\n  ), item);\n}\n\nfunction draw(context, item) {\n  context.beginPath();\n  rectangle(context, item);\n}\n\nexport default {\n  type:   'rect',\n  tag:    'path',\n  nested: false,\n  attr:   attr,\n  bound:  bound,\n  draw:   drawAll(draw),\n  pick:   pickPath(draw),\n  isect:  intersectRect\n};\n","import boundStroke from '../bound/boundStroke';\nimport {intersectRule} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport blend from '../util/canvas/blend';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {translateItem} from '../util/svg/transform';\n\nfunction attr(emit, item) {\n  emit('transform', translateItem(item));\n  emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n  emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound(bounds, item) {\n  var x1, y1;\n  return boundStroke(bounds.set(\n    x1 = item.x || 0,\n    y1 = item.y || 0,\n    item.x2 != null ? item.x2 : x1,\n    item.y2 != null ? item.y2 : y1\n  ), item);\n}\n\nfunction path(context, item, opacity) {\n  var x1, y1, x2, y2;\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    x1 = item.x || 0;\n    y1 = item.y || 0;\n    x2 = item.x2 != null ? item.x2 : x1;\n    y2 = item.y2 != null ? item.y2 : y1;\n    context.beginPath();\n    context.moveTo(x1, y1);\n    context.lineTo(x2, y2);\n    return true;\n  }\n  return false;\n}\n\nfunction draw(context, scene, bounds) {\n  visit(scene, function(item) {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n    var opacity = item.opacity == null ? 1 : item.opacity;\n    if (opacity && path(context, item, opacity)) {\n      blend(context, item);\n      context.stroke();\n    }\n  });\n}\n\nfunction hit(context, item, x, y) {\n  if (!context.isPointInStroke) return false;\n  return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nexport default {\n  type:   'rule',\n  tag:    'line',\n  nested: false,\n  attr:   attr,\n  bound:  bound,\n  draw:   draw,\n  pick:   pick(hit),\n  isect:  intersectRule\n};\n","import {shape} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('shape', shape);\n","import {symbol} from '../path/shapes';\nimport {intersectPoint} from '../util/intersect';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('symbol', symbol, intersectPoint);\n","import {context} from './canvas/context';\nimport {isArray, lruCache} from 'vega-util';\n\n// memoize text width measurement\nconst widthCache = lruCache();\n\nexport var textMetrics = {\n  height: fontSize,\n  measureWidth: measureWidth,\n  estimateWidth: estimateWidth,\n  width: estimateWidth,\n  canvas: useCanvas\n};\n\nuseCanvas(true);\n\nfunction useCanvas(use) {\n  textMetrics.width = (use && context) ? measureWidth : estimateWidth;\n}\n\n// make dumb, simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n  return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n  return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n  return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0\n    : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n  const key = `(${currentFont}) ${text}`;\n  let width = widthCache.get(key);\n  if (width === undefined) {\n    context.font = currentFont;\n    width = context.measureText(text).width;\n    widthCache.set(key, width);\n  }\n  return width;\n}\n\nexport function fontSize(item) {\n  return item.fontSize != null ? (+item.fontSize || 0) : 11;\n}\n\nexport function lineHeight(item) {\n  return item.lineHeight != null ? item.lineHeight : (fontSize(item) + 2);\n}\n\nfunction lineArray(_) {\n  return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nexport function textLines(item) {\n  return lineArray(\n    item.lineBreak && item.text && !isArray(item.text)\n      ? item.text.split(item.lineBreak)\n      : item.text\n  );\n}\n\nexport function multiLineOffset(item) {\n  const tl = textLines(item);\n  return (isArray(tl) ? (tl.length - 1) : 0) * lineHeight(item);\n}\n\nexport function textValue(item, line) {\n  const text = line == null ? '' : (line + '').trim();\n  return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n  if (textMetrics.width === measureWidth) {\n    // we are using canvas\n    const currentFont = font(item);\n    return text => _measureWidth(text, currentFont);\n  } else {\n    // we are relying on estimates\n    const currentFontHeight = fontSize(item);\n    return text => _estimateWidth(text, currentFontHeight);\n  }\n}\n\nfunction truncate(item, text) {\n  var limit = +item.limit,\n      width = widthGetter(item);\n\n  if (width(text) < limit) return text;\n\n  var ellipsis = item.ellipsis || '\\u2026',\n      rtl = item.dir === 'rtl',\n      lo = 0,\n      hi = text.length, mid;\n\n  limit -= width(ellipsis);\n\n  if (rtl) {\n    while (lo < hi) {\n      mid = (lo + hi >>> 1);\n      if (width(text.slice(mid)) > limit) lo = mid + 1;\n      else hi = mid;\n    }\n    return ellipsis + text.slice(lo);\n  } else {\n    while (lo < hi) {\n      mid = 1 + (lo + hi >>> 1);\n      if (width(text.slice(0, mid)) < limit) lo = mid;\n      else hi = mid - 1;\n    }\n    return text.slice(0, lo) + ellipsis;\n  }\n}\n\nexport function fontFamily(item, quote) {\n  var font = item.font;\n  return (quote && font\n    ? String(font).replace(/\"/g, '\\'')\n    : font) || 'sans-serif';\n}\n\nexport function font(item, quote) {\n  return '' +\n    (item.fontStyle ? item.fontStyle + ' ' : '') +\n    (item.fontVariant ? item.fontVariant + ' ' : '') +\n    (item.fontWeight ? item.fontWeight + ' ' : '') +\n    fontSize(item) + 'px ' +\n    fontFamily(item, quote);\n}\n\nexport function offset(item) {\n  // perform our own font baseline calculation\n  // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n  // this also ensures consistent layout across renderers\n  var baseline = item.baseline,\n      h = fontSize(item);\n\n  return Math.round(\n    baseline === 'top'         ?  0.79 * h :\n    baseline === 'middle'      ?  0.30 * h :\n    baseline === 'bottom'      ? -0.21 * h :\n    baseline === 'line-top'    ?  0.29 * h + 0.5 * lineHeight(item) :\n    baseline === 'line-bottom' ?  0.29 * h - 0.5 * lineHeight(item) : 0\n  );\n}\n","import Bounds from '../Bounds';\nimport {DegToRad, HalfPi} from '../util/constants';\nimport {font, lineHeight, offset, textLines, textMetrics, textValue} from '../util/text';\nimport {intersectBoxLine} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport blend from '../util/canvas/blend';\nimport fill from '../util/canvas/fill';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {rotate, translate} from '../util/svg/transform';\nimport {isArray} from 'vega-util';\n\nvar textAlign = {\n  'left':   'start',\n  'center': 'middle',\n  'right':  'end'\n};\n\nvar tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n  var x = item.x || 0,\n      y = item.y || 0,\n      r = item.radius || 0, t;\n\n  if (r) {\n    t = (item.theta || 0) - HalfPi;\n    x += r * Math.cos(t);\n    y += r * Math.sin(t);\n  }\n\n  tempBounds.x1 = x;\n  tempBounds.y1 = y;\n  return tempBounds;\n}\n\nfunction attr(emit, item) {\n  var dx = item.dx || 0,\n      dy = (item.dy || 0) + offset(item),\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      a = item.angle || 0, t;\n\n  emit('text-anchor', textAlign[item.align] || 'start');\n\n  if (a) {\n    t = translate(x, y) + ' ' + rotate(a);\n    if (dx || dy) t += ' ' + translate(dx, dy);\n  } else {\n    t = translate(x + dx, y + dy);\n  }\n  emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n  var h = textMetrics.height(item),\n      a = item.align,\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      dx = item.dx || 0,\n      dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset\n      tl = textLines(item),\n      w;\n\n  // get dimensions\n  if (isArray(tl)) {\n    // multi-line text\n    h += lineHeight(item) * (tl.length - 1);\n    w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n  } else {\n    // single-line text\n    w = textMetrics.width(item, tl);\n  }\n\n  // horizontal alignment\n  if (a === 'center') {\n    dx -= (w / 2);\n  } else if (a === 'right') {\n    dx -= w;\n  } else {\n    // left by default, do nothing\n  }\n\n  bounds.set(dx+=x, dy+=y, dx+w, dy+h);\n\n  if (item.angle && !mode) {\n    bounds.rotate(item.angle * DegToRad, x, y);\n  } else if (mode === 2) {\n    return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n  }\n  return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n  visit(scene, function(item) {\n    var opacity = item.opacity == null ? 1 : item.opacity,\n        p, x, y, i, lh, tl, str;\n\n    if (bounds && !bounds.intersects(item.bounds) || // bounds check\n        opacity === 0 || item.fontSize <= 0 ||\n        item.text == null || item.text.length === 0) return;\n\n    context.font = font(item);\n    context.textAlign = item.align || 'left';\n\n    p = anchorPoint(item);\n    x = p.x1,\n    y = p.y1;\n\n    if (item.angle) {\n      context.save();\n      context.translate(x, y);\n      context.rotate(item.angle * DegToRad);\n      x = y = 0; // reset x, y\n    }\n    x += (item.dx || 0);\n    y += (item.dy || 0) + offset(item);\n\n    tl = textLines(item);\n    blend(context, item);\n    if (isArray(tl)) {\n      lh = lineHeight(item);\n      for (i=0; i<tl.length; ++i) {\n        str = textValue(item, tl[i]);\n        if (item.fill && fill(context, item, opacity)) {\n          context.fillText(str, x, y);\n        }\n        if (item.stroke && stroke(context, item, opacity)) {\n          context.strokeText(str, x, y);\n        }\n        y += lh;\n      }\n    } else {\n      str = textValue(item, tl);\n      if (item.fill && fill(context, item, opacity)) {\n        context.fillText(str, x, y);\n      }\n      if (item.stroke && stroke(context, item, opacity)) {\n        context.strokeText(str, x, y);\n      }\n    }\n\n    if (item.angle) context.restore();\n  });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n  if (item.fontSize <= 0) return false;\n  if (!item.angle) return true; // bounds sufficient if no rotation\n\n  // project point into space of unrotated bounds\n  var p = anchorPoint(item),\n      ax = p.x1,\n      ay = p.y1,\n      b = bound(tempBounds, item, 1),\n      a = -item.angle * DegToRad,\n      cos = Math.cos(a),\n      sin = Math.sin(a),\n      px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n      py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n\n  return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n  var p = bound(tempBounds, item, 2);\n  return intersectBoxLine(box, p[0], p[1], p[2], p[3])\n      || intersectBoxLine(box, p[0], p[1], p[4], p[5])\n      || intersectBoxLine(box, p[4], p[5], p[6], p[7])\n      || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nexport default {\n  type:   'text',\n  tag:    'text',\n  nested: false,\n  attr:   attr,\n  bound:  bound,\n  draw:   draw,\n  pick:   pick(hit),\n  isect:  intersectText\n};\n","import {trail} from '../path/shapes';\nimport {pickTrail} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('trail', trail, pickTrail);\n","import arc from './arc';\nimport area from './area';\nimport group from './group';\nimport image from './image';\nimport line from './line';\nimport path from './path';\nimport rect from './rect';\nimport rule from './rule';\nimport shape from './shape';\nimport symbol from './symbol';\nimport text from './text';\nimport trail from './trail';\n\nexport default {\n  arc:     arc,\n  area:    area,\n  group:   group,\n  image:   image,\n  line:    line,\n  path:    path,\n  rect:    rect,\n  rule:    rule,\n  shape:   shape,\n  symbol:  symbol,\n  text:    text,\n  trail:   trail\n};\n","import Bounds from '../Bounds';\nimport marks from '../marks/index';\n\nexport default function(item, func, opt) {\n  var type = marks[item.mark.marktype],\n      bound = func || type.bound;\n  if (type.nested) item = item.mark;\n\n  return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n","import Bounds from '../Bounds';\nimport boundItem from './boundItem';\nimport marks from '../marks/index';\n\nvar DUMMY = {mark: null};\n\nexport default function(mark, bounds, opt) {\n  var type  = marks[mark.marktype],\n      bound = type.bound,\n      items = mark.items,\n      hasItems = items && items.length,\n      i, n, item, b;\n\n  if (type.nested) {\n    if (hasItems) {\n      item = items[0];\n    } else {\n      // no items, fake it\n      DUMMY.mark = mark;\n      item = DUMMY;\n    }\n    b = boundItem(item, bound, opt);\n    bounds = bounds && bounds.union(b) || b;\n    return bounds;\n  }\n\n  bounds = bounds\n    || mark.bounds && mark.bounds.clear()\n    || new Bounds();\n\n  if (hasItems) {\n    for (i=0, n=items.length; i<n; ++i) {\n      bounds.union(boundItem(items[i], bound, opt));\n    }\n  }\n\n  return mark.bounds = bounds;\n}\n","import boundMark from '../bound/boundMark';\n\nvar keys = [\n  'marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex',\n  'x', 'y', 'width', 'height', 'align', 'baseline',             // layout\n  'fill', 'fillOpacity', 'opacity', 'blend',                    // fill\n  'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',        // stroke\n  'strokeDash', 'strokeDashOffset',                             // stroke dash\n  'strokeForeground', 'strokeOffset',                           // group\n  'startAngle', 'endAngle', 'innerRadius', 'outerRadius',       // arc\n  'cornerRadius', 'padAngle',                                   // arc, rect\n  'cornerRadiusTopLeft', 'cornerRadiusTopRight',                // rect, group\n  'cornerRadiusBottomLeft', 'cornerRadiusBottomRight',\n  'interpolate', 'tension', 'orient', 'defined',                // area, line\n  'url', 'aspect', 'smooth',                                    // image\n  'path', 'scaleX', 'scaleY',                                   // path\n  'x2', 'y2',                                                   // rule\n  'size', 'shape',                                              // symbol\n  'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',        // text\n  'ellipsis', 'limit', 'lineBreak', 'lineHeight',\n  'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n  'description', 'aria', 'ariaRole', 'ariaRoleDescription'      // aria\n];\n\nexport function sceneToJSON(scene, indent) {\n  return JSON.stringify(scene, keys, indent);\n}\n\nexport function sceneFromJSON(json) {\n  var scene = (typeof json === 'string' ? JSON.parse(json) : json);\n  return initialize(scene);\n}\n\nfunction initialize(scene) {\n  var type = scene.marktype,\n      items = scene.items,\n      parent, i, n;\n\n  if (items) {\n    for (i=0, n=items.length; i<n; ++i) {\n      parent = type ? 'mark' : 'group';\n      items[i][parent] = scene;\n      if (items[i].zindex) items[i][parent].zdirty = true;\n      if ('group' === (type || parent)) initialize(items[i]);\n    }\n  }\n\n  if (type) boundMark(scene);\n  return scene;\n}\n","import Bounds from './Bounds';\nimport GroupItem from './GroupItem';\nimport {sceneFromJSON, sceneToJSON} from './util/serialize';\n\nexport default function Scenegraph(scene) {\n  if (arguments.length) {\n    this.root = sceneFromJSON(scene);\n  } else {\n    this.root = createMark({\n      marktype: 'group',\n      name: 'root',\n      role: 'frame'\n    });\n    this.root.items = [new GroupItem(this.root)];\n  }\n}\n\nvar prototype = Scenegraph.prototype;\n\nprototype.toJSON = function(indent) {\n  return sceneToJSON(this.root, indent || 0);\n};\n\nprototype.mark = function(markdef, group, index) {\n  group = group || this.root.items[0];\n  var mark = createMark(markdef, group);\n  group.items[index] = mark;\n  if (mark.zindex) mark.group.zdirty = true;\n  return mark;\n};\n\nfunction createMark(def, group) {\n  const mark = {\n    bounds:      new Bounds(),\n    clip:        !!def.clip,\n    group:       group,\n    interactive: def.interactive === false ? false : true,\n    items:       [],\n    marktype:    def.marktype,\n    name:        def.name || undefined,\n    role:        def.role || undefined,\n    zindex:      def.zindex || 0\n  };\n\n  // add accessibility properties if defined\n  if (def.aria != null) {\n    mark.aria = def.aria;\n  }\n  if (def.description) {\n    mark.description = def.description;\n  }\n\n  return mark;\n}\n","// create a new DOM element\nexport function domCreate(doc, tag, ns) {\n  if (!doc && typeof document !== 'undefined' && document.createElement) {\n    doc = document;\n  }\n  return doc\n    ? (ns ? doc.createElementNS(ns, tag) : doc.createElement(tag))\n    : null;\n}\n\n// find first child element with matching tag\nexport function domFind(el, tag) {\n  tag = tag.toLowerCase();\n  var nodes = el.childNodes, i = 0, n = nodes.length;\n  for (; i<n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n    return nodes[i];\n  }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nexport function domChild(el, index, tag, ns) {\n  var a = el.childNodes[index], b;\n  if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n    b = a || null;\n    a = domCreate(el.ownerDocument, tag, ns);\n    el.insertBefore(a, b);\n  }\n  return a;\n}\n\n// remove all child elements at or above the given index\nexport function domClear(el, index) {\n  var nodes = el.childNodes,\n      curr = nodes.length;\n  while (curr > index) el.removeChild(nodes[--curr]);\n  return el;\n}\n\n// generate css class name for mark\nexport function cssClass(mark) {\n  return 'mark-' + mark.marktype\n    + (mark.role ? ' role-' + mark.role : '')\n    + (mark.name ? ' ' + mark.name : '');\n}\n","export default function(event, el) {\n  var rect = el.getBoundingClientRect();\n  return [\n    event.clientX - rect.left - (el.clientLeft || 0),\n    event.clientY - rect.top - (el.clientTop || 0)\n  ];\n}\n","import marks from '../marks/index';\nimport point from './point';\n\nexport default function(item, event, el, origin) {\n  var mark = item && item.mark,\n      mdef, p;\n\n  if (mark && (mdef = marks[mark.marktype]).tip) {\n    p = point(event, el);\n    p[0] -= origin[0];\n    p[1] -= origin[1];\n    while (item = item.mark.group) {\n      p[0] -= item.x || 0;\n      p[1] -= item.y || 0;\n    }\n    item = mdef.tip(mark.items, p);\n  }\n\n  return item;\n}\n","import {domCreate} from './util/dom';\nimport resolveItem from './util/resolveItem';\nimport {loader} from 'vega-loader';\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n *   href URL sanitization. If not specified, a standard loader\n *   instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n *   function for custom tooltip display.\n * @constructor\n */\nexport default function Handler(customLoader, customTooltip) {\n  this._active = null;\n  this._handlers = {};\n  this._loader = customLoader || loader();\n  this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n  handler.element().setAttribute('title', value || '');\n}\n\nconst prototype = Handler.prototype;\n\n/**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n *   The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n *   the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\nprototype.initialize = function(el, origin, obj) {\n  this._el = el;\n  this._obj = obj || null;\n  return this.origin(origin);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n  return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n  return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the origin coordinates of the visualization.\n */\nprototype.origin = function(origin) {\n  if (arguments.length) {\n    this._origin = origin || [0, 0];\n    return this;\n  } else {\n    return this._origin.slice();\n  }\n};\n\n/**\n * Get / set the scenegraph root.\n */\nprototype.scene = function(scene) {\n  if (!arguments.length) return this._scene;\n  this._scene = scene;\n  return this;\n};\n\n/**\n * Add an event handler. Subclasses should override this method.\n */\nprototype.on = function(/*type, handler*/) {};\n\n/**\n * Remove an event handler. Subclasses should override this method.\n */\nprototype.off = function(/*type, handler*/) {};\n\n/**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\nprototype._handlerIndex = function(h, type, handler) {\n  for (let i = h ? h.length : 0; --i>=0;) {\n    if (h[i].type === type && (!handler || h[i].handler === handler)) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n *   are ignored; for example, for the argument \"click.foo\", \".foo\" will\n *   be ignored and the method returns all \"click\" handlers. If type is\n *   null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\nprototype.handlers = function(type) {\n  const h = this._handlers, a = [];\n  if (type) {\n    a.push.apply(a, h[this.eventName(type)]);\n  } else {\n    for (const k in h) { a.push.apply(a, h[k]); }\n  }\n  return a;\n};\n\n/**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\nprototype.eventName = function(name) {\n  const i = name.indexOf('.');\n  return i < 0 ? name : name.slice(0, i);\n};\n\n/**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\nprototype.handleHref = function(event, item, href) {\n  this._loader\n    .sanitize(href, {context:'href'})\n    .then(opt => {\n      const e = new MouseEvent(event.type, event),\n            a = domCreate(null, 'a');\n      for (const name in opt) a.setAttribute(name, opt[name]);\n      a.dispatchEvent(e);\n    })\n    .catch(function() { /* do nothing */ });\n};\n\n/**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n *   to show or hide a tooltip for the given item.\n */\nprototype.handleTooltip = function(event, item, show) {\n  if (item && item.tooltip != null) {\n    item = resolveItem(item, event, this.canvas(), this._origin);\n    const value = (show && item && item.tooltip) || null;\n    this._tooltip.call(this._obj, this, event, item, value);\n  }\n};\n\n/**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n *   DOMRect type) consisting of x, y, width, heigh, top, left,\n *   right, and bottom properties.\n */\nprototype.getItemBoundingClientRect = function(item) {\n  const el = this.canvas();\n  if (!el) return;\n\n  const rect = el.getBoundingClientRect(),\n        origin = this._origin,\n        bounds = item.bounds,\n        width = bounds.width(),\n        height = bounds.height();\n\n  let x = bounds.x1 + origin[0] + rect.left,\n      y = bounds.y1 + origin[1] + rect.top;\n\n  // translate coordinate for each parent group\n  while (item.mark && (item = item.mark.group)) {\n    x += item.x || 0;\n    y += item.y || 0;\n  }\n\n  // return DOMRect-compatible bounding box\n  return {\n    x, y, width, height,\n    left: x, top: y, right: x + width, bottom: y + height\n  };\n};\n","import ResourceLoader from './ResourceLoader';\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n *   image and href URL sanitization. If not specified, a\n *   standard loader instance will be generated.\n * @constructor\n */\nexport default function Renderer(loader) {\n  this._el = null;\n  this._bgcolor = null;\n  this._loader = new ResourceLoader(loader);\n}\n\nvar prototype = Renderer.prototype;\n\n/**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The origin of the display, in pixels.\n *   The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n *   the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\nprototype.initialize = function(el, width, height, origin, scaleFactor) {\n  this._el = el;\n  return this.resize(width, height, origin, scaleFactor);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n  return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n  return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the background color.\n */\nprototype.background = function(bgcolor) {\n  if (arguments.length === 0) return this._bgcolor;\n  this._bgcolor = bgcolor;\n  return this;\n};\n\n/**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array<number>} origin - The new origin of the display, in pixels.\n *   The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n *   the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype.resize = function(width, height, origin, scaleFactor) {\n  this._width = width;\n  this._height = height;\n  this._origin = origin || [0, 0];\n  this._scale = scaleFactor || 1;\n  return this;\n};\n\n/**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\nprototype.dirty = function(/*item*/) {\n};\n\n/**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\nprototype.render = function(scene) {\n  var r = this;\n\n  // bind arguments into a render call, and cache it\n  // this function may be subsequently called for async redraw\n  r._call = function() { r._render(scene); };\n\n  // invoke the renderer\n  r._call();\n\n  // clear the cached call for garbage collection\n  // async redraws will stash their own copy\n  r._call = null;\n\n  return r;\n};\n\n/**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\nprototype._render = function(/*scene*/) {\n  // subclasses to override\n};\n\n/**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\nprototype.renderAsync = function(scene) {\n  var r = this.render(scene);\n  return this._ready\n    ? this._ready.then(function() { return r; })\n    : Promise.resolve(r);\n};\n\n/**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\nprototype._load = function(method, uri) {\n  var r = this,\n      p = r._loader[method](uri);\n\n  if (!r._ready) {\n    // re-render the scene when loading completes\n    var call = r._call;\n    r._ready = r._loader.ready()\n      .then(function(redraw) {\n        if (redraw) call();\n        r._ready = null;\n      });\n  }\n\n  return p;\n};\n\n/**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\nprototype.sanitizeURL = function(uri) {\n  return this._load('sanitizeURL', uri);\n};\n\n/**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\nprototype.loadImage = function(uri) {\n  return this._load('loadImage', uri);\n};\n","export const KeyDownEvent = 'keydown';\nexport const KeyPressEvent = 'keypress';\nexport const KeyUpEvent = 'keyup';\nexport const DragEnterEvent = 'dragenter';\nexport const DragLeaveEvent = 'dragleave';\nexport const DragOverEvent = 'dragover';\nexport const MouseDownEvent = 'mousedown';\nexport const MouseUpEvent = 'mouseup';\nexport const MouseMoveEvent = 'mousemove';\nexport const MouseOutEvent = 'mouseout';\nexport const MouseOverEvent = 'mouseover';\nexport const ClickEvent = 'click';\nexport const DoubleClickEvent = 'dblclick';\nexport const WheelEvent = 'wheel';\nexport const MouseWheelEvent = 'mousewheel';\nexport const TouchStartEvent = 'touchstart';\nexport const TouchMoveEvent = 'touchmove';\nexport const TouchEndEvent = 'touchend';\n\nexport const Events = [\n  KeyDownEvent,\n  KeyPressEvent,\n  KeyUpEvent,\n  DragEnterEvent,\n  DragLeaveEvent,\n  DragOverEvent,\n  MouseDownEvent,\n  MouseUpEvent,\n  MouseMoveEvent,\n  MouseOutEvent,\n  MouseOverEvent,\n  ClickEvent,\n  DoubleClickEvent,\n  WheelEvent,\n  MouseWheelEvent,\n  TouchStartEvent,\n  TouchMoveEvent,\n  TouchEndEvent\n];\n\nexport const TooltipShowEvent = MouseMoveEvent;\n\nexport const TooltipHideEvent = MouseOutEvent;\n\nexport const HrefEvent = ClickEvent;\n","import Handler from './Handler';\nimport Marks from './marks/index';\nimport {\n  ClickEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, Events,\n  HrefEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent,\n  MouseWheelEvent, TooltipHideEvent, TooltipShowEvent,\n  TouchEndEvent, TouchMoveEvent, TouchStartEvent\n} from './util/events';\nimport point from './util/point';\nimport {domFind} from './util/dom';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  this._down = null;\n  this._touch = null;\n  this._first = true;\n  this._events = {};\n}\n\nconst prototype = inherits(CanvasHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n  this._canvas = el && domFind(el, 'canvas');\n\n  // add minimal events required for proper state management\n  [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent]\n    .forEach(type => eventListenerCheck(this, type));\n\n  return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nconst eventBundle = type => (\n  type === TouchStartEvent ||\n  type === TouchMoveEvent ||\n  type === TouchEndEvent\n)\n? [TouchStartEvent, TouchMoveEvent, TouchEndEvent]\n: [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n  eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n  const canvas = handler.canvas();\n  if (canvas && !handler._events[type]) {\n    handler._events[type] = 1;\n    canvas.addEventListener(type, handler[type]\n      ? evt => handler[type](evt)\n      : evt => handler.fire(type, evt)\n    );\n  }\n}\n\n// return the backing canvas instance\nprototype.canvas = function() {\n  return this._canvas;\n};\n\n// retrieve the current canvas context\nprototype.context = function() {\n  return this._canvas.getContext('2d');\n};\n\n// supported events\nprototype.events = Events;\n\nfunction move(moveEvent, overEvent, outEvent) {\n  return function(evt) {\n    const a = this._active,\n          p = this.pickEvent(evt);\n\n    if (p === a) {\n      // active item and picked item are the same\n      this.fire(moveEvent, evt); // fire move\n    } else {\n      // active item and picked item are different\n      if (!a || !a.exit) {\n        // fire out for prior active item\n        // suppress if active item was removed from scene\n        this.fire(outEvent, evt);\n      }\n      this._active = p;          // set new active item\n      this.fire(overEvent, evt); // fire over for new active item\n      this.fire(moveEvent, evt); // fire move for new active item\n    }\n  };\n}\n\nfunction inactive(type) {\n  return function(evt) {\n    this.fire(type, evt);\n    this._active = null;\n  };\n}\n\n// to keep old versions of firefox happy\nprototype.DOMMouseScroll = function(evt) {\n  this.fire(MouseWheelEvent, evt);\n};\n\nprototype.mousemove = move(MouseMoveEvent, MouseOverEvent, MouseOutEvent);\nprototype.dragover  = move(DragOverEvent, DragEnterEvent, DragLeaveEvent);\n\nprototype.mouseout  = inactive(MouseOutEvent);\nprototype.dragleave = inactive(DragLeaveEvent);\n\nprototype.mousedown = function(evt) {\n  this._down = this._active;\n  this.fire(MouseDownEvent, evt);\n};\n\nprototype.click = function(evt) {\n  if (this._down === this._active) {\n    this.fire(ClickEvent, evt);\n    this._down = null;\n  }\n};\n\nprototype.touchstart = function(evt) {\n  this._touch = this.pickEvent(evt.changedTouches[0]);\n\n  if (this._first) {\n    this._active = this._touch;\n    this._first = false;\n  }\n\n  this.fire(TouchStartEvent, evt, true);\n};\n\nprototype.touchmove = function(evt) {\n  this.fire(TouchMoveEvent, evt, true);\n};\n\nprototype.touchend = function(evt) {\n  this.fire(TouchEndEvent, evt, true);\n  this._touch = null;\n};\n\n// fire an event\nprototype.fire = function(type, evt, touch) {\n  const a = touch ? this._touch : this._active,\n        h = this._handlers[type];\n\n  // set event type relative to scenegraph items\n  evt.vegaType = type;\n\n  // handle hyperlinks and tooltips first\n  if (type === HrefEvent && a && a.href) {\n    this.handleHref(evt, a, a.href);\n  } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n    this.handleTooltip(evt, a, type !== TooltipHideEvent);\n  }\n\n  // invoke all registered handlers\n  if (h) {\n    for (let i=0, len=h.length; i<len; ++i) {\n      h[i].handler.call(this._obj, evt, a);\n    }\n  }\n};\n\n// add an event handler\nprototype.on = function(type, handler) {\n  const name = this.eventName(type),\n        h = this._handlers,\n        i = this._handlerIndex(h[name], type, handler);\n\n  if (i < 0) {\n    eventListenerCheck(this, type);\n    (h[name] || (h[name] = [])).push({\n      type:    type,\n      handler: handler\n    });\n  }\n\n  return this;\n};\n\n// remove an event handler\nprototype.off = function(type, handler) {\n  const name = this.eventName(type),\n        h = this._handlers[name],\n        i = this._handlerIndex(h, type, handler);\n\n  if (i >= 0) {\n    h.splice(i, 1);\n  }\n\n  return this;\n};\n\nprototype.pickEvent = function(evt) {\n  const p = point(evt, this._canvas),\n        o = this._origin;\n  return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n};\n\n// find the scenegraph item at the current mouse position\n// x, y -- the absolute x, y mouse coordinates on the canvas element\n// gx, gy -- the relative coordinates within the current group\nprototype.pick = function(scene, x, y, gx, gy) {\n  const g = this.context(),\n        mark = Marks[scene.marktype];\n  return mark.pick.call(this, g, scene, x, y, gx, gy);\n};\n","function devicePixelRatio() {\n  return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\n\nexport default function(canvas, width, height, origin, scaleFactor, opt) {\n  const inDOM = typeof HTMLElement !== 'undefined'\n              && canvas instanceof HTMLElement\n              && canvas.parentNode != null,\n        context = canvas.getContext('2d'),\n        ratio = inDOM ? pixelRatio : scaleFactor;\n\n  canvas.width = width * ratio;\n  canvas.height = height * ratio;\n\n  for (const key in opt) {\n    context[key] = opt[key];\n  }\n\n  if (inDOM && ratio !== 1) {\n    canvas.style.width = width + 'px';\n    canvas.style.height = height + 'px';\n  }\n\n  context.pixelRatio = ratio;\n  context.setTransform(\n    ratio, 0, 0, ratio,\n    ratio * origin[0],\n    ratio * origin[1]\n  );\n\n  return canvas;\n}\n","import Renderer from './Renderer';\nimport Bounds from './Bounds';\nimport marks from './marks/index';\n\nimport {domClear} from './util/dom';\nimport clip from './util/canvas/clip';\nimport resize from './util/canvas/resize';\nimport {canvas} from 'vega-canvas';\nimport {error, inherits} from 'vega-util';\n\nexport default function CanvasRenderer(loader) {\n  Renderer.call(this, loader);\n  this._options = {};\n  this._redraw = false;\n  this._dirty = new Bounds();\n  this._tempb = new Bounds();\n}\n\nconst prototype = inherits(CanvasRenderer, Renderer),\n      base = Renderer.prototype;\n\nprototype.initialize = function(el, width, height, origin, scaleFactor, options) {\n  this._options = options || {};\n\n  this._canvas = this._options.externalContext\n    ? null\n    : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n  if (el && this._canvas) {\n    domClear(el, 0).appendChild(this._canvas);\n    this._canvas.setAttribute('class', 'marks');\n  }\n\n  // this method will invoke resize to size the canvas appropriately\n  return base.initialize.call(this, el, width, height, origin, scaleFactor);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n  base.resize.call(this, width, height, origin, scaleFactor);\n\n  if (this._canvas) {\n    // configure canvas size and transform\n    resize(this._canvas, this._width, this._height,\n      this._origin, this._scale, this._options.context);\n  } else {\n    // external context needs to be scaled and positioned to origin\n    const ctx = this._options.externalContext;\n    if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n    ctx.scale(this._scale, this._scale);\n    ctx.translate(this._origin[0], this._origin[1]);\n  }\n\n  this._redraw = true;\n  return this;\n};\n\nprototype.canvas = function() {\n  return this._canvas;\n};\n\nprototype.context = function() {\n  return this._options.externalContext\n    || (this._canvas ? this._canvas.getContext('2d') : null);\n};\n\nprototype.dirty = function(item) {\n  let b = this._tempb.clear().union(item.bounds),\n      g = item.mark.group;\n\n  while (g) {\n    b.translate(g.x || 0, g.y || 0);\n    g = g.mark.group;\n  }\n\n  this._dirty.union(b);\n};\n\nfunction clipToBounds(g, b, origin) {\n  // expand bounds by 1 pixel, then round to pixel boundaries\n  b.expand(1).round();\n\n  // align to base pixel grid in case of non-integer scaling (#2425)\n  if (g.pixelRatio % 1) {\n    b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n  }\n\n  // to avoid artifacts translate if origin has fractional pixels\n  b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n  // set clip path\n  g.beginPath();\n  g.rect(b.x1, b.y1, b.width(), b.height());\n  g.clip();\n\n  return b;\n}\n\nconst viewBounds = (origin, width, height) => new Bounds()\n  .set(0, 0, width, height)\n  .translate(-origin[0], -origin[1]);\n\nprototype._render = function(scene) {\n  const g = this.context(),\n        o = this._origin,\n        w = this._width,\n        h = this._height,\n        db = this._dirty,\n        vb = viewBounds(o, w, h);\n\n  // setup\n  g.save();\n  const b = this._redraw || db.empty()\n    ? (this._redraw = false, vb.expand(1))\n    : clipToBounds(g, vb.intersect(db), o);\n\n  this.clear(-o[0], -o[1], w, h);\n\n  // render\n  this.draw(g, scene, b);\n\n  // takedown\n  g.restore();\n  db.clear();\n\n  return this;\n};\n\nprototype.draw = function(ctx, scene, bounds) {\n  const mark = marks[scene.marktype];\n  if (scene.clip) clip(ctx, scene);\n  mark.draw.call(this, ctx, scene, bounds);\n  if (scene.clip) ctx.restore();\n};\n\nprototype.clear = function(x, y, w, h) {\n  const opt = this._options,\n         g = this.context();\n\n  if (opt.type !== 'pdf' && !opt.externalContext) {\n    // calling clear rect voids vector output in pdf mode\n    // and could remove external context content (#2615)\n    g.clearRect(x, y, w, h);\n  }\n\n  if (this._bgcolor != null) {\n    g.fillStyle = this._bgcolor;\n    g.fillRect(x, y, w, h);\n  }\n};\n","import Handler from './Handler';\nimport {domFind} from './util/dom';\nimport {HrefEvent, TooltipHideEvent, TooltipShowEvent} from './util/events';\nimport {inherits} from 'vega-util';\n\nexport default function SVGHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  const h = this;\n  h._hrefHandler = listener(h, (evt, item) => {\n    if (item && item.href) h.handleHref(evt, item, item.href);\n  });\n  h._tooltipHandler = listener(h, (evt, item) => {\n    h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n  });\n}\n\nconst prototype = inherits(SVGHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n  let svg = this._svg;\n  if (svg) {\n    svg.removeEventListener(HrefEvent, this._hrefHandler);\n    svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n    svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n  }\n  this._svg = svg = el && domFind(el, 'svg');\n  if (svg) {\n    svg.addEventListener(HrefEvent, this._hrefHandler);\n    svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n    svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n  }\n  return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype.canvas = function() {\n  return this._svg;\n};\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n  let item = evt.target.__data__;\n  item = Array.isArray(item) ? item[0] : item;\n  evt.vegaType = evt.type;\n  handler.call(context._obj, evt, item);\n};\n\n// add an event handler\nprototype.on = function(type, handler) {\n  const name = this.eventName(type),\n        h = this._handlers,\n        i = this._handlerIndex(h[name], type, handler);\n\n  if (i < 0) {\n    const x = {\n      type,\n      handler,\n      listener: listener(this, handler)\n    };\n\n    (h[name] || (h[name] = [])).push(x);\n    if (this._svg) {\n      this._svg.addEventListener(name, x.listener);\n    }\n  }\n\n  return this;\n};\n\n// remove an event handler\nprototype.off = function(type, handler) {\n  const name = this.eventName(type),\n        h = this._handlers[name],\n        i = this._handlerIndex(h, type, handler);\n\n  if (i >= 0) {\n    if (this._svg) {\n      this._svg.removeEventListener(name, h[i].listener);\n    }\n    h.splice(i, 1);\n  }\n\n  return this;\n};\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport { scaleOrdinal, tickFormat as tickFormat$1, scaleIdentity, scaleLinear, scaleLog, scalePow, scaleSqrt, scaleSymlog, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, scaleQuantile, scaleQuantize, scaleThreshold } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $ from 'd3-interpolate';\nimport { piecewise } from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n  const space = count - paddingInner + paddingOuter * 2;\n  return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n  return function (_) {\n    let lo = _[0],\n        hi = _[1],\n        t;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    return [scale.invert(lo), scale.invert(hi)];\n  };\n}\n\nfunction invertRangeExtent (scale) {\n  return function (_) {\n    const range = scale.range();\n    let lo = _[0],\n        hi = _[1],\n        min = -1,\n        max,\n        t,\n        i,\n        n;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    for (i = 0, n = range.length; i < n; ++i) {\n      if (range[i] >= lo && range[i] <= hi) {\n        if (min < 0) min = i;\n        max = i;\n      }\n    }\n\n    if (min < 0) return undefined;\n    lo = scale.invertExtent(range[min]);\n    hi = scale.invertExtent(range[max]);\n    return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n  };\n}\n\nfunction band() {\n  const scale = scaleOrdinal().unknown(undefined),\n        domain = scale.domain,\n        ordinalRange = scale.range;\n  let range$1 = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n  delete scale.unknown;\n\n  function rescale() {\n    const n = domain().length,\n          reverse = range$1[1] < range$1[0],\n          stop = range$1[1 - reverse],\n          space = bandSpace(n, paddingInner, paddingOuter);\n    let start = range$1[reverse - 0];\n    step = (stop - start) / (space || 1);\n\n    if (round) {\n      step = Math.floor(step);\n    }\n\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n\n    if (round) {\n      start = Math.round(start);\n      bandwidth = Math.round(bandwidth);\n    }\n\n    const values = range(n).map(i => start + step * i);\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain(_);\n      return rescale();\n    } else {\n      return domain();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range$1 = [+_[0], +_[1]];\n      return rescale();\n    } else {\n      return range$1.slice();\n    }\n  };\n\n  scale.rangeRound = function (_) {\n    range$1 = [+_[0], +_[1]];\n    round = true;\n    return rescale();\n  };\n\n  scale.bandwidth = function () {\n    return bandwidth;\n  };\n\n  scale.step = function () {\n    return step;\n  };\n\n  scale.round = function (_) {\n    if (arguments.length) {\n      round = !!_;\n      return rescale();\n    } else {\n      return round;\n    }\n  };\n\n  scale.padding = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      paddingInner = paddingOuter;\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingInner = function (_) {\n    if (arguments.length) {\n      paddingInner = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingOuter = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingOuter;\n    }\n  };\n\n  scale.align = function (_) {\n    if (arguments.length) {\n      align = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return align;\n    }\n  };\n\n  scale.invertRange = function (_) {\n    // bail if range has null or undefined values\n    if (_[0] == null || _[1] == null) return;\n    const reverse = range$1[1] < range$1[0],\n          values = reverse ? ordinalRange().reverse() : ordinalRange(),\n          n = values.length - 1;\n    let lo = +_[0],\n        hi = +_[1],\n        a,\n        b,\n        t; // bail if either range endpoint is invalid\n\n    if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n    a = Math.max(0, bisectRight(values, lo) - 1);\n    b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n    if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n    if (reverse) {\n      // map + swap\n      t = a;\n      a = n - b;\n      b = n - t;\n    }\n\n    return a > b ? undefined : domain().slice(a, b + 1);\n  };\n\n  scale.invert = function (_) {\n    const value = scale.invertRange([_, _]);\n    return value ? value[0] : value;\n  };\n\n  scale.copy = function () {\n    return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n  };\n\n  return rescale();\n}\n\nfunction pointish(scale) {\n  const copy = scale.copy;\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n\n  scale.copy = function () {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point() {\n  return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n  return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n  let domain = [],\n      range = [];\n\n  function scale(x) {\n    return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain = numbers(_);\n      return scale;\n    } else {\n      return domain.slice();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range = slice.call(_);\n      return scale;\n    } else {\n      return range.slice();\n    }\n  };\n\n  scale.tickFormat = function (count, specifier) {\n    return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n  };\n\n  scale.copy = function () {\n    return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n  };\n\n  return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n  const ctr = function scale() {\n    const s = constructor();\n\n    if (!s.invertRange) {\n      s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n    }\n\n    s.type = type;\n    return s;\n  };\n\n  ctr.metadata = toSet(array(metadata));\n  return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n  if (arguments.length > 1) {\n    scales[type] = create(type, scale, metadata);\n    return this;\n  } else {\n    return isValidScaleType(type) ? scales[type] : undefined;\n  }\n} // identity scale\n\nscale(Identity, scaleIdentity); // continuous scales\n\nscale(Linear, scaleLinear, Continuous);\nscale(Log, scaleLog, [Continuous, Log]);\nscale(Pow, scalePow, Continuous);\nscale(Sqrt, scaleSqrt, Continuous);\nscale(Symlog, scaleSymlog, Continuous);\nscale(Time, scaleTime, [Continuous, Temporal]);\nscale(UTC, scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(\"\".concat(Sequential, \"-\").concat(Linear), scaleSequential, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Log), scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Sequential, \"-\").concat(Pow), scaleSequentialPow, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Sqrt), scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Symlog), scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(\"\".concat(Diverging, \"-\").concat(Linear), scaleDiverging, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Log), scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Diverging, \"-\").concat(Pow), scaleDivergingPow, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Sqrt), scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Symlog), scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, scaleQuantize, Discretizing);\nscale(Threshold, scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n  return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n  const s = scales[key];\n  return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n  return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n  return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n  return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n  return hasType(key, Log);\n}\nfunction isTemporal(key) {\n  return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n  return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n  return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n  const start = range[0],\n        span = peek(range) - start;\n  return function (i) {\n    return interpolator(start + i * span);\n  };\n}\nfunction interpolateColors(colors, type, gamma) {\n  return piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n  const samples = new Array(count),\n        n = count + 1;\n\n  for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n  return samples;\n}\nfunction scaleCopy(scale) {\n  const t = scale.type,\n        s = scale.copy();\n  s.type = t;\n  return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n  const delta = max - min;\n  let i, t, s;\n\n  if (!delta || !Number.isFinite(delta)) {\n    return constant(0.5);\n  } else {\n    i = (t = scale$1.type).indexOf('-');\n    t = i < 0 ? t : t.slice(i + 1);\n    s = scale(t)().domain([min, max]).range([0, 1]);\n    scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n    return s;\n  }\n}\nfunction interpolate(type, gamma) {\n  const interp = $[method(type)];\n  return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n  return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n  blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n  greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n  greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n  oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n  purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n  reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n  blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n  bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n  greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n  orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n  purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n  purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n  purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n  redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n  yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n  yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n  yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n  blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n  brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n  purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n  purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n  redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n  redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n  yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n  redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n  redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n  pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n  spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n  viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n  magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n  inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n  plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n  cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n  rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n  sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n  turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n  browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n  tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n  teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n  warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n  goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n  goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n  goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n  lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n  lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n  lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n  lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n  lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n  darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n  darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n  darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n  darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n  darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n  category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n  category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n  category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n  category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n  tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n  tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n  accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n  dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n  paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n  pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n  pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n  set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n  set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n  set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n  const n = palette.length / 6 | 0,\n        c = new Array(n);\n\n  for (let i = 0; i < n;) {\n    c[i] = '#' + palette.slice(i * 6, ++i * 6);\n  }\n\n  return c;\n}\n\nfunction apply(_, f) {\n  for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n  name = name && name.toLowerCase();\n\n  if (arguments.length > 1) {\n    schemes[name] = scheme;\n    return this;\n  } else {\n    return schemes[name];\n  }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n  let step;\n\n  if (isNumber(count)) {\n    if (scale.bins) {\n      count = Math.max(count, scale.bins.length);\n    }\n\n    if (minStep != null) {\n      count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n    }\n  }\n\n  if (isObject(count)) {\n    step = count.step;\n    count = count.interval;\n  }\n\n  if (isString(count)) {\n    count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n    if (step) count = count.every(step);\n  }\n\n  return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n  let range = scale.range(),\n      lo = range[0],\n      hi = peek(range),\n      cmp = ascending;\n\n  if (lo > hi) {\n    range = hi;\n    hi = lo;\n    lo = range;\n    cmp = descending;\n  }\n\n  lo = Math.floor(lo);\n  hi = Math.ceil(hi); // filter ticks to valid values within the range\n  // additionally sort ticks in range order (#2579)\n\n  ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n  if (count > 0 && ticks.length > 1) {\n    const endpoints = [ticks[0], peek(ticks)];\n\n    while (ticks.length > count && ticks.length >= 3) {\n      ticks = ticks.filter((_, i) => !(i % 2));\n    }\n\n    if (ticks.length < 3) {\n      ticks = endpoints;\n    }\n  }\n\n  return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n  return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n *   specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n *   time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n  const type = scale.type;\n  let format = defaultFormatter;\n\n  if (type === Time || formatType === Time) {\n    format = locale.timeFormat(specifier);\n  } else if (type === UTC || formatType === UTC) {\n    format = locale.utcFormat(specifier);\n  } else if (isLogarithmic(type)) {\n    const varfmt = locale.formatFloat(specifier);\n\n    if (noSkip || scale.bins) {\n      format = varfmt;\n    } else {\n      const test = tickLog(scale, count, false);\n\n      format = _ => test(_) ? varfmt(_) : '';\n    }\n  } else if (scale.tickFormat) {\n    // if d3 scale has tickFormat, it must be continuous\n    const d = scale.domain();\n    format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n  } else if (specifier) {\n    format = locale.format(specifier);\n  }\n\n  return format;\n}\nfunction tickLog(scale, count, values) {\n  const ticks = tickValues(scale, count),\n        base = scale.base(),\n        logb = Math.log(base),\n        k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n  const test = d => {\n    let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n    if (i * base < base - 0.5) i *= base;\n    return i <= k;\n  };\n\n  return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'thresholds',\n  [Threshold]: 'domain'\n};\nconst formats = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n  return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n  const _ = scale[formats[scale.type]](),\n        n = _.length;\n\n  let d = n > 1 ? _[1] - _[0] : _[0],\n      i;\n\n  for (i = 1; i < n; ++i) {\n    d = Math.min(d, _[i] - _[i - 1]);\n  } // tickCount = 3 ticks times 10 for increased resolution\n\n\n  return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n  const values = [-Infinity].concat(thresholds);\n  values.max = +Infinity;\n  return values;\n}\n\nfunction binValues(bins) {\n  const values = bins.slice(0, -1);\n  values.max = peek(bins);\n  return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n  const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n  return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n  const limit = get(array[index + 1], get(array.max, +Infinity)),\n        lo = formatValue(value, format),\n        hi = formatValue(limit, format);\n  return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n  const domain = scale.domain(),\n        count = domain.length - 1;\n  let lo = +domain[0],\n      hi = +peek(domain),\n      span = hi - lo;\n\n  if (scale.type === Threshold) {\n    const adjust = count ? span / count : 0.1;\n    lo -= adjust;\n    hi += adjust;\n    span = hi - lo;\n  }\n\n  return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n  const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n  if (isString(specifier) && isTemporal(type)) {\n    specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n  }\n\n  return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n  opt = opt || {};\n  const max = Math.max(3, opt.maxlen || 7),\n        fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n  if (isDiscretizing(scale.type)) {\n    const v = labelValues(scale).slice(1).map(fmt),\n          n = v.length;\n    return \"\".concat(n, \" boundar\").concat(n === 1 ? 'y' : 'ies', \": \").concat(v.join(', '));\n  } // if scale domain is discrete, list values\n  else if (isDiscrete(scale.type)) {\n      const d = scale.domain(),\n            n = d.length,\n            v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n      return \"\".concat(n, \" value\").concat(n === 1 ? '' : 's', \": \").concat(v);\n    } // if scale domain is continuous, describe value range\n    else {\n        const d = scale.domain();\n        return \"values from \".concat(fmt(d[0]), \" to \").concat(fmt(peek(d)));\n      }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {domainCaption, isDiscrete} from 'vega-scale';\nimport {array, peek, toSet} from 'vega-util';\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n  [ARIA_ROLE]: role,\n  [ARIA_ROLEDESCRIPTION]: roledesc,\n  [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet([\n  'axis-domain',\n  'axis-grid',\n  'axis-label',\n  'axis-tick',\n  'axis-title',\n  'legend-band',\n  'legend-entry',\n  'legend-gradient',\n  'legend-label',\n  'legend-title',\n  'legend-symbol',\n  'title'\n]);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n  'axis': {desc: 'axis', caption: axisCaption},\n  'legend': {desc: 'legend', caption: legendCaption},\n  'title-text': {\n    desc: 'title',\n    caption: item => `Title text '${titleCaption(item)}'`\n  },\n  'title-subtitle': {\n    desc: 'subtitle',\n    caption: item => `Subtitle text '${titleCaption(item)}'`\n  }\n};\n\n// aria properties generated for mark item encoding channels\nexport const AriaEncode = {\n  ariaRole: ARIA_ROLE,\n  ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n  description: ARIA_LABEL\n};\n\nexport function ariaItemAttributes(emit, item) {\n  const hide = item.aria === false;\n  emit(ARIA_HIDDEN, hide || undefined);\n\n  if (hide || item.description == null) {\n    for (const prop in AriaEncode) {\n      emit(AriaEncode[prop], undefined);\n    }\n  } else {\n    const type = item.mark.marktype;\n    emit(\n      ARIA_LABEL,\n      item.description\n    );\n    emit(\n      ARIA_ROLE,\n      item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL)\n    );\n    emit(\n      ARIA_ROLEDESCRIPTION,\n      item.ariaRoleDescription || `${type} mark`\n    );\n  }\n}\n\nexport function ariaMarkAttributes(mark) {\n  return mark.aria === false ? { [ARIA_HIDDEN]: true }\n    : AriaIgnore[mark.role] ? null\n    : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role])\n    : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n  const type = mark.marktype;\n  const recurse = (\n    type === 'group' ||\n    type === 'text' ||\n    mark.items.some(_ => _.description != null && _.aria !== false)\n  );\n  return bundle(\n    recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL,\n    `${type} mark container`,\n    mark.description\n  );\n}\n\nfunction ariaGuide(mark, opt) {\n  try {\n    const item = mark.items[0],\n          caption = opt.caption || (() => '');\n    return bundle(\n      opt.role || GRAPHICS_SYMBOL,\n      opt.desc,\n      item.description || caption(item)\n    );\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction titleCaption(item) {\n  return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n  const datum = item.datum,\n        orient = item.orient,\n        title = datum.title ? extractTitle(item) : null,\n        ctx = item.context,\n        scale = ctx.scales[datum.scale].value,\n        locale = ctx.dataflow.locale(),\n        type = scale.type,\n        xy = (orient === 'left' || orient === 'right') ? 'Y' : 'X';\n\n  return `${xy}-axis`\n    + (title ? ` titled '${title}'` : '')\n    + ` for a ${isDiscrete(type) ? 'discrete' : type} scale`\n    + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction legendCaption(item) {\n  const datum = item.datum,\n        title = datum.title ? extractTitle(item) : null,\n        type = `${datum.type || ''} legend`.trim(),\n        scales = datum.scales,\n        props = Object.keys(scales),\n        ctx = item.context,\n        scale = ctx.scales[scales[props[0]]].value,\n        locale = ctx.dataflow.locale();\n\n  return capitalize(type)\n    + (title ? ` titled '${title}'` : '')\n    + ` for ${channelCaption(props)}`\n    + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction extractTitle(item) {\n  try {\n    return array(peek(item.items).items[0].text).join(' ');\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction channelCaption(props) {\n  props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n  return props.length < 2 ? props[0]\n    : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n  return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n","const attrText = val => (val + '')\n  .replace(/&/g, '&amp;')\n  .replace(/\"/g, '&quot;');\n\n/**\n * Generate string for an opening xml tag.\n * @param tag the name of the xml tag\n * @param attr hash of attribute name-value pairs to include\n * @param raw additional raw string to include in tag markup\n */\nexport function openTag(tag, attr, raw) {\n  var s = '<' + tag, key, val;\n  if (attr) {\n    for (key in attr) {\n      val = attr[key];\n      if (val != null) {\n        s += ' ' + key + '=\"' + attrText(val) + '\"';\n      }\n    }\n  }\n  if (raw) s += ' ' + raw;\n  return s + '>';\n}\n\n/**\n * Generate string for closing xml tag.\n * @param tag the name of the xml tag\n */\nexport function closeTag(tag) {\n  return '</' + tag + '>';\n}\n","export const styles = {\n  fill:             'fill',\n  fillOpacity:      'fill-opacity',\n  stroke:           'stroke',\n  strokeOpacity:    'stroke-opacity',\n  strokeWidth:      'stroke-width',\n  strokeCap:        'stroke-linecap',\n  strokeJoin:       'stroke-linejoin',\n  strokeDash:       'stroke-dasharray',\n  strokeDashOffset: 'stroke-dashoffset',\n  strokeMiterLimit: 'stroke-miterlimit',\n  opacity:          'opacity',\n  blend:            'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nexport const rootAttributes = {\n  'fill': 'none',\n  'stroke-miterlimit': 10\n};\n","import Renderer from './Renderer';\nimport {gradientRef, isGradient, patternPrefix} from './Gradient';\nimport marks from './marks/index';\nimport {ariaItemAttributes, ariaMarkAttributes} from './util/aria';\nimport {cssClass, domChild, domClear, domCreate} from './util/dom';\nimport {closeTag, openTag} from './util/tags';\nimport {fontFamily, fontSize, lineHeight, textLines, textValue} from './util/text';\nimport {visit} from './util/visit';\nimport clip from './util/svg/clip';\nimport metadata from './util/svg/metadata';\nimport {rootAttributes, styles} from './util/svg/styles';\nimport {inherits, isArray} from 'vega-util';\n\nconst RootIndex = 0,\n      ns = metadata.xmlns;\n\nexport default function SVGRenderer(loader) {\n  Renderer.call(this, loader);\n  this._dirtyID = 0;\n  this._dirty = [];\n  this._svg = null;\n  this._root = null;\n  this._defs = null;\n}\n\nvar prototype = inherits(SVGRenderer, Renderer);\nvar base = Renderer.prototype;\n\nprototype.initialize = function(el, width, height, padding) {\n  // create the svg definitions cache\n  this._defs = {\n    gradient: {},\n    clipping: {}\n  };\n\n  if (el) {\n    this._svg = domChild(el, 0, 'svg', ns);\n    this._svg.setAttribute('class', 'marks');\n    domClear(el, 1);\n\n    // set the svg root group\n    this._root = domChild(this._svg, RootIndex, 'g', ns);\n    for (const attr in rootAttributes) {\n      this._root.setAttribute(attr, rootAttributes[attr]);\n    }\n\n    // ensure no additional child elements\n    domClear(this._svg, RootIndex + 1);\n  }\n\n  // set background color if defined\n  this.background(this._bgcolor);\n\n  return base.initialize.call(this, el, width, height, padding);\n};\n\nprototype.background = function(bgcolor) {\n  if (arguments.length && this._svg) {\n    this._svg.style.setProperty('background-color', bgcolor);\n  }\n  return base.background.apply(this, arguments);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n  base.resize.call(this, width, height, origin, scaleFactor);\n\n  if (this._svg) {\n    this._svg.setAttribute('width', this._width * this._scale);\n    this._svg.setAttribute('height', this._height * this._scale);\n    this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height);\n    this._root.setAttribute('transform', 'translate(' + this._origin + ')');\n  }\n\n  this._dirty = [];\n\n  return this;\n};\n\nprototype.canvas = function() {\n  return this._svg;\n};\n\nprototype.svg = function() {\n  if (!this._svg) return null;\n\n  var attr = {\n    class:   'marks',\n    width:   this._width * this._scale,\n    height:  this._height * this._scale,\n    viewBox: '0 0 ' + this._width + ' ' + this._height\n  };\n  for (var key in metadata) {\n    attr[key] = metadata[key];\n  }\n\n  var bg = !this._bgcolor ? ''\n    : (openTag('rect', {\n        width:  this._width,\n        height: this._height,\n        fill:   this._bgcolor\n      }) + closeTag('rect'));\n\n  return openTag('svg', attr)\n    + (this._defs.el ? this._defs.el.outerHTML : '')\n    + bg\n    + this._root.outerHTML\n    + closeTag('svg');\n};\n\n\n// -- Render entry point --\n\nprototype._render = function(scene) {\n  // perform spot updates and re-render markup\n  if (this._dirtyCheck()) {\n    if (this._dirtyAll) this._resetDefs();\n    this.draw(this._root, scene);\n    domClear(this._root, 1);\n  }\n\n  this.updateDefs();\n\n  this._dirty = [];\n  ++this._dirtyID;\n\n  return this;\n};\n\n// -- Manage SVG definitions ('defs') block --\n\nprototype.updateDefs = function() {\n  const svg = this._svg,\n        defs = this._defs;\n\n  let el = defs.el,\n      index = 0;\n\n  for (const id in defs.gradient) {\n    if (!el) defs.el = (el = domChild(svg, RootIndex, 'defs', ns));\n    index = updateGradient(el, defs.gradient[id], index);\n  }\n\n  for (const id in defs.clipping) {\n    if (!el) defs.el = (el = domChild(svg, RootIndex, 'defs', ns));\n    index = updateClipping(el, defs.clipping[id], index);\n  }\n\n  // clean-up\n  if (el) {\n    index === 0\n      ? (svg.removeChild(el), defs.el = null)\n      : domClear(el, index);\n  }\n};\n\nfunction updateGradient(el, grad, index) {\n  var i, n, stop;\n\n  if (grad.gradient === 'radial') {\n    // SVG radial gradients automatically transform to normalized bbox\n    // coordinates, in a way that is cumbersome to replicate in canvas.\n    // We wrap the radial gradient in a pattern element, allowing us to\n    // maintain a circular gradient that matches what canvas provides.\n    var pt = domChild(el, index++, 'pattern', ns);\n    pt.setAttribute('id', patternPrefix + grad.id);\n    pt.setAttribute('viewBox', '0,0,1,1');\n    pt.setAttribute('width', '100%');\n    pt.setAttribute('height', '100%');\n    pt.setAttribute('preserveAspectRatio', 'xMidYMid slice');\n\n    pt = domChild(pt, 0, 'rect', ns);\n    pt.setAttribute('width', '1');\n    pt.setAttribute('height', '1');\n    pt.setAttribute('fill', 'url(' + href() + '#' + grad.id + ')');\n\n    el = domChild(el, index++, 'radialGradient', ns);\n    el.setAttribute('id', grad.id);\n    el.setAttribute('fx', grad.x1);\n    el.setAttribute('fy', grad.y1);\n    el.setAttribute('fr', grad.r1);\n    el.setAttribute('cx', grad.x2);\n    el.setAttribute('cy', grad.y2);\n    el.setAttribute( 'r', grad.r2);\n  } else {\n    el = domChild(el, index++, 'linearGradient', ns);\n    el.setAttribute('id', grad.id);\n    el.setAttribute('x1', grad.x1);\n    el.setAttribute('x2', grad.x2);\n    el.setAttribute('y1', grad.y1);\n    el.setAttribute('y2', grad.y2);\n  }\n\n  for (i=0, n=grad.stops.length; i<n; ++i) {\n    stop = domChild(el, i, 'stop', ns);\n    stop.setAttribute('offset', grad.stops[i].offset);\n    stop.setAttribute('stop-color', grad.stops[i].color);\n  }\n  domClear(el, i);\n\n  return index;\n}\n\nfunction updateClipping(el, clip, index) {\n  var mask;\n\n  el = domChild(el, index, 'clipPath', ns);\n  el.setAttribute('id', clip.id);\n\n  if (clip.path) {\n    mask = domChild(el, 0, 'path', ns);\n    mask.setAttribute('d', clip.path);\n  } else {\n    mask = domChild(el, 0, 'rect', ns);\n    mask.setAttribute('x', 0);\n    mask.setAttribute('y', 0);\n    mask.setAttribute('width', clip.width);\n    mask.setAttribute('height', clip.height);\n  }\n  domClear(el, 1);\n\n  return index + 1;\n}\n\nprototype._resetDefs = function() {\n  var def = this._defs;\n  def.gradient = {};\n  def.clipping = {};\n};\n\n\n// -- Manage rendering of items marked as dirty --\n\nprototype.dirty = function(item) {\n  if (item.dirty !== this._dirtyID) {\n    item.dirty = this._dirtyID;\n    this._dirty.push(item);\n  }\n};\n\nprototype.isDirty = function(item) {\n  return this._dirtyAll\n    || !item._svg\n    || item.dirty === this._dirtyID;\n};\n\nprototype._dirtyCheck = function() {\n  this._dirtyAll = true;\n  var items = this._dirty;\n  if (!items.length || !this._dirtyID) return true;\n\n  var id = ++this._dirtyID,\n      item, mark, type, mdef, i, n, o;\n\n  for (i=0, n=items.length; i<n; ++i) {\n    item = items[i];\n    mark = item.mark;\n\n    if (mark.marktype !== type) {\n      // memoize mark instance lookup\n      type = mark.marktype;\n      mdef = marks[type];\n    }\n\n    if (mark.zdirty && mark.dirty !== id) {\n      this._dirtyAll = false;\n      dirtyParents(item, id);\n      mark.items.forEach(function(i) { i.dirty = id; });\n    }\n    if (mark.zdirty) continue; // handle in standard drawing pass\n\n    if (item.exit) { // EXIT\n      if (mdef.nested && mark.items.length) {\n        // if nested mark with remaining points, update instead\n        o = mark.items[0];\n        if (o._svg) this._update(mdef, o._svg, o);\n      } else if (item._svg) {\n        // otherwise remove from DOM\n        o = item._svg.parentNode;\n        if (o) o.removeChild(item._svg);\n      }\n      item._svg = null;\n      continue;\n    }\n\n    item = (mdef.nested ? mark.items[0] : item);\n    if (item._update === id) continue; // already visited\n\n    if (!item._svg || !item._svg.ownerSVGElement) {\n      // ENTER\n      this._dirtyAll = false;\n      dirtyParents(item, id);\n    } else {\n      // IN-PLACE UPDATE\n      this._update(mdef, item._svg, item);\n    }\n    item._update = id;\n  }\n  return !this._dirtyAll;\n};\n\nfunction dirtyParents(item, id) {\n  for (; item && item.dirty !== id; item=item.mark.group) {\n    item.dirty = id;\n    if (item.mark && item.mark.dirty !== id) {\n      item.mark.dirty = id;\n    } else return;\n  }\n}\n\n\n// -- Construct & maintain scenegraph to SVG mapping ---\n\n// Draw a mark container.\nprototype.draw = function(el, scene, prev) {\n  if (!this.isDirty(scene)) return scene._svg;\n\n  var svg = this._svg,\n      mdef = marks[scene.marktype],\n      events = scene.interactive === false ? 'none' : null,\n      isGroup = mdef.tag === 'g',\n      sibling = null,\n      i = 0,\n      parent;\n\n  parent = bind(scene, el, prev, 'g', svg);\n  parent.setAttribute('class', cssClass(scene));\n\n  // apply aria attributes to parent container element\n  const aria = ariaMarkAttributes(scene);\n  for (const key in aria) setAttribute(parent, key, aria[key]);\n\n  if (!isGroup) {\n    setAttribute(parent, 'pointer-events', events);\n  }\n  setAttribute(parent, 'clip-path',\n    scene.clip ? clip(this, scene, scene.group) : null);\n\n  const process = item => {\n    const dirty = this.isDirty(item),\n          node = bind(item, parent, sibling, mdef.tag, svg);\n\n    if (dirty) {\n      this._update(mdef, node, item);\n      if (isGroup) recurse(this, node, item);\n    }\n\n    sibling = node;\n    ++i;\n  };\n\n  if (mdef.nested) {\n    if (scene.items.length) process(scene.items[0]);\n  } else {\n    visit(scene, process);\n  }\n\n  domClear(parent, i);\n  return parent;\n};\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group) {\n  el = el.lastChild.previousSibling;\n  let prev, idx = 0;\n\n  visit(group, item => {\n    prev = renderer.draw(el, item, prev);\n    ++idx;\n  });\n\n  // remove any extraneous DOM elements\n  domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n  let node = item._svg, doc;\n\n  // create a new dom node if needed\n  if (!node) {\n    doc = el.ownerDocument;\n    node = domCreate(doc, tag, ns);\n    item._svg = node;\n\n    if (item.mark) {\n      node.__data__ = item;\n      node.__values__ = {fill: 'default'};\n\n      // if group, create background, content, and foreground elements\n      if (tag === 'g') {\n        const bg = domCreate(doc, 'path', ns);\n        node.appendChild(bg);\n        bg.__data__ = item;\n\n        const cg = domCreate(doc, 'g', ns);\n        node.appendChild(cg);\n        cg.__data__ = item;\n\n        const fg = domCreate(doc, 'path', ns);\n        node.appendChild(fg);\n        fg.__data__ = item;\n        fg.__values__ = {fill: 'default'};\n      }\n    }\n  }\n\n  // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n  if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n    el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n  }\n\n  return node;\n}\n\nfunction siblingCheck(node, sibling) {\n  return node.parentNode\n    && node.parentNode.childNodes.length > 1\n    && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n\n// -- Set attributes & styles on SVG elements ---\n\nvar element = null, // temp var for current SVG element\n    values = null;  // temp var for current values hash\n\n// Extra configuration for certain mark types\nvar mark_extras = {\n  group: function(mdef, el, item) {\n    const fg = element = el.childNodes[2];\n    values = fg.__values__;\n    mdef.foreground(emit, item, this);\n\n    values = el.__values__; // use parent's values hash\n    element = el.childNodes[1];\n    mdef.content(emit, item, this);\n\n    const bg = element = el.childNodes[0];\n    mdef.background(emit, item, this);\n\n    const value = item.mark.interactive === false ? 'none' : null;\n    if (value !== values.events) {\n      setAttribute(fg, 'pointer-events', value);\n      setAttribute(bg, 'pointer-events', value);\n      values.events = value;\n    }\n\n    if (item.strokeForeground && item.stroke) {\n      const fill = item.fill;\n      setAttribute(fg, 'display', null);\n\n      // set style of background\n      this.style(bg, item);\n      setAttribute(bg, 'stroke', null);\n\n      // set style of foreground\n      if (fill) item.fill = null;\n      values = fg.__values__;\n      this.style(fg, item);\n      if (fill) item.fill = fill;\n\n      // leave element null to prevent downstream styling\n      element = null;\n    } else {\n      // ensure foreground is ignored\n      setAttribute(fg, 'display', 'none');\n    }\n  },\n  image: function(mdef, el, item) {\n    if (item.smooth === false) {\n      setStyle(el, 'image-rendering', 'optimizeSpeed');\n      setStyle(el, 'image-rendering', 'pixelated');\n    } else {\n      setStyle(el, 'image-rendering', null);\n    }\n  },\n  text: function(mdef, el, item) {\n    let tl = textLines(item),\n        key, value, doc, lh;\n\n    if (isArray(tl)) {\n      // multi-line text\n      value = tl.map(_ => textValue(item, _));\n      key = value.join('\\n'); // content cache key\n\n      if (key !== values.text) {\n        domClear(el, 0);\n        doc = el.ownerDocument;\n        lh = lineHeight(item);\n        value.forEach((t, i) => {\n          const ts = domCreate(doc, 'tspan', ns);\n          ts.__data__ = item; // data binding\n          ts.textContent = t;\n          if (i) {\n            ts.setAttribute('x', 0);\n            ts.setAttribute('dy', lh);\n          }\n          el.appendChild(ts);\n        });\n        values.text = key;\n      }\n    } else {\n      // single-line text\n      value = textValue(item, tl);\n      if (value !== values.text) {\n        el.textContent = value;\n        values.text = value;\n      }\n    }\n\n    setAttribute(el, 'font-family', fontFamily(item));\n    setAttribute(el, 'font-size', fontSize(item) + 'px');\n    setAttribute(el, 'font-style', item.fontStyle);\n    setAttribute(el, 'font-variant', item.fontVariant);\n    setAttribute(el, 'font-weight', item.fontWeight);\n  }\n};\n\nfunction setStyle(el, name, value) {\n  if (value !== values[name]) {\n    if (value == null) {\n      el.style.removeProperty(name);\n    } else {\n      el.style.setProperty(name, value + '');\n    }\n    values[name] = value;\n  }\n}\n\nprototype._update = function(mdef, el, item) {\n  // set dom element and values cache\n  // provides access to emit method\n  element = el;\n  values = el.__values__;\n\n  // apply aria-specific properties\n  ariaItemAttributes(emit, item);\n\n  // apply svg attributes\n  mdef.attr(emit, item, this);\n\n  // some marks need special treatment\n  const extra = mark_extras[mdef.type];\n  if (extra) extra.call(this, mdef, el, item);\n\n  // apply svg style attributes\n  // note: element may be modified by 'extra' method\n  if (element) this.style(element, item);\n};\n\nfunction emit(name, value, ns) {\n  // early exit if value is unchanged\n  if (value === values[name]) return;\n\n  // use appropriate method given namespace (ns)\n  if (ns) {\n    setAttributeNS(element, name, value, ns);\n  } else {\n    setAttribute(element, name, value);\n  }\n\n  // note current value for future comparison\n  values[name] = value;\n}\n\nfunction setAttribute(el, name, value) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttribute(name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttribute(name);\n  }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttributeNS(ns, name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttributeNS(ns, name);\n  }\n}\n\nprototype.style = function(el, o) {\n  if (o == null) return;\n\n  for (const prop in styles) {\n    let value = prop === 'font' ? fontFamily(o) : o[prop];\n    if (value === values[prop]) continue;\n\n    const name = styles[prop];\n    if (value == null) {\n      el.removeAttribute(name);\n    } else {\n      if (isGradient(value)) {\n        value = gradientRef(value, this._defs.gradient, href());\n      }\n      el.setAttribute(name, value + '');\n    }\n\n    values[prop] = value;\n  }\n};\n\nfunction href() {\n  let loc;\n  return typeof window === 'undefined' ? ''\n    : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length)\n    : loc.href;\n}\n","import Renderer from './Renderer';\nimport {gradientRef, isGradient, patternPrefix} from './Gradient';\nimport marks from './marks/index';\nimport {ariaItemAttributes, ariaMarkAttributes} from './util/aria';\nimport {cssClass} from './util/dom';\nimport {closeTag, openTag} from './util/tags';\nimport {fontFamily, fontSize, lineHeight, textLines, textValue} from './util/text';\nimport {visit} from './util/visit';\nimport clip from './util/svg/clip';\nimport metadata from './util/svg/metadata';\nimport {rootAttributes, styles} from './util/svg/styles';\nimport {extend, inherits, isArray} from 'vega-util';\n\nexport default function SVGStringRenderer(loader) {\n  Renderer.call(this, loader);\n\n  this._text = {\n    head: '',\n    bg:   '',\n    root: '',\n    foot: '',\n    defs: '',\n    body: ''\n  };\n\n  this._defs = {\n    gradient: {},\n    clipping: {}\n  };\n}\n\nvar prototype = inherits(SVGStringRenderer, Renderer);\nvar base = Renderer.prototype;\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n  base.resize.call(this, width, height, origin, scaleFactor);\n  var o = this._origin,\n      t = this._text;\n\n  var attr = {\n    class:   'marks',\n    width:   this._width * this._scale,\n    height:  this._height * this._scale,\n    viewBox: '0 0 ' + this._width + ' ' + this._height\n  };\n  for (var key in metadata) {\n    attr[key] = metadata[key];\n  }\n\n  t.head = openTag('svg', attr);\n\n  var bg = this._bgcolor;\n  if (bg === 'transparent' || bg === 'none') bg = null;\n\n  if (bg) {\n    t.bg = openTag('rect', {\n      width:  this._width,\n      height: this._height,\n      fill:   bg\n    }) + closeTag('rect');\n  } else {\n    t.bg = '';\n  }\n\n  t.root = openTag('g', extend(\n    {}, rootAttributes, {transform: 'translate(' + o + ')'}\n  ));\n\n  t.foot = closeTag('g') + closeTag('svg');\n\n  return this;\n};\n\nprototype.background = function() {\n  var rv = base.background.apply(this, arguments);\n  if (arguments.length && this._text.head) {\n    this.resize(this._width, this._height, this._origin, this._scale);\n  }\n  return rv;\n};\n\nprototype.svg = function() {\n  var t = this._text;\n  return t.head + t.defs + t.bg + t.root + t.body + t.foot;\n};\n\nprototype._render = function(scene) {\n  this._text.body = this.mark(scene);\n  this._text.defs = this.buildDefs();\n  return this;\n};\n\nprototype.buildDefs = function() {\n  let defs = '', tag;\n\n  for (const id in this._defs.gradient) {\n    const def = this._defs.gradient[id],\n          stops = def.stops;\n\n    if (def.gradient === 'radial') {\n      // SVG radial gradients automatically transform to normalized bbox\n      // coordinates, in a way that is cumbersome to replicate in canvas.\n      // We wrap the radial gradient in a pattern element, allowing us to\n      // maintain a circular gradient that matches what canvas provides.\n\n      defs += openTag(tag = 'pattern', {\n        id: patternPrefix + id,\n        viewBox: '0,0,1,1',\n        width: '100%',\n        height: '100%',\n        preserveAspectRatio: 'xMidYMid slice'\n      });\n\n      defs += openTag('rect', {\n        width:  '1',\n        height: '1',\n        fill:   'url(#' + id + ')'\n      }) + closeTag('rect');\n\n      defs += closeTag(tag);\n\n      defs += openTag(tag = 'radialGradient', {\n        id: id,\n        fx: def.x1,\n        fy: def.y1,\n        fr: def.r1,\n        cx: def.x2,\n        cy: def.y2,\n         r: def.r2\n      });\n    } else {\n      defs += openTag(tag = 'linearGradient', {\n        id: id,\n        x1: def.x1,\n        x2: def.x2,\n        y1: def.y1,\n        y2: def.y2\n      });\n    }\n\n    for (let i = 0; i < stops.length; ++i) {\n      defs += openTag('stop', {\n        offset: stops[i].offset,\n        'stop-color': stops[i].color\n      }) + closeTag('stop');\n    }\n\n    defs += closeTag(tag);\n  }\n\n  for (const id in this._defs.clipping) {\n    const def = this._defs.clipping[id];\n\n    defs += openTag('clipPath', {id: id});\n\n    if (def.path) {\n      defs += openTag('path', {\n        d: def.path\n      }) + closeTag('path');\n    } else {\n      defs += openTag('rect', {\n        x: 0,\n        y: 0,\n        width: def.width,\n        height: def.height\n      }) + closeTag('rect');\n    }\n\n    defs += closeTag('clipPath');\n  }\n\n  return defs ? (openTag('defs') + defs + closeTag('defs')) : '';\n};\n\nprototype.attr = function(scene, item, attrs, tag) {\n  const object = {},\n        emit = (name, value, ns, prefixed) => {\n          object[prefixed || name] = value;\n        };\n\n  // apply mark specific attributes\n  if (Array.isArray(attrs)) {\n    attrs.forEach(fn => fn(emit, item, this));\n  } else {\n    attrs(emit, item, this);\n  }\n\n  // apply style attributes\n  if (tag) {\n    applyStyles(object, item, scene, tag, this._defs);\n  }\n\n  return object;\n};\n\nprototype.href = function(item) {\n  var that = this,\n      href = item.href,\n      attr;\n\n  if (href) {\n    if (attr = that._hrefs && that._hrefs[href]) {\n      return attr;\n    } else {\n      that.sanitizeURL(href).then(attr => {\n        // rewrite to use xlink namespace\n        // note that this will be deprecated in SVG 2.0\n        attr['xlink:href'] = attr.href;\n        attr.href = null;\n        (that._hrefs || (that._hrefs = {}))[href] = attr;\n      });\n    }\n  }\n  return null;\n};\n\nprototype.mark = function(scene) {\n  const mdef = marks[scene.marktype],\n        tag  = mdef.tag,\n        attrList = [ariaItemAttributes, mdef.attr];\n\n  let str = '';\n\n  // render opening group tag\n  str += openTag('g', extend(\n    {\n      'class': cssClass(scene),\n      'clip-path': scene.clip ? clip(this, scene, scene.group) : null\n    },\n    ariaMarkAttributes(scene),\n    {\n      'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n    }\n  ));\n\n  // render contained elements\n  const process = item => {\n    const href = this.href(item);\n    if (href) str += openTag('a', href);\n\n    str += openTag(\n      tag,\n      this.attr(scene, item, attrList, tag !== 'g' ? tag : null)\n    );\n\n    if (tag === 'text') {\n      const tl = textLines(item);\n      if (isArray(tl)) {\n        // multi-line text\n        const attrs = {x: 0, dy: lineHeight(item)};\n        for (let i=0; i<tl.length; ++i) {\n          str += openTag('tspan', i ? attrs: null)\n            + escape_text(textValue(item, tl[i]))\n            + closeTag('tspan');\n        }\n      } else {\n        // single-line text\n        str += escape_text(textValue(item, tl));\n      }\n    } else if (tag === 'g') {\n      const fore = item.strokeForeground,\n            fill = item.fill,\n            stroke = item.stroke;\n\n      if (fore && stroke) {\n        item.stroke = null;\n      }\n\n      str += openTag(\n        'path',\n        this.attr(scene, item, mdef.background, 'bgrect')\n      ) + closeTag('path');\n\n      str += openTag('g', this.attr(scene, item, mdef.content))\n        + this.markGroup(item)\n        + closeTag('g');\n\n      if (fore && stroke) {\n        if (fill) item.fill = null;\n        item.stroke = stroke;\n\n        str += openTag(\n          'path',\n          this.attr(scene, item, mdef.foreground, 'bgrect')\n        ) + closeTag('path');\n\n        if (fill) item.fill = fill;\n      } else {\n        str += openTag(\n          'path',\n          this.attr(scene, item, mdef.foreground, 'bgfore')\n        ) + closeTag('path');\n      }\n    }\n\n    str += closeTag(tag);\n    if (href) str += closeTag('a');\n  };\n\n  if (mdef.nested) {\n    if (scene.items && scene.items.length) process(scene.items[0]);\n  } else {\n    visit(scene, process);\n  }\n\n  // render closing group tag\n  return str + closeTag('g');\n};\n\nprototype.markGroup = function(scene) {\n  let str = '';\n  visit(scene, item => { str += this.mark(item); });\n  return str;\n};\n\nfunction applyStyles(s, item, scene, tag, defs) {\n  if (item == null) return s;\n\n  if (tag === 'bgrect' && scene.interactive === false) {\n    s['pointer-events'] = 'none';\n  }\n\n  if (tag === 'bgfore') {\n    if (scene.interactive === false) {\n      s['pointer-events'] = 'none';\n    }\n    s.display = 'none';\n    if (item.fill !== null) return s;\n  }\n\n  if (tag === 'image' && item.smooth === false) {\n    s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n  }\n\n  if (tag === 'text') {\n    s['font-family'] = fontFamily(item);\n    s['font-size'] = fontSize(item) + 'px';\n    if (item.fontStyle) s['font-style'] = item.fontStyle;\n    if (item.fontVariant) s['font-variant'] = item.fontVariant;\n    if (item.fontWeight) s['font-weight'] = item.fontWeight;\n  }\n\n  for (const prop in styles) {\n    let value = item[prop];\n    const name = styles[prop];\n\n    if (value === 'transparent' && (name === 'fill' || name === 'stroke')) {\n      // transparent is not a legal SVG value\n      // we can skip it to rely on default 'none' instead\n    } else if (value != null) {\n      if (isGradient(value)) {\n        value = gradientRef(value, defs.gradient, '');\n      }\n      s[name] = value;\n    }\n  }\n\n  return s;\n}\n\nfunction escape_text(s) {\n  return s.replace(/&/g, '&amp;')\n          .replace(/</g, '&lt;')\n          .replace(/>/g, '&gt;');\n}\n","import CanvasHandler from './CanvasHandler';\nimport CanvasRenderer from './CanvasRenderer';\nimport SVGHandler from './SVGHandler';\nimport SVGRenderer from './SVGRenderer';\nimport SVGStringRenderer from './SVGStringRenderer';\n\nvar Canvas = 'canvas';\nvar PNG = 'png';\nvar SVG = 'svg';\nvar None = 'none';\n\nexport var RenderType = {\n  Canvas: Canvas,\n  PNG:    PNG,\n  SVG:    SVG,\n  None:   None\n};\n\nvar modules = {};\n\nmodules[Canvas] = modules[PNG] = {\n  renderer: CanvasRenderer,\n  headless: CanvasRenderer,\n  handler:  CanvasHandler\n};\n\nmodules[SVG] = {\n  renderer: SVGRenderer,\n  headless: SVGStringRenderer,\n  handler:  SVGHandler\n};\n\nmodules[None] = {};\n\nexport function renderModule(name, _) {\n  name = String(name || '').toLowerCase();\n  if (arguments.length > 1) {\n    modules[name] = _;\n    return this;\n  } else {\n    return modules[name];\n  }\n}\n","import Marks from './marks/index';\nimport {error} from 'vega-util';\nimport Bounds from './Bounds';\n\nexport function intersect(scene, bounds, filter) {\n  const hits = [], // intersection results\n        box = new Bounds().union(bounds), // defensive copy\n        type = scene.marktype;\n\n  return type ? intersectMark(scene, box, filter, hits)\n    : type === 'group' ? intersectGroup(scene, box, filter, hits)\n    : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n  if (visitMark(mark, box, filter)) {\n    const items = mark.items,\n          type = mark.marktype,\n          n = items.length;\n\n    let i = 0;\n\n    if (type === 'group') {\n      for (; i<n; ++i) {\n        intersectGroup(items[i], box, filter, hits);\n      }\n    } else {\n      for (const test = Marks[type].isect; i<n; ++i) {\n        let item = items[i];\n        if (intersectItem(item, box, test)) hits.push(item);\n      }\n    }\n  }\n  return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n  // process if bounds intersect and if\n  // (1) mark is a group mark (so we must recurse), or\n  // (2) mark is interactive and passes filter\n  return mark.bounds && box.intersects(mark.bounds) && (\n    mark.marktype === 'group' ||\n    mark.interactive !== false && (!filter || filter(mark))\n  );\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n  // test intersect against group\n  // skip groups by default unless filter says otherwise\n  if ((filter && filter(group.mark)) &&\n      intersectItem(group, box, Marks.group.isect)) {\n    hits.push(group);\n  }\n\n  // recursively test children marks\n  // translate box to group coordinate space\n  const marks = group.items,\n        n = marks && marks.length;\n\n  if (n) {\n    const x = group.x || 0,\n          y = group.y || 0;\n    box.translate(-x, -y);\n    for (let i=0; i<n; ++i) {\n      intersectMark(marks[i], box, filter, hits);\n    }\n    box.translate(x, y);\n  }\n\n  return hits;\n}\n\nfunction intersectItem(item, box, test) {\n  // test bounds enclosure, bounds intersection, then detailed test\n  const bounds = item.bounds;\n  return box.encloses(bounds) || (box.intersects(bounds) && test(item, box));\n}\n\n","import Bounds from '../Bounds';\nimport boundContext from './boundContext';\nimport {isFunction} from 'vega-util';\n\nvar clipBounds = new Bounds();\n\nexport default function(mark) {\n  var clip = mark.clip;\n\n  if (isFunction(clip)) {\n    clip(boundContext(clipBounds.clear()));\n  } else if (clip) {\n    clipBounds.set(0, 0, mark.group.width, mark.group.height);\n  } else return;\n\n  mark.bounds.intersect(clipBounds);\n}\n","import pathParse from '../path/parse';\nimport {isNumber, isObject} from 'vega-util';\n\nvar TOLERANCE = 1e-9;\n\nexport function sceneEqual(a, b, key) {\n  return (a === b) ? true\n    : (key === 'path') ? pathEqual(a, b)\n    : (a instanceof Date && b instanceof Date) ? +a === +b\n    : (isNumber(a) && isNumber(b)) ? Math.abs(a - b) <= TOLERANCE\n    : (!a || !b || !isObject(a) && !isObject(b)) ? a == b\n    : (a == null || b == null) ? false\n    : objectEqual(a, b);\n}\n\nexport function pathEqual(a, b) {\n  return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n  var ka = Object.keys(a),\n      kb = Object.keys(b),\n      key, i;\n\n  if (ka.length !== kb.length) return false;\n\n  ka.sort();\n  kb.sort();\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) return false;\n  }\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!sceneEqual(a[key], b[key], key)) return false;\n  }\n\n  return typeof a === typeof b;\n}\n","import {resetSVGGradientId} from './src/Gradient';\nimport {resetSVGClipId} from './src/util/svg/clip';\n\nexport {default as Bounds} from './src/Bounds';\nexport {default as Gradient} from './src/Gradient';\nexport {default as GroupItem} from './src/GroupItem';\nexport {default as ResourceLoader} from './src/ResourceLoader';\nexport {default as Item} from './src/Item';\nexport {default as Scenegraph} from './src/Scenegraph';\n\nexport {default as Handler} from './src/Handler';\nexport {default as Renderer} from './src/Renderer';\nexport {default as CanvasHandler} from './src/CanvasHandler';\nexport {default as CanvasRenderer} from './src/CanvasRenderer';\nexport {default as SVGHandler} from './src/SVGHandler';\nexport {default as SVGRenderer} from './src/SVGRenderer';\nexport {default as SVGStringRenderer} from './src/SVGStringRenderer';\nexport {RenderType, renderModule} from './src/modules';\nexport {intersect} from './src/intersect';\n\nexport {default as Marks} from './src/marks/index';\n\nexport {default as boundClip} from './src/bound/boundClip';\nexport {default as boundContext} from './src/bound/boundContext';\nexport {default as boundStroke} from './src/bound/boundStroke';\nexport {default as boundItem} from './src/bound/boundItem';\nexport {default as boundMark} from './src/bound/boundMark';\n\nexport {default as pathCurves} from './src/path/curves';\nexport {default as pathSymbols} from './src/path/symbols';\nexport {default as pathRectangle} from './src/path/rectangle';\nexport {default as pathTrail} from './src/path/trail';\nexport {default as pathParse} from './src/path/parse';\nexport {default as pathRender} from './src/path/render';\n\nexport {default as point} from './src/util/point';\nexport {domCreate, domFind, domChild, domClear} from './src/util/dom';\nexport {openTag, closeTag} from './src/util/tags';\nexport {\n  font,\n  fontFamily,\n  fontSize,\n  lineHeight,\n  multiLineOffset,\n  textMetrics\n} from './src/util/text';\n\nexport {sceneEqual, pathEqual} from './src/util/equal';\nexport {sceneToJSON, sceneFromJSON} from './src/util/serialize';\nexport {\n  intersectPath,\n  intersectPoint,\n  intersectRule,\n  intersectBoxLine\n} from './src/util/intersect';\nexport {\n  zorder as sceneZOrder,\n  visit as sceneVisit,\n  pickVisit as scenePickVisit\n} from './src/util/visit';\n\n// deprecated, remove in next major version\nexport {resetSVGClipId} from './src/util/svg/clip';\n\nexport function resetSVGDefIds() {\n  resetSVGClipId();\n  resetSVGGradientId();\n}\n","export default function(count, paddingInner, paddingOuter) {\n  const space = count - paddingInner + paddingOuter * 2;\n  return count ? (space > 0 ? space : 1) : 0;\n}\n","export const Identity = 'identity';\n\nexport const Linear = 'linear';\nexport const Log = 'log';\nexport const Pow = 'pow';\nexport const Sqrt = 'sqrt';\nexport const Symlog = 'symlog';\n\nexport const Time = 'time';\nexport const UTC = 'utc';\n\nexport const Sequential = 'sequential';\nexport const Diverging = 'diverging';\n\nexport const Quantile = 'quantile';\nexport const Quantize = 'quantize';\nexport const Threshold = 'threshold';\n\nexport const Ordinal = 'ordinal';\nexport const Point = 'point';\nexport const Band = 'band';\nexport const BinOrdinal = 'bin-ordinal';\n\n// categories\nexport const Continuous = 'continuous';\nexport const Discrete = 'discrete';\nexport const Discretizing = 'discretizing';\nexport const Interpolating = 'interpolating';\nexport const Temporal = 'temporal';\n","function accessor (fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\nfunction accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function (obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n\n    return obj;\n  };\n};\n\nfunction error (message) {\n  throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n  const path = [],\n        n = p.length;\n  let q = null,\n      b = 0,\n      s = '',\n      i,\n      j,\n      c;\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i = j = 0; j < n; ++j) {\n    c = p[j];\n\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n\nfunction field (field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log(method, level, input) {\n  const args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n  let level = _ || None;\n  return {\n    level(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n\n    error() {\n      if (level >= Error$1) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n\n    warn() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n\n    info() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n\n    debug() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n\n  };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n  return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (const key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        const r = key === 'legend' ? {\n          layout: 1\n        } : key === 'style' ? true : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n\n    return out;\n  }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n  let k, o;\n\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : output[key] = {};\n\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n  const map = {},\n        out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n\nfunction peek (array) {\n  return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n  return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log$1 = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        dd = (d1 - d0) * delta;\n  return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log$1(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n  return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n  const sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n  return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n  let lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n\n  span = hi - lo;\n  return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n  return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n  const ord = [],\n        get = [],\n        fmap = {},\n        gen = opt.comparator || comparator;\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n  return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n\n  return function (a, b) {\n    let f,\n        c = 0,\n        i = -1;\n\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = ascending(f(a), f(b));\n    }\n\n    return c * orders[i];\n  };\n};\n\nfunction constant (_) {\n  return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n  let tid;\n  return e => {\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(() => (handler(e), tid = null), delay);\n  };\n}\n\nfunction extend (_) {\n  for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n    x = arguments[i];\n\n    for (k in x) {\n      _[k] = x[k];\n    }\n  }\n\n  return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n  let i = 0,\n      n,\n      v,\n      min,\n      max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nfunction extentIndex (array, f) {\n  const n = array.length;\n  let i = -1,\n      a,\n      b,\n      c,\n      u,\n      v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n  return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n  let obj = {},\n      test;\n\n  function has$1(key) {\n    return has(obj, key) && obj[key] !== NULL;\n  }\n\n  const map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has$1,\n\n    get(key) {\n      return has$1(key) ? obj[key] : undefined;\n    },\n\n    set(key, value) {\n      if (!has$1(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n\n      obj[key] = value;\n      return this;\n    },\n\n    delete(key) {\n      if (has$1(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n\n      return this;\n    },\n\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n\n    clean() {\n      const next = {};\n      let size = 0;\n\n      for (const key in obj) {\n        const value = obj[key];\n\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n\n      map.size = size;\n      map.empty = 0;\n      map.object = obj = next;\n    }\n\n  };\n  if (input) Object.keys(input).forEach(key => {\n    map.set(key, input[key]);\n  });\n  return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n  const t = +threshold;\n  let a = range[0],\n      b = peek(range),\n      l; // swap endpoints if range is reversed\n\n  if (b < a) {\n    l = a;\n    a = b;\n    b = l;\n  } // compare value to endpoints\n\n\n  l = Math.abs(value - a);\n  const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n  const proto = child.prototype = Object.create(parent.prototype);\n  proto.constructor = child;\n  return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n  let r0 = range[0],\n      r1 = range[range.length - 1],\n      t;\n\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n\n  left = left === undefined || left;\n  right = right === undefined || right;\n  return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n  return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n  return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n  return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n  return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n  if (fields) {\n    fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n\n  let fn;\n\n  if (!len) {\n    fn = function () {\n      return '';\n    };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n\n    fn = function (_) {\n      return '' + get(_);\n    };\n  } else {\n    const get = fields.map(map);\n\n    fn = function (_) {\n      let s = '' + get[0](_),\n          i = 0;\n\n      while (++i < len) s += '|' + get[i](_);\n\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n\n    return curr[key] = value;\n  };\n\n  clear();\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n    set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n  };\n}\n\nfunction merge (compare, array0, array1, output) {\n  const n0 = array0.length,\n        n1 = array1.length;\n  if (!n1) return array0;\n  if (!n0) return array1;\n  const merged = output || new array0.constructor(n0 + n1);\n  let i0 = 0,\n      i1 = 0,\n      i = 0;\n\n  for (; i0 < n0 && i1 < n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n\nfunction repeat (str, reps) {\n  let s = '';\n\n  while (--reps >= 0) s += str;\n\n  return s;\n}\n\nfunction pad (str, length, padchar, align) {\n  const c = padchar || ' ',\n        s = str + '',\n        n = length - s.length;\n  return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n  return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n  return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n  // See http://timelessrepo.com/json-isnt-a-javascript-subset\n  JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n  const s = {},\n        n = _.length;\n\n  for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n  return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n  const e = ellipsis != null ? ellipsis : '\\u2026',\n        s = str + '',\n        n = s.length,\n        l = Math.max(0, length - e.length);\n  return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      const n = array.length;\n\n      for (let i = 0; i < n; ++i) {\n        const t = filter(array[i]);\n        if (t) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","export default function(scale) {\n  return function(_) {\n    let lo = _[0],\n        hi = _[1],\n        t;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    return [\n      scale.invert(lo),\n      scale.invert(hi)\n    ];\n  };\n}\n","export default function(scale) {\n  return function(_) {\n    let range = scale.range(),\n        lo = _[0],\n        hi = _[1],\n        min = -1, max, t, i, n;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    for (i=0, n=range.length; i<n; ++i) {\n      if (range[i] >= lo && range[i] <= hi) {\n        if (min < 0) min = i;\n        max = i;\n      }\n    }\n\n    if (min < 0) return undefined;\n\n    lo = scale.invertExtent(range[min]);\n    hi = scale.invertExtent(range[max]);\n\n    return [\n      lo[0] === undefined ? lo[1] : lo[0],\n      hi[1] === undefined ? hi[0] : hi[1]\n    ];\n  };\n}\n","import bandSpace from './bandSpace';\nimport {bisectRight, range as sequence} from 'd3-array';\nimport {scaleOrdinal as ordinal} from 'd3-scale';\n\nexport function band() {\n  let scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    let n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse],\n        space = bandSpace(n, paddingInner, paddingOuter);\n\n    step = (stop - start) / (space || 1);\n    if (round) {\n      step = Math.floor(step);\n    }\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) {\n      start = Math.round(start);\n      bandwidth = Math.round(bandwidth);\n    }\n    const values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    if (arguments.length) {\n      domain(_);\n      return rescale();\n    } else {\n      return domain();\n    }\n  };\n\n  scale.range = function(_) {\n    if (arguments.length) {\n      range = [+_[0], +_[1]];\n      return rescale();\n    } else {\n      return range.slice();\n    }\n  };\n\n  scale.rangeRound = function(_) {\n    range = [+_[0], +_[1]];\n    round = true;\n    return rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    if (arguments.length) {\n      round = !!_;\n      return rescale();\n    } else {\n      return round;\n    }\n  };\n\n  scale.padding = function(_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      paddingInner = paddingOuter;\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingInner = function(_) {\n    if (arguments.length) {\n      paddingInner = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingOuter = function(_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingOuter;\n    }\n  };\n\n  scale.align = function(_) {\n    if (arguments.length) {\n      align = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return align;\n    }\n  };\n\n  scale.invertRange = function(_) {\n    // bail if range has null or undefined values\n    if (_[0] == null || _[1] == null) return;\n\n    let lo = +_[0],\n        hi = +_[1],\n        reverse = range[1] < range[0],\n        values = reverse ? ordinalRange().reverse() : ordinalRange(),\n        n = values.length - 1, a, b, t;\n\n    // bail if either range endpoint is invalid\n    if (lo !== lo || hi !== hi) return;\n\n    // order range inputs, bail if outside of scale range\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n    if (hi < values[0] || lo > range[1-reverse]) return;\n\n    // binary search to index into scale range\n    a = Math.max(0, bisectRight(values, lo) - 1);\n    b = lo===hi ? a : bisectRight(values, hi) - 1;\n\n    // increment index a if lo is within padding gap\n    if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n    if (reverse) {\n      // map + swap\n      t = a;\n      a = n - b;\n      b = n - t;\n    }\n    return (a > b) ? undefined : domain().slice(a, b+1);\n  };\n\n  scale.invert = function(_) {\n    const value = scale.invertRange([_, _]);\n    return value ? value[0] : value;\n  };\n\n  scale.copy = function() {\n    return band()\n        .domain(domain())\n        .range(range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return rescale();\n}\n\nfunction pointish(scale) {\n  const copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band().paddingInner(1));\n}\n","import {toNumber} from 'vega-util';\n\nvar map = Array.prototype.map;\n\nexport function numbers(_) {\n  return map.call(_, toNumber);\n}\n","export const slice = Array.prototype.slice;\n","import {bisect} from 'd3-array';\nimport {tickFormat} from 'd3-scale';\nimport {peek} from 'vega-util';\nimport {numbers} from './numbers';\nimport {slice} from './slice';\n\nexport function scaleBinOrdinal() {\n  let domain = [],\n      range = [];\n\n  function scale(x) {\n    return x == null || x !== x\n      ? undefined\n      : range[(bisect(domain, x) - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (arguments.length) {\n      domain = numbers(_);\n      return scale;\n    } else {\n      return domain.slice();\n    }\n  };\n\n  scale.range = function(_) {\n    if (arguments.length) {\n      range = slice.call(_);\n      return scale;\n    } else {\n      return range.slice();\n    }\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return tickFormat(domain[0], peek(domain), count == null ? 10 : count, specifier);\n  };\n\n  scale.copy = function() {\n    return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n  };\n\n  return scale;\n}","import {array, hasOwnProperty, toSet} from 'vega-util';\nimport invertRange from './scales/invertRange';\nimport invertRangeExtent from './scales/invertRangeExtent';\n\nimport {\n  Band,\n  BinOrdinal, Continuous as C, Discrete as D, Diverging, Interpolating as I,\n  Identity, Linear, Log, Ordinal,\n  Point, Pow, Quantile,\n  Quantize, Sequential, Sqrt, Symlog,\n  Temporal as T,\n  Threshold,\n  Time,\n  UTC,\n  Discretizing as Z\n} from './scales/types';\n\nimport {\n  band as scaleBand,\n  point as scalePoint\n} from './scales/scaleBand';\n\nimport {\n  scaleBinOrdinal\n} from './scales/scaleBinOrdinal';\n\nimport * as $ from 'd3-scale';\n\n// scale registry\nconst scales = {};\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n  const ctr = function scale() {\n    const s = constructor();\n\n    if (!s.invertRange) {\n      s.invertRange = s.invert ? invertRange(s)\n        : s.invertExtent ? invertRangeExtent(s)\n        : undefined;\n    }\n\n    s.type = type;\n    return s;\n  };\n\n  ctr.metadata = toSet(array(metadata));\n\n  return ctr;\n}\n\nexport function scale(type, scale, metadata) {\n  if (arguments.length > 1) {\n    scales[type] = create(type, scale, metadata);\n    return this;\n  } else {\n    return isValidScaleType(type) ? scales[type] : undefined;\n  }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, C);\nscale(Log, $.scaleLog, [C, Log]);\nscale(Pow, $.scalePow, C);\nscale(Sqrt, $.scaleSqrt, C);\nscale(Symlog, $.scaleSymlog, C);\nscale(Time, $.scaleTime, [C, T]);\nscale(UTC, $.scaleUtc, [C, T]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [C, I]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [C, I]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [C, I, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [C, I]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [C, I]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [C, I]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [C, I]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [C, I, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [C, I]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [C, I]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [C, I]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Z, Quantile]);\nscale(Quantize, $.scaleQuantize, Z);\nscale(Threshold, $.scaleThreshold, Z);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [D, Z]);\nscale(Ordinal, $.scaleOrdinal, D);\nscale(Band, scaleBand, D);\nscale(Point, scalePoint, D);\n\nexport function isValidScaleType(type) {\n  return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n  const s = scales[key];\n  return s && s.metadata[type];\n}\n\nexport function isContinuous(key) {\n  return hasType(key, C);\n}\n\nexport function isDiscrete(key) {\n  return hasType(key, D);\n}\n\nexport function isDiscretizing(key) {\n  return hasType(key, Z);\n}\n\nexport function isLogarithmic(key) {\n  return hasType(key, Log);\n}\n\nexport function isTemporal(key) {\n  return hasType(key, T);\n}\n\nexport function isInterpolating(key) {\n  return hasType(key, I);\n}\n\nexport function isQuantile(key) {\n  return hasType(key, Quantile);\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * deg2rad;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nexport function parseCss(value) {\n  if (value === \"none\") return identity;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n","import {scale as getScale} from './scales';\nimport {constant, peek} from 'vega-util';\nimport * as $ from 'd3-interpolate';\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\n\nexport function interpolateRange(interpolator, range) {\n  const start = range[0],\n        span = peek(range) - start;\n  return function(i) { return interpolator(start + i * span); };\n}\n\nexport function interpolateColors(colors, type, gamma) {\n  return $.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\n\nexport function quantizeInterpolator(interpolator, count) {\n  const samples = new Array(count),\n        n = count + 1;\n  for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n  return samples;\n}\n\nexport function scaleCopy(scale) {\n  const t = scale.type,\n        s = scale.copy();\n  s.type = t;\n  return s;\n}\n\nexport function scaleFraction(scale, min, max) {\n  let delta = max - min, i, t, s;\n\n  if (!delta || !Number.isFinite(delta)) {\n    return constant(0.5);\n  } else {\n    i = (t = scale.type).indexOf('-');\n    t = i < 0 ? t : t.slice(i + 1);\n    s = getScale(t)().domain([min, max]).range([0, 1]);\n    scaleProps.forEach(m => scale[m] ? s[m](scale[m]()) : 0);\n    return s;\n  }\n}\n\nexport function interpolate(type, gamma) {\n  const interp = $[method(type)];\n  return (gamma != null && interp && interp.gamma)\n    ? interp.gamma(gamma)\n    : interp;\n}\n\nfunction method(type) {\n  return 'interpolate' + type.toLowerCase()\n    .split('-')\n    .map(function(s) { return s[0].toUpperCase() + s.slice(1); })\n    .join('');\n}\n","export const continuous = {\n  blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n  greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n  greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n  oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n  purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n  reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n\n  blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n  bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n  greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n  orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n  purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n  purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n  purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n  redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n  yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n  yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n  yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n\n  blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n  brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n  purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n  purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n  redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n  redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n  yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n  redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n  redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n  pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n  spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n\n  viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n  magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n  inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n  plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n\n  rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n  sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n\n  browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n  tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n  teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n  warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n\n  goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n  goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n  goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n\n  lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n  lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n  lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n  lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n  lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n\n  darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n  darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n  darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n  darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n  darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\n\nexport const discrete = {\n  category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n  category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n  category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n  category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n  tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n  tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n  accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n  dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n  paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n  pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n  pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n  set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n  set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n  set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n","import {continuous, discrete} from './palettes';\nimport {interpolateColors} from './interpolate';\n\nfunction colors(palette) {\n  const n = palette.length / 6 | 0,\n        c = new Array(n);\n\n  for (let i = 0; i < n;) {\n    c[i] = '#' + palette.slice(i * 6, ++i * 6);\n  }\n  return c;\n}\n\nfunction apply(_, f) {\n  for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\n\nexport function scheme(name, scheme) {\n  name = name && name.toLowerCase();\n  if (arguments.length > 1) {\n    schemes[name] = scheme;\n    return this;\n  } else {\n    return schemes[name];\n  }\n}\n","export const SymbolLegend  = 'symbol';\nexport const DiscreteLegend = 'discrete';\nexport const GradientLegend = 'gradient';\n","import {isLogarithmic} from './scales';\nimport {Time, UTC} from './scales/types';\nimport {timeInterval, utcInterval} from 'vega-time';\nimport {error, isArray, isNumber, isObject, isString, peek, span} from 'vega-util';\n\nconst defaultFormatter = value => isArray(value)\n  ? value.map(v => String(v))\n  : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nexport function tickCount(scale, count, minStep) {\n  let step;\n\n  if (isNumber(count)) {\n    if (scale.bins) {\n      count = Math.max(count, scale.bins.length);\n    }\n    if (minStep != null) {\n      count = Math.min(\n        count,\n        Math.floor((span(scale.domain()) / minStep) || 1)\n      );\n    }\n  }\n\n  if (isObject(count)) {\n    step = count.step;\n    count = count.interval;\n  }\n\n  if (isString(count)) {\n    count = scale.type === Time ? timeInterval(count)\n      : scale.type == UTC ? utcInterval(count)\n      : error('Only time and utc scales accept interval strings.');\n    if (step) count = count.every(step);\n  }\n\n  return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nexport function validTicks(scale, ticks, count) {\n  let range = scale.range(),\n      lo = range[0],\n      hi = peek(range),\n      cmp = ascending;\n\n  if (lo > hi) {\n    range = hi;\n    hi = lo;\n    lo = range;\n    cmp = descending;\n  }\n\n  lo = Math.floor(lo);\n  hi = Math.ceil(hi);\n\n  // filter ticks to valid values within the range\n  // additionally sort ticks in range order (#2579)\n  ticks = ticks.map(v => [v, scale(v)])\n    .filter(_ => lo <= _[1] && _[1] <= hi)\n    .sort(cmp)\n    .map(_ => _[0]);\n\n  if (count > 0 && ticks.length > 1) {\n    const endpoints = [ticks[0], peek(ticks)];\n    while (ticks.length > count && ticks.length >= 3) {\n      ticks = ticks.filter((_, i) => !(i % 2));\n    }\n    if (ticks.length < 3) {\n      ticks = endpoints;\n    }\n  }\n\n  return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nexport function tickValues(scale, count) {\n  return scale.bins ? validTicks(scale, scale.bins)\n    : scale.ticks ? scale.ticks(count)\n    : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n *   specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n *   time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nexport function tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n  const type = scale.type;\n  let format = defaultFormatter;\n\n  if (type === Time || formatType === Time) {\n    format = locale.timeFormat(specifier);\n  }\n  else if (type === UTC || formatType === UTC) {\n    format = locale.utcFormat(specifier);\n  }\n  else if (isLogarithmic(type)) {\n    const varfmt = locale.formatFloat(specifier);\n    if (noSkip || scale.bins) {\n      format = varfmt;\n    } else {\n      const test = tickLog(scale, count, false);\n      format = _ => test(_) ? varfmt(_) : '';\n    }\n  }\n  else if (scale.tickFormat) {\n    // if d3 scale has tickFormat, it must be continuous\n    const d = scale.domain();\n    format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n  }\n  else if (specifier) {\n    format = locale.format(specifier);\n  }\n\n  return format;\n}\n\nexport function tickLog(scale, count, values) {\n  const ticks = tickValues(scale, count),\n        base = scale.base(),\n        logb = Math.log(base),\n        k = Math.max(1, base * count / ticks.length);\n\n  // apply d3-scale's log format filter criteria\n  const test = d => {\n    let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n    if (i * base < base - 0.5) i *= base;\n    return i <= k;\n  };\n\n  return values ? ticks.filter(test) : test;\n}\n","import {DiscreteLegend, SymbolLegend} from './legend-types';\nimport {Log, Quantile, Quantize, Threshold, Time, UTC} from './scales/types';\nimport {tickFormat, tickLog, tickValues} from './ticks';\nimport {peek} from 'vega-util';\n\nconst symbols = {\n  [Quantile]:  'quantiles',\n  [Quantize]:  'thresholds',\n  [Threshold]: 'domain'\n};\n\nconst formats = {\n  [Quantile]:  'quantiles',\n  [Quantize]:  'domain'\n};\n\nexport function labelValues(scale, count) {\n  return scale.bins ? binValues(scale.bins)\n    : scale.type === Log ? tickLog(scale, count, true)\n    : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]())\n    : tickValues(scale, count);\n}\n\nexport function thresholdFormat(locale, scale, specifier) {\n  let _ = scale[formats[scale.type]](),\n      n = _.length,\n      d = n > 1 ? _[1] - _[0] : _[0], i;\n\n  for (i=1; i<n; ++i) {\n    d = Math.min(d, _[i] - _[i-1]);\n  }\n\n  // tickCount = 3 ticks times 10 for increased resolution\n  return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n  const values = [-Infinity].concat(thresholds);\n  values.max = +Infinity;\n  return values;\n}\n\nfunction binValues(bins) {\n  const values = bins.slice(0, -1);\n  values.max = peek(bins);\n  return values;\n}\n\nconst isDiscreteRange = scale =>\n  symbols[scale.type] || scale.bins;\n\nexport function labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n  const format = formats[scale.type] && formatType !== Time && formatType !== UTC\n    ? thresholdFormat(locale, scale, specifier)\n    : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n\n  return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format)\n    : type === DiscreteLegend ? formatDiscrete(format)\n    : formatPoint(format);\n}\n\nconst formatRange = format =>\n  (value, index, array) => {\n    const limit = get(array[index + 1], get(array.max, +Infinity)),\n          lo = formatValue(value, format),\n          hi = formatValue(limit, format);\n    return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n  };\n\nconst get = (value, dflt) =>\n  value != null ? value : dflt;\n\nconst formatDiscrete = format =>\n  (value, index) => index ? format(value) : null;\n\nconst formatPoint = format =>\n  value => format(value);\n\nconst formatValue = (value, format) =>\n  Number.isFinite(value) ? format(value) : null;\n\nexport function labelFraction(scale) {\n  let domain = scale.domain(),\n      count = domain.length - 1,\n      lo = +domain[0],\n      hi = +peek(domain),\n      span = hi - lo;\n\n  if (scale.type === Threshold) {\n    const adjust = count ? span / count : 0.1;\n    lo -= adjust;\n    hi += adjust;\n    span = hi - lo;\n  }\n\n  return value => (value - lo) / span;\n}\n","import {labelFormat, labelValues} from './labels';\nimport {Time, UTC} from './scales/types';\nimport {isDiscrete, isDiscretizing, isTemporal} from './scales';\nimport {isString, peek} from 'vega-util';\n\nfunction format(locale, scale, specifier, formatType) {\n  const type = formatType || scale.type;\n\n  // replace abbreviated time specifiers to improve screen reader experience\n  if (isString(specifier) && isTemporal(type)) {\n    specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n  }\n\n  return !specifier && type === Time  ? locale.timeFormat('%A, %d %B %Y, %X')\n    : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC')\n    : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nexport function domainCaption(locale, scale, opt) {\n  opt = opt || {};\n  const max = Math.max(3, opt.maxlen || 7),\n        fmt = format(locale, scale, opt.format, opt.formatType);\n\n  // if scale breaks domain into bins, describe boundaries\n  if (isDiscretizing(scale.type)) {\n    const v = labelValues(scale).slice(1).map(fmt),\n          n = v.length;\n    return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n  }\n\n  // if scale domain is discrete, list values\n  else if (isDiscrete(scale.type)) {\n    const d = scale.domain(),\n          n = d.length,\n          v = n > max\n            ? d.slice(0, max - 2).map(fmt).join(', ')\n              + ', ending with ' + d.slice(-1).map(fmt)\n            : d.map(fmt).join(', ');\n    return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n  }\n\n  // if scale domain is continuous, describe value range\n  else {\n    const d = scale.domain();\n    return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n  }\n}\n","export {\n  default as bandSpace\n} from './src/scales/bandSpace';\n\nexport {\n  Identity,\n  Linear,\n  Log,\n  Pow,\n  Sqrt,\n  Symlog,\n  Time,\n  UTC,\n  Sequential,\n  Diverging,\n  Quantile,\n  Quantize,\n  Threshold,\n  BinOrdinal,\n  Ordinal,\n  Band,\n  Point\n} from './src/scales/types';\n\nexport {\n  interpolate,\n  interpolateColors,\n  interpolateRange,\n  scaleCopy,\n  scaleFraction,\n  quantizeInterpolator\n} from './src/interpolate';\n\nexport {\n  scale,\n  isValidScaleType,\n  isContinuous,\n  isDiscrete,\n  isDiscretizing,\n  isInterpolating,\n  isLogarithmic,\n  isQuantile,\n  isTemporal\n} from './src/scales';\n\nexport {\n  scheme\n} from './src/schemes';\n\nexport {\n  SymbolLegend,\n  DiscreteLegend,\n  GradientLegend\n} from './src/legend-types';\n\nexport {\n  tickCount,\n  tickFormat,\n  tickValues,\n  validTicks\n} from './src/ticks';\n\nexport {\n  labelFormat,\n  labelFraction,\n  labelValues\n} from './src/labels';\n\nexport {\n  domainCaption\n} from './src/caption';\n\nexport {\n  scaleImplicit\n} from 'd3-scale';\n","// initialize aria role and label attributes\nexport function initializeAria(view) {\n  const el = view.container();\n  if (el) {\n    el.setAttribute('role', 'graphics-document');\n    el.setAttribute('aria-roleDescription', 'visualization');\n    ariaLabel(el, view.description());\n  }\n}\n\n// update aria-label if we have a DOM container element\nexport function ariaLabel(el, desc) {\n  if (el) desc == null\n    ? el.removeAttribute('aria-label')\n    : el.setAttribute('aria-label', desc);\n}\n","export default function(view) {\n  // respond to background signal\n  view.add(null, _ => {\n    view._background = _.bg;\n    view._resize = 1;\n    return _.bg;\n  }, { bg: view._signals.background });\n}\n","import {isString} from 'vega-util';\n\nconst Default = 'default';\n\nexport default function(view) {\n  // get cursor signal, add to dataflow if needed\n  const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n    user: Default,\n    item: null\n  }));\n\n  // evaluate cursor on each mousemove event\n  view.on(view.events('view', 'mousemove'), cursor,\n    (_, event) => {\n      const value = cursor.value,\n            user = value ? (isString(value) ? value : value.user) : Default,\n            item = event.item && event.item.cursor || null;\n\n      return (value && user === value.user && item == value.item)\n        ? value\n        : {user: user, item: item};\n    }\n  );\n\n  // when cursor signal updates, set visible cursor\n  view.add(null, function(_) {\n    let user = _.cursor,\n        item = this.value;\n\n    if (!isString(user)) {\n      item = user.item;\n      user = user.user;\n    }\n\n    setCursor(view, user && user !== Default ? user : (item || user));\n\n    return item;\n  }, {cursor: cursor});\n}\n\nexport function setCursor(view, cursor) {\n  const el = view.globalCursor()\n    ? (typeof document !== 'undefined' && document.body)\n    : view.container();\n\n  if (el) {\n    return cursor == null\n      ? el.style.removeProperty('cursor')\n      : (el.style.cursor = cursor);\n  }\n}\n","import {changeset, isChangeSet} from 'vega-dataflow';\nimport {error, hasOwnProperty, truthy} from 'vega-util';\n\nexport function dataref(view, name) {\n  var data = view._runtime.data;\n  if (!hasOwnProperty(data, name)) {\n    error('Unrecognized data set: ' + name);\n  }\n  return data[name];\n}\n\nexport function data(name, values) {\n  return arguments.length < 2\n    ? dataref(this, name).values.value\n    : change.call(this, name, changeset().remove(truthy).insert(values));\n}\n\nexport function change(name, changes) {\n  if (!isChangeSet(changes)) {\n    error('Second argument to changes must be a changeset.');\n  }\n  var dataset = dataref(this, name);\n  dataset.modified = true;\n  return this.pulse(dataset.input, changes);\n}\n\nexport function insert(name, _) {\n  return change.call(this, name, changeset().insert(_));\n}\n\nexport function remove(name, _) {\n  return change.call(this, name, changeset().remove(_));\n}\n","export function width(view) {\n  var padding = view.padding();\n  return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\n\nexport function height(view) {\n  var padding = view.padding();\n  return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\n\nexport function offset(view) {\n  var padding = view.padding(),\n      origin = view._origin;\n  return [\n    padding.left + origin[0],\n    padding.top + origin[1]\n  ];\n}\n\nexport function resizeRenderer(view) {\n  var origin = offset(view),\n      w = width(view),\n      h = height(view);\n\n  view._renderer.background(view.background());\n  view._renderer.resize(w, h, origin);\n  view._handler.origin(origin);\n\n  view._resizeListeners.forEach(handler => {\n    try {\n      handler(w, h);\n    } catch (error) {\n      view.error(error);\n    }\n  });\n}\n","import {offset} from './render-size';\nimport {constant, isString} from 'vega-util';\nimport {point} from 'vega-scenegraph';\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n *   view - Returns the backing View instance.\n *   item - Returns the currently active scenegraph item (if any).\n *   group - Returns the currently active scenegraph group (if any).\n *     This method accepts a single string-typed argument indicating the name\n *     of the desired parent group. The scenegraph will be traversed from\n *     the item up towards the root to search for a matching group. If no\n *     argument is provided the enclosing group for the active item is\n *     returned, unless the item it itself a group, in which case it is\n *     returned directly.\n *   xy - Returns a two-element array containing the x and y coordinates for\n *     mouse or touch events. For touch events, this is based on the first\n *     elements in the changedTouches array. This method accepts a single\n *     argument: either an item instance or mark name that should serve as\n *     the reference coordinate system. If no argument is provided the\n *     top-level view coordinate system is assumed.\n *   x - Returns the current x-coordinate, accepts the same arguments as xy.\n *   y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nexport default function(view, event, item) {\n  var r  = view._renderer,\n      el = r && r.canvas(),\n      p, e, translate;\n\n  if (el) {\n    translate = offset(view);\n    e = event.changedTouches ? event.changedTouches[0] : event;\n    p = point(e, el);\n    p[0] -= translate[0];\n    p[1] -= translate[1];\n  }\n\n  event.dataflow = view;\n  event.item = item;\n  event.vega = extension(view, item, p);\n  return event;\n}\n\nfunction extension(view, item, point) {\n  var itemGroup = item\n    ? item.mark.marktype === 'group' ? item : item.mark.group\n    : null;\n\n  function group(name) {\n    var g = itemGroup, i;\n    if (name) for (i = item; i; i = i.mark.group) {\n      if (i.mark.name === name) { g = i; break; }\n    }\n    return g && g.mark && g.mark.interactive ? g : {};\n  }\n\n  function xy(item) {\n    if (!item) return point;\n    if (isString(item)) item = group(item);\n\n    var p = point.slice();\n    while (item) {\n      p[0] -= item.x || 0;\n      p[1] -= item.y || 0;\n      item = item.mark && item.mark.group;\n    }\n    return p;\n  }\n\n  return {\n    view:  constant(view),\n    item:  constant(item || {}),\n    group: group,\n    xy:    xy,\n    x:     function(item) { return xy(item)[0]; },\n    y:     function(item) { return xy(item)[1]; }\n  };\n}\n","import eventExtend from './events-extend';\nimport {EventStream} from 'vega-dataflow';\nimport {extend, isArray, isObject, toSet} from 'vega-util';\n\nconst VIEW = 'view',\n      TIMER = 'timer',\n      WINDOW = 'window',\n      NO_TRAP = {trap: false};\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nexport function initializeEventConfig(config) {\n  const events = extend({defaults: {}}, config);\n\n  const unpack = (obj, keys) => {\n    keys.forEach(k => {\n      if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n    });\n  };\n\n  unpack(events.defaults, ['prevent', 'allow']);\n  unpack(events, ['view', 'window', 'selector']);\n\n  return events;\n}\n\nfunction prevent(view, type) {\n  var def = view._eventConfig.defaults,\n      prevent = def.prevent,\n      allow = def.allow;\n\n  return prevent === false || allow === true ? false\n    : prevent === true || allow === false ? true\n    : prevent ? prevent[type]\n    : allow ? !allow[type]\n    : view.preventDefault();\n}\n\nfunction permit(view, key, type) {\n  const rule = view._eventConfig && view._eventConfig[key];\n\n  if (rule === false || (isObject(rule) && !rule[type])) {\n    view.warn(`Blocked ${key} ${type} event listener.`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nexport function events(source, type, filter) {\n  var view = this,\n      s = new EventStream(filter),\n      send = function(e, item) {\n        view.runAsync(null, () => {\n          if (source === VIEW && prevent(view, type)) {\n            e.preventDefault();\n          }\n          s.receive(eventExtend(view, e, item));\n        });\n      },\n      sources;\n\n  if (source === TIMER) {\n    if (permit(view, 'timer', type)) {\n      view.timer(send, type);\n    }\n  }\n\n  else if (source === VIEW) {\n    if (permit(view, 'view', type)) {\n      // send traps errors, so use {trap: false} option\n      view.addEventListener(type, send, NO_TRAP);\n    }\n  }\n\n  else {\n    if (source === WINDOW) {\n      if (permit(view, 'window', type) && typeof window !== 'undefined') {\n        sources = [window];\n      }\n    } else if (typeof document !== 'undefined') {\n      if (permit(view, 'selector', type)) {\n        sources = document.querySelectorAll(source);\n      }\n    }\n\n    if (!sources) {\n      view.warn('Can not resolve event source: ' + source);\n    } else {\n      for (var i=0, n=sources.length; i<n; ++i) {\n        sources[i].addEventListener(type, send);\n      }\n\n      view._eventListeners.push({\n        type:    type,\n        sources: sources,\n        handler: send\n      });\n    }\n  }\n\n  return s;\n}\n","function itemFilter(event) {\n  return event.item;\n}\n\nfunction markTarget(event) {\n  // grab upstream collector feeding the mark operator\n  return event.item.mark.source;\n}\n\nfunction invoke(name) {\n  return function(_, event) {\n    return event.vega.view()\n      .changeset()\n      .encode(event.item, name);\n  };\n}\n\nexport default function(hoverSet, leaveSet) {\n  hoverSet = [hoverSet || 'hover'];\n  leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n  // invoke hover set upon mouseover\n  this.on(\n    this.events('view', 'mouseover', itemFilter),\n    markTarget,\n    invoke(hoverSet)\n  );\n\n  // invoke leave set upon mouseout\n  this.on(\n    this.events('view', 'mouseout', itemFilter),\n    markTarget,\n    invoke(leaveSet)\n  );\n\n  return this;\n}\n","/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nexport default function() {\n  var tooltip = this._tooltip,\n      timers = this._timers,\n      listeners = this._eventListeners,\n      n, m, e;\n\n  n = timers.length;\n  while (--n >= 0) {\n    timers[n].stop();\n  }\n\n  n = listeners.length;\n  while (--n >= 0) {\n    e = listeners[n];\n    m = e.sources.length;\n    while (--m >= 0) {\n      e.sources[m].removeEventListener(e.type, e.handler);\n    }\n  }\n\n  if (tooltip) {\n    tooltip.call(this, this._handler, null, null, null);\n  }\n\n  return this;\n}\n","export default function(tag, attr, text) {\n  var el = document.createElement(tag);\n  for (var key in attr) el.setAttribute(key, attr[key]);\n  if (text != null) el.textContent = text;\n  return el;\n}\n","import element from './element';\nimport {debounce} from 'vega-util';\nimport {tickStep} from 'd3-array';\n\nconst BindClass = 'vega-bind',\n      NameClass = 'vega-bind-name',\n      RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n *   element should be appended as a child. If string-valued, this argument\n *   will be treated as a CSS selector. If null or undefined, the parent\n *   element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n *   to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nexport default function(view, el, binding) {\n  if (!el) return;\n\n  const param = binding.param;\n  let bind = binding.state;\n\n  if (!bind) {\n    bind = binding.state = {\n      elements: null,\n      active: false,\n      set: null,\n      update: value => {\n        if (value !== view.signal(param.signal)) {\n          view.runAsync(null, () => {\n            bind.source = true;\n            view.signal(param.signal, value);\n          });\n        }\n      }\n    };\n    if (param.debounce) {\n      bind.update = debounce(param.debounce, bind.update);\n    }\n  }\n\n  generate(bind, el, param, view.signal(param.signal));\n\n  if (!bind.active) {\n    view.on(view._signals[param.signal], null, () => {\n      bind.source\n        ? (bind.source = false)\n        : bind.set(view.signal(param.signal));\n    });\n    bind.active = true;\n  }\n\n  return bind;\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, value) {\n  const div = element('div', {'class': BindClass});\n\n  const wrapper = param.input === 'radio'\n    ? div\n    : div.appendChild(element('label'));\n\n  wrapper.appendChild(element('span',\n    {'class': NameClass},\n    (param.name || param.signal)\n  ));\n\n  el.appendChild(div);\n\n  let input = form;\n  switch (param.input) {\n    case 'checkbox': input = checkbox; break;\n    case 'select':   input = select; break;\n    case 'radio':    input = radio; break;\n    case 'range':    input = range; break;\n  }\n\n  input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n  const node = element('input');\n\n  for (const key in param) {\n    if (key !== 'signal' && key !== 'element') {\n      node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n    }\n  }\n  node.setAttribute('name', param.signal);\n  node.value = value;\n\n  el.appendChild(node);\n  node.addEventListener('input', () => bind.update(node.value));\n\n  bind.elements = [node];\n  bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n  const attr = {type: 'checkbox', name: param.signal};\n  if (value) attr.checked = true;\n  const node = element('input', attr);\n\n  el.appendChild(node);\n  node.addEventListener('change', () => bind.update(node.checked));\n\n  bind.elements = [node];\n  bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n  const node = element('select', {name: param.signal}),\n        labels = param.labels || [];\n\n  param.options.forEach((option, i) => {\n    const attr = {value: option};\n    if (valuesEqual(option, value)) attr.selected = true;\n    node.appendChild(element('option', attr, (labels[i] || option)+''));\n  });\n\n  el.appendChild(node);\n\n  node.addEventListener('change', () => {\n    bind.update(param.options[node.selectedIndex]);\n  });\n\n  bind.elements = [node];\n  bind.set = value => {\n    for (let i = 0, n = param.options.length; i < n; ++i) {\n      if (valuesEqual(param.options[i], value)) {\n        node.selectedIndex = i; return;\n      }\n    }\n  };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n  const group = element('span', {'class': RadioClass}),\n        labels = param.labels || [];\n\n  el.appendChild(group);\n\n  bind.elements = param.options.map((option, i) => {\n    const attr = {\n      type:  'radio',\n      name:  param.signal,\n      value: option\n    };\n    if (valuesEqual(option, value)) attr.checked = true;\n\n    const input = element('input', attr);\n    input.addEventListener('change', () => bind.update(option));\n\n    const label = element('label', {}, (labels[i] || option)+'');\n    label.prepend(input);\n    group.appendChild(label);\n\n    return input;\n  });\n\n  bind.set = value => {\n    const nodes = bind.elements,\n          n = nodes.length;\n    for (let i = 0; i < n; ++i) {\n      if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n    }\n  };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n  value = value !== undefined ? value : ((+param.max) + (+param.min)) / 2;\n\n  const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n        min = param.min || Math.min(0, max, +value) || 0,\n        step = param.step || tickStep(min, max, 100);\n\n  const node = element('input', {\n    type:  'range',\n    name:  param.signal,\n    min:   min,\n    max:   max,\n    step:  step\n  });\n  node.value = value;\n\n  const span = element('span', {}, +value);\n\n  el.appendChild(node);\n  el.appendChild(span);\n\n  const update = () => {\n    span.textContent = node.value;\n    bind.update(+node.value);\n  };\n\n  // subscribe to both input and change\n  node.addEventListener('input', update);\n  node.addEventListener('change', update);\n\n  bind.elements = [node];\n  bind.set = value => {\n    node.value = value;\n    span.textContent = value;\n  };\n}\n\nfunction valuesEqual(a, b) {\n  return a === b || (a+'' === b+'');\n}\n","import {height, offset, width} from './render-size';\n\nexport default function(view, r, el, constructor, scaleFactor, opt) {\n  r = r || new constructor(view.loader());\n  return r\n    .initialize(el, width(view), height(view), offset(view), scaleFactor, opt)\n    .background(view.background());\n}\n","export default function(view, fn) {\n  return !fn ? null : function() {\n    try {\n      fn.apply(this, arguments);\n    } catch (error) {\n      view.error(error);\n    }\n  };\n}\n","import {offset} from './render-size';\nimport trap from './trap';\n\nexport default function(view, prevHandler, el, constructor) {\n  // instantiate scenegraph handler\n  var handler = new constructor(view.loader(), trap(view, view.tooltip()))\n    .scene(view.scenegraph().root)\n    .initialize(el, offset(view), view);\n\n  // transfer event handlers\n  if (prevHandler) {\n    prevHandler.handlers().forEach(h => {\n      handler.on(h.type, h.handler);\n    });\n  }\n\n  return handler;\n}\n","import {initializeAria} from './aria';\nimport bind from './bind';\nimport element from './element';\nimport initializeRenderer from './initialize-renderer';\nimport initializeHandler from './initialize-handler';\nimport {CanvasHandler, renderModule} from 'vega-scenegraph';\n\nexport default function(el, elBind) {\n  const view = this,\n        type = view._renderType,\n        config = view._eventConfig.bind,\n        module = renderModule(type);\n\n  // containing dom element\n  el = view._el = el ? lookup(view, el) : null;\n\n  // initialize aria attributes\n  initializeAria(view);\n\n  // select appropriate renderer & handler\n  if (!module) view.error('Unrecognized renderer type: ' + type);\n  const Handler = module.handler || CanvasHandler,\n        Renderer = (el ? module.renderer : module.headless);\n\n  // initialize renderer and input handler\n  view._renderer = !Renderer ? null\n    : initializeRenderer(view, view._renderer, el, Renderer);\n  view._handler = initializeHandler(view, view._handler, el, Handler);\n  view._redraw = true;\n\n  // initialize signal bindings\n  if (el && config !== 'none') {\n    elBind = elBind ? (view._elBind = lookup(view, elBind))\n      : el.appendChild(element('form', {'class': 'vega-bindings'}));\n\n    view._bind.forEach(_ => {\n      if (_.param.element && config !== 'container') {\n        _.element = lookup(view, _.param.element);\n      }\n    });\n\n    view._bind.forEach(_ => {\n      bind(view, _.element || elBind, _);\n    });\n  }\n\n  return view;\n}\n\nfunction lookup(view, el) {\n  if (typeof el === 'string') {\n    if (typeof document !== 'undefined') {\n      el = document.querySelector(el);\n      if (!el) {\n        view.error('Signal bind element not found: ' + el);\n        return null;\n      }\n    } else {\n      view.error('DOM document instance not found.');\n      return null;\n    }\n  }\n  if (el) {\n    try {\n      el.innerHTML = '';\n    } catch (e) {\n      el = null;\n      view.error(e);\n    }\n  }\n  return el;\n}\n","import {isObject} from 'vega-util';\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({top: _, bottom: _, left: _, right: _});\n\nexport default function(_) {\n  return isObject(_)\n    ? {\n        top:    number(_.top),\n        bottom: number(_.bottom),\n        left:   number(_.left),\n        right:  number(_.right)\n      }\n    : paddingObject(number(_));\n}\n","import initializeRenderer from './initialize-renderer';\nimport {renderModule} from 'vega-scenegraph';\nimport {error} from 'vega-util';\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nexport default async function(view, type, scaleFactor, opt) {\n  const module = renderModule(type),\n        ctr = module && module.headless;\n\n  if (!ctr) error('Unrecognized renderer type: ' + type);\n\n  await view.runAsync();\n  return initializeRenderer(view, null, null, ctr, scaleFactor, opt)\n    .renderAsync(view._scenegraph.root);\n}\n","import renderHeadless from './render-headless';\nimport {RenderType as Type} from 'vega-scenegraph';\nimport {error} from 'vega-util';\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n *   The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nexport default async function(type, scaleFactor) {\n  if (type !== Type.Canvas && type !== Type.SVG && type !== Type.PNG) {\n    error('Unrecognized image type: ' + type);\n  }\n\n  const r = await renderHeadless(this, type, scaleFactor);\n  return type === Type.SVG\n    ? toBlobURL(r.svg(), 'image/svg+xml')\n    : r.canvas().toDataURL('image/png');\n}\n\nfunction toBlobURL(data, mime) {\n  var blob = new Blob([data], {type: mime});\n  return window.URL.createObjectURL(blob);\n}\n","import renderHeadless from './render-headless';\nimport {RenderType} from 'vega-scenegraph';\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nexport default async function(scaleFactor, opt) {\n  const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n  return r.canvas();\n}\n","import renderHeadless from './render-headless';\nimport {RenderType} from 'vega-scenegraph';\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nexport default async function(scaleFactor) {\n  const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n  return r.svg();\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n  this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n  let c, i, n;\n  if (visitor(this)) return 1;\n\n  for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n    if (c[i].visit(visitor)) return 1;\n  }\n};\n\nfunction children(node) {\n  switch (node.type) {\n    case ArrayExpression:\n      return node.elements;\n\n    case BinaryExpression:\n    case LogicalExpression:\n      return [node.left, node.right];\n\n    case CallExpression:\n      return [node.callee].concat(node.arguments);\n\n    case ConditionalExpression:\n      return [node.test, node.consequent, node.alternate];\n\n    case MemberExpression:\n      return [node.object, node.property];\n\n    case ObjectExpression:\n      return node.properties;\n\n    case Property:\n      return [node.key, node.value];\n\n    case UnaryExpression:\n      return [node.argument];\n\n    case Identifier:\n    case Literal:\n    case RawCode:\n    default:\n      return [];\n  }\n}\n\n/*\n  The following expression parser is based on Esprima (http://esprima.org/).\n  Original header comment and license for Esprima is included here:\n\n  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n    TokenEOF = 2,\n    TokenIdentifier = 3,\n    TokenKeyword = 4,\n    TokenNullLiteral = 5,\n    TokenNumericLiteral = 6,\n    TokenPunctuator = 7,\n    TokenStringLiteral = 8,\n    TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '<end>';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n    SyntaxBinaryExpression = 'BinaryExpression',\n    SyntaxCallExpression = 'CallExpression',\n    SyntaxConditionalExpression = 'ConditionalExpression',\n    SyntaxIdentifier = 'Identifier',\n    SyntaxLiteral = 'Literal',\n    SyntaxLogicalExpression = 'LogicalExpression',\n    SyntaxMemberExpression = 'MemberExpression',\n    SyntaxObjectExpression = 'ObjectExpression',\n    SyntaxProperty = 'Property',\n    SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n    MessageUnexpectedNumber = 'Unexpected number',\n    MessageUnexpectedString = 'Unexpected string',\n    MessageUnexpectedIdentifier = 'Unexpected identifier',\n    MessageUnexpectedReserved = 'Unexpected reserved word',\n    MessageUnexpectedEOS = 'Unexpected end of input',\n    MessageInvalidRegExp = 'Invalid regular expression',\n    MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n    MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n    MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n    DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n    // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n  /* istanbul ignore next */\n  if (!condition) {\n    throw new Error('ASSERT: ' + message);\n  }\n}\n\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n  return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n  return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n  return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n  return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n  ch >= 0x41 && ch <= 0x5A || // A..Z\n  ch >= 0x61 && ch <= 0x7A || // a..z\n  ch === 0x5C || // \\ (backslash)\n  ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n  return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n  ch >= 0x41 && ch <= 0x5A || // A..Z\n  ch >= 0x61 && ch <= 0x7A || // a..z\n  ch >= 0x30 && ch <= 0x39 || // 0..9\n  ch === 0x5C || // \\ (backslash)\n  ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n  'if': 1,\n  'in': 1,\n  'do': 1,\n  'var': 1,\n  'for': 1,\n  'new': 1,\n  'try': 1,\n  'let': 1,\n  'this': 1,\n  'else': 1,\n  'case': 1,\n  'void': 1,\n  'with': 1,\n  'enum': 1,\n  'while': 1,\n  'break': 1,\n  'catch': 1,\n  'throw': 1,\n  'const': 1,\n  'yield': 1,\n  'class': 1,\n  'super': 1,\n  'return': 1,\n  'typeof': 1,\n  'delete': 1,\n  'switch': 1,\n  'export': 1,\n  'import': 1,\n  'public': 1,\n  'static': 1,\n  'default': 1,\n  'finally': 1,\n  'extends': 1,\n  'package': 1,\n  'private': 1,\n  'function': 1,\n  'continue': 1,\n  'debugger': 1,\n  'interface': 1,\n  'protected': 1,\n  'instanceof': 1,\n  'implements': 1\n};\n\nfunction skipComment() {\n  while (index < length) {\n    const ch = source.charCodeAt(index);\n\n    if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n}\n\nfunction scanHexEscape(prefix) {\n  var i,\n      len,\n      ch,\n      code = 0;\n  len = prefix === 'u' ? 4 : 2;\n\n  for (i = 0; i < len; ++i) {\n    if (index < length && isHexDigit(source[index])) {\n      ch = source[index++];\n      code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n  var ch, code, cu1, cu2;\n  ch = source[index];\n  code = 0; // At least, one hex digit is required.\n\n  if (ch === '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (!isHexDigit(ch)) {\n      break;\n    }\n\n    code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n  }\n\n  if (code > 0x10FFFF || ch !== '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  } // UTF-16 Encoding\n\n\n  if (code <= 0xFFFF) {\n    return String.fromCharCode(code);\n  }\n\n  cu1 = (code - 0x10000 >> 10) + 0xD800;\n  cu2 = (code - 0x10000 & 1023) + 0xDC00;\n  return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n  var ch, id;\n  ch = source.charCodeAt(index++);\n  id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n  if (ch === 0x5C) {\n    if (source.charCodeAt(index) !== 0x75) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n\n    ++index;\n    ch = scanHexEscape('u');\n\n    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n\n    id = ch;\n  }\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (!isIdentifierPart(ch)) {\n      break;\n    }\n\n    ++index;\n    id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n    if (ch === 0x5C) {\n      id = id.substr(0, id.length - 1);\n\n      if (source.charCodeAt(index) !== 0x75) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n\n      ++index;\n      ch = scanHexEscape('u');\n\n      if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n\n      id += ch;\n    }\n  }\n\n  return id;\n}\n\nfunction getIdentifier() {\n  var start, ch;\n  start = index++;\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (ch === 0x5C) {\n      // Blackslash (U+005C) marks Unicode escape sequence.\n      index = start;\n      return getEscapedIdentifier();\n    }\n\n    if (isIdentifierPart(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n\n  return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n  var start, id, type;\n  start = index; // Backslash (U+005C) starts an escaped character.\n\n  id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n  // Thus, it must be an identifier.\n\n  if (id.length === 1) {\n    type = TokenIdentifier;\n  } else if (keywords.hasOwnProperty(id)) {\n    // eslint-disable-line no-prototype-builtins\n    type = TokenKeyword;\n  } else if (id === 'null') {\n    type = TokenNullLiteral;\n  } else if (id === 'true' || id === 'false') {\n    type = TokenBooleanLiteral;\n  } else {\n    type = TokenIdentifier;\n  }\n\n  return {\n    type: type,\n    value: id,\n    start: start,\n    end: index\n  };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n  var start = index,\n      code = source.charCodeAt(index),\n      code2,\n      ch1 = source[index],\n      ch2,\n      ch3,\n      ch4;\n\n  switch (code) {\n    // Check for most common single-character punctuators.\n    case 0x2E: // . dot\n\n    case 0x28: // ( open bracket\n\n    case 0x29: // ) close bracket\n\n    case 0x3B: // ; semicolon\n\n    case 0x2C: // , comma\n\n    case 0x7B: // { open curly brace\n\n    case 0x7D: // } close curly brace\n\n    case 0x5B: // [\n\n    case 0x5D: // ]\n\n    case 0x3A: // :\n\n    case 0x3F: // ?\n\n    case 0x7E:\n      // ~\n      ++index;\n      return {\n        type: TokenPunctuator,\n        value: String.fromCharCode(code),\n        start: start,\n        end: index\n      };\n\n    default:\n      code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n      if (code2 === 0x3D) {\n        switch (code) {\n          case 0x2B: // +\n\n          case 0x2D: // -\n\n          case 0x2F: // /\n\n          case 0x3C: // <\n\n          case 0x3E: // >\n\n          case 0x5E: // ^\n\n          case 0x7C: // |\n\n          case 0x25: // %\n\n          case 0x26: // &\n\n          case 0x2A:\n            // *\n            index += 2;\n            return {\n              type: TokenPunctuator,\n              value: String.fromCharCode(code) + String.fromCharCode(code2),\n              start: start,\n              end: index\n            };\n\n          case 0x21: // !\n\n          case 0x3D:\n            // =\n            index += 2; // !== and ===\n\n            if (source.charCodeAt(index) === 0x3D) {\n              ++index;\n            }\n\n            return {\n              type: TokenPunctuator,\n              value: source.slice(start, index),\n              start: start,\n              end: index\n            };\n        }\n      }\n\n  } // 4-character punctuator: >>>=\n\n\n  ch4 = source.substr(index, 4);\n\n  if (ch4 === '>>>=') {\n    index += 4;\n    return {\n      type: TokenPunctuator,\n      value: ch4,\n      start: start,\n      end: index\n    };\n  } // 3-character punctuators: === !== >>> <<= >>=\n\n\n  ch3 = ch4.substr(0, 3);\n\n  if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n    index += 3;\n    return {\n      type: TokenPunctuator,\n      value: ch3,\n      start: start,\n      end: index\n    };\n  } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n  ch2 = ch3.substr(0, 2);\n\n  if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n    index += 2;\n    return {\n      type: TokenPunctuator,\n      value: ch2,\n      start: start,\n      end: index\n    };\n  } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n  if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n    ++index;\n    return {\n      type: TokenPunctuator,\n      value: ch1,\n      start: start,\n      end: index\n    };\n  }\n\n  throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n  let number = '';\n\n  while (index < length) {\n    if (!isHexDigit(source[index])) {\n      break;\n    }\n\n    number += source[index++];\n  }\n\n  if (number.length === 0) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt('0x' + number, 16),\n    start: start,\n    end: index\n  };\n}\n\nfunction scanOctalLiteral(start) {\n  let number = '0' + source[index++];\n\n  while (index < length) {\n    if (!isOctalDigit(source[index])) {\n      break;\n    }\n\n    number += source[index++];\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt(number, 8),\n    octal: true,\n    start: start,\n    end: index\n  };\n}\n\nfunction scanNumericLiteral() {\n  var number, start, ch;\n  ch = source[index];\n  assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n  start = index;\n  number = '';\n\n  if (ch !== '.') {\n    number = source[index++];\n    ch = source[index]; // Hex number starts with '0x'.\n    // Octal number starts with '0'.\n\n    if (number === '0') {\n      if (ch === 'x' || ch === 'X') {\n        ++index;\n        return scanHexLiteral(start);\n      }\n\n      if (isOctalDigit(ch)) {\n        return scanOctalLiteral(start);\n      } // decimal number starts with '0' such as '09' is illegal.\n\n\n      if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n    }\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n\n    ch = source[index];\n  }\n\n  if (ch === '.') {\n    number += source[index++];\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n\n    ch = source[index];\n  }\n\n  if (ch === 'e' || ch === 'E') {\n    number += source[index++];\n    ch = source[index];\n\n    if (ch === '+' || ch === '-') {\n      number += source[index++];\n    }\n\n    if (isDecimalDigit(source.charCodeAt(index))) {\n      while (isDecimalDigit(source.charCodeAt(index))) {\n        number += source[index++];\n      }\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseFloat(number),\n    start: start,\n    end: index\n  };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n  var str = '',\n      quote,\n      start,\n      ch,\n      code,\n      octal = false;\n  quote = source[index];\n  assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n  start = index;\n  ++index;\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (ch === quote) {\n      quote = '';\n      break;\n    } else if (ch === '\\\\') {\n      ch = source[index++];\n\n      if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n        switch (ch) {\n          case 'u':\n          case 'x':\n            if (source[index] === '{') {\n              ++index;\n              str += scanUnicodeCodePointEscape();\n            } else {\n              str += scanHexEscape(ch);\n            }\n\n            break;\n\n          case 'n':\n            str += '\\n';\n            break;\n\n          case 'r':\n            str += '\\r';\n            break;\n\n          case 't':\n            str += '\\t';\n            break;\n\n          case 'b':\n            str += '\\b';\n            break;\n\n          case 'f':\n            str += '\\f';\n            break;\n\n          case 'v':\n            str += '\\x0B';\n            break;\n\n          default:\n            if (isOctalDigit(ch)) {\n              code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n              if (code !== 0) {\n                octal = true;\n              }\n\n              if (index < length && isOctalDigit(source[index])) {\n                octal = true;\n                code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n                // with 0, 1, 2, 3\n\n                if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n                  code = code * 8 + '01234567'.indexOf(source[index++]);\n                }\n              }\n\n              str += String.fromCharCode(code);\n            } else {\n              str += ch;\n            }\n\n            break;\n        }\n      } else {\n        if (ch === '\\r' && source[index] === '\\n') {\n          ++index;\n        }\n      }\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      break;\n    } else {\n      str += ch;\n    }\n  }\n\n  if (quote !== '') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenStringLiteral,\n    value: str,\n    octal: octal,\n    start: start,\n    end: index\n  };\n}\n\nfunction testRegExp(pattern, flags) {\n  let tmp = pattern;\n\n  if (flags.indexOf('u') >= 0) {\n    // Replace each astral symbol and every Unicode code point\n    // escape sequence with a single ASCII symbol to avoid throwing on\n    // regular expressions that are only valid in combination with the\n    // `/u` flag.\n    // Note: replacing with the ASCII symbol `x` might cause false\n    // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n    // perfectly valid pattern that is equivalent to `[a-b]`, but it\n    // would be replaced by `[x-b]` which throws an error.\n    tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n      if (parseInt($1, 16) <= 0x10FFFF) {\n        return 'x';\n      }\n\n      throwError({}, MessageInvalidRegExp);\n    }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n  } // First, detect invalid regular expressions.\n\n\n  try {\n    new RegExp(tmp);\n  } catch (e) {\n    throwError({}, MessageInvalidRegExp);\n  } // Return a regular expression object for this pattern-flag pair, or\n  // `null` in case the current environment doesn't support the flags it\n  // uses.\n\n\n  try {\n    return new RegExp(pattern, flags);\n  } catch (exception) {\n    return null;\n  }\n}\n\nfunction scanRegExpBody() {\n  var ch, str, classMarker, terminated, body;\n  ch = source[index];\n  assert(ch === '/', 'Regular expression literal must start with a slash');\n  str = source[index++];\n  classMarker = false;\n  terminated = false;\n\n  while (index < length) {\n    ch = source[index++];\n    str += ch;\n\n    if (ch === '\\\\') {\n      ch = source[index++]; // ECMA-262 7.8.5\n\n      if (isLineTerminator(ch.charCodeAt(0))) {\n        throwError({}, MessageUnterminatedRegExp);\n      }\n\n      str += ch;\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      throwError({}, MessageUnterminatedRegExp);\n    } else if (classMarker) {\n      if (ch === ']') {\n        classMarker = false;\n      }\n    } else {\n      if (ch === '/') {\n        terminated = true;\n        break;\n      } else if (ch === '[') {\n        classMarker = true;\n      }\n    }\n  }\n\n  if (!terminated) {\n    throwError({}, MessageUnterminatedRegExp);\n  } // Exclude leading and trailing slash.\n\n\n  body = str.substr(1, str.length - 2);\n  return {\n    value: body,\n    literal: str\n  };\n}\n\nfunction scanRegExpFlags() {\n  var ch, str, flags;\n  str = '';\n  flags = '';\n\n  while (index < length) {\n    ch = source[index];\n\n    if (!isIdentifierPart(ch.charCodeAt(0))) {\n      break;\n    }\n\n    ++index;\n\n    if (ch === '\\\\' && index < length) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    } else {\n      flags += ch;\n      str += ch;\n    }\n  }\n\n  if (flags.search(/[^gimuy]/g) >= 0) {\n    throwError({}, MessageInvalidRegExp, flags);\n  }\n\n  return {\n    value: flags,\n    literal: str\n  };\n}\n\nfunction scanRegExp() {\n  var start, body, flags, value;\n  lookahead = null;\n  skipComment();\n  start = index;\n  body = scanRegExpBody();\n  flags = scanRegExpFlags();\n  value = testRegExp(body.value, flags.value);\n  return {\n    literal: body.literal + flags.literal,\n    value: value,\n    regex: {\n      pattern: body.value,\n      flags: flags.value\n    },\n    start: start,\n    end: index\n  };\n}\n\nfunction isIdentifierName(token) {\n  return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n  skipComment();\n\n  if (index >= length) {\n    return {\n      type: TokenEOF,\n      start: index,\n      end: index\n    };\n  }\n\n  const ch = source.charCodeAt(index);\n\n  if (isIdentifierStart(ch)) {\n    return scanIdentifier();\n  } // Very common: ( and ) and ;\n\n\n  if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n    return scanPunctuator();\n  } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n  if (ch === 0x27 || ch === 0x22) {\n    return scanStringLiteral();\n  } // Dot (.) U+002E can also start a floating-point number, hence the need\n  // to check the next character.\n\n\n  if (ch === 0x2E) {\n    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n      return scanNumericLiteral();\n    }\n\n    return scanPunctuator();\n  }\n\n  if (isDecimalDigit(ch)) {\n    return scanNumericLiteral();\n  }\n\n  return scanPunctuator();\n}\n\nfunction lex() {\n  const token = lookahead;\n  index = token.end;\n  lookahead = advance();\n  index = token.end;\n  return token;\n}\n\nfunction peek() {\n  const pos = index;\n  lookahead = advance();\n  index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n  const node = new ASTNode(SyntaxArrayExpression);\n  node.elements = elements;\n  return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n  const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n  node.operator = operator;\n  node.left = left;\n  node.right = right;\n  return node;\n}\n\nfunction finishCallExpression(callee, args) {\n  const node = new ASTNode(SyntaxCallExpression);\n  node.callee = callee;\n  node.arguments = args;\n  return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n  const node = new ASTNode(SyntaxConditionalExpression);\n  node.test = test;\n  node.consequent = consequent;\n  node.alternate = alternate;\n  return node;\n}\n\nfunction finishIdentifier(name) {\n  const node = new ASTNode(SyntaxIdentifier);\n  node.name = name;\n  return node;\n}\n\nfunction finishLiteral(token) {\n  const node = new ASTNode(SyntaxLiteral);\n  node.value = token.value;\n  node.raw = source.slice(token.start, token.end);\n\n  if (token.regex) {\n    if (node.raw === '//') {\n      node.raw = '/(?:)/';\n    }\n\n    node.regex = token.regex;\n  }\n\n  return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n  const node = new ASTNode(SyntaxMemberExpression);\n  node.computed = accessor === '[';\n  node.object = object;\n  node.property = property;\n  if (!node.computed) property.member = true;\n  return node;\n}\n\nfunction finishObjectExpression(properties) {\n  const node = new ASTNode(SyntaxObjectExpression);\n  node.properties = properties;\n  return node;\n}\n\nfunction finishProperty(kind, key, value) {\n  const node = new ASTNode(SyntaxProperty);\n  node.key = key;\n  node.value = value;\n  node.kind = kind;\n  return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n  const node = new ASTNode(SyntaxUnaryExpression);\n  node.operator = operator;\n  node.argument = argument;\n  node.prefix = true;\n  return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n  var error,\n      args = Array.prototype.slice.call(arguments, 2),\n      msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n    assert(index < args.length, 'Message reference must be in range');\n    return args[index];\n  });\n  error = new Error(msg);\n  error.index = index;\n  error.description = msg;\n  throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n  if (token.type === TokenEOF) {\n    throwError(token, MessageUnexpectedEOS);\n  }\n\n  if (token.type === TokenNumericLiteral) {\n    throwError(token, MessageUnexpectedNumber);\n  }\n\n  if (token.type === TokenStringLiteral) {\n    throwError(token, MessageUnexpectedString);\n  }\n\n  if (token.type === TokenIdentifier) {\n    throwError(token, MessageUnexpectedIdentifier);\n  }\n\n  if (token.type === TokenKeyword) {\n    throwError(token, MessageUnexpectedReserved);\n  } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n  throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n  const token = lex();\n\n  if (token.type !== TokenPunctuator || token.value !== value) {\n    throwUnexpected(token);\n  }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n  return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n  return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n  const elements = [];\n  index = lookahead.start;\n  expect('[');\n\n  while (!match(']')) {\n    if (match(',')) {\n      lex();\n      elements.push(null);\n    } else {\n      elements.push(parseConditionalExpression());\n\n      if (!match(']')) {\n        expect(',');\n      }\n    }\n  }\n\n  lex();\n  return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n  index = lookahead.start;\n  const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n  // EOF and Punctuator tokens are already filtered out.\n\n  if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n    if (token.octal) {\n      throwError(token, MessageStrictOctalLiteral);\n    }\n\n    return finishLiteral(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n  var token, key, id, value;\n  index = lookahead.start;\n  token = lookahead;\n\n  if (token.type === TokenIdentifier) {\n    id = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', id, value);\n  }\n\n  if (token.type === TokenEOF || token.type === TokenPunctuator) {\n    throwUnexpected(token);\n  } else {\n    key = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', key, value);\n  }\n}\n\nfunction parseObjectInitialiser() {\n  var properties = [],\n      property,\n      name,\n      key,\n      map = {},\n      toString = String;\n  index = lookahead.start;\n  expect('{');\n\n  while (!match('}')) {\n    property = parseObjectProperty();\n\n    if (property.key.type === SyntaxIdentifier) {\n      name = property.key.name;\n    } else {\n      name = toString(property.key.value);\n    }\n\n    key = '$' + name;\n\n    if (Object.prototype.hasOwnProperty.call(map, key)) {\n      throwError({}, MessageStrictDuplicateProperty);\n    } else {\n      map[key] = true;\n    }\n\n    properties.push(property);\n\n    if (!match('}')) {\n      expect(',');\n    }\n  }\n\n  expect('}');\n  return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n  expect('(');\n  const expr = parseExpression();\n  expect(')');\n  return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n  'if': 1\n};\n\nfunction parsePrimaryExpression() {\n  var type, token, expr;\n\n  if (match('(')) {\n    return parseGroupExpression();\n  }\n\n  if (match('[')) {\n    return parseArrayInitialiser();\n  }\n\n  if (match('{')) {\n    return parseObjectInitialiser();\n  }\n\n  type = lookahead.type;\n  index = lookahead.start;\n\n  if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n    expr = finishIdentifier(lex().value);\n  } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n    if (lookahead.octal) {\n      throwError(lookahead, MessageStrictOctalLiteral);\n    }\n\n    expr = finishLiteral(lex());\n  } else if (type === TokenKeyword) {\n    throw new Error(DISABLED);\n  } else if (type === TokenBooleanLiteral) {\n    token = lex();\n    token.value = token.value === 'true';\n    expr = finishLiteral(token);\n  } else if (type === TokenNullLiteral) {\n    token = lex();\n    token.value = null;\n    expr = finishLiteral(token);\n  } else if (match('/') || match('/=')) {\n    expr = finishLiteral(scanRegExp());\n    peek();\n  } else {\n    throwUnexpected(lex());\n  }\n\n  return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n  const args = [];\n  expect('(');\n\n  if (!match(')')) {\n    while (index < length) {\n      args.push(parseConditionalExpression());\n\n      if (match(')')) {\n        break;\n      }\n\n      expect(',');\n    }\n  }\n\n  expect(')');\n  return args;\n}\n\nfunction parseNonComputedProperty() {\n  index = lookahead.start;\n  const token = lex();\n\n  if (!isIdentifierName(token)) {\n    throwUnexpected(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n  expect('.');\n  return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n  expect('[');\n  const expr = parseExpression();\n  expect(']');\n  return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n  var expr, args, property;\n  expr = parsePrimaryExpression();\n\n  for (;;) {\n    if (match('.')) {\n      property = parseNonComputedMember();\n      expr = finishMemberExpression('.', expr, property);\n    } else if (match('(')) {\n      args = parseArguments();\n      expr = finishCallExpression(expr, args);\n    } else if (match('[')) {\n      property = parseComputedMember();\n      expr = finishMemberExpression('[', expr, property);\n    } else {\n      break;\n    }\n  }\n\n  return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n  const expr = parseLeftHandSideExpressionAllowCall();\n\n  if (lookahead.type === TokenPunctuator) {\n    if (match('++') || match('--')) {\n      throw new Error(DISABLED);\n    }\n  }\n\n  return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n  var token, expr;\n\n  if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n    expr = parsePostfixExpression();\n  } else if (match('++') || match('--')) {\n    throw new Error(DISABLED);\n  } else if (match('+') || match('-') || match('~') || match('!')) {\n    token = lex();\n    expr = parseUnaryExpression();\n    expr = finishUnaryExpression(token.value, expr);\n  } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n    throw new Error(DISABLED);\n  } else {\n    expr = parsePostfixExpression();\n  }\n\n  return expr;\n}\n\nfunction binaryPrecedence(token) {\n  let prec = 0;\n\n  if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n    return 0;\n  }\n\n  switch (token.value) {\n    case '||':\n      prec = 1;\n      break;\n\n    case '&&':\n      prec = 2;\n      break;\n\n    case '|':\n      prec = 3;\n      break;\n\n    case '^':\n      prec = 4;\n      break;\n\n    case '&':\n      prec = 5;\n      break;\n\n    case '==':\n    case '!=':\n    case '===':\n    case '!==':\n      prec = 6;\n      break;\n\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n    case 'instanceof':\n    case 'in':\n      prec = 7;\n      break;\n\n    case '<<':\n    case '>>':\n    case '>>>':\n      prec = 8;\n      break;\n\n    case '+':\n    case '-':\n      prec = 9;\n      break;\n\n    case '*':\n    case '/':\n    case '%':\n      prec = 11;\n      break;\n  }\n\n  return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n  var marker, markers, expr, token, prec, stack, right, operator, left, i;\n  marker = lookahead;\n  left = parseUnaryExpression();\n  token = lookahead;\n  prec = binaryPrecedence(token);\n\n  if (prec === 0) {\n    return left;\n  }\n\n  token.prec = prec;\n  lex();\n  markers = [marker, lookahead];\n  right = parseUnaryExpression();\n  stack = [left, token, right];\n\n  while ((prec = binaryPrecedence(lookahead)) > 0) {\n    // Reduce: make a binary expression from the three topmost entries.\n    while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n      right = stack.pop();\n      operator = stack.pop().value;\n      left = stack.pop();\n      markers.pop();\n      expr = finishBinaryExpression(operator, left, right);\n      stack.push(expr);\n    } // Shift.\n\n\n    token = lex();\n    token.prec = prec;\n    stack.push(token);\n    markers.push(lookahead);\n    expr = parseUnaryExpression();\n    stack.push(expr);\n  } // Final reduce to clean-up the stack.\n\n\n  i = stack.length - 1;\n  expr = stack[i];\n  markers.pop();\n\n  while (i > 1) {\n    markers.pop();\n    expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n    i -= 2;\n  }\n\n  return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n  var expr, consequent, alternate;\n  expr = parseBinaryExpression();\n\n  if (match('?')) {\n    lex();\n    consequent = parseConditionalExpression();\n    expect(':');\n    alternate = parseConditionalExpression();\n    expr = finishConditionalExpression(expr, consequent, alternate);\n  }\n\n  return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n  const expr = parseConditionalExpression();\n\n  if (match(',')) {\n    throw new Error(DISABLED); // no sequence expressions\n  }\n\n  return expr;\n}\n\nfunction parser (code) {\n  source = code;\n  index = 0;\n  length = source.length;\n  lookahead = null;\n  peek();\n  const expr = parseExpression();\n\n  if (lookahead.type !== TokenEOF) {\n    throw new Error('Unexpect token after expression.');\n  }\n\n  return expr;\n}\n\nvar Constants = {\n  NaN: 'NaN',\n  E: 'Math.E',\n  LN2: 'Math.LN2',\n  LN10: 'Math.LN10',\n  LOG2E: 'Math.LOG2E',\n  LOG10E: 'Math.LOG10E',\n  PI: 'Math.PI',\n  SQRT1_2: 'Math.SQRT1_2',\n  SQRT2: 'Math.SQRT2',\n  MIN_VALUE: 'Number.MIN_VALUE',\n  MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n  function fncall(name, args, cast, type) {\n    let obj = codegen(args[0]);\n\n    if (cast) {\n      obj = cast + '(' + obj + ')';\n      if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n    }\n\n    return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n  }\n\n  function fn(name, cast, type) {\n    return args => fncall(name, args, cast, type);\n  }\n\n  const DATE = 'new Date',\n        STRING = 'String',\n        REGEXP = 'RegExp';\n  return {\n    // MATH functions\n    isNaN: 'Number.isNaN',\n    isFinite: 'Number.isFinite',\n    abs: 'Math.abs',\n    acos: 'Math.acos',\n    asin: 'Math.asin',\n    atan: 'Math.atan',\n    atan2: 'Math.atan2',\n    ceil: 'Math.ceil',\n    cos: 'Math.cos',\n    exp: 'Math.exp',\n    floor: 'Math.floor',\n    log: 'Math.log',\n    max: 'Math.max',\n    min: 'Math.min',\n    pow: 'Math.pow',\n    random: 'Math.random',\n    round: 'Math.round',\n    sin: 'Math.sin',\n    sqrt: 'Math.sqrt',\n    tan: 'Math.tan',\n    clamp: function (args) {\n      if (args.length < 3) error('Missing arguments to clamp function.');\n      if (args.length > 3) error('Too many arguments to clamp function.');\n      const a = args.map(codegen);\n      return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n    },\n    // DATE functions\n    now: 'Date.now',\n    utc: 'Date.UTC',\n    datetime: DATE,\n    date: fn('getDate', DATE, 0),\n    day: fn('getDay', DATE, 0),\n    year: fn('getFullYear', DATE, 0),\n    month: fn('getMonth', DATE, 0),\n    hours: fn('getHours', DATE, 0),\n    minutes: fn('getMinutes', DATE, 0),\n    seconds: fn('getSeconds', DATE, 0),\n    milliseconds: fn('getMilliseconds', DATE, 0),\n    time: fn('getTime', DATE, 0),\n    timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n    utcdate: fn('getUTCDate', DATE, 0),\n    utcday: fn('getUTCDay', DATE, 0),\n    utcyear: fn('getUTCFullYear', DATE, 0),\n    utcmonth: fn('getUTCMonth', DATE, 0),\n    utchours: fn('getUTCHours', DATE, 0),\n    utcminutes: fn('getUTCMinutes', DATE, 0),\n    utcseconds: fn('getUTCSeconds', DATE, 0),\n    utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n    // sequence functions\n    length: fn('length', null, -1),\n    join: fn('join', null),\n    indexof: fn('indexOf', null),\n    lastindexof: fn('lastIndexOf', null),\n    slice: fn('slice', null),\n    reverse: function (args) {\n      return '(' + codegen(args[0]) + ').slice().reverse()';\n    },\n    // STRING functions\n    parseFloat: 'parseFloat',\n    parseInt: 'parseInt',\n    upper: fn('toUpperCase', STRING, 0),\n    lower: fn('toLowerCase', STRING, 0),\n    substring: fn('substring', STRING),\n    split: fn('split', STRING),\n    replace: fn('replace', STRING),\n    trim: fn('trim', STRING, 0),\n    // REGEXP functions\n    regexp: REGEXP,\n    test: fn('test', REGEXP),\n    // Control Flow functions\n    if: function (args) {\n      if (args.length < 3) error('Missing arguments to if function.');\n      if (args.length > 3) error('Too many arguments to if function.');\n      const a = args.map(codegen);\n      return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n    }\n  };\n}\n\nfunction stripQuotes(s) {\n  const n = s && s.length - 1;\n  return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n  opt = opt || {};\n  const allowed = opt.allowed ? toSet(opt.allowed) : {},\n        forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n        constants = opt.constants || Constants,\n        functions = (opt.functions || Functions)(visit),\n        globalvar = opt.globalvar,\n        fieldvar = opt.fieldvar,\n        outputGlobal = isFunction(globalvar) ? globalvar : id => \"\".concat(globalvar, \"[\\\"\").concat(id, \"\\\"]\");\n  let globals = {},\n      fields = {},\n      memberDepth = 0;\n\n  function visit(ast) {\n    if (isString(ast)) return ast;\n    const generator = Generators[ast.type];\n    if (generator == null) error('Unsupported type: ' + ast.type);\n    return generator(ast);\n  }\n\n  const Generators = {\n    Literal: n => n.raw,\n    Identifier: n => {\n      const id = n.name;\n\n      if (memberDepth > 0) {\n        return id;\n      } else if (hasOwnProperty(forbidden, id)) {\n        return error('Illegal identifier: ' + id);\n      } else if (hasOwnProperty(constants, id)) {\n        return constants[id];\n      } else if (hasOwnProperty(allowed, id)) {\n        return id;\n      } else {\n        globals[id] = 1;\n        return outputGlobal(id);\n      }\n    },\n    MemberExpression: n => {\n      const d = !n.computed,\n            o = visit(n.object);\n      if (d) memberDepth += 1;\n      const p = visit(n.property);\n\n      if (o === fieldvar) {\n        // strip quotes to sanitize field name (#1653)\n        fields[stripQuotes(p)] = 1;\n      }\n\n      if (d) memberDepth -= 1;\n      return o + (d ? '.' + p : '[' + p + ']');\n    },\n    CallExpression: n => {\n      if (n.callee.type !== 'Identifier') {\n        error('Illegal callee type: ' + n.callee.type);\n      }\n\n      const callee = n.callee.name,\n            args = n.arguments,\n            fn = hasOwnProperty(functions, callee) && functions[callee];\n      if (!fn) error('Unrecognized function: ' + callee);\n      return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n    },\n    ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n    BinaryExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n    UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n    ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n    LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n    ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n    Property: n => {\n      memberDepth += 1;\n      const k = visit(n.key);\n      memberDepth -= 1;\n      return k + ':' + visit(n.value);\n    }\n  };\n\n  function codegen(ast) {\n    const result = {\n      code: visit(ast),\n      globals: Object.keys(globals),\n      fields: Object.keys(fields)\n    };\n    globals = {};\n    fields = {};\n    return result;\n  }\n\n  codegen.functions = functions;\n  codegen.constants = constants;\n  return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n  this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n  let c, i, n;\n  if (visitor(this)) return 1;\n\n  for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n    if (c[i].visit(visitor)) return 1;\n  }\n};\n\nfunction children(node) {\n  switch (node.type) {\n    case ArrayExpression:\n      return node.elements;\n\n    case BinaryExpression:\n    case LogicalExpression:\n      return [node.left, node.right];\n\n    case CallExpression:\n      return [node.callee].concat(node.arguments);\n\n    case ConditionalExpression:\n      return [node.test, node.consequent, node.alternate];\n\n    case MemberExpression:\n      return [node.object, node.property];\n\n    case ObjectExpression:\n      return node.properties;\n\n    case Property:\n      return [node.key, node.value];\n\n    case UnaryExpression:\n      return [node.argument];\n\n    case Identifier:\n    case Literal:\n    case RawCode:\n    default:\n      return [];\n  }\n}\n\n/*\n  The following expression parser is based on Esprima (http://esprima.org/).\n  Original header comment and license for Esprima is included here:\n\n  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n    TokenEOF = 2,\n    TokenIdentifier = 3,\n    TokenKeyword = 4,\n    TokenNullLiteral = 5,\n    TokenNumericLiteral = 6,\n    TokenPunctuator = 7,\n    TokenStringLiteral = 8,\n    TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '<end>';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n    SyntaxBinaryExpression = 'BinaryExpression',\n    SyntaxCallExpression = 'CallExpression',\n    SyntaxConditionalExpression = 'ConditionalExpression',\n    SyntaxIdentifier = 'Identifier',\n    SyntaxLiteral = 'Literal',\n    SyntaxLogicalExpression = 'LogicalExpression',\n    SyntaxMemberExpression = 'MemberExpression',\n    SyntaxObjectExpression = 'ObjectExpression',\n    SyntaxProperty = 'Property',\n    SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n    MessageUnexpectedNumber = 'Unexpected number',\n    MessageUnexpectedString = 'Unexpected string',\n    MessageUnexpectedIdentifier = 'Unexpected identifier',\n    MessageUnexpectedReserved = 'Unexpected reserved word',\n    MessageUnexpectedEOS = 'Unexpected end of input',\n    MessageInvalidRegExp = 'Invalid regular expression',\n    MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n    MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n    MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n    DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n    // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n  /* istanbul ignore next */\n  if (!condition) {\n    throw new Error('ASSERT: ' + message);\n  }\n}\n\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n  return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n  return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n  return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n  return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n  ch >= 0x41 && ch <= 0x5A || // A..Z\n  ch >= 0x61 && ch <= 0x7A || // a..z\n  ch === 0x5C || // \\ (backslash)\n  ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n  return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n  ch >= 0x41 && ch <= 0x5A || // A..Z\n  ch >= 0x61 && ch <= 0x7A || // a..z\n  ch >= 0x30 && ch <= 0x39 || // 0..9\n  ch === 0x5C || // \\ (backslash)\n  ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n  'if': 1,\n  'in': 1,\n  'do': 1,\n  'var': 1,\n  'for': 1,\n  'new': 1,\n  'try': 1,\n  'let': 1,\n  'this': 1,\n  'else': 1,\n  'case': 1,\n  'void': 1,\n  'with': 1,\n  'enum': 1,\n  'while': 1,\n  'break': 1,\n  'catch': 1,\n  'throw': 1,\n  'const': 1,\n  'yield': 1,\n  'class': 1,\n  'super': 1,\n  'return': 1,\n  'typeof': 1,\n  'delete': 1,\n  'switch': 1,\n  'export': 1,\n  'import': 1,\n  'public': 1,\n  'static': 1,\n  'default': 1,\n  'finally': 1,\n  'extends': 1,\n  'package': 1,\n  'private': 1,\n  'function': 1,\n  'continue': 1,\n  'debugger': 1,\n  'interface': 1,\n  'protected': 1,\n  'instanceof': 1,\n  'implements': 1\n};\n\nfunction skipComment() {\n  while (index < length) {\n    const ch = source.charCodeAt(index);\n\n    if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n}\n\nfunction scanHexEscape(prefix) {\n  var i,\n      len,\n      ch,\n      code = 0;\n  len = prefix === 'u' ? 4 : 2;\n\n  for (i = 0; i < len; ++i) {\n    if (index < length && isHexDigit(source[index])) {\n      ch = source[index++];\n      code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n  var ch, code, cu1, cu2;\n  ch = source[index];\n  code = 0; // At least, one hex digit is required.\n\n  if (ch === '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (!isHexDigit(ch)) {\n      break;\n    }\n\n    code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n  }\n\n  if (code > 0x10FFFF || ch !== '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  } // UTF-16 Encoding\n\n\n  if (code <= 0xFFFF) {\n    return String.fromCharCode(code);\n  }\n\n  cu1 = (code - 0x10000 >> 10) + 0xD800;\n  cu2 = (code - 0x10000 & 1023) + 0xDC00;\n  return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n  var ch, id;\n  ch = source.charCodeAt(index++);\n  id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n  if (ch === 0x5C) {\n    if (source.charCodeAt(index) !== 0x75) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n\n    ++index;\n    ch = scanHexEscape('u');\n\n    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n\n    id = ch;\n  }\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (!isIdentifierPart(ch)) {\n      break;\n    }\n\n    ++index;\n    id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n    if (ch === 0x5C) {\n      id = id.substr(0, id.length - 1);\n\n      if (source.charCodeAt(index) !== 0x75) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n\n      ++index;\n      ch = scanHexEscape('u');\n\n      if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n\n      id += ch;\n    }\n  }\n\n  return id;\n}\n\nfunction getIdentifier() {\n  var start, ch;\n  start = index++;\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (ch === 0x5C) {\n      // Blackslash (U+005C) marks Unicode escape sequence.\n      index = start;\n      return getEscapedIdentifier();\n    }\n\n    if (isIdentifierPart(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n\n  return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n  var start, id, type;\n  start = index; // Backslash (U+005C) starts an escaped character.\n\n  id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n  // Thus, it must be an identifier.\n\n  if (id.length === 1) {\n    type = TokenIdentifier;\n  } else if (keywords.hasOwnProperty(id)) {\n    // eslint-disable-line no-prototype-builtins\n    type = TokenKeyword;\n  } else if (id === 'null') {\n    type = TokenNullLiteral;\n  } else if (id === 'true' || id === 'false') {\n    type = TokenBooleanLiteral;\n  } else {\n    type = TokenIdentifier;\n  }\n\n  return {\n    type: type,\n    value: id,\n    start: start,\n    end: index\n  };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n  var start = index,\n      code = source.charCodeAt(index),\n      code2,\n      ch1 = source[index],\n      ch2,\n      ch3,\n      ch4;\n\n  switch (code) {\n    // Check for most common single-character punctuators.\n    case 0x2E: // . dot\n\n    case 0x28: // ( open bracket\n\n    case 0x29: // ) close bracket\n\n    case 0x3B: // ; semicolon\n\n    case 0x2C: // , comma\n\n    case 0x7B: // { open curly brace\n\n    case 0x7D: // } close curly brace\n\n    case 0x5B: // [\n\n    case 0x5D: // ]\n\n    case 0x3A: // :\n\n    case 0x3F: // ?\n\n    case 0x7E:\n      // ~\n      ++index;\n      return {\n        type: TokenPunctuator,\n        value: String.fromCharCode(code),\n        start: start,\n        end: index\n      };\n\n    default:\n      code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n      if (code2 === 0x3D) {\n        switch (code) {\n          case 0x2B: // +\n\n          case 0x2D: // -\n\n          case 0x2F: // /\n\n          case 0x3C: // <\n\n          case 0x3E: // >\n\n          case 0x5E: // ^\n\n          case 0x7C: // |\n\n          case 0x25: // %\n\n          case 0x26: // &\n\n          case 0x2A:\n            // *\n            index += 2;\n            return {\n              type: TokenPunctuator,\n              value: String.fromCharCode(code) + String.fromCharCode(code2),\n              start: start,\n              end: index\n            };\n\n          case 0x21: // !\n\n          case 0x3D:\n            // =\n            index += 2; // !== and ===\n\n            if (source.charCodeAt(index) === 0x3D) {\n              ++index;\n            }\n\n            return {\n              type: TokenPunctuator,\n              value: source.slice(start, index),\n              start: start,\n              end: index\n            };\n        }\n      }\n\n  } // 4-character punctuator: >>>=\n\n\n  ch4 = source.substr(index, 4);\n\n  if (ch4 === '>>>=') {\n    index += 4;\n    return {\n      type: TokenPunctuator,\n      value: ch4,\n      start: start,\n      end: index\n    };\n  } // 3-character punctuators: === !== >>> <<= >>=\n\n\n  ch3 = ch4.substr(0, 3);\n\n  if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n    index += 3;\n    return {\n      type: TokenPunctuator,\n      value: ch3,\n      start: start,\n      end: index\n    };\n  } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n  ch2 = ch3.substr(0, 2);\n\n  if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n    index += 2;\n    return {\n      type: TokenPunctuator,\n      value: ch2,\n      start: start,\n      end: index\n    };\n  } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n  if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n    ++index;\n    return {\n      type: TokenPunctuator,\n      value: ch1,\n      start: start,\n      end: index\n    };\n  }\n\n  throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n  let number = '';\n\n  while (index < length) {\n    if (!isHexDigit(source[index])) {\n      break;\n    }\n\n    number += source[index++];\n  }\n\n  if (number.length === 0) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt('0x' + number, 16),\n    start: start,\n    end: index\n  };\n}\n\nfunction scanOctalLiteral(start) {\n  let number = '0' + source[index++];\n\n  while (index < length) {\n    if (!isOctalDigit(source[index])) {\n      break;\n    }\n\n    number += source[index++];\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt(number, 8),\n    octal: true,\n    start: start,\n    end: index\n  };\n}\n\nfunction scanNumericLiteral() {\n  var number, start, ch;\n  ch = source[index];\n  assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n  start = index;\n  number = '';\n\n  if (ch !== '.') {\n    number = source[index++];\n    ch = source[index]; // Hex number starts with '0x'.\n    // Octal number starts with '0'.\n\n    if (number === '0') {\n      if (ch === 'x' || ch === 'X') {\n        ++index;\n        return scanHexLiteral(start);\n      }\n\n      if (isOctalDigit(ch)) {\n        return scanOctalLiteral(start);\n      } // decimal number starts with '0' such as '09' is illegal.\n\n\n      if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n    }\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n\n    ch = source[index];\n  }\n\n  if (ch === '.') {\n    number += source[index++];\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n\n    ch = source[index];\n  }\n\n  if (ch === 'e' || ch === 'E') {\n    number += source[index++];\n    ch = source[index];\n\n    if (ch === '+' || ch === '-') {\n      number += source[index++];\n    }\n\n    if (isDecimalDigit(source.charCodeAt(index))) {\n      while (isDecimalDigit(source.charCodeAt(index))) {\n        number += source[index++];\n      }\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseFloat(number),\n    start: start,\n    end: index\n  };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n  var str = '',\n      quote,\n      start,\n      ch,\n      code,\n      octal = false;\n  quote = source[index];\n  assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n  start = index;\n  ++index;\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (ch === quote) {\n      quote = '';\n      break;\n    } else if (ch === '\\\\') {\n      ch = source[index++];\n\n      if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n        switch (ch) {\n          case 'u':\n          case 'x':\n            if (source[index] === '{') {\n              ++index;\n              str += scanUnicodeCodePointEscape();\n            } else {\n              str += scanHexEscape(ch);\n            }\n\n            break;\n\n          case 'n':\n            str += '\\n';\n            break;\n\n          case 'r':\n            str += '\\r';\n            break;\n\n          case 't':\n            str += '\\t';\n            break;\n\n          case 'b':\n            str += '\\b';\n            break;\n\n          case 'f':\n            str += '\\f';\n            break;\n\n          case 'v':\n            str += '\\x0B';\n            break;\n\n          default:\n            if (isOctalDigit(ch)) {\n              code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n              if (code !== 0) {\n                octal = true;\n              }\n\n              if (index < length && isOctalDigit(source[index])) {\n                octal = true;\n                code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n                // with 0, 1, 2, 3\n\n                if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n                  code = code * 8 + '01234567'.indexOf(source[index++]);\n                }\n              }\n\n              str += String.fromCharCode(code);\n            } else {\n              str += ch;\n            }\n\n            break;\n        }\n      } else {\n        if (ch === '\\r' && source[index] === '\\n') {\n          ++index;\n        }\n      }\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      break;\n    } else {\n      str += ch;\n    }\n  }\n\n  if (quote !== '') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenStringLiteral,\n    value: str,\n    octal: octal,\n    start: start,\n    end: index\n  };\n}\n\nfunction testRegExp(pattern, flags) {\n  let tmp = pattern;\n\n  if (flags.indexOf('u') >= 0) {\n    // Replace each astral symbol and every Unicode code point\n    // escape sequence with a single ASCII symbol to avoid throwing on\n    // regular expressions that are only valid in combination with the\n    // `/u` flag.\n    // Note: replacing with the ASCII symbol `x` might cause false\n    // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n    // perfectly valid pattern that is equivalent to `[a-b]`, but it\n    // would be replaced by `[x-b]` which throws an error.\n    tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n      if (parseInt($1, 16) <= 0x10FFFF) {\n        return 'x';\n      }\n\n      throwError({}, MessageInvalidRegExp);\n    }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n  } // First, detect invalid regular expressions.\n\n\n  try {\n    new RegExp(tmp);\n  } catch (e) {\n    throwError({}, MessageInvalidRegExp);\n  } // Return a regular expression object for this pattern-flag pair, or\n  // `null` in case the current environment doesn't support the flags it\n  // uses.\n\n\n  try {\n    return new RegExp(pattern, flags);\n  } catch (exception) {\n    return null;\n  }\n}\n\nfunction scanRegExpBody() {\n  var ch, str, classMarker, terminated, body;\n  ch = source[index];\n  assert(ch === '/', 'Regular expression literal must start with a slash');\n  str = source[index++];\n  classMarker = false;\n  terminated = false;\n\n  while (index < length) {\n    ch = source[index++];\n    str += ch;\n\n    if (ch === '\\\\') {\n      ch = source[index++]; // ECMA-262 7.8.5\n\n      if (isLineTerminator(ch.charCodeAt(0))) {\n        throwError({}, MessageUnterminatedRegExp);\n      }\n\n      str += ch;\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      throwError({}, MessageUnterminatedRegExp);\n    } else if (classMarker) {\n      if (ch === ']') {\n        classMarker = false;\n      }\n    } else {\n      if (ch === '/') {\n        terminated = true;\n        break;\n      } else if (ch === '[') {\n        classMarker = true;\n      }\n    }\n  }\n\n  if (!terminated) {\n    throwError({}, MessageUnterminatedRegExp);\n  } // Exclude leading and trailing slash.\n\n\n  body = str.substr(1, str.length - 2);\n  return {\n    value: body,\n    literal: str\n  };\n}\n\nfunction scanRegExpFlags() {\n  var ch, str, flags;\n  str = '';\n  flags = '';\n\n  while (index < length) {\n    ch = source[index];\n\n    if (!isIdentifierPart(ch.charCodeAt(0))) {\n      break;\n    }\n\n    ++index;\n\n    if (ch === '\\\\' && index < length) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    } else {\n      flags += ch;\n      str += ch;\n    }\n  }\n\n  if (flags.search(/[^gimuy]/g) >= 0) {\n    throwError({}, MessageInvalidRegExp, flags);\n  }\n\n  return {\n    value: flags,\n    literal: str\n  };\n}\n\nfunction scanRegExp() {\n  var start, body, flags, value;\n  lookahead = null;\n  skipComment();\n  start = index;\n  body = scanRegExpBody();\n  flags = scanRegExpFlags();\n  value = testRegExp(body.value, flags.value);\n  return {\n    literal: body.literal + flags.literal,\n    value: value,\n    regex: {\n      pattern: body.value,\n      flags: flags.value\n    },\n    start: start,\n    end: index\n  };\n}\n\nfunction isIdentifierName(token) {\n  return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n  skipComment();\n\n  if (index >= length) {\n    return {\n      type: TokenEOF,\n      start: index,\n      end: index\n    };\n  }\n\n  const ch = source.charCodeAt(index);\n\n  if (isIdentifierStart(ch)) {\n    return scanIdentifier();\n  } // Very common: ( and ) and ;\n\n\n  if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n    return scanPunctuator();\n  } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n  if (ch === 0x27 || ch === 0x22) {\n    return scanStringLiteral();\n  } // Dot (.) U+002E can also start a floating-point number, hence the need\n  // to check the next character.\n\n\n  if (ch === 0x2E) {\n    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n      return scanNumericLiteral();\n    }\n\n    return scanPunctuator();\n  }\n\n  if (isDecimalDigit(ch)) {\n    return scanNumericLiteral();\n  }\n\n  return scanPunctuator();\n}\n\nfunction lex() {\n  const token = lookahead;\n  index = token.end;\n  lookahead = advance();\n  index = token.end;\n  return token;\n}\n\nfunction peek() {\n  const pos = index;\n  lookahead = advance();\n  index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n  const node = new ASTNode(SyntaxArrayExpression);\n  node.elements = elements;\n  return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n  const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n  node.operator = operator;\n  node.left = left;\n  node.right = right;\n  return node;\n}\n\nfunction finishCallExpression(callee, args) {\n  const node = new ASTNode(SyntaxCallExpression);\n  node.callee = callee;\n  node.arguments = args;\n  return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n  const node = new ASTNode(SyntaxConditionalExpression);\n  node.test = test;\n  node.consequent = consequent;\n  node.alternate = alternate;\n  return node;\n}\n\nfunction finishIdentifier(name) {\n  const node = new ASTNode(SyntaxIdentifier);\n  node.name = name;\n  return node;\n}\n\nfunction finishLiteral(token) {\n  const node = new ASTNode(SyntaxLiteral);\n  node.value = token.value;\n  node.raw = source.slice(token.start, token.end);\n\n  if (token.regex) {\n    if (node.raw === '//') {\n      node.raw = '/(?:)/';\n    }\n\n    node.regex = token.regex;\n  }\n\n  return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n  const node = new ASTNode(SyntaxMemberExpression);\n  node.computed = accessor === '[';\n  node.object = object;\n  node.property = property;\n  if (!node.computed) property.member = true;\n  return node;\n}\n\nfunction finishObjectExpression(properties) {\n  const node = new ASTNode(SyntaxObjectExpression);\n  node.properties = properties;\n  return node;\n}\n\nfunction finishProperty(kind, key, value) {\n  const node = new ASTNode(SyntaxProperty);\n  node.key = key;\n  node.value = value;\n  node.kind = kind;\n  return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n  const node = new ASTNode(SyntaxUnaryExpression);\n  node.operator = operator;\n  node.argument = argument;\n  node.prefix = true;\n  return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n  var error,\n      args = Array.prototype.slice.call(arguments, 2),\n      msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n    assert(index < args.length, 'Message reference must be in range');\n    return args[index];\n  });\n  error = new Error(msg);\n  error.index = index;\n  error.description = msg;\n  throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n  if (token.type === TokenEOF) {\n    throwError(token, MessageUnexpectedEOS);\n  }\n\n  if (token.type === TokenNumericLiteral) {\n    throwError(token, MessageUnexpectedNumber);\n  }\n\n  if (token.type === TokenStringLiteral) {\n    throwError(token, MessageUnexpectedString);\n  }\n\n  if (token.type === TokenIdentifier) {\n    throwError(token, MessageUnexpectedIdentifier);\n  }\n\n  if (token.type === TokenKeyword) {\n    throwError(token, MessageUnexpectedReserved);\n  } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n  throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n  const token = lex();\n\n  if (token.type !== TokenPunctuator || token.value !== value) {\n    throwUnexpected(token);\n  }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n  return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n  return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n  const elements = [];\n  index = lookahead.start;\n  expect('[');\n\n  while (!match(']')) {\n    if (match(',')) {\n      lex();\n      elements.push(null);\n    } else {\n      elements.push(parseConditionalExpression());\n\n      if (!match(']')) {\n        expect(',');\n      }\n    }\n  }\n\n  lex();\n  return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n  index = lookahead.start;\n  const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n  // EOF and Punctuator tokens are already filtered out.\n\n  if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n    if (token.octal) {\n      throwError(token, MessageStrictOctalLiteral);\n    }\n\n    return finishLiteral(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n  var token, key, id, value;\n  index = lookahead.start;\n  token = lookahead;\n\n  if (token.type === TokenIdentifier) {\n    id = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', id, value);\n  }\n\n  if (token.type === TokenEOF || token.type === TokenPunctuator) {\n    throwUnexpected(token);\n  } else {\n    key = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', key, value);\n  }\n}\n\nfunction parseObjectInitialiser() {\n  var properties = [],\n      property,\n      name,\n      key,\n      map = {},\n      toString = String;\n  index = lookahead.start;\n  expect('{');\n\n  while (!match('}')) {\n    property = parseObjectProperty();\n\n    if (property.key.type === SyntaxIdentifier) {\n      name = property.key.name;\n    } else {\n      name = toString(property.key.value);\n    }\n\n    key = '$' + name;\n\n    if (Object.prototype.hasOwnProperty.call(map, key)) {\n      throwError({}, MessageStrictDuplicateProperty);\n    } else {\n      map[key] = true;\n    }\n\n    properties.push(property);\n\n    if (!match('}')) {\n      expect(',');\n    }\n  }\n\n  expect('}');\n  return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n  expect('(');\n  const expr = parseExpression();\n  expect(')');\n  return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n  'if': 1\n};\n\nfunction parsePrimaryExpression() {\n  var type, token, expr;\n\n  if (match('(')) {\n    return parseGroupExpression();\n  }\n\n  if (match('[')) {\n    return parseArrayInitialiser();\n  }\n\n  if (match('{')) {\n    return parseObjectInitialiser();\n  }\n\n  type = lookahead.type;\n  index = lookahead.start;\n\n  if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n    expr = finishIdentifier(lex().value);\n  } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n    if (lookahead.octal) {\n      throwError(lookahead, MessageStrictOctalLiteral);\n    }\n\n    expr = finishLiteral(lex());\n  } else if (type === TokenKeyword) {\n    throw new Error(DISABLED);\n  } else if (type === TokenBooleanLiteral) {\n    token = lex();\n    token.value = token.value === 'true';\n    expr = finishLiteral(token);\n  } else if (type === TokenNullLiteral) {\n    token = lex();\n    token.value = null;\n    expr = finishLiteral(token);\n  } else if (match('/') || match('/=')) {\n    expr = finishLiteral(scanRegExp());\n    peek();\n  } else {\n    throwUnexpected(lex());\n  }\n\n  return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n  const args = [];\n  expect('(');\n\n  if (!match(')')) {\n    while (index < length) {\n      args.push(parseConditionalExpression());\n\n      if (match(')')) {\n        break;\n      }\n\n      expect(',');\n    }\n  }\n\n  expect(')');\n  return args;\n}\n\nfunction parseNonComputedProperty() {\n  index = lookahead.start;\n  const token = lex();\n\n  if (!isIdentifierName(token)) {\n    throwUnexpected(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n  expect('.');\n  return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n  expect('[');\n  const expr = parseExpression();\n  expect(']');\n  return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n  var expr, args, property;\n  expr = parsePrimaryExpression();\n\n  for (;;) {\n    if (match('.')) {\n      property = parseNonComputedMember();\n      expr = finishMemberExpression('.', expr, property);\n    } else if (match('(')) {\n      args = parseArguments();\n      expr = finishCallExpression(expr, args);\n    } else if (match('[')) {\n      property = parseComputedMember();\n      expr = finishMemberExpression('[', expr, property);\n    } else {\n      break;\n    }\n  }\n\n  return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n  const expr = parseLeftHandSideExpressionAllowCall();\n\n  if (lookahead.type === TokenPunctuator) {\n    if (match('++') || match('--')) {\n      throw new Error(DISABLED);\n    }\n  }\n\n  return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n  var token, expr;\n\n  if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n    expr = parsePostfixExpression();\n  } else if (match('++') || match('--')) {\n    throw new Error(DISABLED);\n  } else if (match('+') || match('-') || match('~') || match('!')) {\n    token = lex();\n    expr = parseUnaryExpression();\n    expr = finishUnaryExpression(token.value, expr);\n  } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n    throw new Error(DISABLED);\n  } else {\n    expr = parsePostfixExpression();\n  }\n\n  return expr;\n}\n\nfunction binaryPrecedence(token) {\n  let prec = 0;\n\n  if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n    return 0;\n  }\n\n  switch (token.value) {\n    case '||':\n      prec = 1;\n      break;\n\n    case '&&':\n      prec = 2;\n      break;\n\n    case '|':\n      prec = 3;\n      break;\n\n    case '^':\n      prec = 4;\n      break;\n\n    case '&':\n      prec = 5;\n      break;\n\n    case '==':\n    case '!=':\n    case '===':\n    case '!==':\n      prec = 6;\n      break;\n\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n    case 'instanceof':\n    case 'in':\n      prec = 7;\n      break;\n\n    case '<<':\n    case '>>':\n    case '>>>':\n      prec = 8;\n      break;\n\n    case '+':\n    case '-':\n      prec = 9;\n      break;\n\n    case '*':\n    case '/':\n    case '%':\n      prec = 11;\n      break;\n  }\n\n  return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n  var marker, markers, expr, token, prec, stack, right, operator, left, i;\n  marker = lookahead;\n  left = parseUnaryExpression();\n  token = lookahead;\n  prec = binaryPrecedence(token);\n\n  if (prec === 0) {\n    return left;\n  }\n\n  token.prec = prec;\n  lex();\n  markers = [marker, lookahead];\n  right = parseUnaryExpression();\n  stack = [left, token, right];\n\n  while ((prec = binaryPrecedence(lookahead)) > 0) {\n    // Reduce: make a binary expression from the three topmost entries.\n    while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n      right = stack.pop();\n      operator = stack.pop().value;\n      left = stack.pop();\n      markers.pop();\n      expr = finishBinaryExpression(operator, left, right);\n      stack.push(expr);\n    } // Shift.\n\n\n    token = lex();\n    token.prec = prec;\n    stack.push(token);\n    markers.push(lookahead);\n    expr = parseUnaryExpression();\n    stack.push(expr);\n  } // Final reduce to clean-up the stack.\n\n\n  i = stack.length - 1;\n  expr = stack[i];\n  markers.pop();\n\n  while (i > 1) {\n    markers.pop();\n    expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n    i -= 2;\n  }\n\n  return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n  var expr, consequent, alternate;\n  expr = parseBinaryExpression();\n\n  if (match('?')) {\n    lex();\n    consequent = parseConditionalExpression();\n    expect(':');\n    alternate = parseConditionalExpression();\n    expr = finishConditionalExpression(expr, consequent, alternate);\n  }\n\n  return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n  const expr = parseConditionalExpression();\n\n  if (match(',')) {\n    throw new Error(DISABLED); // no sequence expressions\n  }\n\n  return expr;\n}\n\nfunction parser (code) {\n  source = code;\n  index = 0;\n  length = source.length;\n  lookahead = null;\n  peek();\n  const expr = parseExpression();\n\n  if (lookahead.type !== TokenEOF) {\n    throw new Error('Unexpect token after expression.');\n  }\n\n  return expr;\n}\n\nvar Constants = {\n  NaN: 'NaN',\n  E: 'Math.E',\n  LN2: 'Math.LN2',\n  LN10: 'Math.LN10',\n  LOG2E: 'Math.LOG2E',\n  LOG10E: 'Math.LOG10E',\n  PI: 'Math.PI',\n  SQRT1_2: 'Math.SQRT1_2',\n  SQRT2: 'Math.SQRT2',\n  MIN_VALUE: 'Number.MIN_VALUE',\n  MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n  function fncall(name, args, cast, type) {\n    let obj = codegen(args[0]);\n\n    if (cast) {\n      obj = cast + '(' + obj + ')';\n      if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n    }\n\n    return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n  }\n\n  function fn(name, cast, type) {\n    return args => fncall(name, args, cast, type);\n  }\n\n  const DATE = 'new Date',\n        STRING = 'String',\n        REGEXP = 'RegExp';\n  return {\n    // MATH functions\n    isNaN: 'Number.isNaN',\n    isFinite: 'Number.isFinite',\n    abs: 'Math.abs',\n    acos: 'Math.acos',\n    asin: 'Math.asin',\n    atan: 'Math.atan',\n    atan2: 'Math.atan2',\n    ceil: 'Math.ceil',\n    cos: 'Math.cos',\n    exp: 'Math.exp',\n    floor: 'Math.floor',\n    log: 'Math.log',\n    max: 'Math.max',\n    min: 'Math.min',\n    pow: 'Math.pow',\n    random: 'Math.random',\n    round: 'Math.round',\n    sin: 'Math.sin',\n    sqrt: 'Math.sqrt',\n    tan: 'Math.tan',\n    clamp: function (args) {\n      if (args.length < 3) error('Missing arguments to clamp function.');\n      if (args.length > 3) error('Too many arguments to clamp function.');\n      const a = args.map(codegen);\n      return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n    },\n    // DATE functions\n    now: 'Date.now',\n    utc: 'Date.UTC',\n    datetime: DATE,\n    date: fn('getDate', DATE, 0),\n    day: fn('getDay', DATE, 0),\n    year: fn('getFullYear', DATE, 0),\n    month: fn('getMonth', DATE, 0),\n    hours: fn('getHours', DATE, 0),\n    minutes: fn('getMinutes', DATE, 0),\n    seconds: fn('getSeconds', DATE, 0),\n    milliseconds: fn('getMilliseconds', DATE, 0),\n    time: fn('getTime', DATE, 0),\n    timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n    utcdate: fn('getUTCDate', DATE, 0),\n    utcday: fn('getUTCDay', DATE, 0),\n    utcyear: fn('getUTCFullYear', DATE, 0),\n    utcmonth: fn('getUTCMonth', DATE, 0),\n    utchours: fn('getUTCHours', DATE, 0),\n    utcminutes: fn('getUTCMinutes', DATE, 0),\n    utcseconds: fn('getUTCSeconds', DATE, 0),\n    utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n    // sequence functions\n    length: fn('length', null, -1),\n    join: fn('join', null),\n    indexof: fn('indexOf', null),\n    lastindexof: fn('lastIndexOf', null),\n    slice: fn('slice', null),\n    reverse: function (args) {\n      return '(' + codegen(args[0]) + ').slice().reverse()';\n    },\n    // STRING functions\n    parseFloat: 'parseFloat',\n    parseInt: 'parseInt',\n    upper: fn('toUpperCase', STRING, 0),\n    lower: fn('toLowerCase', STRING, 0),\n    substring: fn('substring', STRING),\n    split: fn('split', STRING),\n    replace: fn('replace', STRING),\n    trim: fn('trim', STRING, 0),\n    // REGEXP functions\n    regexp: REGEXP,\n    test: fn('test', REGEXP),\n    // Control Flow functions\n    if: function (args) {\n      if (args.length < 3) error('Missing arguments to if function.');\n      if (args.length > 3) error('Too many arguments to if function.');\n      const a = args.map(codegen);\n      return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n    }\n  };\n}\n\nfunction stripQuotes(s) {\n  const n = s && s.length - 1;\n  return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n  opt = opt || {};\n  const allowed = opt.allowed ? toSet(opt.allowed) : {},\n        forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n        constants = opt.constants || Constants,\n        functions = (opt.functions || Functions)(visit),\n        globalvar = opt.globalvar,\n        fieldvar = opt.fieldvar,\n        outputGlobal = isFunction(globalvar) ? globalvar : id => \"\".concat(globalvar, \"[\\\"\").concat(id, \"\\\"]\");\n  let globals = {},\n      fields = {},\n      memberDepth = 0;\n\n  function visit(ast) {\n    if (isString(ast)) return ast;\n    const generator = Generators[ast.type];\n    if (generator == null) error('Unsupported type: ' + ast.type);\n    return generator(ast);\n  }\n\n  const Generators = {\n    Literal: n => n.raw,\n    Identifier: n => {\n      const id = n.name;\n\n      if (memberDepth > 0) {\n        return id;\n      } else if (hasOwnProperty(forbidden, id)) {\n        return error('Illegal identifier: ' + id);\n      } else if (hasOwnProperty(constants, id)) {\n        return constants[id];\n      } else if (hasOwnProperty(allowed, id)) {\n        return id;\n      } else {\n        globals[id] = 1;\n        return outputGlobal(id);\n      }\n    },\n    MemberExpression: n => {\n      const d = !n.computed,\n            o = visit(n.object);\n      if (d) memberDepth += 1;\n      const p = visit(n.property);\n\n      if (o === fieldvar) {\n        // strip quotes to sanitize field name (#1653)\n        fields[stripQuotes(p)] = 1;\n      }\n\n      if (d) memberDepth -= 1;\n      return o + (d ? '.' + p : '[' + p + ']');\n    },\n    CallExpression: n => {\n      if (n.callee.type !== 'Identifier') {\n        error('Illegal callee type: ' + n.callee.type);\n      }\n\n      const callee = n.callee.name,\n            args = n.arguments,\n            fn = hasOwnProperty(functions, callee) && functions[callee];\n      if (!fn) error('Unrecognized function: ' + callee);\n      return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n    },\n    ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n    BinaryExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n    UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n    ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n    LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n    ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n    Property: n => {\n      memberDepth += 1;\n      const k = visit(n.key);\n      memberDepth -= 1;\n      return k + ':' + visit(n.value);\n    }\n  };\n\n  function codegen(ast) {\n    const result = {\n      code: visit(ast),\n      globals: Object.keys(globals),\n      fields: Object.keys(fields)\n    };\n    globals = {};\n    fields = {};\n    return result;\n  }\n\n  codegen.functions = functions;\n  codegen.constants = constants;\n  return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import { field, isDate, toNumber, isArray, inrange, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst Or = 'or';\nconst And = 'and';\n\nvar TYPE_ENUM = 'E',\n    TYPE_RANGE_INC = 'R',\n    TYPE_RANGE_EXC = 'R-E',\n    TYPE_RANGE_LE = 'R-LE',\n    TYPE_RANGE_RE = 'R-RE',\n    UNIT_INDEX = 'index:unit'; // TODO: revisit date coercion?\n\nfunction testPoint(datum, entry) {\n  var fields = entry.fields,\n      values = entry.values,\n      n = fields.length,\n      i = 0,\n      dval,\n      f;\n\n  for (; i < n; ++i) {\n    f = fields[i];\n    f.getter = field.getter || field(f.field);\n    dval = f.getter(datum);\n    if (isDate(dval)) dval = toNumber(dval);\n    if (isDate(values[i])) values[i] = toNumber(values[i]);\n    if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n\n    if (f.type === TYPE_ENUM) {\n      // Enumerated fields can either specify individual values (single/multi selections)\n      // or an array of values (interval selections).\n      if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n        return false;\n      }\n    } else {\n      if (f.type === TYPE_RANGE_INC) {\n        if (!inrange(dval, values[i])) return false;\n      } else if (f.type === TYPE_RANGE_RE) {\n        // Discrete selection of bins test within the range [bin_start, bin_end).\n        if (!inrange(dval, values[i], true, false)) return false;\n      } else if (f.type === TYPE_RANGE_EXC) {\n        // 'R-E'/'R-LE' included for completeness.\n        if (!inrange(dval, values[i], false, false)) return false;\n      } else if (f.type === TYPE_RANGE_LE) {\n        if (!inrange(dval, values[i], false, true)) return false;\n      }\n    }\n  }\n\n  return true;\n}\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n *  Tuples in the dataset are of the form\n *  {unit: string, fields: array<fielddef>, values: array<*>}.\n *  Fielddef is of the form\n *  {field: string, channel: string, type: 'E' | 'R'} where\n *  'type' identifies whether tuples in the dataset enumerate\n *  values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n *   One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\n\n\nfunction selectionTest(name, datum, op) {\n  var data = this.context.data[name],\n      entries = data ? data.values.value : [],\n      unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n      intersect = op === Intersect,\n      n = entries.length,\n      i = 0,\n      entry,\n      miss,\n      count,\n      unit,\n      b;\n\n  for (; i < n; ++i) {\n    entry = entries[i];\n\n    if (unitIdx && intersect) {\n      // multi selections union within the same unit and intersect across units.\n      miss = miss || {};\n      count = miss[unit = entry.unit] || 0; // if we've already matched this unit, skip.\n\n      if (count === -1) continue;\n      b = testPoint(datum, entry);\n      miss[unit] = b ? -1 : ++count; // if we match and there are no other units return true\n      // if we've missed against all tuples in this unit return false\n\n      if (b && unitIdx.size === 1) return true;\n      if (!b && count === unitIdx.get(unit).count) return false;\n    } else {\n      b = testPoint(datum, entry); // if we find a miss and we do require intersection return false\n      // if we find a match and we don't require intersection return true\n\n      if (intersect ^ b) return b;\n    }\n  } // if intersecting and we made it here, then we saw no misses\n  // if not intersecting, then we saw no matches\n  // if no active selections, return false\n\n\n  return n && intersect;\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n *                 One of 'intersect' or 'union' (default).\n * @returns {object} An object of selected fields and values.\n */\n\nfunction selectionResolve(name, op, isMulti) {\n  var data = this.context.data[name],\n      entries = data ? data.values.value : [],\n      resolved = {},\n      multiRes = {},\n      types = {},\n      entry,\n      fields,\n      values,\n      unit,\n      field,\n      res,\n      resUnit,\n      type,\n      union,\n      n = entries.length,\n      i = 0,\n      j,\n      m; // First union all entries within the same unit.\n\n  for (; i < n; ++i) {\n    entry = entries[i];\n    unit = entry.unit;\n    fields = entry.fields;\n    values = entry.values;\n\n    for (j = 0, m = fields.length; j < m; ++j) {\n      field = fields[j];\n      res = resolved[field.field] || (resolved[field.field] = {});\n      resUnit = res[unit] || (res[unit] = []);\n      types[field.field] = type = field.type.charAt(0);\n      union = ops[type + '_union'];\n      res[unit] = union(resUnit, array(values[j]));\n    } // If the same multi-selection is repeated over views and projected over\n    // an encoding, it may operate over different fields making it especially\n    // tricky to reliably resolve it. At best, we can de-dupe identical entries\n    // but doing so may be more computationally expensive than it is worth.\n    // Instead, for now, we simply transform our store representation into\n    // a more human-friendly one.\n\n\n    if (isMulti) {\n      resUnit = multiRes[unit] || (multiRes[unit] = []);\n      resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n    }\n  } // Then resolve fields across units as per the op.\n\n\n  op = op || Union;\n  Object.keys(resolved).forEach(field => {\n    resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[types[field] + '_' + op](acc, curr));\n  });\n  entries = Object.keys(multiRes);\n\n  if (isMulti && entries.length) {\n    resolved[VlMulti] = op === Union ? {\n      [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n    } : {\n      [And]: entries.map(k => ({\n        [Or]: multiRes[k]\n      }))\n    };\n  }\n\n  return resolved;\n}\nvar ops = {\n  E_union: function (base, value) {\n    if (!base.length) return value;\n    var i = 0,\n        n = value.length;\n\n    for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n\n    return base;\n  },\n  E_intersect: function (base, value) {\n    return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n  },\n  R_union: function (base, value) {\n    var lo = toNumber(value[0]),\n        hi = toNumber(value[1]);\n\n    if (lo > hi) {\n      lo = value[1];\n      hi = value[0];\n    }\n\n    if (!base.length) return [lo, hi];\n    if (base[0] > lo) base[0] = lo;\n    if (base[1] < hi) base[1] = hi;\n    return base;\n  },\n  R_intersect: function (base, value) {\n    var lo = toNumber(value[0]),\n        hi = toNumber(value[1]);\n\n    if (lo > hi) {\n      lo = value[1];\n      hi = value[0];\n    }\n\n    if (!base.length) return [lo, hi];\n\n    if (hi < base[0] || base[1] < lo) {\n      return [];\n    } else {\n      if (base[0] < lo) base[0] = lo;\n      if (base[1] > hi) base[1] = hi;\n    }\n\n    return base;\n  }\n};\n\nconst DataPrefix = ':',\n      IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n  if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n  const data = args[0].value,\n        op = args.length >= 2 && peek(args).value,\n        field = 'unit',\n        indexName = IndexPrefix + field,\n        dataName = DataPrefix + data; // eslint-disable-next-line no-prototype-builtins\n\n  if (op === Intersect && !hasOwnProperty(params, indexName)) {\n    params[indexName] = scope.getData(data).indataRef(scope, field);\n  } // eslint-disable-next-line no-prototype-builtins\n\n\n  if (!hasOwnProperty(params, dataName)) {\n    params[dataName] = scope.getData(data).tuplesRef();\n  }\n}\n\nexport { selectionResolve, selectionTest, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, peek, identity, array, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, constants, codegen, functions, parse, CallExpression } from 'vega-expression';\nimport { geoBounds as geoBounds$1, geoCentroid as geoCentroid$1, geoArea as geoArea$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionResolve } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n  const data = this.context.data[name];\n  return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n  const index = this.context.data[name]['index:' + field],\n        entry = index ? index.value.get(value) : undefined;\n  return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n  const df = this.context.dataflow,\n        data = this.context.data[name],\n        input = data.input;\n  df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n  return 1;\n}\n\nfunction encode (item, name, retval) {\n  if (item) {\n    const df = this.context.dataflow,\n          target = item.mark.source;\n    df.pulse(target, df.changeset().encode(item, name));\n  }\n\n  return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n  const locale = this.context.dataflow.locale();\n  return locale[method](spec)(value);\n};\n\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n  if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n  dateObj.setYear(2000);\n  dateObj.setMonth(month);\n  dateObj.setDate(day);\n  return timeFormat.call(this, dateObj, specifier);\n}\n\nfunction monthFormat(month) {\n  return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n  return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n  return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n  return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n  if (args[0].type !== Literal) {\n    error('First argument to data functions must be a string literal.');\n  }\n\n  const data = args[0].value,\n        dataName = DataPrefix + data;\n\n  if (!hasOwnProperty(dataName, params)) {\n    try {\n      params[dataName] = scope.getData(data).tuplesRef();\n    } catch (err) {// if data set does not exist, there's nothing to track\n    }\n  }\n}\nfunction indataVisitor(name, args, scope, params) {\n  if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n  if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n  const data = args[0].value,\n        field = args[1].value,\n        indexName = IndexPrefix + field;\n\n  if (!hasOwnProperty(indexName, params)) {\n    params[indexName] = scope.getData(data).indataRef(scope, field);\n  }\n}\nfunction scaleVisitor(name, args, scope, params) {\n  if (args[0].type === Literal) {\n    // add scale dependency\n    addScaleDependency(scope, params, args[0].value);\n  } else {\n    // indirect scale lookup; add all scales as parameters\n    for (name in scope.scales) {\n      addScaleDependency(scope, params, name);\n    }\n  }\n}\n\nfunction addScaleDependency(scope, params, name) {\n  const scaleName = ScalePrefix + name;\n\n  if (!hasOwnProperty(params, scaleName)) {\n    try {\n      params[scaleName] = scope.scaleRef(name);\n    } catch (err) {// TODO: error handling? warning?\n    }\n  }\n}\n\nfunction getScale(name, ctx) {\n  let s;\n  return isFunction(name) ? name : isString(name) ? (s = ctx.scales[name]) && s.value : undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n  // add helper method to the 'this' expression function context\n  fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0; // register AST visitors for internal scale functions\n\n\n  visitors._bandwidth = scaleVisitor;\n  visitors._range = scaleVisitor;\n  visitors._scale = scaleVisitor; // resolve scale reference directly to the signal hash argument\n\n  const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']'; // define and return internal scale function code generators\n  // these internal functions are called by mark encoders\n\n\n  return {\n    _bandwidth: args => \"this.__bandwidth(\".concat(ref(args[0]), \")\"),\n    _range: args => \"\".concat(ref(args[0]), \".range()\"),\n    _scale: args => \"\".concat(ref(args[0]), \"(\").concat(codegen(args[1]), \")\")\n  };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n  return function (projection, geojson, group) {\n    if (projection) {\n      // projection defined, use it\n      const p = getScale(projection, (group || this).context);\n      return p && p.path[methodName](geojson);\n    } else {\n      // projection undefined, use global method\n      return globalMethod(geojson);\n    }\n  };\n}\n\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n  const group = this.context.group;\n  let value = false;\n  if (group) while (item) {\n    if (item === group) {\n      value = true;\n      break;\n    }\n\n    item = item.mark.group;\n  }\n  return value;\n}\n\nfunction log(df, method, args) {\n  try {\n    df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n  } catch (err) {\n    df.warn(err);\n  }\n\n  return args[args.length - 1];\n}\n\nfunction warn() {\n  return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n  return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n  return log(this.context.dataflow, 'debug', arguments);\n}\n\nfunction channel_luminance_value(channelValue) {\n  const val = channelValue / 255;\n\n  if (val <= 0.03928) {\n    return val / 12.92;\n  }\n\n  return Math.pow((val + 0.055) / 1.055, 2.4);\n}\n\nfunction luminance(color) {\n  const c = rgb(color),\n        r = channel_luminance_value(c.r),\n        g = channel_luminance_value(c.g),\n        b = channel_luminance_value(c.b);\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n} // https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n\nfunction contrast(color1, color2) {\n  const lum1 = luminance(color1),\n        lum2 = luminance(color2),\n        lumL = Math.max(lum1, lum2),\n        lumD = Math.min(lum1, lum2);\n  return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n  const args = [].slice.call(arguments);\n  args.unshift({});\n  return extend(...args);\n}\n\nfunction equal(a, b) {\n  return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\n\nfunction equalArray(a, b) {\n  for (let i = 0, n = a.length; i < n; ++i) {\n    if (!equal(a[i], b[i])) return false;\n  }\n\n  return true;\n}\n\nfunction equalObject(a, b) {\n  for (const key in a) {\n    if (!equal(a[key], b[key])) return false;\n  }\n\n  return true;\n}\n\nfunction removePredicate(props) {\n  return _ => equalObject(props, _);\n}\n\nfunction modify (name, insert, remove, toggle, modify, values) {\n  const df = this.context.dataflow,\n        data = this.context.data[name],\n        input = data.input,\n        stamp = df.stamp();\n  let changes = data.changes,\n      predicate,\n      key;\n\n  if (df._trigger === false || !(input.value.length || insert || toggle)) {\n    // nothing to do!\n    return 0;\n  }\n\n  if (!changes || changes.stamp < stamp) {\n    data.changes = changes = df.changeset();\n    changes.stamp = stamp;\n    df.runAfter(() => {\n      data.modified = true;\n      df.pulse(input, changes).run();\n    }, true, 1);\n  }\n\n  if (remove) {\n    predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n    changes.remove(predicate);\n  }\n\n  if (insert) {\n    changes.insert(insert);\n  }\n\n  if (toggle) {\n    predicate = removePredicate(toggle);\n\n    if (input.value.some(predicate)) {\n      changes.remove(predicate);\n    } else {\n      changes.insert(toggle);\n    }\n  }\n\n  if (modify) {\n    for (key in values) {\n      changes.modify(modify, key, values[key]);\n    }\n  }\n\n  return 1;\n}\n\nfunction pinchDistance(event) {\n  const t = event.touches,\n        dx = t[0].clientX - t[1].clientX,\n        dy = t[0].clientY - t[1].clientY;\n  return Math.sqrt(dx * dx + dy * dy);\n}\nfunction pinchAngle(event) {\n  const t = event.touches;\n  return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n  return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n  const s = getScale(name, (group || this).context);\n  return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n  scale = getScale(scale, (group || this).context);\n  const gradient = Gradient(p0, p1);\n  let stops = scale.domain(),\n      min = stops[0],\n      max = peek(stops),\n      fraction = identity;\n\n  if (!(max - min)) {\n    // expand scale if domain has zero span, fix #1479\n    scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n  } else {\n    fraction = scaleFraction(scale, min, max);\n  }\n\n  if (scale.ticks) {\n    stops = scale.ticks(+count || 15);\n    if (min !== stops[0]) stops.unshift(min);\n    if (max !== peek(stops)) stops.push(max);\n  }\n\n  stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n  return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n  const p = getScale(projection, (group || this).context);\n  return function (context) {\n    return p ? p.path.context(context)(geojson) : '';\n  };\n}\nfunction pathShape(path) {\n  let p = null;\n  return function (context) {\n    return context ? pathRender(context, p = p || pathParse(path)) : path;\n  };\n}\n\nconst datum = d => d.data;\n\nfunction treeNodes(name, context) {\n  const tree = data.call(context, name);\n  return tree.root && tree.root.lookup || {};\n}\n\nfunction treePath(name, source, target) {\n  const nodes = treeNodes(name, this),\n        s = nodes[source],\n        t = nodes[target];\n  return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n  const n = treeNodes(name, this)[node];\n  return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\n\nfunction screen() {\n  const w = _window();\n\n  return w ? w.screen : {};\n}\nfunction windowSize() {\n  const w = _window();\n\n  return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n  const view = this.context.dataflow,\n        el = view.container && view.container();\n  return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n  if (!b) return [];\n  const [u, v] = b,\n        box = new Bounds().set(u[0], u[1], v[0], v[1]),\n        scene = group || this.context.dataflow.scenegraph().root;\n  return intersect$1(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n  let p = null;\n\n  if (opt) {\n    const types = array(opt.marktype),\n          names = array(opt.markname);\n\n    p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n  }\n\n  return p;\n}\n\nconst functionContext = {\n  random() {\n    return random();\n  },\n\n  // override default\n  cumulativeNormal,\n  cumulativeLogNormal,\n  cumulativeUniform,\n  densityNormal,\n  densityLogNormal,\n  densityUniform,\n  quantileNormal,\n  quantileLogNormal,\n  quantileUniform,\n  sampleNormal,\n  sampleLogNormal,\n  sampleUniform,\n  isArray,\n  isBoolean,\n  isDate,\n\n  isDefined(_) {\n    return _ !== undefined;\n  },\n\n  isNumber,\n  isObject,\n  isRegExp,\n  isString,\n  isTuple,\n\n  isValid(_) {\n    return _ != null && _ === _;\n  },\n\n  toBoolean,\n  toDate,\n  toNumber,\n  toString,\n  flush,\n  lerp,\n  merge,\n  pad,\n  peek,\n  span,\n  inrange,\n  truncate,\n  rgb,\n  lab,\n  hcl,\n  hsl,\n  luminance,\n  contrast,\n  sequence: range$1,\n  format,\n  utcFormat,\n  utcParse,\n  utcOffset,\n  utcSequence,\n  timeFormat,\n  timeParse,\n  timeOffset,\n  timeSequence,\n  timeUnitSpecifier,\n  monthFormat,\n  monthAbbrevFormat,\n  dayFormat,\n  dayAbbrevFormat,\n  quarter,\n  utcquarter,\n  week,\n  utcweek,\n  dayofyear,\n  utcdayofyear,\n  warn,\n  info,\n  debug,\n  extent,\n  inScope,\n  intersect,\n  clampRange,\n  pinchDistance,\n  pinchAngle,\n  screen,\n  containerSize,\n  windowSize,\n  bandspace,\n  setdata,\n  pathShape,\n  panLinear,\n  panLog,\n  panPow,\n  panSymlog,\n  zoomLinear,\n  zoomLog,\n  zoomPow,\n  zoomSymlog,\n  encode,\n  modify\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n      // event functions\neventPrefix = 'event.vega.',\n      // event function prefix\nthisPrefix = 'this.',\n      // function context prefix\nastVisitors = {}; // AST visitors for dependency analysis\n// export code generator parameters\n\nconst codegenParams = {\n  forbidden: ['_'],\n  allowed: ['datum', 'event', 'item'],\n  fieldvar: 'datum',\n  globalvar: id => \"_[\".concat(stringValue(SignalPrefix + id), \"]\"),\n  functions: buildFunctions,\n  constants: constants,\n  visitors: astVisitors\n}; // export code generator\n\nconst codeGenerator = codegen(codegenParams); // Build expression function registry\n\nfunction buildFunctions(codegen) {\n  const fn = functions(codegen);\n  eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n\n  for (const name in functionContext) {\n    fn[name] = thisPrefix + name;\n  }\n\n  extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n  return fn;\n} // Register an expression function\n\n\nfunction expressionFunction(name, fn, visitor) {\n  if (arguments.length === 1) {\n    return functionContext[name];\n  } // register with the functionContext\n\n\n  functionContext[name] = fn; // if there is an astVisitor register that, too\n\n  if (visitor) astVisitors[name] = visitor; // if the code generator has already been initialized,\n  // we need to also register the function with it\n\n  if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n  return this;\n} // register expression functions with ast visitors\n\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor); // register Vega-Lite selection functions\n\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\n\nfunction parser (expr, scope) {\n  const params = {}; // parse the expression to an abstract syntax tree (ast)\n\n  let ast;\n\n  try {\n    expr = isString(expr) ? expr : stringValue(expr) + '';\n    ast = parse(expr);\n  } catch (err) {\n    error('Expression parse error: ' + expr);\n  } // analyze ast function calls for dependencies\n\n\n  ast.visit(node => {\n    if (node.type !== CallExpression) return;\n    const name = node.callee.name,\n          visit = codegenParams.visitors[name];\n    if (visit) visit(name, node.arguments, scope, params);\n  }); // perform code generation\n\n  const gen = codeGenerator(ast); // collect signal dependencies\n\n  gen.globals.forEach(name => {\n    const signalName = SignalPrefix + name;\n\n    if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n      params[signalName] = scope.signalRef(name);\n    }\n  }); // return generated expression code and dependencies\n\n  return {\n    $expr: extend({\n      code: gen.code\n    }, scope.options.ast ? {\n      ast\n    } : null),\n    $fields: gen.fields,\n    $params: params\n  };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, info, invert, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, range, scale, scaleGradient, scaleVisitor, screen, setdata, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n  const ctx = this,\n        operators = spec.operators || []; // parse background\n\n  if (spec.background) {\n    ctx.background = spec.background;\n  } // parse event configuration\n\n\n  if (spec.eventConfig) {\n    ctx.eventConfig = spec.eventConfig;\n  } // parse locale configuration\n\n\n  if (spec.locale) {\n    ctx.locale = spec.locale;\n  } // parse operators\n\n\n  operators.forEach(entry => ctx.parseOperator(entry)); // parse operator parameters\n\n  operators.forEach(entry => ctx.parseOperatorParameters(entry)); // parse streams\n\n  (spec.streams || []).forEach(entry => ctx.parseStream(entry)); // parse updates\n\n  (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n  return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n      Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n  let code = '';\n  if (Skip[marktype]) return code;\n\n  if (encode.x2) {\n    if (encode.x) {\n      if (Swap[marktype]) {\n        code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n      }\n\n      code += 'o.width=o.x2-o.x;';\n    } else {\n      code += 'o.x=o.x2-(o.width||0);';\n    }\n  }\n\n  if (encode.xc) {\n    code += 'o.x=o.xc-(o.width||0)/2;';\n  }\n\n  if (encode.y2) {\n    if (encode.y) {\n      if (Swap[marktype]) {\n        code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n      }\n\n      code += 'o.height=o.y2-o.y;';\n    } else {\n      code += 'o.y=o.y2-(o.height||0);';\n    }\n  }\n\n  if (encode.yc) {\n    code += 'o.y=o.yc-(o.height||0)/2;';\n  }\n\n  return code;\n}\nfunction canonicalType(type) {\n  return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n  return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n  return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n  // wrap code in return statement if expression does not terminate\n  if (code[code.length - 1] !== ';') {\n    code = 'return(' + code + ');';\n  }\n\n  const fn = Function(...args.concat(code));\n  return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n} // generate code for comparing a single field\n\n\nfunction _compare(u, v, lt, gt) {\n  return \"((u = \".concat(u, \") < (v = \").concat(v, \") || u == null) && v != null ? \").concat(lt, \"\\n  : (u > v || v == null) && u != null ? \").concat(gt, \"\\n  : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? \").concat(lt, \"\\n  : v !== v && u === u ? \").concat(gt, \" : \");\n}\n\nvar expressionCodegen = {\n  /**\n   * Parse an expression used to update an operator value.\n   */\n  operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n\n  /**\n   * Parse an expression provided as an operator parameter value.\n   */\n  parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n\n  /**\n   * Parse an expression applied to an event stream.\n   */\n  event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n\n  /**\n   * Parse an expression used to handle an event-driven operator update.\n   */\n  handler: (ctx, expr) => {\n    const code = \"var datum=event.item&&event.item.datum;return \".concat(expr.code, \";\");\n    return expression(ctx, ['_', 'event'], code);\n  },\n\n  /**\n   * Parse an expression that performs visual encoding.\n   */\n  encode: (ctx, encode) => {\n    const {\n      marktype,\n      channels\n    } = encode;\n    let code = 'var o=item,datum=o.datum,m=0,$;';\n\n    for (const name in channels) {\n      const o = 'o[' + stringValue(name) + ']';\n      code += \"$=\".concat(channels[name].code, \";if(\").concat(o, \"!==$)\").concat(o, \"=$,m=1;\");\n    }\n\n    code += adjustSpatial(channels, marktype);\n    code += 'return m;';\n    return expression(ctx, ['item', '_'], code);\n  },\n\n  /**\n   * Optimized code generators for access and comparison.\n   */\n  codegen: {\n    get(path) {\n      const ref = \"[\".concat(path.map(stringValue).join(']['), \"]\");\n      const get = Function('_', \"return _\".concat(ref, \";\"));\n      get.path = ref;\n      return get;\n    },\n\n    comparator(fields, orders) {\n      let t;\n\n      const map = (f, i) => {\n        const o = orders[i];\n        let u, v;\n\n        if (f.path) {\n          u = \"a\".concat(f.path);\n          v = \"b\".concat(f.path);\n        } else {\n          (t = t || {})['f' + i] = f;\n          u = \"this.f\".concat(i, \"(a)\");\n          v = \"this.f\".concat(i, \"(b)\");\n        }\n\n        return _compare(u, v, -o, o);\n      };\n\n      const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n      return t ? fn.bind(t) : fn;\n    }\n\n  }\n};\n\n/**\n * Parse a dataflow operator.\n */\n\nfunction parseOperator(spec) {\n  const ctx = this;\n\n  if (isOperator(spec.type) || !spec.type) {\n    ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n  } else {\n    ctx.transform(spec, spec.type);\n  }\n}\n/**\n * Parse and assign operator parameters.\n */\n\nfunction parseOperatorParameters(spec) {\n  const ctx = this;\n\n  if (spec.params) {\n    const op = ctx.get(spec.id);\n    if (!op) error('Invalid operator id: ' + spec.id);\n    ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n  }\n}\n\n/**\n * Parse a set of operator parameters.\n */\n\nfunction parseParameters(spec, params) {\n  params = params || {};\n  const ctx = this;\n\n  for (const key in spec) {\n    const value = spec[key];\n    params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n  }\n\n  return params;\n}\n/**\n * Parse a single parameter.\n */\n\nfunction parseParameter(spec, ctx, params) {\n  if (!spec || !isObject(spec)) return spec;\n\n  for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n    p = PARSERS[i];\n\n    if (hasOwnProperty(spec, p.key)) {\n      return p.parse(spec, ctx, params);\n    }\n  }\n\n  return spec;\n}\n/** Reference parsers. */\n\n\nvar PARSERS = [{\n  key: '$ref',\n  parse: getOperator\n}, {\n  key: '$key',\n  parse: getKey\n}, {\n  key: '$expr',\n  parse: getExpression\n}, {\n  key: '$field',\n  parse: getField\n}, {\n  key: '$encode',\n  parse: getEncode\n}, {\n  key: '$compare',\n  parse: getCompare\n}, {\n  key: '$context',\n  parse: getContext\n}, {\n  key: '$subflow',\n  parse: getSubflow\n}, {\n  key: '$tupleid',\n  parse: getTupleId\n}];\n/**\n * Resolve an operator reference.\n */\n\nfunction getOperator(_, ctx) {\n  return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n/**\n * Resolve an expression reference.\n */\n\n\nfunction getExpression(_, ctx, params) {\n  if (_.$params) {\n    // parse expression parameters\n    ctx.parseParameters(_.$params, params);\n  }\n\n  const k = 'e:' + _.$expr.code + '_' + _.$name;\n  return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields, _.$name));\n}\n/**\n * Resolve a key accessor reference.\n */\n\n\nfunction getKey(_, ctx) {\n  const k = 'k:' + _.$key + '_' + !!_.$flat;\n  return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n/**\n * Resolve a field accessor reference.\n */\n\n\nfunction getField(_, ctx) {\n  if (!_.$field) return null;\n  const k = 'f:' + _.$field + '_' + _.$name;\n  return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n/**\n * Resolve a comparator function reference.\n */\n\n\nfunction getCompare(_, ctx) {\n  // As of Vega 5.5.3, $tupleid sort is no longer used.\n  // Keep here for now for backwards compatibility.\n  const k = 'c:' + _.$compare + '_' + _.$order,\n        c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n  return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n/**\n * Resolve an encode operator reference.\n */\n\n\nfunction getEncode(_, ctx) {\n  const spec = _.$encode,\n        encode = {};\n\n  for (const name in spec) {\n    const enc = spec[name];\n    encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n    encode[name].output = enc.$output;\n  }\n\n  return encode;\n}\n/**\n * Resolve a context reference.\n */\n\n\nfunction getContext(_, ctx) {\n  return ctx;\n}\n/**\n * Resolve a recursive subflow specification.\n */\n\n\nfunction getSubflow(_, ctx) {\n  const spec = _.$subflow;\n  return function (dataflow, key, parent) {\n    const subctx = ctx.fork().parse(spec),\n          op = subctx.get(spec.operators[0].id),\n          p = subctx.signals.parent;\n    if (p) p.set(parent);\n\n    op.detachSubflow = () => ctx.detach(subctx);\n\n    return op;\n  };\n}\n/**\n * Resolve a tuple id reference.\n */\n\n\nfunction getTupleId() {\n  return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\n\nfunction parseStream (spec) {\n  var ctx = this,\n      filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n      stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n      args;\n\n  if (spec.source) {\n    stream = ctx.events(spec.source, spec.type, filter);\n  } else if (spec.merge) {\n    args = spec.merge.map(_ => ctx.get(_));\n    stream = args[0].merge.apply(args[0], args.slice(1));\n  }\n\n  if (spec.between) {\n    args = spec.between.map(_ => ctx.get(_));\n    stream = stream.between(args[0], args[1]);\n  }\n\n  if (spec.filter) {\n    stream = stream.filter(filter);\n  }\n\n  if (spec.throttle != null) {\n    stream = stream.throttle(+spec.throttle);\n  }\n\n  if (spec.debounce != null) {\n    stream = stream.debounce(+spec.debounce);\n  }\n\n  if (stream == null) {\n    error('Invalid stream definition: ' + JSON.stringify(spec));\n  }\n\n  if (spec.consume) stream.consume(true);\n  ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\n\nfunction parseUpdate (spec) {\n  var ctx = this,\n      srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n      source = ctx.get(srcid),\n      target = null,\n      update = spec.update,\n      params = undefined;\n  if (!source) error('Source not defined: ' + spec.source);\n  target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n\n  if (update && update.$expr) {\n    if (update.$params) {\n      params = ctx.parseParameters(update.$params);\n    }\n\n    update = ctx.handlerExpression(update.$expr);\n  }\n\n  ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n  skip: true\n};\nfunction getState(options) {\n  var ctx = this,\n      state = {};\n\n  if (options.signals) {\n    var signals = state.signals = {};\n    Object.keys(ctx.signals).forEach(key => {\n      const op = ctx.signals[key];\n\n      if (options.signals(key, op)) {\n        signals[key] = op.value;\n      }\n    });\n  }\n\n  if (options.data) {\n    var data = state.data = {};\n    Object.keys(ctx.data).forEach(key => {\n      const dataset = ctx.data[key];\n\n      if (options.data(key, dataset)) {\n        data[key] = dataset.input.value;\n      }\n    });\n  }\n\n  if (ctx.subcontext && options.recurse !== false) {\n    state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n  }\n\n  return state;\n}\nfunction setState(state) {\n  var ctx = this,\n      df = ctx.dataflow,\n      data = state.data,\n      signals = state.signals;\n  Object.keys(signals || {}).forEach(key => {\n    df.update(ctx.signals[key], signals[key], SKIP);\n  });\n  Object.keys(data || {}).forEach(key => {\n    df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n  });\n  (state.subcontext || []).forEach((substate, i) => {\n    const subctx = ctx.subcontext[i];\n    if (subctx) subctx.setState(substate);\n  });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\n\nfunction context (df, transforms, functions, expr) {\n  return new Context(df, transforms, functions, expr);\n}\n\nfunction Context(df, transforms, functions, expr) {\n  this.dataflow = df;\n  this.transforms = transforms;\n  this.events = df.events.bind(df);\n  this.expr = expr || expressionCodegen, this.signals = {};\n  this.scales = {};\n  this.nodes = {};\n  this.data = {};\n  this.fn = {};\n\n  if (functions) {\n    this.functions = Object.create(functions);\n    this.functions.context = this;\n  }\n}\n\nfunction Subcontext(ctx) {\n  this.dataflow = ctx.dataflow;\n  this.transforms = ctx.transforms;\n  this.events = ctx.events;\n  this.expr = ctx.expr;\n  this.signals = Object.create(ctx.signals);\n  this.scales = Object.create(ctx.scales);\n  this.nodes = Object.create(ctx.nodes);\n  this.data = Object.create(ctx.data);\n  this.fn = Object.create(ctx.fn);\n\n  if (ctx.functions) {\n    this.functions = Object.create(ctx.functions);\n    this.functions.context = this;\n  }\n}\n\nContext.prototype = Subcontext.prototype = {\n  fork() {\n    const ctx = new Subcontext(this);\n    (this.subcontext || (this.subcontext = [])).push(ctx);\n    return ctx;\n  },\n\n  detach(ctx) {\n    this.subcontext = this.subcontext.filter(c => c !== ctx); // disconnect all nodes in the subcontext\n    // wipe out targets first for better efficiency\n\n    const keys = Object.keys(ctx.nodes);\n\n    for (const key of keys) ctx.nodes[key]._targets = null;\n\n    for (const key of keys) ctx.nodes[key].detach();\n\n    ctx.nodes = null;\n  },\n\n  get(id) {\n    return this.nodes[id];\n  },\n\n  set(id, node) {\n    return this.nodes[id] = node;\n  },\n\n  add(spec, op) {\n    const ctx = this,\n          df = ctx.dataflow,\n          data = spec.value;\n    ctx.set(spec.id, op);\n\n    if (isCollect(spec.type) && data) {\n      if (data.$ingest) {\n        df.ingest(op, data.$ingest, data.$format);\n      } else if (data.$request) {\n        df.preload(op, data.$request, data.$format);\n      } else {\n        df.pulse(op, df.changeset().insert(data));\n      }\n    }\n\n    if (spec.root) {\n      ctx.root = op;\n    }\n\n    if (spec.parent) {\n      let p = ctx.get(spec.parent.$ref);\n\n      if (p) {\n        df.connect(p, [op]);\n        op.targets().add(p);\n      } else {\n        (ctx.unresolved = ctx.unresolved || []).push(() => {\n          p = ctx.get(spec.parent.$ref);\n          df.connect(p, [op]);\n          op.targets().add(p);\n        });\n      }\n    }\n\n    if (spec.signal) {\n      ctx.signals[spec.signal] = op;\n    }\n\n    if (spec.scale) {\n      ctx.scales[spec.scale] = op;\n    }\n\n    if (spec.data) {\n      for (const name in spec.data) {\n        const data = ctx.data[name] || (ctx.data[name] = {});\n        spec.data[name].forEach(role => data[role] = op);\n      }\n    }\n  },\n\n  resolve() {\n    (this.unresolved || []).forEach(fn => fn());\n    delete this.unresolved;\n    return this;\n  },\n\n  operator(spec, update) {\n    this.add(spec, this.dataflow.add(spec.value, update));\n  },\n\n  transform(spec, type) {\n    this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n  },\n\n  stream(spec, stream) {\n    this.set(spec.id, stream);\n  },\n\n  update(spec, stream, target, update, params) {\n    this.dataflow.on(stream, target, update, params, spec.options);\n  },\n\n  // expression parsing\n  operatorExpression(expr) {\n    return this.expr.operator(this, expr);\n  },\n\n  parameterExpression(expr) {\n    return this.expr.parameter(this, expr);\n  },\n\n  eventExpression(expr) {\n    return this.expr.event(this, expr);\n  },\n\n  handlerExpression(expr) {\n    return this.expr.handler(this, expr);\n  },\n\n  encodeExpression(encode) {\n    return this.expr.encode(this, encode);\n  },\n\n  // parse methods\n  parse,\n  parseOperator,\n  parseOperatorParameters,\n  parseParameters,\n  parseStream,\n  parseUpdate,\n  // state methods\n  getState,\n  setState\n};\n\nexport { context };\n","import {transforms} from 'vega-dataflow';\nimport {functionContext} from 'vega-functions';\nimport {context} from 'vega-runtime';\n\nexport default function(view, spec, expr) {\n  return context(view, transforms, functionContext, expr).parse(spec);\n}\n","import {error, hasOwnProperty} from 'vega-util';\n\nexport function scale(name) {\n  var scales = this._runtime.scales;\n  if (!hasOwnProperty(scales, name)) {\n    error('Unrecognized scale or projection: ' + name);\n  }\n  return scales[name].value;\n}\n","var Width = 'width',\n    Height = 'height',\n    Padding = 'padding',\n    Skip = {skip: true};\n\nexport function viewWidth(view, width) {\n  var a = view.autosize(),\n      p = view.padding();\n  return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\n\nexport function viewHeight(view, height) {\n  var a = view.autosize(),\n      p = view.padding();\n  return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\n\nexport function initializeResize(view) {\n  var s = view._signals,\n      w = s[Width],\n      h = s[Height],\n      p = s[Padding];\n\n  function resetSize() {\n    view._autosize = view._resize = 1;\n  }\n\n  // respond to width signal\n  view._resizeWidth = view.add(null,\n    _ => {\n      view._width = _.size;\n      view._viewWidth = viewWidth(view, _.size);\n      resetSize();\n    },\n    {size: w}\n  );\n\n  // respond to height signal\n  view._resizeHeight = view.add(null,\n    _ => {\n      view._height = _.size;\n      view._viewHeight = viewHeight(view, _.size);\n      resetSize();\n    },\n    {size: h}\n  );\n\n  // respond to padding signal\n  var resizePadding = view.add(null, resetSize, {pad: p});\n\n  // set rank to run immediately after source signal\n  view._resizeWidth.rank = w.rank + 1;\n  view._resizeHeight.rank = h.rank + 1;\n  resizePadding.rank = p.rank + 1;\n}\n\nexport function resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n  this.runAfter(view => {\n    var rerun = 0;\n\n    // reset autosize flag\n    view._autosize = 0;\n\n    // width value changed: update signal, skip resize op\n    if (view.width() !== width) {\n      rerun = 1;\n      view.signal(Width, width, Skip); // set width, skip update calc\n      view._resizeWidth.skip(true); // skip width resize handler\n    }\n\n    // height value changed: update signal, skip resize op\n    if (view.height() !== height) {\n      rerun = 1;\n      view.signal(Height, height, Skip); // set height, skip update calc\n      view._resizeHeight.skip(true); // skip height resize handler\n    }\n\n    // view width changed: update view property, set resize flag\n    if (view._viewWidth !== viewWidth) {\n      view._resize = 1;\n      view._viewWidth = viewWidth;\n    }\n\n    // view height changed: update view property, set resize flag\n    if (view._viewHeight !== viewHeight) {\n      view._resize = 1;\n      view._viewHeight = viewHeight;\n    }\n\n    // origin changed: update view property, set resize flag\n    if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n      view._resize = 1;\n      view._origin = origin;\n    }\n\n    // run dataflow on width/height signal change\n    if (rerun) view.run('enter');\n    if (auto) view.runAfter(v => v.resize());\n  }, false, 1);\n}\n","import {transforms} from 'vega-dataflow';\nimport {isArray} from 'vega-util';\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n *   If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n *   predicate function for testing if a signal should be included in the\n *   exported state. If unspecified, all signals will be included, except for\n *   those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n *   predicate function for testing if a data set's input should be included\n *   in the exported state. If unspecified, all data sets that have been\n *   explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n *   state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nexport function getState(options) {\n  return this._runtime.getState(options || {\n    data:    dataTest,\n    signals: signalTest,\n    recurse: true\n  });\n}\n\nfunction dataTest(name, data) {\n  return data.modified\n      && isArray(data.input.value)\n      && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n  return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n *   data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nexport function setState(state) {\n  this.runAsync(null,\n    v => { v._trigger = false; v._runtime.setState(state); },\n    v => { v._trigger = true; }\n  );\n  return this;\n}\n","import {interval} from 'd3-timer';\n\nexport default function(callback, delay) {\n  function tick(elapsed) {\n    callback({timestamp: Date.now(), elapsed: elapsed});\n  }\n  this._timers.push(interval(tick, delay));\n}\n","import {isArray, isDate, isObject} from 'vega-util';\n\nexport default function(handler, event, item, value) {\n  var el = handler.element();\n  if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n  return value == null ? ''\n    : isArray(value) ? formatArray(value)\n    : isObject(value) && !isDate(value) ? formatObject(value)\n    : value + '';\n}\n\nfunction formatObject(obj) {\n  return Object.keys(obj).map(key => {\n    var v = obj[key];\n    return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n  }).join('\\n');\n}\n\nfunction formatArray(value) {\n  return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n  return isArray(value) ? '[\\u2026]'\n    : isObject(value) && !isDate(value) ? '{\\u2026}'\n    : value;\n}\n","import {ariaLabel} from './aria';\nimport background from './background';\nimport cursor, {setCursor} from './cursor';\nimport {change, data, dataref, insert, remove} from './data';\nimport {events, initializeEventConfig} from './events';\nimport hover from './hover';\nimport finalize from './finalize';\nimport initialize from './initialize';\nimport padding from './padding';\nimport renderToImageURL from './render-to-image-url';\nimport renderToCanvas from './render-to-canvas';\nimport renderToSVG from './render-to-svg';\nimport {resizeRenderer} from './render-size';\nimport runtime from './runtime';\nimport {scale} from './scale';\nimport {initializeResize, resizeView, viewHeight, viewWidth} from './size';\nimport {getState, setState} from './state';\nimport timer from './timer';\nimport defaultTooltip from './tooltip';\nimport trap from './trap';\n\nimport {Dataflow, asyncCallback} from 'vega-dataflow';\nimport {locale} from 'vega-format';\nimport {\n  CanvasHandler, RenderType, Scenegraph, renderModule\n} from 'vega-scenegraph';\nimport {\n  error, extend, hasOwnProperty, inherits, stringValue\n} from 'vega-util';\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nexport default function View(spec, options) {\n  const view = this;\n  options = options || {};\n\n  Dataflow.call(view);\n  if (options.loader) view.loader(options.loader);\n  if (options.logger) view.logger(options.logger);\n  if (options.logLevel != null) view.logLevel(options.logLevel);\n  if (options.locale || spec.locale) {\n    const loc = extend({}, spec.locale, options.locale);\n    view.locale(locale(loc.number, loc.time));\n  }\n\n  view._el = null;\n  view._elBind = null;\n  view._renderType = options.renderer || RenderType.Canvas;\n  view._scenegraph = new Scenegraph();\n  const root = view._scenegraph.root;\n\n  // initialize renderer, handler and event management\n  view._renderer = null;\n  view._tooltip = options.tooltip || defaultTooltip,\n  view._redraw = true;\n  view._handler = new CanvasHandler().scene(root);\n  view._globalCursor = false;\n  view._preventDefault = false;\n  view._timers = [];\n  view._eventListeners = [];\n  view._resizeListeners = [];\n\n  // initialize event configuration\n  view._eventConfig = initializeEventConfig(spec.eventConfig);\n  view.globalCursor(view._eventConfig.globalCursor);\n\n  // initialize dataflow graph\n  const ctx = runtime(view, spec, options.expr);\n  view._runtime = ctx;\n  view._signals = ctx.signals;\n  view._bind = (spec.bindings || []).map(_ => ({\n    state: null,\n    param: extend({}, _)\n  }));\n\n  // initialize scenegraph\n  if (ctx.root) ctx.root.set(root);\n  root.source = ctx.data.root.input;\n  view.pulse(\n    ctx.data.root.input,\n    view.changeset().insert(root.items)\n  );\n\n  // initialize view size\n  view._width = view.width();\n  view._height = view.height();\n  view._viewWidth = viewWidth(view, view._width);\n  view._viewHeight = viewHeight(view, view._height);\n  view._origin = [0, 0];\n  view._resize = 0;\n  view._autosize = 1;\n  initializeResize(view);\n\n  // initialize background color\n  background(view);\n\n  // initialize cursor\n  cursor(view);\n\n  // initialize view description\n  view.description(spec.description);\n\n  // initialize hover proessing, if requested\n  if (options.hover) view.hover();\n\n  // initialize DOM container(s) and renderer\n  if (options.container) view.initialize(options.container, options.bind);\n}\n\nfunction lookupSignal(view, name) {\n  return hasOwnProperty(view._signals, name)\n    ? view._signals[name]\n    : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nfunction findOperatorHandler(op, handler) {\n  const h = (op._targets || [])\n    .filter(op => op._update && op._update.handler === handler);\n  return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n  var h = findOperatorHandler(op, handler);\n  if (!h) {\n    h = trap(view, () => handler(name, op.value));\n    h.handler = handler;\n    view.on(op, null, h);\n  }\n  return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n  var h = findOperatorHandler(op, handler);\n  if (h) op._targets.remove(h);\n  return view;\n}\n\ninherits(View, Dataflow, {\n  // -- DATAFLOW / RENDERING ----\n\n  async evaluate(encode, prerun, postrun) {\n    // evaluate dataflow and prerun\n    await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n    // render as needed\n    if (this._redraw || this._resize) {\n      try {\n        if (this._renderer) {\n          if (this._resize) {\n            this._resize = 0;\n            resizeRenderer(this);\n          }\n          await this._renderer.renderAsync(this._scenegraph.root);\n        }\n        this._redraw = false;\n      } catch (e) {\n        this.error(e);\n      }\n    }\n\n    // evaluate postrun\n    if (postrun) asyncCallback(this, postrun);\n\n    return this;\n  },\n\n  dirty(item) {\n    this._redraw = true;\n    this._renderer && this._renderer.dirty(item);\n  },\n\n  // -- GET / SET ----\n\n  description(text) {\n    if (arguments.length) {\n      const desc = text != null ? (text + '') : null;\n      if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n      return this;\n    }\n    return this._desc;\n  },\n\n  container() {\n    return this._el;\n  },\n\n  scenegraph() {\n    return this._scenegraph;\n  },\n\n  origin() {\n    return this._origin.slice();\n  },\n\n  signal(name, value, options) {\n    var op = lookupSignal(this, name);\n    return arguments.length === 1\n      ? op.value\n      : this.update(op, value, options);\n  },\n\n  width(_) {\n    return arguments.length ? this.signal('width', _) : this.signal('width');\n  },\n\n  height(_) {\n    return arguments.length ? this.signal('height', _) : this.signal('height');\n  },\n\n  padding(_) {\n    return arguments.length\n      ? this.signal('padding', padding(_))\n      : padding(this.signal('padding'));\n  },\n\n  autosize(_) {\n    return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n  },\n\n  background(_) {\n    return arguments.length ? this.signal('background', _) : this.signal('background');\n  },\n\n  renderer(type) {\n    if (!arguments.length) return this._renderType;\n    if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n    if (type !== this._renderType) {\n      this._renderType = type;\n      this._resetRenderer();\n    }\n    return this;\n  },\n\n  tooltip(handler) {\n    if (!arguments.length) return this._tooltip;\n    if (handler !== this._tooltip) {\n      this._tooltip = handler;\n      this._resetRenderer();\n    }\n    return this;\n  },\n\n  loader(loader) {\n    if (!arguments.length) return this._loader;\n    if (loader !== this._loader) {\n      Dataflow.prototype.loader.call(this, loader);\n      this._resetRenderer();\n    }\n    return this;\n  },\n\n  resize() {\n    // set flag to perform autosize\n    this._autosize = 1;\n    // touch autosize signal to ensure top-level ViewLayout runs\n    return this.touch(lookupSignal(this, 'autosize'));\n  },\n\n  _resetRenderer() {\n    if (this._renderer) {\n      this._renderer = null;\n      this.initialize(this._el, this._elBind);\n    }\n  },\n\n  // -- SIZING ----\n  _resizeView: resizeView,\n\n  // -- EVENT HANDLING ----\n\n  addEventListener(type, handler, options) {\n    var callback = handler;\n    if (!(options && options.trap === false)) {\n      // wrap callback in error handler\n      callback = trap(this, handler);\n      callback.raw = handler;\n    }\n    this._handler.on(type, callback);\n    return this;\n  },\n\n  removeEventListener(type, handler) {\n    var handlers = this._handler.handlers(type),\n        i = handlers.length, h, t;\n\n    // search registered handlers, remove if match found\n    while (--i >= 0) {\n      t = handlers[i].type;\n      h = handlers[i].handler;\n      if (type === t && (handler === h || handler === h.raw)) {\n        this._handler.off(t, h);\n        break;\n      }\n    }\n    return this;\n  },\n\n  addResizeListener(handler) {\n    var l = this._resizeListeners;\n    if (l.indexOf(handler) < 0) {\n      // add handler if it isn't already registered\n      // note: error trapping handled elsewhere, so\n      // no need to wrap handlers here\n      l.push(handler);\n    }\n    return this;\n  },\n\n  removeResizeListener(handler) {\n    var l = this._resizeListeners,\n        i = l.indexOf(handler);\n    if (i >= 0) {\n      l.splice(i, 1);\n    }\n    return this;\n  },\n\n  addSignalListener(name, handler) {\n    return addOperatorListener(this, name, lookupSignal(this, name), handler);\n  },\n\n  removeSignalListener(name, handler) {\n    return removeOperatorListener(this, lookupSignal(this, name), handler);\n  },\n\n  addDataListener(name, handler) {\n    return addOperatorListener(this, name, dataref(this, name).values, handler);\n  },\n\n  removeDataListener(name, handler) {\n    return removeOperatorListener(this, dataref(this, name).values, handler);\n  },\n\n  globalCursor(_) {\n    if (arguments.length) {\n      if (this._globalCursor !== !!_) {\n        const prev = setCursor(this, null); // clear previous cursor\n        this._globalCursor = !!_;\n        if (prev) setCursor(this, prev); // swap cursor\n      }\n      return this;\n    } else {\n      return this._globalCursor;\n    }\n  },\n\n  preventDefault(_) {\n    if (arguments.length) {\n      this._preventDefault = _;\n      return this;\n    } else {\n      return this._preventDefault;\n    }\n  },\n\n  timer,\n  events,\n  finalize,\n  hover,\n\n  // -- DATA ----\n  data,\n  change,\n  insert,\n  remove,\n\n  // -- SCALES --\n  scale,\n\n  // -- INITIALIZATION ----\n  initialize,\n\n  // -- HEADLESS RENDERING ----\n  toImageURL: renderToImageURL,\n  toCanvas: renderToCanvas,\n  toSVG: renderToSVG,\n\n  // -- SAVE / RESTORE STATE ----\n  getState,\n  setState\n});\n","export {default as View} from './src/View';\n","function accessor (fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\nfunction accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function (obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n\n    return obj;\n  };\n};\n\nfunction error (message) {\n  throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n  const path = [],\n        n = p.length;\n  let q = null,\n      b = 0,\n      s = '',\n      i,\n      j,\n      c;\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i = j = 0; j < n; ++j) {\n    c = p[j];\n\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n\nfunction field (field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log(method, level, input) {\n  const args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n  let level = _ || None;\n  return {\n    level(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n\n    error() {\n      if (level >= Error$1) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n\n    warn() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n\n    info() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n\n    debug() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n\n  };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n  return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (const key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        const r = key === 'legend' ? {\n          layout: 1\n        } : key === 'style' ? true : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n\n    return out;\n  }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n  let k, o;\n\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : output[key] = {};\n\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n  const map = {},\n        out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n\nfunction peek (array) {\n  return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n  return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log$1 = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        dd = (d1 - d0) * delta;\n  return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log$1(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  const d0 = lift(domain[0]),\n        d1 = lift(peek(domain)),\n        da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n  return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n  const sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n  return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n  let lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n\n  span = hi - lo;\n  return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n  return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n  const ord = [],\n        get = [],\n        fmap = {},\n        gen = opt.comparator || comparator;\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n  return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n\n  return function (a, b) {\n    let f,\n        c = 0,\n        i = -1;\n\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = ascending(f(a), f(b));\n    }\n\n    return c * orders[i];\n  };\n};\n\nfunction constant (_) {\n  return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n  let tid;\n  return e => {\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(() => (handler(e), tid = null), delay);\n  };\n}\n\nfunction extend (_) {\n  for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n    x = arguments[i];\n\n    for (k in x) {\n      _[k] = x[k];\n    }\n  }\n\n  return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n  let i = 0,\n      n,\n      v,\n      min,\n      max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n      min = max = v; // visit all other values\n\n      for (; i < n; ++i) {\n        v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nfunction extentIndex (array, f) {\n  const n = array.length;\n  let i = -1,\n      a,\n      b,\n      c,\n      u,\n      v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = array[i];\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n\n    if (i === n) return [-1, -1];\n    u = v = i;\n\n    while (++i < n) {\n      b = f(array[i], i, array);\n\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n  return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n  let obj = {},\n      test;\n\n  function has$1(key) {\n    return has(obj, key) && obj[key] !== NULL;\n  }\n\n  const map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has$1,\n\n    get(key) {\n      return has$1(key) ? obj[key] : undefined;\n    },\n\n    set(key, value) {\n      if (!has$1(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n\n      obj[key] = value;\n      return this;\n    },\n\n    delete(key) {\n      if (has$1(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n\n      return this;\n    },\n\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n\n    clean() {\n      const next = {};\n      let size = 0;\n\n      for (const key in obj) {\n        const value = obj[key];\n\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n\n      map.size = size;\n      map.empty = 0;\n      map.object = obj = next;\n    }\n\n  };\n  if (input) Object.keys(input).forEach(key => {\n    map.set(key, input[key]);\n  });\n  return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n  const t = +threshold;\n  let a = range[0],\n      b = peek(range),\n      l; // swap endpoints if range is reversed\n\n  if (b < a) {\n    l = a;\n    a = b;\n    b = l;\n  } // compare value to endpoints\n\n\n  l = Math.abs(value - a);\n  const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n  const proto = child.prototype = Object.create(parent.prototype);\n  proto.constructor = child;\n  return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n  let r0 = range[0],\n      r1 = range[range.length - 1],\n      t;\n\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n\n  left = left === undefined || left;\n  right = right === undefined || right;\n  return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n  return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n  return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n  return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n  return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n  if (fields) {\n    fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n\n  let fn;\n\n  if (!len) {\n    fn = function () {\n      return '';\n    };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n\n    fn = function (_) {\n      return '' + get(_);\n    };\n  } else {\n    const get = fields.map(map);\n\n    fn = function (_) {\n      let s = '' + get[0](_),\n          i = 0;\n\n      while (++i < len) s += '|' + get[i](_);\n\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n\n    return curr[key] = value;\n  };\n\n  clear();\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n    set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n  };\n}\n\nfunction merge (compare, array0, array1, output) {\n  const n0 = array0.length,\n        n1 = array1.length;\n  if (!n1) return array0;\n  if (!n0) return array1;\n  const merged = output || new array0.constructor(n0 + n1);\n  let i0 = 0,\n      i1 = 0,\n      i = 0;\n\n  for (; i0 < n0 && i1 < n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n  }\n\n  for (; i0 < n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1 < n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n\nfunction repeat (str, reps) {\n  let s = '';\n\n  while (--reps >= 0) s += str;\n\n  return s;\n}\n\nfunction pad (str, length, padchar, align) {\n  const c = padchar || ' ',\n        s = str + '',\n        n = length - s.length;\n  return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n  return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n  return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n  // See http://timelessrepo.com/json-isnt-a-javascript-subset\n  JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n  const s = {},\n        n = _.length;\n\n  for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n  return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n  const e = ellipsis != null ? ellipsis : '\\u2026',\n        s = str + '',\n        n = s.length,\n        l = Math.max(0, length - e.length);\n  return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      const n = array.length;\n\n      for (let i = 0; i < n; ++i) {\n        const t = filter(array[i]);\n        if (t) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import {truthy} from 'vega-util';\n\nexport function data(name) {\n  const data = this.context.data[name];\n  return data ? data.values.value : [];\n}\n\nexport function indata(name, field, value) {\n  const index = this.context.data[name]['index:' + field],\n        entry = index ? index.value.get(value) : undefined;\n  return entry ? entry.count : entry;\n}\n\nexport function setdata(name, tuples) {\n  const df = this.context.dataflow,\n        data = this.context.data[name],\n        input = data.input;\n\n  df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n  return 1;\n}\n","export default function(item, name, retval) {\n  if (item) {\n    const df = this.context.dataflow,\n          target = item.mark.source;\n    df.pulse(target, df.changeset().encode(item, name));\n  }\n  return retval !== undefined ? retval : item;\n}\n","const wrap = method => function(value, spec) {\n  const locale = this.context.dataflow.locale();\n  return locale[method](spec)(value);\n};\n\nexport const format = wrap('format');\nexport const timeFormat = wrap('timeFormat');\nexport const utcFormat = wrap('utcFormat');\nexport const timeParse = wrap('timeParse');\nexport const utcParse = wrap('utcParse');\n\nconst dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n  if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n  dateObj.setYear(2000);\n  dateObj.setMonth(month);\n  dateObj.setDate(day);\n  return timeFormat.call(this, dateObj, specifier);\n}\n\nexport function monthFormat(month) {\n  return time.call(this, month, 1, '%B');\n}\n\nexport function monthAbbrevFormat(month) {\n  return time.call(this, month, 1, '%b');\n}\n\nexport function dayFormat(day) {\n  return time.call(this, 0, 2 + day, '%A');\n}\n\nexport function dayAbbrevFormat(day) {\n  return time.call(this, 0, 2 + day, '%a');\n}\n","export const DataPrefix   = ':';\nexport const IndexPrefix  = '@';\nexport const ScalePrefix  = '%';\nexport const SignalPrefix = '$';\n","export const RawCode = 'RawCode';\nexport const Literal = 'Literal';\nexport const Property = 'Property';\nexport const Identifier = 'Identifier';\n\nexport const ArrayExpression = 'ArrayExpression';\nexport const BinaryExpression = 'BinaryExpression';\nexport const CallExpression = 'CallExpression';\nexport const ConditionalExpression = 'ConditionalExpression';\nexport const LogicalExpression = 'LogicalExpression';\nexport const MemberExpression = 'MemberExpression';\nexport const ObjectExpression = 'ObjectExpression';\nexport const UnaryExpression = 'UnaryExpression';\n\nexport default function ASTNode(type) {\n  this.type = type;\n}\n\nASTNode.prototype.visit = function(visitor) {\n  let c, i, n;\n\n  if (visitor(this)) return 1;\n\n  for (c=children(this), i=0, n=c.length; i<n; ++i) {\n    if (c[i].visit(visitor)) return 1;\n  }\n};\n\nfunction children(node) {\n  switch (node.type) {\n    case ArrayExpression:\n      return node.elements;\n    case BinaryExpression:\n    case LogicalExpression:\n      return [node.left, node.right];\n    case CallExpression:\n      return [node.callee].concat(node.arguments);\n    case ConditionalExpression:\n      return [node.test, node.consequent, node.alternate];\n    case MemberExpression:\n      return [node.object, node.property];\n    case ObjectExpression:\n      return node.properties;\n    case Property:\n      return [node.key, node.value];\n    case UnaryExpression:\n      return [node.argument];\n    case Identifier:\n    case Literal:\n    case RawCode:\n    default:\n      return [];\n  }\n}\n","/*\n  The following expression parser is based on Esprima (http://esprima.org/).\n  Original header comment and license for Esprima is included here:\n\n  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n    source,\n    index,\n    length,\n    lookahead;\n\nvar TokenBooleanLiteral = 1,\n    TokenEOF = 2,\n    TokenIdentifier = 3,\n    TokenKeyword = 4,\n    TokenNullLiteral = 5,\n    TokenNumericLiteral = 6,\n    TokenPunctuator = 7,\n    TokenStringLiteral = 8,\n    TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '<end>';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n    SyntaxBinaryExpression = 'BinaryExpression',\n    SyntaxCallExpression = 'CallExpression',\n    SyntaxConditionalExpression = 'ConditionalExpression',\n    SyntaxIdentifier = 'Identifier',\n    SyntaxLiteral = 'Literal',\n    SyntaxLogicalExpression = 'LogicalExpression',\n    SyntaxMemberExpression = 'MemberExpression',\n    SyntaxObjectExpression = 'ObjectExpression',\n    SyntaxProperty = 'Property',\n    SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n    MessageUnexpectedNumber = 'Unexpected number',\n    MessageUnexpectedString = 'Unexpected string',\n    MessageUnexpectedIdentifier = 'Unexpected identifier',\n    MessageUnexpectedReserved = 'Unexpected reserved word',\n    MessageUnexpectedEOS = 'Unexpected end of input',\n    MessageInvalidRegExp = 'Invalid regular expression',\n    MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n    MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n    MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n    DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n    // eslint-disable-next-line no-misleading-character-class\n    RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n  /* istanbul ignore next */\n  if (!condition) {\n    throw new Error('ASSERT: ' + message);\n  }\n}\n\nfunction isDecimalDigit(ch) {\n  return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n  return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n  return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n  return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n    (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n  return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n  return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n    (ch >= 0x41 && ch <= 0x5A) || // A..Z\n    (ch >= 0x61 && ch <= 0x7A) || // a..z\n    (ch === 0x5C) || // \\ (backslash)\n    ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n  return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n    (ch >= 0x41 && ch <= 0x5A) || // A..Z\n    (ch >= 0x61 && ch <= 0x7A) || // a..z\n    (ch >= 0x30 && ch <= 0x39) || // 0..9\n    (ch === 0x5C) || // \\ (backslash)\n    ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n  'if':1, 'in':1, 'do':1,\n  'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n  'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n  'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n  'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n  'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n  'function':1, 'continue':1, 'debugger':1,\n  'interface':1, 'protected':1,\n  'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n  var ch;\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n}\n\nfunction scanHexEscape(prefix) {\n  var i, len, ch, code = 0;\n\n  len = (prefix === 'u') ? 4 : 2;\n  for (i = 0; i < len; ++i) {\n    if (index < length && isHexDigit(source[index])) {\n      ch = source[index++];\n      code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n  return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n  var ch, code, cu1, cu2;\n\n  ch = source[index];\n  code = 0;\n\n  // At least, one hex digit is required.\n  if (ch === '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  while (index < length) {\n    ch = source[index++];\n    if (!isHexDigit(ch)) {\n      break;\n    }\n    code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n  }\n\n  if (code > 0x10FFFF || ch !== '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  // UTF-16 Encoding\n  if (code <= 0xFFFF) {\n    return String.fromCharCode(code);\n  }\n  cu1 = ((code - 0x10000) >> 10) + 0xD800;\n  cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n  return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n  var ch, id;\n\n  ch = source.charCodeAt(index++);\n  id = String.fromCharCode(ch);\n\n  // '\\u' (U+005C, U+0075) denotes an escaped character.\n  if (ch === 0x5C) {\n    if (source.charCodeAt(index) !== 0x75) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n    ++index;\n    ch = scanHexEscape('u');\n    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n    id = ch;\n  }\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n    if (!isIdentifierPart(ch)) {\n      break;\n    }\n    ++index;\n    id += String.fromCharCode(ch);\n\n    // '\\u' (U+005C, U+0075) denotes an escaped character.\n    if (ch === 0x5C) {\n      id = id.substr(0, id.length - 1);\n      if (source.charCodeAt(index) !== 0x75) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n      ++index;\n      ch = scanHexEscape('u');\n      if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n      id += ch;\n    }\n  }\n\n  return id;\n}\n\nfunction getIdentifier() {\n  var start, ch;\n\n  start = index++;\n  while (index < length) {\n    ch = source.charCodeAt(index);\n    if (ch === 0x5C) {\n      // Blackslash (U+005C) marks Unicode escape sequence.\n      index = start;\n      return getEscapedIdentifier();\n    }\n    if (isIdentifierPart(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n\n  return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n  var start, id, type;\n\n  start = index;\n\n  // Backslash (U+005C) starts an escaped character.\n  id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n  // There is no keyword or literal with only one character.\n  // Thus, it must be an identifier.\n  if (id.length === 1) {\n    type = TokenIdentifier;\n  } else if (keywords.hasOwnProperty(id)) { // eslint-disable-line no-prototype-builtins\n    type = TokenKeyword;\n  } else if (id === 'null') {\n    type = TokenNullLiteral;\n  } else if (id === 'true' || id === 'false') {\n    type = TokenBooleanLiteral;\n  } else {\n    type = TokenIdentifier;\n  }\n\n  return {\n    type: type,\n    value: id,\n    start: start,\n    end: index\n  };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n  var start = index,\n    code = source.charCodeAt(index),\n    code2,\n    ch1 = source[index],\n    ch2,\n    ch3,\n    ch4;\n\n  switch (code) {\n\n    // Check for most common single-character punctuators.\n    case 0x2E: // . dot\n    case 0x28: // ( open bracket\n    case 0x29: // ) close bracket\n    case 0x3B: // ; semicolon\n    case 0x2C: // , comma\n    case 0x7B: // { open curly brace\n    case 0x7D: // } close curly brace\n    case 0x5B: // [\n    case 0x5D: // ]\n    case 0x3A: // :\n    case 0x3F: // ?\n    case 0x7E: // ~\n      ++index;\n      return {\n        type: TokenPunctuator,\n        value: String.fromCharCode(code),\n        start: start,\n        end: index\n      };\n\n    default:\n      code2 = source.charCodeAt(index + 1);\n\n      // '=' (U+003D) marks an assignment or comparison operator.\n      if (code2 === 0x3D) {\n        switch (code) {\n          case 0x2B: // +\n          case 0x2D: // -\n          case 0x2F: // /\n          case 0x3C: // <\n          case 0x3E: // >\n          case 0x5E: // ^\n          case 0x7C: // |\n          case 0x25: // %\n          case 0x26: // &\n          case 0x2A: // *\n            index += 2;\n            return {\n              type: TokenPunctuator,\n              value: String.fromCharCode(code) + String.fromCharCode(code2),\n              start: start,\n              end: index\n            };\n\n          case 0x21: // !\n          case 0x3D: // =\n            index += 2;\n\n            // !== and ===\n            if (source.charCodeAt(index) === 0x3D) {\n              ++index;\n            }\n            return {\n              type: TokenPunctuator,\n              value: source.slice(start, index),\n              start: start,\n              end: index\n            };\n        }\n      }\n  }\n\n  // 4-character punctuator: >>>=\n\n  ch4 = source.substr(index, 4);\n\n  if (ch4 === '>>>=') {\n    index += 4;\n    return {\n      type: TokenPunctuator,\n      value: ch4,\n      start: start,\n      end: index\n    };\n  }\n\n  // 3-character punctuators: === !== >>> <<= >>=\n\n  ch3 = ch4.substr(0, 3);\n\n  if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n    index += 3;\n    return {\n      type: TokenPunctuator,\n      value: ch3,\n      start: start,\n      end: index\n    };\n  }\n\n  // Other 2-character punctuators: ++ -- << >> && ||\n  ch2 = ch3.substr(0, 2);\n\n  if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n    index += 2;\n    return {\n      type: TokenPunctuator,\n      value: ch2,\n      start: start,\n      end: index\n    };\n  }\n\n  // 1-character punctuators: < > = ! + - * % & | ^ /\n\n  if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n    ++index;\n    return {\n      type: TokenPunctuator,\n      value: ch1,\n      start: start,\n      end: index\n    };\n  }\n\n  throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n  var number = '';\n\n  while (index < length) {\n    if (!isHexDigit(source[index])) {\n      break;\n    }\n    number += source[index++];\n  }\n\n  if (number.length === 0) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt('0x' + number, 16),\n    start: start,\n    end: index\n  };\n}\n\nfunction scanOctalLiteral(start) {\n  var number = '0' + source[index++];\n  while (index < length) {\n    if (!isOctalDigit(source[index])) {\n      break;\n    }\n    number += source[index++];\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt(number, 8),\n    octal: true,\n    start: start,\n    end: index\n  };\n}\n\nfunction scanNumericLiteral() {\n  var number, start, ch;\n\n  ch = source[index];\n  assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n    'Numeric literal must start with a decimal digit or a decimal point');\n\n  start = index;\n  number = '';\n  if (ch !== '.') {\n    number = source[index++];\n    ch = source[index];\n\n    // Hex number starts with '0x'.\n    // Octal number starts with '0'.\n    if (number === '0') {\n      if (ch === 'x' || ch === 'X') {\n        ++index;\n        return scanHexLiteral(start);\n      }\n      if (isOctalDigit(ch)) {\n        return scanOctalLiteral(start);\n      }\n\n      // decimal number starts with '0' such as '09' is illegal.\n      if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n    }\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n    ch = source[index];\n  }\n\n  if (ch === '.') {\n    number += source[index++];\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n    ch = source[index];\n  }\n\n  if (ch === 'e' || ch === 'E') {\n    number += source[index++];\n\n    ch = source[index];\n    if (ch === '+' || ch === '-') {\n      number += source[index++];\n    }\n    if (isDecimalDigit(source.charCodeAt(index))) {\n      while (isDecimalDigit(source.charCodeAt(index))) {\n        number += source[index++];\n      }\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseFloat(number),\n    start: start,\n    end: index\n  };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n  var str = '',\n    quote, start, ch, code, octal = false;\n\n  quote = source[index];\n  assert((quote === '\\'' || quote === '\"'),\n    'String literal must starts with a quote');\n\n  start = index;\n  ++index;\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (ch === quote) {\n      quote = '';\n      break;\n    } else if (ch === '\\\\') {\n      ch = source[index++];\n      if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n        switch (ch) {\n          case 'u':\n          case 'x':\n            if (source[index] === '{') {\n              ++index;\n              str += scanUnicodeCodePointEscape();\n            } else {\n              str += scanHexEscape(ch);\n            }\n            break;\n          case 'n':\n            str += '\\n';\n            break;\n          case 'r':\n            str += '\\r';\n            break;\n          case 't':\n            str += '\\t';\n            break;\n          case 'b':\n            str += '\\b';\n            break;\n          case 'f':\n            str += '\\f';\n            break;\n          case 'v':\n            str += '\\x0B';\n            break;\n\n          default:\n            if (isOctalDigit(ch)) {\n              code = '01234567'.indexOf(ch);\n\n              // \\0 is not octal escape sequence\n              if (code !== 0) {\n                octal = true;\n              }\n\n              if (index < length && isOctalDigit(source[index])) {\n                octal = true;\n                code = code * 8 + '01234567'.indexOf(source[index++]);\n\n                // 3 digits are only allowed when string starts\n                // with 0, 1, 2, 3\n                if ('0123'.indexOf(ch) >= 0 &&\n                  index < length &&\n                  isOctalDigit(source[index])) {\n                  code = code * 8 + '01234567'.indexOf(source[index++]);\n                }\n              }\n              str += String.fromCharCode(code);\n            } else {\n              str += ch;\n            }\n            break;\n        }\n      } else {\n        if (ch === '\\r' && source[index] === '\\n') {\n          ++index;\n        }\n      }\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      break;\n    } else {\n      str += ch;\n    }\n  }\n\n  if (quote !== '') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenStringLiteral,\n    value: str,\n    octal: octal,\n    start: start,\n    end: index\n  };\n}\n\nfunction testRegExp(pattern, flags) {\n  var tmp = pattern;\n\n  if (flags.indexOf('u') >= 0) {\n    // Replace each astral symbol and every Unicode code point\n    // escape sequence with a single ASCII symbol to avoid throwing on\n    // regular expressions that are only valid in combination with the\n    // `/u` flag.\n    // Note: replacing with the ASCII symbol `x` might cause false\n    // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n    // perfectly valid pattern that is equivalent to `[a-b]`, but it\n    // would be replaced by `[x-b]` which throws an error.\n    tmp = tmp\n      .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n        if (parseInt($1, 16) <= 0x10FFFF) {\n          return 'x';\n        }\n        throwError({}, MessageInvalidRegExp);\n      })\n      .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n  }\n\n  // First, detect invalid regular expressions.\n  try {\n    new RegExp(tmp);\n  } catch (e) {\n    throwError({}, MessageInvalidRegExp);\n  }\n\n  // Return a regular expression object for this pattern-flag pair, or\n  // `null` in case the current environment doesn't support the flags it\n  // uses.\n  try {\n    return new RegExp(pattern, flags);\n  } catch (exception) {\n    return null;\n  }\n}\n\nfunction scanRegExpBody() {\n  var ch, str, classMarker, terminated, body;\n\n  ch = source[index];\n  assert(ch === '/', 'Regular expression literal must start with a slash');\n  str = source[index++];\n\n  classMarker = false;\n  terminated = false;\n  while (index < length) {\n    ch = source[index++];\n    str += ch;\n    if (ch === '\\\\') {\n      ch = source[index++];\n      // ECMA-262 7.8.5\n      if (isLineTerminator(ch.charCodeAt(0))) {\n        throwError({}, MessageUnterminatedRegExp);\n      }\n      str += ch;\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      throwError({}, MessageUnterminatedRegExp);\n    } else if (classMarker) {\n      if (ch === ']') {\n        classMarker = false;\n      }\n    } else {\n      if (ch === '/') {\n        terminated = true;\n        break;\n      } else if (ch === '[') {\n        classMarker = true;\n      }\n    }\n  }\n\n  if (!terminated) {\n    throwError({}, MessageUnterminatedRegExp);\n  }\n\n  // Exclude leading and trailing slash.\n  body = str.substr(1, str.length - 2);\n  return {\n    value: body,\n    literal: str\n  };\n}\n\nfunction scanRegExpFlags() {\n  var ch, str, flags;\n\n  str = '';\n  flags = '';\n  while (index < length) {\n    ch = source[index];\n    if (!isIdentifierPart(ch.charCodeAt(0))) {\n      break;\n    }\n\n    ++index;\n    if (ch === '\\\\' && index < length) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    } else {\n      flags += ch;\n      str += ch;\n    }\n  }\n\n  if (flags.search(/[^gimuy]/g) >= 0) {\n    throwError({}, MessageInvalidRegExp, flags);\n  }\n\n  return {\n    value: flags,\n    literal: str\n  };\n}\n\nfunction scanRegExp() {\n  var start, body, flags, value;\n\n  lookahead = null;\n  skipComment();\n  start = index;\n\n  body = scanRegExpBody();\n  flags = scanRegExpFlags();\n  value = testRegExp(body.value, flags.value);\n\n  return {\n    literal: body.literal + flags.literal,\n    value: value,\n    regex: {\n      pattern: body.value,\n      flags: flags.value\n    },\n    start: start,\n    end: index\n  };\n}\n\nfunction isIdentifierName(token) {\n  return token.type === TokenIdentifier ||\n    token.type === TokenKeyword ||\n    token.type === TokenBooleanLiteral ||\n    token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n  var ch;\n\n  skipComment();\n\n  if (index >= length) {\n    return {\n      type: TokenEOF,\n      start: index,\n      end: index\n    };\n  }\n\n  ch = source.charCodeAt(index);\n\n  if (isIdentifierStart(ch)) {\n    return scanIdentifier();\n  }\n\n  // Very common: ( and ) and ;\n  if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n    return scanPunctuator();\n  }\n\n  // String literal starts with single quote (U+0027) or double quote (U+0022).\n  if (ch === 0x27 || ch === 0x22) {\n    return scanStringLiteral();\n  }\n\n\n  // Dot (.) U+002E can also start a floating-point number, hence the need\n  // to check the next character.\n  if (ch === 0x2E) {\n    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n      return scanNumericLiteral();\n    }\n    return scanPunctuator();\n  }\n\n  if (isDecimalDigit(ch)) {\n    return scanNumericLiteral();\n  }\n\n  return scanPunctuator();\n}\n\nfunction lex() {\n  var token;\n\n  token = lookahead;\n  index = token.end;\n\n  lookahead = advance();\n\n  index = token.end;\n\n  return token;\n}\n\nfunction peek() {\n  var pos;\n\n  pos = index;\n\n  lookahead = advance();\n  index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n  var node = new ASTNode(SyntaxArrayExpression);\n  node.elements = elements;\n  return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n  var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n  node.operator = operator;\n  node.left = left;\n  node.right = right;\n  return node;\n}\n\nfunction finishCallExpression(callee, args) {\n  var node = new ASTNode(SyntaxCallExpression);\n  node.callee = callee;\n  node.arguments = args;\n  return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n  var node = new ASTNode(SyntaxConditionalExpression);\n  node.test = test;\n  node.consequent = consequent;\n  node.alternate = alternate;\n  return node;\n}\n\nfunction finishIdentifier(name) {\n  var node = new ASTNode(SyntaxIdentifier);\n  node.name = name;\n  return node;\n}\n\nfunction finishLiteral(token) {\n  var node = new ASTNode(SyntaxLiteral);\n  node.value = token.value;\n  node.raw = source.slice(token.start, token.end);\n  if (token.regex) {\n    if (node.raw === '//') {\n      node.raw = '/(?:)/';\n    }\n    node.regex = token.regex;\n  }\n  return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n  var node = new ASTNode(SyntaxMemberExpression);\n  node.computed = accessor === '[';\n  node.object = object;\n  node.property = property;\n  if (!node.computed) property.member = true;\n  return node;\n}\n\nfunction finishObjectExpression(properties) {\n  var node = new ASTNode(SyntaxObjectExpression);\n  node.properties = properties;\n  return node;\n}\n\nfunction finishProperty(kind, key, value) {\n  var node = new ASTNode(SyntaxProperty);\n  node.key = key;\n  node.value = value;\n  node.kind = kind;\n  return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n  var node = new ASTNode(SyntaxUnaryExpression);\n  node.operator = operator;\n  node.argument = argument;\n  node.prefix = true;\n  return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n  var error,\n    args = Array.prototype.slice.call(arguments, 2),\n    msg = messageFormat.replace(\n      /%(\\d)/g,\n      (whole, index) => {\n        assert(index < args.length, 'Message reference must be in range');\n        return args[index];\n      }\n    );\n\n\n  error = new Error(msg);\n  error.index = index;\n  error.description = msg;\n  throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n  if (token.type === TokenEOF) {\n    throwError(token, MessageUnexpectedEOS);\n  }\n\n  if (token.type === TokenNumericLiteral) {\n    throwError(token, MessageUnexpectedNumber);\n  }\n\n  if (token.type === TokenStringLiteral) {\n    throwError(token, MessageUnexpectedString);\n  }\n\n  if (token.type === TokenIdentifier) {\n    throwError(token, MessageUnexpectedIdentifier);\n  }\n\n  if (token.type === TokenKeyword) {\n    throwError(token, MessageUnexpectedReserved);\n  }\n\n  // BooleanLiteral, NullLiteral, or Punctuator.\n  throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n  var token = lex();\n  if (token.type !== TokenPunctuator || token.value !== value) {\n    throwUnexpected(token);\n  }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n  return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n  return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n  var elements = [];\n\n  index = lookahead.start;\n  expect('[');\n\n  while (!match(']')) {\n    if (match(',')) {\n      lex();\n      elements.push(null);\n    } else {\n      elements.push(parseConditionalExpression());\n\n      if (!match(']')) {\n        expect(',');\n      }\n    }\n  }\n\n  lex();\n\n  return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n  var token;\n\n  index = lookahead.start;\n  token = lex();\n\n  // Note: This function is called only from parseObjectProperty(), where\n  // EOF and Punctuator tokens are already filtered out.\n\n  if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n    if (token.octal) {\n      throwError(token, MessageStrictOctalLiteral);\n    }\n    return finishLiteral(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n  var token, key, id, value;\n\n  index = lookahead.start;\n  token = lookahead;\n\n  if (token.type === TokenIdentifier) {\n    id = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', id, value);\n  }\n  if (token.type === TokenEOF || token.type === TokenPunctuator) {\n    throwUnexpected(token);\n  } else {\n    key = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', key, value);\n  }\n}\n\nfunction parseObjectInitialiser() {\n  var properties = [],\n    property, name, key, map = {},\n    toString = String;\n\n  index = lookahead.start;\n  expect('{');\n\n  while (!match('}')) {\n    property = parseObjectProperty();\n\n    if (property.key.type === SyntaxIdentifier) {\n      name = property.key.name;\n    } else {\n      name = toString(property.key.value);\n    }\n\n    key = '$' + name;\n    if (Object.prototype.hasOwnProperty.call(map, key)) {\n      throwError({}, MessageStrictDuplicateProperty);\n    } else {\n      map[key] = true;\n    }\n\n    properties.push(property);\n\n    if (!match('}')) {\n      expect(',');\n    }\n  }\n\n  expect('}');\n\n  return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n  var expr;\n\n  expect('(');\n\n  expr = parseExpression();\n\n  expect(')');\n\n  return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n  'if': 1\n};\n\nfunction parsePrimaryExpression() {\n  var type, token, expr;\n\n  if (match('(')) {\n    return parseGroupExpression();\n  }\n\n  if (match('[')) {\n    return parseArrayInitialiser();\n  }\n\n  if (match('{')) {\n    return parseObjectInitialiser();\n  }\n\n  type = lookahead.type;\n  index = lookahead.start;\n\n\n  if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n    expr = finishIdentifier(lex().value);\n  } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n    if (lookahead.octal) {\n      throwError(lookahead, MessageStrictOctalLiteral);\n    }\n    expr = finishLiteral(lex());\n  } else if (type === TokenKeyword) {\n    throw new Error(DISABLED);\n  } else if (type === TokenBooleanLiteral) {\n    token = lex();\n    token.value = (token.value === 'true');\n    expr = finishLiteral(token);\n  } else if (type === TokenNullLiteral) {\n    token = lex();\n    token.value = null;\n    expr = finishLiteral(token);\n  } else if (match('/') || match('/=')) {\n    expr = finishLiteral(scanRegExp());\n    peek();\n  } else {\n    throwUnexpected(lex());\n  }\n\n  return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n  var args = [];\n\n  expect('(');\n\n  if (!match(')')) {\n    while (index < length) {\n      args.push(parseConditionalExpression());\n      if (match(')')) {\n        break;\n      }\n      expect(',');\n    }\n  }\n\n  expect(')');\n\n  return args;\n}\n\nfunction parseNonComputedProperty() {\n  var token;\n  index = lookahead.start;\n  token = lex();\n\n  if (!isIdentifierName(token)) {\n    throwUnexpected(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n  expect('.');\n\n  return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n  var expr;\n\n  expect('[');\n\n  expr = parseExpression();\n\n  expect(']');\n\n  return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n  var expr, args, property;\n\n  expr = parsePrimaryExpression();\n\n  for (;;) {\n    if (match('.')) {\n      property = parseNonComputedMember();\n      expr = finishMemberExpression('.', expr, property);\n    } else if (match('(')) {\n      args = parseArguments();\n      expr = finishCallExpression(expr, args);\n    } else if (match('[')) {\n      property = parseComputedMember();\n      expr = finishMemberExpression('[', expr, property);\n    } else {\n      break;\n    }\n  }\n\n  return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n  var expr = parseLeftHandSideExpressionAllowCall();\n\n  if (lookahead.type === TokenPunctuator) {\n    if ((match('++') || match('--'))) {\n      throw new Error(DISABLED);\n    }\n  }\n\n  return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n  var token, expr;\n\n  if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n    expr = parsePostfixExpression();\n  } else if (match('++') || match('--')) {\n    throw new Error(DISABLED);\n  } else if (match('+') || match('-') || match('~') || match('!')) {\n    token = lex();\n    expr = parseUnaryExpression();\n    expr = finishUnaryExpression(token.value, expr);\n  } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n    throw new Error(DISABLED);\n  } else {\n    expr = parsePostfixExpression();\n  }\n\n  return expr;\n}\n\nfunction binaryPrecedence(token) {\n  var prec = 0;\n\n  if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n    return 0;\n  }\n\n  switch (token.value) {\n    case '||':\n      prec = 1;\n      break;\n\n    case '&&':\n      prec = 2;\n      break;\n\n    case '|':\n      prec = 3;\n      break;\n\n    case '^':\n      prec = 4;\n      break;\n\n    case '&':\n      prec = 5;\n      break;\n\n    case '==':\n    case '!=':\n    case '===':\n    case '!==':\n      prec = 6;\n      break;\n\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n    case 'instanceof':\n    case 'in':\n      prec = 7;\n      break;\n\n    case '<<':\n    case '>>':\n    case '>>>':\n      prec = 8;\n      break;\n\n    case '+':\n    case '-':\n      prec = 9;\n      break;\n\n    case '*':\n    case '/':\n    case '%':\n      prec = 11;\n      break;\n\n    default:\n      break;\n  }\n\n  return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n  var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n  marker = lookahead;\n  left = parseUnaryExpression();\n\n  token = lookahead;\n  prec = binaryPrecedence(token);\n  if (prec === 0) {\n    return left;\n  }\n  token.prec = prec;\n  lex();\n\n  markers = [marker, lookahead];\n  right = parseUnaryExpression();\n\n  stack = [left, token, right];\n\n  while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n    // Reduce: make a binary expression from the three topmost entries.\n    while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n      right = stack.pop();\n      operator = stack.pop().value;\n      left = stack.pop();\n      markers.pop();\n      expr = finishBinaryExpression(operator, left, right);\n      stack.push(expr);\n    }\n\n    // Shift.\n    token = lex();\n    token.prec = prec;\n    stack.push(token);\n    markers.push(lookahead);\n    expr = parseUnaryExpression();\n    stack.push(expr);\n  }\n\n  // Final reduce to clean-up the stack.\n  i = stack.length - 1;\n  expr = stack[i];\n  markers.pop();\n  while (i > 1) {\n    markers.pop();\n    expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n    i -= 2;\n  }\n\n  return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n  var expr, consequent, alternate;\n\n  expr = parseBinaryExpression();\n\n  if (match('?')) {\n    lex();\n    consequent = parseConditionalExpression();\n    expect(':');\n    alternate = parseConditionalExpression();\n\n    expr = finishConditionalExpression(expr, consequent, alternate);\n  }\n\n  return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n  var expr = parseConditionalExpression();\n\n  if (match(',')) {\n    throw new Error(DISABLED); // no sequence expressions\n  }\n\n  return expr;\n}\n\nexport default function(code) {\n  source = code;\n  index = 0;\n  length = source.length;\n  lookahead = null;\n\n  peek();\n\n  var expr = parseExpression();\n\n  if (lookahead.type !== TokenEOF) {\n    throw new Error('Unexpect token after expression.');\n  }\n  return expr;\n}\n","export default {\n  NaN:       'NaN',\n  E:         'Math.E',\n  LN2:       'Math.LN2',\n  LN10:      'Math.LN10',\n  LOG2E:     'Math.LOG2E',\n  LOG10E:    'Math.LOG10E',\n  PI:        'Math.PI',\n  SQRT1_2:   'Math.SQRT1_2',\n  SQRT2:     'Math.SQRT2',\n  MIN_VALUE: 'Number.MIN_VALUE',\n  MAX_VALUE: 'Number.MAX_VALUE'\n};\n","import {error} from 'vega-util';\n\nexport default function(codegen) {\n\n  function fncall(name, args, cast, type) {\n    let obj = codegen(args[0]);\n    if (cast) {\n      obj = cast + '(' + obj + ')';\n      if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n    }\n    return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n      '()' :\n      '(' + args.slice(1).map(codegen).join(',') + ')');\n  }\n\n  function fn(name, cast, type) {\n    return args => fncall(name, args, cast, type);\n  }\n\n  const DATE = 'new Date',\n        STRING = 'String',\n        REGEXP = 'RegExp';\n\n  return {\n    // MATH functions\n    isNaN:    'Number.isNaN',\n    isFinite: 'Number.isFinite',\n    abs:      'Math.abs',\n    acos:     'Math.acos',\n    asin:     'Math.asin',\n    atan:     'Math.atan',\n    atan2:    'Math.atan2',\n    ceil:     'Math.ceil',\n    cos:      'Math.cos',\n    exp:      'Math.exp',\n    floor:    'Math.floor',\n    log:      'Math.log',\n    max:      'Math.max',\n    min:      'Math.min',\n    pow:      'Math.pow',\n    random:   'Math.random',\n    round:    'Math.round',\n    sin:      'Math.sin',\n    sqrt:     'Math.sqrt',\n    tan:      'Math.tan',\n\n    clamp: function(args) {\n      if (args.length < 3) error('Missing arguments to clamp function.');\n      if (args.length > 3) error('Too many arguments to clamp function.');\n      const a = args.map(codegen);\n      return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n    },\n\n    // DATE functions\n    now:             'Date.now',\n    utc:             'Date.UTC',\n    datetime:        DATE,\n    date:            fn('getDate', DATE, 0),\n    day:             fn('getDay', DATE, 0),\n    year:            fn('getFullYear', DATE, 0),\n    month:           fn('getMonth', DATE, 0),\n    hours:           fn('getHours', DATE, 0),\n    minutes:         fn('getMinutes', DATE, 0),\n    seconds:         fn('getSeconds', DATE, 0),\n    milliseconds:    fn('getMilliseconds', DATE, 0),\n    time:            fn('getTime', DATE, 0),\n    timezoneoffset:  fn('getTimezoneOffset', DATE, 0),\n    utcdate:         fn('getUTCDate', DATE, 0),\n    utcday:          fn('getUTCDay', DATE, 0),\n    utcyear:         fn('getUTCFullYear', DATE, 0),\n    utcmonth:        fn('getUTCMonth', DATE, 0),\n    utchours:        fn('getUTCHours', DATE, 0),\n    utcminutes:      fn('getUTCMinutes', DATE, 0),\n    utcseconds:      fn('getUTCSeconds', DATE, 0),\n    utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n    // sequence functions\n    length:      fn('length', null, -1),\n    join:        fn('join', null),\n    indexof:     fn('indexOf', null),\n    lastindexof: fn('lastIndexOf', null),\n    slice:       fn('slice', null),\n\n    reverse: function(args) {\n      return '('+codegen(args[0])+').slice().reverse()';\n    },\n\n    // STRING functions\n    parseFloat:  'parseFloat',\n    parseInt:    'parseInt',\n    upper:       fn('toUpperCase', STRING, 0),\n    lower:       fn('toLowerCase', STRING, 0),\n    substring:   fn('substring', STRING),\n    split:       fn('split', STRING),\n    replace:     fn('replace', STRING),\n    trim:        fn('trim', STRING, 0),\n\n    // REGEXP functions\n    regexp:  REGEXP,\n    test:    fn('test', REGEXP),\n\n    // Control Flow functions\n    if: function(args) {\n        if (args.length < 3) error('Missing arguments to if function.');\n        if (args.length > 3) error('Too many arguments to if function.');\n        const a = args.map(codegen);\n        return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n      }\n  };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, hasOwnProperty, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n  const n = s && s.length - 1;\n  return n && (\n      (s[0]==='\"' && s[n]==='\"') ||\n      (s[0]==='\\'' && s[n]==='\\'')\n    ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n  opt = opt || {};\n\n  const whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n        blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n        constants = opt.constants || Constants,\n        functions = (opt.functions || Functions)(visit),\n        globalvar = opt.globalvar,\n        fieldvar = opt.fieldvar,\n        outputGlobal = isFunction(globalvar)\n          ? globalvar\n          : id => `${globalvar}[\"${id}\"]`;\n\n  let globals = {},\n      fields = {},\n      memberDepth = 0;\n\n  function visit(ast) {\n    if (isString(ast)) return ast;\n    const generator = Generators[ast.type];\n    if (generator == null) error('Unsupported type: ' + ast.type);\n    return generator(ast);\n  }\n\n  const Generators = {\n    Literal: n => n.raw,\n\n    Identifier: n => {\n      const id = n.name;\n      if (memberDepth > 0) {\n        return id;\n      } else if (hasOwnProperty(blacklist, id)) {\n        return error('Illegal identifier: ' + id);\n      } else if (hasOwnProperty(constants, id)) {\n        return constants[id];\n      } else if (hasOwnProperty(whitelist, id)) {\n        return id;\n      } else {\n        globals[id] = 1;\n        return outputGlobal(id);\n      }\n    },\n\n    MemberExpression: n => {\n        const d = !n.computed,\n              o = visit(n.object);\n        if (d) memberDepth += 1;\n        const p = visit(n.property);\n        if (o === fieldvar) {\n          // strip quotes to sanitize field name (#1653)\n          fields[stripQuotes(p)] = 1;\n        }\n        if (d) memberDepth -= 1;\n        return o + (d ? '.'+p : '['+p+']');\n      },\n\n    CallExpression: n => {\n        if (n.callee.type !== 'Identifier') {\n          error('Illegal callee type: ' + n.callee.type);\n        }\n        const callee = n.callee.name,\n              args = n.arguments,\n              fn = hasOwnProperty(functions, callee) && functions[callee];\n        if (!fn) error('Unrecognized function: ' + callee);\n        return isFunction(fn)\n          ? fn(args)\n          : fn + '(' + args.map(visit).join(',') + ')';\n      },\n\n    ArrayExpression: n =>\n        '[' + n.elements.map(visit).join(',') + ']',\n\n    BinaryExpression: n =>\n        '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n    UnaryExpression: n =>\n        '(' + n.operator + visit(n.argument) + ')',\n\n    ConditionalExpression: n =>\n        '(' + visit(n.test) +\n          '?' + visit(n.consequent) +\n          ':' + visit(n.alternate) +\n          ')',\n\n    LogicalExpression: n =>\n        '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n    ObjectExpression: n =>\n        '{' + n.properties.map(visit).join(',') + '}',\n\n    Property: n => {\n        memberDepth += 1;\n        const k = visit(n.key);\n        memberDepth -= 1;\n        return k + ':' + visit(n.value);\n      }\n  };\n\n  function codegen(ast) {\n    const result = {\n      code:    visit(ast),\n      globals: Object.keys(globals),\n      fields:  Object.keys(fields)\n    };\n    globals = {};\n    fields = {};\n    return result;\n  }\n\n  codegen.functions = functions;\n  codegen.constants = constants;\n\n  return codegen;\n}\n","export {\n  RawCode,\n  Literal,\n  Property,\n  Identifier,\n  ArrayExpression,\n  BinaryExpression,\n  CallExpression,\n  ConditionalExpression,\n  LogicalExpression,\n  MemberExpression,\n  ObjectExpression,\n  UnaryExpression,\n  default as ASTNode\n} from './src/ast';\n\nexport { default as parse} from './src/parser';\nexport { default as codegen } from './src/codegen';\nexport { default as functions } from './src/functions';\nexport { default as constants } from './src/constants';\n","import {DataPrefix, IndexPrefix, ScalePrefix} from './constants';\nimport {Literal} from 'vega-expression';\nimport {error, hasOwnProperty} from 'vega-util';\n\nexport function dataVisitor(name, args, scope, params) {\n  if (args[0].type !== Literal) {\n    error('First argument to data functions must be a string literal.');\n  }\n\n  const data = args[0].value,\n        dataName = DataPrefix + data;\n\n  if (!hasOwnProperty(dataName, params)) {\n    try {\n      params[dataName] = scope.getData(data).tuplesRef();\n    } catch (err) {\n      // if data set does not exist, there's nothing to track\n    }\n  }\n}\n\nexport function indataVisitor(name, args, scope, params) {\n  if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n  if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n\n  const data = args[0].value,\n        field = args[1].value,\n        indexName = IndexPrefix + field;\n\n  if (!hasOwnProperty(indexName, params)) {\n    params[indexName] = scope.getData(data).indataRef(scope, field);\n  }\n}\n\nexport function scaleVisitor(name, args, scope, params) {\n  if (args[0].type === Literal) {\n    // add scale dependency\n    addScaleDependency(scope, params, args[0].value);\n  } else {\n    // indirect scale lookup; add all scales as parameters\n    for (name in scope.scales) {\n      addScaleDependency(scope, params, name);\n    }\n  }\n}\n\nfunction addScaleDependency(scope, params, name) {\n  const scaleName = ScalePrefix + name;\n  if (!hasOwnProperty(params, scaleName)) {\n    try {\n      params[scaleName] = scope.scaleRef(name);\n    } catch (err) {\n      // TODO: error handling? warning?\n    }\n  }\n}\n","import {ScalePrefix} from './constants';\nimport {scaleVisitor} from './visitors';\nimport {Literal} from 'vega-expression';\nimport {isFunction, isString, stringValue} from 'vega-util';\n\nexport function getScale(name, ctx) {\n  let s;\n  return isFunction(name) ? name\n    : isString(name) ? (s = ctx.scales[name]) && s.value\n    : undefined;\n}\n\nexport function internalScaleFunctions(codegen, fnctx, visitors) {\n  // add helper method to the 'this' expression function context\n  fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n  // register AST visitors for internal scale functions\n  visitors._bandwidth = scaleVisitor;\n  visitors._range = scaleVisitor;\n  visitors._scale = scaleVisitor;\n\n  // resolve scale reference directly to the signal hash argument\n  const ref = arg => '_[' + (\n    arg.type === Literal\n      ? stringValue(ScalePrefix + arg.value)\n      : stringValue(ScalePrefix) + '+' + codegen(arg)\n  ) + ']';\n\n  // define and return internal scale function code generators\n  // these internal functions are called by mark encoders\n  return {\n    _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n    _range: args => `${ref(args[0])}.range()`,\n    _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n  };\n}\n","import {getScale} from '../scales';\nimport {\n  geoArea as area,\n  geoBounds as bounds,\n  geoCentroid as centroid\n} from 'd3-geo';\n\nfunction geoMethod(methodName, globalMethod) {\n  return function(projection, geojson, group) {\n    if (projection) {\n      // projection defined, use it\n      const p = getScale(projection, (group || this).context);\n      return p && p.path[methodName](geojson);\n    } else {\n      // projection undefined, use global method\n      return globalMethod(geojson);\n    }\n  };\n}\n\nexport const geoArea = geoMethod('area', area);\nexport const geoBounds = geoMethod('bounds', bounds);\nexport const geoCentroid = geoMethod('centroid', centroid);\n","export default function(item) {\n  const group = this.context.group;\n  let value = false;\n\n  if (group) while (item) {\n    if (item === group) { value = true; break; }\n    item = item.mark.group;\n  }\n  return value;\n}\n","function log(df, method, args) {\n  try {\n    df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n  } catch (err) {\n    df.warn(err);\n  }\n  return args[args.length-1];\n}\n\nexport function warn() {\n  return log(this.context.dataflow, 'warn', arguments);\n}\n\nexport function info() {\n  return log(this.context.dataflow, 'info', arguments);\n}\n\nexport function debug() {\n  return log(this.context.dataflow, 'debug', arguments);\n}\n","import {rgb} from 'd3-color';\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n  const val = channelValue / 255;\n  if (val <= 0.03928) {\n    return val / 12.92;\n  }\n  return Math.pow((val + 0.055) / 1.055, 2.4);\n}\n\nexport function luminance(color) {\n  const c = rgb(color),\n        r = channel_luminance_value(c.r),\n        g = channel_luminance_value(c.g),\n        b = channel_luminance_value(c.b);\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nexport function contrast(color1, color2) {\n  const lum1 = luminance(color1),\n        lum2 = luminance(color2),\n        lumL = Math.max(lum1, lum2),\n        lumD = Math.min(lum1, lum2);\n  return (lumL + 0.05) / (lumD + 0.05);\n}\n","import {extend} from 'vega-util';\n\nexport default function() {\n  const args = [].slice.call(arguments);\n  args.unshift({});\n  return extend.apply(null, args);\n}\n","import {isTuple} from 'vega-dataflow';\nimport {isArray, isObject, truthy} from 'vega-util';\n\nfunction equal(a, b) {\n  return a === b || a !== a && b !== b ? true\n    : isArray(a) ? (\n        isArray(b) && a.length === b.length ? equalArray(a, b) : false\n      )\n    : isObject(a) && isObject(b) ? equalObject(a, b)\n    : false;\n}\n\nfunction equalArray(a, b) {\n  for (let i=0, n=a.length; i<n; ++i) {\n    if (!equal(a[i], b[i])) return false;\n  }\n  return true;\n}\n\nfunction equalObject(a, b) {\n  for (const key in a) {\n    if (!equal(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nfunction removePredicate(props) {\n  return _ => equalObject(props, _);\n}\n\nexport default function(name, insert, remove, toggle, modify, values) {\n  const df = this.context.dataflow,\n        data = this.context.data[name],\n        input = data.input,\n        stamp = df.stamp();\n\n  let changes = data.changes,\n      predicate, key;\n\n  if (df._trigger === false || !(input.value.length || insert || toggle)) {\n    // nothing to do!\n    return 0;\n  }\n\n  if (!changes || changes.stamp < stamp) {\n    data.changes = (changes = df.changeset());\n    changes.stamp = stamp;\n    df.runAfter(() => {\n      data.modified = true;\n      df.pulse(input, changes).run();\n    }, true, 1);\n  }\n\n  if (remove) {\n    predicate = remove === true ? truthy\n      : (isArray(remove) || isTuple(remove)) ? remove\n      : removePredicate(remove);\n    changes.remove(predicate);\n  }\n\n  if (insert) {\n    changes.insert(insert);\n  }\n\n  if (toggle) {\n    predicate = removePredicate(toggle);\n    if (input.value.some(predicate)) {\n      changes.remove(predicate);\n    } else {\n      changes.insert(toggle);\n    }\n  }\n\n  if (modify) {\n    for (key in values) {\n      changes.modify(modify, key, values[key]);\n    }\n  }\n\n  return 1;\n}\n","export function pinchDistance(event) {\n  const t = event.touches,\n        dx = t[0].clientX - t[1].clientX,\n        dy = t[0].clientY - t[1].clientY;\n  return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport function pinchAngle(event) {\n  const t = event.touches;\n  return Math.atan2(\n    t[0].clientY - t[1].clientY,\n    t[0].clientX - t[1].clientX\n  );\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport { scaleOrdinal, tickFormat as tickFormat$1, scaleIdentity, scaleLinear, scaleLog, scalePow, scaleSqrt, scaleSymlog, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, scaleQuantile, scaleQuantize, scaleThreshold } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $ from 'd3-interpolate';\nimport { piecewise } from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n  const space = count - paddingInner + paddingOuter * 2;\n  return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n  return function (_) {\n    let lo = _[0],\n        hi = _[1],\n        t;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    return [scale.invert(lo), scale.invert(hi)];\n  };\n}\n\nfunction invertRangeExtent (scale) {\n  return function (_) {\n    const range = scale.range();\n    let lo = _[0],\n        hi = _[1],\n        min = -1,\n        max,\n        t,\n        i,\n        n;\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    for (i = 0, n = range.length; i < n; ++i) {\n      if (range[i] >= lo && range[i] <= hi) {\n        if (min < 0) min = i;\n        max = i;\n      }\n    }\n\n    if (min < 0) return undefined;\n    lo = scale.invertExtent(range[min]);\n    hi = scale.invertExtent(range[max]);\n    return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n  };\n}\n\nfunction band() {\n  const scale = scaleOrdinal().unknown(undefined),\n        domain = scale.domain,\n        ordinalRange = scale.range;\n  let range$1 = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n  delete scale.unknown;\n\n  function rescale() {\n    const n = domain().length,\n          reverse = range$1[1] < range$1[0],\n          stop = range$1[1 - reverse],\n          space = bandSpace(n, paddingInner, paddingOuter);\n    let start = range$1[reverse - 0];\n    step = (stop - start) / (space || 1);\n\n    if (round) {\n      step = Math.floor(step);\n    }\n\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n\n    if (round) {\n      start = Math.round(start);\n      bandwidth = Math.round(bandwidth);\n    }\n\n    const values = range(n).map(i => start + step * i);\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain(_);\n      return rescale();\n    } else {\n      return domain();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range$1 = [+_[0], +_[1]];\n      return rescale();\n    } else {\n      return range$1.slice();\n    }\n  };\n\n  scale.rangeRound = function (_) {\n    range$1 = [+_[0], +_[1]];\n    round = true;\n    return rescale();\n  };\n\n  scale.bandwidth = function () {\n    return bandwidth;\n  };\n\n  scale.step = function () {\n    return step;\n  };\n\n  scale.round = function (_) {\n    if (arguments.length) {\n      round = !!_;\n      return rescale();\n    } else {\n      return round;\n    }\n  };\n\n  scale.padding = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      paddingInner = paddingOuter;\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingInner = function (_) {\n    if (arguments.length) {\n      paddingInner = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingInner;\n    }\n  };\n\n  scale.paddingOuter = function (_) {\n    if (arguments.length) {\n      paddingOuter = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return paddingOuter;\n    }\n  };\n\n  scale.align = function (_) {\n    if (arguments.length) {\n      align = Math.max(0, Math.min(1, _));\n      return rescale();\n    } else {\n      return align;\n    }\n  };\n\n  scale.invertRange = function (_) {\n    // bail if range has null or undefined values\n    if (_[0] == null || _[1] == null) return;\n    const reverse = range$1[1] < range$1[0],\n          values = reverse ? ordinalRange().reverse() : ordinalRange(),\n          n = values.length - 1;\n    let lo = +_[0],\n        hi = +_[1],\n        a,\n        b,\n        t; // bail if either range endpoint is invalid\n\n    if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n    if (hi < lo) {\n      t = lo;\n      lo = hi;\n      hi = t;\n    }\n\n    if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n    a = Math.max(0, bisectRight(values, lo) - 1);\n    b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n    if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n    if (reverse) {\n      // map + swap\n      t = a;\n      a = n - b;\n      b = n - t;\n    }\n\n    return a > b ? undefined : domain().slice(a, b + 1);\n  };\n\n  scale.invert = function (_) {\n    const value = scale.invertRange([_, _]);\n    return value ? value[0] : value;\n  };\n\n  scale.copy = function () {\n    return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n  };\n\n  return rescale();\n}\n\nfunction pointish(scale) {\n  const copy = scale.copy;\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n\n  scale.copy = function () {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point() {\n  return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n  return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n  let domain = [],\n      range = [];\n\n  function scale(x) {\n    return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n  }\n\n  scale.domain = function (_) {\n    if (arguments.length) {\n      domain = numbers(_);\n      return scale;\n    } else {\n      return domain.slice();\n    }\n  };\n\n  scale.range = function (_) {\n    if (arguments.length) {\n      range = slice.call(_);\n      return scale;\n    } else {\n      return range.slice();\n    }\n  };\n\n  scale.tickFormat = function (count, specifier) {\n    return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n  };\n\n  scale.copy = function () {\n    return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n  };\n\n  return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n  const ctr = function scale() {\n    const s = constructor();\n\n    if (!s.invertRange) {\n      s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n    }\n\n    s.type = type;\n    return s;\n  };\n\n  ctr.metadata = toSet(array(metadata));\n  return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n  if (arguments.length > 1) {\n    scales[type] = create(type, scale, metadata);\n    return this;\n  } else {\n    return isValidScaleType(type) ? scales[type] : undefined;\n  }\n} // identity scale\n\nscale(Identity, scaleIdentity); // continuous scales\n\nscale(Linear, scaleLinear, Continuous);\nscale(Log, scaleLog, [Continuous, Log]);\nscale(Pow, scalePow, Continuous);\nscale(Sqrt, scaleSqrt, Continuous);\nscale(Symlog, scaleSymlog, Continuous);\nscale(Time, scaleTime, [Continuous, Temporal]);\nscale(UTC, scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(\"\".concat(Sequential, \"-\").concat(Linear), scaleSequential, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Log), scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Sequential, \"-\").concat(Pow), scaleSequentialPow, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Sqrt), scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Sequential, \"-\").concat(Symlog), scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(\"\".concat(Diverging, \"-\").concat(Linear), scaleDiverging, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Log), scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(\"\".concat(Diverging, \"-\").concat(Pow), scaleDivergingPow, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Sqrt), scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(\"\".concat(Diverging, \"-\").concat(Symlog), scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, scaleQuantize, Discretizing);\nscale(Threshold, scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n  return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n  const s = scales[key];\n  return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n  return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n  return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n  return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n  return hasType(key, Log);\n}\nfunction isTemporal(key) {\n  return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n  return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n  return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n  const start = range[0],\n        span = peek(range) - start;\n  return function (i) {\n    return interpolator(start + i * span);\n  };\n}\nfunction interpolateColors(colors, type, gamma) {\n  return piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n  const samples = new Array(count),\n        n = count + 1;\n\n  for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n  return samples;\n}\nfunction scaleCopy(scale) {\n  const t = scale.type,\n        s = scale.copy();\n  s.type = t;\n  return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n  const delta = max - min;\n  let i, t, s;\n\n  if (!delta || !Number.isFinite(delta)) {\n    return constant(0.5);\n  } else {\n    i = (t = scale$1.type).indexOf('-');\n    t = i < 0 ? t : t.slice(i + 1);\n    s = scale(t)().domain([min, max]).range([0, 1]);\n    scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n    return s;\n  }\n}\nfunction interpolate(type, gamma) {\n  const interp = $[method(type)];\n  return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n  return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n  blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n  greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n  greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n  oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n  purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n  reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n  blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n  bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n  greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n  orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n  purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n  purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n  purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n  redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n  yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n  yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n  yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n  blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n  brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n  purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n  purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n  redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n  redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n  yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n  redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n  redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n  pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n  spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n  viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n  magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n  inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n  plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n  cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n  rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n  sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n  turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n  browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n  tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n  teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n  warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n  goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n  goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n  goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n  lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n  lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n  lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n  lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n  lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n  darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n  darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n  darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n  darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n  darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n  category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n  category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n  category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n  category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n  tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n  tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n  accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n  dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n  paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n  pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n  pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n  set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n  set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n  set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n  const n = palette.length / 6 | 0,\n        c = new Array(n);\n\n  for (let i = 0; i < n;) {\n    c[i] = '#' + palette.slice(i * 6, ++i * 6);\n  }\n\n  return c;\n}\n\nfunction apply(_, f) {\n  for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n  name = name && name.toLowerCase();\n\n  if (arguments.length > 1) {\n    schemes[name] = scheme;\n    return this;\n  } else {\n    return schemes[name];\n  }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n  let step;\n\n  if (isNumber(count)) {\n    if (scale.bins) {\n      count = Math.max(count, scale.bins.length);\n    }\n\n    if (minStep != null) {\n      count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n    }\n  }\n\n  if (isObject(count)) {\n    step = count.step;\n    count = count.interval;\n  }\n\n  if (isString(count)) {\n    count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n    if (step) count = count.every(step);\n  }\n\n  return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n  let range = scale.range(),\n      lo = range[0],\n      hi = peek(range),\n      cmp = ascending;\n\n  if (lo > hi) {\n    range = hi;\n    hi = lo;\n    lo = range;\n    cmp = descending;\n  }\n\n  lo = Math.floor(lo);\n  hi = Math.ceil(hi); // filter ticks to valid values within the range\n  // additionally sort ticks in range order (#2579)\n\n  ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n  if (count > 0 && ticks.length > 1) {\n    const endpoints = [ticks[0], peek(ticks)];\n\n    while (ticks.length > count && ticks.length >= 3) {\n      ticks = ticks.filter((_, i) => !(i % 2));\n    }\n\n    if (ticks.length < 3) {\n      ticks = endpoints;\n    }\n  }\n\n  return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n  return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n *   specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n *   time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n  const type = scale.type;\n  let format = defaultFormatter;\n\n  if (type === Time || formatType === Time) {\n    format = locale.timeFormat(specifier);\n  } else if (type === UTC || formatType === UTC) {\n    format = locale.utcFormat(specifier);\n  } else if (isLogarithmic(type)) {\n    const varfmt = locale.formatFloat(specifier);\n\n    if (noSkip || scale.bins) {\n      format = varfmt;\n    } else {\n      const test = tickLog(scale, count, false);\n\n      format = _ => test(_) ? varfmt(_) : '';\n    }\n  } else if (scale.tickFormat) {\n    // if d3 scale has tickFormat, it must be continuous\n    const d = scale.domain();\n    format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n  } else if (specifier) {\n    format = locale.format(specifier);\n  }\n\n  return format;\n}\nfunction tickLog(scale, count, values) {\n  const ticks = tickValues(scale, count),\n        base = scale.base(),\n        logb = Math.log(base),\n        k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n  const test = d => {\n    let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n    if (i * base < base - 0.5) i *= base;\n    return i <= k;\n  };\n\n  return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'thresholds',\n  [Threshold]: 'domain'\n};\nconst formats = {\n  [Quantile]: 'quantiles',\n  [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n  return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n  const _ = scale[formats[scale.type]](),\n        n = _.length;\n\n  let d = n > 1 ? _[1] - _[0] : _[0],\n      i;\n\n  for (i = 1; i < n; ++i) {\n    d = Math.min(d, _[i] - _[i - 1]);\n  } // tickCount = 3 ticks times 10 for increased resolution\n\n\n  return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n  const values = [-Infinity].concat(thresholds);\n  values.max = +Infinity;\n  return values;\n}\n\nfunction binValues(bins) {\n  const values = bins.slice(0, -1);\n  values.max = peek(bins);\n  return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n  const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n  return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n  const limit = get(array[index + 1], get(array.max, +Infinity)),\n        lo = formatValue(value, format),\n        hi = formatValue(limit, format);\n  return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n  const domain = scale.domain(),\n        count = domain.length - 1;\n  let lo = +domain[0],\n      hi = +peek(domain),\n      span = hi - lo;\n\n  if (scale.type === Threshold) {\n    const adjust = count ? span / count : 0.1;\n    lo -= adjust;\n    hi += adjust;\n    span = hi - lo;\n  }\n\n  return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n  const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n  if (isString(specifier) && isTemporal(type)) {\n    specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n  }\n\n  return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n  opt = opt || {};\n  const max = Math.max(3, opt.maxlen || 7),\n        fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n  if (isDiscretizing(scale.type)) {\n    const v = labelValues(scale).slice(1).map(fmt),\n          n = v.length;\n    return \"\".concat(n, \" boundar\").concat(n === 1 ? 'y' : 'ies', \": \").concat(v.join(', '));\n  } // if scale domain is discrete, list values\n  else if (isDiscrete(scale.type)) {\n      const d = scale.domain(),\n            n = d.length,\n            v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n      return \"\".concat(n, \" value\").concat(n === 1 ? '' : 's', \": \").concat(v);\n    } // if scale domain is continuous, describe value range\n    else {\n        const d = scale.domain();\n        return \"values from \".concat(fmt(d[0]), \" to \").concat(fmt(peek(d)));\n      }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {getScale} from '../scales';\nimport {bandSpace} from 'vega-scale';\nimport {isArray} from 'vega-util';\n\nexport function bandspace(count, paddingInner, paddingOuter) {\n  return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\n\nexport function bandwidth(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s && s.bandwidth ? s.bandwidth() : 0;\n}\n\nexport function copy(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s.copy() : undefined;\n}\n\nexport function domain(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s.domain() : [];\n}\n\nexport function invert(name, range, group) {\n  const s = getScale(name, (group || this).context);\n  return !s ? undefined\n    : isArray(range) ? (s.invertRange || s.invert)(range)\n    : (s.invert || s.invertExtent)(range);\n}\n\nexport function range(name, group) {\n  const s = getScale(name, (group || this).context);\n  return s && s.range ? s.range() : [];\n}\n\nexport function scale(name, value, group) {\n  const s = getScale(name, (group || this).context);\n  return s ? s(value) : undefined;\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export {default as path} from \"./path.js\";\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = (data = array(data)).length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n  var a = area().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n","export default function(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n  return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n  return link(curveVertical);\n}\n\nexport function linkRadial() {\n  var l = link(curveRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","var tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nexport default {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n    kx = Math.sin(tau / 10) * kr,\n    ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","var c = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nexport default function(type, size) {\n  var context = null;\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index.js\";\n\nexport {default as symbol, symbols} from \"./symbol.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n","import {error, extend, isFunction, stringValue} from 'vega-util';\n\n// Matches absolute URLs with optional protocol\n//   https://...    file://...    //...\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n *   If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n *   If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n *   param {object} [options] - Optional default loading options to use.\n *   return {object} - A new loader instance.\n */\nexport default function(fetch, fs) {\n  return options => ({\n    options: options || {},\n    sanitize: sanitize,\n    load: load,\n    fileAccess: !!fs,\n    file: fileLoader(fs),\n    http: httpLoader(fetch)\n  });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n *   override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n  const opt = await this.sanitize(uri, options),\n        url = opt.href;\n\n  return opt.localFile\n    ? this.file(url)\n    : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n *  sanitized uri data, or rejects it the input uri is deemed invalid.\n *  The properties of the resolved object are assumed to be\n *  valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n *  provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n  options = extend({}, this.options, options);\n\n  const fileAccess = this.fileAccess,\n        result = {href: null};\n\n  let isFile, loadFile, base;\n\n  const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n  if (uri == null || typeof uri !== 'string' || !isAllowed) {\n    error('Sanitize failure, invalid URI: ' + stringValue(uri));\n  }\n\n  const hasProtocol = protocol_re.test(uri);\n\n  // if relative url (no protocol/host), prepend baseURL\n  if ((base = options.baseURL) && !hasProtocol) {\n    // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n    if (!uri.startsWith('/') && base[base.length-1] !== '/') {\n      uri = '/' + uri;\n    }\n    uri = base + uri;\n  }\n\n  // should we load from file system?\n  loadFile = (isFile = uri.startsWith(fileProtocol))\n    || options.mode === 'file'\n    || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n  if (isFile) {\n    // strip file protocol\n    uri = uri.slice(fileProtocol.length);\n  } else if (uri.startsWith('//')) {\n    if (options.defaultProtocol === 'file') {\n      // if is file, strip protocol and set loadFile flag\n      uri = uri.slice(2);\n      loadFile = true;\n    } else {\n      // if relative protocol (starts with '//'), prepend default protocol\n      uri = (options.defaultProtocol || 'http') + ':' + uri;\n    }\n  }\n\n  // set non-enumerable mode flag to indicate local file load\n  Object.defineProperty(result, 'localFile', {value: !!loadFile});\n\n  // set uri\n  result.href = uri;\n\n  // set default result target, if specified\n  if (options.target) {\n    result.target = options.target + '';\n  }\n\n  // set default result rel, if specified (#1542)\n  if (options.rel) {\n    result.rel = options.rel + '';\n  }\n\n  // provide control over cross-origin image handling (#2238)\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n  if (options.context === 'image' && options.crossOrigin) {\n    result.crossOrigin = options.crossOrigin + '';\n  }\n\n  // return\n  return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n *   param {string} filename - The file system path to load.\n *   param {string} filename - The file system path to load.\n *   return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n  return fs\n    ? filename => new Promise((accept, reject) => {\n        fs.readFile(filename, (error, data) => {\n          if (error) reject(error);\n          else accept(data);\n        });\n      })\n    : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n  error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n *   param {string} url - The url to request.\n *   param {object} options - An options hash.\n *   return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n  return fetch\n    ? async function(url, options) {\n        const opt = extend({}, this.options.http, options),\n              type = options && options.response,\n              response = await fetch(url, opt);\n\n        return !response.ok\n          ? error(response.status + '' + response.statusText)\n          : isFunction(response[type]) ? response[type]()\n          : response.text();\n      }\n    : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n  error('No HTTP fetch method available.');\n}\n","import {identity, toBoolean, toDate, toNumber, toString} from 'vega-util';\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true'\n  || _ === 'false'\n  || _ === true\n  || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nexport const typeParsers = {\n  boolean: toBoolean,\n  integer: toNumber,\n  number:  toNumber,\n  date:    toDate,\n  string:  toString,\n  unknown: identity\n};\n\nconst typeTests = [\n  isBoolean,\n  isInteger,\n  isNumber,\n  isDate\n];\n\nconst typeList = [\n  'boolean',\n  'integer',\n  'number',\n  'date'\n];\n\nexport function inferType(values, field) {\n  if (!values || !values.length) return 'unknown';\n\n  const n = values.length,\n        m = typeTests.length,\n        a = typeTests.map((_, i) => i + 1);\n\n  for (let i = 0, t = 0, j, value; i < n; ++i) {\n    value = field ? values[i][field] : values[i];\n    for (j = 0; j < m; ++j) {\n      if (a[j] && isValid(value) && !typeTests[j](value)) {\n        a[j] = 0;\n        ++t;\n        if (t === typeTests.length) return 'string';\n      }\n    }\n  }\n\n  return typeList[\n    a.reduce((u, v) => u === 0 ? v : u, 0) - 1\n  ];\n}\n\nexport function inferTypes(data, fields) {\n  return fields.reduce((types, field) => {\n    types[field] = inferType(data, field);\n    return types;\n  }, {});\n}\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n  const parse = function(data, format) {\n    const delim = {delimiter: delimiter};\n    return dsv(data, format ? extend(format, delim) : delim);\n  };\n\n  parse.responseType = 'text';\n\n  return parse;\n}\n\nexport default function dsv(data, format) {\n  if (format.header) {\n    data = format.header\n      .map(stringValue)\n      .join(format.delimiter) + '\\n' + data;\n  }\n  return dsvFormat(format.delimiter).parse(data + '');\n}\n\ndsv.responseType = 'text';\n","import {\n  field, identity, isArray, isFunction, isIterable, isObject\n} from 'vega-util';\n\nfunction isBuffer(_) {\n  return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n    ? Buffer.isBuffer(_) : false;\n}\n\nexport default function json(data, format) {\n  const prop = (format && format.property) ? field(format.property) : identity;\n  return isObject(data) && !isBuffer(data)\n    ? parseJSON(prop(data), format)\n    : prop(JSON.parse(data));\n}\n\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n  if (!isArray(data) && isIterable(data)) {\n    data = [...data];\n  }\n  return (format && format.copy)\n    ? JSON.parse(JSON.stringify(data))\n    : data;\n}\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nconst filters = {\n  interior: (a, b) => a !== b,\n  exterior: (a, b) => a === b\n};\n\nexport default function topojson(data, format) {\n  let method, object, property, filter;\n  data = json(data, format);\n\n  if (format && format.feature) {\n    method = feature;\n    property = format.feature;\n  } else if (format && format.mesh) {\n    method = mesh;\n    property = format.mesh;\n    filter = filters[format.filter];\n  } else {\n    error('Missing TopoJSON feature or mesh parameter.');\n  }\n\n  object = (object = data.objects[property])\n    ? method(data, object, filter)\n    : error('Invalid TopoJSON object: ' + property);\n\n  return object && object.features || [object];\n}\n\ntopojson.responseType = 'json';\n","import {delimitedFormat, default as dsv} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\nimport {hasOwnProperty} from 'vega-util';\n\nexport const format = {\n  dsv: dsv,\n  csv: delimitedFormat(','),\n  tsv: delimitedFormat('\\t'),\n  json: json,\n  topojson: topojson\n};\n\nexport function formats(name, reader) {\n  if (arguments.length > 1) {\n    format[name] = reader;\n    return this;\n  } else {\n    return hasOwnProperty(format, name) ? format[name] : null;\n  }\n}\n\nexport function responseType(type) {\n  const f = formats(type);\n  return f && f.responseType || 'text';\n}\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {timeFormatDefaultLocale} from 'vega-format';\nimport {error, hasOwnProperty} from 'vega-util';\n\nexport default function(data, schema, timeParser, utcParser) {\n  schema = schema || {};\n\n  const reader = formats(schema.type || 'json');\n  if (!reader) error('Unknown data format type: ' + schema.type);\n\n  data = reader(data, schema);\n  if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n\n  if (hasOwnProperty(data, 'columns')) delete data.columns;\n  return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n  if (!data.length) return; // early exit for empty data\n\n  const locale = timeFormatDefaultLocale();\n  timeParser = timeParser || locale.timeParse;\n  utcParser = utcParser || locale.utcParse;\n\n  let fields = data.columns || Object.keys(data[0]),\n      datum, field, i, j, n, m;\n\n  if (types === 'auto') types = inferTypes(data, fields);\n\n  fields = Object.keys(types);\n  const parsers = fields.map(field => {\n    const type = types[field];\n    let parts, pattern;\n\n    if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n      parts = type.split(/:(.+)?/, 2);  // split on first :\n      pattern = parts[1];\n\n      if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n          (pattern[0] === '\"'  && pattern[pattern.length-1] === '\"')) {\n        pattern = pattern.slice(1, -1);\n      }\n\n      const parse = parts[0] === 'utc' ? utcParser : timeParser;\n      return parse(pattern);\n    }\n\n    if (!typeParsers[type]) {\n      throw Error('Illegal format pattern: ' + field + ':' + type);\n    }\n\n    return typeParsers[type];\n  });\n\n  for (i=0, n=data.length, m=fields.length; i<n; ++i) {\n    datum = data[i];\n    for (j=0; j<m; ++j) {\n      field = fields[j];\n      datum[field] = parsers[j](datum[field]);\n    }\n  }\n}\n","import loaderFactory from './src/loader';\n\nexport const loader = loaderFactory(\n  typeof fetch !== 'undefined' && fetch, // use built-in fetch API\n  null // no file system access\n);\n\nexport {\n  default as read\n} from './src/read';\n\nexport {\n  inferType,\n  inferTypes,\n  typeParsers\n} from './src/type';\n\nexport {\n  format,\n  formats,\n  responseType\n} from './src/formats/index';\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n  gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n  return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n  const type = g.gradient;\n  let id = g.id,\n      prefix = type === 'radial' ? patternPrefix : ''; // check id, assign default values as needed\n\n  if (!id) {\n    id = g.id = 'gradient_' + gradient_id++;\n\n    if (type === 'radial') {\n      g.x1 = get(g.x1, 0.5);\n      g.y1 = get(g.y1, 0.5);\n      g.r1 = get(g.r1, 0);\n      g.x2 = get(g.x2, 0.5);\n      g.y2 = get(g.y2, 0.5);\n      g.r2 = get(g.r2, 0.5);\n      prefix = patternPrefix;\n    } else {\n      g.x1 = get(g.x1, 0);\n      g.y1 = get(g.y1, 0);\n      g.x2 = get(g.x2, 1);\n      g.y2 = get(g.y2, 0);\n    }\n  } // register definition\n\n\n  defs[id] = g; // return url reference\n\n  return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n  return val != null ? val : def;\n}\n\nfunction Gradient (p0, p1) {\n  var stops = [],\n      gradient;\n  return gradient = {\n    gradient: 'linear',\n    x1: p0 ? p0[0] : 0,\n    y1: p0 ? p0[1] : 0,\n    x2: p1 ? p1[0] : 1,\n    y2: p1 ? p1[1] : 0,\n    stops: stops,\n    stop: function (offset, color) {\n      stops.push({\n        offset: offset,\n        color: color\n      });\n      return gradient;\n    }\n  };\n}\n\nconst lookup = {\n  'basis': {\n    curve: curveBasis\n  },\n  'basis-closed': {\n    curve: curveBasisClosed\n  },\n  'basis-open': {\n    curve: curveBasisOpen\n  },\n  'bundle': {\n    curve: curveBundle,\n    tension: 'beta',\n    value: 0.85\n  },\n  'cardinal': {\n    curve: curveCardinal,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-open': {\n    curve: curveCardinalOpen,\n    tension: 'tension',\n    value: 0\n  },\n  'cardinal-closed': {\n    curve: curveCardinalClosed,\n    tension: 'tension',\n    value: 0\n  },\n  'catmull-rom': {\n    curve: curveCatmullRom,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-closed': {\n    curve: curveCatmullRomClosed,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'catmull-rom-open': {\n    curve: curveCatmullRomOpen,\n    tension: 'alpha',\n    value: 0.5\n  },\n  'linear': {\n    curve: curveLinear\n  },\n  'linear-closed': {\n    curve: curveLinearClosed\n  },\n  'monotone': {\n    horizontal: curveMonotoneY,\n    vertical: curveMonotoneX\n  },\n  'natural': {\n    curve: curveNatural\n  },\n  'step': {\n    curve: curveStep\n  },\n  'step-after': {\n    curve: curveStepAfter\n  },\n  'step-before': {\n    curve: curveStepBefore\n  }\n};\nfunction curves(type, orientation, tension) {\n  var entry = hasOwnProperty(lookup, type) && lookup[type],\n      curve = null;\n\n  if (entry) {\n    curve = entry.curve || entry[orientation || 'vertical'];\n\n    if (entry.tension && tension != null) {\n      curve = curve[entry.tension](tension);\n    }\n  }\n\n  return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nconst cmdlen = {\n  m: 2,\n  l: 2,\n  h: 1,\n  v: 1,\n  c: 6,\n  s: 4,\n  q: 4,\n  t: 2,\n  a: 7\n},\n      regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\.\\d+)(\\.\\d)/g, /(\\d)([-+])/g, /\\s|,|###/];\nfunction pathParse (pathstr) {\n  const result = [];\n  let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence\n\n  const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn\n\n  for (i = 0, n = path.length; i < n; ++i) {\n    curr = path[i];\n    chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);\n    cmd = curr.charAt(0);\n    parsed = [cmd];\n\n    for (j = 0, m = chunks.length; j < m; ++j) {\n      if ((param = +chunks[j]) === param) {\n        // not NaN\n        parsed.push(param);\n      }\n    }\n\n    len = cmdlen[cmd.toLowerCase()];\n\n    if (parsed.length - 1 > len) {\n      const m = parsed.length;\n      j = 1;\n      result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)\n\n      cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;\n\n      for (; j < m; j += len) {\n        result.push([cmd].concat(parsed.slice(j, j + len)));\n      }\n    } else {\n      result.push(parsed);\n    }\n  }\n\n  return result;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join; // Copied from Inkscape svgtopdf, thanks!\n\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n  const key = join.call(arguments);\n\n  if (segmentCache[key]) {\n    return segmentCache[key];\n  }\n\n  const th = rotateX * DegToRad;\n  const sin_th = Math.sin(th);\n  const cos_th = Math.cos(th);\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n  const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n  const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n  let pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n  if (pl > 1) {\n    pl = Math.sqrt(pl);\n    rx *= pl;\n    ry *= pl;\n  }\n\n  const a00 = cos_th / rx;\n  const a01 = sin_th / rx;\n  const a10 = -sin_th / ry;\n  const a11 = cos_th / ry;\n  const x0 = a00 * ox + a01 * oy;\n  const y0 = a10 * ox + a11 * oy;\n  const x1 = a00 * x + a01 * y;\n  const y1 = a10 * x + a11 * y;\n  const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n  let sfactor_sq = 1 / d - 0.25;\n  if (sfactor_sq < 0) sfactor_sq = 0;\n  let sfactor = Math.sqrt(sfactor_sq);\n  if (sweep == large) sfactor = -sfactor;\n  const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n  const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n  const th0 = Math.atan2(y0 - yc, x0 - xc);\n  const th1 = Math.atan2(y1 - yc, x1 - xc);\n  let th_arc = th1 - th0;\n\n  if (th_arc < 0 && sweep === 1) {\n    th_arc += Tau;\n  } else if (th_arc > 0 && sweep === 0) {\n    th_arc -= Tau;\n  }\n\n  const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n  const result = [];\n\n  for (let i = 0; i < segs; ++i) {\n    const th2 = th0 + i * th_arc / segs;\n    const th3 = th0 + (i + 1) * th_arc / segs;\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n  }\n\n  return segmentCache[key] = result;\n}\nfunction bezier(params) {\n  const key = join.call(params);\n\n  if (bezierCache[key]) {\n    return bezierCache[key];\n  }\n\n  var cx = params[0],\n      cy = params[1],\n      th0 = params[2],\n      th1 = params[3],\n      rx = params[4],\n      ry = params[5],\n      sin_th = params[6],\n      cos_th = params[7];\n  const a00 = cos_th * rx;\n  const a01 = -sin_th * ry;\n  const a10 = sin_th * rx;\n  const a11 = cos_th * ry;\n  const cos_th0 = Math.cos(th0);\n  const sin_th0 = Math.sin(th0);\n  const cos_th1 = Math.cos(th1);\n  const sin_th1 = Math.sin(th1);\n  const th_half = 0.5 * (th1 - th0);\n  const sin_th_h2 = Math.sin(th_half * 0.5);\n  const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n  const x1 = cx + cos_th0 - t * sin_th0;\n  const y1 = cy + sin_th0 + t * cos_th0;\n  const x3 = cx + cos_th1;\n  const y3 = cy + sin_th1;\n  const x2 = x3 + t * sin_th1;\n  const y2 = y3 - t * cos_th1;\n  return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current, sX, sY) {\n  const c = temp[0] = current[0];\n\n  if (c === 'a' || c === 'A') {\n    temp[1] = sX * current[1];\n    temp[2] = sY * current[2];\n    temp[3] = current[3];\n    temp[4] = current[4];\n    temp[5] = current[5];\n    temp[6] = sX * current[6];\n    temp[7] = sY * current[7];\n  } else if (c === 'h' || c === 'H') {\n    temp[1] = sX * current[1];\n  } else if (c === 'v' || c === 'V') {\n    temp[1] = sY * current[1];\n  } else {\n    for (var i = 1, n = current.length; i < n; ++i) {\n      temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n    }\n  }\n\n  return temp;\n}\n\nfunction pathRender (context, path, l, t, sX, sY) {\n  var current,\n      // current instruction\n  previous = null,\n      x = 0,\n      // current x\n  y = 0,\n      // current y\n  controlX = 0,\n      // current control point x\n  controlY = 0,\n      // current control point y\n  tempX,\n      tempY,\n      tempControlX,\n      tempControlY;\n  if (l == null) l = 0;\n  if (t == null) t = 0;\n  if (sX == null) sX = 1;\n  if (sY == null) sY = sX;\n  if (context.beginPath) context.beginPath();\n\n  for (var i = 0, len = path.length; i < len; ++i) {\n    current = path[i];\n\n    if (sX !== 1 || sY !== 1) {\n      current = scale(current, sX, sY);\n    }\n\n    switch (current[0]) {\n      // first letter\n      case 'l':\n        // lineto, relative\n        x += current[1];\n        y += current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'L':\n        // lineto, absolute\n        x = current[1];\n        y = current[2];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'h':\n        // horizontal lineto, relative\n        x += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'H':\n        // horizontal lineto, absolute\n        x = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'v':\n        // vertical lineto, relative\n        y += current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'V':\n        // verical lineto, absolute\n        y = current[1];\n        context.lineTo(x + l, y + t);\n        break;\n\n      case 'm':\n        // moveTo, relative\n        x += current[1];\n        y += current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'M':\n        // moveTo, absolute\n        x = current[1];\n        y = current[2];\n        context.moveTo(x + l, y + t);\n        break;\n\n      case 'c':\n        // bezierCurveTo, relative\n        tempX = x + current[5];\n        tempY = y + current[6];\n        controlX = x + current[3];\n        controlY = y + current[4];\n        context.bezierCurveTo(x + current[1] + l, // x1\n        y + current[2] + t, // y1\n        controlX + l, // x2\n        controlY + t, // y2\n        tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'C':\n        // bezierCurveTo, absolute\n        x = current[5];\n        y = current[6];\n        controlX = current[3];\n        controlY = current[4];\n        context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n        break;\n\n      case 's':\n        // shorthand cubic bezierCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n\n        controlX = x + current[1];\n        controlY = y + current[2];\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'S':\n        // shorthand cubic bezierCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY; // set control point to 2nd one of this command\n        // the first control point is assumed to be the reflection of\n        // the second control point on the previous command relative\n        // to the current point.\n\n        controlX = current[1];\n        controlY = current[2];\n        break;\n\n      case 'q':\n        // quadraticCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[3];\n        tempY = y + current[4];\n        controlX = x + current[1];\n        controlY = y + current[2];\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'Q':\n        // quadraticCurveTo, absolute\n        tempX = current[3];\n        tempY = current[4];\n        context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        controlX = current[1];\n        controlY = current[2];\n        break;\n\n      case 't':\n        // shorthand quadraticCurveTo, relative\n        // transform to absolute x,y\n        tempX = x + current[1];\n        tempY = y + current[2];\n\n        if (previous[0].match(/[QqTt]/) === null) {\n          // If there is no previous command or if the previous command was not a Q, q, T or t,\n          // assume the control point is coincident with the current point\n          controlX = x;\n          controlY = y;\n        } else if (previous[0] === 't') {\n          // calculate reflection of previous control points for t\n          controlX = 2 * x - tempControlX;\n          controlY = 2 * y - tempControlY;\n        } else if (previous[0] === 'q') {\n          // calculate reflection of previous control points for q\n          controlX = 2 * x - controlX;\n          controlY = 2 * y - controlY;\n        }\n\n        tempControlX = controlX;\n        tempControlY = controlY;\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        controlX = x + current[1];\n        controlY = y + current[2];\n        break;\n\n      case 'T':\n        tempX = current[1];\n        tempY = current[2]; // calculate reflection of previous control points\n\n        controlX = 2 * x - controlX;\n        controlY = 2 * y - controlY;\n        context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n        x = tempX;\n        y = tempY;\n        break;\n\n      case 'a':\n        drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n        x += current[6];\n        y += current[7];\n        break;\n\n      case 'A':\n        drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n        x = current[6];\n        y = current[7];\n        break;\n\n      case 'z':\n      case 'Z':\n        context.closePath();\n        break;\n    }\n\n    previous = current;\n  }\n}\n\nfunction drawArc(context, x, y, coords) {\n  const seg = segments(coords[5], // end x\n  coords[6], // end y\n  coords[0], // radius x\n  coords[1], // radius y\n  coords[3], // large flag\n  coords[4], // sweep flag\n  coords[2], // rotation\n  x, y);\n\n  for (let i = 0; i < seg.length; ++i) {\n    const bez = bezier(seg[i]);\n    context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n  }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n  'circle': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(r, 0);\n      context.arc(0, 0, r, 0, Tau);\n    }\n  },\n  'cross': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 2.5;\n      context.moveTo(-r, -s);\n      context.lineTo(-r, s);\n      context.lineTo(-s, s);\n      context.lineTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, s);\n      context.lineTo(r, s);\n      context.lineTo(r, -s);\n      context.lineTo(s, -s);\n      context.lineTo(s, -r);\n      context.lineTo(-s, -r);\n      context.lineTo(-s, -s);\n      context.closePath();\n    }\n  },\n  'diamond': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(0, -r);\n      context.lineTo(r, 0);\n      context.lineTo(0, r);\n      context.closePath();\n    }\n  },\n  'square': {\n    draw: function (context, size) {\n      var w = Math.sqrt(size),\n          x = -w / 2;\n      context.rect(x, x, w, w);\n    }\n  },\n  'arrow': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          s = r / 7,\n          t = r / 2.5,\n          v = r / 8;\n      context.moveTo(-s, r);\n      context.lineTo(s, r);\n      context.lineTo(s, -v);\n      context.lineTo(t, -v);\n      context.lineTo(0, -r);\n      context.lineTo(-t, -v);\n      context.lineTo(-s, -v);\n      context.closePath();\n    }\n  },\n  'wedge': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = h - r * Tan30,\n          b = r / 4;\n      context.moveTo(0, -h - o);\n      context.lineTo(-b, h - o);\n      context.lineTo(b, h - o);\n      context.closePath();\n    }\n  },\n  'triangle': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r,\n          o = h - r * Tan30;\n      context.moveTo(0, -h - o);\n      context.lineTo(-r, h - o);\n      context.lineTo(r, h - o);\n      context.closePath();\n    }\n  },\n  'triangle-up': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, -h);\n      context.lineTo(-r, h);\n      context.lineTo(r, h);\n      context.closePath();\n    }\n  },\n  'triangle-down': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(0, h);\n      context.lineTo(-r, -h);\n      context.lineTo(r, -h);\n      context.closePath();\n    }\n  },\n  'triangle-right': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(h, 0);\n      context.lineTo(-h, -r);\n      context.lineTo(-h, r);\n      context.closePath();\n    }\n  },\n  'triangle-left': {\n    draw: function (context, size) {\n      var r = Math.sqrt(size) / 2,\n          h = HalfSqrt3 * r;\n      context.moveTo(-h, 0);\n      context.lineTo(h, -r);\n      context.lineTo(h, r);\n      context.closePath();\n    }\n  },\n  'stroke': {\n    draw: function (context, size) {\n      const r = Math.sqrt(size) / 2;\n      context.moveTo(-r, 0);\n      context.lineTo(r, 0);\n    }\n  }\n};\nfunction symbols(_) {\n  return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\n\nfunction customSymbol(path) {\n  if (!hasOwnProperty(custom, path)) {\n    const parsed = pathParse(path);\n    custom[path] = {\n      draw: function (context, size) {\n        pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n      }\n    };\n  }\n\n  return custom[path];\n}\n\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n  return d.x;\n}\n\nfunction rectangleY(d) {\n  return d.y;\n}\n\nfunction rectangleWidth(d) {\n  return d.width;\n}\n\nfunction rectangleHeight(d) {\n  return d.height;\n}\n\nfunction number(_) {\n  return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n  return Math.max(min, Math.min(value, max));\n}\n\nfunction vg_rect () {\n  var x = rectangleX,\n      y = rectangleY,\n      width = rectangleWidth,\n      height = rectangleHeight,\n      crTL = number(0),\n      crTR = crTL,\n      crBL = crTL,\n      crBR = crTL,\n      context = null;\n\n  function rectangle(_, x0, y0) {\n    var buffer,\n        x1 = x0 != null ? x0 : +x.call(this, _),\n        y1 = y0 != null ? y0 : +y.call(this, _),\n        w = +width.call(this, _),\n        h = +height.call(this, _),\n        s = Math.min(w, h) / 2,\n        tl = clamp(+crTL.call(this, _), 0, s),\n        tr = clamp(+crTR.call(this, _), 0, s),\n        bl = clamp(+crBL.call(this, _), 0, s),\n        br = clamp(+crBR.call(this, _), 0, s);\n    if (!context) context = buffer = path$3();\n\n    if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n      context.rect(x1, y1, w, h);\n    } else {\n      var x2 = x1 + w,\n          y2 = y1 + h;\n      context.moveTo(x1 + tl, y1);\n      context.lineTo(x2 - tr, y1);\n      context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n      context.lineTo(x2, y2 - br);\n      context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n      context.lineTo(x1 + bl, y2);\n      context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n      context.lineTo(x1, y1 + tl);\n      context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n      context.closePath();\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  rectangle.x = function (_) {\n    if (arguments.length) {\n      x = number(_);\n      return rectangle;\n    } else {\n      return x;\n    }\n  };\n\n  rectangle.y = function (_) {\n    if (arguments.length) {\n      y = number(_);\n      return rectangle;\n    } else {\n      return y;\n    }\n  };\n\n  rectangle.width = function (_) {\n    if (arguments.length) {\n      width = number(_);\n      return rectangle;\n    } else {\n      return width;\n    }\n  };\n\n  rectangle.height = function (_) {\n    if (arguments.length) {\n      height = number(_);\n      return rectangle;\n    } else {\n      return height;\n    }\n  };\n\n  rectangle.cornerRadius = function (tl, tr, br, bl) {\n    if (arguments.length) {\n      crTL = number(tl);\n      crTR = tr != null ? number(tr) : crTL;\n      crBR = br != null ? number(br) : crTL;\n      crBL = bl != null ? number(bl) : crTR;\n      return rectangle;\n    } else {\n      return crTL;\n    }\n  };\n\n  rectangle.context = function (_) {\n    if (arguments.length) {\n      context = _ == null ? null : _;\n      return rectangle;\n    } else {\n      return context;\n    }\n  };\n\n  return rectangle;\n}\n\nfunction vg_trail () {\n  var x,\n      y,\n      size,\n      defined,\n      context = null,\n      ready,\n      x1,\n      y1,\n      r1;\n\n  function point(x2, y2, w2) {\n    const r2 = w2 / 2;\n\n    if (ready) {\n      var ux = y1 - y2,\n          uy = x2 - x1;\n\n      if (ux || uy) {\n        // get normal vector\n        var ud = Math.sqrt(ux * ux + uy * uy),\n            rx = (ux /= ud) * r1,\n            ry = (uy /= ud) * r1,\n            t = Math.atan2(uy, ux); // draw segment\n\n        context.moveTo(x1 - rx, y1 - ry);\n        context.lineTo(x2 - ux * r2, y2 - uy * r2);\n        context.arc(x2, y2, r2, t - Math.PI, t);\n        context.lineTo(x1 + rx, y1 + ry);\n        context.arc(x1, y1, r1, t, t + Math.PI);\n      } else {\n        context.arc(x2, y2, r2, 0, Tau);\n      }\n\n      context.closePath();\n    } else {\n      ready = 1;\n    }\n\n    x1 = x2;\n    y1 = y2;\n    r1 = r2;\n  }\n\n  function trail(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n    if (context == null) context = buffer = path$3();\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) ready = 0;\n      }\n\n      if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n    }\n\n    if (buffer) {\n      context = null;\n      return buffer + '' || null;\n    }\n  }\n\n  trail.x = function (_) {\n    if (arguments.length) {\n      x = _;\n      return trail;\n    } else {\n      return x;\n    }\n  };\n\n  trail.y = function (_) {\n    if (arguments.length) {\n      y = _;\n      return trail;\n    } else {\n      return y;\n    }\n  };\n\n  trail.size = function (_) {\n    if (arguments.length) {\n      size = _;\n      return trail;\n    } else {\n      return size;\n    }\n  };\n\n  trail.defined = function (_) {\n    if (arguments.length) {\n      defined = _;\n      return trail;\n    } else {\n      return defined;\n    }\n  };\n\n  trail.context = function (_) {\n    if (arguments.length) {\n      if (_ == null) {\n        context = null;\n      } else {\n        context = _;\n      }\n\n      return trail;\n    } else {\n      return context;\n    }\n  };\n\n  return trail;\n}\n\nfunction value(a, b) {\n  return a != null ? a : b;\n}\n\nconst x = item => item.x || 0,\n      y = item => item.y || 0,\n      w = item => item.width || 0,\n      h = item => item.height || 0,\n      xw = item => (item.x || 0) + (item.width || 0),\n      yh = item => (item.y || 0) + (item.height || 0),\n      sa = item => item.startAngle || 0,\n      ea = item => item.endAngle || 0,\n      pa = item => item.padAngle || 0,\n      ir = item => item.innerRadius || 0,\n      or = item => item.outerRadius || 0,\n      cr = item => item.cornerRadius || 0,\n      tl = item => value(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n      tr = item => value(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n      br = item => value(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n      bl = item => value(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n      sz = item => value(item.size, 64),\n      ts = item => item.size || 1,\n      def = item => !(item.defined === false),\n      type = item => symbols(item.shape || 'circle');\n\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n      areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n      areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n      lineShape = line$2().x(x).y(y).defined(def),\n      rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n      symbolShape = symbol$2().type(type).size(sz),\n      trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n  return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc(context, item) {\n  return arcShape.context(context)(item);\n}\nfunction area(context, items) {\n  const item = items[0],\n        interp = item.interpolate || 'linear';\n  return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line(context, items) {\n  const item = items[0],\n        interp = item.interpolate || 'linear';\n  return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n  return rectShape.context(context)(item, x, y);\n}\nfunction shape(context, item) {\n  return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol(context, item) {\n  return symbolShape.context(context)(item);\n}\nfunction trail(context, items) {\n  return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n  clip_id = 1;\n}\nfunction clip (renderer, item, size) {\n  var clip = item.clip,\n      defs = renderer._defs,\n      id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n      c = defs.clipping[id] || (defs.clipping[id] = {\n    id: id\n  });\n\n  if (isFunction(clip)) {\n    c.path = clip(null);\n  } else if (hasCornerRadius(size)) {\n    c.path = rectangle(null, size, 0, 0);\n  } else {\n    c.width = size.width || 0;\n    c.height = size.height || 0;\n  }\n\n  return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n  this.clear();\n  if (b) this.union(b);\n}\nBounds.prototype = {\n  clone() {\n    return new Bounds(this);\n  },\n\n  clear() {\n    this.x1 = +Number.MAX_VALUE;\n    this.y1 = +Number.MAX_VALUE;\n    this.x2 = -Number.MAX_VALUE;\n    this.y2 = -Number.MAX_VALUE;\n    return this;\n  },\n\n  empty() {\n    return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n  },\n\n  equals(b) {\n    return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n  },\n\n  set(x1, y1, x2, y2) {\n    if (x2 < x1) {\n      this.x2 = x1;\n      this.x1 = x2;\n    } else {\n      this.x1 = x1;\n      this.x2 = x2;\n    }\n\n    if (y2 < y1) {\n      this.y2 = y1;\n      this.y1 = y2;\n    } else {\n      this.y1 = y1;\n      this.y2 = y2;\n    }\n\n    return this;\n  },\n\n  add(x, y) {\n    if (x < this.x1) this.x1 = x;\n    if (y < this.y1) this.y1 = y;\n    if (x > this.x2) this.x2 = x;\n    if (y > this.y2) this.y2 = y;\n    return this;\n  },\n\n  expand(d) {\n    this.x1 -= d;\n    this.y1 -= d;\n    this.x2 += d;\n    this.y2 += d;\n    return this;\n  },\n\n  round() {\n    this.x1 = Math.floor(this.x1);\n    this.y1 = Math.floor(this.y1);\n    this.x2 = Math.ceil(this.x2);\n    this.y2 = Math.ceil(this.y2);\n    return this;\n  },\n\n  scale(s) {\n    this.x1 *= s;\n    this.y1 *= s;\n    this.x2 *= s;\n    this.y2 *= s;\n    return this;\n  },\n\n  translate(dx, dy) {\n    this.x1 += dx;\n    this.x2 += dx;\n    this.y1 += dy;\n    this.y2 += dy;\n    return this;\n  },\n\n  rotate(angle, x, y) {\n    const p = this.rotatedPoints(angle, x, y);\n    return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n  },\n\n  rotatedPoints(angle, x, y) {\n    var {\n      x1,\n      y1,\n      x2,\n      y2\n    } = this,\n        cos = Math.cos(angle),\n        sin = Math.sin(angle),\n        cx = x - x * cos + y * sin,\n        cy = y - x * sin - y * cos;\n    return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n  },\n\n  union(b) {\n    if (b.x1 < this.x1) this.x1 = b.x1;\n    if (b.y1 < this.y1) this.y1 = b.y1;\n    if (b.x2 > this.x2) this.x2 = b.x2;\n    if (b.y2 > this.y2) this.y2 = b.y2;\n    return this;\n  },\n\n  intersect(b) {\n    if (b.x1 > this.x1) this.x1 = b.x1;\n    if (b.y1 > this.y1) this.y1 = b.y1;\n    if (b.x2 < this.x2) this.x2 = b.x2;\n    if (b.y2 < this.y2) this.y2 = b.y2;\n    return this;\n  },\n\n  encloses(b) {\n    return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n  },\n\n  alignsWith(b) {\n    return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n  },\n\n  intersects(b) {\n    return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n  },\n\n  contains(x, y) {\n    return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n  },\n\n  width() {\n    return this.x2 - this.x1;\n  },\n\n  height() {\n    return this.y2 - this.y1;\n  }\n\n};\n\nfunction Item(mark) {\n  this.mark = mark;\n  this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n  Item.call(this, mark);\n  this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n  this._pending = 0;\n  this._loader = customLoader || loader();\n}\n\nfunction increment(loader) {\n  loader._pending += 1;\n}\n\nfunction decrement(loader) {\n  loader._pending -= 1;\n}\n\nResourceLoader.prototype = {\n  pending() {\n    return this._pending;\n  },\n\n  sanitizeURL(uri) {\n    const loader = this;\n    increment(loader);\n    return loader._loader.sanitize(uri, {\n      context: 'href'\n    }).then(opt => {\n      decrement(loader);\n      return opt;\n    }).catch(() => {\n      decrement(loader);\n      return null;\n    });\n  },\n\n  loadImage(uri) {\n    const loader = this,\n          Image = image$1();\n    increment(loader);\n    return loader._loader.sanitize(uri, {\n      context: 'image'\n    }).then(opt => {\n      const url = opt.href;\n      if (!url || !Image) throw {\n        url: url\n      };\n      const img = new Image(); // set crossOrigin only if cors is defined; empty string sets anonymous mode\n      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n\n      const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n      if (cors != null) img.crossOrigin = cors; // attempt to load image resource\n\n      img.onload = () => decrement(loader);\n\n      img.onerror = () => decrement(loader);\n\n      img.src = url;\n      return img;\n    }).catch(e => {\n      decrement(loader);\n      return {\n        complete: false,\n        width: 0,\n        height: 0,\n        src: e && e.url || ''\n      };\n    });\n  },\n\n  ready() {\n    const loader = this;\n    return new Promise(accept => {\n      function poll(value) {\n        if (!loader.pending()) accept(value);else setTimeout(() => {\n          poll(true);\n        }, 10);\n      }\n\n      poll(false);\n    });\n  }\n\n};\n\nfunction boundStroke (bounds, item, miter) {\n  if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n    const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n    bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n  }\n\n  return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n  // TODO: more sophisticated adjustment? Or miter support in boundContext?\n  return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\n\nconst add = (x, y) => bounds.add(x, y);\n\nconst addL = (x, y) => add(lx = x, ly = y);\n\nconst addX = x => add(x, bounds.y1);\n\nconst addY = y => add(bounds.x1, y);\n\nconst px = (x, y) => ma * x + mc * y;\n\nconst py = (x, y) => mb * x + md * y;\n\nconst addp = (x, y) => add(px(x, y), py(x, y));\n\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\n\nfunction boundContext (_, deg) {\n  bounds = _;\n\n  if (deg) {\n    rot = deg * DegToRad;\n    ma = md = Math.cos(rot);\n    mb = Math.sin(rot);\n    mc = -mb;\n  } else {\n    ma = md = 1;\n    rot = mb = mc = 0;\n  }\n\n  return context;\n}\nconst context = {\n  beginPath() {},\n\n  closePath() {},\n\n  moveTo: addpL,\n  lineTo: addpL,\n\n  rect(x, y, w, h) {\n    if (rot) {\n      addp(x + w, y);\n      addp(x + w, y + h);\n      addp(x, y + h);\n      addpL(x, y);\n    } else {\n      add(x + w, y + h);\n      addL(x, y);\n    }\n  },\n\n  quadraticCurveTo(x1, y1, x2, y2) {\n    const px1 = px(x1, y1),\n          py1 = py(x1, y1),\n          px2 = px(x2, y2),\n          py2 = py(x2, y2);\n    quadExtrema(lx, px1, px2, addX);\n    quadExtrema(ly, py1, py2, addY);\n    addL(px2, py2);\n  },\n\n  bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n    const px1 = px(x1, y1),\n          py1 = py(x1, y1),\n          px2 = px(x2, y2),\n          py2 = py(x2, y2),\n          px3 = px(x3, y3),\n          py3 = py(x3, y3);\n    cubicExtrema(lx, px1, px2, px3, addX);\n    cubicExtrema(ly, py1, py2, py3, addY);\n    addL(px3, py3);\n  },\n\n  arc(cx, cy, r, sa, ea, ccw) {\n    sa += rot;\n    ea += rot; // store last point on path\n\n    lx = r * Math.cos(ea) + cx;\n    ly = r * Math.sin(ea) + cy;\n\n    if (Math.abs(ea - sa) > circleThreshold) {\n      // treat as full circle\n      add(cx - r, cy - r);\n      add(cx + r, cy + r);\n    } else {\n      const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n\n      let s, i; // sample end points\n\n      update(sa);\n      update(ea); // sample interior points aligned with 90 degrees\n\n      if (ea !== sa) {\n        sa = sa % Tau;\n        if (sa < 0) sa += Tau;\n        ea = ea % Tau;\n        if (ea < 0) ea += Tau;\n\n        if (ea < sa) {\n          ccw = !ccw; // flip direction\n\n          s = sa;\n          sa = ea;\n          ea = s; // swap end-points\n        }\n\n        if (ccw) {\n          ea -= Tau;\n          s = sa - sa % HalfPi;\n\n          for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n        } else {\n          s = sa - sa % HalfPi + HalfPi;\n\n          for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n        }\n      }\n    }\n  }\n\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n  const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n  if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n  const a = x3 - x0 + 3 * x1 - 3 * x2,\n        b = x0 + x2 - 2 * x1,\n        c = x0 - x1;\n  let t0 = 0,\n      t1 = 0,\n      r; // solve for parameter t\n\n  if (Math.abs(a) > Epsilon) {\n    // quadratic equation\n    r = b * b + c * a;\n\n    if (r >= 0) {\n      r = Math.sqrt(r);\n      t0 = (-b + r) / a;\n      t1 = (-b - r) / a;\n    }\n  } else {\n    // linear equation\n    t0 = 0.5 * c / b;\n  } // calculate position\n\n\n  if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n  if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n  const s = 1 - t,\n        s2 = s * s,\n        t2 = t * t;\n  return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context$1 = (context$1 = canvas(1, 1)) ? context$1.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n  return function (item, brush) {\n    // rely on (inaccurate) bounds intersection if no context\n    if (!context$1) return true; // add path to offscreen graphics context\n\n    draw(context$1, item); // get bounds intersection region\n\n    b.clear().union(item.bounds).intersect(brush).round();\n    const {\n      x1,\n      y1,\n      x2,\n      y2\n    } = b; // iterate over intersection region\n    // perform fine grained inclusion test\n\n    for (let y = y1; y <= y2; ++y) {\n      for (let x = x1; x <= x2; ++x) {\n        if (context$1.isPointInPath(x, y)) {\n          return true;\n        }\n      }\n    } // false if no hits in intersection region\n\n\n    return false;\n  };\n}\nfunction intersectPoint(item, box) {\n  return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        w = item.width || 0,\n        h = item.height || 0;\n  return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n  const x = item.x || 0,\n        y = item.y || 0,\n        x2 = item.x2 != null ? item.x2 : x,\n        y2 = item.y2 != null ? item.y2 : y;\n  return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n  const {\n    x1,\n    y1,\n    x2,\n    y2\n  } = box,\n        dx = u - x,\n        dy = v - y;\n  let t0 = 0,\n      t1 = 1,\n      p,\n      q,\n      r,\n      e;\n\n  for (e = 0; e < 4; ++e) {\n    if (e === 0) {\n      p = -dx;\n      q = -(x1 - x);\n    }\n\n    if (e === 1) {\n      p = dx;\n      q = x2 - x;\n    }\n\n    if (e === 2) {\n      p = -dy;\n      q = -(y1 - y);\n    }\n\n    if (e === 3) {\n      p = dy;\n      q = y2 - y;\n    }\n\n    if (Math.abs(p) < 1e-10 && q < 0) return false;\n    r = q / p;\n\n    if (p < 0) {\n      if (r > t1) return false;else if (r > t0) t0 = r;\n    } else if (p > 0) {\n      if (r < t0) return false;else if (r < t1) t1 = r;\n    }\n  }\n\n  return true;\n}\n\nfunction blend (context, item) {\n  context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value$1 (value, dflt) {\n  return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n  const n = stops.length;\n\n  for (let i = 0; i < n; ++i) {\n    gradient.addColorStop(stops[i].offset, stops[i].color);\n  }\n\n  return gradient;\n}\n\nfunction gradient (context, spec, bounds) {\n  const w = bounds.width(),\n        h = bounds.height();\n  let gradient;\n\n  if (spec.gradient === 'radial') {\n    gradient = context.createRadialGradient(bounds.x1 + value$1(spec.x1, 0.5) * w, bounds.y1 + value$1(spec.y1, 0.5) * h, Math.max(w, h) * value$1(spec.r1, 0), bounds.x1 + value$1(spec.x2, 0.5) * w, bounds.y1 + value$1(spec.y2, 0.5) * h, Math.max(w, h) * value$1(spec.r2, 0.5));\n  } else {\n    // linear gradient\n    const x1 = value$1(spec.x1, 0),\n          y1 = value$1(spec.y1, 0),\n          x2 = value$1(spec.x2, 1),\n          y2 = value$1(spec.y2, 0);\n\n    if (x1 === x2 || y1 === y2 || w === h) {\n      // axis aligned: use normal gradient\n      gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n    } else {\n      // not axis aligned: render gradient into a pattern (#2365)\n      // this allows us to use normalized bounding box coordinates\n      const image = canvas(Math.ceil(w), Math.ceil(h)),\n            ictx = image.getContext('2d');\n      ictx.scale(w, h);\n      ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n      ictx.fillRect(0, 0, w, h);\n      return context.createPattern(image, 'no-repeat');\n    }\n  }\n\n  return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n  return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n  opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.fillStyle = color(context, item, item.fill);\n    return true;\n  } else {\n    return false;\n  }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n  var lw = (lw = item.strokeWidth) != null ? lw : 1;\n  if (lw <= 0) return false;\n  opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n\n  if (opacity > 0) {\n    context.globalAlpha = opacity;\n    context.strokeStyle = color(context, item, item.stroke);\n    context.lineWidth = lw;\n    context.lineCap = item.strokeCap || 'butt';\n    context.lineJoin = item.strokeJoin || 'miter';\n    context.miterLimit = item.strokeMiterLimit || 10;\n\n    if (context.setLineDash) {\n      context.setLineDash(item.strokeDash || Empty);\n      context.lineDashOffset = item.strokeDashOffset || 0;\n    }\n\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction compare(a, b) {\n  return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n  if (!scene.zdirty) return scene.zitems;\n  var items = scene.items,\n      output = [],\n      item,\n      i,\n      n;\n\n  for (i = 0, n = items.length; i < n; ++i) {\n    item = items[i];\n    item.index = i;\n    if (item.zindex) output.push(item);\n  }\n\n  scene.zdirty = false;\n  return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n  var items = scene.items,\n      i,\n      n;\n  if (!items || !items.length) return;\n  const zitems = zorder(scene);\n\n  if (zitems && zitems.length) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      if (!items[i].zindex) visitor(items[i]);\n    }\n\n    items = zitems;\n  }\n\n  for (i = 0, n = items.length; i < n; ++i) {\n    visitor(items[i]);\n  }\n}\nfunction pickVisit(scene, visitor) {\n  var items = scene.items,\n      hit,\n      i;\n  if (!items || !items.length) return null;\n  const zitems = zorder(scene);\n  if (zitems && zitems.length) items = zitems;\n\n  for (i = items.length; --i >= 0;) {\n    if (hit = visitor(items[i])) return hit;\n  }\n\n  if (items === zitems) {\n    for (items = scene.items, i = items.length; --i >= 0;) {\n      if (!items[i].zindex) {\n        if (hit = visitor(items[i])) return hit;\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction drawAll(path) {\n  return function (context, scene, bounds) {\n    visit(scene, item => {\n      if (!bounds || bounds.intersects(item.bounds)) {\n        drawPath(path, context, item, item);\n      }\n    });\n  };\n}\nfunction drawOne(path) {\n  return function (context, scene, bounds) {\n    if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n      drawPath(path, context, scene.items[0], scene.items);\n    }\n  };\n}\n\nfunction drawPath(path, context, item, items) {\n  var opacity = item.opacity == null ? 1 : item.opacity;\n  if (opacity === 0) return;\n  if (path(context, items)) return;\n  blend(context, item);\n\n  if (item.fill && fill(context, item, opacity)) {\n    context.fill();\n  }\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    context.stroke();\n  }\n}\n\nfunction pick(test) {\n  test = test || truthy;\n  return function (context, scene, x, y, gx, gy) {\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n    return pickVisit(scene, item => {\n      const b = item.bounds; // first hit test against bounding box\n\n      if (b && !b.contains(gx, gy) || !b) return; // if in bounding box, perform more careful test\n\n      if (test(context, item, x, y, gx, gy)) return item;\n    });\n  };\n}\nfunction hitPath(path, filled) {\n  return function (context, o, x, y) {\n    var item = Array.isArray(o) ? o[0] : o,\n        fill = filled == null ? item.fill : filled,\n        stroke = item.stroke && context.isPointInStroke,\n        lw,\n        lc;\n\n    if (stroke) {\n      lw = item.strokeWidth;\n      lc = item.strokeCap;\n      context.lineWidth = lw != null ? lw : 1;\n      context.lineCap = lc != null ? lc : 'butt';\n    }\n\n    return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n  };\n}\nfunction pickPath(path) {\n  return pick(hitPath(path));\n}\n\nfunction translate(x, y) {\n  return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n  return 'rotate(' + a + ')';\n}\nfunction scale$1(scaleX, scaleY) {\n  return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n  return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n  return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n  return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale$1(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n  function attr(emit, item) {\n    emit('transform', rotateItem(item));\n    emit('d', shape(null, item));\n  }\n\n  function bound(bounds, item) {\n    shape(boundContext(bounds, item.angle), item);\n    return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n  }\n\n  function draw(context, item) {\n    var x = item.x || 0,\n        y = item.y || 0,\n        a = item.angle || 0;\n    context.translate(x, y);\n    if (a) context.rotate(a *= DegToRad);\n    context.beginPath();\n    shape(context, item);\n    if (a) context.rotate(-a);\n    context.translate(-x, -y);\n  }\n\n  return {\n    type: type,\n    tag: 'path',\n    nested: false,\n    attr: attr,\n    bound: bound,\n    draw: drawAll(draw),\n    pick: pickPath(draw),\n    isect: isect || intersectPath(draw)\n  };\n}\n\nvar arc$1 = markItemPath('arc', arc);\n\nfunction pickArea(a, p) {\n  var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n      z = a[0].orient === 'horizontal' ? 'y' : 'x',\n      i = a.length,\n      min = +Infinity,\n      hit,\n      d;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    d = Math.abs(a[i][z] - v);\n\n    if (d < min) {\n      min = d;\n      hit = a[i];\n    }\n  }\n\n  return hit;\n}\nfunction pickLine(a, p) {\n  var t = Math.pow(a[0].strokeWidth || 1, 2),\n      i = a.length,\n      dx,\n      dy,\n      dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    if (dd < t) return a[i];\n  }\n\n  return null;\n}\nfunction pickTrail(a, p) {\n  var i = a.length,\n      dx,\n      dy,\n      dd;\n\n  while (--i >= 0) {\n    if (a[i].defined === false) continue;\n    dx = a[i].x - p[0];\n    dy = a[i].y - p[1];\n    dd = dx * dx + dy * dy;\n    dx = a[i].size || 1;\n    if (dd < dx * dx) return a[i];\n  }\n\n  return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n  function attr(emit, item) {\n    var items = item.mark.items;\n    if (items.length) emit('d', shape(null, items));\n  }\n\n  function bound(bounds, mark) {\n    var items = mark.items;\n\n    if (items.length === 0) {\n      return bounds;\n    } else {\n      shape(boundContext(bounds), items);\n      return boundStroke(bounds, items[0]);\n    }\n  }\n\n  function draw(context, items) {\n    context.beginPath();\n    shape(context, items);\n  }\n\n  const hit = hitPath(draw);\n\n  function pick(context, scene, x, y, gx, gy) {\n    var items = scene.items,\n        b = scene.bounds;\n\n    if (!items || !items.length || b && !b.contains(gx, gy)) {\n      return null;\n    }\n\n    x *= context.pixelRatio;\n    y *= context.pixelRatio;\n    return hit(context, items, x, y) ? items[0] : null;\n  }\n\n  return {\n    type: type,\n    tag: 'path',\n    nested: true,\n    attr: attr,\n    bound: bound,\n    draw: drawOne(draw),\n    pick: pick,\n    isect: intersectPoint,\n    tip: tip\n  };\n}\n\nvar area$1 = markMultiItemPath('area', area, pickArea);\n\nfunction clip$1 (context, scene) {\n  var clip = scene.clip;\n  context.save();\n\n  if (isFunction(clip)) {\n    context.beginPath();\n    clip(context);\n    context.clip();\n  } else {\n    clipGroup(context, scene.group);\n  }\n}\nfunction clipGroup(context, group) {\n  context.beginPath();\n  hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n  context.clip();\n}\n\nfunction offset(item) {\n  const sw = value$1(item.strokeWidth, 1);\n  return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\n\nfunction attr(emit, item) {\n  emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n  const off = offset(item);\n  emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n  emit('class', 'background');\n  emit('aria-hidden', true);\n  emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n  emit('class', 'foreground');\n  emit('aria-hidden', true);\n\n  if (item.strokeForeground) {\n    emitRectangle(emit, item);\n  } else {\n    emit('d', '');\n  }\n}\n\nfunction content(emit, item, renderer) {\n  const url = item.clip ? clip(renderer, item, item) : null;\n  emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n  if (!group.clip && group.items) {\n    const items = group.items,\n          m = items.length;\n\n    for (let j = 0; j < m; ++j) {\n      bounds.union(items[j].bounds);\n    }\n  }\n\n  if ((group.clip || group.width || group.height) && !group.noBound) {\n    bounds.add(0, 0).add(group.width || 0, group.height || 0);\n  }\n\n  boundStroke(bounds, group);\n  return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n  const off = offset(group);\n  context.beginPath();\n  rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\n\nfunction draw(context, scene, bounds) {\n  visit(scene, group => {\n    const gx = group.x || 0,\n          gy = group.y || 0,\n          fore = group.strokeForeground,\n          opacity = group.opacity == null ? 1 : group.opacity; // draw group background\n\n    if ((group.stroke || group.fill) && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n\n      if (group.fill && fill(context, group, opacity)) {\n        context.fill();\n      }\n\n      if (group.stroke && !fore && stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    } // setup graphics context, set clip and bounds\n\n\n    context.save();\n    context.translate(gx, gy);\n    if (group.clip) clipGroup(context, group);\n    if (bounds) bounds.translate(-gx, -gy); // draw group contents\n\n    visit(group, item => {\n      this.draw(context, item, bounds);\n    }); // restore graphics context\n\n    if (bounds) bounds.translate(gx, gy);\n    context.restore(); // draw group foreground\n\n    if (fore && group.stroke && opacity) {\n      rectanglePath(context, group, gx, gy);\n      blend(context, group);\n\n      if (stroke(context, group, opacity)) {\n        context.stroke();\n      }\n    }\n  });\n}\n\nfunction pick$1(context, scene, x, y, gx, gy) {\n  if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n    return null;\n  }\n\n  const cx = x * context.pixelRatio,\n        cy = y * context.pixelRatio;\n  return pickVisit(scene, group => {\n    let hit, dx, dy; // first hit test bounding box\n\n    const b = group.bounds;\n    if (b && !b.contains(gx, gy)) return; // passed bounds check, test rectangular clip\n\n    dx = group.x || 0;\n    dy = group.y || 0;\n    const dw = dx + (group.width || 0),\n          dh = dy + (group.height || 0),\n          c = group.clip;\n    if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return; // adjust coordinate system\n\n    context.save();\n    context.translate(dx, dy);\n    dx = gx - dx;\n    dy = gy - dy; // test background for rounded corner clip\n\n    if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n      context.restore();\n      return null;\n    }\n\n    const fore = group.strokeForeground,\n          ix = scene.interactive !== false; // hit test against group foreground\n\n    if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n      context.restore();\n      return group;\n    } // hit test against contained marks\n\n\n    hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null); // hit test against group background\n\n    if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n      hit = group;\n    } // restore state and return\n\n\n    context.restore();\n    return hit || null;\n  });\n}\n\nfunction pickMark(mark, x, y) {\n  return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n  type: 'group',\n  tag: 'g',\n  nested: false,\n  attr: attr,\n  bound: bound,\n  draw: draw,\n  pick: pick$1,\n  isect: intersectRect,\n  content: content,\n  background: background,\n  foreground: foreground\n};\n\nvar metadata = {\n  'xmlns': 'http://www.w3.org/2000/svg',\n  'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n  'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n  var image = item.image;\n\n  if (!image || item.url && item.url !== image.url) {\n    image = {\n      complete: false,\n      width: 0,\n      height: 0\n    };\n    renderer.loadImage(item.url).then(image => {\n      item.image = image;\n      item.image.url = item.url;\n    });\n  }\n\n  return image;\n}\n\nfunction imageWidth(item, image) {\n  return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\n\nfunction imageHeight(item, image) {\n  return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\n\nfunction imageXOffset(align, w) {\n  return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n  return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$1(emit, item, renderer) {\n  const img = getImage(item, renderer),\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n  emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n  emit('transform', translate(x, y));\n  emit('width', w);\n  emit('height', h);\n  emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound$1(bounds, item) {\n  const img = item.image,\n        w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h);\n  return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$1(context, scene, bounds) {\n  visit(scene, item => {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n    const img = getImage(item, this);\n    let w = imageWidth(item, img),\n        h = imageHeight(item, img),\n        x = (item.x || 0) - imageXOffset(item.align, w),\n        y = (item.y || 0) - imageYOffset(item.baseline, h),\n        opacity,\n        ar0,\n        ar1,\n        t;\n\n    if (item.aspect !== false) {\n      ar0 = img.width / img.height;\n      ar1 = item.width / item.height;\n\n      if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n        if (ar1 < ar0) {\n          t = w / ar0;\n          y += (h - t) / 2;\n          h = t;\n        } else {\n          t = h * ar0;\n          x += (w - t) / 2;\n          w = t;\n        }\n      }\n    }\n\n    if (img.complete || img.toDataURL) {\n      blend(context, item);\n      context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n      context.imageSmoothingEnabled = item.smooth !== false;\n      context.drawImage(img, x, y, w, h);\n    }\n  });\n}\n\nvar image = {\n  type: 'image',\n  tag: 'image',\n  nested: false,\n  attr: attr$1,\n  bound: bound$1,\n  draw: draw$1,\n  pick: pick(),\n  isect: truthy,\n  // bounds check is sufficient\n  get: getImage,\n  xOffset: imageXOffset,\n  yOffset: imageYOffset\n};\n\nvar line$1 = markMultiItemPath('line', line, pickLine);\n\nfunction attr$2(emit, item) {\n  var sx = item.scaleX || 1,\n      sy = item.scaleY || 1;\n\n  if (sx !== 1 || sy !== 1) {\n    emit('vector-effect', 'non-scaling-stroke');\n  }\n\n  emit('transform', transformItem(item));\n  emit('d', item.path);\n}\n\nfunction path(context, item) {\n  var path = item.path;\n  if (path == null) return true;\n  var x = item.x || 0,\n      y = item.y || 0,\n      sx = item.scaleX || 1,\n      sy = item.scaleY || 1,\n      a = (item.angle || 0) * DegToRad,\n      cache = item.pathCache;\n\n  if (!cache || cache.path !== path) {\n    (item.pathCache = cache = pathParse(path)).path = path;\n  }\n\n  if (a && context.rotate && context.translate) {\n    context.translate(x, y);\n    context.rotate(a);\n    pathRender(context, cache, 0, 0, sx, sy);\n    context.rotate(-a);\n    context.translate(-x, -y);\n  } else {\n    pathRender(context, cache, x, y, sx, sy);\n  }\n}\n\nfunction bound$2(bounds, item) {\n  return path(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\n\nvar path$1 = {\n  type: 'path',\n  tag: 'path',\n  nested: false,\n  attr: attr$2,\n  bound: bound$2,\n  draw: drawAll(path),\n  pick: pickPath(path),\n  isect: intersectPath(path)\n};\n\nfunction attr$3(emit, item) {\n  emit('d', rectangle(null, item));\n}\n\nfunction bound$3(bounds, item) {\n  var x, y;\n  return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\n\nfunction draw$2(context, item) {\n  context.beginPath();\n  rectangle(context, item);\n}\n\nvar rect = {\n  type: 'rect',\n  tag: 'path',\n  nested: false,\n  attr: attr$3,\n  bound: bound$3,\n  draw: drawAll(draw$2),\n  pick: pickPath(draw$2),\n  isect: intersectRect\n};\n\nfunction attr$4(emit, item) {\n  emit('transform', translateItem(item));\n  emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n  emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound$4(bounds, item) {\n  var x1, y1;\n  return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\n\nfunction path$2(context, item, opacity) {\n  var x1, y1, x2, y2;\n\n  if (item.stroke && stroke(context, item, opacity)) {\n    x1 = item.x || 0;\n    y1 = item.y || 0;\n    x2 = item.x2 != null ? item.x2 : x1;\n    y2 = item.y2 != null ? item.y2 : y1;\n    context.beginPath();\n    context.moveTo(x1, y1);\n    context.lineTo(x2, y2);\n    return true;\n  }\n\n  return false;\n}\n\nfunction draw$3(context, scene, bounds) {\n  visit(scene, item => {\n    if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n    var opacity = item.opacity == null ? 1 : item.opacity;\n\n    if (opacity && path$2(context, item, opacity)) {\n      blend(context, item);\n      context.stroke();\n    }\n  });\n}\n\nfunction hit(context, item, x, y) {\n  if (!context.isPointInStroke) return false;\n  return path$2(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n  type: 'rule',\n  tag: 'line',\n  nested: false,\n  attr: attr$4,\n  bound: bound$4,\n  draw: draw$3,\n  pick: pick(hit),\n  isect: intersectRule\n};\n\nvar shape$1 = markItemPath('shape', shape);\n\nvar symbol$1 = markItemPath('symbol', symbol, intersectPoint);\n\nconst widthCache = lruCache();\nvar textMetrics = {\n  height: fontSize,\n  measureWidth: measureWidth,\n  estimateWidth: estimateWidth,\n  width: estimateWidth,\n  canvas: useCanvas\n};\nuseCanvas(true);\n\nfunction useCanvas(use) {\n  textMetrics.width = use && context$1 ? measureWidth : estimateWidth;\n} // make dumb, simple estimate if no canvas is available\n\n\nfunction estimateWidth(item, text) {\n  return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n  return ~~(0.8 * text.length * currentFontHeight);\n} // measure text width if canvas is available\n\n\nfunction measureWidth(item, text) {\n  return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n  const key = \"(\".concat(currentFont, \") \").concat(text);\n  let width = widthCache.get(key);\n\n  if (width === undefined) {\n    context$1.font = currentFont;\n    width = context$1.measureText(text).width;\n    widthCache.set(key, width);\n  }\n\n  return width;\n}\n\nfunction fontSize(item) {\n  return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n  return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction lineArray(_) {\n  return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nfunction textLines(item) {\n  return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n  const tl = textLines(item);\n  return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n  const text = line == null ? '' : (line + '').trim();\n  return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n  if (textMetrics.width === measureWidth) {\n    // we are using canvas\n    const currentFont = font(item);\n    return text => _measureWidth(text, currentFont);\n  } else {\n    // we are relying on estimates\n    const currentFontHeight = fontSize(item);\n    return text => _estimateWidth(text, currentFontHeight);\n  }\n}\n\nfunction truncate(item, text) {\n  var limit = +item.limit,\n      width = widthGetter(item);\n  if (width(text) < limit) return text;\n  var ellipsis = item.ellipsis || '\\u2026',\n      rtl = item.dir === 'rtl',\n      lo = 0,\n      hi = text.length,\n      mid;\n  limit -= width(ellipsis);\n\n  if (rtl) {\n    while (lo < hi) {\n      mid = lo + hi >>> 1;\n      if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n    }\n\n    return ellipsis + text.slice(lo);\n  } else {\n    while (lo < hi) {\n      mid = 1 + (lo + hi >>> 1);\n      if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n    }\n\n    return text.slice(0, lo) + ellipsis;\n  }\n}\n\nfunction fontFamily(item, quote) {\n  var font = item.font;\n  return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n  return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset$1(item) {\n  // perform our own font baseline calculation\n  // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n  // this also ensures consistent layout across renderers\n  var baseline = item.baseline,\n      h = fontSize(item);\n  return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n  'left': 'start',\n  'center': 'middle',\n  'right': 'end'\n};\nconst tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n  var x = item.x || 0,\n      y = item.y || 0,\n      r = item.radius || 0,\n      t;\n\n  if (r) {\n    t = (item.theta || 0) - HalfPi;\n    x += r * Math.cos(t);\n    y += r * Math.sin(t);\n  }\n\n  tempBounds.x1 = x;\n  tempBounds.y1 = y;\n  return tempBounds;\n}\n\nfunction attr$5(emit, item) {\n  var dx = item.dx || 0,\n      dy = (item.dy || 0) + offset$1(item),\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      a = item.angle || 0,\n      t;\n  emit('text-anchor', textAlign[item.align] || 'start');\n\n  if (a) {\n    t = translate(x, y) + ' ' + rotate(a);\n    if (dx || dy) t += ' ' + translate(dx, dy);\n  } else {\n    t = translate(x + dx, y + dy);\n  }\n\n  emit('transform', t);\n}\n\nfunction bound$5(bounds, item, mode) {\n  var h = textMetrics.height(item),\n      a = item.align,\n      p = anchorPoint(item),\n      x = p.x1,\n      y = p.y1,\n      dx = item.dx || 0,\n      dy = (item.dy || 0) + offset$1(item) - Math.round(0.8 * h),\n      // use 4/5 offset\n  tl = textLines(item),\n      w; // get dimensions\n\n  if (isArray(tl)) {\n    // multi-line text\n    h += lineHeight(item) * (tl.length - 1);\n    w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n  } else {\n    // single-line text\n    w = textMetrics.width(item, tl);\n  } // horizontal alignment\n\n\n  if (a === 'center') {\n    dx -= w / 2;\n  } else if (a === 'right') {\n    dx -= w;\n  } else ;\n\n  bounds.set(dx += x, dy += y, dx + w, dy + h);\n\n  if (item.angle && !mode) {\n    bounds.rotate(item.angle * DegToRad, x, y);\n  } else if (mode === 2) {\n    return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n  }\n\n  return bounds;\n}\n\nfunction draw$4(context, scene, bounds) {\n  visit(scene, item => {\n    var opacity = item.opacity == null ? 1 : item.opacity,\n        p,\n        x,\n        y,\n        i,\n        lh,\n        tl,\n        str;\n    if (bounds && !bounds.intersects(item.bounds) || // bounds check\n    opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n    context.font = font(item);\n    context.textAlign = item.align || 'left';\n    p = anchorPoint(item);\n    x = p.x1, y = p.y1;\n\n    if (item.angle) {\n      context.save();\n      context.translate(x, y);\n      context.rotate(item.angle * DegToRad);\n      x = y = 0; // reset x, y\n    }\n\n    x += item.dx || 0;\n    y += (item.dy || 0) + offset$1(item);\n    tl = textLines(item);\n    blend(context, item);\n\n    if (isArray(tl)) {\n      lh = lineHeight(item);\n\n      for (i = 0; i < tl.length; ++i) {\n        str = textValue(item, tl[i]);\n\n        if (item.fill && fill(context, item, opacity)) {\n          context.fillText(str, x, y);\n        }\n\n        if (item.stroke && stroke(context, item, opacity)) {\n          context.strokeText(str, x, y);\n        }\n\n        y += lh;\n      }\n    } else {\n      str = textValue(item, tl);\n\n      if (item.fill && fill(context, item, opacity)) {\n        context.fillText(str, x, y);\n      }\n\n      if (item.stroke && stroke(context, item, opacity)) {\n        context.strokeText(str, x, y);\n      }\n    }\n\n    if (item.angle) context.restore();\n  });\n}\n\nfunction hit$1(context, item, x, y, gx, gy) {\n  if (item.fontSize <= 0) return false;\n  if (!item.angle) return true; // bounds sufficient if no rotation\n  // project point into space of unrotated bounds\n\n  var p = anchorPoint(item),\n      ax = p.x1,\n      ay = p.y1,\n      b = bound$5(tempBounds, item, 1),\n      a = -item.angle * DegToRad,\n      cos = Math.cos(a),\n      sin = Math.sin(a),\n      px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n      py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n  return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n  const p = bound$5(tempBounds, item, 2);\n  return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nvar text = {\n  type: 'text',\n  tag: 'text',\n  nested: false,\n  attr: attr$5,\n  bound: bound$5,\n  draw: draw$4,\n  pick: pick(hit$1),\n  isect: intersectText\n};\n\nvar trail$1 = markMultiItemPath('trail', trail, pickTrail);\n\nvar Marks = {\n  arc: arc$1,\n  area: area$1,\n  group: group,\n  image: image,\n  line: line$1,\n  path: path$1,\n  rect: rect,\n  rule: rule,\n  shape: shape$1,\n  symbol: symbol$1,\n  text: text,\n  trail: trail$1\n};\n\nfunction boundItem (item, func, opt) {\n  var type = Marks[item.mark.marktype],\n      bound = func || type.bound;\n  if (type.nested) item = item.mark;\n  return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n  mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n  var type = Marks[mark.marktype],\n      bound = type.bound,\n      items = mark.items,\n      hasItems = items && items.length,\n      i,\n      n,\n      item,\n      b;\n\n  if (type.nested) {\n    if (hasItems) {\n      item = items[0];\n    } else {\n      // no items, fake it\n      DUMMY.mark = mark;\n      item = DUMMY;\n    }\n\n    b = boundItem(item, bound, opt);\n    bounds = bounds && bounds.union(b) || b;\n    return bounds;\n  }\n\n  bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n\n  if (hasItems) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      bounds.union(boundItem(items[i], bound, opt));\n    }\n  }\n\n  return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout\n'fill', 'fillOpacity', 'opacity', 'blend', // fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke\n'strokeDash', 'strokeDashOffset', // stroke dash\n'strokeForeground', 'strokeOffset', // group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc\n'cornerRadius', 'padAngle', // arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line\n'url', 'aspect', 'smooth', // image\n'path', 'scaleX', 'scaleY', // path\n'x2', 'y2', // rule\n'size', 'shape', // symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n  return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n  const scene = typeof json === 'string' ? JSON.parse(json) : json;\n  return initialize(scene);\n}\n\nfunction initialize(scene) {\n  var type = scene.marktype,\n      items = scene.items,\n      parent,\n      i,\n      n;\n\n  if (items) {\n    for (i = 0, n = items.length; i < n; ++i) {\n      parent = type ? 'mark' : 'group';\n      items[i][parent] = scene;\n      if (items[i].zindex) items[i][parent].zdirty = true;\n      if ('group' === (type || parent)) initialize(items[i]);\n    }\n  }\n\n  if (type) boundMark(scene);\n  return scene;\n}\n\nfunction Scenegraph(scene) {\n  if (arguments.length) {\n    this.root = sceneFromJSON(scene);\n  } else {\n    this.root = createMark({\n      marktype: 'group',\n      name: 'root',\n      role: 'frame'\n    });\n    this.root.items = [new GroupItem(this.root)];\n  }\n}\nScenegraph.prototype = {\n  toJSON(indent) {\n    return sceneToJSON(this.root, indent || 0);\n  },\n\n  mark(markdef, group, index) {\n    group = group || this.root.items[0];\n    const mark = createMark(markdef, group);\n    group.items[index] = mark;\n    if (mark.zindex) mark.group.zdirty = true;\n    return mark;\n  }\n\n};\n\nfunction createMark(def, group) {\n  const mark = {\n    bounds: new Bounds(),\n    clip: !!def.clip,\n    group: group,\n    interactive: def.interactive === false ? false : true,\n    items: [],\n    marktype: def.marktype,\n    name: def.name || undefined,\n    role: def.role || undefined,\n    zindex: def.zindex || 0\n  }; // add accessibility properties if defined\n\n  if (def.aria != null) {\n    mark.aria = def.aria;\n  }\n\n  if (def.description) {\n    mark.description = def.description;\n  }\n\n  return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n  if (!doc && typeof document !== 'undefined' && document.createElement) {\n    doc = document;\n  }\n\n  return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n} // find first child element with matching tag\n\nfunction domFind(el, tag) {\n  tag = tag.toLowerCase();\n  var nodes = el.childNodes,\n      i = 0,\n      n = nodes.length;\n\n  for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n    return nodes[i];\n  }\n} // retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\n\nfunction domChild(el, index, tag, ns) {\n  var a = el.childNodes[index],\n      b;\n\n  if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n    b = a || null;\n    a = domCreate(el.ownerDocument, tag, ns);\n    el.insertBefore(a, b);\n  }\n\n  return a;\n} // remove all child elements at or above the given index\n\nfunction domClear(el, index) {\n  var nodes = el.childNodes,\n      curr = nodes.length;\n\n  while (curr > index) el.removeChild(nodes[--curr]);\n\n  return el;\n} // generate css class name for mark\n\nfunction cssClass(mark) {\n  return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n  const rect = el.getBoundingClientRect();\n  return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n  var mark = item && item.mark,\n      mdef,\n      p;\n\n  if (mark && (mdef = Marks[mark.marktype]).tip) {\n    p = point(event, el);\n    p[0] -= origin[0];\n    p[1] -= origin[1];\n\n    while (item = item.mark.group) {\n      p[0] -= item.x || 0;\n      p[1] -= item.y || 0;\n    }\n\n    item = mdef.tip(mark.items, p);\n  }\n\n  return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n *   href URL sanitization. If not specified, a standard loader\n *   instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n *   function for custom tooltip display.\n * @constructor\n */\n\nfunction Handler(customLoader, customTooltip) {\n  this._active = null;\n  this._handlers = {};\n  this._loader = customLoader || loader();\n  this._tooltip = customTooltip || defaultTooltip;\n} // The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\n\nfunction defaultTooltip(handler, event, item, value) {\n  handler.element().setAttribute('title', value || '');\n}\n\nHandler.prototype = {\n  /**\n   * Initialize a new Handler instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {object} [obj] - Optional context object that should serve as\n   *   the \"this\" context for event callbacks.\n   * @return {Handler} - This handler instance.\n   */\n  initialize(el, origin, obj) {\n    this._el = el;\n    this._obj = obj || null;\n    return this.origin(origin);\n  },\n\n  /**\n   * Returns the parent container element for a visualization.\n   * @return {DOMElement} - The containing DOM element.\n   */\n  element() {\n    return this._el;\n  },\n\n  /**\n   * Returns the scene element (e.g., canvas or SVG) of the visualization\n   * Subclasses must override if the first child is not the scene element.\n   * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n   */\n  canvas() {\n    return this._el && this._el.firstChild;\n  },\n\n  /**\n   * Get / set the origin coordinates of the visualization.\n   */\n  origin(origin) {\n    if (arguments.length) {\n      this._origin = origin || [0, 0];\n      return this;\n    } else {\n      return this._origin.slice();\n    }\n  },\n\n  /**\n   * Get / set the scenegraph root.\n   */\n  scene(scene) {\n    if (!arguments.length) return this._scene;\n    this._scene = scene;\n    return this;\n  },\n\n  /**\n   * Add an event handler. Subclasses should override this method.\n   */\n  on()\n  /*type, handler*/\n  {},\n\n  /**\n   * Remove an event handler. Subclasses should override this method.\n   */\n  off()\n  /*type, handler*/\n  {},\n\n  /**\n   * Utility method for finding the array index of an event handler.\n   * @param {Array} h - An array of registered event handlers.\n   * @param {string} type - The event type.\n   * @param {function} handler - The event handler instance to find.\n   * @return {number} - The handler's array index or -1 if not registered.\n   */\n  _handlerIndex(h, type, handler) {\n    for (let i = h ? h.length : 0; --i >= 0;) {\n      if (h[i].type === type && (!handler || h[i].handler === handler)) {\n        return i;\n      }\n    }\n\n    return -1;\n  },\n\n  /**\n   * Returns an array with registered event handlers.\n   * @param {string} [type] - The event type to query. Any annotations\n   *   are ignored; for example, for the argument \"click.foo\", \".foo\" will\n   *   be ignored and the method returns all \"click\" handlers. If type is\n   *   null or unspecified, this method returns handlers for all types.\n   * @return {Array} - A new array containing all registered event handlers.\n   */\n  handlers(type) {\n    const h = this._handlers,\n          a = [];\n\n    if (type) {\n      a.push(...h[this.eventName(type)]);\n    } else {\n      for (const k in h) {\n        a.push(...h[k]);\n      }\n    }\n\n    return a;\n  },\n\n  /**\n   * Parses an event name string to return the specific event type.\n   * For example, given \"click.foo\" returns \"click\"\n   * @param {string} name - The input event type string.\n   * @return {string} - A string with the event type only.\n   */\n  eventName(name) {\n    const i = name.indexOf('.');\n    return i < 0 ? name : name.slice(0, i);\n  },\n\n  /**\n   * Handle hyperlink navigation in response to an item.href value.\n   * @param {Event} event - The event triggering hyperlink navigation.\n   * @param {Item} item - The scenegraph item.\n   * @param {string} href - The URL to navigate to.\n   */\n  handleHref(event, item, href) {\n    this._loader.sanitize(href, {\n      context: 'href'\n    }).then(opt => {\n      const e = new MouseEvent(event.type, event),\n            a = domCreate(null, 'a');\n\n      for (const name in opt) a.setAttribute(name, opt[name]);\n\n      a.dispatchEvent(e);\n    }).catch(() => {\n      /* do nothing */\n    });\n  },\n\n  /**\n   * Handle tooltip display in response to an item.tooltip value.\n   * @param {Event} event - The event triggering tooltip display.\n   * @param {Item} item - The scenegraph item.\n   * @param {boolean} show - A boolean flag indicating whether\n   *   to show or hide a tooltip for the given item.\n   */\n  handleTooltip(event, item, show) {\n    if (item && item.tooltip != null) {\n      item = resolveItem(item, event, this.canvas(), this._origin);\n      const value = show && item && item.tooltip || null;\n\n      this._tooltip.call(this._obj, this, event, item, value);\n    }\n  },\n\n  /**\n   * Returns the size of a scenegraph item and its position relative\n   * to the viewport.\n   * @param {Item} item - The scenegraph item.\n   * @return {object} - A bounding box object (compatible with the\n   *   DOMRect type) consisting of x, y, width, heigh, top, left,\n   *   right, and bottom properties.\n   */\n  getItemBoundingClientRect(item) {\n    const el = this.canvas();\n    if (!el) return;\n    const rect = el.getBoundingClientRect(),\n          origin = this._origin,\n          bounds = item.bounds,\n          width = bounds.width(),\n          height = bounds.height();\n    let x = bounds.x1 + origin[0] + rect.left,\n        y = bounds.y1 + origin[1] + rect.top; // translate coordinate for each parent group\n\n    while (item.mark && (item = item.mark.group)) {\n      x += item.x || 0;\n      y += item.y || 0;\n    } // return DOMRect-compatible bounding box\n\n\n    return {\n      x,\n      y,\n      width,\n      height,\n      left: x,\n      top: y,\n      right: x + width,\n      bottom: y + height\n    };\n  }\n\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n *   image and href URL sanitization. If not specified, a\n *   standard loader instance will be generated.\n * @constructor\n */\n\nfunction Renderer(loader) {\n  this._el = null;\n  this._bgcolor = null;\n  this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n  /**\n   * Initialize a new Renderer instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {number} width - The coordinate width of the display, in pixels.\n   * @param {number} height - The coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {Renderer} - This renderer instance.\n   */\n  initialize(el, width, height, origin, scaleFactor) {\n    this._el = el;\n    return this.resize(width, height, origin, scaleFactor);\n  },\n\n  /**\n   * Returns the parent container element for a visualization.\n   * @return {DOMElement} - The containing DOM element.\n   */\n  element() {\n    return this._el;\n  },\n\n  /**\n   * Returns the scene element (e.g., canvas or SVG) of the visualization\n   * Subclasses must override if the first child is not the scene element.\n   * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n   */\n  canvas() {\n    return this._el && this._el.firstChild;\n  },\n\n  /**\n   * Get / set the background color.\n   */\n  background(bgcolor) {\n    if (arguments.length === 0) return this._bgcolor;\n    this._bgcolor = bgcolor;\n    return this;\n  },\n\n  /**\n   * Resize the display.\n   * @param {number} width - The new coordinate width of the display, in pixels.\n   * @param {number} height - The new coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The new origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {Renderer} - This renderer instance;\n   */\n  resize(width, height, origin, scaleFactor) {\n    this._width = width;\n    this._height = height;\n    this._origin = origin || [0, 0];\n    this._scale = scaleFactor || 1;\n    return this;\n  },\n\n  /**\n   * Report a dirty item whose bounds should be redrawn.\n   * This base class method does nothing. Subclasses that perform\n   * incremental should implement this method.\n   * @param {Item} item - The dirty item whose bounds should be redrawn.\n   */\n  dirty()\n  /*item*/\n  {},\n\n  /**\n   * Render an input scenegraph, potentially with a set of dirty items.\n   * This method will perform an immediate rendering with available resources.\n   * The renderer may also need to perform image loading to perform a complete\n   * render. This process can lead to asynchronous re-rendering of the scene\n   * after this method returns. To receive notification when rendering is\n   * complete, use the renderAsync method instead.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   * @return {Renderer} - This renderer instance.\n   */\n  render(scene) {\n    const r = this; // bind arguments into a render call, and cache it\n    // this function may be subsequently called for async redraw\n\n    r._call = function () {\n      r._render(scene);\n    }; // invoke the renderer\n\n\n    r._call(); // clear the cached call for garbage collection\n    // async redraws will stash their own copy\n\n\n    r._call = null;\n    return r;\n  },\n\n  /**\n   * Internal rendering method. Renderer subclasses should override this\n   * method to actually perform rendering.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render()\n  /*scene*/\n  {// subclasses to override\n  },\n\n  /**\n   * Asynchronous rendering method. Similar to render, but returns a Promise\n   * that resolves when all rendering is completed. Sometimes a renderer must\n   * perform image loading to get a complete rendering. The returned\n   * Promise will not resolve until this process completes.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   * @return {Promise} - A Promise that resolves when rendering is complete.\n   */\n  renderAsync(scene) {\n    const r = this.render(scene);\n    return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n  },\n\n  /**\n   * Internal method for asynchronous resource loading.\n   * Proxies method calls to the ImageLoader, and tracks loading\n   * progress to invoke a re-render once complete.\n   * @param {string} method - The method name to invoke on the ImageLoader.\n   * @param {string} uri - The URI for the requested resource.\n   * @return {Promise} - A Promise that resolves to the requested resource.\n   */\n  _load(method, uri) {\n    var r = this,\n        p = r._loader[method](uri);\n\n    if (!r._ready) {\n      // re-render the scene when loading completes\n      const call = r._call;\n      r._ready = r._loader.ready().then(redraw => {\n        if (redraw) call();\n        r._ready = null;\n      });\n    }\n\n    return p;\n  },\n\n  /**\n   * Sanitize a URL to include as a hyperlink in the rendered scene.\n   * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n   * image loading progress and invokes a re-render once complete.\n   * @param {string} uri - The URI string to sanitize.\n   * @return {Promise} - A Promise that resolves to the sanitized URL.\n   */\n  sanitizeURL(uri) {\n    return this._load('sanitizeURL', uri);\n  },\n\n  /**\n   * Requests an image to include in the rendered scene.\n   * This method proxies a call to ImageLoader.loadImage, but also tracks\n   * image loading progress and invokes a re-render once complete.\n   * @param {string} uri - The URI string of the image.\n   * @return {Promise} - A Promise that resolves to the loaded Image.\n   */\n  loadImage(uri) {\n    return this._load('loadImage', uri);\n  }\n\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  this._down = null;\n  this._touch = null;\n  this._first = true;\n  this._events = {};\n}\n\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type]; // lazily add listeners to the canvas as needed\n\n\nfunction eventListenerCheck(handler, type) {\n  eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n  const canvas = handler.canvas();\n\n  if (canvas && !handler._events[type]) {\n    handler._events[type] = 1;\n    canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n  }\n}\n\nfunction move(moveEvent, overEvent, outEvent) {\n  return function (evt) {\n    const a = this._active,\n          p = this.pickEvent(evt);\n\n    if (p === a) {\n      // active item and picked item are the same\n      this.fire(moveEvent, evt); // fire move\n    } else {\n      // active item and picked item are different\n      if (!a || !a.exit) {\n        // fire out for prior active item\n        // suppress if active item was removed from scene\n        this.fire(outEvent, evt);\n      }\n\n      this._active = p; // set new active item\n\n      this.fire(overEvent, evt); // fire over for new active item\n\n      this.fire(moveEvent, evt); // fire move for new active item\n    }\n  };\n}\n\nfunction inactive(type) {\n  return function (evt) {\n    this.fire(type, evt);\n    this._active = null;\n  };\n}\n\ninherits(CanvasHandler, Handler, {\n  initialize(el, origin, obj) {\n    this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management\n\n    [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n    return Handler.prototype.initialize.call(this, el, origin, obj);\n  },\n\n  // return the backing canvas instance\n  canvas() {\n    return this._canvas;\n  },\n\n  // retrieve the current canvas context\n  context() {\n    return this._canvas.getContext('2d');\n  },\n\n  // supported events\n  events: Events,\n\n  // to keep old versions of firefox happy\n  DOMMouseScroll(evt) {\n    this.fire(MouseWheelEvent, evt);\n  },\n\n  mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n  dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n  mouseout: inactive(MouseOutEvent),\n  dragleave: inactive(DragLeaveEvent),\n\n  mousedown(evt) {\n    this._down = this._active;\n    this.fire(MouseDownEvent, evt);\n  },\n\n  click(evt) {\n    if (this._down === this._active) {\n      this.fire(ClickEvent, evt);\n      this._down = null;\n    }\n  },\n\n  touchstart(evt) {\n    this._touch = this.pickEvent(evt.changedTouches[0]);\n\n    if (this._first) {\n      this._active = this._touch;\n      this._first = false;\n    }\n\n    this.fire(TouchStartEvent, evt, true);\n  },\n\n  touchmove(evt) {\n    this.fire(TouchMoveEvent, evt, true);\n  },\n\n  touchend(evt) {\n    this.fire(TouchEndEvent, evt, true);\n    this._touch = null;\n  },\n\n  // fire an event\n  fire(type, evt, touch) {\n    const a = touch ? this._touch : this._active,\n          h = this._handlers[type]; // set event type relative to scenegraph items\n\n    evt.vegaType = type; // handle hyperlinks and tooltips first\n\n    if (type === HrefEvent && a && a.href) {\n      this.handleHref(evt, a, a.href);\n    } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n      this.handleTooltip(evt, a, type !== TooltipHideEvent);\n    } // invoke all registered handlers\n\n\n    if (h) {\n      for (let i = 0, len = h.length; i < len; ++i) {\n        h[i].handler.call(this._obj, evt, a);\n      }\n    }\n  },\n\n  // add an event handler\n  on(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers,\n          i = this._handlerIndex(h[name], type, handler);\n\n    if (i < 0) {\n      eventListenerCheck(this, type);\n      (h[name] || (h[name] = [])).push({\n        type: type,\n        handler: handler\n      });\n    }\n\n    return this;\n  },\n\n  // remove an event handler\n  off(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers[name],\n          i = this._handlerIndex(h, type, handler);\n\n    if (i >= 0) {\n      h.splice(i, 1);\n    }\n\n    return this;\n  },\n\n  pickEvent(evt) {\n    const p = point(evt, this._canvas),\n          o = this._origin;\n    return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n  },\n\n  // find the scenegraph item at the current mouse position\n  // x, y -- the absolute x, y mouse coordinates on the canvas element\n  // gx, gy -- the relative coordinates within the current group\n  pick(scene, x, y, gx, gy) {\n    const g = this.context(),\n          mark = Marks[scene.marktype];\n    return mark.pick.call(this, g, scene, x, y, gx, gy);\n  }\n\n});\n\nfunction devicePixelRatio() {\n  return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n  const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n        context = canvas.getContext('2d'),\n        ratio = inDOM ? pixelRatio : scaleFactor;\n  canvas.width = width * ratio;\n  canvas.height = height * ratio;\n\n  for (const key in opt) {\n    context[key] = opt[key];\n  }\n\n  if (inDOM && ratio !== 1) {\n    canvas.style.width = width + 'px';\n    canvas.style.height = height + 'px';\n  }\n\n  context.pixelRatio = ratio;\n  context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n  return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n  Renderer.call(this, loader);\n  this._options = {};\n  this._redraw = false;\n  this._dirty = new Bounds();\n  this._tempb = new Bounds();\n}\nconst base = Renderer.prototype;\n\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\n\nfunction clipToBounds(g, b, origin) {\n  // expand bounds by 1 pixel, then round to pixel boundaries\n  b.expand(1).round(); // align to base pixel grid in case of non-integer scaling (#2425)\n\n  if (g.pixelRatio % 1) {\n    b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n  } // to avoid artifacts translate if origin has fractional pixels\n\n\n  b.translate(-(origin[0] % 1), -(origin[1] % 1)); // set clip path\n\n  g.beginPath();\n  g.rect(b.x1, b.y1, b.width(), b.height());\n  g.clip();\n  return b;\n}\n\ninherits(CanvasRenderer, Renderer, {\n  initialize(el, width, height, origin, scaleFactor, options) {\n    this._options = options || {};\n    this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n    if (el && this._canvas) {\n      domClear(el, 0).appendChild(this._canvas);\n\n      this._canvas.setAttribute('class', 'marks');\n    } // this method will invoke resize to size the canvas appropriately\n\n\n    return base.initialize.call(this, el, width, height, origin, scaleFactor);\n  },\n\n  resize(width, height, origin, scaleFactor) {\n    base.resize.call(this, width, height, origin, scaleFactor);\n\n    if (this._canvas) {\n      // configure canvas size and transform\n      resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n    } else {\n      // external context needs to be scaled and positioned to origin\n      const ctx = this._options.externalContext;\n      if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n      ctx.scale(this._scale, this._scale);\n      ctx.translate(this._origin[0], this._origin[1]);\n    }\n\n    this._redraw = true;\n    return this;\n  },\n\n  canvas() {\n    return this._canvas;\n  },\n\n  context() {\n    return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n  },\n\n  dirty(item) {\n    const b = this._tempb.clear().union(item.bounds);\n\n    let g = item.mark.group;\n\n    while (g) {\n      b.translate(g.x || 0, g.y || 0);\n      g = g.mark.group;\n    }\n\n    this._dirty.union(b);\n  },\n\n  _render(scene) {\n    const g = this.context(),\n          o = this._origin,\n          w = this._width,\n          h = this._height,\n          db = this._dirty,\n          vb = viewBounds(o, w, h); // setup\n\n    g.save();\n    const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n    this.clear(-o[0], -o[1], w, h); // render\n\n    this.draw(g, scene, b); // takedown\n\n    g.restore();\n    db.clear();\n    return this;\n  },\n\n  draw(ctx, scene, bounds) {\n    const mark = Marks[scene.marktype];\n    if (scene.clip) clip$1(ctx, scene);\n    mark.draw.call(this, ctx, scene, bounds);\n    if (scene.clip) ctx.restore();\n  },\n\n  clear(x, y, w, h) {\n    const opt = this._options,\n          g = this.context();\n\n    if (opt.type !== 'pdf' && !opt.externalContext) {\n      // calling clear rect voids vector output in pdf mode\n      // and could remove external context content (#2615)\n      g.clearRect(x, y, w, h);\n    }\n\n    if (this._bgcolor != null) {\n      g.fillStyle = this._bgcolor;\n      g.fillRect(x, y, w, h);\n    }\n  }\n\n});\n\nfunction SVGHandler(loader, tooltip) {\n  Handler.call(this, loader, tooltip);\n  const h = this;\n  h._hrefHandler = listener(h, (evt, item) => {\n    if (item && item.href) h.handleHref(evt, item, item.href);\n  });\n  h._tooltipHandler = listener(h, (evt, item) => {\n    h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n  });\n} // wrap an event listener for the SVG DOM\n\nconst listener = (context, handler) => evt => {\n  let item = evt.target.__data__;\n  item = Array.isArray(item) ? item[0] : item;\n  evt.vegaType = evt.type;\n  handler.call(context._obj, evt, item);\n};\n\ninherits(SVGHandler, Handler, {\n  initialize(el, origin, obj) {\n    let svg = this._svg;\n\n    if (svg) {\n      svg.removeEventListener(HrefEvent, this._hrefHandler);\n      svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n      svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n    }\n\n    this._svg = svg = el && domFind(el, 'svg');\n\n    if (svg) {\n      svg.addEventListener(HrefEvent, this._hrefHandler);\n      svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n      svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n    }\n\n    return Handler.prototype.initialize.call(this, el, origin, obj);\n  },\n\n  canvas() {\n    return this._svg;\n  },\n\n  // add an event handler\n  on(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers,\n          i = this._handlerIndex(h[name], type, handler);\n\n    if (i < 0) {\n      const x = {\n        type,\n        handler,\n        listener: listener(this, handler)\n      };\n      (h[name] || (h[name] = [])).push(x);\n\n      if (this._svg) {\n        this._svg.addEventListener(name, x.listener);\n      }\n    }\n\n    return this;\n  },\n\n  // remove an event handler\n  off(type, handler) {\n    const name = this.eventName(type),\n          h = this._handlers[name],\n          i = this._handlerIndex(h, type, handler);\n\n    if (i >= 0) {\n      if (this._svg) {\n        this._svg.removeEventListener(name, h[i].listener);\n      }\n\n      h.splice(i, 1);\n    }\n\n    return this;\n  }\n\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n  [ARIA_ROLE]: role,\n  [ARIA_ROLEDESCRIPTION]: roledesc,\n  [ARIA_LABEL]: label || undefined\n}); // these roles are covered by related roles\n// we can ignore them, no need to generate attributes\n\n\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']); // aria attribute generators for guide roles\n\nconst AriaGuides = {\n  'axis': {\n    desc: 'axis',\n    caption: axisCaption\n  },\n  'legend': {\n    desc: 'legend',\n    caption: legendCaption\n  },\n  'title-text': {\n    desc: 'title',\n    caption: item => \"Title text '\".concat(titleCaption(item), \"'\")\n  },\n  'title-subtitle': {\n    desc: 'subtitle',\n    caption: item => \"Subtitle text '\".concat(titleCaption(item), \"'\")\n  }\n}; // aria properties generated for mark item encoding channels\n\nconst AriaEncode = {\n  ariaRole: ARIA_ROLE,\n  ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n  description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n  const hide = item.aria === false;\n  emit(ARIA_HIDDEN, hide || undefined);\n\n  if (hide || item.description == null) {\n    for (const prop in AriaEncode) {\n      emit(AriaEncode[prop], undefined);\n    }\n  } else {\n    const type = item.mark.marktype;\n    emit(ARIA_LABEL, item.description);\n    emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n    emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || \"\".concat(type, \" mark\"));\n  }\n}\nfunction ariaMarkAttributes(mark) {\n  return mark.aria === false ? {\n    [ARIA_HIDDEN]: true\n  } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n  const type = mark.marktype;\n  const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n  return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, \"\".concat(type, \" mark container\"), mark.description);\n}\n\nfunction ariaGuide(mark, opt) {\n  try {\n    const item = mark.items[0],\n          caption = opt.caption || (() => '');\n\n    return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction titleCaption(item) {\n  return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n  const datum = item.datum,\n        orient = item.orient,\n        title = datum.title ? extractTitle(item) : null,\n        ctx = item.context,\n        scale = ctx.scales[datum.scale].value,\n        locale = ctx.dataflow.locale(),\n        type = scale.type,\n        xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n  return \"\".concat(xy, \"-axis\") + (title ? \" titled '\".concat(title, \"'\") : '') + \" for a \".concat(isDiscrete(type) ? 'discrete' : type, \" scale\") + \" with \".concat(domainCaption(locale, scale, item));\n}\n\nfunction legendCaption(item) {\n  const datum = item.datum,\n        title = datum.title ? extractTitle(item) : null,\n        type = \"\".concat(datum.type || '', \" legend\").trim(),\n        scales = datum.scales,\n        props = Object.keys(scales),\n        ctx = item.context,\n        scale = ctx.scales[scales[props[0]]].value,\n        locale = ctx.dataflow.locale();\n  return capitalize(type) + (title ? \" titled '\".concat(title, \"'\") : '') + \" for \".concat(channelCaption(props)) + \" with \".concat(domainCaption(locale, scale, item));\n}\n\nfunction extractTitle(item) {\n  try {\n    return array(peek(item.items).items[0].text).join(' ');\n  } catch (err) {\n    return null;\n  }\n}\n\nfunction channelCaption(props) {\n  props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n  return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n  return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nconst attrText = val => innerText(val).replace(/\"/g, '&quot;').replace(/\\t/g, '&#x9;').replace(/\\n/g, '&#xA;').replace(/\\r/g, '&#xD;');\n\nfunction markup() {\n  let buf = '',\n      outer = '',\n      inner = '';\n\n  const stack = [],\n        clear = () => outer = inner = '',\n        push = tag => {\n    if (outer) {\n      buf += \"\".concat(outer, \">\").concat(inner);\n      clear();\n    }\n\n    stack.push(tag);\n  },\n        attr = (name, value) => {\n    if (value != null) outer += \" \".concat(name, \"=\\\"\").concat(attrText(value), \"\\\"\");\n    return m;\n  },\n        m = {\n    open(tag, ...attrs) {\n      push(tag);\n      outer = '<' + tag;\n\n      for (const set of attrs) {\n        for (const key in set) attr(key, set[key]);\n      }\n\n      return m;\n    },\n\n    close() {\n      const tag = stack.pop();\n\n      if (outer) {\n        buf += outer + (inner ? \">\".concat(inner, \"</\").concat(tag, \">\") : '/>');\n      } else {\n        buf += \"</\".concat(tag, \">\");\n      }\n\n      clear();\n      return m;\n    },\n\n    attr,\n    text: t => (inner += innerText(t), m),\n    toString: () => buf\n  };\n\n  return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\n\nfunction _serialize(m, node) {\n  m.open(node.tagName);\n\n  if (node.hasAttributes()) {\n    const attrs = node.attributes,\n          n = attrs.length;\n\n    for (let i = 0; i < n; ++i) {\n      m.attr(attrs[i].name, attrs[i].value);\n    }\n  }\n\n  if (node.hasChildNodes()) {\n    const children = node.childNodes,\n          n = children.length;\n\n    for (let i = 0; i < n; i++) {\n      const child = children[i];\n      child.nodeType === 3 // text node\n      ? m.text(child.nodeValue) : _serialize(m, child);\n    }\n  }\n\n  return m.close();\n}\n\nconst styles = {\n  fill: 'fill',\n  fillOpacity: 'fill-opacity',\n  stroke: 'stroke',\n  strokeOpacity: 'stroke-opacity',\n  strokeWidth: 'stroke-width',\n  strokeCap: 'stroke-linecap',\n  strokeJoin: 'stroke-linejoin',\n  strokeDash: 'stroke-dasharray',\n  strokeDashOffset: 'stroke-dashoffset',\n  strokeMiterLimit: 'stroke-miterlimit',\n  opacity: 'opacity',\n  blend: 'mix-blend-mode'\n}; // ensure miter limit default is consistent with canvas (#2498)\n\nconst rootAttributes = {\n  'fill': 'none',\n  'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n      ns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n  Renderer.call(this, loader);\n  this._dirtyID = 0;\n  this._dirty = [];\n  this._svg = null;\n  this._root = null;\n  this._defs = null;\n}\nconst base$1 = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n  /**\n   * Initialize a new SVGRenderer instance.\n   * @param {DOMElement} el - The containing DOM element for the display.\n   * @param {number} width - The coordinate width of the display, in pixels.\n   * @param {number} height - The coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {SVGRenderer} - This renderer instance.\n   */\n  initialize(el, width, height, origin, scaleFactor) {\n    // create the svg definitions cache\n    this._defs = {};\n\n    this._clearDefs();\n\n    if (el) {\n      this._svg = domChild(el, 0, 'svg', ns);\n      setAttributes(this._svg, metadata);\n\n      this._svg.setAttribute('class', 'marks');\n\n      domClear(el, 1); // set the svg root group\n\n      this._root = domChild(this._svg, RootIndex, 'g', ns);\n      setAttributes(this._root, rootAttributes); // ensure no additional child elements\n\n      domClear(this._svg, RootIndex + 1);\n    } // set background color if defined\n\n\n    this.background(this._bgcolor);\n    return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n  },\n\n  /**\n   * Get / set the background color.\n   */\n  background(bgcolor) {\n    if (arguments.length && this._svg) {\n      this._svg.style.setProperty('background-color', bgcolor);\n    }\n\n    return base$1.background.apply(this, arguments);\n  },\n\n  /**\n   * Resize the display.\n   * @param {number} width - The new coordinate width of the display, in pixels.\n   * @param {number} height - The new coordinate height of the display, in pixels.\n   * @param {Array<number>} origin - The new origin of the display, in pixels.\n   *   The coordinate system will be translated to this point.\n   * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n   *   the width and height to determine the final pixel size.\n   * @return {SVGRenderer} - This renderer instance;\n   */\n  resize(width, height, origin, scaleFactor) {\n    base$1.resize.call(this, width, height, origin, scaleFactor);\n\n    if (this._svg) {\n      setAttributes(this._svg, {\n        width: this._width * this._scale,\n        height: this._height * this._scale,\n        viewBox: \"0 0 \".concat(this._width, \" \").concat(this._height)\n      });\n\n      this._root.setAttribute('transform', \"translate(\".concat(this._origin, \")\"));\n    }\n\n    this._dirty = [];\n    return this;\n  },\n\n  /**\n   * Returns the SVG element of the visualization.\n   * @return {DOMElement} - The SVG element.\n   */\n  canvas() {\n    return this._svg;\n  },\n\n  /**\n   * Returns an SVG text string for the rendered content,\n   * or null if this renderer is currently headless.\n   */\n  svg() {\n    const svg = this._svg,\n          bg = this._bgcolor;\n    if (!svg) return null;\n    let node;\n\n    if (bg) {\n      svg.removeAttribute('style');\n      node = domChild(svg, RootIndex, 'rect', ns);\n      setAttributes(node, {\n        width: this._width,\n        height: this._height,\n        fill: bg\n      });\n    }\n\n    const text = serializeXML(svg);\n\n    if (bg) {\n      svg.removeChild(node);\n\n      this._svg.style.setProperty('background-color', bg);\n    }\n\n    return text;\n  },\n\n  /**\n   * Internal rendering method.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render(scene) {\n    // perform spot updates and re-render markup\n    if (this._dirtyCheck()) {\n      if (this._dirtyAll) this._clearDefs();\n      this.mark(this._root, scene);\n      domClear(this._root, 1);\n    }\n\n    this.defs();\n    this._dirty = [];\n    ++this._dirtyID;\n    return this;\n  },\n\n  // -- Manage rendering of items marked as dirty --\n\n  /**\n   * Flag a mark item as dirty.\n   * @param {Item} item - The mark item.\n   */\n  dirty(item) {\n    if (item.dirty !== this._dirtyID) {\n      item.dirty = this._dirtyID;\n\n      this._dirty.push(item);\n    }\n  },\n\n  /**\n   * Check if a mark item is considered dirty.\n   * @param {Item} item - The mark item.\n   */\n  isDirty(item) {\n    return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;\n  },\n\n  /**\n   * Internal method to check dirty status and, if possible,\n   * make targetted updates without a full rendering pass.\n   */\n  _dirtyCheck() {\n    this._dirtyAll = true;\n    const items = this._dirty;\n    if (!items.length || !this._dirtyID) return true;\n    const id = ++this._dirtyID;\n    let item, mark, type, mdef, i, n, o;\n\n    for (i = 0, n = items.length; i < n; ++i) {\n      item = items[i];\n      mark = item.mark;\n\n      if (mark.marktype !== type) {\n        // memoize mark instance lookup\n        type = mark.marktype;\n        mdef = Marks[type];\n      }\n\n      if (mark.zdirty && mark.dirty !== id) {\n        this._dirtyAll = false;\n        dirtyParents(item, id);\n        mark.items.forEach(i => {\n          i.dirty = id;\n        });\n      }\n\n      if (mark.zdirty) continue; // handle in standard drawing pass\n\n      if (item.exit) {\n        // EXIT\n        if (mdef.nested && mark.items.length) {\n          // if nested mark with remaining points, update instead\n          o = mark.items[0];\n          if (o._svg) this._update(mdef, o._svg, o);\n        } else if (item._svg) {\n          // otherwise remove from DOM\n          o = item._svg.parentNode;\n          if (o) o.removeChild(item._svg);\n        }\n\n        item._svg = null;\n        continue;\n      }\n\n      item = mdef.nested ? mark.items[0] : item;\n      if (item._update === id) continue; // already visited\n\n      if (!item._svg || !item._svg.ownerSVGElement) {\n        // ENTER\n        this._dirtyAll = false;\n        dirtyParents(item, id);\n      } else {\n        // IN-PLACE UPDATE\n        this._update(mdef, item._svg, item);\n      }\n\n      item._update = id;\n    }\n\n    return !this._dirtyAll;\n  },\n\n  // -- Construct & maintain scenegraph to SVG mapping ---\n\n  /**\n   * Render a set of mark items.\n   * @param {SVGElement} el - The parent element in the SVG tree.\n   * @param {object} scene - The mark parent to render.\n   * @param {SVGElement} prev - The previous sibling in the SVG tree.\n   */\n  mark(el, scene, prev) {\n    if (!this.isDirty(scene)) return scene._svg;\n    const svg = this._svg,\n          mdef = Marks[scene.marktype],\n          events = scene.interactive === false ? 'none' : null,\n          isGroup = mdef.tag === 'g';\n    let sibling = null,\n        i = 0;\n    const parent = bind(scene, el, prev, 'g', svg);\n    parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element\n\n    const aria = ariaMarkAttributes(scene);\n\n    for (const key in aria) setAttribute(parent, key, aria[key]);\n\n    if (!isGroup) {\n      setAttribute(parent, 'pointer-events', events);\n    }\n\n    setAttribute(parent, 'clip-path', scene.clip ? clip(this, scene, scene.group) : null);\n\n    const process = item => {\n      const dirty = this.isDirty(item),\n            node = bind(item, parent, sibling, mdef.tag, svg);\n\n      if (dirty) {\n        this._update(mdef, node, item);\n\n        if (isGroup) recurse(this, node, item);\n      }\n\n      sibling = node;\n      ++i;\n    };\n\n    if (mdef.nested) {\n      if (scene.items.length) process(scene.items[0]);\n    } else {\n      visit(scene, process);\n    }\n\n    domClear(parent, i);\n    return parent;\n  },\n\n  /**\n   * Update the attributes of an SVG element for a mark item.\n   * @param {object} mdef - The mark definition object\n   * @param {SVGElement} el - The SVG element.\n   * @param {Item} item - The mark item.\n   */\n  _update(mdef, el, item) {\n    // set dom element and values cache\n    // provides access to emit method\n    element = el;\n    values = el.__values__; // apply aria-specific properties\n\n    ariaItemAttributes(emit, item); // apply svg attributes\n\n    mdef.attr(emit, item, this); // some marks need special treatment\n\n    const extra = mark_extras[mdef.type];\n    if (extra) extra.call(this, mdef, el, item); // apply svg style attributes\n    // note: element state may have been modified by 'extra' method\n\n    if (element) this.style(element, item);\n  },\n\n  /**\n   * Update the presentation attributes of an SVG element for a mark item.\n   * @param {SVGElement} el - The SVG element.\n   * @param {Item} item - The mark item.\n   */\n  style(el, item) {\n    if (item == null) return;\n\n    for (const prop in styles) {\n      let value = prop === 'font' ? fontFamily(item) : item[prop];\n      if (value === values[prop]) continue;\n      const name = styles[prop];\n\n      if (value == null) {\n        el.removeAttribute(name);\n      } else {\n        if (isGradient(value)) {\n          value = gradientRef(value, this._defs.gradient, href());\n        }\n\n        el.setAttribute(name, value + '');\n      }\n\n      values[prop] = value;\n    }\n  },\n\n  /**\n   * Render SVG defs, as needed.\n   * Must be called *after* marks have been processed to ensure the\n   * collected state is current and accurate.\n   */\n  defs() {\n    const svg = this._svg,\n          defs = this._defs;\n    let el = defs.el,\n        index = 0;\n\n    for (const id in defs.gradient) {\n      if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', ns);\n      index = updateGradient(el, defs.gradient[id], index);\n    }\n\n    for (const id in defs.clipping) {\n      if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', ns);\n      index = updateClipping(el, defs.clipping[id], index);\n    } // clean-up\n\n\n    if (el) {\n      index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n    }\n  },\n\n  /**\n   * Clear defs caches.\n   */\n  _clearDefs() {\n    const def = this._defs;\n    def.gradient = {};\n    def.clipping = {};\n  }\n\n}); // mark ancestor chain with a dirty id\n\nfunction dirtyParents(item, id) {\n  for (; item && item.dirty !== id; item = item.mark.group) {\n    item.dirty = id;\n\n    if (item.mark && item.mark.dirty !== id) {\n      item.mark.dirty = id;\n    } else return;\n  }\n} // update gradient definitions\n\n\nfunction updateGradient(el, grad, index) {\n  let i, n, stop;\n\n  if (grad.gradient === 'radial') {\n    // SVG radial gradients automatically transform to normalized bbox\n    // coordinates, in a way that is cumbersome to replicate in canvas.\n    // We wrap the radial gradient in a pattern element, allowing us to\n    // maintain a circular gradient that matches what canvas provides.\n    let pt = domChild(el, index++, 'pattern', ns);\n    setAttributes(pt, {\n      id: patternPrefix + grad.id,\n      viewBox: '0,0,1,1',\n      width: '100%',\n      height: '100%',\n      preserveAspectRatio: 'xMidYMid slice'\n    });\n    pt = domChild(pt, 0, 'rect', ns);\n    setAttributes(pt, {\n      width: 1,\n      height: 1,\n      fill: \"url(\".concat(href(), \"#\").concat(grad.id, \")\")\n    });\n    el = domChild(el, index++, 'radialGradient', ns);\n    setAttributes(el, {\n      id: grad.id,\n      fx: grad.x1,\n      fy: grad.y1,\n      fr: grad.r1,\n      cx: grad.x2,\n      cy: grad.y2,\n      r: grad.r2\n    });\n  } else {\n    el = domChild(el, index++, 'linearGradient', ns);\n    setAttributes(el, {\n      id: grad.id,\n      x1: grad.x1,\n      x2: grad.x2,\n      y1: grad.y1,\n      y2: grad.y2\n    });\n  }\n\n  for (i = 0, n = grad.stops.length; i < n; ++i) {\n    stop = domChild(el, i, 'stop', ns);\n    stop.setAttribute('offset', grad.stops[i].offset);\n    stop.setAttribute('stop-color', grad.stops[i].color);\n  }\n\n  domClear(el, i);\n  return index;\n} // update clipping path definitions\n\n\nfunction updateClipping(el, clip, index) {\n  let mask;\n  el = domChild(el, index, 'clipPath', ns);\n  el.setAttribute('id', clip.id);\n\n  if (clip.path) {\n    mask = domChild(el, 0, 'path', ns);\n    mask.setAttribute('d', clip.path);\n  } else {\n    mask = domChild(el, 0, 'rect', ns);\n    setAttributes(mask, {\n      x: 0,\n      y: 0,\n      width: clip.width,\n      height: clip.height\n    });\n  }\n\n  domClear(el, 1);\n  return index + 1;\n} // Recursively process group contents.\n\n\nfunction recurse(renderer, el, group) {\n  el = el.lastChild.previousSibling;\n  let prev,\n      idx = 0;\n  visit(group, item => {\n    prev = renderer.mark(el, item, prev);\n    ++idx;\n  }); // remove any extraneous DOM elements\n\n  domClear(el, 1 + idx);\n} // Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\n\n\nfunction bind(item, el, sibling, tag, svg) {\n  let node = item._svg,\n      doc; // create a new dom node if needed\n\n  if (!node) {\n    doc = el.ownerDocument;\n    node = domCreate(doc, tag, ns);\n    item._svg = node;\n\n    if (item.mark) {\n      node.__data__ = item;\n      node.__values__ = {\n        fill: 'default'\n      }; // if group, create background, content, and foreground elements\n\n      if (tag === 'g') {\n        const bg = domCreate(doc, 'path', ns);\n        node.appendChild(bg);\n        bg.__data__ = item;\n        const cg = domCreate(doc, 'g', ns);\n        node.appendChild(cg);\n        cg.__data__ = item;\n        const fg = domCreate(doc, 'path', ns);\n        node.appendChild(fg);\n        fg.__data__ = item;\n        fg.__values__ = {\n          fill: 'default'\n        };\n      }\n    }\n  } // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n\n\n  if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n    el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n  }\n\n  return node;\n} // check if two nodes are ordered siblings\n\n\nfunction siblingCheck(node, sibling) {\n  return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n} // -- Set attributes & styles on SVG elements ---\n\n\nlet element = null,\n    // temp var for current SVG element\nvalues = null; // temp var for current values hash\n// Extra configuration for certain mark types\n\nconst mark_extras = {\n  group(mdef, el, item) {\n    const fg = element = el.childNodes[2];\n    values = fg.__values__;\n    mdef.foreground(emit, item, this);\n    values = el.__values__; // use parent's values hash\n\n    element = el.childNodes[1];\n    mdef.content(emit, item, this);\n    const bg = element = el.childNodes[0];\n    mdef.background(emit, item, this);\n    const value = item.mark.interactive === false ? 'none' : null;\n\n    if (value !== values.events) {\n      setAttribute(fg, 'pointer-events', value);\n      setAttribute(bg, 'pointer-events', value);\n      values.events = value;\n    }\n\n    if (item.strokeForeground && item.stroke) {\n      const fill = item.fill;\n      setAttribute(fg, 'display', null); // set style of background\n\n      this.style(bg, item);\n      setAttribute(bg, 'stroke', null); // set style of foreground\n\n      if (fill) item.fill = null;\n      values = fg.__values__;\n      this.style(fg, item);\n      if (fill) item.fill = fill; // leave element null to prevent downstream styling\n\n      element = null;\n    } else {\n      // ensure foreground is ignored\n      setAttribute(fg, 'display', 'none');\n    }\n  },\n\n  image(mdef, el, item) {\n    if (item.smooth === false) {\n      setStyle(el, 'image-rendering', 'optimizeSpeed');\n      setStyle(el, 'image-rendering', 'pixelated');\n    } else {\n      setStyle(el, 'image-rendering', null);\n    }\n  },\n\n  text(mdef, el, item) {\n    const tl = textLines(item);\n    let key, value, doc, lh;\n\n    if (isArray(tl)) {\n      // multi-line text\n      value = tl.map(_ => textValue(item, _));\n      key = value.join('\\n'); // content cache key\n\n      if (key !== values.text) {\n        domClear(el, 0);\n        doc = el.ownerDocument;\n        lh = lineHeight(item);\n        value.forEach((t, i) => {\n          const ts = domCreate(doc, 'tspan', ns);\n          ts.__data__ = item; // data binding\n\n          ts.textContent = t;\n\n          if (i) {\n            ts.setAttribute('x', 0);\n            ts.setAttribute('dy', lh);\n          }\n\n          el.appendChild(ts);\n        });\n        values.text = key;\n      }\n    } else {\n      // single-line text\n      value = textValue(item, tl);\n\n      if (value !== values.text) {\n        el.textContent = value;\n        values.text = value;\n      }\n    }\n\n    setAttribute(el, 'font-family', fontFamily(item));\n    setAttribute(el, 'font-size', fontSize(item) + 'px');\n    setAttribute(el, 'font-style', item.fontStyle);\n    setAttribute(el, 'font-variant', item.fontVariant);\n    setAttribute(el, 'font-weight', item.fontWeight);\n  }\n\n};\n\nfunction emit(name, value, ns) {\n  // early exit if value is unchanged\n  if (value === values[name]) return; // use appropriate method given namespace (ns)\n\n  if (ns) {\n    setAttributeNS(element, name, value, ns);\n  } else {\n    setAttribute(element, name, value);\n  } // note current value for future comparison\n\n\n  values[name] = value;\n}\n\nfunction setStyle(el, name, value) {\n  if (value !== values[name]) {\n    if (value == null) {\n      el.style.removeProperty(name);\n    } else {\n      el.style.setProperty(name, value + '');\n    }\n\n    values[name] = value;\n  }\n}\n\nfunction setAttributes(el, attrs) {\n  for (const key in attrs) {\n    setAttribute(el, key, attrs[key]);\n  }\n}\n\nfunction setAttribute(el, name, value) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttribute(name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttribute(name);\n  }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n  if (value != null) {\n    // if value is provided, update DOM attribute\n    el.setAttributeNS(ns, name, value);\n  } else {\n    // else remove DOM attribute\n    el.removeAttributeNS(ns, name);\n  }\n}\n\nfunction href() {\n  let loc;\n  return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n  Renderer.call(this, loader);\n  this._text = null;\n  this._defs = {\n    gradient: {},\n    clipping: {}\n  };\n}\ninherits(SVGStringRenderer, Renderer, {\n  /**\n   * Returns the rendered SVG text string,\n   * or null if rendering has not yet occurred.\n   */\n  svg() {\n    return this._text;\n  },\n\n  /**\n   * Internal rendering method.\n   * @param {object} scene - The root mark of a scenegraph to render.\n   */\n  _render(scene) {\n    const m = markup(); // svg tag\n\n    m.open('svg', extend({}, metadata, {\n      class: 'marks',\n      width: this._width * this._scale,\n      height: this._height * this._scale,\n      viewBox: \"0 0 \".concat(this._width, \" \").concat(this._height)\n    })); // background, if defined\n\n    const bg = this._bgcolor;\n\n    if (bg && bg !== 'transparent' && bg !== 'none') {\n      m.open('rect', {\n        width: this._width,\n        height: this._height,\n        fill: bg\n      }).close();\n    } // root content group\n\n\n    m.open('g', rootAttributes, {\n      transform: 'translate(' + this._origin + ')'\n    });\n    this.mark(m, scene);\n    m.close(); // </g>\n    // defs\n\n    this.defs(m); // get SVG text string\n\n    this._text = m.close() + '';\n    return this;\n  },\n\n  /**\n   * Render a set of mark items.\n   * @param {object} m - The markup context.\n   * @param {object} scene - The mark parent to render.\n   */\n  mark(m, scene) {\n    const mdef = Marks[scene.marktype],\n          tag = mdef.tag,\n          attrList = [ariaItemAttributes, mdef.attr]; // render opening group tag\n\n    m.open('g', {\n      'class': cssClass(scene),\n      'clip-path': scene.clip ? clip(this, scene, scene.group) : null\n    }, ariaMarkAttributes(scene), {\n      'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n    }); // render contained elements\n\n    const process = item => {\n      const href = this.href(item);\n      if (href) m.open('a', href);\n      m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n\n      if (tag === 'text') {\n        const tl = textLines(item);\n\n        if (isArray(tl)) {\n          // multi-line text\n          const attrs = {\n            x: 0,\n            dy: lineHeight(item)\n          };\n\n          for (let i = 0; i < tl.length; ++i) {\n            m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n          }\n        } else {\n          // single-line text\n          m.text(textValue(item, tl));\n        }\n      } else if (tag === 'g') {\n        const fore = item.strokeForeground,\n              fill = item.fill,\n              stroke = item.stroke;\n\n        if (fore && stroke) {\n          item.stroke = null;\n        }\n\n        m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close(); // recurse for group content\n\n        m.open('g', this.attr(scene, item, mdef.content));\n        visit(item, scene => this.mark(m, scene));\n        m.close();\n\n        if (fore && stroke) {\n          if (fill) item.fill = null;\n          item.stroke = stroke;\n          m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n          if (fill) item.fill = fill;\n        } else {\n          m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n        }\n      }\n\n      m.close(); // </tag>\n\n      if (href) m.close(); // </a>\n    };\n\n    if (mdef.nested) {\n      if (scene.items && scene.items.length) process(scene.items[0]);\n    } else {\n      visit(scene, process);\n    } // render closing group tag\n\n\n    return m.close(); // </g>\n  },\n\n  /**\n   * Get href attributes for a hyperlinked mark item.\n   * @param {Item} item - The mark item.\n   */\n  href(item) {\n    const href = item.href;\n    let attr;\n\n    if (href) {\n      if (attr = this._hrefs && this._hrefs[href]) {\n        return attr;\n      } else {\n        this.sanitizeURL(href).then(attr => {\n          // rewrite to use xlink namespace\n          attr['xlink:href'] = attr.href;\n          attr.href = null;\n          (this._hrefs || (this._hrefs = {}))[href] = attr;\n        });\n      }\n    }\n\n    return null;\n  },\n\n  /**\n   * Get an object of SVG attributes for a mark item.\n   * @param {object} scene - The mark parent.\n   * @param {Item} item - The mark item.\n   * @param {array|function} attrs - One or more attribute emitters.\n   * @param {string} tag - The tag being rendered.\n   */\n  attr(scene, item, attrs, tag) {\n    const object = {},\n          emit = (name, value, ns, prefixed) => {\n      object[prefixed || name] = value;\n    }; // apply mark specific attributes\n\n\n    if (Array.isArray(attrs)) {\n      attrs.forEach(fn => fn(emit, item, this));\n    } else {\n      attrs(emit, item, this);\n    } // apply style attributes\n\n\n    if (tag) {\n      style(object, item, scene, tag, this._defs);\n    }\n\n    return object;\n  },\n\n  /**\n   * Render SVG defs, as needed.\n   * Must be called *after* marks have been processed to ensure the\n   * collected state is current and accurate.\n   * @param {object} m - The markup context.\n   */\n  defs(m) {\n    const gradient = this._defs.gradient,\n          clipping = this._defs.clipping,\n          count = Object.keys(gradient).length + Object.keys(clipping).length;\n    if (count === 0) return; // nothing to do\n\n    m.open('defs');\n\n    for (const id in gradient) {\n      const def = gradient[id],\n            stops = def.stops;\n\n      if (def.gradient === 'radial') {\n        // SVG radial gradients automatically transform to normalized bbox\n        // coordinates, in a way that is cumbersome to replicate in canvas.\n        // We wrap the radial gradient in a pattern element, allowing us to\n        // maintain a circular gradient that matches what canvas provides.\n        m.open('pattern', {\n          id: patternPrefix + id,\n          viewBox: '0,0,1,1',\n          width: '100%',\n          height: '100%',\n          preserveAspectRatio: 'xMidYMid slice'\n        });\n        m.open('rect', {\n          width: '1',\n          height: '1',\n          fill: 'url(#' + id + ')'\n        }).close();\n        m.close(); // </pattern>\n\n        m.open('radialGradient', {\n          id: id,\n          fx: def.x1,\n          fy: def.y1,\n          fr: def.r1,\n          cx: def.x2,\n          cy: def.y2,\n          r: def.r2\n        });\n      } else {\n        m.open('linearGradient', {\n          id: id,\n          x1: def.x1,\n          x2: def.x2,\n          y1: def.y1,\n          y2: def.y2\n        });\n      }\n\n      for (let i = 0; i < stops.length; ++i) {\n        m.open('stop', {\n          offset: stops[i].offset,\n          'stop-color': stops[i].color\n        }).close();\n      }\n\n      m.close();\n    }\n\n    for (const id in clipping) {\n      const def = clipping[id];\n      m.open('clipPath', {\n        id: id\n      });\n\n      if (def.path) {\n        m.open('path', {\n          d: def.path\n        }).close();\n      } else {\n        m.open('rect', {\n          x: 0,\n          y: 0,\n          width: def.width,\n          height: def.height\n        }).close();\n      }\n\n      m.close();\n    }\n\n    m.close();\n  }\n\n}); // Helper function for attr for style presentation attributes\n\nfunction style(s, item, scene, tag, defs) {\n  if (item == null) return s;\n\n  if (tag === 'bgrect' && scene.interactive === false) {\n    s['pointer-events'] = 'none';\n  }\n\n  if (tag === 'bgfore') {\n    if (scene.interactive === false) {\n      s['pointer-events'] = 'none';\n    }\n\n    s.display = 'none';\n    if (item.fill !== null) return s;\n  }\n\n  if (tag === 'image' && item.smooth === false) {\n    s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n  }\n\n  if (tag === 'text') {\n    s['font-family'] = fontFamily(item);\n    s['font-size'] = fontSize(item) + 'px';\n    s['font-style'] = item.fontStyle;\n    s['font-variant'] = item.fontVariant;\n    s['font-weight'] = item.fontWeight;\n  }\n\n  for (const prop in styles) {\n    let value = item[prop];\n    const name = styles[prop];\n\n    if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n      if (isGradient(value)) {\n        value = gradientRef(value, defs.gradient, '');\n      }\n\n      s[name] = value;\n    }\n  }\n\n  return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n  Canvas: Canvas,\n  PNG: PNG,\n  SVG: SVG,\n  None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n  renderer: CanvasRenderer,\n  headless: CanvasRenderer,\n  handler: CanvasHandler\n};\nmodules[SVG] = {\n  renderer: SVGRenderer,\n  headless: SVGStringRenderer,\n  handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n  name = String(name || '').toLowerCase();\n\n  if (arguments.length > 1) {\n    modules[name] = _;\n    return this;\n  } else {\n    return modules[name];\n  }\n}\n\nfunction intersect(scene, bounds, filter) {\n  const hits = [],\n        // intersection results\n  box = new Bounds().union(bounds),\n        // defensive copy\n  type = scene.marktype;\n  return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n  if (visitMark(mark, box, filter)) {\n    const items = mark.items,\n          type = mark.marktype,\n          n = items.length;\n    let i = 0;\n\n    if (type === 'group') {\n      for (; i < n; ++i) {\n        intersectGroup(items[i], box, filter, hits);\n      }\n    } else {\n      for (const test = Marks[type].isect; i < n; ++i) {\n        const item = items[i];\n        if (intersectItem(item, box, test)) hits.push(item);\n      }\n    }\n  }\n\n  return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n  // process if bounds intersect and if\n  // (1) mark is a group mark (so we must recurse), or\n  // (2) mark is interactive and passes filter\n  return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n  // test intersect against group\n  // skip groups by default unless filter says otherwise\n  if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n    hits.push(group);\n  } // recursively test children marks\n  // translate box to group coordinate space\n\n\n  const marks = group.items,\n        n = marks && marks.length;\n\n  if (n) {\n    const x = group.x || 0,\n          y = group.y || 0;\n    box.translate(-x, -y);\n\n    for (let i = 0; i < n; ++i) {\n      intersectMark(marks[i], box, filter, hits);\n    }\n\n    box.translate(x, y);\n  }\n\n  return hits;\n}\n\nfunction intersectItem(item, box, test) {\n  // test bounds enclosure, bounds intersection, then detailed test\n  const bounds = item.bounds;\n  return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n  const clip = mark.clip;\n\n  if (isFunction(clip)) {\n    clip(boundContext(clipBounds.clear()));\n  } else if (clip) {\n    clipBounds.set(0, 0, mark.group.width, mark.group.height);\n  } else return;\n\n  mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n  return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n  return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n  var ka = Object.keys(a),\n      kb = Object.keys(b),\n      key,\n      i;\n  if (ka.length !== kb.length) return false;\n  ka.sort();\n  kb.sort();\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) return false;\n  }\n\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!sceneEqual(a[key], b[key], key)) return false;\n  }\n\n  return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n  resetSVGClipId();\n  resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import {getScale} from '../scales';\nimport {scale as get, scaleFraction} from 'vega-scale';\nimport {Gradient} from 'vega-scenegraph';\nimport {identity, peek} from 'vega-util';\n\nexport default function(scale, p0, p1, count, group) {\n  scale = getScale(scale, (group || this).context);\n\n  const gradient = Gradient(p0, p1);\n\n  let stops = scale.domain(),\n      min = stops[0],\n      max = peek(stops),\n      fraction = identity;\n\n  if (!(max - min)) {\n    // expand scale if domain has zero span, fix #1479\n    scale = (scale.interpolator\n      ? get('sequential')().interpolator(scale.interpolator())\n      : get('linear')().interpolate(scale.interpolate()).range(scale.range())\n    ).domain([min=0, max=1]);\n  } else {\n    fraction = scaleFraction(scale, min, max);\n  }\n\n  if (scale.ticks) {\n    stops = scale.ticks(+count || 15);\n    if (min !== stops[0]) stops.unshift(min);\n    if (max !== peek(stops)) stops.push(max);\n  }\n\n  stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n\n  return gradient;\n}\n","import {getScale} from '../scales';\nimport {pathParse, pathRender} from 'vega-scenegraph';\n\nexport function geoShape(projection, geojson, group) {\n  const p = getScale(projection, (group || this).context);\n  return function(context) {\n    return p ? p.path.context(context)(geojson) : '';\n  };\n}\n\nexport function pathShape(path) {\n  let p = null;\n  return function(context) {\n    return context\n      ? pathRender(context, (p = p || pathParse(path)))\n      : path;\n  };\n}\n","import {data} from './data';\n\nconst datum = d => d.data;\n\nfunction treeNodes(name, context) {\n  const tree = data.call(context, name);\n  return tree.root && tree.root.lookup || {};\n}\n\nexport function treePath(name, source, target) {\n  const nodes = treeNodes(name, this),\n        s = nodes[source],\n        t = nodes[target];\n  return s && t ? s.path(t).map(datum) : undefined;\n}\n\nexport function treeAncestors(name, node) {\n  const n = treeNodes(name, this)[node];\n  return n ? n.ancestors().map(datum) : undefined;\n}\n","const _window = () => (typeof window !== 'undefined' && window) || null;\n\nexport function screen() {\n  const w = _window();\n  return w ? w.screen : {};\n}\n\nexport function windowSize() {\n  const w = _window();\n  return w\n    ? [w.innerWidth, w.innerHeight]\n    : [undefined, undefined];\n}\n\nexport function containerSize() {\n  const view = this.context.dataflow,\n        el = view.container && view.container();\n  return el\n    ? [el.clientWidth, el.clientHeight]\n    : [undefined, undefined];\n}\n","import {Bounds, intersect} from 'vega-scenegraph';\nimport {array} from 'vega-util';\n\nexport default function(b, opt, group) {\n  if (!b) return [];\n\n  const [u, v] = b,\n        box = new Bounds().set(u[0], u[1], v[0], v[1]),\n        scene = group || this.context.dataflow.scenegraph().root;\n\n  return intersect(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n  let p = null;\n\n  if (opt) {\n    const types = array(opt.marktype),\n          names = array(opt.markname);\n    p = _ => (!types.length || types.some(t => _.marktype === t))\n          && (!names.length || names.some(s => _.name === s));\n  }\n\n  return p;\n}","import {\n  codegen,\n  constants,\n  functions\n} from 'vega-expression';\n\nimport {\n  isTuple\n} from 'vega-dataflow';\n\nimport {\n  selectionResolve,\n  selectionTest,\n  selectionVisitor\n} from 'vega-selections';\n\nimport {\n  cumulativeLogNormal,\n  cumulativeNormal,\n  cumulativeUniform,\n  densityLogNormal,\n  densityNormal,\n  densityUniform,\n  quantileLogNormal,\n  quantileNormal,\n  quantileUniform,\n  random,\n  sampleLogNormal,\n  sampleNormal,\n  sampleUniform\n} from 'vega-statistics';\n\nimport {\n  dayofyear,\n  timeOffset,\n  timeSequence,\n  timeUnitSpecifier,\n  utcOffset,\n  utcSequence,\n  utcdayofyear,\n  utcweek,\n  week\n} from 'vega-time';\n\nimport {\n  clampRange,\n  extend,\n  extent,\n  flush,\n  inrange,\n  isArray,\n  isBoolean,\n  isDate,\n  isNumber,\n  isObject,\n  isRegExp,\n  isString,\n  lerp,\n  pad,\n  panLinear,\n  panLog,\n  panPow,\n  panSymlog,\n  peek,\n  quarter,\n  span,\n  stringValue,\n  toBoolean,\n  toDate,\n  toNumber,\n  toString,\n  truncate,\n  utcquarter,\n  zoomLinear,\n  zoomLog,\n  zoomPow,\n  zoomSymlog\n} from 'vega-util';\n\nimport {\n  range as sequence\n} from 'd3-array';\n\nimport {\n  hcl,\n  hsl,\n  lab,\n  rgb\n} from 'd3-color';\n\nimport {\n  contrast,\n  luminance\n} from './functions/luminance';\n\nimport {\n  data,\n  indata,\n  setdata\n} from './functions/data';\n\nimport encode from './functions/encode';\n\nimport {\n  dayAbbrevFormat,\n  dayFormat,\n  format,\n  monthAbbrevFormat,\n  monthFormat,\n  timeFormat,\n  timeParse,\n  utcFormat,\n  utcParse\n} from './functions/format';\n\nimport {\n  geoArea,\n  geoBounds,\n  geoCentroid\n} from './functions/geo';\n\nimport inScope from './functions/inscope';\n\nimport intersect from './functions/intersect';\n\nimport {\n  debug,\n  info,\n  warn\n} from './functions/log';\n\nimport merge from './functions/merge';\n\nimport modify from './functions/modify';\n\nimport {\n  pinchAngle,\n  pinchDistance\n} from './functions/pinch';\n\nimport {\n  bandspace,\n  bandwidth,\n  copy,\n  domain,\n  invert,\n  range,\n  scale\n} from './functions/scale';\n\nimport scaleGradient from './functions/scale-gradient';\n\nimport {\n  geoShape,\n  pathShape\n} from './functions/shape';\n\nimport {\n  treeAncestors,\n  treePath\n} from './functions/tree';\n\nimport {\n  containerSize,\n  screen,\n  windowSize\n} from './functions/window';\n\nimport {\n  SignalPrefix\n} from './constants';\n\nimport {\n  internalScaleFunctions\n} from './scales';\n\nimport {\n  dataVisitor,\n  indataVisitor,\n  scaleVisitor\n} from './visitors';\n\n// Expression function context object\nexport const functionContext = {\n  random() { return random(); }, // override default\n  cumulativeNormal,\n  cumulativeLogNormal,\n  cumulativeUniform,\n  densityNormal,\n  densityLogNormal,\n  densityUniform,\n  quantileNormal,\n  quantileLogNormal,\n  quantileUniform,\n  sampleNormal,\n  sampleLogNormal,\n  sampleUniform,\n  isArray,\n  isBoolean,\n  isDate,\n  isDefined(_) { return _ !== undefined; },\n  isNumber,\n  isObject,\n  isRegExp,\n  isString,\n  isTuple,\n  isValid(_) { return _ != null && _ === _; },\n  toBoolean,\n  toDate,\n  toNumber,\n  toString,\n  flush,\n  lerp,\n  merge,\n  pad,\n  peek,\n  span,\n  inrange,\n  truncate,\n  rgb,\n  lab,\n  hcl,\n  hsl,\n  luminance,\n  contrast,\n  sequence,\n  format,\n  utcFormat,\n  utcParse,\n  utcOffset,\n  utcSequence,\n  timeFormat,\n  timeParse,\n  timeOffset,\n  timeSequence,\n  timeUnitSpecifier,\n  monthFormat,\n  monthAbbrevFormat,\n  dayFormat,\n  dayAbbrevFormat,\n  quarter,\n  utcquarter,\n  week,\n  utcweek,\n  dayofyear,\n  utcdayofyear,\n  warn,\n  info,\n  debug,\n  extent,\n  inScope,\n  intersect,\n  clampRange,\n  pinchDistance,\n  pinchAngle,\n  screen,\n  containerSize,\n  windowSize,\n  bandspace,\n  setdata,\n  pathShape,\n  panLinear,\n  panLog,\n  panPow,\n  panSymlog,\n  zoomLinear,\n  zoomLog,\n  zoomPow,\n  zoomSymlog,\n  encode,\n  modify\n};\n\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions\n      eventPrefix = 'event.vega.', // event function prefix\n      thisPrefix = 'this.', // function context prefix\n      astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nexport const codegenParams = {\n  blacklist:  ['_'],\n  whitelist:  ['datum', 'event', 'item'],\n  fieldvar:   'datum',\n  globalvar:  id => `_[${stringValue(SignalPrefix + id)}]`,\n  functions:  buildFunctions,\n  constants:  constants,\n  visitors:   astVisitors\n};\n\n// export code generator\nexport const codeGenerator = codegen(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n  const fn = functions(codegen);\n  eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n  for (const name in functionContext) { fn[name] = thisPrefix + name; }\n  extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n  return fn;\n}\n\n// Register an expression function\nexport function expressionFunction(name, fn, visitor) {\n  if (arguments.length === 1) {\n    return functionContext[name];\n  }\n\n  // register with the functionContext\n  functionContext[name] = fn;\n\n  // if there is an astVisitor register that, too\n  if (visitor) astVisitors[name] = visitor;\n\n  // if the code generator has already been initialized,\n  // we need to also register the function with it\n  if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n  return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\n","import {codeGenerator, codegenParams} from './codegen';\nimport {SignalPrefix} from './constants';\nimport {CallExpression, parse} from 'vega-expression';\nimport {error, extend, hasOwnProperty, isString, stringValue} from 'vega-util';\n\nexport default function(expr, scope) {\n  const params = {};\n\n  // parse the expression to an abstract syntax tree (ast)\n  let ast;\n  try {\n    expr = isString(expr) ? expr : (stringValue(expr) + '');\n    ast = parse(expr);\n  } catch (err) {\n    error('Expression parse error: ' + expr);\n  }\n\n  // analyze ast function calls for dependencies\n  ast.visit(node => {\n    if (node.type !== CallExpression) return;\n    const name = node.callee.name,\n          visit = codegenParams.visitors[name];\n    if (visit) visit(name, node.arguments, scope, params);\n  });\n\n  // perform code generation\n  const gen = codeGenerator(ast);\n\n  // collect signal dependencies\n  gen.globals.forEach(name => {\n    const signalName = SignalPrefix + name;\n    if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n      params[signalName] = scope.signalRef(name);\n    }\n  });\n\n  // return generated expression code and dependencies\n  return {\n    $expr:   extend({code: gen.code}, scope.options.ast ? {ast} : null),\n    $fields: gen.fields,\n    $params: params\n  };\n}\n","export {\n  data,\n  indata,\n  setdata\n} from './src/functions/data';\n\nexport {\n  default as encode\n} from './src/functions/encode';\n\nexport {\n  format,\n  utcFormat,\n  timeFormat,\n  utcParse,\n  timeParse,\n  monthFormat,\n  monthAbbrevFormat,\n  dayFormat,\n  dayAbbrevFormat\n} from './src/functions/format';\n\nexport {\n  geoArea,\n  geoBounds,\n  geoCentroid\n} from './src/functions/geo';\n\nexport {\n  default as inScope\n} from './src/functions/inscope';\n\nexport {\n  warn,\n  info,\n  debug\n} from './src/functions/log';\n\nexport {\n  luminance,\n  contrast\n} from './src/functions/luminance';\n\nexport {\n  default as merge\n} from './src/functions/merge';\n\nexport {\n  default as modify\n} from './src/functions/modify';\n\nexport {\n  pinchDistance,\n  pinchAngle\n} from './src/functions/pinch';\n\nexport {\n  range,\n  domain,\n  bandwidth,\n  bandspace,\n  copy,\n  scale,\n  invert\n} from './src/functions/scale';\n\nexport {\n  default as scaleGradient\n} from './src/functions/scale-gradient';\n\nexport {\n  geoShape,\n  pathShape\n} from './src/functions/shape';\n\nexport {\n  treePath,\n  treeAncestors\n} from './src/functions/tree';\n\nexport {\n  containerSize,\n  screen,\n  windowSize\n} from './src/functions/window';\n\nexport {\n  codegenParams,\n  codeGenerator,\n  expressionFunction,\n  functionContext\n} from './src/codegen';\n\nexport {\n  DataPrefix,\n  IndexPrefix,\n  ScalePrefix,\n  SignalPrefix\n} from './src/constants.js';\n\nexport {\n  default as parseExpression\n} from './src/parser';\n\nexport {\n  dataVisitor,\n  indataVisitor,\n  scaleVisitor\n} from './src/visitors';\n","import {isObject} from 'vega-util';\n\nexport default function(spec) {\n  return isObject(spec) ? spec : {type: spec || 'pad'};\n}\n","import {isObject} from 'vega-util';\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({top: _, bottom: _, left: _, right: _});\n\nexport default function(spec) {\n  return !isObject(spec) ? paddingObject(number(spec))\n    : spec.signal ? spec\n    : {\n        top:    number(spec.top),\n        bottom: number(spec.bottom),\n        left:   number(spec.left),\n        right:  number(spec.right)\n      };\n}\n","import {extend, hasOwnProperty, isArray, isObject} from 'vega-util';\n\nexport const encoder = _ => isObject(_) && !isArray(_)\n  ? extend({}, _)\n  : {value: _};\n\nexport function addEncode(object, name, value, set) {\n  if (value != null) {\n    const isEncoder = (\n      (isObject(value) && !isArray(value)) ||\n      (isArray(value) && value.length && isObject(value[0]))\n    );\n\n    // Always assign signal to update, even if the signal is from the enter block\n    if (isEncoder) {\n      object.update[name] = value;\n    } else {\n      object[set || 'enter'][name] = {value: value};\n    }\n    return 1;\n  } else {\n    return 0;\n  }\n}\n\nexport function addEncoders(object, enter, update) {\n  for (const name in enter) {\n    addEncode(object, name, enter[name]);\n  }\n  for (const name in update) {\n    addEncode(object, name, update[name], 'update');\n  }\n}\n\nexport function extendEncode(encode, extra, skip) {\n  for (const name in extra) {\n    if (skip && hasOwnProperty(skip, name)) continue;\n    encode[name] = extend(encode[name] || {}, extra[name]);\n  }\n  return encode;\n}\n\nexport function has(key, encode) {\n  return encode && (\n    (encode.enter && encode.enter[key]) ||\n    (encode.update && encode.update[key])\n  );\n}\n","export const MarkRole = 'mark';\nexport const FrameRole = 'frame';\nexport const ScopeRole = 'scope';\n\nexport const AxisRole = 'axis';\nexport const AxisDomainRole = 'axis-domain';\nexport const AxisGridRole = 'axis-grid';\nexport const AxisLabelRole = 'axis-label';\nexport const AxisTickRole = 'axis-tick';\nexport const AxisTitleRole = 'axis-title';\n\nexport const LegendRole = 'legend';\nexport const LegendBandRole = 'legend-band';\nexport const LegendEntryRole = 'legend-entry';\nexport const LegendGradientRole = 'legend-gradient';\nexport const LegendLabelRole = 'legend-label';\nexport const LegendSymbolRole = 'legend-symbol';\nexport const LegendTitleRole = 'legend-title';\n\nexport const TitleRole = 'title';\nexport const TitleTextRole = 'title-text';\nexport const TitleSubtitleRole = 'title-subtitle';\n","import {has} from './util';\nimport {FrameRole, MarkRole} from '../marks/roles';\nimport {array, extend} from 'vega-util';\n\nexport default function(encode, type, role, style, config) {\n  const defaults = {}, enter = {};\n  let update, key, skip, props;\n\n  // if text mark, apply global lineBreak settings (#2370)\n  key = 'lineBreak';\n  if (type === 'text' && config[key] != null && !has(key, encode)) {\n    applyDefault(defaults, key, config[key]);\n  }\n\n  // ignore legend and axis roles\n  if (role == 'legend' || String(role).startsWith('axis')) {\n    role = null;\n  }\n\n  // resolve mark config\n  props = role === FrameRole ? config.group\n    : (role === MarkRole) ? extend({}, config.mark, config[type])\n    : null;\n\n  for (key in props) {\n    // do not apply defaults if relevant fields are defined\n    skip = has(key, encode)\n      || (key === 'fill' || key === 'stroke')\n      && (has('fill', encode) || has('stroke', encode));\n\n    if (!skip) applyDefault(defaults, key, props[key]);\n  }\n\n  // resolve styles, apply with increasing precedence\n  array(style).forEach(name => {\n    const props = config.style && config.style[name];\n    for (const key in props) {\n      if (!has(key, encode)) {\n        applyDefault(defaults, key, props[key]);\n      }\n    }\n  });\n\n  encode = extend({}, encode); // defensive copy\n  for (key in defaults) {\n    props = defaults[key];\n    if (props.signal) {\n      (update = update || {})[key] = props;\n    } else {\n      enter[key] = props;\n    }\n  }\n\n  encode.enter = extend(enter, encode.enter);\n  if (update) encode.update = extend(update, encode.update);\n\n  return encode;\n}\n\nfunction applyDefault(defaults, key, value) {\n  defaults[key] = value && value.signal\n    ? {signal: value.signal}\n    : {value: value};\n}\n","import {error, isObject, isString, peek, splitAccessPath, stringValue} from 'vega-util';\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale)\n  : scale.signal ? `(${scale.signal})`\n  : field(scale);\n\nexport default function entry(enc) {\n  if (enc.gradient != null) {\n    return gradient(enc);\n  }\n\n  let value = enc.signal ? `(${enc.signal})`\n    : enc.color ? color(enc.color)\n    : enc.field != null ? field(enc.field)\n    : enc.value !== undefined ? stringValue(enc.value)\n    : undefined;\n\n  if (enc.scale != null) {\n    value = scale(enc, value);\n  }\n\n  if (value === undefined) {\n    value = null;\n  }\n\n  if (enc.exponent != null) {\n    value = `pow(${value},${property(enc.exponent)})`;\n  }\n\n  if (enc.mult != null) {\n    value += `*${property(enc.mult)}`;\n  }\n\n  if (enc.offset != null) {\n    value += `+${property(enc.offset)}`;\n  }\n\n  if (enc.round) {\n    value = `round(${value})`;\n  }\n\n  return value;\n}\n\nconst _color = (type, x, y, z) =>\n  `(${type}(${[x, y, z].map(entry).join(',')})+'')`;\n\nfunction color(enc) {\n  return (enc.c) ? _color('hcl', enc.h, enc.c, enc.l)\n    : (enc.h || enc.s) ? _color('hsl', enc.h, enc.s, enc.l)\n    : (enc.l || enc.a) ? _color('lab', enc.l, enc.a, enc.b)\n    : (enc.r || enc.g || enc.b) ? _color('rgb', enc.r, enc.g, enc.b)\n    : null;\n}\n\nfunction gradient(enc) {\n  // map undefined to null; expression lang does not allow undefined\n  const args = [enc.start, enc.stop, enc.count]\n    .map(_ => _ == null ? null : stringValue(_));\n\n  // trim null inputs from the end\n  while (args.length && peek(args) == null) args.pop();\n\n  args.unshift(scaleRef(enc.gradient));\n  return `gradient(${args.join(',')})`;\n}\n\nfunction property(property) {\n  return isObject(property) ? '(' + entry(property) + ')' : property;\n}\n\nfunction field(ref) {\n  return resolveField(isObject(ref) ? ref : {datum: ref});\n}\n\nfunction resolveField(ref) {\n  let object, level, field;\n\n  if (ref.signal) {\n    object = 'datum';\n    field = ref.signal;\n  } else if (ref.group || ref.parent) {\n    level = Math.max(1, ref.level || 1);\n    object = 'item';\n\n    while (level-- > 0) {\n      object += '.mark.group';\n    }\n\n    if (ref.parent) {\n      field = ref.parent;\n      object += '.datum';\n    } else {\n      field = ref.group;\n    }\n  } else if (ref.datum) {\n    object = 'datum';\n    field = ref.datum;\n  } else {\n    error('Invalid field reference: ' + stringValue(ref));\n  }\n\n  if (!ref.signal) {\n    field = isString(field)\n      ? splitAccessPath(field).map(stringValue).join('][')\n      : resolveField(field);\n  }\n\n  return object + '[' + field + ']';\n}\n\nfunction scale(enc, value) {\n  const scale = scaleRef(enc.scale);\n\n  if (enc.range != null) {\n    // pull value from scale range\n    value = `lerp(_range(${scale}), ${+enc.range})`;\n  } else {\n    // run value through scale and/or pull scale bandwidth\n    if (value !== undefined) value = `_scale(${scale}, ${value})`;\n\n    if (enc.band) {\n      value = (value ? value + '+' : '')\n        + `_bandwidth(${scale})`\n        + (+enc.band === 1 ? '' : '*' + property(enc.band));\n\n      if (enc.extra) {\n        // include logic to handle extraneous elements\n        value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n      }\n    }\n\n    if (value == null) value = '0';\n  }\n\n  return value;\n}\n","import entry from './entry';\nimport {peek} from 'vega-util';\n\nexport default function(enc) {\n  let code = '';\n\n  enc.forEach(rule => {\n    const value = entry(rule);\n    code += rule.test ? `(${rule.test})?${value}:` : value;\n  });\n\n  // if no else clause, terminate with null (#1366)\n  if (peek(code) === ':') {\n    code += 'null';\n  }\n\n  return code;\n}\n","import applyDefaults from './encode/defaults';\nimport entry from './encode/entry';\nimport rule from './encode/rule';\n\nimport {parseExpression} from 'vega-functions';\nimport {extend, isArray} from 'vega-util';\n\nexport default function(encode, type, role, style, scope, params) {\n  const enc = {};\n  params = params || {};\n  params.encoders = {$encode: enc};\n\n  encode = applyDefaults(encode, type, role, style, scope.config);\n  for (const key in encode) {\n    enc[key] = parseBlock(encode[key], type, params, scope);\n  }\n\n  return params;\n}\n\nfunction parseBlock(block, marktype, params, scope) {\n  const channels = {},\n        fields = {};\n\n  for (const name in block) {\n    if (block[name] != null) { // skip any null entries\n      channels[name] = parse(expr(block[name]), scope, params, fields);\n    }\n  }\n\n  return {\n    $expr:   {marktype, channels},\n    $fields: Object.keys(fields),\n    $output: Object.keys(block)\n  };\n}\n\nfunction expr(enc) {\n  return isArray(enc) ? rule(enc) : entry(enc);\n}\n\nfunction parse(code, scope, params, fields) {\n  const expr = parseExpression(code, scope);\n  expr.$fields.forEach(name => fields[name] = 1);\n  extend(params, expr.$params);\n  return expr.$expr;\n}\n","import {error, stringValue} from 'vega-util';\n\nconst OUTER = 'outer',\n      OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\n\nfunction outerError(prefix, name) {\n  error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\n\nexport default function(signal, scope) {\n  const name = signal.name;\n\n  if (signal.push === OUTER) {\n    // signal must already be defined, raise error if not\n    if (!scope.signals[name]) outerError('No prior signal definition', name);\n    // signal push must not use properties reserved for standard definition\n    OUTER_INVALID.forEach(prop => {\n      if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n    });\n  } else {\n    // define a new signal in the current scope\n    const op = scope.addSignal(name, signal.value);\n    if (signal.react === false) op.react = false;\n    if (signal.bind) scope.addBinding(name, signal.bind);\n  }\n}\n","import {isObject} from 'vega-util';\n\nexport function Entry(type, value, params, parent) {\n  this.id = -1;\n  this.type = type;\n  this.value = value;\n  this.params = params;\n  if (parent) this.parent = parent;\n}\n\nexport function entry(type, value, params, parent) {\n  return new Entry(type, value, params, parent);\n}\n\nexport function operator(value, params) {\n  return entry('operator', value, params);\n}\n\n// -----\n\nexport function ref(op) {\n  const ref = {$ref: op.id};\n  // if operator not yet registered, cache ref to resolve later\n  if (op.id < 0) (op.refs = op.refs || []).push(ref);\n  return ref;\n}\n\nexport const tupleidRef = {\n  $tupleid: 1,\n  toString: function() { return ':_tupleid_:'; }\n};\n\nexport function fieldRef(field, name) {\n  return name ? {$field: field, $name: name} : {$field: field};\n}\n\nexport const keyFieldRef = fieldRef('key');\n\nexport function compareRef(fields, orders) {\n  return {$compare: fields, $order: orders};\n}\n\nexport function keyRef(fields, flat) {\n  const ref = {$key: fields};\n  if (flat) ref.$flat = true;\n  return ref;\n}\n\n// -----\n\nexport const Ascending  = 'ascending';\n\nexport const Descending = 'descending';\n\nexport function sortKey(sort) {\n  return !isObject(sort) ? ''\n    : (sort.order === Descending ? '-' : '+')\n      + aggrField(sort.op, sort.field);\n}\n\nexport function aggrField(op, field) {\n  return (op && op.signal ? '$' + op.signal : op || '')\n    + (op && field ? '_' : '')\n    + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nexport const Scope = 'scope';\n\nexport const View = 'view';\n\nexport function isSignal(_) {\n  return _ && _.signal;\n}\n\nexport function isExpr(_) {\n  return _ && _.expr;\n}\n\nexport function hasSignal(_) {\n  if (isSignal(_)) return true;\n  if (isObject(_)) for (const key in _) {\n    if (hasSignal(_[key])) return true;\n  }\n  return false;\n}\n\nexport function value(specValue, defaultValue) {\n  return specValue != null ? specValue : defaultValue;\n}\n\nexport function deref(v) {\n  return v && v.signal || v;\n}\n","import {Scope, View} from '../util';\nimport {parseExpression} from 'vega-functions';\nimport {error, stringValue} from 'vega-util';\n\nconst Timer = 'timer';\n\nexport default function parseStream(stream, scope) {\n  const method = stream.merge ? mergeStream\n    : stream.stream ? nestedStream\n    : stream.type ? eventStream\n    : error('Invalid stream specification: ' + stringValue(stream));\n\n  return method(stream, scope);\n}\n\nfunction eventSource(source) {\n   return source === Scope ? View : (source || View);\n}\n\nfunction mergeStream(stream, scope) {\n  const list = stream.merge.map(s => parseStream(s, scope)),\n        entry = streamParameters({merge: list}, stream, scope);\n  return scope.addStream(entry).id;\n}\n\nfunction nestedStream(stream, scope) {\n  const id = parseStream(stream.stream, scope),\n        entry = streamParameters({stream: id}, stream, scope);\n  return scope.addStream(entry).id;\n}\n\nfunction eventStream(stream, scope) {\n  let id;\n  if (stream.type === Timer) {\n    id = scope.event(Timer, stream.throttle);\n    stream = {between: stream.between, filter: stream.filter};\n  } else {\n    id = scope.event(eventSource(stream.source), stream.type);\n  }\n\n  const entry = streamParameters({stream: id}, stream, scope);\n  return Object.keys(entry).length === 1\n    ? id\n    : scope.addStream(entry).id;\n}\n\nfunction streamParameters(entry, stream, scope) {\n  let param = stream.between;\n\n  if (param) {\n    if (param.length !== 2) {\n      error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n    }\n    entry.between = [\n      parseStream(param[0], scope),\n      parseStream(param[1], scope)\n    ];\n  }\n\n  param = stream.filter ? [].concat(stream.filter) : [];\n  if (stream.marktype || stream.markname || stream.markrole) {\n    // add filter for mark type, name and/or role\n    param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n  }\n  if (stream.source === Scope) {\n    // add filter to limit events from sub-scope only\n    param.push('inScope(event.item)');\n  }\n  if (param.length) {\n    entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n  }\n\n  if ((param = stream.throttle) != null) {\n    entry.throttle = +param;\n  }\n\n  if ((param = stream.debounce) != null) {\n    entry.debounce = +param;\n  }\n\n  if (stream.consume) {\n    entry.consume = true;\n  }\n\n  return entry;\n}\n\nfunction filterMark(type, name, role) {\n  const item = 'event.item';\n  return item\n    + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '')\n    + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '')\n    + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n","const VIEW = 'view',\n      LBRACK = '[',\n      RBRACK = ']',\n      LBRACE = '{',\n      RBRACE = '}',\n      COLON = ':',\n      COMMA = ',',\n      NAME = '@',\n      GT = '>',\n      ILLEGAL = /[[\\]{}]/,\n      DEFAULT_MARKS = {\n  '*': 1,\n  arc: 1,\n  area: 1,\n  group: 1,\n  image: 1,\n  line: 1,\n  path: 1,\n  rect: 1,\n  rule: 1,\n  shape: 1,\n  symbol: 1,\n  text: 1,\n  trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n  DEFAULT_SOURCE = source || VIEW;\n  MARKS = marks || DEFAULT_MARKS;\n  return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n  return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n  const n = s.length;\n  let count = 0,\n      c;\n\n  for (; i < n; ++i) {\n    c = s[i];\n    if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n  }\n\n  return i;\n}\n\nfunction parseMerge(s) {\n  const output = [],\n        n = s.length;\n  let start = 0,\n      i = 0;\n\n  while (i < n) {\n    i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n    output.push(s.substring(start, i).trim());\n    start = ++i;\n  }\n\n  if (output.length === 0) {\n    throw 'Empty event selector: ' + s;\n  }\n\n  return output;\n}\n\nfunction parseSelector(s) {\n  return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n  const n = s.length;\n  let i = 1,\n      b;\n  i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n  if (i === n) {\n    throw 'Empty between selector: ' + s;\n  }\n\n  b = parseMerge(s.substring(1, i));\n\n  if (b.length !== 2) {\n    throw 'Between selector must have two elements: ' + s;\n  }\n\n  s = s.slice(i + 1).trim();\n\n  if (s[0] !== GT) {\n    throw 'Expected \\'>\\' after between selector: ' + s;\n  }\n\n  b = b.map(parseSelector);\n  const stream = parseSelector(s.slice(1).trim());\n\n  if (stream.between) {\n    return {\n      between: b,\n      stream: stream\n    };\n  } else {\n    stream.between = b;\n  }\n\n  return stream;\n}\n\nfunction parseStream(s) {\n  const stream = {\n    source: DEFAULT_SOURCE\n  },\n        source = [];\n  let throttle = [0, 0],\n      markname = 0,\n      start = 0,\n      n = s.length,\n      i = 0,\n      j,\n      filter; // extract throttle from end\n\n  if (s[n - 1] === RBRACE) {\n    i = s.lastIndexOf(LBRACE);\n\n    if (i >= 0) {\n      try {\n        throttle = parseThrottle(s.substring(i + 1, n - 1));\n      } catch (e) {\n        throw 'Invalid throttle specification: ' + s;\n      }\n\n      s = s.slice(0, i).trim();\n      n = s.length;\n    } else throw 'Unmatched right brace: ' + s;\n\n    i = 0;\n  }\n\n  if (!n) throw s; // set name flag based on first char\n\n  if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n  j = find(s, i, COLON);\n\n  if (j < n) {\n    source.push(s.substring(start, j).trim());\n    start = i = ++j;\n  } // extract remaining part of stream selector\n\n\n  i = find(s, i, LBRACK);\n\n  if (i === n) {\n    source.push(s.substring(start, n).trim());\n  } else {\n    source.push(s.substring(start, i).trim());\n    filter = [];\n    start = ++i;\n    if (start === n) throw 'Unmatched left bracket: ' + s;\n  } // extract filters\n\n\n  while (i < n) {\n    i = find(s, i, RBRACK);\n    if (i === n) throw 'Unmatched left bracket: ' + s;\n    filter.push(s.substring(start, i).trim());\n    if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n    start = ++i;\n  } // marshall event stream specification\n\n\n  if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n    throw 'Invalid event selector: ' + s;\n  }\n\n  if (n > 1) {\n    stream.type = source[1];\n\n    if (markname) {\n      stream.markname = source[0].slice(1);\n    } else if (isMarkType(source[0])) {\n      stream.marktype = source[0];\n    } else {\n      stream.source = source[0];\n    }\n  } else {\n    stream.type = source[0];\n  }\n\n  if (stream.type.slice(-1) === '!') {\n    stream.consume = true;\n    stream.type = stream.type.slice(0, -1);\n  }\n\n  if (filter != null) stream.filter = filter;\n  if (throttle[0]) stream.throttle = throttle[0];\n  if (throttle[1]) stream.debounce = throttle[1];\n  return stream;\n}\n\nfunction parseThrottle(s) {\n  const a = s.split(COMMA);\n  if (!s.length || a.length > 2) throw s;\n  return a.map(_ => {\n    const x = +_;\n    if (x !== x) throw s;\n    return x;\n  });\n}\n\nexport { eventSelector as selector };\n","import parseStream from './stream';\nimport {Scope, View} from '../util';\nimport {selector} from 'vega-event-selector';\nimport {parseExpression} from 'vega-functions';\nimport {array, error, extend, isString, stringValue} from 'vega-util';\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n  code: '_.$value',\n  ast: {type: 'Identifier', value: 'value'}\n};\n\nexport default function(spec, scope, target) {\n  const encode = spec.encode,\n        entry = {target: target};\n\n  let events = spec.events,\n      update = spec.update,\n      sources = [];\n\n  if (!events) {\n    error('Signal update missing events specification.');\n  }\n\n  // interpret as an event selector string\n  if (isString(events)) {\n    events = selector(events, scope.isSubscope() ? Scope : View);\n  }\n\n  // separate event streams from signal updates\n  events = array(events)\n    .filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n  // merge internal operator listeners\n  if (sources.length > 1) {\n    sources = [mergeSources(sources)];\n  }\n\n  // merge event streams, include as source\n  if (events.length) {\n    sources.push(events.length > 1 ? {merge: events} : events[0]);\n  }\n\n  if (encode != null) {\n    if (update) error('Signal encode and update are mutually exclusive.');\n    update = 'encode(item(),' + stringValue(encode) + ')';\n  }\n\n  // resolve update value\n  entry.update = isString(update) ? parseExpression(update, scope)\n    : update.expr != null ? parseExpression(update.expr, scope)\n    : update.value != null ? update.value\n    : update.signal != null ? {\n        $expr:   OP_VALUE_EXPR,\n        $params: {$value: scope.signalRef(update.signal)}\n      }\n    : error('Invalid signal update specification.');\n\n  if (spec.force) {\n    entry.options = {force: true};\n  }\n\n  sources.forEach(source =>\n    scope.addUpdate(extend(streamSource(source, scope), entry))\n  );\n}\n\nfunction streamSource(stream, scope) {\n  return {\n    source: stream.signal ? scope.signalRef(stream.signal)\n          : stream.scale ? scope.scaleRef(stream.scale)\n          : parseStream(stream, scope)\n  };\n}\n\nfunction mergeSources(sources) {\n  return {\n    signal: '['\n      + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal)\n      + ']'\n  };\n}\n","import parseUpdate from './update';\nimport {parseExpression} from 'vega-functions';\nimport {error} from 'vega-util';\n\nexport default function(signal, scope) {\n  const op = scope.getSignal(signal.name);\n  let expr = signal.update;\n\n  if (signal.init) {\n    if (expr) {\n      error('Signals can not include both init and update expressions.');\n    } else {\n      expr = signal.init;\n      op.initonly = true;\n    }\n  }\n\n  if (expr) {\n    expr = parseExpression(expr, scope);\n    op.update = expr.$expr;\n    op.params = expr.$params;\n  }\n\n  if (signal.on) {\n    signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n  }\n}\n","import {entry} from './util';\n\nconst transform = name => (params, value, parent) =>\n  entry(name, value, params || undefined, parent);\n\nexport const Aggregate = transform('aggregate');\nexport const AxisTicks = transform('axisticks');\nexport const Bound = transform('bound');\nexport const Collect = transform('collect');\nexport const Compare = transform('compare');\nexport const DataJoin = transform('datajoin');\nexport const Encode = transform('encode');\nexport const Expression = transform('expression');\nexport const Extent = transform('extent');\nexport const Facet = transform('facet');\nexport const Field = transform('field');\nexport const Key = transform('key');\nexport const LegendEntries = transform('legendentries');\nexport const Load = transform('load');\nexport const Mark = transform('mark');\nexport const MultiExtent = transform('multiextent');\nexport const MultiValues = transform('multivalues');\nexport const Overlap = transform('overlap');\nexport const Params = transform('params');\nexport const PreFacet = transform('prefacet');\nexport const Projection = transform('projection');\nexport const Proxy = transform('proxy');\nexport const Relay = transform('relay');\nexport const Render = transform('render');\nexport const Scale = transform('scale');\nexport const Sieve = transform('sieve');\nexport const SortItems = transform('sortitems');\nexport const ViewLayout = transform('viewlayout');\nexport const Values = transform('values');\n","import {\n  Aggregate, Collect, MultiExtent, MultiValues, Sieve, Values\n} from '../transforms';\nimport {aggrField, keyFieldRef, ref} from '../util';\n\nimport {isDiscrete, isQuantile, isValidScaleType} from 'vega-scale';\nimport {\n  error, extend, hasOwnProperty, isArray, isObject, isString, stringValue\n} from 'vega-util';\n\nlet FIELD_REF_ID = 0;\n\nconst MULTIDOMAIN_SORT_OPS  = {min: 'min', max: 'max', count: 'sum'};\n\nexport function initScale(spec, scope) {\n  const type = spec.type || 'linear';\n\n  if (!isValidScaleType(type)) {\n    error('Unrecognized scale type: ' + stringValue(type));\n  }\n\n  scope.addScale(spec.name, {\n    type,\n    domain: undefined\n  });\n}\n\nexport function parseScale(spec, scope) {\n  const params = scope.getScale(spec.name).params;\n  let key;\n\n  params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n  if (spec.range != null) {\n    params.range = parseScaleRange(spec, scope, params);\n  }\n\n  if (spec.interpolate != null) {\n    parseScaleInterpolate(spec.interpolate, params);\n  }\n\n  if (spec.nice != null) {\n    params.nice = parseScaleNice(spec.nice);\n  }\n\n  if (spec.bins != null) {\n    params.bins = parseScaleBins(spec.bins, scope);\n  }\n\n  for (key in spec) {\n    if (hasOwnProperty(params, key) || key === 'name') continue;\n    params[key] = parseLiteral(spec[key], scope);\n  }\n}\n\nfunction parseLiteral(v, scope) {\n  return !isObject(v) ? v\n    : v.signal ? scope.signalRef(v.signal)\n    : error('Unsupported object: ' + stringValue(v));\n}\n\nfunction parseArray(v, scope) {\n  return v.signal\n    ? scope.signalRef(v.signal)\n    : v.map(v => parseLiteral(v, scope));\n}\n\nfunction dataLookupError(name) {\n  error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n  if (!domain) {\n    if (spec.domainMin != null || spec.domainMax != null) {\n      error('No scale domain defined for domainMin/domainMax to override.');\n    }\n    return; // default domain\n  }\n\n  return domain.signal ? scope.signalRef(domain.signal)\n    : (isArray(domain) ? explicitDomain\n    : domain.fields ? multipleDomain\n    : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n  return domain.map(v => parseLiteral(v, scope));\n}\n\nfunction singularDomain(domain, spec, scope) {\n  const data = scope.getData(domain.data);\n  if (!data) dataLookupError(domain.data);\n\n  return isDiscrete(spec.type)\n      ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false))\n      : isQuantile(spec.type) ? data.domainRef(scope, domain.field)\n      : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n  const data = domain.data,\n        fields = domain.fields.reduce((dom, d) => {\n          d = isString(d) ? {data: data, field: d}\n            : (isArray(d) || d.signal) ? fieldRef(d, scope)\n            : d;\n          dom.push(d);\n          return dom;\n        }, []);\n\n  return (isDiscrete(spec.type) ? ordinalMultipleDomain\n    : isQuantile(spec.type) ? quantileMultipleDomain\n    : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef(data, scope) {\n  const name = '_:vega:_' + (FIELD_REF_ID++),\n        coll = Collect({});\n\n  if (isArray(data)) {\n    coll.value = {$ingest: data};\n  } else if (data.signal) {\n    const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n    coll.params.input = scope.signalRef(code);\n  }\n  scope.addDataPipeline(name, [coll, Sieve({})]);\n  return {data: name, field: 'data'};\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n  const sort = parseSort(domain.sort, true);\n  let a, v;\n\n  // get value counts for each domain field\n  const counts = fields.map(f => {\n    const data = scope.getData(f.data);\n    if (!data) dataLookupError(f.data);\n    return data.countsRef(scope, f.field, sort);\n  });\n\n  // aggregate the results from each domain field\n  const p = {groupby: keyFieldRef, pulse: counts};\n  if (sort) {\n    a = sort.op || 'count';\n    v = sort.field ? aggrField(a, sort.field) : 'count';\n    p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n    p.fields = [scope.fieldRef(v)];\n    p.as = [v];\n  }\n  a = scope.add(Aggregate(p));\n\n  // collect aggregate output\n  const c = scope.add(Collect({pulse: ref(a)}));\n\n  // extract values for combined domain\n  v = scope.add(Values({\n    field: keyFieldRef,\n    sort:  scope.sortRef(sort),\n    pulse: ref(c)\n  }));\n\n  return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n  if (sort) {\n    if (!sort.field && !sort.op) {\n      if (isObject(sort)) sort.field = 'key';\n      else sort = {field: 'key'};\n    } else if (!sort.field && sort.op !== 'count') {\n      error('No field provided for sort aggregate op: ' + sort.op);\n    } else if (multidomain && sort.field) {\n      if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n        error('Multiple domain scales can not be sorted using ' + sort.op);\n      }\n    }\n  }\n  return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n  // get value arrays for each domain field\n  const values = fields.map(f => {\n    const data = scope.getData(f.data);\n    if (!data) dataLookupError(f.data);\n    return data.domainRef(scope, f.field);\n  });\n\n  // combine value arrays\n  return ref(scope.add(MultiValues({values: values})));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n  // get extents for each domain field\n  const extents = fields.map(f => {\n    const data = scope.getData(f.data);\n    if (!data) dataLookupError(f.data);\n    return data.extentRef(scope, f.field);\n  });\n\n  // combine extents\n  return ref(scope.add(MultiExtent({extents: extents})));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n  return v.signal || isArray(v)\n    ? parseArray(v, scope)\n    : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice) {\n  return isObject(nice)\n    ? {\n        interval: parseLiteral(nice.interval),\n        step: parseLiteral(nice.step)\n      }\n    : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n  params.interpolate = parseLiteral(interpolate.type || interpolate);\n  if (interpolate.gamma != null) {\n    params.interpolateGamma = parseLiteral(interpolate.gamma);\n  }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n  const config = scope.config.range;\n  let range = spec.range;\n\n  if (range.signal) {\n    return scope.signalRef(range.signal);\n  } else if (isString(range)) {\n    if (config && hasOwnProperty(config, range)) {\n      spec = extend({}, spec, {range: config[range]});\n      return parseScaleRange(spec, scope, params);\n    } else if (range === 'width') {\n      range = [0, {signal: 'width'}];\n    } else if (range === 'height') {\n      range = isDiscrete(spec.type)\n        ? [0, {signal: 'height'}]\n        : [{signal: 'height'}, 0];\n    } else {\n      error('Unrecognized scale range value: ' + stringValue(range));\n    }\n  } else if (range.scheme) {\n    params.scheme = isArray(range.scheme)\n      ? parseArray(range.scheme, scope)\n      : parseLiteral(range.scheme, scope);\n    if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n    if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n    return;\n  } else if (range.step) {\n    params.rangeStep = parseLiteral(range.step, scope);\n    return;\n  } else if (isDiscrete(spec.type) && !isArray(range)) {\n    return parseScaleDomain(range, spec, scope);\n  } else if (!isArray(range)) {\n    error('Unsupported range type: ' + stringValue(range));\n  }\n\n  return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n","import {error, isArray, isObject, stringValue} from 'vega-util';\n\nexport default function(proj, scope) {\n  const config = scope.config.projection || {},\n        params = {};\n\n  for (const name in proj) {\n    if (name === 'name') continue;\n    params[name] = parseParameter(proj[name], name, scope);\n  }\n\n  // apply projection defaults from config\n  for (const name in config) {\n    if (params[name] == null) {\n      params[name] = parseParameter(config[name], name, scope);\n    }\n  }\n\n  scope.addProjection(proj.name, params);\n}\n\nfunction parseParameter(_, name, scope) {\n  return isArray(_) ? _.map(_ => parseParameter(_, name, scope))\n    : !isObject(_) ? _\n    : _.signal ? scope.signalRef(_.signal)\n    : name === 'fit' ? _\n    : error('Unsupported parameter object: ' + stringValue(_));\n}\n","export const Top = 'top';\nexport const Left = 'left';\nexport const Right = 'right';\nexport const Bottom = 'bottom';\nexport const Center = 'center';\n\nexport const Vertical = 'vertical';\n\nexport const Start = 'start';\nexport const Middle = 'middle';\nexport const End = 'end';\n\nexport const Index  = 'index';\nexport const Label  = 'label';\nexport const Offset = 'offset';\nexport const Perc   = 'perc';\nexport const Perc2  = 'perc2';\nexport const Value  = 'value';\n\nexport const GuideLabelStyle = 'guide-label';\nexport const GuideTitleStyle = 'guide-title';\nexport const GroupTitleStyle = 'group-title';\nexport const GroupSubtitleStyle = 'group-subtitle';\n\nexport const Symbols = 'symbol';\nexport const Gradient = 'gradient';\nexport const Discrete = 'discrete';\n\nexport const Size = 'size';\nexport const Shape = 'shape';\nexport const Fill = 'fill';\nexport const Stroke = 'stroke';\nexport const StrokeWidth = 'strokeWidth';\nexport const StrokeDash = 'strokeDash';\nexport const Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nexport const LegendScales = [\n  Size,\n  Shape,\n  Fill,\n  Stroke,\n  StrokeWidth,\n  StrokeDash,\n  Opacity\n];\n\nexport const Skip = {\n  name: 1,\n  style: 1,\n  interactive: 1\n};\n\nexport const zero = {value: 0};\nexport const one = {value: 1};\n","export const GroupMark = 'group';\nexport const RectMark = 'rect';\nexport const RuleMark = 'rule';\nexport const SymbolMark = 'symbol';\nexport const TextMark = 'text';\n","import {GroupMark} from '../marks/marktypes';\n\nexport default function(mark) {\n  mark.type = GroupMark;\n  mark.interactive = mark.interactive || false;\n  return mark;\n}\n","import {Center, End, Left, Right, Start, Vertical} from './constants';\nimport {value} from '../../util';\nimport {isObject, stringValue} from 'vega-util';\n\nexport function lookup(spec, config) {\n  const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n\n  _.isVertical = s => Vertical === value(\n    spec.direction,\n    config.direction || (s ? config.symbolDirection : config.gradientDirection)\n  );\n\n  _.gradientLength = () => value(\n    spec.gradientLength,\n    config.gradientLength || config.gradientWidth\n  );\n\n  _.gradientThickness = () => value(\n    spec.gradientThickness,\n    config.gradientThickness || config.gradientHeight\n  );\n\n  _.entryColumns = () => value(\n    spec.columns,\n    value(config.columns, +_.isVertical(true))\n  );\n\n  return _;\n}\n\nexport function getEncoding(name, encode) {\n  const v = encode && (\n    (encode.update && encode.update[name]) ||\n    (encode.enter && encode.enter[name])\n  );\n  return v && v.signal ? v : v ? v.value : null;\n}\n\nexport function getStyle(name, scope, style) {\n  const s = scope.config.style[style];\n  return s && s[name];\n}\n\nexport function anchorExpr(s, e, m) {\n  return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\n\nexport const alignExpr = anchorExpr(\n  stringValue(Left),\n  stringValue(Right),\n  stringValue(Center)\n);\n\nexport function tickBand(_) {\n  const v = _('tickBand');\n  let offset = _('tickOffset'),\n      band, extra;\n\n  if (!v) {\n    // if no tick band entry, fall back on other properties\n    band = _('bandPosition');\n    extra = _('tickExtra');\n  } else if (v.signal) {\n    // if signal, augment code to interpret values\n    band = {signal: `(${v.signal}) === 'extent' ? 1 : 0.5`};\n    extra = {signal: `(${v.signal}) === 'extent'`};\n    if (!isObject(offset)) {\n      offset = {signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`};\n    }\n  } else if (v === 'extent') {\n    // if constant, simply set values\n    band = 1;\n    extra = true;\n    offset = 0;\n  } else {\n    band = 0.5;\n    extra = false;\n  }\n\n  return {extra, band, offset};\n}\n\nexport function extendOffset(value, offset) {\n  return !offset ? value\n    : !value ? offset\n    : !isObject(value) ? { value, offset }\n    : Object.assign({}, value, { offset: extendOffset(value.offset, offset) });\n}\n","import {Skip} from './constants';\nimport {extendEncode} from '../encode/util';\n\nexport default function(mark, extras) {\n  if (extras) {\n    mark.name = extras.name;\n    mark.style = extras.style || mark.style;\n    mark.interactive = !!extras.interactive;\n    mark.encode = extendEncode(mark.encode, extras, Skip);\n  } else {\n    mark.interactive = false;\n  }\n  return mark;\n}\n","import {one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders, encoder} from '../encode/util';\nimport {RectMark} from '../marks/marktypes';\nimport {LegendGradientRole} from '../marks/roles';\nimport {extend} from 'vega-util';\n\nexport default function(spec, scale, config, userEncode) {\n  const _ = lookup(spec, config),\n        vertical = _.isVertical(),\n        thickness = _.gradientThickness(),\n        length = _.gradientLength();\n\n  let enter, start, stop, width, height;\n\n  if (vertical) {\n    start = [0, 1];\n    stop = [0, 0];\n    width = thickness;\n    height = length;\n  } else {\n    start = [0, 0];\n    stop = [1, 0];\n    width = length;\n    height = thickness;\n  }\n\n  const encode = {\n    enter: enter = {\n      opacity: zero,\n      x: zero,\n      y: zero,\n      width: encoder(width),\n      height: encoder(height)\n    },\n    update: extend({}, enter, {\n      opacity: one,\n      fill: {gradient: scale, start: start, stop: stop}\n    }),\n    exit: {\n      opacity: zero\n    }\n  };\n\n  addEncoders(encode, {\n    stroke:      _('gradientStrokeColor'),\n    strokeWidth: _('gradientStrokeWidth')\n  }, { // update\n    opacity:     _('gradientOpacity')\n  });\n\n  return guideMark({\n    type: RectMark,\n    role: LegendGradientRole,\n    encode\n  }, userEncode);\n}\n","import {Perc, Perc2, Value, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders, encoder} from '../encode/util';\nimport {RectMark} from '../marks/marktypes';\nimport {LegendBandRole} from '../marks/roles';\nimport {extend} from 'vega-util';\n\nexport default function(spec, scale, config, userEncode, dataRef) {\n  const _ = lookup(spec, config),\n        vertical = _.isVertical(),\n        thickness = _.gradientThickness(),\n        length = _.gradientLength();\n\n  let u, v, uu, vv, adjust = '';\n\n  vertical\n    ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-')\n    : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n\n  const enter = {\n    opacity: zero,\n    fill: {scale: scale, field: Value}\n  };\n  enter[u]  = {signal: adjust + 'datum.' + Perc, mult: length};\n  enter[v]  = zero;\n  enter[uu] = {signal: adjust + 'datum.' + Perc2, mult: length};\n  enter[vv] = encoder(thickness);\n\n  const encode = {\n    enter: enter,\n    update: extend({}, enter, {opacity: one}),\n    exit: {opacity: zero}\n  };\n\n  addEncoders(encode, {\n    stroke:      _('gradientStrokeColor'),\n    strokeWidth: _('gradientStrokeWidth')\n  }, { // update\n    opacity:     _('gradientOpacity')\n  });\n\n  return guideMark({\n    type: RectMark,\n    role: LegendBandRole,\n    key:  Value,\n    from: dataRef,\n    encode\n  }, userEncode);\n}\n","import {\n  Bottom, Center, GuideLabelStyle, Index, Label, Left, Middle,\n  Perc, Right, Top, Value, one, zero\n} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders, encoder} from '../encode/util';\nimport {TextMark} from '../marks/marktypes';\nimport {LegendLabelRole} from '../marks/roles';\nimport {value} from '../../util';\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n      baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\n\nexport default function(spec, config, userEncode, dataRef) {\n  const _ = lookup(spec, config),\n        vertical = _.isVertical(),\n        thickness = encoder(_.gradientThickness()),\n        length = _.gradientLength();\n\n  let overlap = _('labelOverlap'),\n      enter, update, u, v, adjust = '';\n\n  const encode = {\n    enter: enter = {\n      opacity: zero\n    },\n    update: update = {\n      opacity: one,\n      text: {field: Label}\n    },\n    exit: {\n      opacity: zero\n    }\n  };\n\n  addEncoders(encode, {\n    fill:        _('labelColor'),\n    fillOpacity: _('labelOpacity'),\n    font:        _('labelFont'),\n    fontSize:    _('labelFontSize'),\n    fontStyle:   _('labelFontStyle'),\n    fontWeight:  _('labelFontWeight'),\n    limit:       value(spec.labelLimit, config.gradientLabelLimit)\n  });\n\n  if (vertical) {\n    enter.align = {value: 'left'};\n    enter.baseline = update.baseline = {signal: baselineExpr};\n    u = 'y'; v = 'x'; adjust = '1-';\n  } else {\n    enter.align = update.align = {signal: alignExpr};\n    enter.baseline = {value: 'top'};\n    u = 'x'; v = 'y';\n  }\n\n  enter[u] = update[u] = {signal: adjust + 'datum.' + Perc, mult: length};\n\n  enter[v] = update[v] = thickness;\n  thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n\n  overlap = overlap ? {\n    separation: _('labelSeparation'),\n    method: overlap,\n    order: 'datum.' + Index\n  } : undefined;\n\n  // type, role, style, key, dataRef, encode, extras\n  return guideMark({\n    type:  TextMark,\n    role:  LegendLabelRole,\n    style: GuideLabelStyle,\n    key:   Value,\n    from: dataRef,\n    encode,\n    overlap\n  }, userEncode);\n}\n","import {\n  GuideLabelStyle, Index, Label, LegendScales, Offset, Size, Skip,\n  Value, one, zero\n} from './constants';\nimport guideGroup from './guide-group';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders, encoder, extendEncode} from '../encode/util';\nimport {SymbolMark, TextMark} from '../marks/marktypes';\nimport {LegendLabelRole, LegendSymbolRole, ScopeRole} from '../marks/roles';\n\n// userEncode is top-level, includes entries, symbols, labels\nexport default function(spec, config, userEncode, dataRef, columns) {\n  const _ = lookup(spec, config),\n        entries = userEncode.entries,\n        interactive = !!(entries && entries.interactive),\n        name = entries ? entries.name : undefined,\n        height = _('clipHeight'),\n        symbolOffset = _('symbolOffset'),\n        valueRef = {data: 'value'},\n        xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n        yEncode = height ? encoder(height) : {field: Size},\n        index = `datum.${Index}`,\n        ncols = `max(1, ${columns})`;\n\n  let encode, enter, update, nrows, sort;\n\n  yEncode.mult = 0.5;\n\n  // -- LEGEND SYMBOLS --\n  encode = {\n    enter:  enter = {\n      opacity: zero,\n      x: {signal: xSignal, mult: 0.5, offset: symbolOffset},\n      y: yEncode\n    },\n    update: update = {\n      opacity: one,\n      x: enter.x,\n      y: enter.y\n    },\n    exit: {\n      opacity: zero\n    }\n  };\n\n  let baseFill = null,\n      baseStroke = null;\n  if (!spec.fill) {\n    baseFill = config.symbolBaseFillColor;\n    baseStroke = config.symbolBaseStrokeColor;\n  }\n\n  addEncoders(encode, {\n    fill:             _('symbolFillColor', baseFill),\n    shape:            _('symbolType'),\n    size:             _('symbolSize'),\n    stroke:           _('symbolStrokeColor', baseStroke),\n    strokeDash:       _('symbolDash'),\n    strokeDashOffset: _('symbolDashOffset'),\n    strokeWidth:      _('symbolStrokeWidth')\n  }, { // update\n    opacity:          _('symbolOpacity')\n  });\n\n  LegendScales.forEach(scale => {\n    if (spec[scale]) {\n      update[scale] = enter[scale] = {scale: spec[scale], field: Value};\n    }\n  });\n\n  const symbols = guideMark({\n    type: SymbolMark,\n    role: LegendSymbolRole,\n    key:  Value,\n    from: valueRef,\n    clip: height ? true : undefined,\n    encode\n  }, userEncode.symbols);\n\n  // -- LEGEND LABELS --\n  const labelOffset = encoder(symbolOffset);\n  labelOffset.offset = _('labelOffset');\n\n  encode = {\n    enter:  enter = {\n      opacity: zero,\n      x: {signal: xSignal, offset: labelOffset},\n      y: yEncode\n    },\n    update: update = {\n      opacity: one,\n      text: {field: Label},\n      x: enter.x,\n      y: enter.y\n    },\n    exit: {\n      opacity: zero\n    }\n  };\n\n  addEncoders(encode, {\n    align:       _('labelAlign'),\n    baseline:    _('labelBaseline'),\n    fill:        _('labelColor'),\n    fillOpacity: _('labelOpacity'),\n    font:        _('labelFont'),\n    fontSize:    _('labelFontSize'),\n    fontStyle:   _('labelFontStyle'),\n    fontWeight:  _('labelFontWeight'),\n    limit:       _('labelLimit')\n  });\n\n  const labels = guideMark({\n    type:  TextMark,\n    role:  LegendLabelRole,\n    style: GuideLabelStyle,\n    key:   Value,\n    from:  valueRef,\n    encode\n  }, userEncode.labels);\n\n  // -- LEGEND ENTRY GROUPS --\n  encode = {\n    enter: {\n      noBound: {value: !height}, // ignore width/height in bounds calc\n      width: zero,\n      height: height ? encoder(height) : zero,\n      opacity: zero\n    },\n    exit: {opacity: zero},\n    update: update = {\n      opacity: one,\n      row: {signal: null},\n      column: {signal: null}\n    }\n  };\n\n  // annotate and sort groups to ensure correct ordering\n  if (_.isVertical(true)) {\n    nrows = `ceil(item.mark.items.length / ${ncols})`;\n    update.row.signal = `${index}%${nrows}`;\n    update.column.signal = `floor(${index} / ${nrows})`;\n    sort = {field: ['row', index]};\n  } else {\n    update.row.signal = `floor(${index} / ${ncols})`;\n    update.column.signal = `${index} % ${ncols}`;\n    sort = {field: index};\n  }\n  // handle zero column case (implies infinite columns)\n  update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n  // facet legend entries into sub-groups\n  dataRef = {facet: {data: dataRef, name: 'value', groupby: Index}};\n\n  return guideGroup({\n    role:   ScopeRole,\n    from:   dataRef,\n    encode: extendEncode(encode, entries, Skip),\n    marks:  [symbols, labels],\n    name,\n    interactive,\n    sort\n  });\n}\n\nexport function legendSymbolLayout(spec, config) {\n  const _ = lookup(spec, config);\n\n  // layout parameters for legend entries\n  return {\n    align:   _('gridAlign'),\n    columns: _.entryColumns(),\n    center:  {\n      row: true,\n      column: false\n    },\n    padding: {\n      row:    _('rowPadding'),\n      column: _('columnPadding')\n    }\n  };\n}\n","import {GuideTitleStyle, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {alignExpr, anchorExpr, lookup} from './guide-util';\nimport {addEncoders} from '../encode/util';\nimport {TextMark} from '../marks/marktypes';\nimport {LegendTitleRole} from '../marks/roles';\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n      isR = 'item.orient === \"right\"',\n      isLR = `(${isL} || ${isR})`,\n      isVG = `datum.vgrad && ${isLR}`,\n      baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n      alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n      exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr}`,\n      exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n      exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n      exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\n\nexport default function(spec, config, userEncode, dataRef) {\n  const _ = lookup(spec, config);\n\n  const encode = {\n    enter: {opacity: zero},\n    update: {\n      opacity: one,\n      x: {field: {group: 'padding'}},\n      y: {field: {group: 'padding'}}\n    },\n    exit: {opacity: zero}\n  };\n\n  addEncoders(encode, {\n    orient:      _('titleOrient'),\n    _anchor:     _('titleAnchor'),\n    anchor:      {signal: exprAnchor},\n    angle:       {signal: exprAngle},\n    align:       {signal: exprAlign},\n    baseline:    {signal: exprBaseline},\n    text:        spec.title,\n    fill:        _('titleColor'),\n    fillOpacity: _('titleOpacity'),\n    font:        _('titleFont'),\n    fontSize:    _('titleFontSize'),\n    fontStyle:   _('titleFontStyle'),\n    fontWeight:  _('titleFontWeight'),\n    limit:       _('titleLimit'),\n    lineHeight:  _('titleLineHeight')\n  }, { // require update\n    align:       _('titleAlign'),\n    baseline:    _('titleBaseline')\n  });\n\n  return guideMark({\n    type:  TextMark,\n    role:  LegendTitleRole,\n    style: GuideTitleStyle,\n    from:  dataRef,\n    encode\n  }, userEncode);\n}\n","import {isObject, stringValue} from 'vega-util';\n\nexport default function(clip, scope) {\n  let expr;\n\n  if (isObject(clip)) {\n    if (clip.signal) {\n      expr = clip.signal;\n    } else if (clip.path) {\n      expr = 'pathShape(' + param(clip.path) + ')';\n    } else if (clip.sphere) {\n      expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n    }\n  }\n\n  return expr\n    ? scope.signalRef(expr)\n    : !!clip;\n}\n\nfunction param(value) {\n  return isObject(value) && value.signal\n    ? value.signal\n    : stringValue(value);\n}","import {GroupMark} from './marktypes';\nimport {MarkRole, ScopeRole} from './roles';\n\nexport default function(spec) {\n  const role = spec.role || '';\n  return (!role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title'))\n    ? role\n    : spec.type === GroupMark ? ScopeRole : (role || MarkRole);\n}\n","import role from './role';\n\nexport default function(spec) {\n  return {\n    marktype:     spec.type,\n    name:         spec.name || undefined,\n    role:         spec.role || role(spec),\n    zindex:       +spec.zindex || undefined,\n    aria:         spec.aria,\n    description:  spec.description\n  };\n}\n","export default function(spec, scope) {\n  return spec && spec.signal ? scope.signalRef(spec.signal)\n    : spec === false ? false\n    : true;\n}\n","import {Params} from '../transforms';\nimport {entry, fieldRef, isSignal, ref} from '../util';\nimport {definition} from 'vega-dataflow';\nimport {parseExpression} from 'vega-functions';\nimport {error, extend, isArray, isString, stringValue} from 'vega-util';\n\n/**\n * Parse a data transform specification.\n */\nexport default function(spec, scope) {\n  const def = definition(spec.type);\n  if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n\n  const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n  if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n  t.metadata = def.metadata || {};\n\n  return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n  const params = {},\n        n = def.params.length;\n\n  for (let i = 0; i < n; ++i) {\n    const pdef = def.params[i];\n    params[pdef.name] = parseParameter(pdef, spec, scope);\n  }\n  return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n  const type = def.type,\n        value = spec[def.name];\n\n  if (type === 'index') {\n    return parseIndexParameter(def, spec, scope);\n  } else if (value === undefined) {\n    if (def.required) {\n      error('Missing required ' + stringValue(spec.type)\n          + ' parameter: ' + stringValue(def.name));\n    }\n    return;\n  } else if (type === 'param') {\n    return parseSubParameters(def, spec, scope);\n  } else if (type === 'projection') {\n    return scope.projectionRef(spec[def.name]);\n  }\n\n  return def.array && !isSignal(value)\n    ? value.map(v => parameterValue(def, v, scope))\n    : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n  const type = def.type;\n\n  if (isSignal(value)) {\n    return isExpr(type) ? error('Expression references can not be signals.')\n         : isField(type) ? scope.fieldRef(value)\n         : isCompare(type) ? scope.compareRef(value)\n         : scope.signalRef(value.signal);\n  } else {\n    const expr = def.expr || isField(type);\n    return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as)\n         : expr && outerField(value) ? fieldRef(value.field, value.as)\n         : isExpr(type) ? parseExpression(value, scope)\n         : isData(type) ? ref(scope.getData(value).values)\n         : isField(type) ? fieldRef(value)\n         : isCompare(type) ? scope.compareRef(value)\n         : value;\n  }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n  if (!isString(spec.from)) {\n    error('Lookup \"from\" parameter must be a string literal.');\n  }\n  return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n  const value = spec[def.name];\n\n  if (def.array) {\n    if (!isArray(value)) { // signals not allowed!\n      error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n    }\n    return value.map(v => parseSubParameter(def, v, scope));\n  } else {\n    return parseSubParameter(def, value, scope);\n  }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n  const n =def.params.length;\n  let pdef;\n\n  // loop over defs to find matching key\n  for (let i = 0; i < n; ++i) {\n    pdef = def.params[i];\n    for (const k in pdef.key) {\n      if (pdef.key[k] !== value[k]) { pdef = null; break; }\n    }\n    if (pdef) break;\n  }\n  // raise error if matching key not found\n  if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n  // parse params, create Params transform, return ref\n  const params = extend(parseParameters(pdef, value, scope), pdef.key);\n  return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nexport const outerExpr = _ => _ && _.expr;\n\nexport const outerField = _ => _ && _.field;\n\nexport const isData = _ => _ === 'data';\n\nexport const isExpr = _ => _ === 'expr';\n\nexport const isField = _ => _ === 'field';\n\nexport const isCompare = _ => _ === 'compare';\n","import parseTransform from '../transform';\nimport {Collect} from '../../transforms';\nimport {ref} from '../../util';\nimport {array, error, extend} from 'vega-util';\n\nexport default function(from, group, scope) {\n  let facet, key, op, dataRef, parent;\n\n  // if no source data, generate singleton datum\n  if (!from) {\n    dataRef = ref(scope.add(Collect(null, [{}])));\n  }\n\n  // if faceted, process facet specification\n  else if (facet = from.facet) {\n    if (!group) error('Only group marks can be faceted.');\n\n    // use pre-faceted source data, if available\n    if (facet.field != null) {\n      dataRef = parent = getDataRef(facet, scope);\n    } else {\n      // generate facet aggregates if no direct data specification\n      if (!from.data) {\n        op = parseTransform(extend({\n          type:    'aggregate',\n          groupby: array(facet.groupby)\n        }, facet.aggregate), scope);\n        op.params.key = scope.keyRef(facet.groupby);\n        op.params.pulse = getDataRef(facet, scope);\n        dataRef = parent = ref(scope.add(op));\n      } else {\n        parent = ref(scope.getData(from.data).aggregate);\n      }\n\n      key = scope.keyRef(facet.groupby, true);\n    }\n  }\n\n  // if not yet defined, get source data reference\n  if (!dataRef) {\n    dataRef = getDataRef(from, scope);\n  }\n\n  return {\n    key: key,\n    pulse: dataRef,\n    parent: parent\n  };\n}\n\nexport function getDataRef(from, scope) {\n  return from.$ref ? from\n    : from.data && from.data.$ref ? from.data\n    : ref(scope.getData(from.data).output);\n}","import {Aggregate, Collect} from './transforms';\nimport {aggrField, entry, keyFieldRef, ref, sortKey} from './util';\nimport {isString} from 'vega-util';\n\nexport default function DataScope(scope, input, output, values, aggr) {\n  this.scope = scope;   // parent scope object\n  this.input = input;   // first operator in pipeline (tuple input)\n  this.output = output; // last operator in pipeline (tuple output)\n  this.values = values; // operator for accessing tuples (but not tuple flow)\n\n  // last aggregate in transform pipeline\n  this.aggregate = aggr;\n\n  // lookup table of field indices\n  this.index = {};\n}\n\nDataScope.fromEntries = function(scope, entries) {\n  const n = entries.length,\n        values = entries[n-1],\n        output = entries[n-2];\n\n  let input = entries[0],\n      aggr = null,\n      i = 1;\n\n  if (input && input.type === 'load') {\n    input = entries[1];\n  }\n\n  // add operator entries to this scope, wire up pulse chain\n  scope.add(entries[0]);\n  for (; i<n; ++i) {\n    entries[i].params.pulse = ref(entries[i-1]);\n    scope.add(entries[i]);\n    if (entries[i].type === 'aggregate') aggr = entries[i];\n  }\n\n  return new DataScope(scope, input, output, values, aggr);\n};\n\nfunction fieldKey(field) {\n  return isString(field) ? field : null;\n}\n\nfunction addSortField(scope, p, sort) {\n  const as = aggrField(sort.op, sort.field);\n  let s;\n\n  if (p.ops) {\n    for (let i = 0, n = p.as.length; i < n; ++i) {\n      if (p.as[i] === as) return;\n    }\n  } else {\n    p.ops = ['count'];\n    p.fields = [null];\n    p.as = ['count'];\n  }\n  if (sort.op) {\n    p.ops.push((s=sort.op.signal) ? scope.signalRef(s) : sort.op);\n    p.fields.push(scope.fieldRef(sort.field));\n    p.as.push(as);\n  }\n}\n\nfunction cache(scope, ds, name, optype, field, counts, index) {\n  const cache = ds[name] || (ds[name] = {}),\n        sort = sortKey(counts);\n\n  let k = fieldKey(field),\n      v, op;\n\n  if (k != null) {\n    scope = ds.scope;\n    k = k + (sort ? '|' + sort : '');\n    v = cache[k];\n  }\n\n  if (!v) {\n    const params = counts\n      ? {field: keyFieldRef, pulse: ds.countsRef(scope, field, counts)}\n      : {field: scope.fieldRef(field), pulse: ref(ds.output)};\n    if (sort) params.sort = scope.sortRef(counts);\n    op = scope.add(entry(optype, undefined, params));\n    if (index) ds.index[field] = op;\n    v = ref(op);\n    if (k != null) cache[k] = v;\n  }\n  return v;\n}\n\nDataScope.prototype = {\n  countsRef(scope, field, sort) {\n    const ds = this,\n          cache = ds.counts || (ds.counts = {}),\n          k = fieldKey(field);\n\n    let v, a, p;\n\n    if (k != null) {\n      scope = ds.scope;\n      v = cache[k];\n    }\n\n    if (!v) {\n      p = {\n        groupby: scope.fieldRef(field, 'key'),\n        pulse: ref(ds.output)\n      };\n      if (sort && sort.field) addSortField(scope, p, sort);\n      a = scope.add(Aggregate(p));\n      v = scope.add(Collect({pulse: ref(a)}));\n      v = {agg: a, ref: ref(v)};\n      if (k != null) cache[k] = v;\n    } else if (sort && sort.field) {\n      addSortField(scope, v.agg.params, sort);\n    }\n\n    return v.ref;\n  },\n\n  tuplesRef() {\n    return ref(this.values);\n  },\n\n  extentRef(scope, field) {\n    return cache(scope, this, 'extent', 'extent', field, false);\n  },\n\n  domainRef(scope, field) {\n    return cache(scope, this, 'domain', 'values', field, false);\n  },\n\n  valuesRef(scope, field, sort) {\n    return cache(scope, this, 'vals', 'values', field, sort || true);\n  },\n\n  lookupRef(scope, field) {\n    return cache(scope, this, 'lookup', 'tupleindex', field, false);\n  },\n\n  indataRef(scope, field) {\n    return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n  }\n};\n","import {getDataRef} from './data';\nimport DataScope from '../../DataScope';\nimport {Collect, Facet, PreFacet, Sieve} from '../../transforms';\nimport {ref} from '../../util';\nimport {error, stringValue} from 'vega-util';\n\nexport default function(spec, scope, group) {\n  const facet = spec.from.facet,\n        name = facet.name,\n        data = getDataRef(facet, scope);\n  let op;\n\n  if (!facet.name) {\n    error('Facet must have a name: ' + stringValue(facet));\n  }\n  if (!facet.data) {\n    error('Facet must reference a data set: ' + stringValue(facet));\n  }\n\n  if (facet.field) {\n    op = scope.add(PreFacet({\n      field: scope.fieldRef(facet.field),\n      pulse: data\n    }));\n  } else if (facet.groupby) {\n    op = scope.add(Facet({\n      key:   scope.keyRef(facet.groupby),\n      group: ref(scope.proxy(group.parent)),\n      pulse: data\n    }));\n  } else {\n    error('Facet must specify groupby or field: ' + stringValue(facet));\n  }\n\n  // initialize facet subscope\n  const subscope = scope.fork(),\n        source = subscope.add(Collect()),\n        values = subscope.add(Sieve({pulse: ref(source)}));\n  subscope.addData(name, new DataScope(subscope, source, source, values));\n  subscope.addSignal('parent', null);\n\n  // parse faceted subflow\n  op.params.subflow = {\n    $subflow: subscope.parse(spec).toRuntime()\n  };\n}\n","import {PreFacet, Sieve} from '../../transforms';\n\nexport default function(spec, scope, input) {\n  const op = scope.add(PreFacet({pulse: input.pulse})),\n        subscope = scope.fork();\n\n  subscope.add(Sieve());\n  subscope.addSignal('parent', null);\n\n  // parse group mark subflow\n  op.params.subflow = {\n    $subflow: subscope.parse(spec).toRuntime()\n  };\n}\n","import {operator} from '../util';\nimport {parseExpression} from 'vega-functions';\n\nexport default function(spec, scope, name) {\n  const remove = spec.remove,\n        insert = spec.insert,\n        toggle = spec.toggle,\n        modify = spec.modify,\n        values = spec.values,\n        op = scope.add(operator());\n\n  const update = 'if(' + spec.trigger + ',modify(\"'\n    + name + '\",'\n    + [insert, remove, toggle, modify, values]\n        .map(_ => _ == null ? 'null' : _)\n        .join(',')\n    + '),0)';\n\n  const expr = parseExpression(update, scope);\n  op.update = expr.$expr;\n  op.params = expr.$params;\n}\n","import parseEncode from './encode';\nimport clip from './marks/clip';\nimport definition from './marks/definition';\nimport interactive from './marks/interactive';\nimport parseData from './marks/data';\nimport parseFacet from './marks/facet';\nimport parseSubflow from './marks/subflow';\nimport getRole from './marks/role';\nimport {GroupMark} from './marks/marktypes';\nimport {FrameRole, MarkRole, ScopeRole} from './marks/roles';\nimport parseTransform from './transform';\nimport parseTrigger from './trigger';\nimport DataScope from '../DataScope';\nimport {fieldRef, isSignal, ref} from '../util';\nimport {error} from 'vega-util';\nimport {Bound, Collect, DataJoin, Encode, Mark, Overlap, Render, Sieve, SortItems, ViewLayout} from '../transforms';\n\nexport default function(spec, scope) {\n  const role = getRole(spec),\n        group = spec.type === GroupMark,\n        facet = spec.from && spec.from.facet,\n        overlap = spec.overlap;\n\n  let layout = spec.layout || role === ScopeRole || role === FrameRole,\n      ops, op, store, enc, name, layoutRef, boundRef;\n\n  const nested = role === MarkRole || layout || facet;\n\n  // resolve input data\n  const input = parseData(spec.from, group, scope);\n\n  // data join to map tuples to visual items\n  op = scope.add(DataJoin({\n    key:   input.key || (spec.key ? fieldRef(spec.key) : undefined),\n    pulse: input.pulse,\n    clean: !group\n  }));\n  const joinRef = ref(op);\n\n  // collect visual items\n  op = store = scope.add(Collect({pulse: joinRef}));\n\n  // connect visual items to scenegraph\n  op = scope.add(Mark({\n    markdef:     definition(spec),\n    interactive: interactive(spec.interactive, scope),\n    clip:        clip(spec.clip, scope),\n    context:     {$context: true},\n    groups:      scope.lookup(),\n    parent:      scope.signals.parent ? scope.signalRef('parent') : null,\n    index:       scope.markpath(),\n    pulse:       ref(op)\n  }));\n  const markRef = ref(op);\n\n  // add visual encoders\n  op = enc = scope.add(Encode(parseEncode(\n    spec.encode, spec.type, role, spec.style, scope,\n    {mod: false, pulse: markRef}\n  )));\n\n  // monitor parent marks to propagate changes\n  op.params.parent = scope.encode();\n\n  // add post-encoding transforms, if defined\n  if (spec.transform) {\n    spec.transform.forEach(_ => {\n      const tx = parseTransform(_, scope),\n            md = tx.metadata;\n      if (md.generates || md.changes) {\n        error('Mark transforms should not generate new data.');\n      }\n      if (!md.nomod) enc.params.mod = true; // update encode mod handling\n      tx.params.pulse = ref(op);\n      scope.add(op = tx);\n    });\n  }\n\n  // if item sort specified, perform post-encoding\n  if (spec.sort) {\n    op = scope.add(SortItems({\n      sort:  scope.compareRef(spec.sort),\n      pulse: ref(op)\n    }));\n  }\n\n  const encodeRef = ref(op);\n\n  // add view layout operator if needed\n  if (facet || layout) {\n    layout = scope.add(ViewLayout({\n      layout:   scope.objectProperty(spec.layout),\n      legends:  scope.legends,\n      mark:     markRef,\n      pulse:    encodeRef\n    }));\n    layoutRef = ref(layout);\n  }\n\n  // compute bounding boxes\n  const bound = scope.add(Bound({mark: markRef, pulse: layoutRef || encodeRef}));\n  boundRef = ref(bound);\n\n  // if group mark, recurse to parse nested content\n  if (group) {\n    // juggle layout & bounds to ensure they run *after* any faceting transforms\n    if (nested) { ops = scope.operators; ops.pop(); if (layout) ops.pop(); }\n\n    scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n    facet ? parseFacet(spec, scope, input)          // explicit facet\n        : nested ? parseSubflow(spec, scope, input) // standard mark group\n        : scope.parse(spec); // guide group, we can avoid nested scopes\n    scope.popState();\n\n    if (nested) { if (layout) ops.push(layout); ops.push(bound); }\n  }\n\n  // if requested, add overlap removal transform\n  if (overlap) {\n    boundRef = parseOverlap(overlap, boundRef, scope);\n  }\n\n  // render / sieve items\n  const render = scope.add(Render({pulse: boundRef})),\n        sieve = scope.add(Sieve({pulse: ref(render)}, undefined, scope.parent()));\n\n  // if mark is named, make accessible as reactive geometry\n  // add trigger updates if defined\n  if (spec.name != null) {\n    name = spec.name;\n    scope.addData(name, new DataScope(scope, store, render, sieve));\n    if (spec.on) spec.on.forEach(on => {\n      if (on.insert || on.remove || on.toggle) {\n        error('Marks only support modify triggers.');\n      }\n      parseTrigger(on, scope, name);\n    });\n  }\n}\n\nfunction parseOverlap(overlap, source, scope) {\n  const method = overlap.method,\n        bound = overlap.bound,\n        sep = overlap.separation;\n\n  const params = {\n    separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n    method: isSignal(method) ? scope.signalRef(method.signal) : method,\n    pulse:  source\n  };\n\n  if (overlap.order) {\n    params.sort = scope.compareRef({field: overlap.order});\n  }\n\n  if (bound) {\n    const tol = bound.tolerance;\n    params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n    params.boundScale = scope.scaleRef(bound.scale);\n    params.boundOrient = bound.orient;\n  }\n\n  return ref(scope.add(Overlap(params)));\n}\n","import {addEncoders, extendEncode} from './encode/util';\nimport {\n  Discrete, Gradient,\n  GuideLabelStyle, LegendScales, Skip, Symbols\n} from './guides/constants';\nimport guideGroup from './guides/guide-group';\nimport {getEncoding, getStyle, lookup} from './guides/guide-util';\nimport legendGradient from './guides/legend-gradient';\nimport legendGradientDiscrete from './guides/legend-gradient-discrete';\nimport legendGradientLabels from './guides/legend-gradient-labels';\nimport legendSymbolGroups, {legendSymbolLayout} from './guides/legend-symbol-groups';\nimport legendTitle from './guides/legend-title';\nimport parseMark from './mark';\nimport {LegendEntryRole, LegendRole} from './marks/roles';\n\nimport {deref, ref} from '../util';\nimport {Collect, LegendEntries} from '../transforms';\n\nimport {parseExpression} from 'vega-functions';\nimport {isContinuous, isDiscretizing} from 'vega-scale';\nimport {error} from 'vega-util';\n\nexport default function(spec, scope) {\n  const config = scope.config.legend,\n        encode = spec.encode || {},\n        _ = lookup(spec, config),\n        legendEncode = encode.legend || {},\n        name = legendEncode.name || undefined,\n        interactive = legendEncode.interactive,\n        style = legendEncode.style,\n        scales = {};\n\n  let scale = 0, entryLayout, params, children;\n\n  // resolve scales and 'canonical' scale name\n  LegendScales.forEach(s => spec[s]\n    ? (scales[s] = spec[s], scale = scale || spec[s]) : 0\n  );\n  if (!scale) error('Missing valid scale for legend.');\n\n  // resolve legend type (symbol, gradient, or discrete gradient)\n  const type = legendType(spec, scope.scaleType(scale));\n\n  // single-element data source for legend group\n  const datum = {\n    title:  spec.title != null,\n    scales: scales,\n    type:   type,\n    vgrad:  type !== 'symbol' &&  _.isVertical()\n  };\n  const dataRef = ref(scope.add(Collect(null, [datum])));\n\n  // encoding properties for legend entry sub-group\n  const entryEncode = {enter: {x: {value: 0}, y: {value: 0}}};\n\n  // data source for legend values\n  const entryRef = ref(scope.add(LegendEntries(params = {\n    type:    type,\n    scale:   scope.scaleRef(scale),\n    count:   scope.objectProperty(_('tickCount')),\n    limit:   scope.property(_('symbolLimit')),\n    values:  scope.objectProperty(spec.values),\n    minstep: scope.property(spec.tickMinStep),\n    formatType: scope.property(spec.formatType),\n    formatSpecifier: scope.property(spec.format)\n  })));\n\n  // continuous gradient legend\n  if (type === Gradient) {\n    children = [\n      legendGradient(spec, scale, config, encode.gradient),\n      legendGradientLabels(spec, config, encode.labels, entryRef)\n    ];\n    // adjust default tick count based on the gradient length\n    params.count = params.count || scope.signalRef(\n      `max(2,2*floor((${deref(_.gradientLength())})/100))`\n    );\n  }\n\n  // discrete gradient legend\n  else if (type === Discrete) {\n    children = [\n      legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef),\n      legendGradientLabels(spec, config, encode.labels, entryRef)\n    ];\n  }\n\n  // symbol legend\n  else {\n    // determine legend symbol group layout\n    entryLayout = legendSymbolLayout(spec, config);\n    children = [\n      legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))\n    ];\n    // pass symbol size information to legend entry generator\n    params.size = sizeExpression(spec, scope, children[0].marks);\n  }\n\n  // generate legend marks\n  children = [\n    guideGroup({\n      role: LegendEntryRole,\n      from: dataRef,\n      encode: entryEncode,\n      marks: children,\n      layout: entryLayout,\n      interactive\n    })\n  ];\n\n  // include legend title if defined\n  if (datum.title) {\n    children.push(legendTitle(spec, config, encode.title, dataRef));\n  }\n\n  // parse legend specification\n  return parseMark(\n    guideGroup({\n      role:        LegendRole,\n      from:        dataRef,\n      encode:      extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n      marks:       children,\n      aria:        _('aria'),\n      description: _('description'),\n      zindex:      _('zindex'),\n      name,\n      interactive,\n      style\n    }),\n    scope\n  );\n}\n\nfunction legendType(spec, scaleType) {\n  let type = spec.type || Symbols;\n\n  if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n    type = isContinuous(scaleType) ? Gradient\n      : isDiscretizing(scaleType) ? Discrete\n      : Symbols;\n  }\n\n  return type !== Gradient ? type\n    : isDiscretizing(scaleType) ? Discrete\n    : Gradient;\n}\n\nfunction scaleCount(spec) {\n  return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\n\nfunction buildLegendEncode(_, spec, config) {\n  const encode = {enter: {}, update: {}};\n\n  addEncoders(encode, {\n    orient:       _('orient'),\n    offset:       _('offset'),\n    padding:      _('padding'),\n    titlePadding: _('titlePadding'),\n    cornerRadius: _('cornerRadius'),\n    fill:         _('fillColor'),\n    stroke:       _('strokeColor'),\n    strokeWidth:  config.strokeWidth,\n    strokeDash:   config.strokeDash,\n    x:            _('legendX'),\n    y:            _('legendY'),\n\n    // accessibility support\n    format:       spec.format,\n    formatType:   spec.formatType\n  });\n\n  return encode;\n}\n\nfunction sizeExpression(spec, scope, marks) {\n  const size = deref(getChannel('size', spec, marks)),\n        strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n        fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n\n  return parseExpression(\n    `max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`,\n    scope\n  );\n}\n\nfunction getChannel(name, spec, marks) {\n  return spec[name]\n    ? `scale(\"${spec[name]}\",datum)`\n    : getEncoding(name, marks[0].encode);\n}\n\nfunction getFontSize(encode, scope, style) {\n  return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n","import {addEncoders, extendEncode} from './encode/util';\nimport {GroupSubtitleStyle, GroupTitleStyle, Left, Right, Skip} from './guides/constants';\nimport guideGroup from './guides/guide-group';\nimport guideMark from './guides/guide-mark';\nimport {alignExpr, lookup} from './guides/guide-util';\nimport parseMark from './mark';\nimport {TextMark} from './marks/marktypes';\nimport {TitleRole, TitleSubtitleRole, TitleTextRole} from './marks/roles';\nimport {Collect} from '../transforms';\nimport {ref} from '../util';\nimport {extend, isString} from 'vega-util';\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\n\nexport default function(spec, scope) {\n  spec = isString(spec) ? {text: spec} : spec;\n\n  const _ = lookup(spec, scope.config.title),\n        encode = spec.encode || {},\n        userEncode = encode.group || {},\n        name = userEncode.name || undefined,\n        interactive = userEncode.interactive,\n        style = userEncode.style,\n        children = [];\n\n  // single-element data source for group title\n  const datum = {},\n        dataRef = ref(scope.add(Collect(null, [datum])));\n\n  // include title text\n  children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n  // include subtitle text\n  if (spec.subtitle) {\n    children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n  }\n\n  // parse title specification\n  return parseMark(\n    guideGroup({\n      role:        TitleRole,\n      from:        dataRef,\n      encode:      groupEncode(_, userEncode),\n      marks:       children,\n      aria:        _('aria'),\n      description: _('description'),\n      zindex:      _('zindex'),\n      name,\n      interactive,\n      style\n    }),\n    scope\n  );\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n  const encode = spec.encode;\n  return (encode && encode.title) || extend({\n    name: spec.name,\n    interactive: spec.interactive,\n    style: spec.style\n  }, encode);\n}\n\nfunction groupEncode(_, userEncode) {\n  const encode = {enter: {}, update: {}};\n\n  addEncoders(encode, {\n    orient:      _('orient'),\n    anchor:      _('anchor'),\n    align:       {signal: alignExpr},\n    angle:       {signal: angleExpr},\n    limit:       _('limit'),\n    frame:       _('frame'),\n    offset:      _('offset') || 0,\n    padding:     _('subtitlePadding')\n  });\n\n  return extendEncode(encode, userEncode, Skip);\n}\n\nfunction buildTitle(spec, _, userEncode, dataRef) {\n  const zero = {value: 0},\n        text = spec.text,\n        encode = {\n          enter: {opacity: zero},\n          update: {opacity: {value: 1}},\n          exit: {opacity: zero}\n        };\n\n  addEncoders(encode, {\n    text:       text,\n    align:      {signal: 'item.mark.group.align'},\n    angle:      {signal: 'item.mark.group.angle'},\n    limit:      {signal: 'item.mark.group.limit'},\n    baseline:   'top',\n    dx:         _('dx'),\n    dy:         _('dy'),\n    fill:       _('color'),\n    font:       _('font'),\n    fontSize:   _('fontSize'),\n    fontStyle:  _('fontStyle'),\n    fontWeight: _('fontWeight'),\n    lineHeight: _('lineHeight')\n  }, { // update\n    align:      _('align'),\n    angle:      _('angle'),\n    baseline:   _('baseline')\n  });\n\n  return guideMark({\n    type: TextMark,\n    role: TitleTextRole,\n    style: GroupTitleStyle,\n    from: dataRef,\n    encode\n  }, userEncode);\n}\n\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n  const zero = {value: 0},\n        text = spec.subtitle,\n        encode = {\n          enter: {opacity: zero},\n          update: {opacity: {value: 1}},\n          exit: {opacity: zero}\n        };\n\n  addEncoders(encode, {\n    text:       text,\n    align:      {signal: 'item.mark.group.align'},\n    angle:      {signal: 'item.mark.group.angle'},\n    limit:      {signal: 'item.mark.group.limit'},\n    baseline:   'top',\n    dx:         _('dx'),\n    dy:         _('dy'),\n    fill:       _('subtitleColor'),\n    font:       _('subtitleFont'),\n    fontSize:   _('subtitleFontSize'),\n    fontStyle:  _('subtitleFontStyle'),\n    fontWeight: _('subtitleFontWeight'),\n    lineHeight: _('subtitleLineHeight')\n  }, { // update\n    align:      _('align'),\n    angle:      _('angle'),\n    baseline:   _('baseline')\n  });\n\n  return guideMark({\n    type:  TextMark,\n    role:  TitleSubtitleRole,\n    style: GroupSubtitleStyle,\n    from:  dataRef,\n    encode\n  }, userEncode);\n}\n","import parseTransform from './transform';\nimport parseTrigger from './trigger';\nimport {Collect, Load, Relay, Sieve} from '../transforms';\nimport {hasSignal, ref} from '../util';\nimport {array} from 'vega-util';\n\nexport default function parseData(data, scope) {\n  const transforms = [];\n\n  if (data.transform) {\n    data.transform.forEach(tx => {\n      transforms.push(parseTransform(tx, scope));\n    });\n  }\n\n  if (data.on) {\n    data.on.forEach(on => {\n      parseTrigger(on, scope, data.name);\n    });\n  }\n\n  scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n  const output = [];\n  let source = null,\n      modify = false,\n      generate = false,\n      upstream, i, n, t, m;\n\n  if (data.values) {\n    // hard-wired input data set\n    if (hasSignal(data.values) || hasSignal(data.format)) {\n      // if either values or format has signal, use dynamic loader\n      output.push(load(scope, data));\n      output.push(source = collect());\n    } else {\n      // otherwise, ingest upon dataflow init\n      output.push(source = collect({\n        $ingest: data.values,\n        $format: data.format\n      }));\n    }\n  } else if (data.url) {\n    // load data from external source\n    if (hasSignal(data.url) || hasSignal(data.format)) {\n      // if either url or format has signal, use dynamic loader\n      output.push(load(scope, data));\n      output.push(source = collect());\n    } else {\n      // otherwise, request load upon dataflow init\n      output.push(source = collect({\n        $request: data.url,\n        $format: data.format\n      }));\n    }\n  } else if (data.source) {\n    // derives from one or more other data sets\n    source = upstream = array(data.source)\n      .map(d => ref(scope.getData(d).output));\n    output.push(null); // populate later\n  }\n\n  // scan data transforms, add collectors as needed\n  for (i=0, n=ops.length; i<n; ++i) {\n    t = ops[i];\n    m = t.metadata;\n\n    if (!source && !m.source) {\n      output.push(source = collect());\n    }\n    output.push(t);\n\n    if (m.generates) generate = true;\n    if (m.modifies && !generate) modify = true;\n\n    if (m.source) source = t;\n    else if (m.changes) source = null;\n  }\n\n  if (upstream) {\n    n = upstream.length - 1;\n    output[0] = Relay({\n      derive: modify,\n      pulse: n ? upstream : upstream[0]\n    });\n    if (modify || n) {\n      // collect derived and multi-pulse tuples\n      output.splice(1, 0, collect());\n    }\n  }\n\n  if (!source) output.push(collect());\n  output.push(Sieve({}));\n  return output;\n}\n\nfunction collect(values) {\n  const s = Collect({}, values);\n  s.metadata = {source: true};\n  return s;\n}\n\nfunction load(scope, data) {\n  return Load({\n    url:    data.url ? scope.property(data.url) : undefined,\n    async:  data.async ? scope.property(data.async) : undefined,\n    values: data.values ? scope.property(data.values) : undefined,\n    format: scope.objectProperty(data.format)\n  });\n}\n","import {extend, stringValue} from 'vega-util';\nimport {Bottom, Left, Right, Top} from './constants';\nimport {encoder} from '../encode/util';\nimport {isSignal} from '../../util';\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nexport const getSign = (orient, a, b) => isSignal(orient)\n  ? ifLeftTopExpr(orient.signal, a, b)\n  : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nexport const ifX = (orient, a, b) => isSignal(orient)\n  ? ifXEnc(orient.signal, a, b)\n  : isX(orient) ? a : b;\n\n// condition on axis y-direction\nexport const ifY = (orient, a, b) => isSignal(orient)\n  ? ifYEnc(orient.signal, a, b)\n  : isX(orient) ? b : a;\n\nexport const ifTop = (orient, a, b) => isSignal(orient)\n  ? ifTopExpr(orient.signal, a, b)\n  : orient === Top ? {value: a} : {value: b};\n\nexport const ifRight = (orient, a, b) => isSignal(orient)\n  ? ifRightExpr(orient.signal, a, b)\n  : orient === Right ? {value: a} : {value: b};\n\nconst ifXEnc = ($orient, a, b) => ifEnc(\n  `${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b\n);\n\nconst ifYEnc = ($orient, a, b) => ifEnc(\n  `${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b\n);\n\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(\n  `${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b\n);\n\nconst ifTopExpr = ($orient, a, b) => ifExpr(\n  `${$orient} === '${Top}'`, a, b\n);\n\nconst ifRightExpr = ($orient, a, b) => ifExpr(\n  `${$orient} === '${Right}'`, a, b\n);\n\nconst ifEnc = (test, a, b) => {\n  // ensure inputs are encoder objects (or null)\n  a = a != null ? encoder(a) : a;\n  b = b != null ? encoder(b) : b;\n\n  if (isSimple(a) && isSimple(b)) {\n    // if possible generate simple signal expression\n    a = a ? (a.signal || stringValue(a.value)) : null;\n    b = b ? (b.signal || stringValue(b.value)) : null;\n    return {signal: `${test} ? (${a}) : (${b})`};\n  } else {\n    // otherwise generate rule set\n    return [extend({test}, a)].concat(b || []);\n  }\n};\n\nconst isSimple = enc => (\n  enc == null || Object.keys(enc).length === 1\n);\n\nconst ifExpr = (test, a, b) => ({\n  signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\n\nexport const ifOrient = ($orient, t, b, l, r) => ({\n  signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '')\n        + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '')\n        + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '')\n        + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '')\n        + '(null)'\n});\n\nconst toExpr = v => isSignal(v)\n  ? v.signal\n  : v == null ? null : stringValue(v);\n\nexport const mult = (sign, value) => value === 0 ? 0 : isSignal(sign)\n  ? {signal: `(${sign.signal}) * ${value}`}\n  : {value: sign * value};\n\nexport const patch = (value, base) => {\n  const s = value.signal;\n  return s && s.endsWith('(null)')\n    ? {signal: s.slice(0, -6) + base.signal}\n    : value;\n};\n","import {ifOrient, ifX} from './axis-util';\nimport {Bottom, GuideLabelStyle, GuideTitleStyle, Top} from './constants';\nimport {isSignal} from '../../util';\nimport {extend, hasOwnProperty} from 'vega-util';\n\nfunction fallback(prop, config, axisConfig, style) {\n  let styleProp;\n\n  if (config && hasOwnProperty(config, prop)) {\n    return config[prop];\n  }\n  else if (hasOwnProperty(axisConfig, prop)) {\n    return axisConfig[prop];\n  }\n  else if (prop.startsWith('title')) {\n    switch (prop) {\n      case 'titleColor':\n        styleProp = 'fill';\n        break;\n      case 'titleFont':\n      case 'titleFontSize':\n      case 'titleFontWeight':\n        styleProp = prop[5].toLowerCase() + prop.slice(6);\n    }\n    return style[GuideTitleStyle][styleProp];\n  }\n  else if (prop.startsWith('label')) {\n    switch (prop) {\n      case 'labelColor':\n        styleProp = 'fill';\n        break;\n      case 'labelFont':\n      case 'labelFontSize':\n        styleProp = prop[5].toLowerCase() + prop.slice(6);\n    }\n    return style[GuideLabelStyle][styleProp];\n  }\n\n  return null;\n}\n\nfunction keys(objects) {\n  const map = {};\n  for (const obj of objects) {\n    if (!obj) continue;\n    for (const key in obj) map[key] = 1;\n  }\n  return Object.keys(map);\n}\n\nexport default function(spec, scope) {\n  var config = scope.config,\n      style = config.style,\n      axis = config.axis,\n      band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n      orient = spec.orient,\n      xy, or, key;\n\n  if (isSignal(orient)) {\n    const xyKeys = keys([\n            config.axisX, config.axisY\n          ]),\n          orientKeys = keys([\n            config.axisTop, config.axisBottom,\n            config.axisLeft, config.axisRight\n          ]);\n\n    xy = {};\n    for (key of xyKeys) {\n      xy[key] = ifX(\n        orient,\n        fallback(key, config.axisX, axis, style),\n        fallback(key, config.axisY, axis, style)\n      );\n    }\n\n    or = {};\n    for (key of orientKeys) {\n      or[key] = ifOrient(\n        orient.signal,\n        fallback(key, config.axisTop, axis, style),\n        fallback(key, config.axisBottom, axis, style),\n        fallback(key, config.axisLeft, axis, style),\n        fallback(key, config.axisRight, axis, style)\n      );\n    }\n  } else {\n    xy = (orient === Top || orient === Bottom) ? config.axisX : config.axisY;\n    or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n  }\n\n  var result = (xy || or || band)\n    ? extend({}, axis, xy, or, band)\n    : axis;\n\n  return result;\n}\n","import {ifX, ifY} from './axis-util';\nimport {one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders} from '../encode/util';\nimport {RuleMark} from '../marks/marktypes';\nimport {AxisDomainRole} from '../marks/roles';\n\nexport default function(spec, config, userEncode, dataRef) {\n  const _ = lookup(spec, config),\n        orient = spec.orient;\n\n  let enter, update;\n  const encode = {\n    enter: enter = {opacity: zero},\n    update: update = {opacity: one},\n    exit: {opacity: zero}\n  };\n\n  addEncoders(encode, {\n    stroke:           _('domainColor'),\n    strokeCap:        _('domainCap'),\n    strokeDash:       _('domainDash'),\n    strokeDashOffset: _('domainDashOffset'),\n    strokeWidth:      _('domainWidth'),\n    strokeOpacity:    _('domainOpacity')\n  });\n\n  const pos0 = position(spec, 0);\n  const pos1 = position(spec, 1);\n\n  enter.x = update.x = ifX(orient, pos0, zero);\n  enter.x2 = update.x2 = ifX(orient, pos1);\n\n  enter.y = update.y = ifY(orient, pos0, zero);\n  enter.y2 = update.y2 = ifY(orient, pos1);\n\n  return guideMark({\n    type: RuleMark,\n    role: AxisDomainRole,\n    from: dataRef,\n    encode\n  }, userEncode);\n}\n\nfunction position(spec, pos) {\n  return {scale: spec.scale, range: pos};\n}\n","import {getSign, ifX, ifY} from './axis-util';\nimport {Value, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders} from '../encode/util';\nimport {RuleMark} from '../marks/marktypes';\nimport {AxisGridRole} from '../marks/roles';\nimport {isSignal} from '../../util';\nimport {extend, isObject} from 'vega-util';\n\nexport default function(spec, config, userEncode, dataRef, band) {\n  const _ = lookup(spec, config),\n        orient = spec.orient,\n        vscale = spec.gridScale,\n        sign = getSign(orient, 1, -1),\n        offset = offsetValue(spec.offset, sign);\n\n  let enter, exit, update;\n  const encode = {\n    enter: enter = {opacity: zero},\n    update: update = {opacity: one},\n    exit: exit = {opacity: zero}\n  };\n\n  addEncoders(encode, {\n    stroke:           _('gridColor'),\n    strokeCap:        _('gridCap'),\n    strokeDash:       _('gridDash'),\n    strokeDashOffset: _('gridDashOffset'),\n    strokeOpacity:    _('gridOpacity'),\n    strokeWidth:      _('gridWidth')\n  });\n\n  const tickPos = {\n    scale:  spec.scale,\n    field:  Value,\n    band:   band.band,\n    extra:  band.extra,\n    offset: band.offset,\n    round:  _('tickRound')\n  };\n\n  const sz = ifX(orient, {signal: 'height'}, {signal: 'width'});\n\n  const gridStart = vscale\n    ? {scale: vscale, range: 0, mult: sign, offset: offset}\n    : {value: 0, offset: offset};\n\n  const gridEnd = vscale\n    ? {scale: vscale, range: 1, mult: sign, offset: offset}\n    : extend(sz, {mult: sign, offset: offset});\n\n  enter.x = update.x = ifX(orient, tickPos, gridStart);\n  enter.y = update.y = ifY(orient, tickPos, gridStart);\n  enter.x2 = update.x2 = ifY(orient, gridEnd);\n  enter.y2 = update.y2 = ifX(orient, gridEnd);\n  exit.x = ifX(orient, tickPos);\n  exit.y = ifY(orient, tickPos);\n\n  return guideMark({\n    type: RuleMark,\n    role: AxisGridRole,\n    key:  Value,\n    from: dataRef,\n    encode\n   }, userEncode);\n}\n\nfunction offsetValue(offset, sign)  {\n  if (sign === 1) {\n    // no further adjustment needed, just return offset\n  } else if (!isObject(offset)) {\n    offset = isSignal(sign)\n      ? {signal: `(${sign.signal}) * (${offset || 0})`}\n      : sign * (offset || 0);\n  } else {\n    let entry = offset = extend({}, offset);\n    while (entry.mult != null) {\n      if (!isObject(entry.mult)) {\n        entry.mult = isSignal(sign) // no offset if sign === 1\n          ? {signal: `(${entry.mult}) * (${sign.signal})`}\n          : entry.mult * sign;\n        return offset;\n      } else {\n        entry = entry.mult = extend({}, entry.mult);\n      }\n    }\n    entry.mult = sign;\n  }\n\n  return offset;\n}\n","import {getSign, ifX, ifY} from './axis-util';\nimport {Value, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {lookup} from './guide-util';\nimport {addEncoders, encoder} from '../encode/util';\nimport {RuleMark} from '../marks/marktypes';\nimport {AxisTickRole} from '../marks/roles';\n\nexport default function(spec, config, userEncode, dataRef, size, band) {\n  const _ = lookup(spec, config),\n        orient = spec.orient,\n        sign = getSign(orient, -1, 1);\n\n  let enter, exit, update;\n  const encode = {\n    enter: enter = {opacity: zero},\n    update: update = {opacity: one},\n    exit: exit = {opacity: zero}\n  };\n\n  addEncoders(encode, {\n    stroke:           _('tickColor'),\n    strokeCap:        _('tickCap'),\n    strokeDash:       _('tickDash'),\n    strokeDashOffset: _('tickDashOffset'),\n    strokeOpacity:    _('tickOpacity'),\n    strokeWidth:      _('tickWidth')\n  });\n\n  const tickSize = encoder(size);\n  tickSize.mult = sign;\n\n  const tickPos = {\n    scale:  spec.scale,\n    field:  Value,\n    band:   band.band,\n    extra:  band.extra,\n    offset: band.offset,\n    round:  _('tickRound')\n  };\n\n  update.y = enter.y = ifX(orient, zero, tickPos);\n  update.y2 = enter.y2 = ifX(orient, tickSize);\n  exit.x = ifX(orient, tickPos);\n\n  update.x = enter.x = ifY(orient, zero, tickPos);\n  update.x2 = enter.x2 = ifY(orient, tickSize);\n  exit.y = ifY(orient, tickPos);\n\n  return guideMark({\n    type: RuleMark,\n    role: AxisTickRole,\n    key:  Value,\n    from: dataRef,\n    encode\n  }, userEncode);\n}\n","import {getSign, ifRight, ifTop, ifX, ifY, patch} from './axis-util';\nimport {GuideLabelStyle, Label, Value, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {extendOffset, lookup} from './guide-util';\nimport {addEncoders, encoder} from '../encode/util';\nimport {TextMark} from '../marks/marktypes';\nimport {AxisLabelRole} from '../marks/roles';\nimport {deref} from '../../util';\n\nfunction flushExpr(scale, threshold, a, b, c) {\n  return {\n    signal: 'flush(range(\"' + scale + '\"), '\n      + 'scale(\"' + scale + '\", datum.value), '\n      + threshold + ',' + a + ',' + b + ',' + c + ')'\n  };\n}\n\nexport default function(spec, config, userEncode, dataRef, size, band) {\n  const _ = lookup(spec, config),\n        orient = spec.orient,\n        scale = spec.scale,\n        sign = getSign(orient, -1, 1),\n        flush = deref(_('labelFlush')),\n        flushOffset = deref(_('labelFlushOffset')),\n        labelAlign = _('labelAlign'),\n        labelBaseline = _('labelBaseline');\n\n  let flushOn = flush === 0 || !!flush,\n      update;\n\n  const tickSize = encoder(size);\n  tickSize.mult = sign;\n  tickSize.offset = encoder(_('labelPadding') || 0);\n  tickSize.offset.mult = sign;\n\n  const tickPos = {\n    scale:  scale,\n    field:  Value,\n    band:   0.5,\n    offset: extendOffset(band.offset, _('labelOffset'))\n  };\n\n  const align = ifX(orient,\n    flushOn\n      ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"')\n      : {value: 'center'},\n    ifRight(orient, 'left', 'right')\n  );\n\n  const baseline = ifX(orient,\n    ifTop(orient, 'bottom', 'top'),\n    flushOn\n      ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"')\n      : {value: 'middle'}\n  );\n\n  const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n  flushOn = flushOn && flushOffset;\n\n  const enter = {\n    opacity: zero,\n    x: ifX(orient, tickPos, tickSize),\n    y: ifY(orient, tickPos, tickSize)\n  };\n\n  const encode = {\n    enter: enter,\n    update: update = {\n      opacity: one,\n      text: {field: Label},\n      x: enter.x,\n      y: enter.y,\n      align,\n      baseline\n    },\n    exit: {\n      opacity: zero,\n      x: enter.x,\n      y: enter.y\n    }\n  };\n\n  addEncoders(encode, {\n    dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n    dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n  });\n\n  addEncoders(encode, {\n    angle:       _('labelAngle'),\n    fill:        _('labelColor'),\n    fillOpacity: _('labelOpacity'),\n    font:        _('labelFont'),\n    fontSize:    _('labelFontSize'),\n    fontWeight:  _('labelFontWeight'),\n    fontStyle:   _('labelFontStyle'),\n    limit:       _('labelLimit'),\n    lineHeight:  _('labelLineHeight')\n  }, {\n    align:       labelAlign,\n    baseline:    labelBaseline\n  });\n\n  const bound   = _('labelBound');\n  let overlap = _('labelOverlap');\n\n  // if overlap method or bound defined, request label overlap removal\n  overlap = overlap || bound ? {\n    separation: _('labelSeparation'),\n    method: overlap,\n    order: 'datum.index',\n    bound: bound ? {scale, orient, tolerance: bound} : null\n  } : undefined;\n\n  if (update.align !== align) {\n    update.align = patch(update.align, align);\n  }\n  if (update.baseline !== baseline) {\n    update.baseline = patch(update.baseline, baseline);\n  }\n\n  return guideMark({\n    type:  TextMark,\n    role:  AxisLabelRole,\n    style: GuideLabelStyle,\n    key:   Value,\n    from:  dataRef,\n    encode,\n    overlap\n  }, userEncode);\n}\n","import {getSign, ifTop, ifX, ifY, mult, patch} from './axis-util';\nimport {Bottom, GuideTitleStyle, Top, one, zero} from './constants';\nimport guideMark from './guide-mark';\nimport {alignExpr, anchorExpr, lookup} from './guide-util';\nimport {addEncoders, encoder, has} from '../encode/util';\nimport {TextMark} from '../marks/marktypes';\nimport {AxisTitleRole} from '../marks/roles';\nimport {extend} from 'vega-util';\n\nexport default function(spec, config, userEncode, dataRef) {\n  const _ = lookup(spec, config),\n        orient = spec.orient,\n        sign = getSign(orient, -1, 1);\n\n  let enter, update;\n  const encode = {\n    enter: enter = {\n      opacity: zero,\n      anchor: encoder(_('titleAnchor', null)),\n      align: {signal: alignExpr}\n    },\n    update: update = extend({}, enter, {\n      opacity: one,\n      text: encoder(spec.title)\n    }),\n    exit: {\n      opacity: zero\n    }\n  };\n\n  const titlePos = {\n    signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n  };\n\n  update.x = ifX(orient, titlePos);\n  update.y = ifY(orient, titlePos);\n  enter.angle = ifX(orient, zero, mult(sign, 90));\n  enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {value: Bottom});\n  update.angle = enter.angle;\n  update.baseline = enter.baseline;\n\n  addEncoders(encode, {\n    fill:        _('titleColor'),\n    fillOpacity: _('titleOpacity'),\n    font:        _('titleFont'),\n    fontSize:    _('titleFontSize'),\n    fontStyle:   _('titleFontStyle'),\n    fontWeight:  _('titleFontWeight'),\n    limit:       _('titleLimit'),\n    lineHeight:  _('titleLineHeight')\n  }, { // require update\n    align:       _('titleAlign'),\n    angle:       _('titleAngle'),\n    baseline:    _('titleBaseline')\n  });\n\n  autoLayout(_, orient, encode, userEncode);\n  encode.update.align = patch(encode.update.align, enter.align);\n  encode.update.angle = patch(encode.update.angle, enter.angle);\n  encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n\n  return guideMark({\n    type:  TextMark,\n    role:  AxisTitleRole,\n    style: GuideTitleStyle,\n    from:  dataRef,\n    encode\n  }, userEncode);\n}\n\nfunction autoLayout(_, orient, encode, userEncode) {\n  const auto = (value, dim) => value != null\n    ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false)\n    : !has(dim, userEncode) ? true : false;\n\n  const autoY = auto(_('titleX'), 'x'),\n        autoX = auto(_('titleY'), 'y');\n\n  encode.enter.auto = autoX === autoY\n    ? encoder(autoX)\n    : ifX(orient, encoder(autoX), encoder(autoY));\n}\n","import {addEncoders, extendEncode} from './encode/util';\nimport axisConfig from './guides/axis-config';\nimport axisDomain from './guides/axis-domain';\nimport axisGrid from './guides/axis-grid';\nimport axisTicks from './guides/axis-ticks';\nimport axisLabels from './guides/axis-labels';\nimport axisTitle from './guides/axis-title';\nimport {Skip} from './guides/constants';\nimport guideGroup from './guides/guide-group';\nimport {lookup, tickBand} from './guides/guide-util';\nimport {AxisRole} from './marks/roles';\nimport parseMark from './mark';\nimport {AxisTicks, Collect} from '../transforms';\nimport {ref, value} from '../util';\n\nexport default function(spec, scope) {\n  const config = axisConfig(spec, scope),\n        encode = spec.encode || {},\n        axisEncode = encode.axis || {},\n        name = axisEncode.name || undefined,\n        interactive = axisEncode.interactive,\n        style = axisEncode.style,\n        _ = lookup(spec, config),\n        band = tickBand(_);\n\n  // single-element data source for axis group\n  const datum = {\n    scale:  spec.scale,\n    ticks:  !!_('ticks'),\n    labels: !!_('labels'),\n    grid:   !!_('grid'),\n    domain: !!_('domain'),\n    title:  spec.title != null\n  };\n  const dataRef = ref(scope.add(Collect({}, [datum])));\n\n  // data source for axis ticks\n  const ticksRef = ref(scope.add(AxisTicks({\n    scale:   scope.scaleRef(spec.scale),\n    extra:   scope.property(band.extra),\n    count:   scope.objectProperty(spec.tickCount),\n    values:  scope.objectProperty(spec.values),\n    minstep: scope.property(spec.tickMinStep),\n    formatType: scope.property(spec.formatType),\n    formatSpecifier: scope.property(spec.format)\n  })));\n\n  // generate axis marks\n  const children = [];\n  let size;\n\n  // include axis gridlines if requested\n  if (datum.grid) {\n    children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n  }\n\n  // include axis ticks if requested\n  if (datum.ticks) {\n    size = _('tickSize');\n    children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n  }\n\n  // include axis labels if requested\n  if (datum.labels) {\n    size = datum.ticks ? size : 0;\n    children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n  }\n\n  // include axis domain path if requested\n  if (datum.domain) {\n    children.push(axisDomain(spec, config, encode.domain, dataRef));\n  }\n\n  // include axis title if defined\n  if (datum.title) {\n    children.push(axisTitle(spec, config, encode.title, dataRef));\n  }\n\n  // parse axis specification\n  return parseMark(\n    guideGroup({\n      role:        AxisRole,\n      from:        dataRef,\n      encode:      extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n      marks:       children,\n      aria:        _('aria'),\n      description: _('description'),\n      zindex:      _('zindex'),\n      name,\n      interactive,\n      style\n    }),\n    scope\n  );\n}\n\nfunction buildAxisEncode(_, spec) {\n  const encode = {enter: {}, update: {}};\n\n  addEncoders(encode, {\n    orient:       _('orient'),\n    offset:       _('offset') || 0,\n    position:     value(spec.position, 0),\n    titlePadding: _('titlePadding'),\n    minExtent:    _('minExtent'),\n    maxExtent:    _('maxExtent'),\n    range:        {signal: `abs(span(range(\"${spec.scale}\")))`},\n    translate:    _('translate'),\n\n    // accessibility support\n    format:       spec.format,\n    formatType:   spec.formatType\n  });\n\n  return encode;\n}\n","import parseSignalUpdates from './signal-updates';\nimport {initScale, parseScale} from './scale';\nimport parseProjection from './projection';\nimport parseLegend from './legend';\nimport parseSignal from './signal';\nimport parseTitle from './title';\nimport parseData from './data';\nimport parseMark from './mark';\nimport parseAxis from './axis';\nimport {array} from 'vega-util';\n\nexport default function(spec, scope, preprocessed) {\n  const signals = array(spec.signals),\n        scales = array(spec.scales);\n\n  // parse signal definitions, if not already preprocessed\n  if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n  // parse cartographic projection definitions\n  array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n  // initialize scale references\n  scales.forEach(_ => initScale(_, scope));\n\n  // parse data sources\n  array(spec.data).forEach(_ => parseData(_, scope));\n\n  // parse scale definitions\n  scales.forEach(_ => parseScale(_, scope));\n\n  // parse signal updates\n  (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n  // parse axis definitions\n  array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n  // parse mark definitions\n  array(spec.marks).forEach(_ => parseMark(_, scope));\n\n  // parse legend definitions\n  array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n  // parse title, if defined\n  if (spec.title) parseTitle(spec.title, scope);\n\n  // parse collected lambda (anonymous) expressions\n  scope.parseLambdas();\n\n  return scope;\n}\n","import parseAutosize from './autosize';\nimport parsePadding from './padding';\nimport parseEncode from './encode';\nimport parseSignal from './signal';\nimport parseSpec from './scope';\nimport {extendEncode} from './encode/util';\nimport {GroupMark} from './marks/marktypes';\nimport {FrameRole} from './marks/roles';\nimport {operator, ref, value} from '../util';\nimport DataScope from '../DataScope';\nimport {Bound, Collect, Encode, Render, Sieve, ViewLayout} from '../transforms';\nimport {array, extend, hasOwnProperty} from 'vega-util';\n\nconst rootEncode = spec => extendEncode(\n  {\n    enter: {\n      x: {value: 0},\n      y: {value: 0}\n    },\n    update: {\n      width: {signal: 'width'},\n      height: {signal: 'height'}\n    }\n  },\n  spec\n);\n\nexport default function parseView(spec, scope) {\n  const config = scope.config;\n\n  // add scenegraph root\n  const root = ref(scope.root = scope.add(operator()));\n\n  // parse top-level signal definitions\n  const signals = collectSignals(spec, config);\n  signals.forEach(_ => parseSignal(_, scope));\n\n  // assign description, event, legend, and locale configuration\n  scope.description = spec.description || config.description;\n  scope.eventConfig = config.events;\n  scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n  scope.locale = config.locale;\n\n  // store root group item\n  const input = scope.add(Collect());\n\n  // encode root group item\n  const encode = scope.add(Encode(parseEncode(\n    rootEncode(spec.encode), GroupMark, FrameRole,\n    spec.style, scope, {pulse: ref(input)}\n  )));\n\n  // perform view layout\n  const parent = scope.add(ViewLayout({\n    layout:   scope.objectProperty(spec.layout),\n    legends:  scope.legends,\n    autosize: scope.signalRef('autosize'),\n    mark:     root,\n    pulse:    ref(encode)\n  }));\n  scope.operators.pop();\n\n  // parse remainder of specification\n  scope.pushState(ref(encode), ref(parent), null);\n  parseSpec(spec, scope, signals);\n  scope.operators.push(parent);\n\n  // bound / render / sieve root item\n  let op = scope.add(Bound({mark: root, pulse: ref(parent)}));\n  op = scope.add(Render({pulse: ref(op)}));\n  op = scope.add(Sieve({pulse: ref(op)}));\n\n  // track metadata for root item\n  scope.addData('root', new DataScope(scope, input, input, op));\n\n  return scope;\n}\n\nfunction signalObject(name, value) {\n  return value && value.signal\n    ? { name, update: value.signal }\n    : { name, value };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n  const _ = name => value(spec[name], config[name]),\n        signals = [\n          signalObject('background', _('background')),\n          signalObject('autosize', parseAutosize(_('autosize'))),\n          signalObject('padding', parsePadding(_('padding'))),\n          signalObject('width', _('width') || 0),\n          signalObject('height', _('height') || 0)\n        ],\n        pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n        map = {};\n\n  // add spec signal array\n  array(spec.signals).forEach(s => {\n    if (hasOwnProperty(pre, s.name)) {\n      // merge if built-in signal\n      s = extend(pre[s.name], s);\n    } else {\n      // otherwise add to signal list\n      signals.push(s);\n    }\n    map[s.name] = s;\n  });\n\n  // add config signal array\n  array(config.signals).forEach(s => {\n    if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n      // add to signal list if not already defined\n      signals.push(s);\n    }\n  });\n\n  return signals;\n}\n","import DataScope from './DataScope';\n\nimport {\n  Compare, Expression, Field, Key, Projection, Proxy, Scale, Sieve\n} from './transforms';\n\nimport {\n  Ascending, Entry, aggrField, compareRef, fieldRef, isExpr,\n  isSignal, keyRef, operator, ref\n} from './util';\n\nimport parseScope from './parsers/scope';\nimport {parseExpression} from 'vega-functions';\n\nimport {\n  array, error, extend, hasOwnProperty,\n  isArray, isObject, isString, peek, stringValue\n} from 'vega-util';\n\nexport default function Scope(config, options) {\n  this.config = config || {};\n  this.options = options || {};\n\n  this.bindings = [];\n  this.field = {};\n  this.signals = {};\n  this.lambdas = {};\n  this.scales = {};\n  this.events = {};\n  this.data = {};\n\n  this.streams = [];\n  this.updates = [];\n  this.operators = [];\n  this.eventConfig = null;\n  this.locale = null;\n\n  this._id = 0;\n  this._subid = 0;\n  this._nextsub = [0];\n\n  this._parent = [];\n  this._encode = [];\n  this._lookup = [];\n  this._markpath = [];\n}\n\nfunction Subscope(scope) {\n  this.config = scope.config;\n  this.options = scope.options;\n  this.legends = scope.legends;\n\n  this.field = Object.create(scope.field);\n  this.signals = Object.create(scope.signals);\n  this.lambdas = Object.create(scope.lambdas);\n  this.scales = Object.create(scope.scales);\n  this.events = Object.create(scope.events);\n  this.data = Object.create(scope.data);\n\n  this.streams = [];\n  this.updates = [];\n  this.operators = [];\n\n  this._id = 0;\n  this._subid = ++scope._nextsub[0];\n  this._nextsub = scope._nextsub;\n\n  this._parent = scope._parent.slice();\n  this._encode = scope._encode.slice();\n  this._lookup = scope._lookup.slice();\n  this._markpath = scope._markpath;\n}\n\nScope.prototype = Subscope.prototype = {\n  parse(spec) {\n    return parseScope(spec, this);\n  },\n\n  fork() {\n    return new Subscope(this);\n  },\n\n  isSubscope() {\n    return this._subid > 0;\n  },\n\n  toRuntime() {\n    this.finish();\n    return {\n      description: this.description,\n      operators:   this.operators,\n      streams:     this.streams,\n      updates:     this.updates,\n      bindings:    this.bindings,\n      eventConfig: this.eventConfig,\n      locale:      this.locale\n    };\n  },\n\n  id() {\n    return (this._subid ? this._subid + ':' : 0) + this._id++;\n  },\n\n  add(op) {\n    this.operators.push(op);\n    op.id = this.id();\n    // if pre-registration references exist, resolve them now\n    if (op.refs) {\n      op.refs.forEach(ref => { ref.$ref = op.id; });\n      op.refs = null;\n    }\n    return op;\n  },\n\n  proxy(op) {\n    const vref = op instanceof Entry ? ref(op) : op;\n    return this.add(Proxy({value: vref}));\n  },\n\n  addStream(stream) {\n    this.streams.push(stream);\n    stream.id = this.id();\n    return stream;\n  },\n\n  addUpdate(update) {\n    this.updates.push(update);\n    return update;\n  },\n\n  // Apply metadata\n  finish() {\n    let name, ds;\n\n    // annotate root\n    if (this.root) this.root.root = true;\n\n    // annotate signals\n    for (name in this.signals) {\n      this.signals[name].signal = name;\n    }\n\n    // annotate scales\n    for (name in this.scales) {\n      this.scales[name].scale = name;\n    }\n\n    // annotate data sets\n    function annotate(op, name, type) {\n      let data, list;\n      if (op) {\n        data = op.data || (op.data = {});\n        list = data[name] || (data[name] = []);\n        list.push(type);\n      }\n    }\n    for (name in this.data) {\n      ds = this.data[name];\n      annotate(ds.input,  name, 'input');\n      annotate(ds.output, name, 'output');\n      annotate(ds.values, name, 'values');\n      for (const field in ds.index) {\n        annotate(ds.index[field], name, 'index:' + field);\n      }\n    }\n\n    return this;\n  },\n\n  // ----\n\n  pushState(encode, parent, lookup) {\n    this._encode.push(ref(this.add(Sieve({pulse: encode}))));\n    this._parent.push(parent);\n    this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n    this._markpath.push(-1);\n  },\n\n  popState() {\n    this._encode.pop();\n    this._parent.pop();\n    this._lookup.pop();\n    this._markpath.pop();\n  },\n\n  parent() {\n    return peek(this._parent);\n  },\n\n  encode() {\n    return peek(this._encode);\n  },\n\n  lookup() {\n    return peek(this._lookup);\n  },\n\n  markpath() {\n    const p = this._markpath;\n    return ++p[p.length-1];\n  },\n\n  // ----\n\n  fieldRef(field, name) {\n    if (isString(field)) return fieldRef(field, name);\n    if (!field.signal) {\n      error('Unsupported field reference: ' + stringValue(field));\n    }\n\n    const s = field.signal;\n    let f = this.field[s];\n\n    if (!f) {\n      const params = {name: this.signalRef(s)};\n      if (name) params.as = name;\n      this.field[s] = f = ref(this.add(Field(params)));\n    }\n    return f;\n  },\n\n  compareRef(cmp) {\n    let signal = false;\n\n    const check = _ => isSignal(_)\n      ? (signal = true, this.signalRef(_.signal))\n      : isExpr(_) ? (signal = true, this.exprRef(_.expr))\n      : _;\n\n    const fields = array(cmp.field).map(check),\n          orders = array(cmp.order).map(check);\n\n    return signal\n      ? ref(this.add(Compare({fields: fields, orders: orders})))\n      : compareRef(fields, orders);\n  },\n\n  keyRef(fields, flat) {\n    let signal = false;\n\n    const check = _ => isSignal(_)\n      ? (signal = true, ref(sig[_.signal]))\n      : _;\n\n    const sig = this.signals;\n    fields = array(fields).map(check);\n\n    return signal\n      ? ref(this.add(Key({fields: fields, flat: flat})))\n      : keyRef(fields, flat);\n  },\n\n  sortRef(sort) {\n    if (!sort) return sort;\n\n    // including id ensures stable sorting\n    const a = aggrField(sort.op, sort.field),\n         o = sort.order || Ascending;\n\n    return o.signal\n      ? ref(this.add(Compare({\n          fields: a,\n          orders: this.signalRef(o.signal)\n        })))\n      : compareRef(a, o);\n  },\n\n  // ----\n\n  event(source, type) {\n    const key = source + ':' + type;\n    if (!this.events[key]) {\n      const id = this.id();\n      this.streams.push({\n        id: id,\n        source: source,\n        type: type\n      });\n      this.events[key] = id;\n    }\n    return this.events[key];\n  },\n\n  // ----\n\n  hasOwnSignal(name) {\n    return hasOwnProperty(this.signals, name);\n  },\n\n  addSignal(name, value) {\n    if (this.hasOwnSignal(name)) {\n      error('Duplicate signal name: ' + stringValue(name));\n    }\n    const op = value instanceof Entry ? value : this.add(operator(value));\n    return this.signals[name] = op;\n  },\n\n  getSignal(name) {\n    if (!this.signals[name]) {\n      error('Unrecognized signal name: ' + stringValue(name));\n    }\n    return this.signals[name];\n  },\n\n  signalRef(s) {\n    if (this.signals[s]) {\n      return ref(this.signals[s]);\n    } else if (!hasOwnProperty(this.lambdas, s)) {\n      this.lambdas[s] = this.add(operator(null));\n    }\n    return ref(this.lambdas[s]);\n  },\n\n  parseLambdas() {\n    const code = Object.keys(this.lambdas);\n    for (let i=0, n=code.length; i<n; ++i) {\n      const s = code[i],\n            e = parseExpression(s, this),\n            op = this.lambdas[s];\n      op.params = e.$params;\n      op.update = e.$expr;\n    }\n  },\n\n  property(spec) {\n    return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n  },\n\n  objectProperty(spec) {\n    return (!spec || !isObject(spec)) ? spec\n      : this.signalRef(spec.signal || propertyLambda(spec));\n  },\n\n  exprRef(code, name) {\n    const params = {expr: parseExpression(code, this)};\n    if (name) params.expr.$name = name;\n    return ref(this.add(Expression(params)));\n  },\n\n  addBinding(name, bind) {\n    if (!this.bindings) {\n      error('Nested signals do not support binding: ' + stringValue(name));\n    }\n    this.bindings.push(extend({signal: name}, bind));\n  },\n\n  // ----\n\n  addScaleProj(name, transform) {\n    if (hasOwnProperty(this.scales, name)) {\n      error('Duplicate scale or projection name: ' + stringValue(name));\n    }\n    this.scales[name] = this.add(transform);\n  },\n\n  addScale(name, params) {\n    this.addScaleProj(name, Scale(params));\n  },\n\n  addProjection(name, params) {\n    this.addScaleProj(name, Projection(params));\n  },\n\n  getScale(name) {\n    if (!this.scales[name]) {\n      error('Unrecognized scale name: ' + stringValue(name));\n    }\n    return this.scales[name];\n  },\n\n  scaleRef(name) {\n    return ref(this.getScale(name));\n  },\n\n  scaleType(name) {\n    return this.getScale(name).params.type;\n  },\n\n  projectionRef(name) {\n    return this.scaleRef(name);\n  },\n\n  projectionType(name) {\n    return this.scaleType(name);\n  },\n\n  // ----\n\n  addData(name, dataScope) {\n    if (hasOwnProperty(this.data, name)) {\n      error('Duplicate data set name: ' + stringValue(name));\n    }\n    return (this.data[name] = dataScope);\n  },\n\n  getData(name) {\n    if (!this.data[name]) {\n      error('Undefined data set name: ' + stringValue(name));\n    }\n    return this.data[name];\n  },\n\n  addDataPipeline(name, entries) {\n    if (hasOwnProperty(this.data, name)) {\n      error('Duplicate data set name: ' + stringValue(name));\n    }\n    return this.addData(name, DataScope.fromEntries(this, entries));\n  }\n};\n\nfunction propertyLambda(spec) {\n  return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\n\nfunction arrayLambda(array) {\n  const n = array.length;\n  let code = '[';\n\n  for (let i = 0; i<n; ++i) {\n    const value = array[i];\n    code += (i > 0 ? ',' : '')\n      + (isObject(value)\n        ? (value.signal || propertyLambda(value))\n        : stringValue(value));\n  }\n  return code + ']';\n}\n\nfunction objectLambda(obj) {\n  let code = '{',\n      i = 0,\n      key, value;\n\n  for (key in obj) {\n    value = obj[key];\n    code += (++i > 1 ? ',' : '')\n      + stringValue(key) + ':'\n      + (isObject(value)\n        ? (value.signal || propertyLambda(value))\n        : stringValue(value));\n  }\n  return code + '}';\n}\n","/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nexport default function() {\n  const defaultFont = 'sans-serif',\n        defaultSymbolSize = 30,\n        defaultStrokeWidth = 2,\n        defaultColor = '#4c78a8',\n        black = '#000',\n        gray = '#888',\n        lightGray = '#ddd';\n\n  return {\n    // default visualization description\n    description: 'Vega visualization',\n\n    // default padding around visualization\n    padding: 0,\n\n    // default for automatic sizing; options: 'none', 'pad', 'fit'\n    // or provide an object (e.g., {'type': 'pad', 'resize': true})\n    autosize: 'pad',\n\n    // default view background color\n    // covers the entire view component\n    background: null,\n\n    // default event handling configuration\n    // preventDefault for view-sourced event types except 'wheel'\n    events: {\n      defaults: {allow: ['wheel']}\n    },\n\n    // defaults for top-level group marks\n    // accepts mark properties (fill, stroke, etc)\n    // covers the data rectangle within group width/height\n    group: null,\n\n    // defaults for basic mark types\n    // each subset accepts mark properties (fill, stroke, etc)\n    mark: null,\n    arc: {\n      fill: defaultColor\n    },\n    area: {\n      fill: defaultColor\n    },\n    image: null,\n    line: {\n      stroke: defaultColor,\n      strokeWidth: defaultStrokeWidth\n    },\n    path: {\n      stroke: defaultColor\n    },\n    rect: {\n      fill: defaultColor\n    },\n    rule: {\n      stroke: black\n    },\n    shape: {\n      stroke: defaultColor\n    },\n    symbol: {\n      fill: defaultColor,\n      size: 64\n    },\n    text: {\n      fill: black,\n      font: defaultFont,\n      fontSize: 11\n    },\n    trail: {\n      fill: defaultColor,\n      size: defaultStrokeWidth\n    },\n\n    // style definitions\n    style: {\n      // axis & legend labels\n      'guide-label': {\n        fill: black,\n        font: defaultFont,\n        fontSize: 10\n      },\n      // axis & legend titles\n      'guide-title': {\n        fill: black,\n        font: defaultFont,\n        fontSize: 11,\n        fontWeight: 'bold'\n      },\n      // headers, including chart title\n      'group-title': {\n        fill: black,\n        font: defaultFont,\n        fontSize: 13,\n        fontWeight: 'bold'\n      },\n      // chart subtitle\n      'group-subtitle': {\n        fill: black,\n        font: defaultFont,\n        fontSize: 12\n      },\n      // defaults for styled point marks in Vega-Lite\n      point: {\n        size: defaultSymbolSize,\n        strokeWidth: defaultStrokeWidth,\n        shape: 'circle'\n      },\n      circle: {\n        size: defaultSymbolSize,\n        strokeWidth: defaultStrokeWidth\n      },\n      square: {\n        size: defaultSymbolSize,\n        strokeWidth: defaultStrokeWidth,\n        shape: 'square'\n      },\n      // defaults for styled group marks in Vega-Lite\n      cell: {\n        fill: 'transparent',\n        stroke: lightGray\n      }\n    },\n\n    // defaults for title\n    title: {\n      orient: 'top',\n      anchor: 'middle',\n      offset: 4,\n      subtitlePadding: 3\n    },\n\n    // defaults for axes\n    axis: {\n      minExtent: 0,\n      maxExtent: 200,\n      bandPosition: 0.5,\n      domain: true,\n      domainWidth: 1,\n      domainColor: gray,\n      grid: false,\n      gridWidth: 1,\n      gridColor: lightGray,\n      labels: true,\n      labelAngle: 0,\n      labelLimit: 180,\n      labelOffset: 0,\n      labelPadding: 2,\n      ticks: true,\n      tickColor: gray,\n      tickOffset: 0,\n      tickRound: true,\n      tickSize: 5,\n      tickWidth: 1,\n      titlePadding: 4\n    },\n\n    // correction for centering bias\n    axisBand: {\n      tickOffset: -0.5\n    },\n\n    // defaults for cartographic projection\n    projection: {\n      type: 'mercator'\n    },\n\n    // defaults for legends\n    legend: {\n      orient: 'right',\n      padding: 0,\n      gridAlign: 'each',\n      columnPadding: 10,\n      rowPadding: 2,\n      symbolDirection: 'vertical',\n      gradientDirection: 'vertical',\n      gradientLength: 200,\n      gradientThickness: 16,\n      gradientStrokeColor: lightGray,\n      gradientStrokeWidth: 0,\n      gradientLabelOffset: 2,\n      labelAlign: 'left',\n      labelBaseline: 'middle',\n      labelLimit: 160,\n      labelOffset: 4,\n      labelOverlap: true,\n      symbolLimit: 30,\n      symbolType: 'circle',\n      symbolSize: 100,\n      symbolOffset: 0,\n      symbolStrokeWidth: 1.5,\n      symbolBaseFillColor: 'transparent',\n      symbolBaseStrokeColor: gray,\n      titleLimit: 180,\n      titleOrient: 'top',\n      titlePadding: 5,\n      layout: {\n        offset: 18,\n        direction: 'horizontal',\n        left:   { direction: 'vertical' },\n        right:  { direction: 'vertical' }\n      }\n    },\n\n    // defaults for scale ranges\n    range: {\n      category: {\n        scheme: 'tableau10'\n      },\n      ordinal: {\n        scheme: 'blues'\n      },\n      heatmap: {\n        scheme: 'yellowgreenblue'\n      },\n      ramp: {\n        scheme: 'blues'\n      },\n      diverging: {\n        scheme: 'blueorange',\n        extent: [1, 0]\n      },\n      symbol: [\n        'circle',\n        'square',\n        'triangle-up',\n        'cross',\n        'diamond',\n        'triangle-right',\n        'triangle-down',\n        'triangle-left'\n      ]\n    }\n  };\n}\n","import parseView from './parsers/view';\nimport Scope from './Scope';\nimport defaults from './config';\nimport {error, isObject, mergeConfig} from 'vega-util';\n\nexport default function(spec, config, options) {\n  if (!isObject(spec)) {\n    error('Input Vega specification must be an object.');\n  }\n\n  config = mergeConfig(defaults(), config, spec.config);\n  return parseView(spec, new Scope(config, options)).toRuntime();\n}\n","export {default as parse} from './src/parse';\nexport {default as config} from './src/config';\n\nexport {default as signal} from './src/parsers/signal';\nexport {default as signalUpdates} from './src/parsers/signal-updates';\nexport {default as stream} from './src/parsers/stream';\n\nexport {\n  MarkRole,\n  FrameRole,\n  ScopeRole,\n  AxisRole,\n  AxisDomainRole,\n  AxisGridRole,\n  AxisLabelRole,\n  AxisTickRole,\n  AxisTitleRole,\n  LegendRole,\n  LegendEntryRole,\n  LegendLabelRole,\n  LegendSymbolRole,\n  LegendTitleRole\n} from './src/parsers/marks/roles';\n\nexport {default as Scope} from './src/Scope';\nexport {default as DataScope} from './src/DataScope';\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(transforms, tx, vtx, encode, geo, force, tree, reg, voronoi, wordcloud, xf);\n\n\n// -- Exports -----\n\nexport {\n  version\n} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n  Dataflow,\n  EventStream,\n  Parameters,\n  Pulse,\n  MultiPulse,\n  Operator,\n  Transform,\n  changeset,\n  ingest,\n  isTuple,\n  definition,\n  transform,\n  transforms,\n  tupleid\n} from 'vega-dataflow';\n\nexport {\n  scale,\n  scheme,\n  interpolate,\n  interpolateColors,\n  interpolateRange,\n  quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n  projection\n} from 'vega-projection';\n\nexport {\n  View\n} from 'vega-view';\n\nexport {\n  numberFormatDefaultLocale as formatLocale,\n  timeFormatDefaultLocale as timeFormatLocale,\n  locale,\n  defaultLocale,\n  resetDefaultLocale\n} from 'vega-format';\n\nexport {\n  expressionFunction\n} from 'vega-functions';\n\nexport {\n  parse\n} from 'vega-parser';\n\nexport {\n  context as runtimeContext\n} from 'vega-runtime';\n","export default function(fn, fields, name) {\n  fn.fields = fields || [];\n  fn.fname = name;\n  return fn;\n}\n\nexport function accessorName(fn) {\n  return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n  return fn == null ? null : fn.fields;\n}\n","export default function(path) {\n  return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function(obj) {\n  return obj[field];\n};\n\nconst getN = path => {\n  const len = path.length;\n  return function(obj) {\n    for (let i = 0; i < len; ++i) {\n      obj = obj[path[i]];\n    }\n    return obj;\n  };\n};\n\n","export default function(message) {\n  throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n  var path = [],\n      q = null,\n      b = 0,\n      n = p.length,\n      s = '',\n      i, j, c;\n\n  p = p + '';\n\n  function push() {\n    path.push(s + p.substring(i, j));\n    s = '';\n    i = j + 1;\n  }\n\n  for (i=j=0; j<n; ++j) {\n    c = p[j];\n    if (c === '\\\\') {\n      s += p.substring(i, j);\n      s += p.substring(++j, ++j);\n      i = j;\n    } else if (c === q) {\n      push();\n      q = null;\n      b = -1;\n    } else if (q) {\n      continue;\n    } else if (i === b && c === '\"') {\n      i = j + 1;\n      q = c;\n    } else if (i === b && c === \"'\") {\n      i = j + 1;\n      q = c;\n    } else if (c === '.' && !b) {\n      if (j > i) {\n        push();\n      } else {\n        i = j + 1;\n      }\n    } else if (c === '[') {\n      if (j > i) push();\n      b = i = j + 1;\n    } else if (c === ']') {\n      if (!b) error('Access path missing open bracket: ' + p);\n      if (b > 0) push();\n      b = 0;\n      i = j + 1;\n    }\n  }\n\n  if (b) error('Access path missing closing bracket: ' + p);\n  if (q) error('Access path missing closing quote: ' + p);\n\n  if (j > i) {\n    j++;\n    push();\n  }\n\n  return path;\n}\n","import accessor from './accessor';\nimport getter from './getter';\nimport splitAccessPath from './splitAccessPath';\n\nexport default function(field, name, opt) {\n  const path = splitAccessPath(field);\n  field = path.length === 1 ? path[0] : field;\n  return accessor(\n    (opt && opt.get || getter)(path),\n    [field],\n    name || field\n  );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","function log(method, level, input) {\n  var args = [level].concat([].slice.call(input));\n  console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nexport var None  = 0;\nexport var Error = 1;\nexport var Warn  = 2;\nexport var Info  = 3;\nexport var Debug = 4;\n\nexport default function(_, method) {\n  var level = _ || None;\n  return {\n    level: function(_) {\n      if (arguments.length) {\n        level = +_;\n        return this;\n      } else {\n        return level;\n      }\n    },\n    error: function() {\n      if (level >= Error) log(method || 'error', 'ERROR', arguments);\n      return this;\n    },\n    warn: function() {\n      if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n      return this;\n    },\n    info: function() {\n      if (level >= Info) log(method || 'log', 'INFO', arguments);\n      return this;\n    },\n    debug: function() {\n      if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n      return this;\n    }\n  };\n}\n","export default Array.isArray;\n","export default function(_) {\n  return _ === Object(_);\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\n\nconst isLegalKey = key => key !== '__proto__';\n\nexport function mergeConfig(...configs) {\n  return configs.reduce((out, source) => {\n    for (var key in source) {\n      if (key === 'signals') {\n        // for signals, we merge the signals arrays\n        // source signals take precedence over\n        // existing signals with the same name\n        out.signals = mergeNamed(out.signals, source.signals);\n      } else {\n        // otherwise, merge objects subject to recursion constraints\n        // for legend block, recurse for the layout entry only\n        // for style block, recurse for all properties\n        // otherwise, no recursion: objects overwrite, no merging\n        var r = key === 'legend' ? {layout: 1}\n          : key === 'style' ? true\n          : null;\n        writeConfig(out, key, source[key], r);\n      }\n    }\n    return out;\n  }, {});\n}\n\nexport function writeConfig(output, key, value, recurse) {\n  if (!isLegalKey(key)) return;\n\n  var k, o;\n  if (isObject(value) && !isArray(value)) {\n    o = isObject(output[key]) ? output[key] : (output[key] = {});\n    for (k in value) {\n      if (recurse && (recurse === true || recurse[k])) {\n        writeConfig(o, k, value[k]);\n      } else if (isLegalKey(k)) {\n        o[k] = value[k];\n      }\n    }\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction mergeNamed(a, b) {\n  if (a == null) return b;\n\n  const map = {}, out = [];\n\n  function add(_) {\n    if (!map[_.name]) {\n      map[_.name] = 1;\n      out.push(_);\n    }\n  }\n\n  b.forEach(add);\n  a.forEach(add);\n  return out;\n}\n","export default function(array) {\n  return array[array.length - 1];\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : +_;\n}\n","import {identity} from './accessors';\nimport peek from './peek';\nimport toNumber from './toNumber';\n\nfunction exp(sign) {\n  return function(x) { return sign * Math.exp(x); };\n}\n\nfunction log(sign) {\n  return function(x) { return Math.log(sign * x); };\n}\n\nfunction symlog(c) {\n  return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); };\n}\n\nfunction symexp(c) {\n  return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; };\n}\n\nfunction pow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction pan(domain, delta, lift, ground) {\n  var d0 = lift(domain[0]),\n      d1 = lift(peek(domain)),\n      dd = (d1 - d0) * delta;\n\n  return [\n    ground(d0 - dd),\n    ground(d1 - dd)\n  ];\n}\n\nexport function panLinear(domain, delta) {\n  return pan(domain, delta, toNumber, identity);\n}\n\nexport function panLog(domain, delta) {\n  var sign = Math.sign(domain[0]);\n  return pan(domain, delta, log(sign), exp(sign));\n}\n\nexport function panPow(domain, delta, exponent) {\n  return pan(domain, delta, pow(exponent), pow(1/exponent));\n}\n\nexport function panSymlog(domain, delta, constant) {\n  return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n  var d0 = lift(domain[0]),\n      d1 = lift(peek(domain)),\n      da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n\n  return [\n    ground(da + (d0 - da) * scale),\n    ground(da + (d1 - da) * scale)\n  ];\n}\n\nexport function zoomLinear(domain, anchor, scale) {\n  return zoom(domain, anchor, scale, toNumber, identity);\n}\n\nexport function zoomLog(domain, anchor, scale) {\n  var sign = Math.sign(domain[0]);\n  return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\n\nexport function zoomPow(domain, anchor, scale, exponent) {\n  return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent));\n}\n\nexport function zoomSymlog(domain, anchor, scale, constant) {\n  return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n","export function quarter(date) {\n  return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nexport function utcquarter(date) {\n  return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n","import isArray from './isArray';\n\nexport default function(_) {\n  return _ != null ? (isArray(_) ? _ : [_]) : [];\n}\n","/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nexport default function(range, min, max) {\n  var lo = range[0],\n      hi = range[1],\n      span;\n\n  if (hi < lo) {\n    span = hi;\n    hi = lo;\n    lo = span;\n  }\n  span = hi - lo;\n\n  return span >= (max - min)\n    ? [min, max]\n    : [\n        (lo = Math.min(Math.max(lo, min), max - span)),\n        lo + span\n      ];\n}\n","export default function(_) {\n  return typeof _ === 'function';\n}\n","import {default as accessor, accessorFields} from './accessor';\nimport array from './array';\nimport field from './field';\nimport isFunction from './isFunction';\n\nconst DESCENDING = 'descending';\n\nexport default function(fields, orders, opt) {\n  opt = opt || {};\n  orders = array(orders) || [];\n\n  const ord = [], get = [], fmap = {},\n        gen = opt.comparator || comparator;\n\n  array(fields).forEach((f, i) => {\n    if (f == null) return;\n    ord.push(orders[i] === DESCENDING ? -1 : 1);\n    get.push(f = isFunction(f) ? f : field(f, null, opt));\n    (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n  });\n\n  return get.length === 0\n    ? null\n    : accessor(gen(get, ord), Object.keys(fmap));\n}\n\nconst compare = (u, v) => (u < v || u == null) && v != null ? -1\n  : (u > v || v == null) && u != null ? 1\n  : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? -1\n  : v !== v && u === u ? 1\n  : 0;\n\nconst comparator = (fields, orders) => fields.length === 1\n  ? compare1(fields[0], orders[0])\n  : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function(a, b) {\n  return compare(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n  orders.push(0); // pad zero for convenient lookup\n  return function(a, b) {\n    let f, c = 0, i = -1;\n    while (c === 0 && ++i < n) {\n      f = fields[i];\n      c = compare(f(a), f(b));\n    }\n    return c * orders[i];\n  };\n};\n","import isFunction from './isFunction';\n\nexport default function(_) {\n  return isFunction(_) ? _ : function() { return _; };\n}\n","export default function(delay, handler) {\n  var tid, evt;\n\n  function callback() {\n    handler(evt);\n    tid = evt = null;\n  }\n\n  return function(e) {\n    evt = e;\n    if (tid) clearTimeout(tid);\n    tid = setTimeout(callback, delay);\n  };\n}\n","export default function(_) {\n  for (var x, k, i=1, len=arguments.length; i<len; ++i) {\n    x = arguments[i];\n    for (k in x) { _[k] = x[k]; }\n  }\n  return _;\n}\n","/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport default function(array, f) {\n  var i = 0, n, v, min, max;\n\n  if (array && (n = array.length)) {\n    if (f == null) {\n      // find first valid value\n      for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n      min = max = v;\n\n      // visit all other values\n      for (; i<n; ++i) {\n        v = array[i];\n        // skip null/undefined; NaN will fail all comparisons\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    } else {\n      // find first valid value\n      for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n      min = max = v;\n\n      // visit all other values\n      for (; i<n; ++i) {\n        v = f(array[i]);\n        // skip null/undefined; NaN will fail all comparisons\n        if (v != null) {\n          if (v < min) min = v;\n          if (v > max) max = v;\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","export default function(array, f) {\n  var i = -1,\n      n = array.length,\n      a, b, c, u, v;\n\n  if (f == null) {\n    while (++i < n) {\n      b = array[i];\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n    if (i === n) return [-1, -1];\n    u = v = i;\n    while (++i < n) {\n      b = array[i];\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  } else {\n    while (++i < n) {\n      b = f(array[i], i, array);\n      if (b != null && b >= b) {\n        a = c = b;\n        break;\n      }\n    }\n    if (i === n) return [-1, -1];\n    u = v = i;\n    while (++i < n) {\n      b = f(array[i], i, array);\n      if (b != null) {\n        if (a > b) {\n          a = b;\n          u = i;\n        }\n        if (c < b) {\n          c = b;\n          v = i;\n        }\n      }\n    }\n  }\n\n  return [u, v];\n}\n","const hop = Object.prototype.hasOwnProperty;\n\nexport default function(object, property) {\n  return hop.call(object, property);\n}\n","import hasOwnProperty from './hasOwnProperty';\n\nvar NULL = {};\n\nexport default function(input) {\n  var obj = {},\n      map,\n      test;\n\n  function has(key) {\n    return hasOwnProperty(obj, key) && obj[key] !== NULL;\n  }\n\n  map = {\n    size: 0,\n    empty: 0,\n    object: obj,\n    has: has,\n    get(key) {\n      return has(key) ? obj[key] : undefined;\n    },\n    set(key, value) {\n      if (!has(key)) {\n        ++map.size;\n        if (obj[key] === NULL) --map.empty;\n      }\n      obj[key] = value;\n      return this;\n    },\n    delete(key) {\n      if (has(key)) {\n        --map.size;\n        ++map.empty;\n        obj[key] = NULL;\n      }\n      return this;\n    },\n    clear() {\n      map.size = map.empty = 0;\n      map.object = obj = {};\n    },\n    test(_) {\n      if (arguments.length) {\n        test = _;\n        return map;\n      } else {\n        return test;\n      }\n    },\n    clean() {\n      var next = {},\n          size = 0,\n          key, value;\n      for (key in obj) {\n        value = obj[key];\n        if (value !== NULL && (!test || !test(value))) {\n          next[key] = value;\n          ++size;\n        }\n      }\n      map.size = size;\n      map.empty = 0;\n      map.object = (obj = next);\n    }\n  };\n\n  if (input) Object.keys(input).forEach(function(key) {\n    map.set(key, input[key]);\n  });\n\n  return map;\n}\n","import peek from './peek';\n\nexport default function(range, value, threshold, left, right, center) {\n  if (!threshold && threshold !== 0) return center;\n\n  var a = range[0],\n      b = peek(range),\n      t = +threshold,\n      l, r;\n\n  // swap endpoints if range is reversed\n  if (b < a) {\n    l = a; a = b; b = l;\n  }\n\n  // compare value to endpoints\n  l = Math.abs(value - a);\n  r = Math.abs(b - value);\n\n  // adjust if value is within threshold distance of endpoint\n  return l < r && l <= t ? left : r <= t ? right : center;\n}\n","export default function(child, parent) {\n  var proto = (child.prototype = Object.create(parent.prototype));\n  proto.constructor = child;\n  return proto;\n}\n","/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nexport default function(value, range, left, right) {\n  var r0 = range[0], r1 = range[range.length-1], t;\n  if (r0 > r1) {\n    t = r0;\n    r0 = r1;\n    r1 = t;\n  }\n  left = left === undefined || left;\n  right = right === undefined || right;\n\n  return (left ? r0 <= value : r0 < value) &&\n    (right ? value <= r1 : value < r1);\n}\n","export default function(_) {\n  return typeof _ === 'boolean';\n}\n","export default function(_) {\n  return Object.prototype.toString.call(_) === '[object Date]';\n}\n","export default function(_) {\n  return typeof _ === 'number';\n}\n","export default function(_) {\n  return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n","export default function(_) {\n  return typeof _ === 'string';\n}\n","import accessor from './accessor';\nimport array from './array';\nimport getter from './getter';\nimport splitAccessPath from './splitAccessPath';\n\nexport default function(fields, flat, opt) {\n  if (fields) {\n    fields = flat\n      ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1'))\n      : array(fields);\n  }\n\n  const len = fields && fields.length,\n        gen = opt && opt.get || getter,\n        map = f => gen(flat ? [f] : splitAccessPath(f));\n  let fn;\n\n  if (!len) {\n    fn = function() { return ''; };\n  } else if (len === 1) {\n    const get = map(fields[0]);\n    fn = function(_) { return '' + get(_); };\n  } else {\n    const get = fields.map(map);\n    fn = function(_) {\n      let s = '' + get[0](_), i = 0;\n      while (++i < len) s += '|' + get[i](_);\n      return s;\n    };\n  }\n\n  return accessor(fn, fields, 'key');\n}\n","import peek from './peek';\n\nexport default function(array, frac) {\n  const lo = array[0],\n        hi = peek(array),\n        f = +frac;\n  return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n","import has from './hasOwnProperty';\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nexport default function(maxsize) {\n  maxsize = +maxsize || DEFAULT_MAX_SIZE;\n\n  let curr, prev, size;\n\n  const clear = () => {\n    curr = {};\n    prev = {};\n    size = 0;\n  };\n\n  const update = (key, value) => {\n    if (++size > maxsize) {\n      prev = curr;\n      curr = {};\n      size = 1;\n    }\n    return (curr[key] = value);\n  };\n\n  clear();\n\n  return {\n    clear,\n    has: key => has(curr, key) || has(prev, key),\n    get: key => has(curr, key) ? curr[key]\n        : has(prev, key) ? update(key, prev[key])\n        : undefined,\n    set: (key, value) => has(curr, key)\n        ? (curr[key] = value)\n        : update(key, value)\n  };\n}\n","export default function(compare, array0, array1, output) {\n  var n0 = array0.length,\n      n1 = array1.length;\n\n  if (!n1) return array0;\n  if (!n0) return array1;\n\n  var merged = output || new array0.constructor(n0 + n1),\n      i0 = 0, i1 = 0, i = 0;\n\n  for (; i0<n0 && i1<n1; ++i) {\n    merged[i] = compare(array0[i0], array1[i1]) > 0\n       ? array1[i1++]\n       : array0[i0++];\n  }\n\n  for (; i0<n0; ++i0, ++i) {\n    merged[i] = array0[i0];\n  }\n\n  for (; i1<n1; ++i1, ++i) {\n    merged[i] = array1[i1];\n  }\n\n  return merged;\n}\n","export default function(str, reps) {\n  var s = '';\n  while (--reps >= 0) s += str;\n  return s;\n}\n","import repeat from './repeat';\n\nexport default function(str, length, padchar, align) {\n  var c = padchar || ' ',\n      s = str + '',\n      n = length - s.length;\n\n  return n <= 0 ? s\n    : align === 'left' ? repeat(c, n) + s\n    : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2))\n    : s + repeat(c, n);\n}\n","import peek from './peek';\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nexport default function(array) {\n  return array && (peek(array) - array[0]) || 0;\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n  return isArray(x) ? '[' + x.map($) + ']'\n    : isObject(x) || isString(x) ?\n      // Output valid JSON and JS source strings.\n      // See http://timelessrepo.com/json-isnt-a-javascript-subset\n      JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n    : x;\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n","import isDate from './isDate';\nimport isNumber from './isNumber';\n\nfunction defaultParser(_) {\n  return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n}\n\nexport default function(_, parser) {\n  parser = parser || defaultParser;\n  return _ == null || _ === '' ? null : parser(_);\n}\n","export default function(_) {\n  return _ == null || _ === '' ? null : _ + '';\n}\n","export default function(_) {\n  for (var s={}, i=0, n=_.length; i<n; ++i) s[_[i]] = true;\n  return s;\n}\n","export default function(str, length, align, ellipsis) {\n  var e = ellipsis != null ? ellipsis : '\\u2026',\n      s = str + '',\n      n = s.length,\n      l = Math.max(0, length - e.length);\n\n  return n <= length ? s\n    : align === 'left' ? e + s.slice(n - l)\n    : align === 'center' ? s.slice(0, Math.ceil(l/2)) + e + s.slice(n - ~~(l/2))\n    : s.slice(0, l) + e;\n}\n","export default function(array, filter, visitor) {\n  if (array) {\n    if (filter) {\n      var i = 0, n = array.length, t;\n      for (; i<n; ++i) {\n        if (t = filter(array[i])) visitor(t, i, array);\n      }\n    } else {\n      array.forEach(visitor);\n    }\n  }\n}\n","export {\n  default as accessor,\n  accessorName,\n  accessorFields\n} from './src/accessor';\n\nexport {\n  id,\n  identity,\n  zero,\n  one,\n  truthy,\n  falsy\n} from './src/accessors';\n\nexport {\n  default as logger,\n  None,\n  Error,\n  Warn,\n  Info,\n  Debug\n} from './src/logger';\n\nexport {\n  mergeConfig,\n  writeConfig\n} from './src/mergeConfig';\n\nexport {\n  panLinear,\n  panLog,\n  panPow,\n  panSymlog,\n  zoomLinear,\n  zoomLog,\n  zoomPow,\n  zoomSymlog\n} from './src/transform';\n\nexport {\n  quarter,\n  utcquarter\n} from './src/quarter';\n\nexport {default as array} from './src/array';\nexport {default as clampRange} from './src/clampRange';\nexport {default as compare} from './src/compare';\nexport {default as constant} from './src/constant';\nexport {default as debounce} from './src/debounce';\nexport {default as error} from './src/error';\nexport {default as extend} from './src/extend';\nexport {default as extent} from './src/extent';\nexport {default as extentIndex} from './src/extentIndex';\nexport {default as fastmap} from './src/fastmap';\nexport {default as field} from './src/field';\nexport {default as flush} from './src/flush';\nexport {default as hasOwnProperty} from './src/hasOwnProperty';\nexport {default as inherits} from './src/inherits';\nexport {default as inrange} from './src/inrange';\nexport {default as isArray} from './src/isArray';\nexport {default as isBoolean} from './src/isBoolean';\nexport {default as isDate} from './src/isDate';\nexport {default as isFunction} from './src/isFunction';\nexport {default as isNumber} from './src/isNumber';\nexport {default as isObject} from './src/isObject';\nexport {default as isRegExp} from './src/isRegExp';\nexport {default as isString} from './src/isString';\nexport {default as key} from './src/key';\nexport {default as lerp} from './src/lerp';\nexport {default as lruCache} from './src/lruCache';\nexport {default as merge} from './src/merge';\nexport {default as pad} from './src/pad';\nexport {default as peek} from './src/peek';\nexport {default as repeat} from './src/repeat';\nexport {default as span} from './src/span';\nexport {default as splitAccessPath} from './src/splitAccessPath';\nexport {default as stringValue} from './src/stringValue';\nexport {default as toBoolean} from './src/toBoolean';\nexport {default as toDate} from './src/toDate';\nexport {default as toNumber} from './src/toNumber';\nexport {default as toString} from './src/toString';\nexport {default as toSet} from './src/toSet';\nexport {default as truncate} from './src/truncate';\nexport {default as visitArray} from './src/visitArray';\n","Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","'use strict';\n\nmodule.exports = function (data, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (node) {\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        if (node === undefined) return;\n        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n        if (typeof node !== 'object') return JSON.stringify(node);\n\n        var i, out;\n        if (Array.isArray(node)) {\n            out = '[';\n            for (i = 0; i < node.length; i++) {\n                if (i) out += ',';\n                out += stringify(node[i]) || 'null';\n            }\n            return out + ']';\n        }\n\n        if (node === null) return 'null';\n\n        if (seen.indexOf(node) !== -1) {\n            if (cycles) return JSON.stringify('__cycle__');\n            throw new TypeError('Converting circular structure to JSON');\n        }\n\n        var seenIndex = seen.push(node) - 1;\n        var keys = Object.keys(node).sort(cmp && cmp(node));\n        out = '';\n        for (i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = stringify(node[key]);\n\n            if (!value) continue;\n            if (out) out += ',';\n            out += JSON.stringify(key) + ':' + value;\n        }\n        seen.splice(seenIndex, 1);\n        return '{' + out + '}';\n    })(data);\n};\n","export type LogicalComposition<T> = LogicalNot<T> | LogicalAnd<T> | LogicalOr<T> | T;\n\nexport interface LogicalOr<T> {\n  or: LogicalComposition<T>[];\n}\n\nexport interface LogicalAnd<T> {\n  and: LogicalComposition<T>[];\n}\n\nexport interface LogicalNot<T> {\n  not: LogicalComposition<T>;\n}\n\nexport function isLogicalOr(op: LogicalComposition<any>): op is LogicalOr<any> {\n  return !!op.or;\n}\n\nexport function isLogicalAnd(op: LogicalComposition<any>): op is LogicalAnd<any> {\n  return !!op.and;\n}\n\nexport function isLogicalNot(op: LogicalComposition<any>): op is LogicalNot<any> {\n  return !!op.not;\n}\n\nexport function forEachLeaf<T>(op: LogicalComposition<T>, fn: (op: T) => void) {\n  if (isLogicalNot(op)) {\n    forEachLeaf(op.not, fn);\n  } else if (isLogicalAnd(op)) {\n    for (const subop of op.and) {\n      forEachLeaf(subop, fn);\n    }\n  } else if (isLogicalOr(op)) {\n    for (const subop of op.or) {\n      forEachLeaf(subop, fn);\n    }\n  } else {\n    fn(op);\n  }\n}\n\nexport function normalizeLogicalComposition<T>(\n  op: LogicalComposition<T>,\n  normalizer: (o: T) => T\n): LogicalComposition<T> {\n  if (isLogicalNot(op)) {\n    return {not: normalizeLogicalComposition(op.not, normalizer)};\n  } else if (isLogicalAnd(op)) {\n    return {and: op.and.map(o => normalizeLogicalComposition(o, normalizer))};\n  } else if (isLogicalOr(op)) {\n    return {or: op.or.map(o => normalizeLogicalComposition(o, normalizer))};\n  } else {\n    return normalizer(op);\n  }\n}\n","import 'array-flat-polyfill';\nimport {default as clone_} from 'clone';\nimport deepEqual_ from 'fast-deep-equal';\nimport stableStringify from 'fast-json-stable-stringify';\nimport {hasOwnProperty, isNumber, isString, splitAccessPath, stringValue, writeConfig} from 'vega-util';\nimport {isLogicalAnd, isLogicalNot, isLogicalOr, LogicalComposition} from './logical';\n\nexport const deepEqual = deepEqual_;\nexport const duplicate = clone_;\n\n/**\n * Creates an object composed of the picked object properties.\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // → {'a': 1, 'c': 3}\n */\nexport function pick<T extends object, K extends keyof T>(obj: T, props: readonly K[]): Pick<T, K> {\n  const copy: any = {};\n  for (const prop of props) {\n    if (hasOwnProperty(obj, prop)) {\n      copy[prop] = obj[prop];\n    }\n  }\n  return copy;\n}\n\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\nexport function omit<T extends object, K extends keyof T>(obj: T, props: readonly K[]): Omit<T, K> {\n  const copy = {...(obj as any)};\n  for (const prop of props) {\n    delete copy[prop];\n  }\n  return copy;\n}\n\n/**\n * Monkey patch Set so that `stringify` produces a string representation of sets.\n */\nSet.prototype['toJSON'] = function () {\n  return `Set(${[...this].map(x => stableStringify(x)).join(',')})`;\n};\n\n/**\n * Converts any object to a string representation that can be consumed by humans.\n */\nexport const stringify = stableStringify;\n\n/**\n * Converts any object to a string of limited size, or a number.\n */\nexport function hash(a: any): string | number {\n  if (isNumber(a)) {\n    return a;\n  }\n\n  const str = isString(a) ? a : stableStringify(a);\n\n  // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n  if (str.length < 250) {\n    return str;\n  }\n\n  // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n  let h = 0;\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i);\n    h = (h << 5) - h + char;\n    h = h & h; // Convert to 32bit integer\n  }\n  return h;\n}\n\nexport function isNullOrFalse(x: any): x is false | null {\n  return x === false || x === null;\n}\n\nexport function contains<T>(array: readonly T[], item: T) {\n  return array.indexOf(item) > -1;\n}\n\n/**\n * Returns true if any item returns true.\n */\nexport function some<T>(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n  let i = 0;\n  for (const [k, a] of arr.entries()) {\n    if (f(a, k, i++)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Returns true if all items return true.\n */\nexport function every<T>(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n  let i = 0;\n  for (const [k, a] of arr.entries()) {\n    if (!f(a, k, i++)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Like TS Partial but applies recursively to all properties.\n */\nexport type DeepPartial<T> = {[P in keyof T]?: DeepPartial<T[P]>};\n\n/**\n * recursively merges src into dest\n */\nexport function mergeDeep<T>(dest: T, ...src: readonly DeepPartial<T>[]): T {\n  for (const s of src) {\n    deepMerge_(dest, s ?? {});\n  }\n  return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n  for (const property of keys(src)) {\n    writeConfig(dest, property, src[property], true);\n  }\n}\n\nexport function unique<T>(values: readonly T[], f: (item: T) => string | number): T[] {\n  const results: T[] = [];\n  const u = {};\n  let v: string | number;\n  for (const val of values) {\n    v = f(val);\n    if (v in u) {\n      continue;\n    }\n    u[v] = 1;\n    results.push(val);\n  }\n  return results;\n}\n\nexport type Dict<T> = Record<string, T>;\n\n/**\n * Returns true if the two dictionaries disagree. Applies only to defined values.\n */\nexport function isEqual<T>(dict: Dict<T>, other: Dict<T>) {\n  const dictKeys = keys(dict);\n  const otherKeys = keys(other);\n  if (dictKeys.length !== otherKeys.length) {\n    return false;\n  }\n  for (const key of dictKeys) {\n    if (dict[key] !== other[key]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function setEqual<T>(a: Set<T>, b: Set<T>) {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const e of a) {\n    if (!b.has(e)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function hasIntersection<T>(a: ReadonlySet<T>, b: ReadonlySet<T>) {\n  for (const key of a) {\n    if (b.has(key)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function prefixGenerator(a: ReadonlySet<string>): ReadonlySet<string> {\n  const prefixes = new Set<string>();\n  for (const x of a) {\n    const splitField = splitAccessPath(x);\n    // Wrap every element other than the first in `[]`\n    const wrappedWithAccessors = splitField.map((y, i) => (i === 0 ? y : `[${y}]`));\n    const computedPrefixes = wrappedWithAccessors.map((_, i) => wrappedWithAccessors.slice(0, i + 1).join(''));\n    for (const y of computedPrefixes) {\n      prefixes.add(y);\n    }\n  }\n  return prefixes;\n}\n\n/**\n * Returns true if a and b have an intersection. Also return true if a or b are undefined\n * since this means we don't know what fields a node produces or depends on.\n */\nexport function fieldIntersection(a: ReadonlySet<string>, b: ReadonlySet<string>): boolean {\n  if (a === undefined || b === undefined) {\n    return true;\n  }\n  return hasIntersection(prefixGenerator(a), prefixGenerator(b));\n}\n\nexport function isEmpty(obj: object) {\n  return keys(obj).length === 0;\n}\n\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexport const keys = Object.keys as <T>(o: T) => Extract<keyof T, string>[];\n\nexport const vals = Object.values;\n\nexport function entries<T>(x: {[key: string]: T}): {key: string; value: T}[] {\n  const _entries: {key: string; value: T}[] = [];\n  for (const k in x) {\n    if (hasOwnProperty(x, k)) {\n      _entries.push({\n        key: k,\n        value: x[k]\n      });\n    }\n  }\n  return _entries;\n}\n\n// Using mapped type to declare a collect of flags for a string literal type S\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\nexport type Flag<S extends string> = {[K in S]: 1};\n\nexport function isBoolean(b: any): b is boolean {\n  return b === true || b === false;\n}\n\n/**\n * Convert a string into a valid variable name\n */\nexport function varName(s: string): string {\n  // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n  const alphanumericS = s.replace(/\\W/g, '_');\n\n  // Add _ if the string has leading numbers.\n  return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\n\nexport function logicalExpr<T>(op: LogicalComposition<T>, cb: (...args: readonly any[]) => string): string {\n  if (isLogicalNot(op)) {\n    return '!(' + logicalExpr(op.not, cb) + ')';\n  } else if (isLogicalAnd(op)) {\n    return '(' + op.and.map((and: LogicalComposition<T>) => logicalExpr(and, cb)).join(') && (') + ')';\n  } else if (isLogicalOr(op)) {\n    return '(' + op.or.map((or: LogicalComposition<T>) => logicalExpr(or, cb)).join(') || (') + ')';\n  } else {\n    return cb(op);\n  }\n}\n\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nexport function deleteNestedProperty(obj: any, orderedProps: string[]) {\n  if (orderedProps.length === 0) {\n    return true;\n  }\n  const prop = orderedProps.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n  if (prop in obj && deleteNestedProperty(obj[prop], orderedProps)) {\n    delete obj[prop];\n  }\n  return isEmpty(obj);\n}\n\nexport function titleCase(s: string) {\n  return s.charAt(0).toUpperCase() + s.substr(1);\n}\n\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function accessPathWithDatum(path: string, datum = 'datum') {\n  const pieces = splitAccessPath(path);\n  const prefixes = [];\n  for (let i = 1; i <= pieces.length; i++) {\n    const prefix = `[${pieces.slice(0, i).map(stringValue).join('][')}]`;\n    prefixes.push(`${datum}${prefix}`);\n  }\n  return prefixes.join(' && ');\n}\n\n/**\n * Return access with datum to the flattened field.\n *\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function flatAccessWithDatum(path: string, datum: 'datum' | 'parent' | 'datum.datum' = 'datum') {\n  return `${datum}[${stringValue(splitAccessPath(path).join('.'))}]`;\n}\n\nfunction escapePathAccess(string: string) {\n  return string.replace(/(\\[|\\]|\\.|'|\")/g, '\\\\$1');\n}\n\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nexport function replacePathInField(path: string) {\n  return `${splitAccessPath(path).map(escapePathAccess).join('\\\\.')}`;\n}\n\n/**\n * Replace all occurrences of a string with another string.\n *\n * @param string the string to replace in\n * @param find the string to replace\n * @param replacement the replacement\n */\nexport function replaceAll(string: string, find: string, replacement: string) {\n  return string.replace(new RegExp(find.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'), replacement);\n}\n\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nexport function removePathFromField(path: string) {\n  return `${splitAccessPath(path).join('.')}`;\n}\n\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nexport function accessPathDepth(path: string) {\n  if (!path) {\n    return 0;\n  }\n  return splitAccessPath(path).length;\n}\n\n/**\n * This is a replacement for chained || for numeric properties or properties that respect null so that 0 will be included.\n */\nexport function getFirstDefined<T>(...args: readonly T[]): T | undefined {\n  for (const arg of args) {\n    if (arg !== undefined) {\n      return arg;\n    }\n  }\n  return undefined;\n}\n\n// variable used to generate id\nlet idCounter = 42;\n\n/**\n * Returns a new random id every time it gets called.\n *\n * Has side effect!\n */\nexport function uniqueId(prefix?: string) {\n  const id = ++idCounter;\n  return prefix ? String(prefix) + id : id;\n}\n\n/**\n * Resets the id counter used in uniqueId. This can be useful for testing.\n */\nexport function resetIdCounter() {\n  idCounter = 42;\n}\n\nexport function internalField(name: string) {\n  return isInternalField(name) ? name : `__${name}`;\n}\n\nexport function isInternalField(name: string) {\n  return name.indexOf('__') === 0;\n}\n\n/**\n * Normalize angle to be within [0,360).\n */\nexport function normalizeAngle(angle: number) {\n  if (angle === undefined) {\n    return undefined;\n  }\n  return ((angle % 360) + 360) % 360;\n}\n\n/**\n * Returns whether the passed in value is a valid number.\n */\nexport function isNumeric(value: number | string): boolean {\n  if (isNumber(value)) {\n    return true;\n  }\n  return !isNaN(value as any) && !isNaN(parseFloat(value));\n}\n","import {\n  Align,\n  Axis as VgAxis,\n  AxisEncode,\n  AxisOrient,\n  BaseAxis,\n  Color,\n  FontStyle,\n  FontWeight,\n  LabelOverlap,\n  SignalRef,\n  TextBaseline,\n  TimeInterval,\n  TimeIntervalStep\n} from 'vega';\nimport {ConditionalPredicate, Value, ValueDef} from './channeldef';\nimport {DateTime} from './datetime';\nimport {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {ExcludeMappedValueRefButKeepSignal, VgEncodeChannel} from './vega.schema';\n\nexport type BaseAxisNoValueRefs = AxisOverrideMixins & VLOnlyAxisMixins & ExcludeMappedValueRefButKeepSignal<BaseAxis>;\n\ninterface AxisOverrideMixins {\n  // Position and tickMinStep are not config in Vega, but are in Vega-Lite. So we just copy them here.\n\n  /**\n   * The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n   *\n   * __Default value__: `0`\n   */\n  position?: number | SignalRef;\n\n  /**\n   * The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n   */\n  tickMinStep?: number | SignalRef;\n\n  // Override comments to be Vega-Lite specific\n  /**\n   * A boolean flag indicating if grid lines should be included as part of the axis\n   *\n   * __Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.\n   */\n  grid?: boolean;\n\n  /**\n   * Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n   *\n   * __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.\n   */\n  labelFlush?: boolean | number;\n\n  /**\n   * The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n   *\n   * __Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`.\n   */\n  labelOverlap?: LabelOverlap;\n\n  /**\n   * The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n   *\n   * __Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)\n   */\n  offset?: number;\n\n  /**\n   * The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n   *\n   * __Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes.\n   */\n  orient?: AxisOrient | SignalRef;\n\n  /**\n   * A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n   *\n   * For scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and \"year\". Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n   *\n   * __Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.\n   *\n   * @minimum 0\n   */\n  tickCount?: number | TimeInterval | TimeIntervalStep | SignalRef;\n\n  /**\n   * Explicitly set the visible axis tick values.\n   */\n  values?: number[] | string[] | boolean[] | DateTime[] | SignalRef; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n  /**\n   * A non-negative integer indicating the z-index of the axis.\n   * If zindex is 0, axes should be drawn behind all chart elements.\n   * To put them in front, set `zindex` to `1` or more.\n   *\n   * __Default value:__ `0` (behind the marks).\n   *\n   * @TJS-type integer\n   * @minimum 0\n   */\n  zindex?: number;\n}\n\ninterface VLOnlyAxisMixins {\n  /**\n   * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n   *\n   * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n   */\n  labelExpr?: string;\n\n  /**\n   * A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n   *\n   * __Default value:__ (none)\n   * __Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n   */\n  style?: string | string[];\n}\n\nexport type SignalAxisProp =\n  | 'domainColor'\n  | 'labelAlign'\n  | 'labelColor'\n  | 'gridColor'\n  | 'tickColor'\n  | 'titleColor'\n  | 'title';\n\nexport type ConditionalAxisProp =\n  | 'labelAlign'\n  | 'labelBaseline'\n  | 'labelColor'\n  | 'labelFont'\n  | 'labelFontSize'\n  | 'labelFontStyle'\n  | 'labelFontWeight'\n  | 'labelOpacity'\n  | 'labelOffset'\n  | 'labelPadding'\n  | 'gridColor'\n  | 'gridDash'\n  | 'gridDashOffset'\n  | 'gridOpacity'\n  | 'gridWidth'\n  | 'tickColor'\n  | 'tickDash'\n  | 'tickDashOffset'\n  | 'tickOpacity'\n  | 'tickSize'\n  | 'tickWidth';\n\nexport const CONDITIONAL_AXIS_PROP_INDEX: Record<\n  ConditionalAxisProp | SignalAxisProp,\n  {\n    part: keyof AxisEncode;\n    vgProp: VgEncodeChannel;\n  } | null // null if we need to convert condition to signal\n> = {\n  domainColor: {\n    part: 'domain',\n    vgProp: 'stroke'\n  },\n  labelAlign: {\n    part: 'labels',\n    vgProp: 'align'\n  },\n  labelBaseline: {\n    part: 'labels',\n    vgProp: 'baseline'\n  },\n  labelColor: {\n    part: 'labels',\n    vgProp: 'fill'\n  },\n  labelFont: {\n    part: 'labels',\n    vgProp: 'font'\n  },\n  labelFontSize: {\n    part: 'labels',\n    vgProp: 'fontSize'\n  },\n  labelFontStyle: {\n    part: 'labels',\n    vgProp: 'fontStyle'\n  },\n  labelFontWeight: {\n    part: 'labels',\n    vgProp: 'fontWeight'\n  },\n  labelOpacity: {\n    part: 'labels',\n    vgProp: 'opacity'\n  },\n  labelOffset: null,\n  labelPadding: null, // There is no fixed vgProp for tickSize, need to use signal.\n  gridColor: {\n    part: 'grid',\n    vgProp: 'stroke'\n  },\n  gridDash: {\n    part: 'grid',\n    vgProp: 'strokeDash'\n  },\n  gridDashOffset: {\n    part: 'grid',\n    vgProp: 'strokeDash'\n  },\n  gridOpacity: {\n    part: 'grid',\n    vgProp: 'opacity'\n  },\n  gridWidth: {\n    part: 'grid',\n    vgProp: 'strokeWidth'\n  },\n  tickColor: {\n    part: 'ticks',\n    vgProp: 'stroke'\n  },\n  tickDash: {\n    part: 'ticks',\n    vgProp: 'strokeDash'\n  },\n  tickDashOffset: {\n    part: 'ticks',\n    vgProp: 'strokeDash'\n  },\n  tickOpacity: {\n    part: 'ticks',\n    vgProp: 'opacity'\n  },\n  tickSize: null, // There is no fixed vgProp for tickSize, need to use signal.\n  tickWidth: {\n    part: 'ticks',\n    vgProp: 'strokeWidth'\n  },\n  titleColor: {\n    part: 'title',\n    vgProp: 'fill'\n  },\n  title: null // title supports signal, let's use it.\n};\n\nexport type ConditionalAxisProperty<V extends Value | number[]> = (ValueDef<V> | SignalRef) & {\n  condition: ConditionalPredicate<ValueDef<V> | SignalRef> | ConditionalPredicate<ValueDef<V> | SignalRef>[];\n};\n\nexport function isConditionalAxisValue<V extends Value | number[]>(v: any): v is ConditionalAxisProperty<V> {\n  return v && v['condition'];\n}\n\nexport type ConditionalAxisNumber = ConditionalAxisProperty<number | null>;\nexport type ConditionalAxisLabelAlign = ConditionalAxisProperty<Align | null>;\nexport type ConditionalAxisLabelBaseline = ConditionalAxisProperty<TextBaseline | null>;\nexport type ConditionalAxisColor = ConditionalAxisProperty<Color | null>;\nexport type ConditionalAxisString = ConditionalAxisProperty<string | null>;\n\nexport type ConditionalAxisLabelFontStyle = ConditionalAxisProperty<FontStyle | null>;\nexport type ConditionalAxisLabelFontWeight = ConditionalAxisProperty<FontWeight | null>;\n\nexport type ConditionalAxisNumberArray = ConditionalAxisProperty<number[] | null>;\n\n// Vega axis config is the same as Vega axis base. If this is not the case, add specific type.\nexport type AxisConfigBaseWithConditionalAndSignal = Omit<BaseAxisNoValueRefs, ConditionalAxisProp | SignalAxisProp> &\n  AxisPropsWithConditionAndSignal;\n\nexport interface AxisPropsWithConditionAndSignal {\n  domainColor?: BaseAxisNoValueRefs['domainColor'] | SignalRef;\n  labelAlign?: BaseAxisNoValueRefs['labelAlign'] | ConditionalAxisLabelAlign;\n  labelBaseline?: BaseAxisNoValueRefs['labelBaseline'] | ConditionalAxisLabelBaseline;\n  labelColor?: BaseAxisNoValueRefs['labelColor'] | ConditionalAxisColor | SignalRef;\n  labelFont?: BaseAxisNoValueRefs['labelFont'] | ConditionalAxisString;\n  labelFontSize?: BaseAxisNoValueRefs['labelFontSize'] | ConditionalAxisNumber;\n  labelFontStyle?: BaseAxisNoValueRefs['labelFontStyle'] | ConditionalAxisLabelFontStyle;\n  labelFontWeight?: BaseAxisNoValueRefs['labelFontWeight'] | ConditionalAxisLabelFontWeight;\n  labelLineHeight?: BaseAxisNoValueRefs['labelLineHeight'] | ConditionalAxisNumber | SignalRef;\n  labelOpacity?: BaseAxisNoValueRefs['labelOpacity'] | ConditionalAxisNumber;\n  labelOffset?: BaseAxisNoValueRefs['labelOffset'] | ConditionalAxisNumber | SignalRef;\n  labelPadding?: BaseAxisNoValueRefs['labelPadding'] | ConditionalAxisNumber;\n  gridColor?: BaseAxisNoValueRefs['gridColor'] | ConditionalAxisColor | SignalRef;\n  gridDash?: BaseAxisNoValueRefs['gridDash'] | ConditionalAxisNumberArray;\n  gridDashOffset?: BaseAxisNoValueRefs['gridDashOffset'] | ConditionalAxisNumber;\n  gridOpacity?: BaseAxisNoValueRefs['gridOpacity'] | ConditionalAxisNumber;\n  gridWidth?: BaseAxisNoValueRefs['gridWidth'] | ConditionalAxisNumber;\n  tickColor?: BaseAxisNoValueRefs['tickColor'] | ConditionalAxisColor | SignalRef;\n  tickDash?: BaseAxisNoValueRefs['tickDash'] | ConditionalAxisNumberArray;\n  tickDashOffset?: BaseAxisNoValueRefs['tickDashOffset'] | ConditionalAxisNumber;\n  tickOpacity?: BaseAxisNoValueRefs['tickOpacity'] | ConditionalAxisNumber;\n  tickSize?: BaseAxisNoValueRefs['tickSize'] | ConditionalAxisNumber;\n  tickWidth?: BaseAxisNoValueRefs['tickWidth'] | ConditionalAxisNumber;\n  titleColor?: BaseAxisNoValueRefs['titleColor'] | SignalRef;\n  title?: TitleMixins['title'];\n}\n\nexport type AxisConfig = Guide &\n  VlOnlyGuideConfig &\n  AxisConfigBaseWithConditionalAndSignal & {\n    /**\n     * Disable axis by default.\n     */\n    disable?: boolean;\n  };\n\nexport interface Axis extends AxisConfigBaseWithConditionalAndSignal, Guide {\n  /**\n   * Mark definitions for custom axis encoding.\n   *\n   * @hidden\n   */\n  encoding?: AxisEncoding;\n}\n\nexport type AxisPart = keyof AxisEncoding;\nexport const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];\n\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n */\nexport const AXIS_PROPERTY_TYPE: Record<keyof VgAxis, 'main' | 'grid' | 'both'> = {\n  grid: 'grid',\n  gridCap: 'grid',\n  gridColor: 'grid',\n  gridDash: 'grid',\n  gridDashOffset: 'grid',\n  gridOpacity: 'grid',\n  gridScale: 'grid',\n  gridWidth: 'grid',\n\n  orient: 'main',\n\n  bandPosition: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n\n  aria: 'main',\n  description: 'main',\n  domain: 'main',\n  domainCap: 'main',\n  domainColor: 'main',\n  domainDash: 'main',\n  domainDashOffset: 'main',\n  domainOpacity: 'main',\n  domainWidth: 'main',\n  format: 'main',\n  formatType: 'main',\n  labelAlign: 'main',\n  labelAngle: 'main',\n  labelBaseline: 'main',\n  labelBound: 'main',\n  labelColor: 'main',\n  labelFlush: 'main',\n  labelFlushOffset: 'main',\n  labelFont: 'main',\n  labelFontSize: 'main',\n  labelFontStyle: 'main',\n  labelFontWeight: 'main',\n  labelLimit: 'main',\n  labelLineHeight: 'main',\n  labelOffset: 'main',\n  labelOpacity: 'main',\n  labelOverlap: 'main',\n  labelPadding: 'main',\n  labels: 'main',\n  labelSeparation: 'main',\n  maxExtent: 'main',\n  minExtent: 'main',\n  offset: 'both',\n  position: 'main',\n  tickCap: 'main',\n  tickColor: 'main',\n  tickDash: 'main',\n  tickDashOffset: 'main',\n  tickMinStep: 'main',\n  tickOffset: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n  tickOpacity: 'main',\n  tickRound: 'both', // Apply rounding to grid and ticks so they are aligned.\n  ticks: 'main',\n  tickSize: 'main',\n  tickWidth: 'both',\n  title: 'main',\n  titleAlign: 'main',\n  titleAnchor: 'main',\n  titleAngle: 'main',\n  titleBaseline: 'main',\n  titleColor: 'main',\n  titleFont: 'main',\n  titleFontSize: 'main',\n  titleFontStyle: 'main',\n  titleFontWeight: 'main',\n  titleLimit: 'main',\n  titleLineHeight: 'main',\n  titleOpacity: 'main',\n  titlePadding: 'main',\n  titleX: 'main',\n  titleY: 'main',\n\n  encode: 'both', // we hide this in Vega-Lite\n  scale: 'both',\n  tickBand: 'both',\n  tickCount: 'both',\n  tickExtra: 'both',\n  translate: 'both',\n  values: 'both',\n  zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\n\nexport interface AxisEncoding {\n  /**\n   * Custom encoding for the axis container.\n   */\n  axis?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for the axis domain rule mark.\n   */\n  domain?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for axis gridline rule marks.\n   */\n  grid?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for axis label text marks.\n   */\n  labels?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for axis tick rule marks.\n   */\n  ticks?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for the axis title text mark.\n   */\n  title?: GuideEncodingEntry;\n}\n\nexport const COMMON_AXIS_PROPERTIES_INDEX: Flag<keyof (VgAxis | Axis)> = {\n  orient: 1, // other things can depend on orient\n\n  aria: 1,\n  bandPosition: 1,\n  description: 1,\n  domain: 1,\n  domainCap: 1,\n  domainColor: 1,\n  domainDash: 1,\n  domainDashOffset: 1,\n  domainOpacity: 1,\n  domainWidth: 1,\n  format: 1,\n  formatType: 1,\n  grid: 1,\n  gridCap: 1,\n  gridColor: 1,\n  gridDash: 1,\n  gridDashOffset: 1,\n  gridOpacity: 1,\n  gridWidth: 1,\n  labelAlign: 1,\n  labelAngle: 1,\n  labelBaseline: 1,\n  labelBound: 1,\n  labelColor: 1,\n  labelFlush: 1,\n  labelFlushOffset: 1,\n  labelFont: 1,\n  labelFontSize: 1,\n  labelFontStyle: 1,\n  labelFontWeight: 1,\n  labelLimit: 1,\n  labelLineHeight: 1,\n  labelOffset: 1,\n  labelOpacity: 1,\n  labelOverlap: 1,\n  labelPadding: 1,\n  labels: 1,\n  labelSeparation: 1,\n  maxExtent: 1,\n  minExtent: 1,\n  offset: 1,\n  position: 1,\n  tickBand: 1,\n  tickCap: 1,\n  tickColor: 1,\n  tickCount: 1,\n  tickDash: 1,\n  tickDashOffset: 1,\n  tickExtra: 1,\n  tickMinStep: 1,\n  tickOffset: 1,\n  tickOpacity: 1,\n  tickRound: 1,\n  ticks: 1,\n  tickSize: 1,\n  tickWidth: 1,\n  title: 1,\n  titleAlign: 1,\n  titleAnchor: 1,\n  titleAngle: 1,\n  titleBaseline: 1,\n  titleColor: 1,\n  titleFont: 1,\n  titleFontSize: 1,\n  titleFontStyle: 1,\n  titleFontWeight: 1,\n  titleLimit: 1,\n  titleLineHeight: 1,\n  titleOpacity: 1,\n  titlePadding: 1,\n  titleX: 1,\n  titleY: 1,\n  translate: 1,\n  values: 1,\n  zindex: 1\n};\n\nconst AXIS_PROPERTIES_INDEX: Flag<keyof Axis> = {\n  ...COMMON_AXIS_PROPERTIES_INDEX,\n  style: 1,\n  labelExpr: 1,\n  encoding: 1\n};\n\nexport function isAxisProperty(prop: string): prop is keyof Axis {\n  return !!AXIS_PROPERTIES_INDEX[prop];\n}\n\n// Export for dependent projects\nexport const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);\n\nexport interface AxisConfigMixins {\n  /**\n   * Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config).\n   */\n  axis?: AxisConfig;\n\n  /**\n   * X-axis specific config.\n   */\n  axisX?: AxisConfig;\n\n  /**\n   * Y-axis specific config.\n   */\n  axisY?: AxisConfig;\n\n  /**\n   * Config for y-axis along the left edge of the chart.\n   */\n  axisLeft?: AxisConfig;\n\n  /**\n   * Config for y-axis along the right edge of the chart.\n   */\n  axisRight?: AxisConfig;\n\n  /**\n   * Config for x-axis along the top edge of the chart.\n   */\n  axisTop?: AxisConfig;\n\n  /**\n   * Config for x-axis along the bottom edge of the chart.\n   */\n  axisBottom?: AxisConfig;\n\n  /**\n   * Config for axes with \"band\" scales.\n   */\n  axisBand?: AxisConfig;\n\n  /**\n   * Config for axes with \"point\" scales.\n   */\n  axisPoint?: AxisConfig;\n\n  /**\n   * Config for axes with \"point\" or \"band\" scales.\n   */\n  axisDiscrete?: AxisConfig;\n\n  /**\n   * Config for quantitative axes.\n   */\n  axisQuantitative?: AxisConfig;\n\n  /**\n   * Config for temporal axes.\n   */\n  axisTemporal?: AxisConfig;\n\n  /**\n   * Config for x-axes with \"band\" scales.\n   */\n  axisXBand?: AxisConfig;\n\n  /**\n   * Config for x-axes with \"point\" scales.\n   */\n  axisXPoint?: AxisConfig;\n\n  /**\n   * Config for x-axes with \"point\" or \"band\" scales.\n   */\n  axisXDiscrete?: AxisConfig;\n\n  /**\n   * Config for x-quantitative axes.\n   */\n  axisXQuantitative?: AxisConfig;\n\n  /**\n   * Config for x-temporal axes.\n   */\n  axisXTemporal?: AxisConfig;\n\n  /**\n   * Config for y-axes with \"band\" scales.\n   */\n  axisYBand?: AxisConfig;\n\n  /**\n   * Config for y-axes with \"point\" scales.\n   */\n  axisYPoint?: AxisConfig;\n\n  /**\n   * Config for y-axes with \"point\" or \"band\" scales.\n   */\n  axisYDiscrete?: AxisConfig;\n\n  /**\n   * Config for y-quantitative axes.\n   */\n  axisYQuantitative?: AxisConfig;\n\n  /**\n   * Config for y-temporal axes.\n   */\n  axisYTemporal?: AxisConfig;\n}\n","import {Align, Color, Gradient, MarkConfig as VgMarkConfig, Orientation, SignalRef, TextBaseline} from 'vega';\nimport {toSet} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from './compositemark';\nimport {contains, Flag, keys} from './util';\n\n/**\n * All types of primitive marks.\n */\nexport const Mark = {\n  arc: 'arc',\n  area: 'area',\n  bar: 'bar',\n  image: 'image',\n  line: 'line',\n  point: 'point',\n  rect: 'rect',\n  rule: 'rule',\n  text: 'text',\n  tick: 'tick',\n  trail: 'trail',\n  circle: 'circle',\n  square: 'square',\n  geoshape: 'geoshape'\n} as const;\n\nexport const ARC = Mark.arc;\nexport const AREA = Mark.area;\nexport const BAR = Mark.bar;\nexport const IMAGE = Mark.image;\nexport const LINE = Mark.line;\nexport const POINT = Mark.point;\nexport const RECT = Mark.rect;\nexport const RULE = Mark.rule;\nexport const TEXT = Mark.text;\nexport const TICK = Mark.tick;\nexport const TRAIL = Mark.trail;\nexport const CIRCLE = Mark.circle;\nexport const SQUARE = Mark.square;\nexport const GEOSHAPE = Mark.geoshape;\n\nexport type Mark = keyof typeof Mark;\n\nexport function isMark(m: string): m is Mark {\n  return m in Mark;\n}\n\nexport function isPathMark(m: Mark | CompositeMark): m is 'line' | 'area' | 'trail' {\n  return contains(['line', 'area', 'trail'], m);\n}\n\nexport function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' {\n  return contains(['rect', 'bar', 'image', 'arc' /* arc is rect/interval in polar coordinate */], m);\n}\n\nexport const PRIMITIVE_MARKS = keys(Mark);\n\nexport interface ColorMixins {\n  /**\n   * Default color.\n   *\n   * __Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n   *\n   * __Note:__\n   * - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n   * - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`.\n   */\n  color?: Color | Gradient | SignalRef;\n}\n\nexport interface TooltipContent {\n  content: 'encoding' | 'data';\n}\n\n/** @hidden */\nexport type Hide = 'hide';\n\nexport interface VLOnlyMarkConfig extends ColorMixins {\n  /**\n   * Whether the mark's color should be used as fill color instead of stroke color.\n   *\n   * __Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n   *\n   * __Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n   *\n   */\n  filled?: boolean;\n\n  /**\n   * Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n   * - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n   * - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.\n   */\n  invalid?: 'filter' | Hide | null;\n\n  /**\n   * For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.\n   */\n  order?: null | boolean;\n\n  /**\n   * Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\n   * If set to `0.5`, the marks will be positioned in the middle of the time unit band step.\n   */\n  timeUnitBandPosition?: number;\n\n  /**\n   * Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\n   * If set to `0.5`, bandwidth of the marks will be half of the time unit band step.\n   */\n  timeUnitBand?: number;\n\n  /**\n   * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n   */\n  theta2?: number | SignalRef; // In Vega, this is called endAngle\n\n  /**\n   * The secondary (inner) radius in pixels of arc marks.\n   *\n   * @minimum 0\n   * __Default value:__ `0`\n   */\n  radius2?: number | SignalRef; // In Vega, this is called innerRadius\n}\n\nexport interface MarkConfig extends VLOnlyMarkConfig, Omit<VgMarkConfig, 'tooltip'> {\n  // ========== Overriding Vega ==========\n\n  /**\n   * The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n   *\n   * - If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n   * - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n   * - If set to `null` or `false`, then no tooltip will be used.\n   *\n   * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n   *\n   * __Default value:__ `null`\n   */\n  tooltip?: number | string | boolean | TooltipContent | null; // VL has a special object form for tooltip content\n\n  /**\n   * Default size for marks.\n   * - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n   * - For `bar`, this represents the band size of the bar, in pixels.\n   * - For `text`, this represents the font size, in pixels.\n   *\n   * __Default value:__\n   * - `30` for point, circle, square marks; width/height's `step`\n   * - `2` for bar marks with discrete dimensions;\n   * - `5` for bar marks with continuous dimensions;\n   * - `11` for text marks.\n   *\n   * @minimum 0\n   */\n  size?: number | SignalRef; // size works beyond symbol marks in VL\n\n  /**\n   * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n   *\n   * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n   */\n  x?: number | 'width' | SignalRef; // Vega doesn't have 'width'\n\n  /**\n   * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n   *\n   * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n   */\n  y?: number | 'height' | SignalRef; // Vega doesn't have 'height'\n\n  /**\n   * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   *\n   * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n   */\n  x2?: number | 'width' | SignalRef; // Vega doesn't have 'width'\n\n  /**\n   * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   *\n   * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n   */\n  y2?: number | 'height' | SignalRef; // Vega doesn't have 'height'\n\n  /**\n   * Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n   *\n   * __Default value:__ (None)\n   *\n   */\n  fill?: Color | Gradient | null | SignalRef; // docs: Vega doesn't have config.color\n\n  /**\n   * Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n   *\n   * __Default value:__ (None)\n   *\n   */\n  stroke?: Color | Gradient | null | SignalRef; // docs: Vega doesn't have config.color\n\n  /**\n   * The overall opacity (value between [0,1]).\n   *\n   * __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  opacity?: number | SignalRef; // docs (different defaults)\n\n  /**\n   * The orientation of a non-stacked bar, tick, area, and line charts.\n   * The value is either horizontal (default) or vertical.\n   * - For bar, rule and tick, this determines whether the size of the bar and tick\n   * should be applied to x or y dimension.\n   * - For area, this property determines the orient property of the Vega output.\n   * - For line and trail marks, this property determines the sort order of the points in the line\n   * if `config.sortLineBy` is not specified.\n   * For stacked charts, this is always determined by the orientation of the stack;\n   * therefore explicitly specified value will be ignored.\n   */\n  orient?: Orientation; // Vega orient doesn't apply to bar/tick/line. Since some logic depends on this property, Vega-Lite does NOT allow signal for orient.\n\n  /**\n   * The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n   */\n  align?: Align; // Vega doesn't apply align to ranged marks. Since some logic depends on this property, Vega-Lite does NOT allow signal for align.\n\n  /**\n   * The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n   */\n  baseline?: TextBaseline; // Vega doesn't apply align to ranged marks. Since some logic depends on this property, Vega-Lite does NOT allow signal for baseline.\n\n  /**\n   * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n   *\n   * - For text marks, polar coordinate angle in radians.\n   *\n   * @minimum 0\n   * @maximum 360\n   */\n  theta?: number | SignalRef; // overriding VG\n\n  /**\n   *\n   * For arc mark, the primary (outer) radius in pixels.\n   *\n   * For text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n   *\n   * @minimum 0\n   *\n   * __Default value:__ `min(plot_width, plot_height)/2`\n   */\n  radius?: number | SignalRef; // overriding VG\n\n  /**\n   * The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n   *\n   * @minimum 0\n   * __Default value:__ `0`\n   */\n  innerRadius?: number | SignalRef;\n\n  /**\n   * The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n   *\n   * @minimum 0\n   * __Default value:__ `0`\n   */\n  outerRadius?: number | SignalRef;\n}\n\nexport interface RectBinSpacingMixins {\n  /**\n   * Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n   *\n   * __Default value:__ `1`\n   *\n   * @minimum 0\n   */\n  binSpacing?: number;\n}\n\nexport type AnyMark = CompositeMark | CompositeMarkDef | Mark | MarkDef;\n\nexport function isMarkDef(mark: string | GenericMarkDef<any>): mark is GenericMarkDef<any> {\n  return mark['type'];\n}\n\nconst PRIMITIVE_MARK_INDEX = toSet(PRIMITIVE_MARKS);\n\nexport function isPrimitiveMark(mark: AnyMark): mark is Mark {\n  const markType = isMarkDef(mark) ? mark.type : mark;\n  return markType in PRIMITIVE_MARK_INDEX;\n}\n\nexport const STROKE_CONFIG = [\n  'stroke',\n  'strokeWidth',\n  'strokeDash',\n  'strokeDashOffset',\n  'strokeOpacity',\n  'strokeJoin',\n  'strokeMiterLimit'\n] as const;\n\nexport const FILL_CONFIG = ['fill', 'fillOpacity'] as const;\n\nexport const FILL_STROKE_CONFIG = [...STROKE_CONFIG, ...FILL_CONFIG];\n\nconst VL_ONLY_MARK_CONFIG_INDEX: Flag<keyof VLOnlyMarkConfig> = {\n  color: 1,\n  filled: 1,\n  invalid: 1,\n  order: 1,\n  radius2: 1,\n  theta2: 1,\n  timeUnitBand: 1,\n  timeUnitBandPosition: 1\n};\n\nexport const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX);\n\nexport const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: {\n  [k in Mark]?: (keyof Required<MarkConfigMixins>[k])[];\n} = {\n  area: ['line', 'point'],\n  bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n  rect: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n  line: ['point'],\n  tick: ['bandSize', 'thickness']\n};\n\nexport const defaultMarkConfig: MarkConfig = {\n  color: '#4c78a8',\n  invalid: 'filter',\n  timeUnitBand: 1\n};\n\n// TODO: replace with MarkConfigMixins[Mark] once https://github.com/vega/ts-json-schema-generator/issues/344 is fixed\nexport type AnyMarkConfig = MarkConfig | AreaConfig | BarConfig | RectConfig | LineConfig | TickConfig;\n\nexport interface MarkConfigMixins {\n  /** Mark Config */\n  mark?: MarkConfig;\n\n  // MARK-SPECIFIC CONFIGS\n\n  /** Arc-specific Config */\n  arc?: RectConfig;\n\n  /** Area-Specific Config */\n  area?: AreaConfig;\n\n  /** Bar-Specific Config */\n  bar?: BarConfig;\n\n  /** Circle-Specific Config */\n  circle?: MarkConfig;\n\n  /** Image-specific Config */\n  image?: RectConfig;\n\n  /** Line-Specific Config */\n  line?: LineConfig;\n\n  /** Point-Specific Config */\n  point?: MarkConfig;\n\n  /** Rect-Specific Config */\n  rect?: RectConfig;\n\n  /** Rule-Specific Config */\n  rule?: MarkConfig;\n\n  /** Square-Specific Config */\n  square?: MarkConfig;\n\n  /** Text-Specific Config */\n  text?: MarkConfig;\n\n  /** Tick-Specific Config */\n  tick?: TickConfig;\n\n  /** Trail-Specific Config */\n  trail?: LineConfig;\n\n  /** Geoshape-Specific Config */\n  geoshape?: MarkConfig;\n}\n\nexport interface RectConfig extends RectBinSpacingMixins, MarkConfig {\n  /**\n   * The default size of the bars on continuous scales.\n   *\n   * __Default value:__ `5`\n   *\n   * @minimum 0\n   */\n  continuousBandSize?: number;\n\n  /**\n   * The default size of the bars with discrete dimensions. If unspecified, the default size is  `step-2`, which provides 2 pixel offset between bars.\n   * @minimum 0\n   */\n  discreteBandSize?: number;\n}\n\nexport const BAR_CORNER_RADIUS_INDEX: Partial<Record<\n  Orientation,\n  ('cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomLeft' | 'cornerRadiusBottomRight')[]\n>> = {\n  horizontal: ['cornerRadiusTopRight', 'cornerRadiusBottomRight'],\n  vertical: ['cornerRadiusTopLeft', 'cornerRadiusTopRight']\n};\n\nexport interface BarCornerRadiusMixins {\n  /**\n   * - For vertical bars, top-left and top-right corner radius.\n   * - For horizontal bars, top-right and bottom-right corner radius.\n   */\n  cornerRadiusEnd?: number | SignalRef;\n}\n\nexport type BarConfig = RectConfig & BarCornerRadiusMixins;\n\nexport type OverlayMarkDef = MarkConfig & MarkDefMixins;\n\nexport interface PointOverlayMixins {\n  /**\n   * A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n   *\n   * - If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n   *\n   * - If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n   *\n   * - If this property is `false`, no points would be automatically added to line or area marks.\n   *\n   * __Default value:__ `false`.\n   */\n  point?: boolean | OverlayMarkDef | 'transparent';\n}\n\nexport interface LineConfig extends MarkConfig, PointOverlayMixins {}\n\nexport interface LineOverlayMixins {\n  /**\n   * A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n   *\n   * - If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n   *\n   * - If this value is `false`, no lines would be automatically added to area marks.\n   *\n   * __Default value:__ `false`.\n   */\n  line?: boolean | OverlayMarkDef;\n}\n\nexport interface AreaConfig extends MarkConfig, PointOverlayMixins, LineOverlayMixins {}\n\nexport interface TickThicknessMixins {\n  /**\n   * Thickness of the tick mark.\n   *\n   * __Default value:__  `1`\n   *\n   * @minimum 0\n   */\n  thickness?: number | SignalRef;\n}\n\nexport interface GenericMarkDef<M> {\n  /**\n   * The mark type. This could a primitive mark type\n   * (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n   * `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\n   * or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`).\n   */\n  type: M;\n}\n\nexport interface MarkDefMixins {\n  /**\n   * A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n   *\n   * __Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n   * __Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n   */\n  style?: string | string[];\n\n  /**\n   * Whether a mark be clipped to the enclosing group’s width and height.\n   */\n  clip?: boolean;\n\n  // Offset properties should not be a part of config\n\n  /**\n   * Offset for x-position.\n   */\n  xOffset?: number | SignalRef;\n\n  /**\n   * Offset for y-position.\n   */\n  yOffset?: number | SignalRef;\n\n  /**\n   * Offset for x2-position.\n   */\n  x2Offset?: number | SignalRef;\n\n  /**\n   * Offset for y2-position.\n   */\n  y2Offset?: number | SignalRef;\n\n  /**\n   * Offset for theta.\n   */\n  thetaOffset?: number | SignalRef;\n\n  /**\n   * Offset for theta2.\n   */\n  theta2Offset?: number | SignalRef;\n\n  /**\n   * Offset for radius.\n   */\n  radiusOffset?: number | SignalRef;\n\n  /**\n   * Offset for radius2.\n   */\n  radius2Offset?: number | SignalRef;\n}\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\nexport interface MarkDef<M extends string | Mark = Mark>\n  extends GenericMarkDef<M>,\n    Omit<\n      MarkConfig &\n        AreaConfig &\n        BarConfig & // always extends RectConfig\n        LineConfig &\n        TickConfig,\n      'startAngle' | 'endAngle'\n    >,\n    MarkDefMixins {\n  // Omit startAngle/endAngle since we use theta/theta2 from Vega-Lite schema to avoid confusion\n  // We still support start/endAngle  only in config, just in case people use Vega config with Vega-Lite.\n\n  /**\n   * @hidden\n   */\n  startAngle?: number | SignalRef;\n  /**\n   * @hidden\n   */\n  endAngle?: number | SignalRef;\n}\n\nconst DEFAULT_RECT_BAND_SIZE = 5;\n\nexport const defaultBarConfig: RectConfig = {\n  binSpacing: 1,\n  continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n  timeUnitBandPosition: 0.5\n};\n\nexport const defaultRectConfig: RectConfig = {\n  binSpacing: 0,\n  continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n  timeUnitBandPosition: 0.5\n};\n\nexport interface TickConfig extends MarkConfig, TickThicknessMixins {\n  /**\n   * The width of the ticks.\n   *\n   * __Default value:__  3/4 of step (width step for horizontal ticks and height step for vertical ticks).\n   * @minimum 0\n   */\n  bandSize?: number;\n}\n\nexport const defaultTickConfig: TickConfig = {\n  thickness: 1\n};\n\nexport function getMarkType(m: string | GenericMarkDef<any>) {\n  return isMarkDef(m) ? m.type : m;\n}\n","import {FieldName} from '../channeldef';\nimport {CompositeEncoding, FacetedCompositeEncoding} from '../compositemark';\nimport {Encoding} from '../encoding';\nimport {AnyMark, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {SelectionDef} from '../selection';\nimport {\n  BaseSpec,\n  DataMixins,\n  DeprecatedFrameMixins,\n  FrameMixins,\n  GenericCompositionLayout,\n  ResolveMixins\n} from './base';\nimport {TopLevel} from './toplevel';\n\n/**\n * Base interface for a unit (single-view) specification.\n */\nexport interface GenericUnitSpec<E extends Encoding<any>, M> extends BaseSpec {\n  /**\n   * A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n   * `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n   */\n  mark: M;\n\n  /**\n   * A key-value mapping between encoding channels and definition of fields.\n   */\n  encoding?: E;\n\n  /**\n   * An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\n   * and to `latitude` and `\"longitude\"` channels for other marks.\n   */\n  projection?: Projection;\n\n  /**\n   * A key-value mapping between selection names and definitions.\n   */\n  selection?: Record<string, SelectionDef>;\n}\n\n/**\n * A unit specification without any shortcut/expansion syntax.\n */\nexport type NormalizedUnitSpec = GenericUnitSpec<Encoding<FieldName>, Mark | MarkDef>;\n\n/**\n * A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).\n */\nexport type UnitSpec = GenericUnitSpec<CompositeEncoding, AnyMark> & DeprecatedFrameMixins;\n\nexport type UnitSpecWithFrame = GenericUnitSpec<CompositeEncoding, AnyMark> & FrameMixins;\n\n/**\n * Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).\n */\nexport type FacetedUnitSpec = GenericUnitSpec<FacetedCompositeEncoding, AnyMark> &\n  ResolveMixins &\n  GenericCompositionLayout &\n  FrameMixins;\n\nexport type TopLevelUnitSpec = TopLevel<FacetedUnitSpec> & DataMixins;\n\nexport function isUnitSpec(spec: BaseSpec): spec is FacetedUnitSpec | NormalizedUnitSpec {\n  return 'mark' in spec;\n}\n","import {Encoding} from '../encoding';\nimport {GenericMarkDef, getMarkType} from '../mark';\nimport {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base';\nimport {GenericSpec} from '../spec';\nimport {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {FieldName} from '../channeldef';\n\n// TODO: replace string with Mark\nexport type CompositeMarkUnitSpec<M extends string> = GenericUnitSpec<any, M | GenericMarkDef<M>>;\n\nexport class CompositeMarkNormalizer<M extends string> implements NonFacetUnitNormalizer<CompositeMarkUnitSpec<M>> {\n  constructor(\n    public name: string,\n    public run: (\n      spec: CompositeMarkUnitSpec<M>,\n      params: NormalizerParams,\n      normalize: Normalize<\n        // Input of the normalize method\n        GenericUnitSpec<Encoding<FieldName>, M> | GenericLayerSpec<any>,\n        // Output of the normalize method\n        NormalizedLayerSpec | NormalizedUnitSpec\n      >\n    ) => NormalizedLayerSpec | NormalizedUnitSpec\n  ) {}\n\n  public hasMatchingType(spec: GenericSpec<any, any, any, any>): spec is CompositeMarkUnitSpec<M> {\n    if (isUnitSpec(spec)) {\n      return getMarkType(spec.mark) === this.name;\n    }\n    return false;\n  }\n}\n","import {AggregateOp} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport {contains, Flag, keys} from './util';\n\nconst AGGREGATE_OP_INDEX: Flag<AggregateOp> = {\n  argmax: 1,\n  argmin: 1,\n  average: 1,\n  count: 1,\n  distinct: 1,\n  product: 1,\n  max: 1,\n  mean: 1,\n  median: 1,\n  min: 1,\n  missing: 1,\n  q1: 1,\n  q3: 1,\n  ci0: 1,\n  ci1: 1,\n  stderr: 1,\n  stdev: 1,\n  stdevp: 1,\n  sum: 1,\n  valid: 1,\n  values: 1,\n  variance: 1,\n  variancep: 1\n};\n\nexport const MULTIDOMAIN_SORT_OP_INDEX = {\n  count: 1,\n  min: 1,\n  max: 1\n};\n\nexport interface ArgminDef {\n  argmin: string;\n}\n\nexport interface ArgmaxDef {\n  argmax: string;\n}\n\nexport type NonArgAggregateOp = Exclude<AggregateOp, 'argmin' | 'argmax'>;\n\nexport type Aggregate = NonArgAggregateOp | ArgmaxDef | ArgminDef;\n\nexport function isArgminDef(a: Aggregate | string): a is ArgminDef {\n  return !!a && !!a['argmin'];\n}\n\nexport function isArgmaxDef(a: Aggregate | string): a is ArgmaxDef {\n  return !!a && !!a['argmax'];\n}\n\nexport const AGGREGATE_OPS = keys(AGGREGATE_OP_INDEX);\n\nexport function isAggregateOp(a: string | ArgminDef | ArgmaxDef): a is AggregateOp {\n  return isString(a) && !!AGGREGATE_OP_INDEX[a];\n}\n\nexport const COUNTING_OPS: NonArgAggregateOp[] = ['count', 'valid', 'missing', 'distinct'];\n\nexport function isCountingAggregateOp(aggregate?: string | Aggregate): boolean {\n  return isString(aggregate) && contains(COUNTING_OPS, aggregate);\n}\n\nexport function isMinMaxOp(aggregate?: Aggregate | string): boolean {\n  return isString(aggregate) && contains(['min', 'max'], aggregate);\n}\n\n/** Additive-based aggregation operations. These can be applied to stack. */\nexport const SUM_OPS: NonArgAggregateOp[] = ['count', 'sum', 'distinct', 'valid', 'missing'];\n\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexport const SHARED_DOMAIN_OPS: AggregateOp[] = ['mean', 'average', 'median', 'q1', 'q3', 'min', 'max'];\n\nexport const SHARED_DOMAIN_OP_INDEX = toSet(SHARED_DOMAIN_OPS);\n","/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\n\nimport {RangeType} from './compile/scale/type';\nimport {Encoding} from './encoding';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping, EncodingFacetMapping as ExtendedFacetMapping} from './spec/facet';\nimport {Flag, keys} from './util';\n\nexport type Channel = keyof Encoding<any> | keyof ExtendedFacetMapping<any>;\n\n// Facet\nexport const ROW = 'row' as const;\nexport const COLUMN = 'column' as const;\n\nexport const FACET = 'facet' as const;\n\n// Position\nexport const X = 'x' as const;\nexport const Y = 'y' as const;\nexport const X2 = 'x2' as const;\nexport const Y2 = 'y2' as const;\n\n// Arc-Position\nexport const RADIUS = 'radius' as const;\nexport const RADIUS2 = 'radius2' as const;\nexport const THETA = 'theta' as const;\nexport const THETA2 = 'theta2' as const;\n\n// Geo Position\nexport const LATITUDE = 'latitude' as const;\nexport const LONGITUDE = 'longitude' as const;\nexport const LATITUDE2 = 'latitude2' as const;\nexport const LONGITUDE2 = 'longitude2' as const;\n\n// Mark property with scale\nexport const COLOR = 'color' as const;\n\nexport const FILL = 'fill' as const;\n\nexport const STROKE = 'stroke' as const;\n\nexport const SHAPE = 'shape' as const;\nexport const SIZE = 'size' as const;\n\nexport const ANGLE = 'angle' as const;\n\nexport const OPACITY = 'opacity' as const;\nexport const FILLOPACITY = 'fillOpacity' as const;\n\nexport const STROKEOPACITY = 'strokeOpacity' as const;\n\nexport const STROKEWIDTH = 'strokeWidth' as const;\nexport const STROKEDASH = 'strokeDash' as const;\n\n// Non-scale channel\nexport const TEXT = 'text' as const;\nexport const ORDER = 'order' as const;\nexport const DETAIL = 'detail' as const;\nexport const KEY = 'key' as const;\n\nexport const TOOLTIP = 'tooltip' as const;\nexport const HREF = 'href' as const;\n\nexport const URL = 'url' as const;\nexport const DESCRIPTION = 'description' as const;\n\nconst POSITION_CHANNEL_INDEX = {\n  x: 1,\n  y: 1,\n  x2: 1,\n  y2: 1\n} as const;\n\nexport type PositionChannel = keyof typeof POSITION_CHANNEL_INDEX;\n\nconst POLAR_POSITION_CHANNEL_INDEX = {\n  theta: 1,\n  theta2: 1,\n  radius: 1,\n  radius2: 1\n} as const;\n\nexport type PolarPositionChannel = keyof typeof POLAR_POSITION_CHANNEL_INDEX;\n\nexport function isPolarPositionChannel(c: Channel): c is PolarPositionChannel {\n  return c in POLAR_POSITION_CHANNEL_INDEX;\n}\n\nconst GEO_POSIITON_CHANNEL_INDEX = {\n  longitude: 1,\n  longitude2: 1,\n  latitude: 1,\n  latitude2: 1\n} as const;\n\nexport type GeoPositionChannel = keyof typeof GEO_POSIITON_CHANNEL_INDEX;\n\nexport function getPositionChannelFromLatLong(channel: GeoPositionChannel): PositionChannel {\n  switch (channel) {\n    case LATITUDE:\n      return 'y';\n    case LATITUDE2:\n      return 'y2';\n    case LONGITUDE:\n      return 'x';\n    case LONGITUDE2:\n      return 'x2';\n  }\n}\n\nexport function isGeoPositionChannel(c: Channel): c is GeoPositionChannel {\n  return c in GEO_POSIITON_CHANNEL_INDEX;\n}\n\nexport const GEOPOSITION_CHANNELS = keys(GEO_POSIITON_CHANNEL_INDEX);\n\nconst UNIT_CHANNEL_INDEX: Flag<keyof Encoding<any>> = {\n  ...POSITION_CHANNEL_INDEX,\n  ...POLAR_POSITION_CHANNEL_INDEX,\n\n  ...GEO_POSIITON_CHANNEL_INDEX,\n\n  // color\n  color: 1,\n  fill: 1,\n  stroke: 1,\n\n  // other non-position with scale\n  opacity: 1,\n  fillOpacity: 1,\n  strokeOpacity: 1,\n\n  strokeWidth: 1,\n  strokeDash: 1,\n  size: 1,\n  angle: 1,\n  shape: 1,\n\n  // channels without scales\n  order: 1,\n  text: 1,\n  detail: 1,\n  key: 1,\n  tooltip: 1,\n  href: 1,\n  url: 1,\n  description: 1\n};\n\nexport type ColorChannel = 'color' | 'fill' | 'stroke';\n\nexport function isColorChannel(channel: Channel): channel is ColorChannel {\n  return channel === COLOR || channel === FILL || channel === STROKE;\n}\n\nexport type FacetChannel = keyof EncodingFacetMapping<any>;\n\nconst FACET_CHANNEL_INDEX: Flag<keyof EncodingFacetMapping<any>> = {\n  row: 1,\n  column: 1,\n  facet: 1\n};\n\nexport const FACET_CHANNELS = keys(FACET_CHANNEL_INDEX);\n\nconst CHANNEL_INDEX = {\n  ...UNIT_CHANNEL_INDEX,\n  ...FACET_CHANNEL_INDEX\n};\n\nexport const CHANNELS = keys(CHANNEL_INDEX);\n\nconst {order: _o, detail: _d, tooltip: _tt1, ...SINGLE_DEF_CHANNEL_INDEX} = CHANNEL_INDEX;\nconst {row: _r, column: _c, facet: _f, ...SINGLE_DEF_UNIT_CHANNEL_INDEX} = SINGLE_DEF_CHANNEL_INDEX;\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\n\nexport const SINGLE_DEF_CHANNELS = keys(SINGLE_DEF_CHANNEL_INDEX);\n\nexport type SingleDefChannel = typeof SINGLE_DEF_CHANNELS[number];\n\nexport const SINGLE_DEF_UNIT_CHANNELS = keys(SINGLE_DEF_UNIT_CHANNEL_INDEX);\n\nexport type SingleDefUnitChannel = typeof SINGLE_DEF_UNIT_CHANNELS[number];\n\nexport function isSingleDefUnitChannel(str: string): str is SingleDefUnitChannel {\n  return !!SINGLE_DEF_UNIT_CHANNEL_INDEX[str];\n}\n\nexport function isChannel(str: string): str is Channel {\n  return !!CHANNEL_INDEX[str];\n}\n\nexport type SecondaryRangeChannel = 'x2' | 'y2' | 'latitude2' | 'longitude2' | 'theta2' | 'radius2';\n\nexport const SECONDARY_RANGE_CHANNEL: SecondaryRangeChannel[] = [X2, Y2, LATITUDE2, LONGITUDE2, THETA2, RADIUS2];\n\nexport function isSecondaryRangeChannel(c: Channel): c is SecondaryRangeChannel {\n  const main = getMainRangeChannel(c);\n  return main !== c;\n}\n\nexport type MainChannelOf<C extends Channel> = C extends 'x2'\n  ? 'x'\n  : C extends 'y2'\n  ? 'y'\n  : C extends 'latitude2'\n  ? 'latitude'\n  : C extends 'longitude2'\n  ? 'longitude'\n  : C extends 'theta2'\n  ? 'theta'\n  : C extends 'radius2'\n  ? 'radius'\n  : C;\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getMainRangeChannel<C extends Channel>(channel: C): MainChannelOf<C> {\n  switch (channel) {\n    case X2:\n      return X as MainChannelOf<C>;\n    case Y2:\n      return Y as MainChannelOf<C>;\n    case LATITUDE2:\n      return LATITUDE as MainChannelOf<C>;\n    case LONGITUDE2:\n      return LONGITUDE as MainChannelOf<C>;\n    case THETA2:\n      return THETA as MainChannelOf<C>;\n    case RADIUS2:\n      return RADIUS as MainChannelOf<C>;\n  }\n  return channel as MainChannelOf<C>;\n}\n\nexport type SecondaryChannelOf<C extends Channel> = C extends 'x'\n  ? 'x2'\n  : C extends 'y'\n  ? 'y2'\n  : C extends 'latitude'\n  ? 'latitude2'\n  : C extends 'longitude'\n  ? 'longitude2'\n  : C extends 'theta'\n  ? 'theta2'\n  : C extends 'radius'\n  ? 'radius2'\n  : undefined;\n\nexport function getVgPositionChannel(channel: PolarPositionChannel | PositionChannel) {\n  if (isPolarPositionChannel(channel)) {\n    switch (channel) {\n      case THETA:\n        return 'startAngle';\n      case THETA2:\n        return 'endAngle';\n      case RADIUS:\n        return 'outerRadius';\n      case RADIUS2:\n        return 'innerRadius';\n    }\n  }\n  return channel;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getSecondaryRangeChannel<C extends Channel>(channel: C): SecondaryChannelOf<C> {\n  switch (channel) {\n    case X:\n      return X2 as SecondaryChannelOf<C>;\n    case Y:\n      return Y2 as SecondaryChannelOf<C>;\n    case LATITUDE:\n      return LATITUDE2 as SecondaryChannelOf<C>;\n    case LONGITUDE:\n      return LONGITUDE2 as SecondaryChannelOf<C>;\n    case THETA:\n      return THETA2 as SecondaryChannelOf<C>;\n    case RADIUS:\n      return RADIUS2 as SecondaryChannelOf<C>;\n  }\n  return undefined;\n}\n\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined {\n  switch (channel) {\n    case X:\n    case X2:\n      return 'width';\n    case Y:\n    case Y2:\n      return 'height';\n  }\n  return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetChannel(channel: Channel) {\n  switch (channel) {\n    case X:\n      return 'xOffset';\n    case Y:\n      return 'yOffset';\n    case X2:\n      return 'x2Offset';\n    case Y2:\n      return 'y2Offset';\n    case THETA:\n      return 'thetaOffset';\n    case RADIUS:\n      return 'radiusOffset';\n    case THETA2:\n      return 'theta2Offset';\n    case RADIUS2:\n      return 'radius2Offset';\n  }\n  return undefined;\n}\n\n// CHANNELS without COLUMN, ROW\nexport const UNIT_CHANNELS = keys(UNIT_CHANNEL_INDEX);\n\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nconst {\n  x: _x,\n  y: _y,\n  // x2 and y2 share the same scale as x and y\n  x2: _x2,\n  y2: _y2,\n  latitude: _latitude,\n  longitude: _longitude,\n  latitude2: _latitude2,\n  longitude2: _longitude2,\n  theta: _theta,\n  theta2: _theta2,\n  radius: _radius,\n  radius2: _radius2,\n  // The rest of unit channels then have scale\n  ...NONPOSITION_CHANNEL_INDEX\n} = UNIT_CHANNEL_INDEX;\n\nexport const NONPOSITION_CHANNELS = keys(NONPOSITION_CHANNEL_INDEX);\nexport type NonPositionChannel = typeof NONPOSITION_CHANNELS[number];\n\nexport const POSITION_SCALE_CHANNEL_INDEX = {\n  x: 1,\n  y: 1\n} as const;\nexport const POSITION_SCALE_CHANNELS = keys(POSITION_SCALE_CHANNEL_INDEX);\nexport type PositionScaleChannel = keyof typeof POSITION_SCALE_CHANNEL_INDEX;\n\nexport function isXorY(channel: Channel): channel is PositionScaleChannel {\n  return channel in POSITION_SCALE_CHANNEL_INDEX;\n}\n\nexport const POLAR_POSITION_SCALE_CHANNEL_INDEX = {\n  theta: 1,\n  radius: 1\n} as const;\n\nexport const POLAR_POSITION_SCALE_CHANNELS = keys(POLAR_POSITION_SCALE_CHANNEL_INDEX);\nexport type PolarPositionScaleChannel = keyof typeof POLAR_POSITION_SCALE_CHANNEL_INDEX;\n\nexport function getPositionScaleChannel(sizeType: 'width' | 'height'): PositionScaleChannel {\n  return sizeType === 'width' ? X : Y;\n}\n\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without X, Y\nconst {\n  // x2 and y2 share the same scale as x and y\n  // text and tooltip have format instead of scale,\n  // href has neither format, nor scale\n  text: _t,\n  tooltip: _tt,\n  href: _hr,\n  url: _u,\n  description: _al,\n  // detail and order have no scale\n  detail: _dd,\n  key: _k,\n  order: _oo,\n  ...NONPOSITION_SCALE_CHANNEL_INDEX\n} = NONPOSITION_CHANNEL_INDEX;\nexport const NONPOSITION_SCALE_CHANNELS = keys(NONPOSITION_SCALE_CHANNEL_INDEX);\nexport type NonPositionScaleChannel = typeof NONPOSITION_SCALE_CHANNELS[number];\n\nexport function isNonPositionScaleChannel(channel: Channel): channel is NonPositionScaleChannel {\n  return !!NONPOSITION_CHANNEL_INDEX[channel];\n}\n\n/**\n * @returns whether Vega supports legends for a particular channel\n */\nexport function supportLegend(channel: NonPositionScaleChannel) {\n  switch (channel) {\n    case COLOR:\n    case FILL:\n    case STROKE:\n    case SIZE:\n    case SHAPE:\n    case OPACITY:\n    case STROKEWIDTH:\n    case STROKEDASH:\n      return true;\n    case FILLOPACITY:\n    case STROKEOPACITY:\n    case ANGLE:\n      return false;\n  }\n}\n\n// Declare SCALE_CHANNEL_INDEX\nconst SCALE_CHANNEL_INDEX = {\n  ...POSITION_SCALE_CHANNEL_INDEX,\n  ...POLAR_POSITION_SCALE_CHANNEL_INDEX,\n  ...NONPOSITION_SCALE_CHANNEL_INDEX\n};\n\n/** List of channels with scales */\nexport const SCALE_CHANNELS = keys(SCALE_CHANNEL_INDEX);\nexport type ScaleChannel = typeof SCALE_CHANNELS[number];\n\nexport function isScaleChannel(channel: Channel): channel is ScaleChannel {\n  return !!SCALE_CHANNEL_INDEX[channel];\n}\n\nexport type SupportedMark = Partial<Record<Mark, 'always' | 'binned'>>;\n\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel  channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nexport function supportMark(channel: Channel, mark: Mark) {\n  return getSupportedMark(channel)[mark];\n}\n\nconst ALL_MARKS: Record<Mark, 'always'> = {\n  // all marks\n  arc: 'always',\n  area: 'always',\n  bar: 'always',\n  circle: 'always',\n  geoshape: 'always',\n  image: 'always',\n  line: 'always',\n  rule: 'always',\n  point: 'always',\n  rect: 'always',\n  square: 'always',\n  trail: 'always',\n  text: 'always',\n  tick: 'always'\n};\n\nconst {geoshape: _g, ...ALL_MARKS_EXCEPT_GEOSHAPE} = ALL_MARKS;\n\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to 'always', 'binned', or undefined\n */\nfunction getSupportedMark(channel: Channel): SupportedMark {\n  switch (channel) {\n    case COLOR:\n    case FILL:\n    case STROKE:\n    // falls through\n\n    case DESCRIPTION:\n    case DETAIL:\n    case KEY:\n    case TOOLTIP:\n    case HREF:\n    case ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n    case OPACITY:\n    case FILLOPACITY:\n    case STROKEOPACITY:\n    case STROKEWIDTH:\n\n    // falls through\n\n    case FACET:\n    case ROW: // falls through\n    case COLUMN:\n      return ALL_MARKS;\n    case X:\n    case Y:\n    case LATITUDE:\n    case LONGITUDE:\n      // all marks except geoshape. geoshape does not use X, Y -- it uses a projection\n      return ALL_MARKS_EXCEPT_GEOSHAPE;\n    case X2:\n    case Y2:\n    case LATITUDE2:\n    case LONGITUDE2:\n      return {\n        area: 'always',\n        bar: 'always',\n        image: 'always',\n        rect: 'always',\n        rule: 'always',\n        circle: 'binned',\n        point: 'binned',\n        square: 'binned',\n        tick: 'binned',\n        line: 'binned',\n        trail: 'binned'\n      };\n    case SIZE:\n      return {\n        point: 'always',\n        tick: 'always',\n        rule: 'always',\n        circle: 'always',\n        square: 'always',\n        bar: 'always',\n        text: 'always',\n        line: 'always',\n        trail: 'always'\n      };\n    case STROKEDASH:\n      return {\n        line: 'always',\n        point: 'always',\n        tick: 'always',\n        rule: 'always',\n        circle: 'always',\n        square: 'always',\n        bar: 'always',\n        geoshape: 'always'\n      };\n    case SHAPE:\n      return {point: 'always', geoshape: 'always'};\n    case TEXT:\n      return {text: 'always'};\n    case ANGLE:\n      return {point: 'always', square: 'always', text: 'always'};\n    case URL:\n      return {image: 'always'};\n    case THETA:\n      return {text: 'always', arc: 'always'};\n    case RADIUS:\n      return {text: 'always', arc: 'always'};\n    case THETA2:\n    case RADIUS2:\n      return {arc: 'always'};\n  }\n}\n\nexport function rangeType(channel: Channel): RangeType {\n  switch (channel) {\n    case X:\n    case Y:\n    case THETA:\n    case RADIUS:\n    case SIZE:\n    case ANGLE:\n    case STROKEWIDTH:\n    case OPACITY:\n    case FILLOPACITY:\n    case STROKEOPACITY:\n\n    // X2 and Y2 use X and Y scales, so they similarly have continuous range. [falls through]\n    case X2:\n    case Y2:\n    case THETA2:\n    case RADIUS2:\n      return undefined;\n\n    case FACET:\n    case ROW:\n    case COLUMN:\n    case SHAPE:\n    case STROKEDASH:\n    // TEXT, TOOLTIP, URL, and HREF have no scale but have discrete output [falls through]\n    case TEXT:\n    case TOOLTIP:\n    case HREF:\n    case URL:\n    case DESCRIPTION:\n      return 'discrete';\n\n    // Color can be either continuous or discrete, depending on scale type.\n    case COLOR:\n    case FILL:\n    case STROKE:\n      return 'flexible';\n\n    // No scale, no range type.\n\n    case LATITUDE:\n    case LONGITUDE:\n    case LATITUDE2:\n    case LONGITUDE2:\n    case DETAIL:\n    case KEY:\n    case ORDER:\n      return undefined;\n  }\n}\n","import {isBoolean, isObject} from 'vega-util';\nimport {\n  Channel,\n  COLOR,\n  COLUMN,\n  FILL,\n  FILLOPACITY,\n  OPACITY,\n  ROW,\n  SHAPE,\n  SIZE,\n  STROKE,\n  STROKEDASH,\n  STROKEOPACITY,\n  STROKEWIDTH\n} from './channel';\nimport {normalizeBin} from './channeldef';\nimport {SelectionExtent} from './selection';\nimport {keys, varName} from './util';\n\nexport interface BaseBin {\n  /**\n   * The number base to use for automatic bin determination (default is base 10).\n   *\n   * __Default value:__ `10`\n   *\n   */\n  base?: number;\n  /**\n   * An exact step size to use between bins.\n   *\n   * __Note:__ If provided, options such as maxbins will be ignored.\n   */\n  step?: number;\n  /**\n   * An array of allowable step sizes to choose from.\n   * @minItems 1\n   */\n  steps?: number[];\n  /**\n   * A minimum allowable step size (particularly useful for integer values).\n   */\n  minstep?: number;\n  /**\n   * Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n   *\n   * __Default value:__ `[5, 2]`\n   *\n   * @minItems 1\n   */\n  divide?: [number, number];\n  /**\n   * Maximum number of bins.\n   *\n   * __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels\n   *\n   * @minimum 2\n   */\n  maxbins?: number;\n  /**\n   * A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n   *\n   * __Default value:__ the minimum bin extent value\n   */\n  anchor?: number;\n  /**\n   * If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n   *\n   * __Default value:__ `true`\n   */\n  nice?: boolean;\n}\n\n/**\n * Binning properties or boolean flag for determining whether to bin data or not.\n */\nexport interface BinParams extends BaseBin {\n  /**\n   * A two-element (`[min, max]`) array indicating the range of desired bin values.\n   */\n  extent?: BinExtent; // VgBinTransform uses a different extent so we need to pull this out.\n\n  /**\n   * When set to `true`, Vega-Lite treats the input data as already binned.\n   */\n  binned?: boolean;\n}\n\nexport type Bin = boolean | BinParams | 'binned' | null;\n\nexport type BinExtent = [number, number] | SelectionExtent;\n\n/**\n * Create a key for the bin configuration. Not for prebinned bin.\n */\nexport function binToString(bin: BinParams | true) {\n  if (isBoolean(bin)) {\n    bin = normalizeBin(bin, undefined);\n  }\n  return (\n    'bin' +\n    keys(bin)\n      .map(p => (isSelectionExtent(bin[p]) ? varName(`_${p}_${Object.entries(bin[p])}`) : varName(`_${p}_${bin[p]}`)))\n      .join('')\n  );\n}\n\n/**\n * Vega-Lite should bin the data.\n */\nexport function isBinning(bin: BinParams | boolean | 'binned'): bin is BinParams | true {\n  return bin === true || (isBinParams(bin) && !bin.binned);\n}\n\n/**\n * The data is already binned and so Vega-Lite should not bin it again.\n */\nexport function isBinned(bin: BinParams | boolean | 'binned'): bin is 'binned' | BinParams {\n  return bin === 'binned' || (isBinParams(bin) && bin.binned === true);\n}\n\nexport function isBinParams(bin: BinParams | boolean | 'binned'): bin is BinParams {\n  return isObject(bin);\n}\n\nexport function isSelectionExtent(extent: BinExtent): extent is SelectionExtent {\n  return extent?.['selection'];\n}\n\nexport function autoMaxBins(channel?: Channel): number {\n  switch (channel) {\n    case ROW:\n    case COLUMN:\n    case SIZE:\n    case COLOR:\n    case FILL:\n    case STROKE:\n    case STROKEWIDTH:\n    case OPACITY:\n    case FILLOPACITY:\n    case STROKEOPACITY:\n    // Facets and Size shouldn't have too many bins\n    // We choose 6 like shape to simplify the rule [falls through]\n    case SHAPE:\n      return 6; // Vega's \"shape\" has 6 distinct values\n    case STROKEDASH:\n      return 4; // We only provide 5 different stroke dash values (but 4 is more effective)\n    default:\n      return 10;\n  }\n}\n","/**\n * Collection of all Vega-Lite Error Messages\n */\n\nimport {AggregateOp} from 'vega';\nimport {Aggregate} from '../aggregate';\nimport {Channel, FacetChannel, GeoPositionChannel, getSizeChannel, PositionScaleChannel} from '../channel';\nimport {HiddenCompositeAggregate, TypedFieldDef, Value} from '../channeldef';\nimport {SplitParentProperty} from '../compile/split';\nimport {CompositeMark} from '../compositemark';\nimport {ErrorBarCenter, ErrorBarExtent} from '../compositemark/errorbar';\nimport {DateTime, DateTimeExpr} from '../datetime';\nimport {Mark} from '../mark';\nimport {Projection} from '../projection';\nimport {ScaleType} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {Type} from '../type';\nimport {stringify} from '../util';\nimport {VgSortField} from '../vega.schema';\n\nexport function invalidSpec(spec: GenericSpec<any, any, any, any>) {\n  return `Invalid specification ${JSON.stringify(\n    spec\n  )}. Make sure the specification includes at least one of the following properties: \"mark\", \"layer\", \"facet\", \"hconcat\", \"vconcat\", \"concat\", or \"repeat\".`;\n}\n\n// FIT\nexport const FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n\nexport function containerSizeNonSingle(name: 'width' | 'height') {\n  const uName = name == 'width' ? 'Width' : 'Height';\n  return `${uName} \"container\" only works for single views and layered views.`;\n}\n\nexport function containerSizeNotCompatibleWithAutosize(name: 'width' | 'height') {\n  const uName = name == 'width' ? 'Width' : 'Height';\n  const fitDirection = name == 'width' ? 'x' : 'y';\n  return `${uName} \"container\" only works well with autosize \"fit\" or \"fit-${fitDirection}\".`;\n}\n\nexport function droppingFit(channel?: PositionScaleChannel) {\n  return channel\n    ? `Dropping \"fit-${channel}\" because spec has discrete ${getSizeChannel(channel)}.`\n    : `Dropping \"fit\" because spec has discrete size.`;\n}\n\n// SELECTION\nexport function cannotProjectOnChannelWithoutField(channel: Channel) {\n  return `Cannot project a selection on encoding channel \"${channel}\", which has no field.`;\n}\n\nexport function cannotProjectAggregate(channel: Channel, aggregate: Aggregate | HiddenCompositeAggregate) {\n  return `Cannot project a selection on encoding channel \"${channel}\" as it uses an aggregate function (\"${aggregate}\").`;\n}\n\nexport function nearestNotSupportForContinuous(mark: string) {\n  return `The \"nearest\" transform is not supported for ${mark} marks.`;\n}\n\nexport function selectionNotSupported(mark: CompositeMark) {\n  return `Selection not supported for ${mark} yet.`;\n}\n\nexport function selectionNotFound(name: string) {\n  return `Cannot find a selection named \"${name}\".`;\n}\n\nexport const SCALE_BINDINGS_CONTINUOUS =\n  'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n\nexport const LEGEND_BINDINGS_PROJECT_LENGTH =\n  'Legend bindings are only supported for selections over an individual field or encoding channel.';\nexport function noSameUnitLookup(name: string) {\n  return (\n    `Cannot define and lookup the \"${name}\" selection in the same view. ` +\n    `Try moving the lookup into a second, layered view?`\n  );\n}\n\n// REPEAT\nexport function noSuchRepeatedValue(field: string) {\n  return `Unknown repeated value \"${field}\".`;\n}\n\nexport function columnsNotSupportByRowCol(type: 'facet' | 'repeat') {\n  return `The \"columns\" property cannot be used when \"${type}\" has nested row/column.`;\n}\n\n// CONCAT / REPEAT\nexport const CONCAT_CANNOT_SHARE_AXIS =\n  'Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415).';\n\n// DATA\nexport function unrecognizedParse(p: string) {\n  return `Unrecognized parse \"${p}\".`;\n}\n\nexport function differentParse(field: string, local: string, ancestor: string) {\n  return `An ancestor parsed field \"${field}\" as ${ancestor} but a child wants to parse the field as ${local}.`;\n}\n\n// TRANSFORMS\nexport function invalidTransformIgnored(transform: any) {\n  return `Ignoring an invalid transform: ${stringify(transform)}.`;\n}\n\nexport const NO_FIELDS_NEEDS_AS =\n  'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n\n// ENCODING & FACET\n\nexport function customFormatTypeNotAllowed(channel: Channel) {\n  return `Config.customFormatTypes is not true, thus custom format type and format for channel ${channel} are dropped.`;\n}\n\nexport function encodingOverridden(channels: Channel[]) {\n  return `Layer's shared ${channels.join(',')} channel ${channels.length === 1 ? 'is' : 'are'} overriden.`;\n}\nexport function projectionOverridden(opt: {parentProjection: Projection; projection: Projection}) {\n  const {parentProjection, projection} = opt;\n  return `Layer's shared projection ${stringify(parentProjection)} is overridden by a child projection ${stringify(\n    projection\n  )}.`;\n}\n\nexport const REPLACE_ANGLE_WITH_THETA = 'Arc marks uses theta channel rather than angle, replacing angle with theta.';\n\nexport function primitiveChannelDef(\n  channel: Channel,\n  type: 'string' | 'number' | 'boolean',\n  value: Exclude<Value, null>\n) {\n  return `Channel ${channel} is a ${type}. Converted to {value: ${stringify(value)}}.`;\n}\n\nexport function invalidFieldType(type: Type) {\n  return `Invalid field type \"${type}\".`;\n}\n\nexport function invalidFieldTypeForCountAggregate(type: Type, aggregate: Aggregate | string) {\n  return `Invalid field type \"${type}\" for aggregate: \"${aggregate}\", using \"quantitative\" instead.`;\n}\n\nexport function invalidAggregate(aggregate: AggregateOp | string) {\n  return `Invalid aggregation operator \"${aggregate}\".`;\n}\n\nexport function missingFieldType(channel: Channel, newType: Type) {\n  return `Missing type for channel \"${channel}\", using \"${newType}\" instead.`;\n}\nexport function droppingColor(type: 'encoding' | 'property', opt: {fill?: boolean; stroke?: boolean}) {\n  const {fill, stroke} = opt;\n  return `Dropping color ${type} as the plot also has ${\n    fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke'\n  }.`;\n}\n\nexport function emptyFieldDef(fieldDef: TypedFieldDef<string>, channel: Channel) {\n  return `Dropping ${stringify(\n    fieldDef\n  )} from channel \"${channel}\" since it does not contain any data field, datum, value, or signal.`;\n}\nexport function latLongDeprecated(channel: Channel, type: Type, newChannel: GeoPositionChannel) {\n  return `${channel}-encoding with type ${type} is deprecated. Replacing with ${newChannel}-encoding.`;\n}\n\nexport const LINE_WITH_VARYING_SIZE =\n  'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n\nexport function incompatibleChannel(channel: Channel, markOrFacet: Mark | 'facet' | CompositeMark, when?: string) {\n  return `${channel} dropped as it is incompatible with \"${markOrFacet}\"${when ? ` when ${when}` : ''}.`;\n}\n\nexport function invalidEncodingChannel(channel: string) {\n  return `${channel}-encoding is dropped as ${channel} is not a valid encoding channel.`;\n}\n\nexport function facetChannelShouldBeDiscrete(channel: string) {\n  return `${channel} encoding should be discrete (ordinal / nominal / binned).`;\n}\n\nexport function facetChannelDropped(channels: FacetChannel[]) {\n  return `Facet encoding dropped as ${channels.join(' and ')} ${channels.length > 1 ? 'are' : 'is'} also specified.`;\n}\n\nexport function discreteChannelCannotEncode(channel: Channel, type: Type) {\n  return `Using discrete channel \"${channel}\" to encode \"${type}\" field can be misleading as it does not encode ${\n    type === 'ordinal' ? 'order' : 'magnitude'\n  }.`;\n}\n\n// Mark\nexport function lineWithRange(hasX2: boolean, hasY2: boolean) {\n  const channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n  return `Line mark is for continuous lines and thus cannot be used with ${channels}. We will use the rule mark (line segments) instead.`;\n}\n\nexport function orientOverridden(original: string, actual: string) {\n  return `Specified orient \"${original}\" overridden with \"${actual}\".`;\n}\n\n// SCALE\nexport const CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN =\n  'Custom domain scale cannot be unioned with default field-based domain.';\n\nexport const RANGE_STEP_DEPRECATED = `Scale's \"rangeStep\" is deprecated and will be removed in Vega-Lite 5.0. Please use \"width\"/\"height\": {\"step\": ...} instead. See https://vega.github.io/vega-lite/docs/size.html.`;\n\nexport function cannotUseScalePropertyWithNonColor(prop: string) {\n  return `Cannot use the scale property \"${prop}\" with non-color channel.`;\n}\n\nexport function unaggregateDomainHasNoEffectForRawField(fieldDef: TypedFieldDef<string>) {\n  return `Using unaggregated domain with raw field has no effect (${stringify(fieldDef)}).`;\n}\n\nexport function unaggregateDomainWithNonSharedDomainOp(aggregate: Aggregate | string) {\n  return `Unaggregated domain not applicable for \"${aggregate}\" since it produces values outside the origin domain of the source data.`;\n}\n\nexport function unaggregatedDomainWithLogScale(fieldDef: TypedFieldDef<string>) {\n  return `Unaggregated domain is currently unsupported for log scale (${stringify(fieldDef)}).`;\n}\n\nexport function cannotApplySizeToNonOrientedMark(mark: Mark) {\n  return `Cannot apply size to non-oriented mark \"${mark}\".`;\n}\n\nexport function scaleTypeNotWorkWithChannel(channel: Channel, scaleType: ScaleType, defaultScaleType: ScaleType) {\n  return `Channel \"${channel}\" does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scaleTypeNotWorkWithFieldDef(scaleType: ScaleType, defaultScaleType: ScaleType) {\n  return `FieldDef does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scalePropertyNotWorkWithScaleType(scaleType: ScaleType, propName: string, channel: Channel) {\n  return `${channel}-scale's \"${propName}\" is dropped as it does not work with ${scaleType} scale.`;\n}\n\nexport function scaleTypeNotWorkWithMark(mark: Mark, scaleType: ScaleType) {\n  return `Scale type \"${scaleType}\" does not work with mark \"${mark}\".`;\n}\n\nexport function stepDropped(channel: 'width' | 'height') {\n  return `The step for \"${channel}\" is dropped because the ${channel === 'width' ? 'x' : 'y'} is continuous.`;\n}\n\nexport function mergeConflictingProperty<T>(\n  property: string | number | symbol,\n  propertyOf: SplitParentProperty,\n  v1: T,\n  v2: T\n) {\n  return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n    v2\n  )}). Using ${stringify(v1)}.`;\n}\n\nexport function mergeConflictingDomainProperty<T>(property: 'domains', propertyOf: SplitParentProperty, v1: T, v2: T) {\n  return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n    v2\n  )}). Using the union of the two domains.`;\n}\n\nexport function independentScaleMeansIndependentGuide(channel: Channel) {\n  return `Setting the scale to be independent for \"${channel}\" means we also have to set the guide (axis or legend) to be independent.`;\n}\n\nexport function domainSortDropped(sort: VgSortField) {\n  return `Dropping sort property ${stringify(\n    sort\n  )} as unioned domains only support boolean or op \"count\", \"min\", and \"max\".`;\n}\n\nexport const MORE_THAN_ONE_SORT =\n  'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n\nexport const FACETED_INDEPENDENT_DIFFERENT_SOURCES =\n  'Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES =\n  'Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_SOURCE =\n  'Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.';\n\n// AXIS\nexport const INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n\n// STACK\nexport function cannotStackRangedMark(channel: Channel) {\n  return `Cannot stack \"${channel}\" if there is already \"${channel}2\".`;\n}\n\nexport function cannotStackNonLinearScale(scaleType: ScaleType) {\n  return `Cannot stack non-linear scale (${scaleType}).`;\n}\n\nexport function stackNonSummativeAggregate(aggregate: Aggregate | string) {\n  return `Stacking is applied even though the aggregate function is non-summative (\"${aggregate}\").`;\n}\n\n// TIMEUNIT\nexport function invalidTimeUnit(unitName: string, value: string | number) {\n  return `Invalid ${unitName}: ${stringify(value)}.`;\n}\n\nexport function droppedDay(d: DateTime | DateTimeExpr) {\n  return `Dropping day from datetime ${stringify(d)} as day cannot be combined with other units.`;\n}\n\nexport function errorBarCenterAndExtentAreNotNeeded(center: ErrorBarCenter, extent: ErrorBarExtent) {\n  return `${extent ? 'extent ' : ''}${extent && center ? 'and ' : ''}${center ? 'center ' : ''}${\n    extent && center ? 'are ' : 'is '\n  }not needed when data are aggregated.`;\n}\n\nexport function errorBarCenterIsUsedWithWrongExtent(\n  center: ErrorBarCenter,\n  extent: ErrorBarExtent,\n  mark: 'errorbar' | 'errorband'\n) {\n  return `${center} is not usually used with ${extent} for ${mark}.`;\n}\n\nexport function errorBarContinuousAxisHasCustomizedAggregate(\n  aggregate: Aggregate | string,\n  compositeMark: CompositeMark\n) {\n  return `Continuous axis should not have customized aggregation function ${aggregate}; ${compositeMark} already agregates the axis.`;\n}\n\nexport function errorBarCenterIsNotNeeded(extent: ErrorBarExtent, mark: 'errorbar' | 'errorband') {\n  return `Center is not needed to be specified in ${mark} when extent is ${extent}.`;\n}\n\nexport function errorBand1DNotSupport(property: 'interpolate' | 'tension') {\n  return `1D error band does not support ${property}.`;\n}\n\n// CHANNEL\nexport function channelRequiredForBinned(channel: Channel) {\n  return `Channel ${channel} is required for \"binned\" bin.`;\n}\n\nexport function domainRequiredForThresholdScale(channel: Channel) {\n  return `Domain for ${channel} is required for threshold scale.`;\n}\n","/**\n * Vega-Lite's singleton logger utility.\n */\n\nimport {logger, LoggerInterface, Warn} from 'vega-util';\nexport * as message from './message';\n\n/**\n * Main (default) Vega Logger instance for Vega-Lite.\n */\nconst main = logger(Warn);\nlet current: LoggerInterface = main;\n\n/**\n * Logger tool for checking if the code throws correct warning.\n */\nexport class LocalLogger implements LoggerInterface {\n  public warns: any[] = [];\n  public infos: any[] = [];\n  public debugs: any[] = [];\n\n  public level() {\n    return this;\n  }\n\n  public warn(...args: readonly any[]) {\n    this.warns.push(...args);\n    return this;\n  }\n\n  public info(...args: readonly any[]) {\n    this.infos.push(...args);\n    return this;\n  }\n\n  public debug(...args: readonly any[]) {\n    this.debugs.push(...args);\n    return this;\n  }\n\n  public error(...args: readonly any[]): this {\n    throw Error(...args);\n  }\n}\n\nexport function wrap(f: (logger: LocalLogger) => void) {\n  return () => {\n    current = new LocalLogger();\n    f(current as LocalLogger);\n    reset();\n  };\n}\n\n/**\n * Set the singleton logger to be a custom logger.\n */\nexport function set(newLogger: LoggerInterface) {\n  current = newLogger;\n  return current;\n}\n\n/**\n * Reset the main logger to use the default Vega Logger.\n */\nexport function reset() {\n  current = main;\n  return current;\n}\n\nexport function warn(...args: readonly any[]) {\n  current.warn(...args);\n}\n\nexport function info(...args: readonly any[]) {\n  current.info(...args);\n}\n\nexport function debug(...args: readonly any[]) {\n  current.debug(...args);\n}\n","// DateTime definition object\n\nimport {isNumber, isObject} from 'vega-util';\nimport * as log from './log';\nimport {TIMEUNIT_PARTS} from './timeunit';\nimport {duplicate, isNumeric, keys} from './util';\n\n/**\n * @minimum 1\n * @maximum 12\n * @TJS-type integer\n */\nexport type Month = number;\n\n/**\n * @minimum 1\n * @maximum 7\n */\nexport type Day = number;\n\n/**\n * Object for defining datetime in Vega-Lite Filter.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n * We accept string for month and day names.\n */\nexport interface DateTime {\n  /**\n   * Integer value representing the year.\n   * @TJS-type integer\n   */\n  year?: number;\n\n  /**\n   * Integer value representing the quarter of the year (from 1-4).\n   * @minimum 1\n   * @maximum 4\n   * @TJS-type integer\n   */\n  quarter?: number;\n\n  /**\n   * One of:\n   * (1) integer value representing the month from `1`-`12`. `1` represents January;\n   * (2) case-insensitive month name (e.g., `\"January\"`);\n   * (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`).\n   */\n  month?: Month | string;\n\n  /**\n   * Integer value representing the date (day of the month) from 1-31.\n   * @minimum 1\n   * @maximum 31\n   * @TJS-type integer\n   */\n  date?: number;\n\n  /**\n   * Value representing the day of a week. This can be one of:\n   * (1) integer value -- `1` represents Monday;\n   * (2) case-insensitive day name (e.g., `\"Monday\"`);\n   * (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n   *\n   * **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`.\n   */\n  day?: Day | string;\n\n  /**\n   * Integer value representing the hour of a day from 0-23.\n   * @minimum 0\n   * @maximum 24\n   * @TJS-type integer\n   */\n  hours?: number;\n\n  /**\n   * Integer value representing the minute segment of time from 0-59.\n   * @minimum 0\n   * @maximum 60\n   * @TJS-type integer\n   */\n  minutes?: number;\n\n  /**\n   * Integer value representing the second segment (0-59) of a time value\n   * @minimum 0\n   * @maximum 60\n   * @TJS-type integer\n   */\n  seconds?: number;\n\n  /**\n   * Integer value representing the millisecond segment of time.\n   * @minimum 0\n   * @maximum 1000\n   * @TJS-type integer\n   */\n  milliseconds?: number;\n\n  /**\n   * A boolean flag indicating if date time is in utc time. If false, the date time is in local time\n   */\n  utc?: boolean;\n}\n\n/**\n * Internal Object for defining datetime expressions.\n * This is an expression version of DateTime.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n */\nexport interface DateTimeExpr {\n  year?: string;\n  quarter?: string;\n  month?: string;\n  date?: string;\n  day?: string;\n  hours?: string;\n  minutes?: string;\n  seconds?: string;\n  milliseconds?: string;\n  utc?: boolean;\n}\n\nexport function isDateTime(o: any): o is DateTime {\n  if (o && isObject(o)) {\n    for (const part of TIMEUNIT_PARTS) {\n      if (part in o) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nexport const MONTHS = [\n  'january',\n  'february',\n  'march',\n  'april',\n  'may',\n  'june',\n  'july',\n  'august',\n  'september',\n  'october',\n  'november',\n  'december'\n];\nexport const SHORT_MONTHS = MONTHS.map(m => m.substr(0, 3));\n\nexport const DAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\nexport const SHORT_DAYS = DAYS.map(d => d.substr(0, 3));\n\nfunction normalizeQuarter(q: number | string): number {\n  if (isNumeric(q)) {\n    q = +q;\n  }\n\n  if (isNumber(q)) {\n    if (q > 4) {\n      log.warn(log.message.invalidTimeUnit('quarter', q));\n    }\n    // We accept 1-based quarter, so need to readjust to 0-based quarter\n    return q - 1;\n  } else {\n    // Invalid quarter\n    throw new Error(log.message.invalidTimeUnit('quarter', q));\n  }\n}\n\nfunction normalizeMonth(m: string | number): number {\n  if (isNumeric(m)) {\n    m = +m;\n  }\n\n  if (isNumber(m)) {\n    // We accept 1-based month, so need to readjust to 0-based month\n    return m - 1;\n  } else {\n    const lowerM = m.toLowerCase();\n    const monthIndex = MONTHS.indexOf(lowerM);\n    if (monthIndex !== -1) {\n      return monthIndex; // 0 for january, ...\n    }\n    const shortM = lowerM.substr(0, 3);\n    const shortMonthIndex = SHORT_MONTHS.indexOf(shortM);\n    if (shortMonthIndex !== -1) {\n      return shortMonthIndex;\n    }\n\n    // Invalid month\n    throw new Error(log.message.invalidTimeUnit('month', m));\n  }\n}\n\nfunction normalizeDay(d: string | number): number {\n  if (isNumeric(d)) {\n    d = +d;\n  }\n\n  if (isNumber(d)) {\n    // mod so that this can be both 0-based where 0 = sunday\n    // and 1-based where 7=sunday\n    return d % 7;\n  } else {\n    const lowerD = d.toLowerCase();\n    const dayIndex = DAYS.indexOf(lowerD);\n    if (dayIndex !== -1) {\n      return dayIndex; // 0 for january, ...\n    }\n    const shortD = lowerD.substr(0, 3);\n    const shortDayIndex = SHORT_DAYS.indexOf(shortD);\n    if (shortDayIndex !== -1) {\n      return shortDayIndex;\n    }\n    // Invalid day\n    throw new Error(log.message.invalidTimeUnit('day', d));\n  }\n}\n\n/**\n * @param d the date.\n * @param normalize whether to normalize quarter, month, day. This should probably be true if d is a DateTime.\n * @returns array of date time parts [year, month, day, hours, minutes, seconds, milliseconds]\n */\nfunction dateTimeParts(d: DateTime | DateTimeExpr, normalize: boolean) {\n  const parts: (string | number)[] = [];\n\n  if (normalize && d.day !== undefined) {\n    if (keys(d).length > 1) {\n      log.warn(log.message.droppedDay(d));\n      d = duplicate(d);\n      delete d.day;\n    }\n  }\n\n  if (d.year !== undefined) {\n    parts.push(d.year);\n  } else {\n    // Just like Vega's timeunit transform, set default year to 2012, so domain conversion will be compatible with Vega\n    // Note: 2012 is a leap year (and so the date February 29 is respected) that begins on a Sunday (and so days of the week will order properly at the beginning of the year).\n    parts.push(2012);\n  }\n\n  if (d.month !== undefined) {\n    const month = normalize ? normalizeMonth(d.month) : d.month;\n    parts.push(month);\n  } else if (d.quarter !== undefined) {\n    const quarter = normalize ? normalizeQuarter(d.quarter) : d.quarter;\n    parts.push(isNumber(quarter) ? quarter * 3 : quarter + '*3');\n  } else {\n    parts.push(0); // months start at zero in JS\n  }\n\n  if (d.date !== undefined) {\n    parts.push(d.date);\n  } else if (d.day !== undefined) {\n    // HACK: Day only works as a standalone unit\n    // This is only correct because we always set year to 2006 for day\n    const day = normalize ? normalizeDay(d.day) : d.day;\n    parts.push(isNumber(day) ? day + 1 : day + '+1');\n  } else {\n    parts.push(1); // Date starts at 1 in JS\n  }\n\n  // Note: can't use TimeUnit enum here as importing it will create\n  // circular dependency problem!\n  for (const timeUnit of ['hours', 'minutes', 'seconds', 'milliseconds'] as const) {\n    const unit = d[timeUnit];\n    parts.push(typeof unit === 'undefined' ? 0 : unit);\n  }\n\n  return parts;\n}\n\n/**\n * Return Vega expression for a date time.\n *\n * @param d the date time.\n * @returns the Vega expression.\n */\nexport function dateTimeToExpr(d: DateTime) {\n  const parts: (string | number)[] = dateTimeParts(d, true);\n\n  const string = parts.join(', ');\n\n  if (d.utc) {\n    return `utc(${string})`;\n  } else {\n    return `datetime(${string})`;\n  }\n}\n\n/**\n * Return Vega expression for a date time expression.\n *\n * @param d the internal date time object with expression.\n * @returns the Vega expression.\n */\nexport function dateTimeExprToExpr(d: DateTimeExpr) {\n  const parts: (string | number)[] = dateTimeParts(d, false);\n\n  const string = parts.join(', ');\n\n  if (d.utc) {\n    return `utc(${string})`;\n  } else {\n    return `datetime(${string})`;\n  }\n}\n\n/**\n * @param d the date time.\n * @returns the timestamp.\n */\nexport function dateTimeToTimestamp(d: DateTime) {\n  const parts: (string | number)[] = dateTimeParts(d, true);\n\n  if (d.utc) {\n    return +new Date(Date.UTC(...(parts as [any, any])));\n  } else {\n    return +new Date(...(parts as [any]));\n  }\n}\n","import stringify from 'fast-json-stable-stringify';\nimport {isObject, isString} from 'vega-util';\nimport {DateTimeExpr, dateTimeExprToExpr} from './datetime';\nimport {accessPathWithDatum, keys, varName} from './util';\n\n/** Time Unit that only corresponds to only one part of Date objects. */\nexport const LOCAL_SINGLE_TIMEUNIT_INDEX = {\n  year: 1,\n  quarter: 1,\n  month: 1,\n  week: 1,\n  day: 1,\n  dayofyear: 1,\n  date: 1,\n  hours: 1,\n  minutes: 1,\n  seconds: 1,\n  milliseconds: 1\n} as const;\n\nexport type LocalSingleTimeUnit = keyof typeof LOCAL_SINGLE_TIMEUNIT_INDEX;\n\nexport const TIMEUNIT_PARTS = keys(LOCAL_SINGLE_TIMEUNIT_INDEX);\n\nexport function isLocalSingleTimeUnit(timeUnit: string): timeUnit is LocalSingleTimeUnit {\n  return !!LOCAL_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\n\nexport const UTC_SINGLE_TIMEUNIT_INDEX = {\n  utcyear: 1,\n  utcquarter: 1,\n  utcmonth: 1,\n  utcweek: 1,\n  utcday: 1,\n  utcdayofyear: 1,\n  utcdate: 1,\n  utchours: 1,\n  utcminutes: 1,\n  utcseconds: 1,\n  utcmilliseconds: 1\n} as const;\n\nexport type UtcSingleTimeUnit = keyof typeof UTC_SINGLE_TIMEUNIT_INDEX;\n\nexport type SingleTimeUnit = LocalSingleTimeUnit | UtcSingleTimeUnit;\n\nexport const LOCAL_MULTI_TIMEUNIT_INDEX = {\n  yearquarter: 1,\n  yearquartermonth: 1,\n\n  yearmonth: 1,\n  yearmonthdate: 1,\n  yearmonthdatehours: 1,\n  yearmonthdatehoursminutes: 1,\n  yearmonthdatehoursminutesseconds: 1,\n\n  yearweek: 1,\n  yearweekday: 1,\n  yearweekdayhours: 1,\n  yearweekdayhoursminutes: 1,\n  yearweekdayhoursminutesseconds: 1,\n\n  yeardayofyear: 1,\n\n  quartermonth: 1,\n\n  monthdate: 1,\n  monthdatehours: 1,\n  monthdatehoursminutes: 1,\n  monthdatehoursminutesseconds: 1,\n\n  weekday: 1,\n  weeksdayhours: 1,\n  weekdayhoursminutes: 1,\n  weekdayhoursminutesseconds: 1,\n\n  dayhours: 1,\n  dayhoursminutes: 1,\n  dayhoursminutesseconds: 1,\n\n  hoursminutes: 1,\n  hoursminutesseconds: 1,\n\n  minutesseconds: 1,\n\n  secondsmilliseconds: 1\n} as const;\n\nexport type LocalMultiTimeUnit = keyof typeof LOCAL_MULTI_TIMEUNIT_INDEX;\n\nexport const UTC_MULTI_TIMEUNIT_INDEX = {\n  utcyearquarter: 1,\n  utcyearquartermonth: 1,\n\n  utcyearmonth: 1,\n  utcyearmonthdate: 1,\n  utcyearmonthdatehours: 1,\n  utcyearmonthdatehoursminutes: 1,\n  utcyearmonthdatehoursminutesseconds: 1,\n\n  utcyearweek: 1,\n  utcyearweekday: 1,\n  utcyearweekdayhours: 1,\n  utcyearweekdayhoursminutes: 1,\n  utcyearweekdayhoursminutesseconds: 1,\n\n  utcyeardayofyear: 1,\n\n  utcquartermonth: 1,\n\n  utcmonthdate: 1,\n  utcmonthdatehours: 1,\n  utcmonthdatehoursminutes: 1,\n  utcmonthdatehoursminutesseconds: 1,\n\n  utcweekday: 1,\n  utcweeksdayhours: 1,\n  utcweekdayhoursminutes: 1,\n  utcweekdayhoursminutesseconds: 1,\n\n  utcdayhours: 1,\n  utcdayhoursminutes: 1,\n  utcdayhoursminutesseconds: 1,\n\n  utchoursminutes: 1,\n  utchoursminutesseconds: 1,\n\n  utcminutesseconds: 1,\n\n  utcsecondsmilliseconds: 1\n} as const;\n\nexport type UtcMultiTimeUnit = keyof typeof UTC_MULTI_TIMEUNIT_INDEX;\n\nexport type MultiTimeUnit = LocalMultiTimeUnit | UtcMultiTimeUnit;\n\nexport type LocalTimeUnit = LocalSingleTimeUnit | LocalMultiTimeUnit;\nexport type UtcTimeUnit = UtcSingleTimeUnit | UtcMultiTimeUnit;\n\nexport function isUTCTimeUnit(t: string): t is UtcTimeUnit {\n  return t.startsWith('utc');\n}\n\nexport function getLocalTimeUnit(t: UtcTimeUnit): LocalTimeUnit {\n  return t.substr(3) as LocalTimeUnit;\n}\n\nexport type TimeUnit = SingleTimeUnit | MultiTimeUnit;\n\nexport type TimeUnitFormat =\n  | 'year'\n  | 'year-month'\n  | 'year-month-date'\n  | 'quarter'\n  | 'month'\n  | 'date'\n  | 'week'\n  | 'day'\n  | 'hours'\n  | 'hours-minutes'\n  | 'minutes'\n  | 'seconds'\n  | 'milliseconds';\n\nexport interface TimeUnitParams {\n  /**\n   * Defines how date-time values should be binned.\n   */\n  unit?: TimeUnit;\n\n  /**\n   * If no `unit` is specified, maxbins is used to infer time units.\n   */\n  maxbins?: number;\n\n  /**\n   * The number of steps between bins, in terms of the least\n   * significant unit provided.\n   */\n  step?: number;\n\n  /**\n   * True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.\n   */\n  utc?: boolean;\n}\n\n// matches vega time unit format specifier\nexport type TimeFormatConfig = Partial<Record<TimeUnitFormat, string>>;\n\n// In order of increasing specificity\nexport const VEGALITE_TIMEFORMAT: TimeFormatConfig = {\n  'year-month': '%b %Y ',\n  'year-month-date': '%b %d, %Y '\n};\n\nexport function getTimeUnitParts(timeUnit: TimeUnit) {\n  const parts: LocalSingleTimeUnit[] = [];\n\n  for (const part of TIMEUNIT_PARTS) {\n    if (containsTimeUnit(timeUnit, part)) {\n      parts.push(part);\n    }\n  }\n\n  return parts;\n}\n\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nexport function containsTimeUnit(fullTimeUnit: TimeUnit, timeUnit: TimeUnit) {\n  const index = fullTimeUnit.indexOf(timeUnit);\n\n  if (index < 0) {\n    return false;\n  }\n\n  // exclude milliseconds\n  if (index > 0 && timeUnit === 'seconds' && fullTimeUnit.charAt(index - 1) === 'i') {\n    return false;\n  }\n\n  // exclude dayofyear\n  if (fullTimeUnit.length > index + 3 && timeUnit === 'day' && fullTimeUnit.charAt(index + 3) === 'o') {\n    return false;\n  }\n  if (index > 0 && timeUnit === 'year' && fullTimeUnit.charAt(index - 1) === 'f') {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Returns Vega expression for a given timeUnit and fieldRef\n */\nexport function fieldExpr(fullTimeUnit: TimeUnit, field: string, {end}: {end: boolean} = {end: false}): string {\n  const fieldRef = accessPathWithDatum(field);\n\n  const utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n\n  function func(timeUnit: TimeUnit) {\n    if (timeUnit === 'quarter') {\n      // quarter starting at 0 (0,3,6,9).\n      return `(${utc}quarter(${fieldRef})-1)`;\n    } else {\n      return `${utc}${timeUnit}(${fieldRef})`;\n    }\n  }\n\n  let lastTimeUnit: TimeUnit;\n\n  const dateExpr: DateTimeExpr = {};\n\n  for (const part of TIMEUNIT_PARTS) {\n    if (containsTimeUnit(fullTimeUnit, part)) {\n      dateExpr[part] = func(part);\n      lastTimeUnit = part;\n    }\n  }\n\n  if (end) {\n    dateExpr[lastTimeUnit] += '+1';\n  }\n\n  return dateTimeExprToExpr(dateExpr);\n}\n\nexport function timeUnitSpecifierExpression(timeUnit: TimeUnit) {\n  if (!timeUnit) {\n    return undefined;\n  }\n\n  const timeUnitParts = getTimeUnitParts(timeUnit);\n  return `timeUnitSpecifier(${stringify(timeUnitParts)}, ${stringify(VEGALITE_TIMEFORMAT)})`;\n}\n\n/**\n * Returns the signal expression used for axis labels for a time unit.\n */\nexport function formatExpression(timeUnit: TimeUnit, field: string, isUTCScale: boolean): string {\n  if (!timeUnit) {\n    return undefined;\n  }\n\n  const expr = timeUnitSpecifierExpression(timeUnit);\n\n  // We only use utcFormat for utc scale\n  // For utc time units, the data is already converted as a part of timeUnit transform.\n  // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n  const utc = isUTCScale || isUTCTimeUnit(timeUnit);\n\n  return `${utc ? 'utc' : 'time'}Format(${field}, ${expr})`;\n}\n\nexport function normalizeTimeUnit(timeUnit: TimeUnit | TimeUnitParams): TimeUnitParams {\n  if (!timeUnit) {\n    return undefined;\n  }\n\n  let params: TimeUnitParams;\n  if (isString(timeUnit)) {\n    params = {\n      unit: timeUnit\n    };\n  } else if (isObject(timeUnit)) {\n    params = {\n      ...timeUnit,\n      ...(timeUnit.unit ? {unit: timeUnit.unit} : {})\n    };\n  }\n\n  if (isUTCTimeUnit(params.unit)) {\n    params.utc = true;\n    params.unit = getLocalTimeUnit(params.unit);\n  }\n\n  return params;\n}\n\nexport function timeUnitToString(tu: TimeUnit | TimeUnitParams) {\n  const {utc, ...rest} = normalizeTimeUnit(tu);\n\n  if (rest.unit) {\n    return (\n      (utc ? 'utc' : '') +\n      keys(rest)\n        .map(p => varName(`${p === 'unit' ? '' : `_${p}_`}${rest[p]}`))\n        .join('')\n    );\n  } else {\n    // when maxbins is specified instead of units\n    return (\n      (utc ? 'utc' : '') +\n      'timeunit' +\n      keys(rest)\n        .map(p => varName(`_${p}_${rest[p]}`))\n        .join('')\n    );\n  }\n}\n","import {\n  AggregateOp,\n  BandScale,\n  BaseScale,\n  BinOrdinalScale,\n  ColorValueRef,\n  Compare as VgCompare,\n  ExprRef as VgExprRef,\n  GeoShapeTransform as VgGeoShapeTransform,\n  IdentityScale,\n  LayoutAlign,\n  LinearScale,\n  LogScale,\n  MarkConfig,\n  NumericValueRef,\n  OrdinalScale,\n  PointScale,\n  PowScale,\n  ProjectionType,\n  QuantileScale,\n  QuantizeScale,\n  RangeBand,\n  RangeRaw,\n  RangeScheme,\n  ScaleData,\n  ScaleDataRef,\n  ScaledValueRef,\n  ScaleMultiDataRef,\n  ScaleMultiFieldsRef,\n  SequentialScale,\n  SignalRef,\n  SortField as VgSortField,\n  SqrtScale,\n  SymLogScale,\n  ThresholdScale,\n  TimeInterval,\n  TimeIntervalStep,\n  TimeScale,\n  Title as VgTitle,\n  Transforms as VgTransform,\n  UnionSortField as VgUnionSortField,\n  Mark\n} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Value} from './channeldef';\nimport {SortOrder} from './sort';\nimport {Flag, keys, Dict} from './util';\n\nexport {VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef};\n\n// TODO: make recursive\ntype ExcludeMapped<T, E> = {\n  [P in keyof T]: Exclude<T[P], E>;\n};\n\ntype ExcludeMappedButKeepSignals<T, E> = {\n  [P in keyof T]: SignalRef extends T[P] ? Exclude<T[P], E> | SignalRef : Exclude<T[P], E>;\n};\n\n// Remove ValueRefs from mapped types\nexport type ExcludeMappedValueRef<T> = ExcludeMapped<T, ScaledValueRef<any> | NumericValueRef | ColorValueRef>;\n\nexport type ExcludeMappedValueRefButKeepSignal<T> = ExcludeMappedButKeepSignals<\n  T,\n  ScaledValueRef<any> | NumericValueRef | ColorValueRef\n>;\n\nexport interface VgData {\n  name: string;\n  source?: string;\n  values?: any;\n  format?: {\n    type?: string;\n    parse?: string | Dict<unknown>;\n    property?: string;\n    feature?: string;\n    mesh?: string;\n  };\n  url?: string;\n  transform?: VgTransform[];\n}\n\nexport type VgScaleDataRefWithSort = ScaleDataRef & {\n  sort?: VgSortField;\n};\n\nexport function isSignalRef(o: any): o is SignalRef {\n  return o && !!o['signal'];\n}\n\n// TODO: add type of value (Make it VgValueRef<V extends ValueOrGradient> {value?:V ...})\nexport interface VgValueRef {\n  value?: Value | number[];\n  field?:\n    | string\n    | {\n        datum?: string;\n        group?: string;\n        parent?: string;\n      };\n  signal?: string;\n  scale?: string; // TODO: object\n  mult?: number;\n  offset?: number | VgValueRef;\n  band?: boolean | number | VgValueRef;\n  test?: string;\n}\n\n// TODO: add vg prefix\nexport type VgScaleMultiDataRefWithSort = ScaleMultiDataRef & {\n  fields: (any[] | VgScaleDataRefWithSort | SignalRef)[];\n  sort?: VgUnionSortField;\n};\n\nexport type VgMultiFieldsRefWithSort = ScaleMultiFieldsRef & {\n  sort?: VgUnionSortField;\n};\n\nexport type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;\n\nexport function isVgRangeStep(range: VgRange): range is VgRangeStep {\n  return !!range['step'];\n}\n\nexport interface VgRangeStep {\n  step: number | SignalRef;\n}\n// Domains that are not a union of domains\nexport type VgNonUnionDomain = (null | string | number | boolean | SignalRef)[] | VgScaleDataRefWithSort | SignalRef;\n\nexport type VgDomain = BaseScale['domain'];\n\nexport type VgMarkGroup = any;\n\n/**\n * A combined type for any Vega scales that Vega-Lite can generate\n */\nexport type VgScale = Pick<BaseScale, 'type'> & {\n  range?: RangeScheme | RangeBand | ScaleData; // different Vega scales have conflicting range, need to union them here\n  nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef; // different Vega scales have conflicting range, need to union them here\n  zero?: boolean | SignalRef; // LogScale only allow false, making the intersection type overly strict\n} & Omit<\n    // Continuous\n    Omit<LinearScale, 'type'> &\n      Omit<LogScale, 'type'> &\n      Omit<SymLogScale, 'type'> &\n      Omit<Partial<PowScale>, 'type'> & // use partial so exponent is not required\n      Omit<SqrtScale, 'type'> &\n      Omit<IdentityScale, 'type'> &\n      Omit<TimeScale, 'type'> &\n      // Discretizing\n      Omit<QuantileScale, 'type'> &\n      Omit<QuantizeScale, 'type'> &\n      Omit<ThresholdScale, 'type'> &\n      Omit<BinOrdinalScale, 'type'> &\n      // Sequential\n      Omit<SequentialScale, 'type'> &\n      // Discrete\n      Omit<BandScale, 'type'> &\n      Omit<PointScale, 'type'> &\n      Omit<OrdinalScale, 'type'>,\n    'range' | 'nice' | 'zero'\n  >;\n\nexport interface RowCol<T> {\n  row?: T;\n  column?: T;\n}\n\nexport interface VgLayout {\n  center?: boolean | RowCol<boolean>;\n  padding?: number | RowCol<number>;\n  headerBand?: number | RowCol<number>;\n  footerBand?: number | RowCol<number>;\n\n  titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;\n  offset?:\n    | number\n    | {\n        rowHeader?: number;\n        rowFooter?: number;\n        rowTitle?: number;\n        columnHeader?: number;\n        columnFooter?: number;\n        columnTitle?: number;\n      };\n  bounds?: 'full' | 'flush';\n  columns?: number | {signal: string};\n  align?: LayoutAlign | RowCol<LayoutAlign>;\n}\n\nexport function isDataRefUnionedDomain(domain: VgDomain): domain is VgScaleMultiDataRefWithSort {\n  if (!isArray(domain)) {\n    return 'fields' in domain && !('data' in domain);\n  }\n  return false;\n}\n\nexport function isFieldRefUnionDomain(domain: VgDomain): domain is VgMultiFieldsRefWithSort {\n  if (!isArray(domain)) {\n    return 'fields' in domain && 'data' in domain;\n  }\n  return false;\n}\n\nexport function isDataRefDomain(domain: VgDomain): domain is VgScaleDataRefWithSort {\n  if (!isArray(domain)) {\n    return 'field' in domain && 'data' in domain;\n  }\n  return false;\n}\n\nexport type VgEncodeChannel =\n  | 'x'\n  | 'x2'\n  | 'xc'\n  | 'width'\n  | 'y'\n  | 'y2'\n  | 'yc'\n  | 'height'\n  | 'opacity'\n  | 'fill'\n  | 'fillOpacity'\n  | 'stroke'\n  | 'strokeWidth'\n  | 'strokeCap'\n  | 'strokeOpacity'\n  | 'strokeDash'\n  | 'strokeDashOffset'\n  | 'strokeMiterLimit'\n  | 'strokeJoin'\n  | 'strokeOffset'\n  | 'strokeForeground'\n  | 'cursor'\n  | 'clip'\n  | 'size'\n  | 'shape'\n  | 'path'\n  | 'innerRadius'\n  | 'outerRadius'\n  | 'startAngle'\n  | 'endAngle'\n  | 'interpolate'\n  | 'tension'\n  | 'orient'\n  | 'url'\n  | 'align'\n  | 'baseline'\n  | 'text'\n  | 'dir'\n  | 'ellipsis'\n  | 'limit'\n  | 'dx'\n  | 'dy'\n  | 'radius'\n  | 'theta'\n  | 'angle'\n  | 'font'\n  | 'fontSize'\n  | 'fontWeight'\n  | 'fontStyle'\n  | 'tooltip'\n  | 'href'\n  | 'cursor'\n  | 'defined'\n  | 'cornerRadius'\n  | 'cornerRadiusTopLeft'\n  | 'cornerRadiusTopRight'\n  | 'cornerRadiusBottomRight'\n  | 'cornerRadiusBottomLeft'\n  | 'scaleX'\n  | 'scaleY';\n\nexport type VgEncodeEntry = Partial<Record<VgEncodeChannel, VgValueRef | (VgValueRef & {test?: string})[]>>;\n\n// TODO: make export interface VgEncodeEntry {\n//   x?: VgValueRef<number>\n//   y?: VgValueRef<number>\n//  ...\n//   color?: VgValueRef<string>\n//  ...\n// }\n\nexport type VgPostEncodingTransform = VgGeoShapeTransform;\n\nconst VG_MARK_CONFIG_INDEX: Flag<keyof MarkConfig> = {\n  aria: 1,\n  description: 1,\n  ariaRole: 1,\n  ariaRoleDescription: 1,\n  blend: 1,\n  opacity: 1,\n  fill: 1,\n  fillOpacity: 1,\n  stroke: 1,\n  strokeCap: 1,\n  strokeWidth: 1,\n  strokeOpacity: 1,\n  strokeDash: 1,\n  strokeDashOffset: 1,\n  strokeJoin: 1,\n  strokeOffset: 1,\n  strokeMiterLimit: 1,\n  startAngle: 1,\n  endAngle: 1,\n  padAngle: 1,\n  innerRadius: 1,\n  outerRadius: 1,\n  size: 1,\n  shape: 1,\n  interpolate: 1,\n  tension: 1,\n  orient: 1,\n  align: 1,\n  baseline: 1,\n  text: 1,\n  dir: 1,\n  dx: 1,\n  dy: 1,\n  ellipsis: 1,\n  limit: 1,\n  radius: 1,\n  theta: 1,\n  angle: 1,\n  font: 1,\n  fontSize: 1,\n  fontWeight: 1,\n  fontStyle: 1,\n  lineBreak: 1,\n  lineHeight: 1,\n  cursor: 1,\n  href: 1,\n  tooltip: 1,\n  cornerRadius: 1,\n  cornerRadiusTopLeft: 1,\n  cornerRadiusTopRight: 1,\n  cornerRadiusBottomLeft: 1,\n  cornerRadiusBottomRight: 1,\n  aspect: 1,\n  width: 1,\n  height: 1\n\n  // commented below are vg channel that do not have mark config.\n  // x: 1,\n  // y: 1,\n  // x2: 1,\n  // y2: 1,\n\n  // xc'|'yc'\n  // clip: 1,\n  // path: 1,\n  // url: 1,\n};\n\nexport const VG_MARK_CONFIGS = keys(VG_MARK_CONFIG_INDEX);\n\nexport const VG_MARK_INDEX: Flag<Mark['type']> = {\n  arc: 1,\n  area: 1,\n  group: 1,\n  image: 1,\n  line: 1,\n  path: 1,\n  rect: 1,\n  rule: 1,\n  shape: 1,\n  symbol: 1,\n  text: 1,\n  trail: 1\n};\n\n// Vega's cornerRadius channels.\nexport const VG_CORNERRADIUS_CHANNELS = [\n  'cornerRadius',\n  'cornerRadiusTopLeft',\n  'cornerRadiusTopRight',\n  'cornerRadiusBottomLeft',\n  'cornerRadiusBottomRight'\n] as const;\n\nexport interface VgComparator {\n  field?: string | string[];\n  order?: SortOrder | SortOrder[];\n}\n\nexport interface VgJoinAggregateTransform {\n  type: 'joinaggregate';\n  as?: string[];\n  ops?: AggregateOp[];\n  fields?: string[];\n  groupby?: string[];\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FieldName, valueExpr, vgField} from './channeldef';\nimport {DateTime} from './datetime';\nimport {LogicalComposition} from './logical';\nimport {fieldExpr as timeUnitFieldExpr, normalizeTimeUnit, TimeUnit, TimeUnitParams} from './timeunit';\nimport {isSignalRef} from './vega.schema';\n\nexport type Predicate =\n  // a) FieldPredicate (but we don't type FieldFilter here so the schema has no nesting\n  // and thus the documentation shows all of the types clearly)\n  | FieldEqualPredicate\n  | FieldRangePredicate\n  | FieldOneOfPredicate\n  | FieldLTPredicate\n  | FieldGTPredicate\n  | FieldLTEPredicate\n  | FieldGTEPredicate\n  | FieldValidPredicate\n  // b) Selection Predicate\n  | SelectionPredicate\n  // c) Vega Expression string\n  | string;\n\nexport type FieldPredicate =\n  | FieldEqualPredicate\n  | FieldLTPredicate\n  | FieldGTPredicate\n  | FieldLTEPredicate\n  | FieldGTEPredicate\n  | FieldRangePredicate\n  | FieldOneOfPredicate\n  | FieldValidPredicate;\n\nexport interface SelectionPredicate {\n  /**\n   * Filter using a selection name or a logical composition of selection names.\n   */\n  selection: LogicalComposition<string>;\n}\n\nexport function isSelectionPredicate(predicate: LogicalComposition<Predicate>): predicate is SelectionPredicate {\n  return predicate?.['selection'];\n}\n\nexport interface FieldPredicateBase {\n  // TODO: support aggregate\n\n  /**\n   * Time unit for the field to be tested.\n   */\n  timeUnit?: TimeUnit | TimeUnitParams;\n\n  /**\n   * Field to be tested.\n   */\n  field: FieldName;\n}\n\nexport interface FieldEqualPredicate extends FieldPredicateBase {\n  /**\n   * The value that the field should be equal to.\n   */\n  equal: string | number | boolean | DateTime | SignalRef;\n}\n\nexport function isFieldEqualPredicate(predicate: any): predicate is FieldEqualPredicate {\n  return predicate && !!predicate.field && predicate.equal !== undefined;\n}\n\nexport interface FieldLTPredicate extends FieldPredicateBase {\n  /**\n   * The value that the field should be less than.\n   */\n  lt: string | number | DateTime | SignalRef;\n}\n\nexport function isFieldLTPredicate(predicate: any): predicate is FieldLTPredicate {\n  return predicate && !!predicate.field && predicate.lt !== undefined;\n}\n\nexport interface FieldLTEPredicate extends FieldPredicateBase {\n  /**\n   * The value that the field should be less than or equals to.\n   */\n  lte: string | number | DateTime | SignalRef;\n}\n\nexport function isFieldLTEPredicate(predicate: any): predicate is FieldLTEPredicate {\n  return predicate && !!predicate.field && predicate.lte !== undefined;\n}\n\nexport interface FieldGTPredicate extends FieldPredicateBase {\n  /**\n   * The value that the field should be greater than.\n   */\n  gt: string | number | DateTime | SignalRef;\n}\n\nexport function isFieldGTPredicate(predicate: any): predicate is FieldGTPredicate {\n  return predicate && !!predicate.field && predicate.gt !== undefined;\n}\n\nexport interface FieldGTEPredicate extends FieldPredicateBase {\n  /**\n   * The value that the field should be greater than or equals to.\n   */\n  gte: string | number | DateTime | SignalRef;\n}\n\nexport function isFieldGTEPredicate(predicate: any): predicate is FieldGTEPredicate {\n  return predicate && !!predicate.field && predicate.gte !== undefined;\n}\n\nexport interface FieldRangePredicate extends FieldPredicateBase {\n  /**\n   * An array of inclusive minimum and maximum values\n   * for a field value of a data item to be included in the filtered data.\n   * @maxItems 2\n   * @minItems 2\n   */\n  range: (number | DateTime | null | SignalRef)[] | SignalRef;\n}\n\nexport function isFieldRangePredicate(predicate: any): predicate is FieldRangePredicate {\n  if (predicate && predicate.field) {\n    if (isArray(predicate.range) && predicate.range.length === 2) {\n      return true;\n    } else if (isSignalRef(predicate.range)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport interface FieldOneOfPredicate extends FieldPredicateBase {\n  /**\n   * A set of values that the `field`'s value should be a member of,\n   * for a data item included in the filtered data.\n   */\n  oneOf: string[] | number[] | boolean[] | DateTime[];\n}\n\nexport interface FieldValidPredicate extends FieldPredicateBase {\n  /**\n   * If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).\n   */\n  valid: boolean;\n}\n\nexport function isFieldOneOfPredicate(predicate: any): predicate is FieldOneOfPredicate {\n  return (\n    predicate && !!predicate.field && (isArray(predicate.oneOf) || isArray(predicate.in)) // backward compatibility\n  );\n}\n\nexport function isFieldValidPredicate(predicate: any): predicate is FieldValidPredicate {\n  return predicate && !!predicate.field && predicate.valid !== undefined;\n}\n\nexport function isFieldPredicate(\n  predicate: Predicate\n): predicate is\n  | FieldOneOfPredicate\n  | FieldEqualPredicate\n  | FieldRangePredicate\n  | FieldLTPredicate\n  | FieldGTPredicate\n  | FieldLTEPredicate\n  | FieldGTEPredicate {\n  return (\n    isFieldOneOfPredicate(predicate) ||\n    isFieldEqualPredicate(predicate) ||\n    isFieldRangePredicate(predicate) ||\n    isFieldLTPredicate(predicate) ||\n    isFieldGTPredicate(predicate) ||\n    isFieldLTEPredicate(predicate) ||\n    isFieldGTEPredicate(predicate)\n  );\n}\n\nfunction predicateValueExpr(v: number | string | boolean | DateTime | SignalRef, timeUnit: TimeUnit) {\n  return valueExpr(v, {timeUnit, wrapTime: true});\n}\n\nfunction predicateValuesExpr(vals: (number | string | boolean | DateTime)[], timeUnit: TimeUnit) {\n  return vals.map(v => predicateValueExpr(v, timeUnit));\n}\n\n// This method is used by Voyager. Do not change its behavior without changing Voyager.\nexport function fieldFilterExpression(predicate: FieldPredicate, useInRange = true) {\n  const {field} = predicate;\n  const timeUnit = normalizeTimeUnit(predicate.timeUnit)?.unit;\n  const fieldExpr = timeUnit\n    ? // For timeUnit, cast into integer with time() so we can use ===, inrange, indexOf to compare values directly.\n      // TODO: We calculate timeUnit on the fly here. Consider if we would like to consolidate this with timeUnit pipeline\n      // TODO: support utc\n      'time(' + timeUnitFieldExpr(timeUnit, field) + ')'\n    : vgField(predicate, {expr: 'datum'});\n\n  if (isFieldEqualPredicate(predicate)) {\n    return fieldExpr + '===' + predicateValueExpr(predicate.equal, timeUnit);\n  } else if (isFieldLTPredicate(predicate)) {\n    const upper = predicate.lt;\n    return `${fieldExpr}<${predicateValueExpr(upper, timeUnit)}`;\n  } else if (isFieldGTPredicate(predicate)) {\n    const lower = predicate.gt;\n    return `${fieldExpr}>${predicateValueExpr(lower, timeUnit)}`;\n  } else if (isFieldLTEPredicate(predicate)) {\n    const upper = predicate.lte;\n    return `${fieldExpr}<=${predicateValueExpr(upper, timeUnit)}`;\n  } else if (isFieldGTEPredicate(predicate)) {\n    const lower = predicate.gte;\n    return `${fieldExpr}>=${predicateValueExpr(lower, timeUnit)}`;\n  } else if (isFieldOneOfPredicate(predicate)) {\n    return `indexof([${predicateValuesExpr(predicate.oneOf, timeUnit).join(',')}], ${fieldExpr}) !== -1`;\n  } else if (isFieldValidPredicate(predicate)) {\n    return fieldValidPredicate(fieldExpr, predicate.valid);\n  } else if (isFieldRangePredicate(predicate)) {\n    const {range} = predicate;\n    const lower = isSignalRef(range) ? {signal: `${range.signal}[0]`} : range[0];\n    const upper = isSignalRef(range) ? {signal: `${range.signal}[1]`} : range[1];\n\n    if (lower !== null && upper !== null && useInRange) {\n      return (\n        'inrange(' +\n        fieldExpr +\n        ', [' +\n        predicateValueExpr(lower, timeUnit) +\n        ', ' +\n        predicateValueExpr(upper, timeUnit) +\n        '])'\n      );\n    }\n\n    const exprs = [];\n    if (lower !== null) {\n      exprs.push(`${fieldExpr} >= ${predicateValueExpr(lower, timeUnit)}`);\n    }\n    if (upper !== null) {\n      exprs.push(`${fieldExpr} <= ${predicateValueExpr(upper, timeUnit)}`);\n    }\n\n    return exprs.length > 0 ? exprs.join(' && ') : 'true';\n  }\n\n  /* istanbul ignore next: it should never reach here */\n  throw new Error(`Invalid field predicate: ${JSON.stringify(predicate)}`);\n}\n\nexport function fieldValidPredicate(fieldExpr: string, valid = true) {\n  if (valid) {\n    return `isValid(${fieldExpr}) && isFinite(+${fieldExpr})`;\n  } else {\n    return `!isValid(${fieldExpr}) || !isFinite(+${fieldExpr})`;\n  }\n}\n\nexport function normalizePredicate(f: Predicate): Predicate {\n  if (isFieldPredicate(f) && f.timeUnit) {\n    return {\n      ...f,\n      timeUnit: normalizeTimeUnit(f.timeUnit)?.unit\n    };\n  }\n  return f;\n}\n","import {keys} from './util';\n\n/**\n * Data type based on level of measurement\n */\nexport const Type = {\n  quantitative: 'quantitative',\n  ordinal: 'ordinal',\n  temporal: 'temporal',\n  nominal: 'nominal',\n  geojson: 'geojson'\n} as const;\n\nexport type Type = keyof typeof Type;\n\nexport function isType(t: any): t is Type {\n  return t in Type;\n}\n\nexport const QUANTITATIVE = Type.quantitative;\nexport const ORDINAL = Type.ordinal;\nexport const TEMPORAL = Type.temporal;\nexport const NOMINAL = Type.nominal;\n\nexport const GEOJSON = Type.geojson;\n\nexport type StandardType = 'quantitative' | 'ordinal' | 'temporal' | 'nominal';\n\nexport const TYPES = keys(Type);\n\n/**\n * Get full, lowercase type name for a given type.\n * @param  type\n * @return Full type name.\n */\nexport function getFullName(type: Type | string): Type | undefined {\n  if (type) {\n    type = type.toLowerCase();\n    switch (type) {\n      case 'q':\n      case QUANTITATIVE:\n        return 'quantitative';\n      case 't':\n      case TEMPORAL:\n        return 'temporal';\n      case 'o':\n      case ORDINAL:\n        return 'ordinal';\n      case 'n':\n      case NOMINAL:\n        return 'nominal';\n      case GEOJSON:\n        return 'geojson';\n    }\n  }\n  // If we get invalid input, return undefined type.\n  return undefined;\n}\n","import {\n  RangeEnum,\n  ScaleBins,\n  ScaleInterpolateEnum,\n  ScaleInterpolateParams,\n  SignalRef,\n  TimeInterval,\n  TimeIntervalStep\n} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport * as CHANNEL from './channel';\nimport {Channel, CHANNELS, isColorChannel} from './channel';\nimport {DateTime} from './datetime';\nimport * as log from './log';\nimport {SelectionExtent} from './selection';\nimport {Type, TYPES, ORDINAL, NOMINAL, TEMPORAL, QUANTITATIVE} from './type';\nimport {contains, Flag, keys} from './util';\n\nexport const ScaleType = {\n  // Continuous - Quantitative\n  LINEAR: 'linear',\n  LOG: 'log',\n  POW: 'pow',\n  SQRT: 'sqrt',\n  SYMLOG: 'symlog',\n\n  IDENTITY: 'identity',\n  SEQUENTIAL: 'sequential',\n\n  // Continuous - Time\n  TIME: 'time',\n  UTC: 'utc',\n\n  // Discretizing scales\n  QUANTILE: 'quantile',\n  QUANTIZE: 'quantize',\n  THRESHOLD: 'threshold',\n  BIN_ORDINAL: 'bin-ordinal',\n\n  // Discrete scales\n  ORDINAL: 'ordinal',\n  POINT: 'point',\n  BAND: 'band'\n} as const;\n\ntype ValueOf<T> = T[keyof T];\nexport type ScaleType = ValueOf<typeof ScaleType>;\n\n/**\n * Index for scale categories -- only scale of the same categories can be merged together.\n * Current implementation is trying to be conservative and avoid merging scale type that might not work together\n */\nconst SCALE_CATEGORY_INDEX: Record<ScaleType, ScaleType | 'numeric' | 'ordinal-position' | 'discretizing'> = {\n  linear: 'numeric',\n  log: 'numeric',\n  pow: 'numeric',\n  sqrt: 'numeric',\n  symlog: 'numeric',\n  identity: 'numeric',\n  sequential: 'numeric',\n  time: 'time',\n  utc: 'time',\n  ordinal: 'ordinal',\n  'bin-ordinal': 'bin-ordinal', // TODO: should bin-ordinal support merging with other\n  point: 'ordinal-position',\n  band: 'ordinal-position',\n  quantile: 'discretizing',\n  quantize: 'discretizing',\n  threshold: 'discretizing'\n};\n\nexport const SCALE_TYPES = keys(SCALE_CATEGORY_INDEX) as ScaleType[];\n\n/**\n * Whether the two given scale types can be merged together.\n */\nexport function scaleCompatible(scaleType1: ScaleType, scaleType2: ScaleType) {\n  const scaleCategory1 = SCALE_CATEGORY_INDEX[scaleType1];\n  const scaleCategory2 = SCALE_CATEGORY_INDEX[scaleType2];\n  return (\n    scaleCategory1 === scaleCategory2 ||\n    (scaleCategory1 === 'ordinal-position' && scaleCategory2 === 'time') ||\n    (scaleCategory2 === 'ordinal-position' && scaleCategory1 === 'time')\n  );\n}\n\n/**\n * Index for scale precedence -- high score = higher priority for merging.\n */\nconst SCALE_PRECEDENCE_INDEX: Record<ScaleType, number> = {\n  // numeric\n  linear: 0,\n  log: 1,\n  pow: 1,\n  sqrt: 1,\n  symlog: 1,\n  identity: 1,\n  sequential: 1,\n  // time\n  time: 0,\n  utc: 0,\n  // ordinal-position -- these have higher precedence than continuous scales as they support more types of data\n  point: 10,\n  band: 11, // band has higher precedence as it is better for interaction\n  // non grouped types\n  ordinal: 0,\n  'bin-ordinal': 0,\n  quantile: 0,\n  quantize: 0,\n  threshold: 0\n};\n\n/**\n * Return scale categories -- only scale of the same categories can be merged together.\n */\nexport function scaleTypePrecedence(scaleType: ScaleType): number {\n  return SCALE_PRECEDENCE_INDEX[scaleType];\n}\n\nexport const CONTINUOUS_TO_CONTINUOUS_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc'];\nconst CONTINUOUS_TO_CONTINUOUS_INDEX = toSet(CONTINUOUS_TO_CONTINUOUS_SCALES);\n\nexport const QUANTITATIVE_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog'];\n\nconst QUANTITATIVE_SCALES_INDEX = toSet(QUANTITATIVE_SCALES);\n\nexport function isQuantitative(type: ScaleType): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' {\n  return type in QUANTITATIVE_SCALES_INDEX;\n}\n\nexport const CONTINUOUS_TO_DISCRETE_SCALES: ScaleType[] = ['quantile', 'quantize', 'threshold'];\nconst CONTINUOUS_TO_DISCRETE_INDEX = toSet(CONTINUOUS_TO_DISCRETE_SCALES);\n\nexport const CONTINUOUS_DOMAIN_SCALES: ScaleType[] = CONTINUOUS_TO_CONTINUOUS_SCALES.concat([\n  'quantile',\n  'quantize',\n  'threshold',\n  'sequential',\n  'identity'\n]);\nconst CONTINUOUS_DOMAIN_INDEX = toSet(CONTINUOUS_DOMAIN_SCALES);\n\nexport const DISCRETE_DOMAIN_SCALES: ScaleType[] = ['ordinal', 'bin-ordinal', 'point', 'band'];\nconst DISCRETE_DOMAIN_INDEX = toSet(DISCRETE_DOMAIN_SCALES);\n\nexport const TIME_SCALE_TYPES: ScaleType[] = ['time', 'utc'];\n\nexport function hasDiscreteDomain(type: ScaleType): type is 'ordinal' | 'bin-ordinal' | 'point' | 'band' {\n  return type in DISCRETE_DOMAIN_INDEX;\n}\n\nexport function hasContinuousDomain(\n  type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' | 'quantile' | 'quantize' | 'threshold' {\n  return type in CONTINUOUS_DOMAIN_INDEX;\n}\n\nexport function isContinuousToContinuous(\n  type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' {\n  return type in CONTINUOUS_TO_CONTINUOUS_INDEX;\n}\n\nexport function isContinuousToDiscrete(type: ScaleType): type is 'quantile' | 'quantize' | 'threshold' {\n  return type in CONTINUOUS_TO_DISCRETE_INDEX;\n}\n\nexport interface ScaleConfig {\n  /**\n   * If true, rounds numeric output values to integers.\n   * This can be helpful for snapping to the pixel grid.\n   * (Only available for `x`, `y`, and `size` scales.)\n   */\n  round?: boolean | SignalRef;\n\n  /**\n   * If true, values that exceed the data domain are clamped to either the minimum or maximum range value\n   */\n  clamp?: boolean | SignalRef;\n\n  /**\n   * Default inner padding for `x` and `y` band-ordinal scales.\n   *\n   * __Default value:__\n   * - `barBandPaddingInner` for bar marks (`0.1` by default)\n   * - `rectBandPaddingInner` for rect and other marks (`0` by default)\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  bandPaddingInner?: number | SignalRef;\n\n  /**\n   * Default outer padding for `x` and `y` band-ordinal scales.\n   *\n   * __Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  bandPaddingOuter?: number | SignalRef;\n\n  /**\n   * Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n   *\n   * __Default value:__ `0.1`\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  barBandPaddingInner?: number | SignalRef;\n\n  /**\n   * Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n   *\n   * __Default value:__ `0`\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  rectBandPaddingInner?: number | SignalRef;\n\n  /**\n   * Default padding for continuous scales.\n   *\n   * __Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.\n   *\n   * @minimum 0\n   */\n  continuousPadding?: number | SignalRef;\n\n  /**\n   * Default outer padding for `x` and `y` point-ordinal scales.\n   *\n   * __Default value:__ `0.5` (which makes _width/height = number of unique values * step_)\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  pointPadding?: number | SignalRef;\n\n  /**\n   * Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n   *\n   * This is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n   *\n   * This property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n   *\n   * __Default value:__ `false`\n   */\n  useUnaggregatedDomain?: boolean;\n\n  // nice should depends on type (quantitative or temporal), so\n  // let's not make a config.\n\n  // Configs for Range\n\n  /**\n   * The default max value for mapping quantitative fields to bar's size/bandSize.\n   *\n   * If undefined (default), we will use the axis's size (width or height) - 1.\n   * @minimum 0\n   */\n  maxBandSize?: number;\n\n  /**\n   * The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n   *\n   * __Default value:__ `2`\n   *\n   * @minimum 0\n   */\n  minBandSize?: number;\n\n  /**\n   * The default max value for mapping quantitative fields to text's size/fontSize.\n   *\n   * __Default value:__ `40`\n   *\n   * @minimum 0\n   */\n  maxFontSize?: number;\n\n  /**\n   * The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n   *\n   * __Default value:__ `8`\n   *\n   * @minimum 0\n   */\n  minFontSize?: number;\n\n  /**\n   * Default minimum opacity for mapping a field to opacity.\n   *\n   * __Default value:__ `0.3`\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  minOpacity?: number;\n\n  /**\n   * Default max opacity for mapping a field to opacity.\n   *\n   * __Default value:__ `0.8`\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  maxOpacity?: number;\n\n  /**\n   * Default minimum value for point size scale with zero=false.\n   *\n   * __Default value:__ `9`\n   *\n   * @minimum 0\n   */\n  minSize?: number;\n\n  /**\n   * Default max value for point size scale.\n   * @minimum 0\n   */\n  maxSize?: number;\n\n  /**\n   * Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n   *\n   * __Default value:__ `1`\n   *\n   * @minimum 0\n   */\n  minStrokeWidth?: number;\n\n  /**\n   * Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n   *\n   * __Default value:__ `4`\n   *\n   * @minimum 0\n   */\n  maxStrokeWidth?: number;\n\n  /**\n   * Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n   *\n   * __Default value:__ `4`\n   *\n   * @minimum 0\n   */\n  quantileCount?: number;\n\n  /**\n   * Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n   *\n   * __Default value:__ `4`\n   *\n   * @minimum 0\n   */\n  quantizeCount?: number;\n\n  /**\n   * Reverse x-scale by default (useful for right-to-left charts).\n   */\n  xReverse?: boolean | SignalRef;\n}\n\nexport const defaultScaleConfig: ScaleConfig = {\n  pointPadding: 0.5,\n\n  barBandPaddingInner: 0.1,\n  rectBandPaddingInner: 0,\n\n  minBandSize: 2,\n\n  minFontSize: 8,\n  maxFontSize: 40,\n\n  minOpacity: 0.3,\n  maxOpacity: 0.8,\n\n  // FIXME: revise if these *can* become ratios of width/height step\n  minSize: 9, // Point size is area. For square point, 9 = 3 pixel ^ 2, not too small!\n\n  minStrokeWidth: 1,\n  maxStrokeWidth: 4,\n  quantileCount: 4,\n  quantizeCount: 4\n};\n\nexport interface SchemeParams {\n  /**\n   * A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n   *\n   * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n   */\n  name: string | SignalRef;\n\n  /**\n   * The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.\n   */\n  extent?: (number | SignalRef)[] | SignalRef;\n\n  /**\n   * The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.\n   */\n  count?: number | SignalRef;\n}\n\nexport type Domain =\n  | (null | string | number | boolean | DateTime | SignalRef)[]\n  | 'unaggregated'\n  | SelectionExtent\n  | SignalRef\n  | DomainUnionWith;\nexport type Scheme = string | SchemeParams;\n\nexport function isExtendedScheme(scheme: string | SignalRef | SchemeParams): scheme is SchemeParams {\n  return !isString(scheme) && !!scheme['name'];\n}\n\nexport function isSelectionDomain(domain: Domain): domain is SelectionExtent {\n  return domain?.['selection'];\n}\n\nexport interface DomainUnionWith {\n  /**\n   * Customized domain values to be union with the field's values.\n   *\n   * 1) `domain` for _quantitative_ fields can take one of the following forms:\n   *\n   * - a two-element array with minimum and maximum values.\n   * - an array with more than two entries, for [Piecewise  quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). (Alternatively, the `domainMid` property can be set for a diverging scale.)\n   * - a string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n   *\n   * 2) `domain` for _temporal_ fields can be a two-element array minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n   *\n   * 3) `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n   */\n  unionWith: number[] | string[] | boolean[] | DateTime[];\n}\n\nexport function isDomainUnionWith(domain: Domain): domain is DomainUnionWith {\n  return domain && domain['unionWith'];\n}\n\nexport interface Scale {\n  /**\n   * The type of scale. Vega-Lite supports the following categories of scale types:\n   *\n   * 1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n   *\n   * 2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n   *\n   * 3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n   *\n   * __Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type).\n   */\n  type?: ScaleType;\n\n  /**\n   * Customized domain values in the form of constant values or dynamic values driven by a selection.\n   *\n   * 1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n   *\n   * - A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n   * - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n   * - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n   *\n   * 2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n   *\n   * 3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n   *\n   * 4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n   *\n   * 5) Domain can also takes an object defining a field or encoding of a selection that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain.\n   */\n  domain?:\n    | (null | string | number | boolean | DateTime | SignalRef)[]\n    | 'unaggregated'\n    | SelectionExtent\n    | DomainUnionWith\n    | SignalRef;\n\n  /**\n   * Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.\n   */\n  domainMid?: number | SignalRef;\n\n  /**\n   * If true, reverses the order of the scale range.\n   * __Default value:__ `false`.\n   */\n  reverse?: boolean | SignalRef;\n\n  /**\n   * The range of the scale. One of:\n   *\n   * - A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n   *\n   * - For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating  minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n   *\n   * - For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values.\n   *\n   * __Notes:__\n   *\n   * 1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n   *\n   * 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`).\n   */\n  range?: RangeEnum | (number | string | number[] | SignalRef)[];\n\n  // ordinal\n\n  /**\n   * A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n   *\n   * Discrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n   *\n   * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n   */\n  scheme?: string | SchemeParams | SignalRef;\n\n  /**\n   * The alignment of the steps within the scale range.\n   *\n   * This value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n   *\n   * __Default value:__ `0.5`\n   */\n  align?: number | SignalRef;\n\n  /**\n   * Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n   * - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n   * - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n   * - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.\n   */\n  // TODO: add - A [signal reference](../types/#Signal) that resolves to either an array or bin specification object.\n  bins?: ScaleBins;\n\n  /**\n   * If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n   *\n   * __Default value:__ `false`.\n   */\n  round?: boolean | SignalRef;\n\n  /**\n   * For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n   *\n   * For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n   *\n   * For _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n   *\n   * __Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\n   * For _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.\n   *\n   * @minimum 0\n   */\n  padding?: number | SignalRef;\n\n  /**\n   * The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n   *\n   * For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n   *\n   * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  paddingInner?: number | SignalRef;\n\n  /**\n   * The outer padding (spacing) at the ends of the range of band and point scales,\n   * as a fraction of the step size. This value must lie in the range [0,1].\n   *\n   * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\n   * By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  paddingOuter?: number | SignalRef;\n\n  // typical\n  /**\n   * If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n   *\n   * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).\n   */\n  clamp?: boolean | SignalRef;\n\n  /**\n   * Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n   *\n   * For quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n   *\n   * For temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n   *\n   * __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.\n   *\n   */\n  nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef;\n\n  /**\n   * The logarithm base of the `log` scale (default `10`).\n   */\n  base?: number | SignalRef;\n\n  /**\n   * The exponent of the `pow` scale.\n   */\n  exponent?: number | SignalRef;\n\n  /**\n   * A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n   *\n   * __Default value:__ `1`\n   */\n  constant?: number | SignalRef;\n\n  /**\n   * If `true`, ensures that a zero baseline value is included in the scale domain.\n   *\n   * __Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n   *\n   * __Note:__ Log, time, and utc scales do not support `zero`.\n   */\n  zero?: boolean | SignalRef;\n\n  /**\n   * The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n   *\n   * * __Default value:__ `hcl`\n   */\n  interpolate?: ScaleInterpolateEnum | SignalRef | ScaleInterpolateParams;\n}\n\nconst SCALE_PROPERTY_INDEX: Flag<keyof Scale> = {\n  type: 1,\n  domain: 1,\n  domainMid: 1,\n  align: 1,\n  range: 1,\n  scheme: 1,\n  bins: 1,\n  // Other properties\n  reverse: 1,\n  round: 1,\n  // quantitative / time\n  clamp: 1,\n  nice: 1,\n  // quantitative\n  base: 1,\n  exponent: 1,\n  constant: 1,\n  interpolate: 1,\n  zero: 1, // zero depends on domain\n  // band/point\n  padding: 1,\n  paddingInner: 1,\n  paddingOuter: 1\n};\n\nexport const SCALE_PROPERTIES = keys(SCALE_PROPERTY_INDEX);\n\nconst {type, domain, range, scheme, ...NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX} = SCALE_PROPERTY_INDEX;\n\nexport const NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES = keys(NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX);\n\nexport const SCALE_TYPE_INDEX = generateScaleTypeIndex();\n\nexport function scaleTypeSupportProperty(scaleType: ScaleType, propName: keyof Scale): boolean {\n  switch (propName) {\n    case 'type':\n    case 'domain':\n    case 'reverse':\n    case 'range':\n      return true;\n    case 'scheme':\n    case 'interpolate':\n      return !contains(['point', 'band', 'identity'], scaleType);\n    case 'bins':\n      return !contains(['point', 'band', 'identity', 'ordinal'], scaleType);\n    case 'round':\n      return isContinuousToContinuous(scaleType) || scaleType === 'band' || scaleType === 'point';\n    case 'padding':\n      return isContinuousToContinuous(scaleType) || contains(['point', 'band'], scaleType);\n    case 'paddingOuter':\n    case 'align':\n      return contains(['point', 'band'], scaleType);\n    case 'paddingInner':\n      return scaleType === 'band';\n    case 'domainMid':\n    case 'clamp':\n      return isContinuousToContinuous(scaleType);\n    case 'nice':\n      return isContinuousToContinuous(scaleType) || scaleType === 'quantize' || scaleType === 'threshold';\n    case 'exponent':\n      return scaleType === 'pow';\n    case 'base':\n      return scaleType === 'log';\n    case 'constant':\n      return scaleType === 'symlog';\n    case 'zero':\n      return (\n        hasContinuousDomain(scaleType) &&\n        !contains(\n          [\n            'log', // log scale cannot have zero value\n            'time',\n            'utc', // zero is not meaningful for time\n            'threshold', // threshold requires custom domain so zero does not matter\n            'quantile' // quantile depends on distribution so zero does not matter\n          ],\n          scaleType\n        )\n      );\n  }\n}\n\n/**\n * Returns undefined if the input channel supports the input scale property name\n */\nexport function channelScalePropertyIncompatability(channel: Channel, propName: keyof Scale): string {\n  switch (propName) {\n    case 'interpolate':\n    case 'scheme':\n    case 'domainMid':\n      if (!isColorChannel(channel)) {\n        return log.message.cannotUseScalePropertyWithNonColor(channel);\n      }\n      return undefined;\n    case 'align':\n    case 'type':\n    case 'bins':\n    case 'domain':\n    case 'range':\n    case 'base':\n    case 'exponent':\n    case 'constant':\n    case 'nice':\n    case 'padding':\n    case 'paddingInner':\n    case 'paddingOuter':\n    case 'reverse':\n    case 'round':\n    case 'clamp':\n    case 'zero':\n      return undefined; // GOOD!\n  }\n}\n\nexport function scaleTypeSupportDataType(specifiedType: ScaleType, fieldDefType: Type): boolean {\n  if (contains([ORDINAL, NOMINAL], fieldDefType)) {\n    return specifiedType === undefined || hasDiscreteDomain(specifiedType);\n  } else if (fieldDefType === TEMPORAL) {\n    return contains([ScaleType.TIME, ScaleType.UTC, undefined], specifiedType);\n  } else if (fieldDefType === QUANTITATIVE) {\n    return contains(\n      [\n        ScaleType.LOG,\n        ScaleType.POW,\n        ScaleType.SQRT,\n        ScaleType.SYMLOG,\n        ScaleType.QUANTILE,\n        ScaleType.QUANTIZE,\n        ScaleType.THRESHOLD,\n        ScaleType.LINEAR,\n        undefined\n      ],\n      specifiedType\n    );\n  }\n\n  return true;\n}\n\nexport function channelSupportScaleType(channel: Channel, scaleType: ScaleType): boolean {\n  if (!CHANNEL.isScaleChannel(channel)) {\n    return false;\n  }\n  switch (channel) {\n    case CHANNEL.X:\n    case CHANNEL.Y:\n    case CHANNEL.THETA:\n    case CHANNEL.RADIUS:\n      return isContinuousToContinuous(scaleType) || contains(['band', 'point'], scaleType);\n    case CHANNEL.SIZE: // TODO: size and opacity can support ordinal with more modification\n    case CHANNEL.STROKEWIDTH:\n    case CHANNEL.OPACITY:\n    case CHANNEL.FILLOPACITY:\n    case CHANNEL.STROKEOPACITY:\n    case CHANNEL.ANGLE:\n      // Although it generally doesn't make sense to use band with size and opacity,\n      // it can also work since we use band: 0.5 to get midpoint.\n      return (\n        isContinuousToContinuous(scaleType) ||\n        isContinuousToDiscrete(scaleType) ||\n        contains(['band', 'point', 'ordinal'], scaleType)\n      );\n    case CHANNEL.COLOR:\n    case CHANNEL.FILL:\n    case CHANNEL.STROKE:\n      return scaleType !== 'band'; // band does not make sense with color\n    case CHANNEL.STROKEDASH:\n      return scaleType === 'ordinal' || isContinuousToDiscrete(scaleType);\n    case CHANNEL.SHAPE:\n      return scaleType === 'ordinal'; // shape = lookup only\n  }\n}\n\nexport function getSupportedScaleType(channel: Channel, fieldDefType: Type) {\n  return SCALE_TYPE_INDEX[generateScaleTypeIndexKey(channel, fieldDefType)];\n}\n\nexport interface ScaleTypeIndex {\n  [channel: string]: ScaleType[];\n}\n\n// generates ScaleTypeIndex where keys are encoding channels and values are list of valid ScaleTypes\nfunction generateScaleTypeIndex() {\n  const index: ScaleTypeIndex = {};\n  for (const channel of CHANNELS) {\n    for (const fieldDefType of TYPES) {\n      for (const scaleType of SCALE_TYPES) {\n        const key = generateScaleTypeIndexKey(channel, fieldDefType);\n        if (channelSupportScaleType(channel, scaleType) && scaleTypeSupportDataType(scaleType, fieldDefType)) {\n          index[key] = index[key] ?? [];\n          index[key].push(scaleType);\n        }\n      }\n    }\n  }\n  return index;\n}\n\nfunction generateScaleTypeIndexKey(channel: Channel, fieldDefType: Type) {\n  return channel + '_' + fieldDefType;\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {isFunction, isString} from 'vega-util';\nimport {isCountingAggregateOp} from '../../../aggregate';\nimport {isBinned, isBinning} from '../../../bin';\nimport {Channel, getMainRangeChannel, PolarPositionChannel, PositionChannel, X, X2, Y2} from '../../../channel';\nimport {\n  binRequiresRange,\n  ChannelDef,\n  DatumDef,\n  FieldDef,\n  FieldDefBase,\n  FieldName,\n  FieldRefOption,\n  getBand,\n  isDatumDef,\n  isFieldDef,\n  isFieldOrDatumDef,\n  isTypedFieldDef,\n  isValueDef,\n  SecondaryChannelDef,\n  SecondaryFieldDef,\n  TypedFieldDef,\n  Value,\n  vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {dateTimeToExpr, isDateTime} from '../../../datetime';\nimport * as log from '../../../log';\nimport {isPathMark, Mark, MarkDef} from '../../../mark';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {hasDiscreteDomain, isContinuousToContinuous} from '../../../scale';\nimport {StackProperties} from '../../../stack';\nimport {TEMPORAL} from '../../../type';\nimport {contains} from '../../../util';\nimport {isSignalRef, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\n\nexport function midPointRefWithPositionInvalidTest(\n  params: MidPointParams & {\n    channel: PositionChannel | PolarPositionChannel;\n  }\n) {\n  const {channel, channelDef, markDef, scale, config} = params;\n  const ref = midPoint(params);\n\n  // Wrap to check if the positional value is invalid, if so, plot the point on the min value\n  if (\n    // Only this for field def without counting aggregate (as count wouldn't be null)\n    isFieldDef(channelDef) &&\n    !isCountingAggregateOp(channelDef.aggregate) &&\n    // and only for continuous scale without zero (otherwise, null / invalid will be interpreted as zero, which doesn't cause layout problem)\n    scale &&\n    isContinuousToContinuous(scale.get('type')) &&\n    scale.get('zero') === false\n  ) {\n    return wrapPositionInvalidTest({\n      fieldDef: channelDef,\n      channel,\n      markDef,\n      ref,\n      config\n    });\n  }\n  return ref;\n}\n\nexport function wrapPositionInvalidTest({\n  fieldDef,\n  channel,\n  markDef,\n  ref,\n  config\n}: {\n  fieldDef: FieldDef<string>;\n  channel: PositionChannel | PolarPositionChannel;\n  markDef: MarkDef<Mark>;\n  ref: VgValueRef;\n  config: Config;\n}): VgValueRef | VgValueRef[] {\n  if (isPathMark(markDef.type)) {\n    // path mark already use defined to skip points, no need to do it here.\n    return ref;\n  }\n\n  const invalid = getMarkPropOrConfig('invalid', markDef, config);\n  if (invalid === null) {\n    // if there is no invalid filter, don't do the invalid test\n    return ref;\n  }\n\n  return [fieldInvalidTestValueRef(fieldDef, channel), ref];\n}\n\nexport function fieldInvalidTestValueRef(fieldDef: FieldDef<string>, channel: PositionChannel | PolarPositionChannel) {\n  const test = fieldInvalidPredicate(fieldDef, true);\n\n  const mainChannel = getMainRangeChannel(channel) as PositionChannel | PolarPositionChannel; // we can cast here as the output can't be other things.\n  const zeroValueRef =\n    mainChannel === 'y'\n      ? {field: {group: 'height'}}\n      : // x / angle / radius can all use 0\n        {value: 0};\n\n  return {test, ...zeroValueRef};\n}\n\nexport function fieldInvalidPredicate(field: FieldName | FieldDef<string>, invalid = true) {\n  return fieldValidPredicate(isString(field) ? field : vgField(field, {expr: 'datum'}), !invalid);\n}\n\nexport function datumDefToExpr(datumDef: DatumDef<string>) {\n  const {datum} = datumDef;\n  if (isDateTime(datum)) {\n    return dateTimeToExpr(datum);\n  }\n  return `${JSON.stringify(datum)}`;\n}\n\nexport function valueRefForFieldOrDatumDef(\n  fieldDef: FieldDefBase<string> | DatumDef<string>,\n  scaleName: string,\n  opt: FieldRefOption,\n  encode: {offset?: number | VgValueRef; band?: number | boolean}\n): VgValueRef {\n  const ref: VgValueRef = {};\n\n  if (scaleName) {\n    ref.scale = scaleName;\n  }\n\n  if (isDatumDef<string>(fieldDef)) {\n    const {datum} = fieldDef;\n    if (isDateTime(datum)) {\n      ref.signal = dateTimeToExpr(datum);\n    } else if (isSignalRef(datum)) {\n      ref.signal = datum.signal;\n    } else {\n      ref.value = datum;\n    }\n  } else {\n    ref.field = vgField(fieldDef, opt);\n  }\n\n  if (encode) {\n    const {offset, band} = encode;\n    if (offset) {\n      ref.offset = offset;\n    }\n    if (band) {\n      ref.band = band;\n    }\n  }\n  return ref;\n}\n\n/**\n * Signal that returns the middle of a bin from start and end field. Should only be used with x and y.\n */\nexport function interpolatedSignalRef({\n  scaleName,\n  fieldOrDatumDef,\n  fieldOrDatumDef2,\n  offset,\n  startSuffix,\n  band = 0.5\n}: {\n  scaleName: string;\n  fieldOrDatumDef: TypedFieldDef<string>;\n  fieldOrDatumDef2?: SecondaryFieldDef<string>;\n  startSuffix?: string;\n  offset: number | SignalRef;\n  band: number;\n}): VgValueRef {\n  const expr = 0 < band && band < 1 ? 'datum' : undefined;\n  const start = vgField(fieldOrDatumDef, {expr, suffix: startSuffix});\n  const end =\n    fieldOrDatumDef2 !== undefined\n      ? vgField(fieldOrDatumDef2, {expr})\n      : vgField(fieldOrDatumDef, {suffix: 'end', expr});\n\n  const ref: VgValueRef = {};\n\n  if (band === 0 || band === 1) {\n    ref.scale = scaleName;\n    const val = band === 0 ? start : end;\n    ref.field = val;\n  } else {\n    const datum = `${band} * ${start} + ${1 - band} * ${end}`;\n    ref.signal = `scale(\"${scaleName}\", ${datum})`;\n  }\n\n  if (offset) {\n    ref.offset = offset;\n  }\n  return ref;\n}\n\nexport interface MidPointParams {\n  channel: Channel;\n  channelDef: ChannelDef;\n  channel2Def?: SecondaryChannelDef<string>;\n\n  markDef: MarkDef<Mark>;\n  config: Config;\n\n  scaleName: string;\n  scale: ScaleComponent;\n  stack?: StackProperties;\n  offset?: number | SignalRef;\n  defaultRef: VgValueRef | (() => VgValueRef);\n\n  /**\n   * Allow overriding band instead of reading to field def since band is applied to size (width/height) instead of the position for x/y-position with band scales.\n   */\n  band?: number;\n}\n\n/**\n * @returns {VgValueRef} Value Ref for xc / yc or mid point for other channels.\n */\nexport function midPoint({\n  channel,\n  channelDef,\n  channel2Def,\n  markDef,\n  config,\n  scaleName,\n  scale,\n  stack,\n  offset,\n  defaultRef,\n  band\n}: MidPointParams): VgValueRef {\n  // TODO: datum support\n  if (channelDef) {\n    /* istanbul ignore else */\n\n    if (isFieldOrDatumDef(channelDef)) {\n      if (isTypedFieldDef(channelDef)) {\n        band =\n          band ??\n          getBand({\n            channel,\n            fieldDef: channelDef,\n            fieldDef2: channel2Def,\n            markDef,\n            stack,\n            config,\n            isMidPoint: true\n          });\n        const {bin, timeUnit, type} = channelDef;\n\n        if (isBinning(bin) || (band && timeUnit && type === TEMPORAL)) {\n          // Use middle only for x an y to place marks in the center between start and end of the bin range.\n          // We do not use the mid point for other channels (e.g. size) so that properties of legends and marks match.\n          if (stack && stack.impute) {\n            // For stack, we computed bin_mid so we can impute.\n            return valueRefForFieldOrDatumDef(channelDef, scaleName, {binSuffix: 'mid'}, {offset});\n          }\n          if (band) {\n            // if band = 0, no need to call interpolation\n            // For non-stack, we can just calculate bin mid on the fly using signal.\n            return interpolatedSignalRef({scaleName, fieldOrDatumDef: channelDef, band, offset});\n          }\n          return valueRefForFieldOrDatumDef(\n            channelDef,\n            scaleName,\n            binRequiresRange(channelDef, channel) ? {binSuffix: 'range'} : {},\n            {\n              offset\n            }\n          );\n        } else if (isBinned(bin)) {\n          if (isFieldDef(channel2Def)) {\n            return interpolatedSignalRef({\n              scaleName,\n              fieldOrDatumDef: channelDef,\n              fieldOrDatumDef2: channel2Def,\n              band,\n              offset\n            });\n          } else {\n            const channel2 = channel === X ? X2 : Y2;\n            log.warn(log.message.channelRequiredForBinned(channel2));\n          }\n        }\n      }\n\n      const scaleType = scale?.get('type');\n      return valueRefForFieldOrDatumDef(\n        channelDef,\n        scaleName,\n        hasDiscreteDomain(scaleType) ? {binSuffix: 'range'} : {}, // no need for bin suffix if there is no scale\n        {\n          offset,\n          // For band, to get mid point, need to offset by half of the band\n          band: scaleType === 'band' ? band ?? channelDef.band ?? 0.5 : undefined\n        }\n      );\n    } else if (isValueDef(channelDef)) {\n      const value = channelDef.value;\n      const offsetMixins = offset ? {offset} : {};\n\n      return {...widthHeightValueOrSignalRef(channel, value), ...offsetMixins};\n    }\n\n    // If channelDef is neither field def or value def, it's a condition-only def.\n    // In such case, we will use default ref.\n  }\n\n  if (isFunction(defaultRef)) {\n    defaultRef = defaultRef();\n  }\n\n  if (defaultRef) {\n    // for non-position, ref could be undefined.\n    return {\n      ...defaultRef,\n      // only include offset when it is non-zero (zero = no offset)\n      ...(offset ? {offset} : {})\n    };\n  }\n  return defaultRef;\n}\n\n/**\n * Convert special \"width\" and \"height\" values in Vega-Lite into Vega value ref.\n */\nexport function widthHeightValueOrSignalRef(channel: Channel, value: Value | SignalRef) {\n  if (contains(['x', 'x2'], channel) && value === 'width') {\n    return {field: {group: 'width'}};\n  } else if (contains(['y', 'y2'], channel) && value === 'height') {\n    return {field: {group: 'height'}};\n  }\n  return signalOrValueRef(value);\n}\n","import {SignalRef} from 'vega-typings/types';\nimport {isString} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {\n  channelDefType,\n  DatumDef,\n  FieldDef,\n  isFieldDef,\n  isFieldOrDatumDefForTimeFormat,\n  isScaleFieldDef,\n  vgField\n} from '../channeldef';\nimport {Config} from '../config';\nimport {fieldValidPredicate} from '../predicate';\nimport {ScaleType} from '../scale';\nimport {formatExpression, normalizeTimeUnit, timeUnitSpecifierExpression} from '../timeunit';\nimport {QUANTITATIVE, Type} from '../type';\nimport {Dict} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {TimeUnit} from './../timeunit';\nimport {datumDefToExpr} from './mark/encode/valueref';\n\nexport function isCustomFormatType(formatType: string) {\n  return formatType && formatType !== 'number' && formatType !== 'time';\n}\n\nfunction customFormatExpr(formatType: string, field: string, format: string | Dict<unknown>) {\n  return `${formatType}(${field}${format ? `, ${JSON.stringify(format)}` : ''})`;\n}\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function formatSignalRef({\n  fieldOrDatumDef,\n  format,\n  formatType,\n  expr,\n  normalizeStack,\n  config\n}: {\n  fieldOrDatumDef: FieldDef<string> | DatumDef<string>;\n  format: string | Dict<unknown>;\n  formatType: string;\n  expr?: 'datum' | 'parent' | 'datum.datum';\n  normalizeStack?: boolean;\n  config: Config;\n}) {\n  if (isCustomFormatType(formatType)) {\n    return formatCustomType({\n      fieldOrDatumDef,\n      format,\n      formatType,\n      expr,\n      config\n    });\n  }\n\n  const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n  if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n    const signal = timeFormatExpression(\n      field,\n      isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined,\n      format,\n      config.timeFormat,\n      isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC\n    );\n    return signal ? {signal} : undefined;\n  }\n\n  format = numberFormat(channelDefType(fieldOrDatumDef), format, config);\n  if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n    const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n    return {\n      signal: binFormatExpression(field, endField, format, formatType, config)\n    };\n  } else if (format || channelDefType(fieldOrDatumDef) === 'quantitative') {\n    return {\n      signal: `${formatExpr(field, format)}`\n    };\n  } else {\n    return {signal: `isValid(${field}) ? ${field} : \"\"+${field}`};\n  }\n}\n\nfunction fieldToFormat(\n  fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n  expr: 'datum' | 'parent' | 'datum.datum',\n  normalizeStack: boolean\n) {\n  if (isFieldDef(fieldOrDatumDef)) {\n    if (normalizeStack) {\n      return `${vgField(fieldOrDatumDef, {expr, suffix: 'end'})}-${vgField(fieldOrDatumDef, {\n        expr,\n        suffix: 'start'\n      })}`;\n    } else {\n      return vgField(fieldOrDatumDef, {expr});\n    }\n  } else {\n    return datumDefToExpr(fieldOrDatumDef);\n  }\n}\n\nexport function formatCustomType({\n  fieldOrDatumDef,\n  format,\n  formatType,\n  expr,\n  normalizeStack,\n  config,\n  field\n}: {\n  fieldOrDatumDef: FieldDef<string> | DatumDef<string>;\n  format: string | Dict<unknown>;\n  formatType: string;\n  expr?: 'datum' | 'parent' | 'datum.datum';\n  normalizeStack?: boolean;\n  config: Config;\n  field?: string; // axis/legend \"use datum.value\"\n}) {\n  field = field ?? fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n  if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n    const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n    return {\n      signal: binFormatExpression(field, endField, format, formatType, config)\n    };\n  }\n  return {signal: customFormatExpr(formatType, field, format)};\n}\n\nexport function guideFormat(\n  fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n  type: Type,\n  format: string | Dict<unknown>,\n  formatType: string,\n  config: Config,\n  omitTimeFormatConfig: boolean // axis doesn't use config.timeFormat\n) {\n  if (isCustomFormatType(formatType)) {\n    return undefined; // handled in encode block\n  }\n\n  if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n    const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n    return timeFormat(format as string, timeUnit, config, omitTimeFormatConfig);\n  }\n\n  return numberFormat(type, format, config);\n}\n\nexport function guideFormatType(\n  formatType: string | SignalRef,\n  fieldOrDatumDef: FieldDef<string> | DatumDef<string>,\n  scaleType: ScaleType\n) {\n  if (formatType && (isSignalRef(formatType) || formatType === 'number' || formatType === 'time')) {\n    return formatType;\n  }\n  if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef) && scaleType !== 'time' && scaleType !== 'utc') {\n    return 'time';\n  }\n  return undefined;\n}\n\n/**\n * Returns number format for a fieldDef.\n */\nexport function numberFormat(type: Type, specifiedFormat: string | Dict<unknown>, config: Config) {\n  // Specified format in axis/legend has higher precedence than fieldDef.format\n  if (isString(specifiedFormat)) {\n    return specifiedFormat;\n  }\n\n  if (type === QUANTITATIVE) {\n    // we only apply the default if the field is quantitative\n    return config.numberFormat;\n  }\n  return undefined;\n}\n\n/**\n * Returns time format for a fieldDef for use in guides.\n */\nexport function timeFormat(specifiedFormat: string, timeUnit: TimeUnit, config: Config, omitTimeFormatConfig: boolean) {\n  if (specifiedFormat) {\n    return specifiedFormat;\n  }\n\n  if (timeUnit) {\n    return {\n      signal: timeUnitSpecifierExpression(timeUnit)\n    };\n  }\n\n  return omitTimeFormatConfig ? undefined : config.timeFormat;\n}\n\nfunction formatExpr(field: string, format: string) {\n  return `format(${field}, \"${format || ''}\")`;\n}\n\nfunction binNumberFormatExpr(field: string, format: string | Dict<unknown>, formatType: string, config: Config) {\n  if (isCustomFormatType(formatType)) {\n    return customFormatExpr(formatType, field, format);\n  }\n\n  return formatExpr(field, (isString(format) ? format : undefined) ?? config.numberFormat);\n}\n\nexport function binFormatExpression(\n  startField: string,\n  endField: string,\n  format: string | Dict<unknown>,\n  formatType: string,\n  config: Config\n) {\n  const start = binNumberFormatExpr(startField, format, formatType, config);\n  const end = binNumberFormatExpr(endField, format, formatType, config);\n  return `${fieldValidPredicate(startField, false)} ? \"null\" : ${start} + \"${BIN_RANGE_DELIMITER}\" + ${end}`;\n}\n\n/**\n * Returns the time expression used for axis/legend labels or text mark for a temporal field\n */\nexport function timeFormatExpression(\n  field: string,\n  timeUnit: TimeUnit,\n  format: string | Dict<unknown>,\n  rawTimeFormat: string, // should be provided only for actual text and headers, not axis/legend labels\n  isUTCScale: boolean\n): string {\n  if (!timeUnit || format) {\n    // If there is no time unit, or if user explicitly specifies format for axis/legend/text.\n    format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit.\n    return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`;\n  } else {\n    return formatExpression(timeUnit, field, isUTCScale);\n  }\n}\n","import {isArray} from 'vega-util';\nimport {NonArgAggregateOp} from './aggregate';\nimport {FieldName} from './channeldef';\nimport {DateTime} from './datetime';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/**\n * A sort definition for transform\n */\nexport interface SortField {\n  /**\n   * The name of the field to sort.\n   */\n  field: FieldName;\n\n  /**\n   * Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n   */\n  order?: SortOrder | null;\n}\n\nexport interface SortFields {\n  field: FieldName[];\n  order?: SortOrder[];\n}\n\nexport const DEFAULT_SORT_OP = 'min';\n\n/**\n * A sort definition for sorting a discrete scale in an encoding field definition.\n */\n\nexport interface EncodingSortField<F> {\n  /**\n   * The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n   *\n   * __Default value:__ If unspecified, defaults to the field specified in the outer data reference.\n   */\n  field?: F; // Field is optional because `\"op\": \"count\"` does not require a field.\n  /**\n   * An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\n   * An aggregation is required when there are multiple values of the sort field for each encoded data field.\n   * The input data objects will be aggregated, grouped by the encoded data field.\n   *\n   * For a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n   *\n   * __Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`.\n   */\n  op?: NonArgAggregateOp;\n\n  /**\n   * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n   */\n  order?: SortOrder | null;\n}\n\nexport interface SortByEncoding {\n  /**\n   * The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)\n   */\n  encoding: SortByChannel;\n\n  /**\n   * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n   */\n  order?: SortOrder | null;\n}\n\nexport type SortArray = number[] | string[] | boolean[] | DateTime[];\n\nconst SORT_BY_CHANNEL_INDEX = {\n  x: 1,\n  y: 1,\n  color: 1,\n  fill: 1,\n  stroke: 1,\n  strokeWidth: 1,\n  size: 1,\n  shape: 1,\n  fillOpacity: 1,\n  strokeOpacity: 1,\n  opacity: 1,\n  text: 1\n} as const;\n\nexport type SortByChannel = keyof typeof SORT_BY_CHANNEL_INDEX;\n\nexport function isSortByChannel(c: string): c is SortByChannel {\n  return c in SORT_BY_CHANNEL_INDEX;\n}\n\nexport type SortByChannelDesc =\n  | '-x'\n  | '-y'\n  | '-color'\n  | '-fill'\n  | '-stroke'\n  | '-strokeWidth'\n  | '-size'\n  | '-shape'\n  | '-fillOpacity'\n  | '-strokeOpacity'\n  | '-opacity'\n  | '-text';\n\nexport type AllSortString = SortOrder | SortByChannel | SortByChannelDesc;\n\nexport type Sort<F> = SortArray | AllSortString | EncodingSortField<F> | SortByEncoding | null;\n\nexport function isSortByEncoding<F>(sort: Sort<F>): sort is SortByEncoding {\n  return !!sort && !!sort['encoding'];\n}\n\nexport function isSortField<F>(sort: Sort<F>): sort is EncodingSortField<F> {\n  return !!sort && (sort['op'] === 'count' || !!sort['field']);\n}\n\nexport function isSortArray<F>(sort: Sort<F>): sort is SortArray {\n  return !!sort && isArray(sort);\n}\n","import {LayoutAlign} from 'vega';\nimport {BinParams} from '../bin';\nimport {ChannelDef, Field, FieldName, TypedFieldDef} from '../channeldef';\nimport {Header} from '../header';\nimport {EncodingSortField, SortArray, SortOrder} from '../sort';\nimport {StandardType} from '../type';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {GenericLayerSpec, NormalizedLayerSpec} from './layer';\nimport {GenericUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport interface FacetFieldDef<F extends Field> extends TypedFieldDef<F, StandardType, boolean | BinParams | null> {\n  /**\n   * An object defining properties of a facet's header.\n   */\n  header?: Header;\n\n  // Note: `\"sort\"` for facet field def is different from encoding field def as it does not support `SortByEncoding`\n\n  /**\n   * Sort order for the encoded field.\n   *\n   * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n   *\n   * For discrete fields, `sort` can be one of the following:\n   * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n   * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n   * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n   * - `null` indicating no sort.\n   *\n   * __Default value:__ `\"ascending\"`\n   *\n   * __Note:__ `null` is not supported for `row` and `column`.\n   */\n  sort?: SortArray | SortOrder | EncodingSortField<F> | null;\n}\n\nexport type FacetEncodingFieldDef<F extends Field> = FacetFieldDef<F> & GenericCompositionLayoutWithColumns;\n\nexport interface RowColumnEncodingFieldDef<F extends Field> extends FacetFieldDef<F> {\n  // Manually declarae this separated from GenericCompositionLayout as we don't support RowCol object in RowColumnEncodingFieldDef\n\n  /**\n   * The alignment to apply to row/column facet's subplot.\n   * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n   *\n   * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n   * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n   * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n   *\n   * __Default value:__ `\"all\"`.\n   */\n  align?: LayoutAlign;\n\n  /**\n   * Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n   *\n   * __Default value:__ `false`\n   */\n  center?: boolean;\n\n  /**\n   * The spacing in pixels between facet's sub-views.\n   *\n   * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n   */\n  spacing?: number;\n}\n\nexport interface FacetMapping<F extends Field, FD extends FacetFieldDef<F> = FacetFieldDef<F>> {\n  /**\n   * A field definition for the vertical facet of trellis plots.\n   */\n  row?: FD;\n\n  /**\n   * A field definition for the horizontal facet of trellis plots.\n   */\n  column?: FD;\n}\n\nexport function isFacetMapping<F extends Field>(f: FacetFieldDef<F> | FacetMapping<F>): f is FacetMapping<F> {\n  return 'row' in f || 'column' in f;\n}\n\n/**\n * Facet mapping for encoding macro\n */\nexport interface EncodingFacetMapping<F extends Field> extends FacetMapping<F, RowColumnEncodingFieldDef<F>> {\n  /**\n   * A field definition for the (flexible) facet of trellis plots.\n   *\n   * If either `row` or `column` is specified, this channel will be ignored.\n   */\n  facet?: FacetEncodingFieldDef<F>;\n}\n\nexport function isFacetFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is FacetFieldDef<F> {\n  return !!channelDef && 'header' in channelDef;\n}\n\n/**\n * Base interface for a facet specification.\n */\nexport interface GenericFacetSpec<\n  U extends GenericUnitSpec<any, any>,\n  L extends GenericLayerSpec<any>,\n  F extends Field\n> extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n  /**\n   * Definition for how to facet the data. One of:\n   * 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n   * 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)\n   */\n  facet: FacetFieldDef<F> | FacetMapping<F>;\n\n  /**\n   * A specification of the view that gets faceted.\n   */\n  spec: L | U;\n  // TODO: replace this with GenericSpec<U> once we support all cases;\n}\n\n/**\n * A facet specification without any shortcut / expansion syntax\n */\nexport type NormalizedFacetSpec = GenericFacetSpec<NormalizedUnitSpec, NormalizedLayerSpec, FieldName>;\n\nexport function isFacetSpec(spec: BaseSpec): spec is GenericFacetSpec<any, any, any> {\n  return 'facet' in spec;\n}\n","import {Gradient, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isNumber, isString} from 'vega-util';\nimport {Aggregate, isAggregateOp, isArgmaxDef, isArgminDef, isCountingAggregateOp} from './aggregate';\nimport {Axis} from './axis';\nimport {autoMaxBins, Bin, BinParams, binToString, isBinned, isBinning} from './bin';\nimport {\n  ANGLE,\n  DESCRIPTION,\n  Channel,\n  COLOR,\n  COLUMN,\n  DETAIL,\n  FACET,\n  FILL,\n  FILLOPACITY,\n  HREF,\n  isScaleChannel,\n  isSecondaryRangeChannel,\n  isXorY,\n  KEY,\n  LATITUDE,\n  LATITUDE2,\n  LONGITUDE,\n  LONGITUDE2,\n  OPACITY,\n  ORDER,\n  RADIUS,\n  RADIUS2,\n  rangeType,\n  ROW,\n  SHAPE,\n  SIZE,\n  STROKE,\n  STROKEDASH,\n  STROKEOPACITY,\n  STROKEWIDTH,\n  TEXT,\n  THETA,\n  THETA2,\n  TOOLTIP,\n  URL,\n  X,\n  X2,\n  Y,\n  Y2\n} from './channel';\nimport {getMarkConfig} from './compile/common';\nimport {isCustomFormatType} from './compile/format';\nimport {CompositeAggregate} from './compositemark';\nimport {Config} from './config';\nimport {DateTime, dateTimeToExpr, isDateTime} from './datetime';\nimport {Encoding} from './encoding';\nimport {FormatMixins, Guide, GuideEncodingConditionalValueDef, TitleMixins} from './guide';\nimport {ImputeParams} from './impute';\nimport {Legend} from './legend';\nimport * as log from './log';\nimport {LogicalComposition} from './logical';\nimport {isRectBasedMark, MarkDef} from './mark';\nimport {Predicate} from './predicate';\nimport {Scale} from './scale';\nimport {isSortByChannel, Sort, SortOrder} from './sort';\nimport {isFacetFieldDef} from './spec/facet';\nimport {StackOffset, StackProperties} from './stack';\nimport {\n  getTimeUnitParts,\n  isLocalSingleTimeUnit,\n  normalizeTimeUnit,\n  TimeUnit,\n  TimeUnitParams,\n  timeUnitToString\n} from './timeunit';\nimport {AggregatedFieldDef, WindowFieldDef} from './transform';\nimport {getFullName, QUANTITATIVE, StandardType, Type} from './type';\nimport {\n  contains,\n  flatAccessWithDatum,\n  getFirstDefined,\n  internalField,\n  replacePathInField,\n  titleCase,\n  removePathFromField\n} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type PrimitiveValue = number | string | boolean | null;\n\nexport type Value = PrimitiveValue | number[] | Gradient | Text | SignalRef;\n\n/**\n * Definition object for a constant value (primitive value or gradient definition) of an encoding channel.\n */\nexport interface ValueDef<V extends Value = Value> {\n  /**\n   * A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).\n   */\n  value: V;\n}\n\nexport type XValueDef = ValueDef<number | 'width' | SignalRef>;\n\nexport type YValueDef = ValueDef<number | 'height' | SignalRef>;\n\nexport type NumericValueDef = ValueDef<number | SignalRef>;\n\n/**\n * A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n * {\n *   condition: {field: ...} | {value: ...},\n *   value: ...,\n * }\n */\n\n/**\n * @minProperties 1\n */\nexport type ValueDefWithCondition<F extends FieldDef<any> | DatumDef<any>, V extends Value = Value> = Partial<\n  ValueDef<V | SignalRef>\n> & {\n  /**\n   * A field definition or one or more value definition(s) with a selection predicate.\n   */\n  condition?: Conditional<F> | Conditional<ValueDef<V | SignalRef>> | Conditional<ValueDef<V | SignalRef>>[];\n};\n\nexport type StringValueDefWithCondition<F extends Field, T extends Type = StandardType> = ValueDefWithCondition<\n  MarkPropFieldOrDatumDef<F, T>,\n  string | null\n>;\n\nexport type ColorGradientValueDefWithCondition<F extends Field, T extends Type = StandardType> = ValueDefWithCondition<\n  MarkPropFieldOrDatumDef<F, T>,\n  Gradient | string | null\n>;\n\nexport type NumericValueDefWithCondition<F extends Field> = ValueDefWithCondition<\n  MarkPropFieldOrDatumDef<F, StandardType>,\n  number\n>;\nexport type NumericArrayValueDefWithCondition<F extends Field> = ValueDefWithCondition<\n  MarkPropFieldOrDatumDef<F, StandardType>,\n  number[]\n>;\n\nexport type TypeForShape = 'nominal' | 'ordinal' | 'geojson';\n\nexport type ShapeValueDefWithCondition<F extends Field> = StringValueDefWithCondition<F, TypeForShape>;\n\nexport type TextValueDefWithCondition<F extends Field> = ValueDefWithCondition<StringFieldDef<F>, Text>;\n\nexport type Conditional<CD extends FieldDef<any> | DatumDef | ValueDef<any> | SignalRef> =\n  | ConditionalPredicate<CD>\n  | ConditionalSelection<CD>;\n\nexport type ConditionalPredicate<CD extends FieldDef<any> | DatumDef | ValueDef<any> | SignalRef> = {\n  /**\n   * Predicate for triggering the condition\n   */\n  test: LogicalComposition<Predicate>;\n} & CD;\n\nexport type ConditionalSelection<CD extends FieldDef<any> | DatumDef | ValueDef<any> | SignalRef> = {\n  /**\n   * A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose).\n   */\n  selection: LogicalComposition<string>;\n} & CD;\n\nexport function isConditionalSelection<T>(c: Conditional<T>): c is ConditionalSelection<T> {\n  return c['selection'];\n}\n\nexport interface ConditionValueDefMixins<V extends Value = Value> {\n  /**\n   * One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n   *\n   * __Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\n   * since Vega-Lite only allows at most one encoded field per encoding channel.\n   */\n  condition?: Conditional<ValueDef<V>> | Conditional<ValueDef<V>>[];\n}\n\n/**\n * A FieldDef with Condition<ValueDef>\n * {\n *   condition: {value: ...},\n *   field: ...,\n *   ...\n * }\n */\n\nexport type FieldOrDatumDefWithCondition<F extends FieldDef<any, any> | DatumDef<any>, V extends Value = Value> = F &\n  ConditionValueDefMixins<V | SignalRef>;\n\nexport type ColorGradientFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<\n  MarkPropFieldDef<F, StandardType>,\n  Gradient | string | null\n>;\n\nexport type ColorGradientDatumDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<\n  DatumDef<F>,\n  Gradient | string | null\n>;\n\nexport type NumericFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<\n  MarkPropFieldDef<F, StandardType>,\n  number\n>;\n\nexport type NumericDatumDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<DatumDef<F>, number>;\n\nexport type NumericArrayFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<\n  MarkPropFieldDef<F, StandardType>,\n  number[]\n>;\n\nexport type NumericArrayDatumDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<DatumDef<F>, number[]>;\n\nexport type ShapeFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<\n  MarkPropFieldDef<F, TypeForShape>,\n  string | null\n>;\n\nexport type TextFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<StringFieldDef<F>, Text>;\n\nexport type TextDatumDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<StringDatumDef<F>, Text>;\n\nexport type StringFieldDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<StringFieldDef<F>, string>;\n\nexport type StringDatumDefWithCondition<F extends Field> = FieldOrDatumDefWithCondition<StringDatumDef<F>, string>;\n\n/**\n * A ValueDef with optional Condition<ValueDef | FieldDef>\n * {\n *   condition: {field: ...} | {value: ...},\n *   value: ...,\n * }\n */\n\n/**\n * Reference to a repeated value.\n */\nexport interface RepeatRef {\n  repeat: 'row' | 'column' | 'repeat' | 'layer';\n}\n\nexport type FieldName = string;\nexport type Field = FieldName | RepeatRef;\n\nexport function isRepeatRef(field: Field | any): field is RepeatRef {\n  return field && !isString(field) && 'repeat' in field;\n}\n\n/** @@hidden */\nexport type HiddenCompositeAggregate = CompositeAggregate;\n\nexport interface FieldDefBase<F, B extends Bin = Bin> extends BandMixins {\n  /**\n   * __Required.__ A string defining the name of the field from which to pull a data value\n   * or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n   *\n   * __See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n   *\n   * __Notes:__\n   * 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\n   * If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\n   * See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n   * 2) `field` is not required if `aggregate` is `count`.\n   */\n  field?: F;\n\n  // function\n\n  /**\n   * Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\n   * or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n   *\n   * __Default value:__ `undefined` (None)\n   *\n   * __See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation.\n   */\n  timeUnit?: TimeUnit | TimeUnitParams;\n\n  /**\n   * Aggregation function for the field\n   * (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n   *\n   * __Default value:__ `undefined` (None)\n   *\n   * __See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation.\n   */\n  aggregate?: Aggregate | HiddenCompositeAggregate;\n\n  /**\n   * A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n   *\n   * - If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n   *\n   * - If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n   *\n   * __Default value:__ `false`\n   *\n   * __See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.\n   */\n  bin?: B;\n}\n\nexport function toFieldDefBase(fieldDef: FieldDef<string>): FieldDefBase<string> {\n  const {field, timeUnit, bin, aggregate} = fieldDef;\n  return {\n    ...(timeUnit ? {timeUnit} : {}),\n    ...(bin ? {bin} : {}),\n    ...(aggregate ? {aggregate} : {}),\n    field\n  };\n}\n\nexport interface TypeMixins<T extends Type> {\n  /**\n   * The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\n   * It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n   *\n   *\n   * __Note:__\n   *\n   * - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n   * - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n   * - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n   * - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n   * - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n   * - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n   *\n   * __See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.\n   */\n  type: T;\n}\n\n/**\n *  Definition object for a data field, its type and transformation of an encoding channel.\n */\nexport type TypedFieldDef<\n  F extends Field,\n  T extends Type = any,\n  B extends Bin = boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> = FieldDefBase<F, B> & TitleMixins & TypeMixins<T>;\n\nexport interface SortableFieldDef<\n  F extends Field,\n  T extends Type = StandardType,\n  B extends Bin = boolean | BinParams | null\n> extends TypedFieldDef<F, T, B> {\n  /**\n   * Sort order for the encoded field.\n   *\n   * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n   *\n   * For discrete fields, `sort` can be one of the following:\n   * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n   * - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n   * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n   * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n   * - `null` indicating no sort.\n   *\n   * __Default value:__ `\"ascending\"`\n   *\n   * __Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n   *\n   * __See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation.\n   */\n  sort?: Sort<F>;\n}\n\nexport function isSortableFieldDef<F extends Field>(fieldDef: FieldDef<F>): fieldDef is SortableFieldDef<F> {\n  return isTypedFieldDef(fieldDef) && 'sort' in fieldDef;\n}\n\nexport type ScaleFieldDef<\n  F extends Field,\n  T extends Type = StandardType,\n  B extends Bin = boolean | BinParams | null\n> = SortableFieldDef<F, T, B> & ScaleMixins;\n\nexport interface ScaleMixins {\n  /**\n   * An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n   *\n   * If `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n   *\n   * __Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n   *\n   * __See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation.\n   */\n  scale?: Scale | null;\n}\n\nexport interface DatumDef<\n  F extends Field = string,\n  V extends PrimitiveValue | DateTime | SignalRef = PrimitiveValue | DateTime | SignalRef\n> extends Partial<TypeMixins<Type>>, BandMixins {\n  /**\n   * A constant value in data domain.\n   */\n  datum?: F extends RepeatRef ? V | RepeatRef : V;\n  // only apply Repeatref if field (F) can be RepeatRef\n  // FIXME(https://github.com/microsoft/TypeScript/issues/37586):\n  // `F extends RepeatRef` probably should be `RepeatRef extends F` but there is likely a bug in TS.\n}\n\nexport type StringDatumDef<F extends Field = string> = DatumDef<F> & FormatMixins;\n\nexport type ScaleDatumDef<F extends Field = string> = ScaleMixins & DatumDef<F>;\n\n/**\n * A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.\n */\nexport type SecondaryFieldDef<F extends Field> = FieldDefBase<F, null> & TitleMixins; // x2/y2 shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type SecondaryChannelDef<F extends Field> = Encoding<F>['x2' | 'y2'];\n\n/**\n * Field Def without scale (and without bin: \"binned\" support).\n */\nexport type FieldDefWithoutScale<F extends Field, T extends Type = StandardType> = TypedFieldDef<F, T>;\n\nexport type LatLongFieldDef<F extends Field> = FieldDefBase<F, null> &\n  TitleMixins &\n  Partial<TypeMixins<'quantitative'>>; // Lat long shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type PositionFieldDefBase<F extends Field> = ScaleFieldDef<\n  F,\n  StandardType,\n  boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> &\n  PositionBaseMixins;\n\nexport type PositionDatumDefBase<F extends Field> = ScaleDatumDef<F> & PositionBaseMixins;\n\nexport interface PositionBaseMixins {\n  /**\n   * Type of stacking offset if the field should be stacked.\n   * `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains.\n   * For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n   *\n   * `stack` can be one of the following values:\n   * - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n   * - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/>\n   * -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n   * - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n   *\n   * __Default value:__ `zero` for plots with all of the following conditions are true:\n   * (1) the mark is `bar`, `area`, or `arc`;\n   * (2) the stacked measure channel (x or y) has a linear scale;\n   * (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n   *\n   * __See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation.\n   */\n  stack?: StackOffset | null | boolean;\n}\n\nexport interface BandMixins {\n  /**\n   * For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n   *\n   * For other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  band?: number;\n}\n\nexport type PositionFieldDef<F extends Field> = PositionFieldDefBase<F> & PositionMixins;\n\nexport type PositionDatumDef<F extends Field> = PositionDatumDefBase<F> & PositionMixins;\n\nexport interface PositionMixins {\n  /**\n   * An object defining properties of axis's gridlines, ticks and labels.\n   * If `null`, the axis for the encoding channel will be removed.\n   *\n   * __Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n   *\n   * __See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation.\n   */\n  axis?: Axis | null;\n\n  /**\n   * An object defining the properties of the Impute Operation to be applied.\n   * The field value of the other positional channel is taken as `key` of the `Impute` Operation.\n   * The field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n   *\n   * __See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation.\n   */\n  impute?: ImputeParams | null;\n}\n\nexport type PolarFieldDef<F extends Field> = PositionFieldDefBase<F>;\nexport type PolarDatumDef<F extends Field> = PositionDatumDefBase<F>;\n\nexport function getBand({\n  channel,\n  fieldDef,\n  fieldDef2,\n  markDef: mark,\n  stack,\n  config,\n  isMidPoint\n}: {\n  isMidPoint?: boolean;\n  channel: Channel;\n  fieldDef: FieldDef<string> | DatumDef;\n  fieldDef2?: SecondaryChannelDef<string>;\n  stack: StackProperties;\n  markDef: MarkDef;\n  config: Config;\n}): number {\n  if (isFieldOrDatumDef(fieldDef) && fieldDef.band !== undefined) {\n    return fieldDef.band;\n  }\n  if (isFieldDef(fieldDef)) {\n    const {timeUnit, bin} = fieldDef;\n\n    if (timeUnit && !fieldDef2) {\n      if (isMidPoint) {\n        return getMarkConfig('timeUnitBandPosition', mark, config);\n      } else {\n        return isRectBasedMark(mark.type) ? getMarkConfig('timeUnitBand', mark, config) : 0;\n      }\n    } else if (isBinning(bin)) {\n      return isRectBasedMark(mark.type) && !isMidPoint ? 1 : 0.5;\n    }\n  }\n  if (stack?.fieldChannel === channel && isMidPoint) {\n    return 0.5;\n  }\n  return undefined;\n}\n\nexport function hasBand(\n  channel: Channel,\n  fieldDef: FieldDef<string>,\n  fieldDef2: SecondaryChannelDef<string>,\n  stack: StackProperties,\n  markDef: MarkDef,\n  config: Config\n): boolean {\n  if (isBinning(fieldDef.bin) || (fieldDef.timeUnit && isTypedFieldDef(fieldDef) && fieldDef.type === 'temporal')) {\n    return !!getBand({channel, fieldDef, fieldDef2, stack, markDef, config});\n  }\n  return false;\n}\n\n/**\n * Field definition of a mark property, which can contain a legend.\n */\nexport type MarkPropFieldDef<F extends Field, T extends Type = Type> = ScaleFieldDef<F, T, boolean | BinParams | null> &\n  LegendMixins;\n\nexport type MarkPropDatumDef<F extends Field> = LegendMixins & ScaleDatumDef<F>;\n\nexport type MarkPropFieldOrDatumDef<F extends Field, T extends Type = Type> =\n  | MarkPropFieldDef<F, T>\n  | MarkPropDatumDef<F>;\n\nexport interface LegendMixins {\n  /**\n   * An object defining properties of the legend.\n   * If `null`, the legend for the encoding channel will be removed.\n   *\n   * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n   *\n   * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.\n   */\n  legend?: Legend | null;\n}\n\n// Detail\n\n// Order Path have no scale\n\nexport interface OrderFieldDef<F extends Field> extends FieldDefWithoutScale<F> {\n  /**\n   * The sort order. One of `\"ascending\"` (default) or `\"descending\"`.\n   */\n  sort?: SortOrder;\n}\n\nexport interface StringFieldDef<F extends Field> extends FieldDefWithoutScale<F, StandardType>, FormatMixins {}\n\nexport type FieldDef<F extends Field, T extends Type = any> = SecondaryFieldDef<F> | TypedFieldDef<F, T>;\nexport type ChannelDef<F extends Field = string> = Encoding<F>[keyof Encoding<F>];\n\nexport function isConditionalDef<CD extends ChannelDef<any> | GuideEncodingConditionalValueDef | SignalRef>(\n  channelDef: CD\n): channelDef is CD & {condition: Conditional<any>} {\n  return !!channelDef && 'condition' in channelDef;\n}\n\n/**\n * Return if a channelDef is a ConditionalValueDef with ConditionFieldDef\n */\nexport function hasConditionalFieldDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is {condition: Conditional<TypedFieldDef<F>>} {\n  const condition = channelDef && channelDef['condition'];\n  return !!condition && !isArray(condition) && isFieldDef(condition);\n}\n\nexport function hasConditionalFieldOrDatumDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is {condition: Conditional<TypedFieldDef<F>>} {\n  const condition = channelDef && channelDef['condition'];\n  return !!condition && !isArray(condition) && isFieldOrDatumDef(condition);\n}\n\nexport function hasConditionalValueDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is ValueDef<any> & {condition: Conditional<ValueDef<any>> | Conditional<ValueDef<any>>[]} {\n  const condition = channelDef && channelDef['condition'];\n  return !!condition && (isArray(condition) || isValueDef(condition));\n}\n\nexport function isFieldDef<F extends Field>(\n  channelDef: ChannelDef<F> | FieldDefBase<F> | DatumDef<F, any>\n): channelDef is FieldDefBase<F> | TypedFieldDef<F> | SecondaryFieldDef<F> {\n  // TODO: we can't use field in channelDef here as it's somehow failing runtime test\n  return !!channelDef && (!!channelDef['field'] || channelDef['aggregate'] === 'count');\n}\n\nexport function channelDefType<F extends Field>(channelDef: ChannelDef<F>): Type | undefined {\n  return channelDef && channelDef['type'];\n}\n\nexport function isDatumDef<F extends Field>(\n  channelDef: ChannelDef<F> | FieldDefBase<F> | DatumDef<F, any>\n): channelDef is DatumDef<F, any> {\n  return !!channelDef && 'datum' in channelDef;\n}\n\nexport function isContinuousFieldOrDatumDef<F extends Field>(cd: ChannelDef<F>) {\n  // TODO: make datum support DateTime object\n  return (isTypedFieldDef(cd) && isContinuous(cd)) || isNumericDataDef(cd);\n}\n\nexport function isQuantitativeFieldOrDatumDef<F extends Field>(cd: ChannelDef<F>) {\n  // TODO: make datum support DateTime object\n  return channelDefType(cd) === 'quantitative' || isNumericDataDef(cd);\n}\n\nexport function isNumericDataDef<F extends Field>(cd: ChannelDef<F>): cd is DatumDef<F, number> {\n  return isDatumDef(cd) && isNumber(cd.datum);\n}\n\nexport function isFieldOrDatumDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is FieldDef<F, any> | DatumDef<F> {\n  return isFieldDef(channelDef) || isDatumDef(channelDef);\n}\n\nexport function isTypedFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is TypedFieldDef<F> {\n  return !!channelDef && (('field' in channelDef && 'type' in channelDef) || channelDef['aggregate'] === 'count');\n}\n\nexport function isValueDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is ValueDef<any> {\n  return channelDef && 'value' in channelDef && 'value' in channelDef;\n}\n\nexport function isScaleFieldDef<F extends Field>(channelDef: ChannelDef<F>): channelDef is ScaleFieldDef<F> {\n  return !!channelDef && ('scale' in channelDef || 'sort' in channelDef);\n}\n\nexport function isPositionFieldOrDatumDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is PositionFieldDef<F> | PositionDatumDef<F> {\n  return channelDef && ('axis' in channelDef || 'stack' in channelDef || 'impute' in channelDef);\n}\n\nexport function isMarkPropFieldOrDatumDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is MarkPropFieldDef<F, any> | MarkPropDatumDef<F> {\n  return !!channelDef && 'legend' in channelDef;\n}\n\nexport function isTextFieldOrDatumDef<F extends Field>(\n  channelDef: ChannelDef<F>\n): channelDef is StringFieldDef<F> | StringDatumDef<F> {\n  return !!channelDef && ('format' in channelDef || 'formatType' in channelDef);\n}\n\nexport interface FieldRefOption {\n  /** Exclude bin, aggregate, timeUnit */\n  nofn?: boolean;\n  /** Wrap the field with datum, parent, or datum.datum (e.g., datum['...'] for Vega Expression */\n  expr?: 'datum' | 'parent' | 'datum.datum';\n  /** Prepend fn with custom function prefix */\n  prefix?: string;\n  /** Append suffix to the field ref for bin (default='start') */\n  binSuffix?: 'end' | 'range' | 'mid';\n  /** Append suffix to the field ref (general) */\n  suffix?: string;\n  /**\n   * Use the field name for `as` in a transform.\n   * We will not escape nested accesses because Vega transform outputs cannot be nested.\n   */\n  forAs?: boolean;\n}\n\nfunction isOpFieldDef(\n  fieldDef: FieldDefBase<string> | WindowFieldDef | AggregatedFieldDef\n): fieldDef is WindowFieldDef | AggregatedFieldDef {\n  return 'op' in fieldDef;\n}\n\n/**\n * Get a Vega field reference from a Vega-Lite field def.\n */\nexport function vgField(\n  fieldDef: FieldDefBase<string> | WindowFieldDef | AggregatedFieldDef,\n  opt: FieldRefOption = {}\n): string {\n  let field = fieldDef.field;\n  const prefix = opt.prefix;\n  let suffix = opt.suffix;\n\n  let argAccessor = ''; // for accessing argmin/argmax field at the end without getting escaped\n\n  if (isCount(fieldDef)) {\n    field = internalField('count');\n  } else {\n    let fn: string;\n\n    if (!opt.nofn) {\n      if (isOpFieldDef(fieldDef)) {\n        fn = fieldDef.op;\n      } else {\n        const {bin, aggregate, timeUnit} = fieldDef;\n        if (isBinning(bin)) {\n          fn = binToString(bin);\n          suffix = (opt.binSuffix ?? '') + (opt.suffix ?? '');\n        } else if (aggregate) {\n          if (isArgmaxDef(aggregate)) {\n            argAccessor = `[\"${field}\"]`;\n            field = `argmax_${aggregate.argmax}`;\n          } else if (isArgminDef(aggregate)) {\n            argAccessor = `[\"${field}\"]`;\n            field = `argmin_${aggregate.argmin}`;\n          } else {\n            fn = String(aggregate);\n          }\n        } else if (timeUnit) {\n          fn = timeUnitToString(timeUnit);\n          suffix = ((!contains(['range', 'mid'], opt.binSuffix) && opt.binSuffix) || '') + (opt.suffix ?? '');\n        }\n      }\n    }\n\n    if (fn) {\n      field = field ? `${fn}_${field}` : fn;\n    }\n  }\n\n  if (suffix) {\n    field = `${field}_${suffix}`;\n  }\n\n  if (prefix) {\n    field = `${prefix}_${field}`;\n  }\n\n  if (opt.forAs) {\n    return removePathFromField(field);\n  } else if (opt.expr) {\n    // Expression to access flattened field. No need to escape dots.\n    return flatAccessWithDatum(field, opt.expr) + argAccessor;\n  } else {\n    // We flattened all fields so paths should have become dot.\n    return replacePathInField(field) + argAccessor;\n  }\n}\n\nexport function isDiscrete(def: TypedFieldDef<Field> | DatumDef<any, any>) {\n  switch (def.type) {\n    case 'nominal':\n    case 'ordinal':\n    case 'geojson':\n      return true;\n    case 'quantitative':\n      return isFieldDef(def) && !!def.bin;\n    case 'temporal':\n      return false;\n  }\n  throw new Error(log.message.invalidFieldType(def.type));\n}\n\nexport function isContinuous(fieldDef: TypedFieldDef<Field>) {\n  return !isDiscrete(fieldDef);\n}\n\nexport function isCount(fieldDef: FieldDefBase<Field>) {\n  return fieldDef.aggregate === 'count';\n}\n\nexport type FieldTitleFormatter = (fieldDef: FieldDefBase<string>, config: Config) => string;\n\nexport function verbalTitleFormatter(fieldDef: FieldDefBase<string>, config: Config) {\n  const {field, bin, timeUnit, aggregate} = fieldDef;\n  if (aggregate === 'count') {\n    return config.countTitle;\n  } else if (isBinning(bin)) {\n    return `${field} (binned)`;\n  } else if (timeUnit) {\n    const unit = normalizeTimeUnit(timeUnit)?.unit;\n    if (unit) {\n      return `${field} (${getTimeUnitParts(unit).join('-')})`;\n    }\n  } else if (aggregate) {\n    if (isArgmaxDef(aggregate)) {\n      return `${field} for max ${aggregate.argmax}`;\n    } else if (isArgminDef(aggregate)) {\n      return `${field} for min ${aggregate.argmin}`;\n    } else {\n      return `${titleCase(aggregate)} of ${field}`;\n    }\n  }\n  return field;\n}\n\nexport function functionalTitleFormatter(fieldDef: FieldDefBase<string>) {\n  const {aggregate, bin, timeUnit, field} = fieldDef;\n  if (isArgmaxDef(aggregate)) {\n    return `${field} for argmax(${aggregate.argmax})`;\n  } else if (isArgminDef(aggregate)) {\n    return `${field} for argmin(${aggregate.argmin})`;\n  }\n\n  const timeUnitParams = normalizeTimeUnit(timeUnit);\n\n  const fn = aggregate || timeUnitParams?.unit || (timeUnitParams?.maxbins && 'timeunit') || (isBinning(bin) && 'bin');\n  if (fn) {\n    return fn.toUpperCase() + '(' + field + ')';\n  } else {\n    return field;\n  }\n}\n\nexport const defaultTitleFormatter: FieldTitleFormatter = (fieldDef: FieldDefBase<string>, config: Config) => {\n  switch (config.fieldTitle) {\n    case 'plain':\n      return fieldDef.field;\n    case 'functional':\n      return functionalTitleFormatter(fieldDef);\n    default:\n      return verbalTitleFormatter(fieldDef, config);\n  }\n};\n\nlet titleFormatter = defaultTitleFormatter;\n\nexport function setTitleFormatter(formatter: FieldTitleFormatter) {\n  titleFormatter = formatter;\n}\n\nexport function resetTitleFormatter() {\n  setTitleFormatter(defaultTitleFormatter);\n}\n\nexport function title(\n  fieldOrDatumDef: TypedFieldDef<string> | SecondaryFieldDef<string> | DatumDef,\n  config: Config,\n  {allowDisabling, includeDefault = true}: {allowDisabling: boolean; includeDefault?: boolean}\n) {\n  const guide = getGuide(fieldOrDatumDef) ?? {};\n  const guideTitle = guide.title;\n\n  if (!isFieldDef(fieldOrDatumDef)) {\n    return guideTitle;\n  }\n  const fieldDef = fieldOrDatumDef;\n\n  const def = includeDefault ? defaultTitle(fieldDef, config) : undefined;\n\n  if (allowDisabling) {\n    return getFirstDefined(guideTitle, fieldDef.title, def);\n  } else {\n    return guideTitle ?? fieldDef.title ?? def;\n  }\n}\n\nexport function getGuide(fieldDef: TypedFieldDef<string> | SecondaryFieldDef<string> | DatumDef): Guide {\n  if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis) {\n    return fieldDef.axis;\n  } else if (isMarkPropFieldOrDatumDef(fieldDef) && fieldDef.legend) {\n    return fieldDef.legend;\n  } else if (isFacetFieldDef(fieldDef) && fieldDef.header) {\n    return fieldDef.header;\n  }\n  return undefined;\n}\n\nexport function defaultTitle(fieldDef: FieldDefBase<string>, config: Config) {\n  return titleFormatter(fieldDef, config);\n}\n\nexport function getFormatMixins(fieldDef: TypedFieldDef<string> | DatumDef) {\n  if (isTextFieldOrDatumDef(fieldDef)) {\n    const {format, formatType} = fieldDef;\n    return {format, formatType};\n  } else {\n    const guide = getGuide(fieldDef) ?? {};\n    const {format, formatType} = guide;\n    return {format, formatType};\n  }\n}\n\nexport function defaultType(fieldDef: TypedFieldDef<Field>, channel: Channel): Type {\n  if (fieldDef.timeUnit) {\n    return 'temporal';\n  }\n  if (isBinning(fieldDef.bin)) {\n    return 'quantitative';\n  }\n  switch (rangeType(channel)) {\n    case 'continuous':\n      return 'quantitative';\n    case 'discrete':\n      return 'nominal';\n    case 'flexible': // color\n      return 'nominal';\n    default:\n      return 'quantitative';\n  }\n}\n\n/**\n * Returns the fieldDef -- either from the outer channelDef or from the condition of channelDef.\n * @param channelDef\n */\n\nexport function getFieldDef<F extends Field>(channelDef: ChannelDef<F>): FieldDef<F> {\n  if (isFieldDef(channelDef)) {\n    return channelDef;\n  } else if (hasConditionalFieldDef(channelDef)) {\n    return channelDef.condition;\n  }\n  return undefined;\n}\n\nexport function getFieldOrDatumDef<F extends Field = string, CD extends ChannelDef<F> = ChannelDef<F>>(\n  channelDef: CD\n): FieldDef<F> | DatumDef<F> {\n  if (isFieldOrDatumDef<F>(channelDef)) {\n    return channelDef;\n  } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n    return channelDef.condition;\n  }\n  return undefined;\n}\n\n/**\n * Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n */\nexport function initChannelDef(channelDef: ChannelDef<string>, channel: Channel, config: Config): ChannelDef<string> {\n  if (isString(channelDef) || isNumber(channelDef) || isBoolean(channelDef)) {\n    const primitiveType = isString(channelDef) ? 'string' : isNumber(channelDef) ? 'number' : 'boolean';\n    log.warn(log.message.primitiveChannelDef(channel, primitiveType, channelDef));\n    return {value: channelDef} as ValueDef<any>;\n  }\n\n  // If a fieldDef contains a field, we need type.\n  if (isFieldOrDatumDef(channelDef)) {\n    return initFieldOrDatumDef(channelDef, channel, config);\n  } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n    return {\n      ...channelDef,\n      // Need to cast as normalizeFieldDef normally return FieldDef, but here we know that it is definitely Condition<FieldDef>\n      condition: initFieldOrDatumDef(channelDef.condition, channel, config) as Conditional<TypedFieldDef<string>>\n    };\n  }\n  return channelDef;\n}\n\nexport function initFieldOrDatumDef(\n  fd: FieldDef<string, any> | DatumDef,\n  channel: Channel,\n  config: Config\n): FieldDef<string, any> | DatumDef {\n  if (isTextFieldOrDatumDef(fd)) {\n    const {format, formatType, ...rest} = fd;\n    if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n      log.warn(log.message.customFormatTypeNotAllowed(channel));\n      return initFieldOrDatumDef(rest, channel, config);\n    }\n  } else {\n    const guideType = isPositionFieldOrDatumDef(fd)\n      ? 'axis'\n      : isMarkPropFieldOrDatumDef(fd)\n      ? 'legend'\n      : isFacetFieldDef(fd)\n      ? 'header'\n      : null;\n    if (guideType && fd[guideType]) {\n      const {format, formatType, ...newGuide} = fd[guideType];\n      if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n        log.warn(log.message.customFormatTypeNotAllowed(channel));\n        return initFieldOrDatumDef({...fd, [guideType]: newGuide}, channel, config);\n      }\n    }\n  }\n\n  if (isFieldDef(fd)) {\n    return initFieldDef(fd, channel);\n  }\n  return initDatumDef(fd);\n}\n\nfunction initDatumDef(datumDef: DatumDef): DatumDef {\n  let type = datumDef['type'];\n  if (type) {\n    return datumDef;\n  }\n  const {datum} = datumDef;\n  type = isNumber(datum) ? 'quantitative' : isString(datum) ? 'nominal' : isDateTime(datum) ? 'temporal' : undefined;\n\n  return {...datumDef, type};\n}\n\nexport function initFieldDef(fd: FieldDef<string, any>, channel: Channel) {\n  const {aggregate, timeUnit, bin, field} = fd;\n  const fieldDef = {...fd};\n\n  // Drop invalid aggregate\n  if (aggregate && !isAggregateOp(aggregate) && !isArgmaxDef(aggregate) && !isArgminDef(aggregate)) {\n    log.warn(log.message.invalidAggregate(aggregate));\n    delete fieldDef.aggregate;\n  }\n\n  // Normalize Time Unit\n  if (timeUnit) {\n    fieldDef.timeUnit = normalizeTimeUnit(timeUnit);\n  }\n\n  if (field) {\n    fieldDef.field = `${field}`;\n  }\n\n  // Normalize bin\n  if (isBinning(bin)) {\n    fieldDef.bin = normalizeBin(bin, channel);\n  }\n\n  if (isBinned(bin) && !isXorY(channel)) {\n    log.warn(`Channel ${channel} should not be used with \"binned\" bin.`);\n  }\n\n  // Normalize Type\n  if (isTypedFieldDef(fieldDef)) {\n    const {type} = fieldDef;\n    const fullType = getFullName(type);\n    if (type !== fullType) {\n      // convert short type to full type\n      fieldDef.type = fullType;\n    }\n    if (type !== 'quantitative') {\n      if (isCountingAggregateOp(aggregate)) {\n        log.warn(log.message.invalidFieldTypeForCountAggregate(type, aggregate));\n        fieldDef.type = 'quantitative';\n      }\n    }\n  } else if (!isSecondaryRangeChannel(channel)) {\n    // If type is empty / invalid, then augment with default type\n    const newType = defaultType(fieldDef as TypedFieldDef<any>, channel);\n    log.warn(log.message.missingFieldType(channel, newType));\n\n    fieldDef['type'] = newType;\n  }\n\n  if (isTypedFieldDef(fieldDef)) {\n    const {compatible, warning} = channelCompatibility(fieldDef, channel);\n    if (!compatible) {\n      log.warn(warning);\n    }\n  }\n\n  if (isSortableFieldDef(fieldDef) && isString(fieldDef.sort)) {\n    const {sort} = fieldDef;\n    if (isSortByChannel(sort)) {\n      return {\n        ...fieldDef,\n        sort: {encoding: sort}\n      };\n    }\n    const sub = sort.substr(1);\n    if (sort.charAt(0) === '-' && isSortByChannel(sub)) {\n      return {\n        ...fieldDef,\n        sort: {encoding: sub, order: 'descending'}\n      };\n    }\n  }\n\n  if (isFacetFieldDef(fieldDef)) {\n    const {header} = fieldDef;\n    const {orient, ...rest} = header;\n    if (orient) {\n      return {\n        ...fieldDef,\n        header: {\n          ...rest,\n          labelOrient: header.labelOrient || orient,\n          titleOrient: header.titleOrient || orient\n        }\n      };\n    }\n  }\n\n  return fieldDef;\n}\n\nexport function normalizeBin(bin: BinParams | boolean | 'binned', channel?: Channel) {\n  if (isBoolean(bin)) {\n    return {maxbins: autoMaxBins(channel)};\n  } else if (bin === 'binned') {\n    return {\n      binned: true\n    };\n  } else if (!bin.maxbins && !bin.step) {\n    return {...bin, maxbins: autoMaxBins(channel)};\n  } else {\n    return bin;\n  }\n}\n\nconst COMPATIBLE = {compatible: true};\nexport function channelCompatibility(\n  fieldDef: TypedFieldDef<Field>,\n  channel: Channel\n): {compatible: boolean; warning?: string} {\n  const type = fieldDef.type;\n\n  if (type === 'geojson' && channel !== 'shape') {\n    return {\n      compatible: false,\n      warning: `Channel ${channel} should not be used with a geojson data.`\n    };\n  }\n\n  switch (channel) {\n    case ROW:\n    case COLUMN:\n    case FACET:\n      if (isContinuous(fieldDef)) {\n        return {\n          compatible: false,\n          warning: log.message.facetChannelShouldBeDiscrete(channel)\n        };\n      }\n      return COMPATIBLE;\n\n    case X:\n    case Y:\n    case COLOR:\n    case FILL:\n    case STROKE:\n    case TEXT:\n    case DETAIL:\n    case KEY:\n    case TOOLTIP:\n    case HREF:\n    case URL:\n    case ANGLE:\n    case THETA:\n    case RADIUS:\n    case DESCRIPTION:\n      return COMPATIBLE;\n\n    case LONGITUDE:\n    case LONGITUDE2:\n    case LATITUDE:\n    case LATITUDE2:\n      if (type !== QUANTITATIVE) {\n        return {\n          compatible: false,\n          warning: `Channel ${channel} should be used with a quantitative field only, not ${fieldDef.type} field.`\n        };\n      }\n      return COMPATIBLE;\n\n    case OPACITY:\n    case FILLOPACITY:\n    case STROKEOPACITY:\n    case STROKEWIDTH:\n    case SIZE:\n    case THETA2:\n    case RADIUS2:\n    case X2:\n    case Y2:\n      if (type === 'nominal' && !fieldDef['sort']) {\n        return {\n          compatible: false,\n          warning: `Channel ${channel} should not be used with an unsorted discrete field.`\n        };\n      }\n      return COMPATIBLE;\n\n    case STROKEDASH:\n      if (!contains(['ordinal', 'nominal'], fieldDef.type)) {\n        return {\n          compatible: false,\n          warning: 'StrokeDash channel should be used with only discrete data.'\n        };\n      }\n      return COMPATIBLE;\n\n    case SHAPE:\n      if (!contains(['ordinal', 'nominal', 'geojson'], fieldDef.type)) {\n        return {\n          compatible: false,\n          warning: 'Shape channel should be used with only either discrete or geojson data.'\n        };\n      }\n      return COMPATIBLE;\n\n    case ORDER:\n      if (fieldDef.type === 'nominal' && !('sort' in fieldDef)) {\n        return {\n          compatible: false,\n          warning: `Channel order is inappropriate for nominal field, which has no inherent order.`\n        };\n      }\n      return COMPATIBLE;\n  }\n}\n\n/**\n * Check if the field def uses a time format or does not use any format but is temporal\n * (this does not cover field defs that are temporal but use a number format).\n */\nexport function isFieldOrDatumDefForTimeFormat(fieldOrDatumDef: FieldDef<string> | DatumDef): boolean {\n  const {formatType} = getFormatMixins(fieldOrDatumDef);\n  return formatType === 'time' || (!formatType && isTimeFieldDef(fieldOrDatumDef));\n}\n\n/**\n * Check if field def has type `temporal`. If you want to also cover field defs that use a time format, use `isTimeFormatFieldDef`.\n */\nexport function isTimeFieldDef(def: FieldDef<any> | DatumDef): boolean {\n  return def && (def['type'] === 'temporal' || (isFieldDef(def) && !!def.timeUnit));\n}\n\n/**\n * Getting a value associated with a fielddef.\n * Convert the value to Vega expression if applicable (for datetime object, or string if the field def is temporal or has timeUnit)\n */\nexport function valueExpr(\n  v: number | string | boolean | DateTime | SignalRef | number[],\n  {\n    timeUnit,\n    type,\n    wrapTime,\n    undefinedIfExprNotRequired\n  }: {\n    timeUnit: TimeUnit | TimeUnitParams;\n    type?: Type;\n    wrapTime?: boolean;\n    undefinedIfExprNotRequired?: boolean;\n  }\n): string {\n  const unit = timeUnit && normalizeTimeUnit(timeUnit)?.unit;\n  let isTime = unit || type === 'temporal';\n\n  let expr;\n  if (isSignalRef(v)) {\n    expr = v.signal;\n  } else if (isDateTime(v)) {\n    isTime = true;\n    expr = dateTimeToExpr(v);\n  } else if (isString(v) || isNumber(v)) {\n    if (isTime) {\n      expr = `datetime(${JSON.stringify(v)})`;\n\n      if (isLocalSingleTimeUnit(unit)) {\n        // for single timeUnit, we will use dateTimeToExpr to convert number/string to match the timeUnit\n        if ((isNumber(v) && v < 10000) || (isString(v) && isNaN(Date.parse(v)))) {\n          expr = dateTimeToExpr({[unit]: v});\n        }\n      }\n    }\n  }\n  if (expr) {\n    return wrapTime && isTime ? `time(${expr})` : expr;\n  }\n  // number or boolean or normal string\n  return undefinedIfExprNotRequired ? undefined : JSON.stringify(v);\n}\n\n/**\n * Standardize value array -- convert each value to Vega expression if applicable\n */\nexport function valueArray(\n  fieldOrDatumDef: TypedFieldDef<string> | DatumDef,\n  values: (number | string | boolean | DateTime)[]\n) {\n  const {type} = fieldOrDatumDef;\n  return values.map(v => {\n    const expr = valueExpr(v, {\n      timeUnit: isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.timeUnit : undefined,\n      type,\n      undefinedIfExprNotRequired: true\n    });\n    // return signal for the expression if we need an expression\n    if (expr !== undefined) {\n      return {signal: expr};\n    }\n    // otherwise just return the original value\n    return v;\n  });\n}\n\n/**\n * Checks whether a fieldDef for a particular channel requires a computed bin range.\n */\nexport function binRequiresRange(fieldDef: FieldDef<string>, channel: Channel): boolean {\n  if (!isBinning(fieldDef.bin)) {\n    console.warn('Only call this method for binned field defs.');\n    return false;\n  }\n\n  // We need the range only when the user explicitly forces a binned field to be use discrete scale. In this case, bin range is used in axis and legend labels.\n  // We could check whether the axis or legend exists (not disabled) but that seems overkill.\n  return isScaleChannel(channel) && contains(['ordinal', 'nominal'], (fieldDef as ScaleFieldDef<string>).type);\n}\n","import {BaseTitle, Text, TextEncodeEntry, TitleAnchor} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {MarkConfig} from './mark';\nimport {pick} from './util';\nimport {ExcludeMappedValueRef, ExcludeMappedValueRefButKeepSignal} from './vega.schema';\n\nexport type BaseTitleNoValueRefs = ExcludeMappedValueRefButKeepSignal<Omit<BaseTitle, 'align' | 'baseline'>> &\n  // Since some logic depends on align/baseline, Vega-Lite does NOT allow signal for them.\n  ExcludeMappedValueRef<Pick<BaseTitle, 'align' | 'baseline'>>;\n\nexport type TitleConfig = BaseTitleNoValueRefs;\n\nexport interface TitleBase extends BaseTitleNoValueRefs {\n  /**\n   * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n   *\n   * __Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n   * `\"start\"` for other composite views.\n   *\n   * __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`.\n   */\n  anchor?: TitleAnchor;\n\n  /**\n   * A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n   *\n   * __Default value:__ `\"group-title\"`.\n   */\n  style?: string | string[];\n\n  /**\n   * \tThe integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n   *\n   * __Default value:__ `0`.\n   *\n   * @TJS-type integer\n   * @minimum 0\n   */\n  zindex?: number;\n\n  /**\n   * Mark definitions for custom encoding.\n   *\n   * @hidden\n   */\n  encoding?: TextEncodeEntry;\n}\n\nexport interface TitleParams extends TitleBase {\n  /**\n   * The title text.\n   */\n  text: Text;\n\n  /**\n   * The subtitle Text.\n   */\n  subtitle?: Text;\n}\n\nexport function extractTitleConfig(\n  titleConfig: TitleConfig\n): {\n  titleMarkConfig: MarkConfig;\n  subtitleMarkConfig: MarkConfig;\n  nonMark: BaseTitleNoValueRefs;\n  subtitle: BaseTitleNoValueRefs;\n} {\n  const {\n    // These are non-mark title config that need to be hardcoded\n    anchor,\n    frame,\n    offset,\n    orient,\n\n    // color needs to be redirect to fill\n    color,\n\n    // subtitle properties\n    subtitleColor,\n    subtitleFont,\n    subtitleFontSize,\n    subtitleFontStyle,\n    subtitleFontWeight,\n    subtitleLineHeight,\n    subtitlePadding,\n\n    // The rest are mark config.\n    ...rest\n  } = titleConfig;\n\n  const titleMarkConfig: MarkConfig = {\n    ...rest,\n    ...(color ? {fill: color} : {})\n  };\n\n  // These are non-mark title config that need to be hardcoded\n  const nonMark: BaseTitleNoValueRefs = {\n    ...(anchor ? {anchor} : {}),\n    ...(frame ? {frame} : {}),\n    ...(offset ? {offset} : {}),\n    ...(orient ? {orient} : {})\n  };\n\n  // subtitle part can stay in config.title since header titles do not use subtitle\n  const subtitle: BaseTitleNoValueRefs = {\n    ...(subtitleColor ? {subtitleColor} : {}),\n    ...(subtitleFont ? {subtitleFont} : {}),\n    ...(subtitleFontSize ? {subtitleFontSize} : {}),\n    ...(subtitleFontStyle ? {subtitleFontStyle} : {}),\n    ...(subtitleFontWeight ? {subtitleFontWeight} : {}),\n    ...(subtitleLineHeight ? {subtitleLineHeight} : {}),\n    ...(subtitlePadding ? {subtitlePadding} : {})\n  };\n\n  const subtitleMarkConfig = pick(titleMarkConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);\n\n  return {titleMarkConfig, subtitleMarkConfig, nonMark, subtitle};\n}\n\nexport function isText(v: any): v is Text {\n  return isString(v) || (isArray(v) && isString(v[0]));\n}\n","import {SignalRef, Text} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {AxisConfig} from '../axis';\nimport {FieldDefBase, FieldRefOption, OrderFieldDef, vgField} from '../channeldef';\nimport {Config, StyleConfigIndex} from '../config';\nimport {MarkConfig, MarkDef} from '../mark';\nimport {SortFields} from '../sort';\nimport {isText} from '../title';\nimport {deepEqual, getFirstDefined} from '../util';\nimport {isSignalRef, VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../vega.schema';\nimport {AxisComponentProps} from './axis/component';\nimport {Explicit} from './split';\nimport {UnitModel} from './unit';\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function signalOrValueRef<T>(value: T | SignalRef): {value: T} | SignalRef {\n  if (isSignalRef(value)) {\n    return value;\n  }\n  return value !== undefined ? {value} : undefined;\n}\n\nexport function exprFromValueOrSignalRef(ref: VgValueRef | SignalRef): string {\n  if (isSignalRef(ref)) {\n    return ref.signal;\n  }\n  return stringValue(ref.value);\n}\n\nexport function signalOrStringValue(v: SignalRef | any) {\n  if (isSignalRef(v)) {\n    return v.signal;\n  }\n  return v == null ? null : stringValue(v);\n}\n\nexport function applyMarkConfig(e: VgEncodeEntry, model: UnitModel, propsList: (keyof MarkConfig)[]) {\n  for (const property of propsList) {\n    const value = getMarkConfig(property, model.markDef, model.config);\n    if (value !== undefined) {\n      e[property] = signalOrValueRef(value);\n    }\n  }\n  return e;\n}\n\nexport function getStyles(mark: MarkDef): string[] {\n  return [].concat(mark.type, mark.style ?? []);\n}\n\nexport function getMarkPropOrConfig<P extends keyof MarkDef>(\n  channel: P,\n  mark: MarkDef,\n  config: Config,\n  opt: {\n    vgChannel?: VgEncodeChannel;\n    ignoreVgConfig?: boolean;\n  } = {}\n): MarkDef[P] {\n  const {vgChannel, ignoreVgConfig} = opt;\n  if (vgChannel && mark[vgChannel] !== undefined) {\n    return mark[vgChannel];\n  } else if (mark[channel] !== undefined) {\n    return mark[channel];\n  } else if (ignoreVgConfig && (!vgChannel || vgChannel === channel)) {\n    return undefined;\n  }\n\n  return getMarkConfig(channel, mark, config, opt);\n}\n\n/**\n * Return property value from style or mark specific config property if exists.\n * Otherwise, return general mark specific config.\n */\nexport function getMarkConfig<P extends keyof MarkDef>(\n  channel: P,\n  mark: MarkDef,\n  config: Config,\n  {vgChannel}: {vgChannel?: VgEncodeChannel} = {}\n): MarkDef[P] {\n  return getFirstDefined<MarkDef[P]>(\n    // style config has highest precedence\n    vgChannel ? getMarkStyleConfig(channel, mark, config.style) : undefined,\n    getMarkStyleConfig(channel, mark, config.style),\n    // then mark-specific config\n    vgChannel ? config[mark.type][vgChannel] : undefined,\n\n    config[mark.type][channel as any], // Need to cast because MarkDef doesn't perfectly match with AnyMarkConfig, but if the type isn't available, we'll get nothing here, which is fine\n\n    // If there is vgChannel, skip vl channel.\n    // For example, vl size for text is vg fontSize, but config.mark.size is only for point size.\n    vgChannel ? config.mark[vgChannel] : config.mark[channel as any] // Need to cast for the same reason as above\n  );\n}\n\nexport function getMarkStyleConfig<P extends keyof MarkDef>(\n  prop: P,\n  mark: MarkDef,\n  styleConfigIndex: StyleConfigIndex\n) {\n  return getStyleConfig(prop, getStyles(mark), styleConfigIndex);\n}\n\nexport function getStyleConfig<P extends keyof MarkDef | keyof AxisConfig>(\n  p: P,\n  styles: string | string[],\n  styleConfigIndex: StyleConfigIndex\n) {\n  styles = array(styles);\n  let value;\n  for (const style of styles) {\n    const styleConfig = styleConfigIndex[style];\n\n    if (styleConfig && styleConfig[p as string] !== undefined) {\n      value = styleConfig[p as string];\n    }\n  }\n  return value;\n}\n\n/**\n * Return Vega sort parameters (tuple of field and order).\n */\nexport function sortParams(\n  orderDef: OrderFieldDef<string> | OrderFieldDef<string>[],\n  fieldRefOption?: FieldRefOption\n): SortFields {\n  return array(orderDef).reduce(\n    (s, orderChannelDef) => {\n      s.field.push(vgField(orderChannelDef, fieldRefOption));\n      s.order.push(orderChannelDef.sort ?? 'ascending');\n      return s;\n    },\n    {field: [], order: []}\n  );\n}\n\nexport type AxisTitleComponent = AxisComponentProps['title'];\n\nexport function mergeTitleFieldDefs(f1: readonly FieldDefBase<string>[], f2: readonly FieldDefBase<string>[]) {\n  const merged = [...f1];\n\n  f2.forEach(fdToMerge => {\n    for (const fieldDef1 of merged) {\n      // If already exists, no need to append to merged array\n      if (deepEqual(fieldDef1, fdToMerge)) {\n        return;\n      }\n    }\n    merged.push(fdToMerge);\n  });\n  return merged;\n}\n\nexport function mergeTitle(title1: Text | SignalRef, title2: Text | SignalRef) {\n  if (deepEqual(title1, title2) || !title2) {\n    // if titles are the same or title2 is falsy\n    return title1;\n  } else if (!title1) {\n    // if title1 is falsy\n    return title2;\n  } else {\n    return [...array(title1), ...array(title2)].join(', ');\n  }\n}\n\nexport function mergeTitleComponent(v1: Explicit<AxisTitleComponent>, v2: Explicit<AxisTitleComponent>) {\n  const v1Val = v1.value;\n  const v2Val = v2.value;\n\n  if (v1Val == null || v2Val === null) {\n    return {\n      explicit: v1.explicit,\n      value: null\n    };\n  } else if ((isText(v1Val) || isSignalRef(v1Val)) && (isText(v2Val) || isSignalRef(v2Val))) {\n    return {\n      explicit: v1.explicit,\n      value: mergeTitle(v1Val, v2Val)\n    };\n  } else if (isText(v1Val) || isSignalRef(v1Val)) {\n    return {\n      explicit: v1.explicit,\n      value: v1Val\n    };\n  } else if (isText(v2Val) || isSignalRef(v2Val)) {\n    return {\n      explicit: v1.explicit,\n      value: v2Val\n    };\n  } else if (!isText(v1Val) && !isSignalRef(v1Val) && !isText(v2Val) && !isSignalRef(v2Val)) {\n    return {\n      explicit: v1.explicit,\n      value: mergeTitleFieldDefs(v1Val, v2Val)\n    };\n  }\n  /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n  throw new Error('It should never reach here');\n}\n","import {AggregateOp} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {isArgmaxDef, isArgminDef} from './aggregate';\nimport {isBinned, isBinning} from './bin';\nimport {\n  ANGLE,\n  Channel,\n  CHANNELS,\n  COLOR,\n  DESCRIPTION,\n  DETAIL,\n  FILL,\n  FILLOPACITY,\n  HREF,\n  isChannel,\n  isNonPositionScaleChannel,\n  isSecondaryRangeChannel,\n  isXorY,\n  KEY,\n  LATITUDE,\n  LATITUDE2,\n  LONGITUDE,\n  LONGITUDE2,\n  OPACITY,\n  ORDER,\n  RADIUS,\n  RADIUS2,\n  SHAPE,\n  SIZE,\n  STROKE,\n  STROKEDASH,\n  STROKEOPACITY,\n  STROKEWIDTH,\n  supportMark,\n  TEXT,\n  THETA,\n  THETA2,\n  TOOLTIP,\n  URL,\n  X,\n  X2,\n  Y,\n  Y2\n} from './channel';\nimport {\n  binRequiresRange,\n  ChannelDef,\n  ColorGradientDatumDefWithCondition,\n  ColorGradientFieldDefWithCondition,\n  ColorGradientValueDefWithCondition,\n  DatumDef,\n  Field,\n  FieldDef,\n  FieldDefWithoutScale,\n  getFieldDef,\n  getGuide,\n  hasConditionalFieldDef,\n  initChannelDef,\n  initFieldDef,\n  isConditionalDef,\n  isDatumDef,\n  isFieldDef,\n  isTypedFieldDef,\n  isValueDef,\n  LatLongFieldDef,\n  NumericArrayDatumDefWithCondition,\n  NumericArrayFieldDefWithCondition,\n  NumericArrayValueDefWithCondition,\n  NumericDatumDefWithCondition,\n  NumericFieldDefWithCondition,\n  NumericValueDef,\n  NumericValueDefWithCondition,\n  OrderFieldDef,\n  PolarDatumDef,\n  PolarFieldDef,\n  PositionDatumDef,\n  PositionFieldDef,\n  SecondaryFieldDef,\n  ShapeFieldDefWithCondition,\n  ShapeValueDefWithCondition,\n  StringDatumDefWithCondition,\n  StringFieldDef,\n  StringFieldDefWithCondition,\n  StringValueDefWithCondition,\n  TextDatumDefWithCondition,\n  TextFieldDefWithCondition,\n  TextValueDefWithCondition,\n  title,\n  TypedFieldDef,\n  vgField,\n  XValueDef,\n  YValueDef\n} from './channeldef';\nimport {Config} from './config';\nimport * as log from './log';\nimport {Mark, MarkDef} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {AggregatedFieldDef, BinTransform, TimeUnitTransform} from './transform';\nimport {QUANTITATIVE, TEMPORAL} from './type';\nimport {keys, some} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport interface Encoding<F extends Field> {\n  /**\n   * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n   *\n   * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n   */\n  x?: PositionFieldDef<F> | PositionDatumDef<F> | XValueDef;\n\n  /**\n   * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n   *\n   * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n   */\n  y?: PositionFieldDef<F> | PositionDatumDef<F> | YValueDef;\n\n  /**\n   * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   *\n   * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n   */\n  // TODO: Ham need to add default behavior\n  // `x2` cannot have type as it should have the same type as `x`\n  x2?: SecondaryFieldDef<F> | DatumDef<F> | XValueDef;\n\n  /**\n   * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   *\n   * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n   */\n  // TODO: Ham need to add default behavior\n  // `y2` cannot have type as it should have the same type as `y`\n  y2?: SecondaryFieldDef<F> | DatumDef<F> | YValueDef;\n\n  /**\n   * Longitude position of geographically projected marks.\n   */\n  longitude?: LatLongFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * Latitude position of geographically projected marks.\n   */\n  latitude?: LatLongFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n   *\n   * - For text marks, polar coordinate angle in radians.\n   */\n  theta?: PolarFieldDef<F> | PolarDatumDef<F> | NumericValueDef;\n\n  /**\n   * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n   */\n  theta2?: SecondaryFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * The outer radius in pixels of arc marks.\n   */\n\n  radius?: PolarFieldDef<F> | PolarDatumDef<F> | NumericValueDef;\n\n  /**\n   * The inner radius in pixels of arc marks.\n   */\n  radius2?: SecondaryFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   */\n  // `longitude2` cannot have type as it should have the same type as `longitude`\n  longitude2?: SecondaryFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n   */\n  // `latitude2` cannot have type as it should have the same type as `latitude`\n  latitude2?: SecondaryFieldDef<F> | DatumDef<F> | NumericValueDef;\n\n  /**\n   * Color of the marks – either fill or stroke color based on  the `filled` property of mark definition.\n   * By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n   * `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n   *\n   * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n   *\n   * _Note:_\n   * 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n   * 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme).\n   */\n  color?:\n    | ColorGradientFieldDefWithCondition<F>\n    | ColorGradientDatumDefWithCondition<F>\n    | ColorGradientValueDefWithCondition<F>;\n\n  /**\n   * Fill color of the marks.\n   * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n   *\n   * _Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n   */\n  fill?:\n    | ColorGradientFieldDefWithCondition<F>\n    | ColorGradientDatumDefWithCondition<F>\n    | ColorGradientValueDefWithCondition<F>;\n\n  /**\n   * Stroke color of the marks.\n   * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n   *\n   * _Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n   */\n\n  stroke?:\n    | ColorGradientFieldDefWithCondition<F>\n    | ColorGradientDatumDefWithCondition<F>\n    | ColorGradientValueDefWithCondition<F>;\n\n  /**\n   * Opacity of the marks.\n   *\n   * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property.\n   */\n  opacity?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Fill opacity of the marks.\n   *\n   * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property.\n   */\n  fillOpacity?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Stroke opacity of the marks.\n   *\n   * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property.\n   */\n  strokeOpacity?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Stroke width of the marks.\n   *\n   * __Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property.\n   */\n  strokeWidth?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Stroke dash of the marks.\n   *\n   * __Default value:__ `[1,0]` (No dash).\n   */\n  strokeDash?:\n    | NumericArrayFieldDefWithCondition<F>\n    | NumericArrayDatumDefWithCondition<F>\n    | NumericArrayValueDefWithCondition<F>;\n\n  /**\n   * Size of the mark.\n   * - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n   * - For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n   * - For `\"text\"` – the text's font size.\n   * - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)\n   */\n  size?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Rotation angle of point and text marks.\n   */\n  angle?: NumericFieldDefWithCondition<F> | NumericDatumDefWithCondition<F> | NumericValueDefWithCondition<F>;\n\n  /**\n   * Shape of the mark.\n   *\n   * 1. For `point` marks the supported values include:\n   *   - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n   *   - the line symbol `\"stroke\"`\n   *   - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n   *   - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n   *\n   * 2. For `geoshape` marks it should be a field definition of the geojson data\n   *\n   * __Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)\n   */\n  shape?: ShapeFieldDefWithCondition<F> | StringDatumDefWithCondition<F> | ShapeValueDefWithCondition<F>;\n  /**\n   * Additional levels of detail for grouping data in aggregate views and\n   * in line, trail, and area marks without mapping data to a specific visual channel.\n   */\n  detail?: FieldDefWithoutScale<F> | FieldDefWithoutScale<F>[];\n\n  /**\n   * A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data.\n   */\n  key?: FieldDefWithoutScale<F>;\n\n  /**\n   * Text of the `text` mark.\n   */\n  text?: TextFieldDefWithCondition<F> | TextDatumDefWithCondition<F> | TextValueDefWithCondition<F>;\n\n  /**\n   * The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n   *\n   * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n   */\n  tooltip?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F> | StringFieldDef<F>[] | null;\n\n  /**\n   * A URL to load upon mouse click.\n   */\n  href?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n  /**\n   * The URL of an image mark.\n   */\n  url?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n  /**\n   * A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description.\n   */\n  description?: StringFieldDefWithCondition<F> | StringValueDefWithCondition<F>;\n\n  /**\n   * Order of the marks.\n   * - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n   * - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n   * - Otherwise, this `order` channel encodes layer order of the marks.\n   *\n   * __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping.\n   */\n  order?: OrderFieldDef<F> | OrderFieldDef<F>[] | NumericValueDef;\n}\n\nexport interface EncodingWithFacet<F extends Field> extends Encoding<F>, EncodingFacetMapping<F> {}\n\nexport function channelHasField<F extends Field>(encoding: EncodingWithFacet<F>, channel: Channel): boolean {\n  const channelDef = encoding && encoding[channel];\n  if (channelDef) {\n    if (isArray(channelDef)) {\n      return some(channelDef, fieldDef => !!fieldDef.field);\n    } else {\n      return isFieldDef(channelDef) || hasConditionalFieldDef<Field>(channelDef);\n    }\n  }\n  return false;\n}\n\nexport function isAggregate(encoding: EncodingWithFacet<any>) {\n  return some(CHANNELS, channel => {\n    if (channelHasField(encoding, channel)) {\n      const channelDef = encoding[channel];\n      if (isArray(channelDef)) {\n        return some(channelDef, fieldDef => !!fieldDef.aggregate);\n      } else {\n        const fieldDef = getFieldDef(channelDef);\n        return fieldDef && !!fieldDef.aggregate;\n      }\n    }\n    return false;\n  });\n}\n\nexport function extractTransformsFromEncoding(oldEncoding: Encoding<any>, config: Config) {\n  const groupby: string[] = [];\n  const bins: BinTransform[] = [];\n  const timeUnits: TimeUnitTransform[] = [];\n  const aggregate: AggregatedFieldDef[] = [];\n  const encoding: Encoding<string> = {};\n\n  forEach(oldEncoding, (channelDef, channel) => {\n    // Extract potential embedded transformations along with remaining properties\n    if (isFieldDef(channelDef)) {\n      const {field, aggregate: aggOp, bin, timeUnit, ...remaining} = channelDef;\n      if (aggOp || timeUnit || bin) {\n        const guide = getGuide(channelDef);\n        const isTitleDefined = guide && guide.title;\n        let newField = vgField(channelDef, {forAs: true});\n        const newFieldDef: FieldDef<string> = {\n          // Only add title if it doesn't exist\n          ...(isTitleDefined ? [] : {title: title(channelDef, config, {allowDisabling: true})}),\n          ...remaining,\n          // Always overwrite field\n          field: newField\n        };\n\n        if (aggOp) {\n          let op: AggregateOp;\n\n          if (isArgmaxDef(aggOp)) {\n            op = 'argmax';\n            newField = vgField({op: 'argmax', field: aggOp.argmax}, {forAs: true});\n            newFieldDef.field = `${newField}.${field}`;\n          } else if (isArgminDef(aggOp)) {\n            op = 'argmin';\n            newField = vgField({op: 'argmin', field: aggOp.argmin}, {forAs: true});\n            newFieldDef.field = `${newField}.${field}`;\n          } else if (aggOp !== 'boxplot' && aggOp !== 'errorbar' && aggOp !== 'errorband') {\n            op = aggOp;\n          }\n\n          if (op) {\n            const aggregateEntry: AggregatedFieldDef = {\n              op,\n              as: newField\n            };\n            if (field) {\n              aggregateEntry.field = field;\n            }\n            aggregate.push(aggregateEntry);\n          }\n        } else {\n          groupby.push(newField);\n          if (isTypedFieldDef(channelDef) && isBinning(bin)) {\n            bins.push({bin, field, as: newField});\n            // Add additional groupbys for range and end of bins\n            groupby.push(vgField(channelDef, {binSuffix: 'end'}));\n            if (binRequiresRange(channelDef, channel)) {\n              groupby.push(vgField(channelDef, {binSuffix: 'range'}));\n            }\n            // Create accompanying 'x2' or 'y2' field if channel is 'x' or 'y' respectively\n            if (isXorY(channel)) {\n              const secondaryChannel: SecondaryFieldDef<string> = {\n                field: newField + '_end'\n              };\n              encoding[channel + '2'] = secondaryChannel;\n            }\n            newFieldDef.bin = 'binned';\n            if (!isSecondaryRangeChannel(channel)) {\n              newFieldDef['type'] = QUANTITATIVE;\n            }\n          } else if (timeUnit) {\n            timeUnits.push({\n              timeUnit,\n              field,\n              as: newField\n            });\n\n            // define the format type for later compilation\n            const formatType = isTypedFieldDef(channelDef) && channelDef.type !== TEMPORAL && 'time';\n            if (formatType) {\n              if (channel === TEXT || channel === TOOLTIP) {\n                newFieldDef['formatType'] = formatType;\n              } else if (isNonPositionScaleChannel(channel)) {\n                newFieldDef['legend'] = {\n                  formatType,\n                  ...newFieldDef['legend']\n                };\n              } else if (isXorY(channel)) {\n                newFieldDef['axis'] = {\n                  formatType,\n                  ...newFieldDef['axis']\n                };\n              }\n            }\n          }\n        }\n        // now the field should refer to post-transformed field instead\n        encoding[channel] = newFieldDef;\n      } else {\n        groupby.push(field);\n        encoding[channel] = oldEncoding[channel];\n      }\n    } else {\n      // For value def / signal ref / datum def, just copy\n      encoding[channel] = oldEncoding[channel];\n    }\n  });\n\n  return {\n    bins,\n    timeUnits,\n    aggregate,\n    groupby,\n    encoding\n  };\n}\n\nexport function markChannelCompatible(encoding: Encoding<string>, channel: Channel, mark: Mark) {\n  const markSupported = supportMark(channel, mark);\n  if (!markSupported) {\n    return false;\n  } else if (markSupported === 'binned') {\n    const primaryFieldDef = encoding[channel === X2 ? X : Y];\n\n    // circle, point, square and tick only support x2/y2 when their corresponding x/y fieldDef\n    // has \"binned\" data and thus need x2/y2 to specify the bin-end field.\n    if (isFieldDef(primaryFieldDef) && isFieldDef(encoding[channel]) && isBinned(primaryFieldDef.bin)) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function initEncoding(encoding: Encoding<string>, markDef: MarkDef, config: Config): Encoding<string> {\n  const mark = markDef.type;\n\n  return keys(encoding).reduce((normalizedEncoding: Encoding<string>, channel: Channel) => {\n    if (!isChannel(channel)) {\n      // Drop invalid channel\n      log.warn(log.message.invalidEncodingChannel(channel));\n      return normalizedEncoding;\n    }\n\n    const channelDef = encoding[channel];\n    if (channel === 'angle' && mark === 'arc' && !encoding.theta) {\n      log.warn(log.message.REPLACE_ANGLE_WITH_THETA);\n      channel = THETA;\n    }\n\n    if (!markChannelCompatible(encoding, channel, mark)) {\n      // Drop unsupported channel\n      log.warn(log.message.incompatibleChannel(channel, mark));\n      return normalizedEncoding;\n    }\n\n    // Drop line's size if the field is aggregated.\n    if (channel === SIZE && mark === 'line') {\n      const fieldDef = getFieldDef(encoding[channel]);\n      if (fieldDef?.aggregate) {\n        log.warn(log.message.LINE_WITH_VARYING_SIZE);\n        return normalizedEncoding;\n      }\n    }\n\n    // Drop color if either fill or stroke is specified\n\n    if (channel === COLOR && (markDef.filled ? 'fill' in encoding : 'stroke' in encoding)) {\n      log.warn(log.message.droppingColor('encoding', {fill: 'fill' in encoding, stroke: 'stroke' in encoding}));\n      return normalizedEncoding;\n    }\n\n    if (\n      channel === DETAIL ||\n      (channel === ORDER && !isArray(channelDef) && !isValueDef(channelDef)) ||\n      (channel === TOOLTIP && isArray(channelDef))\n    ) {\n      if (channelDef) {\n        // Array of fieldDefs for detail channel (or production rule)\n        (normalizedEncoding[channel] as any) = array(channelDef).reduce(\n          (defs: FieldDef<string>[], fieldDef: FieldDef<string>) => {\n            if (!isFieldDef(fieldDef)) {\n              log.warn(log.message.emptyFieldDef(fieldDef, channel));\n            } else {\n              defs.push(initFieldDef(fieldDef, channel));\n            }\n            return defs;\n          },\n          []\n        );\n      }\n    } else {\n      if (channel === TOOLTIP && channelDef === null) {\n        // Preserve null so we can use it to disable tooltip\n        normalizedEncoding[channel] = null;\n      } else if (\n        !isFieldDef(channelDef) &&\n        !isDatumDef(channelDef) &&\n        !isValueDef(channelDef) &&\n        !isConditionalDef(channelDef) &&\n        !isSignalRef(channelDef)\n      ) {\n        log.warn(log.message.emptyFieldDef(channelDef, channel));\n        return normalizedEncoding;\n      }\n      normalizedEncoding[channel] = initChannelDef(channelDef as ChannelDef, channel, config);\n    }\n    return normalizedEncoding;\n  }, {});\n}\n\nexport function fieldDefs<F extends Field>(encoding: EncodingWithFacet<F>): FieldDef<F>[] {\n  const arr: FieldDef<F>[] = [];\n  for (const channel of keys(encoding)) {\n    if (channelHasField(encoding, channel)) {\n      const channelDef = encoding[channel];\n      const channelDefArray = array(channelDef);\n      for (const def of channelDefArray) {\n        if (isFieldDef(def)) {\n          arr.push(def);\n        } else if (hasConditionalFieldDef<F>(def)) {\n          arr.push(def.condition);\n        }\n      }\n    }\n  }\n  return arr;\n}\n\nexport function forEach<U extends Partial<Record<Channel, any>>>(\n  mapping: U,\n  f: (cd: ChannelDef, c: Channel) => void,\n  thisArg?: any\n) {\n  if (!mapping) {\n    return;\n  }\n\n  for (const channel of keys(mapping)) {\n    const el = mapping[channel];\n    if (isArray(el)) {\n      for (const channelDef of el) {\n        f.call(thisArg, channelDef, channel);\n      }\n    } else {\n      f.call(thisArg, el, channel);\n    }\n  }\n}\n\nexport function reduce<T, U extends Partial<Record<Channel, any>>>(\n  mapping: U,\n  f: (acc: any, fd: TypedFieldDef<string>, c: Channel) => U,\n  init: T,\n  thisArg?: any\n) {\n  if (!mapping) {\n    return init;\n  }\n\n  return keys(mapping).reduce((r, channel) => {\n    const map = mapping[channel];\n    if (isArray(map)) {\n      return map.reduce((r1: T, channelDef: ChannelDef) => {\n        return f.call(thisArg, r1, channelDef, channel);\n      }, r);\n    } else {\n      return f.call(thisArg, r, map, channel);\n    }\n  }, init);\n}\n\n/**\n * Returns list of path grouping fields for the given encoding\n */\nexport function pathGroupingFields(mark: Mark, encoding: Encoding<string>): string[] {\n  return keys(encoding).reduce((details, channel) => {\n    switch (channel) {\n      // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, aria label, cursor should not cause lines to group\n      case X:\n      case Y:\n      case HREF:\n      case DESCRIPTION:\n      case URL:\n      case X2:\n      case Y2:\n      case THETA:\n      case THETA2:\n      case RADIUS:\n      case RADIUS2:\n      // falls through\n\n      case LATITUDE:\n      case LONGITUDE:\n      case LATITUDE2:\n      case LONGITUDE2:\n      // TODO: case 'cursor':\n\n      // text, shape, shouldn't be a part of line/trail/area [falls through]\n      case TEXT:\n      case SHAPE:\n      case ANGLE:\n      // falls through\n\n      // tooltip fields should not be added to group by [falls through]\n      case TOOLTIP:\n        return details;\n\n      case ORDER:\n        // order should not group line / trail\n        if (mark === 'line' || mark === 'trail') {\n          return details;\n        }\n      // but order should group area for stacking (falls through)\n\n      case DETAIL:\n      case KEY: {\n        const channelDef = encoding[channel];\n        if (isArray(channelDef) || isFieldDef(channelDef)) {\n          for (const fieldDef of array(channelDef)) {\n            if (!fieldDef.aggregate) {\n              details.push(vgField(fieldDef, {}));\n            }\n          }\n        }\n        return details;\n      }\n\n      case SIZE:\n        if (mark === 'trail') {\n          // For trail, size should not group trail lines.\n          return details;\n        }\n      // For line, size should group lines.\n\n      // falls through\n      case COLOR:\n      case FILL:\n      case STROKE:\n      case OPACITY:\n      case FILLOPACITY:\n      case STROKEOPACITY:\n      case STROKEDASH:\n      case STROKEWIDTH: {\n        // TODO strokeDashOffset:\n        // falls through\n\n        const fieldDef = getFieldDef<string>(encoding[channel]);\n        if (fieldDef && !fieldDef.aggregate) {\n          details.push(vgField(fieldDef, {}));\n        }\n        return details;\n      }\n    }\n  }, []);\n}\n","import {Orientation, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isString} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from '.';\nimport {\n  Field,\n  FieldDefBase,\n  isContinuousFieldOrDatumDef,\n  isFieldDef,\n  PositionFieldDef,\n  SecondaryFieldDef,\n  StringFieldDef,\n  StringFieldDefWithCondition,\n  StringValueDefWithCondition\n} from '../channeldef';\nimport {Encoding, fieldDefs} from '../encoding';\nimport * as log from '../log';\nimport {ColorMixins, GenericMarkDef, isMarkDef, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {getFirstDefined} from '../util';\nimport {isSignalRef} from '../vega.schema';\n\nexport type PartsMixins<P extends string> = Partial<Record<P, boolean | MarkConfig>>;\n\nexport type GenericCompositeMarkDef<T> = GenericMarkDef<T> &\n  ColorMixins & {\n    /**\n     * The opacity (value between [0,1]) of the mark.\n     */\n    opacity?: number;\n\n    /**\n     * Whether a composite mark be clipped to the enclosing group’s width and height.\n     */\n    clip?: boolean;\n  };\n\nexport interface CompositeMarkTooltipSummary {\n  /**\n   * The prefix of the field to be shown in tooltip\n   */\n  fieldPrefix: string;\n\n  /**\n   * The title prefix to show, corresponding to the field with field prefix `fieldPrefix`\n   */\n  titlePrefix: Text | SignalRef;\n}\n\nexport function filterTooltipWithAggregatedField<F extends Field>(\n  oldEncoding: Encoding<F>\n): {\n  customTooltipWithoutAggregatedField?:\n    | StringFieldDefWithCondition<F>\n    | StringValueDefWithCondition<F>\n    | StringFieldDef<F>[];\n  filteredEncoding: Encoding<F>;\n} {\n  const {tooltip, ...filteredEncoding} = oldEncoding;\n  if (!tooltip) {\n    return {filteredEncoding: oldEncoding};\n  }\n\n  let customTooltipWithAggregatedField:\n    | StringFieldDefWithCondition<F>\n    | StringValueDefWithCondition<F>\n    | StringFieldDef<F>[];\n  let customTooltipWithoutAggregatedField:\n    | StringFieldDefWithCondition<F>\n    | StringValueDefWithCondition<F>\n    | StringFieldDef<F>[];\n\n  if (isArray(tooltip)) {\n    for (const t of tooltip) {\n      if (t.aggregate) {\n        if (!customTooltipWithAggregatedField) {\n          customTooltipWithAggregatedField = [];\n        }\n        (customTooltipWithAggregatedField as StringFieldDef<F>[]).push(t);\n      } else {\n        if (!customTooltipWithoutAggregatedField) {\n          customTooltipWithoutAggregatedField = [];\n        }\n        (customTooltipWithoutAggregatedField as StringFieldDef<F>[]).push(t);\n      }\n    }\n\n    if (customTooltipWithAggregatedField) {\n      (filteredEncoding as Encoding<F>).tooltip = customTooltipWithAggregatedField;\n    }\n  } else {\n    if (tooltip['aggregate']) {\n      (filteredEncoding as Encoding<F>).tooltip = tooltip;\n    } else {\n      customTooltipWithoutAggregatedField = tooltip;\n    }\n  }\n\n  if (isArray(customTooltipWithoutAggregatedField) && customTooltipWithoutAggregatedField.length === 1) {\n    customTooltipWithoutAggregatedField = customTooltipWithoutAggregatedField[0];\n  }\n  return {customTooltipWithoutAggregatedField, filteredEncoding};\n}\n\nexport function getCompositeMarkTooltip(\n  tooltipSummary: CompositeMarkTooltipSummary[],\n  continuousAxisChannelDef: PositionFieldDef<string>,\n  encodingWithoutContinuousAxis: Encoding<string>,\n  withFieldName = true\n): Encoding<string> {\n  if ('tooltip' in encodingWithoutContinuousAxis) {\n    return {tooltip: encodingWithoutContinuousAxis.tooltip};\n  }\n\n  const fiveSummaryTooltip: StringFieldDef<string>[] = tooltipSummary.map(\n    ({fieldPrefix, titlePrefix}): StringFieldDef<string> => {\n      const mainTitle = withFieldName ? ` of ${continuousAxisChannelDef.field}` : '';\n      return {\n        field: fieldPrefix + continuousAxisChannelDef.field,\n        type: continuousAxisChannelDef.type,\n        title: isSignalRef(titlePrefix) ? {signal: titlePrefix + `\"${escape(mainTitle)}\"`} : titlePrefix + mainTitle\n      };\n    }\n  );\n\n  return {\n    tooltip: [\n      ...fiveSummaryTooltip,\n      // need to cast because TextFieldDef supports fewer types of bin\n      ...(fieldDefs(encodingWithoutContinuousAxis) as StringFieldDef<string>[])\n    ]\n  };\n}\n\nexport function getTitle(continuousAxisChannelDef: PositionFieldDef<string>) {\n  const {axis, title, field} = continuousAxisChannelDef;\n  return axis && axis.title !== undefined ? undefined : getFirstDefined(title, field);\n}\n\nexport function makeCompositeAggregatePartFactory<P extends PartsMixins<any>>(\n  compositeMarkDef: GenericCompositeMarkDef<any> & P,\n  continuousAxis: 'x' | 'y',\n  continuousAxisChannelDef: PositionFieldDef<string>,\n  sharedEncoding: Encoding<string>,\n  compositeMarkConfig: P\n) {\n  const {scale, axis} = continuousAxisChannelDef;\n\n  return ({\n    partName,\n    mark,\n    positionPrefix,\n    endPositionPrefix = undefined,\n    aria,\n    extraEncoding = {}\n  }: {\n    partName: keyof P;\n    mark: Mark | MarkDef;\n    positionPrefix: string;\n    endPositionPrefix?: string;\n    aria?: boolean;\n    extraEncoding?: Encoding<string>;\n  }) => {\n    const title = getTitle(continuousAxisChannelDef);\n\n    return partLayerMixins<P>(compositeMarkDef, partName, compositeMarkConfig, aria, {\n      mark, // TODO better remove this method and just have mark as a parameter of the method\n      encoding: {\n        [continuousAxis]: {\n          field: positionPrefix + '_' + continuousAxisChannelDef.field,\n          type: continuousAxisChannelDef.type,\n          ...(title !== undefined ? {title} : {}),\n          ...(scale !== undefined ? {scale} : {}),\n          ...(axis !== undefined ? {axis} : {})\n        },\n        ...(isString(endPositionPrefix)\n          ? {\n              [continuousAxis + '2']: {\n                field: endPositionPrefix + '_' + continuousAxisChannelDef.field\n              }\n            }\n          : {}),\n        ...sharedEncoding,\n        ...extraEncoding\n      }\n    });\n  };\n}\n\nexport function partLayerMixins<P extends PartsMixins<any>>(\n  markDef: GenericCompositeMarkDef<any> & P,\n  part: keyof P,\n  compositeMarkConfig: P,\n  aria: boolean,\n  partBaseSpec: NormalizedUnitSpec\n): NormalizedUnitSpec[] {\n  const {clip, color, opacity} = markDef;\n\n  const mark = markDef.type;\n\n  if (markDef[part] || (markDef[part] === undefined && compositeMarkConfig[part])) {\n    return [\n      {\n        ...partBaseSpec,\n        mark: {\n          ...(compositeMarkConfig[part] as MarkConfig),\n          ...(clip ? {clip} : {}),\n          ...(color ? {color} : {}),\n          ...(opacity ? {opacity} : {}),\n          ...(isMarkDef(partBaseSpec.mark) ? partBaseSpec.mark : {type: partBaseSpec.mark}),\n          style: `${mark}-${part}`,\n          ...(isBoolean(markDef[part]) ? {} : (markDef[part] as MarkConfig)),\n          ...(aria === false ? {aria} : {})\n        }\n      }\n    ];\n  }\n  return [];\n}\n\nexport function compositeMarkContinuousAxis<M extends CompositeMark>(\n  spec: GenericUnitSpec<Encoding<string>, CompositeMark | CompositeMarkDef>,\n  orient: Orientation,\n  compositeMark: M\n): {\n  continuousAxisChannelDef: PositionFieldDef<string>;\n  continuousAxisChannelDef2: SecondaryFieldDef<string>;\n  continuousAxisChannelDefError: SecondaryFieldDef<string>;\n  continuousAxisChannelDefError2: SecondaryFieldDef<string>;\n  continuousAxis: 'x' | 'y';\n} {\n  const {encoding} = spec;\n  const continuousAxis: 'x' | 'y' = orient === 'vertical' ? 'y' : 'x';\n\n  const continuousAxisChannelDef = encoding[continuousAxis] as PositionFieldDef<string>; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n  const continuousAxisChannelDef2 = encoding[continuousAxis + '2'] as SecondaryFieldDef<string>;\n  const continuousAxisChannelDefError = encoding[continuousAxis + 'Error'] as SecondaryFieldDef<string>;\n  const continuousAxisChannelDefError2 = encoding[continuousAxis + 'Error2'] as SecondaryFieldDef<string>;\n\n  return {\n    continuousAxisChannelDef: filterAggregateFromChannelDef(continuousAxisChannelDef, compositeMark),\n    continuousAxisChannelDef2: filterAggregateFromChannelDef(continuousAxisChannelDef2, compositeMark),\n    continuousAxisChannelDefError: filterAggregateFromChannelDef(continuousAxisChannelDefError, compositeMark),\n    continuousAxisChannelDefError2: filterAggregateFromChannelDef(continuousAxisChannelDefError2, compositeMark),\n    continuousAxis\n  };\n}\n\nfunction filterAggregateFromChannelDef<M extends CompositeMark, F extends FieldDefBase<string>>(\n  continuousAxisChannelDef: F,\n  compositeMark: M\n): F {\n  if (continuousAxisChannelDef && continuousAxisChannelDef.aggregate) {\n    const {aggregate, ...continuousAxisWithoutAggregate} = continuousAxisChannelDef;\n    if (aggregate !== compositeMark) {\n      log.warn(log.message.errorBarContinuousAxisHasCustomizedAggregate(aggregate, compositeMark));\n    }\n    return continuousAxisWithoutAggregate as F;\n  } else {\n    return continuousAxisChannelDef;\n  }\n}\n\nexport function compositeMarkOrient<M extends CompositeMark>(\n  spec: GenericUnitSpec<Encoding<string>, CompositeMark | CompositeMarkDef>,\n  compositeMark: M\n): Orientation {\n  const {mark, encoding} = spec;\n  const {x, y} = encoding;\n\n  if (isContinuousFieldOrDatumDef(x)) {\n    // x is continuous\n    if (isContinuousFieldOrDatumDef(y)) {\n      // both x and y are continuous\n      const xAggregate = isFieldDef(x) && x.aggregate;\n      const yAggregate = isFieldDef(y) && y.aggregate;\n\n      if (!xAggregate && yAggregate === compositeMark) {\n        return 'vertical';\n      } else if (!yAggregate && xAggregate === compositeMark) {\n        return 'horizontal';\n      } else if (xAggregate === compositeMark && yAggregate === compositeMark) {\n        throw new Error('Both x and y cannot have aggregate');\n      } else {\n        if (isMarkDef(mark) && mark.orient) {\n          return mark.orient;\n        }\n\n        // default orientation = vertical\n        return 'vertical';\n      }\n    }\n\n    // x is continuous but y is not\n    return 'horizontal';\n  } else if (isContinuousFieldOrDatumDef(y)) {\n    // y is continuous but x is not\n    return 'vertical';\n  } else {\n    // Neither x nor y is continuous.\n    throw new Error('Need a valid continuous axis for ' + compositeMark + 's');\n  }\n}\n","import {Orientation} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {getMarkPropOrConfig} from '../compile/common';\nimport {Config} from '../config';\nimport {Encoding, extractTransformsFromEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec, NormalizedUnitSpec} from '../spec';\nimport {AggregatedFieldDef, CalculateTransform, JoinAggregateTransform, Transform} from '../transform';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n  compositeMarkContinuousAxis,\n  compositeMarkOrient,\n  filterTooltipWithAggregatedField,\n  GenericCompositeMarkDef,\n  getCompositeMarkTooltip,\n  getTitle,\n  makeCompositeAggregatePartFactory,\n  partLayerMixins,\n  PartsMixins\n} from './common';\n\nexport const BOXPLOT = 'boxplot' as const;\nexport type BoxPlot = typeof BOXPLOT;\n\nexport const BOXPLOT_PARTS = ['box', 'median', 'outliers', 'rule', 'ticks'] as const;\n\ntype BoxPlotPart = typeof BOXPLOT_PARTS[number];\n\nexport type BoxPlotPartsMixins = PartsMixins<BoxPlotPart>;\n\nexport interface BoxPlotConfig extends BoxPlotPartsMixins {\n  /** Size of the box and median tick of a box plot */\n  size?: number;\n\n  /**\n   * The extent of the whiskers. Available options include:\n   * - `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n   * - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n   *\n   * __Default value:__ `1.5`.\n   */\n  extent?: 'min-max' | number;\n}\n\nexport type BoxPlotDef = GenericCompositeMarkDef<BoxPlot> &\n  BoxPlotConfig & {\n    /**\n     * Type of the mark. For box plots, this should always be `\"boxplot\"`.\n     * [boxplot](https://vega.github.io/vega-lite/docs/boxplot.html)\n     */\n    type: BoxPlot;\n\n    /**\n     * Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n     *\n     * __Default value:__ `\"vertical\"`.\n     */\n    orient?: Orientation;\n  };\n\nexport interface BoxPlotConfigMixins {\n  /**\n   * Box Config\n   */\n  boxplot?: BoxPlotConfig;\n}\n\nexport const boxPlotNormalizer = new CompositeMarkNormalizer(BOXPLOT, normalizeBoxPlot);\n\nexport function getBoxPlotType(extent: number | 'min-max') {\n  if (isNumber(extent)) {\n    return 'tukey';\n  }\n  // Ham: If we ever want to, we could add another extent syntax `{kIQR: number}` for the original [Q1-k*IQR, Q3+k*IQR] whisker and call this boxPlotType = `kIQR`. However, I'm not exposing this for now.\n  return extent;\n}\n\nexport function normalizeBoxPlot(\n  spec: GenericUnitSpec<Encoding<string>, BoxPlot | BoxPlotDef>,\n  {config}: NormalizerParams\n): NormalizedLayerSpec {\n  // TODO: use selection\n  const {mark, encoding: _encoding, selection, projection: _p, ...outerSpec} = spec;\n  const markDef: BoxPlotDef = isMarkDef(mark) ? mark : {type: mark};\n\n  // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n  if (selection) {\n    log.warn(log.message.selectionNotSupported('boxplot'));\n  }\n\n  const extent = markDef.extent ?? config.boxplot.extent;\n  const sizeValue = getMarkPropOrConfig(\n    'size',\n    markDef as any, // TODO: https://github.com/vega/vega-lite/issues/6245\n    config\n  );\n\n  const boxPlotType = getBoxPlotType(extent);\n  const {\n    transform,\n    continuousAxisChannelDef,\n    continuousAxis,\n    groupby,\n    aggregate,\n    encodingWithoutContinuousAxis,\n    ticksOrient,\n    boxOrient,\n    customTooltipWithoutAggregatedField\n  } = boxParams(spec, extent, config);\n\n  const {color, size, ...encodingWithoutSizeColorAndContinuousAxis} = encodingWithoutContinuousAxis;\n\n  const makeBoxPlotPart = (sharedEncoding: Encoding<string>) => {\n    return makeCompositeAggregatePartFactory<BoxPlotPartsMixins>(\n      markDef,\n      continuousAxis,\n      continuousAxisChannelDef,\n      sharedEncoding,\n      config.boxplot\n    );\n  };\n\n  const makeBoxPlotExtent = makeBoxPlotPart(encodingWithoutSizeColorAndContinuousAxis);\n  const makeBoxPlotBox = makeBoxPlotPart(encodingWithoutContinuousAxis);\n  const makeBoxPlotMidTick = makeBoxPlotPart({...encodingWithoutSizeColorAndContinuousAxis, ...(size ? {size} : {})});\n\n  const fiveSummaryTooltipEncoding: Encoding<string> = getCompositeMarkTooltip(\n    [\n      {fieldPrefix: boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_', titlePrefix: 'Max'},\n      {fieldPrefix: 'upper_box_', titlePrefix: 'Q3'},\n      {fieldPrefix: 'mid_box_', titlePrefix: 'Median'},\n      {fieldPrefix: 'lower_box_', titlePrefix: 'Q1'},\n      {fieldPrefix: boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_', titlePrefix: 'Min'}\n    ],\n    continuousAxisChannelDef,\n    encodingWithoutContinuousAxis\n  );\n\n  // ## Whisker Layers\n\n  const endTick: MarkDef = {type: 'tick', color: 'black', opacity: 1, orient: ticksOrient, invalid: null};\n  const whiskerTooltipEncoding: Encoding<string> =\n    boxPlotType === 'min-max'\n      ? fiveSummaryTooltipEncoding // for min-max, show five-summary tooltip for whisker\n      : // for tukey / k-IQR, just show upper/lower-whisker\n        getCompositeMarkTooltip(\n          [\n            {fieldPrefix: 'upper_whisker_', titlePrefix: 'Upper Whisker'},\n            {fieldPrefix: 'lower_whisker_', titlePrefix: 'Lower Whisker'}\n          ],\n          continuousAxisChannelDef,\n          encodingWithoutContinuousAxis\n        );\n\n  const whiskerLayers = [\n    ...makeBoxPlotExtent({\n      partName: 'rule',\n      mark: {type: 'rule', invalid: null},\n      positionPrefix: 'lower_whisker',\n      endPositionPrefix: 'lower_box',\n      aria: false,\n      extraEncoding: whiskerTooltipEncoding\n    }),\n    ...makeBoxPlotExtent({\n      partName: 'rule',\n      mark: {type: 'rule', invalid: null},\n      positionPrefix: 'upper_box',\n      endPositionPrefix: 'upper_whisker',\n      aria: false,\n      extraEncoding: whiskerTooltipEncoding\n    }),\n    ...makeBoxPlotExtent({\n      partName: 'ticks',\n      mark: endTick,\n      positionPrefix: 'lower_whisker',\n      aria: false,\n      extraEncoding: whiskerTooltipEncoding\n    }),\n    ...makeBoxPlotExtent({\n      partName: 'ticks',\n      mark: endTick,\n      positionPrefix: 'upper_whisker',\n      aria: false,\n      extraEncoding: whiskerTooltipEncoding\n    })\n  ];\n\n  // ## Box Layers\n\n  // TODO: support hiding certain mark parts\n  const boxLayers: NormalizedUnitSpec[] = [\n    ...(boxPlotType !== 'tukey' ? whiskerLayers : []),\n    ...makeBoxPlotBox({\n      partName: 'box',\n      mark: {type: 'bar', ...(sizeValue ? {size: sizeValue} : {}), orient: boxOrient, invalid: null},\n      positionPrefix: 'lower_box',\n      endPositionPrefix: 'upper_box',\n      aria: false,\n      extraEncoding: fiveSummaryTooltipEncoding\n    }),\n    ...makeBoxPlotMidTick({\n      partName: 'median',\n      mark: {\n        type: 'tick',\n        invalid: null,\n        ...(isObject(config.boxplot.median) && config.boxplot.median.color ? {color: config.boxplot.median.color} : {}),\n        ...(sizeValue ? {size: sizeValue} : {}),\n        orient: ticksOrient,\n        ariaRoleDescription: 'box'\n      },\n      positionPrefix: 'mid_box',\n      extraEncoding: fiveSummaryTooltipEncoding\n    })\n  ];\n\n  // ## Filtered Layers\n\n  let filteredLayersMixins: NormalizedUnitSpec | NormalizedLayerSpec;\n\n  if (boxPlotType !== 'min-max') {\n    const lowerBoxExpr = `datum[\"lower_box_${continuousAxisChannelDef.field}\"]`;\n    const upperBoxExpr = `datum[\"upper_box_${continuousAxisChannelDef.field}\"]`;\n    const iqrExpr = `(${upperBoxExpr} - ${lowerBoxExpr})`;\n    const lowerWhiskerExpr = `${lowerBoxExpr} - ${extent} * ${iqrExpr}`;\n    const upperWhiskerExpr = `${upperBoxExpr} + ${extent} * ${iqrExpr}`;\n    const fieldExpr = `datum[\"${continuousAxisChannelDef.field}\"]`;\n\n    const joinaggregateTransform: JoinAggregateTransform = {\n      joinaggregate: boxParamsQuartiles(continuousAxisChannelDef.field),\n      groupby\n    };\n\n    let filteredWhiskerSpec: NormalizedLayerSpec = undefined;\n    if (boxPlotType === 'tukey') {\n      filteredWhiskerSpec = {\n        transform: [\n          {\n            filter: `(${lowerWhiskerExpr} <= ${fieldExpr}) && (${fieldExpr} <= ${upperWhiskerExpr})`\n          },\n          {\n            aggregate: [\n              {\n                op: 'min',\n                field: continuousAxisChannelDef.field,\n                as: 'lower_whisker_' + continuousAxisChannelDef.field\n              },\n              {\n                op: 'max',\n                field: continuousAxisChannelDef.field,\n                as: 'upper_whisker_' + continuousAxisChannelDef.field\n              },\n              // preserve lower_box / upper_box\n              {\n                op: 'min',\n                field: 'lower_box_' + continuousAxisChannelDef.field,\n                as: 'lower_box_' + continuousAxisChannelDef.field\n              },\n              {\n                op: 'max',\n                field: 'upper_box_' + continuousAxisChannelDef.field,\n                as: 'upper_box_' + continuousAxisChannelDef.field\n              },\n              ...aggregate\n            ],\n            groupby\n          }\n        ],\n        layer: whiskerLayers\n      };\n    }\n\n    const {tooltip, ...encodingWithoutSizeColorContinuousAxisAndTooltip} = encodingWithoutSizeColorAndContinuousAxis;\n\n    const {scale, axis} = continuousAxisChannelDef;\n    const title = getTitle(continuousAxisChannelDef);\n\n    const outlierLayersMixins = partLayerMixins<BoxPlotPartsMixins>(markDef, 'outliers', config.boxplot, true, {\n      transform: [{filter: `(${fieldExpr} < ${lowerWhiskerExpr}) || (${fieldExpr} > ${upperWhiskerExpr})`}],\n      mark: 'point',\n      encoding: {\n        [continuousAxis]: {\n          field: continuousAxisChannelDef.field,\n          type: continuousAxisChannelDef.type,\n          ...(title !== undefined ? {title} : {}),\n          ...(scale !== undefined ? {scale} : {}),\n          ...(axis !== undefined ? {axis} : {})\n        },\n        ...encodingWithoutSizeColorContinuousAxisAndTooltip,\n        ...(customTooltipWithoutAggregatedField ? {tooltip: customTooltipWithoutAggregatedField} : {})\n      }\n    })[0];\n\n    if (outlierLayersMixins && filteredWhiskerSpec) {\n      filteredLayersMixins = {\n        transform: [joinaggregateTransform],\n        layer: [outlierLayersMixins, filteredWhiskerSpec]\n      };\n    } else if (outlierLayersMixins) {\n      filteredLayersMixins = outlierLayersMixins;\n      filteredLayersMixins.transform.unshift(joinaggregateTransform);\n    } else if (filteredWhiskerSpec) {\n      filteredLayersMixins = filteredWhiskerSpec;\n      filteredLayersMixins.transform.unshift(joinaggregateTransform);\n    }\n  }\n\n  if (filteredLayersMixins) {\n    // tukey box plot with outliers included\n    return {\n      ...outerSpec,\n      layer: [\n        filteredLayersMixins,\n        {\n          // boxplot\n          transform,\n          layer: boxLayers\n        }\n      ]\n    };\n  }\n  return {\n    ...outerSpec,\n    transform: (outerSpec.transform ?? []).concat(transform),\n    layer: boxLayers\n  };\n}\n\nfunction boxParamsQuartiles(continousAxisField: string): AggregatedFieldDef[] {\n  return [\n    {\n      op: 'q1',\n      field: continousAxisField,\n      as: 'lower_box_' + continousAxisField\n    },\n    {\n      op: 'q3',\n      field: continousAxisField,\n      as: 'upper_box_' + continousAxisField\n    }\n  ];\n}\n\nfunction boxParams(\n  spec: GenericUnitSpec<Encoding<string>, BoxPlot | BoxPlotDef>,\n  extent: 'min-max' | number,\n  config: Config\n) {\n  const orient = compositeMarkOrient(spec, BOXPLOT);\n  const {continuousAxisChannelDef, continuousAxis} = compositeMarkContinuousAxis(spec, orient, BOXPLOT);\n  const continuousFieldName: string = continuousAxisChannelDef.field;\n\n  const boxPlotType = getBoxPlotType(extent);\n\n  const boxplotSpecificAggregate: AggregatedFieldDef[] = [\n    ...boxParamsQuartiles(continuousFieldName),\n    {\n      op: 'median',\n      field: continuousFieldName,\n      as: 'mid_box_' + continuousFieldName\n    },\n    {\n      op: 'min',\n      field: continuousFieldName,\n      as: (boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_') + continuousFieldName\n    },\n    {\n      op: 'max',\n      field: continuousFieldName,\n      as: (boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_') + continuousFieldName\n    }\n  ];\n\n  const postAggregateCalculates: CalculateTransform[] =\n    boxPlotType === 'min-max' || boxPlotType === 'tukey'\n      ? []\n      : [\n          // This is for the  original k-IQR, which we do not expose\n          {\n            calculate: `datum[\"upper_box_${continuousFieldName}\"] - datum[\"lower_box_${continuousFieldName}\"]`,\n            as: 'iqr_' + continuousFieldName\n          },\n          {\n            calculate: `min(datum[\"upper_box_${continuousFieldName}\"] + datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"max_${continuousFieldName}\"])`,\n            as: 'upper_whisker_' + continuousFieldName\n          },\n          {\n            calculate: `max(datum[\"lower_box_${continuousFieldName}\"] - datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"min_${continuousFieldName}\"])`,\n            as: 'lower_whisker_' + continuousFieldName\n          }\n        ];\n\n  const {[continuousAxis]: oldContinuousAxisChannelDef, ...oldEncodingWithoutContinuousAxis} = spec.encoding;\n  const {customTooltipWithoutAggregatedField, filteredEncoding} = filterTooltipWithAggregatedField(\n    oldEncodingWithoutContinuousAxis\n  );\n\n  const {bins, timeUnits, aggregate, groupby, encoding: encodingWithoutContinuousAxis} = extractTransformsFromEncoding(\n    filteredEncoding,\n    config\n  );\n\n  const ticksOrient: Orientation = orient === 'vertical' ? 'horizontal' : 'vertical';\n  const boxOrient: Orientation = orient;\n\n  const transform: Transform[] = [\n    ...bins,\n    ...timeUnits,\n    {\n      aggregate: [...aggregate, ...boxplotSpecificAggregate],\n      groupby\n    },\n    ...postAggregateCalculates\n  ];\n\n  return {\n    transform,\n    groupby,\n    aggregate,\n    continuousAxisChannelDef,\n    continuousAxis,\n    encodingWithoutContinuousAxis,\n    ticksOrient,\n    boxOrient,\n    customTooltipWithoutAggregatedField\n  };\n}\n","import {AggregateOp, Orientation, Text} from 'vega';\nimport {PositionChannel} from '../channel';\nimport {\n  Field,\n  isContinuousFieldOrDatumDef,\n  isFieldOrDatumDef,\n  PositionFieldDef,\n  SecondaryFieldDef,\n  title,\n  ValueDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {Data} from '../data';\nimport {Encoding, extractTransformsFromEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {Step} from '../spec/base';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {TitleParams} from '../title';\nimport {AggregatedFieldDef, CalculateTransform, Transform} from '../transform';\nimport {replaceAll, titleCase} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n  compositeMarkContinuousAxis,\n  compositeMarkOrient,\n  CompositeMarkTooltipSummary,\n  GenericCompositeMarkDef,\n  getCompositeMarkTooltip,\n  makeCompositeAggregatePartFactory,\n  PartsMixins\n} from './common';\nimport {ErrorBand, ErrorBandDef} from './errorband';\n\nexport const ERRORBAR = 'errorbar' as const;\nexport type ErrorBar = typeof ERRORBAR;\n\nexport type ErrorBarExtent = 'ci' | 'iqr' | 'stderr' | 'stdev';\nexport type ErrorBarCenter = 'mean' | 'median';\n\nexport type ErrorInputType = 'raw' | 'aggregated-upper-lower' | 'aggregated-error';\n\nexport const ERRORBAR_PARTS = ['ticks', 'rule'] as const;\n\nexport type ErrorBarPart = typeof ERRORBAR_PARTS[number];\n\nexport interface ErrorExtraEncoding<F extends Field> {\n  /**\n   * Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n   */\n  xError?: SecondaryFieldDef<F> | ValueDef<number>;\n\n  /**\n   * Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n   */\n  // `xError2` cannot have type as it should have the same type as `xError`\n  xError2?: SecondaryFieldDef<F> | ValueDef<number>;\n\n  /**\n   * Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n   */\n  yError?: SecondaryFieldDef<F> | ValueDef<number>;\n\n  /**\n   * Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n   */\n  // `yError2` cannot have type as it should have the same type as `yError`\n  yError2?: SecondaryFieldDef<F> | ValueDef<number>;\n}\n\nexport type ErrorEncoding<F extends Field> = Pick<Encoding<F>, PositionChannel | 'color' | 'detail' | 'opacity'> &\n  ErrorExtraEncoding<F>;\n\nexport type ErrorBarPartsMixins = PartsMixins<ErrorBarPart>;\n\nexport interface ErrorBarConfig extends ErrorBarPartsMixins {\n  /**\n   * The center of the errorbar. Available options include:\n   * - `\"mean\"`: the mean of the data points.\n   * - `\"median\"`: the median of the data points.\n   *\n   * __Default value:__ `\"mean\"`.\n   * @hidden\n   */\n\n  // center is not needed right now but will be added back to the schema if future features require it.\n  center?: ErrorBarCenter;\n\n  /**\n   * The extent of the rule. Available options include:\n   * - `\"ci\"`: Extend the rule to the confidence interval of the mean.\n   * - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n   * - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n   * - `\"iqr\"`: Extend the rule to the q1 and q3.\n   *\n   * __Default value:__ `\"stderr\"`.\n   */\n  extent?: ErrorBarExtent;\n}\n\nexport type ErrorBarDef = GenericCompositeMarkDef<ErrorBar> &\n  ErrorBarConfig & {\n    /**\n     * Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n     */\n    orient?: Orientation;\n  };\n\nexport interface ErrorBarConfigMixins {\n  /**\n   * ErrorBar Config\n   */\n  errorbar?: ErrorBarConfig;\n}\n\nexport const errorBarNormalizer = new CompositeMarkNormalizer(ERRORBAR, normalizeErrorBar);\n\nexport function normalizeErrorBar(\n  spec: GenericUnitSpec<ErrorEncoding<string>, ErrorBar | ErrorBarDef>,\n  {config}: NormalizerParams\n): NormalizedLayerSpec | NormalizedUnitSpec {\n  const {\n    transform,\n    continuousAxisChannelDef,\n    continuousAxis,\n    encodingWithoutContinuousAxis,\n    ticksOrient,\n    markDef,\n    outerSpec,\n    tooltipEncoding\n  } = errorBarParams(spec, ERRORBAR, config);\n\n  const makeErrorBarPart = makeCompositeAggregatePartFactory<ErrorBarPartsMixins>(\n    markDef,\n    continuousAxis,\n    continuousAxisChannelDef,\n    encodingWithoutContinuousAxis,\n    config.errorbar\n  );\n\n  const tick: MarkDef = {type: 'tick', orient: ticksOrient};\n\n  const layer = [\n    ...makeErrorBarPart({\n      partName: 'ticks',\n      mark: tick,\n      positionPrefix: 'lower',\n      aria: false,\n      extraEncoding: tooltipEncoding\n    }),\n    ...makeErrorBarPart({\n      partName: 'ticks',\n      mark: tick,\n      positionPrefix: 'upper',\n      aria: false,\n      extraEncoding: tooltipEncoding\n    }),\n    ...makeErrorBarPart({\n      partName: 'rule',\n      mark: {\n        type: 'rule',\n        ariaRoleDescription: 'errorbar'\n      },\n      positionPrefix: 'lower',\n      endPositionPrefix: 'upper',\n      extraEncoding: tooltipEncoding\n    })\n  ];\n\n  return {\n    ...outerSpec,\n    transform,\n    ...(layer.length > 1 ? {layer} : {...layer[0]})\n  };\n}\n\nfunction errorBarOrientAndInputType(\n  spec: GenericUnitSpec<ErrorEncoding<string>, ErrorBar | ErrorBand | ErrorBarDef | ErrorBandDef>,\n  compositeMark: ErrorBar | ErrorBand\n): {\n  orient: Orientation;\n  inputType: ErrorInputType;\n} {\n  const {encoding} = spec;\n\n  if (errorBarIsInputTypeRaw(encoding)) {\n    return {\n      orient: compositeMarkOrient(spec, compositeMark),\n      inputType: 'raw'\n    };\n  }\n\n  const isTypeAggregatedUpperLower: boolean = errorBarIsInputTypeAggregatedUpperLower(encoding);\n  const isTypeAggregatedError: boolean = errorBarIsInputTypeAggregatedError(encoding);\n  const x = encoding.x;\n  const y = encoding.y;\n\n  if (isTypeAggregatedUpperLower) {\n    // type is aggregated-upper-lower\n\n    if (isTypeAggregatedError) {\n      throw new Error(`${compositeMark} cannot be both type aggregated-upper-lower and aggregated-error`);\n    }\n\n    const x2 = encoding.x2;\n    const y2 = encoding.y2;\n\n    if (isFieldOrDatumDef(x2) && isFieldOrDatumDef(y2)) {\n      // having both x, x2 and y, y2\n      throw new Error(`${compositeMark} cannot have both x2 and y2`);\n    } else if (isFieldOrDatumDef(x2)) {\n      if (isContinuousFieldOrDatumDef(x)) {\n        // having x, x2 quantitative and field y, y2 are not specified\n        return {orient: 'horizontal', inputType: 'aggregated-upper-lower'};\n      } else {\n        // having x, x2 that are not both quantitative\n        throw new Error(`Both x and x2 have to be quantitative in ${compositeMark}`);\n      }\n    } else if (isFieldOrDatumDef(y2)) {\n      // y2 is a FieldDef\n      if (isContinuousFieldOrDatumDef(y)) {\n        // having y, y2 quantitative and field x, x2 are not specified\n        return {orient: 'vertical', inputType: 'aggregated-upper-lower'};\n      } else {\n        // having y, y2 that are not both quantitative\n        throw new Error(`Both y and y2 have to be quantitative in ${compositeMark}`);\n      }\n    }\n    throw new Error('No ranged axis');\n  } else {\n    // type is aggregated-error\n\n    const xError = encoding.xError;\n    const xError2 = encoding.xError2;\n    const yError = encoding.yError;\n    const yError2 = encoding.yError2;\n\n    if (isFieldOrDatumDef(xError2) && !isFieldOrDatumDef(xError)) {\n      // having xError2 without xError\n      throw new Error(`${compositeMark} cannot have xError2 without xError`);\n    }\n\n    if (isFieldOrDatumDef(yError2) && !isFieldOrDatumDef(yError)) {\n      // having yError2 without yError\n      throw new Error(`${compositeMark} cannot have yError2 without yError`);\n    }\n\n    if (isFieldOrDatumDef(xError) && isFieldOrDatumDef(yError)) {\n      // having both xError and yError\n      throw new Error(`${compositeMark} cannot have both xError and yError with both are quantiative`);\n    } else if (isFieldOrDatumDef(xError)) {\n      if (isContinuousFieldOrDatumDef(x)) {\n        // having x and xError that are all quantitative\n        return {orient: 'horizontal', inputType: 'aggregated-error'};\n      } else {\n        // having x, xError, and xError2 that are not all quantitative\n        throw new Error('All x, xError, and xError2 (if exist) have to be quantitative');\n      }\n    } else if (isFieldOrDatumDef(yError)) {\n      if (isContinuousFieldOrDatumDef(y)) {\n        // having y and yError that are all quantitative\n        return {orient: 'vertical', inputType: 'aggregated-error'};\n      } else {\n        // having y, yError, and yError2 that are not all quantitative\n        throw new Error('All y, yError, and yError2 (if exist) have to be quantitative');\n      }\n    }\n    throw new Error('No ranged axis');\n  }\n}\n\nfunction errorBarIsInputTypeRaw(encoding: ErrorEncoding<string>): boolean {\n  return (\n    (isFieldOrDatumDef(encoding.x) || isFieldOrDatumDef(encoding.y)) &&\n    !isFieldOrDatumDef(encoding.x2) &&\n    !isFieldOrDatumDef(encoding.y2) &&\n    !isFieldOrDatumDef(encoding.xError) &&\n    !isFieldOrDatumDef(encoding.xError2) &&\n    !isFieldOrDatumDef(encoding.yError) &&\n    !isFieldOrDatumDef(encoding.yError2)\n  );\n}\n\nfunction errorBarIsInputTypeAggregatedUpperLower(encoding: ErrorEncoding<string>): boolean {\n  return isFieldOrDatumDef(encoding.x2) || isFieldOrDatumDef(encoding.y2);\n}\n\nfunction errorBarIsInputTypeAggregatedError(encoding: ErrorEncoding<string>): boolean {\n  return (\n    isFieldOrDatumDef(encoding.xError) ||\n    isFieldOrDatumDef(encoding.xError2) ||\n    isFieldOrDatumDef(encoding.yError) ||\n    isFieldOrDatumDef(encoding.yError2)\n  );\n}\n\nexport function errorBarParams<\n  M extends ErrorBar | ErrorBand,\n  MD extends GenericCompositeMarkDef<M> & (ErrorBarDef | ErrorBandDef)\n>(\n  spec: GenericUnitSpec<ErrorEncoding<string>, M | MD>,\n  compositeMark: M,\n  config: Config\n): {\n  transform: Transform[];\n  groupby: string[];\n  continuousAxisChannelDef: PositionFieldDef<string>;\n  continuousAxis: 'x' | 'y';\n  encodingWithoutContinuousAxis: ErrorEncoding<string>;\n  ticksOrient: Orientation;\n  markDef: MD;\n  outerSpec: {\n    data?: Data;\n    title?: Text | TitleParams;\n    name?: string;\n    description?: string;\n    transform?: Transform[];\n    width?: number | 'container' | Step;\n    height?: number | 'container' | Step;\n  };\n  tooltipEncoding: ErrorEncoding<string>;\n} {\n  // TODO: use selection\n  const {mark, encoding, selection, projection: _p, ...outerSpec} = spec;\n  const markDef: MD = isMarkDef(mark) ? mark : ({type: mark} as MD);\n\n  // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n  if (selection) {\n    log.warn(log.message.selectionNotSupported(compositeMark));\n  }\n\n  const {orient, inputType} = errorBarOrientAndInputType(spec, compositeMark);\n  const {\n    continuousAxisChannelDef,\n    continuousAxisChannelDef2,\n    continuousAxisChannelDefError,\n    continuousAxisChannelDefError2,\n    continuousAxis\n  } = compositeMarkContinuousAxis(spec, orient, compositeMark);\n\n  const {\n    errorBarSpecificAggregate,\n    postAggregateCalculates,\n    tooltipSummary,\n    tooltipTitleWithFieldName\n  } = errorBarAggregationAndCalculation(\n    markDef,\n    continuousAxisChannelDef,\n    continuousAxisChannelDef2,\n    continuousAxisChannelDefError,\n    continuousAxisChannelDefError2,\n    inputType,\n    compositeMark,\n    config\n  );\n\n  const {\n    [continuousAxis]: oldContinuousAxisChannelDef,\n    [continuousAxis === 'x' ? 'x2' : 'y2']: oldContinuousAxisChannelDef2,\n    [continuousAxis === 'x' ? 'xError' : 'yError']: oldContinuousAxisChannelDefError,\n    [continuousAxis === 'x' ? 'xError2' : 'yError2']: oldContinuousAxisChannelDefError2,\n    ...oldEncodingWithoutContinuousAxis\n  } = encoding;\n\n  const {\n    bins,\n    timeUnits,\n    aggregate: oldAggregate,\n    groupby: oldGroupBy,\n    encoding: encodingWithoutContinuousAxis\n  } = extractTransformsFromEncoding(oldEncodingWithoutContinuousAxis, config);\n\n  const aggregate: AggregatedFieldDef[] = [...oldAggregate, ...errorBarSpecificAggregate];\n  const groupby: string[] = inputType !== 'raw' ? [] : oldGroupBy;\n\n  const tooltipEncoding: ErrorEncoding<string> = getCompositeMarkTooltip(\n    tooltipSummary,\n    continuousAxisChannelDef,\n    encodingWithoutContinuousAxis,\n    tooltipTitleWithFieldName\n  );\n\n  return {\n    transform: [\n      ...(outerSpec.transform ?? []),\n      ...bins,\n      ...timeUnits,\n      ...(aggregate.length === 0 ? [] : [{aggregate, groupby}]),\n      ...postAggregateCalculates\n    ],\n    groupby,\n    continuousAxisChannelDef,\n    continuousAxis,\n    encodingWithoutContinuousAxis,\n    ticksOrient: orient === 'vertical' ? 'horizontal' : 'vertical',\n    markDef,\n    outerSpec,\n    tooltipEncoding\n  };\n}\n\nfunction errorBarAggregationAndCalculation<\n  M extends ErrorBar | ErrorBand,\n  MD extends GenericCompositeMarkDef<M> & (ErrorBarDef | ErrorBandDef)\n>(\n  markDef: MD,\n  continuousAxisChannelDef: PositionFieldDef<string>,\n  continuousAxisChannelDef2: SecondaryFieldDef<string>,\n  continuousAxisChannelDefError: SecondaryFieldDef<string>,\n  continuousAxisChannelDefError2: SecondaryFieldDef<string>,\n  inputType: ErrorInputType,\n  compositeMark: M,\n  config: Config\n): {\n  postAggregateCalculates: CalculateTransform[];\n  errorBarSpecificAggregate: AggregatedFieldDef[];\n  tooltipSummary: CompositeMarkTooltipSummary[];\n  tooltipTitleWithFieldName: boolean;\n} {\n  let errorBarSpecificAggregate: AggregatedFieldDef[] = [];\n  let postAggregateCalculates: CalculateTransform[] = [];\n  const continuousFieldName: string = continuousAxisChannelDef.field;\n\n  let tooltipSummary: CompositeMarkTooltipSummary[];\n  let tooltipTitleWithFieldName = false;\n\n  if (inputType === 'raw') {\n    const center: ErrorBarCenter = markDef.center\n      ? markDef.center\n      : markDef.extent\n      ? markDef.extent === 'iqr'\n        ? 'median'\n        : 'mean'\n      : config.errorbar.center;\n    const extent: ErrorBarExtent = markDef.extent ? markDef.extent : center === 'mean' ? 'stderr' : 'iqr';\n\n    if ((center === 'median') !== (extent === 'iqr')) {\n      log.warn(log.message.errorBarCenterIsUsedWithWrongExtent(center, extent, compositeMark));\n    }\n\n    if (extent === 'stderr' || extent === 'stdev') {\n      errorBarSpecificAggregate = [\n        {op: extent, field: continuousFieldName, as: 'extent_' + continuousFieldName},\n        {op: center, field: continuousFieldName, as: 'center_' + continuousFieldName}\n      ];\n\n      postAggregateCalculates = [\n        {\n          calculate: `datum[\"center_${continuousFieldName}\"] + datum[\"extent_${continuousFieldName}\"]`,\n          as: 'upper_' + continuousFieldName\n        },\n        {\n          calculate: `datum[\"center_${continuousFieldName}\"] - datum[\"extent_${continuousFieldName}\"]`,\n          as: 'lower_' + continuousFieldName\n        }\n      ];\n\n      tooltipSummary = [\n        {fieldPrefix: 'center_', titlePrefix: titleCase(center)},\n        {fieldPrefix: 'upper_', titlePrefix: getTitlePrefix(center, extent, '+')},\n        {fieldPrefix: 'lower_', titlePrefix: getTitlePrefix(center, extent, '-')}\n      ];\n      tooltipTitleWithFieldName = true;\n    } else {\n      if (markDef.center && markDef.extent) {\n        log.warn(log.message.errorBarCenterIsNotNeeded(markDef.extent, compositeMark));\n      }\n\n      let centerOp: AggregateOp;\n      let lowerExtentOp: AggregateOp;\n      let upperExtentOp: AggregateOp;\n      if (extent === 'ci') {\n        centerOp = 'mean';\n        lowerExtentOp = 'ci0';\n        upperExtentOp = 'ci1';\n      } else {\n        centerOp = 'median';\n        lowerExtentOp = 'q1';\n        upperExtentOp = 'q3';\n      }\n\n      errorBarSpecificAggregate = [\n        {op: lowerExtentOp, field: continuousFieldName, as: 'lower_' + continuousFieldName},\n        {op: upperExtentOp, field: continuousFieldName, as: 'upper_' + continuousFieldName},\n        {op: centerOp, field: continuousFieldName, as: 'center_' + continuousFieldName}\n      ];\n\n      tooltipSummary = [\n        {\n          fieldPrefix: 'upper_',\n          titlePrefix: title({field: continuousFieldName, aggregate: upperExtentOp, type: 'quantitative'}, config, {\n            allowDisabling: false\n          })\n        },\n        {\n          fieldPrefix: 'lower_',\n          titlePrefix: title({field: continuousFieldName, aggregate: lowerExtentOp, type: 'quantitative'}, config, {\n            allowDisabling: false\n          })\n        },\n        {\n          fieldPrefix: 'center_',\n          titlePrefix: title({field: continuousFieldName, aggregate: centerOp, type: 'quantitative'}, config, {\n            allowDisabling: false\n          })\n        }\n      ];\n    }\n  } else {\n    if (markDef.center || markDef.extent) {\n      log.warn(log.message.errorBarCenterAndExtentAreNotNeeded(markDef.center, markDef.extent));\n    }\n\n    if (inputType === 'aggregated-upper-lower') {\n      tooltipSummary = [];\n      postAggregateCalculates = [\n        {calculate: `datum[\"${continuousAxisChannelDef2.field}\"]`, as: 'upper_' + continuousFieldName},\n        {calculate: `datum[\"${continuousFieldName}\"]`, as: 'lower_' + continuousFieldName}\n      ];\n    } else if (inputType === 'aggregated-error') {\n      tooltipSummary = [{fieldPrefix: '', titlePrefix: continuousFieldName}];\n      postAggregateCalculates = [\n        {\n          calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError.field}\"]`,\n          as: 'upper_' + continuousFieldName\n        }\n      ];\n\n      if (continuousAxisChannelDefError2) {\n        postAggregateCalculates.push({\n          calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError2.field}\"]`,\n          as: 'lower_' + continuousFieldName\n        });\n      } else {\n        postAggregateCalculates.push({\n          calculate: `datum[\"${continuousFieldName}\"] - datum[\"${continuousAxisChannelDefError.field}\"]`,\n          as: 'lower_' + continuousFieldName\n        });\n      }\n    }\n\n    for (const postAggregateCalculate of postAggregateCalculates) {\n      tooltipSummary.push({\n        fieldPrefix: postAggregateCalculate.as.substring(0, 6),\n        titlePrefix: replaceAll(replaceAll(postAggregateCalculate.calculate, 'datum[\"', ''), '\"]', '')\n      });\n    }\n  }\n  return {postAggregateCalculates, errorBarSpecificAggregate, tooltipSummary, tooltipTitleWithFieldName};\n}\n\nfunction getTitlePrefix(center: ErrorBarCenter, extent: ErrorBarExtent, operation: '+' | '-'): string {\n  return titleCase(center) + ' ' + operation + ' ' + extent;\n}\n","import {Interpolate, Orientation} from 'vega';\nimport {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {CompositeMarkNormalizer} from './base';\nimport {GenericCompositeMarkDef, makeCompositeAggregatePartFactory, PartsMixins} from './common';\nimport {ErrorBarCenter, ErrorBarExtent, errorBarParams, ErrorEncoding} from './errorbar';\n\nexport type ErrorBandUnitSpec<\n  EE = {} // extra encoding parameter (for faceted composite unit spec)\n> = GenericUnitSpec<ErrorEncoding<Field> & EE, ErrorBand | ErrorBandDef>;\n\nexport const ERRORBAND = 'errorband' as const;\nexport type ErrorBand = typeof ERRORBAND;\n\nexport const ERRORBAND_PARTS = ['band', 'borders'] as const;\n\ntype ErrorBandPart = typeof ERRORBAND_PARTS[number];\n\nexport type ErrorBandPartsMixins = PartsMixins<ErrorBandPart>;\n\nexport interface ErrorBandConfig extends ErrorBandPartsMixins {\n  /**\n   * The center of the error band. Available options include:\n   * - `\"mean\"`: the mean of the data points.\n   * - `\"median\"`: the median of the data points.\n   *\n   * __Default value:__ `\"mean\"`.\n   * @hidden\n   */\n\n  // center is not needed right now but will be added back to the schema if future features require it.\n  center?: ErrorBarCenter;\n\n  /**\n   * The extent of the band. Available options include:\n   * - `\"ci\"`: Extend the band to the confidence interval of the mean.\n   * - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n   * - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n   * - `\"iqr\"`: Extend the band to the q1 and q3.\n   *\n   * __Default value:__ `\"stderr\"`.\n   */\n  extent?: ErrorBarExtent;\n\n  /**\n   * The line interpolation method for the error band. One of the following:\n   * - `\"linear\"`: piecewise linear segments, as in a polyline.\n   * - `\"linear-closed\"`: close the linear segments to form a polygon.\n   * - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n   * - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n   * - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n   * - `\"basis\"`: a B-spline, with control point duplication on the ends.\n   * - `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n   * - `\"basis-closed\"`: a closed B-spline, as in a loop.\n   * - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n   * - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n   * - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n   * - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n   * - `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n   */\n  interpolate?: Interpolate;\n\n  /**\n   * The tension parameter for the interpolation type of the error band.\n   *\n   * @minimum 0\n   * @maximum 1\n   */\n  tension?: number;\n}\n\nexport type ErrorBandDef = GenericCompositeMarkDef<ErrorBand> &\n  ErrorBandConfig & {\n    /**\n     * Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n     */\n    orient?: Orientation;\n  };\n\nexport interface ErrorBandConfigMixins {\n  /**\n   * ErrorBand Config\n   */\n  errorband?: ErrorBandConfig;\n}\n\nexport const errorBandNormalizer = new CompositeMarkNormalizer(ERRORBAND, normalizeErrorBand);\n\nexport function normalizeErrorBand(\n  spec: GenericUnitSpec<Encoding<string>, ErrorBand | ErrorBandDef>,\n  {config}: NormalizerParams\n): NormalizedLayerSpec {\n  const {\n    transform,\n    continuousAxisChannelDef,\n    continuousAxis,\n    encodingWithoutContinuousAxis,\n    markDef,\n    outerSpec,\n    tooltipEncoding\n  } = errorBarParams(spec, ERRORBAND, config);\n  const errorBandDef: ErrorBandDef = markDef;\n\n  const makeErrorBandPart = makeCompositeAggregatePartFactory<ErrorBandPartsMixins>(\n    errorBandDef,\n    continuousAxis,\n    continuousAxisChannelDef,\n    encodingWithoutContinuousAxis,\n    config.errorband\n  );\n\n  const is2D = spec.encoding.x !== undefined && spec.encoding.y !== undefined;\n\n  let bandMark: MarkDef = {type: is2D ? 'area' : 'rect'};\n  let bordersMark: MarkDef = {type: is2D ? 'line' : 'rule'};\n  const interpolate = {\n    ...(errorBandDef.interpolate ? {interpolate: errorBandDef.interpolate} : {}),\n    ...(errorBandDef.tension && errorBandDef.interpolate ? {tension: errorBandDef.tension} : {})\n  };\n\n  if (is2D) {\n    bandMark = {\n      ...bandMark,\n      ...interpolate,\n      ariaRoleDescription: 'errorband'\n    };\n    bordersMark = {\n      ...bordersMark,\n      ...interpolate\n    };\n  } else if (errorBandDef.interpolate) {\n    log.warn(log.message.errorBand1DNotSupport('interpolate'));\n  } else if (errorBandDef.tension) {\n    log.warn(log.message.errorBand1DNotSupport('tension'));\n  }\n\n  return {\n    ...outerSpec,\n    transform,\n    layer: [\n      ...makeErrorBandPart({\n        partName: 'band',\n        mark: bandMark,\n        positionPrefix: 'lower',\n        endPositionPrefix: 'upper',\n        extraEncoding: tooltipEncoding\n      }),\n      ...makeErrorBandPart({\n        partName: 'borders',\n        mark: bordersMark,\n        positionPrefix: 'lower',\n        aria: false,\n        extraEncoding: tooltipEncoding\n      }),\n      ...makeErrorBandPart({\n        partName: 'borders',\n        mark: bordersMark,\n        positionPrefix: 'upper',\n        aria: false,\n        extraEncoding: tooltipEncoding\n      })\n    ]\n  };\n}\n","import {NormalizedUnitSpec} from '../spec/unit';\nimport {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {EncodingFacetMapping} from '../spec/facet';\nimport {keys} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {BOXPLOT, BoxPlot, BOXPLOT_PARTS, BoxPlotConfigMixins, BoxPlotDef, normalizeBoxPlot} from './boxplot';\nimport {\n  ERRORBAND,\n  ErrorBand,\n  ERRORBAND_PARTS,\n  ErrorBandConfigMixins,\n  ErrorBandDef,\n  normalizeErrorBand\n} from './errorband';\nimport {\n  ERRORBAR,\n  ErrorBar,\n  ERRORBAR_PARTS,\n  ErrorBarConfigMixins,\n  ErrorBarDef,\n  ErrorExtraEncoding,\n  normalizeErrorBar\n} from './errorbar';\n\nexport {BoxPlotConfig} from './boxplot';\nexport {ErrorBandConfigMixins} from './errorband';\nexport {ErrorBarConfigMixins} from './errorbar';\n\nexport type CompositeMarkNormalizerRun = (\n  spec: GenericUnitSpec<any, any>,\n  params: NormalizerParams\n) => NormalizedLayerSpec | NormalizedUnitSpec;\n\n/**\n * Registry index for all composite mark's normalizer\n */\nconst compositeMarkRegistry: {\n  [mark: string]: {\n    normalizer: CompositeMarkNormalizer<any>;\n    parts: readonly string[];\n  };\n} = {};\n\nexport function add(mark: string, run: CompositeMarkNormalizerRun, parts: readonly string[]) {\n  const normalizer = new CompositeMarkNormalizer(mark, run);\n  compositeMarkRegistry[mark] = {normalizer, parts};\n}\n\nexport function remove(mark: string) {\n  delete compositeMarkRegistry[mark];\n}\n\nexport type CompositeEncoding = Encoding<Field> & ErrorExtraEncoding<Field>;\nexport type FacetedCompositeEncoding = Encoding<Field> & ErrorExtraEncoding<Field> & EncodingFacetMapping<Field>;\n\nexport type CompositeMark = BoxPlot | ErrorBar | ErrorBand;\n\nexport function getAllCompositeMarks() {\n  return keys(compositeMarkRegistry);\n}\n\nexport type CompositeMarkDef = BoxPlotDef | ErrorBarDef | ErrorBandDef;\n\nexport type CompositeAggregate = BoxPlot | ErrorBar | ErrorBand;\n\nexport interface CompositeMarkConfigMixins extends BoxPlotConfigMixins, ErrorBarConfigMixins, ErrorBandConfigMixins {}\n\nadd(BOXPLOT, normalizeBoxPlot, BOXPLOT_PARTS);\nadd(ERRORBAR, normalizeErrorBar, ERRORBAR_PARTS);\nadd(ERRORBAND, normalizeErrorBand, ERRORBAND_PARTS);\n","import {SignalRef, Text} from 'vega';\nimport {ConditionValueDefMixins, ValueDef} from './channeldef';\nimport {LegendConfig} from './legend';\nimport {Dict} from './util';\nimport {VgEncodeChannel} from './vega.schema';\n\nexport interface TitleMixins {\n  /**\n   * A title for the field. If `null`, the title will be removed.\n   *\n   * __Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n   *\n   * __Notes__:\n   *\n   * 1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n   *\n   * 2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.\n   */\n  title?: Text | null | SignalRef;\n}\n\nexport interface FormatMixins {\n  /**\n   * When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n   *\n   * - If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n   * - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n   *\n   * See the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n   *\n   * When used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n   *\n   * __Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.\n   */\n  format?: string | Dict<unknown>;\n\n  /**\n   * The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n   *\n   * __Default value:__\n   * - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n   * - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.\n   */\n  formatType?: 'number' | 'time' | string;\n\n  /**\n   * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n   *\n   * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n   */\n  labelExpr?: string;\n}\n\nexport interface Guide extends TitleMixins, FormatMixins {}\n\nexport interface VlOnlyGuideConfig {\n  /**\n   * Set to null to disable title for the axis, legend, or header.\n   */\n  title?: null;\n}\n\nexport type GuideEncodingConditionalValueDef = ValueDef & ConditionValueDefMixins;\n\nexport type GuideEncodingEntry = Partial<Record<VgEncodeChannel, GuideEncodingConditionalValueDef | SignalRef>>;\n\nexport const VL_ONLY_LEGEND_CONFIG: (keyof LegendConfig)[] = [\n  'gradientHorizontalMaxLength',\n  'gradientHorizontalMinLength',\n  'gradientVerticalMaxLength',\n  'gradientVerticalMinLength',\n  'unselectedOpacity'\n];\n","import {\n  BaseLegend,\n  LabelOverlap,\n  Legend as VgLegend,\n  LegendConfig as VgLegendConfig,\n  LegendEncode,\n  LegendOrient,\n  Orientation,\n  SignalRef\n} from 'vega';\nimport {DateTime} from './datetime';\nimport {Guide, GuideEncodingEntry, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {ExcludeMappedValueRefButKeepSignal, VgEncodeChannel} from './vega.schema';\n\nexport const LEGEND_SCALE_CHANNELS = [\n  'size',\n  'shape',\n  'fill',\n  'stroke',\n  'strokeDash',\n  'strokeWidth',\n  'opacity'\n] as const;\n\nexport type SignalLegendProp =\n  | 'fillColor'\n  | 'gradientStrokeColor'\n  | 'labelColor'\n  | 'strokeColor'\n  | 'symbolFillColor'\n  | 'symbolStrokeColor'\n  | 'titleColor';\n\nexport const SIGNAL_LEGEND_PROP_INDEX: Record<\n  SignalLegendProp,\n  {\n    part: keyof LegendEncode;\n    vgProp: VgEncodeChannel;\n  } | null // null if we need to convert condition to signal\n> = {\n  fillColor: {\n    part: 'legend',\n    vgProp: 'fill'\n  },\n  gradientStrokeColor: {\n    part: 'gradient',\n    vgProp: 'stroke'\n  },\n  labelColor: {\n    part: 'labels',\n    vgProp: 'fill'\n  },\n  strokeColor: {\n    part: 'legend',\n    vgProp: 'stroke'\n  },\n  symbolFillColor: {\n    part: 'symbols',\n    vgProp: 'fill'\n  },\n  symbolStrokeColor: {\n    part: 'symbols',\n    vgProp: 'stroke'\n  },\n  titleColor: {\n    part: 'title',\n    vgProp: 'fill'\n  }\n};\n\ntype BaseLegendNoValueRefs = ExcludeMappedValueRefButKeepSignal<BaseLegend>;\n\nexport interface LegendPropsWithSignal {\n  fillColor?: BaseLegendNoValueRefs['fillColor'] | SignalRef;\n  gradientStrokeColor?: BaseLegendNoValueRefs['gradientStrokeColor'] | SignalRef;\n  labelColor?: BaseLegendNoValueRefs['labelColor'] | SignalRef;\n  strokeColor?: BaseLegendNoValueRefs['strokeColor'] | SignalRef;\n  symbolFillColor?: BaseLegendNoValueRefs['symbolFillColor'] | SignalRef;\n  symbolStrokeColor?: BaseLegendNoValueRefs['symbolStrokeColor'] | SignalRef;\n  titleColor?: BaseLegendNoValueRefs['titleColor'] | SignalRef;\n}\n\nexport type LegendConfig = LegendMixins &\n  VlOnlyGuideConfig &\n  Omit<VgLegendConfig, SignalLegendProp> &\n  LegendPropsWithSignal & {\n    /**\n     * Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n     *\n     * __Default value:__ `200`\n     */\n    gradientVerticalMaxLength?: number;\n\n    /**\n     * Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n     *\n     * __Default value:__ `100`\n     */\n    gradientVerticalMinLength?: number;\n\n    /**\n     * Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n     *\n     * __Default value:__ `200`\n     */\n    gradientHorizontalMaxLength?: number;\n\n    /**\n     * Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n     *\n     * __Default value:__ `100`\n     */\n    gradientHorizontalMinLength?: number;\n\n    /**\n     * The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n     *\n     * __Default value:__ `undefined`. If `undefined`, the default gradient will be determined based on the following rules:\n     * - For vertical gradients, `clamp(plot_height, gradientVerticalMinLength, gradientVerticalMaxLength)`\n     * - For top-`orient`ed or bottom-`orient`ed horizontal gradients, `clamp(plot_width, gradientHorizontalMinLength, gradientHorizontalMaxLength)`\n     * - For other horizontal gradients, `gradientHorizontalMinLength`\n     *\n     * where `clamp(value, min, max)` restricts _value_ to be between the specified _min_ and _max_.\n     * @minimum 0\n     */\n    gradientLength?: number;\n\n    /**\n     * The opacity of unselected legend entries.\n     *\n     * __Default value:__ 0.35.\n     */\n    unselectedOpacity?: number;\n\n    /**\n     * Disable legend by default\n     */\n    disable?: boolean;\n  };\n\n/**\n * Properties of a legend or boolean flag for determining whether to show it.\n */\nexport interface Legend\n  extends Omit<BaseLegendNoValueRefs, SignalLegendProp | 'orient'>,\n    LegendPropsWithSignal,\n    LegendMixins,\n    Guide {\n  /**\n   * Mark definitions for custom legend encoding.\n   *\n   * @hidden\n   */\n  encoding?: LegendEncoding;\n\n  /**\n   * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n   *\n   * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.\n   */\n  labelExpr?: string;\n\n  /**\n   * The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n   *\n   * __Default value__: `undefined`\n   */\n  tickMinStep?: number | SignalRef;\n\n  /**\n   * Explicitly set the visible legend values.\n   */\n  values?: number[] | string[] | boolean[] | DateTime[] | SignalRef; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n  /**\n   * The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n   *\n   * __Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.\n   */\n  type?: 'symbol' | 'gradient';\n\n  /**\n   * A non-negative integer indicating the z-index of the legend.\n   * If zindex is 0, legend should be drawn behind all chart elements.\n   * To put them in front, use zindex = 1.\n   *\n   * @TJS-type integer\n   * @minimum 0\n   */\n  zindex?: number;\n}\n\n// Change comments to be Vega-Lite specific\ninterface LegendMixins {\n  /**\n   * The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n   *\n   * __Default value:__ `\"greedy\"` for `log scales otherwise `true`.\n   */\n  labelOverlap?: LabelOverlap | SignalRef; // override comment since our default differs from Vega\n\n  /**\n   * The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n   *\n   * __Default value:__\n   * - For top-/bottom-`orient`ed legends, `\"horizontal\"`\n   * - For left-/right-`orient`ed legends, `\"vertical\"`\n   * - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends.\n   */\n  direction?: Orientation; // Omit SignalRef\n\n  /**\n   * The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n   *\n   * __Default value:__ `\"right\"`\n   */\n  orient?: LegendOrient; // Omit SignalRef\n}\n\nexport interface LegendEncoding {\n  /**\n   * Custom encoding for the legend container.\n   * This can be useful for creating legend with custom x, y position.\n   */\n  legend?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for the legend title text mark.\n   */\n  title?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for legend label text marks.\n   */\n  labels?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for legend symbol marks.\n   */\n  symbols?: GuideEncodingEntry;\n\n  /**\n   * Custom encoding for legend gradient filled rect marks.\n   */\n  gradient?: GuideEncodingEntry;\n}\n\nexport const defaultLegendConfig: LegendConfig = {\n  gradientHorizontalMaxLength: 200,\n  gradientHorizontalMinLength: 100,\n  gradientVerticalMaxLength: 200,\n  gradientVerticalMinLength: 64, // This is Vega's minimum.\n  unselectedOpacity: 0.35\n};\n\nexport const COMMON_LEGEND_PROPERTY_INDEX: Flag<keyof (VgLegend | Legend)> = {\n  aria: 1,\n  clipHeight: 1,\n  columnPadding: 1,\n  columns: 1,\n  cornerRadius: 1,\n  description: 1,\n  direction: 1,\n  fillColor: 1,\n  format: 1,\n  formatType: 1,\n  gradientLength: 1,\n  gradientOpacity: 1,\n  gradientStrokeColor: 1,\n  gradientStrokeWidth: 1,\n  gradientThickness: 1,\n  gridAlign: 1,\n  labelAlign: 1,\n  labelBaseline: 1,\n  labelColor: 1,\n  labelFont: 1,\n  labelFontSize: 1,\n  labelFontStyle: 1,\n  labelFontWeight: 1,\n  labelLimit: 1,\n  labelOffset: 1,\n  labelOpacity: 1,\n  labelOverlap: 1,\n  labelPadding: 1,\n  labelSeparation: 1,\n  legendX: 1,\n  legendY: 1,\n  offset: 1,\n  orient: 1,\n  padding: 1,\n  rowPadding: 1,\n  strokeColor: 1,\n  symbolDash: 1,\n  symbolDashOffset: 1,\n  symbolFillColor: 1,\n  symbolLimit: 1,\n  symbolOffset: 1,\n  symbolOpacity: 1,\n  symbolSize: 1,\n  symbolStrokeColor: 1,\n  symbolStrokeWidth: 1,\n  symbolType: 1,\n  tickCount: 1,\n  tickMinStep: 1,\n  title: 1,\n  titleAlign: 1,\n  titleAnchor: 1,\n  titleBaseline: 1,\n  titleColor: 1,\n  titleFont: 1,\n  titleFontSize: 1,\n  titleFontStyle: 1,\n  titleFontWeight: 1,\n  titleLimit: 1,\n  titleLineHeight: 1,\n  titleOpacity: 1,\n  titleOrient: 1,\n  titlePadding: 1,\n  type: 1,\n  values: 1,\n  zindex: 1\n};\n\nexport const LEGEND_PROPERTIES = keys(COMMON_LEGEND_PROPERTY_INDEX);\n","import {Binding, Color, Cursor, Stream, Vector2} from 'vega';\nimport {isObject} from 'vega-util';\nimport {SingleDefUnitChannel} from './channel';\nimport {FieldName, PrimitiveValue} from './channeldef';\nimport {DateTime} from './datetime';\nimport {Dict} from './util';\n\nexport const SELECTION_ID = '_vgsid_';\nexport type SelectionType = 'single' | 'multi' | 'interval';\nexport type SelectionResolution = 'global' | 'union' | 'intersect';\n\nexport type SelectionInit = PrimitiveValue | DateTime;\nexport type SelectionInitInterval = Vector2<boolean> | Vector2<number> | Vector2<string> | Vector2<DateTime>;\n\nexport type SelectionInitMapping = Dict<SelectionInit>;\nexport type SelectionInitIntervalMapping = Dict<SelectionInitInterval>;\n\nexport type LegendStreamBinding = {legend: string | Stream};\nexport type LegendBinding = 'legend' | LegendStreamBinding;\n\nexport interface BaseSelectionConfig {\n  /**\n   * Clears the selection, emptying it of all values. Can be a\n   * [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n   *\n   * __Default value:__ `dblclick`.\n   *\n   * __See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation.\n   */\n  clear?: Stream | string | boolean;\n\n  /**\n   * A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\n   * For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n   */\n  on?: Stream | string;\n  /**\n   * With layered and multi-view displays, a strategy that determines how\n   * selections' data queries are resolved when applied in a filter transform,\n   * conditional encoding rule, or scale domain.\n   *\n   * __See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation.\n   */\n  resolve?: SelectionResolution;\n\n  // TODO(https://github.com/vega/vega-lite/issues/2596).\n  // predicate?: string;\n  // domain?: SelectionDomain;\n\n  /**\n   * An array of encoding channels. The corresponding data field values\n   * must match for a data tuple to fall within the selection.\n   *\n   * __See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.\n   */\n  encodings?: SingleDefUnitChannel[];\n\n  /**\n   * An array of field names whose values must match for a data tuple to\n   * fall within the selection.\n   *\n   * __See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.\n   */\n  fields?: FieldName[];\n\n  /**\n   * By default, `all` data values are considered to lie within an empty selection.\n   * When set to `none`, empty selections contain no data values.\n   */\n  empty?: 'all' | 'none';\n}\n\nexport interface SingleSelectionConfig extends BaseSelectionConfig {\n  /**\n   * When set, a selection is populated by input elements (also known as dynamic query widgets)\n   * or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n   * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n   *\n   * Legend bindings are restricted to selections that only specify a single field or encoding.\n   *\n   * Query widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\n   * or can be a mapping between projected field/encodings and binding definitions.\n   *\n   * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n   */\n  bind?: Binding | Record<string, Binding> | LegendBinding;\n\n  /**\n   * When true, an invisible voronoi diagram is computed to accelerate discrete\n   * selection. The data value _nearest_ the mouse cursor is added to the selection.\n   *\n   * __See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.\n   */\n  nearest?: boolean;\n\n  /**\n   * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n   *\n   * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.\n   */\n  init?: SelectionInitMapping;\n}\n\nexport interface MultiSelectionConfig extends BaseSelectionConfig {\n  /**\n   * Controls whether data values should be toggled or only ever inserted into\n   * multi selections. Can be `true`, `false` (for insertion only), or a\n   * [Vega expression](https://vega.github.io/vega/docs/expressions/).\n   *\n   * __Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\n   * data values are toggled when a user interacts with the shift-key pressed).\n   *\n   * Setting the value to the Vega expression `\"true\"` will toggle data values\n   * without the user pressing the shift-key.\n   *\n   * __See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.\n   */\n  toggle?: string | boolean;\n\n  /**\n   * When true, an invisible voronoi diagram is computed to accelerate discrete\n   * selection. The data value _nearest_ the mouse cursor is added to the selection.\n   *\n   * __See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.\n   */\n  nearest?: boolean;\n\n  /**\n   * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\n   * value (or array of values).\n   *\n   * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.\n   */\n  init?: SelectionInitMapping[];\n\n  /**\n   * When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n   * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n   *\n   * Legend bindings are restricted to selections that only specify a single field or encoding.\n   */\n  bind?: LegendBinding;\n}\n\n// Similar to BaseMarkConfig but the field documentations are specificly for an interval mark.\nexport interface BrushConfig {\n  /**\n   * The fill color of the interval mark.\n   *\n   * __Default value:__ `\"#333333\"`\n   *\n   */\n  fill?: Color;\n  /**\n   * The fill opacity of the interval mark (a value between `0` and `1`).\n   *\n   * __Default value:__ `0.125`\n   */\n  fillOpacity?: number;\n  /**\n   * The stroke color of the interval mark.\n   *\n   * __Default value:__ `\"#ffffff\"`\n   */\n  stroke?: Color;\n  /**\n   * The stroke opacity of the interval mark (a value between `0` and `1`).\n   */\n  strokeOpacity?: number;\n  /**\n   * The stroke width of the interval mark.\n   */\n  strokeWidth?: number;\n  /**\n   * An array of alternating stroke and space lengths, for creating dashed or dotted lines.\n   */\n  strokeDash?: number[];\n  /**\n   * The offset (in pixels) with which to begin drawing the stroke dash array.\n   */\n  strokeDashOffset?: number;\n  /**\n   * The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n   */\n  cursor?: Cursor;\n}\n\nexport interface IntervalSelectionConfig extends BaseSelectionConfig {\n  /**\n   * When truthy, allows a user to interactively move an interval selection\n   * back-and-forth. Can be `true`, `false` (to disable panning), or a\n   * [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\n   * which must include a start and end event to trigger continuous panning.\n   *\n   * __Default value:__ `true`, which corresponds to\n   * `[mousedown, window:mouseup] > window:mousemove!` which corresponds to\n   * clicks and dragging within an interval selection to reposition it.\n   *\n   * __See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.\n   */\n  translate?: string | boolean;\n\n  /**\n   * When truthy, allows a user to interactively resize an interval selection.\n   * Can be `true`, `false` (to disable zooming), or a [Vega event stream\n   * definition](https://vega.github.io/vega/docs/event-streams/). Currently,\n   * only `wheel` events are supported.\n   *\n   * __Default value:__ `true`, which corresponds to `wheel!`.\n   *\n   * __See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.\n   */\n  zoom?: string | boolean;\n\n  /**\n   * Establishes a two-way binding between the interval selection and the scales\n   * used within the same view. This allows a user to interactively pan and\n   * zoom the view.\n   *\n   * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n   */\n  bind?: 'scales';\n\n  /**\n   * An interval selection also adds a rectangle mark to depict the\n   * extents of the interval. The `mark` property can be used to customize the\n   * appearance of the mark.\n   *\n   * __See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation.\n   */\n  mark?: BrushConfig;\n\n  /**\n   * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\n   * initial values.\n   *\n   * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.\n   */\n  init?: SelectionInitIntervalMapping;\n}\n\nexport interface BaseSelectionDef<T extends 'single' | 'multi' | 'interval'> {\n  /**\n   * Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n   *\n   * - `\"single\"` -- to select a single discrete data value on `click`.\n   * - `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n   * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n   */\n  type: T;\n}\n\nexport interface SingleSelection extends BaseSelectionDef<'single'>, SingleSelectionConfig {}\n\nexport interface MultiSelection extends BaseSelectionDef<'multi'>, MultiSelectionConfig {}\n\nexport interface IntervalSelection extends BaseSelectionDef<'interval'>, IntervalSelectionConfig {}\n\nexport type SelectionDef = SingleSelection | MultiSelection | IntervalSelection;\n\nexport type SelectionExtent =\n  | {\n      /**\n       * The name of a selection.\n       */\n      selection: string;\n      /**\n       * The field name to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\n       * over multiple fields or encodings.\n       */\n      field?: FieldName;\n    }\n  | {\n      /**\n       * The name of a selection.\n       */\n      selection: string;\n      /**\n       * The encoding channel to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\n       * over multiple fields or encodings.\n       */\n      encoding?: SingleDefUnitChannel;\n    };\n\nexport interface SelectionConfig {\n  /**\n   * The default definition for a [`single`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n   *  for a single selection definition (except `type`) may be specified here.\n   *\n   * For instance, setting `single` to `{\"on\": \"dblclick\"}` populates single selections on double-click by default.\n   */\n  single?: SingleSelectionConfig;\n  /**\n   * The default definition for a [`multi`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n   * for a multi selection definition (except `type`) may be specified here.\n   *\n   * For instance, setting `multi` to `{\"toggle\": \"event.altKey\"}` adds additional values to\n   * multi selections when clicking with the alt-key pressed by default.\n   */\n  multi?: MultiSelectionConfig;\n  /**\n   * The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n   * for an interval selection definition (except `type`) may be specified here.\n   *\n   * For instance, setting `interval` to `{\"translate\": false}` disables the ability to move\n   * interval selections by default.\n   */\n  interval?: IntervalSelectionConfig;\n}\n\nexport const defaultConfig: SelectionConfig = {\n  single: {\n    on: 'click',\n    fields: [SELECTION_ID],\n    resolve: 'global',\n    empty: 'all',\n    clear: 'dblclick'\n  },\n  multi: {\n    on: 'click',\n    fields: [SELECTION_ID],\n    toggle: 'event.shiftKey',\n    resolve: 'global',\n    empty: 'all',\n    clear: 'dblclick'\n  },\n  interval: {\n    on: '[mousedown, window:mouseup] > window:mousemove!',\n    encodings: ['x', 'y'],\n    translate: '[mousedown, window:mouseup] > window:mousemove!',\n    zoom: 'wheel!',\n    mark: {fill: '#333', fillOpacity: 0.125, stroke: 'white'},\n    resolve: 'global',\n    clear: 'dblclick'\n  }\n};\n\nexport function isLegendBinding(bind: any): bind is LegendBinding {\n  return !!bind && (bind === 'legend' || !!bind.legend);\n}\n\nexport function isLegendStreamBinding(bind: any): bind is LegendStreamBinding {\n  return isLegendBinding(bind) && isObject(bind);\n}\n","import {GenericSpec, NormalizedSpec} from '.';\nimport {BaseSpec, BoundsMixins, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\n\n/**\n * Base layout mixins for V/HConcatSpec, which should not have RowCol<T> generic fo its property.\n */\nexport interface OneDirectionalConcatLayout extends BoundsMixins, ResolveMixins {\n  /**\n   * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n   *\n   * __Default value:__ `false`\n   */\n  center?: boolean;\n\n  /**\n   * The spacing in pixels between sub-views of the concat operator.\n   *\n   * __Default value__: `10`\n   */\n  spacing?: number;\n}\n\n/**\n * Base interface for a generalized concatenation specification.\n */\nexport interface GenericConcatSpec<S extends GenericSpec<any, any, any, any>>\n  extends BaseSpec,\n    GenericCompositionLayoutWithColumns,\n    ResolveMixins {\n  /**\n   * A list of views to be concatenated.\n   */\n  concat: S[];\n}\n\n/**\n * Base interface for a vertical concatenation specification.\n */\nexport interface GenericVConcatSpec<S extends GenericSpec<any, any, any, any>>\n  extends BaseSpec,\n    OneDirectionalConcatLayout {\n  /**\n   * A list of views to be concatenated and put into a column.\n   */\n  vconcat: S[];\n}\n\n/**\n * Base interface for a horizontal concatenation specification.\n */\nexport interface GenericHConcatSpec<S extends GenericSpec<any, any, any, any>>\n  extends BaseSpec,\n    OneDirectionalConcatLayout {\n  /**\n   * A list of views to be concatenated and put into a row.\n   */\n  hconcat: S[];\n}\n\n/** A concat spec without any shortcut/expansion syntax */\nexport type NormalizedConcatSpec =\n  | GenericConcatSpec<NormalizedSpec>\n  | GenericVConcatSpec<NormalizedSpec>\n  | GenericHConcatSpec<NormalizedSpec>;\n\nexport function isAnyConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec<any> | GenericHConcatSpec<any> {\n  return isVConcatSpec(spec) || isHConcatSpec(spec) || isConcatSpec(spec);\n}\n\nexport function isConcatSpec(spec: BaseSpec): spec is GenericConcatSpec<any> {\n  return 'concat' in spec;\n}\n\nexport function isVConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec<any> {\n  return 'vconcat' in spec;\n}\n\nexport function isHConcatSpec(spec: BaseSpec): spec is GenericHConcatSpec<any> {\n  return 'hconcat' in spec;\n}\n","import {Color, Cursor, SignalRef, Text} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {NormalizedSpec} from '.';\nimport {Data} from '../data';\nimport {MarkConfig} from '../mark';\nimport {Resolve} from '../resolve';\nimport {TitleParams} from '../title';\nimport {Transform} from '../transform';\nimport {Flag, keys} from '../util';\nimport {LayoutAlign, RowCol} from '../vega.schema';\nimport {isConcatSpec, isVConcatSpec} from './concat';\nimport {isFacetMapping, isFacetSpec} from './facet';\n\nexport {TopLevel} from './toplevel';\n\n/**\n * Common properties for all types of specification\n */\nexport interface BaseSpec {\n  /**\n   * Title for the plot.\n   */\n  title?: Text | TitleParams;\n\n  /**\n   * Name of the visualization for later reference.\n   */\n  name?: string;\n\n  /**\n   * Description of this mark for commenting purpose.\n   */\n  description?: string;\n\n  /**\n   * An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent.\n   */\n  data?: Data | null;\n\n  /**\n   * An array of data transformations such as filter and new field calculation.\n   */\n  transform?: Transform[];\n}\n\nexport interface DataMixins {\n  /**\n   * An object describing the data source.\n   */\n  data: Data;\n}\n\nexport interface Step {\n  /**\n   * The size (width/height) per discrete step.\n   */\n  step: number;\n}\n\nexport function isStep(size: number | Step | 'container' | 'merged'): size is Step {\n  return isObject(size) && size['step'] !== undefined;\n}\n\n// TODO(https://github.com/vega/vega-lite/issues/2503): Make this generic so we can support some form of top-down sizing.\n/**\n * Common properties for specifying width and height of unit and layer specifications.\n */\nexport interface LayoutSizeMixins {\n  /**\n   * The width of a visualization.\n   *\n   * - For a plot with a continuous x-field, width should be a number.\n   * - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n   * - To enable responsive sizing on width, it should be set to `\"container\"`.\n   *\n   * __Default value:__\n   * Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n   *\n   * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n   *\n   * __See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n   */\n  width?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n\n  /**\n   * The height of a visualization.\n   *\n   * - For a plot with a continuous y-field, height should be a number.\n   * - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n   * - To enable responsive sizing on height, it should be set to `\"container\"`.\n   *\n   * __Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n   *\n   * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n   *\n   * __See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n   */\n  height?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n}\n\nexport function isFrameMixins(o: any): o is FrameMixins {\n  return o['view'] || o['width'] || o['height'];\n}\n\nexport interface FrameMixins extends LayoutSizeMixins {\n  /**\n   * An object defining the view background's fill and stroke.\n   *\n   * __Default value:__ none (transparent)\n   */\n  view?: ViewBackground;\n}\n\nexport type DeprecatedFrameMixins = {\n  /**\n   * __Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec.\n   */\n  width?: FrameMixins['width'];\n\n  /**\n   * __Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec.\n   */\n  height?: FrameMixins['height'];\n\n  /**\n   * __Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec.\n   */\n  view?: FrameMixins['view'];\n};\n\nexport interface ResolveMixins {\n  /**\n   * Scale, axis, and legend resolutions for view composition specifications.\n   */\n  resolve?: Resolve;\n}\n\nexport interface BaseViewBackground\n  extends Partial<\n    Pick<\n      MarkConfig,\n      | 'cornerRadius'\n      | 'fillOpacity'\n      | 'opacity'\n      | 'strokeCap'\n      | 'strokeDash'\n      | 'strokeDashOffset'\n      | 'strokeJoin'\n      | 'strokeMiterLimit'\n      | 'strokeOpacity'\n      | 'strokeWidth'\n    >\n  > {\n  // Override documentations for fill, stroke, and cursor\n  /**\n   * The fill color.\n   *\n   * __Default value:__ `undefined`\n   */\n  fill?: Color | null | SignalRef;\n\n  /**\n   * The stroke color.\n   *\n   * __Default value:__ `\"#ddd\"`\n   */\n  stroke?: Color | null | SignalRef;\n\n  /**\n   * The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n   */\n  cursor?: Cursor;\n}\n\nexport interface ViewBackground extends BaseViewBackground {\n  /**\n   * A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n   *\n   * __Default value:__ `\"cell\"`\n   * __Note:__ Any specified view background properties will augment the default style.\n   */\n  style?: string | string[];\n}\n\nexport interface BoundsMixins {\n  /**\n   * The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n   *\n   * - If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n   * - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n   *\n   * __Default value:__ `\"full\"`\n   */\n\n  bounds?: 'full' | 'flush';\n}\n\n/**\n * Base layout for FacetSpec and RepeatSpec.\n * This is named \"GenericComposition\" layout as ConcatLayout is a GenericCompositionLayout too\n * (but _not_ vice versa).\n */\nexport interface GenericCompositionLayout extends BoundsMixins {\n  /**\n   * The alignment to apply to grid rows and columns.\n   * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n   *\n   * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n   * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n   * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n   *\n   * Alternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n   *\n   * __Default value:__ `\"all\"`.\n   */\n  align?: LayoutAlign | RowCol<LayoutAlign>;\n\n  /**\n   * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n   *\n   * An object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n   *\n   * __Default value:__ `false`\n   */\n  center?: boolean | RowCol<boolean>;\n\n  /**\n   * The spacing in pixels between sub-views of the composition operator.\n   * An object of the form `{\"row\": number, \"column\": number}` can be used to set\n   * different spacing values for rows and columns.\n   *\n   * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n   */\n  spacing?: number | RowCol<number>;\n}\n\nexport const DEFAULT_SPACING = 20;\n\nexport interface ColumnMixins {\n  /**\n   * The number of columns to include in the view composition layout.\n   *\n   * __Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n   * `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n   *\n   * __Note__:\n   *\n   * 1) This property is only for:\n   * - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n   * - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n   *\n   * 2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).\n   */\n  columns?: number;\n}\n\nexport type GenericCompositionLayoutWithColumns = GenericCompositionLayout & ColumnMixins;\n\nexport type CompositionConfig = ColumnMixins & {\n  /**\n   * The default spacing in pixels between composed sub-views.\n   *\n   * __Default value__: `20`\n   */\n  spacing?: number;\n};\n\nexport interface CompositionConfigMixins {\n  /** Default configuration for the `facet` view composition operator */\n  facet?: CompositionConfig;\n\n  /** Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`) */\n  concat?: CompositionConfig;\n}\n\nconst COMPOSITION_LAYOUT_INDEX: Flag<keyof GenericCompositionLayoutWithColumns> = {\n  align: 1,\n  bounds: 1,\n  center: 1,\n  columns: 1,\n  spacing: 1\n};\n\nconst COMPOSITION_LAYOUT_PROPERTIES = keys(COMPOSITION_LAYOUT_INDEX);\n\nexport type SpecType = 'unit' | 'facet' | 'layer' | 'concat';\n\nexport function extractCompositionLayout(\n  spec: NormalizedSpec,\n  specType: keyof CompositionConfigMixins,\n  config: CompositionConfigMixins\n): GenericCompositionLayoutWithColumns {\n  const compositionConfig = config[specType];\n  const layout: GenericCompositionLayoutWithColumns = {};\n\n  // Apply config first\n  const {spacing: spacingConfig, columns} = compositionConfig;\n  if (spacingConfig !== undefined) {\n    layout.spacing = spacingConfig;\n  }\n\n  if (columns !== undefined) {\n    if ((isFacetSpec(spec) && !isFacetMapping(spec.facet)) || isConcatSpec(spec)) {\n      layout.columns = columns;\n    }\n  }\n\n  if (isVConcatSpec(spec)) {\n    layout.columns = 1;\n  }\n\n  // Then copy properties from the spec\n  for (const prop of COMPOSITION_LAYOUT_PROPERTIES) {\n    if (spec[prop] !== undefined) {\n      if (prop === 'spacing') {\n        const spacing: number | RowCol<number> = spec[prop];\n\n        layout[prop] = isNumber(spacing)\n          ? spacing\n          : {\n              row: spacing.row ?? spacingConfig,\n              column: spacing.column ?? spacingConfig\n            };\n      } else {\n        (layout[prop] as any) = spec[prop];\n      }\n    }\n  }\n\n  return layout;\n}\n","import {Color, InitSignal, NewSignal, RangeConfig, RangeScheme, SignalRef} from 'vega';\nimport {isObject, mergeConfig} from 'vega-util';\nimport {Axis, AxisConfigMixins, isConditionalAxisValue} from './axis';\nimport {CompositeMarkConfigMixins, getAllCompositeMarks} from './compositemark';\nimport {VL_ONLY_LEGEND_CONFIG} from './guide';\nimport {HeaderConfigMixins} from './header';\nimport {defaultLegendConfig, LegendConfig} from './legend';\nimport * as mark from './mark';\nimport {\n  AnyMarkConfig,\n  Mark,\n  MarkConfig,\n  MarkConfigMixins,\n  PRIMITIVE_MARKS,\n  VL_ONLY_MARK_CONFIG_PROPERTIES,\n  VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n} from './mark';\nimport {ProjectionConfig} from './projection';\nimport {defaultScaleConfig, ScaleConfig} from './scale';\nimport {defaultConfig as defaultSelectionConfig, SelectionConfig} from './selection';\nimport {BaseViewBackground, CompositionConfigMixins, DEFAULT_SPACING, isStep} from './spec/base';\nimport {TopLevelProperties} from './spec/toplevel';\nimport {extractTitleConfig, TitleConfig} from './title';\nimport {duplicate, getFirstDefined, isEmpty} from './util';\n\nexport interface ViewConfig extends BaseViewBackground {\n  /**\n   * Default width\n   *\n   * __Deprecated:__ Since Vega-Lite 4.0. Please use continuousWidth and discreteWidth instead.\n   */\n  width?: number;\n\n  /**\n   * Default height\n   *\n   * __Deprecated:__ Since Vega-Lite 4.0. Please use continuousHeight and discreteHeight instead.\n   */\n  height?: number;\n\n  /**\n   * The default width when the plot has a continuous field for x or longitude, or has arc marks.\n   *\n   * __Default value:__ `200`\n   */\n  continuousWidth?: number;\n\n  /**\n   * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.\n   * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n   *\n   * __Default value:__ a step size based on `config.view.step`.\n   */\n  discreteWidth?: number | {step: number};\n  /**\n   * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n   *\n   * __Default value:__ `200`\n   */\n  continuousHeight?: number;\n\n  /**\n   * The default height when the plot has non arc marks and either a discrete y-field or no y-field.\n   * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n   *\n   * __Default value:__ a step size based on `config.view.step`.\n   */\n  discreteHeight?: number | {step: number};\n\n  /**\n   * Default step size for x-/y- discrete fields.\n   */\n  step?: number;\n\n  /**\n   * Whether the view should be clipped.\n   */\n  clip?: boolean;\n}\n\nexport function getViewConfigContinuousSize(viewConfig: ViewConfig, channel: 'width' | 'height') {\n  return viewConfig[channel] ?? viewConfig[channel === 'width' ? 'continuousWidth' : 'continuousHeight']; // get width/height for backwards compatibility\n}\n\nexport function getViewConfigDiscreteStep(viewConfig: ViewConfig, channel: 'width' | 'height') {\n  const size = getViewConfigDiscreteSize(viewConfig, channel);\n  return isStep(size) ? size.step : DEFAULT_STEP;\n}\n\nexport function getViewConfigDiscreteSize(viewConfig: ViewConfig, channel: 'width' | 'height') {\n  const size = viewConfig[channel] ?? viewConfig[channel === 'width' ? 'discreteWidth' : 'discreteHeight']; // get width/height for backwards compatibility\n  return getFirstDefined(size, {step: viewConfig.step});\n}\n\nexport const DEFAULT_STEP = 20;\n\nexport const defaultViewConfig: ViewConfig = {\n  continuousWidth: 200,\n  continuousHeight: 200,\n  step: DEFAULT_STEP\n};\n\nexport function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme {\n  return rangeScheme && !!rangeScheme['scheme'];\n}\n\nexport type ColorConfig = Record<string, Color>;\n\nexport type FontSizeConfig = Record<string, number>;\n\nexport interface VLOnlyConfig {\n  /**\n   * Default font for all text marks, titles, and labels.\n   */\n  font?: string;\n\n  /**\n   * Default color signals.\n   *\n   * @hidden\n   */\n  color?: boolean | ColorConfig;\n\n  /**\n   * Default font size signals.\n   *\n   * @hidden\n   */\n  fontSize?: boolean | FontSizeConfig;\n\n  /**\n   * Default axis and legend title for count fields.\n   *\n   * __Default value:__ `'Count of Records`.\n   *\n   * @type {string}\n   */\n  countTitle?: string;\n\n  /**\n   * Defines how Vega-Lite generates title for fields. There are three possible styles:\n   * - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n   * - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n   * - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").\n   */\n  fieldTitle?: 'verbal' | 'functional' | 'plain';\n\n  /**\n   * D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n   */\n  numberFormat?: string;\n\n  /**\n   * Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n   *\n   * __Default value:__ `\"%b %d, %Y\"`\n   * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.\n   */\n  timeFormat?: string;\n\n  /**\n   * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).\n   */\n  customFormatTypes?: boolean;\n\n  /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */\n  view?: ViewConfig;\n\n  /**\n   * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n   */\n  scale?: ScaleConfig;\n\n  /** An object hash for defining default properties for each type of selections. */\n  selection?: SelectionConfig;\n}\n\nexport type StyleConfigIndex = Partial<Record<string, AnyMarkConfig | Axis>> &\n  MarkConfigMixins & {\n    /**\n     * Default style for axis, legend, and header titles.\n     */\n    'guide-title'?: MarkConfig;\n\n    /**\n     * Default style for axis, legend, and header labels.\n     */\n    'guide-label'?: MarkConfig;\n\n    /**\n     * Default style for chart titles\n     */\n    'group-title'?: MarkConfig;\n\n    /**\n     * Default style for chart subtitles\n     */\n    'group-subtitle'?: MarkConfig;\n  };\n\nexport interface Config\n  extends TopLevelProperties,\n    VLOnlyConfig,\n    MarkConfigMixins,\n    CompositeMarkConfigMixins,\n    AxisConfigMixins,\n    HeaderConfigMixins,\n    CompositionConfigMixins {\n  /**\n   * An object hash that defines default range arrays or schemes for using with scales.\n   * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n   */\n  range?: RangeConfig;\n\n  /**\n   * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).\n   */\n  legend?: LegendConfig;\n\n  /**\n   * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).\n   */\n  title?: TitleConfig;\n\n  /**\n   * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).\n   */\n  projection?: ProjectionConfig;\n\n  /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */\n  style?: StyleConfigIndex;\n\n  /**\n   * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.\n   */\n  lineBreak?: string | SignalRef;\n\n  /**\n   * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n   *\n   * __Default value:__ `true`.\n   */\n  aria?: boolean;\n\n  /**\n   * @hidden\n   */\n  signals?: (InitSignal | NewSignal)[];\n}\n\nexport const defaultConfig: Config = {\n  background: 'white',\n\n  padding: 5,\n  timeFormat: '%b %d, %Y',\n  countTitle: 'Count of Records',\n\n  view: defaultViewConfig,\n\n  mark: mark.defaultMarkConfig,\n\n  arc: {},\n  area: {},\n  bar: mark.defaultBarConfig,\n  circle: {},\n  geoshape: {},\n  image: {},\n  line: {},\n  point: {},\n  rect: mark.defaultRectConfig,\n  rule: {color: 'black'}, // Need this to override default color in mark config\n  square: {},\n  text: {color: 'black'}, // Need this to override default color in mark config\n  tick: mark.defaultTickConfig,\n  trail: {},\n\n  boxplot: {\n    size: 14,\n    extent: 1.5,\n    box: {},\n    median: {color: 'white'},\n    outliers: {},\n    rule: {},\n    ticks: null\n  },\n\n  errorbar: {\n    center: 'mean',\n    rule: true,\n    ticks: false\n  },\n\n  errorband: {\n    band: {\n      opacity: 0.3\n    },\n    borders: false\n  },\n\n  scale: defaultScaleConfig,\n\n  projection: {},\n\n  legend: defaultLegendConfig,\n  header: {titlePadding: 10, labelPadding: 10},\n  headerColumn: {},\n  headerRow: {},\n  headerFacet: {},\n\n  selection: defaultSelectionConfig,\n  style: {},\n\n  title: {},\n\n  facet: {spacing: DEFAULT_SPACING},\n  concat: {spacing: DEFAULT_SPACING}\n};\n\n// Tableau10 color palette, copied from `vegaScale.scheme('tableau10')`\nconst tab10 = [\n  '#4c78a8',\n  '#f58518',\n  '#e45756',\n  '#72b7b2',\n  '#54a24b',\n  '#eeca3b',\n  '#b279a2',\n  '#ff9da6',\n  '#9d755d',\n  '#bab0ac'\n];\n\nexport const DEFAULT_FONT_SIZE = {\n  text: 11,\n  guideLabel: 10,\n  guideTitle: 11,\n  groupTitle: 13,\n  groupSubtitle: 12\n};\n\nexport const DEFAULT_COLOR = {\n  blue: tab10[0],\n  orange: tab10[1],\n  red: tab10[2],\n  teal: tab10[3],\n  green: tab10[4],\n  yellow: tab10[5],\n  purple: tab10[6],\n  pink: tab10[7],\n  brown: tab10[8],\n  gray0: '#000',\n  gray1: '#111',\n  gray2: '#222',\n  gray3: '#333',\n  gray4: '#444',\n  gray5: '#555',\n  gray6: '#666',\n  gray7: '#777',\n  gray8: '#888',\n  gray9: '#999',\n  gray10: '#aaa',\n  gray11: '#bbb',\n  gray12: '#ccc',\n  gray13: '#ddd',\n  gray14: '#eee',\n  gray15: '#fff'\n};\n\nexport function colorSignalConfig(color: boolean | ColorConfig = {}): Config {\n  return {\n    signals: [\n      {\n        name: 'color',\n        value: isObject(color) ? {...DEFAULT_COLOR, ...color} : DEFAULT_COLOR\n      }\n    ],\n    mark: {color: {signal: 'color.blue'}},\n    rule: {color: {signal: 'color.gray0'}},\n    text: {\n      color: {signal: 'color.gray0'}\n    },\n    style: {\n      'guide-label': {\n        fill: {signal: 'color.gray0'}\n      },\n      'guide-title': {\n        fill: {signal: 'color.gray0'}\n      },\n      'group-title': {\n        fill: {signal: 'color.gray0'}\n      },\n      'group-subtitle': {\n        fill: {signal: 'color.gray0'}\n      },\n      cell: {\n        stroke: {signal: 'color.gray8'}\n      }\n    },\n    axis: {\n      domainColor: {signal: 'color.gray13'},\n      gridColor: {signal: 'color.gray8'},\n      tickColor: {signal: 'color.gray13'}\n    },\n    range: {\n      category: [\n        {signal: 'color.blue'},\n        {signal: 'color.orange'},\n        {signal: 'color.red'},\n        {signal: 'color.teal'},\n        {signal: 'color.green'},\n        {signal: 'color.yellow'},\n        {signal: 'color.purple'},\n        {signal: 'color.pink'},\n        {signal: 'color.brown'},\n        {signal: 'color.grey8'}\n      ]\n    }\n  };\n}\n\nexport function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config {\n  return {\n    signals: [\n      {\n        name: 'fontSize',\n        value: isObject(fontSize) ? {...DEFAULT_FONT_SIZE, ...fontSize} : DEFAULT_FONT_SIZE\n      }\n    ],\n    text: {\n      fontSize: {signal: 'fontSize.text'}\n    },\n    style: {\n      'guide-label': {\n        fontSize: {signal: 'fontSize.guideLabel'}\n      },\n      'guide-title': {\n        fontSize: {signal: 'fontSize.guideTitle'}\n      },\n      'group-title': {\n        fontSize: {signal: 'fontSize.groupTitle'}\n      },\n      'group-subtitle': {\n        fontSize: {signal: 'fontSize.groupSubtitle'}\n      }\n    }\n  };\n}\n\nexport function fontConfig(font: string): Config {\n  return {\n    text: {font},\n    style: {\n      'guide-label': {font},\n      'guide-title': {font},\n      'group-title': {font},\n      'group-subtitle': {font}\n    }\n  };\n}\n\nexport function initConfig(config: Config = {}) {\n  const {color, font, fontSize, ...restConfig} = config;\n\n  return mergeConfig(\n    {},\n    defaultConfig,\n    font ? fontConfig(font) : {},\n    color ? colorSignalConfig(color) : {},\n    fontSize ? fontSizeSignalConfig(fontSize) : {},\n    restConfig || {}\n  );\n}\n\nconst MARK_STYLES = ['view', ...PRIMITIVE_MARKS] as ('view' | Mark)[];\n\nconst VL_ONLY_CONFIG_PROPERTIES: (keyof Config)[] = [\n  'color',\n  'fontSize',\n  'background', // We apply background to the spec directly.\n  'padding',\n  'facet',\n  'concat',\n  'numberFormat',\n  'timeFormat',\n  'countTitle',\n  'header',\n\n  'axisQuantitative',\n  'axisTemporal',\n  'axisDiscrete',\n  'axisPoint',\n\n  'axisXBand',\n  'axisXPoint',\n  'axisXDiscrete',\n  'axisXQuantitative',\n  'axisXTemporal',\n\n  'axisYBand',\n  'axisYPoint',\n  'axisYDiscrete',\n  'axisYQuantitative',\n  'axisYTemporal',\n\n  'scale',\n  'selection',\n  'overlay' as keyof Config // FIXME: Redesign and unhide this\n];\n\nconst VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n  view: ['continuousWidth', 'continuousHeight', 'discreteWidth', 'discreteHeight', 'step'],\n  ...VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n};\n\nexport function stripAndRedirectConfig(config: Config) {\n  config = duplicate(config);\n\n  for (const prop of VL_ONLY_CONFIG_PROPERTIES) {\n    delete config[prop];\n  }\n\n  if (config.axis) {\n    // delete condition axis config\n    for (const prop in config.axis) {\n      if (isConditionalAxisValue(config.axis[prop])) {\n        delete config.axis[prop];\n      }\n    }\n  }\n\n  if (config.legend) {\n    for (const prop of VL_ONLY_LEGEND_CONFIG) {\n      delete config.legend[prop];\n    }\n  }\n\n  // Remove Vega-Lite only generic mark config\n  if (config.mark) {\n    for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n      delete config.mark[prop];\n    }\n\n    if (config.mark.tooltip && isObject(config.mark.tooltip)) {\n      delete config.mark.tooltip;\n    }\n  }\n\n  for (const markType of MARK_STYLES) {\n    // Remove Vega-Lite-only mark config\n    for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n      delete config[markType][prop];\n    }\n\n    // Remove Vega-Lite only mark-specific config\n    const vlOnlyMarkSpecificConfigs = VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX[markType];\n    if (vlOnlyMarkSpecificConfigs) {\n      for (const prop of vlOnlyMarkSpecificConfigs) {\n        delete config[markType][prop];\n      }\n    }\n\n    // Redirect mark config to config.style so that mark config only affect its own mark type\n    // without affecting other marks that share the same underlying Vega marks.\n    // For example, config.rect should not affect bar marks.\n    redirectConfigToStyleConfig(config, markType);\n  }\n\n  for (const m of getAllCompositeMarks()) {\n    // Clean up the composite mark config as we don't need them in the output specs anymore\n    delete config[m];\n  }\n\n  redirectTitleConfig(config);\n\n  // Remove empty config objects.\n  for (const prop in config) {\n    if (isObject(config[prop]) && isEmpty(config[prop])) {\n      delete config[prop];\n    }\n  }\n\n  return isEmpty(config) ? undefined : config;\n}\n\n/**\n *\n * Redirect config.title -- so that title config do not affect header labels,\n * which also uses `title` directive to implement.\n *\n * For subtitle configs in config.title, keep them in config.title as header titles never have subtitles.\n */\nfunction redirectTitleConfig(config: Config) {\n  const {titleMarkConfig, subtitleMarkConfig, subtitle} = extractTitleConfig(config.title);\n\n  // set config.style if title/subtitleMarkConfig is not an empty object\n  if (!isEmpty(titleMarkConfig)) {\n    config.style['group-title'] = {\n      ...config.style['group-title'],\n      ...titleMarkConfig // config.title has higher precedence than config.style.group-title in Vega\n    };\n  }\n  if (!isEmpty(subtitleMarkConfig)) {\n    config.style['group-subtitle'] = {\n      ...config.style['group-subtitle'],\n      ...subtitleMarkConfig\n    };\n  }\n\n  // subtitle part can stay in config.title since header titles do not use subtitle\n  if (!isEmpty(subtitle)) {\n    config.title = subtitle;\n  } else {\n    delete config.title;\n  }\n}\n\nfunction redirectConfigToStyleConfig(\n  config: Config,\n  prop: Mark | 'view' | string, // string = composite mark\n  toProp?: string,\n  compositeMarkPart?: string\n) {\n  const propConfig: MarkConfig = compositeMarkPart ? config[prop][compositeMarkPart] : config[prop];\n\n  if (prop === 'view') {\n    toProp = 'cell'; // View's default style is \"cell\"\n  }\n\n  const style: MarkConfig = {\n    ...propConfig,\n    ...(config.style[toProp ?? prop] as MarkConfig)\n  };\n\n  // set config.style if it is not an empty object\n  if (!isEmpty(style)) {\n    config.style[toProp ?? prop] = style;\n  }\n\n  if (!compositeMarkPart) {\n    // For composite mark, so don't delete the whole config yet as we have to do multiple redirections.\n    delete config[prop];\n  }\n}\n","import {CompositeEncoding} from '../compositemark';\nimport {Projection} from '../projection';\nimport {BaseSpec, FrameMixins, ResolveMixins} from './base';\nimport {GenericUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Base interface for a layer specification.\n */\nexport interface GenericLayerSpec<U extends GenericUnitSpec<any, any>> extends BaseSpec, FrameMixins, ResolveMixins {\n  /**\n   * Layer or single view specifications to be layered.\n   *\n   * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n   */\n  layer: (GenericLayerSpec<U> | U)[];\n}\n\n/**\n * A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.\n */\nexport interface LayerSpec extends BaseSpec, FrameMixins, ResolveMixins {\n  /**\n   * Layer or single view specifications to be layered.\n   *\n   * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n   */\n  layer: (LayerSpec | UnitSpec)[];\n\n  /**\n   * A shared key-value mapping between encoding channels and definition of fields in the underlying layers.\n   */\n  encoding?: CompositeEncoding;\n\n  /**\n   * An object defining properties of the geographic projection shared by underlying layers.\n   */\n  projection?: Projection;\n}\n\n/**\n * A layered specification without any shortcut/expansion syntax.\n */\nexport type NormalizedLayerSpec = GenericLayerSpec<NormalizedUnitSpec>;\n\nexport function isLayerSpec(spec: BaseSpec): spec is GenericLayerSpec<any> {\n  return 'layer' in spec;\n}\n","import {isArray} from 'vega-util';\nimport {GenericSpec, LayerSpec} from '.';\nimport {FieldName} from '../channeldef';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {FacetedUnitSpec, UnitSpec} from './unit';\n\nexport interface RepeatMapping {\n  /**\n   * An array of fields to be repeated vertically.\n   */\n  row?: string[];\n\n  /**\n   * An array of fields to be repeated horizontally.\n   */\n  column?: string[];\n}\n\nexport interface LayerRepeatMapping extends RepeatMapping {\n  /**\n   * An array of fields to be repeated as layers.\n   */\n  layer: string[];\n}\n\nexport type RepeatSpec = NonLayerRepeatSpec | LayerRepeatSpec;\n\n/**\n * Base interface for a repeat specification.\n */\nexport interface NonLayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n  /**\n   * Definition for fields to be repeated. One of:\n   * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n   * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n   */\n  repeat: string[] | RepeatMapping;\n\n  /**\n   * A specification of the view that gets repeated.\n   */\n  spec: GenericSpec<FacetedUnitSpec, LayerSpec, RepeatSpec, FieldName>;\n}\n\nexport interface LayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n  /**\n   * Definition for fields to be repeated. One of:\n   * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n   * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n   */\n  repeat: LayerRepeatMapping;\n\n  /**\n   * A specification of the view that gets repeated.\n   */\n  spec: LayerSpec | UnitSpec;\n}\n\nexport function isRepeatSpec(spec: BaseSpec): spec is RepeatSpec {\n  return 'repeat' in spec;\n}\n\nexport function isLayerRepeatSpec(spec: RepeatSpec): spec is LayerRepeatSpec {\n  return !isArray(spec.repeat) && spec.repeat['layer'];\n}\n","/**\n * Definition for specifications in Vega-Lite. In general, there are 3 variants of specs for each type of specs:\n * - Generic specs are generic versions of specs and they are parameterized differently for internal and external specs.\n * - The external specs (no prefix) would allow composite marks, row/column encodings, and mark macros like point/line overlay.\n * - The internal specs (with `Normalized` prefix) would only support primitive marks and support no macros/shortcuts.\n */\nimport {Field} from '../channeldef';\nimport {FieldName} from '../channeldef';\nimport {DataMixins} from './base';\nimport {GenericConcatSpec, GenericHConcatSpec, GenericVConcatSpec} from './concat';\nimport {GenericFacetSpec} from './facet';\nimport {GenericLayerSpec, LayerSpec, NormalizedLayerSpec} from './layer';\nimport {RepeatSpec} from './repeat';\nimport {TopLevel} from './toplevel';\nimport {FacetedUnitSpec, GenericUnitSpec, NormalizedUnitSpec, TopLevelUnitSpec, UnitSpecWithFrame} from './unit';\n\nexport {BaseSpec, LayoutSizeMixins} from './base';\nexport {\n  GenericHConcatSpec,\n  GenericVConcatSpec,\n  isAnyConcatSpec,\n  isHConcatSpec,\n  isVConcatSpec,\n  NormalizedConcatSpec\n} from './concat';\nexport {GenericFacetSpec, isFacetSpec, NormalizedFacetSpec} from './facet';\nexport {GenericLayerSpec, isLayerSpec, LayerSpec, NormalizedLayerSpec} from './layer';\nexport {isRepeatSpec, RepeatSpec} from './repeat';\nexport {TopLevel} from './toplevel';\nexport {FacetedUnitSpec, GenericUnitSpec, isUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Any specification in Vega-Lite.\n */\nexport type GenericSpec<\n  U extends GenericUnitSpec<any, any>,\n  L extends GenericLayerSpec<any>,\n  R extends RepeatSpec,\n  F extends Field\n> =\n  | U\n  | L\n  | R\n  | GenericFacetSpec<U, L, F>\n  | GenericConcatSpec<GenericSpec<U, L, R, F>>\n  | GenericVConcatSpec<GenericSpec<U, L, R, F>>\n  | GenericHConcatSpec<GenericSpec<U, L, R, F>>;\n\n/**\n * Specs with only primitive marks and without other macros.\n */\nexport type NormalizedSpec = GenericSpec<NormalizedUnitSpec, NormalizedLayerSpec, never, FieldName>;\n\nexport type TopLevelFacetSpec = TopLevel<GenericFacetSpec<UnitSpecWithFrame, LayerSpec, Field>> & DataMixins;\n\n/**\n * A Vega-Lite top-level specification.\n * This is the root class for all Vega-Lite specifications.\n * (The json schema is generated from this type.)\n */\nexport type TopLevelSpec =\n  | TopLevelUnitSpec\n  | TopLevelFacetSpec\n  | TopLevel<LayerSpec>\n  | TopLevel<RepeatSpec>\n  | TopLevel<GenericConcatSpec<GenericSpec<FacetedUnitSpec, LayerSpec, RepeatSpec, Field>>>\n  | TopLevel<GenericVConcatSpec<GenericSpec<FacetedUnitSpec, LayerSpec, RepeatSpec, Field>>>\n  | TopLevel<GenericHConcatSpec<GenericSpec<FacetedUnitSpec, LayerSpec, RepeatSpec, Field>>>;\n","import {GenericSpec} from '.';\nimport * as log from '../log';\nimport {Field, FieldName} from '../channeldef';\nimport {\n  GenericConcatSpec,\n  GenericHConcatSpec,\n  GenericVConcatSpec,\n  isConcatSpec,\n  isHConcatSpec,\n  isVConcatSpec\n} from './concat';\nimport {GenericFacetSpec, isFacetSpec} from './facet';\nimport {GenericLayerSpec, isLayerSpec} from './layer';\nimport {isRepeatSpec, RepeatSpec} from './repeat';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport abstract class SpecMapper<\n  P,\n  UI extends GenericUnitSpec<any, any>,\n  LI extends GenericLayerSpec<any> = GenericLayerSpec<UI>,\n  UO extends GenericUnitSpec<any, any> = NormalizedUnitSpec,\n  RO extends RepeatSpec = never,\n  FO extends Field = FieldName\n> {\n  public map(spec: GenericSpec<UI, LI, RepeatSpec, Field>, params: P): GenericSpec<UO, GenericLayerSpec<UO>, RO, FO> {\n    if (isFacetSpec(spec)) {\n      return this.mapFacet(spec, params);\n    } else if (isRepeatSpec(spec)) {\n      return this.mapRepeat(spec, params);\n    } else if (isHConcatSpec(spec)) {\n      return this.mapHConcat(spec, params);\n    } else if (isVConcatSpec(spec)) {\n      return this.mapVConcat(spec, params);\n    } else if (isConcatSpec(spec)) {\n      return this.mapConcat(spec, params);\n    } else {\n      return this.mapLayerOrUnit(spec, params);\n    }\n  }\n\n  public mapLayerOrUnit(spec: UI | LI, params: P): UO | GenericLayerSpec<UO> {\n    if (isLayerSpec(spec)) {\n      return this.mapLayer(spec, params);\n    } else if (isUnitSpec(spec)) {\n      return this.mapUnit(spec, params);\n    }\n    throw new Error(log.message.invalidSpec(spec));\n  }\n\n  public abstract mapUnit(spec: UI, params: P): UO | GenericLayerSpec<UO>;\n\n  protected mapLayer(spec: LI, params: P): GenericLayerSpec<UO> {\n    return {\n      ...spec,\n      layer: spec.layer.map(subspec => this.mapLayerOrUnit(subspec, params))\n    };\n  }\n\n  protected mapHConcat(\n    spec: GenericHConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n    params: P\n  ): GenericHConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n    return {\n      ...spec,\n      hconcat: spec.hconcat.map(subspec => this.map(subspec, params))\n    };\n  }\n\n  protected mapVConcat(\n    spec: GenericVConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n    params: P\n  ): GenericVConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n    return {\n      ...spec,\n      vconcat: spec.vconcat.map(subspec => this.map(subspec, params))\n    };\n  }\n\n  protected mapConcat(\n    spec: GenericConcatSpec<GenericSpec<UI, LI, RepeatSpec, Field>>,\n    params: P\n  ): GenericConcatSpec<GenericSpec<UO, GenericLayerSpec<UO>, RO, FO>> {\n    const {concat, ...rest} = spec;\n\n    return {\n      ...rest,\n      concat: concat.map(subspec => this.map(subspec, params))\n    };\n  }\n\n  protected mapFacet(spec: GenericFacetSpec<UI, LI, Field>, params: P): GenericFacetSpec<UO, GenericLayerSpec<UO>, FO> {\n    return {\n      // as any is required here since TS cannot infer that FO may only be FieldName or Field, but not RepeatRef\n      ...(spec as any),\n      // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n      spec: this.map(spec.spec, params) as any\n    };\n  }\n\n  protected mapRepeat(spec: RepeatSpec, params: P): GenericSpec<UO, any, RO, FO> {\n    return {\n      ...spec,\n      // as any is required here since TS cannot infer that the output type satisfies the input type\n      spec: this.map(spec.spec as any, params)\n    };\n  }\n}\n","import {array, isBoolean} from 'vega-util';\nimport {SUM_OPS} from './aggregate';\nimport {getSecondaryRangeChannel, NonPositionChannel, NONPOSITION_CHANNELS} from './channel';\nimport {\n  channelDefType,\n  FieldName,\n  getFieldDef,\n  isFieldDef,\n  isFieldOrDatumDef,\n  PositionDatumDef,\n  PositionFieldDef,\n  TypedFieldDef,\n  vgField\n} from './channeldef';\nimport {channelHasField, Encoding, isAggregate} from './encoding';\nimport * as log from './log';\nimport {\n  ARC,\n  AREA,\n  BAR,\n  CIRCLE,\n  isMarkDef,\n  isPathMark,\n  LINE,\n  Mark,\n  MarkDef,\n  POINT,\n  RULE,\n  SQUARE,\n  TEXT,\n  TICK\n} from './mark';\nimport {ScaleType} from './scale';\nimport {contains} from './util';\n\nconst STACK_OFFSET_INDEX = {\n  zero: 1,\n  center: 1,\n  normalize: 1\n} as const;\n\nexport type StackOffset = keyof typeof STACK_OFFSET_INDEX;\n\nexport function isStackOffset(s: string): s is StackOffset {\n  return s in STACK_OFFSET_INDEX;\n}\n\nexport interface StackProperties {\n  /** Dimension axis of the stack. */\n  groupbyChannel?: 'x' | 'y' | 'theta' | 'radius';\n\n  /** Field for groupbyChannel. */\n  groupbyField?: FieldName;\n\n  /** Measure axis of the stack. */\n  fieldChannel: 'x' | 'y' | 'theta' | 'radius';\n\n  /** Stack-by fields e.g., color, detail */\n  stackBy: {\n    fieldDef: TypedFieldDef<string>;\n    channel: NonPositionChannel;\n  }[];\n\n  /**\n   * See `stack` property of Position Field Def.\n   */\n  offset: StackOffset;\n\n  /**\n   * Whether this stack will produce impute transform\n   */\n  impute: boolean;\n}\n\nexport const STACKABLE_MARKS = new Set<Mark>([ARC, BAR, AREA, RULE, POINT, CIRCLE, SQUARE, LINE, TEXT, TICK]);\nexport const STACK_BY_DEFAULT_MARKS = new Set<Mark>([BAR, AREA, ARC]);\n\nfunction potentialStackedChannel(\n  encoding: Encoding<string>,\n  x: 'x' | 'theta'\n): 'x' | 'y' | 'theta' | 'radius' | undefined {\n  const y = x === 'x' ? 'y' : 'radius';\n\n  const xDef = encoding[x];\n  const yDef = encoding[y];\n\n  if (isFieldDef(xDef) && isFieldDef(yDef)) {\n    if (channelDefType(xDef) === 'quantitative' && channelDefType(yDef) === 'quantitative') {\n      if (xDef.stack) {\n        return x;\n      } else if (yDef.stack) {\n        return y;\n      }\n      const xAggregate = isFieldDef(xDef) && !!xDef.aggregate;\n      const yAggregate = isFieldDef(yDef) && !!yDef.aggregate;\n      // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n      if (xAggregate !== yAggregate) {\n        return xAggregate ? x : y;\n      } else {\n        const xScale = xDef.scale?.type;\n        const yScale = yDef.scale?.type;\n\n        if (xScale && xScale !== 'linear') {\n          return y;\n        } else if (yScale && yScale !== 'linear') {\n          return x;\n        }\n      }\n    } else if (channelDefType(xDef) === 'quantitative') {\n      return x;\n    } else if (channelDefType(yDef) === 'quantitative') {\n      return y;\n    }\n  } else if (channelDefType(xDef) === 'quantitative') {\n    return x;\n  } else if (channelDefType(yDef) === 'quantitative') {\n    return y;\n  }\n  return undefined;\n}\n\nfunction getDimensionChannel(channel: 'x' | 'y' | 'theta' | 'radius') {\n  switch (channel) {\n    case 'x':\n      return 'y';\n    case 'y':\n      return 'x';\n    case 'theta':\n      return 'radius';\n    case 'radius':\n      return 'theta';\n  }\n}\n\n// Note: CompassQL uses this method and only pass in required properties of each argument object.\n// If required properties change, make sure to update CompassQL.\nexport function stack(\n  m: Mark | MarkDef,\n  encoding: Encoding<string>,\n  opt: {\n    disallowNonLinearStack?: boolean; // This option is for CompassQL\n  } = {}\n): StackProperties {\n  const mark = isMarkDef(m) ? m.type : m;\n  // Should have stackable mark\n  if (!STACKABLE_MARKS.has(mark)) {\n    return null;\n  }\n\n  // Run potential stacked twice, one for Cartesian and another for Polar,\n  // so text marks can be stacked in any of the coordinates.\n\n  // Note: The logic here is not perfectly correct.  If we want to support stacked dot plots where each dot is a pie chart with label, we have to change the stack logic here to separate Cartesian stacking for polar stacking.\n  // However, since we probably never want to do that, let's just note the limitation here.\n  const fieldChannel = potentialStackedChannel(encoding, 'x') || potentialStackedChannel(encoding, 'theta');\n\n  if (!fieldChannel) {\n    return null;\n  }\n\n  const stackedFieldDef = encoding[fieldChannel] as PositionFieldDef<string> | PositionDatumDef<string>;\n  const stackedField = isFieldDef(stackedFieldDef) ? vgField(stackedFieldDef, {}) : undefined;\n\n  let dimensionChannel: 'x' | 'y' | 'theta' | 'radius' = getDimensionChannel(fieldChannel);\n  let dimensionDef = encoding[dimensionChannel];\n\n  let dimensionField = isFieldDef(dimensionDef) ? vgField(dimensionDef, {}) : undefined;\n\n  // avoid grouping by the stacked field\n  if (dimensionField === stackedField) {\n    dimensionField = undefined;\n    dimensionDef = undefined;\n    dimensionChannel = undefined;\n  }\n\n  // Should have grouping level of detail that is different from the dimension field\n  const stackBy = NONPOSITION_CHANNELS.reduce((sc, channel) => {\n    // Ignore tooltip in stackBy (https://github.com/vega/vega-lite/issues/4001)\n    if (channel !== 'tooltip' && channelHasField(encoding, channel)) {\n      const channelDef = encoding[channel];\n      for (const cDef of array(channelDef)) {\n        const fieldDef = getFieldDef(cDef);\n        if (fieldDef.aggregate) {\n          continue;\n        }\n\n        // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n        const f = vgField(fieldDef, {});\n        if (\n          // if fielddef is a repeat, just include it in the stack by\n          !f ||\n          // otherwise, the field must be different from x and y fields.\n          f !== dimensionField\n        ) {\n          sc.push({channel, fieldDef});\n        }\n      }\n    }\n    return sc;\n  }, []);\n\n  // Automatically determine offset\n  let offset: StackOffset;\n  if (stackedFieldDef.stack !== undefined) {\n    if (isBoolean(stackedFieldDef.stack)) {\n      offset = stackedFieldDef.stack ? 'zero' : null;\n    } else {\n      offset = stackedFieldDef.stack;\n    }\n  } else if (stackBy.length > 0 && STACK_BY_DEFAULT_MARKS.has(mark)) {\n    // Bar and Area with sum ops are automatically stacked by default\n    offset = 'zero';\n  }\n\n  if (!offset || !isStackOffset(offset)) {\n    return null;\n  }\n\n  if (isAggregate(encoding) && stackBy.length === 0) {\n    return null;\n  }\n\n  // warn when stacking non-linear\n  if (stackedFieldDef.scale && stackedFieldDef.scale.type && stackedFieldDef.scale.type !== ScaleType.LINEAR) {\n    if (opt.disallowNonLinearStack) {\n      return null;\n    } else {\n      log.warn(log.message.cannotStackNonLinearScale(stackedFieldDef.scale.type));\n    }\n  }\n\n  // Check if it is a ranged mark\n  if (isFieldOrDatumDef(encoding[getSecondaryRangeChannel(fieldChannel)])) {\n    if (stackedFieldDef.stack !== undefined) {\n      log.warn(log.message.cannotStackRangedMark(fieldChannel));\n    }\n    return null;\n  }\n\n  // Warn if stacking non-summative aggregate\n  if (isFieldDef(stackedFieldDef) && stackedFieldDef.aggregate && !contains(SUM_OPS, stackedFieldDef.aggregate)) {\n    log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n  }\n\n  return {\n    groupbyChannel: dimensionDef ? dimensionChannel : undefined,\n    groupbyField: dimensionField,\n    fieldChannel,\n    impute: stackedFieldDef.impute === null ? false : isPathMark(mark),\n    stackBy,\n    offset\n  };\n}\n","import {isObject} from 'vega-util';\nimport {Config} from '../config';\nimport {Encoding} from '../encoding';\nimport {AreaConfig, isMarkDef, LineConfig, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {isUnitSpec} from '../spec/unit';\nimport {stack} from '../stack';\nimport {keys, omit, pick} from '../util';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ntype UnitSpecWithPathOverlay = GenericUnitSpec<Encoding<string>, Mark | MarkDef<'line' | 'area' | 'rule' | 'trail'>>;\n\nfunction dropLineAndPoint(markDef: MarkDef): MarkDef | Mark {\n  const {point: _point, line: _line, ...mark} = markDef;\n\n  return keys(mark).length > 1 ? mark : mark.type;\n}\n\nfunction dropLineAndPointFromConfig(config: Config) {\n  for (const mark of ['line', 'area', 'rule', 'trail'] as const) {\n    if (config[mark]) {\n      config = {\n        ...config,\n        // TODO: remove as any\n        [mark]: omit(config[mark], ['point', 'line'] as any)\n      };\n    }\n  }\n  return config;\n}\n\nfunction getPointOverlay(markDef: MarkDef, markConfig: LineConfig = {}, encoding: Encoding<string>): MarkConfig {\n  if (markDef.point === 'transparent') {\n    return {opacity: 0};\n  } else if (markDef.point) {\n    // truthy : true or object\n    return isObject(markDef.point) ? markDef.point : {};\n  } else if (markDef.point !== undefined) {\n    // false or null\n    return null;\n  } else {\n    // undefined (not disabled)\n    if (markConfig.point || encoding.shape) {\n      // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n      return isObject(markConfig.point) ? markConfig.point : {};\n    }\n    // markDef.point is defined as falsy\n    return undefined;\n  }\n}\n\nfunction getLineOverlay(markDef: MarkDef, markConfig: AreaConfig = {}): MarkConfig {\n  if (markDef.line) {\n    // true or object\n    return markDef.line === true ? {} : markDef.line;\n  } else if (markDef.line !== undefined) {\n    // false or null\n    return null;\n  } else {\n    // undefined (not disabled)\n    if (markConfig.line) {\n      // enable line overlay if config[mark].line is truthy\n      return markConfig.line === true ? {} : markConfig.line;\n    }\n    // markDef.point is defined as falsy\n    return undefined;\n  }\n}\n\nexport class PathOverlayNormalizer implements NonFacetUnitNormalizer<UnitSpecWithPathOverlay> {\n  public name = 'path-overlay';\n\n  public hasMatchingType(spec: GenericUnitSpec<any, Mark | MarkDef>, config: Config): spec is UnitSpecWithPathOverlay {\n    if (isUnitSpec(spec)) {\n      const {mark, encoding} = spec;\n      const markDef = isMarkDef(mark) ? mark : {type: mark};\n      switch (markDef.type) {\n        case 'line':\n        case 'rule':\n        case 'trail':\n          return !!getPointOverlay(markDef, config[markDef.type], encoding);\n        case 'area':\n          return (\n            // false / null are also included as we want to remove the properties\n            !!getPointOverlay(markDef, config[markDef.type], encoding) ||\n            !!getLineOverlay(markDef, config[markDef.type])\n          );\n      }\n    }\n    return false;\n  }\n\n  public run(spec: UnitSpecWithPathOverlay, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n    const {config} = params;\n    const {selection, projection, encoding, mark, ...outerSpec} = spec;\n    const markDef: MarkDef = isMarkDef(mark) ? mark : {type: mark};\n\n    const pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n    const lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n\n    const layer: NormalizedUnitSpec[] = [\n      {\n        ...(selection ? {selection} : {}),\n        mark: dropLineAndPoint({\n          // TODO: extract this 0.7 to be shared with default opacity for point/tick/...\n          ...(markDef.type === 'area' && markDef.opacity === undefined && markDef.fillOpacity === undefined\n            ? {opacity: 0.7}\n            : {}),\n          ...markDef\n        }),\n        // drop shape from encoding as this might be used to trigger point overlay\n        encoding: omit(encoding, ['shape'])\n      }\n    ];\n\n    // FIXME: determine rules for applying selections.\n\n    // Need to copy stack config to overlayed layer\n    const stackProps = stack(markDef, encoding);\n\n    let overlayEncoding = encoding;\n    if (stackProps) {\n      const {fieldChannel: stackFieldChannel, offset} = stackProps;\n      overlayEncoding = {\n        ...encoding,\n        [stackFieldChannel]: {\n          ...encoding[stackFieldChannel],\n          ...(offset ? {stack: offset} : {})\n        }\n      };\n    }\n\n    if (lineOverlay) {\n      layer.push({\n        ...(projection ? {projection} : {}),\n        mark: {\n          type: 'line',\n          ...pick(markDef, ['clip', 'interpolate', 'tension', 'tooltip']),\n          ...lineOverlay\n        },\n        encoding: overlayEncoding\n      });\n    }\n    if (pointOverlay) {\n      layer.push({\n        ...(projection ? {projection} : {}),\n        mark: {\n          type: 'point',\n          opacity: 1,\n          filled: true,\n          ...pick(markDef, ['clip', 'tooltip']),\n          ...pointOverlay\n        },\n        encoding: overlayEncoding\n      });\n    }\n\n    return normalize(\n      {\n        ...outerSpec,\n        layer\n      },\n      {\n        ...params,\n        config: dropLineAndPointFromConfig(config)\n      }\n    );\n  }\n}\n","import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../channel';\nimport {isFieldOrDatumDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {Scale} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {isEmpty} from '../util';\nimport {NonFacetUnitNormalizer} from './base';\n\ntype UnitSpecWithRangeStep = GenericUnitSpec<Encoding<string>, any>; // this is not accurate, but it's not worth making it accurate\n\nexport class RangeStepNormalizer implements NonFacetUnitNormalizer<UnitSpecWithRangeStep> {\n  public name = 'RangeStep';\n\n  public hasMatchingType(spec: GenericSpec<any, any, any, any>): spec is UnitSpecWithRangeStep {\n    if (isUnitSpec(spec) && spec.encoding) {\n      for (const channel of POSITION_SCALE_CHANNELS) {\n        const def = spec.encoding[channel];\n        if (def && isFieldOrDatumDef(def)) {\n          if (def?.scale?.['rangeStep']) {\n            return true;\n          }\n        }\n      }\n    }\n    return false;\n  }\n\n  public run(spec: UnitSpecWithRangeStep): NormalizedUnitSpec {\n    const sizeMixins = {};\n    let encoding = {...spec.encoding};\n\n    for (const channel of POSITION_SCALE_CHANNELS) {\n      const sizeType = getSizeChannel(channel);\n      const def = encoding[channel];\n      if (def && isFieldOrDatumDef(def)) {\n        if (def?.scale?.['rangeStep']) {\n          const {scale, ...defWithoutScale} = def;\n\n          const {rangeStep, ...scaleWithoutRangeStep} = scale as Scale & {rangeStep: number};\n          sizeMixins[sizeType] = {step: scale['rangeStep']};\n\n          log.warn(log.message.RANGE_STEP_DEPRECATED);\n\n          encoding = {\n            ...encoding,\n            [channel]: {\n              ...defWithoutScale,\n              ...(isEmpty(scaleWithoutRangeStep) ? {} : {scale: scaleWithoutRangeStep})\n            }\n          };\n        }\n      }\n    }\n    return {\n      ...sizeMixins,\n      ...spec,\n      encoding\n    };\n  }\n}\n","import {hasOwnProperty, isArray} from 'vega-util';\nimport {\n  ChannelDef,\n  DatumDef,\n  Field,\n  FieldDef,\n  FieldName,\n  hasConditionalFieldOrDatumDef,\n  isConditionalDef,\n  isFieldDef,\n  isFieldOrDatumDef,\n  isRepeatRef,\n  isSortableFieldDef,\n  ScaleFieldDef,\n  ValueDef\n} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isSortField} from '../sort';\nimport {FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\n\nexport interface RepeaterValue {\n  row?: string;\n  column?: string;\n\n  repeat?: string;\n\n  layer?: string;\n}\n\nexport function replaceRepeaterInFacet(\n  facet: FacetFieldDef<Field> | FacetMapping<Field>,\n  repeater: RepeaterValue\n): FacetFieldDef<FieldName> | FacetMapping<FieldName> {\n  if (!repeater) {\n    return facet as FacetFieldDef<FieldName>;\n  }\n\n  if (isFacetMapping(facet)) {\n    return replaceRepeaterInMapping(facet, repeater) as FacetMapping<FieldName>;\n  }\n  return replaceRepeaterInFieldDef(facet, repeater) as FacetFieldDef<FieldName>;\n}\n\nexport function replaceRepeaterInEncoding<E extends Encoding<Field>>(\n  encoding: E,\n  repeater: RepeaterValue\n): Encoding<FieldName> {\n  if (!repeater) {\n    return encoding as Encoding<FieldName>;\n  }\n\n  return replaceRepeaterInMapping(encoding, repeater) as Encoding<FieldName>;\n}\n\n/**\n * Replaces repeated value and returns if the repeated value is valid.\n */\nfunction replaceRepeatInProp<T>(prop: keyof T, o: T, repeater: RepeaterValue): T {\n  const val = o[prop];\n  if (isRepeatRef(val)) {\n    if (val.repeat in repeater) {\n      return {...o, [prop]: repeater[val.repeat]};\n    } else {\n      log.warn(log.message.noSuchRepeatedValue(val.repeat));\n      return undefined;\n    }\n  }\n  return o;\n}\n\n/**\n * Replace repeater values in a field def with the concrete field name.\n */\n\nfunction replaceRepeaterInFieldDef(fieldDef: FieldDef<Field>, repeater: RepeaterValue) {\n  fieldDef = replaceRepeatInProp('field', fieldDef, repeater);\n\n  if (fieldDef === undefined) {\n    // the field def should be ignored\n    return undefined;\n  } else if (fieldDef === null) {\n    return null;\n  }\n\n  if (isSortableFieldDef(fieldDef) && isSortField(fieldDef.sort)) {\n    const sort = replaceRepeatInProp('field', fieldDef.sort, repeater);\n    fieldDef = {\n      ...fieldDef,\n      ...(sort ? {sort} : {})\n    };\n  }\n\n  return fieldDef as ScaleFieldDef<FieldName>;\n}\n\nfunction replaceRepeaterInFieldOrDatumDef(def: FieldDef<Field> | DatumDef<Field>, repeater: RepeaterValue) {\n  if (isFieldDef(def)) {\n    return replaceRepeaterInFieldDef(def, repeater);\n  } else {\n    const datumDef = replaceRepeatInProp('datum', def, repeater);\n    if (datumDef !== def && !datumDef.type) {\n      datumDef.type = 'nominal';\n    }\n    return datumDef;\n  }\n}\n\nfunction replaceRepeaterInChannelDef(channelDef: ChannelDef<Field>, repeater: RepeaterValue) {\n  if (isFieldOrDatumDef(channelDef)) {\n    const fd = replaceRepeaterInFieldOrDatumDef(channelDef, repeater);\n    if (fd) {\n      return fd;\n    } else if (isConditionalDef<ChannelDef<Field>>(channelDef)) {\n      return {condition: channelDef.condition};\n    }\n  } else {\n    if (hasConditionalFieldOrDatumDef(channelDef)) {\n      const fd = replaceRepeaterInFieldOrDatumDef(channelDef.condition, repeater);\n      if (fd) {\n        return {\n          ...channelDef,\n          condition: fd\n        } as ChannelDef;\n      } else {\n        const {condition, ...channelDefWithoutCondition} = channelDef;\n        return channelDefWithoutCondition as ChannelDef;\n      }\n    }\n    return channelDef as ValueDef;\n  }\n  return undefined;\n}\n\ntype EncodingOrFacet<F extends Field> = Encoding<F> | FacetMapping<F>;\n\nfunction replaceRepeaterInMapping(\n  mapping: EncodingOrFacet<Field>,\n  repeater: RepeaterValue\n): EncodingOrFacet<FieldName> {\n  const out: EncodingOrFacet<FieldName> = {};\n  for (const channel in mapping) {\n    if (hasOwnProperty(mapping, channel)) {\n      const channelDef: ChannelDef<Field> | ChannelDef<Field>[] = mapping[channel];\n\n      if (isArray(channelDef)) {\n        // array cannot have condition\n        out[channel] = (channelDef as ChannelDef<Field>[]) // somehow we need to cast it here\n          .map(cd => replaceRepeaterInChannelDef(cd, repeater))\n          .filter(cd => cd);\n      } else {\n        const cd = replaceRepeaterInChannelDef(channelDef, repeater);\n        if (cd !== undefined) {\n          out[channel] = cd;\n        }\n      }\n    }\n  }\n  return out;\n}\n","import {isBinned} from '../bin';\nimport {getMainRangeChannel, SECONDARY_RANGE_CHANNEL} from '../channel';\nimport {Field, isDatumDef, isFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec} from '../spec/unit';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ninterface EncodingX2Mixins {\n  x2: Encoding<Field>['x2'];\n}\n\ninterface EncodingY2Mixins {\n  y2: Encoding<Field>['y2'];\n}\n\ntype RangedLineSpec = GenericUnitSpec<Encoding<Field> & (EncodingX2Mixins | EncodingY2Mixins), 'line'>;\n\nexport class RuleForRangedLineNormalizer implements NonFacetUnitNormalizer<RangedLineSpec> {\n  public name = 'RuleForRangedLine';\n\n  public hasMatchingType(spec: GenericSpec<any, any, any, any>): spec is RangedLineSpec {\n    if (isUnitSpec(spec)) {\n      const {encoding, mark} = spec;\n      if (mark === 'line') {\n        for (const channel of SECONDARY_RANGE_CHANNEL) {\n          const mainChannel = getMainRangeChannel(channel);\n          const mainChannelDef = encoding[mainChannel];\n\n          if (encoding[channel]) {\n            if ((isFieldDef(mainChannelDef) && !isBinned(mainChannelDef.bin)) || isDatumDef(mainChannelDef)) {\n              return true;\n            }\n          }\n        }\n      }\n    }\n    return false;\n  }\n\n  public run(spec: RangedLineSpec, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n    const {encoding} = spec;\n    log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n\n    return normalize(\n      {\n        ...spec,\n        mark: 'rule'\n      },\n      params\n    );\n  }\n}\n","import {isArray} from 'vega-util';\nimport {COLUMN, FACET, ROW} from '../channel';\nimport {Field, FieldName} from '../channeldef';\nimport {boxPlotNormalizer} from '../compositemark/boxplot';\nimport {errorBandNormalizer} from '../compositemark/errorband';\nimport {errorBarNormalizer} from '../compositemark/errorbar';\nimport {channelHasField, Encoding} from '../encoding';\nimport * as log from '../log';\nimport {Projection} from '../projection';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, UnitSpec} from '../spec';\nimport {GenericCompositionLayoutWithColumns} from '../spec/base';\nimport {GenericConcatSpec} from '../spec/concat';\nimport {\n  FacetEncodingFieldDef,\n  FacetFieldDef,\n  FacetMapping,\n  GenericFacetSpec,\n  isFacetMapping,\n  NormalizedFacetSpec\n} from '../spec/facet';\nimport {NormalizedSpec} from '../spec/index';\nimport {NormalizedLayerSpec} from '../spec/layer';\nimport {SpecMapper} from '../spec/map';\nimport {isLayerRepeatSpec, LayerRepeatSpec, NonLayerRepeatSpec, RepeatSpec} from '../spec/repeat';\nimport {isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {keys, omit, varName, isEmpty} from '../util';\nimport {NonFacetUnitNormalizer, NormalizerParams} from './base';\nimport {PathOverlayNormalizer} from './pathoverlay';\nimport {RangeStepNormalizer} from './rangestep';\nimport {replaceRepeaterInEncoding, replaceRepeaterInFacet} from './repeater';\nimport {RuleForRangedLineNormalizer} from './ruleforrangedline';\n\nexport class CoreNormalizer extends SpecMapper<NormalizerParams, FacetedUnitSpec, LayerSpec> {\n  private nonFacetUnitNormalizers: NonFacetUnitNormalizer<any>[] = [\n    boxPlotNormalizer,\n    errorBarNormalizer,\n    errorBandNormalizer,\n    new PathOverlayNormalizer(),\n    new RuleForRangedLineNormalizer(),\n    new RangeStepNormalizer()\n  ];\n\n  public map(spec: GenericSpec<FacetedUnitSpec, LayerSpec, RepeatSpec, Field>, params: NormalizerParams) {\n    // Special handling for a faceted unit spec as it can return a facet spec, not just a layer or unit spec like a normal unit spec.\n    if (isUnitSpec(spec)) {\n      const hasRow = channelHasField(spec.encoding, ROW);\n      const hasColumn = channelHasField(spec.encoding, COLUMN);\n      const hasFacet = channelHasField(spec.encoding, FACET);\n\n      if (hasRow || hasColumn || hasFacet) {\n        return this.mapFacetedUnit(spec, params);\n      }\n    }\n\n    return super.map(spec, params);\n  }\n\n  // This is for normalizing non-facet unit\n  public mapUnit(spec: UnitSpec, params: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n    const {parentEncoding, parentProjection} = params;\n\n    const specWithReplacedEncoding = {\n      ...spec,\n      encoding: replaceRepeaterInEncoding(spec.encoding, params.repeater)\n    };\n\n    if (parentEncoding || parentProjection) {\n      return this.mapUnitWithParentEncodingOrProjection(specWithReplacedEncoding, params);\n    }\n\n    const normalizeLayerOrUnit = this.mapLayerOrUnit.bind(this);\n\n    for (const unitNormalizer of this.nonFacetUnitNormalizers) {\n      if (unitNormalizer.hasMatchingType(specWithReplacedEncoding, params.config)) {\n        return unitNormalizer.run(specWithReplacedEncoding, params, normalizeLayerOrUnit);\n      }\n    }\n\n    return specWithReplacedEncoding as NormalizedUnitSpec;\n  }\n\n  protected mapRepeat(\n    spec: RepeatSpec,\n    params: NormalizerParams\n  ): GenericConcatSpec<NormalizedSpec> | NormalizedLayerSpec {\n    if (isLayerRepeatSpec(spec)) {\n      return this.mapLayerRepeat(spec, params);\n    } else {\n      return this.mapNonLayerRepeat(spec, params);\n    }\n  }\n\n  private mapLayerRepeat(\n    spec: LayerRepeatSpec,\n    params: NormalizerParams\n  ): GenericConcatSpec<NormalizedSpec> | NormalizedLayerSpec {\n    const {repeat, spec: childSpec, ...rest} = spec;\n    const {row, column, layer} = repeat;\n\n    const {repeater = {}, repeaterPrefix = ''} = params;\n\n    if (row || column) {\n      return this.mapRepeat(\n        {\n          ...spec,\n          repeat: {\n            ...(row ? {row} : {}),\n            ...(column ? {column} : {})\n          },\n          spec: {\n            repeat: {layer},\n            spec: childSpec\n          }\n        },\n        params\n      );\n    } else {\n      return {\n        ...rest,\n        layer: layer.map(layerValue => {\n          const childRepeater = {\n            ...repeater,\n            layer: layerValue\n          };\n\n          const childName = (childSpec.name || '') + repeaterPrefix + `child__layer_${varName(layerValue)}`;\n\n          const child = this.mapLayerOrUnit(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n          child.name = childName;\n\n          return child;\n        })\n      };\n    }\n  }\n\n  private mapNonLayerRepeat(spec: NonLayerRepeatSpec, params: NormalizerParams): GenericConcatSpec<NormalizedSpec> {\n    const {repeat, spec: childSpec, data, ...remainingProperties} = spec;\n\n    if (!isArray(repeat) && spec.columns) {\n      // is repeat with row/column\n      spec = omit(spec, ['columns']);\n      log.warn(log.message.columnsNotSupportByRowCol('repeat'));\n    }\n\n    const concat: NormalizedSpec[] = [];\n\n    const {repeater = {}, repeaterPrefix = ''} = params;\n\n    const row = (!isArray(repeat) && repeat.row) || [repeater ? repeater.row : null];\n    const column = (!isArray(repeat) && repeat.column) || [repeater ? repeater.column : null];\n\n    const repeatValues = (isArray(repeat) && repeat) || [repeater ? repeater.repeat : null];\n\n    // cross product\n    for (const repeatValue of repeatValues) {\n      for (const rowValue of row) {\n        for (const columnValue of column) {\n          const childRepeater = {\n            repeat: repeatValue,\n            row: rowValue,\n            column: columnValue,\n            layer: repeater.layer\n          };\n\n          const childName =\n            (childSpec.name || '') +\n            repeaterPrefix +\n            'child__' +\n            (isArray(repeat)\n              ? `${varName(repeatValue)}`\n              : (repeat.row ? `row_${varName(rowValue)}` : '') +\n                (repeat.column ? `column_${varName(columnValue)}` : ''));\n\n          const child = this.map(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n          child.name = childName;\n\n          // we move data up\n          concat.push(omit(child, ['data']) as NormalizedSpec);\n        }\n      }\n    }\n\n    const columns = isArray(repeat) ? spec.columns : repeat.column ? repeat.column.length : 1;\n    return {\n      data: childSpec.data ?? data, // data from child spec should have precedence\n      align: 'all',\n      ...remainingProperties,\n      columns,\n      concat\n    };\n  }\n\n  protected mapFacet(\n    spec: GenericFacetSpec<UnitSpec, LayerSpec, Field>,\n    params: NormalizerParams\n  ): GenericFacetSpec<NormalizedUnitSpec, NormalizedLayerSpec, FieldName> {\n    const {facet} = spec;\n\n    if (isFacetMapping(facet) && spec.columns) {\n      // is facet with row/column\n      spec = omit(spec, ['columns']);\n      log.warn(log.message.columnsNotSupportByRowCol('facet'));\n    }\n\n    return super.mapFacet(spec, params);\n  }\n\n  private mapUnitWithParentEncodingOrProjection(\n    spec: FacetedUnitSpec,\n    params: NormalizerParams\n  ): NormalizedUnitSpec | NormalizedLayerSpec {\n    const {encoding, projection} = spec;\n    const {parentEncoding, parentProjection, config} = params;\n    const mergedProjection = mergeProjection({parentProjection, projection});\n    const mergedEncoding = mergeEncoding({\n      parentEncoding,\n      encoding: replaceRepeaterInEncoding(encoding, params.repeater)\n    });\n\n    return this.mapUnit(\n      {\n        ...spec,\n        ...(mergedProjection ? {projection: mergedProjection} : {}),\n        ...(mergedEncoding ? {encoding: mergedEncoding} : {})\n      },\n      {config}\n    );\n  }\n\n  private mapFacetedUnit(spec: FacetedUnitSpec, params: NormalizerParams): NormalizedFacetSpec {\n    // New encoding in the inside spec should not contain row / column\n    // as row/column should be moved to facet\n    const {row, column, facet, ...encoding} = spec.encoding;\n\n    // Mark and encoding should be moved into the inner spec\n    const {mark, width, projection, height, view, selection, encoding: _, ...outerSpec} = spec;\n\n    const {facetMapping, layout} = this.getFacetMappingAndLayout({row, column, facet}, params);\n\n    const newEncoding = replaceRepeaterInEncoding(encoding, params.repeater);\n\n    return this.mapFacet(\n      {\n        ...outerSpec,\n        ...layout,\n\n        // row / column has higher precedence than facet\n        facet: facetMapping,\n        spec: {\n          ...(width ? {width} : {}),\n          ...(height ? {height} : {}),\n          ...(view ? {view} : {}),\n          ...(projection ? {projection} : {}),\n          mark,\n          encoding: newEncoding,\n          ...(selection ? {selection} : {})\n        }\n      },\n      params\n    );\n  }\n\n  private getFacetMappingAndLayout(\n    facets: {\n      row: FacetEncodingFieldDef<Field>;\n      column: FacetEncodingFieldDef<Field>;\n      facet: FacetEncodingFieldDef<Field>;\n    },\n    params: NormalizerParams\n  ): {facetMapping: FacetMapping<FieldName> | FacetFieldDef<FieldName>; layout: GenericCompositionLayoutWithColumns} {\n    const {row, column, facet} = facets;\n\n    if (row || column) {\n      if (facet) {\n        log.warn(log.message.facetChannelDropped([...(row ? [ROW] : []), ...(column ? [COLUMN] : [])]));\n      }\n\n      const facetMapping = {};\n      const layout = {};\n\n      for (const channel of [ROW, COLUMN]) {\n        const def = facets[channel];\n        if (def) {\n          const {align, center, spacing, columns, ...defWithoutLayout} = def;\n          facetMapping[channel] = defWithoutLayout;\n\n          for (const prop of ['align', 'center', 'spacing'] as const) {\n            if (def[prop] !== undefined) {\n              layout[prop] = layout[prop] ?? {};\n              layout[prop][channel] = def[prop];\n            }\n          }\n        }\n      }\n\n      return {facetMapping, layout};\n    } else {\n      const {align, center, spacing, columns, ...facetMapping} = facet;\n      return {\n        facetMapping: replaceRepeaterInFacet(facetMapping, params.repeater),\n        layout: {\n          ...(align ? {align} : {}),\n          ...(center ? {center} : {}),\n          ...(spacing ? {spacing} : {}),\n          ...(columns ? {columns} : {})\n        }\n      };\n    }\n  }\n\n  public mapLayer(\n    spec: LayerSpec,\n    {parentEncoding, parentProjection, ...otherParams}: NormalizerParams\n  ): NormalizedLayerSpec {\n    // Special handling for extended layer spec\n\n    const {encoding, projection, ...rest} = spec;\n    const params: NormalizerParams = {\n      ...otherParams,\n      parentEncoding: mergeEncoding({parentEncoding, encoding}),\n      parentProjection: mergeProjection({parentProjection, projection})\n    };\n    return super.mapLayer(rest, params);\n  }\n}\n\nfunction mergeEncoding(opt: {parentEncoding: Encoding<any>; encoding: Encoding<any>}): Encoding<any> {\n  const {parentEncoding, encoding} = opt;\n  if (parentEncoding && encoding) {\n    const overriden = keys(parentEncoding).reduce((o, key) => {\n      if (encoding[key]) {\n        o.push(key);\n      }\n      return o;\n    }, []);\n\n    if (overriden.length > 0) {\n      log.warn(log.message.encodingOverridden(overriden));\n    }\n  }\n\n  const merged = {\n    ...(parentEncoding ?? {}),\n    ...(encoding ?? {})\n  };\n  return isEmpty(merged) ? undefined : merged;\n}\n\nfunction mergeProjection(opt: {parentProjection: Projection; projection: Projection}) {\n  const {parentProjection, projection} = opt;\n  if (parentProjection && projection) {\n    log.warn(log.message.projectionOverridden({parentProjection, projection}));\n  }\n  return projection ?? parentProjection;\n}\n","import {Field} from '../channeldef';\nimport {isString} from 'vega-util';\nimport {Config, initConfig} from '../config';\nimport * as log from '../log';\nimport {\n  LayerSpec,\n  FacetedUnitSpec,\n  GenericSpec,\n  isLayerSpec,\n  isUnitSpec,\n  LayoutSizeMixins,\n  NormalizedSpec,\n  TopLevelSpec,\n  UnitSpec,\n  RepeatSpec\n} from '../spec';\nimport {AutoSizeParams, AutosizeType, TopLevel} from '../spec/toplevel';\nimport {deepEqual} from '../util';\nimport {NormalizerParams} from './base';\nimport {CoreNormalizer} from './core';\n\nexport function normalize(\n  spec: TopLevelSpec & LayoutSizeMixins,\n  config?: Config\n): TopLevel<NormalizedSpec> & LayoutSizeMixins {\n  if (config === undefined) {\n    config = initConfig(spec.config);\n  }\n\n  const normalizedSpec = normalizeGenericSpec(spec, config);\n\n  const {width, height} = spec;\n  const autosize = normalizeAutoSize(normalizedSpec, {width, height, autosize: spec.autosize}, config);\n\n  return {\n    ...normalizedSpec,\n    ...(autosize ? {autosize} : {})\n  };\n}\n\nconst normalizer = new CoreNormalizer();\n\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n */\nfunction normalizeGenericSpec(\n  spec: GenericSpec<UnitSpec, LayerSpec, RepeatSpec, Field> | FacetedUnitSpec | RepeatSpec,\n  config: Config = {}\n) {\n  return normalizer.map(spec, {config});\n}\n\nfunction _normalizeAutoSize(autosize: AutosizeType | AutoSizeParams) {\n  return isString(autosize) ? {type: autosize} : autosize ?? {};\n}\n\n/**\n * Normalize autosize and deal with width or height == \"container\".\n */\nexport function normalizeAutoSize(\n  spec: TopLevel<NormalizedSpec>,\n  sizeInfo: {autosize: AutosizeType | AutoSizeParams} & LayoutSizeMixins,\n  config?: Config\n) {\n  let {width, height} = sizeInfo;\n\n  const isFitCompatible = isUnitSpec(spec) || isLayerSpec(spec);\n  const autosizeDefault: AutoSizeParams = {};\n\n  if (!isFitCompatible) {\n    // If spec is not compatible with autosize == \"fit\", discard width/height == container\n    if (width == 'container') {\n      log.warn(log.message.containerSizeNonSingle('width'));\n      width = undefined;\n    }\n    if (height == 'container') {\n      log.warn(log.message.containerSizeNonSingle('height'));\n      height = undefined;\n    }\n  } else {\n    // Default autosize parameters to fit when width/height is \"container\"\n    if (width == 'container' && height == 'container') {\n      autosizeDefault.type = 'fit';\n      autosizeDefault.contains = 'padding';\n    } else if (width == 'container') {\n      autosizeDefault.type = 'fit-x';\n      autosizeDefault.contains = 'padding';\n    } else if (height == 'container') {\n      autosizeDefault.type = 'fit-y';\n      autosizeDefault.contains = 'padding';\n    }\n  }\n\n  const autosize: AutoSizeParams = {\n    type: 'pad',\n    ...autosizeDefault,\n    ...(config ? _normalizeAutoSize(config.autosize) : {}),\n    ..._normalizeAutoSize(spec.autosize)\n  };\n\n  if (autosize.type === 'fit' && !isFitCompatible) {\n    log.warn(log.message.FIT_NON_SINGLE);\n    autosize.type = 'pad';\n  }\n\n  if (width == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-x')) {\n    log.warn(log.message.containerSizeNotCompatibleWithAutosize('width'));\n  }\n  if (height == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-y')) {\n    log.warn(log.message.containerSizeNotCompatibleWithAutosize('height'));\n  }\n\n  // Delete autosize property if it's Vega's default\n  if (deepEqual(autosize, {type: 'pad'})) {\n    return undefined;\n  }\n\n  return autosize;\n}\n\nexport {NormalizerParams};\n","import {Color, SignalRef} from 'vega';\nimport {BaseSpec} from '.';\nimport {getPositionScaleChannel} from '../channel';\nimport {Config} from '../config';\nimport {InlineDataset} from '../data';\nimport {Dict} from '../util';\n\n/**\n * @minimum 0\n */\nexport type Padding = number | {top?: number; bottom?: number; left?: number; right?: number};\n\nexport type Datasets = Dict<InlineDataset>;\n\nexport type TopLevel<S extends BaseSpec> = S &\n  TopLevelProperties & {\n    /**\n     * URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.\n     * @format uri\n     */\n    $schema?: string;\n\n    /**\n     * Vega-Lite configuration object. This property can only be defined at the top-level of a specification.\n     */\n    config?: Config;\n\n    /**\n     * A global data store for named datasets. This is a mapping from names to inline datasets.\n     * This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property.\n     */\n    datasets?: Datasets;\n\n    /**\n     * Optional metadata that will be passed to Vega.\n     * This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.\n     */\n    usermeta?: Dict<unknown>;\n  };\n\nexport interface TopLevelProperties {\n  /**\n   * CSS color property to use as the background of the entire view.\n   *\n   * __Default value:__ `\"white\"`\n   */\n  background?: Color | SignalRef;\n\n  /**\n   * The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\n   * If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n   *\n   * __Default value__: `5`\n   */\n  padding?: Padding | SignalRef;\n\n  /**\n   * How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\n   * Object values can additionally specify parameters for content sizing and automatic resizing.\n   *\n   * __Default value__: `pad`\n   */\n  autosize?: AutosizeType | AutoSizeParams; // Vega actually supports signal for autosize. However, we need to check autosize at compile time to infer the rest of the spec. Thus VL's autosize won't support SignalRef for now.\n}\n\nexport type FitType = 'fit' | 'fit-x' | 'fit-y';\n\nexport function isFitType(autoSizeType: AutosizeType): autoSizeType is FitType {\n  return autoSizeType === 'fit' || autoSizeType === 'fit-x' || autoSizeType === 'fit-y';\n}\n\nexport function getFitType(sizeType?: 'width' | 'height'): FitType {\n  return sizeType ? (`fit-${getPositionScaleChannel(sizeType)}` as FitType) : 'fit';\n}\n\nexport type AutosizeType = 'pad' | 'none' | 'fit' | 'fit-x' | 'fit-y';\n\nexport interface AutoSizeParams {\n  /**\n   * The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`,  or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n   *\n   * __Default value__: `\"pad\"`\n   */\n  type?: AutosizeType;\n\n  /**\n   * A boolean flag indicating if autosize layout should be re-calculated on every view update.\n   *\n   * __Default value__: `false`\n   */\n  resize?: boolean;\n\n  /**\n   * Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n   *\n   * __Default value__: `\"content\"`\n   */\n  contains?: 'content' | 'padding';\n}\n\nconst TOP_LEVEL_PROPERTIES: (keyof TopLevelProperties)[] = [\n  'background',\n  'padding'\n  // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\n\nexport function extractTopLevelProperties<T extends TopLevelProperties>(t: T) {\n  return TOP_LEVEL_PROPERTIES.reduce((o, p) => {\n    if (t && t[p] !== undefined) {\n      o[p] = t[p];\n    }\n    return o;\n  }, {});\n}\n","import * as log from '../log';\nimport {deepEqual, duplicate, getFirstDefined, keys} from '../util';\n\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\nexport class Split<T extends object> {\n  constructor(public readonly explicit: Partial<T> = {}, public readonly implicit: Partial<T> = {}) {}\n\n  public clone() {\n    return new Split(duplicate(this.explicit), duplicate(this.implicit));\n  }\n\n  public combine(): Partial<T> {\n    // FIXME remove \"as any\".\n    // Add \"as any\" to avoid an error \"Spread types may only be created from object types\".\n    return {\n      ...(this.explicit as any), // Explicit properties comes first\n      ...(this.implicit as any)\n    };\n  }\n\n  public get<K extends keyof T>(key: K): T[K] {\n    // Explicit has higher precedence\n    return getFirstDefined(this.explicit[key], this.implicit[key]);\n  }\n\n  public getWithExplicit<K extends keyof T>(key: K): Explicit<T[K]> {\n    // Explicit has higher precedence\n    if (this.explicit[key] !== undefined) {\n      return {explicit: true, value: this.explicit[key]};\n    } else if (this.implicit[key] !== undefined) {\n      return {explicit: false, value: this.implicit[key]};\n    }\n    return {explicit: false, value: undefined};\n  }\n\n  public setWithExplicit<K extends keyof T>(key: K, value: Explicit<T[K]>) {\n    if (value.value !== undefined) {\n      this.set(key, value.value, value.explicit);\n    }\n  }\n\n  public set<K extends keyof T>(key: K, value: T[K], explicit: boolean) {\n    delete this[explicit ? 'implicit' : 'explicit'][key];\n    this[explicit ? 'explicit' : 'implicit'][key] = value;\n    return this;\n  }\n\n  public copyKeyFromSplit<S extends T>(key: keyof T, s: Split<S>) {\n    // Explicit has higher precedence\n    if (s.explicit[key] !== undefined) {\n      this.set(key, s.explicit[key], true);\n    } else if (s.implicit[key] !== undefined) {\n      this.set(key, s.implicit[key], false);\n    }\n  }\n  public copyKeyFromObject<S extends T>(key: keyof T, s: Partial<S>) {\n    // Explicit has higher precedence\n    if (s[key] !== undefined) {\n      this.set(key, s[key], true);\n    }\n  }\n\n  /**\n   * Merge split object into this split object. Properties from the other split\n   * overwrite properties from this split.\n   */\n  public copyAll(other: Split<T>) {\n    for (const key of keys(other.combine())) {\n      const val = other.getWithExplicit(key);\n      this.setWithExplicit(key, val);\n    }\n  }\n}\n\nexport interface Explicit<T> {\n  explicit: boolean;\n  value: T;\n}\n\nexport function makeExplicit<T>(value: T): Explicit<T> {\n  return {\n    explicit: true,\n    value\n  };\n}\n\nexport function makeImplicit<T>(value: T): Explicit<T> {\n  return {\n    explicit: false,\n    value\n  };\n}\n\nexport type SplitParentProperty = 'scale' | 'axis' | 'legend' | '';\n\nexport function tieBreakByComparing<S, T>(compare: (v1: T, v2: T) => number) {\n  return (\n    v1: Explicit<T>,\n    v2: Explicit<T>,\n    property: keyof S | never,\n    propertyOf: SplitParentProperty\n  ): Explicit<T> => {\n    const diff = compare(v1.value, v2.value);\n    if (diff > 0) {\n      return v1;\n    } else if (diff < 0) {\n      return v2;\n    }\n    return defaultTieBreaker<S, T>(v1, v2, property, propertyOf);\n  };\n}\n\nexport function defaultTieBreaker<S, T>(\n  v1: Explicit<T>,\n  v2: Explicit<T>,\n  property: keyof S,\n  propertyOf: SplitParentProperty\n) {\n  if (v1.explicit && v2.explicit) {\n    log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n  }\n  // If equal score, prefer v1.\n  return v1;\n}\n\nexport function mergeValuesWithExplicit<S, T>(\n  v1: Explicit<T>,\n  v2: Explicit<T>,\n  property: keyof S,\n  propertyOf: SplitParentProperty,\n  tieBreaker: (\n    v1: Explicit<T>,\n    v2: Explicit<T>,\n    property: keyof S,\n    propertyOf: string\n  ) => Explicit<T> = defaultTieBreaker\n) {\n  if (v1 === undefined || v1.value === undefined) {\n    // For first run\n    return v2;\n  }\n\n  if (v1.explicit && !v2.explicit) {\n    return v1;\n  } else if (v2.explicit && !v1.explicit) {\n    return v2;\n  } else if (deepEqual(v1.value, v2.value)) {\n    return v1;\n  } else {\n    return tieBreaker(v1, v2, property, propertyOf);\n  }\n}\n","import {Parse} from '../../data';\nimport {Dict} from '../../util';\nimport {Split} from '../split';\nimport {OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {SourceNode} from './source';\n\nexport interface DataComponent {\n  /**\n   * A list of unique sources.\n   */\n  sources: SourceNode[];\n\n  /**\n   * Registry of output nodes.\n   */\n  outputNodes: Dict<OutputNode | FacetNode>;\n\n  /**\n   * How often is an output node used. If it is not used, we don't need to\n   * instantiate it in the assemble step.\n   */\n  outputNodeRefCounts: Dict<number>;\n\n  /**\n   * The output node before aggregation.\n   */\n  raw?: OutputNode;\n\n  /**\n   * The main output node.\n   */\n  main?: OutputNode;\n\n  /**\n   * For facets, we store the reference to the root node.\n   */\n  facetRoot?: FacetNode;\n\n  /**\n   * True if the data for this model is faceted.\n   * A dataset is faceted if a parent model is a facet and no new dataset is\n   * defined (which would make the data unfaceted again).\n   */\n  isFaceted: boolean;\n\n  /**\n   * Parse properties passed down from ancestors. Helps us to keep track of what has been parsed or is derived.\n   */\n  ancestorParse?: AncestorParse;\n}\n\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transform. We use this to not parse the\n * same field again (or differently).\n */\nexport class AncestorParse extends Split<Parse> {\n  constructor(\n    public readonly explicit: Partial<Parse> = {},\n    public readonly implicit: Partial<Parse> = {},\n    public parseNothing = false\n  ) {\n    super(explicit, implicit);\n  }\n\n  public clone(): AncestorParse {\n    const clone = super.clone() as AncestorParse;\n    clone.parseNothing = this.parseNothing;\n    return clone;\n  }\n}\n","import {Dict} from './util';\n/*\n * Constants and utilities for data.\n */\nimport {Vector2} from 'vega';\nimport {FieldName} from './channeldef';\nimport {VgData} from './vega.schema';\n\nexport type ParseValue = null | string | 'string' | 'boolean' | 'date' | 'number';\n\nexport interface Parse {\n  [field: string]: ParseValue;\n}\n\nexport interface DataFormatBase {\n  /**\n   * If set to `null`, disable type inference based on the spec and only use type inference based on the data.\n   * Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\n   * For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n   *\n   * For `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n   * For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)\n   */\n  parse?: Parse | null;\n\n  /**\n   * Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n   *\n   * __Default value:__  The default format type is determined by the extension of the file URL.\n   * If no extension is detected, `\"json\"` will be used by default.\n   */\n  type?: 'csv' | 'tsv' | 'dsv' | 'json' | 'topojson';\n}\n\nexport interface CsvDataFormat extends DataFormatBase {\n  type?: 'csv' | 'tsv';\n}\n\nexport interface DsvDataFormat extends DataFormatBase {\n  type?: 'dsv';\n\n  /**\n   * The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n   *\n   * @minLength 1\n   * @maxLength 1\n   */\n  delimiter: string;\n}\n\nexport interface JsonDataFormat extends DataFormatBase {\n  type?: 'json';\n  /**\n   * The JSON property containing the desired data.\n   * This parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\n   * For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\n   * from the loaded JSON object.\n   */\n  property?: string;\n}\n\nexport interface TopoDataFormat extends DataFormatBase {\n  type?: 'topojson';\n  /**\n   * The name of the TopoJSON object set to convert to a GeoJSON feature collection.\n   * For example, in a map of the world, there may be an object set named `\"countries\"`.\n   * Using the feature property, we can extract this set and generate a GeoJSON feature object for each country.\n   */\n  feature?: string;\n  /**\n   * The name of the TopoJSON object set to convert to mesh.\n   * Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n   *  Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\n   * Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.\n   */\n  mesh?: string;\n}\n\nexport type DataFormat = CsvDataFormat | DsvDataFormat | JsonDataFormat | TopoDataFormat;\n\nexport type DataFormatType = 'json' | 'csv' | 'tsv' | 'dsv' | 'topojson';\n\nexport type DataSource = UrlData | InlineData | NamedData;\n\nexport type Data = DataSource | Generator;\n\nexport type InlineDataset = number[] | string[] | boolean[] | Dict<unknown>[] | string | Dict<unknown>;\n\nexport interface DataBase {\n  /**\n   * An object that specifies the format for parsing the data.\n   */\n  format?: DataFormat;\n  /**\n   * Provide a placeholder name and bind data at runtime.\n   */\n  name?: string;\n}\n\nexport interface UrlData extends DataBase {\n  /**\n   * An URL from which to load the data set. Use the `format.type` property\n   * to ensure the loaded data is correctly parsed.\n   */\n  url: string;\n}\n\nexport interface InlineData extends DataBase {\n  /**\n   * The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\n   * Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type.\n   */\n  values: InlineDataset;\n}\n\nexport interface NamedData extends DataBase {\n  /**\n   * Provide a placeholder name and bind data at runtime.\n   */\n  name: string;\n}\n\nexport function isUrlData(data: Partial<Data> | Partial<VgData>): data is UrlData {\n  return 'url' in data;\n}\n\nexport function isInlineData(data: Partial<Data> | Partial<VgData>): data is InlineData {\n  return 'values' in data;\n}\n\nexport function isNamedData(data: Partial<Data> | Partial<VgData>): data is NamedData {\n  return 'name' in data && !isUrlData(data) && !isInlineData(data) && !isGenerator(data);\n}\n\nexport function isGenerator(data: Partial<Data> | Partial<VgData>): data is Generator {\n  return data && (isSequenceGenerator(data) || isSphereGenerator(data) || isGraticuleGenerator(data));\n}\n\nexport function isSequenceGenerator(data: Partial<Data> | Partial<VgData>): data is SequenceGenerator {\n  return 'sequence' in data;\n}\n\nexport function isSphereGenerator(data: Partial<Data> | Partial<VgData>): data is SphereGenerator {\n  return 'sphere' in data;\n}\n\nexport function isGraticuleGenerator(data: Partial<Data> | Partial<VgData>): data is GraticuleGenerator {\n  return 'graticule' in data;\n}\n\nexport type DataSourceType = 'raw' | 'main' | 'row' | 'column' | 'lookup';\n\nexport const MAIN = 'main' as const;\nexport const RAW = 'raw' as const;\n\nexport type Generator = SequenceGenerator | SphereGenerator | GraticuleGenerator;\n\nexport interface GeneratorBase {\n  /**\n   * Provide a placeholder name and bind data at runtime.\n   */\n  name?: string;\n}\n\nexport interface SequenceGenerator extends GeneratorBase {\n  /**\n   * Generate a sequence of numbers.\n   */\n  sequence: SequenceParams;\n}\n\nexport interface SequenceParams {\n  /**\n   * The starting value of the sequence (inclusive).\n   */\n  start: number;\n  /**\n   * The ending value of the sequence (exclusive).\n   */\n  stop: number;\n  /**\n   * The step value between sequence entries.\n   *\n   * __Default value:__ `1`\n   */\n  step?: number;\n\n  /**\n   * The name of the generated sequence field.\n   *\n   * __Default value:__ `\"data\"`\n   */\n  as?: FieldName;\n}\n\nexport interface SphereGenerator extends GeneratorBase {\n  /**\n   * Generate sphere GeoJSON data for the full globe.\n   */\n  sphere: true | {};\n}\n\nexport interface GraticuleGenerator extends GeneratorBase {\n  /**\n   * Generate graticule GeoJSON data for geographic reference lines.\n   */\n  graticule: true | GraticuleParams;\n}\n\nexport interface GraticuleParams {\n  /**\n   * The major extent of the graticule as a two-element array of coordinates.\n   */\n  extentMajor?: Vector2<Vector2<number>>;\n\n  /**\n   * The minor extent of the graticule as a two-element array of coordinates.\n   */\n  extentMinor?: Vector2<Vector2<number>>;\n\n  /**\n   * Sets both the major and minor extents to the same values.\n   */\n  extent?: Vector2<Vector2<number>>;\n\n  /**\n   * The major step angles of the graticule.\n   *\n   *\n   * __Default value:__ `[90, 360]`\n   */\n  stepMajor?: Vector2<number>;\n\n  /**\n   * The minor step angles of the graticule.\n   *\n   * __Default value:__ `[10, 10]`\n   */\n  stepMinor?: Vector2<number>;\n\n  /**\n   * Sets both the major and minor step angles to the same values.\n   */\n  step?: Vector2<number>;\n\n  /**\n   * The precision of the graticule in degrees.\n   *\n   * __Default value:__ `2.5`\n   */\n  precision?: number;\n}\n","import {AggregateOp} from 'vega';\nimport {BinParams} from './bin';\nimport {FieldName} from './channeldef';\nimport {Data} from './data';\nimport {ImputeParams} from './impute';\nimport {LogicalComposition, normalizeLogicalComposition} from './logical';\nimport {normalizePredicate, Predicate} from './predicate';\nimport {SortField} from './sort';\nimport {TimeUnit, TimeUnitParams} from './timeunit';\n\nexport interface FilterTransform {\n  /**\n   * The `filter` property must be a predication definition, which can takes one of the following forms:\n   *\n   * 1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\n   * where `datum` can be used to refer to the current data object.\n   * For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n   *\n   * 2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate): \n   * [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate),\n   * [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n   * [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n   * [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n   * [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n   * [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n   * [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\n   * or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n   * 3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n   *\n   * 4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3).\n   */\n  filter: LogicalComposition<Predicate>;\n}\n\nexport function isFilter(t: Transform): t is FilterTransform {\n  return 'filter' in t;\n}\n\nexport interface CalculateTransform {\n  /**\n   * A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.\n   */\n  calculate: string;\n\n  /**\n   * The field for storing the computed formula value.\n   */\n  as: FieldName;\n}\n\nexport interface BinTransform {\n  /**\n   * An object indicating bin properties, or simply `true` for using default bin parameters.\n   */\n  bin: true | BinParams;\n\n  /**\n   * The data field to bin.\n   */\n  field: FieldName;\n\n  /**\n   * The output fields at which to write the start and end bin values.\n   * This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\n   * If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n   */\n  as: FieldName | FieldName[];\n}\n\nexport interface TimeUnitTransform {\n  /**\n   * The timeUnit.\n   */\n  timeUnit: TimeUnit | TimeUnitParams;\n\n  /**\n   * The data field to apply time unit.\n   */\n  field: FieldName;\n\n  /**\n   * The output field to write the timeUnit value.\n   */\n  as: FieldName;\n}\n\nexport interface AggregateTransform {\n  /**\n   * Array of objects that define fields to aggregate.\n   */\n  aggregate: AggregatedFieldDef[];\n\n  /**\n   * The data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n}\n\nexport interface AggregatedFieldDef {\n  /**\n   * The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\n   * See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\n   * for more information.\n   */\n  op: AggregateOp;\n\n  /**\n   * The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`.\n   */\n  field?: FieldName;\n\n  /**\n   * The output field names to use for each aggregated field.\n   */\n  as: FieldName;\n}\n\nexport interface StackTransform {\n  /**\n   * The field which is stacked.\n   */\n  stack: FieldName;\n  /**\n   * The data fields to group by.\n   */\n  groupby: FieldName[];\n  /**\n   * Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\n   * The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n   *\n   * __Default value:__ `\"zero\"`\n   */\n  offset?: 'zero' | 'center' | 'normalize';\n  /**\n   * Field that determines the order of leaves in the stacked charts.\n   */\n  sort?: SortField[];\n  /**\n   * Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\n   * If a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n   */\n  as: FieldName | [FieldName, FieldName];\n}\n\nexport type WindowOnlyOp =\n  | 'row_number'\n  | 'rank'\n  | 'dense_rank'\n  | 'percent_rank'\n  | 'cume_dist'\n  | 'ntile'\n  | 'lag'\n  | 'lead'\n  | 'first_value'\n  | 'last_value'\n  | 'nth_value';\n\nexport interface WindowFieldDef {\n  /**\n   * The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops).\n   */\n  op: AggregateOp | WindowOnlyOp;\n\n  /**\n   * Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n   *\n   * See the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).\n   */\n  param?: number;\n\n  /**\n   * The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`.\n   */\n  field?: FieldName;\n\n  /**\n   * The output name for the window operation.\n   */\n  as: FieldName;\n}\n\nexport interface WindowTransform {\n  /**\n   * The definition of the fields in the window, and what calculations to use.\n   */\n  window: WindowFieldDef[];\n\n  /**\n   * A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n   *\n   * __Default value:__:  `[null, 0]` (includes the current object and all preceding objects)\n   */\n  frame?: (null | number)[];\n\n  /**\n   * Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n   *\n   * __Default value:__ `false`\n   */\n  ignorePeers?: boolean;\n\n  /**\n   * The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).\n   */\n  sort?: SortField[];\n}\n\nexport interface JoinAggregateFieldDef {\n  /**\n   * The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n   */\n  op: AggregateOp;\n\n  /**\n   * The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`.\n   */\n  field?: FieldName;\n\n  /**\n   * The output name for the join aggregate operation.\n   */\n  as: FieldName;\n}\n\nexport interface JoinAggregateTransform {\n  /**\n   * The definition of the fields in the join aggregate, and what calculations to use.\n   */\n  joinaggregate: JoinAggregateFieldDef[];\n\n  /**\n   * The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.\n   */\n  groupby?: FieldName[];\n}\n\nexport interface ImputeSequence {\n  /**\n   * The starting value of the sequence.\n   * __Default value:__ `0`\n   */\n  start?: number;\n  /**\n   * The ending value(exclusive) of the sequence.\n   */\n  stop: number;\n  /**\n   * The step value between sequence entries.\n   * __Default value:__ `1` or `-1` if `stop < start`\n   */\n  step?: number;\n}\n\nexport function isImputeSequence(t: ImputeSequence | any[] | undefined): t is ImputeSequence {\n  return t?.['stop'] !== undefined;\n}\n\nexport interface ImputeTransform extends ImputeParams {\n  /**\n   * The data field for which the missing values should be imputed.\n   */\n  impute: FieldName;\n\n  /**\n   * A key field that uniquely identifies data objects within a group.\n   * Missing key values (those occurring in the data but not in the current group) will be imputed.\n   */\n  key: FieldName;\n\n  /**\n   * An optional array of fields by which to group the values.\n   * Imputation will then be performed on a per-group basis.\n   */\n  groupby?: FieldName[];\n}\n\nexport interface FlattenTransform {\n  /**\n   * An array of one or more data fields containing arrays to flatten.\n   * If multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\n   * If the lengths of parallel arrays do not match,\n   * the longest array will be used with `null` values added for missing entries.\n   */\n  flatten: FieldName[];\n\n  /**\n   * The output field names for extracted array values.\n   *\n   * __Default value:__ The field name of the corresponding array field\n   */\n  as?: FieldName[];\n}\n\nexport interface SampleTransform {\n  /**\n   * The maximum number of data objects to include in the sample.\n   *\n   * __Default value:__ `1000`\n   */\n  sample: number;\n}\n\nexport interface LookupBase {\n  /**\n   * Key in data to lookup.\n   */\n  key: FieldName;\n  /**\n   * Fields in foreign data or selection to lookup.\n   * If not specified, the entire object is queried.\n   */\n  fields?: FieldName[];\n}\n\nexport interface LookupData extends LookupBase {\n  /**\n   * Secondary data source to lookup in.\n   */\n  data: Data;\n}\n\nexport interface LookupSelection extends LookupBase {\n  /**\n   * Selection name to look up.\n   */\n  selection: string;\n}\n\nexport interface LookupTransform {\n  /**\n   * Key in primary data source.\n   */\n  lookup: string;\n\n  /**\n   * The output fields on which to store the looked up data values.\n   *\n   * For data lookups, this property may be left blank if `from.fields`\n   * has been specified (those field names will be used); if `from.fields`\n   * has not been specified, `as` must be a string.\n   *\n   * For selection lookups, this property is optional: if unspecified,\n   * looked up values will be stored under a property named for the selection;\n   * and if specified, it must correspond to `from.fields`.\n   */\n  as?: FieldName | FieldName[];\n\n  /**\n   * The default value to use if lookup fails.\n   *\n   * __Default value:__ `null`\n   */\n  default?: string;\n\n  /**\n   * Data source or selection for secondary data reference.\n   */\n  from: LookupData | LookupSelection;\n}\n\nexport function isLookup(t: Transform): t is LookupTransform {\n  return 'lookup' in t;\n}\n\nexport function isLookupData(from: LookupData | LookupSelection): from is LookupData {\n  return 'data' in from;\n}\n\nexport function isLookupSelection(from: LookupData | LookupSelection): from is LookupData {\n  return 'selection' in from;\n}\n\nexport interface FoldTransform {\n  /**\n   * An array of data fields indicating the properties to fold.\n   */\n  fold: FieldName[];\n\n  /**\n   * The output field names for the key and value properties produced by the fold transform.\n   * __Default value:__ `[\"key\", \"value\"]`\n   */\n  as?: [FieldName, FieldName];\n}\n\nexport interface PivotTransform {\n  /**\n   * The data field to pivot on. The unique values of this field become new field names in the output stream.\n   */\n  pivot: FieldName;\n\n  /**\n   * The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields.\n   */\n  value: FieldName;\n\n  /**\n   * The optional data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * An optional parameter indicating the maximum number of pivoted fields to generate.\n   * The default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n   * __Default value:__ `0`\n   */\n  limit?: number;\n\n  /**\n   * The aggregation operation to apply to grouped `value` field values.\n   * __Default value:__ `sum`\n   */\n  op?: string;\n}\n\nexport function isPivot(t: Transform): t is PivotTransform {\n  return 'pivot' in t;\n}\n\nexport interface DensityTransform {\n  /**\n   * The data field for which to perform density estimation.\n   */\n  density: FieldName;\n\n  /**\n   * The data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n   *\n   * __Default value:__ `false`\n   */\n  cumulative?: boolean;\n\n  /**\n   * A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n   *\n   * __Default value:__ `false`\n   */\n  counts?: boolean;\n\n  /**\n   * The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.\n   */\n  bandwidth?: number;\n\n  /**\n   * A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.\n   */\n  extent?: [number, number];\n\n  /**\n   * The minimum number of samples to take along the extent domain for plotting the density.\n   *\n   * __Default value:__ `25`\n   */\n  minsteps?: number;\n\n  /**\n   * The maximum number of samples to take along the extent domain for plotting the density.\n   *\n   * __Default value:__ `200`\n   */\n  maxsteps?: number;\n\n  /**\n   * The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.\n   */\n  steps?: number;\n\n  /**\n   * The output fields for the sample value and corresponding density estimate.\n   *\n   * __Default value:__ `[\"value\", \"density\"]`\n   */\n  as?: [FieldName, FieldName];\n}\n\nexport function isDensity(t: Transform): t is DensityTransform {\n  return 'density' in t;\n}\n\nexport interface QuantileTransform {\n  /**\n   * The data field for which to perform quantile estimation.\n   */\n  quantile: FieldName;\n\n  /**\n   * The data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.\n   */\n  probs?: number[];\n\n  /**\n   * A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.\n   */\n  step?: number;\n\n  /**\n   * The output field names for the probability and quantile values.\n   *\n   * __Default value:__ `[\"prob\", \"value\"]`\n   */\n  as?: [FieldName, FieldName];\n}\n\nexport function isQuantile(t: Transform): t is QuantileTransform {\n  return 'quantile' in t;\n}\n\nexport interface RegressionTransform {\n  /**\n   * The data field of the dependent variable to predict.\n   */\n  regression: FieldName;\n\n  /**\n   * The data field of the independent variable to use a predictor.\n   */\n  on: FieldName;\n\n  /**\n   * The data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n   *\n   * __Default value:__ `\"linear\"`\n   */\n  method?: 'linear' | 'log' | 'exp' | 'pow' | 'quad' | 'poly';\n\n  /**\n   * The polynomial order (number of coefficients) for the 'poly' method.\n   *\n   * __Default value:__ `3`\n   */\n  order?: number;\n\n  /**\n   * A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.\n   */\n  extent?: [number, number];\n\n  /**\n   * A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\n   * The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\n   * and an `rSquared` value (indicating the total variance explained by the model).\n   *\n   * __Default value:__ `false`\n   */\n  params?: boolean;\n\n  /**\n   * The output field names for the smoothed points generated by the regression transform.\n   *\n   * __Default value:__ The field names of the input x and y values.\n   */\n  as?: [FieldName, FieldName];\n}\n\nexport function isRegression(t: Transform): t is RegressionTransform {\n  return 'regression' in t;\n}\n\nexport interface LoessTransform {\n  /**\n   * The data field of the dependent variable to smooth.\n   */\n  loess: FieldName;\n\n  /**\n   * The data field of the independent variable to use a predictor.\n   */\n  on: FieldName;\n\n  /**\n   * The data fields to group by. If not specified, a single group containing all data objects will be used.\n   */\n  groupby?: FieldName[];\n\n  /**\n   * A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n   *\n   * __Default value:__ `0.3`\n   */\n  bandwidth?: number;\n\n  /**\n   * The output field names for the smoothed points generated by the loess transform.\n   *\n   * __Default value:__ The field names of the input x and y values.\n   */\n  as?: [FieldName, FieldName];\n}\n\nexport function isLoess(t: Transform): t is LoessTransform {\n  return 'loess' in t;\n}\n\nexport function isSample(t: Transform): t is SampleTransform {\n  return 'sample' in t;\n}\n\nexport function isWindow(t: Transform): t is WindowTransform {\n  return 'window' in t;\n}\n\nexport function isJoinAggregate(t: Transform): t is JoinAggregateTransform {\n  return 'joinaggregate' in t;\n}\n\nexport function isFlatten(t: Transform): t is FlattenTransform {\n  return 'flatten' in t;\n}\nexport function isCalculate(t: Transform): t is CalculateTransform {\n  return 'calculate' in t;\n}\n\nexport function isBin(t: Transform): t is BinTransform {\n  return 'bin' in t;\n}\n\nexport function isImpute(t: Transform): t is ImputeTransform {\n  return 'impute' in t;\n}\n\nexport function isTimeUnit(t: Transform): t is TimeUnitTransform {\n  return 'timeUnit' in t;\n}\n\nexport function isAggregate(t: Transform): t is AggregateTransform {\n  return 'aggregate' in t;\n}\n\nexport function isStack(t: Transform): t is StackTransform {\n  return 'stack' in t;\n}\n\nexport function isFold(t: Transform): t is FoldTransform {\n  return 'fold' in t;\n}\n\nexport type Transform =\n  | AggregateTransform\n  | BinTransform\n  | CalculateTransform\n  | DensityTransform\n  | FilterTransform\n  | FlattenTransform\n  | FoldTransform\n  | ImputeTransform\n  | JoinAggregateTransform\n  | LoessTransform\n  | LookupTransform\n  | QuantileTransform\n  | RegressionTransform\n  | TimeUnitTransform\n  | SampleTransform\n  | StackTransform\n  | WindowTransform\n  | PivotTransform;\n\nexport function normalizeTransform(transform: Transform[]) {\n  return transform.map(t => {\n    if (isFilter(t)) {\n      return {\n        filter: normalizeLogicalComposition(t.filter, normalizePredicate)\n      };\n    }\n    return t;\n  });\n}\n","import {SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {\n  ChannelDef,\n  ConditionalPredicate,\n  ConditionalSelection,\n  isConditionalDef,\n  isConditionalSelection\n} from '../../../channeldef';\nimport {GuideEncodingConditionalValueDef} from '../../../guide';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {expression} from '../../predicate';\nimport {parseSelectionPredicate} from '../../selection/parse';\nimport {UnitModel} from '../../unit';\n\n/**\n * Return a mixin that includes a Vega production rule for a Vega-Lite conditional channel definition\n * or a simple mixin if channel def has no condition.\n */\nexport function wrapCondition<CD extends ChannelDef | GuideEncodingConditionalValueDef | SignalRef>(\n  model: UnitModel,\n  channelDef: CD,\n  vgChannel: string,\n  refFn: (cDef: CD) => VgValueRef\n): VgEncodeEntry {\n  const condition = isConditionalDef<CD>(channelDef) && channelDef.condition;\n  const valueRef = refFn(channelDef);\n  if (condition) {\n    const conditions = array(condition);\n    const vgConditions = conditions.map(c => {\n      const conditionValueRef = refFn(c);\n      const test = isConditionalSelection<any>(c)\n        ? parseSelectionPredicate(model, (c as ConditionalSelection<any>).selection) // FIXME: remove casting once TS is no longer dumb about it\n        : expression(model, (c as ConditionalPredicate<any>).test); // FIXME: remove casting once TS is no longer dumb about it\n      return {\n        test,\n        ...conditionValueRef\n      };\n    });\n    return {\n      [vgChannel]: [...vgConditions, ...(valueRef !== undefined ? [valueRef] : [])]\n    };\n  } else {\n    return valueRef !== undefined ? {[vgChannel]: valueRef} : {};\n  }\n}\n","import {getFormatMixins, isFieldOrDatumDef, isValueDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function text(model: UnitModel, channel: 'text' | 'href' | 'url' | 'description' = 'text') {\n  const channelDef = model.encoding[channel];\n  return wrapCondition(model, channelDef, channel, cDef => textRef(cDef, model.config));\n}\n\nexport function textRef(\n  channelDef: Encoding<string>['text' | 'tooltip'],\n  config: Config,\n  expr: 'datum' | 'datum.datum' = 'datum'\n): VgValueRef {\n  // text\n  if (channelDef) {\n    if (isValueDef(channelDef)) {\n      return signalOrValueRef(channelDef.value);\n    }\n    if (isFieldOrDatumDef(channelDef)) {\n      const {format, formatType} = getFormatMixins(channelDef);\n      return formatSignalRef({fieldOrDatumDef: channelDef, format, formatType, expr, config});\n    }\n  }\n  return undefined;\n}\n","import {array, isArray, isObject, isString, stringValue} from 'vega-util';\nimport {isBinned} from '../../../bin';\nimport {Channel, getMainRangeChannel, isXorY} from '../../../channel';\nimport {\n  getFieldDef,\n  getFormatMixins,\n  hasConditionalFieldDef,\n  isFieldDef,\n  isTypedFieldDef,\n  SecondaryFieldDef,\n  title,\n  TypedFieldDef,\n  vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding, forEach} from '../../../encoding';\nimport {StackProperties} from '../../../stack';\nimport {entries} from '../../../util';\nimport {getMarkPropOrConfig} from '../../common';\nimport {binFormatExpression, formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\n\nexport function tooltip(model: UnitModel, opt: {reactiveGeom?: boolean} = {}) {\n  const {encoding, markDef, config, stack} = model;\n  const channelDef = encoding.tooltip;\n  if (isArray(channelDef)) {\n    return {tooltip: tooltipRefForEncoding({tooltip: channelDef}, stack, config, opt)};\n  } else {\n    const datum = opt.reactiveGeom ? 'datum.datum' : 'datum';\n    return wrapCondition(model, channelDef, 'tooltip', cDef => {\n      // use valueRef based on channelDef first\n      const tooltipRefFromChannelDef = textRef(cDef, config, datum);\n      if (tooltipRefFromChannelDef) {\n        return tooltipRefFromChannelDef;\n      }\n\n      if (cDef === null) {\n        // Allow using encoding.tooltip = null to disable tooltip\n        return undefined;\n      }\n\n      let markTooltip = getMarkPropOrConfig('tooltip', markDef, config);\n\n      if (markTooltip === true) {\n        markTooltip = {content: 'encoding'};\n      }\n\n      if (isString(markTooltip)) {\n        return {value: markTooltip};\n      } else if (isObject(markTooltip)) {\n        // `tooltip` is `{fields: 'encodings' | 'fields'}`\n        if (markTooltip.content === 'encoding') {\n          return tooltipRefForEncoding(encoding, stack, config, opt);\n        } else {\n          return {signal: datum};\n        }\n      }\n\n      return undefined;\n    });\n  }\n}\n\nexport function tooltipData(\n  encoding: Encoding<string>,\n  stack: StackProperties,\n  config: Config,\n  {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n  const toSkip = {};\n  const expr = reactiveGeom ? 'datum.datum' : 'datum';\n  const tuples: {channel: Channel; key: string; value: string}[] = [];\n\n  function add(fDef: TypedFieldDef<string> | SecondaryFieldDef<string>, channel: Channel) {\n    const mainChannel = getMainRangeChannel(channel);\n\n    const fieldDef: TypedFieldDef<string> = isTypedFieldDef(fDef)\n      ? fDef\n      : {\n          ...fDef,\n          type: encoding[mainChannel].type // for secondary field def, copy type from main channel\n        };\n\n    const key = array(title(fieldDef, config, {allowDisabling: false})).join(', ');\n\n    let value: string;\n\n    if (isXorY(channel)) {\n      const channel2 = channel === 'x' ? 'x2' : 'y2';\n      const fieldDef2 = getFieldDef(encoding[channel2]);\n\n      if (isBinned(fieldDef.bin) && fieldDef2) {\n        const startField = vgField(fieldDef, {expr});\n        const endField = vgField(fieldDef2, {expr});\n        const {format, formatType} = getFormatMixins(fieldDef);\n        value = binFormatExpression(startField, endField, format, formatType, config);\n        toSkip[channel2] = true;\n      } else if (stack && stack.fieldChannel === channel && stack.offset === 'normalize') {\n        const {format, formatType} = getFormatMixins(fieldDef);\n        value = formatSignalRef({fieldOrDatumDef: fieldDef, format, formatType, expr, config, normalizeStack: true})\n          .signal;\n      }\n    }\n\n    value = value ?? textRef(fieldDef, config, expr).signal;\n\n    tuples.push({channel, key, value});\n  }\n\n  forEach(encoding, (channelDef, channel) => {\n    if (isFieldDef(channelDef)) {\n      add(channelDef, channel);\n    } else if (hasConditionalFieldDef(channelDef)) {\n      add(channelDef.condition, channel);\n    }\n  });\n\n  const out = {};\n  for (const {channel, key, value} of tuples) {\n    if (!toSkip[channel] && !out[key]) {\n      out[stringValue(key)] = value;\n    }\n  }\n\n  return out;\n}\n\nexport function tooltipRefForEncoding(\n  encoding: Encoding<string>,\n  stack: StackProperties,\n  config: Config,\n  {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n  const data = tooltipData(encoding, stack, config, {reactiveGeom});\n\n  const keyValues = entries(data).map(({key, value}) => `${key}: ${value}`);\n  return keyValues.length > 0 ? {signal: `{${keyValues.join(', ')}}`} : undefined;\n}\n","import {entries, isEmpty} from '../../../util';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {VG_MARK_INDEX} from './../../../vega.schema';\nimport {UnitModel} from './../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\nimport {tooltipData} from './tooltip';\n\nexport function aria(model: UnitModel) {\n  const {markDef, config} = model;\n\n  const enableAria = getMarkPropOrConfig('aria', markDef, config);\n\n  // We can ignore other aria properties if ariaHidden is true.\n  if (enableAria === false) {\n    // getMarkGroups sets aria to false already so we don't have to set it in the encode block\n    return {};\n  }\n\n  return {\n    ...(enableAria ? {aria: enableAria} : {}),\n    ...ariaRoleDescription(model),\n    ...description(model)\n  };\n}\n\nfunction ariaRoleDescription(model: UnitModel) {\n  const {mark, markDef, config} = model;\n\n  if (config.aria === false) {\n    return {};\n  }\n\n  const ariaRoleDesc = getMarkPropOrConfig('ariaRoleDescription', markDef, config);\n\n  if (ariaRoleDesc != null) {\n    return {ariaRoleDescription: {value: ariaRoleDesc}};\n  }\n\n  return mark in VG_MARK_INDEX ? {} : {ariaRoleDescription: {value: mark}};\n}\n\nexport function description(model: UnitModel) {\n  const {encoding, markDef, config, stack} = model;\n  const channelDef = encoding.description;\n\n  if (channelDef) {\n    return wrapCondition(model, channelDef, 'description', cDef => textRef(cDef, model.config));\n  }\n\n  // Use default from mark def or config if defined.\n  // Functions in encode usually just return undefined but since we are defining a default below, we need to check the default here.\n  const descriptionValue = getMarkPropOrConfig('description', markDef, config);\n  if (descriptionValue != null) {\n    return {\n      description: signalOrValueRef(descriptionValue)\n    };\n  }\n\n  if (config.aria === false) {\n    return {};\n  }\n\n  const data = tooltipData(encoding, stack, config);\n\n  if (isEmpty(data)) {\n    return undefined;\n  }\n\n  return {\n    description: {\n      signal: entries(data)\n        .map(({key, value}) => `${key} + \": \" + (${value})`)\n        .join(' + \"; \" + ')\n    }\n  };\n}\n","import {SignalRef} from 'vega';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport * as ref from './valueref';\n\n/**\n * Return encode for non-positional channels with scales. (Text doesn't have scale.)\n */\nexport function nonPosition(\n  channel: NonPositionScaleChannel,\n  model: UnitModel,\n  opt: {\n    defaultValue?: Value | SignalRef;\n    vgChannel?: VgEncodeChannel;\n    defaultRef?: VgValueRef;\n  } = {}\n): VgEncodeEntry {\n  const {markDef, encoding, config} = model;\n  const {vgChannel} = opt;\n  let {defaultRef, defaultValue} = opt;\n\n  if (defaultRef === undefined) {\n    // prettier-ignore\n    defaultValue = defaultValue ?? getMarkPropOrConfig(channel, markDef, config, {vgChannel, ignoreVgConfig: true});\n\n    if (defaultValue !== undefined) {\n      defaultRef = signalOrValueRef(defaultValue);\n    }\n  }\n\n  const channelDef = encoding[channel];\n\n  return wrapCondition(model, channelDef, vgChannel ?? channel, cDef => {\n    return ref.midPoint({\n      channel,\n      channelDef: cDef,\n      markDef,\n      config,\n      scaleName: model.scaleName(channel),\n      scale: model.getScaleComponent(channel),\n      stack: null, // No need to provide stack for non-position as it does not affect mid point\n      defaultRef\n    });\n  });\n}\n","import * as log from '../../../log';\nimport {contains} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\n\nexport function color(model: UnitModel, opt: {filled: boolean | undefined} = {filled: undefined}): VgEncodeEntry {\n  const {markDef, encoding, config} = model;\n  const {type: markType} = markDef;\n\n  // Allow filled to be overridden (for trail's \"filled\")\n  const filled = opt.filled ?? getMarkPropOrConfig('filled', markDef, config);\n\n  const transparentIfNeeded = contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType)\n    ? 'transparent'\n    : undefined;\n\n  const defaultFill =\n    getMarkPropOrConfig(filled === true ? 'color' : undefined, markDef, config, {vgChannel: 'fill'}) ??\n    // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n    config.mark[filled === true && 'color'] ??\n    // If there is no fill, always fill symbols, bar, geoshape\n    // with transparent fills https://github.com/vega/vega-lite/issues/1316\n    transparentIfNeeded;\n\n  const defaultStroke =\n    getMarkPropOrConfig(filled === false ? 'color' : undefined, markDef, config, {vgChannel: 'stroke'}) ??\n    // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n    config.mark[filled === false && 'color'];\n\n  const colorVgChannel = filled ? 'fill' : 'stroke';\n\n  const fillStrokeMarkDefAndConfig: VgEncodeEntry = {\n    ...(defaultFill ? {fill: signalOrValueRef(defaultFill)} : {}),\n    ...(defaultStroke ? {stroke: signalOrValueRef(defaultStroke)} : {})\n  };\n\n  if (markDef.color && (filled ? markDef.fill : markDef.stroke)) {\n    log.warn(log.message.droppingColor('property', {fill: 'fill' in markDef, stroke: 'stroke' in markDef}));\n  }\n\n  return {\n    ...fillStrokeMarkDefAndConfig,\n    ...nonPosition('color', model, {\n      vgChannel: colorVgChannel,\n      defaultValue: filled ? defaultFill : defaultStroke\n    }),\n    ...nonPosition('fill', model, {\n      // if there is encoding.fill, include default fill just in case we have conditional-only fill encoding\n      defaultValue: encoding.fill ? defaultFill : undefined\n    }),\n    ...nonPosition('stroke', model, {\n      // if there is encoding.stroke, include default fill just in case we have conditional-only stroke encoding\n      defaultValue: encoding.stroke ? defaultStroke : undefined\n    })\n  };\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega-typings/types';\nimport {getOffsetChannel, PolarPositionChannel, PositionChannel} from '../../../channel';\nimport {MarkDef} from '../../../mark';\n\nexport function getOffset(channel: PositionChannel | PolarPositionChannel, markDef: MarkDef): number | SignalRef {\n  const offsetChannel = getOffsetChannel(channel);\n\n  // TODO: in the future read from encoding channel too\n  const markDefOffsetValue = markDef[offsetChannel];\n  if (markDefOffsetValue) {\n    return markDefOffsetValue;\n  }\n\n  return undefined;\n}\n","import {\n  getMainRangeChannel,\n  getSecondaryRangeChannel,\n  getSizeChannel,\n  getVgPositionChannel,\n  isXorY,\n  PolarPositionChannel,\n  PositionChannel\n} from '../../../channel';\nimport {getBand, isFieldDef, isFieldOrDatumDef, TypedFieldDef} from '../../../channeldef';\nimport {ScaleType} from '../../../scale';\nimport {contains} from '../../../util';\nimport {VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport * as ref from './valueref';\n\n/**\n * Return encode for point (non-band) position channels.\n */\nexport function pointPosition(\n  channel: 'x' | 'y' | 'theta' | 'radius',\n  model: UnitModel,\n  {\n    defaultPos,\n    vgChannel,\n    isMidPoint\n  }: {\n    defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n    vgChannel?: 'x' | 'y' | 'xc' | 'yc';\n    isMidPoint?: boolean;\n  }\n) {\n  const {encoding, markDef, config, stack} = model;\n\n  const channelDef = encoding[channel];\n  const channel2Def = encoding[getSecondaryRangeChannel(channel)];\n  const scaleName = model.scaleName(channel);\n  const scale = model.getScaleComponent(channel);\n\n  const offset = getOffset(channel, markDef);\n\n  // Get default position or position from mark def\n  const defaultRef = pointPositionDefaultRef({\n    model,\n    defaultPos,\n    channel,\n    scaleName,\n    scale\n  });\n\n  const valueRef =\n    !channelDef && isXorY(channel) && (encoding.latitude || encoding.longitude)\n      ? // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n        {field: model.getName(channel)}\n      : positionRef({\n          channel,\n          channelDef,\n          channel2Def,\n          markDef,\n          config,\n          isMidPoint,\n          scaleName,\n          scale,\n          stack,\n          offset,\n          defaultRef\n        });\n\n  return valueRef ? {[vgChannel || channel]: valueRef} : undefined;\n}\n\n// TODO: we need to find a way to refactor these so that scaleName is a part of scale\n// but that's complicated. For now, this is a huge step moving forward.\n\n/**\n * @return Vega ValueRef for normal x- or y-position without projection\n */\nexport function positionRef(\n  params: ref.MidPointParams & {\n    channel: 'x' | 'y' | 'radius' | 'theta';\n    isMidPoint?: boolean;\n  }\n): VgValueRef | VgValueRef[] {\n  const {channel, channelDef, isMidPoint, scaleName, stack, offset, markDef, config} = params;\n\n  // This isn't a part of midPoint because we use midPoint for non-position too\n  if (isFieldOrDatumDef(channelDef) && stack && channel === stack.fieldChannel) {\n    if (isFieldDef(channelDef)) {\n      const band = getBand({\n        channel,\n        fieldDef: channelDef,\n        isMidPoint,\n        markDef,\n        stack,\n        config\n      });\n      if (band !== undefined) {\n        return ref.interpolatedSignalRef({\n          scaleName,\n          fieldOrDatumDef: channelDef as TypedFieldDef<string>, // positionRef always have type\n          startSuffix: 'start',\n          band,\n          offset\n        });\n      }\n    }\n    // x or y use stack_end so that stacked line's point mark use stack_end too.\n    return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'end'}, {offset});\n  }\n\n  return ref.midPointRefWithPositionInvalidTest(params);\n}\n\nexport function pointPositionDefaultRef({\n  model,\n  defaultPos,\n  channel,\n  scaleName,\n  scale\n}: {\n  model: UnitModel;\n  defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n  channel: PositionChannel | PolarPositionChannel;\n  scaleName: string;\n  scale: ScaleComponent;\n}): () => VgValueRef {\n  const {markDef, config} = model;\n  return () => {\n    const mainChannel = getMainRangeChannel(channel);\n    const vgChannel = getVgPositionChannel(channel);\n\n    const definedValueOrConfig = getMarkPropOrConfig(channel, markDef, config, {vgChannel});\n    if (definedValueOrConfig !== undefined) {\n      return ref.widthHeightValueOrSignalRef(channel, definedValueOrConfig);\n    }\n\n    switch (defaultPos) {\n      case 'zeroOrMin':\n      case 'zeroOrMax':\n        if (scaleName) {\n          const scaleType = scale.get('type');\n          if (contains([ScaleType.LOG, ScaleType.TIME, ScaleType.UTC], scaleType)) {\n            // Log scales cannot have zero.\n            // Zero in time scale is arbitrary, and does not affect ratio.\n            // (Time is an interval level of measurement, not ratio).\n            // See https://en.wikipedia.org/wiki/Level_of_measurement for more info.\n          } else {\n            if (scale.domainDefinitelyIncludesZero()) {\n              return {\n                scale: scaleName,\n                value: 0\n              };\n            }\n          }\n        }\n\n        if (defaultPos === 'zeroOrMin') {\n          return mainChannel === 'y' ? {field: {group: 'height'}} : {value: 0};\n        } else {\n          // zeroOrMax\n          switch (mainChannel) {\n            case 'radius':\n              // max of radius is min(width, height) / 2\n              return {\n                signal: `min(${model.width.signal},${model.height.signal})/2`\n              };\n            case 'theta':\n              return {signal: '2*PI'};\n            case 'x':\n              return {field: {group: 'width'}};\n            case 'y':\n              return {value: 0};\n          }\n        }\n        break;\n      case 'mid': {\n        const sizeRef = model[getSizeChannel(channel)];\n        return {...sizeRef, mult: 0.5};\n      }\n    }\n    // defaultPos === null\n    return undefined;\n  };\n}\n","import {Align} from 'vega';\nimport {getVgPositionChannel} from '../../../channel';\nimport {Config} from '../../../config';\nimport {MarkDef} from '../../../mark';\nimport {VgEncodeChannel} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\n\nconst ALIGNED_X_CHANNEL: Record<Align, VgEncodeChannel> = {\n  left: 'x',\n  center: 'xc',\n  right: 'x2'\n};\n\nconst BASELINED_Y_CHANNEL = {\n  top: 'y',\n  middle: 'yc',\n  bottom: 'y2'\n};\n\nexport function vgAlignedPositionChannel(\n  channel: 'x' | 'y' | 'radius' | 'theta',\n  markDef: MarkDef,\n  config: Config,\n  defaultAlign: 'top' | 'middle' = 'middle'\n) {\n  if (channel === 'radius' || channel === 'theta') {\n    return getVgPositionChannel(channel);\n  }\n  const alignChannel = channel === 'x' ? 'align' : 'baseline';\n  const align = getMarkPropOrConfig(alignChannel, markDef, config);\n  if (channel === 'x') {\n    return ALIGNED_X_CHANNEL[align || (defaultAlign === 'top' ? 'left' : 'center')];\n  } else {\n    return BASELINED_Y_CHANNEL[align || defaultAlign];\n  }\n}\n","import {getMainRangeChannel, getSecondaryRangeChannel, getSizeChannel, getVgPositionChannel} from '../../../channel';\nimport {isFieldOrDatumDef} from '../../../channeldef';\nimport {MarkConfig} from '../../../mark';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkStyleConfig} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPosition, pointPositionDefaultRef} from './position-point';\nimport * as ref from './valueref';\n\n/**\n * Utility for area/rule position, which can be either point or range. (One of the axes should be point and the other should be range.)\n */\nexport function pointOrRangePosition(\n  channel: 'x' | 'y',\n  model: UnitModel,\n  {\n    defaultPos,\n    defaultPos2,\n    range\n  }: {\n    defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n    defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n    range: boolean;\n  }\n) {\n  if (range) {\n    return rangePosition(channel, model, {defaultPos, defaultPos2});\n  }\n  return pointPosition(channel, model, {defaultPos});\n}\n\nexport function rangePosition(\n  channel: 'x' | 'y' | 'theta' | 'radius',\n  model: UnitModel,\n  {\n    defaultPos,\n    defaultPos2\n  }: {\n    defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n    defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n  }\n): VgEncodeEntry {\n  const {markDef, config} = model;\n  const channel2 = getSecondaryRangeChannel(channel);\n  const sizeChannel = getSizeChannel(channel);\n\n  const pos2Mixins = pointPosition2OrSize(model, defaultPos2, channel2);\n\n  const vgChannel = pos2Mixins[sizeChannel]\n    ? // If there is width/height, we need to position the marks based on the alignment.\n      vgAlignedPositionChannel(channel, markDef, config)\n    : // Otherwise, make sure to apply to the right Vg Channel (for arc mark)\n      getVgPositionChannel(channel);\n\n  return {\n    ...pointPosition(channel, model, {defaultPos, vgChannel}),\n    ...pos2Mixins\n  };\n}\n\n/**\n * Return encode for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2OrSize(\n  model: UnitModel,\n  defaultPos: 'zeroOrMin' | 'zeroOrMax',\n  channel: 'x2' | 'y2' | 'radius2' | 'theta2'\n) {\n  const {encoding, mark, markDef, stack, config} = model;\n\n  const baseChannel = getMainRangeChannel(channel);\n  const sizeChannel = getSizeChannel(channel);\n  const vgChannel = getVgPositionChannel(channel);\n\n  const channelDef = encoding[baseChannel];\n  const scaleName = model.scaleName(baseChannel);\n  const scale = model.getScaleComponent(baseChannel);\n\n  const offset =\n    channel in encoding || channel in markDef\n      ? getOffset(channel, model.markDef)\n      : getOffset(baseChannel, model.markDef);\n\n  if (!channelDef && (channel === 'x2' || channel === 'y2') && (encoding.latitude || encoding.longitude)) {\n    // use geopoint output if there are lat2/long2 and there is no point position2 overriding lat2/long2.\n    return {[vgChannel]: {field: model.getName(channel)}};\n  }\n\n  const valueRef = position2Ref({\n    channel,\n    channelDef,\n    channel2Def: encoding[channel],\n    markDef,\n    config,\n    scaleName,\n    scale,\n    stack,\n    offset,\n    defaultRef: undefined\n  });\n\n  if (valueRef !== undefined) {\n    return {[vgChannel]: valueRef};\n  }\n\n  // TODO: check width/height encoding here once we add them\n\n  // no x2/y2 encoding, then try to read x2/y2 or width/height based on precedence:\n  // markDef > config.style > mark-specific config (config[mark]) > general mark config (config.mark)\n\n  return (\n    position2orSize(channel, markDef) ||\n    position2orSize(channel, {\n      [channel]: getMarkStyleConfig(channel, markDef, config.style),\n      [sizeChannel]: getMarkStyleConfig(sizeChannel, markDef, config.style)\n    }) ||\n    position2orSize(channel, config[mark]) ||\n    position2orSize(channel, config.mark) || {\n      [vgChannel]: pointPositionDefaultRef({\n        model,\n        defaultPos,\n        channel,\n        scaleName,\n        scale\n      })()\n    }\n  );\n}\n\nexport function position2Ref({\n  channel,\n  channelDef,\n  channel2Def,\n  markDef,\n  config,\n  scaleName,\n  scale,\n  stack,\n  offset,\n  defaultRef\n}: ref.MidPointParams & {\n  channel: 'x2' | 'y2' | 'radius2' | 'theta2';\n}): VgValueRef | VgValueRef[] {\n  if (\n    isFieldOrDatumDef(channelDef) &&\n    stack &&\n    // If fieldChannel is X and channel is X2 (or Y and Y2)\n    channel.charAt(0) === stack.fieldChannel.charAt(0)\n  ) {\n    return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'start'}, {offset});\n  }\n  return ref.midPointRefWithPositionInvalidTest({\n    channel,\n    channelDef: channel2Def,\n    scaleName,\n    scale,\n    stack,\n    markDef,\n    config,\n    offset,\n    defaultRef\n  });\n}\n\nfunction position2orSize(channel: 'x2' | 'y2' | 'radius2' | 'theta2', markDef: MarkConfig) {\n  const sizeChannel = getSizeChannel(channel);\n  const vgChannel = getVgPositionChannel(channel);\n  if (markDef[vgChannel] !== undefined) {\n    return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[vgChannel])};\n  } else if (markDef[channel] !== undefined) {\n    return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[channel])};\n  } else if (markDef[sizeChannel]) {\n    return {[sizeChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[sizeChannel])};\n  }\n  return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../../bin';\nimport {\n  getSecondaryRangeChannel,\n  getSizeChannel,\n  getVgPositionChannel,\n  isPolarPositionChannel,\n  isXorY,\n  PolarPositionChannel,\n  PositionChannel\n} from '../../../channel';\nimport {getBand, isFieldDef, isFieldOrDatumDef, TypedFieldDef, vgField} from '../../../channeldef';\nimport {Config, DEFAULT_STEP, getViewConfigDiscreteStep} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {hasDiscreteDomain, ScaleType} from '../../../scale';\nimport {getFirstDefined} from '../../../util';\nimport {isSignalRef, isVgRangeStep, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrStringValue} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPositionDefaultRef} from './position-point';\nimport {rangePosition} from './position-range';\nimport * as ref from './valueref';\n\nexport function rectPosition(\n  model: UnitModel,\n  channel: 'x' | 'y' | 'theta' | 'radius',\n  mark: 'bar' | 'rect' | 'image' | 'arc'\n): VgEncodeEntry {\n  const {config, encoding, markDef, stack} = model;\n\n  const channel2 = getSecondaryRangeChannel(channel);\n  const sizeChannel = getSizeChannel(channel);\n  const channelDef = encoding[channel];\n  const channelDef2 = encoding[channel2];\n\n  const scale = model.getScaleComponent(channel);\n  const scaleType = scale ? scale.get('type') : undefined;\n  const scaleName = model.scaleName(channel);\n\n  const orient = markDef.orient;\n  const hasSizeDef =\n    encoding[sizeChannel] ?? encoding.size ?? getMarkPropOrConfig('size', markDef, config, {vgChannel: sizeChannel});\n\n  const isBarBand = mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal');\n\n  // x, x2, and width -- we must specify two of these in all conditions\n  if (\n    isFieldDef(channelDef) &&\n    (isBinning(channelDef.bin) || isBinned(channelDef.bin) || (channelDef.timeUnit && !channelDef2)) &&\n    !hasSizeDef &&\n    !hasDiscreteDomain(scaleType)\n  ) {\n    const band = getBand({channel, fieldDef: channelDef, stack, markDef, config});\n    const axis = model.component.axes[channel]?.[0];\n    const axisTranslate = axis?.get('translate') ?? 0.5; // vega default is 0.5\n\n    return rectBinPosition({\n      fieldDef: channelDef,\n      fieldDef2: channelDef2,\n      channel,\n      markDef,\n      scaleName,\n      band,\n      axisTranslate,\n      spacing: isXorY(channel) ? getMarkPropOrConfig('binSpacing', markDef, config) : undefined,\n      reverse: scale.get('reverse'),\n      config\n    });\n  } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarBand) && !channelDef2) {\n    return positionAndSize(mark, channelDef, channel, model);\n  } else {\n    return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'});\n  }\n}\nfunction defaultSizeRef(\n  mark: 'bar' | 'rect' | 'image' | 'arc',\n  sizeChannel: 'width' | 'height',\n  scaleName: string,\n  scale: ScaleComponent,\n  config: Config,\n  band: number | true\n): VgValueRef {\n  if (scale) {\n    const scaleType = scale.get('type');\n    if (scaleType === 'point' || scaleType === 'band') {\n      if (config[mark].discreteBandSize !== undefined) {\n        return {value: config[mark].discreteBandSize};\n      }\n      if (scaleType === ScaleType.POINT) {\n        const scaleRange = scale.get('range');\n        if (isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n          return {value: scaleRange.step - 2};\n        }\n        return {value: DEFAULT_STEP - 2};\n      } else {\n        // BAND\n        return {scale: scaleName, band};\n      }\n    } else {\n      // continuous scale\n      return {value: config[mark].continuousBandSize};\n    }\n  }\n  // No Scale\n\n  const step = getViewConfigDiscreteStep(config.view, sizeChannel);\n\n  const value = getFirstDefined(\n    // No scale is like discrete bar (with one item)\n    config[mark].discreteBandSize,\n    step - 2\n  );\n  return value !== undefined ? {value} : undefined;\n}\n\n/**\n * Output position encoding and its size encoding for continuous, point, and band scales.\n */\n\nfunction positionAndSize(\n  mark: 'bar' | 'rect' | 'image' | 'arc',\n  fieldDef: Encoding<string>['x' | 'y' | 'theta' | 'radius'],\n  channel: 'x' | 'y' | 'theta' | 'radius',\n  model: UnitModel\n) {\n  const {markDef, encoding, config, stack} = model;\n  const orient = markDef.orient;\n\n  const scaleName = model.scaleName(channel);\n  const scale = model.getScaleComponent(channel);\n  const vgSizeChannel = getSizeChannel(channel);\n  const channel2 = getSecondaryRangeChannel(channel);\n\n  // use \"size\" channel for bars, if there is orient and the channel matches the right orientation\n  const useVlSizeChannel = (orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x');\n\n  const sizeFromMarkOrConfig = getMarkPropOrConfig(useVlSizeChannel ? 'size' : vgSizeChannel, markDef, config, {\n    vgChannel: vgSizeChannel\n  });\n\n  // Use size encoding / mark property / config if it exists\n  let sizeMixins;\n  if (encoding.size || sizeFromMarkOrConfig !== undefined) {\n    if (useVlSizeChannel) {\n      sizeMixins = nonPosition('size', model, {vgChannel: vgSizeChannel, defaultValue: sizeFromMarkOrConfig});\n    } else {\n      log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type));\n    }\n  }\n\n  // Otherwise, apply default value\n  const band = (isFieldOrDatumDef(fieldDef) ? getBand({channel, fieldDef, markDef, stack, config}) : undefined) ?? 1;\n  sizeMixins = sizeMixins || {[vgSizeChannel]: defaultSizeRef(mark, vgSizeChannel, scaleName, scale, config, band)};\n\n  /*\n    Band scales with size value and all point scales, use xc/yc + band=0.5\n\n    Otherwise (band scales that has size based on a band ref), use x/y with position band = (1 - size_band) / 2.\n    In this case, size_band is the band specified in the x/y-encoding.\n    By default band is 1, so `(1 - band) / 2` = 0.\n    If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2\n   */\n\n  const center = scale?.get('type') !== 'band' || !('band' in sizeMixins[vgSizeChannel]);\n\n  const vgChannel = vgAlignedPositionChannel(channel, markDef, config, center ? 'middle' : 'top');\n  const offset = getOffset(channel, markDef);\n\n  const posRef = ref.midPointRefWithPositionInvalidTest({\n    channel,\n    channelDef: fieldDef,\n    markDef,\n    config,\n    scaleName,\n    scale,\n    stack,\n    offset,\n    defaultRef: pointPositionDefaultRef({model, defaultPos: 'mid', channel, scaleName, scale}),\n    band: center ? 0.5 : (1 - band) / 2\n  });\n\n  if (vgSizeChannel) {\n    return {[vgChannel]: posRef, ...sizeMixins};\n  } else {\n    // otherwise, we must simulate size by setting position2 = position + size\n    // (for theta/radius since Vega doesn't have thetaWidth/radiusWidth)\n    const vgChannel2 = getVgPositionChannel(channel2);\n    const sizeRef = sizeMixins[vgSizeChannel];\n    const sizeOffset = offset ? {...sizeRef, offset} : sizeRef;\n    return {\n      [vgChannel]: posRef,\n\n      // posRef might be an array that wraps position invalid test\n      [vgChannel2]: isArray(posRef)\n        ? [posRef[0], {...posRef[1], offset: sizeOffset}]\n        : {\n            ...posRef,\n            offset: sizeOffset\n          }\n    };\n  }\n}\n\nfunction getBinSpacing(\n  channel: PositionChannel | PolarPositionChannel,\n  spacing: number,\n  reverse: boolean | SignalRef,\n  translate: number,\n  offset: number | SignalRef\n) {\n  if (isPolarPositionChannel(channel)) {\n    return 0;\n  }\n\n  const spacingOffset = channel === 'x' || channel === 'y2' ? -spacing / 2 : spacing / 2;\n\n  if (isSignalRef(reverse)) {\n    const offsetExpr = signalOrStringValue(offset);\n    return {\n      signal: `${reverse.signal} ? ${translate - spacingOffset}${offsetExpr ? '-' + offsetExpr : ''} : ${\n        translate + spacingOffset\n      }${offsetExpr ? '+' + offsetExpr : ''}`\n    };\n  } else {\n    if (isSignalRef(offset)) {\n      const translateAndSpacingOffset = translate + (reverse ? -spacingOffset : spacingOffset);\n      return {\n        signal: `${translateAndSpacingOffset || ''}${reverse ? ' - ' : translateAndSpacingOffset ? ' + ' : ''}${\n          offset.signal\n        }`\n      };\n    }\n    offset = offset || 0;\n    return translate + (reverse ? -offset - spacingOffset : +offset + spacingOffset);\n  }\n}\n\nexport function rectBinPosition({\n  fieldDef,\n  fieldDef2,\n  channel,\n  band,\n  scaleName,\n  markDef,\n  spacing = 0,\n  axisTranslate,\n  reverse,\n  config\n}: {\n  fieldDef: TypedFieldDef<string>;\n  fieldDef2?: Encoding<string>['x2' | 'y2'];\n  channel: 'x' | 'y' | 'theta' | 'radius';\n  band: number;\n  scaleName: string;\n  markDef: MarkDef<Mark>;\n  spacing?: number;\n  axisTranslate: number;\n  reverse: boolean | SignalRef;\n  config: Config;\n}) {\n  const channel2 = getSecondaryRangeChannel(channel);\n\n  const vgChannel = getVgPositionChannel(channel);\n  const vgChannel2 = getVgPositionChannel(channel2);\n\n  const offset = getOffset(channel, markDef);\n\n  if (isBinning(fieldDef.bin) || fieldDef.timeUnit) {\n    return {\n      [vgChannel2]: rectBinRef({\n        channel,\n        fieldDef,\n        scaleName,\n        markDef,\n        band: (1 - band) / 2,\n        offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset),\n        config\n      }),\n      [vgChannel]: rectBinRef({\n        channel,\n        fieldDef,\n        scaleName,\n        markDef,\n        band: 1 - (1 - band) / 2,\n        offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset),\n        config\n      })\n    };\n  } else if (isBinned(fieldDef.bin)) {\n    const startRef = ref.valueRefForFieldOrDatumDef(\n      fieldDef,\n      scaleName,\n      {},\n      {offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset)}\n    );\n\n    if (isFieldDef(fieldDef2)) {\n      return {\n        [vgChannel2]: startRef,\n        [vgChannel]: ref.valueRefForFieldOrDatumDef(\n          fieldDef2,\n          scaleName,\n          {},\n          {offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)}\n        )\n      };\n    } else if (isBinParams(fieldDef.bin) && fieldDef.bin.step) {\n      return {\n        [vgChannel2]: startRef,\n        [vgChannel]: {\n          signal: `scale(\"${scaleName}\", ${vgField(fieldDef, {expr: 'datum'})} + ${fieldDef.bin.step})`,\n          offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)\n        }\n      };\n    }\n  }\n  log.warn(log.message.channelRequiredForBinned(channel2));\n  return undefined;\n}\n\n/**\n * Value Ref for binned fields\n */\nexport function rectBinRef({\n  channel,\n  fieldDef,\n  scaleName,\n  markDef,\n  band,\n  offset,\n  config\n}: {\n  channel: PositionChannel | PolarPositionChannel;\n  fieldDef: TypedFieldDef<string>;\n  scaleName: string;\n  markDef: MarkDef<Mark>;\n  band: number;\n  offset?: number | SignalRef;\n  config?: Config;\n}) {\n  const r = ref.interpolatedSignalRef({\n    scaleName,\n    fieldOrDatumDef: fieldDef,\n    band,\n    offset\n  });\n\n  return ref.wrapPositionInvalidTest({\n    fieldDef,\n    channel,\n    markDef,\n    ref: r,\n    config\n  });\n}\n","import {array} from 'vega-util';\nimport {Channel, ScaleChannel, SCALE_CHANNELS} from '../../../channel';\nimport {isPathMark, MarkDef} from '../../../mark';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry, VgValueRef, VG_MARK_CONFIGS} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {aria} from './aria';\nimport {color} from './color';\nimport {nonPosition} from './nonposition';\nimport {text} from './text';\nimport {tooltip} from './tooltip';\nimport {fieldInvalidPredicate} from './valueref';\n\nexport {color} from './color';\nexport {wrapCondition} from './conditional';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip} from './tooltip';\n\nexport type Ignore = Record<'color' | 'size' | 'orient' | 'align' | 'baseline' | 'theta', 'ignore' | 'include'>;\n\nconst ALWAYS_IGNORE = new Set(['aria']);\n\nexport function baseEncodeEntry(model: UnitModel, ignore: Ignore) {\n  const {fill = undefined, stroke = undefined} = ignore.color === 'include' ? color(model) : {};\n  return {\n    ...markDefProperties(model.markDef, ignore),\n    ...wrapAllFieldsInvalid(model, 'fill', fill),\n    ...wrapAllFieldsInvalid(model, 'stroke', stroke),\n    ...nonPosition('opacity', model),\n    ...nonPosition('fillOpacity', model),\n    ...nonPosition('strokeOpacity', model),\n    ...nonPosition('strokeWidth', model),\n    ...nonPosition('strokeDash', model),\n    ...tooltip(model),\n    ...text(model, 'href'),\n    ...aria(model)\n  };\n}\n\n// TODO: mark VgValueRef[] as readonly after https://github.com/vega/vega/pull/1987\nfunction wrapAllFieldsInvalid(model: UnitModel, channel: Channel, valueRef: VgValueRef | VgValueRef[]): VgEncodeEntry {\n  const {config, mark, markDef} = model;\n\n  const invalid = getMarkPropOrConfig('invalid', markDef, config);\n\n  if (invalid === 'hide' && valueRef && !isPathMark(mark)) {\n    // For non-path marks, we have to exclude invalid values (null and NaN) for scales with continuous domains.\n    // For path marks, we will use \"defined\" property and skip these values instead.\n    const test = allFieldsInvalidPredicate(model, {invalid: true, channels: SCALE_CHANNELS});\n    if (test) {\n      return {\n        [channel]: [\n          // prepend the invalid case\n          // TODO: support custom value\n          {test, value: null},\n          ...array(valueRef)\n        ]\n      };\n    }\n  }\n  return valueRef ? {[channel]: valueRef} : {};\n}\n\nfunction markDefProperties(mark: MarkDef, ignore: Ignore) {\n  return VG_MARK_CONFIGS.reduce((m, prop) => {\n    if (!ALWAYS_IGNORE.has(prop) && mark[prop] !== undefined && ignore[prop] !== 'ignore') {\n      m[prop] = signalOrValueRef(mark[prop]);\n    }\n    return m;\n  }, {});\n}\n\nfunction allFieldsInvalidPredicate(\n  model: UnitModel,\n  {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n  const filterIndex = channels.reduce((aggregator: Dict<true>, channel) => {\n    const scaleComponent = model.getScaleComponent(channel);\n    if (scaleComponent) {\n      const scaleType = scaleComponent.get('type');\n      const field = model.vgField(channel, {expr: 'datum'});\n\n      // While discrete domain scales can handle invalid values, continuous scales can't.\n      if (field && hasContinuousDomain(scaleType)) {\n        aggregator[field] = true;\n      }\n    }\n    return aggregator;\n  }, {});\n\n  const fields = keys(filterIndex);\n  if (fields.length > 0) {\n    const op = invalid ? '||' : '&&';\n    return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n  }\n  return undefined;\n}\n","import {POSITION_SCALE_CHANNELS} from '../../../channel';\nimport {ScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {fieldInvalidPredicate} from './valueref';\n\nexport function defined(model: UnitModel): VgEncodeEntry {\n  const {config, markDef} = model;\n\n  const invalid = getMarkPropOrConfig('invalid', markDef, config);\n  if (invalid) {\n    const signal = allFieldsInvalidPredicate(model, {channels: POSITION_SCALE_CHANNELS});\n\n    if (signal) {\n      return {defined: {signal}};\n    }\n  }\n  return {};\n}\n\nfunction allFieldsInvalidPredicate(\n  model: UnitModel,\n  {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n  const filterIndex = channels.reduce((aggregator: Dict<true>, channel) => {\n    const scaleComponent = model.getScaleComponent(channel);\n    if (scaleComponent) {\n      const scaleType = scaleComponent.get('type');\n      const field = model.vgField(channel, {expr: 'datum'});\n\n      // While discrete domain scales can handle invalid values, continuous scales can't.\n      if (field && hasContinuousDomain(scaleType)) {\n        aggregator[field] = true;\n      }\n    }\n    return aggregator;\n  }, {});\n\n  const fields = keys(filterIndex);\n  if (fields.length > 0) {\n    const op = invalid ? '||' : '&&';\n    return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n  }\n  return undefined;\n}\n\nexport function valueIfDefined(prop: string, value: Value): VgEncodeEntry {\n  if (value !== undefined) {\n    return {[prop]: signalOrValueRef(value)};\n  }\n  return undefined;\n}\n","export {baseEncodeEntry} from './base';\nexport {color} from './color';\nexport {wrapCondition} from './conditional';\nexport {defined, valueIfDefined} from './defined';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectBinPosition, rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip, tooltipRefForEncoding} from './tooltip';\nexport {aria} from './aria';\n","import * as log from '../../../log';\nimport {isPathMark} from '../../../mark';\nimport {tooltip} from '../../mark/encode';\nimport {TransformCompiler} from './transforms';\n\nconst VORONOI = 'voronoi';\n\nconst nearest: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.type !== 'interval' && selCmpt.nearest;\n  },\n\n  parse: (model, selCmpt) => {\n    // Scope selection events to the voronoi mark to prevent capturing\n    // events that occur on the group mark (https://github.com/vega/vega/issues/2112).\n    if (selCmpt.events) {\n      for (const s of selCmpt.events) {\n        s.markname = model.getName(VORONOI);\n      }\n    }\n  },\n\n  marks: (model, selCmpt, marks) => {\n    const {x, y} = selCmpt.project.hasChannel;\n    const markType = model.mark;\n    if (isPathMark(markType)) {\n      log.warn(log.message.nearestNotSupportForContinuous(markType));\n      return marks;\n    }\n\n    const cellDef = {\n      name: model.getName(VORONOI),\n      type: 'path',\n      interactive: true,\n      from: {data: model.getName('marks')},\n      encode: {\n        update: {\n          fill: {value: 'transparent'},\n          strokeWidth: {value: 0.35},\n          stroke: {value: 'transparent'},\n          isVoronoi: {value: true},\n          ...tooltip(model, {reactiveGeom: true})\n        }\n      },\n      transform: [\n        {\n          type: 'voronoi',\n          x: {expr: x || !y ? 'datum.datum.x || 0' : '0'},\n          y: {expr: y || !x ? 'datum.datum.y || 0' : '0'},\n          size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n        }\n      ]\n    };\n\n    let index = 0;\n    let exists = false;\n    marks.forEach((mark, i) => {\n      const name = mark.name ?? '';\n      if (name === model.component.mark[0].name) {\n        index = i;\n      } else if (name.indexOf(VORONOI) >= 0) {\n        exists = true;\n      }\n    });\n\n    if (!exists) {\n      marks.splice(index + 1, 0, cellDef);\n    }\n\n    return marks;\n  }\n};\n\nexport default nearest;\n","import {DataSourceType} from '../../data';\nimport {Dict, uniqueId} from '../../util';\n\n/**\n * A node in the dataflow tree.\n */\nexport abstract class DataFlowNode {\n  private _children: DataFlowNode[] = [];\n\n  private _parent: DataFlowNode = null;\n\n  protected _hash: string | number;\n\n  constructor(parent: DataFlowNode, public readonly debugName?: string) {\n    if (parent) {\n      this.parent = parent;\n    }\n  }\n\n  /**\n   * Clone this node with a deep copy but don't clone links to children or parents.\n   */\n  public clone(): DataFlowNode {\n    throw new Error('Cannot clone node');\n  }\n\n  /**\n   * Return a hash of the node.\n   */\n  public abstract hash(): string | number;\n\n  /**\n   * Set of fields that this node depends on.\n   */\n  public abstract dependentFields(): Set<string>;\n\n  /**\n   * Set of fields that are being created by this node.\n   */\n  public abstract producedFields(): Set<string>;\n\n  get parent() {\n    return this._parent;\n  }\n\n  /**\n   * Set the parent of the node and also add this node to the parent's children.\n   */\n  set parent(parent: DataFlowNode) {\n    this._parent = parent;\n    if (parent) {\n      parent.addChild(this);\n    }\n  }\n\n  get children() {\n    return this._children;\n  }\n\n  public numChildren() {\n    return this._children.length;\n  }\n\n  public addChild(child: DataFlowNode, loc?: number) {\n    // do not add the same child twice\n    if (this._children.indexOf(child) > -1) {\n      console.warn('Attempt to add the same child twice.');\n      return;\n    }\n\n    if (loc !== undefined) {\n      this._children.splice(loc, 0, child);\n    } else {\n      this._children.push(child);\n    }\n  }\n\n  public removeChild(oldChild: DataFlowNode) {\n    const loc = this._children.indexOf(oldChild);\n    this._children.splice(loc, 1);\n    return loc;\n  }\n\n  /**\n   * Remove node from the dataflow.\n   */\n  public remove() {\n    let loc = this._parent.removeChild(this);\n    for (const child of this._children) {\n      // do not use the set method because we want to insert at a particular location\n      child._parent = this._parent;\n      this._parent.addChild(child, loc++);\n    }\n  }\n\n  /**\n   * Insert another node as a parent of this node.\n   */\n  public insertAsParentOf(other: DataFlowNode) {\n    const parent = other.parent;\n    parent.removeChild(this);\n    this.parent = parent;\n    other.parent = this;\n  }\n\n  public swapWithParent() {\n    const parent = this._parent;\n    const newParent = parent.parent;\n\n    // reconnect the children\n    for (const child of this._children) {\n      child.parent = parent;\n    }\n\n    // remove old links\n    this._children = []; // equivalent to removing every child link one by one\n    parent.removeChild(this);\n    parent.parent.removeChild(parent);\n\n    // swap two nodes\n    this.parent = newParent;\n    parent.parent = this;\n  }\n}\n\nexport class OutputNode extends DataFlowNode {\n  private _source: string;\n\n  private _name: string;\n\n  public clone(): this {\n    const cloneObj = new (this.constructor as any)();\n    cloneObj.debugName = 'clone_' + this.debugName;\n    cloneObj._source = this._source;\n    cloneObj._name = 'clone_' + this._name;\n    cloneObj.type = this.type;\n    cloneObj.refCounts = this.refCounts;\n    cloneObj.refCounts[cloneObj._name] = 0;\n    return cloneObj;\n  }\n\n  /**\n   * @param source The name of the source. Will change in assemble.\n   * @param type The type of the output node.\n   * @param refCounts A global ref counter map.\n   */\n  constructor(\n    parent: DataFlowNode,\n    source: string,\n    public readonly type: DataSourceType,\n    private readonly refCounts: Dict<number>\n  ) {\n    super(parent, source);\n\n    this._source = this._name = source;\n\n    if (this.refCounts && !(this._name in this.refCounts)) {\n      this.refCounts[this._name] = 0;\n    }\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields() {\n    return new Set<string>();\n  }\n\n  public hash() {\n    if (this._hash === undefined) {\n      this._hash = `Output ${uniqueId()}`;\n    }\n    return this._hash;\n  }\n\n  /**\n   * Request the datasource name and increase the ref counter.\n   *\n   * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n   * It is crucial to request the name from an output node to mark it as a required node.\n   * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n   *\n   * In the assemble phase, this will return the correct name.\n   */\n  public getSource() {\n    this.refCounts[this._name]++;\n    return this._source;\n  }\n\n  public isRequired(): boolean {\n    return !!this.refCounts[this._name];\n  }\n\n  public setSource(source: string) {\n    this._source = source;\n  }\n}\n","import {TimeUnitTransform as VgTimeUnitTransform} from 'vega';\nimport {getSecondaryRangeChannel} from '../../channel';\nimport {hasBand, vgField} from '../../channeldef';\nimport {getTimeUnitParts, normalizeTimeUnit} from '../../timeunit';\nimport {TimeUnitTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, replacePathInField, vals} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\n\nexport type TimeUnitComponent = TimeUnitTransform & {\n  /** whether to output time unit as a band (generate two formula including start and end) */\n  band?: boolean;\n};\n\nexport class TimeUnitNode extends DataFlowNode {\n  public clone() {\n    return new TimeUnitNode(null, duplicate(this.formula));\n  }\n\n  constructor(parent: DataFlowNode, private formula: Dict<TimeUnitComponent>) {\n    super(parent);\n  }\n\n  public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n    const formula = model.reduceFieldDef((timeUnitComponent: TimeUnitComponent, fieldDef, channel) => {\n      const {field, timeUnit} = fieldDef;\n\n      const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n      const band =\n        isUnitModel(model) && hasBand(channel, fieldDef, channelDef2, model.stack, model.markDef, model.config);\n\n      if (timeUnit) {\n        const as = vgField(fieldDef, {forAs: true});\n        timeUnitComponent[\n          hash({\n            as,\n            field,\n            timeUnit\n          })\n        ] = {\n          as,\n          field,\n          timeUnit,\n          ...(band ? {band: true} : {})\n        };\n      }\n      return timeUnitComponent;\n    }, {} as Dict<TimeUnitComponent>);\n\n    if (isEmpty(formula)) {\n      return null;\n    }\n\n    return new TimeUnitNode(parent, formula);\n  }\n\n  public static makeFromTransform(parent: DataFlowNode, t: TimeUnitTransform) {\n    const {timeUnit, ...other} = {...t};\n\n    const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n\n    const component = {\n      ...other,\n      timeUnit: normalizedTimeUnit\n    };\n\n    return new TimeUnitNode(parent, {\n      [hash(component)]: component\n    });\n  }\n\n  /**\n   * Merge together TimeUnitNodes assigning the children of `other` to `this`\n   * and removing `other`.\n   */\n  public merge(other: TimeUnitNode) {\n    this.formula = {...this.formula};\n\n    // if the same hash happen twice, merge \"band\"\n    for (const key in other.formula) {\n      if (!this.formula[key] || other.formula[key].band) {\n        // copy if it's not a duplicate or if we need to include copy band over\n        this.formula[key] = other.formula[key];\n      }\n    }\n\n    for (const child of other.children) {\n      other.removeChild(child);\n      child.parent = this;\n    }\n\n    other.remove();\n  }\n\n  public producedFields() {\n    return new Set(vals(this.formula).map(f => f.as));\n  }\n\n  public dependentFields() {\n    return new Set(vals(this.formula).map(f => f.field));\n  }\n\n  public hash() {\n    return `TimeUnit ${hash(this.formula)}`;\n  }\n\n  public assemble() {\n    const transforms: VgTimeUnitTransform[] = [];\n\n    for (const f of vals(this.formula)) {\n      const {field, as, timeUnit} = f;\n      const {unit, utc, ...params} = normalizeTimeUnit(timeUnit);\n\n      transforms.push({\n        field: replacePathInField(field),\n        type: 'timeunit',\n        ...(unit ? {units: getTimeUnitParts(unit)} : {}),\n        ...(utc ? {timezone: 'utc'} : {}),\n        ...params,\n        as: [as, `${as}_end`]\n      });\n    }\n\n    return transforms;\n  }\n}\n","import {array} from 'vega-util';\nimport {isSingleDefUnitChannel, ScaleChannel, SingleDefUnitChannel} from '../../../channel';\nimport * as log from '../../../log';\nimport {hasContinuousDomain} from '../../../scale';\nimport {SelectionInit, SelectionInitInterval} from '../../../selection';\nimport {Dict, hash, keys, replacePathInField, varName, isEmpty} from '../../../util';\nimport {TimeUnitComponent, TimeUnitNode} from '../../data/timeunit';\nimport {TransformCompiler} from './transforms';\n\nexport const TUPLE_FIELDS = '_tuple_fields';\n\n/**\n * Whether the selection tuples hold enumerated or ranged values for a field.\n */\nexport type TupleStoreType =\n  // enumerated\n  | 'E'\n  // ranged, exclusive, left-right inclusive\n  | 'R'\n  // ranged, left-inclusive, right-exclusive\n  | 'R-RE';\n\nexport interface SelectionProjection {\n  type: TupleStoreType;\n  field: string;\n  channel?: SingleDefUnitChannel;\n  signals?: {data?: string; visual?: string};\n  hasLegend?: boolean;\n}\n\nexport class SelectionProjectionComponent {\n  public hasChannel: Partial<Record<SingleDefUnitChannel, SelectionProjection>>;\n  public hasField: Record<string, SelectionProjection>;\n  public timeUnit?: TimeUnitNode;\n  public items: SelectionProjection[];\n\n  constructor(...items: SelectionProjection[]) {\n    this.items = items;\n    this.hasChannel = {};\n    this.hasField = {};\n  }\n}\n\nconst project: TransformCompiler = {\n  has: () => {\n    return true; // This transform handles its own defaults, so always run parse.\n  },\n\n  parse: (model, selCmpt, selDef) => {\n    const name = selCmpt.name;\n    const proj = selCmpt.project ?? (selCmpt.project = new SelectionProjectionComponent());\n    const parsed: Dict<SelectionProjection> = {};\n    const timeUnits: Dict<TimeUnitComponent> = {};\n\n    const signals = new Set<string>();\n    const signalName = (p: SelectionProjection, range: 'data' | 'visual') => {\n      const suffix = range === 'visual' ? p.channel : p.field;\n      let sg = varName(`${name}_${suffix}`);\n      for (let counter = 1; signals.has(sg); counter++) {\n        sg = varName(`${name}_${suffix}_${counter}`);\n      }\n      signals.add(sg);\n      return {[range]: sg};\n    };\n\n    // If no explicit projection (either fields or encodings) is specified, set some defaults.\n    // If an initial value is set, try to infer projections.\n    // Otherwise, use the default configuration.\n    if (!selDef.fields && !selDef.encodings) {\n      const cfg = model.config.selection[selDef.type];\n\n      if (selDef.init) {\n        for (const init of array(selDef.init)) {\n          for (const key of keys(init)) {\n            if (isSingleDefUnitChannel(key)) {\n              (selDef.encodings || (selDef.encodings = [])).push(key as SingleDefUnitChannel);\n            } else {\n              if (selDef.type === 'interval') {\n                log.warn('Interval selections should be initialized using \"x\" and/or \"y\" keys.');\n                selDef.encodings = cfg.encodings;\n              } else {\n                (selDef.fields || (selDef.fields = [])).push(key);\n              }\n            }\n          }\n        }\n      } else {\n        selDef.encodings = cfg.encodings;\n        selDef.fields = cfg.fields;\n      }\n    }\n\n    // TODO: find a possible channel mapping for these fields.\n    for (const field of selDef.fields ?? []) {\n      const p: SelectionProjection = {type: 'E', field};\n      p.signals = {...signalName(p, 'data')};\n      proj.items.push(p);\n      proj.hasField[field] = p;\n    }\n\n    for (const channel of selDef.encodings ?? []) {\n      const fieldDef = model.fieldDef(channel);\n      if (fieldDef) {\n        let field = fieldDef.field;\n\n        if (fieldDef.aggregate) {\n          log.warn(log.message.cannotProjectAggregate(channel, fieldDef.aggregate));\n          continue;\n        } else if (!field) {\n          log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n          continue;\n        }\n\n        if (fieldDef.timeUnit) {\n          field = model.vgField(channel);\n          // Construct TimeUnitComponents which will be combined into a\n          // TimeUnitNode. This node may need to be inserted into the\n          // dataflow if the selection is used across views that do not\n          // have these time units defined.\n          const component = {\n            timeUnit: fieldDef.timeUnit,\n            as: field,\n            field: fieldDef.field\n          };\n\n          timeUnits[hash(component)] = component;\n        }\n\n        // Prevent duplicate projections on the same field.\n        // TODO: what if the same field is bound to multiple channels (e.g., SPLOM diag).\n        if (!parsed[field]) {\n          // Determine whether the tuple will store enumerated or ranged values.\n          // Interval selections store ranges for continuous scales, and enumerations otherwise.\n          // Single/multi selections store ranges for binned fields, and enumerations otherwise.\n          let type: TupleStoreType = 'E';\n          if (selCmpt.type === 'interval') {\n            const scaleType = model.getScaleComponent(channel as ScaleChannel).get('type');\n            if (hasContinuousDomain(scaleType)) {\n              type = 'R';\n            }\n          } else if (fieldDef.bin) {\n            type = 'R-RE';\n          }\n\n          const p: SelectionProjection = {field, channel, type};\n          p.signals = {...signalName(p, 'data'), ...signalName(p, 'visual')};\n          proj.items.push((parsed[field] = p));\n          proj.hasField[field] = proj.hasChannel[channel] = parsed[field];\n        }\n      } else {\n        log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n      }\n    }\n\n    if (selDef.init) {\n      const parseInit = <T extends SelectionInit | SelectionInitInterval>(i: Dict<T>): T[] => {\n        return proj.items.map(p => (i[p.channel] !== undefined ? i[p.channel] : i[p.field]));\n      };\n\n      if (selDef.type === 'interval') {\n        selCmpt.init = parseInit(selDef.init);\n      } else {\n        const init = array(selDef.init);\n        selCmpt.init = init.map(parseInit);\n      }\n    }\n\n    if (!isEmpty(timeUnits)) {\n      proj.timeUnit = new TimeUnitNode(null, timeUnits);\n    }\n  },\n\n  signals: (model, selCmpt, allSignals) => {\n    const name = selCmpt.name + TUPLE_FIELDS;\n    const hasSignal = allSignals.filter(s => s.name === name);\n    return hasSignal.length > 0\n      ? allSignals\n      : allSignals.concat({\n          name,\n          value: selCmpt.project.items.map(proj => {\n            const {signals, hasLegend, ...rest} = proj;\n            rest.field = replacePathInField(rest.field);\n            return rest;\n          })\n        });\n  }\n};\n\nexport default project;\n","import {stringValue} from 'vega-util';\nimport {TUPLE} from '..';\nimport {varName} from '../../../util';\nimport {assembleInit} from '../assemble';\nimport nearest from './nearest';\nimport {TUPLE_FIELDS} from './project';\nimport {TransformCompiler} from './transforms';\nimport {isLegendBinding} from '../../../selection';\n\nconst inputBindings: TransformCompiler = {\n  has: selCmpt => {\n    return (\n      selCmpt.type === 'single' &&\n      selCmpt.resolve === 'global' &&\n      selCmpt.bind &&\n      selCmpt.bind !== 'scales' &&\n      !isLegendBinding(selCmpt.bind)\n    );\n  },\n\n  parse: (model, selCmpt, selDef, origDef) => {\n    // Binding a selection to input widgets disables default direct manipulation interaction.\n    // A user can choose to re-enable it by explicitly specifying triggering input events.\n    if (!origDef.on) delete selCmpt.events;\n    if (!origDef.clear) delete selCmpt.clear;\n  },\n\n  topLevelSignals: (model, selCmpt, signals) => {\n    const name = selCmpt.name;\n    const proj = selCmpt.project;\n    const bind = selCmpt.bind;\n    const init = selCmpt.init && selCmpt.init[0]; // Can only exist on single selections (one initial value).\n    const datum = nearest.has(selCmpt) ? '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n\n    proj.items.forEach((p, i) => {\n      const sgname = varName(`${name}_${p.field}`);\n      const hasSignal = signals.filter(s => s.name === sgname);\n\n      if (!hasSignal.length) {\n        signals.unshift({\n          name: sgname,\n          ...(init ? {init: assembleInit(init[i])} : {value: null}),\n          on: selCmpt.events\n            ? [\n                {\n                  events: selCmpt.events,\n                  update: `datum && item().mark.marktype !== 'group' ? ${datum}[${stringValue(p.field)}] : null`\n                }\n              ]\n            : [],\n          bind: bind[p.field] ?? bind[p.channel] ?? bind\n        });\n      }\n    });\n\n    return signals;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    const name = selCmpt.name;\n    const proj = selCmpt.project;\n    const signal = signals.filter(s => s.name === name + TUPLE)[0];\n    const fields = name + TUPLE_FIELDS;\n    const values = proj.items.map(p => varName(`${name}_${p.field}`));\n    const valid = values.map(v => `${v} !== null`).join(' && ');\n\n    if (values.length) {\n      signal.update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n    }\n\n    delete signal.value;\n    delete signal.on;\n\n    return signals;\n  }\n};\n\nexport default inputBindings;\n","import {TUPLE, unitName} from '..';\nimport {TransformCompiler} from './transforms';\n\nexport const TOGGLE = '_toggle';\n\nconst toggle: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.type === 'multi' && !!selCmpt.toggle;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    return signals.concat({\n      name: selCmpt.name + TOGGLE,\n      value: false,\n      on: [{events: selCmpt.events, update: selCmpt.toggle}]\n    });\n  },\n\n  modifyExpr: (model, selCmpt) => {\n    const tpl = selCmpt.name + TUPLE;\n    const signal = selCmpt.name + TOGGLE;\n\n    return (\n      `${signal} ? null : ${tpl}, ` +\n      (selCmpt.resolve === 'global' ? `${signal} ? null : true, ` : `${signal} ? null : {unit: ${unitName(model)}}, `) +\n      `${signal} ? ${tpl} : null`\n    );\n  }\n};\n\nexport default toggle;\n","import {Update} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {isString} from 'vega-util';\nimport {TUPLE} from '..';\nimport {varName} from '../../../util';\nimport inputBindings from './inputs';\nimport toggle, {TOGGLE} from './toggle';\nimport {TransformCompiler} from './transforms';\n\nconst clear: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.clear !== undefined && selCmpt.clear !== false;\n  },\n\n  parse: (model, selCmpt, selDef) => {\n    if (selDef.clear) {\n      selCmpt.clear = isString(selDef.clear) ? parseSelector(selDef.clear, 'scope') : selDef.clear;\n    }\n  },\n\n  topLevelSignals: (model, selCmpt, signals) => {\n    if (inputBindings.has(selCmpt)) {\n      for (const proj of selCmpt.project.items) {\n        const idx = signals.findIndex(n => n.name === varName(`${selCmpt.name}_${proj.field}`));\n        if (idx !== -1) {\n          signals[idx].on.push({events: selCmpt.clear, update: 'null'});\n        }\n      }\n    }\n\n    return signals;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    function addClear(idx: number, update: Update) {\n      if (idx !== -1 && signals[idx].on) {\n        signals[idx].on.push({events: selCmpt.clear, update});\n      }\n    }\n\n    // Be as minimalist as possible when adding clear triggers to minimize dataflow execution.\n    if (selCmpt.type === 'interval') {\n      for (const proj of selCmpt.project.items) {\n        const vIdx = signals.findIndex(n => n.name === proj.signals.visual);\n        addClear(vIdx, '[0, 0]');\n\n        if (vIdx === -1) {\n          const dIdx = signals.findIndex(n => n.name === proj.signals.data);\n          addClear(dIdx, 'null');\n        }\n      }\n    } else {\n      let tIdx = signals.findIndex(n => n.name === selCmpt.name + TUPLE);\n      addClear(tIdx, 'null');\n\n      if (toggle.has(selCmpt)) {\n        tIdx = signals.findIndex(n => n.name === selCmpt.name + TOGGLE);\n        addClear(tIdx, 'false');\n      }\n    }\n\n    return signals;\n  }\n};\n\nexport default clear;\n","import {stringValue} from 'vega-util';\nimport {VL_SELECTION_RESOLVE} from '..';\nimport {Channel, isScaleChannel} from '../../../channel';\nimport * as log from '../../../log';\nimport {hasContinuousDomain} from '../../../scale';\nimport {UnitModel} from '../../unit';\nimport {SelectionProjection} from './project';\nimport {TransformCompiler} from './transforms';\nimport {isLayerModel, Model} from '../../model';\n\nconst scaleBindings: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.type === 'interval' && selCmpt.resolve === 'global' && selCmpt.bind && selCmpt.bind === 'scales';\n  },\n\n  parse: (model, selCmpt) => {\n    const bound: SelectionProjection[] = (selCmpt.scales = []);\n\n    for (const proj of selCmpt.project.items) {\n      const channel = proj.channel;\n\n      if (!isScaleChannel(channel)) {\n        continue;\n      }\n\n      const scale = model.getScaleComponent(channel);\n      const scaleType = scale ? scale.get('type') : undefined;\n\n      if (!scale || !hasContinuousDomain(scaleType)) {\n        log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n        continue;\n      }\n\n      const extent = {selection: selCmpt.name, field: proj.field};\n      scale.set('selectionExtent', extent, true);\n      bound.push(proj);\n    }\n  },\n\n  topLevelSignals: (model, selCmpt, signals) => {\n    const bound = selCmpt.scales.filter(proj => signals.filter(s => s.name === proj.signals.data).length === 0);\n\n    // Top-level signals are only needed for multiview displays and if this\n    // view's top-level signals haven't already been generated.\n    if (!model.parent || isTopLevelLayer(model) || bound.length === 0) {\n      return signals;\n    }\n\n    // vlSelectionResolve does not account for the behavior of bound scales in\n    // multiview displays. Each unit view adds a tuple to the store, but the\n    // state of the selection is the unit selection most recently updated. This\n    // state is captured by the top-level signals that we insert and \"push\n    // outer\" to from within the units. We need to reassemble this state into\n    // the top-level named signal, except no single selCmpt has a global view.\n    const namedSg = signals.filter(s => s.name === selCmpt.name)[0];\n    let update = namedSg.update;\n    if (update.indexOf(VL_SELECTION_RESOLVE) >= 0) {\n      namedSg.update = `{${bound.map(proj => `${stringValue(proj.field)}: ${proj.signals.data}`).join(', ')}}`;\n    } else {\n      for (const proj of bound) {\n        const mapping = `${stringValue(proj.field)}: ${proj.signals.data}`;\n        if (update.indexOf(mapping) < 0) {\n          update = `${update.substring(0, update.length - 1)}, ${mapping}}`;\n        }\n      }\n      namedSg.update = update;\n    }\n\n    return signals.concat(bound.map(proj => ({name: proj.signals.data})));\n  },\n\n  signals: (model, selCmpt, signals) => {\n    // Nested signals need only push to top-level signals with multiview displays.\n    if (model.parent && !isTopLevelLayer(model)) {\n      for (const proj of selCmpt.scales) {\n        const signal: any = signals.filter(s => s.name === proj.signals.data)[0];\n        signal.push = 'outer';\n        delete signal.value;\n        delete signal.update;\n      }\n    }\n\n    return signals;\n  }\n};\n\nexport default scaleBindings;\n\nexport function domain(model: UnitModel, channel: Channel) {\n  const scale = stringValue(model.scaleName(channel));\n  return `domain(${scale})`;\n}\n\nfunction isTopLevelLayer(model: Model): boolean {\n  return model.parent && isLayerModel(model.parent) && (!model.parent.parent ?? isTopLevelLayer(model.parent.parent));\n}\n","import {MergedStream, Stream} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {array, isString} from 'vega-util';\nimport {forEachSelection, SelectionComponent, TUPLE} from '..';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport * as log from '../../../log';\nimport {isLegendBinding, isLegendStreamBinding, SELECTION_ID} from '../../../selection';\nimport {duplicate, varName} from '../../../util';\nimport {LegendComponent} from '../../legend/component';\nimport {UnitModel} from '../../unit';\nimport {TUPLE_FIELDS} from './project';\nimport {TOGGLE} from './toggle';\nimport {TransformCompiler} from './transforms';\n\nconst legendBindings: TransformCompiler = {\n  has: (selCmpt: SelectionComponent<'single' | 'multi'>) => {\n    const spec = selCmpt.resolve === 'global' && selCmpt.bind && isLegendBinding(selCmpt.bind);\n    const projLen = selCmpt.project.items.length === 1 && selCmpt.project.items[0].field !== SELECTION_ID;\n    if (spec && !projLen) {\n      log.warn(log.message.LEGEND_BINDINGS_PROJECT_LENGTH);\n    }\n\n    return spec && projLen;\n  },\n\n  parse: (model, selCmpt, selDef, origDef) => {\n    // Binding a selection to a legend disables default direct manipulation interaction.\n    // A user can choose to re-enable it by explicitly specifying triggering input events.\n    if (!origDef.on) delete selCmpt.events;\n    if (!origDef.clear) delete selCmpt.clear;\n\n    if (origDef.on || origDef.clear) {\n      const legendFilter = 'event.item && indexof(event.item.mark.role, \"legend\") < 0';\n      for (const evt of selCmpt.events) {\n        evt.filter = array(evt.filter ?? []);\n        if (evt.filter.indexOf(legendFilter) < 0) {\n          evt.filter.push(legendFilter);\n        }\n      }\n    }\n\n    const evt = isLegendStreamBinding(selCmpt.bind) ? selCmpt.bind.legend : 'click';\n    const stream: Stream[] = isString(evt) ? parseSelector(evt, 'view') : array(evt);\n    selCmpt.bind = {legend: {merge: stream}};\n  },\n\n  topLevelSignals: (model, selCmpt: SelectionComponent<'single' | 'multi'>, signals) => {\n    const selName = selCmpt.name;\n    const stream = isLegendStreamBinding(selCmpt.bind) && (selCmpt.bind.legend as MergedStream);\n    const markName = (name: string) => (s: Stream) => {\n      const ds = duplicate(s);\n      ds.markname = name;\n      return ds;\n    };\n\n    for (const proj of selCmpt.project.items) {\n      if (!proj.hasLegend) continue;\n      const prefix = `${varName(proj.field)}_legend`;\n      const sgName = `${selName}_${prefix}`;\n      const hasSignal = signals.filter(s => s.name === sgName);\n\n      if (hasSignal.length === 0) {\n        const events = stream.merge\n          .map(markName(`${prefix}_symbols`))\n          .concat(stream.merge.map(markName(`${prefix}_labels`)))\n          .concat(stream.merge.map(markName(`${prefix}_entries`)));\n\n        signals.unshift({\n          name: sgName,\n          ...(!selCmpt.init ? {value: null} : {}),\n          on: [\n            // Legend entries do not store values, so we need to walk the scenegraph to the symbol datum.\n            {events, update: 'datum.value || item().items[0].items[0].datum.value', force: true},\n            {events: stream.merge, update: `!event.item || !datum ? null : ${sgName}`, force: true}\n          ]\n        });\n      }\n    }\n\n    return signals;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    const name = selCmpt.name;\n    const proj = selCmpt.project;\n    const tuple = signals.find(s => s.name === name + TUPLE);\n    const fields = name + TUPLE_FIELDS;\n    const values = proj.items.filter(p => p.hasLegend).map(p => varName(`${name}_${varName(p.field)}_legend`));\n    const valid = values.map(v => `${v} !== null`).join(' && ');\n    const update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n\n    if (selCmpt.events && values.length > 0) {\n      tuple.on.push({\n        events: values.map(signal => ({signal})),\n        update\n      });\n    } else if (values.length > 0) {\n      tuple.update = update;\n      delete tuple.value;\n      delete tuple.on;\n    }\n\n    const toggle = signals.find(s => s.name === name + TOGGLE);\n    const events = isLegendStreamBinding(selCmpt.bind) && selCmpt.bind.legend;\n    if (toggle) {\n      if (!selCmpt.events) toggle.on[0].events = events;\n      else toggle.on.push({...toggle.on[0], events});\n    }\n\n    return signals;\n  }\n};\n\nexport default legendBindings;\n\nexport function parseInteractiveLegend(\n  model: UnitModel,\n  channel: NonPositionScaleChannel,\n  legendCmpt: LegendComponent\n) {\n  const field = model.fieldDef(channel)?.field;\n  forEachSelection(model, selCmpt => {\n    const proj = selCmpt.project.hasField[field] ?? selCmpt.project.hasChannel[channel];\n    if (proj && legendBindings.has(selCmpt)) {\n      const legendSelections = legendCmpt.get('selections') ?? [];\n      legendSelections.push(selCmpt.name);\n      legendCmpt.set('selections', legendSelections, false);\n      proj.hasLegend = true;\n    }\n  });\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {SelectionComponent} from '..';\nimport {ScaleChannel, X, Y} from '../../../channel';\nimport {UnitModel} from '../../unit';\nimport {BRUSH as INTERVAL_BRUSH} from '../interval';\nimport {SelectionProjection} from './project';\nimport scalesCompiler, {domain} from './scales';\nimport {TransformCompiler} from './transforms';\n\nconst ANCHOR = '_translate_anchor';\nconst DELTA = '_translate_delta';\n\nconst translate: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.type === 'interval' && selCmpt.translate;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    const name = selCmpt.name;\n    const hasScales = scalesCompiler.has(selCmpt);\n    const anchor = name + ANCHOR;\n    const {x, y} = selCmpt.project.hasChannel;\n    let events = parseSelector(selCmpt.translate, 'scope');\n\n    if (!hasScales) {\n      events = events.map(e => ((e.between[0].markname = name + INTERVAL_BRUSH), e));\n    }\n\n    signals.push(\n      {\n        name: anchor,\n        value: {},\n        on: [\n          {\n            events: events.map(e => e.between[0]),\n            update:\n              '{x: x(unit), y: y(unit)' +\n              (x !== undefined ? ', extent_x: ' + (hasScales ? domain(model, X) : `slice(${x.signals.visual})`) : '') +\n              (y !== undefined ? ', extent_y: ' + (hasScales ? domain(model, Y) : `slice(${y.signals.visual})`) : '') +\n              '}'\n          }\n        ]\n      },\n      {\n        name: name + DELTA,\n        value: {},\n        on: [\n          {\n            events: events,\n            update: `{x: ${anchor}.x - x(unit), y: ${anchor}.y - y(unit)}`\n          }\n        ]\n      }\n    );\n\n    if (x !== undefined) {\n      onDelta(model, selCmpt, x, 'width', signals);\n    }\n\n    if (y !== undefined) {\n      onDelta(model, selCmpt, y, 'height', signals);\n    }\n\n    return signals;\n  }\n};\n\nexport default translate;\n\nfunction onDelta(\n  model: UnitModel,\n  selCmpt: SelectionComponent,\n  proj: SelectionProjection,\n  size: 'width' | 'height',\n  signals: NewSignal[]\n) {\n  const name = selCmpt.name;\n  const anchor = name + ANCHOR;\n  const delta = name + DELTA;\n  const channel = proj.channel as ScaleChannel;\n  const hasScales = scalesCompiler.has(selCmpt);\n  const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n  const sizeSg = model.getSizeSignalRef(size).signal;\n  const scaleCmpt = model.getScaleComponent(channel);\n  const scaleType = scaleCmpt.get('type');\n  const sign = hasScales && channel === X ? '-' : ''; // Invert delta when panning x-scales.\n  const extent = `${anchor}.extent_${channel}`;\n  const offset = `${sign}${delta}.${channel} / ` + (hasScales ? `${sizeSg}` : `span(${extent})`);\n  const panFn = !hasScales\n    ? 'panLinear'\n    : scaleType === 'log'\n    ? 'panLog'\n    : scaleType === 'pow'\n    ? 'panPow'\n    : 'panLinear';\n  const update =\n    `${panFn}(${extent}, ${offset}` +\n    (hasScales && scaleType === 'pow' ? `, ${scaleCmpt.get('exponent') ?? 1}` : '') +\n    ')';\n\n  signal.on.push({\n    events: {signal: delta},\n    update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n  });\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {stringValue} from 'vega-util';\nimport {SelectionComponent} from '..';\nimport {ScaleChannel, X, Y} from '../../../channel';\nimport {UnitModel} from '../../unit';\nimport {BRUSH as INTERVAL_BRUSH} from '../interval';\nimport {SelectionProjection} from './project';\nimport {default as scalesCompiler, domain} from './scales';\nimport {TransformCompiler} from './transforms';\n\nconst ANCHOR = '_zoom_anchor';\nconst DELTA = '_zoom_delta';\n\nconst zoom: TransformCompiler = {\n  has: selCmpt => {\n    return selCmpt.type === 'interval' && selCmpt.zoom;\n  },\n\n  signals: (model, selCmpt, signals) => {\n    const name = selCmpt.name;\n    const hasScales = scalesCompiler.has(selCmpt);\n    const delta = name + DELTA;\n    const {x, y} = selCmpt.project.hasChannel;\n    const sx = stringValue(model.scaleName(X));\n    const sy = stringValue(model.scaleName(Y));\n    let events = parseSelector(selCmpt.zoom, 'scope');\n\n    if (!hasScales) {\n      events = events.map(e => ((e.markname = name + INTERVAL_BRUSH), e));\n    }\n\n    signals.push(\n      {\n        name: name + ANCHOR,\n        on: [\n          {\n            events: events,\n            update: !hasScales\n              ? `{x: x(unit), y: y(unit)}`\n              : '{' +\n                [sx ? `x: invert(${sx}, x(unit))` : '', sy ? `y: invert(${sy}, y(unit))` : '']\n                  .filter(expr => !!expr)\n                  .join(', ') +\n                '}'\n          }\n        ]\n      },\n      {\n        name: delta,\n        on: [\n          {\n            events: events,\n            force: true,\n            update: 'pow(1.001, event.deltaY * pow(16, event.deltaMode))'\n          }\n        ]\n      }\n    );\n\n    if (x !== undefined) {\n      onDelta(model, selCmpt, x, 'width', signals);\n    }\n\n    if (y !== undefined) {\n      onDelta(model, selCmpt, y, 'height', signals);\n    }\n\n    return signals;\n  }\n};\n\nexport default zoom;\n\nfunction onDelta(\n  model: UnitModel,\n  selCmpt: SelectionComponent,\n  proj: SelectionProjection,\n  size: 'width' | 'height',\n  signals: NewSignal[]\n) {\n  const name = selCmpt.name;\n  const channel = proj.channel as ScaleChannel;\n  const hasScales = scalesCompiler.has(selCmpt);\n  const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n  const sizeSg = model.getSizeSignalRef(size).signal;\n  const scaleCmpt = model.getScaleComponent(channel);\n  const scaleType = scaleCmpt.get('type');\n  const base = hasScales ? domain(model, channel) : signal.name;\n  const delta = name + DELTA;\n  const anchor = `${name}${ANCHOR}.${channel}`;\n  const zoomFn = !hasScales\n    ? 'zoomLinear'\n    : scaleType === 'log'\n    ? 'zoomLog'\n    : scaleType === 'pow'\n    ? 'zoomPow'\n    : 'zoomLinear';\n  const update =\n    `${zoomFn}(${base}, ${anchor}, ${delta}` +\n    (hasScales && scaleType === 'pow' ? `, ${scaleCmpt.get('exponent') ?? 1}` : '') +\n    ')';\n\n  signal.on.push({\n    events: {signal: delta},\n    update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n  });\n}\n","import {NewSignal, Signal} from 'vega';\nimport {SelectionComponent} from '..';\nimport {SelectionDef} from '../../../selection';\nimport {Model} from '../../model';\nimport {UnitModel} from '../../unit';\nimport clear from './clear';\nimport inputs from './inputs';\nimport nearest from './nearest';\nimport project from './project';\nimport scales from './scales';\nimport legends from './legends';\nimport toggle from './toggle';\nimport translate from './translate';\nimport zoom from './zoom';\n\nexport interface TransformCompiler {\n  has: (selCmpt: SelectionComponent) => boolean;\n  parse?: (model: UnitModel, selCmpt: SelectionComponent, def: SelectionDef, origDef: SelectionDef) => void;\n  signals?: (model: UnitModel, selCmpt: SelectionComponent, signals: NewSignal[]) => Signal[]; // the output can be a new or a push signal\n  topLevelSignals?: (model: Model, selCmpt: SelectionComponent, signals: NewSignal[]) => NewSignal[];\n  modifyExpr?: (model: UnitModel, selCmpt: SelectionComponent, expr: string) => string;\n  marks?: (model: UnitModel, selCmpt: SelectionComponent, marks: any[]) => any[];\n}\n\nconst compilers: TransformCompiler[] = [project, toggle, scales, legends, translate, zoom, inputs, nearest, clear];\n\nexport function forEachTransform(selCmpt: SelectionComponent, cb: (tx: TransformCompiler) => void) {\n  for (const t of compilers) {\n    if (t.has(selCmpt)) {\n      cb(t);\n    }\n  }\n}\n","import {Signal, SignalRef} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {identity, isArray, stringValue} from 'vega-util';\nimport {forEachSelection, MODIFY, STORE, unitName, VL_SELECTION_RESOLVE, TUPLE} from '.';\nimport {dateTimeToExpr, isDateTime, dateTimeToTimestamp} from '../../datetime';\nimport {SelectionInit, SelectionInitInterval, SelectionExtent} from '../../selection';\nimport {keys, varName} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {LayerModel} from '../layer';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {forEachTransform} from './transforms/transforms';\nimport {parseSelectionBinExtent} from './parse';\n\nexport function assembleInit(\n  init: readonly (SelectionInit | readonly SelectionInit[] | SelectionInitInterval)[] | SelectionInit,\n  isExpr = true,\n  wrap: (str: string | number) => string | number = identity\n): any {\n  if (isArray(init)) {\n    const assembled = init.map(v => assembleInit(v, isExpr, wrap));\n    return isExpr ? `[${assembled.join(', ')}]` : assembled;\n  } else if (isDateTime(init)) {\n    if (isExpr) {\n      return wrap(dateTimeToExpr(init));\n    } else {\n      return wrap(dateTimeToTimestamp(init));\n    }\n  }\n  return isExpr ? wrap(JSON.stringify(init)) : init;\n}\n\nexport function assembleUnitSelectionSignals(model: UnitModel, signals: Signal[]) {\n  forEachSelection(model, (selCmpt, selCompiler) => {\n    const name = selCmpt.name;\n    let modifyExpr = selCompiler.modifyExpr(model, selCmpt);\n\n    signals.push(...selCompiler.signals(model, selCmpt));\n\n    forEachTransform(selCmpt, txCompiler => {\n      if (txCompiler.signals) {\n        signals = txCompiler.signals(model, selCmpt, signals);\n      }\n      if (txCompiler.modifyExpr) {\n        modifyExpr = txCompiler.modifyExpr(model, selCmpt, modifyExpr);\n      }\n    });\n\n    signals.push({\n      name: name + MODIFY,\n      on: [\n        {\n          events: {signal: selCmpt.name + TUPLE},\n          update: `modify(${stringValue(selCmpt.name + STORE)}, ${modifyExpr})`\n        }\n      ]\n    });\n  });\n\n  return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleFacetSignals(model: FacetModel, signals: Signal[]) {\n  if (model.component.selection && keys(model.component.selection).length) {\n    const name = stringValue(model.getName('cell'));\n    signals.unshift({\n      name: 'facet',\n      value: {},\n      on: [\n        {\n          events: parseSelector('mousemove', 'scope'),\n          update: `isTuple(facet) ? facet : group(${name}).datum`\n        }\n      ]\n    });\n  }\n\n  return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleTopLevelSignals(model: UnitModel, signals: Signal[]) {\n  let hasSelections = false;\n  forEachSelection(model, (selCmpt, selCompiler) => {\n    const name = selCmpt.name;\n    const store = stringValue(name + STORE);\n    const hasSg = signals.filter(s => s.name === name);\n    if (hasSg.length === 0) {\n      const resolve = selCmpt.resolve === 'global' ? 'union' : selCmpt.resolve;\n      const isMulti = selCmpt.type === 'multi' ? ', true)' : ')';\n      signals.push({\n        name: selCmpt.name,\n        update: `${VL_SELECTION_RESOLVE}(${store}, ${stringValue(resolve)}${isMulti}`\n      });\n    }\n    hasSelections = true;\n\n    if (selCompiler.topLevelSignals) {\n      signals = selCompiler.topLevelSignals(model, selCmpt, signals);\n    }\n\n    forEachTransform(selCmpt, txCompiler => {\n      if (txCompiler.topLevelSignals) {\n        signals = txCompiler.topLevelSignals(model, selCmpt, signals);\n      }\n    });\n  });\n\n  if (hasSelections) {\n    const hasUnit = signals.filter(s => s.name === 'unit');\n    if (hasUnit.length === 0) {\n      signals.unshift({\n        name: 'unit',\n        value: {},\n        on: [{events: 'mousemove', update: 'isTuple(group()) ? group() : unit'}]\n      });\n    }\n  }\n\n  return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleUnitSelectionData(model: UnitModel, data: readonly VgData[]): VgData[] {\n  const dataCopy = [...data];\n  forEachSelection(model, selCmpt => {\n    const init: VgData = {name: selCmpt.name + STORE};\n    if (selCmpt.init) {\n      const fields = selCmpt.project.items.map(proj => {\n        const {signals, ...rest} = proj;\n        return rest;\n      });\n\n      const insert = selCmpt.init.map(i => assembleInit(i, false));\n      init.values =\n        selCmpt.type === 'interval'\n          ? [{unit: unitName(model, {escape: false}), fields, values: insert}]\n          : insert.map(i => ({unit: unitName(model, {escape: false}), fields, values: i}));\n    }\n    const contains = dataCopy.filter(d => d.name === selCmpt.name + STORE);\n    if (!contains.length) {\n      dataCopy.push(init);\n    }\n  });\n\n  return dataCopy;\n}\n\nexport function assembleUnitSelectionMarks(model: UnitModel, marks: any[]): any[] {\n  forEachSelection(model, (selCmpt, selCompiler) => {\n    marks = selCompiler.marks ? selCompiler.marks(model, selCmpt, marks) : marks;\n    forEachTransform(selCmpt, txCompiler => {\n      if (txCompiler.marks) {\n        marks = txCompiler.marks(model, selCmpt, marks);\n      }\n    });\n  });\n\n  return marks;\n}\n\nexport function assembleLayerSelectionMarks(model: LayerModel, marks: any[]): any[] {\n  for (const child of model.children) {\n    if (isUnitModel(child)) {\n      marks = assembleUnitSelectionMarks(child, marks);\n    }\n  }\n\n  return marks;\n}\n\nexport function assembleSelectionScaleDomain(model: Model, extent: SelectionExtent): SignalRef {\n  const name = extent.selection;\n  const selCmpt = model.getSelectionComponent(name, varName(name));\n  return {signal: parseSelectionBinExtent(selCmpt, extent)};\n}\n\nfunction cleanupEmptyOnArray(signals: Signal[]) {\n  return signals.map(s => {\n    if (s.on && !s.on.length) delete s.on;\n    return s;\n  });\n}\n","import {NewSignal, OnEvent, Stream} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, STORE, TUPLE, unitName} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {warn} from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInitInterval} from '../../selection';\nimport {keys} from '../../util';\nimport {UnitModel} from '../unit';\nimport {assembleInit} from './assemble';\nimport {SelectionProjection, TUPLE_FIELDS} from './transforms/project';\nimport scales from './transforms/scales';\n\nexport const BRUSH = '_brush';\nexport const SCALE_TRIGGER = '_scale_trigger';\n\nconst interval: SelectionCompiler<'interval'> = {\n  signals: (model, selCmpt) => {\n    const name = selCmpt.name;\n    const fieldsSg = name + TUPLE_FIELDS;\n    const hasScales = scales.has(selCmpt);\n    const signals: NewSignal[] = [];\n    const dataSignals: string[] = [];\n    const scaleTriggers: {\n      scaleName: string;\n      expr: string;\n    }[] = [];\n\n    if (selCmpt.translate && !hasScales) {\n      const filterExpr = `!event.item || event.item.mark.name !== ${stringValue(name + BRUSH)}`;\n      events(selCmpt, (on: OnEvent[], evt: Stream) => {\n        const filters = array(evt.between[0].filter ?? (evt.between[0].filter = []));\n        if (filters.indexOf(filterExpr) < 0) {\n          filters.push(filterExpr);\n        }\n        return on;\n      });\n    }\n\n    selCmpt.project.items.forEach((proj, i) => {\n      const channel = proj.channel;\n      if (channel !== X && channel !== Y) {\n        warn('Interval selections only support x and y encoding channels.');\n        return;\n      }\n\n      const init = selCmpt.init ? selCmpt.init[i] : null;\n      const cs = channelSignals(model, selCmpt, proj, init);\n      const dname = proj.signals.data;\n      const vname = proj.signals.visual;\n      const scaleName = stringValue(model.scaleName(channel));\n      const scaleType = model.getScaleComponent(channel).get('type');\n      const toNum = hasContinuousDomain(scaleType) ? '+' : '';\n\n      signals.push(...cs);\n      dataSignals.push(dname);\n\n      scaleTriggers.push({\n        scaleName: model.scaleName(channel),\n        expr:\n          `(!isArray(${dname}) || ` +\n          `(${toNum}invert(${scaleName}, ${vname})[0] === ${toNum}${dname}[0] && ` +\n          `${toNum}invert(${scaleName}, ${vname})[1] === ${toNum}${dname}[1]))`\n      });\n    });\n\n    // Proxy scale reactions to ensure that an infinite loop doesn't occur\n    // when an interval selection filter touches the scale.\n    if (!hasScales) {\n      signals.push({\n        name: name + SCALE_TRIGGER,\n        value: {},\n        on: [\n          {\n            events: scaleTriggers.map(t => ({scale: t.scaleName})),\n            update: scaleTriggers.map(t => t.expr).join(' && ') + ` ? ${name + SCALE_TRIGGER} : {}`\n          }\n        ]\n      });\n    }\n\n    // Only add an interval to the store if it has valid data extents. Data extents\n    // are set to null if pixel extents are equal to account for intervals over\n    // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n    const init = selCmpt.init;\n    const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n    return signals.concat({\n      name: name + TUPLE,\n      ...(init ? {init: `{${update}: ${assembleInit(init)}}`} : {}),\n      on: [\n        {\n          events: [{signal: dataSignals.join(' || ')}], // Prevents double invocation, see https://github.com/vega/vega#1672.\n          update: dataSignals.join(' && ') + ` ? {${update}: [${dataSignals}]} : null`\n        }\n      ]\n    });\n  },\n\n  modifyExpr: (model, selCmpt) => {\n    const tpl = selCmpt.name + TUPLE;\n    return tpl + ', ' + (selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`);\n  },\n\n  marks: (model, selCmpt, marks) => {\n    const name = selCmpt.name;\n    const {x, y} = selCmpt.project.hasChannel;\n    const xvname = x && x.signals.visual;\n    const yvname = y && y.signals.visual;\n    const store = `data(${stringValue(selCmpt.name + STORE)})`;\n\n    // Do not add a brush if we're binding to scales.\n    if (scales.has(selCmpt)) {\n      return marks;\n    }\n\n    const update: any = {\n      x: x !== undefined ? {signal: `${xvname}[0]`} : {value: 0},\n      y: y !== undefined ? {signal: `${yvname}[0]`} : {value: 0},\n      x2: x !== undefined ? {signal: `${xvname}[1]`} : {field: {group: 'width'}},\n      y2: y !== undefined ? {signal: `${yvname}[1]`} : {field: {group: 'height'}}\n    };\n\n    // If the selection is resolved to global, only a single interval is in\n    // the store. Wrap brush mark's encodings with a production rule to test\n    // this based on the `unit` property. Hide the brush mark if it corresponds\n    // to a unit different from the one in the store.\n    if (selCmpt.resolve === 'global') {\n      for (const key of keys(update)) {\n        update[key] = [\n          {\n            test: `${store}.length && ${store}[0].unit === ${unitName(model)}`,\n            ...update[key]\n          },\n          {value: 0}\n        ];\n      }\n    }\n\n    // Two brush marks ensure that fill colors and other aesthetic choices do\n    // not interefere with the core marks, but that the brushed region can still\n    // be interacted with (e.g., dragging it around).\n    const {fill, fillOpacity, cursor, ...stroke} = selCmpt.mark;\n    const vgStroke = keys(stroke).reduce((def, k) => {\n      def[k] = [\n        {\n          test: [x !== undefined && `${xvname}[0] !== ${xvname}[1]`, y !== undefined && `${yvname}[0] !== ${yvname}[1]`]\n            .filter(t => t)\n            .join(' && '),\n          value: stroke[k]\n        },\n        {value: null}\n      ];\n      return def;\n    }, {});\n\n    return [\n      {\n        name: name + BRUSH + '_bg',\n        type: 'rect',\n        clip: true,\n        encode: {\n          enter: {\n            fill: {value: fill},\n            fillOpacity: {value: fillOpacity}\n          },\n          update: update\n        }\n      },\n      ...marks,\n      {\n        name: name + BRUSH,\n        type: 'rect',\n        clip: true,\n        encode: {\n          enter: {\n            ...(cursor ? {cursor: {value: cursor}} : {}),\n            fill: {value: 'transparent'}\n          },\n          update: {...update, ...vgStroke}\n        }\n      }\n    ];\n  }\n};\nexport default interval;\n\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(\n  model: UnitModel,\n  selCmpt: SelectionComponent<'interval'>,\n  proj: SelectionProjection,\n  init?: SelectionInitInterval\n): NewSignal[] {\n  const channel = proj.channel;\n  const vname = proj.signals.visual;\n  const dname = proj.signals.data;\n  const hasScales = scales.has(selCmpt);\n  const scaleName = stringValue(model.scaleName(channel));\n  const scale = model.getScaleComponent(channel as ScaleChannel);\n  const scaleType = scale ? scale.get('type') : undefined;\n  const scaled = (str: string) => `scale(${scaleName}, ${str})`;\n  const size = model.getSizeSignalRef(channel === X ? 'width' : 'height').signal;\n  const coord = `${channel}(unit)`;\n\n  const on = events(selCmpt, (def: OnEvent[], evt: Stream) => {\n    return [\n      ...def,\n      {events: evt.between[0], update: `[${coord}, ${coord}]`}, // Brush Start\n      {events: evt, update: `[${vname}[0], clamp(${coord}, 0, ${size})]`} // Brush End\n    ];\n  });\n\n  // React to pan/zooms of continuous scales. Non-continuous scales\n  // (band, point) cannot be pan/zoomed and any other changes\n  // to their domains (e.g., filtering) should clear the brushes.\n  on.push({\n    events: {signal: selCmpt.name + SCALE_TRIGGER},\n    update: hasContinuousDomain(scaleType) ? `[${scaled(`${dname}[0]`)}, ${scaled(`${dname}[1]`)}]` : `[0, 0]`\n  });\n\n  return hasScales\n    ? [{name: dname, on: []}]\n    : [\n        {\n          name: vname,\n          ...(init ? {init: assembleInit(init, true, scaled)} : {value: []}),\n          on: on\n        },\n        {\n          name: dname,\n          ...(init ? {init: assembleInit(init)} : {}), // Cannot be `value` as `init` may require datetime exprs.\n          on: [\n            {\n              events: {signal: vname},\n              update: `${vname}[0] === ${vname}[1] ? null : invert(${scaleName}, ${vname})`\n            }\n          ]\n        }\n      ];\n}\n\nfunction events(selCmpt: SelectionComponent<'interval'>, cb: (def: OnEvent[], evt: Stream) => OnEvent[]): OnEvent[] {\n  return selCmpt.events.reduce((on, evt) => {\n    if (!evt.between) {\n      warn(`${evt} is not an ordered event stream for interval selections.`);\n      return on;\n    }\n    return cb(on, evt);\n  }, [] as OnEvent[]);\n}\n","import {Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, TUPLE, unitName} from '.';\nimport {UnitModel} from '../unit';\nimport {TUPLE_FIELDS} from './transforms/project';\n\nexport function singleOrMultiSignals(model: UnitModel, selCmpt: SelectionComponent<'single' | 'multi'>) {\n  const name = selCmpt.name;\n  const fieldsSg = name + TUPLE_FIELDS;\n  const project = selCmpt.project;\n  const datum = '(item().isVoronoi ? datum.datum : datum)';\n  const values = project.items\n    .map(p => {\n      const fieldDef = model.fieldDef(p.channel);\n      // Binned fields should capture extents, for a range test against the raw field.\n      return fieldDef && fieldDef.bin\n        ? `[${datum}[${stringValue(model.vgField(p.channel, {}))}], ` +\n            `${datum}[${stringValue(model.vgField(p.channel, {binSuffix: 'end'}))}]]`\n        : `${datum}[${stringValue(p.field)}]`;\n    })\n    .join(', ');\n\n  // Only add a discrete selection to the store if a datum is present _and_\n  // the interaction isn't occurring on a group mark. This guards against\n  // polluting interactive state with invalid values in faceted displays\n  // as the group marks are also data-driven. We force the update to account\n  // for constant null states but varying toggles (e.g., shift-click in\n  // whitespace followed by a click in whitespace; the store should only\n  // be cleared on the second click).\n  const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n\n  const events: Stream[] = selCmpt.events;\n\n  return [\n    {\n      name: name + TUPLE,\n      on: events\n        ? [\n            {\n              events,\n              update: `datum && item().mark.marktype !== 'group' ? {${update}: [${values}]} : null`,\n              force: true\n            }\n          ]\n        : []\n    }\n  ];\n}\n\nconst multi: SelectionCompiler<'multi'> = {\n  signals: singleOrMultiSignals,\n\n  modifyExpr: (model, selCmpt) => {\n    const tpl = selCmpt.name + TUPLE;\n    return tpl + ', ' + (selCmpt.resolve === 'global' ? 'null' : `{unit: ${unitName(model)}}`);\n  }\n};\n\nexport default multi;\n","import {SelectionCompiler, TUPLE, unitName} from '.';\nimport {singleOrMultiSignals} from './multi';\n\nconst single: SelectionCompiler<'single'> = {\n  signals: singleOrMultiSignals,\n\n  modifyExpr: (model, selCmpt) => {\n    const tpl = selCmpt.name + TUPLE;\n    return tpl + ', ' + (selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`);\n  }\n};\n\nexport default single;\n","import {Binding, NewSignal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {FACET_CHANNELS} from '../../channel';\nimport {\n  BrushConfig,\n  LegendBinding,\n  SelectionInit,\n  SelectionInitInterval,\n  SelectionResolution,\n  SelectionType,\n  SELECTION_ID\n} from '../../selection';\nimport {Dict, vals} from '../../util';\nimport {OutputNode} from '../data/dataflow';\nimport {FacetModel} from '../facet';\nimport {isFacetModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport interval from './interval';\nimport multi from './multi';\nimport single from './single';\nimport {SelectionProjection, SelectionProjectionComponent} from './transforms/project';\n\nexport const STORE = '_store';\nexport const TUPLE = '_tuple';\nexport const MODIFY = '_modify';\nexport const SELECTION_DOMAIN = '_selection_domain_';\nexport const VL_SELECTION_RESOLVE = 'vlSelectionResolve';\n\nexport interface SelectionComponent<T extends SelectionType = SelectionType> {\n  name: string;\n  type: T;\n  // Use conditional types for stricter type of init (as the type of init depends on selection type).\n  init?: (T extends 'interval'\n    ? SelectionInitInterval\n    : T extends 'single'\n    ? SelectionInit\n    : T extends 'multi'\n    ? SelectionInit | SelectionInit[]\n    : never)[];\n  events: Stream[];\n  materialized: OutputNode;\n  bind?: 'scales' | Binding | Dict<Binding> | LegendBinding;\n  resolve: SelectionResolution;\n  empty: 'all' | 'none';\n  mark?: BrushConfig;\n\n  // Transforms\n  project?: SelectionProjectionComponent;\n  scales?: SelectionProjection[];\n  toggle?: any;\n  translate?: any;\n  zoom?: any;\n  nearest?: any;\n  clear?: any;\n}\n\nexport interface SelectionCompiler<T extends SelectionType = SelectionType> {\n  signals: (model: UnitModel, selCmpt: SelectionComponent<T>) => NewSignal[];\n  topLevelSignals?: (model: Model, selCmpt: SelectionComponent<T>, signals: NewSignal[]) => NewSignal[];\n  modifyExpr: (model: UnitModel, selCmpt: SelectionComponent<T>) => string;\n  marks?: (model: UnitModel, selCmpt: SelectionComponent<T>, marks: any[]) => any[];\n}\n\nconst compilers: Dict<SelectionCompiler> = {single, multi, interval};\n\nexport function forEachSelection(\n  model: Model,\n  cb: (selCmpt: SelectionComponent, selCompiler: SelectionCompiler) => void | boolean\n) {\n  const selections = model.component.selection;\n  if (selections) {\n    for (const sel of vals(selections)) {\n      const success = cb(sel, compilers[sel.type]);\n      if (success === true) break;\n    }\n  }\n}\n\nfunction getFacetModel(model: Model): FacetModel {\n  let parent = model.parent;\n  while (parent) {\n    if (isFacetModel(parent)) {\n      break;\n    }\n    parent = parent.parent;\n  }\n\n  return parent as FacetModel;\n}\n\nexport function unitName(model: Model, {escape} = {escape: true}) {\n  let name = escape ? stringValue(model.name) : model.name;\n  const facetModel = getFacetModel(model);\n  if (facetModel) {\n    const {facet} = facetModel;\n    for (const channel of FACET_CHANNELS) {\n      if (facet[channel]) {\n        name += ` + '__facet_${channel}_' + (facet[${stringValue(facetModel.vgField(channel))}])`;\n      }\n    }\n  }\n  return name;\n}\n\nexport function requiresSelectionId(model: Model) {\n  let identifier = false;\n  forEachSelection(model, selCmpt => {\n    identifier = identifier || selCmpt.project.items.some(proj => proj.field === SELECTION_ID);\n  });\n  return identifier;\n}\n","export const RawCode = 'RawCode';\nexport const Literal = 'Literal';\nexport const Property = 'Property';\nexport const Identifier = 'Identifier';\n\nexport const ArrayExpression = 'ArrayExpression';\nexport const BinaryExpression = 'BinaryExpression';\nexport const CallExpression = 'CallExpression';\nexport const ConditionalExpression = 'ConditionalExpression';\nexport const LogicalExpression = 'LogicalExpression';\nexport const MemberExpression = 'MemberExpression';\nexport const ObjectExpression = 'ObjectExpression';\nexport const UnaryExpression = 'UnaryExpression';\n\nexport default function ASTNode(type) {\n  this.type = type;\n}\n\nASTNode.prototype.visit = function(visitor) {\n  let c, i, n;\n\n  if (visitor(this)) return 1;\n\n  for (c=children(this), i=0, n=c.length; i<n; ++i) {\n    if (c[i].visit(visitor)) return 1;\n  }\n};\n\nfunction children(node) {\n  switch (node.type) {\n    case ArrayExpression:\n      return node.elements;\n    case BinaryExpression:\n    case LogicalExpression:\n      return [node.left, node.right];\n    case CallExpression:\n      return [node.callee].concat(node.arguments);\n    case ConditionalExpression:\n      return [node.test, node.consequent, node.alternate];\n    case MemberExpression:\n      return [node.object, node.property];\n    case ObjectExpression:\n      return node.properties;\n    case Property:\n      return [node.key, node.value];\n    case UnaryExpression:\n      return [node.argument];\n    case Identifier:\n    case Literal:\n    case RawCode:\n    default:\n      return [];\n  }\n}\n","/*\n  The following expression parser is based on Esprima (http://esprima.org/).\n  Original header comment and license for Esprima is included here:\n\n  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n    source,\n    index,\n    length,\n    lookahead;\n\nvar TokenBooleanLiteral = 1,\n    TokenEOF = 2,\n    TokenIdentifier = 3,\n    TokenKeyword = 4,\n    TokenNullLiteral = 5,\n    TokenNumericLiteral = 6,\n    TokenPunctuator = 7,\n    TokenStringLiteral = 8,\n    TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '<end>';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n    SyntaxBinaryExpression = 'BinaryExpression',\n    SyntaxCallExpression = 'CallExpression',\n    SyntaxConditionalExpression = 'ConditionalExpression',\n    SyntaxIdentifier = 'Identifier',\n    SyntaxLiteral = 'Literal',\n    SyntaxLogicalExpression = 'LogicalExpression',\n    SyntaxMemberExpression = 'MemberExpression',\n    SyntaxObjectExpression = 'ObjectExpression',\n    SyntaxProperty = 'Property',\n    SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n    MessageUnexpectedNumber = 'Unexpected number',\n    MessageUnexpectedString = 'Unexpected string',\n    MessageUnexpectedIdentifier = 'Unexpected identifier',\n    MessageUnexpectedReserved = 'Unexpected reserved word',\n    MessageUnexpectedEOS = 'Unexpected end of input',\n    MessageInvalidRegExp = 'Invalid regular expression',\n    MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n    MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n    MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n    DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n    // eslint-disable-next-line no-misleading-character-class\n    RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n  /* istanbul ignore next */\n  if (!condition) {\n    throw new Error('ASSERT: ' + message);\n  }\n}\n\nfunction isDecimalDigit(ch) {\n  return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n  return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n  return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n  return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n    (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n  return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n  return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n    (ch >= 0x41 && ch <= 0x5A) || // A..Z\n    (ch >= 0x61 && ch <= 0x7A) || // a..z\n    (ch === 0x5C) || // \\ (backslash)\n    ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n  return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n    (ch >= 0x41 && ch <= 0x5A) || // A..Z\n    (ch >= 0x61 && ch <= 0x7A) || // a..z\n    (ch >= 0x30 && ch <= 0x39) || // 0..9\n    (ch === 0x5C) || // \\ (backslash)\n    ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n  'if':1, 'in':1, 'do':1,\n  'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n  'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n  'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n  'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n  'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n  'function':1, 'continue':1, 'debugger':1,\n  'interface':1, 'protected':1,\n  'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n  var ch;\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n\n    if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n}\n\nfunction scanHexEscape(prefix) {\n  var i, len, ch, code = 0;\n\n  len = (prefix === 'u') ? 4 : 2;\n  for (i = 0; i < len; ++i) {\n    if (index < length && isHexDigit(source[index])) {\n      ch = source[index++];\n      code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n  return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n  var ch, code, cu1, cu2;\n\n  ch = source[index];\n  code = 0;\n\n  // At least, one hex digit is required.\n  if (ch === '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  while (index < length) {\n    ch = source[index++];\n    if (!isHexDigit(ch)) {\n      break;\n    }\n    code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n  }\n\n  if (code > 0x10FFFF || ch !== '}') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  // UTF-16 Encoding\n  if (code <= 0xFFFF) {\n    return String.fromCharCode(code);\n  }\n  cu1 = ((code - 0x10000) >> 10) + 0xD800;\n  cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n  return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n  var ch, id;\n\n  ch = source.charCodeAt(index++);\n  id = String.fromCharCode(ch);\n\n  // '\\u' (U+005C, U+0075) denotes an escaped character.\n  if (ch === 0x5C) {\n    if (source.charCodeAt(index) !== 0x75) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n    ++index;\n    ch = scanHexEscape('u');\n    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n    id = ch;\n  }\n\n  while (index < length) {\n    ch = source.charCodeAt(index);\n    if (!isIdentifierPart(ch)) {\n      break;\n    }\n    ++index;\n    id += String.fromCharCode(ch);\n\n    // '\\u' (U+005C, U+0075) denotes an escaped character.\n    if (ch === 0x5C) {\n      id = id.substr(0, id.length - 1);\n      if (source.charCodeAt(index) !== 0x75) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n      ++index;\n      ch = scanHexEscape('u');\n      if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n      id += ch;\n    }\n  }\n\n  return id;\n}\n\nfunction getIdentifier() {\n  var start, ch;\n\n  start = index++;\n  while (index < length) {\n    ch = source.charCodeAt(index);\n    if (ch === 0x5C) {\n      // Blackslash (U+005C) marks Unicode escape sequence.\n      index = start;\n      return getEscapedIdentifier();\n    }\n    if (isIdentifierPart(ch)) {\n      ++index;\n    } else {\n      break;\n    }\n  }\n\n  return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n  var start, id, type;\n\n  start = index;\n\n  // Backslash (U+005C) starts an escaped character.\n  id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n  // There is no keyword or literal with only one character.\n  // Thus, it must be an identifier.\n  if (id.length === 1) {\n    type = TokenIdentifier;\n  } else if (keywords.hasOwnProperty(id)) { // eslint-disable-line no-prototype-builtins\n    type = TokenKeyword;\n  } else if (id === 'null') {\n    type = TokenNullLiteral;\n  } else if (id === 'true' || id === 'false') {\n    type = TokenBooleanLiteral;\n  } else {\n    type = TokenIdentifier;\n  }\n\n  return {\n    type: type,\n    value: id,\n    start: start,\n    end: index\n  };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n  var start = index,\n    code = source.charCodeAt(index),\n    code2,\n    ch1 = source[index],\n    ch2,\n    ch3,\n    ch4;\n\n  switch (code) {\n\n    // Check for most common single-character punctuators.\n    case 0x2E: // . dot\n    case 0x28: // ( open bracket\n    case 0x29: // ) close bracket\n    case 0x3B: // ; semicolon\n    case 0x2C: // , comma\n    case 0x7B: // { open curly brace\n    case 0x7D: // } close curly brace\n    case 0x5B: // [\n    case 0x5D: // ]\n    case 0x3A: // :\n    case 0x3F: // ?\n    case 0x7E: // ~\n      ++index;\n      return {\n        type: TokenPunctuator,\n        value: String.fromCharCode(code),\n        start: start,\n        end: index\n      };\n\n    default:\n      code2 = source.charCodeAt(index + 1);\n\n      // '=' (U+003D) marks an assignment or comparison operator.\n      if (code2 === 0x3D) {\n        switch (code) {\n          case 0x2B: // +\n          case 0x2D: // -\n          case 0x2F: // /\n          case 0x3C: // <\n          case 0x3E: // >\n          case 0x5E: // ^\n          case 0x7C: // |\n          case 0x25: // %\n          case 0x26: // &\n          case 0x2A: // *\n            index += 2;\n            return {\n              type: TokenPunctuator,\n              value: String.fromCharCode(code) + String.fromCharCode(code2),\n              start: start,\n              end: index\n            };\n\n          case 0x21: // !\n          case 0x3D: // =\n            index += 2;\n\n            // !== and ===\n            if (source.charCodeAt(index) === 0x3D) {\n              ++index;\n            }\n            return {\n              type: TokenPunctuator,\n              value: source.slice(start, index),\n              start: start,\n              end: index\n            };\n        }\n      }\n  }\n\n  // 4-character punctuator: >>>=\n\n  ch4 = source.substr(index, 4);\n\n  if (ch4 === '>>>=') {\n    index += 4;\n    return {\n      type: TokenPunctuator,\n      value: ch4,\n      start: start,\n      end: index\n    };\n  }\n\n  // 3-character punctuators: === !== >>> <<= >>=\n\n  ch3 = ch4.substr(0, 3);\n\n  if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n    index += 3;\n    return {\n      type: TokenPunctuator,\n      value: ch3,\n      start: start,\n      end: index\n    };\n  }\n\n  // Other 2-character punctuators: ++ -- << >> && ||\n  ch2 = ch3.substr(0, 2);\n\n  if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n    index += 2;\n    return {\n      type: TokenPunctuator,\n      value: ch2,\n      start: start,\n      end: index\n    };\n  }\n\n  // 1-character punctuators: < > = ! + - * % & | ^ /\n\n  if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n    ++index;\n    return {\n      type: TokenPunctuator,\n      value: ch1,\n      start: start,\n      end: index\n    };\n  }\n\n  throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n  var number = '';\n\n  while (index < length) {\n    if (!isHexDigit(source[index])) {\n      break;\n    }\n    number += source[index++];\n  }\n\n  if (number.length === 0) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt('0x' + number, 16),\n    start: start,\n    end: index\n  };\n}\n\nfunction scanOctalLiteral(start) {\n  var number = '0' + source[index++];\n  while (index < length) {\n    if (!isOctalDigit(source[index])) {\n      break;\n    }\n    number += source[index++];\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseInt(number, 8),\n    octal: true,\n    start: start,\n    end: index\n  };\n}\n\nfunction scanNumericLiteral() {\n  var number, start, ch;\n\n  ch = source[index];\n  assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n    'Numeric literal must start with a decimal digit or a decimal point');\n\n  start = index;\n  number = '';\n  if (ch !== '.') {\n    number = source[index++];\n    ch = source[index];\n\n    // Hex number starts with '0x'.\n    // Octal number starts with '0'.\n    if (number === '0') {\n      if (ch === 'x' || ch === 'X') {\n        ++index;\n        return scanHexLiteral(start);\n      }\n      if (isOctalDigit(ch)) {\n        return scanOctalLiteral(start);\n      }\n\n      // decimal number starts with '0' such as '09' is illegal.\n      if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n        throwError({}, MessageUnexpectedToken, ILLEGAL);\n      }\n    }\n\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n    ch = source[index];\n  }\n\n  if (ch === '.') {\n    number += source[index++];\n    while (isDecimalDigit(source.charCodeAt(index))) {\n      number += source[index++];\n    }\n    ch = source[index];\n  }\n\n  if (ch === 'e' || ch === 'E') {\n    number += source[index++];\n\n    ch = source[index];\n    if (ch === '+' || ch === '-') {\n      number += source[index++];\n    }\n    if (isDecimalDigit(source.charCodeAt(index))) {\n      while (isDecimalDigit(source.charCodeAt(index))) {\n        number += source[index++];\n      }\n    } else {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    }\n  }\n\n  if (isIdentifierStart(source.charCodeAt(index))) {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenNumericLiteral,\n    value: parseFloat(number),\n    start: start,\n    end: index\n  };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n  var str = '',\n    quote, start, ch, code, octal = false;\n\n  quote = source[index];\n  assert((quote === '\\'' || quote === '\"'),\n    'String literal must starts with a quote');\n\n  start = index;\n  ++index;\n\n  while (index < length) {\n    ch = source[index++];\n\n    if (ch === quote) {\n      quote = '';\n      break;\n    } else if (ch === '\\\\') {\n      ch = source[index++];\n      if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n        switch (ch) {\n          case 'u':\n          case 'x':\n            if (source[index] === '{') {\n              ++index;\n              str += scanUnicodeCodePointEscape();\n            } else {\n              str += scanHexEscape(ch);\n            }\n            break;\n          case 'n':\n            str += '\\n';\n            break;\n          case 'r':\n            str += '\\r';\n            break;\n          case 't':\n            str += '\\t';\n            break;\n          case 'b':\n            str += '\\b';\n            break;\n          case 'f':\n            str += '\\f';\n            break;\n          case 'v':\n            str += '\\x0B';\n            break;\n\n          default:\n            if (isOctalDigit(ch)) {\n              code = '01234567'.indexOf(ch);\n\n              // \\0 is not octal escape sequence\n              if (code !== 0) {\n                octal = true;\n              }\n\n              if (index < length && isOctalDigit(source[index])) {\n                octal = true;\n                code = code * 8 + '01234567'.indexOf(source[index++]);\n\n                // 3 digits are only allowed when string starts\n                // with 0, 1, 2, 3\n                if ('0123'.indexOf(ch) >= 0 &&\n                  index < length &&\n                  isOctalDigit(source[index])) {\n                  code = code * 8 + '01234567'.indexOf(source[index++]);\n                }\n              }\n              str += String.fromCharCode(code);\n            } else {\n              str += ch;\n            }\n            break;\n        }\n      } else {\n        if (ch === '\\r' && source[index] === '\\n') {\n          ++index;\n        }\n      }\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      break;\n    } else {\n      str += ch;\n    }\n  }\n\n  if (quote !== '') {\n    throwError({}, MessageUnexpectedToken, ILLEGAL);\n  }\n\n  return {\n    type: TokenStringLiteral,\n    value: str,\n    octal: octal,\n    start: start,\n    end: index\n  };\n}\n\nfunction testRegExp(pattern, flags) {\n  var tmp = pattern;\n\n  if (flags.indexOf('u') >= 0) {\n    // Replace each astral symbol and every Unicode code point\n    // escape sequence with a single ASCII symbol to avoid throwing on\n    // regular expressions that are only valid in combination with the\n    // `/u` flag.\n    // Note: replacing with the ASCII symbol `x` might cause false\n    // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n    // perfectly valid pattern that is equivalent to `[a-b]`, but it\n    // would be replaced by `[x-b]` which throws an error.\n    tmp = tmp\n      .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n        if (parseInt($1, 16) <= 0x10FFFF) {\n          return 'x';\n        }\n        throwError({}, MessageInvalidRegExp);\n      })\n      .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n  }\n\n  // First, detect invalid regular expressions.\n  try {\n    new RegExp(tmp);\n  } catch (e) {\n    throwError({}, MessageInvalidRegExp);\n  }\n\n  // Return a regular expression object for this pattern-flag pair, or\n  // `null` in case the current environment doesn't support the flags it\n  // uses.\n  try {\n    return new RegExp(pattern, flags);\n  } catch (exception) {\n    return null;\n  }\n}\n\nfunction scanRegExpBody() {\n  var ch, str, classMarker, terminated, body;\n\n  ch = source[index];\n  assert(ch === '/', 'Regular expression literal must start with a slash');\n  str = source[index++];\n\n  classMarker = false;\n  terminated = false;\n  while (index < length) {\n    ch = source[index++];\n    str += ch;\n    if (ch === '\\\\') {\n      ch = source[index++];\n      // ECMA-262 7.8.5\n      if (isLineTerminator(ch.charCodeAt(0))) {\n        throwError({}, MessageUnterminatedRegExp);\n      }\n      str += ch;\n    } else if (isLineTerminator(ch.charCodeAt(0))) {\n      throwError({}, MessageUnterminatedRegExp);\n    } else if (classMarker) {\n      if (ch === ']') {\n        classMarker = false;\n      }\n    } else {\n      if (ch === '/') {\n        terminated = true;\n        break;\n      } else if (ch === '[') {\n        classMarker = true;\n      }\n    }\n  }\n\n  if (!terminated) {\n    throwError({}, MessageUnterminatedRegExp);\n  }\n\n  // Exclude leading and trailing slash.\n  body = str.substr(1, str.length - 2);\n  return {\n    value: body,\n    literal: str\n  };\n}\n\nfunction scanRegExpFlags() {\n  var ch, str, flags;\n\n  str = '';\n  flags = '';\n  while (index < length) {\n    ch = source[index];\n    if (!isIdentifierPart(ch.charCodeAt(0))) {\n      break;\n    }\n\n    ++index;\n    if (ch === '\\\\' && index < length) {\n      throwError({}, MessageUnexpectedToken, ILLEGAL);\n    } else {\n      flags += ch;\n      str += ch;\n    }\n  }\n\n  if (flags.search(/[^gimuy]/g) >= 0) {\n    throwError({}, MessageInvalidRegExp, flags);\n  }\n\n  return {\n    value: flags,\n    literal: str\n  };\n}\n\nfunction scanRegExp() {\n  var start, body, flags, value;\n\n  lookahead = null;\n  skipComment();\n  start = index;\n\n  body = scanRegExpBody();\n  flags = scanRegExpFlags();\n  value = testRegExp(body.value, flags.value);\n\n  return {\n    literal: body.literal + flags.literal,\n    value: value,\n    regex: {\n      pattern: body.value,\n      flags: flags.value\n    },\n    start: start,\n    end: index\n  };\n}\n\nfunction isIdentifierName(token) {\n  return token.type === TokenIdentifier ||\n    token.type === TokenKeyword ||\n    token.type === TokenBooleanLiteral ||\n    token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n  var ch;\n\n  skipComment();\n\n  if (index >= length) {\n    return {\n      type: TokenEOF,\n      start: index,\n      end: index\n    };\n  }\n\n  ch = source.charCodeAt(index);\n\n  if (isIdentifierStart(ch)) {\n    return scanIdentifier();\n  }\n\n  // Very common: ( and ) and ;\n  if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n    return scanPunctuator();\n  }\n\n  // String literal starts with single quote (U+0027) or double quote (U+0022).\n  if (ch === 0x27 || ch === 0x22) {\n    return scanStringLiteral();\n  }\n\n\n  // Dot (.) U+002E can also start a floating-point number, hence the need\n  // to check the next character.\n  if (ch === 0x2E) {\n    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n      return scanNumericLiteral();\n    }\n    return scanPunctuator();\n  }\n\n  if (isDecimalDigit(ch)) {\n    return scanNumericLiteral();\n  }\n\n  return scanPunctuator();\n}\n\nfunction lex() {\n  var token;\n\n  token = lookahead;\n  index = token.end;\n\n  lookahead = advance();\n\n  index = token.end;\n\n  return token;\n}\n\nfunction peek() {\n  var pos;\n\n  pos = index;\n\n  lookahead = advance();\n  index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n  var node = new ASTNode(SyntaxArrayExpression);\n  node.elements = elements;\n  return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n  var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n  node.operator = operator;\n  node.left = left;\n  node.right = right;\n  return node;\n}\n\nfunction finishCallExpression(callee, args) {\n  var node = new ASTNode(SyntaxCallExpression);\n  node.callee = callee;\n  node.arguments = args;\n  return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n  var node = new ASTNode(SyntaxConditionalExpression);\n  node.test = test;\n  node.consequent = consequent;\n  node.alternate = alternate;\n  return node;\n}\n\nfunction finishIdentifier(name) {\n  var node = new ASTNode(SyntaxIdentifier);\n  node.name = name;\n  return node;\n}\n\nfunction finishLiteral(token) {\n  var node = new ASTNode(SyntaxLiteral);\n  node.value = token.value;\n  node.raw = source.slice(token.start, token.end);\n  if (token.regex) {\n    if (node.raw === '//') {\n      node.raw = '/(?:)/';\n    }\n    node.regex = token.regex;\n  }\n  return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n  var node = new ASTNode(SyntaxMemberExpression);\n  node.computed = accessor === '[';\n  node.object = object;\n  node.property = property;\n  if (!node.computed) property.member = true;\n  return node;\n}\n\nfunction finishObjectExpression(properties) {\n  var node = new ASTNode(SyntaxObjectExpression);\n  node.properties = properties;\n  return node;\n}\n\nfunction finishProperty(kind, key, value) {\n  var node = new ASTNode(SyntaxProperty);\n  node.key = key;\n  node.value = value;\n  node.kind = kind;\n  return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n  var node = new ASTNode(SyntaxUnaryExpression);\n  node.operator = operator;\n  node.argument = argument;\n  node.prefix = true;\n  return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n  var error,\n    args = Array.prototype.slice.call(arguments, 2),\n    msg = messageFormat.replace(\n      /%(\\d)/g,\n      function(whole, index) {\n        assert(index < args.length, 'Message reference must be in range');\n        return args[index];\n      }\n    );\n\n\n  error = new Error(msg);\n  error.index = index;\n  error.description = msg;\n  throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n  if (token.type === TokenEOF) {\n    throwError(token, MessageUnexpectedEOS);\n  }\n\n  if (token.type === TokenNumericLiteral) {\n    throwError(token, MessageUnexpectedNumber);\n  }\n\n  if (token.type === TokenStringLiteral) {\n    throwError(token, MessageUnexpectedString);\n  }\n\n  if (token.type === TokenIdentifier) {\n    throwError(token, MessageUnexpectedIdentifier);\n  }\n\n  if (token.type === TokenKeyword) {\n    throwError(token, MessageUnexpectedReserved);\n  }\n\n  // BooleanLiteral, NullLiteral, or Punctuator.\n  throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n  var token = lex();\n  if (token.type !== TokenPunctuator || token.value !== value) {\n    throwUnexpected(token);\n  }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n  return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n  return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n  var elements = [];\n\n  index = lookahead.start;\n  expect('[');\n\n  while (!match(']')) {\n    if (match(',')) {\n      lex();\n      elements.push(null);\n    } else {\n      elements.push(parseConditionalExpression());\n\n      if (!match(']')) {\n        expect(',');\n      }\n    }\n  }\n\n  lex();\n\n  return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n  var token;\n\n  index = lookahead.start;\n  token = lex();\n\n  // Note: This function is called only from parseObjectProperty(), where\n  // EOF and Punctuator tokens are already filtered out.\n\n  if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n    if (token.octal) {\n      throwError(token, MessageStrictOctalLiteral);\n    }\n    return finishLiteral(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n  var token, key, id, value;\n\n  index = lookahead.start;\n  token = lookahead;\n\n  if (token.type === TokenIdentifier) {\n    id = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', id, value);\n  }\n  if (token.type === TokenEOF || token.type === TokenPunctuator) {\n    throwUnexpected(token);\n  } else {\n    key = parseObjectPropertyKey();\n    expect(':');\n    value = parseConditionalExpression();\n    return finishProperty('init', key, value);\n  }\n}\n\nfunction parseObjectInitialiser() {\n  var properties = [],\n    property, name, key, map = {},\n    toString = String;\n\n  index = lookahead.start;\n  expect('{');\n\n  while (!match('}')) {\n    property = parseObjectProperty();\n\n    if (property.key.type === SyntaxIdentifier) {\n      name = property.key.name;\n    } else {\n      name = toString(property.key.value);\n    }\n\n    key = '$' + name;\n    if (Object.prototype.hasOwnProperty.call(map, key)) {\n      throwError({}, MessageStrictDuplicateProperty);\n    } else {\n      map[key] = true;\n    }\n\n    properties.push(property);\n\n    if (!match('}')) {\n      expect(',');\n    }\n  }\n\n  expect('}');\n\n  return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n  var expr;\n\n  expect('(');\n\n  expr = parseExpression();\n\n  expect(')');\n\n  return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n  'if': 1\n};\n\nfunction parsePrimaryExpression() {\n  var type, token, expr;\n\n  if (match('(')) {\n    return parseGroupExpression();\n  }\n\n  if (match('[')) {\n    return parseArrayInitialiser();\n  }\n\n  if (match('{')) {\n    return parseObjectInitialiser();\n  }\n\n  type = lookahead.type;\n  index = lookahead.start;\n\n\n  if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n    expr = finishIdentifier(lex().value);\n  } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n    if (lookahead.octal) {\n      throwError(lookahead, MessageStrictOctalLiteral);\n    }\n    expr = finishLiteral(lex());\n  } else if (type === TokenKeyword) {\n    throw new Error(DISABLED);\n  } else if (type === TokenBooleanLiteral) {\n    token = lex();\n    token.value = (token.value === 'true');\n    expr = finishLiteral(token);\n  } else if (type === TokenNullLiteral) {\n    token = lex();\n    token.value = null;\n    expr = finishLiteral(token);\n  } else if (match('/') || match('/=')) {\n    expr = finishLiteral(scanRegExp());\n    peek();\n  } else {\n    throwUnexpected(lex());\n  }\n\n  return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n  var args = [];\n\n  expect('(');\n\n  if (!match(')')) {\n    while (index < length) {\n      args.push(parseConditionalExpression());\n      if (match(')')) {\n        break;\n      }\n      expect(',');\n    }\n  }\n\n  expect(')');\n\n  return args;\n}\n\nfunction parseNonComputedProperty() {\n  var token;\n  index = lookahead.start;\n  token = lex();\n\n  if (!isIdentifierName(token)) {\n    throwUnexpected(token);\n  }\n\n  return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n  expect('.');\n\n  return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n  var expr;\n\n  expect('[');\n\n  expr = parseExpression();\n\n  expect(']');\n\n  return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n  var expr, args, property;\n\n  expr = parsePrimaryExpression();\n\n  for (;;) {\n    if (match('.')) {\n      property = parseNonComputedMember();\n      expr = finishMemberExpression('.', expr, property);\n    } else if (match('(')) {\n      args = parseArguments();\n      expr = finishCallExpression(expr, args);\n    } else if (match('[')) {\n      property = parseComputedMember();\n      expr = finishMemberExpression('[', expr, property);\n    } else {\n      break;\n    }\n  }\n\n  return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n  var expr = parseLeftHandSideExpressionAllowCall();\n\n  if (lookahead.type === TokenPunctuator) {\n    if ((match('++') || match('--'))) {\n      throw new Error(DISABLED);\n    }\n  }\n\n  return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n  var token, expr;\n\n  if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n    expr = parsePostfixExpression();\n  } else if (match('++') || match('--')) {\n    throw new Error(DISABLED);\n  } else if (match('+') || match('-') || match('~') || match('!')) {\n    token = lex();\n    expr = parseUnaryExpression();\n    expr = finishUnaryExpression(token.value, expr);\n  } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n    throw new Error(DISABLED);\n  } else {\n    expr = parsePostfixExpression();\n  }\n\n  return expr;\n}\n\nfunction binaryPrecedence(token) {\n  var prec = 0;\n\n  if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n    return 0;\n  }\n\n  switch (token.value) {\n    case '||':\n      prec = 1;\n      break;\n\n    case '&&':\n      prec = 2;\n      break;\n\n    case '|':\n      prec = 3;\n      break;\n\n    case '^':\n      prec = 4;\n      break;\n\n    case '&':\n      prec = 5;\n      break;\n\n    case '==':\n    case '!=':\n    case '===':\n    case '!==':\n      prec = 6;\n      break;\n\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n    case 'instanceof':\n    case 'in':\n      prec = 7;\n      break;\n\n    case '<<':\n    case '>>':\n    case '>>>':\n      prec = 8;\n      break;\n\n    case '+':\n    case '-':\n      prec = 9;\n      break;\n\n    case '*':\n    case '/':\n    case '%':\n      prec = 11;\n      break;\n\n    default:\n      break;\n  }\n\n  return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n  var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n  marker = lookahead;\n  left = parseUnaryExpression();\n\n  token = lookahead;\n  prec = binaryPrecedence(token);\n  if (prec === 0) {\n    return left;\n  }\n  token.prec = prec;\n  lex();\n\n  markers = [marker, lookahead];\n  right = parseUnaryExpression();\n\n  stack = [left, token, right];\n\n  while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n    // Reduce: make a binary expression from the three topmost entries.\n    while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n      right = stack.pop();\n      operator = stack.pop().value;\n      left = stack.pop();\n      markers.pop();\n      expr = finishBinaryExpression(operator, left, right);\n      stack.push(expr);\n    }\n\n    // Shift.\n    token = lex();\n    token.prec = prec;\n    stack.push(token);\n    markers.push(lookahead);\n    expr = parseUnaryExpression();\n    stack.push(expr);\n  }\n\n  // Final reduce to clean-up the stack.\n  i = stack.length - 1;\n  expr = stack[i];\n  markers.pop();\n  while (i > 1) {\n    markers.pop();\n    expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n    i -= 2;\n  }\n\n  return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n  var expr, consequent, alternate;\n\n  expr = parseBinaryExpression();\n\n  if (match('?')) {\n    lex();\n    consequent = parseConditionalExpression();\n    expect(':');\n    alternate = parseConditionalExpression();\n\n    expr = finishConditionalExpression(expr, consequent, alternate);\n  }\n\n  return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n  var expr = parseConditionalExpression();\n\n  if (match(',')) {\n    throw new Error(DISABLED); // no sequence expressions\n  }\n\n  return expr;\n}\n\nexport default function(code) {\n  source = code;\n  index = 0;\n  length = source.length;\n  lookahead = null;\n\n  peek();\n\n  var expr = parseExpression();\n\n  if (lookahead.type !== TokenEOF) {\n    throw new Error('Unexpect token after expression.');\n  }\n  return expr;\n}\n","export default {\n  NaN:       'NaN',\n  E:         'Math.E',\n  LN2:       'Math.LN2',\n  LN10:      'Math.LN10',\n  LOG2E:     'Math.LOG2E',\n  LOG10E:    'Math.LOG10E',\n  PI:        'Math.PI',\n  SQRT1_2:   'Math.SQRT1_2',\n  SQRT2:     'Math.SQRT2',\n  MIN_VALUE: 'Number.MIN_VALUE',\n  MAX_VALUE: 'Number.MAX_VALUE'\n};\n","import {error} from 'vega-util';\n\nexport default function(codegen) {\n\n  function fncall(name, args, cast, type) {\n    let obj = codegen(args[0]);\n    if (cast) {\n      obj = cast + '(' + obj + ')';\n      if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n    }\n    return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n      '()' :\n      '(' + args.slice(1).map(codegen).join(',') + ')');\n  }\n\n  function fn(name, cast, type) {\n    return args => fncall(name, args, cast, type);\n  }\n\n  const DATE = 'new Date',\n        STRING = 'String',\n        REGEXP = 'RegExp';\n\n  return {\n    // MATH functions\n    isNaN:    'Number.isNaN',\n    isFinite: 'Number.isFinite',\n    abs:      'Math.abs',\n    acos:     'Math.acos',\n    asin:     'Math.asin',\n    atan:     'Math.atan',\n    atan2:    'Math.atan2',\n    ceil:     'Math.ceil',\n    cos:      'Math.cos',\n    exp:      'Math.exp',\n    floor:    'Math.floor',\n    log:      'Math.log',\n    max:      'Math.max',\n    min:      'Math.min',\n    pow:      'Math.pow',\n    random:   'Math.random',\n    round:    'Math.round',\n    sin:      'Math.sin',\n    sqrt:     'Math.sqrt',\n    tan:      'Math.tan',\n\n    clamp: function(args) {\n      if (args.length < 3) error('Missing arguments to clamp function.');\n      if (args.length > 3) error('Too many arguments to clamp function.');\n      const a = args.map(codegen);\n      return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n    },\n\n    // DATE functions\n    now:             'Date.now',\n    utc:             'Date.UTC',\n    datetime:        DATE,\n    date:            fn('getDate', DATE, 0),\n    day:             fn('getDay', DATE, 0),\n    year:            fn('getFullYear', DATE, 0),\n    month:           fn('getMonth', DATE, 0),\n    hours:           fn('getHours', DATE, 0),\n    minutes:         fn('getMinutes', DATE, 0),\n    seconds:         fn('getSeconds', DATE, 0),\n    milliseconds:    fn('getMilliseconds', DATE, 0),\n    time:            fn('getTime', DATE, 0),\n    timezoneoffset:  fn('getTimezoneOffset', DATE, 0),\n    utcdate:         fn('getUTCDate', DATE, 0),\n    utcday:          fn('getUTCDay', DATE, 0),\n    utcyear:         fn('getUTCFullYear', DATE, 0),\n    utcmonth:        fn('getUTCMonth', DATE, 0),\n    utchours:        fn('getUTCHours', DATE, 0),\n    utcminutes:      fn('getUTCMinutes', DATE, 0),\n    utcseconds:      fn('getUTCSeconds', DATE, 0),\n    utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n    // sequence functions\n    length:      fn('length', null, -1),\n    join:        fn('join', null),\n    indexof:     fn('indexOf', null),\n    lastindexof: fn('lastIndexOf', null),\n    slice:       fn('slice', null),\n\n    reverse: function(args) {\n      return '('+codegen(args[0])+').slice().reverse()';\n    },\n\n    // STRING functions\n    parseFloat:  'parseFloat',\n    parseInt:    'parseInt',\n    upper:       fn('toUpperCase', STRING, 0),\n    lower:       fn('toLowerCase', STRING, 0),\n    substring:   fn('substring', STRING),\n    split:       fn('split', STRING),\n    replace:     fn('replace', STRING),\n    trim:        fn('trim', STRING, 0),\n\n    // REGEXP functions\n    regexp:  REGEXP,\n    test:    fn('test', REGEXP),\n\n    // Control Flow functions\n    if: function(args) {\n        if (args.length < 3) error('Missing arguments to if function.');\n        if (args.length > 3) error('Too many arguments to if function.');\n        const a = args.map(codegen);\n        return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n      }\n  };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, hasOwnProperty, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n  const n = s && s.length - 1;\n  return n && (\n      (s[0]==='\"' && s[n]==='\"') ||\n      (s[0]==='\\'' && s[n]==='\\'')\n    ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n  opt = opt || {};\n\n  const whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n        blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n        constants = opt.constants || Constants,\n        functions = (opt.functions || Functions)(visit),\n        globalvar = opt.globalvar,\n        fieldvar = opt.fieldvar,\n        outputGlobal = isFunction(globalvar)\n          ? globalvar\n          : id => `${globalvar}[\"${id}\"]`;\n\n  let globals = {},\n      fields = {},\n      memberDepth = 0;\n\n  function visit(ast) {\n    if (isString(ast)) return ast;\n    const generator = Generators[ast.type];\n    if (generator == null) error('Unsupported type: ' + ast.type);\n    return generator(ast);\n  }\n\n  const Generators = {\n    Literal: n => n.raw,\n\n    Identifier: n => {\n      const id = n.name;\n      if (memberDepth > 0) {\n        return id;\n      } else if (hasOwnProperty(blacklist, id)) {\n        return error('Illegal identifier: ' + id);\n      } else if (hasOwnProperty(constants, id)) {\n        return constants[id];\n      } else if (hasOwnProperty(whitelist, id)) {\n        return id;\n      } else {\n        globals[id] = 1;\n        return outputGlobal(id);\n      }\n    },\n\n    MemberExpression: n => {\n        const d = !n.computed,\n              o = visit(n.object);\n        if (d) memberDepth += 1;\n        const p = visit(n.property);\n        if (o === fieldvar) {\n          // strip quotes to sanitize field name (#1653)\n          fields[stripQuotes(p)] = 1;\n        }\n        if (d) memberDepth -= 1;\n        return o + (d ? '.'+p : '['+p+']');\n      },\n\n    CallExpression: n => {\n        if (n.callee.type !== 'Identifier') {\n          error('Illegal callee type: ' + n.callee.type);\n        }\n        const callee = n.callee.name,\n              args = n.arguments,\n              fn = hasOwnProperty(functions, callee) && functions[callee];\n        if (!fn) error('Unrecognized function: ' + callee);\n        return isFunction(fn)\n          ? fn(args)\n          : fn + '(' + args.map(visit).join(',') + ')';\n      },\n\n    ArrayExpression: n =>\n        '[' + n.elements.map(visit).join(',') + ']',\n\n    BinaryExpression: n =>\n        '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n    UnaryExpression: n =>\n        '(' + n.operator + visit(n.argument) + ')',\n\n    ConditionalExpression: n =>\n        '(' + visit(n.test) +\n          '?' + visit(n.consequent) +\n          ':' + visit(n.alternate) +\n          ')',\n\n    LogicalExpression: n =>\n        '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n    ObjectExpression: n =>\n        '{' + n.properties.map(visit).join(',') + '}',\n\n    Property: n => {\n        memberDepth += 1;\n        const k = visit(n.key);\n        memberDepth -= 1;\n        return k + ':' + visit(n.value);\n      }\n  };\n\n  function codegen(ast) {\n    const result = {\n      code:    visit(ast),\n      globals: Object.keys(globals),\n      fields:  Object.keys(fields)\n    };\n    globals = {};\n    fields = {};\n    return result;\n  }\n\n  codegen.functions = functions;\n  codegen.constants = constants;\n\n  return codegen;\n}\n","export {\n  RawCode,\n  Literal,\n  Property,\n  Identifier,\n  ArrayExpression,\n  BinaryExpression,\n  CallExpression,\n  ConditionalExpression,\n  LogicalExpression,\n  MemberExpression,\n  ObjectExpression,\n  UnaryExpression,\n  default as ASTNode\n} from './src/ast';\n\nexport { default as parse} from './src/parser';\nexport { default as codegen } from './src/codegen';\nexport { default as functions } from './src/functions';\nexport { default as constants } from './src/constants';\n","import {parse} from 'vega-expression';\n\nfunction getName(node: any) {\n  const name: string[] = [];\n\n  if (node.type === 'Identifier') {\n    return [node.name];\n  }\n\n  if (node.type === 'Literal') {\n    return [node.value];\n  }\n\n  if (node.type === 'MemberExpression') {\n    name.push(...getName(node.object));\n    name.push(...getName(node.property));\n  }\n\n  return name;\n}\n\nfunction startsWithDatum(node: any): boolean {\n  if (node.object.type === 'MemberExpression') {\n    return startsWithDatum(node.object);\n  }\n  return node.object.name === 'datum';\n}\n\nexport function getDependentFields(expression: string) {\n  const ast = parse(expression);\n  const dependents = new Set<string>();\n  ast.visit((node: any) => {\n    if (node.type === 'MemberExpression' && startsWithDatum(node)) {\n      dependents.add(getName(node).slice(1).join('.'));\n    }\n  });\n\n  return dependents;\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {LogicalComposition} from '../../logical';\nimport {Predicate} from '../../predicate';\nimport {duplicate} from '../../util';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class FilterNode extends DataFlowNode {\n  private expr: string;\n  private _dependentFields: Set<string>;\n  public clone() {\n    return new FilterNode(null, this.model, duplicate(this.filter));\n  }\n\n  constructor(\n    parent: DataFlowNode,\n    private readonly model: Model,\n    private readonly filter: LogicalComposition<Predicate>\n  ) {\n    super(parent);\n\n    // TODO: refactor this to not take a node and\n    // then add a static function makeFromOperand and make the constructor take only an expression\n    this.expr = expression(this.model, this.filter, this);\n\n    this._dependentFields = getDependentFields(this.expr);\n  }\n\n  public dependentFields() {\n    return this._dependentFields;\n  }\n\n  public producedFields() {\n    return new Set<string>(); // filter does not produce any new fields\n  }\n\n  public assemble(): VgFilterTransform {\n    return {\n      type: 'filter',\n      expr: this.expr\n    };\n  }\n\n  public hash() {\n    return `Filter ${this.expr}`;\n  }\n}\n","import {selector as parseSelector} from 'vega-event-selector';\nimport {isString, stringValue} from 'vega-util';\nimport {forEachSelection, SelectionComponent, STORE} from '.';\nimport {warn} from '../../log';\nimport {LogicalComposition} from '../../logical';\nimport {SelectionDef, SelectionExtent} from '../../selection';\nimport {Dict, duplicate, keys, logicalExpr, varName} from '../../util';\nimport {DataFlowNode, OutputNode} from '../data/dataflow';\nimport {FilterNode} from '../data/filter';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {forEachTransform} from './transforms/transforms';\n\nexport function parseUnitSelection(model: UnitModel, selDefs: Dict<SelectionDef>) {\n  const selCmpts: Dict<SelectionComponent<any /* this has to be \"any\" so typing won't fail in test files*/>> = {};\n  const selectionConfig = model.config.selection;\n\n  for (const name of keys(selDefs ?? {})) {\n    const selDef = duplicate(selDefs[name]);\n    const {fields, encodings, ...cfg} = selectionConfig[selDef.type]; // Project transform applies its defaults.\n\n    // Set default values from config if a property hasn't been specified,\n    // or if it is true. E.g., \"translate\": true should use the default\n    // event handlers for translate. However, true may be a valid value for\n    // a property (e.g., \"nearest\": true).\n    for (const key in cfg) {\n      // A selection should contain either `encodings` or `fields`, only use\n      // default values for these two values if neither of them is specified.\n      if ((key === 'encodings' && selDef.fields) || (key === 'fields' && selDef.encodings)) {\n        continue;\n      }\n\n      if (key === 'mark') {\n        selDef[key] = {...cfg[key], ...selDef[key]};\n      }\n\n      if (selDef[key] === undefined || selDef[key] === true) {\n        selDef[key] = cfg[key] ?? selDef[key];\n      }\n    }\n\n    const safeName = varName(name);\n    const selCmpt = (selCmpts[safeName] = {\n      ...selDef,\n      name: safeName,\n      events: isString(selDef.on) ? parseSelector(selDef.on, 'scope') : duplicate(selDef.on)\n    } as any);\n\n    forEachTransform(selCmpt, txCompiler => {\n      if (txCompiler.has(selCmpt) && txCompiler.parse) {\n        txCompiler.parse(model, selCmpt, selDef, selDefs[name]);\n      }\n    });\n  }\n\n  return selCmpts;\n}\n\nexport function parseSelectionPredicate(\n  model: Model,\n  selections: LogicalComposition<string>,\n  dfnode?: DataFlowNode,\n  datum = 'datum'\n): string {\n  const stores: string[] = [];\n  function expr(name: string): string {\n    const vname = varName(name);\n    const selCmpt = model.getSelectionComponent(vname, name);\n    const store = stringValue(vname + STORE);\n\n    if (selCmpt.project.timeUnit) {\n      const child = dfnode ?? model.component.data.raw;\n      const tunode = selCmpt.project.timeUnit.clone();\n      if (child.parent) {\n        tunode.insertAsParentOf(child);\n      } else {\n        child.parent = tunode;\n      }\n    }\n\n    if (selCmpt.empty !== 'none') {\n      stores.push(store);\n    }\n\n    return (\n      `vlSelectionTest(${store}, ${datum}` + (selCmpt.resolve === 'global' ? ')' : `, ${stringValue(selCmpt.resolve)})`)\n    );\n  }\n\n  const predicateStr = logicalExpr(selections, expr);\n  return (\n    (stores.length ? '!(' + stores.map(s => `length(data(${s}))`).join(' || ') + ') || ' : '') + `(${predicateStr})`\n  );\n}\n\nexport function parseSelectionBinExtent(selCmpt: SelectionComponent, extent: SelectionExtent) {\n  const encoding = extent['encoding'];\n  let field = extent['field'];\n\n  if (!encoding && !field) {\n    field = selCmpt.project.items[0].field;\n    if (selCmpt.project.items.length > 1) {\n      warn(\n        'A \"field\" or \"encoding\" must be specified when using a selection as a scale domain. ' +\n          `Using \"field\": ${stringValue(field)}.`\n      );\n    }\n  } else if (encoding && !field) {\n    const encodings = selCmpt.project.items.filter(p => p.channel === encoding);\n    if (!encodings.length || encodings.length > 1) {\n      field = selCmpt.project.items[0].field;\n      warn(\n        (!encodings.length ? 'No ' : 'Multiple ') +\n          `matching ${stringValue(encoding)} encoding found for selection ${stringValue(extent.selection)}. ` +\n          `Using \"field\": ${stringValue(field)}.`\n      );\n    } else {\n      field = encodings[0].field;\n    }\n  }\n\n  return `${selCmpt.name}[${stringValue(field)}]`;\n}\n\nexport function materializeSelections(model: UnitModel, main: OutputNode) {\n  forEachSelection(model, selCmpt => {\n    const selection = selCmpt.name;\n    const lookupName = model.getName(`lookup_${selection}`);\n    model.component.data.outputNodes[lookupName] = selCmpt.materialized = new OutputNode(\n      new FilterNode(main, model, {selection}),\n      lookupName,\n      'lookup',\n      model.component.data.outputNodeRefCounts\n    );\n  });\n}\n","import {isString} from 'vega-util';\nimport {LogicalComposition} from '../logical';\nimport {fieldFilterExpression, isSelectionPredicate, Predicate} from '../predicate';\nimport {logicalExpr} from '../util';\nimport {DataFlowNode} from './data/dataflow';\nimport {Model} from './model';\nimport {parseSelectionPredicate} from './selection/parse';\n\n/**\n * Converts a predicate into an expression.\n */\n// model is only used for selection filters.\nexport function expression(model: Model, filterOp: LogicalComposition<Predicate>, node?: DataFlowNode): string {\n  return logicalExpr(filterOp, (predicate: Predicate) => {\n    if (isString(predicate)) {\n      return predicate;\n    } else if (isSelectionPredicate(predicate)) {\n      return parseSelectionPredicate(model, predicate.selection, node);\n    } else {\n      // Filter Object\n      return fieldFilterExpression(predicate);\n    }\n  });\n}\n","import {Axis as VgAxis, AxisEncode, NewSignal, SignalRef, Text} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {AXIS_PARTS, AXIS_PROPERTY_TYPE, CONDITIONAL_AXIS_PROP_INDEX, isConditionalAxisValue} from '../../axis';\nimport {POSITION_SCALE_CHANNELS} from '../../channel';\nimport {defaultTitle, FieldDefBase} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isText} from '../../title';\nimport {getFirstDefined, isEmpty, replaceAll} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {exprFromValueOrSignalRef} from '../common';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {AxisComponent, AxisComponentIndex} from './component';\n\nfunction assembleTitle(title: Text | FieldDefBase<string>[] | SignalRef, config: Config): Text | SignalRef {\n  if (!title) {\n    return undefined;\n  }\n  if (isArray(title) && !isText(title)) {\n    return title.map(fieldDef => defaultTitle(fieldDef, config)).join(', ');\n  }\n  return title;\n}\n\nfunction setAxisEncode(\n  axis: Omit<VgAxis, 'orient' | 'scale'>,\n  part: keyof AxisEncode,\n  vgProp: VgEncodeChannel,\n  vgRef: VgValueRef | readonly VgValueRef[]\n) {\n  axis.encode = axis.encode ?? {};\n  axis.encode[part] = axis.encode[part] ?? {};\n  axis.encode[part].update = axis.encode[part].update ?? {};\n  // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n  (axis.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleAxis(\n  axisCmpt: AxisComponent,\n  kind: 'main' | 'grid',\n  config: Config,\n  opt: {\n    header: boolean; // whether this is called via a header\n  } = {header: false}\n): VgAxis {\n  const {disable, orient, scale, labelExpr, title, zindex, ...axis} = axisCmpt.combine();\n\n  if (disable) {\n    return undefined;\n  }\n\n  for (const prop in axis) {\n    const propType = AXIS_PROPERTY_TYPE[prop];\n    const propValue = axis[prop];\n\n    if (propType && propType !== kind && propType !== 'both') {\n      // Remove properties that are not valid for this kind of axis\n      delete axis[prop];\n    } else if (isConditionalAxisValue(propValue)) {\n      // deal with conditional axis value\n\n      const {condition, ...valueOrSignalRef} = propValue;\n      const conditions = array(condition);\n\n      const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n      if (propIndex) {\n        const {vgProp, part} = propIndex;\n        // If there is a corresponding Vega property for the channel,\n        // use Vega's custom axis encoding and delete the original axis property to avoid conflicts\n\n        const vgRef = [\n          ...conditions.map(c => {\n            const {test, ...valueOrSignalCRef} = c;\n            return {\n              test: expression(null, test),\n              ...valueOrSignalCRef\n            };\n          }),\n          valueOrSignalRef\n        ];\n        setAxisEncode(axis, part, vgProp, vgRef);\n        delete axis[prop];\n      } else if (propIndex === null) {\n        // If propIndex is null, this means we support conditional axis property by converting the condition to signal instead.\n        const signalRef: SignalRef = {\n          signal:\n            conditions\n              .map(c => {\n                const {test, ...valueOrSignalCRef} = c;\n                return `${expression(null, test)} ? ${exprFromValueOrSignalRef(valueOrSignalCRef)} : `;\n              })\n              .join('') + exprFromValueOrSignalRef(valueOrSignalRef)\n        };\n        axis[prop] = signalRef;\n      }\n    } else if (isSignalRef(propValue)) {\n      const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n      if (propIndex) {\n        const {vgProp, part} = propIndex;\n        setAxisEncode(axis, part, vgProp, propValue);\n        delete axis[prop];\n      } // else do nothing since the property already supports signal\n    }\n  }\n\n  if (kind === 'grid') {\n    if (!axis.grid) {\n      return undefined;\n    }\n\n    // Remove unnecessary encode block\n    if (axis.encode) {\n      // Only need to keep encode block for grid\n      const {grid} = axis.encode;\n      axis.encode = {\n        ...(grid ? {grid} : {})\n      };\n\n      if (isEmpty(axis.encode)) {\n        delete axis.encode;\n      }\n    }\n\n    return {\n      scale,\n      orient,\n      ...axis,\n      domain: false,\n      labels: false,\n      aria: false, // always hide grid axis\n\n      // Always set min/maxExtent to 0 to ensure that `config.axis*.minExtent` and `config.axis*.maxExtent`\n      // would not affect gridAxis\n      maxExtent: 0,\n      minExtent: 0,\n      ticks: false,\n      zindex: getFirstDefined(zindex, 0) // put grid behind marks by default\n    };\n  } else {\n    // kind === 'main'\n\n    if (!opt.header && axisCmpt.mainExtracted) {\n      // if mainExtracted has been extracted to a separate facet\n      return undefined;\n    }\n\n    if (labelExpr !== undefined) {\n      let expr = labelExpr;\n      if (axis.encode?.labels?.update && isSignalRef(axis.encode.labels.update.text)) {\n        expr = replaceAll(labelExpr, 'datum.label', axis.encode.labels.update.text.signal);\n      }\n      setAxisEncode(axis, 'labels', 'text', {signal: expr});\n    }\n\n    if (axis.labelAlign === null) {\n      delete axis.labelAlign;\n    }\n\n    // Remove unnecessary encode block\n    if (axis.encode) {\n      for (const part of AXIS_PARTS) {\n        if (!axisCmpt.hasAxisPart(part)) {\n          delete axis.encode[part];\n        }\n      }\n      if (isEmpty(axis.encode)) {\n        delete axis.encode;\n      }\n    }\n\n    const titleString = assembleTitle(title, config);\n\n    return {\n      scale,\n      orient,\n      grid: false,\n      ...(titleString ? {title: titleString} : {}),\n      ...axis,\n      ...(config.aria === false ? {aria: false} : {}),\n      zindex: getFirstDefined(zindex, 0) // put axis line above marks by default\n    };\n  }\n}\n\n/**\n * Add axis signals so grid line works correctly\n * (Fix https://github.com/vega/vega-lite/issues/4226)\n */\nexport function assembleAxisSignals(model: Model): NewSignal[] {\n  const {axes} = model.component;\n  const signals: NewSignal[] = [];\n\n  for (const channel of POSITION_SCALE_CHANNELS) {\n    if (axes[channel]) {\n      for (const axis of axes[channel]) {\n        if (!axis.get('disable') && !axis.get('gridScale')) {\n          // If there is x-axis but no y-scale for gridScale, need to set height/width so x-axis can draw the grid with the right height. Same for y-axis and width.\n\n          const sizeType = channel === 'x' ? 'height' : 'width';\n          const update = model.getSizeSignalRef(sizeType).signal;\n\n          if (sizeType !== update) {\n            signals.push({\n              name: sizeType,\n              update: update\n            });\n          }\n        }\n      }\n    }\n  }\n  return signals;\n}\n\nexport function assembleAxes(axisComponents: AxisComponentIndex, config: Config): VgAxis[] {\n  const {x = [], y = []} = axisComponents;\n  return [\n    ...x.map(a => assembleAxis(a, 'grid', config)),\n    ...y.map(a => assembleAxis(a, 'grid', config)),\n    ...x.map(a => assembleAxis(a, 'main', config)),\n    ...y.map(a => assembleAxis(a, 'main', config))\n  ].filter(a => a); // filter undefined\n}\n","import {Align, Color, FontStyle, FontWeight, Orient, SignalRef, TextBaseline, TitleAnchor, TitleConfig} from 'vega';\nimport {FormatMixins, Guide, VlOnlyGuideConfig} from './guide';\nimport {keys} from './util';\n\nexport const HEADER_TITLE_PROPERTIES_MAP: Partial<Record<keyof CoreHeader, keyof TitleConfig>> = {\n  titleAlign: 'align',\n  titleAnchor: 'anchor',\n  titleAngle: 'angle',\n  titleBaseline: 'baseline',\n  titleColor: 'color',\n  titleFont: 'font',\n  titleFontSize: 'fontSize',\n  titleFontStyle: 'fontStyle',\n  titleFontWeight: 'fontWeight',\n  titleLimit: 'limit',\n  titleLineHeight: 'lineHeight',\n  titleOrient: 'orient',\n  titlePadding: 'offset'\n};\n\nexport const HEADER_LABEL_PROPERTIES_MAP: Partial<Record<keyof CoreHeader, keyof TitleConfig>> = {\n  labelAlign: 'align',\n  labelAnchor: 'anchor',\n  labelAngle: 'angle',\n  labelBaseline: 'baseline',\n  labelColor: 'color',\n  labelFont: 'font',\n  labelFontSize: 'fontSize',\n  labelFontStyle: 'fontStyle',\n  labelFontWeight: 'fontWeight',\n  labelLimit: 'limit',\n  labelLineHeight: 'lineHeight',\n  labelOrient: 'orient',\n  labelPadding: 'offset'\n};\n\nexport const HEADER_TITLE_PROPERTIES = keys(HEADER_TITLE_PROPERTIES_MAP);\n\nexport const HEADER_LABEL_PROPERTIES = keys(HEADER_LABEL_PROPERTIES_MAP);\n\nexport interface CoreHeader extends FormatMixins {\n  // ---------- Title ----------\n  /**\n   * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n   */\n  titleAnchor?: TitleAnchor; // We don't allow signal for titleAnchor since there is a dependent logic\n\n  /**\n   * Horizontal text alignment (to the anchor) of header titles.\n   */\n  titleAlign?: Align | SignalRef;\n\n  /**\n   * The rotation angle of the header title.\n   *\n   * __Default value:__ `0`.\n   *\n   * @minimum -360\n   * @maximum 360\n   */\n  titleAngle?: number; // We don't allow signal for titleAngle since there is a dependent logic\n\n  /**\n   * The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n   * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n   *\n   * __Default value:__ `\"middle\"`\n   */\n  titleBaseline?: TextBaseline | SignalRef;\n\n  /**\n   * Color of the header title, can be in hex color code or regular color name.\n   */\n  titleColor?: Color | SignalRef;\n\n  /**\n   * Font of the header title. (e.g., `\"Helvetica Neue\"`).\n   */\n  titleFont?: string | SignalRef;\n\n  /**\n   * Font size of the header title.\n   *\n   * @minimum 0\n   */\n  titleFontSize?: number | SignalRef;\n\n  /**\n   * The font style of the header title.\n   */\n  titleFontStyle?: FontStyle | SignalRef;\n\n  /**\n   * Font weight of the header title.\n   * This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`).\n   */\n  titleFontWeight?: FontWeight | SignalRef;\n\n  /**\n   * The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n   *\n   * __Default value:__ `0`, indicating no limit\n   */\n  titleLimit?: number | SignalRef;\n\n  /**\n   * Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n   */\n  titleLineHeight?: number | SignalRef;\n\n  /**\n   * The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n   */\n  titleOrient?: Orient;\n\n  /**\n   * The padding, in pixel, between facet header's title and the label.\n   *\n   * __Default value:__ `10`\n   */\n  titlePadding?: number | SignalRef;\n\n  // ---------- Label ----------\n\n  /**\n   * A boolean flag indicating if labels should be included as part of the header.\n   *\n   * __Default value:__ `true`.\n   */\n  labels?: boolean;\n\n  /**\n   * Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`.\n   */\n  labelAlign?: Align | SignalRef;\n\n  /**\n   * The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n   * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n   *\n   */\n  labelBaseline?: TextBaseline | SignalRef;\n\n  /**\n   * The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label.\n   */\n  labelAnchor?: TitleAnchor;\n\n  /**\n   * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n   *\n   * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.\n   */\n  labelExpr?: string;\n\n  /**\n   * The rotation angle of the header labels.\n   *\n   * __Default value:__ `0` for column header, `-90` for row header.\n   *\n   * @minimum -360\n   * @maximum 360\n   */\n  labelAngle?: number; // no signal ref since there is a dependent logic\n\n  /**\n   * The color of the header label, can be in hex color code or regular color name.\n   */\n  labelColor?: Color | SignalRef;\n\n  /**\n   * The font of the header label.\n   */\n  labelFont?: string | SignalRef;\n\n  /**\n   * The font size of the header label, in pixels.\n   *\n   * @minimum 0\n   */\n  labelFontSize?: number | SignalRef;\n\n  /**\n   * The font style of the header label.\n   */\n  labelFontStyle?: FontStyle | SignalRef;\n\n  /**\n   * The font weight of the header label.\n   */\n  labelFontWeight?: FontWeight | SignalRef;\n\n  /**\n   * The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n   *\n   * __Default value:__ `0`, indicating no limit\n   */\n  labelLimit?: number | SignalRef;\n\n  /**\n   * Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n   */\n  labelLineHeight?: number | SignalRef;\n\n  /**\n   * The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n   */\n  labelOrient?: Orient; // no signal ref since there is a dependent logic\n\n  /**\n   * The padding, in pixel, between facet header's label and the plot.\n   *\n   * __Default value:__ `10`\n   */\n  labelPadding?: number | SignalRef;\n\n  /**\n   * Shortcut for setting both labelOrient and titleOrient.\n   */\n  orient?: Orient; // no signal ref since there is a dependent logic\n}\n\nexport interface HeaderConfig extends CoreHeader, VlOnlyGuideConfig {}\n\n/**\n * Headers of row / column channels for faceted plots.\n */\nexport interface Header extends CoreHeader, Guide {}\n\nexport interface HeaderConfigMixins {\n  /**\n   * Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n   *\n   * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n   */\n  header?: HeaderConfig;\n\n  /**\n   * Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n   *\n   * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n   */\n  headerRow?: HeaderConfig;\n\n  /**\n   * Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n   *\n   * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n   */\n  headerColumn?: HeaderConfig;\n\n  /**\n   * Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n   *\n   * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n   */\n  headerFacet?: HeaderConfig;\n}\n","import {ScaleType, SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {AxisConfig} from '../../axis';\nimport {PositionScaleChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {isQuantitative} from '../../scale';\nimport {keys, titleCase} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {getStyleConfig, signalOrStringValue} from '../common';\n\nfunction getAxisConfigFromConfigTypes(\n  configTypes: string[],\n  config: Config,\n  channel: 'x' | 'y',\n  orient: string | SignalRef\n) {\n  // TODO: add special casing to add conditional value based on orient signal\n  return Object.assign.apply(null, [\n    {},\n    ...configTypes.map(configType => {\n      if (configType === 'axisOrient') {\n        const orient1 = channel === 'x' ? 'bottom' : 'left';\n        const orientConfig1 = config[channel === 'x' ? 'axisBottom' : 'axisLeft'] || {};\n        const orientConfig2 = config[channel === 'x' ? 'axisTop' : 'axisRight'] || {};\n\n        const props = new Set([...keys(orientConfig1), ...keys(orientConfig2)]);\n\n        const conditionalOrientAxisConfig = {};\n        for (const prop of props.values()) {\n          conditionalOrientAxisConfig[prop] = {\n            // orient is surely signal in this case\n            signal: `${orient['signal']} === \"${orient1}\" ? ${signalOrStringValue(\n              orientConfig1[prop]\n            )} : ${signalOrStringValue(orientConfig2[prop])}`\n          };\n        }\n\n        return conditionalOrientAxisConfig;\n      }\n\n      return config[configType];\n    })\n  ]);\n}\n\nexport type AxisConfigs = ReturnType<typeof getAxisConfigs>;\n\nexport function getAxisConfigs(\n  channel: PositionScaleChannel,\n  scaleType: ScaleType,\n  orient: string | SignalRef,\n  config: Config\n) {\n  const typeBasedConfigTypes =\n    scaleType === 'band'\n      ? ['axisDiscrete', 'axisBand']\n      : scaleType === 'point'\n      ? ['axisDiscrete', 'axisPoint']\n      : isQuantitative(scaleType)\n      ? ['axisQuantitative']\n      : scaleType === 'time' || scaleType === 'utc'\n      ? ['axisTemporal']\n      : [];\n\n  const axisChannel = channel === 'x' ? 'axisX' : 'axisY';\n  const axisOrient = isSignalRef(orient) ? 'axisOrient' : 'axis' + titleCase(orient); // axisTop, axisBottom, ...\n\n  const vlOnlyConfigTypes = [\n    // technically Vega does have axisBand, but if we make another separation here,\n    // it will further introduce complexity in the code\n    ...typeBasedConfigTypes,\n    ...typeBasedConfigTypes.map(c => axisChannel + c.substr(4))\n  ];\n\n  const vgConfigTypes = ['axis', axisOrient, axisChannel];\n\n  return {\n    vlOnlyAxisConfig: getAxisConfigFromConfigTypes(vlOnlyConfigTypes, config, channel, orient),\n    vgAxisConfig: getAxisConfigFromConfigTypes(vgConfigTypes, config, channel, orient),\n    axisConfigStyle: getAxisConfigStyle([...vgConfigTypes, ...vlOnlyConfigTypes], config)\n  };\n}\n\nexport function getAxisConfigStyle(axisConfigTypes: string[], config: Config) {\n  const toMerge = [{}];\n  for (const configType of axisConfigTypes) {\n    // TODO: add special casing to add conditional value based on orient signal\n    let style = config[configType]?.style;\n    if (style) {\n      style = array(style);\n      for (const s of style) {\n        toMerge.push(config.style[s]);\n      }\n    }\n  }\n  return Object.assign.apply(null, toMerge);\n}\nexport function getAxisConfig(\n  property: keyof AxisConfig,\n  config: Config,\n  style: string | string[],\n  axisConfigs: Partial<AxisConfigs> = {}\n): {configFrom?: string; configValue?: any} {\n  const styleConfig = getStyleConfig(property, style, config.style);\n\n  if (styleConfig !== undefined) {\n    return {\n      configFrom: 'style',\n      configValue: styleConfig\n    };\n  }\n\n  for (const configFrom of ['vlOnlyAxisConfig', 'vgAxisConfig', 'axisConfigStyle']) {\n    if (axisConfigs[configFrom]?.[property] !== undefined) {\n      return {configFrom, configValue: axisConfigs[configFrom][property]};\n    }\n  }\n  return {};\n}\n","import {Align, AxisOrient, Orient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Axis} from '../../axis';\nimport {isBinned, isBinning} from '../../bin';\nimport {PositionScaleChannel, X} from '../../channel';\nimport {\n  DatumDef,\n  isDiscrete,\n  isFieldDef,\n  PositionDatumDef,\n  PositionFieldDef,\n  toFieldDefBase,\n  TypedFieldDef,\n  valueArray\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Mark} from '../../mark';\nimport {hasDiscreteDomain} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {NOMINAL, ORDINAL, Type} from '../../type';\nimport {contains, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitle, mergeTitleFieldDefs} from '../common';\nimport {guideFormat, guideFormatType} from '../format';\nimport {UnitModel} from '../unit';\nimport {ScaleType} from './../../scale';\nimport {AxisComponentProps} from './component';\nimport {AxisConfigs, getAxisConfig} from './config';\n\nexport interface AxisRuleParams {\n  fieldOrDatumDef: PositionFieldDef<string> | PositionDatumDef<string>;\n  axis: Axis;\n  channel: PositionScaleChannel;\n  model: UnitModel;\n\n  mark: Mark;\n  scaleType: ScaleType;\n  orient: Orient | SignalRef;\n  labelAngle: number | SignalRef;\n  config: Config;\n}\n\nexport const axisRules: {\n  [k in keyof AxisComponentProps]?: (params: AxisRuleParams) => AxisComponentProps[k];\n} = {\n  scale: ({model, channel}) => model.scaleName(channel),\n\n  format: ({fieldOrDatumDef, config, axis}) => {\n    const {format, formatType} = axis;\n    return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, true);\n  },\n\n  formatType: ({axis, fieldOrDatumDef, scaleType}) => {\n    const {formatType} = axis;\n    return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n  },\n\n  grid: ({fieldOrDatumDef, axis, scaleType}) => {\n    if (isFieldDef(fieldOrDatumDef) && isBinned(fieldOrDatumDef.bin)) {\n      return false;\n    } else {\n      return axis.grid ?? defaultGrid(scaleType, fieldOrDatumDef);\n    }\n  },\n\n  gridScale: ({model, channel}) => gridScale(model, channel),\n\n  labelAlign: ({axis, labelAngle, orient, channel}) =>\n    axis.labelAlign || defaultLabelAlign(labelAngle, orient, channel),\n\n  labelAngle: ({labelAngle}) => labelAngle, // we already calculate this in parse\n\n  labelBaseline: ({axis, labelAngle, orient, channel}) =>\n    axis.labelBaseline || defaultLabelBaseline(labelAngle, orient, channel),\n\n  labelFlush: ({axis, fieldOrDatumDef, channel}) => axis.labelFlush ?? defaultLabelFlush(fieldOrDatumDef.type, channel),\n\n  labelOverlap: ({axis, fieldOrDatumDef, scaleType}) =>\n    axis.labelOverlap ?? defaultLabelOverlap(fieldOrDatumDef.type, scaleType),\n\n  // we already calculate orient in parse\n  orient: ({orient}) => orient as AxisOrient, // Need to cast until Vega supports signal\n\n  tickCount: ({channel, model, axis, fieldOrDatumDef, scaleType}) => {\n    const sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n    const size = sizeType ? model.getSizeSignalRef(sizeType) : undefined;\n    return axis.tickCount ?? defaultTickCount({fieldOrDatumDef, scaleType, size, values: axis.values});\n  },\n\n  title: ({axis, model, channel}) => {\n    if (axis.title !== undefined) {\n      return axis.title;\n    }\n    const fieldDefTitle = getFieldDefTitle(model, channel);\n    if (fieldDefTitle !== undefined) {\n      return fieldDefTitle;\n    }\n    const fieldDef = model.typedFieldDef(channel);\n    const channel2 = channel === 'x' ? 'x2' : 'y2';\n    const fieldDef2 = model.fieldDef(channel2);\n\n    // If title not specified, store base parts of fieldDef (and fieldDef2 if exists)\n    return mergeTitleFieldDefs(\n      fieldDef ? [toFieldDefBase(fieldDef)] : [],\n      isFieldDef(fieldDef2) ? [toFieldDefBase(fieldDef2)] : []\n    );\n  },\n\n  values: ({axis, fieldOrDatumDef}) => values(axis, fieldOrDatumDef),\n\n  zindex: ({axis, fieldOrDatumDef, mark}) => axis.zindex ?? defaultZindex(mark, fieldOrDatumDef)\n};\n\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\n\nexport function defaultGrid(scaleType: ScaleType, fieldDef: TypedFieldDef<string> | DatumDef) {\n  return !hasDiscreteDomain(scaleType) && isFieldDef(fieldDef) && !isBinning(fieldDef?.bin);\n}\n\nexport function gridScale(model: UnitModel, channel: PositionScaleChannel) {\n  const gridChannel: PositionScaleChannel = channel === 'x' ? 'y' : 'x';\n  if (model.getScaleComponent(gridChannel)) {\n    return model.scaleName(gridChannel);\n  }\n  return undefined;\n}\n\nexport function getLabelAngle(\n  model: UnitModel,\n  axis: Axis,\n  channel: PositionScaleChannel,\n  fieldOrDatumDef: TypedFieldDef<string> | DatumDef,\n  axisConfigs?: AxisConfigs\n) {\n  const labelAngle = axis?.labelAngle;\n  // try axis value\n  if (labelAngle !== undefined) {\n    return isSignalRef(labelAngle) ? labelAngle : normalizeAngle(labelAngle);\n  } else {\n    // try axis config value\n    const {configValue: angle} = getAxisConfig('labelAngle', model.config, axis?.style, axisConfigs);\n    if (angle !== undefined) {\n      return normalizeAngle(angle);\n    } else {\n      // get default value\n      if (channel === X && contains([NOMINAL, ORDINAL], fieldOrDatumDef.type)) {\n        return 270;\n      }\n      // no default\n      return undefined;\n    }\n  }\n}\n\nexport function normalizeAngleExpr(angle: SignalRef) {\n  return `(((${angle.signal} % 360) + 360) % 360)`;\n}\n\nexport function defaultLabelBaseline(\n  angle: number | SignalRef,\n  orient: AxisOrient | SignalRef,\n  channel: 'x' | 'y',\n  alwaysIncludeMiddle?: boolean\n) {\n  if (angle !== undefined) {\n    if (channel === 'x') {\n      if (isSignalRef(angle)) {\n        const a = normalizeAngleExpr(angle);\n        const orientIsTop = isSignalRef(orient) ? `(${orient.signal} === \"top\")` : orient === 'top';\n        return {\n          signal:\n            `(45 < ${a} && ${a} < 135) || (225 < ${a} && ${a} < 315) ? \"middle\" :` +\n            `(${a} <= 45 || 315 <= ${a}) === ${orientIsTop} ? \"bottom\" : \"top\"`\n        };\n      }\n\n      if ((45 < angle && angle < 135) || (225 < angle && angle < 315)) {\n        return 'middle';\n      }\n\n      if (isSignalRef(orient)) {\n        const op = angle <= 45 || 315 <= angle ? '===' : '!==';\n        return {signal: `${orient.signal} ${op} \"top\" ? \"bottom\" : \"top\"`};\n      }\n\n      return (angle <= 45 || 315 <= angle) === (orient === 'top') ? 'bottom' : 'top';\n    } else {\n      if (isSignalRef(angle)) {\n        const a = normalizeAngleExpr(angle);\n        const orientIsLeft = isSignalRef(orient) ? `(${orient.signal} === \"left\")` : orient === 'left';\n        const middle = alwaysIncludeMiddle ? '\"middle\"' : 'null';\n        return {\n          signal: `${a} <= 45 || 315 <= ${a} || (135 <= ${a} && ${a} <= 225) ? ${middle} : (45 <= ${a} && ${a} <= 135) === ${orientIsLeft} ? \"top\" : \"bottom\"`\n        };\n      }\n\n      if (angle <= 45 || 315 <= angle || (135 <= angle && angle <= 225)) {\n        return alwaysIncludeMiddle ? 'middle' : null;\n      }\n\n      if (isSignalRef(orient)) {\n        const op = 45 <= angle && angle <= 135 ? '===' : '!==';\n        return {signal: `${orient.signal} ${op} \"left\" ? \"top\" : \"bottom\"`};\n      }\n\n      return (45 <= angle && angle <= 135) === (orient === 'left') ? 'top' : 'bottom';\n    }\n  }\n  return undefined;\n}\n\nexport function defaultLabelAlign(\n  angle: number | SignalRef,\n  orient: AxisOrient | SignalRef,\n  channel: 'x' | 'y'\n): Align | SignalRef {\n  if (angle === undefined) {\n    return undefined;\n  }\n\n  const isX = channel === 'x';\n  const startAngle = isX ? 0 : 90;\n  const mainOrient = isX ? 'bottom' : 'left';\n\n  if (isSignalRef(angle)) {\n    const a = normalizeAngleExpr(angle);\n    const orientIsMain = isSignalRef(orient) ? `(${orient.signal} === \"${mainOrient}\")` : orient === mainOrient;\n    return {\n      signal:\n        `(${startAngle ? '(' + a + ' + 90)' : a} % 180 === 0) ? ${isX ? null : '\"center\"'} :` +\n        `(${startAngle} < ${a} && ${a} < ${180 + startAngle}) === ${orientIsMain} ? \"left\" : \"right\"`\n    };\n  }\n\n  if ((angle + startAngle) % 180 === 0) {\n    // For bottom, use default label align so label flush still works\n    return isX ? null : 'center';\n  }\n\n  if (isSignalRef(orient)) {\n    const op = startAngle < angle && angle < 180 + startAngle ? '===' : '!==';\n    const orientIsMain = `${orient.signal} ${op} \"${mainOrient}\"`;\n    return {\n      signal: `${orientIsMain} ? \"left\" : \"right\"`\n    };\n  }\n\n  if ((startAngle < angle && angle < 180 + startAngle) === (orient === mainOrient)) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nexport function defaultLabelFlush(type: Type, channel: PositionScaleChannel) {\n  if (channel === 'x' && contains(['quantitative', 'temporal'], type)) {\n    return true;\n  }\n  return undefined;\n}\n\nexport function defaultLabelOverlap(type: Type, scaleType: ScaleType) {\n  // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n  if (type !== 'nominal') {\n    if (scaleType === 'log') {\n      return 'greedy';\n    }\n    return true;\n  }\n  return undefined;\n}\n\nexport function defaultOrient(channel: PositionScaleChannel) {\n  return channel === 'x' ? 'bottom' : 'left';\n}\n\nexport function defaultTickCount({\n  fieldOrDatumDef,\n  scaleType,\n  size,\n  values: vals\n}: {\n  fieldOrDatumDef: TypedFieldDef<string> | DatumDef;\n  scaleType: ScaleType;\n  size?: SignalRef;\n  values?: Axis['values'];\n}) {\n  if (!vals && !hasDiscreteDomain(scaleType) && scaleType !== 'log') {\n    if (isFieldDef(fieldOrDatumDef)) {\n      if (isBinning(fieldOrDatumDef.bin)) {\n        // for binned data, we don't want more ticks than maxbins\n        return {signal: `ceil(${size.signal}/10)`};\n      }\n\n      if (\n        fieldOrDatumDef.timeUnit &&\n        contains(['month', 'hours', 'day', 'quarter'], normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit)\n      ) {\n        return undefined;\n      }\n    }\n\n    return {signal: `ceil(${size.signal}/40)`};\n  }\n\n  return undefined;\n}\n\nexport function getFieldDefTitle(model: UnitModel, channel: 'x' | 'y') {\n  const channel2 = channel === 'x' ? 'x2' : 'y2';\n  const fieldDef = model.fieldDef(channel);\n  const fieldDef2 = model.fieldDef(channel2);\n\n  const title1 = fieldDef ? fieldDef.title : undefined;\n  const title2 = fieldDef2 ? fieldDef2.title : undefined;\n\n  if (title1 && title2) {\n    return mergeTitle(title1, title2);\n  } else if (title1) {\n    return title1;\n  } else if (title2) {\n    return title2;\n  } else if (title1 !== undefined) {\n    // falsy value to disable config\n    return title1;\n  } else if (title2 !== undefined) {\n    // falsy value to disable config\n    return title2;\n  }\n\n  return undefined;\n}\n\nexport function values(axis: Axis, fieldOrDatumDef: TypedFieldDef<string> | DatumDef) {\n  const vals = axis.values;\n\n  if (isArray(vals)) {\n    return valueArray(fieldOrDatumDef, vals);\n  } else if (isSignalRef(vals)) {\n    return vals;\n  }\n\n  return undefined;\n}\n\nexport function defaultZindex(mark: Mark, fieldDef: TypedFieldDef<string> | DatumDef) {\n  if (mark === 'rect' && isDiscrete(fieldDef)) {\n    return 1;\n  }\n  return 0;\n}\n","import {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {SingleDefChannel} from '../../channel';\nimport {FieldRefOption, isScaleFieldDef, TypedFieldDef, vgField} from '../../channeldef';\nimport {DateTime} from '../../datetime';\nimport {fieldFilterExpression} from '../../predicate';\nimport {isSortArray} from '../../sort';\nimport {CalculateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class CalculateNode extends DataFlowNode {\n  private _dependentFields: Set<string>;\n\n  public clone() {\n    return new CalculateNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private readonly transform: CalculateTransform) {\n    super(parent);\n\n    this._dependentFields = getDependentFields(this.transform.calculate);\n  }\n\n  public static parseAllForSortIndex(parent: DataFlowNode, model: ModelWithField) {\n    // get all the encoding with sort fields from model\n    model.forEachFieldDef((fieldDef: TypedFieldDef<string>, channel: SingleDefChannel) => {\n      if (!isScaleFieldDef(fieldDef)) {\n        return;\n      }\n      if (isSortArray(fieldDef.sort)) {\n        const {field, timeUnit} = fieldDef;\n        const sort: (number | string | boolean | DateTime)[] = fieldDef.sort;\n        // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n        const calculate =\n          sort\n            .map((sortValue, i) => {\n              return `${fieldFilterExpression({field, timeUnit, equal: sortValue})} ? ${i} : `;\n            })\n            .join('') + sort.length;\n\n        parent = new CalculateNode(parent, {\n          calculate,\n          as: sortArrayIndexField(fieldDef, channel, {forAs: true})\n        });\n      }\n    });\n    return parent;\n  }\n\n  public producedFields() {\n    return new Set([this.transform.as]);\n  }\n\n  public dependentFields() {\n    return this._dependentFields;\n  }\n\n  public assemble(): VgFormulaTransform {\n    return {\n      type: 'formula',\n      expr: this.transform.calculate,\n      as: this.transform.as\n    };\n  }\n\n  public hash() {\n    return `Calculate ${hash(this.transform)}`;\n  }\n}\n\nexport function sortArrayIndexField(fieldDef: TypedFieldDef<string>, channel: SingleDefChannel, opt?: FieldRefOption) {\n  return vgField(fieldDef, {prefix: channel, suffix: 'sort_index', ...(opt ?? {})});\n}\n","import {Orient} from 'vega';\nimport {FacetChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {Header} from '../../header';\nimport {FacetFieldDef} from '../../spec/facet';\nimport {contains, getFirstDefined} from '../../util';\nimport {HeaderChannel} from './component';\n\n/**\n * Get header channel, which can be different from facet channel when orient is specified or when the facet channel is facet.\n */\nexport function getHeaderChannel(channel: FacetChannel, orient: Orient): HeaderChannel {\n  if (contains(['top', 'bottom'], orient)) {\n    return 'column';\n  } else if (contains(['left', 'right'], orient)) {\n    return 'row';\n  }\n  return channel === 'row' ? 'row' : 'column';\n}\n\nexport function getHeaderProperty<P extends keyof Header>(\n  prop: P,\n  facetFieldDef: FacetFieldDef<string>,\n  config: Config,\n  channel: FacetChannel\n): Header[P] {\n  const headerSpecificConfig =\n    channel === 'row' ? config.headerRow : channel === 'column' ? config.headerColumn : config.headerFacet;\n\n  return getFirstDefined((facetFieldDef?.header || {})[prop], headerSpecificConfig[prop], config.header[prop]);\n}\n\nexport function getHeaderProperties(\n  properties: (keyof Header)[],\n  facetFieldDef: FacetFieldDef<string>,\n  config: Config,\n  channel: FacetChannel\n): Header {\n  const props = {};\n  for (const prop of properties) {\n    const value = getHeaderProperty(prop, facetFieldDef, config, channel);\n    if (value !== undefined) {\n      props[prop] = value;\n    }\n  }\n  return props;\n}\n","/**\n * Utility for generating row / column headers\n */\nimport {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {FacetFieldDef} from '../../spec/facet';\n\nexport type HeaderChannel = 'row' | 'column';\nexport const HEADER_CHANNELS: HeaderChannel[] = ['row', 'column'];\n\nexport type HeaderType = 'header' | 'footer';\nexport const HEADER_TYPES: HeaderType[] = ['header', 'footer'];\n\nexport interface LayoutHeaderComponentIndex {\n  row?: LayoutHeaderComponent;\n  column?: LayoutHeaderComponent;\n  facet?: LayoutHeaderComponent;\n}\n\n/**\n * A component that represents all header, footers and title of a Vega group with layout directive.\n */\nexport interface LayoutHeaderComponent {\n  title?: Text | SignalRef;\n\n  // TODO: concat can have multiple header / footer.\n  // Need to redesign this part a bit.\n\n  facetFieldDef?: FacetFieldDef<string>;\n\n  /**\n   * An array of header components for headers.\n   * For facet, there should be only one header component, which is data-driven.\n   * For concat, there can be multiple header components that explicitly list different axes.\n   */\n  header?: HeaderComponent[];\n\n  /**\n   * An array of header components for footers.\n   * For facet, there should be only one header component, which is data-driven.\n   * For concat, there can be multiple header components that explicitly list different axes.\n   */\n  footer?: HeaderComponent[];\n}\n\n/**\n * A component that represents one group of row/column-header/footer.\n */\nexport interface HeaderComponent {\n  labels: boolean;\n\n  sizeSignal: {signal: string};\n\n  axes: VgAxis[];\n}\n","/**\n * Utility for generating row / column headers\n */\n\nimport {TitleAnchor, TitleConfig} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {\n  CoreHeader,\n  HEADER_LABEL_PROPERTIES,\n  HEADER_LABEL_PROPERTIES_MAP,\n  HEADER_TITLE_PROPERTIES,\n  HEADER_TITLE_PROPERTIES_MAP\n} from '../../header';\nimport {isSortField} from '../../sort';\nimport {FacetFieldDef, isFacetMapping} from '../../spec/facet';\nimport {contains, isEmpty, normalizeAngle, replaceAll} from '../../util';\nimport {RowCol, VgComparator, VgMarkGroup, VgTitle} from '../../vega.schema';\nimport {defaultLabelAlign, defaultLabelBaseline} from '../axis/properties';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {formatSignalRef} from '../format';\nimport {isFacetModel, Model} from '../model';\nimport {getHeaderChannel, getHeaderProperties, getHeaderProperty} from './common';\nimport {\n  HeaderChannel,\n  HeaderComponent,\n  HeaderType,\n  HEADER_TYPES,\n  LayoutHeaderComponent,\n  LayoutHeaderComponentIndex\n} from './component';\n\n// TODO: rename to assembleHeaderTitleGroup\nexport function assembleTitleGroup(model: Model, channel: FacetChannel) {\n  const title = model.component.layoutHeaders[channel].title;\n  const config = model.config ? model.config : undefined;\n  const facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef\n    ? model.component.layoutHeaders[channel].facetFieldDef\n    : undefined;\n\n  const {titleAnchor, titleAngle: ta, titleOrient} = getHeaderProperties(\n    ['titleAnchor', 'titleAngle', 'titleOrient'],\n    facetFieldDef,\n    config,\n    channel\n  );\n  const headerChannel = getHeaderChannel(channel, titleOrient);\n\n  const titleAngle = normalizeAngle(ta);\n\n  return {\n    name: `${channel}-title`,\n    type: 'group',\n    role: `${headerChannel}-title`,\n    title: {\n      text: title,\n      ...(channel === 'row' ? {orient: 'left'} : {}),\n      style: 'guide-title',\n      ...defaultHeaderGuideBaseline(titleAngle, headerChannel),\n      ...defaultHeaderGuideAlign(headerChannel, titleAngle, titleAnchor),\n      ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_TITLE_PROPERTIES, HEADER_TITLE_PROPERTIES_MAP)\n    }\n  };\n}\n\nexport function defaultHeaderGuideAlign(headerChannel: HeaderChannel, angle: number, anchor: TitleAnchor = 'middle') {\n  switch (anchor) {\n    case 'start':\n      return {align: 'left'};\n    case 'end':\n      return {align: 'right'};\n  }\n\n  const align = defaultLabelAlign(angle, headerChannel === 'row' ? 'left' : 'top', headerChannel === 'row' ? 'y' : 'x');\n  return align ? {align} : {};\n}\n\nexport function defaultHeaderGuideBaseline(angle: number, channel: FacetChannel) {\n  const baseline = defaultLabelBaseline(angle, channel === 'row' ? 'left' : 'top', channel === 'row' ? 'y' : 'x', true);\n  return baseline ? {baseline} : {};\n}\n\nexport function assembleHeaderGroups(model: Model, channel: HeaderChannel): VgMarkGroup[] {\n  const layoutHeader = model.component.layoutHeaders[channel];\n  const groups = [];\n  for (const headerType of HEADER_TYPES) {\n    if (layoutHeader[headerType]) {\n      for (const headerComponent of layoutHeader[headerType]) {\n        const group = assembleHeaderGroup(model, channel, headerType, layoutHeader, headerComponent);\n        if (group != null) {\n          groups.push(group);\n        }\n      }\n    }\n  }\n  return groups;\n}\n\nfunction getSort(facetFieldDef: FacetFieldDef<string>, channel: HeaderChannel): VgComparator {\n  const {sort} = facetFieldDef;\n  if (isSortField(sort)) {\n    return {\n      field: vgField(sort, {expr: 'datum'}),\n      order: sort.order ?? 'ascending'\n    };\n  } else if (isArray(sort)) {\n    return {\n      field: sortArrayIndexField(facetFieldDef, channel, {expr: 'datum'}),\n      order: 'ascending'\n    };\n  } else {\n    return {\n      field: vgField(facetFieldDef, {expr: 'datum'}),\n      order: sort ?? 'ascending'\n    };\n  }\n}\n\nexport function assembleLabelTitle(facetFieldDef: FacetFieldDef<string>, channel: FacetChannel, config: Config) {\n  const {format, formatType, labelAngle, labelAnchor, labelOrient, labelExpr} = getHeaderProperties(\n    ['format', 'formatType', 'labelAngle', 'labelAnchor', 'labelOrient', 'labelExpr'],\n    facetFieldDef,\n    config,\n    channel\n  );\n\n  const titleTextExpr = formatSignalRef({fieldOrDatumDef: facetFieldDef, format, formatType, expr: 'parent', config})\n    .signal;\n  const headerChannel = getHeaderChannel(channel, labelOrient);\n\n  return {\n    text: {\n      signal: labelExpr\n        ? replaceAll(\n            replaceAll(labelExpr, 'datum.label', titleTextExpr),\n            'datum.value',\n            vgField(facetFieldDef, {expr: 'parent'})\n          )\n        : titleTextExpr\n    },\n    ...(channel === 'row' ? {orient: 'left'} : {}),\n    style: 'guide-label',\n    frame: 'group',\n    ...defaultHeaderGuideBaseline(labelAngle, headerChannel),\n    ...defaultHeaderGuideAlign(headerChannel, labelAngle, labelAnchor),\n    ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_LABEL_PROPERTIES, HEADER_LABEL_PROPERTIES_MAP)\n  };\n}\n\nexport function assembleHeaderGroup(\n  model: Model,\n  channel: HeaderChannel,\n  headerType: HeaderType,\n  layoutHeader: LayoutHeaderComponent,\n  headerComponent: HeaderComponent\n) {\n  if (headerComponent) {\n    let title = null;\n    const {facetFieldDef} = layoutHeader;\n    const config = model.config ? model.config : undefined;\n    if (facetFieldDef && headerComponent.labels) {\n      const {labelOrient} = getHeaderProperties(['labelOrient'], facetFieldDef, config, channel);\n\n      // Include label title in the header if orient aligns with the channel\n      if (\n        (channel === 'row' && !contains(['top', 'bottom'], labelOrient)) ||\n        (channel === 'column' && !contains(['left', 'right'], labelOrient))\n      ) {\n        title = assembleLabelTitle(facetFieldDef, channel, config);\n      }\n    }\n\n    const isFacetWithoutRowCol = isFacetModel(model) && !isFacetMapping(model.facet);\n\n    const axes = headerComponent.axes;\n\n    const hasAxes = axes?.length > 0;\n    if (title || hasAxes) {\n      const sizeChannel = channel === 'row' ? 'height' : 'width';\n\n      return {\n        name: model.getName(`${channel}_${headerType}`),\n        type: 'group',\n        role: `${channel}-${headerType}`,\n\n        ...(layoutHeader.facetFieldDef\n          ? {\n              from: {data: model.getName(channel + '_domain')},\n              sort: getSort(facetFieldDef, channel)\n            }\n          : {}),\n        ...(hasAxes && isFacetWithoutRowCol\n          ? {\n              from: {data: model.getName(`facet_domain_${channel}`)}\n            }\n          : {}),\n\n        ...(title ? {title} : {}),\n        ...(headerComponent.sizeSignal\n          ? {\n              encode: {\n                update: {\n                  [sizeChannel]: headerComponent.sizeSignal\n                }\n              }\n            }\n          : {}),\n        ...(hasAxes ? {axes} : {})\n      };\n    }\n  }\n  return null;\n}\n\nconst LAYOUT_TITLE_BAND = {\n  column: {\n    start: 0,\n    end: 1\n  },\n  row: {\n    start: 1,\n    end: 0\n  }\n};\n\nexport function getLayoutTitleBand(titleAnchor: TitleAnchor, headerChannel: HeaderChannel) {\n  return LAYOUT_TITLE_BAND[headerChannel][titleAnchor];\n}\n\nexport function assembleLayoutTitleBand(\n  headerComponentIndex: LayoutHeaderComponentIndex,\n  config: Config\n): RowCol<number> {\n  const titleBand = {};\n\n  for (const channel of FACET_CHANNELS) {\n    const headerComponent = headerComponentIndex[channel];\n    if (headerComponent?.facetFieldDef) {\n      const {titleAnchor, titleOrient} = getHeaderProperties(\n        ['titleAnchor', 'titleOrient'],\n        headerComponent.facetFieldDef,\n        config,\n        channel\n      );\n\n      const headerChannel = getHeaderChannel(channel, titleOrient);\n      const band = getLayoutTitleBand(titleAnchor, headerChannel);\n      if (band !== undefined) {\n        titleBand[headerChannel] = band;\n      }\n    }\n  }\n\n  return isEmpty(titleBand) ? undefined : titleBand;\n}\n\nexport function assembleHeaderProperties(\n  config: Config,\n  facetFieldDef: FacetFieldDef<string>,\n  channel: FacetChannel,\n  properties: (keyof CoreHeader)[],\n  propertiesMap: Partial<Record<keyof CoreHeader, keyof TitleConfig>>\n): Partial<VgTitle> {\n  const props = {};\n  for (const prop of properties) {\n    if (!propertiesMap[prop]) {\n      continue;\n    }\n\n    const value = getHeaderProperty(prop, facetFieldDef, config, channel);\n    if (value !== undefined) {\n      props[propertiesMap[prop]] = value;\n    }\n  }\n  return props;\n}\n","import {InitSignal, NewSignal} from 'vega';\nimport {getViewConfigContinuousSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {getFirstDefined} from '../../util';\nimport {isVgRangeStep, VgRangeStep} from '../../vega.schema';\nimport {isFacetModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {LayoutSizeType} from './component';\n\nexport function assembleLayoutSignals(model: Model): NewSignal[] {\n  return [\n    ...sizeSignals(model, 'width'),\n    ...sizeSignals(model, 'height'),\n    ...sizeSignals(model, 'childWidth'),\n    ...sizeSignals(model, 'childHeight')\n  ];\n}\n\nexport function sizeSignals(model: Model, sizeType: LayoutSizeType): (NewSignal | InitSignal)[] {\n  const channel = sizeType === 'width' ? 'x' : 'y';\n  const size = model.component.layoutSize.get(sizeType);\n  if (!size || size === 'merged') {\n    return [];\n  }\n\n  // Read size signal name from name map, just in case it is the top-level size signal that got renamed.\n  const name = model.getSizeSignalRef(sizeType).signal;\n\n  if (size === 'step') {\n    const scaleComponent = model.getScaleComponent(channel);\n\n    if (scaleComponent) {\n      const type = scaleComponent.get('type');\n      const range = scaleComponent.get('range');\n\n      if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n        const scaleName = model.scaleName(channel);\n\n        if (isFacetModel(model.parent)) {\n          // If parent is facet and this is an independent scale, return only signal signal\n          // as the width/height will be calculated using the cardinality from\n          // facet's aggregate rather than reading from scale domain\n          const parentResolve = model.parent.component.resolve;\n          if (parentResolve.scale[channel] === 'independent') {\n            return [stepSignal(scaleName, range)];\n          }\n        }\n\n        return [\n          stepSignal(scaleName, range),\n          {\n            name,\n            update: sizeExpr(scaleName, scaleComponent, `domain('${scaleName}').length`)\n          }\n        ];\n      }\n    }\n    /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n    throw new Error('layout size is step although width/height is not step.');\n  } else if (size == 'container') {\n    const isWidth = name.endsWith('width');\n    const expr = isWidth ? 'containerSize()[0]' : 'containerSize()[1]';\n    const defaultValue = getViewConfigContinuousSize(model.config.view, isWidth ? 'width' : 'height');\n    const safeExpr = `isFinite(${expr}) ? ${expr} : ${defaultValue}`;\n    return [{name, init: safeExpr, on: [{update: safeExpr, events: 'window:resize'}]}];\n  } else {\n    return [\n      {\n        name,\n        value: size\n      }\n    ];\n  }\n}\n\nfunction stepSignal(scaleName: string, range: VgRangeStep): NewSignal {\n  return {\n    name: scaleName + '_step',\n    value: range.step\n  };\n}\n\nexport function sizeExpr(scaleName: string, scaleComponent: ScaleComponent, cardinality: string) {\n  const type = scaleComponent.get('type');\n  const padding = scaleComponent.get('padding');\n  const paddingOuter = getFirstDefined(scaleComponent.get('paddingOuter'), padding);\n\n  let paddingInner = scaleComponent.get('paddingInner');\n  paddingInner =\n    type === 'band'\n      ? // only band has real paddingInner\n        paddingInner !== undefined\n        ? paddingInner\n        : padding\n      : // For point, as calculated in https://github.com/vega/vega-scale/blob/master/src/band.js#L128,\n        // it's equivalent to have paddingInner = 1 since there is only n-1 steps between n points.\n        1;\n  return `bandspace(${cardinality}, ${paddingInner}, ${paddingOuter}) * ${scaleName}_step`;\n}\n","import {Split} from '../split';\n\nexport type LayoutSize = number | 'container' | 'step' | 'merged';\n\nexport interface LayoutSizeIndex {\n  width?: LayoutSize;\n\n  childWidth?: LayoutSize;\n\n  height?: LayoutSize;\n\n  childHeight?: LayoutSize;\n}\n\nexport type LayoutSizeType = keyof LayoutSizeIndex;\n\nexport type LayoutSizeComponent = Split<LayoutSizeIndex>;\n\nexport function getSizeTypeFromLayoutSizeType(layoutSizeType: LayoutSizeType): 'width' | 'height' {\n  return layoutSizeType === 'childWidth' ? 'width' : layoutSizeType === 'childHeight' ? 'height' : layoutSizeType;\n}\n","import {SignalRef} from 'vega';\nimport {ValueDef} from '../channeldef';\nimport {GuideEncodingEntry} from '../guide';\nimport {keys} from '../util';\nimport {isSignalRef, VgEncodeChannel} from '../vega.schema';\nimport {wrapCondition} from './mark/encode';\nimport {UnitModel} from './unit';\n\nexport function guideEncodeEntry(encoding: GuideEncodingEntry, model: UnitModel) {\n  return keys(encoding).reduce((encode, channel: VgEncodeChannel) => {\n    const valueDef = encoding[channel];\n    return {\n      ...encode,\n      ...wrapCondition(model, valueDef, channel, (x: ValueDef | SignalRef) => (isSignalRef(x) ? x : {value: x.value}))\n    };\n  }, {});\n}\n","import {isXorY, ScaleChannel} from '../channel';\nimport * as log from '../log';\nimport {Resolve, ResolveMode} from '../resolve';\nimport {isConcatModel, isFacetModel, isLayerModel, Model} from './model';\n\nexport function defaultScaleResolve(channel: ScaleChannel, model: Model): ResolveMode {\n  if (isLayerModel(model) || isFacetModel(model)) {\n    return 'shared';\n  } else if (isConcatModel(model)) {\n    return isXorY(channel) ? 'independent' : 'shared';\n  }\n  /* istanbul ignore next: should never reach here. */\n  throw new Error('invalid model type for resolve');\n}\n\nexport function parseGuideResolve(resolve: Resolve, channel: ScaleChannel): ResolveMode {\n  const channelScaleResolve = resolve.scale[channel];\n  const guide = isXorY(channel) ? 'axis' : 'legend';\n\n  if (channelScaleResolve === 'independent') {\n    if (resolve[guide][channel] === 'shared') {\n      log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n    }\n    return 'independent';\n  }\n\n  return resolve[guide][channel] || 'shared';\n}\n","import {Legend as VgLegend} from 'vega';\nimport {NonPositionScaleChannel} from '../../channel';\nimport {COMMON_LEGEND_PROPERTY_INDEX, Legend} from '../../legend';\nimport {Flag, keys} from '../../util';\nimport {Split} from '../split';\n\nexport type LegendComponentProps = VgLegend & {\n  labelExpr?: string;\n  selections?: string[];\n  disable?: boolean;\n};\n\nconst LEGEND_COMPONENT_PROPERTY_INDEX: Flag<keyof LegendComponentProps> = {\n  ...COMMON_LEGEND_PROPERTY_INDEX,\n  disable: 1,\n  labelExpr: 1,\n  selections: 1,\n  // channel scales\n  opacity: 1,\n  shape: 1,\n  stroke: 1,\n  fill: 1,\n  size: 1,\n  strokeWidth: 1,\n  strokeDash: 1,\n  // encode\n  encode: 1\n};\n\nexport const LEGEND_COMPONENT_PROPERTIES = keys(LEGEND_COMPONENT_PROPERTY_INDEX);\n\nexport class LegendComponent extends Split<LegendComponentProps> {}\n\nexport type LegendComponentIndex = Partial<Record<NonPositionScaleChannel, LegendComponent>>;\n\nexport type LegendIndex = Partial<Record<NonPositionScaleChannel, Legend>>;\n","import {ColorValueRef, EncodeEntry, Gradient, LegendEncode, LegendType, SignalRef, SymbolEncodeEntry} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {COLOR, OPACITY, ScaleChannel} from '../../channel';\nimport {\n  Conditional,\n  DatumDef,\n  hasConditionalValueDef,\n  isFieldDef,\n  isValueDef,\n  TypedFieldDef,\n  Value,\n  ValueDef\n} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport {FILL_STROKE_CONFIG} from '../../mark';\nimport {getFirstDefined, isEmpty, varName} from '../../util';\nimport {applyMarkConfig, signalOrValueRef} from '../common';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport * as mixins from '../mark/encode';\nimport {STORE} from '../selection';\nimport {UnitModel} from '../unit';\nimport {LegendComponent} from './component';\n\nexport interface LegendEncodeParams {\n  fieldOrDatumDef: TypedFieldDef<string> | DatumDef;\n  model: UnitModel;\n  channel: ScaleChannel;\n  legendCmpt: LegendComponent;\n\n  legendType: LegendType;\n}\n\nexport const legendEncodeRules: {\n  [part in keyof LegendEncode]?: (spec: EncodeEntry, params: LegendEncodeParams) => EncodeEntry;\n} = {\n  symbols,\n  gradient,\n  labels,\n  entries\n};\n\nexport function symbols(\n  symbolsSpec: any,\n  {\n    fieldOrDatumDef,\n\n    model,\n    channel,\n    legendCmpt,\n    legendType\n  }: LegendEncodeParams\n): SymbolEncodeEntry {\n  if (legendType !== 'symbol') {\n    return undefined;\n  }\n\n  const {markDef, encoding, config, mark} = model;\n  const filled = markDef.filled && mark !== 'trail';\n\n  let out = {\n    ...applyMarkConfig({}, model, FILL_STROKE_CONFIG),\n    ...mixins.color(model, {filled})\n  } as SymbolEncodeEntry; // FIXME: remove this when VgEncodeEntry is compatible with SymbolEncodeEntry\n\n  const opacity = getMaxValue(encoding.opacity) ?? markDef.opacity;\n\n  if (out.fill) {\n    // for fill legend, we don't want any fill in symbol\n    if (channel === 'fill' || (filled && channel === COLOR)) {\n      delete out.fill;\n    } else {\n      if (out.fill['field']) {\n        // For others, set fill to some opaque value (or nothing if a color is already set)\n        if (legendCmpt.get('symbolFillColor')) {\n          delete out.fill;\n        } else {\n          out.fill = signalOrValueRef(config.legend.symbolBaseFillColor ?? 'black');\n          out.fillOpacity = signalOrValueRef(opacity ?? 1);\n        }\n      } else if (isArray(out.fill)) {\n        const fill =\n          getFirstConditionValue(encoding.fill ?? encoding.color) ?? markDef.fill ?? (filled && markDef.color);\n        if (fill) {\n          out.fill = signalOrValueRef(fill) as ColorValueRef;\n        }\n      }\n    }\n  }\n\n  if (out.stroke) {\n    if (channel === 'stroke' || (!filled && channel === COLOR)) {\n      delete out.stroke;\n    } else {\n      if (out.stroke['field']) {\n        // For others, remove stroke field\n        delete out.stroke;\n      } else if (isArray(out.stroke)) {\n        const stroke = getFirstDefined<string | Gradient | SignalRef>(\n          getFirstConditionValue<string | Gradient>(encoding.stroke || encoding.color),\n          markDef.stroke,\n          filled ? markDef.color : undefined\n        );\n        if (stroke) {\n          out.stroke = {value: stroke} as ColorValueRef;\n        }\n      }\n    }\n  }\n\n  if (channel !== OPACITY) {\n    const condition = isFieldDef(fieldOrDatumDef) && selectedCondition(model, legendCmpt, fieldOrDatumDef);\n\n    if (condition) {\n      out.opacity = [\n        {test: condition, ...signalOrValueRef(opacity ?? 1)},\n        signalOrValueRef(config.legend.unselectedOpacity)\n      ];\n    } else if (opacity) {\n      out.opacity = signalOrValueRef(opacity);\n    }\n  }\n\n  out = {...out, ...symbolsSpec};\n\n  return isEmpty(out) ? undefined : out;\n}\n\nexport function gradient(gradientSpec: any, {model, legendType}: LegendEncodeParams) {\n  if (legendType !== 'gradient') {\n    return undefined;\n  }\n\n  let out: SymbolEncodeEntry = {};\n\n  const opacity = getMaxValue(model.encoding.opacity) || model.markDef.opacity;\n  if (opacity) {\n    // only apply opacity if it is neither zero or undefined\n    out.opacity = signalOrValueRef(opacity);\n  }\n\n  out = {...out, ...gradientSpec};\n  return isEmpty(out) ? undefined : out;\n}\n\nexport function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channel, legendCmpt}: LegendEncodeParams) {\n  const legend = model.legend(channel) || {};\n  const config = model.config;\n\n  const condition = isFieldDef(fieldOrDatumDef) ? selectedCondition(model, legendCmpt, fieldOrDatumDef) : undefined;\n  const opacity = condition ? [{test: condition, value: 1}, {value: config.legend.unselectedOpacity}] : undefined;\n\n  const {format, formatType} = legend;\n\n  const text = isCustomFormatType(formatType)\n    ? formatCustomType({\n        fieldOrDatumDef,\n        field: 'datum.value',\n        format,\n        formatType,\n        config\n      })\n    : undefined;\n\n  const labelsSpec = {\n    ...(opacity ? {opacity} : {}),\n    ...(text ? {text} : {}),\n    ...specifiedlabelsSpec\n  };\n\n  return isEmpty(labelsSpec) ? undefined : labelsSpec;\n}\n\nexport function entries(entriesSpec: any, {legendCmpt}: LegendEncodeParams) {\n  const selections = legendCmpt.get('selections');\n  return selections?.length ? {...entriesSpec, fill: {value: 'transparent'}} : entriesSpec;\n}\n\nfunction getMaxValue(channelDef: Encoding<string>['opacity']) {\n  return getConditionValue<number>(channelDef, (v: number, conditionalDef) => Math.max(v, conditionalDef.value as any));\n}\n\nexport function getFirstConditionValue<V extends Value | Gradient>(\n  channelDef: Encoding<string>['fill' | 'stroke' | 'shape']\n): V {\n  return getConditionValue<V>(channelDef, (v: V, conditionalDef: Conditional<ValueDef<V>>) => {\n    return getFirstDefined<V>(v, conditionalDef.value);\n  });\n}\n\nfunction getConditionValue<V extends Value | Gradient>(\n  channelDef: Encoding<string>['fill' | 'stroke' | 'shape' | 'opacity'],\n  reducer: (val: V, conditionalDef: Conditional<ValueDef<V>>) => V\n): V {\n  if (hasConditionalValueDef(channelDef)) {\n    return array(channelDef.condition).reduce(reducer, channelDef.value as any);\n  } else if (isValueDef(channelDef)) {\n    return channelDef.value as any;\n  }\n  return undefined;\n}\n\nfunction selectedCondition(model: UnitModel, legendCmpt: LegendComponent, fieldDef: TypedFieldDef<string>) {\n  const selections = legendCmpt.get('selections');\n  if (!selections?.length) return undefined;\n\n  const field = stringValue(fieldDef.field);\n  return selections\n    .map(name => {\n      const store = stringValue(varName(name) + STORE);\n      return `(!length(data(${store})) || (${name}[${field}] && indexof(${name}[${field}], datum.value) >= 0))`;\n    })\n    .join(' || ');\n}\n","import {LabelOverlap, LegendOrient, LegendType, Orientation, SignalRef, SymbolShape} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Channel, isColorChannel, NonPositionChannel} from '../../channel';\nimport {DatumDef, MarkPropFieldOrDatumDef, title as fieldDefTitle, TypedFieldDef, valueArray} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {Legend, LegendConfig} from '../../legend';\nimport {Mark, MarkDef} from '../../mark';\nimport {isContinuousToContinuous, ScaleType} from '../../scale';\nimport {TimeUnit} from '../../timeunit';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {guideFormat, guideFormatType} from '../format';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {LegendComponentProps} from './component';\nimport {getFirstConditionValue} from './encode';\n\nexport interface LegendRuleParams {\n  legend: Legend;\n  channel: NonPositionChannel;\n  model: UnitModel;\n  markDef: MarkDef;\n  encoding: Encoding<string>;\n\n  fieldOrDatumDef: MarkPropFieldOrDatumDef<string>;\n\n  legendConfig: LegendConfig;\n\n  config: Config;\n\n  scaleType: ScaleType;\n\n  orient: LegendOrient;\n\n  legendType: LegendType;\n\n  direction: Orientation;\n}\n\nexport const legendRules: {\n  [k in keyof LegendComponentProps]?: (params: LegendRuleParams) => LegendComponentProps[k];\n} = {\n  direction: ({direction}) => direction,\n\n  format: ({fieldOrDatumDef, legend, config}) => {\n    const {format, formatType} = legend;\n    return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, false);\n  },\n\n  formatType: ({legend, fieldOrDatumDef, scaleType}) => {\n    const {formatType} = legend;\n    return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n  },\n\n  gradientLength: params => {\n    const {legend, legendConfig} = params;\n    return legend.gradientLength ?? legendConfig.gradientLength ?? defaultGradientLength(params);\n  },\n\n  labelOverlap: ({legend, legendConfig, scaleType}) =>\n    legend.labelOverlap ?? legendConfig.labelOverlap ?? defaultLabelOverlap(scaleType),\n\n  symbolType: ({legend, markDef, channel, encoding}) =>\n    legend.symbolType ?? defaultSymbolType(markDef.type, channel, encoding.shape, markDef.shape),\n\n  title: ({fieldOrDatumDef, config}) => fieldDefTitle(fieldOrDatumDef, config, {allowDisabling: true}),\n\n  type: ({legendType, scaleType, channel}) => {\n    if (isColorChannel(channel) && isContinuousToContinuous(scaleType)) {\n      if (legendType === 'gradient') {\n        return undefined;\n      }\n    } else if (legendType === 'symbol') {\n      return undefined;\n    }\n    return legendType;\n  }, // depended by other property, let's define upfront\n\n  values: ({fieldOrDatumDef, legend}) => values(legend, fieldOrDatumDef)\n};\n\nexport function values(legend: Legend, fieldOrDatumDef: TypedFieldDef<string> | DatumDef) {\n  const vals = legend.values;\n\n  if (isArray(vals)) {\n    return valueArray(fieldOrDatumDef, vals);\n  } else if (isSignalRef(vals)) {\n    return vals;\n  }\n  return undefined;\n}\n\nexport function defaultSymbolType(\n  mark: Mark,\n  channel: Channel,\n  shapeChannelDef: Encoding<string>['shape'],\n  markShape: SymbolShape | SignalRef\n): SymbolShape | SignalRef {\n  if (channel !== 'shape') {\n    // use the value from the shape encoding or the mark config if they exist\n    const shape = getFirstConditionValue<string>(shapeChannelDef) ?? markShape;\n    if (shape) {\n      return shape;\n    }\n  }\n\n  switch (mark) {\n    case 'bar':\n    case 'rect':\n    case 'image':\n    case 'square':\n      return 'square';\n    case 'line':\n    case 'trail':\n    case 'rule':\n      return 'stroke';\n    case 'arc':\n    case 'point':\n    case 'circle':\n    case 'tick':\n    case 'geoshape':\n    case 'area':\n    case 'text':\n      return 'circle';\n  }\n}\n\nexport function clipHeight(legendType: LegendType) {\n  if (legendType === 'gradient') {\n    return 20;\n  }\n  return undefined;\n}\n\nexport function getLegendType(params: {\n  legend: Legend;\n  channel: Channel;\n  timeUnit?: TimeUnit;\n  scaleType: ScaleType;\n}): LegendType {\n  const {legend} = params;\n\n  return getFirstDefined(legend.type, defaultType(params));\n}\n\nexport function defaultType({\n  channel,\n  timeUnit,\n  scaleType\n}: {\n  channel: Channel;\n  timeUnit?: TimeUnit;\n  scaleType: ScaleType;\n}): LegendType {\n  // Following the logic in https://github.com/vega/vega-parser/blob/master/src/parsers/legend.js\n\n  if (isColorChannel(channel)) {\n    if (contains(['quarter', 'month', 'day'], timeUnit)) {\n      return 'symbol';\n    }\n\n    if (isContinuousToContinuous(scaleType)) {\n      return 'gradient';\n    }\n  }\n  return 'symbol';\n}\n\nexport function getDirection({\n  legendConfig,\n  legendType,\n  orient,\n  legend\n}: {\n  orient: LegendOrient;\n  legendConfig: LegendConfig;\n  legendType: LegendType;\n  legend: Legend;\n}): Orientation {\n  return (\n    legend.direction ??\n    legendConfig[legendType ? 'gradientDirection' : 'symbolDirection'] ??\n    defaultDirection(orient, legendType)\n  );\n}\n\nexport function defaultDirection(orient: LegendOrient, legendType: LegendType): 'horizontal' | undefined {\n  switch (orient) {\n    case 'top':\n    case 'bottom':\n      return 'horizontal';\n\n    case 'left':\n    case 'right':\n    case 'none':\n    case undefined: // undefined = \"right\" in Vega\n      return undefined; // vertical is Vega's default\n    default:\n      // top-left / ...\n      // For inner legend, uses compact layout like Tableau\n      return legendType === 'gradient' ? 'horizontal' : undefined;\n  }\n}\n\nexport function defaultGradientLength({\n  legendConfig,\n  model,\n  direction,\n  orient,\n  scaleType\n}: {\n  scaleType: ScaleType;\n  direction: Orientation;\n  orient: LegendOrient;\n  model: Model;\n  legendConfig: LegendConfig;\n}) {\n  const {\n    gradientHorizontalMaxLength,\n    gradientHorizontalMinLength,\n    gradientVerticalMaxLength,\n    gradientVerticalMinLength\n  } = legendConfig;\n  if (isContinuousToContinuous(scaleType)) {\n    if (direction === 'horizontal') {\n      if (orient === 'top' || orient === 'bottom') {\n        return gradientLengthSignal(model, 'width', gradientHorizontalMinLength, gradientHorizontalMaxLength);\n      } else {\n        return gradientHorizontalMinLength;\n      }\n    } else {\n      // vertical / undefined (Vega uses vertical by default)\n      return gradientLengthSignal(model, 'height', gradientVerticalMinLength, gradientVerticalMaxLength);\n    }\n  }\n  return undefined;\n}\n\nfunction gradientLengthSignal(model: Model, sizeType: 'width' | 'height', min: number, max: number) {\n  const sizeSignal = model.getSizeSignalRef(sizeType).signal;\n  return {signal: `clamp(${sizeSignal}, ${min}, ${max})`};\n}\n\nexport function defaultLabelOverlap(scaleType: ScaleType): LabelOverlap {\n  if (contains(['quantile', 'threshold', 'log'], scaleType)) {\n    return 'greedy';\n  }\n  return undefined;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {COLOR, NonPositionScaleChannel, SHAPE} from '../../channel';\nimport {DatumDef, FieldDef, getFieldOrDatumDef, isFieldDef, MarkPropDatumDef, MarkPropFieldDef} from '../../channeldef';\nimport {Legend, LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {GEOJSON} from '../../type';\nimport {deleteNestedProperty, isEmpty, keys, varName} from '../../util';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {isUnitModel, Model} from '../model';\nimport {parseGuideResolve} from '../resolve';\nimport {parseInteractiveLegend} from '../selection/transforms/legends';\nimport {defaultTieBreaker, Explicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {LegendComponent, LegendComponentIndex, LegendComponentProps, LEGEND_COMPONENT_PROPERTIES} from './component';\nimport {LegendEncodeParams, legendEncodeRules} from './encode';\nimport {getDirection, getLegendType, LegendRuleParams, legendRules} from './properties';\n\nexport function parseLegend(model: Model) {\n  const legendComponent = isUnitModel(model) ? parseUnitLegend(model) : parseNonUnitLegend(model);\n  model.component.legends = legendComponent;\n  return legendComponent;\n}\n\nfunction parseUnitLegend(model: UnitModel): LegendComponentIndex {\n  const {encoding} = model;\n\n  const legendComponent: LegendComponentIndex = {};\n\n  for (const channel of [COLOR, ...LEGEND_SCALE_CHANNELS]) {\n    const def = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef<string> | MarkPropDatumDef<string>;\n\n    if (!def || !model.getScaleComponent(channel)) {\n      continue;\n    }\n\n    if (channel === SHAPE && isFieldDef(def) && def.type === GEOJSON) {\n      continue;\n    }\n\n    legendComponent[channel] = parseLegendForChannel(model, channel);\n  }\n\n  return legendComponent;\n}\n\nfunction getLegendDefWithScale(model: UnitModel, channel: NonPositionScaleChannel): VgLegend {\n  const scale = model.scaleName(channel);\n  if (model.mark === 'trail') {\n    if (channel === 'color') {\n      // trail is a filled mark, but its default symbolType (\"stroke\") should use \"stroke\"\n      return {stroke: scale};\n    } else if (channel === 'size') {\n      return {strokeWidth: scale};\n    }\n  }\n\n  if (channel === 'color') {\n    return model.markDef.filled ? {fill: scale} : {stroke: scale};\n  }\n  return {[channel]: scale};\n}\n\nfunction isExplicit<T extends string | number | object | boolean>(\n  value: T,\n  property: keyof LegendComponentProps,\n  legend: Legend,\n  fieldDef: FieldDef<string>\n) {\n  switch (property) {\n    case 'disable':\n      return legend !== undefined; // if axis is specified or null/false, then it's enable/disable state is explicit\n\n    case 'values':\n      // specified legend.values is already respected, but may get transformed.\n      return !!legend?.values;\n    case 'title':\n      // title can be explicit if fieldDef.title is set\n      if (property === 'title' && value === fieldDef?.title) {\n        return true;\n      }\n  }\n  // Otherwise, things are explicit if the returned value matches the specified property\n  return value === (legend || {})[property];\n}\n\nexport function parseLegendForChannel(model: UnitModel, channel: NonPositionScaleChannel): LegendComponent {\n  let legend = model.legend(channel);\n\n  const {markDef, encoding, config} = model;\n  const legendConfig = config.legend;\n  const legendCmpt = new LegendComponent({}, getLegendDefWithScale(model, channel));\n  parseInteractiveLegend(model, channel, legendCmpt);\n\n  const disable = legend !== undefined ? !legend : legendConfig.disable;\n  legendCmpt.set('disable', disable, legend !== undefined);\n  if (disable) {\n    return legendCmpt;\n  }\n\n  legend = legend || {};\n\n  const scaleType = model.getScaleComponent(channel).get('type');\n  const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef<string> | DatumDef;\n  const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n  const orient = legend.orient || config.legend.orient || 'right';\n  const legendType = getLegendType({legend, channel, timeUnit, scaleType});\n\n  const direction = getDirection({legend, legendType, orient, legendConfig});\n\n  const ruleParams: LegendRuleParams = {\n    legend,\n    channel,\n    model,\n    markDef,\n    encoding,\n    fieldOrDatumDef,\n    legendConfig,\n    config,\n    scaleType,\n    orient,\n    legendType,\n    direction\n  };\n\n  for (const property of LEGEND_COMPONENT_PROPERTIES) {\n    const value = property in legendRules ? legendRules[property](ruleParams) : legend[property];\n    if (value !== undefined) {\n      const explicit = isExplicit(value, property, legend, model.fieldDef(channel));\n      if (explicit || config.legend[property] === undefined) {\n        legendCmpt.set(property, value, explicit);\n      }\n    }\n  }\n\n  const legendEncoding = legend?.encoding ?? {};\n  const selections = legendCmpt.get('selections');\n  const legendEncode: LegendEncode = {};\n\n  const legendEncodeParams: LegendEncodeParams = {fieldOrDatumDef, model, channel, legendCmpt, legendType};\n\n  for (const part of ['labels', 'legend', 'title', 'symbols', 'gradient', 'entries']) {\n    const legendEncodingPart = guideEncodeEntry(legendEncoding[part] ?? {}, model);\n\n    const value =\n      part in legendEncodeRules\n        ? legendEncodeRules[part](legendEncodingPart, legendEncodeParams) // apply rule\n        : legendEncodingPart; // no rule -- just default values\n\n    if (value !== undefined && !isEmpty(value)) {\n      legendEncode[part] = {\n        ...(selections?.length && isFieldDef(fieldOrDatumDef)\n          ? {name: `${varName(fieldOrDatumDef.field)}_legend_${part}`}\n          : {}),\n        ...(selections?.length ? {interactive: !!selections} : {}),\n        update: value\n      };\n    }\n  }\n\n  if (!isEmpty(legendEncode)) {\n    legendCmpt.set('encode', legendEncode, !!legend?.encoding);\n  }\n\n  return legendCmpt;\n}\n\nfunction parseNonUnitLegend(model: Model) {\n  const {legends, resolve} = model.component;\n\n  for (const child of model.children) {\n    parseLegend(child);\n\n    for (const channel of keys(child.component.legends)) {\n      resolve.legend[channel] = parseGuideResolve(model.component.resolve, channel);\n\n      if (resolve.legend[channel] === 'shared') {\n        // If the resolve says shared (and has not been overridden)\n        // We will try to merge and see if there is a conflict\n\n        legends[channel] = mergeLegendComponent(legends[channel], child.component.legends[channel]);\n\n        if (!legends[channel]) {\n          // If merge returns nothing, there is a conflict so we cannot make the legend shared.\n          // Thus, mark legend as independent and remove the legend component.\n          resolve.legend[channel] = 'independent';\n          delete legends[channel];\n        }\n      }\n    }\n  }\n\n  for (const channel of keys(legends)) {\n    for (const child of model.children) {\n      if (!child.component.legends[channel]) {\n        // skip if the child does not have a particular legend\n        continue;\n      }\n\n      if (resolve.legend[channel] === 'shared') {\n        // After merging shared legend, make sure to remove legend from child\n        delete child.component.legends[channel];\n      }\n    }\n  }\n\n  return legends;\n}\n\nexport function mergeLegendComponent(mergedLegend: LegendComponent, childLegend: LegendComponent): LegendComponent {\n  if (!mergedLegend) {\n    return childLegend.clone();\n  }\n  const mergedOrient = mergedLegend.getWithExplicit('orient');\n  const childOrient = childLegend.getWithExplicit('orient');\n\n  if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n    // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n    // Cannot merge due to inconsistent orient\n    return undefined;\n  }\n\n  let typeMerged = false;\n  // Otherwise, let's merge\n  for (const prop of LEGEND_COMPONENT_PROPERTIES) {\n    const mergedValueWithExplicit = mergeValuesWithExplicit<LegendComponentProps, any>(\n      mergedLegend.getWithExplicit(prop),\n      childLegend.getWithExplicit(prop),\n      prop,\n      'legend',\n\n      // Tie breaker function\n      (v1: Explicit<any>, v2: Explicit<any>): any => {\n        switch (prop) {\n          case 'symbolType':\n            return mergeSymbolType(v1, v2);\n          case 'title':\n            return mergeTitleComponent(v1, v2);\n          case 'type':\n            // There are only two types. If we have different types, then prefer symbol over gradient.\n            typeMerged = true;\n            return makeImplicit('symbol');\n        }\n        return defaultTieBreaker<LegendComponentProps, any>(v1, v2, prop, 'legend');\n      }\n    );\n    mergedLegend.setWithExplicit(prop, mergedValueWithExplicit);\n  }\n  if (typeMerged) {\n    if (mergedLegend.implicit?.encode?.gradient) {\n      deleteNestedProperty(mergedLegend.implicit, ['encode', 'gradient']);\n    }\n    if (mergedLegend.explicit?.encode?.gradient) {\n      deleteNestedProperty(mergedLegend.explicit, ['encode', 'gradient']);\n    }\n  }\n\n  return mergedLegend;\n}\n\nfunction mergeSymbolType(st1: Explicit<string>, st2: Explicit<string>) {\n  if (st2.value === 'circle') {\n    // prefer \"circle\" over \"stroke\"\n    return st2;\n  }\n  return st1;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {Config} from '../../config';\nimport {LEGEND_SCALE_CHANNELS, SIGNAL_LEGEND_PROP_INDEX} from '../../legend';\nimport {keys, replaceAll, stringify, vals} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {Model} from '../model';\nimport {LegendComponent} from './component';\nimport {mergeLegendComponent} from './parse';\n\nfunction setLegendEncode(\n  legend: VgLegend,\n  part: keyof LegendEncode,\n  vgProp: VgEncodeChannel,\n  vgRef: VgValueRef | VgValueRef[]\n) {\n  legend.encode = legend.encode ?? {};\n  legend.encode[part] = legend.encode[part] ?? {};\n  legend.encode[part].update = legend.encode[part].update ?? {};\n  // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n  (legend.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleLegends(model: Model): VgLegend[] {\n  const legendComponentIndex = model.component.legends;\n  const legendByDomain: Record<string, LegendComponent[]> = {};\n\n  for (const channel of keys(legendComponentIndex)) {\n    const scaleComponent = model.getScaleComponent(channel);\n    const domainHash = stringify(scaleComponent.get('domains'));\n    if (legendByDomain[domainHash]) {\n      for (const mergedLegendComponent of legendByDomain[domainHash]) {\n        const merged = mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n        if (!merged) {\n          // If cannot merge, need to add this legend separately\n          legendByDomain[domainHash].push(legendComponentIndex[channel]);\n        }\n      }\n    } else {\n      legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n    }\n  }\n\n  const legends = vals(legendByDomain)\n    .flat()\n    .map(l => assembleLegend(l, model.config))\n    .filter(l => l !== undefined);\n\n  return legends;\n}\n\nexport function assembleLegend(legendCmpt: LegendComponent, config: Config) {\n  const {disable, labelExpr, selections, ...legend} = legendCmpt.combine();\n\n  if (disable) {\n    return undefined;\n  }\n\n  if (config.aria === false && legend.aria == undefined) {\n    legend.aria = false;\n  }\n\n  if (legend.encode?.symbols) {\n    const out = legend.encode.symbols.update;\n    if (out.fill && out.fill['value'] !== 'transparent' && !out.stroke && !legend.stroke) {\n      // For non color channel's legend, we need to override symbol stroke config from Vega config if stroke channel is not used.\n      out.stroke = {value: 'transparent'};\n    }\n\n    // Remove properties that the legend is encoding.\n    for (const property of LEGEND_SCALE_CHANNELS) {\n      if (legend[property]) {\n        delete out[property];\n      }\n    }\n  }\n\n  if (!legend.title) {\n    // title schema doesn't include null, ''\n    delete legend.title;\n  }\n\n  if (labelExpr !== undefined) {\n    let expr = labelExpr;\n    if (legend.encode?.labels?.update && isSignalRef(legend.encode.labels.update.text)) {\n      expr = replaceAll(labelExpr, 'datum.label', legend.encode.labels.update.text.signal);\n    }\n    setLegendEncode(legend, 'labels', 'text', {signal: expr});\n  }\n\n  for (const prop in legend) {\n    const propValue = legend[prop];\n    if (isSignalRef(propValue)) {\n      const propIndex = SIGNAL_LEGEND_PROP_INDEX[prop];\n      if (propIndex) {\n        const {vgProp, part} = propIndex;\n        setLegendEncode(legend, part, vgProp, propValue);\n        delete legend[prop];\n      }\n    }\n  }\n\n  return legend;\n}\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {contains} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\n\nexport function assembleProjections(model: Model): VgProjection[] {\n  if (isLayerModel(model) || isConcatModel(model)) {\n    return assembleProjectionsForModelAndChildren(model);\n  } else {\n    return assembleProjectionForModel(model);\n  }\n}\n\nexport function assembleProjectionsForModelAndChildren(model: Model): VgProjection[] {\n  return model.children.reduce((projections, child) => {\n    return projections.concat(child.assembleProjections());\n  }, assembleProjectionForModel(model));\n}\n\nexport function assembleProjectionForModel(model: Model): VgProjection[] {\n  const component = model.component.projection;\n  if (!component || component.merged) {\n    return [];\n  }\n\n  const projection = component.combine();\n  const {name} = projection; // we need to extract name so that it is always present in the output and pass TS type validation\n\n  if (!component.data) {\n    // generate custom projection, no automatic fitting\n    return [\n      {\n        name,\n        // translate to center by default\n        ...{translate: {signal: '[width / 2, height / 2]'}},\n        // parameters, overwrite default translate if specified\n        ...projection\n      }\n    ];\n  } else {\n    // generate projection that uses extent fitting\n    const size: SignalRef = {\n      signal: `[${component.size.map(ref => ref.signal).join(', ')}]`\n    };\n\n    const fits: string[] = component.data.reduce((sources, data) => {\n      const source: string = isSignalRef(data) ? data.signal : `data('${model.lookupDataSource(data)}')`;\n      if (!contains(sources, source)) {\n        // build a unique list of sources\n        sources.push(source);\n      }\n      return sources;\n    }, []);\n\n    if (fits.length <= 0) {\n      throw new Error(\"Projection's fit didn't find any data sources\");\n    }\n\n    return [\n      {\n        name,\n        size,\n        fit: {\n          signal: fits.length > 1 ? `[${fits.join(', ')}]` : fits[0]\n        },\n        ...projection\n      }\n    ];\n  }\n}\n","import {BaseProjection, SignalRef, Vector2} from 'vega';\nimport {ProjectionType} from './vega.schema';\n\nexport interface Projection extends BaseProjection {\n  /**\n   * The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n   *\n   * __Default value:__ `mercator`\n   */\n  type?: ProjectionType | SignalRef; // Re-declare to override docs\n\n  /**\n   * The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.\n   */\n  scale?: number | SignalRef; // Re-declare to override docs\n\n  /**\n   * The projection’s translation offset as a two-element array `[tx, ty]`.\n   */\n  translate?: Vector2<number> | SignalRef; // TODO: figure what's VL default value\n}\n\n/**\n * Any property of Projection can be in config\n */\nexport type ProjectionConfig = Projection;\n\nexport const PROJECTION_PROPERTIES: (keyof Projection)[] = [\n  'type',\n  'clipAngle',\n  'clipExtent',\n  'center',\n  'rotate',\n  'precision',\n  'reflectX',\n  'reflectY',\n  'coefficient',\n  'distance',\n  'fraction',\n  'lobes',\n  'parallel',\n  'radius',\n  'ratio',\n  'spacing',\n  'tilt'\n];\n","import {SignalRef} from 'vega';\nimport {Projection} from '../../projection';\nimport {Projection as VgProjection} from 'vega';\nimport {Split} from '../split';\n\nexport class ProjectionComponent extends Split<VgProjection> {\n  public merged = false;\n\n  constructor(\n    name: string,\n    public specifiedProjection: Projection,\n    public size: SignalRef[],\n    public data: (string | SignalRef)[]\n  ) {\n    super(\n      {...specifiedProjection}, // all explicit properties of projection\n      {name} // name as initial implicit property\n    );\n  }\n\n  /**\n   * Whether the projection parameters should fit provided data.\n   */\n  public get isFit() {\n    return !!this.data;\n  }\n}\n","import {SignalRef} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {MAIN} from '../../data';\nimport {PROJECTION_PROPERTIES} from '../../projection';\nimport {GEOJSON} from '../../type';\nimport {duplicate, every, stringify} from '../../util';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {ProjectionComponent} from './component';\n\nexport function parseProjection(model: Model) {\n  model.component.projection = isUnitModel(model) ? parseUnitProjection(model) : parseNonUnitProjections(model);\n}\n\nfunction parseUnitProjection(model: UnitModel): ProjectionComponent {\n  if (model.hasProjection) {\n    const proj = model.specifiedProjection;\n    const fit = !(proj && (proj.scale != null || proj.translate != null));\n    const size = fit ? [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')] : undefined;\n    const data = fit ? gatherFitData(model) : undefined;\n\n    return new ProjectionComponent(\n      model.projectionName(true),\n      {\n        ...(model.config.projection ?? {}),\n        ...(proj ?? {})\n      },\n      size,\n      data\n    );\n  }\n\n  return undefined;\n}\n\nfunction gatherFitData(model: UnitModel) {\n  const data: (SignalRef | string)[] = [];\n\n  const {encoding} = model;\n\n  for (const posssiblePair of [\n    [LONGITUDE, LATITUDE],\n    [LONGITUDE2, LATITUDE2]\n  ]) {\n    if (getFieldOrDatumDef(encoding[posssiblePair[0]]) || getFieldOrDatumDef(encoding[posssiblePair[1]])) {\n      data.push({\n        signal: model.getName(`geojson_${data.length}`)\n      });\n    }\n  }\n\n  if (model.channelHasField(SHAPE) && model.typedFieldDef(SHAPE).type === GEOJSON) {\n    data.push({\n      signal: model.getName(`geojson_${data.length}`)\n    });\n  }\n\n  if (data.length === 0) {\n    // main source is geojson, so we can just use that\n    data.push(model.requestDataName(MAIN));\n  }\n\n  return data;\n}\n\nfunction mergeIfNoConflict(first: ProjectionComponent, second: ProjectionComponent): ProjectionComponent {\n  const allPropertiesShared = every(PROJECTION_PROPERTIES, prop => {\n    // neither has the property\n    if (!hasOwnProperty(first.explicit, prop) && !hasOwnProperty(second.explicit, prop)) {\n      return true;\n    }\n    // both have property and an equal value for property\n    if (\n      hasOwnProperty(first.explicit, prop) &&\n      hasOwnProperty(second.explicit, prop) &&\n      // some properties might be signals or objects and require hashing for comparison\n      stringify(first.get(prop)) === stringify(second.get(prop))\n    ) {\n      return true;\n    }\n    return false;\n  });\n\n  const size = stringify(first.size) === stringify(second.size);\n  if (size) {\n    if (allPropertiesShared) {\n      return first;\n    } else if (stringify(first.explicit) === stringify({})) {\n      return second;\n    } else if (stringify(second.explicit) === stringify({})) {\n      return first;\n    }\n  }\n\n  // if all properties don't match, let each unit spec have its own projection\n  return null;\n}\n\nfunction parseNonUnitProjections(model: Model): ProjectionComponent {\n  if (model.children.length === 0) {\n    return undefined;\n  }\n\n  let nonUnitProjection: ProjectionComponent;\n\n  // parse all children first\n  for (const child of model.children) {\n    parseProjection(child);\n  }\n\n  // analyze parsed projections, attempt to merge\n  const mergable = every(model.children, child => {\n    const projection = child.component.projection;\n    if (!projection) {\n      // child layer does not use a projection\n      return true;\n    } else if (!nonUnitProjection) {\n      // cached 'projection' is null, cache this one\n      nonUnitProjection = projection;\n      return true;\n    } else {\n      const merge = mergeIfNoConflict(nonUnitProjection, projection);\n      if (merge) {\n        nonUnitProjection = merge;\n      }\n      return !!merge;\n    }\n  });\n\n  // if cached one and all other children share the same projection,\n  if (nonUnitProjection && mergable) {\n    // so we can elevate it to the layer level\n    const name = model.projectionName(true);\n    const modelProjection = new ProjectionComponent(\n      name,\n      nonUnitProjection.specifiedProjection,\n      nonUnitProjection.size,\n      duplicate(nonUnitProjection.data)\n    );\n\n    // rename and assign all others as merged\n    for (const child of model.children) {\n      const projection = child.component.projection;\n      if (projection) {\n        if (projection.isFit) {\n          modelProjection.data.push(...child.component.projection.data);\n        }\n        child.renameProjection(projection.get('name'), name);\n        projection.merged = true;\n      }\n    }\n\n    return modelProjection;\n  }\n\n  return undefined;\n}\n","import {BinTransform as VgBinTransform, Transforms as VgTransform} from 'vega';\nimport {isString} from 'vega-util';\nimport {BinParams, binToString, isBinning, isSelectionExtent} from '../../bin';\nimport {Channel} from '../../channel';\nimport {binRequiresRange, FieldName, isTypedFieldDef, normalizeBin, TypedFieldDef, vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {BinTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, keys, replacePathInField, unique, vals, varName} from '../../util';\nimport {binFormatExpression} from '../format';\nimport {isUnitModel, Model, ModelWithField} from '../model';\nimport {parseSelectionBinExtent} from '../selection/parse';\nimport {DataFlowNode} from './dataflow';\n\nfunction rangeFormula(model: ModelWithField, fieldDef: TypedFieldDef<string>, channel: Channel, config: Config) {\n  if (binRequiresRange(fieldDef, channel)) {\n    // read format from axis or legend, if there is no format then use config.numberFormat\n\n    const guide = isUnitModel(model) ? model.axis(channel) ?? model.legend(channel) ?? {} : {};\n\n    const startField = vgField(fieldDef, {expr: 'datum'});\n    const endField = vgField(fieldDef, {expr: 'datum', binSuffix: 'end'});\n\n    return {\n      formulaAs: vgField(fieldDef, {binSuffix: 'range', forAs: true}),\n      formula: binFormatExpression(startField, endField, guide.format, guide.formatType, config)\n    };\n  }\n  return {};\n}\n\nfunction binKey(bin: BinParams, field: string) {\n  return `${binToString(bin)}_${field}`;\n}\n\nfunction getSignalsFromModel(model: Model, key: string) {\n  return {\n    signal: model.getName(`${key}_bins`),\n    extentSignal: model.getName(`${key}_extent`)\n  };\n}\n\nexport function getBinSignalName(model: Model, field: string, bin: boolean | BinParams) {\n  const normalizedBin = normalizeBin(bin, undefined) ?? {};\n  const key = binKey(normalizedBin, field);\n  return model.getName(`${key}_bins`);\n}\n\nfunction isBinTransform(t: TypedFieldDef<string> | BinTransform): t is BinTransform {\n  return 'as' in t;\n}\n\nfunction createBinComponent(t: TypedFieldDef<string> | BinTransform, bin: boolean | BinParams, model: Model) {\n  let as: [string, string];\n  let span: string;\n\n  if (isBinTransform(t)) {\n    as = isString(t.as) ? [t.as, `${t.as}_end`] : [t.as[0], t.as[1]];\n  } else {\n    as = [vgField(t, {forAs: true}), vgField(t, {binSuffix: 'end', forAs: true})];\n  }\n\n  const normalizedBin = {...normalizeBin(bin, undefined)};\n  const key = binKey(normalizedBin, t.field);\n  const {signal, extentSignal} = getSignalsFromModel(model, key);\n\n  if (isSelectionExtent(normalizedBin.extent)) {\n    const ext = normalizedBin.extent;\n    const selName = ext.selection;\n    span = parseSelectionBinExtent(model.getSelectionComponent(varName(selName), selName), ext);\n    delete normalizedBin.extent; // Vega-Lite selection extent map to Vega's span property.\n  }\n\n  const binComponent: BinComponent = {\n    bin: normalizedBin,\n    field: t.field,\n    as: [as],\n    ...(signal ? {signal} : {}),\n    ...(extentSignal ? {extentSignal} : {}),\n    ...(span ? {span} : {})\n  };\n\n  return {key, binComponent};\n}\n\nexport interface BinComponent {\n  bin: BinParams;\n  field: FieldName;\n  extentSignal?: string;\n  signal?: string;\n  span?: string;\n\n  /** Pairs of strings of the names of start and end signals */\n  as: [string, string][];\n\n  // Range Formula\n\n  formula?: string;\n  formulaAs?: string;\n}\n\nexport class BinNode extends DataFlowNode {\n  public clone() {\n    return new BinNode(null, duplicate(this.bins));\n  }\n\n  constructor(parent: DataFlowNode, private bins: Dict<BinComponent>) {\n    super(parent);\n  }\n\n  public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n    const bins = model.reduceFieldDef((binComponentIndex: Dict<BinComponent>, fieldDef, channel) => {\n      if (isTypedFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n        const {key, binComponent} = createBinComponent(fieldDef, fieldDef.bin, model);\n        binComponentIndex[key] = {\n          ...binComponent,\n          ...binComponentIndex[key],\n          ...rangeFormula(model, fieldDef, channel, model.config)\n        };\n      }\n      return binComponentIndex;\n    }, {} as Dict<BinComponent>);\n\n    if (isEmpty(bins)) {\n      return null;\n    }\n\n    return new BinNode(parent, bins);\n  }\n\n  /**\n   * Creates a bin node from BinTransform.\n   * The optional parameter should provide\n   */\n  public static makeFromTransform(parent: DataFlowNode, t: BinTransform, model: Model) {\n    const {key, binComponent} = createBinComponent(t, t.bin, model);\n    return new BinNode(parent, {\n      [key]: binComponent\n    });\n  }\n\n  /**\n   * Merge bin nodes. This method either integrates the bin config from the other node\n   * or if this node already has a bin config, renames the corresponding signal in the model.\n   */\n  public merge(other: BinNode, renameSignal: (s1: string, s2: string) => void) {\n    for (const key of keys(other.bins)) {\n      if (key in this.bins) {\n        renameSignal(other.bins[key].signal, this.bins[key].signal);\n        // Ensure that we don't have duplicate names for signal pairs\n        this.bins[key].as = unique([...this.bins[key].as, ...other.bins[key].as], hash);\n      } else {\n        this.bins[key] = other.bins[key];\n      }\n    }\n\n    for (const child of other.children) {\n      other.removeChild(child);\n      child.parent = this;\n    }\n    other.remove();\n  }\n\n  public producedFields() {\n    return new Set(\n      vals(this.bins)\n        .map(c => c.as)\n        .flat(2)\n    );\n  }\n\n  public dependentFields() {\n    return new Set(vals(this.bins).map(c => c.field));\n  }\n\n  public hash() {\n    return `Bin ${hash(this.bins)}`;\n  }\n\n  public assemble(): VgTransform[] {\n    return vals(this.bins).flatMap(bin => {\n      const transform: VgTransform[] = [];\n\n      const [binAs, ...remainingAs] = bin.as;\n      const {extent, ...params} = bin.bin;\n      const binTrans: VgBinTransform = {\n        type: 'bin',\n        field: replacePathInField(bin.field),\n        as: binAs,\n        signal: bin.signal,\n        ...(!isSelectionExtent(extent) ? {extent} : {extent: null}),\n        ...(bin.span ? {span: {signal: `span(${bin.span})`}} : {}),\n        ...params\n      };\n\n      if (!extent && bin.extentSignal) {\n        transform.push({\n          type: 'extent',\n          field: replacePathInField(bin.field),\n          signal: bin.extentSignal\n        });\n        binTrans.extent = {signal: bin.extentSignal};\n      }\n\n      transform.push(binTrans);\n\n      for (const as of remainingAs) {\n        for (let i = 0; i < 2; i++) {\n          transform.push({\n            type: 'formula',\n            expr: vgField({field: binAs[i]}, {expr: 'datum'}),\n            as: as[i]\n          });\n        }\n      }\n\n      if (bin.formula) {\n        transform.push({\n          type: 'formula',\n          expr: bin.formula,\n          as: bin.formulaAs\n        });\n      }\n      return transform;\n    });\n  }\n}\n","import {\n  Data,\n  DataFormat,\n  DataFormatType,\n  isGenerator,\n  isInlineData,\n  isNamedData,\n  isSphereGenerator,\n  isUrlData\n} from '../../data';\nimport {contains, isEmpty, omit} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataFlowNode} from './dataflow';\n\nexport class SourceNode extends DataFlowNode {\n  private _data: Partial<VgData>;\n\n  private _name: string;\n\n  private _generator: boolean;\n\n  constructor(data: Data) {\n    super(null); // source cannot have parent\n\n    data = data ?? {name: 'source'};\n    let format;\n\n    if (!isGenerator(data)) {\n      format = data.format ? {...omit(data.format, ['parse'])} : ({} as DataFormat);\n    }\n\n    if (isInlineData(data)) {\n      this._data = {values: data.values};\n    } else if (isUrlData(data)) {\n      this._data = {url: data.url};\n\n      if (!format.type) {\n        // Extract extension from URL using snippet from\n        // http://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript\n        let defaultExtension = /(?:\\.([^.]+))?$/.exec(data.url)[1];\n        if (!contains(['json', 'csv', 'tsv', 'dsv', 'topojson'], defaultExtension)) {\n          defaultExtension = 'json';\n        }\n\n        // defaultExtension has type string but we ensure that it is DataFormatType above\n        format.type = defaultExtension as DataFormatType;\n      }\n    } else if (isSphereGenerator(data)) {\n      // hardwire GeoJSON sphere data into output specification\n      this._data = {values: [{type: 'Sphere'}]};\n    } else if (isNamedData(data) || isGenerator(data)) {\n      this._data = {};\n    }\n\n    // set flag to check if generator\n    this._generator = isGenerator(data);\n\n    // any dataset can be named\n    if (data.name) {\n      this._name = data.name;\n    }\n\n    if (format && !isEmpty(format)) {\n      this._data.format = format;\n    }\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields(): undefined {\n    return undefined; // we don't know what this source produces\n  }\n\n  get data() {\n    return this._data;\n  }\n\n  public hasName(): boolean {\n    return !!this._name;\n  }\n\n  get isGenerator() {\n    return this._generator;\n  }\n  get dataName() {\n    return this._name;\n  }\n\n  set dataName(name: string) {\n    this._name = name;\n  }\n\n  set parent(parent: DataFlowNode) {\n    throw new Error('Source nodes have to be roots.');\n  }\n\n  public remove() {\n    throw new Error('Source nodes are roots and cannot be removed.');\n  }\n\n  public hash(): string | number {\n    throw new Error('Cannot hash sources');\n  }\n\n  public assemble(): VgData {\n    return {\n      name: this._name,\n      ...this._data,\n      transform: []\n    };\n  }\n}\n","import {entries, uniqueId} from '../../util';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {SourceNode} from './source';\n\n/**\n * Print debug information for dataflow tree.\n */\nexport function debug(node: DataFlowNode) {\n  console.log(\n    `${(node.constructor as any).name}${node.debugName ? `(${node.debugName})` : ''} -> ${node.children.map(c => {\n      return `${(c.constructor as any).name}${c.debugName ? ` (${c.debugName})` : ''}`;\n    })}`\n  );\n  console.log(node);\n  node.children.forEach(debug);\n}\n\n/**\n * Print the dataflow tree as graphviz.\n *\n * Render the output in http://viz-js.com/.\n */\nexport function draw(roots: readonly DataFlowNode[]) {\n  // check the graph before printing it since the logic below assumes a consistent graph\n  checkLinks(roots);\n\n  const nodes: Record<string, {id: string | number; label: string; hash: string | number}> = {};\n  const edges: [string, string][] = [];\n\n  function getId(node: DataFlowNode) {\n    let id = node['__uniqueid'];\n    if (id === undefined) {\n      id = uniqueId();\n      node['__uniqueid'] = id;\n    }\n    return id;\n  }\n\n  function getLabel(node: DataFlowNode) {\n    const out = [(node.constructor as any).name.slice(0, -4)];\n\n    if (node.debugName) {\n      out.push(`<i>${node.debugName}</i>`);\n    } else if (node instanceof SourceNode) {\n      if (node.data.name || node.data.url) {\n        out.push(`<i>${node.data.name ?? node.data.url}</i>`);\n      }\n    }\n\n    const dep = node.dependentFields();\n    if (dep?.size) {\n      out.push(`<font color=\"grey\" point-size=\"10\">IN:</font> ${[...node.dependentFields()].join(', ')}`);\n    }\n    const prod = node.producedFields();\n    if (prod?.size) {\n      out.push(`<font color=\"grey\" point-size=\"10\">OUT:</font> ${[...node.producedFields()].join(', ')}`);\n    }\n    if (node instanceof OutputNode) {\n      out.push(`<font color=\"grey\" point-size=\"10\">required:</font> ${node.isRequired()}`);\n    }\n    return out.join('<br/>');\n  }\n\n  function collector(node: DataFlowNode) {\n    const id = getId(node);\n    nodes[id] = {\n      id: id,\n      label: getLabel(node),\n      hash:\n        node instanceof SourceNode\n          ? node.data.url ?? node.data.name ?? node.debugName\n          : String(node.hash()).replace(/\"/g, '')\n    };\n\n    for (const child of node.children) {\n      edges.push([id, getId(child)]);\n      collector(child);\n    }\n  }\n\n  for (const n of roots) {\n    collector(n);\n  }\n\n  const dot = `digraph DataFlow {\n  rankdir = TB;\n  node [shape=record]\n  ${entries(nodes)\n    .map(\n      ({key, value}) => `  \"${key}\" [\n    label = <${value.label}>;\n    tooltip = \"[${value.id}]&#010;${value.hash}\"\n  ]`\n    )\n    .join('\\n')}\n\n  ${edges.map(([source, target]) => `\"${source}\" -> \"${target}\"`).join(' ')}\n}`;\n\n  console.log(dot);\n\n  return dot;\n}\n\n/**\n * Iterates over a dataflow graph and checks whether all links are consistent.\n */\nexport function checkLinks(nodes: readonly DataFlowNode[]): boolean {\n  for (const node of nodes) {\n    for (const child of node.children) {\n      if (child.parent !== node) {\n        console.error('Dataflow graph is inconsistent.', node, child);\n        return false;\n      }\n    }\n\n    if (!checkLinks(node.children)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import {GraticuleTransform as VgGraticuleTransform} from 'vega';\nimport {GraticuleParams} from '../../data';\nimport {hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\nexport class GraticuleNode extends DataFlowNode {\n  public clone() {\n    return new GraticuleNode(null, this.params);\n  }\n\n  constructor(parent: DataFlowNode, private params: true | GraticuleParams) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields(): undefined {\n    return undefined; // there should never be a node before graticule\n  }\n\n  public hash() {\n    return `Graticule ${hash(this.params)}`;\n  }\n\n  public assemble(): VgGraticuleTransform {\n    return {\n      type: 'graticule',\n      ...(this.params === true ? {} : this.params)\n    };\n  }\n}\n","import {SequenceParams} from '../../data';\nimport {hash} from '../../util';\nimport {SequenceTransform as VgSequenceTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class SequenceNode extends DataFlowNode {\n  public clone() {\n    return new SequenceNode(null, this.params);\n  }\n\n  constructor(parent: DataFlowNode, private params: SequenceParams) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields() {\n    return new Set([this.params.as ?? 'data']);\n  }\n\n  public hash() {\n    return `Hash ${hash(this.params)}`;\n  }\n\n  public assemble(): VgSequenceTransform {\n    return {\n      type: 'sequence',\n      ...this.params\n    };\n  }\n}\n","import {DataFlowNode} from './dataflow';\nimport {OptimizerFlags} from './optimizers';\nimport {SourceNode} from './source';\nimport {GraticuleNode} from './graticule';\nimport {SequenceNode} from './sequence';\n\n/**\n * Whether this dataflow node is the source of the dataflow that produces data i.e. a source or a generator.\n */\nexport function isDataSourceNode(node: DataFlowNode) {\n  return node instanceof SourceNode || node instanceof GraticuleNode || node instanceof SequenceNode;\n}\n\n/**\n * Abstract base class for BottomUpOptimizer and TopDownOptimizer.\n * Contains only mutation handling logic. Subclasses need to implement iteration logic.\n */\nabstract class OptimizerBase {\n  private _mutated: boolean;\n  constructor() {\n    this._mutated = false;\n  }\n  // Once true, _mutated is never set to false\n  public setMutated() {\n    this._mutated = true;\n  }\n\n  get mutatedFlag() {\n    return this._mutated;\n  }\n}\n\n/**\n * Starts from a node and runs the optimization function(the \"run\" method) upwards to the root,\n * depending on the continueFlag and mutatedFlag values returned by the optimization function.\n */\nexport abstract class BottomUpOptimizer extends OptimizerBase {\n  private _continue: boolean;\n\n  constructor() {\n    super();\n    this._continue = false;\n  }\n\n  public setContinue() {\n    this._continue = true;\n  }\n\n  get continueFlag() {\n    return this._continue;\n  }\n\n  get flags(): OptimizerFlags {\n    return {continueFlag: this.continueFlag, mutatedFlag: this.mutatedFlag};\n  }\n\n  set flags({continueFlag, mutatedFlag}: OptimizerFlags) {\n    if (continueFlag) {\n      this.setContinue();\n    }\n    if (mutatedFlag) {\n      this.setMutated();\n    }\n  }\n\n  public abstract run(node: DataFlowNode): OptimizerFlags;\n\n  /**\n   * Reset the state of the optimizer after it has completed a run from the bottom of the tree to the top.\n   */\n  public reset(): void {\n    // do nothing\n  }\n\n  public optimizeNextFromLeaves(node: DataFlowNode): boolean {\n    if (isDataSourceNode(node)) {\n      return false;\n    }\n    const next = node.parent;\n    const {continueFlag} = this.run(node);\n    if (continueFlag) {\n      this.optimizeNextFromLeaves(next);\n    }\n    return this.mutatedFlag;\n  }\n}\n\n/**\n * The optimizer function( the \"run\" method), is invoked on the given node and then continues recursively.\n */\nexport abstract class TopDownOptimizer extends OptimizerBase {\n  public abstract run(node: DataFlowNode): boolean;\n}\n","import {AggregateOp, AggregateTransform as VgAggregateTransform} from 'vega';\nimport {isArgmaxDef, isArgminDef} from '../../aggregate';\nimport {\n  Channel,\n  getPositionChannelFromLatLong,\n  getSecondaryRangeChannel,\n  isGeoPositionChannel,\n  isScaleChannel\n} from '../../channel';\nimport {binRequiresRange, FieldDef, hasBand, isTypedFieldDef, vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {AggregateTransform} from '../../transform';\nimport {Dict, duplicate, hash, keys, replacePathInField, setEqual} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\ntype Measures = Dict<Partial<Record<AggregateOp, Set<string>>>>;\n\nfunction addDimension(dims: Set<string>, channel: Channel, fieldDef: FieldDef<string>, model: ModelWithField) {\n  const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n  if (\n    isTypedFieldDef(fieldDef) &&\n    isUnitModel(model) &&\n    hasBand(channel, fieldDef, channelDef2, model.stack, model.markDef, model.config)\n  ) {\n    dims.add(vgField(fieldDef, {}));\n    dims.add(vgField(fieldDef, {suffix: 'end'}));\n\n    if (fieldDef.bin && binRequiresRange(fieldDef, channel)) {\n      dims.add(vgField(fieldDef, {binSuffix: 'range'}));\n    }\n  } else if (isGeoPositionChannel(channel)) {\n    const posChannel = getPositionChannelFromLatLong(channel);\n    dims.add(model.getName(posChannel));\n  } else {\n    dims.add(vgField(fieldDef));\n  }\n  return dims;\n}\n\nfunction mergeMeasures(parentMeasures: Measures, childMeasures: Measures) {\n  for (const field of keys(childMeasures)) {\n    // when we merge a measure, we either have to add an aggregation operator or even a new field\n    const ops = childMeasures[field];\n    for (const op of keys(ops)) {\n      if (field in parentMeasures) {\n        // add operator to existing measure field\n        parentMeasures[field][op] = new Set([...(parentMeasures[field][op] ?? []), ...ops[op]]);\n      } else {\n        parentMeasures[field] = {[op]: ops[op]};\n      }\n    }\n  }\n}\n\nexport class AggregateNode extends DataFlowNode {\n  public clone() {\n    return new AggregateNode(null, new Set(this.dimensions), duplicate(this.measures));\n  }\n\n  /**\n   * @param dimensions string set for dimensions\n   * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n   */\n  constructor(parent: DataFlowNode, private dimensions: Set<string>, private measures: Measures) {\n    super(parent);\n  }\n\n  get groupBy() {\n    return this.dimensions;\n  }\n\n  public static makeFromEncoding(parent: DataFlowNode, model: UnitModel): AggregateNode {\n    let isAggregate = false;\n    model.forEachFieldDef(fd => {\n      if (fd.aggregate) {\n        isAggregate = true;\n      }\n    });\n\n    const meas: Measures = {};\n    const dims = new Set<string>();\n\n    if (!isAggregate) {\n      // no need to create this node if the model has no aggregation\n      return null;\n    }\n\n    model.forEachFieldDef((fieldDef, channel) => {\n      const {aggregate, field} = fieldDef;\n      if (aggregate) {\n        if (aggregate === 'count') {\n          meas['*'] = meas['*'] ?? {};\n          meas['*']['count'] = new Set([vgField(fieldDef, {forAs: true})]);\n        } else {\n          if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n            const op = isArgminDef(aggregate) ? 'argmin' : 'argmax';\n            const argField = aggregate[op];\n            meas[argField] = meas[argField] ?? {};\n            meas[argField][op] = new Set([vgField({op, field: argField}, {forAs: true})]);\n          } else {\n            meas[field] = meas[field] ?? {};\n            meas[field][aggregate] = new Set([vgField(fieldDef, {forAs: true})]);\n          }\n\n          // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n          if (isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n            meas[field] = meas[field] ?? {};\n            meas[field]['min'] = new Set([vgField({field, aggregate: 'min'}, {forAs: true})]);\n            meas[field]['max'] = new Set([vgField({field, aggregate: 'max'}, {forAs: true})]);\n          }\n        }\n      } else {\n        addDimension(dims, channel, fieldDef, model);\n      }\n    });\n\n    if (dims.size + keys(meas).length === 0) {\n      return null;\n    }\n\n    return new AggregateNode(parent, dims, meas);\n  }\n\n  public static makeFromTransform(parent: DataFlowNode, t: AggregateTransform): AggregateNode {\n    const dims = new Set<string>();\n    const meas: Measures = {};\n\n    for (const s of t.aggregate) {\n      const {op, field, as} = s;\n      if (op) {\n        if (op === 'count') {\n          meas['*'] = meas['*'] ?? {};\n          meas['*']['count'] = new Set([as ? as : vgField(s, {forAs: true})]);\n        } else {\n          meas[field] = meas[field] ?? {};\n          meas[field][op] = new Set([as ? as : vgField(s, {forAs: true})]);\n        }\n      }\n    }\n\n    for (const s of t.groupby ?? []) {\n      dims.add(s);\n    }\n\n    if (dims.size + keys(meas).length === 0) {\n      return null;\n    }\n\n    return new AggregateNode(parent, dims, meas);\n  }\n\n  public merge(other: AggregateNode): boolean {\n    if (setEqual(this.dimensions, other.dimensions)) {\n      mergeMeasures(this.measures, other.measures);\n      return true;\n    } else {\n      log.debug('different dimensions, cannot merge');\n      return false;\n    }\n  }\n\n  public addDimensions(fields: readonly string[]) {\n    fields.forEach(this.dimensions.add, this.dimensions);\n  }\n\n  public dependentFields() {\n    return new Set([...this.dimensions, ...keys(this.measures)]);\n  }\n\n  public producedFields() {\n    const out = new Set<string>();\n\n    for (const field of keys(this.measures)) {\n      for (const op of keys(this.measures[field])) {\n        const m = this.measures[field][op];\n        if (m.size === 0) {\n          out.add(`${op}_${field}`);\n        } else {\n          m.forEach(out.add, out);\n        }\n      }\n    }\n\n    return out;\n  }\n\n  public hash() {\n    return `Aggregate ${hash({dimensions: this.dimensions, measures: this.measures})}`;\n  }\n\n  public assemble(): VgAggregateTransform {\n    const ops: AggregateOp[] = [];\n    const fields: string[] = [];\n    const as: string[] = [];\n\n    for (const field of keys(this.measures)) {\n      for (const op of keys(this.measures[field])) {\n        for (const alias of this.measures[field][op]) {\n          as.push(alias);\n          ops.push(op);\n          fields.push(field === '*' ? null : replacePathInField(field));\n        }\n      }\n    }\n\n    const result: VgAggregateTransform = {\n      type: 'aggregate',\n      groupby: [...this.dimensions].map(replacePathInField),\n      ops,\n      fields,\n      as\n    };\n\n    return result;\n  }\n}\n","import {AggregateOp} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {COLUMN, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {hasDiscreteDomain} from '../../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField} from '../../sort';\nimport {hash} from '../../util';\nimport {isVgRangeStep, VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {HEADER_CHANNELS, HEADER_TYPES} from '../header/component';\nimport {Model} from '../model';\nimport {assembleDomain, getFieldFromDomain} from '../scale/domain';\nimport {sortArrayIndexField} from './calculate';\nimport {DataFlowNode} from './dataflow';\n\ninterface ChildIndependentFieldsWithStep {\n  x?: string;\n  y?: string;\n}\n\ninterface FacetChannelInfo {\n  name: string;\n  fields: string[];\n  sortField?: EncodingSortField<string>;\n\n  sortIndexField?: string;\n}\n\n/**\n * A node that helps us track what fields we are faceting by.\n */\nexport class FacetNode extends DataFlowNode {\n  private readonly column: FacetChannelInfo;\n\n  private readonly row: FacetChannelInfo;\n\n  private readonly facet: FacetChannelInfo;\n\n  private readonly childModel: Model;\n\n  /**\n   * @param model The facet model.\n   * @param name The name that this facet source will have.\n   * @param data The source data for this facet data.\n   */\n  public constructor(\n    parent: DataFlowNode,\n    public readonly model: FacetModel,\n    public readonly name: string,\n    public data: string\n  ) {\n    super(parent);\n\n    for (const channel of FACET_CHANNELS) {\n      const fieldDef = model.facet[channel];\n      if (fieldDef) {\n        const {bin, sort} = fieldDef;\n        this[channel] = {\n          name: model.getName(`${channel}_domain`),\n          fields: [vgField(fieldDef), ...(isBinning(bin) ? [vgField(fieldDef, {binSuffix: 'end'})] : [])],\n          ...(isSortField(sort)\n            ? {sortField: sort}\n            : isArray(sort)\n            ? {sortIndexField: sortArrayIndexField(fieldDef, channel)}\n            : {})\n        };\n      }\n    }\n    this.childModel = model.child;\n  }\n\n  public hash() {\n    let out = `Facet`;\n\n    for (const channel of FACET_CHANNELS) {\n      if (this[channel]) {\n        out += ` ${channel.charAt(0)}:${hash(this[channel])}`;\n      }\n    }\n\n    return out;\n  }\n\n  get fields() {\n    const f: string[] = [];\n\n    for (const channel of FACET_CHANNELS) {\n      if (this[channel]?.fields) {\n        f.push(...this[channel].fields);\n      }\n    }\n    return f;\n  }\n\n  public dependentFields() {\n    const depFields = new Set<string>(this.fields);\n\n    for (const channel of FACET_CHANNELS) {\n      if (this[channel]) {\n        if (this[channel].sortField) {\n          depFields.add(this[channel].sortField.field);\n        }\n        if (this[channel].sortIndexField) {\n          depFields.add(this[channel].sortIndexField);\n        }\n      }\n    }\n\n    return depFields;\n  }\n\n  public producedFields() {\n    return new Set<string>(); // facet does not produce any new fields\n  }\n\n  /**\n   * The name to reference this source is its name.\n   */\n  public getSource() {\n    return this.name;\n  }\n\n  private getChildIndependentFieldsWithStep() {\n    const childIndependentFieldsWithStep: ChildIndependentFieldsWithStep = {};\n\n    for (const channel of POSITION_SCALE_CHANNELS) {\n      const childScaleComponent = this.childModel.component.scales[channel];\n      if (childScaleComponent && !childScaleComponent.merged) {\n        // independent scale\n        const type = childScaleComponent.get('type');\n        const range = childScaleComponent.get('range');\n\n        if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n          const domain = assembleDomain(this.childModel, channel);\n          const field = getFieldFromDomain(domain);\n          if (field) {\n            childIndependentFieldsWithStep[channel] = field;\n          } else {\n            log.warn(`Unknown field for ${channel}. Cannot calculate view size.`);\n          }\n        }\n      }\n    }\n\n    return childIndependentFieldsWithStep;\n  }\n\n  private assembleRowColumnHeaderData(\n    channel: 'row' | 'column' | 'facet',\n    crossedDataName: string,\n    childIndependentFieldsWithStep: ChildIndependentFieldsWithStep\n  ): VgData {\n    const childChannel = {row: 'y', column: 'x'}[channel];\n\n    const fields: string[] = [];\n    const ops: AggregateOp[] = [];\n    const as: string[] = [];\n\n    if (childIndependentFieldsWithStep && childIndependentFieldsWithStep[childChannel]) {\n      if (crossedDataName) {\n        // If there is a crossed data, calculate max\n        fields.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n\n        ops.push('max');\n      } else {\n        // If there is no crossed data, just calculate distinct\n        fields.push(childIndependentFieldsWithStep[childChannel]);\n        ops.push('distinct');\n      }\n      // Although it is technically a max, just name it distinct so it's easier to refer to it\n      as.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n    }\n\n    const {sortField, sortIndexField} = this[channel];\n    if (sortField) {\n      const {op = DEFAULT_SORT_OP, field} = sortField;\n      fields.push(field);\n      ops.push(op);\n      as.push(vgField(sortField, {forAs: true}));\n    } else if (sortIndexField) {\n      fields.push(sortIndexField);\n      ops.push('max');\n      as.push(sortIndexField);\n    }\n\n    return {\n      name: this[channel].name,\n      // Use data from the crossed one if it exist\n      source: crossedDataName ?? this.data,\n      transform: [\n        {\n          type: 'aggregate',\n          groupby: this[channel].fields,\n          ...(fields.length\n            ? {\n                fields,\n                ops,\n                as\n              }\n            : {})\n        }\n      ]\n    };\n  }\n\n  private assembleFacetHeaderData(childIndependentFieldsWithStep: ChildIndependentFieldsWithStep) {\n    const {columns} = this.model.layout;\n    const {layoutHeaders} = this.model.component;\n    const data: VgData[] = [];\n\n    const hasSharedAxis: {row?: true; column?: true} = {};\n    for (const headerChannel of HEADER_CHANNELS) {\n      for (const headerType of HEADER_TYPES) {\n        const headers = (layoutHeaders[headerChannel] && layoutHeaders[headerChannel][headerType]) ?? [];\n        for (const header of headers) {\n          if (header.axes?.length > 0) {\n            hasSharedAxis[headerChannel] = true;\n            break;\n          }\n        }\n      }\n\n      if (hasSharedAxis[headerChannel]) {\n        const cardinality = `length(data(\"${this.facet.name}\"))`;\n\n        const stop =\n          headerChannel === 'row'\n            ? columns\n              ? {signal: `ceil(${cardinality} / ${columns})`}\n              : 1\n            : columns\n            ? {signal: `min(${cardinality}, ${columns})`}\n            : {signal: cardinality};\n\n        data.push({\n          name: `${this.facet.name}_${headerChannel}`,\n          transform: [\n            {\n              type: 'sequence',\n              start: 0,\n              stop\n            }\n          ]\n        });\n      }\n    }\n\n    const {row, column} = hasSharedAxis;\n\n    if (row || column) {\n      data.unshift(this.assembleRowColumnHeaderData('facet', null, childIndependentFieldsWithStep));\n    }\n\n    return data;\n  }\n\n  public assemble() {\n    const data: VgData[] = [];\n    let crossedDataName = null;\n    const childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n\n    const {column, row, facet} = this;\n\n    if (column && row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n      // Need to create a cross dataset to correctly calculate cardinality\n      crossedDataName = `cross_${this.column.name}_${this.row.name}`;\n\n      const fields: string[] = [].concat(\n        childIndependentFieldsWithStep.x ?? [],\n        childIndependentFieldsWithStep.y ?? []\n      );\n      const ops = fields.map((): AggregateOp => 'distinct');\n\n      data.push({\n        name: crossedDataName,\n        source: this.data,\n        transform: [\n          {\n            type: 'aggregate',\n            groupby: this.fields,\n            fields,\n            ops\n          }\n        ]\n      });\n    }\n\n    for (const channel of [COLUMN, ROW]) {\n      if (this[channel]) {\n        data.push(this.assembleRowColumnHeaderData(channel, crossedDataName, childIndependentFieldsWithStep));\n      }\n    }\n\n    if (facet) {\n      const facetData = this.assembleFacetHeaderData(childIndependentFieldsWithStep);\n      if (facetData) {\n        data.push(...facetData);\n      }\n    }\n\n    return data;\n  }\n}\n","import {FormulaTransform as VgFormulaTransform, SignalRef} from 'vega';\nimport {isNumber, isString} from 'vega-util';\nimport {AncestorParse} from '.';\nimport {isMinMaxOp} from '../../aggregate';\nimport {getMainRangeChannel, SingleDefChannel} from '../../channel';\nimport {\n  isFieldDef,\n  isFieldOrDatumDefForTimeFormat,\n  isScaleFieldDef,\n  isTypedFieldDef,\n  TypedFieldDef\n} from '../../channeldef';\nimport {isGenerator, Parse} from '../../data';\nimport {DateTime, isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {forEachLeaf} from '../../logical';\nimport {isPathMark} from '../../mark';\nimport {isFieldEqualPredicate, isFieldOneOfPredicate, isFieldPredicate, isFieldRangePredicate} from '../../predicate';\nimport {isSortField} from '../../sort';\nimport {FilterTransform} from '../../transform';\nimport {accessPathDepth, accessPathWithDatum, Dict, duplicate, hash, keys, removePathFromField} from '../../util';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {Split} from '../split';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * Remove quotes from a string.\n */\nfunction unquote(pattern: string) {\n  if (\n    (pattern[0] === \"'\" && pattern[pattern.length - 1] === \"'\") ||\n    (pattern[0] === '\"' && pattern[pattern.length - 1] === '\"')\n  ) {\n    return pattern.slice(1, -1);\n  }\n  return pattern;\n}\n\n/**\n * @param field The field.\n * @param parse What to parse the field as.\n */\nfunction parseExpression(field: string, parse: string): string {\n  const f = accessPathWithDatum(field);\n  if (parse === 'number') {\n    return `toNumber(${f})`;\n  } else if (parse === 'boolean') {\n    return `toBoolean(${f})`;\n  } else if (parse === 'string') {\n    return `toString(${f})`;\n  } else if (parse === 'date') {\n    return `toDate(${f})`;\n  } else if (parse === 'flatten') {\n    return f;\n  } else if (parse.indexOf('date:') === 0) {\n    const specifier = unquote(parse.slice(5, parse.length));\n    return `timeParse(${f},'${specifier}')`;\n  } else if (parse.indexOf('utc:') === 0) {\n    const specifier = unquote(parse.slice(4, parse.length));\n    return `utcParse(${f},'${specifier}')`;\n  } else {\n    log.warn(log.message.unrecognizedParse(parse));\n    return null;\n  }\n}\n\nexport function getImplicitFromFilterTransform(transform: FilterTransform) {\n  const implicit: Dict<string> = {};\n  forEachLeaf(transform.filter, filter => {\n    if (isFieldPredicate(filter)) {\n      // Automatically add a parse node for filters with filter objects\n      let val: string | number | boolean | DateTime | SignalRef = null;\n\n      // For EqualFilter, just use the equal property.\n      // For RangeFilter and OneOfFilter, all array members should have\n      // the same type, so we only use the first one.\n      if (isFieldEqualPredicate(filter)) {\n        val = filter.equal;\n      } else if (isFieldRangePredicate(filter)) {\n        val = filter.range[0];\n      } else if (isFieldOneOfPredicate(filter)) {\n        val = (filter.oneOf ?? filter['in'])[0];\n      } // else -- for filter expression, we can't infer anything\n      if (val) {\n        if (isDateTime(val)) {\n          implicit[filter.field] = 'date';\n        } else if (isNumber(val)) {\n          implicit[filter.field] = 'number';\n        } else if (isString(val)) {\n          implicit[filter.field] = 'string';\n        }\n      }\n\n      if (filter.timeUnit) {\n        implicit[filter.field] = 'date';\n      }\n    }\n  });\n\n  return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromEncoding(model: Model) {\n  const implicit: Dict<string> = {};\n\n  function add(fieldDef: TypedFieldDef<string>) {\n    if (isFieldOrDatumDefForTimeFormat(fieldDef)) {\n      implicit[fieldDef.field] = 'date';\n    } else if (\n      fieldDef.type === 'quantitative' &&\n      isMinMaxOp(fieldDef.aggregate) // we need to parse numbers to support correct min and max\n    ) {\n      implicit[fieldDef.field] = 'number';\n    } else if (accessPathDepth(fieldDef.field) > 1) {\n      // For non-date/non-number (strings and booleans), derive a flattened field for a referenced nested field.\n      // (Parsing numbers / dates already flattens numeric and temporal fields.)\n      if (!(fieldDef.field in implicit)) {\n        implicit[fieldDef.field] = 'flatten';\n      }\n    } else if (isScaleFieldDef(fieldDef) && isSortField(fieldDef.sort) && accessPathDepth(fieldDef.sort.field) > 1) {\n      // Flatten fields that we sort by but that are not otherwise flattened.\n      if (!(fieldDef.sort.field in implicit)) {\n        implicit[fieldDef.sort.field] = 'flatten';\n      }\n    }\n  }\n\n  if (isUnitModel(model) || isFacetModel(model)) {\n    // Parse encoded fields\n    model.forEachFieldDef((fieldDef, channel) => {\n      if (isTypedFieldDef(fieldDef)) {\n        add(fieldDef);\n      } else {\n        const mainChannel = getMainRangeChannel(channel);\n        const mainFieldDef = model.fieldDef(mainChannel as SingleDefChannel) as TypedFieldDef<string>;\n        add({\n          ...fieldDef,\n          type: mainFieldDef.type\n        });\n      }\n    });\n  }\n\n  // Parse quantitative dimension fields of path marks as numbers so that we sort them correctly.\n  if (isUnitModel(model)) {\n    const {mark, markDef, encoding} = model;\n    if (\n      isPathMark(mark) &&\n      // No need to sort by dimension if we have a connected scatterplot (order channel is present)\n      !model.encoding.order\n    ) {\n      const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n      const dimensionChannelDef = encoding[dimensionChannel];\n      if (\n        isFieldDef(dimensionChannelDef) &&\n        dimensionChannelDef.type === 'quantitative' &&\n        !(dimensionChannelDef.field in implicit)\n      ) {\n        implicit[dimensionChannelDef.field] = 'number';\n      }\n    }\n  }\n\n  return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromSelection(model: Model) {\n  const implicit: Dict<string> = {};\n\n  if (isUnitModel(model) && model.component.selection) {\n    for (const name of keys(model.component.selection)) {\n      const selCmpt = model.component.selection[name];\n      for (const proj of selCmpt.project.items) {\n        if (!proj.channel && accessPathDepth(proj.field) > 1) {\n          implicit[proj.field] = 'flatten';\n        }\n      }\n    }\n  }\n\n  return implicit;\n}\n\nexport class ParseNode extends DataFlowNode {\n  private _parse: Parse;\n\n  public clone() {\n    return new ParseNode(null, duplicate(this._parse));\n  }\n\n  constructor(parent: DataFlowNode, parse: Parse) {\n    super(parent);\n\n    this._parse = parse;\n  }\n\n  public hash() {\n    return `Parse ${hash(this._parse)}`;\n  }\n\n  /**\n   * Creates a parse node from a data.format.parse and updates ancestorParse.\n   */\n  public static makeExplicit(parent: DataFlowNode, model: Model, ancestorParse: AncestorParse) {\n    // Custom parse\n    let explicit = {};\n    const data = model.data;\n    if (!isGenerator(data) && data && data.format && data.format.parse) {\n      explicit = data.format.parse;\n    }\n\n    return this.makeWithAncestors(parent, explicit, {}, ancestorParse);\n  }\n\n  /**\n   * Creates a parse node from \"explicit\" parse and \"implicit\" parse and updates ancestorParse.\n   */\n  public static makeWithAncestors(\n    parent: DataFlowNode,\n    explicit: Parse,\n    implicit: Parse,\n    ancestorParse: AncestorParse\n  ) {\n    // We should not parse what has already been parsed in a parent (explicitly or implicitly) or what has been derived (maked as \"derived\"). We also don't need to flatten a field that has already been parsed.\n    for (const field of keys(implicit)) {\n      const parsedAs = ancestorParse.getWithExplicit(field);\n      if (parsedAs.value !== undefined) {\n        // We always ignore derived fields even if they are implicitly defined because we expect users to create the right types.\n        if (\n          parsedAs.explicit ||\n          parsedAs.value === implicit[field] ||\n          parsedAs.value === 'derived' ||\n          implicit[field] === 'flatten'\n        ) {\n          delete implicit[field];\n        } else {\n          log.warn(log.message.differentParse(field, implicit[field], parsedAs.value));\n        }\n      }\n    }\n\n    for (const field of keys(explicit)) {\n      const parsedAs = ancestorParse.get(field);\n      if (parsedAs !== undefined) {\n        // Don't parse a field again if it has been parsed with the same type already.\n        if (parsedAs === explicit[field]) {\n          delete explicit[field];\n        } else {\n          log.warn(log.message.differentParse(field, explicit[field], parsedAs));\n        }\n      }\n    }\n\n    const parse = new Split(explicit, implicit);\n\n    // add the format parse from this model so that children don't parse the same field again\n    ancestorParse.copyAll(parse);\n\n    // copy only non-null parses\n    const p: Dict<string> = {};\n    for (const key of keys(parse.combine())) {\n      const val = parse.get(key);\n      if (val !== null) {\n        p[key] = val;\n      }\n    }\n\n    if (keys(p).length === 0 || ancestorParse.parseNothing) {\n      return null;\n    }\n\n    return new ParseNode(parent, p);\n  }\n\n  public get parse() {\n    return this._parse;\n  }\n\n  public merge(other: ParseNode) {\n    this._parse = {...this._parse, ...other.parse};\n    other.remove();\n  }\n\n  /**\n   * Assemble an object for Vega's format.parse property.\n   */\n  public assembleFormatParse() {\n    const formatParse: Dict<string> = {};\n    for (const field of keys(this._parse)) {\n      const p = this._parse[field];\n      if (accessPathDepth(field) === 1) {\n        formatParse[field] = p;\n      }\n    }\n    return formatParse;\n  }\n\n  // format parse depends and produces all fields in its parse\n  public producedFields() {\n    return new Set(keys(this._parse));\n  }\n\n  public dependentFields() {\n    return new Set(keys(this._parse));\n  }\n\n  public assembleTransforms(onlyNested = false): VgFormulaTransform[] {\n    return keys(this._parse)\n      .filter(field => (onlyNested ? accessPathDepth(field) > 1 : true))\n      .map(field => {\n        const expr = parseExpression(field, this._parse[field]);\n        if (!expr) {\n          return null;\n        }\n\n        const formula: VgFormulaTransform = {\n          type: 'formula',\n          expr,\n          as: removePathFromField(field) // Vega output is always flattened\n        };\n        return formula;\n      })\n      .filter(t => t !== null);\n  }\n}\n","import {SELECTION_ID} from '../../selection';\nimport {IdentifierTransform as VgIdentifierTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class IdentifierNode extends DataFlowNode {\n  public clone() {\n    return new IdentifierNode(null);\n  }\n\n  constructor(parent: DataFlowNode) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields() {\n    return new Set([SELECTION_ID]);\n  }\n\n  public hash() {\n    return 'Identifier';\n  }\n\n  public assemble(): VgIdentifierTransform {\n    return {type: 'identifier', as: SELECTION_ID};\n  }\n}\n","import {AggregateOp} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {JoinAggregateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgJoinAggregateTransform} from '../../vega.schema';\nimport {JoinAggregateFieldDef} from '../../transform';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the join aggregate transform nodes.\n */\nexport class JoinAggregateTransformNode extends DataFlowNode {\n  public clone() {\n    return new JoinAggregateTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private readonly transform: JoinAggregateTransform) {\n    super(parent);\n  }\n\n  public addDimensions(fields: string[]) {\n    this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n  }\n\n  public dependentFields() {\n    const out = new Set<string>();\n\n    if (this.transform.groupby) {\n      this.transform.groupby.forEach(out.add, out);\n    }\n    this.transform.joinaggregate\n      .map(w => w.field)\n      .filter(f => f !== undefined)\n      .forEach(out.add, out);\n\n    return out;\n  }\n\n  public producedFields() {\n    return new Set(this.transform.joinaggregate.map(this.getDefaultName));\n  }\n\n  private getDefaultName(joinAggregateFieldDef: JoinAggregateFieldDef): string {\n    return joinAggregateFieldDef.as ?? vgField(joinAggregateFieldDef);\n  }\n\n  public hash() {\n    return `JoinAggregateTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgJoinAggregateTransform {\n    const fields: string[] = [];\n    const ops: AggregateOp[] = [];\n    const as: string[] = [];\n    for (const joinaggregate of this.transform.joinaggregate) {\n      ops.push(joinaggregate.op);\n      as.push(this.getDefaultName(joinaggregate));\n      fields.push(joinaggregate.field === undefined ? null : joinaggregate.field);\n    }\n\n    const groupby = this.transform.groupby;\n\n    return {\n      type: 'joinaggregate',\n      as,\n      ops,\n      fields,\n      ...(groupby !== undefined ? {groupby} : {})\n    };\n  }\n}\n","import {Transforms as VgTransform} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {FieldName, getFieldDef, isFieldDef, PositionFieldDef, vgField} from '../../channeldef';\nimport {SortFields, SortOrder} from '../../sort';\nimport {StackOffset} from '../../stack';\nimport {StackTransform} from '../../transform';\nimport {duplicate, getFirstDefined, hash} from '../../util';\nimport {sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nfunction getStackByFields(model: UnitModel): string[] {\n  return model.stack.stackBy.reduce((fields, by) => {\n    const fieldDef = by.fieldDef;\n\n    const _field = vgField(fieldDef);\n    if (_field) {\n      fields.push(_field);\n    }\n    return fields;\n  }, [] as string[]);\n}\n\nexport interface StackComponent {\n  /**\n   * Faceted field.\n   */\n  facetby: string[];\n\n  dimensionFieldDef?: PositionFieldDef<string>;\n\n  /**\n   * Stack measure's field. Used in makeFromEncoding.\n   */\n  stackField: string;\n\n  /**\n   * Level of detail fields for each level in the stacked charts such as color or detail.\n   * Used in makeFromEncoding.\n   */\n  stackby?: string[];\n\n  /**\n   * Field that determines order of levels in the stacked charts.\n   * Used in both but optional in transform.\n   */\n  sort: SortFields;\n\n  /** Mode for stacking marks.\n   */\n  offset: StackOffset;\n\n  /**\n   * Whether to impute the data before stacking. Used only in makeFromEncoding.\n   */\n  impute?: boolean;\n\n  /**\n   * The data fields to group by.\n   */\n  groupby?: FieldName[];\n  /**\n   * Output field names of each stack field.\n   */\n  as: [FieldName, FieldName];\n}\n\nfunction isValidAsArray(as: string[] | string): as is string[] {\n  return isArray(as) && as.every(s => isString(s)) && as.length > 1;\n}\n\nexport class StackNode extends DataFlowNode {\n  private _stack: StackComponent;\n\n  public clone() {\n    return new StackNode(null, duplicate(this._stack));\n  }\n\n  constructor(parent: DataFlowNode, stack: StackComponent) {\n    super(parent);\n\n    this._stack = stack;\n  }\n\n  public static makeFromTransform(parent: DataFlowNode, stackTransform: StackTransform) {\n    const {stack, groupby, as, offset = 'zero'} = stackTransform;\n\n    const sortFields: string[] = [];\n    const sortOrder: SortOrder[] = [];\n    if (stackTransform.sort !== undefined) {\n      for (const sortField of stackTransform.sort) {\n        sortFields.push(sortField.field);\n        sortOrder.push(getFirstDefined(sortField.order, 'ascending'));\n      }\n    }\n    const sort: SortFields = {\n      field: sortFields,\n      order: sortOrder\n    };\n    let normalizedAs: [string, string];\n    if (isValidAsArray(as)) {\n      normalizedAs = as;\n    } else if (isString(as)) {\n      normalizedAs = [as, as + '_end'];\n    } else {\n      normalizedAs = [stackTransform.stack + '_start', stackTransform.stack + '_end'];\n    }\n\n    return new StackNode(parent, {\n      stackField: stack,\n      groupby,\n      offset,\n      sort,\n      facetby: [],\n      as: normalizedAs\n    });\n  }\n\n  public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n    const stackProperties = model.stack;\n    const {encoding} = model;\n\n    if (!stackProperties) {\n      return null;\n    }\n\n    const {groupbyChannel, fieldChannel, offset, impute} = stackProperties;\n\n    let dimensionFieldDef: PositionFieldDef<string>;\n    if (groupbyChannel) {\n      const cDef = encoding[groupbyChannel];\n      dimensionFieldDef = getFieldDef(cDef) as PositionFieldDef<string>; // Fair to cast as groupByChannel is always either x or y\n    }\n\n    const stackby = getStackByFields(model);\n    const orderDef = model.encoding.order;\n\n    let sort: SortFields;\n    if (isArray(orderDef) || isFieldDef(orderDef)) {\n      sort = sortParams(orderDef);\n    } else {\n      // default = descending by stackFields\n      // FIXME is the default here correct for binned fields?\n      sort = stackby.reduce(\n        (s, field) => {\n          s.field.push(field);\n          s.order.push(fieldChannel === 'y' ? 'descending' : 'ascending');\n          return s;\n        },\n        {field: [], order: []}\n      );\n    }\n\n    return new StackNode(parent, {\n      dimensionFieldDef,\n      stackField: model.vgField(fieldChannel),\n      facetby: [],\n      stackby,\n      sort,\n      offset,\n      impute,\n      as: [\n        model.vgField(fieldChannel, {suffix: 'start', forAs: true}),\n        model.vgField(fieldChannel, {suffix: 'end', forAs: true})\n      ]\n    });\n  }\n\n  get stack(): StackComponent {\n    return this._stack;\n  }\n\n  public addDimensions(fields: string[]) {\n    this._stack.facetby.push(...fields);\n  }\n\n  public dependentFields() {\n    const out = new Set<string>();\n\n    out.add(this._stack.stackField);\n\n    this.getGroupbyFields().forEach(out.add, out);\n    this._stack.facetby.forEach(out.add, out);\n    this._stack.sort.field.forEach(out.add, out);\n\n    return out;\n  }\n\n  public producedFields() {\n    return new Set(this._stack.as);\n  }\n\n  public hash() {\n    return `Stack ${hash(this._stack)}`;\n  }\n\n  private getGroupbyFields() {\n    const {dimensionFieldDef, impute, groupby} = this._stack;\n    if (dimensionFieldDef) {\n      if (dimensionFieldDef.bin) {\n        if (impute) {\n          // For binned group by field with impute, we calculate bin_mid\n          // as we cannot impute two fields simultaneously\n          return [vgField(dimensionFieldDef, {binSuffix: 'mid'})];\n        }\n        return [\n          // For binned group by field without impute, we need both bin (start) and bin_end\n          vgField(dimensionFieldDef, {}),\n          vgField(dimensionFieldDef, {binSuffix: 'end'})\n        ];\n      }\n      return [vgField(dimensionFieldDef)];\n    }\n    return groupby ?? [];\n  }\n\n  public assemble(): VgTransform[] {\n    const transform: VgTransform[] = [];\n    const {facetby, dimensionFieldDef, stackField: field, stackby, sort, offset, impute, as} = this._stack;\n\n    // Impute\n    if (impute && dimensionFieldDef) {\n      const {band = 0.5, bin} = dimensionFieldDef;\n      if (bin) {\n        // As we can only impute one field at a time, we need to calculate\n        // mid point for a binned field\n        transform.push({\n          type: 'formula',\n          expr:\n            `${band}*` +\n            vgField(dimensionFieldDef, {expr: 'datum'}) +\n            `+${1 - band}*` +\n            vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'}),\n          as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})\n        });\n      }\n\n      transform.push({\n        type: 'impute',\n        field,\n        groupby: [...stackby, ...facetby],\n        key: vgField(dimensionFieldDef, {binSuffix: 'mid'}),\n        method: 'value',\n        value: 0\n      });\n    }\n\n    // Stack\n    transform.push({\n      type: 'stack',\n      groupby: [...this.getGroupbyFields(), ...facetby],\n      field,\n      sort,\n      as,\n      offset\n    });\n\n    return transform;\n  }\n}\n","import {AggregateOp, WindowTransform as VgWindowTransform} from 'vega';\nimport {isAggregateOp} from '../../aggregate';\nimport {vgField} from '../../channeldef';\nimport {SortOrder} from '../../sort';\nimport {WindowFieldDef, WindowOnlyOp, WindowTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgComparator, VgJoinAggregateTransform} from '../../vega.schema';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the window transform nodes\n */\nexport class WindowTransformNode extends DataFlowNode {\n  public clone() {\n    return new WindowTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private readonly transform: WindowTransform) {\n    super(parent);\n  }\n\n  public addDimensions(fields: string[]) {\n    this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n  }\n\n  public dependentFields() {\n    const out = new Set<string>();\n\n    (this.transform.groupby ?? []).forEach(out.add, out);\n    (this.transform.sort ?? []).forEach(m => out.add(m.field));\n\n    this.transform.window\n      .map(w => w.field)\n      .filter(f => f !== undefined)\n      .forEach(out.add, out);\n\n    return out;\n  }\n\n  public producedFields() {\n    return new Set(this.transform.window.map(this.getDefaultName));\n  }\n\n  private getDefaultName(windowFieldDef: WindowFieldDef): string {\n    return windowFieldDef.as ?? vgField(windowFieldDef);\n  }\n\n  public hash() {\n    return `WindowTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgWindowTransform | VgJoinAggregateTransform {\n    const fields: string[] = [];\n    const ops: (AggregateOp | WindowOnlyOp)[] = [];\n    const as: string[] = [];\n    const params = [];\n\n    for (const window of this.transform.window) {\n      ops.push(window.op);\n      as.push(this.getDefaultName(window));\n      params.push(window.param === undefined ? null : window.param);\n      fields.push(window.field === undefined ? null : window.field);\n    }\n\n    const frame = this.transform.frame;\n    const groupby = this.transform.groupby;\n\n    if (frame && frame[0] === null && frame[1] === null && ops.every(o => isAggregateOp(o))) {\n      // when the window does not rely on any particular window ops or frame, switch to a simpler and more efficient joinaggregate\n      return {\n        type: 'joinaggregate',\n        as,\n        ops: ops as AggregateOp[],\n        fields,\n        ...(groupby !== undefined ? {groupby} : {})\n      } as VgJoinAggregateTransform;\n    }\n\n    const sortFields: string[] = [];\n    const sortOrder: SortOrder[] = [];\n    if (this.transform.sort !== undefined) {\n      for (const sortField of this.transform.sort) {\n        sortFields.push(sortField.field);\n        sortOrder.push(sortField.order ?? 'ascending');\n      }\n    }\n    const sort: VgComparator = {\n      field: sortFields,\n      order: sortOrder\n    };\n    const ignorePeers = this.transform.ignorePeers;\n\n    return {\n      type: 'window',\n      params,\n      as,\n      ops,\n      fields,\n      sort,\n      ...(ignorePeers !== undefined ? {ignorePeers} : {}),\n      ...(groupby !== undefined ? {groupby} : {}),\n      ...(frame !== undefined ? {frame} : {})\n    } as VgWindowTransform;\n  }\n}\n","import {MAIN, Parse} from '../../data';\nimport {Dict, fieldIntersection, hash, hasIntersection, isEmpty, keys, some} from '../../util';\nimport {Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {ParseNode} from './formatparse';\nimport {IdentifierNode} from './identifier';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {FACET_SCALE_PREFIX} from './optimize';\nimport {BottomUpOptimizer, isDataSourceNode, TopDownOptimizer} from './optimizer';\nimport * as optimizers from './optimizers';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport interface OptimizerFlags {\n  /**\n   * If true, iteration continues.\n   */\n  continueFlag: boolean;\n  /**\n   * If true, the tree has been mutated by the function.\n   */\n  mutatedFlag: boolean;\n}\n\n/**\n * Move parse nodes up to forks.\n */\nexport class MoveParseUp extends BottomUpOptimizer {\n  public run(node: DataFlowNode): OptimizerFlags {\n    const parent = node.parent;\n    // Move parse up by merging or swapping.\n    if (node instanceof ParseNode) {\n      if (isDataSourceNode(parent)) {\n        return this.flags;\n      }\n\n      if (parent.numChildren() > 1) {\n        // Don't move parse further up but continue with parent.\n        this.setContinue();\n        return this.flags;\n      }\n\n      if (parent instanceof ParseNode) {\n        this.setMutated();\n        parent.merge(node);\n      } else {\n        // Don't swap with nodes that produce something that the parse node depends on (e.g. lookup).\n        if (fieldIntersection(parent.producedFields(), node.dependentFields())) {\n          this.setContinue();\n          return this.flags;\n        }\n        this.setMutated();\n        node.swapWithParent();\n      }\n    }\n    this.setContinue();\n    return this.flags;\n  }\n}\n\n/**\n * Merge identical nodes at forks by comparing hashes.\n *\n * Does not need to iterate from leaves so we implement this with recursion as it's a bit simpler.\n */\nexport class MergeIdenticalNodes extends TopDownOptimizer {\n  public mergeNodes(parent: DataFlowNode, nodes: DataFlowNode[]) {\n    const mergedNode = nodes.shift();\n    for (const node of nodes) {\n      parent.removeChild(node);\n      node.parent = mergedNode;\n      node.remove();\n    }\n  }\n\n  public run(node: DataFlowNode): boolean {\n    const hashes = node.children.map(x => x.hash());\n    const buckets: {hash?: DataFlowNode[]} = {};\n\n    for (let i = 0; i < hashes.length; i++) {\n      if (buckets[hashes[i]] === undefined) {\n        buckets[hashes[i]] = [node.children[i]];\n      } else {\n        buckets[hashes[i]].push(node.children[i]);\n      }\n    }\n\n    for (const k of keys(buckets)) {\n      if (buckets[k].length > 1) {\n        this.setMutated();\n        this.mergeNodes(node, buckets[k]);\n      }\n    }\n    for (const child of node.children) {\n      this.run(child);\n    }\n    return this.mutatedFlag;\n  }\n}\n\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nexport class RemoveUnusedSubtrees extends BottomUpOptimizer {\n  public run(node: DataFlowNode): OptimizerFlags {\n    if (node instanceof OutputNode || node.numChildren() > 0 || node instanceof FacetNode) {\n      // no need to continue with parent because it is output node or will have children (there was a fork)\n      return this.flags;\n    } else {\n      this.setMutated();\n      node.remove();\n    }\n    return this.flags;\n  }\n}\n\n/**\n * Removes duplicate time unit nodes (as determined by the name of the\n * output field) that may be generated due to selections projected over\n * time units.\n *\n * TODO: Try to make this a top down optimizer that keeps only the first\n * insance of a time unit node.\n * TODO: Try to make a generic version of this that only keeps one node per hash.\n */\nexport class RemoveDuplicateTimeUnits extends BottomUpOptimizer {\n  private fields = new Set<string>();\n  private prev: DataFlowNode = null;\n  public run(node: DataFlowNode): OptimizerFlags {\n    this.setContinue();\n    if (node instanceof TimeUnitNode) {\n      const pfields = node.producedFields();\n      if (hasIntersection(pfields, this.fields)) {\n        this.setMutated();\n        this.prev.remove();\n      } else {\n        this.fields = new Set([...this.fields, ...pfields]);\n      }\n      this.prev = node;\n    }\n    return this.flags;\n  }\n\n  public reset(): void {\n    this.fields.clear();\n  }\n}\n\n/**\n * Merge adjacent time unit nodes.\n */\nexport class MergeTimeUnits extends BottomUpOptimizer {\n  public run(node: DataFlowNode): OptimizerFlags {\n    this.setContinue();\n    const parent = node.parent;\n    const timeUnitChildren = parent.children.filter(x => x instanceof TimeUnitNode) as TimeUnitNode[];\n    const combination = timeUnitChildren.pop();\n    for (const timeUnit of timeUnitChildren) {\n      this.setMutated();\n      combination.merge(timeUnit);\n    }\n    return this.flags;\n  }\n}\n\n/**\n * Clones the subtree and ignores output nodes except for the leaves, which are renamed.\n */\nfunction cloneSubtree(facet: FacetNode) {\n  function clone(node: DataFlowNode): DataFlowNode[] {\n    if (!(node instanceof FacetNode)) {\n      const copy = node.clone();\n\n      if (copy instanceof OutputNode) {\n        const newName = FACET_SCALE_PREFIX + copy.getSource();\n        copy.setSource(newName);\n\n        facet.model.component.data.outputNodes[newName] = copy;\n      } else if (\n        copy instanceof AggregateNode ||\n        copy instanceof StackNode ||\n        copy instanceof WindowTransformNode ||\n        copy instanceof JoinAggregateTransformNode\n      ) {\n        copy.addDimensions(facet.fields);\n      }\n      for (const n of node.children.flatMap(clone)) {\n        n.parent = copy;\n      }\n\n      return [copy];\n    }\n\n    return node.children.flatMap(clone);\n  }\n  return clone;\n}\n\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nexport function moveFacetDown(node: DataFlowNode) {\n  if (node instanceof FacetNode) {\n    if (node.numChildren() === 1 && !(node.children[0] instanceof OutputNode)) {\n      // move down until we hit a fork or output node\n      const child = node.children[0];\n\n      if (\n        child instanceof AggregateNode ||\n        child instanceof StackNode ||\n        child instanceof WindowTransformNode ||\n        child instanceof JoinAggregateTransformNode\n      ) {\n        child.addDimensions(node.fields);\n      }\n\n      child.swapWithParent();\n      moveFacetDown(node);\n    } else {\n      // move main to facet\n\n      const facetMain = node.model.component.data.main;\n      moveMainDownToFacet(facetMain);\n\n      // replicate the subtree and place it before the facet's main node\n      const cloner = cloneSubtree(node);\n      const copy: DataFlowNode[] = node.children.map(cloner).flat();\n      for (const c of copy) {\n        c.parent = facetMain;\n      }\n    }\n  } else {\n    node.children.map(moveFacetDown);\n  }\n}\n\nfunction moveMainDownToFacet(node: DataFlowNode) {\n  if (node instanceof OutputNode && node.type === MAIN) {\n    if (node.numChildren() === 1) {\n      const child = node.children[0];\n      if (!(child instanceof FacetNode)) {\n        child.swapWithParent();\n        moveMainDownToFacet(node);\n      }\n    }\n  }\n}\n\n/**\n * Remove output nodes that are not required. Starting from a root.\n */\nexport class RemoveUnnecessaryOutputNodes extends TopDownOptimizer {\n  constructor() {\n    super();\n  }\n\n  public run(node: DataFlowNode): boolean {\n    if (node instanceof OutputNode && !node.isRequired()) {\n      this.setMutated();\n      node.remove();\n    }\n\n    for (const child of node.children) {\n      this.run(child);\n    }\n\n    return this.mutatedFlag;\n  }\n}\n\nexport class RemoveUnnecessaryIdentifierNodes extends TopDownOptimizer {\n  private requiresSelectionId: boolean;\n  constructor(model: Model) {\n    super();\n    this.requiresSelectionId = model && requiresSelectionId(model);\n  }\n\n  public run(node: DataFlowNode): boolean {\n    if (node instanceof IdentifierNode) {\n      // Only preserve IdentifierNodes if we have default discrete selections\n      // in our model tree, and if the nodes come after tuple producing nodes.\n      if (\n        !(\n          this.requiresSelectionId &&\n          (isDataSourceNode(node.parent) || node.parent instanceof AggregateNode || node.parent instanceof ParseNode)\n        )\n      ) {\n        this.setMutated();\n        node.remove();\n      }\n    }\n\n    for (const child of node.children) {\n      this.run(child);\n    }\n\n    return this.mutatedFlag;\n  }\n}\n\n/**\n * Inserts an intermediate ParseNode containing all non-conflicting parse fields and removes the empty ParseNodes.\n *\n * We assume that dependent paths that do not have a parse node can be just merged.\n */\nexport class MergeParse extends BottomUpOptimizer {\n  public run(node: DataFlowNode): optimizers.OptimizerFlags {\n    const parent = node.parent;\n    const originalChildren = [...parent.children];\n    const parseChildren = parent.children.filter((child): child is ParseNode => child instanceof ParseNode);\n\n    if (parent.numChildren() > 1 && parseChildren.length >= 1) {\n      const commonParse: Parse = {};\n      const conflictingParse = new Set<string>();\n      for (const parseNode of parseChildren) {\n        const parse = parseNode.parse;\n        for (const k of keys(parse)) {\n          if (!(k in commonParse)) {\n            commonParse[k] = parse[k];\n          } else if (commonParse[k] !== parse[k]) {\n            conflictingParse.add(k);\n          }\n        }\n      }\n\n      for (const field of conflictingParse) {\n        delete commonParse[field];\n      }\n\n      if (!isEmpty(commonParse)) {\n        this.setMutated();\n        const mergedParseNode = new ParseNode(parent, commonParse);\n        for (const childNode of originalChildren) {\n          if (childNode instanceof ParseNode) {\n            for (const key of keys(commonParse)) {\n              delete childNode.parse[key];\n            }\n          }\n\n          parent.removeChild(childNode);\n          childNode.parent = mergedParseNode;\n\n          // remove empty parse nodes\n          if (childNode instanceof ParseNode && keys(childNode.parse).length === 0) {\n            childNode.remove();\n          }\n        }\n      }\n    }\n\n    this.setContinue();\n    return this.flags;\n  }\n}\n\nexport class MergeAggregates extends BottomUpOptimizer {\n  public run(node: DataFlowNode): optimizers.OptimizerFlags {\n    const parent = node.parent;\n    const aggChildren = parent.children.filter((child): child is AggregateNode => child instanceof AggregateNode);\n\n    // Object which we'll use to map the fields which an aggregate is grouped by to\n    // the set of aggregates with that grouping. This is useful as only aggregates\n    // with the same group by can be merged\n    const groupedAggregates: Dict<AggregateNode[]> = {};\n\n    // Build groupedAggregates\n    for (const agg of aggChildren) {\n      const groupBys = hash(agg.groupBy);\n      if (!(groupBys in groupedAggregates)) {\n        groupedAggregates[groupBys] = [];\n      }\n      groupedAggregates[groupBys].push(agg);\n    }\n\n    // Merge aggregateNodes with same key in groupedAggregates\n    for (const group of keys(groupedAggregates)) {\n      const mergeableAggs = groupedAggregates[group];\n      if (mergeableAggs.length > 1) {\n        const mergedAggs = mergeableAggs.pop();\n        for (const agg of mergeableAggs) {\n          if (mergedAggs.merge(agg)) {\n            parent.removeChild(agg);\n            agg.parent = mergedAggs;\n            agg.remove();\n\n            this.setMutated();\n          }\n        }\n      }\n    }\n\n    this.setContinue();\n    return this.flags;\n  }\n}\n\n/**\n * Merge bin nodes and move them up through forks. Stop at filters, parse, identifier as we want them to stay before the bin node.\n */\nexport class MergeBins extends BottomUpOptimizer {\n  constructor(private model: Model) {\n    super();\n  }\n  public run(node: DataFlowNode): OptimizerFlags {\n    const parent = node.parent;\n    const moveBinsUp = !(\n      isDataSourceNode(parent) ||\n      parent instanceof FilterNode ||\n      parent instanceof ParseNode ||\n      parent instanceof IdentifierNode\n    );\n\n    const promotableBins: BinNode[] = [];\n    const remainingBins: BinNode[] = [];\n\n    for (const child of parent.children) {\n      if (child instanceof BinNode) {\n        if (moveBinsUp && !fieldIntersection(parent.producedFields(), child.dependentFields())) {\n          promotableBins.push(child);\n        } else {\n          remainingBins.push(child);\n        }\n      }\n    }\n\n    if (promotableBins.length > 0) {\n      const promotedBin = promotableBins.pop();\n      for (const bin of promotableBins) {\n        promotedBin.merge(bin, this.model.renameSignal.bind(this.model));\n      }\n      this.setMutated();\n      if (parent instanceof BinNode) {\n        parent.merge(promotedBin, this.model.renameSignal.bind(this.model));\n      } else {\n        promotedBin.swapWithParent();\n      }\n    }\n    if (remainingBins.length > 1) {\n      const remainingBin = remainingBins.pop();\n      for (const bin of remainingBins) {\n        remainingBin.merge(bin, this.model.renameSignal.bind(this.model));\n      }\n      this.setMutated();\n    }\n    this.setContinue();\n    return this.flags;\n  }\n}\n\n/**\n * This optimizer takes output nodes that are at a fork and moves them before the fork.\n *\n * The algorithm iterates over the children and tries to find the last output node in a cahin of output nodes.\n * It then moves all output nodes before that main output node. All other children (and the children of the output nodes)\n * are inserted after the main output node.\n */\nexport class MergeOutputs extends BottomUpOptimizer {\n  public run(node: DataFlowNode) {\n    const parent = node.parent;\n    const children = [...parent.children];\n    const hasOutputChild = some(children, child => child instanceof OutputNode);\n\n    if (!hasOutputChild || parent.numChildren() <= 1) {\n      this.setContinue();\n      return this.flags;\n    }\n\n    const otherChildren: DataFlowNode[] = [];\n\n    // The output node we will connect all other nodes to\n    // output nodes will be added before, other nodes after\n    let mainOutput: OutputNode;\n\n    for (const child of children) {\n      if (child instanceof OutputNode) {\n        let lastOutput = child;\n\n        while (lastOutput.numChildren() === 1) {\n          const theChild = lastOutput.children[0];\n          if (theChild instanceof OutputNode) {\n            lastOutput = theChild;\n          } else {\n            break;\n          }\n        }\n\n        otherChildren.push(...lastOutput.children);\n\n        if (mainOutput) {\n          // Move the output nodes before the mainOutput. We do this by setting\n          // the parent of the first not to the parent of the main output and\n          // the main output's parent to the last output.\n\n          // note: the child is the first output\n          parent.removeChild(child);\n          child.parent = mainOutput.parent;\n\n          mainOutput.parent.removeChild(mainOutput);\n          mainOutput.parent = lastOutput;\n\n          this.setMutated();\n        } else {\n          mainOutput = lastOutput;\n        }\n      } else {\n        otherChildren.push(child);\n      }\n    }\n\n    if (otherChildren.length) {\n      this.setMutated();\n      for (const child of otherChildren) {\n        child.parent.removeChild(child);\n        child.parent = mainOutput;\n      }\n    }\n\n    this.setContinue();\n    return this.flags;\n  }\n}\n","import * as log from '../../log';\nimport {Model} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {checkLinks} from './debug';\nimport {DataComponent} from '.';\nimport {BottomUpOptimizer, TopDownOptimizer} from './optimizer';\nimport * as optimizers from './optimizers';\n\nexport const FACET_SCALE_PREFIX = 'scale_';\nexport const MAX_OPTIMIZATION_RUNS = 5;\n\n/**\n * Return all leaf nodes.\n */\nfunction getLeaves(roots: DataFlowNode[]) {\n  const leaves: DataFlowNode[] = [];\n  function append(node: DataFlowNode) {\n    if (node.numChildren() === 0) {\n      leaves.push(node);\n    } else {\n      for (const child of node.children) {\n        append(child);\n      }\n    }\n  }\n\n  for (const child of roots) {\n    append(child);\n  }\n  return leaves;\n}\n\nexport function isTrue(x: boolean) {\n  return x;\n}\n\n/**\n * Run the specified optimizer on the provided nodes.\n *\n * @param optimizer The optimizer instance to run.\n * @param nodes A set of nodes to optimize.\n * @param flag Flag that will be or'ed with return valued from optimization calls to the nodes.\n */\nfunction runOptimizer(optimizer: BottomUpOptimizer | TopDownOptimizer, nodes: DataFlowNode[]): boolean {\n  const flags = nodes.map(node => {\n    if (optimizer instanceof BottomUpOptimizer) {\n      const runFlags = optimizer.optimizeNextFromLeaves(node);\n      optimizer.reset();\n      return runFlags;\n    } else {\n      return optimizer.run(node);\n    }\n  });\n  return flags.some(isTrue);\n}\n\nfunction optimizationDataflowHelper(dataComponent: DataComponent, model: Model) {\n  let roots = dataComponent.sources;\n  const mutatedFlags: Set<boolean> = new Set();\n\n  mutatedFlags.add(runOptimizer(new optimizers.RemoveUnnecessaryOutputNodes(), roots));\n  mutatedFlags.add(runOptimizer(new optimizers.RemoveUnnecessaryIdentifierNodes(model), roots));\n\n  // remove source nodes that don't have any children because they also don't have output nodes\n  roots = roots.filter(r => r.numChildren() > 0);\n\n  mutatedFlags.add(runOptimizer(new optimizers.RemoveUnusedSubtrees(), getLeaves(roots)));\n\n  roots = roots.filter(r => r.numChildren() > 0);\n\n  mutatedFlags.add(runOptimizer(new optimizers.MoveParseUp(), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeBins(model), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.RemoveDuplicateTimeUnits(), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeParse(), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeAggregates(), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeTimeUnits(), getLeaves(roots)));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeIdenticalNodes(), roots));\n  mutatedFlags.add(runOptimizer(new optimizers.MergeOutputs(), getLeaves(roots)));\n\n  dataComponent.sources = roots;\n\n  return mutatedFlags.has(true);\n}\n\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nexport function optimizeDataflow(data: DataComponent, model: Model) {\n  // check before optimizations\n  checkLinks(data.sources);\n\n  let firstPassCounter = 0;\n  let secondPassCounter = 0;\n\n  for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n    if (!optimizationDataflowHelper(data, model)) {\n      break;\n    }\n    firstPassCounter++;\n  }\n\n  // move facets down and make a copy of the subtree so that we can have scales at the top level\n  data.sources.map(optimizers.moveFacetDown);\n\n  for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n    if (!optimizationDataflowHelper(data, model)) {\n      break;\n    }\n    secondPassCounter++;\n  }\n\n  // check after optimizations\n  checkLinks(data.sources);\n\n  if (Math.max(firstPassCounter, secondPassCounter) === MAX_OPTIMIZATION_RUNS) {\n    log.warn(`Maximum optimization runs(${MAX_OPTIMIZATION_RUNS}) reached.`);\n  }\n}\n","import {SignalRef} from 'vega';\n\nexport type Rename = (oldSignalName: string) => string;\n\n/**\n * A class that behaves like a SignalRef but lazily generates the signal.\n * The provided generator function should use `Model.getSignalName` to use the correct signal name.\n */\nexport class SignalRefWrapper implements SignalRef {\n  constructor(exprGenerator: () => string) {\n    Object.defineProperty(this, 'signal', {\n      enumerable: true,\n      get: exprGenerator\n    });\n  }\n\n  public signal: string; // for ts\n\n  public static fromName(rename: Rename, signalName: string) {\n    return new SignalRefWrapper(() => rename(signalName));\n  }\n}\n","import {SignalRef} from 'vega';\nimport {isObject, isString} from 'vega-util';\nimport {\n  isAggregateOp,\n  isArgmaxDef,\n  isArgminDef,\n  MULTIDOMAIN_SORT_OP_INDEX as UNIONDOMAIN_SORT_OP_INDEX,\n  NonArgAggregateOp,\n  SHARED_DOMAIN_OP_INDEX\n} from '../../aggregate';\nimport {isBinning, isBinParams, isSelectionExtent} from '../../bin';\nimport {getSecondaryRangeChannel, isScaleChannel, ScaleChannel} from '../../channel';\nimport {\n  binRequiresRange,\n  getFieldOrDatumDef,\n  hasBand,\n  isDatumDef,\n  isFieldDef,\n  ScaleDatumDef,\n  ScaleFieldDef,\n  TypedFieldDef,\n  valueExpr,\n  vgField\n} from '../../channeldef';\nimport {MAIN, RAW} from '../../data';\nimport {DateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {Domain, hasDiscreteDomain, isDomainUnionWith, isSelectionDomain, ScaleConfig, ScaleType} from '../../scale';\nimport {SelectionExtent} from '../../selection';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortArray, isSortByEncoding, isSortField} from '../../sort';\nimport {normalizeTimeUnit, TimeUnit, TimeUnitParams} from '../../timeunit';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {\n  isDataRefDomain,\n  isDataRefUnionedDomain,\n  isFieldRefUnionDomain,\n  isSignalRef,\n  VgDomain,\n  VgMultiFieldsRefWithSort,\n  VgNonUnionDomain,\n  VgScaleDataRefWithSort,\n  VgSortField,\n  VgUnionSortField\n} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {FACET_SCALE_PREFIX} from '../data/optimize';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\n\nexport function parseScaleDomain(model: Model) {\n  if (isUnitModel(model)) {\n    parseUnitScaleDomain(model);\n  } else {\n    parseNonUnitScaleDomain(model);\n  }\n}\n\nfunction parseUnitScaleDomain(model: UnitModel) {\n  const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n  for (const channel of util.keys(localScaleComponents)) {\n    const domains = parseDomainForChannel(model, channel);\n    const localScaleCmpt = localScaleComponents[channel];\n    localScaleCmpt.setWithExplicit('domains', domains);\n    parseSelectionDomain(model, channel);\n\n    if (model.component.data.isFaceted) {\n      // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n      let facetParent: Model = model;\n      while (!isFacetModel(facetParent) && facetParent.parent) {\n        facetParent = facetParent.parent;\n      }\n\n      const resolve = facetParent.component.resolve.scale[channel];\n\n      if (resolve === 'shared') {\n        for (const domain of domains.value) {\n          // Replace the scale domain with data output from a cloned subtree after the facet.\n          if (isDataRefDomain(domain)) {\n            // use data from cloned subtree (which is the same as data but with a prefix added once)\n            domain.data = FACET_SCALE_PREFIX + domain.data.replace(FACET_SCALE_PREFIX, '');\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction parseNonUnitScaleDomain(model: Model) {\n  for (const child of model.children) {\n    parseScaleDomain(child);\n  }\n\n  const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n  for (const channel of util.keys(localScaleComponents)) {\n    let domains: Explicit<VgNonUnionDomain[]>;\n    let selectionExtent: SelectionExtent = null;\n\n    for (const child of model.children) {\n      const childComponent = child.component.scales[channel];\n      if (childComponent) {\n        if (domains === undefined) {\n          domains = childComponent.getWithExplicit('domains');\n        } else {\n          domains = mergeValuesWithExplicit(\n            domains,\n            childComponent.getWithExplicit('domains'),\n            'domains',\n            'scale',\n            domainsTieBreaker\n          );\n        }\n\n        const se = childComponent.get('selectionExtent');\n        if (selectionExtent && se && selectionExtent.selection !== se.selection) {\n          log.warn('The same selection must be used to override scale domains in a layered view.');\n        }\n        selectionExtent = se;\n      }\n    }\n\n    localScaleComponents[channel].setWithExplicit('domains', domains);\n\n    if (selectionExtent) {\n      localScaleComponents[channel].set('selectionExtent', selectionExtent, true);\n    }\n  }\n}\n\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(\n  domain: Domain,\n  fieldDef: TypedFieldDef<string>,\n  scaleType: ScaleType,\n  scaleConfig: ScaleConfig\n) {\n  if (domain === 'unaggregated') {\n    const {valid, reason} = canUseUnaggregatedDomain(fieldDef, scaleType);\n    if (!valid) {\n      log.warn(reason);\n      return undefined;\n    }\n  } else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n    // Apply config if domain is not specified.\n    const {valid} = canUseUnaggregatedDomain(fieldDef, scaleType);\n    if (valid) {\n      return 'unaggregated';\n    }\n  }\n\n  return domain;\n}\n\nexport function parseDomainForChannel(model: UnitModel, channel: ScaleChannel): Explicit<VgNonUnionDomain[]> {\n  const scaleType = model.getScaleComponent(channel).get('type');\n  const {encoding} = model;\n\n  const domain = normalizeUnaggregatedDomain(\n    model.scaleDomain(channel),\n    model.typedFieldDef(channel),\n    scaleType,\n    model.config.scale\n  );\n  if (domain !== model.scaleDomain(channel)) {\n    model.specifiedScales[channel] = {\n      ...model.specifiedScales[channel],\n      domain\n    };\n  }\n\n  // If channel is either X or Y then union them with X2 & Y2 if they exist\n  if (channel === 'x' && getFieldOrDatumDef(encoding.x2)) {\n    if (getFieldOrDatumDef(encoding.x)) {\n      return mergeValuesWithExplicit(\n        parseSingleChannelDomain(scaleType, domain, model, 'x'),\n        parseSingleChannelDomain(scaleType, domain, model, 'x2'),\n        'domain',\n        'scale',\n        domainsTieBreaker\n      );\n    } else {\n      return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n    }\n  } else if (channel === 'y' && getFieldOrDatumDef(encoding.y2)) {\n    if (getFieldOrDatumDef(encoding.y)) {\n      return mergeValuesWithExplicit(\n        parseSingleChannelDomain(scaleType, domain, model, 'y'),\n        parseSingleChannelDomain(scaleType, domain, model, 'y2'),\n        'domain',\n        'scale',\n        domainsTieBreaker\n      );\n    } else {\n      return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n    }\n  }\n  return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\n\nfunction mapDomainToDataSignal(\n  domain: (number | string | boolean | DateTime | SignalRef | number[])[],\n  type: Type,\n  timeUnit: TimeUnit\n) {\n  return domain.map(v => {\n    const data = valueExpr(v, {timeUnit, type});\n    return {signal: `{data: ${data}}`};\n  });\n}\n\nfunction convertDomainIfItIsDateTime(\n  domain: (number | string | boolean | DateTime | SignalRef | number[])[],\n  type: Type,\n  timeUnit: TimeUnit | TimeUnitParams\n): [number[]] | [string[]] | [boolean[]] | SignalRef[] {\n  // explicit value\n  const normalizedTimeUnit = normalizeTimeUnit(timeUnit)?.unit;\n  if (type === 'temporal' || normalizedTimeUnit) {\n    return mapDomainToDataSignal(domain, type, normalizedTimeUnit);\n  }\n\n  return [domain] as [number[]] | [string[]] | [boolean[]]; // Date time won't make sense\n}\n\nfunction parseSingleChannelDomain(\n  scaleType: ScaleType,\n  domain: Domain,\n  model: UnitModel,\n  channel: ScaleChannel | 'x2' | 'y2'\n): Explicit<VgNonUnionDomain[]> {\n  const {encoding} = model;\n  const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleDatumDef<string> | ScaleFieldDef<string>;\n\n  const {type} = fieldOrDatumDef;\n  const timeUnit = fieldOrDatumDef['timeUnit'];\n\n  if (isDomainUnionWith(domain)) {\n    const defaultDomain = parseSingleChannelDomain(scaleType, undefined, model, channel);\n\n    const unionWith = convertDomainIfItIsDateTime(domain.unionWith, type, timeUnit);\n\n    return makeExplicit([...defaultDomain.value, ...unionWith]);\n  } else if (isSignalRef(domain)) {\n    return makeExplicit([domain]);\n  } else if (domain && domain !== 'unaggregated' && !isSelectionDomain(domain)) {\n    return makeExplicit(convertDomainIfItIsDateTime(domain, type, timeUnit));\n  }\n\n  const stack = model.stack;\n  if (stack && channel === stack.fieldChannel) {\n    if (stack.offset === 'normalize') {\n      return makeImplicit([[0, 1]]);\n    }\n\n    const data = model.requestDataName(MAIN);\n    return makeImplicit([\n      {\n        data,\n        field: model.vgField(channel, {suffix: 'start'})\n      },\n      {\n        data,\n        field: model.vgField(channel, {suffix: 'end'})\n      }\n    ]);\n  }\n\n  const sort: undefined | true | VgSortField =\n    isScaleChannel(channel) && isFieldDef(fieldOrDatumDef) ? domainSort(model, channel, scaleType) : undefined;\n\n  if (isDatumDef(fieldOrDatumDef)) {\n    const d = convertDomainIfItIsDateTime([fieldOrDatumDef.datum], type, timeUnit);\n    return makeImplicit(d);\n  }\n\n  const fieldDef = fieldOrDatumDef; // now we can be sure it's a fieldDef\n  if (domain === 'unaggregated') {\n    const data = model.requestDataName(MAIN);\n    const {field} = fieldOrDatumDef;\n    return makeImplicit([\n      {\n        data,\n        field: vgField({field, aggregate: 'min'})\n      },\n      {\n        data,\n        field: vgField({field, aggregate: 'max'})\n      }\n    ]);\n  } else if (isBinning(fieldDef.bin)) {\n    if (hasDiscreteDomain(scaleType)) {\n      if (scaleType === 'bin-ordinal') {\n        // we can omit the domain as it is inferred from the `bins` property\n        return makeImplicit([]);\n      }\n\n      // ordinal bin scale takes domain from bin_range, ordered by bin start\n      // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n      return makeImplicit([\n        {\n          // If sort by aggregation of a specified sort field, we need to use RAW table,\n          // so we can aggregate values for the scale independently from the main aggregation.\n          data: util.isBoolean(sort) ? model.requestDataName(MAIN) : model.requestDataName(RAW),\n          // Use range if we added it and the scale does not support computing a range as a signal.\n          field: model.vgField(channel, binRequiresRange(fieldDef, channel) ? {binSuffix: 'range'} : {}),\n          // we have to use a sort object if sort = true to make the sort correct by bin start\n          sort:\n            sort === true || !isObject(sort)\n              ? {\n                  field: model.vgField(channel, {}),\n                  op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n                }\n              : sort\n        }\n      ]);\n    } else {\n      // continuous scales\n      const {bin} = fieldDef;\n      if (isBinning(bin)) {\n        const binSignal = getBinSignalName(model, fieldDef.field, bin);\n        return makeImplicit([\n          new SignalRefWrapper(() => {\n            const signal = model.getSignalName(binSignal);\n            return `[${signal}.start, ${signal}.stop]`;\n          })\n        ]);\n      } else {\n        return makeImplicit([\n          {\n            data: model.requestDataName(MAIN),\n            field: model.vgField(channel, {})\n          }\n        ]);\n      }\n    }\n  } else if (\n    fieldDef.timeUnit &&\n    util.contains(['time', 'utc'], scaleType) &&\n    hasBand(\n      channel,\n      fieldDef,\n      isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined,\n      model.stack,\n      model.markDef,\n      model.config\n    )\n  ) {\n    const data = model.requestDataName(MAIN);\n    return makeImplicit([\n      {\n        data,\n        field: model.vgField(channel)\n      },\n      {\n        data,\n        field: model.vgField(channel, {suffix: 'end'})\n      }\n    ]);\n  } else if (sort) {\n    return makeImplicit([\n      {\n        // If sort by aggregation of a specified sort field, we need to use RAW table,\n        // so we can aggregate values for the scale independently from the main aggregation.\n        data: util.isBoolean(sort) ? model.requestDataName(MAIN) : model.requestDataName(RAW),\n        field: model.vgField(channel),\n        sort: sort\n      }\n    ]);\n  } else {\n    return makeImplicit([\n      {\n        data: model.requestDataName(MAIN),\n        field: model.vgField(channel)\n      }\n    ]);\n  }\n}\n\nfunction normalizeSortField(sort: EncodingSortField<string>, isStackedMeasure: boolean): VgSortField {\n  const {op, field, order} = sort;\n  return {\n    // Apply default op\n    op: op ?? (isStackedMeasure ? 'sum' : DEFAULT_SORT_OP),\n    // flatten nested fields\n    ...(field ? {field: util.replacePathInField(field)} : {}),\n\n    ...(order ? {order} : {})\n  };\n}\n\nfunction parseSelectionDomain(model: UnitModel, channel: ScaleChannel) {\n  const scale = model.component.scales[channel];\n  const spec = model.specifiedScales[channel].domain;\n  const bin = model.fieldDef(channel)?.bin;\n  const domain = isSelectionDomain(spec) && spec;\n  const extent = isBinParams(bin) && isSelectionExtent(bin.extent) && bin.extent;\n\n  if (domain || extent) {\n    // As scale parsing occurs before selection parsing, we cannot set\n    // domainRaw directly. So instead, we store the selectionExtent on\n    // the scale component, and then add domainRaw during scale assembly.\n    scale.set('selectionExtent', domain ?? extent, true);\n  }\n}\n\nexport function domainSort(\n  model: UnitModel,\n  channel: ScaleChannel,\n  scaleType: ScaleType\n): undefined | true | VgSortField {\n  if (!hasDiscreteDomain(scaleType)) {\n    return undefined;\n  }\n\n  // save to cast as the only exception is the geojson type for shape, which would not generate a scale\n  const fieldDef = model.fieldDef(channel) as ScaleFieldDef<string>;\n  const sort = fieldDef.sort;\n\n  // if the sort is specified with array, use the derived sort index field\n  if (isSortArray(sort)) {\n    return {\n      op: 'min',\n      field: sortArrayIndexField(fieldDef, channel),\n      order: 'ascending'\n    };\n  }\n\n  const {stack} = model;\n  const stackDimensions = stack\n    ? [...(stack.groupbyField ? [stack.groupbyField] : []), ...stack.stackBy.map(s => s.fieldDef.field)]\n    : undefined;\n\n  // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n  if (isSortField(sort)) {\n    const isStackedMeasure = stack && !util.contains(stackDimensions, sort.field);\n    return normalizeSortField(sort, isStackedMeasure);\n  } else if (isSortByEncoding(sort)) {\n    const {encoding, order} = sort;\n    const fieldDefToSortBy = model.fieldDef(encoding);\n    const {aggregate, field} = fieldDefToSortBy;\n\n    const isStackedMeasure = stack && !util.contains(stackDimensions, field);\n\n    if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n      return normalizeSortField(\n        {\n          field: vgField(fieldDefToSortBy),\n          order\n        },\n        isStackedMeasure\n      );\n    } else if (isAggregateOp(aggregate) || !aggregate) {\n      return normalizeSortField(\n        {\n          op: aggregate as NonArgAggregateOp, // can't be argmin/argmax since we don't support them in encoding field def\n          field,\n          order\n        },\n        isStackedMeasure\n      );\n    }\n  } else if (sort === 'descending') {\n    return {\n      op: 'min',\n      field: model.vgField(channel),\n      order: 'descending'\n    };\n  } else if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n    return true;\n  }\n\n  // sort == null\n  return undefined;\n}\n\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditions apply:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nexport function canUseUnaggregatedDomain(\n  fieldDef: TypedFieldDef<string>,\n  scaleType: ScaleType\n): {valid: boolean; reason?: string} {\n  const {aggregate, type} = fieldDef;\n\n  if (!aggregate) {\n    return {\n      valid: false,\n      reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n    };\n  }\n\n  if (isString(aggregate) && !SHARED_DOMAIN_OP_INDEX[aggregate]) {\n    return {\n      valid: false,\n      reason: log.message.unaggregateDomainWithNonSharedDomainOp(aggregate)\n    };\n  }\n\n  if (type === 'quantitative') {\n    if (scaleType === 'log') {\n      return {\n        valid: false,\n        reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n      };\n    }\n  }\n\n  return {valid: true};\n}\n\n/**\n * Tie breaker for mergeValuesWithExplicit for domains. We concat the specified values.\n */\nfunction domainsTieBreaker(\n  v1: Explicit<VgNonUnionDomain[]>,\n  v2: Explicit<VgNonUnionDomain[]>,\n  property: 'domains',\n  propertyOf: 'scale'\n) {\n  if (v1.explicit && v2.explicit) {\n    log.warn(log.message.mergeConflictingDomainProperty(property, propertyOf, v1.value, v2.value));\n  }\n  // If equal score, concat the domains so that we union them later.\n  return {explicit: v1.explicit, value: [...v1.value, ...v2.value]};\n}\n\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nexport function mergeDomains(domains: VgNonUnionDomain[]): VgDomain {\n  const uniqueDomains = util.unique(\n    domains.map(domain => {\n      // ignore sort property when computing the unique domains\n      if (isDataRefDomain(domain)) {\n        const {sort: _s, ...domainWithoutSort} = domain;\n        return domainWithoutSort;\n      }\n      return domain;\n    }),\n    util.hash\n  );\n\n  const sorts: VgSortField[] = util.unique(\n    domains\n      .map(d => {\n        if (isDataRefDomain(d)) {\n          const s = d.sort;\n          if (s !== undefined && !util.isBoolean(s)) {\n            if ('op' in s && s.op === 'count') {\n              // let's make sure that if op is count, we don't use a field\n              delete s.field;\n            }\n            if (s.order === 'ascending') {\n              // drop order: ascending as it is the default\n              delete s.order;\n            }\n          }\n          return s;\n        }\n        return undefined;\n      })\n      .filter(s => s !== undefined),\n    util.hash\n  );\n\n  if (uniqueDomains.length === 0) {\n    return undefined;\n  } else if (uniqueDomains.length === 1) {\n    const domain = domains[0];\n    if (isDataRefDomain(domain) && sorts.length > 0) {\n      let sort = sorts[0];\n      if (sorts.length > 1) {\n        log.warn(log.message.MORE_THAN_ONE_SORT);\n        sort = true;\n      } else {\n        // Simplify domain sort by removing field and op when the field is the same as the domain field.\n        if (isObject(sort) && 'field' in sort) {\n          const sortField = sort.field;\n          if (domain.field === sortField) {\n            sort = sort.order ? {order: sort.order} : true;\n          }\n        }\n      }\n      return {\n        ...domain,\n        sort\n      };\n    }\n    return domain;\n  }\n\n  // only keep sort properties that work with unioned domains\n  const unionDomainSorts = util.unique<VgUnionSortField>(\n    sorts.map(s => {\n      if (util.isBoolean(s) || !('op' in s) || s.op in UNIONDOMAIN_SORT_OP_INDEX) {\n        return s as VgUnionSortField;\n      }\n      log.warn(log.message.domainSortDropped(s));\n      return true;\n    }),\n    util.hash\n  ) as VgUnionSortField[];\n\n  let sort: VgUnionSortField;\n\n  if (unionDomainSorts.length === 1) {\n    sort = unionDomainSorts[0];\n  } else if (unionDomainSorts.length > 1) {\n    log.warn(log.message.MORE_THAN_ONE_SORT);\n    sort = true;\n  }\n\n  const allData = util.unique(\n    domains.map(d => {\n      if (isDataRefDomain(d)) {\n        return d.data;\n      }\n      return null;\n    }),\n    x => x\n  );\n\n  if (allData.length === 1 && allData[0] !== null) {\n    // create a union domain of different fields with a single data source\n    const domain: VgMultiFieldsRefWithSort = {\n      data: allData[0],\n      fields: uniqueDomains.map(d => (d as VgScaleDataRefWithSort).field),\n      ...(sort ? {sort} : {})\n    };\n\n    return domain;\n  }\n\n  return {fields: uniqueDomains, ...(sort ? {sort} : {})};\n}\n\n/**\n * Return a field if a scale uses a single field.\n * Return `undefined` otherwise.\n */\nexport function getFieldFromDomain(domain: VgDomain): string {\n  if (isDataRefDomain(domain) && isString(domain.field)) {\n    return domain.field;\n  } else if (isDataRefUnionedDomain(domain)) {\n    let field;\n    for (const nonUnionDomain of domain.fields) {\n      if (isDataRefDomain(nonUnionDomain) && isString(nonUnionDomain.field)) {\n        if (!field) {\n          field = nonUnionDomain.field;\n        } else if (field !== nonUnionDomain.field) {\n          log.warn(log.message.FACETED_INDEPENDENT_DIFFERENT_SOURCES);\n          return field;\n        }\n      }\n    }\n    log.warn(log.message.FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES);\n    return field;\n  } else if (isFieldRefUnionDomain(domain)) {\n    log.warn(log.message.FACETED_INDEPENDENT_SAME_SOURCE);\n    const field = domain.fields[0];\n    return isString(field) ? field : undefined;\n  }\n\n  return undefined;\n}\n\nexport function assembleDomain(model: Model, channel: ScaleChannel) {\n  const scaleComponent: ScaleComponent = model.component.scales[channel];\n\n  const domains = scaleComponent.get('domains').map((domain: VgNonUnionDomain) => {\n    // Correct references to data as the original domain's data was determined\n    // in parseScale, which happens before parseData. Thus the original data\n    // reference can be incorrect.\n\n    if (isDataRefDomain(domain)) {\n      domain.data = model.lookupDataSource(domain.data);\n    }\n    return domain;\n  });\n\n  // domains is an array that has to be merged into a single vega domain\n  return mergeDomains(domains);\n}\n","import {Channel, isXorY, ScaleChannel} from '../../channel';\nimport {keys} from '../../util';\nimport {isVgRangeStep, VgRange, VgScale} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\nimport {assembleSelectionScaleDomain} from '../selection/assemble';\nimport {assembleDomain} from './domain';\n\nexport function assembleScales(model: Model): VgScale[] {\n  if (isLayerModel(model) || isConcatModel(model)) {\n    // For concat and layer, include scales of children too\n    return model.children.reduce((scales, child) => {\n      return scales.concat(assembleScales(child));\n    }, assembleScalesForModel(model));\n  } else {\n    // For facet, child scales would not be included in the parent's scope.\n    // For unit, there is no child.\n    return assembleScalesForModel(model);\n  }\n}\n\nexport function assembleScalesForModel(model: Model): VgScale[] {\n  return keys(model.component.scales).reduce((scales: VgScale[], channel: ScaleChannel) => {\n    const scaleComponent = model.component.scales[channel];\n    if (scaleComponent.merged) {\n      // Skipped merged scales\n      return scales;\n    }\n\n    const scale = scaleComponent.combine();\n    const {name, type, selectionExtent, domains: _d, range: _r, reverse, ...otherScaleProps} = scale;\n    const range = assembleScaleRange(scale.range, name, channel);\n\n    let domainRaw;\n    if (selectionExtent) {\n      domainRaw = assembleSelectionScaleDomain(model, selectionExtent);\n    }\n\n    const domain = assembleDomain(model, channel);\n\n    scales.push({\n      name,\n      type,\n      ...(domain ? {domain} : {}),\n      ...(domainRaw ? {domainRaw} : {}),\n      range,\n      ...(reverse !== undefined ? {reverse: reverse as any} : {}),\n      ...otherScaleProps\n    });\n\n    return scales;\n  }, [] as VgScale[]);\n}\n\nexport function assembleScaleRange(scaleRange: VgRange, scaleName: string, channel: Channel): VgRange {\n  // add signals to x/y range\n  if (isXorY(channel)) {\n    if (isVgRangeStep(scaleRange)) {\n      // For width/height step, use a signal created in layout assemble instead of a constant step.\n      return {\n        step: {signal: scaleName + '_step'}\n      };\n    }\n  }\n  return scaleRange;\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {ScaleChannel} from '../../channel';\nimport {Scale, ScaleType} from '../../scale';\nimport {SelectionExtent} from '../../selection';\nimport {some} from '../../util';\nimport {VgNonUnionDomain, VgScale} from '../../vega.schema';\nimport {Explicit, Split} from '../split';\n\n/**\n * All VgDomain property except domain.\n * (We exclude domain as we have a special \"domains\" array that allow us merge them all at once in assemble.)\n */\nexport type ScaleComponentProps = Omit<VgScale, 'domain' | 'domainRaw' | 'reverse'> & {\n  domains: VgNonUnionDomain[];\n  selectionExtent?: SelectionExtent;\n  reverse?: boolean | SignalRef; // Need override since Vega doesn't official support scale reverse yet (though it does in practice)\n};\n\nexport type Range = ScaleComponentProps['range'];\n\nexport class ScaleComponent extends Split<ScaleComponentProps> {\n  public merged = false;\n\n  constructor(name: string, typeWithExplicit: Explicit<ScaleType>) {\n    super(\n      {}, // no initial explicit property\n      {name} // name as initial implicit property\n    );\n    this.setWithExplicit('type', typeWithExplicit);\n  }\n\n  /**\n   * Whether the scale definitely includes zero in the domain\n   */\n  public domainDefinitelyIncludesZero() {\n    if (this.get('zero') !== false) {\n      return true;\n    }\n    return some(this.get('domains'), d => isArray(d) && d.length === 2 && d[0] <= 0 && d[1] >= 0);\n  }\n}\n\nexport type ScaleComponentIndex = Partial<Record<ScaleChannel, ScaleComponent>>;\n\nexport type ScaleIndex = Partial<Record<ScaleChannel, Scale>>;\n","import {RangeScheme, SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {\n  ANGLE,\n  Channel,\n  COLOR,\n  FILL,\n  FILLOPACITY,\n  isXorY,\n  OPACITY,\n  RADIUS,\n  ScaleChannel,\n  SCALE_CHANNELS,\n  SHAPE,\n  SIZE,\n  STROKE,\n  STROKEDASH,\n  STROKEOPACITY,\n  STROKEWIDTH,\n  THETA,\n  X,\n  Y\n} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, ScaleFieldDef} from '../../channeldef';\nimport {Config, getViewConfigDiscreteSize, getViewConfigDiscreteStep, ViewConfig} from '../../config';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {\n  channelScalePropertyIncompatability,\n  Domain,\n  hasContinuousDomain,\n  hasDiscreteDomain,\n  isContinuousToDiscrete,\n  isExtendedScheme,\n  Scale,\n  scaleTypeSupportProperty,\n  Scheme\n} from '../../scale';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\nimport * as util from '../../util';\nimport {isSignalRef, VgRange} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex} from './component';\nimport {signalOrStringValue} from '../common';\n\nexport const RANGE_PROPERTIES: (keyof Scale)[] = ['range', 'scheme'];\n\nfunction getSizeChannel(channel: ScaleChannel) {\n  return channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n}\n\nexport function parseUnitScaleRange(model: UnitModel) {\n  const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n  // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n  for (const channel of SCALE_CHANNELS) {\n    const localScaleCmpt = localScaleComponents[channel];\n    if (!localScaleCmpt) {\n      continue;\n    }\n\n    const rangeWithExplicit = parseRangeForChannel(channel, model);\n\n    localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n  }\n}\n\nfunction getBinStepSignal(model: UnitModel, channel: 'x' | 'y'): SignalRefWrapper {\n  const fieldDef = model.fieldDef(channel);\n\n  if (fieldDef && fieldDef.bin && isBinning(fieldDef.bin)) {\n    const binSignal = getBinSignalName(model, fieldDef.field, fieldDef.bin);\n\n    // TODO: extract this to be range step signal\n    const sizeType = getSizeChannel(channel);\n    const sizeSignal = model.getName(sizeType);\n    return new SignalRefWrapper(() => {\n      const updatedName = model.getSignalName(binSignal);\n      const binCount = `(${updatedName}.stop - ${updatedName}.start) / ${updatedName}.step`;\n      return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n    });\n  }\n  return undefined;\n}\n\n/**\n * Return mixins that includes one of the Vega range types (explicit range, range.step, range.scheme).\n */\nexport function parseRangeForChannel(channel: ScaleChannel, model: UnitModel): Explicit<VgRange> {\n  const specifiedScale = model.specifiedScales[channel];\n  const {size} = model;\n\n  const mergedScaleCmpt = model.getScaleComponent(channel);\n  const scaleType = mergedScaleCmpt.get('type');\n\n  // Check if any of the range properties is specified.\n  // If so, check if it is compatible and make sure that we only output one of the properties\n  for (const property of RANGE_PROPERTIES) {\n    if (specifiedScale[property] !== undefined) {\n      const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n      const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n      if (!supportedByScaleType) {\n        log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n      } else if (channelIncompatability) {\n        // channel\n        log.warn(channelIncompatability);\n      } else {\n        switch (property) {\n          case 'range':\n            if (isArray(specifiedScale.range) && isXorY(channel)) {\n              return makeExplicit(\n                specifiedScale.range.map(v => {\n                  if (v === 'width' || v === 'height') {\n                    // get signal for width/height\n\n                    // Just like default range logic below, we use SignalRefWrapper to account for potential merges and renames.\n\n                    const sizeSignal = model.getName(v);\n                    const getSignalName = model.getSignalName.bind(model);\n                    return SignalRefWrapper.fromName(getSignalName, sizeSignal);\n                  }\n                  return v;\n                })\n              );\n            }\n            return makeExplicit(specifiedScale.range);\n          case 'scheme':\n            return makeExplicit(parseScheme(specifiedScale[property]));\n        }\n      }\n    }\n  }\n\n  if (channel === X || channel === Y) {\n    const sizeChannel = channel === X ? 'width' : 'height';\n    const sizeValue = size[sizeChannel];\n    if (isStep(sizeValue)) {\n      if (hasDiscreteDomain(scaleType)) {\n        return makeExplicit({step: sizeValue.step});\n      } else {\n        log.warn(log.message.stepDropped(sizeChannel));\n      }\n    }\n  }\n\n  return makeImplicit(defaultRange(channel, model));\n}\n\nfunction parseScheme(scheme: Scheme | SignalRef): RangeScheme {\n  if (isExtendedScheme(scheme)) {\n    return {\n      scheme: scheme.name,\n      ...util.omit(scheme, ['name'])\n    };\n  }\n  return {scheme: scheme};\n}\n\nfunction defaultRange(channel: ScaleChannel, model: UnitModel): VgRange {\n  const {size, config, mark, encoding} = model;\n\n  const getSignalName = model.getSignalName.bind(model);\n\n  const {type} = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef<string> | ScaleDatumDef;\n\n  const mergedScaleCmpt = model.getScaleComponent(channel);\n  const scaleType = mergedScaleCmpt.get('type');\n\n  const {domain, domainMid} = model.specifiedScales[channel];\n\n  switch (channel) {\n    case X:\n    case Y: {\n      // If there is no explicit width/height for discrete x/y scales\n      if (util.contains(['point', 'band'], scaleType)) {\n        if (channel === X && !size.width) {\n          const w = getViewConfigDiscreteSize(config.view, 'width');\n          if (isStep(w)) {\n            return w;\n          }\n        } else if (channel === Y && !size.height) {\n          const h = getViewConfigDiscreteSize(config.view, 'height');\n          if (isStep(h)) {\n            return h;\n          }\n        }\n      }\n\n      // If step is null, use zero to width or height.\n      // Note that we use SignalRefWrapper to account for potential merges and renames.\n\n      const sizeType = getSizeChannel(channel);\n      const sizeSignal = model.getName(sizeType);\n\n      if (channel === Y && hasContinuousDomain(scaleType)) {\n        // For y continuous scale, we have to start from the height as the bottom part has the max value.\n        return [SignalRefWrapper.fromName(getSignalName, sizeSignal), 0];\n      } else {\n        return [0, SignalRefWrapper.fromName(getSignalName, sizeSignal)];\n      }\n    }\n\n    case SIZE: {\n      // TODO: support custom rangeMin, rangeMax\n      const zero = model.component.scales[channel].get('zero');\n      const rangeMin = sizeRangeMin(mark, zero, config);\n      const rangeMax = sizeRangeMax(mark, size, model, config);\n      if (isContinuousToDiscrete(scaleType)) {\n        return interpolateRange(\n          rangeMin,\n          rangeMax,\n          defaultContinuousToDiscreteCount(scaleType, config, domain, channel)\n        );\n      } else {\n        return [rangeMin, rangeMax];\n      }\n    }\n\n    case THETA:\n      return [0, Math.PI * 2];\n\n    case ANGLE:\n      // TODO: add config.scale.min/maxAngleDegree (for point and text) and config.scale.min/maxAngleRadian (for arc) once we add arc marks.\n      // (It's weird to add just config.scale.min/maxAngleDegree for now)\n      return [0, 360];\n\n    case RADIUS: {\n      // max radius = half od min(width,height)\n      return [\n        0,\n        new SignalRefWrapper(() => {\n          const w = model.getSignalName('width');\n          const h = model.getSignalName('height');\n          return `min(${w},${h})/2`;\n        })\n      ];\n    }\n\n    case STROKEWIDTH:\n      // TODO: support custom rangeMin, rangeMax\n      return [config.scale.minStrokeWidth, config.scale.maxStrokeWidth];\n    case STROKEDASH:\n      return [\n        // TODO: add this to Vega's config.range?\n        [1, 0],\n        [4, 2],\n        [2, 1],\n        [1, 1],\n        [1, 2, 4, 2]\n      ];\n    case SHAPE:\n      return 'symbol';\n    case COLOR:\n    case FILL:\n    case STROKE:\n      if (scaleType === 'ordinal') {\n        // Only nominal data uses ordinal scale by default\n        return type === 'nominal' ? 'category' : 'ordinal';\n      } else {\n        if (domainMid !== undefined) {\n          return 'diverging';\n        } else {\n          return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n        }\n      }\n    case OPACITY:\n    case FILLOPACITY:\n    case STROKEOPACITY:\n      // TODO: support custom rangeMin, rangeMax\n      return [config.scale.minOpacity, config.scale.maxOpacity];\n  }\n  /* istanbul ignore next: should never reach here */\n  throw new Error(`Scale range undefined for channel ${channel}`);\n}\n\nexport function defaultContinuousToDiscreteCount(\n  scaleType: 'quantile' | 'quantize' | 'threshold',\n  config: Config,\n  domain: Domain,\n  channel: Channel\n) {\n  switch (scaleType) {\n    case 'quantile':\n      return config.scale.quantileCount;\n    case 'quantize':\n      return config.scale.quantizeCount;\n    case 'threshold':\n      if (domain !== undefined && isArray(domain)) {\n        return domain.length + 1;\n      } else {\n        log.warn(log.message.domainRequiredForThresholdScale(channel));\n        // default threshold boundaries for threshold scale since domain has cardinality of 2\n        return 3;\n      }\n  }\n}\n\n/**\n * Returns the linear interpolation of the range according to the cardinality\n *\n * @param rangeMin start of the range\n * @param rangeMax end of the range\n * @param cardinality number of values in the output range\n */\nexport function interpolateRange(\n  rangeMin: number | SignalRef,\n  rangeMax: number | SignalRef,\n  cardinality: number\n): SignalRef {\n  // always return a signal since it's better to compute the sequence in Vega later\n  const f = () => {\n    const rMax = signalOrStringValue(rangeMax);\n    const rMin = signalOrStringValue(rangeMin);\n    const step = `(${rMax} - ${rMin}) / (${cardinality} - 1)`;\n    return `sequence(${rMin}, ${rMax} + ${step}, ${step})`;\n  };\n  if (isSignalRef(rangeMax)) {\n    return new SignalRefWrapper(f);\n  } else {\n    return {signal: f()};\n  }\n}\n\nfunction sizeRangeMin(mark: Mark, zero: boolean | SignalRef, config: Config): number | SignalRef {\n  if (zero) {\n    if (isSignalRef(zero)) {\n      return {signal: `${zero.signal} ? 0 : ${sizeRangeMin(mark, false, config)}`};\n    } else {\n      return 0;\n    }\n  }\n  switch (mark) {\n    case 'bar':\n    case 'tick':\n      return config.scale.minBandSize;\n    case 'line':\n    case 'trail':\n    case 'rule':\n      return config.scale.minStrokeWidth;\n    case 'text':\n      return config.scale.minFontSize;\n    case 'point':\n    case 'square':\n    case 'circle':\n      return config.scale.minSize;\n  }\n  /* istanbul ignore next: should never reach here */\n  // sizeRangeMin not implemented for the mark\n  throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\nexport const MAX_SIZE_RANGE_STEP_RATIO = 0.95;\n\nfunction sizeRangeMax(mark: Mark, size: LayoutSizeMixins, model: UnitModel, config: Config): number | SignalRef {\n  const xyStepSignals = {\n    x: getBinStepSignal(model, 'x'),\n    y: getBinStepSignal(model, 'y')\n  };\n\n  switch (mark) {\n    case 'bar':\n    case 'tick': {\n      if (config.scale.maxBandSize !== undefined) {\n        return config.scale.maxBandSize;\n      }\n      const min = minXYStep(size, xyStepSignals, config.view);\n\n      if (isNumber(min)) {\n        return min - 1;\n      } else {\n        return new SignalRefWrapper(() => `${min.signal} - 1`);\n      }\n    }\n    case 'line':\n    case 'trail':\n    case 'rule':\n      return config.scale.maxStrokeWidth;\n    case 'text':\n      return config.scale.maxFontSize;\n    case 'point':\n    case 'square':\n    case 'circle': {\n      if (config.scale.maxSize) {\n        return config.scale.maxSize;\n      }\n\n      const pointStep = minXYStep(size, xyStepSignals, config.view);\n      if (isNumber(pointStep)) {\n        return Math.pow(MAX_SIZE_RANGE_STEP_RATIO * pointStep, 2);\n      } else {\n        return new SignalRefWrapper(() => `pow(${MAX_SIZE_RANGE_STEP_RATIO} * ${pointStep.signal}, 2)`);\n      }\n    }\n  }\n  /* istanbul ignore next: should never reach here */\n  // sizeRangeMax not implemented for the mark\n  throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYStep(\n  size: LayoutSizeMixins,\n  xyStepSignals: {x?: SignalRefWrapper; y?: SignalRefWrapper},\n  viewConfig: ViewConfig\n): number | SignalRef {\n  const widthStep = isStep(size.width) ? size.width.step : getViewConfigDiscreteStep(viewConfig, 'width');\n  const heightStep = isStep(size.height) ? size.height.step : getViewConfigDiscreteStep(viewConfig, 'height');\n\n  if (xyStepSignals.x || xyStepSignals.y) {\n    return new SignalRefWrapper(() => {\n      const exprs = [\n        xyStepSignals.x ? xyStepSignals.x.signal : widthStep,\n        xyStepSignals.y ? xyStepSignals.y.signal : heightStep\n      ];\n      return `min(${exprs.join(', ')})`;\n    });\n  }\n\n  return Math.min(widthStep, heightStep);\n}\n","import {SignalRef, TimeInterval} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../bin';\nimport {\n  Channel,\n  COLOR,\n  FILL,\n  POLAR_POSITION_SCALE_CHANNELS,\n  POSITION_SCALE_CHANNELS,\n  POSITION_SCALE_CHANNEL_INDEX,\n  STROKE\n} from '../../channel';\nimport {\n  getFieldDef,\n  getFieldOrDatumDef,\n  isFieldDef,\n  ScaleDatumDef,\n  ScaleFieldDef,\n  TypedFieldDef\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport * as log from '../../log';\nimport {Mark, MarkDef, RectConfig} from '../../mark';\nimport {\n  channelScalePropertyIncompatability,\n  Domain,\n  hasContinuousDomain,\n  isContinuousToContinuous,\n  isContinuousToDiscrete,\n  Scale,\n  ScaleConfig,\n  ScaleType,\n  scaleTypeSupportProperty\n} from '../../scale';\nimport {Sort} from '../../sort';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {contains, getFirstDefined, keys} from '../../util';\nimport {isSignalRef, VgScale} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex, ScaleComponentProps} from './component';\nimport {parseUnitScaleRange} from './range';\n\nexport function parseScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n  if (isUnitModel(model)) {\n    parseUnitScaleProperty(model, property);\n  } else {\n    parseNonUnitScaleProperty(model, property);\n  }\n}\n\nfunction parseUnitScaleProperty(model: UnitModel, property: keyof (Scale | ScaleComponentProps)) {\n  const localScaleComponents: ScaleComponentIndex = model.component.scales;\n  const {config, encoding, markDef, specifiedScales} = model;\n\n  for (const channel of keys(localScaleComponents)) {\n    const specifiedScale = specifiedScales[channel];\n    const localScaleCmpt = localScaleComponents[channel];\n    const mergedScaleCmpt = model.getScaleComponent(channel);\n    const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef<string, Type> | ScaleDatumDef;\n\n    const specifiedValue = specifiedScale[property];\n    const scaleType = mergedScaleCmpt.get('type');\n    const scalePadding = mergedScaleCmpt.get('padding');\n    const scalePaddingInner = mergedScaleCmpt.get('paddingInner');\n\n    const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n    const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n\n    if (specifiedValue !== undefined) {\n      // If there is a specified value, check if it is compatible with scale type and channel\n      if (!supportedByScaleType) {\n        log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n      } else if (channelIncompatability) {\n        // channel\n        log.warn(channelIncompatability);\n      }\n    }\n    if (supportedByScaleType && channelIncompatability === undefined) {\n      if (specifiedValue !== undefined) {\n        // copyKeyFromObject ensures type safety\n        localScaleCmpt.copyKeyFromObject(property, specifiedScale);\n      } else {\n        const value =\n          property in scaleRules\n            ? scaleRules[property]({\n                model,\n                channel,\n                fieldOrDatumDef,\n                scaleType,\n                scalePadding,\n                scalePaddingInner,\n                domain: specifiedScale.domain,\n                markDef,\n                config\n              })\n            : config.scale[property];\n        if (value !== undefined) {\n          localScaleCmpt.set(property, value, false);\n        }\n      }\n    }\n  }\n}\n\nexport interface ScaleRuleParams {\n  model: Model;\n  channel: Channel;\n  fieldOrDatumDef: ScaleFieldDef<string, Type> | ScaleDatumDef;\n  scaleType: ScaleType;\n  scalePadding: number | SignalRef;\n  scalePaddingInner: number | SignalRef;\n  domain: Scale['domain'];\n  markDef: MarkDef;\n  config: Config;\n}\n\nexport const scaleRules: {\n  [k in keyof Scale]?: (params: ScaleRuleParams) => Scale[k];\n} = {\n  bins: ({model, fieldOrDatumDef}) => (isFieldDef(fieldOrDatumDef) ? bins(model, fieldOrDatumDef) : undefined),\n\n  interpolate: ({channel, fieldOrDatumDef}) => interpolate(channel, fieldOrDatumDef.type),\n\n  nice: ({scaleType, channel, fieldOrDatumDef}) => nice(scaleType, channel, fieldOrDatumDef),\n\n  padding: ({channel, scaleType, fieldOrDatumDef, markDef, config}) =>\n    padding(channel, scaleType, config.scale, fieldOrDatumDef, markDef, config.bar),\n\n  paddingInner: ({scalePadding, channel, markDef, config}) =>\n    paddingInner(scalePadding, channel, markDef.type, config.scale),\n\n  paddingOuter: ({scalePadding, channel, scaleType, markDef, scalePaddingInner, config}) =>\n    paddingOuter(scalePadding, channel, scaleType, markDef.type, scalePaddingInner, config.scale),\n\n  reverse: ({fieldOrDatumDef, scaleType, channel, config}) => {\n    const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined;\n    return reverse(scaleType, sort, channel, config.scale);\n  },\n  zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType}) =>\n    zero(channel, fieldOrDatumDef, domain, markDef, scaleType)\n};\n\n// This method is here rather than in range.ts to avoid circular dependency.\nexport function parseScaleRange(model: Model) {\n  if (isUnitModel(model)) {\n    parseUnitScaleRange(model);\n  } else {\n    parseNonUnitScaleProperty(model, 'range');\n  }\n}\n\nexport function parseNonUnitScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n  const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n  for (const child of model.children) {\n    if (property === 'range') {\n      parseScaleRange(child);\n    } else {\n      parseScaleProperty(child, property);\n    }\n  }\n\n  for (const channel of keys(localScaleComponents)) {\n    let valueWithExplicit: Explicit<any>;\n\n    for (const child of model.children) {\n      const childComponent = child.component.scales[channel];\n      if (childComponent) {\n        const childValueWithExplicit = childComponent.getWithExplicit(property);\n        valueWithExplicit = mergeValuesWithExplicit<VgScale, any>(\n          valueWithExplicit,\n          childValueWithExplicit,\n          property,\n          'scale',\n          tieBreakByComparing<VgScale, any>((v1, v2) => {\n            switch (property) {\n              case 'range':\n                // For step, prefer larger step\n                if (v1.step && v2.step) {\n                  return v1.step - v2.step;\n                }\n                return 0;\n              // TODO: precedence rule for other properties\n            }\n            return 0;\n          })\n        );\n      }\n    }\n    localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n  }\n}\n\nexport function bins(model: Model, fieldDef: TypedFieldDef<string>) {\n  const bin = fieldDef.bin;\n  if (isBinning(bin)) {\n    const binSignal = getBinSignalName(model, fieldDef.field, bin);\n    return new SignalRefWrapper(() => {\n      return model.getSignalName(binSignal);\n    });\n  } else if (isBinned(bin) && isBinParams(bin) && bin.step !== undefined) {\n    // start and stop will be determined from the scale domain\n    return {\n      step: bin.step\n    };\n  }\n  return undefined;\n}\n\nexport function interpolate(channel: Channel, type: Type): Scale['interpolate'] {\n  if (contains([COLOR, FILL, STROKE], channel) && type !== 'nominal') {\n    return 'hcl';\n  }\n  return undefined;\n}\n\nexport function nice(\n  scaleType: ScaleType,\n  channel: Channel,\n  fieldOrDatumDef: TypedFieldDef<string> | ScaleDatumDef\n): boolean | TimeInterval {\n  if (getFieldDef(fieldOrDatumDef)?.bin || util.contains([ScaleType.TIME, ScaleType.UTC], scaleType)) {\n    return undefined;\n  }\n  return channel in POSITION_SCALE_CHANNEL_INDEX ? true : undefined;\n}\n\nexport function padding(\n  channel: Channel,\n  scaleType: ScaleType,\n  scaleConfig: ScaleConfig,\n  fieldOrDatumDef: TypedFieldDef<string> | ScaleDatumDef,\n  markDef: MarkDef,\n  barConfig: RectConfig\n) {\n  if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n    if (isContinuousToContinuous(scaleType)) {\n      if (scaleConfig.continuousPadding !== undefined) {\n        return scaleConfig.continuousPadding;\n      }\n\n      const {type, orient} = markDef;\n      if (type === 'bar' && !(isFieldDef(fieldOrDatumDef) && (fieldOrDatumDef.bin || fieldOrDatumDef.timeUnit))) {\n        if ((orient === 'vertical' && channel === 'x') || (orient === 'horizontal' && channel === 'y')) {\n          return barConfig.continuousBandSize;\n        }\n      }\n    }\n\n    if (scaleType === ScaleType.POINT) {\n      return scaleConfig.pointPadding;\n    }\n  }\n  return undefined;\n}\n\nexport function paddingInner(paddingValue: number | SignalRef, channel: Channel, mark: Mark, scaleConfig: ScaleConfig) {\n  if (paddingValue !== undefined) {\n    // If user has already manually specified \"padding\", no need to add default paddingInner.\n    return undefined;\n  }\n\n  if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n    // Padding is only set for X and Y by default.\n    // Basically it doesn't make sense to add padding for color and size.\n\n    // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n\n    const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner} = scaleConfig;\n\n    return getFirstDefined(bandPaddingInner, mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner);\n  }\n  return undefined;\n}\n\nexport function paddingOuter(\n  paddingValue: number | SignalRef,\n  channel: Channel,\n  scaleType: ScaleType,\n  mark: Mark,\n  paddingInnerValue: number | SignalRef,\n  scaleConfig: ScaleConfig\n) {\n  if (paddingValue !== undefined) {\n    // If user has already manually specified \"padding\", no need to add default paddingOuter.\n    return undefined;\n  }\n\n  if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n    // Padding is only set for X and Y by default.\n    // Basically it doesn't make sense to add padding for color and size.\n    if (scaleType === ScaleType.BAND) {\n      const {bandPaddingOuter} = scaleConfig;\n\n      return getFirstDefined(\n        bandPaddingOuter,\n        /* By default, paddingOuter is paddingInner / 2. The reason is that\n          size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n          and we want the width/height to be integer by default.\n          Note that step (by default) and cardinality are integers.) */\n        isSignalRef(paddingInnerValue) ? {signal: `${paddingInnerValue.signal}/2`} : paddingInnerValue / 2\n      );\n    }\n  }\n  return undefined;\n}\n\nexport function reverse(scaleType: ScaleType, sort: Sort<string>, channel: Channel, scaleConfig: ScaleConfig) {\n  if (channel === 'x' && scaleConfig.xReverse !== undefined) {\n    if (hasContinuousDomain(scaleType) && sort === 'descending') {\n      if (isSignalRef(scaleConfig.xReverse)) {\n        return {signal: `!${scaleConfig.xReverse.signal}`};\n      } else {\n        return !scaleConfig.xReverse;\n      }\n    }\n    return scaleConfig.xReverse;\n  }\n\n  if (hasContinuousDomain(scaleType) && sort === 'descending') {\n    // For continuous domain scales, Vega does not support domain sort.\n    // Thus, we reverse range instead if sort is descending\n    return true;\n  }\n  return undefined;\n}\n\nexport function zero(\n  channel: Channel,\n  fieldDef: TypedFieldDef<string> | ScaleDatumDef,\n  specifiedDomain: Domain,\n  markDef: MarkDef,\n  scaleType: ScaleType\n) {\n  // If users explicitly provide a domain range, we should not augment zero as that will be unexpected.\n  const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated';\n  if (hasCustomDomain) {\n    if (hasContinuousDomain(scaleType)) {\n      if (isArray(specifiedDomain)) {\n        const first = specifiedDomain[0];\n        const last = specifiedDomain[specifiedDomain.length - 1];\n\n        if (first <= 0 && last >= 0) {\n          // if the domain includes zero, make zero remains true\n          return true;\n        }\n      }\n      return false;\n    }\n  }\n\n  // If there is no custom domain, return true only for the following cases:\n\n  // 1) using quantitative field with size\n  // While this can be either ratio or interval fields, our assumption is that\n  // ratio are more common. However, if the scaleType is discretizing scale, we want to return\n  // false so that range doesn't start at zero\n  if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) {\n    return true;\n  }\n\n  // 2) non-binned, quantitative x-scale or y-scale\n  // (For binning, we should not include zero by default because binning are calculated without zero.)\n  if (\n    !(isFieldDef(fieldDef) && fieldDef.bin) &&\n    util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel)\n  ) {\n    const {orient, type} = markDef;\n    if (contains(['bar', 'area', 'line', 'trail'], type)) {\n      if ((orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x')) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n  return false;\n}\n","import {isBinning} from '../../bin';\nimport {Channel, isColorChannel, isScaleChannel, rangeType} from '../../channel';\nimport {DatumDef, isFieldDef, isPositionFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {channelSupportScaleType, Scale, ScaleType, scaleTypeSupportDataType} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport * as util from '../../util';\nimport {POLAR_POSITION_SCALE_CHANNEL_INDEX, POSITION_SCALE_CHANNEL_INDEX} from './../../channel';\n\nexport type RangeType = 'continuous' | 'discrete' | 'flexible' | undefined;\n\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nexport function scaleType(\n  specifiedScale: Scale,\n  channel: Channel,\n  fieldDef: TypedFieldDef<string> | DatumDef,\n  mark: Mark\n): ScaleType {\n  const defaultScaleType = defaultType(channel, fieldDef, mark);\n  const {type} = specifiedScale;\n\n  if (!isScaleChannel(channel)) {\n    // There is no scale for these channels\n    return null;\n  }\n  if (type !== undefined) {\n    // Check if explicitly specified scale type is supported by the channel\n    if (!channelSupportScaleType(channel, type)) {\n      log.warn(log.message.scaleTypeNotWorkWithChannel(channel, type, defaultScaleType));\n      return defaultScaleType;\n    }\n\n    // Check if explicitly specified scale type is supported by the data type\n    if (isFieldDef(fieldDef) && !scaleTypeSupportDataType(type, fieldDef.type)) {\n      log.warn(log.message.scaleTypeNotWorkWithFieldDef(type, defaultScaleType));\n      return defaultScaleType;\n    }\n\n    return type;\n  }\n\n  return defaultScaleType;\n}\n\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(channel: Channel, fieldDef: TypedFieldDef<string> | ScaleDatumDef, mark: Mark): ScaleType {\n  switch (fieldDef.type) {\n    case 'nominal':\n    case 'ordinal':\n      if (isColorChannel(channel) || rangeType(channel) === 'discrete') {\n        if (channel === 'shape' && fieldDef.type === 'ordinal') {\n          log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n        }\n        return 'ordinal';\n      }\n\n      if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n        if (util.contains(['rect', 'bar', 'image', 'rule'], mark)) {\n          // The rect/bar mark should fit into a band.\n          // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n          return 'band';\n        }\n      } else if (mark === 'arc' && channel in POLAR_POSITION_SCALE_CHANNEL_INDEX) {\n        return 'band';\n      }\n\n      if (fieldDef.band !== undefined || (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis?.tickBand)) {\n        return 'band';\n      }\n      // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n      return 'point';\n\n    case 'temporal':\n      if (isColorChannel(channel)) {\n        return 'time';\n      } else if (rangeType(channel) === 'discrete') {\n        log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n        // TODO: consider using quantize (equivalent to binning) once we have it\n        return 'ordinal';\n      } else if (isFieldDef(fieldDef) && fieldDef.timeUnit && normalizeTimeUnit(fieldDef.timeUnit).utc) {\n        return 'utc';\n      }\n      return 'time';\n\n    case 'quantitative':\n      if (isColorChannel(channel)) {\n        if (isFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n          return 'bin-ordinal';\n        }\n\n        return 'linear';\n      } else if (rangeType(channel) === 'discrete') {\n        log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n        // TODO: consider using quantize (equivalent to binning) once we have it\n        return 'ordinal';\n      }\n\n      return 'linear';\n\n    case 'geojson':\n      return undefined;\n  }\n\n  /* istanbul ignore next: should never reach this */\n  throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n","import {ScaleChannel, SCALE_CHANNELS, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport {GEOSHAPE} from '../../mark';\nimport {\n  NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES,\n  scaleCompatible,\n  ScaleType,\n  scaleTypePrecedence\n} from '../../scale';\nimport {GEOJSON} from '../../type';\nimport {keys} from '../../util';\nimport {VgScale} from '../../vega.schema';\nimport {isUnitModel, Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\nimport {parseScaleDomain} from './domain';\nimport {parseScaleProperty, parseScaleRange} from './properties';\nimport {scaleType} from './type';\n\nexport function parseScales(model: Model, {ignoreRange}: {ignoreRange?: boolean} = {}) {\n  parseScaleCore(model);\n  parseScaleDomain(model);\n  for (const prop of NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES) {\n    parseScaleProperty(model, prop);\n  }\n  if (!ignoreRange) {\n    // range depends on zero\n    parseScaleRange(model);\n  }\n}\n\nexport function parseScaleCore(model: Model) {\n  if (isUnitModel(model)) {\n    model.component.scales = parseUnitScaleCore(model);\n  } else {\n    model.component.scales = parseNonUnitScaleCore(model);\n  }\n}\n\n/**\n * Parse scales for all channels of a model.\n */\nfunction parseUnitScaleCore(model: UnitModel): ScaleComponentIndex {\n  const {encoding, mark} = model;\n\n  return SCALE_CHANNELS.reduce((scaleComponents: ScaleComponentIndex, channel: ScaleChannel) => {\n    const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as TypedFieldDef<string> | ScaleDatumDef; // must be typed def to have scale\n\n    // Don't generate scale for shape of geoshape\n    if (fieldOrDatumDef && mark === GEOSHAPE && channel === SHAPE && fieldOrDatumDef.type === GEOJSON) {\n      return scaleComponents;\n    }\n    let specifiedScale = fieldOrDatumDef && fieldOrDatumDef['scale'];\n\n    if (fieldOrDatumDef && specifiedScale !== null && specifiedScale !== false) {\n      specifiedScale = specifiedScale ?? {};\n\n      const sType = scaleType(specifiedScale, channel, fieldOrDatumDef, mark);\n      scaleComponents[channel] = new ScaleComponent(model.scaleName(channel + '', true), {\n        value: sType,\n        explicit: specifiedScale.type === sType\n      });\n    }\n\n    return scaleComponents;\n  }, {});\n}\n\nconst scaleTypeTieBreaker = tieBreakByComparing(\n  (st1: ScaleType, st2: ScaleType) => scaleTypePrecedence(st1) - scaleTypePrecedence(st2)\n);\n\nfunction parseNonUnitScaleCore(model: Model) {\n  const scaleComponents: ScaleComponentIndex = (model.component.scales = {});\n\n  const scaleTypeWithExplicitIndex: Partial<Record<ScaleChannel, Explicit<ScaleType>>> = {};\n  const resolve = model.component.resolve;\n\n  // Parse each child scale and determine if a particular channel can be merged.\n  for (const child of model.children) {\n    parseScaleCore(child);\n\n    // Instead of always merging right away -- check if it is compatible to merge first!\n    for (const channel of keys(child.component.scales)) {\n      // if resolve is undefined, set default first\n      resolve.scale[channel] = resolve.scale[channel] ?? defaultScaleResolve(channel, model);\n\n      if (resolve.scale[channel] === 'shared') {\n        const explicitScaleType = scaleTypeWithExplicitIndex[channel];\n        const childScaleType = child.component.scales[channel].getWithExplicit('type');\n\n        if (explicitScaleType) {\n          if (scaleCompatible(explicitScaleType.value, childScaleType.value)) {\n            // merge scale component if type are compatible\n            scaleTypeWithExplicitIndex[channel] = mergeValuesWithExplicit<VgScale, ScaleType>(\n              explicitScaleType,\n              childScaleType,\n              'type',\n              'scale',\n              scaleTypeTieBreaker\n            );\n          } else {\n            // Otherwise, update conflicting channel to be independent\n            resolve.scale[channel] = 'independent';\n            // Remove from the index so they don't get merged\n            delete scaleTypeWithExplicitIndex[channel];\n          }\n        } else {\n          scaleTypeWithExplicitIndex[channel] = childScaleType;\n        }\n      }\n    }\n  }\n\n  // Merge each channel listed in the index\n  for (const channel of keys(scaleTypeWithExplicitIndex)) {\n    // Create new merged scale component\n    const name = model.scaleName(channel, true);\n    const typeWithExplicit = scaleTypeWithExplicitIndex[channel];\n    scaleComponents[channel] = new ScaleComponent(name, typeWithExplicit);\n\n    // rename each child and mark them as merged\n    for (const child of model.children) {\n      const childScale = child.component.scales[channel];\n      if (childScale) {\n        child.renameScale(childScale.get('name'), name);\n        childScale.merged = true;\n      }\n    }\n  }\n\n  return scaleComponents;\n}\n","import {\n  AnchorValue,\n  Axis as VgAxis,\n  Legend as VgLegend,\n  NewSignal,\n  Projection as VgProjection,\n  SignalRef,\n  Title as VgTitle\n} from 'vega';\nimport {\n  Channel,\n  FACET_CHANNELS,\n  getPositionScaleChannel,\n  isChannel,\n  isScaleChannel,\n  ScaleChannel,\n  SingleDefChannel\n} from '../channel';\nimport {ChannelDef, FieldDef, FieldRefOption, getFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {Data, DataSourceType} from '../data';\nimport {forEach, reduce} from '../encoding';\nimport * as log from '../log';\nimport {Resolve} from '../resolve';\nimport {hasDiscreteDomain} from '../scale';\nimport {isFacetSpec} from '../spec';\nimport {\n  extractCompositionLayout,\n  GenericCompositionLayoutWithColumns,\n  LayoutSizeMixins,\n  SpecType,\n  ViewBackground\n} from '../spec/base';\nimport {NormalizedSpec} from '../spec/index';\nimport {extractTitleConfig, isText, TitleParams} from '../title';\nimport {normalizeTransform, Transform} from '../transform';\nimport {contains, Dict, duplicate, keys, varName, isEmpty} from '../util';\nimport {isVgRangeStep, VgData, VgEncodeEntry, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxes} from './axis/assemble';\nimport {AxisComponentIndex} from './axis/component';\nimport {signalOrValueRef} from './common';\nimport {ConcatModel} from './concat';\nimport {DataComponent} from './data';\nimport {FacetModel} from './facet';\nimport {assembleHeaderGroups, assembleLayoutTitleBand, assembleTitleGroup} from './header/assemble';\nimport {HEADER_CHANNELS, LayoutHeaderComponent} from './header/component';\nimport {LayerModel} from './layer';\nimport {sizeExpr} from './layoutsize/assemble';\nimport {\n  getSizeTypeFromLayoutSizeType,\n  LayoutSizeComponent,\n  LayoutSizeIndex,\n  LayoutSizeType\n} from './layoutsize/component';\nimport {assembleLegends} from './legend/assemble';\nimport {LegendComponentIndex} from './legend/component';\nimport {parseLegend} from './legend/parse';\nimport {assembleProjections} from './projection/assemble';\nimport {ProjectionComponent} from './projection/component';\nimport {parseProjection} from './projection/parse';\nimport {assembleScales} from './scale/assemble';\nimport {ScaleComponent, ScaleComponentIndex} from './scale/component';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {parseScales} from './scale/parse';\nimport {SelectionComponent} from './selection';\nimport {Split} from './split';\nimport {UnitModel} from './unit';\n\n/**\n * Composable Components that are intermediate results of the parsing phase of the\n * compilations. The components represents parts of the specification in a form that\n * can be easily merged (during parsing for composite specs).\n * In addition, these components are easily transformed into Vega specifications\n * during the \"assemble\" phase, which is the last phase of the compilation step.\n */\nexport interface Component {\n  data: DataComponent;\n\n  layoutSize: LayoutSizeComponent;\n\n  layoutHeaders: {\n    row?: LayoutHeaderComponent;\n    column?: LayoutHeaderComponent;\n    facet?: LayoutHeaderComponent;\n  };\n\n  mark: VgMarkGroup[];\n  scales: ScaleComponentIndex;\n  projection: ProjectionComponent;\n  selection: Dict<SelectionComponent>;\n\n  /** Dictionary mapping channel to VgAxis definition */\n  axes: AxisComponentIndex;\n\n  /** Dictionary mapping channel to VgLegend definition */\n  legends: LegendComponentIndex;\n\n  resolve: Resolve;\n}\n\nexport interface NameMapInterface {\n  rename(oldname: string, newName: string): void;\n  has(name: string): boolean;\n  get(name: string): string;\n}\n\nexport class NameMap implements NameMapInterface {\n  private nameMap: Dict<string>;\n\n  constructor() {\n    this.nameMap = {};\n  }\n\n  public rename(oldName: string, newName: string) {\n    this.nameMap[oldName] = newName;\n  }\n\n  public has(name: string): boolean {\n    return this.nameMap[name] !== undefined;\n  }\n\n  public get(name: string): string {\n    // If the name appears in the _nameMap, we need to read its new name.\n    // We have to loop over the dict just in case the new name also gets renamed.\n    while (this.nameMap[name] && name !== this.nameMap[name]) {\n      name = this.nameMap[name];\n    }\n\n    return name;\n  }\n}\n\n/*\n  We use type guards instead of `instanceof` as `instanceof` makes\n  different parts of the compiler depend on the actual implementation of\n  the model classes, which in turn depend on different parts of the compiler.\n  Thus, `instanceof` leads to circular dependency problems.\n\n  On the other hand, type guards only make different parts of the compiler\n  depend on the type of the model classes, but not the actual implementation.\n*/\n\nexport function isUnitModel(model: Model): model is UnitModel {\n  return model?.type === 'unit';\n}\n\nexport function isFacetModel(model: Model): model is FacetModel {\n  return model?.type === 'facet';\n}\n\nexport function isConcatModel(model: Model): model is ConcatModel {\n  return model?.type === 'concat';\n}\n\nexport function isLayerModel(model: Model): model is LayerModel {\n  return model?.type === 'layer';\n}\n\nexport abstract class Model {\n  public readonly name: string;\n\n  public size: LayoutSizeMixins;\n\n  public readonly title: TitleParams;\n  public readonly description: string;\n\n  public readonly data: Data | null;\n  public readonly transforms: Transform[];\n  public readonly layout: GenericCompositionLayoutWithColumns;\n\n  /** Name map for scales, which can be renamed by a model's parent. */\n  protected scaleNameMap: NameMapInterface;\n\n  /** Name map for projections, which can be renamed by a model's parent. */\n  protected projectionNameMap: NameMapInterface;\n\n  /** Name map for signals, which can be renamed by a model's parent. */\n  protected signalNameMap: NameMapInterface;\n\n  public readonly component: Component;\n\n  public abstract readonly children: Model[] = [];\n\n  constructor(\n    spec: NormalizedSpec,\n    public readonly type: SpecType,\n    public readonly parent: Model,\n    parentGivenName: string,\n    public readonly config: Config,\n    resolve: Resolve,\n    public readonly view?: ViewBackground\n  ) {\n    this.parent = parent;\n    this.config = config;\n\n    // If name is not provided, always use parent's givenName to avoid name conflicts.\n    this.name = spec.name ?? parentGivenName;\n    this.title = isText(spec.title) ? {text: spec.title} : (spec.title as TitleParams);\n\n    // Shared name maps\n    this.scaleNameMap = parent ? parent.scaleNameMap : new NameMap();\n    this.projectionNameMap = parent ? parent.projectionNameMap : new NameMap();\n    this.signalNameMap = parent ? parent.signalNameMap : new NameMap();\n\n    this.data = spec.data;\n\n    this.description = spec.description;\n    this.transforms = normalizeTransform(spec.transform ?? []);\n    this.layout = type === 'layer' || type === 'unit' ? {} : extractCompositionLayout(spec, type, config);\n\n    this.component = {\n      data: {\n        sources: parent ? parent.component.data.sources : [],\n        outputNodes: parent ? parent.component.data.outputNodes : {},\n        outputNodeRefCounts: parent ? parent.component.data.outputNodeRefCounts : {},\n        // data is faceted if the spec is a facet spec or the parent has faceted data and data is undefined\n        isFaceted: isFacetSpec(spec) || (parent && parent.component.data.isFaceted && spec.data === undefined)\n      },\n      layoutSize: new Split<LayoutSizeIndex>(),\n      layoutHeaders: {row: {}, column: {}, facet: {}},\n      mark: null,\n      resolve: {\n        scale: {},\n        axis: {},\n        legend: {},\n        ...(resolve ? duplicate(resolve) : {})\n      },\n      selection: null,\n      scales: null,\n      projection: null,\n      axes: {},\n      legends: {}\n    };\n  }\n\n  public get width(): SignalRef {\n    return this.getSizeSignalRef('width');\n  }\n\n  public get height(): SignalRef {\n    return this.getSizeSignalRef('height');\n  }\n\n  public parse() {\n    this.parseScale();\n\n    this.parseLayoutSize(); // depends on scale\n    this.renameTopLevelLayoutSizeSignal();\n\n    this.parseSelections();\n    this.parseProjection();\n    this.parseData(); // (pathorder) depends on markDef; selection filters depend on parsed selections; depends on projection because some transforms require the finalized projection name.\n    this.parseAxesAndHeaders(); // depends on scale and layout size\n    this.parseLegends(); // depends on scale, markDef\n    this.parseMarkGroup(); // depends on data name, scale, layout size, axisGroup, and children's scale, axis, legend and mark.\n  }\n\n  public abstract parseData(): void;\n\n  public abstract parseSelections(): void;\n\n  public parseScale() {\n    parseScales(this);\n  }\n\n  public parseProjection() {\n    parseProjection(this);\n  }\n\n  public abstract parseLayoutSize(): void;\n\n  /**\n   * Rename top-level spec's size to be just width / height, ignoring model name.\n   * This essentially merges the top-level spec's width/height signals with the width/height signals\n   * to help us reduce redundant signals declaration.\n   */\n  private renameTopLevelLayoutSizeSignal() {\n    if (this.getName('width') !== 'width') {\n      this.renameSignal(this.getName('width'), 'width');\n    }\n    if (this.getName('height') !== 'height') {\n      this.renameSignal(this.getName('height'), 'height');\n    }\n  }\n\n  public abstract parseMarkGroup(): void;\n\n  public abstract parseAxesAndHeaders(): void;\n\n  public parseLegends() {\n    parseLegend(this);\n  }\n\n  public abstract assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[];\n  public abstract assembleSignals(): NewSignal[];\n\n  public abstract assembleSelectionData(data: readonly VgData[]): readonly VgData[];\n\n  public assembleGroupStyle(): string | string[] {\n    if (this.type === 'unit' || this.type === 'layer') {\n      return this.view?.style ?? 'cell';\n    }\n    return undefined;\n  }\n\n  private assembleEncodeFromView(view: ViewBackground): VgEncodeEntry {\n    // Exclude \"style\"\n    const {style: _, ...baseView} = view;\n\n    const e: VgEncodeEntry = {};\n    for (const property of keys(baseView)) {\n      const value = baseView[property];\n      if (value !== undefined) {\n        e[property] = signalOrValueRef(value);\n      }\n    }\n\n    return e;\n  }\n\n  public assembleGroupEncodeEntry(isTopLevel: boolean): VgEncodeEntry {\n    let encodeEntry: VgEncodeEntry = {};\n    if (this.view) {\n      encodeEntry = this.assembleEncodeFromView(this.view);\n    }\n\n    if (!isTopLevel) {\n      // Descriptions are already added to the top-level description so we only need to add them to the inner views.\n      if (this.description) {\n        encodeEntry['description'] = signalOrValueRef(this.description);\n      }\n\n      // For top-level spec, we can set the global width and height signal to adjust the group size.\n      // For other child specs, we have to manually set width and height in the encode entry.\n      if (this.type === 'unit' || this.type === 'layer') {\n        return {\n          width: this.getSizeSignalRef('width'),\n          height: this.getSizeSignalRef('height'),\n          ...(encodeEntry ?? {})\n        };\n      }\n    }\n\n    return isEmpty(encodeEntry) ? undefined : encodeEntry;\n  }\n\n  public assembleLayout(): VgLayout {\n    if (!this.layout) {\n      return undefined;\n    }\n\n    const {spacing, ...layout} = this.layout;\n\n    const {component, config} = this;\n    const titleBand = assembleLayoutTitleBand(component.layoutHeaders, config);\n\n    return {\n      padding: spacing,\n      ...this.assembleDefaultLayout(),\n      ...layout,\n      ...(titleBand ? {titleBand} : {})\n    };\n  }\n\n  protected assembleDefaultLayout(): VgLayout {\n    return {};\n  }\n\n  public abstract assembleLayoutSignals(): NewSignal[];\n\n  public assembleHeaderMarks(): VgMarkGroup[] {\n    const {layoutHeaders} = this.component;\n    let headerMarks = [];\n\n    for (const channel of FACET_CHANNELS) {\n      if (layoutHeaders[channel].title) {\n        headerMarks.push(assembleTitleGroup(this, channel));\n      }\n    }\n\n    for (const channel of HEADER_CHANNELS) {\n      headerMarks = headerMarks.concat(assembleHeaderGroups(this, channel));\n    }\n    return headerMarks;\n  }\n\n  public abstract assembleMarks(): VgMarkGroup[];\n\n  public assembleAxes(): VgAxis[] {\n    return assembleAxes(this.component.axes, this.config);\n  }\n\n  public assembleLegends(): VgLegend[] {\n    return assembleLegends(this);\n  }\n\n  public assembleProjections(): VgProjection[] {\n    return assembleProjections(this);\n  }\n\n  public assembleTitle(): VgTitle {\n    const {encoding, ...titleNoEncoding} = this.title ?? ({} as TitleParams);\n\n    const title: VgTitle = {\n      ...extractTitleConfig(this.config.title).nonMark,\n      ...titleNoEncoding,\n      ...(encoding ? {encode: {update: encoding}} : {})\n    };\n\n    if (title.text) {\n      if (contains(['unit', 'layer'], this.type)) {\n        // Unit/Layer\n        if (contains<AnchorValue>(['middle', undefined], title.anchor)) {\n          title.frame = title.frame ?? 'group';\n        }\n      } else {\n        // composition with Vega layout\n\n        // Set title = \"start\" by default for composition as \"middle\" does not look nice\n        // https://github.com/vega/vega/issues/960#issuecomment-471360328\n        title.anchor = title.anchor ?? 'start';\n      }\n\n      return isEmpty(title) ? undefined : title;\n    }\n    return undefined;\n  }\n\n  /**\n   * Assemble the mark group for this model. We accept optional `signals` so that we can include concat top-level signals with the top-level model's local signals.\n   */\n  public assembleGroup(signals: NewSignal[] = []) {\n    const group: VgMarkGroup = {};\n\n    signals = signals.concat(this.assembleSignals());\n\n    if (signals.length > 0) {\n      group.signals = signals;\n    }\n\n    const layout = this.assembleLayout();\n    if (layout) {\n      group.layout = layout;\n    }\n\n    group.marks = [].concat(this.assembleHeaderMarks(), this.assembleMarks());\n\n    // Only include scales if this spec is top-level or if parent is facet.\n    // (Otherwise, it will be merged with upper-level's scope.)\n    const scales = !this.parent || isFacetModel(this.parent) ? assembleScales(this) : [];\n    if (scales.length > 0) {\n      group.scales = scales;\n    }\n\n    const axes = this.assembleAxes();\n    if (axes.length > 0) {\n      group.axes = axes;\n    }\n\n    const legends = this.assembleLegends();\n    if (legends.length > 0) {\n      group.legends = legends;\n    }\n\n    return group;\n  }\n\n  public getName(text: string) {\n    return varName((this.name ? this.name + '_' : '') + text);\n  }\n\n  /**\n   * Request a data source name for the given data source type and mark that data source as required.\n   * This method should be called in parse, so that all used data source can be correctly instantiated in assembleData().\n   * You can lookup the correct dataset name in assemble with `lookupDataSource`.\n   */\n  public requestDataName(name: DataSourceType) {\n    const fullName = this.getName(name);\n\n    // Increase ref count. This is critical because otherwise we won't create a data source.\n    // We also increase the ref counts on OutputNode.getSource() calls.\n    const refCounts = this.component.data.outputNodeRefCounts;\n    refCounts[fullName] = (refCounts[fullName] ?? 0) + 1;\n\n    return fullName;\n  }\n\n  public getSizeSignalRef(layoutSizeType: LayoutSizeType): SignalRef {\n    if (isFacetModel(this.parent)) {\n      const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n      const channel = getPositionScaleChannel(sizeType);\n      const scaleComponent = this.component.scales[channel];\n\n      if (scaleComponent && !scaleComponent.merged) {\n        // independent scale\n        const type = scaleComponent.get('type');\n        const range = scaleComponent.get('range');\n\n        if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n          const scaleName = scaleComponent.get('name');\n          const domain = assembleDomain(this, channel);\n          const field = getFieldFromDomain(domain);\n          if (field) {\n            const fieldRef = vgField({aggregate: 'distinct', field}, {expr: 'datum'});\n            return {\n              signal: sizeExpr(scaleName, scaleComponent, fieldRef)\n            };\n          } else {\n            log.warn(`Unknown field for ${channel}. Cannot calculate view size.`);\n            return null;\n          }\n        }\n      }\n    }\n\n    return {\n      signal: this.signalNameMap.get(this.getName(layoutSizeType))\n    };\n  }\n\n  /**\n   * Lookup the name of the datasource for an output node. You probably want to call this in assemble.\n   */\n  public lookupDataSource(name: string) {\n    const node = this.component.data.outputNodes[name];\n\n    if (!node) {\n      // Name not found in map so let's just return what we got.\n      // This can happen if we already have the correct name.\n      return name;\n    }\n\n    return node.getSource();\n  }\n\n  public getSignalName(oldSignalName: string): string {\n    return this.signalNameMap.get(oldSignalName);\n  }\n\n  public renameSignal(oldName: string, newName: string) {\n    this.signalNameMap.rename(oldName, newName);\n  }\n\n  public renameScale(oldName: string, newName: string) {\n    this.scaleNameMap.rename(oldName, newName);\n  }\n\n  public renameProjection(oldName: string, newName: string) {\n    this.projectionNameMap.rename(oldName, newName);\n  }\n\n  /**\n   * @return scale name for a given channel after the scale has been parsed and named.\n   */\n  public scaleName(originalScaleName: ScaleChannel | string, parse?: boolean): string {\n    if (parse) {\n      // During the parse phase always return a value\n      // No need to refer to rename map because a scale can't be renamed\n      // before it has the original name.\n      return this.getName(originalScaleName);\n    }\n\n    // If there is a scale for the channel, it should either\n    // be in the scale component or exist in the name map\n    if (\n      // If there is a scale for the channel, there should be a local scale component for it\n      (isChannel(originalScaleName) && isScaleChannel(originalScaleName) && this.component.scales[originalScaleName]) ||\n      // in the scale name map (the scale get merged by its parent)\n      this.scaleNameMap.has(this.getName(originalScaleName))\n    ) {\n      return this.scaleNameMap.get(this.getName(originalScaleName));\n    }\n    return undefined;\n  }\n\n  /**\n   * @return projection name after the projection has been parsed and named.\n   */\n  public projectionName(parse?: boolean): string {\n    if (parse) {\n      // During the parse phase always return a value\n      // No need to refer to rename map because a projection can't be renamed\n      // before it has the original name.\n      return this.getName('projection');\n    }\n\n    if (\n      (this.component.projection && !this.component.projection.merged) ||\n      this.projectionNameMap.has(this.getName('projection'))\n    ) {\n      return this.projectionNameMap.get(this.getName('projection'));\n    }\n    return undefined;\n  }\n\n  /**\n   * Corrects the data references in marks after assemble.\n   */\n  public correctDataNames = (mark: VgMarkGroup) => {\n    // TODO: make this correct\n\n    // for normal data references\n    if (mark.from && mark.from.data) {\n      mark.from.data = this.lookupDataSource(mark.from.data);\n    }\n\n    // for access to facet data\n    if (mark.from && mark.from.facet && mark.from.facet.data) {\n      mark.from.facet.data = this.lookupDataSource(mark.from.facet.data);\n    }\n\n    return mark;\n  };\n\n  /**\n   * Traverse a model's hierarchy to get the scale component for a particular channel.\n   */\n  public getScaleComponent(channel: ScaleChannel): ScaleComponent {\n    /* istanbul ignore next: This is warning for debugging test */\n    if (!this.component.scales) {\n      throw new Error(\n        'getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().'\n      );\n    }\n\n    const localScaleComponent = this.component.scales[channel];\n    if (localScaleComponent && !localScaleComponent.merged) {\n      return localScaleComponent;\n    }\n    return this.parent ? this.parent.getScaleComponent(channel) : undefined;\n  }\n\n  /**\n   * Traverse a model's hierarchy to get a particular selection component.\n   */\n  public getSelectionComponent(variableName: string, origName: string): SelectionComponent {\n    let sel = this.component.selection[variableName];\n    if (!sel && this.parent) {\n      sel = this.parent.getSelectionComponent(variableName, origName);\n    }\n    if (!sel) {\n      throw new Error(log.message.selectionNotFound(origName));\n    }\n    return sel;\n  }\n\n  /**\n   * Returns true if the model has a signalRef for an axis orient.\n   */\n  public hasAxisOrientSignalRef() {\n    return (\n      this.component.axes.x?.some(a => a.hasOrientSignalRef()) ||\n      this.component.axes.y?.some(a => a.hasOrientSignalRef())\n    );\n  }\n}\n\n/** Abstract class for UnitModel and FacetModel. Both of which can contain fieldDefs as a part of its own specification. */\nexport abstract class ModelWithField extends Model {\n  public abstract fieldDef(channel: SingleDefChannel): FieldDef<any>;\n\n  /** Get \"field\" reference for Vega */\n  public vgField(channel: SingleDefChannel, opt: FieldRefOption = {}) {\n    const fieldDef = this.fieldDef(channel);\n\n    if (!fieldDef) {\n      return undefined;\n    }\n\n    return vgField(fieldDef, opt);\n  }\n\n  protected abstract getMapping(): Partial<Record<Channel, any>>;\n\n  public reduceFieldDef<T, U>(f: (acc: U, fd: FieldDef<string>, c: Channel) => U, init: T): T {\n    return reduce(\n      this.getMapping(),\n      (acc: U, cd: ChannelDef, c: Channel) => {\n        const fieldDef = getFieldDef(cd);\n        if (fieldDef) {\n          return f(acc, fieldDef, c);\n        }\n        return acc;\n      },\n      init\n    );\n  }\n\n  public forEachFieldDef(f: (fd: FieldDef<string>, c: Channel) => void, t?: any) {\n    forEach(\n      this.getMapping(),\n      (cd: ChannelDef, c: Channel) => {\n        const fieldDef = getFieldDef(cd);\n        if (fieldDef) {\n          f(fieldDef, c);\n        }\n      },\n      t\n    );\n  }\n  public abstract channelHasField(channel: Channel): boolean;\n}\n","import {KDETransform as VgKDETransform} from 'vega';\nimport {DensityTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for density transform nodes\n */\nexport class DensityTransformNode extends DataFlowNode {\n  public clone() {\n    return new DensityTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: DensityTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const specifiedAs = this.transform.as ?? [undefined, undefined];\n    this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `DensityTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgKDETransform {\n    const {density, ...rest} = this.transform;\n    const result: VgKDETransform = {\n      type: 'kde',\n      field: density,\n      ...rest\n    };\n    return result;\n  }\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {isScaleChannel} from '../../channel';\nimport {TypedFieldDef, vgField as fieldRef} from '../../channeldef';\nimport {isPathMark} from '../../mark';\nimport {hasContinuousDomain} from '../../scale';\nimport {Dict, hash, keys} from '../../util';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class FilterInvalidNode extends DataFlowNode {\n  public clone() {\n    return new FilterInvalidNode(null, {...this.filter});\n  }\n\n  constructor(parent: DataFlowNode, public readonly filter: Dict<TypedFieldDef<string>>) {\n    super(parent);\n  }\n\n  public static make(parent: DataFlowNode, model: UnitModel): FilterInvalidNode {\n    const {config, mark, markDef} = model;\n\n    const invalid = getMarkPropOrConfig('invalid', markDef, config);\n    if (invalid !== 'filter') {\n      return null;\n    }\n\n    const filter = model.reduceFieldDef((aggregator: Dict<TypedFieldDef<string>>, fieldDef, channel) => {\n      const scaleComponent = isScaleChannel(channel) && model.getScaleComponent(channel);\n      if (scaleComponent) {\n        const scaleType = scaleComponent.get('type');\n\n        // While discrete domain scales can handle invalid values, continuous scales can't.\n        // Thus, for non-path marks, we have to filter null for scales with continuous domains.\n        // (For path marks, we will use \"defined\" property and skip these values instead.)\n        if (hasContinuousDomain(scaleType) && fieldDef.aggregate !== 'count' && !isPathMark(mark)) {\n          aggregator[fieldDef.field] = fieldDef as any; // we know that the fieldDef is a typed field def\n        }\n      }\n      return aggregator;\n    }, {} as Dict<TypedFieldDef<string>>);\n\n    if (!keys(filter).length) {\n      return null;\n    }\n\n    return new FilterInvalidNode(parent, filter);\n  }\n\n  public dependentFields() {\n    return new Set(keys(this.filter));\n  }\n\n  public producedFields() {\n    return new Set<string>(); // filter does not produce any new fields\n  }\n\n  public hash() {\n    return `FilterInvalid ${hash(this.filter)}`;\n  }\n\n  /**\n   * Create the VgTransforms for each of the filtered fields.\n   */\n  public assemble(): VgFilterTransform {\n    const filters = keys(this.filter).reduce((vegaFilters, field) => {\n      const fieldDef = this.filter[field];\n      const ref = fieldRef(fieldDef, {expr: 'datum'});\n\n      if (fieldDef !== null) {\n        if (fieldDef.type === 'temporal') {\n          vegaFilters.push(`(isDate(${ref}) || (isValid(${ref}) && isFinite(+${ref})))`);\n        } else if (fieldDef.type === 'quantitative') {\n          vegaFilters.push(`isValid(${ref})`);\n          vegaFilters.push(`isFinite(+${ref})`);\n        } else {\n          // should never get here\n        }\n      }\n      return vegaFilters;\n    }, [] as string[]);\n\n    return filters.length > 0\n      ? {\n          type: 'filter',\n          expr: filters.join(' && ')\n        }\n      : null;\n  }\n}\n","import {FlattenTransform as VgFlattenTransform} from 'vega';\nimport {FlattenTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FlattenTransformNode extends DataFlowNode {\n  public clone() {\n    return new FlattenTransformNode(this.parent, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: FlattenTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const {flatten, as = []} = this.transform;\n    this.transform.as = flatten.map((f, i) => as[i] ?? f);\n  }\n\n  public dependentFields() {\n    return new Set(this.transform.flatten);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `FlattenTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgFlattenTransform {\n    const {flatten: fields, as} = this.transform;\n\n    const result: VgFlattenTransform = {\n      type: 'flatten',\n      fields,\n      as\n    };\n    return result;\n  }\n}\n","import {FoldTransform as VgFoldTransform} from 'vega';\nimport {FoldTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FoldTransformNode extends DataFlowNode {\n  public clone() {\n    return new FoldTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: FoldTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const specifiedAs = this.transform.as ?? [undefined, undefined];\n    this.transform.as = [specifiedAs[0] ?? 'key', specifiedAs[1] ?? 'value'];\n  }\n\n  public dependentFields() {\n    return new Set(this.transform.fold);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `FoldTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgFoldTransform {\n    const {fold, as} = this.transform;\n    const result: VgFoldTransform = {\n      type: 'fold',\n      fields: fold,\n      as\n    };\n    return result;\n  }\n}\n","import {GeoJSONTransform as VgGeoJSONTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoJSONNode extends DataFlowNode {\n  public clone() {\n    return new GeoJSONNode(null, duplicate(this.fields), this.geojson, this.signal);\n  }\n\n  public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n    if (model.component.projection && !model.component.projection.isFit) {\n      return parent;\n    }\n\n    let geoJsonCounter = 0;\n\n    for (const coordinates of [\n      [LONGITUDE, LATITUDE],\n      [LONGITUDE2, LATITUDE2]\n    ] as Vector2<GeoPositionChannel>[]) {\n      const pair = coordinates.map(channel => {\n        const def = getFieldOrDatumDef(model.encoding[channel]);\n        return isFieldDef(def)\n          ? def.field\n          : isDatumDef(def)\n          ? {expr: `${def.datum}`}\n          : isValueDef(def)\n          ? {expr: `${def['value']}`}\n          : undefined;\n      }) as [GeoPositionChannel, GeoPositionChannel];\n\n      if (pair[0] || pair[1]) {\n        parent = new GeoJSONNode(parent, pair, null, model.getName(`geojson_${geoJsonCounter++}`));\n      }\n    }\n\n    if (model.channelHasField(SHAPE)) {\n      const fieldDef = model.typedFieldDef(SHAPE);\n      if (fieldDef.type === GEOJSON) {\n        parent = new GeoJSONNode(parent, null, fieldDef.field, model.getName(`geojson_${geoJsonCounter++}`));\n      }\n    }\n\n    return parent;\n  }\n\n  constructor(\n    parent: DataFlowNode,\n    private fields?: Vector2<string | VgExprRef>,\n    private geojson?: string,\n    private signal?: string\n  ) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    const fields = (this.fields ?? []).filter(isString) as string[];\n    return new Set([...(this.geojson ? [this.geojson] : []), ...fields]);\n  }\n\n  public producedFields() {\n    return new Set<string>();\n  }\n\n  public hash() {\n    return `GeoJSON ${this.geojson} ${this.signal} ${hash(this.fields)}`;\n  }\n\n  public assemble(): VgGeoJSONTransform {\n    return {\n      type: 'geojson',\n      ...(this.fields ? {fields: this.fields} : {}),\n      ...(this.geojson ? {geojson: this.geojson} : {}),\n      signal: this.signal\n    };\n  }\n}\n","import {GeoPointTransform as VgGeoPointTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoPointNode extends DataFlowNode {\n  public clone() {\n    return new GeoPointNode(null, this.projection, duplicate(this.fields), duplicate(this.as));\n  }\n\n  constructor(\n    parent: DataFlowNode,\n    private projection: string,\n    private fields: [string | VgExprRef, string | VgExprRef],\n    private as: [string, string]\n  ) {\n    super(parent);\n  }\n\n  public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n    if (!model.projectionName()) {\n      return parent;\n    }\n\n    for (const coordinates of [\n      [LONGITUDE, LATITUDE],\n      [LONGITUDE2, LATITUDE2]\n    ] as Vector2<GeoPositionChannel>[]) {\n      const pair = coordinates.map(channel => {\n        const def = getFieldOrDatumDef(model.encoding[channel]);\n        return isFieldDef(def)\n          ? def.field\n          : isDatumDef(def)\n          ? {expr: `${def.datum}`}\n          : isValueDef(def)\n          ? {expr: `${def['value']}`}\n          : undefined;\n      }) as [GeoPositionChannel, GeoPositionChannel];\n\n      const suffix = coordinates[0] === LONGITUDE2 ? '2' : '';\n\n      if (pair[0] || pair[1]) {\n        parent = new GeoPointNode(parent, model.projectionName(), pair, [\n          model.getName('x' + suffix),\n          model.getName('y' + suffix)\n        ]);\n      }\n    }\n\n    return parent;\n  }\n\n  public dependentFields() {\n    return new Set(this.fields.filter(isString));\n  }\n\n  public producedFields() {\n    return new Set(this.as);\n  }\n\n  public hash() {\n    return `Geopoint ${this.projection} ${hash(this.fields)} ${hash(this.as)}`;\n  }\n\n  public assemble(): VgGeoPointTransform {\n    return {\n      type: 'geopoint',\n      projection: this.projection,\n      fields: this.fields,\n      as: this.as\n    };\n  }\n}\n","import {\n  FormulaTransform as VgFormulaTransform,\n  ImputeTransform as VgImputeTransform,\n  SignalRef,\n  WindowTransform as VgWindowTransform\n} from 'vega';\nimport {isFieldDef} from '../../channeldef';\nimport {pathGroupingFields} from '../../encoding';\nimport {ImputeSequence, ImputeTransform, isImputeSequence} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class ImputeNode extends DataFlowNode {\n  public clone() {\n    return new ImputeNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private readonly transform: ImputeTransform) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.impute, this.transform.key, ...(this.transform.groupby ?? [])]);\n  }\n\n  public producedFields() {\n    return new Set([this.transform.impute]);\n  }\n\n  private processSequence(keyvals: ImputeSequence): SignalRef {\n    const {start = 0, stop, step} = keyvals;\n    const result = [start, stop, ...(step ? [step] : [])].join(',');\n\n    return {signal: `sequence(${result})`};\n  }\n\n  public static makeFromTransform(parent: DataFlowNode, imputeTransform: ImputeTransform): ImputeNode {\n    return new ImputeNode(parent, imputeTransform);\n  }\n\n  public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n    const encoding = model.encoding;\n    const xDef = encoding.x;\n    const yDef = encoding.y;\n\n    if (isFieldDef(xDef) && isFieldDef(yDef)) {\n      const imputedChannel = xDef.impute ? xDef : yDef.impute ? yDef : undefined;\n      if (imputedChannel === undefined) {\n        return undefined;\n      }\n      const keyChannel = xDef.impute ? yDef : yDef.impute ? xDef : undefined;\n      const {method, value, frame, keyvals} = imputedChannel.impute;\n      const groupbyFields = pathGroupingFields(model.mark, encoding);\n\n      return new ImputeNode(parent, {\n        impute: imputedChannel.field,\n        key: keyChannel.field,\n        ...(method ? {method} : {}),\n        ...(value !== undefined ? {value} : {}),\n        ...(frame ? {frame} : {}),\n        ...(keyvals !== undefined ? {keyvals} : {}),\n        ...(groupbyFields.length ? {groupby: groupbyFields} : {})\n      });\n    }\n    return null;\n  }\n\n  public hash() {\n    return `Impute ${hash(this.transform)}`;\n  }\n\n  public assemble() {\n    const {impute, key, keyvals, method, groupby, value, frame = [null, null] as [null, null]} = this.transform;\n\n    const imputeTransform: VgImputeTransform = {\n      type: 'impute',\n      field: impute,\n      key,\n      ...(keyvals ? {keyvals: isImputeSequence(keyvals) ? this.processSequence(keyvals) : keyvals} : {}),\n      method: 'value',\n      ...(groupby ? {groupby} : {}),\n      value: !method || method === 'value' ? value : null\n    };\n\n    if (method && method !== 'value') {\n      const deriveNewField: VgWindowTransform = {\n        type: 'window',\n        as: [`imputed_${impute}_value`],\n        ops: [method],\n        fields: [impute],\n        frame,\n        ignorePeers: false,\n        ...(groupby ? {groupby} : {})\n      };\n      const replaceOriginal: VgFormulaTransform = {\n        type: 'formula',\n        expr: `datum.${impute} === null ? datum.imputed_${impute}_value : datum.${impute}`,\n        as: impute\n      };\n      return [imputeTransform, deriveNewField, replaceOriginal];\n    } else {\n      return [imputeTransform];\n    }\n  }\n}\n","import {LoessTransform as VgLoessTransform} from 'vega';\nimport {LoessTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for loess transform nodes\n */\nexport class LoessTransformNode extends DataFlowNode {\n  public clone() {\n    return new LoessTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: LoessTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const specifiedAs = this.transform.as ?? [undefined, undefined];\n    this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.loess];\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.loess, this.transform.on, ...(this.transform.groupby ?? [])]);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `LoessTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgLoessTransform {\n    const {loess, on, ...rest} = this.transform;\n    const result: VgLoessTransform = {\n      type: 'loess',\n      x: on,\n      y: loess,\n      ...rest\n    };\n    return result;\n  }\n}\n","import {LookupTransform as VgLookupTransform} from 'vega';\nimport {array, isString} from 'vega-util';\nimport * as log from '../../log';\nimport {isLookupData, isLookupSelection, LookupTransform} from '../../transform';\nimport {duplicate, hash, varName} from '../../util';\nimport {Model} from '../model';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {findSource} from './parse';\nimport {SourceNode} from './source';\n\nexport class LookupNode extends DataFlowNode {\n  public clone() {\n    return new LookupNode(null, duplicate(this.transform), this.secondary);\n  }\n\n  constructor(parent: DataFlowNode, public readonly transform: LookupTransform, public readonly secondary: string) {\n    super(parent);\n  }\n\n  public static make(parent: DataFlowNode, model: Model, transform: LookupTransform, counter: number) {\n    const sources = model.component.data.sources;\n    const {from} = transform;\n    let fromOutputNode = null;\n\n    if (isLookupData(from)) {\n      let fromSource = findSource(from.data, sources);\n\n      if (!fromSource) {\n        fromSource = new SourceNode(from.data);\n        sources.push(fromSource);\n      }\n\n      const fromOutputName = model.getName(`lookup_${counter}`);\n      fromOutputNode = new OutputNode(fromSource, fromOutputName, 'lookup', model.component.data.outputNodeRefCounts);\n      model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n    } else if (isLookupSelection(from)) {\n      const selName = from.selection;\n      transform = {as: selName, ...transform};\n      fromOutputNode = model.getSelectionComponent(varName(selName), selName).materialized;\n      if (!fromOutputNode) {\n        throw new Error(log.message.noSameUnitLookup(selName));\n      }\n    }\n\n    return new LookupNode(parent, transform, fromOutputNode.getSource());\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.lookup]);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as ? array(this.transform.as) : this.transform.from.fields);\n  }\n\n  public hash() {\n    return `Lookup ${hash({transform: this.transform, secondary: this.secondary})}`;\n  }\n\n  public assemble(): VgLookupTransform {\n    let foreign: Partial<VgLookupTransform>;\n\n    if (this.transform.from.fields) {\n      // lookup a few fields and add create a flat output\n      foreign = {\n        values: this.transform.from.fields,\n        ...(this.transform.as ? {as: array(this.transform.as)} : {})\n      };\n    } else {\n      // lookup full record and nest it\n      let asName = this.transform.as;\n      if (!isString(asName)) {\n        log.warn(log.message.NO_FIELDS_NEEDS_AS);\n        asName = '_lookup';\n      }\n\n      foreign = {\n        as: [asName]\n      };\n    }\n\n    return {\n      type: 'lookup',\n      from: this.secondary,\n      key: this.transform.from.key,\n      fields: [this.transform.lookup],\n      ...foreign,\n      ...(this.transform.default ? {default: this.transform.default} : {})\n    };\n  }\n}\n","import {QuantileTransform as VgQuantileTransform} from 'vega';\nimport {QuantileTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for quantile transform nodes\n */\nexport class QuantileTransformNode extends DataFlowNode {\n  public clone() {\n    return new QuantileTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: QuantileTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const specifiedAs = this.transform.as ?? [undefined, undefined];\n    this.transform.as = [specifiedAs[0] ?? 'prob', specifiedAs[1] ?? 'value'];\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.quantile, ...(this.transform.groupby ?? [])]);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `QuantileTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgQuantileTransform {\n    const {quantile, ...rest} = this.transform;\n    const result: VgQuantileTransform = {\n      type: 'quantile',\n      field: quantile,\n      ...rest\n    };\n    return result;\n  }\n}\n","import {RegressionTransform as VgRegressionTransform} from 'vega';\nimport {RegressionTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for regression transform nodes\n */\nexport class RegressionTransformNode extends DataFlowNode {\n  public clone() {\n    return new RegressionTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: RegressionTransform) {\n    super(parent);\n    this.transform = duplicate(transform); // duplicate to prevent side effects\n    const specifiedAs = this.transform.as ?? [undefined, undefined];\n    this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.regression];\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.regression, this.transform.on, ...(this.transform.groupby ?? [])]);\n  }\n\n  public producedFields() {\n    return new Set(this.transform.as);\n  }\n\n  public hash() {\n    return `RegressionTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgRegressionTransform {\n    const {regression, on, ...rest} = this.transform;\n    const result: VgRegressionTransform = {\n      type: 'regression',\n      x: on,\n      y: regression,\n      ...rest\n    };\n    return result;\n  }\n}\n","import {PivotTransform} from '../../transform';\nimport {duplicate, hash, unique} from '../../util';\nimport {PivotTransform as VgPivotTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for pivot transform nodes.\n */\nexport class PivotTransformNode extends DataFlowNode {\n  public clone() {\n    return new PivotTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: PivotTransform) {\n    super(parent);\n  }\n\n  public addDimensions(fields: readonly string[]) {\n    this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), d => d);\n  }\n\n  public producedFields(): undefined {\n    return undefined; // return undefined so that potentially everything can depend on the pivot\n  }\n\n  public dependentFields() {\n    return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);\n  }\n\n  public hash() {\n    return `PivotTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgPivotTransform {\n    const {pivot, value, groupby, limit, op} = this.transform;\n    return {\n      type: 'pivot',\n      field: pivot,\n      value,\n      ...(limit !== undefined ? {limit} : {}),\n      ...(op !== undefined ? {op} : {}),\n      ...(groupby !== undefined ? {groupby} : {})\n    };\n  }\n}\n","import {SampleTransform as VgSampleTransform} from 'vega';\nimport {SampleTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the sample transform nodes\n */\nexport class SampleTransformNode extends DataFlowNode {\n  public clone() {\n    return new SampleTransformNode(null, duplicate(this.transform));\n  }\n\n  constructor(parent: DataFlowNode, private transform: SampleTransform) {\n    super(parent);\n  }\n\n  public dependentFields() {\n    return new Set<string>();\n  }\n\n  public producedFields() {\n    return new Set<string>();\n  }\n\n  public hash() {\n    return `SampleTransform ${hash(this.transform)}`;\n  }\n\n  public assemble(): VgSampleTransform {\n    return {\n      type: 'sample',\n      size: this.transform.sample\n    };\n  }\n}\n","import {InlineDataset, isUrlData} from '../../data';\nimport {Dict} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataComponent} from './';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {ParseNode} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {PivotTransformNode} from './pivot';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nfunction makeWalkTree(data: VgData[]) {\n  // to name datasources\n  let datasetIndex = 0;\n\n  /**\n   * Recursively walk down the tree.\n   */\n  function walkTree(node: DataFlowNode, dataSource: VgData) {\n    if (node instanceof SourceNode) {\n      // If the source is a named data source or a data source with values, we need\n      // to put it in a different data source. Otherwise, Vega may override the data.\n      if (!node.isGenerator && !isUrlData(node.data)) {\n        data.push(dataSource);\n        const newData: VgData = {\n          name: null,\n          source: dataSource.name,\n          transform: []\n        };\n        dataSource = newData;\n      }\n    }\n\n    if (node instanceof ParseNode) {\n      if (node.parent instanceof SourceNode && !dataSource.source) {\n        // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n        dataSource.format = {\n          ...(dataSource.format ?? {}),\n          parse: node.assembleFormatParse()\n        };\n\n        // add calculates for all nested fields\n        dataSource.transform.push(...node.assembleTransforms(true));\n      } else {\n        // Otherwise use Vega expression to parse\n        dataSource.transform.push(...node.assembleTransforms());\n      }\n    }\n\n    if (node instanceof FacetNode) {\n      if (!dataSource.name) {\n        dataSource.name = `data_${datasetIndex++}`;\n      }\n\n      if (!dataSource.source || dataSource.transform.length > 0) {\n        data.push(dataSource);\n        node.data = dataSource.name;\n      } else {\n        node.data = dataSource.source;\n      }\n\n      for (const d of node.assemble()) {\n        data.push(d);\n      }\n\n      // break here because the rest of the tree has to be taken care of by the facet.\n      return;\n    }\n\n    if (\n      node instanceof GraticuleNode ||\n      node instanceof SequenceNode ||\n      node instanceof FilterInvalidNode ||\n      node instanceof FilterNode ||\n      node instanceof CalculateNode ||\n      node instanceof GeoPointNode ||\n      node instanceof GeoJSONNode ||\n      node instanceof AggregateNode ||\n      node instanceof LookupNode ||\n      node instanceof WindowTransformNode ||\n      node instanceof JoinAggregateTransformNode ||\n      node instanceof FoldTransformNode ||\n      node instanceof FlattenTransformNode ||\n      node instanceof DensityTransformNode ||\n      node instanceof LoessTransformNode ||\n      node instanceof QuantileTransformNode ||\n      node instanceof RegressionTransformNode ||\n      node instanceof IdentifierNode ||\n      node instanceof SampleTransformNode ||\n      node instanceof PivotTransformNode\n    ) {\n      dataSource.transform.push(node.assemble());\n    }\n\n    if (\n      node instanceof BinNode ||\n      node instanceof TimeUnitNode ||\n      node instanceof ImputeNode ||\n      node instanceof StackNode\n    ) {\n      dataSource.transform.push(...node.assemble());\n    }\n\n    if (node instanceof OutputNode) {\n      if (dataSource.source && dataSource.transform.length === 0) {\n        node.setSource(dataSource.source);\n      } else if (node.parent instanceof OutputNode) {\n        // Note that an output node may be required but we still do not assemble a\n        // separate data source for it.\n        node.setSource(dataSource.name);\n      } else {\n        if (!dataSource.name) {\n          dataSource.name = `data_${datasetIndex++}`;\n        }\n\n        // Here we set the name of the datasource we generated. From now on\n        // other assemblers can use it.\n        node.setSource(dataSource.name);\n\n        // if this node has more than one child, we will add a datasource automatically\n        if (node.numChildren() === 1) {\n          data.push(dataSource);\n          const newData: VgData = {\n            name: null,\n            source: dataSource.name,\n            transform: []\n          };\n          dataSource = newData;\n        }\n      }\n    }\n\n    switch (node.numChildren()) {\n      case 0:\n        // done\n        if (node instanceof OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n          // do not push empty datasources that are simply references\n          data.push(dataSource);\n        }\n        break;\n      case 1:\n        walkTree(node.children[0], dataSource);\n        break;\n      default: {\n        if (!dataSource.name) {\n          dataSource.name = `data_${datasetIndex++}`;\n        }\n\n        let source = dataSource.name;\n        if (!dataSource.source || dataSource.transform.length > 0) {\n          data.push(dataSource);\n        } else {\n          source = dataSource.source;\n        }\n\n        for (const child of node.children) {\n          const newData: VgData = {\n            name: null,\n            source: source,\n            transform: []\n          };\n          walkTree(child, newData);\n        }\n        break;\n      }\n    }\n  }\n\n  return walkTree;\n}\n\n/**\n * Assemble data sources that are derived from faceted data.\n */\nexport function assembleFacetData(root: FacetNode): VgData[] {\n  const data: VgData[] = [];\n  const walkTree = makeWalkTree(data);\n\n  for (const child of root.children) {\n    walkTree(child, {\n      source: root.name,\n      name: null,\n      transform: []\n    });\n  }\n\n  return data;\n}\n\n/**\n * Create Vega Data array from a given compiled model and append all of them to the given array\n *\n * @param  model\n * @param  data array\n * @return modified data array\n */\nexport function assembleRootData(dataComponent: DataComponent, datasets: Dict<InlineDataset>): VgData[] {\n  const data: VgData[] = [];\n\n  // dataComponent.sources.forEach(debug);\n  // draw(dataComponent.sources);\n\n  const walkTree = makeWalkTree(data);\n\n  let sourceIndex = 0;\n\n  for (const root of dataComponent.sources) {\n    // assign a name if the source does not have a name yet\n    if (!root.hasName()) {\n      root.dataName = `source_${sourceIndex++}`;\n    }\n\n    const newData: VgData = root.assemble();\n\n    walkTree(root, newData);\n  }\n\n  // remove empty transform arrays for cleaner output\n  for (const d of data) {\n    if (d.transform.length === 0) {\n      delete d.transform;\n    }\n  }\n\n  // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n  let whereTo = 0;\n  for (const [i, d] of data.entries()) {\n    if ((d.transform ?? []).length === 0 && !d.source) {\n      data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n    }\n  }\n\n  // now fix the from references in lookup transforms\n  for (const d of data) {\n    for (const t of d.transform ?? []) {\n      if (t.type === 'lookup') {\n        t.from = dataComponent.outputNodes[t.from].getSource();\n      }\n    }\n  }\n\n  // inline values for datasets that are in the datastore\n  for (const d of data) {\n    if (d.name in datasets) {\n      d.values = datasets[d.name];\n    }\n  }\n\n  return data;\n}\n","import {AxisOrient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {title as fieldDefTitle} from '../../channeldef';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {assembleAxis} from '../axis/assemble';\nimport {FacetModel} from '../facet';\nimport {parseGuideResolve} from '../resolve';\nimport {getHeaderProperty} from './common';\nimport {HeaderChannel, HeaderComponent} from './component';\n\nexport function getHeaderType(orient: AxisOrient | SignalRef) {\n  if (orient === 'top' || orient === 'left' || isSignalRef(orient)) {\n    // we always use header for orient signal since we can't dynamically make header becomes footer\n    return 'header';\n  }\n  return 'footer';\n}\n\nexport function parseFacetHeaders(model: FacetModel) {\n  for (const channel of FACET_CHANNELS) {\n    parseFacetHeader(model, channel);\n  }\n\n  mergeChildAxis(model, 'x');\n  mergeChildAxis(model, 'y');\n}\n\nfunction parseFacetHeader(model: FacetModel, channel: FacetChannel) {\n  const {facet, config, child, component} = model;\n  if (model.channelHasField(channel)) {\n    const fieldDef = facet[channel];\n    const titleConfig = getHeaderProperty('title', null, config, channel);\n    let title = fieldDefTitle(fieldDef, config, {\n      allowDisabling: true,\n      includeDefault: titleConfig === undefined || !!titleConfig\n    });\n\n    if (child.component.layoutHeaders[channel].title) {\n      // TODO: better handle multiline titles\n      title = isArray(title) ? title.join(', ') : title;\n\n      // merge title with child to produce \"Title / Subtitle / Sub-subtitle\"\n      title += ' / ' + child.component.layoutHeaders[channel].title;\n      child.component.layoutHeaders[channel].title = null;\n    }\n\n    const labelOrient = getHeaderProperty('labelOrient', fieldDef, config, channel);\n\n    const header = fieldDef.header ?? {};\n    const labels = getFirstDefined(header.labels, config.header.labels, true);\n    const headerType = contains(['bottom', 'right'], labelOrient) ? 'footer' : 'header';\n\n    component.layoutHeaders[channel] = {\n      title,\n      facetFieldDef: fieldDef,\n      [headerType]: channel === 'facet' ? [] : [makeHeaderComponent(model, channel, labels)]\n    };\n  }\n}\n\nfunction makeHeaderComponent(model: FacetModel, channel: HeaderChannel, labels: boolean): HeaderComponent {\n  const sizeType = channel === 'row' ? 'height' : 'width';\n\n  return {\n    labels,\n    sizeSignal: model.child.component.layoutSize.get(sizeType) ? model.child.getSizeSignalRef(sizeType) : undefined,\n    axes: []\n  };\n}\n\nfunction mergeChildAxis(model: FacetModel, channel: 'x' | 'y') {\n  const {child} = model;\n  if (child.component.axes[channel]) {\n    const {layoutHeaders, resolve} = model.component;\n    resolve.axis[channel] = parseGuideResolve(resolve, channel);\n\n    if (resolve.axis[channel] === 'shared') {\n      // For shared axis, move the axes to facet's header or footer\n      const headerChannel = channel === 'x' ? 'column' : 'row';\n\n      const layoutHeader = layoutHeaders[headerChannel];\n      for (const axisComponent of child.component.axes[channel]) {\n        const headerType = getHeaderType(axisComponent.get('orient'));\n        layoutHeader[headerType] = layoutHeader[headerType] ?? [makeHeaderComponent(model, headerChannel, false)];\n\n        // FIXME: assemble shouldn't be called here, but we do it this way so we only extract the main part of the axes\n        const mainAxis = assembleAxis(axisComponent, 'main', model.config, {header: true});\n        if (mainAxis) {\n          // LayoutHeader no longer keep track of property precedence, thus let's combine.\n          layoutHeader[headerType][0].axes.push(mainAxis);\n        }\n        axisComponent.mainExtracted = true;\n      }\n    } else {\n      // Otherwise do nothing for independent axes\n    }\n  }\n}\n","import {getPositionScaleChannel, getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getViewConfigContinuousSize, getViewConfigDiscreteSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {isStep} from '../../spec/base';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {ConcatModel} from '../concat';\nimport {Model} from '../model';\nimport {Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {getSizeTypeFromLayoutSizeType, LayoutSize, LayoutSizeIndex, LayoutSizeType} from './component';\n\nexport function parseLayerLayoutSize(model: Model) {\n  parseChildrenLayoutSize(model);\n\n  parseNonUnitLayoutSizeForChannel(model, 'width');\n  parseNonUnitLayoutSizeForChannel(model, 'height');\n}\n\nexport const parseRepeatLayoutSize = parseConcatLayoutSize;\n\nexport function parseConcatLayoutSize(model: ConcatModel) {\n  parseChildrenLayoutSize(model);\n\n  // for columns === 1 (vconcat), we can completely merge width. Otherwise, we can treat merged width as childWidth.\n  const widthType = model.layout.columns === 1 ? 'width' : 'childWidth';\n\n  // for columns === undefined (hconcat), we can completely merge height. Otherwise, we can treat merged height as childHeight.\n  const heightType = model.layout.columns === undefined ? 'height' : 'childHeight';\n\n  parseNonUnitLayoutSizeForChannel(model, widthType);\n  parseNonUnitLayoutSizeForChannel(model, heightType);\n}\n\nexport function parseChildrenLayoutSize(model: Model) {\n  for (const child of model.children) {\n    child.parseLayoutSize();\n  }\n}\n\n/**\n * Merge child layout size (width or height).\n */\nfunction parseNonUnitLayoutSizeForChannel(model: Model, layoutSizeType: LayoutSizeType) {\n  /*\n   * For concat, the parent width or height might not be the same as the children's shared height.\n   * For example, hconcat's subviews may share width, but the shared width is not the hconcat view's width.\n   *\n   * layoutSizeType represents the output of the view (could be childWidth/childHeight/width/height)\n   * while the sizeType represents the properties of the child.\n   */\n  const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n  const channel = getPositionScaleChannel(sizeType);\n  const resolve = model.component.resolve;\n  const layoutSizeCmpt = model.component.layoutSize;\n\n  let mergedSize: Explicit<LayoutSize>;\n  // Try to merge layout size\n  for (const child of model.children) {\n    const childSize = child.component.layoutSize.getWithExplicit(sizeType);\n    const scaleResolve = resolve.scale[channel];\n    if (scaleResolve === 'independent' && childSize.value === 'step') {\n      // Do not merge independent scales with range-step as their size depends\n      // on the scale domains, which can be different between scales.\n      mergedSize = undefined;\n      break;\n    }\n\n    if (mergedSize) {\n      if (scaleResolve === 'independent' && mergedSize.value !== childSize.value) {\n        // For independent scale, only merge if all the sizes are the same.\n        // If the values are different, abandon the merge!\n        mergedSize = undefined;\n        break;\n      }\n      mergedSize = mergeValuesWithExplicit<LayoutSizeIndex, LayoutSize>(mergedSize, childSize, sizeType, '');\n    } else {\n      mergedSize = childSize;\n    }\n  }\n\n  if (mergedSize) {\n    // If merged, rename size and set size of all children.\n    for (const child of model.children) {\n      model.renameSignal(child.getName(sizeType), model.getName(layoutSizeType));\n      child.component.layoutSize.set(sizeType, 'merged', false);\n    }\n    layoutSizeCmpt.setWithExplicit(layoutSizeType, mergedSize);\n  } else {\n    layoutSizeCmpt.setWithExplicit(layoutSizeType, {\n      explicit: false,\n      value: undefined\n    });\n  }\n}\n\nexport function parseUnitLayoutSize(model: UnitModel) {\n  const {size, component} = model;\n  for (const channel of POSITION_SCALE_CHANNELS) {\n    const sizeType = getSizeChannel(channel);\n\n    if (size[sizeType]) {\n      const specifiedSize = size[sizeType];\n      component.layoutSize.set(sizeType, isStep(specifiedSize) ? 'step' : specifiedSize, true);\n    } else {\n      const defaultSize = defaultUnitSize(model, sizeType);\n      component.layoutSize.set(sizeType, defaultSize, false);\n    }\n  }\n}\n\nfunction defaultUnitSize(model: UnitModel, sizeType: 'width' | 'height'): LayoutSize {\n  const channel = sizeType === 'width' ? 'x' : 'y';\n  const config = model.config;\n  const scaleComponent = model.getScaleComponent(channel);\n\n  if (scaleComponent) {\n    const scaleType = scaleComponent.get('type');\n    const range = scaleComponent.get('range');\n\n    if (hasDiscreteDomain(scaleType)) {\n      const size = getViewConfigDiscreteSize(config.view, sizeType);\n      if (isVgRangeStep(range) || isStep(size)) {\n        // For discrete domain with range.step, use dynamic width/height\n        return 'step';\n      } else {\n        return size;\n      }\n    } else {\n      return getViewConfigContinuousSize(config.view, sizeType);\n    }\n  } else if (model.hasProjection || model.mark === 'arc') {\n    // arc should use continuous size by default otherwise the pie is extremely small\n    return getViewConfigContinuousSize(config.view, sizeType);\n  } else {\n    const size = getViewConfigDiscreteSize(config.view, sizeType);\n    return isStep(size) ? size.step : size;\n  }\n}\n","import {AggregateOp, LayoutAlign, NewSignal} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {Channel, COLUMN, FacetChannel, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../channel';\nimport {FieldName, FieldRefOption, initChannelDef, TypedFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {reduce} from '../encoding';\nimport * as log from '../log';\nimport {hasDiscreteDomain} from '../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField, SortOrder} from '../sort';\nimport {NormalizedFacetSpec} from '../spec';\nimport {EncodingFacetMapping, FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {contains} from '../util';\nimport {isVgRangeStep, VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {assembleFacetData} from './data/assemble';\nimport {sortArrayIndexField} from './data/calculate';\nimport {parseData} from './data/parse';\nimport {assembleLabelTitle} from './header/assemble';\nimport {getHeaderChannel, getHeaderProperty} from './header/common';\nimport {HEADER_CHANNELS, HEADER_TYPES} from './header/component';\nimport {parseFacetHeaders} from './header/parse';\nimport {parseChildrenLayoutSize} from './layoutsize/parse';\nimport {Model, ModelWithField} from './model';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {assembleFacetSignals} from './selection/assemble';\n\nexport function facetSortFieldName(\n  fieldDef: FacetFieldDef<string>,\n  sort: EncodingSortField<string>,\n  opt?: FieldRefOption\n) {\n  return vgField(sort, {suffix: `by_${vgField(fieldDef)}`, ...(opt ?? {})});\n}\n\nexport class FacetModel extends ModelWithField {\n  public readonly facet: EncodingFacetMapping<string>;\n\n  public readonly child: Model;\n\n  public readonly children: Model[];\n\n  constructor(spec: NormalizedFacetSpec, parent: Model, parentGivenName: string, config: Config) {\n    super(spec, 'facet', parent, parentGivenName, config, spec.resolve);\n\n    this.child = buildModel(spec.spec, this, this.getName('child'), undefined, config);\n    this.children = [this.child];\n\n    this.facet = this.initFacet(spec.facet, config);\n  }\n\n  private initFacet(\n    facet: FacetFieldDef<FieldName> | FacetMapping<FieldName>,\n    config: Config\n  ): EncodingFacetMapping<FieldName> {\n    // clone to prevent side effect to the original spec\n    if (!isFacetMapping(facet)) {\n      return {facet: initChannelDef(facet, 'facet', config) as FacetFieldDef<FieldName>};\n    }\n\n    return reduce(\n      facet,\n      (normalizedFacet, fieldDef: TypedFieldDef<string>, channel: Channel) => {\n        if (!contains([ROW, COLUMN], channel)) {\n          // Drop unsupported channel\n          log.warn(log.message.incompatibleChannel(channel, 'facet'));\n          return normalizedFacet;\n        }\n\n        if (fieldDef.field === undefined) {\n          log.warn(log.message.emptyFieldDef(fieldDef, channel));\n          return normalizedFacet;\n        }\n\n        // Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n        normalizedFacet[channel] = initChannelDef(fieldDef, channel, config);\n        return normalizedFacet;\n      },\n      {}\n    );\n  }\n\n  public channelHasField(channel: Channel): boolean {\n    return !!this.facet[channel];\n  }\n\n  public fieldDef(channel: Channel): TypedFieldDef<string> {\n    return this.facet[channel];\n  }\n\n  public parseData() {\n    this.component.data = parseData(this);\n    this.child.parseData();\n  }\n\n  public parseLayoutSize() {\n    parseChildrenLayoutSize(this);\n  }\n\n  public parseSelections() {\n    // As a facet has a single child, the selection components are the same.\n    // The child maintains its selections to assemble signals, which remain\n    // within its unit.\n    this.child.parseSelections();\n    this.component.selection = this.child.component.selection;\n  }\n\n  public parseMarkGroup() {\n    this.child.parseMarkGroup();\n  }\n\n  public parseAxesAndHeaders() {\n    this.child.parseAxesAndHeaders();\n\n    parseFacetHeaders(this);\n  }\n\n  public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n    return this.child.assembleSelectionTopLevelSignals(signals);\n  }\n\n  public assembleSignals(): NewSignal[] {\n    this.child.assembleSignals();\n    return [];\n  }\n\n  public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n    return this.child.assembleSelectionData(data);\n  }\n\n  private getHeaderLayoutMixins(): VgLayout {\n    const layoutMixins: VgLayout = {};\n\n    for (const channel of FACET_CHANNELS) {\n      for (const headerType of HEADER_TYPES) {\n        const layoutHeaderComponent = this.component.layoutHeaders[channel];\n        const headerComponent = layoutHeaderComponent[headerType];\n\n        const {facetFieldDef} = layoutHeaderComponent;\n        if (facetFieldDef) {\n          const titleOrient = getHeaderProperty('titleOrient', facetFieldDef, this.config, channel);\n\n          if (contains(['right', 'bottom'], titleOrient)) {\n            const headerChannel = getHeaderChannel(channel, titleOrient);\n            layoutMixins.titleAnchor = layoutMixins.titleAnchor ?? {};\n            layoutMixins.titleAnchor[headerChannel] = 'end';\n          }\n        }\n\n        if (headerComponent?.[0]) {\n          // set header/footerBand\n          const sizeType = channel === 'row' ? 'height' : 'width';\n          const bandType = headerType === 'header' ? 'headerBand' : 'footerBand';\n          if (channel !== 'facet' && !this.child.component.layoutSize.get(sizeType)) {\n            // If facet child does not have size signal, then apply headerBand\n            layoutMixins[bandType] = layoutMixins[bandType] ?? {};\n            layoutMixins[bandType][channel] = 0.5;\n          }\n\n          if (layoutHeaderComponent.title) {\n            layoutMixins.offset = layoutMixins.offset ?? {};\n            layoutMixins.offset[channel === 'row' ? 'rowTitle' : 'columnTitle'] = 10;\n          }\n        }\n      }\n    }\n    return layoutMixins;\n  }\n\n  protected assembleDefaultLayout(): VgLayout {\n    const {column, row} = this.facet;\n\n    const columns = column ? this.columnDistinctSignal() : row ? 1 : undefined;\n\n    let align: LayoutAlign = 'all';\n\n    // Do not align the cells if the scale corresponding to the direction is indepent.\n    // We always align when we facet into both row and column.\n    if (!row && this.component.resolve.scale.x === 'independent') {\n      align = 'none';\n    } else if (!column && this.component.resolve.scale.y === 'independent') {\n      align = 'none';\n    }\n\n    return {\n      ...this.getHeaderLayoutMixins(),\n\n      ...(columns ? {columns} : {}),\n      bounds: 'full',\n      align\n    };\n  }\n\n  public assembleLayoutSignals(): NewSignal[] {\n    // FIXME(https://github.com/vega/vega-lite/issues/1193): this can be incorrect if we have independent scales.\n    return this.child.assembleLayoutSignals();\n  }\n\n  private columnDistinctSignal() {\n    if (this.parent && this.parent instanceof FacetModel) {\n      // For nested facet, we will add columns to group mark instead\n      // See discussion in https://github.com/vega/vega/issues/952\n      // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n      return undefined;\n    } else {\n      // In facetNode.assemble(), the name is always this.getName('column') + '_layout'.\n      const facetLayoutDataName = this.getName('column_domain');\n      return {signal: `length(data('${facetLayoutDataName}'))`};\n    }\n  }\n\n  public assembleGroup(signals: NewSignal[]) {\n    if (this.parent && this.parent instanceof FacetModel) {\n      // Provide number of columns for layout.\n      // See discussion in https://github.com/vega/vega/issues/952\n      // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n      return {\n        ...(this.channelHasField('column')\n          ? {\n              encode: {\n                update: {\n                  // TODO(https://github.com/vega/vega-lite/issues/2759):\n                  // Correct the signal for facet of concat of facet_column\n                  columns: {field: vgField(this.facet.column, {prefix: 'distinct'})}\n                }\n              }\n            }\n          : {}),\n        ...super.assembleGroup(signals)\n      };\n    }\n    return super.assembleGroup(signals);\n  }\n\n  /**\n   * Aggregate cardinality for calculating size\n   */\n  private getCardinalityAggregateForChild() {\n    const fields: string[] = [];\n    const ops: AggregateOp[] = [];\n    const as: string[] = [];\n\n    if (this.child instanceof FacetModel) {\n      if (this.child.channelHasField('column')) {\n        const field = vgField(this.child.facet.column);\n        fields.push(field);\n        ops.push('distinct');\n        as.push(`distinct_${field}`);\n      }\n    } else {\n      for (const channel of POSITION_SCALE_CHANNELS) {\n        const childScaleComponent = this.child.component.scales[channel];\n        if (childScaleComponent && !childScaleComponent.merged) {\n          const type = childScaleComponent.get('type');\n          const range = childScaleComponent.get('range');\n\n          if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n            const domain = assembleDomain(this.child, channel);\n            const field = getFieldFromDomain(domain);\n            if (field) {\n              fields.push(field);\n              ops.push('distinct');\n              as.push(`distinct_${field}`);\n            } else {\n              log.warn(`Unknown field for ${channel}. Cannot calculate view size.`);\n            }\n          }\n        }\n      }\n    }\n    return {fields, ops, as};\n  }\n\n  private assembleFacet() {\n    const {name, data} = this.component.data.facetRoot;\n    const {row, column} = this.facet;\n    const {fields, ops, as} = this.getCardinalityAggregateForChild();\n    const groupby: string[] = [];\n\n    for (const channel of FACET_CHANNELS) {\n      const fieldDef = this.facet[channel];\n      if (fieldDef) {\n        groupby.push(vgField(fieldDef));\n\n        const {bin, sort} = fieldDef;\n\n        if (isBinning(bin)) {\n          groupby.push(vgField(fieldDef, {binSuffix: 'end'}));\n        }\n\n        if (isSortField(sort)) {\n          const {field, op = DEFAULT_SORT_OP} = sort;\n          const outputName = facetSortFieldName(fieldDef, sort);\n          if (row && column) {\n            // For crossed facet, use pre-calculate field as it requires a different groupby\n            // For each calculated field, apply max and assign them to the same name as\n            // all values of the same group should be the same anyway.\n            fields.push(outputName);\n            ops.push('max');\n            as.push(outputName);\n          } else {\n            fields.push(field);\n            ops.push(op);\n            as.push(outputName);\n          }\n        } else if (isArray(sort)) {\n          const outputName = sortArrayIndexField(fieldDef, channel);\n          fields.push(outputName);\n          ops.push('max');\n          as.push(outputName);\n        }\n      }\n    }\n\n    const cross = !!row && !!column;\n\n    return {\n      name,\n      data,\n      groupby,\n      ...(cross || fields.length > 0\n        ? {\n            aggregate: {\n              ...(cross ? {cross} : {}),\n              ...(fields.length ? {fields, ops, as} : {})\n            }\n          }\n        : {})\n    };\n  }\n\n  private facetSortFields(channel: FacetChannel): string[] {\n    const {facet} = this;\n    const fieldDef = facet[channel];\n\n    if (fieldDef) {\n      if (isSortField(fieldDef.sort)) {\n        return [facetSortFieldName(fieldDef, fieldDef.sort, {expr: 'datum'})];\n      } else if (isArray(fieldDef.sort)) {\n        return [sortArrayIndexField(fieldDef, channel, {expr: 'datum'})];\n      }\n      return [vgField(fieldDef, {expr: 'datum'})];\n    }\n    return [];\n  }\n\n  private facetSortOrder(channel: FacetChannel): SortOrder[] {\n    const {facet} = this;\n    const fieldDef = facet[channel];\n    if (fieldDef) {\n      const {sort} = fieldDef;\n      const order = (isSortField(sort) ? sort.order : !isArray(sort) && sort) || 'ascending';\n      return [order];\n    }\n    return [];\n  }\n\n  private assembleLabelTitle() {\n    const {facet, config} = this;\n    if (facet.facet) {\n      // Facet always uses title to display labels\n      return assembleLabelTitle(facet.facet, 'facet', config);\n    }\n\n    const ORTHOGONAL_ORIENT = {\n      row: ['top', 'bottom'],\n      column: ['left', 'right']\n    };\n\n    for (const channel of HEADER_CHANNELS) {\n      if (facet[channel]) {\n        const labelOrient = getHeaderProperty('labelOrient', facet[channel], config, channel);\n        if (contains(ORTHOGONAL_ORIENT[channel], labelOrient)) {\n          // Row/Column with orthogonal labelOrient must use title to display labels\n          return assembleLabelTitle(facet[channel], channel, config);\n        }\n      }\n    }\n    return undefined;\n  }\n\n  public assembleMarks(): VgMarkGroup[] {\n    const {child} = this;\n\n    // If we facet by two dimensions, we need to add a cross operator to the aggregation\n    // so that we create all groups\n    const facetRoot = this.component.data.facetRoot;\n    const data = assembleFacetData(facetRoot);\n\n    const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n    const title = this.assembleLabelTitle() || child.assembleTitle();\n    const style = child.assembleGroupStyle();\n\n    const markGroup = {\n      name: this.getName('cell'),\n      type: 'group',\n      ...(title ? {title} : {}),\n      ...(style ? {style} : {}),\n      from: {\n        facet: this.assembleFacet()\n      },\n      // TODO: move this to after data\n      sort: {\n        field: FACET_CHANNELS.map(c => this.facetSortFields(c)).flat(),\n        order: FACET_CHANNELS.map(c => this.facetSortOrder(c)).flat()\n      },\n      ...(data.length > 0 ? {data: data} : {}),\n      ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n      ...child.assembleGroup(assembleFacetSignals(this, []))\n    };\n\n    return [markGroup];\n  }\n\n  protected getMapping() {\n    return this.facet;\n  }\n}\n","import {vgField} from '../../channeldef';\nimport {DEFAULT_SORT_OP, isSortField} from '../../sort';\nimport {FacetMapping} from '../../spec/facet';\nimport {facetSortFieldName} from '../facet';\nimport {DataFlowNode} from './dataflow';\nimport {JoinAggregateTransformNode} from './joinaggregate';\n\nexport function makeJoinAggregateFromFacet(\n  parent: DataFlowNode,\n  facet: FacetMapping<string>\n): JoinAggregateTransformNode {\n  const {row, column} = facet;\n  if (row && column) {\n    let newParent = null;\n    // only need to make one for crossed facet\n    for (const fieldDef of [row, column]) {\n      if (isSortField(fieldDef.sort)) {\n        const {field, op = DEFAULT_SORT_OP} = fieldDef.sort;\n        parent = newParent = new JoinAggregateTransformNode(parent, {\n          joinaggregate: [\n            {\n              op,\n              field,\n              as: facetSortFieldName(fieldDef, fieldDef.sort, {forAs: true})\n            }\n          ],\n          groupby: [vgField(fieldDef)]\n        });\n      }\n    }\n    return newParent;\n  }\n  return null;\n}\n","import {AncestorParse, DataComponent} from '.';\nimport {\n  Data,\n  isGenerator,\n  isGraticuleGenerator,\n  isInlineData,\n  isNamedData,\n  isSequenceGenerator,\n  isUrlData,\n  MAIN,\n  ParseValue,\n  RAW\n} from '../../data';\nimport * as log from '../../log';\nimport {\n  isAggregate,\n  isBin,\n  isCalculate,\n  isDensity,\n  isFilter,\n  isFlatten,\n  isFold,\n  isImpute,\n  isJoinAggregate,\n  isLoess,\n  isLookup,\n  isPivot,\n  isQuantile,\n  isRegression,\n  isSample,\n  isStack,\n  isTimeUnit,\n  isWindow\n} from '../../transform';\nimport {deepEqual, mergeDeep} from '../../util';\nimport {isFacetModel, isLayerModel, isUnitModel, Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {materializeSelections} from '../selection/parse';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {\n  getImplicitFromEncoding,\n  getImplicitFromFilterTransform,\n  getImplicitFromSelection,\n  ParseNode\n} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {makeJoinAggregateFromFacet} from './joinaggregatefacet';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {PivotTransformNode} from './pivot';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport function findSource(data: Data, sources: SourceNode[]) {\n  for (const other of sources) {\n    const otherData = other.data;\n\n    // if both datasets have a name defined, we cannot merge\n    if (data.name && other.hasName() && data.name !== other.dataName) {\n      continue;\n    }\n\n    // feature and mesh are mutually exclusive\n    if (data['format']?.mesh && otherData.format?.feature) {\n      continue;\n    }\n\n    // we have to extract the same feature or mesh\n    if (\n      (data['format']?.feature || otherData.format?.feature) &&\n      data['format']?.feature !== otherData.format?.feature\n    ) {\n      continue;\n    }\n    if ((data['format']?.mesh || otherData.format?.mesh) && data['format']?.mesh !== otherData.format?.mesh) {\n      continue;\n    }\n\n    if (isInlineData(data) && isInlineData(otherData)) {\n      if (deepEqual(data.values, otherData.values)) {\n        return other;\n      }\n    } else if (isUrlData(data) && isUrlData(otherData)) {\n      if (data.url === otherData.url) {\n        return other;\n      }\n    } else if (isNamedData(data)) {\n      if (data.name === other.dataName) {\n        return other;\n      }\n    }\n  }\n  return null;\n}\n\nfunction parseRoot(model: Model, sources: SourceNode[]): DataFlowNode {\n  if (model.data || !model.parent) {\n    // if the model defines a data source or is the root, create a source node\n\n    if (model.data === null) {\n      // data: null means we should ignore the parent's data so we just create a new data source\n      const source = new SourceNode({values: []});\n      sources.push(source);\n      return source;\n    }\n\n    const existingSource = findSource(model.data, sources);\n\n    if (existingSource) {\n      if (!isGenerator(model.data)) {\n        existingSource.data.format = mergeDeep({}, model.data.format, existingSource.data.format);\n      }\n\n      // if the new source has a name but the existing one does not, we can set it\n      if (!existingSource.hasName() && model.data.name) {\n        existingSource.dataName = model.data.name;\n      }\n\n      return existingSource;\n    } else {\n      const source = new SourceNode(model.data);\n      sources.push(source);\n      return source;\n    }\n  } else {\n    // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n    return model.parent.component.data.facetRoot\n      ? model.parent.component.data.facetRoot\n      : model.parent.component.data.main;\n  }\n}\n\n/**\n * Parses a transform array into a chain of connected dataflow nodes.\n */\nexport function parseTransformArray(head: DataFlowNode, model: Model, ancestorParse: AncestorParse): DataFlowNode {\n  let lookupCounter = 0;\n\n  for (const t of model.transforms) {\n    let derivedType: ParseValue = undefined;\n    let transformNode: DataFlowNode;\n\n    if (isCalculate(t)) {\n      transformNode = head = new CalculateNode(head, t);\n      derivedType = 'derived';\n    } else if (isFilter(t)) {\n      const implicit = getImplicitFromFilterTransform(t);\n      transformNode = head = ParseNode.makeWithAncestors(head, {}, implicit, ancestorParse) ?? head;\n\n      head = new FilterNode(head, model, t.filter);\n    } else if (isBin(t)) {\n      transformNode = head = BinNode.makeFromTransform(head, t, model);\n      derivedType = 'number';\n    } else if (isTimeUnit(t)) {\n      derivedType = 'date';\n      const parsedAs = ancestorParse.getWithExplicit(t.field);\n      // Create parse node because the input to time unit is always date.\n      if (parsedAs.value === undefined) {\n        head = new ParseNode(head, {[t.field]: derivedType});\n        ancestorParse.set(t.field, derivedType, false);\n      }\n      transformNode = head = TimeUnitNode.makeFromTransform(head, t);\n    } else if (isAggregate(t)) {\n      transformNode = head = AggregateNode.makeFromTransform(head, t);\n      derivedType = 'number';\n      if (requiresSelectionId(model)) {\n        head = new IdentifierNode(head);\n      }\n    } else if (isLookup(t)) {\n      transformNode = head = LookupNode.make(head, model, t, lookupCounter++);\n      derivedType = 'derived';\n    } else if (isWindow(t)) {\n      transformNode = head = new WindowTransformNode(head, t);\n      derivedType = 'number';\n    } else if (isJoinAggregate(t)) {\n      transformNode = head = new JoinAggregateTransformNode(head, t);\n      derivedType = 'number';\n    } else if (isStack(t)) {\n      transformNode = head = StackNode.makeFromTransform(head, t);\n      derivedType = 'derived';\n    } else if (isFold(t)) {\n      transformNode = head = new FoldTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isFlatten(t)) {\n      transformNode = head = new FlattenTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isPivot(t)) {\n      transformNode = head = new PivotTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isSample(t)) {\n      head = new SampleTransformNode(head, t);\n    } else if (isImpute(t)) {\n      transformNode = head = ImputeNode.makeFromTransform(head, t);\n      derivedType = 'derived';\n    } else if (isDensity(t)) {\n      transformNode = head = new DensityTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isQuantile(t)) {\n      transformNode = head = new QuantileTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isRegression(t)) {\n      transformNode = head = new RegressionTransformNode(head, t);\n      derivedType = 'derived';\n    } else if (isLoess(t)) {\n      transformNode = head = new LoessTransformNode(head, t);\n      derivedType = 'derived';\n    } else {\n      log.warn(log.message.invalidTransformIgnored(t));\n      continue;\n    }\n\n    if (transformNode && derivedType !== undefined) {\n      for (const field of transformNode.producedFields() ?? []) {\n        ancestorParse.set(field, derivedType, false);\n      }\n    }\n  }\n\n  return head;\n}\n\n/*\nDescription of the dataflow (http://asciiflow.com/):\n     +--------+\n     | Source |\n     +---+----+\n         |\n         v\n     FormatParse\n     (explicit)\n         |\n         v\n     Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n         |\n         v\n     FormatParse\n     (implicit)\n         |\n         v\n Binning (in `encoding`)\n         |\n         v\n Timeunit (in `encoding`)\n         |\n         v\nFormula From Sort Array\n         |\n         v\n      +--+--+\n      | Raw |\n      +-----+\n         |\n         v\n  Aggregate (in `encoding`)\n         |\n         v\n  Stack (in `encoding`)\n         |\n         v\n  Invalid Filter\n         |\n         v\n   +----------+\n   |   Main   |\n   +----------+\n         |\n         v\n     +-------+\n     | Facet |----> \"column\", \"column-layout\", and \"row\"\n     +-------+\n         |\n         v\n  ...Child data...\n*/\n\nexport function parseData(model: Model): DataComponent {\n  let head = parseRoot(model, model.component.data.sources);\n\n  const {outputNodes, outputNodeRefCounts} = model.component.data;\n  const ancestorParse = model.parent ? model.parent.component.data.ancestorParse.clone() : new AncestorParse();\n  const data = model.data;\n\n  if (isGenerator(data)) {\n    // insert generator transform\n    if (isSequenceGenerator(data)) {\n      head = new SequenceNode(head, data.sequence);\n    } else if (isGraticuleGenerator(data)) {\n      head = new GraticuleNode(head, data.graticule);\n    }\n    // no parsing necessary for generator\n    ancestorParse.parseNothing = true;\n  } else if (data?.format?.parse === null) {\n    // format.parse: null means disable parsing\n    ancestorParse.parseNothing = true;\n  }\n\n  head = ParseNode.makeExplicit(head, model, ancestorParse) ?? head;\n\n  // Default discrete selections require an identifer transform to\n  // uniquely identify data points. Add this transform at the head of\n  // the pipeline such that the identifier field is available for all\n  // subsequent datasets. During optimization, we will remove this\n  // transform if it proves to be unnecessary. Additional identifier\n  // transforms will be necessary when new tuples are constructed\n  // (e.g., post-aggregation).\n  head = new IdentifierNode(head);\n\n  // HACK: This is equivalent for merging bin extent for union scale.\n  // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n  const parentIsLayer = model.parent && isLayerModel(model.parent);\n  if (isUnitModel(model) || isFacetModel(model)) {\n    if (parentIsLayer) {\n      head = BinNode.makeFromEncoding(head, model) ?? head;\n    }\n  }\n\n  if (model.transforms.length > 0) {\n    head = parseTransformArray(head, model, ancestorParse);\n  }\n\n  // create parse nodes for fields that need to be parsed (or flattened) implicitly\n  const implicitSelection = getImplicitFromSelection(model);\n  const implicitEncoding = getImplicitFromEncoding(model);\n  head = ParseNode.makeWithAncestors(head, {}, {...implicitSelection, ...implicitEncoding}, ancestorParse) ?? head;\n\n  if (isUnitModel(model)) {\n    head = GeoJSONNode.parseAll(head, model);\n    head = GeoPointNode.parseAll(head, model);\n  }\n\n  if (isUnitModel(model) || isFacetModel(model)) {\n    if (!parentIsLayer) {\n      head = BinNode.makeFromEncoding(head, model) ?? head;\n    }\n\n    head = TimeUnitNode.makeFromEncoding(head, model) ?? head;\n    head = CalculateNode.parseAllForSortIndex(head, model);\n  }\n\n  // add an output node pre aggregation\n  const rawName = model.getName(RAW);\n  const raw = new OutputNode(head, rawName, RAW, outputNodeRefCounts);\n  outputNodes[rawName] = raw;\n  head = raw;\n\n  if (isUnitModel(model)) {\n    const agg = AggregateNode.makeFromEncoding(head, model);\n    if (agg) {\n      head = agg;\n\n      if (requiresSelectionId(model)) {\n        head = new IdentifierNode(head);\n      }\n    }\n    head = ImputeNode.makeFromEncoding(head, model) ?? head;\n    head = StackNode.makeFromEncoding(head, model) ?? head;\n  }\n\n  if (isUnitModel(model)) {\n    head = FilterInvalidNode.make(head, model) ?? head;\n  }\n\n  // output node for marks\n  const mainName = model.getName(MAIN);\n  const main = new OutputNode(head, mainName, MAIN, outputNodeRefCounts);\n  outputNodes[mainName] = main;\n  head = main;\n\n  if (isUnitModel(model)) {\n    materializeSelections(model, main);\n  }\n\n  // add facet marker\n  let facetRoot = null;\n  if (isFacetModel(model)) {\n    const facetName = model.getName('facet');\n\n    // Derive new aggregate for facet's sort field\n    // augment data source with new fields for crossed facet\n    head = makeJoinAggregateFromFacet(head, model.facet) ?? head;\n\n    facetRoot = new FacetNode(head, model, facetName, main.getSource());\n    outputNodes[facetName] = facetRoot;\n  }\n\n  return {\n    ...model.component.data,\n    outputNodes,\n    outputNodeRefCounts,\n    raw,\n    main,\n    facetRoot,\n    ancestorParse\n  };\n}\n","import {NewSignal} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isHConcatSpec, isVConcatSpec, NormalizedConcatSpec, NormalizedSpec} from '../spec';\nimport {VgLayout} from '../vega.schema';\nimport {keys} from '../util';\nimport {VgData} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseConcatLayoutSize} from './layoutsize/parse';\nimport {Model} from './model';\n\nexport class ConcatModel extends Model {\n  public readonly children: Model[];\n\n  constructor(spec: NormalizedConcatSpec, parent: Model, parentGivenName: string, config: Config) {\n    super(spec, 'concat', parent, parentGivenName, config, spec.resolve);\n\n    if (spec.resolve?.axis?.x === 'shared' || spec.resolve?.axis?.y === 'shared') {\n      log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n    }\n\n    this.children = this.getChildren(spec).map((child, i) => {\n      return buildModel(child, this, this.getName('concat_' + i), undefined, config);\n    });\n  }\n\n  public parseData() {\n    this.component.data = parseData(this);\n    for (const child of this.children) {\n      child.parseData();\n    }\n  }\n\n  public parseSelections() {\n    // Merge selections up the hierarchy so that they may be referenced\n    // across unit specs. Persist their definitions within each child\n    // to assemble signals which remain within output Vega unit groups.\n    this.component.selection = {};\n    for (const child of this.children) {\n      child.parseSelections();\n      for (const key of keys(child.component.selection)) {\n        this.component.selection[key] = child.component.selection[key];\n      }\n    }\n  }\n\n  public parseMarkGroup() {\n    for (const child of this.children) {\n      child.parseMarkGroup();\n    }\n  }\n\n  public parseAxesAndHeaders() {\n    for (const child of this.children) {\n      child.parseAxesAndHeaders();\n    }\n\n    // TODO(#2415): support shared axes\n  }\n\n  private getChildren(spec: NormalizedConcatSpec): NormalizedSpec[] {\n    if (isVConcatSpec(spec)) {\n      return spec.vconcat;\n    } else if (isHConcatSpec(spec)) {\n      return spec.hconcat;\n    }\n    return spec.concat;\n  }\n\n  public parseLayoutSize() {\n    parseConcatLayoutSize(this);\n  }\n\n  public parseAxisGroup(): void {\n    return null;\n  }\n\n  public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n    return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n  }\n\n  public assembleSignals(): NewSignal[] {\n    this.children.forEach(child => child.assembleSignals());\n    return [];\n  }\n\n  public assembleLayoutSignals(): NewSignal[] {\n    const layoutSignals = assembleLayoutSignals(this);\n\n    for (const child of this.children) {\n      layoutSignals.push(...child.assembleLayoutSignals());\n    }\n\n    return layoutSignals;\n  }\n\n  public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n    return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n  }\n\n  public assembleMarks(): any[] {\n    // only children have marks\n    return this.children.map(child => {\n      const title = child.assembleTitle();\n      const style = child.assembleGroupStyle();\n      const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n      return {\n        type: 'group',\n        name: child.getName('group'),\n        ...(title ? {title} : {}),\n        ...(style ? {style} : {}),\n        ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n        ...child.assembleGroup()\n      };\n    });\n  }\n\n  protected assembleDefaultLayout(): VgLayout {\n    const columns = this.layout.columns;\n    return {\n      ...(columns != null ? {columns: columns} : {}),\n      bounds: 'full',\n      // Use align each so it can work with multiple plots with different size\n      align: 'each'\n    };\n  }\n}\n","import {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {\n  Axis,\n  AxisPart,\n  AxisPropsWithConditionAndSignal,\n  COMMON_AXIS_PROPERTIES_INDEX,\n  ConditionalAxisProp,\n  SignalAxisProp\n} from '../../axis';\nimport {FieldDefBase} from '../../channeldef';\nimport {duplicate, Flag, keys} from '../../util';\nimport {Split} from '../split';\nimport {isSignalRef} from '../../vega.schema';\n\nfunction isFalseOrNull(v: any) {\n  return v === false || v === null;\n}\n\nexport type AxisComponentProps = Omit<VgAxis, 'title' | ConditionalAxisProp | SignalAxisProp> &\n  Omit<AxisPropsWithConditionAndSignal, 'title'> & {\n    title: Text | FieldDefBase<string>[] | SignalRef;\n    labelExpr: string;\n    disable: boolean;\n  };\n\nconst AXIS_COMPONENT_PROPERTIES_INDEX: Flag<keyof AxisComponentProps> = {\n  disable: 1,\n  gridScale: 1,\n  scale: 1,\n  ...COMMON_AXIS_PROPERTIES_INDEX,\n  labelExpr: 1,\n  encode: 1\n};\n\nexport const AXIS_COMPONENT_PROPERTIES = keys(AXIS_COMPONENT_PROPERTIES_INDEX);\n\nexport class AxisComponent extends Split<AxisComponentProps> {\n  constructor(\n    public readonly explicit: Partial<AxisComponentProps> = {},\n    public readonly implicit: Partial<AxisComponentProps> = {},\n    public mainExtracted = false\n  ) {\n    super();\n  }\n\n  public clone() {\n    return new AxisComponent(duplicate(this.explicit), duplicate(this.implicit), this.mainExtracted);\n  }\n\n  public hasAxisPart(part: AxisPart) {\n    // FIXME(https://github.com/vega/vega-lite/issues/2552) this method can be wrong if users use a Vega theme.\n\n    if (part === 'axis') {\n      // always has the axis container part\n      return true;\n    }\n\n    if (part === 'grid' || part === 'title') {\n      return !!this.get(part);\n    }\n    // Other parts are enabled by default, so they should not be false or null.\n    return !isFalseOrNull(this.get(part));\n  }\n\n  public hasOrientSignalRef() {\n    return isSignalRef(this.explicit.orient);\n  }\n}\n\nexport interface AxisComponentIndex {\n  x?: AxisComponent[];\n  y?: AxisComponent[];\n}\n\nexport interface AxisIndex {\n  x?: Axis;\n  y?: Axis;\n}\n","import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport {UnitModel} from '../unit';\n\nexport function labels(model: UnitModel, channel: PositionScaleChannel, specifiedLabelsSpec: any) {\n  const {encoding, config} = model;\n\n  const fieldOrDatumDef =\n    getFieldOrDatumDef<string>(encoding[channel]) ?? getFieldOrDatumDef(encoding[getSecondaryRangeChannel(channel)]);\n  const axis = model.axis(channel) || {};\n  const {format, formatType} = axis;\n\n  if (isCustomFormatType(formatType)) {\n    return {\n      text: formatCustomType({\n        fieldOrDatumDef,\n        field: 'datum.value',\n        format,\n        formatType,\n        config\n      }),\n      ...specifiedLabelsSpec\n    };\n  }\n\n  return specifiedLabelsSpec;\n}\n","import {AxisEncode as VgAxisEncode, AxisOrient} from 'vega';\nimport {Axis, AXIS_PARTS, isAxisProperty, isConditionalAxisValue} from '../../axis';\nimport {PositionScaleChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getFieldOrDatumDef, PositionDatumDef, PositionFieldDef} from '../../channeldef';\nimport {getFirstDefined, isEmpty, keys, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {LayerModel} from '../layer';\nimport {parseGuideResolve} from '../resolve';\nimport {defaultTieBreaker, Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {AxisComponent, AxisComponentIndex, AxisComponentProps, AXIS_COMPONENT_PROPERTIES} from './component';\nimport {getAxisConfig, getAxisConfigs} from './config';\nimport * as encode from './encode';\nimport {AxisRuleParams, axisRules, defaultOrient, getFieldDefTitle, getLabelAngle} from './properties';\n\nexport function parseUnitAxes(model: UnitModel): AxisComponentIndex {\n  return POSITION_SCALE_CHANNELS.reduce((axis, channel) => {\n    if (model.component.scales[channel]) {\n      axis[channel] = [parseAxis(channel, model)];\n    }\n    return axis;\n  }, {} as AxisComponentIndex);\n}\n\nconst OPPOSITE_ORIENT: Record<AxisOrient, AxisOrient> = {\n  bottom: 'top',\n  top: 'bottom',\n  left: 'right',\n  right: 'left'\n};\n\nexport function parseLayerAxes(model: LayerModel) {\n  const {axes, resolve} = model.component;\n  const axisCount: Record<AxisOrient, number> = {top: 0, bottom: 0, right: 0, left: 0};\n\n  for (const child of model.children) {\n    child.parseAxesAndHeaders();\n\n    for (const channel of keys(child.component.axes)) {\n      resolve.axis[channel] = parseGuideResolve(model.component.resolve, channel);\n      if (resolve.axis[channel] === 'shared') {\n        // If the resolve says shared (and has not been overridden)\n        // We will try to merge and see if there is a conflict\n\n        axes[channel] = mergeAxisComponents(axes[channel], child.component.axes[channel]);\n\n        if (!axes[channel]) {\n          // If merge returns nothing, there is a conflict so we cannot make the axis shared.\n          // Thus, mark axis as independent and remove the axis component.\n          resolve.axis[channel] = 'independent';\n          delete axes[channel];\n        }\n      }\n    }\n  }\n\n  // Move axes to layer's axis component and merge shared axes\n  for (const channel of POSITION_SCALE_CHANNELS) {\n    for (const child of model.children) {\n      if (!child.component.axes[channel]) {\n        // skip if the child does not have a particular axis\n        continue;\n      }\n\n      if (resolve.axis[channel] === 'independent') {\n        // If axes are independent, concat the axisComponent array.\n        axes[channel] = (axes[channel] ?? []).concat(child.component.axes[channel]);\n\n        // Automatically adjust orient\n        for (const axisComponent of child.component.axes[channel]) {\n          const {value: orient, explicit} = axisComponent.getWithExplicit('orient');\n          if (isSignalRef(orient)) {\n            continue;\n          }\n\n          if (axisCount[orient] > 0 && !explicit) {\n            // Change axis orient if the number do not match\n            const oppositeOrient = OPPOSITE_ORIENT[orient];\n            if (axisCount[orient] > axisCount[oppositeOrient]) {\n              axisComponent.set('orient', oppositeOrient, false);\n            }\n          }\n          axisCount[orient]++;\n\n          // TODO(https://github.com/vega/vega-lite/issues/2634): automatically add extra offset?\n        }\n      }\n\n      // After merging, make sure to remove axes from child\n      delete child.component.axes[channel];\n    }\n\n    // Suppress grid lines for dual axis charts (https://github.com/vega/vega-lite/issues/4676)\n    if (resolve.axis[channel] === 'independent' && axes[channel] && axes[channel].length > 1) {\n      for (const axisCmpt of axes[channel]) {\n        if (!!axisCmpt.get('grid') && !axisCmpt.explicit.grid) {\n          axisCmpt.implicit.grid = false;\n        }\n      }\n    }\n  }\n}\n\nfunction mergeAxisComponents(\n  mergedAxisCmpts: AxisComponent[],\n  childAxisCmpts: readonly AxisComponent[]\n): AxisComponent[] {\n  if (mergedAxisCmpts) {\n    // FIXME: this is a bit wrong once we support multiple axes\n    if (mergedAxisCmpts.length !== childAxisCmpts.length) {\n      return undefined; // Cannot merge axis component with different number of axes.\n    }\n    const length = mergedAxisCmpts.length;\n    for (let i = 0; i < length; i++) {\n      const merged = mergedAxisCmpts[i];\n      const child = childAxisCmpts[i];\n\n      if (!!merged !== !!child) {\n        return undefined;\n      } else if (merged && child) {\n        const mergedOrient = merged.getWithExplicit('orient');\n        const childOrient = child.getWithExplicit('orient');\n\n        if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n          // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n\n          // Cannot merge due to inconsistent orient\n          return undefined;\n        } else {\n          mergedAxisCmpts[i] = mergeAxisComponent(merged, child);\n        }\n      }\n    }\n  } else {\n    // For first one, return a copy of the child\n    return childAxisCmpts.map(axisComponent => axisComponent.clone());\n  }\n  return mergedAxisCmpts;\n}\n\nfunction mergeAxisComponent(merged: AxisComponent, child: AxisComponent): AxisComponent {\n  for (const prop of AXIS_COMPONENT_PROPERTIES) {\n    const mergedValueWithExplicit = mergeValuesWithExplicit<AxisComponentProps, any>(\n      merged.getWithExplicit(prop),\n      child.getWithExplicit(prop),\n      prop,\n      'axis',\n\n      // Tie breaker function\n      (v1: Explicit<any>, v2: Explicit<any>) => {\n        switch (prop) {\n          case 'title':\n            return mergeTitleComponent(v1, v2);\n          case 'gridScale':\n            return {\n              explicit: v1.explicit, // keep the old explicit\n              value: getFirstDefined(v1.value, v2.value)\n            };\n        }\n        return defaultTieBreaker<AxisComponentProps, any>(v1, v2, prop, 'axis');\n      }\n    );\n    merged.setWithExplicit(prop, mergedValueWithExplicit);\n  }\n  return merged;\n}\n\nfunction isExplicit<T extends string | number | boolean | object>(\n  value: T,\n  property: keyof AxisComponentProps,\n  axis: Axis,\n  model: UnitModel,\n  channel: PositionScaleChannel\n) {\n  if (property === 'disable') {\n    return axis !== undefined; // if axis is specified or null/false, then it's enable/disable state is explicit\n  }\n\n  axis = axis || {};\n\n  switch (property) {\n    case 'titleAngle':\n    case 'labelAngle':\n      return value === (isSignalRef(axis.labelAngle) ? axis.labelAngle : normalizeAngle(axis.labelAngle));\n    case 'values':\n      return !!axis.values;\n    // specified axis.values is already respected, but may get transformed.\n    case 'encode':\n      // both VL axis.encoding and axis.labelAngle affect VG axis.encode\n      return !!axis.encoding || !!axis.labelAngle;\n    case 'title':\n      // title can be explicit if fieldDef.title is set\n      if (value === getFieldDefTitle(model, channel)) {\n        return true;\n      }\n  }\n  // Otherwise, things are explicit if the returned value matches the specified property\n  return value === axis[property];\n}\n\n/**\n * Properties to always include values from config\n */\nconst propsToAlwaysIncludeConfig = new Set([\n  'grid', // Grid is an exception because we need to set grid = true to generate another grid axis\n  'translate', // translate has dependent logic for bar's bin position and it's 0.5 by default in Vega. If a config overrides this value, we need to know.\n  // the rest are not axis configs in Vega, but are in VL, so we need to set too.\n  'format',\n  'formatType',\n  'orient',\n  'labelExpr',\n  'tickCount',\n  'position',\n  'tickMinStep'\n]);\n\nfunction parseAxis(channel: PositionScaleChannel, model: UnitModel): AxisComponent {\n  let axis = model.axis(channel);\n\n  const axisComponent = new AxisComponent();\n\n  const fieldOrDatumDef = getFieldOrDatumDef(model.encoding[channel]) as\n    | PositionFieldDef<string>\n    | PositionDatumDef<string>;\n\n  const {mark, config} = model;\n\n  const orient =\n    axis?.orient ||\n    config[channel === 'x' ? 'axisX' : 'axisY']?.orient ||\n    config.axis?.orient ||\n    defaultOrient(channel);\n\n  const scaleType = model.getScaleComponent(channel).get('type');\n\n  const axisConfigs = getAxisConfigs(channel, scaleType, orient, model.config);\n\n  const disable = axis !== undefined ? !axis : getAxisConfig('disable', config, axis?.style, axisConfigs).configValue;\n  axisComponent.set('disable', disable, axis !== undefined);\n  if (disable) {\n    return axisComponent;\n  }\n\n  axis = axis || {};\n\n  const labelAngle = getLabelAngle(model, axis, channel, fieldOrDatumDef, axisConfigs);\n\n  const ruleParams: AxisRuleParams = {\n    fieldOrDatumDef,\n    axis,\n    channel,\n    model,\n    scaleType,\n    orient,\n    labelAngle,\n    mark,\n    config\n  };\n  // 1.2. Add properties\n  for (const property of AXIS_COMPONENT_PROPERTIES) {\n    const value =\n      property in axisRules ? axisRules[property](ruleParams) : isAxisProperty(property) ? axis[property] : undefined;\n\n    const hasValue = value !== undefined;\n\n    const explicit = isExplicit(value, property, axis, model, channel);\n\n    if (hasValue && explicit) {\n      axisComponent.set(property, value, explicit);\n    } else {\n      const {configValue = undefined, configFrom = undefined} =\n        isAxisProperty(property) && property !== 'values'\n          ? getAxisConfig(property, model.config, axis.style, axisConfigs)\n          : {};\n      const hasConfigValue = configValue !== undefined;\n\n      if (hasValue && !hasConfigValue) {\n        // only set property if it is explicitly set or has no config value (otherwise we will accidentally override config)\n        axisComponent.set(property, value, explicit);\n      } else if (\n        // Cases need implicit values\n        // 1. Axis config that aren't available in Vega\n        !(configFrom === 'vgAxisConfig') ||\n        // 2. Certain properties are always included (see `propsToAlwaysIncludeConfig`'s declaration for more details)\n        (propsToAlwaysIncludeConfig.has(property) && hasConfigValue) ||\n        // 3. Conditional axis values and signals\n        isConditionalAxisValue<any>(configValue) || // need to set \"any\" as TS isn't smart enough to figure the generic parameter type yet\n        isSignalRef(configValue)\n      ) {\n        // If a config is specified and is conditional, copy conditional value from axis config\n        axisComponent.set(property, configValue, false);\n      }\n    }\n  }\n\n  // 2) Add guide encode definition groups\n  const axisEncoding = axis.encoding ?? {};\n  const axisEncode = AXIS_PARTS.reduce((e: VgAxisEncode, part) => {\n    if (!axisComponent.hasAxisPart(part)) {\n      // No need to create encode for a disabled part.\n      return e;\n    }\n\n    const axisEncodingPart = guideEncodeEntry(axisEncoding[part] ?? {}, model);\n\n    const value = part === 'labels' ? encode.labels(model, channel, axisEncodingPart) : axisEncodingPart;\n\n    if (value !== undefined && !isEmpty(value)) {\n      e[part] = {update: value};\n    }\n    return e;\n  }, {} as VgAxisEncode);\n\n  // FIXME: By having encode as one property, we won't have fine grained encode merging.\n  if (!isEmpty(axisEncode)) {\n    axisComponent.set('encode', axisEncode, !!axis.encoding || axis.labelAngle !== undefined);\n  }\n\n  return axisComponent;\n}\n","import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {isContinuousFieldOrDatumDef} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport * as log from '../../log';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\n\nexport function initLayoutSize({encoding, size}: {encoding: Encoding<string>; size: LayoutSizeMixins}) {\n  for (const channel of POSITION_SCALE_CHANNELS) {\n    const sizeType = getSizeChannel(channel);\n    if (isStep(size[sizeType])) {\n      if (isContinuousFieldOrDatumDef(encoding[channel])) {\n        delete size[sizeType];\n        log.warn(log.message.stepDropped(sizeType));\n      }\n    }\n  }\n\n  return size;\n}\n","import {Orientation} from 'vega';\nimport {isBinned, isBinning} from '../../bin';\nimport {isContinuousFieldOrDatumDef, isFieldDef, isNumericDataDef, TypedFieldDef} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding, isAggregate} from '../../encoding';\nimport * as log from '../../log';\nimport {\n  AREA,\n  BAR,\n  BAR_CORNER_RADIUS_INDEX as BAR_CORNER_RADIUS_END_INDEX,\n  CIRCLE,\n  IMAGE,\n  isMarkDef,\n  LINE,\n  Mark,\n  MarkDef,\n  POINT,\n  RECT,\n  RULE,\n  SQUARE,\n  TEXT,\n  TICK\n} from '../../mark';\nimport {QUANTITATIVE, TEMPORAL} from '../../type';\nimport {contains, getFirstDefined} from '../../util';\nimport {getMarkConfig, getMarkPropOrConfig} from '../common';\n\nexport function initMarkdef(\n  mark: Mark | MarkDef,\n  encoding: Encoding<string>,\n  config: Config,\n  {graticule}: {graticule: boolean}\n) {\n  const markDef: MarkDef = isMarkDef(mark) ? {...mark} : {type: mark};\n\n  // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n  const specifiedOrient = getMarkPropOrConfig('orient', markDef, config);\n  markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n  if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n    log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n  }\n\n  if (markDef.type === 'bar' && markDef.orient) {\n    const cornerRadiusEnd = getMarkPropOrConfig('cornerRadiusEnd', markDef, config);\n    if (cornerRadiusEnd !== undefined) {\n      const newProps =\n        (markDef.orient === 'horizontal' && encoding.x2) || (markDef.orient === 'vertical' && encoding.y2)\n          ? ['cornerRadius']\n          : BAR_CORNER_RADIUS_END_INDEX[markDef.orient];\n\n      for (const newProp of newProps) {\n        markDef[newProp] = cornerRadiusEnd;\n      }\n\n      if (markDef.cornerRadiusEnd !== undefined) {\n        delete markDef.cornerRadiusEnd; // no need to keep the original cap cornerRadius\n      }\n    }\n  }\n\n  // set opacity and filled if not specified in mark config\n  const specifiedOpacity = getMarkPropOrConfig('opacity', markDef, config);\n  if (specifiedOpacity === undefined) {\n    markDef.opacity = opacity(markDef.type, encoding);\n  }\n\n  const specifiedFilled = markDef.filled;\n  if (specifiedFilled === undefined) {\n    markDef.filled = graticule ? false : filled(markDef, config);\n  }\n\n  // set cursor, which should be pointer if href channel is present unless otherwise specified\n  const specifiedCursor = getMarkPropOrConfig('cursor', markDef, config);\n  if (specifiedCursor === undefined) {\n    markDef.cursor = cursor(markDef, encoding, config);\n  }\n\n  return markDef;\n}\n\nfunction cursor(markDef: MarkDef, encoding: Encoding<string>, config: Config) {\n  if (encoding.href || markDef.href || getMarkPropOrConfig('href', markDef, config)) {\n    return 'pointer';\n  }\n  return markDef.cursor;\n}\n\nfunction opacity(mark: Mark, encoding: Encoding<string>) {\n  if (contains([POINT, TICK, CIRCLE, SQUARE], mark)) {\n    // point-based marks\n    if (!isAggregate(encoding)) {\n      return 0.7;\n    }\n  }\n  return undefined;\n}\n\nfunction filled(markDef: MarkDef, config: Config) {\n  const filledConfig = getMarkConfig('filled', markDef, config);\n  const mark = markDef.type;\n  return getFirstDefined(filledConfig, mark !== POINT && mark !== LINE && mark !== RULE);\n}\n\nfunction orient(mark: Mark, encoding: Encoding<string>, specifiedOrient: Orientation): Orientation {\n  switch (mark) {\n    case POINT:\n    case CIRCLE:\n    case SQUARE:\n    case TEXT:\n    case RECT:\n    case IMAGE:\n      // orient is meaningless for these marks.\n      return undefined;\n  }\n\n  const {x, y, x2, y2} = encoding;\n\n  switch (mark) {\n    case BAR:\n      if (isFieldDef(x) && (isBinned(x.bin) || (isFieldDef(y) && y.aggregate && !x.aggregate))) {\n        return 'vertical';\n      }\n      if (isFieldDef(y) && (isBinned(y.bin) || (isFieldDef(x) && x.aggregate && !y.aggregate))) {\n        return 'horizontal';\n      }\n      if (y2 || x2) {\n        // Ranged bar does not always have clear orientation, so we allow overriding\n        if (specifiedOrient) {\n          return specifiedOrient;\n        }\n\n        // If y is range and x is non-range, non-bin Q, y is likely a prebinned field\n        if (!x2) {\n          if ((isFieldDef(x) && x.type === QUANTITATIVE && !isBinning(x.bin)) || isNumericDataDef(x)) {\n            return 'horizontal';\n          }\n        }\n\n        // If x is range and y is non-range, non-bin Q, x is likely a prebinned field\n        if (!y2) {\n          if ((isFieldDef(y) && y.type === QUANTITATIVE && !isBinning(y.bin)) || isNumericDataDef(y)) {\n            return 'vertical';\n          }\n        }\n      }\n\n    // falls through\n    case RULE:\n      // return undefined for line segment rule and bar with both axis ranged\n      // we have to ignore the case that the data are already binned\n      if (x2 && !(isFieldDef(x) && isBinned(x.bin)) && y2 && !(isFieldDef(y) && isBinned(y.bin))) {\n        return undefined;\n      }\n\n    // falls through\n    case AREA:\n      // If there are range for both x and y, y (vertical) has higher precedence.\n      if (y2) {\n        if (isFieldDef(y) && isBinned(y.bin)) {\n          return 'horizontal';\n        } else {\n          return 'vertical';\n        }\n      } else if (x2) {\n        if (isFieldDef(x) && isBinned(x.bin)) {\n          return 'vertical';\n        } else {\n          return 'horizontal';\n        }\n      } else if (mark === RULE) {\n        if (x && !y) {\n          return 'vertical';\n        } else if (y && !x) {\n          return 'horizontal';\n        }\n      }\n\n    // falls through\n    case LINE:\n    case TICK: {\n      // Tick is opposite to bar, line, area and never have ranged mark.\n      const xIsContinuous = isContinuousFieldOrDatumDef(x);\n      const yIsContinuous = isContinuousFieldOrDatumDef(y);\n      if (xIsContinuous && !yIsContinuous) {\n        return mark !== 'tick' ? 'horizontal' : 'vertical';\n      } else if (!xIsContinuous && yIsContinuous) {\n        return mark !== 'tick' ? 'vertical' : 'horizontal';\n      } else if (xIsContinuous && yIsContinuous) {\n        const xDef = x as TypedFieldDef<string>; // we can cast here since they are surely fieldDef\n        const yDef = y as TypedFieldDef<string>;\n\n        const xIsTemporal = xDef.type === TEMPORAL;\n        const yIsTemporal = yDef.type === TEMPORAL;\n\n        // temporal without timeUnit is considered continuous, but better serves as dimension\n        if (xIsTemporal && !yIsTemporal) {\n          return mark !== 'tick' ? 'vertical' : 'horizontal';\n        } else if (!xIsTemporal && yIsTemporal) {\n          return mark !== 'tick' ? 'horizontal' : 'vertical';\n        }\n\n        if (!xDef.aggregate && yDef.aggregate) {\n          return mark !== 'tick' ? 'vertical' : 'horizontal';\n        } else if (xDef.aggregate && !yDef.aggregate) {\n          return mark !== 'tick' ? 'horizontal' : 'vertical';\n        }\n\n        if (specifiedOrient) {\n          // When ambiguous, use user specified one.\n          return specifiedOrient;\n        }\n\n        return 'vertical';\n      } else {\n        // Discrete x Discrete case\n        if (specifiedOrient) {\n          // When ambiguous, use user specified one.\n          return specifiedOrient;\n        }\n\n        return undefined;\n      }\n    }\n  }\n  return 'vertical';\n}\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const arc: MarkCompiler = {\n  vgMark: 'arc',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        size: 'ignore',\n        orient: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n      ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n\n      // arcs are rectangles in polar coordinates\n      ...encode.rectPosition(model, 'radius', 'arc'),\n      ...encode.rectPosition(model, 'theta', 'arc')\n    };\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const area: MarkCompiler = {\n  vgMark: 'area',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        orient: 'include',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.pointOrRangePosition('x', model, {\n        defaultPos: 'zeroOrMin',\n        defaultPos2: 'zeroOrMin',\n        range: model.markDef.orient === 'horizontal'\n      }),\n      ...encode.pointOrRangePosition('y', model, {\n        defaultPos: 'zeroOrMin',\n        defaultPos2: 'zeroOrMin',\n        range: model.markDef.orient === 'vertical'\n      }),\n      ...encode.defined(model)\n    };\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const bar: MarkCompiler = {\n  vgMark: 'rect',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        orient: 'ignore',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.rectPosition(model, 'x', 'bar'),\n      ...encode.rectPosition(model, 'y', 'bar')\n    };\n  }\n};\n","import {GeoShapeTransform as VgGeoShapeTransform} from 'vega';\nimport {isFieldDef, vgField} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {VgPostEncodingTransform} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const geoshape: MarkCompiler = {\n  vgMark: 'shape',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        size: 'ignore',\n        orient: 'ignore',\n        theta: 'ignore'\n      })\n    };\n  },\n  postEncodingTransform: (model: UnitModel): VgPostEncodingTransform[] => {\n    const {encoding} = model;\n    const shapeDef = encoding.shape;\n\n    const transform: VgGeoShapeTransform = {\n      type: 'geoshape',\n      projection: model.projectionName(),\n      // as: 'shape',\n      ...(shapeDef && isFieldDef(shapeDef) && shapeDef.type === GEOJSON\n        ? {field: vgField(shapeDef, {expr: 'datum'})}\n        : {})\n    };\n    return [transform];\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const image: MarkCompiler = {\n  vgMark: 'image',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'ignore',\n        orient: 'ignore',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.rectPosition(model, 'x', 'image'),\n      ...encode.rectPosition(model, 'y', 'image'),\n      ...encode.text(model, 'url')\n    };\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const line: MarkCompiler = {\n  vgMark: 'line',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        size: 'ignore',\n        orient: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n      ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n      ...encode.nonPosition('size', model, {\n        vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n      }),\n      ...encode.defined(model)\n    };\n  }\n};\n\nexport const trail: MarkCompiler = {\n  vgMark: 'trail',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        size: 'include',\n        orient: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n      ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n      ...encode.nonPosition('size', model),\n      ...encode.defined(model)\n    };\n  }\n};\n","import {Config} from '../../config';\nimport {VgEncodeEntry} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nfunction encodeEntry(model: UnitModel, fixedShape?: 'circle' | 'square') {\n  const {config} = model;\n\n  return {\n    ...encode.baseEncodeEntry(model, {\n      align: 'ignore',\n      baseline: 'ignore',\n      color: 'include',\n      size: 'include',\n      orient: 'ignore',\n      theta: 'ignore'\n    }),\n    ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n    ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n    ...encode.nonPosition('size', model),\n    ...encode.nonPosition('angle', model),\n    ...shapeMixins(model, config, fixedShape)\n  };\n}\n\nexport function shapeMixins(model: UnitModel, config: Config, fixedShape?: 'circle' | 'square'): VgEncodeEntry {\n  if (fixedShape) {\n    return {shape: {value: fixedShape}};\n  }\n  return encode.nonPosition('shape', model);\n}\n\nexport const point: MarkCompiler = {\n  vgMark: 'symbol',\n  encodeEntry: (model: UnitModel) => {\n    return encodeEntry(model);\n  }\n};\n\nexport const circle: MarkCompiler = {\n  vgMark: 'symbol',\n  encodeEntry: (model: UnitModel) => {\n    return encodeEntry(model, 'circle');\n  }\n};\n\nexport const square: MarkCompiler = {\n  vgMark: 'symbol',\n  encodeEntry: (model: UnitModel) => {\n    return encodeEntry(model, 'square');\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rect: MarkCompiler = {\n  vgMark: 'rect',\n  encodeEntry: (model: UnitModel) => {\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        orient: 'ignore',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.rectPosition(model, 'x', 'rect'),\n      ...encode.rectPosition(model, 'y', 'rect')\n    };\n  }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rule: MarkCompiler = {\n  vgMark: 'rule',\n  encodeEntry: (model: UnitModel) => {\n    const {markDef} = model;\n    const orient = markDef.orient;\n\n    if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n      // Show nothing if we have none of x, y, lat, and long.\n      return {};\n    }\n\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        orient: 'ignore',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n      ...encode.pointOrRangePosition('x', model, {\n        defaultPos: orient === 'horizontal' ? 'zeroOrMax' : 'mid',\n        defaultPos2: 'zeroOrMin',\n        range: orient !== 'vertical' // include x2 for horizontal or line segment rule\n      }),\n      ...encode.pointOrRangePosition('y', model, {\n        defaultPos: orient === 'vertical' ? 'zeroOrMax' : 'mid',\n        defaultPos2: 'zeroOrMin',\n        range: orient !== 'horizontal' // include y2 for vertical or line segment rule\n      }),\n      ...encode.nonPosition('size', model, {\n        vgChannel: 'strokeWidth' // VL's rule size is strokeWidth\n      })\n    };\n  }\n};\n","import {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {MarkDef} from '../../mark';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const text: MarkCompiler = {\n  vgMark: 'text',\n\n  encodeEntry: (model: UnitModel) => {\n    const {config, encoding} = model;\n\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'include',\n        baseline: 'include',\n        color: 'include',\n        size: 'ignore',\n        orient: 'ignore',\n        theta: 'include'\n      }),\n      ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n      ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n      ...encode.text(model),\n      ...encode.nonPosition('size', model, {\n        vgChannel: 'fontSize' // VL's text size is fontSize\n      }),\n      ...encode.nonPosition('angle', model),\n      ...encode.valueIfDefined('align', align(model.markDef, encoding, config)),\n      ...encode.valueIfDefined('baseline', baseline(model.markDef, encoding, config)),\n      ...encode.pointPosition('radius', model, {defaultPos: null, isMidPoint: true}),\n      ...encode.pointPosition('theta', model, {defaultPos: null, isMidPoint: true})\n    };\n  }\n};\n\nfunction align(markDef: MarkDef, encoding: Encoding<string>, config: Config) {\n  const a = getMarkPropOrConfig('align', markDef, config);\n  if (a === undefined) {\n    return 'center';\n  }\n  // If there is a config, Vega-parser will process this already.\n  return undefined;\n}\n\nfunction baseline(markDef: MarkDef, encoding: Encoding<string>, config: Config) {\n  const b = getMarkPropOrConfig('baseline', markDef, config);\n  if (b === undefined) {\n    return 'middle';\n  }\n  // If there is a config, Vega-parser will process this already.\n  return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isNumber} from 'vega-util';\nimport {getViewConfigDiscreteStep} from '../../config';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const tick: MarkCompiler = {\n  vgMark: 'rect',\n\n  encodeEntry: (model: UnitModel) => {\n    const {config, markDef} = model;\n    const orient = markDef.orient;\n\n    const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n    const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n\n    return {\n      ...encode.baseEncodeEntry(model, {\n        align: 'ignore',\n        baseline: 'ignore',\n        color: 'include',\n        orient: 'ignore',\n        size: 'ignore',\n        theta: 'ignore'\n      }),\n\n      ...encode.pointPosition('x', model, {defaultPos: 'mid', vgChannel: 'xc'}),\n      ...encode.pointPosition('y', model, {defaultPos: 'mid', vgChannel: 'yc'}),\n\n      // size / thickness => width / height\n      ...encode.nonPosition('size', model, {\n        defaultValue: defaultSize(model),\n        vgChannel: vgSizeChannel\n      }),\n      [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config))\n    };\n  }\n};\n\nfunction defaultSize(model: UnitModel): number | SignalRef {\n  const {config, markDef} = model;\n  const {orient} = markDef;\n\n  const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n  const scale = model.getScaleComponent(orient === 'horizontal' ? 'x' : 'y');\n\n  const markPropOrConfig =\n    getMarkPropOrConfig('size', markDef, config, {vgChannel: vgSizeChannel}) ?? config.tick.bandSize;\n\n  if (markPropOrConfig !== undefined) {\n    return markPropOrConfig;\n  } else {\n    const scaleRange = scale ? scale.get('range') : undefined;\n    if (scaleRange && isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n      return (scaleRange.step * 3) / 4;\n    }\n\n    const defaultViewStep = getViewConfigDiscreteStep(config.view, vgSizeChannel);\n\n    return (defaultViewStep * 3) / 4;\n  }\n}\n","import {isArray} from 'vega-util';\nimport {FieldRefOption, isFieldDef, isValueDef, vgField} from '../../channeldef';\nimport {MAIN} from '../../data';\nimport {isAggregate, pathGroupingFields} from '../../encoding';\nimport {AREA, BAR, isPathMark, LINE, Mark, TRAIL} from '../../mark';\nimport {isSortByEncoding, isSortField} from '../../sort';\nimport {contains, getFirstDefined, isNullOrFalse, keys, omit, pick} from '../../util';\nimport {VgCompare, VgEncodeEntry, VG_CORNERRADIUS_CHANNELS} from '../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, getStyles, signalOrValueRef, sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {arc} from './arc';\nimport {area} from './area';\nimport {bar} from './bar';\nimport {MarkCompiler} from './base';\nimport {geoshape} from './geoshape';\nimport {image} from './image';\nimport {line, trail} from './line';\nimport {circle, point, square} from './point';\nimport {rect} from './rect';\nimport {rule} from './rule';\nimport {text} from './text';\nimport {tick} from './tick';\n\nconst markCompiler: Record<Mark, MarkCompiler> = {\n  arc,\n  area,\n  bar,\n  circle,\n  geoshape,\n  image,\n  line,\n  point,\n  rect,\n  rule,\n  square,\n  text,\n  tick,\n  trail\n};\n\nexport function parseMarkGroups(model: UnitModel): any[] {\n  if (contains([LINE, AREA, TRAIL], model.mark)) {\n    return parsePathMark(model);\n  } else if (contains([BAR], model.mark)) {\n    return getStackGroups(model);\n  } else {\n    return getMarkGroups(model);\n  }\n}\n\nconst FACETED_PATH_PREFIX = 'faceted_path_';\n\nfunction parsePathMark(model: UnitModel) {\n  const details = pathGroupingFields(model.mark, model.encoding);\n\n  const pathMarks = getMarkGroups(model, {\n    // If has subfacet for line/area group, need to use faceted data from below.\n    fromPrefix: details.length > 0 ? FACETED_PATH_PREFIX : ''\n  });\n\n  if (details.length > 0) {\n    // have level of details - need to facet line into subgroups\n    // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n\n    return [\n      {\n        name: model.getName('pathgroup'),\n        type: 'group',\n        from: {\n          facet: {\n            name: FACETED_PATH_PREFIX + model.requestDataName(MAIN),\n            data: model.requestDataName(MAIN),\n            groupby: details\n          }\n        },\n        encode: {\n          update: {\n            width: {field: {group: 'width'}},\n            height: {field: {group: 'height'}}\n          }\n        },\n        marks: pathMarks\n      }\n    ];\n  } else {\n    return pathMarks;\n  }\n}\n\nconst STACK_GROUP_PREFIX = 'stack_group_';\n\n/**\n * We need to put stacked bars into groups in order to enable cornerRadius for stacks.\n * If stack is used and the model doesn't have size encoding, we put the mark into groups,\n * and apply cornerRadius properties at the group.\n */\nfunction getStackGroups(model: UnitModel) {\n  // Don't use nested groups when cornerRadius is not specified, or specified as 0\n  const hasCornerRadius = VG_CORNERRADIUS_CHANNELS.some(prop => getMarkPropOrConfig(prop, model.markDef, model.config));\n\n  // Activate groups if stack is used and the model doesn't have size encoding\n  if (model.stack && !model.fieldDef('size') && hasCornerRadius) {\n    // Generate the mark\n    const [mark] = getMarkGroups(model, {fromPrefix: STACK_GROUP_PREFIX});\n\n    // Get the scale for the stacked field\n    const fieldScale = model.scaleName(model.stack.fieldChannel);\n    const stackField = (opt: FieldRefOption = {}) => model.vgField(model.stack.fieldChannel, opt);\n    // Find the min/max of the pixel value on the stacked direction\n    const stackFieldGroup = (func: 'min' | 'max', expr: 'datum' | 'parent') => {\n      const vgFieldMinMax = [\n        stackField({prefix: 'min', suffix: 'start', expr}),\n        stackField({prefix: 'max', suffix: 'start', expr}),\n        stackField({prefix: 'min', suffix: 'end', expr}),\n        stackField({prefix: 'max', suffix: 'end', expr})\n      ];\n      return `${func}(${vgFieldMinMax.map(field => `scale('${fieldScale}',${field})`).join(',')})`;\n    };\n\n    let groupUpdate: VgEncodeEntry;\n    let innerGroupUpdate: VgEncodeEntry;\n\n    // Build the encoding for group and an inner group\n    if (model.stack.fieldChannel === 'x') {\n      // Move cornerRadius, y/yc/y2/height properties to group\n      // Group x/x2 should be the min/max of the marks within\n      groupUpdate = {\n        ...pick(mark.encode.update, ['y', 'yc', 'y2', 'height', ...VG_CORNERRADIUS_CHANNELS]),\n        x: {signal: stackFieldGroup('min', 'datum')},\n        x2: {signal: stackFieldGroup('max', 'datum')},\n        clip: {value: true}\n      };\n      // Inner group should revert the x translation, and pass height through\n      innerGroupUpdate = {\n        x: {field: {group: 'x'}, mult: -1},\n        height: {field: {group: 'height'}}\n      };\n      // The marks should use the same height as group, without y/yc/y2 properties (because it's already done by group)\n      // This is why size encoding is not supported yet\n      mark.encode.update = {\n        ...omit(mark.encode.update, ['y', 'yc', 'y2']),\n        height: {field: {group: 'height'}}\n      };\n    } else {\n      groupUpdate = {\n        ...pick(mark.encode.update, ['x', 'xc', 'x2', 'width']),\n        y: {signal: stackFieldGroup('min', 'datum')},\n        y2: {signal: stackFieldGroup('max', 'datum')},\n        clip: {value: true}\n      };\n      innerGroupUpdate = {\n        y: {field: {group: 'y'}, mult: -1},\n        width: {field: {group: 'width'}}\n      };\n      mark.encode.update = {\n        ...omit(mark.encode.update, ['x', 'xc', 'x2']),\n        width: {field: {group: 'width'}}\n      };\n    }\n\n    // Deal with cornerRadius properties\n    for (const key of VG_CORNERRADIUS_CHANNELS) {\n      const configValue = getMarkConfig(key, model.markDef, model.config);\n      // Move from mark to group\n      if (mark.encode.update[key]) {\n        groupUpdate[key] = mark.encode.update[key];\n        delete mark.encode.update[key];\n      } else if (configValue) {\n        groupUpdate[key] = signalOrValueRef(configValue);\n      }\n      // Overwrite any cornerRadius on mark set by config --- they are already moved to the group\n      if (configValue) {\n        mark.encode.update[key] = {value: 0};\n      }\n    }\n\n    // For bin and time unit, we have to add bin/timeunit -end channels.\n    const groupByField = model.fieldDef(model.stack.groupbyChannel);\n    const groupby: string[] = vgField(groupByField) ? [vgField(groupByField)] : [];\n\n    if (groupByField?.bin || groupByField?.timeUnit) {\n      groupby.push(vgField(groupByField, {binSuffix: 'end'}));\n    }\n\n    const strokeProperties = [\n      'stroke',\n      'strokeWidth',\n      'strokeJoin',\n      'strokeCap',\n      'strokeDash',\n      'strokeDashOffset',\n      'strokeMiterLimit',\n      'strokeOpacity'\n    ] as const;\n\n    // Generate stroke properties for the group\n    groupUpdate = strokeProperties.reduce((encode, prop) => {\n      if (mark.encode.update[prop]) {\n        return {...encode, [prop]: mark.encode.update[prop]};\n      } else {\n        const configValue = getMarkConfig(prop, model.markDef, model.config);\n        if (configValue !== undefined) {\n          return {...encode, [prop]: signalOrValueRef(configValue)};\n        } else {\n          return encode;\n        }\n      }\n    }, groupUpdate);\n\n    // Apply strokeForeground and strokeOffset if stroke is used\n    if (groupUpdate.stroke) {\n      groupUpdate.strokeForeground = {value: true};\n      groupUpdate.strokeOffset = {value: 0};\n    }\n\n    return [\n      {\n        type: 'group',\n        from: {\n          facet: {\n            data: model.requestDataName(MAIN),\n            name: STACK_GROUP_PREFIX + model.requestDataName(MAIN),\n            groupby,\n            aggregate: {\n              fields: [\n                stackField({suffix: 'start'}),\n                stackField({suffix: 'start'}),\n                stackField({suffix: 'end'}),\n                stackField({suffix: 'end'})\n              ],\n              ops: ['min', 'max', 'min', 'max']\n            }\n          }\n        },\n        encode: {\n          update: groupUpdate\n        },\n        marks: [\n          {\n            type: 'group',\n            encode: {update: innerGroupUpdate},\n            marks: [mark]\n          }\n        ]\n      }\n    ];\n  } else {\n    return getMarkGroups(model);\n  }\n}\n\nexport function getSort(model: UnitModel): VgCompare {\n  const {encoding, stack, mark, markDef, config} = model;\n  const order = encoding.order;\n  if (\n    (!isArray(order) && isValueDef(order) && isNullOrFalse(order.value)) ||\n    (!order && isNullOrFalse(getMarkPropOrConfig('order', markDef, config)))\n  ) {\n    return undefined;\n  } else if ((isArray(order) || isFieldDef(order)) && !stack) {\n    // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n    return sortParams(order, {expr: 'datum'});\n  } else if (isPathMark(mark)) {\n    // For both line and area, we sort values based on dimension by default\n    const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n    const dimensionChannelDef = encoding[dimensionChannel];\n    if (isFieldDef(dimensionChannelDef)) {\n      const s = dimensionChannelDef.sort;\n\n      if (isArray(s)) {\n        return {\n          field: vgField(dimensionChannelDef, {prefix: dimensionChannel, suffix: 'sort_index', expr: 'datum'})\n        };\n      } else if (isSortField(s)) {\n        return {\n          field: vgField(\n            {\n              // FIXME: this op might not already exist?\n              // FIXME: what if dimensionChannel (x or y) contains custom domain?\n              aggregate: isAggregate(model.encoding) ? s.op : undefined,\n              field: s.field\n            },\n            {expr: 'datum'}\n          )\n        };\n      } else if (isSortByEncoding(s)) {\n        const fieldDefToSort = model.fieldDef(s.encoding);\n        return {\n          field: vgField(fieldDefToSort, {expr: 'datum'}),\n          order: s.order\n        };\n      } else if (s === null) {\n        return undefined;\n      } else {\n        return {\n          field: vgField(dimensionChannelDef, {\n            // For stack with imputation, we only have bin_mid\n            binSuffix: model.stack && model.stack.impute ? 'mid' : undefined,\n            expr: 'datum'\n          })\n        };\n      }\n    }\n    return undefined;\n  }\n  return undefined;\n}\n\nfunction getMarkGroups(\n  model: UnitModel,\n  opt: {\n    fromPrefix: string;\n  } = {fromPrefix: ''}\n) {\n  const {mark, markDef, config} = model;\n\n  const clip = getFirstDefined(markDef.clip, scaleClip(model), projectionClip(model));\n  const style = getStyles(markDef);\n  const key = model.encoding.key;\n  const sort = getSort(model);\n  const interactive = interactiveFlag(model);\n  const aria = getMarkPropOrConfig('aria', markDef, config);\n\n  const postEncodingTransform = markCompiler[mark].postEncodingTransform\n    ? markCompiler[mark].postEncodingTransform(model)\n    : null;\n\n  return [\n    {\n      name: model.getName('marks'),\n      type: markCompiler[mark].vgMark,\n      ...(clip ? {clip: true} : {}),\n      ...(style ? {style} : {}),\n      ...(key ? {key: key.field} : {}),\n      ...(sort ? {sort} : {}),\n      ...(interactive ? interactive : {}),\n      ...(aria === false ? {aria} : {}),\n      from: {data: opt.fromPrefix + model.requestDataName(MAIN)},\n      encode: {\n        update: markCompiler[mark].encodeEntry(model)\n      },\n      ...(postEncodingTransform\n        ? {\n            transform: postEncodingTransform\n          }\n        : {})\n    }\n  ];\n}\n\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the selectionExtent property, which gets added during scale parsing.\n */\nfunction scaleClip(model: UnitModel) {\n  const xScale = model.getScaleComponent('x');\n  const yScale = model.getScaleComponent('y');\n  return (xScale && xScale.get('selectionExtent')) || (yScale && yScale.get('selectionExtent')) ? true : undefined;\n}\n\n/**\n * If we use a custom projection with auto-fitting to the geodata extent,\n * we need to clip to ensure the chart size doesn't explode.\n */\nfunction projectionClip(model: UnitModel) {\n  const projection = model.component.projection;\n  return projection && !projection.isFit ? true : undefined;\n}\n\n/**\n * Only output interactive flags if we have selections defined somewhere in our model hierarchy.\n */\nfunction interactiveFlag(model: UnitModel) {\n  if (!model.component.selection) return null;\n  const unitCount = keys(model.component.selection).length;\n  let parentCount = unitCount;\n  let parent = model.parent;\n  while (parent && parentCount === 0) {\n    parentCount = keys(parent.component.selection).length;\n    parent = parent.parent;\n  }\n  return parentCount ? {interactive: unitCount > 0} : null;\n}\n","import {NewSignal} from 'vega';\nimport {Axis} from '../axis';\nimport {\n  Channel,\n  GEOPOSITION_CHANNELS,\n  NONPOSITION_SCALE_CHANNELS,\n  POSITION_SCALE_CHANNELS,\n  ScaleChannel,\n  SCALE_CHANNELS,\n  SingleDefChannel,\n  supportLegend,\n  X,\n  Y\n} from '../channel';\nimport {\n  getFieldDef,\n  getFieldOrDatumDef,\n  isFieldOrDatumDef,\n  isTypedFieldDef,\n  MarkPropFieldOrDatumDef,\n  PositionFieldDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {isGraticuleGenerator} from '../data';\nimport * as vlEncoding from '../encoding';\nimport {Encoding, initEncoding} from '../encoding';\nimport {Legend} from '../legend';\nimport {GEOSHAPE, isMarkDef, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {Domain} from '../scale';\nimport {SelectionDef} from '../selection';\nimport {LayoutSizeMixins, NormalizedUnitSpec} from '../spec';\nimport {isFrameMixins} from '../spec/base';\nimport {stack, StackProperties} from '../stack';\nimport {Dict} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {AxisIndex} from './axis/component';\nimport {parseUnitAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {initLayoutSize} from './layoutsize/init';\nimport {parseUnitLayoutSize} from './layoutsize/parse';\nimport {LegendIndex} from './legend/component';\nimport {initMarkdef} from './mark/init';\nimport {parseMarkGroups} from './mark/mark';\nimport {isLayerModel, Model, ModelWithField} from './model';\nimport {ScaleIndex} from './scale/component';\nimport {\n  assembleTopLevelSignals,\n  assembleUnitSelectionData,\n  assembleUnitSelectionMarks,\n  assembleUnitSelectionSignals\n} from './selection/assemble';\nimport {parseUnitSelection} from './selection/parse';\n\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nexport class UnitModel extends ModelWithField {\n  public readonly markDef: MarkDef;\n  public readonly encoding: Encoding<string>;\n\n  public readonly specifiedScales: ScaleIndex = {};\n\n  public readonly stack: StackProperties;\n\n  protected specifiedAxes: AxisIndex = {};\n\n  protected specifiedLegends: LegendIndex = {};\n\n  public specifiedProjection: Projection = {};\n\n  public readonly selection: Dict<SelectionDef> = {};\n  public children: Model[] = [];\n\n  constructor(\n    spec: NormalizedUnitSpec,\n    parent: Model,\n    parentGivenName: string,\n    parentGivenSize: LayoutSizeMixins = {},\n    config: Config\n  ) {\n    super(spec, 'unit', parent, parentGivenName, config, undefined, isFrameMixins(spec) ? spec.view : undefined);\n\n    const mark = isMarkDef(spec.mark) ? spec.mark.type : spec.mark;\n\n    this.markDef = initMarkdef(spec.mark, spec.encoding ?? {}, config, {\n      graticule: spec.data && isGraticuleGenerator(spec.data)\n    });\n    const encoding = (this.encoding = initEncoding(spec.encoding ?? {}, this.markDef, config));\n\n    this.size = initLayoutSize({\n      encoding: encoding,\n      size: isFrameMixins(spec)\n        ? {\n            ...parentGivenSize,\n            ...(spec.width ? {width: spec.width} : {}),\n            ...(spec.height ? {height: spec.height} : {})\n          }\n        : parentGivenSize\n    });\n\n    // calculate stack properties\n    this.stack = stack(mark, encoding);\n    this.specifiedScales = this.initScales(mark, encoding);\n\n    this.specifiedAxes = this.initAxes(encoding);\n    this.specifiedLegends = this.initLegend(encoding);\n    this.specifiedProjection = spec.projection;\n\n    // Selections will be initialized upon parse.\n    this.selection = spec.selection;\n  }\n\n  public get hasProjection(): boolean {\n    const {encoding} = this;\n    const isGeoShapeMark = this.mark === GEOSHAPE;\n    const hasGeoPosition = encoding && GEOPOSITION_CHANNELS.some(channel => isFieldOrDatumDef(encoding[channel]));\n    return isGeoShapeMark || hasGeoPosition;\n  }\n\n  /**\n   * Return specified Vega-Lite scale domain for a particular channel\n   * @param channel\n   */\n  public scaleDomain(channel: ScaleChannel): Domain {\n    const scale = this.specifiedScales[channel];\n    return scale ? scale.domain : undefined;\n  }\n\n  public axis(channel: Channel): Axis {\n    return this.specifiedAxes[channel];\n  }\n\n  public legend(channel: Channel): Legend {\n    return this.specifiedLegends[channel];\n  }\n\n  private initScales(mark: Mark, encoding: Encoding<string>): ScaleIndex {\n    return SCALE_CHANNELS.reduce((scales, channel) => {\n      const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as\n        | PositionFieldDef<string>\n        | MarkPropFieldOrDatumDef<string>;\n      if (fieldOrDatumDef) {\n        scales[channel] = fieldOrDatumDef.scale ?? {};\n      }\n      return scales;\n    }, {} as ScaleIndex);\n  }\n\n  private initAxes(encoding: Encoding<string>): AxisIndex {\n    return POSITION_SCALE_CHANNELS.reduce((_axis, channel) => {\n      // Position Axis\n\n      // TODO: handle ConditionFieldDef\n      const channelDef = encoding[channel];\n      if (\n        isFieldOrDatumDef(channelDef) ||\n        (channel === X && isFieldOrDatumDef(encoding.x2)) ||\n        (channel === Y && isFieldOrDatumDef(encoding.y2))\n      ) {\n        const axisSpec = isFieldOrDatumDef(channelDef) ? channelDef.axis : undefined;\n\n        _axis[channel] = axisSpec ? {...axisSpec} : axisSpec; // convert truthy value to object\n      }\n      return _axis;\n    }, {});\n  }\n\n  private initLegend(encoding: Encoding<string>): LegendIndex {\n    return NONPOSITION_SCALE_CHANNELS.reduce((_legend, channel) => {\n      const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldOrDatumDef<string>;\n\n      if (fieldOrDatumDef && supportLegend(channel)) {\n        const legend = fieldOrDatumDef.legend;\n        _legend[channel] = legend ? {...legend} : legend; // convert truthy value to object\n      }\n\n      return _legend;\n    }, {});\n  }\n\n  public parseData() {\n    this.component.data = parseData(this);\n  }\n\n  public parseLayoutSize() {\n    parseUnitLayoutSize(this);\n  }\n\n  public parseSelections() {\n    this.component.selection = parseUnitSelection(this, this.selection);\n  }\n\n  public parseMarkGroup() {\n    this.component.mark = parseMarkGroups(this);\n  }\n\n  public parseAxesAndHeaders() {\n    this.component.axes = parseUnitAxes(this);\n  }\n\n  public assembleSelectionTopLevelSignals(signals: any[]): NewSignal[] {\n    return assembleTopLevelSignals(this, signals);\n  }\n\n  public assembleSignals(): NewSignal[] {\n    return [...assembleAxisSignals(this), ...assembleUnitSelectionSignals(this, [])];\n  }\n\n  public assembleSelectionData(data: readonly VgData[]): VgData[] {\n    return assembleUnitSelectionData(this, data);\n  }\n\n  public assembleLayout(): VgLayout {\n    return null;\n  }\n\n  public assembleLayoutSignals(): NewSignal[] {\n    return assembleLayoutSignals(this);\n  }\n\n  public assembleMarks() {\n    let marks = this.component.mark ?? [];\n\n    // If this unit is part of a layer, selections should augment\n    // all in concert rather than each unit individually. This\n    // ensures correct interleaving of clipping and brushed marks.\n    if (!this.parent || !isLayerModel(this.parent)) {\n      marks = assembleUnitSelectionMarks(this, marks);\n    }\n\n    return marks.map(this.correctDataNames);\n  }\n\n  protected getMapping() {\n    return this.encoding;\n  }\n\n  public get mark(): Mark {\n    return this.markDef.type;\n  }\n\n  public channelHasField(channel: Channel) {\n    return vlEncoding.channelHasField(this.encoding, channel);\n  }\n\n  public fieldDef(channel: SingleDefChannel) {\n    const channelDef = this.encoding[channel];\n    return getFieldDef<string>(channelDef);\n  }\n\n  public typedFieldDef(channel: SingleDefChannel) {\n    const fieldDef = this.fieldDef(channel);\n    if (isTypedFieldDef(fieldDef)) {\n      return fieldDef;\n    }\n    return null;\n  }\n}\n","import {Legend as VgLegend, NewSignal, Title as VgTitle} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedLayerSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {parseLayerAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseLayerLayoutSize} from './layoutsize/parse';\nimport {assembleLegends} from './legend/assemble';\nimport {Model} from './model';\nimport {assembleLayerSelectionMarks} from './selection/assemble';\nimport {UnitModel} from './unit';\n\nexport class LayerModel extends Model {\n  // HACK: This should be (LayerModel | UnitModel)[], but setting the correct type leads to weird error.\n  // So I'm just putting generic Model for now\n  public readonly children: Model[];\n\n  constructor(\n    spec: NormalizedLayerSpec,\n    parent: Model,\n    parentGivenName: string,\n    parentGivenSize: LayoutSizeMixins,\n    config: Config\n  ) {\n    super(spec, 'layer', parent, parentGivenName, config, spec.resolve, spec.view);\n\n    const layoutSize = {\n      ...parentGivenSize,\n      ...(spec.width ? {width: spec.width} : {}),\n      ...(spec.height ? {height: spec.height} : {})\n    };\n\n    this.children = spec.layer.map((layer, i) => {\n      if (isLayerSpec(layer)) {\n        return new LayerModel(layer, this, this.getName('layer_' + i), layoutSize, config);\n      } else if (isUnitSpec(layer)) {\n        return new UnitModel(layer, this, this.getName('layer_' + i), layoutSize, config);\n      }\n\n      throw new Error(log.message.invalidSpec(layer));\n    });\n  }\n\n  public parseData() {\n    this.component.data = parseData(this);\n    for (const child of this.children) {\n      child.parseData();\n    }\n  }\n\n  public parseLayoutSize() {\n    parseLayerLayoutSize(this);\n  }\n\n  public parseSelections() {\n    // Merge selections up the hierarchy so that they may be referenced\n    // across unit specs. Persist their definitions within each child\n    // to assemble signals which remain within output Vega unit groups.\n    this.component.selection = {};\n    for (const child of this.children) {\n      child.parseSelections();\n      for (const key of keys(child.component.selection)) {\n        this.component.selection[key] = child.component.selection[key];\n      }\n    }\n  }\n\n  public parseMarkGroup() {\n    for (const child of this.children) {\n      child.parseMarkGroup();\n    }\n  }\n\n  public parseAxesAndHeaders() {\n    parseLayerAxes(this);\n  }\n\n  public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n    return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n  }\n\n  // TODO: Support same named selections across children.\n  public assembleSignals(): NewSignal[] {\n    return this.children.reduce((signals, child) => {\n      return signals.concat(child.assembleSignals());\n    }, assembleAxisSignals(this));\n  }\n\n  public assembleLayoutSignals(): NewSignal[] {\n    return this.children.reduce((signals, child) => {\n      return signals.concat(child.assembleLayoutSignals());\n    }, assembleLayoutSignals(this));\n  }\n\n  public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n    return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n  }\n\n  public assembleTitle(): VgTitle {\n    let title = super.assembleTitle();\n    if (title) {\n      return title;\n    }\n    // If title does not provide layer, look into children\n    for (const child of this.children) {\n      title = child.assembleTitle();\n      if (title) {\n        return title;\n      }\n    }\n    return undefined;\n  }\n\n  public assembleLayout(): VgLayout {\n    return null;\n  }\n\n  public assembleMarks(): any[] {\n    return assembleLayerSelectionMarks(\n      this,\n      this.children.flatMap(child => {\n        return child.assembleMarks();\n      })\n    );\n  }\n\n  public assembleLegends(): VgLegend[] {\n    return this.children.reduce((legends, child) => {\n      return legends.concat(child.assembleLegends());\n    }, assembleLegends(this));\n  }\n}\n","import {Config} from '../config';\nimport * as log from '../log';\nimport {isAnyConcatSpec, isFacetSpec, isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedSpec} from '../spec';\nimport {ConcatModel} from './concat';\nimport {FacetModel} from './facet';\nimport {LayerModel} from './layer';\nimport {Model} from './model';\nimport {UnitModel} from './unit';\n\nexport function buildModel(\n  spec: NormalizedSpec,\n  parent: Model,\n  parentGivenName: string,\n  unitSize: LayoutSizeMixins,\n  config: Config\n): Model {\n  if (isFacetSpec(spec)) {\n    return new FacetModel(spec, parent, parentGivenName, config);\n  } else if (isLayerSpec(spec)) {\n    return new LayerModel(spec, parent, parentGivenName, unitSize, config);\n  } else if (isUnitSpec(spec)) {\n    return new UnitModel(spec, parent, parentGivenName, unitSize, config);\n  } else if (isAnyConcatSpec(spec)) {\n    return new ConcatModel(spec, parent, parentGivenName, config);\n  }\n  throw new Error(log.message.invalidSpec(spec));\n}\n","import {AutoSizeType, LoggerInterface, Spec as VgSpec} from 'vega';\nimport {isString, mergeConfig} from 'vega-util';\nimport {getPositionScaleChannel} from '../channel';\nimport * as vlFieldDef from '../channeldef';\nimport {Config, initConfig, stripAndRedirectConfig} from '../config';\nimport * as log from '../log';\nimport {normalize} from '../normalize';\nimport {LayoutSizeMixins, TopLevel, TopLevelSpec} from '../spec';\nimport {\n  AutoSizeParams,\n  Datasets,\n  extractTopLevelProperties,\n  getFitType,\n  isFitType,\n  TopLevelProperties\n} from '../spec/toplevel';\nimport {keys} from '../util';\nimport {buildModel} from './buildmodel';\nimport {assembleRootData} from './data/assemble';\nimport {optimizeDataflow} from './data/optimize';\nimport {Model} from './model';\n\n// import {draw} from './data/debug';\n\nexport interface CompileOptions {\n  /**\n   * Sets a Vega-Lite configuration.\n   */\n  config?: Config;\n\n  /**\n   * Sets a custom logger.\n   */\n  logger?: LoggerInterface;\n\n  /**\n   * Sets a field title formatter.\n   */\n  fieldTitle?: vlFieldDef.FieldTitleFormatter;\n}\n\n/**\n * Vega-Lite's main function, for compiling Vega-Lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n *     |\n *     |  (Normalization)\n *     v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n *     |\n *     |  (Build Model)\n *     v\n * A model tree of the spec\n *     |\n *     |  (Parse)\n *     v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n *     |\n *     | (Optimize)\n *     v\n * A model tree with parsed components with the data component optimized\n *     |\n *     | (Assemble)\n *     v\n * Vega spec\n *\n * @param inputSpec The Vega-Lite specification.\n * @param opt       Optional arguments passed to the Vega-Lite compiler.\n * @returns         An object containing the compiled Vega spec and normalized Vega-Lite spec.\n */\nexport function compile(inputSpec: TopLevelSpec, opt: CompileOptions = {}) {\n  // 0. Augment opt with default opts\n  if (opt.logger) {\n    // set the singleton logger to the provided logger\n    log.set(opt.logger);\n  }\n\n  if (opt.fieldTitle) {\n    // set the singleton field title formatter\n    vlFieldDef.setTitleFormatter(opt.fieldTitle);\n  }\n\n  try {\n    // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n    const config = initConfig(mergeConfig(opt.config, inputSpec.config));\n\n    // 2. Normalize: Convert input spec -> normalized spec\n\n    // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n    // - Normalize autosize and width or height spec\n    const spec = normalize(inputSpec, config);\n\n    // 3. Build Model: normalized spec -> Model (a tree structure)\n\n    // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n    // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, ConcatModel) for different types of models.\n    const model: Model = buildModel(spec, null, '', undefined, config);\n\n    // 4 Parse: Model --> Model with components\n\n    // Note that components = intermediate representations that are equivalent to Vega specs.\n    // We need these intermediate representation because we need to merge many visualization \"components\" like projections, scales, axes, and legends.\n    // We will later convert these components into actual Vega specs in the assemble phase.\n\n    // In this phase, we do a bottom-up traversal over the whole tree to\n    // parse for each type of components once (e.g., data, layout, mark, scale).\n    // By doing bottom-up traversal, we start parsing components of unit specs and\n    // then merge child components of parent composite specs.\n    //\n    // Please see inside model.parse() for order of different components parsed.\n    model.parse();\n\n    // draw(model.component.data.sources);\n\n    // 5. Optimize the dataflow. This will modify the data component of the model.\n    optimizeDataflow(model.component.data, model);\n\n    // 6. Assemble: convert model components --> Vega Spec.\n    const vgSpec = assembleTopLevelModel(\n      model,\n      getTopLevelProperties(inputSpec, spec.autosize, config, model),\n      inputSpec.datasets,\n      inputSpec.usermeta\n    );\n\n    return {\n      spec: vgSpec,\n      normalized: spec\n    };\n  } finally {\n    // Reset the singleton logger if a logger is provided\n    if (opt.logger) {\n      log.reset();\n    }\n    // Reset the singleton field title formatter if provided\n    if (opt.fieldTitle) {\n      vlFieldDef.resetTitleFormatter();\n    }\n  }\n}\n\nfunction getTopLevelProperties(\n  inputSpec: TopLevel<any>,\n  autosize: AutoSizeType | AutoSizeParams,\n  config: Config,\n  model: Model\n) {\n  const width = model.component.layoutSize.get('width');\n  const height = model.component.layoutSize.get('height');\n  if (autosize === undefined) {\n    autosize = {type: 'pad'};\n    if (model.hasAxisOrientSignalRef()) {\n      autosize.resize = true;\n    }\n  } else if (isString(autosize)) {\n    autosize = {type: autosize};\n  }\n  if (width && height && isFitType(autosize.type)) {\n    if (width === 'step' && height === 'step') {\n      log.warn(log.message.droppingFit());\n      autosize.type = 'pad';\n    } else if (width === 'step' || height === 'step') {\n      // effectively XOR, because else if\n\n      // get step dimension\n      const sizeType = width === 'step' ? 'width' : 'height';\n      // log that we're dropping fit for respective channel\n      log.warn(log.message.droppingFit(getPositionScaleChannel(sizeType)));\n\n      // setting type to inverse fit (so if we dropped fit-x, type is now fit-y)\n      const inverseSizeType = sizeType === 'width' ? 'height' : 'width';\n      autosize.type = getFitType(inverseSizeType);\n    }\n  }\n\n  return {\n    ...(keys(autosize).length === 1 && autosize.type\n      ? autosize.type === 'pad'\n        ? {}\n        : {autosize: autosize.type}\n      : {autosize}),\n    ...extractTopLevelProperties(config),\n    ...extractTopLevelProperties(inputSpec)\n  };\n}\n\n/*\n * Assemble the top-level model to a Vega spec.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(\n  model: Model,\n  topLevelProperties: TopLevelProperties & LayoutSizeMixins,\n  datasets: Datasets = {},\n  usermeta: object\n): VgSpec {\n  // Config with Vega-Lite only config removed.\n  const vgConfig = model.config ? stripAndRedirectConfig(model.config) : undefined;\n\n  const data = [].concat(\n    model.assembleSelectionData([]),\n    // only assemble data in the root\n    assembleRootData(model.component.data, datasets)\n  );\n\n  const projections = model.assembleProjections();\n  const title = model.assembleTitle();\n  const style = model.assembleGroupStyle();\n  const encodeEntry = model.assembleGroupEncodeEntry(true);\n\n  let layoutSignals = model.assembleLayoutSignals();\n\n  // move width and height signals with values to top level\n  layoutSignals = layoutSignals.filter(signal => {\n    if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n      topLevelProperties[signal.name] = +signal.value;\n      return false;\n    }\n    return true;\n  });\n\n  return {\n    $schema: 'https://vega.github.io/schema/vega/v5.json',\n    ...(model.description ? {description: model.description} : {}),\n    ...topLevelProperties,\n    ...(title ? {title} : {}),\n    ...(style ? {style} : {}),\n    ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n    data,\n    ...(projections.length > 0 ? {projections: projections} : {}),\n    ...model.assembleGroup([...layoutSignals, ...model.assembleSelectionTopLevelSignals([])]),\n    ...(vgConfig ? {config: vgConfig} : {}),\n    ...(usermeta ? {usermeta} : {})\n  };\n}\n","import {Config} from './config';\nimport {extractTransformsFromEncoding} from './encoding';\nimport {NormalizedSpec} from './spec';\nimport {SpecMapper} from './spec/map';\nimport {GenericUnitSpec} from './spec/unit';\n\nclass TransformExtractMapper extends SpecMapper<{config: Config}, GenericUnitSpec<any, any>> {\n  public mapUnit(spec: GenericUnitSpec<any, any>, {config}: {config: Config}) {\n    if (spec.encoding) {\n      const {encoding: oldEncoding, transform: oldTransforms} = spec;\n      const {bins, timeUnits, aggregate, groupby, encoding} = extractTransformsFromEncoding(oldEncoding, config);\n\n      const transform = [\n        ...(oldTransforms ? oldTransforms : []),\n        ...bins,\n        ...timeUnits,\n        ...(aggregate.length === 0 ? [] : [{aggregate, groupby}])\n      ];\n\n      return {\n        ...spec,\n        ...(transform.length > 0 ? {transform} : {}),\n        encoding\n      };\n    } else {\n      return spec;\n    }\n  }\n}\n\nconst extractor = new TransformExtractMapper();\n\n/**\n * Modifies spec extracting transformations from encoding and moving them to the transforms array\n */\nexport function extractTransforms(spec: NormalizedSpec, config: Config): NormalizedSpec {\n  return extractor.map(spec, {config});\n}\n","import pkg from '../package.json';\nimport {normalize} from './normalize';\n\nconst version = pkg.version;\n\nexport {compile} from './compile/compile';\nexport {Config} from './config';\nexport {TopLevelSpec} from './spec';\nexport {extractTransforms} from './transformextract';\nexport {normalize, version};\n","/**\n * Parse a vega schema url into library and version.\n */\nexport default function(url: string) {\n    const regex = /\\/schema\\/([\\w-]+)\\/([\\w\\.\\-]+)\\.json$/g;\n    const [library, version] = regex.exec(url)!.slice(1, 3);\n    return {library: library as 'vega' | 'vega-lite', version};\n}\n","var name = \"vega-themes\";\nvar version = \"2.9.1\";\nvar description = \"Themes for stylized Vega and Vega-Lite visualizations.\";\nvar keywords = [\n\t\"vega\",\n\t\"vega-lite\",\n\t\"themes\",\n\t\"style\"\n];\nvar license = \"BSD-3-Clause\";\nvar author = {\n\tname: \"UW Interactive Data Lab\",\n\turl: \"https://idl.cs.washington.edu\"\n};\nvar contributors = [\n\t{\n\t\tname: \"Emily Gu\",\n\t\turl: \"https://github.com/emilygu\"\n\t},\n\t{\n\t\tname: \"Arvind Satyanarayan\",\n\t\turl: \"http://arvindsatya.com\"\n\t},\n\t{\n\t\tname: \"Jeffrey Heer\",\n\t\turl: \"https://idl.cs.washington.edu\"\n\t},\n\t{\n\t\tname: \"Dominik Moritz\",\n\t\turl: \"https://www.domoritz.de\"\n\t}\n];\nvar main = \"build/vega-themes.js\";\nvar module = \"build/vega-themes.module.js\";\nvar unpkg = \"build/vega-themes.min.js\";\nvar jsdelivr = \"build/vega-themes.min.js\";\nvar types = \"build/vega-themes.module.d.ts\";\nvar repository = {\n\ttype: \"git\",\n\turl: \"https://github.com/vega/vega-themes.git\"\n};\nvar files = [\n\t\"src\",\n\t\"build\"\n];\nvar scripts = {\n\tprebuild: \"yarn clean\",\n\tbuild: \"rollup -c\",\n\tclean: \"rimraf build && rimraf examples/build\",\n\t\"copy:data\": \"rsync -r node_modules/vega-datasets/data/* examples/data\",\n\t\"copy:build\": \"rsync -r build/* examples/build\",\n\t\"deploy:gh\": \"yarn build && mkdir -p examples/build && rsync -r build/* examples/build && gh-pages -d examples\",\n\tprepublishOnly: \"yarn clean && yarn build\",\n\tpreversion: \"yarn lint\",\n\tserve: \"browser-sync start -s -f build examples --serveStatic examples\",\n\tstart: \"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'\",\n\tprepare: \"beemo create-config\",\n\teslintbase: \"beemo eslint .\",\n\tformat: \"yarn eslintbase --fix\",\n\tlint: \"yarn eslintbase\"\n};\nvar devDependencies = {\n\t\"@rollup/plugin-json\": \"^4.1.0\",\n\t\"@rollup/plugin-node-resolve\": \"^9.0.0\",\n\t\"@wessberg/rollup-plugin-ts\": \"^1.3.4\",\n\t\"browser-sync\": \"^2.26.12\",\n\tconcurrently: \"^5.3.0\",\n\t\"gh-pages\": \"^3.1.0\",\n\trollup: \"^2.26.11\",\n\t\"rollup-plugin-bundle-size\": \"^1.0.3\",\n\t\"rollup-plugin-terser\": \"^7.0.2\",\n\ttypescript: \"^4.0.2\",\n\tvega: \"^5.10.0\",\n\t\"vega-lite\": \"^4.8.1\",\n\t\"vega-lite-dev-config\": \"^0.14.6\"\n};\nvar peerDependencies = {\n\tvega: \"*\",\n\t\"vega-lite\": \"*\"\n};\nvar beemo = {\n\tmodule: \"vega-lite-dev-config\",\n\tdrivers: [\n\t\t\"typescript\",\n\t\t\"prettier\",\n\t\t\"eslint\"\n\t]\n};\nvar pkg = {\n\tname: name,\n\tversion: version,\n\tdescription: description,\n\tkeywords: keywords,\n\tlicense: license,\n\tauthor: author,\n\tcontributors: contributors,\n\tmain: main,\n\tmodule: module,\n\tunpkg: unpkg,\n\tjsdelivr: jsdelivr,\n\ttypes: types,\n\trepository: repository,\n\tfiles: files,\n\tscripts: scripts,\n\tdevDependencies: devDependencies,\n\tpeerDependencies: peerDependencies,\n\tbeemo: beemo\n};\n\nconst lightColor = '#fff';\nconst medColor = '#888';\nconst darkTheme = {\n    background: '#333',\n    title: { color: lightColor },\n    style: {\n        'guide-label': {\n            fill: lightColor,\n        },\n        'guide-title': {\n            fill: lightColor,\n        },\n    },\n    axis: {\n        domainColor: lightColor,\n        gridColor: medColor,\n        tickColor: lightColor,\n    },\n};\n\nconst markColor = '#4572a7';\nconst excelTheme = {\n    background: '#fff',\n    arc: { fill: markColor },\n    area: { fill: markColor },\n    line: { stroke: markColor, strokeWidth: 2 },\n    path: { stroke: markColor },\n    rect: { fill: markColor },\n    shape: { stroke: markColor },\n    symbol: { fill: markColor, strokeWidth: 1.5, size: 50 },\n    axis: {\n        bandPosition: 0.5,\n        grid: true,\n        gridColor: '#000000',\n        gridOpacity: 1,\n        gridWidth: 0.5,\n        labelPadding: 10,\n        tickSize: 5,\n        tickWidth: 0.5,\n    },\n    axisBand: {\n        grid: false,\n        tickExtra: true,\n    },\n    legend: {\n        labelBaseline: 'middle',\n        labelFontSize: 11,\n        symbolSize: 50,\n        symbolType: 'square',\n    },\n    range: {\n        category: [\n            '#4572a7',\n            '#aa4643',\n            '#8aa453',\n            '#71598e',\n            '#4598ae',\n            '#d98445',\n            '#94aace',\n            '#d09393',\n            '#b9cc98',\n            '#a99cbc',\n        ],\n    },\n};\n\nconst markColor$1 = '#30a2da';\nconst axisColor = '#cbcbcb';\nconst guideLabelColor = '#999';\nconst guideTitleColor = '#333';\nconst backgroundColor = '#f0f0f0';\nconst blackTitle = '#333';\nconst fiveThirtyEightTheme = {\n    arc: { fill: markColor$1 },\n    area: { fill: markColor$1 },\n    axis: {\n        domainColor: axisColor,\n        grid: true,\n        gridColor: axisColor,\n        gridWidth: 1,\n        labelColor: guideLabelColor,\n        labelFontSize: 10,\n        titleColor: guideTitleColor,\n        tickColor: axisColor,\n        tickSize: 10,\n        titleFontSize: 14,\n        titlePadding: 10,\n        labelPadding: 4,\n    },\n    axisBand: {\n        grid: false,\n    },\n    background: backgroundColor,\n    group: {\n        fill: backgroundColor,\n    },\n    legend: {\n        labelColor: blackTitle,\n        labelFontSize: 11,\n        padding: 1,\n        symbolSize: 30,\n        symbolType: 'square',\n        titleColor: blackTitle,\n        titleFontSize: 14,\n        titlePadding: 10,\n    },\n    line: {\n        stroke: markColor$1,\n        strokeWidth: 2,\n    },\n    path: { stroke: markColor$1, strokeWidth: 0.5 },\n    rect: { fill: markColor$1 },\n    range: {\n        category: [\n            '#30a2da',\n            '#fc4f30',\n            '#e5ae38',\n            '#6d904f',\n            '#8b8b8b',\n            '#b96db8',\n            '#ff9e27',\n            '#56cc60',\n            '#52d2ca',\n            '#52689e',\n            '#545454',\n            '#9fe4f8',\n        ],\n        diverging: ['#cc0020', '#e77866', '#f6e7e1', '#d6e8ed', '#91bfd9', '#1d78b5'],\n        heatmap: ['#d6e8ed', '#cee0e5', '#91bfd9', '#549cc6', '#1d78b5'],\n    },\n    point: {\n        filled: true,\n        shape: 'circle',\n    },\n    shape: { stroke: markColor$1 },\n    bar: {\n        binSpacing: 2,\n        fill: markColor$1,\n        stroke: null,\n    },\n    title: {\n        anchor: 'start',\n        fontSize: 24,\n        fontWeight: 600,\n        offset: 20,\n    },\n};\n\nconst markColor$2 = '#000';\nconst ggplot2Theme = {\n    group: {\n        fill: '#e5e5e5',\n    },\n    arc: { fill: markColor$2 },\n    area: { fill: markColor$2 },\n    line: { stroke: markColor$2 },\n    path: { stroke: markColor$2 },\n    rect: { fill: markColor$2 },\n    shape: { stroke: markColor$2 },\n    symbol: { fill: markColor$2, size: 40 },\n    axis: {\n        domain: false,\n        grid: true,\n        gridColor: '#FFFFFF',\n        gridOpacity: 1,\n        labelColor: '#7F7F7F',\n        labelPadding: 4,\n        tickColor: '#7F7F7F',\n        tickSize: 5.67,\n        titleFontSize: 16,\n        titleFontWeight: 'normal',\n    },\n    legend: {\n        labelBaseline: 'middle',\n        labelFontSize: 11,\n        symbolSize: 40,\n    },\n    range: {\n        category: [\n            '#000000',\n            '#7F7F7F',\n            '#1A1A1A',\n            '#999999',\n            '#333333',\n            '#B0B0B0',\n            '#4D4D4D',\n            '#C9C9C9',\n            '#666666',\n            '#DCDCDC',\n        ],\n    },\n};\n\nconst headlineFontSize = 22;\nconst headlineFontWeight = 'normal';\nconst labelFont = 'Benton Gothic, sans-serif';\nconst labelFontSize = 11.5;\nconst labelFontWeight = 'normal';\nconst markColor$3 = '#82c6df';\n// const markHighlight = '#006d8f';\n// const markDemocrat = '#5789b8';\n// const markRepublican = '#d94f54';\nconst titleFont = 'Benton Gothic Bold, sans-serif';\nconst titleFontWeight = 'normal';\nconst titleFontSize = 13;\nconst colorSchemes = {\n    'category-6': ['#ec8431', '#829eb1', '#c89d29', '#3580b1', '#adc839', '#ab7fb4'],\n    'fire-7': ['#fbf2c7', '#f9e39c', '#f8d36e', '#f4bb6a', '#e68a4f', '#d15a40', '#ab4232'],\n    'fireandice-6': ['#e68a4f', '#f4bb6a', '#f9e39c', '#dadfe2', '#a6b7c6', '#849eae'],\n    'ice-7': ['#edefee', '#dadfe2', '#c4ccd2', '#a6b7c6', '#849eae', '#607785', '#47525d'],\n};\nconst latimesTheme = {\n    background: '#ffffff',\n    title: {\n        anchor: 'start',\n        color: '#000000',\n        font: titleFont,\n        fontSize: headlineFontSize,\n        fontWeight: headlineFontWeight,\n    },\n    arc: { fill: markColor$3 },\n    area: { fill: markColor$3 },\n    line: { stroke: markColor$3, strokeWidth: 2 },\n    path: { stroke: markColor$3 },\n    rect: { fill: markColor$3 },\n    shape: { stroke: markColor$3 },\n    symbol: { fill: markColor$3, size: 30 },\n    axis: {\n        labelFont,\n        labelFontSize,\n        labelFontWeight,\n        titleFont,\n        titleFontSize,\n        titleFontWeight,\n    },\n    axisX: {\n        labelAngle: 0,\n        labelPadding: 4,\n        tickSize: 3,\n    },\n    axisY: {\n        labelBaseline: 'middle',\n        maxExtent: 45,\n        minExtent: 45,\n        tickSize: 2,\n        titleAlign: 'left',\n        titleAngle: 0,\n        titleX: -45,\n        titleY: -11,\n    },\n    legend: {\n        labelFont,\n        labelFontSize,\n        symbolType: 'square',\n        titleFont,\n        titleFontSize,\n        titleFontWeight,\n    },\n    range: {\n        category: colorSchemes['category-6'],\n        diverging: colorSchemes['fireandice-6'],\n        heatmap: colorSchemes['fire-7'],\n        ordinal: colorSchemes['fire-7'],\n        ramp: colorSchemes['fire-7'],\n    },\n};\n\nconst markColor$4 = '#ab5787';\nconst axisColor$1 = '#979797';\nconst quartzTheme = {\n    background: '#f9f9f9',\n    arc: { fill: markColor$4 },\n    area: { fill: markColor$4 },\n    line: { stroke: markColor$4 },\n    path: { stroke: markColor$4 },\n    rect: { fill: markColor$4 },\n    shape: { stroke: markColor$4 },\n    symbol: { fill: markColor$4, size: 30 },\n    axis: {\n        domainColor: axisColor$1,\n        domainWidth: 0.5,\n        gridWidth: 0.2,\n        labelColor: axisColor$1,\n        tickColor: axisColor$1,\n        tickWidth: 0.2,\n        titleColor: axisColor$1,\n    },\n    axisBand: {\n        grid: false,\n    },\n    axisX: {\n        grid: true,\n        tickSize: 10,\n    },\n    axisY: {\n        domain: false,\n        grid: true,\n        tickSize: 0,\n    },\n    legend: {\n        labelFontSize: 11,\n        padding: 1,\n        symbolSize: 30,\n        symbolType: 'square',\n    },\n    range: {\n        category: [\n            '#ab5787',\n            '#51b2e5',\n            '#703c5c',\n            '#168dd9',\n            '#d190b6',\n            '#00609f',\n            '#d365ba',\n            '#154866',\n            '#666666',\n            '#c4c4c4',\n        ],\n    },\n};\n\nconst markColor$5 = '#3e5c69';\nconst voxTheme = {\n    background: '#fff',\n    arc: { fill: markColor$5 },\n    area: { fill: markColor$5 },\n    line: { stroke: markColor$5 },\n    path: { stroke: markColor$5 },\n    rect: { fill: markColor$5 },\n    shape: { stroke: markColor$5 },\n    symbol: { fill: markColor$5 },\n    axis: {\n        domainWidth: 0.5,\n        grid: true,\n        labelPadding: 2,\n        tickSize: 5,\n        tickWidth: 0.5,\n        titleFontWeight: 'normal',\n    },\n    axisBand: {\n        grid: false,\n    },\n    axisX: {\n        gridWidth: 0.2,\n    },\n    axisY: {\n        gridDash: [3],\n        gridWidth: 0.4,\n    },\n    legend: {\n        labelFontSize: 11,\n        padding: 1,\n        symbolType: 'square',\n    },\n    range: {\n        category: ['#3e5c69', '#6793a6', '#182429', '#0570b0', '#3690c0', '#74a9cf', '#a6bddb', '#e2ddf2'],\n    },\n};\n\nconst markColor$6 = '#1696d2';\nconst axisColor$2 = '#000000';\nconst backgroundColor$1 = '#FFFFFF';\nconst font = 'Lato';\nconst labelFont$1 = 'Lato';\nconst sourceFont = 'Lato';\nconst gridColor = '#DEDDDD';\nconst titleFontSize$1 = 18;\nconst colorSchemes$1 = {\n    'main-colors': ['#1696d2', '#d2d2d2', '#000000', '#fdbf11', '#ec008b', '#55b748', '#5c5859', '#db2b27'],\n    'shades-blue': ['#CFE8F3', '#A2D4EC', '#73BFE2', '#46ABDB', '#1696D2', '#12719E', '#0A4C6A', '#062635'],\n    'shades-gray': ['#F5F5F5', '#ECECEC', '#E3E3E3', '#DCDBDB', '#D2D2D2', '#9D9D9D', '#696969', '#353535'],\n    'shades-yellow': ['#FFF2CF', '#FCE39E', '#FDD870', '#FCCB41', '#FDBF11', '#E88E2D', '#CA5800', '#843215'],\n    'shades-magenta': ['#F5CBDF', '#EB99C2', '#E46AA7', '#E54096', '#EC008B', '#AF1F6B', '#761548', '#351123'],\n    'shades-green': ['#DCEDD9', '#BCDEB4', '#98CF90', '#78C26D', '#55B748', '#408941', '#2C5C2D', '#1A2E19'],\n    'shades-black': ['#D5D5D4', '#ADABAC', '#848081', '#5C5859', '#332D2F', '#262223', '#1A1717', '#0E0C0D'],\n    'shades-red': ['#F8D5D4', '#F1AAA9', '#E9807D', '#E25552', '#DB2B27', '#A4201D', '#6E1614', '#370B0A'],\n    'one-group': ['#1696d2', '#000000'],\n    'two-groups-cat-1': ['#1696d2', '#000000'],\n    'two-groups-cat-2': ['#1696d2', '#fdbf11'],\n    'two-groups-cat-3': ['#1696d2', '#db2b27'],\n    'two-groups-seq': ['#a2d4ec', '#1696d2'],\n    'three-groups-cat': ['#1696d2', '#fdbf11', '#000000'],\n    'three-groups-seq': ['#a2d4ec', '#1696d2', '#0a4c6a'],\n    'four-groups-cat-1': ['#000000', '#d2d2d2', '#fdbf11', '#1696d2'],\n    'four-groups-cat-2': ['#1696d2', '#ec0008b', '#fdbf11', '#5c5859'],\n    'four-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a'],\n    'five-groups-cat-1': ['#1696d2', '#fdbf11', '#d2d2d2', '#ec008b', '#000000'],\n    'five-groups-cat-2': ['#1696d2', '#0a4c6a', '#d2d2d2', '#fdbf11', '#332d2f'],\n    'five-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a', '#000000'],\n    'six-groups-cat-1': ['#1696d2', '#ec008b', '#fdbf11', '#000000', '#d2d2d2', '#55b748'],\n    'six-groups-cat-2': ['#1696d2', '#d2d2d2', '#ec008b', '#fdbf11', '#332d2f', '#0a4c6a'],\n    'six-groups-seq': ['#cfe8f3', '#a2d4ec', '#73bfe2', '#46abdb', '#1696d2', '#12719e'],\n    'diverging-colors': ['#ca5800', '#fdbf11', '#fdd870', '#fff2cf', '#cfe8f3', '#73bfe2', '#1696d2', '#0a4c6a'],\n};\nconst urbanInstituteTheme = {\n    background: backgroundColor$1,\n    title: {\n        anchor: 'start',\n        fontSize: titleFontSize$1,\n        font: font,\n    },\n    axisX: {\n        domain: true,\n        domainColor: axisColor$2,\n        domainWidth: 1,\n        grid: false,\n        labelFontSize: 12,\n        labelFont: labelFont$1,\n        labelAngle: 0,\n        tickColor: axisColor$2,\n        tickSize: 5,\n        titleFontSize: 12,\n        titlePadding: 10,\n        titleFont: font,\n    },\n    axisY: {\n        domain: false,\n        domainWidth: 1,\n        grid: true,\n        gridColor: gridColor,\n        gridWidth: 1,\n        labelFontSize: 12,\n        labelFont: labelFont$1,\n        labelPadding: 8,\n        ticks: false,\n        titleFontSize: 12,\n        titlePadding: 10,\n        titleFont: font,\n        titleAngle: 0,\n        titleY: -10,\n        titleX: 18,\n    },\n    legend: {\n        labelFontSize: 12,\n        labelFont: labelFont$1,\n        symbolSize: 100,\n        titleFontSize: 12,\n        titlePadding: 10,\n        titleFont: font,\n        orient: 'right',\n        offset: 10,\n    },\n    view: {\n        stroke: 'transparent',\n    },\n    range: {\n        category: colorSchemes$1['six-groups-cat-1'],\n        diverging: colorSchemes$1['diverging-colors'],\n        heatmap: colorSchemes$1['diverging-colors'],\n        ordinal: colorSchemes$1['six-groups-seq'],\n        ramp: colorSchemes$1['shades-blue'],\n    },\n    area: {\n        fill: markColor$6,\n    },\n    rect: {\n        fill: markColor$6,\n    },\n    line: {\n        color: markColor$6,\n        stroke: markColor$6,\n        strokeWidth: 5,\n    },\n    trail: {\n        color: markColor$6,\n        stroke: markColor$6,\n        strokeWidth: 0,\n        size: 1,\n    },\n    path: {\n        stroke: markColor$6,\n        strokeWidth: 0.5,\n    },\n    point: {\n        filled: true,\n    },\n    text: {\n        font: sourceFont,\n        color: markColor$6,\n        fontSize: 11,\n        align: 'center',\n        fontWeight: 400,\n        size: 11,\n    },\n    style: {\n        bar: {\n            fill: markColor$6,\n            stroke: null,\n        },\n    },\n    arc: { fill: markColor$6 },\n    shape: { stroke: markColor$6 },\n    symbol: { fill: markColor$6, size: 30 },\n};\n\n/**\n * Copyright 2020 Google LLC.\n *\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file or at\n * https://developers.google.com/open-source/licenses/bsd\n */\nconst markColor$7 = '#3366CC';\nconst gridColor$1 = '#ccc';\nconst defaultFont = 'Arial, sans-serif';\nconst googlechartsTheme = {\n    arc: { fill: markColor$7 },\n    area: { fill: markColor$7 },\n    path: { stroke: markColor$7 },\n    rect: { fill: markColor$7 },\n    shape: { stroke: markColor$7 },\n    symbol: { stroke: markColor$7 },\n    circle: { fill: markColor$7 },\n    background: '#fff',\n    padding: {\n        top: 10,\n        right: 10,\n        bottom: 10,\n        left: 10,\n    },\n    style: {\n        'guide-label': {\n            font: defaultFont,\n            fontSize: 12,\n        },\n        'guide-title': {\n            font: defaultFont,\n            fontSize: 12,\n        },\n        'group-title': {\n            font: defaultFont,\n            fontSize: 12,\n        },\n    },\n    title: {\n        font: defaultFont,\n        fontSize: 14,\n        fontWeight: 'bold',\n        dy: -3,\n        anchor: 'start',\n    },\n    axis: {\n        gridColor: gridColor$1,\n        tickColor: gridColor$1,\n        domain: false,\n        grid: true,\n    },\n    range: {\n        category: [\n            '#4285F4',\n            '#DB4437',\n            '#F4B400',\n            '#0F9D58',\n            '#AB47BC',\n            '#00ACC1',\n            '#FF7043',\n            '#9E9D24',\n            '#5C6BC0',\n            '#F06292',\n            '#00796B',\n            '#C2185B',\n        ],\n        heatmap: ['#c6dafc', '#5e97f6', '#2a56c6'],\n    },\n};\n\nconst version$1 = pkg.version;\n\nexport { darkTheme as dark, excelTheme as excel, fiveThirtyEightTheme as fivethirtyeight, ggplot2Theme as ggplot2, googlechartsTheme as googlecharts, latimesTheme as latimes, quartzTheme as quartz, urbanInstituteTheme as urbaninstitute, version$1 as version, voxTheme as vox };\n","// generated with build-style.sh\nexport default `#vg-tooltip-element {\n  visibility: hidden;\n  padding: 8px;\n  position: fixed;\n  z-index: 1000;\n  font-family: sans-serif;\n  font-size: 11px;\n  border-radius: 3px;\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);\n  /* The default theme is the light theme. */\n  background-color: rgba(255, 255, 255, 0.95);\n  border: 1px solid #d9d9d9;\n  color: black; }\n  #vg-tooltip-element.visible {\n    visibility: visible; }\n  #vg-tooltip-element h2 {\n    margin-top: 0;\n    margin-bottom: 10px;\n    font-size: 13px; }\n  #vg-tooltip-element img {\n    max-width: 200px;\n    max-height: 200px; }\n  #vg-tooltip-element table {\n    border-spacing: 0; }\n    #vg-tooltip-element table tr {\n      border: none; }\n      #vg-tooltip-element table tr td {\n        overflow: hidden;\n        text-overflow: ellipsis;\n        padding-top: 2px;\n        padding-bottom: 2px; }\n        #vg-tooltip-element table tr td.key {\n          color: #808080;\n          max-width: 150px;\n          text-align: right;\n          padding-right: 4px; }\n        #vg-tooltip-element table tr td.value {\n          display: block;\n          max-width: 300px;\n          max-height: 7em;\n          text-align: left; }\n  #vg-tooltip-element.dark-theme {\n    background-color: rgba(32, 32, 32, 0.9);\n    border: 1px solid #f5f5f5;\n    color: white; }\n    #vg-tooltip-element.dark-theme td.key {\n      color: #bfbfbf; }\n`;\n","import defaultStyle from './style';\n\nconst EL_ID = 'vg-tooltip-element';\n\nexport const DEFAULT_OPTIONS = {\n  /**\n   * X offset.\n   */\n  offsetX: 10,\n\n  /**\n   * Y offset.\n   */\n  offsetY: 10,\n\n  /**\n   * ID of the tooltip element.\n   */\n  id: EL_ID,\n\n  /**\n   * ID of the tooltip CSS style.\n   */\n  styleId: 'vega-tooltip-style',\n\n  /**\n   * The name of the theme. You can use the CSS class called [THEME]-theme to style the tooltips.\n   *\n   * There are two predefined themes: \"light\" (default) and \"dark\".\n   */\n  theme: 'light',\n\n  /**\n   * Do not use the default styles provided by Vega Tooltip. If you enable this option, you need to use your own styles. It is not necessary to disable the default style when using a custom theme.\n   */\n  disableDefaultStyle: false,\n\n  /**\n   * HTML sanitizer function that removes dangerous HTML to prevent XSS.\n   *\n   * This should be a function from string to string. You may replace it with a formatter such as a markdown formatter.\n   */\n  sanitize: escapeHTML,\n\n  /**\n   * The maximum recursion depth when printing objects in the tooltip.\n   */\n  maxDepth: 2,\n};\n\nexport type Options = Partial<typeof DEFAULT_OPTIONS>;\n\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value: any): string {\n  return String(value).replace(/&/g, '&amp;').replace(/</g, '&lt;');\n}\n\nexport function createDefaultStyle(id: string): string {\n  // Just in case this id comes from a user, ensure these is no security issues\n  if (!/^[A-Za-z]+[-:.\\w]*$/.test(id)) {\n    throw new Error('Invalid HTML ID');\n  }\n\n  return defaultStyle.toString().replace(EL_ID, id);\n}\n","import {isArray, isObject, isString} from 'vega-util';\n\n/**\n * Format the value to be shown in the tooltip.\n *\n * @param value The value to show in the tooltip.\n * @param valueToHtml Function to convert a single cell value to an HTML string\n */\nexport function formatValue(value: any, valueToHtml: (value: any) => string, maxDepth: number): string {\n  if (isArray(value)) {\n    return `[${value.map((v) => valueToHtml(isString(v) ? v : stringify(v, maxDepth))).join(', ')}]`;\n  }\n\n  if (isObject(value)) {\n    let content = '';\n\n    const {title, image, ...rest} = value as any;\n\n    if (title) {\n      content += `<h2>${valueToHtml(title)}</h2>`;\n    }\n\n    if (image) {\n      content += `<img src=\"${valueToHtml(image)}\">`;\n    }\n\n    const keys = Object.keys(rest);\n    if (keys.length > 0) {\n      content += '<table>';\n      for (const key of keys) {\n        let val = (rest as any)[key];\n\n        // ignore undefined properties\n        if (val === undefined) {\n          continue;\n        }\n\n        if (isObject(val)) {\n          val = stringify(val, maxDepth);\n        }\n\n        content += `<tr><td class=\"key\">${valueToHtml(key)}:</td><td class=\"value\">${valueToHtml(val)}</td></tr>`;\n      }\n      content += `</table>`;\n    }\n\n    return content || '{}'; // show empty object if there are no properties\n  }\n\n  return valueToHtml(value);\n}\n\nexport function replacer(maxDepth: number) {\n  const stack: any[] = [];\n\n  return function (this: any, key: string, value: any) {\n    if (typeof value !== 'object' || value === null) {\n      return value;\n    }\n    const pos = stack.indexOf(this) + 1;\n    stack.length = pos;\n    if (stack.length > maxDepth) {\n      return '[Object]';\n    }\n    if (stack.indexOf(value) >= 0) {\n      return '[Circular]';\n    }\n    stack.push(value);\n    return value;\n  };\n}\n\n/**\n * Stringify any JS object to valid JSON\n */\nexport function stringify(obj: any, maxDepth: number) {\n  return JSON.stringify(obj, replacer(maxDepth));\n}\n","/**\n * Position the tooltip\n *\n * @param event The mouse event.\n * @param tooltipBox\n * @param offsetX Horizontal offset.\n * @param offsetY Vertical offset.\n */\nexport function calculatePosition(\n  event: MouseEvent,\n  tooltipBox: {width: number; height: number},\n  offsetX: number,\n  offsetY: number\n) {\n  let x = event.clientX + offsetX;\n  if (x + tooltipBox.width > window.innerWidth) {\n    x = +event.clientX - offsetX - tooltipBox.width;\n  }\n\n  let y = event.clientY + offsetY;\n  if (y + tooltipBox.height > window.innerHeight) {\n    y = +event.clientY - offsetY - tooltipBox.height;\n  }\n\n  return {x, y};\n}\n","import {TooltipHandler} from 'vega-typings';\n\nimport {createDefaultStyle, DEFAULT_OPTIONS, Options} from './defaults';\nimport {formatValue} from './formatValue';\nimport {calculatePosition} from './position';\n\n/**\n * The tooltip handler class.\n */\nexport class Handler {\n  /**\n   * The handler function. We bind this to this function in the constructor.\n   */\n  public call: TooltipHandler;\n\n  /**\n   * Complete tooltip options.\n   */\n  private options: Required<Options>;\n\n  /**\n   * The tooltip html element.\n   */\n  private el: HTMLElement;\n\n  /**\n   * Create the tooltip handler and initialize the element and style.\n   *\n   * @param options Tooltip Options\n   */\n  constructor(options?: Options) {\n    this.options = {...DEFAULT_OPTIONS, ...options};\n    const elementId = this.options.id;\n\n    // bind this to call\n    this.call = this.tooltipHandler.bind(this);\n\n    // prepend a default stylesheet for tooltips to the head\n    if (!this.options.disableDefaultStyle && !document.getElementById(this.options.styleId)) {\n      const style = document.createElement('style');\n      style.setAttribute('id', this.options.styleId);\n      style.innerHTML = createDefaultStyle(elementId);\n\n      const head = document.head;\n      if (head.childNodes.length > 0) {\n        head.insertBefore(style, head.childNodes[0]);\n      } else {\n        head.appendChild(style);\n      }\n    }\n\n    // append a div element that we use as a tooltip unless it already exists\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    this.el = document.getElementById(elementId)!;\n    if (!this.el) {\n      this.el = document.createElement('div');\n      this.el.setAttribute('id', elementId);\n      this.el.classList.add('vg-tooltip');\n\n      document.body.appendChild(this.el);\n    }\n  }\n\n  /**\n   * The tooltip handler function.\n   */\n  private tooltipHandler(handler: any, event: MouseEvent, item: any, value: any) {\n    // console.log(handler, event, item, value);\n\n    // hide tooltip for null, undefined, or empty string values\n    if (value == null || value === '') {\n      this.el.classList.remove('visible', `${this.options.theme}-theme`);\n      return;\n    }\n\n    // set the tooltip content\n    this.el.innerHTML = formatValue(value, this.options.sanitize, this.options.maxDepth);\n\n    // make the tooltip visible\n    this.el.classList.add('visible', `${this.options.theme}-theme`);\n\n    const {x, y} = calculatePosition(\n      event,\n      this.el.getBoundingClientRect(),\n      this.options.offsetX,\n      this.options.offsetY\n    );\n\n    this.el.setAttribute('style', `top: ${y}px; left: ${x}px`);\n  }\n}\n","import { MessageData } from './types';\n\n/**\n * Open editor url in a new window, and pass a message.\n */\nexport default function (window: Window, url: string, data: MessageData) {\n  const editor = window.open(url)!;\n  const wait = 10000;\n  const step = 250;\n  const { origin } = new URL(url);\n  // eslint-disable-next-line no-bitwise\n  let count = ~~(wait / step);\n\n  function listen(evt: MessageEvent) {\n    if (evt.source === editor) {\n      count = 0;\n      window.removeEventListener('message', listen, false);\n    }\n  }\n  window.addEventListener('message', listen, false);\n\n  // send message\n  // periodically resend until ack received or timeout\n  function send() {\n    if (count <= 0) {\n      return;\n    }\n    editor.postMessage(data, origin);\n    setTimeout(send, step);\n    count -= 1;\n  }\n  setTimeout(send, step);\n}\n","import { applyPatch, Operation } from 'fast-json-patch';\nimport stringify from 'json-stringify-pretty-compact';\nimport { satisfies } from 'semver';\nimport * as vegaImport from 'vega';\nimport { EncodeEntryName, Loader, LoaderOptions, Renderers, Spec as VgSpec, TooltipHandler, View } from 'vega';\nimport * as vegaLiteImport from 'vega-lite';\nimport { Config as VlConfig, TopLevelSpec as VlSpec } from 'vega-lite';\nimport schemaParser from 'vega-schema-url-parser';\nimport * as themes from 'vega-themes';\nimport { Handler, Options as TooltipOptions } from 'vega-tooltip';\nimport { isBoolean, isString, mergeConfig } from 'vega-util';\nimport post from './post';\nimport embedStyle from './style';\nimport { Config, Mode } from './types';\nimport { mergeDeep } from './util';\n\nexport * from './types';\n\nexport const vega = vegaImport;\nexport let vegaLite = vegaLiteImport;\n\n// For backwards compatibility with Vega-Lite before v4.\nconst w = (typeof window !== 'undefined' ? window : undefined) as any;\nif (vegaLite === undefined && w?.['vl']?.compile) {\n  vegaLite = w['vl'];\n}\n\nexport interface Actions {\n  export?: boolean | { svg?: boolean; png?: boolean };\n  source?: boolean;\n  compiled?: boolean;\n  editor?: boolean;\n}\n\nexport const DEFAULT_ACTIONS = { export: { svg: true, png: true }, source: true, compiled: true, editor: true };\n\nexport interface Hover {\n  hoverSet?: EncodeEntryName;\n  updateSet?: EncodeEntryName;\n}\n\nexport type PatchFunc = (spec: VgSpec) => VgSpec;\n\nconst I18N = {\n  CLICK_TO_VIEW_ACTIONS: 'Click to view actions',\n  COMPILED_ACTION: 'View Compiled Vega',\n  EDITOR_ACTION: 'Open in Vega Editor',\n  PNG_ACTION: 'Save as PNG',\n  SOURCE_ACTION: 'View Source',\n  SVG_ACTION: 'Save as SVG'\n};\n\nexport interface EmbedOptions<S = string> {\n  actions?: boolean | Actions;\n  mode?: Mode;\n  theme?: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark';\n  defaultStyle?: boolean | string;\n  logLevel?: number;\n  loader?: Loader | LoaderOptions;\n  renderer?: Renderers;\n  tooltip?: TooltipHandler | TooltipOptions | boolean;\n  patch?: S | PatchFunc | Operation[];\n  width?: number;\n  height?: number;\n  padding?: number | { left?: number; right?: number; top?: number; bottom?: number };\n  scaleFactor?: number;\n  config?: S | Config;\n  sourceHeader?: string;\n  sourceFooter?: string;\n  editorUrl?: string;\n  hover?: boolean | Hover;\n  i18n?: Partial<typeof I18N>;\n  downloadFileName?: string;\n  formatLocale?: object;\n  timeFormatLocale?: object;\n}\n\nconst NAMES: { [key in Mode]: string } = {\n  vega: 'Vega',\n  'vega-lite': 'Vega-Lite'\n};\n\nconst VERSION = {\n  vega: vega.version,\n  'vega-lite': vegaLite ? vegaLite.version : 'not available'\n};\n\nconst PREPROCESSOR: { [mode in Mode]: (spec: any, config?: Config) => VgSpec } = {\n  vega: (vgSpec: VgSpec) => vgSpec,\n  'vega-lite': (vlSpec, config) => vegaLite.compile(vlSpec as VlSpec, { config: config as VlConfig }).spec\n};\n\nconst SVG_CIRCLES = `\n<svg viewBox=\"0 0 16 16\" fill=\"currentColor\" stroke=\"none\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n  <circle r=\"2\" cy=\"8\" cx=\"2\"></circle>\n  <circle r=\"2\" cy=\"8\" cx=\"8\"></circle>\n  <circle r=\"2\" cy=\"8\" cx=\"14\"></circle>\n</svg>`;\n\nexport type VisualizationSpec = VlSpec | VgSpec;\n\nexport interface Result {\n  /** The Vega view. */\n  view: View;\n  /** The inut specification. */\n  spec: VisualizationSpec;\n  /** The compiled and patched Vega specification. */\n  vgSpec: VgSpec;\n  /** Removes references to unwanted behaviors and memory leaks. Calls Vega's `view.finalize`.  */\n  finalize: () => void;\n}\n\nfunction isTooltipHandler(h?: boolean | TooltipOptions | TooltipHandler): h is TooltipHandler {\n  return typeof h === 'function';\n}\n\nfunction viewSource(source: string, sourceHeader: string, sourceFooter: string, mode: Mode) {\n  const header = `<html><head>${sourceHeader}</head><body><pre><code class=\"json\">`;\n  const footer = `</code></pre>${sourceFooter}</body></html>`;\n  const win = window.open('')!;\n  win.document.write(header + source + footer);\n  win.document.title = `${NAMES[mode]} JSON Source`;\n}\n\n/**\n * Try to guess the type of spec.\n *\n * @param spec Vega or Vega-Lite spec.\n */\nexport function guessMode(spec: VisualizationSpec, providedMode?: Mode): Mode {\n  // Decide mode\n  if (spec.$schema) {\n    const parsed = schemaParser(spec.$schema);\n    if (providedMode && providedMode !== parsed.library) {\n      console.warn(\n        `The given visualization spec is written in ${NAMES[parsed.library]}, but mode argument sets ${\n          NAMES[providedMode] ?? providedMode\n        }.`\n      );\n    }\n\n    const mode = parsed.library as Mode;\n\n    if (!satisfies(VERSION[mode], `^${parsed.version.slice(1)}`)) {\n      console.warn(\n        `The input spec uses ${NAMES[mode]} ${parsed.version}, but the current version of ${NAMES[mode]} is v${VERSION[mode]}.`\n      );\n    }\n\n    return mode;\n  }\n\n  // try to guess from the provided spec\n  if (\n    'mark' in spec ||\n    'encoding' in spec ||\n    'layer' in spec ||\n    'hconcat' in spec ||\n    'vconcat' in spec ||\n    'facet' in spec ||\n    'repeat' in spec\n  ) {\n    return 'vega-lite';\n  }\n\n  if ('marks' in spec || 'signals' in spec || 'scales' in spec || 'axes' in spec) {\n    return 'vega';\n  }\n\n  return providedMode ?? 'vega';\n}\n\nfunction isLoader(o?: LoaderOptions | Loader): o is Loader {\n  return !!(o && 'load' in o);\n}\n\n/**\n * Embed a Vega visualization component in a web page. This function returns a promise.\n *\n * @param el        DOM element in which to place component (DOM node or CSS selector).\n * @param spec      String : A URL string from which to load the Vega specification.\n *                  Object : The Vega/Vega-Lite specification as a parsed JSON object.\n * @param opts       A JavaScript object containing options for embedding.\n */\nexport default async function embed(\n  el: HTMLElement | string,\n  spec: VisualizationSpec | string,\n  opts: EmbedOptions = {}\n): Promise<Result> {\n  const loader: Loader = isLoader(opts.loader) ? opts.loader : vega.loader(opts.loader);\n\n  // load spec, config, and patch that are references by URLs\n  const parsedSpec = isString(spec) ? JSON.parse(await loader.load(spec)) : spec;\n\n  const usermetaOpts = await loadOpts(\n    (parsedSpec.usermeta && (parsedSpec.usermeta as any)['embedOptions']) ?? {},\n    loader\n  );\n  const parsedOpts = await loadOpts(opts, loader);\n\n  const mergedOpts = {\n    ...mergeDeep(parsedOpts, usermetaOpts),\n    config: mergeConfig(parsedOpts.config ?? {}, usermetaOpts.config ?? {})\n  };\n\n  return await _embed(el, parsedSpec, mergedOpts, loader);\n}\n\nasync function loadOpts(opt: EmbedOptions, loader: Loader): Promise<EmbedOptions<never>> {\n  const config: Config = isString(opt.config) ? JSON.parse(await loader.load(opt.config)) : opt.config ?? {};\n  const patch: PatchFunc | Operation[] = isString(opt.patch) ? JSON.parse(await loader.load(opt.patch)) : opt.patch;\n  return {\n    ...(opt as any),\n    ...(patch ? { patch } : {}),\n    ...(config ? { config } : {})\n  };\n}\n\nasync function _embed(\n  el: HTMLElement | string,\n  spec: VisualizationSpec,\n  opts: EmbedOptions<never> = {},\n  loader: Loader\n): Promise<Result> {\n  const config = opts.theme ? mergeConfig(themes[opts.theme], opts.config ?? {}) : opts.config;\n\n  const actions = isBoolean(opts.actions) ? opts.actions : mergeDeep<Actions>({}, DEFAULT_ACTIONS, opts.actions ?? {});\n  const i18n = { ...I18N, ...opts.i18n };\n\n  const renderer = opts.renderer ?? 'canvas';\n  const logLevel = opts.logLevel ?? vega.Warn;\n  const downloadFileName = opts.downloadFileName ?? 'visualization';\n\n  if (opts.defaultStyle !== false) {\n    // Add a default stylesheet to the head of the document.\n    const ID = 'vega-embed-style';\n    if (!document.getElementById(ID)) {\n      const style = document.createElement('style');\n      style.id = ID;\n      style.innerText =\n        opts.defaultStyle === undefined || opts.defaultStyle === true\n          ? (embedStyle ?? '').toString()\n          : opts.defaultStyle;\n\n      document.head.appendChild(style);\n    }\n  }\n\n  const mode = guessMode(spec, opts.mode);\n\n  let vgSpec: VgSpec = PREPROCESSOR[mode](spec, config);\n\n  if (mode === 'vega-lite') {\n    if (vgSpec.$schema) {\n      const parsed = schemaParser(vgSpec.$schema);\n\n      if (!satisfies(VERSION.vega, `^${parsed.version.slice(1)}`)) {\n        console.warn(`The compiled spec uses Vega ${parsed.version}, but current version is v${VERSION.vega}.`);\n      }\n    }\n  }\n\n  const div = typeof el === 'string' ? document.querySelector(el) : el;\n  if (!div) {\n    throw Error(`${el} does not exist`);\n  }\n\n  div.classList.add('vega-embed');\n  if (actions) {\n    div.classList.add('has-actions');\n  }\n  div.innerHTML = ''; // clear container\n\n  const patch = opts.patch;\n  if (patch) {\n    if (patch instanceof Function) {\n      vgSpec = patch(vgSpec);\n    } else {\n      vgSpec = applyPatch(vgSpec, patch, true, false).newDocument;\n    }\n  }\n\n  // Set locale. Note that this is a global setting.\n  if (opts.formatLocale) {\n    vega.formatLocale(opts.formatLocale);\n  }\n\n  if (opts.timeFormatLocale) {\n    vega.timeFormatLocale(opts.timeFormatLocale);\n  }\n\n  // Do not apply the config to Vega when we have already applied it to Vega-Lite.\n  // This call may throw an Error if parsing fails.\n  const runtime = vega.parse(vgSpec, mode === 'vega-lite' ? {} : config);\n\n  const view = new vega.View(runtime, {\n    loader,\n    logLevel,\n    renderer\n  });\n\n  if (opts.tooltip !== false) {\n    let handler: TooltipHandler;\n    if (isTooltipHandler(opts.tooltip)) {\n      handler = opts.tooltip;\n    } else {\n      // user provided boolean true or tooltip options\n      handler = new Handler(opts.tooltip === true ? {} : opts.tooltip).call;\n    }\n\n    view.tooltip(handler);\n  }\n\n  let { hover } = opts;\n\n  if (hover === undefined) {\n    hover = mode === 'vega';\n  }\n\n  if (hover) {\n    const { hoverSet, updateSet } = (typeof hover === 'boolean' ? {} : hover) as Hover;\n\n    view.hover(hoverSet, updateSet);\n  }\n\n  if (opts) {\n    if (opts.width != null) {\n      view.width(opts.width);\n    }\n    if (opts.height != null) {\n      view.height(opts.height);\n    }\n    if (opts.padding != null) {\n      view.padding(opts.padding);\n    }\n  }\n\n  await view.initialize(el).runAsync();\n\n  let documentClickHandler: ((this: Document, ev: MouseEvent) => void) | undefined;\n\n  if (actions !== false) {\n    let wrapper = div;\n\n    if (opts.defaultStyle !== false) {\n      const details = document.createElement('details');\n      details.title = i18n.CLICK_TO_VIEW_ACTIONS;\n      div.append(details);\n\n      wrapper = details;\n      const summary = document.createElement('summary');\n      summary.innerHTML = SVG_CIRCLES;\n\n      details.append(summary);\n\n      documentClickHandler = (ev: MouseEvent) => {\n        if (!details.contains(ev.target as any)) {\n          details.removeAttribute('open');\n        }\n      };\n      document.addEventListener('click', documentClickHandler);\n    }\n\n    const ctrl = document.createElement('div');\n    wrapper.append(ctrl);\n    ctrl.classList.add('vega-actions');\n\n    // add 'Export' action\n    if (actions === true || actions.export !== false) {\n      for (const ext of ['svg', 'png'] as const) {\n        if (actions === true || actions.export === true || (actions.export as { svg?: boolean; png?: boolean })[ext]) {\n          const i18nExportAction = (i18n as { [key: string]: string })[`${ext.toUpperCase()}_ACTION`];\n          const exportLink = document.createElement('a');\n\n          exportLink.text = i18nExportAction;\n          exportLink.href = '#';\n          exportLink.target = '_blank';\n          exportLink.download = `${downloadFileName}.${ext}`;\n          // add link on mousedown so that it's correct when the click happens\n          exportLink.addEventListener('mousedown', async function (this, e) {\n            e.preventDefault();\n            const url = await view.toImageURL(ext, opts.scaleFactor);\n            this.href = url;\n          });\n\n          ctrl.append(exportLink);\n        }\n      }\n    }\n\n    // add 'View Source' action\n    if (actions === true || actions.source !== false) {\n      const viewSourceLink = document.createElement('a');\n\n      viewSourceLink.text = i18n.SOURCE_ACTION;\n      viewSourceLink.href = '#';\n      viewSourceLink.addEventListener('click', function (this, e) {\n        viewSource(stringify(spec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', mode);\n        e.preventDefault();\n      });\n\n      ctrl.append(viewSourceLink);\n    }\n\n    // add 'View Compiled' action\n    if (mode === 'vega-lite' && (actions === true || actions.compiled !== false)) {\n      const compileLink = document.createElement('a');\n\n      compileLink.text = i18n.COMPILED_ACTION;\n      compileLink.href = '#';\n      compileLink.addEventListener('click', function (this, e) {\n        viewSource(stringify(vgSpec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', 'vega');\n        e.preventDefault();\n      });\n\n      ctrl.append(compileLink);\n    }\n\n    // add 'Open in Vega Editor' action\n    if (actions === true || actions.editor !== false) {\n      const editorUrl = opts.editorUrl ?? 'https://vega.github.io/editor/';\n      const editorLink = document.createElement('a');\n\n      editorLink.text = i18n.EDITOR_ACTION;\n      editorLink.href = '#';\n      editorLink.addEventListener('click', function (this, e) {\n        post(window, editorUrl, {\n          config: config as Config,\n          mode,\n          renderer,\n          spec: stringify(spec)\n        });\n        e.preventDefault();\n      });\n\n      ctrl.append(editorLink);\n    }\n  }\n\n  function finalize() {\n    if (documentClickHandler) {\n      document.removeEventListener('click', documentClickHandler);\n    }\n    view.finalize();\n  }\n\n  return { view, spec, vgSpec, finalize };\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StyleSheet = StyleSheet;\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/* \n\nhigh performance StyleSheet for css-in-js systems \n\n- uses multiple style tags behind the scenes for millions of rules \n- uses `insertRule` for appending in production for *much* faster performance\n- 'polyfills' on server side \n\n\n// usage\n\nimport StyleSheet from 'glamor/lib/sheet'\nlet styleSheet = new StyleSheet()\n\nstyleSheet.inject() \n- 'injects' the stylesheet into the page (or into memory if on server)\n\nstyleSheet.insert('#box { border: 1px solid red; }') \n- appends a css rule into the stylesheet \n\nstyleSheet.flush() \n- empties the stylesheet of all its contents\n\n\n*/\n\nfunction last(arr) {\n  return arr[arr.length - 1];\n}\n\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    return tag.sheet;\n  }\n\n  // this weirdness brought to you by firefox \n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      return document.styleSheets[i];\n    }\n  }\n}\n\nvar isBrowser = typeof window !== 'undefined';\nvar isDev = process.env.NODE_ENV === 'development' || !process.env.NODE_ENV; //(x => (x === 'development') || !x)(process.env.NODE_ENV)\nvar isTest = process.env.NODE_ENV === 'test';\n\nvar oldIE = function () {\n  if (isBrowser) {\n    var div = document.createElement('div');\n    div.innerHTML = '<!--[if lt IE 10]><i></i><![endif]-->';\n    return div.getElementsByTagName('i').length === 1;\n  }\n}();\n\nfunction makeStyleTag() {\n  var tag = document.createElement('style');\n  tag.type = 'text/css';\n  tag.setAttribute('data-glamor', '');\n  tag.appendChild(document.createTextNode(''));\n  (document.head || document.getElementsByTagName('head')[0]).appendChild(tag);\n  return tag;\n}\n\nfunction StyleSheet() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$speedy = _ref.speedy,\n      speedy = _ref$speedy === undefined ? !isDev && !isTest : _ref$speedy,\n      _ref$maxLength = _ref.maxLength,\n      maxLength = _ref$maxLength === undefined ? isBrowser && oldIE ? 4000 : 65000 : _ref$maxLength;\n\n  this.isSpeedy = speedy; // the big drawback here is that the css won't be editable in devtools\n  this.sheet = undefined;\n  this.tags = [];\n  this.maxLength = maxLength;\n  this.ctr = 0;\n}\n\n(0, _objectAssign2.default)(StyleSheet.prototype, {\n  getSheet: function getSheet() {\n    return sheetForTag(last(this.tags));\n  },\n  inject: function inject() {\n    var _this = this;\n\n    if (this.injected) {\n      throw new Error('already injected stylesheet!');\n    }\n    if (isBrowser) {\n      this.tags[0] = makeStyleTag();\n    } else {\n      // server side 'polyfill'. just enough behavior to be useful.\n      this.sheet = {\n        cssRules: [],\n        insertRule: function insertRule(rule) {\n          // enough 'spec compliance' to be able to extract the rules later  \n          // in other words, just the cssText field \n          _this.sheet.cssRules.push({ cssText: rule });\n        }\n      };\n    }\n    this.injected = true;\n  },\n  speedy: function speedy(bool) {\n    if (this.ctr !== 0) {\n      throw new Error('cannot change speedy mode after inserting any rule to sheet. Either call speedy(' + bool + ') earlier in your app, or call flush() before speedy(' + bool + ')');\n    }\n    this.isSpeedy = !!bool;\n  },\n  _insert: function _insert(rule) {\n    // this weirdness for perf, and chrome's weird bug \n    // https://stackoverflow.com/questions/20007992/chrome-suddenly-stopped-accepting-insertrule\n    try {\n      var sheet = this.getSheet();\n      sheet.insertRule(rule, rule.indexOf('@import') !== -1 ? 0 : sheet.cssRules.length);\n    } catch (e) {\n      if (isDev) {\n        // might need beter dx for this \n        console.warn('whoops, illegal rule inserted', rule); //eslint-disable-line no-console\n      }\n    }\n  },\n  insert: function insert(rule) {\n\n    if (isBrowser) {\n      // this is the ultrafast version, works across browsers \n      if (this.isSpeedy && this.getSheet().insertRule) {\n        this._insert(rule);\n      }\n      // more browser weirdness. I don't even know    \n      // else if(this.tags.length > 0 && this.tags::last().styleSheet) {      \n      //   this.tags::last().styleSheet.cssText+= rule\n      // }\n      else {\n          if (rule.indexOf('@import') !== -1) {\n            var tag = last(this.tags);\n            tag.insertBefore(document.createTextNode(rule), tag.firstChild);\n          } else {\n            last(this.tags).appendChild(document.createTextNode(rule));\n          }\n        }\n    } else {\n      // server side is pretty simple         \n      this.sheet.insertRule(rule, rule.indexOf('@import') !== -1 ? 0 : this.sheet.cssRules.length);\n    }\n\n    this.ctr++;\n    if (isBrowser && this.ctr % this.maxLength === 0) {\n      this.tags.push(makeStyleTag());\n    }\n    return this.ctr - 1;\n  },\n\n  // commenting this out till we decide on v3's decision \n  // _replace(index, rule) {\n  //   // this weirdness for perf, and chrome's weird bug \n  //   // https://stackoverflow.com/questions/20007992/chrome-suddenly-stopped-accepting-insertrule\n  //   try {  \n  //     let sheet = this.getSheet()        \n  //     sheet.deleteRule(index) // todo - correct index here     \n  //     sheet.insertRule(rule, index)\n  //   }\n  //   catch(e) {\n  //     if(isDev) {\n  //       // might need beter dx for this \n  //       console.warn('whoops, problem replacing rule', rule) //eslint-disable-line no-console\n  //     }          \n  //   }          \n\n  // }\n  // replace(index, rule) {\n  //   if(isBrowser) {\n  //     if(this.isSpeedy && this.getSheet().insertRule) {\n  //       this._replace(index, rule)\n  //     }\n  //     else {\n  //       let _slot = Math.floor((index  + this.maxLength) / this.maxLength) - 1        \n  //       let _index = (index % this.maxLength) + 1\n  //       let tag = this.tags[_slot]\n  //       tag.replaceChild(document.createTextNode(rule), tag.childNodes[_index])\n  //     }\n  //   }\n  //   else {\n  //     let rules = this.sheet.cssRules\n  //     this.sheet.cssRules = [ ...rules.slice(0, index), { cssText: rule }, ...rules.slice(index + 1) ]\n  //   }\n  // }\n  delete: function _delete(index) {\n    // we insert a blank rule when 'deleting' so previously returned indexes remain stable\n    return this.replace(index, '');\n  },\n  flush: function flush() {\n    if (isBrowser) {\n      this.tags.forEach(function (tag) {\n        return tag.parentNode.removeChild(tag);\n      });\n      this.tags = [];\n      this.sheet = null;\n      this.ctr = 0;\n      // todo - look for remnants in document.styleSheets\n    } else {\n      // simpler on server \n      this.sheet.cssRules = [];\n    }\n    this.injected = false;\n  },\n  rules: function rules() {\n    if (!isBrowser) {\n      return this.sheet.cssRules;\n    }\n    var arr = [];\n    this.tags.forEach(function (tag) {\n      return arr.splice.apply(arr, [arr.length, 0].concat(_toConsumableArray(Array.from(sheetForTag(tag).cssRules))));\n    });\n    return arr;\n  }\n});","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n *   > camelize('background-color')\n *   < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n  return string.replace(_hyphenPattern, function (_, character) {\n    return character.toUpperCase();\n  });\n}\n\nmodule.exports = camelize;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n *   > camelizeStyleName('background-color')\n *   < \"backgroundColor\"\n *   > camelizeStyleName('-moz-transition')\n *   < \"MozTransition\"\n *   > camelizeStyleName('-ms-transition')\n *   < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n  return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridRow: true,\n  gridRowStart: true,\n  gridRowEnd: true,\n  gridColumn: true,\n  gridColumnStart: true,\n  gridColumnEnd: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n\n  /**\n   * @param {string} prefix vendor-specific prefix, eg: Webkit\n   * @param {string} key style name, eg: transitionDuration\n   * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n   * WebkitTransitionDuration\n   */\n};function prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n  background: {\n    backgroundAttachment: true,\n    backgroundColor: true,\n    backgroundImage: true,\n    backgroundPositionX: true,\n    backgroundPositionY: true,\n    backgroundRepeat: true\n  },\n  backgroundPosition: {\n    backgroundPositionX: true,\n    backgroundPositionY: true\n  },\n  border: {\n    borderWidth: true,\n    borderStyle: true,\n    borderColor: true\n  },\n  borderBottom: {\n    borderBottomWidth: true,\n    borderBottomStyle: true,\n    borderBottomColor: true\n  },\n  borderLeft: {\n    borderLeftWidth: true,\n    borderLeftStyle: true,\n    borderLeftColor: true\n  },\n  borderRight: {\n    borderRightWidth: true,\n    borderRightStyle: true,\n    borderRightColor: true\n  },\n  borderTop: {\n    borderTopWidth: true,\n    borderTopStyle: true,\n    borderTopColor: true\n  },\n  font: {\n    fontStyle: true,\n    fontVariant: true,\n    fontWeight: true,\n    fontSize: true,\n    lineHeight: true,\n    fontFamily: true\n  },\n  outline: {\n    outlineWidth: true,\n    outlineStyle: true,\n    outlineColor: true\n  }\n};\n\nvar CSSProperty = {\n  isUnitlessNumber: isUnitlessNumber,\n  shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nexports.default = CSSProperty;","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  var printWarning = function printWarning(format) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var argIndex = 0;\n    var message = 'Warning: ' + format.replace(/%s/g, function () {\n      return args[argIndex++];\n    });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n\n  warning = function warning(condition, format) {\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        args[_key2 - 2] = arguments[_key2];\n      }\n\n      printWarning.apply(undefined, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _CSSProperty = require('./CSSProperty');\n\nvar _CSSProperty2 = _interopRequireDefault(_CSSProperty);\n\nvar _warning = require('fbjs/lib/warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n */\n\nvar isUnitlessNumber = _CSSProperty2.default.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n\n  var isNonNumeric = isNaN(value);\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n    return '' + value; // cast to string\n  }\n\n  if (typeof value === 'string') {\n    if (process.env.NODE_ENV !== 'production') {\n      // Allow '0' to pass through without warning. 0 is already special and\n      // doesn't require units, so we don't need to warn about it.\n      if (component && value !== '0') {\n        var owner = component._currentElement._owner;\n        var ownerName = owner ? owner.getName() : null;\n        if (ownerName && !styleWarnings[ownerName]) {\n          styleWarnings[ownerName] = {};\n        }\n        var warned = false;\n        if (ownerName) {\n          var warnings = styleWarnings[ownerName];\n          warned = warnings[name];\n          if (!warned) {\n            warnings[name] = true;\n          }\n        }\n        if (!warned) {\n          process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;\n        }\n      }\n    }\n    value = value.trim();\n  }\n  return value + 'px';\n}\n\nexports.default = dangerousStyleValue;","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n */\n\nfunction memoizeStringOnly(callback) {\n  var cache = {};\n  return function (string) {\n    if (!cache.hasOwnProperty(string)) {\n      cache[string] = callback.call(this, string);\n    }\n    return cache[string];\n  };\n}\n\nmodule.exports = memoizeStringOnly;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.processStyleName = undefined;\nexports.createMarkupForStyles = createMarkupForStyles;\n\nvar _camelizeStyleName = require('fbjs/lib/camelizeStyleName');\n\nvar _camelizeStyleName2 = _interopRequireDefault(_camelizeStyleName);\n\nvar _dangerousStyleValue = require('./dangerousStyleValue');\n\nvar _dangerousStyleValue2 = _interopRequireDefault(_dangerousStyleValue);\n\nvar _hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nvar _memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\n\nvar _memoizeStringOnly2 = _interopRequireDefault(_memoizeStringOnly);\n\nvar _warning = require('fbjs/lib/warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar processStyleName = exports.processStyleName = (0, _memoizeStringOnly2.default)(_hyphenateStyleName2.default); /**\n                                                                                                                   * Copyright 2013-present, Facebook, Inc.\n                                                                                                                   * All rights reserved.\n                                                                                                                   *\n                                                                                                                   * This source code is licensed under the BSD-style license found in the\n                                                                                                                   * LICENSE file in the root directory of this source tree. An additional grant\n                                                                                                                   * of patent rights can be found in the PATENTS file in the same directory.\n                                                                                                                   *\n                                                                                                                   * @providesModule CSSPropertyOperations\n                                                                                                                   */\n\nif (process.env.NODE_ENV !== 'production') {\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n  // style values shouldn't contain a semicolon\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n\n  var warnHyphenatedStyleName = function warnHyphenatedStyleName(name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Unsupported style property %s. Did you mean %s?%s', name, (0, _camelizeStyleName2.default)(name), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnBadVendoredStyleName = function warnBadVendoredStyleName(name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnStyleValueWithSemicolon = function warnStyleValueWithSemicolon(name, value, owner) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n    process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Style property values shouldn\\'t contain a semicolon.%s ' + 'Try \"%s: %s\" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;\n  };\n\n  var warnStyleValueIsNaN = function warnStyleValueIsNaN(name, value, owner) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n    process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;\n  };\n\n  var checkRenderMessage = function checkRenderMessage(owner) {\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' Check the render method of `' + name + '`.';\n      }\n    }\n    return '';\n  };\n\n  /**\n   * @param {string} name\n   * @param {*} value\n   * @param {ReactDOMComponent} component\n   */\n  var warnValidStyle = function warnValidStyle(name, value, component) {\n    //eslint-disable-line no-var\n    var owner = void 0;\n    if (component) {\n      owner = component._currentElement._owner;\n    }\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name, owner);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name, owner);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value, owner);\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      warnStyleValueIsNaN(name, value, owner);\n    }\n  };\n}\n\n/**\n   * Serializes a mapping of style properties for use as inline styles:\n   *\n   *   > createMarkupForStyles({width: '200px', height: 0})\n   *   \"width:200px;height:0;\"\n   *\n   * Undefined values are ignored so that declarative programming is easier.\n   * The result should be HTML-escaped before insertion into the DOM.\n   *\n   * @param {object} styles\n   * @param {ReactDOMComponent} component\n   * @return {?string}\n   */\n\nfunction createMarkupForStyles(styles, component) {\n  var serialized = '';\n  for (var styleName in styles) {\n    var isCustomProp = styleName.indexOf('--') === 0;\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n    if (styleName === 'label') {\n      continue;\n    }\n    var styleValue = styles[styleName];\n    if (process.env.NODE_ENV !== 'production' && !isCustomProp) {\n      warnValidStyle(styleName, styleValue, component);\n    }\n    if (styleValue != null) {\n      if (isCustomProp) {\n        serialized += styleName + ':' + styleValue + ';';\n      } else {\n        serialized += processStyleName(styleName) + ':';\n        serialized += (0, _dangerousStyleValue2.default)(styleName, styleValue, component) + ';';\n      }\n    }\n  }\n  return serialized || null;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = clean;\n// Returns true for null, false, undefined and {}\nfunction isFalsy(value) {\n  return value === null || value === undefined || value === false || (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && Object.keys(value).length === 0;\n}\n\nfunction cleanObject(object) {\n  if (isFalsy(object)) return null;\n  if ((typeof object === 'undefined' ? 'undefined' : _typeof(object)) !== 'object') return object;\n\n  var acc = {},\n      keys = Object.keys(object),\n      hasFalsy = false;\n  for (var i = 0; i < keys.length; i++) {\n    var value = object[keys[i]];\n    var filteredValue = clean(value);\n    if (filteredValue === null || filteredValue !== value) {\n      hasFalsy = true;\n    }\n    if (filteredValue !== null) {\n      acc[keys[i]] = filteredValue;\n    }\n  }\n  return Object.keys(acc).length === 0 ? null : hasFalsy ? acc : object;\n}\n\nfunction cleanArray(rules) {\n  var hasFalsy = false;\n  var filtered = [];\n  rules.forEach(function (rule) {\n    var filteredRule = clean(rule);\n    if (filteredRule === null || filteredRule !== rule) {\n      hasFalsy = true;\n    }\n    if (filteredRule !== null) {\n      filtered.push(filteredRule);\n    }\n  });\n  return filtered.length == 0 ? null : hasFalsy ? filtered : rules;\n}\n\n// Takes style array or object provided by user and clears all the falsy data \n// If there is no styles left after filtration returns null\nfunction clean(input) {\n  return Array.isArray(input) ? cleanArray(input) : cleanObject(input);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar w = [\"Webkit\"];\nvar m = [\"Moz\"];\nvar ms = [\"ms\"];\nvar wm = [\"Webkit\", \"Moz\"];\nvar wms = [\"Webkit\", \"ms\"];\nvar wmms = [\"Webkit\", \"Moz\", \"ms\"];\n\nexports.default = {\n  plugins: [],\n  prefixMap: { \"appearance\": wm, \"userSelect\": wmms, \"textEmphasisPosition\": w, \"textEmphasis\": w, \"textEmphasisStyle\": w, \"textEmphasisColor\": w, \"boxDecorationBreak\": w, \"clipPath\": w, \"maskImage\": w, \"maskMode\": w, \"maskRepeat\": w, \"maskPosition\": w, \"maskClip\": w, \"maskOrigin\": w, \"maskSize\": w, \"maskComposite\": w, \"mask\": w, \"maskBorderSource\": w, \"maskBorderMode\": w, \"maskBorderSlice\": w, \"maskBorderWidth\": w, \"maskBorderOutset\": w, \"maskBorderRepeat\": w, \"maskBorder\": w, \"maskType\": w, \"textDecorationStyle\": w, \"textDecorationSkip\": w, \"textDecorationLine\": w, \"textDecorationColor\": w, \"filter\": w, \"fontFeatureSettings\": w, \"breakAfter\": wmms, \"breakBefore\": wmms, \"breakInside\": wmms, \"columnCount\": wm, \"columnFill\": wm, \"columnGap\": wm, \"columnRule\": wm, \"columnRuleColor\": wm, \"columnRuleStyle\": wm, \"columnRuleWidth\": wm, \"columns\": wm, \"columnSpan\": wm, \"columnWidth\": wm, \"writingMode\": wms, \"flex\": w, \"flexBasis\": w, \"flexDirection\": w, \"flexGrow\": w, \"flexFlow\": w, \"flexShrink\": w, \"flexWrap\": w, \"alignContent\": w, \"alignItems\": w, \"alignSelf\": w, \"justifyContent\": w, \"order\": w, \"transform\": w, \"transformOrigin\": w, \"transformOriginX\": w, \"transformOriginY\": w, \"backfaceVisibility\": w, \"perspective\": w, \"perspectiveOrigin\": w, \"transformStyle\": w, \"transformOriginZ\": w, \"animation\": w, \"animationDelay\": w, \"animationDirection\": w, \"animationFillMode\": w, \"animationDuration\": w, \"animationIterationCount\": w, \"animationName\": w, \"animationPlayState\": w, \"animationTimingFunction\": w, \"backdropFilter\": w, \"fontKerning\": w, \"scrollSnapType\": wms, \"scrollSnapPointsX\": wms, \"scrollSnapPointsY\": wms, \"scrollSnapDestination\": wms, \"scrollSnapCoordinate\": wms, \"shapeImageThreshold\": w, \"shapeImageMargin\": w, \"shapeImageOutside\": w, \"hyphens\": wmms, \"flowInto\": wms, \"flowFrom\": wms, \"regionFragment\": wms, \"textAlignLast\": m, \"tabSize\": m, \"wrapFlow\": ms, \"wrapThrough\": ms, \"wrapMargin\": ms, \"gridTemplateColumns\": ms, \"gridTemplateRows\": ms, \"gridTemplateAreas\": ms, \"gridTemplate\": ms, \"gridAutoColumns\": ms, \"gridAutoRows\": ms, \"gridAutoFlow\": ms, \"grid\": ms, \"gridRowStart\": ms, \"gridColumnStart\": ms, \"gridRowEnd\": ms, \"gridRow\": ms, \"gridColumn\": ms, \"gridColumnEnd\": ms, \"gridColumnGap\": ms, \"gridRowGap\": ms, \"gridArea\": ms, \"gridGap\": ms, \"textSizeAdjust\": wms, \"borderImage\": w, \"borderImageOutset\": w, \"borderImageRepeat\": w, \"borderImageSlice\": w, \"borderImageSource\": w, \"borderImageWidth\": w, \"transitionDelay\": w, \"transitionDuration\": w, \"transitionProperty\": w, \"transitionTimingFunction\": w }\n};\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = capitalizeString;\nfunction capitalizeString(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixProperty;\n\nvar _capitalizeString = require('./capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction prefixProperty(prefixProperties, property, style) {\n  if (prefixProperties.hasOwnProperty(property)) {\n    var requiredPrefixes = prefixProperties[property];\n    for (var i = 0, len = requiredPrefixes.length; i < len; ++i) {\n      style[requiredPrefixes[i] + (0, _capitalizeString2.default)(property)] = style[property];\n    }\n  }\n}\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixValue;\nfunction prefixValue(plugins, property, value, style, metaData) {\n  for (var i = 0, len = plugins.length; i < len; ++i) {\n    var processedValue = plugins[i](property, value, style, metaData);\n\n    // we can stop processing if a value is returned\n    // as all plugin criteria are unique\n    if (processedValue) {\n      return processedValue;\n    }\n  }\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cursor;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = {\n  'zoom-in': true,\n  'zoom-out': true,\n  grab: true,\n  grabbing: true\n};\n\nfunction cursor(property, value) {\n  if (property === 'cursor' && values.hasOwnProperty(value)) {\n    return prefixes.map(function (prefix) {\n      return prefix + value;\n    });\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPrefixedValue;\nvar regex = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n  return typeof value === 'string' && regex.test(value);\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = crossFade;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\nfunction crossFade(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('cross-fade(') > -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(/cross-fade\\(/g, prefix + 'cross-fade(');\n    });\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = filter;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-filter-function\nvar prefixes = ['-webkit-', ''];\nfunction filter(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('filter(') > -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(/filter\\(/g, prefix + 'filter(');\n    });\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = flex;\nvar values = {\n  flex: ['-webkit-box', '-moz-box', '-ms-flexbox', '-webkit-flex', 'flex'],\n  'inline-flex': ['-webkit-inline-box', '-moz-inline-box', '-ms-inline-flexbox', '-webkit-inline-flex', 'inline-flex']\n};\n\nfunction flex(property, value) {\n  if (property === 'display' && values.hasOwnProperty(value)) {\n    return values[value];\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = flexboxOld;\nvar alternativeValues = {\n  'space-around': 'justify',\n  'space-between': 'justify',\n  'flex-start': 'start',\n  'flex-end': 'end',\n  'wrap-reverse': 'multiple',\n  wrap: 'multiple'\n};\n\nvar alternativeProps = {\n  alignItems: 'WebkitBoxAlign',\n  justifyContent: 'WebkitBoxPack',\n  flexWrap: 'WebkitBoxLines'\n};\n\nfunction flexboxOld(property, value, style) {\n  if (property === 'flexDirection' && typeof value === 'string') {\n    if (value.indexOf('column') > -1) {\n      style.WebkitBoxOrient = 'vertical';\n    } else {\n      style.WebkitBoxOrient = 'horizontal';\n    }\n    if (value.indexOf('reverse') > -1) {\n      style.WebkitBoxDirection = 'reverse';\n    } else {\n      style.WebkitBoxDirection = 'normal';\n    }\n  }\n  if (alternativeProps.hasOwnProperty(property)) {\n    style[alternativeProps[property]] = alternativeValues[value] || value;\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = gradient;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;\n\nfunction gradient(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && values.test(value)) {\n    return prefixes.map(function (prefix) {\n      return prefix + value;\n    });\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = imageSet;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\nfunction imageSet(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('image-set(') > -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(/image-set\\(/g, prefix + 'image-set(');\n    });\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = position;\nfunction position(property, value) {\n  if (property === 'position' && value === 'sticky') {\n    return ['-webkit-sticky', 'sticky'];\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = sizing;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n  maxHeight: true,\n  maxWidth: true,\n  width: true,\n  height: true,\n  columnWidth: true,\n  minWidth: true,\n  minHeight: true\n};\nvar values = {\n  'min-content': true,\n  'max-content': true,\n  'fill-available': true,\n  'fit-content': true,\n  'contain-floats': true\n};\n\nfunction sizing(property, value) {\n  if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n    return prefixes.map(function (prefix) {\n      return prefix + value;\n    });\n  }\n}\nmodule.exports = exports['default'];","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = hyphenateProperty;\n\nvar _hyphenateStyleName = require('hyphenate-style-name');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction hyphenateProperty(property) {\n  return (0, _hyphenateStyleName2.default)(property);\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = transition;\n\nvar _hyphenateProperty = require('css-in-js-utils/lib/hyphenateProperty');\n\nvar _hyphenateProperty2 = _interopRequireDefault(_hyphenateProperty);\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nvar _capitalizeString = require('../../utils/capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar properties = {\n  transition: true,\n  transitionProperty: true,\n  WebkitTransition: true,\n  WebkitTransitionProperty: true,\n  MozTransition: true,\n  MozTransitionProperty: true\n};\n\n\nvar prefixMapping = {\n  Webkit: '-webkit-',\n  Moz: '-moz-',\n  ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n  if ((0, _isPrefixedValue2.default)(value)) {\n    return value;\n  }\n\n  // only split multi values, not cubic beziers\n  var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n  for (var i = 0, len = multipleValues.length; i < len; ++i) {\n    var singleValue = multipleValues[i];\n    var values = [singleValue];\n    for (var property in propertyPrefixMap) {\n      var dashCaseProperty = (0, _hyphenateProperty2.default)(property);\n\n      if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n        var prefixes = propertyPrefixMap[property];\n        for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n          // join all prefixes and create a new value\n          values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n        }\n      }\n    }\n\n    multipleValues[i] = values.join(',');\n  }\n\n  return multipleValues.join(',');\n}\n\nfunction transition(property, value, style, propertyPrefixMap) {\n  // also check for already prefixed transitions\n  if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n    var outputValue = prefixValue(value, propertyPrefixMap);\n    // if the property is already prefixed\n    var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-moz-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Webkit') > -1) {\n      return webkitOutput;\n    }\n\n    var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-webkit-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Moz') > -1) {\n      return mozOutput;\n    }\n\n    style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput;\n    style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput;\n    return outputValue;\n  }\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixer;\n\nvar _staticData = require('inline-style-prefixer/static/staticData');\n\nvar _staticData2 = _interopRequireDefault(_staticData);\n\nvar _prefixProperty = require('inline-style-prefixer/utils/prefixProperty');\n\nvar _prefixProperty2 = _interopRequireDefault(_prefixProperty);\n\nvar _prefixValue = require('inline-style-prefixer/utils/prefixValue');\n\nvar _prefixValue2 = _interopRequireDefault(_prefixValue);\n\nvar _cursor = require('inline-style-prefixer/static/plugins/cursor');\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _crossFade = require('inline-style-prefixer/static/plugins/crossFade');\n\nvar _crossFade2 = _interopRequireDefault(_crossFade);\n\nvar _filter = require('inline-style-prefixer/static/plugins/filter');\n\nvar _filter2 = _interopRequireDefault(_filter);\n\nvar _flex = require('inline-style-prefixer/static/plugins/flex');\n\nvar _flex2 = _interopRequireDefault(_flex);\n\nvar _flexboxOld = require('inline-style-prefixer/static/plugins/flexboxOld');\n\nvar _flexboxOld2 = _interopRequireDefault(_flexboxOld);\n\nvar _gradient = require('inline-style-prefixer/static/plugins/gradient');\n\nvar _gradient2 = _interopRequireDefault(_gradient);\n\nvar _imageSet = require('inline-style-prefixer/static/plugins/imageSet');\n\nvar _imageSet2 = _interopRequireDefault(_imageSet);\n\nvar _position = require('inline-style-prefixer/static/plugins/position');\n\nvar _position2 = _interopRequireDefault(_position);\n\nvar _sizing = require('inline-style-prefixer/static/plugins/sizing');\n\nvar _sizing2 = _interopRequireDefault(_sizing);\n\nvar _transition = require('inline-style-prefixer/static/plugins/transition');\n\nvar _transition2 = _interopRequireDefault(_transition);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar plugins = [_crossFade2.default, _cursor2.default, _filter2.default, _flexboxOld2.default, _gradient2.default, _imageSet2.default, _position2.default, _sizing2.default, _transition2.default, _flex2.default]; // custom facade for inline-style-prefixer\n\nvar prefixMap = _staticData2.default.prefixMap;\n\nfunction prefixer(style) {\n  for (var property in style) {\n    var value = style[property];\n\n    var processedValue = (0, _prefixValue2.default)(plugins, property, value, style, prefixMap);\n\n    // only modify the value if it was touched\n    // by any plugin to prevent unnecessary mutations\n    if (processedValue) {\n      style[property] = processedValue;\n    }\n\n    (0, _prefixProperty2.default)(prefixMap, property, style);\n  }\n  return style;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.PluginSet = PluginSet;\nexports.fallbacks = fallbacks;\nexports.contentWrap = contentWrap;\nexports.prefixes = prefixes;\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _CSSPropertyOperations = require('./CSSPropertyOperations');\n\nvar _prefixer = require('./prefixer');\n\nvar _prefixer2 = _interopRequireDefault(_prefixer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isDev = function (x) {\n  return x === 'development' || !x;\n}(process.env.NODE_ENV);\n\nfunction PluginSet(initial) {\n  this.fns = initial || [];\n}\n\n(0, _objectAssign2.default)(PluginSet.prototype, {\n  add: function add() {\n    var _this = this;\n\n    for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n      fns[_key] = arguments[_key];\n    }\n\n    fns.forEach(function (fn) {\n      if (_this.fns.indexOf(fn) >= 0) {\n        if (isDev) {\n          console.warn('adding the same plugin again, ignoring'); //eslint-disable-line no-console\n        }\n      } else {\n        _this.fns = [fn].concat(_this.fns);\n      }\n    });\n  },\n  remove: function remove(fn) {\n    this.fns = this.fns.filter(function (x) {\n      return x !== fn;\n    });\n  },\n  clear: function clear() {\n    this.fns = [];\n  },\n  transform: function transform(o) {\n    return this.fns.reduce(function (o, fn) {\n      return fn(o);\n    }, o);\n  }\n});\n\nfunction fallbacks(node) {\n  var hasArray = Object.keys(node.style).map(function (x) {\n    return Array.isArray(node.style[x]);\n  }).indexOf(true) >= 0;\n  if (hasArray) {\n    var style = node.style;\n\n    var flattened = Object.keys(style).reduce(function (o, key) {\n      o[key] = Array.isArray(style[key]) ? style[key].join('; ' + (0, _CSSPropertyOperations.processStyleName)(key) + ': ') : style[key];\n      return o;\n    }, {});\n    // todo - \n    // flatten arrays which haven't been flattened yet \n    return (0, _objectAssign2.default)({}, node, { style: flattened });\n  }\n  return node;\n}\n\nvar contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit'];\n\nfunction contentWrap(node) {\n  if (node.style.content) {\n    var cont = node.style.content;\n    if (contentValues.indexOf(cont) >= 0) {\n      return node;\n    }\n    if (/^(attr|calc|counters?|url)\\(/.test(cont)) {\n      return node;\n    }\n    if (cont.charAt(0) === cont.charAt(cont.length - 1) && (cont.charAt(0) === '\"' || cont.charAt(0) === \"'\")) {\n      return node;\n    }\n    return _extends({}, node, { style: _extends({}, node.style, { content: '\"' + cont + '\"' }) });\n  }\n  return node;\n}\n\nfunction prefixes(node) {\n  return (0, _objectAssign2.default)({}, node, { style: (0, _prefixer2.default)(_extends({}, node.style)) });\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = doHash;\n// murmurhash2 via https://gist.github.com/raycmorgan/588423\n\nfunction doHash(str, seed) {\n  var m = 0x5bd1e995;\n  var r = 24;\n  var h = seed ^ str.length;\n  var length = str.length;\n  var currentIndex = 0;\n\n  while (length >= 4) {\n    var k = UInt32(str, currentIndex);\n\n    k = Umul32(k, m);\n    k ^= k >>> r;\n    k = Umul32(k, m);\n\n    h = Umul32(h, m);\n    h ^= k;\n\n    currentIndex += 4;\n    length -= 4;\n  }\n\n  switch (length) {\n    case 3:\n      h ^= UInt16(str, currentIndex);\n      h ^= str.charCodeAt(currentIndex + 2) << 16;\n      h = Umul32(h, m);\n      break;\n\n    case 2:\n      h ^= UInt16(str, currentIndex);\n      h = Umul32(h, m);\n      break;\n\n    case 1:\n      h ^= str.charCodeAt(currentIndex);\n      h = Umul32(h, m);\n      break;\n  }\n\n  h ^= h >>> 13;\n  h = Umul32(h, m);\n  h ^= h >>> 15;\n\n  return h >>> 0;\n}\n\nfunction UInt32(str, pos) {\n  return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8) + (str.charCodeAt(pos++) << 16) + (str.charCodeAt(pos) << 24);\n}\n\nfunction UInt16(str, pos) {\n  return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8);\n}\n\nfunction Umul32(n, m) {\n  n = n | 0;\n  m = m | 0;\n  var nlo = n & 0xffff;\n  var nhi = n >>> 16;\n  var res = nlo * m + ((nhi * m & 0xffff) << 16) | 0;\n  return res;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.compose = exports.merge = exports.$ = exports.style = exports.presets = exports.keyframes = exports.fontFace = exports.insertGlobal = exports.insertRule = exports.plugins = exports.styleSheet = undefined;\nexports.speedy = speedy;\nexports.simulations = simulations;\nexports.simulate = simulate;\nexports.cssLabels = cssLabels;\nexports.isLikeRule = isLikeRule;\nexports.idFor = idFor;\nexports.css = css;\nexports.rehydrate = rehydrate;\nexports.flush = flush;\nexports.select = select;\nexports.parent = parent;\nexports.media = media;\nexports.pseudo = pseudo;\nexports.active = active;\nexports.any = any;\nexports.checked = checked;\nexports.disabled = disabled;\nexports.empty = empty;\nexports.enabled = enabled;\nexports._default = _default;\nexports.first = first;\nexports.firstChild = firstChild;\nexports.firstOfType = firstOfType;\nexports.fullscreen = fullscreen;\nexports.focus = focus;\nexports.hover = hover;\nexports.indeterminate = indeterminate;\nexports.inRange = inRange;\nexports.invalid = invalid;\nexports.lastChild = lastChild;\nexports.lastOfType = lastOfType;\nexports.left = left;\nexports.link = link;\nexports.onlyChild = onlyChild;\nexports.onlyOfType = onlyOfType;\nexports.optional = optional;\nexports.outOfRange = outOfRange;\nexports.readOnly = readOnly;\nexports.readWrite = readWrite;\nexports.required = required;\nexports.right = right;\nexports.root = root;\nexports.scope = scope;\nexports.target = target;\nexports.valid = valid;\nexports.visited = visited;\nexports.dir = dir;\nexports.lang = lang;\nexports.not = not;\nexports.nthChild = nthChild;\nexports.nthLastChild = nthLastChild;\nexports.nthLastOfType = nthLastOfType;\nexports.nthOfType = nthOfType;\nexports.after = after;\nexports.before = before;\nexports.firstLetter = firstLetter;\nexports.firstLine = firstLine;\nexports.selection = selection;\nexports.backdrop = backdrop;\nexports.placeholder = placeholder;\nexports.cssFor = cssFor;\nexports.attribsFor = attribsFor;\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _sheet = require('./sheet.js');\n\nvar _CSSPropertyOperations = require('./CSSPropertyOperations');\n\nvar _clean = require('./clean.js');\n\nvar _clean2 = _interopRequireDefault(_clean);\n\nvar _plugins = require('./plugins');\n\nvar _hash = require('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n/* stylesheet */\n\n\nvar styleSheet = exports.styleSheet = new _sheet.StyleSheet();\n// an isomorphic StyleSheet shim. hides all the nitty gritty.\n\n// /**************** LIFTOFF IN 3... 2... 1... ****************/\nstyleSheet.inject(); //eslint-disable-line indent\n// /****************      TO THE MOOOOOOON     ****************/\n\n// convenience function to toggle speedy\nfunction speedy(bool) {\n  return styleSheet.speedy(bool);\n}\n\n// plugins\n// we include these by default\nvar plugins = exports.plugins = styleSheet.plugins = new _plugins.PluginSet([_plugins.prefixes, _plugins.contentWrap, _plugins.fallbacks]);\nplugins.media = new _plugins.PluginSet(); // neat! media, font-face, keyframes\nplugins.fontFace = new _plugins.PluginSet();\nplugins.keyframes = new _plugins.PluginSet([_plugins.prefixes, _plugins.fallbacks]);\n\n// define some constants\n\nvar isDev = process.env.NODE_ENV === 'development' || !process.env.NODE_ENV;\nvar isTest = process.env.NODE_ENV === 'test';\nvar isBrowser = typeof window !== 'undefined';\n\n/**** simulations  ****/\n\n// a flag to enable simulation meta tags on dom nodes\n// defaults to true in dev mode. recommend *not* to\n// toggle often.\nvar canSimulate = isDev;\n\n// we use these flags for issuing warnings when simulate is called\n// in prod / in incorrect order\nvar warned1 = false,\n    warned2 = false;\n\n// toggles simulation activity. shouldn't be needed in most cases\nfunction simulations() {\n  var bool = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n  canSimulate = !!bool;\n}\n\n// use this on dom nodes to 'simulate' pseudoclasses\n// <div {...hover({ color: 'red' })} {...simulate('hover', 'visited')}>...</div>\n// you can even send in some weird ones, as long as it's in simple format\n// and matches an existing rule on the element\n// eg simulate('nthChild2', ':hover:active') etc\nfunction simulate() {\n  for (var _len = arguments.length, pseudos = Array(_len), _key = 0; _key < _len; _key++) {\n    pseudos[_key] = arguments[_key];\n  }\n\n  pseudos = (0, _clean2.default)(pseudos);\n  if (!pseudos) return {};\n  if (!canSimulate) {\n    if (!warned1) {\n      console.warn('can\\'t simulate without once calling simulations(true)'); //eslint-disable-line no-console\n      warned1 = true;\n    }\n    if (!isDev && !isTest && !warned2) {\n      console.warn('don\\'t use simulation outside dev'); //eslint-disable-line no-console\n      warned2 = true;\n    }\n    return {};\n  }\n  return pseudos.reduce(function (o, p) {\n    return o['data-simulate-' + simple(p)] = '', o;\n  }, {});\n}\n\n/**** labels ****/\n// toggle for debug labels.\n// *shouldn't* have to mess with this manually\nvar hasLabels = isDev;\n\nfunction cssLabels(bool) {\n  hasLabels = !!bool;\n}\n\n// takes a string, converts to lowercase, strips out nonalphanumeric.\nfunction simple(str) {\n  var char = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  return str.toLowerCase().replace(/[^a-z0-9]/g, char);\n}\n\n// hashes a string to something 'unique'\n// we use this to generate ids for styles\n\n\nfunction hashify(obj) {\n  var str = JSON.stringify(obj);\n  var toRet = (0, _hash2.default)(str).toString(36);\n  if (obj.label && obj.label.length > 0 && isDev) {\n    return simple(obj.label.join('.'), '-') + '-' + toRet;\n  }\n  return toRet;\n}\n\n// of shape { 'data-css-<id>': '' }\nfunction isLikeRule(rule) {\n  var keys = Object.keys(rule).filter(function (x) {\n    return x !== 'toString';\n  });\n  if (keys.length !== 1) {\n    return false;\n  }\n  return !!/data\\-css\\-([a-zA-Z0-9\\-_]+)/.exec(keys[0]);\n}\n\n// extracts id from a { 'data-css-<id>': ''} like object\nfunction idFor(rule) {\n  var keys = Object.keys(rule).filter(function (x) {\n    return x !== 'toString';\n  });\n  if (keys.length !== 1) throw new Error('not a rule');\n  var regex = /data\\-css\\-([a-zA-Z0-9\\-_]+)/;\n  var match = regex.exec(keys[0]);\n  if (!match) throw new Error('not a rule');\n  return match[1];\n}\n\n// from https://github.com/j2css/j2c/blob/5d381c2d721d04b54fabe6a165d587247c3087cb/src/helpers.js#L28-L61\n\n// \"Tokenizes\" the selectors into parts relevant for the next function.\n// Strings and comments are matched, but ignored afterwards.\n// This is not a full tokenizers. It only recognizes comas, parentheses,\n// strings and comments.\n// regexp generated by scripts/regexps.js then trimmed by hand\nvar selectorTokenizer = /[(),]|\"(?:\\\\.|[^\"\\n])*\"|'(?:\\\\.|[^'\\n])*'|\\/\\*[\\s\\S]*?\\*\\//g;\n\n/**\n * This will split a coma-separated selector list into individual selectors,\n * ignoring comas in strings, comments and in :pseudo-selectors(parameter, lists).\n *\n * @param {string} selector\n * @return {string[]}\n */\n\nfunction splitSelector(selector) {\n  if (selector.indexOf(',') === -1) {\n    return [selector];\n  }\n\n  var indices = [],\n      res = [],\n      inParen = 0,\n      o;\n  /*eslint-disable no-cond-assign*/\n  while (o = selectorTokenizer.exec(selector)) {\n    /*eslint-enable no-cond-assign*/\n    switch (o[0]) {\n      case '(':\n        inParen++;break;\n      case ')':\n        inParen--;break;\n      case ',':\n        if (inParen) break;indices.push(o.index);\n    }\n  }\n  for (o = indices.length; o--;) {\n    res.unshift(selector.slice(indices[o] + 1));\n    selector = selector.slice(0, indices[o]);\n  }\n  res.unshift(selector);\n  return res;\n}\n\nfunction selector(id, path) {\n  if (!id) {\n    return path.replace(/\\&/g, '');\n  }\n  if (!path) return '.css-' + id + ',[data-css-' + id + ']';\n\n  var x = splitSelector(path).map(function (x) {\n    return x.indexOf('&') >= 0 ? [x.replace(/\\&/mg, '.css-' + id), x.replace(/\\&/mg, '[data-css-' + id + ']')].join(',') // todo - make sure each sub selector has an &\n    : '.css-' + id + x + ',[data-css-' + id + ']' + x;\n  }).join(',');\n\n  if (canSimulate && /^\\&\\:/.exec(path) && !/\\s/.exec(path)) {\n    x += ',.css-' + id + '[data-simulate-' + simple(path) + '],[data-css-' + id + '][data-simulate-' + simple(path) + ']';\n  }\n  return x;\n}\n\n// end https://github.com/j2css/j2c/blob/5d381c2d721d04b54fabe6a165d587247c3087cb/src/helpers.js#L28-L61\n\n\nfunction toCSS(_ref) {\n  var selector = _ref.selector,\n      style = _ref.style;\n\n  var result = plugins.transform({ selector: selector, style: style });\n  return result.selector + '{' + (0, _CSSPropertyOperations.createMarkupForStyles)(result.style) + '}';\n}\n\nfunction deconstruct(style) {\n  // we can be sure it's not infinitely nested here\n  var plain = void 0,\n      selects = void 0,\n      medias = void 0,\n      supports = void 0;\n  Object.keys(style).forEach(function (key) {\n    if (key.indexOf('&') >= 0) {\n      selects = selects || {};\n      selects[key] = style[key];\n    } else if (key.indexOf('@media') === 0) {\n      medias = medias || {};\n      medias[key] = deconstruct(style[key]);\n    } else if (key.indexOf('@supports') === 0) {\n      supports = supports || {};\n      supports[key] = deconstruct(style[key]);\n    } else if (key === 'label') {\n      if (style.label.length > 0) {\n        plain = plain || {};\n        plain.label = hasLabels ? style.label.join('.') : '';\n      }\n    } else {\n      plain = plain || {};\n      plain[key] = style[key];\n    }\n  });\n  return { plain: plain, selects: selects, medias: medias, supports: supports };\n}\n\nfunction deconstructedStyleToCSS(id, style) {\n  var css = [];\n\n  // plugins here\n  var plain = style.plain,\n      selects = style.selects,\n      medias = style.medias,\n      supports = style.supports;\n\n  if (plain) {\n    css.push(toCSS({ style: plain, selector: selector(id) }));\n  }\n  if (selects) {\n    Object.keys(selects).forEach(function (key) {\n      return css.push(toCSS({ style: selects[key], selector: selector(id, key) }));\n    });\n  }\n  if (medias) {\n    Object.keys(medias).forEach(function (key) {\n      return css.push(key + '{' + deconstructedStyleToCSS(id, medias[key]).join('') + '}');\n    });\n  }\n  if (supports) {\n    Object.keys(supports).forEach(function (key) {\n      return css.push(key + '{' + deconstructedStyleToCSS(id, supports[key]).join('') + '}');\n    });\n  }\n  return css;\n}\n\n// this cache to track which rules have\n// been inserted into the stylesheet\nvar inserted = styleSheet.inserted = {};\n\n// and helpers to insert rules into said styleSheet\nfunction insert(spec) {\n  if (!inserted[spec.id]) {\n    inserted[spec.id] = true;\n    var deconstructed = deconstruct(spec.style);\n    var rules = deconstructedStyleToCSS(spec.id, deconstructed);\n    inserted[spec.id] = isBrowser ? true : rules;\n    rules.forEach(function (cssRule) {\n      return styleSheet.insert(cssRule);\n    });\n  }\n}\n\n// a simple cache to store generated rules\nvar registered = styleSheet.registered = {};\nfunction register(spec) {\n  if (!registered[spec.id]) {\n    registered[spec.id] = spec;\n  }\n}\n\nfunction _getRegistered(rule) {\n  if (isLikeRule(rule)) {\n    var ret = registered[idFor(rule)];\n    if (ret == null) {\n      throw new Error('[glamor] an unexpected rule cache miss occurred. This is probably a sign of multiple glamor instances in your app. See https://github.com/threepointone/glamor/issues/79');\n    }\n    return ret;\n  }\n  return rule;\n}\n\n// todo - perf\nvar ruleCache = {};\nfunction toRule(spec) {\n  register(spec);\n  insert(spec);\n\n  if (ruleCache[spec.id]) {\n    return ruleCache[spec.id];\n  }\n\n  var ret = _defineProperty({}, 'data-css-' + spec.id, hasLabels ? spec.label || '' : '');\n  Object.defineProperty(ret, 'toString', {\n    enumerable: false, value: function value() {\n      return 'css-' + spec.id;\n    }\n  });\n  ruleCache[spec.id] = ret;\n  return ret;\n}\n\nfunction log() {\n  //eslint-disable-line no-unused-vars\n  console.log(this); //eslint-disable-line no-console\n  return this;\n}\n\nfunction isSelector(key) {\n  var possibles = [':', '.', '[', '>', ' '],\n      found = false,\n      ch = key.charAt(0);\n  for (var i = 0; i < possibles.length; i++) {\n    if (ch === possibles[i]) {\n      found = true;\n      break;\n    }\n  }\n  return found || key.indexOf('&') >= 0;\n}\n\nfunction joinSelectors(a, b) {\n  var as = splitSelector(a).map(function (a) {\n    return !(a.indexOf('&') >= 0) ? '&' + a : a;\n  });\n  var bs = splitSelector(b).map(function (b) {\n    return !(b.indexOf('&') >= 0) ? '&' + b : b;\n  });\n\n  return bs.reduce(function (arr, b) {\n    return arr.concat(as.map(function (a) {\n      return b.replace(/\\&/g, a);\n    }));\n  }, []).join(',');\n}\n\nfunction joinMediaQueries(a, b) {\n  return a ? '@media ' + a.substring(6) + ' and ' + b.substring(6) : b;\n}\n\nfunction isMediaQuery(key) {\n  return key.indexOf('@media') === 0;\n}\n\nfunction isSupports(key) {\n  return key.indexOf('@supports') === 0;\n}\n\nfunction joinSupports(a, b) {\n  return a ? '@supports ' + a.substring(9) + ' and ' + b.substring(9) : b;\n}\n\n// flatten a nested array\nfunction flatten(inArr) {\n  var arr = [];\n  for (var i = 0; i < inArr.length; i++) {\n    if (Array.isArray(inArr[i])) arr = arr.concat(flatten(inArr[i]));else arr = arr.concat(inArr[i]);\n  }\n  return arr;\n}\n\nvar prefixedPseudoSelectors = {\n  '::placeholder': ['::-webkit-input-placeholder', '::-moz-placeholder', '::-ms-input-placeholder'],\n  ':fullscreen': [':-webkit-full-screen', ':-moz-full-screen', ':-ms-fullscreen']\n\n  // mutable! modifies dest.\n};function build(dest, _ref2) {\n  var _ref2$selector = _ref2.selector,\n      selector = _ref2$selector === undefined ? '' : _ref2$selector,\n      _ref2$mq = _ref2.mq,\n      mq = _ref2$mq === undefined ? '' : _ref2$mq,\n      _ref2$supp = _ref2.supp,\n      supp = _ref2$supp === undefined ? '' : _ref2$supp,\n      _ref2$src = _ref2.src,\n      src = _ref2$src === undefined ? {} : _ref2$src;\n\n\n  if (!Array.isArray(src)) {\n    src = [src];\n  }\n  src = flatten(src);\n\n  src.forEach(function (_src) {\n    if (isLikeRule(_src)) {\n      var reg = _getRegistered(_src);\n      if (reg.type !== 'css') {\n        throw new Error('cannot merge this rule');\n      }\n      _src = reg.style;\n    }\n    _src = (0, _clean2.default)(_src);\n    if (_src && _src.composes) {\n      build(dest, { selector: selector, mq: mq, supp: supp, src: _src.composes });\n    }\n    Object.keys(_src || {}).forEach(function (key) {\n      if (isSelector(key)) {\n\n        if (prefixedPseudoSelectors[key]) {\n          prefixedPseudoSelectors[key].forEach(function (p) {\n            return build(dest, { selector: joinSelectors(selector, p), mq: mq, supp: supp, src: _src[key] });\n          });\n        }\n\n        build(dest, { selector: joinSelectors(selector, key), mq: mq, supp: supp, src: _src[key] });\n      } else if (isMediaQuery(key)) {\n        build(dest, { selector: selector, mq: joinMediaQueries(mq, key), supp: supp, src: _src[key] });\n      } else if (isSupports(key)) {\n        build(dest, { selector: selector, mq: mq, supp: joinSupports(supp, key), src: _src[key] });\n      } else if (key === 'composes') {\n        // ignore, we already dealth with it\n      } else {\n        var _dest = dest;\n        if (supp) {\n          _dest[supp] = _dest[supp] || {};\n          _dest = _dest[supp];\n        }\n        if (mq) {\n          _dest[mq] = _dest[mq] || {};\n          _dest = _dest[mq];\n        }\n        if (selector) {\n          _dest[selector] = _dest[selector] || {};\n          _dest = _dest[selector];\n        }\n\n        if (key === 'label') {\n          if (hasLabels) {\n            dest.label = dest.label.concat(_src.label);\n          }\n        } else {\n          _dest[key] = _src[key];\n        }\n      }\n    });\n  });\n}\n\nfunction _css(rules) {\n  var style = { label: [] };\n  build(style, { src: rules }); // mutative! but worth it.\n\n  var spec = {\n    id: hashify(style),\n    style: style, label: hasLabels ? style.label.join('.') : '',\n    type: 'css'\n  };\n  return toRule(spec);\n}\n\nvar nullrule = {\n  // 'data-css-nil': ''\n};\nObject.defineProperty(nullrule, 'toString', {\n  enumerable: false, value: function value() {\n    return 'css-nil';\n  }\n});\n\nvar inputCaches = typeof WeakMap !== 'undefined' ? [nullrule, new WeakMap(), new WeakMap(), new WeakMap()] : [nullrule];\n\nvar warnedWeakMapError = false;\nfunction multiIndexCache(fn) {\n  return function (args) {\n    if (inputCaches[args.length]) {\n      var coi = inputCaches[args.length];\n      var ctr = 0;\n      while (ctr < args.length - 1) {\n        if (!coi.has(args[ctr])) {\n          coi.set(args[ctr], new WeakMap());\n        }\n        coi = coi.get(args[ctr]);\n        ctr++;\n      }\n      if (coi.has(args[args.length - 1])) {\n        var ret = coi.get(args[ctr]);\n\n        if (registered[ret.toString().substring(4)]) {\n          // make sure it hasn't been flushed\n          return ret;\n        }\n      }\n    }\n    var value = fn(args);\n    if (inputCaches[args.length]) {\n      var _ctr = 0,\n          _coi = inputCaches[args.length];\n      while (_ctr < args.length - 1) {\n        _coi = _coi.get(args[_ctr]);\n        _ctr++;\n      }\n      try {\n        _coi.set(args[_ctr], value);\n      } catch (err) {\n        if (isDev && !warnedWeakMapError) {\n          var _console;\n\n          warnedWeakMapError = true;\n          (_console = console).warn.apply(_console, ['failed setting the WeakMap cache for args:'].concat(_toConsumableArray(args))); // eslint-disable-line no-console\n          console.warn('this should NOT happen, please file a bug on the github repo.'); // eslint-disable-line no-console\n        }\n      }\n    }\n    return value;\n  };\n}\n\nvar cachedCss = typeof WeakMap !== 'undefined' ? multiIndexCache(_css) : _css;\n\nfunction css() {\n  for (var _len2 = arguments.length, rules = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    rules[_key2] = arguments[_key2];\n  }\n\n  if (rules[0] && rules[0].length && rules[0].raw) {\n    throw new Error('you forgot to include glamor/babel in your babel plugins.');\n  }\n\n  rules = (0, _clean2.default)(rules);\n  if (!rules) {\n    return nullrule;\n  }\n\n  return cachedCss(rules);\n}\n\ncss.insert = function (css) {\n  var spec = {\n    id: hashify(css),\n    css: css,\n    type: 'raw'\n  };\n  register(spec);\n  if (!inserted[spec.id]) {\n    styleSheet.insert(spec.css);\n    inserted[spec.id] = isBrowser ? true : [spec.css];\n  }\n};\n\nvar insertRule = exports.insertRule = css.insert;\n\ncss.global = function (selector, style) {\n  style = (0, _clean2.default)(style);\n  if (style) {\n    return css.insert(toCSS({ selector: selector, style: style }));\n  }\n};\n\nvar insertGlobal = exports.insertGlobal = css.global;\n\nfunction insertKeyframe(spec) {\n  if (!inserted[spec.id]) {\n    var inner = Object.keys(spec.keyframes).map(function (kf) {\n      var result = plugins.keyframes.transform({ id: spec.id, name: kf, style: spec.keyframes[kf] });\n      return result.name + '{' + (0, _CSSPropertyOperations.createMarkupForStyles)(result.style) + '}';\n    }).join('');\n\n    var rules = ['-webkit-', '-moz-', '-o-', ''].map(function (prefix) {\n      return '@' + prefix + 'keyframes ' + (spec.name + '_' + spec.id) + '{' + inner + '}';\n    });\n    rules.forEach(function (rule) {\n      return styleSheet.insert(rule);\n    });\n\n    inserted[spec.id] = isBrowser ? true : rules;\n  }\n}\ncss.keyframes = function (name, kfs) {\n  if (!kfs) {\n    kfs = name, name = 'animation';\n  }\n\n  // do not ignore empty keyframe definitions for now.\n  kfs = (0, _clean2.default)(kfs) || {};\n  var spec = {\n    id: hashify({ name: name, kfs: kfs }),\n    type: 'keyframes',\n    name: name,\n    keyframes: kfs\n  };\n  register(spec);\n  insertKeyframe(spec);\n  return name + '_' + spec.id;\n};\n\n// we don't go all out for fonts as much, giving a simple font loading strategy\n// use a fancier lib if you need moar power\ncss.fontFace = function (font) {\n  font = (0, _clean2.default)(font);\n  var spec = {\n    id: hashify(font),\n    type: 'font-face',\n    font: font\n  };\n  register(spec);\n  insertFontFace(spec);\n\n  return font.fontFamily;\n};\n\nvar fontFace = exports.fontFace = css.fontFace;\nvar keyframes = exports.keyframes = css.keyframes;\n\nfunction insertFontFace(spec) {\n  if (!inserted[spec.id]) {\n    var rule = '@font-face{' + (0, _CSSPropertyOperations.createMarkupForStyles)(spec.font) + '}';\n    styleSheet.insert(rule);\n    inserted[spec.id] = isBrowser ? true : [rule];\n  }\n}\n\n// rehydrate the insertion cache with ids sent from\n// renderStatic / renderStaticOptimized\nfunction rehydrate(ids) {\n  // load up ids\n  (0, _objectAssign2.default)(inserted, ids.reduce(function (o, i) {\n    return o[i] = true, o;\n  }, {}));\n  // assume css loaded separately\n}\n\n// clears out the cache and empties the stylesheet\n// best for tests, though there might be some value for SSR.\n\nfunction flush() {\n  inserted = styleSheet.inserted = {};\n  registered = styleSheet.registered = {};\n  ruleCache = {};\n  styleSheet.flush();\n  styleSheet.inject();\n}\n\nvar presets = exports.presets = {\n  mobile: '(min-width: 400px)',\n  Mobile: '@media (min-width: 400px)',\n  phablet: '(min-width: 550px)',\n  Phablet: '@media (min-width: 550px)',\n  tablet: '(min-width: 750px)',\n  Tablet: '@media (min-width: 750px)',\n  desktop: '(min-width: 1000px)',\n  Desktop: '@media (min-width: 1000px)',\n  hd: '(min-width: 1200px)',\n  Hd: '@media (min-width: 1200px)'\n};\n\nvar style = exports.style = css;\n\nfunction select(selector) {\n  for (var _len3 = arguments.length, styles = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    styles[_key3 - 1] = arguments[_key3];\n  }\n\n  if (!selector) {\n    return style(styles);\n  }\n  return css(_defineProperty({}, selector, styles));\n}\nvar $ = exports.$ = select;\n\nfunction parent(selector) {\n  for (var _len4 = arguments.length, styles = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    styles[_key4 - 1] = arguments[_key4];\n  }\n\n  return css(_defineProperty({}, selector + ' &', styles));\n}\n\nvar merge = exports.merge = css;\nvar compose = exports.compose = css;\n\nfunction media(query) {\n  for (var _len5 = arguments.length, rules = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    rules[_key5 - 1] = arguments[_key5];\n  }\n\n  return css(_defineProperty({}, '@media ' + query, rules));\n}\n\nfunction pseudo(selector) {\n  for (var _len6 = arguments.length, styles = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n    styles[_key6 - 1] = arguments[_key6];\n  }\n\n  return css(_defineProperty({}, selector, styles));\n}\n\n// allllll the pseudoclasses\n\nfunction active(x) {\n  return pseudo(':active', x);\n}\n\nfunction any(x) {\n  return pseudo(':any', x);\n}\n\nfunction checked(x) {\n  return pseudo(':checked', x);\n}\n\nfunction disabled(x) {\n  return pseudo(':disabled', x);\n}\n\nfunction empty(x) {\n  return pseudo(':empty', x);\n}\n\nfunction enabled(x) {\n  return pseudo(':enabled', x);\n}\n\nfunction _default(x) {\n  return pseudo(':default', x); // note '_default' name\n}\n\nfunction first(x) {\n  return pseudo(':first', x);\n}\n\nfunction firstChild(x) {\n  return pseudo(':first-child', x);\n}\n\nfunction firstOfType(x) {\n  return pseudo(':first-of-type', x);\n}\n\nfunction fullscreen(x) {\n  return pseudo(':fullscreen', x);\n}\n\nfunction focus(x) {\n  return pseudo(':focus', x);\n}\n\nfunction hover(x) {\n  return pseudo(':hover', x);\n}\n\nfunction indeterminate(x) {\n  return pseudo(':indeterminate', x);\n}\n\nfunction inRange(x) {\n  return pseudo(':in-range', x);\n}\n\nfunction invalid(x) {\n  return pseudo(':invalid', x);\n}\n\nfunction lastChild(x) {\n  return pseudo(':last-child', x);\n}\n\nfunction lastOfType(x) {\n  return pseudo(':last-of-type', x);\n}\n\nfunction left(x) {\n  return pseudo(':left', x);\n}\n\nfunction link(x) {\n  return pseudo(':link', x);\n}\n\nfunction onlyChild(x) {\n  return pseudo(':only-child', x);\n}\n\nfunction onlyOfType(x) {\n  return pseudo(':only-of-type', x);\n}\n\nfunction optional(x) {\n  return pseudo(':optional', x);\n}\n\nfunction outOfRange(x) {\n  return pseudo(':out-of-range', x);\n}\n\nfunction readOnly(x) {\n  return pseudo(':read-only', x);\n}\n\nfunction readWrite(x) {\n  return pseudo(':read-write', x);\n}\n\nfunction required(x) {\n  return pseudo(':required', x);\n}\n\nfunction right(x) {\n  return pseudo(':right', x);\n}\n\nfunction root(x) {\n  return pseudo(':root', x);\n}\n\nfunction scope(x) {\n  return pseudo(':scope', x);\n}\n\nfunction target(x) {\n  return pseudo(':target', x);\n}\n\nfunction valid(x) {\n  return pseudo(':valid', x);\n}\n\nfunction visited(x) {\n  return pseudo(':visited', x);\n}\n\n// parameterized pseudoclasses\nfunction dir(p, x) {\n  return pseudo(':dir(' + p + ')', x);\n}\nfunction lang(p, x) {\n  return pseudo(':lang(' + p + ')', x);\n}\nfunction not(p, x) {\n  // should this be a plugin?\n  var selector = p.split(',').map(function (x) {\n    return x.trim();\n  }).map(function (x) {\n    return ':not(' + x + ')';\n  });\n  if (selector.length === 1) {\n    return pseudo(':not(' + p + ')', x);\n  }\n  return select(selector.join(''), x);\n}\nfunction nthChild(p, x) {\n  return pseudo(':nth-child(' + p + ')', x);\n}\nfunction nthLastChild(p, x) {\n  return pseudo(':nth-last-child(' + p + ')', x);\n}\nfunction nthLastOfType(p, x) {\n  return pseudo(':nth-last-of-type(' + p + ')', x);\n}\nfunction nthOfType(p, x) {\n  return pseudo(':nth-of-type(' + p + ')', x);\n}\n\n// pseudoelements\nfunction after(x) {\n  return pseudo('::after', x);\n}\nfunction before(x) {\n  return pseudo('::before', x);\n}\nfunction firstLetter(x) {\n  return pseudo('::first-letter', x);\n}\nfunction firstLine(x) {\n  return pseudo('::first-line', x);\n}\nfunction selection(x) {\n  return pseudo('::selection', x);\n}\nfunction backdrop(x) {\n  return pseudo('::backdrop', x);\n}\nfunction placeholder(x) {\n  // https://github.com/threepointone/glamor/issues/14\n  return css({ '::placeholder': x });\n}\n\n/*** helpers for web components ***/\n// https://github.com/threepointone/glamor/issues/16\n\nfunction cssFor() {\n  for (var _len7 = arguments.length, rules = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n    rules[_key7] = arguments[_key7];\n  }\n\n  rules = (0, _clean2.default)(rules);\n  return rules ? rules.map(function (r) {\n    var style = { label: [] };\n    build(style, { src: r }); // mutative! but worth it.\n    return deconstructedStyleToCSS(hashify(style), deconstruct(style)).join('');\n  }).join('') : '';\n}\n\nfunction attribsFor() {\n  for (var _len8 = arguments.length, rules = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n    rules[_key8] = arguments[_key8];\n  }\n\n  rules = (0, _clean2.default)(rules);\n  var htmlAttributes = rules ? rules.map(function (rule) {\n    idFor(rule); // throwaway check for rule\n    var key = Object.keys(rule)[0],\n        value = rule[key];\n    return key + '=\"' + (value || '') + '\"';\n  }).join(' ') : '';\n\n  return htmlAttributes;\n}","/** Virtual DOM Node */\nexport function VNode() {}\n","/** Global options\n *\t@public\n *\t@namespace options {Object}\n */\nexport default {\n\n\t/** If `true`, `prop` changes trigger synchronous component updates.\n\t *\t@name syncComponentUpdates\n\t *\t@type Boolean\n\t *\t@default true\n\t */\n\t//syncComponentUpdates: true,\n\n\t/** Processes all created VNodes.\n\t *\t@param {VNode} vnode\tA newly-created VNode to normalize/process\n\t */\n\t//vnode(vnode) { }\n\n\t/** Hook invoked after a component is mounted. */\n\t// afterMount(component) { }\n\n\t/** Hook invoked after the DOM is updated with a component's latest render. */\n\t// afterUpdate(component) { }\n\n\t/** Hook invoked immediately before a component is unmounted. */\n\t// beforeUnmount(component) { }\n};\n","import { VNode } from './vnode';\nimport options from './options';\n\n\nconst stack = [];\n\nconst EMPTY_CHILDREN = [];\n\n/**\n * JSX/hyperscript reviver.\n * @see http://jasonformat.com/wtf-is-jsx\n * Benchmarks: https://esbench.com/bench/57ee8f8e330ab09900a1a1a0\n *\n * Note: this is exported as both `h()` and `createElement()` for compatibility reasons.\n *\n * Creates a VNode (virtual DOM element). A tree of VNodes can be used as a lightweight representation\n * of the structure of a DOM tree. This structure can be realized by recursively comparing it against\n * the current _actual_ DOM structure, and applying only the differences.\n *\n * `h()`/`createElement()` accepts an element name, a list of attributes/props,\n * and optionally children to append to the element.\n *\n * @example The following DOM tree\n *\n * `<div id=\"foo\" name=\"bar\">Hello!</div>`\n *\n * can be constructed using this function as:\n *\n * `h('div', { id: 'foo', name : 'bar' }, 'Hello!');`\n *\n * @param {string} nodeName\tAn element name. Ex: `div`, `a`, `span`, etc.\n * @param {Object} attributes\tAny attributes/props to set on the created element.\n * @param rest\t\t\tAdditional arguments are taken to be children to append. Can be infinitely nested Arrays.\n *\n * @public\n */\nexport function h(nodeName, attributes) {\n\tlet children=EMPTY_CHILDREN, lastSimple, child, simple, i;\n\tfor (i=arguments.length; i-- > 2; ) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children!=null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop!==undefined) {\n\t\t\tfor (i=child.length; i--; ) stack.push(child[i]);\n\t\t}\n\t\telse {\n\t\t\tif (typeof child==='boolean') child = null;\n\n\t\t\tif ((simple = typeof nodeName!=='function')) {\n\t\t\t\tif (child==null) child = '';\n\t\t\t\telse if (typeof child==='number') child = String(child);\n\t\t\t\telse if (typeof child!=='string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length-1] += child;\n\t\t\t}\n\t\t\telse if (children===EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tlet p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes==null ? undefined : attributes;\n\tp.key = attributes==null ? undefined : attributes.key;\n\n\t// if a \"vnode hook\" is defined, pass every created VNode to it\n\tif (options.vnode!==undefined) options.vnode(p);\n\n\treturn p;\n}\n","/**\n *  Copy all properties from `props` onto `obj`.\n *  @param {Object} obj\t\tObject onto which properties should be copied.\n *  @param {Object} props\tObject from which to copy properties.\n *  @returns obj\n *  @private\n */\nexport function extend(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn obj;\n}\n\n/**\n * Call a function asynchronously, as soon as possible. Makes\n * use of HTML Promise to schedule the callback if available,\n * otherwise falling back to `setTimeout` (mainly for IE<11).\n *\n * @param {Function} callback\n */\nexport const defer = typeof Promise=='function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n","import { extend } from './util';\nimport { h } from './h';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {VNode} vnode\t\tThe virtual DOM element to clone\n * @param {Object} props\tAttributes/props to add when cloning\n * @param {VNode} rest\t\tAny additional arguments will be used as replacement children.\n */\nexport function cloneElement(vnode, props) {\n\treturn h(\n\t\tvnode.nodeName,\n\t\textend(extend({}, vnode.attributes), props),\n\t\targuments.length>2 ? [].slice.call(arguments, 2) : vnode.children\n\t);\n}\n","// render modes\n\nexport const NO_RENDER = 0;\nexport const SYNC_RENDER = 1;\nexport const FORCE_RENDER = 2;\nexport const ASYNC_RENDER = 3;\n\n\nexport const ATTR_KEY = '__preactattr_';\n\n// DOM properties that should NOT have \"px\" added when numeric\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\n","import options from './options';\nimport { defer } from './util';\nimport { renderComponent } from './vdom/component';\n\n/** Managed queue of dirty components to be re-rendered */\n\nlet items = [];\n\nexport function enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component)==1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nexport function rerender() {\n\tlet p, list = items;\n\titems = [];\n\twhile ( (p = list.pop()) ) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n","import { extend } from '../util';\n\n\n/**\n * Check if two nodes are equivalent.\n *\n * @param {Node} node\t\t\tDOM Node to compare\n * @param {VNode} vnode\t\t\tVirtual DOM node to compare\n * @param {boolean} [hydrating=false]\tIf true, ignores component constructors when comparing.\n * @private\n */\nexport function isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode==='string' || typeof vnode==='number') {\n\t\treturn node.splitText!==undefined;\n\t}\n\tif (typeof vnode.nodeName==='string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor===vnode.nodeName;\n}\n\n\n/**\n * Check if an Element has a given nodeName, case-insensitively.\n *\n * @param {Element} node\tA DOM Element to inspect the name of.\n * @param {String} nodeName\tUnnormalized name to compare against.\n */\nexport function isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName===nodeName || node.nodeName.toLowerCase()===nodeName.toLowerCase();\n}\n\n\n/**\n * Reconstruct Component-style `props` from a VNode.\n * Ensures default/fallback values from `defaultProps`:\n * Own-properties of `defaultProps` not present in `vnode.attributes` are added.\n *\n * @param {VNode} vnode\n * @returns {Object} props\n */\nexport function getNodeProps(vnode) {\n\tlet props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tlet defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps!==undefined) {\n\t\tfor (let i in defaultProps) {\n\t\t\tif (props[i]===undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n","import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n\n/** Create an element with the given nodeName.\n *\t@param {String} nodeName\n *\t@param {Boolean} [isSvg=false]\tIf `true`, creates an element within the SVG namespace.\n *\t@returns {Element} node\n */\nexport function createNode(nodeName, isSvg) {\n\tlet node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\n\n/** Remove a child node from its parent if attached.\n *\t@param {Element} node\t\tThe node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n\n/** Set a named attribute on the given Node, with special behavior for some names and event handlers.\n *\tIf `value` is `null`, the attribute/handler will be removed.\n *\t@param {Element} node\tAn element to mutate\n *\t@param {string} name\tThe name/key to set, such as an event or attribute name\n *\t@param {any} old\tThe last value that was set for this name/node pair\n *\t@param {any} value\tAn attribute value, such as a function to be used as an event handler\n *\t@param {Boolean} isSvg\tAre we currently diffing inside an svg?\n *\t@private\n */\nexport function setAccessor(node, name, old, value, isSvg) {\n\tif (name==='className') name = 'class';\n\n\n\tif (name==='key') {\n\t\t// ignore\n\t}\n\telse if (name==='ref') {\n\t\tif (old) old(null);\n\t\tif (value) value(node);\n\t}\n\telse if (name==='class' && !isSvg) {\n\t\tnode.className = value || '';\n\t}\n\telse if (name==='style') {\n\t\tif (!value || typeof value==='string' || typeof old==='string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value==='object') {\n\t\t\tif (typeof old!=='string') {\n\t\t\t\tfor (let i in old) if (!(i in value)) node.style[i] = '';\n\t\t\t}\n\t\t\tfor (let i in value) {\n\t\t\t\tnode.style[i] = typeof value[i]==='number' && IS_NON_DIMENSIONAL.test(i)===false ? (value[i]+'px') : value[i];\n\t\t\t}\n\t\t}\n\t}\n\telse if (name==='dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t}\n\telse if (name[0]=='o' && name[1]=='n') {\n\t\tlet useCapture = name !== (name=name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\telse {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t}\n\telse if (name!=='list' && name!=='type' && !isSvg && name in node) {\n\t\tsetProperty(node, name, value==null ? '' : value);\n\t\tif (value==null || value===false) node.removeAttribute(name);\n\t}\n\telse {\n\t\tlet ns = isSvg && (name !== (name = name.replace(/^xlink:?/, '')));\n\t\tif (value==null || value===false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());\n\t\t\telse node.removeAttribute(name);\n\t\t}\n\t\telse if (typeof value!=='function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);\n\t\t\telse node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\n\n/** Attempt to set a DOM property to the given value.\n *\tIE & FF throw for certain property-value combinations.\n */\nfunction setProperty(node, name, value) {\n\ttry {\n\t\tnode[name] = value;\n\t} catch (e) { }\n}\n\n\n/** Proxy an event to hooked event handlers\n *\t@private\n */\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n","import { ATTR_KEY } from '../constants';\nimport { isSameNodeType, isNamedNode } from './index';\nimport { buildComponentFromVNode } from './component';\nimport { createNode, setAccessor } from '../dom/index';\nimport { unmountComponent } from './component';\nimport options from '../options';\nimport { removeNode } from '../dom/index';\n\n/** Queue of components that have been mounted and are awaiting componentDidMount */\nexport const mounts = [];\n\n/** Diff recursion count, used to track the end of the diff cycle. */\nexport let diffLevel = 0;\n\n/** Global flag indicating if the diff is currently within an SVG */\nlet isSvgMode = false;\n\n/** Global flag indicating if the diff is performing hydration */\nlet hydrating = false;\n\n/** Invoke queued componentDidMount lifecycle methods */\nexport function flushMounts() {\n\tlet c;\n\twhile ((c=mounts.pop())) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\n\n/** Apply differences in a given vnode (and it's deep children) to a real DOM Node.\n *\t@param {Element} [dom=null]\t\tA DOM node to mutate into the shape of the `vnode`\n *\t@param {VNode} vnode\t\t\tA VNode (with descendants forming a tree) representing the desired DOM structure\n *\t@returns {Element} dom\t\t\tThe created/mutated element\n *\t@private\n */\nexport function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\t// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)\n\tif (!diffLevel++) {\n\t\t// when first starting the diff, check if we're diffing an SVG or within an SVG\n\t\tisSvgMode = parent!=null && parent.ownerSVGElement!==undefined;\n\n\t\t// hydration is indicated by the existing element to be diffed not having a prop cache\n\t\thydrating = dom!=null && !(ATTR_KEY in dom);\n\t}\n\n\tlet ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\t// append the element if its a new parent\n\tif (parent && ret.parentNode!==parent) parent.appendChild(ret);\n\n\t// diffLevel being reduced to 0 means we're exiting the diff\n\tif (!--diffLevel) {\n\t\thydrating = false;\n\t\t// invoke queued componentDidMount lifecycle methods\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\n\n/** Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing. */\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tlet out = dom,\n\t\tprevSvgMode = isSvgMode;\n\n\t// empty values (null, undefined, booleans) render as empty Text nodes\n\tif (vnode==null || typeof vnode==='boolean') vnode = '';\n\n\n\t// Fast case: Strings & Numbers create/update Text nodes.\n\tif (typeof vnode==='string' || typeof vnode==='number') {\n\n\t\t// update if it's already a Text node:\n\t\tif (dom && dom.splitText!==undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\t/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */\n\t\t\tif (dom.nodeValue!=vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// it wasn't a Text node: replace it with one and recycle the old Element\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout[ATTR_KEY] = true;\n\n\t\treturn out;\n\t}\n\n\n\t// If the VNode represents a Component, perform a component diff:\n\tlet vnodeName = vnode.nodeName;\n\tif (typeof vnodeName==='function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tisSvgMode = vnodeName==='svg' ? true : vnodeName==='foreignObject' ? false : isSvgMode;\n\n\n\t// If there's no existing element or it's the wrong type, create a new one:\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\t// move children into the replacement node\n\t\t\twhile (dom.firstChild) out.appendChild(dom.firstChild);\n\n\t\t\t// if the previous Element was mounted into the DOM, replace it inline\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\t// recycle the old element (skips non-Element node types)\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\n\tlet fc = out.firstChild,\n\t\tprops = out[ATTR_KEY],\n\t\tvchildren = vnode.children;\n\n\tif (props==null) {\n\t\tprops = out[ATTR_KEY] = {};\n\t\tfor (let a=out.attributes, i=a.length; i--; ) props[a[i].name] = a[i].value;\n\t}\n\n\t// Optimization: fast-path for elements containing a single TextNode:\n\tif (!hydrating && vchildren && vchildren.length===1 && typeof vchildren[0]==='string' && fc!=null && fc.splitText!==undefined && fc.nextSibling==null) {\n\t\tif (fc.nodeValue!=vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t}\n\t// otherwise, if there are existing or new children, diff them:\n\telse if (vchildren && vchildren.length || fc!=null) {\n\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML!=null);\n\t}\n\n\n\t// Apply attributes/props from VNode to the DOM Element:\n\tdiffAttributes(out, vnode.attributes, props);\n\n\n\t// restore previous SVG mode: (in case we're exiting an SVG namespace)\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\n\n/** Apply child and attribute changes between a VNode and a DOM Node to the DOM.\n *\t@param {Element} dom\t\t\tElement whose children should be compared & mutated\n *\t@param {Array} vchildren\t\tArray of VNodes to compare to `dom.childNodes`\n *\t@param {Object} context\t\t\tImplicitly descendant context object (from most recent `getChildContext()`)\n *\t@param {Boolean} mountAll\n *\t@param {Boolean} isHydrating\tIf `true`, consumes externally created elements similar to hydration\n */\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tlet originalChildren = dom.childNodes,\n\t\tchildren = [],\n\t\tkeyed = {},\n\t\tkeyedLen = 0,\n\t\tmin = 0,\n\t\tlen = originalChildren.length,\n\t\tchildrenLen = 0,\n\t\tvlen = vchildren ? vchildren.length : 0,\n\t\tj, c, f, vchild, child;\n\n\t// Build up a map of keyed children and an Array of unkeyed children:\n\tif (len!==0) {\n\t\tfor (let i=0; i<len; i++) {\n\t\t\tlet child = originalChildren[i],\n\t\t\t\tprops = child[ATTR_KEY],\n\t\t\t\tkey = vlen && props ? child._component ? child._component.__key : props.key : null;\n\t\t\tif (key!=null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = child;\n\t\t\t}\n\t\t\telse if (props || (child.splitText!==undefined ? (isHydrating ? child.nodeValue.trim() : true) : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen!==0) {\n\t\tfor (let i=0; i<vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\t// attempt to find a node based on key matching\n\t\t\tlet key = vchild.key;\n\t\t\tif (key!=null) {\n\t\t\t\tif (keyedLen && keyed[key]!==undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt to pluck a node of the same type from the existing children\n\t\t\telse if (!child && min<childrenLen) {\n\t\t\t\tfor (j=min; j<childrenLen; j++) {\n\t\t\t\t\tif (children[j]!==undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\tif (j===childrenLen-1) childrenLen--;\n\t\t\t\t\t\tif (j===min) min++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// morph the matched/found/created DOM child to match vchild (deep)\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child!==dom && child!==f) {\n\t\t\t\tif (f==null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t}\n\t\t\t\telse if (child===f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// remove unused keyed children:\n\tif (keyedLen) {\n\t\tfor (let i in keyed) if (keyed[i]!==undefined) recollectNodeTree(keyed[i], false);\n\t}\n\n\t// remove orphaned unkeyed children:\n\twhile (min<=childrenLen) {\n\t\tif ((child = children[childrenLen--])!==undefined) recollectNodeTree(child, false);\n\t}\n}\n\n\n\n/** Recursively recycle (or just unmount) a node and its descendants.\n *\t@param {Node} node\t\t\t\t\t\tDOM node to start unmount/removal from\n *\t@param {Boolean} [unmountOnly=false]\tIf `true`, only triggers unmount lifecycle, skips removal\n */\nexport function recollectNodeTree(node, unmountOnly) {\n\tlet component = node._component;\n\tif (component) {\n\t\t// if node is owned by a Component, unmount that component (ends up recursing back here)\n\t\tunmountComponent(component);\n\t}\n\telse {\n\t\t// If the node's VNode had a ref function, invoke it with null here.\n\t\t// (this is part of the React spec, and smart for unsetting references)\n\t\tif (node[ATTR_KEY]!=null && node[ATTR_KEY].ref) node[ATTR_KEY].ref(null);\n\n\t\tif (unmountOnly===false || node[ATTR_KEY]==null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\n\n/** Recollect/unmount all children.\n *\t- we use .lastChild here because it causes less reflow than .firstChild\n *\t- it's also cheaper than accessing the .childNodes Live NodeList\n */\nexport function removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tlet next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\n\n/** Apply differences in attributes from a VNode to the given DOM Element.\n *\t@param {Element} dom\t\tElement with attributes to diff `attrs` against\n *\t@param {Object} attrs\t\tThe desired end-state key-value attribute pairs\n *\t@param {Object} old\t\t\tCurrent/previous attributes (from previous VNode or element's prop cache)\n */\nfunction diffAttributes(dom, attrs, old) {\n\tlet name;\n\n\t// remove attributes no longer present on the vnode by setting them to undefined\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name]!=null) && old[name]!=null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\t// add new & update changed attributes\n\tfor (name in attrs) {\n\t\tif (name!=='children' && name!=='innerHTML' && (!(name in old) || attrs[name]!==(name==='value' || name==='checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n","import { Component } from '../component';\n\n/** Retains a pool of Components for re-use, keyed on component name.\n *\tNote: since component names are not unique or even necessarily available, these are primarily a form of sharding.\n *\t@private\n */\nconst components = {};\n\n\n/** Reclaim a component for later re-use by the recycler. */\nexport function collectComponent(component) {\n\tlet name = component.constructor.name;\n\t(components[name] || (components[name] = [])).push(component);\n}\n\n\n/** Create a component. Normalizes differences between PFC's and classful Components. */\nexport function createComponent(Ctor, props, context) {\n\tlet list = components[Ctor.name],\n\t\tinst;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t}\n\telse {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\n\tif (list) {\n\t\tfor (let i=list.length; i--; ) {\n\t\t\tif (list[i].constructor===Ctor) {\n\t\t\t\tinst.nextBase = list[i].nextBase;\n\t\t\t\tlist.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn inst;\n}\n\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n","import { SYNC_RENDER, NO_RENDER, FORCE_RENDER, ASYNC_RENDER, ATTR_KEY } from '../constants';\nimport options from '../options';\nimport { extend } from '../util';\nimport { enqueueRender } from '../render-queue';\nimport { getNodeProps } from './index';\nimport { diff, mounts, diffLevel, flushMounts, recollectNodeTree, removeChildren } from './diff';\nimport { createComponent, collectComponent } from './component-recycler';\nimport { removeNode } from '../dom/index';\n\n/** Set a component's `props` (generally derived from JSX attributes).\n *\t@param {Object} props\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.renderSync=false]\tIf `true` and {@link options.syncComponentUpdates} is `true`, triggers synchronous rendering.\n *\t@param {boolean} [opts.render=true]\t\t\tIf `false`, no render will be triggered.\n */\nexport function setComponentProps(component, props, opts, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tif ((component.__ref = props.ref)) delete props.ref;\n\tif ((component.__key = props.key)) delete props.key;\n\n\tif (!component.base || mountAll) {\n\t\tif (component.componentWillMount) component.componentWillMount();\n\t}\n\telse if (component.componentWillReceiveProps) {\n\t\tcomponent.componentWillReceiveProps(props, context);\n\t}\n\n\tif (context && context!==component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (opts!==NO_RENDER) {\n\t\tif (opts===SYNC_RENDER || options.syncComponentUpdates!==false || !component.base) {\n\t\t\trenderComponent(component, SYNC_RENDER, mountAll);\n\t\t}\n\t\telse {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tif (component.__ref) component.__ref(component);\n}\n\n\n\n/** Render a Component, triggering necessary lifecycle events and taking High-Order Components into account.\n *\t@param {Component} component\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.build=false]\t\tIf `true`, component will build and store a DOM node if not already associated with one.\n *\t@private\n */\nexport function renderComponent(component, opts, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tlet props = component.props,\n\t\tstate = component.state,\n\t\tcontext = component.context,\n\t\tpreviousProps = component.prevProps || props,\n\t\tpreviousState = component.prevState || state,\n\t\tpreviousContext = component.prevContext || context,\n\t\tisUpdate = component.base,\n\t\tnextBase = component.nextBase,\n\t\tinitialBase = isUpdate || nextBase,\n\t\tinitialChildComponent = component._component,\n\t\tskip = false,\n\t\trendered, inst, cbase;\n\n\t// if updating\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (opts!==FORCE_RENDER\n\t\t\t&& component.shouldComponentUpdate\n\t\t\t&& component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t}\n\t\telse if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\t// context to pass to the child, can be updated via (grand-)parent component\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tlet childComponent = rendered && rendered.nodeName,\n\t\t\ttoUnmount, base;\n\n\t\tif (typeof childComponent==='function') {\n\t\t\t// set up high order component link\n\n\t\t\tlet childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor===childComponent && childProps.key==inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, SYNC_RENDER, context, false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, NO_RENDER, context, false);\n\t\t\t\trenderComponent(inst, SYNC_RENDER, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t}\n\t\telse {\n\t\t\tcbase = initialBase;\n\n\t\t\t// destroy high order component link\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || opts===SYNC_RENDER) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base!==initialBase && inst!==initialChildComponent) {\n\t\t\tlet baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base!==baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tlet componentRef = component,\n\t\t\t\tt = component;\n\t\t\twhile ((t=t._parentComponent)) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.unshift(component);\n\t}\n\telse if (!skip) {\n\t\t// Ensure that pending componentDidMount() hooks of child components\n\t\t// are called before the componentDidUpdate() hook in the parent.\n\t\t// Note: disabled as it causes duplicate hooks, see https://github.com/developit/preact/issues/750\n\t\t// flushMounts();\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, previousContext);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\tif (component._renderCallbacks!=null) {\n\t\twhile (component._renderCallbacks.length) component._renderCallbacks.pop().call(component);\n\t}\n\n\tif (!diffLevel && !isChild) flushMounts();\n}\n\n\n\n/** Apply the Component referenced by a VNode to the DOM.\n *\t@param {Element} dom\tThe DOM node to mutate\n *\t@param {VNode} vnode\tA Component-referencing VNode\n *\t@returns {Element} dom\tThe created/mutated element\n *\t@private\n */\nexport function buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tlet c = dom && dom._component,\n\t\toriginalComponent = c,\n\t\toldDom = dom,\n\t\tisDirectOwner = c && dom._componentConstructor===vnode.nodeName,\n\t\tisOwner = isDirectOwner,\n\t\tprops = getNodeProps(vnode);\n\twhile (c && !isOwner && (c=c._parentComponent)) {\n\t\tisOwner = c.constructor===vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, ASYNC_RENDER, context, mountAll);\n\t\tdom = c.base;\n\t}\n\telse {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\t\t\t// passing dom/oldDom as nextBase will recycle it if unused, so bypass recycling on L229:\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, SYNC_RENDER, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom!==oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n\n\n/** Remove a component from the DOM and recycle it.\n *\t@param {Component} component\tThe Component instance to unmount\n *\t@private\n */\nexport function unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tlet base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\t// recursively tear down & recollect high-order component children:\n\tlet inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t}\n\telse if (base) {\n\t\tif (base[ATTR_KEY] && base[ATTR_KEY].ref) base[ATTR_KEY].ref(null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\tcollectComponent(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tif (component.__ref) component.__ref(null);\n}\n","import { FORCE_RENDER } from './constants';\nimport { extend } from './util';\nimport { renderComponent } from './vdom/component';\nimport { enqueueRender } from './render-queue';\n\n/** Base Component class.\n *\tProvides `setState()` and `forceUpdate()`, which trigger rendering.\n *\t@public\n *\n *\t@example\n *\tclass MyFoo extends Component {\n *\t\trender(props, state) {\n *\t\t\treturn <div />;\n *\t\t}\n *\t}\n */\nexport function Component(props, context) {\n\tthis._dirty = true;\n\n\t/** @public\n\t *\t@type {object}\n\t */\n\tthis.context = context;\n\n\t/** @public\n\t *\t@type {object}\n\t */\n\tthis.props = props;\n\n\t/** @public\n\t *\t@type {object}\n\t */\n\tthis.state = this.state || {};\n}\n\n\nextend(Component.prototype, {\n\n\t/** Returns a `boolean` indicating if the component should re-render when receiving the given `props` and `state`.\n\t *\t@param {object} nextProps\n\t *\t@param {object} nextState\n\t *\t@param {object} nextContext\n\t *\t@returns {Boolean} should the component re-render\n\t *\t@name shouldComponentUpdate\n\t *\t@function\n\t */\n\n\n\t/** Update component state by copying properties from `state` to `this.state`.\n\t *\t@param {object} state\t\tA hash of state properties to update with new values\n\t *\t@param {function} callback\tA function to be called once component state is updated\n\t */\n\tsetState(state, callback) {\n\t\tlet s = this.state;\n\t\tif (!this.prevState) this.prevState = extend({}, s);\n\t\textend(s, typeof state==='function' ? state(s, this.props) : state);\n\t\tif (callback) (this._renderCallbacks = (this._renderCallbacks || [])).push(callback);\n\t\tenqueueRender(this);\n\t},\n\n\n\t/** Immediately perform a synchronous re-render of the component.\n\t *\t@param {function} callback\t\tA function to be called after component is re-rendered.\n\t *\t@private\n\t */\n\tforceUpdate(callback) {\n\t\tif (callback) (this._renderCallbacks = (this._renderCallbacks || [])).push(callback);\n\t\trenderComponent(this, FORCE_RENDER);\n\t},\n\n\n\t/** Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n\t *\tVirtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n\t *\t@param {object} props\t\tProps (eg: JSX attributes) received from parent element/component\n\t *\t@param {object} state\t\tThe component's current state\n\t *\t@param {object} context\t\tContext object (if a parent component has provided context)\n\t *\t@returns VNode\n\t */\n\trender() {}\n\n});\n","import { diff } from './vdom/diff';\n\n/** Render JSX into a `parent` Element.\n *\t@param {VNode} vnode\t\tA (JSX) VNode to render\n *\t@param {Element} parent\t\tDOM element to render into\n *\t@param {Element} [merge]\tAttempt to re-use an existing DOM tree rooted at `merge`\n *\t@public\n *\n *\t@example\n *\t// render a div into <body>:\n *\trender(<div id=\"hello\">hello!</div>, document.body);\n *\n *\t@example\n *\t// render a \"Thing\" component into #foo:\n *\tconst Thing = ({ name }) => <span>{ name }</span>;\n *\trender(<Thing name=\"one\" />, document.querySelector('#foo'));\n */\nexport function render(vnode, parent, merge) {\n\treturn diff(merge, vnode, {}, false, parent, false);\n}\n","import { h, h as createElement } from './h';\nimport { cloneElement } from './clone-element';\nimport { Component } from './component';\nimport { render } from './render';\nimport { rerender } from './render-queue';\nimport options from './options';\n\nexport default {\n\th,\n\tcreateElement,\n\tcloneElement,\n\tComponent,\n\trender,\n\trerender,\n\toptions\n};\n\nexport {\n\th,\n\tcreateElement,\n\tcloneElement,\n\tComponent,\n\trender,\n\trerender,\n\toptions\n};\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport { h, Component } from 'preact';\nimport { css } from 'glamor';\nimport { SurfaceInfoStrict, StyleOptions } from '../types';\n\n// Internal Props\ninterface SurfaceProps extends SurfaceInfoStrict {\n  visible: boolean;\n  registerSurface: (name: string, tab: string, surface: SurfaceComponent)\n    => void;\n}\n\n/**\n * A surface is container for visualizations and other rendered thigns.\n * It consists of a containing DOM Element, a label and an empty drawArea.\n */\nexport class SurfaceComponent extends Component<SurfaceProps> {\n\n  static defaultStyles: Partial<StyleOptions> = {\n    maxWidth: '550px',\n    maxHeight: '580px',\n    height: 'auto',\n    width: 'auto',\n  };\n\n  container: HTMLElement;\n  label: HTMLElement;\n  drawArea: HTMLElement;\n\n  componentDidMount() {\n    const { name, tab } = this.props;\n    this.props.registerSurface(name, tab, this);\n  }\n\n  componentDidUpdate() {\n    // Prevent re-rendering of this component as it\n    // is primarily controlled outside of this class\n    return false;\n  }\n\n  render() {\n    const { name, visible, styles } = this.props;\n    const finalStyles = {\n      ...SurfaceComponent.defaultStyles,\n      ...styles,\n    };\n\n    const { width, height, } = finalStyles;\n    let { maxHeight, maxWidth, } = finalStyles;\n    maxHeight = height === SurfaceComponent.defaultStyles.height ?\n      maxHeight : height;\n    maxWidth = width === SurfaceComponent.defaultStyles.width ?\n      maxWidth : width;\n\n    const surfaceStyle = css({\n      display: visible ? 'block' : 'none',\n      backgroundColor: 'white',\n      marginTop: '10px',\n      marginBottom: '10px',\n      boxShadow: '0 0 6px -3px #777',\n      padding: '10px !important',\n      height,\n      width,\n      maxHeight,\n      maxWidth,\n      overflow: 'auto',\n    });\n\n    const labelStyle = css({\n      backgroundColor: 'white',\n      boxSizing: 'border-box',\n      borderBottom: '1px solid #357EDD',\n      lineHeight: '2em',\n      marginBottom: '20px',\n      fontWeight: '600',\n      textAlign: 'center',\n    });\n\n    const drawAreaStyle = css({\n      boxSizing: 'border-box',\n    });\n\n    return (\n      <div\n        className={`${surfaceStyle} tf-surface`}\n        ref={(r) => this.container = r}\n        data-visible={visible}\n      >\n        <div className={`${labelStyle} tf-label`} ref={(r) => this.label = r}>\n          {name}\n        </div>\n\n        <div\n          className={`${drawAreaStyle} tf-draw-area`}\n          ref={(r) => this.drawArea = r}\n        />\n      </div>\n    );\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport { h, Component } from 'preact';\nimport { css } from 'glamor';\n\ninterface TabsProps {\n  tabNames: string[];\n  activeTab: string | null;\n  handleClick: (tabName: string) => void;\n}\n\n/**\n * Renders a container for tab links\n */\nexport class Tabs extends Component<TabsProps> {\n  render() {\n    const { tabNames, activeTab, handleClick } = this.props;\n\n    const tabs = tabNames.length > 0 ?\n      tabNames.map((name) => (\n        <Tab key={name} id={name}\n          handleClick={handleClick}\n          isActive={name === activeTab}\n        >\n          {name}\n        </Tab>\n      ))\n      : null;\n\n    const tabStyle = css({\n      overflowX: 'scroll',\n      overflowY: 'hidden',\n      whiteSpace: 'nowrap',\n      borderBottomStyle: 'solid',\n      borderBottomWidth: '1px',\n      borderColor: '#eee',\n      paddingBottom: '1rem',\n      marginTop: '1rem',\n    });\n\n    return (\n      <div className={`${tabStyle} visor-tabs`}>\n        {tabs}\n      </div>\n    );\n  }\n}\n\ninterface TabProps {\n  id: string;\n  isActive: boolean;\n  handleClick: (tabName: string) => void;\n}\n\n/**\n * A link representing a tab. Note that the component does not contain the\n * tab content\n */\nclass Tab extends Component<TabProps> {\n\n  render() {\n    const { children, isActive, handleClick, id } = this.props;\n\n    const tabStyle = css({\n      borderBottomColor: isActive ? '#357EDD' : '#AAAAAA',\n      borderBottomWidth: '1px',\n      borderBottomStyle: 'solid',\n      cursor: 'pointer',\n      ':hover': {\n        color: '#357EDD'\n      },\n      display: 'inline-block',\n      marginRight: '1rem',\n      padding: '.5rem',\n      fontSize: '1rem',\n      fontWeight: 'bold',\n    });\n\n    return (\n      <a className={`${tabStyle} tf-tab`}\n        data-isactive={isActive}\n        onClick={() => handleClick(id)}\n      >\n        {children}\n      </a>\n    );\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport { h, Component, render } from 'preact';\nimport { css } from 'glamor';\n\nimport { SurfaceComponent } from './surface';\nimport { Tabs } from './tabs';\n\nimport { SurfaceInfoStrict } from '../types';\n\ninterface VisorProps {\n  // An ordered list of surfaces to render. These are specified by SurfaceInfo\n  // objects that allow configuration of the surface. The actual surface\n  // instance is managed by the visor.\n  surfaceList: SurfaceInfoStrict[];\n  // Whether to inialize the visor to the open or closed state. Optional.\n  startOpen?: boolean;\n  // A ref handler\n  ref?: (r: VisorComponent) => void;\n}\n\ninterface VisorState {\n  isOpen: boolean;\n  isFullscreen: boolean;\n  activeTab: string | null;\n  tabs: Set<string>;\n}\n\n/**\n * The Visor is a component that displays and manages 'Tabs' and 'Surfaces'.\n *\n * It is meant to exist as a singleton component on a given page and is thus\n * accessed by a visor() function that exposes a single instance of this\n * component via an imperative API (i.e. its implementation as a (p)react\n * component is an internal implementation detail.\n *\n * Following that, and somewhat unlike a typical react component, it does allow\n * for imperative calls to that instance to modify internal state. Any state\n * that needs to be serialized or persisted should be lifted to props.\n */\nexport class VisorComponent extends Component<VisorProps, VisorState> {\n\n  /**\n   * Helper function to render the component to the DOM.\n   *\n   * Note that although the visor has a parent element, it rendered via absolute\n   * positioning and is thus taken out of regular document flow.\n   *\n   * @param parent A DOM element\n   * @param replaceNode The element that re-rendering this component would\n   *                    replace. Usually null initially and will be returned by\n   *                    this function after the first render.\n   * @param props Initial visor props\n   */\n  static render(\n    parent: Element,\n    replaceNode: Element,\n    props: VisorProps): Element {\n    return render(\n      <VisorComponent\n        {...props}\n      />,\n      parent,\n      replaceNode\n    );\n  }\n\n  // Lookup dictionary for Surfaces\n  private surfaces: Map<string, SurfaceComponent>;\n\n  constructor(props: VisorProps) {\n    super(props);\n    this.surfaces = new Map<string, SurfaceComponent>();\n    const startOpen = props.startOpen == null ? true : props.startOpen;\n\n    this.state = {\n      isOpen: startOpen,\n      isFullscreen: false,\n      activeTab: null,\n      tabs: new Set<string>()\n    };\n\n    this.keyHandler = this.keyHandler.bind(this);\n  }\n\n  // These public methods are exposed via an imperative interface\n\n  close() {\n    this.setState({ isOpen: false });\n  }\n\n  open() {\n    this.setState({ isOpen: true });\n  }\n\n  toggle() {\n    this.setState({ isOpen: !this.state.isOpen });\n  }\n\n  toggleFullScreen() {\n    this.setState({ isFullscreen: !this.state.isFullscreen });\n  }\n\n  isOpen(): boolean {\n    return this.state.isOpen;\n  }\n\n  isFullscreen(): boolean {\n    return this.state.isFullscreen;\n  }\n\n  getSurface(label: string, tab: string) {\n    const surfaceId = this.surfaceId(label, tab);\n    let surface: SurfaceComponent;\n\n    if (this.surfaces.has(surfaceId)) {\n      surface = this.surfaces.get(surfaceId);\n    } else {\n      throw Error(`Surface not found with id: ${surfaceId}`);\n    }\n\n    return {\n      container: surface.container,\n      label: surface.label,\n      drawArea: surface.drawArea,\n    };\n  }\n\n  bindKeys() {\n    document.addEventListener('keydown', this.keyHandler, false);\n  }\n\n  unbindKeys() {\n    document.removeEventListener('keydown', this.keyHandler);\n  }\n\n  private surfaceId(label: string, tab: string): string {\n    return label + tab;\n  }\n\n  private setTabs(surfaceList: SurfaceInfoStrict[]) {\n    // Check if we have new tabs\n    const nextTabs = surfaceList.map(s => s.tab);\n    const tabs = this.state.tabs;\n    let newActiveTab;\n    for (const tab of nextTabs) {\n      if (!tabs.has(tab)) {\n        tabs.add(tab);\n        newActiveTab = tab;\n      }\n    }\n\n    if (newActiveTab != null) {\n      this.setState({\n        tabs,\n        activeTab: newActiveTab,\n      });\n    }\n  }\n\n  private getTabs(): Set<string> {\n    return this.state.tabs;\n  }\n\n  // Event Handlers\n\n  private registerSurface(name: string, tab: string,\n    surface: SurfaceComponent) {\n    const surfaceId = this.surfaceId(name, tab);\n    this.surfaces.set(surfaceId, surface);\n  }\n\n  private keyHandler(event: KeyboardEvent) {\n    const BACKTICK_KEY = 192;\n\n    if (event.keyCode === BACKTICK_KEY) {\n      if (event.shiftKey) {\n        this.toggleFullScreen();\n      } else {\n        this.toggle();\n      }\n    }\n  }\n\n  private setActiveTab(tab: string) {\n    this.setState({ activeTab: tab });\n  }\n\n  // Lifecycle Methods\n\n  componentDidMount() {\n    this.bindKeys();\n  }\n\n  componentWillMount() {\n    this.setTabs(this.props.surfaceList);\n  }\n\n  componentWillReceiveProps(nextProps: VisorProps) {\n    this.setTabs(nextProps.surfaceList);\n  }\n\n  render() {\n    const { isOpen, isFullscreen, activeTab } = this.state;\n    const { surfaceList } = this.props;\n    const tabNames = Array.from(this.getTabs().values());\n\n    const SMALL_WIDTH = '550px';\n    const LARGE_WIDTH = '90vw';\n\n    const width = isFullscreen ? LARGE_WIDTH : SMALL_WIDTH;\n\n    const defaultStyles = css({\n      width,\n      height: '100%',\n      backgroundColor: '#fafafa',\n      boxSizing: 'border-box',\n      padding: '10px',\n      position: 'fixed',\n      top: '0px',\n      // tslint:disable-next-line\n      transition: `right 0.5s cubic-bezier(0.645, 0.045, 0.355, 1), width 0.5s cubic-bezier(0.645, 0.045, 0.355, 1)`,\n      boxShadow: '0 2px 5px rgba(0, 0, 0, 0.12), 0 2px 5px rgba(0, 0, 0, 0.24)',\n      overflow: 'auto',\n      fontFamily: 'sans-serif',\n      fontSize: '14px',\n      zIndex: 1000,\n    });\n\n    const openStyle = css({ right: '0' });\n\n    const closedStyle = css({ right: `calc(-${width} - 10px)` });\n    const position = isOpen ? openStyle : closedStyle;\n\n    // TODO. Add flex wrapping for surfaces\n    const surfacesContainerStyle = css({});\n\n    return (\n      <div\n        className={`${defaultStyles} ${position} visor`}\n        data-isopen={isOpen}\n        data-isfullscreen={isFullscreen}\n      >\n        {/* Controls  */}\n        <VisorControls\n          fullScreenHandler={this.toggleFullScreen.bind(this)}\n          closeHandler={this.close.bind(this)}\n          isFullScreen={isFullscreen}\n        />\n        {/* Tabs */}\n        <Tabs\n          tabNames={tabNames}\n          activeTab={activeTab}\n          handleClick={this.setActiveTab.bind(this)}\n        />\n\n        {/* Surfaces */}\n        {/* Note that we 'render' all surfaces so they can be added\n            to the DOM regardless of whether they are currently visible */}\n        <div className={`${surfacesContainerStyle} visor-surfaces`} >\n          {\n            surfaceList.map((surfaceInfo) => (\n              <SurfaceComponent\n                key={surfaceInfo.name + surfaceInfo.tab}\n                name={surfaceInfo.name}\n                tab={surfaceInfo.tab}\n                styles={surfaceInfo.styles}\n                registerSurface={this.registerSurface.bind(this)}\n                visible={activeTab === surfaceInfo.tab}\n              />\n            ))\n          }\n        </div>\n\n      </div >\n    );\n  }\n}\n\n//\n// Helper Components\n//\n\ninterface VisorControlProps {\n  fullScreenHandler: () => void;\n  closeHandler: () => void;\n  isFullScreen: boolean;\n}\n\nfunction VisorControls(props: VisorControlProps) {\n  const { isFullScreen, fullScreenHandler, closeHandler } = props;\n\n  const toolBarStyle = css({\n    display: 'flex',\n    backgroundColor: 'white',\n    border: '1px solid white',\n    padding: '6px',\n    paddingTop: '10px',\n    marginBottom: '10px',\n    borderRadius: '6px',\n    marginTop: '-16px'\n  });\n\n  const controlsButtonClass = css({\n    fontSize: '.875rem',\n    borderRadius: '.25rem',\n    paddingLeft: '1rem',\n    paddingRight: '1rem',\n    paddingTop: '.5rem',\n    paddingBottom: '.5rem',\n    textDecoration: 'none',\n    transition: 'color .15s ease-in',\n    color: '#111',\n  });\n\n  const floatRight = css({\n    marginLeft: 'auto',\n  });\n\n  return (\n    <div className={`${toolBarStyle} visor-controls`}>\n      <button className={`${controlsButtonClass}`} onClick={fullScreenHandler}>\n        {isFullScreen ? 'Minimize' : 'Maximize'}\n      </button>\n\n      <button\n        className={`${controlsButtonClass} ${floatRight}`}\n        onClick={closeHandler}\n      >\n        Hide\n      </button>\n    </div>\n  );\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {VisorComponent} from './components/visor';\nimport {SurfaceInfo, SurfaceInfoStrict} from './types';\n\nlet visorSingleton: Visor;\nconst DEFAULT_TAB = 'Visor';\nconst VISOR_CONTAINER_ID = 'tfjs-visor-container';\n\n/**\n * The primary interface to the visor is the visor() function.\n *\n * This returns a singleton instance of the Visor class. The\n * singleton object will be replaced if the visor is removed from the DOM for\n * some reason.\n *\n * ```js\n * // Show the visor\n * tfvis.visor();\n * ```\n *\n */\n/** @doc {heading: 'Visor & Surfaces'} */\nexport function visor(): Visor {\n  if (typeof document === 'undefined') {\n    throw new Error(\n        'No document defined. This library needs a browser/dom to work');\n  }\n\n  if (document.getElementById(VISOR_CONTAINER_ID) && visorSingleton != null) {\n    return visorSingleton;\n  }\n\n  // Create the container\n  let visorEl = document.getElementById(VISOR_CONTAINER_ID);\n\n  if (visorEl == null) {\n    visorEl = document.createElement('div');\n    visorEl.id = VISOR_CONTAINER_ID;\n    document.body.appendChild(visorEl);\n  }\n\n  let renderRoot: Element;\n  function renderVisor(\n      domNode: HTMLElement,\n      surfaceList: Map<string, SurfaceInfoStrict>): VisorComponent {\n    let visorInstance: VisorComponent = null;\n    renderRoot = VisorComponent.render(domNode, renderRoot, {\n      ref: (r: VisorComponent) => visorInstance = r,\n      surfaceList: Array.from(surfaceList.values()),\n    });\n    // Side effect of VisorComponent.render() is to assign visorInstance\n    return visorInstance;\n  }\n\n  // TODO: consider changing this type. Possibly lift into top level state\n  // object\n  const surfaceList: Map<string, SurfaceInfoStrict> = new Map();\n  const visorComponentInstance: VisorComponent =\n      renderVisor(visorEl, surfaceList);\n\n  visorSingleton =\n      new Visor(visorComponentInstance, visorEl, surfaceList, renderVisor);\n\n  return visorSingleton;\n}\n\n/**\n * An instance of the visor. An instance of this class is created using the\n * `visor()` function.\n */\n/** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\nexport class Visor {\n  private visorComponent: VisorComponent;\n  private surfaceList: Map<string, SurfaceInfoStrict>;\n  private renderVisor:\n      (domNode: HTMLElement,\n       surfaceList: Map<string, SurfaceInfoStrict>) => VisorComponent;\n\n  /**\n   * The underlying html element of the visor.\n   */\n  public el: HTMLElement;\n\n  constructor(\n      visorComponent: VisorComponent, visorEl: HTMLElement,\n      surfaceList: Map<string, SurfaceInfoStrict>,\n      renderVisor:\n          (domNode: HTMLElement,\n           surfaceList: Map<string, SurfaceInfoStrict>) => VisorComponent) {\n    this.visorComponent = visorComponent;\n    this.el = visorEl;\n    this.surfaceList = surfaceList;\n    this.renderVisor = renderVisor;\n  }\n\n  /**\n   * Creates a surface on the visor\n   *\n   * Most methods in tfjs-vis that take a surface also take a SurfaceInfo\n   * so you rarely need to call this method unless you want to make a custom\n   * plot.\n   *\n   * ```js\n   * // Create a surface on a tab\n   * tfvis.visor().surface({name: 'My Surface', tab: 'My Tab'});\n   * ```\n   *\n   * ```js\n   * // Create a surface and specify its height\n   * tfvis.visor().surface({name: 'Custom Height', tab: 'My Tab', styles: {\n   *    height: 500\n   * }})\n   * ```\n   *\n   * @param options\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  surface(options: SurfaceInfo) {\n    const {name} = options;\n    const tab = options.tab == null ? DEFAULT_TAB : options.tab;\n\n    if (name == null ||\n        // tslint:disable-next-line\n        !(typeof name === 'string' || name as any instanceof String)) {\n      throw new Error(\n          // tslint:disable-next-line\n          'You must pass a config object with a \\'name\\' property to create or retrieve a surface');\n    }\n\n    const finalOptions: SurfaceInfoStrict = {\n      ...options,\n      tab,\n    };\n\n    const key = `${name}-${tab}`;\n    if (!this.surfaceList.has(key)) {\n      this.surfaceList.set(key, finalOptions);\n    }\n\n    this.renderVisor(this.el, this.surfaceList);\n    return this.visorComponent.getSurface(name, tab);\n  }\n\n  /**\n   * Returns a boolean indicating if the visor is in 'fullscreen' mode\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  isFullscreen() {\n    return this.visorComponent.isFullscreen();\n  }\n\n  /**\n   * Returns a boolean indicating if the visor is open\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  isOpen() {\n    return this.visorComponent.isOpen();\n  }\n\n  /**\n   * Closes the visor.\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  close() {\n    return this.visorComponent.close();\n  }\n\n  /**\n   * Opens the visor.\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  open() {\n    return this.visorComponent.open();\n  }\n\n  /**\n   * Toggles the visor (closed vs open).\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  toggle() {\n    return this.visorComponent.toggle();\n  }\n\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  toggleFullScreen() {\n    return this.visorComponent.toggleFullScreen();\n  }\n\n  /**\n   * Binds the ~ (tilde) key to toggle the visor.\n   *\n   * This is called by default when the visor is initially created.\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  bindKeys() {\n    return this.visorComponent.bindKeys();\n  }\n\n  /**\n   * Unbinds the keyboard control to toggle the visor.\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  unbindKeys() {\n    return this.visorComponent.unbindKeys();\n  }\n\n  /**\n   * Sets the active tab for the visor.\n   */\n  /** @doc {heading: 'Visor & Surfaces', subheading: 'Visor Methods'} */\n  setActiveTab(tabName: string) {\n    const tabs = this.visorComponent.state.tabs;\n    if (!tabs.has(tabName)) {\n      throw new Error(`Tab '${tabName}' does not exist`);\n    }\n    this.visorComponent.setState({activeTab: tabName});\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Drawable, isSurface, isSurfaceInfo} from '../types';\nimport {visor} from '../visor';\n\nexport function getDrawArea(drawable: Drawable): HTMLElement {\n  if (drawable instanceof HTMLElement) {\n    return drawable;\n  } else if (isSurface(drawable)) {\n    return drawable.drawArea;\n  } else if (isSurfaceInfo(drawable)) {\n    const surface = visor().surface(\n        {name: drawable.name, tab: drawable.tab, styles: drawable.styles});\n    return surface.drawArea;\n  } else {\n    throw new Error('Not a drawable');\n  }\n}\n\nexport function shallowEquals(\n    // tslint:disable-next-line:no-any\n    a: {[key: string]: any}, b: {[key: string]: any}) {\n  const aProps = Object.getOwnPropertyNames(a);\n  const bProps = Object.getOwnPropertyNames(b);\n\n  if (aProps.length !== bProps.length) {\n    return false;\n  }\n\n  for (let i = 0; i < aProps.length; i++) {\n    const prop = aProps[i];\n    if (a[prop] !== b[prop]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport async function nextFrame() {\n  await new Promise(r => requestAnimationFrame(r));\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {css} from 'glamor';\n\nimport {getDrawArea} from '../render/render_utils';\nimport {Drawable} from '../types';\n\nconst DEFAULT_SUBSURFACE_OPTS = {\n  prepend: false,\n};\n\n/**\n * Utility function to create/retrieve divs within an HTMLElement|Surface\n */\nexport function subSurface(parent: Drawable, name: string, opts: Options = {}) {\n  const container = getDrawArea(parent);\n  const style = css({\n    '& canvas': {\n      display: 'block',\n    },\n    marginTop: '.5rem',\n    marginBottom: '.5rem',\n  });\n  const titleStyle = css({\n    backgroundColor: 'white',\n    display: 'inline-block',\n    boxSizing: 'border-box',\n    borderBottom: '1px solid #357EDD',\n    lineHeight: '2em',\n    padding: '0 10px 0 10px',\n    marginBottom: '20px',\n    fontWeight: '600',\n    textAlign: 'left',\n  });\n  const options = Object.assign({}, DEFAULT_SUBSURFACE_OPTS, opts);\n\n  let sub: HTMLElement|null = container.querySelector(`div[data-name=${name}]`);\n  if (!sub) {\n    sub = document.createElement('div');\n    sub.setAttribute('class', `${style}`);\n    sub.dataset.name = name;\n\n    if (options.title) {\n      const title = document.createElement('div');\n      title.setAttribute('class', `subsurface-title ${titleStyle}`);\n      title.innerText = options.title;\n      sub.appendChild(title);\n    }\n\n    if (options.prepend) {\n      container.insertBefore(sub, container.firstChild);\n    } else {\n      container.appendChild(sub);\n    }\n  }\n  return sub;\n}\n\nexport function getDefaultWidth(element: HTMLElement) {\n  const DEFAULT_PADDING = 50;\n  let padding = 0;\n  let current = element;\n  while (current && current.clientWidth === 0) {\n    current = current.parentElement;\n    padding = DEFAULT_PADDING;\n  }\n  return (current.clientWidth - padding);\n}\n\nexport function getDefaultHeight(element: HTMLElement) {\n  if (element.clientHeight === 0) {\n    return 200;\n  } else {\n    return element.clientHeight;\n  }\n}\n\ninterface Options {\n  prepend?: boolean;\n  title?: string;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport embed, {Mode, Result as EmbedRes, VisualizationSpec} from 'vega-embed';\n\nimport {BarChartOpts, Drawable} from '../types';\nimport {getDefaultHeight, getDefaultWidth} from '../util/dom';\nimport {getDrawArea, nextFrame, shallowEquals} from './render_utils';\n\n/**\n * Renders a barchart.\n *\n * ```js\n * const data = [\n *   { index: 0, value: 50 },\n *   { index: 1, value: 100 },\n *   { index: 2, value: 150 },\n *  ];\n *\n * // Render to visor\n * const surface = { name: 'Bar chart', tab: 'Charts' };\n * tfvis.render.barchart(surface, data);\n * ```\n *\n * @param data Data in the following format, (an array of objects)\n *    `[ {index: number, value: number} ... ]`\n *\n * @returns Promise - indicates completion of rendering\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function barchart(\n    container: Drawable, data: Array<{index: number; value: number;}>,\n    opts: BarChartOpts = {}): Promise<void> {\n  const drawArea = getDrawArea(container);\n  const values = data;\n  const options = Object.assign({}, defaultOpts, opts);\n\n  // If we have rendered this chart before with the same options we can do a\n  // data only update, else  we do a regular re-render.\n  if (instances.has(drawArea)) {\n    const instanceInfo = instances.get(drawArea);\n    if (shallowEquals(options, instanceInfo.lastOptions)) {\n      await nextFrame();\n      const view = instanceInfo.view;\n      const changes = view.changeset().remove(() => true).insert(values);\n      await view.change('values', changes).runAsync();\n      return;\n    }\n  }\n\n  const {xLabel, yLabel, xType, yType} = options;\n\n  let xAxis: {}|null = null;\n  if (xLabel != null) {\n    xAxis = {title: xLabel};\n  }\n\n  let yAxis: {}|null = null;\n  if (yLabel != null) {\n    yAxis = {title: yLabel};\n  }\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  let colorEncoding;\n\n  if (options.color != null) {\n    if (Array.isArray(options.color)) {\n      colorEncoding = {\n        'field': 'index',\n        'type': 'nominal',\n        'scale': {\n          'range': options.color,\n        }\n      };\n    } else {\n      colorEncoding = {'value': options.color};\n    }\n  } else {\n    colorEncoding = {'value': '#4C78A0'};\n  }\n\n  const spec: VisualizationSpec = {\n    'width': options.width || getDefaultWidth(drawArea),\n    'height': options.height || getDefaultHeight(drawArea),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      }\n    },\n    'data': {'values': values, 'name': 'values'},\n    'mark': {\n      'type': 'bar',\n      'tooltip': true,\n    },\n    'encoding': {\n      'x': {'field': 'index', 'type': xType, 'axis': xAxis},\n      'y': {'field': 'value', 'type': yType, 'axis': yAxis},\n      'color': colorEncoding,\n    },\n  } as VisualizationSpec;\n\n  await nextFrame();\n  const embedRes = await embed(drawArea, spec, embedOpts);\n  instances.set(drawArea, {\n    view: embedRes.view,\n    lastOptions: options,\n  });\n}\n\nconst defaultOpts = {\n  xLabel: '',\n  yLabel: '',\n  xType: 'ordinal',\n  yType: 'quantitative',\n  fontSize: 11,\n};\n\n// We keep a map of containers to chart instances in order to reuse the\n// instance where possible.\nconst instances: Map<HTMLElement, InstanceInfo> =\n    new Map<HTMLElement, InstanceInfo>();\n\ninterface InstanceInfo {\n  // tslint:disable-next-line:no-any\n  view: any;\n  lastOptions: BarChartOpts;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport embed, {Mode, VisualizationSpec} from 'vega-embed';\n\nimport {ConfusionMatrixData, ConfusionMatrixOptions, Drawable,} from '../types';\nimport {getDefaultHeight, getDefaultWidth} from '../util/dom';\nimport {getDrawArea} from './render_utils';\n\n/**\n * Renders a confusion matrix.\n *\n * Can optionally exclude the diagonal from being shaded if one wants the visual\n * focus to be on the incorrect classifications. Note that if the classification\n * is perfect (i.e. only the diagonal has values) then the diagonal will always\n * be shaded.\n *\n * ```js\n * const rows = 5;\n * const cols = 5;\n * const values = [];\n * for (let i = 0; i < rows; i++) {\n *   const row = []\n *   for (let j = 0; j < cols; j++) {\n *     row.push(Math.round(Math.random() * 50));\n *   }\n *   values.push(row);\n * }\n * const data = { values };\n *\n * // Render to visor\n * const surface = { name: 'Confusion Matrix', tab: 'Charts' };\n * tfvis.render.confusionMatrix(surface, data);\n * ```\n *\n * ```js\n * // The diagonal can be excluded from shading.\n *\n * const data = {\n *   values: [[4, 2, 8], [1, 7, 2], [3, 3, 20]],\n * }\n *\n * // Render to visor\n * const surface = {\n *  name: 'Confusion Matrix with Excluded Diagonal', tab: 'Charts'\n * };\n *\n * tfvis.render.confusionMatrix(surface, data, {\n *   shadeDiagonal: false\n * });\n * ```\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function confusionMatrix(\n    container: Drawable, data: ConfusionMatrixData,\n    opts: ConfusionMatrixOptions = {}): Promise<void> {\n  const options = Object.assign({}, defaultOpts, opts);\n  const drawArea = getDrawArea(container);\n\n  // Format data for vega spec; an array of objects, one for for each cell\n  // in the matrix.\n  const values: MatrixEntry[] = [];\n\n  const inputArray = data.values;\n  const tickLabels = data.tickLabels || [];\n  const generateLabels = tickLabels.length === 0;\n\n  let nonDiagonalIsAllZeroes = true;\n  for (let i = 0; i < inputArray.length; i++) {\n    const label = generateLabels ? `Class ${i}` : tickLabels[i];\n\n    if (generateLabels) {\n      tickLabels.push(label);\n    }\n\n    for (let j = 0; j < inputArray[i].length; j++) {\n      const prediction = generateLabels ? `Class ${j}` : tickLabels[j];\n\n      const count = inputArray[i][j];\n      if (i === j && !options.shadeDiagonal) {\n        values.push({\n          label,\n          prediction,\n          count,\n          noFill: true,\n        });\n      } else {\n        values.push({\n          label,\n          prediction,\n          count,\n          scaleCount: count,\n        });\n        // When not shading the diagonal we want to check if there is a non\n        // zero value. If all values are zero we will not color them as the\n        // scale will be invalid.\n        if (count !== 0) {\n          nonDiagonalIsAllZeroes = false;\n        }\n      }\n    }\n  }\n\n  if (!options.shadeDiagonal && nonDiagonalIsAllZeroes) {\n    // User has specified requested not to shade the diagonal but all the other\n    // values are zero. We have two choices, don't shade the anything or only\n    // shade the diagonal. We choose to shade the diagonal as that is likely\n    // more helpful even if it is not what the user specified.\n    for (const val of values) {\n      if (val.noFill === true) {\n        val.noFill = false;\n        val.scaleCount = val.count;\n      }\n    }\n  }\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  //@ts-ignore\n  const spec: VisualizationSpec = {\n    'width': options.width || getDefaultWidth(drawArea),\n    'height': options.height || getDefaultHeight(drawArea),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      }\n    },\n    //@ts-ignore\n    'data': {'values': values},\n    'encoding': {\n      'x': {\n        'field': 'prediction',\n        'type': 'ordinal',\n        'title': options.xLabel || 'prediction',\n        // Maintain sort order of the axis if labels is passed in\n        'scale': {'domain': tickLabels},\n      },\n      'y': {\n        'field': 'label',\n        'type': 'ordinal',\n        'title': options.yLabel || 'label',\n        // Maintain sort order of the axis if labels is passed in\n        'scale': {'domain': tickLabels},\n      },\n    },\n    'layer': [\n      {\n        // The matrix\n        'transform': [\n          {'filter': 'datum.noFill != true'},\n        ],\n        'mark': {\n          'type': 'rect',\n        },\n        'encoding': {\n          'color': {\n            'field': 'scaleCount',\n            'type': 'quantitative',\n            //@ts-ignore\n            'scale': {'range': options.colorMap},\n          },\n          'tooltip': [\n            {'field': 'label', 'type': 'nominal'},\n            {'field': 'prediction', 'type': 'nominal'},\n            {'field': 'count', 'type': 'quantitative'},\n          ]\n        },\n      },\n    ]\n  };\n\n  if (options.shadeDiagonal === false) {\n    //@ts-ignore\n    spec.layer.push(\n        {\n          // render unfilled rects for the diagonal\n          'transform': [\n            {'filter': 'datum.noFill == true'},\n          ],\n          'mark': {\n            'type': 'rect',\n            'fill': 'white',\n          },\n          'encoding': {\n            'tooltip': [\n              {'field': 'label', 'type': 'nominal'},\n              {'field': 'prediction', 'type': 'nominal'},\n              {'field': 'count', 'type': 'quantitative'},\n            ]\n          },\n        },\n    );\n  }\n\n  if (options.showTextOverlay) {\n    //@ts-ignore\n    spec.layer.push({\n      // The text labels\n      'mark': {'type': 'text', 'baseline': 'middle'},\n      'encoding': {\n        'text': {\n          'field': 'count',\n          'type': 'nominal',\n        },\n      }\n    });\n  }\n\n  const colorMap = typeof options.colorMap === 'string' ?\n      {scheme: options.colorMap} :\n      options.colorMap;\n  //@ts-ignore\n  spec.layer[0].encoding.color.scale.range = colorMap;\n\n  await embed(drawArea, spec, embedOpts);\n}\n\nconst defaultOpts: ConfusionMatrixOptions = {\n  xLabel: null,\n  yLabel: null,\n  xType: 'nominal',\n  yType: 'nominal',\n  shadeDiagonal: true,\n  fontSize: 12,\n  showTextOverlay: true,\n  height: 400,\n  colorMap: ['#f7fbff', '#4292c6'],\n};\n\ninterface MatrixEntry {\n  label: string;\n  prediction: string;\n  // The displayed count\n  count: number;\n  // The count values used to compute the color scale\n  scaleCount?: number;\n  noFill?: boolean;\n}\n","import {TypedArray} from '../types';\n\n/*\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\n/**\n * Tests a boolean expression and throws a message if false.\n */\nexport function assert(expr: boolean, msg: string|(() => string)) {\n  if (!expr) {\n    throw new Error(typeof msg === 'string' ? msg : msg());\n  }\n}\n\nexport function assertShapesMatch(\n    shapeA: number[], shapeB: number[], errorMessagePrefix = ''): void {\n  assert(\n      arraysEqual(shapeA, shapeB),\n      errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n}\n\nexport function arraysEqual(n1: number[]|TypedArray, n2: number[]|TypedArray) {\n  if (n1.length !== n2.length) {\n    return false;\n  }\n  for (let i = 0; i < n1.length; i++) {\n    if (n1[i] !== n2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Number of decimal places to  when checking float similarity\nexport const DECIMAL_PLACES_TO_CHECK = 4;\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs';\nimport embed, {Mode, VisualizationSpec} from 'vega-embed';\n\nimport {Drawable, HeatmapData, HeatmapOptions} from '../types';\nimport {getDefaultHeight, getDefaultWidth} from '../util/dom';\nimport {assert} from '../util/utils';\n\nimport {getDrawArea} from './render_utils';\n\n/**\n * Renders a heatmap.\n *\n * ```js\n * const cols = 50;\n * const rows = 20;\n * const values = [];\n * for (let i = 0; i < cols; i++) {\n *   const col = []\n *   for (let j = 0; j < rows; j++) {\n *     col.push(i * j)\n *   }\n *   values.push(col);\n * }\n * const data = { values };\n *\n * // Render to visor\n * const surface = { name: 'Heatmap', tab: 'Charts' };\n * tfvis.render.heatmap(surface, data);\n * ```\n *\n * ```js\n * const data = {\n *   values: [[4, 2, 8, 20], [1, 7, 2, 10], [3, 3, 20, 13]],\n *   xTickLabels: ['cheese', 'pig', 'font'],\n *   yTickLabels: ['speed', 'smoothness', 'dexterity', 'mana'],\n * }\n *\n * // Render to visor\n * const surface = { name: 'Heatmap w Custom Labels', tab: 'Charts' };\n * tfvis.render.heatmap(surface, data);\n * ```\n *\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function heatmap(\n    container: Drawable, data: HeatmapData,\n    opts: HeatmapOptions = {}): Promise<void> {\n  const options = Object.assign({}, defaultOpts, opts);\n  const drawArea = getDrawArea(container);\n\n  let inputValues = data.values;\n  if (options.rowMajor) {\n    inputValues = await convertToRowMajor(data.values);\n  }\n\n  // Data validation\n  const {xTickLabels, yTickLabels} = data;\n  if (xTickLabels != null) {\n    const dimension = 0;\n    assertLabelsMatchShape(inputValues, xTickLabels, dimension);\n  }\n\n  // Note that we will only do a check on the first element of the second\n  // dimension. We do not protect users against passing in a ragged array.\n  if (yTickLabels != null) {\n    const dimension = 1;\n    assertLabelsMatchShape(inputValues, yTickLabels, dimension);\n  }\n\n  //\n  // Format data for vega spec; an array of objects, one for for each cell\n  // in the matrix.\n  //\n  // If custom labels are passed in for xTickLabels or yTickLabels we need\n  // to make sure they are 'unique' before mapping them to visual properties.\n  // We therefore append the index of the label to the datum that will be used\n  // for that label in the x or y axis. We could do this in all cases but choose\n  // not to to avoid unnecessary string operations.\n  //\n  // We use IDX_SEPARATOR to demarcate the added index\n  const IDX_SEPARATOR = '@tfidx@';\n\n  const values: MatrixEntry[] = [];\n  if (inputValues instanceof tf.Tensor) {\n    assert(\n        inputValues.rank === 2,\n        'Input to renderHeatmap must be a 2d array or Tensor2d');\n\n    // This is a slightly specialized version of TensorBuffer.get, inlining it\n    // avoids the overhead of a function call per data element access and is\n    // specialized to only deal with the 2d case.\n    const inputArray = await inputValues.data();\n    const [numRows, numCols] = inputValues.shape;\n\n    for (let row = 0; row < numRows; row++) {\n      const x = xTickLabels ? `${xTickLabels[row]}${IDX_SEPARATOR}${row}` : row;\n      for (let col = 0; col < numCols; col++) {\n        const y =\n            yTickLabels ? `${yTickLabels[col]}${IDX_SEPARATOR}${col}` : col;\n\n        const index = (row * numCols) + col;\n        const value = inputArray[index];\n\n        values.push({x, y, value});\n      }\n    }\n  } else {\n    const inputArray = inputValues;\n    for (let row = 0; row < inputArray.length; row++) {\n      const x = xTickLabels ? `${xTickLabels[row]}${IDX_SEPARATOR}${row}` : row;\n      for (let col = 0; col < inputArray[row].length; col++) {\n        const y =\n            yTickLabels ? `${yTickLabels[col]}${IDX_SEPARATOR}${col}` : col;\n        const value = inputArray[row][col];\n        values.push({x, y, value});\n      }\n    }\n  }\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  const spec: VisualizationSpec = {\n    'width': options.width || getDefaultWidth(drawArea),\n    'height': options.height || getDefaultHeight(drawArea),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'scale': {'bandPaddingInner': 0, 'bandPaddingOuter': 0},\n    },\n    //@ts-ignore\n    'data': {'values': values},\n    'mark': {'type': 'rect', 'tooltip': true},\n    'encoding': {\n      'x': {\n        'field': 'x',\n        'type': options.xType,\n        'title': options.xLabel,\n        'sort': 'x',\n      },\n      'y': {\n        'field': 'y',\n        'type': options.yType,\n        'title': options.yLabel,\n        'sort': 'y',\n      },\n      'fill': {\n        'field': 'value',\n        'type': 'quantitative',\n      }\n    }\n  };\n\n  //\n  // Format custom labels to remove the appended indices\n  //\n  const suffixPattern = `${IDX_SEPARATOR}\\\\d+$`;\n  const suffixRegex = new RegExp(suffixPattern);\n  if (xTickLabels) {\n    // @ts-ignore\n    spec.encoding.x.axis = {\n      'labelExpr': `replace(datum.value, regexp(/${suffixPattern}/), '')`,\n    };\n  }\n\n  if (yTickLabels) {\n    // @ts-ignore\n    spec.encoding.y.axis = {\n      'labelExpr': `replace(datum.value, regexp(/${suffixPattern}/), '')`,\n    };\n  }\n\n  // Customize tooltip formatting to remove the appended indices\n  if (xTickLabels || yTickLabels) {\n    //@ts-ignore\n    embedOpts.tooltip = {\n      sanitize: (value: string|number) => {\n        const valueString = String(value);\n        return valueString.replace(suffixRegex, '');\n      }\n    };\n  }\n\n  let colorRange: string[]|string;\n  switch (options.colorMap) {\n    case 'blues':\n      colorRange = ['#f7fbff', '#4292c6'];\n      break;\n    case 'greyscale':\n      colorRange = ['#000000', '#ffffff'];\n      break;\n    case 'viridis':\n    default:\n      colorRange = 'viridis';\n      break;\n  }\n\n  if (colorRange !== 'viridis') {\n    //@ts-ignore\n    const fill = spec.encoding.fill;\n    // @ts-ignore\n    fill.scale = {'range': colorRange};\n  }\n\n  if (options.domain) {\n    //@ts-ignore\n    const fill = spec.encoding.fill;\n    // @ts-ignore\n    if (fill.scale != null) {\n      // @ts-ignore\n      fill.scale = Object.assign({}, fill.scale, {'domain': options.domain});\n    } else {\n      // @ts-ignore\n      fill.scale = {'domain': options.domain};\n    }\n  }\n\n  await embed(drawArea, spec, embedOpts);\n}\n\nasync function convertToRowMajor(inputValues: number[][]|\n                                 tf.Tensor2D): Promise<number[][]> {\n  let originalShape: number[];\n  let transposed: tf.Tensor2D;\n  if (inputValues instanceof tf.Tensor) {\n    originalShape = inputValues.shape;\n    transposed = inputValues.transpose();\n  } else {\n    originalShape = [inputValues.length, inputValues[0].length];\n    transposed = tf.tidy(() => tf.tensor2d(inputValues).transpose());\n  }\n\n  assert(\n      transposed.rank === 2,\n      'Input to renderHeatmap must be a 2d array or Tensor2d');\n\n  // Download the intermediate tensor values and\n  // dispose the transposed tensor.\n  const transposedValues = await transposed.array();\n  transposed.dispose();\n\n  const transposedShape = [transposedValues.length, transposedValues[0].length];\n  assert(\n      originalShape[0] === transposedShape[1] &&\n          originalShape[1] === transposedShape[0],\n      `Unexpected transposed shape. Original ${originalShape} : Transposed ${\n          transposedShape}`);\n  return transposedValues;\n}\n\nfunction assertLabelsMatchShape(\n    inputValues: number[][]|tf.Tensor2D, labels: string[], dimension: 0|1) {\n  const shape = inputValues instanceof tf.Tensor ?\n      inputValues.shape :\n      [inputValues.length, inputValues[0].length];\n  if (dimension === 0) {\n    assert(\n        shape[0] === labels.length,\n        `Length of xTickLabels (${labels.length}) must match number of rows` +\n            ` (${shape[0]})`);\n  } else if (dimension === 1) {\n    assert(\n        shape[1] === labels.length,\n        `Length of yTickLabels (${\n            labels.length}) must match number of columns (${shape[1]})`);\n  }\n}\n\nconst defaultOpts: HeatmapOptions = {\n  xLabel: null,\n  yLabel: null,\n  xType: 'ordinal',\n  yType: 'ordinal',\n  colorMap: 'viridis',\n  fontSize: 12,\n  domain: null,\n  rowMajor: false,\n};\n\ninterface MatrixEntry {\n  x: string|number;\n  y: string|number;\n  value: number;\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  this.fill = match[1] || \" \";\n  this.align = match[2] || \">\";\n  this.sign = match[3] || \"-\";\n  this.symbol = match[4] || \"\";\n  this.zero = !!match[5];\n  this.width = match[6] && +match[6];\n  this.comma = !!match[7];\n  this.precision = match[8] && +match[8].slice(1);\n  this.trim = !!match[9];\n  this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": function(x) { return Math.round(x).toString(10); },\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n      currency = locale.currency,\n      decimal = locale.decimal,\n      numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n      percent = locale.percent || \"%\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision == null ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Perform the initial formatting.\n        var valueNegative = value < 0;\n        value = formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero during formatting, treat as positive.\n        if (valueNegative && +value === 0) valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale\";\nexport {default as formatLocale} from \"./locale\";\nexport {default as formatSpecifier} from \"./formatSpecifier\";\nexport {default as precisionFixed} from \"./precisionFixed\";\nexport {default as precisionPrefix} from \"./precisionPrefix\";\nexport {default as precisionRound} from \"./precisionRound\";\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {dispose, maximum, scalar, Tensor, Tensor1D, tidy} from '@tensorflow/tfjs';\n\nimport {HistogramStats, TypedArray} from '../types';\n\nimport {assert, assertShapesMatch} from './utils';\n\n/**\n * Returns summary statistics for an array of numbers\n *\n * @param input\n */\nexport function arrayStats(input: number[]): HistogramStats {\n  if (!Array.isArray(input)) {\n    throw new Error('input must be an array');\n  }\n  if (input.length === 0) {\n    return {\n      numVals: 0,\n      numNans: 0,\n      numZeros: 0,\n      max: undefined,\n      min: undefined,\n    };\n  }\n\n  const numVals = input.length;\n  let max = -Infinity;\n  let min = Infinity;\n  let numZeros = 0;\n  let numNans = 0;\n  let numInfs = 0;\n\n  for (let i = 0; i < numVals; i++) {\n    const curr = input[i];\n    if (curr > max) {\n      max = curr;\n    }\n\n    if (curr < min) {\n      min = curr;\n    }\n\n    if (curr === 0) {\n      numZeros += 1;\n    }\n\n    if (isNaN(curr)) {\n      numNans += 1;\n    } else if (!isFinite(curr)) {\n      // Make sure NaNs are not double counted as Infs\n      numInfs += 1;\n    }\n  }\n\n  const result = {\n    numVals,\n    numZeros,\n    numNans,\n    max,\n    min,\n    numInfs,\n  };\n\n  // Handle all NaN input\n  if (result.max === -Infinity) {\n    result.max = NaN;\n  }\n  if (result.min === Infinity) {\n    result.min = NaN;\n  }\n\n  return result;\n}\n\n/**\n * Returns summary statistics for a numeric tensor. *\n *\n * @param input\n */\nexport async function tensorStats(input: Tensor): Promise<HistogramStats> {\n  // TODO. Benchmark this and consider having one of the *stats functions\n  // delegate to the other.\n\n  const [min, max, numZeros] = tidy(() => {\n    const zero = scalar(0, input.dtype);\n\n    const min = input.min();\n    const max = input.max();\n    const numZeros = input.equal(zero).sum();\n\n    return [min, max, numZeros];\n  });\n\n  return Promise\n      .all([input.data(), min.data(), max.data(), numZeros.data()])\n      .then(([tensorVal, minVal, maxVal, numZerosVal]) => {\n        // We currently need to count NaNs on CPU.\n        const numVals = tensorVal.length;\n        let numNans = 0;\n        let numInfs = 0;\n        for (let i = 0; i < numVals; i++) {\n          const curr = tensorVal[i];\n          if (isNaN(curr)) {\n            numNans += 1;\n          } else if (!isFinite(curr)) {\n            // Make sure NaNs are not double counted as Infs\n            numInfs += 1;\n          }\n        }\n\n        let trueMin = minVal[0];\n        let trueMax = maxVal[0];\n        if (numNans === numVals) {\n          // on gpu the min and max won't be accurate if all values are NaN\n          trueMin = NaN;\n          trueMax = NaN;\n        }\n\n        const stats = {\n          numVals,\n          numZeros: numZerosVal[0],\n          numNans,\n          min: trueMin,\n          max: trueMax,\n          numInfs,\n        };\n\n        return stats;\n      });\n}\n\n/**\n * Computes a confusion matrix from predictions and labels. Each value in\n * labels and predictions should correspond to some output class. It is assumed\n * that these values go from 0 to numClasses - 1.\n *\n * ```js\n * const labels = tf.tensor1d([1, 2, 4]);\n * const predictions = tf.tensor1d([2, 2, 4]);\n * const result = await tfvis.metrics.confusionMatrix(labels, predictions);\n * console.log(JSON.stringify(result, null, 2))\n * ```\n *\n * @param labels 1D tensor of true values\n * @param predictions 1D tensor of predicted values\n * @param numClasses Number of distinct classes. Optional. If not passed in\n *  numClasses will equal the highest number in either labels or predictions\n *  plus 1\n * @param weights 1d tensor that is the same size as predictions.\n *  If weights is passed in then each prediction contributes its corresponding\n *  weight to the total value of the confusion matrix cell.\n *\n */\n/**\n * @doc {heading: 'Metrics', namespace: 'metrics'}\n */\nexport async function confusionMatrix(\n    labels: Tensor1D, predictions: Tensor1D, numClasses?: number,\n    weights?: Tensor1D): Promise<number[][]> {\n  assert(labels.rank === 1, 'labels must be a 1D tensor');\n  assert(predictions.rank === 1, 'predictions must be a 1D tensor');\n  assert(\n      labels.size === predictions.size,\n      'labels and predictions must be the same length');\n  if (weights != null) {\n    assert(\n        weights.size === predictions.size,\n        'labels and predictions must be the same length');\n  }\n\n  // Cast to int in case the caller didn't\n  const labelsInt = labels.cast('int32');\n  const predictionsInt = predictions.cast('int32');\n\n  if (numClasses == null) {\n    numClasses =\n        tidy(() => {\n          const max =\n              maximum(labelsInt.max(), predictionsInt.max()).cast('int32');\n          return max.dataSync()[0] + 1;\n        });\n  }\n\n  let weightsPromise: Promise<null|TypedArray> = Promise.resolve(null);\n  if (weights != null) {\n    weightsPromise = weights.data();\n  }\n\n  return Promise.all([labelsInt.data(), predictionsInt.data(), weightsPromise])\n      .then(([labelsArray, predsArray, weightsArray]) => {\n        const result: number[][] = Array(numClasses).fill(0);\n        // Initialize the matrix\n        for (let i = 0; i < numClasses; i++) {\n          result[i] = Array(numClasses).fill(0);\n        }\n\n        for (let i = 0; i < labelsArray.length; i++) {\n          const label = labelsArray[i];\n          const pred = predsArray[i];\n\n          if (weightsArray != null) {\n            result[label][pred] += weightsArray[i];\n          } else {\n            result[label][pred] += 1;\n          }\n        }\n\n        return result;\n      });\n}\n\n/**\n * Computes how often predictions matches labels\n *\n * ```js\n * const labels = tf.tensor1d([0, 0, 1, 2, 2, 2]);\n * const predictions = tf.tensor1d([0, 0, 0, 2, 1, 1]);\n *\n * const result = await tfvis.metrics.accuracy(labels, predictions);\n * console.log(result)\n * ```\n *\n * @param labels tensor of true values\n * @param predictions tensor of predicted values\n */\n/**\n * @doc {heading: 'Metrics', namespace: 'metrics'}\n */\nexport async function accuracy(\n    labels: Tensor, predictions: Tensor): Promise<number> {\n  assertShapesMatch(\n      labels.shape, predictions.shape, 'Error computing accuracy.');\n\n  const eq = labels.equal(predictions);\n  const mean = eq.mean();\n\n  const acc = (await mean.data())[0];\n\n  dispose([eq, mean]);\n  return acc;\n}\n\n/**\n * Computes per class accuracy between prediction and labels. Each value in\n * labels and predictions should correspond to some output class. It is assumed\n * that these values go from 0 to numClasses - 1.\n *\n * ```js\n * const labels = tf.tensor1d([0, 0, 1, 2, 2, 2]);\n * const predictions = tf.tensor1d([0, 0, 0, 2, 1, 1]);\n *\n * const result = await tfvis.metrics.perClassAccuracy(labels, predictions);\n * console.log(JSON.stringify(result, null, 2))\n * ```\n *\n * Returns an array of objects that each have an an `accuracy` and a `count`\n * property for each class.\n *\n *\n * @param labels 1D tensor of true values\n * @param predictions 1D tensor of predicted values\n * @param numClasses Number of distinct classes. Optional. If not passed in\n *  numClasses will equal the highest number in either labels or predictions\n *  plus 1\n */\n/**\n * @doc {heading: 'Metrics', namespace: 'metrics'}\n */\nexport async function perClassAccuracy(\n    labels: Tensor1D, predictions: Tensor1D,\n    numClasses?: number): Promise<Array<{accuracy: number, count: number}>> {\n  assert(labels.rank === 1, 'labels must be a 1D tensor');\n  assert(predictions.rank === 1, 'predictions must be a 1D tensor');\n  assert(\n      labels.size === predictions.size,\n      'labels and predictions must be the same length');\n\n  if (numClasses == null) {\n    numClasses = tidy(() => {\n      return maximum(labels.max(), predictions.max()).dataSync()[0] + 1;\n    });\n  }\n\n  return Promise.all([labels.data(), predictions.data()])\n      .then(([labelsArray, predsArray]) => {\n        // Per class total counts\n        const counts: number[] = Array(numClasses).fill(0);\n        // Per class accuracy\n        const accuracy: number[] = Array(numClasses).fill(0);\n\n        for (let i = 0; i < labelsArray.length; i++) {\n          const label = labelsArray[i];\n          const pred = predsArray[i];\n\n          counts[label] += 1;\n          if (label === pred) {\n            accuracy[label] += 1;\n          }\n        }\n\n        const results: Array<{accuracy: number, count: number}> = [];\n        for (let i = 0; i < counts.length; i++) {\n          results.push({\n            count: counts[i],\n            accuracy: counts[i] === 0 ? 0 : accuracy[i] / counts[i],\n          });\n        }\n\n        return results;\n      });\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","var matcher = function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n};\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!element.matches) {\n    var vendorMatches = element.webkitMatchesSelector\n        || element.msMatchesSelector\n        || element.mozMatchesSelector\n        || element.oMatchesSelector;\n    matcher = function(selector) {\n      return function() {\n        return vendorMatches.call(this, selector);\n      };\n    };\n  }\n}\n\nexport default matcher;\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nexport default function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n  return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","import creator from \"./creator\";\nimport select from \"./select\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n  var current = event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\n","export default function(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches) {\n  if (touches == null) touches = sourceEvent().touches;\n\n  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n    points[i] = point(node, touches[i]);\n  }\n\n  return points;\n}\n","export {default as create} from \"./create\";\nexport {default as creator} from \"./creator\";\nexport {default as local} from \"./local\";\nexport {default as matcher} from \"./matcher\";\nexport {default as mouse} from \"./mouse\";\nexport {default as namespace} from \"./namespace\";\nexport {default as namespaces} from \"./namespaces\";\nexport {default as clientPoint} from \"./point\";\nexport {default as select} from \"./select\";\nexport {default as selectAll} from \"./selectAll\";\nexport {default as selection} from \"./selection/index\";\nexport {default as selector} from \"./selector\";\nexport {default as selectorAll} from \"./selectorAll\";\nexport {styleValue as style} from \"./selection/style\";\nexport {default as touch} from \"./touch\";\nexport {default as touches} from \"./touches\";\nexport {default as window} from \"./window\";\nexport {event, customEvent} from \"./selection/on\";\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {format as d3Format} from 'd3-format';\nimport {select as d3Select} from 'd3-selection';\nimport {css} from 'glamor';\nimport {Drawable, TableData} from '../types';\nimport {getDrawArea} from './render_utils';\n\n/**\n * Renders a table\n *\n * ```js\n * const headers = [\n *  'Col 1',\n *  'Col 2',\n *  'Col 3',\n * ];\n *\n * const values = [\n *  [1, 2, 3],\n *  ['4', '5', '6'],\n *  ['strong>7</strong>', true, false],\n * ];\n *\n * const surface = { name: 'Table', tab: 'Charts' };\n * tfvis.render.table(surface, { headers, values });\n * ```\n *\n * @param opts.fontSize fontSize in pixels for text in the chart.\n *\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport function table(\n    container: Drawable,\n    // tslint:disable-next-line:no-any\n    data: TableData, opts: {fontSize?: number} = {}) {\n  if (data && data.headers == null) {\n    throw new Error('Data to render must have a \"headers\" property');\n  }\n\n  if (data && data.values == null) {\n    throw new Error('Data to render must have a \"values\" property');\n  }\n\n  const drawArea = getDrawArea(container);\n\n  const options = Object.assign({}, defaultOpts, opts);\n\n  let table = d3Select(drawArea).select('table.tf-table');\n\n  const tableStyle = css({\n    fontSize: options.fontSize || '.875rem',\n    width: '100%',\n    maxWidth: '64rem',\n    marginRight: 'auto',\n    marginLeft: 'auto',\n  });\n\n  // If a table is not already present on this element add one\n  if (table.size() === 0) {\n    table = d3Select(drawArea).append('table');\n\n    table.attr('class', ` ${tableStyle} tf-table`);\n\n    table.append('thead').append('tr');\n    table.append('tbody');\n  }\n\n  if (table.size() !== 1) {\n    throw new Error('Error inserting table');\n  }\n\n  //\n  // Add the reader row\n  //\n  const headerRowStyle = css({\n    fontWeight: '600',\n    borderBottomStyle: 'solid',\n    borderBottomWidth: '1px',\n    borderColor: 'rgba( 0, 0, 0, .2 )',\n    textAlign: 'left',\n    paddingBottom: '1rem',\n    paddingRight: '1rem',\n    backgroundColor: '#fff',\n  });\n  const headers =\n      table.select('thead').select('tr').selectAll('th').data(data.headers);\n  const headersEnter =\n      headers.enter().append('th').attr('class', `${headerRowStyle}`);\n  headers.merge(headersEnter).html(d => d);\n\n  headers.exit().remove();\n\n  //\n  // Add the data rows\n  //\n  const format = d3Format(',.4~f');\n\n  const rows = table.select('tbody').selectAll('tr').data(data.values);\n  const rowsEnter = rows.enter().append('tr');\n\n  // Nested selection to add individual cells\n  const cellStyle = css({\n    padding: '0.25rem',\n    borderBottomStyle: 'solid',\n    borderBottomWidth: '1px',\n    borderColor: 'rgba( 0, 0, 0, .2 )',\n  });\n  const cells = rows.merge(rowsEnter).selectAll('td').data(d => d);\n  const cellsEnter = cells.enter().append('td').attr('class', `${cellStyle}`);\n  cells.merge(cellsEnter).html(d => typeof d === 'number' ? format(d) : d);\n\n  cells.exit().remove();\n  rows.exit().remove();\n}\n\nconst defaultOpts = {\n  fontSize: 14,\n};\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {format as d3Format} from 'd3-format';\nimport embed, {Mode, VisualizationSpec} from 'vega-embed';\n\nimport {Drawable, HistogramOpts, HistogramStats, TypedArray} from '../types';\nimport {getDefaultHeight, getDefaultWidth, subSurface} from '../util/dom';\nimport {arrayStats} from '../util/math';\n\nimport {table} from './table';\n\nconst defaultOpts = {\n  maxBins: 12,\n  fontSize: 11,\n};\n\n/**\n * Renders a histogram of values\n *\n * ```js\n * const data = Array(100).fill(0)\n *   .map(x => Math.random() * 100 - (Math.random() * 50))\n *\n * // Push some special values for the stats table.\n * data.push(Infinity);\n * data.push(NaN);\n * data.push(0);\n *\n * const surface = { name: 'Histogram', tab: 'Charts' };\n * tfvis.render.histogram(surface, data);\n * ```\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function histogram(\n    container: Drawable, data: Array<{value: number}>|number[]|TypedArray,\n    opts: HistogramOpts = {}) {\n  const values = prepareData(data);\n\n  const options = Object.assign({}, defaultOpts, opts);\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  const histogramContainer = subSurface(container, 'histogram');\n  if (opts.stats !== false) {\n    const statsContainer = subSurface(container, 'stats', {\n      prepend: true,\n    });\n    let stats: HistogramStats;\n\n    if (opts.stats) {\n      stats = opts.stats;\n    } else {\n      stats = arrayStats(values.map(x => x.value));\n    }\n    renderStats(stats, statsContainer, {fontSize: options.fontSize});\n  }\n\n  // If there are no data values return early\n  if (values.length === 0) {\n    return undefined;\n  }\n\n  // Now that we have rendered stats we need to remove any NaNs and Infinities\n  // before rendering the histogram\n  const filtered = [];\n  for (let i = 0; i < values.length; i++) {\n    const val = values[i].value;\n    if (val != null && isFinite(val)) {\n      filtered.push(values[i]);\n    }\n  }\n\n  const histogramSpec: VisualizationSpec = {\n\n    'width': options.width || getDefaultWidth(histogramContainer),\n    'height': options.height || getDefaultHeight(histogramContainer),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'data': {'values': filtered},\n    'mark': {\n      'type': 'bar',\n      'tooltip': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      }\n    },\n    'encoding': {\n      'x': {\n        'bin': {'maxbins': options.maxBins},\n        'field': 'value',\n        'type': 'quantitative',\n      },\n      'y': {\n        'aggregate': 'count',\n        'type': 'quantitative',\n      },\n      'color': {\n        'value': options.color || '#001B44',\n      }\n    }\n  };\n\n  return embed(histogramContainer, histogramSpec, embedOpts);\n}\n\nfunction renderStats(\n    stats: HistogramStats, container: HTMLElement, opts: {fontSize: number}) {\n  const format = d3Format(',.4~f');\n  const pctFormat = d3Format('.4~p');\n\n  const headers: string[] = [];\n  const vals: string[] = [];\n\n  if (stats.numVals != null) {\n    headers.push('Num Vals');\n    vals.push(format(stats.numVals));\n  }\n\n  if (stats.min != null) {\n    headers.push('Min');\n    vals.push(format(stats.min));\n  }\n\n  if (stats.max != null) {\n    headers.push('Max');\n    vals.push(format(stats.max));\n  }\n\n  if (stats.numZeros != null) {\n    headers.push('# Zeros');\n    let zeroPct = '';\n    if (stats.numVals) {\n      zeroPct = stats.numZeros > 0 ?\n          `(${pctFormat(stats.numZeros / stats.numVals)})` :\n          '';\n    }\n\n    vals.push(`${format(stats.numZeros)} ${zeroPct}`);\n  }\n\n  if (stats.numNans != null) {\n    headers.push('# NaNs');\n    let nanPct = '';\n    if (stats.numVals) {\n      nanPct = stats.numNans > 0 ?\n          `(${pctFormat(stats.numNans / stats.numVals)})` :\n          '';\n    }\n\n    vals.push(`${format(stats.numNans)} ${nanPct}`);\n  }\n\n  if (stats.numInfs != null) {\n    headers.push('# Infinity');\n    let infPct = '';\n    if (stats.numVals) {\n      infPct = stats.numInfs > 0 ?\n          `(${pctFormat(stats.numInfs / stats.numVals)})` :\n          '';\n    }\n\n    vals.push(`${format(stats.numInfs)} ${infPct}`);\n  }\n\n  table(container, {headers, values: [vals]}, opts);\n}\n\n/**\n * Formats data to the internal format used by this chart.\n */\nfunction prepareData(data: Array<{value: number}>|number[]|\n                     TypedArray): Array<{value: number}> {\n  if (data.length == null) {\n    throw new Error('input data must be an array');\n  }\n\n  if (data.length === 0) {\n    return [];\n  } else if (typeof data[0] === 'object') {\n    if ((data[0] as {value: number}).value == null) {\n      throw new Error('input data must have a value field');\n    } else {\n      return data as Array<{value: number}>;\n    }\n  } else {\n    const ret = Array(data.length);\n    for (let i = 0; i < data.length; i++) {\n      ret[i] = {value: data[i]};\n    }\n    return ret;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport embed, {Mode, VisualizationSpec} from 'vega-embed';\nimport {TopLevelSpec} from 'vega-lite';\n\nimport {Drawable, Point2D, XYPlotData, XYPlotOptions} from '../types';\nimport {getDefaultHeight, getDefaultWidth} from '../util/dom';\nimport {assert} from '../util/utils';\n\nimport {getDrawArea} from './render_utils';\n\n/**\n * Renders a line chart\n *\n * ```js\n * const series1 = Array(100).fill(0)\n *   .map(y => Math.random() * 100 - (Math.random() * 50))\n *   .map((y, x) => ({ x, y, }));\n *\n * const series2 = Array(100).fill(0)\n *   .map(y => Math.random() * 100 - (Math.random() * 150))\n *   .map((y, x) => ({ x, y, }));\n *\n * const series = ['First', 'Second'];\n * const data = { values: [series1, series2], series }\n *\n * const surface = { name: 'Line chart', tab: 'Charts' };\n * tfvis.render.linechart(surface, data);\n * ```\n *\n * ```js\n * const series1 = Array(100).fill(0)\n *   .map(y => Math.random() * 100 + 50)\n *   .map((y, x) => ({ x, y, }));\n *\n * const data = { values: [series1] }\n *\n * // Render to visor\n * const surface = { name: 'Zoomed Line Chart', tab: 'Charts' };\n * tfvis.render.linechart(surface, data, { zoomToFit: true });\n * ```\n *\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function linechart(\n    container: Drawable, data: XYPlotData,\n    opts: XYPlotOptions = {}): Promise<void> {\n  // Nest data if necessary before further processing\n  const _data = Array.isArray(data.values[0]) ? data.values as Point2D[][] :\n                                                [data.values] as Point2D[][];\n  const numValues = _data[0].length;\n\n  // Create series names if none were passed in.\n  const _series: string[] =\n      data.series ? data.series : _data.map((_, i) => `Series ${i + 1}`);\n  assert(\n      _series.length === _data.length,\n      'Must have an equal number of series labels as there are data series');\n\n  if (opts.seriesColors != null) {\n    assert(\n        opts.seriesColors.length === _data.length,\n        'Must have an equal number of series colors as there are data series');\n  }\n\n  const vlChartValues: VLChartValue[] = [];\n  for (let valueIdx = 0; valueIdx < numValues; valueIdx++) {\n    const v: VLChartValue = {\n      x: valueIdx,\n    };\n\n    _series.forEach((seriesName, seriesIdx) => {\n      const seriesValue = _data[seriesIdx][valueIdx].y;\n      v[seriesName] = seriesValue;\n      v[`${seriesName}-name`] = seriesName;\n    });\n    vlChartValues.push(v);\n  }\n\n  const options = Object.assign({}, defaultOpts, opts);\n\n  const yScale = (): {}|undefined => {\n    if (options.zoomToFit) {\n      return {'zero': false};\n    } else if (options.yAxisDomain != null) {\n      return {'domain': options.yAxisDomain};\n    }\n    return undefined;\n  };\n\n  const sharedEncoding = {\n    x: {\n      field: 'x',\n      type: options.xType,\n      title: options.xLabel,\n    },\n    tooltip: [\n      {field: 'x', type: 'quantitative'},\n      ..._series.map(seriesName => {\n        return {\n          field: seriesName,\n          type: 'quantitative',\n        };\n      }),\n    ]\n  };\n\n  const lineLayers: TopLevelSpec[] = _series.map((seriesName) => {\n    return {\n      // data will be defined at the chart level.\n      'data': undefined,\n      'mark': {'type': 'line', 'clip': true},\n      'encoding': {\n        // Note: the encoding for 'x' is shared\n        // Add a y encoding for this series\n        'y': {\n          'field': seriesName,\n          'type': options.yType,\n          'title': options.yLabel,\n          'scale': yScale(),\n        },\n        'color': {\n          'field': `${seriesName}-name`,\n          'type': 'nominal',\n          'legend': {'values': _series, title: null},\n          'scale': {\n            'range': options.seriesColors,\n          }\n        },\n      }\n    };\n  });\n\n  const tooltipLayer = {\n    'mark': 'rule',\n    'selection': {\n      'hover': {\n        'type': 'single',\n        'on': 'mouseover',\n        'nearest': true,\n        clear: 'mouseout',\n      }\n    },\n    'encoding': {\n      'color': {\n        'value': 'grey',\n        'condition': {\n          'selection': {'not': 'hover'},\n          'value': 'transparent',\n        }\n      }\n    }\n  };\n\n  const drawArea = getDrawArea(container);\n  const spec = {\n    'width': options.width || getDefaultWidth(drawArea),\n    'height': options.height || getDefaultHeight(drawArea),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      }\n    },\n    'data': {'values': vlChartValues},\n    'encoding': sharedEncoding,\n    'layer': [\n      ...lineLayers,\n      tooltipLayer,\n    ],\n  };\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  await embed(drawArea, spec as VisualizationSpec, embedOpts);\n  return Promise.resolve();\n}\n\nconst defaultOpts = {\n  xLabel: 'x',\n  yLabel: 'y',\n  xType: 'quantitative',\n  yType: 'quantitative',\n  zoomToFit: false,\n  fontSize: 11,\n};\n\ninterface VLChartValue {\n  x: number;\n  [key: string]: string|number;\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport embed, {Mode, VisualizationSpec} from 'vega-embed';\n\nimport {Drawable, Point2D, XYPlotData, XYPlotOptions} from '../types';\nimport {getDefaultHeight, getDefaultWidth} from '../util/dom';\nimport {assert} from '../util/utils';\nimport {getDrawArea} from './render_utils';\n\n/**\n * Renders a scatter plot\n *\n * ```js\n * const series1 = Array(100).fill(0)\n *   .map(y => Math.random() * 100 - (Math.random() * 50))\n *   .map((y, x) => ({ x, y, }));\n *\n * const series2 = Array(100).fill(0)\n *   .map(y => Math.random() * 100 - (Math.random() * 150))\n *   .map((y, x) => ({ x, y, }));\n *\n * const series = ['First', 'Second'];\n * const data = { values: [series1, series2], series }\n *\n * const surface = { name: 'Scatterplot', tab: 'Charts' };\n * tfvis.render.scatterplot(surface, data);\n * ```\n *\n */\n/** @doc {heading: 'Charts', namespace: 'render'} */\nexport async function scatterplot(\n    container: Drawable, data: XYPlotData,\n    opts: XYPlotOptions = {}): Promise<void> {\n  let _values = data.values;\n  const _series = data.series == null ? [] : data.series;\n\n  // Nest data if necessary before further processing\n  _values = Array.isArray(_values[0]) ? _values as Point2D[][] :\n                                        [_values] as Point2D[][];\n\n  const values: Point2D[] = [];\n  _values.forEach((seriesData, i) => {\n    const seriesName: string =\n        _series[i] != null ? _series[i] : `Series ${i + 1}`;\n    const seriesVals =\n        seriesData.map(v => Object.assign({}, v, {series: seriesName}));\n    values.push(...seriesVals);\n  });\n\n  if (opts.seriesColors != null) {\n    assert(\n        opts.seriesColors.length === _values.length,\n        'Must have an equal number of series colors as there are data series');\n  }\n\n  const drawArea = getDrawArea(container);\n  const options = Object.assign({}, defaultOpts, opts);\n\n  const embedOpts = {\n    actions: false,\n    mode: 'vega-lite' as Mode,\n    defaultStyle: false,\n  };\n\n  const xDomain = (): {}|undefined => {\n    if (options.zoomToFit) {\n      return {'zero': false};\n    } else if (options.xAxisDomain != null) {\n      return {'domain': options.xAxisDomain};\n    }\n    return undefined;\n  };\n\n  const yDomain = (): {}|undefined => {\n    if (options.zoomToFit) {\n      return {'zero': false};\n    } else if (options.yAxisDomain != null) {\n      return {'domain': options.yAxisDomain};\n    }\n    return undefined;\n  };\n\n  const spec: VisualizationSpec = {\n    'width': options.width || getDefaultWidth(drawArea),\n    'height': options.height || getDefaultHeight(drawArea),\n    'padding': 0,\n    'autosize': {\n      'type': 'fit',\n      'contains': 'padding',\n      'resize': true,\n    },\n    'config': {\n      'axis': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      },\n      'text': {'fontSize': options.fontSize},\n      'legend': {\n        'labelFontSize': options.fontSize,\n        'titleFontSize': options.fontSize,\n      }\n    },\n    //@ts-ignore\n    'data': {\n      'values': values,\n    },\n    'mark': {\n      'type': 'point',\n      'clip': true,\n      'tooltip': {'content': 'data'},\n    },\n    'encoding': {\n      'x': {\n        'field': 'x',\n        'type': options.xType,\n        'title': options.xLabel,\n        'scale': xDomain(),\n      },\n      'y': {\n        'field': 'y',\n        'type': options.yType,\n        'title': options.yLabel,\n        'scale': yDomain(),\n      },\n      'color': {\n        'field': 'series',\n        'type': 'nominal',\n        'scale': {\n          'range': options.seriesColors,\n        }\n      },\n      'shape': {\n        'field': 'series',\n        'type': 'nominal',\n      }\n    },\n  };\n\n  await embed(drawArea, spec, embedOpts);\n  return Promise.resolve();\n}\n\nconst defaultOpts = {\n  xLabel: 'x',\n  yLabel: 'y',\n  xType: 'quantitative',\n  yType: 'quantitative',\n  zoomToFit: false,\n  fontSize: 11,\n};\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Logs} from '@tensorflow/tfjs-layers';\n\nimport {linechart} from '../render/linechart';\nimport {getDrawArea, nextFrame} from '../render/render_utils';\nimport {Drawable, Point2D, XYPlotOptions} from '../types';\nimport {subSurface} from '../util/dom';\n\n/**\n * Renders a tf.Model training 'History'.\n *\n * ```js\n * const model = tf.sequential({\n *  layers: [\n *    tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),\n *    tf.layers.dense({units: 10, activation: 'softmax'}),\n *  ]\n * });\n *\n * model.compile({\n *   optimizer: 'sgd',\n *   loss: 'categoricalCrossentropy',\n *   metrics: ['accuracy']\n * });\n *\n * const data = tf.randomNormal([100, 784]);\n * const labels = tf.randomUniform([100, 10]);\n *\n * function onBatchEnd(batch, logs) {\n *   console.log('Accuracy', logs.acc);\n * }\n *\n * const surface = { name: 'show.history', tab: 'Training' };\n * // Train for 5 epochs with batch size of 32.\n * const history = await model.fit(data, labels, {\n *    epochs: 5,\n *    batchSize: 32\n * });\n *\n * tfvis.show.history(surface, history, ['loss', 'acc']);\n * ```\n *\n * ```js\n * const model = tf.sequential({\n *  layers: [\n *    tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),\n *    tf.layers.dense({units: 10, activation: 'softmax'}),\n *  ]\n * });\n *\n * model.compile({\n *   optimizer: 'sgd',\n *   loss: 'categoricalCrossentropy',\n *   metrics: ['accuracy']\n * });\n *\n * const data = tf.randomNormal([100, 784]);\n * const labels = tf.randomUniform([100, 10]);\n *\n * function onBatchEnd(batch, logs) {\n *   console.log('Accuracy', logs.acc);\n * }\n *\n * const surface = { name: 'show.history live', tab: 'Training' };\n * // Train for 5 epochs with batch size of 32.\n * const history = [];\n * await model.fit(data, labels, {\n *    epochs: 5,\n *    batchSize: 32,\n *    callbacks: {\n *      onEpochEnd: (epoch, log) => {\n *        history.push(log);\n *        tfvis.show.history(surface, history, ['loss', 'acc']);\n *      }\n *    }\n * });\n * ```\n *\n * @param history A history like object. Either a tfjs-layers `History` object\n *  or an array of tfjs-layers `Logs` objects.\n * @param metrics An array of strings for each metric to plot from the history\n *  object. Using this allows you to control which metrics appear on the same\n *  plot.\n * @param opts Optional parameters for the line charts.\n */\n/**\n * @doc {heading: 'Models & Tensors', subheading: 'Model Training', namespace:\n * 'show'}\n */\nexport async function history(\n    container: Drawable, history: HistoryLike, metrics: string[],\n    opts: HistoryOptions = {}): Promise<void> {\n  // Get the draw surface\n  const drawArea = getDrawArea(container);\n\n  // We organize the data from the history object into discrete plot data\n  // objects so that we can group together appropriate metrics into single\n  // multi-series charts.\n  const plots: HistoryPlotData = {};\n  for (const metric of metrics) {\n    if (!(/val_/.test(metric))) {\n      // Non validation metric\n      const values = getValues(history, metric, metrics.indexOf(metric));\n      initPlot(plots, metric);\n      plots[metric].series.push(metric);\n      plots[metric].values.push(values);\n    } else {\n      // Validation metrics are grouped with their equivalent non validation\n      // metrics. Note that the corresponding non validation metric may not\n      // actually be included but we still want to use it as a plot name.\n      const nonValidationMetric = metric.replace('val_', '');\n      initPlot(plots, nonValidationMetric);\n      const values = getValues(history, metric, metrics.indexOf(metric));\n      plots[nonValidationMetric].series.push(metric);\n      plots[nonValidationMetric].values.push(values);\n    }\n  }\n\n  // Render each plot specified above to a new subsurface.\n  // A plot may have multiple series.\n  const plotNames = Object.keys(plots);\n  const options =\n      Object.assign({}, {xLabel: 'Iteration', yLabel: 'Value'}, opts);\n\n  const renderPromises = [];\n  for (const name of plotNames) {\n    const subContainer = subSurface(drawArea, name);\n    const series = plots[name].series;\n    const values = plots[name].values;\n\n    if (series.every(seriesName => Boolean(seriesName.match('acc')))) {\n      // Set a domain of 0-1 if all the series in this plot are related to\n      // accuracy. Can be overridden by setting zoomToFitAccuracy to true.\n      if (options.zoomToFitAccuracy) {\n        options.zoomToFit = true;\n      } else {\n        options.yAxisDomain = [0, 1];\n        delete options.zoomToFit;\n      }\n    }\n\n    const done = linechart(subContainer, {values, series}, options);\n    renderPromises.push(done);\n  }\n  await Promise.all(renderPromises);\n}\n\ninterface HistoryOptions extends XYPlotOptions {\n  zoomToFitAccuracy?: boolean;\n}\n\ntype HistoryLike = Logs[]|Logs[][]|{\n  history: {\n    [key: string]: number[],\n  }\n};\n\ninterface HistoryPlotData {\n  [name: string]: {\n    series: string[],\n    values: Point2D[][],\n  };\n}\n\nfunction initPlot(plot: HistoryPlotData, name: string) {\n  if (plot[name] == null) {\n    plot[name] = {series: [], values: []};\n  }\n}\n\n/*\n * Extracts a list of Point2D's suitable for plotting from a HistoryLike for\n * a single metric.\n * @param history a HistoryLike object\n * @param metric the metric to extract from the logs\n * @param metricIndex this is needed because the historylike can be a nested\n * list of logs for multiple metrics, this index lets us extract the correct\n * list.\n */\nfunction getValues(\n    history: HistoryLike, metric: string, metricIndex: number): Point2D[] {\n  if (Array.isArray(history)) {\n    // If we were passed a nested array we want to get the correct list\n    // for this given metric, metrix index gives us this list.\n    const metricHistory =\n        (Array.isArray(history[0]) ? history[metricIndex] : history) as Logs[];\n    const points: Point2D[] = [];\n\n    for (let i = 0; i < metricHistory.length; i++) {\n      const log = metricHistory[i];\n      points.push({x: i, y: log[metric]});\n    }\n    return points;\n  } else {\n    return history.history[metric].map((y, x) => ({x, y}));\n  }\n}\n\n/**\n * Returns a collection of callbacks to pass to tf.Model.fit. Callbacks are\n * returned for the following events, `onBatchEnd` & `onEpochEnd`.\n *\n * ```js\n * const model = tf.sequential({\n *  layers: [\n *    tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),\n *    tf.layers.dense({units: 10, activation: 'softmax'}),\n *  ]\n * });\n *\n * model.compile({\n *   optimizer: 'sgd',\n *   loss: 'categoricalCrossentropy',\n *   metrics: ['accuracy']\n * });\n *\n * const data = tf.randomNormal([100, 784]);\n * const labels = tf.randomUniform([100, 10]);\n *\n * function onBatchEnd(batch, logs) {\n *   console.log('Accuracy', logs.acc);\n * }\n *\n * const surface = { name: 'show.fitCallbacks', tab: 'Training' };\n * // Train for 5 epochs with batch size of 32.\n * await model.fit(data, labels, {\n *    epochs: 5,\n *    batchSize: 32,\n *    callbacks: tfvis.show.fitCallbacks(surface, ['loss', 'acc']),\n * });\n * ```\n *\n * @param metrics List of metrics to plot.\n * @param opts Optional parameters\n */\n/**\n * @doc {heading: 'Models & Tensors', subheading: 'Model Training', namespace:\n * 'show'}\n */\nexport function fitCallbacks(\n    container: Drawable, metrics: string[],\n    opts: FitCallbackOptions = {}): FitCallbackHandlers {\n  const accumulators: FitCallbackLogs = {};\n  const callbackNames = opts.callbacks || ['onEpochEnd', 'onBatchEnd'];\n  const drawArea = getDrawArea(container);\n\n  const historyOpts = Object.assign({}, opts);\n  delete historyOpts.callbacks;\n  function makeCallbackFor(callbackName: string) {\n    return async (_: number, log: Logs) => {\n      // Set a nicer x axis name where possible\n      if ((/batch/i).test(callbackName)) {\n        historyOpts.xLabel = 'Batch';\n      } else if ((/epoch/i).test(callbackName)) {\n        historyOpts.xLabel = 'Epoch';\n      }\n\n      // Because of how the _ (iteration) numbers are given in the layers api\n      // we have to store each metric for each callback in different arrays else\n      // we cannot get accurate 'global' batch numbers for onBatchEnd.\n\n      // However at render time we want to be able to combine metrics for a\n      // given callback. So here we make a nested list of metrics, the first\n      // level are arrays for each callback, the second level contains arrays\n      // (of logs) for each metric within that callback.\n\n      const metricLogs: Logs[][] = [];\n      const presentMetrics: string[] = [];\n      for (const metric of metrics) {\n        // not all logs have all kinds of metrics.\n        if (log[metric] != null) {\n          presentMetrics.push(metric);\n\n          const accumulator =\n              getAccumulator(accumulators, callbackName, metric);\n          accumulator.push({[metric]: log[metric]});\n          metricLogs.push(accumulator);\n        }\n      }\n\n      const subContainer =\n          subSurface(drawArea, callbackName, {title: callbackName});\n      history(subContainer, metricLogs, presentMetrics, historyOpts);\n      await nextFrame();\n    };\n  }\n\n  const callbacks: FitCallbackHandlers = {};\n  callbackNames.forEach((name: string) => {\n    callbacks[name] = makeCallbackFor(name);\n  });\n  return callbacks;\n}\n\ninterface FitCallbackHandlers {\n  [key: string]: (iteration: number, log: Logs) => Promise<void>;\n}\n\ninterface FitCallbackLogs {\n  [callback: string]: {\n    [metric: string]: Logs[],\n  };\n}\n\ninterface FitCallbackOptions extends HistoryOptions {\n  /**\n   * Array of callback names. Valid options\n   * are 'onEpochEnd' and 'onBatchEnd'. Defaults to ['onEpochEnd',\n   * 'onBatchEnd'].\n   */\n  callbacks?: string[];\n}\n\nfunction getAccumulator(\n    accumulators: FitCallbackLogs, callback: string, metric: string): Logs[] {\n  if (accumulators[callback] == null) {\n    accumulators[callback] = {};\n  }\n  if (accumulators[callback][metric] == null) {\n    accumulators[callback][metric] = [];\n  }\n  return accumulators[callback][metric];\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport * as tf from '@tensorflow/tfjs';\n// tslint:disable-next-line: no-imports-from-dist\nimport {Layer} from '@tensorflow/tfjs-layers/dist/engine/topology';\n\nimport {histogram} from '../render/histogram';\nimport {getDrawArea} from '../render/render_utils';\nimport {table} from '../render/table';\nimport {Drawable, HistogramStats} from '../types';\nimport {subSurface} from '../util/dom';\nimport {tensorStats} from '../util/math';\n\n/**\n * Renders a summary of a tf.Model. Displays a table with layer information.\n *\n * ```js\n * const model = tf.sequential({\n *  layers: [\n *    tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),\n *    tf.layers.dense({units: 10, activation: 'softmax'}),\n *  ]\n * });\n *\n * const surface = { name: 'Model Summary', tab: 'Model Inspection'};\n * tfvis.show.modelSummary(surface, model);\n * ```\n *\n */\n/**\n * @doc {\n *  heading: 'Models & Tensors',\n *  subheading: 'Model Inspection',\n *  namespace: 'show'\n * }\n */\nexport async function modelSummary(container: Drawable, model: tf.LayersModel) {\n  const drawArea = getDrawArea(container);\n  const summary = getModelSummary(model);\n\n  const headers = [\n    'Layer Name',\n    'Output Shape',\n    '# Of Params',\n    'Trainable',\n  ];\n\n  const values = summary.layers.map(\n      l =>\n          [l.name,\n           l.outputShape,\n           l.parameters,\n           l.trainable,\n  ]);\n\n  table(drawArea, {headers, values});\n}\n\n/**\n * Renders summary information about a layer and a histogram of parameters in\n * that layer.\n *\n * ```js\n * const model = tf.sequential({\n *  layers: [\n *    tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),\n *    tf.layers.dense({units: 10, activation: 'softmax'}),\n *  ]\n * });\n *\n * const surface = { name: 'Layer Summary', tab: 'Model Inspection'};\n * tfvis.show.layer(surface, model.getLayer(undefined, 1));\n * ```\n *\n */\n/**\n * @doc {\n *  heading: 'Models & Tensors',\n *  subheading: 'Model Inspection',\n *  namespace: 'show'\n * }\n */\nexport async function layer(container: Drawable, layer: Layer) {\n  const drawArea = getDrawArea(container);\n  const details = await getLayerDetails(layer);\n\n  const headers = [\n    'Weight Name',\n    'Shape',\n    'Min',\n    'Max',\n    '# Params',\n    '# Zeros',\n    '# NaNs',\n    '# Infinity',\n  ];\n\n  // Show layer summary\n  const weightsInfoSurface = subSurface(drawArea, 'layer-weights-info');\n  const detailValues = details.map(\n      l =>\n          [l.name, l.shape, l.stats.min, l.stats.max, l.weight.size,\n           l.stats.numZeros, l.stats.numNans, l.stats.numInfs]);\n\n  table(weightsInfoSurface, {headers, values: detailValues});\n\n  const histogramSelectorSurface = subSurface(drawArea, 'select-layer');\n  const layerValuesHistogram = subSurface(drawArea, 'param-distribution');\n\n  const handleSelection = async (layerName: string) => {\n    const layer = details.filter(d => d.name === layerName)[0];\n    const weights = await layer.weight.data();\n\n    histogram(\n        layerValuesHistogram, weights, {height: 150, width: 460, stats: false});\n  };\n\n  addHistogramSelector(\n      details.map(d => d.name), histogramSelectorSurface, handleSelection);\n}\n\n//\n// Helper functions\n//\n\nfunction getModelSummary(model: tf.LayersModel) {\n  return {\n    layers: model.layers.map(getLayerSummary),\n  };\n}\n\n/*\n * Gets summary information/metadata about a layer.\n */\nfunction getLayerSummary(layer: Layer): LayerSummary {\n  let outputShape: string;\n  if (Array.isArray(layer.outputShape[0])) {\n    const shapes = (layer.outputShape as number[][]).map(s => formatShape(s));\n    outputShape = `[${shapes.join(', ')}]`;\n  } else {\n    outputShape = formatShape(layer.outputShape as number[]);\n  }\n\n  return {\n    name: layer.name,\n    trainable: layer.trainable,\n    parameters: layer.countParams(),\n    outputShape,\n  };\n}\n\ninterface LayerSummary {\n  name: string;\n  trainable: boolean;\n  parameters: number;\n  outputShape: string;\n}\n\n/*\n * Gets summary stats and shape for all weights in a layer.\n */\nasync function getLayerDetails(layer: Layer): Promise<Array<\n    {name: string, stats: HistogramStats, shape: string, weight: tf.Tensor}>> {\n  const weights = layer.getWeights();\n  const layerVariables = layer.weights;\n  const statsPromises = weights.map(tensorStats);\n  const stats = await Promise.all(statsPromises);\n  const shapes = weights.map(w => w.shape);\n  return weights.map((weight, i) => ({\n                       name: layerVariables[i].name,\n                       stats: stats[i],\n                       shape: formatShape(shapes[i]),\n                       weight,\n                     }));\n}\n\nfunction formatShape(shape: number[]): string {\n  const oShape: Array<number|string> = shape.slice();\n  if (oShape.length === 0) {\n    return 'Scalar';\n  }\n  if (oShape[0] === null) {\n    oShape[0] = 'batch';\n  }\n  return `[${oShape.join(',')}]`;\n}\n\nfunction addHistogramSelector(\n    items: string[], parent: HTMLElement,\n    // tslint:disable-next-line:no-any\n    selectionHandler: (item: string) => any) {\n  const select = `\n    <select>\n      ${items.map((i) => `<option value=${i}>${i}</option>`)}\n    </select>\n  `;\n\n  const button = `<button>Show Values Distribution for:</button>`;\n  const content = `<div>${button}${select}</div>`;\n\n  parent.innerHTML = content;\n\n  // Add listeners\n  const buttonEl = parent.querySelector('button');\n  const selectEl = parent.querySelector('select');\n\n  buttonEl.addEventListener('click', () => {\n    selectionHandler(selectEl.selectedOptions[0].label);\n  });\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {getDrawArea} from '../render/render_utils';\nimport {table} from '../render/table';\nimport {Drawable} from '../types';\n\n/**\n * Renders a per class accuracy table for classification task evaluation\n *\n * ```js\n * const labels = tf.tensor1d([0, 0, 1, 2, 2, 2]);\n * const predictions = tf.tensor1d([0, 0, 0, 2, 1, 1]);\n *\n * const result = await tfvis.metrics.perClassAccuracy(labels, predictions);\n * console.log(result)\n *\n * const container = {name: 'Per Class Accuracy', tab: 'Evaluation'};\n * const categories = ['cat', 'dog', 'mouse'];\n * await tfvis.show.perClassAccuracy(container, result, categories);\n * ```\n *\n * @param container A `{name: string, tab?: string}` object specifying which\n * surface to render to.\n * @param classAccuracy An `Array<{accuracy: number, count: number}>` array with\n * the accuracy data. See metrics.perClassAccuracy for details on how to\n * generate this object.\n * @param classLabels An array of string labels for the classes in\n * `classAccuracy`. Optional.\n *\n */\nexport async function showPerClassAccuracy(\n    container: Drawable,\n    classAccuracy: Array<{accuracy: number, count: number}>,\n    classLabels?: string[]) {\n  const drawArea = getDrawArea(container);\n\n  const headers = [\n    'Class',\n    'Accuracy',\n    '# Samples',\n  ];\n  const values: Array<Array<(string | number)>> = [];\n\n  for (let i = 0; i < classAccuracy.length; i++) {\n    const label = classLabels ? classLabels[i] : i.toString();\n    const classAcc = classAccuracy[i];\n    values.push([label, classAcc.accuracy, classAcc.count]);\n  }\n\n  return table(drawArea, {headers, values});\n}\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n\nimport {Tensor} from '@tensorflow/tfjs';\n\nimport {histogram} from '../render/histogram';\nimport {getDrawArea} from '../render/render_utils';\nimport {Drawable} from '../types';\nimport {tensorStats} from '../util/math';\n\n/**\n * Shows a histogram with the distribution of all values in a given tensor.\n *\n * ```js\n * const tensor = tf.tensor1d([0, 0, 0, 0, 2, 3, 4]);\n *\n * const surface = {name: 'Values Distribution', tab: 'Model Inspection'};\n * await tfvis.show.valuesDistribution(surface, tensor);\n * ```\n *\n */\n/**\n * @doc {heading: 'Models & Tensors', subheading: 'Model Inspection', namespace:\n * 'show'}\n */\nexport async function valuesDistribution(container: Drawable, tensor: Tensor) {\n  const drawArea = getDrawArea(container);\n  const stats = await tensorStats(tensor);\n  const values = await tensor.data();\n  histogram(drawArea, values, {height: 150, stats});\n}\n","\nimport * as tf from '@tensorflow/tfjs';\nimport * as tfvis from '@tensorflow/tfjs-vis';\n\nimport {TEXT_DATA_URLS, TextData} from './data';\nimport {SaveableLSTMTextGenerator} from './index';\n\n// UI controls.\nconst testText = document.getElementById('test-text');\nconst createOrLoadModelButton = document.getElementById('create-or-load-model');\nconst deleteModelButton = document.getElementById('delete-model');\nconst trainModelButton = document.getElementById('train-model');\nconst generateTextButton = document.getElementById('generate-text');\n\nconst appStatus = document.getElementById('app-status');\nconst textGenerationStatus = document.getElementById('text-generation-status');\nconst loadTextDataButton = document.getElementById('load-text-data');\nconst textDataSelect = document.getElementById('text-data-select');\n\nconst lstmLayersSizesInput = document.getElementById('lstm-layer-sizes');\n\nconst examplesPerEpochInput = document.getElementById('examples-per-epoch');\nconst batchSizeInput = document.getElementById('batch-size');\nconst epochsInput = document.getElementById('epochs');\nconst validationSplitInput = document.getElementById('validation-split');\nconst learningRateInput = document.getElementById('learning-rate');\n\nconst generateLengthInput = document.getElementById('generate-length');\nconst temperatureInput = document.getElementById('temperature');\nconst seedTextInput = document.getElementById('seed-text');\nconst generatedTextInput = document.getElementById('generated-text');\n\nconst modelAvailableInfo = document.getElementById('model-available');\n\nconst sampleLen = 40;\nconst sampleStep = 3;\n\n// Module-global instance of TextData.\nlet textData;\n\n// Module-global instance of SaveableLSTMTextGenerator.\nlet textGenerator;\n\nfunction logStatus(message) {\n  appStatus.textContent = message;\n}\n\nlet batchLossValues;\nlet epochLossValues;\n\n/**\n * A function to call when a training process starts.\n */\nexport function onTrainBegin() {\n  batchLossValues = [];\n  epochLossValues = [];\n  logStatus('Starting model training...');\n}\n\n/**\n * A function to call when a batch is competed during training.\n *\n * @param {number} loss Loss value of the current batch.\n * @param {number} progress Total training progress, as a number between 0\n *   and 1.\n * @param {number} examplesPerSec The training speed in the batch, in examples\n *   per second.\n */\nexport function onTrainBatchEnd(logs, progress, examplesPerSec) {\n  logStatus(\n      `Model training: ${(progress * 1e2).toFixed(1)}% complete... ` +\n      `(${examplesPerSec.toFixed(0)} examples/s)`);\n  batchLossValues.push(logs);\n  const container = document.getElementById('batch-loss-canvas');\n  tfvis.show.history(container, batchLossValues, ['loss'], {\n    height: 300,\n    zoomToFit: true,\n    xLabel: 'Batch',\n  });\n}\n\nexport function onTrainEpochEnd(logs) {\n  epochLossValues.push(logs);\n  const container = document.getElementById('epoch-loss-canvas');\n  tfvis.show.history(container, epochLossValues, ['loss', 'val_loss'], {\n    height: 300,\n    zoomToFit: true,\n    xLabel: 'Epoch',\n  });\n}\n\n/**\n * A function to call when text generation begins.\n *\n * @param {string} seedSentence: The seed sentence being used for text\n *   generation.\n */\nexport function onTextGenerationBegin() {\n  generatedTextInput.value = '';\n  logStatus('Generating text...');\n}\n\n/**\n * A function to call each time a character is obtained during text generation.\n *\n * @param {string} char The just-generated character.\n */\nexport async function onTextGenerationChar(char) {\n  generatedTextInput.value += char;\n  generatedTextInput.scrollTop = generatedTextInput.scrollHeight;\n  const charCount = generatedTextInput.value.length;\n  const generateLength = parseInt(generateLengthInput.value);\n  const status = `Generating text: ${charCount}/${generateLength} complete...`;\n  logStatus(status);\n  textGenerationStatus.textContent = status;\n  await tf.nextFrame();\n}\n\nexport function setUpUI() {\n  /**\n   * Refresh the status of locally saved model (in IndexedDB).\n   */\n  async function refreshLocalModelStatus() {\n    const modelInfo = await textGenerator.checkStoredModelStatus();\n    if (modelInfo == null) {\n      modelAvailableInfo.innerText =\n          `No locally saved model for \"${textGenerator.modelIdentifier()}\".`;\n      createOrLoadModelButton.textContent = 'Create model';\n      deleteModelButton.disabled = true;\n      enableModelParameterControls();\n    } else {\n      modelAvailableInfo.innerText =\n          `Saved @ ${modelInfo.dateSaved.toISOString()}`;\n      createOrLoadModelButton.textContent = 'Load model';\n      deleteModelButton.disabled = false;\n      disableModelParameterControls();\n    }\n    createOrLoadModelButton.disabled = false;\n  }\n\n  function disableModelButtons() {\n    createOrLoadModelButton.disabled = true;\n    deleteModelButton.disabled = true;\n    trainModelButton.disabled = true;\n    generateTextButton.disabled = true;\n  }\n\n  function enableModelButtons() {\n    createOrLoadModelButton.disabled = false;\n    deleteModelButton.disabled = false;\n    trainModelButton.disabled = false;\n    generateTextButton.disabled = false;\n  }\n\n  /**\n   * Use `textGenerator` to generate random text, show the characters on the\n   * screen as they are generated one by one.\n   */\n  async function generateText() {\n    try {\n      disableModelButtons();\n\n      if (textGenerator == null) {\n        logStatus('ERROR: Please load text data set first.');\n        return;\n      }\n      const generateLength = parseInt(generateLengthInput.value);\n      const temperature = parseFloat(temperatureInput.value);\n      if (!(generateLength > 0)) {\n        logStatus(\n            `ERROR: Invalid generation length: ${generateLength}. ` +\n            `Generation length must be a positive number.`);\n        enableModelButtons();\n        return;\n      }\n      if (!(temperature > 0 && temperature <= 1)) {\n        logStatus(\n            `ERROR: Invalid temperature: ${temperature}. ` +\n            `Temperature must be a positive number.`);\n        enableModelButtons();\n        return;\n      }\n\n      let seedSentence;\n      let seedSentenceIndices;\n      if (seedTextInput.value.length === 0) {\n        // Seed sentence is not specified yet. Get it from the data.\n        [seedSentence, seedSentenceIndices] = textData.getRandomSlice();\n        seedTextInput.value = seedSentence;\n      } else {\n        seedSentence = seedTextInput.value;\n        if (seedSentence.length < textData.sampleLen()) {\n          logStatus(\n              `ERROR: Seed text must have a length of at least ` +\n              `${textData.sampleLen()}, but has a length of ` +\n              `${seedSentence.length}.`);\n          enableModelButtons();\n          return;\n        }\n        seedSentence = seedSentence.slice(\n            seedSentence.length - textData.sampleLen(), seedSentence.length);\n        seedSentenceIndices = textData.textToIndices(seedSentence);\n      }\n\n      const sentence = await textGenerator.generateText(\n          seedSentenceIndices, generateLength, temperature);\n      generatedTextInput.value = sentence;\n      const status = 'Done generating text.';\n      logStatus(status);\n      textGenerationStatus.value = status;\n\n      enableModelButtons();\n\n      return sentence;\n    } catch (err) {\n      logStatus(`ERROR: Failed to generate text: ${err.message}, ${err.stack}`);\n    }\n  }\n\n  function disableModelParameterControls() {\n    lstmLayersSizesInput.disabled = true;\n  }\n\n  function enableModelParameterControls() {\n    lstmLayersSizesInput.disabled = false;\n  }\n\n  function updateModelParameterControls(lstmLayerSizes) {\n    lstmLayersSizesInput.value = lstmLayerSizes;\n  }\n\n  function updateTextInputParameters() {\n    Object.keys(TEXT_DATA_URLS).forEach(key => {\n      var opt = document.createElement('option');\n      opt.value = key;\n      opt.innerHTML = TEXT_DATA_URLS[key].needle;\n      textDataSelect.appendChild(opt);\n    });\n  }\n\n  function hashCode(str) {\n    let hash = 5381, i = str.length;\n    while (i) {\n      hash = (hash * 33) ^ str.charCodeAt(--i);\n    }\n    return hash >>> 0;\n  }\n\n  /**\n   * Initialize UI state.\n   */\n\n  disableModelParameterControls();\n\n  /**\n   * Update Text Inputs\n   */\n  updateTextInputParameters();\n\n  /**\n   * Wire up UI callbacks.\n   */\n\n  loadTextDataButton.addEventListener('click', async () => {\n    textDataSelect.disabled = true;\n    loadTextDataButton.disabled = true;\n    let dataIdentifier = textDataSelect.value;\n    const url = TEXT_DATA_URLS[dataIdentifier].url;\n    if (testText.value.length === 0) {\n      try {\n        logStatus(`Loading text data from URL: ${url} ...`);\n        const response = await fetch(url);\n        const textString = await response.text();\n        testText.value = textString;\n        logStatus(\n            `Done loading text data ` +\n            `(length=${(textString.length / 1024).toFixed(1)}k). ` +\n            `Next, please load or create model.`);\n      } catch (err) {\n        logStatus('Failed to load text data: ' + err.message);\n      }\n      if (testText.value.length === 0) {\n        logStatus('ERROR: Empty text data.');\n        return;\n      }\n    } else {\n      dataIdentifier = hashCode(testText.value);\n    }\n    textData =\n        new TextData(dataIdentifier, testText.value, sampleLen, sampleStep);\n    textGenerator = new SaveableLSTMTextGenerator(textData);\n    await refreshLocalModelStatus();\n  });\n\n  createOrLoadModelButton.addEventListener('click', async () => {\n    createOrLoadModelButton.disabled = true;\n    if (textGenerator == null) {\n      createOrLoadModelButton.disabled = false;\n      logStatus('ERROR: Please load text data set first.');\n      return;\n    }\n\n    if (await textGenerator.checkStoredModelStatus()) {\n      // Load locally-saved model.\n      logStatus('Loading model from IndexedDB... Please wait.');\n      await textGenerator.loadModel();\n      updateModelParameterControls(textGenerator.lstmLayerSizes());\n      logStatus(\n          'Done loading model from IndexedDB. ' +\n          'Now you can train the model further or use it to generate text.');\n    } else {\n      // Create model from scratch.\n      logStatus('Creating model... Please wait.');\n      const lstmLayerSizes = lstmLayersSizesInput.value.trim().split(',').map(\n          s => parseInt(s));\n\n      // Sanity check on the LSTM layer sizes.\n      if (lstmLayerSizes.length === 0) {\n        logStatus('ERROR: Invalid LSTM layer sizes.');\n        return;\n      }\n      for (let i = 0; i < lstmLayerSizes.length; ++i) {\n        const lstmLayerSize = lstmLayerSizes[i];\n        if (!(lstmLayerSize > 0)) {\n          logStatus(\n              `ERROR: lstmLayerSizes must be a positive integer, ` +\n              `but got ${lstmLayerSize} for layer ${i + 1} ` +\n              `of ${lstmLayerSizes.length}.`);\n          return;\n        }\n      }\n\n      await textGenerator.createModel(lstmLayerSizes);\n      logStatus(\n          'Done creating model. ' +\n          'Now you can train the model or use it to generate text.');\n    }\n\n    trainModelButton.disabled = false;\n    generateTextButton.disabled = false;\n  });\n\n  deleteModelButton.addEventListener('click', async () => {\n    if (textGenerator == null) {\n      logStatus('ERROR: Please load text data set first.');\n      return;\n    }\n    if (confirm(\n            `Are you sure you want to delete the model ` +\n            `'${textGenerator.modelIdentifier()}'?`)) {\n      console.log(await textGenerator.removeModel());\n      await refreshLocalModelStatus();\n    }\n  });\n\n  trainModelButton.addEventListener('click', async () => {\n    if (textGenerator == null) {\n      logStatus('ERROR: Please load text data set first.');\n      return;\n    }\n\n    const numEpochs = parseInt(epochsInput.value);\n    if (!(numEpochs > 0)) {\n      logStatus(`ERROR: Invalid number of epochs: ${numEpochs}`);\n      return;\n    }\n    const examplesPerEpoch = parseInt(examplesPerEpochInput.value);\n    if (!(examplesPerEpoch > 0)) {\n      logStatus(`ERROR: Invalid examples per epoch: ${examplesPerEpoch}`);\n      return;\n    }\n    const batchSize = parseInt(batchSizeInput.value);\n    if (!(batchSize > 0)) {\n      logStatus(`ERROR: Invalid batch size: ${batchSize}`);\n      return;\n    }\n    const validationSplit = parseFloat(validationSplitInput.value);\n    if (!(validationSplit >= 0 && validationSplit < 1)) {\n      logStatus(`ERROR: Invalid validation split: ${validationSplit}`);\n      return;\n    }\n    const learningRate = parseFloat(learningRateInput.value);\n    if (!(learningRate > 0)) {\n      logStatus(`ERROR: Invalid learning rate: ${learningRate}`);\n      return;\n    }\n\n    textGenerator.compileModel(learningRate);\n    disableModelButtons();\n    await textGenerator.fitModel(\n        numEpochs, examplesPerEpoch, batchSize, validationSplit);\n    console.log(await textGenerator.saveModel());\n    await refreshLocalModelStatus();\n    enableModelButtons();\n\n    await generateText();\n  });\n\n  generateTextButton.addEventListener('click', async () => {\n    if (textGenerator == null) {\n      logStatus('ERROR: Load text data set first.');\n      return;\n    }\n    await generateText();\n  });\n}\n","\nimport * as tf from '@tensorflow/tfjs';\n\nimport {TextData} from './data';\nimport * as model from './model';\nimport {onTextGenerationBegin, onTextGenerationChar, onTrainBatchEnd, onTrainBegin, onTrainEpochEnd, setUpUI} from './ui';\n\n/**\n * Class that manages LSTM-based text generation.\n *\n * This class manages the following:\n *\n * - Creating and training a LSTM model, written with the tf.layers API, to\n *   predict the next character given a sequence of input characters.\n * - Generating random text using the LSTM model.\n */\nexport class LSTMTextGenerator {\n  /**\n   * Constructor of NeuralNetworkTextGenerator.\n   *\n   * @param {TextData} textData An instance of `TextData`.\n   */\n  constructor(textData) {\n    this.textData_ = textData;\n    this.charSetSize_ = textData.charSetSize();\n    this.sampleLen_ = textData.sampleLen();\n    this.textLen_ = textData.textLen();\n  }\n\n  /**\n   * Create LSTM model from scratch.\n   *\n   * @param {number | number[]} lstmLayerSizes Sizes of the LSTM layers, as a\n   *   number or an non-empty array of numbers.\n   */\n  createModel(lstmLayerSizes) {\n    this.model = model.createModel(\n        this.sampleLen_, this.charSetSize_, lstmLayerSizes);\n  }\n\n  /**\n   * Compile model for training.\n   *\n   * @param {number} learningRate The learning rate to use during training.\n   */\n  compileModel(learningRate) {\n    model.compileModel(this.model, learningRate);\n  }\n\n  /**\n   * Train the LSTM model.\n   *\n   * @param {number} numEpochs Number of epochs to train the model for.\n   * @param {number} examplesPerEpoch Number of epochs to use in each training\n   *   epochs.\n   * @param {number} batchSize Batch size to use during training.\n   * @param {number} validationSplit Validation split to be used during the\n   *   training epochs.\n   */\n  async fitModel(numEpochs, examplesPerEpoch, batchSize, validationSplit) {\n    let batchCount = 0;\n    const batchesPerEpoch = examplesPerEpoch / batchSize;\n    const totalBatches = numEpochs * batchesPerEpoch;\n    let t = new Date().getTime();\n\n    onTrainBegin();\n    const callbacks = {\n      onBatchEnd: async (batch, logs) => {\n        // Calculate the training speed in the current batch, in # of\n        // examples per second.\n        const t1 = new Date().getTime();\n        const examplesPerSec = batchSize / ((t1 - t) / 1e3);\n        t = t1;\n        onTrainBatchEnd(logs, ++batchCount / totalBatches, examplesPerSec);\n      },\n      onEpochEnd: async (epoch, logs) => {\n        onTrainEpochEnd(logs);\n      }\n    };\n\n    await model.fitModel(\n        this.model, this.textData_, numEpochs, examplesPerEpoch, batchSize,\n        validationSplit, callbacks);\n  }\n\n  /**\n   * Generate text using the LSTM model.\n   *\n   * @param {number[]} sentenceIndices Seed sentence, represented as the\n   *   indices of the constituent characters.\n   * @param {number} length Length of the text to generate, in number of\n   *   characters.\n   * @param {number} temperature Temperature parameter. Must be a number > 0.\n   * @returns {string} The generated text.\n   */\n  async generateText(sentenceIndices, length, temperature) {\n    onTextGenerationBegin();\n    return await model.generateText(\n        this.model, this.textData_, sentenceIndices, length, temperature,\n        onTextGenerationChar);\n  }\n};\n\n/**\n * A subclass of LSTMTextGenerator that supports model saving and loading.\n *\n * The model is saved to and loaded from browser's IndexedDB.\n */\nexport class SaveableLSTMTextGenerator extends LSTMTextGenerator {\n  /**\n   * Constructor of NeuralNetworkTextGenerator.\n   *\n   * @param {TextData} textData An instance of `TextData`.\n   */\n  constructor(textData) {\n    super(textData);\n    this.modelIdentifier_ = textData.dataIdentifier();\n    this.MODEL_SAVE_PATH_PREFIX_ = 'indexeddb://lstm-text-generation';\n    this.modelSavePath_ =\n        `${this.MODEL_SAVE_PATH_PREFIX_}/${this.modelIdentifier_}`;\n  }\n\n  /**\n   * Get model identifier.\n   *\n   * @returns {string} The model identifier.\n   */\n  modelIdentifier() {\n    return this.modelIdentifier_;\n  }\n\n  /**\n   * Create LSTM model if it is not saved locally; load it if it is.\n   *\n   * @param {number | number[]} lstmLayerSizes Sizes of the LSTM layers, as a\n   *   number or an non-empty array of numbers.\n   */\n  async loadModel(lstmLayerSizes) {\n    const modelsInfo = await tf.io.listModels();\n    if (this.modelSavePath_ in modelsInfo) {\n      console.log(`Loading existing model...`);\n      this.model = await tf.loadLayersModel(this.modelSavePath_);\n      console.log(`Loaded model from ${this.modelSavePath_}`);\n    } else {\n      throw new Error(\n          `Cannot find model at ${this.modelSavePath_}. ` +\n          `Creating model from scratch.`);\n    }\n  }\n\n  /**\n   * Save the model in IndexedDB.\n   *\n   * @returns ModelInfo from the saving, if the saving succeeds.\n   */\n  async saveModel() {\n    if (this.model == null) {\n      throw new Error('Cannot save model before creating model.');\n    } else {\n      return await this.model.save(this.modelSavePath_);\n    }\n  }\n\n  /**\n   * Remove the locally saved model from IndexedDB.\n   */\n  async removeModel() {\n    if (await this.checkStoredModelStatus() == null) {\n      throw new Error(\n          'Cannot remove locally saved model because it does not exist.');\n    }\n    return await tf.io.removeModel(this.modelSavePath_);\n  }\n\n  /**\n   * Check the status of locally saved model.\n   *\n   * @returns If the locally saved model exists, the model info as a JSON\n   *   object. Else, `undefined`.\n   */\n  async checkStoredModelStatus() {\n    const modelsInfo = await tf.io.listModels();\n    return modelsInfo[this.modelSavePath_];\n  }\n\n  /**\n   * Get a representation of the sizes of the LSTM layers in the model.\n   *\n   * @returns {number | number[]} The sizes (i.e., number of units) of the\n   *   LSTM layers that the model contains. If there is only one LSTM layer, a\n   *   single number is returned; else, an Array of numbers is returned.\n   */\n  lstmLayerSizes() {\n    if (this.model == null) {\n      throw new Error('Create model first.');\n    }\n    const numLSTMLayers = this.model.layers.length - 1;\n    const layerSizes = [];\n    for (let i = 0; i < numLSTMLayers; ++i) {\n      layerSizes.push(this.model.layers[i].units);\n    }\n    return layerSizes.length === 1 ? layerSizes[0] : layerSizes;\n  }\n}\n\nsetUpUI();\n"]}